DIR : /home/kozerus/public_html/wz/wz_sailboat.html

/home/kozerus/public_html/wz

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
	<META HTTP-EQUIV="imagetoolbar" CONTENT="no">
	<title>/ko/wz.html 20240220_1800 wz_sailboat </title>

<!--
	<title>/ko/wz.html 20240220_1510 div_tracker </title>
	<title>/ko/wz.html 20240220_1510  </title>
	<title>/ko/wz.html 20240220_1510 script_csv2json() kd_display() startup() kd_ajax() </title>
	<title>/ko/wz.html 20240220_1500</title>
	-->


	<link rel="stylesheet" type="text/css" href="/js/wz/newwalterzorn.css">

	<script id="fb_extras_jquery_min_17_js" src='data:/text/plain;base64,LyohIGpRdWVyeSB2MS43IGpxdWVyeS5jb20gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gY0EoYSl7cmV0dXJuIGYuaXNXaW5kb3coYSk/YTphLm5vZGVUeXBlPT09OT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1mdW5jdGlvbiBjeChhKXtpZighY21bYV0pe3ZhciBiPWMuYm9keSxkPWYoIjwiK2ErIj4iKS5hcHBlbmRUbyhiKSxlPWQuY3NzKCJkaXNwbGF5Iik7ZC5yZW1vdmUoKTtpZihlPT09Im5vbmUifHxlPT09IiIpe2NufHwoY249Yy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxjbi5mcmFtZUJvcmRlcj1jbi53aWR0aD1jbi5oZWlnaHQ9MCksYi5hcHBlbmRDaGlsZChjbik7aWYoIWNvfHwhY24uY3JlYXRlRWxlbWVudCljbz0oY24uY29udGVudFdpbmRvd3x8Y24uY29udGVudERvY3VtZW50KS5kb2N1bWVudCxjby53cml0ZSgoYy5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiPyI8IWRvY3R5cGUgaHRtbD4iOiIiKSsiPGh0bWw+PGJvZHk+IiksY28uY2xvc2UoKTtkPWNvLmNyZWF0ZUVsZW1lbnQoYSksY28uYm9keS5hcHBlbmRDaGlsZChkKSxlPWYuY3NzKGQsImRpc3BsYXkiKSxiLnJlbW92ZUNoaWxkKGNuKX1jbVthXT1lfXJldHVybiBjbVthXX1mdW5jdGlvbiBjdyhhLGIpe3ZhciBjPXt9O2YuZWFjaChjcy5jb25jYXQuYXBwbHkoW10sY3Muc2xpY2UoMCxiKSksZnVuY3Rpb24oKXtjW3RoaXNdPWF9KTtyZXR1cm4gY31mdW5jdGlvbiBjdigpe2N0PWJ9ZnVuY3Rpb24gY3UoKXtzZXRUaW1lb3V0KGN2LDApO3JldHVybiBjdD1mLm5vdygpfWZ1bmN0aW9uIGNsKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGIpe319ZnVuY3Rpb24gY2soKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gY2UoYSxjKXthLmRhdGFGaWx0ZXImJihjPWEuZGF0YUZpbHRlcihjLGEuZGF0YVR5cGUpKTt2YXIgZD1hLmRhdGFUeXBlcyxlPXt9LGcsaCxpPWQubGVuZ3RoLGosaz1kWzBdLGwsbSxuLG8scDtmb3IoZz0xO2c8aTtnKyspe2lmKGc9PT0xKWZvcihoIGluIGEuY29udmVydGVycyl0eXBlb2YgaD09InN0cmluZyImJihlW2gudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2hdKTtsPWssaz1kW2ddO2lmKGs9PT0iKiIpaz1sO2Vsc2UgaWYobCE9PSIqIiYmbCE9PWspe209bCsiICIrayxuPWVbbV18fGVbIiogIitrXTtpZighbil7cD1iO2ZvcihvIGluIGUpe2o9by5zcGxpdCgiICIpO2lmKGpbMF09PT1sfHxqWzBdPT09IioiKXtwPWVbalsxXSsiICIra107aWYocCl7bz1lW29dLG89PT0hMD9uPXA6cD09PSEwJiYobj1vKTticmVha319fX0hbiYmIXAmJmYuZXJyb3IoIk5vIGNvbnZlcnNpb24gZnJvbSAiK20ucmVwbGFjZSgiICIsIiB0byAiKSksbiE9PSEwJiYoYz1uP24oYyk6cChvKGMpKSl9fXJldHVybiBjfWZ1bmN0aW9uIGNkKGEsYyxkKXt2YXIgZT1hLmNvbnRlbnRzLGY9YS5kYXRhVHlwZXMsZz1hLnJlc3BvbnNlRmllbGRzLGgsaSxqLGs7Zm9yKGkgaW4gZylpIGluIGQmJihjW2dbaV1dPWRbaV0pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGg9PT1iJiYoaD1hLm1pbWVUeXBlfHxjLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaClmb3IoaSBpbiBlKWlmKGVbaV0mJmVbaV0udGVzdChoKSl7Zi51bnNoaWZ0KGkpO2JyZWFrfWlmKGZbMF1pbiBkKWo9ZlswXTtlbHNle2ZvcihpIGluIGQpe2lmKCFmWzBdfHxhLmNvbnZlcnRlcnNbaSsiICIrZlswXV0pe2o9aTticmVha31rfHwoaz1pKX1qPWp8fGt9aWYoail7aiE9PWZbMF0mJmYudW5zaGlmdChqKTtyZXR1cm4gZFtqXX19ZnVuY3Rpb24gY2MoYSxiLGMsZCl7aWYoZi5pc0FycmF5KGIpKWYuZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8YkcudGVzdChhKT9kKGEsZSk6Y2MoYSsiWyIrKHR5cGVvZiBlPT0ib2JqZWN0Inx8Zi5pc0FycmF5KGUpP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZiIT1udWxsJiZ0eXBlb2YgYj09Im9iamVjdCIpZm9yKHZhciBlIGluIGIpY2MoYSsiWyIrZSsiXSIsYltlXSxjLGQpO2Vsc2UgZChhLGIpfWZ1bmN0aW9uIGNiKGEsYyl7dmFyIGQsZSxnPWYuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoZCBpbiBjKWNbZF0hPT1iJiYoKGdbZF0/YTplfHwoZT17fSkpW2RdPWNbZF0pO2UmJmYuZXh0ZW5kKCEwLGEsZSl9ZnVuY3Rpb24gY2EoYSxjLGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoPWFbZl0saT0wLGo9aD9oLmxlbmd0aDowLGs9YT09PWJWLGw7Zm9yKDtpPGomJihrfHwhbCk7aSsrKWw9aFtpXShjLGQsZSksdHlwZW9mIGw9PSJzdHJpbmciJiYoIWt8fGdbbF0/bD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGwpLGw9Y2EoYSxjLGQsZSxsLGcpKSk7KGt8fCFsKSYmIWdbIioiXSYmKGw9Y2EoYSxjLGQsZSwiKiIsZykpO3JldHVybiBsfWZ1bmN0aW9uIGJfKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3R5cGVvZiBiIT0ic3RyaW5nIiYmKGM9YixiPSIqIik7aWYoZi5pc0Z1bmN0aW9uKGMpKXt2YXIgZD1iLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlIpLGU9MCxnPWQubGVuZ3RoLGgsaSxqO2Zvcig7ZTxnO2UrKyloPWRbZV0saj0vXlwrLy50ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVtoXT1hW2hdfHxbXSxpW2o/InVuc2hpZnQiOiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBiRShhLGIsYyl7dmFyIGQ9Yj09PSJ3aWR0aCI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxlPWI9PT0id2lkdGgiP2J6OmJBO2lmKGQ+MCl7YyE9PSJib3JkZXIiJiZmLmVhY2goZSxmdW5jdGlvbigpe2N8fChkLT1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmciK3RoaXMpKXx8MCksYz09PSJtYXJnaW4iP2QrPXBhcnNlRmxvYXQoZi5jc3MoYSxjK3RoaXMpKXx8MDpkLT1wYXJzZUZsb2F0KGYuY3NzKGEsImJvcmRlciIrdGhpcysiV2lkdGgiKSl8fDB9KTtyZXR1cm4gZCsicHgifWQ9YkIoYSxiLGIpO2lmKGQ8MHx8ZD09bnVsbClkPWEuc3R5bGVbYl18fDA7ZD1wYXJzZUZsb2F0KGQpfHwwLGMmJmYuZWFjaChlLGZ1bmN0aW9uKCl7ZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIit0aGlzKSl8fDAsYyE9PSJwYWRkaW5nIiYmKGQrPXBhcnNlRmxvYXQoZi5jc3MoYSwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MCksYz09PSJtYXJnaW4iJiYoZCs9cGFyc2VGbG9hdChmLmNzcyhhLGMrdGhpcykpfHwwKX0pO3JldHVybiBkKyJweCJ9ZnVuY3Rpb24gYnIoYSxiKXtiLnNyYz9mLmFqYXgoe3VybDpiLnNyYyxhc3luYzohMSxkYXRhVHlwZToic2NyaXB0In0pOmYuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoYmksIi8qJDAqLyIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBicShhKXt2YXIgYj0oYS5ub2RlTmFtZXx8IiIpLnRvTG93ZXJDYXNlKCk7Yj09PSJpbnB1dCI/YnAoYSk6YiE9PSJzY3JpcHQiJiZ0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCImJmYuZ3JlcChhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLGJwKX1mdW5jdGlvbiBicChhKXtpZihhLnR5cGU9PT0iY2hlY2tib3gifHxhLnR5cGU9PT0icmFkaW8iKWEuZGVmYXVsdENoZWNrZWQ9YS5jaGVja2VkfWZ1bmN0aW9uIGJvKGEpe3JldHVybiB0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOnR5cGVvZiBhLnF1ZXJ5U2VsZWN0b3JBbGwhPSJ1bmRlZmluZWQiP2EucXVlcnlTZWxlY3RvckFsbCgiKiIpOltdfWZ1bmN0aW9uIGJuKGEsYil7dmFyIGM7aWYoYi5ub2RlVHlwZT09PTEpe2IuY2xlYXJBdHRyaWJ1dGVzJiZiLmNsZWFyQXR0cmlidXRlcygpLGIubWVyZ2VBdHRyaWJ1dGVzJiZiLm1lcmdlQXR0cmlidXRlcyhhKSxjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihjPT09Im9iamVjdCIpYi5vdXRlckhUTUw9YS5vdXRlckhUTUw7ZWxzZSBpZihjIT09ImlucHV0Inx8YS50eXBlIT09ImNoZWNrYm94IiYmYS50eXBlIT09InJhZGlvIil7aWYoYz09PSJvcHRpb24iKWIuc2VsZWN0ZWQ9YS5kZWZhdWx0U2VsZWN0ZWQ7ZWxzZSBpZihjPT09ImlucHV0Inx8Yz09PSJ0ZXh0YXJlYSIpYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWV9ZWxzZSBhLmNoZWNrZWQmJihiLmRlZmF1bHRDaGVja2VkPWIuY2hlY2tlZD1hLmNoZWNrZWQpLGIudmFsdWUhPT1hLnZhbHVlJiYoYi52YWx1ZT1hLnZhbHVlKTtiLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pfX1mdW5jdGlvbiBibShhLGIpe2lmKGIubm9kZVR5cGU9PT0xJiYhIWYuaGFzRGF0YShhKSl7dmFyIGMsZCxlLGc9Zi5fZGF0YShhKSxoPWYuX2RhdGEoYixnKSxpPWcuZXZlbnRzO2lmKGkpe2RlbGV0ZSBoLmhhbmRsZSxoLmV2ZW50cz17fTtmb3IoYyBpbiBpKWZvcihkPTAsZT1pW2NdLmxlbmd0aDtkPGU7ZCsrKWYuZXZlbnQuYWRkKGIsYysoaVtjXVtkXS5uYW1lc3BhY2U/Ii4iOiIiKStpW2NdW2RdLm5hbWVzcGFjZSxpW2NdW2RdLGlbY11bZF0uZGF0YSl9aC5kYXRhJiYoaC5kYXRhPWYuZXh0ZW5kKHt9LGguZGF0YSkpfX1mdW5jdGlvbiBibChhLGIpe3JldHVybiBmLm5vZGVOYW1lKGEsInRhYmxlIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiBYKGEpe3ZhciBiPVkuc3BsaXQoIiAiKSxjPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKGMuY3JlYXRlRWxlbWVudCl3aGlsZShiLmxlbmd0aCljLmNyZWF0ZUVsZW1lbnQoYi5wb3AoKSk7cmV0dXJuIGN9ZnVuY3Rpb24gVyhhLGIsYyl7Yj1ifHwwO2lmKGYuaXNGdW5jdGlvbihiKSlyZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXt2YXIgZT0hIWIuY2FsbChhLGQsYSk7cmV0dXJuIGU9PT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT09PWI9PT1jfSk7aWYodHlwZW9mIGI9PSJzdHJpbmciKXt2YXIgZD1mLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PTF9KTtpZihSLnRlc3QoYikpcmV0dXJuIGYuZmlsdGVyKGIsZCwhYyk7Yj1mLmZpbHRlcihiLGQpfXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiBmLmluQXJyYXkoYSxiKT49MD09PWN9KX1mdW5jdGlvbiBWKGEpe3JldHVybiFhfHwhYS5wYXJlbnROb2RlfHxhLnBhcmVudE5vZGUubm9kZVR5cGU9PT0xMX1mdW5jdGlvbiBOKCl7cmV0dXJuITB9ZnVuY3Rpb24gTSgpe3JldHVybiExfWZ1bmN0aW9uIG4oYSxiLGMpe3ZhciBkPWIrImRlZmVyIixlPWIrInF1ZXVlIixnPWIrIm1hcmsiLGg9Zi5fZGF0YShhLGQpO2gmJihjPT09InF1ZXVlInx8IWYuX2RhdGEoYSxlKSkmJihjPT09Im1hcmsifHwhZi5fZGF0YShhLGcpKSYmc2V0VGltZW91dChmdW5jdGlvbigpeyFmLl9kYXRhKGEsZSkmJiFmLl9kYXRhKGEsZykmJihmLnJlbW92ZURhdGEoYSxkLCEwKSxoLmZpcmUoKSl9LDApfWZ1bmN0aW9uIG0oYSl7Zm9yKHZhciBiIGluIGEpe2lmKGI9PT0iZGF0YSImJmYuaXNFbXB0eU9iamVjdChhW2JdKSljb250aW51ZTtpZihiIT09InRvSlNPTiIpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gbChhLGMsZCl7aWYoZD09PWImJmEubm9kZVR5cGU9PT0xKXt2YXIgZT0iZGF0YS0iK2MucmVwbGFjZShrLCItJDEiKS50b0xvd2VyQ2FzZSgpO2Q9YS5nZXRBdHRyaWJ1dGUoZSk7aWYodHlwZW9mIGQ9PSJzdHJpbmciKXt0cnl7ZD1kPT09InRydWUiPyEwOmQ9PT0iZmFsc2UiPyExOmQ9PT0ibnVsbCI/bnVsbDpmLmlzTnVtZXJpYyhkKT9wYXJzZUZsb2F0KGQpOmoudGVzdChkKT9mLnBhcnNlSlNPTihkKTpkfWNhdGNoKGcpe31mLmRhdGEoYSxjLGQpfWVsc2UgZD1ifXJldHVybiBkfWZ1bmN0aW9uIGgoYSl7dmFyIGI9Z1thXT17fSxjLGQ7YT1hLnNwbGl0KC9ccysvKTtmb3IoYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyliW2FbY11dPSEwO3JldHVybiBifXZhciBjPWEuZG9jdW1lbnQsZD1hLm5hdmlnYXRvcixlPWEubG9jYXRpb24sZj1mdW5jdGlvbigpe2Z1bmN0aW9uIEsoKXtpZighZS5pc1JlYWR5KXt0cnl7Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChhKXtzZXRUaW1lb3V0KEssMSk7cmV0dXJufWUucmVhZHkoKX19dmFyIGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IGUuZm4uaW5pdChhLGIsaCl9LGY9YS5qUXVlcnksZz1hLiQsaCxpPS9eKD86W14jPF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0qKSQpLyxqPS9cUy8saz0vXlxzKy8sbD0vXHMrJC8sbT0vXGQvLG49L148KFx3KylccypcLz8+KD86PFwvXDE+KT8kLyxvPS9eW1xdLDp7fVxzXSokLyxwPS9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2cscT0vIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2cscj0vKD86Xnw6fCwpKD86XHMqXFspKy9nLHM9Lyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8sdD0vKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8sdT0vKG1zaWUpIChbXHcuXSspLyx2PS8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKykpPy8sdz0vLShbYS16XXxbMC05XSkvaWcseD0vXi1tcy0vLHk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYisiIikudG9VcHBlckNhc2UoKX0sej1kLnVzZXJBZ2VudCxBLEIsQyxEPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEY9QXJyYXkucHJvdG90eXBlLnB1c2gsRz1BcnJheS5wcm90b3R5cGUuc2xpY2UsSD1TdHJpbmcucHJvdG90eXBlLnRyaW0sST1BcnJheS5wcm90b3R5cGUuaW5kZXhPZixKPXt9O2UuZm49ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaW5pdDpmdW5jdGlvbihhLGQsZil7dmFyIGcsaCxqLGs7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSl7dGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKGE9PT0iYm9keSImJiFkJiZjLmJvZHkpe3RoaXMuY29udGV4dD1jLHRoaXNbMF09Yy5ib2R5LHRoaXMuc2VsZWN0b3I9YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT0ic3RyaW5nIil7YS5jaGFyQXQoMCkhPT0iPCJ8fGEuY2hhckF0KGEubGVuZ3RoLTEpIT09Ij4ifHxhLmxlbmd0aDwzP2c9aS5leGVjKGEpOmc9W251bGwsYSxudWxsXTtpZihnJiYoZ1sxXXx8IWQpKXtpZihnWzFdKXtkPWQgaW5zdGFuY2VvZiBlP2RbMF06ZCxrPWQ/ZC5vd25lckRvY3VtZW50fHxkOmMsaj1uLmV4ZWMoYSksaj9lLmlzUGxhaW5PYmplY3QoZCk/KGE9W2MuY3JlYXRlRWxlbWVudChqWzFdKV0sZS5mbi5hdHRyLmNhbGwoYSxkLCEwKSk6YT1bay5jcmVhdGVFbGVtZW50KGpbMV0pXTooaj1lLmJ1aWxkRnJhZ21lbnQoW2dbMV1dLFtrXSksYT0oai5jYWNoZWFibGU/ZS5jbG9uZShqLmZyYWdtZW50KTpqLmZyYWdtZW50KS5jaGlsZE5vZGVzKTtyZXR1cm4gZS5tZXJnZSh0aGlzLGEpfWg9Yy5nZXRFbGVtZW50QnlJZChnWzJdKTtpZihoJiZoLnBhcmVudE5vZGUpe2lmKGguaWQhPT1nWzJdKXJldHVybiBmLmZpbmQoYSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPWh9dGhpcy5jb250ZXh0PWMsdGhpcy5zZWxlY3Rvcj1hO3JldHVybiB0aGlzfXJldHVybiFkfHxkLmpxdWVyeT8oZHx8ZikuZmluZChhKTp0aGlzLmNvbnN0cnVjdG9yKGQpLmZpbmQoYSl9aWYoZS5pc0Z1bmN0aW9uKGEpKXJldHVybiBmLnJlYWR5KGEpO2Euc2VsZWN0b3IhPT1iJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpO3JldHVybiBlLm1ha2VBcnJheShhLHRoaXMpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuNyIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBHLmNhbGwodGhpcywwKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP3RoaXMudG9BcnJheSgpOmE8MD90aGlzW3RoaXMubGVuZ3RoK2FdOnRoaXNbYV19LHB1c2hTdGFjazpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5jb25zdHJ1Y3RvcigpO2UuaXNBcnJheShhKT9GLmFwcGx5KGQsYSk6ZS5tZXJnZShkLGEpLGQucHJldk9iamVjdD10aGlzLGQuY29udGV4dD10aGlzLmNvbnRleHQsYj09PSJmaW5kIj9kLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStjOmImJihkLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2MrIikiKTtyZXR1cm4gZH0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBlLmVhY2godGhpcyxhLGIpfSxyZWFkeTpmdW5jdGlvbihhKXtlLmJpbmRSZWFkeSgpLEIuYWRkKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXtyZXR1cm4gYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLCthKzEpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhHLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLEcuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxwdXNoOkYsc29ydDpbXS5zb3J0LHNwbGljZTpbXS5zcGxpY2V9LGUuZm4uaW5pdC5wcm90b3R5cGU9ZS5mbixlLmV4dGVuZD1lLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGMsZCxmLGcsaCxpPWFyZ3VtZW50c1swXXx8e30saj0xLGs9YXJndW1lbnRzLmxlbmd0aCxsPSExO3R5cGVvZiBpPT0iYm9vbGVhbiImJihsPWksaT1hcmd1bWVudHNbMV18fHt9LGo9MiksdHlwZW9mIGkhPSJvYmplY3QiJiYhZS5pc0Z1bmN0aW9uKGkpJiYoaT17fSksaz09PWomJihpPXRoaXMsLS1qKTtmb3IoO2o8aztqKyspaWYoKGE9YXJndW1lbnRzW2pdKSE9bnVsbClmb3IoYyBpbiBhKXtkPWlbY10sZj1hW2NdO2lmKGk9PT1mKWNvbnRpbnVlO2wmJmYmJihlLmlzUGxhaW5PYmplY3QoZil8fChnPWUuaXNBcnJheShmKSkpPyhnPyhnPSExLGg9ZCYmZS5pc0FycmF5KGQpP2Q6W10pOmg9ZCYmZS5pc1BsYWluT2JqZWN0KGQpP2Q6e30saVtjXT1lLmV4dGVuZChsLGgsZikpOmYhPT1iJiYoaVtjXT1mKX1yZXR1cm4gaX0sZS5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oYil7YS4kPT09ZSYmKGEuJD1nKSxiJiZhLmpRdWVyeT09PWUmJihhLmpRdWVyeT1mKTtyZXR1cm4gZX0saXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9lLnJlYWR5V2FpdCsrOmUucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXtpZihhPT09ITAmJiEtLWUucmVhZHlXYWl0fHxhIT09ITAmJiFlLmlzUmVhZHkpe2lmKCFjLmJvZHkpcmV0dXJuIHNldFRpbWVvdXQoZS5yZWFkeSwxKTtlLmlzUmVhZHk9ITA7aWYoYSE9PSEwJiYtLWUucmVhZHlXYWl0PjApcmV0dXJuO0IuZmlyZVdpdGgoYyxbZV0pLGUuZm4udHJpZ2dlciYmZShjKS50cmlnZ2VyKCJyZWFkeSIpLnVuYmluZCgicmVhZHkiKX19LGJpbmRSZWFkeTpmdW5jdGlvbigpe2lmKCFCKXtCPWUuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpO2lmKGMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpcmV0dXJuIHNldFRpbWVvdXQoZS5yZWFkeSwxKTtpZihjLmFkZEV2ZW50TGlzdGVuZXIpYy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixDLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGUucmVhZHksITEpO2Vsc2UgaWYoYy5hdHRhY2hFdmVudCl7Yy5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixDKSxhLmF0dGFjaEV2ZW50KCJvbmxvYWQiLGUucmVhZHkpO3ZhciBiPSExO3RyeXtiPWEuZnJhbWVFbGVtZW50PT1udWxsfWNhdGNoKGQpe31jLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCYmYiYmSygpfX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGUudHlwZShhKT09PSJmdW5jdGlvbiJ9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuIGUudHlwZShhKT09PSJhcnJheSJ9LGlzV2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBhJiZ0eXBlb2YgYT09Im9iamVjdCImJiJzZXRJbnRlcnZhbCJpbiBhfSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGwmJm0udGVzdChhKSYmIWlzTmFOKGEpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTpKW0QuY2FsbChhKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe2lmKCFhfHxlLnR5cGUoYSkhPT0ib2JqZWN0Inx8YS5ub2RlVHlwZXx8ZS5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIUUuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhRS5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9dmFyIGQ7Zm9yKGQgaW4gYSk7cmV0dXJuIGQ9PT1ifHxFLmNhbGwoYSxkKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgYX0scGFyc2VKU09OOmZ1bmN0aW9uKGIpe2lmKHR5cGVvZiBiIT0ic3RyaW5nInx8IWIpcmV0dXJuIG51bGw7Yj1lLnRyaW0oYik7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKTtpZihvLnRlc3QoYi5yZXBsYWNlKHAsIkAiKS5yZXBsYWNlKHEsIl0iKS5yZXBsYWNlKHIsIiIpKSlyZXR1cm4obmV3IEZ1bmN0aW9uKCJyZXR1cm4gIitiKSkoKTtlLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LHBhcnNlWE1MOmZ1bmN0aW9uKGMpe3ZhciBkLGY7dHJ5e2EuRE9NUGFyc2VyPyhmPW5ldyBET01QYXJzZXIsZD1mLnBhcnNlRnJvbVN0cmluZyhjLCJ0ZXh0L3htbCIpKTooZD1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGQuYXN5bmM9ImZhbHNlIixkLmxvYWRYTUwoYykpfWNhdGNoKGcpe2Q9Yn0oIWR8fCFkLmRvY3VtZW50RWxlbWVudHx8ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZlLmVycm9yKCJJbnZhbGlkIFhNTDogIitjKTtyZXR1cm4gZH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZqLnRlc3QoYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoeCwibXMtIikucmVwbGFjZSh3LHkpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT1iLnRvVXBwZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmLGc9MCxoPWEubGVuZ3RoLGk9aD09PWJ8fGUuaXNGdW5jdGlvbihhKTtpZihkKXtpZihpKXtmb3IoZiBpbiBhKWlmKGMuYXBwbHkoYVtmXSxkKT09PSExKWJyZWFrfWVsc2UgZm9yKDtnPGg7KWlmKGMuYXBwbHkoYVtnKytdLGQpPT09ITEpYnJlYWt9ZWxzZSBpZihpKXtmb3IoZiBpbiBhKWlmKGMuY2FsbChhW2ZdLGYsYVtmXSk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmNhbGwoYVtnXSxnLGFbZysrXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpIP2Z1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOkguY2FsbChhKX06ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6KGErIiIpLnJlcGxhY2UoaywiIikucmVwbGFjZShsLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107aWYoYSE9bnVsbCl7dmFyIGQ9ZS50eXBlKGEpO2EubGVuZ3RoPT1udWxsfHxkPT09InN0cmluZyJ8fGQ9PT0iZnVuY3Rpb24ifHxkPT09InJlZ2V4cCJ8fGUuaXNXaW5kb3coYSk/Ri5jYWxsKGMsYSk6ZS5tZXJnZShjLGEpfXJldHVybiBjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZihiKXtpZihJKXJldHVybiBJLmNhbGwoYixhLGMpO2Q9Yi5sZW5ndGgsYz1jP2M8MD9NYXRoLm1heCgwLGQrYyk6YzowO2Zvcig7YzxkO2MrKylpZihjIGluIGImJmJbY109PT1hKXJldHVybiBjfXJldHVybi0xfSxtZXJnZTpmdW5jdGlvbihhLGMpe3ZhciBkPWEubGVuZ3RoLGU9MDtpZih0eXBlb2YgYy5sZW5ndGg9PSJudW1iZXIiKWZvcih2YXIgZj1jLmxlbmd0aDtlPGY7ZSsrKWFbZCsrXT1jW2VdO2Vsc2Ugd2hpbGUoY1tlXSE9PWIpYVtkKytdPWNbZSsrXTthLmxlbmd0aD1kO3JldHVybiBhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlO2M9ISFjO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGg7ZjxnO2YrKyllPSEhYihhW2ZdLGYpLGMhPT1lJiZkLnB1c2goYVtmXSk7cmV0dXJuIGR9LG1hcDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoPVtdLGk9MCxqPWEubGVuZ3RoLGs9YSBpbnN0YW5jZW9mIGV8fGohPT1iJiZ0eXBlb2Ygaj09Im51bWJlciImJihqPjAmJmFbMF0mJmFbai0xXXx8aj09PTB8fGUuaXNBcnJheShhKSk7aWYoaylmb3IoO2k8ajtpKyspZj1jKGFbaV0saSxkKSxmIT1udWxsJiYoaFtoLmxlbmd0aF09Zik7ZWxzZSBmb3IoZyBpbiBhKWY9YyhhW2ddLGcsZCksZiE9bnVsbCYmKGhbaC5sZW5ndGhdPWYpO3JldHVybiBoLmNvbmNhdC5hcHBseShbXSxoKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYyl7aWYodHlwZW9mIGM9PSJzdHJpbmciKXt2YXIgZD1hW2NdO2M9YSxhPWR9aWYoIWUuaXNGdW5jdGlvbihhKSlyZXR1cm4gYjt2YXIgZj1HLmNhbGwoYXJndW1lbnRzLDIpLGc9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShjLGYuY29uY2F0KEcuY2FsbChhcmd1bWVudHMpKSl9O2cuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxnLmd1aWR8fGUuZ3VpZCsrO3JldHVybiBnfSxhY2Nlc3M6ZnVuY3Rpb24oYSxjLGQsZixnLGgpe3ZhciBpPWEubGVuZ3RoO2lmKHR5cGVvZiBjPT0ib2JqZWN0Iil7Zm9yKHZhciBqIGluIGMpZS5hY2Nlc3MoYSxqLGNbal0sZixnLGQpO3JldHVybiBhfWlmKGQhPT1iKXtmPSFoJiZmJiZlLmlzRnVuY3Rpb24oZCk7Zm9yKHZhciBrPTA7azxpO2srKylnKGFba10sYyxmP2QuY2FsbChhW2tdLGssZyhhW2tdLGMpKTpkLGgpO3JldHVybiBhfXJldHVybiBpP2coYVswXSxjKTpifSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0sdWFNYXRjaDpmdW5jdGlvbihhKXthPWEudG9Mb3dlckNhc2UoKTt2YXIgYj1zLmV4ZWMoYSl8fHQuZXhlYyhhKXx8dS5leGVjKGEpfHxhLmluZGV4T2YoImNvbXBhdGlibGUiKTwwJiZ2LmV4ZWMoYSl8fFtdO3JldHVybnticm93c2VyOmJbMV18fCIiLHZlcnNpb246YlsyXXx8IjAifX0sc3ViOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMpe3JldHVybiBuZXcgYS5mbi5pbml0KGIsYyl9ZS5leHRlbmQoITAsYSx0aGlzKSxhLnN1cGVyY2xhc3M9dGhpcyxhLmZuPWEucHJvdG90eXBlPXRoaXMoKSxhLmZuLmNvbnN0cnVjdG9yPWEsYS5zdWI9dGhpcy5zdWIsYS5mbi5pbml0PWZ1bmN0aW9uKGQsZil7ZiYmZiBpbnN0YW5jZW9mIGUmJiEoZiBpbnN0YW5jZW9mIGEpJiYoZj1hKGYpKTtyZXR1cm4gZS5mbi5pbml0LmNhbGwodGhpcyxkLGYsYil9LGEuZm4uaW5pdC5wcm90b3R5cGU9YS5mbjt2YXIgYj1hKGMpO3JldHVybiBhfSxicm93c2VyOnt9fSksZS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7SlsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KSxBPWUudWFNYXRjaCh6KSxBLmJyb3dzZXImJihlLmJyb3dzZXJbQS5icm93c2VyXT0hMCxlLmJyb3dzZXIudmVyc2lvbj1BLnZlcnNpb24pLGUuYnJvd3Nlci53ZWJraXQmJihlLmJyb3dzZXIuc2FmYXJpPSEwKSxqLnRlc3QoIsKgIikmJihrPS9eW1xzXHhBMF0rLyxsPS9bXHNceEEwXSskLyksaD1lKGMpLGMuYWRkRXZlbnRMaXN0ZW5lcj9DPWZ1bmN0aW9uKCl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixDLCExKSxlLnJlYWR5KCl9OmMuYXR0YWNoRXZlbnQmJihDPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmKGMuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQyksZS5yZWFkeSgpKX0pLHR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQmJmRlZmluZS5hbWQualF1ZXJ5JiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gZX0pO3JldHVybiBlfSgpLGc9e307Zi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT1hP2dbYV18fGgoYSk6e307dmFyIGM9W10sZD1bXSxlLGksaixrLGwsbT1mdW5jdGlvbihiKXt2YXIgZCxlLGcsaCxpO2ZvcihkPTAsZT1iLmxlbmd0aDtkPGU7ZCsrKWc9YltkXSxoPWYudHlwZShnKSxoPT09ImFycmF5Ij9tKGcpOmg9PT0iZnVuY3Rpb24iJiYoIWEudW5pcXVlfHwhby5oYXMoZykpJiZjLnB1c2goZyl9LG49ZnVuY3Rpb24oYixmKXtmPWZ8fFtdLGU9IWEubWVtb3J5fHxbYixmXSxpPSEwLGw9anx8MCxqPTAsaz1jLmxlbmd0aDtmb3IoO2MmJmw8aztsKyspaWYoY1tsXS5hcHBseShiLGYpPT09ITEmJmEuc3RvcE9uRmFsc2Upe2U9ITA7YnJlYWt9aT0hMSxjJiYoYS5vbmNlP2U9PT0hMD9vLmRpc2FibGUoKTpjPVtdOmQmJmQubGVuZ3RoJiYoZT1kLnNoaWZ0KCksby5maXJlV2l0aChlWzBdLGVbMV0pKSl9LG89e2FkZDpmdW5jdGlvbigpe2lmKGMpe3ZhciBhPWMubGVuZ3RoO20oYXJndW1lbnRzKSxpP2s9Yy5sZW5ndGg6ZSYmZSE9PSEwJiYoaj1hLG4oZVswXSxlWzFdKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe2lmKGMpe3ZhciBiPWFyZ3VtZW50cyxkPTAsZT1iLmxlbmd0aDtmb3IoO2Q8ZTtkKyspZm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspaWYoYltkXT09PWNbZl0pe2kmJmY8PWsmJihrLS0sZjw9bCYmbC0tKSxjLnNwbGljZShmLS0sMSk7aWYoYS51bmlxdWUpYnJlYWt9fXJldHVybiB0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7aWYoYyl7dmFyIGI9MCxkPWMubGVuZ3RoO2Zvcig7YjxkO2IrKylpZihhPT09Y1tiXSlyZXR1cm4hMH1yZXR1cm4hMX0sZW1wdHk6ZnVuY3Rpb24oKXtjPVtdO3JldHVybiB0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7Yz1kPWU9YjtyZXR1cm4gdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hY30sbG9jazpmdW5jdGlvbigpe2Q9YiwoIWV8fGU9PT0hMCkmJm8uZGlzYWJsZSgpO3JldHVybiB0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hZH0sZmlyZVdpdGg6ZnVuY3Rpb24oYixjKXtkJiYoaT9hLm9uY2V8fGQucHVzaChbYixjXSk6KCFhLm9uY2V8fCFlKSYmbihiLGMpKTtyZXR1cm4gdGhpc30sZmlyZTpmdW5jdGlvbigpe28uZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZX19O3JldHVybiBvfTt2YXIgaT1bXS5zbGljZTtmLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksYz1mLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxkPWYuQ2FsbGJhY2tzKCJtZW1vcnkiKSxlPSJwZW5kaW5nIixnPXtyZXNvbHZlOmIscmVqZWN0OmMsbm90aWZ5OmR9LGg9e2RvbmU6Yi5hZGQsZmFpbDpjLmFkZCxwcm9ncmVzczpkLmFkZCxzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBlfSxpc1Jlc29sdmVkOmIuZmlyZWQsaXNSZWplY3RlZDpjLmZpcmVkLHRoZW46ZnVuY3Rpb24oYSxiLGMpe2kuZG9uZShhKS5mYWlsKGIpLnByb2dyZXNzKGMpO3JldHVybiB0aGlzfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lLmFwcGx5KGksYXJndW1lbnRzKS5mYWlsLmFwcGx5KGksYXJndW1lbnRzKX0scGlwZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuRGVmZXJyZWQoZnVuY3Rpb24oZCl7Zi5lYWNoKHtkb25lOlthLCJyZXNvbHZlIl0sZmFpbDpbYiwicmVqZWN0Il0scHJvZ3Jlc3M6W2MsIm5vdGlmeSJdfSxmdW5jdGlvbihhLGIpe3ZhciBjPWJbMF0sZT1iWzFdLGc7Zi5pc0Z1bmN0aW9uKGMpP2lbYV0oZnVuY3Rpb24oKXtnPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpLGcmJmYuaXNGdW5jdGlvbihnLnByb21pc2UpP2cucHJvbWlzZSgpLnRoZW4oZC5yZXNvbHZlLGQucmVqZWN0LGQubm90aWZ5KTpkW2UrIldpdGgiXSh0aGlzPT09aT9kOnRoaXMsW2ddKX0pOmlbYV0oZFtlXSl9KX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtpZihhPT1udWxsKWE9aDtlbHNlIGZvcih2YXIgYiBpbiBoKWFbYl09aFtiXTtyZXR1cm4gYX19LGk9aC5wcm9taXNlKHt9KSxqO2ZvcihqIGluIGcpaVtqXT1nW2pdLmZpcmUsaVtqKyJXaXRoIl09Z1tqXS5maXJlV2l0aDtpLmRvbmUoZnVuY3Rpb24oKXtlPSJyZXNvbHZlZCJ9LGMuZGlzYWJsZSxkLmxvY2spLmZhaWwoZnVuY3Rpb24oKXtlPSJyZWplY3RlZCJ9LGIuZGlzYWJsZSxkLmxvY2spLGEmJmEuY2FsbChpLGkpO3JldHVybiBpfSx3aGVuOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG0oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2VbYV09YXJndW1lbnRzLmxlbmd0aD4xP2kuY2FsbChhcmd1bWVudHMsMCk6YixqLm5vdGlmeVdpdGgoayxlKX19ZnVuY3Rpb24gbChhKXtyZXR1cm4gZnVuY3Rpb24oYyl7YlthXT1hcmd1bWVudHMubGVuZ3RoPjE/aS5jYWxsKGFyZ3VtZW50cywwKTpjLC0tZ3x8ai5yZXNvbHZlV2l0aChqLGIpfX12YXIgYj1pLmNhbGwoYXJndW1lbnRzLDApLGM9MCxkPWIubGVuZ3RoLGU9QXJyYXkoZCksZz1kLGg9ZCxqPWQ8PTEmJmEmJmYuaXNGdW5jdGlvbihhLnByb21pc2UpP2E6Zi5EZWZlcnJlZCgpLGs9ai5wcm9taXNlKCk7aWYoZD4xKXtmb3IoO2M8ZDtjKyspYltjXSYmYltjXS5wcm9taXNlJiZmLmlzRnVuY3Rpb24oYltjXS5wcm9taXNlKT9iW2NdLnByb21pc2UoKS50aGVuKGwoYyksai5yZWplY3QsbShjKSk6LS1nO2d8fGoucmVzb2x2ZVdpdGgoaixiKX1lbHNlIGohPT1hJiZqLnJlc29sdmVXaXRoKGosZD9bYV06W10pO3JldHVybiBrfX0pLGYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYj1jLmRvY3VtZW50RWxlbWVudCxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7YS5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxhLmlubmVySFRNTD0iICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0ndG9wOjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjU1Oyc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz48bmF2PjwvbmF2PiIsZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksZT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYoIWR8fCFkLmxlbmd0aHx8IWUpcmV0dXJue307Zz1jLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGg9Zy5hcHBlbmRDaGlsZChjLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxpPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0saz17bGVhZGluZ1doaXRlc3BhY2U6YS5maXJzdENoaWxkLm5vZGVUeXBlPT09Myx0Ym9keTohYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3RvcC8udGVzdChlLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTovXjAuNTUvLnRlc3QoZS5zdHlsZS5vcGFjaXR5KSxjc3NGbG9hdDohIWUuc3R5bGUuY3NzRmxvYXQsdW5rbm93bkVsZW1zOiEhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibmF2IikubGVuZ3RoLGNoZWNrT246aS52YWx1ZT09PSJvbiIsb3B0U2VsZWN0ZWQ6aC5zZWxlY3RlZCxnZXRTZXRBdHRyaWJ1dGU6YS5jbGFzc05hbWUhPT0idCIsZW5jdHlwZTohIWMuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsc3VibWl0QnViYmxlczohMCxjaGFuZ2VCdWJibGVzOiEwLGZvY3VzaW5CdWJibGVzOiExLGRlbGV0ZUV4cGFuZG86ITAsbm9DbG9uZUV2ZW50OiEwLGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZU1hcmdpblJpZ2h0OiEwfSxpLmNoZWNrZWQ9ITAsay5ub0Nsb25lQ2hlY2tlZD1pLmNsb25lTm9kZSghMCkuY2hlY2tlZCxnLmRpc2FibGVkPSEwLGsub3B0RGlzYWJsZWQ9IWguZGlzYWJsZWQ7dHJ5e2RlbGV0ZSBhLnRlc3R9Y2F0Y2godil7ay5kZWxldGVFeHBhbmRvPSExfSFhLmFkZEV2ZW50TGlzdGVuZXImJmEuYXR0YWNoRXZlbnQmJmEuZmlyZUV2ZW50JiYoYS5hdHRhY2hFdmVudCgib25jbGljayIsZnVuY3Rpb24oKXtrLm5vQ2xvbmVFdmVudD0hMX0pLGEuY2xvbmVOb2RlKCEwKS5maXJlRXZlbnQoIm9uY2xpY2siKSksaT1jLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaS52YWx1ZT0idCIsaS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGsucmFkaW9WYWx1ZT1pLnZhbHVlPT09InQiLGkuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGEuYXBwZW5kQ2hpbGQoaSksbD1jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsLmFwcGVuZENoaWxkKGEubGFzdENoaWxkKSxrLmNoZWNrQ2xvbmU9bC5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsYS5pbm5lckhUTUw9IiIsYS5zdHlsZS53aWR0aD1hLnN0eWxlLnBhZGRpbmdMZWZ0PSIxcHgiLG09Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLG89Yy5jcmVhdGVFbGVtZW50KG0/ImRpdiI6ImJvZHkiKSxwPXt2aXNpYmlsaXR5OiJoaWRkZW4iLHdpZHRoOjAsaGVpZ2h0OjAsYm9yZGVyOjAsbWFyZ2luOjAsYmFja2dyb3VuZDoibm9uZSJ9LG0mJmYuZXh0ZW5kKHAse3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiLTk5OXB4Iix0b3A6Ii05OTlweCJ9KTtmb3IodCBpbiBwKW8uc3R5bGVbdF09cFt0XTtvLmFwcGVuZENoaWxkKGEpLG49bXx8YixuLmluc2VydEJlZm9yZShvLG4uZmlyc3RDaGlsZCksay5hcHBlbmRDaGVja2VkPWkuY2hlY2tlZCxrLmJveE1vZGVsPWEub2Zmc2V0V2lkdGg9PT0yLCJ6b29tImluIGEuc3R5bGUmJihhLnN0eWxlLmRpc3BsYXk9ImlubGluZSIsYS5zdHlsZS56b29tPTEsay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWEub2Zmc2V0V2lkdGg9PT0yLGEuc3R5bGUuZGlzcGxheT0iIixhLmlubmVySFRNTD0iPGRpdiBzdHlsZT0nd2lkdGg6NHB4Oyc+PC9kaXY+IixrLnNocmlua1dyYXBCbG9ja3M9YS5vZmZzZXRXaWR0aCE9PTIpLGEuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIscT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLHU9cVswXS5vZmZzZXRIZWlnaHQ9PT0wLHFbMF0uc3R5bGUuZGlzcGxheT0iIixxWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGsucmVsaWFibGVIaWRkZW5PZmZzZXRzPXUmJnFbMF0ub2Zmc2V0SGVpZ2h0PT09MCxhLmlubmVySFRNTD0iIixjLmRlZmF1bHRWaWV3JiZjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihqPWMuY3JlYXRlRWxlbWVudCgiZGl2Iiksai5zdHlsZS53aWR0aD0iMCIsai5zdHlsZS5tYXJnaW5SaWdodD0iMCIsYS5hcHBlbmRDaGlsZChqKSxrLnJlbGlhYmxlTWFyZ2luUmlnaHQ9KHBhcnNlSW50KChjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoaixudWxsKXx8e21hcmdpblJpZ2h0OjB9KS5tYXJnaW5SaWdodCwxMCl8fDApPT09MCk7aWYoYS5hdHRhY2hFdmVudClmb3IodCBpbntzdWJtaXQ6MSxjaGFuZ2U6MSxmb2N1c2luOjF9KXM9Im9uIit0LHU9cyBpbiBhLHV8fChhLnNldEF0dHJpYnV0ZShzLCJyZXR1cm47IiksdT10eXBlb2YgYVtzXT09ImZ1bmN0aW9uIiksa1t0KyJCdWJibGVzIl09dTtmKGZ1bmN0aW9uKCl7dmFyIGEsYixkLGUsZyxoLGk9MSxqPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7bWFyZ2luOjA7IixsPSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MDsiLG49InN0eWxlPSciK2orImJvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7JyIscD0iPGRpdiAiK24rIj48ZGl2PjwvZGl2PjwvZGl2PiIrIjx0YWJsZSAiK24rIiBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPiIrIjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IjttPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTshbXx8KGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxhLnN0eWxlLmNzc1RleHQ9bCsid2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7dG9wOjA7bWFyZ2luLXRvcDoiK2krInB4IixtLmluc2VydEJlZm9yZShhLG0uZmlyc3RDaGlsZCksbz1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG8uc3R5bGUuY3NzVGV4dD1qK2wsby5pbm5lckhUTUw9cCxhLmFwcGVuZENoaWxkKG8pLGI9by5maXJzdENoaWxkLGQ9Yi5maXJzdENoaWxkLGc9Yi5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hpbGQsaD17ZG9lc05vdEFkZEJvcmRlcjpkLm9mZnNldFRvcCE9PTUsZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHM6Zy5vZmZzZXRUb3A9PT01fSxkLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsZC5zdHlsZS50b3A9IjIwcHgiLGguZml4ZWRQb3NpdGlvbj1kLm9mZnNldFRvcD09PTIwfHxkLm9mZnNldFRvcD09PTE1LGQuc3R5bGUucG9zaXRpb249ZC5zdHlsZS50b3A9IiIsYi5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixiLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsaC5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGU9ZC5vZmZzZXRUb3A9PT0tNSxoLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PW0ub2Zmc2V0VG9wIT09aSxtLnJlbW92ZUNoaWxkKGEpLG89YT1udWxsLGYuZXh0ZW5kKGssaCkpfSksby5pbm5lckhUTUw9IiIsbi5yZW1vdmVDaGlsZChvKSxvPWw9Zz1oPW09aj1hPWk9bnVsbDtyZXR1cm4ga30oKSxmLmJveE1vZGVsPWYuc3VwcG9ydC5ib3hNb2RlbDt2YXIgaj0vXig/Olx7LipcfXxcWy4qXF0pJC8saz0vKFtBLVpdKS9nO2YuZXh0ZW5kKHtjYWNoZTp7fSx1dWlkOjAsZXhwYW5kbzoialF1ZXJ5IisoZi5mbi5qcXVlcnkrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9EYXRhOntlbWJlZDohMCxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsYXBwbGV0OiEwfSxoYXNEYXRhOmZ1bmN0aW9uKGEpe2E9YS5ub2RlVHlwZT9mLmNhY2hlW2FbZi5leHBhbmRvXV06YVtmLmV4cGFuZG9dO3JldHVybiEhYSYmIW0oYSl9LGRhdGE6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBnLGgsaSxqPWYuZXhwYW5kbyxrPXR5cGVvZiBjPT0ic3RyaW5nIixsPWEubm9kZVR5cGUsbT1sP2YuY2FjaGU6YSxuPWw/YVtmLmV4cGFuZG9dOmFbZi5leHBhbmRvXSYmZi5leHBhbmRvLG89Yz09PSJldmVudHMiO2lmKCghbnx8IW1bbl18fCFvJiYhZSYmIW1bbl0uZGF0YSkmJmsmJmQ9PT1iKXJldHVybjtufHwobD9hW2YuZXhwYW5kb109bj0rK2YudXVpZDpuPWYuZXhwYW5kbyksbVtuXXx8KG1bbl09e30sbHx8KG1bbl0udG9KU09OPWYubm9vcCkpO2lmKHR5cGVvZiBjPT0ib2JqZWN0Inx8dHlwZW9mIGM9PSJmdW5jdGlvbiIpZT9tW25dPWYuZXh0ZW5kKG1bbl0sYyk6bVtuXS5kYXRhPWYuZXh0ZW5kKG1bbl0uZGF0YSxjKTtnPWg9bVtuXSxlfHwoaC5kYXRhfHwoaC5kYXRhPXt9KSxoPWguZGF0YSksZCE9PWImJihoW2YuY2FtZWxDYXNlKGMpXT1kKTtpZihvJiYhaFtjXSlyZXR1cm4gZy5ldmVudHM7az8oaT1oW2NdLGk9PW51bGwmJihpPWhbZi5jYW1lbENhc2UoYyldKSk6aT1oO3JldHVybiBpfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhLGIsYyl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBkLGUsZyxoPWYuZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP2YuY2FjaGU6YSxrPWk/YVtmLmV4cGFuZG9dOmYuZXhwYW5kbztpZighaltrXSlyZXR1cm47aWYoYil7ZD1jP2pba106altrXS5kYXRhO2lmKGQpe2YuaXNBcnJheShiKT9iPWI6YiBpbiBkP2I9W2JdOihiPWYuY2FtZWxDYXNlKGIpLGIgaW4gZD9iPVtiXTpiPWIuc3BsaXQoIiAiKSk7Zm9yKGU9MCxnPWIubGVuZ3RoO2U8ZztlKyspZGVsZXRlIGRbYltlXV07aWYoIShjP206Zi5pc0VtcHR5T2JqZWN0KShkKSlyZXR1cm59fWlmKCFjKXtkZWxldGUgaltrXS5kYXRhO2lmKCFtKGpba10pKXJldHVybn1mLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8IWouc2V0SW50ZXJ2YWw/ZGVsZXRlIGpba106altrXT1udWxsLGkmJihmLnN1cHBvcnQuZGVsZXRlRXhwYW5kbz9kZWxldGUgYVtmLmV4cGFuZG9dOmEucmVtb3ZlQXR0cmlidXRlP2EucmVtb3ZlQXR0cmlidXRlKGYuZXhwYW5kbyk6YVtmLmV4cGFuZG9dPW51bGwpfX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRhdGEoYSxiLGMsITApfSxhY2NlcHREYXRhOmZ1bmN0aW9uKGEpe2lmKGEubm9kZU5hbWUpe3ZhciBiPWYubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoYilyZXR1cm4gYiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn1yZXR1cm4hMH19KSxmLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGMpe3ZhciBkLGUsZyxoPW51bGw7aWYodHlwZW9mIGE9PSJ1bmRlZmluZWQiKXtpZih0aGlzLmxlbmd0aCl7aD1mLmRhdGEodGhpc1swXSk7aWYodGhpc1swXS5ub2RlVHlwZT09PTEmJiFmLl9kYXRhKHRoaXNbMF0sInBhcnNlZEF0dHJzIikpe2U9dGhpc1swXS5hdHRyaWJ1dGVzO2Zvcih2YXIgaT0wLGo9ZS5sZW5ndGg7aTxqO2krKylnPWVbaV0ubmFtZSxnLmluZGV4T2YoImRhdGEtIik9PT0wJiYoZz1mLmNhbWVsQ2FzZShnLnN1YnN0cmluZyg1KSksbCh0aGlzWzBdLGcsaFtnXSkpO2YuX2RhdGEodGhpc1swXSwicGFyc2VkQXR0cnMiLCEwKX19cmV0dXJuIGh9aWYodHlwZW9mIGE9PSJvYmplY3QiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRhdGEodGhpcyxhKX0pO2Q9YS5zcGxpdCgiLiIpLGRbMV09ZFsxXT8iLiIrZFsxXToiIjtpZihjPT09Yil7aD10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitkWzFdKyIhIixbZFswXV0pLGg9PT1iJiZ0aGlzLmxlbmd0aCYmKGg9Zi5kYXRhKHRoaXNbMF0sYSksaD1sKHRoaXNbMF0sYSxoKSk7cmV0dXJuIGg9PT1iJiZkWzFdP3RoaXMuZGF0YShkWzBdKTpofXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mKHRoaXMpLGU9W2RbMF0sY107Yi50cmlnZ2VySGFuZGxlcigic2V0RGF0YSIrZFsxXSsiISIsZSksZi5kYXRhKHRoaXMsYSxjKSxiLnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitkWzFdKyIhIixlKX0pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLGYuZXh0ZW5kKHtfbWFyazpmdW5jdGlvbihhLGIpe2EmJihiPShifHwiZngiKSsibWFyayIsZi5fZGF0YShhLGIsKGYuX2RhdGEoYSxiKXx8MCkrMSkpfSxfdW5tYXJrOmZ1bmN0aW9uKGEsYixjKXthIT09ITAmJihjPWIsYj1hLGE9ITEpO2lmKGIpe2M9Y3x8ImZ4Ijt2YXIgZD1jKyJtYXJrIixlPWE/MDooZi5fZGF0YShiLGQpfHwxKS0xO2U/Zi5fZGF0YShiLGQsZSk6KGYucmVtb3ZlRGF0YShiLGQsITApLG4oYixjLCJtYXJrIikpfX0scXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGEpe2I9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1mLl9kYXRhKGEsYiksYyYmKCFkfHxmLmlzQXJyYXkoYyk/ZD1mLl9kYXRhKGEsYixmLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKTtyZXR1cm4gZHx8W119fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPWYucXVldWUoYSxiKSxkPWMuc2hpZnQoKSxlPXt9O2Q9PT0iaW5wcm9ncmVzcyImJihkPWMuc2hpZnQoKSksZCYmKGI9PT0iZngiJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxmLl9kYXRhKGEsYisiLnJ1biIsZSksZC5jYWxsKGEsZnVuY3Rpb24oKXtmLmRlcXVldWUoYSxiKX0sZSkpLGMubGVuZ3RofHwoZi5yZW1vdmVEYXRhKGEsYisicXVldWUgIitiKyIucnVuIiwhMCksbihhLGIsInF1ZXVlIikpfX0pLGYuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGMpe3R5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPSJmeCIpO2lmKGM9PT1iKXJldHVybiBmLnF1ZXVlKHRoaXNbMF0sYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYucXVldWUodGhpcyxhLGMpO2E9PT0iZngiJiZiWzBdIT09ImlucHJvZ3Jlc3MiJiZmLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9Zi5meD9mLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9c2V0VGltZW91dChiLGEpO2Muc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChkKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIG0oKXstLWh8fGQucmVzb2x2ZVdpdGgoZSxbZV0pfXR5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPWIpLGE9YXx8ImZ4Ijt2YXIgZD1mLkRlZmVycmVkKCksZT10aGlzLGc9ZS5sZW5ndGgsaD0xLGk9YSsiZGVmZXIiLGo9YSsicXVldWUiLGs9YSsibWFyayIsbDt3aGlsZShnLS0paWYobD1mLmRhdGEoZVtnXSxpLGIsITApfHwoZi5kYXRhKGVbZ10saixiLCEwKXx8Zi5kYXRhKGVbZ10sayxiLCEwKSkmJmYuZGF0YShlW2ddLGksZi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksITApKWgrKyxsLmFkZChtKTttKCk7cmV0dXJuIGQucHJvbWlzZSgpfX0pO3ZhciBvPS9bXG5cdFxyXS9nLHA9L1xzKy8scT0vXHIvZyxyPS9eKD86YnV0dG9ufGlucHV0KSQvaSxzPS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLHQ9L15hKD86cmVhKT8kL2ksdT0vXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSx2PWYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUsdyx4LHk7Zi5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGIsITAsZi5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5yZW1vdmVBdHRyKHRoaXMsYSl9KX0scHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGEsYiwhMCxmLnByb3ApfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe2E9Zi5wcm9wRml4W2FdfHxhO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1thXT1iLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGMpe319KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZyxoLGk7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS5hZGRDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihhJiZ0eXBlb2YgYT09InN0cmluZyIpe2I9YS5zcGxpdChwKTtmb3IoYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl7ZT10aGlzW2NdO2lmKGUubm9kZVR5cGU9PT0xKWlmKCFlLmNsYXNzTmFtZSYmYi5sZW5ndGg9PT0xKWUuY2xhc3NOYW1lPWE7ZWxzZXtnPSIgIitlLmNsYXNzTmFtZSsiICI7Zm9yKGg9MCxpPWIubGVuZ3RoO2g8aTtoKyspfmcuaW5kZXhPZigiICIrYltoXSsiICIpfHwoZys9YltoXSsiICIpO2UuY2xhc3NOYW1lPWYudHJpbShnKX19fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZyxoLGksajtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5cGVvZiBhPT0ic3RyaW5nInx8YT09PWIpe2M9KGF8fCIiKS5zcGxpdChwKTtmb3IoZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7Zz10aGlzW2RdO2lmKGcubm9kZVR5cGU9PT0xJiZnLmNsYXNzTmFtZSlpZihhKXtoPSgiICIrZy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKG8sIiAiKTtmb3IoaT0wLGo9Yy5sZW5ndGg7aTxqO2krKyloPWgucmVwbGFjZSgiICIrY1tpXSsiICIsIiAiKTtnLmNsYXNzTmFtZT1mLnRyaW0oaCl9ZWxzZSBnLmNsYXNzTmFtZT0iIn19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEsZD10eXBlb2YgYj09ImJvb2xlYW4iO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe2YodGhpcykudG9nZ2xlQ2xhc3MoYS5jYWxsKHRoaXMsYyx0aGlzLmNsYXNzTmFtZSxiKSxiKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihjPT09InN0cmluZyIpe3ZhciBlLGc9MCxoPWYodGhpcyksaT1iLGo9YS5zcGxpdChwKTt3aGlsZShlPWpbZysrXSlpPWQ/aTohaC5oYXNDbGFzcyhlKSxoW2k/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShlKX1lbHNlIGlmKGM9PT0idW5kZWZpbmVkInx8Yz09PSJib29sZWFuIil0aGlzLmNsYXNzTmFtZSYmZi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjpmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGI9IiAiK2ErIiAiLGM9MCxkPXRoaXMubGVuZ3RoO2Zvcig7YzxkO2MrKylpZih0aGlzW2NdLm5vZGVUeXBlPT09MSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobywiICIpLmluZGV4T2YoYik+LTEpcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZz10aGlzWzBdO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtpZihnKXtjPWYudmFsSG9va3NbZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXXx8Zi52YWxIb29rc1tnLnR5cGVdO2lmKGMmJiJnZXQiaW4gYyYmKGQ9Yy5nZXQoZywidmFsdWUiKSkhPT1iKXJldHVybiBkO2Q9Zy52YWx1ZTtyZXR1cm4gdHlwZW9mIGQ9PSJzdHJpbmciP2QucmVwbGFjZShxLCIiKTpkPT1udWxsPyIiOmR9cmV0dXJuIGJ9ZT1mLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihkKXt2YXIgZz1mKHRoaXMpLGg7aWYodGhpcy5ub2RlVHlwZT09PTEpe2U/aD1hLmNhbGwodGhpcyxkLGcudmFsKCkpOmg9YSxoPT1udWxsP2g9IiI6dHlwZW9mIGg9PSJudW1iZXIiP2grPSIiOmYuaXNBcnJheShoKSYmKGg9Zi5tYXAoaCxmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjphKyIifSkpLGM9Zi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldfHxmLnZhbEhvb2tzW3RoaXMudHlwZV07aWYoIWN8fCEoInNldCJpbiBjKXx8Yy5zZXQodGhpcyxoLCJ2YWx1ZSIpPT09Yil0aGlzLnZhbHVlPWh9fSl9fSksZi5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIWJ8fGIuc3BlY2lmaWVkP2EudmFsdWU6YS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZz1hLnNlbGVjdGVkSW5kZXgsaD1bXSxpPWEub3B0aW9ucyxqPWEudHlwZT09PSJzZWxlY3Qtb25lIjtpZihnPDApcmV0dXJuIG51bGw7Yz1qP2c6MCxkPWo/ZysxOmkubGVuZ3RoO2Zvcig7YzxkO2MrKyl7ZT1pW2NdO2lmKGUuc2VsZWN0ZWQmJihmLnN1cHBvcnQub3B0RGlzYWJsZWQ/IWUuZGlzYWJsZWQ6ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFlLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFmLm5vZGVOYW1lKGUucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2I9ZihlKS52YWwoKTtpZihqKXJldHVybiBiO2gucHVzaChiKX19aWYoaiYmIWgubGVuZ3RoJiZpLmxlbmd0aClyZXR1cm4gZihpW2ddKS52YWwoKTtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5tYWtlQXJyYXkoYik7ZihhKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD1mLmluQXJyYXkoZih0aGlzKS52YWwoKSxjKT49MH0pLGMubGVuZ3RofHwoYS5zZWxlY3RlZEluZGV4PS0xKTtyZXR1cm4gY319fSxhdHRyRm46e3ZhbDohMCxjc3M6ITAsaHRtbDohMCx0ZXh0OiEwLGRhdGE6ITAsd2lkdGg6ITAsaGVpZ2h0OiEwLG9mZnNldDohMH0sYXR0cjpmdW5jdGlvbihhLGMsZCxlKXt2YXIgZyxoLGksaj1hLm5vZGVUeXBlO2lmKCFhfHxqPT09M3x8aj09PTh8fGo9PT0yKXJldHVybiBiO2lmKGUmJmMgaW4gZi5hdHRyRm4pcmV0dXJuIGYoYSlbY10oZCk7aWYoISgiZ2V0QXR0cmlidXRlImluIGEpKXJldHVybiBmLnByb3AoYSxjLGQpO2k9aiE9PTF8fCFmLmlzWE1MRG9jKGEpLGkmJihjPWMudG9Mb3dlckNhc2UoKSxoPWYuYXR0ckhvb2tzW2NdfHwodS50ZXN0KGMpP3g6dykpO2lmKGQhPT1iKXtpZihkPT09bnVsbCl7Zi5yZW1vdmVBdHRyKGEsYyk7cmV0dXJuIGJ9aWYoaCYmInNldCJpbiBoJiZpJiYoZz1oLnNldChhLGQsYykpIT09YilyZXR1cm4gZzthLnNldEF0dHJpYnV0ZShjLCIiK2QpO3JldHVybiBkfWlmKGgmJiJnZXQiaW4gaCYmaSYmKGc9aC5nZXQoYSxjKSkhPT1udWxsKXJldHVybiBnO2c9YS5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIGc9PT1udWxsP2I6Z30scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxnLGg9MDtpZihhLm5vZGVUeXBlPT09MSl7ZD0oYnx8IiIpLnNwbGl0KHApLGc9ZC5sZW5ndGg7Zm9yKDtoPGc7aCsrKWU9ZFtoXS50b0xvd2VyQ2FzZSgpLGM9Zi5wcm9wRml4W2VdfHxlLGYuYXR0cihhLGUsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHY/ZTpjKSx1LnRlc3QoZSkmJmMgaW4gYSYmKGFbY109ITEpfX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZihyLnRlc3QoYS5ub2RlTmFtZSkmJmEucGFyZW50Tm9kZSlmLmVycm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKTtlbHNlIGlmKCFmLnN1cHBvcnQucmFkaW9WYWx1ZSYmYj09PSJyYWRpbyImJmYubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTthLnNldEF0dHJpYnV0ZSgidHlwZSIsYiksYyYmKGEudmFsdWU9Yyk7cmV0dXJuIGJ9fX0sdmFsdWU6e2dldDpmdW5jdGlvbihhLGIpe2lmKHcmJmYubm9kZU5hbWUoYSwiYnV0dG9uIikpcmV0dXJuIHcuZ2V0KGEsYik7cmV0dXJuIGIgaW4gYT9hLnZhbHVlOm51bGx9LHNldDpmdW5jdGlvbihhLGIsYyl7aWYodyYmZi5ub2RlTmFtZShhLCJidXR0b24iKSlyZXR1cm4gdy5zZXQoYSxiLGMpO2EudmFsdWU9Yn19fSxwcm9wRml4Ont0YWJpbmRleDoidGFiSW5kZXgiLHJlYWRvbmx5OiJyZWFkT25seSIsImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIsY2VsbHBhZGRpbmc6ImNlbGxQYWRkaW5nIixyb3dzcGFuOiJyb3dTcGFuIixjb2xzcGFuOiJjb2xTcGFuIix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIixjb250ZW50ZWRpdGFibGU6ImNvbnRlbnRFZGl0YWJsZSJ9LHByb3A6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGcsaCxpPWEubm9kZVR5cGU7aWYoIWF8fGk9PT0zfHxpPT09OHx8aT09PTIpcmV0dXJuIGI7aD1pIT09MXx8IWYuaXNYTUxEb2MoYSksaCYmKGM9Zi5wcm9wRml4W2NdfHxjLGc9Zi5wcm9wSG9va3NbY10pO3JldHVybiBkIT09Yj9nJiYic2V0ImluIGcmJihlPWcuc2V0KGEsZCxjKSkhPT1iP2U6YVtjXT1kOmcmJiJnZXQiaW4gZyYmKGU9Zy5nZXQoYSxjKSkhPT1udWxsP2U6YVtjXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBjPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTtyZXR1cm4gYyYmYy5zcGVjaWZpZWQ/cGFyc2VJbnQoYy52YWx1ZSwxMCk6cy50ZXN0KGEubm9kZU5hbWUpfHx0LnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOmJ9fX19KSxmLmF0dHJIb29rcy50YWJpbmRleD1mLnByb3BIb29rcy50YWJJbmRleCx4PXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZCxlPWYucHJvcChhLGMpO3JldHVybiBlPT09ITB8fHR5cGVvZiBlIT0iYm9vbGVhbiImJihkPWEuZ2V0QXR0cmlidXRlTm9kZShjKSkmJmQubm9kZVZhbHVlIT09ITE/Yy50b0xvd2VyQ2FzZSgpOmJ9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7Yj09PSExP2YucmVtb3ZlQXR0cihhLGMpOihkPWYucHJvcEZpeFtjXXx8YyxkIGluIGEmJihhW2RdPSEwKSxhLnNldEF0dHJpYnV0ZShjLGMudG9Mb3dlckNhc2UoKSkpO3JldHVybiBjfX0sdnx8KHk9e25hbWU6ITAsaWQ6ITB9LHc9Zi52YWxIb29rcy5idXR0b249e2dldDpmdW5jdGlvbihhLGMpe3ZhciBkO2Q9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkJiYoeVtjXT9kLm5vZGVWYWx1ZSE9PSIiOmQuc3BlY2lmaWVkKT9kLm5vZGVWYWx1ZTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEuZ2V0QXR0cmlidXRlTm9kZShkKTtlfHwoZT1jLmNyZWF0ZUF0dHJpYnV0ZShkKSxhLnNldEF0dHJpYnV0ZU5vZGUoZSkpO3JldHVybiBlLm5vZGVWYWx1ZT1iKyIifX0sZi5hdHRySG9va3MudGFiaW5kZXguc2V0PXcuc2V0LGYuZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtmLmF0dHJIb29rc1tiXT1mLmV4dGVuZChmLmF0dHJIb29rc1tiXSx7c2V0OmZ1bmN0aW9uKGEsYyl7aWYoYz09PSIiKXthLnNldEF0dHJpYnV0ZShiLCJhdXRvIik7cmV0dXJuIGN9fX0pfSksZi5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtnZXQ6dy5nZXQsc2V0OmZ1bmN0aW9uKGEsYixjKXtiPT09IiImJihiPSJmYWxzZSIpLHcuc2V0KGEsYixjKX19KSxmLnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWR8fGYuZWFjaChbImhyZWYiLCJzcmMiLCJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYyl7Zi5hdHRySG9va3NbY109Zi5leHRlbmQoZi5hdHRySG9va3NbY10se2dldDpmdW5jdGlvbihhKXt2YXIgZD1hLmdldEF0dHJpYnV0ZShjLDIpO3JldHVybiBkPT09bnVsbD9iOmR9fSl9KSxmLnN1cHBvcnQuc3R5bGV8fChmLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKXx8Yn0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD0iIitifX0pLGYuc3VwcG9ydC5vcHRTZWxlY3RlZHx8KGYucHJvcEhvb2tzLnNlbGVjdGVkPWYuZXh0ZW5kKGYucHJvcEhvb2tzLnNlbGVjdGVkLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO2ImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCk7cmV0dXJuIG51bGx9fSkpLGYuc3VwcG9ydC5lbmN0eXBlfHwoZi5wcm9wRml4LmVuY3R5cGU9ImVuY29kaW5nIiksZi5zdXBwb3J0LmNoZWNrT258fGYuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe2YudmFsSG9va3NbdGhpc109e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoInZhbHVlIik9PT1udWxsPyJvbiI6YS52YWx1ZX19fSksZi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT1mLmV4dGVuZChmLnZhbEhvb2tzW3RoaXNdLHtzZXQ6ZnVuY3Rpb24oYSxiKXtpZihmLmlzQXJyYXkoYikpcmV0dXJuIGEuY2hlY2tlZD1mLmluQXJyYXkoZihhKS52YWwoKSxiKT49MH19KX0pO3ZhciB6PS9cLiguKikkLyxBPS9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSxCPS9cLi9nLEM9LyAvZyxEPS9bXlx3XHMufGBdL2csRT0vXihbXlwuXSopPyg/OlwuKC4rKSk/JC8sRj0vXGJob3ZlcihcLlxTKyk/LyxHPS9ea2V5LyxIPS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxJPS9eKFx3KikoPzojKFtcd1wtXSspKT8oPzpcLihbXHdcLV0rKSk/JC8sSj1mdW5jdGlvbihhKXt2YXIgYj1JLmV4ZWMoYSk7YiYmCihiWzFdPShiWzFdfHwiIikudG9Mb3dlckNhc2UoKSxiWzNdPWJbM10mJm5ldyBSZWdFeHAoIig/Ol58XFxzKSIrYlszXSsiKD86XFxzfCQpIikpO3JldHVybiBifSxLPWZ1bmN0aW9uKGEsYil7cmV0dXJuKCFiWzFdfHxhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iWzFdKSYmKCFiWzJdfHxhLmlkPT09YlsyXSkmJighYlszXXx8YlszXS50ZXN0KGEuY2xhc3NOYW1lKSl9LEw9ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZXZlbnQuc3BlY2lhbC5ob3Zlcj9hOmEucmVwbGFjZShGLCJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIil9O2YuZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGMsZCxlLGcpe3ZhciBoLGksaixrLGwsbSxuLG8scCxxLHIscztpZighKGEubm9kZVR5cGU9PT0zfHxhLm5vZGVUeXBlPT09OHx8IWN8fCFkfHwhKGg9Zi5fZGF0YShhKSkpKXtkLmhhbmRsZXImJihwPWQsZD1wLmhhbmRsZXIpLGQuZ3VpZHx8KGQuZ3VpZD1mLmd1aWQrKyksaj1oLmV2ZW50cyxqfHwoaC5ldmVudHM9aj17fSksaT1oLmhhbmRsZSxpfHwoaC5oYW5kbGU9aT1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGYhPSJ1bmRlZmluZWQiJiYoIWF8fGYuZXZlbnQudHJpZ2dlcmVkIT09YS50eXBlKT9mLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGkuZWxlbSxhcmd1bWVudHMpOmJ9LGkuZWxlbT1hKSxjPUwoYykuc3BsaXQoIiAiKTtmb3Ioaz0wO2s8Yy5sZW5ndGg7aysrKXtsPUUuZXhlYyhjW2tdKXx8W10sbT1sWzFdLG49KGxbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxzPWYuZXZlbnQuc3BlY2lhbFttXXx8e30sbT0oZz9zLmRlbGVnYXRlVHlwZTpzLmJpbmRUeXBlKXx8bSxzPWYuZXZlbnQuc3BlY2lhbFttXXx8e30sbz1mLmV4dGVuZCh7dHlwZTptLG9yaWdUeXBlOmxbMV0sZGF0YTplLGhhbmRsZXI6ZCxndWlkOmQuZ3VpZCxzZWxlY3RvcjpnLG5hbWVzcGFjZTpuLmpvaW4oIi4iKX0scCksZyYmKG8ucXVpY2s9SihnKSwhby5xdWljayYmZi5leHByLm1hdGNoLlBPUy50ZXN0KGcpJiYoby5pc1Bvc2l0aW9uYWw9ITApKSxyPWpbbV07aWYoIXIpe3I9alttXT1bXSxyLmRlbGVnYXRlQ291bnQ9MDtpZighcy5zZXR1cHx8cy5zZXR1cC5jYWxsKGEsZSxuLGkpPT09ITEpYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihtLGksITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIittLGkpfXMuYWRkJiYocy5hZGQuY2FsbChhLG8pLG8uaGFuZGxlci5ndWlkfHwoby5oYW5kbGVyLmd1aWQ9ZC5ndWlkKSksZz9yLnNwbGljZShyLmRlbGVnYXRlQ291bnQrKywwLG8pOnIucHVzaChvKSxmLmV2ZW50Lmdsb2JhbFttXT0hMH1hPW51bGx9fSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWYuaGFzRGF0YShhKSYmZi5fZGF0YShhKSxnLGgsaSxqLGssbCxtLG4sbyxwLHE7aWYoISFlJiYhIShtPWUuZXZlbnRzKSl7Yj1MKGJ8fCIiKS5zcGxpdCgiICIpO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe2g9RS5leGVjKGJbZ10pfHxbXSxpPWhbMV0saj1oWzJdO2lmKCFpKXtqPWo/Ii4iK2o6IiI7Zm9yKGwgaW4gbSlmLmV2ZW50LnJlbW92ZShhLGwraixjLGQpO3JldHVybn1uPWYuZXZlbnQuc3BlY2lhbFtpXXx8e30saT0oZD9uLmRlbGVnYXRlVHlwZTpuLmJpbmRUeXBlKXx8aSxwPW1baV18fFtdLGs9cC5sZW5ndGgsaj1qP25ldyBSZWdFeHAoIihefFxcLikiK2ouc3BsaXQoIi4iKS5zb3J0KCkuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIik6bnVsbDtpZihjfHxqfHxkfHxuLnJlbW92ZSlmb3IobD0wO2w8cC5sZW5ndGg7bCsrKXtxPXBbbF07aWYoIWN8fGMuZ3VpZD09PXEuZ3VpZClpZighanx8ai50ZXN0KHEubmFtZXNwYWNlKSlpZighZHx8ZD09PXEuc2VsZWN0b3J8fGQ9PT0iKioiJiZxLnNlbGVjdG9yKXAuc3BsaWNlKGwtLSwxKSxxLnNlbGVjdG9yJiZwLmRlbGVnYXRlQ291bnQtLSxuLnJlbW92ZSYmbi5yZW1vdmUuY2FsbChhLHEpfWVsc2UgcC5sZW5ndGg9MDtwLmxlbmd0aD09PTAmJmshPT1wLmxlbmd0aCYmKCghbi50ZWFyZG93bnx8bi50ZWFyZG93bi5jYWxsKGEsaik9PT0hMSkmJmYucmVtb3ZlRXZlbnQoYSxpLGUuaGFuZGxlKSxkZWxldGUgbVtpXSl9Zi5pc0VtcHR5T2JqZWN0KG0pJiYobz1lLmhhbmRsZSxvJiYoby5lbGVtPW51bGwpLGYucmVtb3ZlRGF0YShhLFsiZXZlbnRzIiwiaGFuZGxlIl0sITApKX19LGN1c3RvbUV2ZW50OntnZXREYXRhOiEwLHNldERhdGE6ITAsY2hhbmdlRGF0YTohMH0sdHJpZ2dlcjpmdW5jdGlvbihjLGQsZSxnKXtpZighZXx8ZS5ub2RlVHlwZSE9PTMmJmUubm9kZVR5cGUhPT04KXt2YXIgaD1jLnR5cGV8fGMsaT1bXSxqLGssbCxtLG4sbyxwLHEscixzO2guaW5kZXhPZigiISIpPj0wJiYoaD1oLnNsaWNlKDAsLTEpLGs9ITApLGguaW5kZXhPZigiLiIpPj0wJiYoaT1oLnNwbGl0KCIuIiksaD1pLnNoaWZ0KCksaS5zb3J0KCkpO2lmKCghZXx8Zi5ldmVudC5jdXN0b21FdmVudFtoXSkmJiFmLmV2ZW50Lmdsb2JhbFtoXSlyZXR1cm47Yz10eXBlb2YgYz09Im9iamVjdCI/Y1tmLmV4cGFuZG9dP2M6bmV3IGYuRXZlbnQoaCxjKTpuZXcgZi5FdmVudChoKSxjLnR5cGU9aCxjLmlzVHJpZ2dlcj0hMCxjLmV4Y2x1c2l2ZT1rLGMubmFtZXNwYWNlPWkuam9pbigiLiIpLGMubmFtZXNwYWNlX3JlPWMubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2kuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIik6bnVsbCxvPWguaW5kZXhPZigiOiIpPDA/Im9uIitoOiIiLChnfHwhZSkmJmMucHJldmVudERlZmF1bHQoKTtpZighZSl7aj1mLmNhY2hlO2ZvcihsIGluIGopaltsXS5ldmVudHMmJmpbbF0uZXZlbnRzW2hdJiZmLmV2ZW50LnRyaWdnZXIoYyxkLGpbbF0uaGFuZGxlLmVsZW0sITApO3JldHVybn1jLnJlc3VsdD1iLGMudGFyZ2V0fHwoYy50YXJnZXQ9ZSksZD1kIT1udWxsP2YubWFrZUFycmF5KGQpOltdLGQudW5zaGlmdChjKSxwPWYuZXZlbnQuc3BlY2lhbFtoXXx8e307aWYocC50cmlnZ2VyJiZwLnRyaWdnZXIuYXBwbHkoZSxkKT09PSExKXJldHVybjtyPVtbZSxwLmJpbmRUeXBlfHxoXV07aWYoIWcmJiFwLm5vQnViYmxlJiYhZi5pc1dpbmRvdyhlKSl7cz1wLmRlbGVnYXRlVHlwZXx8aCxuPW51bGw7Zm9yKG09ZS5wYXJlbnROb2RlO207bT1tLnBhcmVudE5vZGUpci5wdXNoKFttLHNdKSxuPW07biYmbj09PWUub3duZXJEb2N1bWVudCYmci5wdXNoKFtuLmRlZmF1bHRWaWV3fHxuLnBhcmVudFdpbmRvd3x8YSxzXSl9Zm9yKGw9MDtsPHIubGVuZ3RoO2wrKyl7bT1yW2xdWzBdLGMudHlwZT1yW2xdWzFdLHE9KGYuX2RhdGEobSwiZXZlbnRzIil8fHt9KVtjLnR5cGVdJiZmLl9kYXRhKG0sImhhbmRsZSIpLHEmJnEuYXBwbHkobSxkKSxxPW8mJm1bb10scSYmZi5hY2NlcHREYXRhKG0pJiZxLmFwcGx5KG0sZCk7aWYoYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrfWMudHlwZT1oLGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fCghcC5fZGVmYXVsdHx8cC5fZGVmYXVsdC5hcHBseShlLm93bmVyRG9jdW1lbnQsZCk9PT0hMSkmJihoIT09ImNsaWNrInx8IWYubm9kZU5hbWUoZSwiYSIpKSYmZi5hY2NlcHREYXRhKGUpJiZvJiZlW2hdJiYoaCE9PSJmb2N1cyImJmghPT0iYmx1ciJ8fGMudGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiFmLmlzV2luZG93KGUpJiYobj1lW29dLG4mJihlW29dPW51bGwpLGYuZXZlbnQudHJpZ2dlcmVkPWgsZVtoXSgpLGYuZXZlbnQudHJpZ2dlcmVkPWIsbiYmKGVbb109bikpO3JldHVybiBjLnJlc3VsdH19LGRpc3BhdGNoOmZ1bmN0aW9uKGMpe2M9Zi5ldmVudC5maXgoY3x8YS5ldmVudCk7dmFyIGQ9KGYuX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtjLnR5cGVdfHxbXSxlPWQuZGVsZWdhdGVDb3VudCxnPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApLGg9IWMuZXhjbHVzaXZlJiYhYy5uYW1lc3BhY2UsaT0oZi5ldmVudC5zcGVjaWFsW2MudHlwZV18fHt9KS5oYW5kbGUsaj1bXSxrLGwsbSxuLG8scCxxLHIscyx0LHU7Z1swXT1jLGMuZGVsZWdhdGVUYXJnZXQ9dGhpcztpZihlJiYhYy50YXJnZXQuZGlzYWJsZWQmJighYy5idXR0b258fGMudHlwZSE9PSJjbGljayIpKWZvcihtPWMudGFyZ2V0O20hPXRoaXM7bT1tLnBhcmVudE5vZGV8fHRoaXMpe289e30scT1bXTtmb3Ioaz0wO2s8ZTtrKyspcj1kW2tdLHM9ci5zZWxlY3Rvcix0PW9bc10sci5pc1Bvc2l0aW9uYWw/dD0odHx8KG9bc109ZihzKSkpLmluZGV4KG0pPj0wOnQ9PT1iJiYodD1vW3NdPXIucXVpY2s/SyhtLHIucXVpY2spOmYobSkuaXMocykpLHQmJnEucHVzaChyKTtxLmxlbmd0aCYmai5wdXNoKHtlbGVtOm0sbWF0Y2hlczpxfSl9ZC5sZW5ndGg+ZSYmai5wdXNoKHtlbGVtOnRoaXMsbWF0Y2hlczpkLnNsaWNlKGUpfSk7Zm9yKGs9MDtrPGoubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2srKyl7cD1qW2tdLGMuY3VycmVudFRhcmdldD1wLmVsZW07Zm9yKGw9MDtsPHAubWF0Y2hlcy5sZW5ndGgmJiFjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7bCsrKXtyPXAubWF0Y2hlc1tsXTtpZihofHwhYy5uYW1lc3BhY2UmJiFyLm5hbWVzcGFjZXx8Yy5uYW1lc3BhY2VfcmUmJmMubmFtZXNwYWNlX3JlLnRlc3Qoci5uYW1lc3BhY2UpKWMuZGF0YT1yLmRhdGEsYy5oYW5kbGVPYmo9cixuPShpfHxyLmhhbmRsZXIpLmFwcGx5KHAuZWxlbSxnKSxuIT09YiYmKGMucmVzdWx0PW4sbj09PSExJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCkpKX19cmV0dXJuIGMucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7YS53aGljaD09bnVsbCYmKGEud2hpY2g9Yi5jaGFyQ29kZSE9bnVsbD9iLmNoYXJDb2RlOmIua2V5Q29kZSk7cmV0dXJuIGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50IHdoZWVsRGVsdGEiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsZCl7dmFyIGUsZixnLGg9ZC5idXR0b24saT1kLmZyb21FbGVtZW50O2EucGFnZVg9PW51bGwmJmQuY2xpZW50WCE9bnVsbCYmKGU9YS50YXJnZXQub3duZXJEb2N1bWVudHx8YyxmPWUuZG9jdW1lbnRFbGVtZW50LGc9ZS5ib2R5LGEucGFnZVg9ZC5jbGllbnRYKyhmJiZmLnNjcm9sbExlZnR8fGcmJmcuc2Nyb2xsTGVmdHx8MCktKGYmJmYuY2xpZW50TGVmdHx8ZyYmZy5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWQuY2xpZW50WSsoZiYmZi5zY3JvbGxUb3B8fGcmJmcuc2Nyb2xsVG9wfHwwKS0oZiYmZi5jbGllbnRUb3B8fGcmJmcuY2xpZW50VG9wfHwwKSksIWEucmVsYXRlZFRhcmdldCYmaSYmKGEucmVsYXRlZFRhcmdldD1pPT09YS50YXJnZXQ/ZC50b0VsZW1lbnQ6aSksIWEud2hpY2gmJmghPT1iJiYoYS53aGljaD1oJjE/MTpoJjI/MzpoJjQ/MjowKTtyZXR1cm4gYX19LGZpeDpmdW5jdGlvbihhKXtpZihhW2YuZXhwYW5kb10pcmV0dXJuIGE7dmFyIGQsZSxnPWEsaD1mLmV2ZW50LmZpeEhvb2tzW2EudHlwZV18fHt9LGk9aC5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChoLnByb3BzKTp0aGlzLnByb3BzO2E9Zi5FdmVudChnKTtmb3IoZD1pLmxlbmd0aDtkOyllPWlbLS1kXSxhW2VdPWdbZV07YS50YXJnZXR8fChhLnRhcmdldD1nLnNyY0VsZW1lbnR8fGMpLGEudGFyZ2V0Lm5vZGVUeXBlPT09MyYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGEubWV0YUtleT09PWImJihhLm1ldGFLZXk9YS5jdHJsS2V5KTtyZXR1cm4gaC5maWx0ZXI/aC5maWx0ZXIoYSxnKTphfSxzcGVjaWFsOntyZWFkeTp7c2V0dXA6Zi5iaW5kUmVhZHl9LGZvY3VzOntkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4iLG5vQnViYmxlOiEwfSxibHVyOntkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0Iixub0J1YmJsZTohMH0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsYyl7Zi5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9Yyl9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7dGhpcy5vbmJlZm9yZXVubG9hZD09PWImJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWYuZXh0ZW5kKG5ldyBmLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7ZD9mLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOmYuZXZlbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMucHJldmVudERlZmF1bHQoKX19LGYuZXZlbnQuaGFuZGxlPWYuZXZlbnQuZGlzcGF0Y2gsZi5yZW1vdmVFdmVudD1jLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXthLmRldGFjaEV2ZW50JiZhLmRldGFjaEV2ZW50KCJvbiIrYixjKX0sZi5FdmVudD1mdW5jdGlvbihhLGIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGYuRXZlbnQpKXJldHVybiBuZXcgZi5FdmVudChhLGIpO2EmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fGEucmV0dXJuVmFsdWU9PT0hMXx8YS5nZXRQcmV2ZW50RGVmYXVsdCYmYS5nZXRQcmV2ZW50RGVmYXVsdCgpP046TSk6dGhpcy50eXBlPWEsYiYmZi5leHRlbmQodGhpcyxiKSx0aGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8Zi5ub3coKSx0aGlzW2YuZXhwYW5kb109ITB9LGYuRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPU47dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50OyFhfHwoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6YS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9Tjt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7IWF8fChhLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKSxhLmNhbmNlbEJ1YmJsZT0hMCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9Tix0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6TSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpNLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOk19LGYuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7Zi5ldmVudC5zcGVjaWFsW2FdPWYuZXZlbnQuc3BlY2lhbFtiXT17ZGVsZWdhdGVUeXBlOmIsYmluZFR5cGU6YixoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWEucmVsYXRlZFRhcmdldCxkPWEuaGFuZGxlT2JqLGU9ZC5zZWxlY3RvcixnLGg7aWYoIWN8fGQub3JpZ1R5cGU9PT1hLnR5cGV8fGMhPT1iJiYhZi5jb250YWlucyhiLGMpKWc9YS50eXBlLGEudHlwZT1kLm9yaWdUeXBlLGg9ZC5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLnR5cGU9ZztyZXR1cm4gaH19fSksZi5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXN8fChmLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe2lmKGYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO2YuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGM9YS50YXJnZXQsZD1mLm5vZGVOYW1lKGMsImlucHV0Iil8fGYubm9kZU5hbWUoYywiYnV0dG9uIik/Yy5mb3JtOmI7ZCYmIWQuX3N1Ym1pdF9hdHRhY2hlZCYmKGYuZXZlbnQuYWRkKGQsInN1Ym1pdC5fc3VibWl0IixmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJmYuZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsdGhpcy5wYXJlbnROb2RlLGEsITApfSksZC5fc3VibWl0X2F0dGFjaGVkPSEwKX0pfSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKGYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO2YuZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSksZi5zdXBwb3J0LmNoYW5nZUJ1YmJsZXN8fChmLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe2lmKEEudGVzdCh0aGlzLm5vZGVOYW1lKSl7aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIilmLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXthLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lPT09ImNoZWNrZWQiJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLGYuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMuX2p1c3RfY2hhbmdlZCYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSxmLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCkpfSk7cmV0dXJuITF9Zi5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7QS50ZXN0KGIubm9kZU5hbWUpJiYhYi5fY2hhbmdlX2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoYiwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmIWEuaXNTaW11bGF0ZWQmJmYuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGEsITApfSksYi5fY2hhbmdlX2F0dGFjaGVkPSEwKX0pfSxoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7aWYodGhpcyE9PWJ8fGEuaXNTaW11bGF0ZWR8fGEuaXNUcmlnZ2VyfHxiLnR5cGUhPT0icmFkaW8iJiZiLnR5cGUhPT0iY2hlY2tib3giKXJldHVybiBhLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtmLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpO3JldHVybiBBLnRlc3QodGhpcy5ub2RlTmFtZSl9fSksZi5zdXBwb3J0LmZvY3VzaW5CdWJibGVzfHxmLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGQ9MCxlPWZ1bmN0aW9uKGEpe2YuZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxmLmV2ZW50LmZpeChhKSwhMCl9O2YuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXtkKys9PT0wJiZjLmFkZEV2ZW50TGlzdGVuZXIoYSxlLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXstLWQ9PT0wJiZjLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxlLCEwKX19fSksZi5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGEsYyxkLGUsZyl7dmFyIGgsaTtpZih0eXBlb2YgYT09Im9iamVjdCIpe3R5cGVvZiBjIT0ic3RyaW5nIiYmKGQ9YyxjPWIpO2ZvcihpIGluIGEpdGhpcy5vbihpLGMsZCxhW2ldLGcpO3JldHVybiB0aGlzfWQ9PW51bGwmJmU9PW51bGw/KGU9YyxkPWM9Yik6ZT09bnVsbCYmKHR5cGVvZiBjPT0ic3RyaW5nIj8oZT1kLGQ9Yik6KGU9ZCxkPWMsYz1iKSk7aWYoZT09PSExKWU9TTtlbHNlIGlmKCFlKXJldHVybiB0aGlzO2c9PT0xJiYoaD1lLGU9ZnVuY3Rpb24oYSl7ZigpLm9mZihhKTtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUuZ3VpZD1oLmd1aWR8fChoLmd1aWQ9Zi5ndWlkKyspKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5ldmVudC5hZGQodGhpcyxhLGUsZCxjKX0pfSxvbmU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24uY2FsbCh0aGlzLGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGMsZCl7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5oYW5kbGVPYmope3ZhciBlPWEuaGFuZGxlT2JqO2YoYS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGUubmFtZXNwYWNlP2UudHlwZSsiLiIrZS5uYW1lc3BhY2U6ZS50eXBlLGUuc2VsZWN0b3IsZS5oYW5kbGVyKTtyZXR1cm4gdGhpc31pZih0eXBlb2YgYT09Im9iamVjdCIpe2Zvcih2YXIgZyBpbiBhKXRoaXMub2ZmKGcsYyxhW2ddKTtyZXR1cm4gdGhpc31pZihjPT09ITF8fHR5cGVvZiBjPT0iZnVuY3Rpb24iKWQ9YyxjPWI7ZD09PSExJiYoZD1NKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5ldmVudC5yZW1vdmUodGhpcyxhLGQsYyl9KX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGxpdmU6ZnVuY3Rpb24oYSxiLGMpe2YodGhpcy5jb250ZXh0KS5vbihhLHRoaXMuc2VsZWN0b3IsYixjKTtyZXR1cm4gdGhpc30sZGllOmZ1bmN0aW9uKGEsYil7Zih0aGlzLmNvbnRleHQpLm9mZihhLHRoaXMuc2VsZWN0b3J8fCIqKiIsYik7cmV0dXJuIHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09MT90aGlzLm9mZihhLCIqKiIpOnRoaXMub2ZmKGIsYSxjKX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7aWYodGhpc1swXSlyZXR1cm4gZi5ldmVudC50cmlnZ2VyKGEsYix0aGlzWzBdLCEwKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cyxjPWEuZ3VpZHx8Zi5ndWlkKyssZD0wLGU9ZnVuY3Rpb24oYyl7dmFyIGU9KGYuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklZDtmLl9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2EuZ3VpZCxlKzEpLGMucHJldmVudERlZmF1bHQoKTtyZXR1cm4gYltlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfTtlLmd1aWQ9Yzt3aGlsZShkPGIubGVuZ3RoKWJbZCsrXS5ndWlkPWM7cmV0dXJuIHRoaXMuY2xpY2soZSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pLGYuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2YuZm5bYl09ZnVuY3Rpb24oYSxjKXtjPT1udWxsJiYoYz1hLGE9bnVsbCk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLmJpbmQoYixhLGMpOnRoaXMudHJpZ2dlcihiKX0sZi5hdHRyRm4mJihmLmF0dHJGbltiXT0hMCksRy50ZXN0KGIpJiYoZi5ldmVudC5maXhIb29rc1tiXT1mLmV2ZW50LmtleUhvb2tzKSxILnRlc3QoYikmJihmLmV2ZW50LmZpeEhvb2tzW2JdPWYuZXZlbnQubW91c2VIb29rcyl9KSxmdW5jdGlvbigpe2Z1bmN0aW9uIHgoYSxiLGMsZSxmLGcpe2Zvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9ZVtoXTtpZihqKXt2YXIgaz0hMTtqPWpbYV07d2hpbGUoail7aWYoaltkXT09PWMpe2s9ZVtqLnNpenNldF07YnJlYWt9aWYoai5ub2RlVHlwZT09PTEpe2d8fChqW2RdPWMsai5zaXpzZXQ9aCk7aWYodHlwZW9mIGIhPSJzdHJpbmciKXtpZihqPT09Yil7az0hMDticmVha319ZWxzZSBpZihtLmZpbHRlcihiLFtqXSkubGVuZ3RoPjApe2s9ajticmVha319aj1qW2FdfWVbaF09a319fWZ1bmN0aW9uIHcoYSxiLGMsZSxmLGcpe2Zvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9ZVtoXTtpZihqKXt2YXIgaz0hMTtqPWpbYV07d2hpbGUoail7aWYoaltkXT09PWMpe2s9ZVtqLnNpenNldF07YnJlYWt9ai5ub2RlVHlwZT09PTEmJiFnJiYoaltkXT1jLGouc2l6c2V0PWgpO2lmKGoubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIpe2s9ajticmVha31qPWpbYV19ZVtoXT1rfX19dmFyIGE9LygoPzpcKCg/OlwoW14oKV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxbJyJdW14nIl0qWyciXXxbXlxbXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZyxkPSJzaXpjYWNoZSIrKE1hdGgucmFuZG9tKCkrIiIpLnJlcGxhY2UoIi4iLCIiKSxlPTAsZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGg9ITEsaT0hMCxqPS9cXC9nLGs9L1xyXG4vZyxsPS9cVy87WzAsMF0uc29ydChmdW5jdGlvbigpe2k9ITE7cmV0dXJuIDB9KTt2YXIgbT1mdW5jdGlvbihiLGQsZSxmKXtlPWV8fFtdLGQ9ZHx8Yzt2YXIgaD1kO2lmKGQubm9kZVR5cGUhPT0xJiZkLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighYnx8dHlwZW9mIGIhPSJzdHJpbmciKXJldHVybiBlO3ZhciBpLGosayxsLG4scSxyLHQsdT0hMCx2PW0uaXNYTUwoZCksdz1bXSx4PWI7ZG97YS5leGVjKCIiKSxpPWEuZXhlYyh4KTtpZihpKXt4PWlbM10sdy5wdXNoKGlbMV0pO2lmKGlbMl0pe2w9aVszXTticmVha319fXdoaWxlKGkpO2lmKHcubGVuZ3RoPjEmJnAuZXhlYyhiKSlpZih3Lmxlbmd0aD09PTImJm8ucmVsYXRpdmVbd1swXV0paj15KHdbMF0rd1sxXSxkLGYpO2Vsc2V7aj1vLnJlbGF0aXZlW3dbMF1dP1tkXTptKHcuc2hpZnQoKSxkKTt3aGlsZSh3Lmxlbmd0aCliPXcuc2hpZnQoKSxvLnJlbGF0aXZlW2JdJiYoYis9dy5zaGlmdCgpKSxqPXkoYixqLGYpfWVsc2V7IWYmJncubGVuZ3RoPjEmJmQubm9kZVR5cGU9PT05JiYhdiYmby5tYXRjaC5JRC50ZXN0KHdbMF0pJiYhby5tYXRjaC5JRC50ZXN0KHdbdy5sZW5ndGgtMV0pJiYobj1tLmZpbmQody5zaGlmdCgpLGQsdiksZD1uLmV4cHI/bS5maWx0ZXIobi5leHByLG4uc2V0KVswXTpuLnNldFswXSk7aWYoZCl7bj1mP3tleHByOncucG9wKCksc2V0OnMoZil9Om0uZmluZCh3LnBvcCgpLHcubGVuZ3RoPT09MSYmKHdbMF09PT0ifiJ8fHdbMF09PT0iKyIpJiZkLnBhcmVudE5vZGU/ZC5wYXJlbnROb2RlOmQsdiksaj1uLmV4cHI/bS5maWx0ZXIobi5leHByLG4uc2V0KTpuLnNldCx3Lmxlbmd0aD4wP2s9cyhqKTp1PSExO3doaWxlKHcubGVuZ3RoKXE9dy5wb3AoKSxyPXEsby5yZWxhdGl2ZVtxXT9yPXcucG9wKCk6cT0iIixyPT1udWxsJiYocj1kKSxvLnJlbGF0aXZlW3FdKGsscix2KX1lbHNlIGs9dz1bXX1rfHwoaz1qKSxrfHxtLmVycm9yKHF8fGIpO2lmKGcuY2FsbChrKT09PSJbb2JqZWN0IEFycmF5XSIpaWYoIXUpZS5wdXNoLmFwcGx5KGUsayk7ZWxzZSBpZihkJiZkLm5vZGVUeXBlPT09MSlmb3IodD0wO2tbdF0hPW51bGw7dCsrKWtbdF0mJihrW3RdPT09ITB8fGtbdF0ubm9kZVR5cGU9PT0xJiZtLmNvbnRhaW5zKGQsa1t0XSkpJiZlLnB1c2goalt0XSk7ZWxzZSBmb3IodD0wO2tbdF0hPW51bGw7dCsrKWtbdF0mJmtbdF0ubm9kZVR5cGU9PT0xJiZlLnB1c2goalt0XSk7ZWxzZSBzKGssZSk7bCYmKG0obCxoLGUsZiksbS51bmlxdWVTb3J0KGUpKTtyZXR1cm4gZX07bS51bmlxdWVTb3J0PWZ1bmN0aW9uKGEpe2lmKHUpe2g9aSxhLnNvcnQodSk7aWYoaClmb3IodmFyIGI9MTtiPGEubGVuZ3RoO2IrKylhW2JdPT09YVtiLTFdJiZhLnNwbGljZShiLS0sMSl9cmV0dXJuIGF9LG0ubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBtKGEsbnVsbCxudWxsLGIpfSxtLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGIpe3JldHVybiBtKGIsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9LG0uZmluZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2lmKCFhKXJldHVybltdO2ZvcihlPTAsZj1vLm9yZGVyLmxlbmd0aDtlPGY7ZSsrKXtoPW8ub3JkZXJbZV07aWYoZz1vLmxlZnRNYXRjaFtoXS5leGVjKGEpKXtpPWdbMV0sZy5zcGxpY2UoMSwxKTtpZihpLnN1YnN0cihpLmxlbmd0aC0xKSE9PSJcXCIpe2dbMV09KGdbMV18fCIiKS5yZXBsYWNlKGosIiIpLGQ9by5maW5kW2hdKGcsYixjKTtpZihkIT1udWxsKXthPWEucmVwbGFjZShvLm1hdGNoW2hdLCIiKTticmVha319fX1kfHwoZD10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOltdKTtyZXR1cm57c2V0OmQsZXhwcjphfX0sbS5maWx0ZXI9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbixwLHE9YSxyPVtdLHM9Yyx0PWMmJmNbMF0mJm0uaXNYTUwoY1swXSk7d2hpbGUoYSYmYy5sZW5ndGgpe2ZvcihoIGluIG8uZmlsdGVyKWlmKChmPW8ubGVmdE1hdGNoW2hdLmV4ZWMoYSkpIT1udWxsJiZmWzJdKXtrPW8uZmlsdGVyW2hdLGw9ZlsxXSxnPSExLGYuc3BsaWNlKDEsMSk7aWYobC5zdWJzdHIobC5sZW5ndGgtMSk9PT0iXFwiKWNvbnRpbnVlO3M9PT1yJiYocj1bXSk7aWYoby5wcmVGaWx0ZXJbaF0pe2Y9by5wcmVGaWx0ZXJbaF0oZixzLGQscixlLHQpO2lmKCFmKWc9aT0hMDtlbHNlIGlmKGY9PT0hMCljb250aW51ZX1pZihmKWZvcihuPTA7KGo9c1tuXSkhPW51bGw7bisrKWomJihpPWsoaixmLG4scykscD1lXmksZCYmaSE9bnVsbD9wP2c9ITA6c1tuXT0hMTpwJiYoci5wdXNoKGopLGc9ITApKTtpZihpIT09Yil7ZHx8KHM9ciksYT1hLnJlcGxhY2Uoby5tYXRjaFtoXSwiIik7aWYoIWcpcmV0dXJuW107YnJlYWt9fWlmKGE9PT1xKWlmKGc9PW51bGwpbS5lcnJvcihhKTtlbHNlIGJyZWFrO3E9YX1yZXR1cm4gc30sbS5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2F9O3ZhciBuPW0uZ2V0VGV4dD1mdW5jdGlvbihhKXt2YXIgYixjLGQ9YS5ub2RlVHlwZSxlPSIiO2lmKGQpe2lmKGQ9PT0xKXtpZih0eXBlb2YgYS50ZXh0Q29udGVudD09InN0cmluZyIpcmV0dXJuIGEudGV4dENvbnRlbnQ7aWYodHlwZW9mIGEuaW5uZXJUZXh0PT0ic3RyaW5nIilyZXR1cm4gYS5pbm5lclRleHQucmVwbGFjZShrLCIiKTtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpZSs9bihhKX1lbHNlIGlmKGQ9PT0zfHxkPT09NClyZXR1cm4gYS5ub2RlVmFsdWV9ZWxzZSBmb3IoYj0wO2M9YVtiXTtiKyspYy5ub2RlVHlwZSE9PTgmJihlKz1uKGMpKTtyZXR1cm4gZX0sbz1tLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLENMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sTkFNRTovXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspWyciXSpcXS8sQVRUUjovXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLyxUQUc6L14oKD86W1x3XHUwMGMwLVx1RkZGRlwqXC1dfFxcLikrKS8sQ0hJTEQ6Lzoob25seXxudGh8bGFzdHxmaXJzdCktY2hpbGQoPzpcKFxzKihldmVufG9kZHwoPzpbK1wtXT9cZCt8KD86WytcLV0/XGQqKT9uXHMqKD86WytcLV1ccypcZCspPykpXHMqXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLFBTRVVETzovOigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKSg/OlwoKFsnIl0/KSgoPzpcKFteXCldK1wpfFteXChcKV0qKSspXDJcKSk/L30sbGVmdE1hdGNoOnt9LGF0dHJNYXA6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxhdHRySGFuZGxlOntocmVmOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidHlwZSIpfX0scmVsYXRpdmU6eyIrIjpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBiPT0ic3RyaW5nIixkPWMmJiFsLnRlc3QoYiksZT1jJiYhZDtkJiYoYj1iLnRvTG93ZXJDYXNlKCkpO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGgsaDtmPGc7ZisrKWlmKGg9YVtmXSl7d2hpbGUoKGg9aC5wcmV2aW91c1NpYmxpbmcpJiZoLm5vZGVUeXBlIT09MSk7YVtmXT1lfHxoJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iP2h8fCExOmg9PT1ifWUmJm0uZmlsdGVyKGIsYSwhMCl9LCI+IjpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9dHlwZW9mIGI9PSJzdHJpbmciLGU9MCxmPWEubGVuZ3RoO2lmKGQmJiFsLnRlc3QoYikpe2I9Yi50b0xvd2VyQ2FzZSgpO2Zvcig7ZTxmO2UrKyl7Yz1hW2VdO2lmKGMpe3ZhciBnPWMucGFyZW50Tm9kZTthW2VdPWcubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/ZzohMX19fWVsc2V7Zm9yKDtlPGY7ZSsrKWM9YVtlXSxjJiYoYVtlXT1kP2MucGFyZW50Tm9kZTpjLnBhcmVudE5vZGU9PT1iKTtkJiZtLmZpbHRlcihiLGEsITApfX0sIiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwYXJlbnROb2RlIixiLGYsYSxkLGMpfSwifiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwcmV2aW91c1NpYmxpbmciLGIsZixhLGQsYyl9fSxmaW5kOntJRDpmdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQhPSJ1bmRlZmluZWQiJiYhYyl7dmFyIGQ9Yi5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZCYmZC5wYXJlbnROb2RlP1tkXTpbXX19LE5BTUU6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5TmFtZSE9InVuZGVmaW5lZCIpe3ZhciBjPVtdLGQ9Yi5nZXRFbGVtZW50c0J5TmFtZShhWzFdKTtmb3IodmFyIGU9MCxmPWQubGVuZ3RoO2U8ZjtlKyspZFtlXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PWFbMV0mJmMucHVzaChkW2VdKTtyZXR1cm4gYy5sZW5ndGg9PT0wP251bGw6Y319LFRBRzpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIilyZXR1cm4gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKX19LHByZUZpbHRlcjp7Q0xBU1M6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2E9IiAiK2FbMV0ucmVwbGFjZShqLCIiKSsiICI7aWYoZilyZXR1cm4gYTtmb3IodmFyIGc9MCxoOyhoPWJbZ10pIT1udWxsO2crKyloJiYoZV4oaC5jbGFzc05hbWUmJigiICIraC5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKC9bXHRcblxyXS9nLCIgIikuaW5kZXhPZihhKT49MCk/Y3x8ZC5wdXNoKGgpOmMmJihiW2ddPSExKSk7cmV0dXJuITF9LElEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIil9LFRBRzpmdW5jdGlvbihhLGIpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIikudG9Mb3dlckNhc2UoKX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7aWYoYVsxXT09PSJudGgiKXthWzJdfHxtLmVycm9yKGFbMF0pLGFbMl09YVsyXS5yZXBsYWNlKC9eXCt8XHMqL2csIiIpO3ZhciBiPS8oLT8pKFxkKikoPzpuKFsrXC1dP1xkKikpPy8uZXhlYyhhWzJdPT09ImV2ZW4iJiYiMm4ifHxhWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChhWzJdKSYmIjBuKyIrYVsyXXx8YVsyXSk7YVsyXT1iWzFdKyhiWzJdfHwxKS0wLGFbM109YlszXS0wfWVsc2UgYVsyXSYmbS5lcnJvcihhWzBdKTthWzBdPWUrKztyZXR1cm4gYX0sQVRUUjpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9YVsxXT1hWzFdLnJlcGxhY2UoaiwiIik7IWYmJm8uYXR0ck1hcFtnXSYmKGFbMV09by5hdHRyTWFwW2ddKSxhWzRdPShhWzRdfHxhWzVdfHwiIikucmVwbGFjZShqLCIiKSxhWzJdPT09In49IiYmKGFbNF09IiAiK2FbNF0rIiAiKTtyZXR1cm4gYX0sUFNFVURPOmZ1bmN0aW9uKGIsYyxkLGUsZil7aWYoYlsxXT09PSJub3QiKWlmKChhLmV4ZWMoYlszXSl8fCIiKS5sZW5ndGg+MXx8L15cdy8udGVzdChiWzNdKSliWzNdPW0oYlszXSxudWxsLG51bGwsYyk7ZWxzZXt2YXIgZz1tLmZpbHRlcihiWzNdLGMsZCwhMF5mKTtkfHxlLnB1c2guYXBwbHkoZSxnKTtyZXR1cm4hMX1lbHNlIGlmKG8ubWF0Y2guUE9TLnRlc3QoYlswXSl8fG8ubWF0Y2guQ0hJTEQudGVzdChiWzBdKSlyZXR1cm4hMDtyZXR1cm4gYn0sUE9TOmZ1bmN0aW9uKGEpe2EudW5zaGlmdCghMCk7cmV0dXJuIGF9fSxmaWx0ZXJzOntlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITEmJmEudHlwZSE9PSJoaWRkZW4ifSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNoZWNrZWQ9PT0hMH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtyZXR1cm4gYS5zZWxlY3RlZD09PSEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuISFhLmZpcnN0Q2hpbGR9LGVtcHR5OmZ1bmN0aW9uKGEpe3JldHVybiFhLmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuISFtKGNbM10sYSkubGVuZ3RofSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuL2hcZC9pLnRlc3QoYS5ub2RlTmFtZSl9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSxjPWEudHlwZTtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInRleHQiPT09YyYmKGI9PT1jfHxiPT09bnVsbCl9LHJhZGlvOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicmFkaW8iPT09YS50eXBlfSxjaGVja2JveDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImNoZWNrYm94Ij09PWEudHlwZX0sZmlsZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImZpbGUiPT09YS50eXBlfSxwYXNzd29yZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInBhc3N3b3JkIj09PWEudHlwZX0sc3VibWl0OmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYj09PSJpbnB1dCJ8fGI9PT0iYnV0dG9uIikmJiJzdWJtaXQiPT09YS50eXBlfSxpbWFnZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImltYWdlIj09PWEudHlwZX0scmVzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihiPT09ImlucHV0Inx8Yj09PSJidXR0b24iKSYmInJlc2V0Ij09PWEudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYj09PSJpbnB1dCImJiJidXR0b24iPT09YS50eXBlfHxiPT09ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybi9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChhLm5vZGVOYW1lKX0sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1hLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudH19LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0wfSxsYXN0OmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBiPT09ZC5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihhLGIpe3JldHVybiBiJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MX0sbHQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPGNbM10tMH0sZ3Q6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPmNbM10tMH0sbnRoOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn0sZXE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNdLTA9PT1ifX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsxXSxmPW8uZmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpO2lmKGU9PT0iY29udGFpbnMiKXJldHVybihhLnRleHRDb250ZW50fHxhLmlubmVyVGV4dHx8bihbYV0pfHwiIikuaW5kZXhPZihiWzNdKT49MDtpZihlPT09Im5vdCIpe3ZhciBnPWJbM107Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKWlmKGdbaF09PT1hKXJldHVybiExO3JldHVybiEwfW0uZXJyb3IoZSl9LENISUxEOmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz1iWzFdLGw9YTtzd2l0Y2goayl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShsPWwucHJldmlvdXNTaWJsaW5nKWlmKGwubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGs9PT0iZmlyc3QiKXJldHVybiEwO2w9YTtjYXNlImxhc3QiOndoaWxlKGw9bC5uZXh0U2libGluZylpZihsLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMDtjYXNlIm50aCI6Yz1iWzJdLGU9YlszXTtpZihjPT09MSYmZT09PTApcmV0dXJuITA7Zj1iWzBdLGc9YS5wYXJlbnROb2RlO2lmKGcmJihnW2RdIT09Znx8IWEubm9kZUluZGV4KSl7aT0wO2ZvcihsPWcuZmlyc3RDaGlsZDtsO2w9bC5uZXh0U2libGluZylsLm5vZGVUeXBlPT09MSYmKGwubm9kZUluZGV4PSsraSk7Z1tkXT1mfWo9YS5ub2RlSW5kZXgtZTtyZXR1cm4gYz09PTA/aj09PTA6aiVjPT09MCYmai9jPj0wfX0sSUQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlVHlwZT09PTEmJmEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0iKiImJmEubm9kZVR5cGU9PT0xfHwhIWEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9LENMQVNTOmZ1bmN0aW9uKGEsYil7cmV0dXJuKCIgIisoYS5jbGFzc05hbWV8fGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoYik+LTF9LEFUVFI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iWzFdLGQ9bS5hdHRyP20uYXR0cihhLGMpOm8uYXR0ckhhbmRsZVtjXT9vLmF0dHJIYW5kbGVbY10oYSk6YVtjXSE9bnVsbD9hW2NdOmEuZ2V0QXR0cmlidXRlKGMpLGU9ZCsiIixmPWJbMl0sZz1iWzRdO3JldHVybiBkPT1udWxsP2Y9PT0iIT0iOiFmJiZtLmF0dHI/ZCE9bnVsbDpmPT09Ij0iP2U9PT1nOmY9PT0iKj0iP2UuaW5kZXhPZihnKT49MDpmPT09In49Ij8oIiAiK2UrIiAiKS5pbmRleE9mKGcpPj0wOmc/Zj09PSIhPSI/ZSE9PWc6Zj09PSJePSI/ZS5pbmRleE9mKGcpPT09MDpmPT09IiQ9Ij9lLnN1YnN0cihlLmxlbmd0aC1nLmxlbmd0aCk9PT1nOmY9PT0ifD0iP2U9PT1nfHxlLnN1YnN0cigwLGcubGVuZ3RoKzEpPT09ZysiLSI6ITE6ZSYmZCE9PSExfSxQT1M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsyXSxmPW8uc2V0RmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpfX19LHA9by5tYXRjaC5QT1MscT1mdW5jdGlvbihhLGIpe3JldHVybiJcXCIrKGItMCsxKX07Zm9yKHZhciByIGluIG8ubWF0Y2gpby5tYXRjaFtyXT1uZXcgUmVnRXhwKG8ubWF0Y2hbcl0uc291cmNlKy8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSksby5sZWZ0TWF0Y2hbcl09bmV3IFJlZ0V4cCgvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlK28ubWF0Y2hbcl0uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZyxxKSk7dmFyIHM9ZnVuY3Rpb24oYSxiKXthPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEsMCk7aWYoYil7Yi5wdXNoLmFwcGx5KGIsYSk7cmV0dXJuIGJ9cmV0dXJuIGF9O3RyeXtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLDApWzBdLm5vZGVUeXBlfWNhdGNoKHQpe3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ9Ynx8W107aWYoZy5jYWxsKGEpPT09IltvYmplY3QgQXJyYXldIilBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkLGEpO2Vsc2UgaWYodHlwZW9mIGEubGVuZ3RoPT0ibnVtYmVyIilmb3IodmFyIGU9YS5sZW5ndGg7YzxlO2MrKylkLnB1c2goYVtjXSk7ZWxzZSBmb3IoO2FbY107YysrKWQucHVzaChhW2NdKTtyZXR1cm4gZH19dmFyIHUsdjtjLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj91PWZ1bmN0aW9uKGEsYil7aWYoYT09PWIpe2g9ITA7cmV0dXJuIDB9aWYoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb258fCFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uPy0xOjE7cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmND8tMToxfToodT1mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtoPSEwO3JldHVybiAwfWlmKGEuc291cmNlSW5kZXgmJmIuc291cmNlSW5kZXgpcmV0dXJuIGEuc291cmNlSW5kZXgtYi5zb3VyY2VJbmRleDt2YXIgYyxkLGU9W10sZj1bXSxnPWEucGFyZW50Tm9kZSxpPWIucGFyZW50Tm9kZSxqPWc7aWYoZz09PWkpcmV0dXJuIHYoYSxiKTtpZighZylyZXR1cm4tMTtpZighaSlyZXR1cm4gMTt3aGlsZShqKWUudW5zaGlmdChqKSxqPWoucGFyZW50Tm9kZTtqPWk7d2hpbGUoailmLnVuc2hpZnQoaiksaj1qLnBhcmVudE5vZGU7Yz1lLmxlbmd0aCxkPWYubGVuZ3RoO2Zvcih2YXIgaz0wO2s8YyYmazxkO2srKylpZihlW2tdIT09ZltrXSlyZXR1cm4gdihlW2tdLGZba10pO3JldHVybiBrPT09Yz92KGEsZltrXSwtMSk6dihlW2tdLGIsMSl9LHY9ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PT1iKXJldHVybiBjO3ZhciBkPWEubmV4dFNpYmxpbmc7d2hpbGUoZCl7aWYoZD09PWIpcmV0dXJuLTE7ZD1kLm5leHRTaWJsaW5nfXJldHVybiAxfSksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRUaW1lKCksZT1jLmRvY3VtZW50RWxlbWVudDthLmlubmVySFRNTD0iPGEgbmFtZT0nIitkKyInLz4iLGUuaW5zZXJ0QmVmb3JlKGEsZS5maXJzdENoaWxkKSxjLmdldEVsZW1lbnRCeUlkKGQpJiYoby5maW5kLklEPWZ1bmN0aW9uKGEsYyxkKXtpZih0eXBlb2YgYy5nZXRFbGVtZW50QnlJZCE9InVuZGVmaW5lZCImJiFkKXt2YXIgZT1jLmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBlP2UuaWQ9PT1hWzFdfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlIT0idW5kZWZpbmVkIiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLm5vZGVWYWx1ZT09PWFbMV0/W2VdOmI6W119fSxvLmZpbHRlci5JRD1mdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUhPSJ1bmRlZmluZWQiJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGEubm9kZVR5cGU9PT0xJiZjJiZjLm5vZGVWYWx1ZT09PWJ9KSxlLnJlbW92ZUNoaWxkKGEpLGU9YT1udWxsfSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmFwcGVuZENoaWxkKGMuY3JlYXRlQ29tbWVudCgiIikpLGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCYmKG8uZmluZC5UQUc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pO2lmKGFbMV09PT0iKiIpe3ZhciBkPVtdO2Zvcih2YXIgZT0wO2NbZV07ZSsrKWNbZV0ubm9kZVR5cGU9PT0xJiZkLnB1c2goY1tlXSk7Yz1kfXJldHVybiBjfSksYS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLGEuZmlyc3RDaGlsZCYmdHlwZW9mIGEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUhPSJ1bmRlZmluZWQiJiZhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyImJihvLmF0dHJIYW5kbGUuaHJlZj1mdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImhyZWYiLDIpfSksYT1udWxsfSgpLGMucXVlcnlTZWxlY3RvckFsbCYmZnVuY3Rpb24oKXt2YXIgYT1tLGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSJfX3NpenpsZV9fIjtiLmlubmVySFRNTD0iPHAgY2xhc3M9J1RFU1QnPjwvcD4iO2lmKCFiLnF1ZXJ5U2VsZWN0b3JBbGx8fGIucXVlcnlTZWxlY3RvckFsbCgiLlRFU1QiKS5sZW5ndGghPT0wKXttPWZ1bmN0aW9uKGIsZSxmLGcpe2U9ZXx8YztpZighZyYmIW0uaXNYTUwoZSkpe3ZhciBoPS9eKFx3KyQpfF5cLihbXHdcLV0rJCl8XiMoW1x3XC1dKyQpLy5leGVjKGIpO2lmKGgmJihlLm5vZGVUeXBlPT09MXx8ZS5ub2RlVHlwZT09PTkpKXtpZihoWzFdKXJldHVybiBzKGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYiksZik7aWYoaFsyXSYmby5maW5kLkNMQVNTJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIHMoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGhbMl0pLGYpfWlmKGUubm9kZVR5cGU9PT05KXtpZihiPT09ImJvZHkiJiZlLmJvZHkpcmV0dXJuIHMoW2UuYm9keV0sZik7aWYoaCYmaFszXSl7dmFyIGk9ZS5nZXRFbGVtZW50QnlJZChoWzNdKTtpZighaXx8IWkucGFyZW50Tm9kZSlyZXR1cm4gcyhbXSxmKTtpZihpLmlkPT09aFszXSlyZXR1cm4gcyhbaV0sZil9dHJ5e3JldHVybiBzKGUucXVlcnlTZWxlY3RvckFsbChiKSxmKX1jYXRjaChqKXt9fWVsc2UgaWYoZS5ub2RlVHlwZT09PTEmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXt2YXIgaz1lLGw9ZS5nZXRBdHRyaWJ1dGUoImlkIiksbj1sfHxkLHA9ZS5wYXJlbnROb2RlLHE9L15ccypbK35dLy50ZXN0KGIpO2w/bj1uLnJlcGxhY2UoLycvZywiXFwkJiIpOmUuc2V0QXR0cmlidXRlKCJpZCIsbikscSYmcCYmKGU9ZS5wYXJlbnROb2RlKTt0cnl7aWYoIXF8fHApcmV0dXJuIHMoZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWQ9JyIrbisiJ10gIitiKSxmKX1jYXRjaChyKXt9ZmluYWxseXtsfHxrLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBhKGIsZSxmLGcpfTtmb3IodmFyIGUgaW4gYSltW2VdPWFbZV07Yj1udWxsfX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuZG9jdW1lbnRFbGVtZW50LGI9YS5tYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcjtpZihiKXt2YXIgZD0hYi5jYWxsKGMuY3JlYXRlRWxlbWVudCgiZGl2IiksImRpdiIpLGU9ITE7dHJ5e2IuY2FsbChjLmRvY3VtZW50RWxlbWVudCwiW3Rlc3QhPScnXTpzaXp6bGUiKX1jYXRjaChmKXtlPSEwfW0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYyl7Yz1jLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCFtLmlzWE1MKGEpKXRyeXtpZihlfHwhby5tYXRjaC5QU0VVRE8udGVzdChjKSYmIS8hPS8udGVzdChjKSl7dmFyIGY9Yi5jYWxsKGEsYyk7aWYoZnx8IWR8fGEuZG9jdW1lbnQmJmEuZG9jdW1lbnQubm9kZVR5cGUhPT0xMSlyZXR1cm4gZn19Y2F0Y2goZyl7fXJldHVybiBtKGMsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9fX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J3Rlc3QgZSc+PC9kaXY+PGRpdiBjbGFzcz0ndGVzdCc+PC9kaXY+IjtpZighIWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MCl7YS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIjtpZihhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0xKXJldHVybjtvLm9yZGVyLnNwbGljZSgxLDAsIkNMQVNTIiksby5maW5kLkNMQVNTPWZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT0idW5kZWZpbmVkIiYmIWMpcmV0dXJuIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhWzFdKX0sYT1udWxsfX0oKSxjLmRvY3VtZW50RWxlbWVudC5jb250YWlucz9tLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEhPT1iJiYoYS5jb250YWlucz9hLmNvbnRhaW5zKGIpOiEwKX06Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/bS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTYpfTptLmNvbnRhaW5zPWZ1bmN0aW9uKCl7cmV0dXJuITF9LG0uaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9KGE/YS5vd25lckRvY3VtZW50fHxhOjApLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj9iLm5vZGVOYW1lIT09IkhUTUwiOiExfTt2YXIgeT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZT1bXSxmPSIiLGc9Yi5ub2RlVHlwZT9bYl06Yjt3aGlsZShkPW8ubWF0Y2guUFNFVURPLmV4ZWMoYSkpZis9ZFswXSxhPWEucmVwbGFjZShvLm1hdGNoLlBTRVVETywiIik7YT1vLnJlbGF0aXZlW2FdP2ErIioiOmE7Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKW0oYSxnW2hdLGUsYyk7cmV0dXJuIG0uZmlsdGVyKGYsZSl9O20uYXR0cj1mLmF0dHIsbS5zZWxlY3RvcnMuYXR0ck1hcD17fSxmLmZpbmQ9bSxmLmV4cHI9bS5zZWxlY3RvcnMsZi5leHByWyI6Il09Zi5leHByLmZpbHRlcnMsZi51bmlxdWU9bS51bmlxdWVTb3J0LGYudGV4dD1tLmdldFRleHQsZi5pc1hNTERvYz1tLmlzWE1MLGYuY29udGFpbnM9bS5jb250YWluc30oKTt2YXIgTz0vVW50aWwkLyxQPS9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLFE9LywvLFI9L14uW146I1xbXC4sXSokLyxTPUFycmF5LnByb3RvdHlwZS5zbGljZSxUPWYuZXhwci5tYXRjaC5QT1MsVT17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLGMsZDtpZih0eXBlb2YgYSE9InN0cmluZyIpcmV0dXJuIGYoYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspaWYoZi5jb250YWlucyhiW2NdLHRoaXMpKXJldHVybiEwfSk7dmFyIGU9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGcsaCxpO2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtnPWUubGVuZ3RoLGYuZmluZChhLHRoaXNbY10sZSk7aWYoYz4wKWZvcihoPWc7aDxlLmxlbmd0aDtoKyspZm9yKGk9MDtpPGc7aSsrKWlmKGVbaV09PT1lW2hdKXtlLnNwbGljZShoLS0sMSk7YnJlYWt9fXJldHVybiBlfSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9ZihhKTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxjPWIubGVuZ3RoO2E8YzthKyspaWYoZi5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVyh0aGlzLGEsITEpLCJub3QiLGEpfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFcodGhpcyxhLCEwKSwiZmlsdGVyIixhKX0saXM6ZnVuY3Rpb24oYSl7cmV0dXJuISFhJiYodHlwZW9mIGE9PSJzdHJpbmciP1QudGVzdChhKT9mKGEsdGhpcy5jb250ZXh0KS5pbmRleCh0aGlzWzBdKT49MDpmLmZpbHRlcihhLHRoaXMpLmxlbmd0aD4wOnRoaXMuZmlsdGVyKGEpLmxlbmd0aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQsZSxnPXRoaXNbMF07aWYoZi5pc0FycmF5KGEpKXt2YXIgaD0xO3doaWxlKGcmJmcub3duZXJEb2N1bWVudCYmZyE9PWIpe2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspZihnKS5pcyhhW2RdKSYmYy5wdXNoKHtzZWxlY3RvcjphW2RdLGVsZW06ZyxsZXZlbDpofSk7Zz1nLnBhcmVudE5vZGUsaCsrfXJldHVybiBjfXZhciBpPVQudGVzdChhKXx8dHlwZW9mIGEhPSJzdHJpbmciP2YoYSxifHx0aGlzLmNvbnRleHQpOjA7Zm9yKGQ9MCxlPXRoaXMubGVuZ3RoO2Q8ZTtkKyspe2c9dGhpc1tkXTt3aGlsZShnKXtpZihpP2kuaW5kZXgoZyk+LTE6Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihnLGEpKXtjLnB1c2goZyk7YnJlYWt9Zz1nLnBhcmVudE5vZGU7aWYoIWd8fCFnLm93bmVyRG9jdW1lbnR8fGc9PT1ifHxnLm5vZGVUeXBlPT09MTEpYnJlYWt9fWM9Yy5sZW5ndGg+MT9mLnVuaXF1ZShjKTpjO3JldHVybiB0aGlzLnB1c2hTdGFjayhjLCJjbG9zZXN0IixhKX0saW5kZXg6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLnByZXZBbGwoKS5sZW5ndGg6LTE7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBmLmluQXJyYXkodGhpc1swXSxmKGEpKTtyZXR1cm4gZi5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKX0sYWRkOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE9PSJzdHJpbmciP2YoYSxiKTpmLm1ha2VBcnJheShhJiZhLm5vZGVUeXBlP1thXTphKSxkPWYubWVyZ2UodGhpcy5nZXQoKSxjKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVihjWzBdKXx8VihkWzBdKT9kOmYudW5pcXVlKGQpKX0sYW5kU2VsZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZCh0aGlzLnByZXZPYmplY3QpfX0pLGYuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmYi5ub2RlVHlwZSE9PTExP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwYXJlbnROb2RlIixjKX0sbmV4dDpmdW5jdGlvbihhKXtyZXR1cm4gZi5udGgoYSwyLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBmLm50aChhLDIsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwibmV4dFNpYmxpbmciLGMpfSxwcmV2VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEucGFyZW50Tm9kZS5maXJzdENoaWxkLGEpfSxjaGlsZHJlbjpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBmLm5vZGVOYW1lKGEsImlmcmFtZSIpP2EuY29udGVudERvY3VtZW50fHxhLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6Zi5tYWtlQXJyYXkoYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7Zi5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPWYubWFwKHRoaXMsYixjKSxnPVMuY2FsbChhcmd1bWVudHMpO08udGVzdChhKXx8KGQ9YyksZCYmdHlwZW9mIGQ9PSJzdHJpbmciJiYoZT1mLmZpbHRlcihkLGUpKSxlPXRoaXMubGVuZ3RoPjEmJiFVW2FdP2YudW5pcXVlKGUpOmUsKHRoaXMubGVuZ3RoPjF8fFEudGVzdChkKSkmJlAudGVzdChhKSYmKGU9ZS5yZXZlcnNlKCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhlLGEsZy5qb2luKCIsIikpfX0pLGYuZXh0ZW5kKHtmaWx0ZXI6ZnVuY3Rpb24oYSxiLGMpe2MmJihhPSI6bm90KCIrYSsiKSIpO3JldHVybiBiLmxlbmd0aD09PTE/Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihiWzBdLGEpP1tiWzBdXTpbXTpmLmZpbmQubWF0Y2hlcyhhLGIpfSxkaXI6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPVtdLGc9YVtjXTt3aGlsZShnJiZnLm5vZGVUeXBlIT09OSYmKGQ9PT1ifHxnLm5vZGVUeXBlIT09MXx8IWYoZykuaXMoZCkpKWcubm9kZVR5cGU9PT0xJiZlLnB1c2goZyksZz1nW2NdO3JldHVybiBlfSxudGg6ZnVuY3Rpb24oYSxiLGMsZCl7Yj1ifHwxO3ZhciBlPTA7Zm9yKDthO2E9YVtjXSlpZihhLm5vZGVUeXBlPT09MSYmKytlPT09YilicmVhaztyZXR1cm4gYX0sc2libGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPVtdO2Zvcig7YTthPWEubmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PTEmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9fSk7dmFyIFk9ImFiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMgZGF0YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUgdmlkZW8iLFo9LyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZywkPS9eXHMrLyxfPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vaWcsYmE9LzwoW1x3Ol0rKS8sYmI9Lzx0Ym9keS9pLGJjPS88fCYjP1x3KzsvLGJkPS88KD86c2NyaXB0fHN0eWxlKS9pLGJlPS88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxvcHRpb258c3R5bGUpL2ksYmY9bmV3IFJlZ0V4cCgiPCg/OiIrWS5yZXBsYWNlKCIgIiwifCIpKyIpIiwiaSIpLGJnPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGJoPS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksYmk9L15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8sYmo9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX0sYms9WChjKTtiai5vcHRncm91cD1iai5vcHRpb24sYmoudGJvZHk9YmoudGZvb3Q9YmouY29sZ3JvdXA9YmouY2FwdGlvbj1iai50aGVhZCxiai50aD1iai50ZCxmLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8KGJqLl9kZWZhdWx0PVsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdKSxmLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2MudGV4dChhLmNhbGwodGhpcyxiLGMudGV4dCgpKSl9KTtpZih0eXBlb2YgYSE9Im9iamVjdCImJmEhPT1iKXJldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGMpLmNyZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gZi50ZXh0KHRoaXMpfSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1mKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdENoaWxkJiZhLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xKWE9YS5maXJzdENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYodGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YodGhpcykud3JhcEFsbChhKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7Zi5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fGYodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuYXBwZW5kQ2hpbGQoYSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihhKXt0aGlzLm5vZGVUeXBlPT09MSYmdGhpcy5pbnNlcnRCZWZvcmUoYSx0aGlzLmZpcnN0Q2hpbGQpfSl9LGJlZm9yZTpmdW5jdGlvbigpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9Zihhcmd1bWVudHNbMF0pO2EucHVzaC5hcHBseShhLHRoaXMudG9BcnJheSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYSwiYmVmb3JlIixhcmd1bWVudHMpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPXRoaXMucHVzaFN0YWNrKHRoaXMsImFmdGVyIgosYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxmKGFyZ3VtZW50c1swXSkudG9BcnJheSgpKTtyZXR1cm4gYX19LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ7KGQ9dGhpc1tjXSkhPW51bGw7YysrKWlmKCFhfHxmLmZpbHRlcihhLFtkXSkubGVuZ3RoKSFiJiZkLm5vZGVUeXBlPT09MSYmKGYuY2xlYW5EYXRhKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksZi5jbGVhbkRhdGEoW2RdKSksZC5wYXJlbnROb2RlJiZkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYjsoYj10aGlzW2FdKSE9bnVsbDthKyspe2Iubm9kZVR5cGU9PT0xJiZmLmNsZWFuRGF0YShiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3doaWxlKGIuZmlyc3RDaGlsZCliLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7YT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6YjtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtpZihhPT09YilyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShaLCIiKTpudWxsO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmIWJkLnRlc3QoYSkmJihmLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2V8fCEkLnRlc3QoYSkpJiYhYmpbKGJhLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXthPWEucmVwbGFjZShfLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKHZhciBjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXRoaXNbY10ubm9kZVR5cGU9PT0xJiYoZi5jbGVhbkRhdGEodGhpc1tjXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSx0aGlzW2NdLmlubmVySFRNTD1hKX1jYXRjaChlKXt0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfX1lbHNlIGYuaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9Zih0aGlzKTtjLmh0bWwoYS5jYWxsKHRoaXMsYixjLmh0bWwoKSkpfSk6dGhpcy5lbXB0eSgpLmFwcGVuZChhKTtyZXR1cm4gdGhpc30scmVwbGFjZVdpdGg6ZnVuY3Rpb24oYSl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpLGQ9Yy5odG1sKCk7Yy5yZXBsYWNlV2l0aChhLmNhbGwodGhpcyxiLGQpKX0pO3R5cGVvZiBhIT0ic3RyaW5nIiYmKGE9ZihhKS5kZXRhY2goKSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxpbmcsYz10aGlzLnBhcmVudE5vZGU7Zih0aGlzKS5yZW1vdmUoKSxiP2YoYikuYmVmb3JlKGEpOmYoYykuYXBwZW5kKGEpfSl9cmV0dXJuIHRoaXMubGVuZ3RoP3RoaXMucHVzaFN0YWNrKGYoZi5pc0Z1bmN0aW9uKGEpP2EoKTphKSwicmVwbGFjZVdpdGgiLGEpOnRoaXN9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnLGgsaSxqPWFbMF0saz1bXTtpZighZi5zdXBwb3J0LmNoZWNrQ2xvbmUmJmFyZ3VtZW50cy5sZW5ndGg9PT0zJiZ0eXBlb2Ygaj09InN0cmluZyImJmJnLnRlc3QoaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YodGhpcykuZG9tTWFuaXAoYSxjLGQsITApfSk7aWYoZi5pc0Z1bmN0aW9uKGopKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGc9Zih0aGlzKTthWzBdPWouY2FsbCh0aGlzLGUsYz9nLmh0bWwoKTpiKSxnLmRvbU1hbmlwKGEsYyxkKX0pO2lmKHRoaXNbMF0pe2k9aiYmai5wYXJlbnROb2RlLGYuc3VwcG9ydC5wYXJlbnROb2RlJiZpJiZpLm5vZGVUeXBlPT09MTEmJmkuY2hpbGROb2Rlcy5sZW5ndGg9PT10aGlzLmxlbmd0aD9lPXtmcmFnbWVudDppfTplPWYuYnVpbGRGcmFnbWVudChhLHRoaXMsayksaD1lLmZyYWdtZW50LGguY2hpbGROb2Rlcy5sZW5ndGg9PT0xP2c9aD1oLmZpcnN0Q2hpbGQ6Zz1oLmZpcnN0Q2hpbGQ7aWYoZyl7Yz1jJiZmLm5vZGVOYW1lKGcsInRyIik7Zm9yKHZhciBsPTAsbT10aGlzLmxlbmd0aCxuPW0tMTtsPG07bCsrKWQuY2FsbChjP2JsKHRoaXNbbF0sZyk6dGhpc1tsXSxlLmNhY2hlYWJsZXx8bT4xJiZsPG4/Zi5jbG9uZShoLCEwLCEwKTpoKX1rLmxlbmd0aCYmZi5lYWNoKGssYnIpfXJldHVybiB0aGlzfX0pLGYuYnVpbGRGcmFnbWVudD1mdW5jdGlvbihhLGIsZCl7dmFyIGUsZyxoLGksaj1hWzBdO2ImJmJbMF0mJihpPWJbMF0ub3duZXJEb2N1bWVudHx8YlswXSksaS5jcmVhdGVEb2N1bWVudEZyYWdtZW50fHwoaT1jKSxhLmxlbmd0aD09PTEmJnR5cGVvZiBqPT0ic3RyaW5nIiYmai5sZW5ndGg8NTEyJiZpPT09YyYmai5jaGFyQXQoMCk9PT0iPCImJiFiZS50ZXN0KGopJiYoZi5zdXBwb3J0LmNoZWNrQ2xvbmV8fCFiZy50ZXN0KGopKSYmIWYuc3VwcG9ydC51bmtub3duRWxlbXMmJmJmLnRlc3QoaikmJihnPSEwLGg9Zi5mcmFnbWVudHNbal0saCYmaCE9PTEmJihlPWgpKSxlfHwoZT1pLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxmLmNsZWFuKGEsaSxlLGQpKSxnJiYoZi5mcmFnbWVudHNbal09aD9lOjEpO3JldHVybntmcmFnbWVudDplLGNhY2hlYWJsZTpnfX0sZi5mcmFnbWVudHM9e30sZi5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGMpe3ZhciBkPVtdLGU9ZihjKSxnPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKGcmJmcubm9kZVR5cGU9PT0xMSYmZy5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJmUubGVuZ3RoPT09MSl7ZVtiXSh0aGlzWzBdKTtyZXR1cm4gdGhpc31mb3IodmFyIGg9MCxpPWUubGVuZ3RoO2g8aTtoKyspe3ZhciBqPShoPjA/dGhpcy5jbG9uZSghMCk6dGhpcykuZ2V0KCk7ZihlW2hdKVtiXShqKSxkPWQuY29uY2F0KGopfXJldHVybiB0aGlzLnB1c2hTdGFjayhkLGEsZS5zZWxlY3Rvcil9fSksZi5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmNsb25lTm9kZSghMCksZSxnLGg7aWYoKCFmLnN1cHBvcnQubm9DbG9uZUV2ZW50fHwhZi5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSYmKGEubm9kZVR5cGU9PT0xfHxhLm5vZGVUeXBlPT09MTEpJiYhZi5pc1hNTERvYyhhKSl7Ym4oYSxkKSxlPWJvKGEpLGc9Ym8oZCk7Zm9yKGg9MDtlW2hdOysraClnW2hdJiZibihlW2hdLGdbaF0pfWlmKGIpe2JtKGEsZCk7aWYoYyl7ZT1ibyhhKSxnPWJvKGQpO2ZvcihoPTA7ZVtoXTsrK2gpYm0oZVtoXSxnW2hdKX19ZT1nPW51bGw7cmV0dXJuIGR9LGNsZWFuOmZ1bmN0aW9uKGEsYixkLGUpe3ZhciBnO2I9Ynx8Yyx0eXBlb2YgYi5jcmVhdGVFbGVtZW50PT0idW5kZWZpbmVkIiYmKGI9Yi5vd25lckRvY3VtZW50fHxiWzBdJiZiWzBdLm93bmVyRG9jdW1lbnR8fGMpO3ZhciBoPVtdLGk7Zm9yKHZhciBqPTAsazsoaz1hW2pdKSE9bnVsbDtqKyspe3R5cGVvZiBrPT0ibnVtYmVyIiYmKGsrPSIiKTtpZighayljb250aW51ZTtpZih0eXBlb2Ygaz09InN0cmluZyIpaWYoIWJjLnRlc3Qoaykpaz1iLmNyZWF0ZVRleHROb2RlKGspO2Vsc2V7az1rLnJlcGxhY2UoXywiPCQxPjwvJDI+Iik7dmFyIGw9KGJhLmV4ZWMoayl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksbT1ialtsXXx8YmouX2RlZmF1bHQsbj1tWzBdLG89Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTtiPT09Yz9iay5hcHBlbmRDaGlsZChvKTpYKGIpLmFwcGVuZENoaWxkKG8pLG8uaW5uZXJIVE1MPW1bMV0rayttWzJdO3doaWxlKG4tLSlvPW8ubGFzdENoaWxkO2lmKCFmLnN1cHBvcnQudGJvZHkpe3ZhciBwPWJiLnRlc3QoaykscT1sPT09InRhYmxlIiYmIXA/by5maXJzdENoaWxkJiZvLmZpcnN0Q2hpbGQuY2hpbGROb2RlczptWzFdPT09Ijx0YWJsZT4iJiYhcD9vLmNoaWxkTm9kZXM6W107Zm9yKGk9cS5sZW5ndGgtMTtpPj0wOy0taSlmLm5vZGVOYW1lKHFbaV0sInRib2R5IikmJiFxW2ldLmNoaWxkTm9kZXMubGVuZ3RoJiZxW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocVtpXSl9IWYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmJC50ZXN0KGspJiZvLmluc2VydEJlZm9yZShiLmNyZWF0ZVRleHROb2RlKCQuZXhlYyhrKVswXSksby5maXJzdENoaWxkKSxrPW8uY2hpbGROb2Rlc312YXIgcjtpZighZi5zdXBwb3J0LmFwcGVuZENoZWNrZWQpaWYoa1swXSYmdHlwZW9mIChyPWsubGVuZ3RoKT09Im51bWJlciIpZm9yKGk9MDtpPHI7aSsrKWJxKGtbaV0pO2Vsc2UgYnEoayk7ay5ub2RlVHlwZT9oLnB1c2goayk6aD1mLm1lcmdlKGgsayl9aWYoZCl7Zz1mdW5jdGlvbihhKXtyZXR1cm4hYS50eXBlfHxiaC50ZXN0KGEudHlwZSl9O2ZvcihqPTA7aFtqXTtqKyspaWYoZSYmZi5ub2RlTmFtZShoW2pdLCJzY3JpcHQiKSYmKCFoW2pdLnR5cGV8fGhbal0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKWUucHVzaChoW2pdLnBhcmVudE5vZGU/aFtqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhbal0pOmhbal0pO2Vsc2V7aWYoaFtqXS5ub2RlVHlwZT09PTEpe3ZhciBzPWYuZ3JlcChoW2pdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxnKTtoLnNwbGljZS5hcHBseShoLFtqKzEsMF0uY29uY2F0KHMpKX1kLmFwcGVuZENoaWxkKGhbal0pfX1yZXR1cm4gaH0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1mLmNhY2hlLGU9Zi5ldmVudC5zcGVjaWFsLGc9Zi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG87Zm9yKHZhciBoPTAsaTsoaT1hW2hdKSE9bnVsbDtoKyspe2lmKGkubm9kZU5hbWUmJmYubm9EYXRhW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pY29udGludWU7Yz1pW2YuZXhwYW5kb107aWYoYyl7Yj1kW2NdO2lmKGImJmIuZXZlbnRzKXtmb3IodmFyIGogaW4gYi5ldmVudHMpZVtqXT9mLmV2ZW50LnJlbW92ZShpLGopOmYucmVtb3ZlRXZlbnQoaSxqLGIuaGFuZGxlKTtiLmhhbmRsZSYmKGIuaGFuZGxlLmVsZW09bnVsbCl9Zz9kZWxldGUgaVtmLmV4cGFuZG9dOmkucmVtb3ZlQXR0cmlidXRlJiZpLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pLGRlbGV0ZSBkW2NdfX19fSk7dmFyIGJzPS9hbHBoYVwoW14pXSpcKS9pLGJ0PS9vcGFjaXR5PShbXildKikvLGJ1PS8oW0EtWl18Xm1zKS9nLGJ2PS9eLT9cZCsoPzpweCk/JC9pLGJ3PS9eLT9cZC8sYng9L14oW1wtK10pPShbXC0rLlxkZV0rKS8sYnk9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJ6PVsiTGVmdCIsIlJpZ2h0Il0sYkE9WyJUb3AiLCJCb3R0b20iXSxiQixiQyxiRDtmLmZuLmNzcz1mdW5jdGlvbihhLGMpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZjPT09YilyZXR1cm4gdGhpcztyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGMsITAsZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkIT09Yj9mLnN0eWxlKGEsYyxkKTpmLmNzcyhhLGMpfSl9LGYuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9YkIoYSwib3BhY2l0eSIsIm9wYWNpdHkiKTtyZXR1cm4gYz09PSIiPyIxIjpjfXJldHVybiBhLnN0eWxlLm9wYWNpdHl9fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6Zi5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWEmJmEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCYmISFhLnN0eWxlKXt2YXIgZyxoLGk9Zi5jYW1lbENhc2UoYyksaj1hLnN0eWxlLGs9Zi5jc3NIb29rc1tpXTtjPWYuY3NzUHJvcHNbaV18fGk7aWYoZD09PWIpe2lmKGsmJiJnZXQiaW4gayYmKGc9ay5nZXQoYSwhMSxlKSkhPT1iKXJldHVybiBnO3JldHVybiBqW2NdfWg9dHlwZW9mIGQsaD09PSJzdHJpbmciJiYoZz1ieC5leGVjKGQpKSYmKGQ9KyhnWzFdKzEpKitnWzJdK3BhcnNlRmxvYXQoZi5jc3MoYSxjKSksaD0ibnVtYmVyIik7aWYoZD09bnVsbHx8aD09PSJudW1iZXIiJiZpc05hTihkKSlyZXR1cm47aD09PSJudW1iZXIiJiYhZi5jc3NOdW1iZXJbaV0mJihkKz0icHgiKTtpZigha3x8ISgic2V0ImluIGspfHwoZD1rLnNldChhLGQpKSE9PWIpdHJ5e2pbY109ZH1jYXRjaChsKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnO2M9Zi5jYW1lbENhc2UoYyksZz1mLmNzc0hvb2tzW2NdLGM9Zi5jc3NQcm9wc1tjXXx8YyxjPT09ImNzc0Zsb2F0IiYmKGM9ImZsb2F0Iik7aWYoZyYmImdldCJpbiBnJiYoZT1nLmdldChhLCEwLGQpKSE9PWIpcmV0dXJuIGU7aWYoYkIpcmV0dXJuIGJCKGEsYyl9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9O2Zvcih2YXIgZSBpbiBiKWRbZV09YS5zdHlsZVtlXSxhLnN0eWxlW2VdPWJbZV07Yy5jYWxsKGEpO2ZvcihlIGluIGIpYS5zdHlsZVtlXT1kW2VdfX0pLGYuY3VyQ1NTPWYuY3NzLGYuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtmLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlO2lmKGMpe2lmKGEub2Zmc2V0V2lkdGghPT0wKXJldHVybiBiRShhLGIsZCk7Zi5zd2FwKGEsYnksZnVuY3Rpb24oKXtlPWJFKGEsYixkKX0pO3JldHVybiBlfX0sc2V0OmZ1bmN0aW9uKGEsYil7aWYoIWJ2LnRlc3QoYikpcmV0dXJuIGI7Yj1wYXJzZUZsb2F0KGIpO2lmKGI+PTApcmV0dXJuIGIrInB4In19fSksZi5zdXBwb3J0Lm9wYWNpdHl8fChmLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBidC50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9Zi5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IitiKjEwMCsiKSI6IiIsZz1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xO2lmKGI+PTEmJmYudHJpbShnLnJlcGxhY2UoYnMsIiIpKT09PSIiKXtjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIik7aWYoZCYmIWQuZmlsdGVyKXJldHVybn1jLmZpbHRlcj1icy50ZXN0KGcpP2cucmVwbGFjZShicyxlKTpnKyIgIitlfX0pLGYoZnVuY3Rpb24oKXtmLnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KGYuY3NzSG9va3MubWFyZ2luUmlnaHQ9e2dldDpmdW5jdGlvbihhLGIpe3ZhciBjO2Yuc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxmdW5jdGlvbigpe2I/Yz1iQihhLCJtYXJnaW4tcmlnaHQiLCJtYXJnaW5SaWdodCIpOmM9YS5zdHlsZS5tYXJnaW5SaWdodH0pO3JldHVybiBjfX0pfSksYy5kZWZhdWx0VmlldyYmYy5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoYkM9ZnVuY3Rpb24oYSxjKXt2YXIgZCxlLGc7Yz1jLnJlcGxhY2UoYnUsIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoIShlPWEub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykpcmV0dXJuIGI7aWYoZz1lLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKSlkPWcuZ2V0UHJvcGVydHlWYWx1ZShjKSxkPT09IiImJiFmLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYSkmJihkPWYuc3R5bGUoYSxjKSk7cmV0dXJuIGR9KSxjLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUmJihiRD1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPWEuY3VycmVudFN0eWxlJiZhLmN1cnJlbnRTdHlsZVtiXSxnPWEuc3R5bGU7Zj09PW51bGwmJmcmJihlPWdbYl0pJiYoZj1lKSwhYnYudGVzdChmKSYmYncudGVzdChmKSYmKGM9Zy5sZWZ0LGQ9YS5ydW50aW1lU3R5bGUmJmEucnVudGltZVN0eWxlLmxlZnQsZCYmKGEucnVudGltZVN0eWxlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksZy5sZWZ0PWI9PT0iZm9udFNpemUiPyIxZW0iOmZ8fDAsZj1nLnBpeGVsTGVmdCsicHgiLGcubGVmdD1jLGQmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWQpKTtyZXR1cm4gZj09PSIiPyJhdXRvIjpmfSksYkI9YkN8fGJELGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRXaWR0aCxjPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBiPT09MCYmYz09PTB8fCFmLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxmLmNzcyhhLCJkaXNwbGF5IikpPT09Im5vbmUifSxmLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFmLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9KTt2YXIgYkY9LyUyMC9nLGJHPS9cW1xdJC8sYkg9L1xyP1xuL2csYkk9LyMuKiQvLGJKPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsYks9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGJMPS9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sYk09L14oPzpHRVR8SEVBRCkkLyxiTj0vXlwvXC8vLGJPPS9cPy8sYlA9LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksYlE9L14oPzpzZWxlY3R8dGV4dGFyZWEpL2ksYlI9L1xzKy8sYlM9LyhbPyZdKV89W14mXSovLGJUPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKykpPyk/LyxiVT1mLmZuLmxvYWQsYlY9e30sYlc9e30sYlgsYlksYlo9WyIqLyJdK1siKiJdO3RyeXtiWD1lLmhyZWZ9Y2F0Y2goYiQpe2JYPWMuY3JlYXRlRWxlbWVudCgiYSIpLGJYLmhyZWY9IiIsYlg9YlguaHJlZn1iWT1iVC5leGVjKGJYLnRvTG93ZXJDYXNlKCkpfHxbXSxmLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiZiVSlyZXR1cm4gYlUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZT1hLmluZGV4T2YoIiAiKTtpZihlPj0wKXt2YXIgZz1hLnNsaWNlKGUsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGUpfXZhciBoPSJHRVQiO2MmJihmLmlzRnVuY3Rpb24oYyk/KGQ9YyxjPWIpOnR5cGVvZiBjPT0ib2JqZWN0IiYmKGM9Zi5wYXJhbShjLGYuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxoPSJQT1NUIikpO3ZhciBpPXRoaXM7Zi5hamF4KHt1cmw6YSx0eXBlOmgsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yyxjb21wbGV0ZTpmdW5jdGlvbihhLGIsYyl7Yz1hLnJlc3BvbnNlVGV4dCxhLmlzUmVzb2x2ZWQoKSYmKGEuZG9uZShmdW5jdGlvbihhKXtjPWF9KSxpLmh0bWwoZz9mKCI8ZGl2PiIpLmFwcGVuZChjLnJlcGxhY2UoYlAsIiIpKS5maW5kKGcpOmMpKSxkJiZpLmVhY2goZCxbYyxiLGFdKX19KTtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGYucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9mLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGJRLnRlc3QodGhpcy5ub2RlTmFtZSl8fGJLLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1mKHRoaXMpLnZhbCgpO3JldHVybiBjPT1udWxsP251bGw6Zi5pc0FycmF5KGMpP2YubWFwKGMsZnVuY3Rpb24oYSxjKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKGJILCJcclxuIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShiSCwiXHJcbiIpfX0pLmdldCgpfX0pLGYuZWFjaCgiYWpheFN0YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtmLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJpbmQoYixhKX19KSxmLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtmW2NdPWZ1bmN0aW9uKGEsZCxlLGcpe2YuaXNGdW5jdGlvbihkKSYmKGc9Z3x8ZSxlPWQsZD1iKTtyZXR1cm4gZi5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTpkLHN1Y2Nlc3M6ZSxkYXRhVHlwZTpnfSl9fSksZi5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBmLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtiP2NiKGEsZi5hamF4U2V0dGluZ3MpOihiPWEsYT1mLmFqYXhTZXR0aW5ncyksY2IoYSxiKTtyZXR1cm4gYX0sYWpheFNldHRpbmdzOnt1cmw6YlgsaXNMb2NhbDpiTC50ZXN0KGJZWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6Ylp9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpmLnBhcnNlSlNPTiwidGV4dCB4bWwiOmYucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0ZXI6Yl8oYlYpLGFqYXhUcmFuc3BvcnQ6Yl8oYlcpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB3KGEsYyxsLG0pe2lmKHMhPT0yKXtzPTIscSYmY2xlYXJUaW1lb3V0KHEpLHA9YixuPW18fCIiLHYucmVhZHlTdGF0ZT1hPjA/NDowO3ZhciBvLHIsdSx3PWMseD1sP2NkKGQsdixsKTpiLHksejtpZihhPj0yMDAmJmE8MzAwfHxhPT09MzA0KXtpZihkLmlmTW9kaWZpZWQpe2lmKHk9di5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKWYubGFzdE1vZGlmaWVkW2tdPXk7aWYoej12LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIikpZi5ldGFnW2tdPXp9aWYoYT09PTMwNCl3PSJub3Rtb2RpZmllZCIsbz0hMDtlbHNlIHRyeXtyPWNlKGQseCksdz0ic3VjY2VzcyIsbz0hMH1jYXRjaChBKXt3PSJwYXJzZXJlcnJvciIsdT1BfX1lbHNle3U9dztpZighd3x8YSl3PSJlcnJvciIsYTwwJiYoYT0wKX12LnN0YXR1cz1hLHYuc3RhdHVzVGV4dD0iIisoY3x8dyksbz9oLnJlc29sdmVXaXRoKGUsW3Isdyx2XSk6aC5yZWplY3RXaXRoKGUsW3Ysdyx1XSksdi5zdGF0dXNDb2RlKGopLGo9Yix0JiZnLnRyaWdnZXIoImFqYXgiKyhvPyJTdWNjZXNzIjoiRXJyb3IiKSxbdixkLG8/cjp1XSksaS5maXJlV2l0aChlLFt2LHddKSx0JiYoZy50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGRdKSwtLWYuYWN0aXZlfHxmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfX10eXBlb2YgYT09Im9iamVjdCImJihjPWEsYT1iKSxjPWN8fHt9O3ZhciBkPWYuYWpheFNldHVwKHt9LGMpLGU9ZC5jb250ZXh0fHxkLGc9ZSE9PWQmJihlLm5vZGVUeXBlfHxlIGluc3RhbmNlb2YgZik/ZihlKTpmLmV2ZW50LGg9Zi5EZWZlcnJlZCgpLGk9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksaj1kLnN0YXR1c0NvZGV8fHt9LGssbD17fSxtPXt9LG4sbyxwLHEscixzPTAsdCx1LHY9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7aWYoIXMpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTthPW1bY109bVtjXXx8YSxsW2FdPWJ9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiBzPT09Mj9uOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBjO2lmKHM9PT0yKXtpZighbyl7bz17fTt3aGlsZShjPWJKLmV4ZWMobikpb1tjWzFdLnRvTG93ZXJDYXNlKCldPWNbMl19Yz1vW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIGM9PT1iP251bGw6Y30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtzfHwoZC5taW1lVHlwZT1hKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7YT1hfHwiYWJvcnQiLHAmJnAuYWJvcnQoYSksdygwLGEpO3JldHVybiB0aGlzfX07aC5wcm9taXNlKHYpLHYuc3VjY2Vzcz12LmRvbmUsdi5lcnJvcj12LmZhaWwsdi5jb21wbGV0ZT1pLmFkZCx2LnN0YXR1c0NvZGU9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI7aWYoczwyKWZvcihiIGluIGEpaltiXT1baltiXSxhW2JdXTtlbHNlIGI9YVt2LnN0YXR1c10sdi50aGVuKGIsYil9cmV0dXJuIHRoaXN9LGQudXJsPSgoYXx8ZC51cmwpKyIiKS5yZXBsYWNlKGJJLCIiKS5yZXBsYWNlKGJOLGJZWzFdKyIvLyIpLGQuZGF0YVR5cGVzPWYudHJpbShkLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlIpLGQuY3Jvc3NEb21haW49PW51bGwmJihyPWJULmV4ZWMoZC51cmwudG9Mb3dlckNhc2UoKSksZC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT1iWVsxXSYmclsyXT09YllbMl0mJihyWzNdfHwoclsxXT09PSJodHRwOiI/ODA6NDQzKSk9PShiWVszXXx8KGJZWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGQuZGF0YSYmZC5wcm9jZXNzRGF0YSYmdHlwZW9mIGQuZGF0YSE9InN0cmluZyImJihkLmRhdGE9Zi5wYXJhbShkLmRhdGEsZC50cmFkaXRpb25hbCkpLGNhKGJWLGQsYyx2KTtpZihzPT09MilyZXR1cm4hMTt0PWQuZ2xvYmFsLGQudHlwZT1kLnR5cGUudG9VcHBlckNhc2UoKSxkLmhhc0NvbnRlbnQ9IWJNLnRlc3QoZC50eXBlKSx0JiZmLmFjdGl2ZSsrPT09MCYmZi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighZC5oYXNDb250ZW50KXtkLmRhdGEmJihkLnVybCs9KGJPLnRlc3QoZC51cmwpPyImIjoiPyIpK2QuZGF0YSxkZWxldGUgZC5kYXRhKSxrPWQudXJsO2lmKGQuY2FjaGU9PT0hMSl7dmFyIHg9Zi5ub3coKSx5PWQudXJsLnJlcGxhY2UoYlMsIiQxXz0iK3gpO2QudXJsPXkrKHk9PT1kLnVybD8oYk8udGVzdChkLnVybCk/IiYiOiI/IikrIl89Iit4OiIiKX19KGQuZGF0YSYmZC5oYXNDb250ZW50JiZkLmNvbnRlbnRUeXBlIT09ITF8fGMuY29udGVudFR5cGUpJiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZC5jb250ZW50VHlwZSksZC5pZk1vZGlmaWVkJiYoaz1rfHxkLnVybCxmLmxhc3RNb2RpZmllZFtrXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsZi5sYXN0TW9kaWZpZWRba10pLGYuZXRhZ1trXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixmLmV0YWdba10pKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsZC5kYXRhVHlwZXNbMF0mJmQuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0/ZC5hY2NlcHRzW2QuZGF0YVR5cGVzWzBdXSsoZC5kYXRhVHlwZXNbMF0hPT0iKiI/IiwgIitiWisiOyBxPTAuMDEiOiIiKTpkLmFjY2VwdHNbIioiXSk7Zm9yKHUgaW4gZC5oZWFkZXJzKXYuc2V0UmVxdWVzdEhlYWRlcih1LGQuaGVhZGVyc1t1XSk7aWYoZC5iZWZvcmVTZW5kJiYoZC5iZWZvcmVTZW5kLmNhbGwoZSx2LGQpPT09ITF8fHM9PT0yKSl7di5hYm9ydCgpO3JldHVybiExfWZvcih1IGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbdV0oZFt1XSk7cD1jYShiVyxkLGMsdik7aWYoIXApdygtMSwiTm8gVHJhbnNwb3J0Iik7ZWxzZXt2LnJlYWR5U3RhdGU9MSx0JiZnLnRyaWdnZXIoImFqYXhTZW5kIixbdixkXSksZC5hc3luYyYmZC50aW1lb3V0PjAmJihxPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0Iil9LGQudGltZW91dCkpO3RyeXtzPTEscC5zZW5kKGwsdyl9Y2F0Y2goeil7czwyP3coLTEseik6Zi5lcnJvcih6KX19cmV0dXJuIHZ9LHBhcmFtOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9Zi5pc0Z1bmN0aW9uKGIpP2IoKTpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtjPT09YiYmKGM9Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKGYuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFmLmlzUGxhaW5PYmplY3QoYSkpZi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKHZhciBnIGluIGEpY2MoZyxhW2ddLGMsZSk7cmV0dXJuIGQuam9pbigiJiIpLnJlcGxhY2UoYkYsIisiKX19KSxmLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgY2Y9Zi5ub3coKSxjZz0vKFw9KVw/KCZ8JCl8XD9cPy9pO2YuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZi5leHBhbmRvKyJfIitjZisrfX0pLGYuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlPWIuY29udGVudFR5cGU9PT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiYmdHlwZW9mIGIuZGF0YT09InN0cmluZyI7aWYoYi5kYXRhVHlwZXNbMF09PT0ianNvbnAifHxiLmpzb25wIT09ITEmJihjZy50ZXN0KGIudXJsKXx8ZSYmY2cudGVzdChiLmRhdGEpKSl7dmFyIGcsaD1iLmpzb25wQ2FsbGJhY2s9Zi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGk9YVtoXSxqPWIudXJsLGs9Yi5kYXRhLGw9IiQxIitoKyIkMiI7Yi5qc29ucCE9PSExJiYoaj1qLnJlcGxhY2UoY2csbCksYi51cmw9PT1qJiYoZSYmKGs9ay5yZXBsYWNlKGNnLGwpKSxiLmRhdGE9PT1rJiYoais9KC9cPy8udGVzdChqKT8iJiI6Ij8iKStiLmpzb25wKyI9IitoKSkpLGIudXJsPWosYi5kYXRhPWssYVtoXT1mdW5jdGlvbihhKXtnPVthXX0sZC5hbHdheXMoZnVuY3Rpb24oKXthW2hdPWksZyYmZi5pc0Z1bmN0aW9uKGkpJiZhW2hdKGdbMF0pfSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7Z3x8Zi5lcnJvcihoKyIgd2FzIG5vdCBjYWxsZWQiKTtyZXR1cm4gZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iO3JldHVybiJzY3JpcHQifX0pLGYuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovamF2YXNjcmlwdHxlY21hc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtmLmdsb2JhbEV2YWwoYSk7cmV0dXJuIGF9fX0pLGYuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihhKXthLmNhY2hlPT09YiYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIsYS5nbG9iYWw9ITEpfSksZi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBkLGU9Yy5oZWFkfHxjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGMuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGYsZyl7ZD1jLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQuYXN5bmM9ImFzeW5jIixhLnNjcmlwdENoYXJzZXQmJihkLmNoYXJzZXQ9YS5zY3JpcHRDaGFyc2V0KSxkLnNyYz1hLnVybCxkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihhLGMpe2lmKGN8fCFkLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZC5yZWFkeVN0YXRlKSlkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGUmJmQucGFyZW50Tm9kZSYmZS5yZW1vdmVDaGlsZChkKSxkPWIsY3x8ZygyMDAsInN1Y2Nlc3MiKX0sZS5pbnNlcnRCZWZvcmUoZCxlLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQub25sb2FkKDAsMSl9fX19KTt2YXIgY2g9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGNqKWNqW2FdKDAsMSl9OiExLGNpPTAsY2o7Zi5hamF4U2V0dGluZ3MueGhyPWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJmNrKCl8fGNsKCl9OmNrLGZ1bmN0aW9uKGEpe2YuZXh0ZW5kKGYuc3VwcG9ydCx7YWpheDohIWEsY29yczohIWEmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gYX0pfShmLmFqYXhTZXR0aW5ncy54aHIoKSksZi5zdXBwb3J0LmFqYXgmJmYuYWpheFRyYW5zcG9ydChmdW5jdGlvbihjKXtpZighYy5jcm9zc0RvbWFpbnx8Zi5zdXBwb3J0LmNvcnMpe3ZhciBkO3JldHVybntzZW5kOmZ1bmN0aW9uKGUsZyl7dmFyIGg9Yy54aHIoKSxpLGo7Yy51c2VybmFtZT9oLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMsYy51c2VybmFtZSxjLnBhc3N3b3JkKTpoLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMpO2lmKGMueGhyRmllbGRzKWZvcihqIGluIGMueGhyRmllbGRzKWhbal09Yy54aHJGaWVsZHNbal07Yy5taW1lVHlwZSYmaC5vdmVycmlkZU1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUoYy5taW1lVHlwZSksIWMuY3Jvc3NEb21haW4mJiFlWyJYLVJlcXVlc3RlZC1XaXRoIl0mJihlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihqIGluIGUpaC5zZXRSZXF1ZXN0SGVhZGVyKGosZVtqXSl9Y2F0Y2goayl7fWguc2VuZChjLmhhc0NvbnRlbnQmJmMuZGF0YXx8bnVsbCksZD1mdW5jdGlvbihhLGUpe3ZhciBqLGssbCxtLG47dHJ5e2lmKGQmJihlfHxoLnJlYWR5U3RhdGU9PT00KSl7ZD1iLGkmJihoLm9ucmVhZHlzdGF0ZWNoYW5nZT1mLm5vb3AsY2gmJmRlbGV0ZSBjaltpXSk7aWYoZSloLnJlYWR5U3RhdGUhPT00JiZoLmFib3J0KCk7ZWxzZXtqPWguc3RhdHVzLGw9aC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSxtPXt9LG49aC5yZXNwb25zZVhNTCxuJiZuLmRvY3VtZW50RWxlbWVudCYmKG0ueG1sPW4pLG0udGV4dD1oLnJlc3BvbnNlVGV4dDt0cnl7az1oLnN0YXR1c1RleHR9Y2F0Y2gobyl7az0iIn0haiYmYy5pc0xvY2FsJiYhYy5jcm9zc0RvbWFpbj9qPW0udGV4dD8yMDA6NDA0Omo9PT0xMjIzJiYoaj0yMDQpfX19Y2F0Y2gocCl7ZXx8ZygtMSxwKX1tJiZnKGosayxtLGwpfSwhYy5hc3luY3x8aC5yZWFkeVN0YXRlPT09ND9kKCk6KGk9KytjaSxjaCYmKGNqfHwoY2o9e30sZihhKS51bmxvYWQoY2gpKSxjaltpXT1kKSxoLm9ucmVhZHlzdGF0ZWNoYW5nZT1kKX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkKDAsMSl9fX19KTt2YXIgY209e30sY24sY28sY3A9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGNxPS9eKFsrXC1dPSk/KFtcZCsuXC1dKykoW2EteiVdKikkL2ksY3IsY3M9W1siaGVpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxbIndpZHRoIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxbIm9wYWNpdHkiXV0sY3Q7Zi5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjdygic2hvdyIsMyksYSxiLGMpO2Zvcih2YXIgZz0wLGg9dGhpcy5sZW5ndGg7ZzxoO2crKylkPXRoaXNbZ10sZC5zdHlsZSYmKGU9ZC5zdHlsZS5kaXNwbGF5LCFmLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSYmZT09PSJub25lIiYmKGU9ZC5zdHlsZS5kaXNwbGF5PSIiKSxlPT09IiImJmYuY3NzKGQsImRpc3BsYXkiKT09PSJub25lIiYmZi5fZGF0YShkLCJvbGRkaXNwbGF5IixjeChkLm5vZGVOYW1lKSkpO2ZvcihnPTA7ZzxoO2crKyl7ZD10aGlzW2ddO2lmKGQuc3R5bGUpe2U9ZC5zdHlsZS5kaXNwbGF5O2lmKGU9PT0iInx8ZT09PSJub25lIilkLnN0eWxlLmRpc3BsYXk9Zi5fZGF0YShkLCJvbGRkaXNwbGF5Iil8fCIifX1yZXR1cm4gdGhpc30saGlkZTpmdW5jdGlvbihhLGIsYyl7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjdygiaGlkZSIsMyksYSxiLGMpO3ZhciBkLGUsZz0wLGg9dGhpcy5sZW5ndGg7Zm9yKDtnPGg7ZysrKWQ9dGhpc1tnXSxkLnN0eWxlJiYoZT1mLmNzcyhkLCJkaXNwbGF5IiksZSE9PSJub25lIiYmIWYuX2RhdGEoZCwib2xkZGlzcGxheSIpJiZmLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGUpKTtmb3IoZz0wO2c8aDtnKyspdGhpc1tnXS5zdHlsZSYmKHRoaXNbZ10uc3R5bGUuZGlzcGxheT0ibm9uZSIpO3JldHVybiB0aGlzfSxfdG9nZ2xlOmYuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dHlwZW9mIGE9PSJib29sZWFuIjtmLmlzRnVuY3Rpb24oYSkmJmYuaXNGdW5jdGlvbihiKT90aGlzLl90b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE9PW51bGx8fGQ/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ZD9hOmYodGhpcykuaXMoIjpoaWRkZW4iKTtmKHRoaXMpW2I/InNob3ciOiJoaWRlIl0oKX0pOnRoaXMuYW5pbWF0ZShjdygidG9nZ2xlIiwzKSxhLGIsYyk7cmV0dXJuIHRoaXN9LGZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoIjpoaWRkZW4iKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBnKCl7ZS5xdWV1ZT09PSExJiZmLl9tYXJrKHRoaXMpO3ZhciBiPWYuZXh0ZW5kKHt9LGUpLGM9dGhpcy5ub2RlVHlwZT09PTEsZD1jJiZmKHRoaXMpLmlzKCI6aGlkZGVuIiksZyxoLGksaixrLGwsbSxuLG87Yi5hbmltYXRlZFByb3BlcnRpZXM9e307Zm9yKGkgaW4gYSl7Zz1mLmNhbWVsQ2FzZShpKSxpIT09ZyYmKGFbZ109YVtpXSxkZWxldGUgYVtpXSksaD1hW2ddLGYuaXNBcnJheShoKT8oYi5hbmltYXRlZFByb3BlcnRpZXNbZ109aFsxXSxoPWFbZ109aFswXSk6Yi5hbmltYXRlZFByb3BlcnRpZXNbZ109Yi5zcGVjaWFsRWFzaW5nJiZiLnNwZWNpYWxFYXNpbmdbZ118fGIuZWFzaW5nfHwic3dpbmciO2lmKGg9PT0iaGlkZSImJmR8fGg9PT0ic2hvdyImJiFkKXJldHVybiBiLmNvbXBsZXRlLmNhbGwodGhpcyk7YyYmKGc9PT0iaGVpZ2h0Inx8Zz09PSJ3aWR0aCIpJiYoYi5vdmVyZmxvdz1bdGhpcy5zdHlsZS5vdmVyZmxvdyx0aGlzLnN0eWxlLm92ZXJmbG93WCx0aGlzLnN0eWxlLm92ZXJmbG93WV0sZi5jc3ModGhpcywiZGlzcGxheSIpPT09ImlubGluZSImJmYuY3NzKHRoaXMsImZsb2F0Iik9PT0ibm9uZSImJighZi5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXR8fGN4KHRoaXMubm9kZU5hbWUpPT09ImlubGluZSI/dGhpcy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOnRoaXMuc3R5bGUuem9vbT0xKSl9Yi5vdmVyZmxvdyE9bnVsbCYmKHRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpO2ZvcihpIGluIGEpaj1uZXcgZi5meCh0aGlzLGIsaSksaD1hW2ldLGNwLnRlc3QoaCk/KG89Zi5fZGF0YSh0aGlzLCJ0b2dnbGUiK2kpfHwoaD09PSJ0b2dnbGUiP2Q/InNob3ciOiJoaWRlIjowKSxvPyhmLl9kYXRhKHRoaXMsInRvZ2dsZSIraSxvPT09InNob3ciPyJoaWRlIjoic2hvdyIpLGpbb10oKSk6altoXSgpKTooaz1jcS5leGVjKGgpLGw9ai5jdXIoKSxrPyhtPXBhcnNlRmxvYXQoa1syXSksbj1rWzNdfHwoZi5jc3NOdW1iZXJbaV0/IiI6InB4IiksbiE9PSJweCImJihmLnN0eWxlKHRoaXMsaSwobXx8MSkrbiksbD0obXx8MSkvai5jdXIoKSpsLGYuc3R5bGUodGhpcyxpLGwrbikpLGtbMV0mJihtPShrWzFdPT09Ii09Ij8tMToxKSptK2wpLGouY3VzdG9tKGwsbSxuKSk6ai5jdXN0b20obCxoLCIiKSk7cmV0dXJuITB9dmFyIGU9Zi5zcGVlZChiLGMsZCk7aWYoZi5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZS5jb21wbGV0ZSxbITFdKTthPWYuZXh0ZW5kKHt9LGEpO3JldHVybiBlLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZS5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGMsZCl7dHlwZW9mIGEhPSJzdHJpbmciJiYoZD1jLGM9YSxhPWIpLGMmJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChhLGIsYyl7dmFyIGU9YltjXTtmLnJlbW92ZURhdGEoYSxjLCEwKSxlLnN0b3AoZCl9dmFyIGIsYz0hMSxlPWYudGltZXJzLGc9Zi5fZGF0YSh0aGlzKTtkfHxmLl91bm1hcmsoITAsdGhpcyk7aWYoYT09bnVsbClmb3IoYiBpbiBnKWdbYl0uc3RvcCYmYi5pbmRleE9mKCIucnVuIik9PT1iLmxlbmd0aC00JiZoKHRoaXMsZyxiKTtlbHNlIGdbYj1hKyIucnVuIl0mJmdbYl0uc3RvcCYmaCh0aGlzLGcsYik7Zm9yKGI9ZS5sZW5ndGg7Yi0tOyllW2JdLmVsZW09PT10aGlzJiYoYT09bnVsbHx8ZVtiXS5xdWV1ZT09PWEpJiYoZD9lW2JdKCEwKTplW2JdLnNhdmVTdGF0ZSgpLGM9ITAsZS5zcGxpY2UoYiwxKSk7KCFkfHwhYykmJmYuZGVxdWV1ZSh0aGlzLGEpfSl9fSksZi5lYWNoKHtzbGlkZURvd246Y3coInNob3ciLDEpLHNsaWRlVXA6Y3coImhpZGUiLDEpLHNsaWRlVG9nZ2xlOmN3KCJ0b2dnbGUiLDEpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLGYuZXh0ZW5kKHtzcGVlZDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmdHlwZW9mIGE9PSJvYmplY3QiP2YuZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8Zi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFmLmlzRnVuY3Rpb24oYikmJmJ9O2QuZHVyYXRpb249Zi5meC5vZmY/MDp0eXBlb2YgZC5kdXJhdGlvbj09Im51bWJlciI/ZC5kdXJhdGlvbjpkLmR1cmF0aW9uIGluIGYuZnguc3BlZWRzP2YuZnguc3BlZWRzW2QuZHVyYXRpb25dOmYuZnguc3BlZWRzLl9kZWZhdWx0O2lmKGQucXVldWU9PW51bGx8fGQucXVldWU9PT0hMClkLnF1ZXVlPSJmeCI7ZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKGEpe2YuaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZT9mLmRlcXVldWUodGhpcyxkLnF1ZXVlKTphIT09ITEmJmYuX3VubWFyayh0aGlzKX07cmV0dXJuIGR9LGVhc2luZzp7bGluZWFyOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjK2QqYX0sc3dpbmc6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKC1NYXRoLmNvcyhhKk1hdGguUEkpLzIrLjUpKmQrY319LHRpbWVyczpbXSxmeDpmdW5jdGlvbihhLGIsYyl7dGhpcy5vcHRpb25zPWIsdGhpcy5lbGVtPWEsdGhpcy5wcm9wPWMsYi5vcmlnPWIub3JpZ3x8e319fSksZi5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSwoZi5meC5zdGVwW3RoaXMucHJvcF18fGYuZnguc3RlcC5fZGVmYXVsdCkodGhpcyl9LGN1cjpmdW5jdGlvbigpe2lmKHRoaXMuZWxlbVt0aGlzLnByb3BdIT1udWxsJiYoIXRoaXMuZWxlbS5zdHlsZXx8dGhpcy5lbGVtLnN0eWxlW3RoaXMucHJvcF09PW51bGwpKXJldHVybiB0aGlzLmVsZW1bdGhpcy5wcm9wXTt2YXIgYSxiPWYuY3NzKHRoaXMuZWxlbSx0aGlzLnByb3ApO3JldHVybiBpc05hTihhPXBhcnNlRmxvYXQoYikpPyFifHxiPT09ImF1dG8iPzA6YjphfSxjdXN0b206ZnVuY3Rpb24oYSxjLGQpe2Z1bmN0aW9uIGgoYSl7cmV0dXJuIGUuc3RlcChhKX12YXIgZT10aGlzLGc9Zi5meDt0aGlzLnN0YXJ0VGltZT1jdHx8Y3UoKSx0aGlzLmVuZD1jLHRoaXMubm93PXRoaXMuc3RhcnQ9YSx0aGlzLnBvcz10aGlzLnN0YXRlPTAsdGhpcy51bml0PWR8fHRoaXMudW5pdHx8KGYuY3NzTnVtYmVyW3RoaXMucHJvcF0/IiI6InB4IiksaC5xdWV1ZT10aGlzLm9wdGlvbnMucXVldWUsaC5lbGVtPXRoaXMuZWxlbSxoLnNhdmVTdGF0ZT1mdW5jdGlvbigpe2Uub3B0aW9ucy5oaWRlJiZmLl9kYXRhKGUuZWxlbSwiZnhzaG93IitlLnByb3ApPT09YiYmZi5fZGF0YShlLmVsZW0sImZ4c2hvdyIrZS5wcm9wLGUuc3RhcnQpfSxoKCkmJmYudGltZXJzLnB1c2goaCkmJiFjciYmKGNyPXNldEludGVydmFsKGcudGljayxnLmludGVydmFsKSl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgYT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09YXx8Zi5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuc2hvdz0hMCxhIT09Yj90aGlzLmN1c3RvbSh0aGlzLmN1cigpLGEpOnRoaXMuY3VzdG9tKHRoaXMucHJvcD09PSJ3aWR0aCJ8fHRoaXMucHJvcD09PSJoZWlnaHQiPzE6MCx0aGlzLmN1cigpKSxmKHRoaXMuZWxlbSkuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApfHxmLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApLHRoaXMub3B0aW9ucy5oaWRlPSEwLHRoaXMuY3VzdG9tKHRoaXMuY3VyKCksMCl9LHN0ZXA6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9Y3R8fGN1KCksZz0hMCxoPXRoaXMuZWxlbSxpPXRoaXMub3B0aW9ucztpZihhfHxlPj1pLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz10aGlzLmVuZCx0aGlzLnBvcz10aGlzLnN0YXRlPTEsdGhpcy51cGRhdGUoKSxpLmFuaW1hdGVkUHJvcGVydGllc1t0aGlzLnByb3BdPSEwO2ZvcihiIGluIGkuYW5pbWF0ZWRQcm9wZXJ0aWVzKWkuYW5pbWF0ZWRQcm9wZXJ0aWVzW2JdIT09ITAmJihnPSExKTtpZihnKXtpLm92ZXJmbG93IT1udWxsJiYhZi5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MmJmYuZWFjaChbIiIsIlgiLCJZIl0sZnVuY3Rpb24oYSxiKXtoLnN0eWxlWyJvdmVyZmxvdyIrYl09aS5vdmVyZmxvd1thXX0pLGkuaGlkZSYmZihoKS5oaWRlKCk7aWYoaS5oaWRlfHxpLnNob3cpZm9yKGIgaW4gaS5hbmltYXRlZFByb3BlcnRpZXMpZi5zdHlsZShoLGIsaS5vcmlnW2JdKSxmLnJlbW92ZURhdGEoaCwiZnhzaG93IitiLCEwKSxmLnJlbW92ZURhdGEoaCwidG9nZ2xlIitiLCEwKTtkPWkuY29tcGxldGUsZCYmKGkuY29tcGxldGU9ITEsZC5jYWxsKGgpKX1yZXR1cm4hMX1pLmR1cmF0aW9uPT1JbmZpbml0eT90aGlzLm5vdz1lOihjPWUtdGhpcy5zdGFydFRpbWUsdGhpcy5zdGF0ZT1jL2kuZHVyYXRpb24sdGhpcy5wb3M9Zi5lYXNpbmdbaS5hbmltYXRlZFByb3BlcnRpZXNbdGhpcy5wcm9wXV0odGhpcy5zdGF0ZSxjLDAsMSxpLmR1cmF0aW9uKSx0aGlzLm5vdz10aGlzLnN0YXJ0Kyh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0aGlzLnBvcyksdGhpcy51cGRhdGUoKTtyZXR1cm4hMH19LGYuZXh0ZW5kKGYuZngse3RpY2s6ZnVuY3Rpb24oKXt2YXIgYSxiPWYudGltZXJzLGM9MDtmb3IoO2M8Yi5sZW5ndGg7YysrKWE9YltjXSwhYSgpJiZiW2NdPT09YSYmYi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxmLmZ4LnN0b3AoKX0saW50ZXJ2YWw6MTMsc3RvcDpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoY3IpLGNyPW51bGx9LHNwZWVkczp7c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxzdGVwOntvcGFjaXR5OmZ1bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLCJvcGFjaXR5IixhLm5vdyl9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe2EuZWxlbS5zdHlsZSYmYS5lbGVtLnN0eWxlW2EucHJvcF0hPW51bGw/YS5lbGVtLnN0eWxlW2EucHJvcF09YS5ub3crYS51bml0OmEuZWxlbVthLnByb3BdPWEubm93fX19KSxmLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7Zi5meC5zdGVwW2JdPWZ1bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLGIsTWF0aC5tYXgoMCxhLm5vdykpfX0pLGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZi5ncmVwKGYudGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofSk7dmFyIGN5PS9edCg/OmFibGV8ZHxoKSQvaSxjej0vXig/OmJvZHl8aHRtbCkkL2k7ImdldEJvdW5kaW5nQ2xpZW50UmVjdCJpbiBjLmRvY3VtZW50RWxlbWVudD9mLmZuLm9mZnNldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdLGM7aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dHJ5e2M9Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChkKXt9dmFyIGU9Yi5vd25lckRvY3VtZW50LGc9ZS5kb2N1bWVudEVsZW1lbnQ7aWYoIWN8fCFmLmNvbnRhaW5zKGcsYikpcmV0dXJuIGM/e3RvcDpjLnRvcCxsZWZ0OmMubGVmdH06e3RvcDowLGxlZnQ6MH07dmFyIGg9ZS5ib2R5LGk9Y0EoZSksaj1nLmNsaWVudFRvcHx8aC5jbGllbnRUb3B8fDAsaz1nLmNsaWVudExlZnR8fGguY2xpZW50TGVmdHx8MCxsPWkucGFnZVlPZmZzZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxUb3B8fGguc2Nyb2xsVG9wLG09aS5wYWdlWE9mZnNldHx8Zi5zdXBwb3J0LmJveE1vZGVsJiZnLnNjcm9sbExlZnR8fGguc2Nyb2xsTGVmdCxuPWMudG9wK2wtaixvPWMubGVmdCttLWs7cmV0dXJue3RvcDpuLGxlZnQ6b319OmYuZm4ub2Zmc2V0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dmFyIGMsZD1iLm9mZnNldFBhcmVudCxlPWIsZz1iLm93bmVyRG9jdW1lbnQsaD1nLmRvY3VtZW50RWxlbWVudCxpPWcuYm9keSxqPWcuZGVmYXVsdFZpZXcsaz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGw9Yi5vZmZzZXRUb3AsbT1iLm9mZnNldExlZnQ7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmYiE9PWkmJmIhPT1oKXtpZihmLnN1cHBvcnQuZml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7Yz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGwtPWIuc2Nyb2xsVG9wLG0tPWIuc2Nyb2xsTGVmdCxiPT09ZCYmKGwrPWIub2Zmc2V0VG9wLG0rPWIub2Zmc2V0TGVmdCxmLnN1cHBvcnQuZG9lc05vdEFkZEJvcmRlciYmKCFmLnN1cHBvcnQuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHN8fCFjeS50ZXN0KGIubm9kZU5hbWUpKSYmKGwrPXBhcnNlRmxvYXQoYy5ib3JkZXJUb3BXaWR0aCl8fDAsbSs9cGFyc2VGbG9hdChjLmJvcmRlckxlZnRXaWR0aCl8fDApLGU9ZCxkPWIub2Zmc2V0UGFyZW50KSxmLnN1cHBvcnQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlJiZjLm92ZXJmbG93IT09InZpc2libGUiJiYobCs9cGFyc2VGbG9hdChjLmJvcmRlclRvcFdpZHRoKXx8MCxtKz1wYXJzZUZsb2F0KGMuYm9yZGVyTGVmdFdpZHRoKXx8MCksaz1jfWlmKGsucG9zaXRpb249PT0icmVsYXRpdmUifHxrLnBvc2l0aW9uPT09InN0YXRpYyIpbCs9aS5vZmZzZXRUb3AsbSs9aS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5maXhlZFBvc2l0aW9uJiZrLnBvc2l0aW9uPT09ImZpeGVkIiYmKGwrPU1hdGgubWF4KGguc2Nyb2xsVG9wLGkuc2Nyb2xsVG9wKSxtKz1NYXRoLm1heChoLnNjcm9sbExlZnQsaS5zY3JvbGxMZWZ0KSk7cmV0dXJue3RvcDpsLGxlZnQ6bX19LGYub2Zmc2V0PXtib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGM9YS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCk7cmV0dXJue3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Zi5jc3MoYSwicG9zaXRpb24iKTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPWYoYSksZz1lLm9mZnNldCgpLGg9Zi5jc3MoYSwidG9wIiksaT1mLmNzcyhhLCJsZWZ0Iiksaj0oZD09PSJhYnNvbHV0ZSJ8fGQ9PT0iZml4ZWQiKSYmZi5pbkFycmF5KCJhdXRvIixbaCxpXSk+LTEsaz17fSxsPXt9LG0sbjtqPyhsPWUucG9zaXRpb24oKSxtPWwudG9wLG49bC5sZWZ0KToobT1wYXJzZUZsb2F0KGgpfHwwLG49cGFyc2VGbG9hdChpKXx8MCksZi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGcpKSxiLnRvcCE9bnVsbCYmKGsudG9wPWIudG9wLWcudG9wK20pLGIubGVmdCE9bnVsbCYmKGsubGVmdD1iLmxlZnQtZy5sZWZ0K24pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGspOmUuY3NzKGspfX0sZi5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuIG51bGw7dmFyIGE9dGhpc1swXSxiPXRoaXMub2Zmc2V0UGFyZW50KCksYz10aGlzLm9mZnNldCgpLGQ9Y3oudGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO2MudG9wLT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjLmxlZnQtPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCxkLnRvcCs9cGFyc2VGbG9hdChmLmNzcyhiWzBdLCJib3JkZXJUb3BXaWR0aCIpKXx8MCxkLmxlZnQrPXBhcnNlRmxvYXQoZi5jc3MoYlswXSwiYm9yZGVyTGVmdFdpZHRoIikpfHwwO3JldHVybnt0b3A6Yy50b3AtZC50b3AsbGVmdDpjLmxlZnQtZC5sZWZ0fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fGMuYm9keTt3aGlsZShhJiYhY3oudGVzdChhLm5vZGVOYW1lKSYmZi5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KSxmLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxjKXt2YXIgZD0ic2Nyb2xsIitjO2YuZm5bZF09ZnVuY3Rpb24oYyl7dmFyIGUsZztpZihjPT09Yil7ZT10aGlzWzBdO2lmKCFlKXJldHVybiBudWxsO2c9Y0EoZSk7cmV0dXJuIGc/InBhZ2VYT2Zmc2V0ImluIGc/Z1thPyJwYWdlWU9mZnNldCI6InBhZ2VYT2Zmc2V0Il06Zi5zdXBwb3J0LmJveE1vZGVsJiZnLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8Zy5kb2N1bWVudC5ib2R5W2RdOmVbZF19cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2c9Y0EodGhpcyksZz9nLnNjcm9sbFRvKGE/ZihnKS5zY3JvbGxMZWZ0KCk6YyxhP2M6ZihnKS5zY3JvbGxUb3AoKSk6dGhpc1tkXT1jfSl9fSksZi5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGMpe3ZhciBkPWMudG9Mb3dlckNhc2UoKTtmLmZuWyJpbm5lciIrY109ZnVuY3Rpb24oKXt2YXIgYT10aGlzWzBdO3JldHVybiBhP2Euc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhhLGQsInBhZGRpbmciKSk6dGhpc1tkXSgpOm51bGx9LGYuZm5bIm91dGVyIitjXT1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO3JldHVybiBiP2Iuc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhiLGQsYT8ibWFyZ2luIjoiYm9yZGVyIikpOnRoaXNbZF0oKTpudWxsfSxmLmZuW2RdPWZ1bmN0aW9uKGEpe3ZhciBlPXRoaXNbMF07aWYoIWUpcmV0dXJuIGE9PW51bGw/bnVsbDp0aGlzO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Y1tkXShhLmNhbGwodGhpcyxiLGNbZF0oKSkpfSk7aWYoZi5pc1dpbmRvdyhlKSl7dmFyIGc9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10saD1lLmRvY3VtZW50LmJvZHk7cmV0dXJuIGUuZG9jdW1lbnQuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmZ3x8aCYmaFsiY2xpZW50IitjXXx8Z31pZihlLm5vZGVUeXBlPT09OSlyZXR1cm4gTWF0aC5tYXgoZS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10sZS5ib2R5WyJzY3JvbGwiK2NdLGUuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2NdLGUuYm9keVsib2Zmc2V0IitjXSxlLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IitjXSk7aWYoYT09PWIpe3ZhciBpPWYuY3NzKGUsZCksaj1wYXJzZUZsb2F0KGkpO3JldHVybiBmLmlzTnVtZXJpYyhqKT9qOml9cmV0dXJuIHRoaXMuY3NzKGQsdHlwZW9mIGE9PSJzdHJpbmciP2E6YSsicHgiKX19KSxhLmpRdWVyeT1hLiQ9Zn0pKHdpbmRvdyk7'></script>
	<script id="fb_extras_modnizr_253_min_js" src='data:/text/plain;base64,LyogTW9kZXJuaXpyIDIuNS4zIChDdXN0b20gQnVpbGQpIHwgTUlUICYgQlNECiAqIEJ1aWxkOiBodHRwOi8vd3d3Lm1vZGVybml6ci5jb20vZG93bmxvYWQvIy1jc3N0cmFuc2Zvcm1zLWNzc3RyYW5zZm9ybXMzZC1zaGl2LWNzc2NsYXNzZXMtdGVzdHN0eWxlcy10ZXN0cHJvcC10ZXN0YWxscHJvcHMtcHJlZml4ZXMtZG9tcHJlZml4ZXMtbG9hZAogKi8KO3dpbmRvdy5Nb2Rlcm5penI9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIHooYSl7ai5jc3NUZXh0PWF9ZnVuY3Rpb24gQShhLGIpe3JldHVybiB6KG0uam9pbihhKyI7IikrKGJ8fCIiKSl9ZnVuY3Rpb24gQihhLGIpe3JldHVybiB0eXBlb2YgYT09PWJ9ZnVuY3Rpb24gQyhhLGIpe3JldHVybiEhfigiIithKS5pbmRleE9mKGIpfWZ1bmN0aW9uIEQoYSxiKXtmb3IodmFyIGQgaW4gYSlpZihqW2FbZF1dIT09YylyZXR1cm4gYj09InBmeCI/YVtkXTohMDtyZXR1cm4hMX1mdW5jdGlvbiBFKGEsYixkKXtmb3IodmFyIGUgaW4gYSl7dmFyIGY9YlthW2VdXTtpZihmIT09YylyZXR1cm4gZD09PSExP2FbZV06QihmLCJmdW5jdGlvbiIpP2YuYmluZChkfHxiKTpmfXJldHVybiExfWZ1bmN0aW9uIEYoYSxiLGMpe3ZhciBkPWEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zdWJzdHIoMSksZT0oYSsiICIrby5qb2luKGQrIiAiKStkKS5zcGxpdCgiICIpO3JldHVybiBCKGIsInN0cmluZyIpfHxCKGIsInVuZGVmaW5lZCIpP0QoZSxiKTooZT0oYSsiICIrcC5qb2luKGQrIiAiKStkKS5zcGxpdCgiICIpLEUoZSxiLGMpKX12YXIgZD0iMi41LjMiLGU9e30sZj0hMCxnPWIuZG9jdW1lbnRFbGVtZW50LGg9Im1vZGVybml6ciIsaT1iLmNyZWF0ZUVsZW1lbnQoaCksaj1pLnN0eWxlLGssbD17fS50b1N0cmluZyxtPSIgLXdlYmtpdC0gLW1vei0gLW8tIC1tcy0gIi5zcGxpdCgiICIpLG49IldlYmtpdCBNb3ogTyBtcyIsbz1uLnNwbGl0KCIgIikscD1uLnRvTG93ZXJDYXNlKCkuc3BsaXQoIiAiKSxxPXt9LHI9e30scz17fSx0PVtdLHU9dC5zbGljZSx2LHc9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGYsaSxqLGs9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKSxsPWIuYm9keSxtPWw/bDpiLmNyZWF0ZUVsZW1lbnQoImJvZHkiKTtpZihwYXJzZUludChkLDEwKSl3aGlsZShkLS0paj1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGouaWQ9ZT9lW2RdOmgrKGQrMSksay5hcHBlbmRDaGlsZChqKTtyZXR1cm4gZj1bIiYjMTczOyIsIjxzdHlsZT4iLGEsIjwvc3R5bGU+Il0uam9pbigiIiksay5pZD1oLChsP2s6bSkuaW5uZXJIVE1MKz1mLG0uYXBwZW5kQ2hpbGQoayksbHx8KG0uc3R5bGUuYmFja2dyb3VuZD0iIixnLmFwcGVuZENoaWxkKG0pKSxpPWMoayxhKSxsP2sucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChrKTptLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobSksISFpfSx4PXt9Lmhhc093blByb3BlcnR5LHk7IUIoeCwidW5kZWZpbmVkIikmJiFCKHguY2FsbCwidW5kZWZpbmVkIik/eT1mdW5jdGlvbihhLGIpe3JldHVybiB4LmNhbGwoYSxiKX06eT1mdW5jdGlvbihhLGIpe3JldHVybiBiIGluIGEmJkIoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbYl0sInVuZGVmaW5lZCIpfSxGdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7aWYodHlwZW9mIGMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcjt2YXIgZD11LmNhbGwoYXJndW1lbnRzLDEpLGU9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgZSl7dmFyIGE9ZnVuY3Rpb24oKXt9O2EucHJvdG90eXBlPWMucHJvdG90eXBlO3ZhciBmPW5ldyBhLGc9Yy5hcHBseShmLGQuY29uY2F0KHUuY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIE9iamVjdChnKT09PWc/ZzpmfXJldHVybiBjLmFwcGx5KGIsZC5jb25jYXQodS5jYWxsKGFyZ3VtZW50cykpKX07cmV0dXJuIGV9KTt2YXIgRz1mdW5jdGlvbihhLGMpe3ZhciBkPWEuam9pbigiIiksZj1jLmxlbmd0aDt3KGQsZnVuY3Rpb24oYSxjKXt2YXIgZD1iLnN0eWxlU2hlZXRzW2Iuc3R5bGVTaGVldHMubGVuZ3RoLTFdLGc9ZD9kLmNzc1J1bGVzJiZkLmNzc1J1bGVzWzBdP2QuY3NzUnVsZXNbMF0uY3NzVGV4dDpkLmNzc1RleHR8fCIiOiIiLGg9YS5jaGlsZE5vZGVzLGk9e307d2hpbGUoZi0tKWlbaFtmXS5pZF09aFtmXTtlLmNzc3RyYW5zZm9ybXMzZD0oaS5jc3N0cmFuc2Zvcm1zM2QmJmkuY3NzdHJhbnNmb3JtczNkLm9mZnNldExlZnQpPT09OSYmaS5jc3N0cmFuc2Zvcm1zM2Qub2Zmc2V0SGVpZ2h0PT09M30sZixjKX0oWyxbIkBtZWRpYSAoIixtLmpvaW4oInRyYW5zZm9ybS0zZCksKCIpLGgsIikiLCJ7I2Nzc3RyYW5zZm9ybXMzZHtsZWZ0OjlweDtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6M3B4O319Il0uam9pbigiIildLFssImNzc3RyYW5zZm9ybXMzZCJdKTtxLmNzc3RyYW5zZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4hIUYoInRyYW5zZm9ybSIpfSxxLmNzc3RyYW5zZm9ybXMzZD1mdW5jdGlvbigpe3ZhciBhPSEhRigicGVyc3BlY3RpdmUiKTtyZXR1cm4gYSYmIndlYmtpdFBlcnNwZWN0aXZlImluIGcuc3R5bGUmJihhPWUuY3NzdHJhbnNmb3JtczNkKSxhfTtmb3IodmFyIEggaW4gcSl5KHEsSCkmJih2PUgudG9Mb3dlckNhc2UoKSxlW3ZdPXFbSF0oKSx0LnB1c2goKGVbdl0/IiI6Im5vLSIpK3YpKTtyZXR1cm4geigiIiksaT1rPW51bGwsZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBnKGEsYil7dmFyIGM9YS5jcmVhdGVFbGVtZW50KCJwIiksZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGEuZG9jdW1lbnRFbGVtZW50O3JldHVybiBjLmlubmVySFRNTD0ieDxzdHlsZT4iK2IrIjwvc3R5bGU+IixkLmluc2VydEJlZm9yZShjLmxhc3RDaGlsZCxkLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGgoKXt2YXIgYT1rLmVsZW1lbnRzO3JldHVybiB0eXBlb2YgYT09InN0cmluZyI/YS5zcGxpdCgiICIpOmF9ZnVuY3Rpb24gaShhKXt2YXIgYj17fSxjPWEuY3JlYXRlRWxlbWVudCxlPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxmPWUoKTthLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGU9KGJbYV18fChiW2FdPWMoYSkpKS5jbG9uZU5vZGUoKTtyZXR1cm4gay5zaGl2TWV0aG9kcyYmZS5jYW5IYXZlQ2hpbGRyZW4mJiFkLnRlc3QoYSk/Zi5hcHBlbmRDaGlsZChlKTplfSxhLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9RnVuY3Rpb24oImgsZiIsInJldHVybiBmdW5jdGlvbigpe3ZhciBuPWYuY2xvbmVOb2RlKCksYz1uLmNyZWF0ZUVsZW1lbnQ7aC5zaGl2TWV0aG9kcyYmKCIraCgpLmpvaW4oKS5yZXBsYWNlKC9cdysvZyxmdW5jdGlvbihhKXtyZXR1cm4gYlthXT1jKGEpLGYuY3JlYXRlRWxlbWVudChhKSwnYygiJythKyciKSd9KSsiKTtyZXR1cm4gbn0iKShrLGYpfWZ1bmN0aW9uIGooYSl7dmFyIGI7cmV0dXJuIGEuZG9jdW1lbnRTaGl2ZWQ/YTooay5zaGl2Q1NTJiYhZSYmKGI9ISFnKGEsImFydGljbGUsYXNpZGUsZGV0YWlscyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGhncm91cCxuYXYsc2VjdGlvbntkaXNwbGF5OmJsb2NrfWF1ZGlve2Rpc3BsYXk6bm9uZX1jYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lOyp6b29tOjF9W2hpZGRlbl17ZGlzcGxheTpub25lfWF1ZGlvW2NvbnRyb2xzXXtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Knpvb206MX1tYXJre2JhY2tncm91bmQ6I0ZGMDtjb2xvcjojMDAwfSIpKSxmfHwoYj0haShhKSksYiYmKGEuZG9jdW1lbnRTaGl2ZWQ9YiksYSl9dmFyIGM9YS5odG1sNXx8e30sZD0vXjx8Xig/OmJ1dHRvbnxmb3JtfG1hcHxzZWxlY3R8dGV4dGFyZWEpJC9pLGUsZjsoZnVuY3Rpb24oKXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImEiKTthLmlubmVySFRNTD0iPHh5ej48L3h5ej4iLGU9ImhpZGRlbiJpbiBhLGY9YS5jaGlsZE5vZGVzLmxlbmd0aD09MXx8ZnVuY3Rpb24oKXt0cnl7Yi5jcmVhdGVFbGVtZW50KCJhIil9Y2F0Y2goYSl7cmV0dXJuITB9dmFyIGM9Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHR5cGVvZiBjLmNsb25lTm9kZT09InVuZGVmaW5lZCJ8fHR5cGVvZiBjLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9PSJ1bmRlZmluZWQifHx0eXBlb2YgYy5jcmVhdGVFbGVtZW50PT0idW5kZWZpbmVkIn0oKX0pKCk7dmFyIGs9e2VsZW1lbnRzOmMuZWxlbWVudHN8fCJhYmJyIGFydGljbGUgYXNpZGUgYXVkaW8gYmRpIGNhbnZhcyBkYXRhIGRhdGFsaXN0IGRldGFpbHMgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHNlY3Rpb24gc3VtbWFyeSB0aW1lIHZpZGVvIixzaGl2Q1NTOmMuc2hpdkNTUyE9PSExLHNoaXZNZXRob2RzOmMuc2hpdk1ldGhvZHMhPT0hMSx0eXBlOiJkZWZhdWx0IixzaGl2RG9jdW1lbnQ6an07YS5odG1sNT1rLGooYil9KHRoaXMsYiksZS5fdmVyc2lvbj1kLGUuX3ByZWZpeGVzPW0sZS5fZG9tUHJlZml4ZXM9cCxlLl9jc3NvbVByZWZpeGVzPW8sZS50ZXN0UHJvcD1mdW5jdGlvbihhKXtyZXR1cm4gRChbYV0pfSxlLnRlc3RBbGxQcm9wcz1GLGUudGVzdFN0eWxlcz13LGcuY2xhc3NOYW1lPWcuY2xhc3NOYW1lLnJlcGxhY2UoLyhefFxzKW5vLWpzKFxzfCQpLywiJDEkMiIpKyhmPyIganMgIit0LmpvaW4oIiAiKToiIiksZX0odGhpcyx0aGlzLmRvY3VtZW50KSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtyZXR1cm4gby5jYWxsKGEpPT0iW29iamVjdCBGdW5jdGlvbl0ifWZ1bmN0aW9uIGUoYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIn1mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGcoYSl7cmV0dXJuIWF8fGE9PSJsb2FkZWQifHxhPT0iY29tcGxldGUifHxhPT0idW5pbml0aWFsaXplZCJ9ZnVuY3Rpb24gaCgpe3ZhciBhPXAuc2hpZnQoKTtxPTEsYT9hLnQ/bShmdW5jdGlvbigpeyhhLnQ9PSJjIj9CLmluamVjdENzczpCLmluamVjdEpzKShhLnMsMCxhLmEsYS54LGEuZSwxKX0sMCk6KGEoKSxoKCkpOnE9MH1mdW5jdGlvbiBpKGEsYyxkLGUsZixpLGope2Z1bmN0aW9uIGsoYil7aWYoIW8mJmcobC5yZWFkeVN0YXRlKSYmKHUucj1vPTEsIXEmJmgoKSxsLm9ubG9hZD1sLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIpKXthIT0iaW1nIiYmbShmdW5jdGlvbigpe3QucmVtb3ZlQ2hpbGQobCl9LDUwKTtmb3IodmFyIGQgaW4geVtjXSl5W2NdLmhhc093blByb3BlcnR5KGQpJiZ5W2NdW2RdLm9ubG9hZCgpfX12YXIgaj1qfHxCLmVycm9yVGltZW91dCxsPXt9LG89MCxyPTAsdT17dDpkLHM6YyxlOmYsYTppLHg6an07eVtjXT09PTEmJihyPTEseVtjXT1bXSxsPWIuY3JlYXRlRWxlbWVudChhKSksYT09Im9iamVjdCI/bC5kYXRhPWM6KGwuc3JjPWMsbC50eXBlPWEpLGwud2lkdGg9bC5oZWlnaHQ9IjAiLGwub25lcnJvcj1sLm9ubG9hZD1sLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2suY2FsbCh0aGlzLHIpfSxwLnNwbGljZShlLDAsdSksYSE9ImltZyImJihyfHx5W2NdPT09Mj8odC5pbnNlcnRCZWZvcmUobCxzP251bGw6biksbShrLGopKTp5W2NdLnB1c2gobCkpfWZ1bmN0aW9uIGooYSxiLGMsZCxmKXtyZXR1cm4gcT0wLGI9Ynx8ImoiLGUoYSk/aShiPT0iYyI/djp1LGEsYix0aGlzLmkrKyxjLGQsZik6KHAuc3BsaWNlKHRoaXMuaSsrLDAsYSkscC5sZW5ndGg9PTEmJmgoKSksdGhpc31mdW5jdGlvbiBrKCl7dmFyIGE9QjtyZXR1cm4gYS5sb2FkZXI9e2xvYWQ6aixpOjB9LGF9dmFyIGw9Yi5kb2N1bWVudEVsZW1lbnQsbT1hLnNldFRpbWVvdXQsbj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVswXSxvPXt9LnRvU3RyaW5nLHA9W10scT0wLHI9Ik1vekFwcGVhcmFuY2UiaW4gbC5zdHlsZSxzPXImJiEhYi5jcmVhdGVSYW5nZSgpLmNvbXBhcmVOb2RlLHQ9cz9sOm4ucGFyZW50Tm9kZSxsPWEub3BlcmEmJm8uY2FsbChhLm9wZXJhKT09IltvYmplY3QgT3BlcmFdIixsPSEhYi5hdHRhY2hFdmVudCYmIWwsdT1yPyJvYmplY3QiOmw/InNjcmlwdCI6ImltZyIsdj1sPyJzY3JpcHQiOnUsdz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4gby5jYWxsKGEpPT0iW29iamVjdCBBcnJheV0ifSx4PVtdLHk9e30sej17dGltZW91dDpmdW5jdGlvbihhLGIpe3JldHVybiBiLmxlbmd0aCYmKGEudGltZW91dD1iWzBdKSxhfX0sQSxCO0I9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgYT1hLnNwbGl0KCIhIiksYj14Lmxlbmd0aCxjPWEucG9wKCksZD1hLmxlbmd0aCxjPXt1cmw6YyxvcmlnVXJsOmMscHJlZml4ZXM6YX0sZSxmLGc7Zm9yKGY9MDtmPGQ7ZisrKWc9YVtmXS5zcGxpdCgiPSIpLChlPXpbZy5zaGlmdCgpXSkmJihjPWUoYyxnKSk7Zm9yKGY9MDtmPGI7ZisrKWM9eFtmXShjKTtyZXR1cm4gY31mdW5jdGlvbiBnKGEsZSxmLGcsaSl7dmFyIGo9YihhKSxsPWouYXV0b0NhbGxiYWNrO2oudXJsLnNwbGl0KCIuIikucG9wKCkuc3BsaXQoIj8iKS5zaGlmdCgpLGouYnlwYXNzfHwoZSYmKGU9ZChlKT9lOmVbYV18fGVbZ118fGVbYS5zcGxpdCgiLyIpLnBvcCgpLnNwbGl0KCI/IilbMF1dfHxoKSxqLmluc3RlYWQ/ai5pbnN0ZWFkKGEsZSxmLGcsaSk6KHlbai51cmxdP2oubm9leGVjPSEwOnlbai51cmxdPTEsZi5sb2FkKGoudXJsLGouZm9yY2VDU1N8fCFqLmZvcmNlSlMmJiJjc3MiPT1qLnVybC5zcGxpdCgiLiIpLnBvcCgpLnNwbGl0KCI/Iikuc2hpZnQoKT8iYyI6YyxqLm5vZXhlYyxqLmF0dHJzLGoudGltZW91dCksKGQoZSl8fGQobCkpJiZmLmxvYWQoZnVuY3Rpb24oKXtrKCksZSYmZShqLm9yaWdVcmwsaSxnKSxsJiZsKGoub3JpZ1VybCxpLGcpLHlbai51cmxdPTJ9KSkpfWZ1bmN0aW9uIGkoYSxiKXtmdW5jdGlvbiBjKGEsYyl7aWYoYSl7aWYoZShhKSljfHwoaj1mdW5jdGlvbigpe3ZhciBhPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtrLmFwcGx5KHRoaXMsYSksbCgpfSksZyhhLGosYiwwLGgpO2Vsc2UgaWYoT2JqZWN0KGEpPT09YSlmb3IobiBpbiBtPWZ1bmN0aW9uKCl7dmFyIGI9MCxjO2ZvcihjIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShjKSYmYisrO3JldHVybiBifSgpLGEpYS5oYXNPd25Qcm9wZXJ0eShuKSYmKCFjJiYhLS1tJiYoZChqKT9qPWZ1bmN0aW9uKCl7dmFyIGE9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2suYXBwbHkodGhpcyxhKSxsKCl9Ompbbl09ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2EmJmEuYXBwbHkodGhpcyxiKSxsKCl9fShrW25dKSksZyhhW25dLGosYixuLGgpKX1lbHNlIWMmJmwoKX12YXIgaD0hIWEudGVzdCxpPWEubG9hZHx8YS5ib3RoLGo9YS5jYWxsYmFja3x8ZixrPWosbD1hLmNvbXBsZXRlfHxmLG0sbjtjKGg/YS55ZXA6YS5ub3BlLCEhaSksaSYmYyhpKX12YXIgaixsLG09dGhpcy55ZXBub3BlLmxvYWRlcjtpZihlKGEpKWcoYSwwLG0sMCk7ZWxzZSBpZih3KGEpKWZvcihqPTA7ajxhLmxlbmd0aDtqKyspbD1hW2pdLGUobCk/ZyhsLDAsbSwwKTp3KGwpP0IobCk6T2JqZWN0KGwpPT09bCYmaShsLG0pO2Vsc2UgT2JqZWN0KGEpPT09YSYmaShhLG0pfSxCLmFkZFByZWZpeD1mdW5jdGlvbihhLGIpe3pbYV09Yn0sQi5hZGRGaWx0ZXI9ZnVuY3Rpb24oYSl7eC5wdXNoKGEpfSxCLmVycm9yVGltZW91dD0xZTQsYi5yZWFkeVN0YXRlPT1udWxsJiZiLmFkZEV2ZW50TGlzdGVuZXImJihiLnJlYWR5U3RhdGU9ImxvYWRpbmciLGIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQT1mdW5jdGlvbigpe2IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQSwwKSxiLnJlYWR5U3RhdGU9ImNvbXBsZXRlIn0sMCkpLGEueWVwbm9wZT1rKCksYS55ZXBub3BlLmV4ZWN1dGVTdGFjaz1oLGEueWVwbm9wZS5pbmplY3RKcz1mdW5jdGlvbihhLGMsZCxlLGksail7dmFyIGs9Yi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxsLG8sZT1lfHxCLmVycm9yVGltZW91dDtrLnNyYz1hO2ZvcihvIGluIGQpay5zZXRBdHRyaWJ1dGUobyxkW29dKTtjPWo/aDpjfHxmLGsub25yZWFkeXN0YXRlY2hhbmdlPWsub25sb2FkPWZ1bmN0aW9uKCl7IWwmJmcoay5yZWFkeVN0YXRlKSYmKGw9MSxjKCksay5vbmxvYWQ9ay5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCl9LG0oZnVuY3Rpb24oKXtsfHwobD0xLGMoMSkpfSxlKSxpP2sub25sb2FkKCk6bi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShrLG4pfSxhLnllcG5vcGUuaW5qZWN0Q3NzPWZ1bmN0aW9uKGEsYyxkLGUsZyxpKXt2YXIgZT1iLmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxqLGM9aT9oOmN8fGY7ZS5ocmVmPWEsZS5yZWw9InN0eWxlc2hlZXQiLGUudHlwZT0idGV4dC9jc3MiO2ZvcihqIGluIGQpZS5zZXRBdHRyaWJ1dGUoaixkW2pdKTtnfHwobi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLG4pLG0oYywwKSl9fSh0aGlzLGRvY3VtZW50KSxNb2Rlcm5penIubG9hZD1mdW5jdGlvbigpe3llcG5vcGUuYXBwbHkod2luZG93LFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX07'></script>
	<script id="fb_lib_hash_js" src='data:/text/plain;base64,LyoqCiAqIGhhc2guanMKICoKICogQ29weXJpZ2h0IChDKSAyMDEyIEVtbWFudWVsIEdhcmNpYQogKiBNSVQgTGljZW5zZWQKICoKICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBIYXNoLnB1c2hTdGF0ZSh0cnVlKTsKICoKICogSGFzaC5vbignL3BhZ2UvKFswLTldKykkJywKICoJe3llcDogZnVuY3Rpb24ocGF0aCwgcGFydHMpIHsgfSwgbm9wOiBmdW5jdGlvbigpIHsgfX0sCiAqCSdQYWdlICQxJyk7CiAqCiAqIEhhc2guZ28oJy9wYWdlLzEnKTsKICoqLwoKKGZ1bmN0aW9uKCkgewoKJ3VzZSBzdHJpY3QnOwoKdmFyIGhhc2hlcyA9IHt9LAoJcmVnZXhwID0ge30sCgloaXN0b3J5ID0gW10sCglmcmVxID0gMTAwLAoJbnVtID0gMCwKCXB1c2hTdGF0ZSA9IGZhbHNlLAoJdGltZXIgPSBudWxsLAoJY3VycmVudFVybCA9IG51bGwsCgoJZnJlZXplID0gZnVuY3Rpb24ob2JqKSB7CgkJaWYgKE9iamVjdC5mcmVlemUpIHJldHVybiBPYmplY3QuZnJlZXplKG9iaik7CgkJcmV0dXJuIG9iajsKCX0sCgoJZ2V0SGFzaFBhcnRzID0gZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCcjJyk7Cgl9LAoKCXN0YXJ0VGltZXIgPSBmdW5jdGlvbigpIHsKCQkKCQlpZiAoIXRpbWVyKQoJCQl0aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewoJCQkJaWYgKG51bT4wICYmIGN1cnJlbnRVcmwhPXdpbmRvdy5sb2NhdGlvbi5ocmVmKSB7CgkJCQkJY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwoJCQkJCXdpbmRvdy5IYXNoLmNoZWNrKCk7CgkJCQl9CgkJCX0sIGZyZXEpOwoKCX0sCgoJc3RvcFRpbWVyID0gZnVuY3Rpb24oKSB7CgoJCWlmICh0aW1lcikgewoJCQljbGVhckludGVydmFsKHRpbWVyKTsKCQkJdGltZXIgPSBudWxsOwoJCX0KCgl9OwoKd2luZG93Lkhhc2ggPSBmcmVlemUoewoKCQlwdXNoU3RhdGU6IGZ1bmN0aW9uKHllcykgewoKCQkJaWYgKHdpbmRvdy5oaXN0b3J5ICYmIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSkKCQkJCXB1c2hTdGF0ZSA9IHllczsKCgkJCXJldHVybiB0aGlzOwoJCX0sCgoJCWZyYWdtZW50OiBmdW5jdGlvbigpIHsKCQkJCgkJCXZhciBoYXNoID0gZ2V0SGFzaFBhcnRzKCk7CgkJCXJldHVybiAocHVzaFN0YXRlKSA/CgkJCQl3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyAoKGhhc2hbMV0pID8gJyMnICsgaGFzaFsxXSA6ICcnKQoJCQkJOiBoYXNoWzFdIHx8ICcnOwoKCQl9LAoJCQoJCWdldDogZnVuY3Rpb24ocGF0aCwgcGFyYW1zKSB7CgkJCQoJCQl2YXIgcCwgZnJhZ21lbnQgPSAnJywgcGFyYW1ldGVycyA9IFtdOwoKCQkJZm9yKHAgaW4gcGFyYW1zKSB7CgkJCQlpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkocCkpCgkJCQkJY29udGludWU7CgkJCQlwYXJhbWV0ZXJzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KHApICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtc1twXSkpOwoJCQl9CgoJCQlpZiAocGFyYW1ldGVycy5sZW5ndGg+MCkKCQkJCXBhcmFtZXRlcnMgPSAnPycgKyBwYXJhbWV0ZXJzLmpvaW4oJyYnKTsKCQkKCQkJcmV0dXJuIChwdXNoU3RhdGUpID8gcGF0aCArIHBhcmFtZXRlcnMgOgoJCQkJZ2V0SGFzaFBhcnRzKClbMF0gKyAnIycgKyBwYXRoICsgcGFyYW1ldGVyczsKCgkJfSwKCgkJZ286IGZ1bmN0aW9uKGhhc2gsIHBhcmFtcykgewoKCQkJaWYgKHRoaXMuZnJhZ21lbnQoKSE9aGFzaCkgewoJCQkJdmFyIHRvID0gdGhpcy5nZXQoaGFzaCwgcGFyYW1zKTsKCgkJCQlpZiAocHVzaFN0YXRlKQoJCQkJCXdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBkb2N1bWVudC50aXRsZSwgdG8pOwoJCQkJZWxzZQoJCQkJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdG87CgkJCQl9CgkJCQoJCQlyZXR1cm4gdGhpczsKCQl9LAoKCQl1cGRhdGU6IGZ1bmN0aW9uICgpIHsKCQkJCgkJCWN1cnJlbnRVcmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsKCQkJcmV0dXJuIHRoaXM7CgoJCX0sCgoJCW9uOiBmdW5jdGlvbihoYXNoLCBjYWxsYmFjaywgdGl0bGUpIHsKCgkJCWlmICghaGFzaGVzW2hhc2hdKQoJCQkJaGFzaGVzW2hhc2hdID0ge3RpdGxlOiB0aXRsZSwgbGlzdGVuZXJzOiBbXX07CgkJCQoJCQloYXNoZXNbaGFzaF0ubGlzdGVuZXJzLnB1c2goY2FsbGJhY2spOwoJCQludW0rKzsKCQkJc3RhcnRUaW1lcigpOwoKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCgkJY2hlY2s6IGZ1bmN0aW9uKCkgewoKCQkJdmFyIGksCgkJCQloYXNoLAoJCQkJcGFydHMsCgkJCQlmcmFnbWVudCA9IHRoaXMuZnJhZ21lbnQoKTsKCgoJCQlmb3IgKGhhc2ggaW4gaGFzaGVzKSB7CgkJCQlpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChoYXNoZXMsIGhhc2gpKQoJCQkJCWNvbnRpbnVlOwoKCQkJCWhhc2hlc1toYXNoXS5yZWdleHAgPSBoYXNoZXNbaGFzaF0ucmVnZXhwIHx8IG5ldyBSZWdFeHAoaGFzaCk7CgoJCQkJaWYgKChwYXJ0cyA9IGhhc2hlc1toYXNoXS5yZWdleHAuZXhlYyhmcmFnbWVudCkpKSB7CgkJCQkJaWYgKGhhc2hlc1toYXNoXS50aXRsZSkKCQkJCQkJZG9jdW1lbnQudGl0bGUgPSBoYXNoZXNbaGFzaF0udGl0bGU7CgoJCQkJCWZvciAoaSA9IDA7IGk8aGFzaGVzW2hhc2hdLmxpc3RlbmVycy5sZW5ndGg7IGkrKykKCQkJCQkJaWYgKGhhc2hlc1toYXNoXS5saXN0ZW5lcnNbaV0ueWVwKQoJCQkJCQkJaGFzaGVzW2hhc2hdLmxpc3RlbmVyc1tpXS55ZXAoZnJhZ21lbnQsIHBhcnRzKTsKCQkJCX0gZWxzZSB7CgkJCQkJZm9yIChpID0gMDsgaTxoYXNoZXNbaGFzaF0ubGlzdGVuZXJzLmxlbmd0aDsgaSsrKQoJCQkJCQlpZiAoaGFzaGVzW2hhc2hdLmxpc3RlbmVyc1tpXS5ub3ApCgkJCQkJCQloYXNoZXNbaGFzaF0ubGlzdGVuZXJzW2ldLm5vcChmcmFnbWVudCk7CgkJCQl9CgoJCQl9CgoJCQlyZXR1cm4gdGhpczsKCQl9Cn0pOwoKfSkoKTsK'></script>
	<script id="fb_lib_turn_html4_js" src='data:/text/plain;base64,LyoqCiAqIHR1cm4uanMgNHRoIHJlbGVhc2UgSFRNTDQgdmVyc2lvbgogKiB0dXJuanMuY29tCiAqIHR1cm5qcy5jb20vbGljZW5zZS50eHQKICoKICogQ29weXJpZ2h0IChDKSAyMDEyIEVtbWFudWVsIEdhcmNpYQogKiBBbGwgcmlnaHRzIHJlc2VydmVkCiAqKi8KCihmdW5jdGlvbigkKSB7CgondXNlIHN0cmljdCc7Cgp2YXIgaGFzM2QsCgogIHZlbmRvciA9ICcnLAogIAogIHZlcnNpb24gPSAnNC4xLjAnLAoKICBpc1RvdWNoID0gZmFsc2UsCgogIG1vdXNlRXZlbnRzID0KICAgIHsKICAgICAgZG93bjogJ21vdXNlZG93bicsCiAgICAgIG1vdmU6ICdtb3VzZW1vdmUnLAogICAgICB1cDogJ21vdXNldXAnLAogICAgICBvdmVyOiAnbW91c2VvdmVyJywKICAgICAgb3V0OiAnbW91c2VvdXQnCiAgICB9LAoKICBjb3JuZXJzID0gewogICAgYmFja3dhcmQ6IFsnbCddLAogICAgZm9yd2FyZDogWydyJ10sCiAgICBhbGw6IFsnbCcsICdyJ10KICB9LAoKICAvLyBEaXNwbGF5IHZhbHVlcwoKICBkaXNwbGF5cyA9IFsnc2luZ2xlJywgJ2RvdWJsZSddLAoKICAvLyBEaXJlY3Rpb24gdmFsdWVzCgogIGRpcmVjdGlvbnMgPSBbJ2x0cicsICdydGwnXSwKCiAgLy8gRGVmYXVsdCBvcHRpb25zCgogIHR1cm5PcHRpb25zID0gewoKICAgIC8vIEVuYWJsZXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uCgogICAgYWNjZWxlcmF0aW9uOiB0cnVlLAoKICAgIC8vIERpc3BsYXkKCiAgICBkaXNwbGF5OiAnZG91YmxlJywKCiAgICAvLyBEdXJhdGlvbiBvZiB0cmFuc2l0aW9uIGluIG1pbGxpc2Vjb25kcwoKICAgIGR1cmF0aW9uOiA2MDAsCgogICAgLy8gRmlyc3QgcGFnZQoKICAgIHBhZ2U6IDEsCiAgICAKICAgIC8vIEVuYWJsZXMgZ3JhZGllbnRzCgogICAgZ3JhZGllbnRzOiB0cnVlLAoKICAgIC8vIEV2ZW50cwoKICAgIHdoZW46IG51bGwKICB9LAoKICBmbGlwT3B0aW9ucyA9IHsKCiAgICAvLyBFbmFibGVzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbgoKICAgIGFjY2VsZXJhdGlvbjogdHJ1ZSwKICAgIAogICAgLy8gQ29ybmVycwogICAgLy8gYmFja3dhcmQ6IEFjdGl2YXRlcyBib3RoIHRsIGFuZCBibCBjb3JuZXJzCiAgICAvLyBmb3J3YXJkOiBBY3RpdmF0ZXMgYm90aCB0ciBhbmQgYnIgY29ybmVycwogICAgLy8gYWxsOiBBY3RpdmF0ZXMgYWxsIHRoZSBjb3JuZXJzCgogICAgY29ybmVyczogJ2ZvcndhcmQnLAogICAgCiAgICAvLyBTaXplIG9mIHRoZSBhY3RpdmUgem9uZSBvZiBlYWNoIGNvcm5lcgoKICAgIGNvcm5lclNpemU6IDEwMCwKCgogICAgLy8gRHVyYXRpb24gb2YgdHJhbnNpdGlvbiBpbiBtaWxsaXNlY29uZHMKCiAgICBkdXJhdGlvbjogNjAwLAogICAgCiAgICAvLyBFbmFibGVzIGdyYWRpZW50cwoKICAgIGdyYWRpZW50czogdHJ1ZQoKICB9LAoKICAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gdGhlIERPTSwgbWluaW11bSB2YWx1ZTogNgoKICBwYWdlc0luRE9NID0gNiwKICAKCnR1cm5NZXRob2RzID0gewoKICAvLyBTaW5nbGV0b24gY29uc3RydWN0b3IKICAvLyAkKCcjc2VsZWN0b3InKS50dXJuKFtvcHRpb25zXSk7CgogIGluaXQ6IGZ1bmN0aW9uKG9wdHMpIHsKCiAgICBpZiAodGhpcy5sZW5ndGg+MSkKICAgICAgdGhyb3cgdHVybkVycm9yKCdUaGlzIHNlbGVjdG9yIGhhcyBtb3JlIHRoYW4gMSBlbGVtZW50Jyk7CiAgICAKICAgIC8vIERlZmluZSBjb25zdGFudHMKICAgIAogICAgdmVuZG9yID0gZ2V0UHJlZml4KCk7CgogICAgdmFyIGksIHBhZ2VOdW0gPSAwLCBkYXRhID0gdGhpcy5kYXRhKCksIGNoID0gdGhpcy5jaGlsZHJlbigpOwoKICAgIC8vIFNldCBpbml0aWFsIGNvbmZpZ3VyYXRpb24KCiAgICBvcHRzID0gJC5leHRlbmQoewogICAgICB3aWR0aDogdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCksCiAgICAgIGRpcmVjdGlvbjogdGhpcy5hdHRyKCdkaXInKSB8fCB0aGlzLmNzcygnZGlyZWN0aW9uJykgfHwgJ2x0cicKICAgIH0sIHR1cm5PcHRpb25zLCBvcHRzKTsKCiAgICBkYXRhLm9wdHMgPSBvcHRzOwogICAgZGF0YS5wYWdlT2JqcyA9IHt9OwogICAgZGF0YS5wYWdlcyA9IHt9OwogICAgZGF0YS5wYWdlV3JhcCA9IHt9OwogICAgZGF0YS5wYWdlUGxhY2UgPSB7fTsKICAgIGRhdGEucGFnZU12ID0gW107CiAgICBkYXRhLnpvb20gPSAxOwogICAgZGF0YS50b3RhbFBhZ2VzID0gb3B0cy5wYWdlcyB8fCAwOwogICAgZGF0YS5kb2NFdmVudHMgPSB7CiAgICAgIG1vdXNlU3RhcnQ6IGZ1bmN0aW9uKGUpIHsKICAgICAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpCiAgICAgICAgICBpZiAoaGFzKHBhZ2UsIGRhdGEucGFnZXMpICYmCiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9ldmVudFN0YXJ0LmNhbGwoZGF0YS5wYWdlc1twYWdlXSwgZSk9PT1mYWxzZSkKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0sCgogICAgICBtb3VzZU1vdmU6IGZ1bmN0aW9uKGUpIHsKICAgICAgICBmb3IgKHZhciBwYWdlIGluIGRhdGEucGFnZXMpCiAgICAgICAgICBpZiAoaGFzKHBhZ2UsIGRhdGEucGFnZXMpKQogICAgICAgICAgICBmbGlwTWV0aG9kcy5fZXZlbnRNb3ZlLmNhbGwoZGF0YS5wYWdlc1twYWdlXSwgZSk7CiAgICAgIH0sCgogICAgICBtb3VzZUVuZDogZnVuY3Rpb24oZSkgewogICAgICAgIGZvciAodmFyIHBhZ2UgaW4gZGF0YS5wYWdlcykKICAgICAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykpCiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9ldmVudEVuZC5jYWxsKGRhdGEucGFnZXNbcGFnZV0sIGUpOwogICAgICB9CiAgICB9OwoKICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lcnMKCiAgICBpZiAob3B0cy53aGVuKQogICAgICBmb3IgKGkgaW4gb3B0cy53aGVuKQogICAgICAgIGlmIChoYXMoaSwgb3B0cy53aGVuKSkKICAgICAgICAgIHRoaXMuYmluZChpLCBvcHRzLndoZW5baV0pOwoKICAgIC8vIFNldCB0aGUgY3NzCgogICAgdGhpcy5jc3Moe3Bvc2l0aW9uOiAncmVsYXRpdmUnLCB3aWR0aDogb3B0cy53aWR0aCwgaGVpZ2h0OiBvcHRzLmhlaWdodH0pOwoKICAgIC8vIFNldCB0aGUgaW5pdGlhbCBkaXNwbGF5CgogICAgdGhpcy50dXJuKCdkaXNwbGF5Jywgb3B0cy5kaXNwbGF5KTsKCiAgICAvLyBTZXQgdGhlIGRpcmVjdGlvbgoKICAgIGlmIChvcHRzLmRpcmVjdGlvbiE9PScnKQogICAgICB0aGlzLnR1cm4oJ2RpcmVjdGlvbicsIG9wdHMuZGlyZWN0aW9uKTsKCgogICAgLy8gQWRkIHBhZ2VzIGZyb20gdGhlIERPTQoKICAgIGZvciAoaSA9IDA7IGk8Y2gubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCQoY2hbaV0pLmF0dHIoJ2lnbm9yZScpIT0nMScpIHsKICAgICAgICB0aGlzLnR1cm4oJ2FkZFBhZ2UnLCBjaFtpXSwgKytwYWdlTnVtKTsKICAgICAgfQogICAgfQoKICAgIC8vIEV2ZW50IGxpc3RlbmVycwoKICAgICQodGhpcykuYmluZChtb3VzZUV2ZW50cy5kb3duLCBkYXRhLmRvY0V2ZW50cy5tb3VzZVN0YXJ0KS4KICAgICAgYmluZCgnc3RhcnQnLCB0dXJuTWV0aG9kcy5fc3RhcnQpLgogICAgICBiaW5kKCdlbmQnLCB0dXJuTWV0aG9kcy5fZW5kKS4KICAgICAgYmluZCgncHJlc3NlZCcsIHR1cm5NZXRob2RzLl9wcmVzc2VkKS4KICAgICAgYmluZCgncmVsZWFzZWQnLCB0dXJuTWV0aG9kcy5fcmVsZWFzZWQpLgogICAgICBiaW5kKCdmbGlwJywgdHVybk1ldGhvZHMuX2ZsaXApOwoKICAgICQoZG9jdW1lbnQpLmJpbmQobW91c2VFdmVudHMubW92ZSwgZGF0YS5kb2NFdmVudHMubW91c2VNb3ZlKS4KICAgICAgYmluZChtb3VzZUV2ZW50cy51cCwgZGF0YS5kb2NFdmVudHMubW91c2VFbmQpOwoKICAgIC8vIFNldCB0aGUgaW5pdGlhbCBwYWdlCgogICAgdGhpcy50dXJuKCdwYWdlJywgb3B0cy5wYWdlKTsKCiAgICBkYXRhLmRvbmUgPSB0cnVlOwoKICAgIHJldHVybiB0aGlzOwogIH0sCgogIC8vIEFkZHMgYSBwYWdlIGZyb20gZXh0ZXJuYWwgZGF0YQoKICBhZGRQYWdlOiBmdW5jdGlvbihlbGVtZW50LCBwYWdlKSB7CgogICAgdmFyIGN1cnJlbnRQYWdlLAogICAgICBjbGFzc05hbWUsCiAgICAgIGluY1BhZ2VzID0gZmFsc2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgbGFzdFBhZ2UgPSBkYXRhLnRvdGFsUGFnZXMrMTsKCiAgICBpZiAoZGF0YS5kZXN0cm95aW5nKQogICAgICByZXR1cm4gZmFsc2U7CgogICAgLy8gUmVhZCB0aGUgcGFnZSBudW1iZXIgZnJvbSB0aGUgY2xhc3NOYW1lIG9mIGBlbGVtZW50YCAtIGZvcm1hdDogcFswLTldKwoKICAgIGlmICgoY3VycmVudFBhZ2UgPSAvXGJwKFswLTldKylcYi8uZXhlYygkKGVsZW1lbnQpLmF0dHIoJ2NsYXNzJykpKSkKICAgICAgcGFnZSA9IHBhcnNlSW50KGN1cnJlbnRQYWdlWzFdLCAxMCk7CgogICAgaWYgKHBhZ2UpIHsKICAgICAgCiAgICAgIGlmIChwYWdlPT1sYXN0UGFnZSkKICAgICAgICBpbmNQYWdlcyA9IHRydWU7CiAgICAgIGVsc2UgaWYgKHBhZ2U+bGFzdFBhZ2UpCiAgICAgICAgdGhyb3cgdHVybkVycm9yKCdQYWdlICInK3BhZ2UrJyIgY2Fubm90IGJlIGluc2VydGVkJyk7CgogICAgfSBlbHNlIHsKICAgICAgCiAgICAgIHBhZ2UgPSBsYXN0UGFnZTsKICAgICAgaW5jUGFnZXMgPSB0cnVlOwoKICAgIH0KCiAgICBpZiAocGFnZT49MSAmJiBwYWdlPD1sYXN0UGFnZSkgewoKICAgICAgaWYgKGRhdGEuZGlzcGxheT09J2RvdWJsZScpCiAgICAgICAgY2xhc3NOYW1lID0gKHBhZ2UlMikgPyAnIG9kZCcgOiAnIGV2ZW4nOwogICAgICBlbHNlCiAgICAgICAgY2xhc3NOYW1lID0gJyc7CgogICAgICAvLyBTdG9wIGFuaW1hdGlvbnMKICAgICAgaWYgKGRhdGEuZG9uZSkKICAgICAgICB0aGlzLnR1cm4oJ3N0b3AnKTsKCiAgICAgIC8vIE1vdmUgcGFnZXMgaWYgaXQncyBuZWNlc3NhcnkKICAgICAgaWYgKHBhZ2UgaW4gZGF0YS5wYWdlT2JqcykKICAgICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgcGFnZSwgMSk7CgogICAgICAvLyBJbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHBhZ2VzCiAgICAgIGlmIChpbmNQYWdlcykKICAgICAgICBkYXRhLnRvdGFsUGFnZXMgPSBsYXN0UGFnZTsKCiAgICAgIC8vIEFkZCBlbGVtZW50CiAgICAgIGRhdGEucGFnZU9ianNbcGFnZV0gPSAkKGVsZW1lbnQpLgogICAgICAgIGNzcyh7J2Zsb2F0JzogJ2xlZnQnfSkuCiAgICAgICAgYWRkQ2xhc3MoJ3BhZ2UgcCcgKyBwYWdlICsgY2xhc3NOYW1lKTsKCiAgICAgIC8vIEFkZCBwYWdlCiAgICAgIHR1cm5NZXRob2RzLl9hZGRQYWdlLmNhbGwodGhpcywgcGFnZSk7CgoKICAgICAgLy8gVXBkYXRlIHZpZXcKICAgICAgaWYgKGRhdGEuZG9uZSkKICAgICAgICB0aGlzLnR1cm4oJ3VwZGF0ZScpOwoKCiAgICAgIC8vIFJlbW92ZSBwYWdlcyBvdXQgb2YgcmFuZ2UKICAgICAgdHVybk1ldGhvZHMuX3JlbW92ZUZyb21ET00uY2FsbCh0aGlzKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9LAoKICAvLyBBZGRzIGEgcGFnZQoKICBfYWRkUGFnZTogZnVuY3Rpb24ocGFnZSkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBlbGVtZW50ID0gZGF0YS5wYWdlT2Jqc1twYWdlXTsKCiAgICBpZiAoZWxlbWVudCkKICAgICAgaWYgKHR1cm5NZXRob2RzLl9uZWNlc3NQYWdlLmNhbGwodGhpcywgcGFnZSkpIHsKCiAgICAgICAgaWYgKCFkYXRhLnBhZ2VXcmFwW3BhZ2VdKSB7CgogICAgICAgICAgdmFyIHByb3AgPSB0dXJuTWV0aG9kcy5fcGFnZVNpemUuY2FsbCh0aGlzLCBwYWdlLCB0cnVlKTsKCiAgICAgICAgICBlbGVtZW50LmNzcyh7d2lkdGg6IHByb3Aud2lkdGgsIGhlaWdodDogcHJvcC5oZWlnaHR9KTsKCiAgICAgICAgICAvLyBQbGFjZQogICAgICAgICAgZGF0YS5wYWdlUGxhY2VbcGFnZV0gPSBwYWdlOwoKICAgICAgICAgIC8vIFdyYXBwZXIKICAgICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0gPSAkKCc8ZGl2Lz4nLAogICAgICAgICAgICB7J2NsYXNzJzogJ3R1cm4tcGFnZS13cmFwcGVyJywKICAgICAgICAgICAgICBwYWdlOiBwYWdlLAogICAgICAgICAgICAgIGNzczoge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ319KS4KICAgICAgICAgICAgY3NzKHByb3ApOwoKICAgICAgICAgIC8vIEFwcGVuZCB0byB0aGlzCiAgICAgICAgICB0aGlzLmFwcGVuZChkYXRhLnBhZ2VXcmFwW3BhZ2VdKTsKCiAgICAgICAgICAvLyBNb3ZlIGVsZW1lbnQgdG8gd3JhcHBlcgogICAgICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXS5wcmVwZW5kKGRhdGEucGFnZU9ianNbcGFnZV0pOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBwYWdlIGlzIGluIHRoZSBjdXJyZW50IHZpZXcsIGNyZWF0ZSB0aGUgZmxpcCBlZmZlY3QKICAgICAgICBpZiAoIXBhZ2UgfHwgdHVybk1ldGhvZHMuX3NldFBhZ2VMb2MuY2FsbCh0aGlzLCBwYWdlKT09MSkKICAgICAgICAgIHR1cm5NZXRob2RzLl9tYWtlRmxpcC5jYWxsKHRoaXMsIHBhZ2UpOwogICAgICAgIAogICAgICB9IGVsc2UgewoKICAgICAgICAvLyBQbGFjZQogICAgICAgIGRhdGEucGFnZVBsYWNlW3BhZ2VdID0gMDsKCiAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnQgZnJvbSB0aGUgRE9NCiAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0pCiAgICAgICAgICBkYXRhLnBhZ2VPYmpzW3BhZ2VdLnJlbW92ZSgpOwoKICAgICAgfQoKICB9LAoKICAvLyBDaGVja3MgaWYgYSBwYWdlIGlzIGluIG1lbW9yeQogIAogIGhhc1BhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICByZXR1cm4gaGFzKHBhZ2UsIHRoaXMuZGF0YSgpLnBhZ2VPYmpzKTsKICAKICB9LAoKICAvLyBDZW50ZXJzIHRoZSBmbGlwYm9vawoKICBjZW50ZXI6IGZ1bmN0aW9uKHBhZ2UpIHsKICAgIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgc2l6ZSA9ICQodGhpcykudHVybignc2l6ZScpLAogICAgICBsZWZ0ID0gc2l6ZS53aWR0aC8oZGF0YS56b29tKjIpIC1zaXplLndpZHRoLzI7CgogICAgaWYgKGRhdGEuZGlzcGxheT09J2RvdWJsZScpIHsKICAgICAgdmFyIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnLCBwYWdlIHx8IGRhdGEudHBhZ2UgfHwgZGF0YS5wYWdlKTsKCiAgICAgIGlmIChkYXRhLmRpcmVjdGlvbj09J2x0cicpIHsKICAgICAgICBpZiAoIXZpZXdbMF0pCiAgICAgICAgICBsZWZ0IC09IHNpemUud2lkdGgvNDsKICAgICAgICBlbHNlIGlmICghdmlld1sxXSkKICAgICAgICAgIGxlZnQgKz0gc2l6ZS53aWR0aC80OwogICAgICB9IGVsc2UgewogICAgICAgIGlmICghdmlld1swXSkKICAgICAgICAgIGxlZnQgKz0gc2l6ZS53aWR0aC80OwogICAgICAgIGVsc2UgaWYgKCF2aWV3WzFdKQogICAgICAgICAgbGVmdCAtPSBzaXplLndpZHRoLzQ7CiAgICAgIH0KICAgIH0KCiAgICAkKHRoaXMpLmNzcyh7bWFyZ2luTGVmdDogbGVmdH0pOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEZXN0cm95cyB0aGUgZmxpcGJvb2sKCiAgZGVzdHJveTogZnVuY3Rpb24gKCkgewoKICAgIHZhciBwYWdlLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgZGF0YS5kZXN0cm95aW5nID0gdHJ1ZTsKCiAgICAkKHRoaXMpLnVuYmluZChtb3VzZUV2ZW50cy5kb3duKQogICAgICAudW5iaW5kKCdlbmQnKQogICAgICAudW5iaW5kKCdmaXJzdCcpCiAgICAgIC51bmJpbmQoJ2ZsaXAnKQogICAgICAudW5iaW5kKCdsYXN0JykKICAgICAgLnVuYmluZCgncHJlc3NlZCcpCiAgICAgIC51bmJpbmQoJ3JlbGVhc2VkJykKICAgICAgLnVuYmluZCgnc3RhcnQnKQogICAgICAudW5iaW5kKCd0dXJuaW5nJykKICAgICAgLnVuYmluZCgndHVybmVkJykKICAgICAgLnVuYmluZCgnem9vbWluZycpOwoKICAgICQoZG9jdW1lbnQpLnVuYmluZChtb3VzZUV2ZW50cy5tb3ZlLCBkYXRhLmRvY0V2ZW50cy5tb3VzZU1vdmUpLgogICAgICB1bmJpbmQobW91c2VFdmVudHMudXAsIGRhdGEuZG9jRXZlbnRzLm1vdXNlRW5kKTsKICAgIAogICAgd2hpbGUgKGRhdGEudG90YWxQYWdlcyE9PTApIHsKICAgICAgdGhpcy50dXJuKCdyZW1vdmVQYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgIH0KCiAgICBpZiAoZGF0YS5mcGFyZW50KQogICAgICBkYXRhLmZwYXJlbnQucmVtb3ZlKCk7CgogICAgaWYgKGRhdGEuc2hhZG93KQogICAgICBkYXRhLnNoYWRvdy5yZW1vdmUoKTsKCiAgICB0aGlzLnJlbW92ZURhdGEoKTsKICAgIGRhdGEgPSBudWxsOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBDaGVja3MgaWYgdGhpcyBlbGVtZW50IGlzIGEgZmxpcGJvb2sKCiAgaXM6IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB0eXBlb2YodGhpcy5kYXRhKCkucGFnZXMpPT0nb2JqZWN0JzsKCiAgfSwKCiAgLy8gU2V0cyBhbmQgZ2V0cyB0aGUgem9vbSB2YWx1ZQoKICB6b29tOiBmdW5jdGlvbihuZXdab29tKSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHR5cGVvZihuZXdab29tKT09J251bWJlcicpIHsKCiAgICAgIGlmIChuZXdab29tPDAuMDAxIHx8IG5ld1pvb20+MTAwKQogICAgICAgIHRocm93IHR1cm5FcnJvcihuZXdab29tKyAnIGlzIG5vdCBhIHZhbHVlIGZvciB6b29tJyk7CiAgICAKICAgICAgdmFyIGV2ZW50ID0gJC5FdmVudCgnem9vbWluZycpOwogICAgICB0aGlzLnRyaWdnZXIoZXZlbnQsIFtuZXdab29tLCBkYXRhLnpvb21dKTsKCiAgICAgIGlmIChldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgCiAgICAgIHZhciBzaXplID0gJCh0aGlzKS50dXJuKCdzaXplJyksCiAgICAgICAgaXogPSAxL2RhdGEuem9vbSwKICAgICAgICBuZXdXaWR0aCA9IE1hdGgucm91bmQoc2l6ZS53aWR0aCAqIGl6ICogbmV3Wm9vbSksCiAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5yb3VuZChzaXplLmhlaWdodCAqIGl6ICogbmV3Wm9vbSk7CiAgICAKICAgICAgZGF0YS56b29tID0gbmV3Wm9vbTsKCiAgICAgICQodGhpcykudHVybignc3RvcCcpLgogICAgICAgIHR1cm4oJ3NpemUnLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KS4KICAgICAgICBjc3Moe21hcmdpblRvcDogc2l6ZS5oZWlnaHQgKiBpeiAvIDIgLSBuZXdIZWlnaHQgLyAyfSk7CgogICAgICBpZiAoZGF0YS5vcHRzLmF1dG9DZW50ZXIpCiAgICAgICAgdGhpcy50dXJuKCdjZW50ZXInKTsKICAgICAgZWxzZQogICAgICAgICQodGhpcykuY3NzKHttYXJnaW5MZWZ0OiBzaXplLndpZHRoICogaXogLyAyIC0gbmV3V2lkdGggLyAyfSk7CiAgICAgIAogICAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwodGhpcyk7CiAgCiAgICAgIHJldHVybiB0aGlzOwoKICAgIH0gZWxzZQogICAgICByZXR1cm4gZGF0YS56b29tOwoKICB9LAoKICAvLyBHZXRzIHRoZSBzaXplIG9mIGEgcGFnZQoKICBfcGFnZVNpemU6IGZ1bmN0aW9uKHBhZ2UsIHBvc2l0aW9uKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgcHJvcCA9IHt9OwoKICAgIGlmIChkYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICBwcm9wLndpZHRoID0gdGhpcy53aWR0aCgpOwogICAgICBwcm9wLmhlaWdodCA9IHRoaXMuaGVpZ2h0KCk7CgogICAgICBpZiAocG9zaXRpb24pIHsKICAgICAgICBwcm9wLnRvcCA9IDA7CiAgICAgICAgcHJvcC5sZWZ0ID0gMDsKICAgICAgICBwcm9wLnJpZ2h0ID0gJ2F1dG8nOwogICAgICB9CgogICAgfSBlbHNlIHsKCiAgICAgIHZhciBwYWdlV2lkdGggPSB0aGlzLndpZHRoKCkvMiwKICAgICAgICBwYWdlSGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTsKCiAgICAgIGlmIChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdvd24tc2l6ZScpKSB7CiAgICAgICAgcHJvcC53aWR0aCA9IGRhdGEucGFnZU9ianNbcGFnZV0ud2lkdGgoKTsKICAgICAgICBwcm9wLmhlaWdodCA9IGRhdGEucGFnZU9ianNbcGFnZV0uaGVpZ2h0KCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHJvcC53aWR0aCA9IHBhZ2VXaWR0aDsKICAgICAgICBwcm9wLmhlaWdodCA9IHBhZ2VIZWlnaHQ7CiAgICAgIH0KCiAgICAgIGlmIChwb3NpdGlvbikgewogICAgICAgIHZhciBvZGQgPSBwYWdlJTI7CiAgICAgICAgcHJvcC50b3AgPSAocGFnZUhlaWdodC1wcm9wLmhlaWdodCkvMjsKCiAgICAgICAgaWYgKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgewogICAgICAgICAgCiAgICAgICAgICBwcm9wWyhvZGQpID8gJ3JpZ2h0JyA6ICdsZWZ0J10gPSBwYWdlV2lkdGgtcHJvcC53aWR0aDsKICAgICAgICAgIHByb3BbKG9kZCkgPyAnbGVmdCcgOiAncmlnaHQnXSA9ICdhdXRvJzsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIAogICAgICAgICAgcHJvcFsob2RkKSA/ICdsZWZ0JyA6ICdyaWdodCddID0gcGFnZVdpZHRoLXByb3Aud2lkdGg7CiAgICAgICAgICBwcm9wWyhvZGQpID8gJ3JpZ2h0JyA6ICdsZWZ0J10gPSAnYXV0byc7CgogICAgICAgIH0KCiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gcHJvcDsKCiAgfSwKCiAgLy8gUHJlcGFyZXMgdGhlIGZsaXAgZWZmZWN0IGZvciBhIHBhZ2UKCiAgX21ha2VGbGlwOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBpZiAoIWRhdGEucGFnZXNbcGFnZV0gJiYgZGF0YS5wYWdlUGxhY2VbcGFnZV09PXBhZ2UpIHsKICAgICAgdmFyIGNvcm5lciwKICAgICAgICBzaW5nbGUgPSBkYXRhLmRpc3BsYXk9PSdzaW5nbGUnLAogICAgICAgIG9kZCA9IHBhZ2UlMjsKCiAgICAgIGRhdGEucGFnZXNbcGFnZV0gPSBkYXRhLnBhZ2VPYmpzW3BhZ2VdLgogICAgICAgIGNzcyh0dXJuTWV0aG9kcy5fcGFnZVNpemUuY2FsbCh0aGlzLCBwYWdlKSkuCiAgICAgICAgZmxpcCh7cGFnZTogcGFnZSwKICAgICAgICAgIG5leHQ6IChvZGQgfHwgc2luZ2xlKSA/IHBhZ2UrMSA6IHBhZ2UtMSwKICAgICAgICAgIHR1cm46IHRoaXMsCiAgICAgICAgICBkdXJhdGlvbjogZGF0YS5vcHRzLmR1cmF0aW9uLAogICAgICAgICAgYWNjZWxlcmF0aW9uIDogZGF0YS5vcHRzLmFjY2VsZXJhdGlvbiwKICAgICAgICAgIGdyYWRpZW50czogZGF0YS5vcHRzLmdyYWRpZW50cwogICAgICAgICAgfSkuCiAgICAgICAgICBmbGlwKCdkaXNhYmxlJywgZGF0YS5kaXNhYmxlZCk7CiAgICB9CgogICAgcmV0dXJuIGRhdGEucGFnZXNbcGFnZV07CiAgfSwKCiAgLy8gTWFrZXMgcGFnZXMgd2l0aGluIGEgcmFuZ2UKCiAgX21ha2VSYW5nZTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIHJhbmdlLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKGRhdGEudG90YWxQYWdlczwxKQogICAgICByZXR1cm47CgogICAgcmFuZ2UgPSB0aGlzLnR1cm4oJ3JhbmdlJyk7CgogICAgZm9yIChwYWdlID0gcmFuZ2VbMF07IHBhZ2U8PXJhbmdlWzFdOyBwYWdlKyspCiAgICAgIHR1cm5NZXRob2RzLl9hZGRQYWdlLmNhbGwodGhpcywgcGFnZSk7CgogIH0sCgogIC8vIFJldHVybnMgYSByYW5nZSBvZiBwYWdlcyB0aGF0IHNob3VsZCBiZSBpbiB0aGUgRE9NCiAgLy8gRXhhbXBsZToKICAvLyAtIHBhZ2UgaW4gdGhlIGN1cnJlbnQgdmlldywgcmV0dXJuIHRydWUKICAvLyAqIHBhZ2UgaXMgaW4gdGhlIHJhbmdlLCByZXR1cm4gdHJ1ZQogIC8vIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNlCiAgLy8KICAvLyAxIDItMyA0LTUgNi03IDgtOSAxMC0xMSAxMi0xMwogIC8vICAgKiogICoqICAtLSAgICoqICAqKgoKICByYW5nZTogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciByZW1haW5pbmdQYWdlcywgbGVmdCwgcmlnaHQsIHZpZXcsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKTsKCgogICAgICBwYWdlID0gcGFnZSB8fCBkYXRhLnRwYWdlIHx8IGRhdGEucGFnZSB8fCAxOwogICAgICB2aWV3ID0gdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICAgIGlmIChwYWdlPDEgfHwgcGFnZT5kYXRhLnRvdGFsUGFnZXMpCiAgICAgICAgdGhyb3cgdHVybkVycm9yKCciJytwYWdlKyciIGlzIG5vdCBhIHBhZ2UgZm9yIHJhbmdlJyk7CiAgICAKICAgICAgdmlld1sxXSA9IHZpZXdbMV0gfHwgdmlld1swXTsKICAgICAgCiAgICAgIGlmICh2aWV3WzBdPj0xICYmIHZpZXdbMV08PWRhdGEudG90YWxQYWdlcykgewoKICAgICAgICByZW1haW5pbmdQYWdlcyA9IE1hdGguZmxvb3IoKHBhZ2VzSW5ET00tMikvMik7CgogICAgICAgIGlmIChkYXRhLnRvdGFsUGFnZXMtdmlld1sxXSA+IHZpZXdbMF0pIHsKICAgICAgICAgIGxlZnQgPSBNYXRoLm1pbih2aWV3WzBdLTEsIHJlbWFpbmluZ1BhZ2VzKTsKICAgICAgICAgIHJpZ2h0ID0gMipyZW1haW5pbmdQYWdlcy1sZWZ0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByaWdodCA9IE1hdGgubWluKGRhdGEudG90YWxQYWdlcy12aWV3WzFdLCByZW1haW5pbmdQYWdlcyk7CiAgICAgICAgICBsZWZ0ID0gMipyZW1haW5pbmdQYWdlcy1yaWdodDsKICAgICAgICB9CgogICAgICB9IGVsc2UgewogICAgICAgIGxlZnQgPSBwYWdlc0luRE9NLTE7CiAgICAgICAgcmlnaHQgPSBwYWdlc0luRE9NLTE7CiAgICAgIH0KCiAgICAgIHJldHVybiBbTWF0aC5tYXgoMSwgdmlld1swXS1sZWZ0KSwKICAgICAgICAgIE1hdGgubWluKGRhdGEudG90YWxQYWdlcywgdmlld1sxXStyaWdodCldOwoKICB9LAoKICAvLyBEZXRlY3RzIGlmIGEgcGFnZSBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGBwYWdlc0luRE9NYCBmcm9tIHRoZSBjdXJyZW50IHZpZXcKCiAgX25lY2Vzc1BhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKICAgIAogICAgaWYgKHBhZ2U9PT0wKQogICAgICByZXR1cm4gdHJ1ZTsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICByYW5nZSA9IHRoaXMudHVybigncmFuZ2UnKTsKCiAgICByZXR1cm4gZGF0YS5wYWdlT2Jqc1twYWdlXS5oYXNDbGFzcygnZml4ZWQnKSB8fAogICAgICAocGFnZT49cmFuZ2VbMF0gJiYgcGFnZTw9cmFuZ2VbMV0pOwogICAgCiAgfSwKCiAgLy8gUmVsZWFzZXMgbWVtb3J5IGJ5IHJlbW92aW5nIHBhZ2VzIGZyb20gdGhlIERPTQoKICBfcmVtb3ZlRnJvbURPTTogZnVuY3Rpb24oKSB7CgogICAgdmFyIHBhZ2UsIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICBmb3IgKHBhZ2UgaW4gZGF0YS5wYWdlV3JhcCkKICAgICAgaWYgKGhhcyhwYWdlLCBkYXRhLnBhZ2VXcmFwKSAmJgogICAgICAgICF0dXJuTWV0aG9kcy5fbmVjZXNzUGFnZS5jYWxsKHRoaXMsIHBhZ2UpKQogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKICAgIAogIH0sCgogIC8vIFJlbW92ZXMgYSBwYWdlIGZyb20gRE9NIGFuZCBpdHMgaW50ZXJuYWwgcmVmZXJlbmNlcwoKICBfcmVtb3ZlUGFnZUZyb21ET006IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKSB7CiAgICAgIHZhciBkZCA9IGRhdGEucGFnZXNbcGFnZV0uZGF0YSgpOwoKICAgICAgZmxpcE1ldGhvZHMuX21vdmVGb2xkaW5nUGFnZS5jYWxsKGRhdGEucGFnZXNbcGFnZV0sIGZhbHNlKTsKCiAgICAgIGlmIChkZC5mICYmIGRkLmYuZndyYXBwZXIpCiAgICAgICAgZGQuZi5md3JhcHBlci5yZW1vdmUoKTsKCiAgICAgIGRhdGEucGFnZXNbcGFnZV0ucmVtb3ZlRGF0YSgpOwogICAgICBkYXRhLnBhZ2VzW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlc1twYWdlXTsKICAgIH0KCiAgICBpZiAoZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgZGF0YS5wYWdlT2Jqc1twYWdlXS5yZW1vdmUoKTsKCiAgICBpZiAoZGF0YS5wYWdlV3JhcFtwYWdlXSkgewogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLnJlbW92ZSgpOwogICAgICBkZWxldGUgZGF0YS5wYWdlV3JhcFtwYWdlXTsKICAgIH0KCiAgICBkZWxldGUgZGF0YS5wYWdlUGxhY2VbcGFnZV07CgogIH0sCgogIC8vIFJlbW92ZXMgYSBwYWdlCgogIHJlbW92ZVBhZ2U6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlPDEgfHwgcGFnZT5kYXRhLnRvdGFsUGFnZXMpCiAgICAgIHRocm93IHR1cm5FcnJvcignVGhlIHBhZ2UgJysgcGFnZSArICcgZG9lc25cJ3QgZXhpc3QnKTsKICAgICAgCiAgICBpZiAoZGF0YS5wYWdlT2Jqc1twYWdlXSkgewoKICAgICAgLy8gU3RvcCBhbmltYXRpb25zCiAgICAgIHRoaXMudHVybignc3RvcCcpOwoKICAgICAgLy8gUmVtb3ZlIGBwYWdlYAogICAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlUGFnZUZyb21ET00uY2FsbCh0aGlzLCBwYWdlKTsKICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbcGFnZV07CgogICAgfQoKICAgIC8vIE1vdmUgdGhlIHBhZ2VzIGJlaGluZCBgcGFnZWAKICAgIHR1cm5NZXRob2RzLl9tb3ZlUGFnZXMuY2FsbCh0aGlzLCBwYWdlLCAtMSk7CgogICAgLy8gUmVzaXplIHRoZSBzaXplIG9mIHRoaXMgZmxpcGJvb2sKICAgIGRhdGEudG90YWxQYWdlcyA9IGRhdGEudG90YWxQYWdlcy0xOwoKICAgIC8vIENoZWNrIHRoZSBjdXJyZW50IHZpZXcKCiAgICBpZiAoZGF0YS5wYWdlPmRhdGEudG90YWxQYWdlcykKICAgICAgdGhpcy50dXJuKCdwYWdlJywgZGF0YS50b3RhbFBhZ2VzKTsKICAgIGVsc2UKICAgICAgdHVybk1ldGhvZHMuX21ha2VSYW5nZS5jYWxsKHRoaXMpOwoKICAgIHJldHVybiB0aGlzOwogIAogIH0sCgogIC8vIE1vdmVzIHBhZ2VzCgogIF9tb3ZlUGFnZXM6IGZ1bmN0aW9uKGZyb20sIGNoYW5nZSkgewoKICAgIHZhciBwYWdlLAogICAgICB0aGF0ID0gdGhpcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBzaW5nbGUgPSBkYXRhLmRpc3BsYXk9PSdzaW5nbGUnLAogICAgICBtb3ZlID0gZnVuY3Rpb24ocGFnZSkgewoKICAgICAgICB2YXIgbmV4dCA9IHBhZ2UgKyBjaGFuZ2UsCiAgICAgICAgICBvZGQgPSBuZXh0JTIsCiAgICAgICAgICBjbGFzc05hbWUgPSAob2RkKSA/ICcgb2RkICcgOiAnIGV2ZW4gJzsKCiAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbcGFnZV0pCiAgICAgICAgICBkYXRhLnBhZ2VPYmpzW25leHRdID0gZGF0YS5wYWdlT2Jqc1twYWdlXQogICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3AnICsgcGFnZSArICcgb2RkIGV2ZW4nKQogICAgICAgICAgICAuYWRkQ2xhc3MoJ3AnICsgbmV4dCArIGNsYXNzTmFtZSk7CgogICAgICAgIGlmIChkYXRhLnBhZ2VQbGFjZVtwYWdlXSAmJiBkYXRhLnBhZ2VXcmFwW3BhZ2VdKSB7CiAgICAgICAgICBkYXRhLnBhZ2VQbGFjZVtuZXh0XSA9IG5leHQ7CiAgICAgICAgCiAgICAgICAgaWYgKGRhdGEucGFnZU9ianNbbmV4dF0uaGFzQ2xhc3MoJ2ZpeGVkJykpCiAgICAgICAgICBkYXRhLnBhZ2VXcmFwW25leHRdID0gZGF0YS5wYWdlV3JhcFtwYWdlXQogICAgICAgICAgICAuYXR0cigncGFnZScsIG5leHQpOwogICAgICAgIGVsc2UKICAgICAgICAgIGRhdGEucGFnZVdyYXBbbmV4dF0gPSBkYXRhLnBhZ2VXcmFwW3BhZ2VdLgogICAgICAgICAgICBjc3ModHVybk1ldGhvZHMuX3BhZ2VTaXplLmNhbGwodGhhdCwgbmV4dCwgdHJ1ZSkpLgogICAgICAgICAgICBhdHRyKCdwYWdlJywgbmV4dCk7CiAgICAKICAgICAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKQogICAgICAgICAgICBkYXRhLnBhZ2VzW25leHRdID0gZGF0YS5wYWdlc1twYWdlXQogICAgICAgICAgICAgIC5mbGlwKCdvcHRpb25zJywgewogICAgICAgICAgICAgICAgcGFnZTogbmV4dCwKICAgICAgICAgICAgICAgIG5leHQ6IChzaW5nbGUgfHwgb2RkKSA/IG5leHQrMSA6IG5leHQtMSwKICAgICAgICAgICAgICAgIGNvcm5lcnM6IChzaW5nbGUpID8gJ2FsbCcgOgogICAgICAgICAgICAgICAgICAoKG9kZCkgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnKQogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgIGlmIChjaGFuZ2UpIHsKICAgICAgICAgICAgZGVsZXRlIGRhdGEucGFnZXNbcGFnZV07CiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VQbGFjZVtwYWdlXTsKICAgICAgICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbcGFnZV07CiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBhZ2VXcmFwW3BhZ2VdOwogICAgICAgICAgICBkZWxldGUgZGF0YS5wYWdlT2Jqc1twYWdlXTsKICAgICAgICAgIH0KICAgICAgfQogICAgfTsKCiAgICBpZiAoY2hhbmdlPjApCiAgICAgIGZvciAocGFnZT1kYXRhLnRvdGFsUGFnZXM7IHBhZ2U+PWZyb207IHBhZ2UtLSkKICAgICAgICBtb3ZlKHBhZ2UpOwogICAgZWxzZQogICAgICBmb3IgKHBhZ2U9ZnJvbTsgcGFnZTw9ZGF0YS50b3RhbFBhZ2VzOyBwYWdlKyspCiAgICAgICAgbW92ZShwYWdlKTsKCiAgfSwKCiAgLy8gU2V0cyBvciBHZXRzIHRoZSBkaXNwbGF5IG1vZGUKCiAgZGlzcGxheTogZnVuY3Rpb24oZGlzcGxheSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIGN1cnJlbnREaXNwbGF5ID0gZGF0YS5kaXNwbGF5OwoKICAgIGlmIChkaXNwbGF5KSB7CgogICAgICBpZiAoJC5pbkFycmF5KGRpc3BsYXksIGRpc3BsYXlzKT09LTEpCiAgICAgICAgdGhyb3cgdHVybkVycm9yKCciJytkaXNwbGF5ICsgJyIgaXMgbm90IGEgdmFsdWUgZm9yIGRpc3BsYXknKTsKICAgICAgCiAgICAgIGlmIChkaXNwbGF5PT0nc2luZ2xlJykgewogICAgICAgIGlmICghZGF0YS5wYWdlT2Jqc1swXSkgewoKICAgICAgICAgIHRoaXMudHVybignc3RvcCcpLgogICAgICAgICAgICBjc3MoeydvdmVyZmxvdyc6ICdoaWRkZW4nfSk7CgogICAgICAgICAgZGF0YS5wYWdlT2Jqc1swXSA9ICQoJzxkaXYgLz4nLAogICAgICAgICAgICAgIHsnY2xhc3MnOiAncGFnZSBwLXRlbXBvcmFsJ30pLgogICAgICAgICAgICBjc3Moe3dpZHRoOiB0aGlzLndpZHRoKCksIGhlaWdodDogdGhpcy5oZWlnaHQoKX0pLgogICAgICAgICAgICBhcHBlbmRUbyh0aGlzKTsKCiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChkYXRhLnBhZ2VPYmpzWzBdKSB7CiAgICAgICAgICB0aGlzLnR1cm4oJ3N0b3AnKS5jc3MoeydvdmVyZmxvdyc6ICcnfSk7CiAgICAgICAgICBkYXRhLnBhZ2VPYmpzWzBdLnJlbW92ZSgpOwogICAgICAgICAgZGVsZXRlIGRhdGEucGFnZU9ianNbMF07CiAgICAgICAgfQogICAgICB9CgogICAgICBkYXRhLmRpc3BsYXkgPSBkaXNwbGF5OwoKICAgICAgaWYgKGN1cnJlbnREaXNwbGF5KSB7CiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnR1cm4oJ3NpemUnKTsKICAgICAgICB0dXJuTWV0aG9kcy5fbW92ZVBhZ2VzLmNhbGwodGhpcywgMSwgMCk7CiAgICAgICAgdGhpcy50dXJuKCdzaXplJywgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpLgogICAgICAgICAgdHVybigndXBkYXRlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzOwoKICAgIH0gZWxzZQogICAgICByZXR1cm4gY3VycmVudERpc3BsYXk7CiAgCiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBmbGlwYm9vawoKICBkaXJlY3Rpb246IGZ1bmN0aW9uKGRpcikgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKHR5cGVvZihkaXIpPT0ndW5kZWZpbmVkJykgewoKICAgICAgcmV0dXJuIGRhdGEuZGlyZWN0aW9uOwoKICAgIH0gZWxzZSB7CgogICAgICBkaXIgPSBkaXIudG9Mb3dlckNhc2UoKTsKCiAgICAgIGlmICgkLmluQXJyYXkoZGlyLCBkaXJlY3Rpb25zKT09LTEpCiAgICAgICAgdGhyb3cgdHVybkVycm9yKCciJyArIGRpciArICciIGlzIG5vdCBhIHZhbHVlIGZvciBkaXJlY3Rpb24nKTsKCiAgICAgIGlmIChkaXI9PSdydGwnKSB7CiAgICAgICAgJCh0aGlzKS5hdHRyKCdkaXInLCAnbHRyJykuCiAgICAgICAgICBjc3Moe2RpcmVjdGlvbjogJ2x0cid9KTsKICAgICAgfQoKICAgICAgZGF0YS5kaXJlY3Rpb24gPSBkaXI7CgogICAgICBpZiAoZGF0YS5kb25lKQogICAgICAgIHRoaXMudHVybignc2l6ZScsICQodGhpcykud2lkdGgoKSwgJCh0aGlzKS5oZWlnaHQoKSk7CgogICAgICByZXR1cm4gdGhpczsKICAgIH0KCiAgfSwKCiAgLy8gRGV0ZWN0cyBpZiB0aGUgcGFnZXMgYXJlIGJlaW5nIGFuaW1hdGVkCgogIGFuaW1hdGluZzogZnVuY3Rpb24oKSB7CgogICAgcmV0dXJuIHRoaXMuZGF0YSgpLnBhZ2VNdi5sZW5ndGg+MDsKCiAgfSwKCiAgLy8gRGlzYWJsZXMgYW5kIGVuYWJsZXMgdGhlIGVmZmVjdAoKICBkaXNhYmxlOiBmdW5jdGlvbihib29sKSB7CgogICAgdmFyIHBhZ2UsCiAgICAgIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgICAgZGF0YS5kaXNhYmxlZCA9IGJvb2w9PT11bmRlZmluZWQgfHwgYm9vbD09PXRydWU7CgogICAgZm9yIChwYWdlIGluIGRhdGEucGFnZXMpCiAgICAgIGlmIChoYXMocGFnZSwgZGF0YS5wYWdlcykpCiAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywgKGJvb2wpID8gJC5pbkFycmF5KHBhZ2UsIHZpZXcpIDogZmFsc2UpOwoKICAgIHJldHVybiB0aGlzOwoKICB9LAoKICAvLyBEaXNhYmxlcyBhbmQgZW5hYmxlcyB0aGUgZWZmZWN0CgogIGRpc2FibGVkOiBmdW5jdGlvbihkaXNhYmxlKSB7CgogICAgaWYgKGRpc2FibGU9PT11bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLmRpc2FibGVkPT09dHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0aGlzLnR1cm4oJ2Rpc2FibGUnLCBkaXNhYmxlKTsKICAgIH0KCiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgc2l6ZQoKICBzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CgogICAgaWYgKHdpZHRoICYmIGhlaWdodCkgewoKICAgICAgdmFyIHBhZ2UsIHByb3AsCiAgICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICAgIHBhZ2VXaWR0aCA9IChkYXRhLmRpc3BsYXk9PSdkb3VibGUnKSA/IHdpZHRoLzIgOiB3aWR0aDsKCiAgICAgIHRoaXMuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CgogICAgICBpZiAoZGF0YS5wYWdlT2Jqc1swXSkKICAgICAgICBkYXRhLnBhZ2VPYmpzWzBdLmNzcyh7d2lkdGg6IHBhZ2VXaWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgICAgCiAgICAgIGZvciAocGFnZSBpbiBkYXRhLnBhZ2VXcmFwKSB7CiAgICAgICAgaWYgKCFoYXMocGFnZSwgZGF0YS5wYWdlV3JhcCkpIGNvbnRpbnVlOwoKICAgICAgICBwcm9wID0gdHVybk1ldGhvZHMuX3BhZ2VTaXplLmNhbGwodGhpcywgcGFnZSwgdHJ1ZSk7CgogICAgICAgIGRhdGEucGFnZU9ianNbcGFnZV0uY3NzKHt3aWR0aDogcHJvcC53aWR0aCwgaGVpZ2h0OiBwcm9wLmhlaWdodH0pOwogICAgICAgIGRhdGEucGFnZVdyYXBbcGFnZV0uY3NzKHByb3ApOwoKICAgICAgICBpZiAoZGF0YS5wYWdlc1twYWdlXSkKICAgICAgICAgIGRhdGEucGFnZXNbcGFnZV0uY3NzKHt3aWR0aDogcHJvcC53aWR0aCwgaGVpZ2h0OiBwcm9wLmhlaWdodH0pOwogICAgICB9CgogICAgICB0aGlzLnR1cm4oJ3Jlc2l6ZScpOwoKICAgICAgcmV0dXJuIHRoaXM7CgogICAgfSBlbHNlIHsKICAgICAgCiAgICAgIHJldHVybiB7d2lkdGg6IHRoaXMud2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlaWdodCgpfTsKCiAgICB9CiAgfSwKCiAgLy8gUmVzaXplcyBlYWNoIHBhZ2UKCiAgcmVzaXplOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VzWzBdKSB7CiAgICAgIGRhdGEucGFnZVdyYXBbMF0uY3NzKHtsZWZ0OiAtdGhpcy53aWR0aCgpfSk7CiAgICAgIGRhdGEucGFnZXNbMF0uZmxpcCgncmVzaXplJywgdHJ1ZSk7CiAgICB9CgogICAgZm9yIChwYWdlID0gMTsgcGFnZSA8PSBkYXRhLnRvdGFsUGFnZXM7IHBhZ2UrKykKICAgICAgaWYgKGRhdGEucGFnZXNbcGFnZV0pCiAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdyZXNpemUnLCB0cnVlKTsKCgogIH0sCgogIC8vIFJlbW92ZXMgYW4gYW5pbWF0aW9uIGZyb20gdGhlIGNhY2hlCgogIF9yZW1vdmVNdjogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBpLCBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICAgIAogICAgZm9yIChpPTA7IGk8ZGF0YS5wYWdlTXYubGVuZ3RoOyBpKyspCiAgICAgIGlmIChkYXRhLnBhZ2VNdltpXT09cGFnZSkgewogICAgICAgIGRhdGEucGFnZU12LnNwbGljZShpLCAxKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgIHJldHVybiBmYWxzZTsKCiAgfSwKCiAgLy8gQWRkcyBhbiBhbmltYXRpb24gdG8gdGhlIGNhY2hlCiAgCiAgX2FkZE12OiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlTXYuY2FsbCh0aGlzLCBwYWdlKTsKICAgIGRhdGEucGFnZU12LnB1c2gocGFnZSk7CgogIH0sCgogIC8vIEdldHMgaW5kZXhlcyBmb3IgYSB2aWV3CgogIF92aWV3OiBmdW5jdGlvbihwYWdlKSB7CiAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwogICAgCiAgICBwYWdlID0gcGFnZSB8fCBkYXRhLnBhZ2U7CgogICAgaWYgKGRhdGEuZGlzcGxheT09J2RvdWJsZScpCiAgICAgIHJldHVybiAocGFnZSUyKSA/IFtwYWdlLTEsIHBhZ2VdIDogW3BhZ2UsIHBhZ2UrMV07CiAgICBlbHNlCiAgICAgIHJldHVybiBbcGFnZV07CgogIH0sCgogIC8vIEdldHMgYSB2aWV3CgogIHZpZXc6IGZ1bmN0aW9uKHBhZ2UpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICB2aWV3ID0gdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCBwYWdlKTsKCiAgICBpZiAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJykKICAgICAgcmV0dXJuIFsodmlld1swXT4wKSA/IHZpZXdbMF0gOiAwLAogICAgICAgICh2aWV3WzFdPD1kYXRhLnRvdGFsUGFnZXMpID8gdmlld1sxXSA6IDBdOwogICAgZWxzZQogICAgICByZXR1cm4gWyh2aWV3WzBdPjAgJiYgdmlld1swXTw9ZGF0YS50b3RhbFBhZ2VzKSA/IHZpZXdbMF0gOiAwXTsKCiAgfSwKCiAgLy8gU3RvcHMgYW5pbWF0aW9ucwoKICBzdG9wOiBmdW5jdGlvbihpZ25vcmUsIGFuaW1hdGUpIHsKCiAgICBpZiAodGhpcy50dXJuKCdhbmltYXRpbmcnKSkgewogICAgICB2YXIgaSwgb3B0cywgcGFnZSwKICAgICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgICAgcGFnZXMgPSBkYXRhLnBhZ2VNdjsKCiAgICAgIGRhdGEucGFnZU12ID0gW107CgogICAgICBpZiAoZGF0YS50cGFnZSkgewogICAgICAgIGRhdGEucGFnZSA9IGRhdGEudHBhZ2U7CiAgICAgICAgZGVsZXRlIGRhdGFbJ3RwYWdlJ107CiAgICAgIH0KCiAgICAgIGZvciAoaSA9IDA7IGk8cGFnZXMubGVuZ3RoOyBpKyspIHsKCiAgICAgICAgcGFnZSA9IGRhdGEucGFnZXNbcGFnZXNbaV1dOwogICAgICAgIG9wdHMgPSBwYWdlLmRhdGEoKS5mLm9wdHM7CgogICAgICAgIHBhZ2UuZmxpcCgnaGlkZUZvbGRlZFBhZ2UnLCBmYWxzZSk7CgogICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbChwYWdlLCBmYWxzZSk7CgogICAgICAgIGRhdGEucGFnZVBsYWNlW29wdHMubmV4dF0gPSBvcHRzLm5leHQ7CgogICAgICAgIGlmIChvcHRzLmZvcmNlKSB7CiAgICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5wYWdlJTI9PT0wKSA/IG9wdHMucGFnZS0xIDogb3B0cy5wYWdlKzE7CiAgICAgICAgICBkZWxldGUgb3B0c1snZm9yY2UnXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICB0aGlzLnR1cm4oJ3VwZGF0ZScpOwoKICAgIHJldHVybiB0aGlzOwogIAogIH0sCgogIC8vIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiBwYWdlcwoKICBwYWdlczogZnVuY3Rpb24ocGFnZXMpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlcykgewogICAgICBpZiAocGFnZXM8ZGF0YS50b3RhbFBhZ2VzKSB7CgogICAgICAgIGZvciAodmFyIHBhZ2UgPSBwYWdlcysxOyBwYWdlPD1kYXRhLnRvdGFsUGFnZXM7IHBhZ2UrKykKICAgICAgICAgIHRoaXMudHVybigncmVtb3ZlUGFnZScsIHBhZ2UpOwoKICAgICAgICBpZiAodGhpcy50dXJuKCdwYWdlJyk+cGFnZXMpCiAgICAgICAgICB0aGlzLnR1cm4oJ3BhZ2UnLCBwYWdlcyk7CiAgICAgIH0KCiAgICAgIGRhdGEudG90YWxQYWdlcyA9IHBhZ2VzOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGRhdGEudG90YWxQYWdlczsKCiAgfSwKCiAgLy8gQ2hlY2tzIG1pc3NpbmcgcGFnZXMKCiAgX21pc3NpbmcgOiBmdW5jdGlvbihwYWdlKSB7CiAgICAKICAgIHZhciBwLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHJhbmdlID0gdGhpcy50dXJuKCdyYW5nZScsIHBhZ2UpLAogICAgICBtaXNzaW5nID0gW107CgogICAgZm9yIChwID0gcmFuZ2VbMF07IHA8PXJhbmdlWzFdOyBwKyspIHsKICAgICAgaWYgKCFkYXRhLnBhZ2VPYmpzW3BdKQogICAgICAgIG1pc3NpbmcucHVzaChwKTsKICAgIH0KCiAgICBpZiAobWlzc2luZy5sZW5ndGg+MCkKICAgICAgdGhpcy50cmlnZ2VyKCdtaXNzaW5nJywgW21pc3NpbmddKTsKICAgIAogIH0sCgogIC8vIFNldHMgYSBwYWdlIHdpdGhvdXQgZWZmZWN0CgogIF9maXRQYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKSwKICAgICAgbmV3VmlldyA9IHRoaXMudHVybigndmlldycsIHBhZ2UpOwogICAgCiAgICB0dXJuTWV0aG9kcy5fbWlzc2luZy5jYWxsKHRoaXMsIHBhZ2UpOwoKICAgIGlmICghZGF0YS5wYWdlT2Jqc1twYWdlXSkKICAgICAgcmV0dXJuOwoKICAgIGRhdGEucGFnZSA9IHBhZ2U7CgogICAgdGhpcy50dXJuKCdzdG9wJyk7CiAgICB0dXJuTWV0aG9kcy5fcmVtb3ZlRnJvbURPTS5jYWxsKHRoaXMpOwogICAgdHVybk1ldGhvZHMuX21ha2VSYW5nZS5jYWxsKHRoaXMpOwogICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKHRoaXMpOwogICAgdGhpcy50cmlnZ2VyKCd0dXJuZWQnLCBbcGFnZSwgbmV3Vmlld10pOwoKICAgIGlmIChkYXRhLm9wdHMuYXV0b0NlbnRlcikKICAgICAgdGhpcy50dXJuKCdjZW50ZXInKTsKCiAgfSwKICAKICAvLyBUdXJucyB0byBhIHBhZ2UKCiAgX3R1cm5QYWdlOiBmdW5jdGlvbihwYWdlLCBmcm9tTW91c2VBY3Rpb24pIHsKCiAgICB2YXIgY3VycmVudCwgbmV4dCwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLAogICAgICBwbGFjZSA9IGRhdGEucGFnZVBsYWNlW3BhZ2VdLAogICAgICB2aWV3ID0gdGhpcy50dXJuKCd2aWV3JyksCiAgICAgIG5ld1ZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnLCBwYWdlKTsKICAKICAgIGlmIChkYXRhLnBhZ2UhPXBhZ2UpIHsKCiAgICAgIHZhciBldmVudCA9ICQuRXZlbnQoJ3R1cm5pbmcnKTsKICAgICAgdGhpcy50cmlnZ2VyKGV2ZW50LCBbcGFnZSwgbmV3Vmlld10pOwoKICAgICAgaWYgKGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKQogICAgICAgIHJldHVybjsKCiAgICAgIGlmICgkLmluQXJyYXkoMSwgbmV3VmlldykhPS0xKQogICAgICAgIHRoaXMudHJpZ2dlcignZmlyc3QnKTsKICAgICAgaWYgKCQuaW5BcnJheShkYXRhLnRvdGFsUGFnZXMsIG5ld1ZpZXcpIT0tMSkKICAgICAgICB0aGlzLnRyaWdnZXIoJ2xhc3QnKTsKCiAgICB9CgoKCiAgICBpZiAoZnJvbU1vdXNlQWN0aW9uKSB7CgogICAgICB0aGlzLnR1cm4oJ3N0b3AnLCBwbGFjZSk7CgogICAgfSBlbHNlIHsKCiAgICAgIHR1cm5NZXRob2RzLl9taXNzaW5nLmNhbGwodGhpcywgcGFnZSk7CiAgICAgIAogICAgICBpZiAoIWRhdGEucGFnZU9ianNbcGFnZV0pCiAgICAgICAgcmV0dXJuOwoKICAgICAgdGhpcy50dXJuKCdzdG9wJyk7CiAgICAgIGRhdGEucGFnZSA9IHBhZ2U7CiAgICB9CiAgICAKCiAgICB0dXJuTWV0aG9kcy5fbWFrZVJhbmdlLmNhbGwodGhpcyk7CgogICAgaWYgKGRhdGEuZGlzcGxheT09J3NpbmdsZScpIHsKICAgICAgY3VycmVudCA9IHZpZXdbMF07CiAgICAgIG5leHQgPSBuZXdWaWV3WzBdOwogICAgfSBlbHNlIGlmICh2aWV3WzFdICYmIHBhZ2U+dmlld1sxXSkgewogICAgICBjdXJyZW50ID0gdmlld1sxXTsKICAgICAgbmV4dCA9IG5ld1ZpZXdbMF07CiAgICB9IGVsc2UgaWYgKHZpZXdbMF0gJiYgcGFnZTx2aWV3WzBdKSB7CiAgICAgIGN1cnJlbnQgPSB2aWV3WzBdOwogICAgICBuZXh0ID0gbmV3Vmlld1sxXTsKICAgIH0KCiAgICBpZiAoZGF0YS5wYWdlc1tjdXJyZW50XSkgewoKICAgICAgdmFyIG9wdHMgPSBkYXRhLnBhZ2VzW2N1cnJlbnRdLmRhdGEoKS5mLm9wdHM7CiAgICAgIGRhdGEudHBhZ2UgPSBuZXh0OwogICAgICAKICAgICAgaWYgKG9wdHMubmV4dCE9bmV4dCkgewogICAgICAgIG9wdHMubmV4dCA9IG5leHQ7CiAgICAgICAgZGF0YS5wYWdlUGxhY2VbbmV4dF0gPSBvcHRzLnBhZ2U7CiAgICAgICAgb3B0cy5mb3JjZSA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChkYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CgogICAgICAgIGlmIChkYXRhLmRpcmVjdGlvbj09J2x0cicpIHsKICAgICAgICAgIGRhdGEucGFnZXNbY3VycmVudF0uZmxpcCgndHVyblBhZ2UnLAogICAgICAgICAgICAobmV3Vmlld1swXSA+IHZpZXdbMF0pID8gJ3InIDogJ2wnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScsCiAgICAgICAgICAgIChuZXdWaWV3WzBdID4gdmlld1swXSkgPyAnbCcgOiAncicpOwogICAgICAgIH0KCiAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgZGF0YS5wYWdlc1tjdXJyZW50XS5mbGlwKCd0dXJuUGFnZScpOwoKICAgICAgfQogICAgfQoKICB9LAoKICAvLyBHZXRzIGFuZCBzZXRzIGEgcGFnZQoKICBwYWdlOiBmdW5jdGlvbihwYWdlKSB7CgogICAgcGFnZSA9IHBhcnNlSW50KHBhZ2UsIDEwKTsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChwYWdlPjAgJiYgcGFnZTw9ZGF0YS50b3RhbFBhZ2VzKSB7CiAgICAgIGlmICghZGF0YS5kb25lIHx8ICQuaW5BcnJheShwYWdlLCB0aGlzLnR1cm4oJ3ZpZXcnKSkhPS0xKQogICAgICAgIHR1cm5NZXRob2RzLl9maXRQYWdlLmNhbGwodGhpcywgcGFnZSk7CiAgICAgIGVsc2UKICAgICAgICB0dXJuTWV0aG9kcy5fdHVyblBhZ2UuY2FsbCh0aGlzLCBwYWdlKTsKICAgIAogICAgICByZXR1cm4gdGhpczsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGRhdGEucGFnZTsKICAKICB9LAoKICAvLyBUdXJucyB0byB0aGUgbmV4dCB2aWV3CgogIG5leHQ6IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB0aGlzLnR1cm4oJ3BhZ2UnLAogICAgICB0dXJuTWV0aG9kcy5fdmlldy5jYWxsKHRoaXMsIHRoaXMuZGF0YSgpLnBhZ2UpLnBvcCgpICsgMSk7CiAgCiAgfSwKCiAgLy8gVHVybnMgdG8gdGhlIHByZXZpb3VzIHZpZXcKCiAgcHJldmlvdXM6IGZ1bmN0aW9uKCkgewogICAgCiAgICByZXR1cm4gdGhpcy50dXJuKCdwYWdlJywKICAgICAgdHVybk1ldGhvZHMuX3ZpZXcuY2FsbCh0aGlzLCB0aGlzLmRhdGEoKS5wYWdlKS5zaGlmdCgpIC0gMSk7CgogIH0sCgogIHBlZWw6IGZ1bmN0aW9uKGNvcm5lciwgYW5pbWF0ZSkgewogICAgCiAgICByZXR1cm4gdGhpczsKCiAgfSwKCiAgLy8gQWRkcyBhIG1vdGlvbiB0byB0aGUgaW50ZXJuYWwgbGlzdAogIC8vIFRoaXMgZXZlbnQgaXMgY2FsbGVkIGluIGNvbnRleHQgb2YgZmxpcAoKICBfYWRkTW90aW9uUGFnZTogZnVuY3Rpb24oKSB7CgogICAgdmFyIG9wdHMgPSAkKHRoaXMpLmRhdGEoKS5mLm9wdHMsCiAgICAgIHR1cm4gPSBvcHRzLnR1cm4sCiAgICAgIGRkID0gdHVybi5kYXRhKCk7CgogICAgdHVybk1ldGhvZHMuX2FkZE12LmNhbGwodHVybiwgb3B0cy5wYWdlKTsKICAgIGRkLnBhZ2VQbGFjZVtvcHRzLm5leHRdID0gb3B0cy5wYWdlOwogICAgdHVybi50dXJuKCd1cGRhdGUnKTsKCiAgfSwKCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCgogIF9zdGFydDogZnVuY3Rpb24oZSwgb3B0cywgY29ybmVyKSB7CgogICAgdmFyIGRhdGEgPSBvcHRzLnR1cm4uZGF0YSgpOwoKICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7CiAgICAgIHR1cm5NZXRob2RzLl91cGRhdGVTaGFkb3cuY2FsbChvcHRzLnR1cm4pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGRhdGEuZGlzcGxheT09J3NpbmdsZScgJiYgY29ybmVyKSB7CgogICAgICBpZiAoKGNvcm5lcj09J2wnICYmIGRhdGEuZGlyZWN0aW9uPT0nbHRyJykKICAgICAgICB8fAogICAgICAgIChjb3JuZXI9PSdyJyAmJiBkYXRhLmRpcmVjdGlvbj09J3J0bCcpKQogICAgICB7CiAgICAgICAgCiAgICAgICAgb3B0cy5uZXh0ID0gKG9wdHMubmV4dDxvcHRzLnBhZ2UpID8gb3B0cy5uZXh0IDogb3B0cy5wYWdlLTE7CiAgICAgICAgb3B0cy5mb3JjZSA9IHRydWU7CgogICAgICB9IGVsc2UgewoKICAgICAgICBvcHRzLm5leHQgPSAob3B0cy5uZXh0Pm9wdHMucGFnZSkgPyBvcHRzLm5leHQgOiBvcHRzLnBhZ2UrMTsKCiAgICAgIH0KCiAgICB9CgogICAgdHVybk1ldGhvZHMuX2FkZE1vdGlvblBhZ2UuY2FsbChlLnRhcmdldCk7CiAgICB0dXJuTWV0aG9kcy5fdXBkYXRlU2hhZG93LmNhbGwob3B0cy50dXJuKTsKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX2VuZDogZnVuY3Rpb24oZSwgb3B0cywgdHVybmVkKSB7CgogICAgdmFyIHRoYXQgPSAkKGUudGFyZ2V0KSwKICAgICAgZGF0YSA9IHRoYXQuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBvcHRzLnR1cm4sCiAgICAgIGRkID0gdHVybi5kYXRhKCk7CgogICAgaWYgKHR1cm5lZCB8fCBkZC50cGFnZSkgewoKICAgICAgaWYgKGRkLnRwYWdlPT1vcHRzLm5leHQgfHwgZGQudHBhZ2U9PW9wdHMucGFnZSkgewogICAgICAgIGRlbGV0ZSBkZFsndHBhZ2UnXTsKICAgICAgICB0dXJuTWV0aG9kcy5fZml0UGFnZS5jYWxsKHR1cm4sIGRkLnRwYWdlIHx8IG9wdHMubmV4dCwgdHJ1ZSk7CiAgICAgIH0KCiAgICB9IGVsc2UgewoKICAgICAgdHVybk1ldGhvZHMuX3JlbW92ZU12LmNhbGwodHVybiwgb3B0cy5wYWdlKTsKICAgICAgdHVybk1ldGhvZHMuX3VwZGF0ZVNoYWRvdy5jYWxsKHR1cm4pOwogICAgICB0dXJuLnR1cm4oJ3VwZGF0ZScpOwoKICAgIH0KICAgIAogIH0sCiAgCiAgLy8gVGhpcyBldmVudCBpcyBjYWxsZWQgaW4gY29udGV4dCBvZiBmbGlwCgogIF9wcmVzc2VkOiBmdW5jdGlvbihlKSB7CgogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKCiAgICB2YXIgcGFnZSwKICAgICAgZGF0YSA9ICQoZS50YXJnZXQpLmRhdGEoKS5mLAogICAgICBwYWdlcyA9IGRhdGEub3B0cy50dXJuLmRhdGEoKS5wYWdlczsKCiAgICBmb3IgKHBhZ2UgaW4gcGFnZXMpCiAgICAgIGlmIChwYWdlIT1kYXRhLm9wdHMucGFnZSkKICAgICAgICBwYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywgdHJ1ZSk7CgogICAgcmV0dXJuIGRhdGEudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwoKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKCiAgX3JlbGVhc2VkOiBmdW5jdGlvbihlLCBwb2ludCkgewoKICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CgogICAgdmFyIG91dEFyZWEsCiAgICAgIHBhZ2UgPSAkKGUudGFyZ2V0KSwKICAgICAgZGF0YSA9IHBhZ2UuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgdHVybkRhdGEgPSB0dXJuLmRhdGEoKTsKICAgIAogICAgaWYgKHR1cm5EYXRhLmRpc3BsYXk9PSdzaW5nbGUnKSB7CiAgICAgIG91dEFyZWEgPSAocG9pbnQuY29ybmVyPT0ncicpID8KICAgICAgICBwb2ludC54PHBhZ2Uud2lkdGgoKS8yOgogICAgICAgIHBvaW50Lng+cGFnZS53aWR0aCgpLzI7CiAgICB9IGVsc2UgewogICAgICBvdXRBcmVhID0gcG9pbnQueDwwIHx8IHBvaW50Lng+cGFnZS53aWR0aCgpOwogICAgfQoKICAgIGlmICgobmV3IERhdGUoKSkuZ2V0VGltZSgpLWRhdGEudGltZTwyMDAgfHwgb3V0QXJlYSkgewoKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgdHVybk1ldGhvZHMuX3R1cm5QYWdlLmNhbGwoCiAgICAgICAgdHVybiwKICAgICAgICBkYXRhLm9wdHMubmV4dCwKICAgICAgICBmbGlwTWV0aG9kcy5fY29ybmVyQWN0aXZhdGVkLmNhbGwocGFnZSwgcG9pbnQsIDEpID09PSBmYWxzZQogICAgICApOwoKICAgIH0KCiAgICB0dXJuRGF0YS5tb3VzZUFjdGlvbiA9IGZhbHNlOwoKICB9LAoKICAvLyBUaGlzIGV2ZW50IGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZsaXAKICAKICBfZmxpcDogZnVuY3Rpb24oZSkgewoKICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CgogICAgdmFyIG9wdHMgPSAkKGUudGFyZ2V0KS5kYXRhKCkuZi5vcHRzOwoKICAgIG9wdHMudHVybi50cmlnZ2VyKCd0dXJuJywgW29wdHMubmV4dF0pOwoKICAgIGlmIChvcHRzLnR1cm4uZGF0YSgpLm9wdHMuYXV0b0NlbnRlcikKICAgICAgb3B0cy50dXJuLnR1cm4oJ2NlbnRlcicsIG9wdHMubmV4dCk7CgogIH0sCgogIC8vIENhbGN1bGF0ZSB0aGUgei1pbmRleCB2YWx1ZSBmb3IgcGFnZXMgZHVyaW5nIHRoZSBhbmltYXRpb24KCiAgY2FsY3VsYXRlWjogZnVuY3Rpb24obXYpIHsKCiAgICB2YXIgaSwgcGFnZSwgbmV4dFBhZ2UsIHBsYWNlUGFnZSwgZHBhZ2UsCiAgICAgIHRoYXQgPSB0aGlzLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKSwKICAgICAgY3VycmVudFBhZ2UgPSB2aWV3WzBdIHx8IHZpZXdbMV0sCiAgICAgIHIgPSB7cGFnZVo6IHt9LCBwYXJ0Wjoge30sIHBhZ2VWOiB7fX0sCgogICAgICBhZGRWaWV3ID0gZnVuY3Rpb24ocGFnZSkgewogICAgICAgIHZhciB2aWV3ID0gdGhhdC50dXJuKCd2aWV3JywgcGFnZSk7CiAgICAgICAgaWYgKHZpZXdbMF0pIHIucGFnZVZbdmlld1swXV0gPSB0cnVlOwogICAgICAgIGlmICh2aWV3WzFdKSByLnBhZ2VWW3ZpZXdbMV1dID0gdHJ1ZTsKICAgICAgfTsKICAgIAogICAgZm9yIChpID0gMDsgaTxtdi5sZW5ndGg7IGkrKykgewogICAgICBwYWdlID0gbXZbaV07CiAgICAgIG5leHRQYWdlID0gZGF0YS5wYWdlc1twYWdlXS5kYXRhKCkuZi5vcHRzLm5leHQ7CiAgICAgIHBsYWNlUGFnZSA9IGRhdGEucGFnZVBsYWNlW3BhZ2VdOwogICAgICBhZGRWaWV3KHBhZ2UpOwogICAgICBhZGRWaWV3KG5leHRQYWdlKTsKICAgICAgZHBhZ2UgPSAoZGF0YS5wYWdlUGxhY2VbbmV4dFBhZ2VdPT1uZXh0UGFnZSkgPyBuZXh0UGFnZSA6IHBhZ2U7CiAgICAgIHIucGFnZVpbZHBhZ2VdID0gZGF0YS50b3RhbFBhZ2VzIC0gTWF0aC5hYnMoY3VycmVudFBhZ2UtZHBhZ2UpOwogICAgICByLnBhcnRaW3BsYWNlUGFnZV0gPSBkYXRhLnRvdGFsUGFnZXMqMiArIE1hdGguYWJzKGN1cnJlbnRQYWdlLWRwYWdlKTsKICAgIH0KCiAgICByZXR1cm4gcjsKICB9LAoKICAvLyBVcGRhdGVzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGV2ZXJ5IHBhZ2UKCiAgdXBkYXRlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgcGFnZSwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGlmIChkYXRhLnBhZ2VNdi5sZW5ndGggJiYgZGF0YS5wYWdlTXZbMF0hPT0wKSB7CgogICAgICAvLyBVcGRhdGUgbW90aW9uCgogICAgICB2YXIgcCwKICAgICAgICBmaXhlZCwKICAgICAgICBwb3MgPSB0aGlzLnR1cm4oJ2NhbGN1bGF0ZVonLCBkYXRhLnBhZ2VNdiksCiAgICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEudHBhZ2UpOwogICAgCiAgICAgIGZvciAocGFnZSBpbiBkYXRhLnBhZ2VXcmFwKSB7CgogICAgICAgIGlmICghaGFzKHBhZ2UsIGRhdGEucGFnZVdyYXApKQogICAgICAgICAgY29udGludWU7CgogICAgICAgIGZpeGVkID0gZGF0YS5wYWdlT2Jqc1twYWdlXS5oYXNDbGFzcygnZml4ZWQnKTsKCiAgICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXS5jc3MoewogICAgICAgICAgZGlzcGxheTogKHBvcy5wYWdlVltwYWdlXSB8fCBmaXhlZCkgPyAnJyA6ICdub25lJywKICAgICAgICAgICd6LWluZGV4JzogcG9zLnBhZ2VaW3BhZ2VdIHx8ICgoZml4ZWQpID8gLTEgOiAwKQogICAgICAgIH0pOwoKICAgICAgICBpZiAoKHAgPSBkYXRhLnBhZ2VzW3BhZ2VdKSkgewogICAgICAgICAgcC5mbGlwKCd6JywgcG9zLnBhcnRaW3BhZ2VdIHx8IG51bGwpOwoKICAgICAgICAgIGlmIChwb3MucGFnZVZbcGFnZV0pCiAgICAgICAgICAgIHAuZmxpcCgncmVzaXplJyk7CgogICAgICAgICAgaWYgKGRhdGEudHBhZ2UpCiAgICAgICAgICAgIHAuZmxpcCgnZGlzYWJsZScsIHRydWUpOyAvLyBkYXRhLmRpc2FibGVkIHx8IHBhZ2UhPWFwYWdlCiAgICAgICAgfQogICAgICB9CiAgCiAgICB9IGVsc2UgewoKICAgICAgLy8gVXBkYXRlIHN0YXRpYyBwYWdlcwoKICAgICAgZm9yIChwYWdlIGluIGRhdGEucGFnZVdyYXApIHsKCiAgICAgICAgaWYgKCFoYXMocGFnZSwgZGF0YS5wYWdlV3JhcCkpCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgdmFyIHBhZ2VMb2NhdGlvbiA9IHR1cm5NZXRob2RzLl9zZXRQYWdlTG9jLmNhbGwodGhpcywgcGFnZSk7CgogICAgICAgIGlmIChkYXRhLnBhZ2VzW3BhZ2VdKQogICAgICAgICAgZGF0YS5wYWdlc1twYWdlXS5mbGlwKCdkaXNhYmxlJywKICAgICAgICAgICAgZGF0YS5kaXNhYmxlZCB8fCBwYWdlTG9jYXRpb24hPTEpLmZsaXAoJ3onLCBudWxsKTsKCiAgICAgIH0KICAgIH0KICB9LAoKICAvLyBVcGRhdGVzIHRoZSBwb3NpdGlvbiBhbmQgc2l6ZSBvZiB0aGUgZmxpcGJvb2sncyBzaGFkb3cKCiAgX3VwZGF0ZVNoYWRvdzogZnVuY3Rpb24oKSB7CiAgICAKICAgIHZhciB2aWV3LCB2aWV3Miwgc2hhZG93LAogICAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCgpLAogICAgICBwYWdlV2lkdGggPSAoZGF0YS5kaXNwbGF5PT0nc2luZ2xlJykgPyB3aWR0aCA6IHdpZHRoLzI7CgogICAgdmlldyA9IHRoaXMudHVybigndmlldycpOwoKICAgIGlmICghZGF0YS5zaGFkb3cpIHsKICAgICAgZGF0YS5zaGFkb3cgPSAkKCc8ZGl2IC8+JywKICAgICAgewogICAgICAgICdjbGFzcyc6ICdzaGFkb3cnLAogICAgICAgICdjc3MnOiBkaXZBdHQoMCwgMCwgMCkuY3NzCiAgICAgIH0pLgogICAgICBhcHBlbmRUbyh0aGlzKTsKICAgIH0KCiAgICBmb3IgKHZhciBpID0gMDsgaTxkYXRhLnBhZ2VNdi5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIXZpZXdbMF0gfHwgIXZpZXdbMV0pCiAgICAgICAgYnJlYWs7CiAgICAKICAgICAgdmlldyA9IHRoaXMudHVybigndmlldycsIGRhdGEucGFnZXNbZGF0YS5wYWdlTXZbaV1dLmRhdGEoKS5mLm9wdHMubmV4dCk7CiAgICAgIHZpZXcyID0gdGhpcy50dXJuKCd2aWV3JywgZGF0YS5wYWdlTXZbaV0pOwoKICAgICAgdmlld1swXSA9IHZpZXdbMF0gJiYgdmlldzJbMF07CiAgICAgIHZpZXdbMV0gPSB2aWV3WzFdICYmIHZpZXcyWzFdOwogICAgfQoKICAgIGlmICghdmlld1swXSkgc2hhZG93ID0gKGRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPyAxIDogMjsKICAgIGVsc2UgaWYgKCF2aWV3WzFdKSBzaGFkb3cgPSAoZGF0YS5kaXJlY3Rpb249PSdsdHInKSA/IDIgOiAxOwogICAgZWxzZSBzaGFkb3cgPSAzOwoKICAgIHN3aXRjaCAoc2hhZG93KSB7CiAgICAgIGNhc2UgMToKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogcGFnZVdpZHRoCiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBkYXRhLnNoYWRvdy5jc3MoewogICAgICAgICAgd2lkdGg6IHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgZGF0YS5zaGFkb3cuY3NzKHsKICAgICAgICAgIHdpZHRoOiB3aWR0aCwKICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAogICAgICAgICAgdG9wOiAwLAogICAgICAgICAgbGVmdDogMAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgfQoKICB9LAoKICAvLyBTZXRzIHRoZSB6LWluZGV4IGFuZCBkaXNwbGF5IHByb3BlcnR5IG9mIGEgcGFnZQogIC8vIEl0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgdmlldwoKICBfc2V0UGFnZUxvYzogZnVuY3Rpb24ocGFnZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCksCiAgICAgIHZpZXcgPSB0aGlzLnR1cm4oJ3ZpZXcnKTsKCiAgICBpZiAocGFnZT09dmlld1swXSB8fCBwYWdlPT12aWV3WzFdKSB7CiAgICAgIAogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcyh7ekluZGV4OiBkYXRhLnRvdGFsUGFnZXMsIGRpc3BsYXk6ICcnfSk7CiAgICAgIHJldHVybiAxOwoKICAgIH0gZWxzZSBpZiAoKGRhdGEuZGlzcGxheT09J3NpbmdsZScgJiYgcGFnZT09dmlld1swXSsxKSB8fAogICAgICAoZGF0YS5kaXNwbGF5PT0nZG91YmxlJyAmJiBwYWdlPT12aWV3WzBdLTIgfHwKICAgICAgcGFnZT09dmlld1sxXSsyKSkgewogICAgICAKICAgICAgZGF0YS5wYWdlV3JhcFtwYWdlXS5jc3Moe3pJbmRleDogZGF0YS50b3RhbFBhZ2VzLTEsIGRpc3BsYXk6ICcnfSk7CiAgICAgIHJldHVybiAyOwoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICBkYXRhLnBhZ2VXcmFwW3BhZ2VdLmNzcyh7ekluZGV4OiAwLAogICAgICAgIGRpc3BsYXk6IChkYXRhLnBhZ2VPYmpzW3BhZ2VdLmhhc0NsYXNzKCdmaXhlZCcpKSA/ICcnIDogJ25vbmUnfQogICAgICApOwoKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfSwKCiAgLy8gR2V0cyBhbmQgc2V0cyB0aGUgb3B0aW9ucwoKICBvcHRpb25zOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAKICAgIGlmIChvcHRpb25zPT09dW5kZWZpbmVkKSB7CiAgICAgIAogICAgICByZXR1cm4gdGhpcy5kYXRhKCkub3B0czsKCiAgICB9IGVsc2UgewoKICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKTsKCiAgICAgIC8vIFNldCBuZXcgdmFsdWVzCgogICAgICAkLmV4dGVuZChkYXRhLm9wdHMsIG9wdGlvbnMpOwogICAgICAKICAgICAgLy8gU2V0IHBhZ2VzCgogICAgICBpZiAob3B0aW9ucy5wYWdlcykKICAgICAgICB0aGlzLnR1cm4oJ3BhZ2VzJywgb3B0aW9ucy5wYWdlcyk7CgogICAgICAvLyBTZXQgcGFnZQoKICAgICAgaWYgKG9wdGlvbnMucGFnZSkKICAgICAgICB0aGlzLnR1cm4oJ3BhZ2UnLCBvcHRpb25zLnBhZ2UpOwoKICAgICAgLy8gU2V0IGRpc3BsYXkKCiAgICAgIGlmIChvcHRpb25zLmRpc3BsYXkpCiAgICAgICAgdGhpcy50dXJuKCdkaXNwbGF5Jywgb3B0aW9ucy5kaXNwbGF5KTsKICAgICAgCiAgICAgIC8vIFNldCBkaXJlY3Rpb24KCiAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbikKICAgICAgICB0aGlzLnR1cm4oJ2RpcmVjdGlvbicsIG9wdGlvbnMuZGlyZWN0aW9uKTsKCiAgICAgIC8vIFNldCBzaXplCgogICAgICBpZiAob3B0aW9ucy53aWR0aCAmJiBvcHRpb25zLmhlaWdodCkKICAgICAgICB0aGlzLnR1cm4oJ3NpemUnLCBvcHRpb25zLndpZHRoLCBvcHRpb25zLmhlaWdodCk7CiAgICAgIAogICAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzCgogICAgICBpZiAob3B0aW9ucy53aGVuKQogICAgICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBvcHRpb25zLndoZW4pCiAgICAgICAgICBpZiAoaGFzKGV2ZW50TmFtZSwgb3B0aW9ucy53aGVuKSkgewogICAgICAgICAgICB0aGlzLnVuYmluZChldmVudE5hbWUpLgogICAgICAgICAgICAgIGJpbmQoZXZlbnROYW1lLCBvcHRpb25zLndoZW5bZXZlbnROYW1lXSk7CiAgICAgICAgICB9CgogICAgICByZXR1cm4gdGhpczsKICAgIH0KCiAgfSwKCiAgLy8gR2V0cyB0aGUgY3VycmVudCB2ZXJzaW9uCgogIHZlcnNpb246IGZ1bmN0aW9uKCkgewoKICAgIHJldHVybiB2ZXJzaW9uOwoKICB9Cn0sCgovLyBNZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGZvciB0aGUgZmxpcCBwYWdlIGVmZmVjdAoKZmxpcE1ldGhvZHMgPSB7CgogIC8vIENvbnN0cnVjdG9yCgogIGluaXQ6IGZ1bmN0aW9uKG9wdHMpIHsKCiAgICB0aGlzLmRhdGEoe2Y6CiAgICAgIHtlZmZlY3Q6IChvcHRzLmNvcm5lcnM9PSdyJyB8fCBvcHRzLmNvcm5lcnM9PSdsJykgPyAnaGFyZCcgOiAnc2hlZXQnfX0KICAgICk7CgogICAgdGhpcy5mbGlwKCdvcHRpb25zJywgb3B0cyk7CgogICAgZmxpcE1ldGhvZHMuX2FkZFBhZ2VXcmFwcGVyLmNhbGwodGhpcyk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgc2V0RGF0YTogZnVuY3Rpb24oZCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpOwoKICAgIGRhdGEuZiA9ICQuZXh0ZW5kKGRhdGEuZiwgZCk7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgb3B0aW9uczogZnVuY3Rpb24ob3B0cykgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKG9wdHMpIHsKICAgICAgZmxpcE1ldGhvZHMuc2V0RGF0YS5jYWxsKHRoaXMsCiAgICAgICAge29wdHM6ICQuZXh0ZW5kKHt9LCBkYXRhLm9wdHMgfHwgZmxpcE9wdGlvbnMsIG9wdHMpfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlCiAgICAgIHJldHVybiBkYXRhLm9wdHM7CgogIH0sCgogIHo6IGZ1bmN0aW9uKHopIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKGRhdGEuZndyYXBwZXIpIHsKICAgICAgZGF0YS5vcHRzWyd6LWluZGV4J10gPSB6OwogICAgICBkYXRhLmZ3cmFwcGVyLmNzcygKICAgICAgICB7J3otaW5kZXgnOiB6IHx8IHBhcnNlSW50KGRhdGEucGFyZW50LmNzcygnei1pbmRleCcpLCAxMCkgfHwgMH0KICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9LAoKICBfY0FsbG93ZWQ6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICB0dXJuRGF0YSA9IGRhdGEub3B0cy50dXJuLmRhdGEoKSwKICAgIHBhZ2UgPSBkYXRhLm9wdHMucGFnZSwKICAgIG9kZCA9IHBhZ2UlMjsKCiAgICBpZiAodHVybkRhdGEuZGlzcGxheT09J3NpbmdsZScpIHsKICAgICAgaWYgKHBhZ2U9PTEpCiAgICAgICAgcmV0dXJuICh0dXJuRGF0YS5kaXJlY3Rpb249PSdsdHInKSA/CiAgICAgICAgICBjb3JuZXJzWydmb3J3YXJkJ10gOiBjb3JuZXJzWydiYWNrd2FyZCddOwogICAgICBlbHNlIGlmIChwYWdlPT10dXJuRGF0YS50b3RhbFBhZ2VzKQogICAgICAgIHJldHVybiAodHVybkRhdGEuZGlyZWN0aW9uPT0nbHRyJykgPwogICAgICAgICAgY29ybmVyc1snYmFja3dhcmQnXSA6IGNvcm5lcnNbJ2ZvcndhcmQnXTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBjb3JuZXJzWydhbGwnXTsKICAgIH0gZWxzZSB7CgogICAgICByZXR1cm4gKHR1cm5EYXRhLmRpcmVjdGlvbj09J2x0cicpID8KICAgICAgICBjb3JuZXJzWyhvZGQpID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJ10KICAgICAgICA6CiAgICAgICAgY29ybmVyc1sob2RkKSA/ICdiYWNrd2FyZCcgOiAnZm9yd2FyZCddOwoKICAgIH0KCiAgfSwKCiAgX2Nvcm5lckFjdGl2YXRlZDogZnVuY3Rpb24oZSkgewogIAogIAogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICBwb3MgPSBkYXRhLnBhcmVudC5vZmZzZXQoKSwKICAgICAgd2lkdGggPSB0aGlzLndpZHRoKCksCiAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCksCiAgICAgIGMgPSB7eDogTWF0aC5tYXgoMCwgZS5wYWdlWC1wb3MubGVmdCksIHk6IE1hdGgubWF4KDAsIGUucGFnZVktcG9zLnRvcCl9LAogICAgICBjc3ogPSBkYXRhLm9wdHMuY29ybmVyU2l6ZTsKCiAgICBpZiAoYy54PD0wIHx8IGMueTw9MCB8fCBjLng+PXdpZHRoIHx8IGMueT49aGVpZ2h0KQogICAgICByZXR1cm4gZmFsc2U7CgogICAgdmFyIGFsbG93ZWRDb3JuZXJzID0gZmxpcE1ldGhvZHMuX2NBbGxvd2VkLmNhbGwodGhpcyk7CgogICAgaWYgKGMueD53aWR0aC1jc3opCiAgICAgIGMuY29ybmVyID0gJ3InOwogICAgZWxzZSBpZiAoYy54PGNzeikKICAgICAgYy5jb3JuZXIgPSAnbCc7CiAgICBlbHNlCiAgICAgIHJldHVybiBmYWxzZTsKCgogICAgcmV0dXJuICgkLmluQXJyYXkoYy5jb3JuZXIsIGFsbG93ZWRDb3JuZXJzKT09LTEpID8gZmFsc2UgOiBjOwoKICB9LAoKICBfYzogZnVuY3Rpb24oY29ybmVyLCBvcHRzKSB7CgogICAgb3B0cyA9IG9wdHMgfHwgMDsKCiAgICBzd2l0Y2ggKGNvcm5lcikgewogICAgICBjYXNlICdsJzoKICAgICAgICByZXR1cm4gcG9pbnQyRChvcHRzLCAwKTsKICAgICAgY2FzZSAncic6CiAgICAgICAgcmV0dXJuIHBvaW50MkQodGhpcy53aWR0aCgpLW9wdHMsIDApOwogICAgfQoKICB9LAoKICBfYzI6IGZ1bmN0aW9uKGNvcm5lcikgewoKICAgIHN3aXRjaCAoY29ybmVyKSB7CiAgICAgIGNhc2UgJ2wnOgogICAgICAgIHJldHVybiBwb2ludDJEKHRoaXMud2lkdGgoKSoyLCAwKTsKICAgICAgY2FzZSAncic6CiAgICAgICAgcmV0dXJuIHBvaW50MkQoLXRoaXMud2lkdGgoKSwgMCk7CiAgICB9CgogIH0sCgogIF9mb2xkaW5nUGFnZTogZnVuY3Rpb24oY29ybmVyKSB7CgogICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEoKS5mLAogICAgICBvcHRzID0gZGF0YS5vcHRzOwoKICAgIGlmIChkYXRhLmZvbGRpbmcpIHJldHVybiBkYXRhLmZvbGRpbmc7CiAgICBlbHNlIGlmKG9wdHMudHVybikgewoKICAgICAgZGF0YSA9IG9wdHMudHVybi5kYXRhKCk7CiAgICAgIGlmIChkYXRhLmRpc3BsYXkgPT0gJ3NpbmdsZScpCiAgICAgICAgcmV0dXJuIChkYXRhLnBhZ2VPYmpzW29wdHMubmV4dF0pID8gZGF0YS5wYWdlT2Jqc1swXSA6IG51bGw7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gZGF0YS5wYWdlT2Jqc1tvcHRzLm5leHRdOwogICAgfQoKICB9LAoKICBfYmFja0dyYWRpZW50OiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHR1cm4gPSBkYXRhLm9wdHMudHVybiwKICAgICAgZ3JhZGllbnQgPSBkYXRhLm9wdHMuZ3JhZGllbnRzICYmCiAgICAgICAgKCF0dXJuIHx8CiAgICAgICAgdHVybi5kYXRhKCkuZGlzcGxheT09J3NpbmdsZScgfHwKICAgICAgICAoZGF0YS5vcHRzLnBhZ2UhPTIgJiYgZGF0YS5vcHRzLnBhZ2UhPXR1cm4uZGF0YSgpLnRvdGFsUGFnZXMtMSkpOwoKCiAgICByZXR1cm4gZ3JhZGllbnQ7CgogIH0sCgogIHJlc2l6ZTogZnVuY3Rpb24oZnVsbCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLAogICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCgpOwoKCiAgICBpZiAoZnVsbCkgewogICAgICBkYXRhLndyYXBwZXIuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICAgIGRhdGEuZnBhZ2UuY3NzKHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICB9CgogIH0sCgogIC8vIFByZXBhcmVzIHRoZSBwYWdlIGJ5IGFkZGluZyBhIGdlbmVyYWwgd3JhcHBlciBhbmQgYW5vdGhlciBvYmplY3RzCgogIF9hZGRQYWdlV3JhcHBlcjogZnVuY3Rpb24oKSB7CgogICAgdmFyIGF0dCwKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIHBhcmVudCA9IHRoaXMucGFyZW50KCk7CgogICAgZGF0YS5wYXJlbnQgPSBwYXJlbnQ7CgogICAgaWYgKCFkYXRhLndyYXBwZXIpIHsKICAgICAgICAKICAgICAgdmFyIGNzc1Byb3BlcnRpZXMgPSB7fTsKCiAgICAgIGRhdGEud3JhcHBlciA9ICQoJzxkaXYvPicsIGRpdkF0dCgwLCAwLCAyKSkuCiAgICAgICAgY3NzKGNzc1Byb3BlcnRpZXMpLgogICAgICAgIGFwcGVuZFRvKHBhcmVudCkuCiAgICAgICAgcHJlcGVuZCh0aGlzKTsKCiAgICAgIGRhdGEuZnBhZ2UgPSAkKCc8ZGl2Lz4nLCBkaXZBdHQoMCwgMCwgMSkpLgogICAgICAgIGNzcyhjc3NQcm9wZXJ0aWVzKS4KICAgICAgICBhcHBlbmRUbyhwYXJlbnQpOwoKICAgIH0KCiAgICAvLyBTZXQgc2l6ZQogICAgZmxpcE1ldGhvZHMucmVzaXplLmNhbGwodGhpcywgdHJ1ZSk7CgogIH0sCgogIC8vIFRha2VzIGEgMlAgcG9pbnQgZnJvbSB0aGUgc2NyZWVuIGFuZCBhcHBsaWVzIHRoZSB0cmFuc2Zvcm1hdGlvbgoKICBfZm9sZDogZnVuY3Rpb24ocG9pbnQpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmYsCiAgICAgIG8gPSBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsIHBvaW50LmNvcm5lciksCiAgICAgIHJlbFggPSAoby54KSA/IG8ueCAtIHBvaW50LnggOiAgcG9pbnQueCwKICAgICAgd2lkdGggPSB0aGlzLndpZHRoKCksCiAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCk7CgogICAgICByZWxYID0gTWF0aC5taW4od2lkdGgqMiwgTWF0aC5tYXgoMCwgcmVsWCkpOwoKCiAgICAgIHN3aXRjaChwb2ludC5jb3JuZXIpIHsKICAgICAgICBjYXNlICdyJyA6CiAgICAgICAgICBkYXRhLndyYXBwZXIuY3NzKHsKICAgICAgICAgICAgd2lkdGg6IE1hdGgubWF4KDAsIHdpZHRoLXJlbFgpCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuY3NzKHsKICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsCiAgICAgICAgICAgIGxlZnQ6IC1yZWxYCiAgICAgICAgICB9KTsKCiAgICAgICAgICBkYXRhLmZwYWdlLmNzcyh7CiAgICAgICAgICAgIGxlZnQ6IC1yZWxYICsgd2lkdGgsCiAgICAgICAgICAgIHdpZHRoOiBNYXRoLm1heCgwLCByZWxYLXdpZHRoKQogICAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnbCcgOgoKICAgICAgICAgIGRhdGEud3JhcHBlci5jc3MoewogICAgICAgICAgICB3aWR0aDogd2lkdGgKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5jc3MoewogICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywKICAgICAgICAgICAgbGVmdDogcmVsWAogICAgICAgICAgfSk7CgogICAgICAgICAgZGF0YS5mcGFnZS5jc3MoewogICAgICAgICAgICBsZWZ0OiB3aWR0aCwKICAgICAgICAgICAgd2lkdGg6IE1hdGgubWF4KDAsIHJlbFgtd2lkdGgpCiAgICAgICAgICB9KTsKCiAgICAgICAgICBpZiAoZGF0YS5mb2xkaW5nKQogICAgICAgICAgICBkYXRhLmZvbGRpbmcuY3NzKHsKICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywKICAgICAgICAgICAgICBsZWZ0OiAtd2lkdGgqMiArIHJlbFgKICAgICAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIGRhdGEucGFyZW50LmNzcyh7J292ZXJmbG93JzogJ3Zpc2libGUnfSk7CgogICAgZGF0YS5wb2ludCA9IHBvaW50OwogIAogIH0sCgogIF9tb3ZlRm9sZGluZ1BhZ2U6IGZ1bmN0aW9uKGJvb2wpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CiAgICAgIAogICAgaWYgKGJvb2wpIHsKICAgICAgCiAgICAgIHZhciBmb2xkaW5nID0gZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcyksCiAgICAgICAgdHVybiA9IGRhdGEub3B0cy50dXJuOwogICAgICAKICAgICAgaWYgKGZvbGRpbmcpIHsKCiAgICAgICAgaWYgKGRhdGEuZm9sZGluZykgewogICAgICAgICAgaWYgKGRhdGEuZm9sZGluZz09PWZvbGRpbmcpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCBmYWxzZSk7CiAgICAgICAgfQogICAgICAKICAgICAgICBmbGlwTWV0aG9kcy5zZXREYXRhLmNhbGwodGhpcywKICAgICAgICAgIHtiYWNrUGFyZW50OiBmb2xkaW5nLnBhcmVudCgpLAogICAgICAgICAgZm9sZGluZzogZm9sZGluZ30pOwoKICAgICAgICBkYXRhLmZwYWdlLnByZXBlbmQoZm9sZGluZyk7CgogICAgICB9CgogICAgICB0dXJuLnR1cm4oJ3VwZGF0ZScpOwoKICAgIH0gZWxzZSB7CiAgICAgIGlmIChkYXRhLmJhY2tQYXJlbnQpIHsKICAgICAgICBkYXRhLmJhY2tQYXJlbnQucHJlcGVuZChkYXRhLmZvbGRpbmcpOwogICAgICAgIGRlbGV0ZSBkYXRhLmJhY2tQYXJlbnQ7CiAgICAgICAgZGVsZXRlIGRhdGEuZm9sZGluZzsKICAgICAgfQogICAgfQogIH0sCgogIF9zaG93Rm9sZGVkUGFnZTogZnVuY3Rpb24oYywgYW5pbWF0ZSkgewoKICAgIHZhciBmb2xkaW5nID0gZmxpcE1ldGhvZHMuX2ZvbGRpbmdQYWdlLmNhbGwodGhpcyksCiAgICAgIGRkID0gdGhpcy5kYXRhKCksCiAgICAgIGRhdGEgPSBkZC5mLAogICAgICB2aXNpYmxlID0gZGF0YS52aXNpYmxlOwoKICAgIGlmICghdmlzaWJsZSB8fCAhZGF0YS5wb2ludCB8fCBkYXRhLnBvaW50LmNvcm5lciE9Yy5jb3JuZXIpIHsKICAgICAgCiAgICAgIHZhciBtQWN0aW9uID0gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLm1vdXNlQWN0aW9uOwoKICAgICAgdmFyIGV2ZW50ID0gJC5FdmVudCgnc3RhcnQnKTsKICAgICAgdGhpcy50cmlnZ2VyKGV2ZW50LCBbZGF0YS5vcHRzLCBjLmNvcm5lcl0pOwogICAgICB2aXNpYmxlID0gZmFsc2U7CgogICAgICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpCiAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIH0KCiAgICBpZiAoZm9sZGluZykgewoKICAgICAgaWYgKGFuaW1hdGUpIHsKICAgICAgICAKICAgICAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICAgICAgICBwb2ludCA9IChkYXRhLnBvaW50ICYmIGRhdGEucG9pbnQuY29ybmVyPT1jLmNvcm5lcikgPwogICAgICAgICAgZGF0YS5wb2ludCA6IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgYy5jb3JuZXIsIDEpOwogICAgICAKICAgICAgICB0aGlzLmFuaW1hdGVmKHtmcm9tOiBbcG9pbnQueCwgcG9pbnQueV0sCiAgICAgICAgICB0bzogW2MueCwgYy55XSwKICAgICAgICAgIGR1cmF0aW9uOiA1MDAsCiAgICAgICAgICBmcmFtZTogZnVuY3Rpb24odikgewogICAgICAgICAgICBjLnggPSBNYXRoLnJvdW5kKHZbMF0pOwogICAgICAgICAgICBjLnkgPSBNYXRoLnJvdW5kKHZbMV0pOwogICAgICAgICAgICBmbGlwTWV0aG9kcy5fZm9sZC5jYWxsKHRoYXQsIGMpOwogICAgICAgICAgfX0pOwoKICAgICAgfSBlbHNlICB7CgogICAgICAgIGZsaXBNZXRob2RzLl9mb2xkLmNhbGwodGhpcywgYyk7CiAgICAgICAgaWYgKGRkLmVmZmVjdCAmJiAhZGQuZWZmZWN0LnR1cm5pbmcpCiAgICAgICAgICB0aGlzLmFuaW1hdGVmKGZhbHNlKTsKCiAgICAgIH0KCiAgICAgIGlmICghdmlzaWJsZSkgewoKICAgICAgICBkYXRhLnZpc2libGUgPSB0cnVlOwogICAgICAgIGZsaXBNZXRob2RzLl9tb3ZlRm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgICAgICBkYXRhLmZwYWdlLnNob3coKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIGhpZGU6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZiwKICAgICAgZm9sZGluZyA9IGZsaXBNZXRob2RzLl9mb2xkaW5nUGFnZS5jYWxsKHRoaXMpOwoKICAgIHRoaXMuY3NzKHsKICAgICAgcG9zaXRpb246ICcnLAogICAgICBsZWZ0OiAnYXV0bycKICAgIH0pOwoKICAgIGRhdGEud3JhcHBlci5jc3MoewogICAgICB3aWR0aDogdGhpcy53aWR0aCgpCiAgICB9KTsKCiAgICBkYXRhLmZwYWdlLmNzcyh7CiAgICAgIHdpZHRoOiB0aGlzLndpZHRoKCkKICAgIH0pOwoKICAgIGlmIChkYXRhLmZvbGRpbmcpCiAgICAgIGRhdGEuZm9sZGluZy5jc3MoewogICAgICAgIHBvc2l0aW9uOiAnJywKICAgICAgICBsZWZ0OiAnYXV0bycKICAgICAgfSk7CgogICAgZGF0YS5mcGFnZS5oaWRlKCk7CgogICAgZGF0YS52aXNpYmxlID0gZmFsc2U7CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgaGlkZUZvbGRlZFBhZ2U6IGZ1bmN0aW9uKGFuaW1hdGUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhLnBvaW50KSByZXR1cm47CgogICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICBwMSA9IGRhdGEucG9pbnQsCiAgICAgIGhpZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICBkYXRhLnBvaW50ID0gbnVsbDsKICAgICAgICB0aGF0LmZsaXAoJ2hpZGUnKTsKICAgICAgICB0aGF0LnRyaWdnZXIoJ2VuZCcsIFtkYXRhLm9wdHMsIGZhbHNlXSk7CiAgICAgIH07CgogICAgaWYgKGFuaW1hdGUpIHsKICAgICAgdmFyIHA0ID0gZmxpcE1ldGhvZHMuX2MuY2FsbCh0aGlzLCBwMS5jb3JuZXIpLAogICAgICAgIHRvcCA9IChwMS5jb3JuZXIuc3Vic3RyKDAsMSk9PSd0JyksCiAgICAgICAgZGVsdGEgPSAodG9wKSA/IE1hdGgubWluKDAsIHAxLnktcDQueSkvMiA6IE1hdGgubWF4KDAsIHAxLnktcDQueSkvMiwKICAgICAgICBwMiA9IHBvaW50MkQocDEueCwgcDEueStkZWx0YSksCiAgICAgICAgcDMgPSBwb2ludDJEKHA0LngsIHA0LnktZGVsdGEpOwogICAgCiAgICAgIHRoaXMuYW5pbWF0ZWYoewogICAgICAgIGZyb206IDAsCiAgICAgICAgdG86IDEsCiAgICAgICAgZnJhbWU6IGZ1bmN0aW9uKHYpIHsKICAgICAgICAgIHZhciBucCA9IGJlemllcihwMSwgcDIsIHAzLCBwNCwgdik7CiAgICAgICAgICBwMS54ID0gbnAueDsKICAgICAgICAgIHAxLnkgPSBucC55OwogICAgICAgICAgZmxpcE1ldGhvZHMuX2ZvbGQuY2FsbCh0aGF0LCBwMSk7CiAgICAgICAgfSwKICAgICAgICBjb21wbGV0ZTogaGlkZSwKICAgICAgICBkdXJhdGlvbjogODAwLAogICAgICAgIGhpZGluZzogdHJ1ZQogICAgICAgIH0pOwoKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuYW5pbWF0ZWYoZmFsc2UpOwogICAgICBoaWRlKCk7CiAgICB9CiAgfSwKCiAgdHVyblBhZ2U6IGZ1bmN0aW9uKGNvcm5lcikgewoKICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgY29ybmVyID0ge2Nvcm5lcjogKGRhdGEuY29ybmVyKSA/CiAgICAgIGRhdGEuY29ybmVyLmNvcm5lciA6CiAgICAgIGNvcm5lciB8fCBmbGlwTWV0aG9kcy5fY0FsbG93ZWQuY2FsbCh0aGlzKVswXX07CgogICAgdmFyIHAxID0gZGF0YS5wb2ludCB8fAogICAgICBmbGlwTWV0aG9kcy5fYy5jYWxsKHRoaXMsCiAgICAgICAgY29ybmVyLmNvcm5lciwKICAgICAgICAoZGF0YS5vcHRzLnR1cm4pID8gZGF0YS5vcHRzLnR1cm4uZGF0YSgpLm9wdHMuZWxldmF0aW9uIDogMCksCiAgICAgIHA0ID0gZmxpcE1ldGhvZHMuX2MyLmNhbGwodGhpcywgY29ybmVyLmNvcm5lcik7CgogICAgICB0aGlzLnRyaWdnZXIoJ2ZsaXAnKS4KICAgICAgICBhbmltYXRlZih7CiAgICAgICAgICBmcm9tOiAwLAogICAgICAgICAgdG86IDEsCiAgICAgICAgICBmcmFtZTogZnVuY3Rpb24odikgewogICAgICAgICAgICB2YXIgbnAgPSBiZXppZXIocDEsIHAxLCBwNCwgcDQsIHYpOwogICAgICAgICAgICBjb3JuZXIueCA9IG5wLng7CiAgICAgICAgICAgIGNvcm5lci55ID0gbnAueTsKCiAgICAgICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoYXQsIGNvcm5lcik7CiAgICAgICAgICB9LAogICAgICAgICAgCiAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoYXQudHJpZ2dlcignZW5kJywgW2RhdGEub3B0cywgdHJ1ZV0pOwogICAgICAgICAgfSwKICAgICAgICAgIGR1cmF0aW9uOiBkYXRhLm9wdHMuZHVyYXRpb24sCiAgICAgICAgICB0dXJuaW5nOiB0cnVlCiAgICAgICAgfSk7CgogICAgICBkYXRhLmNvcm5lciA9IG51bGw7CiAgfSwKCiAgbW92aW5nOiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gJ2VmZmVjdCcgaW4gdGhpcy5kYXRhKCk7CiAgCiAgfSwKCiAgaXNUdXJuaW5nOiBmdW5jdGlvbigpIHsKCiAgICByZXR1cm4gdGhpcy5mbGlwKCdtb3ZpbmcnKSAmJiB0aGlzLmRhdGEoKS5lZmZlY3QudHVybmluZzsKICAKICB9LAoKICBfZXZlbnRTdGFydDogZnVuY3Rpb24oZSkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoIWRhdGEuZGlzYWJsZWQgJiYgIXRoaXMuZmxpcCgnaXNUdXJuaW5nJykpIHsKCiAgICAgIGRhdGEuY29ybmVyID0gZmxpcE1ldGhvZHMuX2Nvcm5lckFjdGl2YXRlZC5jYWxsKHRoaXMsIGUpOwogICAgCiAgICAgIGlmIChkYXRhLmNvcm5lciAmJiBmbGlwTWV0aG9kcy5fZm9sZGluZ1BhZ2UuY2FsbCh0aGlzLCBkYXRhLmNvcm5lcikpIHsKICAgICAgCiAgICAgICAgaWYgKGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIGRhdGEuY29ybmVyKSkKICAgICAgICAgIHRoaXMudHJpZ2dlcigncHJlc3NlZCcsIFtkYXRhLnBvaW50XSk7CgogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgIH0gZWxzZQogICAgICAgIGRhdGEuY29ybmVyID0gbnVsbDsKCiAgICB9CgogIH0sCgogIF9ldmVudE1vdmU6IGZ1bmN0aW9uKGUpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLmY7CgogICAgaWYgKCFkYXRhLmRpc2FibGVkKSB7CgogICAgICBlID0gKGlzVG91Y2gpID8gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgOiBbZV07CiAgICAKICAgICAgaWYgKGRhdGEuY29ybmVyKSB7CgogICAgICAgIHZhciBwb3MgPSBkYXRhLnBhcmVudC5vZmZzZXQoKTsKICAgICAgICBkYXRhLmNvcm5lci54ID0gZVswXS5wYWdlWC1wb3MubGVmdDsKICAgICAgICBkYXRhLmNvcm5lci55ID0gZVswXS5wYWdlWS1wb3MudG9wOwogICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIGRhdGEuY29ybmVyKTsKCiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGF0YSgpLmVmZmVjdCAmJiB0aGlzLmlzKCc6dmlzaWJsZScpKSB7CiAgICAKCiAgICAgICAgdmFyIGNvcm5lciA9IGZsaXBNZXRob2RzLl9jb3JuZXJBY3RpdmF0ZWQuY2FsbCh0aGlzLCBlWzBdKTsKCiAgICAgICAgaWYgKGNvcm5lcikgewogICAgICAgICAgdmFyIG9yaWdpbiA9IGZsaXBNZXRob2RzLl9jLmNhbGwodGhpcywgY29ybmVyLmNvcm5lciwgZGF0YS5vcHRzLmNvcm5lclNpemUvMik7CiAgICAgICAgICBjb3JuZXIueCA9IG9yaWdpbi54OwogICAgICAgICAgY29ybmVyLnkgPSBvcmlnaW4ueTsKICAgICAgICAgIGZsaXBNZXRob2RzLl9zaG93Rm9sZGVkUGFnZS5jYWxsKHRoaXMsIGNvcm5lciwgdHJ1ZSk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICBmbGlwTWV0aG9kcy5oaWRlRm9sZGVkUGFnZS5jYWxsKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAKCiAgICAgIH0KICAgIH0KICB9LAoKICBfZXZlbnRFbmQ6IGZ1bmN0aW9uKCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuZjsKCiAgICBpZiAoIWRhdGEuZGlzYWJsZWQgJiYgZGF0YS5wb2ludCkgewogICAgICB2YXIgZXZlbnQgPSAkLkV2ZW50KCdyZWxlYXNlZCcpOwogICAgICB0aGlzLnRyaWdnZXIoZXZlbnQsIFtkYXRhLnBvaW50XSk7CiAgICAgIGlmICghZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpCiAgICAgICAgZmxpcE1ldGhvZHMuaGlkZUZvbGRlZFBhZ2UuY2FsbCh0aGlzLCB0cnVlKTsKICAgIH0KCiAgICBkYXRhLmNvcm5lciA9IG51bGw7CgogIH0sCgogIGRpc2FibGU6IGZ1bmN0aW9uKGRpc2FibGUpIHsKCiAgICBmbGlwTWV0aG9kcy5zZXREYXRhLmNhbGwodGhpcywgeydkaXNhYmxlZCc6IGRpc2FibGV9KTsKICAgIHJldHVybiB0aGlzOwoKICB9Cn07CgoKCi8vIFByb2Nlc3NlcyBjbGFzc2VzCgpmdW5jdGlvbiBkZWNvcmF0b3IodGhhdCwgbWV0aG9kcywgYXJncykgewoKICBpZiAoIWFyZ3NbMF0gfHwgdHlwZW9mKGFyZ3NbMF0pPT0nb2JqZWN0JykKICAgIHJldHVybiBtZXRob2RzLmluaXQuYXBwbHkodGhhdCwgYXJncyk7CgogIGVsc2UgaWYgKG1ldGhvZHNbYXJnc1swXV0pCiAgICByZXR1cm4gbWV0aG9kc1thcmdzWzBdXS5hcHBseSh0aGF0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7CgogIGVsc2UKICAgIHRocm93IHR1cm5FcnJvcihhcmdzWzBdICsgJyBpcyBhbiBpbnZhbGlkIHZhbHVlJyk7Cn0KCgovLyBBdHRyaWJ1dGVzIGZvciBhIGxheWVyCgpmdW5jdGlvbiBkaXZBdHQodG9wLCBsZWZ0LCB6SW5kZXgsIG92ZXJmKSB7CiAgICAKICByZXR1cm4geydjc3MnOiB7CiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsCiAgICAgICAgdG9wOiB0b3AsCiAgICAgICAgbGVmdDogbGVmdCwKICAgICAgICAnb3ZlcmZsb3cnOiBvdmVyZiB8fCAnaGlkZGVuJywKICAgICAgICAnei1pbmRleCc6IHpJbmRleCB8fCAnYXV0bycKICAgICAgICB9CiAgICB9OwogICAgICAKfQoKLy8gR2V0cyBhIDJEIHBvaW50IGZyb20gYSBiZXppZXIgY3VydmUgb2YgZm91ciBwb2ludHMKCmZ1bmN0aW9uIGJlemllcihwMSwgcDIsIHAzLCBwNCwgdCkgewoKICB2YXIgYSA9IDEgLSB0LAogICAgYiA9IGEgKiBhICogYSwKICAgIGMgPSB0ICogdCAqIHQ7CiAgICAKICByZXR1cm4gcG9pbnQyRChNYXRoLnJvdW5kKGIqcDEueCArIDMqdCphKmEqcDIueCArIDMqdCp0KmEqcDMueCArIGMqcDQueCksCiAgICBNYXRoLnJvdW5kKGIqcDEueSArIDMqdCphKmEqcDIueSArIDMqdCp0KmEqcDMueSArIGMqcDQueSkpOwoKfQoKLy8gR2V0cyBhIDJEIHBvaW50CgpmdW5jdGlvbiBwb2ludDJEKHgsIHkpIHsKICAKICByZXR1cm4ge3g6IHgsIHk6IHl9OwoKfQoKLy8gQ2hlY2tzIGlmIGEgcHJvcGVydHkgYmVsb25ncyB0byBhbiBvYmplY3QKCmZ1bmN0aW9uIGhhcyhwcm9wZXJ0eSwgb2JqZWN0KSB7CiAgCiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsKCn0KCi8vIEdldHMgdGhlIENTUzMgdmVuZG9yIHByZWZpeAoKZnVuY3Rpb24gZ2V0UHJlZml4KCkgewoKICB2YXIgdmVuZG9yUHJlZml4ZXMgPSBbJ01veicsJ1dlYmtpdCcsJ0todG1sJywnTycsJ21zJ10sCiAgbGVuID0gdmVuZG9yUHJlZml4ZXMubGVuZ3RoLAogIHZlbmRvciA9ICcnOwoKICB3aGlsZSAobGVuLS0pCiAgICBpZiAoKHZlbmRvclByZWZpeGVzW2xlbl0gKyAnVHJhbnNmb3JtJykgaW4gZG9jdW1lbnQuYm9keS5zdHlsZSkKICAgICAgdmVuZG9yPSctJyt2ZW5kb3JQcmVmaXhlc1tsZW5dLnRvTG93ZXJDYXNlKCkrJy0nOwoKICByZXR1cm4gdmVuZG9yOwoKfQoKLy8gSlMgRXJyb3JzCgpmdW5jdGlvbiB0dXJuRXJyb3IobWVzc2FnZSkgewoKICBmdW5jdGlvbiBUdXJuSnNFcnJvcihtZXNzYWdlKSB7CiAgICB0aGlzLm5hbWUgPSAiVHVybkpzRXJyb3IiOwogICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKICB9CgogIFR1cm5Kc0Vycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpOwogIFR1cm5Kc0Vycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR1cm5Kc0Vycm9yOwoKICByZXR1cm4gbmV3IFR1cm5Kc0Vycm9yKG1lc3NhZ2UpOwp9CgovLyBGaW5kIHRoZSBvZmZzZXQgb2YgYW4gZWxlbWVudCBkaXNjYXJkaW5nIGl0cyB0cmFuc2Zvcm1hdGlvbgoKZnVuY3Rpb24gZmluZFBvcyhvYmopIHsKICB2YXIgb2Zmc2V0ID0ge3RvcDogMCwgbGVmdDogMH07CgogIGRvewogICAgb2Zmc2V0LmxlZnQgKz0gb2JqLm9mZnNldExlZnQ7CiAgICBvZmZzZXQudG9wICs9IG9iai5vZmZzZXRUb3A7CiAgfSB3aGlsZSAoKG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpKTsKCiAgcmV0dXJuIG9mZnNldDsKfQoKCi8vIFJlcXVlc3QgYW4gYW5pbWF0aW9uCgp3aW5kb3cucmVxdWVzdEFuaW0gPSBmdW5jdGlvbihjYWxsYmFjaykgewogIHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAxMDAwIC8gNjApOwp9CgoKZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHsKICByZXR1cm4gJyc7Cn0KCgovLyBFeHRlbmQgJC5mbgoKJC5leHRlbmQoJC5mbiwgewoKICBmbGlwOiBmdW5jdGlvbihyZXEsIG9wdHMpIHsKICAgIHJldHVybiBkZWNvcmF0b3IodGhpcywgZmxpcE1ldGhvZHMsIGFyZ3VtZW50cyk7CiAgfSwKCiAgdHVybjogZnVuY3Rpb24ocmVxKSB7CiAgICByZXR1cm4gZGVjb3JhdG9yKHRoaXMsIHR1cm5NZXRob2RzLCBhcmd1bWVudHMpOwogIH0sCgogIHRyYW5zZm9ybTogZnVuY3Rpb24odHJhbnNmb3JtLCBvcmlnaW4pIHsKCiAgICB2YXIgcHJvcGVydGllcyA9IHt9OwogICAgCiAgICBpZiAob3JpZ2luKQogICAgICBwcm9wZXJ0aWVzW3ZlbmRvcisndHJhbnNmb3JtLW9yaWdpbiddID0gb3JpZ2luOwogICAgCiAgICBwcm9wZXJ0aWVzW3ZlbmRvcisndHJhbnNmb3JtJ10gPSB0cmFuc2Zvcm07CiAgCiAgICByZXR1cm4gdGhpcy5jc3MocHJvcGVydGllcyk7CgogIH0sCgogIGFuaW1hdGVmOiBmdW5jdGlvbihwb2ludCkgewoKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCk7CgogICAgaWYgKGRhdGEuZWZmZWN0KQogICAgICBkYXRhLmVmZmVjdC5zdG9wKCk7CgogICAgaWYgKHBvaW50KSB7CgogICAgICBpZiAoIXBvaW50LnRvLmxlbmd0aCkgcG9pbnQudG8gPSBbcG9pbnQudG9dOwogICAgICBpZiAoIXBvaW50LmZyb20ubGVuZ3RoKSBwb2ludC5mcm9tID0gW3BvaW50LmZyb21dOwoKICAgICAgdmFyIGRpZmYgPSBbXSwKICAgICAgICBsZW4gPSBwb2ludC50by5sZW5ndGgsCiAgICAgICAgYW5pbWF0aW5nID0gdHJ1ZSwKICAgICAgICB0aGF0ID0gdGhpcywKICAgICAgICB0aW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwKICAgICAgICBmcmFtZSA9IGZ1bmN0aW9uKCkgewoKICAgICAgICAgIGlmICghZGF0YS5lZmZlY3QgfHwgIWFuaW1hdGluZykKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgIHZhciB2ID0gW10sCiAgICAgICAgICAgIHRpbWVEaWZmID0gTWF0aC5taW4ocG9pbnQuZHVyYXRpb24sIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSB0aW1lKTsKCiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQogICAgICAgICAgICB2LnB1c2goZGF0YS5lZmZlY3QuZWFzaW5nKDEsIHRpbWVEaWZmLCBwb2ludC5mcm9tW2ldLCBkaWZmW2ldLCBwb2ludC5kdXJhdGlvbikpOwoKICAgICAgICAgIHBvaW50LmZyYW1lKChsZW49PTEpID8gdlswXSA6IHYpOwoKICAgICAgICAgIGlmICh0aW1lRGlmZj09cG9pbnQuZHVyYXRpb24pIHsKICAgICAgICAgICAgZGVsZXRlIGRhdGFbJ2VmZmVjdCddOwogICAgICAgICAgICB0aGF0LmRhdGEoZGF0YSk7CiAgICAgICAgICAgIGlmIChwb2ludC5jb21wbGV0ZSkKICAgICAgICAgICAgICBwb2ludC5jb21wbGV0ZSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltKGZyYW1lKTsKICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICAgICBkaWZmLnB1c2gocG9pbnQudG9baV0gLSBwb2ludC5mcm9tW2ldKTsKCiAgICAgIGRhdGEuZWZmZWN0ID0gJC5leHRlbmQoewogICAgICAgIHN0b3A6IGZ1bmN0aW9uKCkgewogICAgICAgICAgYW5pbWF0aW5nID0gZmFsc2U7CiAgICAgICAgfSwKICAgICAgICBlYXNpbmc6IGZ1bmN0aW9uICh4LCB0LCBiLCBjLCBkYXRhKSB7CiAgICAgICAgICByZXR1cm4gYyAqIE1hdGguc3FydCgxIC0gKHQ9dC9kYXRhLTEpKnQpICsgYjsKICAgICAgICB9CiAgICAgIH0sIHBvaW50KTsKCiAgICAgIHRoaXMuZGF0YShkYXRhKTsKCiAgICAgIGZyYW1lKCk7CgogICAgfSBlbHNlIHsKICAgICAgCiAgICAgIGRlbGV0ZSBkYXRhWydlZmZlY3QnXTsKCiAgICB9CiAgfQp9KTsKCi8vIEV4cG9ydCBzb21lIGdsb2JhbHMKCiQuaXNUb3VjaCA9IGlzVG91Y2g7CiQubW91c2VFdmVudHMgPSBtb3VzZUV2ZW50czsKJC5jc3NQcmVmaXggPSBlbXB0eUZ1bmN0aW9uOwokLmNzc1RyYW5zaXRpb25FbmQgPSBlbXB0eUZ1bmN0aW9uOwokLmZpbmRQb3MgPSBmaW5kUG9zOwoKfSkoalF1ZXJ5KTs='></script>
	<script id="fb_lib_zoom_js" src='data:/text/plain;base64,LyoqCiAqIHpvb20uanMKICogd3d3LnR1cm5qcy5jb20KICogdHVybmpzLmNvbS9saWNlbnNlLnR4dAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMTIgRW1tYW51ZWwgR2FyY2lhCiAqKi8KCihmdW5jdGlvbigkKSB7CgondXNlIHN0cmljdCc7Cgp2YXIgaGFzM2QsCgp6b29tT3B0aW9ucyA9IHsKICBtYXg6IDIsCiAgZmxpcGJvb2s6IG51bGwsCiAgZWFzZUZ1bmN0aW9uOiAnZWFzZS1pbi1vdXQnLAogIGR1cmF0aW9uOiA1MDAsCiAgd2hlbjoge30KfSwKCnpvb21NZXRob2RzID0gewogIGluaXQ6IGZ1bmN0aW9uKG9wdHMpIHsKCiAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICBkYXRhID0gdGhpcy5kYXRhKCksCiAgICBvcHRpb25zID0gJC5leHRlbmQoe30sIHpvb21PcHRpb25zLCBvcHRzKTsKCiAgICBpZiAoIW9wdGlvbnMuZmxpcGJvb2sgfHwgIW9wdGlvbnMuZmxpcGJvb2sudHVybignaXMnKSkgewogICAgICB0aHJvdyBlcnJvcignb3B0aW9ucy5mbGlwYm9vayBpcyByZXF1aXJlZCcpOwogICAgfQoKICAgIGhhczNkID0gJ1dlYktpdENTU01hdHJpeCcgaW4gd2luZG93IHx8ICdNb3pQZXJzcGVjdGl2ZScgaW4gZG9jdW1lbnQuYm9keS5zdHlsZTsKCiAgICBpZiAodHlwZW9mKG9wdGlvbnMubWF4KSE9J2Z1bmN0aW9uJykgewogICAgICB2YXIgbWF4ID0gb3B0aW9ucy5tYXg7CiAgICAgIG9wdGlvbnMubWF4ID0gZnVuY3Rpb24oKSB7IHJldHVybiBtYXg7IH07CiAgICB9CgogICAgZGF0YS56b29tID0gewogICAgICBvcHRzOiBvcHRpb25zLAogICAgICBheGlzOiBwb2ludDJEKDAsIDApLAogICAgICBzY3JvbGxQb3M6IHBvaW50MkQoMCwgMCksCiAgICAgIGV2ZW50UXVldWU6IFtdLAogICAgICBtb3VzZXVwRXZlbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB6b29tTWV0aG9kcy5fZU1vdXNlVXAuYXBwbHkodGhhdCwgYXJndW1lbnRzKTsKICAgICAgfSwKICAgICAgZXZlbnRUb3VjaFN0YXJ0OiBiaW5kKHpvb21NZXRob2RzLl9lVG91Y2hTdGFydCwgdGhhdCksCiAgICAgIGV2ZW50VG91Y2hNb3ZlOiBiaW5kKHpvb21NZXRob2RzLl9lVG91Y2hNb3ZlLCB0aGF0KSwKICAgICAgZXZlbnRUb3VjaEVuZDogYmluZCh6b29tTWV0aG9kcy5fZVRvdWNoRW5kLCB0aGF0KSwKICAgICAgZmxpcGJvb2tFdmVudHM6IHsKICAgICAgICB6b29taW5nOiBiaW5kKHpvb21NZXRob2RzLl9lWm9vbSwgdGhhdCksCiAgICAgICAgcHJlc3NlZDogYmluZCh6b29tTWV0aG9kcy5fZVByZXNzZWQsIHRoYXQpLAogICAgICAgIHJlbGVhc2VkOiBiaW5kKHpvb21NZXRob2RzLl9lUmVsZWFzZWQsIHRoYXQpLAogICAgICAgIHN0YXJ0OiBiaW5kKHpvb21NZXRob2RzLl9lU3RhcnQsIHRoYXQpLAogICAgICAgIHR1cm5pbmc6IGJpbmQoem9vbU1ldGhvZHMuX2VUdXJuaW5nLCB0aGF0KSwKICAgICAgICB0dXJuZWQ6IGJpbmQoem9vbU1ldGhvZHMuX2VUdXJuZWQsIHRoYXQpLAogICAgICAgIGRlc3Ryb3lpbmc6IGJpbmQoem9vbU1ldGhvZHMuX2VEZXN0cm95aW5nLCB0aGF0KQogICAgICB9CiAgICB9OwoKICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBvcHRpb25zLndoZW4pIHsKICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLndoZW4sIGV2ZW50TmFtZSkpIHsKICAgICAgICB0aGlzLmJpbmQoJ3pvb20uJytldmVudE5hbWUsIG9wdGlvbnMud2hlbltldmVudE5hbWVdKTsKICAgICAgfQogICAgfQoKICAgIGZvciAoZXZlbnROYW1lIGluIGRhdGEuem9vbS5mbGlwYm9va0V2ZW50cykgewogICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEuem9vbS5mbGlwYm9va0V2ZW50cywgZXZlbnROYW1lKSkgewogICAgICAgIG9wdGlvbnMuZmxpcGJvb2suYmluZChldmVudE5hbWUsIGRhdGEuem9vbS5mbGlwYm9va0V2ZW50c1tldmVudE5hbWVdKTsKICAgICAgfQogICAgfQoKICAgIHRoaXMuY3NzKHsKICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsCiAgICAgIG92ZXJmbG93IDogJ2hpZGRlbicKICAgIH0pOwoKICAgIGlmICgkLmlzVG91Y2gpIHsKCiAgICAgIG9wdGlvbnMuZmxpcGJvb2suCiAgICAgICAgYmluZCgndG91Y2hzdGFydCcsIGRhdGEuem9vbS5ldmVudFRvdWNoU3RhcnQgKS4KICAgICAgICBiaW5kKCd0b3VjaG1vdmUnLCBkYXRhLnpvb20uZXZlbnRUb3VjaE1vdmUpLgogICAgICAgIGJpbmQoJ3RvdWNoZW5kJywgZGF0YS56b29tLmV2ZW50VG91Y2hFbmQpOwoKICAgICAgdGhpcy5iaW5kKCd0b3VjaHN0YXJ0Jywgem9vbU1ldGhvZHMuX3RhcCk7CgogICAgfSBlbHNlIHsKICAgICAgdGhpcy5tb3VzZWRvd24oem9vbU1ldGhvZHMuX21vdXNlZG93bikuCiAgICAgICAgY2xpY2soem9vbU1ldGhvZHMuX3RhcCk7CiAgICB9CiAgfSwKCiAgX3RhcDogZnVuY3Rpb24oZXZlbnQpIHsKICAgIAogICAgdmFyIHRoYXQgPSAkKHRoaXMpLAogICAgICBkYXRhID0gdGhhdC5kYXRhKCkuem9vbSwKICAgICAgZmxpcCA9IGRhdGEub3B0cy5mbGlwYm9vazsKCiAgICBpZiAoZGF0YS5kcmFnZ2luZ0Nvcm5lciB8fCBkYXRhLmRyYWdnaW5nKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoaXNQYWdlKCQoZXZlbnQudGFyZ2V0KSwgdGhhdCkpIHsKCiAgICAgIHpvb21NZXRob2RzLl9hZGRFdmVudC5jYWxsKHRoYXQsICd0YXAnLCBldmVudCk7CiAgICAgIAogICAgICB2YXIgc2VjdWVuY2UgPSB6b29tTWV0aG9kcy5fZXZlbnRTZXEuY2FsbCh0aGF0KTsKCiAgICAgIGlmIChzZWN1ZW5jZSkKICAgICAgICB0aGF0LnRyaWdnZXIoc2VjdWVuY2UpOwoKICAgIH0KCiAgfSwKCiAgX2FkZEV2ZW50OiBmdW5jdGlvbihldmVudE5hbWUsIGV2ZW50KSB7CiAgICAKICAgIHZhciBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksCiAgICAgIGV2ZW50T2JqZWN0ID0ge25hbWU6IGV2ZW50TmFtZSwgdGltZXN0YW1wOiB0aW1lLCBldmVudDogZXZlbnR9OwoKICAgIGRhdGEuZXZlbnRRdWV1ZS5wdXNoKGV2ZW50T2JqZWN0KTsKCiAgICBpZiAoZGF0YS5ldmVudFF1ZXVlLmxlbmd0aD4xMCkKICAgICAgZGF0YS5ldmVudFF1ZXVlLnNwbGljZSgwLCAxKTsKCiAgfSwKCiAgX2V2ZW50U2VxOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGxpc3QgPSBkYXRhLmV2ZW50UXVldWUsCiAgICAgIGxhc3RFdmVudCA9IGxpc3QubGVuZ3RoLTE7CgogICAgaWYgKGxhc3RFdmVudD4wICYmCiAgICAgIGxpc3RbbGFzdEV2ZW50XS5uYW1lPT0ndGFwJyAmJgogICAgICBsaXN0W2xhc3RFdmVudC0xXS5uYW1lPT0ndGFwJyAmJgogICAgICBsaXN0W2xhc3RFdmVudF0uZXZlbnQucGFnZVggPT0gbGlzdFtsYXN0RXZlbnQtMV0uZXZlbnQucGFnZVggJiYKICAgICAgbGlzdFtsYXN0RXZlbnRdLmV2ZW50LnBhZ2VZID09IGxpc3RbbGFzdEV2ZW50LTFdLmV2ZW50LnBhZ2VZICYmCiAgICAgIGxpc3RbbGFzdEV2ZW50XS50aW1lc3RhbXAtbGlzdFtsYXN0RXZlbnQtMV0udGltZXN0YW1wIDwgMjAwICYmCiAgICAgIGxpc3RbbGFzdEV2ZW50XS50aW1lc3RhbXAtbGlzdFtsYXN0RXZlbnQtMV0udGltZXN0YW1wID4gNTApCiAgICB7CiAgCiAgICAgIHJldHVybiAkLmV4dGVuZChsaXN0W2xhc3RFdmVudF0uZXZlbnQsIHt0eXBlOiAnem9vbS5kb3VibGVUYXAnfSk7CgogICAgfSBlbHNlIGlmIChsaXN0W2xhc3RFdmVudF0ubmFtZT09J3RhcCcpIHsKICAgICAgCiAgICAgIHJldHVybiAkLmV4dGVuZChsaXN0W2xhc3RFdmVudF0uZXZlbnQsIHt0eXBlOiAnem9vbS50YXAnfSk7CgogICAgfQogICAgICAKICB9LAoKICBfcHJlcGFyZVpvb206IGZ1bmN0aW9uICgpIHsKICAgIAogICAgdmFyIGZsaXBQb3MsIG9mZnNldExlZnQgPSAwLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgaW52eiA9IDEvdGhpcy56b29tKCd2YWx1ZScpLAogICAgICBmbGlwID0gZGF0YS5vcHRzLmZsaXBib29rLAogICAgICBkaXIgPSBmbGlwLnR1cm4oJ2RpcmVjdGlvbicpLAogICAgICBmbGlwRGF0YSA9IGZsaXAuZGF0YSgpLAogICAgICBmbGlwT2Zmc2V0ID0gZmxpcC5vZmZzZXQoKSwKICAgICAgdGhpc09mZnNldCA9IHRoaXMub2Zmc2V0KCksCiAgICAgIGZsaXBTaXplID0ge2hlaWdodDogZmxpcC5oZWlnaHQoKX0sCiAgICAgIHZpZXcgPSBmbGlwLnR1cm4oJ3ZpZXcnKTsKCiAgICAgIGlmIChmbGlwLnR1cm4oJ2Rpc3BsYXknKT09J2RvdWJsZScgJiYgZmxpcC5kYXRhKCkub3B0cy5hdXRvQ2VudGVyKSB7CiAgICAgICAgaWYgKCF2aWV3WzBdKSB7CiAgICAgICAgICBmbGlwU2l6ZS53aWR0aCA9IGZsaXAud2lkdGgoKS8yOwogICAgICAgICAgb2Zmc2V0TGVmdCA9IChkaXI9PSdsdHInKSA/IGZsaXBTaXplLndpZHRoIDogMDsKICAgICAgICAgIGZsaXBQb3MgPSBwb2ludDJEKAogICAgICAgICAgICAoZGlyPT0nbHRyJykgPyBmbGlwT2Zmc2V0LmxlZnQtdGhpc09mZnNldC5sZWZ0K2ZsaXBTaXplLndpZHRoIDogZmxpcE9mZnNldC5sZWZ0LXRoaXNPZmZzZXQubGVmdCwKICAgICAgICAgICAgZmxpcE9mZnNldC50b3AtdGhpc09mZnNldC50b3AKICAgICAgICAgICk7CgogICAgICAgIH0gZWxzZSBpZiAoIXZpZXdbMV0pIHsKICAgICAgICAgIGZsaXBTaXplLndpZHRoID0gZmxpcC53aWR0aCgpLzI7CiAgICAgICAgICBvZmZzZXRMZWZ0ID0gKGRpcj09J2x0cicpID8gMCA6IGZsaXBTaXplLndpZHRoOwogICAgICAgICAgZmxpcFBvcyA9IHBvaW50MkQoCiAgICAgICAgICAgIChkaXI9PSdsdHInKSA/IGZsaXBPZmZzZXQubGVmdC10aGlzT2Zmc2V0LmxlZnQgOiBmbGlwT2Zmc2V0LmxlZnQtdGhpc09mZnNldC5sZWZ0K2ZsaXBTaXplLndpZHRoLAogICAgICAgICAgICBmbGlwT2Zmc2V0LnRvcC10aGlzT2Zmc2V0LnRvcAogICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZmxpcFNpemUud2lkdGggPSBmbGlwLndpZHRoKCk7CiAgICAgICAgICBmbGlwUG9zID0gcG9pbnQyRCgKICAgICAgICAgICAgZmxpcE9mZnNldC5sZWZ0LXRoaXNPZmZzZXQubGVmdCwKICAgICAgICAgICAgZmxpcE9mZnNldC50b3AtdGhpc09mZnNldC50b3AKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZsaXBTaXplLndpZHRoID0gZmxpcC53aWR0aCgpOwogICAgICAgIGZsaXBQb3MgPSBwb2ludDJEKAogICAgICAgICAgZmxpcE9mZnNldC5sZWZ0LXRoaXNPZmZzZXQubGVmdCwKICAgICAgICAgIGZsaXBPZmZzZXQudG9wLXRoaXNPZmZzZXQudG9wCiAgICAgICAgKTsKICAgICAgfQoKICAgIGlmICghZGF0YS56b29tZXIpIHsKICAgICAgZGF0YS56b29tZXIgPSAkKCc8ZGl2IC8+JywKICAgICAgICB7J2NsYXNzJzogJ3pvb21lcicsCiAgICAgICAgICBjc3M6IHsKICAgICAgICAgICAgb3ZlcmZsb3c6J2hpZGRlbicsCiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICB6SW5kZXg6ICcxMDAwMDAwJwogICAgICAgICAgfQogICAgICAgIH0pLgogICAgICBtb3VzZWRvd24oZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9KS5hcHBlbmRUbyh0aGlzKTsKICAgIH0KCgogICAgZGF0YS56b29tZXIuY3NzKHsKICAgICAgdG9wOiBmbGlwUG9zLnksCiAgICAgIGxlZnQ6IGZsaXBQb3MueCwKICAgICAgd2lkdGg6IGZsaXBTaXplLndpZHRoLAogICAgICBoZWlnaHQ6IGZsaXBTaXplLmhlaWdodAogICAgfSk7CiAgICAKICAgIHZhciB6b29tZXJWaWV3ID0gdmlldy5qb2luKCcsJyk7CgogICAgaWYgKHpvb21lclZpZXchPWRhdGEuem9vbWVyVmlldykgewoKICAgICAgZGF0YS56b29tZXJWaWV3ID0gem9vbWVyVmlldzsKICAgICAgZGF0YS56b29tZXIuZmluZCgnKicpLnJlbW92ZSgpOwoKICAgICAgZm9yICh2YXIgcCA9IDA7IHA8dmlldy5sZW5ndGg7IHArKykgewoKICAgICAgICBpZiAoIXZpZXdbcF0pCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgdmFyIHBvcyA9IGZsaXBEYXRhLnBhZ2VPYmpzW3ZpZXdbcF1dLm9mZnNldCgpLAogICAgICAgICAgcGFnZUVsZW1lbnQgPSAkKGZsaXBEYXRhLnBhZ2VPYmpzW3ZpZXdbcF1dKTsKICAgICAgICAgIAogICAgICAgIHBhZ2VFbGVtZW50LgogICAgICAgICAgY2xvbmUoKS4KICAgICAgICAgIHRyYW5zZm9ybSgnJykuCiAgICAgICAgICBjc3MoewogICAgICAgICAgICB3aWR0aDogcGFnZUVsZW1lbnQud2lkdGgoKSppbnZ6LAogICAgICAgICAgICBoZWlnaHQ6IHBhZ2VFbGVtZW50LmhlaWdodCgpKmludnosCiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICBkaXNwbGF5OiAnJywKICAgICAgICAgICAgdG9wOiAocG9zLnRvcCAtIGZsaXBPZmZzZXQudG9wKSppbnZ6LAogICAgICAgICAgICBsZWZ0OiAocG9zLmxlZnQgLSBmbGlwT2Zmc2V0LmxlZnQgLSBvZmZzZXRMZWZ0KSppbnZ6CiAgICAgICAgICB9KS4KICAgICAgICAgIGFwcGVuZFRvKGRhdGEuem9vbWVyKTsKICAgICAgfQogICAgfQogICAgCiAgICAKICAgIHJldHVybiB7cG9zOiBmbGlwUG9zLCBzaXplOiBmbGlwU2l6ZX07CgogIH0sCgogIHZhbHVlOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb207CgogICAgcmV0dXJuIGRhdGEub3B0cy5mbGlwYm9vay50dXJuKCd6b29tJyk7CiAgfSwKCiAgem9vbUluOiBmdW5jdGlvbihldmVudCkgewoKICAgIHZhciBwb3MsCiAgICAgIHRoYXQgPSB0aGlzLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgZmxpcCA9IGRhdGEub3B0cy5mbGlwYm9vaywKICAgICAgem9vbSA9IGRhdGEub3B0cy5tYXgoKSwKICAgICAgZmxpcE9mZnNldCA9IGZsaXAub2Zmc2V0KCksCiAgICAgIHRoaXNPZmZzZXQgPSB0aGlzLm9mZnNldCgpOwoKICAgIGlmIChkYXRhLnpvb21JbikKICAgICAgcmV0dXJuIHRoaXM7CgogICAgZmxpcC50dXJuKCdzdG9wJyk7CiAgICAKICAgIHZhciBldiA9ICQuRXZlbnQoJ3pvb20uY2hhbmdlJyk7CiAgICB0aGlzLnRyaWdnZXIoZXYsIFt6b29tXSk7CgogICAgaWYgKGV2LmlzRGVmYXVsdFByZXZlbnRlZCgpKQogICAgICByZXR1cm4gdGhpczsKCiAgICB2YXIgYm91bmQgPSB6b29tTWV0aG9kcy5fcHJlcGFyZVpvb20uY2FsbCh0aGlzKSwKICAgICAgZmxpcFBvcyA9IGJvdW5kLnBvcywKICAgICAgY2VudGVyID0gcG9pbnQyRChib3VuZC5zaXplLndpZHRoLzIsIGJvdW5kLnNpemUuaGVpZ2h0LzIpLAogICAgICBwcmVmaXggPSAkLmNzc1ByZWZpeCgpLAogICAgICB0cmFuc2l0aW9uRW5kID0gJC5jc3NUcmFuc2l0aW9uRW5kKCksCiAgICAgIGF1dG9DZW50ZXIgPSBmbGlwLmRhdGEoKS5vcHRzLmF1dG9DZW50ZXI7CgogICAgZGF0YS5zY2FsZSA9IHpvb207CiAgICBmbGlwLmRhdGEoKS5ub0NlbnRlciA9IHRydWU7CgogICAgaWYgKHR5cGVvZihldmVudCkhPSd1bmRlZmluZWQnKSB7CgogICAgICBpZiAoJ3gnIGluIGV2ZW50ICYmICd5JyBpbiBldmVudCkgewogICAgICAgIAogICAgICAgIHBvcyA9IHBvaW50MkQoZXZlbnQueC1mbGlwUG9zLngsIGV2ZW50LnktZmxpcFBvcy55KTsKICAgICAgCiAgICAgIH0gZWxzZSB7CgogICAgICAgIHBvcyA9ICgkLmlzVG91Y2gpID8KICAgICAgICAgIHBvaW50MkQoCiAgICAgICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWC1mbGlwUG9zLngtdGhpc09mZnNldC5sZWZ0LAogICAgICAgICAgICBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVktZmxpcFBvcy55LXRoaXNPZmZzZXQudG9wCiAgICAgICAgICApCiAgICAgICAgICA6CiAgICAgICAgICBwb2ludDJEKAogICAgICAgICAgICBldmVudC5wYWdlWC1mbGlwUG9zLngtdGhpc09mZnNldC5sZWZ0LAogICAgICAgICAgICBldmVudC5wYWdlWS1mbGlwUG9zLnktdGhpc09mZnNldC50b3AKICAgICAgICAgICk7CgogICAgICB9CgogICAgfSBlbHNlIHsKICAgICAgcG9zID0gcG9pbnQyRChjZW50ZXIueCwgY2VudGVyLnkpOwogICAgfQoKCgogICAgaWYgKHBvcy54PDAgfHwgcG9zLnk8MCB8fCBwb3MueD5ib3VuZC53aWR0aCB8fCBwb3MueT5ib3VuZC5oZWlnaHQpIHsKICAgICAgcG9zLnggPSBjZW50ZXIueDsKICAgICAgcG9zLnkgPSBjZW50ZXIueTsKICAgIH0KCgogICAgdmFyIGNvbXBvc2UgPSBwb2ludDJEKAogICAgICAgIChwb3MueC1jZW50ZXIueCkqem9vbSArIGNlbnRlci54LAogICAgICAgIChwb3MueS1jZW50ZXIueSkqem9vbSArIGNlbnRlci55CiAgICAgICksCiAgICAgIG1vdmUgPSBwb2ludDJEKAogICAgICAgIChib3VuZC5zaXplLndpZHRoKnpvb20+dGhpcy53aWR0aCgpKSA/IHBvcy54LWNvbXBvc2UueCA6IDAsCiAgICAgICAgKGJvdW5kLnNpemUuaGVpZ2h0Knpvb20+dGhpcy5oZWlnaHQoKSkgPyBwb3MueS1jb21wb3NlLnkgOiAwCiAgICAgICksCiAgICAgIG1heE1vdmUgPSBwb2ludDJEKAogICAgICAgIE1hdGguYWJzKGJvdW5kLnNpemUud2lkdGgqem9vbS10aGlzLndpZHRoKCkpLAogICAgICAgIE1hdGguYWJzKGJvdW5kLnNpemUuaGVpZ2h0Knpvb20tdGhpcy5oZWlnaHQoKSkKICAgICAgKSwKICAgICAgbWluTW92ZSA9IHBvaW50MkQoCiAgICAgICAgTWF0aC5taW4oMCwgYm91bmQuc2l6ZS53aWR0aCp6b29tLXRoaXMud2lkdGgoKSksCiAgICAgICAgTWF0aC5taW4oMCwgYm91bmQuc2l6ZS5oZWlnaHQqem9vbS10aGlzLmhlaWdodCgpKQogICAgICApLAogICAgICByZWFsUG9zID0gcG9pbnQyRCgKICAgICAgICBjZW50ZXIueCp6b29tIC0gY2VudGVyLnggLSBmbGlwUG9zLnggLSBtb3ZlLngsCiAgICAgICAgY2VudGVyLnkqem9vbSAtIGNlbnRlci55IC0gZmxpcFBvcy55IC0gbW92ZS55CiAgICAgICk7CgogICAgaWYgKHJlYWxQb3MueT5tYXhNb3ZlLnkpCiAgICAgIG1vdmUueSA9IHJlYWxQb3MueSAtIG1heE1vdmUueSArICBtb3ZlLnk7CiAgICBlbHNlIGlmIChyZWFsUG9zLnk8bWluTW92ZS55KQogICAgICBtb3ZlLnkgPSByZWFsUG9zLnkgLSBtaW5Nb3ZlLnkgKyAgbW92ZS55OwoKICAgIGlmIChyZWFsUG9zLng+bWF4TW92ZS54KQogICAgICBtb3ZlLnggPSByZWFsUG9zLnggLSBtYXhNb3ZlLnggKyAgbW92ZS54OwogICAgZWxzZSBpZiAocmVhbFBvcy54PG1pbk1vdmUueCkKICAgICAgbW92ZS54ID0gcmVhbFBvcy54IC0gbWluTW92ZS54ICsgIG1vdmUueDsKCiAgICByZWFsUG9zID0gcG9pbnQyRCgKICAgICAgY2VudGVyLngqem9vbSAtIGNlbnRlci54IC0gZmxpcFBvcy54IC0gbW92ZS54LAogICAgICBjZW50ZXIueSp6b29tIC0gY2VudGVyLnkgLSBmbGlwUG9zLnkgLSBtb3ZlLnkKICAgICk7CgogICAgdmFyIGNzcyA9IHt9OwoKICAgIGNzc1twcmVmaXgrJ3RyYW5zaXRpb24nXSA9IHByZWZpeCArCiAgICAgICd0cmFuc2Zvcm0gJyArCiAgICAgIGRhdGEub3B0cy5lYXNlRnVuY3Rpb24gKwogICAgICAnICcgKwogICAgICBkYXRhLm9wdHMuZHVyYXRpb24gKwogICAgICAnbXMnOwoKICAgIHZhciB0cmFuc2l0aW9uRW5kQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKCiAgICAgIHRoYXQudHJpZ2dlcignem9vbS56b29tSW4nKTsKCiAgICAgIGRhdGEuem9vbUluID0gdHJ1ZTsKCiAgICAgIGRhdGEuZmxpcFBvc2l0aW9uID0gcG9pbnQyRChmbGlwLmNzcygnbGVmdCcpLCBmbGlwLmNzcygndG9wJykpOwoKICAgICAgZmxpcC50dXJuKCd6b29tJywgem9vbSkuY3NzKHsKICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKICAgICAgICBtYXJnaW46ICcnLAogICAgICAgIHRvcDowLAogICAgICAgIGxlZnQ6MAogICAgICB9KTsKCiAgICAgIHZhciBmbGlwT2Zmc2V0ID0gZmxpcC5vZmZzZXQoKTsKICAgICAgCiAgICAgIGRhdGEuYXhpcyA9IHBvaW50MkQoCiAgICAgICAgZmxpcE9mZnNldC5sZWZ0IC0gdGhpc09mZnNldC5sZWZ0LAogICAgICAgIGZsaXBPZmZzZXQudG9wIC0gdGhpc09mZnNldC50b3AKICAgICAgKTsKCgogICAgICBpZiAoYXV0b0NlbnRlciAmJiBmbGlwLnR1cm4oJ2Rpc3BsYXknKT09J2RvdWJsZScpCiAgICAgICAgaWYgKChmbGlwLnR1cm4oJ2RpcmVjdGlvbicpPT0nbHRyJyAmJiAhZmxpcC50dXJuKCd2aWV3JylbMF0pIHx8CiAgICAgICAgICAoZmxpcC50dXJuKCdkaXJlY3Rpb24nKT09J3J0bCcgJiYgIWZsaXAudHVybigndmlldycpWzFdKQogICAgICAgICkKICAgICAgICAgIGRhdGEuYXhpcy54ID0gZGF0YS5heGlzLnggKyBmbGlwLndpZHRoKCkvMjsKCiAgICAgIHRoYXQuem9vbSgnc2Nyb2xsJywgcmVhbFBvcyk7CiAgICAgIHRoYXQuYmluZCgkLm1vdXNlRXZlbnRzLmRvd24sIHpvb21NZXRob2RzLl9lTW91c2VEb3duKTsKICAgICAgdGhhdC5iaW5kKCQubW91c2VFdmVudHMubW92ZSwgem9vbU1ldGhvZHMuX2VNb3VzZU1vdmUpOwogICAgICAkKGRvY3VtZW50KS5iaW5kKCQubW91c2VFdmVudHMudXAsIGRhdGEubW91c2V1cEV2ZW50KTsKICAgICAgdGhhdC5iaW5kKCdtb3VzZXdoZWVsJywgem9vbU1ldGhvZHMuX2VNb3VzZVdoZWVsKTsKCiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgZGF0YS56b29tZXIuaGlkZSgpOwogICAgICAgIGRhdGEuem9vbWVyLnJlbW92ZSgpOwogICAgICAgIGRhdGEuem9vbWVyID0gbnVsbDsKICAgICAgICBkYXRhLnpvb21lclZpZXcgPSBudWxsOwogICAgICB9LCA1MCk7CgogICAgfTsKCiAgICBkYXRhLnpvb21lci5jc3MoY3NzKS5zaG93KCk7CgogICAgaWYgKHRyYW5zaXRpb25FbmQpCiAgICAgIGRhdGEuem9vbWVyLmJpbmQodHJhbnNpdGlvbkVuZCwgZnVuY3Rpb24oKSB7CiAgICAgICAgJCh0aGlzKS51bmJpbmQodHJhbnNpdGlvbkVuZCk7CiAgICAgICAgdHJhbnNpdGlvbkVuZENhbGxiYWNrKCk7CiAgICAgIH0pOwogICAgZWxzZQogICAgICBzZXRUaW1lb3V0KHRyYW5zaXRpb25FbmRDYWxsYmFjaywgZGF0YS5vcHRzLmR1cmF0aW9uKTsKCiAgICBkYXRhLnpvb21lci50cmFuc2Zvcm0odHJhbnNsYXRlKG1vdmUueCwgbW92ZS55LCB0cnVlKSArIHNjYWxlKHpvb20sIHRydWUpKTsKICAgIAogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgem9vbU91dDogZnVuY3Rpb24oZHVyYXRpb24pIHsKCiAgICB2YXIgcG9zLCBtb3ZlLAogICAgICB0aGF0ID0gdGhpcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2ssCiAgICAgIHpvb20gPSAxLAogICAgICBzY2FsaW5nID0gem9vbS9kYXRhLnNjYWxlLAogICAgICBwcmVmaXggPSAkLmNzc1ByZWZpeCgpLAogICAgICB0cmFuc2l0aW9uRW5kID0gJC5jc3NUcmFuc2l0aW9uRW5kKCksCiAgICAgIHRoaXNPZmZzZXQgPSB0aGlzLm9mZnNldCgpOwoKICAgIGR1cmF0aW9uID0gKHR5cGVvZihkdXJhdGlvbikhPSd1bmRlZmluZWQnKSA/IGR1cmF0aW9uIDogZGF0YS5vcHRzLmR1cmF0aW9uOwoKICAgIGlmICghZGF0YS56b29tSW4pCiAgICAgIHJldHVybjsKICAgICAgCiAgICB2YXIgZXYgPSAkLkV2ZW50KCd6b29tLmNoYW5nZScpOwogICAgdGhpcy50cmlnZ2VyKGV2LCBbem9vbV0pOwoKICAgIGlmIChldi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkKICAgICAgcmV0dXJuIHRoaXM7CgogICAgZGF0YS56b29tSW4gPSBmYWxzZTsKICAgIGRhdGEuc2NhbGUgPSB6b29tOwoKICAgIGZsaXAuZGF0YSgpLm5vQ2VudGVyID0gZmFsc2U7CgogICAgdGhhdC51bmJpbmQoJC5tb3VzZUV2ZW50cy5kb3duLCB6b29tTWV0aG9kcy5fZU1vdXNlRG93bik7CiAgICB0aGF0LnVuYmluZCgkLm1vdXNlRXZlbnRzLm1vdmUsIHpvb21NZXRob2RzLl9lTW91c2VNb3ZlKTsKICAgICQoZG9jdW1lbnQpLnVuYmluZCgkLm1vdXNlRXZlbnRzLnVwLCBkYXRhLm1vdXNldXBFdmVudCk7CiAgICB0aGF0LnVuYmluZCgnbW91c2V3aGVlbCcsIHpvb21NZXRob2RzLl9lTW91c2VXaGVlbCk7CgogICAgdmFyIGNzcyA9IHt9OwoKICAgIGNzc1twcmVmaXgrJ3RyYW5zaXRpb24nXSA9IHByZWZpeCArCiAgICAgICd0cmFuc2Zvcm0gJyArCiAgICAgIGRhdGEub3B0cy5lYXNlRnVuY3Rpb24gKwogICAgICAnICcgKwogICAgICBkdXJhdGlvbiArCiAgICAgICdtcyc7CgogICAgZmxpcC5jc3MoY3NzKTsKCiAgICB2YXIgZmxpcERlc1BvcywKICAgICAgdG1wID0gJCgnPGRpdiAvPicsIHsKICAgICAgICBjc3M6IHsKICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLAogICAgICAgICAgdG9wOiBkYXRhLmZsaXBQb3NpdGlvbi55LAogICAgICAgICAgbGVmdDogZGF0YS5mbGlwUG9zaXRpb24ueCwKICAgICAgICAgIHdpZHRoOiBmbGlwLndpZHRoKCkqc2NhbGluZywKICAgICAgICAgIGhlaWdodDogZmxpcC5oZWlnaHQoKSpzY2FsaW5nLAogICAgICAgICAgYmFja2dyb3VuZDogJ2JsdWUnCiAgICAgICAgfQogICAgICB9KS5hcHBlbmRUbyhmbGlwLnBhcmVudCgpKTsKCiAgICBmbGlwRGVzUG9zID0gcG9pbnQyRCgKICAgICAgdG1wLm9mZnNldCgpLmxlZnQtdGhpc09mZnNldC5sZWZ0LAogICAgICB0bXAub2Zmc2V0KCkudG9wLXRoaXNPZmZzZXQudG9wCiAgICApOwogICAgCgogICAgdG1wLnJlbW92ZSgpOwoKICAgIHZhciBhdXRvQ2VudGVyID0gZmxpcC5kYXRhKCkub3B0cy5hdXRvQ2VudGVyOwoKICAgIGlmIChhdXRvQ2VudGVyICYmIGZsaXAudHVybignZGlzcGxheScpPT0nZG91YmxlJykgewoKICAgICAgaWYgKCFmbGlwLnR1cm4oJ3ZpZXcnKVswXSkKICAgICAgICBmbGlwRGVzUG9zLnggPSAoZmxpcC50dXJuKCdkaXJlY3Rpb24nKT09J2x0cicpID8KICAgICAgICAgIGZsaXBEZXNQb3MueC10bXAud2lkdGgoKS80IDoKICAgICAgICAgIGZsaXBEZXNQb3MueCt0bXAud2lkdGgoKS80OwogICAgICBlbHNlIGlmICghZmxpcC50dXJuKCd2aWV3JylbMV0pCiAgICAgICAgZmxpcERlc1Bvcy54ID0gKGZsaXAudHVybignZGlyZWN0aW9uJyk9PSdsdHInKSA/CiAgICAgICAgICBmbGlwRGVzUG9zLngrdG1wLndpZHRoKCkvNCA6CiAgICAgICAgICBmbGlwRGVzUG9zLngtdG1wLndpZHRoKCkvNDsKICAgIH0KCiAgICB2YXIgZmxpcFJlYWxQb3MgPSAkLmZpbmRQb3MoZmxpcFswXSk7CiAgICAgIAogICAgbW92ZSA9IHBvaW50MkQoCiAgICAgIC1mbGlwLndpZHRoKCkvMiAtIGZsaXBSZWFsUG9zLmxlZnQgKyB0bXAud2lkdGgoKS8yICsgZmxpcERlc1Bvcy54ICsgdGhpc09mZnNldC5sZWZ0LAogICAgICAtZmxpcC5oZWlnaHQoKS8yIC0gZmxpcFJlYWxQb3MudG9wICsgdG1wLmhlaWdodCgpLzIgKyBmbGlwRGVzUG9zLnkgKyB0aGlzT2Zmc2V0LnRvcCk7CgogICAgdmFyIHRyYW5zaXRpb25FbmRDYWxsYmFjayA9IGZ1bmN0aW9uKCkgewogICAgCiAgICAgIGlmIChmbGlwWzBdLnN0eWxlLnJlbW92ZVByb3BlcnR5KSB7CiAgICAgICAgCiAgICAgICAgZmxpcFswXS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcmVmaXgrJ3RyYW5zaXRpb24nKTsKICAgICAgICBmbGlwLnRyYW5zZm9ybSgKICAgICAgICAgIChmbGlwLnR1cm4oJ29wdGlvbnMnKS5hY2NlbGVyYXRpb24pID8gdHJhbnNsYXRlKDAsIDAsIHRydWUpIDogJycpLnR1cm4oJ3pvb20nLCAxKTsKICAgICAgICBmbGlwWzBdLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdtYXJnaW4nKTsKICAgICAgICBmbGlwLmNzcyh7CiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywKICAgICAgICAgIHRvcDogZGF0YS5mbGlwUG9zaXRpb24ueSwKICAgICAgICAgIGxlZnQ6IGRhdGEuZmxpcFBvc2l0aW9uLngKICAgICAgICB9KTsKCiAgICAgIH0gZWxzZSB7CiAgICAgICAgCiAgICAgICAgZmxpcC50cmFuc2Zvcm0oJ25vbmUnKS4KICAgICAgICAgIHR1cm4oJ3pvb20nLCAxKS4KICAgICAgICAgIGNzcyh7CiAgICAgICAgICAgIG1hcmdpbjogJycsCiAgICAgICAgICAgIHRvcDogZGF0YS5mbGlwUG9zaXRpb24ueSwKICAgICAgICAgICAgbGVmdDogZGF0YS5mbGlwUG9zaXRpb24ueCwKICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScKICAgICAgICB9KTsKCiAgICAgIH0KCiAgICAgIGlmIChhdXRvQ2VudGVyKQogICAgICAgIGZsaXAudHVybignY2VudGVyJyk7CgogICAgICB0aGF0LnRyaWdnZXIoJ3pvb20uem9vbU91dCcpOwoKICAgIH07CgogICAgaWYgKGR1cmF0aW9uPT09MCkgewogIAogICAgICB0cmFuc2l0aW9uRW5kQ2FsbGJhY2soKTsKCiAgICB9IGVsc2UgaWYgKHRyYW5zaXRpb25FbmQpIHsKCiAgICAgIGZsaXAuYmluZCh0cmFuc2l0aW9uRW5kLCBmdW5jdGlvbigpIHsKCiAgICAgICAgJCh0aGlzKS51bmJpbmQodHJhbnNpdGlvbkVuZCk7CiAgICAgICAgdHJhbnNpdGlvbkVuZENhbGxiYWNrKCk7CgogICAgICB9KTsKCiAgICAgIGZsaXAudHJhbnNmb3JtKHRyYW5zbGF0ZShtb3ZlLngsIG1vdmUueSwgdHJ1ZSkgKyBzY2FsZShzY2FsaW5nLCB0cnVlKSk7CgogICAgfSBlbHNlIHsKCiAgICAgIHNldFRpbWVvdXQodHJhbnNpdGlvbkVuZENhbGxiYWNrLCBkdXJhdGlvbik7CiAgICAgIGZsaXAudHJhbnNmb3JtKHRyYW5zbGF0ZShtb3ZlLngsIG1vdmUueSwgdHJ1ZSkgKyBzY2FsZShzY2FsaW5nLCB0cnVlKSk7CgogICAgfQoKICAgIHJldHVybiB0aGlzOwogIH0sCgogIGZsaXBib29rV2lkdGg6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXBib29rID0gZGF0YS5vcHRzLmZsaXBib29rLAogICAgICB2aWV3ID0gZmxpcGJvb2sudHVybigndmlldycpOwoKICAgIHJldHVybiAoZmxpcGJvb2sudHVybignZGlzcGxheScpPT0nZG91YmxlJyAmJiAoIXZpZXdbMF0gfHwgIXZpZXdbMV0pKSA/CiAgICAgIGZsaXBib29rLndpZHRoKCkvMgogICAgICA6CiAgICAgIGZsaXBib29rLndpZHRoKCk7CgogIH0sCgogIHNjcm9sbDogZnVuY3Rpb24odG8sIHVubGltaXRlZCwgYW5pbWF0ZSkgewogICAgCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2ssCiAgICAgIGZsaXBXaWR0aCA9IHRoaXMuem9vbSgnZmxpcGJvb2tXaWR0aCcpLAogICAgICBwcmVmaXggPSAkLmNzc1ByZWZpeCgpOwogICAgCiAgICBpZiAoaGFzM2QpIHsKCiAgICAgIHZhciBjc3MgPSB7fTsKCiAgICAgIGlmIChhbmltYXRlKSB7CiAgICAgICAgY3NzW3ByZWZpeCsndHJhbnNpdGlvbiddID0gcHJlZml4ICsgJ3RyYW5zZm9ybSAyMDBtcyc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3NzW3ByZWZpeCsndHJhbnNpdGlvbiddID0gJ25vbmUnOwogICAgICB9CgogICAgICBmbGlwLmNzcyhjc3MpOwogICAgICBmbGlwLnRyYW5zZm9ybSh0cmFuc2xhdGUoLWRhdGEuYXhpcy54IC0gdG8ueCwgLWRhdGEuYXhpcy55IC0gdG8ueSwgdHJ1ZSkpOwoKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICBmbGlwLmNzcyh7dG9wOiAtZGF0YS5heGlzLnkgLSB0by55LCBsZWZ0OiAtZGF0YS5heGlzLnggLSB0by54fSk7CgogICAgfQoKICAgIGlmICghdW5saW1pdGVkKSB7CgogICAgICB2YXIgb3V0LAogICAgICAgIG1pbkJvdW5kID0gcG9pbnQyRCgKICAgICAgICAgIE1hdGgubWluKDAsIChmbGlwV2lkdGgtdGhpcy53aWR0aCgpKS8yKSwKICAgICAgICAgIE1hdGgubWluKDAsIChmbGlwLmhlaWdodCgpLXRoaXMuaGVpZ2h0KCkpLzIpKSwKICAgICAgICBtYXhCb3VuZCA9IHBvaW50MkQoCiAgICAgICAgICAoZmxpcFdpZHRoPnRoaXMud2lkdGgoKSkgPyBmbGlwV2lkdGgtdGhpcy53aWR0aCgpIDogKGZsaXBXaWR0aC10aGlzLndpZHRoKCkpLzIsCiAgICAgICAgICAoZmxpcC5oZWlnaHQoKT50aGlzLmhlaWdodCgpKSA/IGZsaXAuaGVpZ2h0KCktdGhpcy5oZWlnaHQoKSA6IChmbGlwLmhlaWdodCgpLXRoaXMuaGVpZ2h0KCkpLzIKICAgICAgICApOwoKICAgICAgaWYgKHRvLnk8bWluQm91bmQueSkgewogICAgICAgIHRvLnkgPSBtaW5Cb3VuZC55OwogICAgICAgIG91dCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAodG8ueT5tYXhCb3VuZC55KSB7CiAgICAgICAgdG8ueSA9IG1heEJvdW5kLnk7CiAgICAgICAgb3V0ID0gdHJ1ZTsKICAgICAgfQoKICAgICAgaWYgKHRvLng8bWluQm91bmQueCkgewogICAgICAgIHRvLnggPSBtaW5Cb3VuZC54OwogICAgICAgIG91dCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAodG8ueD5tYXhCb3VuZC54KSB7CiAgICAgICAgdG8ueCA9IG1heEJvdW5kLng7CiAgICAgICAgb3V0ID0gdHJ1ZTsKICAgICAgfQoKICAgICAgaWYgKG91dCkgewogICAgICAgIHRoaXMuem9vbSgnc2Nyb2xsJywgdG8sIHRydWUsIHRydWUpOwogICAgICB9CgogICAgfQoKICAgIGRhdGEuc2Nyb2xsUG9zID0gcG9pbnQyRCh0by54LCB0by55KTsKCiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbigpIHsKCiAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2s7CiAgICAKICAgIGlmICh0aGlzLnpvb20oJ3ZhbHVlJyk+MSkgewoKICAgICAgdmFyICBmbGlwT2Zmc2V0ID0gZmxpcC5vZmZzZXQoKSwKICAgICAgICB0aGlzT2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTsKCiAgICAgIGRhdGEuYXhpcyA9ICBwb2ludDJEKAogICAgICAgIChmbGlwT2Zmc2V0LmxlZnQgLSB0aGlzT2Zmc2V0LmxlZnQpICsgKGRhdGEuYXhpcy54ICsgZGF0YS5zY3JvbGxQb3MueCksCiAgICAgICAgKGZsaXBPZmZzZXQudG9wIC0gdGhpc09mZnNldC50b3ApICsgKGRhdGEuYXhpcy55ICsgZGF0YS5zY3JvbGxQb3MueSkKICAgICAgKTsKCiAgICAgIGlmIChmbGlwLnR1cm4oJ2Rpc3BsYXknKT09J2RvdWJsZScgJiYKICAgICAgICBmbGlwLnR1cm4oJ2RpcmVjdGlvbicpPT0nbHRyJyAmJgogICAgICAgICFmbGlwLnR1cm4oJ3ZpZXcnKVswXSkKICAgICAgICAgIGRhdGEuYXhpcy54ID0gZGF0YS5heGlzLnggKyBmbGlwLndpZHRoKCkvMjsKCiAgICAgIHRoaXMuem9vbSgnc2Nyb2xsJywgZGF0YS5zY3JvbGxQb3MpOwogICAgfQoKICB9LAoKICBfZVpvb206IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgZmxpcFBvcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2ssCiAgICAgIHZpZXcgPSBmbGlwLnR1cm4oJ3ZpZXcnKTsKCiAgICBmb3IgKHZhciBwID0gMDsgcDx2aWV3Lmxlbmd0aDsgcCsrKSB7CiAgICAgIGlmICh2aWV3W3BdKQogICAgICAgIHRoaXMudHJpZ2dlcignem9vbS5yZXNpemUnLAogICAgICAgICAgW2RhdGEuc2NhbGUsIHZpZXdbcF0sIGZsaXAuZGF0YSgpLnBhZ2VPYmpzW3ZpZXdbcF1dXQogICAgICAgICk7CiAgICB9CiAgfSwKCiAgX2VTdGFydDogZnVuY3Rpb24oZXZlbnQsIHBhZ2VPYmopIHsKCiAgICBpZiAodGhpcy56b29tKCd2YWx1ZScpIT0xKSB7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICB9CgoKICB9LAoKICBfZVR1cm5pbmc6IGZ1bmN0aW9uKGV2ZW50LCBwYWdlLCB2aWV3KSB7CgogICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICB6b29tID0gdGhpcy56b29tKCd2YWx1ZScpLAogICAgICBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgZmxpcCA9IGRhdGEub3B0cy5mbGlwYm9vazsKCiAgICBkYXRhLnBhZ2UgPSBmbGlwLnR1cm4oJ3BhZ2UnKTsKCiAgICBpZiAoem9vbSE9MSkgewogICAgICBmb3IgKHZhciBwID0gMDsgcDx2aWV3Lmxlbmd0aDsgcCsrKSB7CiAgICAgICAgaWYgKHZpZXdbcF0pCiAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb20ucmVzaXplJywKICAgICAgICAgICAgW3pvb20sIHZpZXdbcF0sIGZsaXAuZGF0YSgpLnBhZ2VPYmpzW3ZpZXdbcF1dXQogICAgICAgICAgKTsKICAgICAgfQoKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICB0aGF0Lnpvb20oJ3Jlc2l6ZScpOwogICAgICB9LCAwKTsKICAgIH0KCiAgfSwKCiAgX2VUdXJuZWQ6IGZ1bmN0aW9uIChldmVudCwgcGFnZSkgewogICAgCiAgICBpZiAodGhpcy56b29tKCd2YWx1ZScpIT0xKSB7CiAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICBkYXRhID0gdGhpcy5kYXRhKCkuem9vbSwKICAgICAgICBmbGlwID0gZGF0YS5vcHRzLmZsaXBib29rOwoKICAgICAgaWYgKHBhZ2U+ZGF0YS5wYWdlKQogICAgICAgIHRoaXMuem9vbSgnc2Nyb2xsJywKICAgICAgICAgIHBvaW50MkQoMCwgZGF0YS5zY3JvbGxQb3MueSksIGZhbHNlLCB0cnVlKTsKICAgICAgICAKICAgICAgZWxzZSBpZiAocGFnZTxkYXRhLnBhZ2UpCiAgICAgICAgdGhpcy56b29tKCdzY3JvbGwnLAogICAgICAgICAgcG9pbnQyRChmbGlwLndpZHRoKCksIGRhdGEuc2Nyb2xsUG9zLnkpLCBmYWxzZSwgdHJ1ZSk7CiAgICAKICAgIH0KICB9LAoKICBfZVByZXNzZWQ6IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YSgpLnpvb207CiAgICBkYXRhLmRyYWdnaW5nQ29ybmVyID0gdHJ1ZTsKCiAgfSwKCiAgX2VSZWxlYXNlZDogZnVuY3Rpb24oKSB7CgogICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoKS56b29tOwoKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgIGRhdGEuZHJhZ2dpbmdDb3JuZXIgPSBmYWxzZTsKICAgIH0sIDEpOwoKICB9LAoKICBfZU1vdXNlRG93bjogZnVuY3Rpb24oZXZlbnQpIHsKICAgIAogICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoKS56b29tOwoKICAgIGRhdGEuZHJhZ2dpbmdDdXIgPSAoJC5pc1RvdWNoKSA/CiAgICAgIHBvaW50MkQoCiAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VYLAogICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWQogICAgICApCiAgICAgIDoKICAgICAgcG9pbnQyRChldmVudC5wYWdlWCwgZXZlbnQucGFnZVkpOwogICAgCiAgICByZXR1cm4gZmFsc2U7CiAgfSwKCiAgX2VNb3VzZU1vdmU6IGZ1bmN0aW9uKGV2ZW50KSB7CgogICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoKS56b29tOwogICAgICAgIAogICAgaWYgKGRhdGEuZHJhZ2dpbmdDdXIpIHsKCiAgICAgIGRhdGEuZHJhZ2dpbmcgPSB0cnVlOwoKICAgICAgdmFyIGN1ciA9ICgkLmlzVG91Y2gpID8KICAgICAgICBwb2ludDJEKAogICAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VYLAogICAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VZCiAgICAgICAgKQogICAgICAgIDoKICAgICAgICBwb2ludDJEKGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSksCiAgICAgICAgbW90aW9uID0gcG9pbnQyRCgKICAgICAgICAgIGN1ci54LSBkYXRhLmRyYWdnaW5nQ3VyLngsCiAgICAgICAgICBjdXIueS1kYXRhLmRyYWdnaW5nQ3VyLnkKICAgICAgICApOwoKICAgICAgJCh0aGlzKS56b29tKCdzY3JvbGwnLAogICAgICAgIHBvaW50MkQoCiAgICAgICAgICBkYXRhLnNjcm9sbFBvcy54LW1vdGlvbi54LAogICAgICAgICAgZGF0YS5zY3JvbGxQb3MueS1tb3Rpb24ueQogICAgICAgICksIHRydWUKICAgICAgKTsKCiAgICAgIGRhdGEuZHJhZ2dpbmdDdXIgPSBjdXI7CgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogIH0sCgogIF9lTW91c2VVcDogZnVuY3Rpb24oZXZlbnQpIHsKCiAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YSgpLnpvb207CgogICAgaWYgKGRhdGEuZHJhZ2dpbmcpIHsKICAgICAgJCh0aGlzKS56b29tKCdzY3JvbGwnLCBkYXRhLnNjcm9sbFBvcyk7CiAgICB9CgogICAgZGF0YS5kcmFnZ2luZ0N1ciA9IG51bGw7CgogICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgZGF0YS5kcmFnZ2luZyA9IGZhbHNlOwogICAgfSwgMSk7CgogIH0sCgogIF9lTW91c2VXaGVlbDogZnVuY3Rpb24oZXZlbnQsIGRlbHRhLCBkZWx0YVgsIGRlbHRhWSkgewogICAgCiAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YSgpLnpvb20sCiAgICAgIGN1ciA9IHBvaW50MkQoCiAgICAgICAgZGF0YS5zY3JvbGxQb3MueCArIGRlbHRhWCoxMCwKICAgICAgICBkYXRhLnNjcm9sbFBvcy55IC0gZGVsdGFZKjEwCiAgICAgICk7CiAgICAKICAgICQodGhpcykuem9vbSgnc2Nyb2xsJywgY3VyLCBmYWxzZSwgdHJ1ZSk7CiAgICAKICB9LAoKICBfZVRvdWNoU3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCBwYWdlKSB7CgogICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoKS56b29tLAogICAgICBmbGlwID0gZGF0YS5vcHRzLmZsaXBib29rLAogICAgICBmaW5nZXIgPSBwb2ludDJEKAogICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWCwKICAgICAgICBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVkKICAgICAgKTsKCiAgICBkYXRhLnRvdWNoID0ge307CiAgICBkYXRhLnRvdWNoLmluaXRpYWwgPSBmaW5nZXI7CiAgICBkYXRhLnRvdWNoLmxhc3QgPSBmaW5nZXI7CiAgICBkYXRhLnRvdWNoLnRpbWVzdGFtcCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CiAgICBkYXRhLnRvdWNoLnNwZWVkID0gcG9pbnQyRCgwLCAwKTsKCiAgfSwKCiAgX2VUb3VjaE1vdmU6IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAKICAgIHZhciBkYXRhID0gJCh0aGlzKS5kYXRhKCkuem9vbSwKICAgICAgem9vbSA9ICQodGhpcykuem9vbSgndmFsdWUnKSwKICAgICAgZmxpcCA9IGRhdGEub3B0cy5mbGlwYm9vaywKICAgICAgdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksCiAgICAgIGZpbmdlciA9IHBvaW50MkQoCiAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VYLAogICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWQogICAgICApOwogICAgCiAgICBpZiAoZGF0YS50b3VjaCAmJiB6b29tPT0xICYmICFmbGlwLmRhdGEoKS5tb3VzZUFjdGlvbikgewogICAgICBkYXRhLnRvdWNoLm1vdGlvbiA9IHBvaW50MkQoCiAgICAgICAgZmluZ2VyLngtZGF0YS50b3VjaC5sYXN0LngsCiAgICAgICAgZmluZ2VyLnktZGF0YS50b3VjaC5sYXN0LnkpOwoKICAgIAogICAgICBkYXRhLnRvdWNoLnNwZWVkLnggPSAoZGF0YS50b3VjaC5zcGVlZC54PT09MCkgPwogICAgICAgIGRhdGEudG91Y2gubW90aW9uLnggLyAodGltZS1kYXRhLnRvdWNoLnRpbWVzdGFtcCkgOgogICAgICAgIChkYXRhLnRvdWNoLnNwZWVkLnggKyAoZGF0YS50b3VjaC5tb3Rpb24ueCAvICh0aW1lLWRhdGEudG91Y2gudGltZXN0YW1wKSkpLzI7CgogICAgICBkYXRhLnRvdWNoLmxhc3QgPSBmaW5nZXI7CiAgICAgIGRhdGEudG91Y2gudGltZXN0YW1wID0gdGltZTsKICAgIH0KCiAgfSwKCiAgX2VUb3VjaEVuZDogZnVuY3Rpb24oZXZlbnQpIHsKCiAgICB2YXIgZGF0YSA9ICQodGhpcykuZGF0YSgpLnpvb207CgogICAgaWYgKGRhdGEudG91Y2ggJiYgJCh0aGlzKS56b29tKCd2YWx1ZScpPT0xKSB7CgogICAgICB2YXIgeSA9IE1hdGguYWJzKGRhdGEudG91Y2guaW5pdGlhbC55IC0gZGF0YS50b3VjaC5sYXN0LnkpOwoKICAgICAgaWYgKHk8NTAgJiYgKGRhdGEudG91Y2guc3BlZWQueDwtMSB8fCBkYXRhLnRvdWNoLmxhc3QueC1kYXRhLnRvdWNoLmluaXRpYWwueDwtMTAwKSkgewogICAgICAgIAogICAgICAgIHRoaXMudHJpZ2dlcignem9vbS5zd2lwZUxlZnQnKTsKCiAgICAgIH0gZWxzZSBpZih5PDUwICYmIChkYXRhLnRvdWNoLnNwZWVkLng+MSB8fCBkYXRhLnRvdWNoLmxhc3QueC1kYXRhLnRvdWNoLmluaXRpYWwueD4xMDApKXsKICAgICAgICAKICAgICAgICB0aGlzLnRyaWdnZXIoJ3pvb20uc3dpcGVSaWdodCcpOwoKICAgICAgfQoKICAgIH0KICB9LAoKICBfZURlc3Ryb3lpbmc6IGZ1bmN0aW9uKCkgewoKICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpLnpvb20sCiAgICAgIGZsaXAgPSBkYXRhLm9wdHMuZmxpcGJvb2ssCiAgICAgIGV2ZW50cyA9IFsKICAgICAgICAndGFwJywKICAgICAgICAnZG91YmxlVGFwJywKICAgICAgICAncmVzaXplJywKICAgICAgICAnem9vbUluJywKICAgICAgICAnem9vbU91dCcsCiAgICAgICAgJ3N3aXBlTGVmdCcsCiAgICAgICAgJ3N3aXBlUmlnaHQnCiAgICAgIF07CgogICAgdGhpcy56b29tKCd6b29tT3V0JywgMCk7CgogICAgJC5lYWNoKGV2ZW50cywgZnVuY3Rpb24oaW5kZXgsIGV2ZW50TmFtZSkgewogICAgICB0aGF0LnVuYmluZCgnem9vbS4nICsgZXZlbnROYW1lKTsKICAgIH0pOwogICAgCiAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gZGF0YS5mbGlwYm9va0V2ZW50cykgewogICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEuZmxpcGJvb2tFdmVudHMsIGV2ZW50TmFtZSkpIHsKICAgICAgICBmbGlwLnVuYmluZChldmVudE5hbWUsIGRhdGEuZmxpcGJvb2tFdmVudHNbZXZlbnROYW1lXSk7CiAgICAgIH0KICAgIH0KCiAgICBmbGlwLnVuYmluZCgndG91Y2hzdGFydCcsIGRhdGEuZXZlbnRUb3VjaFN0YXJ0ICkuCiAgICAgIHVuYmluZCgndG91Y2htb3ZlJywgZGF0YS5ldmVudFRvdWNoTW92ZSkuCiAgICAgIHVuYmluZCgndG91Y2hlbmQnLCBkYXRhLmV2ZW50VG91Y2hFbmQpOwogICAgICAgIAogICAgdGhpcy51bmJpbmQoJ3RvdWNoc3RhcnQnLCB6b29tTWV0aG9kcy5fdGFwKS4KICAgICAgdW5iaW5kKCdjbGljaycsIHpvb21NZXRob2RzLl90YXApOwoKICAgIGRhdGEgPSBudWxsOwogICAgdGhpcy5kYXRhKCkuem9vbSA9IG51bGw7CgogIH0KfTsKCmZ1bmN0aW9uIGlzUGFnZShlbGVtZW50LCBsYXN0KSB7CgogIGlmIChlbGVtZW50WzBdPT1sYXN0WzBdKQogICAgcmV0dXJuIGZhbHNlOwoKICBpZiAoZWxlbWVudC5hdHRyKCdwYWdlJykpCiAgICByZXR1cm4gdHJ1ZTsKICAKICByZXR1cm4gKGVsZW1lbnQucGFyZW50KClbMF0pID8KICAgIGlzUGFnZShlbGVtZW50LnBhcmVudCgpLCBsYXN0KQogICAgOgogIGZhbHNlOwoKfQoKZnVuY3Rpb24gZXJyb3IobWVzc2FnZSkgewoKICBmdW5jdGlvbiBUdXJuSnNFcnJvcihtZXNzYWdlKSB7CiAgICB0aGlzLm5hbWUgPSAiVHVybkpzRXJyb3IiOwogICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKICB9CgogIFR1cm5Kc0Vycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpOwogIFR1cm5Kc0Vycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR1cm5Kc0Vycm9yOwogIHJldHVybiBuZXcgVHVybkpzRXJyb3IobWVzc2FnZSk7Cgp9CgpmdW5jdGlvbiB0cmFuc2xhdGUoeCwgeSwgdXNlM2QpIHsKICAKICByZXR1cm4gKGhhczNkICYmIHVzZTNkKSA/ICcgdHJhbnNsYXRlM2QoJyArIHggKyAncHgsJyArIHkgKyAncHgsIDBweCkgJwogIDogJyB0cmFuc2xhdGUoJyArIHggKyAncHgsICcgKyB5ICsgJ3B4KSAnOwoKfQoKZnVuY3Rpb24gc2NhbGUodiwgdXNlM2QpIHsKICAKICByZXR1cm4gKGhhczNkICYmIHVzZTNkKSA/ICcgc2NhbGUzZCgnICsgdiArICcsICcgKyB2ICsgJywgMSkgJwogIDogJyBzY2FsZSgnICsgdiArICcpICc7Cgp9CgpmdW5jdGlvbiBwb2ludDJEKHgsIHkpIHsKICAKICByZXR1cm4ge3g6IHgsIHk6IHl9OwoKfQoKZnVuY3Rpb24gYmluZChmdW5jLCBjb250ZXh0KSB7CgogIHJldHVybiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7CiAgfTsKCn0KCiQuZXh0ZW5kKCQuZm4sIHsKICB6b29tOiBmdW5jdGlvbigpIHsKICAgIAogICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7CgogICAgaWYgKCFhcmdzWzBdIHx8IHR5cGVvZihhcmdzWzBdKT09J29iamVjdCcpCiAgICAgIHJldHVybiB6b29tTWV0aG9kcy5pbml0LmFwcGx5KCQodGhpc1swXSksIGFyZ3MpOwogICAgZWxzZSBpZiAoem9vbU1ldGhvZHNbYXJnc1swXV0pCiAgICAgIHJldHVybiB6b29tTWV0aG9kc1thcmdzWzBdXS5hcHBseSgkKHRoaXNbMF0pLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7CiAgICBlbHNlCiAgICAgIHRocm93IGVycm9yKGFyZ3NbMF0gKyAnIGlzIG5vdCBhIG1ldGhvZCcpOwoKICB9Cn0pOwoKfSkoalF1ZXJ5KTsK'></script>
	<script id="fb_html_magazine_js_magazine_js" src='data:/text/plain;base64,LyohCiAqIFZ1ZS5qcyB2Mi41LjE3CiAqIChjKSAyMDE0LTIwMTggRXZhbiBZb3UKICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KIWZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUodCk6ZS5WdWU9dCgpfSh0aGlzLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB5PU9iamVjdC5mcmVlemUoe30pO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIG51bGw9PWV9ZnVuY3Rpb24gRChlKXtyZXR1cm4gbnVsbCE9ZX1mdW5jdGlvbiBTKGUpe3JldHVybiEwPT09ZX1mdW5jdGlvbiBUKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlfHwic3ltYm9sIj09dHlwZW9mIGV8fCJib29sZWFuIj09dHlwZW9mIGV9ZnVuY3Rpb24gUChlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX12YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1yLmNhbGwoZSl9ZnVuY3Rpb24gaShlKXt2YXIgdD1wYXJzZUZsb2F0KFN0cmluZyhlKSk7cmV0dXJuIDA8PXQmJk1hdGguZmxvb3IodCk9PT10JiZpc0Zpbml0ZShlKX1mdW5jdGlvbiB0KGUpe3JldHVybiBudWxsPT1lPyIiOiJvYmplY3QiPT10eXBlb2YgZT9KU09OLnN0cmluZ2lmeShlLG51bGwsMik6U3RyaW5nKGUpfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4odCk/ZTp0fWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPWUuc3BsaXQoIiwiKSxpPTA7aTxyLmxlbmd0aDtpKyspbltyW2ldXT0hMDtyZXR1cm4gdD9mdW5jdGlvbihlKXtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldfTpmdW5jdGlvbihlKXtyZXR1cm4gbltlXX19dmFyIGM9cygic2xvdCxjb21wb25lbnQiLCEwKSx1PXMoImtleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzIik7ZnVuY3Rpb24gZihlLHQpe2lmKGUubGVuZ3RoKXt2YXIgbj1lLmluZGV4T2YodCk7aWYoLTE8bilyZXR1cm4gZS5zcGxpY2UobiwxKX19dmFyIG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBwKGUsdCl7cmV0dXJuIG4uY2FsbChlLHQpfWZ1bmN0aW9uIGUodCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV18fChuW2VdPXQoZSkpfX12YXIgbz0vLShcdykvZyxnPWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShvLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/dC50b1VwcGVyQ2FzZSgpOiIifSl9KSxkPWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX0pLGE9L1xCKFtBLVpdKS9nLF89ZShmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGEsIi0kMSIpLnRvTG93ZXJDYXNlKCl9KTt2YXIgdj1GdW5jdGlvbi5wcm90b3R5cGUuYmluZD9mdW5jdGlvbihlLHQpe3JldHVybiBlLmJpbmQodCl9OmZ1bmN0aW9uKG4scil7ZnVuY3Rpb24gZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO3JldHVybiB0PzE8dD9uLmFwcGx5KHIsYXJndW1lbnRzKTpuLmNhbGwocixlKTpuLmNhbGwocil9cmV0dXJuIGUuX2xlbmd0aD1uLmxlbmd0aCxlfTtmdW5jdGlvbiBoKGUsdCl7dD10fHwwO2Zvcih2YXIgbj1lLmxlbmd0aC10LHI9bmV3IEFycmF5KG4pO24tLTspcltuXT1lW24rdF07cmV0dXJuIHJ9ZnVuY3Rpb24gbShlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBiKGUpe2Zvcih2YXIgdD17fSxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSYmbSh0LGVbbl0pO3JldHVybiB0fWZ1bmN0aW9uICQoZSx0LG4pe312YXIgTz1mdW5jdGlvbihlLHQsbil7cmV0dXJuITF9LHc9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9O2Z1bmN0aW9uIEModCxuKXtpZih0PT09bilyZXR1cm4hMDt2YXIgZT1QKHQpLHI9UChuKTtpZighZXx8IXIpcmV0dXJuIWUmJiFyJiZTdHJpbmcodCk9PT1TdHJpbmcobik7dHJ5e3ZhciBpPUFycmF5LmlzQXJyYXkodCksbz1BcnJheS5pc0FycmF5KG4pO2lmKGkmJm8pcmV0dXJuIHQubGVuZ3RoPT09bi5sZW5ndGgmJnQuZXZlcnkoZnVuY3Rpb24oZSx0KXtyZXR1cm4gQyhlLG5bdF0pfSk7aWYoaXx8bylyZXR1cm4hMTt2YXIgYT1PYmplY3Qua2V5cyh0KSxzPU9iamVjdC5rZXlzKG4pO3JldHVybiBhLmxlbmd0aD09PXMubGVuZ3RoJiZhLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBDKHRbZV0sbltlXSl9KX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24geChlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKEMoZVtuXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBSKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe3R8fCh0PSEwLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dmFyIEU9ImRhdGEtc2VydmVyLXJlbmRlcmVkIixrPVsiY29tcG9uZW50IiwiZGlyZWN0aXZlIiwiZmlsdGVyIl0sQT1bImJlZm9yZUNyZWF0ZSIsImNyZWF0ZWQiLCJiZWZvcmVNb3VudCIsIm1vdW50ZWQiLCJiZWZvcmVVcGRhdGUiLCJ1cGRhdGVkIiwiYmVmb3JlRGVzdHJveSIsImRlc3Ryb3llZCIsImFjdGl2YXRlZCIsImRlYWN0aXZhdGVkIiwiZXJyb3JDYXB0dXJlZCJdLGo9e29wdGlvbk1lcmdlU3RyYXRlZ2llczpPYmplY3QuY3JlYXRlKG51bGwpLHNpbGVudDohMSxwcm9kdWN0aW9uVGlwOiExLGRldnRvb2xzOiExLHBlcmZvcm1hbmNlOiExLGVycm9ySGFuZGxlcjpudWxsLHdhcm5IYW5kbGVyOm51bGwsaWdub3JlZEVsZW1lbnRzOltdLGtleUNvZGVzOk9iamVjdC5jcmVhdGUobnVsbCksaXNSZXNlcnZlZFRhZzpPLGlzUmVzZXJ2ZWRBdHRyOk8saXNVbmtub3duRWxlbWVudDpPLGdldFRhZ05hbWVzcGFjZTokLHBhcnNlUGxhdGZvcm1UYWdOYW1lOncsbXVzdFVzZVByb3A6TyxfbGlmZWN5Y2xlSG9va3M6QX07ZnVuY3Rpb24gTihlLHQsbixyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ISFyLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfXZhciBMPS9bXlx3LiRdLzt2YXIgSSxIPSJfX3Byb3RvX18iaW57fSxCPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LFU9InVuZGVmaW5lZCIhPXR5cGVvZiBXWEVudmlyb25tZW50JiYhIVdYRW52aXJvbm1lbnQucGxhdGZvcm0sVj1VJiZXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCksej1CJiZ3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLEs9eiYmL21zaWV8dHJpZGVudC8udGVzdCh6KSxKPXomJjA8ei5pbmRleE9mKCJtc2llIDkuMCIpLHE9eiYmMDx6LmluZGV4T2YoImVkZ2UvIiksVz0oeiYmei5pbmRleE9mKCJhbmRyb2lkIikseiYmL2lwaG9uZXxpcGFkfGlwb2R8aW9zLy50ZXN0KHopfHwiaW9zIj09PVYpLEc9KHomJi9jaHJvbWVcL1xkKy8udGVzdCh6KSx7fS53YXRjaCksWj0hMTtpZihCKXRyeXt2YXIgWD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe1o9ITB9fSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QtcGFzc2l2ZSIsbnVsbCxYKX1jYXRjaChlKXt9dmFyIFk9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09SSYmKEk9IUImJiFVJiYidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmInNlcnZlciI9PT1nbG9iYWwucHJvY2Vzcy5lbnYuVlVFX0VOViksSX0sUT1CJiZ3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztmdW5jdGlvbiBlZShlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmL25hdGl2ZSBjb2RlLy50ZXN0KGUudG9TdHJpbmcoKSl9dmFyIHRlLG5lPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlZShTeW1ib2wpJiYidW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJmVlKFJlZmxlY3Qub3duS2V5cyk7dGU9InVuZGVmaW5lZCIhPXR5cGVvZiBTZXQmJmVlKFNldCk/U2V0OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuc2V0PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4hMD09PXRoaXMuc2V0W2VdfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5zZXRbZV09ITB9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9T2JqZWN0LmNyZWF0ZShudWxsKX0sZX0oKTt2YXIgcmU9JCxpZT0wLG9lPWZ1bmN0aW9uKCl7dGhpcy5pZD1pZSsrLHRoaXMuc3Vicz1bXX07b2UucHJvdG90eXBlLmFkZFN1Yj1mdW5jdGlvbihlKXt0aGlzLnN1YnMucHVzaChlKX0sb2UucHJvdG90eXBlLnJlbW92ZVN1Yj1mdW5jdGlvbihlKXtmKHRoaXMuc3VicyxlKX0sb2UucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe29lLnRhcmdldCYmb2UudGFyZ2V0LmFkZERlcCh0aGlzKX0sb2UucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnN1YnMuc2xpY2UoKSx0PTAsbj1lLmxlbmd0aDt0PG47dCsrKWVbdF0udXBkYXRlKCl9LG9lLnRhcmdldD1udWxsO3ZhciBhZT1bXTtmdW5jdGlvbiBzZShlKXtvZS50YXJnZXQmJmFlLnB1c2gob2UudGFyZ2V0KSxvZS50YXJnZXQ9ZX1mdW5jdGlvbiBjZSgpe29lLnRhcmdldD1hZS5wb3AoKX12YXIgbGU9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzKXt0aGlzLnRhZz1lLHRoaXMuZGF0YT10LHRoaXMuY2hpbGRyZW49bix0aGlzLnRleHQ9cix0aGlzLmVsbT1pLHRoaXMubnM9dm9pZCAwLHRoaXMuY29udGV4dD1vLHRoaXMuZm5Db250ZXh0PXZvaWQgMCx0aGlzLmZuT3B0aW9ucz12b2lkIDAsdGhpcy5mblNjb3BlSWQ9dm9pZCAwLHRoaXMua2V5PXQmJnQua2V5LHRoaXMuY29tcG9uZW50T3B0aW9ucz1hLHRoaXMuY29tcG9uZW50SW5zdGFuY2U9dm9pZCAwLHRoaXMucGFyZW50PXZvaWQgMCx0aGlzLnJhdz0hMSx0aGlzLmlzU3RhdGljPSExLHRoaXMuaXNSb290SW5zZXJ0PSEwLHRoaXMuaXNDb21tZW50PSExLHRoaXMuaXNDbG9uZWQ9ITEsdGhpcy5pc09uY2U9ITEsdGhpcy5hc3luY0ZhY3Rvcnk9cyx0aGlzLmFzeW5jTWV0YT12b2lkIDAsdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXI9ITF9LHVlPXtjaGlsZDp7Y29uZmlndXJhYmxlOiEwfX07dWUuY2hpbGQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2V9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxlLnByb3RvdHlwZSx1ZSk7dmFyIGZlPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPSIiKTt2YXIgdD1uZXcgbGU7cmV0dXJuIHQudGV4dD1lLHQuaXNDb21tZW50PSEwLHR9O2Z1bmN0aW9uIHBlKGUpe3JldHVybiBuZXcgbGUodm9pZCAwLHZvaWQgMCx2b2lkIDAsU3RyaW5nKGUpKX1mdW5jdGlvbiBkZShlKXt2YXIgdD1uZXcgbGUoZS50YWcsZS5kYXRhLGUuY2hpbGRyZW4sZS50ZXh0LGUuZWxtLGUuY29udGV4dCxlLmNvbXBvbmVudE9wdGlvbnMsZS5hc3luY0ZhY3RvcnkpO3JldHVybiB0Lm5zPWUubnMsdC5pc1N0YXRpYz1lLmlzU3RhdGljLHQua2V5PWUua2V5LHQuaXNDb21tZW50PWUuaXNDb21tZW50LHQuZm5Db250ZXh0PWUuZm5Db250ZXh0LHQuZm5PcHRpb25zPWUuZm5PcHRpb25zLHQuZm5TY29wZUlkPWUuZm5TY29wZUlkLHQuaXNDbG9uZWQ9ITAsdH12YXIgdmU9QXJyYXkucHJvdG90eXBlLGhlPU9iamVjdC5jcmVhdGUodmUpO1sicHVzaCIsInBvcCIsInNoaWZ0IiwidW5zaGlmdCIsInNwbGljZSIsInNvcnQiLCJyZXZlcnNlIl0uZm9yRWFjaChmdW5jdGlvbihvKXt2YXIgYT12ZVtvXTtOKGhlLG8sZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD1hcmd1bWVudHMubGVuZ3RoO3QtLTspZVt0XT1hcmd1bWVudHNbdF07dmFyIG4scj1hLmFwcGx5KHRoaXMsZSksaT10aGlzLl9fb2JfXztzd2l0Y2gobyl7Y2FzZSJwdXNoIjpjYXNlInVuc2hpZnQiOm49ZTticmVhaztjYXNlInNwbGljZSI6bj1lLnNsaWNlKDIpfXJldHVybiBuJiZpLm9ic2VydmVBcnJheShuKSxpLmRlcC5ub3RpZnkoKSxyfSl9KTt2YXIgbWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGUpLHllPSEwO2Z1bmN0aW9uIGdlKGUpe3llPWV9dmFyIF9lPWZ1bmN0aW9uKGUpeyh0aGlzLnZhbHVlPWUsdGhpcy5kZXA9bmV3IG9lLHRoaXMudm1Db3VudD0wLE4oZSwiX19vYl9fIix0aGlzKSxBcnJheS5pc0FycmF5KGUpKT8oKEg/YmU6JGUpKGUsaGUsbWUpLHRoaXMub2JzZXJ2ZUFycmF5KGUpKTp0aGlzLndhbGsoZSl9O2Z1bmN0aW9uIGJlKGUsdCxuKXtlLl9fcHJvdG9fXz10fWZ1bmN0aW9uICRlKGUsdCxuKXtmb3IodmFyIHI9MCxpPW4ubGVuZ3RoO3I8aTtyKyspe3ZhciBvPW5bcl07TihlLG8sdFtvXSl9fWZ1bmN0aW9uIHdlKGUsdCl7dmFyIG47aWYoUChlKSYmIShlIGluc3RhbmNlb2YgbGUpKXJldHVybiBwKGUsIl9fb2JfXyIpJiZlLl9fb2JfXyBpbnN0YW5jZW9mIF9lP249ZS5fX29iX186eWUmJiFZKCkmJihBcnJheS5pc0FycmF5KGUpfHxsKGUpKSYmT2JqZWN0LmlzRXh0ZW5zaWJsZShlKSYmIWUuX2lzVnVlJiYobj1uZXcgX2UoZSkpLHQmJm4mJm4udm1Db3VudCsrLG59ZnVuY3Rpb24gQ2UobixlLHIsdCxpKXt2YXIgbz1uZXcgb2UsYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSk7aWYoIWF8fCExIT09YS5jb25maWd1cmFibGUpe3ZhciBzPWEmJmEuZ2V0O3N8fDIhPT1hcmd1bWVudHMubGVuZ3RofHwocj1uW2VdKTt2YXIgYz1hJiZhLnNldCxsPSFpJiZ3ZShyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1zP3MuY2FsbChuKTpyO3JldHVybiBvZS50YXJnZXQmJihvLmRlcGVuZCgpLGwmJihsLmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KGUpJiZmdW5jdGlvbiBlKHQpe2Zvcih2YXIgbj12b2lkIDAscj0wLGk9dC5sZW5ndGg7cjxpO3IrKykobj10W3JdKSYmbi5fX29iX18mJm4uX19vYl9fLmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KG4pJiZlKG4pfShlKSkpLGV9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1zP3MuY2FsbChuKTpyO2U9PT10fHxlIT1lJiZ0IT10fHwoYz9jLmNhbGwobixlKTpyPWUsbD0haSYmd2UoZSksby5ub3RpZnkoKSl9fSl9fWZ1bmN0aW9uIHhlKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpJiZpKHQpKXJldHVybiBlLmxlbmd0aD1NYXRoLm1heChlLmxlbmd0aCx0KSxlLnNwbGljZSh0LDEsbiksbjtpZih0IGluIGUmJiEodCBpbiBPYmplY3QucHJvdG90eXBlKSlyZXR1cm4gZVt0XT1uO3ZhciByPWUuX19vYl9fO3JldHVybiBlLl9pc1Z1ZXx8ciYmci52bUNvdW50P246cj8oQ2Uoci52YWx1ZSx0LG4pLHIuZGVwLm5vdGlmeSgpLG4pOmVbdF09bn1mdW5jdGlvbiBrZShlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkmJmkodCkpZS5zcGxpY2UodCwxKTtlbHNle3ZhciBuPWUuX19vYl9fO2UuX2lzVnVlfHxuJiZuLnZtQ291bnR8fHAoZSx0KSYmKGRlbGV0ZSBlW3RdLG4mJm4uZGVwLm5vdGlmeSgpKX19X2UucHJvdG90eXBlLndhbGs9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKGUpLG49MDtuPHQubGVuZ3RoO24rKylDZShlLHRbbl0pfSxfZS5wcm90b3R5cGUub2JzZXJ2ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl3ZShlW3RdKX07dmFyIEFlPWoub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO2Z1bmN0aW9uIE9lKGUsdCl7aWYoIXQpcmV0dXJuIGU7Zm9yKHZhciBuLHIsaSxvPU9iamVjdC5rZXlzKHQpLGE9MDthPG8ubGVuZ3RoO2ErKylyPWVbbj1vW2FdXSxpPXRbbl0scChlLG4pP2wocikmJmwoaSkmJk9lKHIsaSk6eGUoZSxuLGkpO3JldHVybiBlfWZ1bmN0aW9uIFNlKG4scixpKXtyZXR1cm4gaT9mdW5jdGlvbigpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiByP3IuY2FsbChpLGkpOnIsdD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmNhbGwoaSxpKTpuO3JldHVybiBlP09lKGUsdCk6dH06cj9uP2Z1bmN0aW9uKCl7cmV0dXJuIE9lKCJmdW5jdGlvbiI9PXR5cGVvZiByP3IuY2FsbCh0aGlzLHRoaXMpOnIsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5jYWxsKHRoaXMsdGhpcyk6bil9OnI6bn1mdW5jdGlvbiBUZShlLHQpe3JldHVybiB0P2U/ZS5jb25jYXQodCk6QXJyYXkuaXNBcnJheSh0KT90Olt0XTplfWZ1bmN0aW9uIEVlKGUsdCxuLHIpe3ZhciBpPU9iamVjdC5jcmVhdGUoZXx8bnVsbCk7cmV0dXJuIHQ/bShpLHQpOml9QWUuZGF0YT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4/U2UoZSx0LG4pOnQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6U2UoZSx0KX0sQS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0FlW2VdPVRlfSksay5mb3JFYWNoKGZ1bmN0aW9uKGUpe0FlW2UrInMiXT1FZX0pLEFlLndhdGNoPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGU9PT1HJiYoZT12b2lkIDApLHQ9PT1HJiYodD12b2lkIDApLCF0KXJldHVybiBPYmplY3QuY3JlYXRlKGV8fG51bGwpO2lmKCFlKXJldHVybiB0O3ZhciBpPXt9O2Zvcih2YXIgbyBpbiBtKGksZSksdCl7dmFyIGE9aVtvXSxzPXRbb107YSYmIUFycmF5LmlzQXJyYXkoYSkmJihhPVthXSksaVtvXT1hP2EuY29uY2F0KHMpOkFycmF5LmlzQXJyYXkocyk/czpbc119cmV0dXJuIGl9LEFlLnByb3BzPUFlLm1ldGhvZHM9QWUuaW5qZWN0PUFlLmNvbXB1dGVkPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFlKXJldHVybiB0O3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIG0oaSxlKSx0JiZtKGksdCksaX0sQWUucHJvdmlkZT1TZTt2YXIgamU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD9lOnR9O2Z1bmN0aW9uIE5lKG4scixpKXsiZnVuY3Rpb24iPT10eXBlb2YgciYmKHI9ci5vcHRpb25zKSxmdW5jdGlvbihlLHQpe3ZhciBuPWUucHJvcHM7aWYobil7dmFyIHIsaSxvPXt9O2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHI9bi5sZW5ndGg7ci0tOykic3RyaW5nIj09dHlwZW9mKGk9bltyXSkmJihvW2coaSldPXt0eXBlOm51bGx9KTtlbHNlIGlmKGwobikpZm9yKHZhciBhIGluIG4paT1uW2FdLG9bZyhhKV09bChpKT9pOnt0eXBlOml9O2UucHJvcHM9b319KHIpLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5pbmplY3Q7aWYobil7dmFyIHI9ZS5pbmplY3Q9e307aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKylyW25baV1dPXtmcm9tOm5baV19O2Vsc2UgaWYobChuKSlmb3IodmFyIG8gaW4gbil7dmFyIGE9bltvXTtyW29dPWwoYSk/bSh7ZnJvbTpvfSxhKTp7ZnJvbTphfX19fShyKSxmdW5jdGlvbihlKXt2YXIgdD1lLmRpcmVjdGl2ZXM7aWYodClmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTsiZnVuY3Rpb24iPT10eXBlb2YgciYmKHRbbl09e2JpbmQ6cix1cGRhdGU6cn0pfX0ocik7dmFyIGU9ci5leHRlbmRzO2lmKGUmJihuPU5lKG4sZSxpKSksci5taXhpbnMpZm9yKHZhciB0PTAsbz1yLm1peGlucy5sZW5ndGg7dDxvO3QrKyluPU5lKG4sci5taXhpbnNbdF0saSk7dmFyIGEscz17fTtmb3IoYSBpbiBuKWMoYSk7Zm9yKGEgaW4gcilwKG4sYSl8fGMoYSk7ZnVuY3Rpb24gYyhlKXt2YXIgdD1BZVtlXXx8amU7c1tlXT10KG5bZV0scltlXSxpLGUpfXJldHVybiBzfWZ1bmN0aW9uIExlKGUsdCxuLHIpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGk9ZVt0XTtpZihwKGksbikpcmV0dXJuIGlbbl07dmFyIG89ZyhuKTtpZihwKGksbykpcmV0dXJuIGlbb107dmFyIGE9ZChvKTtyZXR1cm4gcChpLGEpP2lbYV06aVtuXXx8aVtvXXx8aVthXX19ZnVuY3Rpb24gSWUoZSx0LG4scil7dmFyIGk9dFtlXSxvPSFwKG4sZSksYT1uW2VdLHM9UGUoQm9vbGVhbixpLnR5cGUpO2lmKC0xPHMpaWYobyYmIXAoaSwiZGVmYXVsdCIpKWE9ITE7ZWxzZSBpZigiIj09PWF8fGE9PT1fKGUpKXt2YXIgYz1QZShTdHJpbmcsaS50eXBlKTsoYzwwfHxzPGMpJiYoYT0hMCl9aWYodm9pZCAwPT09YSl7YT1mdW5jdGlvbihlLHQsbil7aWYoIXAodCwiZGVmYXVsdCIpKXJldHVybjt2YXIgcj10LmRlZmF1bHQ7aWYoZSYmZS4kb3B0aW9ucy5wcm9wc0RhdGEmJnZvaWQgMD09PWUuJG9wdGlvbnMucHJvcHNEYXRhW25dJiZ2b2lkIDAhPT1lLl9wcm9wc1tuXSlyZXR1cm4gZS5fcHJvcHNbbl07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHImJiJGdW5jdGlvbiIhPT1NZSh0LnR5cGUpP3IuY2FsbChlKTpyfShyLGksZSk7dmFyIGw9eWU7Z2UoITApLHdlKGEpLGdlKGwpfXJldHVybiBhfWZ1bmN0aW9uIE1lKGUpe3ZhciB0PWUmJmUudG9TdHJpbmcoKS5tYXRjaCgvXlxzKmZ1bmN0aW9uIChcdyspLyk7cmV0dXJuIHQ/dFsxXToiIn1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBNZShlKT09PU1lKHQpfWZ1bmN0aW9uIFBlKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIERlKHQsZSk/MDotMTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYoRGUodFtuXSxlKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBGZShlLHQsbil7aWYodClmb3IodmFyIHI9dDtyPXIuJHBhcmVudDspe3ZhciBpPXIuJG9wdGlvbnMuZXJyb3JDYXB0dXJlZDtpZihpKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKXRyeXtpZighMT09PWlbb10uY2FsbChyLGUsdCxuKSlyZXR1cm59Y2F0Y2goZSl7UmUoZSxyLCJlcnJvckNhcHR1cmVkIGhvb2siKX19UmUoZSx0LG4pfWZ1bmN0aW9uIFJlKGUsdCxuKXtpZihqLmVycm9ySGFuZGxlcil0cnl7cmV0dXJuIGouZXJyb3JIYW5kbGVyLmNhbGwobnVsbCxlLHQsbil9Y2F0Y2goZSl7SGUoZSxudWxsLCJjb25maWcuZXJyb3JIYW5kbGVyIil9SGUoZSx0LG4pfWZ1bmN0aW9uIEhlKGUsdCxuKXtpZighQiYmIVV8fCJ1bmRlZmluZWQiPT10eXBlb2YgY29uc29sZSl0aHJvdyBlO2NvbnNvbGUuZXJyb3IoZSl9dmFyIEJlLFVlLFZlPVtdLHplPSExO2Z1bmN0aW9uIEtlKCl7emU9ITE7Zm9yKHZhciBlPVZlLnNsaWNlKDApLHQ9VmUubGVuZ3RoPTA7dDxlLmxlbmd0aDt0KyspZVt0XSgpfXZhciBKZT0hMTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNldEltbWVkaWF0ZSYmZWUoc2V0SW1tZWRpYXRlKSlVZT1mdW5jdGlvbigpe3NldEltbWVkaWF0ZShLZSl9O2Vsc2UgaWYoInVuZGVmaW5lZCI9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbHx8IWVlKE1lc3NhZ2VDaGFubmVsKSYmIltvYmplY3QgTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcl0iIT09TWVzc2FnZUNoYW5uZWwudG9TdHJpbmcoKSlVZT1mdW5jdGlvbigpe3NldFRpbWVvdXQoS2UsMCl9O2Vsc2V7dmFyIHFlPW5ldyBNZXNzYWdlQ2hhbm5lbCxXZT1xZS5wb3J0MjtxZS5wb3J0MS5vbm1lc3NhZ2U9S2UsVWU9ZnVuY3Rpb24oKXtXZS5wb3N0TWVzc2FnZSgxKX19aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlJiZlZShQcm9taXNlKSl7dmFyIEdlPVByb21pc2UucmVzb2x2ZSgpO0JlPWZ1bmN0aW9uKCl7R2UudGhlbihLZSksVyYmc2V0VGltZW91dCgkKX19ZWxzZSBCZT1VZTtmdW5jdGlvbiBaZShlLHQpe3ZhciBuO2lmKFZlLnB1c2goZnVuY3Rpb24oKXtpZihlKXRyeXtlLmNhbGwodCl9Y2F0Y2goZSl7RmUoZSx0LCJuZXh0VGljayIpfWVsc2UgbiYmbih0KX0pLHplfHwoemU9ITAsSmU/VWUoKTpCZSgpKSwhZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtuPWV9KX12YXIgWGU9bmV3IHRlO2Z1bmN0aW9uIFllKGUpeyFmdW5jdGlvbiBlKHQsbil7dmFyIHIsaTt2YXIgbz1BcnJheS5pc0FycmF5KHQpO2lmKCFvJiYhUCh0KXx8T2JqZWN0LmlzRnJvemVuKHQpfHx0IGluc3RhbmNlb2YgbGUpcmV0dXJuO2lmKHQuX19vYl9fKXt2YXIgYT10Ll9fb2JfXy5kZXAuaWQ7aWYobi5oYXMoYSkpcmV0dXJuO24uYWRkKGEpfWlmKG8pZm9yKHI9dC5sZW5ndGg7ci0tOyllKHRbcl0sbik7ZWxzZSBmb3IoaT1PYmplY3Qua2V5cyh0KSxyPWkubGVuZ3RoO3ItLTspZSh0W2lbcl1dLG4pfShlLFhlKSxYZS5jbGVhcigpfXZhciBRZSxldD1lKGZ1bmN0aW9uKGUpe3ZhciB0PSImIj09PWUuY2hhckF0KDApLG49In4iPT09KGU9dD9lLnNsaWNlKDEpOmUpLmNoYXJBdCgwKSxyPSIhIj09PShlPW4/ZS5zbGljZSgxKTplKS5jaGFyQXQoMCk7cmV0dXJue25hbWU6ZT1yP2Uuc2xpY2UoMSk6ZSxvbmNlOm4sY2FwdHVyZTpyLHBhc3NpdmU6dH19KTtmdW5jdGlvbiB0dChlKXtmdW5jdGlvbiBpKCl7dmFyIGU9YXJndW1lbnRzLHQ9aS5mbnM7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQuYXBwbHkobnVsbCxhcmd1bWVudHMpO2Zvcih2YXIgbj10LnNsaWNlKCkscj0wO3I8bi5sZW5ndGg7cisrKW5bcl0uYXBwbHkobnVsbCxlKX1yZXR1cm4gaS5mbnM9ZSxpfWZ1bmN0aW9uIG50KGUsdCxuLHIsaSl7dmFyIG8sYSxzLGM7Zm9yKG8gaW4gZSlhPWVbb10scz10W29dLGM9ZXQobyksTShhKXx8KE0ocyk/KE0oYS5mbnMpJiYoYT1lW29dPXR0KGEpKSxuKGMubmFtZSxhLGMub25jZSxjLmNhcHR1cmUsYy5wYXNzaXZlLGMucGFyYW1zKSk6YSE9PXMmJihzLmZucz1hLGVbb109cykpO2ZvcihvIGluIHQpTShlW29dKSYmcigoYz1ldChvKSkubmFtZSx0W29dLGMuY2FwdHVyZSl9ZnVuY3Rpb24gcnQoZSx0LG4pe3ZhciByO2UgaW5zdGFuY2VvZiBsZSYmKGU9ZS5kYXRhLmhvb2t8fChlLmRhdGEuaG9vaz17fSkpO3ZhciBpPWVbdF07ZnVuY3Rpb24gbygpe24uYXBwbHkodGhpcyxhcmd1bWVudHMpLGYoci5mbnMsbyl9TShpKT9yPXR0KFtvXSk6RChpLmZucykmJlMoaS5tZXJnZWQpPyhyPWkpLmZucy5wdXNoKG8pOnI9dHQoW2ksb10pLHIubWVyZ2VkPSEwLGVbdF09cn1mdW5jdGlvbiBpdChlLHQsbixyLGkpe2lmKEQodCkpe2lmKHAodCxuKSlyZXR1cm4gZVtuXT10W25dLGl8fGRlbGV0ZSB0W25dLCEwO2lmKHAodCxyKSlyZXR1cm4gZVtuXT10W3JdLGl8fGRlbGV0ZSB0W3JdLCEwfXJldHVybiExfWZ1bmN0aW9uIG90KGUpe3JldHVybiBUKGUpP1twZShlKV06QXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbiBlKHQsbil7dmFyIHI9W107dmFyIGksbyxhLHM7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylNKG89dFtpXSl8fCJib29sZWFuIj09dHlwZW9mIG98fChhPXIubGVuZ3RoLTEscz1yW2FdLEFycmF5LmlzQXJyYXkobyk/MDxvLmxlbmd0aCYmKGF0KChvPWUobywobnx8IiIpKyJfIitpKSlbMF0pJiZhdChzKSYmKHJbYV09cGUocy50ZXh0K29bMF0udGV4dCksby5zaGlmdCgpKSxyLnB1c2guYXBwbHkocixvKSk6VChvKT9hdChzKT9yW2FdPXBlKHMudGV4dCtvKToiIiE9PW8mJnIucHVzaChwZShvKSk6YXQobykmJmF0KHMpP3JbYV09cGUocy50ZXh0K28udGV4dCk6KFModC5faXNWTGlzdCkmJkQoby50YWcpJiZNKG8ua2V5KSYmRChuKSYmKG8ua2V5PSJfX3ZsaXN0IituKyJfIitpKyJfXyIpLHIucHVzaChvKSkpO3JldHVybiByfShlKTp2b2lkIDB9ZnVuY3Rpb24gYXQoZSl7cmV0dXJuIEQoZSkmJkQoZS50ZXh0KSYmITE9PT1lLmlzQ29tbWVudH1mdW5jdGlvbiBzdChlLHQpe3JldHVybihlLl9fZXNNb2R1bGV8fG5lJiYiTW9kdWxlIj09PWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkmJihlPWUuZGVmYXVsdCksUChlKT90LmV4dGVuZChlKTplfWZ1bmN0aW9uIGN0KGUpe3JldHVybiBlLmlzQ29tbWVudCYmZS5hc3luY0ZhY3Rvcnl9ZnVuY3Rpb24gbHQoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XTtpZihEKG4pJiYoRChuLmNvbXBvbmVudE9wdGlvbnMpfHxjdChuKSkpcmV0dXJuIG59fWZ1bmN0aW9uIHV0KGUsdCxuKXtuP1FlLiRvbmNlKGUsdCk6UWUuJG9uKGUsdCl9ZnVuY3Rpb24gZnQoZSx0KXtRZS4kb2ZmKGUsdCl9ZnVuY3Rpb24gcHQoZSx0LG4pe1FlPWUsbnQodCxufHx7fSx1dCxmdCksUWU9dm9pZCAwfWZ1bmN0aW9uIGR0KGUsdCl7dmFyIG49e307aWYoIWUpcmV0dXJuIG47Zm9yKHZhciByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1lW3JdLGE9by5kYXRhO2lmKGEmJmEuYXR0cnMmJmEuYXR0cnMuc2xvdCYmZGVsZXRlIGEuYXR0cnMuc2xvdCxvLmNvbnRleHQhPT10JiZvLmZuQ29udGV4dCE9PXR8fCFhfHxudWxsPT1hLnNsb3QpKG4uZGVmYXVsdHx8KG4uZGVmYXVsdD1bXSkpLnB1c2gobyk7ZWxzZXt2YXIgcz1hLnNsb3QsYz1uW3NdfHwobltzXT1bXSk7InRlbXBsYXRlIj09PW8udGFnP2MucHVzaC5hcHBseShjLG8uY2hpbGRyZW58fFtdKTpjLnB1c2gobyl9fWZvcih2YXIgbCBpbiBuKW5bbF0uZXZlcnkodnQpJiZkZWxldGUgbltsXTtyZXR1cm4gbn1mdW5jdGlvbiB2dChlKXtyZXR1cm4gZS5pc0NvbW1lbnQmJiFlLmFzeW5jRmFjdG9yeXx8IiAiPT09ZS50ZXh0fWZ1bmN0aW9uIGh0KGUsdCl7dD10fHx7fTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylBcnJheS5pc0FycmF5KGVbbl0pP2h0KGVbbl0sdCk6dFtlW25dLmtleV09ZVtuXS5mbjtyZXR1cm4gdH12YXIgbXQ9bnVsbDtmdW5jdGlvbiB5dChlKXtmb3IoO2UmJihlPWUuJHBhcmVudCk7KWlmKGUuX2luYWN0aXZlKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGd0KGUsdCl7aWYodCl7aWYoZS5fZGlyZWN0SW5hY3RpdmU9ITEseXQoZSkpcmV0dXJufWVsc2UgaWYoZS5fZGlyZWN0SW5hY3RpdmUpcmV0dXJuO2lmKGUuX2luYWN0aXZlfHxudWxsPT09ZS5faW5hY3RpdmUpe2UuX2luYWN0aXZlPSExO2Zvcih2YXIgbj0wO248ZS4kY2hpbGRyZW4ubGVuZ3RoO24rKylndChlLiRjaGlsZHJlbltuXSk7X3QoZSwiYWN0aXZhdGVkIil9fWZ1bmN0aW9uIF90KHQsbil7c2UoKTt2YXIgZT10LiRvcHRpb25zW25dO2lmKGUpZm9yKHZhciByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXRyeXtlW3JdLmNhbGwodCl9Y2F0Y2goZSl7RmUoZSx0LG4rIiBob29rIil9dC5faGFzSG9va0V2ZW50JiZ0LiRlbWl0KCJob29rOiIrbiksY2UoKX12YXIgYnQ9W10sJHQ9W10sd3Q9e30sQ3Q9ITEseHQ9ITEsa3Q9MDtmdW5jdGlvbiBBdCgpe3ZhciBlLHQ7Zm9yKHh0PSEwLGJ0LnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pZC10LmlkfSksa3Q9MDtrdDxidC5sZW5ndGg7a3QrKyl0PShlPWJ0W2t0XSkuaWQsd3RbdF09bnVsbCxlLnJ1bigpO3ZhciBuPSR0LnNsaWNlKCkscj1idC5zbGljZSgpO2t0PWJ0Lmxlbmd0aD0kdC5sZW5ndGg9MCx3dD17fSxDdD14dD0hMSxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLl9pbmFjdGl2ZT0hMCxndChlW3RdLCEwKX0obiksZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7Zm9yKDt0LS07KXt2YXIgbj1lW3RdLHI9bi52bTtyLl93YXRjaGVyPT09biYmci5faXNNb3VudGVkJiZfdChyLCJ1cGRhdGVkIil9fShyKSxRJiZqLmRldnRvb2xzJiZRLmVtaXQoImZsdXNoIil9dmFyIE90PTAsU3Q9ZnVuY3Rpb24oZSx0LG4scixpKXt0aGlzLnZtPWUsaSYmKGUuX3dhdGNoZXI9dGhpcyksZS5fd2F0Y2hlcnMucHVzaCh0aGlzKSxyPyh0aGlzLmRlZXA9ISFyLmRlZXAsdGhpcy51c2VyPSEhci51c2VyLHRoaXMubGF6eT0hIXIubGF6eSx0aGlzLnN5bmM9ISFyLnN5bmMpOnRoaXMuZGVlcD10aGlzLnVzZXI9dGhpcy5sYXp5PXRoaXMuc3luYz0hMSx0aGlzLmNiPW4sdGhpcy5pZD0rK090LHRoaXMuYWN0aXZlPSEwLHRoaXMuZGlydHk9dGhpcy5sYXp5LHRoaXMuZGVwcz1bXSx0aGlzLm5ld0RlcHM9W10sdGhpcy5kZXBJZHM9bmV3IHRlLHRoaXMubmV3RGVwSWRzPW5ldyB0ZSx0aGlzLmV4cHJlc3Npb249IiIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGhpcy5nZXR0ZXI9dDoodGhpcy5nZXR0ZXI9ZnVuY3Rpb24oZSl7aWYoIUwudGVzdChlKSl7dmFyIG49ZS5zcGxpdCgiLiIpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PG4ubGVuZ3RoO3QrKyl7aWYoIWUpcmV0dXJuO2U9ZVtuW3RdXX1yZXR1cm4gZX19fSh0KSx0aGlzLmdldHRlcnx8KHRoaXMuZ2V0dGVyPWZ1bmN0aW9uKCl7fSkpLHRoaXMudmFsdWU9dGhpcy5sYXp5P3ZvaWQgMDp0aGlzLmdldCgpfTtTdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7dmFyIGU7c2UodGhpcyk7dmFyIHQ9dGhpcy52bTt0cnl7ZT10aGlzLmdldHRlci5jYWxsKHQsdCl9Y2F0Y2goZSl7aWYoIXRoaXMudXNlcil0aHJvdyBlO0ZlKGUsdCwnZ2V0dGVyIGZvciB3YXRjaGVyICInK3RoaXMuZXhwcmVzc2lvbisnIicpfWZpbmFsbHl7dGhpcy5kZWVwJiZZZShlKSxjZSgpLHRoaXMuY2xlYW51cERlcHMoKX1yZXR1cm4gZX0sU3QucHJvdG90eXBlLmFkZERlcD1mdW5jdGlvbihlKXt2YXIgdD1lLmlkO3RoaXMubmV3RGVwSWRzLmhhcyh0KXx8KHRoaXMubmV3RGVwSWRzLmFkZCh0KSx0aGlzLm5ld0RlcHMucHVzaChlKSx0aGlzLmRlcElkcy5oYXModCl8fGUuYWRkU3ViKHRoaXMpKX0sU3QucHJvdG90eXBlLmNsZWFudXBEZXBzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVwcy5sZW5ndGg7ZS0tOyl7dmFyIHQ9dGhpcy5kZXBzW2VdO3RoaXMubmV3RGVwSWRzLmhhcyh0LmlkKXx8dC5yZW1vdmVTdWIodGhpcyl9dmFyIG49dGhpcy5kZXBJZHM7dGhpcy5kZXBJZHM9dGhpcy5uZXdEZXBJZHMsdGhpcy5uZXdEZXBJZHM9bix0aGlzLm5ld0RlcElkcy5jbGVhcigpLG49dGhpcy5kZXBzLHRoaXMuZGVwcz10aGlzLm5ld0RlcHMsdGhpcy5uZXdEZXBzPW4sdGhpcy5uZXdEZXBzLmxlbmd0aD0wfSxTdC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5sYXp5P3RoaXMuZGlydHk9ITA6dGhpcy5zeW5jP3RoaXMucnVuKCk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pZDtpZihudWxsPT13dFt0XSl7aWYod3RbdF09ITAseHQpe2Zvcih2YXIgbj1idC5sZW5ndGgtMTtrdDxuJiZidFtuXS5pZD5lLmlkOyluLS07YnQuc3BsaWNlKG4rMSwwLGUpfWVsc2UgYnQucHVzaChlKTtDdHx8KEN0PSEwLFplKEF0KSl9fSh0aGlzKX0sU3QucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZlKXt2YXIgZT10aGlzLmdldCgpO2lmKGUhPT10aGlzLnZhbHVlfHxQKGUpfHx0aGlzLmRlZXApe3ZhciB0PXRoaXMudmFsdWU7aWYodGhpcy52YWx1ZT1lLHRoaXMudXNlcil0cnl7dGhpcy5jYi5jYWxsKHRoaXMudm0sZSx0KX1jYXRjaChlKXtGZShlLHRoaXMudm0sJ2NhbGxiYWNrIGZvciB3YXRjaGVyICInK3RoaXMuZXhwcmVzc2lvbisnIicpfWVsc2UgdGhpcy5jYi5jYWxsKHRoaXMudm0sZSx0KX19fSxTdC5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuZ2V0KCksdGhpcy5kaXJ0eT0hMX0sU3QucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmRlcHMubGVuZ3RoO2UtLTspdGhpcy5kZXBzW2VdLmRlcGVuZCgpfSxTdC5wcm90b3R5cGUudGVhcmRvd249ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2ZSl7dGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZHx8Zih0aGlzLnZtLl93YXRjaGVycyx0aGlzKTtmb3IodmFyIGU9dGhpcy5kZXBzLmxlbmd0aDtlLS07KXRoaXMuZGVwc1tlXS5yZW1vdmVTdWIodGhpcyk7dGhpcy5hY3RpdmU9ITF9fTt2YXIgVHQ9e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDokLHNldDokfTtmdW5jdGlvbiBFdChlLHQsbil7VHQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdF1bbl19LFR0LnNldD1mdW5jdGlvbihlKXt0aGlzW3RdW25dPWV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sVHQpfWZ1bmN0aW9uIGp0KGUpe2UuX3dhdGNoZXJzPVtdO3ZhciB0PWUuJG9wdGlvbnM7dC5wcm9wcyYmZnVuY3Rpb24obixyKXt2YXIgaT1uLiRvcHRpb25zLnByb3BzRGF0YXx8e30sbz1uLl9wcm9wcz17fSxhPW4uJG9wdGlvbnMuX3Byb3BLZXlzPVtdO24uJHBhcmVudCYmZ2UoITEpO3ZhciBlPWZ1bmN0aW9uKGUpe2EucHVzaChlKTt2YXIgdD1JZShlLHIsaSxuKTtDZShvLGUsdCksZSBpbiBufHxFdChuLCJfcHJvcHMiLGUpfTtmb3IodmFyIHQgaW4gcillKHQpO2dlKCEwKX0oZSx0LnByb3BzKSx0Lm1ldGhvZHMmJmZ1bmN0aW9uKGUsdCl7ZS4kb3B0aW9ucy5wcm9wcztmb3IodmFyIG4gaW4gdCllW25dPW51bGw9PXRbbl0/JDp2KHRbbl0sZSl9KGUsdC5tZXRob2RzKSx0LmRhdGE/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucy5kYXRhO2wodD1lLl9kYXRhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCl7c2UoKTt0cnl7cmV0dXJuIGUuY2FsbCh0LHQpfWNhdGNoKGUpe3JldHVybiBGZShlLHQsImRhdGEoKSIpLHt9fWZpbmFsbHl7Y2UoKX19KHQsZSk6dHx8e30pfHwodD17fSk7dmFyIG49T2JqZWN0LmtleXModCkscj1lLiRvcHRpb25zLnByb3BzLGk9KGUuJG9wdGlvbnMubWV0aG9kcyxuLmxlbmd0aCk7Zm9yKDtpLS07KXt2YXIgbz1uW2ldO3ImJnAocixvKXx8KHZvaWQgMCwzNiE9PShhPShvKyIiKS5jaGFyQ29kZUF0KDApKSYmOTUhPT1hJiZFdChlLCJfZGF0YSIsbykpfXZhciBhO3dlKHQsITApfShlKTp3ZShlLl9kYXRhPXt9LCEwKSx0LmNvbXB1dGVkJiZmdW5jdGlvbihlLHQpe3ZhciBuPWUuX2NvbXB1dGVkV2F0Y2hlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSxyPVkoKTtmb3IodmFyIGkgaW4gdCl7dmFyIG89dFtpXSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBvP286by5nZXQ7cnx8KG5baV09bmV3IFN0KGUsYXx8JCwkLE50KSksaSBpbiBlfHxMdChlLGksbyl9fShlLHQuY29tcHV0ZWQpLHQud2F0Y2gmJnQud2F0Y2ghPT1HJiZmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXt2YXIgcj10W25dO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspTXQoZSxuLHJbaV0pO2Vsc2UgTXQoZSxuLHIpfX0oZSx0LndhdGNoKX12YXIgTnQ9e2xhenk6ITB9O2Z1bmN0aW9uIEx0KGUsdCxuKXt2YXIgcj0hWSgpOyJmdW5jdGlvbiI9PXR5cGVvZiBuPyhUdC5nZXQ9cj9JdCh0KTpuLFR0LnNldD0kKTooVHQuZ2V0PW4uZ2V0P3ImJiExIT09bi5jYWNoZT9JdCh0KTpuLmdldDokLFR0LnNldD1uLnNldD9uLnNldDokKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LFR0KX1mdW5jdGlvbiBJdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jb21wdXRlZFdhdGNoZXJzJiZ0aGlzLl9jb21wdXRlZFdhdGNoZXJzW3RdO2lmKGUpcmV0dXJuIGUuZGlydHkmJmUuZXZhbHVhdGUoKSxvZS50YXJnZXQmJmUuZGVwZW5kKCksZS52YWx1ZX19ZnVuY3Rpb24gTXQoZSx0LG4scil7cmV0dXJuIGwobikmJihuPShyPW4pLmhhbmRsZXIpLCJzdHJpbmciPT10eXBlb2YgbiYmKG49ZVtuXSksZS4kd2F0Y2godCxuLHIpfWZ1bmN0aW9uIER0KHQsZSl7aWYodCl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1uZT9SZWZsZWN0Lm93bktleXModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pOk9iamVjdC5rZXlzKHQpLGk9MDtpPHIubGVuZ3RoO2krKyl7Zm9yKHZhciBvPXJbaV0sYT10W29dLmZyb20scz1lO3M7KXtpZihzLl9wcm92aWRlZCYmcChzLl9wcm92aWRlZCxhKSl7bltvXT1zLl9wcm92aWRlZFthXTticmVha31zPXMuJHBhcmVudH1pZighcyYmImRlZmF1bHQiaW4gdFtvXSl7dmFyIGM9dFtvXS5kZWZhdWx0O25bb109ImZ1bmN0aW9uIj09dHlwZW9mIGM/Yy5jYWxsKGUpOmN9fXJldHVybiBufX1mdW5jdGlvbiBQdChlLHQpe3ZhciBuLHIsaSxvLGE7aWYoQXJyYXkuaXNBcnJheShlKXx8InN0cmluZyI9PXR5cGVvZiBlKWZvcihuPW5ldyBBcnJheShlLmxlbmd0aCkscj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluW3JdPXQoZVtyXSxyKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobj1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspbltyXT10KHIrMSxyKTtlbHNlIGlmKFAoZSkpZm9yKG89T2JqZWN0LmtleXMoZSksbj1uZXcgQXJyYXkoby5sZW5ndGgpLHI9MCxpPW8ubGVuZ3RoO3I8aTtyKyspYT1vW3JdLG5bcl09dChlW2FdLGEscik7cmV0dXJuIEQobikmJihuLl9pc1ZMaXN0PSEwKSxufWZ1bmN0aW9uIEZ0KGUsdCxuLHIpe3ZhciBpLG89dGhpcy4kc2NvcGVkU2xvdHNbZV07aWYobyluPW58fHt9LHImJihuPW0obSh7fSxyKSxuKSksaT1vKG4pfHx0O2Vsc2V7dmFyIGE9dGhpcy4kc2xvdHNbZV07YSYmKGEuX3JlbmRlcmVkPSEwKSxpPWF8fHR9dmFyIHM9biYmbi5zbG90O3JldHVybiBzP3RoaXMuJGNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIix7c2xvdDpzfSxpKTppfWZ1bmN0aW9uIFJ0KGUpe3JldHVybiBMZSh0aGlzLiRvcHRpb25zLCJmaWx0ZXJzIixlKXx8d31mdW5jdGlvbiBIdChlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpPy0xPT09ZS5pbmRleE9mKHQpOmUhPT10fWZ1bmN0aW9uIEJ0KGUsdCxuLHIsaSl7dmFyIG89ai5rZXlDb2Rlc1t0XXx8bjtyZXR1cm4gaSYmciYmIWoua2V5Q29kZXNbdF0/SHQoaSxyKTpvP0h0KG8sZSk6cj9fKHIpIT09dDp2b2lkIDB9ZnVuY3Rpb24gVXQobixyLGksbyxhKXtpZihpKWlmKFAoaSkpe3ZhciBzO0FycmF5LmlzQXJyYXkoaSkmJihpPWIoaSkpO3ZhciBlPWZ1bmN0aW9uKHQpe2lmKCJjbGFzcyI9PT10fHwic3R5bGUiPT09dHx8dSh0KSlzPW47ZWxzZXt2YXIgZT1uLmF0dHJzJiZuLmF0dHJzLnR5cGU7cz1vfHxqLm11c3RVc2VQcm9wKHIsZSx0KT9uLmRvbVByb3BzfHwobi5kb21Qcm9wcz17fSk6bi5hdHRyc3x8KG4uYXR0cnM9e30pfXQgaW4gc3x8KHNbdF09aVt0XSxhJiYoKG4ub258fChuLm9uPXt9KSlbInVwZGF0ZToiK3RdPWZ1bmN0aW9uKGUpe2lbdF09ZX0pKX07Zm9yKHZhciB0IGluIGkpZSh0KX1lbHNlO3JldHVybiBufWZ1bmN0aW9uIFZ0KGUsdCl7dmFyIG49dGhpcy5fc3RhdGljVHJlZXN8fCh0aGlzLl9zdGF0aWNUcmVlcz1bXSkscj1uW2VdO3JldHVybiByJiYhdHx8S3Qocj1uW2VdPXRoaXMuJG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zW2VdLmNhbGwodGhpcy5fcmVuZGVyUHJveHksbnVsbCx0aGlzKSwiX19zdGF0aWNfXyIrZSwhMSkscn1mdW5jdGlvbiB6dChlLHQsbil7cmV0dXJuIEt0KGUsIl9fb25jZV9fIit0KyhuPyJfIituOiIiKSwhMCksZX1mdW5jdGlvbiBLdChlLHQsbil7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdJiYic3RyaW5nIiE9dHlwZW9mIGVbcl0mJkp0KGVbcl0sdCsiXyIrcixuKTtlbHNlIEp0KGUsdCxuKX1mdW5jdGlvbiBKdChlLHQsbil7ZS5pc1N0YXRpYz0hMCxlLmtleT10LGUuaXNPbmNlPW59ZnVuY3Rpb24gcXQoZSx0KXtpZih0KWlmKGwodCkpe3ZhciBuPWUub249ZS5vbj9tKHt9LGUub24pOnt9O2Zvcih2YXIgciBpbiB0KXt2YXIgaT1uW3JdLG89dFtyXTtuW3JdPWk/W10uY29uY2F0KGksbyk6b319ZWxzZTtyZXR1cm4gZX1mdW5jdGlvbiBXdChlKXtlLl9vPXp0LGUuX249RixlLl9zPXQsZS5fbD1QdCxlLl90PUZ0LGUuX3E9QyxlLl9pPXgsZS5fbT1WdCxlLl9mPVJ0LGUuX2s9QnQsZS5fYj1VdCxlLl92PXBlLGUuX2U9ZmUsZS5fdT1odCxlLl9nPXF0fWZ1bmN0aW9uIEd0KGUsdCxuLG8scil7dmFyIGEscz1yLm9wdGlvbnM7cChvLCJfdWlkIik/KGE9T2JqZWN0LmNyZWF0ZShvKSkuX29yaWdpbmFsPW86bz0oYT1vKS5fb3JpZ2luYWw7dmFyIGk9UyhzLl9jb21waWxlZCksYz0haTt0aGlzLmRhdGE9ZSx0aGlzLnByb3BzPXQsdGhpcy5jaGlsZHJlbj1uLHRoaXMucGFyZW50PW8sdGhpcy5saXN0ZW5lcnM9ZS5vbnx8eSx0aGlzLmluamVjdGlvbnM9RHQocy5pbmplY3QsbyksdGhpcy5zbG90cz1mdW5jdGlvbigpe3JldHVybiBkdChuLG8pfSxpJiYodGhpcy4kb3B0aW9ucz1zLHRoaXMuJHNsb3RzPXRoaXMuc2xvdHMoKSx0aGlzLiRzY29wZWRTbG90cz1lLnNjb3BlZFNsb3RzfHx5KSxzLl9zY29wZUlkP3RoaXMuX2M9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9cm4oYSxlLHQsbixyLGMpO3JldHVybiBpJiYhQXJyYXkuaXNBcnJheShpKSYmKGkuZm5TY29wZUlkPXMuX3Njb3BlSWQsaS5mbkNvbnRleHQ9byksaX06dGhpcy5fYz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gcm4oYSxlLHQsbixyLGMpfX1mdW5jdGlvbiBadChlLHQsbixyKXt2YXIgaT1kZShlKTtyZXR1cm4gaS5mbkNvbnRleHQ9bixpLmZuT3B0aW9ucz1yLHQuc2xvdCYmKChpLmRhdGF8fChpLmRhdGE9e30pKS5zbG90PXQuc2xvdCksaX1mdW5jdGlvbiBYdChlLHQpe2Zvcih2YXIgbiBpbiB0KWVbZyhuKV09dFtuXX1XdChHdC5wcm90b3R5cGUpO3ZhciBZdD17aW5pdDpmdW5jdGlvbihlLHQsbixyKXtpZihlLmNvbXBvbmVudEluc3RhbmNlJiYhZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQmJmUuZGF0YS5rZWVwQWxpdmUpe3ZhciBpPWU7WXQucHJlcGF0Y2goaSxpKX1lbHNleyhlLmNvbXBvbmVudEluc3RhbmNlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXtfaXNDb21wb25lbnQ6ITAscGFyZW50OnQsX3BhcmVudFZub2RlOmUsX3BhcmVudEVsbTpufHxudWxsLF9yZWZFbG06cnx8bnVsbH0sbz1lLmRhdGEuaW5saW5lVGVtcGxhdGU7RChvKSYmKGkucmVuZGVyPW8ucmVuZGVyLGkuc3RhdGljUmVuZGVyRm5zPW8uc3RhdGljUmVuZGVyRm5zKTtyZXR1cm4gbmV3IGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKGkpfShlLG10LG4scikpLiRtb3VudCh0P2UuZWxtOnZvaWQgMCx0KX19LHByZXBhdGNoOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5jb21wb25lbnRPcHRpb25zOyFmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSEhKGl8fGUuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVufHxyLmRhdGEuc2NvcGVkU2xvdHN8fGUuJHNjb3BlZFNsb3RzIT09eSk7aWYoZS4kb3B0aW9ucy5fcGFyZW50Vm5vZGU9cixlLiR2bm9kZT1yLGUuX3Zub2RlJiYoZS5fdm5vZGUucGFyZW50PXIpLGUuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuPWksZS4kYXR0cnM9ci5kYXRhLmF0dHJzfHx5LGUuJGxpc3RlbmVycz1ufHx5LHQmJmUuJG9wdGlvbnMucHJvcHMpe2dlKCExKTtmb3IodmFyIGE9ZS5fcHJvcHMscz1lLiRvcHRpb25zLl9wcm9wS2V5c3x8W10sYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgbD1zW2NdLHU9ZS4kb3B0aW9ucy5wcm9wczthW2xdPUllKGwsdSx0LGUpfWdlKCEwKSxlLiRvcHRpb25zLnByb3BzRGF0YT10fW49bnx8eTt2YXIgZj1lLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzPW4scHQoZSxuLGYpLG8mJihlLiRzbG90cz1kdChpLHIuY29udGV4dCksZS4kZm9yY2VVcGRhdGUoKSl9KHQuY29tcG9uZW50SW5zdGFuY2U9ZS5jb21wb25lbnRJbnN0YW5jZSxuLnByb3BzRGF0YSxuLmxpc3RlbmVycyx0LG4uY2hpbGRyZW4pfSxpbnNlcnQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLmNvbnRleHQscj1lLmNvbXBvbmVudEluc3RhbmNlO3IuX2lzTW91bnRlZHx8KHIuX2lzTW91bnRlZD0hMCxfdChyLCJtb3VudGVkIikpLGUuZGF0YS5rZWVwQWxpdmUmJihuLl9pc01vdW50ZWQ/KCh0PXIpLl9pbmFjdGl2ZT0hMSwkdC5wdXNoKHQpKTpndChyLCEwKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb21wb25lbnRJbnN0YW5jZTt0Ll9pc0Rlc3Ryb3llZHx8KGUuZGF0YS5rZWVwQWxpdmU/ZnVuY3Rpb24gZSh0LG4pe2lmKCEobiYmKHQuX2RpcmVjdEluYWN0aXZlPSEwLHl0KHQpKXx8dC5faW5hY3RpdmUpKXt0Ll9pbmFjdGl2ZT0hMDtmb3IodmFyIHI9MDtyPHQuJGNoaWxkcmVuLmxlbmd0aDtyKyspZSh0LiRjaGlsZHJlbltyXSk7X3QodCwiZGVhY3RpdmF0ZWQiKX19KHQsITApOnQuJGRlc3Ryb3koKSl9fSxRdD1PYmplY3Qua2V5cyhZdCk7ZnVuY3Rpb24gZW4oZSx0LG4scixpKXtpZighTShlKSl7dmFyIG89bi4kb3B0aW9ucy5fYmFzZTtpZihQKGUpJiYoZT1vLmV4dGVuZChlKSksImZ1bmN0aW9uIj09dHlwZW9mIGUpe3ZhciBhLHMsYyxsLHUsZixwO2lmKE0oZS5jaWQpJiZ2b2lkIDA9PT0oZT1mdW5jdGlvbih0LG4sZSl7aWYoUyh0LmVycm9yKSYmRCh0LmVycm9yQ29tcCkpcmV0dXJuIHQuZXJyb3JDb21wO2lmKEQodC5yZXNvbHZlZCkpcmV0dXJuIHQucmVzb2x2ZWQ7aWYoUyh0LmxvYWRpbmcpJiZEKHQubG9hZGluZ0NvbXApKXJldHVybiB0LmxvYWRpbmdDb21wO2lmKCFEKHQuY29udGV4dHMpKXt2YXIgcj10LmNvbnRleHRzPVtlXSxpPSEwLG89ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspcltlXS4kZm9yY2VVcGRhdGUoKX0sYT1SKGZ1bmN0aW9uKGUpe3QucmVzb2x2ZWQ9c3QoZSxuKSxpfHxvKCl9KSxzPVIoZnVuY3Rpb24oZSl7RCh0LmVycm9yQ29tcCkmJih0LmVycm9yPSEwLG8oKSl9KSxjPXQoYSxzKTtyZXR1cm4gUChjKSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW4/TSh0LnJlc29sdmVkKSYmYy50aGVuKGEscyk6RChjLmNvbXBvbmVudCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmNvbXBvbmVudC50aGVuJiYoYy5jb21wb25lbnQudGhlbihhLHMpLEQoYy5lcnJvcikmJih0LmVycm9yQ29tcD1zdChjLmVycm9yLG4pKSxEKGMubG9hZGluZykmJih0LmxvYWRpbmdDb21wPXN0KGMubG9hZGluZyxuKSwwPT09Yy5kZWxheT90LmxvYWRpbmc9ITA6c2V0VGltZW91dChmdW5jdGlvbigpe00odC5yZXNvbHZlZCkmJk0odC5lcnJvcikmJih0LmxvYWRpbmc9ITAsbygpKX0sYy5kZWxheXx8MjAwKSksRChjLnRpbWVvdXQpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7TSh0LnJlc29sdmVkKSYmcyhudWxsKX0sYy50aW1lb3V0KSkpLGk9ITEsdC5sb2FkaW5nP3QubG9hZGluZ0NvbXA6dC5yZXNvbHZlZH10LmNvbnRleHRzLnB1c2goZSl9KGE9ZSxvLG4pKSlyZXR1cm4gcz1hLGM9dCxsPW4sdT1yLGY9aSwocD1mZSgpKS5hc3luY0ZhY3Rvcnk9cyxwLmFzeW5jTWV0YT17ZGF0YTpjLGNvbnRleHQ6bCxjaGlsZHJlbjp1LHRhZzpmfSxwO3Q9dHx8e30sZG4oZSksRCh0Lm1vZGVsKSYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm1vZGVsJiZlLm1vZGVsLnByb3B8fCJ2YWx1ZSIscj1lLm1vZGVsJiZlLm1vZGVsLmV2ZW50fHwiaW5wdXQiOyh0LnByb3BzfHwodC5wcm9wcz17fSkpW25dPXQubW9kZWwudmFsdWU7dmFyIGk9dC5vbnx8KHQub249e30pO0QoaVtyXSk/aVtyXT1bdC5tb2RlbC5jYWxsYmFja10uY29uY2F0KGlbcl0pOmlbcl09dC5tb2RlbC5jYWxsYmFja30oZS5vcHRpb25zLHQpO3ZhciBkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Lm9wdGlvbnMucHJvcHM7aWYoIU0ocikpe3ZhciBpPXt9LG89ZS5hdHRycyxhPWUucHJvcHM7aWYoRChvKXx8RChhKSlmb3IodmFyIHMgaW4gcil7dmFyIGM9XyhzKTtpdChpLGEscyxjLCEwKXx8aXQoaSxvLHMsYywhMSl9cmV0dXJuIGl9fSh0LGUpO2lmKFMoZS5vcHRpb25zLmZ1bmN0aW9uYWwpKXJldHVybiBmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPWUub3B0aW9ucyxhPXt9LHM9by5wcm9wcztpZihEKHMpKWZvcih2YXIgYyBpbiBzKWFbY109SWUoYyxzLHR8fHkpO2Vsc2UgRChuLmF0dHJzKSYmWHQoYSxuLmF0dHJzKSxEKG4ucHJvcHMpJiZYdChhLG4ucHJvcHMpO3ZhciBsPW5ldyBHdChuLGEsaSxyLGUpLHU9by5yZW5kZXIuY2FsbChudWxsLGwuX2MsbCk7aWYodSBpbnN0YW5jZW9mIGxlKXJldHVybiBadCh1LG4sbC5wYXJlbnQsbyk7aWYoQXJyYXkuaXNBcnJheSh1KSl7Zm9yKHZhciBmPW90KHUpfHxbXSxwPW5ldyBBcnJheShmLmxlbmd0aCksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXBbZF09WnQoZltkXSxuLGwucGFyZW50LG8pO3JldHVybiBwfX0oZSxkLHQsbixyKTt2YXIgdj10Lm9uO2lmKHQub249dC5uYXRpdmVPbixTKGUub3B0aW9ucy5hYnN0cmFjdCkpe3ZhciBoPXQuc2xvdDt0PXt9LGgmJih0LnNsb3Q9aCl9IWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmhvb2t8fChlLmhvb2s9e30pLG49MDtuPFF0Lmxlbmd0aDtuKyspe3ZhciByPVF0W25dO3Rbcl09WXRbcl19fSh0KTt2YXIgbT1lLm9wdGlvbnMubmFtZXx8aTtyZXR1cm4gbmV3IGxlKCJ2dWUtY29tcG9uZW50LSIrZS5jaWQrKG0/Ii0iK206IiIpLHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsbix7Q3RvcjplLHByb3BzRGF0YTpkLGxpc3RlbmVyczp2LHRhZzppLGNoaWxkcmVuOnJ9LGEpfX19dmFyIHRuPTEsbm49MjtmdW5jdGlvbiBybihlLHQsbixyLGksbyl7cmV0dXJuKEFycmF5LmlzQXJyYXkobil8fFQobikpJiYoaT1yLHI9bixuPXZvaWQgMCksUyhvKSYmKGk9bm4pLGZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoRChuKSYmRChuLl9fb2JfXykpcmV0dXJuIGZlKCk7RChuKSYmRChuLmlzKSYmKHQ9bi5pcyk7aWYoIXQpcmV0dXJuIGZlKCk7QXJyYXkuaXNBcnJheShyKSYmImZ1bmN0aW9uIj09dHlwZW9mIHJbMF0mJigobj1ufHx7fSkuc2NvcGVkU2xvdHM9e2RlZmF1bHQ6clswXX0sci5sZW5ndGg9MCk7aT09PW5uP3I9b3Qocik6aT09PXRuJiYocj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylpZihBcnJheS5pc0FycmF5KGVbdF0pKXJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpO3JldHVybiBlfShyKSk7dmFyIG8sYTtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBzO2E9ZS4kdm5vZGUmJmUuJHZub2RlLm5zfHxqLmdldFRhZ05hbWVzcGFjZSh0KSxvPWouaXNSZXNlcnZlZFRhZyh0KT9uZXcgbGUoai5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0KSxuLHIsdm9pZCAwLHZvaWQgMCxlKTpEKHM9TGUoZS4kb3B0aW9ucywiY29tcG9uZW50cyIsdCkpP2VuKHMsbixlLHIsdCk6bmV3IGxlKHQsbixyLHZvaWQgMCx2b2lkIDAsZSl9ZWxzZSBvPWVuKHQsbixlLHIpO3JldHVybiBBcnJheS5pc0FycmF5KG8pP286RChvKT8oRChhKSYmZnVuY3Rpb24gZSh0LG4scil7dC5ucz1uOyJmb3JlaWduT2JqZWN0Ij09PXQudGFnJiYobj12b2lkIDAscj0hMCk7aWYoRCh0LmNoaWxkcmVuKSlmb3IodmFyIGk9MCxvPXQuY2hpbGRyZW4ubGVuZ3RoO2k8bztpKyspe3ZhciBhPXQuY2hpbGRyZW5baV07RChhLnRhZykmJihNKGEubnMpfHxTKHIpJiYic3ZnIiE9PWEudGFnKSYmZShhLG4scil9fShvLGEpLEQobikmJmZ1bmN0aW9uKGUpe1AoZS5zdHlsZSkmJlllKGUuc3R5bGUpO1AoZS5jbGFzcykmJlllKGUuY2xhc3MpfShuKSxvKTpmZSgpfShlLHQsbixyLGkpfXZhciBvbixhbixzbixjbixsbix1bixmbixwbj0wO2Z1bmN0aW9uIGRuKGUpe3ZhciB0PWUub3B0aW9ucztpZihlLnN1cGVyKXt2YXIgbj1kbihlLnN1cGVyKTtpZihuIT09ZS5zdXBlck9wdGlvbnMpe2Uuc3VwZXJPcHRpb25zPW47dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLm9wdGlvbnMscj1lLmV4dGVuZE9wdGlvbnMsaT1lLnNlYWxlZE9wdGlvbnM7Zm9yKHZhciBvIGluIG4pbltvXSE9PWlbb10mJih0fHwodD17fSksdFtvXT12bihuW29dLHJbb10saVtvXSkpO3JldHVybiB0fShlKTtyJiZtKGUuZXh0ZW5kT3B0aW9ucyxyKSwodD1lLm9wdGlvbnM9TmUobixlLmV4dGVuZE9wdGlvbnMpKS5uYW1lJiYodC5jb21wb25lbnRzW3QubmFtZV09ZSl9fXJldHVybiB0fWZ1bmN0aW9uIHZuKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgcj1bXTtuPUFycmF5LmlzQXJyYXkobik/bjpbbl0sdD1BcnJheS5pc0FycmF5KHQpP3Q6W3RdO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKSgwPD10LmluZGV4T2YoZVtpXSl8fG4uaW5kZXhPZihlW2ldKTwwKSYmci5wdXNoKGVbaV0pO3JldHVybiByfXJldHVybiBlfWZ1bmN0aW9uIGhuKGUpe3RoaXMuX2luaXQoZSl9ZnVuY3Rpb24gbW4oZSl7ZS5jaWQ9MDt2YXIgYT0xO2UuZXh0ZW5kPWZ1bmN0aW9uKGUpe2U9ZXx8e307dmFyIHQ9dGhpcyxuPXQuY2lkLHI9ZS5fQ3Rvcnx8KGUuX0N0b3I9e30pO2lmKHJbbl0pcmV0dXJuIHJbbl07dmFyIGk9ZS5uYW1lfHx0Lm9wdGlvbnMubmFtZSxvPWZ1bmN0aW9uKGUpe3RoaXMuX2luaXQoZSl9O3JldHVybigoby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW8pLmNpZD1hKyssby5vcHRpb25zPU5lKHQub3B0aW9ucyxlKSxvLnN1cGVyPXQsby5vcHRpb25zLnByb3BzJiZmdW5jdGlvbihlKXt2YXIgdD1lLm9wdGlvbnMucHJvcHM7Zm9yKHZhciBuIGluIHQpRXQoZS5wcm90b3R5cGUsIl9wcm9wcyIsbil9KG8pLG8ub3B0aW9ucy5jb21wdXRlZCYmZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vcHRpb25zLmNvbXB1dGVkO2Zvcih2YXIgbiBpbiB0KUx0KGUucHJvdG90eXBlLG4sdFtuXSl9KG8pLG8uZXh0ZW5kPXQuZXh0ZW5kLG8ubWl4aW49dC5taXhpbixvLnVzZT10LnVzZSxrLmZvckVhY2goZnVuY3Rpb24oZSl7b1tlXT10W2VdfSksaSYmKG8ub3B0aW9ucy5jb21wb25lbnRzW2ldPW8pLG8uc3VwZXJPcHRpb25zPXQub3B0aW9ucyxvLmV4dGVuZE9wdGlvbnM9ZSxvLnNlYWxlZE9wdGlvbnM9bSh7fSxvLm9wdGlvbnMpLHJbbl09b319ZnVuY3Rpb24geW4oZSl7cmV0dXJuIGUmJihlLkN0b3Iub3B0aW9ucy5uYW1lfHxlLnRhZyl9ZnVuY3Rpb24gZ24oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8tMTxlLmluZGV4T2YodCk6InN0cmluZyI9PXR5cGVvZiBlPy0xPGUuc3BsaXQoIiwiKS5pbmRleE9mKHQpOihuPWUsIltvYmplY3QgUmVnRXhwXSI9PT1yLmNhbGwobikmJmUudGVzdCh0KSk7dmFyIG59ZnVuY3Rpb24gX24oZSx0KXt2YXIgbj1lLmNhY2hlLHI9ZS5rZXlzLGk9ZS5fdm5vZGU7Zm9yKHZhciBvIGluIG4pe3ZhciBhPW5bb107aWYoYSl7dmFyIHM9eW4oYS5jb21wb25lbnRPcHRpb25zKTtzJiYhdChzKSYmYm4obixvLHIsaSl9fX1mdW5jdGlvbiBibihlLHQsbixyKXt2YXIgaT1lW3RdOyFpfHxyJiZpLnRhZz09PXIudGFnfHxpLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCksZVt0XT1udWxsLGYobix0KX1obi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbz10aGlzO28uX3VpZD1wbisrLG8uX2lzVnVlPSEwLGUmJmUuX2lzQ29tcG9uZW50P2Z1bmN0aW9uKGUsdCl7dmFyIG49ZS4kb3B0aW9ucz1PYmplY3QuY3JlYXRlKGUuY29uc3RydWN0b3Iub3B0aW9ucykscj10Ll9wYXJlbnRWbm9kZTtuLnBhcmVudD10LnBhcmVudCxuLl9wYXJlbnRWbm9kZT1yLG4uX3BhcmVudEVsbT10Ll9wYXJlbnRFbG0sbi5fcmVmRWxtPXQuX3JlZkVsbTt2YXIgaT1yLmNvbXBvbmVudE9wdGlvbnM7bi5wcm9wc0RhdGE9aS5wcm9wc0RhdGEsbi5fcGFyZW50TGlzdGVuZXJzPWkubGlzdGVuZXJzLG4uX3JlbmRlckNoaWxkcmVuPWkuY2hpbGRyZW4sbi5fY29tcG9uZW50VGFnPWkudGFnLHQucmVuZGVyJiYobi5yZW5kZXI9dC5yZW5kZXIsbi5zdGF0aWNSZW5kZXJGbnM9dC5zdGF0aWNSZW5kZXJGbnMpfShvLGUpOm8uJG9wdGlvbnM9TmUoZG4oby5jb25zdHJ1Y3RvciksZXx8e30sbyksZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucyxuPXQucGFyZW50O2lmKG4mJiF0LmFic3RyYWN0KXtmb3IoO24uJG9wdGlvbnMuYWJzdHJhY3QmJm4uJHBhcmVudDspbj1uLiRwYXJlbnQ7bi4kY2hpbGRyZW4ucHVzaChlKX1lLiRwYXJlbnQ9bixlLiRyb290PW4/bi4kcm9vdDplLGUuJGNoaWxkcmVuPVtdLGUuJHJlZnM9e30sZS5fd2F0Y2hlcj1udWxsLGUuX2luYWN0aXZlPW51bGwsZS5fZGlyZWN0SW5hY3RpdmU9ITEsZS5faXNNb3VudGVkPSExLGUuX2lzRGVzdHJveWVkPSExLGUuX2lzQmVpbmdEZXN0cm95ZWQ9ITF9KChvLl9yZW5kZXJQcm94eT1vKS5fc2VsZj1vKSxmdW5jdGlvbihlKXtlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlLl9oYXNIb29rRXZlbnQ9ITE7dmFyIHQ9ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO3QmJnB0KGUsdCl9KG8pLGZ1bmN0aW9uKGkpe2kuX3Zub2RlPW51bGwsaS5fc3RhdGljVHJlZXM9bnVsbDt2YXIgZT1pLiRvcHRpb25zLHQ9aS4kdm5vZGU9ZS5fcGFyZW50Vm5vZGUsbj10JiZ0LmNvbnRleHQ7aS4kc2xvdHM9ZHQoZS5fcmVuZGVyQ2hpbGRyZW4sbiksaS4kc2NvcGVkU2xvdHM9eSxpLl9jPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBybihpLGUsdCxuLHIsITEpfSxpLiRjcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBybihpLGUsdCxuLHIsITApfTt2YXIgcj10JiZ0LmRhdGE7Q2UoaSwiJGF0dHJzIixyJiZyLmF0dHJzfHx5LG51bGwsITApLENlKGksIiRsaXN0ZW5lcnMiLGUuX3BhcmVudExpc3RlbmVyc3x8eSxudWxsLCEwKX0obyksX3QobywiYmVmb3JlQ3JlYXRlIiksKG49RHQoKHQ9bykuJG9wdGlvbnMuaW5qZWN0LHQpKSYmKGdlKCExKSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0NlKHQsZSxuW2VdKX0pLGdlKCEwKSksanQobyksKGk9KHI9bykuJG9wdGlvbnMucHJvdmlkZSkmJihyLl9wcm92aWRlZD0iZnVuY3Rpb24iPT10eXBlb2YgaT9pLmNhbGwocik6aSksX3QobywiY3JlYXRlZCIpLG8uJG9wdGlvbnMuZWwmJm8uJG1vdW50KG8uJG9wdGlvbnMuZWwpfSxvbj1obixhbj17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGF9fSxzbj17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Byb3BzfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KG9uLnByb3RvdHlwZSwiJGRhdGEiLGFuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkob24ucHJvdG90eXBlLCIkcHJvcHMiLHNuKSxvbi5wcm90b3R5cGUuJHNldD14ZSxvbi5wcm90b3R5cGUuJGRlbGV0ZT1rZSxvbi5wcm90b3R5cGUuJHdhdGNoPWZ1bmN0aW9uKGUsdCxuKXtpZihsKHQpKXJldHVybiBNdCh0aGlzLGUsdCxuKTsobj1ufHx7fSkudXNlcj0hMDt2YXIgcj1uZXcgU3QodGhpcyxlLHQsbik7cmV0dXJuIG4uaW1tZWRpYXRlJiZ0LmNhbGwodGhpcyxyLnZhbHVlKSxmdW5jdGlvbigpe3IudGVhcmRvd24oKX19LGxuPS9eaG9vazovLChjbj1obikucHJvdG90eXBlLiRvbj1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRoaXMuJG9uKGVbbl0sdCk7ZWxzZSh0aGlzLl9ldmVudHNbZV18fCh0aGlzLl9ldmVudHNbZV09W10pKS5wdXNoKHQpLGxuLnRlc3QoZSkmJih0aGlzLl9oYXNIb29rRXZlbnQ9ITApO3JldHVybiB0aGlzfSxjbi5wcm90b3R5cGUuJG9uY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2Z1bmN0aW9uIHIoKXtuLiRvZmYoZSxyKSx0LmFwcGx5KG4sYXJndW1lbnRzKX1yZXR1cm4gci5mbj10LG4uJG9uKGUsciksbn0sY24ucHJvdG90eXBlLiRvZmY9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxuO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl0aGlzLiRvZmYoZVtyXSx0KTtyZXR1cm4gbn12YXIgbz1uLl9ldmVudHNbZV07aWYoIW8pcmV0dXJuIG47aWYoIXQpcmV0dXJuIG4uX2V2ZW50c1tlXT1udWxsLG47aWYodClmb3IodmFyIGEscz1vLmxlbmd0aDtzLS07KWlmKChhPW9bc10pPT09dHx8YS5mbj09PXQpe28uc3BsaWNlKHMsMSk7YnJlYWt9cmV0dXJuIG59LGNuLnByb3RvdHlwZS4kZW1pdD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLGU9bi5fZXZlbnRzW3RdO2lmKGUpe2U9MTxlLmxlbmd0aD9oKGUpOmU7Zm9yKHZhciByPWgoYXJndW1lbnRzLDEpLGk9MCxvPWUubGVuZ3RoO2k8bztpKyspdHJ5e2VbaV0uYXBwbHkobixyKX1jYXRjaChlKXtGZShlLG4sJ2V2ZW50IGhhbmRsZXIgZm9yICInK3QrJyInKX19cmV0dXJuIG59LCh1bj1obikucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO24uX2lzTW91bnRlZCYmX3QobiwiYmVmb3JlVXBkYXRlIik7dmFyIHI9bi4kZWwsaT1uLl92bm9kZSxvPW10OyhtdD1uKS5fdm5vZGU9ZSxpP24uJGVsPW4uX19wYXRjaF9fKGksZSk6KG4uJGVsPW4uX19wYXRjaF9fKG4uJGVsLGUsdCwhMSxuLiRvcHRpb25zLl9wYXJlbnRFbG0sbi4kb3B0aW9ucy5fcmVmRWxtKSxuLiRvcHRpb25zLl9wYXJlbnRFbG09bi4kb3B0aW9ucy5fcmVmRWxtPW51bGwpLG10PW8sciYmKHIuX192dWVfXz1udWxsKSxuLiRlbCYmKG4uJGVsLl9fdnVlX189biksbi4kdm5vZGUmJm4uJHBhcmVudCYmbi4kdm5vZGU9PT1uLiRwYXJlbnQuX3Zub2RlJiYobi4kcGFyZW50LiRlbD1uLiRlbCl9LHVuLnByb3RvdHlwZS4kZm9yY2VVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl93YXRjaGVyJiZ0aGlzLl93YXRjaGVyLnVwZGF0ZSgpfSx1bi5wcm90b3R5cGUuJGRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCFlLl9pc0JlaW5nRGVzdHJveWVkKXtfdChlLCJiZWZvcmVEZXN0cm95IiksZS5faXNCZWluZ0Rlc3Ryb3llZD0hMDt2YXIgdD1lLiRwYXJlbnQ7IXR8fHQuX2lzQmVpbmdEZXN0cm95ZWR8fGUuJG9wdGlvbnMuYWJzdHJhY3R8fGYodC4kY2hpbGRyZW4sZSksZS5fd2F0Y2hlciYmZS5fd2F0Y2hlci50ZWFyZG93bigpO2Zvcih2YXIgbj1lLl93YXRjaGVycy5sZW5ndGg7bi0tOyllLl93YXRjaGVyc1tuXS50ZWFyZG93bigpO2UuX2RhdGEuX19vYl9fJiZlLl9kYXRhLl9fb2JfXy52bUNvdW50LS0sZS5faXNEZXN0cm95ZWQ9ITAsZS5fX3BhdGNoX18oZS5fdm5vZGUsbnVsbCksX3QoZSwiZGVzdHJveWVkIiksZS4kb2ZmKCksZS4kZWwmJihlLiRlbC5fX3Z1ZV9fPW51bGwpLGUuJHZub2RlJiYoZS4kdm5vZGUucGFyZW50PW51bGwpfX0sV3QoKGZuPWhuKS5wcm90b3R5cGUpLGZuLnByb3RvdHlwZS4kbmV4dFRpY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIFplKGUsdGhpcyl9LGZuLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLGU9bi4kb3B0aW9ucyxyPWUucmVuZGVyLGk9ZS5fcGFyZW50Vm5vZGU7aSYmKG4uJHNjb3BlZFNsb3RzPWkuZGF0YS5zY29wZWRTbG90c3x8eSksbi4kdm5vZGU9aTt0cnl7dD1yLmNhbGwobi5fcmVuZGVyUHJveHksbi4kY3JlYXRlRWxlbWVudCl9Y2F0Y2goZSl7RmUoZSxuLCJyZW5kZXIiKSx0PW4uX3Zub2RlfXJldHVybiB0IGluc3RhbmNlb2YgbGV8fCh0PWZlKCkpLHQucGFyZW50PWksdH07dmFyICRuLHduLENuLHhuPVtTdHJpbmcsUmVnRXhwLEFycmF5XSxrbj17S2VlcEFsaXZlOntuYW1lOiJrZWVwLWFsaXZlIixhYnN0cmFjdDohMCxwcm9wczp7aW5jbHVkZTp4bixleGNsdWRlOnhuLG1heDpbU3RyaW5nLE51bWJlcl19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5rZXlzPVtdfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5jYWNoZSlibih0aGlzLmNhY2hlLGUsdGhpcy5rZXlzKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kd2F0Y2goImluY2x1ZGUiLGZ1bmN0aW9uKHQpe19uKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGduKHQsZSl9KX0pLHRoaXMuJHdhdGNoKCJleGNsdWRlIixmdW5jdGlvbih0KXtfbihlLGZ1bmN0aW9uKGUpe3JldHVybiFnbih0LGUpfSl9KX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kc2xvdHMuZGVmYXVsdCx0PWx0KGUpLG49dCYmdC5jb21wb25lbnRPcHRpb25zO2lmKG4pe3ZhciByPXluKG4pLGk9dGhpcy5pbmNsdWRlLG89dGhpcy5leGNsdWRlO2lmKGkmJighcnx8IWduKGkscikpfHxvJiZyJiZnbihvLHIpKXJldHVybiB0O3ZhciBhPXRoaXMuY2FjaGUscz10aGlzLmtleXMsYz1udWxsPT10LmtleT9uLkN0b3IuY2lkKyhuLnRhZz8iOjoiK24udGFnOiIiKTp0LmtleTthW2NdPyh0LmNvbXBvbmVudEluc3RhbmNlPWFbY10uY29tcG9uZW50SW5zdGFuY2UsZihzLGMpLHMucHVzaChjKSk6KGFbY109dCxzLnB1c2goYyksdGhpcy5tYXgmJnMubGVuZ3RoPnBhcnNlSW50KHRoaXMubWF4KSYmYm4oYSxzWzBdLHMsdGhpcy5fdm5vZGUpKSx0LmRhdGEua2VlcEFsaXZlPSEwfXJldHVybiB0fHxlJiZlWzBdfX19OyRuPWhuLENuPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gan19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkbiwiY29uZmlnIixDbiksJG4udXRpbD17d2FybjpyZSxleHRlbmQ6bSxtZXJnZU9wdGlvbnM6TmUsZGVmaW5lUmVhY3RpdmU6Q2V9LCRuLnNldD14ZSwkbi5kZWxldGU9a2UsJG4ubmV4dFRpY2s9WmUsJG4ub3B0aW9ucz1PYmplY3QuY3JlYXRlKG51bGwpLGsuZm9yRWFjaChmdW5jdGlvbihlKXskbi5vcHRpb25zW2UrInMiXT1PYmplY3QuY3JlYXRlKG51bGwpfSksbSgoJG4ub3B0aW9ucy5fYmFzZT0kbikub3B0aW9ucy5jb21wb25lbnRzLGtuKSwkbi51c2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5zdGFsbGVkUGx1Z2luc3x8KHRoaXMuX2luc3RhbGxlZFBsdWdpbnM9W10pO2lmKC0xPHQuaW5kZXhPZihlKSlyZXR1cm4gdGhpczt2YXIgbj1oKGFyZ3VtZW50cywxKTtyZXR1cm4gbi51bnNoaWZ0KHRoaXMpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmluc3RhbGw/ZS5pbnN0YWxsLmFwcGx5KGUsbik6ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuYXBwbHkobnVsbCxuKSx0LnB1c2goZSksdGhpc30sJG4ubWl4aW49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3B0aW9ucz1OZSh0aGlzLm9wdGlvbnMsZSksdGhpc30sbW4oJG4pLHduPSRuLGsuZm9yRWFjaChmdW5jdGlvbihuKXt3bltuXT1mdW5jdGlvbihlLHQpe3JldHVybiB0PygiY29tcG9uZW50Ij09PW4mJmwodCkmJih0Lm5hbWU9dC5uYW1lfHxlLHQ9dGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZCh0KSksImRpcmVjdGl2ZSI9PT1uJiYiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQ9e2JpbmQ6dCx1cGRhdGU6dH0pLHRoaXMub3B0aW9uc1tuKyJzIl1bZV09dCk6dGhpcy5vcHRpb25zW24rInMiXVtlXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaG4ucHJvdG90eXBlLCIkaXNTZXJ2ZXIiLHtnZXQ6WX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShobi5wcm90b3R5cGUsIiRzc3JDb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHZub2RlJiZ0aGlzLiR2bm9kZS5zc3JDb250ZXh0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShobiwiRnVuY3Rpb25hbFJlbmRlckNvbnRleHQiLHt2YWx1ZTpHdH0pLGhuLnZlcnNpb249IjIuNS4xNyI7dmFyIEFuPXMoInN0eWxlLGNsYXNzIiksT249cygiaW5wdXQsdGV4dGFyZWEsb3B0aW9uLHNlbGVjdCxwcm9ncmVzcyIpLFNuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4idmFsdWUiPT09biYmT24oZSkmJiJidXR0b24iIT09dHx8InNlbGVjdGVkIj09PW4mJiJvcHRpb24iPT09ZXx8ImNoZWNrZWQiPT09biYmImlucHV0Ij09PWV8fCJtdXRlZCI9PT1uJiYidmlkZW8iPT09ZX0sVG49cygiY29udGVudGVkaXRhYmxlLGRyYWdnYWJsZSxzcGVsbGNoZWNrIiksRW49cygiYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSxkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsZW5hYmxlZCxmb3Jtbm92YWxpZGF0ZSxoaWRkZW4saW5kZXRlcm1pbmF0ZSxpbmVydCxpc21hcCxpdGVtc2NvcGUsbG9vcCxtdWx0aXBsZSxtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LHJlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cmFuc2xhdGUsdHJ1ZXNwZWVkLHR5cGVtdXN0bWF0Y2gsdmlzaWJsZSIpLGpuPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixObj1mdW5jdGlvbihlKXtyZXR1cm4iOiI9PT1lLmNoYXJBdCg1KSYmInhsaW5rIj09PWUuc2xpY2UoMCw1KX0sTG49ZnVuY3Rpb24oZSl7cmV0dXJuIE5uKGUpP2Uuc2xpY2UoNixlLmxlbmd0aCk6IiJ9LEluPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHwhMT09PWV9O2Z1bmN0aW9uIE1uKGUpe2Zvcih2YXIgdD1lLmRhdGEsbj1lLHI9ZTtEKHIuY29tcG9uZW50SW5zdGFuY2UpOykocj1yLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkmJnIuZGF0YSYmKHQ9RG4oci5kYXRhLHQpKTtmb3IoO0Qobj1uLnBhcmVudCk7KW4mJm4uZGF0YSYmKHQ9RG4odCxuLmRhdGEpKTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihEKGUpfHxEKHQpKXJldHVybiBQbihlLEZuKHQpKTtyZXR1cm4iIn0odC5zdGF0aWNDbGFzcyx0LmNsYXNzKX1mdW5jdGlvbiBEbihlLHQpe3JldHVybntzdGF0aWNDbGFzczpQbihlLnN0YXRpY0NsYXNzLHQuc3RhdGljQ2xhc3MpLGNsYXNzOkQoZS5jbGFzcyk/W2UuY2xhc3MsdC5jbGFzc106dC5jbGFzc319ZnVuY3Rpb24gUG4oZSx0KXtyZXR1cm4gZT90P2UrIiAiK3Q6ZTp0fHwiIn1mdW5jdGlvbiBGbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iIixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKUQodD1GbihlW3JdKSkmJiIiIT09dCYmKG4mJihuKz0iICIpLG4rPXQpO3JldHVybiBufShlKTpQKGUpP2Z1bmN0aW9uKGUpe3ZhciB0PSIiO2Zvcih2YXIgbiBpbiBlKWVbbl0mJih0JiYodCs9IiAiKSx0Kz1uKTtyZXR1cm4gdH0oZSk6InN0cmluZyI9PXR5cGVvZiBlP2U6IiJ9dmFyIFJuPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixtYXRoOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIn0sSG49cygiaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGdyb3VwLG5hdixzZWN0aW9uLGRpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLGEsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSxzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbyxlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucyxjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0cixidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsb3B0aW9uLG91dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LGNvbnRlbnQsZWxlbWVudCxzaGFkb3csdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3QiKSxCbj1zKCJzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsZm9yZWlnbk9iamVjdCxnLGdseXBoLGltYWdlLGxpbmUsbWFya2VyLG1hc2ssbWlzc2luZy1nbHlwaCxwYXRoLHBhdHRlcm4scG9seWdvbixwb2x5bGluZSxyZWN0LHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2UsdmlldyIsITApLFVuPWZ1bmN0aW9uKGUpe3JldHVybiBIbihlKXx8Qm4oZSl9O2Z1bmN0aW9uIFZuKGUpe3JldHVybiBCbihlKT8ic3ZnIjoibWF0aCI9PT1lPyJtYXRoIjp2b2lkIDB9dmFyIHpuPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIEtuPXMoInRleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsIik7ZnVuY3Rpb24gSm4oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpO3JldHVybiB0fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKX1yZXR1cm4gZX12YXIgcW49T2JqZWN0LmZyZWV6ZSh7Y3JlYXRlRWxlbWVudDpmdW5jdGlvbihlLHQpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuInNlbGVjdCIhPT1lfHx0LmRhdGEmJnQuZGF0YS5hdHRycyYmdm9pZCAwIT09dC5kYXRhLmF0dHJzLm11bHRpcGxlJiZuLnNldEF0dHJpYnV0ZSgibXVsdGlwbGUiLCJtdWx0aXBsZSIpLG59LGNyZWF0ZUVsZW1lbnROUzpmdW5jdGlvbihlLHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoUm5bZV0sdCl9LGNyZWF0ZVRleHROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX0sY3JlYXRlQ29tbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudChlKX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCxuKXtlLmluc2VydEJlZm9yZSh0LG4pfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihlLHQpe2UucmVtb3ZlQ2hpbGQodCl9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUsdCl7ZS5hcHBlbmRDaGlsZCh0KX0scGFyZW50Tm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlfSxuZXh0U2libGluZzpmdW5jdGlvbihlKXtyZXR1cm4gZS5uZXh0U2libGluZ30sdGFnTmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lfSxzZXRUZXh0Q29udGVudDpmdW5jdGlvbihlLHQpe2UudGV4dENvbnRlbnQ9dH0sc2V0U3R5bGVTY29wZTpmdW5jdGlvbihlLHQpe2Uuc2V0QXR0cmlidXRlKHQsIiIpfX0pLFduPXtjcmVhdGU6ZnVuY3Rpb24oZSx0KXtHbih0KX0sdXBkYXRlOmZ1bmN0aW9uKGUsdCl7ZS5kYXRhLnJlZiE9PXQuZGF0YS5yZWYmJihHbihlLCEwKSxHbih0KSl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7R24oZSwhMCl9fTtmdW5jdGlvbiBHbihlLHQpe3ZhciBuPWUuZGF0YS5yZWY7aWYoRChuKSl7dmFyIHI9ZS5jb250ZXh0LGk9ZS5jb21wb25lbnRJbnN0YW5jZXx8ZS5lbG0sbz1yLiRyZWZzO3Q/QXJyYXkuaXNBcnJheShvW25dKT9mKG9bbl0saSk6b1tuXT09PWkmJihvW25dPXZvaWQgMCk6ZS5kYXRhLnJlZkluRm9yP0FycmF5LmlzQXJyYXkob1tuXSk/b1tuXS5pbmRleE9mKGkpPDAmJm9bbl0ucHVzaChpKTpvW25dPVtpXTpvW25dPWl9fXZhciBabj1uZXcgbGUoIiIse30sW10pLFhuPVsiY3JlYXRlIiwiYWN0aXZhdGUiLCJ1cGRhdGUiLCJyZW1vdmUiLCJkZXN0cm95Il07ZnVuY3Rpb24gWW4oZSx0KXtyZXR1cm4gZS5rZXk9PT10LmtleSYmKGUudGFnPT09dC50YWcmJmUuaXNDb21tZW50PT09dC5pc0NvbW1lbnQmJkQoZS5kYXRhKT09PUQodC5kYXRhKSYmZnVuY3Rpb24oZSx0KXtpZigiaW5wdXQiIT09ZS50YWcpcmV0dXJuITA7dmFyIG4scj1EKG49ZS5kYXRhKSYmRChuPW4uYXR0cnMpJiZuLnR5cGUsaT1EKG49dC5kYXRhKSYmRChuPW4uYXR0cnMpJiZuLnR5cGU7cmV0dXJuIHI9PT1pfHxLbihyKSYmS24oaSl9KGUsdCl8fFMoZS5pc0FzeW5jUGxhY2Vob2xkZXIpJiZlLmFzeW5jRmFjdG9yeT09PXQuYXN5bmNGYWN0b3J5JiZNKHQuYXN5bmNGYWN0b3J5LmVycm9yKSl9ZnVuY3Rpb24gUW4oZSx0LG4pe3ZhciByLGksbz17fTtmb3Iocj10O3I8PW47KytyKUQoaT1lW3JdLmtleSkmJihvW2ldPXIpO3JldHVybiBvfXZhciBlcj17Y3JlYXRlOnRyLHVwZGF0ZTp0cixkZXN0cm95OmZ1bmN0aW9uKGUpe3RyKGUsWm4pfX07ZnVuY3Rpb24gdHIoZSx0KXsoZS5kYXRhLmRpcmVjdGl2ZXN8fHQuZGF0YS5kaXJlY3RpdmVzKSYmZnVuY3Rpb24odCxuKXt2YXIgZSxyLGksbz10PT09Wm4sYT1uPT09Wm4scz1ycih0LmRhdGEuZGlyZWN0aXZlcyx0LmNvbnRleHQpLGM9cnIobi5kYXRhLmRpcmVjdGl2ZXMsbi5jb250ZXh0KSxsPVtdLHU9W107Zm9yKGUgaW4gYylyPXNbZV0saT1jW2VdLHI/KGkub2xkVmFsdWU9ci52YWx1ZSxpcihpLCJ1cGRhdGUiLG4sdCksaS5kZWYmJmkuZGVmLmNvbXBvbmVudFVwZGF0ZWQmJnUucHVzaChpKSk6KGlyKGksImJpbmQiLG4sdCksaS5kZWYmJmkuZGVmLmluc2VydGVkJiZsLnB1c2goaSkpO2lmKGwubGVuZ3RoKXt2YXIgZj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bC5sZW5ndGg7ZSsrKWlyKGxbZV0sImluc2VydGVkIixuLHQpfTtvP3J0KG4sImluc2VydCIsZik6ZigpfXUubGVuZ3RoJiZydChuLCJwb3N0cGF0Y2giLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspaXIodVtlXSwiY29tcG9uZW50VXBkYXRlZCIsbix0KX0pO2lmKCFvKWZvcihlIGluIHMpY1tlXXx8aXIoc1tlXSwidW5iaW5kIix0LHQsYSl9KGUsdCl9dmFyIG5yPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gcnIoZSx0KXt2YXIgbixyLGksbz1PYmplY3QuY3JlYXRlKG51bGwpO2lmKCFlKXJldHVybiBvO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspKHI9ZVtuXSkubW9kaWZpZXJzfHwoci5tb2RpZmllcnM9bnIpLChvWyhpPXIsaS5yYXdOYW1lfHxpLm5hbWUrIi4iK09iamVjdC5rZXlzKGkubW9kaWZpZXJzfHx7fSkuam9pbigiLiIpKV09cikuZGVmPUxlKHQuJG9wdGlvbnMsImRpcmVjdGl2ZXMiLHIubmFtZSk7cmV0dXJuIG99ZnVuY3Rpb24gaXIodCxuLHIsZSxpKXt2YXIgbz10LmRlZiYmdC5kZWZbbl07aWYobyl0cnl7byhyLmVsbSx0LHIsZSxpKX1jYXRjaChlKXtGZShlLHIuY29udGV4dCwiZGlyZWN0aXZlICIrdC5uYW1lKyIgIituKyIgaG9vayIpfX12YXIgb3I9W1duLGVyXTtmdW5jdGlvbiBhcihlLHQpe3ZhciBuPXQuY29tcG9uZW50T3B0aW9ucztpZighKEQobikmJiExPT09bi5DdG9yLm9wdGlvbnMuaW5oZXJpdEF0dHJzfHxNKGUuZGF0YS5hdHRycykmJk0odC5kYXRhLmF0dHJzKSkpe3ZhciByLGksbz10LmVsbSxhPWUuZGF0YS5hdHRyc3x8e30scz10LmRhdGEuYXR0cnN8fHt9O2ZvcihyIGluIEQocy5fX29iX18pJiYocz10LmRhdGEuYXR0cnM9bSh7fSxzKSkscylpPXNbcl0sYVtyXSE9PWkmJnNyKG8scixpKTtmb3IociBpbihLfHxxKSYmcy52YWx1ZSE9PWEudmFsdWUmJnNyKG8sInZhbHVlIixzLnZhbHVlKSxhKU0oc1tyXSkmJihObihyKT9vLnJlbW92ZUF0dHJpYnV0ZU5TKGpuLExuKHIpKTpUbihyKXx8by5yZW1vdmVBdHRyaWJ1dGUocikpfX1mdW5jdGlvbiBzcihlLHQsbil7LTE8ZS50YWdOYW1lLmluZGV4T2YoIi0iKT9jcihlLHQsbik6RW4odCk/SW4obik/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6KG49ImFsbG93ZnVsbHNjcmVlbiI9PT10JiYiRU1CRUQiPT09ZS50YWdOYW1lPyJ0cnVlIjp0LGUuc2V0QXR0cmlidXRlKHQsbikpOlRuKHQpP2Uuc2V0QXR0cmlidXRlKHQsSW4obil8fCJmYWxzZSI9PT1uPyJmYWxzZSI6InRydWUiKTpObih0KT9JbihuKT9lLnJlbW92ZUF0dHJpYnV0ZU5TKGpuLExuKHQpKTplLnNldEF0dHJpYnV0ZU5TKGpuLHQsbik6Y3IoZSx0LG4pfWZ1bmN0aW9uIGNyKHQsZSxuKXtpZihJbihuKSl0LnJlbW92ZUF0dHJpYnV0ZShlKTtlbHNle2lmKEsmJiFKJiYiVEVYVEFSRUEiPT09dC50YWdOYW1lJiYicGxhY2Vob2xkZXIiPT09ZSYmIXQuX19pZXBoKXt2YXIgcj1mdW5jdGlvbihlKXtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLHIpfTt0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixyKSx0Ll9faWVwaD0hMH10LnNldEF0dHJpYnV0ZShlLG4pfX12YXIgbHI9e2NyZWF0ZTphcix1cGRhdGU6YXJ9O2Z1bmN0aW9uIHVyKGUsdCl7dmFyIG49dC5lbG0scj10LmRhdGEsaT1lLmRhdGE7aWYoIShNKHIuc3RhdGljQ2xhc3MpJiZNKHIuY2xhc3MpJiYoTShpKXx8TShpLnN0YXRpY0NsYXNzKSYmTShpLmNsYXNzKSkpKXt2YXIgbz1Nbih0KSxhPW4uX3RyYW5zaXRpb25DbGFzc2VzO0QoYSkmJihvPVBuKG8sRm4oYSkpKSxvIT09bi5fcHJldkNsYXNzJiYobi5zZXRBdHRyaWJ1dGUoImNsYXNzIixvKSxuLl9wcmV2Q2xhc3M9byl9fXZhciBmcixwcixkcix2cixocixtcix5cj17Y3JlYXRlOnVyLHVwZGF0ZTp1cn0sZ3I9L1tcdykuK1wtXyRcXV0vO2Z1bmN0aW9uIF9yKGUpe3ZhciB0LG4scixpLG8sYT0hMSxzPSExLGM9ITEsbD0hMSx1PTAsZj0wLHA9MCxkPTA7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpZihuPXQsdD1lLmNoYXJDb2RlQXQociksYSkzOT09PXQmJjkyIT09biYmKGE9ITEpO2Vsc2UgaWYocykzND09PXQmJjkyIT09biYmKHM9ITEpO2Vsc2UgaWYoYyk5Nj09PXQmJjkyIT09biYmKGM9ITEpO2Vsc2UgaWYobCk0Nz09PXQmJjkyIT09biYmKGw9ITEpO2Vsc2UgaWYoMTI0IT09dHx8MTI0PT09ZS5jaGFyQ29kZUF0KHIrMSl8fDEyND09PWUuY2hhckNvZGVBdChyLTEpfHx1fHxmfHxwKXtzd2l0Y2godCl7Y2FzZSAzNDpzPSEwO2JyZWFrO2Nhc2UgMzk6YT0hMDticmVhaztjYXNlIDk2OmM9ITA7YnJlYWs7Y2FzZSA0MDpwKys7YnJlYWs7Y2FzZSA0MTpwLS07YnJlYWs7Y2FzZSA5MTpmKys7YnJlYWs7Y2FzZSA5MzpmLS07YnJlYWs7Y2FzZSAxMjM6dSsrO2JyZWFrO2Nhc2UgMTI1OnUtLX1pZig0Nz09PXQpe2Zvcih2YXIgdj1yLTEsaD12b2lkIDA7MDw9diYmIiAiPT09KGg9ZS5jaGFyQXQodikpO3YtLSk7aCYmZ3IudGVzdChoKXx8KGw9ITApfX1lbHNlIHZvaWQgMD09PWk/KGQ9cisxLGk9ZS5zbGljZSgwLHIpLnRyaW0oKSk6bSgpO2Z1bmN0aW9uIG0oKXsob3x8KG89W10pKS5wdXNoKGUuc2xpY2UoZCxyKS50cmltKCkpLGQ9cisxfWlmKHZvaWQgMD09PWk/aT1lLnNsaWNlKDAscikudHJpbSgpOjAhPT1kJiZtKCksbylmb3Iocj0wO3I8by5sZW5ndGg7cisrKWk9YnIoaSxvW3JdKTtyZXR1cm4gaX1mdW5jdGlvbiBicihlLHQpe3ZhciBuPXQuaW5kZXhPZigiKCIpO2lmKG48MClyZXR1cm4nX2YoIicrdCsnIikoJytlKyIpIjt2YXIgcj10LnNsaWNlKDAsbiksaT10LnNsaWNlKG4rMSk7cmV0dXJuJ19mKCInK3IrJyIpKCcrZSsoIikiIT09aT8iLCIraTppKX1mdW5jdGlvbiAkcihlKXtjb25zb2xlLmVycm9yKCJbVnVlIGNvbXBpbGVyXTogIitlKX1mdW5jdGlvbiB3cihlLHQpe3JldHVybiBlP2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk6W119ZnVuY3Rpb24gQ3IoZSx0LG4peyhlLnByb3BzfHwoZS5wcm9wcz1bXSkpLnB1c2goe25hbWU6dCx2YWx1ZTpufSksZS5wbGFpbj0hMX1mdW5jdGlvbiB4cihlLHQsbil7KGUuYXR0cnN8fChlLmF0dHJzPVtdKSkucHVzaCh7bmFtZTp0LHZhbHVlOm59KSxlLnBsYWluPSExfWZ1bmN0aW9uIGtyKGUsdCxuKXtlLmF0dHJzTWFwW3RdPW4sZS5hdHRyc0xpc3QucHVzaCh7bmFtZTp0LHZhbHVlOm59KX1mdW5jdGlvbiBBcihlLHQsbixyLGksbyl7dmFyIGE7KHI9cnx8eSkuY2FwdHVyZSYmKGRlbGV0ZSByLmNhcHR1cmUsdD0iISIrdCksci5vbmNlJiYoZGVsZXRlIHIub25jZSx0PSJ+Iit0KSxyLnBhc3NpdmUmJihkZWxldGUgci5wYXNzaXZlLHQ9IiYiK3QpLCJjbGljayI9PT10JiYoci5yaWdodD8odD0iY29udGV4dG1lbnUiLGRlbGV0ZSByLnJpZ2h0KTpyLm1pZGRsZSYmKHQ9Im1vdXNldXAiKSksci5uYXRpdmU/KGRlbGV0ZSByLm5hdGl2ZSxhPWUubmF0aXZlRXZlbnRzfHwoZS5uYXRpdmVFdmVudHM9e30pKTphPWUuZXZlbnRzfHwoZS5ldmVudHM9e30pO3ZhciBzPXt2YWx1ZTpuLnRyaW0oKX07ciE9PXkmJihzLm1vZGlmaWVycz1yKTt2YXIgYz1hW3RdO0FycmF5LmlzQXJyYXkoYyk/aT9jLnVuc2hpZnQocyk6Yy5wdXNoKHMpOmFbdF09Yz9pP1tzLGNdOltjLHNdOnMsZS5wbGFpbj0hMX1mdW5jdGlvbiBPcihlLHQsbil7dmFyIHI9U3IoZSwiOiIrdCl8fFNyKGUsInYtYmluZDoiK3QpO2lmKG51bGwhPXIpcmV0dXJuIF9yKHIpO2lmKCExIT09bil7dmFyIGk9U3IoZSx0KTtpZihudWxsIT1pKXJldHVybiBKU09OLnN0cmluZ2lmeShpKX19ZnVuY3Rpb24gU3IoZSx0LG4pe3ZhciByO2lmKG51bGwhPShyPWUuYXR0cnNNYXBbdF0pKWZvcih2YXIgaT1lLmF0dHJzTGlzdCxvPTAsYT1pLmxlbmd0aDtvPGE7bysrKWlmKGlbb10ubmFtZT09PXQpe2kuc3BsaWNlKG8sMSk7YnJlYWt9cmV0dXJuIG4mJmRlbGV0ZSBlLmF0dHJzTWFwW3RdLHJ9ZnVuY3Rpb24gVHIoZSx0LG4pe3ZhciByPW58fHt9LGk9ci5udW1iZXIsbz0iJCR2IixhPW87ci50cmltJiYoYT0iKHR5cGVvZiAkJHYgPT09ICdzdHJpbmcnPyAkJHYudHJpbSgpOiAkJHYpIiksaSYmKGE9Il9uKCIrYSsiKSIpO3ZhciBzPUVyKHQsYSk7ZS5tb2RlbD17dmFsdWU6IigiK3QrIikiLGV4cHJlc3Npb246JyInK3QrJyInLGNhbGxiYWNrOiJmdW5jdGlvbiAoJCR2KSB7IitzKyJ9In19ZnVuY3Rpb24gRXIoZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtpZihlPWUudHJpbSgpLGZyPWUubGVuZ3RoLGUuaW5kZXhPZigiWyIpPDB8fGUubGFzdEluZGV4T2YoIl0iKTxmci0xKXJldHVybi0xPCh2cj1lLmxhc3RJbmRleE9mKCIuIikpP3tleHA6ZS5zbGljZSgwLHZyKSxrZXk6JyInK2Uuc2xpY2UodnIrMSkrJyInfTp7ZXhwOmUsa2V5Om51bGx9O3ByPWUsdnI9aHI9bXI9MDtmb3IoOyFOcigpOylMcihkcj1qcigpKT9Ncihkcik6OTE9PT1kciYmSXIoZHIpO3JldHVybntleHA6ZS5zbGljZSgwLGhyKSxrZXk6ZS5zbGljZShocisxLG1yKX19KGUpO3JldHVybiBudWxsPT09bi5rZXk/ZSsiPSIrdDoiJHNldCgiK24uZXhwKyIsICIrbi5rZXkrIiwgIit0KyIpIn1mdW5jdGlvbiBqcigpe3JldHVybiBwci5jaGFyQ29kZUF0KCsrdnIpfWZ1bmN0aW9uIE5yKCl7cmV0dXJuIGZyPD12cn1mdW5jdGlvbiBMcihlKXtyZXR1cm4gMzQ9PT1lfHwzOT09PWV9ZnVuY3Rpb24gSXIoZSl7dmFyIHQ9MTtmb3IoaHI9dnI7IU5yKCk7KWlmKExyKGU9anIoKSkpTXIoZSk7ZWxzZSBpZig5MT09PWUmJnQrKyw5Mz09PWUmJnQtLSwwPT09dCl7bXI9dnI7YnJlYWt9fWZ1bmN0aW9uIE1yKGUpe2Zvcih2YXIgdD1lOyFOcigpJiYoZT1qcigpKSE9PXQ7KTt9dmFyIERyLFByPSJfX3IiLEZyPSJfX2MiO2Z1bmN0aW9uIFJyKGUsdCxuLHIsaSl7dmFyIG8sYSxzLGMsbDt0PShvPXQpLl93aXRoVGFza3x8KG8uX3dpdGhUYXNrPWZ1bmN0aW9uKCl7SmU9ITA7dmFyIGU9by5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIEplPSExLGV9KSxuJiYoYT10LHM9ZSxjPXIsbD1Ecix0PWZ1bmN0aW9uIGUoKXtudWxsIT09YS5hcHBseShudWxsLGFyZ3VtZW50cykmJkhyKHMsZSxjLGwpfSksRHIuYWRkRXZlbnRMaXN0ZW5lcihlLHQsWj97Y2FwdHVyZTpyLHBhc3NpdmU6aX06cil9ZnVuY3Rpb24gSHIoZSx0LG4scil7KHJ8fERyKS5yZW1vdmVFdmVudExpc3RlbmVyKGUsdC5fd2l0aFRhc2t8fHQsbil9ZnVuY3Rpb24gQnIoZSx0KXtpZighTShlLmRhdGEub24pfHwhTSh0LmRhdGEub24pKXt2YXIgbj10LmRhdGEub258fHt9LHI9ZS5kYXRhLm9ufHx7fTtEcj10LmVsbSxmdW5jdGlvbihlKXtpZihEKGVbUHJdKSl7dmFyIHQ9Sz8iY2hhbmdlIjoiaW5wdXQiO2VbdF09W10uY29uY2F0KGVbUHJdLGVbdF18fFtdKSxkZWxldGUgZVtQcl19RChlW0ZyXSkmJihlLmNoYW5nZT1bXS5jb25jYXQoZVtGcl0sZS5jaGFuZ2V8fFtdKSxkZWxldGUgZVtGcl0pfShuKSxudChuLHIsUnIsSHIsdC5jb250ZXh0KSxEcj12b2lkIDB9fXZhciBVcj17Y3JlYXRlOkJyLHVwZGF0ZTpCcn07ZnVuY3Rpb24gVnIoZSx0KXtpZighTShlLmRhdGEuZG9tUHJvcHMpfHwhTSh0LmRhdGEuZG9tUHJvcHMpKXt2YXIgbixyLGksbyxhPXQuZWxtLHM9ZS5kYXRhLmRvbVByb3BzfHx7fSxjPXQuZGF0YS5kb21Qcm9wc3x8e307Zm9yKG4gaW4gRChjLl9fb2JfXykmJihjPXQuZGF0YS5kb21Qcm9wcz1tKHt9LGMpKSxzKU0oY1tuXSkmJihhW25dPSIiKTtmb3IobiBpbiBjKXtpZihyPWNbbl0sInRleHRDb250ZW50Ij09PW58fCJpbm5lckhUTUwiPT09bil7aWYodC5jaGlsZHJlbiYmKHQuY2hpbGRyZW4ubGVuZ3RoPTApLHI9PT1zW25dKWNvbnRpbnVlOzE9PT1hLmNoaWxkTm9kZXMubGVuZ3RoJiZhLnJlbW92ZUNoaWxkKGEuY2hpbGROb2Rlc1swXSl9aWYoInZhbHVlIj09PW4pe3ZhciBsPU0oYS5fdmFsdWU9cik/IiI6U3RyaW5nKHIpO289bCwoaT1hKS5jb21wb3Npbmd8fCJPUFRJT04iIT09aS50YWdOYW1lJiYhZnVuY3Rpb24oZSx0KXt2YXIgbj0hMDt0cnl7bj1kb2N1bWVudC5hY3RpdmVFbGVtZW50IT09ZX1jYXRjaChlKXt9cmV0dXJuIG4mJmUudmFsdWUhPT10fShpLG8pJiYhZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnZhbHVlLHI9ZS5fdk1vZGlmaWVycztpZihEKHIpKXtpZihyLmxhenkpcmV0dXJuITE7aWYoci5udW1iZXIpcmV0dXJuIEYobikhPT1GKHQpO2lmKHIudHJpbSlyZXR1cm4gbi50cmltKCkhPT10LnRyaW0oKX1yZXR1cm4gbiE9PXR9KGksbyl8fChhLnZhbHVlPWwpfWVsc2UgYVtuXT1yfX19dmFyIHpyPXtjcmVhdGU6VnIsdXBkYXRlOlZyfSxLcj1lKGZ1bmN0aW9uKGUpe3ZhciBuPXt9LHI9LzooLispLztyZXR1cm4gZS5zcGxpdCgvOyg/IVteKF0qXCkpL2cpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9ZS5zcGxpdChyKTsxPHQubGVuZ3RoJiYoblt0WzBdLnRyaW0oKV09dFsxXS50cmltKCkpfX0pLG59KTtmdW5jdGlvbiBKcihlKXt2YXIgdD1xcihlLnN0eWxlKTtyZXR1cm4gZS5zdGF0aWNTdHlsZT9tKGUuc3RhdGljU3R5bGUsdCk6dH1mdW5jdGlvbiBxcihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9iKGUpOiJzdHJpbmciPT10eXBlb2YgZT9LcihlKTplfXZhciBXcixHcj0vXi0tLyxacj0vXHMqIWltcG9ydGFudCQvLFhyPWZ1bmN0aW9uKGUsdCxuKXtpZihHci50ZXN0KHQpKWUuc3R5bGUuc2V0UHJvcGVydHkodCxuKTtlbHNlIGlmKFpyLnRlc3QobikpZS5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4ucmVwbGFjZShaciwiIiksImltcG9ydGFudCIpO2Vsc2V7dmFyIHI9UXIodCk7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspZS5zdHlsZVtyXT1uW2ldO2Vsc2UgZS5zdHlsZVtyXT1ufX0sWXI9WyJXZWJraXQiLCJNb3oiLCJtcyJdLFFyPWUoZnVuY3Rpb24oZSl7aWYoV3I9V3J8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLCJmaWx0ZXIiIT09KGU9ZyhlKSkmJmUgaW4gV3IpcmV0dXJuIGU7Zm9yKHZhciB0PWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSxuPTA7bjxZci5sZW5ndGg7bisrKXt2YXIgcj1ZcltuXSt0O2lmKHIgaW4gV3IpcmV0dXJuIHJ9fSk7ZnVuY3Rpb24gZWkoZSx0KXt2YXIgbj10LmRhdGEscj1lLmRhdGE7aWYoIShNKG4uc3RhdGljU3R5bGUpJiZNKG4uc3R5bGUpJiZNKHIuc3RhdGljU3R5bGUpJiZNKHIuc3R5bGUpKSl7dmFyIGksbyxhPXQuZWxtLHM9ci5zdGF0aWNTdHlsZSxjPXIubm9ybWFsaXplZFN0eWxlfHxyLnN0eWxlfHx7fSxsPXN8fGMsdT1xcih0LmRhdGEuc3R5bGUpfHx7fTt0LmRhdGEubm9ybWFsaXplZFN0eWxlPUQodS5fX29iX18pP20oe30sdSk6dTt2YXIgZj1mdW5jdGlvbihlLHQpe3ZhciBuLHI9e307aWYodClmb3IodmFyIGk9ZTtpLmNvbXBvbmVudEluc3RhbmNlOykoaT1pLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkmJmkuZGF0YSYmKG49SnIoaS5kYXRhKSkmJm0ocixuKTsobj1KcihlLmRhdGEpKSYmbShyLG4pO2Zvcih2YXIgbz1lO289by5wYXJlbnQ7KW8uZGF0YSYmKG49SnIoby5kYXRhKSkmJm0ocixuKTtyZXR1cm4gcn0odCwhMCk7Zm9yKG8gaW4gbClNKGZbb10pJiZYcihhLG8sIiIpO2ZvcihvIGluIGYpKGk9ZltvXSkhPT1sW29dJiZYcihhLG8sbnVsbD09aT8iIjppKX19dmFyIHRpPXtjcmVhdGU6ZWksdXBkYXRlOmVpfTtmdW5jdGlvbiBuaSh0LGUpe2lmKGUmJihlPWUudHJpbSgpKSlpZih0LmNsYXNzTGlzdCktMTxlLmluZGV4T2YoIiAiKT9lLnNwbGl0KC9ccysvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNsYXNzTGlzdC5hZGQoZSl9KTp0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXt2YXIgbj0iICIrKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIikrIiAiO24uaW5kZXhPZigiICIrZSsiICIpPDAmJnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsKG4rZSkudHJpbSgpKX19ZnVuY3Rpb24gcmkodCxlKXtpZihlJiYoZT1lLnRyaW0oKSkpaWYodC5jbGFzc0xpc3QpLTE8ZS5pbmRleE9mKCIgIik/ZS5zcGxpdCgvXHMrLykuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5jbGFzc0xpc3QucmVtb3ZlKGUpfSk6dC5jbGFzc0xpc3QucmVtb3ZlKGUpLHQuY2xhc3NMaXN0Lmxlbmd0aHx8dC5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIik7ZWxzZXtmb3IodmFyIG49IiAiKyh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpKyIgIixyPSIgIitlKyIgIjswPD1uLmluZGV4T2Yocik7KW49bi5yZXBsYWNlKHIsIiAiKTsobj1uLnRyaW0oKSk/dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixuKTp0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKX19ZnVuY3Rpb24gaWkoZSl7aWYoZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgdD17fTtyZXR1cm4hMSE9PWUuY3NzJiZtKHQsb2koZS5uYW1lfHwidiIpKSxtKHQsZSksdH1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/b2koZSk6dm9pZCAwfX12YXIgb2k9ZShmdW5jdGlvbihlKXtyZXR1cm57ZW50ZXJDbGFzczplKyItZW50ZXIiLGVudGVyVG9DbGFzczplKyItZW50ZXItdG8iLGVudGVyQWN0aXZlQ2xhc3M6ZSsiLWVudGVyLWFjdGl2ZSIsbGVhdmVDbGFzczplKyItbGVhdmUiLGxlYXZlVG9DbGFzczplKyItbGVhdmUtdG8iLGxlYXZlQWN0aXZlQ2xhc3M6ZSsiLWxlYXZlLWFjdGl2ZSJ9fSksYWk9QiYmIUosc2k9InRyYW5zaXRpb24iLGNpPSJhbmltYXRpb24iLGxpPSJ0cmFuc2l0aW9uIix1aT0idHJhbnNpdGlvbmVuZCIsZmk9ImFuaW1hdGlvbiIscGk9ImFuaW1hdGlvbmVuZCI7YWkmJih2b2lkIDA9PT13aW5kb3cub250cmFuc2l0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kJiYobGk9IldlYmtpdFRyYW5zaXRpb24iLHVpPSJ3ZWJraXRUcmFuc2l0aW9uRW5kIiksdm9pZCAwPT09d2luZG93Lm9uYW5pbWF0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXRhbmltYXRpb25lbmQmJihmaT0iV2Via2l0QW5pbWF0aW9uIixwaT0id2Via2l0QW5pbWF0aW9uRW5kIikpO3ZhciBkaT1CP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6c2V0VGltZW91dDpmdW5jdGlvbihlKXtyZXR1cm4gZSgpfTtmdW5jdGlvbiB2aShlKXtkaShmdW5jdGlvbigpe2RpKGUpfSl9ZnVuY3Rpb24gaGkoZSx0KXt2YXIgbj1lLl90cmFuc2l0aW9uQ2xhc3Nlc3x8KGUuX3RyYW5zaXRpb25DbGFzc2VzPVtdKTtuLmluZGV4T2YodCk8MCYmKG4ucHVzaCh0KSxuaShlLHQpKX1mdW5jdGlvbiBtaShlLHQpe2UuX3RyYW5zaXRpb25DbGFzc2VzJiZmKGUuX3RyYW5zaXRpb25DbGFzc2VzLHQpLHJpKGUsdCl9ZnVuY3Rpb24geWkodCxlLG4pe3ZhciByPV9pKHQsZSksaT1yLnR5cGUsbz1yLnRpbWVvdXQsYT1yLnByb3BDb3VudDtpZighaSlyZXR1cm4gbigpO3ZhciBzPWk9PT1zaT91aTpwaSxjPTAsbD1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLHUpLG4oKX0sdT1mdW5jdGlvbihlKXtlLnRhcmdldD09PXQmJisrYz49YSYmbCgpfTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YzxhJiZsKCl9LG8rMSksdC5hZGRFdmVudExpc3RlbmVyKHMsdSl9dmFyIGdpPS9cYih0cmFuc2Zvcm18YWxsKSgsfCQpLztmdW5jdGlvbiBfaShlLHQpe3ZhciBuLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSksaT1yW2xpKyJEZWxheSJdLnNwbGl0KCIsICIpLG89cltsaSsiRHVyYXRpb24iXS5zcGxpdCgiLCAiKSxhPWJpKGksbykscz1yW2ZpKyJEZWxheSJdLnNwbGl0KCIsICIpLGM9cltmaSsiRHVyYXRpb24iXS5zcGxpdCgiLCAiKSxsPWJpKHMsYyksdT0wLGY9MDtyZXR1cm4gdD09PXNpPzA8YSYmKG49c2ksdT1hLGY9by5sZW5ndGgpOnQ9PT1jaT8wPGwmJihuPWNpLHU9bCxmPWMubGVuZ3RoKTpmPShuPTA8KHU9TWF0aC5tYXgoYSxsKSk/bDxhP3NpOmNpOm51bGwpP249PT1zaT9vLmxlbmd0aDpjLmxlbmd0aDowLHt0eXBlOm4sdGltZW91dDp1LHByb3BDb3VudDpmLGhhc1RyYW5zZm9ybTpuPT09c2kmJmdpLnRlc3QocltsaSsiUHJvcGVydHkiXSl9fWZ1bmN0aW9uIGJpKG4sZSl7Zm9yKDtuLmxlbmd0aDxlLmxlbmd0aDspbj1uLmNvbmNhdChuKTtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCxlLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiAkaShlKSskaShuW3RdKX0pKX1mdW5jdGlvbiAkaShlKXtyZXR1cm4gMWUzKk51bWJlcihlLnNsaWNlKDAsLTEpKX1mdW5jdGlvbiB3aShuLGUpe3ZhciByPW4uZWxtO0Qoci5fbGVhdmVDYikmJihyLl9sZWF2ZUNiLmNhbmNlbGxlZD0hMCxyLl9sZWF2ZUNiKCkpO3ZhciB0PWlpKG4uZGF0YS50cmFuc2l0aW9uKTtpZighTSh0KSYmIUQoci5fZW50ZXJDYikmJjE9PT1yLm5vZGVUeXBlKXtmb3IodmFyIGk9dC5jc3Msbz10LnR5cGUsYT10LmVudGVyQ2xhc3Mscz10LmVudGVyVG9DbGFzcyxjPXQuZW50ZXJBY3RpdmVDbGFzcyxsPXQuYXBwZWFyQ2xhc3MsdT10LmFwcGVhclRvQ2xhc3MsZj10LmFwcGVhckFjdGl2ZUNsYXNzLHA9dC5iZWZvcmVFbnRlcixkPXQuZW50ZXIsdj10LmFmdGVyRW50ZXIsaD10LmVudGVyQ2FuY2VsbGVkLG09dC5iZWZvcmVBcHBlYXIseT10LmFwcGVhcixnPXQuYWZ0ZXJBcHBlYXIsXz10LmFwcGVhckNhbmNlbGxlZCxiPXQuZHVyYXRpb24sJD1tdCx3PW10LiR2bm9kZTt3JiZ3LnBhcmVudDspJD0odz13LnBhcmVudCkuY29udGV4dDt2YXIgQz0hJC5faXNNb3VudGVkfHwhbi5pc1Jvb3RJbnNlcnQ7aWYoIUN8fHl8fCIiPT09eSl7dmFyIHg9QyYmbD9sOmEsaz1DJiZmP2Y6YyxBPUMmJnU/dTpzLE89QyYmbXx8cCxTPUMmJiJmdW5jdGlvbiI9PXR5cGVvZiB5P3k6ZCxUPUMmJmd8fHYsRT1DJiZffHxoLGo9RihQKGIpP2IuZW50ZXI6YiksTj0hMSE9PWkmJiFKLEw9a2koUyksST1yLl9lbnRlckNiPVIoZnVuY3Rpb24oKXtOJiYobWkocixBKSxtaShyLGspKSxJLmNhbmNlbGxlZD8oTiYmbWkocix4KSxFJiZFKHIpKTpUJiZUKHIpLHIuX2VudGVyQ2I9bnVsbH0pO24uZGF0YS5zaG93fHxydChuLCJpbnNlcnQiLGZ1bmN0aW9uKCl7dmFyIGU9ci5wYXJlbnROb2RlLHQ9ZSYmZS5fcGVuZGluZyYmZS5fcGVuZGluZ1tuLmtleV07dCYmdC50YWc9PT1uLnRhZyYmdC5lbG0uX2xlYXZlQ2ImJnQuZWxtLl9sZWF2ZUNiKCksUyYmUyhyLEkpfSksTyYmTyhyKSxOJiYoaGkocix4KSxoaShyLGspLHZpKGZ1bmN0aW9uKCl7bWkocix4KSxJLmNhbmNlbGxlZHx8KGhpKHIsQSksTHx8KHhpKGopP3NldFRpbWVvdXQoSSxqKTp5aShyLG8sSSkpKX0pKSxuLmRhdGEuc2hvdyYmKGUmJmUoKSxTJiZTKHIsSSkpLE58fEx8fEkoKX19fWZ1bmN0aW9uIENpKGUsdCl7dmFyIG49ZS5lbG07RChuLl9lbnRlckNiKSYmKG4uX2VudGVyQ2IuY2FuY2VsbGVkPSEwLG4uX2VudGVyQ2IoKSk7dmFyIHI9aWkoZS5kYXRhLnRyYW5zaXRpb24pO2lmKE0ocil8fDEhPT1uLm5vZGVUeXBlKXJldHVybiB0KCk7aWYoIUQobi5fbGVhdmVDYikpe3ZhciBpPXIuY3NzLG89ci50eXBlLGE9ci5sZWF2ZUNsYXNzLHM9ci5sZWF2ZVRvQ2xhc3MsYz1yLmxlYXZlQWN0aXZlQ2xhc3MsbD1yLmJlZm9yZUxlYXZlLHU9ci5sZWF2ZSxmPXIuYWZ0ZXJMZWF2ZSxwPXIubGVhdmVDYW5jZWxsZWQsZD1yLmRlbGF5TGVhdmUsdj1yLmR1cmF0aW9uLGg9ITEhPT1pJiYhSixtPWtpKHUpLHk9RihQKHYpP3YubGVhdmU6diksZz1uLl9sZWF2ZUNiPVIoZnVuY3Rpb24oKXtuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5fcGVuZGluZyYmKG4ucGFyZW50Tm9kZS5fcGVuZGluZ1tlLmtleV09bnVsbCksaCYmKG1pKG4scyksbWkobixjKSksZy5jYW5jZWxsZWQ/KGgmJm1pKG4sYSkscCYmcChuKSk6KHQoKSxmJiZmKG4pKSxuLl9sZWF2ZUNiPW51bGx9KTtkP2QoXyk6XygpfWZ1bmN0aW9uIF8oKXtnLmNhbmNlbGxlZHx8KGUuZGF0YS5zaG93fHwoKG4ucGFyZW50Tm9kZS5fcGVuZGluZ3x8KG4ucGFyZW50Tm9kZS5fcGVuZGluZz17fSkpW2Uua2V5XT1lKSxsJiZsKG4pLGgmJihoaShuLGEpLGhpKG4sYyksdmkoZnVuY3Rpb24oKXttaShuLGEpLGcuY2FuY2VsbGVkfHwoaGkobixzKSxtfHwoeGkoeSk/c2V0VGltZW91dChnLHkpOnlpKG4sbyxnKSkpfSkpLHUmJnUobixnKSxofHxtfHxnKCkpfX1mdW5jdGlvbiB4aShlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJiFpc05hTihlKX1mdW5jdGlvbiBraShlKXtpZihNKGUpKXJldHVybiExO3ZhciB0PWUuZm5zO3JldHVybiBEKHQpP2tpKEFycmF5LmlzQXJyYXkodCk/dFswXTp0KToxPChlLl9sZW5ndGh8fGUubGVuZ3RoKX1mdW5jdGlvbiBBaShlLHQpeyEwIT09dC5kYXRhLnNob3cmJndpKHQpfXZhciBPaT1mdW5jdGlvbihlKXt2YXIgcix0LGc9e30sbj1lLm1vZHVsZXMsXz1lLm5vZGVPcHM7Zm9yKHI9MDtyPFhuLmxlbmd0aDsrK3IpZm9yKGdbWG5bcl1dPVtdLHQ9MDt0PG4ubGVuZ3RoOysrdClEKG5bdF1bWG5bcl1dKSYmZ1tYbltyXV0ucHVzaChuW3RdW1huW3JdXSk7ZnVuY3Rpb24gbyhlKXt2YXIgdD1fLnBhcmVudE5vZGUoZSk7RCh0KSYmXy5yZW1vdmVDaGlsZCh0LGUpfWZ1bmN0aW9uIGIoZSx0LG4scixpLG8sYSl7aWYoRChlLmVsbSkmJkQobykmJihlPW9bYV09ZGUoZSkpLGUuaXNSb290SW5zZXJ0PSFpLCFmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1lLmRhdGE7aWYoRChpKSl7dmFyIG89RChlLmNvbXBvbmVudEluc3RhbmNlKSYmaS5rZWVwQWxpdmU7aWYoRChpPWkuaG9vaykmJkQoaT1pLmluaXQpJiZpKGUsITEsbixyKSxEKGUuY29tcG9uZW50SW5zdGFuY2UpKXJldHVybiBkKGUsdCksUyhvKSYmZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpLG89ZTtvLmNvbXBvbmVudEluc3RhbmNlOylpZihvPW8uY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLEQoaT1vLmRhdGEpJiZEKGk9aS50cmFuc2l0aW9uKSl7Zm9yKGk9MDtpPGcuYWN0aXZhdGUubGVuZ3RoOysraSlnLmFjdGl2YXRlW2ldKFpuLG8pO3QucHVzaChvKTticmVha311KG4sZS5lbG0scil9KGUsdCxuLHIpLCEwfX0oZSx0LG4scikpe3ZhciBzPWUuZGF0YSxjPWUuY2hpbGRyZW4sbD1lLnRhZztEKGwpPyhlLmVsbT1lLm5zP18uY3JlYXRlRWxlbWVudE5TKGUubnMsbCk6Xy5jcmVhdGVFbGVtZW50KGwsZSksZihlKSx2KGUsYyx0KSxEKHMpJiZoKGUsdCkpOlMoZS5pc0NvbW1lbnQpP2UuZWxtPV8uY3JlYXRlQ29tbWVudChlLnRleHQpOmUuZWxtPV8uY3JlYXRlVGV4dE5vZGUoZS50ZXh0KSx1KG4sZS5lbG0scil9fWZ1bmN0aW9uIGQoZSx0KXtEKGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSYmKHQucHVzaC5hcHBseSh0LGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSxlLmRhdGEucGVuZGluZ0luc2VydD1udWxsKSxlLmVsbT1lLmNvbXBvbmVudEluc3RhbmNlLiRlbCwkKGUpPyhoKGUsdCksZihlKSk6KEduKGUpLHQucHVzaChlKSl9ZnVuY3Rpb24gdShlLHQsbil7RChlKSYmKEQobik/bi5wYXJlbnROb2RlPT09ZSYmXy5pbnNlcnRCZWZvcmUoZSx0LG4pOl8uYXBwZW5kQ2hpbGQoZSx0KSl9ZnVuY3Rpb24gdihlLHQsbil7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrciliKHRbcl0sbixlLmVsbSxudWxsLCEwLHQscik7ZWxzZSBUKGUudGV4dCkmJl8uYXBwZW5kQ2hpbGQoZS5lbG0sXy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoZS50ZXh0KSkpfWZ1bmN0aW9uICQoZSl7Zm9yKDtlLmNvbXBvbmVudEluc3RhbmNlOyllPWUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO3JldHVybiBEKGUudGFnKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciBuPTA7bjxnLmNyZWF0ZS5sZW5ndGg7KytuKWcuY3JlYXRlW25dKFpuLGUpO0Qocj1lLmRhdGEuaG9vaykmJihEKHIuY3JlYXRlKSYmci5jcmVhdGUoWm4sZSksRChyLmluc2VydCkmJnQucHVzaChlKSl9ZnVuY3Rpb24gZihlKXt2YXIgdDtpZihEKHQ9ZS5mblNjb3BlSWQpKV8uc2V0U3R5bGVTY29wZShlLmVsbSx0KTtlbHNlIGZvcih2YXIgbj1lO247KUQodD1uLmNvbnRleHQpJiZEKHQ9dC4kb3B0aW9ucy5fc2NvcGVJZCkmJl8uc2V0U3R5bGVTY29wZShlLmVsbSx0KSxuPW4ucGFyZW50O0QodD1tdCkmJnQhPT1lLmNvbnRleHQmJnQhPT1lLmZuQ29udGV4dCYmRCh0PXQuJG9wdGlvbnMuX3Njb3BlSWQpJiZfLnNldFN0eWxlU2NvcGUoZS5lbG0sdCl9ZnVuY3Rpb24geShlLHQsbixyLGksbyl7Zm9yKDtyPD1pOysrciliKG5bcl0sbyxlLHQsITEsbixyKX1mdW5jdGlvbiB3KGUpe3ZhciB0LG4scj1lLmRhdGE7aWYoRChyKSlmb3IoRCh0PXIuaG9vaykmJkQodD10LmRlc3Ryb3kpJiZ0KGUpLHQ9MDt0PGcuZGVzdHJveS5sZW5ndGg7Kyt0KWcuZGVzdHJveVt0XShlKTtpZihEKHQ9ZS5jaGlsZHJlbikpZm9yKG49MDtuPGUuY2hpbGRyZW4ubGVuZ3RoOysrbil3KGUuY2hpbGRyZW5bbl0pfWZ1bmN0aW9uIEMoZSx0LG4scil7Zm9yKDtuPD1yOysrbil7dmFyIGk9dFtuXTtEKGkpJiYoRChpLnRhZyk/KGEoaSksdyhpKSk6byhpLmVsbSkpfX1mdW5jdGlvbiBhKGUsdCl7aWYoRCh0KXx8RChlLmRhdGEpKXt2YXIgbixyPWcucmVtb3ZlLmxlbmd0aCsxO2ZvcihEKHQpP3QubGlzdGVuZXJzKz1yOnQ9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7MD09LS1uLmxpc3RlbmVycyYmbyhlKX1yZXR1cm4gbi5saXN0ZW5lcnM9dCxufShlLmVsbSxyKSxEKG49ZS5jb21wb25lbnRJbnN0YW5jZSkmJkQobj1uLl92bm9kZSkmJkQobi5kYXRhKSYmYShuLHQpLG49MDtuPGcucmVtb3ZlLmxlbmd0aDsrK24pZy5yZW1vdmVbbl0oZSx0KTtEKG49ZS5kYXRhLmhvb2spJiZEKG49bi5yZW1vdmUpP24oZSx0KTp0KCl9ZWxzZSBvKGUuZWxtKX1mdW5jdGlvbiB4KGUsdCxuLHIpe2Zvcih2YXIgaT1uO2k8cjtpKyspe3ZhciBvPXRbaV07aWYoRChvKSYmWW4oZSxvKSlyZXR1cm4gaX19ZnVuY3Rpb24gayhlLHQsbixyKXtpZihlIT09dCl7dmFyIGk9dC5lbG09ZS5lbG07aWYoUyhlLmlzQXN5bmNQbGFjZWhvbGRlcikpRCh0LmFzeW5jRmFjdG9yeS5yZXNvbHZlZCk/TyhlLmVsbSx0LG4pOnQuaXNBc3luY1BsYWNlaG9sZGVyPSEwO2Vsc2UgaWYoUyh0LmlzU3RhdGljKSYmUyhlLmlzU3RhdGljKSYmdC5rZXk9PT1lLmtleSYmKFModC5pc0Nsb25lZCl8fFModC5pc09uY2UpKSl0LmNvbXBvbmVudEluc3RhbmNlPWUuY29tcG9uZW50SW5zdGFuY2U7ZWxzZXt2YXIgbyxhPXQuZGF0YTtEKGEpJiZEKG89YS5ob29rKSYmRChvPW8ucHJlcGF0Y2gpJiZvKGUsdCk7dmFyIHM9ZS5jaGlsZHJlbixjPXQuY2hpbGRyZW47aWYoRChhKSYmJCh0KSl7Zm9yKG89MDtvPGcudXBkYXRlLmxlbmd0aDsrK28pZy51cGRhdGVbb10oZSx0KTtEKG89YS5ob29rKSYmRChvPW8udXBkYXRlKSYmbyhlLHQpfU0odC50ZXh0KT9EKHMpJiZEKGMpP3MhPT1jJiZmdW5jdGlvbihlLHQsbixyLGkpe2Zvcih2YXIgbyxhLHMsYz0wLGw9MCx1PXQubGVuZ3RoLTEsZj10WzBdLHA9dFt1XSxkPW4ubGVuZ3RoLTEsdj1uWzBdLGg9bltkXSxtPSFpO2M8PXUmJmw8PWQ7KU0oZik/Zj10WysrY106TShwKT9wPXRbLS11XTpZbihmLHYpPyhrKGYsdixyKSxmPXRbKytjXSx2PW5bKytsXSk6WW4ocCxoKT8oayhwLGgscikscD10Wy0tdV0saD1uWy0tZF0pOlluKGYsaCk/KGsoZixoLHIpLG0mJl8uaW5zZXJ0QmVmb3JlKGUsZi5lbG0sXy5uZXh0U2libGluZyhwLmVsbSkpLGY9dFsrK2NdLGg9blstLWRdKTooWW4ocCx2KT8oayhwLHYsciksbSYmXy5pbnNlcnRCZWZvcmUoZSxwLmVsbSxmLmVsbSkscD10Wy0tdV0pOihNKG8pJiYobz1Rbih0LGMsdSkpLE0oYT1EKHYua2V5KT9vW3Yua2V5XTp4KHYsdCxjLHUpKT9iKHYscixlLGYuZWxtLCExLG4sbCk6WW4ocz10W2FdLHYpPyhrKHMsdixyKSx0W2FdPXZvaWQgMCxtJiZfLmluc2VydEJlZm9yZShlLHMuZWxtLGYuZWxtKSk6Yih2LHIsZSxmLmVsbSwhMSxuLGwpKSx2PW5bKytsXSk7dTxjP3koZSxNKG5bZCsxXSk/bnVsbDpuW2QrMV0uZWxtLG4sbCxkLHIpOmQ8bCYmQygwLHQsYyx1KX0oaSxzLGMsbixyKTpEKGMpPyhEKGUudGV4dCkmJl8uc2V0VGV4dENvbnRlbnQoaSwiIikseShpLG51bGwsYywwLGMubGVuZ3RoLTEsbikpOkQocyk/QygwLHMsMCxzLmxlbmd0aC0xKTpEKGUudGV4dCkmJl8uc2V0VGV4dENvbnRlbnQoaSwiIik6ZS50ZXh0IT09dC50ZXh0JiZfLnNldFRleHRDb250ZW50KGksdC50ZXh0KSxEKGEpJiZEKG89YS5ob29rKSYmRChvPW8ucG9zdHBhdGNoKSYmbyhlLHQpfX19ZnVuY3Rpb24gQShlLHQsbil7aWYoUyhuKSYmRChlLnBhcmVudCkpZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0PXQ7ZWxzZSBmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLmRhdGEuaG9vay5pbnNlcnQodFtyXSl9dmFyIG09cygiYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Iik7ZnVuY3Rpb24gTyhlLHQsbixyKXt2YXIgaSxvPXQudGFnLGE9dC5kYXRhLHM9dC5jaGlsZHJlbjtpZihyPXJ8fGEmJmEucHJlLHQuZWxtPWUsUyh0LmlzQ29tbWVudCkmJkQodC5hc3luY0ZhY3RvcnkpKXJldHVybiB0LmlzQXN5bmNQbGFjZWhvbGRlcj0hMDtpZihEKGEpJiYoRChpPWEuaG9vaykmJkQoaT1pLmluaXQpJiZpKHQsITApLEQoaT10LmNvbXBvbmVudEluc3RhbmNlKSkpcmV0dXJuIGQodCxuKSwhMDtpZihEKG8pKXtpZihEKHMpKWlmKGUuaGFzQ2hpbGROb2RlcygpKWlmKEQoaT1hKSYmRChpPWkuZG9tUHJvcHMpJiZEKGk9aS5pbm5lckhUTUwpKXtpZihpIT09ZS5pbm5lckhUTUwpcmV0dXJuITF9ZWxzZXtmb3IodmFyIGM9ITAsbD1lLmZpcnN0Q2hpbGQsdT0wO3U8cy5sZW5ndGg7dSsrKXtpZighbHx8IU8obCxzW3VdLG4scikpe2M9ITE7YnJlYWt9bD1sLm5leHRTaWJsaW5nfWlmKCFjfHxsKXJldHVybiExfWVsc2Ugdih0LHMsbik7aWYoRChhKSl7dmFyIGY9ITE7Zm9yKHZhciBwIGluIGEpaWYoIW0ocCkpe2Y9ITAsaCh0LG4pO2JyZWFrfSFmJiZhLmNsYXNzJiZZZShhLmNsYXNzKX19ZWxzZSBlLmRhdGEhPT10LnRleHQmJihlLmRhdGE9dC50ZXh0KTtyZXR1cm4hMH1yZXR1cm4gZnVuY3Rpb24oZSx0LG4scixpLG8pe2lmKCFNKHQpKXt2YXIgYSxzPSExLGM9W107aWYoTShlKSlzPSEwLGIodCxjLGksbyk7ZWxzZXt2YXIgbD1EKGUubm9kZVR5cGUpO2lmKCFsJiZZbihlLHQpKWsoZSx0LGMscik7ZWxzZXtpZihsKXtpZigxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoRSkmJihlLnJlbW92ZUF0dHJpYnV0ZShFKSxuPSEwKSxTKG4pJiZPKGUsdCxjKSlyZXR1cm4gQSh0LGMsITApLGU7YT1lLGU9bmV3IGxlKF8udGFnTmFtZShhKS50b0xvd2VyQ2FzZSgpLHt9LFtdLHZvaWQgMCxhKX12YXIgdT1lLmVsbSxmPV8ucGFyZW50Tm9kZSh1KTtpZihiKHQsYyx1Ll9sZWF2ZUNiP251bGw6ZixfLm5leHRTaWJsaW5nKHUpKSxEKHQucGFyZW50KSlmb3IodmFyIHA9dC5wYXJlbnQsZD0kKHQpO3A7KXtmb3IodmFyIHY9MDt2PGcuZGVzdHJveS5sZW5ndGg7Kyt2KWcuZGVzdHJveVt2XShwKTtpZihwLmVsbT10LmVsbSxkKXtmb3IodmFyIGg9MDtoPGcuY3JlYXRlLmxlbmd0aDsrK2gpZy5jcmVhdGVbaF0oWm4scCk7dmFyIG09cC5kYXRhLmhvb2suaW5zZXJ0O2lmKG0ubWVyZ2VkKWZvcih2YXIgeT0xO3k8bS5mbnMubGVuZ3RoO3krKyltLmZuc1t5XSgpfWVsc2UgR24ocCk7cD1wLnBhcmVudH1EKGYpP0MoMCxbZV0sMCwwKTpEKGUudGFnKSYmdyhlKX19cmV0dXJuIEEodCxjLHMpLHQuZWxtfUQoZSkmJncoZSl9fSh7bm9kZU9wczpxbixtb2R1bGVzOltscix5cixVcix6cix0aSxCP3tjcmVhdGU6QWksYWN0aXZhdGU6QWkscmVtb3ZlOmZ1bmN0aW9uKGUsdCl7ITAhPT1lLmRhdGEuc2hvdz9DaShlLHQpOnQoKX19Ont9XS5jb25jYXQob3IpfSk7SiYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIixmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7ZSYmZS52bW9kZWwmJk1pKGUsImlucHV0Iil9KTt2YXIgU2k9e2luc2VydGVkOmZ1bmN0aW9uKGUsdCxuLHIpeyJzZWxlY3QiPT09bi50YWc/KHIuZWxtJiYhci5lbG0uX3ZPcHRpb25zP3J0KG4sInBvc3RwYXRjaCIsZnVuY3Rpb24oKXtTaS5jb21wb25lbnRVcGRhdGVkKGUsdCxuKX0pOlRpKGUsdCxuLmNvbnRleHQpLGUuX3ZPcHRpb25zPVtdLm1hcC5jYWxsKGUub3B0aW9ucyxOaSkpOigidGV4dGFyZWEiPT09bi50YWd8fEtuKGUudHlwZSkpJiYoZS5fdk1vZGlmaWVycz10Lm1vZGlmaWVycyx0Lm1vZGlmaWVycy5sYXp5fHwoZS5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IixMaSksZS5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbmVuZCIsSWkpLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixJaSksSiYmKGUudm1vZGVsPSEwKSkpfSxjb21wb25lbnRVcGRhdGVkOmZ1bmN0aW9uKGUsdCxuKXtpZigic2VsZWN0Ij09PW4udGFnKXtUaShlLHQsbi5jb250ZXh0KTt2YXIgcj1lLl92T3B0aW9ucyxpPWUuX3ZPcHRpb25zPVtdLm1hcC5jYWxsKGUub3B0aW9ucyxOaSk7aWYoaS5zb21lKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIUMoZSxyW3RdKX0pKShlLm11bHRpcGxlP3QudmFsdWUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gamkoZSxpKX0pOnQudmFsdWUhPT10Lm9sZFZhbHVlJiZqaSh0LnZhbHVlLGkpKSYmTWkoZSwiY2hhbmdlIil9fX07ZnVuY3Rpb24gVGkoZSx0LG4pe0VpKGUsdCxuKSwoS3x8cSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtFaShlLHQsbil9LDApfWZ1bmN0aW9uIEVpKGUsdCxuKXt2YXIgcj10LnZhbHVlLGk9ZS5tdWx0aXBsZTtpZighaXx8QXJyYXkuaXNBcnJheShyKSl7Zm9yKHZhciBvLGEscz0wLGM9ZS5vcHRpb25zLmxlbmd0aDtzPGM7cysrKWlmKGE9ZS5vcHRpb25zW3NdLGkpbz0tMTx4KHIsTmkoYSkpLGEuc2VsZWN0ZWQhPT1vJiYoYS5zZWxlY3RlZD1vKTtlbHNlIGlmKEMoTmkoYSkscikpcmV0dXJuIHZvaWQoZS5zZWxlY3RlZEluZGV4IT09cyYmKGUuc2VsZWN0ZWRJbmRleD1zKSk7aXx8KGUuc2VsZWN0ZWRJbmRleD0tMSl9fWZ1bmN0aW9uIGppKHQsZSl7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIUMoZSx0KX0pfWZ1bmN0aW9uIE5pKGUpe3JldHVybiJfdmFsdWUiaW4gZT9lLl92YWx1ZTplLnZhbHVlfWZ1bmN0aW9uIExpKGUpe2UudGFyZ2V0LmNvbXBvc2luZz0hMH1mdW5jdGlvbiBJaShlKXtlLnRhcmdldC5jb21wb3NpbmcmJihlLnRhcmdldC5jb21wb3Npbmc9ITEsTWkoZS50YXJnZXQsImlucHV0IikpfWZ1bmN0aW9uIE1pKGUsdCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkhUTUxFdmVudHMiKTtuLmluaXRFdmVudCh0LCEwLCEwKSxlLmRpc3BhdGNoRXZlbnQobil9ZnVuY3Rpb24gRGkoZSl7cmV0dXJuIWUuY29tcG9uZW50SW5zdGFuY2V8fGUuZGF0YSYmZS5kYXRhLnRyYW5zaXRpb24/ZTpEaShlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSl9dmFyIFBpPXttb2RlbDpTaSxzaG93OntiaW5kOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LnZhbHVlLGk9KG49RGkobikpLmRhdGEmJm4uZGF0YS50cmFuc2l0aW9uLG89ZS5fX3ZPcmlnaW5hbERpc3BsYXk9Im5vbmUiPT09ZS5zdHlsZS5kaXNwbGF5PyIiOmUuc3R5bGUuZGlzcGxheTtyJiZpPyhuLmRhdGEuc2hvdz0hMCx3aShuLGZ1bmN0aW9uKCl7ZS5zdHlsZS5kaXNwbGF5PW99KSk6ZS5zdHlsZS5kaXNwbGF5PXI/bzoibm9uZSJ9LHVwZGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dC52YWx1ZTshciE9IXQub2xkVmFsdWUmJigobj1EaShuKSkuZGF0YSYmbi5kYXRhLnRyYW5zaXRpb24/KG4uZGF0YS5zaG93PSEwLHI/d2kobixmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT1lLl9fdk9yaWdpbmFsRGlzcGxheX0pOkNpKG4sZnVuY3Rpb24oKXtlLnN0eWxlLmRpc3BsYXk9Im5vbmUifSkpOmUuc3R5bGUuZGlzcGxheT1yP2UuX192T3JpZ2luYWxEaXNwbGF5OiJub25lIil9LHVuYmluZDpmdW5jdGlvbihlLHQsbixyLGkpe2l8fChlLnN0eWxlLmRpc3BsYXk9ZS5fX3ZPcmlnaW5hbERpc3BsYXkpfX19LEZpPXtuYW1lOlN0cmluZyxhcHBlYXI6Qm9vbGVhbixjc3M6Qm9vbGVhbixtb2RlOlN0cmluZyx0eXBlOlN0cmluZyxlbnRlckNsYXNzOlN0cmluZyxsZWF2ZUNsYXNzOlN0cmluZyxlbnRlclRvQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmcsZW50ZXJBY3RpdmVDbGFzczpTdHJpbmcsbGVhdmVBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyQ2xhc3M6U3RyaW5nLGFwcGVhckFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJUb0NsYXNzOlN0cmluZyxkdXJhdGlvbjpbTnVtYmVyLFN0cmluZyxPYmplY3RdfTtmdW5jdGlvbiBSaShlKXt2YXIgdD1lJiZlLmNvbXBvbmVudE9wdGlvbnM7cmV0dXJuIHQmJnQuQ3Rvci5vcHRpb25zLmFic3RyYWN0P1JpKGx0KHQuY2hpbGRyZW4pKTplfWZ1bmN0aW9uIEhpKGUpe3ZhciB0PXt9LG49ZS4kb3B0aW9ucztmb3IodmFyIHIgaW4gbi5wcm9wc0RhdGEpdFtyXT1lW3JdO3ZhciBpPW4uX3BhcmVudExpc3RlbmVycztmb3IodmFyIG8gaW4gaSl0W2cobyldPWlbb107cmV0dXJuIHR9ZnVuY3Rpb24gQmkoZSx0KXtpZigvXGQta2VlcC1hbGl2ZSQvLnRlc3QodC50YWcpKXJldHVybiBlKCJrZWVwLWFsaXZlIix7cHJvcHM6dC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YX0pfXZhciBVaT17bmFtZToidHJhbnNpdGlvbiIscHJvcHM6RmksYWJzdHJhY3Q6ITAscmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLiRzbG90cy5kZWZhdWx0O2lmKG4mJihuPW4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ3x8Y3QoZSl9KSkubGVuZ3RoKXt2YXIgcj10aGlzLm1vZGUsaT1uWzBdO2lmKGZ1bmN0aW9uKGUpe2Zvcig7ZT1lLnBhcmVudDspaWYoZS5kYXRhLnRyYW5zaXRpb24pcmV0dXJuITB9KHRoaXMuJHZub2RlKSlyZXR1cm4gaTt2YXIgbz1SaShpKTtpZighbylyZXR1cm4gaTtpZih0aGlzLl9sZWF2aW5nKXJldHVybiBCaShlLGkpO3ZhciBhPSJfX3RyYW5zaXRpb24tIit0aGlzLl91aWQrIi0iO28ua2V5PW51bGw9PW8ua2V5P28uaXNDb21tZW50P2ErImNvbW1lbnQiOmErby50YWc6VChvLmtleSk/MD09PVN0cmluZyhvLmtleSkuaW5kZXhPZihhKT9vLmtleTphK28ua2V5Om8ua2V5O3ZhciBzLGMsbD0oby5kYXRhfHwoby5kYXRhPXt9KSkudHJhbnNpdGlvbj1IaSh0aGlzKSx1PXRoaXMuX3Zub2RlLGY9UmkodSk7aWYoby5kYXRhLmRpcmVjdGl2ZXMmJm8uZGF0YS5kaXJlY3RpdmVzLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuInNob3ciPT09ZS5uYW1lfSkmJihvLmRhdGEuc2hvdz0hMCksZiYmZi5kYXRhJiYocz1vLChjPWYpLmtleSE9PXMua2V5fHxjLnRhZyE9PXMudGFnKSYmIWN0KGYpJiYoIWYuY29tcG9uZW50SW5zdGFuY2V8fCFmLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpKXt2YXIgcD1mLmRhdGEudHJhbnNpdGlvbj1tKHt9LGwpO2lmKCJvdXQtaW4iPT09cilyZXR1cm4gdGhpcy5fbGVhdmluZz0hMCxydChwLCJhZnRlckxlYXZlIixmdW5jdGlvbigpe3QuX2xlYXZpbmc9ITEsdC4kZm9yY2VVcGRhdGUoKX0pLEJpKGUsaSk7aWYoImluLW91dCI9PT1yKXtpZihjdChvKSlyZXR1cm4gdTt2YXIgZCx2PWZ1bmN0aW9uKCl7ZCgpfTtydChsLCJhZnRlckVudGVyIix2KSxydChsLCJlbnRlckNhbmNlbGxlZCIsdikscnQocCwiZGVsYXlMZWF2ZSIsZnVuY3Rpb24oZSl7ZD1lfSl9fXJldHVybiBpfX19LFZpPW0oe3RhZzpTdHJpbmcsbW92ZUNsYXNzOlN0cmluZ30sRmkpO2Z1bmN0aW9uIHppKGUpe2UuZWxtLl9tb3ZlQ2ImJmUuZWxtLl9tb3ZlQ2IoKSxlLmVsbS5fZW50ZXJDYiYmZS5lbG0uX2VudGVyQ2IoKX1mdW5jdGlvbiBLaShlKXtlLmRhdGEubmV3UG9zPWUuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWZ1bmN0aW9uIEppKGUpe3ZhciB0PWUuZGF0YS5wb3Msbj1lLmRhdGEubmV3UG9zLHI9dC5sZWZ0LW4ubGVmdCxpPXQudG9wLW4udG9wO2lmKHJ8fGkpe2UuZGF0YS5tb3ZlZD0hMDt2YXIgbz1lLmVsbS5zdHlsZTtvLnRyYW5zZm9ybT1vLldlYmtpdFRyYW5zZm9ybT0idHJhbnNsYXRlKCIrcisicHgsIitpKyJweCkiLG8udHJhbnNpdGlvbkR1cmF0aW9uPSIwcyJ9fWRlbGV0ZSBWaS5tb2RlO3ZhciBxaT17VHJhbnNpdGlvbjpVaSxUcmFuc2l0aW9uR3JvdXA6e3Byb3BzOlZpLHJlbmRlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50YWd8fHRoaXMuJHZub2RlLmRhdGEudGFnfHwic3BhbiIsbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9dGhpcy5wcmV2Q2hpbGRyZW49dGhpcy5jaGlsZHJlbixpPXRoaXMuJHNsb3RzLmRlZmF1bHR8fFtdLG89dGhpcy5jaGlsZHJlbj1bXSxhPUhpKHRoaXMpLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGM9aVtzXTtjLnRhZyYmbnVsbCE9Yy5rZXkmJjAhPT1TdHJpbmcoYy5rZXkpLmluZGV4T2YoIl9fdmxpc3QiKSYmKG8ucHVzaChjKSwoKG5bYy5rZXldPWMpLmRhdGF8fChjLmRhdGE9e30pKS50cmFuc2l0aW9uPWEpfWlmKHIpe2Zvcih2YXIgbD1bXSx1PVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIHA9cltmXTtwLmRhdGEudHJhbnNpdGlvbj1hLHAuZGF0YS5wb3M9cC5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbltwLmtleV0/bC5wdXNoKHApOnUucHVzaChwKX10aGlzLmtlcHQ9ZSh0LG51bGwsbCksdGhpcy5yZW1vdmVkPXV9cmV0dXJuIGUodCxudWxsLG8pfSxiZWZvcmVVcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9fcGF0Y2hfXyh0aGlzLl92bm9kZSx0aGlzLmtlcHQsITEsITApLHRoaXMuX3Zub2RlPXRoaXMua2VwdH0sdXBkYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJldkNoaWxkcmVuLHI9dGhpcy5tb3ZlQ2xhc3N8fCh0aGlzLm5hbWV8fCJ2IikrIi1tb3ZlIjtlLmxlbmd0aCYmdGhpcy5oYXNNb3ZlKGVbMF0uZWxtLHIpJiYoZS5mb3JFYWNoKHppKSxlLmZvckVhY2goS2kpLGUuZm9yRWFjaChKaSksdGhpcy5fcmVmbG93PWRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGUuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmRhdGEubW92ZWQpe3ZhciBuPWUuZWxtLHQ9bi5zdHlsZTtoaShuLHIpLHQudHJhbnNmb3JtPXQuV2Via2l0VHJhbnNmb3JtPXQudHJhbnNpdGlvbkR1cmF0aW9uPSIiLG4uYWRkRXZlbnRMaXN0ZW5lcih1aSxuLl9tb3ZlQ2I9ZnVuY3Rpb24gZSh0KXt0JiYhL3RyYW5zZm9ybSQvLnRlc3QodC5wcm9wZXJ0eU5hbWUpfHwobi5yZW1vdmVFdmVudExpc3RlbmVyKHVpLGUpLG4uX21vdmVDYj1udWxsLG1pKG4scikpfSl9fSkpfSxtZXRob2RzOntoYXNNb3ZlOmZ1bmN0aW9uKGUsdCl7aWYoIWFpKXJldHVybiExO2lmKHRoaXMuX2hhc01vdmUpcmV0dXJuIHRoaXMuX2hhc01vdmU7dmFyIG49ZS5jbG9uZU5vZGUoKTtlLl90cmFuc2l0aW9uQ2xhc3NlcyYmZS5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihlKXtyaShuLGUpfSksbmkobix0KSxuLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuJGVsLmFwcGVuZENoaWxkKG4pO3ZhciByPV9pKG4pO3JldHVybiB0aGlzLiRlbC5yZW1vdmVDaGlsZChuKSx0aGlzLl9oYXNNb3ZlPXIuaGFzVHJhbnNmb3JtfX19fTtobi5jb25maWcubXVzdFVzZVByb3A9U24saG4uY29uZmlnLmlzUmVzZXJ2ZWRUYWc9VW4saG4uY29uZmlnLmlzUmVzZXJ2ZWRBdHRyPUFuLGhuLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2U9Vm4saG4uY29uZmlnLmlzVW5rbm93bkVsZW1lbnQ9ZnVuY3Rpb24oZSl7aWYoIUIpcmV0dXJuITA7aWYoVW4oZSkpcmV0dXJuITE7aWYoZT1lLnRvTG93ZXJDYXNlKCksbnVsbCE9em5bZV0pcmV0dXJuIHpuW2VdO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuLTE8ZS5pbmRleE9mKCItIik/em5bZV09dC5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnR8fHQuY29uc3RydWN0b3I9PT13aW5kb3cuSFRNTEVsZW1lbnQ6em5bZV09L0hUTUxVbmtub3duRWxlbWVudC8udGVzdCh0LnRvU3RyaW5nKCkpfSxtKGhuLm9wdGlvbnMuZGlyZWN0aXZlcyxQaSksbShobi5vcHRpb25zLmNvbXBvbmVudHMscWkpLGhuLnByb3RvdHlwZS5fX3BhdGNoX189Qj9PaTokLGhuLnByb3RvdHlwZS4kbW91bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1lJiZCP0puKGUpOnZvaWQgMCxyPWUsaT10LChuPXRoaXMpLiRlbD1yLG4uJG9wdGlvbnMucmVuZGVyfHwobi4kb3B0aW9ucy5yZW5kZXI9ZmUpLF90KG4sImJlZm9yZU1vdW50IiksbmV3IFN0KG4sZnVuY3Rpb24oKXtuLl91cGRhdGUobi5fcmVuZGVyKCksaSl9LCQsbnVsbCwhMCksaT0hMSxudWxsPT1uLiR2bm9kZSYmKG4uX2lzTW91bnRlZD0hMCxfdChuLCJtb3VudGVkIikpLG47dmFyIG4scixpfSxCJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ai5kZXZ0b29scyYmUSYmUS5lbWl0KCJpbml0Iixobil9LDApO3ZhciBXaT0vXHtceygoPzoufFxuKSs/KVx9XH0vZyxHaT0vWy0uKis/XiR7fSgpfFtcXVwvXFxdL2csWmk9ZShmdW5jdGlvbihlKXt2YXIgdD1lWzBdLnJlcGxhY2UoR2ksIlxcJCYiKSxuPWVbMV0ucmVwbGFjZShHaSwiXFwkJiIpO3JldHVybiBuZXcgUmVnRXhwKHQrIigoPzoufFxcbikrPykiK24sImciKX0pO3ZhciBYaT17c3RhdGljS2V5czpbInN0YXRpY0NsYXNzIl0sdHJhbnNmb3JtTm9kZTpmdW5jdGlvbihlLHQpe3Qud2Fybjt2YXIgbj1TcihlLCJjbGFzcyIpO24mJihlLnN0YXRpY0NsYXNzPUpTT04uc3RyaW5naWZ5KG4pKTt2YXIgcj1PcihlLCJjbGFzcyIsITEpO3ImJihlLmNsYXNzQmluZGluZz1yKX0sZ2VuRGF0YTpmdW5jdGlvbihlKXt2YXIgdD0iIjtyZXR1cm4gZS5zdGF0aWNDbGFzcyYmKHQrPSJzdGF0aWNDbGFzczoiK2Uuc3RhdGljQ2xhc3MrIiwiKSxlLmNsYXNzQmluZGluZyYmKHQrPSJjbGFzczoiK2UuY2xhc3NCaW5kaW5nKyIsIiksdH19O3ZhciBZaSxRaT17c3RhdGljS2V5czpbInN0YXRpY1N0eWxlIl0sdHJhbnNmb3JtTm9kZTpmdW5jdGlvbihlLHQpe3Qud2Fybjt2YXIgbj1TcihlLCJzdHlsZSIpO24mJihlLnN0YXRpY1N0eWxlPUpTT04uc3RyaW5naWZ5KEtyKG4pKSk7dmFyIHI9T3IoZSwic3R5bGUiLCExKTtyJiYoZS5zdHlsZUJpbmRpbmc9cil9LGdlbkRhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9IiI7cmV0dXJuIGUuc3RhdGljU3R5bGUmJih0Kz0ic3RhdGljU3R5bGU6IitlLnN0YXRpY1N0eWxlKyIsIiksZS5zdHlsZUJpbmRpbmcmJih0Kz0ic3R5bGU6KCIrZS5zdHlsZUJpbmRpbmcrIiksIiksdH19LGVvPWZ1bmN0aW9uKGUpe3JldHVybihZaT1ZaXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1lLFlpLnRleHRDb250ZW50fSx0bz1zKCJhcmVhLGJhc2UsYnIsY29sLGVtYmVkLGZyYW1lLGhyLGltZyxpbnB1dCxpc2luZGV4LGtleWdlbixsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdiciIpLG5vPXMoImNvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0cixzb3VyY2UiKSxybz1zKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmFzZSxibG9ja3F1b3RlLGJvZHksY2FwdGlvbixjb2wsY29sZ3JvdXAsZGQsZGV0YWlscyxkaWFsb2csZGl2LGRsLGR0LGZpZWxkc2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rlcixmb3JtLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWQsaGVhZGVyLGhncm91cCxocixodG1sLGxlZ2VuZCxsaSxtZW51aXRlbSxtZXRhLG9wdGdyb3VwLG9wdGlvbixwYXJhbSxycCxydCxzb3VyY2Usc3R5bGUsc3VtbWFyeSx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0aXRsZSx0cix0cmFjayIpLGlvPS9eXHMqKFteXHMiJzw+XC89XSspKD86XHMqKD0pXHMqKD86IihbXiJdKikiK3wnKFteJ10qKScrfChbXlxzIic9PD5gXSspKSk/Lyxvbz0iW2EtekEtWl9dW1xcd1xcLVxcLl0qIixhbz0iKCg/OiIrb28rIlxcOik/IitvbysiKSIsc289bmV3IFJlZ0V4cCgiXjwiK2FvKSxjbz0vXlxzKihcLz8pPi8sbG89bmV3IFJlZ0V4cCgiXjxcXC8iK2FvKyJbXj5dKj4iKSx1bz0vXjwhRE9DVFlQRSBbXj5dKz4vaSxmbz0vXjwhXC0tLyxwbz0vXjwhXFsvLHZvPSExOyJ4Ii5yZXBsYWNlKC94KC4pPy9nLGZ1bmN0aW9uKGUsdCl7dm89IiI9PT10fSk7dmFyIGhvPXMoInNjcmlwdCxzdHlsZSx0ZXh0YXJlYSIsITApLG1vPXt9LHlvPXsiJmx0OyI6IjwiLCImZ3Q7IjoiPiIsIiZxdW90OyI6JyInLCImYW1wOyI6IiYiLCImIzEwOyI6IlxuIiwiJiM5OyI6Ilx0In0sZ289LyYoPzpsdHxndHxxdW90fGFtcCk7L2csX289LyYoPzpsdHxndHxxdW90fGFtcHwjMTB8IzkpOy9nLGJvPXMoInByZSx0ZXh0YXJlYSIsITApLCRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmJvKGUpJiYiXG4iPT09dFswXX07dmFyIHdvLENvLHhvLGtvLEFvLE9vLFNvLFRvLEVvPS9eQHxedi1vbjovLGpvPS9edi18XkB8XjovLE5vPS8oW15dKj8pXHMrKD86aW58b2YpXHMrKFteXSopLyxMbz0vLChbXixcfVxdXSopKD86LChbXixcfVxdXSopKT8kLyxJbz0vXlwofFwpJC9nLE1vPS86KC4qKSQvLERvPS9eOnxedi1iaW5kOi8sUG89L1wuW14uXSsvZyxGbz1lKGVvKTtmdW5jdGlvbiBSbyhlLHQsbil7cmV0dXJue3R5cGU6MSx0YWc6ZSxhdHRyc0xpc3Q6dCxhdHRyc01hcDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9e30sbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0W2Vbbl0ubmFtZV09ZVtuXS52YWx1ZTtyZXR1cm4gdH0odCkscGFyZW50Om4sY2hpbGRyZW46W119fWZ1bmN0aW9uIEhvKGUscCl7d289cC53YXJufHwkcixPbz1wLmlzUHJlVGFnfHxPLFNvPXAubXVzdFVzZVByb3B8fE8sVG89cC5nZXRUYWdOYW1lc3BhY2V8fE8seG89d3IocC5tb2R1bGVzLCJ0cmFuc2Zvcm1Ob2RlIiksa289d3IocC5tb2R1bGVzLCJwcmVUcmFuc2Zvcm1Ob2RlIiksQW89d3IocC5tb2R1bGVzLCJwb3N0VHJhbnNmb3JtTm9kZSIpLENvPXAuZGVsaW1pdGVyczt2YXIgZCx2LGg9W10saT0hMSE9PXAucHJlc2VydmVXaGl0ZXNwYWNlLG09ITEseT0hMTtmdW5jdGlvbiBnKGUpe2UucHJlJiYobT0hMSksT28oZS50YWcpJiYoeT0hMSk7Zm9yKHZhciB0PTA7dDxBby5sZW5ndGg7dCsrKUFvW3RdKGUscCl9cmV0dXJuIGZ1bmN0aW9uKGksZCl7Zm9yKHZhciBlLHYsaD1bXSxtPWQuZXhwZWN0SFRNTCx5PWQuaXNVbmFyeVRhZ3x8TyxnPWQuY2FuQmVMZWZ0T3BlblRhZ3x8TyxhPTA7aTspe2lmKGU9aSx2JiZobyh2KSl7dmFyIHI9MCxvPXYudG9Mb3dlckNhc2UoKSx0PW1vW29dfHwobW9bb109bmV3IFJlZ0V4cCgiKFtcXHNcXFNdKj8pKDwvIitvKyJbXj5dKj4pIiwiaSIpKSxuPWkucmVwbGFjZSh0LGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcj1uLmxlbmd0aCxobyhvKXx8Im5vc2NyaXB0Ij09PW98fCh0PXQucmVwbGFjZSgvPCFcLS0oW1xzXFNdKj8pLS0+L2csIiQxIikucmVwbGFjZSgvPCFcW0NEQVRBXFsoW1xzXFNdKj8pXV0+L2csIiQxIikpLCRvKG8sdCkmJih0PXQuc2xpY2UoMSkpLGQuY2hhcnMmJmQuY2hhcnModCksIiJ9KTthKz1pLmxlbmd0aC1uLmxlbmd0aCxpPW4sQShvLGEtcixhKX1lbHNle3ZhciBzPWkuaW5kZXhPZigiPCIpO2lmKDA9PT1zKXtpZihmby50ZXN0KGkpKXt2YXIgYz1pLmluZGV4T2YoIi0tXHgzZSIpO2lmKDA8PWMpe2Quc2hvdWxkS2VlcENvbW1lbnQmJmQuY29tbWVudChpLnN1YnN0cmluZyg0LGMpKSxDKGMrMyk7Y29udGludWV9fWlmKHBvLnRlc3QoaSkpe3ZhciBsPWkuaW5kZXhPZigiXT4iKTtpZigwPD1sKXtDKGwrMik7Y29udGludWV9fXZhciB1PWkubWF0Y2godW8pO2lmKHUpe0ModVswXS5sZW5ndGgpO2NvbnRpbnVlfXZhciBmPWkubWF0Y2gobG8pO2lmKGYpe3ZhciBwPWE7QyhmWzBdLmxlbmd0aCksQShmWzFdLHAsYSk7Y29udGludWV9dmFyIF89eCgpO2lmKF8pe2soXyksJG8odixpKSYmQygxKTtjb250aW51ZX19dmFyIGI9dm9pZCAwLCQ9dm9pZCAwLHc9dm9pZCAwO2lmKDA8PXMpe2ZvcigkPWkuc2xpY2Uocyk7IShsby50ZXN0KCQpfHxzby50ZXN0KCQpfHxmby50ZXN0KCQpfHxwby50ZXN0KCQpfHwodz0kLmluZGV4T2YoIjwiLDEpKTwwKTspcys9dywkPWkuc2xpY2Uocyk7Yj1pLnN1YnN0cmluZygwLHMpLEMocyl9czwwJiYoYj1pLGk9IiIpLGQuY2hhcnMmJmImJmQuY2hhcnMoYil9aWYoaT09PWUpe2QuY2hhcnMmJmQuY2hhcnMoaSk7YnJlYWt9fWZ1bmN0aW9uIEMoZSl7YSs9ZSxpPWkuc3Vic3RyaW5nKGUpfWZ1bmN0aW9uIHgoKXt2YXIgZT1pLm1hdGNoKHNvKTtpZihlKXt2YXIgdCxuLHI9e3RhZ05hbWU6ZVsxXSxhdHRyczpbXSxzdGFydDphfTtmb3IoQyhlWzBdLmxlbmd0aCk7ISh0PWkubWF0Y2goY28pKSYmKG49aS5tYXRjaChpbykpOylDKG5bMF0ubGVuZ3RoKSxyLmF0dHJzLnB1c2gobik7aWYodClyZXR1cm4gci51bmFyeVNsYXNoPXRbMV0sQyh0WzBdLmxlbmd0aCksci5lbmQ9YSxyfX1mdW5jdGlvbiBrKGUpe3ZhciB0PWUudGFnTmFtZSxuPWUudW5hcnlTbGFzaDttJiYoInAiPT09diYmcm8odCkmJkEodiksZyh0KSYmdj09PXQmJkEodCkpO2Zvcih2YXIgcixpLG8sYT15KHQpfHwhIW4scz1lLmF0dHJzLmxlbmd0aCxjPW5ldyBBcnJheShzKSxsPTA7bDxzO2wrKyl7dmFyIHU9ZS5hdHRyc1tsXTt2byYmLTE9PT11WzBdLmluZGV4T2YoJyIiJykmJigiIj09PXVbM10mJmRlbGV0ZSB1WzNdLCIiPT09dVs0XSYmZGVsZXRlIHVbNF0sIiI9PT11WzVdJiZkZWxldGUgdVs1XSk7dmFyIGY9dVszXXx8dVs0XXx8dVs1XXx8IiIscD0iYSI9PT10JiYiaHJlZiI9PT11WzFdP2Quc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOmQuc2hvdWxkRGVjb2RlTmV3bGluZXM7Y1tsXT17bmFtZTp1WzFdLHZhbHVlOihyPWYsaT1wLG89aT9fbzpnbyxyLnJlcGxhY2UobyxmdW5jdGlvbihlKXtyZXR1cm4geW9bZV19KSl9fWF8fChoLnB1c2goe3RhZzp0LGxvd2VyQ2FzZWRUYWc6dC50b0xvd2VyQ2FzZSgpLGF0dHJzOmN9KSx2PXQpLGQuc3RhcnQmJmQuc3RhcnQodCxjLGEsZS5zdGFydCxlLmVuZCl9ZnVuY3Rpb24gQShlLHQsbil7dmFyIHIsaTtpZihudWxsPT10JiYodD1hKSxudWxsPT1uJiYobj1hKSxlJiYoaT1lLnRvTG93ZXJDYXNlKCkpLGUpZm9yKHI9aC5sZW5ndGgtMTswPD1yJiZoW3JdLmxvd2VyQ2FzZWRUYWchPT1pO3ItLSk7ZWxzZSByPTA7aWYoMDw9cil7Zm9yKHZhciBvPWgubGVuZ3RoLTE7cjw9bztvLS0pZC5lbmQmJmQuZW5kKGhbb10udGFnLHQsbik7aC5sZW5ndGg9cix2PXImJmhbci0xXS50YWd9ZWxzZSJiciI9PT1pP2Quc3RhcnQmJmQuc3RhcnQoZSxbXSwhMCx0LG4pOiJwIj09PWkmJihkLnN0YXJ0JiZkLnN0YXJ0KGUsW10sITEsdCxuKSxkLmVuZCYmZC5lbmQoZSx0LG4pKX1BKCl9KGUse3dhcm46d28sZXhwZWN0SFRNTDpwLmV4cGVjdEhUTUwsaXNVbmFyeVRhZzpwLmlzVW5hcnlUYWcsY2FuQmVMZWZ0T3BlblRhZzpwLmNhbkJlTGVmdE9wZW5UYWcsc2hvdWxkRGVjb2RlTmV3bGluZXM6cC5zaG91bGREZWNvZGVOZXdsaW5lcyxzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6cC5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsc2hvdWxkS2VlcENvbW1lbnQ6cC5jb21tZW50cyxzdGFydDpmdW5jdGlvbihlLHQsbil7dmFyIHI9diYmdi5uc3x8VG8oZSk7SyYmInN2ZyI9PT1yJiYodD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO0tvLnRlc3Qoci5uYW1lKXx8KHIubmFtZT1yLm5hbWUucmVwbGFjZShKbywiIiksdC5wdXNoKHIpKX1yZXR1cm4gdH0odCkpO3ZhciBpLG8sYSxzLGMsbD1SbyhlLHQsdik7ciYmKGwubnM9ciksInN0eWxlIiE9PShpPWwpLnRhZyYmKCJzY3JpcHQiIT09aS50YWd8fGkuYXR0cnNNYXAudHlwZSYmInRleHQvamF2YXNjcmlwdCIhPT1pLmF0dHJzTWFwLnR5cGUpfHxZKCl8fChsLmZvcmJpZGRlbj0hMCk7Zm9yKHZhciB1PTA7dTxrby5sZW5ndGg7dSsrKWw9a29bdV0obCxwKXx8bDtpZihtfHwobnVsbCE9U3Iobz1sLCJ2LXByZSIpJiYoby5wcmU9ITApLGwucHJlJiYobT0hMCkpLE9vKGwudGFnKSYmKHk9ITApLG0/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyc0xpc3QubGVuZ3RoO2lmKHQpZm9yKHZhciBuPWUuYXR0cnM9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09e25hbWU6ZS5hdHRyc0xpc3Rbcl0ubmFtZSx2YWx1ZTpKU09OLnN0cmluZ2lmeShlLmF0dHJzTGlzdFtyXS52YWx1ZSl9O2Vsc2UgZS5wcmV8fChlLnBsYWluPSEwKX0obCk6bC5wcm9jZXNzZWR8fChVbyhsKSxmdW5jdGlvbihlKXt2YXIgdD1TcihlLCJ2LWlmIik7aWYodCllLmlmPXQsVm8oZSx7ZXhwOnQsYmxvY2s6ZX0pO2Vsc2V7bnVsbCE9U3IoZSwidi1lbHNlIikmJihlLmVsc2U9ITApO3ZhciBuPVNyKGUsInYtZWxzZS1pZiIpO24mJihlLmVsc2VpZj1uKX19KGwpLG51bGwhPVNyKGE9bCwidi1vbmNlIikmJihhLm9uY2U9ITApLEJvKGwscCkpLGQ/aC5sZW5ndGh8fGQuaWYmJihsLmVsc2VpZnx8bC5lbHNlKSYmVm8oZCx7ZXhwOmwuZWxzZWlmLGJsb2NrOmx9KTpkPWwsdiYmIWwuZm9yYmlkZGVuKWlmKGwuZWxzZWlmfHxsLmVsc2Upcz1sLChjPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2Zvcig7dC0tOyl7aWYoMT09PWVbdF0udHlwZSlyZXR1cm4gZVt0XTtlLnBvcCgpfX0odi5jaGlsZHJlbikpJiZjLmlmJiZWbyhjLHtleHA6cy5lbHNlaWYsYmxvY2s6c30pO2Vsc2UgaWYobC5zbG90U2NvcGUpe3YucGxhaW49ITE7dmFyIGY9bC5zbG90VGFyZ2V0fHwnImRlZmF1bHQiJzsodi5zY29wZWRTbG90c3x8KHYuc2NvcGVkU2xvdHM9e30pKVtmXT1sfWVsc2Ugdi5jaGlsZHJlbi5wdXNoKGwpLGwucGFyZW50PXY7bj9nKGwpOih2PWwsaC5wdXNoKGwpKX0sZW5kOmZ1bmN0aW9uKCl7dmFyIGU9aFtoLmxlbmd0aC0xXSx0PWUuY2hpbGRyZW5bZS5jaGlsZHJlbi5sZW5ndGgtMV07dCYmMz09PXQudHlwZSYmIiAiPT09dC50ZXh0JiYheSYmZS5jaGlsZHJlbi5wb3AoKSxoLmxlbmd0aC09MSx2PWhbaC5sZW5ndGgtMV0sZyhlKX0sY2hhcnM6ZnVuY3Rpb24oZSl7aWYodiYmKCFLfHwidGV4dGFyZWEiIT09di50YWd8fHYuYXR0cnNNYXAucGxhY2Vob2xkZXIhPT1lKSl7dmFyIHQsbixyPXYuY2hpbGRyZW47aWYoZT15fHxlLnRyaW0oKT8ic2NyaXB0Ij09PSh0PXYpLnRhZ3x8InN0eWxlIj09PXQudGFnP2U6Rm8oZSk6aSYmci5sZW5ndGg/IiAiOiIiKSFtJiYiICIhPT1lJiYobj1mdW5jdGlvbihlLHQpe3ZhciBuPXQ/WmkodCk6V2k7aWYobi50ZXN0KGUpKXtmb3IodmFyIHIsaSxvLGE9W10scz1bXSxjPW4ubGFzdEluZGV4PTA7cj1uLmV4ZWMoZSk7KXtjPChpPXIuaW5kZXgpJiYocy5wdXNoKG89ZS5zbGljZShjLGkpKSxhLnB1c2goSlNPTi5zdHJpbmdpZnkobykpKTt2YXIgbD1fcihyWzFdLnRyaW0oKSk7YS5wdXNoKCJfcygiK2wrIikiKSxzLnB1c2goeyJAYmluZGluZyI6bH0pLGM9aStyWzBdLmxlbmd0aH1yZXR1cm4gYzxlLmxlbmd0aCYmKHMucHVzaChvPWUuc2xpY2UoYykpLGEucHVzaChKU09OLnN0cmluZ2lmeShvKSkpLHtleHByZXNzaW9uOmEuam9pbigiKyIpLHRva2VuczpzfX19KGUsQ28pKT9yLnB1c2goe3R5cGU6MixleHByZXNzaW9uOm4uZXhwcmVzc2lvbix0b2tlbnM6bi50b2tlbnMsdGV4dDplfSk6IiAiPT09ZSYmci5sZW5ndGgmJiIgIj09PXJbci5sZW5ndGgtMV0udGV4dHx8ci5wdXNoKHt0eXBlOjMsdGV4dDplfSl9fSxjb21tZW50OmZ1bmN0aW9uKGUpe3YuY2hpbGRyZW4ucHVzaCh7dHlwZTozLHRleHQ6ZSxpc0NvbW1lbnQ6ITB9KX19KSxkfWZ1bmN0aW9uIEJvKGUsdCl7dmFyIG4scixpLG87KHI9T3Iobj1lLCJrZXkiKSkmJihuLmtleT1yKSxlLnBsYWluPSFlLmtleSYmIWUuYXR0cnNMaXN0Lmxlbmd0aCwobz1PcihpPWUsInJlZiIpKSYmKGkucmVmPW8saS5yZWZJbkZvcj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZTt0Oyl7aWYodm9pZCAwIT09dC5mb3IpcmV0dXJuITA7dD10LnBhcmVudH1yZXR1cm4hMX0oaSkpLGZ1bmN0aW9uKGUpe2lmKCJzbG90Ij09PWUudGFnKWUuc2xvdE5hbWU9T3IoZSwibmFtZSIpO2Vsc2V7dmFyIHQ7InRlbXBsYXRlIj09PWUudGFnPyh0PVNyKGUsInNjb3BlIiksZS5zbG90U2NvcGU9dHx8U3IoZSwic2xvdC1zY29wZSIpKToodD1TcihlLCJzbG90LXNjb3BlIikpJiYoZS5zbG90U2NvcGU9dCk7dmFyIG49T3IoZSwic2xvdCIpO24mJihlLnNsb3RUYXJnZXQ9JyIiJz09PW4/JyJkZWZhdWx0Iic6biwidGVtcGxhdGUiPT09ZS50YWd8fGUuc2xvdFNjb3BlfHx4cihlLCJzbG90IixuKSl9fShlKSxmdW5jdGlvbihlKXt2YXIgdDsodD1PcihlLCJpcyIpKSYmKGUuY29tcG9uZW50PXQpO251bGwhPVNyKGUsImlubGluZS10ZW1wbGF0ZSIpJiYoZS5pbmxpbmVUZW1wbGF0ZT0hMCl9KGUpO2Zvcih2YXIgYT0wO2E8eG8ubGVuZ3RoO2ErKyllPXhvW2FdKGUsdCl8fGU7IWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLGM9ZS5hdHRyc0xpc3Q7Zm9yKHQ9MCxuPWMubGVuZ3RoO3Q8bjt0KyspaWYocj1pPWNbdF0ubmFtZSxvPWNbdF0udmFsdWUsam8udGVzdChyKSlpZihlLmhhc0JpbmRpbmdzPSEwLChhPXpvKHIpKSYmKHI9ci5yZXBsYWNlKFBvLCIiKSksRG8udGVzdChyKSlyPXIucmVwbGFjZShEbywiIiksbz1fcihvKSxzPSExLGEmJihhLnByb3AmJihzPSEwLCJpbm5lckh0bWwiPT09KHI9ZyhyKSkmJihyPSJpbm5lckhUTUwiKSksYS5jYW1lbCYmKHI9ZyhyKSksYS5zeW5jJiZBcihlLCJ1cGRhdGU6IitnKHIpLEVyKG8sIiRldmVudCIpKSksc3x8IWUuY29tcG9uZW50JiZTbyhlLnRhZyxlLmF0dHJzTWFwLnR5cGUscik/Q3IoZSxyLG8pOnhyKGUscixvKTtlbHNlIGlmKEVvLnRlc3Qocikpcj1yLnJlcGxhY2UoRW8sIiIpLEFyKGUscixvLGEsITEpO2Vsc2V7dmFyIGw9KHI9ci5yZXBsYWNlKGpvLCIiKSkubWF0Y2goTW8pLHU9bCYmbFsxXTt1JiYocj1yLnNsaWNlKDAsLSh1Lmxlbmd0aCsxKSkpLHA9cixkPWksdj1vLGg9dSxtPWEsKChmPWUpLmRpcmVjdGl2ZXN8fChmLmRpcmVjdGl2ZXM9W10pKS5wdXNoKHtuYW1lOnAscmF3TmFtZTpkLHZhbHVlOnYsYXJnOmgsbW9kaWZpZXJzOm19KSxmLnBsYWluPSExfWVsc2UgeHIoZSxyLEpTT04uc3RyaW5naWZ5KG8pKSwhZS5jb21wb25lbnQmJiJtdXRlZCI9PT1yJiZTbyhlLnRhZyxlLmF0dHJzTWFwLnR5cGUscikmJkNyKGUsciwidHJ1ZSIpO3ZhciBmLHAsZCx2LGgsbX0oZSl9ZnVuY3Rpb24gVW8oZSl7dmFyIHQ7aWYodD1TcihlLCJ2LWZvciIpKXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKE5vKTtpZighdClyZXR1cm47dmFyIG49e307bi5mb3I9dFsyXS50cmltKCk7dmFyIHI9dFsxXS50cmltKCkucmVwbGFjZShJbywiIiksaT1yLm1hdGNoKExvKTtpPyhuLmFsaWFzPXIucmVwbGFjZShMbywiIiksbi5pdGVyYXRvcjE9aVsxXS50cmltKCksaVsyXSYmKG4uaXRlcmF0b3IyPWlbMl0udHJpbSgpKSk6bi5hbGlhcz1yO3JldHVybiBufSh0KTtuJiZtKGUsbil9fWZ1bmN0aW9uIFZvKGUsdCl7ZS5pZkNvbmRpdGlvbnN8fChlLmlmQ29uZGl0aW9ucz1bXSksZS5pZkNvbmRpdGlvbnMucHVzaCh0KX1mdW5jdGlvbiB6byhlKXt2YXIgdD1lLm1hdGNoKFBvKTtpZih0KXt2YXIgbj17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZS5zbGljZSgxKV09ITB9KSxufX12YXIgS289L154bWxuczpOU1xkKy8sSm89L15OU1xkKzovO2Z1bmN0aW9uIHFvKGUpe3JldHVybiBSbyhlLnRhZyxlLmF0dHJzTGlzdC5zbGljZSgpLGUucGFyZW50KX12YXIgV289W1hpLFFpLHtwcmVUcmFuc2Zvcm1Ob2RlOmZ1bmN0aW9uKGUsdCl7aWYoImlucHV0Ij09PWUudGFnKXt2YXIgbixyPWUuYXR0cnNNYXA7aWYoIXJbInYtbW9kZWwiXSlyZXR1cm47aWYoKHJbIjp0eXBlIl18fHJbInYtYmluZDp0eXBlIl0pJiYobj1PcihlLCJ0eXBlIikpLHIudHlwZXx8bnx8IXJbInYtYmluZCJdfHwobj0iKCIrclsidi1iaW5kIl0rIikudHlwZSIpLG4pe3ZhciBpPVNyKGUsInYtaWYiLCEwKSxvPWk/IiYmKCIraSsiKSI6IiIsYT1udWxsIT1TcihlLCJ2LWVsc2UiLCEwKSxzPVNyKGUsInYtZWxzZS1pZiIsITApLGM9cW8oZSk7VW8oYyksa3IoYywidHlwZSIsImNoZWNrYm94IiksQm8oYyx0KSxjLnByb2Nlc3NlZD0hMCxjLmlmPSIoIituKyIpPT09J2NoZWNrYm94JyIrbyxWbyhjLHtleHA6Yy5pZixibG9jazpjfSk7dmFyIGw9cW8oZSk7U3IobCwidi1mb3IiLCEwKSxrcihsLCJ0eXBlIiwicmFkaW8iKSxCbyhsLHQpLFZvKGMse2V4cDoiKCIrbisiKT09PSdyYWRpbyciK28sYmxvY2s6bH0pO3ZhciB1PXFvKGUpO3JldHVybiBTcih1LCJ2LWZvciIsITApLGtyKHUsIjp0eXBlIixuKSxCbyh1LHQpLFZvKGMse2V4cDppLGJsb2NrOnV9KSxhP2MuZWxzZT0hMDpzJiYoYy5lbHNlaWY9cyksY319fX1dO3ZhciBHbyxabyxYbyxZbz17ZXhwZWN0SFRNTDohMCxtb2R1bGVzOldvLGRpcmVjdGl2ZXM6e21vZGVsOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLGMsbCx1LGYscCxkLHYsaCxtLHksZyxfPXQudmFsdWUsYj10Lm1vZGlmaWVycywkPWUudGFnLHc9ZS5hdHRyc01hcC50eXBlO2lmKGUuY29tcG9uZW50KXJldHVybiBUcihlLF8sYiksITE7aWYoInNlbGVjdCI9PT0kKWg9ZSxtPV8sZz0oZz0ndmFyICQkc2VsZWN0ZWRWYWwgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLGZ1bmN0aW9uKG8pe3JldHVybiBvLnNlbGVjdGVkfSkubWFwKGZ1bmN0aW9uKG8pe3ZhciB2YWwgPSAiX3ZhbHVlIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlO3JldHVybiAnKygoeT1iKSYmeS5udW1iZXI/Il9uKHZhbCkiOiJ2YWwiKSsifSk7IikrIiAiK0VyKG0sIiRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXSIpLEFyKGgsImNoYW5nZSIsZyxudWxsLCEwKTtlbHNlIGlmKCJpbnB1dCI9PT0kJiYiY2hlY2tib3giPT09dyljPWUsbD1fLGY9KHU9YikmJnUubnVtYmVyLHA9T3IoYywidmFsdWUiKXx8Im51bGwiLGQ9T3IoYywidHJ1ZS12YWx1ZSIpfHwidHJ1ZSIsdj1PcihjLCJmYWxzZS12YWx1ZSIpfHwiZmFsc2UiLENyKGMsImNoZWNrZWQiLCJBcnJheS5pc0FycmF5KCIrbCsiKT9faSgiK2wrIiwiK3ArIik+LTEiKygidHJ1ZSI9PT1kPyI6KCIrbCsiKSI6IjpfcSgiK2wrIiwiK2QrIikiKSksQXIoYywiY2hhbmdlIiwidmFyICQkYT0iK2wrIiwkJGVsPSRldmVudC50YXJnZXQsJCRjPSQkZWwuY2hlY2tlZD8oIitkKyIpOigiK3YrIik7aWYoQXJyYXkuaXNBcnJheSgkJGEpKXt2YXIgJCR2PSIrKGY/Il9uKCIrcCsiKSI6cCkrIiwkJGk9X2koJCRhLCQkdik7aWYoJCRlbC5jaGVja2VkKXskJGk8MCYmKCIrRXIobCwiJCRhLmNvbmNhdChbJCR2XSkiKSsiKX1lbHNleyQkaT4tMSYmKCIrRXIobCwiJCRhLnNsaWNlKDAsJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSsxKSkiKSsiKX19ZWxzZXsiK0VyKGwsIiQkYyIpKyJ9IixudWxsLCEwKTtlbHNlIGlmKCJpbnB1dCI9PT0kJiYicmFkaW8iPT09dylyPWUsaT1fLGE9KG89YikmJm8ubnVtYmVyLHM9T3IociwidmFsdWUiKXx8Im51bGwiLENyKHIsImNoZWNrZWQiLCJfcSgiK2krIiwiKyhzPWE/Il9uKCIrcysiKSI6cykrIikiKSxBcihyLCJjaGFuZ2UiLEVyKGkscyksbnVsbCwhMCk7ZWxzZSBpZigiaW5wdXQiPT09JHx8InRleHRhcmVhIj09PSQpIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmF0dHJzTWFwLnR5cGUsaT1ufHx7fSxvPWkubGF6eSxhPWkubnVtYmVyLHM9aS50cmltLGM9IW8mJiJyYW5nZSIhPT1yLGw9bz8iY2hhbmdlIjoicmFuZ2UiPT09cj9QcjoiaW5wdXQiLHU9IiRldmVudC50YXJnZXQudmFsdWUiO3MmJih1PSIkZXZlbnQudGFyZ2V0LnZhbHVlLnRyaW0oKSIpLGEmJih1PSJfbigiK3UrIikiKTt2YXIgZj1Fcih0LHUpO2MmJihmPSJpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZylyZXR1cm47IitmKSxDcihlLCJ2YWx1ZSIsIigiK3QrIikiKSxBcihlLGwsZixudWxsLCEwKSwoc3x8YSkmJkFyKGUsImJsdXIiLCIkZm9yY2VVcGRhdGUoKSIpfShlLF8sYik7ZWxzZSBpZighai5pc1Jlc2VydmVkVGFnKCQpKXJldHVybiBUcihlLF8sYiksITE7cmV0dXJuITB9LHRleHQ6ZnVuY3Rpb24oZSx0KXt0LnZhbHVlJiZDcihlLCJ0ZXh0Q29udGVudCIsIl9zKCIrdC52YWx1ZSsiKSIpfSxodG1sOmZ1bmN0aW9uKGUsdCl7dC52YWx1ZSYmQ3IoZSwiaW5uZXJIVE1MIiwiX3MoIit0LnZhbHVlKyIpIil9fSxpc1ByZVRhZzpmdW5jdGlvbihlKXtyZXR1cm4icHJlIj09PWV9LGlzVW5hcnlUYWc6dG8sbXVzdFVzZVByb3A6U24sY2FuQmVMZWZ0T3BlblRhZzpubyxpc1Jlc2VydmVkVGFnOlVuLGdldFRhZ05hbWVzcGFjZTpWbixzdGF0aWNLZXlzOihHbz1XbyxHby5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb25jYXQodC5zdGF0aWNLZXlzfHxbXSl9LFtdKS5qb2luKCIsIikpfSxRbz1lKGZ1bmN0aW9uKGUpe3JldHVybiBzKCJ0eXBlLHRhZyxhdHRyc0xpc3QsYXR0cnNNYXAscGxhaW4scGFyZW50LGNoaWxkcmVuLGF0dHJzIisoZT8iLCIrZToiIikpfSk7ZnVuY3Rpb24gZWEoZSx0KXtlJiYoWm89UW8odC5zdGF0aWNLZXlzfHwiIiksWG89dC5pc1Jlc2VydmVkVGFnfHxPLGZ1bmN0aW9uIGUodCl7dC5zdGF0aWM9ZnVuY3Rpb24oZSl7aWYoMj09PWUudHlwZSlyZXR1cm4hMTtpZigzPT09ZS50eXBlKXJldHVybiEwO3JldHVybiEoIWUucHJlJiYoZS5oYXNCaW5kaW5nc3x8ZS5pZnx8ZS5mb3J8fGMoZS50YWcpfHwhWG8oZS50YWcpfHxmdW5jdGlvbihlKXtmb3IoO2UucGFyZW50Oyl7aWYoInRlbXBsYXRlIiE9PShlPWUucGFyZW50KS50YWcpcmV0dXJuITE7aWYoZS5mb3IpcmV0dXJuITB9cmV0dXJuITF9KGUpfHwhT2JqZWN0LmtleXMoZSkuZXZlcnkoWm8pKSl9KHQpO2lmKDE9PT10LnR5cGUpe2lmKCFYbyh0LnRhZykmJiJzbG90IiE9PXQudGFnJiZudWxsPT10LmF0dHJzTWFwWyJpbmxpbmUtdGVtcGxhdGUiXSlyZXR1cm47Zm9yKHZhciBuPTAscj10LmNoaWxkcmVuLmxlbmd0aDtuPHI7bisrKXt2YXIgaT10LmNoaWxkcmVuW25dO2UoaSksaS5zdGF0aWN8fCh0LnN0YXRpYz0hMSl9aWYodC5pZkNvbmRpdGlvbnMpZm9yKHZhciBvPTEsYT10LmlmQ29uZGl0aW9ucy5sZW5ndGg7bzxhO28rKyl7dmFyIHM9dC5pZkNvbmRpdGlvbnNbb10uYmxvY2s7ZShzKSxzLnN0YXRpY3x8KHQuc3RhdGljPSExKX19fShlKSxmdW5jdGlvbiBlKHQsbil7aWYoMT09PXQudHlwZSl7aWYoKHQuc3RhdGljfHx0Lm9uY2UpJiYodC5zdGF0aWNJbkZvcj1uKSx0LnN0YXRpYyYmdC5jaGlsZHJlbi5sZW5ndGgmJigxIT09dC5jaGlsZHJlbi5sZW5ndGh8fDMhPT10LmNoaWxkcmVuWzBdLnR5cGUpKXJldHVybiB2b2lkKHQuc3RhdGljUm9vdD0hMCk7aWYodC5zdGF0aWNSb290PSExLHQuY2hpbGRyZW4pZm9yKHZhciByPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtyPGk7cisrKWUodC5jaGlsZHJlbltyXSxufHwhIXQuZm9yKTtpZih0LmlmQ29uZGl0aW9ucylmb3IodmFyIG89MSxhPXQuaWZDb25kaXRpb25zLmxlbmd0aDtvPGE7bysrKWUodC5pZkNvbmRpdGlvbnNbb10uYmxvY2ssbil9fShlLCExKSl9dmFyIHRhPS9eKFtcdyRfXSt8XChbXildKj9cKSlccyo9PnxeZnVuY3Rpb25ccypcKC8sbmE9L15bQS1aYS16XyRdW1x3JF0qKD86XC5bQS1aYS16XyRdW1x3JF0qfFxbJ1teJ10qPyddfFxbIlteIl0qPyJdfFxbXGQrXXxcW1tBLVphLXpfJF1bXHckXSpdKSokLyxyYT17ZXNjOjI3LHRhYjo5LGVudGVyOjEzLHNwYWNlOjMyLHVwOjM4LGxlZnQ6MzcscmlnaHQ6MzksZG93bjo0MCxkZWxldGU6WzgsNDZdfSxpYT17ZXNjOiJFc2NhcGUiLHRhYjoiVGFiIixlbnRlcjoiRW50ZXIiLHNwYWNlOiIgIix1cDpbIlVwIiwiQXJyb3dVcCJdLGxlZnQ6WyJMZWZ0IiwiQXJyb3dMZWZ0Il0scmlnaHQ6WyJSaWdodCIsIkFycm93UmlnaHQiXSxkb3duOlsiRG93biIsIkFycm93RG93biJdLGRlbGV0ZTpbIkJhY2tzcGFjZSIsIkRlbGV0ZSJdfSxvYT1mdW5jdGlvbihlKXtyZXR1cm4iaWYoIitlKyIpcmV0dXJuIG51bGw7In0sYWE9e3N0b3A6IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsiLHByZXZlbnQ6IiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyIsc2VsZjpvYSgiJGV2ZW50LnRhcmdldCAhPT0gJGV2ZW50LmN1cnJlbnRUYXJnZXQiKSxjdHJsOm9hKCIhJGV2ZW50LmN0cmxLZXkiKSxzaGlmdDpvYSgiISRldmVudC5zaGlmdEtleSIpLGFsdDpvYSgiISRldmVudC5hbHRLZXkiKSxtZXRhOm9hKCIhJGV2ZW50Lm1ldGFLZXkiKSxsZWZ0Om9hKCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMCIpLG1pZGRsZTpvYSgiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDEiKSxyaWdodDpvYSgiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDIiKX07ZnVuY3Rpb24gc2EoZSx0LG4pe3ZhciByPXQ/Im5hdGl2ZU9uOnsiOiJvbjp7Ijtmb3IodmFyIGkgaW4gZSlyKz0nIicraSsnIjonK2NhKGksZVtpXSkrIiwiO3JldHVybiByLnNsaWNlKDAsLTEpKyJ9In1mdW5jdGlvbiBjYSh0LGUpe2lmKCFlKXJldHVybiJmdW5jdGlvbigpe30iO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIlsiK2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjYSh0LGUpfSkuam9pbigiLCIpKyJdIjt2YXIgbj1uYS50ZXN0KGUudmFsdWUpLHI9dGEudGVzdChlLnZhbHVlKTtpZihlLm1vZGlmaWVycyl7dmFyIGk9IiIsbz0iIixhPVtdO2Zvcih2YXIgcyBpbiBlLm1vZGlmaWVycylpZihhYVtzXSlvKz1hYVtzXSxyYVtzXSYmYS5wdXNoKHMpO2Vsc2UgaWYoImV4YWN0Ij09PXMpe3ZhciBjPWUubW9kaWZpZXJzO28rPW9hKFsiY3RybCIsInNoaWZ0IiwiYWx0IiwibWV0YSJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hY1tlXX0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iJGV2ZW50LiIrZSsiS2V5In0pLmpvaW4oInx8IikpfWVsc2UgYS5wdXNoKHMpO3JldHVybiBhLmxlbmd0aCYmKGkrPSJpZighKCdidXR0b24nIGluICRldmVudCkmJiIrYS5tYXAobGEpLmpvaW4oIiYmIikrIilyZXR1cm4gbnVsbDsiKSxvJiYoaSs9byksImZ1bmN0aW9uKCRldmVudCl7IitpKyhuPyJyZXR1cm4gIitlLnZhbHVlKyIoJGV2ZW50KSI6cj8icmV0dXJuICgiK2UudmFsdWUrIikoJGV2ZW50KSI6ZS52YWx1ZSkrIn0ifXJldHVybiBufHxyP2UudmFsdWU6ImZ1bmN0aW9uKCRldmVudCl7IitlLnZhbHVlKyJ9In1mdW5jdGlvbiBsYShlKXt2YXIgdD1wYXJzZUludChlLDEwKTtpZih0KXJldHVybiIkZXZlbnQua2V5Q29kZSE9PSIrdDt2YXIgbj1yYVtlXSxyPWlhW2VdO3JldHVybiJfaygkZXZlbnQua2V5Q29kZSwiK0pTT04uc3RyaW5naWZ5KGUpKyIsIitKU09OLnN0cmluZ2lmeShuKSsiLCRldmVudC5rZXksIitKU09OLnN0cmluZ2lmeShyKSsiKSJ9dmFyIHVhPXtvbjpmdW5jdGlvbihlLHQpe2Uud3JhcExpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm4iX2coIitlKyIsIit0LnZhbHVlKyIpIn19LGJpbmQ6ZnVuY3Rpb24odCxuKXt0LndyYXBEYXRhPWZ1bmN0aW9uKGUpe3JldHVybiJfYigiK2UrIiwnIit0LnRhZysiJywiK24udmFsdWUrIiwiKyhuLm1vZGlmaWVycyYmbi5tb2RpZmllcnMucHJvcD8idHJ1ZSI6ImZhbHNlIikrKG4ubW9kaWZpZXJzJiZuLm1vZGlmaWVycy5zeW5jPyIsdHJ1ZSI6IiIpKyIpIn19LGNsb2FrOiR9LGZhPWZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucz1lLHRoaXMud2Fybj1lLndhcm58fCRyLHRoaXMudHJhbnNmb3Jtcz13cihlLm1vZHVsZXMsInRyYW5zZm9ybUNvZGUiKSx0aGlzLmRhdGFHZW5GbnM9d3IoZS5tb2R1bGVzLCJnZW5EYXRhIiksdGhpcy5kaXJlY3RpdmVzPW0obSh7fSx1YSksZS5kaXJlY3RpdmVzKTt2YXIgdD1lLmlzUmVzZXJ2ZWRUYWd8fE87dGhpcy5tYXliZUNvbXBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4hdChlLnRhZyl9LHRoaXMub25jZUlkPTAsdGhpcy5zdGF0aWNSZW5kZXJGbnM9W119O2Z1bmN0aW9uIHBhKGUsdCl7dmFyIG49bmV3IGZhKHQpO3JldHVybntyZW5kZXI6IndpdGgodGhpcyl7cmV0dXJuICIrKGU/ZGEoZSxuKTonX2MoImRpdiIpJykrIn0iLHN0YXRpY1JlbmRlckZuczpuLnN0YXRpY1JlbmRlckZuc319ZnVuY3Rpb24gZGEoZSx0KXtpZihlLnN0YXRpY1Jvb3QmJiFlLnN0YXRpY1Byb2Nlc3NlZClyZXR1cm4gdmEoZSx0KTtpZihlLm9uY2UmJiFlLm9uY2VQcm9jZXNzZWQpcmV0dXJuIGhhKGUsdCk7aWYoZS5mb3ImJiFlLmZvclByb2Nlc3NlZClyZXR1cm4gZj10LHY9KHU9ZSkuZm9yLGg9dS5hbGlhcyxtPXUuaXRlcmF0b3IxPyIsIit1Lml0ZXJhdG9yMToiIix5PXUuaXRlcmF0b3IyPyIsIit1Lml0ZXJhdG9yMjoiIix1LmZvclByb2Nlc3NlZD0hMCwoZHx8Il9sIikrIigoIit2KyIpLGZ1bmN0aW9uKCIraCttK3krIil7cmV0dXJuICIrKHB8fGRhKSh1LGYpKyJ9KSI7aWYoZS5pZiYmIWUuaWZQcm9jZXNzZWQpcmV0dXJuIG1hKGUsdCk7aWYoInRlbXBsYXRlIiE9PWUudGFnfHxlLnNsb3RUYXJnZXQpe2lmKCJzbG90Ij09PWUudGFnKXJldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPWUuc2xvdE5hbWV8fCciZGVmYXVsdCInLHI9X2EoZSx0KSxpPSJfdCgiK24rKHI/IiwiK3I6IiIpLG89ZS5hdHRycyYmInsiK2UuYXR0cnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBnKGUubmFtZSkrIjoiK2UudmFsdWV9KS5qb2luKCIsIikrIn0iLGE9ZS5hdHRyc01hcFsidi1iaW5kIl07IW8mJiFhfHxyfHwoaSs9IixudWxsIik7byYmKGkrPSIsIitvKTthJiYoaSs9KG8/IiI6IixudWxsIikrIiwiK2EpO3JldHVybiBpKyIpIn0oZSx0KTt2YXIgbjtpZihlLmNvbXBvbmVudClhPWUuY29tcG9uZW50LGM9dCxsPShzPWUpLmlubGluZVRlbXBsYXRlP251bGw6X2EocyxjLCEwKSxuPSJfYygiK2ErIiwiK3lhKHMsYykrKGw/IiwiK2w6IiIpKyIpIjtlbHNle3ZhciByPWUucGxhaW4/dm9pZCAwOnlhKGUsdCksaT1lLmlubGluZVRlbXBsYXRlP251bGw6X2EoZSx0LCEwKTtuPSJfYygnIitlLnRhZysiJyIrKHI/IiwiK3I6IiIpKyhpPyIsIitpOiIiKSsiKSJ9Zm9yKHZhciBvPTA7bzx0LnRyYW5zZm9ybXMubGVuZ3RoO28rKyluPXQudHJhbnNmb3Jtc1tvXShlLG4pO3JldHVybiBufXJldHVybiBfYShlLHQpfHwidm9pZCAwIjt2YXIgYSxzLGMsbCx1LGYscCxkLHYsaCxtLHl9ZnVuY3Rpb24gdmEoZSx0KXtyZXR1cm4gZS5zdGF0aWNQcm9jZXNzZWQ9ITAsdC5zdGF0aWNSZW5kZXJGbnMucHVzaCgid2l0aCh0aGlzKXtyZXR1cm4gIitkYShlLHQpKyJ9IiksIl9tKCIrKHQuc3RhdGljUmVuZGVyRm5zLmxlbmd0aC0xKSsoZS5zdGF0aWNJbkZvcj8iLHRydWUiOiIiKSsiKSJ9ZnVuY3Rpb24gaGEoZSx0KXtpZihlLm9uY2VQcm9jZXNzZWQ9ITAsZS5pZiYmIWUuaWZQcm9jZXNzZWQpcmV0dXJuIG1hKGUsdCk7aWYoZS5zdGF0aWNJbkZvcil7Zm9yKHZhciBuPSIiLHI9ZS5wYXJlbnQ7cjspe2lmKHIuZm9yKXtuPXIua2V5O2JyZWFrfXI9ci5wYXJlbnR9cmV0dXJuIG4/Il9vKCIrZGEoZSx0KSsiLCIrdC5vbmNlSWQrKysiLCIrbisiKSI6ZGEoZSx0KX1yZXR1cm4gdmEoZSx0KX1mdW5jdGlvbiBtYShlLHQsbixyKXtyZXR1cm4gZS5pZlByb2Nlc3NlZD0hMCxmdW5jdGlvbiBlKHQsbixyLGkpe2lmKCF0Lmxlbmd0aClyZXR1cm4gaXx8Il9lKCkiO3ZhciBvPXQuc2hpZnQoKTtyZXR1cm4gby5leHA/IigiK28uZXhwKyIpPyIrYShvLmJsb2NrKSsiOiIrZSh0LG4scixpKToiIithKG8uYmxvY2spO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIHI/cihlLG4pOmUub25jZT9oYShlLG4pOmRhKGUsbil9fShlLmlmQ29uZGl0aW9ucy5zbGljZSgpLHQsbixyKX1mdW5jdGlvbiB5YShlLHQpe3ZhciBuLHIsaT0ieyIsbz1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZGlyZWN0aXZlcztpZighbilyZXR1cm47dmFyIHIsaSxvLGEscz0iZGlyZWN0aXZlczpbIixjPSExO2ZvcihyPTAsaT1uLmxlbmd0aDtyPGk7cisrKXtvPW5bcl0sYT0hMDt2YXIgbD10LmRpcmVjdGl2ZXNbby5uYW1lXTtsJiYoYT0hIWwoZSxvLHQud2FybikpLGEmJihjPSEwLHMrPSd7bmFtZToiJytvLm5hbWUrJyIscmF3TmFtZToiJytvLnJhd05hbWUrJyInKyhvLnZhbHVlPyIsdmFsdWU6KCIrby52YWx1ZSsiKSxleHByZXNzaW9uOiIrSlNPTi5zdHJpbmdpZnkoby52YWx1ZSk6IiIpKyhvLmFyZz8nLGFyZzoiJytvLmFyZysnIic6IiIpKyhvLm1vZGlmaWVycz8iLG1vZGlmaWVyczoiK0pTT04uc3RyaW5naWZ5KG8ubW9kaWZpZXJzKToiIikrIn0sIil9aWYoYylyZXR1cm4gcy5zbGljZSgwLC0xKSsiXSJ9KGUsdCk7byYmKGkrPW8rIiwiKSxlLmtleSYmKGkrPSJrZXk6IitlLmtleSsiLCIpLGUucmVmJiYoaSs9InJlZjoiK2UucmVmKyIsIiksZS5yZWZJbkZvciYmKGkrPSJyZWZJbkZvcjp0cnVlLCIpLGUucHJlJiYoaSs9InByZTp0cnVlLCIpLGUuY29tcG9uZW50JiYoaSs9J3RhZzoiJytlLnRhZysnIiwnKTtmb3IodmFyIGE9MDthPHQuZGF0YUdlbkZucy5sZW5ndGg7YSsrKWkrPXQuZGF0YUdlbkZuc1thXShlKTtpZihlLmF0dHJzJiYoaSs9ImF0dHJzOnsiK3dhKGUuYXR0cnMpKyJ9LCIpLGUucHJvcHMmJihpKz0iZG9tUHJvcHM6eyIrd2EoZS5wcm9wcykrIn0sIiksZS5ldmVudHMmJihpKz1zYShlLmV2ZW50cywhMSx0Lndhcm4pKyIsIiksZS5uYXRpdmVFdmVudHMmJihpKz1zYShlLm5hdGl2ZUV2ZW50cywhMCx0Lndhcm4pKyIsIiksZS5zbG90VGFyZ2V0JiYhZS5zbG90U2NvcGUmJihpKz0ic2xvdDoiK2Uuc2xvdFRhcmdldCsiLCIpLGUuc2NvcGVkU2xvdHMmJihpKz0obj1lLnNjb3BlZFNsb3RzLHI9dCwic2NvcGVkU2xvdHM6X3UoWyIrT2JqZWN0LmtleXMobikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBnYShlLG5bZV0scil9KS5qb2luKCIsIikrIl0pLCIpKSxlLm1vZGVsJiYoaSs9Im1vZGVsOnt2YWx1ZToiK2UubW9kZWwudmFsdWUrIixjYWxsYmFjazoiK2UubW9kZWwuY2FsbGJhY2srIixleHByZXNzaW9uOiIrZS5tb2RlbC5leHByZXNzaW9uKyJ9LCIpLGUuaW5saW5lVGVtcGxhdGUpe3ZhciBzPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jaGlsZHJlblswXTtpZigxPT09bi50eXBlKXt2YXIgcj1wYShuLHQub3B0aW9ucyk7cmV0dXJuImlubGluZVRlbXBsYXRlOntyZW5kZXI6ZnVuY3Rpb24oKXsiK3IucmVuZGVyKyJ9LHN0YXRpY1JlbmRlckZuczpbIityLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uKCl7IitlKyJ9In0pLmpvaW4oIiwiKSsiXX0ifX0oZSx0KTtzJiYoaSs9cysiLCIpfXJldHVybiBpPWkucmVwbGFjZSgvLCQvLCIiKSsifSIsZS53cmFwRGF0YSYmKGk9ZS53cmFwRGF0YShpKSksZS53cmFwTGlzdGVuZXJzJiYoaT1lLndyYXBMaXN0ZW5lcnMoaSkpLGl9ZnVuY3Rpb24gZ2EoZSx0LG4pe3JldHVybiB0LmZvciYmIXQuZm9yUHJvY2Vzc2VkPyhyPWUsbz1uLGE9KGk9dCkuZm9yLHM9aS5hbGlhcyxjPWkuaXRlcmF0b3IxPyIsIitpLml0ZXJhdG9yMToiIixsPWkuaXRlcmF0b3IyPyIsIitpLml0ZXJhdG9yMjoiIixpLmZvclByb2Nlc3NlZD0hMCwiX2woKCIrYSsiKSxmdW5jdGlvbigiK3MrYytsKyIpe3JldHVybiAiK2dhKHIsaSxvKSsifSkiKToie2tleToiK2UrIixmbjoiKygiZnVuY3Rpb24oIitTdHJpbmcodC5zbG90U2NvcGUpKyIpe3JldHVybiAiKygidGVtcGxhdGUiPT09dC50YWc/dC5pZj90LmlmKyI/IisoX2EodCxuKXx8InVuZGVmaW5lZCIpKyI6dW5kZWZpbmVkIjpfYSh0LG4pfHwidW5kZWZpbmVkIjpkYSh0LG4pKSsifSIpKyJ9Ijt2YXIgcixpLG8sYSxzLGMsbH1mdW5jdGlvbiBfYShlLHQsbixyLGkpe3ZhciBvPWUuY2hpbGRyZW47aWYoby5sZW5ndGgpe3ZhciBhPW9bMF07aWYoMT09PW8ubGVuZ3RoJiZhLmZvciYmInRlbXBsYXRlIiE9PWEudGFnJiYic2xvdCIhPT1hLnRhZylyZXR1cm4ocnx8ZGEpKGEsdCk7dmFyIHM9bj9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpZigxPT09aS50eXBlKXtpZihiYShpKXx8aS5pZkNvbmRpdGlvbnMmJmkuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGJhKGUuYmxvY2spfSkpe249MjticmVha30odChpKXx8aS5pZkNvbmRpdGlvbnMmJmkuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS5ibG9jayl9KSkmJihuPTEpfX1yZXR1cm4gbn0obyx0Lm1heWJlQ29tcG9uZW50KTowLGM9aXx8JGE7cmV0dXJuIlsiK28ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBjKGUsdCl9KS5qb2luKCIsIikrIl0iKyhzPyIsIitzOiIiKX19ZnVuY3Rpb24gYmEoZSl7cmV0dXJuIHZvaWQgMCE9PWUuZm9yfHwidGVtcGxhdGUiPT09ZS50YWd8fCJzbG90Ij09PWUudGFnfWZ1bmN0aW9uICRhKGUsdCl7cmV0dXJuIDE9PT1lLnR5cGU/ZGEoZSx0KTozPT09ZS50eXBlJiZlLmlzQ29tbWVudD8ocj1lLCJfZSgiK0pTT04uc3RyaW5naWZ5KHIudGV4dCkrIikiKToiX3YoIisoMj09PShuPWUpLnR5cGU/bi5leHByZXNzaW9uOkNhKEpTT04uc3RyaW5naWZ5KG4udGV4dCkpKSsiKSI7dmFyIG4scn1mdW5jdGlvbiB3YShlKXtmb3IodmFyIHQ9IiIsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3QrPSciJytyLm5hbWUrJyI6JytDYShyLnZhbHVlKSsiLCJ9cmV0dXJuIHQuc2xpY2UoMCwtMSl9ZnVuY3Rpb24gQ2EoZSl7cmV0dXJuIGUucmVwbGFjZSgvXHUyMDI4L2csIlxcdTIwMjgiKS5yZXBsYWNlKC9cdTIwMjkvZywiXFx1MjAyOSIpfW5ldyBSZWdFeHAoIlxcYiIrImRvLGlmLGZvcixsZXQsbmV3LHRyeSx2YXIsY2FzZSxlbHNlLHdpdGgsYXdhaXQsYnJlYWssY2F0Y2gsY2xhc3MsY29uc3Qsc3VwZXIsdGhyb3csd2hpbGUseWllbGQsZGVsZXRlLGV4cG9ydCxpbXBvcnQscmV0dXJuLHN3aXRjaCxkZWZhdWx0LGV4dGVuZHMsZmluYWxseSxjb250aW51ZSxkZWJ1Z2dlcixmdW5jdGlvbixhcmd1bWVudHMiLnNwbGl0KCIsIikuam9pbigiXFxifFxcYiIpKyJcXGIiKSxuZXcgUmVnRXhwKCJcXGIiKyJkZWxldGUsdHlwZW9mLHZvaWQiLnNwbGl0KCIsIikuam9pbigiXFxzKlxcKFteXFwpXSpcXCl8XFxiIikrIlxccypcXChbXlxcKV0qXFwpIik7ZnVuY3Rpb24geGEodCxuKXt0cnl7cmV0dXJuIG5ldyBGdW5jdGlvbih0KX1jYXRjaChlKXtyZXR1cm4gbi5wdXNoKHtlcnI6ZSxjb2RlOnR9KSwkfX12YXIga2EsQWEsT2E9KGthPWZ1bmN0aW9uKGUsdCl7dmFyIG49SG8oZS50cmltKCksdCk7ITEhPT10Lm9wdGltaXplJiZlYShuLHQpO3ZhciByPXBhKG4sdCk7cmV0dXJue2FzdDpuLHJlbmRlcjpyLnJlbmRlcixzdGF0aWNSZW5kZXJGbnM6ci5zdGF0aWNSZW5kZXJGbnN9fSxmdW5jdGlvbihzKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShzKSxyPVtdLGk9W107aWYobi53YXJuPWZ1bmN0aW9uKGUsdCl7KHQ/aTpyKS5wdXNoKGUpfSx0KWZvcih2YXIgbyBpbiB0Lm1vZHVsZXMmJihuLm1vZHVsZXM9KHMubW9kdWxlc3x8W10pLmNvbmNhdCh0Lm1vZHVsZXMpKSx0LmRpcmVjdGl2ZXMmJihuLmRpcmVjdGl2ZXM9bShPYmplY3QuY3JlYXRlKHMuZGlyZWN0aXZlc3x8bnVsbCksdC5kaXJlY3RpdmVzKSksdCkibW9kdWxlcyIhPT1vJiYiZGlyZWN0aXZlcyIhPT1vJiYobltvXT10W29dKTt2YXIgYT1rYShlLG4pO3JldHVybiBhLmVycm9ycz1yLGEudGlwcz1pLGF9cmV0dXJue2NvbXBpbGU6ZSxjb21waWxlVG9GdW5jdGlvbnM6KGM9ZSxsPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oZSx0LG4peyh0PW0oe30sdCkpLndhcm4sZGVsZXRlIHQud2Fybjt2YXIgcj10LmRlbGltaXRlcnM/U3RyaW5nKHQuZGVsaW1pdGVycykrZTplO2lmKGxbcl0pcmV0dXJuIGxbcl07dmFyIGk9YyhlLHQpLG89e30sYT1bXTtyZXR1cm4gby5yZW5kZXI9eGEoaS5yZW5kZXIsYSksby5zdGF0aWNSZW5kZXJGbnM9aS5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB4YShlLGEpfSksbFtyXT1vfSl9O3ZhciBjLGx9KShZbykuY29tcGlsZVRvRnVuY3Rpb25zO2Z1bmN0aW9uIFNhKGUpe3JldHVybihBYT1BYXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1lPyc8YSBocmVmPSJcbiIvPic6JzxkaXYgYT0iXG4iLz4nLDA8QWEuaW5uZXJIVE1MLmluZGV4T2YoIiYjMTA7Iil9dmFyIFRhPSEhQiYmU2EoITEpLEVhPSEhQiYmU2EoITApLGphPWUoZnVuY3Rpb24oZSl7dmFyIHQ9Sm4oZSk7cmV0dXJuIHQmJnQuaW5uZXJIVE1MfSksTmE9aG4ucHJvdG90eXBlLiRtb3VudDtyZXR1cm4gaG4ucHJvdG90eXBlLiRtb3VudD1mdW5jdGlvbihlLHQpe2lmKChlPWUmJkpuKGUpKT09PWRvY3VtZW50LmJvZHl8fGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy4kb3B0aW9ucztpZighbi5yZW5kZXIpe3ZhciByPW4udGVtcGxhdGU7aWYocilpZigic3RyaW5nIj09dHlwZW9mIHIpIiMiPT09ci5jaGFyQXQoMCkmJihyPWphKHIpKTtlbHNle2lmKCFyLm5vZGVUeXBlKXJldHVybiB0aGlzO3I9ci5pbm5lckhUTUx9ZWxzZSBlJiYocj1mdW5jdGlvbihlKXt7aWYoZS5vdXRlckhUTUwpcmV0dXJuIGUub3V0ZXJIVE1MO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmFwcGVuZENoaWxkKGUuY2xvbmVOb2RlKCEwKSksdC5pbm5lckhUTUx9fShlKSk7aWYocil7dmFyIGk9T2Eocix7c2hvdWxkRGVjb2RlTmV3bGluZXM6VGEsc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOkVhLGRlbGltaXRlcnM6bi5kZWxpbWl0ZXJzLGNvbW1lbnRzOm4uY29tbWVudHN9LHRoaXMpLG89aS5yZW5kZXIsYT1pLnN0YXRpY1JlbmRlckZucztuLnJlbmRlcj1vLG4uc3RhdGljUmVuZGVyRm5zPWF9fXJldHVybiBOYS5jYWxsKHRoaXMsZSx0KX0saG4uY29tcGlsZT1PYSxobn0pOw=='></script>   



<script id=script_kolists>

koflds['leds']=`led_id|led_status|led_code|led_name|led_dttm|led_color|led_speed|led_type|led_date|led_cmd|led_cmdout|led_desc|led_misc|led_city|led_bldg|led_loc_code|led_floor|led_group|led_orgs|led_title|led_published|led_width|led_height|led_comment|led_filename|led_user|led_user_ip|led_referer|led_remote_port|led_viewrole|led_user_agent|led_unique_id|led_err|led_fix|led_os|id|grp|status|dttm|pathfile|path|file|base|ext|size|ctime|mtime|exif_dttm|exif_dt|exif_tm|title|thumbnail|alt|link|linktarget|src|tn|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc`;
koflds['items']=`progid|dttm|status|krow|f_name|f_type|f_size|f_error|f_tmp|t_name|referer|query_string|user_agent|remote_addr|remote_port|server_addr|server_port|grp|ord|avid|fbid|tlid|pathfile|path|file|base|ext|size|ctime|mtime|fpathfile|tpathfile|fn_dttm|fn_dt|fn_tm|exif_dttm|exif_dt|exif_tm|exif_zm|exif_path|exif_file|exif_imgsize|exif_ctime|exif_duration|starttime|endtime|title|thumbnail|alt|link|linktarget|src|tn|tn1|tn2|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|l|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc`;

koflds['contacts']=`id|progid|dttm|status|grp|account|attachment|bcc|role|callback|carphone|categories|cc|dueby|duedate|duration|email|email2|email3|actualwork|address_selected|address_selector|all_day_event|bday|dday|notedays|assigned|assistants_name|assistants_phone|billing_information|birthday|bizaddr|bizaddrcity|bizaddrcountry|bizaddrpobox|bizaddrpocode|bizaddrstate|bizaddrstreet|bizfax|bizhomepage|bizphn|bizph2|changedby|children|city|company|coname|cophn|complete|computer|contact|contacts|content|conversation|country|created|custid|dtdone|defertil|dept|distlistname|noautoarchive|downloadstate|emailselected|emailselector|end|entrytype|expires|fileas|fname|flagstatus|followupflag|sendfrom|ftpsite|fullname|gender|govid|haverepliessentto|hobbies|home_addr|home_addrcity|home_addrcountry|home_addrpobox|home_addrpostalcode|home_addrstate|home_addrstreet|home_fax|home_phone|home_phone2|iconformdescription|importance|infolder|initials|inetfreebusyaddress|isdn|jobtitle|journal|junkmailtype|language|lname|lastsavedtm|location|mailaddr|mailaddrflag|managersname|meetingstatus|msg|msgclass|msgflag|mname|mileage|mblphn|modified|meetingurl|nickname|notes|officeloc|optattendees|orgid|organizer|otheraddr|otheraddr_city|othaddr_country|othaddr_pobox|othaddr_postalcode|othaddr_state|othaddr_street|othfax|othphn|outlookiver|outlookver|owner|pager|personalurl|phnselected|phnselector|pobox|primaryphn|priority|private|profession|radiophn|read|received|recur|recurpattern|recurrangeend|recurrangestart|recurring|referby|remindbeforehand|remind|remindoverridedefault|remindsound|remindsoundfile|remindtime|remindtopic|remotestatus|reqstatus|requestedby|requiredattendess|resources|responserequested|retrievaltime|schedpriority|sendtextonly|sensitivity|sent|showtimeas|size|spouse|start|state|straddr|subject|suffix|teamtask|telex|title|sendto|totalwork|trackstat|ttytddphn|user1|user2|user3|user4|webpage|zipcode|pathfile|path|file|base|ext|src|tn|startdate|starttime|enddate|endtime|headline|media|credit|text|led|type|speed|color|bldg|loc|j|k|l|m|h|w|x|y|z|t|x1|y1|z1|t1|x2|y2|z2|t2|temp|desc`;

koflds['letters']=`progid|dttm|status|krow|f_name|f_type|f_size|f_error|f_tmp|t_name|referer|query_string|user_agent|remote_addr|remote_port|server_addr|server_port|grp|ord|avid|fbid|tlid|pathfile|path|file|base|ext|size|ctime|mtime|fpathfile|tpathfile|fn_dttm|fn_dt|fn_tm|exif_dttm|exif_dt|exif_tm|exif_zm|exif_path|exif_file|exif_imgsize|exif_ctime|exif_duration|starttime|endtime|title|thumbnail|alt|link|linktarget|src|tn|tn1|tn2|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|l|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc`;

koflds['postturtles']=`progid|dttm|status|krow|f_name|f_type|f_size|f_error|f_tmp|t_name|referer|query_string|user_agent|remote_addr|remote_port|server_addr|server_port|grp|ord|avid|fbid|tlid|pathfile|path|file|base|ext|size|ctime|mtime|fpathfile|tpathfile|fn_dttm|fn_dt|fn_tm|exif_dttm|exif_dt|exif_tm|exif_zm|exif_path|exif_file|exif_imgsize|exif_ctime|exif_duration|starttime|endtime|title|thumbnail|alt|link|linktarget|src|tn|tn1|tn2|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|l|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc`;

koflds['monkeytraps']=`progid|dttm|status|krow|f_name|f_type|f_size|f_error|f_tmp|t_name|referer|query_string|user_agent|remote_addr|remote_port|server_addr|server_port|grp|ord|avid|fbid|tlid|pathfile|path|file|base|ext|size|ctime|mtime|fpathfile|tpathfile|fn_dttm|fn_dt|fn_tm|exif_dttm|exif_dt|exif_tm|exif_zm|exif_path|exif_file|exif_imgsize|exif_ctime|exif_duration|starttime|endtime|title|thumbnail|alt|link|linktarget|src|tn|tn1|tn2|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|l|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc`;

koflds['floods']=`progid|dttm|status|krow|f_name|f_type|f_size|f_error|f_tmp|t_name|referer|query_string|user_agent|remote_addr|remote_port|server_addr|server_port|grp|ord|avid|fbid|tlid|pathfile|path|file|base|ext|size|ctime|mtime|fpathfile|tpathfile|fn_dttm|fn_dt|fn_tm|exif_dttm|exif_dt|exif_tm|exif_zm|exif_path|exif_file|exif_imgsize|exif_ctime|exif_duration|starttime|endtime|title|thumbnail|alt|link|linktarget|src|tn|tn1|tn2|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|l|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc`;

koflds['coffee']=`progid|dttm|status|krow|f_name|f_type|f_size|f_error|f_tmp|t_name|referer|query_string|user_agent|remote_addr|remote_port|server_addr|server_port|grp|ord|avid|fbid|tlid|pathfile|path|file|base|ext|size|ctime|mtime|fpathfile|tpathfile|fn_dttm|fn_dt|fn_tm|exif_dttm|exif_dt|exif_tm|exif_zm|exif_path|exif_file|exif_imgsize|exif_ctime|exif_duration|starttime|endtime|title|thumbnail|alt|link|linktarget|src|tn|tn1|tn2|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|l|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc`;

koflds['sailboat']=``;

koflds['files']=`progid|dttm|status|krow|f_name|f_type|f_size|f_error|f_tmp|t_name|referer|query_string|user_agent|remote_addr|remote_port|server_addr|server_port|grp|ord|avid|fbid|tlid|pathfile|path|file|base|ext|size|ctime|mtime|fpathfile|tpathfile|fn_dttm|fn_dt|fn_tm|exif_dttm|exif_dt|exif_tm|exif_zm|exif_path|exif_file|exif_imgsize|exif_ctime|exif_duration|starttime|endtime|title|thumbnail|alt|link|linktarget|src|tn|tn1|tn2|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|l|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc`;

koflds['tl']=`progid|dttm|status|krow|f_name|f_type|f_size|f_error|f_tmp|t_name|referer|query_string|user_agent|remote_addr|remote_port|server_addr|server_port|grp|ord|avid|fbid|tlid|pathfile|path|file|base|ext|size|ctime|mtime|fpathfile|tpathfile|fn_dttm|fn_dt|fn_tm|exif_dttm|exif_dt|exif_tm|exif_zm|exif_path|exif_file|exif_imgsize|exif_ctime|exif_duration|starttime|endtime|title|thumbnail|alt|link|linktarget|src|tn|tn1|tn2|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|l|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc`;


koflds['randomus']=`gender|title|fname|lname_last|loc_str_number|loc_str_name|loc_city|loc_state|loc_country|loc_zip|loc_coord_lat|loc_coord_long|loc_timezone_offset|loc_timezone_descr|email|login_uuid|login_user|login_pass|login_salt|login_md5|login_sha1|login_sha256|dob_date|dob_age|reg_dt|reg_age|phn|cell|id_name|id_val|pic_zn|pic|pic_tn|nat`;
koflds['leds']=``;



kolists = new Array();

kolists['sites']=``;
kolists['randomus']=`
gender|name.title|name.first|name.last|location.street.number|location.street.name|location.city|location.state|location.country|location.postcode|location.coordinates.latitude|location.coordinates.longitude|location.timezone.offset|location.timezone.description|email|login.uuid|login.username|login.password|login.salt|login.md5|login.sha1|login.sha256|dob.date|dob.age|registered.date|registered.age|phone|cell|id.name|id.value|picture.large|picture.medium|picture.thumbnail|nat
male|Mr|Vernon|Doyle|3720|Killarney Road|Passage West|Wicklow|Ireland|87552|2.8379|-50.2162|+7:00|"Bangkok| Hanoi| Jakarta"|vernon.doyle@example.com|f3d55bfd-9bc0-415e-ad96-8cb8c2dd2519|purplegorilla550|socks|MRWbhu6P|7be591eb9d474809d379291d1f262b9a|2f937bba35b9456c48054cba8c401f551f6a0ea3|fd182e1a9b9a61f5523da9f324e13d11bf26b7b4830f2d115f0766eb5ca4d1fb|1989-10-31T13:57:47.927Z|33|2016-12-09T01:08:52.224Z|6|061-188-1315|081-634-5319|PPS|6841798T|https://randomuser.me/api/portraits/men/53.jpg|https://randomuser.me/api/portraits/med/men/53.jpg|https://randomuser.me/api/portraits/thumb/men/53.jpg|IE
male|Mr|Hotimir|Babich|5516|Bukovinskiy provulok|Krasnoperekopsk|Kiyivska|Ukraine|59292|20.4484|-49.9612|+11:00|"Magadan| Solomon Islands| New Caledonia"|hotimir.babich@example.com|6852fae7-2bfe-4f3e-8f81-768e2610822f|lazyrabbit165|wowwow|5lAebFlj|82135648b8ceac194ee628e026852924|acdd4909d06e9b14201bffd0f704fa45727dd38f|5b6a1ab5bbdcdc4bdc38b94da629fdaf9ddf7e4724c5842389aaca4f61c700d5|1978-11-13T19:17:20.349Z|44|2018-05-31T05:51:09.868Z|4|(097) T08-2063|(067) T56-2092||null|https://randomuser.me/api/portraits/men/97.jpg|https://randomuser.me/api/portraits/med/men/97.jpg|https://randomuser.me/api/portraits/thumb/men/97.jpg|UA
male|Mr|Ashton|Anderson|4467|Carrington Road|Napier|Nelson|New Zealand|54981|-0.0005|100.7982|+11:00|"Magadan| Solomon Islands| New Caledonia"|ashton.anderson@example.com|19cfbc0d-4096-43c8-a40e-3c120f71777b|yellowzebra861|animals|RZE6Aoz5|602d906dfe42d43d9835c20813fbc280|1f7b36b691bce7628315d67f2a7ddf6c763f80bd|538a5dd28f8249b7c3d14f91e4e9e34d3b455230356f3e03567d60dfebcca2d5|1998-03-14T10:16:54.367Z|25|2013-07-02T05:54:16.286Z|9|(316)-731-4329|(793)-845-7958||null|https://randomuser.me/api/portraits/men/3.jpg|https://randomuser.me/api/portraits/med/men/3.jpg|https://randomuser.me/api/portraits/thumb/men/3.jpg|NZ
female|Ms|Emma|Olsen|9827|Magnoliavej|Amager|Sjælland|Denmark|73847|58.1851|-1.0485|-3:00|"Brazil| Buenos Aires| Georgetown"|emma.olsen@example.com|e636e1ff-df80-452b-b527-63ece5e79ce9|smalldog500|rootbeer|BiwosW0A|80c2c1fe825f1fae82ded7cebfcf84e7|3f9f2eff1ea88e72b8c65af73ac7578be81fa386|26ca9d6a8e1d4fd2c9b4c7cad9317717f8ecaad470be01c104a7942154a92b70|1961-08-26T15:54:29.378Z|61|2007-12-19T03:58:56.043Z|15|18084399|90984229|CPR|260861-3134|https://randomuser.me/api/portraits/women/32.jpg|https://randomuser.me/api/portraits/med/women/32.jpg|https://randomuser.me/api/portraits/thumb/women/32.jpg|DK
male|Mr|Joseph|Solvoll|1324|Fyrstikkalléen|Øvre Årdal|Rogaland|Norway|0913|65.6606|-82.1543|+6:00|"Almaty| Dhaka| Colombo"|joseph.solvoll@example.com|84ae5f81-ab72-4534-8f6c-d374452d0d75|orangelion613|enterpri|BvRwc5f7|fca91b81ecf1eeb18b8383b67abec9c3|05134798603f6c0bd1e48ddd9acc906816e0a458|625730c4320e21f5eaff66ff7bac64c2b8e9539c24f6409d34b7b54b09b0fff3|1955-05-12T03:26:47.025Z|67|2009-05-26T13:14:16.739Z|13|38235783|45094404|FN|12055513579|https://randomuser.me/api/portraits/men/10.jpg|https://randomuser.me/api/portraits/med/men/10.jpg|https://randomuser.me/api/portraits/thumb/men/10.jpg|NO
female|Ms|مهرسا|سلطانی نژاد|5225|میدان شهدا|آمل|هرمزگان|Iran|36997|88.6485|146.2168|-10:00|Hawaii|mhrs.sltnynjd@example.com|e0fe643f-5246-4c77-8c23-f9065b50e1f5|blackfish937|pancho|DQmI5QJz|8f5a3074898dd1930849eb97354cf9eb|63f177eb25f1c7373df0eda7ed988b7ae24bb4cc|9752c54c49aad4bf0df67fc79a54e717df2ba6d504708c3c73a7adf1fa21569b|1998-05-12T05:17:41.302Z|24|2004-09-30T16:15:34.702Z|18|033-52936685|0933-364-5081||null|https://randomuser.me/api/portraits/women/91.jpg|https://randomuser.me/api/portraits/med/women/91.jpg|https://randomuser.me/api/portraits/thumb/women/91.jpg|IR
male|Mr|Ralf|Lietz|8435|Poststraße|Treuen|Brandenburg|Germany|22903|10.2200|14.5737|-9:00|Alaska|ralf.lietz@example.com|93512d46-9cc6-4680-a671-7b19bb5d18c0|ticklishtiger906|757575|ktOob1uU|c8d299d72dec5e749a11442387547ec2|92018919af1619bd2c7baa8d303aa224260618c9|11c0ee9b79fc6261423fb932be8b8663ba1b16ca379558d7dd2ab8419ffc11c8|1999-05-25T20:33:50.917Z|23|2004-11-13T16:05:34.269Z|18|0153-5641311|0175-9737447|SVNR|19 250599 L 029|https://randomuser.me/api/portraits/men/64.jpg|https://randomuser.me/api/portraits/med/men/64.jpg|https://randomuser.me/api/portraits/thumb/men/64.jpg|DE
male|Mr|Aleksi|Karjala|5574|Itsenäisyydenkatu|Raahe|Central Ostrobothnia|Finland|45297|32.2020|-72.0100|-3:30|Newfoundland|aleksi.karjala@example.com|7a39ea96-a24e-4f2f-9683-f5a9c8646978|orangemeercat330|pantera|xR31JNvz|cf034a98b7185085123b3e1f6649ec23|d1b2cf6dc913d8807e4ffa81de9f13ffac7f3c6a|b09ec9106ab93e466ddd9f2378e6d2f054b011c63e654b49d623db78f08a06b4|1998-06-23T15:02:05.855Z|24|2005-02-23T07:02:46.370Z|18|04-715-502|048-657-06-49|HETU|NaNNA545undefined|https://randomuser.me/api/portraits/men/65.jpg|https://randomuser.me/api/portraits/med/men/65.jpg|https://randomuser.me/api/portraits/thumb/men/65.jpg|FI
male|Mr|Ethan|Novak|3798|Concession Road 6|Bath|Newfoundland and Labrador|Canada|I1H 0N1|-75.0367|119.8369|+9:30|"Adelaide| Darwin"|ethan.novak@example.com|234c81dc-e322-44a3-8d5b-0deef2a1858a|orangebear214|sixty9|KICTr3JJ|3700136bcf388c523cb4f2e20f078848|54a6281b46298dd5393e25193f2a4719167373d7|53b7323f75c305a7b06dae30e35455191d6e501b85f3c95c959d6dac4017d7e4|1957-01-09T02:15:42.629Z|66|2011-11-04T11:01:25.103Z|11|N64 C43-0718|X63 X63-4672|SIN|505479055|https://randomuser.me/api/portraits/men/32.jpg|https://randomuser.me/api/portraits/med/men/32.jpg|https://randomuser.me/api/portraits/thumb/men/32.jpg|CA
male|Mr|Felix|Jordan|2698|Denny Street|Newcastle West|Dún Laoghaire–Rathdown|Ireland|95539|-6.0076|-115.2611|-9:00|Alaska|felix.jordan@example.com|5238fb6c-77c3-40e5-b145-85b166bdd9a5|yellowelephant809|tender|OJKy8RrD|f443d26318a10b4adf9e0b64345cb3de|bed0aa0c0fd8808f2a1ac010bb39a0423f7d7e41|1cacc600794b654c655ccec1ac562399e623db8a13cbac212750706be42db3f8|1974-10-04T02:55:34.941Z|48|2009-08-04T05:17:25.904Z|13|061-140-7172|081-298-2903|PPS|2309432T|https://randomuser.me/api/portraits/men/46.jpg|https://randomuser.me/api/portraits/med/men/46.jpg|https://randomuser.me/api/portraits/thumb/men/46.jpg|IE
male|Mr|Owen|Gray|1162|The Green|Ardee|Wexford|Ireland|19472|-16.2730|60.9551|+4:00|"Abu Dhabi| Muscat| Baku| Tbilisi"|owen.gray@example.com|894f2a4c-1991-44da-8c09-7f878135be65|bigbird857|deanna|zoPIvnp7|8a31791350dcef5776bd5f6e16383512|dfad8fc6200397799e94615fd61581265d692634|e6e16d6bc1c84285d7e070147ad11e616b26095f5640a051cf863a8112020d2f|1965-09-02T22:47:43.206Z|57|2011-01-11T00:29:20.710Z|12|021-169-2045|081-649-4321|PPS|1839208T|https://randomuser.me/api/portraits/men/71.jpg|https://randomuser.me/api/portraits/med/men/71.jpg|https://randomuser.me/api/portraits/thumb/men/71.jpg|IE
female|Mrs|Abigail|Rivas|5839|Eje vial Qatar|Guadalajara|Quintana Roo|Mexico|96831|-83.6413|-62.2566|-8:00|Pacific Time (US & Canada)|abigail.rivas@example.com|2987b4e9-9d80-4237-98b7-1661c2cea5ea|blackkoala181|aspire|JdAgbheF|b9f0a031f317c63377e22f5980ec5a20|90a616b000bf2e8d1477ea9fcaad318bd9aa79dc|dfe0ed4934119d9fc17a62e9e48577bc77bbcfc3c72f1f5fafa1cfbacf31146e|1957-12-31T22:22:16.354Z|65|2013-05-19T14:53:04.354Z|9|(655) 906 2348|(601) 179 6096|NSS|27 07 41 9667 4|https://randomuser.me/api/portraits/women/73.jpg|https://randomuser.me/api/portraits/med/women/73.jpg|https://randomuser.me/api/portraits/thumb/women/73.jpg|MX
female|Mrs|Edita|Hizhnyak|6467|Akademika Kiprianova|Harcizk|Rivnenska|Ukraine|11953|-27.8049|-24.3344|+5:30|"Bombay| Calcutta| Madras| New Delhi"|edita.hizhnyak@example.com|ac4400ad-9c83-4935-974c-0ab1bde33360|ticklishostrich240|goth|XF3D19jF|6504e60aab8824d898eabda0b7f70469|3edafd0cccc895acbf129340b0de74e29a7163ac|e56980bbaa4e887c8584336422d3aea927e53ae100ce19ae55955b5c5081c5e8|1968-08-06T16:31:21.861Z|54|2019-10-12T15:31:46.651Z|3|(097) D13-8422|(098) P16-8251||null|https://randomuser.me/api/portraits/women/86.jpg|https://randomuser.me/api/portraits/med/women/86.jpg|https://randomuser.me/api/portraits/thumb/women/86.jpg|UA
male|Mr|Jeppe|Kristensen|3671|Jernbanegade|Billum|Nordjylland|Denmark|91337|55.4713|26.2907|+5:45|Kathmandu|jeppe.kristensen@example.com|d952fb80-96cf-4189-9240-828457142b3f|yellowgorilla598|putter|3x0TZKIm|da44167b4eb021a7e44b92e6b436283a|e503b8498cc4c45ed7b6a391a907694436a5ec69|1f256b926abdc37d6195e8c028fa8644a1953fdb4eac19978102f06fcb1ec3b6|1957-08-09T17:35:36.299Z|65|2007-03-24T18:02:00.018Z|15|87107073|93912754|CPR|090857-4454|https://randomuser.me/api/portraits/men/92.jpg|https://randomuser.me/api/portraits/med/men/92.jpg|https://randomuser.me/api/portraits/thumb/men/92.jpg|DK
female|Mrs|Paulina|Jimínez|6277|Pasaje Querétaro|San Pedro Amuzgos|Baja California Sur|Mexico|95646|27.6267|28.3579|-8:00|Pacific Time (US & Canada)|paulina.jiminez@example.com|96fb47ef-3c85-47c2-a1c2-b43fd3f06451|smalllion193|onlyme|yLKfZW0T|b3854e898961f2f2d7fefdf2afb7109c|82cc4dd518beb9760fa15c417a90ad3fb0c6c394|2c1a630d3e8cb568a01a0072555ed7226cb6122d9922a2dc114d891fba73d1ec|1991-05-08T17:10:36.464Z|31|2012-04-29T18:00:08.261Z|10|(649) 006 9736|(608) 027 5720|NSS|15 71 29 2758 9|https://randomuser.me/api/portraits/women/86.jpg|https://randomuser.me/api/portraits/med/women/86.jpg|https://randomuser.me/api/portraits/thumb/women/86.jpg|MX
female|Mrs|Wera|Betz|9992|Blumenstraße|Plattling|Baden-Württemberg|Germany|12976|79.4473|-29.7448|-4:00|"Atlantic Time (Canada)| Caracas| La Paz"|wera.betz@example.com|5483c591-e0f1-463a-9533-f410d56b32af|angrybird711|cong|xSbSbKfn|6db980f97a3cb31960295f7f42991e71|d63948fce26c9ea81a2d71dfabe0774c5b1622e4|3ca8407cf092f414ea753f8ccd28cd77e9d8ade77d033432d076b30f6daf201a|1989-10-31T12:54:20.532Z|33|2002-08-18T01:24:06.508Z|20|0778-7446882|0174-0116492|SVNR|43 311089 B 538|https://randomuser.me/api/portraits/women/33.jpg|https://randomuser.me/api/portraits/med/women/33.jpg|https://randomuser.me/api/portraits/thumb/women/33.jpg|DE
male|Mr|Jerónimo|Domínguez|1789|Diagonal Oaxaca|Coacoatzintla|Chihuahua|Mexico|84876|-51.2508|-153.9891|+4:30|Kabul|jeronimo.dominguez@example.com|78a7f663-13d5-4f30-9ab0-ca29a5bf9061|organicsnake660|atlas|M6kxDULM|6c587e3d5e8ce7d4bb3104a99975a4f4|6b9d21ee65e14b90b350980ec7da513eb49e92e8|2ef005c4c788d6edbc5afaab91b4de3f7c2947b3ae1b6bee9b8aaf55344c4ad5|1966-10-29T15:44:44.360Z|56|2020-12-20T00:58:49.352Z|2|(667) 941 3864|(696) 931 2165|NSS|80 50 11 2423 2|https://randomuser.me/api/portraits/men/30.jpg|https://randomuser.me/api/portraits/med/men/30.jpg|https://randomuser.me/api/portraits/thumb/men/30.jpg|MX
male|Mr|Herbert|Schmidt|6087|Saddle Dr|Tyler|Mississippi|United States|59938|-84.6604|-138.3589|+3:00|"Baghdad| Riyadh| Moscow| St. Petersburg"|herbert.schmidt@example.com|18127138-c88f-40a4-96d0-12bea0fa4b0b|crazylion149|5329|yebnzWGB|d82073a4cbd84702095a73f9e8998631|51402154686b6aefb339f0e18d8911e6427cb9d5|a0d15e5b443fc4125f1ff821486186a4427c62ecde6218ed51fcfb72762b8914|1956-01-16T16:20:13.071Z|67|2006-08-15T22:37:20.629Z|16|(549) 599-0731|(715) 324-4758|SSN|815-62-4342|https://randomuser.me/api/portraits/men/17.jpg|https://randomuser.me/api/portraits/med/men/17.jpg|https://randomuser.me/api/portraits/thumb/men/17.jpg|US
male|Mr|Rudra|Andrade|9637|Bhavani Peth|Thanjavur|Arunachal Pradesh|India|29964|-8.2041|-108.6696|+1:00|"Brussels| Copenhagen| Madrid| Paris"|rudra.andrade@example.com|fa9c7eb4-e9ba-46eb-8c8e-7df286da26de|bluezebra333|ramses|zGxBCQrn|f9395572661ce4a7f8ee32ca9b47c208|3f236b5e73830654e24a2790da51f5cb728535d9|5808956d7fe2a37603fceddc48afa696384c25e37f2d64a09acceb1e2d025203|1967-11-03T20:03:30.788Z|55|2020-05-23T13:19:27.257Z|2|9907174424|9085000159|UIDAI|553097381662|https://randomuser.me/api/portraits/men/63.jpg|https://randomuser.me/api/portraits/med/men/63.jpg|https://randomuser.me/api/portraits/thumb/men/63.jpg|IN
female|Miss|Cristina|Jiménez|7894|Avenida de Salamanca|Lugo|Canarias|Spain|71939|15.1736|-132.5783|-2:00|Mid-Atlantic|cristina.jimenez@example.com|26e644d9-2bd3-4933-866b-5629ee6fbd98|bluesnake381|shuttle|P3y9JM6h|db17c9afa911ab8b979cd405fd0ac8a2|6c2884df0cfa4dba347a415ab0d0bc745e398aad|d5ecb8980ea09cda3c0d7ac945c8ae7ebcf5234539bd8d1dacf763e87165b5fb|1953-08-17T07:04:15.539Z|69|2005-01-02T14:37:46.298Z|18|920-191-674|625-076-563|DNI|37117390-G|https://randomuser.me/api/portraits/women/19.jpg|https://randomuser.me/api/portraits/med/women/19.jpg|https://randomuser.me/api/portraits/thumb/women/19.jpg|ES
female|Mrs|Cläre|Hasse|6374|Wiesenweg|Stadt Wehlen|Brandenburg|Germany|25729|-54.2350|79.9015|+5:00|"Ekaterinburg| Islamabad| Karachi| Tashkent"|clare.hasse@example.com|f6833eec-20b1-4c5f-9e33-c876787abd7a|whitepeacock315|canyon|6k65HHp3|d2a5de494c492c1d6a7b1fb5d0624dad|4a575490723aa8590c051ccff263b9201b070d59|fceed2d2302a13f8410beb0a6d9ffdc52fbe29254174bef8258c1cdd4ba358ae|1981-07-13T00:06:03.437Z|41|2008-01-23T12:07:51.077Z|15|0636-9906464|0175-8152631|SVNR|56 120781 H 651|https://randomuser.me/api/portraits/women/41.jpg|https://randomuser.me/api/portraits/med/women/41.jpg|https://randomuser.me/api/portraits/thumb/women/41.jpg|DE
female|Miss|José|Aguilar|7904|Calle de Toledo|Mérida|Castilla y León|Spain|99381|-62.0599|45.9920|+9:00|"Tokyo| Seoul| Osaka| Sapporo| Yakutsk"|jose.aguilar@example.com|ab1f6991-dcfb-4ac9-9d8e-7e00afc5a0d0|bigfish399|blazers|SKILB4QS|52059c25f1f53602b0fc6ded17a18b8a|c6dbf1d999d967872b30071f1b39969c66f814c8|3dcd47b165dafcfce1ee2c01c4b3883c9dd61243d92e532cf52600b2c86f0c99|1980-11-15T23:57:10.447Z|42|2020-01-13T09:12:47.751Z|3|991-451-790|646-254-568|DNI|22257603-R|https://randomuser.me/api/portraits/women/75.jpg|https://randomuser.me/api/portraits/med/women/75.jpg|https://randomuser.me/api/portraits/thumb/women/75.jpg|ES
male|Mr|Yosef|Hauan|6750|Åkerøveien|Sundgot|Sør-Trøndelag|Norway|4847|-53.3427|85.9549|-7:00|Mountain Time (US & Canada)|yosef.hauan@example.com|9c3029b2-4e4b-49de-bbf0-94f2a006b0b0|lazykoala155|spanky|OIq3swbs|471e2636787315cdb6f71ef4ece2c06e|efa832727d10196210970d8945ea36a3a6388bed|5703b0fc9f57f90fa7cb1f2eefb517a8ae6a78f2c806aff6ce312e91dd782180|1961-04-17T12:04:57.393Z|61|2008-08-06T12:25:24.184Z|14|88994511|94526659|FN|17046143183|https://randomuser.me/api/portraits/men/51.jpg|https://randomuser.me/api/portraits/med/men/51.jpg|https://randomuser.me/api/portraits/thumb/men/51.jpg|NO
male|Mr|Valdomiro|Viana|2073|Rua Santa Catarina |Palmas|Mato Grosso do Sul|Brazil|57244|16.3659|-145.4751|-3:00|"Brazil| Buenos Aires| Georgetown"|valdomiro.viana@example.com|3400ac05-cbdc-467a-9e47-121a6f461ca0|whiteostrich291|5329|usm2PWWL|701f3b620d47b499f093364697db82fc|8af751496470033a9741daabf46eae3b16c4385d|9366728e6be87b4661d180f2de3012f64a440801b123e280978e2f63d892e6e9|1969-06-12T01:24:26.920Z|53|2021-11-02T09:58:19.577Z|1|(55) 5025-0616|(02) 8834-3412|CPF|109.131.748-82|https://randomuser.me/api/portraits/men/14.jpg|https://randomuser.me/api/portraits/med/men/14.jpg|https://randomuser.me/api/portraits/thumb/men/14.jpg|BR
female|Mrs|Buse|Durmaz|3368|Anafartalar Cd|Artvin|Isparta|Turkey|38068|-2.6600|-76.9751|-10:00|Hawaii|buse.durmaz@example.com|a2922d9e-267c-4991-9d96-e49ce616da6f|ticklishpanda808|mistress|8CAjGMAD|4e2824233372ae73554a23859ae7c9ea|0bbc6a0f69a0c1d0320d001a626e6adfe29c3646|0b3e8b7444065db3735ef187e7012e9b69956bda44ad73649ffb638f5036cdd5|1968-05-15T19:08:51.805Z|54|2013-05-12T02:15:52.754Z|9|(815)-224-0709|(499)-300-3000||null|https://randomuser.me/api/portraits/women/15.jpg|https://randomuser.me/api/portraits/med/women/15.jpg|https://randomuser.me/api/portraits/thumb/women/15.jpg|TR
female|Mrs|Dolores|Zavala|8680|Cerrada Sandoval|Villa Manuel|Estado de Mexico|Mexico|61568|22.4600|146.8370|+11:00|"Magadan| Solomon Islands| New Caledonia"|dolores.zavala@example.com|5242a8d0-8111-4473-93f0-6d89be786103|blackostrich196|laetitia|opYYyZIX|38a181aae68831bb2ddfc3415ec6a4a2|8fc90676a3ac9f3d452ac983d7d1a7bed49c01b9|0ace24ee05e2fdb1b3626d97b8aefa6369fa74400b98d571f173b72b6c529cfd|1961-02-09T21:00:56.504Z|62|2003-05-20T02:23:50.631Z|19|(611) 582 2438|(683) 344 4317|NSS|91 46 41 2848 8|https://randomuser.me/api/portraits/women/50.jpg|https://randomuser.me/api/portraits/med/women/50.jpg|https://randomuser.me/api/portraits/thumb/women/50.jpg|MX
male|Mr|Ignjatije|Nemanjić|506|Vere Veljkov|Bujanovac|Central Banat|Serbia|38795|-16.8191|102.7488|-12:00|"Eniwetok| Kwajalein"|ignjatije.nemanjic@example.com|87048033-267f-46ef-9c61-a292366c8dd2|crazykoala821|western|UHvnSUHD|463c8757709c522bbd8cfd8b298fff02|d2bf183135cc6629dc43a02823e297b81f6f23bc|5469559d1f48fcafa5ea62d8a21a42dad8fa51f398140f1ac749c7b633882bbc|1963-01-09T00:11:34.153Z|60|2006-02-25T07:42:58.942Z|17|010-7679-267|065-6570-392|SID|427287455|https://randomuser.me/api/portraits/men/40.jpg|https://randomuser.me/api/portraits/med/men/40.jpg|https://randomuser.me/api/portraits/thumb/men/40.jpg|RS
male|Mr|Guy|Lawson|5399|Cackson St|Edison|Massachusetts|United States|70894|1.2493|61.8222|0:00|"Western Europe Time| London| Lisbon| Casablanca"|guy.lawson@example.com|4757381c-17f1-4e03-a866-7a43b2f46eac|heavybear381|chai|yk6yeExh|8481e2e0009d763d5d2b32324296dd4d|c5ed565d4797721e4dade86b8326c6f800a0304e|af75bb1857fb0dccfd1dc3fbbc747847c60aa7f4378a891c1044afc34e7b5455|1993-11-15T12:05:21.430Z|29|2005-04-18T15:44:46.410Z|17|(352) 400-7667|(314) 795-2404|SSN|883-71-3622|https://randomuser.me/api/portraits/men/86.jpg|https://randomuser.me/api/portraits/med/men/86.jpg|https://randomuser.me/api/portraits/thumb/men/86.jpg|US
female|Madame|Lilly|Blanc|9452|Route de Genas|Balerna|Basel-Stadt|Switzerland|3787|74.8351|-160.3914|+3:30|Tehran|lilly.blanc@example.com|c2b6646f-0c80-4013-9f99-51ec6e29a458|beautifuldog580|youknow|0OCCHTrR|9f7a1c13ed8781e342cadf63bf6ec8c8|4e344939c2e6684486942360965e429eef139901|e9acd44608ca393d2d2ac19217810a676acda040c0b43c02e40dd9e27961efda|1969-07-20T21:04:50.040Z|53|2022-02-03T05:37:40.296Z|1|076 990 14 69|077 315 82 36|AVS|756.6965.3189.95|https://randomuser.me/api/portraits/women/21.jpg|https://randomuser.me/api/portraits/med/women/21.jpg|https://randomuser.me/api/portraits/thumb/women/21.jpg|CH
female|Miss|Carole|Miller|3188|Oak Lawn Ave|Burkburnett|North Dakota|United States|52180|-41.5566|-16.6940|+6:00|"Almaty| Dhaka| Colombo"|carole.miller@example.com|15c272ba-d6f9-49e2-83d5-223402f2ac73|bigelephant401|films+pic+galeries|YYowSqLW|d65d1c55cb1136225c086928829e3fb7|384b405fb6703d2e1f8a0b04e79bc330f3f5956e|72876ecc6161a656a5dfb9aab8debae9df2342444a8e3fe51c2d4d86ccc6b19f|1969-07-26T04:24:38.244Z|53|2012-10-16T18:46:45.483Z|10|(605) 212-3909|(290) 622-2413|SSN|480-02-3622|https://randomuser.me/api/portraits/women/29.jpg|https://randomuser.me/api/portraits/med/women/29.jpg|https://randomuser.me/api/portraits/thumb/women/29.jpg|US
male|Mr|Tristan|Lo|7218|Lake of Bays Road|Woodstock|Yukon|Canada|X0G 7W4|11.1516|-154.2017|+1:00|"Brussels| Copenhagen| Madrid| Paris"|tristan.lo@example.com|ca9a56b3-1b4f-4033-b247-aafd32e2ee88|tinywolf284|sebastia|PS3NszfK|cf52faecb071fc9e30b14f3272006d5f|162a58d9c5a58f1e0a68a93901e657a9417db321|e36d2dda0f39a6969dc0d0169758e495cd01931ad8169a373082e47488cd65ad|1986-10-05T04:15:29.934Z|36|2006-10-16T14:22:59.337Z|16|Y10 T67-8634|S13 L81-6405|SIN|712216712|https://randomuser.me/api/portraits/men/91.jpg|https://randomuser.me/api/portraits/med/men/91.jpg|https://randomuser.me/api/portraits/thumb/men/91.jpg|CA
male|Monsieur|John|Perrin|9623|Rue de Bonnel|Hägendorf|Basel-Landschaft|Switzerland|4661|-45.7490|133.8438|-11:00|"Midway Island| Samoa"|john.perrin@example.com|3fc3a469-5aee-40b7-a78c-284a529424c7|goldenmouse194|joecool|Pz95jJea|439cb3b85d7ffdbc7da4abb3fc77aa88|54aaff7730d6bc19debccb80c2eb04683642758d|9065cbefae08c0997c2587fa2145c2b3b6dcc36f68803660e94ef6c9fd9bd962|1997-12-31T12:00:32.819Z|25|2018-09-04T00:46:10.853Z|4|078 692 49 82|079 424 74 04|AVS|756.5515.8927.53|https://randomuser.me/api/portraits/men/14.jpg|https://randomuser.me/api/portraits/med/men/14.jpg|https://randomuser.me/api/portraits/thumb/men/14.jpg|CH
female|Miss|Ömür|Bolatlı|3876|Doktorlar Cd|Denizli|Sivas|Turkey|62631|-88.6425|-75.2519|+6:00|"Almaty| Dhaka| Colombo"|omur.bolatli@example.com|eca95fb9-897e-4bb2-945a-ecf1792be06a|angrygorilla316|child|qRqRYoch|5c794448f0705513772ed1a64f946e8e|8438348bcac09269f8b0dfe824c703ff0eae6b7c|d7009893664bd4ea65f44385b7e474cc704886ae6945334723989aaea3eb92ed|1973-06-06T01:09:56.742Z|49|2006-05-13T04:14:48.862Z|16|(179)-301-7058|(835)-751-6292||null|https://randomuser.me/api/portraits/women/43.jpg|https://randomuser.me/api/portraits/med/women/43.jpg|https://randomuser.me/api/portraits/thumb/women/43.jpg|TR
male|Mr|مهراد|رضاییان|9236|هویزه|بندرعباس|خراسان رضوی|Iran|73436|-42.9050|31.2826|+3:00|"Baghdad| Riyadh| Moscow| St. Petersburg"|mhrd.rdyyn@example.com|78ae4438-ca14-4ab3-b43a-fcb1a84e4504|silvergorilla720|yyyy|xn4zzH5G|e72e795938c415460c441944a3237d6d|a83322346bb9c1e637ed7fac6fd2ba18eb6925e3|2f0aa4ce9aa8373ba472481c1e2508ded70a3c4b5e8760d9dcdfbe6992e98c88|1970-10-11T14:14:28.415Z|52|2006-03-20T07:06:43.756Z|16|004-78199680|0960-298-8391||null|https://randomuser.me/api/portraits/men/84.jpg|https://randomuser.me/api/portraits/med/men/84.jpg|https://randomuser.me/api/portraits/thumb/men/84.jpg|IR
female|Miss|Amelia|Lavoie|5838|Arctic Way|Lasalle|Nova Scotia|Canada|U6X 0Y5|60.7009|0.7899|-5:00|"Eastern Time (US & Canada)| Bogota| Lima"|amelia.lavoie@example.com|70458edf-f781-4286-93a9-9f2806ef5399|crazycat572|judith|PPxvi2px|72fea6e95cea8d99d2396bbe415efa3b|0428f7f8a5ff62af509d3ccf5245c7a18b1875f9|d96b725b1a2032acd1474558d4c44255cf7a84e667ebec84cbdd4a83f4b42f9b|1999-10-24T03:38:59.098Z|23|2016-09-23T01:03:56.915Z|6|L66 Z90-9369|W49 G47-2199|SIN|435662572|https://randomuser.me/api/portraits/women/70.jpg|https://randomuser.me/api/portraits/med/women/70.jpg|https://randomuser.me/api/portraits/thumb/women/70.jpg|CA
female|Ms|Alice|Taylor|30|East Coast Road|Invercargill|Gisborne|New Zealand|43085|-14.4641|8.9771|+2:00|"Kaliningrad| South Africa"|alice.taylor@example.com|543dacc9-0fa3-46f2-8981-380a1a14dd57|yellowlion530|cottage|NwtwqJcG|c015e4eedc6a9756e353b41cd6c9fb6c|803c9a4ac2b173ab8ea33775d5e8dccb65821e4c|db213cc59cac3723e645063eb7f2cc455c3a1ff1dc7e9aa39a7094daa8503616|1969-09-14T10:44:24.636Z|53|2014-01-31T12:23:37.083Z|9|(689)-676-7658|(292)-400-1769||null|https://randomuser.me/api/portraits/women/10.jpg|https://randomuser.me/api/portraits/med/women/10.jpg|https://randomuser.me/api/portraits/thumb/women/10.jpg|NZ
male|Mr|Svarg|Umanec|3740|Vasilkivskogo|Rozdilna|Donecka|Ukraine|33617|-35.1762|-9.1523|+6:00|"Almaty| Dhaka| Colombo"|svarg.umanec@example.com|1411f153-c7de-44eb-94a1-51164f7628a6|bluefish889|sapphire|6YEEdvqh|c343e6ae682869673044fb4b74aa0e36|34dc251b039fb6c54a3c64237cfe746767cfc8b3|e7e45cccaa42ea5d12448fe8c97b62279a904f2a2318b44c1ccb3cfe1323e9c0|1947-09-27T12:33:24.436Z|75|2019-02-15T07:31:42.894Z|4|(067) K38-3501|(097) R71-8252||null|https://randomuser.me/api/portraits/men/35.jpg|https://randomuser.me/api/portraits/med/men/35.jpg|https://randomuser.me/api/portraits/thumb/men/35.jpg|UA
male|Mr|Kian|Van Veldhuizen|2136|Binairstraat|Broek op Langedijk|Limburg|Netherlands|8015 ME|-4.1770|38.8484|-1:00|"Azores| Cape Verde Islands"|kian.vanveldhuizen@example.com|dbc682c2-8346-41c1-a6ff-5005001ab4fa|yellowleopard890|strife|5NVjf6zl|a268500e93be08429401cf6811e025db|aa220f499965cf0cde76eb50ee55aae065f0689b|d9315f4d2ebe97f00f48ea59efeb9dcb88acc3564525753767e2c22952c45134|1991-04-26T05:49:36.158Z|31|2002-09-26T11:11:19.252Z|20|(093) 4645171|(06) 08338360|BSN|95909116|https://randomuser.me/api/portraits/men/19.jpg|https://randomuser.me/api/portraits/med/men/19.jpg|https://randomuser.me/api/portraits/thumb/men/19.jpg|NL
male|Mr|Even|Sørum|4967|Ålovs vei|Gryllefjord|Bergen|Norway|2673|85.6100|132.4844|+3:00|"Baghdad| Riyadh| Moscow| St. Petersburg"|even.sorum@example.com|5f5933dd-6d8c-482a-9408-338d4465dc56|lazytiger440|51505150|1AKnMZDN|1534e1aa0967af682114a19937909083|9c8fa19f96ea1f5f50ec1d3889baece6dc757b41|46758cc1b9c373c55632bb92d9a0a41bd3600b9e03f501a1065ceb9f98c29b09|1997-07-16T00:43:04.472Z|25|2003-12-02T05:46:35.133Z|19|22992481|96394439|FN|16079738119|https://randomuser.me/api/portraits/men/35.jpg|https://randomuser.me/api/portraits/med/men/35.jpg|https://randomuser.me/api/portraits/thumb/men/35.jpg|NO
male|Mr|Thomas|Wood|1573|Guyton Street|Invercargill|Northland|New Zealand|64542|-16.2675|-6.9214|+7:00|"Bangkok| Hanoi| Jakarta"|thomas.wood@example.com|761be27a-623e-47ed-9257-00e215b853bc|angrygorilla262|reagan|FBmJmluG|f245358415424d013be6203ef26fbeec|287d0a71cd8a49d171ac35f4cfeace3c9c7f0826|977726d709029bb2e29fd3ccd3bd0b25905fb647e81230d9ac32f7aca9586c5a|1974-07-18T07:06:35.057Z|48|2003-07-10T00:25:55.506Z|19|(713)-618-3113|(224)-597-7622||null|https://randomuser.me/api/portraits/men/65.jpg|https://randomuser.me/api/portraits/med/men/65.jpg|https://randomuser.me/api/portraits/thumb/men/65.jpg|NZ
female|Mrs|فاطمه|رضاییان|641|مجاهدین اسلام|شیراز|کرمانشاه|Iran|53859|7.3574|-8.4655|+8:00|"Beijing| Perth| Singapore| Hong Kong"|ftmh.rdyyn@example.com|f47c5365-1bab-4f3a-b9a9-b05f473b4db6|sadelephant160|papa|eYoC1Tlb|2ea62dc7a9e6a0624e1ea59e76a25777|e7daf039767c1fb1fde95fe67db8234002f005b5|90f4a58921bb5865a5c816090159486fcbea1426a4cf098d50043fd242b0ea03|1987-02-12T01:09:50.465Z|36|2021-10-27T14:41:06.153Z|1|017-92798339|0917-318-1785||null|https://randomuser.me/api/portraits/women/13.jpg|https://randomuser.me/api/portraits/med/women/13.jpg|https://randomuser.me/api/portraits/thumb/women/13.jpg|IR
female|Miss|Irmingard|Kirschner|9795|Kirchstraße|Heiligenhaus|Mecklenburg-Vorpommern|Germany|58628|13.5251|4.1158|-4:00|"Atlantic Time (Canada)| Caracas| La Paz"|irmingard.kirschner@example.com|f2687814-6a62-4e61-b613-704d2d283501|smalldog326|000000|kmIYnuf0|88e73a92ea6d0a2f1df316b2f07f6ee4|3079fa9a7f8229bcfac8991aceb9cc93e39b83d8|da331c9887319d556a52878a49b8c70c8edd517d84dc159fd4f478d03fc8d78d|1953-05-12T08:15:52.284Z|69|2010-11-03T10:32:56.592Z|12|0962-1494776|0172-5904910|SVNR|76 120553 K 803|https://randomuser.me/api/portraits/women/48.jpg|https://randomuser.me/api/portraits/med/women/48.jpg|https://randomuser.me/api/portraits/thumb/women/48.jpg|DE
female|Miss|Verona|Haisma|8029|De Steenderens|Groot Genhout|Groningen|Netherlands|9004 SS|40.5541|58.2963|-4:00|"Atlantic Time (Canada)| Caracas| La Paz"|verona.haisma@example.com|9c216af9-3607-4dd5-825a-43289189f502|lazygoose519|washburn|8bDGhjsT|7656a6e734daa0e162d47aa1e9a08716|881e657a4c3bda7a527e1c4612b56f581054374c|e82bf66d490e0cf6adfda49bbc2e0d1952f161ba776597d773fc7155cf77c775|1986-09-17T20:44:22.572Z|36|2021-07-03T03:51:39.836Z|1|(0176) 091206|(06) 21485991|BSN|59420449|https://randomuser.me/api/portraits/women/35.jpg|https://randomuser.me/api/portraits/med/women/35.jpg|https://randomuser.me/api/portraits/thumb/women/35.jpg|NL
female|Ms|Julie|Hale|9217|Strand Road|Listowel|Laois|Ireland|72073|-18.5794|175.9483|-10:00|Hawaii|julie.hale@example.com|a778b4bf-1287-4f3f-86ff-0379f9528c36|blackbird649|squirt|7EQQueVZ|b6ecced392106772dde1b073b7b115ec|360d55720bf9a1b9765e8e78144f252d4943ed21|00f940ac2afd7023a869c1c979a610c2f9c803a8ef89649fe5e33960ddd52552|1965-08-03T06:13:37.644Z|57|2020-05-12T09:42:48.323Z|2|031-002-2462|081-340-5545|PPS|4149749T|https://randomuser.me/api/portraits/women/33.jpg|https://randomuser.me/api/portraits/med/women/33.jpg|https://randomuser.me/api/portraits/thumb/women/33.jpg|IE
female|Miss|Emilia|Nazario|3532|Boulevard Cabo Verde|Sisoguichi|Baja California|Mexico|70392|19.5102|50.8971|+10:00|"Eastern Australia| Guam| Vladivostok"|emilia.nazario@example.com|e9942dff-9fc2-495c-991a-7cd35b49c513|bluebird564|bond|IDLUnXUz|a03093fa2aeccafb808e8244ce48a562|7625f76676ee05571233ebcdefeb6527d55d79b3|50aa5665ad3ad65cb2377a2b5fddf287eb11602e4a1e312c48787b25bc5f3534|1984-10-26T22:30:25.680Z|38|2010-04-07T21:44:41.123Z|12|(661) 426 6838|(646) 617 0855|NSS|86 37 28 2723 4|https://randomuser.me/api/portraits/women/12.jpg|https://randomuser.me/api/portraits/med/women/12.jpg|https://randomuser.me/api/portraits/thumb/women/12.jpg|MX
female|Miss|سارینا|احمدی|1060|کارگر شمالی|زنجان|همدان|Iran|13752|-29.7817|-21.9619|0:00|"Western Europe Time| London| Lisbon| Casablanca"|sryn.hmdy@example.com|84908113-5f0f-41f1-9333-7246e1045a44|ticklishswan762|12341234|xlFT5yXN|fca619a3514a59b07de085433dca57d9|3822d85324511dad3ba00f1a127b0e7e411e40db|f3bdcda6c096cd03697b84671f7b41826b2973c5b4b53fc1cb3db724b4af393d|1980-08-11T22:47:39.095Z|42|2013-09-08T07:12:05.177Z|9|007-16220814|0944-888-0710||null|https://randomuser.me/api/portraits/women/4.jpg|https://randomuser.me/api/portraits/med/women/4.jpg|https://randomuser.me/api/portraits/thumb/women/4.jpg|IR
female|Mrs|Anupama|Kouser|473|Kazimar St|Vijayawada|Daman and Diu|India|12378|-66.7710|-98.9879|+4:00|"Abu Dhabi| Muscat| Baku| Tbilisi"|anupama.kouser@example.com|e97b9ff5-abea-4461-9cef-3b3ee20cabcb|whitedog158|qweqwe|V4boN8zj|992c1f5601e42fe0554481e01e8c99a3|e02e5eed62e954f5cb94ebdbc3ab8e98debcf143|9ff4105d5ef6aa7aca5f38e6cb94bb383015e1cb1061243a203df963bf500651|1954-04-16T00:51:27.197Z|68|2007-10-11T07:01:15.388Z|15|8330691241|9440558964|UIDAI|128245556446|https://randomuser.me/api/portraits/women/30.jpg|https://randomuser.me/api/portraits/med/women/30.jpg|https://randomuser.me/api/portraits/thumb/women/30.jpg|IN
male|Mr|Volkan|Baykam|9620|Mevlana Cd|Afyonkarahisar|Ardahan|Turkey|97520|-19.1065|-20.8196|-12:00|"Eniwetok| Kwajalein"|volkan.baykam@example.com|b256e2a7-1937-4bef-b694-73280d8e5070|bigmouse152|life|l4p4k2uD|a9fe16d87ca2b69439d1c3502bbc0822|7a2fc35bdcefa477d71dba7c151bc25d3db99557|982811fb5a5a0099b92452925b72a6752777c9563f5d6fbe26a13c761ab59019|1946-09-21T06:19:30.987Z|76|2003-11-11T22:03:32.449Z|19|(795)-047-7191|(062)-839-6312||null|https://randomuser.me/api/portraits/men/86.jpg|https://randomuser.me/api/portraits/med/men/86.jpg|https://randomuser.me/api/portraits/thumb/men/86.jpg|TR
female|Miss|Emily|Thomsen|9772|Birkevang|Øster Assels|Hovedstaden|Denmark|62242|31.5173|104.3698|0:00|"Western Europe Time| London| Lisbon| Casablanca"|emily.thomsen@example.com|9cb5b5ea-61fb-407f-88c0-a65ba79094ec|tinybear579|josephin|cVQhhrD1|8efc546e7abd22974457b120aea75e2e|8f1517a0b99971fad3e9644133780b41d853d232|b648affae8e1d3d75ebea4400f48b342a5b3978f2d6c8163380424a98053977a|1969-08-28T22:47:07.402Z|53|2003-12-28T12:32:27.135Z|19|14562322|48540559|CPR|280869-9064|https://randomuser.me/api/portraits/women/26.jpg|https://randomuser.me/api/portraits/med/women/26.jpg|https://randomuser.me/api/portraits/thumb/women/26.jpg|DK
female|Ms|Nicoline|Møller|8371|Ørnevej|Skaerbaek|Hovedstaden|Denmark|56703|-44.6482|162.0002|-9:00|Alaska|nicoline.moller@example.com|ef8e07e8-b6d4-4df0-adfb-99f8fe76692d|lazyleopard210|passwor|7yRnAFcB|97f5b0b3130e0498c70e40489f70d7a3|e0970139f82691556913b1e0ecee4c9c96e08e35|072c17ccd400cb1736c23945047eb0512a3d8409bf3f10b7b845b21f5f8d2fd2|1966-10-27T22:21:10.110Z|56|2015-06-01T03:03:23.592Z|7|71762092|43898418|CPR|271066-6131|https://randomuser.me/api/portraits/women/23.jpg|https://randomuser.me/api/portraits/med/women/23.jpg|https://randomuser.me/api/portraits/thumb/women/23.jpg|DK
male|Mr|Nick|Newman|2357|The Crescent|Swords|Galway City|Ireland|66723|60.6822|-49.2731|-3:30|Newfoundland|nick.newman@example.com|eeea761b-e4b8-4318-a042-b4505f913434|lazypeacock514|sandman|jgEj4r4K|180fd242602529409b32e971350e0867|a86c8dca9bdec7faa41110c66da9651c625620cc|e48a3d582f691f1ffbc6eddcfadd71fd024a9456ba981f7ca13757c46e637b2f|1955-10-04T17:28:53.167Z|67|2003-07-20T13:36:21.444Z|19|071-491-9330|081-416-6303|PPS|7298639T|https://randomuser.me/api/portraits/men/66.jpg|https://randomuser.me/api/portraits/med/men/66.jpg|https://randomuser.me/api/portraits/thumb/men/66.jpg|IE
female|Miss|Nerea|Carmona|7527|Calle de Argumosa|Arrecife|Melilla|Spain|35565|-67.2997|80.4995|0:00|"Western Europe Time| London| Lisbon| Casablanca"|nerea.carmona@example.com|5d941023-ef01-4148-9be6-1879f655e184|beautifulelephant694|zhou|z5VopXAt|4fd2f54b83a341782a18c91dba31dbcf|b298d8bde855e5c3812749a0ef31347e90114df3|58afe60955d606567f6f2e8ac6664e545f51941df6bfe37131994d50d980b89b|1981-03-02T04:14:19.257Z|42|2003-11-12T13:53:43.291Z|19|984-401-932|678-792-386|DNI|46516023-L|https://randomuser.me/api/portraits/women/8.jpg|https://randomuser.me/api/portraits/med/women/8.jpg|https://randomuser.me/api/portraits/thumb/women/8.jpg|ES
male|Mr|Jagdish|Bhoja|5218|Pali Hill|Asansol|Dadra and Nagar Haveli|India|58107|-83.1666|-24.5193|+3:30|Tehran|jagdish.bhoja@example.com|ce4ecaec-a029-473d-a5b3-f97f3dc2442a|browngoose622|thecure|hnVxJ2Sr|232257a8538fd2f89ba6aab3f773e34a|c8fd485cad42b365a092f339539864b8d62959e9|7a2d22f194866286287c470eb696bdc837d261aaa091d2f0bafc4d6ddf58be2d|1967-03-10T11:11:52.789Z|56|2013-10-20T02:17:37.589Z|9|9608981364|8869499023|UIDAI|655982929118|https://randomuser.me/api/portraits/men/45.jpg|https://randomuser.me/api/portraits/med/men/45.jpg|https://randomuser.me/api/portraits/thumb/men/45.jpg|IN
male|Mr|مهدي|نجاتی|9894|نوفل لوشاتو|قزوین|کرمان|Iran|82916|50.0110|-133.5428|-5:00|"Eastern Time (US & Canada)| Bogota| Lima"|mhdy.njty@example.com|4e03cd72-18c0-4f75-a5a6-fe291075a1fd|bigwolf156|stella|lq4ySZvl|988f14b4c74f4645714797973ec77c9b|196bada5d22a97869b131a6a6cb46fb92ddc720c|ffa8bd21f822c96bcde1ca86ddf0c5f1959a5fd52d9180a011016a599c07542f|1946-06-09T04:22:08.286Z|76|2006-09-18T20:09:16.952Z|16|069-04827819|0964-649-1708||null|https://randomuser.me/api/portraits/men/73.jpg|https://randomuser.me/api/portraits/med/men/73.jpg|https://randomuser.me/api/portraits/thumb/men/73.jpg|IR
male|Monsieur|Filip|Dupont|7743|Rue de la Baleine|Rossa|Valais|Switzerland|5544|-64.0002|-33.5552|+2:00|"Kaliningrad| South Africa"|filip.dupont@example.com|cae37fd4-f746-4b70-b881-9de3b95ded33|goldenelephant458|pizza|1rJYioRr|4f28eba799af6914e35fb5ac7ceda236|d92ac72ddbc1ee113363f1cba92031328094ff90|a7bac076335bb41d760d2e5432a3eb5733b07bd134e80566ad7ecec631df3848|1962-02-21T23:37:30.897Z|61|2007-09-12T12:34:55.134Z|15|076 474 46 51|077 423 37 27|AVS|756.1095.1672.97|https://randomuser.me/api/portraits/men/0.jpg|https://randomuser.me/api/portraits/med/men/0.jpg|https://randomuser.me/api/portraits/thumb/men/0.jpg|CH
male|Mr|Luis|Mercier|9889|Route de Genas|Dunkerque|Vosges|France|77150|53.2025|-40.4800|+4:30|Kabul|luis.mercier@example.com|23b94b4b-c302-4306-b837-2bf612b18dd6|orangeelephant506|12qwaszx|lUx5uoAS|2e56ad7e5845bf0caf6ca6742fd1120d|7108f8859bbceb8df9ff84dcce7c3b835af30eb9|3d1ef51d89c48fadfc47c3e84c70d65d83582814630f99f4096694ef86018b83|1999-04-30T23:03:38.542Z|23|2010-06-14T18:06:58.089Z|12|02-37-10-44-88|06-42-16-50-86|INSEE|1990327493684 90|https://randomuser.me/api/portraits/men/31.jpg|https://randomuser.me/api/portraits/med/men/31.jpg|https://randomuser.me/api/portraits/thumb/men/31.jpg|FR
female|Mrs|Shreya|Gugale|734|Hazratganj|Pali|Himachal Pradesh|India|20633|12.6149|89.0782|-7:00|Mountain Time (US & Canada)|shreya.gugale@example.com|82a4f391-d38e-4d44-b63e-668e8fc6b73d|angrycat635|killa|3SccnRem|3e131a8fabd46166e6250456bb3727b0|1ce185d662aff417aed12ca5f25062844d059e7a|f09e4becc04955009fe299ea7cd4e8bff5abb9f84a991cc421f31566f5c2e210|1997-11-13T12:17:13.093Z|25|2018-01-13T13:54:55.314Z|5|9204397054|7064715841|UIDAI|323463950126|https://randomuser.me/api/portraits/women/29.jpg|https://randomuser.me/api/portraits/med/women/29.jpg|https://randomuser.me/api/portraits/thumb/women/29.jpg|IN
female|Ms|Anna|Meyer|6219|The Drive|Roscrea|Monaghan|Ireland|90465|-73.8178|-23.8148|+8:00|"Beijing| Perth| Singapore| Hong Kong"|anna.meyer@example.com|cd2eead0-a03f-4ee6-b218-180492883aa5|silverpeacock297|jellybea|6S4bRnLS|69b8d706f0de489ee4ddd5dce112b410|f3d06c75e0ae4c54df1909da2a92de965f065620|b98be840c515f9f7dc59d26e553d4b82641c24152a603a7064186a311a3c2ce6|1950-02-04T01:44:23.260Z|73|2007-06-03T09:49:28.599Z|15|021-667-3980|081-602-0733|PPS|9632062T|https://randomuser.me/api/portraits/women/21.jpg|https://randomuser.me/api/portraits/med/women/21.jpg|https://randomuser.me/api/portraits/thumb/women/21.jpg|IE
female|Mrs|Victoria|Bishop|9881|Highfield Road|Enniscorthy|Monaghan|Ireland|46480|-27.1533|-132.3505|+6:00|"Almaty| Dhaka| Colombo"|victoria.bishop@example.com|d467428f-bb7a-4bff-8f69-fd7e46b33ff3|greenfrog596|jsbach|qTtfBeSD|8e8b8f18b66fe7fc1738723de612660b|e3939cca66a1eeed978020ed6c59c07bddc5da15|6daceca277bc4321726352873472e70e3ab93728447bf1d3b41929656cdb05fe|1983-01-19T01:07:16.030Z|40|2015-11-08T10:02:12.271Z|7|061-065-5212|081-332-6345|PPS|7400339T|https://randomuser.me/api/portraits/women/88.jpg|https://randomuser.me/api/portraits/med/women/88.jpg|https://randomuser.me/api/portraits/thumb/women/88.jpg|IE
male|Mr|Jay|Harvey|6613|Grove Road|Bradford|Strathclyde|United Kingdom|UV0 7BB|-64.8562|111.5744|+7:00|"Bangkok| Hanoi| Jakarta"|jay.harvey@example.com|9b048183-ce07-46ef-8688-9f7da673b963|smalldog509|sport|rQ5FWFAl|49866a8a379bf8f9c3dc429eba88e839|efb988557dc42d3aa235873a0d5c2f6c4d5245ee|85dec3cc57778f1ca293ba996ae1f0d9edacc36e8a23c7a7e4bd926f884f8473|1992-12-26T20:09:32.704Z|30|2007-03-12T18:33:59.592Z|16|015395 64172|07538 114611|NINO|LA 06 70 00 G|https://randomuser.me/api/portraits/men/86.jpg|https://randomuser.me/api/portraits/med/men/86.jpg|https://randomuser.me/api/portraits/thumb/men/86.jpg|GB
male|Mr|Neil|Crawford|7722|N Stelling Rd|Kalgoorlie|Western Australia|Australia|3616|11.3867|108.9879|-1:00|"Azores| Cape Verde Islands"|neil.crawford@example.com|00a55f83-4c6a-4c68-918f-7168d7de36fb|purpleelephant813|moomoo|rPWJOXMj|d8c8f70bdfde8313f11bf5a9c9ed9668|c24d7617eace76717ec1eac040d567b787ad2ae8|140c68d74959a75e662b94a83eb35ae8609972d690a639c1807223fe6b278ebd|1989-04-16T14:27:22.218Z|33|2002-10-29T08:04:16.653Z|20|07-5845-7823|0418-023-436|TFN|769702525|https://randomuser.me/api/portraits/men/2.jpg|https://randomuser.me/api/portraits/med/men/2.jpg|https://randomuser.me/api/portraits/thumb/men/2.jpg|AU
female|Mrs|Krin|Morrison|1598|Robinson Rd|Sydney|Western Australia|Australia|1775|89.7285|86.9608|+7:00|"Bangkok| Hanoi| Jakarta"|krin.morrison@example.com|9e8e09dd-5cff-4cc3-b876-c357052b3883|happyrabbit595|tacobell|b91F3NBp|0b8dd286fdae8804de087830aaa600b6|664ddbdf6c599b8661836cd9f3fbd7b318297313|2e21f15acf88222ee5e7383be8f06126eb994c67c761661351325be85cfddb88|1987-05-15T15:10:30.961Z|35|2017-04-16T11:00:29.042Z|5|03-8286-5100|0419-334-025|TFN|131943610|https://randomuser.me/api/portraits/women/92.jpg|https://randomuser.me/api/portraits/med/women/92.jpg|https://randomuser.me/api/portraits/thumb/women/92.jpg|AU
female|Miss|Sowmya|Dawangave|5563|Kasba Peth|Kamarhati|Madhya Pradesh|India|40265|64.3369|-86.4019|-4:00|"Atlantic Time (Canada)| Caracas| La Paz"|sowmya.dawangave@example.com|74c14608-155e-40a2-9d3e-95cea2af1f91|smallwolf391|feng|0aEnWN27|999ffadbbfc7baab6cb0b0c898082474|5209d9f5666aab943b9fc7ba74ff5e05046bfab8|b50cc5cfb4a896f5d7fc30e103825062f940e16f2d620287c6b5f294164a5eb2|1953-05-11T01:03:54.144Z|69|2011-12-24T07:43:53.514Z|11|9057498347|9595887163|UIDAI|319365631232|https://randomuser.me/api/portraits/women/78.jpg|https://randomuser.me/api/portraits/med/women/78.jpg|https://randomuser.me/api/portraits/thumb/women/78.jpg|IN
male|Mr|Bebiano|Ramos|7577|Rua João Xxiii|Itapevi|Sergipe|Brazil|41039|-0.1563|-58.9679|+9:30|"Adelaide| Darwin"|bebiano.ramos@example.com|dcd9781a-a772-47de-a786-689a38b4cbe1|lazyzebra168|tyrone|kN9yzLV3|12ddb4d5c56683cbf67595f42751835b|2957101ad8e99b783016a2f2fb224359b19e3999|fd6b61cb621188a40cb5604098739d310f6a915a4df61013eca4b4b921f711e6|1984-09-12T09:55:54.724Z|38|2018-09-04T06:56:49.503Z|4|(38) 8667-4822|(53) 3753-4637|CPF|573.315.345-22|https://randomuser.me/api/portraits/men/41.jpg|https://randomuser.me/api/portraits/med/men/41.jpg|https://randomuser.me/api/portraits/thumb/men/41.jpg|BR
female|Miss|Elif|Ekşioğlu|4007|Fatih Sultan Mehmet Cd|Bursa|Kars|Turkey|35414|79.1501|19.1587|+11:00|"Magadan| Solomon Islands| New Caledonia"|elif.eksioglu@example.com|ca0bc803-535a-4545-8908-4f87791adfac|yellowswan362|qwaszx|64bW7ZzM|da1aa34e4e50cbe2d25e09a60660f288|e1c6754bd9b5335c06e060170f713d086e93ab05|babd02b8207a67cd2a2089a431a0642558af68ce6739ef42c8cc581934f9a9cc|1966-12-30T17:42:13.075Z|56|2020-09-25T13:33:13.264Z|2|(076)-902-3185|(787)-291-5155||null|https://randomuser.me/api/portraits/women/44.jpg|https://randomuser.me/api/portraits/med/women/44.jpg|https://randomuser.me/api/portraits/thumb/women/44.jpg|TR
female|Mrs|Vandana|Jain|2802|Bandstand Promenade|Varanasi|Rajasthan|India|13511|30.0687|93.5010|-7:00|Mountain Time (US & Canada)|vandana.jain@example.com|a9e4f361-12ca-4fe3-8dc5-1b34ed770541|bluefrog335|great1|x4ScwO03|cfa7798784f522e3a72099e0da6cb8cb|bee952073b5da1c78777a31246783f5bf31ab24b|732e48c6099fbe29d3499a762ea86f780226892f25db74de607992022328a355|1951-07-18T03:30:57.415Z|71|2007-11-04T00:11:01.391Z|15|7160886704|8460911058|UIDAI|282943502967|https://randomuser.me/api/portraits/women/69.jpg|https://randomuser.me/api/portraits/med/women/69.jpg|https://randomuser.me/api/portraits/thumb/women/69.jpg|IN
male|Mr|Macit|Karaer|8961|Mevlana Cd|Sakarya|Amasya|Turkey|92248|50.5850|-104.2324|-4:00|"Atlantic Time (Canada)| Caracas| La Paz"|macit.karaer@example.com|4e0d5365-d690-42aa-81e4-94a28e632179|tinykoala825|logger|Ow4PeWXW|a3e1c3da6e4672fe7eaa81b74431dde2|0d9aa597afab84584ea78f3ebaaf42915c69b7af|284070cfcc46c311c801dfd7e82d33bd9788cb702d90b19c4a59a30d094c1290|1999-09-08T05:27:42.221Z|23|2017-02-11T14:43:28.221Z|6|(515)-886-4036|(195)-761-8071||null|https://randomuser.me/api/portraits/men/7.jpg|https://randomuser.me/api/portraits/med/men/7.jpg|https://randomuser.me/api/portraits/thumb/men/7.jpg|TR
female|Ms|Chloe|Edwards|4705|Cranford Street|Masterton|Auckland|New Zealand|26589|73.8564|50.8450|+8:00|"Beijing| Perth| Singapore| Hong Kong"|chloe.edwards@example.com|c21e62df-8ed0-43f5-b978-1b38783f0ab5|greenpanda788|compaq1|FmWYcJbk|cf6c4fd007f727e16fd3b467c59e3200|77af891f6245ff1024ef2523d1ce80ee3adf2763|544b5cd06c7da76a9756713876396470ee19f14d8450d6bb7af72f2f57bfee1f|1971-02-05T11:25:02.107Z|52|2020-10-11T00:22:15.599Z|2|(612)-117-2831|(985)-730-4606||null|https://randomuser.me/api/portraits/women/12.jpg|https://randomuser.me/api/portraits/med/women/12.jpg|https://randomuser.me/api/portraits/thumb/women/12.jpg|NZ
male|Mr|Sasha|Picard|9006|Rue de Bonnel|Toulon|Aube|France|90166|-83.7351|-159.5977|-11:00|"Midway Island| Samoa"|sasha.picard@example.com|d55d6a1e-8e0f-431a-a029-72c04d87f318|orangebear488|arsenal1|G2CdnD73|4ecabc537261b9907c43084e4c88553d|09027bd76334cf74953b6beb7fa2b142fc3b75df|f1be132795992681d1180295b556cf4cbb57c6bc233dae44c484f166422e6e83|1951-08-08T17:43:01.921Z|71|2015-03-21T05:45:21.486Z|7|04-13-18-36-00|06-71-61-17-40|INSEE|1510777887024 84|https://randomuser.me/api/portraits/men/98.jpg|https://randomuser.me/api/portraits/med/men/98.jpg|https://randomuser.me/api/portraits/thumb/men/98.jpg|FR
female|Mrs|Gabriëla|Lieshout|4763|Jacob Valckeplein|Castelre|Friesland|Netherlands|9302 LU|63.5371|-23.8482|+4:30|Kabul|gabriela.lieshout@example.com|939d7a07-e6e1-4524-bf47-e1ca5e676e34|lazybear191|aurora|3PseNonf|8b253d50f26115ced019c28c73da0cb6|a0bbf7afd2c56985c970ac6625d2ddae59dfebf8|041f1f6897dac6392b35cc08df3912c4bc67c61b73c7c68a81352cd38029d38c|1981-01-15T17:07:28.678Z|42|2017-10-19T01:40:11.659Z|5|(0078) 709652|(06) 88122702|BSN|64334652|https://randomuser.me/api/portraits/women/24.jpg|https://randomuser.me/api/portraits/med/women/24.jpg|https://randomuser.me/api/portraits/thumb/women/24.jpg|NL
male|Mr|Abdirahman|Thingstad|9144|Strømsborgveien|Kongsvinger|Bergen|Norway|5687|49.5037|-44.3244|-7:00|Mountain Time (US & Canada)|abdirahman.thingstad@example.com|efc25589-8739-4335-8b06-281ac15a1d41|ticklishladybug919|quest|m3b0megM|976f7db94d4b6e98a8898e2ff5aaed9e|fe7df8ac8a7120b2b78ee32e938acb4a8dfe5bd6|e245b0c075757fc67b168de0818014ea49a89914fdaf02c7728d18c9288a36be|1995-07-25T04:04:34.191Z|27|2003-04-10T07:45:04.973Z|19|68954339|44317948|FN|25079521178|https://randomuser.me/api/portraits/men/87.jpg|https://randomuser.me/api/portraits/med/men/87.jpg|https://randomuser.me/api/portraits/thumb/men/87.jpg|NO
male|Mr|بنیامین|سلطانی نژاد|995|شهید ثانی|قرچک|تهران|Iran|22759|-67.6647|-53.0600|+4:00|"Abu Dhabi| Muscat| Baku| Tbilisi"|bnymyn.sltnynjd@example.com|4369fcc9-449f-4935-9199-d71d37db30ab|bluecat179|dudes|nBLphaZB|cff32bf7ed60f0f91497f5f4de781179|9ece57d175c649ab840ba1ad970687bcc104adca|fb3f36bab0d130f11070a653635df88c0ed4470a3707ecb24dd7eddd441142a8|1995-06-26T20:56:33.925Z|27|2013-11-27T21:01:36.361Z|9|084-29889368|0904-886-8275||null|https://randomuser.me/api/portraits/men/84.jpg|https://randomuser.me/api/portraits/med/men/84.jpg|https://randomuser.me/api/portraits/thumb/men/84.jpg|IR
male|Mr|Markus|Schurig|2671|Blumenstraße|Schwabach|Niedersachsen|Germany|57163|-46.5803|-155.8563|-3:00|"Brazil| Buenos Aires| Georgetown"|markus.schurig@example.com|bf22cf3c-fd44-4f1c-a3e2-cc93d7634f85|purpleswan455|br0d3r|Vxc9rzyS|c6414c50050e0a5c996e36ea0fab1432|e52e67b27a85c80ff1e4084418063368127f63a6|2be2e992e180f2ec61a8c2e0d366bb4737640c4da1d62823455fccf482c9407c|1947-03-17T02:23:29.197Z|75|2009-01-05T13:44:05.109Z|14|0940-9045558|0176-8859871|SVNR|03 160347 S 402|https://randomuser.me/api/portraits/men/72.jpg|https://randomuser.me/api/portraits/med/men/72.jpg|https://randomuser.me/api/portraits/thumb/men/72.jpg|DE
male|Mr|Aloke|Banerjee|2692|Old Jail Rd|Satara|Arunachal Pradesh|India|43077|-6.0443|14.5124|-4:00|"Atlantic Time (Canada)| Caracas| La Paz"|aloke.banerjee@example.com|238c351f-0d24-4268-ba32-7e6bb938f07f|heavyelephant335|thirty|hXgGFiRQ|3cf023a932370e75c98a4b39be73d668|bfeab1a6bb0a7ad69ceda88d80118234b00a8b9b|a55c51f8f9c2cb9a189ee31781fc42878db49b63e340d91f59bb024b52e18c32|1955-05-16T22:06:15.720Z|67|2021-07-13T09:20:18.809Z|1|9767803143|7652787007|UIDAI|017628582755|https://randomuser.me/api/portraits/men/87.jpg|https://randomuser.me/api/portraits/med/men/87.jpg|https://randomuser.me/api/portraits/thumb/men/87.jpg|IN
female|Miss|Jeanne|Ramos|4083|Rolling Green Rd|Hervey Bay|Tasmania|Australia|2010|-63.0649|-165.6842|+4:00|"Abu Dhabi| Muscat| Baku| Tbilisi"|jeanne.ramos@example.com|e95aef43-4c64-46bf-8782-24bf857bf588|sadzebra797|services|djuHU6VE|60e40f6f1e34e9b02b25b385181cd387|b054827231bfe19788a953e9f5a8736d4fcb4279|fa950a7ab3eef6ebe92b27d53610b6b004130bb56f87143549d4776dcb7a915c|1992-05-05T23:38:47.142Z|30|2007-07-30T17:13:56.210Z|15|06-4010-4412|0494-785-708|TFN|300387853|https://randomuser.me/api/portraits/women/40.jpg|https://randomuser.me/api/portraits/med/women/40.jpg|https://randomuser.me/api/portraits/thumb/women/40.jpg|AU
female|Mrs|Marsha|Fields|9074|Camden Ave|Burkburnett|Georgia|United States|65024|-68.9749|47.4388|+6:00|"Almaty| Dhaka| Colombo"|marsha.fields@example.com|029b82ca-1e13-4198-827e-9ff29e63077f|crazydog876|hunter1|wYAcRftT|43dea2a178ec10b1837b76413f26e9a6|d0182e10cdba8b8e2ba58758dedc80e54ef6ae1a|7fcfa31f0f633ef8f56c4a7e58f470014ec334622b9c344503e02461cfdf2372|1999-02-07T19:04:52.412Z|24|2003-06-25T10:08:47.166Z|19|(712) 922-0184|(746) 726-5236|SSN|623-12-2251|https://randomuser.me/api/portraits/women/45.jpg|https://randomuser.me/api/portraits/med/women/45.jpg|https://randomuser.me/api/portraits/thumb/women/45.jpg|US
female|Mrs|Karla|Olsen|2516|Elme Alle|Gjerlev|Danmark|Denmark|50741|78.9694|-149.5269|+8:00|"Beijing| Perth| Singapore| Hong Kong"|karla.olsen@example.com|17bb7a85-e1ec-497b-b7aa-51cdd2095e56|brownelephant784|vvvvvvv|Celgtu1w|6469ffc79a2500d78a14341ab580c6f1|597f6f32dab655118c244564bb2f1cf54908468c|f4604a28b58115ecbd6953d2f9c8abda2767787ed036c02c2589711745a2a09a|1966-04-14T05:28:15.789Z|56|2019-09-22T11:17:31.283Z|3|35542652|39257458|CPR|130466-2695|https://randomuser.me/api/portraits/women/26.jpg|https://randomuser.me/api/portraits/med/women/26.jpg|https://randomuser.me/api/portraits/thumb/women/26.jpg|DK
female|Miss|آدرینا|حیدری|8710|شهید کبیری طامه|اردبیل|قم|Iran|47733|-85.6286|-166.5114|-3:00|"Brazil| Buenos Aires| Georgetown"|adryn.hydry@example.com|337b4670-9979-4716-bb7f-9d593f52d0a8|happycat550|bruce1|8LlcMqQm|e1b9042d035a0987a7bf01494869c247|96e27fad9b98c4c8333f6b52583938202825bd2e|288fbfb117ebad4891126c6840f8076f2016e989cd7d76d0fb9fcca7c84938e6|1993-09-30T09:58:29.652Z|29|2017-06-03T17:11:10.681Z|5|097-13792543|0999-492-2950||null|https://randomuser.me/api/portraits/women/79.jpg|https://randomuser.me/api/portraits/med/women/79.jpg|https://randomuser.me/api/portraits/thumb/women/79.jpg|IR
female|Miss|Melina|Silveira|2340|Travessa dos Martírios|Boa Vista|Rio de Janeiro|Brazil|68460|-3.7038|36.2594|+2:00|"Kaliningrad| South Africa"|melina.silveira@example.com|b3cc6231-8b62-4a27-8bad-5d7ba1b0d89c|greenrabbit650|nadine|GIqjIUnI|6a757a3c22661ba67b0357d7a46462e1|dd3e23a5ecbac86fff461a4ee94ea846b30ed7fc|1e049703c841e2cb26c34ecd9ccbb0525028d5b5d02bbdfcd0001280fad5c468|1967-09-21T10:29:11.831Z|55|2008-12-31T16:28:52.329Z|14|(51) 2808-9697|(84) 7081-1121|CPF|116.794.568-97|https://randomuser.me/api/portraits/women/64.jpg|https://randomuser.me/api/portraits/med/women/64.jpg|https://randomuser.me/api/portraits/thumb/women/64.jpg|BR
female|Mrs|Aada|Juntunen|4587|Visiokatu|Hämeenkyrö|Lapland|Finland|69874|30.8544|-71.6636|-2:00|Mid-Atlantic|aada.juntunen@example.com|b3e4b446-9b70-4271-b7b0-638be6ca0ddb|happyrabbit959|garage|xIw8G6ZX|1fb0d1c1cb675cf122ef82c94a68efb4|615bb34e1f8edca1315aab367d99d0048792696a|0f4d005978ba0503350b3107eafdfcbf3bb11da06a0b3fabbb6882cb77ad9216|1955-09-01T15:38:15.713Z|67|2012-04-21T11:19:29.095Z|10|08-397-286|045-872-55-56|HETU|NaNNA072undefined|https://randomuser.me/api/portraits/women/4.jpg|https://randomuser.me/api/portraits/med/women/4.jpg|https://randomuser.me/api/portraits/thumb/women/4.jpg|FI
male|Mr|Kenzo|Dubois|9586|Rue Chazière|Paris|Var|France|40592|24.0529|24.6584|+5:00|"Ekaterinburg| Islamabad| Karachi| Tashkent"|kenzo.dubois@example.com|00b3a340-d277-47cd-a0c1-199175906f30|happycat862|abacab|OAAkdxDm|29bcaffe9fb3c82547a0121ecdcdb954|079949a6efac4dba39aa0274bd1b5d19bc6e6ad2|4b4c7dc76be1aaf25f62a35104379cea1e2d57f4192caa39ad0036cb5a527d24|1996-01-03T01:40:09.148Z|27|2009-11-24T00:30:46.785Z|13|01-56-98-70-33|06-50-92-97-96|INSEE|1960000628032 42|https://randomuser.me/api/portraits/men/40.jpg|https://randomuser.me/api/portraits/med/men/40.jpg|https://randomuser.me/api/portraits/thumb/men/40.jpg|FR
male|Mr|Luis|Benavídez|460|Prolongación Libia|San Antonio Ocampo|Guerrero|Mexico|29045|48.2694|144.6906|+4:30|Kabul|luis.benavidez@example.com|03af62be-2124-4556-909f-2372e76189de|heavyrabbit233|shells|YDfFdxtb|6840c62612f5e4529f1fe941a7cd1bd9|f20de1c0cb0f2d2770a902c09228ba734fc664ca|7d0b87f7ca48a00b8bda2761ccc1eee66668845c88240c22daf94b5dfce2a885|1971-12-08T00:31:14.960Z|51|2015-03-07T11:27:14.457Z|8|(652) 337 7336|(625) 570 5633|NSS|39 64 85 7729 5|https://randomuser.me/api/portraits/men/44.jpg|https://randomuser.me/api/portraits/med/men/44.jpg|https://randomuser.me/api/portraits/thumb/men/44.jpg|MX
female|Mrs|Nazanin|Van Poorten|6721|Joop Den Uyl Plantsoen|Schipborg|Zeeland|Netherlands|1400 VS|29.0642|-18.6759|-8:00|Pacific Time (US & Canada)|nazanin.vanpoorten@example.com|33e36989-a67a-4d3f-b0fe-0ef2e4e2d578|orangewolf300|krista|TaMVPY4M|a0344f476fab41828a6f167364e53cf2|7637c976d0591bd6954e09907ee1468b8c38460f|843d780d11d32680bf5fcb18164cf31d6f09d3efdf9cda93744814b04361e225|1975-08-30T11:33:47.490Z|47|2002-12-04T08:06:38.492Z|20|(079) 4953176|(06) 28322719|BSN|54684977|https://randomuser.me/api/portraits/women/77.jpg|https://randomuser.me/api/portraits/med/women/77.jpg|https://randomuser.me/api/portraits/thumb/women/77.jpg|NL
male|Mr|Eeli|Suomi|3577|Fredrikinkatu|Seinäjoki|Finland Proper|Finland|21442|-67.5707|44.9536|+6:00|"Almaty| Dhaka| Colombo"|eeli.suomi@example.com|001dbf91-7cc2-4f20-93d4-eb5344f4f47f|blackkoala496|andreas|QWmwcQxn|289e20eb99a6c4653649900954df3dbf|922d65b0ebb8f8f8089cdfc6cf569f64f79398f0|fefb40b0650ebd04670736ee4668c133145e85f8e28ccb9885dd9021bfb987e6|1968-08-21T00:55:21.745Z|54|2010-11-27T10:51:07.376Z|12|07-839-372|047-789-42-91|HETU|NaNNA587undefined|https://randomuser.me/api/portraits/men/54.jpg|https://randomuser.me/api/portraits/med/men/54.jpg|https://randomuser.me/api/portraits/thumb/men/54.jpg|FI
female|Ms|Sarah|Ginnish|5462|College Ave|Trout Lake|Manitoba|Canada|S8Y 1Q3|-80.0010|178.7862|-6:00|"Central Time (US & Canada)| Mexico City"|sarah.ginnish@example.com|490cb214-7d7e-4087-9427-8a46347d8708|lazymouse121|rampage|EYJ5ih21|870bd642e2ba059f0f47e06dc25a2e34|82c913721acf2a499655eb8b6b921494d33af86e|c38529bb01c293178d108f04e91686b5437328853207e9a20a40dbb4d675925e|1971-02-15T06:48:55.560Z|52|2004-10-25T02:13:46.287Z|18|A95 X83-9144|E38 G80-8390|SIN|663110302|https://randomuser.me/api/portraits/women/6.jpg|https://randomuser.me/api/portraits/med/women/6.jpg|https://randomuser.me/api/portraits/thumb/women/6.jpg|CA
female|Ms|Deniz|Topaloğlu|5966|Mevlana Cd|Gümüşhane|Karaman|Turkey|83154|6.9633|171.1030|-6:00|"Central Time (US & Canada)| Mexico City"|deniz.topaloglu@example.com|e0a64eb9-c1df-4c58-b6b3-6807a8816a3b|silverlion583|sara|hvRz8o7g|038a2b64bfd90a91e7d039eca550935a|0eba98895a0156b732b0ddbfc6491badf529399d|faf43da6f95141da1e1cfd229c37713455bb7a3c7dd514df2fa74cd0a3c6de95|1969-10-26T02:33:58.264Z|53|2013-03-24T16:25:45.508Z|9|(838)-892-7014|(858)-828-7437||null|https://randomuser.me/api/portraits/women/67.jpg|https://randomuser.me/api/portraits/med/women/67.jpg|https://randomuser.me/api/portraits/thumb/women/67.jpg|TR
female|Madame|Erica|Gonzalez|1794|Rue de la Charité|Thörigen|Nidwalden|Switzerland|7402|-66.7534|90.9060|-10:00|Hawaii|erica.gonzalez@example.com|941e365d-ed62-4d93-9186-ba43dd5a2172|crazypeacock897|jjjjjjjj|bj27qfC9|31962f01cbcdc6ec43737ca1db2fc411|9478cdae403551afd711764ab8daa72828658e34|acbb692a4c3b7f77f316032dff148406c5676ff9ea25152faa14ba88c17d571f|1945-07-20T19:14:51.591Z|77|2011-12-27T10:55:58.341Z|11|079 090 19 57|075 998 32 66|AVS|756.1346.8871.05|https://randomuser.me/api/portraits/women/54.jpg|https://randomuser.me/api/portraits/med/women/54.jpg|https://randomuser.me/api/portraits/thumb/women/54.jpg|CH
female|Mrs|Juana|Guerrero|171|Calle de Arganzuela|Albacete|Ceuta|Spain|45642|71.5248|-78.6666|-10:00|Hawaii|juana.guerrero@example.com|e9c8c731-ae6f-43e5-9173-a9615c3ed94f|lazyleopard752|kissing|amvSJWxu|56aec2ed7bedf26fb2a6e80c5f2e2493|57dbf5d4576838f60823ed9e45b569c91d674f76|383231d7361f4660bf7c59898ed277c368085b95059121114d625e8c0f080c17|1983-02-13T10:18:54.502Z|40|2010-01-29T14:00:21.037Z|13|960-073-032|636-182-354|DNI|72040295-R|https://randomuser.me/api/portraits/women/85.jpg|https://randomuser.me/api/portraits/med/women/85.jpg|https://randomuser.me/api/portraits/thumb/women/85.jpg|ES
male|Mr|Nils|Linker|3344|Haarspithoek|Uithoorn|Flevoland|Netherlands|3144 GZ|-30.7038|24.6394|-3:00|"Brazil| Buenos Aires| Georgetown"|nils.linker@example.com|b257c51d-46ec-433c-a5f0-3aa11c6702f5|angryrabbit508|fiesta|iy0iP62D|d7e38ce4770826c2923d99ebb81c7304|156e53e6d877ccdcc309f1da928df5451dd682c6|3d571bc746044a6c5fa5ae55b9613796f6d0579e8b269a9d443ecf1150f9673a|1965-02-02T17:10:11.660Z|58|2006-09-03T07:23:13.711Z|16|(0817) 145888|(06) 56907846|BSN|57222888|https://randomuser.me/api/portraits/men/30.jpg|https://randomuser.me/api/portraits/med/men/30.jpg|https://randomuser.me/api/portraits/thumb/men/30.jpg|NL
female|Miss|Olivia|Williams|9189|West Ave|Flatrock|Nova Scotia|Canada|B4N 1O1|-49.8222|103.4175|-6:00|"Central Time (US & Canada)| Mexico City"|olivia.williams@example.com|dbe35eb7-b91a-4145-b847-298a13813c59|heavybear471|sally|etsyQvDQ|734efa148eb57ff908e1295278624de4|7666019c652b78bfb27dde68e1d29219687a6c6c|66cb786fce206f0b16b45d14804799b681ef3e9beb7d75d4dbd6b3540220c1d9|1997-11-10T01:29:19.970Z|25|2005-04-01T14:42:34.535Z|17|F61 X89-1256|M11 G31-5729|SIN|088984513|https://randomuser.me/api/portraits/women/84.jpg|https://randomuser.me/api/portraits/med/women/84.jpg|https://randomuser.me/api/portraits/thumb/women/84.jpg|CA
female|Madame|Emmanuelle|Philippe|4076|Rue Dugas-Montbel|Kestenholz|St. Gallen|Switzerland|7122|65.7566|77.0680|-8:00|Pacific Time (US & Canada)|emmanuelle.philippe@example.com|4e459697-db0d-4ee2-8a7a-dbf7ff035a88|goldengoose302|julia|2UClFItq|cc3c37eaea6191564835c6adb8f949fa|d4685d4c97fb486c0b86aa20b6aab1939f6d944f|4703a1f18415dcc1820ae7f1b36f9d2a332a4f49e929dd9ea3b4da8461491b5f|1955-04-21T04:17:15.513Z|67|2002-05-05T09:05:16.186Z|20|076 442 54 57|078 098 19 88|AVS|756.8965.9649.99|https://randomuser.me/api/portraits/women/94.jpg|https://randomuser.me/api/portraits/med/women/94.jpg|https://randomuser.me/api/portraits/thumb/women/94.jpg|CH
female|Miss|Alicia|Smith|469|Shady Ln Dr|Miami Gardens|Michigan|United States|55883|89.5972|131.1054|+9:00|"Tokyo| Seoul| Osaka| Sapporo| Yakutsk"|alicia.smith@example.com|3f3f12c9-4db3-4fda-9c24-e6bd53d2f103|purplerabbit383|logan|0IjinsnX|cea9110a6d7cecaec8b3d2b724b4cbb0|5e6842d7e8bfadb739dc91dabd1208756e300c3f|6cc8419081b943e3bc0727ead753f32c3a2d470778a702f6595b012a04c91798|1970-11-21T20:46:05.328Z|52|2008-06-29T01:10:46.023Z|14|(596) 730-8310|(360) 372-8350|SSN|861-24-0646|https://randomuser.me/api/portraits/women/4.jpg|https://randomuser.me/api/portraits/med/women/4.jpg|https://randomuser.me/api/portraits/thumb/women/4.jpg|US
female|Ms|Dicle|Hondebrink|661|Kollumerland|Echteld|Flevoland|Netherlands|1204 GE|42.8835|36.2889|+9:30|"Adelaide| Darwin"|dicle.hondebrink@example.com|e06d3ce1-ea69-46e2-b0d2-1438c9be2d49|organicgorilla562|forfun|9kIE99y2|862356d48b40e4eff655b6dd0eec7334|c2004b38b840a0cc363cf20966e005905c63bb1a|d8d0508cc5ec8763720ada208c628906db7c14123f246771ac64230f2e3e6fa1|1972-10-07T22:05:07.469Z|50|2007-03-18T04:04:51.702Z|15|(060) 7034850|(06) 34331181|BSN|52789511|https://randomuser.me/api/portraits/women/41.jpg|https://randomuser.me/api/portraits/med/women/41.jpg|https://randomuser.me/api/portraits/thumb/women/41.jpg|NL
male|Mr|Gabriel|Pérez|5338|Calle del Arenal|Cuenca|Canarias|Spain|66551|55.6938|-130.7930|-12:00|"Eniwetok| Kwajalein"|gabriel.perez@example.com|3b4b5364-4084-46c6-a981-76355c4c21f8|silverbutterfly779|hershey|ks45m8vU|946ceea4f82682670d64fac814301c17|a9d9af43b05a266f0bcec0cc13eb6399f223eb0d|10cfd150cbc6fe0bb4ea84fc58d7dac7cabed73707d3fadfb31a2ba60737f21f|1984-05-02T12:13:08.230Z|38|2018-02-09T19:44:53.055Z|5|968-001-744|635-930-897|DNI|94208523-Y|https://randomuser.me/api/portraits/men/83.jpg|https://randomuser.me/api/portraits/med/men/83.jpg|https://randomuser.me/api/portraits/thumb/men/83.jpg|ES
male|Mr|Braxton|Lee|2458|Madras Street|Napier|Waikato|New Zealand|13261|-58.4577|37.2366|+1:00|"Brussels| Copenhagen| Madrid| Paris"|braxton.lee@example.com|b3fb628a-af55-4fb3-86e5-36b0837f6445|bigelephant225|verbatim|DBhMVqXq|e1b51379150ac74161c8cb7bce2c11d6|2100e31d9178256e8933c53761a49d7bf4ed08fd|e191e96f54a9e8770fd5dbe49cd38b53dcfdb11998c31bcdb287c4506c39a2ab|1970-11-16T04:43:36.786Z|52|2021-02-26T22:07:55.881Z|2|(951)-955-9541|(555)-617-2049||null|https://randomuser.me/api/portraits/men/13.jpg|https://randomuser.me/api/portraits/med/men/13.jpg|https://randomuser.me/api/portraits/thumb/men/13.jpg|NZ
male|Mr|Veer|Andrade|8216|Bhootnath Rd|Kota|Arunachal Pradesh|India|77727|52.4269|-113.5339|+5:30|"Bombay| Calcutta| Madras| New Delhi"|veer.andrade@example.com|167cd731-b91e-4a4c-bf69-d78ec58215b6|smallmeercat947|sinner|nNoSQenx|e1d20362da56ba48eed00298b6e188b7|fa82d8c3a8609ae5de65fa76fc36fda9dbfaaf2a|e572fae0fb1dae5f4f7887b6bb73fae97d3b6af8fa9cfb4e609cc14450400b47|1997-03-17T22:38:56.097Z|25|2015-08-17T19:34:11.116Z|7|7284200395|9129581939|UIDAI|337475521061|https://randomuser.me/api/portraits/men/75.jpg|https://randomuser.me/api/portraits/med/men/75.jpg|https://randomuser.me/api/portraits/thumb/men/75.jpg|IN
female|Ms|Antonia|González|5694|Calle Covadonga|Hospitalet de Llobregat|La Rioja|Spain|98619|-68.7337|137.7674|-9:00|Alaska|antonia.gonzalez@example.com|b003b138-029f-4c4b-b075-eb0874096c19|greenostrich145|nobody|OS5wp9HJ|a37e216f31b2d882d7567a2cd538d465|8d3ce7f1215a60d25d9deccc7128e8abac104b32|d533cd61ea3dd3208875eafaf82593d9a6f73181c5102482df3846988eea66c5|1999-06-21T14:27:06.674Z|23|2013-03-02T07:10:19.299Z|10|990-937-206|615-083-777|DNI|85868119-O|https://randomuser.me/api/portraits/women/65.jpg|https://randomuser.me/api/portraits/med/women/65.jpg|https://randomuser.me/api/portraits/thumb/women/65.jpg|ES
female|Ms|Geetha|Vernekar|9590|Dwaraka Nagar|South Dumdum|Tamil Nadu|India|62954|61.2142|-24.3561|-10:00|Hawaii|geetha.vernekar@example.com|15457a6f-8024-4a8a-99dd-9ecbeebe0b39|goldensnake358|isabel|hAOGZUC1|3d1aaa7d531738a0913aee2afca02e84|49ad281b4c8a47108fb9a7bf41d950e164c8f7df|d001e3527d1b3df4d67f2315741413a33ada2b4667cc59a77e1486befb0e547f|1956-08-20T09:30:24.518Z|66|2006-12-13T13:36:31.085Z|16|7364540004|8240096120|UIDAI|476767021292|https://randomuser.me/api/portraits/women/46.jpg|https://randomuser.me/api/portraits/med/women/46.jpg|https://randomuser.me/api/portraits/thumb/women/46.jpg|IN
male|Monsieur|Olaf|Caron|9062|Avenue Jean-Jaurès|Suscévaz|Jura|Switzerland|6160|39.1938|-7.3275|+9:00|"Tokyo| Seoul| Osaka| Sapporo| Yakutsk"|olaf.caron@example.com|bb314329-9c5f-4c1a-930c-46ea530a37cf|crazylion320|doodle|ks6cXdCq|2ad5060ad8f19904f6b909152acc39ae|77d494d0596b9cd1f97cb79b005412597d31e230|129b03c913bb8471a21881d0d5324d0fdc0cafb57c1c7d6fd28fe735b6ceb6e3|1986-07-16T03:05:55.660Z|36|2006-01-09T04:30:09.142Z|17|075 609 72 40|078 239 62 29|AVS|756.3823.8494.06|https://randomuser.me/api/portraits/men/70.jpg|https://randomuser.me/api/portraits/med/men/70.jpg|https://randomuser.me/api/portraits/thumb/men/70.jpg|CH
female|Ms|Sally|Howard|7033|Shady Ln Dr|Fountain Valley|Texas|United States|21795|-79.1370|6.8254|+2:00|"Kaliningrad| South Africa"|sally.howard@example.com|cf56b64b-4171-4b77-958a-aec0a9932355|beautifulcat634|byebye|bg55ejUE|cc064ee86d38c1c0f243308db999be1e|34794ad292c6e782cc0b100eb2c7660481a28eb4|a871d44161f40cb44892d3c661dc1fb16cabb9cd7c7b6099dd5bdcbd939dc06b|1958-11-19T22:49:58.286Z|64|2014-10-17T06:18:27.203Z|8|(878) 798-3604|(561) 657-6242|SSN|896-93-4436|https://randomuser.me/api/portraits/women/83.jpg|https://randomuser.me/api/portraits/med/women/83.jpg|https://randomuser.me/api/portraits/thumb/women/83.jpg|US
`;


kolists['wzs']=`ko ok kb kw kob kow koeye koeyeb koeyew kobrd kobrdb kobrdw kob1 kow1 kop1 kop2 kop3 kop4`;

kolists['topgifs']=`
/imgs/gif/birthdays/birthday01.gif
/imgs/gif/birthdays/birthday02.gif
/imgs/gif/birthdays/birthday03.gif
/imgs/gif/birthdays/birthday05.gif
/imgs/gif/birthdays/birthday06.gif
/imgs/gif/birthdays/birthday08.gif
/imgs/gif/birthdays/birthday09.gif
/imgs/gif/birthdays/birthday10.gif
/imgs/gif/birthdays/birthday11.gif
/imgs/gif/birthdays/birthday12.gif
/imgs/gif/birthdays/birthday13.gif
/imgs/gif/birthdays/birthday15.gif
/imgs/gif/birthdays/birthday16.gif
/imgs/gif/birthdays/birthday17.gif
/imgs/gif/birthdays/birthday18.gif
/imgs/gif/birthdays/birthday19.gif
/imgs/gif/inflate/inflate.gif
/imgs/gif/inflate/inflate01.gif
/imgs/gif/inflate/inflate02.gif
/imgs/gif/inflate/easter_eggpainter.gif
/imgs/gif/inflate/easter_bunnyears.gif
/imgs/gif/inflate/easter_circlehop.gif
/imgs/gif/inflate/easter_oops.gif
/imgs/gif/inflate/easter_trail.gif
/imgs/gif/inflate/easter_trail.gif
/imgs/gif/inflate/easter_oops.gif
/imgs/gif/inflate/easter_eggspinner.gif
/imgs/gif/inflate/easter_bowtie.gif
/imgs/gif/inflate/baby_floorsurfer.gif
/imgs/gif/inflate/baby_spinning.gif
/imgs/gif/inflate/babys_ball.gif
/imgs/gif/inflate/babys_laugh.gif
/imgs/gif/inflate/coffee_bird.gif
/imgs/gif/inflate/coffee_faucet.gif
/imgs/gif/inflate/coffee_legs.gif
/imgs/gif/inflate/coffee_overflow.gif
/imgs/gif/inflate/coffee_shimer.gif
/imgs/gif/inflate/coffee_steam.gif
/imgs/gif/inflate/inflate01.gif
/imgs/gif/inflate/inflate02.gif
/imgs/gif/inflate/inflate03.gif
/imgs/gif/inflate/inflate04.gif
/imgs/gif/inflate/inflate_moustache.gif
/imgs/gif/inflate/law_notarized.gif
/imgs/gif/inflate/law_policecar.gif
/imgs/gif/inflate/law_policeride.gif
/imgs/gif/inflate/law_scales.gif
`;


kolists['leds']=`;
9|||||red||||||||||||||||||||||||||||||led_9||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0820_policecall.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0820_policecall.mp3
10|||||red||||||||||||||||||||||||||||||led_10||||/byrdbellvjk/mp4/jtfdc_byrd_20180606_1648_threats_bucket_theft.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_byrd_20180606_1648_threats_bucket_theft.mp4
11|||||red||||||||||||||||||||||||||||||led_11||||/imgs/btn/koeye_handhither.gif|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/imgs/btn/koeye_handhither.gif
12|||||red||||||||||||||||||||||||||||||led_12||||/byrdbellvjk/imgs/01.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/01.jpg
13|||||red||||||||||||||||||||||||||||||led_13||||/byrdbellvjk/imgs/100.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/100.jpg
14|||||red||||||||||||||||||||||||||||||led_14||||/byrdbellvjk/imgs/100_jtfdcr_2013_byrd_threat.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/100_jtfdcr_2013_byrd_threat.jpg
15|||||red||||||||||||||||||||||||||||||led_15||||/byrdbellvjk/imgs/100_jtfdcr_byrd_seigrist_2dogs_trespas.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/100_jtfdcr_byrd_seigrist_2dogs_trespas.jpg
16|||||red||||||||||||||||||||||||||||||led_16||||/byrdbellvjk/imgs/100_jtfdcr_byrd_seigrist_2dogs_trespass2.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/100_jtfdcr_byrd_seigrist_2dogs_trespass2.jpg
17|||||red||||||||||||||||||||||||||||||led_17||||/byrdbellvjk/imgs/100_jtfdcr_byrd_seigrist_3dogs_after_heartrequest.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/100_jtfdcr_byrd_seigrist_3dogs_after_heartrequest.jpg
18|||||red||||||||||||||||||||||||||||||led_18||||/byrdbellvjk/imgs/100_jtfdcr_byrds_theft_sawhorse.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/100_jtfdcr_byrds_theft_sawhorse.jpg
19|||||red||||||||||||||||||||||||||||||led_19||||/byrdbellvjk/imgs/100_zn_16.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/100_zn_16.jpg
20|||||red||||||||||||||||||||||||||||||led_20||||/byrdbellvjk/imgs/100_zn_21.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/100_zn_21.jpg
21|||||red||||||||||||||||||||||||||||||led_21||||/byrdbellvjk/imgs/113.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/113.jpg
22|||||red||||||||||||||||||||||||||||||led_22||||/byrdbellvjk/imgs/115.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/115.jpg
23|||||red||||||||||||||||||||||||||||||led_23||||/byrdbellvjk/imgs/116.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/116.jpg
24|||||red||||||||||||||||||||||||||||||led_24||||/byrdbellvjk/imgs/124.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/124.jpg
25|||||red||||||||||||||||||||||||||||||led_25||||/byrdbellvjk/imgs/170.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/170.jpg
26|||||red||||||||||||||||||||||||||||||led_26||||/byrdbellvjk/imgs/171.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/171.jpg
27|||||red||||||||||||||||||||||||||||||led_27||||/byrdbellvjk/imgs/202.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/202.jpg
28|||||red||||||||||||||||||||||||||||||led_28||||/byrdbellvjk/imgs/203.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/203.jpg
29|||||red||||||||||||||||||||||||||||||led_29||||/byrdbellvjk/imgs/204.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/204.jpg
30|||||red||||||||||||||||||||||||||||||led_30||||/byrdbellvjk/imgs/205.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/205.jpg
31|||||red||||||||||||||||||||||||||||||led_31||||/byrdbellvjk/imgs/206.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/206.jpg
32|||||red||||||||||||||||||||||||||||||led_32||||/byrdbellvjk/imgs/207.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/207.jpg
33|||||red||||||||||||||||||||||||||||||led_33||||/byrdbellvjk/imgs/208.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/208.jpg
34|||||red||||||||||||||||||||||||||||||led_34||||/byrdbellvjk/imgs/209.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/209.jpg
35|||||red||||||||||||||||||||||||||||||led_35||||/byrdbellvjk/imgs/210.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/210.jpg
36|||||red||||||||||||||||||||||||||||||led_36||||/byrdbellvjk/imgs/211.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/211.jpg
37|||||red||||||||||||||||||||||||||||||led_37||||/byrdbellvjk/imgs/212.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/212.jpg
38|||||red||||||||||||||||||||||||||||||led_38||||/byrdbellvjk/imgs/22.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/22.jpg
39|||||red||||||||||||||||||||||||||||||led_39||||/byrdbellvjk/imgs/222.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/222.jpg
40|||||red||||||||||||||||||||||||||||||led_40||||/byrdbellvjk/imgs/229.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/229.jpg
41|||||red||||||||||||||||||||||||||||||led_41||||/byrdbellvjk/imgs/232.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/232.jpg
42|||||red||||||||||||||||||||||||||||||led_42||||/byrdbellvjk/imgs/233.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/233.jpg
43|||||red||||||||||||||||||||||||||||||led_43||||/byrdbellvjk/imgs/26.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/26.jpg
44|||||red||||||||||||||||||||||||||||||led_44||||/byrdbellvjk/imgs/27.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/27.jpg
45|||||red||||||||||||||||||||||||||||||led_45||||/byrdbellvjk/imgs/28.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/28.jpg
46|||||red||||||||||||||||||||||||||||||led_46||||/byrdbellvjk/imgs/29.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/29.jpg
47|||||red||||||||||||||||||||||||||||||led_47||||/byrdbellvjk/imgs/30.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/30.jpg
48|||||red||||||||||||||||||||||||||||||led_48||||/byrdbellvjk/imgs/31.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/31.jpg
49|||||red||||||||||||||||||||||||||||||led_49||||/byrdbellvjk/imgs/32.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/32.jpg
50|||||red||||||||||||||||||||||||||||||led_50||||/byrdbellvjk/imgs/33.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/33.jpg
51|||||red||||||||||||||||||||||||||||||led_51||||/byrdbellvjk/imgs/34.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/34.jpg
52|||||red||||||||||||||||||||||||||||||led_52||||/byrdbellvjk/imgs/36.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/36.jpg
53|||||red||||||||||||||||||||||||||||||led_53||||/byrdbellvjk/imgs/42.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/42.jpg
54|||||red||||||||||||||||||||||||||||||led_54||||/byrdbellvjk/imgs/43.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/43.jpg
55|||||red||||||||||||||||||||||||||||||led_55||||/byrdbellvjk/imgs/44.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/44.jpg
56|||||red||||||||||||||||||||||||||||||led_56||||/byrdbellvjk/imgs/46.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/46.jpg
57|||||red||||||||||||||||||||||||||||||led_57||||/byrdbellvjk/imgs/550_head_jtfdcr_police_neiborhood.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/550_head_jtfdcr_police_neiborhood.jpg
58|||||red||||||||||||||||||||||||||||||led_58||||/byrdbellvjk/imgs/63.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/63.jpg
59|||||red||||||||||||||||||||||||||||||led_59||||/byrdbellvjk/imgs/66.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/66.jpg
60|||||red||||||||||||||||||||||||||||||led_60||||/byrdbellvjk/imgs/71.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/71.jpg
61|||||red||||||||||||||||||||||||||||||led_61||||/byrdbellvjk/imgs/900_136.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_136.jpg
62|||||red||||||||||||||||||||||||||||||led_62||||/byrdbellvjk/imgs/900_68.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_68.jpg
63|||||red||||||||||||||||||||||||||||||led_63||||/byrdbellvjk/imgs/900_byrdbell_20200916.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_byrdbell_20200916.jpg
64|||||red||||||||||||||||||||||||||||||led_64||||/byrdbellvjk/imgs/900_byrdbell_20200916_1.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_byrdbell_20200916_1.jpg
65|||||red||||||||||||||||||||||||||||||led_65||||/byrdbellvjk/imgs/900_emh_20160911_056.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_emh_20160911_056.jpg
66|||||red||||||||||||||||||||||||||||||led_66||||/byrdbellvjk/imgs/900_emh_20160911_058.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_emh_20160911_058.jpg
67|||||red||||||||||||||||||||||||||||||led_67||||/byrdbellvjk/imgs/900_emh_20160911_059.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_emh_20160911_059.jpg
68|||||red||||||||||||||||||||||||||||||led_68||||/byrdbellvjk/imgs/900_IMG_0574.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_IMG_0574.jpg
69|||||red||||||||||||||||||||||||||||||led_69||||/byrdbellvjk/imgs/900_IMG_0577.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_IMG_0577.jpg
70|||||red||||||||||||||||||||||||||||||led_70||||/byrdbellvjk/imgs/900_jtfdc_private_court_since_1979_viewin.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_jtfdc_private_court_since_1979_viewin.jpg
71|||||red||||||||||||||||||||||||||||||led_71||||/byrdbellvjk/imgs/900_jtfinc.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_jtfinc.jpg
72|||||red||||||||||||||||||||||||||||||led_72||||/byrdbellvjk/imgs/900_snap_20170123_187559_jtfdc_kids_cycle_laps.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_snap_20170123_187559_jtfdc_kids_cycle_laps.jpg
73|||||red||||||||||||||||||||||||||||||led_73||||/byrdbellvjk/imgs/900_snap_20170123_187576_jtf32_preservation_police_yellowsticker_frenzy.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_snap_20170123_187576_jtf32_preservation_police_yellowsticker_frenzy.jpg
74|||||red||||||||||||||||||||||||||||||led_74||||/byrdbellvjk/imgs/900_snap_20170123_197616_law_donovan_joann1.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_snap_20170123_197616_law_donovan_joann1.jpg
75|||||red||||||||||||||||||||||||||||||led_75||||/byrdbellvjk/imgs/900_stlcounty_kassil_bench_probaton_20170918-1818_001.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_stlcounty_kassil_bench_probaton_20170918-1818_001.jpg
76|||||red||||||||||||||||||||||||||||||led_76||||/byrdbellvjk/imgs/900_topos.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_topos.jpg
77|||||red||||||||||||||||||||||||||||||led_77||||/byrdbellvjk/imgs/900_topos_20160505_031.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_topos_20160505_031.jpg
78|||||red||||||||||||||||||||||||||||||led_78||||/byrdbellvjk/imgs/900_zn_4.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/900_zn_4.jpg
79|||||red||||||||||||||||||||||||||||||led_79||||/byrdbellvjk/imgs/jtfdc_sawhorse_2020.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdc_sawhorse_2020.jpg
80|||||red||||||||||||||||||||||||||||||led_80||||/byrdbellvjk/imgs/snap_202209156950.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156950.png
81|||||red||||||||||||||||||||||||||||||led_81||||/byrdbellvjk/imgs/snap_202209156951.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156951.png
82|||||red||||||||||||||||||||||||||||||led_82||||/byrdbellvjk/imgs/snap_202209156952.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156952.png
83|||||red||||||||||||||||||||||||||||||led_83||||/byrdbellvjk/imgs/snap_202209156953.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156953.png
84|||||red||||||||||||||||||||||||||||||led_84||||/byrdbellvjk/imgs/snap_202209156954.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156954.png
85|||||red||||||||||||||||||||||||||||||led_85||||/byrdbellvjk/imgs/snap_202209156955.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156955.png
86|||||red||||||||||||||||||||||||||||||led_86||||/byrdbellvjk/imgs/snap_202209156956.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156956.png
87|||||red||||||||||||||||||||||||||||||led_87||||/byrdbellvjk/imgs/snap_202209156957.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156957.png
88|||||red||||||||||||||||||||||||||||||led_88||||/byrdbellvjk/imgs/snap_202209156958.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156958.png
89|||||red||||||||||||||||||||||||||||||led_89||||/byrdbellvjk/imgs/snap_202209156959.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156959.png
90|||||red||||||||||||||||||||||||||||||led_90||||/byrdbellvjk/imgs/snap_202209156960.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156960.png
91|||||red||||||||||||||||||||||||||||||led_91||||/byrdbellvjk/imgs/snap_202209156961.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156961.png
92|||||red||||||||||||||||||||||||||||||led_92||||/byrdbellvjk/imgs/snap_202209156962.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156962.png
93|||||red||||||||||||||||||||||||||||||led_93||||/byrdbellvjk/imgs/snap_202209156963.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156963.png
94|||||red||||||||||||||||||||||||||||||led_94||||/byrdbellvjk/imgs/snap_202209156964.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156964.png
95|||||red||||||||||||||||||||||||||||||led_95||||/byrdbellvjk/imgs/snap_202209156965.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156965.png
96|||||red||||||||||||||||||||||||||||||led_96||||/byrdbellvjk/imgs/snap_202209156966.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156966.png
97|||||red||||||||||||||||||||||||||||||led_97||||/byrdbellvjk/imgs/snap_202209156967.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156967.png
98|||||red||||||||||||||||||||||||||||||led_98||||/byrdbellvjk/imgs/snap_202209156968.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156968.png
99|||||red||||||||||||||||||||||||||||||led_99||||/byrdbellvjk/imgs/snap_202209156969.png|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/snap_202209156969.png
100|||||red||||||||||||||||||||||||||||||led_100||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20170805_1400_police_byrddog_call.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20170805_1400_police_byrddog_call.mp3
101|||||red||||||||||||||||||||||||||||||led_101||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0820_policecall.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0820_policecall.mp3
102|||||red||||||||||||||||||||||||||||||led_102||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830.mp3
103|||||red||||||||||||||||||||||||||||||led_103||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830_016_when_they_move_the_sawhorsetweets.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830_016_when_they_move_the_sawhorsetweets.mp3
104|||||red||||||||||||||||||||||||||||||led_104||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830_026_tweets.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830_026_tweets.mp3
105|||||red||||||||||||||||||||||||||||||led_105||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830_1m23-1m33.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830_1m23-1m33.mp3
106|||||red||||||||||||||||||||||||||||||led_106||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830_22_terror_what_are_you_doing_here.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830_22_terror_what_are_you_doing_here.mp3
107|||||red||||||||||||||||||||||||||||||led_107||||/byrdbellvjk/mp3/jtfdc_20160530_1317_byrd_trustee_threat.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20160530_1317_byrd_trustee_threat.mp3
108|||||red||||||||||||||||||||||||||||||led_108||||/byrdbellvjk/mp3/jtfdc_20160530_1327_byrd_trustee_threat.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20160530_1327_byrd_trustee_threat.mp3
109|||||red||||||||||||||||||||||||||||||led_109||||/byrdbellvjk/mp3/jtfdc_20160530_1916_byrd_threat.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20160530_1916_byrd_threat.mp3
110|||||red||||||||||||||||||||||||||||||led_110||||/byrdbellvjk/mp3/jtfdc_20160610_2030_01234567890_waiting_police_byrd_baily.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20160610_2030_01234567890_waiting_police_byrd_baily.mp3
111|||||red||||||||||||||||||||||||||||||led_111||||/byrdbellvjk/mp3/jtfdc_20170805_1400_police_byrddog_call.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20170805_1400_police_byrddog_call.mp3
112|||||red||||||||||||||||||||||||||||||led_112||||/byrdbellvjk/mp3/jtfdc_20190509_1224_jkwii_police_officerbell.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20190509_1224_jkwii_police_officerbell.mp3
113|||||red||||||||||||||||||||||||||||||led_113||||/byrdbellvjk/mp3/jtfdc_20190516_0820_byrd_waiting4police.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20190516_0820_byrd_waiting4police.mp3
114|||||red||||||||||||||||||||||||||||||led_114||||/byrdbellvjk/mp3/jtfdc_20190516_0820_policecall.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20190516_0820_policecall.mp3
115|||||red||||||||||||||||||||||||||||||led_115||||/byrdbellvjk/mp3/jtfdc_20190516_0830.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20190516_0830.mp3
116|||||red||||||||||||||||||||||||||||||led_116||||/byrdbellvjk/mp3/jtfdc_20190516_0830_026_tweets.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20190516_0830_026_tweets.mp3
117|||||red||||||||||||||||||||||||||||||led_117||||/byrdbellvjk/mp3/jtfdc_20190516_0830_1m23-1m33.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20190516_0830_1m23-1m33.mp3
118|||||red||||||||||||||||||||||||||||||led_118||||/byrdbellvjk/mp3/jtfdc_20190516_0830_terror_what_are_you_doing_here.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20190516_0830_terror_what_are_you_doing_here.mp3
119|||||red||||||||||||||||||||||||||||||led_119||||/byrdbellvjk/mp3/jtfdc_20190516_0830_when_they_move_the_sawhorsetweets.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20190516_0830_when_they_move_the_sawhorsetweets.mp3
120|||||red||||||||||||||||||||||||||||||led_120||||/byrdbellvjk/mp3/jtfdc_20190528_1636_stalkaround_byrd_siegrist_dogs_marshall_yourself.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20190528_1636_stalkaround_byrd_siegrist_dogs_marshall_yourself.mp3
121|||||red||||||||||||||||||||||||||||||led_121||||/byrdbellvjk/mp3/jtfdc_20190908_0030_still_toadog.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20190908_0030_still_toadog.mp3
122|||||red||||||||||||||||||||||||||||||led_122||||/byrdbellvjk/mp3/jtfdc_20191109_1604_skpout_jkwiigo_jtf31_fiona_nice.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20191109_1604_skpout_jkwiigo_jtf31_fiona_nice.mp3
123|||||red||||||||||||||||||||||||||||||led_123||||/byrdbellvjk/mp3/jtfdc_20191209_1529_stalkaround_bus.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20191209_1529_stalkaround_bus.mp3
124|||||red||||||||||||||||||||||||||||||led_124||||/byrdbellvjk/mp3/jtfdc_20200109_0648_jhappy_bday_jk2.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20200109_0648_jhappy_bday_jk2.mp3
125|||||red||||||||||||||||||||||||||||||led_125||||/byrdbellvjk/mp3/jtfdc_20200119_1752_stalkaround_twins_suv_n_pickup.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20200119_1752_stalkaround_twins_suv_n_pickup.mp3
126|||||red||||||||||||||||||||||||||||||led_126||||/byrdbellvjk/mp3/jtfdc_20200316_1756_jtf30_vickky_only1doggy.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20200316_1756_jtf30_vickky_only1doggy.mp3
127|||||red||||||||||||||||||||||||||||||led_127||||/byrdbellvjk/mp3/jtfdc_20200322_1222_jhout2.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20200322_1222_jhout2.mp3
128|||||red||||||||||||||||||||||||||||||led_128||||/byrdbellvjk/mp3/jtfdc_20200330_1200_jkwiigo_jtf3839_byrd_dr_hilldown.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_20200330_1200_jkwiigo_jtf3839_byrd_dr_hilldown.mp3
129|||||red||||||||||||||||||||||||||||||led_129||||/byrdbellvjk/mp3/jtfdc_byrd_20180423_1320_trespass_bullies.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_byrd_20180423_1320_trespass_bullies.mp3
130|||||red||||||||||||||||||||||||||||||led_130||||/byrdbellvjk/mp3/jtfdc_byrd_20180606_1648_threats_bucket_theft.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_byrd_20180606_1648_threats_bucket_theft.mp3
131|||||red||||||||||||||||||||||||||||||led_131||||/byrdbellvjk/mp3/jtfdc_byrd_20190516_0820.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_byrd_20190516_0820.mp3
132|||||red||||||||||||||||||||||||||||||led_132||||/byrdbellvjk/mp3/jtfdc_byrd_20190516_0830.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/jtfdc_byrd_20190516_0830.mp3
133|||||red||||||||||||||||||||||||||||||led_133||||/byrdbellvjk/mp3/library_of_congress.mp3|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp3/library_of_congress.mp3
134|||||red||||||||||||||||||||||||||||||led_134||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20170805_1400_police_byrddog_call.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20170805_1400_police_byrddog_call.mp4
135|||||red||||||||||||||||||||||||||||||led_135||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830.mp4
136|||||red||||||||||||||||||||||||||||||led_136||||/byrdbellvjk/imgs/jtfdcr_police/tn_jtfdc_20190509_1224_jkwii_police_officerbell.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/tn_jtfdc_20190509_1224_jkwii_police_officerbell.mp4
137|||||red||||||||||||||||||||||||||||||led_137||||/byrdbellvjk/imgs/jtfdcr_police/tn_jtfdc_20190516_0820_byrd_waiting4police.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/tn_jtfdc_20190516_0820_byrd_waiting4police.mp4
138|||||red||||||||||||||||||||||||||||||led_138||||/byrdbellvjk/mp4/jtfdc_20160530_1317_byrd_trustee_threat.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20160530_1317_byrd_trustee_threat.mp4
139|||||red||||||||||||||||||||||||||||||led_139||||/byrdbellvjk/mp4/jtfdc_20160530_1327_byrd_trustee_threat.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20160530_1327_byrd_trustee_threat.mp4
140|||||red||||||||||||||||||||||||||||||led_140||||/byrdbellvjk/mp4/jtfdc_20160530_1916_byrd_threat.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20160530_1916_byrd_threat.mp4
141|||||red||||||||||||||||||||||||||||||led_141||||/byrdbellvjk/mp4/jtfdc_20160610_2030_01234567890_waiting_police_byrd_baily.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20160610_2030_01234567890_waiting_police_byrd_baily.mp4
142|||||red||||||||||||||||||||||||||||||led_142||||/byrdbellvjk/mp4/jtfdc_20170805_1400_police_byrddog_call.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20170805_1400_police_byrddog_call.mp4
143|||||red||||||||||||||||||||||||||||||led_143||||/byrdbellvjk/mp4/jtfdc_20190509_1224_jkwii_police_officerbell.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20190509_1224_jkwii_police_officerbell.mp4
144|||||red||||||||||||||||||||||||||||||led_144||||/byrdbellvjk/mp4/jtfdc_20190516_0820_byrd_waiting4police.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20190516_0820_byrd_waiting4police.mp4
145|||||red||||||||||||||||||||||||||||||led_145||||/byrdbellvjk/mp4/jtfdc_20190516_0830.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20190516_0830.mp4
146|||||red||||||||||||||||||||||||||||||led_146||||/byrdbellvjk/mp4/jtfdc_20190528_1636_stalkaround_byrd_siegrist_dogs_marshall_yourself.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20190528_1636_stalkaround_byrd_siegrist_dogs_marshall_yourself.mp4
147|||||red||||||||||||||||||||||||||||||led_147||||/byrdbellvjk/mp4/jtfdc_20190908_0030_still_toadog.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20190908_0030_still_toadog.mp4
148|||||red||||||||||||||||||||||||||||||led_148||||/byrdbellvjk/mp4/jtfdc_20191109_1604_skpout_jkwiigo_jtf31_fiona_nice.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20191109_1604_skpout_jkwiigo_jtf31_fiona_nice.mp4
149|||||red||||||||||||||||||||||||||||||led_149||||/byrdbellvjk/mp4/jtfdc_20191209_1529_stalkaround_bus.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20191209_1529_stalkaround_bus.mp4
150|||||red||||||||||||||||||||||||||||||led_150||||/byrdbellvjk/mp4/jtfdc_20200109_0648_jhappy_bday_jk2.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20200109_0648_jhappy_bday_jk2.mp4
151|||||red||||||||||||||||||||||||||||||led_151||||/byrdbellvjk/mp4/jtfdc_20200119_1752_stalkaround_twins_suv_n_pickup.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20200119_1752_stalkaround_twins_suv_n_pickup.mp4
152|||||red||||||||||||||||||||||||||||||led_152||||/byrdbellvjk/mp4/jtfdc_20200316_1756_jtf30_vickky_only1doggy.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20200316_1756_jtf30_vickky_only1doggy.mp4
153|||||red||||||||||||||||||||||||||||||led_153||||/byrdbellvjk/mp4/jtfdc_20200322_1222_jhout2.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20200322_1222_jhout2.mp4
154|||||red||||||||||||||||||||||||||||||led_154||||/byrdbellvjk/mp4/jtfdc_20200330_1200_jkwiigo_jtf3839_byrd_dr_hilldown.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_20200330_1200_jkwiigo_jtf3839_byrd_dr_hilldown.mp4
155|||||red||||||||||||||||||||||||||||||led_155||||/byrdbellvjk/mp4/jtfdc_byrd_20180423_1320_trespass_bullies.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_byrd_20180423_1320_trespass_bullies.mp4
156|||||red||||||||||||||||||||||||||||||led_156||||/byrdbellvjk/mp4/jtfdc_byrd_20180606_1648_threats_bucket_theft.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_byrd_20180606_1648_threats_bucket_theft.mp4
157|||||red||||||||||||||||||||||||||||||led_157||||/byrdbellvjk/mp4/jtfdc_byrd_20190516_0820.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_byrd_20190516_0820.mp4
158|||||red||||||||||||||||||||||||||||||led_158||||/byrdbellvjk/mp4/jtfdc_byrd_20190516_0830.mp4|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/mp4/jtfdc_byrd_20190516_0830.mp4
159|||||red||||||||||||||||||||||||||||||led_159||||/byrdbellvjk/byrdbellvjk.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/byrdbellvjk.pdf
160|||||red||||||||||||||||||||||||||||||led_160||||/byrdbellvjk/fb.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb.pdf
161|||||red||||||||||||||||||||||||||||||led_161||||/byrdbellvjk/imgs/jk/dr_richard_gestring_internal_medicine.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jk/dr_richard_gestring_internal_medicine.pdf
162|||||red||||||||||||||||||||||||||||||led_162||||/byrdbellvjk/imgs/jk/dr_richard_gestring_psychiatry.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jk/dr_richard_gestring_psychiatry.pdf
163|||||red||||||||||||||||||||||||||||||led_163||||/byrdbellvjk/imgs/jtfdcr/ko.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr/ko.pdf
164|||||red||||||||||||||||||||||||||||||led_164||||/byrdbellvjk/imgs/jtfdcr_20190516_protect/102_jk_restrain_donovan_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_20190516_protect/102_jk_restrain_donovan_pg1.pdf
165|||||red||||||||||||||||||||||||||||||led_165||||/byrdbellvjk/imgs/jtfdcr_20190516_protect/103_jk_restrain_donovan_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_20190516_protect/103_jk_restrain_donovan_pg2.pdf
166|||||red||||||||||||||||||||||||||||||led_166||||/byrdbellvjk/imgs/jtfdcr_20190516_protect/104_jk_restrain_donovan_pg3.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_20190516_protect/104_jk_restrain_donovan_pg3.pdf
167|||||red||||||||||||||||||||||||||||||led_167||||/byrdbellvjk/imgs/jtfdcr_20190516_protect/105_jk_restrain_donovan_pg6.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_20190516_protect/105_jk_restrain_donovan_pg6.pdf
168|||||red||||||||||||||||||||||||||||||led_168||||/byrdbellvjk/imgs/jtfdcr_20190516_protect/106_jk_restrain_donovan_pg7.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_20190516_protect/106_jk_restrain_donovan_pg7.pdf
169|||||red||||||||||||||||||||||||||||||led_169||||/byrdbellvjk/imgs/jtfdcr_20190516_protect/jkassil_case(s)_details.doc.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_20190516_protect/jkassil_case(s)_details.doc.pdf
170|||||red||||||||||||||||||||||||||||||led_170||||/byrdbellvjk/ko.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/ko.pdf
171|||||red||||||||||||||||||||||||||||||led_171||||/byrdbellvjk/pdf/102_jk_restrain_donovan_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/102_jk_restrain_donovan_pg1.pdf
172|||||red||||||||||||||||||||||||||||||led_172||||/byrdbellvjk/pdf/103_jk_restrain_donovan_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/103_jk_restrain_donovan_pg2.pdf
173|||||red||||||||||||||||||||||||||||||led_173||||/byrdbellvjk/pdf/104_jk_restrain_donovan_pg3.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/104_jk_restrain_donovan_pg3.pdf
174|||||red||||||||||||||||||||||||||||||led_174||||/byrdbellvjk/pdf/105_jk_restrain_donovan_pg6.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/105_jk_restrain_donovan_pg6.pdf
175|||||red||||||||||||||||||||||||||||||led_175||||/byrdbellvjk/pdf/106_jk_restrain_donovan_pg7.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/106_jk_restrain_donovan_pg7.pdf
176|||||red||||||||||||||||||||||||||||||led_176||||/byrdbellvjk/pdf/500_jtfdcr_cohena_2013_cases.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/500_jtfdcr_cohena_2013_cases.pdf
177|||||red||||||||||||||||||||||||||||||led_177||||/byrdbellvjk/pdf/byrdbellvjk.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk.pdf
178|||||red||||||||||||||||||||||||||||||led_178||||/byrdbellvjk/pdf/byrdbellvjk_bell.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_bell.pdf
179|||||red||||||||||||||||||||||||||||||led_179||||/byrdbellvjk/pdf/byrdbellvjk_byrd.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_byrd.pdf
180|||||red||||||||||||||||||||||||||||||led_180||||/byrdbellvjk/pdf/byrdbellvjk_donovan.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_donovan.pdf
181|||||red||||||||||||||||||||||||||||||led_181||||/byrdbellvjk/pdf/byrdbellvjk_gardner.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_gardner.pdf
182|||||red||||||||||||||||||||||||||||||led_182||||/byrdbellvjk/pdf/byrdbellvjk_jk.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_jk.pdf
183|||||red||||||||||||||||||||||||||||||led_183||||/byrdbellvjk/pdf/byrdbellvjk_jkmed.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_jkmed.pdf
184|||||red||||||||||||||||||||||||||||||led_184||||/byrdbellvjk/pdf/byrdbellvjk_jtf28.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_jtf28.pdf
185|||||red||||||||||||||||||||||||||||||led_185||||/byrdbellvjk/pdf/byrdbellvjk_jtf29.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_jtf29.pdf
186|||||red||||||||||||||||||||||||||||||led_186||||/byrdbellvjk/pdf/byrdbellvjk_jtf30.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_jtf30.pdf
187|||||red||||||||||||||||||||||||||||||led_187||||/byrdbellvjk/pdf/byrdbellvjk_jtf31.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_jtf31.pdf
188|||||red||||||||||||||||||||||||||||||led_188||||/byrdbellvjk/pdf/byrdbellvjk_jtf32.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_jtf32.pdf
189|||||red||||||||||||||||||||||||||||||led_189||||/byrdbellvjk/pdf/byrdbellvjk_jtf39.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_jtf39.pdf
190|||||red||||||||||||||||||||||||||||||led_190||||/byrdbellvjk/pdf/byrdbellvjk_jtf40.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_jtf40.pdf
191|||||red||||||||||||||||||||||||||||||led_191||||/byrdbellvjk/pdf/byrdbellvjk_jtfdc.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_jtfdc.pdf
192|||||red||||||||||||||||||||||||||||||led_192||||/byrdbellvjk/pdf/byrdbellvjk_trial1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_trial1.pdf
193|||||red||||||||||||||||||||||||||||||led_193||||/byrdbellvjk/pdf/byrdbellvjk_trial2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_trial2.pdf
194|||||red||||||||||||||||||||||||||||||led_194||||/byrdbellvjk/pdf/byrdbellvjk_trial3.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_trial3.pdf
195|||||red||||||||||||||||||||||||||||||led_195||||/byrdbellvjk/pdf/byrdbellvjk_trial4.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_trial4.pdf
196|||||red||||||||||||||||||||||||||||||led_196||||/byrdbellvjk/pdf/byrdbellvjk_trial5.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_trial5.pdf
197|||||red||||||||||||||||||||||||||||||led_197||||/byrdbellvjk/pdf/byrdbellvjk_trial6.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/byrdbellvjk_trial6.pdf
198|||||red||||||||||||||||||||||||||||||led_198||||/byrdbellvjk/pdf/coffee.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/coffee.pdf
199|||||red||||||||||||||||||||||||||||||led_199||||/byrdbellvjk/pdf/cohen_15403521_15445941_comb_151203.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/cohen_15403521_15445941_comb_151203.pdf
200|||||red||||||||||||||||||||||||||||||led_200||||/byrdbellvjk/pdf/cohen_15403521_15445941_cont_160121.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/cohen_15403521_15445941_cont_160121.pdf
201|||||red||||||||||||||||||||||||||||||led_201||||/byrdbellvjk/pdf/cohen_15403521_continued_151203.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/cohen_15403521_continued_151203.pdf
202|||||red||||||||||||||||||||||||||||||led_202||||/byrdbellvjk/pdf/cohen_affidavit_records_151030.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/cohen_affidavit_records_151030.pdf
203|||||red||||||||||||||||||||||||||||||led_203||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg1.pdf
204|||||red||||||||||||||||||||||||||||||led_204||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg2.pdf
205|||||red||||||||||||||||||||||||||||||led_205||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg3.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg3.pdf
206|||||red||||||||||||||||||||||||||||||led_206||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg4.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg4.pdf
207|||||red||||||||||||||||||||||||||||||led_207||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg5.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg5.pdf
208|||||red||||||||||||||||||||||||||||||led_208||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg6.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg6.pdf
209|||||red||||||||||||||||||||||||||||||led_209||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg7.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg7.pdf
210|||||red||||||||||||||||||||||||||||||led_210||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg8.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1530736_citincident_150526_pg8.pdf
211|||||red||||||||||||||||||||||||||||||led_211||||/byrdbellvjk/pdf/incrpt_1540352_martin_150716_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1540352_martin_150716_pg1.pdf
212|||||red||||||||||||||||||||||||||||||led_212||||/byrdbellvjk/pdf/incrpt_1540352_martin_150716_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1540352_martin_150716_pg2.pdf
213|||||red||||||||||||||||||||||||||||||led_213||||/byrdbellvjk/pdf/incrpt_1540352_martin_150716_pg3.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1540352_martin_150716_pg3.pdf
214|||||red||||||||||||||||||||||||||||||led_214||||/byrdbellvjk/pdf/incrpt_1544594_gardner_150807_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1544594_gardner_150807_pg1.pdf
215|||||red||||||||||||||||||||||||||||||led_215||||/byrdbellvjk/pdf/incrpt_1544594_gardner_150807_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1544594_gardner_150807_pg2.pdf
216|||||red||||||||||||||||||||||||||||||led_216||||/byrdbellvjk/pdf/incrpt_1552246_gardner_150919_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1552246_gardner_150919_pg1.pdf
217|||||red||||||||||||||||||||||||||||||led_217||||/byrdbellvjk/pdf/incrpt_1552246_gardner_150919_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1552246_gardner_150919_pg2.pdf
218|||||red||||||||||||||||||||||||||||||led_218||||/byrdbellvjk/pdf/incrpt_1552246_supplement1_gardner_150919_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1552246_supplement1_gardner_150919_pg1.pdf
219|||||red||||||||||||||||||||||||||||||led_219||||/byrdbellvjk/pdf/incrpt_1552326_gardner_150919_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1552326_gardner_150919_pg1.pdf
220|||||red||||||||||||||||||||||||||||||led_220||||/byrdbellvjk/pdf/incrpt_1552326_gardner_150919_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1552326_gardner_150919_pg2.pdf
221|||||red||||||||||||||||||||||||||||||led_221||||/byrdbellvjk/pdf/incrpt_1553710_martin_150928_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1553710_martin_150928_pg1.pdf
222|||||red||||||||||||||||||||||||||||||led_222||||/byrdbellvjk/pdf/incrpt_1553710_martin_150928_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1553710_martin_150928_pg2.pdf
223|||||red||||||||||||||||||||||||||||||led_223||||/byrdbellvjk/pdf/incrpt_1558386_gardner_151023_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1558386_gardner_151023_pg1.pdf
224|||||red||||||||||||||||||||||||||||||led_224||||/byrdbellvjk/pdf/incrpt_1558386_gardner_151023_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/incrpt_1558386_gardner_151023_pg2.pdf
225|||||red||||||||||||||||||||||||||||||led_225||||/byrdbellvjk/pdf/jk.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jk.pdf
226|||||red||||||||||||||||||||||||||||||led_226||||/byrdbellvjk/pdf/jtfdc.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc.pdf
227|||||red||||||||||||||||||||||||||||||led_227||||/byrdbellvjk/pdf/jtfdc_20160530_1317_byrd_trustee_threat.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_20160530_1317_byrd_trustee_threat.pdf
228|||||red||||||||||||||||||||||||||||||led_228||||/byrdbellvjk/pdf/jtfdc_20160530_1327_byrd_trustee_threat.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_20160530_1327_byrd_trustee_threat.pdf
229|||||red||||||||||||||||||||||||||||||led_229||||/byrdbellvjk/pdf/jtfdc_20160530_1916_byrd_threat.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_20160530_1916_byrd_threat.pdf
230|||||red||||||||||||||||||||||||||||||led_230||||/byrdbellvjk/pdf/jtfdc_20160610_2030_01234567890_waiting_police_byrd_baily.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_20160610_2030_01234567890_waiting_police_byrd_baily.pdf
231|||||red||||||||||||||||||||||||||||||led_231||||/byrdbellvjk/pdf/jtfdc_20170805_1400_police_byrddog_call.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_20170805_1400_police_byrddog_call.pdf
232|||||red||||||||||||||||||||||||||||||led_232||||/byrdbellvjk/pdf/jtfdc_20190509_1224_jkwii_police_officerbell.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_20190509_1224_jkwii_police_officerbell.pdf
233|||||red||||||||||||||||||||||||||||||led_233||||/byrdbellvjk/pdf/jtfdc_20190516_0820_byrd_waiting4police.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_20190516_0820_byrd_waiting4police.pdf
234|||||red||||||||||||||||||||||||||||||led_234||||/byrdbellvjk/pdf/jtfdc_20190516_0830.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_20190516_0830.pdf
235|||||red||||||||||||||||||||||||||||||led_235||||/byrdbellvjk/pdf/jtfdc_20190528_1636_stalkaround_byrd_siegrist_dogs_marshall_yourself.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_20190528_1636_stalkaround_byrd_siegrist_dogs_marshall_yourself.pdf
236|||||red||||||||||||||||||||||||||||||led_236||||/byrdbellvjk/pdf/jtfdc_20190908_0030_still_toadog.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_20190908_0030_still_toadog.pdf
237|||||red||||||||||||||||||||||||||||||led_237||||/byrdbellvjk/pdf/jtfdc_20191109_1604_skpout_jkwiigo_jtf31_fiona_nice.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_20191109_1604_skpout_jkwiigo_jtf31_fiona_nice.pdf
238|||||red||||||||||||||||||||||||||||||led_238||||/byrdbellvjk/pdf/jtfdc_20191209_1529_stalkaround_bus.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_20191209_1529_stalkaround_bus.pdf
239|||||red||||||||||||||||||||||||||||||led_239||||/byrdbellvjk/pdf/jtfdc_byrd_20180423_1320_trespass_bullies.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_byrd_20180423_1320_trespass_bullies.pdf
240|||||red||||||||||||||||||||||||||||||led_240||||/byrdbellvjk/pdf/jtfdc_byrd_20180606_1648_threats_bucket_theft.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_byrd_20180606_1648_threats_bucket_theft.pdf
241|||||red||||||||||||||||||||||||||||||led_241||||/byrdbellvjk/pdf/jtfdc_byrd_20190516_0820.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_byrd_20190516_0820.pdf
242|||||red||||||||||||||||||||||||||||||led_242||||/byrdbellvjk/pdf/jtfdc_byrd_20190516_0830.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdc_byrd_20190516_0830.pdf
243|||||red||||||||||||||||||||||||||||||led_243||||/byrdbellvjk/pdf/jtfdcr.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr.pdf
244|||||red||||||||||||||||||||||||||||||led_244||||/byrdbellvjk/pdf/jtfdcr_20150000_jk_protect_martin.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20150000_jk_protect_martin.pdf
245|||||red||||||||||||||||||||||||||||||led_245||||/byrdbellvjk/pdf/jtfdcr_20150000_jtfinc_contacts.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20150000_jtfinc_contacts.pdf
246|||||red||||||||||||||||||||||||||||||led_246||||/byrdbellvjk/pdf/jtfdcr_20150000_lawers.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20150000_lawers.pdf
247|||||red||||||||||||||||||||||||||||||led_247||||/byrdbellvjk/pdf/jtfdcr_20150000_request_legal_assistance.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20150000_request_legal_assistance.pdf
248|||||red||||||||||||||||||||||||||||||led_248||||/byrdbellvjk/pdf/jtfdcr_201500_cohena_cases.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_201500_cohena_cases.pdf
249|||||red||||||||||||||||||||||||||||||led_249||||/byrdbellvjk/pdf/jtfdcr_20150611_martin_protect_jk.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20150611_martin_protect_jk.pdf
250|||||red||||||||||||||||||||||||||||||led_250||||/byrdbellvjk/pdf/jtfdcr_20150611_martin_protect_jk1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20150611_martin_protect_jk1.pdf
251|||||red||||||||||||||||||||||||||||||led_251||||/byrdbellvjk/pdf/jtfdcr_20150821_cohena_policeletter.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20150821_cohena_policeletter.pdf
252|||||red||||||||||||||||||||||||||||||led_252||||/byrdbellvjk/pdf/jtfdcr_20150910_jk_protect_donovan.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20150910_jk_protect_donovan.pdf
253|||||red||||||||||||||||||||||||||||||led_253||||/byrdbellvjk/pdf/jtfdcr_20151012_stlc_yard_violations.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20151012_stlc_yard_violations.pdf
254|||||red||||||||||||||||||||||||||||||led_254||||/byrdbellvjk/pdf/jtfdcr_20160519_1700_sk_protect.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20160519_1700_sk_protect.pdf
255|||||red||||||||||||||||||||||||||||||led_255||||/byrdbellvjk/pdf/jtfdcr_20160826_keuhlig_common_drive.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20160826_keuhlig_common_drive.pdf
256|||||red||||||||||||||||||||||||||||||led_256||||/byrdbellvjk/pdf/jtfdcr_20170908_cohenn_trial3.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20170908_cohenn_trial3.pdf
257|||||red||||||||||||||||||||||||||||||led_257||||/byrdbellvjk/pdf/jtfdcr_20190516.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20190516.pdf
258|||||red||||||||||||||||||||||||||||||led_258||||/byrdbellvjk/pdf/jtfdcr_20190516_1700_sk_protect.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20190516_1700_sk_protect.pdf
259|||||red||||||||||||||||||||||||||||||led_259||||/byrdbellvjk/pdf/jtfdcr_20190516_big.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20190516_big.pdf
260|||||red||||||||||||||||||||||||||||||led_260||||/byrdbellvjk/pdf/jtfdcr_20190516_jkmed.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20190516_jkmed.pdf
261|||||red||||||||||||||||||||||||||||||led_261||||/byrdbellvjk/pdf/jtfdcr_20190516_luber_policereport.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20190516_luber_policereport.pdf
262|||||red||||||||||||||||||||||||||||||led_262||||/byrdbellvjk/pdf/jtfdcr_20190516_protect.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20190516_protect.pdf
263|||||red||||||||||||||||||||||||||||||led_263||||/byrdbellvjk/pdf/jtfdcr_20191204_dolley_trial5.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20191204_dolley_trial5.pdf
264|||||red||||||||||||||||||||||||||||||led_264||||/byrdbellvjk/pdf/jtfdcr_20191204_dolley_trial5_jtfinc.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20191204_dolley_trial5_jtfinc.pdf
265|||||red||||||||||||||||||||||||||||||led_265||||/byrdbellvjk/pdf/jtfdcr_20200916_jkmed_status.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20200916_jkmed_status.pdf
266|||||red||||||||||||||||||||||||||||||led_266||||/byrdbellvjk/pdf/jtfdcr_20230126_byrd_threats_n_thefts.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_20230126_byrd_threats_n_thefts.pdf
267|||||red||||||||||||||||||||||||||||||led_267||||/byrdbellvjk/pdf/jtfdcr_cohena.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_cohena.pdf
268|||||red||||||||||||||||||||||||||||||led_268||||/byrdbellvjk/pdf/jtfdcr_cohenn.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_cohenn.pdf
269|||||red||||||||||||||||||||||||||||||led_269||||/byrdbellvjk/pdf/jtfdcr_dogs.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_dogs.pdf
270|||||red||||||||||||||||||||||||||||||led_270||||/byrdbellvjk/pdf/jtfdcr_dolly.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_dolly.pdf
271|||||red||||||||||||||||||||||||||||||led_271||||/byrdbellvjk/pdf/jtfdcr_keuhlig.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_keuhlig.pdf
272|||||red||||||||||||||||||||||||||||||led_272||||/byrdbellvjk/pdf/jtfdcr_police.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/jtfdcr_police.pdf
273|||||red||||||||||||||||||||||||||||||led_273||||/byrdbellvjk/pdf/mp4.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/mp4.pdf
274|||||red||||||||||||||||||||||||||||||led_274||||/byrdbellvjk/pdf/police_call_summary_29jamestown.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/police_call_summary_29jamestown.pdf
275|||||red||||||||||||||||||||||||||||||led_275||||/byrdbellvjk/pdf/police_call_summary_jamestown_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/police_call_summary_jamestown_pg1.pdf
276|||||red||||||||||||||||||||||||||||||led_276||||/byrdbellvjk/pdf/police_call_summary_jamestown_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/police_call_summary_jamestown_pg2.pdf
277|||||red||||||||||||||||||||||||||||||led_277||||/byrdbellvjk/pdf/police_call_summary_jamestown_pg3.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/police_call_summary_jamestown_pg3.pdf
278|||||red||||||||||||||||||||||||||||||led_278||||/byrdbellvjk/pdf/summons_15445941_gardner_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/summons_15445941_gardner_pg1.pdf
279|||||red||||||||||||||||||||||||||||||led_279||||/byrdbellvjk/pdf/summons_15445941_gardner_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/summons_15445941_gardner_pg2.pdf
280|||||red||||||||||||||||||||||||||||||led_280||||/byrdbellvjk/pdf/summons_15445941_gardner_pg3.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/summons_15445941_gardner_pg3.pdf
281|||||red||||||||||||||||||||||||||||||led_281||||/byrdbellvjk/pdf/summons_15445941_gardner_pg4.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/summons_15445941_gardner_pg4.pdf
282|||||red||||||||||||||||||||||||||||||led_282||||/byrdbellvjk/pdf/who2jail.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/who2jail.pdf
283|||||red||||||||||||||||||||||||||||||led_283||||/byrdbellvjk/pdf/zn_byrdbellvjk.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pdf/zn_byrdbellvjk.pdf
284|||||red||||||||||||||||||||||||||||||led_284||||/byrdbellvjk/pj/byrdbellvjk.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/byrdbellvjk.pdf
285|||||red||||||||||||||||||||||||||||||led_285||||/byrdbellvjk/pj/gs.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/gs.pdf
286|||||red||||||||||||||||||||||||||||||led_286||||/byrdbellvjk/pj/gs_byrdbellvjk.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/gs_byrdbellvjk.pdf
287|||||red||||||||||||||||||||||||||||||led_287||||/byrdbellvjk/pj/gs_police.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/gs_police.pdf
288|||||red||||||||||||||||||||||||||||||led_288||||/byrdbellvjk/pj/zn_byrdbellvjk.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/zn_byrdbellvjk.pdf
289|||||red||||||||||||||||||||||||||||||led_289||||/byrdbellvjk/tn_byrdbellvjk.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/tn_byrdbellvjk.pdf
290|||||red||||||||||||||||||||||||||||||led_290||||/byrdbellvjk/txt/2014_taxdetails.xls.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/2014_taxdetails.xls.pdf
291|||||red||||||||||||||||||||||||||||||led_291||||/byrdbellvjk/txt/jk_restrain_donovan_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_donovan_pg1.pdf
292|||||red||||||||||||||||||||||||||||||led_292||||/byrdbellvjk/txt/jk_restrain_donovan_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_donovan_pg2.pdf
293|||||red||||||||||||||||||||||||||||||led_293||||/byrdbellvjk/txt/jk_restrain_donovan_pg3.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_donovan_pg3.pdf
294|||||red||||||||||||||||||||||||||||||led_294||||/byrdbellvjk/txt/jk_restrain_donovan_pg4.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_donovan_pg4.pdf
295|||||red||||||||||||||||||||||||||||||led_295||||/byrdbellvjk/txt/jk_restrain_donovan_pg5.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_donovan_pg5.pdf
296|||||red||||||||||||||||||||||||||||||led_296||||/byrdbellvjk/txt/jk_restrain_donovan_pg6.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_donovan_pg6.pdf
297|||||red||||||||||||||||||||||||||||||led_297||||/byrdbellvjk/txt/jk_restrain_donovan_pg7.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_donovan_pg7.pdf
298|||||red||||||||||||||||||||||||||||||led_298||||/byrdbellvjk/txt/jk_restrain_donovan_pg8.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_donovan_pg8.pdf
299|||||red||||||||||||||||||||||||||||||led_299||||/byrdbellvjk/txt/jk_restrain_gardner_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_gardner_pg1.pdf
300|||||red||||||||||||||||||||||||||||||led_300||||/byrdbellvjk/txt/jk_restrain_gardner_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_gardner_pg2.pdf
301|||||red||||||||||||||||||||||||||||||led_301||||/byrdbellvjk/txt/jk_restrain_gardner_pg3.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_gardner_pg3.pdf
302|||||red||||||||||||||||||||||||||||||led_302||||/byrdbellvjk/txt/jk_restrain_gardner_pg4.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_gardner_pg4.pdf
303|||||red||||||||||||||||||||||||||||||led_303||||/byrdbellvjk/txt/jk_restrain_gardner_pg5.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_gardner_pg5.pdf
304|||||red||||||||||||||||||||||||||||||led_304||||/byrdbellvjk/txt/jk_restrain_gardner_pg6.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_gardner_pg6.pdf
305|||||red||||||||||||||||||||||||||||||led_305||||/byrdbellvjk/txt/jk_restrain_gardner_pg7.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_gardner_pg7.pdf
306|||||red||||||||||||||||||||||||||||||led_306||||/byrdbellvjk/txt/jk_restrain_gardner_pg8.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_gardner_pg8.pdf
307|||||red||||||||||||||||||||||||||||||led_307||||/byrdbellvjk/txt/jk_restrain_martin_pg1.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_martin_pg1.pdf
308|||||red||||||||||||||||||||||||||||||led_308||||/byrdbellvjk/txt/jk_restrain_martin_pg2.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_martin_pg2.pdf
309|||||red||||||||||||||||||||||||||||||led_309||||/byrdbellvjk/txt/jk_restrain_martin_pg3.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_martin_pg3.pdf
310|||||red||||||||||||||||||||||||||||||led_310||||/byrdbellvjk/txt/jk_restrain_martin_pg4.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_martin_pg4.pdf
311|||||red||||||||||||||||||||||||||||||led_311||||/byrdbellvjk/txt/jk_restrain_martin_pg5.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_martin_pg5.pdf
312|||||red||||||||||||||||||||||||||||||led_312||||/byrdbellvjk/txt/jk_restrain_martin_pg6.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_martin_pg6.pdf
313|||||red||||||||||||||||||||||||||||||led_313||||/byrdbellvjk/txt/jk_restrain_martin_pg7.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_martin_pg7.pdf
314|||||red||||||||||||||||||||||||||||||led_314||||/byrdbellvjk/txt/jk_restrain_martin_pg8.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jk_restrain_martin_pg8.pdf
315|||||red||||||||||||||||||||||||||||||led_315||||/byrdbellvjk/zn_byrdbellvjk.pdf|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/zn_byrdbellvjk.pdf
316|||||red||||||||||||||||||||||||||||||led_316||||/byrdbellvjk/fb/byrdbellvjk/imgs_orig/byrdbellvjk.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb/byrdbellvjk/imgs_orig/byrdbellvjk.txt
317|||||red||||||||||||||||||||||||||||||led_317||||/byrdbellvjk/fb/byrdbellvjk/imgs_orig/exiftool_byrdbellvjk.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb/byrdbellvjk/imgs_orig/exiftool_byrdbellvjk.txt
318|||||red||||||||||||||||||||||||||||||led_318||||/byrdbellvjk/fb/byrdbellvjk/imgs_orig/outline.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb/byrdbellvjk/imgs_orig/outline.txt
319|||||red||||||||||||||||||||||||||||||led_319||||/byrdbellvjk/fb/byrdbellvjk/pages.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb/byrdbellvjk/pages.txt
320|||||red||||||||||||||||||||||||||||||led_320||||/byrdbellvjk/fb/notes/notes.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb/notes/notes.txt
321|||||red||||||||||||||||||||||||||||||led_321||||/byrdbellvjk/fb/who2jail/jkwii_20190516_policemen_byrdbell_takeaneighbor2jail_day.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb/who2jail/jkwii_20190516_policemen_byrdbell_takeaneighbor2jail_day.txt
322|||||red||||||||||||||||||||||||||||||led_322||||/byrdbellvjk/fb/who2jail/pages/js/b64_arrows_png.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb/who2jail/pages/js/b64_arrows_png.txt
323|||||red||||||||||||||||||||||||||||||led_323||||/byrdbellvjk/fb/who2jail/pages/js/b64_loader_gif.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb/who2jail/pages/js/b64_loader_gif.txt
324|||||red||||||||||||||||||||||||||||||led_324||||/byrdbellvjk/fb/who2jail/pages/js/b64_magazine_js.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb/who2jail/pages/js/b64_magazine_js.txt
325|||||red||||||||||||||||||||||||||||||led_325||||/byrdbellvjk/fb/who2jail/pages/js/b64_pics.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb/who2jail/pages/js/b64_pics.txt
326|||||red||||||||||||||||||||||||||||||led_326||||/byrdbellvjk/fb/who2jail/pages/js/b64_zoom-icons-editable_png.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb/who2jail/pages/js/b64_zoom-icons-editable_png.txt
327|||||red||||||||||||||||||||||||||||||led_327||||/byrdbellvjk/fb/who2jail/pages/js/b64_zoom-icons_png.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb/who2jail/pages/js/b64_zoom-icons_png.txt
328|||||red||||||||||||||||||||||||||||||led_328||||/byrdbellvjk/fb/who2jail/who2jail.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/fb/who2jail/who2jail.txt
329|||||red||||||||||||||||||||||||||||||led_329||||/byrdbellvjk/find_byrd.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/find_byrd.txt
330|||||red||||||||||||||||||||||||||||||led_330||||/byrdbellvjk/find_dogs.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/find_dogs.txt
331|||||red||||||||||||||||||||||||||||||led_331||||/byrdbellvjk/find_gif_jtf.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/find_gif_jtf.txt
332|||||red||||||||||||||||||||||||||||||led_332||||/byrdbellvjk/find_jtf.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/find_jtf.txt
333|||||red||||||||||||||||||||||||||||||led_333||||/byrdbellvjk/find_kb_byrd_mp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/find_kb_byrd_mp4.txt
334|||||red||||||||||||||||||||||||||||||led_334||||/byrdbellvjk/find_kbvid_byrd.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/find_kbvid_byrd.txt
335|||||red||||||||||||||||||||||||||||||led_335||||/byrdbellvjk/find_kbvid_tnmp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/find_kbvid_tnmp4.txt
336|||||red||||||||||||||||||||||||||||||led_336||||/byrdbellvjk/find_mp3_jtf.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/find_mp3_jtf.txt
337|||||red||||||||||||||||||||||||||||||led_337||||/byrdbellvjk/find_mp4_byrd.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/find_mp4_byrd.txt
338|||||red||||||||||||||||||||||||||||||led_338||||/byrdbellvjk/find_mp4_jtf.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/find_mp4_jtf.txt
339|||||red||||||||||||||||||||||||||||||led_339||||/byrdbellvjk/find_mp4_police.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/find_mp4_police.txt
340|||||red||||||||||||||||||||||||||||||led_340||||/byrdbellvjk/find_police.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/find_police.txt
341|||||red||||||||||||||||||||||||||||||led_341||||/byrdbellvjk/help.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/help.txt
342|||||red||||||||||||||||||||||||||||||led_342||||/byrdbellvjk/imgs/imgs.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/imgs.txt
343|||||red||||||||||||||||||||||||||||||led_343||||/byrdbellvjk/imgs/jtfdcr/tn_mp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr/tn_mp4.txt
344|||||red||||||||||||||||||||||||||||||led_344||||/byrdbellvjk/imgs/jtfdcr_police/find_ht_mp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/find_ht_mp4.txt
345|||||red||||||||||||||||||||||||||||||led_345||||/byrdbellvjk/imgs/jtfdcr_police/find_ht_pdf.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/find_ht_pdf.txt
346|||||red||||||||||||||||||||||||||||||led_346||||/byrdbellvjk/imgs/jtfdcr_police/find_ht_snap.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/find_ht_snap.txt
347|||||red||||||||||||||||||||||||||||||led_347||||/byrdbellvjk/imgs/jtfdcr_police/find_jtf.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/find_jtf.txt
348|||||red||||||||||||||||||||||||||||||led_348||||/byrdbellvjk/imgs/jtfdcr_police/find_jtf_ht.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/find_jtf_ht.txt
349|||||red||||||||||||||||||||||||||||||led_349||||/byrdbellvjk/imgs/jtfdcr_police/find_jtf_mp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/find_jtf_mp4.txt
350|||||red||||||||||||||||||||||||||||||led_350||||/byrdbellvjk/imgs/jtfdcr_police/find_jtfdc.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/find_jtfdc.txt
351|||||red||||||||||||||||||||||||||||||led_351||||/byrdbellvjk/imgs/jtfdcr_police/find_jtfmp3.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/find_jtfmp3.txt
352|||||red||||||||||||||||||||||||||||||led_352||||/byrdbellvjk/imgs/jtfdcr_police/find_jtfmp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/find_jtfmp4.txt
353|||||red||||||||||||||||||||||||||||||led_353||||/byrdbellvjk/imgs/jtfdcr_police/find_kb.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/find_kb.txt
354|||||red||||||||||||||||||||||||||||||led_354||||/byrdbellvjk/imgs/jtfdcr_police/find_snap.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/find_snap.txt
355|||||red||||||||||||||||||||||||||||||led_355||||/byrdbellvjk/imgs/jtfdcr_police/find_youb.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/find_youb.txt
356|||||red||||||||||||||||||||||||||||||led_356||||/byrdbellvjk/imgs/jtfdcr_police/jkwii_20150513_police_flee2cleveland.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jkwii_20150513_police_flee2cleveland.txt
357|||||red||||||||||||||||||||||||||||||led_357||||/byrdbellvjk/imgs/jtfdcr_police/jkwiisme.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jkwiisme.txt
358|||||red||||||||||||||||||||||||||||||led_358||||/byrdbellvjk/imgs/jtfdcr_police/jkwiiv_byrdbell.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jkwiiv_byrdbell.txt
359|||||red||||||||||||||||||||||||||||||led_359||||/byrdbellvjk/imgs/jtfdcr_police/jkwiiv_byrdbell_raw.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jkwiiv_byrdbell_raw.txt
360|||||red||||||||||||||||||||||||||||||led_360||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20170805_1400_police_byrddog_call.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20170805_1400_police_byrddog_call.txt
361|||||red||||||||||||||||||||||||||||||led_361||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0820_policecall.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0820_policecall.txt
362|||||red||||||||||||||||||||||||||||||led_362||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfdc_20190516_0830.txt
363|||||red||||||||||||||||||||||||||||||led_363||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd.txt
364|||||red||||||||||||||||||||||||||||||led_364||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_02.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_02.txt
365|||||red||||||||||||||||||||||||||||||led_365||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_03.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_03.txt
366|||||red||||||||||||||||||||||||||||||led_366||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_04.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_04.txt
367|||||red||||||||||||||||||||||||||||||led_367||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_05.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_05.txt
368|||||red||||||||||||||||||||||||||||||led_368||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_06.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_06.txt
369|||||red||||||||||||||||||||||||||||||led_369||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_07.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_07.txt
370|||||red||||||||||||||||||||||||||||||led_370||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_07_jkwii.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_07_jkwii.txt
371|||||red||||||||||||||||||||||||||||||led_371||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_08.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_08.txt
372|||||red||||||||||||||||||||||||||||||led_372||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_10.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_10.txt
373|||||red||||||||||||||||||||||||||||||led_373||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_11.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_byrd_11.txt
374|||||red||||||||||||||||||||||||||||||led_374||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_dolley_1.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_dolley_1.txt
375|||||red||||||||||||||||||||||||||||||led_375||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_dolley_2.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_dolley_2.txt
376|||||red||||||||||||||||||||||||||||||led_376||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_dolley_3.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/jtfinc_20200102_jtfinc_dolley_3.txt
377|||||red||||||||||||||||||||||||||||||led_377||||/byrdbellvjk/imgs/jtfdcr_police/pagelist.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/pagelist.txt
378|||||red||||||||||||||||||||||||||||||led_378||||/byrdbellvjk/imgs/jtfdcr_police/pagelist_byrdbell.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/pagelist_byrdbell.txt
379|||||red||||||||||||||||||||||||||||||led_379||||/byrdbellvjk/imgs/jtfdcr_police/pagelist_kb_jtfdcr_vid.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/pagelist_kb_jtfdcr_vid.txt
380|||||red||||||||||||||||||||||||||||||led_380||||/byrdbellvjk/imgs/jtfdcr_police/pagelist_mp3.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/pagelist_mp3.txt
381|||||red||||||||||||||||||||||||||||||led_381||||/byrdbellvjk/imgs/jtfdcr_police/pcalls.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/pcalls.txt
382|||||red||||||||||||||||||||||||||||||led_382||||/byrdbellvjk/imgs/jtfdcr_police/pcalls_notes.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/pcalls_notes.txt
383|||||red||||||||||||||||||||||||||||||led_383||||/byrdbellvjk/imgs/jtfdcr_police/policereport.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/policereport.txt
384|||||red||||||||||||||||||||||||||||||led_384||||/byrdbellvjk/imgs/jtfdcr_police/sel_files.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/sel_files.txt
385|||||red||||||||||||||||||||||||||||||led_385||||/byrdbellvjk/imgs/jtfdcr_police/snap_1.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/snap_1.txt
386|||||red||||||||||||||||||||||||||||||led_386||||/byrdbellvjk/imgs/jtfdcr_police/tn_mp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/tn_mp4.txt
387|||||red||||||||||||||||||||||||||||||led_387||||/byrdbellvjk/imgs/jtfdcr_police/who2jail.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/who2jail.txt
388|||||red||||||||||||||||||||||||||||||led_388||||/byrdbellvjk/imgs/jtfdcr_police/who2jail_raw.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/imgs/jtfdcr_police/who2jail_raw.txt
389|||||red||||||||||||||||||||||||||||||led_389||||/byrdbellvjk/jk.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/jk.txt
390|||||red||||||||||||||||||||||||||||||led_390||||/byrdbellvjk/jk1.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/jk1.txt
391|||||red||||||||||||||||||||||||||||||led_391||||/byrdbellvjk/ko.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/ko.txt
392|||||red||||||||||||||||||||||||||||||led_392||||/byrdbellvjk/notes.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/notes.txt
393|||||red||||||||||||||||||||||||||||||led_393||||/byrdbellvjk/pj/byrdbellvjk.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/byrdbellvjk.txt
394|||||red||||||||||||||||||||||||||||||led_394||||/byrdbellvjk/pj/dates.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/dates.txt
395|||||red||||||||||||||||||||||||||||||led_395||||/byrdbellvjk/pj/exiftool_byrdbellvjk.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/exiftool_byrdbellvjk.txt
396|||||red||||||||||||||||||||||||||||||led_396||||/byrdbellvjk/pj/find_fb.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_fb.txt
397|||||red||||||||||||||||||||||||||||||led_397||||/byrdbellvjk/pj/find_gif.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_gif.txt
398|||||red||||||||||||||||||||||||||||||led_398||||/byrdbellvjk/pj/find_jpg.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_jpg.txt
399|||||red||||||||||||||||||||||||||||||led_399||||/byrdbellvjk/pj/find_kbjtf.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_kbjtf.txt
400|||||red||||||||||||||||||||||||||||||led_400||||/byrdbellvjk/pj/find_mp3.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_mp3.txt
401|||||red||||||||||||||||||||||||||||||led_401||||/byrdbellvjk/pj/find_mp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_mp4.txt
402|||||red||||||||||||||||||||||||||||||led_402||||/byrdbellvjk/pj/find_mp4_jtf.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_mp4_jtf.txt
403|||||red||||||||||||||||||||||||||||||led_403||||/byrdbellvjk/pj/find_mp4tn.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_mp4tn.txt
404|||||red||||||||||||||||||||||||||||||led_404||||/byrdbellvjk/pj/find_mp4tn_jtf.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_mp4tn_jtf.txt
405|||||red||||||||||||||||||||||||||||||led_405||||/byrdbellvjk/pj/find_pdf.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_pdf.txt
406|||||red||||||||||||||||||||||||||||||led_406||||/byrdbellvjk/pj/find_png.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_png.txt
407|||||red||||||||||||||||||||||||||||||led_407||||/byrdbellvjk/pj/find_tl.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_tl.txt
408|||||red||||||||||||||||||||||||||||||led_408||||/byrdbellvjk/pj/find_txt.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_txt.txt
409|||||red||||||||||||||||||||||||||||||led_409||||/byrdbellvjk/pj/find_zm.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/find_zm.txt
410|||||red||||||||||||||||||||||||||||||led_410||||/byrdbellvjk/pj/finds.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/finds.txt
411|||||red||||||||||||||||||||||||||||||led_411||||/byrdbellvjk/pj/mp4tns.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/mp4tns.txt
412|||||red||||||||||||||||||||||||||||||led_412||||/byrdbellvjk/pj/notes.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/notes.txt
413|||||red||||||||||||||||||||||||||||||led_413||||/byrdbellvjk/pj/outline.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/outline.txt
414|||||red||||||||||||||||||||||||||||||led_414||||/byrdbellvjk/pj/pages.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/pj/pages.txt
415|||||red||||||||||||||||||||||||||||||led_415||||/byrdbellvjk/todo.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/todo.txt
416|||||red||||||||||||||||||||||||||||||led_416||||/byrdbellvjk/txt/ajaks_ka12_mp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajaks_ka12_mp4.txt
417|||||red||||||||||||||||||||||||||||||led_417||||/byrdbellvjk/txt/ajaks_ka1_htkb_jpg.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajaks_ka1_htkb_jpg.txt
418|||||red||||||||||||||||||||||||||||||led_418||||/byrdbellvjk/txt/ajaks_ka1_jtfdc_mp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajaks_ka1_jtfdc_mp4.txt
419|||||red||||||||||||||||||||||||||||||led_419||||/byrdbellvjk/txt/ajaks_ka1_kb_jpg.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajaks_ka1_kb_jpg.txt
420|||||red||||||||||||||||||||||||||||||led_420||||/byrdbellvjk/txt/ajaks_ko2_fb_jpg.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajaks_ko2_fb_jpg.txt
421|||||red||||||||||||||||||||||||||||||led_421||||/byrdbellvjk/txt/ajaks_ko2_jpg.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajaks_ko2_jpg.txt
422|||||red||||||||||||||||||||||||||||||led_422||||/byrdbellvjk/txt/ajaks_ko2_kb_jpg.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajaks_ko2_kb_jpg.txt
423|||||red||||||||||||||||||||||||||||||led_423||||/byrdbellvjk/txt/ajaks_ko2_mp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajaks_ko2_mp4.txt
424|||||red||||||||||||||||||||||||||||||led_424||||/byrdbellvjk/txt/ajaks_ko2_sl_jpg.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajaks_ko2_sl_jpg.txt
425|||||red||||||||||||||||||||||||||||||led_425||||/byrdbellvjk/txt/ajaks_ko2_tl_jpg.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajaks_ko2_tl_jpg.txt
426|||||red||||||||||||||||||||||||||||||led_426||||/byrdbellvjk/txt/ajaks_ko2_us_jpg.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajaks_ko2_us_jpg.txt
427|||||red||||||||||||||||||||||||||||||led_427||||/byrdbellvjk/txt/ajax.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajax.txt
428|||||red||||||||||||||||||||||||||||||led_428||||/byrdbellvjk/txt/ajax1.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajax1.txt
429|||||red||||||||||||||||||||||||||||||led_429||||/byrdbellvjk/txt/ajax2.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajax2.txt
430|||||red||||||||||||||||||||||||||||||led_430||||/byrdbellvjk/txt/ajax_info.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/ajax_info.txt
431|||||red||||||||||||||||||||||||||||||led_431||||/byrdbellvjk/txt/anim.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/anim.txt
432|||||red||||||||||||||||||||||||||||||led_432||||/byrdbellvjk/txt/anim_cute.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/anim_cute.txt
433|||||red||||||||||||||||||||||||||||||led_433||||/byrdbellvjk/txt/anim_orbs.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/anim_orbs.txt
434|||||red||||||||||||||||||||||||||||||led_434||||/byrdbellvjk/txt/anim_tek.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/anim_tek.txt
435|||||red||||||||||||||||||||||||||||||led_435||||/byrdbellvjk/txt/b64_h5gallery_jquery_js.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/b64_h5gallery_jquery_js.txt
436|||||red||||||||||||||||||||||||||||||led_436||||/byrdbellvjk/txt/b64_h5gallery_js.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/b64_h5gallery_js.txt
437|||||red||||||||||||||||||||||||||||||led_437||||/byrdbellvjk/txt/b64_ko_js.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/b64_ko_js.txt
438|||||red||||||||||||||||||||||||||||||led_438||||/byrdbellvjk/txt/b64_turnjs.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/b64_turnjs.txt
439|||||red||||||||||||||||||||||||||||||led_439||||/byrdbellvjk/txt/b64_turnminjs.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/b64_turnminjs.txt
440|||||red||||||||||||||||||||||||||||||led_440||||/byrdbellvjk/txt/b64btn.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/b64btn.txt
441|||||red||||||||||||||||||||||||||||||led_441||||/byrdbellvjk/txt/brew_link_dryrun_py.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/brew_link_dryrun_py.txt
442|||||red||||||||||||||||||||||||||||||led_442||||/byrdbellvjk/txt/bugs.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/bugs.txt
443|||||red||||||||||||||||||||||||||||||led_443||||/byrdbellvjk/txt/callodes4.rxr.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/callodes4.rxr.txt
444|||||red||||||||||||||||||||||||||||||led_444||||/byrdbellvjk/txt/codes1.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/codes1.txt
445|||||red||||||||||||||||||||||||||||||led_445||||/byrdbellvjk/txt/find_ht_mp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/find_ht_mp4.txt
446|||||red||||||||||||||||||||||||||||||led_446||||/byrdbellvjk/txt/find_ht_pdf.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/find_ht_pdf.txt
447|||||red||||||||||||||||||||||||||||||led_447||||/byrdbellvjk/txt/find_ht_snap.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/find_ht_snap.txt
448|||||red||||||||||||||||||||||||||||||led_448||||/byrdbellvjk/txt/find_jtf.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/find_jtf.txt
449|||||red||||||||||||||||||||||||||||||led_449||||/byrdbellvjk/txt/find_jtf_ht.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/find_jtf_ht.txt
450|||||red||||||||||||||||||||||||||||||led_450||||/byrdbellvjk/txt/find_jtf_mp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/find_jtf_mp4.txt
451|||||red||||||||||||||||||||||||||||||led_451||||/byrdbellvjk/txt/find_jtfdc.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/find_jtfdc.txt
452|||||red||||||||||||||||||||||||||||||led_452||||/byrdbellvjk/txt/find_jtfmp3.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/find_jtfmp3.txt
453|||||red||||||||||||||||||||||||||||||led_453||||/byrdbellvjk/txt/find_jtfmp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/find_jtfmp4.txt
454|||||red||||||||||||||||||||||||||||||led_454||||/byrdbellvjk/txt/find_kb.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/find_kb.txt
455|||||red||||||||||||||||||||||||||||||led_455||||/byrdbellvjk/txt/find_snap.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/find_snap.txt
456|||||red||||||||||||||||||||||||||||||led_456||||/byrdbellvjk/txt/find_youb.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/find_youb.txt
457|||||red||||||||||||||||||||||||||||||led_457||||/byrdbellvjk/txt/jkresume_1990_01.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkresume_1990_01.txt
458|||||red||||||||||||||||||||||||||||||led_458||||/byrdbellvjk/txt/jkresume_1990_02.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkresume_1990_02.txt
459|||||red||||||||||||||||||||||||||||||led_459||||/byrdbellvjk/txt/jkresume_1990_skillset.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkresume_1990_skillset.txt
460|||||red||||||||||||||||||||||||||||||led_460||||/byrdbellvjk/txt/jkresume_2000_01.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkresume_2000_01.txt
461|||||red||||||||||||||||||||||||||||||led_461||||/byrdbellvjk/txt/jkresume_2000_02.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkresume_2000_02.txt
462|||||red||||||||||||||||||||||||||||||led_462||||/byrdbellvjk/txt/jkresume_2000_03.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkresume_2000_03.txt
463|||||red||||||||||||||||||||||||||||||led_463||||/byrdbellvjk/txt/jkresume_2000_detail_buie.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkresume_2000_detail_buie.txt
464|||||red||||||||||||||||||||||||||||||led_464||||/byrdbellvjk/txt/jkresume_2000_detail_bw.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkresume_2000_detail_bw.txt
465|||||red||||||||||||||||||||||||||||||led_465||||/byrdbellvjk/txt/jkresume_2000_detail_konet.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkresume_2000_detail_konet.txt
466|||||red||||||||||||||||||||||||||||||led_466||||/byrdbellvjk/txt/jkresume_2000_detail_preview.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkresume_2000_detail_preview.txt
467|||||red||||||||||||||||||||||||||||||led_467||||/byrdbellvjk/txt/jkresume_2000_detail_sasc.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkresume_2000_detail_sasc.txt
468|||||red||||||||||||||||||||||||||||||led_468||||/byrdbellvjk/txt/jkwii_20150513_police_flee2cleveland.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkwii_20150513_police_flee2cleveland.txt
469|||||red||||||||||||||||||||||||||||||led_469||||/byrdbellvjk/txt/jkwiisme.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkwiisme.txt
470|||||red||||||||||||||||||||||||||||||led_470||||/byrdbellvjk/txt/jkwiiv_byrdbell.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkwiiv_byrdbell.txt
471|||||red||||||||||||||||||||||||||||||led_471||||/byrdbellvjk/txt/jkwiiv_byrdbell_raw.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jkwiiv_byrdbell_raw.txt
472|||||red||||||||||||||||||||||||||||||led_472||||/byrdbellvjk/txt/jtf_ie_200909.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtf_ie_200909.txt
473|||||red||||||||||||||||||||||||||||||led_473||||/byrdbellvjk/txt/jtf_ie_200909_ocr.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtf_ie_200909_ocr.txt
474|||||red||||||||||||||||||||||||||||||led_474||||/byrdbellvjk/txt/jtf_min.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtf_min.txt
475|||||red||||||||||||||||||||||||||||||led_475||||/byrdbellvjk/txt/jtf_min_200909.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtf_min_200909.txt
476|||||red||||||||||||||||||||||||||||||led_476||||/byrdbellvjk/txt/jtf_min_200909_ocr.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtf_min_200909_ocr.txt
477|||||red||||||||||||||||||||||||||||||led_477||||/byrdbellvjk/txt/jtf_us_20070530_ocr.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtf_us_20070530_ocr.txt
478|||||red||||||||||||||||||||||||||||||led_478||||/byrdbellvjk/txt/jtf_us_200909.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtf_us_200909.txt
479|||||red||||||||||||||||||||||||||||||led_479||||/byrdbellvjk/txt/jtf_us_200909_01_ocr.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtf_us_200909_01_ocr.txt
480|||||red||||||||||||||||||||||||||||||led_480||||/byrdbellvjk/txt/jtf_us_200909_02_ocr.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtf_us_200909_02_ocr.txt
481|||||red||||||||||||||||||||||||||||||led_481||||/byrdbellvjk/txt/jtf_videos.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtf_videos.txt
482|||||red||||||||||||||||||||||||||||||led_482||||/byrdbellvjk/txt/jtfdc_20160530_1317_byrd_trustee_threat.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20160530_1317_byrd_trustee_threat.txt
483|||||red||||||||||||||||||||||||||||||led_483||||/byrdbellvjk/txt/jtfdc_20160530_1327_byrd_trustee_threat.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20160530_1327_byrd_trustee_threat.txt
484|||||red||||||||||||||||||||||||||||||led_484||||/byrdbellvjk/txt/jtfdc_20160530_1916_byrd_threat.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20160530_1916_byrd_threat.txt
485|||||red||||||||||||||||||||||||||||||led_485||||/byrdbellvjk/txt/jtfdc_20160610_2030_01234567890_waiting_police_byrd_baily.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20160610_2030_01234567890_waiting_police_byrd_baily.txt
486|||||red||||||||||||||||||||||||||||||led_486||||/byrdbellvjk/txt/jtfdc_20170805_1400_police_byrddog_call.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20170805_1400_police_byrddog_call.txt
487|||||red||||||||||||||||||||||||||||||led_487||||/byrdbellvjk/txt/jtfdc_20190509_1224_jkwii_police_officerbell.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20190509_1224_jkwii_police_officerbell.txt
488|||||red||||||||||||||||||||||||||||||led_488||||/byrdbellvjk/txt/jtfdc_20190516_0820_byrd_waiting4police.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20190516_0820_byrd_waiting4police.txt
489|||||red||||||||||||||||||||||||||||||led_489||||/byrdbellvjk/txt/jtfdc_20190516_0820_policecall.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20190516_0820_policecall.txt
490|||||red||||||||||||||||||||||||||||||led_490||||/byrdbellvjk/txt/jtfdc_20190516_0830.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20190516_0830.txt
491|||||red||||||||||||||||||||||||||||||led_491||||/byrdbellvjk/txt/jtfdc_20190516_0830_026_tweets.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20190516_0830_026_tweets.txt
492|||||red||||||||||||||||||||||||||||||led_492||||/byrdbellvjk/txt/jtfdc_20190516_0830_1m23-1m33.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20190516_0830_1m23-1m33.txt
493|||||red||||||||||||||||||||||||||||||led_493||||/byrdbellvjk/txt/jtfdc_20190516_0830_terror_what_are_you_doing_here.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20190516_0830_terror_what_are_you_doing_here.txt
494|||||red||||||||||||||||||||||||||||||led_494||||/byrdbellvjk/txt/jtfdc_20190516_0830_when_they_move_the_sawhorsetweets.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20190516_0830_when_they_move_the_sawhorsetweets.txt
495|||||red||||||||||||||||||||||||||||||led_495||||/byrdbellvjk/txt/jtfdc_20190528_1636_stalkaround_byrd_siegrist_dogs_marshal_yourself.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20190528_1636_stalkaround_byrd_siegrist_dogs_marshal_yourself.txt
496|||||red||||||||||||||||||||||||||||||led_496||||/byrdbellvjk/txt/jtfdc_20190528_1636_stalkaround_byrd_siegrist_dogs_marshall_yourself.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20190528_1636_stalkaround_byrd_siegrist_dogs_marshall_yourself.txt
497|||||red||||||||||||||||||||||||||||||led_497||||/byrdbellvjk/txt/jtfdc_20190908_0030_still_toadog.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20190908_0030_still_toadog.txt
498|||||red||||||||||||||||||||||||||||||led_498||||/byrdbellvjk/txt/jtfdc_20191109_1604_skpout_jkwiigo_jtf31_fiona_nice.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20191109_1604_skpout_jkwiigo_jtf31_fiona_nice.txt
499|||||red||||||||||||||||||||||||||||||led_499||||/byrdbellvjk/txt/jtfdc_20191209_1529_stalkaround_bus.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20191209_1529_stalkaround_bus.txt
500|||||red||||||||||||||||||||||||||||||led_500||||/byrdbellvjk/txt/jtfdc_20200109_0648_jhappy_bday_jk2.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20200109_0648_jhappy_bday_jk2.txt
501|||||red||||||||||||||||||||||||||||||led_501||||/byrdbellvjk/txt/jtfdc_20200119_1752_stalkaround_twins_suv_n_pickup.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20200119_1752_stalkaround_twins_suv_n_pickup.txt
502|||||red||||||||||||||||||||||||||||||led_502||||/byrdbellvjk/txt/jtfdc_20200316_1756_jtf30_vickky_only1doggy.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20200316_1756_jtf30_vickky_only1doggy.txt
503|||||red||||||||||||||||||||||||||||||led_503||||/byrdbellvjk/txt/jtfdc_20200322_1222_jhout2.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20200322_1222_jhout2.txt
504|||||red||||||||||||||||||||||||||||||led_504||||/byrdbellvjk/txt/jtfdc_20200330_1200_jkwiigo_jtf3839_byrd_dr_hilldown.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_20200330_1200_jkwiigo_jtf3839_byrd_dr_hilldown.txt
505|||||red||||||||||||||||||||||||||||||led_505||||/byrdbellvjk/txt/jtfdc_byrd_20180423_1320_trespass_bullies.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_byrd_20180423_1320_trespass_bullies.txt
506|||||red||||||||||||||||||||||||||||||led_506||||/byrdbellvjk/txt/jtfdc_byrd_20180606_1648_threats_bucket_theft.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_byrd_20180606_1648_threats_bucket_theft.txt
507|||||red||||||||||||||||||||||||||||||led_507||||/byrdbellvjk/txt/jtfdc_byrd_20190516_0820.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_byrd_20190516_0820.txt
508|||||red||||||||||||||||||||||||||||||led_508||||/byrdbellvjk/txt/jtfdc_byrd_20190516_0830.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfdc_byrd_20190516_0830.txt
509|||||red||||||||||||||||||||||||||||||led_509||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd.txt
510|||||red||||||||||||||||||||||||||||||led_510||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_02.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_02.txt
511|||||red||||||||||||||||||||||||||||||led_511||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_03.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_03.txt
512|||||red||||||||||||||||||||||||||||||led_512||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_04.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_04.txt
513|||||red||||||||||||||||||||||||||||||led_513||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_05.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_05.txt
514|||||red||||||||||||||||||||||||||||||led_514||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_06.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_06.txt
515|||||red||||||||||||||||||||||||||||||led_515||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_07.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_07.txt
516|||||red||||||||||||||||||||||||||||||led_516||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_07_jkwii.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_07_jkwii.txt
517|||||red||||||||||||||||||||||||||||||led_517||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_08.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_08.txt
518|||||red||||||||||||||||||||||||||||||led_518||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_10.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_10.txt
519|||||red||||||||||||||||||||||||||||||led_519||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_11.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_byrd_11.txt
520|||||red||||||||||||||||||||||||||||||led_520||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_dolley_1.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_dolley_1.txt
521|||||red||||||||||||||||||||||||||||||led_521||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_dolley_2.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_dolley_2.txt
522|||||red||||||||||||||||||||||||||||||led_522||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_dolley_3.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/jtfinc_20200102_jtfinc_dolley_3.txt
523|||||red||||||||||||||||||||||||||||||led_523||||/byrdbellvjk/txt/library_of_congress.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/library_of_congress.txt
524|||||red||||||||||||||||||||||||||||||led_524||||/byrdbellvjk/txt/mp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/mp4.txt
525|||||red||||||||||||||||||||||||||||||led_525||||/byrdbellvjk/txt/pagelist.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/pagelist.txt
526|||||red||||||||||||||||||||||||||||||led_526||||/byrdbellvjk/txt/pagelist_byrdbell.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/pagelist_byrdbell.txt
527|||||red||||||||||||||||||||||||||||||led_527||||/byrdbellvjk/txt/pagelist_kb_jtfdcr_vid.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/pagelist_kb_jtfdcr_vid.txt
528|||||red||||||||||||||||||||||||||||||led_528||||/byrdbellvjk/txt/pagelist_mp3.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/pagelist_mp3.txt
529|||||red||||||||||||||||||||||||||||||led_529||||/byrdbellvjk/txt/pcalls.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/pcalls.txt
530|||||red||||||||||||||||||||||||||||||led_530||||/byrdbellvjk/txt/policereport.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/policereport.txt
531|||||red||||||||||||||||||||||||||||||led_531||||/byrdbellvjk/txt/report2.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/report2.txt
532|||||red||||||||||||||||||||||||||||||led_532||||/byrdbellvjk/txt/sel_files.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/sel_files.txt
533|||||red||||||||||||||||||||||||||||||led_533||||/byrdbellvjk/txt/skbyrd_protect_20190516.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/skbyrd_protect_20190516.txt
534|||||red||||||||||||||||||||||||||||||led_534||||/byrdbellvjk/txt/snap_1.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/snap_1.txt
535|||||red||||||||||||||||||||||||||||||led_535||||/byrdbellvjk/txt/text_testimon.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/text_testimon.txt
536|||||red||||||||||||||||||||||||||||||led_536||||/byrdbellvjk/txt/textsrkc_calp2,txt.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/textsrkc_calp2,txt.txt
537|||||red||||||||||||||||||||||||||||||led_537||||/byrdbellvjk/txt/textsrkc_calp3,txt.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/textsrkc_calp3,txt.txt
538|||||red||||||||||||||||||||||||||||||led_538||||/byrdbellvjk/txt/textxodes2.rxr.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/textxodes2.rxr.txt
539|||||red||||||||||||||||||||||||||||||led_539||||/byrdbellvjk/txt/tn_mp4.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/tn_mp4.txt
540|||||red||||||||||||||||||||||||||||||led_540||||/byrdbellvjk/txt/who2jail.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/who2jail.txt
541|||||red||||||||||||||||||||||||||||||led_541||||/byrdbellvjk/txt/who2jail_raw.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/txt/who2jail_raw.txt
542|||||red||||||||||||||||||||||||||||||led_542||||/byrdbellvjk/vi.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/vi.txt
543|||||red||||||||||||||||||||||||||||||led_543||||/byrdbellvjk/vi1.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/vi1.txt
544|||||red||||||||||||||||||||||||||||||led_544||||/byrdbellvjk/vi2.txt|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/byrdbellvjk/vi2.txt
545|||||red||||||||||||||||||||||||||||||led_545||||/fb/jtfdc/pages/1.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/fb/jtfdc/pages/1.jpg
546|||||red||||||||||||||||||||||||||||||led_546||||/fb/jtfdcr/pages/1.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/fb/jtfdcr/pages/1.jpg
547|||||red||||||||||||||||||||||||||||||led_547||||/fb/jtfinc/pages/1.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/fb/jtfinc/pages/1.jpg
548|||||red||||||||||||||||||||||||||||||led_548||||/fb/konet/pages/1.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/fb/konet/pages/1.jpg
549|||||red||||||||||||||||||||||||||||||led_549||||/fb/iperms/pages/1.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/fb/iperms/pages/1.jpg
550|||||red||||||||||||||||||||||||||||||led_550||||/fb/kitiworks/pages/1.jpg|||||||||||||||||/leds/imgs/hal/hals_red.gif|||||||||||||||||||||||||||/fb/kitiworks/pages/1.jpg
`;

kolists['items']=`
item.png|item_png
item1.png|item1_png
item2.png|item2_png
item3.png|item3_png
item4.png|item4_png
item5.png|item5_png
item6.png|item6_png
item7.png|item7_png
item8.png|item8_png
item9.png|item9_png
item6.png|item6_png
`;


kolists['contacts']=` `;
kolists['letters']=` `;
kolists['postturtles']=` `;
kolists['monkeytraps']=` `;
kolists['floods']=` `;
kolists['coffee']=` `;
kolists['sailboat']=` `;

		</script id=script_kolists_end>





	<style id="style_div_ledsover" >
		#div_ledsover {
			position:absolute;
			left:400px; top:600px; width:200px; height=400px;
			border:1px solid #000099;
			background:#eeeeee;
			layer-background-color:#eeeeee;
			overflow:hidden;
//			visibility:hidden;

			}
		</style id="style_div_ledsover_end" >

	<style id="style_div_sailboat" >
		#div_sailboat {
			position:absolute;
			left:600px; top:600px; width:200px; height=400px;
			border:1px solid #000099;
			background:#eeeeee;
			layer-background-color:#eeeeee;
			overflow:hidden;
//			visibility:hidden;
			}
		</style id="style_div_sailboat_end" >

	<style id="style_div_display" >
		#div_display {
			position:absolute;
			left:600px; top:600px; width:200px; height=400px;
			border:1px solid #000099;
			background:#eeeeee;
			layer-background-color:#eeeeee;
			overflow:hidden;
//			visibility:hidden;
			}
		</style id="style_div_display_end" >
<!--
	<style id="style_layer_tl" >
		#layer_tl {
			position:absolute;
			left:600px; top:1600px; width:400px; height=800px;
			border:1px solid #000099;
			background:#eeeeee;
			layer-background-color:#eeeeee;
			overflow:hidden;
//			visibility:hidden;
			}
		</style id="style_layer_tl_end" >

	<style id="style_layer_zm" >
		#layer_zm {
			position:absolute;
			left:600px; top:1600px; width:400px; height=800px;
			border:1px solid #000099;
			background:#eeeeee;
			layer-background-color:#eeeeee;
			overflow:hidden;
//			visibility:hidden;
			}
		</style id="style_layer_zm_end" >
	-->

	<script id="script_tipout" >
		function tipout() {
			htmout=""; j=0; k=0;
//			alert( "BUGS_1650 tipout" );
			}
		</script id="script_tipout_end" >

	<script id="script_random_int" >
		function random_int(max,min) {
			min = Math.ceil(min);
			max = Math.floor(max);
			return Math.floor(Math.random() * (max - min +1 )) + min;
			}
		</script id="script_random_int_end" >

	<script id="script_pathfile2url" >
		function pathfile2url(pathfile) {
			alert( "BUGS_300 pathfile2url pathfile="+pathfile );
//			file=pathfile.replace(/^.*[\\\/], '');	
//			file=pathfile.replace(/^.*(\\|\/|\:)/, '');
//			file=pathfile.substring(pathfile.lastIndexOf('/')+1;
//			file=pathfile.split('\\').pop().split('/').pop();
//			file=pathfile.split(['/','\\']).pop();
//			file=/([^\\]+)$/.exec(pathfile)[1];
//			base = (file.split('\\').pop().split('/').pop().split('.'))[0];
//			ext = (file.split('\\').pop().split('/').pop().split('.'))[1];

//			values = pathinfo(pathfile);
//			path=values.path; file=values.file; base=values.base; ext=values.ext;
//			vals = pathinfo(pathfile);
//			path=vals[0]; file=vals[1]; base=vals[2]; ext=vals[3];

//			let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
//			baz; // 40
//			foo; // 3

			{ path,file,base,ext } = pathinfo(pathfile);


			if( /mp3/.test(ext)) { ; }
			if( /mp4/.test(ext)) { ; }
			if( /pdf/.test(ext)) { ; }
			if( /jpg/.test(ext)) { ; }
			if( /gif/.test(ext)) { ; }
			if( /png/.test(ext)) { ; }

			if( ext.match(/mp3/g)) { 
				tn="/imgs/btn/koeye_mp3.png";
				id="mp3id";
				htmout+="<a href="+pathfile+" target=_blank>";
				htmout+="<img id=\""+id+"\" title=\"          "+id+"\" ";
				htmout+="src=\""+tn+"\" ";
				htmout+="onclick=\"window.open('"+pathfile+"'); return false;\" ";
				htmout+="height=20 border=0>";
				htmout+="</a>";
				return(htmout);

				}
			if( ext.match(/mp4/g)) { 
				tn="/imgs/btn/koeye_mp4.png";
				id="mp4id";
				htmout+="<a href="+pathfile+" target=_blank>";
				htmout+="<img id=\""+id+"\" title=\"          "+id+"\" ";
				htmout+="src=\""+tn+"\" ";
				htmout+="onclick=\"window.open('"+pathfile+"'); return false;\" ";
				htmout+="height=20 border=0>";
				htmout+="</a>";
				}
			if( ext.match(/pdf/g)) { 
				tn="/imgs/btn/koeye_pdf.png";
				htmout+="<a href=/pdf/web/viewer.html?file="+pathfile+" target=_blank>";
				htmout+="<img id=\""+id+"\" title=\"          "+id+"\" ";
				htmout+="src=\""+tn+"\" ";
				htmout+="onclick=\"window.open('"+pathfile+"'); return false;\" ";
				htmout+="height=20 border=0>";
				htmout+="</a>";
				return(htmout);
				}
			if(( ext.match(/jpg/g)) ||( ext.match(/gif/g)) ||( ext.match(/png/g))) { 
				tn="/imgs/gif/disks/disk_black.gif";
				id="imgid";
				htmout+="<a href="+pathfile+" target=_blank>";
				htmout+="<img id=\""+id+"\" title=\"          "+id+"\" ";
				htmout+="src=\""+tn+"\" ";
				htmout+="onclick=\"window.open('"+pathfile+"'); return false;\" ";
				htmout+="height=20 border=0>";
				htmout+="</a>";
				}

			return("");	
			}
		</script id="script_pathfile2url_end" >

	<script id="script_pathinfo" >
		function pathinfo(s) {
			s=s.match(/(.*?[\\/:])?(([^\\/:]*?)(\.[^\\/.]+?)?)(?:[?#].*)?$/);
			return {path:s[1],file:s[2],base:s[3],ext:s[4]};
			}
		</script id="script_pathinfo_end" >

	<script id="script_leds" >
		function leds(args) {
			htmout=""; j=0; k=0;
//			htmout+="<div id=div_leds\n";
			height="50"; src="/ko/disks/disk_black.gif";
//			alert( "BUGS_1770 leds args="+args );

			leds_var=kolists['leds'].split("\n");
//			alert( "BUGS_1781 leds_var="+leds_var );

			kojax('ko.php?leds&fmt=psv','pre_leds','leds');
//			alert( "BUGS_1782 leds_kojax="+leds_kojax );

			leds_kojax=kolists['leds'].split("\n");
//			alert( "BUGS_1783 leds_kojax="+leds_kojax );
			if( document.getElementById('div_kojax')) {
				leds_kojax1=document.getElementById('div_kojax').innerHTML.split("\n");
//				alert( "BUGS_1801 leds_kojax1="+leds_kojax1 );
				}
			if( document.getElementById('pre_kojax')) {
				leds_kojax2=document.getElementById('pre_kojax').innerHTML.split("\n");
//				alert( "BUGS_1802 leds_kojax2"+leds_kojax2 );
				}
			if( document.getElementById('pre_leds')) {
				leds_kojax3=document.getElementById('pre_leds').innerHTML.split("\n");
//				alert( "BUGS_1803 leds_kojax3"+leds_kojax3 );
				}


//			alert( "BUGS_1780 leds leds_kojax_len="+leds_kojax.split("\n").length+"<br>"+leds_kojax );

//			leds=leds_var;
			leds=leds_kojax;
//			alert( "BUGS_1784 len="+leds.length+" leds="+leds);


//			flds="led_id|led_status|led_code|led_name|led_dttm|led_color|led_speed|led_type|led_date|led_cmd|led_cmdout|led_desc|led_misc|led_city|led_bldg|led_loc_code|led_floor|led_group|led_orgs|led_title|led_published|led_width|led_height|led_comment|led_filename|led_user|led_user_ip|led_referer|led_remote_port|led_viewrole|led_user_agent|led_unique_id|led_err|led_fix|led_os|id|grp|status|dttm|pathfile|path|file|base|ext|size|ctime|mtime|exif_dttm|exif_dt|exif_tm|title|thumbnail|alt|link|linktarget|src|tn|startdate|enddate|headline|text|assets|media|credit|caption|i|j|k|w|h|t|x|y|z|t1|x1|y1|z1|t2|x2|y2|z2|temp|desc".split("|");
			flds=koflds['leds'].split("|");
//			alert( "BUGS_1785 flds_length="+flds.length+" "+flds );
//			alert( "BUGS_1786 leds_len="+leds.length+" leds="+leds );
			if( leds.length > 100 ) { height=25; }
			if( leds.length > 300 ) { height=20; }
			for( j=0; j<leds.length; j++ ) {
				k=0;
				led=leds[j];
//				alert( "BUGS_1787 LOOP j="+j+" led="+led );
				vals=led.split("|");
				pathfile=vals[39];
//				alert( "BUGS_1786 j="+j+" pathfile="+pathfile+" vals="+vals );
//				for( k=0; k<vals.length; k++ ) {
//					this[ flds[k] ] = vals[k];
//					}
//				alert( "BUGS_1787 LOOP j="+j+" led="+led );
//				led_id=vals[1];
//				led_name=vals[2];
//				pathfile=vals[3];
//				headline=vals[4];
//				desc=vals[5];

				led_id="led_id0"; led_name="led_name0";
//				pathfile="/ko/disks/disk_yellow.gif";
				headline="headline0";
				text="text0";

//				alert( "BUGS_2001 led_id="+led_id+" led_name="+led_name );
//				alert( "BUGS_2002 pathfile="+pathfile );
//				alert( "BUGS_2003 headline="+headline );
//				alert( "BUGS_2004 text="+text );

				imgid="img_leds"+j;
				src="/ko/disks/disk_black.gif";
				if( pathfile != "" ) { src=pathfile; }	
				desc="desc: "+imgid;
//				url=pathfile2url(pathfile);

				content[j]="";
				content[j]+="<h1>"+desc+"</h1>";
				content[j]+="<img src=\""+src+"\" width=\"600\" border=0>";

				htmout+="<img id="+imgid+" src=\""+src+"\" ";
				htmout+="onMouseover=\"changetext(content["+j+"]); return false;\" ";
				htmout+="onMouseout=\"tipout(); return false;\" ";
				htmout+="onclick=\"onclicks('"+imgid+"'); return false;\" ";
				htmout+="height="+height+" border=0>";
				}

//			htmout+="	</div id=div_leds_end\n";
			if( document.getElementById('div_ledspanel')) {
				document.getElementById('div_ledspanel').innerHTML=htmout;
				}
//			alert( "BUGS_1789 htmout="+htmout );
			return(htmout);
			}

		</script id="script_leds_end" >




	<style id=style_wz type="text/css">
<!--

		#div_tracker {
			position:absolute;
			left:100px;
			top:1000px;
			width:650px;
			height:400px;
			border:1px solid #000099;
			background:#eeeeee;
			layer-background-color:#eeeeee;
			overflow:hidden;
//			visibility:hidden;
			}
		#reltab {
			position:relative;
			border:1px solid #000099;
			background:#d3e3f9;
			layer-background-color:#d3e3f9;
			}

		#div_kludge {
			position:absolute;
			left:100px;
			top:500px;
			width:650px;
			height:480px;
			border:1px solid #000099;
			background:wheat;
			layer-background-color:linen;
			overflow:hidden;
			visibility:hidden;
			}

		#div_kludge1 {
			position:absolute;
			left:500px;
			top:800px;
			width:400px;
			height:500px;
			border:1px solid #000099;
			background:#grey;
			layer-background-color:black;
			overflow:hidden;
			visibility:hidden;
			}

		#div_kludge2 {
			position:absolute;
			left:1100px;
			top:1100px;
			width:500px;
			height:400px;
			border:1px solid #000099;
			background:grey;
			layer-background-color:white;
			overflow:hidden;
			visibility:hidden;
			}


		#greylyr {
			position:absolute;
			left:6px;
			top:380px;
			width:122px;
			border:1px solid #000099;
			background:#eeeeee;
			layer-background-color:#eeeeee;
			overflow:hidden;
			visibility:hidden;
			}

		#ingreylyr { padding:3px; }

		#bluelyr {
			position:absolute;
			visibility:hidden;
			left:0px;
			top:2000px;
			width:460px;
			padding:20px;
			border:1px solid #000099;
			background:#d3e3f9;
			layer-background-color:#d3e3f9;
			visibility:hidden;
			}
-->
		</style id=div_wz_end>


	<script id=script_wz >
<!--
		if (!document.layers) {
			document.write('<style type="text/css">#reldiv {position:relative;background-color:#ffffff;border:1px solid #000099;overflow:hidden;}'+
			'#reldiv2 {position:relative;top:5px;background-color:#ffffff;border:1px solid #000099;overflow:hidden;}<\/style>');
			}
//-->
		</script id=script_wz_end>


		<script id=script_onclicks>
			function onclicks(args) {
				alert( "BUGS_200 onclicks args="+args );	
				return(args);
			</script id=script_onclicks_end>
		

        <script id="script_geturlparameter" >
                function geturlparameter(name) {
                        return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || null;
                        }
                </script id=script_geturlparameter_end >

	<script id=script_csv2json>
		function csv2json(csv, delimiter) {
//			alert( "BUGS_50_CSV2JSON csv="+csv+" csvlen="+csv.split("\n").length );
			var lines=csv.split("\n");
			var jsn = [];
			var headers="";
			for(var j=1;j<lines.length;j++){
				if (!lines[j]) continue;
				if( headers == "" ) { headers=lines[j].split(delimiter); continue; }
				var obj = {};
				var currentline=lines[j].split(delimiter);
				for(var k=0;k<headers.length;k++) {
					obj[headers[k]] = currentline[k];
//					alert(" BUGS_101 jk="+j+","+k+" obj_headers="+obj[headers[j]]+" currentline="+currentline[j] );
					}
				jsn.push(obj);
				}

// return result; //JavaScript object
			jsntxt=JSON.stringify(jsn);
			jsn_jsntxt=JSON.parse(jsntxt);
//			alert( "BUGS_12_CSV2JSON jsn="+jsn+" jsnlen="+jsn.length )
//			alert( "BUGS_13_CSV2JSON jsntxt="+jsntxt+" jsntxtlen="+jsntxt.split("\n").length )
//			alert( "BUGS_13_CSV2JSON jsntxt="+jsntxt+" jsntxtlen="+jsntxt.split("},").length )
//			return(jsntxt); 
			return(jsn); 


////			for( i=0; i<result.length; i++ ) {
////				result[i].img="/imgs./imgs/img"+i+".png";
////				}
////			for( i=0; i < result.length; i++ ) {
////				var obj=result[i];
////				key="img";
////				val = obj[key];
////				
//				for( var key in obj ) {
//					val = obj[key];
//					}
////				}
////			var keys = Object.keys(testjson);
//			Object.entries(testjson).forEach( ([key, val]) => alert( "BUGS_102_key="+key+" val="+val ));
//			Object.keys(testjson).forEach(  function(key) {
//				j=j+1;
//				});

//			for (const [key, val] of Object.entries(testjson)) {
////			for (var key of Object.keys(testjson)) {
////				j=j+1;
////				}
////			return(testjson);
			}
		</script id=script_csv2json_end>





	<script id=script_ko_displays>
// todo add bs4
// "rownum|id|status|sort|lin|linbeg|lincnt|linend|linlim|label|headmark|tailmark|x|y|z|h|w|dx|dy|dz|dh|dw|xmin|ymin|zmin|hmin|wmin|xmax|ymax|zmax|hmax|wmax|color|fsrc|tsrc|descr|txt|b64|kludge"


		function ko_displays(args) {
//			dttm=dttm('');
			dttm="20240123_0800";
			j=0; k=0; 
			htmout=""; htmout_display=""; htmout_bugs="";
			htmout+="<h1>ko_displays args="+args+"</h1>\n";
			htmout+="<h2>"+dttm+"</h2>\n";
			htmout_display=htmout;
			htmout_bugs=htmout;

			divid_display="div_display_body";
			divid_bugs="div_bugs_body";

//			alert( "BUGS_600 ko_displays args="+args+" divid="+divid+" htmout="+htmout );
//			return;
			if( args == "clear" ) {

				htmout_bugs+="<div id=div_bugs_body align=left>\n";
				htmout_bugs+="	<h2>div_bugs_body "+dttm+</h2>\n";
				htmout_bugs+="	</div id=div_bugs_body_end>\n";
				htmout_display+="<div id=div_display_body>\n";
				htmout_display+="	<h2>div_display_body "+dttm+</h2>\n";
				htmout_display+="	</div id=div_display_body_end>\n";
				
//				alert( "BUGS_601 ko_displays CLEAR args="+args+" divid="+divid+" htmout="+htmout );
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).innerHTML=htmout_display;
					}
//				alert( "BUGS_602 ko_displays CLEAR args="+args+" divid="+divid+" htmout="+htmout );
				return(args);
				}

			htmout_cards=ko_display('cards');
			htmout_fans=ko_display('fans');
			htmout_players=ko_display('players');
			htmout_horses=ko_display('horses');
			htmout_pot=ko_display('pot');
			htmout_timeline=ko_display('timeline');

			htmout_display+=htmout_timeline;
			htmout_display+=htmout_cards;
			htmout_display+=htmout_fans;
			htmout_display+=htmout_players;
			htmout_display+=htmout_pots;

			htmout_bugs+=htmout_timeline;
			htmout_bugs+=htmout_cards;
			htmout_bugs+=htmout_fans;
			htmout_bugs+=htmout_players;
			htmout_bugs+=htmout_pots;
			htmout_bugs+=htmout_timeline;
			display(htmout_display);

//			if( document.getElementById(divid)) {
//				document.getElementById(divid).innerHTML=htmout;
//				}
			if( document.getElementById(divid_bugs)) {
				alert( "BUGS_601 ko_displays ___FOUND divid_bugs="+divid_bugs+" htmout="+htmout );
				document.getElementById(divid_bugs).insertAdjacentHTML("beforebegin",htmout_bugs);
//				document.getElementById(divid).insertAdjacentHTML("afterbegin",htmout);
//				document.getElementById(divid).insertAdjacentHTML("beforeend",htmout);
//				document.getElementById(divid).insertAdjacentHTML("afterend",htmout);
				}
			else {
				alert( "BUGS_602 ko_displays NOTFOUND divid_bugs="+divid_bugs+" htmout_bugs="+htmout_bugs );
				}

			if( document.getElementById(divid_display)) {
				alert( "BUGS_611 ko_displays ___FOUND divid_display="+divid_display+" htmout_display="+htmout_display );
				document.getElementById(divid_display).insertAdjacentHTML("beforebegin",htmout_display);
			else {
				alert( "BUGS_612 ko_displays NOTFOUND divid_display="+divid_display+" htmout_display="+htmout_display );
				}

			return(htmout);
			}
		</script id=script_ko_displays_end>


	<script id=script_ko_display>
		function ko_display(args) {
//			alert( "BUGS_640 ko_display args="+args );
//			alert( "BUGS_641 ko_display args="+args );
			j=0; k=0; htmout=""; htmout_bugs=""; htmout_display="";
			dttm="20240129_0700";
//			dttm=dttm('');
//			alert( "BUGS_642 ko_display dttm="+dttm );
			var yyyy_mm_dd = new Date().toISOString().slice(0, 10);
			var hh_mm_dd = new Date().toISOString().slice(11, 19);
			var dttm=yyyy_mm_dd+"_"+hh_mm_dd;
//			alert( "BUGS_641 ko_display dttm="+dttm );

			divid="div_bugs_body";
			divid_bugs="div_bugs_body";
			divid_display="div_display_body";

			if( args == "clear" ) {
				htmout+="<div id=div_bugs>\n";
				htmout+="	<h2>div_bugs</h2>\n";
				htmout+="	<h3>"+dttm+"</h3>\n";
				htmout+="	</div id=div_bugs_end>\n";

				htmout_bugs+="<div id=div_bugs_body>\n";
				htmout_bugs+="	<h2>div_bugs_body</h2>\n";
				htmout_bugs+="	<h3>"+dttm+"</h3>\n";
				htmout_bugs+="	</div id=div_bugs_body_end>\n";

				htmout_display+="<div id=div_bugs_body>\n";
				htmout_display+="	<h2>div_display_body</h2>\n";
				htmout_display+="	<h3>"+dttm+"</h3>\n";
				htmout_display+="	</div id=div_display_body_end>\n";

//				alert( "BUGS_661 ko_display CLEAR "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
//				if( document.getElementById(divid)) {
//					document.getElementById(divid).innerHTML=htmout;
//					}
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).innerHTML=htmout_display;
					}
				divid_race="div_ko_trackline_display";
				if( document.getElementById(divid_race)) {
					document.getElementById(divid_race).innerHTML=htmout_display;
					}
//				alert( "BUGS_662 ko_display CLEAR "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				return(args);
				}

			divid=args;
			if( document.getElementById(divid)) {
				htmout=""; htmout_bugs=""; htmout_display="";
				fmt="txt"; 
				fmt="code";
				fmt="pre";
				fmt="htm";
				if( fmt == "pre" ) { htmout+="<pre\n"; }
				if( fmt == "txt" ) { htmout+="<pre id=pre_innerhtml>\n"; }
				if( fmt == "code" ) { htmout+="<code id=code_innerhtml>\n"; }
				htmout+=document.getElementById(divid).innerHTML;
				if( fmt == "pre" ) { htmout+="	</pre>\n"; }
				if( fmt == "txt" ) { htmout+="	</pre id=pre_innerhtml_end>\n"; }
				if( fmt == "code" ) { htmout+="	</code id=code_innerhtml_end>\n"; }
				alert( "BUGS_700 ko_display htmout="+htmout );
				htmout_bugs=htmout;
				htmout_display=htmout;
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}

			
			if( args == "cards" ) {
// src
//				alert( "BUGS_671 ko_display CARDS "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
//				alert( "BUGS_672 ko_display CARDS "+dttm+" args="+args+" cards_json="+cards_json+" len="+cards_json.length );
//				alert( "BUGS_673 ko_display CARDS "+dttm+" args="+args+" cards_psv="+cards_psv+" len="+cards_psv.split("\n").length );
				htmout+="<h1>cards_json "+cards_json.length+"</h1>\n";
				htmout+="<table id=table_cards>\n";
				htmout+="<tr><td>j</td><td>num</td><td>suite</td><td>id</td><td>src</td></tr>\n";
//				num|suite|id|src
				for(j=0; j<cards_json.length; j++) {
					num=cards_json[j].num;
					suite=cards_json[j].suite;
					id=cards_json[j].id;
					src=cards_json[j].src;
					htmout+="<tr>";
					htmout+="	<td>"+j+"</td>";
					htmout+="	<td>"+num+"</td>";
					htmout+="	<td>"+suite+"</td>";
					htmout+="	<td>"+id+"</td>";
					htmout+="	<td>"+src+"</td>";
					htmout+="	</tr>\n";
					}					
				htmout+="	</table id=table_cards_end>\n";
				htmout_bugs+=htmout;
				htmout_display+=htmout;
//				alert( "BUGS_101 htmout="+htmout );
//				alert( "BUGS_102 htmout_bugs="+htmout_bugs );
//				if( document.getElementById(divid_bugs)) {
//					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
//					}
//				if( document.getElementById(divid_display)) {
//					document.getElementById(divid_display).innerHTML=htmout_display;
//					}
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}



			if( args == "fans" ) {
// num|id|status|src|name|cards|horses|amt|potamt
//				alert( "BUGS_660 ko_display FANS "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				htmout+="<h1>fans_json "+fans_json.length+"</h1>\n";
				htmout+="<table id=table_fans>\n";
				htmout+="<tr>";
				htmout+="	<td>j</td>";
				htmout+="	<td>num</td>";
				htmout+="	<td>id</td>";
				htmout+="	<td>fid</td>";
				htmout+="	<td>pid</td>";
				htmout+="	<td>status</td>";
				htmout+="	<td>src</td>";
				htmout+="	<td>name</td>";
				htmout+="	<td>cards</td>";
				htmout+="	<td>horses</td>";
				htmout+="	<td>amt</td>";
				htmout+="	<td>potamt</td>";
				htmout+="	</tr>\n";
				for(j=0; j<fans_json.length; j++) {
					num=fans_json[j].num;
					id=fans_json[j].id;
					fid=fans_json[j].fid;
					pid=fans_json[j].pid;
					status=fans_json[j].status;
					src=fans_json[j].src;
					name=fans_json[j].name;
					cards=fans_json[j].cards;
					horses=fans_json[j].horses;
					amt=fans_json[j].amt;
					potamt=fans_json[j].potamt;
					htmout+="<tr>";
					htmout+="<td>"+j+"</td>";
					htmout+="<td>"+num+"</td>"
					htmout+="<td>"+id+"</td>"
					htmout+="<td>"+fid+"</td>"
					htmout+="<td>"+pid+"</td>"
					htmout+="<td>"+status+"</td>"
					htmout+="<td>"+src+"</td>"
					htmout+="<td>"+name+"</td>"
					htmout+="<td>"+cards+"</td>"
					htmout+="<td>"+horses+"</td>"
					htmout+="<td>"+amt+"</td>"
					htmout+="<td>"+potamt+"</td>"
					htmout+="	</tr>\n";
					}					
				htmout+="	</table id=table_fans_end>\n";
				htmout_bugs+=htmout;
				htmout_display+=htmout;
//				if( document.getElementById(divid_bugs)) {
//					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
//					}
//				if( document.getElementById(divid_display)) {
//					document.getElementById(divid_display).innerHTML=htmout_display;
//					}
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}

			if( args == "players" ) {
// num|id|status|src|name|cards|horses|amt|potamt
//				alert( "BUGS_670 ko_display PLAYERS "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				htmout+="<h1>players_json "+players_json.length+"</h1>\n";
				htmout+="<table id=table_players>\n";
				htmout+="<tr>";
				htmout+="	<td>j</td>";
				htmout+="	<td>num</td>";
				htmout+="	<td>id</td>";
				htmout+="	<td>pid</td>";
				htmout+="	<td>fid</td>";
				htmout+="	<td>status</td>";
				htmout+="	<td>src</td>";
				htmout+="	<td>name</td>";
				htmout+="	<td>cards</td>";
				htmout+="	<td>horses</td>";
				htmout+="	<td>amt</td>";
				htmout+="	<td>potamt</td>";
				htmout+="	</tr>\n";
				for(j=0; j<players_json.length; j++) {
					num=players_json[j].num;
					id=players_json[j].id;
					pid=players_json[j].pid;
					fid=players_json[j].fid;
					status=players_json[j].status;
					src=players_json[j].src;
					name=players_json[j].name;
					cards=players_json[j].cards;
					horses=players_json[j].horses;
					amt=players_json[j].amt;
					potamt=players_json[j].potamt;
					htmout+="<tr>";
					htmout+="<td>"+j+"</td>";
					htmout+="<td>"+num+"</td>"
					htmout+="<td>"+id+"</td>"
					htmout+="<td>"+pid+"</td>"
					htmout+="<td>"+fid+"</td>"
					htmout+="<td>"+status+"</td>"
					htmout+="<td>"+src+"</td>"
					htmout+="<td>"+name+"</td>"
					htmout+="<td>"+cards+"</td>"
					htmout+="<td>"+horses+"</td>"
					htmout+="<td>"+amt+"</td>"
					htmout+="<td>"+potamt+"</td>"
					htmout+="	</tr>\n";
					}					
				htmout+="	</table id=table_players_end>\n";
				htmout_bugs+=htmout;
				htmout_display+=htmout;
//				if( document.getElementById(divid_bugs)) {
//					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
//					}
//				if( document.getElementById(divid_display)) {
//					document.getElementById(divid_display).innerHTML=htmout_display;
//					}
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}



			if( args == "horses" ) {
// num|cnt|max|id|hid|status|src|name|horsexy|width|distance|position
// num|cnt|max|id|src|name|horsexy
// num|cnt|max|id|hid|src|name|horsexy|width|distance|position|sid|pid|fid|status|effdt|horse|sire|trainer|jockey|race|kludge
//				alert( "BUGS_680 ko_display HORSES "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				htmout+="<h1>horses_json "+horses_json.length+"</h1>\n";
				htmout+="<table id=table_horses>\n";
				htmout+="<tr>";
				htmout+="	<td>j</td>";
				htmout+="	<td>num</td>";
				htmout+="	<td>cnt</td>";
				htmout+="	<td>max</td>";
				htmout+="	<td>id</td>";
				htmout+="	<td>hid</td>";
				htmout+="	<td>src</td>";
				htmout+="	<td>name</td>";
				htmout+="	<td>horsexy</td>";
				htmout+="	<td>width</td>";
				htmout+="	<td>distance</td>";
				htmout+="	<td>position</td>";
				htmout+="	<td>sid</td>";
				htmout+="	<td>pid</td>";
				htmout+="	<td>fid</td>";
				htmout+="	<td>status</td>";
				htmout+="	<td>effdt</td>";
				htmout+="	<td>horse</td>";
				htmout+="	<td>sire</td>";
				htmout+="	<td>trainer</td>";
				htmout+="	<td>jockey</td>";
				htmout+="	<td>race</td>";
				htmout+="	<td>kludge</td>";
				htmout+="	</tr>\n";
				for(j=0; j<horses_json.length; j++) {
					num=horses_json[j].num;
					cnt=horses_json[j].cnt;
					max=horses_json[j].max;
					id=horses_json[j].id;
					hid=horses_json[j].hid;
					src=horses_json[j].src;
					name=horses_json[j].name;
					horsexy=horses_json[j].horsexy;
					width=horses_json[j].width;
					distance=horses_json[j].distance;
					position=horses_json[j].position;
					sid=horses_json[j].sid;
					pid=horses_json[j].pid;
					fid=horses_json[j].fid;
					status=horses_json[j].status;
					effdt=horses_json[j].effdt;
					horse=horses_json[j].horse;
					sire=horses_json[j].sire;
					trainer=horses_json[j].trainer;
					jockey=horses_json[j].jockey;
					race=horses_json[j].race;
					kludge=horses_json[j].kludge;
// num|cnt|max|id|hid|src|name|horsexy|width|distance|position|sid|pid|fid|status|effdt|horse|sire|trainer|jockey|race|kludge
					htmout+="<tr>";
					htmout+="	<td>"+j+"</td>";
					htmout+="	<td>"+num+"</td>";
					htmout+="	<td>"+cnt+"</td>";
					htmout+="	<td>"+max+"</td>";
					htmout+="	<td>"+id+"</td>";
					htmout+="	<td>"+hid+"</td>";
					htmout+="	<td>"+src+"</td>";
					htmout+="	<td>"+name+"</td>";
					htmout+="	<td>"+horsexy+"</td>";
					htmout+="	<td>"+width+"</td>";
					htmout+="	<td>"+distance+"</td>";
					htmout+="	<td>"+position+"</td>";
					htmout+="	<td>"+sid+"</td>";
					htmout+="	<td>"+pid+"</td>";
					htmout+="	<td>"+fid+"</td>";
					htmout+="	<td>"+status+"</td>";
					htmout+="	<td>"+effdt+"</td>";
					htmout+="	<td>"+horse+"</td>";
					htmout+="	<td>"+sire+"</td>";
					htmout+="	<td>"+trainer+"</td>";
					htmout+="	<td>"+jockey+"</td>";
					htmout+="	<td>"+race+"</td>";
					htmout+="	<td>"+kludge+"</td>";
// num|cnt|max|id|hid|status|src|name|horsexy|width|distance|position
					htmout+="	</tr>\n";
					}					
				htmout+="	</table id=table_horses_end>\n";
				htmout_bugs+=htmout;
				htmout_display+=htmout;
//				if( document.getElementById(divid_bugs)) {
//					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
//					}
//				if( document.getElementById(divid_display)) {
//					document.getElementById(divid_display).innerHTML=htmout_display;
//					}
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}



			if( args == "stables" ) {
// id|sid|hid|pid|fid|status|effdt|horse|sire|trainer|jockey|race|url|type|horse_id|horse_name|sire_id|sire_name|trainer_id|trainer_name|jockey_id|jockey_name|race_id|race_name|kludge
//				alert( "BUGS_1000 ko_display STABLES "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				htmout+="<h1>stables_json "+stables_json.length+"</h1>\n";
				htmout+="<table id=table_pot>\n";
				htmout+="<tr>";
				htmout+="	<td>j</td>";
				htmout+="	<td>id</td>";
				htmout+="	<td>sid</td>";
				htmout+="	<td>hid</td>";
				htmout+="	<td>pid</td>";
				htmout+="	<td>fid</td>";
				htmout+="	<td>status</td>";
				htmout+="	<td>effdt</td>";
				htmout+="	<td>horse</td>";
				htmout+="	<td>sire</td>";
				htmout+="	<td>trainer</td>";
				htmout+="	<td>jockey</td>";
				htmout+="	<td>race</td>";
				htmout+="	<td>url</td>";
				htmout+="	<td>type</td>";
				htmout+="	<td>horse_id</td>";
				htmout+="	<td>horse_name</td>";
				htmout+="	<td>sire_id</td>";
				htmout+="	<td>sire_name</td>";
				htmout+="	<td>trainer_id</td>";
				htmout+="	<td>trainer_name</td>";
				htmout+="	<td>race_id</td>";
				htmout+="	<td>race_name</td>";
				htmout+="	<td>kludge</td>";
				htmout+="	</tr>\n";
//				alert( "BUGS_1020 ko_display STABLES "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				slen=stables_json.length;
//				alert( "BUGS_1021 ko_stables BLANK sid="+sid+" slen="+slen );
				for( s=0; s<slen; s++ ) {
					j=s;
//					alert( "BUGS_1031 s="+s+" slen="+slen );
					stables_sid=Math.round(s+1);
					id=stables_json[s].id;
					url=stables_json[s].url;
					type=stables_json[s].type;
					id=stables_json[s].id;
					name=stables_json[s].name;
					status=stables_json[s].status;
					sid=stables_json[s].sid;
					hid=stables_json[s].hid;
					pid=stables_json[s].pid;
					fid=stables_json[s].fid;
					status=stables_json[s].status;
					effdt=stables_json[s].effdt;
					horse=stables_json[s].horse;
					sire=stables_json[s].sire;
					trainer=stables_json[s].trainer;
					jockey=stables_json[s].jockey;
					race=stables_json[s].race;
					url=stables_json[s].url;
					type=stables_json[s].type;
					horse_id=stables_json[s].horse_id;
					horse_name=stables_json[s].horse_name;
					sire_id=stables_json[s].sire_id;
					sire_name=stables_json[s].sire_name;
					trainer_id=stables_json[s].trainer_id;
					trainer_name=stables_json[s].trainer_name;
					jockey_id=stables_json[s].jockey_id;
					jockey_name=stables_json[s].jockey_name;
					race_id=stables_json[s].race_id;
					race_name=stables_json[s].race_name;
					kludge=stables_json[s].kludge;
					htmout+="<tr>";
					htmout+="	<td>"+s+"</td>";
					htmout+="	<td>"+id+"</td>";
					htmout+="	<td>"+sid+"</td>";
					htmout+="	<td>"+hid+"</td>";
					htmout+="	<td>"+pid+"</td>";
					htmout+="	<td>"+fid+"</td>";
					htmout+="	<td>"+status+"</td>";
					htmout+="	<td>"+effdt+"</td>";
					htmout+="	<td>"+horse+"</td>";
					htmout+="	<td>"+sire+"</td>";
					htmout+="	<td>"+trainer+"</td>";
					htmout+="	<td>"+jockey+"</td>";
					htmout+="	<td>"+race+"</td>";
					htmout+="	<td>"+url+"</td>";
					htmout+="	<td>"+type+"</td>";
					htmout+="	<td>"+horse_id+"</td>";
					htmout+="	<td>"+horse_name+"</td>";
					htmout+="	<td>"+sire_id+"</td>";
					htmout+="	<td>"+sire_name+"</td>";
					htmout+="	<td>"+trainer_id+"</td>";
					htmout+="	<td>"+trainer_name+"</td>";
					htmout+="	<td>"+jockey_id+"</td>";
					htmout+="	<td>"+jockey_name+"</td>";
					htmout+="	<td>"+race_id+"</td>";
					htmout+="	<td>"+race_name+"</td>";
					htmout+="	<td>"+kludge+"</td>";
					htmout+="	</tr>\n";
//					alert( "BUGS_1080 s="+s+" slen="+slen+" htmout="+htmout );
					}					
				htmout+="	</table id=table_stables_end>\n";
				htmout_bugs+=htmout;
				htmout_display+=htmout;

//				if( document.getElementById(divid_bugs)) {
//					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
//					}
//				if( document.getElementById(divid_display)) {
//					document.getElementById(divid_display).innerHTML=htmout_display;
//					}

				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}



			if( args == "pots" ) {
// time|roll|player|amt|potamt
//				alert( "BUGS_690 ko_display POTS "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				htmout+="<h1>pots_json "+pots_json.length+"</h1>\n";
				htmout+="<table id=table_pots>\n";
				htmout+="<tr>";
				htmout+="	<td>j</td>";
				htmout+="	<td>time</td>";
				htmout+="	<td>roll</td>";
				htmout+="	<td>player</td>";
				htmout+="	<td>amt</td>";
				htmout+="	<td>potamt</td>";
				htmout+="	</tr>\n";
				for(j=0; j<pots_json.length; j++) {
					time=pots_json[j].time;
					roll=pots_json[j].roll;
					player=pots_json[j].player;
					amt=pots_json[j].amt;
					potamt=pots_json[j].potamt;
					htmout+="<tr>";
					htmout+="	<td>"+j+"</td>";
					htmout+="	<td>"+time+"</td>";
					htmout+="	<td>"+roll+"</td>";
					htmout+="	<td>"+player+"</td>";
					htmout+="	<td>"+amt+"</td>";
					htmout+="	<td>"+potamt+"</td>";
					htmout+="	</tr>\n";
					}					
				htmout+="	</table id=table_pot_end>\n";
				htmout_bugs+=htmout;
				htmout_display+=htmout;
//				if( document.getElementById(divid_bugs)) {
//					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
//					}
//				if( document.getElementById(divid_display)) {
//					document.getElementById(divid_display).innerHTML=htmout_display;
//					}
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}


//			alert( "BUGS_701 htmout="+htmout );
//			alert( "BUGS_702 htmout_bugs="+htmout_bugs );
//			alert( "BUGS_703 htmout_display="+htmout_display );
//			alert( "BUGS_699 ko_display DEFAULT "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
//			if( document.getElementById(divid)) {
//				document.getElementById(divid).innerHTML=htmout;
//				document.getElementById(divid).insertAdjacentHTML("beforebegin", htmout )
//				document.getElementById(divid).insertAdjacentHTML("afterbegin", htmout )
//				document.getElementById(divid).insertAdjacentHTML("beforeend", htmout )
//				document.getElementById(divid).insertAdjacentHTML("afterend", htmout )
//				}
//			if( document.getElementById(divid_bugs)) {
//				document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
//				}
//			if( document.getElementById(divid_display)) {
//				document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
//				}




			if(( args == "imgs" ) || ( args == "divs" )) {
// row|id|src|w|h|x|y|z|dx|dy|dz|xmin|ymin|zmin|xmax|ymax|zmax|label|kludge
//				alert( "BUGS_690 ko_display IMGS "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				if( args == "divs" ) {
					json=divs_json;
					htmout+="<table id=table_div>\n";
					htmout+="<h1>divs_json "+json.length+"</h1>\n";
					}
				else {
					json=divs_json;
					htmout+="<table id=table_imgs>\n";
					htmout+="<h1>imgs_json "+json.length+"</h1>\n";
					}
				htmout+="<tr>";
// row|id|src|w|h|x|y|z|dx|dy|dz|xmin|ymin|zmin|xmax|ymax|zmax|label|kludge
				htmout+="	<td>row</td>";
				htmout+="	<td>id</td>";
				htmout+="	<td>src</td>";
				htmout+="	<td>w</td>";
				htmout+="	<td>h</td>";
				htmout+="	<td>x</td>";
				htmout+="	<td>y</td>";
				htmout+="	<td>z</td>";
				htmout+="	<td>dx</td>";
				htmout+="	<td>dy</td>";
				htmout+="	<td>dz</td>";
				htmout+="	<td>xmin</td>";
				htmout+="	<td>ymin</td>";
				htmout+="	<td>zmin</td>";
				htmout+="	<td>xmax</td>";
				htmout+="	<td>ymax</td>";
				htmout+="	<td>zmax</td>";
				htmout+="	<td>label</td>";
				htmout+="	<td>kludge</td>";
				htmout+="	</tr>\n";
				for(j=0; j<json.length; j++) {
					row=json[j].row;
					id=json[j].id;
					src=json[j].src;
					w=json[j].w;
					h=json[j].h;
					x=json[j].x;
					y=json[j].y;
					z=json[j].z;
					dx=json[j].dx;
					dy=json[j].dy;
					dz=json[j].dz;
					xmin=json[j].xmin;
					ymin=json[j].ymin;
					zmin=json[j].zmin;
					xmax=json[j].xmax;
					ymax=json[j].ymax;
					zmax=json[j].zmax;
					label=json[j].label;
					kludge=json[j].kludge;
					htmout+="<tr>";
					htmout+="	<td>"+j+"</td>";
					htmout+="	<td>"+row+"</td>";
					htmout+="	<td>"+id+"</td>";
					htmout+="	<td>"+src+"</td>";
					htmout+="	<td>"+w+"</td>";
					htmout+="	<td>"+h+"</td>";
					htmout+="	<td>"+x+"</td>";
					htmout+="	<td>"+y+"</td>";
					htmout+="	<td>"+z+"</td>";
					htmout+="	<td>"+dx+"</td>";
					htmout+="	<td>"+dy+"</td>";
					htmout+="	<td>"+dz+"</td>";
					htmout+="	<td>"+xmin+"</td>";
					htmout+="	<td>"+ymin+"</td>";
					htmout+="	<td>"+zmin+"</td>";
					htmout+="	<td>"+xmax+"</td>";
					htmout+="	<td>"+ymax+"</td>";
					htmout+="	<td>"+zmax+"</td>";
					htmout+="	<td>"+label+"</td>";
					htmout+="	<td>"+kludge+"</td>";
					htmout+="	</tr>\n";
					}					
				if( args == "divs" ) {
					htmout+="	</table id=table_divs_end>\n";
					}
				else {
					htmout+="	</table id=table_imgs_end>\n";
					}
				htmout_bugs+=htmout;
				htmout_display+=htmout;
//				if( document.getElementById(divid_bugs)) {
//					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
//					}
//				if( document.getElementById(divid_display)) {
//					document.getElementById(divid_display).innerHTML=htmout_display;
//					}
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}


//			alert( "BUGS_701 htmout="+htmout );
//			alert( "BUGS_702 htmout_bugs="+htmout_bugs );
//			alert( "BUGS_703 htmout_display="+htmout_display );
//			alert( "BUGS_699 ko_display DEFAULT "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
//			if( document.getElementById(divid)) {
//				document.getElementById(divid).innerHTML=htmout;
//				document.getElementById(divid).insertAdjacentHTML("beforebegin", htmout )
//				document.getElementById(divid).insertAdjacentHTML("afterbegin", htmout )
//				document.getElementById(divid).insertAdjacentHTML("beforeend", htmout )
//				document.getElementById(divid).insertAdjacentHTML("afterend", htmout )
//				}
//			if( document.getElementById(divid_bugs)) {
//				document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
//				}
//			if( document.getElementById(divid_display)) {
//				document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
//				}




			if( args  == "cfgs" ) {
// id|status|dttm|fld|val|title|desc|kludge
//				alert( "BUGS_690 ko_display CFGS "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				htmout+="<h1>cfgs_json "+cfgs_json.length+"</h1>\n";
				htmout+="<table id=table_cfgs>\n";
				htmout+="<tr>";
				htmout+="	<td>j</td>";
				htmout+="	<td>id</td>";
				htmout+="	<td>status</td>";
				htmout+="	<td>dttm</td>";
				htmout+="	<td>fld</td>";
				htmout+="	<td>val</td>";
				htmout+="	<td>title</td>";
				htmout+="	<td>desc</td>";
				htmout+="	<td>kludge</td>";
				htmout+="	</tr>\n";
				for(j=0; j<cfgs_json.length; j++) {
					id=cfgs_json[j].id;
					status=cfgs_json[j].status;
					dttm=cfgs_json[j].dttm;
					fld=cfgs_json[j].fld;
					val=cfgs_json[j].val;
					title=cfgs_json[j].title;
					desc=cfgs_json[j].desc;
					kludge=cfgs_json[j].kludge;

					htmout+="<tr>";
					htmout+="	<td>"+j+"</td>";
					htmout+="	<td>"+id+"</td>";
					htmout+="	<td>"+status+"</td>";
					htmout+="	<td>"+dttm+"</td>";
					htmout+="	<td>"+fld+"</td>";
					htmout+="	<td>"+val+"</td>";
					htmout+="	<td>"+title+"</td>";
					htmout+="	<td>"+desc+"</td>";
					htmout+="	<td>"+kludge+"</td>";
					htmout+="	</tr>\n";
					}					
				htmout+="	</table id=table_cfgs_end>\n";
				htmout_bugs+=htmout;
				htmout_display+=htmout;
//				if( document.getElementById(divid_bugs)) {
//					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
//					}
//				if( document.getElementById(divid_display)) {
//					document.getElementById(divid_display).innerHTML=htmout_display;
//					}
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}


//			alert( "BUGS_701 htmout="+htmout );
//			alert( "BUGS_702 htmout_bugs="+htmout_bugs );
//			alert( "BUGS_703 htmout_display="+htmout_display );
//			alert( "BUGS_699 ko_display DEFAULT "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
//			if( document.getElementById(divid)) {
//				document.getElementById(divid).innerHTML=htmout;
//				document.getElementById(divid).insertAdjacentHTML("beforebegin", htmout )
//				document.getElementById(divid).insertAdjacentHTML("afterbegin", htmout )
//				document.getElementById(divid).insertAdjacentHTML("beforeend", htmout )
//				document.getElementById(divid).insertAdjacentHTML("afterend", htmout )
//				}
//			if( document.getElementById(divid_bugs)) {
//				document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
//				}
//			if( document.getElementById(divid_display)) {
//				document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
//				}




			if( args == "usrs" ) {
// id|userid|email|phn|status|dttm|pid|remote_addr_id|http_user_agent_id|remote_addr|remote_port|http_user_agent|session_id|session_user|session_pass|session_ip|session_cnt|request_time|query_string|desc|kludge

//				alert( "BUGS_690 ko_display USRS "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				htmout+="<h1>usrs_json "+usrs_json.length+"</h1>\n";
				htmout+="<table id=table_usrs>\n";
				htmout+="<tr>";
				htmout+="	<td>j</td>";
				htmout+="	<td>id</td>";
				htmout+="	<td>userid</td>";
				htmout+="	<td>email</td>";
				htmout+="	<td>phn</td>";
				htmout+="	<td>status</td>";
				htmout+="	<td>dttm</td>";
				htmout+="	<td>pid</td>";
				htmout+="	<td>remote_addr_id</td>";
				htmout+="	<td>http_user_agent_id</td>";
				htmout+="	<td>remote_addr</td>";
				htmout+="	<td>remote_port</td>";
				htmout+="	<td>http_user_agent</td>";
				htmout+="	<td>session_id</td>";
				htmout+="	<td>session_user</td>";
				htmout+="	<td>session_pass</td>";
				htmout+="	<td>session_ip</td>";
				htmout+="	<td>session_cnt</td>";
				htmout+="	<td>request_time</td>";
				htmout+="	<td>query_string</td>";
				htmout+="	<td>desc</td>";
				htmout+="	<td>kludge</td>";
				htmout+="	</tr>\n";
				for(j=0; j<usrs_json.length; j++) {
					id=usrs_json[j].id;
					userid=usrs_json[j].userid;
					email=usrs_json[j].email;
					phn=usrs_json[j].phn;
					status=usrs_json[j].status;
					dttm=usrs_json[j].dttm;
					pid=usrs_json[j].pid;
					remote_addr_id=usrs_json[j].remote_addr_id;
					http_user_agent_id=usrs_json[j].http_user_agent_id;
					remote_addr=usrs_json[j].remote_addr;
					remote_port=usrs_json[j].remote_port;
					http_user_agent=usrs_json[j].http_user_agent;
					session_id=usrs_json[j].session_id;
					session_user=usrs_json[j].session_user;
					session_pass=usrs_json[j].session_pass;
					session_ip=usrs_json[j].session_ip;
					session_cnt=usrs_json[j].session_cnt;
					request_time=usrs_json[j].request_time;
					query_string=usrs_json[j].query_string;
					desc=usrs_json[j].desc;
					kludge=usrs_json[j].kludge;

					htmout+="<tr>";
					htmout+="	<td>"+j+"</td>";
					htmout+="	<td>"+id+"</td>";
					htmout+="	<td>"+userid+"</td>";
					htmout+="	<td>"+email+"</td>";
					htmout+="	<td>"+phn+"</td>";
					htmout+="	<td>"+status+"</td>";
					htmout+="	<td>"+dttm+"</td>";
					htmout+="	<td>"+pid+"</td>";
					htmout+="	<td>"+remoge_addr_id+"</td>";
					htmout+="	<td>"+http_user_agent_id+"</td>";
					htmout+="	<td>"+remote_addr+"</td>";
					htmout+="	<td>"+remote_port+"</td>";
					htmout+="	<td>"+http_user_agent+"</td>";
					htmout+="	<td>"+session_id+"</td>";
					htmout+="	<td>"+session_user+"</td>";
					htmout+="	<td>"+session_pass+"</td>";
					htmout+="	<td>"+session_ip+"</td>";
					htmout+="	<td>"+session_cnt+"</td>";
					htmout+="	<td>"+request_time+"</td>";
					htmout+="	<td>"+query_string+"</td>";
					htmout+="	<td>"+desc+"</td>";
					htmout+="	<td>"+kludge3+"</td>";
					htmout+="	</tr>\n";
					}					
				htmout+="	</table id=table_usrs_end>\n";
				htmout_bugs+=htmout;
				htmout_display+=htmout;
//				if( document.getElementById(divid_bugs)) {
//					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
//					}
//				if( document.getElementById(divid_display)) {
//					document.getElementById(divid_display).innerHTML=htmout_display;
//					}
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}


//			alert( "BUGS_701 htmout="+htmout );
//			alert( "BUGS_702 htmout_bugs="+htmout_bugs );
//			alert( "BUGS_703 htmout_display="+htmout_display );
//			alert( "BUGS_699 ko_display DEFAULT "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
//			if( document.getElementById(divid)) {
//				document.getElementById(divid).innerHTML=htmout;
//				document.getElementById(divid).insertAdjacentHTML("beforebegin", htmout )
//				document.getElementById(divid).insertAdjacentHTML("afterbegin", htmout )
//				document.getElementById(divid).insertAdjacentHTML("beforeend", htmout )
//				document.getElementById(divid).insertAdjacentHTML("afterend", htmout )
//				}
//			if( document.getElementById(divid_bugs)) {
//				document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
//				}
//			if( document.getElementById(divid_display)) {
//				document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
//				}


			if( args == "bs4" ) {
// id|userid|email|phn|status|dttm|pid|remote_addr_id|http_user_agent_id|remote_addr|remote_port|http_user_agent|session_id|session_user|session_pass|session_ip|session_cnt|request_time|query_string|desc|kludge

//				alert( "BUGS_690 ko_display BS4 "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				htmout+="<h1>bs4_json "+bs4_json.length+"</h1>\n";
				htmout+="<table id=table_bs4>\n";
				htmout+="<tr>";
				htmout+="	<td>j</td>";
				htmout+="	<td>rownum</td>";
				htmout+="	<td>id</td>";
				htmout+="	<td>status</td>";
				htmout+="	<td>lin</td>";
				htmout+="	<td>linbeg</td>";
				htmout+="	<td>lincnt</td>";
				htmout+="	<td>linend</td>";
				htmout+="	<td>linlim</td>";
				htmout+="	<td>label</td>";
				htmout+="	<td>headmark</td>";
				htmout+="	<td>tailmark</td>";
				htmout+="	<td>x</td>";
				htmout+="	<td>y</td>";
				htmout+="	<td>z</td>";
				htmout+="	<td>h</td>";
				htmout+="	<td>w</td>";
				htmout+="	<td>dx</td>";
				htmout+="	<td>dy</td>";
				htmout+="	<td>dz</td>";
				htmout+="	<td>dh</td>";
				htmout+="	<td>dw</td>";
				htmout+="	<td>xmin</td>";
				htmout+="	<td>ymin</td>";
				htmout+="	<td>zmin</td>";
				htmout+="	<td>hmin</td>";
				htmout+="	<td>wmin</td>";
				htmout+="	<td>xmax/td>";
				htmout+="	<td>ymax</td>";
				htmout+="	<td>zmax</td>";
				htmout+="	<td>hmax</td>";
				htmout+="	<td>wmax</td>";
				htmout+="	<td>color</td>";
				htmout+="	<td>fsrc</td>";
				htmout+="	<td>tsrc</td>";
				htmout+="	<td>descr</td>";
				htmout+="	<td>txt</td>";
				htmout+="	<td>b64</td>";
				htmout+="	<td>kludge</td>";
				htmout+="	</tr>\n";
				for(j=0; j<bs4_json.length; j++) {
					rownum=bs4_json[j].rownum;
					id=bs4_json[j].id;
					status=bs4_json[j].status;
					sort=bs4_json[j].sort;
					lin=bs4_json[j].lin;
					linbeg=bs4_json[j].linbeg;
					lincnt=bs4_json[j].lincnt;
					linend=bs4_json[j].linend;
					linlim=bs4_json[j].linlim;
					label=bs4_json[j].label;
					headmark=bs4_json[j].headmark;
					tailmark=bs4_json[j].tailmark;
					x=bs4_json[j].x;
					y=bs4_json[j].y;
					z=bs4_json[j].z;
					h=bs4_json[j].h;
					w=bs4_json[j].w;
					dx=bs4_json[j].dx;
					dy=bs4_json[j].dy;
					dz=bs4_json[j].dz;
					dh=bs4_json[j].dh;
					dw=bs4_json[j].dw;
					xmin=bs4_json[j].xmin;
					ymin=bs4_json[j].ymin;
					zmin=bs4_json[j].zmin;
					hmin=bs4_json[j].hmin;
					wmin=bs4_json[j].wmin;
					xmax=bs4_json[j].xmax;
					ymax=bs4_json[j].ymax;
					zmax=bs4_json[j].zmax;
					hmax=bs4_json[j].hmax;
					wmax=bs4_json[j].wmax;
					color=bs4_json[j].color;
					fsrc=bs4_json[j].fsrc;
					tsrc=bs4_json[j].tsrc;
					descr=bs4_json[j].descr;
					txt=bs4_json[j].txt;
					b64=bs4_json[j].b64;
					kludge=bs4_json[j].kludge;

					htmout+="<tr>";
					htmout+="	<td>"+j+"</td>";
					htmout+="	<td>"+rownum+"</td>";
					htmout+="	<td>"+id+"</td>";
					htmout+="	<td>"+status+"</td>";
					htmout+="	<td>"+sort+"</td>";
					htmout+="	<td>"+lin+"</td>";
					htmout+="	<td>"+linbeg+"</td>";
					htmout+="	<td>"+lincnt+"</td>";
					htmout+="	<td>"+linend+"</td>";
					htmout+="	<td>"+linlim+"</td>";
					htmout+="	<td>"+label+"</td>";
					htmout+="	<td>"+headmark+"</td>";
					htmout+="	<td>"+tailmark+"</td>";
					htmout+="	<td>"+x+"</td>";
					htmout+="	<td>"+y+"</td>";
					htmout+="	<td>"+z+"</td>";
					htmout+="	<td>"+h+"</td>";
					htmout+="	<td>"+w+"</td>";
					htmout+="	<td>"+dx+"</td>";
					htmout+="	<td>"+dy+"</td>";
					htmout+="	<td>"+dz+"</td>";
					htmout+="	<td>"+dh+"</td>";
					htmout+="	<td>"+dw+"</td>";
					htmout+="	<td>"+xmin+"</td>";
					htmout+="	<td>"+ymin+"</td>";
					htmout+="	<td>"+zmin+"</td>";
					htmout+="	<td>"+hmin+"</td>";
					htmout+="	<td>"+wmin+"</td>";
					htmout+="	<td>"+xmax+"</td>";
					htmout+="	<td>"+ymax+"</td>";
					htmout+="	<td>"+zmax+"</td>";
					htmout+="	<td>"+hmax+"</td>";
					htmout+="	<td>"+wmax+"</td>";
					htmout+="	<td>"+color+"</td>";
					htmout+="	<td>"+fsrc+"</td>";
					htmout+="	<td>"+tsrc+"</td>";
					htmout+="	<td>"+desc+"</td>";
					htmout+="	<td>"+txt+"</td>";
					htmout+="	<td>"+b64+"</td>";
					htmout+="	<td>"+kludge3+"</td>";
					htmout+="	</tr>\n";
					}					
				htmout+="	</table id=table_bs4_end>\n";
				htmout_bugs+=htmout;
				htmout_display+=htmout;
//				if( document.getElementById(divid_bugs)) {
//					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
//					}
//				if( document.getElementById(divid_display)) {
//					document.getElementById(divid_display).innerHTML=htmout_display;
//					}
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}


//				document.getElementById(divid).insertAdjacentHTML("beforebegin", htmout )
//				document.getElementById(divid).insertAdjacentHTML("afterbegin", htmout )
//				document.getElementById(divid).insertAdjacentHTML("beforeend", htmout )
//				document.getElementById(divid).insertAdjacentHTML("afterend", htmout )
//				document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )





			if( args == "k9" ) {
// time|roll|player|amt|potamt
// session_id|session_user|session_pass|session_ip

//				alert( "BUGS_690 ko_display K9 "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				htmout+="<h1>k9_json "+k9_json.length+"</h1>\n";
				htmout+="<table id=table_k0>\n";
				htmout+="<tr>";
				htmout+="	<td>j</td>";
				htmout+="	<td>session_id</td>";
				htmout+="	<td>session_user</td>";
				htmout+="	<td>session_pass</td>";
				htmout+="	<td>session_ip</td>";
				htmout+="	</tr>\n";
				for(j=0; j<k9_json.length; j++) {
					session_id=k9_json[j].session_id;
					session_user=k9_json[j].session_user;
					session_pass=k9_json[j].session_pass;
					session_ip=k9_json[j].session_ip;
					htmout+="<tr>";
					htmout+="	<td>"+j+"</td>";
					htmout+="	<td>"+session_id+"</td>";
					htmout+="	<td>"+session_user+"</td>";
					htmout+="	<td>"+session_pass+"</td>";
					htmout+="	<td>"+session_ip+"</td>";
					htmout+="	</tr>\n";
					}					
				htmout+="	</table id=table_k9_end>\n";
				htmout_bugs+=htmout;
				htmout_display+=htmout;
//				if( document.getElementById(divid_bugs)) {
//					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
//					}
//				if( document.getElementById(divid_display)) {
//					document.getElementById(divid_display).innerHTML=htmout_display;
//					}
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}

			if( args == "chats" ) {
// time|roll|player|amt|potamt
// session_id|session_user|session_pass|session_ip

// dttm|effdt|status|pid|pip|fpid|fpip|tpid|tpip|msg|email|phn|name|descr|kludge

//				alert( "BUGS_1830 ko_display K9 "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				htmout+="<h1>k9_json "+k9_json.length+"</h1>\n";
				htmout+="<table id=table_k0>\n";
				htmout+="<tr>";
				htmout+="	<td>j</td>";
				htmout+="	<td>dttm</td>";
				htmout+="	<td>status</td>";
				htmout+="	<td>effdt</td>";
				htmout+="	<td>pid</td>";
				htmout+="	<td>pip</td>";
				htmout+="	<td>fpid</td>";
				htmout+="	<td>fpip</td>";
				htmout+="	<td>tpid</td>";
				htmout+="	<td>tpip</td>";
				htmout+="	<td>msg</td>";
				htmout+="	<td>email</td>";
				htmout+="	<td>phn</td>";
				htmout+="	<td>name</td>";
				htmout+="	<td>descr</td>";
				htmout+="	<td>kludge</td>";
				htmout+="	</tr>\n";
				for(j=0; j<chats_json.length; j++) {
					dttm=chats_json[j].dttm;
					status=chats_json[j].status;
					pid=chats_json[j].pid;
					pip=chats_json[j].pip;
					fpid=chats_json[j].fpid;
					fpip=chats_json[j].fpip;
					tpid=chats_json[j].tpid;
					tpip=chats_json[j].tpip;
					msg=chats_json[j].msg;
					email=chats_json[j].email;
					phn=chats_json[j].phn;
					name=chats_json[j].name;
					descr=chats_json[j].descr;
					kludge=chats_json[j].kludge;

					htmout+="<tr>";
					htmout+="	<td>"+j+"</td>";
					htmout+="	<td>"+pid+"</td>";
					htmout+="	<td>"+pip+"</td>";
					htmout+="	<td>"+fpid+"</td>";
					htmout+="	<td>"+fpip+"</td>";
					htmout+="	<td>"+tpid+"</td>";
					htmout+="	<td>"+tpip+"</td>";
					htmout+="	<td>"+msg+"</td>";
					htmout+="	<td>"+emil+"</td>";
					htmout+="	<td>"+phn+"</td>";
					htmout+="	<td>"+name+"</td>";
					htmout+="	<td>"+descr+"</td>";
					htmout+="	<td>"+kludge+"</td>";
					htmout+="	</tr>\n";
					}					
				htmout+="	</table id=table_chats_end>\n";
				htmout_bugs+=htmout;
				htmout_display+=htmout;
				htmout_chats+=htmout;
//				if( document.getElementById(divid_bugs)) {
//					document.getElementById(divid_bugs).innerHTML=htmout_bugs;
//					}
//				if( document.getElementById(divid_display)) {
//					document.getElementById(divid_display).innerHTML=htmout_display;
//					}
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}

				divid_chats="div_chats_body";
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}


//			alert( "BUGS_701 htmout="+htmout );
//			alert( "BUGS_702 htmout_bugs="+htmout_bugs );
//			alert( "BUGS_703 htmout_display="+htmout_display );
//			alert( "BUGS_699 ko_display DEFAULT "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
//			if( document.getElementById(divid)) {
//				document.getElementById(divid).innerHTML=htmout;
//				document.getElementById(divid).insertAdjacentHTML("beforebegin", htmout )
//				document.getElementById(divid).insertAdjacentHTML("afterbegin", htmout )
//				document.getElementById(divid).insertAdjacentHTML("beforeend", htmout )
//				document.getElementById(divid).insertAdjacentHTML("afterend", htmout )
//				}
//			if( document.getElementById(divid_bugs)) {
//				document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
//				}
//			if( document.getElementById(divid_display)) {
//				document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
//				}





			if( args == "timelines" ) {
// effdt|hid|pid|time|roll|player|amt|potamt
//				alert( "BUGS_911 ko_display TIMELINE "+dttm+" args="+args+" divid="+divid+" htmout="+htmout );
				htmout+="<h1>timelines_json "+timelines_json.length+"</h1>\n";
				htmout+="<table id=table_timeline>\n";
				htmout+="<tr>";
				htmout+="	<td>j</td>";
				htmout+="	<td>hid</td>";
				htmout+="	<td>pid</td>";
				htmout+="	<td>time</td>";
				htmout+="	<td>roll</td>";
				htmout+="	<td>status</td>";
				htmout+="	<td>player</td>";
				htmout+="	<td>effdt</td>";
				htmout+="	<td>amt</td>";
				htmout+="	<td>potamt</td>";
				htmout+="	<td>kludge</td>";
				htmout+="	</tr>\n";
				for(j=0; j<timelines_json.length; j++) {
					hid=timelines_json[j].hid;
					pid=timelines_json[j].pid;
					time=timelines_json[j].time;
					roll=timelines_json[j].roll;
					status=timelines_json[j].status;
					player=timelines_json[j].player;
					effdt=timelines_json[j].effdt;
					amt=timelines_json[j].amt;
					potamt=timelines_json[j].potamt;
					kludge=timelines_json[j].kludge;
					htmout+="<tr>";
					htmout+="	<td>"+j+"</td>";
					htmout+="	<td>"+hid+"</td>";
					htmout+="	<td>"+pid+"</td>";
					htmout+="	<td>"+time+"</td>";
					htmout+="	<td>"+roll+"</td>";
					htmout+="	<td>"+status+"</td>";
					htmout+="	<td>"+player+"</td>";
					htmout+="	<td>"+effdt+"</td>";
					htmout+="	<td>"+amt+"</td>";
					htmout+="	<td>"+potamt+"</td>";
					htmout+="	<td>"+kludge+"</td>";
					htmout+="	</tr>\n";
					}					
				htmout+="	</table id=table_timeline_end>\n";
				htmout_bugs+=htmout;
				htmout_display+=htmout;
				if( document.getElementById(divid_bugs)) {
					document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", htmout_bugs )
					}
				if( document.getElementById(divid_display)) {
					document.getElementById(divid_display).insertAdjacentHTML("afterbegin", htmout_display )
					}
				divid_race="div_ko_trackline_display";
				if( document.getElementById(divid_race)) {
					document.getElementById(divid_race).insertAdjacentHTML("afterbegin", htmout_display )
					}
				return(args);
				}
			alert( "BUGS_2100 ko_display DEFAULT args="+args );
			if( document.getElementById(divid_bugs)) {
				document.getElementById(divid_bugs).insertAdjacentHTML("afterbegin", args )
				}
			if( document.getElementById(divid_display)) {
				document.getElementById(divid_display).insertAdjacentHTML("afterbegin", args )
				}
			return(args);
			}
		</script id=script_ko_display_end>




		<script id=script_kojax>
			var default_jaxurl = "main.html";
			var jaxurl = default_jaxurl;
			function kojax(jaxurl,divid,callback) {
				fmt="psv";
				if( fmt=="psv" ) { delimiter="|"; }
				if( fmt=="csv" ) { delimiter=","; }
				if( fmt=="tsv" ) { delimiter="\t"; }
				if( fmt=="" ) { delimiter=" "; }

				if( divid == "" ) { divid="pre_kojax"; }
//				alert( "BUGS_1000 kojax jaxurl="+jaxurl+" divid="+divid+" callback="+callback );
				$.ajax({
					url: jaxurl,
					context: document.body,
					success: function(responseText) {
//						alert( "BUGS_1001 KOJAX responseText="+responseText );

//						if( document.getElementById('pre_kojax')) {
//							document.getElementById('pre_kojax').innerHTML=responseText;
//							}
						if( document.getElementById(divid)) {
							document.getElementById(divid).innerHTML=responseText;
							}
						kolists['kojax'] = responseText;
//						alert( "BUGS_1002 KOJAX kolists_kojax="+kolists['kojax'] );


						if( callback == "horses" ) { horses_json=csv2json(responseText,delimiter); }
						if( callback == "players" ) { players_json=csv2json(responseText,delimiter); }
						if( callback == "fans" ) { fans_json=csv2json(responseText,delimiter); }
						if( callback == "stables" ) { stables_json=csv2json(responseText,delimiter); }
						if( callback == "timelines" ) { timelines_json=csv2json(responseText,delimiter); }
						if( callback == "pots" ) { pots_json=csv2json(responseText,delimiter); }
						if( callback == "imgs" ) { imgs_json=csv2json(responseText,delimiter); }
						if( callback == "divs" ) { divs_json=csv2json(responseText,delimiter); }
						if( callback == "cfgs" ) { cfgs_json=csv2json(responseText,delimiter); }
//						if( callback == "usrs" ) { usr_json=csv2json(responseText,delimiter); }
						if( callback == "usrs" ) { users_json=csv2json(responseText,delimiter); }
						if( callback == "bs4" ) { bs4_json=csv2json(responseText,delimiter); }
						if( callback == "k9" ) { k9_json=csv2json(responseText,delimiter); }
						if( callback == "chats" ) { chats_json=csv2json(responseText,delimiter); }




						if( callback == "leds" ) { 
							kolists['leds']=responseText; 
//							alert( "BUGS_1003 KOJAX kolists_leds="+kolists['leds'] );
//							leds(''); 
							}
						if( callback == "items" ) { kolists['items']=responseText; items(''); }
						if( callback == "contacts" ) { kolists['contacts']=responseText; contacts(''); }
						if( callback == "letters" ) { kolists['letters']=responseText; letters(''); }


//						$("#div_kojax").html(responseText);
						$("#pre_kojax").html(responseText);
						$("#div_kojax").find("script").each(function(i) {
							eval($(this).text());
//							alert( "BUGS_1004 kojaxj responseText="+responseText );
							return( responseText );
							});

//						alert( "BUGS_1005 kojax return responseText="+responseText );	
						return(responseText);
						}
					});
				};
		</script id=script_kojax_end>







		<script id=script_kojaxj>
			var default_jaxurl = "main.html";
			var jaxurl = default_jaxurl;
			function kojaxj(jaxurl,divid,callback) {
				if( divid == "" ) { divid="pre_kojaxj"; }
//				alert( "BUGS_5111 kojaxj jaxurl="+jaxurl+" divid="+divid+" callback="+callback );
				$.ajax({
					url: jaxurl,
					dataType: "json",
					context: document.body,
					success: function(responseText) {
//						alert( "BUGS_5121 KOJAXJ responseText="+responseText );
						json=JSON.parse(responseText);
						for(j=0;j<json.length;j++ ){
//							alert( "BUGS_5121 j="+j+" json.pathfile="+json[j].pathfile );
							}
//						alert( "BUGS_5122 KOJAX json="+json );


						if( document.getElementById('pre_kojaxj')) {
							document.getElementById('pre_kojaxj').innerHTML=responseText;
							}
//						kolists['kojaxj'] = responseText;
//						alert( "BUGS_5105 jax kolists_jtfdcr="+kolists['jtfdcr'] );
//						$("#div_kojaxj").html(responseText);
						$("#pre_kojaxj").html(responseText);
						$("#pre_kojaxj").find("script").each(function(i) {
						eval($(this).text());
//						alert( "BUGS_5106 kojaxj responseText="+responseText );
						return( responseText );
						});
					}
				});
			};
		</script id=script_kojaxj_end>

	<div id="result"></div>
	<script id=script_ajaxpost>
	function ajaxpost(){
		var mypostrequest=new ajaxRequest();
		mypostrequest.onreadystatechange=function(){
			if (mypostrequest.readyState==4){
				if (mypostrequest.status==200 || window.location.href.indexOf("http")==-1){
					document.getElementById("result").innerHTML = mypostrequest.responseText;
					}
				else{
					alert("An error has occured making the request");
					}
				}
			}
    
		var userId = encodeURIComponent(document.getElementById("userId").value);
		var password = encodeURIComponent(document.getElementById("password").value);
		var parameters="userId="+userId+"&password="+password;
		mypostrequest.open("POST", "http://localhost:8080/AjaxTest/Login", true);
		mypostrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		mypostrequest.send(parameters);
		}
		</script id=script_ajaxpost_end>
	-->

		<script id=script_inflate>
	                function inflate(qsmatch,cmd) {
	                        htmout=""; j=0; k=0;
				qsmatch="div";
//				alert( "BUGS_300 qsall INFLATE qsmatch="+qsmatch+" cmd="+cmd );
				qsmatch="div";
	                       	qss=document.querySelectorAll(qsmatch);
				for( j=0; j< qss.length; j++ ) {
					if( qss[j].id == "div_inflate" ) { continue; }
					if( qss[j].id == "div_deflate" ) { continue; }
					qss[j].style.display="inline";
					}
                       		if( document.getElementById("div_inflate")) {
		                               document.getElementById("div_inflate").style.display="none"
		                               }
                       		if( document.getElementById("div_deflate")) {
		                               document.getElementById("div_deflate").style.display="inline";
					}
				return(htmout);
				}
			</script id=script_inflate_end>

		<script id=script_deflate>
	                function deflate(qsmatch,cmd) {
				htmout=""; j=0; k=0;
//				alert( "BUGS_400 qsall DEFLATE qsmatch="+qsmatch+" cmd="+cmd );
				qsmatch="div";
	                       	qss=document.querySelectorAll(qsmatch);
				for( j=0; j< qss.length; j++ ) {
					if( qss[j].id == "div_inflate" ) { continue; }
					if( qss[j].id == "div_deflate" ) { continue; }
					qss[j].style.display="none";
					}
                       		if( document.getElementById("div_inflate")) {
		                               document.getElementById("div_inflate").style.display="inline";
//		                               document.getElementById("img_inflate").style.height="400";
//		                               document.getElementById("img_inflate").style.width="300";
						}

				topgifs=kolists['topgifs'].split("\n");
				max=topgifs.length-1; min=1;
				gifnum=random_int(max,min);
				src=topgifs[gifnum];
                       		if( document.getElementById("img_inflate")) {
		                               document.getElementById("img_inflate").src=src;
		                               }

                       		if( document.getElementById("div_deflate")) {
//					alert( "BUGS_123 div_deflate style.display=none<br>\n" );
					document.getElementById("div_deflate").style.display="none";
					}
				return(htmout);
				}
			</script id=script_deflate_end>

	<script id="script_onclicks" >
		function onclicks(args) {
			htmout=""; j=0; k=0;

			if( args.match(/^div_/)) { return(''); }
			click_led_id=args;
			led_id=click_led_id.replace("img_led","led_");
			alert( "BUGS_2650 onclicks click_led_id="+click_led_id+" led_id="+led_id );
//			display("BUGS_2651 onclicks click_led_id="+click_led_id );
//			alert( "BUGS_1910 onclicks kolists_leds="+kolists['leds'] );
			kolists_leds=kolists['leds'].split("\n");

			pathfile="";
			title="title: "+click_led_id;
			desc="desc: "+click_led_id;
			led="";
			alert( "BUGS_2651 onclicks click_led_id="+click_led_id+" kolists_leds.length="+kolists_leds.length+" kolists_leds="+kolists_leds );
			for(j=0; j<kolists_leds.length; j++ ) {
				led=kolists_leds[j];
//				alert( "BUGS_2651 j="+j+" led="+led );
				vals=led.split("|");
				led_id=vals[0];
led_id=vals[0];
led_status=vals[1];
led_code=vals[2];
led_name=vals[3];
led_dttm=vals[4];
led_color=vals[5];
led_speed=vals[6];
led_type=vals[7];
led_date=vals[8];
led_cmd=vals[8];
led_cmdout=vals[9];
led_desc=vals[10];
led_misc=vals[11];
led_city=vals[12];
led_bldg=vals[13];
led_loc_code=vals[15];
led_floor=vals[16];
led_group=vals[17];
led_orgs=vals[18];
led_title=vals[19];
led_published=vals[20];
led_width=vals[21];
led_height=vals[22];
led_comment=vals[23];
led_filename=vals[24];
led_user=vals[25];
led_user_ip=vals[26];
led_referer=vals[27];
led_remote_port=vals[28];
led_viewrole=vals[29];
led_user_agent=vals[30];
led_unique_id=vals[31];
led_err=vals[32];
led_fix=vals[33];
led_os=vals[34];
id=vals[35];
grp=vals[36];
status=vals[37];
dttm=vals[38];
pathfile=vals[39];
path=vals[40];
file=vals[41];
base=vals[42];
ext=vals[43];
size=vals[44];
ctime=vals[45];
mtime=vals[46];
exif_dttm=vals[47];
exif_dt=vals[48];
exif_tm=vals[49];
title=vals[50];
thumbnail=vals[51];
alt=vals[52];
link=vals[53];
linktarget=vals[54];
src=vals[55];
tn=vals[56];
startdate=vals[57];
enddate=vals[58];
headline=vals[59];
text=vals[60];
assets=vals[61];
media=vals[62];
credit=vals[63];
caption=vals[64];
temp=vals[82];
desc=vals[83];
				if( led_id.match(click_led_id)) { 
					alert( "BUGS_2670 MATCH j="+j+" click_led_id="+click_led_id+" led="+led+" vals_len="+vals.length );
					led_id=vals[0];
					led_name=vals[1];
					title=vals[30];
					desc=vals[31];
					pathfile=vals[39];
					alert( "BUGS_2653 onclicks j="+j+" led_id="+led_id+" pathfile="+pathfile+" led_id="+led_id+" led="+led );
					break;
					}
				}

htmout="BUGS_2670 onclicks j="+j+" click_led_id="+click_led_id +" pathfile="+pathfile+" led_id="+led_id+" led_name="+led_name+" title="+title+" desc="+desc;
			alert( "BUGS_2670 onclicks htmout="+htmout );
			display(htmout);

//			flds=koflds['leds'].split("|");
//			for( j=0; j<flds.length; j++ ) {
//				eval(flds[j]+"="+"'"+vals[j]+"'"; );
//				alert( "BUGS_1921 j="+j+" flds="+flds[j]+" vals="+vals[j] );
//				}
//				}

			src=`<img id="`+imgid+`" src="/leds/imgs/hal/hald_white.gif" `;
			htmout+="<hr color=black>\n";	
			htmout+="<hr color=white>\n";
			htmout+="<h1>led_id="+led_id+"</h1>\n";
			htmout+=`<img src="`+pathfile+`" >`;	
			htmout+="<h2>pathfile="+pathfile+"</h1>\n";
			htmout+=`<img id="`+click_led_id+`" name="`+click_led_id+`" title="          `+click_led_id+`" `;
//			htmout+=`src="`+pathfile+`" `;
			htmout+=`src="`+src+`" `;
			htmout+=` height=200 width=200 border=0`;
			htmout+=`onclick="window.open('`+pathfile+`'); return false;" `;
			htmout+=`>`;
			htmout+=`<hr color=white>\n`;
			htmout+=`<a href="`+pathfile+`" target=_blank>\n`;
			htmout+=`<img id="img_led_update_form" name="img_led_update_form" `;
			htmout+=`src="/imgs/btn/kobrdb.png" `;
			htmout+=`onclick="led_update_form('`+click_led_id+`'); return false;" `;
			htmout+=`height=20 border=0>`;
			htmout+=`</a>\n`;


			htmout+=`title=`+title+`<br>`;	
			htmout+=`desc=`+desc+`<br>`;	

			htmout+="<hr color=white>\n";
			htmout+="<hr color=black>\n";	
			alert( "BUGS_1930 onclicks htmout="+htmout );
			if( document.getElementById('div_ledsover')) {
				alert( "BUGS_1931 onclicks ___FOUND div_ledsover htmout="+htmout );
				document.getElementById('div_ledsover').innerHTML=htmout;
				document.getElementById('div_ledsover').focus();
				document.getElementById('div_ledsover').scrollIntoView();
				alert( "BUGS_1932 onclicks ___FOUND focus" );
				}
			else {
				alert( "BUGS_1932 onclicks NOTFOUND div_ledsover htmout="+htmout );
				}
//			alert( "BUGS_1910 onclicks led_id="+led_id+" led_detail="+led_detail  );
//			printf(htmout);
			return(htmout);
			}


//	 const myWindow = window.open("", "", "width=200, height=100"); myWindow.focus();

		</script id="script_onclicks_end" >


	<script id="script_leds_update_form" >
		function leds_update_form(args){
			htmout=""; j=0; k=0;
			alert( "BUGS_1950 leds_update_form args="+args );
			return(htmout);
			}
		</script id="script_leds_update_form" >

	<script id="script_ko_drops" >
		function ko_drops(args) {
			htmout=""; j=0; k=0;
			alert( "BUGS_560 ko_drops args="+args );
			}
		</script id="script_ko_drops_end" >

	<script id="script_ko_picks" >
		swapimg="/imgs/btn/blob_trans.png";
		function ko_picks(args) {
			htmout=""; j=0; k=0;

//			dd.Int();
//			ADD_DHTML("layer_wz"+RESIZABLE+TRANSPARENT);
//			ADD_DHTML("layer_fb"+RESIZABLE+TRANSPARENT);
//			dd.obj.property
//			dd.obj.y
			dd.obj.swapImage(swapimg);
			alert( "BUGS_570 ko_picks args="+args );
			}
		</script id="script_ko_picks_end" >

	<script id="script_ko_drags" >
		function ko_drags(args) {
			htmout=""; j=0; k=0;
			alert( "BUGS_570 ko_drags args="+args );
			}
		</script id="script_ko_drags_end" >

	<script id="script_ko_resizes" >
		function ko_resizes(args) {
			htmout=""; j=0; k=0;
			alert( "BUGS_570 ko_resizes args="+args );
			}
		</script id="script_ko_resizes_end" >

	<script id="script_startup_wz" >
		brds=new Array(); 
		brds['kludge']='0|1|2|3|4|5|6|7|8|9';
		if( dhtmlflag != "" ) { startup_wz(''); }
		function startup_wz(args) {
//			getEltBelow();
//			dd.elements.maximizeZ(.5);
//			dd.elements.setOpacity(.5);
//			dd.elements.length; dd.elements[i];
//			dd.elements.layer_fb.write('layer_fb.write');
//			dd.elements.setVertical(true);
//			dd.elements.setHorizontal(true);
//			dd.elements.setZ(0);
//			alert( "BUGS_450 STARTUP_WZ_BEG args="+args );
//			alert( "BUGS_451 dd.getWndH="+dd.getWndH+" dd.getWndW="+dd.getWndW );
//			alert( "BUGS_452 dd.getScrollX="+dd.getScrollX+" dd.getScrollY="+dd.getScropllY );

			DDObj.prototype.ttl="10000";
			DDObj.prototype.role="role";
			DDObj.prototype.dx=1;
			DDObj.prototype.dy=1;
			DDObj.prototype.dz=1; 
			DDObj.prototype.desc="desc";
			DDObj.prototype.role="role";
//			DDObj.prototype.brd=brd[0];
			dd.elements.img_blob.setDropFunc(ko_drops);
			dd.elements.img_blob.setPickFunc(ko_picks);
			dd.elements.img_blob.setDragFunc(ko_drags);
			dd.elements.img_blob.setResizeFunc(ko_resizes);

			htmout=""; j=0; k=0;
//			ANIM();
//			alert( "BUGS_470 STARTUP_WZ_END htmout="+htmout );
			return(htmout);
			}
		</script id="script_startup_wz_end" >

/	<br>
<!--	<img id=img_dhtmlon name="img_anim" title="          img_anim" onclick="location.href='index.html?dhtml=on'; return false;" src="/imgs/btn/brdb.png" height=50 border=0>DHTML -->
	<img id=img_dhtmlon name="img_anim" title="          img_anim" onclick="window.open('index.html?dhtml=on','_self'); return false;" src="/imgs/btn/brdb.png" height=50 border=0>DHTML
	<img id=img_dhtmldd name="img_dhtml_dd" title="          img_dhtml_dd" onclick="window.open('index.html?dhtml=dd','_self'); return false;" src="/imgs/btn/brdb.png" height=50 border=0>dhtml_dd
	<img id=img_index name="img_index" title="          img_index" onclick="window.open('index.html','_self'); return false;" src="/imgs/btn/brdb.png" height=50 border=0>index
	<img id=img_anim name="img_anim" title="          img_anim" onclick="ANIM(); return false;" src="/imgs/btn/brdb.png" height=50 border=0>ANIM 
<!--	<img id=img_anim name="img_anim" title="          img_anim" onclick="startup_wz('');ANIM();set_dhtml(''); return false;" src="/imgs/btn/brdb.png" height=50 border=0>ANIM -->
	<br>
	<div id="layer_sailboat" >
		<h1>layer_sailboat</h1>
		<img id="img_sailboat" name="img_sailboat" title="          img_sailboat" onclick="toggles('div_sailboat',''); return false;" src="/imgs/btn/koeyew.png" height=20 border=0>div_sailboat

		<div id="div_sailboat" name="div_sailboat" style="width:400px; height:800px; top:800px; left: 1400px; z-index:0; cursor:move; visibility: visible;" >
			<img id=img_dhtmlon name="img_anim" title="          img_anim" onclick="window.open('index.html?dhtml=on','_self'); return false;" src="/imgs/btn/brdb.png" height=50 border=0>DHTML
			<img id=img_dhtmldd name="img_anim_dd" title="          img_anim_dd" onclick="window.open('index.html?dhtml=dd','_self'); return false;" src="/imgs/btn/brdb.png" height=50 border=0>dhtml=dd
			<img id=img_dhtmloff name="img_anim" title="          img_anim" onclick="window.open('index.html','_self'); return false;" src="/imgs/btn/brdb.png" height=50 border=0>dhtmloff
			<img id=img_anim name="img_anim" title="          img_anim" onclick="startup_wz('');ANIM();set_dhtml(''); return false;" src="/imgs/btn/brdb.png" height=50 border=0>ANIM
	<br>

			<h2>div_sailboat</h2>
			</div id="div_ko_sailboat_end" >
		</div id="layer_ko_sailboat_end" >




	<script id="script_head">
		dhtmlflag="";
		if( geturlparameter('dhtml')) { dhtmlflag=geturlparameter('dhtml'); }
		dhtmlflag="on";
		if( dhtmlflag == "off" ) { dhtmlflag=""; }
		if( dhtmlflag == "" ) { 
//			alert( "BUGS_1 DHTML dhtmlflag="+dhtmlflag ); 
			if( document.getElementById('div_leds')) {
//				document.getElementById('div_leds').position="relative";
				document.getElementById('div_leds').style.left="100px";
				document.getElementById('div_leds').style.top="600px";
				}
			if( document.getElementById('div_ledsover')) {
				document.getElementById('div_ledsover').style.left="400px";
				document.getElementById('div_ledsover').style.top="600px";
				}
			if( document.getElementById('div_sailboat')) {
				document.getElementById('div_sailboat').style.left="800px";
				document.getElementById('div_sailboat').style.top="800px";
				}

			htmout="";
			htmout+="<h1>WAIT</h1>";
			if( document.getElementById('div_display')) {
				document.getElementById('div_display').style.left="800px";
				document.getElementById('div_display').style.top="600px";
				document.getElementById('div_display').innerHTML=htmout;
				}
		
			}
//		else { alert( "BUGS_2 dhtml dhtmlflag="+dhtmlflag ); }

//		var myLayer = document.createElement('div');
//		myLayer.id = 'bookingLayer';
//		myLayer.style.position = 'absolute';
//		myLayer.style.left = '10px';
//		myLayer.style.top = '10px';
//		myLayer.style.width = '300px';
//		myLayer.style.height = '300px';
//		myLayer.style.padding = '10px';
//		myLayer.style.background = '#00ff00';
//		myLayer.innerHTML = 'This is the layer created by the JavaScript.';
//		document.body.appendChild(myLayer);

		
		function head(args) {
			htmout=""; j=0; k=0;
			return(htmout);
			}
		</script id="script_head_end">
	
	
	<script id="script_startup_divs2" >
		function startup_divs2(args) {
			alert( "BUGS_12000 startup_divs args="+args );
//			divid="div_kd_dice"; x="1100px"; y="2000px"; w="1100px"; h="650px";
//			dlen=0; htmout="";
//			dlen=divs_json.length;
//			if( dd.elements[divid] ) {
//				dd.elements[divid].moveTo(x,y);
//				dd.elements[divid].resizeTo(w,h);
//				}
//			alert( "BUGS_12001 startup_divs divid="+divid+" xywh"+x+"x"+y+"-"+w+"+"+h );

//			if(( args == "startup" ) || ( args == "" )) {
//				alert( "BUGS_12130 startup_divs args="+args+" dlen="+dlen+" divs_json="+divs_json );
//				for( d=1; d<dlen; d++ ) {
//					if( ! divs_json[d] ) { 
//						alert( "BUGS_12140 startup_divs NOTFOUND d="+d+" divid="+divid+" "+w+"x"+h+"x"+x+"x"+y );
//						continue; 
//						}
//					id=divs_json[d].id;
//					w=divs_json[d].w;
//					h=divs_json[d].h;
//					x=divs_json[d].x;
//					y=divs_json[d].y;
//					z=divs_json[d].z;
//					divid=id;
//					dd.elements[divid].w=w;
//					dd.elements[divid].h=h;
//					dd.elements[divid].x=x;
//					dd.elements[divid].y=y;
//					dd.elements[divid].moveTo(x,y);
//					dd.elements[divid].resizeTo(w,h);
//					if( divid="div_kd_horses" ) {
//						alert( "BUGS_11700 startup_divs ___FOUND d="+d+" divid="+divid+" "+w+"_"+h+"_"+x+"_"+y );
//						}
//					alert( "BUGS_12150 startup_divs ___FOUND d="+d+" divid="+divid+" "+w+"_"+h+"_"+x+"_"+y );
//					htmout+="BUGS_12151 startup_divs ___FOUND d="+d+" divid="+divid+" "+w+"_"+h+"_"+x+"_"+y;
//					}				

//				dd.elements['div_kd_horses'].moveTo(100,1100);
//				dd.elements['div_kd_horses'].resizeTo("1100px","1100px");
//				alert( "BUGS_12150 startup_divs DONE htmout="+htmout );

//				alert( "BUGS_12151 startup_divs DONE d="+d+" divid="+divid+" "+w+"x"+h+"x"+x+"x"+y+" htmout="+htmout );
				alert( "BUGS_12160 startup_divs TAIL " );
				return(htmout);
				}




			return(args);
			}
		</script id="script_startup_divs_end" >




		
		<script id=script_startup>
			function startup(args) {
				alert( "BUGS_100 startup args="+args );	
				return(args);
			</script id=script_startup_end>
		
		</head>




<body bgcolor=linen onload="startup('onload');return false;">

<script id=script_wz_dragdrop src="/js/wz/wz_dragdrop.js"></script id=script_wz_dragdrop_end>
	<a href="http://www.walterzorn.de/dragdrop.htm" target="_top">





<a href="http://www.walterzorn.de/dragdrop.htm" target="_top">German version</a></small>
          <!--a href="javascript:void(0)" onclick="dd.elements.cat.copies[dd.elements.cat.copies.length - 1].setHorizontal(!dd.elements.cat.copies[dd.elements.cat.copies.length - 1].horizontal);">Horz</a>
          

<a href="javascript:void(0)" onclick="dd.elements.cat.copies[dd.elements.cat.copies.length - 1].setVertical(!dd.elements.cat.copies[dd.elements.cat.copies.length - 1].vertical);">Vert</a-->
          <!--a href="javascript:void(0)" onclick="dd.elements.cat.copy(2);">Cpy</a>
          

<a href="javascript:void(0)" onclick="dd.elements.cat.copies[0].del();">Del 0</a>
          

<a href="javascript:void(0)" onclick="for (var i = 0; i < dd.elements.length; i++) if (dd.elements[i].is_image) dd.elements[dd.n4? 'reldivn4' : 'reldiv'].addChild(dd.elements[i]);">-</a>
          

<a href="javascript:void(0)" onclick="while (dd.elements[dd.n4? 'reldivn4' : 'reldiv'].children.length) dd.elements[dd.n4? 'reldivn4' : 'reldiv']._removeChild(0); var rl = dd.elements.greylyr, r = dd.elements.rabbit; rl.addChild(r); for (var i = 0; i < r.copies.length; i++) rl.addChild(r.copies[i]);">-</a>
          

<a href="javascript:void(0)" onclick="var c = dd.elements.rabbit; c.moveTo(c.defx, c.defy); if (c.copies) for (var i = 0; i < c.copies.length; i++) c.copies[i].moveTo(c.copies[i].defx, c.copies[i].defy);">-</a-->
<!--        <td id="op56check" align="center"> -->

<!--
	<img name="logo" border="0" src="/imgs/btn/logo.gif" alt="Home" width="278" height="30"></a></td>
	<a href="/ko/wz.html">Home</a></td>
	<a href="/js/wz/jsgraphics/jsgraphics_e.htm">VectorGraphics-Library</a></td>
	<a href="/js/wz/tooltip/tooltip_e.htm">Tooltips</a></td>
	<a href="/js/wz/grapher/grapher_e.htm">Function-Grapher</a></td>
	<img src="/imgs/btn/spacer.png" alt="DHTML JavaScript Drag and Drop for Layers and Images" width="1" height="30">
	<img src="/imgs/btn/spacer.png" alt="DHTML JavaScript Drag and Drop for Layers and Images" width="20" height="1">
	-->

	<hr color=white>
	<img src=/imgs/btn/koeye.png onclick="toggle('div_form',''); return false;" height=20 border=0>div_form
	<hr color=goldenrod>
	<div id="div_form" >
		<h1>div_form</h1>
		<form id="form" name=form type="POST" action="/ko/ko.php?form" > 
<!--		<form id="form" name=form type="POST" action="ka12:8000/ko.php?ko_coffeeshop?fmt=json" > -->
			<input id=form_fmt name=form_fmt type=radio value="json">json
			<input id=form_fmt name=form_fmt type=radio value="txt">txt
			<input id=form_fmt name=form_fmt type=radio value="csv">csv
			<input id=form_fmt name=form_fmt type=radio value="psv">psv
			<input id=form_fmt name=form_fmt type=radio value="html">html
			<table id=table_form>
			<tr><td>fmt</td><td><input id=fmt type=text name=fmt value=""></td></tr>
			<tr><td>todo</td><td><input id=todo type=text name=todo value=""></td></tr>
			<tr><td>step</td><td><input id=step type=text name=step value=""></td></tr>
			<tr><td>x</td><td><input id=x type=text name=x value=""></td></tr>
			<tr><td>y</td><td><input id=y type=text name=y value=""></td></tr>
			<tr><td>t</td><td><input id=t type=text name=t value=""></td></tr>
			<tr><td>xlim</td><td><input id=fmt type=text name=xlim value=""></td></tr>
			<tr><td>ylim</td><td><input id=ylim type=text name=ylim value=""></td></tr>
			<tr><td>date</td><td><input id=date type=date name=date value=""></td></tr>
			<tr><td>time</td><td><input id=time type=time name=form_time value=""></td></tr>
			<tr><td>color</td><td><input id=color type=color name=form_color value=""></td></tr>
			</table>
			<input id="submit" type="submit">

<!--
			<div id="div_form_fname"> </div>
				<label for="fname">First name: </label>
				<input id="fname" type="text"></input>
			<div id="div_form_lname"> </div>
				<label for="lname">Last name: </label>
				<input id="lname" type="text"></input>
			<div id="div_form_submit"> </div>
				<input id="submit" type="submit">
	-->
		
			</form>
	<br />
	<hr color="white" />


	<br />
	<hr color="black" />
	<h1>oninput_text</h1>
	<input type="text" oninput="func_oninput_text(this.value)">
	<p id="p_oninput_text" >p_oninput_reverse: </p id="p_oninput_text_end">
	<p id="p_oninput_text1" >p_oninput_text1: </p id="p_oninput_text1_end">
	<p id="p_oninput_text2" >p_oninput_text2: </p id="p_oninput_text2_end">
	<p id="p_oninput_text3" >p_oninput_text3: </p id="p_oninput_text3_end">

	<div id="div_oninput_text" >div_oninput_text: </div id="div_oninput_text_end">
	<div id="div_oninput_text1" >div_oninput_text1: </div id="div_oninput_text1_end">
	<div id="div_oninput_text2" >div_oninput_text2: </div id="div_oninput_text2_end">
	<div id="div_oninput_text3" >div_oninput_text3: </div id="div_oninput_text3_end">
	<hr color="black" />
	<br />
	<br />
	<br />

	<script id="script_timeout_anim" >
		function toggle_anim(args) {
			if( timoutid_anim ) {
				clearTimout(timoutid_anim);
				timoutid_anim="";
				if( document.getElementById('img_anim_toggle').src="/imgs/btn/kob.png";
				}
			else {
				timoutid_anim=setTimeout("ANIM()", dd.kq? 200 : 100);
				if( document.getElementById('img_anim_toggle').src="/imgs/btn/kow.png";
				}
			return(timoutid_anim);
			}
		</script id="script_timeout_anim_end" >




	<img id=img_wz name=img_wz title="          img_wz" onclick="toggles('div_wz',''); return false;" src=/imgs/btn/koeyew.png height=20 border=0>wz
	<div id="div_wz" >
		<h1>div_wz</h1>
		<img id=img_ko_sailboat1 name=img_sailboat1 title="          img_sailboat1" src=/imgs/btn/ko_sailboat1.png height=100 border=0>ko_sailboat1
		<img id=img_blobb name=img_blobb title="          img_blobb" src=/imgs/btn/blobb.png height=100 border=0>blobb
		<img id=img_topgif name=img_topgif title="          img_topgif" src=/imgs/gif/disks/disk_trans.gif height=100 border=0>diskb
		<img id=img_blobw name=img_blobw title="          img_blobw" src=/imgs/btn/blobw.png height=100 border=0>blobw
		<img id=img_ko_sailboat2 name=img_sailboat2 title="          img_sailboat2" src=/imgs/btn/ko_sailboat2.png height=100 border=0>ko_sailboat2
		</div id="div_wz_end" >

	<br .>
	<hr color=white />
	<img id="img_kojaxs" name="img_kojaxs" title="          img_kojaxs" onclick="toggle('div_kojaxs'); return false;" src="/imgs/btn/koeyew.png" height=20 border=0>kojaxs
	<br />
	<div id="div_kojaxs" >
		<h1>div_kojaxs</h1>
		</div id="div_kojaxs_end" >






	<br>
	<hr color=white>
	<img id=img_kojax name=img_kojax title="          img_kojax" onclick="toggle('div_kojax'); return false;" src=/imgs/btn/koeyew.png height=20 border=0>kojax
	<div id="div_kojax">
		<h1>div_kojax</h1>
		<pre id=pre_kojax>
			<h2>pre_kojax</h2>
			</pre id=pre_kojax_end>


	<br>
	<hr color=white>
	<img id=img_ledz name=img_ledz title="          img_ledz" onclick="toggle('div_ledz'); return false;" src=/imgs/btn/koeyeb.png height=20 border=0>div_ledz
	<div id=div_ledz >
		<h1>div_ledz</h1>
		<pre id=pre_leds><h3>pre_leds</h3></pre id=pre_leds_end>
		</div id=div_ledz_end>

	<br>
	<hr color=white>


	<br />
	<hr color=white />
	<div id="layer_leds">
		<h1>layer_leds</h1>
		<img id="img_leds" name="img_leds" title="          img_leds" onclick="toggles('div_leds',''); return false;" src="/imgs/btn/koeyew.png" height=20 border=0>leds
		<div id="div_leds" name="div_leds" style="width:600px; height:1000px; top:600; left: 50px; z-index:0; cursor:move; visibility: visible;" >

			<h2>div_leds</h2>
			<div id="div_ledspanel" >
<img id=img_led0 name=img_led0 title="          img_led0" src=/imgs/btn/diskb.gif onMouseover="changetext(content[0]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led1');return false;" height=50 border=0>
<img id=img_led1 name=img_led1 title="          img_led1" src=/imgs/btn/diskb.gif onMouseover="changetext(content[1]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led1');return false;" height=50 border=0>
<img id=img_led2 name=img_led2 title="          img_led2" src=/imgs/btn/diskb.gif onMouseover="changetext(content[2]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led2');return false;" height=50 border=0>
<img id=img_led3 name=img_led3 title="          img_led3" src=/imgs/btn/diskb.gif onMouseover="changetext(content[3]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led3');return false;" height=50 border=0>
<img id=img_led4 name=img_led4 title="          img_led4" src=/imgs/btn/diskb.gif onMouseover="changetext(content[4]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led4');return false;" height=50 border=0>
<img id=img_led5 name=img_led5 title="          img_led5" src=/imgs/btn/diskb.gif onMouseover="changetext(content[5]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led5');return false;" height=50 border=0>
<img id=img_led6 name=img_led6 title="          img_led6" src=/imgs/btn/diskb.gif onMouseover="changetext(content[6]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led6');return false;" height=50 border=0>
<img id=img_led7 name=img_led7 title="          img_led7" src=/imgs/btn/diskb.gif onMouseover="changetext(content[7]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led7');return false;" height=50 border=0>
<img id=img_led8 name=img_led8 title="          img_led8" src=/imgs/btn/diskb.gif onMouseover="changetext(content[8]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led8');return false;" height=50 border=0>
<img id=img_led9 name=img_led9 title="          img_led9" src=/imgs/btn/diskb.gif onMouseover="changetext(content[9]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led9');return false;" height=50 border=0>
<img id=img_led10 name=img_led10 title="          img_led10" src=/imgs/btn/diskb.gif onMouseover="changetext(content[10]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led10');return false;" height=50 border=0>
<img id=img_led11 name=img_led11 title="          img_led11" src=/imgs/btn/diskb.gif onMouseover="changetext(content[11]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led11');return false;" height=50 border=0>
<img id=img_led12 name=img_led12 title="          img_led12" src=/imgs/btn/diskb.gif onMouseover="changetext(content[12]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led12');return false;" height=50 border=0>
<img id=img_led13 name=img_led13 title="          img_led13" src=/imgs/btn/diskb.gif onMouseover="changetext(content[13]);return false;" onMouseout="tipout(); return false;" onclick="onclicks('img_led13');return false;" height=50 border=0>
				</div id="div_ledspanel_end" >
			</div id="div_leds_end" >
		</div id="layer_leds_end" >
	<br />
	<hr color=white />

	<div id="layer_ledsover" >
		<h1>layer_ledsover</h1>
		<img id="img_ledsover" name="img_ledsover" title="          img_ledsover" onclick="toggles('div_ledsover',''); return false;" src=/imgs/btn/koeyew.png height=20 border=0>ledsover
		<div id="div_ledsover" name="div_ledsover" style="width:700px; height:1000px; top:600px; left: 675px; z-index:0; cursor:move; visibility: visible;">

			<h2>div_ledsover</h2>
			</div id="div_ledsover_end" >

		<div id="div_descriptions" ><h2>div_descriptions</h2></div id="div_descriptions_end" >
		<div id="descriptions" ><h2>descriptions</h2></div id="descriptions_end" >
		</div id="layer_ledsover_end" >
	<br />
	<hr color=white />
	
	<div id="layer_display" >
		<h1>layer_display</h1>
		<img id="img_display" name="img_display" title="          img_display" onclick="toggles('div_display',''); return false;" src="/imgs/btn/koeyew.png" height=20 border=0>div_display
		<div id="div_display" name="div_display" style="width:400px; height:100px; top:600px; left: 1400px; z-index:0; cursor:move; visibility: visible;" >

			<h2>div_display</h2>
			</div id="div_ko_display_end" >
		</div id="layer_ko_display_end" >
	
	<div id="layer_sailboat" >
		<h1>layer_sailboat</h1>
		<img id="img_sailboat" name="img_sailboat" title="          img_sailboat" onclick="toggles('div_sailboat',''); return false;" src="/imgs/btn/koeyew.png" height=20 border=0>div_sailboat

		<div id="div_sailboat" name="div_sailboat" style="width:400px; height:800px; top:800px; left: 1400px; z-index:0; cursor:move; visibility: visible;" >
			<img id=img_dhtmlon name="img_anim" title="          img_anim" onclick="window.open('index.html?dhtml=on','_self'); return false;" src="/imgs/btn/brdb.png" height=50 border=0>DHTML
			<img id=img_dhtmldd name="img_anim_dd" title="          img_anim_dd" onclick="window.open('index.html?dhtml=dd','_self'); return false;" src="/imgs/btn/brdb.png" height=50 border=0>dhtml=dd
			<img id=img_dhtmloff name="img_anim" title="          img_anim" onclick="window.open('index.html','_self'); return false;" src="/imgs/btn/brdb.png" height=50 border=0>dhtmloff
			<img id=img_anim name="img_anim" title="          img_anim" onclick="startup_wz('');ANIM();set_dhtml(''); return false;" src="/imgs/btn/brdb.png" height=50 border=0>ANIM
	<br>

			<h2>div_sailboat</h2>
			</div id="div_ko_sailboat_end" >
		</div id="layer_ko_sailboat_end" >


	<br />
	<br />
	<hr color=white />
	<div id=layer_blobs>
		<h1>layer_blobs</h1>
		<img id=img_blobs name=img_blobs title="          img_blobs" onclick="toggles('div_blobs',''); return false;" src=/imgs/btn/koeyew.png height=20 border=0>blobs
		<div id=div_blobs>
			<h2>div_blobs</h2>


		<img id="img_anim_toggle" src="/imgs/btn/kow.png" onclick="toggle_anim('');return false;" height=30>


		<img id="img_blob_togglestart" src="/imgs/btn/kow.png" onclick="togglestart();return false;" height=30>
		&nbsp &nbsp &nbsp &nbsp
		&nbsp &nbsp &nbsp &nbsp
		<img id="img_grid_toggle" src="/imgs/btn/btn_keyhole_us.png" onclick="grid_toggle(''); return false;" height=100> 
		&nbsp &nbsp &nbsp &nbsp

		<img id="img_grid_keys" src="/imgs/btn/btn_keys1.png" onclick="grid(''); return false;" height=100>
		&nbsp &nbsp &nbsp &nbsp
<!--		<img id="img_blob_togglestart" src="/imgs/btn/kob.png" onclick="keine('123'); return false;" height=50> -->
<!--		<img id="img_blob_togglestart" src="/imgs/btn/kob.png" onclick="bugs('123'); return false;" height=50> -->
		&nbsp &nbsp &nbsp &nbsp
		<img id="img_blob_k9" src="/imgs/btn/kob.png" onclick="window.open('k9.html');return false;" height=30>
		&nbsp &nbsp &nbsp &nbsp
		&nbsp &nbsp &nbsp &nbsp
		&nbsp &nbsp &nbsp &nbsp
		<img id="img_blob_arrowkeys_toggle" src="/imgs/btn/kob.png" onclick="blob_arrowkeys_toggle('');return false;" height=25>
		&nbsp &nbsp &nbsp &nbsp
		<img id="img_blob_split" src="/imgs/btn/koeye_split.png" onclick="blobColl.split();return false;" height=30>
		&nbsp &nbsp
<!--
		<img id="img_blob_togglegravity" src="/imgs/btn/koeyew_gravity.png" onclick="toggleGravity();return false;" 
			height=30>
			-->
		<img id="img_blob_togglegravity" src="/imgs/btn/blob_gravity_on.gif" 
			onclick="toggleGravity();return false;" 
			height=100>
<!--
		<img id="img_blob_togglegravity" src="/imgs/btn/blob_gravity_off.gif" 
			onclick="toggleGravity();return false;" 
			height=30>
	-->

		&nbsp &nbsp
		<img id="img_blob_join" src="/imgs/btn/koeye_join.png" onclick="blobColl.join();return false;" height=30>
		&nbsp &nbsp
<!--
		<button onclick="document.getElementById('audio_sound').play();">
			giggle
			</button>	
	-->
		&nbsp &nbsp
<!-- -= + =- -= = =- -= - =- -->
		<hr color=white>
		<br>
		<img id="img_blob" src="/imgs/btn/blob.png" onclick="onclicks('img_blob');return false;" onmouseover="changetext(content[0]);return false" height=50 border=0>
		<img id="img_blob_trans" src="/imgs/btn/blob_trans.png" onclick="onclicks('img_blob_trans');return false;" onmouseover="changetext(content[1]);return false" height=50 border=0>
		<img id="img_blob_red" src="/imgs/btn/blob_red.png" onclick="onclicks('img_blob_red');return false;" onmouseover="changetext(content[2]);return false" height=50 border=0>
		<img id="img_blob_pink" src="/imgs/btn/blob_pink.png" onclick="onclicks('img_blob_pink');return false;" onmouseover="changetext(content[3]);return false" height=50 border=0>
		<img id="img_blob_orange" src="/imgs/btn/blob_orange.png" onclick="onclicks('img_blob_orange');return false;" onmouseover="changetext(content[4]);return false" height=50 border=0>
		<img id="img_blob_yellow" src="/imgs/btn/blob_yellow.png" onclick="onclicks('img_blob_yellow');return false;" onmouseover="changetext(content[5]);return false" height=50 border=0>
		<img id="img_blob_green" src="/imgs/btn/blob_green.png" onclick="onclicks('img_blob_green');return false;" onmouseover="changetext(content[6]);return false" height=50 border=0>
		<img id="img_blob_blue" src="/imgs/btn/blob_blue.png" onclick="onclicks('img_blob_blue');return false;" onmouseover="changetext(content[7]);return false" height=50 border=0>
		<img id="img_blob_violet" src="/imgs/btn/blob_violet.png" onclick="onclicks('img_blob_violet');return false;" onmouseover="changetext(content[8]);return false" height=50 border=0>
		<img id="img_blob_black" src="/imgs/btn/blob_black.png" onclick="onclicks('img_blob_black');return false;" onmouseover="changetext(content[9]);return false" height=50 border=0>
		<img id="img_blob_white" src="/imgs/btn/blob_white.png" onclick="onclicks('img_blob_white');return false;" onmouseover="changetext(content[1]);return false" height=50 border=0>
<!--
		<img id="img_blobb" src="/imgs/btn/blobb.png" 
//			onclick="blobColl.addForce( new Vector(0.0,-50.0));return false;" 
			onclick="onclicks('img_blobb');return false;" 
			onmouseover="changetext(content[1]);return false"
			height=50>
		<img id="img_blobw" src="/imgs/btn/blobw.png" 
//			onclick="blobColl.addForce( new Vector(0.0,-50.0));return false;" 
			onclick="onclicks('img_blobw');return false;" 
			onmouseover="changetext(content[2]);return false"
			height=50>
	-->
		<br>
		<hr color=white>
		<img id="img_blob1" src="/imgs/btn/koeye_space.png" 
			onclick="blobColl.addForce( new Vector(0.0,-50.0));return false;" 
			onmouseover="blob_mouseover('1');return false"
			height=30>
		<img id="img_blob2 "src="/imgs/btn/koeye_up.png" 
			onclick="blobColl.addForce( new Vector(0.0,-50.0));return false;" 
			onmouseover="blob_mouseover('2');return false"
			height=30>
		<img id="img_blob3" src="/imgs/btn/koeye_space.png" 
			onclick="blobColl.addForce( new Vector(0.0,-50.0));return false;" 
			onmouseover="blob_mouseover('3');return false"
			height=30>
		<br>
		<img id="img_blob4" src="/imgs/btn/koeye_left.png" 
			onclick="blobColl.addForce( new Vector(-50.0,0.0));return false;" 
			onmouseover="blob_mouseover('4');return false"
			height=30>
		<img id="img_blob5" src="/imgs/btn/koeye_space.png" 
			onclick="blob_info('');return false;" 
			onmouseover="blob_mouseover('5');return false"
			height=30>
		<img id="img_blob6" src="/imgs/btn/koeye_right.png" 
			onclick="blobColl.addForce( new Vector(50.0,0.0));return false;" 
			onmouseover="blob_mouseover('6');return false"
			height=30>
		<br>
		<img id="img_blob7" src="/imgs/btn/koeye_space.png" 
			onclick="blobColl.addForce( new Vector(0.0,50.0));return false;" 
			onmouseover="blob_mouseover('7');return false"
			height=30>
		<img id="img_blob8" src="/imgs/btn/koeye_down.png" 
			onclick="blobColl.addForce( new Vector(0.0,50.0));return false;" 
			onmouseover="blob_mouseover('8');return false"
			height=30>
		<img id="img_blob9" src="/imgs/btn/koeye_space.png" 
			onclick="blobColl.addForce( new Vector(0.0,50.0));return false;" 
			onmouseover="blob_mouseover('9');return false"
			height=30>
<!-- -= l =- -= u =- -= d =- -= r =- -->
		<hr color=white>
<br>

<!--
		<img id="img_blob0" src="/imgs/btn/kob.png" onclick="blob_mouseover('0');return false;" height=25>
	-->

	<div id=img_blob_arrowkeys_toggle>
		<img id=img_blob_arrowkeys_toggle src=/imgs/btn/blob_trans.png height=20>
		</div id=img_blob_arrowkeys_toggle_end>

		<script id="script_blob_arrowkeys_toggle">
			var blob_arrowkeys="";
			function blob_arrowkeys_toggle(args) {
//				alert( "BUGS_1830 args="+args );
//				alert( "BUGS_1834 blob_arrowkeys="+blob_arrowkeys );
				if( document.getElementById('img_blob_arrowkeys_toggle')) {
					if( blob_arrowkeys == "on" ) {
						blob_arrowkeys = "";
						document.getElementById('img_blob_arrowkeys_toggle').src='/imgs/btn/kob.png';
//						alert( "BUGS_1841 blob_arrowkeys="+blob_arrowkeys );
						}
					else {
						blob_arrowkeys = "on";
						document.getElementById('img_blob_arrowkeys_toggle').src='/imgs/btn/kow.png';
//						alert( "BUGS_1842 blob_arrowkeys="+blob_arrowkeys );
						}
					}
				}
			</script id=script_blobs_end>
			</div id=div_blobs_end>
		</div id=layer_blobs_end>
	<hr color=white>



<img name="cat" src="/imgs/btn/ddcat.jpg" width="129" height="154" alt="DragnDrop Image">
<img src="/imgs/btn/spacer.png" width="1" height="1" alt="JavaScript Drag and Drop for Layers and Images"></td>
<img name="sepline1" src="/imgs/btn/spacer.png" width="1" height="1" alt="JavaScript Drag and Drop for Layers and Images">
<img name="smile1" src="/imgs/btn/smile.gif" width="11" height="11" alt="Drag &amp; Drop Image"> flow.
                <div id="reldiv"><ilayer name="reldivn4" bgcolor="#eeeeee"><div>
                </div></ilayer></div>
<a href="commands_e.htm">commands</a> 
<a class="code" href="javascript:void(0)" onclick=";if(window.dd &amp;&amp; dd.elements){dd.elements.cat.maximizeZ();dd.elements.cat.moveTo(dd.elements.cat.x+20, dd.elements.cat.y+20);}return false;">moveTo()</a>
                

<a class="code" href="javascript:void(0)" onclick=";if(window.dd &amp;&amp; dd.elements){dd.elements.cat.maximizeZ();dd.elements.cat.resizeTo((dd.elements.cat.w > 195)? 129 : 258, (dd.elements.cat.h > 221)? 154 : 308);}return false;">resizeTo()</a>,
                

<a class="code" href="javascript:void(0);" onclick=";if(window.dd &amp;&amp; dd.elements)dd.elements.cat.hide();return false;">hide()</a>
                

<a class="code" href="javascript:void(0);" onclick=";if(window.dd &amp;&amp; dd.elements) dd.elements.cat.show();return false;">show()</a>

<a class="code" href="javascript:void(0)" onclick="if (window.dd &amp;&amp; dd.elements) dd.elements.cat.copy();">copy()</a> 

<a class="code" href="javascript:void(0)" onclick=";if(window.dd &amp;&amp; dd.elements){var reldiv = dd.n4? dd.elements.reldivn4 : dd.elements.reldiv; reldiv.setBgColor((reldiv.bgColor == '#d3e6ff')? '#ffcccc' : (reldiv.bgColor == '#ffcccc')? '#cceecc' : (reldiv.bgColor == '#cceecc')? (dd.n4? '#eeeeee' : '#ffffff') : '#d3e6ff');}">much</a>

<!--
	<a href="api_e.htm">DHTML API</a> and  
	<a href="commands_e.htm">commands</a> reference.
	-->


                <div id="reldiv2"><ilayer name="reldiv2n4" bgcolor="#eeeeee"><div>
        	    </div></ilayer></div>

<img name="tryit" src="/imgs/btn/tryit.gif" width="50" height="17" alt="Drag n Drop DHTML JavaScript f&uuml;r Bilder und Layer">
<a href="#addons">command</a>
<img name="bikegoeteborg" src="/imgs/btn/northcapetrip_goeteborg.jpg" alt="On my first bicycle trip to Northcape" title="On my first bicycle trip to Northcape" align="left" border="0" height="444" width="426">
                <br clear="all">
<a name="browser"> </a>
<img align="right" name="leop" src="/imgs/btn/ddleop.jpg" alt="" width="300" height="205" hspace="4">
<img name="skitour" src="/imgs/btn/skitour_suedtirol_2.jpg" alt="" width="550" height="298">
<img src="/imgs/btn/spacer.png" width="1" height="1" alt="DHTML Drag &amp; Drop JavaScript for Images and Layers">
                        
<!--
	<a href="#top">Top of page</a>
	<a href="#browser">Cross Browser</a>
	<a href="#config">How&nbsp;to&nbsp;include</a>
	<a href="#addons">DHTML API</a>
	<a href="#download">Download</a>
	<a name="config"> </a>&nbsp;<br>&nbsp;<br><b>How to include the Drag &amp; Drop Script</b></big>
	<img align="left" name="chameleon" src="/imgs/btn/ddcham.jpg" width="155" height="95" alt="JavaScript, DHTML: Drag&amp;Drop Images">
	 <br>
	SET_DHTML(&quot;name1&quot;,&nbsp;&quot;name2&quot;,&nbsp;&quot;anotherLayer&quot;,&nbsp;&quot;lastImage&quot;);
	-->
 <br>
<img name="northcape" align="right" src="/imgs/btn/nothcapetrip2_northcape.jpg" alt="On my second bicycle trip to the Northcape" title="On my second bicycle trip to the Northcape" border="0" height="410" width="265">
<a href="#download">Download the JavaScript Drag Drop library</a>
<a name="notwork"> </a>
<a href="http://validator.w3.org/" target="_blank">http://validator.w3.org/</a>.
<a name="addons"> </a>
<hr color=white>
<img align="right" name="slidercanvas" src="/imgs/btn/transparent_300_120.gif" width="300" height="120" alt="">
<hr color=black>
<hr color=black>
<hr color=black>
<hr color=black>
<hr color=black>
<hr color=black>
<hr color=black>
                

<img align="left" name="muckl" src="/imgs/btn/koeyeb.png" alt="Drag Drop Image" width="100" height="50">
<img align="right" name="thumb" src="/ko/imgs/sliderthumb.gif" width="22" height="35" alt="">
<img align="right" name="track" src="/ko/imgs/track.gif" width="94" height="35" alt="">
<a class="code" href="javascript:void(0)" onclick="var muckl; if (window.dd &amp;&amp; dd.elements) (muckl = dd.elements.muckl).swapImage((muckl.src != muckl.defsrc)? '/imgs/btn/koeyeb.png' : '/imgs/btn/koeyew.png', true); return false;">swapImage()</a>
<hr color=white>
<hr color=white>
<hr color=white>
<hr color=white>
<hr color=white>
<hr color=white>
<hr color=white>
<hr color=white>

                <tt>dd.elements.image2.moveTo(300, 200);</tt>
<img name="low" src="/imgs/btn/kop12.png" alt="Drag&amp;Drop Image" width="100" height="40">
<img name="upleft" src="/imgs/btn/kop34.png" alt="Drag &amp; Drop Image" width="100" height="40">

<!--
<a href="commands_e.htm">Optional Commands</a>
<a href="api_e.htm">DHTML API, Scripting Drag Drop Items</a>
<a href="demos/demos.htm">Examples</a>
<a name="download"> </a>
<a href="history_e.htm">History of Updates</a>
	-->
		<div id=div_blobs>
			<h1>div_blobs</h1>
			<img id=img_blob_black
				onclick="onclicks('img_blob_black');return false;"
				src="/imgs/btn/blob_black.png"
				title="          blob_black"
				height=50 border=0>
			<img id=img_blob_tran
				onclick="onclicks('img_blob_tran');return false;"
				src="/imgs/btn/blob_tran.png"
				title="          blob_tran"
				height=50 border=0>
			<img id=img_blob_white
				onclick="onclicks('img_blob_white');return false;"
				src="/imgs/btn/blob_white.png"
				title="          blob_white"
				height=50 border=0>
			<img id=img_blob_red
				onclick="onclicks('img_blob_red');return false;"
				src="/imgs/btn/blob_red.png"
				title="          blob_red"
				height=50 border=0>
			<img id=img_blob_blue
				onclick="onclicks('img_blob_blue');return false;"
				src="/imgs/btn/blob_blue.png"
				title="          blob_blue"
				height=50 border=0>
			<img id=img_blob_yelimg_low
				onclick="onclicks('img_blob_yelimg_low');return false;"
				src="/imgs/btn/blob_yelimg_low.png"
				title="          blob_yelimg_low"
				height=50 border=0>
			<img id=img_blob_violet
				onclick="onclicks('img_blob_violet');return false;"
				src="/imgs/btn/blob_violet.png"
				title="          blob_violet"
				height=50 border=0>
			<img id=img_blob_pink
				onclick="onclicks('img_blob_pink');return false;"
				src="/imgs/btn/blob_pink.png"
				title="          blob_pink"
				height=50 border=0>
			<img id=img_blob_orange
				onclick="onclicks('img_blob_orange');return false;"
				src="/imgs/btn/blob_orange.png"
				title="          blob_orange"
				height=50 border=0>
			<img id=img_blob_green
				onclick="onclicks('img_blob_green');return false;"
				src="/imgs/btn/blob_green.png"
				title="          blob_green"
				height=50 border=0>
			<br>
			<img id=img_ko
				onclick="onclicks('img_ko');return false;"
				src="/imgs/btn/ko.png"
				title="          ko.png"
				height=50 border=0>
			<img id=img_ok
				onclick="onclicks('img_ok');return false;"
				src="/imgs/btn/ok.png"
				title="          ok.png"
				height=50 border=0>
			<img id=img_kob
				onclick="onclicks('img_kob');return false;"
				src="/imgs/btn/kob.png"
				title="          kob.png"
				height=50 border=0>
			<img id=img_kow
				onclick="onclicks('img_kow');return false;"
				src="/imgs/btn/kow.png"
				title="          kow.png"
				height=50 border=0>
			<img id=img_koeye
				onclick="onclicks('img_koeye');return false;"
				src="/imgs/btn/koeye.png"
				title="          koeye.png"
				height=50 border=0>
			<img id=img_img_koeyeb
				onclick="onclicks('img_koeyeb');return false;"
				src="/imgs/btn/koeyeb.png"
				title="          koeyeb.png"
				height=50 border=0>
			<img id=img_koeyew
				onclick="onclicks('img_koeyew');return false;"
				src="/imgs/btn/koeyew.png"
				title="          koeyew.png"
				height=50 border=0>

			<img id=img_kop1
				onclick="onclicks('img_kop1');return false;"
				src="/imgs/btn/kop1.png"
				title="          kop1"
				height=50 border=0>
			<img id=img_kop2
				onclick="onclicks('img_kop2');return false;"
				src="/imgs/btn/pod2.png"
				title="          pod2"
				height=50 border=0>
			<img id=img_kop3
				onclick="onclicks('img_kop3');return false;"
				src="/imgs/btn/pod3.png"
				title="          pod3"
				height=50 border=0>
			<img id=img_kop4
				onclick="onclicks('img_kop4');return false;"
				src="/imgs/btn/pod4.png"
				title="          pod4"
				height=50 border=0>
			<img id=img_kop12
				onclick="onclicks('img_kop12');return false;"
				src="/imgs/btn/kop12.png"
				title="          kop12"
				height=50 border=0>
			<img id=img_kop14
				onclick="onclicks('img_kop14');return false;"
				src="/imgs/btn/kop14.png"
				title="          kop14"
				height=50 border=0>
			<img id=img_kop23
				onclick="onclicks('img_kop23');return false;"
				src="/imgs/btn/kop23.png"
				title="          kop23"
				height=50 border=0>
			<img id=img_kop32
				onclick="onclicks('img_kop32');return false;"
				src="/imgs/btn/kop32.png"
				title="          kop32"
				height=50 border=0>
			<img id=img_kobrd
				onclick="onclicks('img_kobrd');return false;"
				src="/imgs/btn/kobrd.png"
				title="          kobrd"
				height=50 border=0>
			<img id=img_kobrdb
				onclick="onclicks('img_kobrdb');return false;"
				src="/imgs/btn/kobrdb.png"
				title="          kobrdb"
				height=50 border=0>
			<img id=img_kobrdw
				onclick="onclicks('img_kobrdw');return false;"
				src="/imgs/btn/kobrdw.png"
				title="          kobrdw"
				height=50 border=0>


			</div id=div_blobs_end>
		<br>
		<hr color=white>

	<br>
	<hr color=white>
	<h3>koala</h3>

<img align="right" name="koala" src="/imgs/btn/ddkoala.jpg" alt="Drag&amp;Drop Image" width="160" height="213">
<img name="redarrow" src="/imgs/btn/redarrow.gif" width="15" height="13" alt="" align="middle">
<a style="text-decoration:underline;" href="/js/wz/wz_dragdrop.zip">wz_dragdrop.zip</a> (12 KB)
                <div id="reltab">
                  <table>
                    <tr>
                      <td bgcolor="#d3e3f9">
                      </td>
                    </tr>
                  </table>
                </div>



<hr color=yellow>
<hr color=yellow>
<hr color=yellow>
<hr color=yellow>
<hr color=yellow>
		<br>
		<hr color=black>
		<h1>div_kludge</h1>
		<div id="div_tracker">
			<h1>div_tracker</h1>
			<hr color=black>
			<hr color=white>
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
			<form id=form_wz name="form_wz">
	                <table id=table_wz_tracker>
	                        <tr>
	                                <td align="right">name = </td>
	                                <td><input name="NAME" type="text" size="12"></td>
	                                <td align="right">&nbsp;&nbsp;x = </td>
	                                <td><input name="X" type="text" size="12"></td>
	                                <td align="right">&nbsp;&nbsp;y = </td>
	                                <td><input name="Y" type="text" size="12"></td>
	                                <td align="right">&nbsp;&nbsp;x = </td>
	                                <td><input name="H" type="text" size="12"></td>
	                                <td align="right">&nbsp;&nbsp;y = </td>
	                                <td><input name="W" type="text" size="12"></td>
	                                </tr>
	                        </table id=table_wz_tracker_end>
	                </form id=form_wz_end>
ffffffffffffffffffffffffffffffffffffffffffffff
	                <hr color=white>
	                <hr color=black>
			</div id="div_tracker_end">


		<br>
		<hr color=black>
		<h1>div_kludge</h1>
		<hr color=white>
		<div id="div_kludge">
			<h1>div_kludge <h1>
			<a name="div_kludge"> </a>
			<div id="div_kludge_body">
				<h2>div_kludge_body<h1>
				<img name="button" src="/imgs/btn/kob.png" alt="div_kludge" width="60" height="17">
				</div id=div_kludge_body_end>
			</div id=div_kludge_end>
		<br>
		<hr color=white>
		<hr color=black>

		<br>
		<hr color=black>
		<h1>div_kludge1</h1>
		<hr color=white>
		<div id="div_kludge1">
			<h1>div_kludge1 <h1>
			<a name="div_kludge1"> </a>
			<div id="div_kludge1_body">
				<h2>div_kludge1_body<h1>
				<img name="button" src="/imgs/btn/kob.png" alt="div_kludge1" width="60" height="17">
				</div id=div_kludge1_body_end>
			</div id=div_kludge1_end>
		<br>
		<hr color=white>
		<hr color=black>

		<br>
		<hr color=black>
		<h1>div_kludge2</h1>
		<hr color=white>
		<div id="div_kludge2">
			<h1>div_kludge2 <h1>
			<a name="div_kludge2"> </a>
			<div id="div_kludge2_body">
				<h2>div_kludge2_body<h1>
				<img name="button" src="/imgs/btn/kob.png" alt="div_kludge2_body" width="60" height="17">
				</div id=div_kludge2_body_end>
			</div id=div_kludge2_end>
		<br>
		<hr color=white>
		<hr color=black>

TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTt
<hr color=yellow>
<hr color=yellow>
<hr color=yellow>
<hr color=yellow>





		<div id="greylyr">
			<h1>div greylyr<h1>
			<a name="demolyr"> </a>
			<div id="ingreylyr">
				<h2>div ingreylyr<h1>
				<img name="button" src="/imgs/btn/kob.png" alt="Drag Drop JavaScript" width="60" height="17">

				</div id=ingreylry_end>
			</div id=greylyr_end>
		<br>
		<hr color=white>
		<div id="bluelyr">
			<h2>div bluelyr</h2>
			<a name="flexlyr"> </a>
			<a href="#demolyr">Back to first layer</a>
			</div id=bluelyr_end>
		<br>
		<hr color=white>
		<h1>script_set_dhtml</h1>

	<script id=script_set_dhtml >
<!--
		if( dhtmlflag != "" ) { set_dhtml(''); }

		SET_DHTML(
			CURSOR_MOVE, 
			RESIZABLE, NO_ALT, 
			SCROLL, 
			"bikegoeteborg"+TRANSPARENT, 
			"bluelyr"+TRANSPARENT, 
			"button"+VERTICAL+HORIZONTAL+CURSOR_DEFAULT, 
			"cat"+TRANSPARENT, 
			"chameleon", 
			"counter", 
			"greylyr"+TRANSPARENT, 
			"koala", 
			"leop", 
			"low", 
			"muckl"+TRANSPARENT+COPY+4, 
			"northcape"+TRANSPARENT, 
			"redarrow", 
			"reldiv", 
			"reldivn4", 
			"reldiv2"+TRANSPARENT, 
			"reldiv2n4"+TRANSPARENT, 
			"reltab", 
			"sepline1"+NO_DRAG, 
			"skitour"+TRANSPARENT, 
			"slidercanvas", 
			"smile1"+SCALABLE, 
			"thumb"+HORIZONTAL+MAXOFFLEFT+45+MAXOFFRIGHT+45, 
			"track"+NO_DRAG, 
			"tryit", 
			"upleft"
			);

		if( tracker_toggle == "on" ) {
			for (var i = 0; i < dd.elements.length; i++) {
				dd.elements[i].copy();
				dd.elements[i].copies[0].hide();
				}
                        }

// Kreuzotter-vs-Uplefts Animation, demonstrating how to use the API of the DragDrop-Library
		function ANIM() { 
			if (!dd.obj || !dd.op6) {
				if (dd.elements.low.z <= dd.elements.upleft.z)
					dd.elements.upleft.setZ(dd.elements.low.z - 1);

				dd.elements.upleft.moveTo(
					dd.elements.upleft.x <= -dd.elements.upleft.w?
					iW - dd.elements.upleft.w - 20 :
					(dd.elements.upleft.x - 3),
					(dd.obj==dd.elements.upleft)?
					dd.elements.upleft.y :
					(dd.elements.low.y - dh)
					);

				dd.elements.low.moveTo(
					dd.elements.low.x <= -dd.elements.low.w?
					iW-dd.elements.low.w-20 :
					(dd.elements.low.x-5),
					dd.elements.upleft.y + dh
					);
				}
			setTimeout("ANIM()", dd.kq? 200 : 100);
			}


// override funcs defined within the Lib
		function my_PickFunc() {
			if (dd.obj.name == 'button') dd.obj.swapImage(insetbutton.src);
			if (!dd.obj.name.indexOf('muckl') && dd.obj.x == dd.obj.defx) {
				if (dd.elements.muckl.copies.length < 80) dd.elements.muckl.copy();
				}
			if( tracker_toggle == "on" ) {
	                        dd.obj.copies[0].moveTo(dd.obj.x, dd.obj.y);
				dd.obj.copies[0].show();
				}
			}

		function my_DragFunc() {
			if (dd.obj.name == 'thumb') {
				var red = parseInt((dd.elements.thumb.x-dd.elements.thumb.defx)*255/45),
				blue = -red,
				green = (255-Math.abs(red)).toString(16);
				red = (red > 0? red : 0).toString(16);
				blue = (blue > 0? blue : 0).toString(16);
				while (red.length < 2) red = '0'+red;
				while (blue.length < 2) blue = '0'+blue;
				while (green.length < 2) green = '0'+green;
				dd.elements.slidercanvas.setBgColor("#"+red+green+blue);
				}
			}

		function my_DropFunc() {
			if( tracker_toggle == "on" ) {
	                        dd.obj.copies[0].hide();
                        	document.form_wz.NAME.value = dd.obj.name;
                        	document.form_wz.X.value = dd.obj.x;
	                        document.form_wz.Y.value = dd.obj.y;
                        	document.form_wz.H.value = dd.obj.H;
	                        document.form_wz.W.value = dd.obj.W;
				}

			if (dd.obj.name == 'button') {
				dd.obj.swapImage(outsetbutton.src);
				var minh = dd.elements.button.h+((dd.elements.button.y-dd.elements.greylyr.y)<<1);
				dd.elements.greylyr.resizeTo(
					dd.elements.greylyr.w,
					(dd.elements.greylyr.h != minh)? minh : 300
					);
				}
			}

		var anim_toggle="on";
		var tracker_toggle="";
		var outsetbutton = new Image();
		outsetbutton.src = '/imgs/btn/button_outset.gif';
		var insetbutton = new Image();
		insetbutton.src = '/imgs/btn/button_inset.gif';
		var iW = dd.getWndW(),
		dh = dd.elements.upleft.h - dd.elements.low.h;

		if( dhtmlflag != "" ) { 
			var iW = dd.getWndW();
			var iH = dd.getWndH();
			dh = dd.elements.img_blobb.h - dd.elements.img_blobb.h;
			var outsetbutton = new Image();
			outsetbutton.src = '/imgs/btn/koeyeb.png';
			var insetbutton = new Image();
			insetbutton.src = '/imgs/btn/koeyew.png';
			if( dhtmlflag != "dd" ) { ANIM(); }
			}




		ANIM();

		dd.elements.bluelyr.moveTo(
			(iW-dd.elements.bluelyr.w)>>1,
			dd.elements.counter.defy-dd.elements.bluelyr.h-30
			);
		dd.elements.greylyr.moveTo(dd.elements.sepline1.x-2, dd.elements.sepline1.y+110);
		dd.elements.bluelyr.show();
		dd.elements.greylyr.show();

		dd.elements.thumb.moveTo(dd.elements.track.x+36, dd.elements.track.y);
		dd.elements.thumb.setZ(dd.elements.track.z+1);
		dd.elements.track.addChild('thumb');
		dd.elements.thumb.defx = dd.elements.track.x+36;

//-->
		</script id=script_set_dhtml_end>
	</body>
	</html>

//


koh5_pano



Your browser does not support the HTML5 canvas element.


Drag mouse to navigate.

Navigation





17.Aug.2010, Martin Wengenmayer