DIR : /home/kozerus/public_html/ko/gojs_dataview.html

/home/kozerus/public_html/ko

<!doctype html>
<html>
	<head>
		<title>/fb/jtfdcr/dataview.html Data Visualization GoJS Sample</title>
<!-- Copyright 1998-2015 by Northwoods Software Corporation. -->
<!--
The div needs an explicit size or else we won't see anything.
Lets also add a border to help see the edges.
-->
		<style type="text/css">
			#myDiagram {
				border: solid 1px black;
				width:400px;
				height:400px;
				margin-right: 12px;
				float: left;
				background-color: whitesmoke;
				}

  #controls {
    border: solid 1px gray;
    width: 300px;
    background: #ffffff;
    padding: 5px;
    float: left;
  }

  #infoBoxHolder {
    z-index: 300;
    position: absolute;
    left: 5px;
  }

  #infoBox {
    border: 1px solid #999;
    padding: 8px;
    background-color: whitesmoke;
    opacity:0.9;
    position: relative;
    width: 170px;
    //height: 60px;
    font-family: arial, helvetica, sans-serif;
    font-weight: bold;
    font-size: 11px;
  }

  /* this is known as the "clearfix" hack to allow
     floated objects to add to the height of a div */
  #infoBox:after {
    visibility: hidden;
    display: block;
    font-size: 0;
    content: " ";
    clear: both;
    height: 0;
  }

  div.infoTitle {
    width: 100px;
    font-weight: normal;
    color:  #787878;
    float: left;
    margin-left: 4px;
  }

  div.infoValues {
    width: 30px;
    text-align: right;
    float: right;
  }

		label:hover, label:focus { background: #CEDFF2; }
		</style>

<!--	<script src="/fb/jtfdcr/gojs/samples/go.js"></script> -->
	<script src="data:/text/plain;base64,LyoNCiAqIEdvSlMgdjEuNC4yMCBKYXZhU2NyaXB0IExpYnJhcnkgZm9yIEhUTUwgQ2FudmFzIERpYWdyYW1zDQogKiBOb3J0aHdvb2RzIFNvZnR3YXJlLCBodHRwOi8vd3d3Lm53b29kcy5jb20vDQogKiBHb0pTIGFuZCBOb3J0aHdvb2RzIFNvZnR3YXJlIGFyZSByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgTm9ydGh3b29kcyBTb2Z0d2FyZSBDb3Jwb3JhdGlvbi4NCiAqIENvcHlyaWdodCAoQykgMTk5OC0yMDE1IGJ5IE5vcnRod29vZHMgU29mdHdhcmUgQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KICogVEhJUyBTT0ZUV0FSRSBJUyBMSUNFTlNFRC4gIFRIRSBMSUNFTlNFIEFHUkVFTUVOVCBJUyBBVDogaHR0cDovL3d3dy5nb2pzLm5ldC8xLjQuMjAvZG9jL2xpY2Vuc2UuaHRtbC4NCiAqLw0KKGZ1bmN0aW9uKHdpbmRvdykgeyB2YXIgYWEsY2E9e307aWYodm9pZCAwPT09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCl0aHJvdyB3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nKCJUaGUgSFRNTCBDYW52YXMgZWxlbWVudCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlcixvciB0aGlzIGJyb3dzZXIgaXMgaW4gQ29tcGF0aWJpbGl0eSBtb2RlLiIpLEVycm9yKCJUaGUgSFRNTCBDYW52YXMgZWxlbWVudCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlcixvciB0aGlzIGJyb3dzZXIgaXMgaW4gQ29tcGF0aWJpbGl0eSBtb2RlLiIpO2lmKCFPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18mJiFPYmplY3QuZGVmaW5lUHJvcGVydHkpdGhyb3cgRXJyb3IoIkdvSlMgcmVxdWlyZXMgYSBuZXdlciB2ZXJzaW9uIG9mIEphdmFTY3JpcHQiKTsNCk9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyYmIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbihhLGIsYyl7Yy5nZXQmJmEuX19kZWZpbmVHZXR0ZXJfXyhiLGMuZ2V0KTtjLnNldCYmYS5fX2RlZmluZVNldHRlcl9fKGIsYy5zZXQpfSk7T2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cEdldHRlcl9fJiYhT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciYmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9ZnVuY3Rpb24oYSxiKXtyZXR1cm57Z2V0OmEuX19sb29rdXBHZXR0ZXJfXyhiKSxzZXQ6YS5fX2xvb2t1cFNldHRlcl9fKGIpfX0pO09iamVjdC5nZXRQcm90b3R5cGVPZnx8KE9iamVjdC5nZXRQcm90b3R5cGVPZj1mdW5jdGlvbihhKXtyZXR1cm4gYS5fX3Byb3RvX199KTtPYmplY3QuaXNGcm96ZW58fChPYmplY3QuaXNGcm96ZW49ZnVuY3Rpb24oYSl7cmV0dXJuITA9PT1hLnFIfSk7DQpPYmplY3QuZnJlZXplfHwoT2JqZWN0LmZyZWV6ZT1mdW5jdGlvbihhKXthLnFIPSEwfSk7QXJyYXkuaXNBcnJheXx8KEFycmF5LmlzQXJyYXk9ZnVuY3Rpb24oYSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX0pO0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHwoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe3JldHVybiBnLmFwcGx5KGEsZi5jb25jYXQoZC5jYWxsKGFyZ3VtZW50cykpKX1mdW5jdGlvbiBjKCl7fXZhciBkPUFycmF5LnByb3RvdHlwZS5zbGljZSxmPWQuY2FsbChhcmd1bWVudHMsMSksZz10aGlzO2MucHJvdG90eXBlPXRoaXMucHJvdG90eXBlO2IucHJvdG90eXBlPW5ldyBjO3JldHVybiBifSk7DQooZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxiPVsibXMiLCJtb3oiLCJ3ZWJraXQiLCJvIl0sYz0wO2M8Yi5sZW5ndGgmJiF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lOysrYyl3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPXdpbmRvd1tiW2NdKyJSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiXSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9d2luZG93W2JbY10rIkNhbmNlbEFuaW1hdGlvbkZyYW1lIl18fHdpbmRvd1tiW2NdKyJDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiXTt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT1mdW5jdGlvbihiKXt2YXIgYz0obmV3IERhdGUpLmdldFRpbWUoKSxnPU1hdGgubWF4KDgsMTYtKGMtYSkpLGg9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtiKGMrZyl9LGcpO2E9YytnO3JldHVybiBofSk7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHwod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lPQ0KZnVuY3Rpb24oYSl7Y2xlYXJUaW1lb3V0KGEpfSl9KSgpO3ZhciBlPXtTejohMSx3SzohMSxHRjohMSxSRTohMSwkSDohMSxhc3NlcnQ6ITEsaks6bnVsbCxtSzpmdW5jdGlvbigpe30sb0s6ZnVuY3Rpb24oKXt9LG5LOmZ1bmN0aW9uKCl7fSxsSzpmdW5jdGlvbigpe30sdEs6ZnVuY3Rpb24oKXt9LHBLOmZ1bmN0aW9uKCl7fSxySzpmdW5jdGlvbigpe30scUs6ZnVuY3Rpb24oKXt9LGtLOiExLFFLOiExLE5LOiExLE9LOiExLENJOiExLHNLOmZ1bmN0aW9uKCl7fX0sZT1udWxsO2NhLkRlYnVnPW51bGw7DQp2YXIgdD17amk6T2JqZWN0LmZyZWV6ZShbXSksaEE6e30sRUU6MCxHdzp7fSxnQTowLFpzOiIuLi4iLGp0Ont9LE13OjAsbkI6W10sbHg6bnVsbCxrbjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpLFRwOiIiLGhLOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLGFBOltdLGlCOiJvbnRvdWNoc3RhcnQiaW4gd2luZG93LFRLOiJvbmdlc3R1cmVzdGFydCJpbiB3aW5kb3csbkU6ITEsVHM6bnVsbCxVczpudWxsLFNzOm51bGwsa3c6IiIsVG06d2luZG93Lm5hdmlnYXRvciYmMDx3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCI1MzQuMzAiKSYmMDx3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJBbmRyb2lkIiksUnc6d2luZG93Lm5hdmlnYXRvciYmMDx3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIDEwLjAiKSx1QTp3aW5kb3cubmF2aWdhdG9yJiYwPHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIlRyaWRlbnQvNyIpLA0KVW06MDw9bmF2aWdhdG9yLnBsYXRmb3JtLnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiTUFDIiksWEk6bmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKC8oaVBob25lfGlQb2R8aVBhZCkvaSksVUc6ITEsWEc6ITEsV0c6ITEsVkc6ITEsb0U6bnVsbCxacDohMSxTRzohMSxURzohMSxrRTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9dGhpcyxnPWFyZ3VtZW50cztjbGVhclRpbWVvdXQoZCk7ZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZD1udWxsO2N8fGEuYXBwbHkoZixnKX0sYik7YyYmIWQmJmEuYXBwbHkoZixnKX19LG06ZnVuY3Rpb24oYSl7ZSYmZS4kSCYmYWxlcnQoYSk7dGhyb3cgRXJyb3IoYSk7fSxMOmZ1bmN0aW9uKGEsYil7aWYoYS5vYil7dmFyIGM9IlRoZSBvYmplY3QgaXMgZnJvemVuLCBzbyBpdHMgcHJvcGVydGllcyBjYW5ub3QgYmUgc2V0OiAiK2EudG9TdHJpbmcoKTt2b2lkIDAhPT1iJiYoYys9IiAgdG8gdmFsdWU6ICIrYik7dC5tKGMpfX0sDQpsOmZ1bmN0aW9uKGEsYixjLGQpe2EgaW5zdGFuY2VvZiBifHwoYz10LmFpKGMpLHZvaWQgMCE9PWQmJihjKz0iLiIrZCksdC5iYyhhLGIsYykpfSxpOmZ1bmN0aW9uKGEsYixjLGQpe3R5cGVvZiBhIT09YiYmKGM9dC5haShjKSx2b2lkIDAhPT1kJiYoYys9Ii4iK2QpLHQuYmMoYSxiLGMpKX0scTpmdW5jdGlvbihhLGIsYyl7Im51bWJlciI9PT10eXBlb2YgYSYmaXNGaW5pdGUoYSl8fChiPXQuYWkoYiksdm9pZCAwIT09YyYmKGIrPSIuIitjKSx0Lm0oYisiIG11c3QgYmUgYSByZWFsIG51bWJlciB0eXBlLCBhbmQgbm90IE5hTiBvciBJbmZpbml0eTogIithKSl9LEFhOmZ1bmN0aW9uKGEsYixjLGQpe2EgaW5zdGFuY2VvZiBkYSYmYS5SZT09PWJ8fChjPXQuYWkoYyksdm9pZCAwIT09ZCYmKGMrPSIuIitkKSx0LmJjKGEsImEgY29uc3RhbnQgb2YgY2xhc3MgIit0LnhnKGIpLGMpKX0sVG86ZnVuY3Rpb24oYSxiKXsic3RyaW5nIj09PXR5cGVvZiBhP2VhKGEpfHx0Lm0oJ0NvbG9yICInKw0KYSsnIiBpcyBub3QgYSB2YWxpZCBjb2xvciBzdHJpbmcgZm9yICcrYik6YSBpbnN0YW5jZW9mIGZhfHx0Lm0oIlZhbHVlIGZvciAiK2IrIiBtdXN0IGJlIGEgY29sb3Igc3RyaW5nIG9yIGEgQnJ1c2gsIG5vdCAiK2EpfSxiYzpmdW5jdGlvbihhLGIsYyxkKXtiPXQuYWkoYik7Yz10LmFpKGMpO3ZvaWQgMCE9PWQmJihjKz0iLiIrZCk7InN0cmluZyI9PT10eXBlb2YgYT90Lm0oYysiIHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiAiK2IrJzogIicrYSsnIicpOnQubShjKyIgdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mICIrYisiOiAiK2EpfSxsYTpmdW5jdGlvbihhLGIsYyxkKXtjPXQuYWkoYyk7dm9pZCAwIT09ZCYmKGMrPSIuIitkKTt0Lm0oYysiIGlzIG5vdCBpbiB0aGUgcmFuZ2UgIitiKyI6ICIrYSl9LGFkOmZ1bmN0aW9uKGEpe3QubSh0LnhnKGEpKyIgY29uc3RydWN0b3IgY2Fubm90IHRha2UgYW55IGFyZ3VtZW50cy4iKX0sUGI6ZnVuY3Rpb24oYSl7dC5tKCJDb2xsZWN0aW9uIHdhcyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uOiAiKw0KYS50b1N0cmluZygpKyJcbiAgUGVyaGFwcyB5b3Ugc2hvdWxkIGl0ZXJhdGUgb3ZlciBhIGNvcHkgb2YgdGhlIGNvbGxlY3Rpb24sXG4gIG9yIHlvdSBjb3VsZCBjb2xsZWN0IGl0ZW1zIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgY29sbGVjdGlvbiBhZnRlciB0aGUgaXRlcmF0aW9uLiIpfSx0cmFjZTpmdW5jdGlvbihhKXt3aW5kb3cmJndpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2coYSl9LHJiOmZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiPT09dHlwZW9mIGEmJm51bGwhPT1hfSx6YzpudWxsLFhtOmZ1bmN0aW9uKGEsYixjLGQpe2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBmPWFbYl07dC5yYihmKSYmKGY9dC55ZihmLGMsZCkpO2FbYl09Zn1yZXR1cm4gZHx8dC56YyhhKT9hOndpbmRvdy5rby5vYnNlcnZhYmxlQXJyYXkoYSl9LHlmOmZ1bmN0aW9uKGEsYixjKXtpZihhKWZvcih2YXIgZCBpbiBhKSJfX2dvaGFzaGlkIiE9PWQmJihhW2RdPXQuaUooYSxkLGIsDQpjKSk7cmV0dXJuIGF9LGlKOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBmPWFbYl0sZztnPXQuemMoZik/ZjpBcnJheS5pc0FycmF5KGYpP3QuWG0oZixiLGMsZCk6d2luZG93LmtvLm9ic2VydmFibGUoZik7aWYoZCl7aWYoZD1nLkZCKXtoPWMuX19nb2hhc2hpZDtkW2hdJiYoZFtoXS5kaXNwb3NlKCksZGVsZXRlIGRbaF0pO3ZhciBoPSExLGs7Zm9yKGsgaW4gZCl7aD0hMDticmVha319IWgmJmcub3UmJihnLm91LmRpc3Bvc2UoKSxkZWxldGUgZy5vdSl9ZWxzZXtnLm91fHwoZy5vdT1nLnN1YnNjcmliZShmdW5jdGlvbihhKXtnLnRvPWF9LG51bGwsImJlZm9yZUNoYW5nZSIpKTtkPWcuRkI7ZHx8KGcuRkI9ZD17fSk7dmFyIGg9Yy5fX2dvaGFzaGlkO2RbaF18fChkW2hdPWcuc3Vic2NyaWJlKGZ1bmN0aW9uKGQpe2MubXgoYSxiLGcudG8sZCl9KSl9cmV0dXJuIGd9LGlzQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSl8fHQuemMmJnQuemMoYSl8fGEgaW5zdGFuY2VvZg0KTm9kZUxpc3R8fGEgaW5zdGFuY2VvZiBIVE1MQ29sbGVjdGlvbn0sWkk6ZnVuY3Rpb24oYSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSl8fHQuemMmJnQuemMoYSl9LFJzOmZ1bmN0aW9uKGEsYixjKXt0LmlzQXJyYXkoYSl8fHQuYmMoYSwiQXJyYXkgb3IgTm9kZUxpc3Qgb3IgSFRNTENvbGxlY3Rpb24iLGIsYyl9LHZiOmZ1bmN0aW9uKGEpe3QuemMmJnQuemMoYSkmJihhPWEoKSk7cmV0dXJuIGEubGVuZ3RofSxtYjpmdW5jdGlvbihhLGIpe3QuemMmJnQuemMoYSkmJihhPWEoKSk7QXJyYXkuaXNBcnJheShhKTtyZXR1cm4gYVtiXX0sT0Q6ZnVuY3Rpb24oYSxiLGMpe3QuemMmJnQuemMoYSkmJihhPWEoKSk7QXJyYXkuaXNBcnJheShhKT9hW2JdPWM6dC5tKCJDYW5ub3QgcmVwbGFjZSBhbiBvYmplY3QgaW4gYW4gSFRNTENvbGxlY3Rpb24gb3IgTm9kZUxpc3QgYXQgIitiKX0sUXo6ZnVuY3Rpb24oYSxiKXt0LnpjJiZ0LnpjKGEpJiYoYT1hKCkpO2lmKEFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIGEuaW5kZXhPZihiKTsNCmZvcih2YXIgYz1hLmxlbmd0aCxkPTA7ZDxjO2QrKylpZihhW2RdPT09YilyZXR1cm4gZDtyZXR1cm4tMX0sVGk6ZnVuY3Rpb24oYSxiLGMpe3QuemMmJnQuemMoYSkmJihhPWEoKSk7QXJyYXkuaXNBcnJheShhKT9iPj1hLmxlbmd0aD9hLnB1c2goYyk6YS5zcGxpY2UoYiwwLGMpOnQubSgiQ2Fubm90IGluc2VydCBhbiBvYmplY3QgaW50byBhbiBIVE1MQ29sbGVjdGlvbiBvciBOb2RlTGlzdDogIitjKyIgYXQgIitiKX0sVWk6ZnVuY3Rpb24oYSxiKXt0LnpjJiZ0LnpjKGEpJiYoYT1hKCkpO0FycmF5LmlzQXJyYXkoYSk/Yj49YS5sZW5ndGg/YS5wb3AoKTphLnNwbGljZShiLDEpOnQubSgiQ2Fubm90IHJlbW92ZSBhbiBvYmplY3QgZnJvbSBhbiBIVE1MQ29sbGVjdGlvbiBvciBOb2RlTGlzdCBhdCAiK2IpfSxieTpbXSxLOmZ1bmN0aW9uKCl7dmFyIGE9dC5ieS5wb3AoKTtyZXR1cm4gdm9pZCAwPT09YT9uZXcgdzphfSxsYzpmdW5jdGlvbihhLGIpe3ZhciBjPXQuYnkucG9wKCk7aWYodm9pZCAwPT09DQpjKXJldHVybiBuZXcgdyhhLGIpO2MueD1hO2MueT1iO3JldHVybiBjfSxCOmZ1bmN0aW9uKGEpe3QuYnkucHVzaChhKX0sQkI6W10sQWw6ZnVuY3Rpb24oKXt2YXIgYT10LkJCLnBvcCgpO3JldHVybiB2b2lkIDA9PT1hP25ldyBnYTphfSxiazpmdW5jdGlvbihhKXt0LkJCLnB1c2goYSl9LGV5OltdLEdmOmZ1bmN0aW9uKCl7dmFyIGE9dC5leS5wb3AoKTtyZXR1cm4gdm9pZCAwPT09YT9uZXcgeDphfSxoazpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZj10LmV5LnBvcCgpO2lmKHZvaWQgMD09PWYpcmV0dXJuIG5ldyB4KGEsYixjLGQpO2YueD1hO2YueT1iO2Yud2lkdGg9YztmLmhlaWdodD1kO3JldHVybiBmfSxoYzpmdW5jdGlvbihhKXt0LmV5LnB1c2goYSl9LENCOltdLHBoOmZ1bmN0aW9uKCl7dmFyIGE9dC5DQi5wb3AoKTtyZXR1cm4gdm9pZCAwPT09YT9uZXcgaGE6YX0sV2U6ZnVuY3Rpb24oYSl7dC5DQi5wdXNoKGEpfSxneTpudWxsLHU6ZnVuY3Rpb24oKXt2YXIgYT10Lmd5O3JldHVybiBudWxsIT09DQphPyh0Lmd5PW51bGwsYSk6bmV3IGlhfSx2OmZ1bmN0aW9uKGEpe2EucmVzZXQoKTt0Lmd5PWF9LEFCOltdLENiOmZ1bmN0aW9uKCl7dmFyIGE9dC5BQi5wb3AoKTtyZXR1cm4gdm9pZCAwPT09YT9bXTphfSx5YTpmdW5jdGlvbihhKXthLmxlbmd0aD0wO3QuQUIucHVzaChhKX0sREI6MSxBYzpmdW5jdGlvbihhKXthLl9fZ29oYXNoaWQ9dC5EQisrfSxpdDpmdW5jdGlvbihhKXt2YXIgYj1hLl9fZ29oYXNoaWQ7dm9pZCAwPT09YiYmKGI9dC5EQisrLGEuX19nb2hhc2hpZD1iKTtyZXR1cm4gYn0sb2Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19nb2hhc2hpZH0sZzpmdW5jdGlvbihhLGIsYyl7Im5hbWUiIT09YiYmImxlbmd0aCIhPT1iJiYoYVtiXT1jKX0sZ2E6ZnVuY3Rpb24oYSxiKXtiLm95PWE7Y2FbYV09Yn0sS2E6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKCl7fWMucHJvdG90eXBlPWIucHJvdG90eXBlO2EucHJvdG90eXBlPW5ldyBjO2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPWF9LA0KWWg6ZnVuY3Rpb24oYSl7YS51SD0hMH0sZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oYSxiLGMsZCxmKXt0LmkoYSwiZnVuY3Rpb24iLCJVdGlsLmRlZmluZVByb3BlcnR5OmNsYXNzZnVuYyIpO3QuaShiLCJvYmplY3QiLCJVdGlsLmRlZmluZVByb3BlcnR5OnByb3BvYmoiKTt0LmkoYywiZnVuY3Rpb24iLCJVdGlsLmRlZmluZVByb3BlcnR5OmdldHRlciIpO3QuaShkLCJmdW5jdGlvbiIsIlV0aWwuZGVmaW5lUHJvcGVydHk6c2V0dGVyIik7Zm9yKHZhciBnIGluIGIpe3ZhciBoPWJbZ107Yj17Z2V0OmMsc2V0OmR9O2lmKHZvaWQgMCE9PWYpZm9yKHZhciBrIGluIGYpYltrXT1mW2tdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSxnLGIpO2Y9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLnByb3RvdHlwZSxnKTtoJiZmJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5wcm90b3R5cGUsaCxmKTtpZihlJiZoKXt2YXIgbD1oLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpKw0KaC5zbGljZSgxKTtoPT09bCYmdC5tKCdEZWZpbmluZyBjYXBpdGFsaXplZCBwcm9wZXJ0eSAiJytsKyciIT8nKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5wcm90b3R5cGUsbCx7Z2V0OmZ1bmN0aW9uKCl7dC5Sd3x8dC51QXx8dC50cmFjZSgnR2V0dGluZyB0aGUgcHJvcGVydHkgIicrbCsnIiBpcyBwcm9iYWJseSBub3Qgd2hhdCB5b3UgaW50ZW5kZWQ6IGl0IGlzIGNhcGl0YWxpemVkIGJ1dCBzaG91bGQgYmUgc3BlbGxlZCAiJytoKyciJyl9LHNldDpmdW5jdGlvbigpe3QubSgnU2V0dGluZyB0aGUgcHJvcGVydHkgIicrbCsnIiBpcyBwcm9iYWJseSBub3Qgd2hhdCB5b3UgaW50ZW5kZWQ6IGl0IGlzIGNhcGl0YWxpemVkIGJ1dCBzaG91bGQgYmUgc3BlbGxlZCAiJytoKyciJyl9fSl9YnJlYWt9fSxBOmZ1bmN0aW9uKGEsYixjLGQpe3QuaShhLCJmdW5jdGlvbiIsIlV0aWwuZGVmaW5lUmVhZE9ubHlQcm9wZXJ0eTpjbGFzc2Z1bmMiKTt0LmkoYiwib2JqZWN0IiwiVXRpbC5kZWZpbmVSZWFkT25seVByb3BlcnR5OnByb3BvYmoiKTsNCnQuaShjLCJmdW5jdGlvbiIsIlV0aWwuZGVmaW5lUmVhZE9ubHlQcm9wZXJ0eTpnZXR0ZXIiKTtmb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtiPXtnZXQ6YyxzZXQ6ZnVuY3Rpb24oYSl7dC5tKCdUaGUgcHJvcGVydHkgIicrZysnIiBpcyByZWFkLW9ubHkgYW5kIGNhbm5vdCBiZSBzZXQgdG8gJythKX19O2lmKHZvaWQgMCE9PWQpZm9yKHZhciBoIGluIGQpYltoXT1kW2hdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSxmLGIpO2Q9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLnByb3RvdHlwZSxmKTtnJiZkJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5wcm90b3R5cGUsZyxkKTtpZihlJiZnKXt2YXIgaz1nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2cuc2xpY2UoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEucHJvdG90eXBlLGsse2dldDpmdW5jdGlvbigpe3QuUnd8fHQudUF8fHQudHJhY2UoJ0dldHRpbmcgdGhlIHByb3BlcnR5ICInK2srJyIgaXMgcHJvYmFibHkgbm90IHdoYXQgeW91IGludGVuZGVkOiBpdCBpcyBjYXBpdGFsaXplZCBidXQgc2hvdWxkIGJlIHNwZWxsZWQgIicrDQpnKyciJyl9LHNldDpmdW5jdGlvbigpe3QubSgnU2V0dGluZyB0aGUgcmVhZC1vbmx5IHByb3BlcnR5ICInK2srJyIgaXMgcHJvYmFibHkgbm90IHdoYXQgeW91IGludGVuZGVkOiBpdCBpcyBjYXBpdGFsaXplZCBidXQgc2hvdWxkIGJlIHNwZWxsZWQgIicrZysnIiwgYW5kIGNhbm5vdCBiZSBzZXQgYW55d2F5Jyl9fSl9YnJlYWt9fSxWZDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiBiKWJbY109ITA7YS5wcm90b3R5cGUuWUM9Yn0sYWk6ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/IiI6InN0cmluZyI9PT10eXBlb2YgYT9hOiJmdW5jdGlvbiI9PT10eXBlb2YgYT90LnhnKGEpOm51bGw9PT1hPyIqIjoiIn0seGc6ZnVuY3Rpb24oYSl7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBhKXtpZihhLm95KXJldHVybiBhLm95O2lmKGEubmFtZSlyZXR1cm4gYS5uYW1lO3ZhciBiPWEudG9TdHJpbmcoKSxjPWIuaW5kZXhPZigiKCIpO2lmKGI9Yi5zdWJzdHJpbmcoOSxjKS50cmltKCkpcmV0dXJuIGEub3k9DQpifWVsc2UgaWYoIm9iamVjdCI9PT10eXBlb2YgYSYmYS5jb25zdHJ1Y3RvcilyZXR1cm4gdC54ZyhhLmNvbnN0cnVjdG9yKTtyZXR1cm4gdHlwZW9mIGF9LHc6ZnVuY3Rpb24oYSxiLGMpe3QuaShhLCJmdW5jdGlvbiIsIlV0aWwuZGVmaW5lRW51bVZhbHVlOmNsYXNzZnVuYyIpO3QuaShiLCJzdHJpbmciLCJVdGlsLmRlZmluZUVudW1WYWx1ZTpuYW1lIik7dC5pKGMsIm51bWJlciIsIlV0aWwuZGVmaW5lRW51bVZhbHVlOm51bSIpO2M9bmV3IGRhKGEsYixjKTtPYmplY3QuZnJlZXplKGMpO2FbYl09Yzt2YXIgZD1hLmJ1O2R8fChkPW5ldyBqYSgic3RyaW5nIixkYSksYS5idT1kKTtkLmFkZChiLGMpO3JldHVybiBjfSxPbTpmdW5jdGlvbihhLGIpe2lmKCFiKXJldHVybiBudWxsO3QuaShhLCJmdW5jdGlvbiIsIlV0aWwuZmluZEVudW1WYWx1ZUZvck5hbWU6Y2xhc3NmdW5jIik7dC5pKGIsInN0cmluZyIsIlV0aWwuZmluZEVudW1WYWx1ZUZvck5hbWU6bmFtZSIpO3ZhciBjPWEuYnU7DQpyZXR1cm4gYz9jLnphKGIpOm51bGx9LGhJOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBmPXt9LGc7Zm9yKGcgaW4gYSl7Zm9yKHZhciBoPSExLGs9MTtrPGFyZ3VtZW50cy5sZW5ndGg7aysrKWlmKGFyZ3VtZW50c1trXT09PWcpe2g9ITA7YnJlYWt9aHx8KGZbZ109YVtnXSl9cmV0dXJuIGZ9LGhiOmZ1bmN0aW9uKGEsYil7aWYoIWF8fCFiKXJldHVybiBudWxsO3ZhciBjPXZvaWQgMDt0cnl7ImZ1bmN0aW9uIj09PXR5cGVvZiBiP2M9YihhKToiZnVuY3Rpb24iPT09dHlwZW9mIGEuZ2V0QXR0cmlidXRlPyhjPWEuZ2V0QXR0cmlidXRlKGIpLG51bGw9PT1jJiYoYz12b2lkIDApKTooYz1hW2JdLHQuemMmJnQuemMoYykmJihjPWMoKSkpfWNhdGNoKGQpe2UmJnQudHJhY2UoInByb3BlcnR5IGdldCBlcnJvcjogIitkLnRvU3RyaW5nKCkpfXJldHVybiBjfSxTYTpmdW5jdGlvbihhLGIsYyl7aWYoYSYmYil0cnl7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBiKWIoYSxjKTtlbHNlIGlmKCJmdW5jdGlvbiI9PT0NCnR5cGVvZiBhLnNldEF0dHJpYnV0ZSlhLnNldEF0dHJpYnV0ZShiLGMpO2Vsc2UgaWYodC56Yyl7dmFyIGQ9YVtiXTt0LnpjKGQpP2QoYyk6YVtiXT1jfWVsc2UgYVtiXT1jfWNhdGNoKGYpe2UmJnQudHJhY2UoInByb3BlcnR5IHNldCBlcnJvcjogIitmLnRvU3RyaW5nKCkpfX0sdXg6ZnVuY3Rpb24oYSxiKXt0LmkoYSwib2JqZWN0IiwiU2V0dGluZyBwcm9wZXJ0aWVzIHJlcXVpcmVzIE9iamVjdHMgYXMgYXJndW1lbnRzIik7dC5pKGIsIm9iamVjdCIsIlNldHRpbmcgcHJvcGVydGllcyByZXF1aXJlcyBPYmplY3RzIGFzIGFyZ3VtZW50cyIpO3ZhciBjPWU7Y3x8KGU9dCk7dmFyIGQ9YSBpbnN0YW5jZW9mIHksZj1hIGluc3RhbmNlb2YgeixnO2ZvcihnIGluIGIpe2d8fHQubSgiU2V0dGluZyBwcm9wZXJ0aWVzIHJlcXVpcmVzIG5vbi1lbXB0eSBwcm9wZXJ0eSBuYW1lcyIpO3ZhciBoPWEsaz1nO2lmKGR8fGYpe3ZhciBsPWcuaW5kZXhPZigiLiIpO2lmKDA8bCl7dmFyIG09Zy5zdWJzdHJpbmcoMCwNCmwpO2Q/aD1hLm9lKG0pOihoPWFbbV0pfHwoaD1hLndiW21dKTtoP2s9Zy5zdWJzdHIobCsxKTp0Lm0oIlVuYWJsZSB0byBmaW5kIG9iamVjdCBuYW1lZDogIittKyIgaW4gIithLnRvU3RyaW5nKCkrIiB3aGVuIHRyeWluZyB0byBzZXQgcHJvcGVydHk6ICIrZyl9fWlmKCJfIiE9PWtbMF0mJiF0Lkt3KGgsaykpaWYoZiYmdC5LdyhhLndiLGspKWg9YS53YjtlbHNlIGlmKGYmJm1hKGEsaykpe2EuS3ooayxiW2tdKTtjb250aW51ZX1lbHNlIHQubSgnVHJ5aW5nIHRvIHNldCB1bmRlZmluZWQgcHJvcGVydHkgIicraysnIiBvbiBvYmplY3Q6ICcraC50b1N0cmluZygpKTtoW2tdPWJbZ107Il8iPT09a1swXSYmKGw9aC5LbCxsfHwobD1bXSxoLktsPWwpLGwucHVzaChrKSl9ZT1jO3JldHVybiBhfSxLdzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoYSk7YyYmYyE9PUZ1bmN0aW9uOyl7aWYoYy5oYXNPd25Qcm9wZXJ0eShiKSlyZXR1cm4hMDt2YXIgZD0NCmMuWUM7aWYoZCYmZFtiXSlyZXR1cm4hMDtjPU9iamVjdC5nZXRQcm90b3R5cGVPZihjKX1yZXR1cm4hMX0sVUQ6ZnVuY3Rpb24oYSxiKXtpZighdC5yYihiKXx8YiBpbnN0YW5jZW9mIEVsZW1lbnR8fGIgaW5zdGFuY2VvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpcmV0dXJuIiI7dmFyIGM9IiIsZDtmb3IoZCBpbiBiKWlmKCJzdHJpbmciIT09dHlwZW9mIGQpIiI9PT1jJiYoYz1iKyJcbiIpLGMrPSIgICIrZCsiIGlzIG5vdCBhIHN0cmluZyBwcm9wZXJ0eVxuIjtlbHNlIGlmKCJfIiE9PWQuY2hhckF0KDApJiYhKDI+PWQubGVuZ3RoKSl7dmFyIGY9dC5oYihiLGQpO251bGw9PT1mfHwiZnVuY3Rpb24iPT09dHlwZW9mIGZ8fHQuS3coYixkKXx8KCIiPT09YyYmKGM9YisiXG4iKSxjKz0nICB1bmtub3duIHByb3BlcnR5ICInK2QrJyIgaGFzIHZhbHVlOiAnK2YrIiBhdCAiK2ErIlxuIil9cmV0dXJuIGN9LGl3OmZ1bmN0aW9uKGEsYil7aWYoYiYmIm51bWJlciIhPT10eXBlb2YgYiYmDQoic3RyaW5nIiE9PXR5cGVvZiBiJiYiYm9vbGVhbiIhPT10eXBlb2YgYiYmImZ1bmN0aW9uIiE9PXR5cGVvZiBiKWlmKHZvaWQgMCE9PXQub2QoYikpe2lmKCF0LkZ2LmNvbnRhaW5zKGIpKWlmKHQuRnYuYWRkKGIpLHQuZnYuYWRkKHQuVUQoYSxiKSksYiBpbnN0YW5jZW9mIEJ8fGIgaW5zdGFuY2VvZiBDfHxiIGluc3RhbmNlb2YgamEpZm9yKHZhciBjPWIuaztjLm5leHQoKTspdC5pdyhhKyJbIitjLmtleSsiXSIsYy52YWx1ZSk7ZWxzZSBmb3IoYyBpbiBiKXt2YXIgZD10LmhiKGIsYyk7aWYodm9pZCAwIT09ZCYmbnVsbCE9PWQmJnQucmIoZCkmJmQhPT1iLllDKXtpZihiIGluc3RhbmNlb2YgbmEpe2lmKGQ9PT1iLm5vKWNvbnRpbnVlfWVsc2UgaWYoYiBpbnN0YW5jZW9mIHkpe2lmKCJkYXRhIj09PWN8fGQ9PT1iLk1sKWNvbnRpbnVlO2lmKCJpdGVtQXJyYXkiPT09Y3x8ZD09PWIueWkpY29udGludWU7aWYoYiBpbnN0YW5jZW9mIEUmJmQ9PT1iLkdqKWNvbnRpbnVlfWVsc2UgaWYoIShiIGluc3RhbmNlb2YNCnopKWlmKGIgaW5zdGFuY2VvZiBvYSl7aWYoImFyY2hldHlwZUdyb3VwRGF0YSI9PT1jfHxkPT09Yi5qeSljb250aW51ZX1lbHNlIGlmKGIgaW5zdGFuY2VvZiBwYSl7aWYoImFyY2hldHlwZUxpbmtEYXRhIj09PWN8fGQ9PT1iLmx5KWNvbnRpbnVlO2lmKCJhcmNoZXR5cGVMYWJlbE5vZGVEYXRhIj09PWN8fGQ9PT1iLmt5KWNvbnRpbnVlfWVsc2UgaWYoYiBpbnN0YW5jZW9mIHFhKXtpZigiYXJjaGV0eXBlTm9kZURhdGEiPT09Y3x8ZD09PWIud2spY29udGludWV9ZWxzZSBpZihiIGluc3RhbmNlb2YgRil7aWYoIm5vZGVEYXRhQXJyYXkiPT09Y3x8ZD09PWIuTWUpY29udGludWU7aWYoImxpbmtEYXRhQXJyYXkiPT09Y3x8ZD09PWIuWGd8fGQ9PT1iLmNtKWNvbnRpbnVlO2lmKGQ9PT1iLkJjKWNvbnRpbnVlO2lmKGQ9PT1iLnloKWNvbnRpbnVlfWVsc2UgaWYoYiBpbnN0YW5jZW9mIHJhfHxiIGluc3RhbmNlb2Ygc2F8fGIgaW5zdGFuY2VvZiB1YSljb250aW51ZTt0Lml3KGErIi4iKw0KYyxkKX19fWVsc2UgaWYoQXJyYXkuaXNBcnJheShiKSlmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKXQuaXcoYSsiWyIrYysiXSIsYltjXSk7ZWxzZSB0LmZ2LmFkZCh0LlVEKGEsYikpfSxjSTpmdW5jdGlvbihhKXt2b2lkIDA9PT10LkZ2P3QuRnY9bmV3IEM6dC5Gdi5jbGVhcigpO3QuZnY9bmV3IHdhO3QuaXcoIiIsYSk7YT10LmZ2LnRvU3RyaW5nKCk7dC5mdj1udWxsO3JldHVybiBhfSxGSjpmdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wOzI1Nj5jO2MrKyliW2NdPWM7Zm9yKHZhciBkPTAsZixjPTA7MjU2PmM7YysrKWQ9KGQrYltjXSsxMTkpJTI1NixmPWJbY10sYltjXT1iW2RdLGJbZF09Zjtmb3IodmFyIGQ9Yz0wLGc9IiIsaD0wO2g8YS5sZW5ndGg7aCsrKWM9KGMrMSklMjU2LGQ9KGQrYltjXSklMjU2LGY9YltjXSxiW2NdPWJbZF0sYltkXT1mLGcrPVN0cmluZy5mcm9tQ2hhckNvZGUoYS5jaGFyQ29kZUF0KGgpXmJbKGJbY10rYltkXSklMjU2XSk7cmV0dXJuIGd9LFFJOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0NCltdLGM9MDsyNTY+YztjKyspYlsiMDEyMzQ1Njc4OWFiY2RlZiIuY2hhckF0KGM+PjQpKyIwMTIzNDU2Nzg5YWJjZGVmIi5jaGFyQXQoYyYxNSldPVN0cmluZy5mcm9tQ2hhckNvZGUoYyk7YS5sZW5ndGglMiYmKGE9IjAiK2EpO2Zvcih2YXIgZD1bXSxmPTAsYz0wO2M8YS5sZW5ndGg7Yys9MilkW2YrK109YlthLnN1YnN0cihjLDIpXTthPWQuam9pbigiIik7cmV0dXJuIiI9PT1hPyIwIjphfSxIYTpmdW5jdGlvbihhKXtyZXR1cm4gdC5GSih0LlFJKGEpKX0sRWw6bnVsbCxjdzoiN2RhNzFjYTBhZDM4MWU5MCIsZEk6IkBDT0xPUjEiLGVJOiJAQ09MT1IyIn07DQp0LkVsPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksYj1hLmdldENvbnRleHQoIjJkIik7Ylt0LkhhKCI3Y2ExMWFiZmQwMjIwMjg4NDYiKV09dC5IYSgiMzk4YzM1OTdjMDEyMzgiKTtmb3IodmFyIGM9WyI1ZGE3M2M4MGEzMzMwZDg1NGY5ZTVlNjcxZDY2MzMiLCIzMmFiNWZmM2IyNmY0MmRjMGVkOTBmMjI0MDI5MTNiNTRhZTYyNDc1OTBkYTRiYjIxYzMyNGJhM2E4NGUzODU3NzYiLCI1NGE3MDJmM2U1MzkwOWM0NDc4MjRjNjcwNjYwM2ZhZjRjZmIyMzZjZGZkYTVkZTE0YzEzNGJhMWE5NWEyZDRjN2NjNmY5M2MxMzg3IiwiNzRiZjE5YmNlNzI1NTU4NzRjODYiXSxkPTE7NT5kO2QrKyliW3QuSGEoIjdjYTExYWJmZDczMzAzOTAiKV0odC5IYShjW2QtMV0pLDEwLDE1KmQrMCk7Ylt0LkhhKCI3Y2ExMWFiZmQwMjIwMjg4NDYiKV09dC5IYSgiMzlmMDQ2ZWJiMzZlNGIiKTtmb3IoZD0xOzU+ZDtkKyspYlt0LkhhKCI3Y2ExMWFiZmQ3MzMwMzkwIildKHQuSGEoY1tkLQ0KMV0pLDEwLDE1KmQrMCk7aWYoNCE9PWMubGVuZ3RofHwiNSIhPT1jWzBdWzBdfHwiNyIhPT1jWzNdWzBdKXQudz1mdW5jdGlvbihhLGIpe3ZhciBjPW5ldyBkYShhLGIsMik7T2JqZWN0LmZyZWV6ZShjKTthW2JdPWM7dmFyIGQ9YS5idTtkfHwoZD1uZXcgamEoInN0cmluZyIsZGEpLGEuYnU9ZCk7ZC5hZGQoYixjKTtyZXR1cm4gY307cmV0dXJuIGF9KCk7ZnVuY3Rpb24gZGEoYSxiLGMpe3QuQWModGhpcyk7dGhpcy5MQj1hO3RoaXMuWWI9Yjt0aGlzLnpIPWN9ZGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQueGcodGhpcy5MQikrIi4iK3RoaXMuWWJ9O3QuQShkYSx7UmU6ImNsYXNzVHlwZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTEJ9KTt0LkEoZGEse25hbWU6Im5hbWUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLllifSk7dC5BKGRhLHt2YWx1ZToidmFsdWUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnpIfSk7DQpmdW5jdGlvbiB3YSgpe3RoaXMuS0I9W119d2EucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuS0Iuam9pbigiIil9O3dhLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7YSYmdGhpcy5LQi5wdXNoKGEpfTtmdW5jdGlvbiB5YSgpe310LkEoeWEse2s6Iml0ZXJhdG9yIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pO3lhLnByb3RvdHlwZS5yZXNldD15YS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt9O3lhLnByb3RvdHlwZS5uZXh0PXlhLnByb3RvdHlwZS5oYXNOZXh0PXlhLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuITF9O3lhLnByb3RvdHlwZS5maXJzdD15YS5wcm90b3R5cGUuJGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07eWEucHJvdG90eXBlLmFueT1mdW5jdGlvbigpe3JldHVybiExfTt5YS5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3lhLnByb3RvdHlwZS5lYWNoPWZ1bmN0aW9uKCl7fTsNCnQuQSh5YSx7Y291bnQ6ImNvdW50In0sZnVuY3Rpb24oKXtyZXR1cm4gMH0pO3lhLnByb3RvdHlwZS5jZz1mdW5jdGlvbigpe307eWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkVtcHR5SXRlcmF0b3IifTt0LmFnPW5ldyB5YTtmdW5jdGlvbiBBYShhKXt0aGlzLmtleT0tMTt0aGlzLnZhbHVlPWF9dC5WZChBYSx7a2V5OiEwLHZhbHVlOiEwfSk7dC5BKEFhLHtrOiJpdGVyYXRvciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTtBYS5wcm90b3R5cGUucmVzZXQ9QWEucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5rZXk9LTF9O0FhLnByb3RvdHlwZS5uZXh0PUFhLnByb3RvdHlwZS5oYXNOZXh0PUFhLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuLTE9PT10aGlzLmtleT8odGhpcy5rZXk9MCwhMCk6ITF9O0FhLnByb3RvdHlwZS5maXJzdD1BYS5wcm90b3R5cGUuJGE9ZnVuY3Rpb24oKXt0aGlzLmtleT0wO3JldHVybiB0aGlzLnZhbHVlfTsNCkFhLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oYSl7dGhpcy5rZXk9LTE7cmV0dXJuIGEodGhpcy52YWx1ZSl9O0FhLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oYSl7dGhpcy5rZXk9LTE7cmV0dXJuIGEodGhpcy52YWx1ZSl9O0FhLnByb3RvdHlwZS5lYWNoPWZ1bmN0aW9uKGEpe3RoaXMua2V5PS0xO2EodGhpcy52YWx1ZSl9O3QuQShBYSx7Y291bnQ6ImNvdW50In0sZnVuY3Rpb24oKXtyZXR1cm4gMX0pO0FhLnByb3RvdHlwZS5jZz1mdW5jdGlvbigpe3RoaXMudmFsdWU9bnVsbH07QWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlNpbmdsZXRvbkl0ZXJhdG9yKCIrdGhpcy52YWx1ZSsiKSJ9O2Z1bmN0aW9uIEJhKGEpe3RoaXMuQmQ9YTt0aGlzLkpqPW51bGw7dGhpcy5yZXNldCgpfXQuVmQoQmEse2tleTohMCx2YWx1ZTohMH0pO3QuQShCYSx7azoiaXRlcmF0b3IifSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSk7dC5nKEJhLCJwcmVkaWNhdGUiLEJhLnByb3RvdHlwZS5zbCk7DQp0LmRlZmluZVByb3BlcnR5KEJhLHtzbDoicHJlZGljYXRlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Kan0sZnVuY3Rpb24oYSl7dGhpcy5Kaj1hfSk7QmEucHJvdG90eXBlLnJlc2V0PUJhLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuQmQ7YS5BZD1udWxsO3RoaXMuWWE9YS5WO3RoaXMuVmM9LTF9O0JhLnByb3RvdHlwZS5uZXh0PUJhLnByb3RvdHlwZS5oYXNOZXh0PUJhLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5CZDthLlYhPT10aGlzLllhJiZ0LlBiKGEpO3ZhciBhPWEubixiPWEubGVuZ3RoLGM9Kyt0aGlzLlZjLGQ9dGhpcy5KajtpZihudWxsIT09ZClmb3IoO2M8Yjspe3ZhciBmPWFbY107aWYoZChmKSlyZXR1cm4gdGhpcy5rZXk9dGhpcy5WYz1jLHRoaXMudmFsdWU9ZiwhMDtjKyt9ZWxzZXtpZihjPGIpcmV0dXJuIHRoaXMua2V5PWMsdGhpcy52YWx1ZT1hW2NdLCEwO3RoaXMuY2coKX1yZXR1cm4hMX07DQpCYS5wcm90b3R5cGUuZmlyc3Q9QmEucHJvdG90eXBlLiRhPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5CZDt0aGlzLllhPWEuVjt0aGlzLlZjPTA7dmFyIGE9YS5uLGI9YS5sZW5ndGgsYz10aGlzLkpqO2lmKG51bGwhPT1jKXtmb3IodmFyIGQ9MDtkPGI7KXt2YXIgZj1hW2RdO2lmKGMoZikpcmV0dXJuIHRoaXMua2V5PXRoaXMuVmM9ZCx0aGlzLnZhbHVlPWY7ZCsrfXJldHVybiBudWxsfXJldHVybiAwPGI/KGY9YVswXSx0aGlzLmtleT0wLHRoaXMudmFsdWU9Zik6bnVsbH07QmEucHJvdG90eXBlLmFueT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLkJkO2IuQWQ9bnVsbDt2YXIgYz1iLlY7dGhpcy5WYz0tMTtmb3IodmFyIGQ9Yi5uLGY9ZC5sZW5ndGgsZz10aGlzLkpqLGg9MDtoPGY7aCsrKXt2YXIgaz1kW2hdO2lmKG51bGw9PT1nfHxnKGspKXtpZihhKGspKXJldHVybiEwO2IuViE9PWMmJnQuUGIoYil9fXJldHVybiExfTsNCkJhLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5CZDtiLkFkPW51bGw7dmFyIGM9Yi5WO3RoaXMuVmM9LTE7Zm9yKHZhciBkPWIubixmPWQubGVuZ3RoLGc9dGhpcy5KaixoPTA7aDxmO2grKyl7dmFyIGs9ZFtoXTtpZihudWxsPT09Z3x8ZyhrKSl7aWYoIWEoaykpcmV0dXJuITE7Yi5WIT09YyYmdC5QYihiKX19cmV0dXJuITB9O0JhLnByb3RvdHlwZS5lYWNoPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuQmQ7Yi5BZD1udWxsO3ZhciBjPWIuVjt0aGlzLlZjPS0xO2Zvcih2YXIgZD1iLm4sZj1kLmxlbmd0aCxnPXRoaXMuSmosaD0wO2g8ZjtoKyspe3ZhciBrPWRbaF07aWYobnVsbD09PWd8fGcoaykpYShrKSxiLlYhPT1jJiZ0LlBiKGIpfX07dC5BKEJhLHtjb3VudDoiY291bnQifSxmdW5jdGlvbigpe3ZhciBhPXRoaXMuSmo7aWYobnVsbCE9PWEpe2Zvcih2YXIgYj0wLGM9dGhpcy5CZC5uLGQ9Yy5sZW5ndGgsZj0wO2Y8ZDtmKyspYShjW2ZdKSYmYisrO3JldHVybiBifXJldHVybiB0aGlzLkJkLm4ubGVuZ3RofSk7DQpCYS5wcm90b3R5cGUuY2c9ZnVuY3Rpb24oKXt0aGlzLmtleT0tMTt0aGlzLnZhbHVlPW51bGw7dGhpcy5ZYT0tMTt0aGlzLkpqPW51bGw7dGhpcy5CZC5BZD10aGlzfTtCYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTGlzdEl0ZXJhdG9yQCIrdGhpcy5WYysiLyIrdGhpcy5CZC5jb3VudH07ZnVuY3Rpb24gQ2EoYSl7dGhpcy5CZD1hO3RoaXMucmVzZXQoKX10LlZkKENhLHtrZXk6ITAsdmFsdWU6ITB9KTt0LkEoQ2Ese2s6Iml0ZXJhdG9yIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pO0NhLnByb3RvdHlwZS5yZXNldD1DYS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLkJkO2EuZm89bnVsbDt0aGlzLllhPWEuVjt0aGlzLlZjPWEubi5sZW5ndGh9Ow0KQ2EucHJvdG90eXBlLm5leHQ9Q2EucHJvdG90eXBlLmhhc05leHQ9Q2EucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLkJkO2EuViE9PXRoaXMuWWEmJnQuUGIoYSk7dmFyIGI9LS10aGlzLlZjO2lmKDA8PWIpcmV0dXJuIHRoaXMua2V5PWIsdGhpcy52YWx1ZT1hLm5bYl0sITA7dGhpcy5jZygpO3JldHVybiExfTtDYS5wcm90b3R5cGUuZmlyc3Q9Q2EucHJvdG90eXBlLiRhPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5CZDt0aGlzLllhPWEuVjt2YXIgYj1hLm47dGhpcy5WYz1hPWIubGVuZ3RoLTE7cmV0dXJuIDA8PWE/KGI9YlthXSx0aGlzLmtleT1hLHRoaXMudmFsdWU9Yik6bnVsbH07Q2EucHJvdG90eXBlLmFueT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLkJkO2IuZm89bnVsbDt2YXIgYz1iLlYsZD1iLm4sZj1kLmxlbmd0aDt0aGlzLlZjPWY7Zm9yKGYtPTE7MDw9ZjtmKyspe2lmKGEoZFtmXSkpcmV0dXJuITA7Yi5WIT09YyYmdC5QYihiKX1yZXR1cm4hMX07DQpDYS5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuQmQ7Yi5mbz1udWxsO3ZhciBjPWIuVixkPWIubixmPWQubGVuZ3RoO3RoaXMuVmM9Zjtmb3IoZi09MTswPD1mO2YrKyl7aWYoIWEoZFtmXSkpcmV0dXJuITE7Yi5WIT09YyYmdC5QYihiKX1yZXR1cm4hMH07Q2EucHJvdG90eXBlLmVhY2g9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5CZDtiLmZvPW51bGw7dmFyIGM9Yi5WLGQ9Yi5uLGY9ZC5sZW5ndGg7dGhpcy5WYz1mO2ZvcihmLT0xOzA8PWY7ZisrKWEoZFtmXSksYi5WIT09YyYmdC5QYihiKX07dC5BKENhLHtjb3VudDoiY291bnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkJkLm4ubGVuZ3RofSk7Q2EucHJvdG90eXBlLmNnPWZ1bmN0aW9uKCl7dGhpcy5rZXk9LTE7dGhpcy52YWx1ZT1udWxsO3RoaXMuWWE9LTE7dGhpcy5CZC5mbz10aGlzfTsNCkNhLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJMaXN0SXRlcmF0b3JCYWNrd2FyZHMoIit0aGlzLlZjKyIvIit0aGlzLkJkLmNvdW50KyIpIn07DQpmdW5jdGlvbiBCKGEpe3QuQWModGhpcyk7dGhpcy5vYj0hMTt0aGlzLm49W107dGhpcy5WPTA7dGhpcy5mbz10aGlzLkFkPW51bGw7dm9pZCAwPT09YXx8bnVsbD09PWE/dGhpcy5kYT1udWxsOiJzdHJpbmciPT09dHlwZW9mIGE/Im9iamVjdCI9PT1hfHwic3RyaW5nIj09PWF8fCJudW1iZXIiPT09YXx8ImJvb2xlYW4iPT09YXx8ImZ1bmN0aW9uIj09PWE/dGhpcy5kYT1hOnQubGEoYSwidGhlIHN0cmluZyAnb2JqZWN0JywgJ251bWJlcicsICdzdHJpbmcnLCAnYm9vbGVhbicsIG9yICdmdW5jdGlvbiciLCJMaXN0IGNvbnN0cnVjdG9yOiB0eXBlIik6ImZ1bmN0aW9uIj09PXR5cGVvZiBhP3RoaXMuZGE9YT09PU9iamVjdD8ib2JqZWN0IjphPT09U3RyaW5nPyJzdHJpbmciOmE9PT1OdW1iZXI/Im51bWJlciI6YT09PUJvb2xlYW4/ImJvb2xlYW4iOmE9PT1GdW5jdGlvbj8iZnVuY3Rpb24iOmE6dC5sYShhLCJudWxsLCBhIHByaW1pdGl2ZSB0eXBlIG5hbWUsIG9yIGEgY2xhc3MgdHlwZSIsDQoiTGlzdCBjb25zdHJ1Y3RvcjogdHlwZSIpfXQuZ2EoIkxpc3QiLEIpO0IucHJvdG90eXBlLlBnPWZ1bmN0aW9uKGEpe251bGwhPT10aGlzLmRhJiYoInN0cmluZyI9PT10eXBlb2YgdGhpcy5kYT90eXBlb2YgYT09PXRoaXMuZGEmJm51bGwhPT1hfHx0LmJjKGEsdGhpcy5kYSk6YSBpbnN0YW5jZW9mIHRoaXMuZGF8fHQuYmMoYSx0aGlzLmRhKSl9O0IucHJvdG90eXBlLlFkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5WO2ErKzs5OTk5OTk5OTk8YSYmKGE9MCk7dGhpcy5WPWF9O0IucHJvdG90eXBlLmZyZWV6ZT1CLnByb3RvdHlwZS5mcmVlemU9ZnVuY3Rpb24oKXt0aGlzLm9iPSEwO3JldHVybiB0aGlzfTtCLnByb3RvdHlwZS50aGF3PUIucHJvdG90eXBlLkxhPWZ1bmN0aW9uKCl7dGhpcy5vYj0hMTtyZXR1cm4gdGhpc307Qi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTGlzdCgiK3QuYWkodGhpcy5kYSkrIikjIit0Lm9kKHRoaXMpfTsNCkIucHJvdG90eXBlLmFkZD1CLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7bnVsbCE9PWEmJihlJiZ0aGlzLlBnKGEpLHQuTCh0aGlzLGEpLHRoaXMubi5wdXNoKGEpLHRoaXMuUWQoKSl9O0IucHJvdG90eXBlLmFkZEFsbD1CLnByb3RvdHlwZS5PZT1mdW5jdGlvbihhKXtpZihudWxsPT09YSlyZXR1cm4gdGhpczt0LkwodGhpcyk7dmFyIGI9dGhpcy5uO2lmKHQuaXNBcnJheShhKSlmb3IodmFyIGM9dC52YihhKSxkPTA7ZDxjO2QrKyl7dmFyIGY9dC5tYihhLGQpO2UmJnRoaXMuUGcoZik7Yi5wdXNoKGYpfWVsc2UgZm9yKGE9YS5rO2EubmV4dCgpOylmPWEudmFsdWUsZSYmdGhpcy5QZyhmKSxiLnB1c2goZik7dGhpcy5RZCgpO3JldHVybiB0aGlzfTtCLnByb3RvdHlwZS5jbGVhcj1CLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3QuTCh0aGlzKTt0aGlzLm4ubGVuZ3RoPTA7dGhpcy5RZCgpfTsNCkIucHJvdG90eXBlLmNvbnRhaW5zPUIucHJvdG90eXBlLmhhcz1CLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihhKXtpZihudWxsPT09YSlyZXR1cm4hMTtlJiZ0aGlzLlBnKGEpO3JldHVybi0xIT09dGhpcy5uLmluZGV4T2YoYSl9O0IucHJvdG90eXBlLmluZGV4T2Y9Qi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihhKXtpZihudWxsPT09YSlyZXR1cm4tMTtlJiZ0aGlzLlBnKGEpO3JldHVybiB0aGlzLm4uaW5kZXhPZihhKX07Qi5wcm90b3R5cGUuZWx0PUIucHJvdG90eXBlLmdldD1CLnByb3RvdHlwZS53YT1mdW5jdGlvbihhKXtlJiZ0LnEoYSxCLCJlbHQ6aSIpO3ZhciBiPXRoaXMubjsoMD5hfHxhPj1iLmxlbmd0aCkmJnQubGEoYSwiMCA8PSBpIDwgbGVuZ3RoIixCLCJlbHQ6aSIpO3JldHVybiBiW2FdfTsNCkIucHJvdG90eXBlLnNldEVsdD1CLnByb3RvdHlwZS5zZXQ9Qi5wcm90b3R5cGUuTWc9ZnVuY3Rpb24oYSxiKXtlJiYodGhpcy5QZyhiKSx0LnEoYSxCLCJzZXRFbHQ6aSIpKTt2YXIgYz10aGlzLm47KDA+YXx8YT49Yy5sZW5ndGgpJiZ0LmxhKGEsIjAgPD0gaSA8IGxlbmd0aCIsQiwic2V0RWx0OmkiKTt0LkwodGhpcyxhKTtjW2FdPWJ9O0IucHJvdG90eXBlLmZpcnN0PUIucHJvdG90eXBlLiRhPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uO3JldHVybiAwPT09YS5sZW5ndGg/bnVsbDphWzBdfTtCLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMubixjPXRoaXMuVixkPWIubGVuZ3RoLGY9MDtmPGQ7ZisrKXtpZihhKGJbZl0pKXJldHVybiEwO3RoaXMuViE9PWMmJnQuUGIodGhpcyl9cmV0dXJuITF9Ow0KQi5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLm4sYz10aGlzLlYsZD1iLmxlbmd0aCxmPTA7ZjxkO2YrKyl7aWYoIWEoYltmXSkpcmV0dXJuITE7dGhpcy5WIT09YyYmdC5QYih0aGlzKX1yZXR1cm4hMH07Qi5wcm90b3R5cGUuZWFjaD1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5uLGM9dGhpcy5WLGQ9Yi5sZW5ndGgsZj0wO2Y8ZDtmKyspYShiW2ZdKSx0aGlzLlYhPT1jJiZ0LlBiKHRoaXMpfTtCLnByb3RvdHlwZS5pbnNlcnRBdD1CLnByb3RvdHlwZS5KZD1mdW5jdGlvbihhLGIpe2UmJih0aGlzLlBnKGIpLHQucShhLEIsImluc2VydEF0OmkiKSk7MD5hJiZ0LmxhKGEsIj49IDAiLEIsImluc2VydEF0OmkiKTt0LkwodGhpcyxhKTt2YXIgYz10aGlzLm47YT49Yy5sZW5ndGg/Yy5wdXNoKGIpOmMuc3BsaWNlKGEsMCxiKTt0aGlzLlFkKCk7cmV0dXJuITB9Ow0KQi5wcm90b3R5cGUucmVtb3ZlPUIucHJvdG90eXBlWyJkZWxldGUiXT1CLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuITE7ZSYmdGhpcy5QZyhhKTt0LkwodGhpcyxhKTt2YXIgYj10aGlzLm47YT1iLmluZGV4T2YoYSk7aWYoLTE9PT1hKXJldHVybiExO2E9PT1iLmxlbmd0aC0xP2IucG9wKCk6Yi5zcGxpY2UoYSwxKTt0aGlzLlFkKCk7cmV0dXJuITB9O0IucHJvdG90eXBlLnJlbW92ZUF0PUIucHJvdG90eXBlLnFkPWZ1bmN0aW9uKGEpe2UmJnQucShhLEIsInJlbW92ZUF0OmkiKTt2YXIgYj10aGlzLm47KDA+YXx8YT49Yi5sZW5ndGgpJiZ0LmxhKGEsIjAgPD0gaSA8IGxlbmd0aCIsQiwicmVtb3ZlQXQ6aSIpO3QuTCh0aGlzLGEpO2E9PT1iLmxlbmd0aC0xP2IucG9wKCk6Yi5zcGxpY2UoYSwxKTt0aGlzLlFkKCl9Ow0KQi5wcm90b3R5cGUucmVtb3ZlUmFuZ2U9Qi5wcm90b3R5cGUucmVtb3ZlUmFuZ2U9ZnVuY3Rpb24oYSxiKXtlJiYodC5xKGEsQiwicmVtb3ZlUmFuZ2U6ZnJvbSIpLHQucShiLEIsInJlbW92ZVJhbmdlOnRvIikpO3ZhciBjPXRoaXMubjsoMD5hfHxhPj1jLmxlbmd0aCkmJnQubGEoYSwiMCA8PSBmcm9tIDwgbGVuZ3RoIixCLCJlbHQ6ZnJvbSIpOygwPmJ8fGI+PWMubGVuZ3RoKSYmdC5sYShiLCIwIDw9IHRvIDwgbGVuZ3RoIixCLCJlbHQ6dG8iKTt0LkwodGhpcyxhKTt2YXIgZD1jLnNsaWNlKChifHxhKSsxfHxjLmxlbmd0aCk7Yy5sZW5ndGg9MD5hP2MubGVuZ3RoK2E6YTtjLnB1c2guYXBwbHkoYyxkKTt0aGlzLlFkKCl9O0IucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IEIodGhpcy5kYSksYj10aGlzLm4sYz10aGlzLmNvdW50LGQ9MDtkPGM7ZCsrKWEuYWRkKGJbZF0pO3JldHVybiBhfTsNCkIucHJvdG90eXBlLnRvQXJyYXk9Qi5wcm90b3R5cGUuSWU9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5uLGI9dGhpcy5jb3VudCxjPUFycmF5KGIpLGQ9MDtkPGI7ZCsrKWNbZF09YVtkXTtyZXR1cm4gY307Qi5wcm90b3R5cGUudG9TZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IEModGhpcy5kYSksYj10aGlzLm4sYz10aGlzLmNvdW50LGQ9MDtkPGM7ZCsrKWEuYWRkKGJbZF0pO3JldHVybiBhfTtCLnByb3RvdHlwZS5zb3J0PUIucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24oYSl7ZSYmdC5pKGEsImZ1bmN0aW9uIixCLCJzb3J0OnNvcnRmdW5jIik7dC5MKHRoaXMpO3RoaXMubi5zb3J0KGEpO3RoaXMuUWQoKTtyZXR1cm4gdGhpc307DQpCLnByb3RvdHlwZS5zb3J0UmFuZ2U9Qi5wcm90b3R5cGUuVXA9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMubixmPWQubGVuZ3RoO3ZvaWQgMD09PWImJihiPTApO3ZvaWQgMD09PWMmJihjPWYpO2UmJih0LmkoYSwiZnVuY3Rpb24iLEIsInNvcnRSYW5nZTpzb3J0ZnVuYyIpLHQucShiLEIsInNvcnRSYW5nZTpmcm9tIiksdC5xKGMsQiwic29ydFJhbmdlOnRvIikpO3QuTCh0aGlzKTt2YXIgZz1jLWI7aWYoMT49ZylyZXR1cm4gdGhpczsoMD5ifHxiPj1mLTEpJiZ0LmxhKGIsIjAgPD0gZnJvbSA8IGxlbmd0aCIsQiwic29ydFJhbmdlOmZyb20iKTtpZigyPT09ZylyZXR1cm4gYz1kW2JdLGY9ZFtiKzFdLDA8YShjLGYpJiYoZFtiXT1mLGRbYisxXT1jLHRoaXMuUWQoKSksdGhpcztpZigwPT09YilpZihjPj1mKWQuc29ydChhKTtlbHNlIGZvcihnPWQuc2xpY2UoMCxjKSxnLnNvcnQoYSksYT0wO2E8YzthKyspZFthXT1nW2FdO2Vsc2UgaWYoYz49Zilmb3IoZz1kLnNsaWNlKGIpLGcuc29ydChhKSwNCmE9YjthPGY7YSsrKWRbYV09Z1thLWJdO2Vsc2UgZm9yKGc9ZC5zbGljZShiLGMpLGcuc29ydChhKSxhPWI7YTxjO2ErKylkW2FdPWdbYS1iXTt0aGlzLlFkKCk7cmV0dXJuIHRoaXN9O0IucHJvdG90eXBlLnJldmVyc2U9Qi5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbigpe3QuTCh0aGlzKTt0aGlzLm4ucmV2ZXJzZSgpO3RoaXMuUWQoKTtyZXR1cm4gdGhpc307dC5BKEIse2NvdW50OiJjb3VudCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubi5sZW5ndGh9KTt0LkEoQix7c2l6ZToic2l6ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubi5sZW5ndGh9KTt0LkEoQix7bGVuZ3RoOiJsZW5ndGgifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm4ubGVuZ3RofSk7dC5BKEIse2s6Iml0ZXJhdG9yIn0sZnVuY3Rpb24oKXtpZigwPj10aGlzLm4ubGVuZ3RoKXJldHVybiB0LmFnO3ZhciBhPXRoaXMuQWQ7cmV0dXJuIG51bGwhPT1hPyhhLnJlc2V0KCksYSk6bmV3IEJhKHRoaXMpfSk7DQp0LkEoQix7V206Iml0ZXJhdG9yQmFja3dhcmRzIn0sZnVuY3Rpb24oKXtpZigwPj10aGlzLm4ubGVuZ3RoKXJldHVybiB0LmFnO3ZhciBhPXRoaXMuZm87cmV0dXJuIG51bGwhPT1hPyhhLnJlc2V0KCksYSk6bmV3IENhKHRoaXMpfSk7ZnVuY3Rpb24gRGEoYSl7dGhpcy5wPWE7dGhpcy5yZXNldCgpfXQuVmQoRGEse2tleTohMCx2YWx1ZTohMH0pO3QuQShEYSx7azoiaXRlcmF0b3IifSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSk7RGEucHJvdG90eXBlLnJlc2V0PURhLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3ZhciBhPXRoaXMucDthLkFkPW51bGw7dGhpcy5ZYT1hLlY7dGhpcy55Yj1udWxsfTsNCkRhLnByb3RvdHlwZS5uZXh0PURhLnByb3RvdHlwZS5oYXNOZXh0PURhLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wO2EuViE9PXRoaXMuWWEmJnQuUGIoYSk7dmFyIGI9dGhpcy55YixiPW51bGw9PT1iP2EuY2I6Yi5UYjtpZihudWxsIT09YilyZXR1cm4gdGhpcy55Yj1iLHRoaXMudmFsdWU9Yi52YWx1ZSx0aGlzLmtleT1iLmtleSwhMDt0aGlzLmNnKCk7cmV0dXJuITF9O0RhLnByb3RvdHlwZS5maXJzdD1EYS5wcm90b3R5cGUuJGE9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnA7dGhpcy5ZYT1hLlY7YT1hLmNiO2lmKG51bGwhPT1hKXt0aGlzLnliPWE7dmFyIGI9YS52YWx1ZTt0aGlzLmtleT1hLmtleTtyZXR1cm4gdGhpcy52YWx1ZT1ifXJldHVybiBudWxsfTsNCkRhLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wO2IuQWQ9bnVsbDt2YXIgYz1iLlY7dGhpcy55Yj1udWxsO2Zvcih2YXIgZD1iLmNiO251bGwhPT1kOyl7aWYoYShkLnZhbHVlKSlyZXR1cm4hMDtiLlYhPT1jJiZ0LlBiKGIpO2Q9ZC5UYn1yZXR1cm4hMX07RGEucHJvdG90eXBlLmFsbD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnA7Yi5BZD1udWxsO3ZhciBjPWIuVjt0aGlzLnliPW51bGw7Zm9yKHZhciBkPWIuY2I7bnVsbCE9PWQ7KXtpZighYShkLnZhbHVlKSlyZXR1cm4hMTtiLlYhPT1jJiZ0LlBiKGIpO2Q9ZC5UYn1yZXR1cm4hMH07RGEucHJvdG90eXBlLmVhY2g9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wO2IuQWQ9bnVsbDt2YXIgYz1iLlY7dGhpcy55Yj1udWxsO2Zvcih2YXIgZD1iLmNiO251bGwhPT1kOylhKGQudmFsdWUpLGIuViE9PWMmJnQuUGIoYiksZD1kLlRifTt0LkEoRGEse2NvdW50OiJjb3VudCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucC5lZH0pOw0KRGEucHJvdG90eXBlLmNnPWZ1bmN0aW9uKCl7dGhpcy52YWx1ZT10aGlzLmtleT1udWxsO3RoaXMuWWE9LTE7dGhpcy5wLkFkPXRoaXN9O0RhLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy55Yj8iU2V0SXRlcmF0b3JAIit0aGlzLnliLnZhbHVlOiJTZXRJdGVyYXRvciJ9Ow0KZnVuY3Rpb24gQyhhKXt0LkFjKHRoaXMpO3RoaXMub2I9ITE7dm9pZCAwPT09YXx8bnVsbD09PWE/dGhpcy5kYT1udWxsOiJzdHJpbmciPT09dHlwZW9mIGE/Im9iamVjdCI9PT1hfHwic3RyaW5nIj09PWF8fCJudW1iZXIiPT09YT90aGlzLmRhPWE6dC5sYShhLCJ0aGUgc3RyaW5nICdvYmplY3QnLCAnbnVtYmVyJyBvciAnc3RyaW5nJyIsIlNldCBjb25zdHJ1Y3RvcjogdHlwZSIpOiJmdW5jdGlvbiI9PT10eXBlb2YgYT90aGlzLmRhPWE9PT1PYmplY3Q/Im9iamVjdCI6YT09PVN0cmluZz8ic3RyaW5nIjphPT09TnVtYmVyPyJudW1iZXIiOmE6dC5sYShhLCJudWxsLCBhIHByaW1pdGl2ZSB0eXBlIG5hbWUsIG9yIGEgY2xhc3MgdHlwZSIsIlNldCBjb25zdHJ1Y3RvcjogdHlwZSIpO3RoaXMuZmQ9e307dGhpcy5lZD0wO3RoaXMuQWQ9bnVsbDt0aGlzLlY9MDt0aGlzLkpoPXRoaXMuY2I9bnVsbH10LmdhKCJTZXQiLEMpOw0KQy5wcm90b3R5cGUuUGc9ZnVuY3Rpb24oYSl7bnVsbCE9PXRoaXMuZGEmJigic3RyaW5nIj09PXR5cGVvZiB0aGlzLmRhP3R5cGVvZiBhPT09dGhpcy5kYSYmbnVsbCE9PWF8fHQuYmMoYSx0aGlzLmRhKTphIGluc3RhbmNlb2YgdGhpcy5kYXx8dC5iYyhhLHRoaXMuZGEpKX07Qy5wcm90b3R5cGUuUWQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlY7YSsrOzk5OTk5OTk5OTxhJiYoYT0wKTt0aGlzLlY9YX07Qy5wcm90b3R5cGUuZnJlZXplPUMucHJvdG90eXBlLmZyZWV6ZT1mdW5jdGlvbigpe3RoaXMub2I9ITA7cmV0dXJuIHRoaXN9O0MucHJvdG90eXBlLnRoYXc9Qy5wcm90b3R5cGUuTGE9ZnVuY3Rpb24oKXt0aGlzLm9iPSExO3JldHVybiB0aGlzfTtDLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJTZXQoIit0LmFpKHRoaXMuZGEpKyIpIyIrdC5vZCh0aGlzKX07DQpDLnByb3RvdHlwZS5hZGQ9Qy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiExO2UmJnRoaXMuUGcoYSk7dC5MKHRoaXMsYSk7dmFyIGI9YTt0LnJiKGEpJiYoYj10Lml0KGEpKTtyZXR1cm4gdm9pZCAwPT09dGhpcy5mZFtiXT8odGhpcy5lZCsrLGE9bmV3IEVhKGEsYSksdGhpcy5mZFtiXT1hLGI9dGhpcy5KaCxudWxsPT09Yj90aGlzLmNiPWE6KGEudW89YixiLlRiPWEpLHRoaXMuSmg9YSx0aGlzLlFkKCksITApOiExfTtDLnByb3RvdHlwZS5hZGRBbGw9Qy5wcm90b3R5cGUuT2U9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuIHRoaXM7dC5MKHRoaXMpO2lmKHQuaXNBcnJheShhKSlmb3IodmFyIGI9dC52YihhKSxjPTA7YzxiO2MrKyl0aGlzLmFkZCh0Lm1iKGEsYykpO2Vsc2UgZm9yKGE9YS5rO2EubmV4dCgpOyl0aGlzLmFkZChhLnZhbHVlKTtyZXR1cm4gdGhpc307DQpDLnByb3RvdHlwZS5jb250YWlucz1DLnByb3RvdHlwZS5oYXM9Qy5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuITE7ZSYmdGhpcy5QZyhhKTt2YXIgYj1hO3JldHVybiB0LnJiKGEpJiYoYj10Lm9kKGEpLHZvaWQgMD09PWIpPyExOnZvaWQgMCE9PXRoaXMuZmRbYl19O0MucHJvdG90eXBlLmNvbnRhaW5zQWxsPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiEwO2ZvcihhPWEuazthLm5leHQoKTspaWYoIXRoaXMuY29udGFpbnMoYS52YWx1ZSkpcmV0dXJuITE7cmV0dXJuITB9O0MucHJvdG90eXBlLmNvbnRhaW5zQW55PWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiEwO2ZvcihhPWEuazthLm5leHQoKTspaWYodGhpcy5jb250YWlucyhhLnZhbHVlKSlyZXR1cm4hMDtyZXR1cm4hMX07Qy5wcm90b3R5cGUuZmlyc3Q9Qy5wcm90b3R5cGUuJGE9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNiO3JldHVybiBudWxsPT09YT9udWxsOmEudmFsdWV9Ow0KQy5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLlYsYz10aGlzLmNiO251bGwhPT1jOyl7aWYoYShjLnZhbHVlKSlyZXR1cm4hMDt0aGlzLlYhPT1iJiZ0LlBiKHRoaXMpO2M9Yy5UYn1yZXR1cm4hMX07Qy5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLlYsYz10aGlzLmNiO251bGwhPT1jOyl7aWYoIWEoYy52YWx1ZSkpcmV0dXJuITE7dGhpcy5WIT09YiYmdC5QYih0aGlzKTtjPWMuVGJ9cmV0dXJuITB9O0MucHJvdG90eXBlLmVhY2g9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuVixjPXRoaXMuY2I7bnVsbCE9PWM7KWEoYy52YWx1ZSksdGhpcy5WIT09YiYmdC5QYih0aGlzKSxjPWMuVGJ9Ow0KQy5wcm90b3R5cGUucmVtb3ZlPUMucHJvdG90eXBlWyJkZWxldGUiXT1DLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuITE7ZSYmdGhpcy5QZyhhKTt0LkwodGhpcyxhKTt2YXIgYj1hO2lmKHQucmIoYSkmJihiPXQub2QoYSksdm9pZCAwPT09YikpcmV0dXJuITE7YT10aGlzLmZkW2JdO2lmKHZvaWQgMD09PWEpcmV0dXJuITE7dmFyIGM9YS5UYixkPWEudW87bnVsbCE9PWMmJihjLnVvPWQpO251bGwhPT1kJiYoZC5UYj1jKTt0aGlzLmNiPT09YSYmKHRoaXMuY2I9Yyk7dGhpcy5KaD09PWEmJih0aGlzLkpoPWQpO2RlbGV0ZSB0aGlzLmZkW2JdO3RoaXMuZWQtLTt0aGlzLlFkKCk7cmV0dXJuITB9Ow0KQy5wcm90b3R5cGUucmVtb3ZlQWxsPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiB0aGlzO3QuTCh0aGlzKTtpZih0LmlzQXJyYXkoYSkpZm9yKHZhciBiPXQudmIoYSksYz0wO2M8YjtjKyspdGhpcy5yZW1vdmUodC5tYihhLGMpKTtlbHNlIGZvcihhPWEuazthLm5leHQoKTspdGhpcy5yZW1vdmUoYS52YWx1ZSk7cmV0dXJuIHRoaXN9O0MucHJvdG90eXBlLnJldGFpbkFsbD1mdW5jdGlvbihhKXtpZihudWxsPT09YXx8MD09PXRoaXMuY291bnQpcmV0dXJuIHRoaXM7dC5MKHRoaXMpO3ZhciBiPW5ldyBDKHRoaXMuZGEpO2IuT2UoYSk7YT1uZXcgQih0aGlzLmRhKTtmb3IodmFyIGM9dGhpcy5rO2MubmV4dCgpOyliLmNvbnRhaW5zKGMudmFsdWUpfHxhLmFkZChjLnZhbHVlKTtmb3IoYj1hLms7Yi5uZXh0KCk7KXRoaXMucmVtb3ZlKGIudmFsdWUpO3JldHVybiB0aGlzfTsNCkMucHJvdG90eXBlLmNsZWFyPUMucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dC5MKHRoaXMpO3RoaXMuZmQ9e307dGhpcy5lZD0wO3RoaXMuSmg9dGhpcy5jYj1udWxsO3RoaXMuUWQoKX07Qy5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyBDKHRoaXMuZGEpLGI9dGhpcy5mZCxjO2ZvcihjIGluIGIpYS5hZGQoYltjXS52YWx1ZSk7cmV0dXJuIGF9O0MucHJvdG90eXBlLnRvQXJyYXk9Qy5wcm90b3R5cGUuSWU9ZnVuY3Rpb24oKXt2YXIgYT1BcnJheSh0aGlzLmVkKSxiPXRoaXMuZmQsYz0wLGQ7Zm9yKGQgaW4gYilhW2NdPWJbZF0udmFsdWUsYysrO3JldHVybiBhfTtDLnByb3RvdHlwZS50b0xpc3Q9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgQih0aGlzLmRhKSxiPXRoaXMuZmQsYztmb3IoYyBpbiBiKWEuYWRkKGJbY10udmFsdWUpO3JldHVybiBhfTt0LkEoQyx7Y291bnQ6ImNvdW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZH0pOw0KdC5BKEMse3NpemU6InNpemUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkfSk7dC5BKEMse2s6Iml0ZXJhdG9yIn0sZnVuY3Rpb24oKXtpZigwPj10aGlzLmVkKXJldHVybiB0LmFnO3ZhciBhPXRoaXMuQWQ7cmV0dXJuIG51bGwhPT1hPyhhLnJlc2V0KCksYSk6bmV3IERhKHRoaXMpfSk7ZnVuY3Rpb24gRmEoYSl7dGhpcy5YYT1hO3RoaXMucmVzZXQoKX10LlZkKEZhLHtrZXk6ITAsdmFsdWU6ITB9KTt0LkEoRmEse2s6Iml0ZXJhdG9yIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pO0ZhLnByb3RvdHlwZS5yZXNldD1GYS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLllhPXRoaXMuWGEuVjt0aGlzLnliPW51bGx9Ow0KRmEucHJvdG90eXBlLm5leHQ9RmEucHJvdG90eXBlLmhhc05leHQ9RmEucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlhhO2EuViE9PXRoaXMuWWEmJnQuUGIoYSk7dmFyIGI9dGhpcy55YixiPW51bGw9PT1iP2EuY2I6Yi5UYjtpZihudWxsIT09YilyZXR1cm4gdGhpcy55Yj1iLHRoaXMudmFsdWU9dGhpcy5rZXk9YT1iLmtleSwhMDt0aGlzLmNnKCk7cmV0dXJuITF9O0ZhLnByb3RvdHlwZS5maXJzdD1GYS5wcm90b3R5cGUuJGE9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlhhO3RoaXMuWWE9YS5WO2E9YS5jYjtyZXR1cm4gbnVsbCE9PWE/KHRoaXMueWI9YSx0aGlzLnZhbHVlPXRoaXMua2V5PWE9YS5rZXkpOm51bGx9O0ZhLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5YYSxjPWIuVjt0aGlzLnliPW51bGw7Zm9yKHZhciBkPWIuY2I7bnVsbCE9PWQ7KXtpZihhKGQua2V5KSlyZXR1cm4hMDtiLlYhPT1jJiZ0LlBiKGIpO2Q9ZC5UYn1yZXR1cm4hMX07DQpGYS5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuWGEsYz1iLlY7dGhpcy55Yj1udWxsO2Zvcih2YXIgZD1iLmNiO251bGwhPT1kOyl7aWYoIWEoZC5rZXkpKXJldHVybiExO2IuViE9PWMmJnQuUGIoYik7ZD1kLlRifXJldHVybiEwfTtGYS5wcm90b3R5cGUuZWFjaD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLlhhLGM9Yi5WO3RoaXMueWI9bnVsbDtmb3IodmFyIGQ9Yi5jYjtudWxsIT09ZDspYShkLmtleSksYi5WIT09YyYmdC5QYihiKSxkPWQuVGJ9O3QuQShGYSx7Y291bnQ6ImNvdW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5YYS5lZH0pO0ZhLnByb3RvdHlwZS5jZz1mdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5rZXk9bnVsbDt0aGlzLllhPS0xfTtGYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMueWI/Ik1hcEtleVNldEl0ZXJhdG9yQCIrdGhpcy55Yi52YWx1ZToiTWFwS2V5U2V0SXRlcmF0b3IifTsNCmZ1bmN0aW9uIEhhKGEpe3QuQWModGhpcyk7dGhpcy5vYj0hMDt0aGlzLlhhPWF9dC5LYShIYSxDKTtIYS5wcm90b3R5cGUuZnJlZXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O0hhLnByb3RvdHlwZS5MYT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtIYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTWFwS2V5U2V0KCIrdGhpcy5YYS50b1N0cmluZygpKyIpIn07SGEucHJvdG90eXBlLmFkZD1IYS5wcm90b3R5cGUuc2V0PUhhLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0Lm0oIlRoaXMgU2V0IGlzIHJlYWQtb25seTogIit0aGlzLnRvU3RyaW5nKCkpO3JldHVybiExfTtIYS5wcm90b3R5cGUuY29udGFpbnM9SGEucHJvdG90eXBlLmhhcz1IYS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuWGEuY29udGFpbnMoYSl9Ow0KSGEucHJvdG90eXBlLnJlbW92ZT1IYS5wcm90b3R5cGVbImRlbGV0ZSJdPUhhLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0Lm0oIlRoaXMgU2V0IGlzIHJlYWQtb25seTogIit0aGlzLnRvU3RyaW5nKCkpO3JldHVybiExfTtIYS5wcm90b3R5cGUuY2xlYXI9SGEucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dC5tKCJUaGlzIFNldCBpcyByZWFkLW9ubHk6ICIrdGhpcy50b1N0cmluZygpKX07SGEucHJvdG90eXBlLmZpcnN0PUhhLnByb3RvdHlwZS4kYT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuWGEuY2I7cmV0dXJuIG51bGwhPT1hP2Eua2V5Om51bGx9O0hhLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuWGEuY2I7bnVsbCE9PWI7KXtpZihhKGIua2V5KSlyZXR1cm4hMDtiPWIuVGJ9cmV0dXJuITF9Ow0KSGEucHJvdG90eXBlLmFsbD1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5YYS5jYjtudWxsIT09Yjspe2lmKCFhKGIua2V5KSlyZXR1cm4hMTtiPWIuVGJ9cmV0dXJuITB9O0hhLnByb3RvdHlwZS5lYWNoPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLlhhLmNiO251bGwhPT1iOylhKGIua2V5KSxiPWIuVGJ9O0hhLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIYSh0aGlzLlhhKX07SGEucHJvdG90eXBlLnRvU2V0PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IEModGhpcy5YYS5JaCksYj10aGlzLlhhLmZkLGM7Zm9yKGMgaW4gYilhLmFkZChiW2NdLmtleSk7cmV0dXJuIGF9O0hhLnByb3RvdHlwZS50b0FycmF5PUhhLnByb3RvdHlwZS5JZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuWGEuZmQsYj1BcnJheSh0aGlzLlhhLmVkKSxjPTAsZDtmb3IoZCBpbiBhKWJbY109YVtkXS5rZXksYysrO3JldHVybiBifTsNCkhhLnByb3RvdHlwZS50b0xpc3Q9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgQih0aGlzLmRhKSxiPXRoaXMuWGEuZmQsYztmb3IoYyBpbiBiKWEuYWRkKGJbY10ua2V5KTtyZXR1cm4gYX07dC5BKEhhLHtjb3VudDoiY291bnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlhhLmVkfSk7dC5BKEhhLHtzaXplOiJzaXplIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5YYS5lZH0pO3QuQShIYSx7azoiaXRlcmF0b3IifSxmdW5jdGlvbigpe3JldHVybiAwPj10aGlzLlhhLmVkP3QuYWc6bmV3IEZhKHRoaXMuWGEpfSk7ZnVuY3Rpb24gS2EoYSl7dGhpcy5YYT1hO3RoaXMucmVzZXQoKX10LlZkKEthLHtrZXk6ITAsdmFsdWU6ITB9KTt0LkEoS2Ese2s6Iml0ZXJhdG9yIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pO0thLnByb3RvdHlwZS5yZXNldD1LYS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlhhO2EuaG89bnVsbDt0aGlzLllhPWEuVjt0aGlzLnliPW51bGx9Ow0KS2EucHJvdG90eXBlLm5leHQ9S2EucHJvdG90eXBlLmhhc05leHQ9S2EucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlhhO2EuViE9PXRoaXMuWWEmJnQuUGIoYSk7dmFyIGI9dGhpcy55YixiPW51bGw9PT1iP2EuY2I6Yi5UYjtpZihudWxsIT09YilyZXR1cm4gdGhpcy55Yj1iLHRoaXMudmFsdWU9Yi52YWx1ZSx0aGlzLmtleT1iLmtleSwhMDt0aGlzLmNnKCk7cmV0dXJuITF9O0thLnByb3RvdHlwZS5maXJzdD1LYS5wcm90b3R5cGUuJGE9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlhhO3RoaXMuWWE9YS5WO2E9YS5jYjtpZihudWxsIT09YSl7dGhpcy55Yj1hO3ZhciBiPWEudmFsdWU7dGhpcy5rZXk9YS5rZXk7cmV0dXJuIHRoaXMudmFsdWU9Yn1yZXR1cm4gbnVsbH07DQpLYS5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuWGE7Yi5obz1udWxsO3ZhciBjPWIuVjt0aGlzLnliPW51bGw7Zm9yKHZhciBkPWIuY2I7bnVsbCE9PWQ7KXtpZihhKGQudmFsdWUpKXJldHVybiEwO2IuViE9PWMmJnQuUGIoYik7ZD1kLlRifXJldHVybiExfTtLYS5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuWGE7Yi5obz1udWxsO3ZhciBjPWIuVjt0aGlzLnliPW51bGw7Zm9yKHZhciBkPWIuY2I7bnVsbCE9PWQ7KXtpZighYShkLnZhbHVlKSlyZXR1cm4hMTtiLlYhPT1jJiZ0LlBiKGIpO2Q9ZC5UYn1yZXR1cm4hMH07S2EucHJvdG90eXBlLmVhY2g9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5YYTtiLmhvPW51bGw7dmFyIGM9Yi5WO3RoaXMueWI9bnVsbDtmb3IodmFyIGQ9Yi5jYjtudWxsIT09ZDspYShkLnZhbHVlKSxiLlYhPT1jJiZ0LlBiKGIpLGQ9ZC5UYn07dC5BKEthLHtjb3VudDoiY291bnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlhhLmVkfSk7DQpLYS5wcm90b3R5cGUuY2c9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMua2V5PW51bGw7dGhpcy5ZYT0tMTt0aGlzLlhhLmhvPXRoaXN9O0thLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy55Yj8iTWFwVmFsdWVTZXRJdGVyYXRvckAiK3RoaXMueWIudmFsdWU6Ik1hcFZhbHVlU2V0SXRlcmF0b3IifTtmdW5jdGlvbiBFYShhLGIpe3RoaXMua2V5PWE7dGhpcy52YWx1ZT1iO3RoaXMudW89dGhpcy5UYj1udWxsfXQuVmQoRWEse2tleTohMCx2YWx1ZTohMH0pO0VhLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ7Iit0aGlzLmtleSsiOiIrdGhpcy52YWx1ZSsifSJ9O2Z1bmN0aW9uIExhKGEpe3RoaXMuWGE9YTt0aGlzLnJlc2V0KCl9dC5WZChMYSx7a2V5OiEwLHZhbHVlOiEwfSk7dC5BKExhLHtrOiJpdGVyYXRvciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTsNCkxhLnByb3RvdHlwZS5yZXNldD1MYS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlhhO2EuQWQ9bnVsbDt0aGlzLllhPWEuVjt0aGlzLnliPW51bGx9O0xhLnByb3RvdHlwZS5uZXh0PUxhLnByb3RvdHlwZS5oYXNOZXh0PUxhLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5YYTthLlYhPT10aGlzLllhJiZ0LlBiKGEpO3ZhciBiPXRoaXMueWIsYj1udWxsPT09Yj9hLmNiOmIuVGI7aWYobnVsbCE9PWIpcmV0dXJuIHRoaXMueWI9Yix0aGlzLmtleT1iLmtleSx0aGlzLnZhbHVlPWIudmFsdWUsITA7dGhpcy5jZygpO3JldHVybiExfTtMYS5wcm90b3R5cGUuZmlyc3Q9TGEucHJvdG90eXBlLiRhPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5YYTt0aGlzLllhPWEuVjthPWEuY2I7cmV0dXJuIG51bGwhPT1hPyh0aGlzLnliPWEsdGhpcy5rZXk9YS5rZXksdGhpcy52YWx1ZT1hLnZhbHVlLGEpOm51bGx9Ow0KTGEucHJvdG90eXBlLmFueT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLlhhO2IuQWQ9bnVsbDt2YXIgYz1iLlY7dGhpcy55Yj1udWxsO2Zvcih2YXIgZD1iLmNiO251bGwhPT1kOyl7aWYoYShkKSlyZXR1cm4hMDtiLlYhPT1jJiZ0LlBiKGIpO2Q9ZC5UYn1yZXR1cm4hMX07TGEucHJvdG90eXBlLmFsbD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLlhhO2IuQWQ9bnVsbDt2YXIgYz1iLlY7dGhpcy55Yj1udWxsO2Zvcih2YXIgZD1iLmNiO251bGwhPT1kOyl7aWYoIWEoZCkpcmV0dXJuITE7Yi5WIT09YyYmdC5QYihiKTtkPWQuVGJ9cmV0dXJuITB9O0xhLnByb3RvdHlwZS5lYWNoPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuWGE7Yi5BZD1udWxsO3ZhciBjPWIuVjt0aGlzLnliPW51bGw7Zm9yKHZhciBkPWIuY2I7bnVsbCE9PWQ7KWEoZCksYi5WIT09YyYmdC5QYihiKSxkPWQuVGJ9O3QuQShMYSx7Y291bnQ6ImNvdW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5YYS5lZH0pOw0KTGEucHJvdG90eXBlLmNnPWZ1bmN0aW9uKCl7dGhpcy52YWx1ZT10aGlzLmtleT1udWxsO3RoaXMuWWE9LTE7dGhpcy5YYS5BZD10aGlzfTtMYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMueWI/Ik1hcEl0ZXJhdG9yQCIrdGhpcy55YjoiTWFwSXRlcmF0b3IifTsNCmZ1bmN0aW9uIGphKGEsYil7dC5BYyh0aGlzKTt0aGlzLm9iPSExO3ZvaWQgMD09PWF8fG51bGw9PT1hP3RoaXMuSWg9bnVsbDoic3RyaW5nIj09PXR5cGVvZiBhPyJvYmplY3QiPT09YXx8InN0cmluZyI9PT1hfHwibnVtYmVyIj09PWE/dGhpcy5JaD1hOnQubGEoYSwidGhlIHN0cmluZyAnb2JqZWN0JywgJ251bWJlcicgb3IgJ3N0cmluZyciLCJNYXAgY29uc3RydWN0b3I6IGtleXR5cGUiKToiZnVuY3Rpb24iPT09dHlwZW9mIGE/dGhpcy5JaD1hPT09T2JqZWN0PyJvYmplY3QiOmE9PT1TdHJpbmc/InN0cmluZyI6YT09PU51bWJlcj8ibnVtYmVyIjphOnQubGEoYSwibnVsbCwgYSBwcmltaXRpdmUgdHlwZSBuYW1lLCBvciBhIGNsYXNzIHR5cGUiLCJNYXAgY29uc3RydWN0b3I6IGtleXR5cGUiKTt2b2lkIDA9PT1ifHxudWxsPT09Yj90aGlzLlJpPW51bGw6InN0cmluZyI9PT10eXBlb2YgYj8ib2JqZWN0Ij09PWJ8fCJzdHJpbmciPT09Ynx8ImJvb2xlYW4iPT09Ynx8Im51bWJlciI9PT0NCmJ8fCJmdW5jdGlvbiI9PT1iP3RoaXMuUmk9Yjp0LmxhKGIsInRoZSBzdHJpbmcgJ29iamVjdCcsICdudW1iZXInLCAnc3RyaW5nJywgJ2Jvb2xlYW4nLCBvciAnZnVuY3Rpb24nIiwiTWFwIGNvbnN0cnVjdG9yOiB2YWx0eXBlIik6ImZ1bmN0aW9uIj09PXR5cGVvZiBiP3RoaXMuUmk9Yj09PU9iamVjdD8ib2JqZWN0IjpiPT09U3RyaW5nPyJzdHJpbmciOmI9PT1OdW1iZXI/Im51bWJlciI6Yj09PUJvb2xlYW4/ImJvb2xlYW4iOmI9PT1GdW5jdGlvbj8iZnVuY3Rpb24iOmI6dC5sYShiLCJudWxsLCBhIHByaW1pdGl2ZSB0eXBlIG5hbWUsIG9yIGEgY2xhc3MgdHlwZSIsIk1hcCBjb25zdHJ1Y3RvcjogdmFsdHlwZSIpO3RoaXMuZmQ9e307dGhpcy5lZD0wO3RoaXMuaG89dGhpcy5BZD1udWxsO3RoaXMuVj0wO3RoaXMuSmg9dGhpcy5jYj1udWxsfXQuZ2EoIk1hcCIsamEpOw0KZnVuY3Rpb24gTWEoYSxiKXtudWxsIT09YS5JaCYmKCJzdHJpbmciPT09dHlwZW9mIGEuSWg/dHlwZW9mIGI9PT1hLkloJiZudWxsIT09Ynx8dC5iYyhiLGEuSWgpOmIgaW5zdGFuY2VvZiBhLklofHx0LmJjKGIsYS5JaCkpfWphLnByb3RvdHlwZS5RZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuVjthKys7OTk5OTk5OTk5PGEmJihhPTApO3RoaXMuVj1hfTtqYS5wcm90b3R5cGUuZnJlZXplPWphLnByb3RvdHlwZS5mcmVlemU9ZnVuY3Rpb24oKXt0aGlzLm9iPSEwO3JldHVybiB0aGlzfTtqYS5wcm90b3R5cGUudGhhdz1qYS5wcm90b3R5cGUuTGE9ZnVuY3Rpb24oKXt0aGlzLm9iPSExO3JldHVybiB0aGlzfTtqYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTWFwKCIrdC5haSh0aGlzLkloKSsiLCIrdC5haSh0aGlzLlJpKSsiKSMiK3Qub2QodGhpcyl9Ow0KamEucHJvdG90eXBlLmFkZD1qYS5wcm90b3R5cGUuc2V0PWphLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiKXtlJiYoTWEodGhpcyxhKSxudWxsIT09dGhpcy5SaSYmKCJzdHJpbmciPT09dHlwZW9mIHRoaXMuUmk/dHlwZW9mIGI9PT10aGlzLlJpJiZudWxsIT09Ynx8dC5iYyhiLHRoaXMuUmkpOmIgaW5zdGFuY2VvZiB0aGlzLlJpfHx0LmJjKGIsdGhpcy5SaSkpKTt0LkwodGhpcyxhKTt2YXIgYz1hO3QucmIoYSkmJihjPXQuaXQoYSkpO3ZhciBkPXRoaXMuZmRbY107aWYodm9pZCAwPT09ZClyZXR1cm4gdGhpcy5lZCsrLGQ9bmV3IEVhKGEsYiksdGhpcy5mZFtjXT1kLGM9dGhpcy5KaCxudWxsPT09Yz90aGlzLmNiPWQ6KGQudW89YyxjLlRiPWQpLHRoaXMuSmg9ZCx0aGlzLlFkKCksITA7ZC52YWx1ZT1iO3JldHVybiExfTsNCmphLnByb3RvdHlwZS5hZGRBbGw9amEucHJvdG90eXBlLk9lPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiB0aGlzO2lmKHQuaXNBcnJheShhKSlmb3IodmFyIGI9dC52YihhKSxjPTA7YzxiO2MrKyl7dmFyIGQ9dC5tYihhLGMpO3RoaXMuYWRkKGQua2V5LGQudmFsdWUpfWVsc2UgZm9yKGUmJnQubChhLGphLGphLCJhZGRBbGw6bWFwIiksYT1hLms7YS5uZXh0KCk7KXRoaXMuYWRkKGEua2V5LGEudmFsdWUpO3JldHVybiB0aGlzfTtqYS5wcm90b3R5cGUuZmlyc3Q9amEucHJvdG90eXBlLiRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2J9O2phLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuVixjPXRoaXMuY2I7bnVsbCE9PWM7KXtpZihhKGMpKXJldHVybiEwO3RoaXMuViE9PWImJnQuUGIodGhpcyk7Yz1jLlRifXJldHVybiExfTsNCmphLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuVixjPXRoaXMuY2I7bnVsbCE9PWM7KXtpZighYShjKSlyZXR1cm4hMTt0aGlzLlYhPT1iJiZ0LlBiKHRoaXMpO2M9Yy5UYn1yZXR1cm4hMH07amEucHJvdG90eXBlLmVhY2g9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuVixjPXRoaXMuY2I7bnVsbCE9PWM7KWEoYyksdGhpcy5WIT09YiYmdC5QYih0aGlzKSxjPWMuVGJ9O2phLnByb3RvdHlwZS5jb250YWlucz1qYS5wcm90b3R5cGUuaGFzPWphLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihhKXtlJiZNYSh0aGlzLGEpO3ZhciBiPWE7cmV0dXJuIHQucmIoYSkmJihiPXQub2QoYSksdm9pZCAwPT09Yik/ITE6dm9pZCAwIT09dGhpcy5mZFtiXX07DQpqYS5wcm90b3R5cGUuZ2V0VmFsdWU9amEucHJvdG90eXBlLmdldD1qYS5wcm90b3R5cGUuemE9ZnVuY3Rpb24oYSl7ZSYmTWEodGhpcyxhKTt2YXIgYj1hO2lmKHQucmIoYSkmJihiPXQub2QoYSksdm9pZCAwPT09YikpcmV0dXJuIG51bGw7YT10aGlzLmZkW2JdO3JldHVybiB2b2lkIDA9PT1hP251bGw6YS52YWx1ZX07DQpqYS5wcm90b3R5cGUucmVtb3ZlPWphLnByb3RvdHlwZVsiZGVsZXRlIl09amEucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXtpZihudWxsPT09YSlyZXR1cm4hMTtlJiZNYSh0aGlzLGEpO3QuTCh0aGlzLGEpO3ZhciBiPWE7aWYodC5yYihhKSYmKGI9dC5vZChhKSx2b2lkIDA9PT1iKSlyZXR1cm4hMTthPXRoaXMuZmRbYl07aWYodm9pZCAwPT09YSlyZXR1cm4hMTt2YXIgYz1hLlRiLGQ9YS51bztudWxsIT09YyYmKGMudW89ZCk7bnVsbCE9PWQmJihkLlRiPWMpO3RoaXMuY2I9PT1hJiYodGhpcy5jYj1jKTt0aGlzLkpoPT09YSYmKHRoaXMuSmg9ZCk7ZGVsZXRlIHRoaXMuZmRbYl07dGhpcy5lZC0tO3RoaXMuUWQoKTtyZXR1cm4hMH07amEucHJvdG90eXBlLmNsZWFyPWphLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3QuTCh0aGlzKTt0aGlzLmZkPXt9O3RoaXMuZWQ9MDt0aGlzLkpoPXRoaXMuY2I9bnVsbDt0aGlzLlFkKCl9Ow0KamEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgamEodGhpcy5JaCx0aGlzLlJpKSxiPXRoaXMuZmQsYztmb3IoYyBpbiBiKXt2YXIgZD1iW2NdO2EuYWRkKGQua2V5LGQudmFsdWUpfXJldHVybiBhfTtqYS5wcm90b3R5cGUudG9BcnJheT1qYS5wcm90b3R5cGUuSWU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmZkLGI9QXJyYXkodGhpcy5lZCksYz0wLGQ7Zm9yKGQgaW4gYSl7dmFyIGY9YVtkXTtiW2NdPW5ldyBFYShmLmtleSxmLnZhbHVlKTtjKyt9cmV0dXJuIGJ9O2phLnByb3RvdHlwZS50b0tleVNldD1qYS5wcm90b3R5cGUuRGw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEhhKHRoaXMpfTt0LkEoamEse2NvdW50OiJjb3VudCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWR9KTt0LkEoamEse3NpemU6InNpemUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkfSk7DQp0LkEoamEse2s6Iml0ZXJhdG9yIn0sZnVuY3Rpb24oKXtpZigwPj10aGlzLmNvdW50KXJldHVybiB0LmFnO3ZhciBhPXRoaXMuQWQ7cmV0dXJuIG51bGwhPT1hPyhhLnJlc2V0KCksYSk6bmV3IExhKHRoaXMpfSk7dC5BKGphLHtESzoiaXRlcmF0b3JLZXlzIn0sZnVuY3Rpb24oKXtyZXR1cm4gMD49dGhpcy5jb3VudD90LmFnOm5ldyBGYSh0aGlzKX0pO3QuQShqYSx7a0Y6Iml0ZXJhdG9yVmFsdWVzIn0sZnVuY3Rpb24oKXtpZigwPj10aGlzLmNvdW50KXJldHVybiB0LmFnO3ZhciBhPXRoaXMuaG87cmV0dXJuIG51bGwhPT1hPyhhLnJlc2V0KCksYSk6bmV3IEthKHRoaXMpfSk7ZnVuY3Rpb24gdyhhLGIpe3ZvaWQgMD09PWF8fHZvaWQgMD09PWI/dGhpcy55PXRoaXMueD0wOiFlfHwibnVtYmVyIj09PXR5cGVvZiBhJiYibnVtYmVyIj09PXR5cGVvZiBiPyh0aGlzLng9YSx0aGlzLnk9Yik6dC5tKCJJbnZhbGlkIGFyZ3VtZW50cyB0byBQb2ludCBjb25zdHJ1Y3RvciIpfQ0KdC5nYSgiUG9pbnQiLHcpO3QuWWgodyk7dC5WZCh3LHt4OiEwLHk6ITB9KTt3LnByb3RvdHlwZS5hc3NpZ249ZnVuY3Rpb24oYSl7dGhpcy54PWEueDt0aGlzLnk9YS55fTt3LnByb3RvdHlwZS5wPWZ1bmN0aW9uKGEsYil7dGhpcy54PWE7dGhpcy55PWJ9O3cucHJvdG90eXBlLnNldFRvPXcucHJvdG90eXBlLlNwPWZ1bmN0aW9uKGEsYil7ZSYmKHQuaShhLCJudW1iZXIiLHcsInNldFRvOngiKSx0LmkoYiwibnVtYmVyIix3LCJzZXRUbzp5IikpO3QuTCh0aGlzKTt0aGlzLng9YTt0aGlzLnk9YjtyZXR1cm4gdGhpc307dy5wcm90b3R5cGUuc2V0PXcucHJvdG90eXBlLnNldD1mdW5jdGlvbihhKXtlJiZ0LmwoYSx3LHcsInNldDpwIik7dC5MKHRoaXMpO3RoaXMueD1hLng7dGhpcy55PWEueTtyZXR1cm4gdGhpc307dy5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyB3O2EueD10aGlzLng7YS55PXRoaXMueTtyZXR1cm4gYX07DQp3LnByb3RvdHlwZS5KYT1mdW5jdGlvbigpe3RoaXMub2I9ITA7T2JqZWN0LmZyZWV6ZSh0aGlzKTtyZXR1cm4gdGhpc307dy5wcm90b3R5cGUuWj1mdW5jdGlvbigpe3JldHVybiBPYmplY3QuaXNGcm96ZW4odGhpcyk/dGhpczp0aGlzLmNvcHkoKS5mcmVlemUoKX07dy5wcm90b3R5cGUuZnJlZXplPWZ1bmN0aW9uKCl7dGhpcy5vYj0hMDtyZXR1cm4gdGhpc307dy5wcm90b3R5cGUuTGE9ZnVuY3Rpb24oKXtPYmplY3QuaXNGcm96ZW4odGhpcykmJnQubSgiY2Fubm90IHRoYXcgY29uc3RhbnQ6ICIrdGhpcyk7dGhpcy5vYj0hMTtyZXR1cm4gdGhpc307DQp3LnBhcnNlPWZ1bmN0aW9uKGEpe2lmKCJzdHJpbmciPT09dHlwZW9mIGEpe2E9YS5zcGxpdCgiICIpO2Zvcih2YXIgYj0wLGM9MDsiIj09PWFbYl07KWIrKzt2YXIgZD1hW2IrK107ZCYmKGM9cGFyc2VGbG9hdChkKSk7Zm9yKHZhciBmPTA7IiI9PT1hW2JdOyliKys7KGQ9YVtiKytdKSYmKGY9cGFyc2VGbG9hdChkKSk7cmV0dXJuIG5ldyB3KGMsZil9cmV0dXJuIG5ldyB3fTt3LnN0cmluZ2lmeT1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIHc/YS54LnRvU3RyaW5nKCkrIiAiK2EueS50b1N0cmluZygpOmEudG9TdHJpbmcoKX07dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUG9pbnQoIit0aGlzLngrIiwiK3RoaXMueSsiKSJ9O3cucHJvdG90eXBlLmVxdWFscz13LnByb3RvdHlwZS5NPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2Ygdz90aGlzLng9PT1hLngmJnRoaXMueT09PWEueTohMX07DQp3LnByb3RvdHlwZS5lcXVhbFRvPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMueD09PWEmJnRoaXMueT09PWJ9O3cucHJvdG90eXBlLmVxdWFsc0FwcHJveD13LnByb3RvdHlwZS50Zj1mdW5jdGlvbihhKXtyZXR1cm4gSC5JKHRoaXMueCxhLngpJiZILkkodGhpcy55LGEueSl9O3cucHJvdG90eXBlLmFkZD13LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEsdyx3LCJhZGQ6cCIpO3QuTCh0aGlzKTt0aGlzLngrPWEueDt0aGlzLnkrPWEueTtyZXR1cm4gdGhpc307dy5wcm90b3R5cGUuc3VidHJhY3Q9dy5wcm90b3R5cGUuVHQ9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEsdyx3LCJzdWJ0cmFjdDpwIik7dC5MKHRoaXMpO3RoaXMueC09YS54O3RoaXMueS09YS55O3JldHVybiB0aGlzfTsNCncucHJvdG90eXBlLm9mZnNldD13LnByb3RvdHlwZS5vZmZzZXQ9ZnVuY3Rpb24oYSxiKXtlJiYodC5xKGEsdywib2Zmc2V0OmR4IiksdC5xKGIsdywib2Zmc2V0OmR5IikpO3QuTCh0aGlzKTt0aGlzLngrPWE7dGhpcy55Kz1iO3JldHVybiB0aGlzfTt3LnByb3RvdHlwZS5yb3RhdGU9dy5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEpe2UmJnQucShhLHcsInJvdGF0ZTphbmdsZSIpO3QuTCh0aGlzKTtpZigwPT09YSlyZXR1cm4gdGhpczt2YXIgYj10aGlzLngsYz10aGlzLnk7aWYoMD09PWImJjA9PT1jKXJldHVybiB0aGlzO3ZhciBkOzkwPT09YT8oYT0wLGQ9MSk6MTgwPT09YT8oYT0tMSxkPTApOjI3MD09PWE/KGE9MCxkPS0xKTooZD1hKk1hdGguUEkvMTgwLGE9TWF0aC5jb3MoZCksZD1NYXRoLnNpbihkKSk7dGhpcy54PWEqYi1kKmM7dGhpcy55PWQqYithKmM7cmV0dXJuIHRoaXN9Ow0Kdy5wcm90b3R5cGUuc2NhbGU9dy5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiKXtlJiYodC5xKGEsdywic2NhbGU6c3giKSx0LnEoYix3LCJzY2FsZTpzeSIpKTt0aGlzLngqPWE7dGhpcy55Kj1iO3JldHVybiB0aGlzfTt3LnByb3RvdHlwZS5kaXN0YW5jZVNxdWFyZWRQb2ludD13LnByb3RvdHlwZS5aaj1mdW5jdGlvbihhKXtlJiZ0LmwoYSx3LHcsImRpc3RhbmNlU3F1YXJlZFBvaW50OnAiKTt2YXIgYj1hLngtdGhpcy54O2E9YS55LXRoaXMueTtyZXR1cm4gYipiK2EqYX07dy5wcm90b3R5cGUuZGlzdGFuY2VTcXVhcmVkPXcucHJvdG90eXBlLllzPWZ1bmN0aW9uKGEsYil7ZSYmKHQucShhLHcsImRpc3RhbmNlU3F1YXJlZDpweCIpLHQucShiLHcsImRpc3RhbmNlU3F1YXJlZDpweSIpKTt2YXIgYz1hLXRoaXMueCxkPWItdGhpcy55O3JldHVybiBjKmMrZCpkfTsNCncucHJvdG90eXBlLm5vcm1hbGl6ZT13LnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXt0LkwodGhpcyk7dmFyIGE9dGhpcy54LGI9dGhpcy55LGM9TWF0aC5zcXJ0KGEqYStiKmIpOzA8YyYmKHRoaXMueD1hL2MsdGhpcy55PWIvYyk7cmV0dXJuIHRoaXN9O3cucHJvdG90eXBlLmRpcmVjdGlvblBvaW50PXcucHJvdG90eXBlLiRpPWZ1bmN0aW9uKGEpe2UmJnQubChhLHcsdywiZGlyZWN0aW9uUG9pbnQ6cCIpO3JldHVybiBPYShhLngtdGhpcy54LGEueS10aGlzLnkpfTt3LnByb3RvdHlwZS5kaXJlY3Rpb249dy5wcm90b3R5cGUuZGlyZWN0aW9uPWZ1bmN0aW9uKGEsYil7ZSYmKHQucShhLHcsImRpcmVjdGlvbjpweCIpLHQucShiLHcsImRpcmVjdGlvbjpweSIpKTtyZXR1cm4gT2EoYS10aGlzLngsYi10aGlzLnkpfTsNCmZ1bmN0aW9uIE9hKGEsYil7aWYoMD09PWEpcmV0dXJuIDA8Yj85MDowPmI/MjcwOjA7aWYoMD09PWIpcmV0dXJuIDA8YT8wOjE4MDtpZihpc05hTihhKXx8aXNOYU4oYikpcmV0dXJuIDA7dmFyIGM9MTgwKk1hdGguYXRhbihNYXRoLmFicyhiL2EpKS9NYXRoLlBJOzA+YT9jPTA+Yj9jKzE4MDoxODAtYzowPmImJihjPTM2MC1jKTtyZXR1cm4gY313LnByb3RvdHlwZS5wcm9qZWN0T250b0xpbmVTZWdtZW50PWZ1bmN0aW9uKGEsYixjLGQpe2UmJih0LnEoYSx3LCJwcm9qZWN0T250b0xpbmVTZWdtZW50OnB4IiksdC5xKGIsdywicHJvamVjdE9udG9MaW5lU2VnbWVudDpweSIpLHQucShjLHcsInByb2plY3RPbnRvTGluZVNlZ21lbnQ6cXgiKSx0LnEoZCx3LCJwcm9qZWN0T250b0xpbmVTZWdtZW50OnF5IikpO0guY24oYSxiLGMsZCx0aGlzLngsdGhpcy55LHRoaXMpO3JldHVybiB0aGlzfTsNCncucHJvdG90eXBlLnByb2plY3RPbnRvTGluZVNlZ21lbnRQb2ludD1mdW5jdGlvbihhLGIpe2UmJih0LmwoYSx3LHcsInByb2plY3RPbnRvTGluZVNlZ21lbnRQb2ludDpwIiksdC5sKGIsdyx3LCJwcm9qZWN0T250b0xpbmVTZWdtZW50UG9pbnQ6cSIpKTtILmNuKGEueCxhLnksYi54LGIueSx0aGlzLngsdGhpcy55LHRoaXMpO3JldHVybiB0aGlzfTt3LnByb3RvdHlwZS5zbmFwVG9HcmlkPWZ1bmN0aW9uKGEsYixjLGQpe2UmJih0LnEoYSx3LCJzbmFwVG9HcmlkOm9yaWdpbngiKSx0LnEoYix3LCJzbmFwVG9HcmlkOm9yaWdpbnkiKSx0LnEoYyx3LCJzbmFwVG9HcmlkOmNlbGx3aWR0aCIpLHQucShkLHcsInNuYXBUb0dyaWQ6Y2VsbGhlaWdodCIpKTtILmN0KHRoaXMueCx0aGlzLnksYSxiLGMsZCx0aGlzKTtyZXR1cm4gdGhpc307DQp3LnByb3RvdHlwZS5zbmFwVG9HcmlkUG9pbnQ9ZnVuY3Rpb24oYSxiKXtlJiYodC5sKGEsdyx3LCJzbmFwVG9HcmlkUG9pbnQ6cCIpLHQubChiLGdhLHcsInNuYXBUb0dyaWRQb2ludDpxIikpO0guY3QodGhpcy54LHRoaXMueSxhLngsYS55LGIud2lkdGgsYi5oZWlnaHQsdGhpcyk7cmV0dXJuIHRoaXN9O3cucHJvdG90eXBlLnNldFJlY3RTcG90PXcucHJvdG90eXBlLk90PWZ1bmN0aW9uKGEsYil7ZSYmKHQubChhLHgsdywic2V0UmVjdFNwb3Q6ciIpLHQubChiLEksdywic2V0UmVjdFNwb3Q6c3BvdCIpKTt0LkwodGhpcyk7dGhpcy54PWEueCtiLngqYS53aWR0aCtiLm9mZnNldFg7dGhpcy55PWEueStiLnkqYS5oZWlnaHQrYi5vZmZzZXRZO3JldHVybiB0aGlzfTsNCncucHJvdG90eXBlLnNldFNwb3Q9dy5wcm90b3R5cGUuUHQ9ZnVuY3Rpb24oYSxiLGMsZCxmKXtlJiYodC5xKGEsdywic2V0U3BvdDp4IiksdC5xKGIsdywic2V0U3BvdDp5IiksdC5xKGMsdywic2V0U3BvdDp3IiksdC5xKGQsdywic2V0U3BvdDpoIiksKDA+Y3x8MD5kKSYmdC5tKCJQb2ludC5zZXRTcG90OldpZHRoIGFuZCBoZWlnaHQgY2Fubm90IGJlIG5lZ2F0aXZlIiksdC5sKGYsSSx3LCJzZXRTcG90OnNwb3QiKSk7dC5MKHRoaXMpO3RoaXMueD1hK2YueCpjK2Yub2Zmc2V0WDt0aGlzLnk9YitmLnkqZCtmLm9mZnNldFk7cmV0dXJuIHRoaXN9O3cucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihhKXtlJiZ0LmwoYSxoYSx3LCJ0cmFuc2Zvcm06dCIpO2EuVGEodGhpcyk7cmV0dXJuIHRoaXN9O2Z1bmN0aW9uIFFhKGEsYil7ZSYmdC5sKGIsaGEsdywidHJhbnNmb3JtSW52ZXJ0ZWQ6dCIpO2IuYmkoYSk7cmV0dXJuIGF9dmFyIFJhOw0Kdy5kaXN0YW5jZUxpbmVTZWdtZW50U3F1YXJlZD1SYT1mdW5jdGlvbihhLGIsYyxkLGYsZyl7ZSYmKHQucShhLHcsImRpc3RhbmNlTGluZVNlZ21lbnRTcXVhcmVkOnB4IiksdC5xKGIsdywiZGlzdGFuY2VMaW5lU2VnbWVudFNxdWFyZWQ6cHkiKSx0LnEoYyx3LCJkaXN0YW5jZUxpbmVTZWdtZW50U3F1YXJlZDpheCIpLHQucShkLHcsImRpc3RhbmNlTGluZVNlZ21lbnRTcXVhcmVkOmF5IiksdC5xKGYsdywiZGlzdGFuY2VMaW5lU2VnbWVudFNxdWFyZWQ6YngiKSx0LnEoZyx3LCJkaXN0YW5jZUxpbmVTZWdtZW50U3F1YXJlZDpieSIpKTt2YXIgaD1mLWMsaz1nLWQsbD1oKmgrayprO2MtPWE7ZC09Yjt2YXIgbT0tYypoLWQqaztpZigwPj1tfHxtPj1sKXJldHVybiBoPWYtYSxrPWctYixNYXRoLm1pbihjKmMrZCpkLGgqaCtrKmspO2E9aCpkLWsqYztyZXR1cm4gYSphL2x9O3ZhciBTYTsNCncuZGlzdGFuY2VTcXVhcmVkPVNhPWZ1bmN0aW9uKGEsYixjLGQpe2UmJih0LnEoYSx3LCJkaXN0YW5jZVNxdWFyZWQ6cHgiKSx0LnEoYix3LCJkaXN0YW5jZVNxdWFyZWQ6cHkiKSx0LnEoYyx3LCJkaXN0YW5jZVNxdWFyZWQ6cXgiKSx0LnEoZCx3LCJkaXN0YW5jZVNxdWFyZWQ6cXkiKSk7YT1jLWE7Yj1kLWI7cmV0dXJuIGEqYStiKmJ9O3ZhciBVYTsNCncuZGlyZWN0aW9uPVVhPWZ1bmN0aW9uKGEsYixjLGQpe2UmJih0LnEoYSx3LCJkaXJlY3Rpb246cHgiKSx0LnEoYix3LCJkaXJlY3Rpb246cHkiKSx0LnEoYyx3LCJkaXJlY3Rpb246cXgiKSx0LnEoZCx3LCJkaXJlY3Rpb246cXkiKSk7YT1jLWE7Yj1kLWI7aWYoMD09PWEpcmV0dXJuIDA8Yj85MDowPmI/MjcwOjA7aWYoMD09PWIpcmV0dXJuIDA8YT8wOjE4MDtpZihpc05hTihhKXx8aXNOYU4oYikpcmV0dXJuIDA7ZD0xODAqTWF0aC5hdGFuKE1hdGguYWJzKGIvYSkpL01hdGguUEk7MD5hP2Q9MD5iP2QrMTgwOjE4MC1kOjA+YiYmKGQ9MzYwLWQpO3JldHVybiBkfTt3LnByb3RvdHlwZS5pc1JlYWw9dy5wcm90b3R5cGUuTj1mdW5jdGlvbigpe3JldHVybiBpc0Zpbml0ZSh0aGlzLngpJiZpc0Zpbml0ZSh0aGlzLnkpfTsNCmZ1bmN0aW9uIGdhKGEsYil7dm9pZCAwPT09YXx8dm9pZCAwPT09Yj90aGlzLmhlaWdodD10aGlzLndpZHRoPTA6IWV8fCJudW1iZXIiPT09dHlwZW9mIGEmJigwPD1hfHxpc05hTihhKSkmJiJudW1iZXIiPT09dHlwZW9mIGImJigwPD1ifHxpc05hTihiKSk/KHRoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iKTp0Lm0oIkludmFsaWQgYXJndW1lbnRzIHRvIFNpemUgY29uc3RydWN0b3IiKX10LmdhKCJTaXplIixnYSk7dC5ZaChnYSk7dC5WZChnYSx7d2lkdGg6ITAsaGVpZ2h0OiEwfSk7Z2EucHJvdG90eXBlLmFzc2lnbj1mdW5jdGlvbihhKXt0aGlzLndpZHRoPWEud2lkdGg7dGhpcy5oZWlnaHQ9YS5oZWlnaHR9O2dhLnByb3RvdHlwZS5wPWZ1bmN0aW9uKGEsYil7dGhpcy53aWR0aD1hO3RoaXMuaGVpZ2h0PWJ9Ow0KZ2EucHJvdG90eXBlLnNldFRvPWdhLnByb3RvdHlwZS5TcD1mdW5jdGlvbihhLGIpe2UmJih0LmkoYSwibnVtYmVyIixnYSwic2V0VG86dyIpLHQuaShiLCJudW1iZXIiLGdhLCJzZXRUbzpoIikpOzA+YSYmdC5sYShhLCI+PSAwIixnYSwic2V0VG86dyIpOzA+YiYmdC5sYShiLCI+PSAwIixnYSwic2V0VG86aCIpO3QuTCh0aGlzKTt0aGlzLndpZHRoPWE7dGhpcy5oZWlnaHQ9YjtyZXR1cm4gdGhpc307Z2EucHJvdG90eXBlLnNldD1nYS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEpe2UmJnQubChhLGdhLGdhLCJzZXQ6cyIpO3QuTCh0aGlzKTt0aGlzLndpZHRoPWEud2lkdGg7dGhpcy5oZWlnaHQ9YS5oZWlnaHQ7cmV0dXJuIHRoaXN9O2dhLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGdhO2Eud2lkdGg9dGhpcy53aWR0aDthLmhlaWdodD10aGlzLmhlaWdodDtyZXR1cm4gYX07DQpnYS5wcm90b3R5cGUuSmE9ZnVuY3Rpb24oKXt0aGlzLm9iPSEwO09iamVjdC5mcmVlemUodGhpcyk7cmV0dXJuIHRoaXN9O2dhLnByb3RvdHlwZS5aPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0Zyb3plbih0aGlzKT90aGlzOnRoaXMuY29weSgpLmZyZWV6ZSgpfTtnYS5wcm90b3R5cGUuZnJlZXplPWZ1bmN0aW9uKCl7dGhpcy5vYj0hMDtyZXR1cm4gdGhpc307Z2EucHJvdG90eXBlLkxhPWZ1bmN0aW9uKCl7T2JqZWN0LmlzRnJvemVuKHRoaXMpJiZ0Lm0oImNhbm5vdCB0aGF3IGNvbnN0YW50OiAiK3RoaXMpO3RoaXMub2I9ITE7cmV0dXJuIHRoaXN9Ow0KZ2EucGFyc2U9ZnVuY3Rpb24oYSl7aWYoInN0cmluZyI9PT10eXBlb2YgYSl7YT1hLnNwbGl0KCIgIik7Zm9yKHZhciBiPTAsYz0wOyIiPT09YVtiXTspYisrO3ZhciBkPWFbYisrXTtkJiYoYz1wYXJzZUZsb2F0KGQpKTtmb3IodmFyIGY9MDsiIj09PWFbYl07KWIrKzsoZD1hW2IrK10pJiYoZj1wYXJzZUZsb2F0KGQpKTtyZXR1cm4gbmV3IGdhKGMsZil9cmV0dXJuIG5ldyBnYX07Z2Euc3RyaW5naWZ5PWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgZ2E/YS53aWR0aC50b1N0cmluZygpKyIgIithLmhlaWdodC50b1N0cmluZygpOmEudG9TdHJpbmcoKX07Z2EucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlNpemUoIit0aGlzLndpZHRoKyIsIit0aGlzLmhlaWdodCsiKSJ9Ow0KZ2EucHJvdG90eXBlLmVxdWFscz1nYS5wcm90b3R5cGUuTT1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGdhP3RoaXMud2lkdGg9PT1hLndpZHRoJiZ0aGlzLmhlaWdodD09PWEuaGVpZ2h0OiExfTtnYS5wcm90b3R5cGUuZXF1YWxUbz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLndpZHRoPT09YSYmdGhpcy5oZWlnaHQ9PT1ifTtnYS5wcm90b3R5cGUuZXF1YWxzQXBwcm94PWdhLnByb3RvdHlwZS50Zj1mdW5jdGlvbihhKXtyZXR1cm4gSC5JKHRoaXMud2lkdGgsYS53aWR0aCkmJkguSSh0aGlzLmhlaWdodCxhLmhlaWdodCl9O2dhLnByb3RvdHlwZS5pc1JlYWw9Z2EucHJvdG90eXBlLk49ZnVuY3Rpb24oKXtyZXR1cm4gaXNGaW5pdGUodGhpcy53aWR0aCkmJmlzRmluaXRlKHRoaXMuaGVpZ2h0KX07DQpmdW5jdGlvbiB4KGEsYixjLGQpe3ZvaWQgMD09PWE/dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD10aGlzLnk9dGhpcy54PTA6YSBpbnN0YW5jZW9mIHc/YiBpbnN0YW5jZW9mIHc/KHRoaXMueD1NYXRoLm1pbihhLngsYi54KSx0aGlzLnk9TWF0aC5taW4oYS55LGIueSksdGhpcy53aWR0aD1NYXRoLmFicyhhLngtYi54KSx0aGlzLmhlaWdodD1NYXRoLmFicyhhLnktYi55KSk6YiBpbnN0YW5jZW9mIGdhPyh0aGlzLng9YS54LHRoaXMueT1hLnksdGhpcy53aWR0aD1iLndpZHRoLHRoaXMuaGVpZ2h0PWIuaGVpZ2h0KTp0Lm0oIkluY29ycmVjdCBhcmd1bWVudHMgc3VwcGxpZWQiKTohZXx8Im51bWJlciI9PT10eXBlb2YgYSYmIm51bWJlciI9PT10eXBlb2YgYiYmIm51bWJlciI9PT10eXBlb2YgYyYmKDA8PWN8fGlzTmFOKGMpKSYmIm51bWJlciI9PT10eXBlb2YgZCYmKDA8PWR8fGlzTmFOKGQpKT8odGhpcy54PWEsdGhpcy55PWIsdGhpcy53aWR0aD1jLHRoaXMuaGVpZ2h0PWQpOnQubSgiSW52YWxpZCBhcmd1bWVudHMgdG8gUmVjdCBjb25zdHJ1Y3RvciIpfQ0KdC5nYSgiUmVjdCIseCk7dC5ZaCh4KTt0LlZkKHgse3g6ITAseTohMCx3aWR0aDohMCxoZWlnaHQ6ITB9KTt4LnByb3RvdHlwZS5hc3NpZ249ZnVuY3Rpb24oYSl7dGhpcy54PWEueDt0aGlzLnk9YS55O3RoaXMud2lkdGg9YS53aWR0aDt0aGlzLmhlaWdodD1hLmhlaWdodH07eC5wcm90b3R5cGUucD1mdW5jdGlvbihhLGIsYyxkKXt0aGlzLng9YTt0aGlzLnk9Yjt0aGlzLndpZHRoPWM7dGhpcy5oZWlnaHQ9ZH07ZnVuY3Rpb24gVmEoYSxiLGMpe2Eud2lkdGg9YjthLmhlaWdodD1jfQ0KeC5wcm90b3R5cGUuc2V0VG89eC5wcm90b3R5cGUuU3A9ZnVuY3Rpb24oYSxiLGMsZCl7ZSYmKHQuaShhLCJudW1iZXIiLHgsInNldFRvOngiKSx0LmkoYiwibnVtYmVyIix4LCJzZXRUbzp5IiksdC5pKGMsIm51bWJlciIseCwic2V0VG86dyIpLHQuaShkLCJudW1iZXIiLHgsInNldFRvOmgiKSk7MD5jJiZ0LmxhKGMsIj49IDAiLHgsInNldFRvOnciKTswPmQmJnQubGEoZCwiPj0gMCIseCwic2V0VG86aCIpO3QuTCh0aGlzKTt0aGlzLng9YTt0aGlzLnk9Yjt0aGlzLndpZHRoPWM7dGhpcy5oZWlnaHQ9ZDtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUuc2V0PXgucHJvdG90eXBlLnNldD1mdW5jdGlvbihhKXtlJiZ0LmwoYSx4LHgsInNldDpyIik7dC5MKHRoaXMpO3RoaXMueD1hLng7dGhpcy55PWEueTt0aGlzLndpZHRoPWEud2lkdGg7dGhpcy5oZWlnaHQ9YS5oZWlnaHQ7cmV0dXJuIHRoaXN9Ow0KeC5wcm90b3R5cGUuc2V0UG9pbnQ9eC5wcm90b3R5cGUuRWY9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEsdyx4LCJzZXRQb2ludDpwIik7dC5MKHRoaXMpO3RoaXMueD1hLng7dGhpcy55PWEueTtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUuc2V0U2l6ZT1mdW5jdGlvbihhKXtlJiZ0LmwoYSxnYSx4LCJzZXRTaXplOnMiKTt0LkwodGhpcyk7dGhpcy53aWR0aD1hLndpZHRoO3RoaXMuaGVpZ2h0PWEuaGVpZ2h0O3JldHVybiB0aGlzfTt4LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHg7YS54PXRoaXMueDthLnk9dGhpcy55O2Eud2lkdGg9dGhpcy53aWR0aDthLmhlaWdodD10aGlzLmhlaWdodDtyZXR1cm4gYX07eC5wcm90b3R5cGUuSmE9ZnVuY3Rpb24oKXt0aGlzLm9iPSEwO09iamVjdC5mcmVlemUodGhpcyk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLlo9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzRnJvemVuKHRoaXMpP3RoaXM6dGhpcy5jb3B5KCkuZnJlZXplKCl9Ow0KeC5wcm90b3R5cGUuZnJlZXplPWZ1bmN0aW9uKCl7dGhpcy5vYj0hMDtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUuTGE9ZnVuY3Rpb24oKXtPYmplY3QuaXNGcm96ZW4odGhpcykmJnQubSgiY2Fubm90IHRoYXcgY29uc3RhbnQ6ICIrdGhpcyk7dGhpcy5vYj0hMTtyZXR1cm4gdGhpc307eC5wYXJzZT1mdW5jdGlvbihhKXtpZigic3RyaW5nIj09PXR5cGVvZiBhKXthPWEuc3BsaXQoIiAiKTtmb3IodmFyIGI9MCxjPTA7IiI9PT1hW2JdOyliKys7dmFyIGQ9YVtiKytdO2QmJihjPXBhcnNlRmxvYXQoZCkpO2Zvcih2YXIgZj0wOyIiPT09YVtiXTspYisrOyhkPWFbYisrXSkmJihmPXBhcnNlRmxvYXQoZCkpO2Zvcih2YXIgZz0wOyIiPT09YVtiXTspYisrOyhkPWFbYisrXSkmJihnPXBhcnNlRmxvYXQoZCkpO2Zvcih2YXIgaD0wOyIiPT09YVtiXTspYisrOyhkPWFbYisrXSkmJihoPXBhcnNlRmxvYXQoZCkpO3JldHVybiBuZXcgeChjLGYsZyxoKX1yZXR1cm4gbmV3IHh9Ow0KeC5zdHJpbmdpZnk9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiB4P2EueC50b1N0cmluZygpKyIgIithLnkudG9TdHJpbmcoKSsiICIrYS53aWR0aC50b1N0cmluZygpKyIgIithLmhlaWdodC50b1N0cmluZygpOmEudG9TdHJpbmcoKX07eC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUmVjdCgiK3RoaXMueCsiLCIrdGhpcy55KyIsIit0aGlzLndpZHRoKyIsIit0aGlzLmhlaWdodCsiKSJ9O3gucHJvdG90eXBlLmVxdWFscz14LnByb3RvdHlwZS5NPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgeD90aGlzLng9PT1hLngmJnRoaXMueT09PWEueSYmdGhpcy53aWR0aD09PWEud2lkdGgmJnRoaXMuaGVpZ2h0PT09YS5oZWlnaHQ6ITF9O3gucHJvdG90eXBlLmVxdWFsVG89ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMueD09PWEmJnRoaXMueT09PWImJnRoaXMud2lkdGg9PT1jJiZ0aGlzLmhlaWdodD09PWR9Ow0KeC5wcm90b3R5cGUuZXF1YWxzQXBwcm94PXgucHJvdG90eXBlLnRmPWZ1bmN0aW9uKGEpe3JldHVybiBILkkodGhpcy54LGEueCkmJkguSSh0aGlzLnksYS55KSYmSC5JKHRoaXMud2lkdGgsYS53aWR0aCkmJkguSSh0aGlzLmhlaWdodCxhLmhlaWdodCl9O3gucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQ9eC5wcm90b3R5cGUuR2E9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEsdyx4LCJjb250YWluc1BvaW50OnAiKTtyZXR1cm4gdGhpcy54PD1hLngmJnRoaXMueCt0aGlzLndpZHRoPj1hLngmJnRoaXMueTw9YS55JiZ0aGlzLnkrdGhpcy5oZWlnaHQ+PWEueX07eC5wcm90b3R5cGUuY29udGFpbnNSZWN0PXgucHJvdG90eXBlLldqPWZ1bmN0aW9uKGEpe2UmJnQubChhLHgseCwiY29udGFpbnNSZWN0OnIiKTtyZXR1cm4gdGhpcy54PD1hLngmJmEueCthLndpZHRoPD10aGlzLngrdGhpcy53aWR0aCYmdGhpcy55PD1hLnkmJmEueSthLmhlaWdodDw9dGhpcy55K3RoaXMuaGVpZ2h0fTsNCngucHJvdG90eXBlLmNvbnRhaW5zPXgucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYixjLGQpe2U/KHQucShhLHgsImNvbnRhaW5zOngiKSx0LnEoYix4LCJjb250YWluczp5Iiksdm9pZCAwPT09Yz9jPTA6dC5xKGMseCwiY29udGFpbnM6dyIpLHZvaWQgMD09PWQ/ZD0wOnQucShkLHgsImNvbnRhaW5zOmgiKSwoMD5jfHwwPmQpJiZ0Lm0oIlJlY3QuY29udGFpbnM6V2lkdGggYW5kIGhlaWdodCBjYW5ub3QgYmUgbmVnYXRpdmUiKSk6KHZvaWQgMD09PWMmJihjPTApLHZvaWQgMD09PWQmJihkPTApKTtyZXR1cm4gdGhpcy54PD1hJiZhK2M8PXRoaXMueCt0aGlzLndpZHRoJiZ0aGlzLnk8PWImJmIrZDw9dGhpcy55K3RoaXMuaGVpZ2h0fTt4LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3QuTCh0aGlzKTt0aGlzLmhlaWdodD10aGlzLndpZHRoPXRoaXMueT10aGlzLng9MH07DQp4LnByb3RvdHlwZS5vZmZzZXQ9eC5wcm90b3R5cGUub2Zmc2V0PWZ1bmN0aW9uKGEsYil7ZSYmKHQucShhLHgsIm9mZnNldDpkeCIpLHQucShiLHgsIm9mZnNldDpkeSIpKTt0LkwodGhpcyk7dGhpcy54Kz1hO3RoaXMueSs9YjtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUuaW5mbGF0ZT14LnByb3RvdHlwZS5TZj1mdW5jdGlvbihhLGIpe2UmJih0LnEoYSx4LCJpbmZsYXRlOnciKSx0LnEoYix4LCJpbmZsYXRlOmgiKSk7cmV0dXJuIFdhKHRoaXMsYixhLGIsYSl9O3gucHJvdG90eXBlLmFkZE1hcmdpbj14LnByb3RvdHlwZS5hdz1mdW5jdGlvbihhKXtlJiZ0LmwoYSxhYix4LCJhZGRNYXJnaW46bSIpO3JldHVybiBXYSh0aGlzLGEudG9wLGEucmlnaHQsYS5ib3R0b20sYS5sZWZ0KX07DQp4LnByb3RvdHlwZS5zdWJ0cmFjdE1hcmdpbj14LnByb3RvdHlwZS5aSj1mdW5jdGlvbihhKXtlJiZ0LmwoYSxhYix4LCJzdWJ0cmFjdE1hcmdpbjptIik7cmV0dXJuIFdhKHRoaXMsLWEudG9wLC1hLnJpZ2h0LC1hLmJvdHRvbSwtYS5sZWZ0KX07eC5wcm90b3R5cGUuZ3Jvdz1mdW5jdGlvbihhLGIsYyxkKXtlJiYodC5xKGEseCwiZ3Jvdzp0IiksdC5xKGIseCwiZ3JvdzpyIiksdC5xKGMseCwiZ3JvdzpiIiksdC5xKGQseCwiZ3JvdzpsIikpO3JldHVybiBXYSh0aGlzLGEsYixjLGQpfTtmdW5jdGlvbiBXYShhLGIsYyxkLGYpe3QuTChhKTt2YXIgZz1hLndpZHRoO2MrZjw9LWc/KGEueCs9Zy8yLGEud2lkdGg9MCk6KGEueC09ZixhLndpZHRoKz1jK2YpO2M9YS5oZWlnaHQ7YitkPD0tYz8oYS55Kz1jLzIsYS5oZWlnaHQ9MCk6KGEueS09YixhLmhlaWdodCs9YitkKTtyZXR1cm4gYX0NCngucHJvdG90eXBlLmludGVyc2VjdFJlY3Q9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEseCx4LCJpbnRlcnNlY3RSZWN0OnIiKTtyZXR1cm4gY2IodGhpcyxhLngsYS55LGEud2lkdGgsYS5oZWlnaHQpfTt4LnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYSxiLGMsZCl7ZSYmKHQucShhLHgsImludGVyc2VjdDp4IiksdC5xKGIseCwiaW50ZXJzZWN0OnkiKSx0LnEoYyx4LCJpbnRlcnNlY3Q6dyIpLHQucShkLHgsImludGVyc2VjdDpoIiksKDA+Y3x8MD5kKSYmdC5tKCJSZWN0LmludGVyc2VjdDpXaWR0aCBhbmQgaGVpZ2h0IGNhbm5vdCBiZSBuZWdhdGl2ZSIpKTtyZXR1cm4gY2IodGhpcyxhLGIsYyxkKX07DQpmdW5jdGlvbiBjYihhLGIsYyxkLGYpe3QuTChhKTt2YXIgZz1NYXRoLm1heChhLngsYiksaD1NYXRoLm1heChhLnksYyk7Yj1NYXRoLm1pbihhLngrYS53aWR0aCxiK2QpO2M9TWF0aC5taW4oYS55K2EuaGVpZ2h0LGMrZik7YS54PWc7YS55PWg7YS53aWR0aD1NYXRoLm1heCgwLGItZyk7YS5oZWlnaHQ9TWF0aC5tYXgoMCxjLWgpO3JldHVybiBhfXgucHJvdG90eXBlLmludGVyc2VjdHNSZWN0PXgucHJvdG90eXBlLlRmPWZ1bmN0aW9uKGEpe2UmJnQubChhLHgseCwiaW50ZXJzZWN0c1JlY3Q6ciIpO3JldHVybiB0aGlzLmFGKGEueCxhLnksYS53aWR0aCxhLmhlaWdodCl9Ow0KeC5wcm90b3R5cGUuaW50ZXJzZWN0cz14LnByb3RvdHlwZS5hRj1mdW5jdGlvbihhLGIsYyxkKXtlJiYodC5xKGEseCwiaW50ZXJzZWN0czp4IiksdC5xKGIseCwiaW50ZXJzZWN0czp5IiksdC5xKGEseCwiaW50ZXJzZWN0czp3IiksdC5xKGIseCwiaW50ZXJzZWN0czpoIiksKDA+Y3x8MD5kKSYmdC5tKCJSZWN0LmludGVyc2VjdHM6V2lkdGggYW5kIGhlaWdodCBjYW5ub3QgYmUgbmVnYXRpdmUiKSk7dmFyIGY9dGhpcy53aWR0aCxnPXRoaXMueDtpZihJbmZpbml0eSE9PWYmJkluZmluaXR5IT09YyYmKGYrPWcsYys9YSxpc05hTihjKXx8aXNOYU4oZil8fGc+Y3x8YT5mKSlyZXR1cm4hMTthPXRoaXMuaGVpZ2h0O2M9dGhpcy55O3JldHVybiBJbmZpbml0eSE9PWEmJkluZmluaXR5IT09ZCYmKGErPWMsZCs9Yixpc05hTihkKXx8aXNOYU4oYSl8fGM+ZHx8Yj5hKT8hMTohMH07DQpmdW5jdGlvbiBlYihhLGIpe3ZhciBjPWEud2lkdGgsZD1iLndpZHRoKzEwKzEwLGY9YS54LGc9Yi54LTEwO2lmKGY+ZCtnfHxnPmMrZilyZXR1cm4hMTtjPWEuaGVpZ2h0O2Q9Yi5oZWlnaHQrMTArMTA7Zj1hLnk7Zz1iLnktMTA7cmV0dXJuIGY+ZCtnfHxnPmMrZj8hMTohMH14LnByb3RvdHlwZS51bmlvblBvaW50PXgucHJvdG90eXBlLmtqPWZ1bmN0aW9uKGEpe2UmJnQubChhLHcseCwidW5pb25Qb2ludDpwIik7cmV0dXJuIGhiKHRoaXMsYS54LGEueSwwLDApfTt4LnByb3RvdHlwZS51bmlvblJlY3Q9eC5wcm90b3R5cGUubGo9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEseCx4LCJ1bmlvblJlY3Q6ciIpO3JldHVybiBoYih0aGlzLGEueCxhLnksYS53aWR0aCxhLmhlaWdodCl9Ow0KeC5wcm90b3R5cGUudW5pb249eC5wcm90b3R5cGUuUEc9ZnVuY3Rpb24oYSxiLGMsZCl7dC5MKHRoaXMpO2U/KHQucShhLHgsInVuaW9uOngiKSx0LnEoYix4LCJ1bmlvbjp5Iiksdm9pZCAwPT09Yz9jPTA6dC5xKGMseCwidW5pb246dyIpLHZvaWQgMD09PWQ/ZD0wOnQucShkLHgsInVuaW9uOmgiKSwoMD5jfHwwPmQpJiZ0Lm0oIlJlY3QudW5pb246V2lkdGggYW5kIGhlaWdodCBjYW5ub3QgYmUgbmVnYXRpdmUiKSk6KHZvaWQgMD09PWMmJihjPTApLHZvaWQgMD09PWQmJihkPTApKTtyZXR1cm4gaGIodGhpcyxhLGIsYyxkKX07ZnVuY3Rpb24gaGIoYSxiLGMsZCxmKXt2YXIgZz1NYXRoLm1pbihhLngsYiksaD1NYXRoLm1pbihhLnksYyk7Yj1NYXRoLm1heChhLngrYS53aWR0aCxiK2QpO2M9TWF0aC5tYXgoYS55K2EuaGVpZ2h0LGMrZik7YS54PWc7YS55PWg7YS53aWR0aD1iLWc7YS5oZWlnaHQ9Yy1oO3JldHVybiBhfQ0KeC5wcm90b3R5cGUuc2V0U3BvdD14LnByb3RvdHlwZS5QdD1mdW5jdGlvbihhLGIsYyl7ZSYmKHQucShhLHgsInNldFNwb3Q6eCIpLHQucShiLHgsInNldFNwb3Q6eSIpLHQubChjLEkseCwic2V0U3BvdDpzcG90IikpO3QuTCh0aGlzKTt0aGlzLng9YS1jLm9mZnNldFgtYy54KnRoaXMud2lkdGg7dGhpcy55PWItYy5vZmZzZXRZLWMueSp0aGlzLmhlaWdodDtyZXR1cm4gdGhpc307dmFyIG1iOw0KeC5jb250YWlucz1tYj1mdW5jdGlvbihhLGIsYyxkLGYsZyxoLGspe2U/KHQucShhLHgsImNvbnRhaW5zOnJ4IiksdC5xKGIseCwiY29udGFpbnM6cnkiKSx0LnEoYyx4LCJjb250YWluczpydyIpLHQucShkLHgsImNvbnRhaW5zOnJoIiksdC5xKGYseCwiY29udGFpbnM6eCIpLHQucShnLHgsImNvbnRhaW5zOnkiKSx2b2lkIDA9PT1oP2g9MDp0LnEoaCx4LCJjb250YWluczp3Iiksdm9pZCAwPT09az9rPTA6dC5xKGsseCwiY29udGFpbnM6aCIpLCgwPmN8fDA+ZHx8MD5ofHwwPmspJiZ0Lm0oIlJlY3QuY29udGFpbnM6V2lkdGggYW5kIGhlaWdodCBjYW5ub3QgYmUgbmVnYXRpdmUiKSk6KHZvaWQgMD09PWgmJihoPTApLHZvaWQgMD09PWsmJihrPTApKTtyZXR1cm4gYTw9ZiYmZitoPD1hK2MmJmI8PWcmJmcrazw9YitkfTsNCnguaW50ZXJzZWN0cz1mdW5jdGlvbihhLGIsYyxkLGYsZyxoLGspe2UmJih0LnEoYSx4LCJpbnRlcnNlY3RzOnJ4IiksdC5xKGIseCwiaW50ZXJzZWN0czpyeSIpLHQucShjLHgsImludGVyc2VjdHM6cnciKSx0LnEoZCx4LCJpbnRlcnNlY3RzOnJoIiksdC5xKGYseCwiaW50ZXJzZWN0czp4IiksdC5xKGcseCwiaW50ZXJzZWN0czp5IiksdC5xKGgseCwiaW50ZXJzZWN0czp3IiksdC5xKGsseCwiaW50ZXJzZWN0czpoIiksKDA+Y3x8MD5kfHwwPmh8fDA+aykmJnQubSgiUmVjdC5pbnRlcnNlY3RzOldpZHRoIGFuZCBoZWlnaHQgY2Fubm90IGJlIG5lZ2F0aXZlIikpO2MrPWE7aCs9ZjtpZihhPmh8fGY+YylyZXR1cm4hMTthPWQrYjtrKz1nO3JldHVybiBiPmt8fGc+YT8hMTohMH07dC5nKHgsImxlZnQiLHgucHJvdG90eXBlLmxlZnQpOw0KdC5kZWZpbmVQcm9wZXJ0eSh4LHtsZWZ0OiJsZWZ0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxmdW5jdGlvbihhKXt0LkwodGhpcyxhKTtlJiZ0LmkoYSwibnVtYmVyIix4LCJsZWZ0Iik7dGhpcy54PWF9KTt0LmcoeCwidG9wIix4LnByb3RvdHlwZS50b3ApO3QuZGVmaW5lUHJvcGVydHkoeCx7dG9wOiJ0b3AifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LGZ1bmN0aW9uKGEpe3QuTCh0aGlzLGEpO2UmJnQuaShhLCJudW1iZXIiLHgsInRvcCIpO3RoaXMueT1hfSk7dC5nKHgsInJpZ2h0Iix4LnByb3RvdHlwZS5yaWdodCk7dC5kZWZpbmVQcm9wZXJ0eSh4LHtyaWdodDoicmlnaHQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aH0sZnVuY3Rpb24oYSl7dC5MKHRoaXMsYSk7ZSYmdC5xKGEseCwicmlnaHQiKTt0aGlzLngrPWEtKHRoaXMueCt0aGlzLndpZHRoKX0pO3QuZyh4LCJib3R0b20iLHgucHJvdG90eXBlLmJvdHRvbSk7DQp0LmRlZmluZVByb3BlcnR5KHgse2JvdHRvbToiYm90dG9tIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55K3RoaXMuaGVpZ2h0fSxmdW5jdGlvbihhKXt0LkwodGhpcyxhKTtlJiZ0LnEoYSx4LCJ0b3AiKTt0aGlzLnkrPWEtKHRoaXMueSt0aGlzLmhlaWdodCl9KTt0LmcoeCwicG9zaXRpb24iLHgucHJvdG90eXBlLnBvc2l0aW9uKTt0LmRlZmluZVByb3BlcnR5KHgse3Bvc2l0aW9uOiJwb3NpdGlvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3KHRoaXMueCx0aGlzLnkpfSxmdW5jdGlvbihhKXt0LkwodGhpcyxhKTtlJiZ0LmwoYSx3LHgsInBvc2l0aW9uIik7dGhpcy54PWEueDt0aGlzLnk9YS55fSk7dC5nKHgsInNpemUiLHgucHJvdG90eXBlLnNpemUpOw0KdC5kZWZpbmVQcm9wZXJ0eSh4LHtzaXplOiJzaXplIn0sZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGdhKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSxmdW5jdGlvbihhKXt0LkwodGhpcyxhKTtlJiZ0LmwoYSxnYSx4LCJzaXplIik7dGhpcy53aWR0aD1hLndpZHRoO3RoaXMuaGVpZ2h0PWEuaGVpZ2h0fSk7dC5nKHgsImNlbnRlciIseC5wcm90b3R5cGUuVHopO3QuZGVmaW5lUHJvcGVydHkoeCx7VHo6ImNlbnRlciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3KHRoaXMueCt0aGlzLndpZHRoLzIsdGhpcy55K3RoaXMuaGVpZ2h0LzIpfSxmdW5jdGlvbihhKXt0LkwodGhpcyxhKTtlJiZ0LmwoYSx3LHgsImNlbnRlciIpO3RoaXMueD1hLngtdGhpcy53aWR0aC8yO3RoaXMueT1hLnktdGhpcy5oZWlnaHQvMn0pO3QuZyh4LCJjZW50ZXJYIix4LnByb3RvdHlwZS5EYSk7DQp0LmRlZmluZVByb3BlcnR5KHgse0RhOiJjZW50ZXJYIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGgvMn0sZnVuY3Rpb24oYSl7dC5MKHRoaXMsYSk7ZSYmdC5xKGEseCwiY2VudGVyWCIpO3RoaXMueD1hLXRoaXMud2lkdGgvMn0pO3QuZyh4LCJjZW50ZXJZIix4LnByb3RvdHlwZS5QYSk7dC5kZWZpbmVQcm9wZXJ0eSh4LHtQYToiY2VudGVyWSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodC8yfSxmdW5jdGlvbihhKXt0LkwodGhpcyxhKTtlJiZ0LnEoYSx4LCJjZW50ZXJZIik7dGhpcy55PWEtdGhpcy5oZWlnaHQvMn0pO3gucHJvdG90eXBlLmlzUmVhbD14LnByb3RvdHlwZS5OPWZ1bmN0aW9uKCl7cmV0dXJuIGlzRmluaXRlKHRoaXMueCkmJmlzRmluaXRlKHRoaXMueSkmJmlzRmluaXRlKHRoaXMud2lkdGgpJiZpc0Zpbml0ZSh0aGlzLmhlaWdodCl9Ow0KeC5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy53aWR0aCYmMD09PXRoaXMuaGVpZ2h0fTtmdW5jdGlvbiBhYihhLGIsYyxkKXt2b2lkIDA9PT1hP3RoaXMubGVmdD10aGlzLmJvdHRvbT10aGlzLnJpZ2h0PXRoaXMudG9wPTA6dm9pZCAwPT09Yj90aGlzLmxlZnQ9dGhpcy5ib3R0b209dGhpcy5yaWdodD10aGlzLnRvcD1hOnZvaWQgMD09PWM/KGQ9Yix0aGlzLnRvcD1hLHRoaXMucmlnaHQ9Yix0aGlzLmJvdHRvbT1hLHRoaXMubGVmdD1kKTp2b2lkIDAhPT1kPyh0aGlzLnRvcD1hLHRoaXMucmlnaHQ9Yix0aGlzLmJvdHRvbT1jLHRoaXMubGVmdD1kKTp0Lm0oIkludmFsaWQgYXJndW1lbnRzIHRvIE1hcmdpbiBjb25zdHJ1Y3RvciIpfXQuZ2EoIk1hcmdpbiIsYWIpO3QuWWgoYWIpO3QuVmQoYWIse3RvcDohMCxyaWdodDohMCxib3R0b206ITAsbGVmdDohMH0pOw0KYWIucHJvdG90eXBlLmFzc2lnbj1mdW5jdGlvbihhKXt0aGlzLnRvcD1hLnRvcDt0aGlzLnJpZ2h0PWEucmlnaHQ7dGhpcy5ib3R0b209YS5ib3R0b207dGhpcy5sZWZ0PWEubGVmdH07YWIucHJvdG90eXBlLnNldFRvPWFiLnByb3RvdHlwZS5TcD1mdW5jdGlvbihhLGIsYyxkKXtlJiYodC5pKGEsIm51bWJlciIsYWIsInNldFRvOnQiKSx0LmkoYiwibnVtYmVyIixhYiwic2V0VG86ciIpLHQuaShjLCJudW1iZXIiLGFiLCJzZXRUbzpiIiksdC5pKGQsIm51bWJlciIsYWIsInNldFRvOmwiKSk7dC5MKHRoaXMpO3RoaXMudG9wPWE7dGhpcy5yaWdodD1iO3RoaXMuYm90dG9tPWM7dGhpcy5sZWZ0PWQ7cmV0dXJuIHRoaXN9Ow0KYWIucHJvdG90eXBlLnNldD1hYi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEpe2UmJnQubChhLGFiLGFiLCJhc3NpZ246bSIpO3QuTCh0aGlzKTt0aGlzLnRvcD1hLnRvcDt0aGlzLnJpZ2h0PWEucmlnaHQ7dGhpcy5ib3R0b209YS5ib3R0b207dGhpcy5sZWZ0PWEubGVmdDtyZXR1cm4gdGhpc307YWIucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgYWI7YS50b3A9dGhpcy50b3A7YS5yaWdodD10aGlzLnJpZ2h0O2EuYm90dG9tPXRoaXMuYm90dG9tO2EubGVmdD10aGlzLmxlZnQ7cmV0dXJuIGF9O2FiLnByb3RvdHlwZS5KYT1mdW5jdGlvbigpe3RoaXMub2I9ITA7T2JqZWN0LmZyZWV6ZSh0aGlzKTtyZXR1cm4gdGhpc307YWIucHJvdG90eXBlLlo9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzRnJvemVuKHRoaXMpP3RoaXM6dGhpcy5jb3B5KCkuZnJlZXplKCl9O2FiLnByb3RvdHlwZS5mcmVlemU9ZnVuY3Rpb24oKXt0aGlzLm9iPSEwO3JldHVybiB0aGlzfTsNCmFiLnByb3RvdHlwZS5MYT1mdW5jdGlvbigpe09iamVjdC5pc0Zyb3plbih0aGlzKSYmdC5tKCJjYW5ub3QgdGhhdyBjb25zdGFudDogIit0aGlzKTt0aGlzLm9iPSExO3JldHVybiB0aGlzfTthYi5wYXJzZT1mdW5jdGlvbihhKXtpZigic3RyaW5nIj09PXR5cGVvZiBhKXthPWEuc3BsaXQoIiAiKTtmb3IodmFyIGI9MCxjPTA7IiI9PT1hW2JdOyliKys7dmFyIGQ9YVtiKytdO2QmJihjPXBhcnNlRmxvYXQoZCkpO2Zvcih2YXIgZj12b2lkIDA7IiI9PT1hW2JdOyliKys7KGQ9YVtiKytdKSYmKGY9cGFyc2VGbG9hdChkKSk7Zm9yKHZhciBnPXZvaWQgMDsiIj09PWFbYl07KWIrKzsoZD1hW2IrK10pJiYoZz1wYXJzZUZsb2F0KGQpKTtmb3IodmFyIGg9dm9pZCAwOyIiPT09YVtiXTspYisrOyhkPWFbYisrXSkmJihoPXBhcnNlRmxvYXQoZCkpO3JldHVybiBuZXcgYWIoYyxmLGcsaCl9cmV0dXJuIG5ldyBhYn07DQphYi5zdHJpbmdpZnk9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBhYj9hLnRvcC50b1N0cmluZygpKyIgIithLnJpZ2h0LnRvU3RyaW5nKCkrIiAiK2EuYm90dG9tLnRvU3RyaW5nKCkrIiAiK2EubGVmdC50b1N0cmluZygpOmEudG9TdHJpbmcoKX07YWIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk1hcmdpbigiK3RoaXMudG9wKyIsIit0aGlzLnJpZ2h0KyIsIit0aGlzLmJvdHRvbSsiLCIrdGhpcy5sZWZ0KyIpIn07YWIucHJvdG90eXBlLmVxdWFscz1hYi5wcm90b3R5cGUuTT1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGFiP3RoaXMudG9wPT09YS50b3AmJnRoaXMucmlnaHQ9PT1hLnJpZ2h0JiZ0aGlzLmJvdHRvbT09PWEuYm90dG9tJiZ0aGlzLmxlZnQ9PT1hLmxlZnQ6ITF9Ow0KYWIucHJvdG90eXBlLmVxdWFsVG89ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMudG9wPT09YSYmdGhpcy5yaWdodD09PWImJnRoaXMuYm90dG9tPT09YyYmdGhpcy5sZWZ0PT09ZH07YWIucHJvdG90eXBlLmVxdWFsc0FwcHJveD1hYi5wcm90b3R5cGUudGY9ZnVuY3Rpb24oYSl7cmV0dXJuIEguSSh0aGlzLnRvcCxhLnRvcCkmJkguSSh0aGlzLnJpZ2h0LGEucmlnaHQpJiZILkkodGhpcy5ib3R0b20sYS5ib3R0b20pJiZILkkodGhpcy5sZWZ0LGEubGVmdCl9O2FiLnByb3RvdHlwZS5pc1JlYWw9YWIucHJvdG90eXBlLk49ZnVuY3Rpb24oKXtyZXR1cm4gaXNGaW5pdGUodGhpcy50b3ApJiZpc0Zpbml0ZSh0aGlzLnJpZ2h0KSYmaXNGaW5pdGUodGhpcy5ib3R0b20pJiZpc0Zpbml0ZSh0aGlzLmxlZnQpfTtmdW5jdGlvbiBoYSgpe3RoaXMubTExPTE7dGhpcy5tMjE9dGhpcy5tMTI9MDt0aGlzLm0yMj0xO3RoaXMuZHk9dGhpcy5keD0wfXQuWWgoaGEpOw0KdC5WZChoYSx7bTExOiEwLG0xMjohMCxtMjE6ITAsbTIyOiEwLGR4OiEwLGR5OiEwfSk7aGEucHJvdG90eXBlLnNldD1oYS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEpe2UmJnQubChhLGhhLGhhLCJzZXQ6dCIpO3RoaXMubTExPWEubTExO3RoaXMubTEyPWEubTEyO3RoaXMubTIxPWEubTIxO3RoaXMubTIyPWEubTIyO3RoaXMuZHg9YS5keDt0aGlzLmR5PWEuZHk7cmV0dXJuIHRoaXN9O2hhLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGhhO2EubTExPXRoaXMubTExO2EubTEyPXRoaXMubTEyO2EubTIxPXRoaXMubTIxO2EubTIyPXRoaXMubTIyO2EuZHg9dGhpcy5keDthLmR5PXRoaXMuZHk7cmV0dXJuIGF9O2hhLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJUcmFuc2Zvcm0oIit0aGlzLm0xMSsiLCIrdGhpcy5tMTIrIiwiK3RoaXMubTIxKyIsIit0aGlzLm0yMisiLCIrdGhpcy5keCsiLCIrdGhpcy5keSsiKSJ9Ow0KaGEucHJvdG90eXBlLmVxdWFscz1oYS5wcm90b3R5cGUuTT1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGhhP3RoaXMubTExPT09YS5tMTEmJnRoaXMubTEyPT09YS5tMTImJnRoaXMubTIxPT09YS5tMjEmJnRoaXMubTIyPT09YS5tMjImJnRoaXMuZHg9PT1hLmR4JiZ0aGlzLmR5PT09YS5keTohMX07aGEucHJvdG90eXBlLnJlc2V0PWhhLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMubTExPTE7dGhpcy5tMjE9dGhpcy5tMTI9MDt0aGlzLm0yMj0xO3RoaXMuZHk9dGhpcy5keD0wfTsNCmhhLnByb3RvdHlwZS5tdWx0aXBseT1oYS5wcm90b3R5cGUubXVsdGlwbHk9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEsaGEsaGEsIm11bHRpcGx5Om1hdHJpeCIpO3ZhciBiPXRoaXMubTEyKmEubTExK3RoaXMubTIyKmEubTEyLGM9dGhpcy5tMTEqYS5tMjErdGhpcy5tMjEqYS5tMjIsZD10aGlzLm0xMiphLm0yMSt0aGlzLm0yMiphLm0yMixmPXRoaXMubTExKmEuZHgrdGhpcy5tMjEqYS5keSt0aGlzLmR4LGc9dGhpcy5tMTIqYS5keCt0aGlzLm0yMiphLmR5K3RoaXMuZHk7dGhpcy5tMTE9dGhpcy5tMTEqYS5tMTErdGhpcy5tMjEqYS5tMTI7dGhpcy5tMTI9Yjt0aGlzLm0yMT1jO3RoaXMubTIyPWQ7dGhpcy5keD1mO3RoaXMuZHk9ZztyZXR1cm4gdGhpc307DQpoYS5wcm90b3R5cGUubXVsdGlwbHlJbnZlcnRlZD1oYS5wcm90b3R5cGUuRUY9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEsaGEsaGEsIm11bHRpcGx5SW52ZXJ0ZWQ6bWF0cml4Iik7dmFyIGI9MS8oYS5tMTEqYS5tMjItYS5tMTIqYS5tMjEpLGM9YS5tMjIqYixkPS1hLm0xMipiLGY9LWEubTIxKmIsZz1hLm0xMSpiLGg9YiooYS5tMjEqYS5keS1hLm0yMiphLmR4KSxrPWIqKGEubTEyKmEuZHgtYS5tMTEqYS5keSk7YT10aGlzLm0xMipjK3RoaXMubTIyKmQ7Yj10aGlzLm0xMSpmK3RoaXMubTIxKmc7Zj10aGlzLm0xMipmK3RoaXMubTIyKmc7Zz10aGlzLm0xMSpoK3RoaXMubTIxKmsrdGhpcy5keDtoPXRoaXMubTEyKmgrdGhpcy5tMjIqayt0aGlzLmR5O3RoaXMubTExPXRoaXMubTExKmMrdGhpcy5tMjEqZDt0aGlzLm0xMj1hO3RoaXMubTIxPWI7dGhpcy5tMjI9Zjt0aGlzLmR4PWc7dGhpcy5keT1oO3JldHVybiB0aGlzfTsNCmhhLnByb3RvdHlwZS5pbnZlcnQ9aGEucHJvdG90eXBlLm9BPWZ1bmN0aW9uKCl7dmFyIGE9MS8odGhpcy5tMTEqdGhpcy5tMjItdGhpcy5tMTIqdGhpcy5tMjEpLGI9LXRoaXMubTEyKmEsYz0tdGhpcy5tMjEqYSxkPXRoaXMubTExKmEsZj1hKih0aGlzLm0yMSp0aGlzLmR5LXRoaXMubTIyKnRoaXMuZHgpLGc9YSoodGhpcy5tMTIqdGhpcy5keC10aGlzLm0xMSp0aGlzLmR5KTt0aGlzLm0xMT10aGlzLm0yMiphO3RoaXMubTEyPWI7dGhpcy5tMjE9Yzt0aGlzLm0yMj1kO3RoaXMuZHg9Zjt0aGlzLmR5PWd9Ow0KaGEucHJvdG90eXBlLnJvdGF0ZT1oYS5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEsYixjKXtlJiYodC5xKGEsaGEsInJvdGF0ZTphbmdsZSIpLHQucShiLGhhLCJyb3RhdGU6cngiKSx0LnEoYyxoYSwicm90YXRlOnJ5IikpO3RoaXMudHJhbnNsYXRlKGIsYyk7dmFyIGQ7MD09PWE/KGE9MSxkPTApOjkwPT09YT8oYT0wLGQ9MSk6MTgwPT09YT8oYT0tMSxkPTApOjI3MD09PWE/KGE9MCxkPS0xKTooZD1hKk1hdGguUEkvMTgwLGE9TWF0aC5jb3MoZCksZD1NYXRoLnNpbihkKSk7dmFyIGY9dGhpcy5tMTIqYSt0aGlzLm0yMipkLGc9dGhpcy5tMTEqLWQrdGhpcy5tMjEqYSxoPXRoaXMubTEyKi1kK3RoaXMubTIyKmE7dGhpcy5tMTE9dGhpcy5tMTEqYSt0aGlzLm0yMSpkO3RoaXMubTEyPWY7dGhpcy5tMjE9Zzt0aGlzLm0yMj1oO3RoaXMudHJhbnNsYXRlKC1iLC1jKX07DQpoYS5wcm90b3R5cGUudHJhbnNsYXRlPWhhLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiKXtlJiYodC5xKGEsaGEsInRyYW5zbGF0ZTp4IiksdC5xKGIsaGEsInRyYW5zbGF0ZTp5IikpO3RoaXMuZHgrPXRoaXMubTExKmErdGhpcy5tMjEqYjt0aGlzLmR5Kz10aGlzLm0xMiphK3RoaXMubTIyKmJ9O2hhLnByb3RvdHlwZS5zY2FsZT1oYS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj1hKTtlJiYodC5xKGEsaGEsInRyYW5zbGF0ZTpzeCIpLHQucShiLGhhLCJ0cmFuc2xhdGU6c3kiKSk7dGhpcy5tMTEqPWE7dGhpcy5tMTIqPWE7dGhpcy5tMjEqPWI7dGhpcy5tMjIqPWJ9Ow0KaGEucHJvdG90eXBlLnRyYW5zZm9ybVBvaW50PWhhLnByb3RvdHlwZS5UYT1mdW5jdGlvbihhKXtlJiZ0LmwoYSx3LGhhLCJ0cmFuc2Zvcm1Qb2ludDpwIik7dmFyIGI9YS54LGM9YS55O2EueD1iKnRoaXMubTExK2MqdGhpcy5tMjErdGhpcy5keDthLnk9Yip0aGlzLm0xMitjKnRoaXMubTIyK3RoaXMuZHk7cmV0dXJuIGF9O2hhLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybVBvaW50PWhhLnByb3RvdHlwZS5iaT1mdW5jdGlvbihhKXtlJiZ0LmwoYSx3LGhhLCJpbnZlcnRlZFRyYW5zZm9ybVBvaW50OnAiKTt2YXIgYj0xLyh0aGlzLm0xMSp0aGlzLm0yMi10aGlzLm0xMip0aGlzLm0yMSksYz0tdGhpcy5tMTIqYixkPXRoaXMubTExKmIsZj1iKih0aGlzLm0xMip0aGlzLmR4LXRoaXMubTExKnRoaXMuZHkpLGc9YS54LGg9YS55O2EueD1nKnRoaXMubTIyKmIraCotdGhpcy5tMjEqYitiKih0aGlzLm0yMSp0aGlzLmR5LXRoaXMubTIyKnRoaXMuZHgpO2EueT1nKmMraCpkK2Y7cmV0dXJuIGF9Ow0KaGEucHJvdG90eXBlLnRyYW5zZm9ybVJlY3Q9aGEucHJvdG90eXBlLktHPWZ1bmN0aW9uKGEpe2UmJnQubChhLHgsaGEsInRyYW5zZm9ybVJlY3Q6cmVjdCIpO3ZhciBiPWEueCxjPWEueSxkPWIrYS53aWR0aCxmPWMrYS5oZWlnaHQsZz10aGlzLm0xMSxoPXRoaXMubTEyLGs9dGhpcy5tMjEsbD10aGlzLm0yMixtPXRoaXMuZHgsbj10aGlzLmR5LHA9YipnK2MqayttLHE9YipoK2MqbCtuLHI9ZCpnK2MqayttLGM9ZCpoK2MqbCtuLHM9YipnK2YqayttLGI9YipoK2YqbCtuLGc9ZCpnK2YqayttLGQ9ZCpoK2YqbCtuLGY9cCxoPXEscD1NYXRoLm1pbihwLHIpLGY9TWF0aC5tYXgoZixyKSxoPU1hdGgubWluKGgsYykscT1NYXRoLm1heChxLGMpLHA9TWF0aC5taW4ocCxzKSxmPU1hdGgubWF4KGYscyksaD1NYXRoLm1pbihoLGIpLHE9TWF0aC5tYXgocSxiKSxwPU1hdGgubWluKHAsZyksZj1NYXRoLm1heChmLGcpLGg9TWF0aC5taW4oaCxkKSxxPU1hdGgubWF4KHEsZCk7YS54PXA7YS55PQ0KaDthLndpZHRoPWYtcDthLmhlaWdodD1xLWh9O2hhLnByb3RvdHlwZS5pc0lkZW50aXR5PWhhLnByb3RvdHlwZS5wdD1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5tMTEmJjA9PT10aGlzLm0xMiYmMD09PXRoaXMubTIxJiYxPT09dGhpcy5tMjImJjA9PT10aGlzLmR4JiYwPT09dGhpcy5keX07ZnVuY3Rpb24gSShhLGIsYyxkKXt2b2lkIDA9PT1hP3RoaXMub2Zmc2V0WT10aGlzLm9mZnNldFg9dGhpcy55PXRoaXMueD0wOih2b2lkIDA9PT1iJiYoYj0wKSx2b2lkIDA9PT1jJiYoYz0wKSx2b2lkIDA9PT1kJiYoZD0wKSx0aGlzLng9YSx0aGlzLnk9Yix0aGlzLm9mZnNldFg9Yyx0aGlzLm9mZnNldFk9ZCl9dC5nYSgiU3BvdCIsSSk7dC5ZaChJKTt0LlZkKEkse3g6ITAseTohMCxvZmZzZXRYOiEwLG9mZnNldFk6ITB9KTtJLnByb3RvdHlwZS5hc3NpZ249ZnVuY3Rpb24oYSl7dGhpcy54PWEueDt0aGlzLnk9YS55O3RoaXMub2Zmc2V0WD1hLm9mZnNldFg7dGhpcy5vZmZzZXRZPWEub2Zmc2V0WX07DQpJLnByb3RvdHlwZS5zZXRUbz1JLnByb3RvdHlwZS5TcD1mdW5jdGlvbihhLGIsYyxkKXtlJiYob2IoYSwic2V0VG86eCIpLG9iKGIsInNldFRvOnkiKSxwYihjLCJzZXRUbzpvZmZ4IikscGIoZCwic2V0VG86b2ZmeSIpKTt0LkwodGhpcyk7dGhpcy54PWE7dGhpcy55PWI7dGhpcy5vZmZzZXRYPWM7dGhpcy5vZmZzZXRZPWQ7cmV0dXJuIHRoaXN9O0kucHJvdG90eXBlLnNldD1JLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEsSSxJLCJzZXQ6cyIpO3QuTCh0aGlzKTt0aGlzLng9YS54O3RoaXMueT1hLnk7dGhpcy5vZmZzZXRYPWEub2Zmc2V0WDt0aGlzLm9mZnNldFk9YS5vZmZzZXRZO3JldHVybiB0aGlzfTtJLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IEk7YS54PXRoaXMueDthLnk9dGhpcy55O2Eub2Zmc2V0WD10aGlzLm9mZnNldFg7YS5vZmZzZXRZPXRoaXMub2Zmc2V0WTtyZXR1cm4gYX07DQpJLnByb3RvdHlwZS5KYT1mdW5jdGlvbigpe3RoaXMub2I9ITA7T2JqZWN0LmZyZWV6ZSh0aGlzKTtyZXR1cm4gdGhpc307SS5wcm90b3R5cGUuWj1mdW5jdGlvbigpe3JldHVybiBPYmplY3QuaXNGcm96ZW4odGhpcyk/dGhpczp0aGlzLmNvcHkoKS5mcmVlemUoKX07SS5wcm90b3R5cGUuZnJlZXplPWZ1bmN0aW9uKCl7dGhpcy5vYj0hMDtyZXR1cm4gdGhpc307SS5wcm90b3R5cGUuTGE9ZnVuY3Rpb24oKXtPYmplY3QuaXNGcm96ZW4odGhpcykmJnQubSgiY2Fubm90IHRoYXcgY29uc3RhbnQ6ICIrdGhpcyk7dGhpcy5vYj0hMTtyZXR1cm4gdGhpc307ZnVuY3Rpb24gdWIoYSxiKXthLng9TmFOO2EueT1OYU47YS5vZmZzZXRYPWI7cmV0dXJuIGF9ZnVuY3Rpb24gb2IoYSxiKXsoaXNOYU4oYSl8fDE8YXx8MD5hKSYmdC5sYShhLCIwIDw9ICIrYisiIDw9IDEiLEksYil9DQpmdW5jdGlvbiBwYihhLGIpeyhpc05hTihhKXx8SW5maW5pdHk9PT1hfHwtSW5maW5pdHk9PT1hKSYmdC5sYShhLCJyZWFsIG51bWJlciwgbm90IE5hTiBvciBJbmZpbml0eSIsSSxiKX12YXIgdmI7DQpJLnBhcnNlPXZiPWZ1bmN0aW9uKGEpe2lmKCJzdHJpbmciPT09dHlwZW9mIGEpe2E9YS50cmltKCk7aWYoIk5vbmUiPT09YSlyZXR1cm4gdC5OT05FO2lmKCJUb3BMZWZ0Ij09PWEpcmV0dXJuIHQuWHg7aWYoIlRvcCI9PT1hfHwiVG9wQ2VudGVyIj09PWF8fCJNaWRkbGVUb3AiPT09YSlyZXR1cm4gdC5lcTtpZigiVG9wUmlnaHQiPT09YSlyZXR1cm4gdC5aeDtpZigiTGVmdCI9PT1hfHwiTGVmdENlbnRlciI9PT1hfHwiTWlkZGxlTGVmdCI9PT1hKXJldHVybiB0LmJxO2lmKCJDZW50ZXIiPT09YSlyZXR1cm4gdC5MeDtpZigiUmlnaHQiPT09YXx8IlJpZ2h0Q2VudGVyIj09PWF8fCJNaWRkbGVSaWdodCI9PT1hKXJldHVybiB0LmNxO2lmKCJCb3R0b21MZWZ0Ij09PWEpcmV0dXJuIHQuR3g7aWYoIkJvdHRvbSI9PT1hfHwiQm90dG9tQ2VudGVyIj09PWF8fCJNaWRkbGVCb3R0b20iPT09YSlyZXR1cm4gdC5hcTtpZigiQm90dG9tUmlnaHQiPT09YSlyZXR1cm4gdC5JeDtpZigiVG9wU2lkZSI9PT0NCmEpcmV0dXJuIHQuYXk7aWYoIkxlZnRTaWRlIj09PWEpcmV0dXJuIHQuUHg7aWYoIlJpZ2h0U2lkZSI9PT1hKXJldHVybiB0LlZ4O2lmKCJCb3R0b21TaWRlIj09PWEpcmV0dXJuIHQuS3g7aWYoIlRvcEJvdHRvbVNpZGVzIj09PWEpcmV0dXJuIHQuV3g7aWYoIkxlZnRSaWdodFNpZGVzIj09PWEpcmV0dXJuIHQuT3g7aWYoIlRvcExlZnRTaWRlcyI9PT1hKXJldHVybiB0Lll4O2lmKCJUb3BSaWdodFNpZGVzIj09PWEpcmV0dXJuIHQuJHg7aWYoIkJvdHRvbUxlZnRTaWRlcyI9PT1hKXJldHVybiB0Lkh4O2lmKCJCb3R0b21SaWdodFNpZGVzIj09PWEpcmV0dXJuIHQuSng7aWYoIk5vdFRvcFNpZGUiPT09YSlyZXR1cm4gdC5UeDtpZigiTm90TGVmdFNpZGUiPT09YSlyZXR1cm4gdC5SeDtpZigiTm90UmlnaHRTaWRlIj09PWEpcmV0dXJuIHQuU3g7aWYoIk5vdEJvdHRvbVNpZGUiPT09YSlyZXR1cm4gdC5ReDtpZigiQWxsU2lkZXMiPT09YSlyZXR1cm4gdC5GeDtpZigiRGVmYXVsdCI9PT0NCmEpcmV0dXJuIHQuTXg7YT1hLnNwbGl0KCIgIik7Zm9yKHZhciBiPTAsYz0wOyIiPT09YVtiXTspYisrO3ZhciBkPWFbYisrXTtkJiYoYz1wYXJzZUZsb2F0KGQpKTtmb3IodmFyIGY9MDsiIj09PWFbYl07KWIrKzsoZD1hW2IrK10pJiYoZj1wYXJzZUZsb2F0KGQpKTtmb3IodmFyIGc9MDsiIj09PWFbYl07KWIrKzsoZD1hW2IrK10pJiYoZz1wYXJzZUZsb2F0KGQpKTtmb3IodmFyIGg9MDsiIj09PWFbYl07KWIrKzsoZD1hW2IrK10pJiYoaD1wYXJzZUZsb2F0KGQpKTtyZXR1cm4gbmV3IEkoYyxmLGcsaCl9cmV0dXJuIG5ldyBJfTtJLnN0cmluZ2lmeT1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEk/YS52ZCgpP2EueC50b1N0cmluZygpKyIgIithLnkudG9TdHJpbmcoKSsiICIrYS5vZmZzZXRYLnRvU3RyaW5nKCkrIiAiK2Eub2Zmc2V0WS50b1N0cmluZygpOmEudG9TdHJpbmcoKTphLnRvU3RyaW5nKCl9Ow0KSS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZCgpPzA9PT10aGlzLm9mZnNldFgmJjA9PT10aGlzLm9mZnNldFk/IlNwb3QoIit0aGlzLngrIiwiK3RoaXMueSsiKSI6IlNwb3QoIit0aGlzLngrIiwiK3RoaXMueSsiLCIrdGhpcy5vZmZzZXRYKyIsIit0aGlzLm9mZnNldFkrIikiOnRoaXMuTSh0Lk5PTkUpPyJOb25lIjp0aGlzLk0odC5YeCk/IlRvcExlZnQiOnRoaXMuTSh0LmVxKT8iVG9wIjp0aGlzLk0odC5aeCk/IlRvcFJpZ2h0Ijp0aGlzLk0odC5icSk/IkxlZnQiOnRoaXMuTSh0Lkx4KT8iQ2VudGVyIjp0aGlzLk0odC5jcSk/IlJpZ2h0Ijp0aGlzLk0odC5HeCk/IkJvdHRvbUxlZnQiOnRoaXMuTSh0LmFxKT8iQm90dG9tIjp0aGlzLk0odC5JeCk/IkJvdHRvbVJpZ2h0Ijp0aGlzLk0odC5heSk/IlRvcFNpZGUiOnRoaXMuTSh0LlB4KT8iTGVmdFNpZGUiOnRoaXMuTSh0LlZ4KT8iUmlnaHRTaWRlIjp0aGlzLk0odC5LeCk/IkJvdHRvbVNpZGUiOg0KdGhpcy5NKHQuV3gpPyJUb3BCb3R0b21TaWRlcyI6dGhpcy5NKHQuT3gpPyJMZWZ0UmlnaHRTaWRlcyI6dGhpcy5NKHQuWXgpPyJUb3BMZWZ0U2lkZXMiOnRoaXMuTSh0LiR4KT8iVG9wUmlnaHRTaWRlcyI6dGhpcy5NKHQuSHgpPyJCb3R0b21MZWZ0U2lkZXMiOnRoaXMuTSh0Lkp4KT8iQm90dG9tUmlnaHRTaWRlcyI6dGhpcy5NKHQuVHgpPyJOb3RUb3BTaWRlIjp0aGlzLk0odC5SeCk/Ik5vdExlZnRTaWRlIjp0aGlzLk0odC5TeCk/Ik5vdFJpZ2h0U2lkZSI6dGhpcy5NKHQuUXgpPyJOb3RCb3R0b21TaWRlIjp0aGlzLk0odC5GeCk/IkFsbFNpZGVzIjp0aGlzLk0odC5NeCk/IkRlZmF1bHQiOiJOb25lIn07DQpJLnByb3RvdHlwZS5lcXVhbHM9SS5wcm90b3R5cGUuTT1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEk/KHRoaXMueD09PWEueHx8aXNOYU4odGhpcy54KSYmaXNOYU4oYS54KSkmJih0aGlzLnk9PT1hLnl8fGlzTmFOKHRoaXMueSkmJmlzTmFOKGEueSkpJiZ0aGlzLm9mZnNldFg9PT1hLm9mZnNldFgmJnRoaXMub2Zmc2V0WT09PWEub2Zmc2V0WTohMX07SS5wcm90b3R5cGUub3Bwb3NpdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEkoMC41LSh0aGlzLngtMC41KSwwLjUtKHRoaXMueS0wLjUpLC10aGlzLm9mZnNldFgsLXRoaXMub2Zmc2V0WSl9O0kucHJvdG90eXBlLmluY2x1ZGVzU2lkZT1mdW5jdGlvbihhKXtpZighdGhpcy5ycCgpfHwhYS5ycCgpKXJldHVybiExO2E9YS5vZmZzZXRZO3JldHVybih0aGlzLm9mZnNldFkmYSk9PT1hfTtJLnByb3RvdHlwZS5pc1Nwb3Q9SS5wcm90b3R5cGUudmQ9ZnVuY3Rpb24oKXtyZXR1cm4haXNOYU4odGhpcy54KSYmIWlzTmFOKHRoaXMueSl9Ow0KSS5wcm90b3R5cGUuaXNOb1Nwb3Q9SS5wcm90b3R5cGUuR2U9ZnVuY3Rpb24oKXtyZXR1cm4gaXNOYU4odGhpcy54KXx8aXNOYU4odGhpcy55KX07SS5wcm90b3R5cGUuaXNTaWRlPUkucHJvdG90eXBlLnJwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuR2UoKSYmMT09PXRoaXMub2Zmc2V0WCYmMCE9PXRoaXMub2Zmc2V0WX07SS5wcm90b3R5cGUuaXNEZWZhdWx0PUkucHJvdG90eXBlLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGlzTmFOKHRoaXMueCkmJmlzTmFOKHRoaXMueSkmJi0xPT09dGhpcy5vZmZzZXRYJiYwPT09dGhpcy5vZmZzZXRZfTt0LmJkPTE7dC5KYz0yO3QuVGM9NDt0LlNjPTg7dC5OT05FPXViKG5ldyBJKDAsMCwwLDApLDApLkphKCk7dC5NeD11YihuZXcgSSgwLDAsLTEsMCksLTEpLkphKCk7dC5YeD0obmV3IEkoMCwwLDAsMCkpLkphKCk7dC5lcT0obmV3IEkoMC41LDAsMCwwKSkuSmEoKTt0Llp4PShuZXcgSSgxLDAsMCwwKSkuSmEoKTsNCnQuYnE9KG5ldyBJKDAsMC41LDAsMCkpLkphKCk7dC5MeD0obmV3IEkoMC41LDAuNSwwLDApKS5KYSgpO3QuY3E9KG5ldyBJKDEsMC41LDAsMCkpLkphKCk7dC5HeD0obmV3IEkoMCwxLDAsMCkpLkphKCk7dC5hcT0obmV3IEkoMC41LDEsMCwwKSkuSmEoKTt0Lkl4PShuZXcgSSgxLDEsMCwwKSkuSmEoKTt0LmF5PXViKG5ldyBJKDAsMCwxLHQuYmQpLDEpLkphKCk7dC5QeD11YihuZXcgSSgwLDAsMSx0LkpjKSwxKS5KYSgpO3QuVng9dWIobmV3IEkoMCwwLDEsdC5UYyksMSkuSmEoKTt0Lkt4PXViKG5ldyBJKDAsMCwxLHQuU2MpLDEpLkphKCk7dC5XeD11YihuZXcgSSgwLDAsMSx0LmJkfHQuU2MpLDEpLkphKCk7dC5PeD11YihuZXcgSSgwLDAsMSx0LkpjfHQuVGMpLDEpLkphKCk7dC5ZeD11YihuZXcgSSgwLDAsMSx0LmJkfHQuSmMpLDEpLkphKCk7dC4keD11YihuZXcgSSgwLDAsMSx0LmJkfHQuVGMpLDEpLkphKCk7dC5IeD11YihuZXcgSSgwLDAsMSx0LlNjfHQuSmMpLDEpLkphKCk7DQp0Lkp4PXViKG5ldyBJKDAsMCwxLHQuU2N8dC5UYyksMSkuSmEoKTt0LlR4PXViKG5ldyBJKDAsMCwxLHQuSmN8dC5UY3x0LlNjKSwxKS5KYSgpO3QuUng9dWIobmV3IEkoMCwwLDEsdC5iZHx0LlRjfHQuU2MpLDEpLkphKCk7dC5TeD11YihuZXcgSSgwLDAsMSx0LmJkfHQuSmN8dC5TYyksMSkuSmEoKTt0LlF4PXViKG5ldyBJKDAsMCwxLHQuYmR8dC5KY3x0LlRjKSwxKS5KYSgpO3QuRng9dWIobmV3IEkoMCwwLDEsdC5iZHx0LkpjfHQuVGN8dC5TYyksMSkuSmEoKTt2YXIgd2I7SS5Ob25lPXdiPXQuTk9ORTt2YXIgeGI7SS5EZWZhdWx0PXhiPXQuTXg7dmFyIEViO0kuVG9wTGVmdD1FYj10Llh4O3ZhciBGYjtJLlRvcENlbnRlcj1GYj10LmVxO3ZhciBHYjtJLlRvcFJpZ2h0PUdiPXQuWng7SS5MZWZ0Q2VudGVyPXQuYnE7dmFyIEtiO0kuQ2VudGVyPUtiPXQuTHg7SS5SaWdodENlbnRlcj10LmNxO3ZhciBMYjtJLkJvdHRvbUxlZnQ9TGI9dC5HeDt2YXIgTWI7DQpJLkJvdHRvbUNlbnRlcj1NYj10LmFxO3ZhciBQYjtJLkJvdHRvbVJpZ2h0PVBiPXQuSXg7dmFyIFFiO0kuTWlkZGxlVG9wPVFiPXQuZXE7dmFyIFViO0kuTWlkZGxlTGVmdD1VYj10LmJxO3ZhciBWYjtJLk1pZGRsZVJpZ2h0PVZiPXQuY3E7dmFyIFdiO0kuTWlkZGxlQm90dG9tPVdiPXQuYXE7SS5Ub3A9dC5lcTt2YXIgWGI7SS5MZWZ0PVhiPXQuYnE7dmFyIFliO0kuUmlnaHQ9WWI9dC5jcTtJLkJvdHRvbT10LmFxO3ZhciAkYjtJLlRvcFNpZGU9JGI9dC5heTt2YXIgYWM7SS5MZWZ0U2lkZT1hYz10LlB4O3ZhciBiYztJLlJpZ2h0U2lkZT1iYz10LlZ4O3ZhciBjYztJLkJvdHRvbVNpZGU9Y2M9dC5LeDtJLlRvcEJvdHRvbVNpZGVzPXQuV3g7SS5MZWZ0UmlnaHRTaWRlcz10Lk94O0kuVG9wTGVmdFNpZGVzPXQuWXg7SS5Ub3BSaWdodFNpZGVzPXQuJHg7SS5Cb3R0b21MZWZ0U2lkZXM9dC5IeDtJLkJvdHRvbVJpZ2h0U2lkZXM9dC5KeDtJLk5vdFRvcFNpZGU9dC5UeDsNCkkuTm90TGVmdFNpZGU9dC5SeDtJLk5vdFJpZ2h0U2lkZT10LlN4O0kuTm90Qm90dG9tU2lkZT10LlF4O3ZhciBnYztJLkFsbFNpZGVzPWdjPXQuRng7ZnVuY3Rpb24gaGMoKXt0aGlzLmNmPVsxLDAsMCwxLDAsMF19aGMucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgaGM7YS5jZlswXT10aGlzLmNmWzBdO2EuY2ZbMV09dGhpcy5jZlsxXTthLmNmWzJdPXRoaXMuY2ZbMl07YS5jZlszXT10aGlzLmNmWzNdO2EuY2ZbNF09dGhpcy5jZls0XTthLmNmWzVdPXRoaXMuY2ZbNV07cmV0dXJuIGF9O2Z1bmN0aW9uIG1jKGEpe3RoaXMudHlwZT1hO3RoaXMucjI9dGhpcy55Mj10aGlzLngyPXRoaXMucjE9dGhpcy55MT10aGlzLngxPTA7dGhpcy5aRD1bXX1tYy5wcm90b3R5cGUuYWRkQ29sb3JTdG9wPWZ1bmN0aW9uKGEsYil7dGhpcy5aRC5wdXNoKHtvZmZzZXQ6YSxjb2xvcjpifSl9Ow0KZnVuY3Rpb24gbmMoYSxiLGMpe3RoaXMuZmlsbFN0eWxlPSIjMDAwMDAwIjt0aGlzLmZvbnQ9IjEwcHggc2Fucy1zZXJpZiI7dGhpcy5nbG9iYWxBbHBoYT0xO3RoaXMubGluZUNhcD0iYnV0dCI7dGhpcy5adz0wO3RoaXMubGluZUpvaW49Im1pdGVyIjt0aGlzLmxpbmVXaWR0aD0xO3RoaXMubWl0ZXJMaW1pdD0xMDt0aGlzLnNoYWRvd0JsdXI9MDt0aGlzLnNoYWRvd0NvbG9yPSJyZ2JhKDAsIDAsIDAsIDApIjt0aGlzLnNoYWRvd09mZnNldFk9dGhpcy5zaGFkb3dPZmZzZXRYPTA7dGhpcy5zdHJva2VTdHlsZT0iIzAwMDAwMCI7dGhpcy50ZXh0QWxpZ249InN0YXJ0Ijt0aGlzLmRvY3VtZW50PWJ8fGRvY3VtZW50O3RoaXMueUU9Yzt0aGlzLlZ3PW51bGw7dGhpcy5wYXRoPVtdO3RoaXMuWmk9bmV3IGhjO3RoaXMuc3RhY2s9W107dGhpcy52Zj1bXTt0aGlzLnJHPXRoaXMuTEU9dGhpcy5sdz0wO3RoaXMuenc9YTt0aGlzLnVKPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7dGhpcy53aWR0aD0NCnRoaXMuencud2lkdGg7dGhpcy5oZWlnaHQ9dGhpcy56dy5oZWlnaHQ7dGhpcy56bD1vYyh0aGlzLCJzdmciLHt3aWR0aDp0aGlzLndpZHRoKyJweCIsaGVpZ2h0OnRoaXMuaGVpZ2h0KyJweCIsVks6IjAgMCAiK3RoaXMuencud2lkdGgrIiAiK3RoaXMuencuaGVpZ2h0fSk7dGhpcy56bC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIik7dGhpcy56bC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKTtyYyh0aGlzLDEsMCwwLDEsMCwwKTthPW9jKHRoaXMsImNsaXBQYXRoIix7aWQ6Im1haW5DbGlwIn0pO2EuYXBwZW5kQ2hpbGQob2ModGhpcywicmVjdCIse3g6MCx5OjAsd2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9KSk7dGhpcy56bC5hcHBlbmRDaGlsZChhKTsNCnRoaXMudmZbMF0uc2V0QXR0cmlidXRlTlMobnVsbCwiY2xpcC1wYXRoIiwidXJsKCNtYWluQ2xpcCkiKX1hYT1uYy5wcm90b3R5cGU7YWEuYXJjPWZ1bmN0aW9uKGEsYixjLGQsZixnKXtzYyh0aGlzLGEsYixjLGQsZixnKX07YWEuYmVnaW5QYXRoPWZ1bmN0aW9uKCl7dGhpcy5wYXRoPVtdfTthYS5iZXppZXJDdXJ2ZVRvPWZ1bmN0aW9uKGEsYixjLGQsZixnKXt0aGlzLnBhdGgucHVzaChbIkMiLGEsYixjLGQsZixnXSl9O2FhLmNsZWFyUmVjdD1mdW5jdGlvbigpe307YWEuY2xpcD1mdW5jdGlvbigpe3RjKHRoaXMsImNsaXBQYXRoIix0aGlzLnBhdGgsbmV3IGhjKX07YWEuY2xvc2VQYXRoPWZ1bmN0aW9uKCl7dGhpcy5wYXRoLnB1c2goWyJ6Il0pfTthYS5jcmVhdGVMaW5lYXJHcmFkaWVudD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZj1uZXcgbWMoImxpbmVhciIpO2YueDE9YTtmLnkxPWI7Zi54Mj1jO2YueTI9ZDtyZXR1cm4gZn07YWEuY3JlYXRlUGF0dGVybj1mdW5jdGlvbigpe307DQphYS5jcmVhdGVSYWRpYWxHcmFkaWVudD1mdW5jdGlvbihhLGIsYyxkLGYsZyl7dmFyIGg9bmV3IG1jKCJyYWRpYWwiKTtoLngxPWE7aC55MT1iO2gucjE9YztoLngyPWQ7aC55Mj1mO2gucjI9ZztyZXR1cm4gaH07DQphYS5kcmF3SW1hZ2U9ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCxrLGwpe2E9W2IsYyxkLGYsZyxoLGssbCxhXTtiPXRoaXMuWmk7Zj1hWzhdO2M9e3g6MCx5OjAsd2lkdGg6Zi5uYXR1cmFsV2lkdGgsaGVpZ2h0OmYubmF0dXJhbEhlaWdodCxocmVmOmYuc3JjfTtkPSIiO2c9YVs2XS9hWzJdO2g9YVs3XS9hWzNdO2lmKDAhPT1hWzRdfHwwIT09YVs1XSlkKz0iIHRyYW5zbGF0ZSgiK2FbNF0rIiwgIithWzVdKyIpIjtpZigxIT09Z3x8MSE9PWgpZCs9IiBzY2FsZSgiK2crIiwgIitoKyIpIjtpZigwIT09YVswXXx8MCE9PWFbMV0pZCs9IiB0cmFuc2xhdGUoIistYVswXSsiLCAiKy1hWzFdKyIpIjtpZigwIT09YVswXXx8MCE9PWFbMV18fGFbMl0hPT1mLm5hdHVyYWxXaWR0aHx8YVszXSE9PWYubmF0dXJhbEhlaWdodClmPSJDTElQIit0aGlzLmx3LHRoaXMubHcrKyxnPW9jKHRoaXMsImNsaXBQYXRoIix7aWQ6Zn0pLGcuYXBwZW5kQ2hpbGQob2ModGhpcywicmVjdCIse3g6YVswXSx5OmFbMV0sDQp3aWR0aDphWzJdLGhlaWdodDphWzNdfSkpLHRoaXMuemwuYXBwZW5kQ2hpbGQoZyksY1siY2xpcC1wYXRoIl09InVybCgjIitmKyIpIjt1Yyh0aGlzLCJpbWFnZSIsYyxiLGQpO3RoaXMuYWRkRWxlbWVudCgiaW1hZ2UiLGMpfTthYS5maWxsPWZ1bmN0aW9uKCl7dGModGhpcywiZmlsbCIsdGhpcy5wYXRoLHRoaXMuWmkpfTthYS5maWxsUmVjdD1mdW5jdGlvbihhLGIsYyxkKXt2Yyh0aGlzLCJmaWxsIixbYSxiLGMsZF0sdGhpcy5aaSl9O2FhLmZpbGxUZXh0PWZ1bmN0aW9uKGEsYixjKXthPVthLGIsY107Yj10aGlzLnRleHRBbGlnbjsibGVmdCI9PT1iP2I9InN0YXJ0IjoicmlnaHQiPT09Yj9iPSJlbmQiOiJjZW50ZXIiPT09YiYmKGI9Im1pZGRsZSIpO2I9e3g6YVsxXSx5OmFbMl0sc3R5bGU6ImZvbnQ6ICIrdGhpcy5mb250LCJ0ZXh0LWFuY2hvciI6Yn07dWModGhpcywiZmlsbCIsYix0aGlzLlppKTt0aGlzLmFkZEVsZW1lbnQoInRleHQiLGIsYVswXSl9Ow0KYWEubGluZVRvPWZ1bmN0aW9uKGEsYil7dGhpcy5wYXRoLnB1c2goWyJMIixhLGJdKX07YWEubW92ZVRvPWZ1bmN0aW9uKGEsYil7dGhpcy5wYXRoLnB1c2goWyJNIixhLGJdKX07YWEucXVhZHJhdGljQ3VydmVUbz1mdW5jdGlvbihhLGIsYyxkKXt0aGlzLnBhdGgucHVzaChbIlEiLGEsYixjLGRdKX07YWEucmVjdD1mdW5jdGlvbihhLGIsYyxkKXt0aGlzLnBhdGgucHVzaChbIk0iLGEsYl0sWyJMIixhK2MsYl0sWyJMIixhK2MsYitkXSxbIkwiLGEsYitkXSxbInoiXSl9Ow0KYWEucmVzdG9yZT1mdW5jdGlvbigpe3RoaXMuWmk9dGhpcy5zdGFjay5wb3AoKTt0aGlzLnBhdGg9dGhpcy5zdGFjay5wb3AoKTt2YXIgYT10aGlzLnN0YWNrLnBvcCgpO3RoaXMuZmlsbFN0eWxlPWEuZmlsbFN0eWxlO3RoaXMuZm9udD1hLmZvbnQ7dGhpcy5nbG9iYWxBbHBoYT1hLmdsb2JhbEFscGhhO3RoaXMubGluZUNhcD1hLmxpbmVDYXA7dGhpcy5adz1hLlp3O3RoaXMubGluZUpvaW49YS5saW5lSm9pbjt0aGlzLmxpbmVXaWR0aD1hLmxpbmVXaWR0aDt0aGlzLm1pdGVyTGltaXQ9YS5taXRlckxpbWl0O3RoaXMuc2hhZG93Qmx1cj1hLnNoYWRvd0JsdXI7dGhpcy5zaGFkb3dDb2xvcj1hLnNoYWRvd0NvbG9yO3RoaXMuc2hhZG93T2Zmc2V0WD1hLnNoYWRvd09mZnNldFg7dGhpcy5zaGFkb3dPZmZzZXRZPWEuc2hhZG93T2Zmc2V0WTt0aGlzLnN0cm9rZVN0eWxlPWEuc3Ryb2tlU3R5bGU7dGhpcy50ZXh0QWxpZ249YS50ZXh0QWxpZ259Ow0KYWEuc2F2ZT1mdW5jdGlvbigpe3RoaXMuc3RhY2sucHVzaCh7ZmlsbFN0eWxlOnRoaXMuZmlsbFN0eWxlLGZvbnQ6dGhpcy5mb250LGdsb2JhbEFscGhhOnRoaXMuZ2xvYmFsQWxwaGEsbGluZUNhcDp0aGlzLmxpbmVDYXAsWnc6dGhpcy5adyxsaW5lSm9pbjp0aGlzLmxpbmVKb2luLGxpbmVXaWR0aDp0aGlzLmxpbmVXaWR0aCxtaXRlckxpbWl0OnRoaXMubWl0ZXJMaW1pdCxzaGFkb3dCbHVyOnRoaXMuc2hhZG93Qmx1cixzaGFkb3dDb2xvcjp0aGlzLnNoYWRvd0NvbG9yLHNoYWRvd09mZnNldFg6dGhpcy5zaGFkb3dPZmZzZXRYLHNoYWRvd09mZnNldFk6dGhpcy5zaGFkb3dPZmZzZXRZLHN0cm9rZVN0eWxlOnRoaXMuc3Ryb2tlU3R5bGUsdGV4dEFsaWduOnRoaXMudGV4dEFsaWdufSk7Zm9yKHZhciBhPVtdLGI9MDtiPHRoaXMucGF0aC5sZW5ndGg7YisrKWEucHVzaCh0aGlzLnBhdGhbYl0pO3RoaXMuc3RhY2sucHVzaChhKTt0aGlzLnN0YWNrLnB1c2godGhpcy5aaS5jb3B5KCkpfTsNCmFhLnNldFRyYW5zZm9ybT1mdW5jdGlvbihhLGIsYyxkLGYsZyl7MT09PWEmJjA9PT1iJiYwPT09YyYmMT09PWQmJjA9PT1mJiYwPT09Z3x8cmModGhpcyxhLGIsYyxkLGYsZyl9O2FhLnNjYWxlPWZ1bmN0aW9uKCl7fTthYS5zdHJva2U9ZnVuY3Rpb24oKXt0Yyh0aGlzLCJzdHJva2UiLHRoaXMucGF0aCx0aGlzLlppKX07YWEuc3Ryb2tlUmVjdD1mdW5jdGlvbihhLGIsYyxkKXt2Yyh0aGlzLCJzdHJva2UiLFthLGIsYyxkXSx0aGlzLlppKX07ZnVuY3Rpb24gb2MoYSxiLGMsZCl7YT1hLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhLnVKLGIpO2lmKGMpZm9yKHZhciBmIGluIGMpYS5zZXRBdHRyaWJ1dGVOUygiaHJlZiI9PT1mPyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIjoiIixmLGNbZl0pO2QmJihhLnRleHRDb250ZW50PWQpO3JldHVybiBhfQ0KYWEuYWRkRWxlbWVudD1mdW5jdGlvbihhLGIsYyl7YT1vYyh0aGlzLGEsYixjKTswPHRoaXMudmYubGVuZ3RoP3RoaXMudmZbdGhpcy52Zi5sZW5ndGgtMV0uYXBwZW5kQ2hpbGQoYSk6dGhpcy56bC5hcHBlbmRDaGlsZChhKTtyZXR1cm4gdGhpcy5Wdz1hfTsNCmZ1bmN0aW9uIHVjKGEsYixjLGQsZil7MSE9PWEuZ2xvYmFsQWxwaGEmJihjLm9wYWNpdHk9YS5nbG9iYWxBbHBoYSk7ImZpbGwiPT1iPygvXnJnYmFcKC8udGVzdChhLmZpbGxTdHlsZSk/KGE9L15ccypyZ2JhXHMqXCgoW14sXHNdKylccyosXHMqKFteLFxzXSspXHMqLFxzKihbXixcc10rKVxzKixccyooW14sXHNdKylcKVxzKiQvaS5leGVjKGEuZmlsbFN0eWxlKSxjLmZpbGw9InJnYigiK2FbMV0rIiwiK2FbMl0rIiwiK2FbM10rIikiLGNbImZpbGwtb3BhY2l0eSJdPWFbNF0pOmMuZmlsbD1hLmZpbGxTdHlsZSBpbnN0YW5jZW9mIG1jP3djKGEsYS5maWxsU3R5bGUpOmEuZmlsbFN0eWxlLGMuc3Ryb2tlPSJub25lIik6InN0cm9rZSI9PWImJihjLmZpbGw9Im5vbmUiLC9ecmdiYVwoLy50ZXN0KGEuc3Ryb2tlU3R5bGUpPyhiPS9eXHMqcmdiYVxzKlwoKFteLFxzXSspXHMqLFxzKihbXixcc10rKVxzKixccyooW14sXHNdKylccyosXHMqKFteLFxzXSspXClccyokL2kuZXhlYyhhLnN0cm9rZVN0eWxlKSwNCmMuc3Ryb2tlPSJyZ2IoIitiWzFdKyIsIitiWzJdKyIsIitiWzNdKyIpIixjWyJzdHJva2Utb3BhY2l0eSJdPWJbNF0pOmMuc3Ryb2tlPWEuc3Ryb2tlU3R5bGUgaW5zdGFuY2VvZiBtYz93YyhhLGEuc3Ryb2tlU3R5bGUpOmEuc3Ryb2tlU3R5bGUsY1sic3Ryb2tlLXdpZHRoIl09YS5saW5lV2lkdGgsY1sic3Ryb2tlLWxpbmVjYXAiXT1hLmxpbmVDYXAsY1sic3Ryb2tlLWxpbmVqb2luIl09YS5saW5lSm9pbixjWyJzdHJva2UtbWl0ZXJsaW1pdCJdPWEubWl0ZXJMaW1pdCk7ZD1kLmNmO2Q9Im1hdHJpeCgiK2RbMF0rIiwgIitkWzFdKyIsICIrZFsyXSsiLCAiK2RbM10rIiwgIitkWzRdKyIsICIrZFs1XSsiKSI7dm9pZCAwIT09ZiYmKGQrPWYpO2MudHJhbnNmb3JtPWR9DQpmdW5jdGlvbiB3YyhhLGIpe3ZhciBjPSJHUkFEIithLkxFO2EuTEUrKzt2YXIgZDtpZigibGluZWFyIj09PWIudHlwZSlkPXt4MTpiLngxLHgyOmIueDIseTE6Yi55MSx5MjpiLnkyLGlkOmMsZ3JhZGllbnRVbml0czoidXNlclNwYWNlT25Vc2UifSxkPW9jKGEsImxpbmVhckdyYWRpZW50IixkKTtlbHNlIGlmKCJyYWRpYWwiPT09Yi50eXBlKWQ9e3gxOmIueDEseDI6Yi54Mix5MTpiLnkxLHkyOmIueTIscjE6Yi5yMSxyMjpiLnIyLGlkOmN9LGQ9b2MoYSwicmFkaWFsR3JhZGllbnQiLGQpO2Vsc2UgdGhyb3cgRXJyb3IoImludmFsaWQgZ3JhZGllbnQiKTtmb3IodmFyIGY9Yi5aRCxnPWYubGVuZ3RoLGg9W10saz0wO2s8ZztrKyspe3ZhciBsPWZba10sbT1sLmNvbG9yLGw9e29mZnNldDpsLm9mZnNldCwic3RvcC1jb2xvciI6bX07L15yZ2JhXCgvLnRlc3QobSkmJihtPS9eXHMqcmdiYVxzKlwoKFteLFxzXSspXHMqLFxzKihbXixcc10rKVxzKixccyooW14sXHNdKylccyosXHMqKFteLFxzXSspXClccyokL2kuZXhlYyhtKSwNCmxbInN0b3AtY29sb3IiXT0icmdiKCIrbVsxXSsiLCIrbVsyXSsiLCIrbVszXSsiKSIsbFsic3RvcC1vcGFjaXR5Il09bVs0XSk7aC5wdXNoKGwpfWguc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLm9mZnNldD5iLm9mZnNldD8xOi0xfSk7Zm9yKGs9MDtrPGc7aysrKWQuYXBwZW5kQ2hpbGQob2MoYSwic3RvcCIsaFtrXSkpO2EuemwuYXBwZW5kQ2hpbGQoZCk7cmV0dXJuInVybCgjIitjKyIpIn1mdW5jdGlvbiB2YyhhLGIsYyxkKXtjPXt4OmNbMF0seTpjWzFdLHdpZHRoOmNbMl0saGVpZ2h0OmNbM119O3VjKGEsYixjLGQpO2EuYWRkRWxlbWVudCgicmVjdCIsYyl9DQpmdW5jdGlvbiB0YyhhLGIsYyxkKXtmb3IodmFyIGY9W10sZz0wO2c8Yy5sZW5ndGg7ZysrKXt2YXIgaD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjW2ddKSxrPVtoLnNoaWZ0KCldO2lmKCJBIj09a1swXSlrLnB1c2goaC5zaGlmdCgpKyIsIitoLnNoaWZ0KCksaC5zaGlmdCgpLGguc2hpZnQoKSsiLCIraC5zaGlmdCgpLGguc2hpZnQoKSsiLCIraC5zaGlmdCgpKTtlbHNlIGZvcig7aC5sZW5ndGg7KWsucHVzaChoLnNoaWZ0KCkrIiwiK2guc2hpZnQoKSk7Zi5wdXNoKGsuam9pbigiICIpKX1jPXtkOmYuam9pbigiICIpfTt1YyhhLGIsYyxkKTsiY2xpcFBhdGgiPT09Yj8oYj0iQ0xJUCIrYS5sdyxhLmx3KyssZD1vYyhhLCJjbGlwUGF0aCIse2lkOmJ9KSxkLmFwcGVuZENoaWxkKG9jKGEsInBhdGgiLGMpKSxhLnpsLmFwcGVuZENoaWxkKGQpLDA8YS52Zi5sZW5ndGgmJmEudmZbYS52Zi5sZW5ndGgtMV0uc2V0QXR0cmlidXRlTlMobnVsbCwiY2xpcC1wYXRoIiwidXJsKCMiK2IrDQoiKSIpKTphLmFkZEVsZW1lbnQoInBhdGgiLGMpfWZ1bmN0aW9uIHNjKGEsYixjLGQsZixnLGgpe3ZhciBrPU1hdGguYWJzKGYtZyk7aWYoZiE9Zyl7dmFyIGw9YitkKk1hdGguY29zKGcpO2c9YytkKk1hdGguc2luKGcpO2s+PTIqTWF0aC5QST8oc2MoYSxiLGMsZCxmLGYrTWF0aC5QSSxoKSxzYyhhLGIsYyxkLGYrTWF0aC5QSSxmKzIqTWF0aC5QSSxoKSxhLnBhdGgucHVzaChbIk0iLGwsZ10pKTooYis9ZCpNYXRoLmNvcyhmKSxjKz1kKk1hdGguc2luKGYpLGs9MTgwKmsvTWF0aC5QSSxmPWg/MDoxLGg9MTgwPD1rPT0hIWg/MDoxLDAhPT1hLnBhdGgubGVuZ3RoP2EucGF0aC5wdXNoKFsiTCIsYixjXSk6YS5wYXRoLnB1c2goWyJNIixiLGNdKSxhLnBhdGgucHVzaChbIkEiLGQsZCxrLGgsZixsLGddKSl9fQ0KZnVuY3Rpb24gcmMoYSxiLGMsZCxmLGcsaCl7dmFyIGs9bmV3IGhjO2suY2Y9W2IsYyxkLGYsZyxoXTtiPXt9O3VjKGEsImciLGIsayk7az1hLmFkZEVsZW1lbnQoImciLGIpO2EudmYucHVzaChrKX0NCmFhLmJiPWZ1bmN0aW9uKCl7dmFyIGE9IlNIQURPVyIrdGhpcy5yRzt0aGlzLnJHKys7dmFyIGI9dGhpcy5hZGRFbGVtZW50KCJmaWx0ZXIiLHtpZDphLHdpZHRoOiIyNTAlIixoZWlnaHQ6IjI1MCUifSxudWxsKSxjLGQsZixnLGg7aWYoMCE9PXRoaXMuc2hhZG93T2Zmc2V0WHx8MCE9PXRoaXMuc2hhZG93T2Zmc2V0WSljPW9jKHRoaXMsImZlR2F1c3NpYW5CbHVyIix7ImluIjoiU291cmNlQWxwaGEiLHJlc3VsdDoiYmx1ciIsU0s6dGhpcy5zaGFkb3dCbHVyLzJ9KSxkPW9jKHRoaXMsImZlRmxvb2QiLHsiaW4iOiJibHVyIixyZXN1bHQ6ImZsb29kIiwiZmxvb2QtY29sb3IiOnRoaXMuc2hhZG93Q29sb3J9KSxmPW9jKHRoaXMsImZlQ29tcG9zaXRlIix7ImluIjoiZmxvb2QiLGluMjoiYmx1ciIsb3BlcmF0b3I6ImluIixyZXN1bHQ6ImNvbXAifSksZz1vYyh0aGlzLCJmZU9mZnNldCIseyJpbiI6ImNvbXAiLHJlc3VsdDoib2Zmc2V0Qmx1ciIsZHg6dGhpcy5zaGFkb3dPZmZzZXRYLA0KZHk6dGhpcy5zaGFkb3dPZmZzZXRZfSksaD1vYyh0aGlzLCJmZU1lcmdlIix7fSksaC5hcHBlbmRDaGlsZChvYyh0aGlzLCJmZU1lcmdlTm9kZSIseyJpbiI6Im9mZnNldEJsdXIifSkpLGguYXBwZW5kQ2hpbGQob2ModGhpcywiZmVNZXJnZU5vZGUiLHsiaW4iOiJTb3VyY2VHcmFwaGljIn0pKSxiLmFwcGVuZENoaWxkKGMpLGIuYXBwZW5kQ2hpbGQoZCksYi5hcHBlbmRDaGlsZChmKSxiLmFwcGVuZENoaWxkKGcpLGIuYXBwZW5kQ2hpbGQoaCk7MDx0aGlzLnZmLmxlbmd0aCYmdGhpcy52Zlt0aGlzLnZmLmxlbmd0aC0xXS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWx0ZXIiLCJ1cmwoIyIrYSsiKSIpfTsNCnZhciBIPXt2YTo0KigoTWF0aC5zcXJ0KDIpLTEpLzMpLG5qOihuZXcgdygwLDApKS5KYSgpLGhIOihuZXcgeCgwLDAsMCwwKSkuSmEoKSxmcToobmV3IGFiKDAsMCwwLDApKS5KYSgpLGZIOihuZXcgYWIoMiwyLDIsMikpLkphKCksZ0g6KG5ldyBnYShJbmZpbml0eSxJbmZpbml0eSkpLkphKCksZEg6KG5ldyB3KC1JbmZpbml0eSwtSW5maW5pdHkpKS5KYSgpLGNIOihuZXcgdyhJbmZpbml0eSxJbmZpbml0eSkpLkphKCksZ3E6KG5ldyBnYSgwLDApKS5KYSgpLFV4OihuZXcgZ2EoMSwxKSkuSmEoKSxkcToobmV3IGdhKDYsNikpLkphKCksTng6KG5ldyBnYSg4LDgpKS5KYSgpLGVIOihuZXcgdyhOYU4sTmFOKSkuSmEoKSx5QjpudWxsLHNxcnQ6ZnVuY3Rpb24oYSl7aWYoMD49YSlyZXR1cm4gMDt2YXIgYj1ILnlCO2lmKG51bGw9PT1iKXtmb3IodmFyIGI9W10sYz0wOzJFMz49YztjKyspYltjXT1NYXRoLnNxcnQoYyk7SC55Qj1ifXJldHVybiAxPmE/KGM9MS9hLDJFMz49Yz8xL2JbY3wNCjBdOk1hdGguc3FydChhKSk6MkUzPj1hP2JbYXwwXTpNYXRoLnNxcnQoYSl9LEk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLWI7cmV0dXJuIDAuNT5jJiYtMC41PGN9LG5iOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS1iO3JldHVybiA1RS04PmMmJi01RS04PGN9LE1kOmZ1bmN0aW9uKGEsYixjLGQsZixnLGgpezA+PWYmJihmPTFFLTYpO3ZhciBrLGwsbSxuO2E8Yz8obD1hLGs9Yyk6KGw9YyxrPWEpO2I8ZD8obj1iLG09ZCk6KG49ZCxtPWIpO2lmKGE9PT1jKXJldHVybiBuPD1oJiZoPD1tJiZhLWY8PWcmJmc8PWErZjtpZihiPT09ZClyZXR1cm4gbDw9ZyYmZzw9ayYmYi1mPD1oJiZoPD1iK2Y7ays9ZjtsLT1mO2lmKGw8PWcmJmc8PWsmJihtKz1mLG4tPWYsbjw9aCYmaDw9bSkpaWYoay1sPm0tbilpZihhLWM+Znx8Yy1hPmYpe2lmKGc9KGQtYikvKGMtYSkqKGctYSkrYixnLWY8PWgmJmg8PWcrZilyZXR1cm4hMH1lbHNlIHJldHVybiEwO2Vsc2UgaWYoYi1kPmZ8fGQtYj5mKXtpZihoPShjLQ0KYSkvKGQtYikqKGgtYikrYSxoLWY8PWcmJmc8PWgrZilyZXR1cm4hMH1lbHNlIHJldHVybiEwO3JldHVybiExfSxndzpmdW5jdGlvbihhLGIsYyxkLGYsZyxoLGssbCxtLG4scCl7aWYoSC5NZChhLGIsaCxrLHAsYyxkKSYmSC5NZChhLGIsaCxrLHAsZixnKSlyZXR1cm4gSC5NZChhLGIsaCxrLHAsbSxuKTt2YXIgcT0oYStjKS8yLHI9KGIrZCkvMixzPShjK2YpLzIsdT0oZCtnKS8yO2Y9KGYraCkvMjtnPShnK2spLzI7ZD0ocStzKS8yO2M9KHIrdSkvMjt2YXIgcz0ocytmKS8yLHU9KHUrZykvMix2PShkK3MpLzIsRD0oYyt1KS8yO3JldHVybiBILmd3KGEsYixxLHIsZCxjLHYsRCxsLG0sbixwKXx8SC5ndyh2LEQscyx1LGYsZyxoLGssbCxtLG4scCl9LGJJOmZ1bmN0aW9uKGEsYixjLGQsZixnLGgsayxsKXt2YXIgbT0oYytmKS8yLG49KGQrZykvMjtsLng9KCgoYStjKS8yK20pLzIrKG0rKGYraCkvMikvMikvMjtsLnk9KCgoYitkKS8yK24pLzIrKG4rKGcraykvMikvMikvMjtyZXR1cm4gbH0sDQphSTpmdW5jdGlvbihhLGIsYyxkLGYsZyxoLGspe3ZhciBsPShjK2YpLzIsbT0oZCtnKS8yO3JldHVybiBVYSgoKGErYykvMitsKS8yLCgoYitkKS8yK20pLzIsKGwrKGYraCkvMikvMiwobSsoZytrKS8yKS8yKX0sU286ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCxrLGwsbSl7aWYoSC5NZChhLGIsaCxrLGwsYyxkKSYmSC5NZChhLGIsaCxrLGwsZixnKSloYihtLGEsYiwwLDApLGhiKG0saCxrLDAsMCk7ZWxzZXt2YXIgbj0oYStjKS8yLHA9KGIrZCkvMixxPShjK2YpLzIscj0oZCtnKS8yO2Y9KGYraCkvMjtnPShnK2spLzI7ZD0obitxKS8yO2M9KHArcikvMjt2YXIgcT0ocStmKS8yLHI9KHIrZykvMixzPShkK3EpLzIsdT0oYytyKS8yO0guU28oYSxiLG4scCxkLGMscyx1LGwsbSk7SC5TbyhzLHUscSxyLGYsZyxoLGssbCxtKX1yZXR1cm4gbX0semU6ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCxrLGwsbSl7aWYoSC5NZChhLGIsaCxrLGwsYyxkKSYmSC5NZChhLGIsaCxrLGwsZixnKSkwPT09DQptLmxlbmd0aCYmbS5wdXNoKFthLGJdKSxtLnB1c2goW2gsa10pO2Vsc2V7dmFyIG49KGErYykvMixwPShiK2QpLzIscT0oYytmKS8yLHI9KGQrZykvMjtmPShmK2gpLzI7Zz0oZytrKS8yO2Q9KG4rcSkvMjtjPShwK3IpLzI7dmFyIHE9KHErZikvMixyPShyK2cpLzIscz0oZCtxKS8yLHU9KGMrcikvMjtILnplKGEsYixuLHAsZCxjLHMsdSxsLG0pO0guemUocyx1LHEscixmLGcsaCxrLGwsbSl9cmV0dXJuIG19LFFBOmZ1bmN0aW9uKGEsYixjLGQsZixnLGgsayxsLG0pe2lmKEguTWQoYSxiLGYsZyxtLGMsZCkpcmV0dXJuIEguTWQoYSxiLGYsZyxtLGssbCk7dmFyIG49KGErYykvMixwPShiK2QpLzI7Yz0oYytmKS8yO2Q9KGQrZykvMjt2YXIgcT0obitjKS8yLHI9KHArZCkvMjtyZXR1cm4gSC5RQShhLGIsbixwLHEscixoLGssbCxtKXx8SC5RQShxLHIsYyxkLGYsZyxoLGssbCxtKX0sUks6ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCl7aC54PSgoYStjKS8yKyhjK2YpLzIpLzI7aC55PSgoYisNCmQpLzIrKGQrZykvMikvMjtyZXR1cm4gaH0sUEE6ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCxrKXtpZihILk1kKGEsYixmLGcsaCxjLGQpKWhiKGssYSxiLDAsMCksaGIoayxmLGcsMCwwKTtlbHNle3ZhciBsPShhK2MpLzIsbT0oYitkKS8yO2M9KGMrZikvMjtkPShkK2cpLzI7dmFyIG49KGwrYykvMixwPShtK2QpLzI7SC5QQShhLGIsbCxtLG4scCxoLGspO0guUEEobixwLGMsZCxmLGcsaCxrKX1yZXR1cm4ga30sSnA6ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCxrKXtpZihILk1kKGEsYixmLGcsaCxjLGQpKTA9PT1rLmxlbmd0aCYmay5wdXNoKFthLGJdKSxrLnB1c2goW2YsZ10pO2Vsc2V7dmFyIGw9KGErYykvMixtPShiK2QpLzI7Yz0oYytmKS8yO2Q9KGQrZykvMjt2YXIgbj0obCtjKS8yLHA9KG0rZCkvMjtILkpwKGEsYixsLG0sbixwLGgsayk7SC5KcChuLHAsYyxkLGYsZyxoLGspfXJldHVybiBrfSxQczpmdW5jdGlvbihhLGIsYyxkLGYsZyxoLGssbCxtLG4scCxxLHIpezA+PXEmJg0KKHE9MUUtNik7aWYoSC5NZChhLGIsaCxrLHEsYyxkKSYmSC5NZChhLGIsaCxrLHEsZixnKSl7dmFyIHM9KGEtaCkqKG0tcCktKGItaykqKGwtbik7aWYoIXMpcmV0dXJuITE7cT0oKGEqay1iKmgpKihsLW4pLShhLWgpKihsKnAtbSpuKSkvcztzPSgoYSprLWIqaCkqKG0tcCktKGItaykqKGwqcC1tKm4pKS9zO2lmKChsPm4/bC1uOm4tbCk8KG0+cD9tLXA6cC1tKSl7aWYoYjxrPyhsPWIsaD1rKToobD1rLGg9YiksczxsfHxzPmgpcmV0dXJuITF9ZWxzZSBpZihhPGg/bD1hOihsPWgsaD1hKSxxPGx8fHE+aClyZXR1cm4hMTtyLng9cTtyLnk9cztyZXR1cm4hMH12YXIgcz0oYStjKS8yLHU9KGIrZCkvMjtjPShjK2YpLzI7ZD0oZCtnKS8yO2Y9KGYraCkvMjtnPShnK2spLzI7dmFyIHY9KHMrYykvMixEPSh1K2QpLzI7Yz0oYytmKS8yO2Q9KGQrZykvMjt2YXIgQT0oditjKS8yLEc9KEQrZCkvMixMPShuLWwpKihuLWwpKyhwLW0pKihwLW0pLE49ITE7SC5QcyhhLGIscyx1LHYsRCxBLEcsDQpsLG0sbixwLHEscikmJihhPShyLngtbCkqKHIueC1sKSsoci55LW0pKihyLnktbSksYTxMJiYoTD1hLE49ITApKTtiPXIueDtzPXIueTtILlBzKEEsRyxjLGQsZixnLGgsayxsLG0sbixwLHEscikmJihhPShyLngtbCkqKHIueC1sKSsoci55LW0pKihyLnktbSksYTxMP049ITA6KHIueD1iLHIueT1zKSk7cmV0dXJuIE59LFFzOmZ1bmN0aW9uKGEsYixjLGQsZixnLGgsayxsLG0sbixwLHEpe3ZhciByPTA7MD49cSYmKHE9MUUtNik7aWYoSC5NZChhLGIsaCxrLHEsYyxkKSYmSC5NZChhLGIsaCxrLHEsZixnKSl7cT0oYS1oKSoobS1wKS0oYi1rKSoobC1uKTtpZighcSlyZXR1cm4gcjt2YXIgcz0oKGEqay1iKmgpKihsLW4pLShhLWgpKihsKnAtbSpuKSkvcSx1PSgoYSprLWIqaCkqKG0tcCktKGItaykqKGwqcC1tKm4pKS9xO2lmKHM+PW4pcmV0dXJuIHI7aWYoKGw+bj9sLW46bi1sKTwobT5wP20tcDpwLW0pKXtpZihiPGs/KGw9YixhPWspOihsPWssYT1iKSx1PGx8fHU+YSlyZXR1cm4gcn1lbHNlIGlmKGE8DQpoPyhsPWEsYT1oKTpsPWgsczxsfHxzPmEpcmV0dXJuIHI7MDxxP3IrKzowPnEmJnItLX1lbHNle3ZhciBzPShhK2MpLzIsdT0oYitkKS8yLHY9KGMrZikvMixEPShkK2cpLzI7Zj0oZitoKS8yO2c9KGcraykvMjtkPShzK3YpLzI7Yz0odStEKS8yO3ZhciB2PSh2K2YpLzIsRD0oRCtnKS8yLEE9KGQrdikvMixHPShjK0QpLzIscj1yK0guUXMoYSxiLHMsdSxkLGMsQSxHLGwsbSxuLHAscSkscj1yK0guUXMoQSxHLHYsRCxmLGcsaCxrLGwsbSxuLHAscSl9cmV0dXJuIHJ9LGNuOmZ1bmN0aW9uKGEsYixjLGQsZixnLGgpe2lmKEgubmIoYSxjKSl7dmFyIGs7YjxkPyhrPWIsYz1kKTooaz1kLGM9Yik7ZD1nO2lmKGQ8aylyZXR1cm4gaC54PWEsaC55PWssITE7aWYoZD5jKXJldHVybiBoLng9YSxoLnk9YywhMTtoLng9YTtoLnk9ZDtyZXR1cm4hMH1pZihILm5iKGIsZCkpe2E8Yz9rPWE6KGs9YyxjPWEpO2Q9ZjtpZihkPGspcmV0dXJuIGgueD1rLGgueT1iLCExO2lmKGQ+YylyZXR1cm4gaC54PQ0KYyxoLnk9YiwhMTtoLng9ZDtoLnk9YjtyZXR1cm4hMH1rPSgoYS1mKSooYS1jKSsoYi1nKSooYi1kKSkvKChjLWEpKihjLWEpKyhkLWIpKihkLWIpKTtpZigtNUUtNj5rKXJldHVybiBoLng9YSxoLnk9YiwhMTtpZigxLjAwMDAwNTxrKXJldHVybiBoLng9YyxoLnk9ZCwhMTtoLng9YStrKihjLWEpO2gueT1iK2sqKGQtYik7cmV0dXJuITB9LGpoOmZ1bmN0aW9uKGEsYixjLGQsZixnLGgsayxsKXtpZihILkkoYSxjKSYmSC5JKGIsZCkpcmV0dXJuIGwueD1hLGwueT1iLCExO2lmKEgubmIoZixoKSl7aWYoSC5uYihhLGMpKXJldHVybiBILmNuKGEsYixjLGQsZixnLGwpLCExO2c9KGQtYikvKGMtYSkqKGYtYSkrYjtyZXR1cm4gSC5jbihhLGIsYyxkLGYsZyxsKX1rPShrLWcpLyhoLWYpO2lmKEgubmIoYSxjKSl7Zz1rKihhLWYpK2c7YjxkPyhoPWIsYz1kKTooaD1kLGM9Yik7aWYoZzxoKXJldHVybiBsLng9YSxsLnk9aCwhMTtpZihnPmMpcmV0dXJuIGwueD1hLGwueT1jLCExO2wueD1hOw0KbC55PWc7cmV0dXJuITB9aD0oZC1iKS8oYy1hKTtpZihILm5iKGssaCkpcmV0dXJuIEguY24oYSxiLGMsZCxmLGcsbCksITE7Zj0oaCphLWsqZitnLWIpLyhoLWspO2lmKEgubmIoaCwwKSl7YTxjP2g9YTooaD1jLGM9YSk7aWYoZjxoKXJldHVybiBsLng9aCxsLnk9YiwhMTtpZihmPmMpcmV0dXJuIGwueD1jLGwueT1iLCExO2wueD1mO2wueT1iO3JldHVybiEwfWc9aCooZi1hKStiO3JldHVybiBILmNuKGEsYixjLGQsZixnLGwpfSxFSzpmdW5jdGlvbihhLGIsYyxkLGYpe3JldHVybiBILmpoKGMueCxjLnksZC54LGQueSxhLngsYS55LGIueCxiLnksZil9LEFLOmZ1bmN0aW9uKGEsYixjLGQsZixnLGgsayxsLG0pe2Z1bmN0aW9uIG4oYyxkKXt2YXIgZj0oYy1hKSooYy1hKSsoZC1iKSooZC1iKTtmPHAmJihwPWYsbC54PWMsbC55PWQpfXZhciBwPUluZmluaXR5O24obC54LGwueSk7dmFyIHEscixzLHU7ZjxoPyhxPWYscj1oKToocT1oLHI9Zik7ZzxrPyhzPWYsdT1oKToocz1oLHU9DQpmKTtxPShyLXEpLzIrbTttPSh1LXMpLzIrbTtmPShmK2gpLzI7Zz0oZytrKS8yO2lmKDA9PT1xfHwwPT09bSlyZXR1cm4gbDtpZigwLjU+KGM+YT9jLWE6YS1jKSl7cT0xLShjLWYpKihjLWYpLyhxKnEpO2lmKDA+cSlyZXR1cm4gbDtxPU1hdGguc3FydChxKTtkPS1tKnErZztuKGMsbSpxK2cpO24oYyxkKX1lbHNle2M9KGQtYikvKGMtYSk7ZD0xLyhxKnEpK2MqYy8obSptKTtrPTIqYyooYi1jKmEpLyhtKm0pLTIqYypnLyhtKm0pLTIqZi8ocSpxKTtxPWsqay00KmQqKDIqYyphKmcvKG0qbSktMipiKmcvKG0qbSkrZypnLyhtKm0pK2YqZi8ocSpxKS0xKyhiLWMqYSkqKGItYyphKS8obSptKSk7aWYoMD5xKXJldHVybiBsO3E9TWF0aC5zcXJ0KHEpO209KC1rK3EpLygyKmQpO24obSxjKm0tYyphK2IpO3E9KC1rLXEpLygyKmQpO24ocSxjKnEtYyphK2IpfXJldHVybiBsfSxrbDpmdW5jdGlvbihhLGIsYyxkLGYsZyxoLGssbCl7dmFyIG09MUUyMSxuPWEscD1iO2lmKEguamgoYSxiLGEsDQpkLGYsZyxoLGssbCkpe3ZhciBxPShsLngtZikqKGwueC1mKSsobC55LWcpKihsLnktZyk7cTxtJiYobT1xLG49bC54LHA9bC55KX1ILmpoKGMsYixjLGQsZixnLGgsayxsKSYmKHE9KGwueC1mKSoobC54LWYpKyhsLnktZykqKGwueS1nKSxxPG0mJihtPXEsbj1sLngscD1sLnkpKTtILmpoKGEsYixjLGIsZixnLGgsayxsKSYmKHE9KGwueC1mKSoobC54LWYpKyhsLnktZykqKGwueS1nKSxxPG0mJihtPXEsbj1sLngscD1sLnkpKTtILmpoKGEsZCxjLGQsZixnLGgsayxsKSYmKHE9KGwueC1mKSoobC54LWYpKyhsLnktZykqKGwueS1nKSxxPG0mJihtPXEsbj1sLngscD1sLnkpKTtsLng9bjtsLnk9cDtyZXR1cm4gMUUyMT5tfSxPdzpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Yi54LGY9Yi55LGc9Yy54LGg9Yy55LGs9YS5sZWZ0LGw9YS5yaWdodCxtPWEudG9wLG49YS5ib3R0b207cmV0dXJuIGQ9PT1nPyhmPGg/KGE9ZixnPWgpOihhPWgsZz1mKSxrPD1kJiZkPD1sJiZhPD1uJiZnPj1tKToNCmY9PT1oPyhkPGc/YT1kOihhPWcsZz1kKSxtPD1mJiZmPD1uJiZhPD1sJiZnPj1rKTphLkdhKGIpfHxhLkdhKGMpfHxILk53KGssbSxsLG0sZCxmLGcsaCl8fEguTncobCxtLGwsbixkLGYsZyxoKXx8SC5OdyhsLG4sayxuLGQsZixnLGgpfHxILk53KGssbixrLG0sZCxmLGcsaCk/ITA6ITF9LE53OmZ1bmN0aW9uKGEsYixjLGQsZixnLGgsayl7cmV0dXJuIDA+PUgubncoYSxiLGMsZCxmLGcpKkgubncoYSxiLGMsZCxoLGspJiYwPj1ILm53KGYsZyxoLGssYSxiKSpILm53KGYsZyxoLGssYyxkKX0sbnc6ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe2MtPWE7ZC09YjthPWYtYTtiPWctYjtnPWEqZC1iKmM7MD09PWcmJihnPWEqYytiKmQsMDxnJiYoZz0oYS1jKSpjKyhiLWQpKmQsMD5nJiYoZz0wKSkpO3JldHVybiAwPmc/LTE6MDxnPzE6MH0sQ3Q6ZnVuY3Rpb24oYSl7MD5hJiYoYSs9MzYwKTszNjA8PWEmJihhLT0zNjApO3JldHVybiBhfSxpRTpmdW5jdGlvbihhLGIsYyxkLGYsZyl7dmFyIGg9DQpNYXRoLlBJO2d8fChkKj1oLzE4MCxmKj1oLzE4MCk7Zz1kPGY/MTotMTt2YXIgaz1bXSxsPWgvMixtPWQ7Zm9yKGQ9TWF0aC5taW4oMipoKzFFLTUsTWF0aC5hYnMoZi1kKSk7MUUtNTxkOylmPW0rZypNYXRoLm1pbihkLGwpLGsucHVzaChILmtJKGMsbSxmLGEsYikpLGQtPU1hdGguYWJzKGYtbSksbT1mO3JldHVybiBrfSxrSTpmdW5jdGlvbihhLGIsYyxkLGYpe3ZhciBnPShjLWIpLzIsaD1hKk1hdGguY29zKGcpLGs9YSpNYXRoLnNpbihnKSxsPTAuNTUyMjg0NzQ5OCpNYXRoLnRhbihnKSxtPWgrbCprLGg9LWsrbCpoLGs9LWgsbD1nK2IsZz1NYXRoLmNvcyhsKSxsPU1hdGguc2luKGwpO3JldHVybnt4MTpkK2EqTWF0aC5jb3MoYikseTE6ZithKk1hdGguc2luKGIpLHgyOmQrbSpnLWgqbCx5MjpmK20qbCtoKmcsZ2U6ZCttKmctaypsLGhlOmYrbSpsK2sqZyxVYjpkK2EqTWF0aC5jb3MoYyksVmI6ZithKk1hdGguc2luKGMpfX0sY3Q6ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCl7Yz0NCk1hdGguZmxvb3IoKGEtYykvZikqZitjO2Q9TWF0aC5mbG9vcigoYi1kKS9nKSpnK2Q7dmFyIGs9YztjK2YtYTxmLzImJihrPWMrZik7YT1kO2QrZy1iPGcvMiYmKGE9ZCtnKTtoLnAoayxhKTtyZXR1cm4gaH0sSUU6ZnVuY3Rpb24oYSxiKXt2YXIgYz1NYXRoLm1heChhLGIpLGQ9TWF0aC5taW4oYSxiKSxmPTEsZz0xO2RvIGY9YyVkLGM9Zz1kLGQ9Zjt3aGlsZSgwPGYpO3JldHVybiBnfSx6STpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZj0wPmMsZz0wPmQsaCxrO2E8Yj8oaD0xLGs9MCk6KGg9MCxrPTEpO3ZhciBsLG07bD0wPT09aD9hOmI7bT0wPT09aD9jOmQ7aWYoMD09PWg/ZjpnKW09LW07aD1rO2M9MD09PWg/YzpkO2lmKDA9PT1oP2Y6ZyljPS1jO3JldHVybiBILkFJKGwsMD09PWg/YTpiLG0sYywwLDApfSxBSTpmdW5jdGlvbihhLGIsYyxkLGYsZyl7aWYoMDxkKWlmKDA8Yyl7Zz1hKmE7Zj1iKmI7YSo9Yzt2YXIgaD1iKmQsaz0tZitoLGw9LWYrTWF0aC5zcXJ0KGEqYStoKmgpOw0KYj1rO2Zvcih2YXIgbT0wOzk5OTk5OTk5OTk+bTsrK20pe2I9MC41KihrK2wpO2lmKGI9PT1rfHxiPT09bClicmVhazt2YXIgbj1hLyhiK2cpLHA9aC8oYitmKSxuPW4qbitwKnAtMTtpZigwPG4paz1iO2Vsc2UgaWYoMD5uKWw9YjtlbHNlIGJyZWFrfWM9ZypjLyhiK2cpLWM7ZD1mKmQvKGIrZiktZDtjPU1hdGguc3FydChjKmMrZCpkKX1lbHNlIGM9TWF0aC5hYnMoZC1iKTtlbHNlIGQ9YSphLWIqYixmPWEqYyxmPGQ/KGQ9Zi9kLGY9YSpkLGc9YipNYXRoLnNxcnQoTWF0aC5hYnMoMS1kKmQpKSxjPWYtYyxjPU1hdGguc3FydChjKmMrZypnKSk6Yz1NYXRoLmFicyhjLWEpO3JldHVybiBjfX07DQpmdW5jdGlvbiB6YyhhKXsxPGFyZ3VtZW50cy5sZW5ndGgmJnQubSgiR2VvbWV0cnkgY29uc3RydWN0b3IgY2FuIHRha2UgYXQgbW9zdCBvbmUgb3B0aW9uYWwgYXJndW1lbnQsIHRoZSBHZW9tZXRyeSB0eXBlLiIpO3QuQWModGhpcyk7dm9pZCAwPT09YT9hPUFjOmUmJnQuQWEoYSx6Yyx6YywiY29uc3RydWN0b3I6dHlwZSIpO3RoaXMuZGE9YTt0aGlzLnViPXRoaXMua2I9dGhpcy54Yz10aGlzLm5jPTA7dGhpcy5Caz1uZXcgQihCYyk7dGhpcy5IdT10aGlzLkJrLlY7dGhpcy5zdT0obmV3IHgpLmZyZWV6ZSgpO3RoaXMuVmE9ITA7dGhpcy5NaT1FYjt0aGlzLk5pPVBiO3RoaXMuWm49dGhpcy4kbj1OYU47dGhpcy52Yz1DY310LmdhKCJHZW9tZXRyeSIsemMpO3QuWWgoemMpOw0KemMucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgemM7YS5kYT10aGlzLmRhO2EubmM9dGhpcy5uYzthLnhjPXRoaXMueGM7YS5rYj10aGlzLmtiO2EudWI9dGhpcy51Yjtmb3IodmFyIGI9dGhpcy5CayxjPWIubGVuZ3RoLGQ9YS5CayxmPTA7ZjxjO2YrKyl7dmFyIGc9Yi5uW2ZdLmNvcHkoKTtkLmFkZChnKX1hLkh1PXRoaXMuSHU7YS5zdS5hc3NpZ24odGhpcy5zdSk7YS5WYT10aGlzLlZhO2EuTWk9dGhpcy5NaS5aKCk7YS5OaT10aGlzLk5pLlooKTthLiRuPXRoaXMuJG47YS5abj10aGlzLlpuO2EudmM9dGhpcy52YztyZXR1cm4gYX07dmFyIERjO3pjLkxpbmU9RGM9dC53KHpjLCJMaW5lIiwwKTt2YXIgRWM7emMuUmVjdGFuZ2xlPUVjPXQudyh6YywiUmVjdGFuZ2xlIiwxKTt2YXIgTWM7emMuRWxsaXBzZT1NYz10LncoemMsIkVsbGlwc2UiLDIpO3ZhciBBYzt6Yy5QYXRoPUFjPXQudyh6YywiUGF0aCIsMyk7DQp6Yy5wcm90b3R5cGUuSmE9ZnVuY3Rpb24oKXt0aGlzLmZyZWV6ZSgpO09iamVjdC5mcmVlemUodGhpcyk7cmV0dXJuIHRoaXN9O3pjLnByb3RvdHlwZS5mcmVlemU9ZnVuY3Rpb24oKXt0aGlzLm9iPSEwO3ZhciBhPXRoaXMuQWI7YS5mcmVlemUoKTtmb3IodmFyIGI9YS5sZW5ndGgsYz0wO2M8YjtjKyspYS5uW2NdLmZyZWV6ZSgpO3JldHVybiB0aGlzfTt6Yy5wcm90b3R5cGUuTGE9ZnVuY3Rpb24oKXtPYmplY3QuaXNGcm96ZW4odGhpcykmJnQubSgiY2Fubm90IHRoYXcgY29uc3RhbnQ6ICIrdGhpcyk7dGhpcy5vYj0hMTt2YXIgYT10aGlzLkFiO2EuTGEoKTtmb3IodmFyIGI9YS5sZW5ndGgsYz0wO2M8YjtjKyspYS5uW2NdLkxhKCk7cmV0dXJuIHRoaXN9Ow0KemMucHJvdG90eXBlLmVxdWFsc0FwcHJveD16Yy5wcm90b3R5cGUudGY9ZnVuY3Rpb24oYSl7aWYoIShhIGluc3RhbmNlb2YgemMpKXJldHVybiExO2lmKHRoaXMudHlwZSE9PWEudHlwZSlyZXR1cm4gdGhpcy50eXBlPT09RGMmJmEudHlwZT09PUFjP05jKHRoaXMsYSk6YS50eXBlPT09RGMmJnRoaXMudHlwZT09PUFjP05jKGEsdGhpcyk6ITE7aWYodGhpcy50eXBlPT09QWMpe3ZhciBiPXRoaXMuQWI7YT1hLkFiO3ZhciBjPWIubGVuZ3RoO2lmKGMhPT1hLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGQ9MDtkPGM7ZCsrKWlmKCFiLm5bZF0udGYoYS5uW2RdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gSC5JKHRoaXMucWEsYS5xYSkmJkguSSh0aGlzLnJhLGEucmEpJiZILkkodGhpcy5ELGEuRCkmJkguSSh0aGlzLkYsYS5GKX07DQpmdW5jdGlvbiBOYyhhLGIpe2lmKGEudHlwZSE9PURjfHxiLnR5cGUhPT1BYylyZXR1cm4hMTtpZigxPT09Yi5BYi5jb3VudCl7dmFyIGM9Yi5BYi53YSgwKTtpZigxPT09Yy5GYS5jb3VudCYmSC5JKGEucWEsYy5xYSkmJkguSShhLnJhLGMucmEpJiYoYz1jLkZhLndhKDApLGMudHlwZT09PU9jJiZILkkoYS5ELGMuRCkmJkguSShhLkYsYy5GKSkpcmV0dXJuITB9cmV0dXJuITF9dmFyIFBjO3pjLnN0cmluZ2lmeT1QYz1mdW5jdGlvbihhKXtyZXR1cm4gYS50b1N0cmluZygpfTsNCnpjLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihhKXtzd2l0Y2godGhpcy50eXBlKXtjYXNlIERjOnJldHVybiB2b2lkIDA9PT1hPyJNIit0aGlzLnFhLnRvU3RyaW5nKCkrIiAiK3RoaXMucmEudG9TdHJpbmcoKSsiTCIrdGhpcy5ELnRvU3RyaW5nKCkrIiAiK3RoaXMuRi50b1N0cmluZygpOiJNIit0aGlzLnFhLnRvRml4ZWQoYSkrIiAiK3RoaXMucmEudG9GaXhlZChhKSsiTCIrdGhpcy5ELnRvRml4ZWQoYSkrIiAiK3RoaXMuRi50b0ZpeGVkKGEpO2Nhc2UgRWM6dmFyIGI9bmV3IHgodGhpcy5xYSx0aGlzLnJhLDAsMCk7Yi5QRyh0aGlzLkQsdGhpcy5GLDAsMCk7cmV0dXJuIHZvaWQgMD09PWE/Ik0iK2IueC50b1N0cmluZygpKyIgIitiLnkudG9TdHJpbmcoKSsiSCIrYi5yaWdodC50b1N0cmluZygpKyJWIitiLmJvdHRvbS50b1N0cmluZygpKyJIIitiLmxlZnQudG9TdHJpbmcoKSsieiI6Ik0iK2IueC50b0ZpeGVkKGEpKyIgIitiLnkudG9GaXhlZChhKSsiSCIrYi5yaWdodC50b0ZpeGVkKGEpKw0KIlYiK2IuYm90dG9tLnRvRml4ZWQoYSkrIkgiK2IubGVmdC50b0ZpeGVkKGEpKyJ6IjtjYXNlIE1jOmI9bmV3IHgodGhpcy5xYSx0aGlzLnJhLDAsMCk7Yi5QRyh0aGlzLkQsdGhpcy5GLDAsMCk7aWYodm9pZCAwPT09YSl7dmFyIGM9Yi5sZWZ0LnRvU3RyaW5nKCkrIiAiKyhiLnkrYi5oZWlnaHQvMikudG9TdHJpbmcoKSxkPWIucmlnaHQudG9TdHJpbmcoKSsiICIrKGIueStiLmhlaWdodC8yKS50b1N0cmluZygpO3JldHVybiJNIitjKyJBIisoYi53aWR0aC8yKS50b1N0cmluZygpKyIgIisoYi5oZWlnaHQvMikudG9TdHJpbmcoKSsiIDAgMCAxICIrZCsiQSIrKGIud2lkdGgvMikudG9TdHJpbmcoKSsiICIrKGIuaGVpZ2h0LzIpLnRvU3RyaW5nKCkrIiAwIDAgMSAiK2N9Yz1iLmxlZnQudG9GaXhlZChhKSsiICIrKGIueStiLmhlaWdodC8yKS50b0ZpeGVkKGEpO2Q9Yi5yaWdodC50b0ZpeGVkKGEpKyIgIisoYi55K2IuaGVpZ2h0LzIpLnRvRml4ZWQoYSk7cmV0dXJuIk0iK2MrIkEiKw0KKGIud2lkdGgvMikudG9GaXhlZChhKSsiICIrKGIuaGVpZ2h0LzIpLnRvRml4ZWQoYSkrIiAwIDAgMSAiK2QrIkEiKyhiLndpZHRoLzIpLnRvRml4ZWQoYSkrIiAiKyhiLmhlaWdodC8yKS50b0ZpeGVkKGEpKyIgMCAwIDEgIitjO2Nhc2UgQWM6Zm9yKHZhciBiPSIiLGM9dGhpcy5BYixkPWMubGVuZ3RoLGY9MDtmPGQ7ZisrKXt2YXIgZz1jLm5bZl07MDxmJiYoYis9IiB4ICIpO2cucHAmJihiKz0iRiAiKTtiKz1nLnRvU3RyaW5nKGEpfXJldHVybiBiO2RlZmF1bHQ6cmV0dXJuIHRoaXMudHlwZS50b1N0cmluZygpfX07dmFyIFFjOw0KemMuZmlsbFBhdGg9UWM9ZnVuY3Rpb24oYSl7InN0cmluZyIhPT10eXBlb2YgYSYmdC5iYyhhLCJzdHJpbmciLHpjLCJmaWxsUGF0aDpzdHIiKTthPWEuc3BsaXQoL1tYeF0vKTtmb3IodmFyIGI9YS5sZW5ndGgsYz0iIixkPTA7ZDxiO2QrKyl2YXIgZj1hW2RdLGM9bnVsbCE9PWYubWF0Y2goL1tGZl0vKT8wPT09ZD9jK2Y6YysoIlgiKygiICI9PT1mWzBdPyIiOiIgIikrZik6YysoKDA9PT1kPyIiOiJYICIpKyJGIisoIiAiPT09ZlswXT8iIjoiICIpK2YpO3JldHVybiBjfTt2YXIgUmM7DQp6Yy5wYXJzZT1SYz1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoKXtyZXR1cm4gbj49di0xPyEwOm51bGwhPT1tW24rMV0ubWF0Y2goL1tBLVphLXpdLyl9ZnVuY3Rpb24gZCgpe24rKztyZXR1cm4gbVtuXX1mdW5jdGlvbiBmKCl7dmFyIGE9bmV3IHcocGFyc2VGbG9hdChkKCkpLHBhcnNlRmxvYXQoZCgpKSk7cD09PXAudG9Mb3dlckNhc2UoKSYmKGEueD11LngrYS54LGEueT11LnkrYS55KTtyZXR1cm4gYX1mdW5jdGlvbiBnKCl7cmV0dXJuIHU9ZigpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gcz1mKCl9ZnVuY3Rpb24gaygpe3ZhciBhPVtwYXJzZUZsb2F0KGQoKSkscGFyc2VGbG9hdChkKCkpLHBhcnNlRmxvYXQoZCgpKSxwYXJzZUZsb2F0KGQoKSkscGFyc2VGbG9hdChkKCkpXTtjKCl8fChhLnB1c2gocGFyc2VGbG9hdChkKCkpKSxjKCl8fGEucHVzaChwYXJzZUZsb2F0KGQoKSkpKTtwPT09cC50b0xvd2VyQ2FzZSgpJiYoYVsyXSs9dS54LGFbM10rPXUueSk7cmV0dXJuIGF9ZnVuY3Rpb24gbCgpe3JldHVybiJjIiE9PQ0KcS50b0xvd2VyQ2FzZSgpJiYicyIhPT1xLnRvTG93ZXJDYXNlKCk/dTpuZXcgdygyKnUueC1zLngsMip1Lnktcy55KX12b2lkIDA9PT1iJiYoYj0hMSk7InN0cmluZyIhPT10eXBlb2YgYSYmdC5iYyhhLCJzdHJpbmciLHpjLCJwYXJzZTpzdHIiKTthPWEucmVwbGFjZSgvLC9nbSwiICIpO2E9YS5yZXBsYWNlKC8oW1V1QmJNbVp6TGxIaFZ2Q2NTc1FxVHRBYUZmXSkoW1V1QmJNbVp6TGxIaFZ2Q2NTc1FxVHRBYUZmXSkvZ20sIiQxICQyIik7YT1hLnJlcGxhY2UoLyhbVXVCYk1tWnpMbEhoVnZDY1NzUXFUdEFhRmZdKShbVXVCYk1tWnpMbEhoVnZDY1NzUXFUdEFhRmZdKS9nbSwiJDEgJDIiKTthPWEucmVwbGFjZSgvKFtVdUJiTW1aekxsSGhWdkNjU3NRcVR0QWFGZl0pKFteXHNdKS9nbSwiJDEgJDIiKTthPWEucmVwbGFjZSgvKFteXHNdKShbVXVCYk1tWnpMbEhoVnZDY1NzUXFUdEFhRmZdKS9nbSwiJDEgJDIiKTthPWEucmVwbGFjZSgvKFswLTldKShbK1wtXSkvZ20sIiQxICQyIik7DQphPWEucmVwbGFjZSgvKFwuWzAtOV0qKShcLikvZ20sIiQxICQyIik7YT1hLnJlcGxhY2UoLyhbQWFdKFxzK1swLTldKyl7M30pXHMrKFswMV0pXHMqKFswMV0pL2dtLCIkMSAkMyAkNCAiKTthPWEucmVwbGFjZSgvW1xzXHJcdFxuXSsvZ20sIiAiKTthPWEucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO2Zvcih2YXIgbT1hLnNwbGl0KCIgIiksbj0tMSxwPSIiLHE9IiIscj1uZXcgdygwLDApLHM9bmV3IHcoMCwwKSx1PW5ldyB3KDAsMCksdj1tLmxlbmd0aCxEPXQudSgpLEEsRz0hMSxMPSExLE49ITA7IShuPj12LTEpOylpZihxPXAscD1kKCksIiIhPT1wKXN3aXRjaChwLnRvVXBwZXJDYXNlKCkpe2Nhc2UgIlgiOk49ITA7TD1HPSExO2JyZWFrO2Nhc2UgIk0iOkE9ZygpO251bGw9PT1ELldifHwhMD09PU4/KEooRCxBLngsQS55LEcsITEsIUwpLE49ITEpOkQubW92ZVRvKEEueCxBLnkpO2ZvcihyPXU7IWMoKTspQT1nKCksRC5saW5lVG8oQS54LEEueSk7YnJlYWs7Y2FzZSAiTCI6Zm9yKDshYygpOylBPQ0KZygpLEQubGluZVRvKEEueCxBLnkpO2JyZWFrO2Nhc2UgIkgiOmZvcig7IWMoKTspdT1BPW5ldyB3KChwPT09cC50b0xvd2VyQ2FzZSgpP3UueDowKStwYXJzZUZsb2F0KGQoKSksdS55KSxELmxpbmVUbyh1LngsdS55KTticmVhaztjYXNlICJWIjpmb3IoOyFjKCk7KXU9QT1uZXcgdyh1LngsKHA9PT1wLnRvTG93ZXJDYXNlKCk/dS55OjApK3BhcnNlRmxvYXQoZCgpKSksRC5saW5lVG8odS54LHUueSk7YnJlYWs7Y2FzZSAiQyI6Zm9yKDshYygpOyl7dmFyIE89ZigpLFU9aCgpO0E9ZygpO0soRCxPLngsTy55LFUueCxVLnksQS54LEEueSl9YnJlYWs7Y2FzZSAiUyI6Zm9yKDshYygpOylPPWwoKSxVPWgoKSxBPWcoKSxLKEQsTy54LE8ueSxVLngsVS55LEEueCxBLnkpO2JyZWFrO2Nhc2UgIlEiOmZvcig7IWMoKTspVT1oKCksQT1nKCksU2MoRCxVLngsVS55LEEueCxBLnkpO2JyZWFrO2Nhc2UgIlQiOmZvcig7IWMoKTspcz1VPWwoKSxBPWcoKSxTYyhELFUueCxVLnksQS54LEEueSk7DQpicmVhaztjYXNlICJCIjpmb3IoOyFjKCk7KUE9aygpLEQuYXJjVG8oQVswXSxBWzFdLEFbMl0sQVszXSxBWzRdLEFbNV0sQVs2XSk7YnJlYWs7Y2FzZSAiQSI6Zm9yKDshYygpOyl7dmFyIE89TWF0aC5hYnMocGFyc2VGbG9hdChkKCkpKSxVPU1hdGguYWJzKHBhcnNlRmxvYXQoZCgpKSksWT1wYXJzZUZsb2F0KGQoKSksYmE9ISFwYXJzZUZsb2F0KGQoKSksUj0hIXBhcnNlRmxvYXQoZCgpKTtBPWcoKTtUYyhELE8sVSxZLGJhLFIsQS54LEEueSl9YnJlYWs7Y2FzZSAiWiI6TShEKTt1PXI7YnJlYWs7Y2FzZSAiRiI6QT1udWxsO2ZvcihPPTE7bVtuK09dOylpZihudWxsIT09bVtuK09dLm1hdGNoKC9bVXVdLykpTysrO2Vsc2UgaWYobnVsbD09PW1bbitPXS5tYXRjaCgvW0EtWmEtel0vKSlPKys7ZWxzZXtBPW1bbitPXTticmVha31BLm1hdGNoKC9bTW1dLyk/Rz0hMDpaYyhEKTticmVhaztjYXNlICJVIjpBPW51bGw7Zm9yKE89MTttW24rT107KWlmKG51bGwhPT1tW24rT10ubWF0Y2goL1tGZl0vKSlPKys7DQplbHNlIGlmKG51bGw9PT1tW24rT10ubWF0Y2goL1tBLVphLXpdLykpTysrO2Vsc2V7QT1tW24rT107YnJlYWt9QS5tYXRjaCgvW01tXS8pP0w9ITA6RC5iYighMSl9cj1ELnM7dC52KEQpO2lmKGIpZm9yKEQ9ci5BYi5rO0QubmV4dCgpOylELnZhbHVlLnBwPSEwO3JldHVybiByfTtmdW5jdGlvbiAkYyhhLGIpe2Zvcih2YXIgYz1hLmxlbmd0aCxkPXQuSygpLGY9MDtmPGM7ZisrKXt2YXIgZz1hW2ZdO2QueD1nLngxO2QueT1nLnkxO2IuVGEoZCk7Zy54MT1kLng7Zy55MT1kLnk7ZC54PWcueDI7ZC55PWcueTI7Yi5UYShkKTtnLngyPWQueDtnLnkyPWQueTtkLng9Zy5nZTtkLnk9Zy5oZTtiLlRhKGQpO2cuZ2U9ZC54O2cuaGU9ZC55O2QueD1nLlViO2QueT1nLlZiO2IuVGEoZCk7Zy5VYj1kLng7Zy5WYj1kLnl9dC5CKGQpfQ0KemMucHJvdG90eXBlLndBPWZ1bmN0aW9uKCl7aWYodGhpcy5WYSlyZXR1cm4hMDt2YXIgYT10aGlzLkFiO2lmKHRoaXMuSHUhPT1hLlYpcmV0dXJuITA7Zm9yKHZhciBiPWEubGVuZ3RoLGM9MDtjPGI7YysrKWlmKGEubltjXS53QSgpKXJldHVybiEwO3JldHVybiExfTt6Yy5wcm90b3R5cGUucUI9ZnVuY3Rpb24oKXt0aGlzLlZhPSExO3ZhciBhPXRoaXMuQWI7dGhpcy5IdT1hLlY7Zm9yKHZhciBiPWEubGVuZ3RoLGM9MDtjPGI7YysrKWEubltjXS5xQigpfTt6Yy5wcm90b3R5cGUucWY9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnN1O2EuTGEoKTtpc05hTih0aGlzLiRuKXx8aXNOYU4odGhpcy5abik/YS5wKDAsMCwwLDApOmEucCgwLDAsdGhpcy4kbix0aGlzLlpuKTthZCh0aGlzLGEsITEpO2hiKGEsMCwwLDAsMCk7YS5mcmVlemUoKX07DQp6Yy5wcm90b3R5cGUuY29tcHV0ZUJvdW5kc1dpdGhvdXRPcmlnaW49emMucHJvdG90eXBlLmdJPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHg7YWQodGhpcyxhLCEwKTtyZXR1cm4gYX07DQpmdW5jdGlvbiBhZChhLGIsYyl7c3dpdGNoKGEudHlwZSl7Y2FzZSBEYzpjYXNlIEVjOmNhc2UgTWM6Yz9iLnAoYS5uYyxhLnhjLDAsMCk6aGIoYixhLm5jLGEueGMsMCwwKTtoYihiLGEua2IsYS51YiwwLDApO2JyZWFrO2Nhc2UgQWM6YT1hLkFiO2Zvcih2YXIgZD1hLmxlbmd0aCxmPTA7ZjxkO2YrKyl7dmFyIGc9YS5uW2ZdO2MmJjA9PT1mP2IucChnLnFhLGcucmEsMCwwKTpoYihiLGcucWEsZy5yYSwwLDApO2Zvcih2YXIgaD1nLkZhLGs9aC5sZW5ndGgsbD1nLnFhLG09Zy5yYSxuPTA7bjxrO24rKyl7dmFyIHA9aC5uW25dO3N3aXRjaChwLnR5cGUpe2Nhc2UgT2M6Y2FzZSBiZDpsPXAuRDttPXAuRjtoYihiLGwsbSwwLDApO2JyZWFrO2Nhc2UgY2Q6SC5TbyhsLG0scC5CYixwLlJiLHAucmUscC5zZSxwLkQscC5GLDAuNSxiKTtsPXAuRDttPXAuRjticmVhaztjYXNlIGRkOkguUEEobCxtLHAuQmIscC5SYixwLkQscC5GLDAuNSxiKTtsPXAuRDttPXAuRjticmVhaztjYXNlIGVkOmNhc2UgZmQ6Zm9yKHZhciBwPQ0KcC50eXBlPT09ZWQ/Z2QocCxnKTpoZChwLGcsbCxtKSxxPXAubGVuZ3RoLHI9bnVsbCxzPTA7czxxO3MrKylyPXBbc10sSC5TbyhyLngxLHIueTEsci54MixyLnkyLHIuZ2Usci5oZSxyLlViLHIuVmIsMC41LGIpO251bGwhPT1yJiYobD1yLlViLG09ci5WYik7YnJlYWs7ZGVmYXVsdDp0Lm0oIlVua25vd24gU2VnbWVudCB0eXBlOiAiK3AudHlwZSl9fX1icmVhaztkZWZhdWx0OnQubSgiVW5rbm93biBHZW9tZXRyeSB0eXBlOiAiK2EudHlwZSl9fXpjLnByb3RvdHlwZS5ub3JtYWxpemU9emMucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3QuTCh0aGlzKTt2YXIgYT10aGlzLmdJKCk7dGhpcy5vZmZzZXQoLWEueCwtYS55KTtyZXR1cm4gbmV3IHcoLWEueCwtYS55KX07DQp6Yy5wcm90b3R5cGUub2Zmc2V0PXpjLnByb3RvdHlwZS5vZmZzZXQ9ZnVuY3Rpb24oYSxiKXt0LkwodGhpcyk7ZSYmKHQucShhLHpjLCJvZmZzZXQiKSx0LnEoYix6Yywib2Zmc2V0IikpO3RoaXMudHJhbnNmb3JtKDEsMCwwLDEsYSxiKX07emMucHJvdG90eXBlLnNjYWxlPXpjLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihhLGIpe3QuTCh0aGlzKTtlJiYodC5xKGEsemMsInNjYWxlOngiKSx0LnEoYix6Yywic2NhbGU6eSIpLDA+PWEmJnQubGEoYSwic2NhbGUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIsemMsInNjYWxlOngiKSwwPj1iJiZ0LmxhKGIsInNjYWxlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8iLHpjLCJzY2FsZTp5IikpO3RoaXMudHJhbnNmb3JtKGEsMCwwLGIsMCwwKX07DQp6Yy5wcm90b3R5cGUucm90YXRlPXpjLnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSxiLGMpe3QuTCh0aGlzKTt2b2lkIDA9PT1iJiYoYj0wKTt2b2lkIDA9PT1jJiYoYz0wKTtlJiYodC5xKGEsemMsInJvdGF0ZTphbmdsZSIpLHQucShiLHpjLCJyb3RhdGU6eCIpLHQucShjLHpjLCJyb3RhdGU6eSIpKTt2YXIgZD10LnBoKCk7ZC5yZXNldCgpO2Qucm90YXRlKGEsYixjKTt0aGlzLnRyYW5zZm9ybShkLm0xMSxkLm0xMixkLm0yMSxkLm0yMixkLmR4LGQuZHkpO3QuV2UoZCl9Ow0KemMucHJvdG90eXBlLnRyYW5zZm9ybT16Yy5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGEsYixjLGQsZixnKXt2YXIgaCxrO3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2UgRGM6Y2FzZSBFYzpjYXNlIE1jOmg9dGhpcy5uYztrPXRoaXMueGM7dGhpcy5uYz1oKmEraypjK2Y7dGhpcy54Yz1oKmIraypkK2c7aD10aGlzLmtiO2s9dGhpcy51Yjt0aGlzLmtiPWgqYStrKmMrZjt0aGlzLnViPWgqYitrKmQrZzticmVhaztjYXNlIEFjOmZvcih2YXIgbD10aGlzLkFiLG09bC5sZW5ndGgsbj0wO248bTtuKyspe3ZhciBwPWwubltuXTtoPXAucWE7az1wLnJhO3AucWE9aCphK2sqYytmO3AucmE9aCpiK2sqZCtnO2Zvcih2YXIgcD1wLkZhLHE9cC5sZW5ndGgscj0wO3I8cTtyKyspe3ZhciBzPXAubltyXTtzd2l0Y2gocy50eXBlKXtjYXNlIE9jOmNhc2UgYmQ6aD1zLkQ7az1zLkY7cy5EPWgqYStrKmMrZjtzLkY9aCpiK2sqZCtnO2JyZWFrO2Nhc2UgY2Q6aD1zLkJiO2s9cy5SYjtzLkJiPWgqDQphK2sqYytmO3MuUmI9aCpiK2sqZCtnO2g9cy5yZTtrPXMuc2U7cy5yZT1oKmEraypjK2Y7cy5zZT1oKmIraypkK2c7aD1zLkQ7az1zLkY7cy5EPWgqYStrKmMrZjtzLkY9aCpiK2sqZCtnO2JyZWFrO2Nhc2UgZGQ6aD1zLkJiO2s9cy5SYjtzLkJiPWgqYStrKmMrZjtzLlJiPWgqYitrKmQrZztoPXMuRDtrPXMuRjtzLkQ9aCphK2sqYytmO3MuRj1oKmIraypkK2c7YnJlYWs7Y2FzZSBlZDpoPXMuRGE7az1zLlBhO3MuRGE9aCphK2sqYytmO3MuUGE9aCpiK2sqZCtnO3MucmFkaXVzWCo9TWF0aC5zcXJ0KGEqYStjKmMpO3ZvaWQgMCE9PXMucmFkaXVzWSYmKHMucmFkaXVzWSo9TWF0aC5zcXJ0KGIqYitkKmQpKTticmVhaztjYXNlIGZkOmg9cy5EO2s9cy5GO3MuRD1oKmEraypjK2Y7cy5GPWgqYitrKmQrZztzLnJhZGl1c1gqPU1hdGguc3FydChhKmErYypjKTtzLnJhZGl1c1kqPU1hdGguc3FydChiKmIrZCpkKTticmVhaztkZWZhdWx0OnQubSgiVW5rbm93biBTZWdtZW50IHR5cGU6ICIrDQpzLnR5cGUpfX19fXRoaXMuVmE9ITB9O3pjLnByb3RvdHlwZS5Ecz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMubmMsZD10aGlzLnhjLGY9dGhpcy5rYixnPXRoaXMudWIsaD1NYXRoLm1pbihjLGYpLGs9TWF0aC5taW4oZCxnKSxjPU1hdGguYWJzKGYtYyksZD1NYXRoLmFicyhnLWQpLGc9dC5LKCk7Zy54PWg7Zy55PWs7Yi5UYShnKTtmPW5ldyBCYyhnLngsZy55KTtnLng9aCtjO2cueT1rO2IuVGEoZyk7Zi5GYS5hZGQobmV3IGlkKE9jLGcueCxnLnkpKTtnLng9aCtjO2cueT1rK2Q7Yi5UYShnKTtmLkZhLmFkZChuZXcgaWQoT2MsZy54LGcueSkpO2cueD1oO2cueT1rK2Q7Yi5UYShnKTtmLkZhLmFkZCgobmV3IGlkKE9jLGcueCxnLnkpKS5jbG9zZSgpKTt0LkIoZyk7YS50eXBlPUFjO2EuQWIuYWRkKGYpO3JldHVybiBhfTsNCnpjLnByb3RvdHlwZS5HYT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZj1hLngsZz1hLnksaD10aGlzLk9iLngtMjA7YT1hLnk7Zm9yKHZhciBrPTAsbCxtLG4scCxxLHIscyx1PXRoaXMuQWIubix2PXUubGVuZ3RoLEQ9MDtEPHY7RCsrKXt2YXIgQT11W0RdO2lmKEEucHApe2lmKGMmJkEuR2EoZixnLGIpKXJldHVybiEwO3ZhciBHPUEuRmE7bD1BLnFhO209QS5yYTtmb3IodmFyIEw9bCxOPW0sTz0wO088PUcubGVuZ3RoO08rKyl7TyE9PUcubGVuZ3RoPyhuPUcubltPXSxwPW4udHlwZSxyPW4uRCxzPW4uRik6KHA9T2Mscj1MLHM9Tik7c3dpdGNoKHApe2Nhc2UgYmQ6cT1qZChmLGcsaCxhLGwsbSxMLE4pO2lmKCEwPT09cSlyZXR1cm4hMDtrKz1xO0w9cjtOPXM7YnJlYWs7Y2FzZSBPYzpxPWpkKGYsZyxoLGEsbCxtLHIscyk7aWYoITA9PT1xKXJldHVybiEwO2srPXE7YnJlYWs7Y2FzZSBjZDpxPUguUXMobCxtLG4uQmIsbi5SYixuLnJlLG4uc2UscixzLGgsYSxmLGcsMC41KTtrKz1xOw0KYnJlYWs7Y2FzZSBkZDpxPUguUXMobCxtLChsKzIqbi5CYikvMywobSsyKm4uUmIpLzMsKG4uQmIrMipyKS8zLChuLkJiKzIqcikvMyxyLHMsaCxhLGYsZywwLjUpO2srPXE7YnJlYWs7Y2FzZSBlZDpjYXNlIGZkOnA9bi50eXBlPT09ZWQ/Z2QobixBKTpoZChuLEEsbCxtKTtmb3IodmFyIFU9cC5sZW5ndGgsWT1udWxsLGJhPTA7YmE8VTtiYSsrKXtZPXBbYmFdO2lmKDA9PT1iYSl7cT1qZChmLGcsaCxhLGwsbSxZLngxLFkueTEpO2lmKCEwPT09cSlyZXR1cm4hMDtrKz1xfXE9SC5RcyhZLngxLFkueTEsWS54MixZLnkyLFkuZ2UsWS5oZSxZLlViLFkuVmIsaCxhLGYsZywwLjUpO2srPXF9bnVsbCE9PVkmJihyPVkuVWIscz1ZLlZiKTticmVhaztkZWZhdWx0OnQubSgiVW5rbm93biBTZWdtZW50IHR5cGU6ICIrbi50eXBlKX1sPXI7bT1zfWlmKDAhPT1rKXJldHVybiEwO2s9MH1lbHNlIGlmKEEuR2EoZixnLGQ/YjpiKzIpKXJldHVybiEwfXJldHVybiAwIT09a307DQpmdW5jdGlvbiBqZChhLGIsYyxkLGYsZyxoLGspe2lmKEguTWQoZixnLGgsaywwLjA1LGEsYikpcmV0dXJuITA7dmFyIGw9KGEtYykqKGctayk7aWYoMD09PWwpcmV0dXJuIDA7dmFyIG09KChhKmQtYipjKSooZi1oKS0oYS1jKSooZiprLWcqaCkpL2w7Yj0oYSpkLWIqYykqKGctaykvbDtpZihtPj1hKXJldHVybiAwO2lmKChmPmg/Zi1oOmgtZik8KGc+az9nLWs6ay1nKSl7aWYoZzxrPyhhPWcsZj1rKTooYT1rLGY9ZyksYjxhfHxiPmYpcmV0dXJuIDB9ZWxzZSBpZihmPGg/KGE9ZixmPWgpOmE9aCxtPGF8fG0+ZilyZXR1cm4gMDtyZXR1cm4gMDxsPzE6LTF9ZnVuY3Rpb24ga2QoYSxiLGMsZCl7Zm9yKHZhciBmPWEuQWIubGVuZ3RoLGc9MDtnPGY7ZysrKWlmKGEuQWIubltnXS5HYShiLGMsZCkpcmV0dXJuITA7cmV0dXJuITF9DQp6Yy5wcm90b3R5cGUuZ2V0UG9pbnRBbG9uZ1BhdGg9ZnVuY3Rpb24oYSl7KDA+YXx8MTxhKSYmdC5sYShhLCIwIDw9IGZyYWN0aW9uIDw9IDEiLHpjLCJnZXRQb2ludEFsb25nUGF0aDpmcmFjdGlvbiIpO3ZhciBiPXRoaXMuQWIuJGEoKSxjPXQuQ2IoKSxkPVtdO2QucHVzaChbYi5xYSxiLnJhXSk7Zm9yKHZhciBmPWIucWEsZz1iLnJhLGg9ZixrPWcsbD1iLkZhLm4sbT1sLmxlbmd0aCxuPTA7bjxtO24rKyl7dmFyIHA9bFtuXTtzd2l0Y2gocC5kYSl7Y2FzZSBiZDpjLnB1c2goZCk7ZD1bXTtkLnB1c2goW3AuRCxwLkZdKTtmPXAuRDtnPXAuRjtoPWY7az1nO2JyZWFrO2Nhc2UgT2M6ZC5wdXNoKFtwLkQscC5GXSk7Zj1wLkQ7Zz1wLkY7YnJlYWs7Y2FzZSBjZDpILnplKGYsZyxwLmpkLHAueWUscC5uZyxwLm9nLHAua2IscC51YiwwLjUsZCk7Zj1wLkQ7Zz1wLkY7YnJlYWs7Y2FzZSBkZDpILkpwKGYsZyxwLmpkLHAueWUscC5rYixwLnViLDAuNSxkKTtmPXAuRDtnPXAuRjticmVhazsNCmNhc2UgZWQ6Zm9yKHZhciBxPWdkKHAsYikscj1xLmxlbmd0aCxzPTA7czxyO3MrKyl7dmFyIHU9cVtzXTtILnplKGYsZyx1LngyLHUueTIsdS5nZSx1LmhlLHUuVWIsdS5WYiwwLjUsZCk7Zj11LlViO2c9dS5WYn1icmVhaztjYXNlIGZkOnE9aGQocCxiLGYsZyk7cj1xLmxlbmd0aDtmb3Iocz0wO3M8cjtzKyspdT1xW3NdLEguemUoZixnLHUueDIsdS55Mix1LmdlLHUuaGUsdS5VYix1LlZiLDAuNSxkKSxmPXUuVWIsZz11LlZiO2JyZWFrO2RlZmF1bHQ6dC5tKCJTZWdtZW50IG5vdCBvZiB2YWxpZCB0eXBlIil9cC5IaCYmZC5wdXNoKFtoLGtdKX1jLnB1c2goZCk7bT0wO2Y9Yy5sZW5ndGg7Yj1udWxsO2ZvcihnPTA7ZzxmO2crKylmb3IoaD1jW2ddLGs9aC5sZW5ndGgsbj0wO248aztuKyspZD1oW25dLDAhPT1uJiYobD1NYXRoLnNxcnQoU2EoYlswXSxiWzFdLGRbMF0sZFsxXSkpLG0rPWwpLGI9ZDthKj1tO2ZvcihnPW09MDtnPGY7ZysrKWZvcihoPWNbZ10saz1oLmxlbmd0aCxuPQ0KMDtuPGs7bisrKXtkPWhbbl07aWYoMCE9PW4pe2w9TWF0aC5zcXJ0KFNhKGJbMF0sYlsxXSxkWzBdLGRbMV0pKTtpZihtK2w+YSlyZXR1cm4gbj0oYS1tKS9sLHQueWEoYyksbmV3IHcoYlswXSsoZFswXS1iWzBdKSpuLGJbMV0rKGRbMV0tYlsxXSkqbik7bSs9bH1iPWR9dC55YShjKTtyZXR1cm4gbnVsbH07dC5nKHpjLCJ0eXBlIix6Yy5wcm90b3R5cGUudHlwZSk7dC5kZWZpbmVQcm9wZXJ0eSh6Yyx7dHlwZToidHlwZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LGZ1bmN0aW9uKGEpe3RoaXMuZGEhPT1hJiYoZSYmdC5BYShhLHpjLHpjLCJ0eXBlIiksdC5MKHRoaXMsYSksdGhpcy5kYT1hLHRoaXMuVmE9ITApfSk7dC5nKHpjLCJzdGFydFgiLHpjLnByb3RvdHlwZS5xYSk7DQp0LmRlZmluZVByb3BlcnR5KHpjLHtxYToic3RhcnRYIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uY30sZnVuY3Rpb24oYSl7dGhpcy5uYyE9PWEmJihlJiZ0LnEoYSx6Yywic3RhcnRYIiksdC5MKHRoaXMsYSksdGhpcy5uYz1hLHRoaXMuVmE9ITApfSk7dC5nKHpjLCJzdGFydFkiLHpjLnByb3RvdHlwZS5yYSk7dC5kZWZpbmVQcm9wZXJ0eSh6Yyx7cmE6InN0YXJ0WSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueGN9LGZ1bmN0aW9uKGEpe3RoaXMueGMhPT1hJiYoZSYmdC5xKGEsemMsInN0YXJ0WSIpLHQuTCh0aGlzLGEpLHRoaXMueGM9YSx0aGlzLlZhPSEwKX0pO3QuZyh6YywiZW5kWCIsemMucHJvdG90eXBlLkQpO3QuZGVmaW5lUHJvcGVydHkoemMse0Q6ImVuZFgifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmtifSxmdW5jdGlvbihhKXt0aGlzLmtiIT09YSYmKGUmJnQucShhLHpjLCJlbmRYIiksdC5MKHRoaXMsYSksdGhpcy5rYj1hLHRoaXMuVmE9ITApfSk7DQp0LmcoemMsImVuZFkiLHpjLnByb3RvdHlwZS5GKTt0LmRlZmluZVByb3BlcnR5KHpjLHtGOiJlbmRZIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51Yn0sZnVuY3Rpb24oYSl7dGhpcy51YiE9PWEmJihlJiZ0LnEoYSx6YywiZW5kWSIpLHQuTCh0aGlzLGEpLHRoaXMudWI9YSx0aGlzLlZhPSEwKX0pO3QuZyh6YywiZmlndXJlcyIsemMucHJvdG90eXBlLkFiKTt0LmRlZmluZVByb3BlcnR5KHpjLHtBYjoiZmlndXJlcyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQmt9LGZ1bmN0aW9uKGEpe3RoaXMuQmshPT1hJiYoZSYmdC5sKGEsQix6YywiZmlndXJlcyIpLHQuTCh0aGlzLGEpLHRoaXMuQms9YSx0aGlzLlZhPSEwKX0pO3QuZGVmaW5lUHJvcGVydHkoemMse0c6InNwb3QxIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NaX0sZnVuY3Rpb24oYSl7ZSYmdC5sKGEsSSx6Yywic3BvdDEiKTt0LkwodGhpcyxhKTt0aGlzLk1pPWEuWigpfSk7DQp0LmRlZmluZVByb3BlcnR5KHpjLHtIOiJzcG90MiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTml9LGZ1bmN0aW9uKGEpe2UmJnQubChhLEksemMsInNwb3QyIik7dC5MKHRoaXMsYSk7dGhpcy5OaT1hLlooKX0pO3QuQSh6Yyx7T2I6ImJvdW5kcyJ9LGZ1bmN0aW9uKCl7dGhpcy53QSgpJiYodGhpcy5xQigpLHRoaXMucWYoKSk7cmV0dXJuIHRoaXMuc3V9KTtmdW5jdGlvbiBCYyhhLGIsYyl7dC5BYyh0aGlzKTt2b2lkIDA9PT1jJiYoYz0hMCk7dGhpcy5VbD1jO3RoaXMuYm89ITA7dm9pZCAwIT09YT8oZSYmdC5xKGEsQmMsInN4IiksdGhpcy5uYz1hKTp0aGlzLm5jPTA7dm9pZCAwIT09Yj8oZSYmdC5xKGIsQmMsInN5IiksdGhpcy54Yz1iKTp0aGlzLnhjPTA7dGhpcy5ocz1uZXcgQihpZCk7dGhpcy5Hdj10aGlzLmhzLlY7dGhpcy5WYT0hMH10LmdhKCJQYXRoRmlndXJlIixCYyk7dC5ZaChCYyk7DQpCYy5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyBCYzthLlVsPXRoaXMuVWw7YS5ibz10aGlzLmJvO2EubmM9dGhpcy5uYzthLnhjPXRoaXMueGM7Zm9yKHZhciBiPXRoaXMuaHMsYz1iLmxlbmd0aCxkPWEuaHMsZj0wO2Y8YztmKyspe3ZhciBnPWIubltmXS5jb3B5KCk7ZC5hZGQoZyl9YS5Hdj10aGlzLkd2O2EuVmE9dGhpcy5WYTtyZXR1cm4gYX07QmMucHJvdG90eXBlLmVxdWFsc0FwcHJveD1CYy5wcm90b3R5cGUudGY9ZnVuY3Rpb24oYSl7aWYoIShhIGluc3RhbmNlb2YgQmMmJkguSSh0aGlzLnFhLGEucWEpJiZILkkodGhpcy5yYSxhLnJhKSkpcmV0dXJuITE7dmFyIGI9dGhpcy5GYTthPWEuRmE7dmFyIGM9Yi5sZW5ndGg7aWYoYyE9PWEubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgZD0wO2Q8YztkKyspaWYoIWIubltkXS50ZihhLm5bZF0pKXJldHVybiExO3JldHVybiEwfTthYT1CYy5wcm90b3R5cGU7DQphYS50b1N0cmluZz1mdW5jdGlvbihhKXtmb3IodmFyIGI9dm9pZCAwPT09YT8iTSIrdGhpcy5xYS50b1N0cmluZygpKyIgIit0aGlzLnJhLnRvU3RyaW5nKCk6Ik0iK3RoaXMucWEudG9GaXhlZChhKSsiICIrdGhpcy5yYS50b0ZpeGVkKGEpLGM9dGhpcy5GYSxkPWMubGVuZ3RoLGY9MDtmPGQ7ZisrKWIrPSIgIitjLm5bZl0udG9TdHJpbmcoYSk7cmV0dXJuIGJ9O2FhLmZyZWV6ZT1mdW5jdGlvbigpe3RoaXMub2I9ITA7dmFyIGE9dGhpcy5GYTthLmZyZWV6ZSgpO2Zvcih2YXIgYj1hLmxlbmd0aCxjPTA7YzxiO2MrKylhLm5bY10uZnJlZXplKCk7cmV0dXJuIHRoaXN9O2FhLkxhPWZ1bmN0aW9uKCl7dGhpcy5vYj0hMTt2YXIgYT10aGlzLkZhO2EuTGEoKTtmb3IodmFyIGI9YS5sZW5ndGgsYz0wO2M8YjtjKyspYS5uW2NdLkxhKCk7cmV0dXJuIHRoaXN9Ow0KYWEud0E9ZnVuY3Rpb24oKXtpZih0aGlzLlZhKXJldHVybiEwO3ZhciBhPXRoaXMuRmE7aWYodGhpcy5HdiE9PWEuVilyZXR1cm4hMDtmb3IodmFyIGI9YS5sZW5ndGgsYz0wO2M8YjtjKyspaWYoYS5uW2NdLlZhKXJldHVybiEwO3JldHVybiExfTthYS5xQj1mdW5jdGlvbigpe3RoaXMuVmE9ITE7dmFyIGE9dGhpcy5GYTt0aGlzLkd2PWEuVjtmb3IodmFyIGI9YS5sZW5ndGgsYz0wO2M8YjtjKyspe3ZhciBkPWEubltjXTtkLlZhPSExO2Qub2o9bnVsbH19O3QuZyhCYywiaXNGaWxsZWQiLEJjLnByb3RvdHlwZS5wcCk7dC5kZWZpbmVQcm9wZXJ0eShCYyx7cHA6ImlzRmlsbGVkIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5VbH0sZnVuY3Rpb24oYSl7ZSYmdC5pKGEsImJvb2xlYW4iLEJjLCJpc0ZpbGxlZCIpO3QuTCh0aGlzLGEpO3RoaXMuVWw9YX0pO3QuZyhCYywiaXNTaGFkb3dlZCIsQmMucHJvdG90eXBlLmdqKTsNCnQuZGVmaW5lUHJvcGVydHkoQmMse2dqOiJpc1NoYWRvd2VkIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib30sZnVuY3Rpb24oYSl7ZSYmdC5pKGEsImJvb2xlYW4iLEJjLCJpc1NoYWRvd2VkIik7dC5MKHRoaXMsYSk7dGhpcy5ibz1hfSk7dC5nKEJjLCJzdGFydFgiLEJjLnByb3RvdHlwZS5xYSk7dC5kZWZpbmVQcm9wZXJ0eShCYyx7cWE6InN0YXJ0WCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmN9LGZ1bmN0aW9uKGEpe2UmJnQucShhLEJjLCJzdGFydFgiKTt0LkwodGhpcyxhKTt0aGlzLm5jPWE7dGhpcy5WYT0hMH0pO3QuZyhCYywic3RhcnRZIixCYy5wcm90b3R5cGUucmEpO3QuZGVmaW5lUHJvcGVydHkoQmMse3JhOiJzdGFydFkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnhjfSxmdW5jdGlvbihhKXtlJiZ0LnEoYSxCYywic3RhcnRZIik7dC5MKHRoaXMsYSk7dGhpcy54Yz1hO3RoaXMuVmE9ITB9KTt0LmcoQmMsInNlZ21lbnRzIixCYy5wcm90b3R5cGUuRmEpOw0KdC5kZWZpbmVQcm9wZXJ0eShCYyx7RmE6InNlZ21lbnRzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oc30sZnVuY3Rpb24oYSl7ZSYmdC5sKGEsQixCYywic2VnbWVudHMiKTt0LkwodGhpcyxhKTt0aGlzLmhzPWE7dGhpcy5WYT0hMH0pOw0KQmMucHJvdG90eXBlLkdhPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcy5xYSxmPXRoaXMucmEsZz1kLGg9ZixrPXRoaXMuRmEubixsPWsubGVuZ3RoLG09MDttPGw7bSsrKXt2YXIgbj1rW21dO3N3aXRjaChuLnR5cGUpe2Nhc2UgYmQ6Zz1uLkQ7aD1uLkY7ZD1uLkQ7Zj1uLkY7YnJlYWs7Y2FzZSBPYzppZihILk1kKGQsZixuLkQsbi5GLGMsYSxiKSlyZXR1cm4hMDtkPW4uRDtmPW4uRjticmVhaztjYXNlIGNkOmlmKEguZ3coZCxmLG4uQmIsbi5SYixuLnJlLG4uc2Usbi5ELG4uRiwwLjUsYSxiLGMpKXJldHVybiEwO2Q9bi5EO2Y9bi5GO2JyZWFrO2Nhc2UgZGQ6aWYoSC5RQShkLGYsbi5CYixuLlJiLG4uRCxuLkYsMC41LGEsYixjKSlyZXR1cm4hMDtkPW4uRDtmPW4uRjticmVhaztjYXNlIGVkOmNhc2UgZmQ6Zm9yKHZhciBwPW4udHlwZT09PWVkP2dkKG4sdGhpcyk6aGQobix0aGlzLGQsZikscT1wLmxlbmd0aCxyPW51bGwscz0wO3M8cTtzKyspaWYocj1wW3NdLDA9PT1zJiYNCkguTWQoZCxmLHIueDEsci55MSxjLGEsYil8fEguZ3coci54MSxyLnkxLHIueDIsci55MixyLmdlLHIuaGUsci5VYixyLlZiLDAuNSxhLGIsYykpcmV0dXJuITA7bnVsbCE9PXImJihkPXIuVWIsZj1yLlZiKTticmVhaztkZWZhdWx0OnQubSgiVW5rbm93biBTZWdtZW50IHR5cGU6ICIrbi50eXBlKX1pZihuLm50JiYoZCE9PWd8fGYhPT1oKSYmSC5NZChkLGYsZyxoLGMsYSxiKSlyZXR1cm4hMH1yZXR1cm4hMX07DQpmdW5jdGlvbiBpZChhLGIsYyxkLGYsZyxoLGspe3QuQWModGhpcyk7dm9pZCAwPT09YT9hPU9jOmUmJnQuQWEoYSxpZCxpZCwiY29uc3RydWN0b3I6dHlwZSIpO3RoaXMuZGE9YTt2b2lkIDAhPT1iPyhlJiZ0LnEoYixpZCwiZXgiKSx0aGlzLmtiPWIpOnRoaXMua2I9MDt2b2lkIDAhPT1jPyhlJiZ0LnEoYyxpZCwiZXkiKSx0aGlzLnViPWMpOnRoaXMudWI9MDthPT09ZmQ/KHZvaWQgMCE9PWcmJihhPWclMzYwLDA+YSYmKGErPTM2MCksdGhpcy5qZD1hKSx2b2lkIDAhPT1kJiYoZSYmdC5xKGQsaWQsIngxIiksdGhpcy5uZz1NYXRoLm1heChkLDApKSx2b2lkIDAhPT1mJiYoZSYmdC5xKGYsaWQsInkxIiksdGhpcy5vZz1NYXRoLm1heChmLDApKSx0aGlzLmpvPSEhaCx0aGlzLnluPSEhayk6KHZvaWQgMCE9PWQmJihlJiZ0LnEoZCxpZCwieDEiKSx0aGlzLmpkPWQpLHZvaWQgMCE9PWYmJihlJiZ0LnEoZixpZCwieTEiKSx0aGlzLnllPWYpLHZvaWQgMCE9PWcmJihlJiZ0LnEoZyxpZCwNCiJ4MiIpLGE9PT1lZCYmKGc9TWF0aC5tYXgoZywwKSksdGhpcy5uZz1nKSx2b2lkIDAhPT1oJiYibnVtYmVyIj09PXR5cGVvZiBoJiYoZSYmdC5xKGgsaWQsInkyIiksYT09PWVkJiYoaD1NYXRoLm1heChoLDApKSx0aGlzLm9nPWgpKTt0aGlzLkhoPSExO3RoaXMuVmE9ITA7dGhpcy5vaj1udWxsfXQuZ2EoIlBhdGhTZWdtZW50IixpZCk7dC5ZaChpZCk7DQppZC5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyBpZDthLmRhPXRoaXMuZGE7YS5rYj10aGlzLmtiO2EudWI9dGhpcy51Yjt2b2lkIDAhPT10aGlzLmpkJiYoYS5qZD10aGlzLmpkKTt2b2lkIDAhPT10aGlzLnllJiYoYS55ZT10aGlzLnllKTt2b2lkIDAhPT10aGlzLm5nJiYoYS5uZz10aGlzLm5nKTt2b2lkIDAhPT10aGlzLm9nJiYoYS5vZz10aGlzLm9nKTt2b2lkIDAhPT10aGlzLmpvJiYoYS5qbz10aGlzLmpvKTt2b2lkIDAhPT10aGlzLnluJiYoYS55bj10aGlzLnluKTthLkhoPXRoaXMuSGg7YS5WYT10aGlzLlZhO3JldHVybiBhfTsNCmlkLnByb3RvdHlwZS5lcXVhbHNBcHByb3g9aWQucHJvdG90eXBlLnRmPWZ1bmN0aW9uKGEpe2lmKCEoYSBpbnN0YW5jZW9mIGlkKXx8dGhpcy50eXBlIT09YS50eXBlfHx0aGlzLm50IT09YS5udClyZXR1cm4hMTtzd2l0Y2godGhpcy50eXBlKXtjYXNlIGJkOmNhc2UgT2M6cmV0dXJuIEguSSh0aGlzLkQsYS5EKSYmSC5JKHRoaXMuRixhLkYpO2Nhc2UgY2Q6cmV0dXJuIEguSSh0aGlzLkQsYS5EKSYmSC5JKHRoaXMuRixhLkYpJiZILkkodGhpcy5CYixhLkJiKSYmSC5JKHRoaXMuUmIsYS5SYikmJkguSSh0aGlzLnJlLGEucmUpJiZILkkodGhpcy5zZSxhLnNlKTtjYXNlIGRkOnJldHVybiBILkkodGhpcy5ELGEuRCkmJkguSSh0aGlzLkYsYS5GKSYmSC5JKHRoaXMuQmIsYS5CYikmJkguSSh0aGlzLlJiLGEuUmIpO2Nhc2UgZWQ6cmV0dXJuIEguSSh0aGlzLm5oLGEubmgpJiZILkkodGhpcy5oaSxhLmhpKSYmSC5JKHRoaXMuRGEsYS5EYSkmJkguSSh0aGlzLlBhLGEuUGEpJiZILkkodGhpcy5yYWRpdXNYLA0KYS5yYWRpdXNYKSYmSC5JKHRoaXMucmFkaXVzWSxhLnJhZGl1c1kpO2Nhc2UgZmQ6cmV0dXJuIHRoaXMuUXc9PT1hLlF3JiZ0aGlzLlN3PT09YS5TdyYmSC5JKHRoaXMuRXgsYS5FeCkmJkguSSh0aGlzLkQsYS5EKSYmSC5JKHRoaXMuRixhLkYpJiZILkkodGhpcy5yYWRpdXNYLGEucmFkaXVzWCkmJkguSSh0aGlzLnJhZGl1c1ksYS5yYWRpdXNZKTtkZWZhdWx0OnJldHVybiExfX07DQppZC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYSl7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSBiZDphPXZvaWQgMD09PWE/Ik0iK3RoaXMuRC50b1N0cmluZygpKyIgIit0aGlzLkYudG9TdHJpbmcoKToiTSIrdGhpcy5ELnRvRml4ZWQoYSkrIiAiK3RoaXMuRi50b0ZpeGVkKGEpO2JyZWFrO2Nhc2UgT2M6YT12b2lkIDA9PT1hPyJMIit0aGlzLkQudG9TdHJpbmcoKSsiICIrdGhpcy5GLnRvU3RyaW5nKCk6IkwiK3RoaXMuRC50b0ZpeGVkKGEpKyIgIit0aGlzLkYudG9GaXhlZChhKTticmVhaztjYXNlIGNkOmE9dm9pZCAwPT09YT8iQyIrdGhpcy5CYi50b1N0cmluZygpKyIgIit0aGlzLlJiLnRvU3RyaW5nKCkrIiAiK3RoaXMucmUudG9TdHJpbmcoKSsiICIrdGhpcy5zZS50b1N0cmluZygpKyIgIit0aGlzLkQudG9TdHJpbmcoKSsiICIrdGhpcy5GLnRvU3RyaW5nKCk6IkMiK3RoaXMuQmIudG9GaXhlZChhKSsiICIrdGhpcy5SYi50b0ZpeGVkKGEpKyIgIit0aGlzLnJlLnRvRml4ZWQoYSkrDQoiICIrdGhpcy5zZS50b0ZpeGVkKGEpKyIgIit0aGlzLkQudG9GaXhlZChhKSsiICIrdGhpcy5GLnRvRml4ZWQoYSk7YnJlYWs7Y2FzZSBkZDphPXZvaWQgMD09PWE/IlEiK3RoaXMuQmIudG9TdHJpbmcoKSsiICIrdGhpcy5SYi50b1N0cmluZygpKyIgIit0aGlzLkQudG9TdHJpbmcoKSsiICIrdGhpcy5GLnRvU3RyaW5nKCk6IlEiK3RoaXMuQmIudG9GaXhlZChhKSsiICIrdGhpcy5SYi50b0ZpeGVkKGEpKyIgIit0aGlzLkQudG9GaXhlZChhKSsiICIrdGhpcy5GLnRvRml4ZWQoYSk7YnJlYWs7Y2FzZSBlZDphPXZvaWQgMD09PWE/IkIiK3RoaXMubmgudG9TdHJpbmcoKSsiICIrdGhpcy5oaS50b1N0cmluZygpKyIgIit0aGlzLkRhLnRvU3RyaW5nKCkrIiAiK3RoaXMuUGEudG9TdHJpbmcoKSsiICIrdGhpcy5yYWRpdXNYOiJCIit0aGlzLm5oLnRvRml4ZWQoYSkrIiAiK3RoaXMuaGkudG9GaXhlZChhKSsiICIrdGhpcy5EYS50b0ZpeGVkKGEpKyIgIit0aGlzLlBhLnRvRml4ZWQoYSkrDQoiICIrdGhpcy5yYWRpdXNYO2JyZWFrO2Nhc2UgZmQ6YT12b2lkIDA9PT1hPyJBIit0aGlzLnJhZGl1c1gudG9TdHJpbmcoKSsiICIrdGhpcy5yYWRpdXNZLnRvU3RyaW5nKCkrIiAiK3RoaXMuRXgudG9TdHJpbmcoKSsiICIrKHRoaXMuU3c/MTowKSsiICIrKHRoaXMuUXc/MTowKSsiICIrdGhpcy5ELnRvU3RyaW5nKCkrIiAiK3RoaXMuRi50b1N0cmluZygpOiJBIit0aGlzLnJhZGl1c1gudG9GaXhlZChhKSsiICIrdGhpcy5yYWRpdXNZLnRvRml4ZWQoYSkrIiAiK3RoaXMuRXgudG9GaXhlZChhKSsiICIrKHRoaXMuU3c/MTowKSsiICIrKHRoaXMuUXc/MTowKSsiICIrdGhpcy5ELnRvRml4ZWQoYSkrIiAiK3RoaXMuRi50b0ZpeGVkKGEpO2JyZWFrO2RlZmF1bHQ6YT10aGlzLnR5cGUudG9TdHJpbmcoKX1yZXR1cm4gYSsodGhpcy5IaD8ieiI6IiIpfTt2YXIgYmQ7aWQuTW92ZT1iZD10LncoaWQsIk1vdmUiLDApO3ZhciBPYztpZC5MaW5lPU9jPXQudyhpZCwiTGluZSIsMSk7dmFyIGNkOw0KaWQuQmV6aWVyPWNkPXQudyhpZCwiQmV6aWVyIiwyKTt2YXIgZGQ7aWQuUXVhZHJhdGljQmV6aWVyPWRkPXQudyhpZCwiUXVhZHJhdGljQmV6aWVyIiwzKTt2YXIgZWQ7aWQuQXJjPWVkPXQudyhpZCwiQXJjIiw0KTt2YXIgZmQ7aWQuU3ZnQXJjPWZkPXQudyhpZCwiU3ZnQXJjIiw0KTtpZC5wcm90b3R5cGUuZnJlZXplPWZ1bmN0aW9uKCl7dGhpcy5vYj0hMDtyZXR1cm4gdGhpc307aWQucHJvdG90eXBlLkxhPWZ1bmN0aW9uKCl7dGhpcy5vYj0hMTtyZXR1cm4gdGhpc307aWQucHJvdG90eXBlLmNsb3NlPWlkLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuSGg9ITA7cmV0dXJuIHRoaXN9Ow0KZnVuY3Rpb24gZ2QoYSxiKXtpZihudWxsIT09YS5vaiYmITE9PT1iLlZhKXJldHVybiBhLm9qO3ZhciBjPWEucmFkaXVzWCxkPWEucmFkaXVzWTt2b2lkIDA9PT1kJiYoZD1jKTt2YXIgZj1hLmpkLGc9YS55ZSxoPUguaUUoMCwwLGM8ZD9jOmQsYS5uaCxhLm5oK2EuaGkpO2lmKGMhPT1kKXt2YXIgaz10LnBoKCk7ay5yZXNldCgpO2M8ZD9rLnNjYWxlKDEsZC9jKTprLnNjYWxlKGMvZCwxKTtmb3IodmFyIGM9aC5sZW5ndGgsZD10LksoKSxsPTA7bDxjO2wrKyl7dmFyIG09aFtsXTtkLng9bS54MTtkLnk9bS55MTtrLlRhKGQpO20ueDE9ZC54O20ueTE9ZC55O2QueD1tLngyO2QueT1tLnkyO2suVGEoZCk7bS54Mj1kLng7bS55Mj1kLnk7ZC54PW0uZ2U7ZC55PW0uaGU7ay5UYShkKTttLmdlPWQueDttLmhlPWQueTtkLng9bS5VYjtkLnk9bS5WYjtrLlRhKGQpO20uVWI9ZC54O20uVmI9ZC55fXQuQihkKTt0LldlKGspfWs9aC5sZW5ndGg7Zm9yKGM9MDtjPGs7YysrKWQ9aFtjXSxkLngxKz0NCmYsZC55MSs9ZyxkLngyKz1mLGQueTIrPWcsZC5nZSs9ZixkLmhlKz1nLGQuVWIrPWYsZC5WYis9ZzthLm9qPWg7cmV0dXJuIGEub2p9DQpmdW5jdGlvbiBoZChhLGIsYyxkKXtmdW5jdGlvbiBmKGEsYil7cmV0dXJuKGFbMF0qYlsxXTxhWzFdKmJbMF0/LTE6MSkqTWF0aC5hY29zKGcoYSxiKSl9ZnVuY3Rpb24gZyhhLGIpe3JldHVybihhWzBdKmJbMF0rYVsxXSpiWzFdKS8oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sMikrTWF0aC5wb3coYVsxXSwyKSkqTWF0aC5zcXJ0KE1hdGgucG93KGJbMF0sMikrTWF0aC5wb3coYlsxXSwyKSkpfWlmKG51bGwhPT1hLm9qJiYhMT09PWIuVmEpcmV0dXJuIGEub2o7Yj1hLm5nO3ZhciBoPWEub2csaz1NYXRoLlBJLzE4MCphLmpkLGw9YS5qbyxtPWEueW4sbj1hLmtiLHA9YS51YixxPU1hdGguY29zKGspKihjLW4pLzIrTWF0aC5zaW4oaykqKGQtcCkvMixyPS1NYXRoLnNpbihrKSooYy1uKS8yK01hdGguY29zKGspKihkLXApLzIscz1NYXRoLnBvdyhxLDIpL01hdGgucG93KGIsMikrTWF0aC5wb3cociwyKS9NYXRoLnBvdyhoLDIpOzE8cyYmKGIqPU1hdGguc3FydChzKSxoKj1NYXRoLnNxcnQocykpOw0Kcz0obD09PW0/LTE6MSkqTWF0aC5zcXJ0KChNYXRoLnBvdyhiLDIpKk1hdGgucG93KGgsMiktTWF0aC5wb3coYiwyKSpNYXRoLnBvdyhyLDIpLU1hdGgucG93KGgsMikqTWF0aC5wb3cocSwyKSkvKE1hdGgucG93KGIsMikqTWF0aC5wb3cociwyKStNYXRoLnBvdyhoLDIpKk1hdGgucG93KHEsMikpKTtpc05hTihzKSYmKHM9MCk7bD1zKmIqci9oO3M9cyotaCpxL2I7aXNOYU4obCkmJihsPTApO2lzTmFOKHMpJiYocz0wKTtjPShjK24pLzIrTWF0aC5jb3MoaykqbC1NYXRoLnNpbihrKSpzO2Q9KGQrcCkvMitNYXRoLnNpbihrKSpsK01hdGguY29zKGspKnM7az1mKFsxLDBdLFsocS1sKS9iLChyLXMpL2hdKTtwPVsocS1sKS9iLChyLXMpL2hdO3I9WygtcS1sKS9iLCgtci1zKS9oXTtxPWYocCxyKTstMT49ZyhwLHIpJiYocT1NYXRoLlBJKTsxPD1nKHAscikmJihxPTApOyFtJiYwPHEmJihxLT0yKk1hdGguUEkpO20mJjA+cSYmKHErPTIqTWF0aC5QSSk7bT1iPmg/MTpiL2g7cj1iPmg/DQpoL2I6MTtiPUguaUUoMCwwLGI+aD9iOmgsayxrK3EsITApO2g9dC5waCgpO2gucmVzZXQoKTtoLnRyYW5zbGF0ZShjLGQpO2gucm90YXRlKGEuamQsMCwwKTtoLnNjYWxlKG0scik7JGMoYixoKTt0LldlKGgpO2Eub2o9YjtyZXR1cm4gYS5van10LmcoaWQsImlzQ2xvc2VkIixpZC5wcm90b3R5cGUubnQpO3QuZGVmaW5lUHJvcGVydHkoaWQse250OiJpc0Nsb3NlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGh9LGZ1bmN0aW9uKGEpe3RoaXMuSGghPT1hJiYodGhpcy5IaD1hLHRoaXMuVmE9ITApfSk7dC5nKGlkLCJ0eXBlIixpZC5wcm90b3R5cGUudHlwZSk7dC5kZWZpbmVQcm9wZXJ0eShpZCx7dHlwZToidHlwZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF9LGZ1bmN0aW9uKGEpe2UmJnQuQWEoYSxpZCxpZCwidHlwZSIpO3QuTCh0aGlzLGEpO3RoaXMuZGE9YTt0aGlzLlZhPSEwfSk7dC5nKGlkLCJlbmRYIixpZC5wcm90b3R5cGUuRCk7DQp0LmRlZmluZVByb3BlcnR5KGlkLHtEOiJlbmRYIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rYn0sZnVuY3Rpb24oYSl7ZSYmdC5xKGEsaWQsImVuZFgiKTt0LkwodGhpcyxhKTt0aGlzLmtiPWE7dGhpcy5WYT0hMH0pO3QuZyhpZCwiZW5kWSIsaWQucHJvdG90eXBlLkYpO3QuZGVmaW5lUHJvcGVydHkoaWQse0Y6ImVuZFkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVifSxmdW5jdGlvbihhKXtlJiZ0LnEoYSxpZCwiZW5kWSIpO3QuTCh0aGlzLGEpO3RoaXMudWI9YTt0aGlzLlZhPSEwfSk7dC5kZWZpbmVQcm9wZXJ0eShpZCx7QmI6InBvaW50MVgifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmpkfSxmdW5jdGlvbihhKXtlJiZ0LnEoYSxpZCwicG9pbnQxWCIpO3QuTCh0aGlzLGEpO3RoaXMuamQ9YTt0aGlzLlZhPSEwfSk7DQp0LmRlZmluZVByb3BlcnR5KGlkLHtSYjoicG9pbnQxWSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueWV9LGZ1bmN0aW9uKGEpe2UmJnQucShhLGlkLCJwb2ludDFZIik7dC5MKHRoaXMsYSk7dGhpcy55ZT1hO3RoaXMuVmE9ITB9KTt0LmRlZmluZVByb3BlcnR5KGlkLHtyZToicG9pbnQyWCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmd9LGZ1bmN0aW9uKGEpe2UmJnQucShhLGlkLCJwb2ludDJYIik7dC5MKHRoaXMsYSk7dGhpcy5uZz1hO3RoaXMuVmE9ITB9KTt0LmRlZmluZVByb3BlcnR5KGlkLHtzZToicG9pbnQyWSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2d9LGZ1bmN0aW9uKGEpe2UmJnQucShhLGlkLCJwb2ludDJZIik7dC5MKHRoaXMsYSk7dGhpcy5vZz1hO3RoaXMuVmE9ITB9KTsNCnQuZGVmaW5lUHJvcGVydHkoaWQse0RhOiJjZW50ZXJYIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qZH0sZnVuY3Rpb24oYSl7ZSYmdC5xKGEsaWQsImNlbnRlclgiKTt0LkwodGhpcyxhKTt0aGlzLmpkPWE7dGhpcy5WYT0hMH0pO3QuZGVmaW5lUHJvcGVydHkoaWQse1BhOiJjZW50ZXJZIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55ZX0sZnVuY3Rpb24oYSl7ZSYmdC5xKGEsaWQsImNlbnRlclkiKTt0LkwodGhpcyxhKTt0aGlzLnllPWE7dGhpcy5WYT0hMH0pO3QuZGVmaW5lUHJvcGVydHkoaWQse3JhZGl1c1g6InJhZGl1c1gifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm5nfSxmdW5jdGlvbihhKXtlJiZ0LnEoYSxpZCwicmFkaXVzWCIpOzA+YSYmdC5sYShhLCI+PSB6ZXJvIixpZCwicmFkaXVzWCIpO3QuTCh0aGlzLGEpO3RoaXMubmc9YTt0aGlzLlZhPSEwfSk7DQp0LmRlZmluZVByb3BlcnR5KGlkLHtyYWRpdXNZOiJyYWRpdXNZIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZ30sZnVuY3Rpb24oYSl7ZSYmdC5xKGEsaWQsInJhZGl1c1kiKTswPmEmJnQubGEoYSwiPj0gemVybyIsaWQsInJhZGl1c1kiKTt0LkwodGhpcyxhKTt0aGlzLm9nPWE7dGhpcy5WYT0hMH0pO3QuZGVmaW5lUHJvcGVydHkoaWQse25oOiJzdGFydEFuZ2xlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rYn0sZnVuY3Rpb24oYSl7dGhpcy5rYiE9PWEmJih0LkwodGhpcyxhKSxlJiZ0LnEoYSxpZCwic3RhcnRBbmdsZSIpLGElPTM2MCwwPmEmJihhKz0zNjApLHRoaXMua2I9YSx0aGlzLlZhPSEwKX0pOw0KdC5kZWZpbmVQcm9wZXJ0eShpZCx7aGk6InN3ZWVwQW5nbGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVifSxmdW5jdGlvbihhKXtlJiZ0LnEoYSxpZCwic3dlZXBBbmdsZSIpO3QuTCh0aGlzLGEpOzM2MDxhJiYoYT0zNjApOy0zNjA+YSYmKGE9LTM2MCk7dGhpcy51Yj1hO3RoaXMuVmE9ITB9KTt0LmRlZmluZVByb3BlcnR5KGlkLHtRdzoiaXNDbG9ja3dpc2VBcmMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnlufSxmdW5jdGlvbihhKXt0LkwodGhpcyxhKTt0aGlzLnluPWE7dGhpcy5WYT0hMH0pO3QuZGVmaW5lUHJvcGVydHkoaWQse1N3OiJpc0xhcmdlQXJjIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qb30sZnVuY3Rpb24oYSl7dC5MKHRoaXMsYSk7dGhpcy5qbz1hO3RoaXMuVmE9ITB9KTsNCnQuZGVmaW5lUHJvcGVydHkoaWQse0V4OiJ4QXhpc1JvdGF0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qZH0sZnVuY3Rpb24oYSl7ZSYmdC5xKGEsaWQsInhBeGlzUm90YXRpb24iKTthJT0zNjA7MD5hJiYoYSs9MzYwKTt0LkwodGhpcyxhKTt0aGlzLmpkPWE7dGhpcy5WYT0hMH0pO2Z1bmN0aW9uIGxkKCl7dGhpcy5VPW51bGw7dGhpcy5Eej0obmV3IHcoMCwwKSkuZnJlZXplKCk7dGhpcy5KeT0obmV3IHcoMCwwKSkuZnJlZXplKCk7dGhpcy5wdT10aGlzLml2PTA7dGhpcy5YdT0iIjt0aGlzLlV2PXRoaXMuRXU9ITE7dGhpcy5CdT10aGlzLnJ1PTA7dGhpcy5waj10aGlzLk11PSExO3RoaXMuTXE9bnVsbDt0aGlzLlN2PTA7dGhpcy5wZz10aGlzLlF2PW51bGx9dC5nYSgiSW5wdXRFdmVudCIsbGQpOw0KbGQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgbGQ7YS5VPXRoaXMuVTthLkR6LmFzc2lnbih0aGlzLktlKTthLkp5LmFzc2lnbih0aGlzLmVhKTthLml2PXRoaXMuaXY7YS5wdT10aGlzLnB1O2EuWHU9dGhpcy5YdTthLkV1PXRoaXMuRXU7YS5Vdj10aGlzLlV2O2EucnU9dGhpcy5ydTthLkJ1PXRoaXMuQnU7YS5NdT10aGlzLk11O2EucGo9dGhpcy5wajthLk1xPXRoaXMuTXE7YS5Tdj10aGlzLlN2O2EuUXY9dGhpcy5RdjthLnBnPXRoaXMucGc7cmV0dXJuIGF9Ow0KbGQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9Il4iO3RoaXMuJGMmJihhKz0iTToiK3RoaXMuJGMpO3RoaXMuYnV0dG9uJiYoYSs9IkI6Iit0aGlzLmJ1dHRvbik7dGhpcy5rZXkmJihhKz0iSzoiK3RoaXMua2V5KTt0aGlzLkFlJiYoYSs9IkM6Iit0aGlzLkFlKTt0aGlzLllqJiYoYSs9IkQ6Iit0aGlzLllqKTt0aGlzLkVlJiYoYSs9ImgiKTt0aGlzLmJ1YmJsZXMmJihhKz0iYiIpO251bGwhPT10aGlzLmVhJiYoYSs9IkAiK3RoaXMuZWEudG9TdHJpbmcoKSk7cmV0dXJuIGF9O3QuZyhsZCwiZGlhZ3JhbSIsbGQucHJvdG90eXBlLmgpO3QuZGVmaW5lUHJvcGVydHkobGQse2g6ImRpYWdyYW0ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlV9LGZ1bmN0aW9uKGEpe3RoaXMuVT1hfSk7dC5nKGxkLCJ2aWV3UG9pbnQiLGxkLnByb3RvdHlwZS5LZSk7DQp0LmRlZmluZVByb3BlcnR5KGxkLHtLZToidmlld1BvaW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Een0sZnVuY3Rpb24oYSl7dC5sKGEsdyxsZCwidmlld1BvaW50Iik7dGhpcy5Eei5hc3NpZ24oYSl9KTt0LmcobGQsImRvY3VtZW50UG9pbnQiLGxkLnByb3RvdHlwZS5lYSk7dC5kZWZpbmVQcm9wZXJ0eShsZCx7ZWE6ImRvY3VtZW50UG9pbnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkp5fSxmdW5jdGlvbihhKXt0LmwoYSx3LGxkLCJkb2N1bWVudFBvaW50Iik7dGhpcy5KeS5hc3NpZ24oYSl9KTt0LmcobGQsIm1vZGlmaWVycyIsbGQucHJvdG90eXBlLiRjKTt0LmRlZmluZVByb3BlcnR5KGxkLHskYzoibW9kaWZpZXJzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdn0sZnVuY3Rpb24oYSl7dGhpcy5pdj1hfSk7dC5nKGxkLCJidXR0b24iLGxkLnByb3RvdHlwZS5idXR0b24pOw0KdC5kZWZpbmVQcm9wZXJ0eShsZCx7YnV0dG9uOiJidXR0b24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1fSxmdW5jdGlvbihhKXt0aGlzLnB1PWF9KTt0LmcobGQsImtleSIsbGQucHJvdG90eXBlLmtleSk7dC5kZWZpbmVQcm9wZXJ0eShsZCx7a2V5OiJrZXkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlh1fSxmdW5jdGlvbihhKXt0aGlzLlh1PWF9KTt0LmcobGQsImRvd24iLGxkLnByb3RvdHlwZS4kaik7dC5kZWZpbmVQcm9wZXJ0eShsZCx7JGo6ImRvd24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkV1fSxmdW5jdGlvbihhKXt0aGlzLkV1PWF9KTt0LmcobGQsInVwIixsZC5wcm90b3R5cGUubWopO3QuZGVmaW5lUHJvcGVydHkobGQse21qOiJ1cCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVXZ9LGZ1bmN0aW9uKGEpe3RoaXMuVXY9YX0pO3QuZyhsZCwiY2xpY2tDb3VudCIsbGQucHJvdG90eXBlLkFlKTsNCnQuZGVmaW5lUHJvcGVydHkobGQse0FlOiJjbGlja0NvdW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ydX0sZnVuY3Rpb24oYSl7dGhpcy5ydT1hfSk7dC5nKGxkLCJkZWx0YSIsbGQucHJvdG90eXBlLllqKTt0LmRlZmluZVByb3BlcnR5KGxkLHtZajoiZGVsdGEifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkJ1fSxmdW5jdGlvbihhKXt0aGlzLkJ1PWF9KTt0LmcobGQsImhhbmRsZWQiLGxkLnByb3RvdHlwZS5FZSk7dC5kZWZpbmVQcm9wZXJ0eShsZCx7RWU6ImhhbmRsZWQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk11fSxmdW5jdGlvbihhKXt0aGlzLk11PWF9KTt0LmcobGQsImJ1YmJsZXMiLGxkLnByb3RvdHlwZS5idWJibGVzKTt0LmRlZmluZVByb3BlcnR5KGxkLHtidWJibGVzOiJidWJibGVzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wan0sZnVuY3Rpb24oYSl7dGhpcy5waj1hfSk7dC5nKGxkLCJldmVudCIsbGQucHJvdG90eXBlLmV2ZW50KTsNCnQuZGVmaW5lUHJvcGVydHkobGQse2V2ZW50OiJldmVudCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTXF9LGZ1bmN0aW9uKGEpe3RoaXMuTXE9YX0pO3QuQShsZCx7VXc6ImlzVG91Y2hFdmVudCJ9LGZ1bmN0aW9uKCl7dmFyIGE9d2luZG93LlRvdWNoRXZlbnQ7cmV0dXJuIGEmJnRoaXMuZXZlbnQgaW5zdGFuY2VvZiBhfSk7dC5nKGxkLCJ0aW1lc3RhbXAiLGxkLnByb3RvdHlwZS50aW1lc3RhbXApO3QuZGVmaW5lUHJvcGVydHkobGQse3RpbWVzdGFtcDoidGltZXN0YW1wIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Tdn0sZnVuY3Rpb24oYSl7dGhpcy5Tdj1hfSk7dC5nKGxkLCJ0YXJnZXREaWFncmFtIixsZC5wcm90b3R5cGUub2gpO3QuZGVmaW5lUHJvcGVydHkobGQse29oOiJ0YXJnZXREaWFncmFtIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Rdn0sZnVuY3Rpb24oYSl7dGhpcy5Rdj1hfSk7dC5nKGxkLCJ0YXJnZXRPYmplY3QiLGxkLnByb3RvdHlwZS5jZSk7DQp0LmRlZmluZVByb3BlcnR5KGxkLHtjZToidGFyZ2V0T2JqZWN0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wZ30sZnVuY3Rpb24oYSl7dGhpcy5wZz1hfSk7dC5nKGxkLCJjb250cm9sIixsZC5wcm90b3R5cGUuY29udHJvbCk7dC5kZWZpbmVQcm9wZXJ0eShsZCx7Y29udHJvbDoiY29udHJvbCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIDAhPT0odGhpcy4kYyYxKX0sZnVuY3Rpb24oYSl7dGhpcy4kYz1hP3RoaXMuJGN8MTp0aGlzLiRjJi0yfSk7dC5nKGxkLCJzaGlmdCIsbGQucHJvdG90eXBlLnNoaWZ0KTt0LmRlZmluZVByb3BlcnR5KGxkLHtzaGlmdDoic2hpZnQifSxmdW5jdGlvbigpe3JldHVybiAwIT09KHRoaXMuJGMmNCl9LGZ1bmN0aW9uKGEpe3RoaXMuJGM9YT90aGlzLiRjfDQ6dGhpcy4kYyYtNX0pO3QuZyhsZCwiYWx0IixsZC5wcm90b3R5cGUuYWx0KTsNCnQuZGVmaW5lUHJvcGVydHkobGQse2FsdDoiYWx0In0sZnVuY3Rpb24oKXtyZXR1cm4gMCE9PSh0aGlzLiRjJjIpfSxmdW5jdGlvbihhKXt0aGlzLiRjPWE/dGhpcy4kY3wyOnRoaXMuJGMmLTN9KTt0LmcobGQsIm1ldGEiLGxkLnByb3RvdHlwZS5CcCk7dC5kZWZpbmVQcm9wZXJ0eShsZCx7QnA6Im1ldGEifSxmdW5jdGlvbigpe3JldHVybiAwIT09KHRoaXMuJGMmOCl9LGZ1bmN0aW9uKGEpe3RoaXMuJGM9YT90aGlzLiRjfDg6dGhpcy4kYyYtOX0pO3QuZyhsZCwibGVmdCIsbGQucHJvdG90eXBlLmxlZnQpO3QuZGVmaW5lUHJvcGVydHkobGQse2xlZnQ6ImxlZnQifSxmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5idXR0b259LGZ1bmN0aW9uKGEpe3RoaXMuYnV0dG9uPWE/MDoyfSk7dC5nKGxkLCJtaWRkbGUiLGxkLnByb3RvdHlwZS5xSik7DQp0LmRlZmluZVByb3BlcnR5KGxkLHtxSjoibWlkZGxlIn0sZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMuYnV0dG9ufSxmdW5jdGlvbihhKXt0aGlzLmJ1dHRvbj1hPzE6MH0pO3QuZyhsZCwicmlnaHQiLGxkLnByb3RvdHlwZS5yaWdodCk7dC5kZWZpbmVQcm9wZXJ0eShsZCx7cmlnaHQ6InJpZ2h0In0sZnVuY3Rpb24oKXtyZXR1cm4gMj09PXRoaXMuYnV0dG9ufSxmdW5jdGlvbihhKXt0aGlzLmJ1dHRvbj1hPzI6MH0pO2Z1bmN0aW9uIHJkKCl7dGhpcy5VPW51bGw7dGhpcy5ZYj0iIjt0aGlzLnd2PXRoaXMuTXY9bnVsbDt0aGlzLnF1PSExfXQuZ2EoIkRpYWdyYW1FdmVudCIscmQpO3JkLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHJkO2EuVT10aGlzLlU7YS5ZYj10aGlzLlliO2EuTXY9dGhpcy5NdjthLnd2PXRoaXMud3Y7YS5xdT10aGlzLnF1O3JldHVybiBhfTsNCnJkLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhPSIqIit0aGlzLm5hbWU7dGhpcy5jYW5jZWwmJihhKz0ieCIpO251bGwhPT10aGlzLkJ4JiYoYSs9IjoiK3RoaXMuQngudG9TdHJpbmcoKSk7bnVsbCE9PXRoaXMua3gmJihhKz0iKCIrdGhpcy5reC50b1N0cmluZygpKyIpIik7cmV0dXJuIGF9O3QuZyhyZCwiZGlhZ3JhbSIscmQucHJvdG90eXBlLmgpO3QuZGVmaW5lUHJvcGVydHkocmQse2g6ImRpYWdyYW0ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlV9LGZ1bmN0aW9uKGEpe3RoaXMuVT1hfSk7dC5nKHJkLCJuYW1lIixyZC5wcm90b3R5cGUubmFtZSk7dC5kZWZpbmVQcm9wZXJ0eShyZCx7bmFtZToibmFtZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWWJ9LGZ1bmN0aW9uKGEpe3RoaXMuWWI9YX0pO3QuZyhyZCwic3ViamVjdCIscmQucHJvdG90eXBlLkJ4KTsNCnQuZGVmaW5lUHJvcGVydHkocmQse0J4OiJzdWJqZWN0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Ndn0sZnVuY3Rpb24oYSl7dGhpcy5Ndj1hfSk7dC5nKHJkLCJwYXJhbWV0ZXIiLHJkLnByb3RvdHlwZS5reCk7dC5kZWZpbmVQcm9wZXJ0eShyZCx7a3g6InBhcmFtZXRlciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3Z9LGZ1bmN0aW9uKGEpe3RoaXMud3Y9YX0pO3QuZyhyZCwiY2FuY2VsIixyZC5wcm90b3R5cGUuY2FuY2VsKTt0LmRlZmluZVByb3BlcnR5KHJkLHtjYW5jZWw6ImNhbmNlbCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXV9LGZ1bmN0aW9uKGEpe3RoaXMucXU9YX0pO2Z1bmN0aW9uIHRkKCl7dGhpcy5jbGVhcigpfXQuZ2EoIkNoYW5nZWRFdmVudCIsdGQpO3ZhciB1ZDt0ZC5UcmFuc2FjdGlvbj11ZD10LncodGQsIlRyYW5zYWN0aW9uIiwtMSk7dmFyIHZkO3RkLlByb3BlcnR5PXZkPXQudyh0ZCwiUHJvcGVydHkiLDApO3ZhciB3ZDsNCnRkLkluc2VydD13ZD10LncodGQsIkluc2VydCIsMSk7dmFyIHhkO3RkLlJlbW92ZT14ZD10LncodGQsIlJlbW92ZSIsMik7dGQucHJvdG90eXBlLmNsZWFyPXRkLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc3E9dmQ7dGhpcy5tbT10aGlzLmh2PSIiO3RoaXMubHY9dGhpcy5tdj10aGlzLnN2PXRoaXMudG89dGhpcy5ydj10aGlzLlU9dGhpcy5rZT1udWxsfTsNCnRkLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHRkO2Eua2U9dGhpcy5rZTthLlU9dGhpcy5VO2Euc3E9dGhpcy5zcTthLmh2PXRoaXMuaHY7YS5tbT10aGlzLm1tO2EucnY9dGhpcy5ydjt2YXIgYj10aGlzLnRvO2EudG89dC5yYihiKSYmImZ1bmN0aW9uIj09PXR5cGVvZiBiLlo/Yi5aKCk6YjtiPXRoaXMuc3Y7YS5zdj10LnJiKGIpJiYiZnVuY3Rpb24iPT09dHlwZW9mIGIuWj9iLlooKTpiO2I9dGhpcy5tdjthLm12PXQucmIoYikmJiJmdW5jdGlvbiI9PT10eXBlb2YgYi5aP2IuWigpOmI7Yj10aGlzLmx2O2EubHY9dC5yYihiKSYmImZ1bmN0aW9uIj09PXR5cGVvZiBiLlo/Yi5aKCk6YjtyZXR1cm4gYX07DQp0ZC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT0iIixhPXRoaXMudGQ9PT11ZD9hKyIqICI6dGhpcy50ZD09PXZkP2ErKG51bGwhPT10aGlzLmJhPyIhbSI6IiFkIik6YSsoKG51bGwhPT10aGlzLmJhPyIhbSI6IiFkIikrdGhpcy50ZCk7dGhpcy5wcm9wZXJ0eU5hbWUmJiJzdHJpbmciPT09dHlwZW9mIHRoaXMucHJvcGVydHlOYW1lJiYoYSs9IiAiK3RoaXMucHJvcGVydHlOYW1lKTt0aGlzLkFmJiZ0aGlzLkFmIT09dGhpcy5wcm9wZXJ0eU5hbWUmJihhKz0iICIrdGhpcy5BZik7YSs9IjogIjt0aGlzLnRkPT09dWQ/bnVsbCE9PXRoaXMub2xkVmFsdWUmJihhKz0iICIrdGhpcy5vbGRWYWx1ZSk6KG51bGwhPT10aGlzLm9iamVjdCYmKGErPXlkKHRoaXMub2JqZWN0KSksbnVsbCE9PXRoaXMub2xkVmFsdWUmJihhKz0iICBvbGQ6ICIreWQodGhpcy5vbGRWYWx1ZSkpLG51bGwhPT10aGlzLllmJiYoYSs9IiAiK3RoaXMuWWYpLG51bGwhPT10aGlzLm5ld1ZhbHVlJiYNCihhKz0iICBuZXc6ICIreWQodGhpcy5uZXdWYWx1ZSkpLG51bGwhPT10aGlzLldmJiYoYSs9IiAiK3RoaXMuV2YpKTtyZXR1cm4gYX07dGQucHJvdG90eXBlLmdldFZhbHVlPXRkLnByb3RvdHlwZS56YT1mdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLm9sZFZhbHVlOnRoaXMubmV3VmFsdWV9O3RkLnByb3RvdHlwZS5nZXRQYXJhbT1mdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLllmOnRoaXMuV2Z9O3RkLnByb3RvdHlwZS5jYW5VbmRvPXRkLnByb3RvdHlwZS5jYW5VbmRvPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmJhfHxudWxsIT09dGhpcy5oPyEwOiExfTt0ZC5wcm90b3R5cGUudW5kbz10ZC5wcm90b3R5cGUudW5kbz1mdW5jdGlvbigpe3RoaXMuY2FuVW5kbygpJiYobnVsbCE9PXRoaXMuYmE/dGhpcy5iYS5jaGFuZ2VTdGF0ZSh0aGlzLCEwKTpudWxsIT09dGhpcy5oJiZ0aGlzLmguY2hhbmdlU3RhdGUodGhpcywhMCkpfTsNCnRkLnByb3RvdHlwZS5jYW5SZWRvPXRkLnByb3RvdHlwZS5jYW5SZWRvPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmJhfHxudWxsIT09dGhpcy5oPyEwOiExfTt0ZC5wcm90b3R5cGUucmVkbz10ZC5wcm90b3R5cGUucmVkbz1mdW5jdGlvbigpe3RoaXMuY2FuUmVkbygpJiYobnVsbCE9PXRoaXMuYmE/dGhpcy5iYS5jaGFuZ2VTdGF0ZSh0aGlzLCExKTpudWxsIT09dGhpcy5oJiZ0aGlzLmguY2hhbmdlU3RhdGUodGhpcywhMSkpfTt0LmcodGQsIm1vZGVsIix0ZC5wcm90b3R5cGUuYmEpO3QuZGVmaW5lUHJvcGVydHkodGQse2JhOiJtb2RlbCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V9LGZ1bmN0aW9uKGEpe3RoaXMua2U9YX0pO3QuZyh0ZCwiZGlhZ3JhbSIsdGQucHJvdG90eXBlLmgpO3QuZGVmaW5lUHJvcGVydHkodGQse2g6ImRpYWdyYW0ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlV9LGZ1bmN0aW9uKGEpe3RoaXMuVT1hfSk7dC5nKHRkLCJjaGFuZ2UiLHRkLnByb3RvdHlwZS50ZCk7DQp0LmRlZmluZVByb3BlcnR5KHRkLHt0ZDoiY2hhbmdlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zcX0sZnVuY3Rpb24oYSl7ZSYmdC5BYShhLHRkLHRkLCJjaGFuZ2UiKTt0aGlzLnNxPWF9KTt0LmcodGQsIm1vZGVsQ2hhbmdlIix0ZC5wcm90b3R5cGUuQWYpO3QuZGVmaW5lUHJvcGVydHkodGQse0FmOiJtb2RlbENoYW5nZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHZ9LGZ1bmN0aW9uKGEpe2UmJnQuaShhLCJzdHJpbmciLHRkLCJtb2RlbENoYW5nZSIpO3RoaXMuaHY9YX0pO3QuZyh0ZCwicHJvcGVydHlOYW1lIix0ZC5wcm90b3R5cGUucHJvcGVydHlOYW1lKTt0LmRlZmluZVByb3BlcnR5KHRkLHtwcm9wZXJ0eU5hbWU6InByb3BlcnR5TmFtZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW19LGZ1bmN0aW9uKGEpe2UmJiJzdHJpbmciIT09dHlwZW9mIGEmJnQubChhLEZ1bmN0aW9uLHRkLCJwcm9wZXJ0eU5hbWUiKTt0aGlzLm1tPWF9KTsNCnQuZyh0ZCwiaXNUcmFuc2FjdGlvbkZpbmlzaGVkIix0ZC5wcm90b3R5cGUuYkopO3QuQSh0ZCx7Yko6ImlzVHJhbnNhY3Rpb25GaW5pc2hlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3E9PT11ZCYmKCJDb21taXR0ZWRUcmFuc2FjdGlvbiI9PT10aGlzLm1tfHwiRmluaXNoZWRVbmRvIj09PXRoaXMubW18fCJGaW5pc2hlZFJlZG8iPT09dGhpcy5tbSl9KTt0LmcodGQsIm9iamVjdCIsdGQucHJvdG90eXBlLm9iamVjdCk7dC5kZWZpbmVQcm9wZXJ0eSh0ZCx7b2JqZWN0OiJvYmplY3QifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnJ2fSxmdW5jdGlvbihhKXt0aGlzLnJ2PWF9KTt0LmcodGQsIm9sZFZhbHVlIix0ZC5wcm90b3R5cGUub2xkVmFsdWUpO3QuZGVmaW5lUHJvcGVydHkodGQse29sZFZhbHVlOiJvbGRWYWx1ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG99LGZ1bmN0aW9uKGEpe3RoaXMudG89YX0pO3QuZyh0ZCwib2xkUGFyYW0iLHRkLnByb3RvdHlwZS5ZZik7DQp0LmRlZmluZVByb3BlcnR5KHRkLHtZZjoib2xkUGFyYW0ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnN2fSxmdW5jdGlvbihhKXt0aGlzLnN2PWF9KTt0LmcodGQsIm5ld1ZhbHVlIix0ZC5wcm90b3R5cGUubmV3VmFsdWUpO3QuZGVmaW5lUHJvcGVydHkodGQse25ld1ZhbHVlOiJuZXdWYWx1ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXZ9LGZ1bmN0aW9uKGEpe3RoaXMubXY9YX0pO3QuZyh0ZCwibmV3UGFyYW0iLHRkLnByb3RvdHlwZS5XZik7dC5kZWZpbmVQcm9wZXJ0eSh0ZCx7V2Y6Im5ld1BhcmFtIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sdn0sZnVuY3Rpb24oYSl7dGhpcy5sdj1hfSk7DQpmdW5jdGlvbiBGKGEpezE8YXJndW1lbnRzLmxlbmd0aCYmdC5tKCJNb2RlbCBjb25zdHJ1Y3RvciBjYW4gb25seSB0YWtlIG9uZSBvcHRpb25hbCBhcmd1bWVudCwgdGhlIEFycmF5IG9mIG5vZGUgZGF0YS4iKTt0LkFjKHRoaXMpO3RoaXMuRHk9dGhpcy5ZYj0iIjt0aGlzLklrPXRoaXMuQUM9ITE7dGhpcy5pej17fTt0aGlzLk1lPVtdO3RoaXMuQmM9bmV3IGphKG51bGwsT2JqZWN0KTt0aGlzLmhtPSJrZXkiO3RoaXMudnU9dGhpcy5hdj1udWxsO3RoaXMudnk9dGhpcy53eT0hMTt0aGlzLkhyPSJjYXRlZ29yeSI7dGhpcy55aD1uZXcgamEobnVsbCxDKTt0aGlzLkNqPW51bGw7dGhpcy5MaT0hMTt0aGlzLkN6PW51bGw7dGhpcy5qYT1uZXcgemQ7dm9pZCAwIT09YSYmKHRoaXMuR2c9YSl9dC5nYSgiTW9kZWwiLEYpOw0KRi5wcm90b3R5cGUuY2xlYXI9Ri5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLlpkJiZ0LlhtKHRoaXMuTWUsIm5vZGVEYXRhQXJyYXkiLHRoaXMsITApO3RoaXMuTWU9W107dGhpcy5CYy5jbGVhcigpO3RoaXMueWguY2xlYXIoKTt0aGlzLmphLmNsZWFyKCl9O2FhPUYucHJvdG90eXBlOw0KYWEuWnQ9ZnVuY3Rpb24oKXt2YXIgYT0iIjsiIiE9PXRoaXMubmFtZSYmKGErPScsXG4gICJuYW1lIjogJyt0aGlzLnF1b3RlKHRoaXMubmFtZSkpOyIiIT09dGhpcy5MbSYmKGErPScsXG4gICJkYXRhRm9ybWF0IjogJyt0aGlzLnF1b3RlKHRoaXMuTG0pKTt0aGlzLmFiJiYoYSs9JyxcbiAgImlzUmVhZE9ubHkiOiAnK3RoaXMuYWIpOyJrZXkiIT09dGhpcy5paiYmInN0cmluZyI9PT10eXBlb2YgdGhpcy5paiYmKGErPScsXG4gICJub2RlS2V5UHJvcGVydHkiOiAnK3RoaXMucXVvdGUodGhpcy5paikpO3RoaXMucncmJihhKz0nLFxuICAiY29waWVzQXJyYXlzIjogdHJ1ZScpO3RoaXMucXcmJihhKz0nLFxuICAiY29waWVzQXJyYXlPYmplY3RzIjogdHJ1ZScpOyJjYXRlZ29yeSIhPT10aGlzLnFsJiYic3RyaW5nIj09PXR5cGVvZiB0aGlzLnFsJiYoYSs9JyxcbiAgIm5vZGVDYXRlZ29yeVByb3BlcnR5IjogJyt0aGlzLnF1b3RlKHRoaXMucWwpKTtyZXR1cm4gYX07DQphYS50Qj1mdW5jdGlvbigpe3ZhciBhPSIiLGI9dGhpcy5EQSxjPSExLGQ7Zm9yKGQgaW4gYilpZighQWQoZCxiW2RdKSl7Yz0hMDticmVha31jJiYoYT0nLFxuICAibW9kZWxEYXRhIjogJytCZCh0aGlzLGIpKTtyZXR1cm4gYSsnLFxuICAibm9kZURhdGFBcnJheSI6ICcrQ2QodGhpcyx0aGlzLkdnLCEwKX07YWEuR3Q9ZnVuY3Rpb24oYSl7YS5uYW1lJiYodGhpcy5uYW1lPWEubmFtZSk7YS5kYXRhRm9ybWF0JiYodGhpcy5MbT1hLmRhdGFGb3JtYXQpO2EuaXNSZWFkT25seSYmKHRoaXMuYWI9YS5pc1JlYWRPbmx5KTthLm5vZGVLZXlQcm9wZXJ0eSYmKHRoaXMuaWo9YS5ub2RlS2V5UHJvcGVydHkpO2EuY29waWVzQXJyYXlzJiYodGhpcy5ydz1hLmNvcGllc0FycmF5cyk7YS5jb3BpZXNBcnJheU9iamVjdHMmJih0aGlzLnF3PWEuY29waWVzQXJyYXlPYmplY3RzKTthLm5vZGVDYXRlZ29yeVByb3BlcnR5JiYodGhpcy5xbD1hLm5vZGVDYXRlZ29yeVByb3BlcnR5KX07DQphYS5SQT1mdW5jdGlvbihhKXt2YXIgYj1hLm1vZGVsRGF0YTtiJiYodGhpcy5JdChiKSx0aGlzLkRBPWIpO2lmKGE9YS5ub2RlRGF0YUFycmF5KXRoaXMuSXQoYSksdGhpcy5HZz1hfTthYS50b1N0cmluZz1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT0wKTtpZigxPGEpcmV0dXJuIHRoaXMua0IoKTt2YXIgYj0oIiIhPT10aGlzLm5hbWU/dGhpcy5uYW1lOiIiKSsiIE1vZGVsIjtpZigwPGEpe2IrPSJcbiBub2RlIGRhdGE6IjthPXRoaXMuR2c7dmFyIGM9dC52YihhKSxkO2ZvcihkPTA7ZDxjO2QrKyl2YXIgZj10Lm1iKGEsZCksYj1iKygiICIrdGhpcy5IYihmKSsiOiIreWQoZikpfXJldHVybiBifTsNCkYucHJvdG90eXBlLnRvSnNvbj1GLnByb3RvdHlwZS50b0pTT049Ri5wcm90b3R5cGUua0I9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcy5jb25zdHJ1Y3Rvcj09PUY/ImdvLk1vZGVsIjp0aGlzLmNvbnN0cnVjdG9yPT09UD8iZ28uR3JhcGhMaW5rc01vZGVsIjp0aGlzLmNvbnN0cnVjdG9yPT09S2Q/ImdvLlRyZWVNb2RlbCI6dC54Zyh0aGlzKSk7cmV0dXJuJ3sgImNsYXNzIjogJyt0aGlzLnF1b3RlKGEpK3RoaXMuWnQoKSt0aGlzLnRCKCkrIn0ifTsNCkYuZnJvbUpzb249Ri5mcm9tSlNPTj1mdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPW51bGwpO2ImJnQubChiLEYsRiwiZnJvbUpzb246bW9kZWwiKTt2YXIgYz1udWxsO2lmKCJzdHJpbmciPT09dHlwZW9mIGEpaWYod2luZG93JiZ3aW5kb3cuSlNPTiYmd2luZG93LkpTT04ucGFyc2UpdHJ5e2M9d2luZG93LkpTT04ucGFyc2UoYSl9Y2F0Y2goZCl7ZSYmdC50cmFjZSgiSlNPTi5wYXJzZSBlcnJvcjogIitkLnRvU3RyaW5nKCkpfWVsc2UgdC50cmFjZSgiV0FSTklORzogbm8gSlNPTi5wYXJzZSBhdmFpbGFibGUiKTtlbHNlIm9iamVjdCI9PT10eXBlb2YgYT9jPWE6dC5tKCJVbmFibGUgdG8gY29uc3RydWN0IGEgTW9kZWwgZnJvbTogIithKTtpZihudWxsPT09Yil7dmFyIGY7Zj1udWxsO3ZhciBnPWNbImNsYXNzIl07aWYoInN0cmluZyI9PT10eXBlb2YgZyl0cnl7dmFyIGg9bnVsbDswPT09Zy5pbmRleE9mKCJnby4iKT8oZz1nLnN1YnN0cigzKSxoPWNhW2ddKTooaD1jYVtnXSl8fA0KKGg9d2luZG93W2ddKTsiZnVuY3Rpb24iPT09dHlwZW9mIGgmJihmPW5ldyBoKX1jYXRjaChrKXt9bnVsbD09PWZ8fGYgaW5zdGFuY2VvZiBGP2I9Zjp0Lm0oIlVuYWJsZSB0byBjb25zdHJ1Y3QgYSBNb2RlbCBvZiBkZWNsYXJlZCBjbGFzczogIitjWyJjbGFzcyJdKX1udWxsPT09YiYmKGI9bmV3IFApO2IuR3QoYyk7Yi5SQShjKTtyZXR1cm4gYn07DQpGLnByb3RvdHlwZS5yZXBsYWNlSnNvbk9iamVjdHM9Ri5wcm90b3R5cGUuSXQ9ZnVuY3Rpb24oYSl7aWYodC5pc0FycmF5KGEpKWZvcih2YXIgYj10LnZiKGEpLGM9MDtjPGI7YysrKXt2YXIgZD10Lm1iKGEsYyk7dC5yYihkKSYmdC5PRChhLGMsdGhpcy5JdChkKSl9ZWxzZSBpZih0LnJiKGEpKXtmb3IoYyBpbiBhKWlmKGQ9YVtjXSx0LnJiKGQpJiYoZD10aGlzLkl0KGQpLGFbY109ZCwicG9pbnRzIj09PWMmJkFycmF5LmlzQXJyYXkoZCkpKXtmb3IodmFyIGY9MD09PWQubGVuZ3RoJTIsZz0wO2c8ZC5sZW5ndGg7ZysrKWlmKCJudW1iZXIiIT09dHlwZW9mIGRbZ10pe2Y9ITE7YnJlYWt9aWYoZil7Zj1uZXcgQih3KTtmb3IoZz0wO2c8ZC5sZW5ndGgvMjtnKyspe3ZhciBoPW5ldyB3KGRbMipnXSxkWzIqZysxXSk7Zi5hZGQoaCl9Zi5mcmVlemUoKTthW2NdPWZ9fWlmKCJvYmplY3QiPT09dHlwZW9mIGEpe2M9YTtkPWFbImNsYXNzIl07aWYoIk5hTiI9PT1kKWM9TmFOO2Vsc2UgaWYoIkRhdGUiPT09DQpkKWM9bmV3IERhdGUoYS52YWx1ZSk7ZWxzZSBpZigiZ28uUG9pbnQiPT09ZCljPW5ldyB3KExkKGEueCksTGQoYS55KSk7ZWxzZSBpZigiZ28uU2l6ZSI9PT1kKWM9bmV3IGdhKExkKGEud2lkdGgpLExkKGEuaGVpZ2h0KSk7ZWxzZSBpZigiZ28uUmVjdCI9PT1kKWM9bmV3IHgoTGQoYS54KSxMZChhLnkpLExkKGEud2lkdGgpLExkKGEuaGVpZ2h0KSk7ZWxzZSBpZigiZ28uTWFyZ2luIj09PWQpYz1uZXcgYWIoTGQoYS50b3ApLExkKGEucmlnaHQpLExkKGEuYm90dG9tKSxMZChhLmxlZnQpKTtlbHNlIGlmKCJnby5TcG90Ij09PWQpYz0ic3RyaW5nIj09PXR5cGVvZiBhWyJlbnVtIl0/dmIoYVsiZW51bSJdKTpuZXcgSShMZChhLngpLExkKGEueSksTGQoYS5vZmZzZXRYKSxMZChhLm9mZnNldFkpKTtlbHNlIGlmKCJnby5CcnVzaCI9PT1kKXtpZihjPW5ldyBmYSxjLnR5cGU9dC5PbShmYSxhLnR5cGUpLGEuc3RhcnQgaW5zdGFuY2VvZiBJJiYoYy5zdGFydD1hLnN0YXJ0KSxhLmVuZCBpbnN0YW5jZW9mDQpJJiYoYy5lbmQ9YS5lbmQpLCJudW1iZXIiPT09dHlwZW9mIGEuc3RhcnRSYWRpdXMmJihjLlZwPUxkKGEuc3RhcnRSYWRpdXMpKSwibnVtYmVyIj09PXR5cGVvZiBhLmVuZFJhZGl1cyYmKGMuYXA9TGQoYS5lbmRSYWRpdXMpKSxhPWEuY29sb3JTdG9wcylmb3IoYiBpbiBhKWMuYWRkQ29sb3JTdG9wKHBhcnNlRmxvYXQoYiksYVtiXSl9ZWxzZSJnby5HZW9tZXRyeSI9PT1kJiYoYz0ic3RyaW5nIj09PXR5cGVvZiBhLnBhdGg/UmMoYS5wYXRoKTpuZXcgemMsYy50eXBlPXQuT20oemMsYS50eXBlKSwibnVtYmVyIj09PXR5cGVvZiBhLnN0YXJ0WCYmKGMucWE9TGQoYS5zdGFydFgpKSwibnVtYmVyIj09PXR5cGVvZiBhLnN0YXJ0WSYmKGMucmE9TGQoYS5zdGFydFkpKSwibnVtYmVyIj09PXR5cGVvZiBhLmVuZFgmJihjLkQ9TGQoYS5lbmRYKSksIm51bWJlciI9PT10eXBlb2YgYS5lbmRZJiYoYy5GPUxkKGEuZW5kWSkpLGEuc3BvdDEgaW5zdGFuY2VvZiBJJiYoYy5HPWEuc3BvdDEpLGEuc3BvdDIgaW5zdGFuY2VvZg0KSSYmKGMuSD1hLnNwb3QyKSk7YT1jfX1yZXR1cm4gYX07Ri5wcm90b3R5cGUucXVvdGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9YS5sZW5ndGgsZD0wO2Q8YztkKyspdmFyIGY9YVtkXSxiPSciJz09PWZ8fCJcXCI9PT1mP2IrKCJcXCIrZik6IlxiIj09PWY/YisiXFxiIjoiXGYiPT09Zj9iKyJcXGYiOiJcbiI9PT1mP2IrIlxcbiI6IlxyIj09PWY/YisiXFxyIjoiXHQiPT09Zj9iKyJcXHQiOmIrZjtyZXR1cm4nIicrYisnIid9Ow0KRi5wcm90b3R5cGUud3JpdGVKc29uVmFsdWU9Ri5wcm90b3R5cGUuJHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/InVuZGVmaW5lZCI6bnVsbD09PWE/Im51bGwiOiEwPT09YT8idHJ1ZSI6ITE9PT1hPyJmYWxzZSI6InN0cmluZyI9PT10eXBlb2YgYT90aGlzLnF1b3RlKGEpOiJudW1iZXIiPT09dHlwZW9mIGE/SW5maW5pdHk9PT1hPyI5ZTk5OTkiOi1JbmZpbml0eT09PWE/Ii05ZTk5OTkiOmlzTmFOKGEpPyd7ImNsYXNzIjoiTmFOIn0nOmEudG9TdHJpbmcoKTphIGluc3RhbmNlb2YgRGF0ZT8neyJjbGFzcyI6IkRhdGUiLCAidmFsdWUiOiInK2EudG9KU09OKCkrJyJ9JzphIGluc3RhbmNlb2YgTnVtYmVyP3RoaXMuJHQoYS52YWx1ZU9mKCkpOnQuaXNBcnJheShhKT9DZCh0aGlzLGEpOnQucmIoYSk/QmQodGhpcyxhKToiZnVuY3Rpb24iPT09dHlwZW9mIGE/Im51bGwiOmEudG9TdHJpbmcoKX07DQpmdW5jdGlvbiBDZChhLGIsYyl7dmFyIGQ9dC52YihiKSxmPSJbICI7YyYmMTxkJiYoZis9IlxuIik7Zm9yKHZhciBnPTA7ZzxkO2crKyl7dmFyIGg9dC5tYihiLGcpO3ZvaWQgMCE9PWgmJigwPGcmJihmKz0iLCIsYyYmKGYrPSJcbiIpKSxmKz1hLiR0KGgpKX1jJiYxPGQmJihmKz0iXG4iKTtyZXR1cm4gZisiIF0ifWZ1bmN0aW9uIEFkKGEsYil7cmV0dXJuIHZvaWQgMD09PWJ8fCJfX2dvaGFzaGlkIj09PWF8fCJfIj09PWFbMF18fCJmdW5jdGlvbiI9PT10eXBlb2YgYj8hMDohMX1mdW5jdGlvbiBNZChhKXtyZXR1cm4gaXNOYU4oYSk/Ik5hTiI6SW5maW5pdHk9PT1hPyI5ZTk5OTkiOi1JbmZpbml0eT09PWE/Ii05ZTk5OTkiOmF9DQpmdW5jdGlvbiBCZChhLGIpe3ZhciBjPWI7aWYoYyBpbnN0YW5jZW9mIHcpYj17ImNsYXNzIjoiZ28uUG9pbnQiLHg6TWQoYy54KSx5Ok1kKGMueSl9O2Vsc2UgaWYoYyBpbnN0YW5jZW9mIGdhKWI9eyJjbGFzcyI6ImdvLlNpemUiLHdpZHRoOk1kKGMud2lkdGgpLGhlaWdodDpNZChjLmhlaWdodCl9O2Vsc2UgaWYoYyBpbnN0YW5jZW9mIHgpYj17ImNsYXNzIjoiZ28uUmVjdCIseDpNZChjLngpLHk6TWQoYy55KSx3aWR0aDpNZChjLndpZHRoKSxoZWlnaHQ6TWQoYy5oZWlnaHQpfTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBhYiliPXsiY2xhc3MiOiJnby5NYXJnaW4iLHRvcDpNZChjLnRvcCkscmlnaHQ6TWQoYy5yaWdodCksYm90dG9tOk1kKGMuYm90dG9tKSxsZWZ0Ok1kKGMubGVmdCl9O2Vsc2UgaWYoYyBpbnN0YW5jZW9mIEkpYj1jLnZkKCk/eyJjbGFzcyI6ImdvLlNwb3QiLHg6TWQoYy54KSx5Ok1kKGMueSksb2Zmc2V0WDpNZChjLm9mZnNldFgpLG9mZnNldFk6TWQoYy5vZmZzZXRZKX06DQp7ImNsYXNzIjoiZ28uU3BvdCIsImVudW0iOmMudG9TdHJpbmcoKX07ZWxzZSBpZihjIGluc3RhbmNlb2YgZmEpe2I9eyJjbGFzcyI6ImdvLkJydXNoIix0eXBlOmMudHlwZS5uYW1lfTtpZihjLnR5cGU9PT1OZCliLmNvbG9yPWMuY29sb3I7ZWxzZSBpZihjLnR5cGU9PT1PZHx8Yy50eXBlPT09WmQpYi5zdGFydD1jLnN0YXJ0LGIuZW5kPWMuZW5kLGMudHlwZT09PVpkJiYoMCE9PWMuVnAmJihiLnN0YXJ0UmFkaXVzPU1kKGMuVnApKSxpc05hTihjLmFwKXx8KGIuZW5kUmFkaXVzPU1kKGMuYXApKSk7aWYobnVsbCE9PWMuVm8pe2Zvcih2YXIgZD17fSxjPWMuVm8uaztjLm5leHQoKTspZFtjLmtleS50b1N0cmluZygpXT1jLnZhbHVlO2IuY29sb3JTdG9wcz1kfX1lbHNlIGlmKGMgaW5zdGFuY2VvZiB6YyliPXsiY2xhc3MiOiJnby5HZW9tZXRyeSIsdHlwZTpjLnR5cGUubmFtZX0sMCE9PWMucWEmJihiLnN0YXJ0WD1NZChjLnFhKSksMCE9PWMucmEmJihiLnN0YXJ0WT1NZChjLnJhKSksDQowIT09Yy5EJiYoYi5lbmRYPU1kKGMuRCkpLDAhPT1jLkYmJihiLmVuZFk9TWQoYy5GKSksYy5HLk0oRWIpfHwoYi5zcG90MT1jLkcpLGMuSC5NKFBiKXx8KGIuc3BvdDI9Yy5IKSxjLnR5cGU9PT1BYyYmKGIucGF0aD1QYyhjKSk7ZWxzZSBpZihjIGluc3RhbmNlb2YgUXx8YyBpbnN0YW5jZW9mIHp8fGMgaW5zdGFuY2VvZiAkZHx8YyBpbnN0YW5jZW9mIEZ8fGMgaW5zdGFuY2VvZiBhZXx8YyBpbnN0YW5jZW9mIG9hfHxjIGluc3RhbmNlb2YgYmV8fGMgaW5zdGFuY2VvZiByYXx8YyBpbnN0YW5jZW9mIHpkfHxjIGluc3RhbmNlb2YgY2UpcmV0dXJuIHQudHJhY2UoIkVSUk9SOiB0cnlpbmcgdG8gY29udmVydCBhIEdyYXBoT2JqZWN0IG9yIERpYWdyYW0gb3IgTW9kZWwgb3IgVG9vbCBvciBMYXlvdXQgb3IgVW5kb01hbmFnZXIgaW50byBKU09OIHRleHQ6ICIrYy50b1N0cmluZygpKSwie30iO3ZhciBkPSJ7IixmPSEwLGc7Zm9yKGcgaW4gYilpZihjPXQuaGIoYixnKSwhQWQoZyxjKSlpZihmPw0KZj0hMTpkKz0iLCAiLGQrPSciJytnKyciOicsInBvaW50cyI9PT1nJiZjIGluc3RhbmNlb2YgQiYmYy5kYT09PXcpe2Zvcih2YXIgaD0iWyIsYz1jLms7Yy5uZXh0KCk7KXt2YXIgaz1jLnZhbHVlOzE8aC5sZW5ndGgmJihoKz0iLCIpO2grPWEuJHQoay54KTtoKz0iLCI7aCs9YS4kdChrLnkpfWgrPSJdIjtkKz1ofWVsc2UgZCs9YS4kdChjKTtyZXR1cm4gZCsifSJ9ZnVuY3Rpb24gTGQoYSl7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgYT9hOiJOYU4iPT09YT9OYU46IjllOTk5OSI9PT1hP0luZmluaXR5OiItOWU5OTk5Ij09PWE/LUluZmluaXR5OnBhcnNlRmxvYXQoYSl9dC5nKEYsIm5hbWUiLEYucHJvdG90eXBlLm5hbWUpO3QuZGVmaW5lUHJvcGVydHkoRix7bmFtZToibmFtZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWWJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuWWI7YiE9PWEmJih0LmkoYSwic3RyaW5nIixGLCJuYW1lIiksdGhpcy5ZYj1hLHRoaXMuaigibmFtZSIsYixhKSl9KTsNCnQuZyhGLCJkYXRhRm9ybWF0IixGLnByb3RvdHlwZS5MbSk7dC5kZWZpbmVQcm9wZXJ0eShGLHtMbToiZGF0YUZvcm1hdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRHl9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuRHk7YiE9PWEmJih0LmkoYSwic3RyaW5nIixGLCJkYXRhRm9ybWF0IiksdGhpcy5EeT1hLHRoaXMuaigiZGF0YUZvcm1hdCIsYixhKSl9KTt0LmcoRiwia25vY2tvdXRKUyIsRi5wcm90b3R5cGUuWmQpO3QuZGVmaW5lUHJvcGVydHkoRix7WmQ6Imtub2Nrb3V0SlMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkFDfSxmdW5jdGlvbihhKXt0aGlzLkFDPWE7dC56Y3x8KHQuemM9Im9iamVjdCI9PT10eXBlb2Ygd2luZG93LmtvJiYiZnVuY3Rpb24iPT09dHlwZW9mIHdpbmRvdy5rby5pc09ic2VydmFibGU/d2luZG93LmtvLmlzT2JzZXJ2YWJsZTpudWxsLGEmJm51bGw9PT10LnpjJiZ0LnRyYWNlKCJObyB2YWx1ZSBmb3Iga28uaXNPYnNlcnZhYmxlOiBpcyBLbm9ja291dEpTIGxpYnJhcnkgbm90IGxvYWRlZD8iKSl9KTsNCnQuZyhGLCJpc1JlYWRPbmx5IixGLnByb3RvdHlwZS5hYik7dC5kZWZpbmVQcm9wZXJ0eShGLHthYjoiaXNSZWFkT25seSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSWt9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuSWs7YiE9PWEmJih0LmkoYSwiYm9vbGVhbiIsRiwiaXNSZWFkT25seSIpLHRoaXMuSWs9YSx0aGlzLmooImlzUmVhZE9ubHkiLGIsYSkpfSk7dC5nKEYsIm1vZGVsRGF0YSIsRi5wcm90b3R5cGUuREEpO3QuZGVmaW5lUHJvcGVydHkoRix7REE6Im1vZGVsRGF0YSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXp9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaXo7YiE9PWEmJih0LmkoYSwib2JqZWN0IixGLCJtb2RlbERhdGEiKSx0aGlzLml6PWEsdGhpcy5qKCJtb2RlbERhdGEiLGIsYSkpfSk7DQpGLnByb3RvdHlwZS5hZGRDaGFuZ2VkTGlzdGVuZXI9Ri5wcm90b3R5cGUuSno9ZnVuY3Rpb24oYSl7dC5pKGEsImZ1bmN0aW9uIixGLCJhZGRDaGFuZ2VkTGlzdGVuZXI6bGlzdGVuZXIiKTtudWxsPT09dGhpcy5DaiYmKHRoaXMuQ2o9bmV3IEIoImZ1bmN0aW9uIikpO3RoaXMuQ2ouYWRkKGEpfTtGLnByb3RvdHlwZS5yZW1vdmVDaGFuZ2VkTGlzdGVuZXI9Ri5wcm90b3R5cGUuVkE9ZnVuY3Rpb24oYSl7dC5pKGEsImZ1bmN0aW9uIixGLCJyZW1vdmVDaGFuZ2VkTGlzdGVuZXI6bGlzdGVuZXIiKTtudWxsIT09dGhpcy5DaiYmKHRoaXMuQ2oucmVtb3ZlKGEpLDA9PT10aGlzLkNqLmNvdW50JiYodGhpcy5Daj1udWxsKSl9Ow0KRi5wcm90b3R5cGUuaHc9ZnVuY3Rpb24oYSl7dGhpcy5XYXx8dGhpcy5qYS5RRShhKTtpZihudWxsIT09dGhpcy5Dail7dmFyIGI9dGhpcy5DaixjPWIubGVuZ3RoO2lmKDE9PT1jKWI9Yi53YSgwKSxiKGEpO2Vsc2UgaWYoMCE9PWMpZm9yKHZhciBkPWIuSWUoKSxmPTA7ZjxjO2YrKyliPWRbZl0sYihhKX19O0YucHJvdG90eXBlLnJhaXNlQ2hhbmdlZEV2ZW50PUYucHJvdG90eXBlLkljPWZ1bmN0aW9uKGEsYixjLGQsZixnLGgpe2RlKHRoaXMsIiIsYSxiLGMsZCxmLGcsaCl9O0YucHJvdG90eXBlLnJhaXNlQ2hhbmdlZD1GLnByb3RvdHlwZS5qPWZ1bmN0aW9uKGEsYixjLGQsZil7ZGUodGhpcywiIix2ZCxhLHRoaXMsYixjLGQsZil9O0YucHJvdG90eXBlLnJhaXNlRGF0YUNoYW5nZWQ9Ri5wcm90b3R5cGUubXg9ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe2RlKHRoaXMsIiIsdmQsYixhLGMsZCxmLGcpfTsNCmZ1bmN0aW9uIGRlKGEsYixjLGQsZixnLGgsayxsKXt2b2lkIDA9PT1rJiYoaz1udWxsKTt2b2lkIDA9PT1sJiYobD1udWxsKTt2YXIgbT1uZXcgdGQ7bS5iYT1hO20udGQ9YzttLkFmPWI7bS5wcm9wZXJ0eU5hbWU9ZDttLm9iamVjdD1mO20ub2xkVmFsdWU9ZzttLllmPWs7bS5uZXdWYWx1ZT1oO20uV2Y9bDthLmh3KG0pfXQuZyhGLCJ1bmRvTWFuYWdlciIsRi5wcm90b3R5cGUuamEpO3QuZGVmaW5lUHJvcGVydHkoRix7amE6InVuZG9NYW5hZ2VyIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Den0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5DejtiIT09YSYmKHQubChhLHpkLEYsInVuZG9NYW5hZ2VyIiksbnVsbCE9PWImJmIuS0oodGhpcyksdGhpcy5Dej1hLG51bGwhPT1hJiZhLkZIKHRoaXMpKX0pO3QuZyhGLCJza2lwc1VuZG9NYW5hZ2VyIixGLnByb3RvdHlwZS5XYSk7DQp0LmRlZmluZVByb3BlcnR5KEYse1dhOiJza2lwc1VuZG9NYW5hZ2VyIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MaX0sZnVuY3Rpb24oYSl7dC5pKGEsImJvb2xlYW4iLEYsInNraXBzVW5kb01hbmFnZXIiKTt0aGlzLkxpPWF9KTsNCkYucHJvdG90eXBlLmNoYW5nZVN0YXRlPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9PWEmJmEuYmE9PT10aGlzKWlmKGEudGQ9PT12ZCl7dmFyIGM9YS5vYmplY3QsZD1hLnByb3BlcnR5TmFtZSxmPWEuemEoYik7dC5TYShjLGQsZil9ZWxzZSBhLnRkPT09d2Q/Im5vZGVEYXRhQXJyYXkiPT09YS5BZj8oYz1hLm5ld1ZhbHVlLHQucmIoYykmJihkPXRoaXMuSGIoYyksdm9pZCAwIT09ZCYmKGI/KHRoaXMuWmQmJnQueWYoYyx0aGlzLCEwKSx0LlVpKHRoaXMuTWUsYS5XZiksdGhpcy5CYy5yZW1vdmUoZCkpOih0aGlzLlpkJiZ0LnlmKGMsdGhpcywhMSksdC5UaSh0aGlzLk1lLGEuV2YsYyksdGhpcy5CYy5hZGQoZCxjKSkpKSk6IiI9PT1hLkFmPyhjPWEub2JqZWN0LCF0LmlzQXJyYXkoYykmJmEucHJvcGVydHlOYW1lJiYoYz10LmhiKGEub2JqZWN0LGEucHJvcGVydHlOYW1lKSksdC5pc0FycmF5KGMpJiYoZD1hLm5ld1ZhbHVlLGY9YS5XZixiP3QuVWkoYyxmKTp0LlRpKGMsZixkKSkpOg0KdC5tKCJ1bmtub3duIENoYW5nZWRFdmVudC5JbnNlcnQgb2JqZWN0OiAiK2EudG9TdHJpbmcoKSk6YS50ZD09PXhkPyJub2RlRGF0YUFycmF5Ij09PWEuQWY/KGM9YS5vbGRWYWx1ZSx0LnJiKGMpJiYoZD10aGlzLkhiKGMpLHZvaWQgMCE9PWQmJihiPyh0aGlzLlpkJiZ0LnlmKGMsdGhpcywhMSksdC5UaSh0aGlzLk1lLGEuWWYsYyksdGhpcy5CYy5hZGQoZCxjKSk6KHRoaXMuWmQmJnQueWYoYyx0aGlzLCEwKSx0LlVpKHRoaXMuTWUsYS5ZZiksdGhpcy5CYy5yZW1vdmUoZCkpKSkpOiIiPT09YS5BZj8oYz1hLm9iamVjdCwhdC5pc0FycmF5KGMpJiZhLnByb3BlcnR5TmFtZSYmKGM9dC5oYihhLm9iamVjdCxhLnByb3BlcnR5TmFtZSkpLHQuaXNBcnJheShjKSYmKGQ9YS5vbGRWYWx1ZSxmPWEuWWYsYj90LlRpKGMsZixkKTp0LlVpKGMsZikpKTp0Lm0oInVua25vd24gQ2hhbmdlZEV2ZW50LlJlbW92ZSBvYmplY3Q6ICIrYS50b1N0cmluZygpKTphLnRkIT09dWQmJnQubSgidW5rbm93biBDaGFuZ2VkRXZlbnQ6ICIrDQphLnRvU3RyaW5nKCkpfTtGLnByb3RvdHlwZS5zdGFydFRyYW5zYWN0aW9uPUYucHJvdG90eXBlLnNjPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmphLnNjKGEpfTtGLnByb3RvdHlwZS5jb21taXRUcmFuc2FjdGlvbj1GLnByb3RvdHlwZS5DZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5qYS5DZShhKX07Ri5wcm90b3R5cGUucm9sbGJhY2tUcmFuc2FjdGlvbj1GLnByb3RvdHlwZS5OcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmphLk5wKCl9O0YucHJvdG90eXBlLnVwZGF0ZVRhcmdldEJpbmRpbmdzPUYucHJvdG90eXBlLlFiPWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9IiIpO2RlKHRoaXMsIlNvdXJjZUNoYW5nZWQiLHVkLGIsYSxudWxsLG51bGwpfTt0LmcoRiwibm9kZUtleVByb3BlcnR5IixGLnByb3RvdHlwZS5paik7DQp0LmRlZmluZVByb3BlcnR5KEYse2lqOiJub2RlS2V5UHJvcGVydHkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmhtfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmhtO2IhPT1hJiYobmUoYSxGLCJub2RlS2V5UHJvcGVydHkiKSwwPHRoaXMuQmMuY291bnQmJnQubSgiQ2Fubm90IHNldCBNb2RlbC5ub2RlS2V5UHJvcGVydHkgd2hlbiB0aGVyZSBpcyBleGlzdGluZyBub2RlIGRhdGEiKSx0aGlzLmhtPWEsdGhpcy5qKCJub2RlS2V5UHJvcGVydHkiLGIsYSkpfSk7ZnVuY3Rpb24gbmUoYSxiLGMpeyJzdHJpbmciIT09dHlwZW9mIGEmJiJmdW5jdGlvbiIhPT10eXBlb2YgYSYmdC5iYyhhLCJzdHJpbmcgb3IgZnVuY3Rpb24iLGIsYyl9DQpGLnByb3RvdHlwZS5nZXRLZXlGb3JOb2RlRGF0YT1GLnByb3RvdHlwZS5IYj1mdW5jdGlvbihhKXtpZihudWxsIT09YSl7dmFyIGI9dGhpcy5obTtpZigiIiE9PWImJihiPXQuaGIoYSxiKSx2b2lkIDAhPT1iKSl7aWYob2UoYikpcmV0dXJuIGI7dC5tKCJLZXkgdmFsdWUgZm9yIG5vZGUgZGF0YSAiK2ErIiBpcyBub3QgYSBudW1iZXIgb3IgYSBzdHJpbmc6ICIrYil9fX07DQpGLnByb3RvdHlwZS5zZXRLZXlGb3JOb2RlRGF0YT1GLnByb3RvdHlwZS5jQj1mdW5jdGlvbihhLGIpe251bGw9PT1iJiYoYj12b2lkIDApO3ZvaWQgMD09PWJ8fG9lKGIpfHx0LmJjKGIsIm51bWJlciBvciBzdHJpbmciLEYsInNldEtleUZvck5vZGVEYXRhOmtleSIpO2lmKG51bGwhPT1hKXt2YXIgYz10aGlzLmhtO2lmKCIiIT09YylpZih0aGlzLm5lKGEpKXt2YXIgZD10LmhiKGEsYyk7ZCE9PWImJm51bGw9PT10aGlzLnVmKGIpJiYodC5TYShhLGMsYiksdGhpcy5CYy5yZW1vdmUoZCksdGhpcy5CYy5hZGQoYixhKSxkZSh0aGlzLCJub2RlS2V5Iix2ZCxjLGEsZCxiKSwic3RyaW5nIj09PXR5cGVvZiBjJiZ0aGlzLlFiKGEsYyksdGhpcy5IdChkLGIpKX1lbHNlIHQuU2EoYSxjLGIpfX07dC5nKEYsIm1ha2VVbmlxdWVLZXlGdW5jdGlvbiIsRi5wcm90b3R5cGUubUopOw0KdC5kZWZpbmVQcm9wZXJ0eShGLHttSjoibWFrZVVuaXF1ZUtleUZ1bmN0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hdn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hdjtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLEYsIm1ha2VVbmlxdWVLZXlGdW5jdGlvbiIpLHRoaXMuYXY9YSx0aGlzLmooIm1ha2VVbmlxdWVLZXlGdW5jdGlvbiIsYixhKSl9KTtmdW5jdGlvbiBvZShhKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBhfHwic3RyaW5nIj09PXR5cGVvZiBhfUYucHJvdG90eXBlLmNvbnRhaW5zTm9kZURhdGE9Ri5wcm90b3R5cGUubmU9ZnVuY3Rpb24oYSl7YT10aGlzLkhiKGEpO3JldHVybiB2b2lkIDA9PT1hPyExOnRoaXMuQmMuY29udGFpbnMoYSl9Ow0KRi5wcm90b3R5cGUuZmluZE5vZGVEYXRhRm9yS2V5PUYucHJvdG90eXBlLnVmPWZ1bmN0aW9uKGEpe251bGw9PT1hJiZ0Lm0oIk1vZGVsLmZpbmROb2RlRGF0YUZvcktleTprZXkgbXVzdCBub3QgYmUgbnVsbCIpO3JldHVybiB2b2lkIDAhPT1hJiZvZShhKT90aGlzLkJjLnphKGEpOm51bGx9O3QuZyhGLCJub2RlRGF0YUFycmF5IixGLnByb3RvdHlwZS5HZyk7DQp0LmRlZmluZVByb3BlcnR5KEYse0dnOiJub2RlRGF0YUFycmF5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NZX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5NZTtpZihiIT09YSl7dC5ScyhhLEYsIm5vZGVEYXRhQXJyYXkiKTt0aGlzLlpkJiZ0LnpjJiYobnVsbCE9PWImJnQuWG0oYiwibm9kZURhdGFBcnJheSIsdGhpcywhMCksYT10LlhtKGEsIm5vZGVEYXRhQXJyYXkiLHRoaXMsITEpKTt0aGlzLkJjLmNsZWFyKCk7dGhpcy5vQigpO2Zvcih2YXIgYz10LnZiKGEpLGQ9MDtkPGM7ZCsrKXt2YXIgZj10Lm1iKGEsZCk7aWYoIXQucmIoZikpe3QubSgiTW9kZWwubm9kZURhdGFBcnJheSBtdXN0IG9ubHkgY29udGFpbiBPYmplY3RzLCBub3Q6ICIrZik7cmV0dXJufXQuaXQoZil9dGhpcy5NZT1hO2Zvcih2YXIgZz1uZXcgQihPYmplY3QpLGQ9MDtkPGM7ZCsrKXt2YXIgZj10Lm1iKGEsZCksaD10aGlzLkhiKGYpO3ZvaWQgMD09PWg/Zy5hZGQoZik6bnVsbCE9PXRoaXMuQmMuemEoaCk/DQpnLmFkZChmKTp0aGlzLkJjLmFkZChoLGYpfWZvcihkPWcuaztkLm5leHQoKTspZj1kLnZhbHVlLHRoaXMudEYoZiksZz10aGlzLkhiKGYpLHRoaXMuQmMuYWRkKGcsZik7ZGUodGhpcywibm9kZURhdGFBcnJheSIsdmQsIm5vZGVEYXRhQXJyYXkiLHRoaXMsYixhKTtmb3IoZD0wO2Q8YztkKyspZj10Lm1iKGEsZCksdGhpcy5NcChmKSx0aGlzLkxwKGYpO3RoaXMuV0QoKTt0LlpJKGEpfHwodGhpcy5hYj0hMCl9fSk7DQpGLnByb3RvdHlwZS5tYWtlTm9kZURhdGFLZXlVbmlxdWU9Ri5wcm90b3R5cGUudEY9ZnVuY3Rpb24oYSl7aWYobnVsbCE9PWEpe3ZhciBiPXRoaXMuaG07aWYoIiIhPT1iKXt2YXIgYz10aGlzLkhiKGEpO2lmKHZvaWQgMD09PWN8fHRoaXMuQmMuY29udGFpbnMoYykpe3ZhciBkPXRoaXMuYXY7aWYobnVsbCE9PWQmJihjPWQodGhpcyxhKSx2b2lkIDAhPT1jJiZudWxsIT09YyYmIXRoaXMuQmMuY29udGFpbnMoYykpKXt0LlNhKGEsYixjKTtyZXR1cm59aWYoInN0cmluZyI9PT10eXBlb2YgYyl7Zm9yKGQ9Mjt0aGlzLkJjLmNvbnRhaW5zKGMrZCk7KWQrKzt0LlNhKGEsYixjK2QpfWVsc2UgaWYodm9pZCAwPT09Y3x8Im51bWJlciI9PT10eXBlb2YgYyl7Zm9yKGQ9LXRoaXMuQmMuY291bnQtMTt0aGlzLkJjLmNvbnRhaW5zKGQpOylkLS07dC5TYShhLGIsZCl9ZWxzZSB0Lm0oIk1vZGVsLmdldEtleUZvck5vZGVEYXRhIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgc3RyaW5nIG9yIGEgbnVtYmVyOiAiKw0KYyl9fX19O0YucHJvdG90eXBlLmFkZE5vZGVEYXRhPUYucHJvdG90eXBlLnltPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT1hKXt0aGlzLlpkJiZ0LnlmKGEsdGhpcywhMSk7dC5pdChhKTt2YXIgYj10aGlzLkhiKGEpO2lmKHZvaWQgMD09PWJ8fHRoaXMuQmMuemEoYikhPT1hKXRoaXMudEYoYSksYj10aGlzLkhiKGEpLHRoaXMuQmMuYWRkKGIsYSksYj10LnZiKHRoaXMuTWUpLHQuVGkodGhpcy5NZSxiLGEpLGRlKHRoaXMsIm5vZGVEYXRhQXJyYXkiLHdkLCJub2RlRGF0YUFycmF5Iix0aGlzLG51bGwsYSxudWxsLGIpLHRoaXMuTXAoYSksdGhpcy5McChhKX19O0YucHJvdG90eXBlLmFkZE5vZGVEYXRhQ29sbGVjdGlvbj1mdW5jdGlvbihhKXtpZih0LmlzQXJyYXkoYSkpZm9yKHZhciBiPXQudmIoYSksYz0wO2M8YjtjKyspdGhpcy55bSh0Lm1iKGEsYykpO2Vsc2UgZm9yKGE9YS5rO2EubmV4dCgpOyl0aGlzLnltKGEudmFsdWUpfTsNCkYucHJvdG90eXBlLnJlbW92ZU5vZGVEYXRhPUYucHJvdG90eXBlLm54PWZ1bmN0aW9uKGEpe2lmKG51bGwhPT1hKXt2YXIgYj10aGlzLkhiKGEpO3ZvaWQgMCE9PWImJnRoaXMuQmMuY29udGFpbnMoYikmJih0aGlzLlpkJiZ0LnlmKGEsdGhpcywhMCksdGhpcy5CYy5yZW1vdmUoYiksYj10LlF6KHRoaXMuTWUsYSksMD5ifHwodC5VaSh0aGlzLk1lLGIpLGRlKHRoaXMsIm5vZGVEYXRhQXJyYXkiLHhkLCJub2RlRGF0YUFycmF5Iix0aGlzLGEsbnVsbCxiLG51bGwpLHRoaXMuWHQoYSkpKX19O0YucHJvdG90eXBlLnJlbW92ZU5vZGVEYXRhQ29sbGVjdGlvbj1mdW5jdGlvbihhKXtpZih0LmlzQXJyYXkoYSkpZm9yKHZhciBiPXQudmIoYSksYz0wO2M8YjtjKyspdGhpcy5ueCh0Lm1iKGEsYykpO2Vsc2UgZm9yKGE9YS5rO2EubmV4dCgpOyl0aGlzLm54KGEudmFsdWUpfTthYT1GLnByb3RvdHlwZTsNCmFhLkh0PWZ1bmN0aW9uKGEsYil7dmFyIGM9cGUodGhpcyxhKTtjIGluc3RhbmNlb2YgQyYmdGhpcy55aC5hZGQoYixjKX07YWEub0I9ZnVuY3Rpb24oKXt9O2FhLk1wPWZ1bmN0aW9uKCl7fTthYS5McD1mdW5jdGlvbigpe307YWEuWHQ9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIHFlKGEsYixjKXtpZih2b2lkIDAhPT1iKXt2YXIgZD1hLnloLnphKGIpO251bGw9PT1kJiYoZD1uZXcgQyxhLnloLmFkZChiLGQpKTtkLmFkZChjKX19ZnVuY3Rpb24gcmUoYSxiLGMpe2lmKHZvaWQgMCE9PWIpe3ZhciBkPWEueWguemEoYik7ZCBpbnN0YW5jZW9mIEMmJih2b2lkIDA9PT1jfHxudWxsPT09Yz9hLnloLnJlbW92ZShiKTooZC5yZW1vdmUoYyksMD09PWQuY291bnQmJmEueWgucmVtb3ZlKGIpKSl9fWZ1bmN0aW9uIHBlKGEsYil7aWYodm9pZCAwPT09YilyZXR1cm4gbnVsbDt2YXIgYz1hLnloLnphKGIpO3JldHVybiBjIGluc3RhbmNlb2YgQz9jOm51bGx9DQpGLnByb3RvdHlwZS5jbGVhclVucmVzb2x2ZWRSZWZlcmVuY2VzPUYucHJvdG90eXBlLldEPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWE/dGhpcy55aC5jbGVhcigpOnRoaXMueWgucmVtb3ZlKGEpfTt0LmcoRiwiY29weU5vZGVEYXRhRnVuY3Rpb24iLEYucHJvdG90eXBlLmpJKTt0LmRlZmluZVByb3BlcnR5KEYse2pJOiJjb3B5Tm9kZURhdGFGdW5jdGlvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudnV9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudnU7YiE9PWEmJihudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIixGLCJjb3B5Tm9kZURhdGFGdW5jdGlvbiIpLHRoaXMudnU9YSx0aGlzLmooImNvcHlOb2RlRGF0YUZ1bmN0aW9uIixiLGEpKX0pO3QuZyhGLCJjb3BpZXNBcnJheXMiLEYucHJvdG90eXBlLnJ3KTsNCnQuZGVmaW5lUHJvcGVydHkoRix7cnc6ImNvcGllc0FycmF5cyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud3l9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMud3k7YiE9PWEmJihudWxsIT09YSYmdC5pKGEsImJvb2xlYW4iLEYsImNvcGllc0FycmF5cyIpLHRoaXMud3k9YSx0aGlzLmooImNvcGllc0FycmF5cyIsYixhKSl9KTt0LmcoRiwiY29waWVzQXJyYXlPYmplY3RzIixGLnByb3RvdHlwZS5xdyk7dC5kZWZpbmVQcm9wZXJ0eShGLHtxdzoiY29waWVzQXJyYXlPYmplY3RzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52eX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52eTtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiYm9vbGVhbiIsRiwiY29waWVzQXJyYXlPYmplY3RzIiksdGhpcy52eT1hLHRoaXMuaigiY29waWVzQXJyYXlPYmplY3RzIixiLGEpKX0pOw0KRi5wcm90b3R5cGUuY29weU5vZGVEYXRhPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiBudWxsO3ZhciBiPW51bGwsYj10aGlzLnZ1O2lmKG51bGwhPT1iKWI9YihhLHRoaXMpO2Vsc2V7dmFyIGI9bmV3IGEuY29uc3RydWN0b3IsYztmb3IoYyBpbiBhKXt2YXIgZD10LmhiKGEsYyk7aWYoKCFlfHwhemUoYSxjLGQpKSYmdGhpcy5ydyYmQXJyYXkuaXNBcnJheShkKSl7Zm9yKHZhciBmPVtdLGc9MDtnPGQubGVuZ3RoO2crKyl7dmFyIGg9ZFtnXTtpZih0aGlzLnF3JiZ0LnJiKGgpKXt2YXIgaz1uZXcgaC5jb25zdHJ1Y3RvcixsO2ZvcihsIGluIGgpe3ZhciBtPXQuaGIoaCxsKTtlJiZ6ZShoLGwsbSk7dC5TYShrLGwsbSl9aD1rfWYucHVzaChoKX1kPWZ9dC5TYShiLGMsZCl9dGhpcy5aZCYmdC55ZihiLHRoaXMsITEpfWImJnQuQWMoYik7cmV0dXJuIGJ9Ow0KZnVuY3Rpb24gemUoYSxiLGMpe3JldHVybiBjIGluc3RhbmNlb2YgUXx8YyBpbnN0YW5jZW9mIHp8fGMgaW5zdGFuY2VvZiAkZHx8YyBpbnN0YW5jZW9mIEFlfHxjIGluc3RhbmNlb2YgQmV8fGMgaW5zdGFuY2VvZiBhZXx8YyBpbnN0YW5jZW9mIG9hfHxjIGluc3RhbmNlb2YgYmV8fGMgaW5zdGFuY2VvZiBsZHx8YyBpbnN0YW5jZW9mIHJkPygiXyIhPT1iWzBdJiZ0LnRyYWNlKCJXYXJuaW5nOiBmb3VuZCBHcmFwaE9iamVjdCBvciBEaWFncmFtIHJlZmVyZW5jZSB3aGVuIGNvcHlpbmcgbW9kZWwgZGF0YSBvbiBwcm9wZXJ0eSAnIitiKyInIG9mIGRhdGEgb2JqZWN0OiAiK2EudG9TdHJpbmcoKSsiICBcbk1vZGVsIGRhdGEgc2hvdWxkIG5vdCBoYXZlIGFueSByZWZlcmVuY2VzIHRvIGEgRGlhZ3JhbSBvciBhbnkgcGFydCBvZiBhIGRpYWdyYW0sIHN1Y2ggYXM6ICIrYy50b1N0cmluZygpKSwhMCk6YyBpbnN0YW5jZW9mIEZ8fGMgaW5zdGFuY2VvZiB6ZHx8YyBpbnN0YW5jZW9mIGNlfHwNCmMgaW5zdGFuY2VvZiB0ZD8hMDohMX0NCkYucHJvdG90eXBlLnNldERhdGFQcm9wZXJ0eT1mdW5jdGlvbihhLGIsYyl7ZSYmKHQuaShhLCJvYmplY3QiLEYsInNldERhdGFQcm9wZXJ0eTpkYXRhIiksdC5pKGIsInN0cmluZyIsRiwic2V0RGF0YVByb3BlcnR5OnByb3BuYW1lIiksIiI9PT1iJiZ0Lm0oIk1vZGVsLnNldERhdGFQcm9wZXJ0eTogcHJvcGVydHkgbmFtZSBtdXN0IG5vdCBiZSBhbiBlbXB0eSBzdHJpbmcgd2hlbiBzZXR0aW5nICIrYSsiIHRvICIrYykpO2lmKHRoaXMubmUoYSkpaWYoYj09PXRoaXMuaWopdGhpcy5jQihhLGMpO2Vsc2V7aWYoYj09PXRoaXMucWwpe3RoaXMudHgoYSxjKTtyZXR1cm59fWVsc2UhdC5acCYmYSBpbnN0YW5jZW9mIFEmJih0LlpwPSEwLHQudHJhY2UoJ01vZGVsLnNldERhdGFQcm9wZXJ0eSBpcyBtb2RpZnlpbmcgYSBHcmFwaE9iamVjdCwgIicrYS50b1N0cmluZygpKyciJyksdC50cmFjZSgiICBJcyB0aGF0IHJlYWxseSB5b3VyIGludGVudD8iKSk7dmFyIGQ9dC5oYihhLGIpO2QhPT0NCmMmJih0LlNhKGEsYixjKSx0aGlzLm14KGEsYixkLGMpKX07Ri5wcm90b3R5cGUuYWRkQXJyYXlJdGVtPWZ1bmN0aW9uKGEsYil7dGhpcy5WSShhLC0xLGIpfTtGLnByb3RvdHlwZS5pbnNlcnRBcnJheUl0ZW09Ri5wcm90b3R5cGUuVkk9ZnVuY3Rpb24oYSxiLGMpe2UmJih0LlJzKGEsRiwiaW5zZXJ0QXJyYXlJdGVtOmFyciIpLHQucShiLEYsImluc2VydEFycmF5SXRlbTppZHgiKSk7YT09PXRoaXMuTWUmJnQubSgiTW9kZWwuaW5zZXJ0QXJyYXlJdGVtIG9yIE1vZGVsLmFkZEFycmF5SXRlbSBzaG91bGQgbm90IGJlIGNhbGxlZCBvbiB0aGUgTW9kZWwubm9kZURhdGFBcnJheSIpOzA+YiYmKGI9dC52YihhKSk7dC5UaShhLGIsYyk7ZGUodGhpcywiIix3ZCwiIixhLG51bGwsYyxudWxsLGIpfTsNCkYucHJvdG90eXBlLnJlbW92ZUFycmF5SXRlbT1mdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPS0xKTtlJiYodC5ScyhhLEYsInJlbW92ZUFycmF5SXRlbTphcnIiKSx0LnEoYixGLCJyZW1vdmVBcnJheUl0ZW06aWR4IikpO2E9PT10aGlzLk1lJiZ0Lm0oIk1vZGVsLnJlbW92ZUFycmF5SXRlbSBzaG91bGQgbm90IGJlIGNhbGxlZCBvbiB0aGUgTW9kZWwubm9kZURhdGFBcnJheSIpOy0xPT09YiYmKGI9dC52YihhKS0xKTt2YXIgYz10Lm1iKGEsYik7dC5VaShhLGIpO2RlKHRoaXMsIiIseGQsIiIsYSxjLG51bGwsYixudWxsKX07dC5nKEYsIm5vZGVDYXRlZ29yeVByb3BlcnR5IixGLnByb3RvdHlwZS5xbCk7DQp0LmRlZmluZVByb3BlcnR5KEYse3FsOiJub2RlQ2F0ZWdvcnlQcm9wZXJ0eSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSHJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuSHI7YiE9PWEmJihuZShhLEYsIm5vZGVDYXRlZ29yeVByb3BlcnR5IiksdGhpcy5Icj1hLHRoaXMuaigibm9kZUNhdGVnb3J5UHJvcGVydHkiLGIsYSkpfSk7Ri5wcm90b3R5cGUuZ2V0Q2F0ZWdvcnlGb3JOb2RlRGF0YT1GLnByb3RvdHlwZS5nZXRDYXRlZ29yeUZvck5vZGVEYXRhPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiIiO3ZhciBiPXRoaXMuSHI7aWYoIiI9PT1iKXJldHVybiIiO2I9dC5oYihhLGIpO2lmKHZvaWQgMD09PWIpcmV0dXJuIiI7aWYoInN0cmluZyI9PT10eXBlb2YgYilyZXR1cm4gYjt0Lm0oImdldENhdGVnb3J5Rm9yTm9kZURhdGEgZm91bmQgYSBub24tc3RyaW5nIGNhdGVnb3J5IGZvciAiK2ErIjogIitiKTtyZXR1cm4iIn07DQpGLnByb3RvdHlwZS5zZXRDYXRlZ29yeUZvck5vZGVEYXRhPUYucHJvdG90eXBlLnR4PWZ1bmN0aW9uKGEsYil7dC5pKGIsInN0cmluZyIsRiwic2V0Q2F0ZWdvcnlGb3JOb2RlRGF0YTpjYXQiKTtpZihudWxsIT09YSl7dmFyIGM9dGhpcy5IcjtpZigiIiE9PWMpaWYodGhpcy5uZShhKSl7dmFyIGQ9dC5oYihhLGMpO3ZvaWQgMD09PWQmJihkPSIiKTtkIT09YiYmKHQuU2EoYSxjLGIpLGRlKHRoaXMsIm5vZGVDYXRlZ29yeSIsdmQsYyxhLGQsYikpfWVsc2UgdC5TYShhLGMsYil9fTsNCmZ1bmN0aW9uIFAoYSxiKXsyPGFyZ3VtZW50cy5sZW5ndGgmJnQubSgiR3JhcGhMaW5rc01vZGVsIGNvbnN0cnVjdG9yIGNhbiBvbmx5IHRha2UgdHdvIG9wdGlvbmFsIGFyZ3VtZW50cywgdGhlIEFycmF5IG9mIG5vZGUgZGF0YSBhbmQgdGhlIEFycmF5IG9mIGxpbmsgZGF0YS4iKTtGLmNhbGwodGhpcyk7dGhpcy5YZz1bXTt0aGlzLmNtPW5ldyBDKE9iamVjdCk7dGhpcy53az10aGlzLnV1PW51bGw7dGhpcy55aj0iZnJvbSI7dGhpcy5Caj0idG8iO3RoaXMucHI9dGhpcy5vcj0iIjt0aGlzLmxyPSJjYXRlZ29yeSI7dGhpcy5LaD10aGlzLm92PSIiO3RoaXMubnY9ImlzR3JvdXAiO3RoaXMuSGo9Imdyb3VwIjt0aGlzLnh5PSExO3ZvaWQgMCE9PWEmJih0aGlzLkdnPWEpO3ZvaWQgMCE9PWImJih0aGlzLmhqPWIpfXQuZ2EoIkdyYXBoTGlua3NNb2RlbCIsUCk7dC5LYShQLEYpOw0KUC5wcm90b3R5cGUuY2xlYXI9UC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtGLnByb3RvdHlwZS5jbGVhci5jYWxsKHRoaXMpO3RoaXMuWmQmJnQuWG0odGhpcy5YZywibGlua0RhdGFBcnJheSIsdGhpcywhMCk7dGhpcy5YZz1bXTt0aGlzLmNtLmNsZWFyKCl9O2FhPVAucHJvdG90eXBlO2FhLnRvU3RyaW5nPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPTApO2lmKDI8PWEpcmV0dXJuIHRoaXMua0IoKTt2YXIgYj0oIiIhPT10aGlzLm5hbWU/dGhpcy5uYW1lOiIiKSsiIEdyYXBoTGlua3NNb2RlbCI7aWYoMDxhKXtiKz0iXG4gbm9kZSBkYXRhOiI7YT10aGlzLkdnO3ZhciBjPXQudmIoYSksZDtmb3IoZD0wO2Q8YztkKyspdmFyIGY9dC5tYihhLGQpLGI9YisoIiAiK3RoaXMuSGIoZikrIjoiK3lkKGYpKTtiKz0iXG4gbGluayBkYXRhOiI7YT10aGlzLmhqO2M9dC52YihhKTtmb3IoZD0wO2Q8YztkKyspZj10Lm1iKGEsZCksYis9IiAiK3RoaXMuaGwoZikrIi0tXHgzZSIrdGhpcy5sbChmKX1yZXR1cm4gYn07DQphYS5adD1mdW5jdGlvbigpe3ZhciBhPUYucHJvdG90eXBlLlp0LmNhbGwodGhpcyksYj0iIjsiY2F0ZWdvcnkiIT09dGhpcy51cCYmInN0cmluZyI9PT10eXBlb2YgdGhpcy51cCYmKGIrPScsXG4gICJsaW5rQ2F0ZWdvcnlQcm9wZXJ0eSI6ICcrdGhpcy5xdW90ZSh0aGlzLnVwKSk7ImZyb20iIT09dGhpcy5ZbSYmInN0cmluZyI9PT10eXBlb2YgdGhpcy5ZbSYmKGIrPScsXG4gICJsaW5rRnJvbUtleVByb3BlcnR5IjogJyt0aGlzLnF1b3RlKHRoaXMuWW0pKTsidG8iIT09dGhpcy5abSYmInN0cmluZyI9PT10eXBlb2YgdGhpcy5abSYmKGIrPScsXG4gICJsaW5rVG9LZXlQcm9wZXJ0eSI6ICcrdGhpcy5xdW90ZSh0aGlzLlptKSk7IiIhPT10aGlzLnZwJiYic3RyaW5nIj09PXR5cGVvZiB0aGlzLnZwJiYoYis9JyxcbiAgImxpbmtGcm9tUG9ydElkUHJvcGVydHkiOiAnK3RoaXMucXVvdGUodGhpcy52cCkpOyIiIT09dGhpcy56cCYmInN0cmluZyI9PT10eXBlb2YgdGhpcy56cCYmKGIrPQ0KJyxcbiAgImxpbmtUb1BvcnRJZFByb3BlcnR5IjogJyt0aGlzLnF1b3RlKHRoaXMuenApKTsiIiE9PXRoaXMuQnQmJiJzdHJpbmciPT09dHlwZW9mIHRoaXMuQnQmJihiKz0nLFxuICAibm9kZUlzTGlua0xhYmVsUHJvcGVydHkiOiAnK3RoaXMucXVvdGUodGhpcy5CdCkpOyIiIT09dGhpcy53cCYmInN0cmluZyI9PT10eXBlb2YgdGhpcy53cCYmKGIrPScsXG4gICJsaW5rTGFiZWxLZXlzUHJvcGVydHkiOiAnK3RoaXMucXVvdGUodGhpcy53cCkpOyJpc0dyb3VwIiE9PXRoaXMuSXAmJiJzdHJpbmciPT09dHlwZW9mIHRoaXMuSXAmJihiKz0nLFxuICAibm9kZUlzR3JvdXBQcm9wZXJ0eSI6ICcrdGhpcy5xdW90ZSh0aGlzLklwKSk7Imdyb3VwIiE9PXRoaXMuZG4mJiJzdHJpbmciPT09dHlwZW9mIHRoaXMuZG4mJihiKz0nLFxuICAibm9kZUdyb3VwS2V5UHJvcGVydHkiOiAnK3RoaXMucXVvdGUodGhpcy5kbikpO3JldHVybiBhK2J9Ow0KYWEudEI9ZnVuY3Rpb24oKXt2YXIgYT1GLnByb3RvdHlwZS50Qi5jYWxsKHRoaXMpLGI9JyxcbiAgImxpbmtEYXRhQXJyYXkiOiAnK0NkKHRoaXMsdGhpcy5oaiwhMCk7cmV0dXJuIGErYn07DQphYS5HdD1mdW5jdGlvbihhKXtGLnByb3RvdHlwZS5HdC5jYWxsKHRoaXMsYSk7YS5saW5rRnJvbUtleVByb3BlcnR5JiYodGhpcy5ZbT1hLmxpbmtGcm9tS2V5UHJvcGVydHkpO2EubGlua1RvS2V5UHJvcGVydHkmJih0aGlzLlptPWEubGlua1RvS2V5UHJvcGVydHkpO2EubGlua0Zyb21Qb3J0SWRQcm9wZXJ0eSYmKHRoaXMudnA9YS5saW5rRnJvbVBvcnRJZFByb3BlcnR5KTthLmxpbmtUb1BvcnRJZFByb3BlcnR5JiYodGhpcy56cD1hLmxpbmtUb1BvcnRJZFByb3BlcnR5KTthLmxpbmtDYXRlZ29yeVByb3BlcnR5JiYodGhpcy51cD1hLmxpbmtDYXRlZ29yeVByb3BlcnR5KTthLm5vZGVJc0xpbmtMYWJlbFByb3BlcnR5JiYodGhpcy5CdD1hLm5vZGVJc0xpbmtMYWJlbFByb3BlcnR5KTthLmxpbmtMYWJlbEtleXNQcm9wZXJ0eSYmKHRoaXMud3A9YS5saW5rTGFiZWxLZXlzUHJvcGVydHkpO2Eubm9kZUlzR3JvdXBQcm9wZXJ0eSYmKHRoaXMuSXA9YS5ub2RlSXNHcm91cFByb3BlcnR5KTsNCmEubm9kZUdyb3VwS2V5UHJvcGVydHkmJih0aGlzLmRuPWEubm9kZUdyb3VwS2V5UHJvcGVydHkpfTthYS5SQT1mdW5jdGlvbihhKXtGLnByb3RvdHlwZS5SQS5jYWxsKHRoaXMsYSk7aWYoYT1hLmxpbmtEYXRhQXJyYXkpdGhpcy5JdChhKSx0aGlzLmhqPWF9Ow0KUC5wcm90b3R5cGUuY2hhbmdlU3RhdGU9ZnVuY3Rpb24oYSxiKXtpZihhLnRkPT09d2Qpe3ZhciBjPW51bGw7ImxpbmtEYXRhQXJyYXkiPT09YS5BZj9jPXRoaXMuWGc6ImxpbmtMYWJlbEtleXMiPT09YS5BZiYmKGM9dGhpcy5qbChhLm9iamVjdCkpO2lmKHQuaXNBcnJheShjKSl7Yj8odGhpcy5aZCYmdC5yYihhLm5ld1ZhbHVlKSYmdC55ZihhLm5ld1ZhbHVlLHRoaXMsITApLHQuVWkoYyxhLldmKSk6KHRoaXMuWmQmJnQucmIoYS5uZXdWYWx1ZSkmJnQueWYoYS5uZXdWYWx1ZSx0aGlzLCExKSx0LlRpKGMsYS5XZixhLm5ld1ZhbHVlKSk7cmV0dXJufX1lbHNlIGlmKGEudGQ9PT14ZCYmKGM9bnVsbCwibGlua0RhdGFBcnJheSI9PT1hLkFmP2M9dGhpcy5YZzoibGlua0xhYmVsS2V5cyI9PT1hLkFmJiYoYz10aGlzLmpsKGEub2JqZWN0KSksdC5pc0FycmF5KGMpKSl7Yj8odGhpcy5aZCYmdC5yYihhLm9sZFZhbHVlKSYmdC55ZihhLm9sZFZhbHVlLHRoaXMsITEpLHQuVGkoYyxhLllmLA0KYS5vbGRWYWx1ZSkpOih0aGlzLlpkJiZ0LnJiKGEub2xkVmFsdWUpJiZ0LnlmKGEub2xkVmFsdWUsdGhpcywhMCksdC5VaShjLGEuWWYpKTtyZXR1cm59Ri5wcm90b3R5cGUuY2hhbmdlU3RhdGUuY2FsbCh0aGlzLGEsYil9O3QuZyhQLCJhcmNoZXR5cGVOb2RlRGF0YSIsUC5wcm90b3R5cGUuT3MpO3QuZGVmaW5lUHJvcGVydHkoUCx7T3M6ImFyY2hldHlwZU5vZGVEYXRhIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53a30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy53aztiIT09YSYmKG51bGwhPT1hJiZ0LmwoYSxPYmplY3QsUCwiYXJjaGV0eXBlTm9kZURhdGEiKSx0aGlzLndrPWEsdGhpcy5qKCJhcmNoZXR5cGVOb2RlRGF0YSIsYixhKSl9KTsNClAucHJvdG90eXBlLmFuPWZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PWEpe3ZhciBiPXRoaXMud2s7aWYobnVsbCE9PWIpe3ZhciBjPXRoaXMudWYoYSk7bnVsbD09PWMmJihjPXRoaXMuY29weU5vZGVEYXRhKGIpLHQuU2EoYyx0aGlzLmhtLGEpLHRoaXMueW0oYykpfXJldHVybiBhfX07dC5nKFAsImxpbmtGcm9tS2V5UHJvcGVydHkiLFAucHJvdG90eXBlLlltKTt0LmRlZmluZVByb3BlcnR5KFAse1ltOiJsaW5rRnJvbUtleVByb3BlcnR5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55an0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy55ajtiIT09YSYmKG5lKGEsUCwibGlua0Zyb21LZXlQcm9wZXJ0eSIpLHRoaXMueWo9YSx0aGlzLmooImxpbmtGcm9tS2V5UHJvcGVydHkiLGIsYSkpfSk7DQpQLnByb3RvdHlwZS5nZXRGcm9tS2V5Rm9yTGlua0RhdGE9UC5wcm90b3R5cGUuaGw9ZnVuY3Rpb24oYSl7aWYobnVsbCE9PWEpe3ZhciBiPXRoaXMueWo7aWYoIiIhPT1iJiYoYj10LmhiKGEsYiksdm9pZCAwIT09Yikpe2lmKG9lKGIpKXJldHVybiBiO3QubSgiRnJvbUtleSB2YWx1ZSBmb3IgbGluayBkYXRhICIrYSsiIGlzIG5vdCBhIG51bWJlciBvciBhIHN0cmluZzogIitiKX19fTsNClAucHJvdG90eXBlLnNldEZyb21LZXlGb3JMaW5rRGF0YT1QLnByb3RvdHlwZS52eD1mdW5jdGlvbihhLGIpe251bGw9PT1iJiYoYj12b2lkIDApO3ZvaWQgMD09PWJ8fG9lKGIpfHx0LmJjKGIsIm51bWJlciBvciBzdHJpbmciLFAsInNldEZyb21LZXlGb3JMaW5rRGF0YTprZXkiKTtpZihudWxsIT09YSl7dmFyIGM9dGhpcy55ajtpZigiIiE9PWMpaWYoYj10aGlzLmFuKGIpLHRoaXMuWGkoYSkpe3ZhciBkPXQuaGIoYSxjKTtkIT09YiYmKHJlKHRoaXMsZCxhKSx0LlNhKGEsYyxiKSxudWxsPT09dGhpcy51ZihiKSYmcWUodGhpcyxiLGEpLGRlKHRoaXMsImxpbmtGcm9tS2V5Iix2ZCxjLGEsZCxiKSwic3RyaW5nIj09PXR5cGVvZiBjJiZ0aGlzLlFiKGEsYykpfWVsc2UgdC5TYShhLGMsYil9fTt0LmcoUCwibGlua1RvS2V5UHJvcGVydHkiLFAucHJvdG90eXBlLlptKTsNCnQuZGVmaW5lUHJvcGVydHkoUCx7Wm06ImxpbmtUb0tleVByb3BlcnR5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Can0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5CajtiIT09YSYmKG5lKGEsUCwibGlua1RvS2V5UHJvcGVydHkiKSx0aGlzLkJqPWEsdGhpcy5qKCJsaW5rVG9LZXlQcm9wZXJ0eSIsYixhKSl9KTtQLnByb3RvdHlwZS5nZXRUb0tleUZvckxpbmtEYXRhPVAucHJvdG90eXBlLmxsPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT1hKXt2YXIgYj10aGlzLkJqO2lmKCIiIT09YiYmKGI9dC5oYihhLGIpLHZvaWQgMCE9PWIpKXtpZihvZShiKSlyZXR1cm4gYjt0Lm0oIlRvS2V5IHZhbHVlIGZvciBsaW5rIGRhdGEgIithKyIgaXMgbm90IGEgbnVtYmVyIG9yIGEgc3RyaW5nOiAiK2IpfX19Ow0KUC5wcm90b3R5cGUuc2V0VG9LZXlGb3JMaW5rRGF0YT1QLnByb3RvdHlwZS54eD1mdW5jdGlvbihhLGIpe251bGw9PT1iJiYoYj12b2lkIDApO3ZvaWQgMD09PWJ8fG9lKGIpfHx0LmJjKGIsIm51bWJlciBvciBzdHJpbmciLFAsInNldFRvS2V5Rm9yTGlua0RhdGE6a2V5Iik7aWYobnVsbCE9PWEpe3ZhciBjPXRoaXMuQmo7aWYoIiIhPT1jKWlmKGI9dGhpcy5hbihiKSx0aGlzLlhpKGEpKXt2YXIgZD10LmhiKGEsYyk7ZCE9PWImJihyZSh0aGlzLGQsYSksdC5TYShhLGMsYiksbnVsbD09PXRoaXMudWYoYikmJnFlKHRoaXMsYixhKSxkZSh0aGlzLCJsaW5rVG9LZXkiLHZkLGMsYSxkLGIpLCJzdHJpbmciPT09dHlwZW9mIGMmJnRoaXMuUWIoYSxjKSl9ZWxzZSB0LlNhKGEsYyxiKX19O3QuZyhQLCJsaW5rRnJvbVBvcnRJZFByb3BlcnR5IixQLnByb3RvdHlwZS52cCk7DQp0LmRlZmluZVByb3BlcnR5KFAse3ZwOiJsaW5rRnJvbVBvcnRJZFByb3BlcnR5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5vcjtiIT09YSYmKG5lKGEsUCwibGlua0Zyb21Qb3J0SWRQcm9wZXJ0eSIpLHRoaXMub3I9YSx0aGlzLmooImxpbmtGcm9tUG9ydElkUHJvcGVydHkiLGIsYSkpfSk7UC5wcm90b3R5cGUuZ2V0RnJvbVBvcnRJZEZvckxpbmtEYXRhPVAucHJvdG90eXBlLklJPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiIiO3ZhciBiPXRoaXMub3I7aWYoIiI9PT1iKXJldHVybiIiO2E9dC5oYihhLGIpO3JldHVybiB2b2lkIDA9PT1hPyIiOmF9Ow0KUC5wcm90b3R5cGUuc2V0RnJvbVBvcnRJZEZvckxpbmtEYXRhPVAucHJvdG90eXBlLmJCPWZ1bmN0aW9uKGEsYil7dC5pKGIsInN0cmluZyIsUCwic2V0RnJvbVBvcnRJZEZvckxpbmtEYXRhOnBvcnRuYW1lIik7aWYobnVsbCE9PWEpe3ZhciBjPXRoaXMub3I7aWYoIiIhPT1jKWlmKHRoaXMuWGkoYSkpe3ZhciBkPXQuaGIoYSxjKTt2b2lkIDA9PT1kJiYoZD0iIik7ZCE9PWImJih0LlNhKGEsYyxiKSxkZSh0aGlzLCJsaW5rRnJvbVBvcnRJZCIsdmQsYyxhLGQsYiksInN0cmluZyI9PT10eXBlb2YgYyYmdGhpcy5RYihhLGMpKX1lbHNlIHQuU2EoYSxjLGIpfX07dC5nKFAsImxpbmtUb1BvcnRJZFByb3BlcnR5IixQLnByb3RvdHlwZS56cCk7DQp0LmRlZmluZVByb3BlcnR5KFAse3pwOiJsaW5rVG9Qb3J0SWRQcm9wZXJ0eSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucHI7YiE9PWEmJihuZShhLFAsImxpbmtUb1BvcnRJZFByb3BlcnR5IiksdGhpcy5wcj1hLHRoaXMuaigibGlua1RvUG9ydElkUHJvcGVydHkiLGIsYSkpfSk7UC5wcm90b3R5cGUuZ2V0VG9Qb3J0SWRGb3JMaW5rRGF0YT1QLnByb3RvdHlwZS5MST1mdW5jdGlvbihhKXtpZihudWxsPT09YSlyZXR1cm4iIjt2YXIgYj10aGlzLnByO2lmKCIiPT09YilyZXR1cm4iIjthPXQuaGIoYSxiKTtyZXR1cm4gdm9pZCAwPT09YT8iIjphfTsNClAucHJvdG90eXBlLnNldFRvUG9ydElkRm9yTGlua0RhdGE9UC5wcm90b3R5cGUuZUI9ZnVuY3Rpb24oYSxiKXt0LmkoYiwic3RyaW5nIixQLCJzZXRUb1BvcnRJZEZvckxpbmtEYXRhOnBvcnRuYW1lIik7aWYobnVsbCE9PWEpe3ZhciBjPXRoaXMucHI7aWYoIiIhPT1jKWlmKHRoaXMuWGkoYSkpe3ZhciBkPXQuaGIoYSxjKTt2b2lkIDA9PT1kJiYoZD0iIik7ZCE9PWImJih0LlNhKGEsYyxiKSxkZSh0aGlzLCJsaW5rVG9Qb3J0SWQiLHZkLGMsYSxkLGIpLCJzdHJpbmciPT09dHlwZW9mIGMmJnRoaXMuUWIoYSxjKSl9ZWxzZSB0LlNhKGEsYyxiKX19O3QuZyhQLCJub2RlSXNMaW5rTGFiZWxQcm9wZXJ0eSIsUC5wcm90b3R5cGUuQnQpOw0KdC5kZWZpbmVQcm9wZXJ0eShQLHtCdDoibm9kZUlzTGlua0xhYmVsUHJvcGVydHkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm92fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLm92O2IhPT1hJiYobmUoYSxQLCJub2RlSXNMaW5rTGFiZWxQcm9wZXJ0eSIpLHRoaXMub3Y9YSx0aGlzLmooIm5vZGVJc0xpbmtMYWJlbFByb3BlcnR5IixiLGEpKX0pO1AucHJvdG90eXBlLmlzTGlua0xhYmVsRm9yTm9kZURhdGE9UC5wcm90b3R5cGUuWUk9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuITE7dmFyIGI9dGhpcy5vdjtyZXR1cm4iIj09PWI/ITE6dC5oYihhLGIpPyEwOiExfTt0LmcoUCwibGlua0xhYmVsS2V5c1Byb3BlcnR5IixQLnByb3RvdHlwZS53cCk7DQp0LmRlZmluZVByb3BlcnR5KFAse3dwOiJsaW5rTGFiZWxLZXlzUHJvcGVydHkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLktofSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLktoO2IhPT1hJiYobmUoYSxQLCJsaW5rTGFiZWxLZXlzUHJvcGVydHkiKSx0aGlzLktoPWEsdGhpcy5qKCJsaW5rTGFiZWxLZXlzUHJvcGVydHkiLGIsYSkpfSk7UC5wcm90b3R5cGUuZ2V0TGFiZWxLZXlzRm9yTGlua0RhdGE9UC5wcm90b3R5cGUuamw9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuIHQuamk7dmFyIGI9dGhpcy5LaDtpZigiIj09PWIpcmV0dXJuIHQuamk7YT10LmhiKGEsYik7cmV0dXJuIHZvaWQgMD09PWE/dC5qaTphfTsNClAucHJvdG90eXBlLnNldExhYmVsS2V5c0ZvckxpbmtEYXRhPVAucHJvdG90eXBlLm5HPWZ1bmN0aW9uKGEsYil7dC5ScyhiLFAsInNldExhYmVsS2V5c0ZvckxpbmtEYXRhOmFyciIpO2lmKG51bGwhPT1hKXt2YXIgYz10aGlzLktoO2lmKCIiIT09YylpZih0aGlzLlhpKGEpKXt2YXIgZD10LmhiKGEsYyk7dm9pZCAwPT09ZCYmKGQ9dC5qaSk7aWYoZCE9PWIpe2Zvcih2YXIgZj10LnZiKGQpLGc9MDtnPGY7ZysrKXt2YXIgaD10Lm1iKGQsZyk7cmUodGhpcyxoLGEpfXQuU2EoYSxjLGIpO2Y9dC52YihiKTtmb3IoZz0wO2c8ZjtnKyspaD10Lm1iKGIsZyksbnVsbD09PXRoaXMudWYoaCkmJnFlKHRoaXMsaCxhKTtkZSh0aGlzLCJsaW5rTGFiZWxLZXlzIix2ZCxjLGEsZCxiKTsic3RyaW5nIj09PXR5cGVvZiBjJiZ0aGlzLlFiKGEsYyl9fWVsc2UgdC5TYShhLGMsYil9fTsNClAucHJvdG90eXBlLmFkZExhYmVsS2V5Rm9yTGlua0RhdGE9UC5wcm90b3R5cGUuSkQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT09YiYmdm9pZCAwIT09YiYmKG9lKGIpfHx0LmJjKGIsIm51bWJlciBvciBzdHJpbmciLFAsImFkZExhYmVsS2V5Rm9yTGlua0RhdGE6a2V5IiksbnVsbCE9PWEpKXt2YXIgYz10aGlzLktoO2lmKCIiIT09Yyl7dmFyIGQ9dC5oYihhLGMpO3ZvaWQgMD09PWQ/dGhpcy5uRyhhLFtiXSk6dC5pc0FycmF5KGQpPzA8PXQuUXooZCxiKXx8KHQuVGkoZCxJbmZpbml0eSxiKSx0aGlzLlhpKGEpJiYobnVsbD09PXRoaXMudWYoYikmJnFlKHRoaXMsYixhKSxkZSh0aGlzLCJsaW5rTGFiZWxLZXlzIix3ZCxjLGEsbnVsbCxiKSkpOnQubShjKyIgcHJvcGVydHkgaXMgbm90IGFuIEFycmF5OyBjYW5ub3QgYWRkTGFiZWxLZXlGb3JMaW5rRGF0YTogIithKX19fTsNClAucHJvdG90eXBlLnJlbW92ZUxhYmVsS2V5Rm9yTGlua0RhdGE9UC5wcm90b3R5cGUuSko9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT09YiYmdm9pZCAwIT09YiYmKG9lKGIpfHx0LmJjKGIsIm51bWJlciBvciBzdHJpbmciLFAsInJlbW92ZUxhYmVsS2V5Rm9yTGlua0RhdGE6a2V5IiksbnVsbCE9PWEpKXt2YXIgYz10aGlzLktoO2lmKCIiIT09Yyl7dmFyIGQ9dC5oYihhLGMpO2lmKHQuaXNBcnJheShkKSl7dmFyIGY9dC5ReihkLGIpOzA+Znx8KHQuVWkoZCxmKSx0aGlzLlhpKGEpJiYocmUodGhpcyxiLGEpLGRlKHRoaXMsImxpbmtMYWJlbEtleXMiLHhkLGMsYSxiLG51bGwpKSl9ZWxzZSB2b2lkIDAhPT1kJiZ0Lm0oYysiIHByb3BlcnR5IGlzIG5vdCBhbiBBcnJheTsgY2Fubm90IHJlbW92ZUxhYmVsS2V5Zm9yTGlua0RhdGE6ICIrYSl9fX07dC5nKFAsImxpbmtEYXRhQXJyYXkiLFAucHJvdG90eXBlLmhqKTsNCnQuZGVmaW5lUHJvcGVydHkoUCx7aGo6ImxpbmtEYXRhQXJyYXkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlhnfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlhnO2lmKGIhPT1hKXt0LlJzKGEsUCwibGlua0RhdGFBcnJheSIpO3RoaXMuWmQmJnQuemMmJihudWxsIT09YiYmdC5YbShiLCJsaW5rRGF0YUFycmF5Iix0aGlzLCEwKSxhPXQuWG0oYSwibGlua0RhdGFBcnJheSIsdGhpcywhMSkpO2Zvcih2YXIgYz10LnZiKGEpLGQ9MDtkPGM7ZCsrKXt2YXIgZj10Lm1iKGEsZCk7aWYoIXQucmIoZikpe3QubSgiR3JhcGhMaW5rc01vZGVsLmxpbmtEYXRhQXJyYXkgbXVzdCBvbmx5IGNvbnRhaW4gT2JqZWN0cywgbm90OiAiK2YpO3JldHVybn10Lml0KGYpfXRoaXMuWGc9YTtmb3IodmFyIGc9bmV3IEMoT2JqZWN0KSxkPTA7ZDxjO2QrKylmPXQubWIoYSxkKSxnLmFkZChmKTt0aGlzLmNtPWc7ZGUodGhpcywibGlua0RhdGFBcnJheSIsdmQsImxpbmtEYXRhQXJyYXkiLHRoaXMsYixhKTtmb3IoZD0NCjA7ZDxjO2QrKylmPXQubWIoYSxkKSxDZSh0aGlzLGYpfX0pO1AucHJvdG90eXBlLmNvbnRhaW5zTGlua0RhdGE9UC5wcm90b3R5cGUuWGk9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hPyExOnRoaXMuY20uY29udGFpbnMoYSl9O1AucHJvdG90eXBlLmFkZExpbmtEYXRhPVAucHJvdG90eXBlLiR2PWZ1bmN0aW9uKGEpe2lmKG51bGwhPT1hKXt0aGlzLlpkJiZ0LnlmKGEsdGhpcywhMSk7aWYodm9pZCAwPT09dC5vZChhKSl0LkFjKGEpO2Vsc2UgaWYodGhpcy5YaShhKSlyZXR1cm47dGhpcy5jbS5hZGQoYSk7dmFyIGI9dC52Yih0aGlzLlhnKTt0LlRpKHRoaXMuWGcsYixhKTtkZSh0aGlzLCJsaW5rRGF0YUFycmF5Iix3ZCwibGlua0RhdGFBcnJheSIsdGhpcyxudWxsLGEsbnVsbCxiKTtDZSh0aGlzLGEpfX07DQpQLnByb3RvdHlwZS5hZGRMaW5rRGF0YUNvbGxlY3Rpb249ZnVuY3Rpb24oYSl7aWYodC5pc0FycmF5KGEpKWZvcih2YXIgYj10LnZiKGEpLGM9MDtjPGI7YysrKXRoaXMuJHYodC5tYihhLGMpKTtlbHNlIGZvcihhPWEuazthLm5leHQoKTspdGhpcy4kdihhLnZhbHVlKX07DQpQLnByb3RvdHlwZS5yZW1vdmVMaW5rRGF0YT1QLnByb3RvdHlwZS5XQT1mdW5jdGlvbihhKXtpZihudWxsIT09YSl7dGhpcy5aZCYmdC55ZihhLHRoaXMsITApO3RoaXMuY20ucmVtb3ZlKGEpO3ZhciBiPXRoaXMuWGcuaW5kZXhPZihhKTtpZighKDA+Yikpe3QuVWkodGhpcy5YZyxiKTtkZSh0aGlzLCJsaW5rRGF0YUFycmF5Iix4ZCwibGlua0RhdGFBcnJheSIsdGhpcyxhLG51bGwsYixudWxsKTtiPXRoaXMuaGwoYSk7cmUodGhpcyxiLGEpO2I9dGhpcy5sbChhKTtyZSh0aGlzLGIsYSk7dmFyIGM9dGhpcy5qbChhKTtpZih0LmlzQXJyYXkoYykpZm9yKHZhciBkPXQudmIoYyksZj0wO2Y8ZDtmKyspYj10Lm1iKGMsZikscmUodGhpcyxiLGEpfX19O1AucHJvdG90eXBlLnJlbW92ZUxpbmtEYXRhQ29sbGVjdGlvbj1mdW5jdGlvbihhKXtpZih0LmlzQXJyYXkoYSkpZm9yKHZhciBiPXQudmIoYSksYz0wO2M8YjtjKyspdGhpcy5XQSh0Lm1iKGEsYykpO2Vsc2UgZm9yKGE9YS5rO2EubmV4dCgpOyl0aGlzLldBKGEudmFsdWUpfTsNCmZ1bmN0aW9uIENlKGEsYil7dmFyIGM9YS5obChiKSxjPWEuYW4oYyk7bnVsbD09PWEudWYoYykmJnFlKGEsYyxiKTtjPWEubGwoYik7Yz1hLmFuKGMpO251bGw9PT1hLnVmKGMpJiZxZShhLGMsYik7dmFyIGQ9YS5qbChiKTtpZih0LmlzQXJyYXkoZCkpZm9yKHZhciBmPXQudmIoZCksZz0wO2c8ZjtnKyspYz10Lm1iKGQsZyksbnVsbD09PWEudWYoYykmJnFlKGEsYyxiKX10LmcoUCwiY29weUxpbmtEYXRhRnVuY3Rpb24iLFAucHJvdG90eXBlLmlJKTt0LmRlZmluZVByb3BlcnR5KFAse2lJOiJjb3B5TGlua0RhdGFGdW5jdGlvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXV9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudXU7YiE9PWEmJihudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIixQLCJjb3B5TGlua0RhdGFGdW5jdGlvbiIpLHRoaXMudXU9YSx0aGlzLmooImNvcHlMaW5rRGF0YUZ1bmN0aW9uIixiLGEpKX0pOw0KUC5wcm90b3R5cGUuY29weUxpbmtEYXRhPVAucHJvdG90eXBlLmdFPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiBudWxsO3ZhciBiPW51bGwsYj10aGlzLnV1O2lmKG51bGwhPT1iKWI9YihhLHRoaXMpO2Vsc2V7dmFyIGI9bmV3IGEuY29uc3RydWN0b3IsYztmb3IoYyBpbiBhKXt2YXIgZD10LmhiKGEsYyk7ZSYmemUoYSxjLGQpO3QuU2EoYixjLGQpfXRoaXMuWmQmJnQueWYoYix0aGlzLCExKX1iJiYodC5BYyhiKSwiIiE9PXRoaXMueWomJnQuU2EoYix0aGlzLnlqLHZvaWQgMCksIiIhPT10aGlzLkJqJiZ0LlNhKGIsdGhpcy5Caix2b2lkIDApLCIiIT09dGhpcy5LaCYmdC5TYShiLHRoaXMuS2gsW10pKTtyZXR1cm4gYn07dC5nKFAsIm5vZGVJc0dyb3VwUHJvcGVydHkiLFAucHJvdG90eXBlLklwKTsNCnQuZGVmaW5lUHJvcGVydHkoUCx7SXA6Im5vZGVJc0dyb3VwUHJvcGVydHkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm52fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLm52O2IhPT1hJiYobmUoYSxQLCJub2RlSXNHcm91cFByb3BlcnR5IiksdGhpcy5udj1hLHRoaXMuaigibm9kZUlzR3JvdXBQcm9wZXJ0eSIsYixhKSl9KTtQLnByb3RvdHlwZS5pc0dyb3VwRm9yTm9kZURhdGE9UC5wcm90b3R5cGUudEE9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuITE7dmFyIGI9dGhpcy5udjtyZXR1cm4iIj09PWI/ITE6dC5oYihhLGIpPyEwOiExfTt0LmcoUCwibm9kZUdyb3VwS2V5UHJvcGVydHkiLFAucHJvdG90eXBlLmRuKTsNCnQuZGVmaW5lUHJvcGVydHkoUCx7ZG46Im5vZGVHcm91cEtleVByb3BlcnR5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Ian0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5IajtiIT09YSYmKG5lKGEsUCwibm9kZUdyb3VwS2V5UHJvcGVydHkiKSx0aGlzLkhqPWEsdGhpcy5qKCJub2RlR3JvdXBLZXlQcm9wZXJ0eSIsYixhKSl9KTt0LmcoUCwiY29waWVzR3JvdXBLZXlPZk5vZGVEYXRhIixQLnByb3RvdHlwZS5hbCk7dC5kZWZpbmVQcm9wZXJ0eShQLHthbDoiY29waWVzR3JvdXBLZXlPZk5vZGVEYXRhIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54eX0sZnVuY3Rpb24oYSl7dGhpcy54eSE9PWEmJih0LmkoYSwiYm9vbGVhbiIsUCwiY29waWVzR3JvdXBLZXlPZk5vZGVEYXRhIiksdGhpcy54eT1hKX0pOw0KUC5wcm90b3R5cGUuZ2V0R3JvdXBLZXlGb3JOb2RlRGF0YT1QLnByb3RvdHlwZS5SbT1mdW5jdGlvbihhKXtpZihudWxsIT09YSl7dmFyIGI9dGhpcy5IajtpZigiIiE9PWImJihiPXQuaGIoYSxiKSx2b2lkIDAhPT1iKSl7aWYob2UoYikpcmV0dXJuIGI7dC5tKCJHcm91cEtleSB2YWx1ZSBmb3Igbm9kZSBkYXRhICIrYSsiIGlzIG5vdCBhIG51bWJlciBvciBhIHN0cmluZzogIitiKX19fTsNClAucHJvdG90eXBlLnNldEdyb3VwS2V5Rm9yTm9kZURhdGE9UC5wcm90b3R5cGUud3g9ZnVuY3Rpb24oYSxiKXtudWxsPT09YiYmKGI9dm9pZCAwKTt2b2lkIDA9PT1ifHxvZShiKXx8dC5iYyhiLCJudW1iZXIgb3Igc3RyaW5nIixQLCJzZXRHcm91cEtleUZvck5vZGVEYXRhOmtleSIpO2lmKG51bGwhPT1hKXt2YXIgYz10aGlzLkhqO2lmKCIiIT09YylpZih0aGlzLm5lKGEpKXt2YXIgZD10LmhiKGEsYyk7ZCE9PWImJihyZSh0aGlzLGQsYSksdC5TYShhLGMsYiksbnVsbD09PXRoaXMudWYoYikmJnFlKHRoaXMsYixhKSxkZSh0aGlzLCJub2RlR3JvdXBLZXkiLHZkLGMsYSxkLGIpLCJzdHJpbmciPT09dHlwZW9mIGMmJnRoaXMuUWIoYSxjKSl9ZWxzZSB0LlNhKGEsYyxiKX19Ow0KUC5wcm90b3R5cGUuY29weU5vZGVEYXRhPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiBudWxsO2E9Ri5wcm90b3R5cGUuY29weU5vZGVEYXRhLmNhbGwodGhpcyxhKTt0aGlzLmFsfHwiIj09PXRoaXMuSGp8fHQuU2EoYSx0aGlzLkhqLHZvaWQgMCk7cmV0dXJuIGF9Ow0KUC5wcm90b3R5cGUuc2V0RGF0YVByb3BlcnR5PWZ1bmN0aW9uKGEsYixjKXtlJiYodC5pKGEsIm9iamVjdCIsUCwic2V0RGF0YVByb3BlcnR5OmRhdGEiKSx0LmkoYiwic3RyaW5nIixQLCJzZXREYXRhUHJvcGVydHk6cHJvcG5hbWUiKSwiIj09PWImJnQubSgiR3JhcGhMaW5rc01vZGVsLnNldERhdGFQcm9wZXJ0eTogcHJvcGVydHkgbmFtZSBtdXN0IG5vdCBiZSBhbiBlbXB0eSBzdHJpbmcgd2hlbiBzZXR0aW5nICIrYSsiIHRvICIrYykpO2lmKHRoaXMubmUoYSkpaWYoYj09PXRoaXMuaWopdGhpcy5jQihhLGMpO2Vsc2V7aWYoYj09PXRoaXMucWwpe3RoaXMudHgoYSxjKTtyZXR1cm59aWYoYj09PXRoaXMuZG4pe3RoaXMud3goYSxjKTtyZXR1cm59Yj09PXRoaXMuSXAmJnQubSgiR3JhcGhMaW5rc01vZGVsLnNldERhdGFQcm9wZXJ0eTogcHJvcGVydHkgbmFtZSBtdXN0IG5vdCBiZSB0aGUgbm9kZUlzR3JvdXBQcm9wZXJ0eTogIitiKX1lbHNlIGlmKHRoaXMuWGkoYSkpe2lmKGI9PT0NCnRoaXMuWW0pe3RoaXMudngoYSxjKTtyZXR1cm59aWYoYj09PXRoaXMuWm0pe3RoaXMueHgoYSxjKTtyZXR1cm59aWYoYj09PXRoaXMudnApe3RoaXMuYkIoYSxjKTtyZXR1cm59aWYoYj09PXRoaXMuenApe3RoaXMuZUIoYSxjKTtyZXR1cm59aWYoYj09PXRoaXMudXApe3RoaXMubUcoYSxjKTtyZXR1cm59aWYoYj09PXRoaXMud3Ape3RoaXMubkcoYSxjKTtyZXR1cm59fWVsc2UhdC5acCYmYSBpbnN0YW5jZW9mIFEmJih0LlpwPSEwLHQudHJhY2UoJ0dyYXBoTGlua3NNb2RlbC5zZXREYXRhUHJvcGVydHkgaXMgbW9kaWZ5aW5nIGEgR3JhcGhPYmplY3QsICInK2EudG9TdHJpbmcoKSsnIicpLHQudHJhY2UoIiAgSXMgdGhhdCByZWFsbHkgeW91ciBpbnRlbnQ/IikpO3ZhciBkPXQuaGIoYSxiKTtkIT09YyYmKHQuU2EoYSxiLGMpLHRoaXMubXgoYSxiLGQsYykpfTthYT1QLnByb3RvdHlwZTsNCmFhLkh0PWZ1bmN0aW9uKGEsYil7Ri5wcm90b3R5cGUuSHQuY2FsbCh0aGlzLGEsYik7Zm9yKHZhciBjPXRoaXMuQmMuaztjLm5leHQoKTspdGhpcy5ZQShjLnZhbHVlLGEsYik7Zm9yKGM9dGhpcy5jbS5rO2MubmV4dCgpOyl7dmFyIGQ9Yy52YWx1ZSxmPWEsZz1iO2lmKHRoaXMuaGwoZCk9PT1mKXt2YXIgaD10aGlzLnlqO3QuU2EoZCxoLGcpO2RlKHRoaXMsImxpbmtGcm9tS2V5Iix2ZCxoLGQsZixnKTsic3RyaW5nIj09PXR5cGVvZiBoJiZ0aGlzLlFiKGQsaCl9dGhpcy5sbChkKT09PWYmJihoPXRoaXMuQmosdC5TYShkLGgsZyksZGUodGhpcywibGlua1RvS2V5Iix2ZCxoLGQsZixnKSwic3RyaW5nIj09PXR5cGVvZiBoJiZ0aGlzLlFiKGQsaCkpO3ZhciBrPXRoaXMuamwoZCk7aWYodC5pc0FycmF5KGspKWZvcih2YXIgbD10LnZiKGspLGg9dGhpcy5LaCxtPTA7bTxsO20rKyl0Lm1iKGssbSk9PT1mJiYodC5PRChrLG0sZyksZGUodGhpcywibGlua0xhYmVsS2V5cyIsd2QsaCxkLA0KZixnKSl9fTthYS5ZQT1mdW5jdGlvbihhLGIsYyl7aWYodGhpcy5SbShhKT09PWIpe3ZhciBkPXRoaXMuSGo7dC5TYShhLGQsYyk7ZGUodGhpcywibm9kZUdyb3VwS2V5Iix2ZCxkLGEsYixjKTsic3RyaW5nIj09PXR5cGVvZiBkJiZ0aGlzLlFiKGEsZCl9fTthYS5vQj1mdW5jdGlvbigpe0YucHJvdG90eXBlLm9CLmNhbGwodGhpcyk7Zm9yKHZhciBhPXRoaXMuaGosYj10LnZiKGEpLGM9MDtjPGI7YysrKXt2YXIgZD10Lm1iKGEsYyk7Q2UodGhpcyxkKX19Ow0KYWEuTXA9ZnVuY3Rpb24oYSl7Ri5wcm90b3R5cGUuTXAuY2FsbCh0aGlzLGEpO2E9dGhpcy5IYihhKTt2YXIgYj1wZSh0aGlzLGEpO2lmKG51bGwhPT1iKXtmb3IodmFyIGM9bmV3IEIoT2JqZWN0KSxiPWIuaztiLm5leHQoKTspe3ZhciBkPWIudmFsdWU7aWYodGhpcy5uZShkKSl7aWYodGhpcy5SbShkKT09PWEpe3ZhciBmPXRoaXMuSGo7ZGUodGhpcywibm9kZUdyb3VwS2V5Iix2ZCxmLGQsYSxhKTsic3RyaW5nIj09PXR5cGVvZiBmJiZ0aGlzLlFiKGQsZik7Yy5hZGQoZCl9fWVsc2V7dGhpcy5obChkKT09PWEmJihmPXRoaXMueWosZGUodGhpcywibGlua0Zyb21LZXkiLHZkLGYsZCxhLGEpLCJzdHJpbmciPT09dHlwZW9mIGYmJnRoaXMuUWIoZCxmKSxjLmFkZChkKSk7dGhpcy5sbChkKT09PWEmJihmPXRoaXMuQmosZGUodGhpcywibGlua1RvS2V5Iix2ZCxmLGQsYSxhKSwic3RyaW5nIj09PXR5cGVvZiBmJiZ0aGlzLlFiKGQsZiksYy5hZGQoZCkpO3ZhciBnPXRoaXMuamwoZCk7DQppZih0LmlzQXJyYXkoZykpZm9yKHZhciBoPXQudmIoZyksZj10aGlzLktoLGs9MDtrPGg7aysrKXQubWIoZyxrKT09PWEmJihkZSh0aGlzLCJsaW5rTGFiZWxLZXlzIix3ZCxmLGQsYSxhKSxjLmFkZChkKSl9fWZvcihjPWMuaztjLm5leHQoKTspcmUodGhpcyxhLGMudmFsdWUpfX07YWEuTHA9ZnVuY3Rpb24oYSl7Ri5wcm90b3R5cGUuTHAuY2FsbCh0aGlzLGEpO3ZhciBiPXRoaXMuUm0oYSk7bnVsbD09PXRoaXMudWYoYikmJnFlKHRoaXMsYixhKX07YWEuWHQ9ZnVuY3Rpb24oYSl7Ri5wcm90b3R5cGUuWHQuY2FsbCh0aGlzLGEpO3ZhciBiPXRoaXMuUm0oYSk7cmUodGhpcyxiLGEpfTt0LmcoUCwibGlua0NhdGVnb3J5UHJvcGVydHkiLFAucHJvdG90eXBlLnVwKTsNCnQuZGVmaW5lUHJvcGVydHkoUCx7dXA6ImxpbmtDYXRlZ29yeVByb3BlcnR5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5scn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5scjtiIT09YSYmKG5lKGEsUCwibGlua0NhdGVnb3J5UHJvcGVydHkiKSx0aGlzLmxyPWEsdGhpcy5qKCJsaW5rQ2F0ZWdvcnlQcm9wZXJ0eSIsYixhKSl9KTtQLnByb3RvdHlwZS5nZXRDYXRlZ29yeUZvckxpbmtEYXRhPVAucHJvdG90eXBlLmdldENhdGVnb3J5Rm9yTGlua0RhdGE9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuIiI7dmFyIGI9dGhpcy5scjtpZigiIj09PWIpcmV0dXJuIiI7Yj10LmhiKGEsYik7aWYodm9pZCAwPT09YilyZXR1cm4iIjtpZigic3RyaW5nIj09PXR5cGVvZiBiKXJldHVybiBiO3QubSgiZ2V0Q2F0ZWdvcnlGb3JMaW5rRGF0YSBmb3VuZCBhIG5vbi1zdHJpbmcgY2F0ZWdvcnkgZm9yICIrYSsiOiAiK2IpO3JldHVybiIifTsNClAucHJvdG90eXBlLnNldENhdGVnb3J5Rm9yTGlua0RhdGE9UC5wcm90b3R5cGUubUc9ZnVuY3Rpb24oYSxiKXt0LmkoYiwic3RyaW5nIixQLCJzZXRDYXRlZ29yeUZvckxpbmtEYXRhOmNhdCIpO2lmKG51bGwhPT1hKXt2YXIgYz10aGlzLmxyO2lmKCIiPT09YylyZXR1cm4iIjtpZih0aGlzLlhpKGEpKXt2YXIgZD10LmhiKGEsYyk7dm9pZCAwPT09ZCYmKGQ9IiIpO2QhPT1iJiYodC5TYShhLGMsYiksZGUodGhpcywibGlua0NhdGVnb3J5Iix2ZCxjLGEsZCxiKSwic3RyaW5nIj09PXR5cGVvZiBjJiZ0aGlzLlFiKGEsYykpfWVsc2UgdC5TYShhLGMsYil9fTsNCmZ1bmN0aW9uIEtkKGEpezE8YXJndW1lbnRzLmxlbmd0aCYmdC5tKCJUcmVlTW9kZWwgY29uc3RydWN0b3IgY2FuIG9ubHkgdGFrZSBvbmUgb3B0aW9uYWwgYXJndW1lbnQsIHRoZSBBcnJheSBvZiBub2RlIGRhdGEuIik7Ri5jYWxsKHRoaXMpO3RoaXMuSWo9InBhcmVudCI7dGhpcy55eT0hMTt0aGlzLkxyPSJwYXJlbnRMaW5rQ2F0ZWdvcnkiO3ZvaWQgMCE9PWEmJih0aGlzLkdnPWEpfXQuZ2EoIlRyZWVNb2RlbCIsS2QpO3QuS2EoS2QsRik7S2QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPTApO2lmKDI8PWEpcmV0dXJuIHRoaXMua0IoKTt2YXIgYj0oIiIhPT10aGlzLm5hbWU/dGhpcy5uYW1lOiIiKSsiIFRyZWVNb2RlbCI7aWYoMDxhKXtiKz0iXG4gbm9kZSBkYXRhOiI7YT10aGlzLkdnO3ZhciBjPXQudmIoYSksZDtmb3IoZD0wO2Q8YztkKyspdmFyIGY9dC5tYihhLGQpLGI9YisoIiAiK3RoaXMuSGIoZikrIjoiK3lkKGYpKX1yZXR1cm4gYn07DQpLZC5wcm90b3R5cGUuWnQ9ZnVuY3Rpb24oKXt2YXIgYT1GLnByb3RvdHlwZS5adC5jYWxsKHRoaXMpLGI9IiI7InBhcmVudCIhPT10aGlzLmVuJiYic3RyaW5nIj09PXR5cGVvZiB0aGlzLmVuJiYoYis9JyxcbiAgIm5vZGVQYXJlbnRLZXlQcm9wZXJ0eSI6ICcrdGhpcy5xdW90ZSh0aGlzLmVuKSk7cmV0dXJuIGErYn07S2QucHJvdG90eXBlLkd0PWZ1bmN0aW9uKGEpe0YucHJvdG90eXBlLkd0LmNhbGwodGhpcyxhKTthLm5vZGVQYXJlbnRLZXlQcm9wZXJ0eSYmKHRoaXMuZW49YS5ub2RlUGFyZW50S2V5UHJvcGVydHkpfTtLZC5wcm90b3R5cGUuYW49ZnVuY3Rpb24oYSl7cmV0dXJuIGF9O3QuZyhLZCwibm9kZVBhcmVudEtleVByb3BlcnR5IixLZC5wcm90b3R5cGUuZW4pOw0KdC5kZWZpbmVQcm9wZXJ0eShLZCx7ZW46Im5vZGVQYXJlbnRLZXlQcm9wZXJ0eSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSWp9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuSWo7YiE9PWEmJihuZShhLEtkLCJub2RlUGFyZW50S2V5UHJvcGVydHkiKSx0aGlzLklqPWEsdGhpcy5qKCJub2RlUGFyZW50S2V5UHJvcGVydHkiLGIsYSkpfSk7dC5nKEtkLCJjb3BpZXNQYXJlbnRLZXlPZk5vZGVEYXRhIixLZC5wcm90b3R5cGUuYmwpO3QuZGVmaW5lUHJvcGVydHkoS2Qse2JsOiJjb3BpZXNQYXJlbnRLZXlPZk5vZGVEYXRhIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55eX0sZnVuY3Rpb24oYSl7dGhpcy55eSE9PWEmJih0LmkoYSwiYm9vbGVhbiIsS2QsImNvcGllc1BhcmVudEtleU9mTm9kZURhdGEiKSx0aGlzLnl5PWEpfSk7DQpLZC5wcm90b3R5cGUuZ2V0UGFyZW50S2V5Rm9yTm9kZURhdGE9S2QucHJvdG90eXBlLlNtPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT1hKXt2YXIgYj10aGlzLklqO2lmKCIiIT09YiYmKGI9dC5oYihhLGIpLHZvaWQgMCE9PWIpKXtpZihvZShiKSlyZXR1cm4gYjt0Lm0oIlBhcmVudEtleSB2YWx1ZSBmb3Igbm9kZSBkYXRhICIrYSsiIGlzIG5vdCBhIG51bWJlciBvciBhIHN0cmluZzogIitiKX19fTsNCktkLnByb3RvdHlwZS5zZXRQYXJlbnRLZXlGb3JOb2RlRGF0YT1LZC5wcm90b3R5cGUubWg9ZnVuY3Rpb24oYSxiKXtudWxsPT09YiYmKGI9dm9pZCAwKTt2b2lkIDA9PT1ifHxvZShiKXx8dC5iYyhiLCJudW1iZXIgb3Igc3RyaW5nIixLZCwic2V0UGFyZW50S2V5Rm9yTm9kZURhdGE6a2V5Iik7aWYobnVsbCE9PWEpe3ZhciBjPXRoaXMuSWo7aWYoIiIhPT1jKWlmKGI9dGhpcy5hbihiKSx0aGlzLm5lKGEpKXt2YXIgZD10LmhiKGEsYyk7ZCE9PWImJihyZSh0aGlzLGQsYSksdC5TYShhLGMsYiksbnVsbD09PXRoaXMudWYoYikmJnFlKHRoaXMsYixhKSxkZSh0aGlzLCJub2RlUGFyZW50S2V5Iix2ZCxjLGEsZCxiKSwic3RyaW5nIj09PXR5cGVvZiBjJiZ0aGlzLlFiKGEsYykpfWVsc2UgdC5TYShhLGMsYil9fTt0LmcoS2QsInBhcmVudExpbmtDYXRlZ29yeVByb3BlcnR5IixLZC5wcm90b3R5cGUuREopOw0KdC5kZWZpbmVQcm9wZXJ0eShLZCx7REo6InBhcmVudExpbmtDYXRlZ29yeVByb3BlcnR5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Mcn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5McjtiIT09YSYmKG5lKGEsS2QsInBhcmVudExpbmtDYXRlZ29yeVByb3BlcnR5IiksdGhpcy5Mcj1hLHRoaXMuaigicGFyZW50TGlua0NhdGVnb3J5UHJvcGVydHkiLGIsYSkpfSk7S2QucHJvdG90eXBlLmdldFBhcmVudExpbmtDYXRlZ29yeUZvck5vZGVEYXRhPUtkLnByb3RvdHlwZS5LST1mdW5jdGlvbihhKXtpZihudWxsPT09YSlyZXR1cm4iIjt2YXIgYj10aGlzLkxyO2lmKCIiPT09YilyZXR1cm4iIjtiPXQuaGIoYSxiKTtpZih2b2lkIDA9PT1iKXJldHVybiIiO2lmKCJzdHJpbmciPT09dHlwZW9mIGIpcmV0dXJuIGI7dC5tKCJnZXRQYXJlbnRMaW5rQ2F0ZWdvcnlGb3JOb2RlRGF0YSBmb3VuZCBhIG5vbi1zdHJpbmcgY2F0ZWdvcnkgZm9yICIrYSsiOiAiK2IpO3JldHVybiIifTsNCktkLnByb3RvdHlwZS5zZXRQYXJlbnRMaW5rQ2F0ZWdvcnlGb3JOb2RlRGF0YT1LZC5wcm90b3R5cGUuUEo9ZnVuY3Rpb24oYSxiKXt0LmkoYiwic3RyaW5nIixLZCwic2V0UGFyZW50TGlua0NhdGVnb3J5Rm9yTm9kZURhdGE6Y2F0Iik7aWYobnVsbCE9PWEpe3ZhciBjPXRoaXMuTHI7aWYoIiI9PT1jKXJldHVybiIiO2lmKHRoaXMubmUoYSkpe3ZhciBkPXQuaGIoYSxjKTt2b2lkIDA9PT1kJiYoZD0iIik7ZCE9PWImJih0LlNhKGEsYyxiKSxkZSh0aGlzLCJwYXJlbnRMaW5rQ2F0ZWdvcnkiLHZkLGMsYSxkLGIpLCJzdHJpbmciPT09dHlwZW9mIGMmJnRoaXMuUWIoYSxjKSl9ZWxzZSB0LlNhKGEsYyxiKX19O0tkLnByb3RvdHlwZS5jb3B5Tm9kZURhdGE9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7YT1GLnByb3RvdHlwZS5jb3B5Tm9kZURhdGEuY2FsbCh0aGlzLGEpO3RoaXMuYmx8fCIiPT09dGhpcy5Janx8dC5TYShhLHRoaXMuSWosdm9pZCAwKTtyZXR1cm4gYX07DQpLZC5wcm90b3R5cGUuc2V0RGF0YVByb3BlcnR5PWZ1bmN0aW9uKGEsYixjKXtlJiYodC5pKGEsIm9iamVjdCIsS2QsInNldERhdGFQcm9wZXJ0eTpkYXRhIiksdC5pKGIsInN0cmluZyIsS2QsInNldERhdGFQcm9wZXJ0eTpwcm9wbmFtZSIpLCIiPT09YiYmdC5tKCJUcmVlTW9kZWwuc2V0RGF0YVByb3BlcnR5OiBwcm9wZXJ0eSBuYW1lIG11c3Qgbm90IGJlIGFuIGVtcHR5IHN0cmluZyB3aGVuIHNldHRpbmcgIithKyIgdG8gIitjKSk7aWYodGhpcy5uZShhKSlpZihiPT09dGhpcy5pail0aGlzLmNCKGEsYyk7ZWxzZXtpZihiPT09dGhpcy5xbCl7dGhpcy50eChhLGMpO3JldHVybn1pZihiPT09dGhpcy5lbil7dGhpcy5taChhLGMpO3JldHVybn19ZWxzZSF0LlpwJiZhIGluc3RhbmNlb2YgUSYmKHQuWnA9ITAsdC50cmFjZSgnVHJlZU1vZGVsLnNldERhdGFQcm9wZXJ0eSBpcyBtb2RpZnlpbmcgYSBHcmFwaE9iamVjdCwgIicrYS50b1N0cmluZygpKyciJyksdC50cmFjZSgiICBJcyB0aGF0IHJlYWxseSB5b3VyIGludGVudD8iKSk7DQp2YXIgZD10LmhiKGEsYik7ZCE9PWMmJih0LlNhKGEsYixjKSx0aGlzLm14KGEsYixkLGMpKX07YWE9S2QucHJvdG90eXBlO2FhLkh0PWZ1bmN0aW9uKGEsYil7Ri5wcm90b3R5cGUuSHQuY2FsbCh0aGlzLGEsYik7Zm9yKHZhciBjPXRoaXMuQmMuaztjLm5leHQoKTspdGhpcy5ZQShjLnZhbHVlLGEsYil9O2FhLllBPWZ1bmN0aW9uKGEsYixjKXtpZih0aGlzLlNtKGEpPT09Yil7dmFyIGQ9dGhpcy5Jajt0LlNhKGEsZCxjKTtkZSh0aGlzLCJub2RlUGFyZW50S2V5Iix2ZCxkLGEsYixjKTsic3RyaW5nIj09PXR5cGVvZiBkJiZ0aGlzLlFiKGEsZCl9fTsNCmFhLk1wPWZ1bmN0aW9uKGEpe0YucHJvdG90eXBlLk1wLmNhbGwodGhpcyxhKTthPXRoaXMuSGIoYSk7dmFyIGI9cGUodGhpcyxhKTtpZihudWxsIT09Yil7Zm9yKHZhciBjPW5ldyBCKE9iamVjdCksYj1iLms7Yi5uZXh0KCk7KXt2YXIgZD1iLnZhbHVlO2lmKHRoaXMubmUoZCkmJnRoaXMuU20oZCk9PT1hKXt2YXIgZj10aGlzLklqO2RlKHRoaXMsIm5vZGVQYXJlbnRLZXkiLHZkLGYsZCxhLGEpOyJzdHJpbmciPT09dHlwZW9mIGYmJnRoaXMuUWIoZCxmKTtjLmFkZChkKX19Zm9yKGM9Yy5rO2MubmV4dCgpOylyZSh0aGlzLGEsYy52YWx1ZSl9fTthYS5McD1mdW5jdGlvbihhKXtGLnByb3RvdHlwZS5McC5jYWxsKHRoaXMsYSk7dmFyIGI9dGhpcy5TbShhKSxiPXRoaXMuYW4oYik7bnVsbD09PXRoaXMudWYoYikmJnFlKHRoaXMsYixhKX07YWEuWHQ9ZnVuY3Rpb24oYSl7Ri5wcm90b3R5cGUuWHQuY2FsbCh0aGlzLGEpO3ZhciBiPXRoaXMuU20oYSk7cmUodGhpcyxiLGEpfTsNCmZ1bmN0aW9uIERlKGEsYixjKXt0LkFjKHRoaXMpO3ZvaWQgMD09PWE/YT0iIjp0LmkoYSwic3RyaW5nIixEZSwiY29uc3RydWN0b3I6dGFyZ2V0cHJvcCIpO3ZvaWQgMD09PWI/Yj1hOnQuaShiLCJzdHJpbmciLERlLCJjb25zdHJ1Y3Rvcjpzb3VyY2Vwcm9wIik7dm9pZCAwPT09Yz9jPW51bGw6bnVsbCE9PWMmJnQuaShjLCJmdW5jdGlvbiIsRGUsImNvbnN0cnVjdG9yOmNvbnYiKTt0aGlzLm1EPSIiO3RoaXMucGc9bnVsbDt0aGlzLlJ2PWE7dGhpcy5Qdj10aGlzLnl6PTA7dGhpcy5oRD1udWxsO3RoaXMuSnY9Yjt0aGlzLnV5PWM7dGhpcy5oej1FZTt0aGlzLm15PW51bGx9dC5nYSgiQmluZGluZyIsRGUpO3ZhciBFZTtEZS5PbmVXYXk9RWU9dC53KERlLCJPbmVXYXkiLDEpO3ZhciBGZTtEZS5Ud29XYXk9RmU9dC53KERlLCJUd29XYXkiLDIpOw0KRGUucGFyc2VFbnVtPWZ1bmN0aW9uKGEsYil7dC5pKGEsImZ1bmN0aW9uIixEZSwicGFyc2VFbnVtOmN0b3IiKTt0LkFhKGIsYSxEZSwicGFyc2VFbnVtOmRlZnZhbCIpO3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gdC5PbShhLGMpfHxifX07dmFyIHlkO0RlLnRvU3RyaW5nPXlkPWZ1bmN0aW9uKGEpe3ZhciBiPWE7dC5yYihhKSYmKGEudGV4dD9iPWEudGV4dDphLm5hbWU/Yj1hLm5hbWU6dm9pZCAwIT09YS5rZXk/Yj1hLmtleTp2b2lkIDAhPT1hLmlkP2I9YS5pZDphLmNvbnN0cnVjdG9yPT09T2JqZWN0JiYoYS5UZXh0P2I9YS5UZXh0OmEuTmFtZT9iPWEuTmFtZTp2b2lkIDAhPT1hLktleT9iPWEuS2V5OnZvaWQgMCE9PWEuSWQ/Yj1hLklkOnZvaWQgMCE9PWEuSUQmJihiPWEuSUQpKSk7cmV0dXJuIHZvaWQgMD09PWI/InVuZGVmaW5lZCI6bnVsbD09PWI/Im51bGwiOmIudG9TdHJpbmcoKX07DQpEZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQmluZGluZygiK3RoaXMubm4rIiAiK3RoaXMuVXQrIjoiK3RoaXMuZ0IrIikifTtEZS5wcm90b3R5cGUuZnJlZXplPWZ1bmN0aW9uKCl7dGhpcy5vYj0hMDtyZXR1cm4gdGhpc307RGUucHJvdG90eXBlLkxhPWZ1bmN0aW9uKCl7dGhpcy5vYj0hMTtyZXR1cm4gdGhpc307dC5nKERlLCJ0YXJnZXRJZCIsRGUucHJvdG90eXBlLm5uKTt0LmRlZmluZVByb3BlcnR5KERlLHtubjpudWxsfSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm1EfSxmdW5jdGlvbihhKXt0LkwodGhpcyk7dC5pKGEsInN0cmluZyIsRGUsInRhcmdldElkIik7dGhpcy5tRD1hfSk7dC5nKERlLCJ0YXJnZXRQcm9wZXJ0eSIsRGUucHJvdG90eXBlLlV0KTsNCnQuZGVmaW5lUHJvcGVydHkoRGUse1V0OiJ0YXJnZXRQcm9wZXJ0eSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUnZ9LGZ1bmN0aW9uKGEpe3QuTCh0aGlzKTt0LmkoYSwic3RyaW5nIixEZSwidGFyZ2V0UHJvcGVydHkiKTt0aGlzLlJ2PWF9KTt0LmcoRGUsInNvdXJjZU5hbWUiLERlLnByb3RvdHlwZS5TdCk7dC5kZWZpbmVQcm9wZXJ0eShEZSx7U3Q6InNvdXJjZU5hbWUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmhEfSxmdW5jdGlvbihhKXt0LkwodGhpcyk7dC5pKGEsInN0cmluZyIsRGUsInNvdXJjZU5hbWUiKTt0aGlzLmhEPWF9KTt0LmcoRGUsInNvdXJjZVByb3BlcnR5IixEZS5wcm90b3R5cGUuZ0IpO3QuZGVmaW5lUHJvcGVydHkoRGUse2dCOiJzb3VyY2VQcm9wZXJ0eSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSnZ9LGZ1bmN0aW9uKGEpe3QuTCh0aGlzKTt0LmkoYSwic3RyaW5nIixEZSwic291cmNlUHJvcGVydHkiKTt0aGlzLkp2PWF9KTsNCnQuZyhEZSwiY29udmVydGVyIixEZS5wcm90b3R5cGUuZEUpO3QuZGVmaW5lUHJvcGVydHkoRGUse2RFOiJjb252ZXJ0ZXIifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnV5fSxmdW5jdGlvbihhKXt0LkwodGhpcyk7bnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsRGUsImNvbnZlcnRlciIpO3RoaXMudXk9YX0pO3QuZyhEZSwiYmFja0NvbnZlcnRlciIsRGUucHJvdG90eXBlLlNEKTt0LmRlZmluZVByb3BlcnR5KERlLHtTRDoiYmFja0NvbnZlcnRlciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXl9LGZ1bmN0aW9uKGEpe3QuTCh0aGlzKTtudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIixEZSwiYmFja0NvbnZlcnRlciIpO3RoaXMubXk9YX0pO3QuZyhEZSwibW9kZSIsRGUucHJvdG90eXBlLm1vZGUpOw0KdC5kZWZpbmVQcm9wZXJ0eShEZSx7bW9kZToibW9kZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHp9LGZ1bmN0aW9uKGEpe3QuTCh0aGlzKTt0LkFhKGEsRGUsRGUsIm1vZGUiKTt0aGlzLmh6PWF9KTtEZS5wcm90b3R5cGUubWFrZVR3b1dheT1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT1udWxsKTtudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIixEZSwibWFrZVR3b1dheSIpO3RoaXMubW9kZT1GZTt0aGlzLlNEPWE7cmV0dXJuIHRoaXN9O0RlLnByb3RvdHlwZS5vZk9iamVjdD1EZS5wcm90b3R5cGUuTEE9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9IiIpO2UmJnQuaShhLCJzdHJpbmciLERlLCJvZk9iamVjdDpzcmNuYW1lIik7dGhpcy5TdD1hO3JldHVybiB0aGlzfTsNCkRlLnByb3RvdHlwZS51cGRhdGVUYXJnZXQ9RGUucHJvdG90eXBlLlFHPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLkp2O2lmKCFjfHxkPT09Yyl7Yz10aGlzLlJ2O3ZhciBmPXRoaXMudXk7aWYobnVsbD09PWYmJiIiPT09Yyl0LnRyYWNlKCJCaW5kaW5nIGVycm9yOiB0YXJnZXQgcHJvcGVydHkgaXMgdGhlIGVtcHR5IHN0cmluZzogIit0aGlzLnRvU3RyaW5nKCkpO2Vsc2V7ZSYmInN0cmluZyI9PT10eXBlb2YgYyYmKCJmdW5jdGlvbiIhPT10eXBlb2YgYS5zZXRBdHRyaWJ1dGUmJjA8Yy5sZW5ndGgmJiJfIiE9PWNbMF0mJiF0Lkt3KGEsYyk/dC50cmFjZSgiQmluZGluZyBlcnJvcjogdW5kZWZpbmVkIHRhcmdldCBwcm9wZXJ0eTogIitjKyIgb24gIithLnRvU3RyaW5nKCkpOiJuYW1lIj09PWMmJmEgaW5zdGFuY2VvZiBRJiZ0LnRyYWNlKCJCaW5kaW5nIGVycm9yOiBjYW5ub3QgbW9kaWZ5IEdyYXBoT2JqZWN0Lm5hbWUgb24gIithLnRvU3RyaW5nKCkpKTt2YXIgZz1iOyIiIT09DQpkJiYoZz10LmhiKGIsZCkpO2lmKHZvaWQgMCE9PWcpaWYobnVsbD09PWYpIiIhPT1jJiZ0LlNhKGEsYyxnKTtlbHNlIHRyeXtpZigiIiE9PWMpe3ZhciBoPWYoZyxhKTtlJiZ2b2lkIDA9PT1oJiZ0LnRyYWNlKCdCaW5kaW5nIHdhcm5pbmc6IGNvbnZlcnNpb24gZnVuY3Rpb24gcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gc2V0dGluZyB0YXJnZXQgcHJvcGVydHkgIicrYysnIiBvbiAnK2EudG9TdHJpbmcoKSsiLCBmdW5jdGlvbiBpczogIitmKTt0LlNhKGEsYyxoKX1lbHNlIGYoZyxhKX1jYXRjaChrKXtlJiZ0LnRyYWNlKCJCaW5kaW5nIGVycm9yOiAiK2sudG9TdHJpbmcoKSsnIHNldHRpbmcgdGFyZ2V0IHByb3BlcnR5ICInK2MrJyIgb24gJythLnRvU3RyaW5nKCkrIiB3aXRoIGNvbnZlcnNpb24gZnVuY3Rpb246ICIrZil9fX19Ow0KRGUucHJvdG90eXBlLnVwZGF0ZVNvdXJjZT1EZS5wcm90b3R5cGUucEI9ZnVuY3Rpb24oYSxiLGMsZCl7aWYodGhpcy5oej09PUZlKXt2YXIgZj10aGlzLlJ2O2lmKCFjfHxmPT09Yyl7Yz10aGlzLkp2O3ZhciBnPXRoaXMubXk7aWYobnVsbCE9PWd8fCIiIT09Yyl7dmFyIGg9YTsiIiE9PWYmJihoPXQuaGIoYSxmKSk7aWYodm9pZCAwIT09aClpZihudWxsPT09ZylkJiZkLmJhPyhlJiZkLmJhLmlqPT09YyYmZC5iYS5uZShiKSYmdC50cmFjZSgiQmluZGluZyBlcnJvcjogY2Fubm90IGhhdmUgVHdvV2F5IEJpbmRpbmcgb24gbm9kZSBkYXRhIGtleSBwcm9wZXJ0eTogIit0aGlzLnRvU3RyaW5nKCkpLGQuYmEuc2V0RGF0YVByb3BlcnR5KGIsYyxoKSk6dC5TYShiLGMsaCk7ZWxzZSB0cnl7aWYoIiIhPT1jKXt2YXIgaz1nKGgsYik7ZCYmZC5iYT8oZSYmKGQuYmEuaWo9PT1jJiZkLmJhLm5lKGIpJiZ0LnRyYWNlKCJCaW5kaW5nIGVycm9yOiBjYW5ub3QgaGF2ZSBUd29XYXkgQmluZGluZyBvbiBub2RlIGRhdGEga2V5IHByb3BlcnR5OiAiKw0KdGhpcy50b1N0cmluZygpKSx2b2lkIDA9PT1rJiZ0LnRyYWNlKCdCaW5kaW5nIHdhcm5pbmc6IGNvbnZlcnNpb24gZnVuY3Rpb24gcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gc2V0dGluZyBzb3VyY2UgcHJvcGVydHkgIicrYysnIiBvbiAnK2IudG9TdHJpbmcoKSsiLCBmdW5jdGlvbiBpczogIitnKSksZC5iYS5zZXREYXRhUHJvcGVydHkoYixjLGspKTp0LlNhKGIsYyxrKX1lbHNlIGcoaCxiKX1jYXRjaChsKXtlJiZ0LnRyYWNlKCJCaW5kaW5nIGVycm9yOiAiK2wudG9TdHJpbmcoKSsnIHNldHRpbmcgc291cmNlIHByb3BlcnR5ICInK2MrJyIgb24gJytiLnRvU3RyaW5nKCkrIiB3aXRoIGNvbnZlcnNpb24gZnVuY3Rpb246ICIrZyl9fX19fTtmdW5jdGlvbiBjZSgpe3RoaXMuakg9KG5ldyBCKHRkKSkuZnJlZXplKCk7dGhpcy5ZYj0iIjt0aGlzLnBDPSExfXQuZ2EoIlRyYW5zYWN0aW9uIixjZSk7DQpjZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYSl7dmFyIGI9IlRyYW5zYWN0aW9uOiAiK3RoaXMubmFtZSsiICIrdGhpcy5kaC5jb3VudC50b1N0cmluZygpKyh0aGlzLm9wPyIiOiIsIGluY29tcGxldGUiKTtpZih2b2lkIDAhPT1hJiYwPGEpZm9yKHZhciBjPXRoaXMuZGguY291bnQsZD0wO2Q8YztkKyspe3ZhciBmPXRoaXMuZGgud2EoZCk7bnVsbCE9PWYmJihiKz0iXG4gICIrZi50b1N0cmluZyhhLTEpKX1yZXR1cm4gYn07Y2UucHJvdG90eXBlLmNsZWFyPWNlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGg7YS5MYSgpO2Zvcih2YXIgYj1hLmNvdW50LTE7MDw9YjtiLS0pe3ZhciBjPWEud2EoYik7bnVsbCE9PWMmJmMuY2xlYXIoKX1hLmNsZWFyKCk7YS5mcmVlemUoKX07Y2UucHJvdG90eXBlLmNhblVuZG89Y2UucHJvdG90eXBlLmNhblVuZG89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcH07DQpjZS5wcm90b3R5cGUudW5kbz1jZS5wcm90b3R5cGUudW5kbz1mdW5jdGlvbigpe2lmKHRoaXMuY2FuVW5kbygpKWZvcih2YXIgYT10aGlzLmRoLmNvdW50LTE7MDw9YTthLS0pe3ZhciBiPXRoaXMuZGgud2EoYSk7bnVsbCE9PWImJmIudW5kbygpfX07Y2UucHJvdG90eXBlLmNhblJlZG89Y2UucHJvdG90eXBlLmNhblJlZG89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcH07Y2UucHJvdG90eXBlLnJlZG89Y2UucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oKXtpZih0aGlzLmNhblJlZG8oKSlmb3IodmFyIGE9dGhpcy5kaC5jb3VudCxiPTA7YjxhO2IrKyl7dmFyIGM9dGhpcy5kaC53YShiKTtudWxsIT09YyYmYy5yZWRvKCl9fTt0LkEoY2Use2RoOiJjaGFuZ2VzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qSH0pO3QuZyhjZSwibmFtZSIsY2UucHJvdG90eXBlLm5hbWUpOw0KdC5kZWZpbmVQcm9wZXJ0eShjZSx7bmFtZToibmFtZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWWJ9LGZ1bmN0aW9uKGEpe3RoaXMuWWI9YX0pO3QuZyhjZSwiaXNDb21wbGV0ZSIsY2UucHJvdG90eXBlLm9wKTt0LmRlZmluZVByb3BlcnR5KGNlLHtvcDoiaXNDb21wbGV0ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucEN9LGZ1bmN0aW9uKGEpe3RoaXMucEM9YX0pO2Z1bmN0aW9uIHpkKCl7dGhpcy5qej1uZXcgQyhGKTt0aGlzLkxlPSExO3RoaXMucEg9KG5ldyBCKGNlKSkuZnJlZXplKCk7dGhpcy5VZz0tMTt0aGlzLkVDPTk5OTt0aGlzLnhpPSExO3RoaXMuQXU9bnVsbDt0aGlzLlVrPTA7dGhpcy5ueT0hMTtlJiYodGhpcy5ueT0hMCk7dGhpcy4kZz0obmV3IEIoInN0cmluZyIpKS5mcmVlemUoKTt0aGlzLnJvPW5ldyBCKCJudW1iZXIiKTt0aGlzLlJ5PSEwO3RoaXMuZHo9ITF9dC5nYSgiVW5kb01hbmFnZXIiLHpkKTsNCnpkLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihhKXtmb3IodmFyIGI9IlVuZG9NYW5hZ2VyICIrdGhpcy5jaisiPCIrdGhpcy5oaXN0b3J5LmNvdW50KyI8PSIrdGhpcy5DQSxiPWIrIlsiLGM9dGhpcy5GRi5jb3VudCxkPTA7ZDxjO2QrKykwPGQmJihiKz0iICIpLGIrPXRoaXMuRkYud2EoZCk7Yis9Il0iO2lmKHZvaWQgMCE9PWEmJjA8YSlmb3IoYz10aGlzLmhpc3RvcnkuY291bnQsZD0wO2Q8YztkKyspYis9IlxuICIrdGhpcy5oaXN0b3J5LndhKGQpLnRvU3RyaW5nKGEtMSk7cmV0dXJuIGJ9Ow0KemQucHJvdG90eXBlLmNsZWFyPXpkLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaGlzdG9yeTthLkxhKCk7Zm9yKHZhciBiPWEuY291bnQtMTswPD1iO2ItLSl7dmFyIGM9YS53YShiKTtudWxsIT09YyYmYy5jbGVhcigpfWEuY2xlYXIoKTt0aGlzLlVnPS0xO2EuZnJlZXplKCk7dGhpcy54aT0hMTt0aGlzLkF1PW51bGw7dGhpcy5Vaz0wO3RoaXMuJGcuTGEoKTt0aGlzLiRnLmNsZWFyKCk7dGhpcy4kZy5mcmVlemUoKTt0aGlzLnJvLmNsZWFyKCl9O3pkLnByb3RvdHlwZS5hZGRNb2RlbD16ZC5wcm90b3R5cGUuRkg9ZnVuY3Rpb24oYSl7dGhpcy5qei5hZGQoYSl9O3pkLnByb3RvdHlwZS5yZW1vdmVNb2RlbD16ZC5wcm90b3R5cGUuS0o9ZnVuY3Rpb24oYSl7dGhpcy5qei5yZW1vdmUoYSl9Ow0KemQucHJvdG90eXBlLnN0YXJ0VHJhbnNhY3Rpb249emQucHJvdG90eXBlLnNjPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPSIiKTtudWxsPT09YSYmKGE9IiIpO2lmKHRoaXMuc2IpcmV0dXJuITE7ITA9PT10aGlzLlJ5JiYodGhpcy5SeT0hMSx0aGlzLlVrKyssdGhpcy5YYygiU3RhcnRpbmdGaXJzdFRyYW5zYWN0aW9uIixhLHRoaXMuWWkpLDA8dGhpcy5VayYmdGhpcy5Vay0tKTt0aGlzLmlzRW5hYmxlZCYmKHRoaXMuJGcuTGEoKSx0aGlzLiRnLmFkZChhKSx0aGlzLiRnLmZyZWV6ZSgpLG51bGw9PT10aGlzLllpP3RoaXMucm8uYWRkKDApOnRoaXMucm8uYWRkKHRoaXMuWWkuZGguY291bnQpKTt0aGlzLlVrKys7dmFyIGI9MT09PXRoaXMuSmU7YiYmdGhpcy5YYygiU3RhcnRlZFRyYW5zYWN0aW9uIixhLHRoaXMuWWkpO3JldHVybiBifTt6ZC5wcm90b3R5cGUuY29tbWl0VHJhbnNhY3Rpb249emQucHJvdG90eXBlLkNlPWZ1bmN0aW9uKGEpe3JldHVybiBHZSh0aGlzLCEwLGEpfTsNCnpkLnByb3RvdHlwZS5yb2xsYmFja1RyYW5zYWN0aW9uPXpkLnByb3RvdHlwZS5OcD1mdW5jdGlvbigpe3JldHVybiBHZSh0aGlzLCExLCIiKX07DQpmdW5jdGlvbiBHZShhLGIsYyl7aWYoYS5zYilyZXR1cm4hMTthLlV6JiYxPmEuSmUmJnQudHJhY2UoIkVuZGluZyB0cmFuc2FjdGlvbiB3aXRob3V0IGhhdmluZyBzdGFydGVkIGEgdHJhbnNhY3Rpb246ICIrYyk7dmFyIGQ9MT09PWEuSmU7ZCYmYiYmYS5pc0VuYWJsZWQmJmEuWGMoIkNvbW1pdHRpbmdUcmFuc2FjdGlvbiIsYyxhLllpKTt2YXIgZj0wO2lmKDA8YS5KZSYmKGEuVWstLSxhLmlzRW5hYmxlZCkpe3ZhciBnPWEuJGcuY291bnQ7MDxnJiYoIiI9PT1jJiYoYz1hLiRnLndhKDApKSxhLiRnLkxhKCksYS4kZy5xZChnLTEpLGEuJGcuZnJlZXplKCkpO2c9YS5yby5jb3VudDswPGcmJihmPWEucm8ud2EoZy0xKSxhLnJvLnFkKGctMSkpfWc9YS5ZaTtpZihkKXtpZihiKXthLmR6PSExO2lmKGEuaXNFbmFibGVkJiZudWxsIT09Zyl7Yj1nO2Iub3A9ITA7Yi5uYW1lPWM7ZD1hLmhpc3Rvcnk7ZC5MYSgpO2ZvcihmPWQuY291bnQtMTtmPmEuY2o7Zi0tKWc9ZC53YShmKSxudWxsIT09DQpnJiZnLmNsZWFyKCksZC5xZChmKSxhLmR6PSEwO2Y9YS5DQTswPT09ZiYmKGY9MSk7MDxmJiZkLmNvdW50Pj1mJiYoZz1kLndhKDApLG51bGwhPT1nJiZnLmNsZWFyKCksZC5xZCgwKSxhLlVnLS0pO2QuYWRkKGIpO2EuVWcrKztkLmZyZWV6ZSgpO2c9Yn1hLlhjKCJDb21taXR0ZWRUcmFuc2FjdGlvbiIsYyxnKX1lbHNle2EueGk9ITA7dHJ5e2EuaXNFbmFibGVkJiZudWxsIT09ZyYmKGcub3A9ITAsZy51bmRvKCkpfWZpbmFsbHl7YS5YYygiUm9sbGVkQmFja1RyYW5zYWN0aW9uIixjLGcpLGEueGk9ITF9bnVsbCE9PWcmJmcuY2xlYXIoKX1hLkF1PW51bGw7cmV0dXJuITB9aWYoYS5pc0VuYWJsZWQmJiFiJiZudWxsIT09Zyl7YT1mO2M9Zy5kaDtmb3IoYj1jLmNvdW50LTE7Yj49YTtiLS0pZD1jLndhKGIpLG51bGwhPT1kJiZkLnVuZG8oKSxjLkxhKCksYy5xZChiKTtjLmZyZWV6ZSgpfXJldHVybiExfQ0KemQucHJvdG90eXBlLmNhblVuZG89emQucHJvdG90eXBlLmNhblVuZG89ZnVuY3Rpb24oKXtpZighdGhpcy5pc0VuYWJsZWR8fDA8dGhpcy5KZXx8dGhpcy5zYilyZXR1cm4hMTt2YXIgYT10aGlzLklHO3JldHVybiBudWxsIT09YSYmYS5jYW5VbmRvKCk/ITA6ITF9O3pkLnByb3RvdHlwZS51bmRvPXpkLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKCl7aWYodGhpcy5jYW5VbmRvKCkpe3ZhciBhPXRoaXMuSUc7dHJ5e3RoaXMuWGMoIlN0YXJ0aW5nVW5kbyIsIlVuZG8iLGEpLHRoaXMueGk9ITAsdGhpcy5VZy0tLGEudW5kbygpfWNhdGNoKGIpe3QudHJhY2UoInVuZG8gZXJyb3I6ICIrYi50b1N0cmluZygpKX1maW5hbGx5e3RoaXMueGk9ITEsdGhpcy5YYygiRmluaXNoZWRVbmRvIiwiVW5kbyIsYSl9fX07DQp6ZC5wcm90b3R5cGUuY2FuUmVkbz16ZC5wcm90b3R5cGUuY2FuUmVkbz1mdW5jdGlvbigpe2lmKCF0aGlzLmlzRW5hYmxlZHx8MDx0aGlzLkplfHx0aGlzLnNiKXJldHVybiExO3ZhciBhPXRoaXMuSEc7cmV0dXJuIG51bGwhPT1hJiZhLmNhblJlZG8oKT8hMDohMX07emQucHJvdG90eXBlLnJlZG89emQucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oKXtpZih0aGlzLmNhblJlZG8oKSl7dmFyIGE9dGhpcy5IRzt0cnl7dGhpcy5YYygiU3RhcnRpbmdSZWRvIiwiUmVkbyIsYSksdGhpcy54aT0hMCx0aGlzLlVnKyssYS5yZWRvKCl9Y2F0Y2goYil7dC50cmFjZSgicmVkbyBlcnJvcjogIitiLnRvU3RyaW5nKCkpfWZpbmFsbHl7dGhpcy54aT0hMSx0aGlzLlhjKCJGaW5pc2hlZFJlZG8iLCJSZWRvIixhKX19fTsNCnpkLnByb3RvdHlwZS5YYz1mdW5jdGlvbihhLGIsYyl7dm9pZCAwPT09YyYmKGM9bnVsbCk7dmFyIGQ9bmV3IHRkO2QudGQ9dWQ7ZC5wcm9wZXJ0eU5hbWU9YTtkLm9iamVjdD1jO2Qub2xkVmFsdWU9Yjtmb3IoYT10aGlzLnJKO2EubmV4dCgpOyliPWEudmFsdWUsZC5iYT1iLGIuaHcoZCl9O3pkLnByb3RvdHlwZS5oYW5kbGVDaGFuZ2VkPXpkLnByb3RvdHlwZS5RRT1mdW5jdGlvbihhKXtpZih0aGlzLmlzRW5hYmxlZCYmIXRoaXMuc2ImJiF0aGlzLnNraXBzRXZlbnQoYSkpe3ZhciBiPXRoaXMuWWk7bnVsbD09PWImJih0aGlzLkF1PWI9bmV3IGNlKTt2YXIgYz1hLmNvcHkoKSxiPWIuZGg7Yi5MYSgpO2IuYWRkKGMpO2IuZnJlZXplKCk7dGhpcy5VeiYmMD49dGhpcy5KZSYmIXRoaXMuUnkmJihhPWEuaCxudWxsIT09YSYmITE9PT1hLmxmfHx0LnRyYWNlKCJDaGFuZ2Ugbm90IHdpdGhpbiBhIHRyYW5zYWN0aW9uOiAiK2MudG9TdHJpbmcoKSkpfX07DQp6ZC5wcm90b3R5cGUuc2tpcHNFdmVudD1mdW5jdGlvbihhKXtpZihudWxsPT09YXx8MD5hLnRkLnZhbHVlKXJldHVybiEwO2E9YS5vYmplY3Q7aWYoYSBpbnN0YW5jZW9mIFEpe2lmKGE9YS5sYXllcixudWxsIT09YSYmYS55YylyZXR1cm4hMH1lbHNlIGlmKGEgaW5zdGFuY2VvZiAkZCYmYS55YylyZXR1cm4hMDtyZXR1cm4hMX07dC5BKHpkLHtySjoibW9kZWxzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qei5rfSk7dC5nKHpkLCJpc0VuYWJsZWQiLHpkLnByb3RvdHlwZS5pc0VuYWJsZWQpO3QuZGVmaW5lUHJvcGVydHkoemQse2lzRW5hYmxlZDoiaXNFbmFibGVkIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MZX0sZnVuY3Rpb24oYSl7dGhpcy5MZT1hfSk7dC5BKHpkLHtJRzoidHJhbnNhY3Rpb25Ub1VuZG8ifSxmdW5jdGlvbigpe3JldHVybiAwPD10aGlzLmNqJiZ0aGlzLmNqPD10aGlzLmhpc3RvcnkuY291bnQtMT90aGlzLmhpc3Rvcnkud2EodGhpcy5jaik6bnVsbH0pOw0KdC5BKHpkLHtIRzoidHJhbnNhY3Rpb25Ub1JlZG8ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmNqPHRoaXMuaGlzdG9yeS5jb3VudC0xP3RoaXMuaGlzdG9yeS53YSh0aGlzLmNqKzEpOm51bGx9KTt0LkEoemQse3NiOiJpc1VuZG9pbmdSZWRvaW5nIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54aX0pO3QuQSh6ZCx7aGlzdG9yeToiaGlzdG9yeSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucEh9KTt0LmcoemQsIm1heEhpc3RvcnlMZW5ndGgiLHpkLnByb3RvdHlwZS5DQSk7dC5kZWZpbmVQcm9wZXJ0eSh6ZCx7Q0E6Im1heEhpc3RvcnlMZW5ndGgifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkVDfSxmdW5jdGlvbihhKXt0aGlzLkVDPWF9KTt0LkEoemQse2NqOiJoaXN0b3J5SW5kZXgifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlVnfSk7dC5BKHpkLHtZaToiY3VycmVudFRyYW5zYWN0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5BdX0pOw0KdC5BKHpkLHtKZToidHJhbnNhY3Rpb25MZXZlbCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVWt9KTt0LkEoemQse2VGOiJpc0luVHJhbnNhY3Rpb24ifSxmdW5jdGlvbigpe3JldHVybiAwPHRoaXMuVWt9KTt0LmRlZmluZVByb3BlcnR5KHpkLHtVejoiY2hlY2tzVHJhbnNhY3Rpb25MZXZlbCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubnl9LGZ1bmN0aW9uKGEpe3RoaXMubnk9YX0pO3QuQSh6ZCx7RkY6Im5lc3RlZFRyYW5zYWN0aW9uTmFtZXMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLiRnfSk7ZnVuY3Rpb24gb2EoKXswPGFyZ3VtZW50cy5sZW5ndGgmJnQuYWQob2EpO3QuQWModGhpcyk7dGhpcy5VPW51bGw7dGhpcy5PQj10aGlzLlBCPXRoaXMuJEI9dGhpcy5RQj0hMTt0aGlzLk5rPXRoaXMuank9bnVsbDt0aGlzLkVEPTEuMDU7dGhpcy5ZQj0xO3RoaXMuZXo9TmFOO3RoaXMuQkM9bnVsbDt0aGlzLkZEPU5hTn10LmdhKCJDb21tYW5kSGFuZGxlciIsb2EpOw0Kb2EucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNvbW1hbmRIYW5kbGVyIn07dC5BKG9hLHtoOiJkaWFncmFtIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5VfSk7b2EucHJvdG90eXBlLndkPWZ1bmN0aW9uKGEpe2UmJm51bGwhPT1hJiZ0LmwoYSx6LG9hLCJzZXREaWFncmFtIik7dGhpcy5VPWF9Ow0Kb2EucHJvdG90eXBlLmRvS2V5RG93bj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZihudWxsIT09YSl7dmFyIGI9YS5SLGM9dC5VbT9iLkJwOmIuY29udHJvbCxkPWIuc2hpZnQsZj1iLmFsdCxnPWIua2V5OyFjfHwiQyIhPT1nJiYiSW5zZXJ0IiE9PWc/YyYmIlgiPT09Z3x8ZCYmIkRlbCI9PT1nP3RoaXMuY2FuQ3V0U2VsZWN0aW9uKCkmJnRoaXMuY3V0U2VsZWN0aW9uKCk6IkRlbCI9PT1nP3RoaXMuY2FuRGVsZXRlU2VsZWN0aW9uKCkmJnRoaXMuZGVsZXRlU2VsZWN0aW9uKCk6YyYmIlYiPT09Z3x8ZCYmIkluc2VydCI9PT1nP3RoaXMuY2FuUGFzdGVTZWxlY3Rpb24oKSYmdGhpcy5wYXN0ZVNlbGVjdGlvbigpOmMmJiJZIj09PWd8fGYmJmQmJiJCYWNrc3BhY2UiPT09Zz90aGlzLmNhblJlZG8oKSYmdGhpcy5yZWRvKCk6YyYmIloiPT09Z3x8ZiYmIkJhY2tzcGFjZSI9PT1nP3RoaXMuY2FuVW5kbygpJiZ0aGlzLnVuZG8oKTpjJiYiQSI9PT1nP3RoaXMuY2FuU2VsZWN0QWxsKCkmJg0KdGhpcy5zZWxlY3RBbGwoKToiRXNjIj09PWc/dGhpcy5jYW5TdG9wQ29tbWFuZCgpJiZ0aGlzLnN0b3BDb21tYW5kKCk6IlVwIj09PWc/YS5wZiYmKGM/YS5zY3JvbGwoInBpeGVsIiwidXAiKTphLnNjcm9sbCgibGluZSIsInVwIikpOiJEb3duIj09PWc/YS5wZiYmKGM/YS5zY3JvbGwoInBpeGVsIiwiZG93biIpOmEuc2Nyb2xsKCJsaW5lIiwiZG93biIpKToiTGVmdCI9PT1nP2Eub2YmJihjP2Euc2Nyb2xsKCJwaXhlbCIsImxlZnQiKTphLnNjcm9sbCgibGluZSIsImxlZnQiKSk6IlJpZ2h0Ij09PWc/YS5vZiYmKGM/YS5zY3JvbGwoInBpeGVsIiwicmlnaHQiKTphLnNjcm9sbCgibGluZSIsInJpZ2h0IikpOiJQYWdlVXAiPT09Zz9kJiZhLm9mP2Euc2Nyb2xsKCJwYWdlIiwibGVmdCIpOmEucGYmJmEuc2Nyb2xsKCJwYWdlIiwidXAiKToiUGFnZURvd24iPT09Zz9kJiZhLm9mP2Euc2Nyb2xsKCJwYWdlIiwicmlnaHQiKTphLnBmJiZhLnNjcm9sbCgicGFnZSIsImRvd24iKToiSG9tZSI9PT0NCmc/KGI9YS5FZCxjJiZhLnBmP2EucG9zaXRpb249bmV3IHcoYS5wb3NpdGlvbi54LGIueSk6IWMmJmEub2YmJihhLnBvc2l0aW9uPW5ldyB3KGIueCxhLnBvc2l0aW9uLnkpKSk6IkVuZCI9PT1nPyhiPWEuRWQsZD1hLnhiLGMmJmEucGY/YS5wb3NpdGlvbj1uZXcgdyhkLngsYi5ib3R0b20tZC5oZWlnaHQpOiFjJiZhLm9mJiYoYS5wb3NpdGlvbj1uZXcgdyhiLnJpZ2h0LWQud2lkdGgsZC55KSkpOiJTdWJ0cmFjdCI9PT1nP3RoaXMuY2FuRGVjcmVhc2Vab29tKCkmJnRoaXMuZGVjcmVhc2Vab29tKCk6IkFkZCI9PT1nP3RoaXMuY2FuSW5jcmVhc2Vab29tKCkmJnRoaXMuaW5jcmVhc2Vab29tKCk6YyYmIjAiPT09Zz90aGlzLmNhblJlc2V0Wm9vbSgpJiZ0aGlzLnJlc2V0Wm9vbSgpOmQmJiJaIj09PWc/dGhpcy5jYW5ab29tVG9GaXQoKSYmdGhpcy56b29tVG9GaXQoKTpjJiYhZCYmIkciPT09Zz90aGlzLmNhbkdyb3VwU2VsZWN0aW9uKCkmJnRoaXMuZ3JvdXBTZWxlY3Rpb24oKTpjJiYNCmQmJiJHIj09PWc/dGhpcy5jYW5Vbmdyb3VwU2VsZWN0aW9uKCkmJnRoaXMudW5ncm91cFNlbGVjdGlvbigpOmIuZXZlbnQmJjExMz09PWIuZXZlbnQud2hpY2g/dGhpcy5jYW5FZGl0VGV4dEJsb2NrKCkmJnRoaXMuZWRpdFRleHRCbG9jaygpOmIuZXZlbnQmJjkzPT09Yi5ldmVudC53aGljaD90aGlzLmNhblNob3dDb250ZXh0TWVudSgpJiZ0aGlzLnNob3dDb250ZXh0TWVudSgpOmIuYnViYmxlcz0hMDp0aGlzLmNhbkNvcHlTZWxlY3Rpb24oKSYmdGhpcy5jb3B5U2VsZWN0aW9uKCl9fTtvYS5wcm90b3R5cGUuZG9LZXlVcD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtudWxsIT09YSYmKGEuUi5idWJibGVzPSEwKX07b2EucHJvdG90eXBlLnN0b3BDb21tYW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO2lmKG51bGwhPT1hKXt2YXIgYj1hLlVhO2IgaW5zdGFuY2VvZiBIZSYmYS5QZSYmYS5qdygpO251bGwhPT1iJiZiLmRvQ2FuY2VsKCl9fTsNCm9hLnByb3RvdHlwZS5jYW5TdG9wQ29tbWFuZD1mdW5jdGlvbigpe3JldHVybiEwfTtvYS5wcm90b3R5cGUuc2VsZWN0QWxsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO2lmKG51bGwhPT1hKXthLmthKCk7dHJ5e2EuJGI9IndhaXQiO2EuQmEoIkNoYW5naW5nU2VsZWN0aW9uIik7Zm9yKHZhciBiPWEucmw7Yi5uZXh0KCk7KWIudmFsdWUuZWI9ITA7Zm9yKGI9YS5raDtiLm5leHQoKTspYi52YWx1ZS5lYj0hMDtmb3IoYj1hLmxpbmtzO2IubmV4dCgpOyliLnZhbHVlLmViPSEwfWZpbmFsbHl7YS5CYSgiQ2hhbmdlZFNlbGVjdGlvbiIpLGEuJGI9IiJ9fX07b2EucHJvdG90eXBlLmNhblNlbGVjdEFsbD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtyZXR1cm4gbnVsbCE9PWEmJmEuUGV9Ow0Kb2EucHJvdG90eXBlLmRlbGV0ZVNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZihudWxsIT09YSYmIWEuQmEoIlNlbGVjdGlvbkRlbGV0aW5nIixhLnNlbGVjdGlvbikpdHJ5e2EuJGI9IndhaXQiO2Euc2MoIkRlbGV0ZSIpO2EuQmEoIkNoYW5naW5nU2VsZWN0aW9uIik7Zm9yKHZhciBiPW5ldyBDKEUpLGM9YS5zZWxlY3Rpb24uaztjLm5leHQoKTspSWUoYixjLnZhbHVlLCEwLHRoaXMudUU/SW5maW5pdHk6MCxmdW5jdGlvbihhKXtyZXR1cm4gYS5jYW5EZWxldGUoKX0pO2EuWEEoYiwhMCk7YS5CYSgiU2VsZWN0aW9uRGVsZXRlZCIsYil9ZmluYWxseXthLkJhKCJDaGFuZ2VkU2VsZWN0aW9uIiksYS5DZSgiRGVsZXRlIiksYS4kYj0iIn19O29hLnByb3RvdHlwZS5jYW5EZWxldGVTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7cmV0dXJuIG51bGw9PT1hfHxhLmFifHxhLlplfHwhYS5Za3x8MD09PWEuc2VsZWN0aW9uLmNvdW50PyExOiEwfTsNCmZ1bmN0aW9uIEllKGEsYixjLGQsZil7aWYoIShhLmNvbnRhaW5zKGIpfHwodm9pZCAwPT09ZiYmKGY9bnVsbCksbnVsbCE9PWYmJiFmKGIpfHxiIGluc3RhbmNlb2YgSmUpKSlpZihhLmFkZChiKSxiIGluc3RhbmNlb2YgUyl7aWYoYyYmYiBpbnN0YW5jZW9mIFQpZm9yKHZhciBnPWIuUmM7Zy5uZXh0KCk7KXt2YXIgaD1nLnZhbHVlO0llKGEsaCxjLGQsZil9Zm9yKGg9Yi5xZTtoLm5leHQoKTspaWYoZz1oLnZhbHVlLCFhLmNvbnRhaW5zKGcpKXt2YXIgaz1nLmFhLGw9Zy5jYTtudWxsIT09ayYmYS5jb250YWlucyhrKSYmbnVsbCE9PWwmJmEuY29udGFpbnMobCk/SWUoYSxnLGMsZCxmKTpudWxsIT09ayYmbnVsbCE9PWx8fEllKGEsZyxjLGQsZil9aWYoMTxkKWZvcihiPWIuREUoKTtiLm5leHQoKTspaD1iLnZhbHVlLEllKGEsaCxjLGQtMSxmKX1lbHNlIGlmKGIgaW5zdGFuY2VvZiBWKWZvcihoPWIuZWs7aC5uZXh0KCk7KUllKGEsaC52YWx1ZSxjLGQsZil9DQpvYS5wcm90b3R5cGUuV289ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPW5ldyBqYShFLEUpO2ZvcihhPWEuazthLm5leHQoKTspe3ZhciBmPWEudmFsdWU7S2UodGhpcyxmLGIsZCxjKX1pZihudWxsIT09Yil7Yz1iLmJhO2E9ITE7bnVsbCE9PWIud2IuRmQmJihhPWIud2IuRmQuJGgpO2Zvcih2YXIgZz1uZXcgQyhWKSxoPW5ldyBqYShWLFYpLGs9ZC5rO2submV4dCgpOylpZihmPWsudmFsdWUsZiBpbnN0YW5jZW9mIFYpYXx8bnVsbCE9PWYuYWEmJm51bGwhPT1mLmNhfHxnLmFkZChmKTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBLZCYmZiBpbnN0YW5jZW9mIFMmJm51bGwhPT1mLmRhdGEpe3ZhciBsPWYsZj1rLmtleSxtPWYuZUEoKTtudWxsIT09bSYmKChtPWQuemEobSkpPyhjLm1oKGwuZGF0YSxjLkhiKG0uZGF0YSkpLGw9Yi5RZihsLmRhdGEpLGY9Zi5ldCgpLG51bGwhPT1mJiZudWxsIT09bCYmaC5hZGQoZixsKSk6Yy5taChsLmRhdGEsdm9pZCAwKSl9MDxnLmNvdW50JiZiLlhBKGcsITEpOw0KaWYoMDxoLmNvdW50KWZvcihiPWguaztiLm5leHQoKTspZC5hZGQoYi5rZXksYi52YWx1ZSl9Zm9yKGI9ZC5rO2IubmV4dCgpOyliLnZhbHVlLlFiKCk7cmV0dXJuIGR9Ow0KZnVuY3Rpb24gS2UoYSxiLGMsZCxmKXtpZihudWxsPT09Ynx8ZiYmIWIuY2FuQ29weSgpKXJldHVybiBudWxsO2lmKGQuY29udGFpbnMoYikpcmV0dXJuIGE9ZC56YShiKSxhIGluc3RhbmNlb2YgRT9hOm51bGw7dmFyIGc9bnVsbCxoPWIuZGF0YTtpZihudWxsIT09aCYmbnVsbCE9PWMpe3ZhciBrPWMuYmE7YiBpbnN0YW5jZW9mIFY/ayBpbnN0YW5jZW9mIFAmJihoPWsuZ0UoaCksdC5yYihoKSYmKGsuJHYoaCksZz1jLlFmKGgpKSk6KGg9ay5jb3B5Tm9kZURhdGEoaCksdC5yYihoKSYmKGsueW0oaCksZz1jLmdoKGgpKSl9ZWxzZSBMZShiKSxnPWIuY29weSgpLG51bGwhPT1jJiZnIGluc3RhbmNlb2YgRSYmYy5hZGQoZyk7aWYoIShnIGluc3RhbmNlb2YgRSkpcmV0dXJuIG51bGw7Zy5lYj0hMTtnLnpnPSExO2QuYWRkKGIsZyk7aWYoYiBpbnN0YW5jZW9mIFMpe2ZvcihrPWIucWU7ay5uZXh0KCk7KXtoPWsudmFsdWU7aWYoaC5hYT09PWIpe3ZhciBsPWQuemEoaCk7bnVsbCE9PWwmJg0KKGwuYWE9Zyl9aC5jYT09PWImJihsPWQuemEoaCksbnVsbCE9PWwmJihsLmNhPWcpKX1pZihiIGluc3RhbmNlb2YgVCYmZyBpbnN0YW5jZW9mIFQpZm9yKGI9Yi5SYztiLm5leHQoKTspaz1LZShhLGIudmFsdWUsYyxkLGYpLGsgaW5zdGFuY2VvZiBWfHxudWxsPT09a3x8KGsuZ2I9Zyl9ZWxzZSBpZihiIGluc3RhbmNlb2YgVilmb3Ioaz1iLmFhLG51bGwhPT1rJiYoaz1kLnphKGspLG51bGwhPT1rJiYoZy5hYT1rKSksaz1iLmNhLG51bGwhPT1rJiYoaz1kLnphKGspLG51bGwhPT1rJiYoZy5jYT1rKSksYj1iLmVrO2IubmV4dCgpOylrPUtlKGEsYi52YWx1ZSxjLGQsZiksbnVsbCE9PWsmJihrLiRkPWcpO3JldHVybiBnfQ0Kb2EucHJvdG90eXBlLmNvcHlTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7aWYobnVsbCE9PWEpe2Zvcih2YXIgYj1uZXcgQyhFKSxhPWEuc2VsZWN0aW9uLms7YS5uZXh0KCk7KUllKGIsYS52YWx1ZSwhMCx0aGlzLmZFP0luZmluaXR5OjAsZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2FuQ29weSgpfSk7dGhpcy5jb3B5VG9DbGlwYm9hcmQoYil9fTtvYS5wcm90b3R5cGUuY2FuQ29weVNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtyZXR1cm4gbnVsbCE9PWEmJmEuU2kmJmEuZHcmJjAhPT1hLnNlbGVjdGlvbi5jb3VudD8hMDohMX07b2EucHJvdG90eXBlLmN1dFNlbGVjdGlvbj1mdW5jdGlvbigpe3RoaXMuY29weVNlbGVjdGlvbigpO3RoaXMuZGVsZXRlU2VsZWN0aW9uKCl9Ow0Kb2EucHJvdG90eXBlLmNhbkN1dFNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtyZXR1cm4gbnVsbCE9PWEmJiFhLmFiJiYhYS5aZSYmYS5TaSYmYS5ZayYmYS5kdyYmMCE9PWEuc2VsZWN0aW9uLmNvdW50PyEwOiExfTtvYS5wcm90b3R5cGUuY29weVRvQ2xpcGJvYXJkPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaDtpZihudWxsIT09Yil7dmFyIGM9bnVsbDtpZihudWxsPT09YSl0LlNzPW51bGwsdC5rdz0iIjtlbHNle3ZhciBjPWIuYmEsZD0hMSxmPSExLGc9bnVsbDt0cnl7YyBpbnN0YW5jZW9mIEtkJiYoZD1jLmJsLGMuYmw9dGhpcy5aeiksYyBpbnN0YW5jZW9mIFAmJihmPWMuYWwsYy5hbD10aGlzLll6KSxnPWIuV28oYSxudWxsLCEwKX1maW5hbGx5e2MgaW5zdGFuY2VvZiBLZCYmKGMuYmw9ZCksYyBpbnN0YW5jZW9mIFAmJihjLmFsPWYpLGM9bmV3IEIoRSksYy5PZShnKSx0LlNzPWMsdC5rdz1iLmJhLkxtfX1iLkJhKCJDbGlwYm9hcmRDaGFuZ2VkIixjKX19Ow0Kb2EucHJvdG90eXBlLnBhc3RlRnJvbUNsaXBib2FyZD1mdW5jdGlvbigpe3ZhciBhPW5ldyBDKEUpLGI9dC5TcztpZihudWxsPT09YilyZXR1cm4gYTt2YXIgYz10aGlzLmg7aWYobnVsbD09PWN8fHQua3chPT1jLmJhLkxtKXJldHVybiBhO3ZhciBkPWMuYmEsZj0hMSxnPSExLGg9bnVsbDt0cnl7ZCBpbnN0YW5jZW9mIEtkJiYoZj1kLmJsLGQuYmw9dGhpcy5aeiksZCBpbnN0YW5jZW9mIFAmJihnPWQuYWwsZC5hbD10aGlzLll6KSxoPWMuV28oYixjLCExKX1maW5hbGx5e2ZvcihkIGluc3RhbmNlb2YgS2QmJihkLmJsPWYpLGQgaW5zdGFuY2VvZiBQJiYoZC5hbD1nKSxiPWguaztiLm5leHQoKTspYz1iLnZhbHVlLGQ9Yi5rZXksYy5sb2NhdGlvbi5OKCl8fChkLmxvY2F0aW9uLk4oKT9jLmxvY2F0aW9uPWQubG9jYXRpb246IWMucG9zaXRpb24uTigpJiZkLnBvc2l0aW9uLk4oKSYmKGMucG9zaXRpb249ZC5wb3NpdGlvbikpLGEuYWRkKGMpfXJldHVybiBhfTsNCm9hLnByb3RvdHlwZS5wYXN0ZVNlbGVjdGlvbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmg7aWYobnVsbCE9PWIpdHJ5e2IuJGI9IndhaXQiO2Iuc2MoIlBhc3RlIik7Yi5CYSgiQ2hhbmdpbmdTZWxlY3Rpb24iKTt2YXIgYz10aGlzLnBhc3RlRnJvbUNsaXBib2FyZCgpOzA8Yy5jb3VudCYmTWUoYik7Zm9yKHZhciBkPWMuaztkLm5leHQoKTspZC52YWx1ZS5lYj0hMDtiLkJhKCJDaGFuZ2VkU2VsZWN0aW9uIik7aWYoYSBpbnN0YW5jZW9mIHcpe3ZhciBmPWIuY29tcHV0ZVBhcnRzQm91bmRzKGIuc2VsZWN0aW9uKTtpZihmKXt2YXIgZz1iLndiLkZkLGg9Zy5jb21wdXRlRWZmZWN0aXZlQ29sbGVjdGlvbihiLnNlbGVjdGlvbik7Zy5tb3ZlUGFydHMoaCxuZXcgdyhhLngtZi5EYSxhLnktZi5QYSksITEpfX1iLkJhKCJDbGlwYm9hcmRQYXN0ZWQiLGMpfWZpbmFsbHl7Yi5DZSgiUGFzdGUiKSxiLiRiPSIifX07DQpvYS5wcm90b3R5cGUuY2FuUGFzdGVTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7cmV0dXJuIG51bGw9PT1hfHxhLmFifHxhLlplfHwhYS56bXx8IWEuZHd8fG51bGw9PT10LlNzfHx0Lmt3IT09YS5iYS5MbT8hMTohMH07b2EucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7bnVsbCE9PWEmJmEuamEudW5kbygpfTtvYS5wcm90b3R5cGUuY2FuVW5kbz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtyZXR1cm4gbnVsbD09PWF8fGEuYWJ8fGEuWmU/ITE6YS5NeiYmYS5qYS5jYW5VbmRvKCl9O29hLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO251bGwhPT1hJiZhLmphLnJlZG8oKX07b2EucHJvdG90eXBlLmNhblJlZG89ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7cmV0dXJuIG51bGw9PT1hfHxhLmFifHxhLlplPyExOmEuTXomJmEuamEuY2FuUmVkbygpfTsNCm9hLnByb3RvdHlwZS5kZWNyZWFzZVpvb209ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9MS90aGlzLmF1KTt0LnEoYSxvYSwiZGVjcmVhc2Vab29tOmZhY3RvciIpO3ZhciBiPXRoaXMuaDtudWxsIT09YiYmYi5EbT09PVhlJiYoYSo9Yi5zY2FsZSxhPGIuQ2d8fGE+Yi5CZ3x8KGIuc2NhbGU9YSkpfTtvYS5wcm90b3R5cGUuY2FuRGVjcmVhc2Vab29tPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPTEvdGhpcy5hdSk7dC5xKGEsb2EsImNhbkRlY3JlYXNlWm9vbTpmYWN0b3IiKTt2YXIgYj10aGlzLmg7aWYobnVsbD09PWJ8fGIuRG0hPT1YZSlyZXR1cm4hMTthKj1iLnNjYWxlO3JldHVybiBhPGIuQ2d8fGE+Yi5CZz8hMTpiLk5zfTsNCm9hLnByb3RvdHlwZS5pbmNyZWFzZVpvb209ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcy5hdSk7dC5xKGEsb2EsImluY3JlYXNlWm9vbTpmYWN0b3IiKTt2YXIgYj10aGlzLmg7bnVsbCE9PWImJmIuRG09PT1YZSYmKGEqPWIuc2NhbGUsYTxiLkNnfHxhPmIuQmd8fChiLnNjYWxlPWEpKX07b2EucHJvdG90eXBlLmNhbkluY3JlYXNlWm9vbT1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT10aGlzLmF1KTt0LnEoYSxvYSwiY2FuSW5jcmVhc2Vab29tOmZhY3RvciIpO3ZhciBiPXRoaXMuaDtpZihudWxsPT09Ynx8Yi5EbSE9PVhlKXJldHVybiExO2EqPWIuc2NhbGU7cmV0dXJuIGE8Yi5DZ3x8YT5iLkJnPyExOmIuTnN9O29hLnByb3RvdHlwZS5yZXNldFpvb209ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcy5Ycyk7dC5xKGEsb2EsInJlc2V0Wm9vbTpuZXdzY2FsZSIpO3ZhciBiPXRoaXMuaDtudWxsPT09Ynx8YTxiLkNnfHxhPmIuQmd8fChiLnNjYWxlPWEpfTsNCm9hLnByb3RvdHlwZS5jYW5SZXNldFpvb209ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcy5Ycyk7dC5xKGEsb2EsImNhblJlc2V0Wm9vbTpuZXdzY2FsZSIpO3ZhciBiPXRoaXMuaDtyZXR1cm4gbnVsbD09PWJ8fGE8Yi5DZ3x8YT5iLkJnPyExOmIuTnN9O29hLnByb3RvdHlwZS56b29tVG9GaXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7aWYobnVsbCE9PWEpe3ZhciBiPWEuc2NhbGUsYz1hLnBvc2l0aW9uO2IhPT10aGlzLkZEfHxpc05hTih0aGlzLmV6KT8odGhpcy5lej1iLHRoaXMuQkM9Yy5jb3B5KCksYS56b29tVG9GaXQoKSxhLlVmKCksdGhpcy5GRD1hLnNjYWxlKTooYS5zY2FsZT10aGlzLmV6LGEucG9zaXRpb249dGhpcy5CQyl9fTtvYS5wcm90b3R5cGUuY2FuWm9vbVRvRml0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO3JldHVybiBudWxsPT09YT8hMTphLk5zfTsNCm9hLnByb3RvdHlwZS5jb2xsYXBzZVRyZWU9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9bnVsbCk7dmFyIGI9dGhpcy5oO2lmKG51bGw9PT1iKXJldHVybiExO2Iuc2MoIkNvbGxhcHNlIFRyZWUiKTt2YXIgYz1uZXcgQihTKTtpZihhIGluc3RhbmNlb2YgUyYmYS5RYylhLmNvbGxhcHNlVHJlZSgpLGMuYWRkKGEpO2Vsc2UgZm9yKGE9Yi5zZWxlY3Rpb24uazthLm5leHQoKTspe3ZhciBkPWEudmFsdWU7ZCBpbnN0YW5jZW9mIFMmJmQuUWMmJihkLmNvbGxhcHNlVHJlZSgpLGMuYWRkKGQpKX1iLkJhKCJUcmVlQ29sbGFwc2VkIixjKTtiLkNlKCJDb2xsYXBzZSBUcmVlIil9Ow0Kb2EucHJvdG90eXBlLmNhbkNvbGxhcHNlVHJlZT1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT1udWxsKTt2YXIgYj10aGlzLmg7aWYobnVsbD09PWJ8fGIuYWIpcmV0dXJuITE7aWYoYSBpbnN0YW5jZW9mIFMpe2lmKCFhLlFjKXJldHVybiExO2lmKDA8YS5GdygpLmNvdW50KXJldHVybiEwfWVsc2UgZm9yKGE9Yi5zZWxlY3Rpb24uazthLm5leHQoKTspaWYoYj1hLnZhbHVlLGIgaW5zdGFuY2VvZiBTJiZiLlFjJiYwPGIuRncoKS5jb3VudClyZXR1cm4hMDtyZXR1cm4hMX07DQpvYS5wcm90b3R5cGUuZXhwYW5kVHJlZT1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT1udWxsKTt2YXIgYj10aGlzLmg7aWYobnVsbD09PWIpcmV0dXJuITE7Yi5zYygiRXhwYW5kIFRyZWUiKTt2YXIgYz1uZXcgQihTKTtpZihhIGluc3RhbmNlb2YgUyYmIWEuUWMpYS5leHBhbmRUcmVlKCksYy5hZGQoYSk7ZWxzZSBmb3IoYT1iLnNlbGVjdGlvbi5rO2EubmV4dCgpOyl7dmFyIGQ9YS52YWx1ZTtkIGluc3RhbmNlb2YgUyYmIWQuUWMmJihkLmV4cGFuZFRyZWUoKSxjLmFkZChkKSl9Yi5CYSgiVHJlZUV4cGFuZGVkIixjKTtiLkNlKCJFeHBhbmQgVHJlZSIpfTsNCm9hLnByb3RvdHlwZS5jYW5FeHBhbmRUcmVlPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPW51bGwpO3ZhciBiPXRoaXMuaDtpZihudWxsPT09Ynx8Yi5hYilyZXR1cm4hMTtpZihhIGluc3RhbmNlb2YgUyl7aWYoYS5RYylyZXR1cm4hMTtpZigwPGEuRncoKS5jb3VudClyZXR1cm4hMH1lbHNlIGZvcihhPWIuc2VsZWN0aW9uLms7YS5uZXh0KCk7KWlmKGI9YS52YWx1ZSxiIGluc3RhbmNlb2YgUyYmIWIuUWMmJjA8Yi5GdygpLmNvdW50KXJldHVybiEwO3JldHVybiExfTsNCm9hLnByb3RvdHlwZS5ncm91cFNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZihudWxsIT09YSl7dmFyIGI9YS5iYTtpZihudWxsIT09YiYmYiBpbnN0YW5jZW9mIFApe3ZhciBjPXRoaXMuT3o7aWYobnVsbCE9PWMpe3ZhciBkPW51bGw7dHJ5e2EuJGI9IndhaXQiO2Euc2MoIkdyb3VwIik7YS5CYSgiQ2hhbmdpbmdTZWxlY3Rpb24iKTtmb3IodmFyIGY9bmV3IEIoRSksZz1hLnNlbGVjdGlvbi5rO2cubmV4dCgpOyl7dmFyIGg9Zy52YWx1ZTtoLkxkKCkmJmguY2FuR3JvdXAoKSYmZi5hZGQoaCl9Zm9yKHZhciBrPW5ldyBCKEUpLGw9Zi5rO2wubmV4dCgpOyl7Zm9yKHZhciBtPWwudmFsdWUsaD0hMSxnPWYuaztnLm5leHQoKTspaWYobS5tbChnLnZhbHVlKSl7aD0hMDticmVha31ofHxrLmFkZChtKX1pZigwPGsuY291bnQpe2c9ay5rO2cubmV4dCgpO3ZhciBuPWcudmFsdWUuZ2I7aWYobnVsbCE9PW4pZm9yKDtudWxsIT09bjspe2c9ay5rO2cubmV4dCgpO2ZvcihmPQ0KITE7Zy5uZXh0KCk7KWlmKG09Zy52YWx1ZSwhbS5tbChuKSl7Zj0hMDticmVha31pZihmKW49bi5nYjtlbHNlIGJyZWFrfWlmKGMgaW5zdGFuY2VvZiBUKUxlKGMpLGQ9Yy5jb3B5KCksZCBpbnN0YW5jZW9mIFQmJmEuYWRkKGQpO2Vsc2UgaWYoYi50QShjKSl7dmFyIHA9Yi5jb3B5Tm9kZURhdGEoYyk7dC5yYihwKSYmKGIueW0ocCksZD1hLkV3KHApKX1pZihkIGluc3RhbmNlb2YgVCl7bnVsbCE9PW4mJnRoaXMuaXNWYWxpZE1lbWJlcihuLGQpJiYoZC5nYj1uKTtmb3IoZz1rLms7Zy5uZXh0KCk7KW09Zy52YWx1ZSx0aGlzLmlzVmFsaWRNZW1iZXIoZCxtKSYmKG0uZ2I9ZCk7YS5zZWxlY3QoZCl9fWEuQmEoIkNoYW5nZWRTZWxlY3Rpb24iKTthLkJhKCJTZWxlY3Rpb25Hcm91cGVkIixkKX1maW5hbGx5e2EuQ2UoIkdyb3VwIiksYS4kYj0iIn19fX19Ow0Kb2EucHJvdG90eXBlLmNhbkdyb3VwU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO2lmKG51bGw9PT1hfHxhLmFifHxhLlplfHwhYS56bXx8IWEuTW8pcmV0dXJuITE7dmFyIGI9YS5iYTtpZihudWxsPT09Ynx8IShiIGluc3RhbmNlb2YgUCl8fG51bGw9PT10aGlzLk96KXJldHVybiExO2ZvcihhPWEuc2VsZWN0aW9uLms7YS5uZXh0KCk7KWlmKGI9YS52YWx1ZSxiLkxkKCkmJmIuY2FuR3JvdXAoKSlyZXR1cm4hMDtyZXR1cm4hMX07ZnVuY3Rpb24gWWUoYSl7dmFyIGI9dC5DYigpO2ZvcihhPWEuazthLm5leHQoKTspe3ZhciBjPWEudmFsdWU7YyBpbnN0YW5jZW9mIFZ8fGIucHVzaChjKX1hPW5ldyBDKEUpO2Zvcih2YXIgYz1iLmxlbmd0aCxkPTA7ZDxjO2QrKyl7Zm9yKHZhciBmPWJbZF0sZz0hMCxoPTA7aDxjO2grKylpZihmLm1sKGJbaF0pKXtnPSExO2JyZWFrfWcmJmEuYWRkKGYpfXQueWEoYik7cmV0dXJuIGF9DQpvYS5wcm90b3R5cGUuaXNWYWxpZE1lbWJlcj1mdW5jdGlvbihhLGIpe2lmKG51bGw9PT1ifHxhPT09Ynx8YiBpbnN0YW5jZW9mIFYpcmV0dXJuITE7aWYobnVsbCE9PWEpe2lmKGE9PT1ifHxhLm1sKGIpKXJldHVybiExO3ZhciBjPWEudXQ7aWYobnVsbCE9PWMmJiFjKGEsYil8fG51bGw9PT1hLmRhdGEmJm51bGwhPT1iLmRhdGF8fG51bGwhPT1hLmRhdGEmJm51bGw9PT1iLmRhdGEpcmV0dXJuITF9Yz10aGlzLnV0O3JldHVybiBudWxsIT09Yz9jKGEsYik6ITB9Ow0Kb2EucHJvdG90eXBlLnVuZ3JvdXBTZWxlY3Rpb249ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9bnVsbCk7dmFyIGI9dGhpcy5oO2lmKG51bGwhPT1iKXt2YXIgYz1iLmJhO2lmKG51bGwhPT1jJiZjIGluc3RhbmNlb2YgUCl0cnl7Yi4kYj0id2FpdCI7Yi5zYygiVW5ncm91cCIpO2IuQmEoIkNoYW5naW5nU2VsZWN0aW9uIik7dmFyIGQ9bmV3IEIoVCk7aWYoYSBpbnN0YW5jZW9mIFQpZC5hZGQoYSk7ZWxzZSBmb3IodmFyIGY9Yi5zZWxlY3Rpb24uaztmLm5leHQoKTspe3ZhciBnPWYudmFsdWU7ZyBpbnN0YW5jZW9mIFQmJmcuY2FuVW5ncm91cCgpJiZkLmFkZChnKX1pZigwPGQuY291bnQpZm9yKGIuancoKSxmPWQuaztmLm5leHQoKTspe3ZhciBoPWYudmFsdWU7aC5leHBhbmRTdWJHcmFwaCgpO3ZhciBrPWguZGF0YSxsPWguZ2IsbT1udWxsIT09bCYmbnVsbCE9PWwuZGF0YT9jLkhiKGwuZGF0YSk6dm9pZCAwLG49bmV3IEIoRSk7bi5PZShoLlJjKTtmb3IodmFyIHA9bi5rO3AubmV4dCgpOyl7dmFyIHE9DQpwLnZhbHVlO2lmKCEocSBpbnN0YW5jZW9mIFYpKXt2YXIgcj1xLmRhdGE7bnVsbCE9PXI/Yy53eChyLG0pOnEuZ2I9bDtxLmViPSEwfX1udWxsIT09az9jLm54KGspOmIucmVtb3ZlKGgpfWIuQmEoIkNoYW5nZWRTZWxlY3Rpb24iKTtiLkJhKCJTZWxlY3Rpb25Vbmdyb3VwZWQiLGQsbil9ZmluYWxseXtiLkNlKCJVbmdyb3VwIiksYi4kYj0iIn19fTsNCm9hLnByb3RvdHlwZS5jYW5Vbmdyb3VwU2VsZWN0aW9uPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPW51bGwpO3ZhciBiPXRoaXMuaDtpZihudWxsPT09Ynx8Yi5hYnx8Yi5aZXx8IWIuWWt8fCFiLlJvKXJldHVybiExO3ZhciBjPWIuYmE7aWYobnVsbD09PWN8fCEoYyBpbnN0YW5jZW9mIFApKXJldHVybiExO2lmKGEgaW5zdGFuY2VvZiBUKXtpZihhLmNhblVuZ3JvdXAoKSlyZXR1cm4hMH1lbHNlIGZvcihhPWIuc2VsZWN0aW9uLms7YS5uZXh0KCk7KWlmKGI9YS52YWx1ZSxiIGluc3RhbmNlb2YgVCYmYi5jYW5Vbmdyb3VwKCkpcmV0dXJuITA7cmV0dXJuITF9O29hLnByb3RvdHlwZS5hZGRUb3BMZXZlbFBhcnRzPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPSEwLGQ9WWUoYSkuaztkLm5leHQoKTspe3ZhciBmPWQudmFsdWU7bnVsbCE9PWYuZ2ImJighYnx8dGhpcy5pc1ZhbGlkTWVtYmVyKG51bGwsZik/Zi5nYj1udWxsOmM9ITEpfXJldHVybiBjfTsNCm9hLnByb3RvdHlwZS5jb2xsYXBzZVN1YkdyYXBoPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPW51bGwpO3ZhciBiPXRoaXMuaDtpZihudWxsPT09YilyZXR1cm4hMTtiLnNjKCJDb2xsYXBzZSBTdWJHcmFwaCIpO3ZhciBjPW5ldyBCKFQpO2lmKGEgaW5zdGFuY2VvZiBUJiZhLllkKWEuY29sbGFwc2VTdWJHcmFwaCgpLGMuYWRkKGEpO2Vsc2UgZm9yKGE9Yi5zZWxlY3Rpb24uazthLm5leHQoKTspe3ZhciBkPWEudmFsdWU7ZCBpbnN0YW5jZW9mIFQmJmQuWWQmJihkLmNvbGxhcHNlU3ViR3JhcGgoKSxjLmFkZChkKSl9Yi5CYSgiU3ViR3JhcGhDb2xsYXBzZWQiLGMpO2IuQ2UoIkNvbGxhcHNlIFN1YkdyYXBoIil9Ow0Kb2EucHJvdG90eXBlLmNhbkNvbGxhcHNlU3ViR3JhcGg9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9bnVsbCk7dmFyIGI9dGhpcy5oO2lmKG51bGw9PT1ifHxiLmFiKXJldHVybiExO2lmKGEgaW5zdGFuY2VvZiBUKXJldHVybiBhLllkPyEwOiExO2ZvcihhPWIuc2VsZWN0aW9uLms7YS5uZXh0KCk7KWlmKGI9YS52YWx1ZSxiIGluc3RhbmNlb2YgVCYmYi5ZZClyZXR1cm4hMDtyZXR1cm4hMX07DQpvYS5wcm90b3R5cGUuZXhwYW5kU3ViR3JhcGg9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9bnVsbCk7dmFyIGI9dGhpcy5oO2lmKG51bGw9PT1iKXJldHVybiExO2Iuc2MoIkV4cGFuZCBTdWJHcmFwaCIpO3ZhciBjPW5ldyBCKFQpO2lmKGEgaW5zdGFuY2VvZiBUJiYhYS5ZZClhLmV4cGFuZFN1YkdyYXBoKCksYy5hZGQoYSk7ZWxzZSBmb3IoYT1iLnNlbGVjdGlvbi5rO2EubmV4dCgpOyl7dmFyIGQ9YS52YWx1ZTtkIGluc3RhbmNlb2YgVCYmIWQuWWQmJihkLmV4cGFuZFN1YkdyYXBoKCksYy5hZGQoZCkpfWIuQmEoIlN1YkdyYXBoRXhwYW5kZWQiLGMpO2IuQ2UoIkV4cGFuZCBTdWJHcmFwaCIpfTsNCm9hLnByb3RvdHlwZS5jYW5FeHBhbmRTdWJHcmFwaD1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT1udWxsKTt2YXIgYj10aGlzLmg7aWYobnVsbD09PWJ8fGIuYWIpcmV0dXJuITE7aWYoYSBpbnN0YW5jZW9mIFQpcmV0dXJuIGEuWWQ/ITE6ITA7Zm9yKGE9Yi5zZWxlY3Rpb24uazthLm5leHQoKTspaWYoYj1hLnZhbHVlLGIgaW5zdGFuY2VvZiBUJiYhYi5ZZClyZXR1cm4hMDtyZXR1cm4hMX07DQpvYS5wcm90b3R5cGUuZWRpdFRleHRCbG9jaz1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT1udWxsKTt2YXIgYj10aGlzLmg7aWYobnVsbCE9PWIpe3ZhciBjPWIud2IuQ3g7aWYobnVsbCE9PWMpe2lmKG51bGw9PT1hKXthPWIuc2VsZWN0aW9uLms7Zm9yKHZhciBkPW51bGw7YS5uZXh0KCk7KXt2YXIgZj1hLnZhbHVlO2lmKGYuY2FuRWRpdCgpKXtkPWY7YnJlYWt9fWlmKG51bGw9PT1kKXJldHVybjthPWQuYXQoZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBuYSYmYS55d30pfW51bGwhPT1hJiZhIGluc3RhbmNlb2YgbmEmJihjLk5nPWEsYi5VYT1jKX19fTsNCm9hLnByb3RvdHlwZS5jYW5FZGl0VGV4dEJsb2NrPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPW51bGwpO3ZhciBiPXRoaXMuaDtpZihudWxsPT09Ynx8Yi5hYnx8Yi5aZXx8IWIuUW98fG51bGw9PT1iLndiLkN4KXJldHVybiExO2lmKGEgaW5zdGFuY2VvZiBuYSl7aWYoYT1hLlMsbnVsbCE9PWEmJmEuY2FuRWRpdCgpKXJldHVybiEwfWVsc2UgZm9yKGI9Yi5zZWxlY3Rpb24uaztiLm5leHQoKTspaWYoYT1iLnZhbHVlLGEuY2FuRWRpdCgpJiYoYT1hLmF0KGZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgbmEmJmEueXd9KSxudWxsIT09YSkpcmV0dXJuITA7cmV0dXJuITF9Ow0Kb2EucHJvdG90eXBlLnNob3dDb250ZXh0TWVudT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmg7aWYobnVsbCE9PWIpe3ZhciBjPWIud2IucHc7aWYobnVsbCE9PWMmJih2b2lkIDA9PT1hJiYoYT0wPGIuc2VsZWN0aW9uLmNvdW50P2Iuc2VsZWN0aW9uLiRhKCk6YiksYT1jLmZpbmRPYmplY3RXaXRoQ29udGV4dE1lbnUoYSksbnVsbCE9PWEpKXt2YXIgZD1uZXcgbGQsZj1udWxsO2EgaW5zdGFuY2VvZiBRP2Y9YS5xYihLYik6Yi5hb3x8KGY9Yi54YixmPW5ldyB3KGYueCtmLndpZHRoLzIsZi55K2YuaGVpZ2h0LzIpKTtudWxsIT09ZiYmKGQuS2U9Yi5KRyhmKSxkLmVhPWYsYi5lYz1kKTtiLlVhPWM7WmUoYywhMSxhKX19fTsNCm9hLnByb3RvdHlwZS5jYW5TaG93Q29udGV4dE1lbnU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5oO2lmKG51bGw9PT1iKXJldHVybiExO3ZhciBjPWIud2IucHc7aWYobnVsbD09PWMpcmV0dXJuITE7dm9pZCAwPT09YSYmKGE9MDxiLnNlbGVjdGlvbi5jb3VudD9iLnNlbGVjdGlvbi4kYSgpOmIpO3JldHVybiBudWxsPT09Yy5maW5kT2JqZWN0V2l0aENvbnRleHRNZW51KGEpPyExOiEwfTt0Lmcob2EsImNvcGllc1RyZWUiLG9hLnByb3RvdHlwZS5mRSk7dC5kZWZpbmVQcm9wZXJ0eShvYSx7ZkU6ImNvcGllc1RyZWUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlFCfSxmdW5jdGlvbihhKXt0LmkoYSwiYm9vbGVhbiIsb2EsImNvcGllc1RyZWUiKTt0aGlzLlFCPWF9KTt0Lmcob2EsImRlbGV0ZXNUcmVlIixvYS5wcm90b3R5cGUudUUpOw0KdC5kZWZpbmVQcm9wZXJ0eShvYSx7dUU6ImRlbGV0ZXNUcmVlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kQn0sZnVuY3Rpb24oYSl7dC5pKGEsImJvb2xlYW4iLG9hLCJkZWxldGVzVHJlZSIpO3RoaXMuJEI9YX0pO3QuZyhvYSwiY29waWVzUGFyZW50S2V5IixvYS5wcm90b3R5cGUuWnopO3QuZGVmaW5lUHJvcGVydHkob2Ese1p6OiJjb3BpZXNQYXJlbnRLZXkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlBCfSxmdW5jdGlvbihhKXt0LmkoYSwiYm9vbGVhbiIsb2EsImNvcGllc1BhcmVudEtleSIpO3RoaXMuUEI9YX0pO3QuZyhvYSwiY29waWVzR3JvdXBLZXkiLG9hLnByb3RvdHlwZS5Zeik7dC5kZWZpbmVQcm9wZXJ0eShvYSx7WXo6ImNvcGllc0dyb3VwS2V5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5PQn0sZnVuY3Rpb24oYSl7dC5pKGEsImJvb2xlYW4iLG9hLCJjb3BpZXNHcm91cEtleSIpO3RoaXMuT0I9YX0pO3QuZyhvYSwiYXJjaGV0eXBlR3JvdXBEYXRhIixvYS5wcm90b3R5cGUuT3opOw0KdC5kZWZpbmVQcm9wZXJ0eShvYSx7T3o6ImFyY2hldHlwZUdyb3VwRGF0YSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuanl9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmwoYSxPYmplY3Qsb2EsImFyY2hldHlwZUdyb3VwRGF0YSIpO3ZhciBiPXRoaXMuaDtudWxsIT09YiYmKGI9Yi5iYSxiIGluc3RhbmNlb2YgUCYmKGEgaW5zdGFuY2VvZiBUfHxiLnRBKGEpfHx0Lm0oIkNvbW1hbmRIYW5kbGVyLmFyY2hldHlwZUdyb3VwRGF0YSBtdXN0IGJlIGVpdGhlciBhIEdyb3VwIG9yIGEgZGF0YSBvYmplY3QgZm9yIHdoaWNoIEdyYXBoTGlua3NNb2RlbC5pc0dyb3VwRm9yTm9kZURhdGEgaXMgdHJ1ZTogIithKSkpO3RoaXMuank9YX0pO3QuZyhvYSwibWVtYmVyVmFsaWRhdGlvbiIsb2EucHJvdG90eXBlLnV0KTsNCnQuZGVmaW5lUHJvcGVydHkob2Ese3V0OiJtZW1iZXJWYWxpZGF0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Oa30sZnVuY3Rpb24oYSl7bnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsb2EsIm1lbWJlclZhbGlkYXRpb24iKTt0aGlzLk5rPWF9KTt0Lmcob2EsImRlZmF1bHRTY2FsZSIsb2EucHJvdG90eXBlLlhzKTt0LmRlZmluZVByb3BlcnR5KG9hLHtYczoiZGVmYXVsdFNjYWxlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ZQn0sZnVuY3Rpb24oYSl7dC5xKGEsb2EsImRlZmF1bHRTY2FsZSIpOzA8YXx8dC5tKCJkZWZhdWx0U2NhbGUgbXVzdCBiZSBsYXJnZXIgdGhhbiB6ZXJvLCBub3Q6ICIrYSk7dGhpcy5ZQj1hfSk7dC5nKG9hLCJ6b29tRmFjdG9yIixvYS5wcm90b3R5cGUuYXUpOw0KdC5kZWZpbmVQcm9wZXJ0eShvYSx7YXU6Inpvb21GYWN0b3IifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkVEfSxmdW5jdGlvbihhKXt0LnEoYSxvYSwiem9vbUZhY3RvciIpOzE8YXx8dC5tKCJ6b29tRmFjdG9yIG11c3QgYmUgbGFyZ2VyIHRoYW4gMS4wLCBub3Q6ICIrYSk7dGhpcy5FRD1hfSk7ZnVuY3Rpb24gYWUoKXswPGFyZ3VtZW50cy5sZW5ndGgmJnQuYWQoYWUpO3QuQWModGhpcyk7dGhpcy5VPW51bGw7dGhpcy5ZYj0iIjt0aGlzLkxlPSEwO3RoaXMubkM9ITE7dGhpcy5BRD1udWxsO3RoaXMuWXY9LTF9dC5nYSgiVG9vbCIsYWUpO2FlLnByb3RvdHlwZS53ZD1mdW5jdGlvbihhKXtlJiZudWxsIT09YSYmdC5sKGEseixhZSwic2V0RGlhZ3JhbSIpO3RoaXMuVT1hfTthZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIiE9PXRoaXMubmFtZT90aGlzLm5hbWUrIiBUb29sIjp0LnhnKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSl9Ow0KYWUucHJvdG90eXBlLnVwZGF0ZUFkb3JubWVudHM9ZnVuY3Rpb24oKXt9O2FlLnByb3RvdHlwZS5jYW5TdGFydD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRW5hYmxlZH07YWUucHJvdG90eXBlLmRvU3RhcnQ9ZnVuY3Rpb24oKXt9O2FlLnByb3RvdHlwZS5kb0FjdGl2YXRlPWZ1bmN0aW9uKCl7dGhpcy5oYT0hMH07YWUucHJvdG90eXBlLmRvRGVhY3RpdmF0ZT1mdW5jdGlvbigpe3RoaXMuaGE9ITF9O2FlLnByb3RvdHlwZS5kb1N0b3A9ZnVuY3Rpb24oKXt9O2FlLnByb3RvdHlwZS5kb0NhbmNlbD1mdW5jdGlvbigpe3RoaXMuc3RvcFRvb2woKX07YWUucHJvdG90eXBlLnN0b3BUb29sPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO251bGwhPT1hJiZhLlVhPT09dGhpcyYmKGEuVWE9bnVsbCxhLiRiPSIiKX07YWUucHJvdG90eXBlLmRvTW91c2VEb3duPWZ1bmN0aW9uKCl7IXRoaXMuaGEmJnRoaXMuY2FuU3RhcnQoKSYmdGhpcy5kb0FjdGl2YXRlKCl9Ow0KYWUucHJvdG90eXBlLmRvTW91c2VNb3ZlPWZ1bmN0aW9uKCl7fTthZS5wcm90b3R5cGUuZG9Nb3VzZVVwPWZ1bmN0aW9uKCl7dGhpcy5zdG9wVG9vbCgpfTthZS5wcm90b3R5cGUuZG9Nb3VzZVdoZWVsPWZ1bmN0aW9uKCl7fTthZS5wcm90b3R5cGUuZG9LZXlEb3duPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO251bGwhPT1hJiYiRXNjIj09PWEuUi5rZXkmJnRoaXMuZG9DYW5jZWwoKX07YWUucHJvdG90eXBlLmRvS2V5VXA9ZnVuY3Rpb24oKXt9O2FlLnByb3RvdHlwZS5zdGFydFRyYW5zYWN0aW9uPWFlLnByb3RvdHlwZS5zYz1mdW5jdGlvbihhKXt0aGlzLmdmPW51bGw7dmFyIGI9dGhpcy5oO3JldHVybiBudWxsPT09Yj8hMTpiLnNjKGEpfTthZS5wcm90b3R5cGUuc3RvcFRyYW5zYWN0aW9uPWFlLnByb3RvdHlwZS5naz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtyZXR1cm4gbnVsbD09PWE/ITE6bnVsbD09PXRoaXMuZ2Y/YS5OcCgpOmEuQ2UodGhpcy5nZil9Ow0KYWUucHJvdG90eXBlLnN0YW5kYXJkTW91c2VTZWxlY3Q9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7aWYobnVsbCE9PWEmJmEuUGUpe3ZhciBiPWEuUixjPWEuZHQoYi5lYSwhMSk7aWYobnVsbCE9PWMpaWYodC5VbT9iLkJwOmIuY29udHJvbCl7YS5CYSgiQ2hhbmdpbmdTZWxlY3Rpb24iKTtmb3IoYj1jO251bGwhPT1iJiYhYi5jYW5TZWxlY3QoKTspYj1iLmdiO251bGwhPT1iJiYoYi5lYj0hYi5lYik7YS5CYSgiQ2hhbmdlZFNlbGVjdGlvbiIpfWVsc2UgaWYoYi5zaGlmdCl7aWYoIWMuZWIpe2EuQmEoIkNoYW5naW5nU2VsZWN0aW9uIik7Zm9yKGI9YztudWxsIT09YiYmIWIuY2FuU2VsZWN0KCk7KWI9Yi5nYjtudWxsIT09YiYmKGIuZWI9ITApO2EuQmEoIkNoYW5nZWRTZWxlY3Rpb24iKX19ZWxzZXtpZighYy5lYil7Zm9yKGI9YztudWxsIT09YiYmIWIuY2FuU2VsZWN0KCk7KWI9Yi5nYjtudWxsIT09YiYmYS5zZWxlY3QoYil9fWVsc2UhYi5sZWZ0fHwodC5VbT9iLkJwOmIuY29udHJvbCl8fA0KYi5zaGlmdHx8YS5qdygpfX07YWUucHJvdG90eXBlLnN0YW5kYXJkTW91c2VDbGljaz1mdW5jdGlvbihhLGIpe3ZvaWQgMD09PWEmJihhPW51bGwpO3ZvaWQgMD09PWImJihiPWZ1bmN0aW9uKGEpe3JldHVybiFhLmxheWVyLnljfSk7dmFyIGM9dGhpcy5oO2lmKG51bGwhPT1jKXt2YXIgZD1jLlIsZj1jLnBlKGQuZWEsYSxiKTtkLmNlPWY7JGUoZixkLGMpfX07DQpmdW5jdGlvbiAkZShhLGIsYyl7dmFyIGQ9MDtiLmxlZnQ/ZD0xPT09Yi5BZT8xOjI9PT1iLkFlPzI6MTpiLnJpZ2h0JiYxPT09Yi5BZSYmKGQ9Myk7dmFyIGY9IiI7aWYobnVsbCE9PWEpe3N3aXRjaChkKXtjYXNlIDE6Zj0iT2JqZWN0U2luZ2xlQ2xpY2tlZCI7YnJlYWs7Y2FzZSAyOmY9Ik9iamVjdERvdWJsZUNsaWNrZWQiO2JyZWFrO2Nhc2UgMzpmPSJPYmplY3RDb250ZXh0Q2xpY2tlZCJ9MCE9PWQmJmMuQmEoZixhKX1lbHNle3N3aXRjaChkKXtjYXNlIDE6Zj0iQmFja2dyb3VuZFNpbmdsZUNsaWNrZWQiO2JyZWFrO2Nhc2UgMjpmPSJCYWNrZ3JvdW5kRG91YmxlQ2xpY2tlZCI7YnJlYWs7Y2FzZSAzOmY9IkJhY2tncm91bmRDb250ZXh0Q2xpY2tlZCJ9MCE9PWQmJmMuQmEoZil9aWYobnVsbCE9PWEpZm9yKDtudWxsIT09YTspe2Y9bnVsbDtzd2l0Y2goZCl7Y2FzZSAxOmY9YS5jbGljazticmVhaztjYXNlIDI6Zj1hLk5tP2EuTm06YS5jbGljazticmVhaztjYXNlIDM6Zj1hLlZzfWlmKG51bGwhPT0NCmYmJihmKGIsYSksYi5FZSkpYnJlYWs7YT1hLmlhfWVsc2V7Zj1udWxsO3N3aXRjaChkKXtjYXNlIDE6Zj1jLmNsaWNrO2JyZWFrO2Nhc2UgMjpmPWMuTm0/Yy5ObTpjLmNsaWNrO2JyZWFrO2Nhc2UgMzpmPWMuVnN9bnVsbCE9PWYmJmYoYil9fQ0KYWUucHJvdG90eXBlLnN0YW5kYXJkTW91c2VPdmVyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO2lmKG51bGwhPT1hKXt2YXIgYj1hLlI7aWYobnVsbCE9PWIuaCYmITAhPT1hLlpiLnNkKXt2YXIgYz1hLldhO2EuV2E9ITA7dmFyIGQ9YS5wZShiLmVhLG51bGwsbnVsbCk7Yi5jZT1kO3ZhciBmPSExO2lmKGQhPT1hLkJuKXt2YXIgZz1hLkJuLGg9ZzthLkJuPWQ7Zm9yKHRoaXMuZG9DdXJyZW50T2JqZWN0Q2hhbmdlZChnLGQpO251bGwhPT1nOyl7dmFyIGs9Zy5HQTtpZihudWxsIT09ayl7aWYoZD09PWcpYnJlYWs7aWYobnVsbCE9PWQmJmQuZWooZykpYnJlYWs7ayhiLGcsZCk7Zj0hMDtpZihiLkVlKWJyZWFrfWc9Zy5pYX1mb3IoZz1oO251bGwhPT1kOyl7az1kLkZBO2lmKG51bGwhPT1rKXtpZihnPT09ZClicmVhaztpZihudWxsIT09ZyYmZy5laihkKSlicmVhaztrKGIsZCxnKTtmPSEwO2lmKGIuRWUpYnJlYWt9ZD1kLmlhfWQ9YS5Cbn1pZihudWxsIT09ZCl7Zz1kO2ZvcihrPSIiO251bGwhPT0NCmc7KXtrPWcuY3Vyc29yO2lmKCIiIT09aylicmVhaztnPWcuaWF9YS4kYj1rO2ZvcihnPWQ7bnVsbCE9PWc7KXtrPWcueXQ7aWYobnVsbCE9PWsmJihrKGIsZyksZj0hMCxiLkVlKSlicmVhaztnPWcuaWF9fWVsc2UgYS4kYj0iIixrPWEueXQsbnVsbCE9PWsmJihrKGIpLGY9ITApO2YmJmEudGUoKTthLldhPWN9fX07YWUucHJvdG90eXBlLmRvQ3VycmVudE9iamVjdENoYW5nZWQ9ZnVuY3Rpb24oKXt9Ow0KYWUucHJvdG90eXBlLnN0YW5kYXJkTW91c2VXaGVlbD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZihudWxsIT09YSl7dmFyIGI9YS5SLGM9Yi5ZajtpZigwIT09YyYmYS5FZC5OKCkpe3ZhciBkPWEuU2UsZj1hLndiLmJuO2lmKChmPT09YWYmJiFiLnNoaWZ0fHxmPT09YmYmJmIuY29udHJvbCkmJigwPGM/ZC5jYW5JbmNyZWFzZVpvb20oKTpkLmNhbkRlY3JlYXNlWm9vbSgpKSlmPWEuJGYsYS4kZj1iLktlLDA8Yz9kLmluY3JlYXNlWm9vbSgpOmQuZGVjcmVhc2Vab29tKCksYS4kZj1mLGIuYnViYmxlcz0hMTtlbHNlIGlmKGY9PT1hZiYmYi5zaGlmdHx8Zj09PWJmJiYhYi5jb250cm9sKXtkPWEucG9zaXRpb24uY29weSgpO2Y9MDxjP2M6LWM7aWYoIWIuc2hpZnQmJmEucGYpe3ZhciBnPWEuUnAsZj1mLzQwKmc7MDxjP2Euc2Nyb2xsKCJwaXhlbCIsInVwIixmKTphLnNjcm9sbCgicGl4ZWwiLCJkb3duIixmKX1lbHNlIGIuc2hpZnQmJmEub2YmJihnPWEuUXAsZj1mLzQwKmcsMDxjPw0KYS5zY3JvbGwoInBpeGVsIiwibGVmdCIsZik6YS5zY3JvbGwoInBpeGVsIiwicmlnaHQiLGYpKTthLnBvc2l0aW9uLk0oZCl8fChiLmJ1YmJsZXM9ITEpfX19fTthZS5wcm90b3R5cGUuc3RhbmRhcmRXYWl0QWZ0ZXI9ZnVuY3Rpb24oYSl7dC5pKGEsIm51bWJlciIsYWUsInN0YW5kYXJkV2FpdEFmdGVyOmRlbGF5Iik7dGhpcy5jYW5jZWxXYWl0QWZ0ZXIoKTt2YXIgYj10aGlzO3RoaXMuWXY9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtiLmRvV2FpdEFmdGVyKCl9LGEpfTthZS5wcm90b3R5cGUuY2FuY2VsV2FpdEFmdGVyPWZ1bmN0aW9uKCl7LTEhPT10aGlzLll2JiZ3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuWXYpO3RoaXMuWXY9LTF9O2FlLnByb3RvdHlwZS5kb1dhaXRBZnRlcj1mdW5jdGlvbigpe307DQphZS5wcm90b3R5cGUuZmluZFRvb2xIYW5kbGVBdD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuaDtpZihudWxsPT09YylyZXR1cm4gbnVsbDtjPWMucGUoYSxudWxsLGZ1bmN0aW9uKGEpe2E9YS5TO3JldHVybiBudWxsPT09YT8hMTpudWxsIT09YS5vY30pO2lmKG51bGw9PT1jKXJldHVybiBudWxsO3ZhciBkPWMuUztyZXR1cm4gbnVsbD09PWR8fGQuWmMhPT1iP251bGw6Y307YWUucHJvdG90eXBlLmlzQmV5b25kRHJhZ1NpemU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmg7aWYobnVsbD09PWMpcmV0dXJuITE7dm9pZCAwPT09YSYmKGE9Yy5OYy5LZSk7dm9pZCAwPT09YiYmKGI9Yy5SLktlKTt2YXIgZD1jLndiLndFLGM9ZC53aWR0aCxkPWQuaGVpZ2h0O3QuaUImJihjKz02LGQrPTYpO3JldHVybiBNYXRoLmFicyhiLngtYS54KT5jfHxNYXRoLmFicyhiLnktYS55KT5kfTt0LkEoYWUse2g6ImRpYWdyYW0ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlV9KTsNCnQuZyhhZSwibmFtZSIsYWUucHJvdG90eXBlLm5hbWUpO3QuZGVmaW5lUHJvcGVydHkoYWUse25hbWU6Im5hbWUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLllifSxmdW5jdGlvbihhKXt0LmkoYSwic3RyaW5nIixhZSwibmFtZSIpO3RoaXMuWWI9YX0pO3QuZyhhZSwiaXNFbmFibGVkIixhZS5wcm90b3R5cGUuaXNFbmFibGVkKTt0LmRlZmluZVByb3BlcnR5KGFlLHtpc0VuYWJsZWQ6ImlzRW5hYmxlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTGV9LGZ1bmN0aW9uKGEpe3QuaShhLCJib29sZWFuIixhZSwiaXNFbmFibGVkIik7dGhpcy5MZT1hfSk7dC5nKGFlLCJpc0FjdGl2ZSIsYWUucHJvdG90eXBlLmhhKTt0LmRlZmluZVByb3BlcnR5KGFlLHtoYToiaXNBY3RpdmUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm5DfSxmdW5jdGlvbihhKXt0LmkoYSwiYm9vbGVhbiIsYWUsImlzQWN0aXZlIik7dGhpcy5uQz1hfSk7dC5nKGFlLCJ0cmFuc2FjdGlvblJlc3VsdCIsYWUucHJvdG90eXBlLmdmKTsNCnQuZGVmaW5lUHJvcGVydHkoYWUse2dmOiJ0cmFuc2FjdGlvblJlc3VsdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQUR9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmkoYSwic3RyaW5nIixhZSwidHJhbnNhY3Rpb25SZXN1bHQiKTt0aGlzLkFEPWF9KTsNCmZ1bmN0aW9uIGNmKCl7MDxhcmd1bWVudHMubGVuZ3RoJiZ0LmFkKGNmKTthZS5jYWxsKHRoaXMpO3RoaXMubmFtZT0iRHJhZ2dpbmciO3RoaXMuTkI9dGhpcy5yQz0hMDt0aGlzLldxPXRoaXMuZUM9ITE7dGhpcy52Qz0hMDt0aGlzLlR5PShuZXcgZ2EoTmFOLE5hTikpLmZyZWV6ZSgpO3RoaXMuVXk9RWI7dGhpcy5WeT0obmV3IHcoTmFOLE5hTikpLmZyZWV6ZSgpO3RoaXMuZEM9ITE7dGhpcy5iQz10aGlzLk1CPXRoaXMuY0M9dGhpcy5UQj10aGlzLktpPW51bGw7dGhpcy5JcT10aGlzLnRDPSExO3RoaXMuQm89bmV3IHcoTmFOLE5hTik7dGhpcy5Ldj1uZXcgdzt0aGlzLk52PSExO3RoaXMuSXY9dGhpcy5xQz0hMDt0aGlzLkxuPTEwMDt0aGlzLkxsPXRoaXMueXY9bnVsbH10LmdhKCJEcmFnZ2luZ1Rvb2wiLGNmKTt0LkthKGNmLGFlKTt0LmcoY2YsImlzQ29weUVuYWJsZWQiLGNmLnByb3RvdHlwZS5yQSk7DQp0LmRlZmluZVByb3BlcnR5KGNmLHtyQToiaXNDb3B5RW5hYmxlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuckN9LGZ1bmN0aW9uKGEpe3QuaShhLCJib29sZWFuIixjZiwiaXNDb3B5RW5hYmxlZCIpO3RoaXMuckM9YX0pO3QuZyhjZiwiY29waWVzRWZmZWN0aXZlQ29sbGVjdGlvbiIsY2YucHJvdG90eXBlLmVFKTt0LmRlZmluZVByb3BlcnR5KGNmLHtlRToiY29waWVzRWZmZWN0aXZlQ29sbGVjdGlvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTkJ9LGZ1bmN0aW9uKGEpe3QuaShhLCJib29sZWFuIixjZiwiY29waWVzRWZmZWN0aXZlQ29sbGVjdGlvbiIpO3RoaXMuTkI9YX0pO3QuZyhjZiwiZHJhZ3NUcmVlIixjZi5wcm90b3R5cGUueEUpO3QuZGVmaW5lUHJvcGVydHkoY2Yse3hFOiJkcmFnc1RyZWUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmVDfSxmdW5jdGlvbihhKXt0LmkoYSwiYm9vbGVhbiIsY2YsImRyYWdzVHJlZSIpO3RoaXMuZUM9YX0pOw0KdC5nKGNmLCJpc0dyaWRTbmFwRW5hYmxlZCIsY2YucHJvdG90eXBlLnFwKTt0LmRlZmluZVByb3BlcnR5KGNmLHtxcDoiaXNHcmlkU25hcEVuYWJsZWQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLldxfSxmdW5jdGlvbihhKXt0LmkoYSwiYm9vbGVhbiIsY2YsImlzR3JpZFNuYXBFbmFibGVkIik7dGhpcy5XcT1hfSk7dC5nKGNmLCJpc0NvbXBsZXhSb3V0aW5nUmVhbHRpbWUiLGNmLnByb3RvdHlwZS5iRik7dC5kZWZpbmVQcm9wZXJ0eShjZix7YkY6ImlzQ29tcGxleFJvdXRpbmdSZWFsdGltZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucUN9LGZ1bmN0aW9uKGEpe3QuaShhLCJib29sZWFuIixjZiwiaXNDb21wbGV4Um91dGluZ1JlYWx0aW1lIik7dGhpcy5xQz1hfSk7dC5nKGNmLCJpc0dyaWRTbmFwUmVhbHRpbWUiLGNmLnByb3RvdHlwZS5kRik7DQp0LmRlZmluZVByb3BlcnR5KGNmLHtkRjoiaXNHcmlkU25hcFJlYWx0aW1lIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52Q30sZnVuY3Rpb24oYSl7dC5pKGEsImJvb2xlYW4iLGNmLCJpc0dyaWRTbmFwUmVhbHRpbWUiKTt0aGlzLnZDPWF9KTt0LmcoY2YsImdyaWRTbmFwQ2VsbFNpemUiLGNmLnByb3RvdHlwZS5tQSk7dC5kZWZpbmVQcm9wZXJ0eShjZix7bUE6ImdyaWRTbmFwQ2VsbFNpemUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlR5fSxmdW5jdGlvbihhKXt0LmwoYSxnYSxjZiwiZ3JpZFNuYXBDZWxsU2l6ZSIpO3RoaXMuVHkuTShhKXx8KHRoaXMuVHk9YT1hLlooKSl9KTt0LmcoY2YsImdyaWRTbmFwQ2VsbFNwb3QiLGNmLnByb3RvdHlwZS5NRSk7DQp0LmRlZmluZVByb3BlcnR5KGNmLHtNRToiZ3JpZFNuYXBDZWxsU3BvdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVXl9LGZ1bmN0aW9uKGEpe3QubChhLEksY2YsImdyaWRTbmFwQ2VsbFNwb3QiKTt0aGlzLlV5Lk0oYSl8fCh0aGlzLlV5PWE9YS5aKCkpfSk7dC5nKGNmLCJncmlkU25hcE9yaWdpbiIsY2YucHJvdG90eXBlLk5FKTt0LmRlZmluZVByb3BlcnR5KGNmLHtORToiZ3JpZFNuYXBPcmlnaW4ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlZ5fSxmdW5jdGlvbihhKXt0LmwoYSx3LGNmLCJncmlkU25hcE9yaWdpbiIpO3RoaXMuVnkuTShhKXx8KHRoaXMuVnk9YT1hLlooKSl9KTt0LmcoY2YsImRyYWdzTGluayIsY2YucHJvdG90eXBlLiRoKTt0LmRlZmluZVByb3BlcnR5KGNmLHskaDoiZHJhZ3NMaW5rIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kQ30sZnVuY3Rpb24oYSl7dC5pKGEsImJvb2xlYW4iLGNmLCJkcmFnc0xpbmsiKTt0aGlzLmRDPWF9KTsNCnQuZyhjZiwiY3VycmVudFBhcnQiLGNmLnByb3RvdHlwZS5Zbyk7dC5kZWZpbmVQcm9wZXJ0eShjZix7WW86ImN1cnJlbnRQYXJ0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5UQn0sZnVuY3Rpb24oYSl7bnVsbCE9PWEmJnQubChhLEUsY2YsImN1cnJlbnRQYXJ0Iik7dGhpcy5UQj1hfSk7dC5nKGNmLCJjb3BpZWRQYXJ0cyIsY2YucHJvdG90eXBlLkRjKTt0LmRlZmluZVByb3BlcnR5KGNmLHtEYzoiY29waWVkUGFydHMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk1CfSxmdW5jdGlvbihhKXt0aGlzLk1CPWF9KTt0LmcoY2YsImRyYWdnZWRQYXJ0cyIsY2YucHJvdG90eXBlLkVjKTt0LmRlZmluZVByb3BlcnR5KGNmLHtFYzoiZHJhZ2dlZFBhcnRzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jQ30sZnVuY3Rpb24oYSl7dGhpcy5jQz1hfSk7dC5nKGNmLCJkcmFnZ2VkTGluayIsY2YucHJvdG90eXBlLk1jKTsNCnQuZGVmaW5lUHJvcGVydHkoY2Yse01jOiJkcmFnZ2VkTGluayJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYkN9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmwoYSxWLGNmLCJkcmFnZ2VkTGluayIpO3RoaXMuYkM9YX0pO3QuZyhjZiwiaXNEcmFnT3V0U3RhcnRlZCIsY2YucHJvdG90eXBlLm90KTt0LmRlZmluZVByb3BlcnR5KGNmLHtvdDoiaXNEcmFnT3V0U3RhcnRlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudEN9LGZ1bmN0aW9uKGEpe3RoaXMudEM9YX0pO3QuZyhjZiwic3RhcnRQb2ludCIsY2YucHJvdG90eXBlLmpqKTt0LmRlZmluZVByb3BlcnR5KGNmLHtqajoic3RhcnRQb2ludCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuS3Z9LGZ1bmN0aW9uKGEpe3QubChhLHcsY2YsInN0YXJ0UG9pbnQiKTt0aGlzLkt2Lk0oYSl8fCh0aGlzLkt2PWE9YS5aKCkpfSk7dC5nKGNmLCJkZWxheSIsY2YucHJvdG90eXBlLnZ3KTsNCnQuZGVmaW5lUHJvcGVydHkoY2Yse3Z3OiJkZWxheSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTG59LGZ1bmN0aW9uKGEpe3QuaShhLCJudW1iZXIiLGNmLCJkZWxheSIpO3RoaXMuTG49YX0pO2NmLnByb3RvdHlwZS5jYW5TdGFydD1mdW5jdGlvbigpe2lmKCF0aGlzLmlzRW5hYmxlZClyZXR1cm4hMTt2YXIgYT10aGlzLmg7aWYobnVsbD09PWF8fCFhLlNqJiYhYS5TaSYmIWEuTXN8fCFhLlBlKXJldHVybiExO3ZhciBiPWEuUjtyZXR1cm4hYi5sZWZ0fHxhLlVhIT09dGhpcyYmKCF0aGlzLmlzQmV5b25kRHJhZ1NpemUoKXx8Yi5VdyYmYi50aW1lc3RhbXAtYS5OYy50aW1lc3RhbXA8dGhpcy5Mbik/ITE6bnVsbCE9PXRoaXMuZmluZERyYWdnYWJsZVBhcnQoKX07DQpjZi5wcm90b3R5cGUuZmluZERyYWdnYWJsZVBhcnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7YT1hLmR0KGEuTmMuZWEsITEpO2lmKG51bGw9PT1hKXJldHVybiBudWxsO2Zvcig7bnVsbCE9PWEmJiFhLmNhblNlbGVjdCgpOylhPWEuZ2I7cmV0dXJuIG51bGwhPT1hJiYoYS5jYW5Nb3ZlKCl8fGEuY2FuQ29weSgpKT9hOm51bGx9O2NmLnByb3RvdHlwZS5zdGFuZGFyZE1vdXNlU2VsZWN0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO2lmKG51bGwhPT1hJiZhLlBlKXt2YXIgYj1hLmR0KGEuTmMuZWEsITEpO2lmKG51bGwhPT1iKXtmb3IoO251bGwhPT1iJiYhYi5jYW5TZWxlY3QoKTspYj1iLmdiO3RoaXMuWW89Yjt0aGlzLllvLmVifHwoYS5CYSgiQ2hhbmdpbmdTZWxlY3Rpb24iKSxiPWEuUiwodC5VbT9iLkJwOmIuY29udHJvbCl8fGIuc2hpZnR8fE1lKGEpLHRoaXMuWW8uZWI9ITAsYS5CYSgiQ2hhbmdlZFNlbGVjdGlvbiIpKX19fTsNCmNmLnByb3RvdHlwZS5kb0FjdGl2YXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO2lmKG51bGwhPT1hKXt0aGlzLnN0YW5kYXJkTW91c2VTZWxlY3QoKTt2YXIgYj10aGlzLllvO251bGwhPT1iJiYoYi5jYW5Nb3ZlKCl8fGIuY2FuQ29weSgpKSYmKHRoaXMuaGE9ITAsdGhpcy5Cby5zZXQoYS5wb3NpdGlvbiksZGYodGhpcyxhLnNlbGVjdGlvbiksdGhpcy5MbD10aGlzLnl2PW51bGwsdGhpcy5FYz10aGlzLmNvbXB1dGVFZmZlY3RpdmVDb2xsZWN0aW9uKGEuc2VsZWN0aW9uKSxhLnlvPSEwLGVmKHRoaXMsdGhpcy5FYyksdGhpcy5zYygiRHJhZyIpLHRoaXMuamo9YS5OYy5lYSxhLktkPSEwLGEuTXMmJih0aGlzLm90PSEwLHRoaXMuSXE9ITEsZmY9dGhpcyxnZj10aGlzLmgsdGhpcy5kb1NpbXVsYXRlZERyYWdPdXQoKSkpfX07DQpmdW5jdGlvbiBkZihhLGIpe2lmKGEuJGgpe3ZhciBjPWEuaDtudWxsIT09YyYmYy5UaiYmKGMuYmEgaW5zdGFuY2VvZiBQJiYxPT09Yi5jb3VudCYmYi4kYSgpaW5zdGFuY2VvZiBWPyhhLk1jPWIuJGEoKSxhLk1jLmNhblJlbGlua0Zyb20oKSYmYS5NYy5jYW5SZWxpbmtUbygpJiZhLk1jLlBmKCksYS5LaT1jLndiLlVBLG51bGw9PT1hLktpJiYoYS5LaT1uZXcgaGYsYS5LaS5oPWMpKTooYS5NYz1udWxsLGEuS2k9bnVsbCkpfX0NCmNmLnByb3RvdHlwZS5jb21wdXRlRWZmZWN0aXZlQ29sbGVjdGlvbj1mdW5jdGlvbihhKXt2YXIgYj1udWxsIT09dGhpcy5oJiZ0aGlzLmguVWE9PT10aGlzLGM9bmV3IGphKEUsT2JqZWN0KTtpZihudWxsPT09YSlyZXR1cm4gYztmb3IodmFyIGQ9YS5rO2QubmV4dCgpOyl7dmFyIGY9ZC52YWx1ZTtqZih0aGlzLGMsZixiKX1pZihudWxsIT09dGhpcy5NYyYmdGhpcy4kaClyZXR1cm4gYztmb3IoZD1hLms7ZC5uZXh0KCk7KWY9ZC52YWx1ZSxmIGluc3RhbmNlb2YgViYmKGE9ZixiPWEuYWEsbnVsbD09PWJ8fGMuY29udGFpbnMoYik/KGI9YS5jYSxudWxsPT09Ynx8Yy5jb250YWlucyhiKXx8Yy5yZW1vdmUoYSkpOmMucmVtb3ZlKGEpKTtyZXR1cm4gY307ZnVuY3Rpb24ga2YoYSl7cmV0dXJuIHZvaWQgMD09PWE/e3BvaW50OkgubmosdXo6SC5uan06e3BvaW50OmEuY29weSgpLHV6Okgubmp9fQ0KZnVuY3Rpb24gamYoYSxiLGMsZCl7aWYoIWIuY29udGFpbnMoYykmJighZHx8Yy5jYW5Nb3ZlKCl8fGMuY2FuQ29weSgpKSlpZihjIGluc3RhbmNlb2YgUyl7Yi5hZGQoYyxrZihjLmxvY2F0aW9uKSk7aWYoYyBpbnN0YW5jZW9mIFQpZm9yKHZhciBmPWMuUmM7Zi5uZXh0KCk7KXt2YXIgZz1mLnZhbHVlO2pmKGEsYixnLGQpfWZvcihnPWMucWU7Zy5uZXh0KCk7KWlmKGY9Zy52YWx1ZSwhYi5jb250YWlucyhmKSl7dmFyIGg9Zi5hYSxrPWYuY2E7bnVsbCE9PWgmJmIuY29udGFpbnMoaCkmJm51bGwhPT1rJiZiLmNvbnRhaW5zKGspJiZqZihhLGIsZixkKX1pZihhLnhFKWZvcihjPWMuREUoKTtjLm5leHQoKTspZz1jLnZhbHVlLGpmKGEsYixnLGQpfWVsc2UgaWYoYyBpbnN0YW5jZW9mIFYpZm9yKGY9YyxiLmFkZChmLGtmKCkpLGc9Zi5laztnLm5leHQoKTspamYoYSxiLGcudmFsdWUsZCk7ZWxzZSBjIGluc3RhbmNlb2YgSmV8fGIuYWRkKGMsa2YoYy5sb2NhdGlvbikpfQ0KY2YucHJvdG90eXBlLmRvRGVhY3RpdmF0ZT1mdW5jdGlvbigpe3RoaXMuaGE9ITE7dmFyIGE9dGhpcy5oO251bGwhPT1hJiZ0ZihhKTt1Zih0aGlzKTt2Zih0aGlzLHRoaXMuRWMpO3RoaXMuRWM9bnVsbDt0aGlzLklxPXRoaXMub3Q9ITE7aWYoMDx3Zi5jb3VudCl7Zm9yKHZhciBiPXdmLmxlbmd0aCxjPTA7YzxiO2MrKyl7dmFyIGQ9d2YubltjXTt4ZihkKTt5ZihkKTt1ZihkKTtudWxsIT09ZC5oJiZ0ZihkLmgpfXdmLmNsZWFyKCl9eGYodGhpcyk7dGhpcy5Cby5TcChOYU4sTmFOKTtmZj1nZj1udWxsO3lmKHRoaXMpO2EuS2Q9ITE7YS4kYj0iIjthLnlvPSExO3RoaXMuZ2soKX07DQpmdW5jdGlvbiB1ZihhKXt2YXIgYj1hLmg7aWYobnVsbCE9PWIpe3ZhciBjPWIuV2E7Yi5XYT0hMDtmb3IodmFyIGQ9Yi5SLGY9YS5MbDtudWxsIT09Zjspe3ZhciBnPWYuRUE7aWYobnVsbCE9PWcmJihnKGQsZixudWxsKSxkLkVlKSlicmVhaztmPWYuaWF9Yi5XYT1jfWEueXY9bnVsbDthLkxsPW51bGx9ZnVuY3Rpb24gemYoKXt2YXIgYT1mZjt5ZihhKTtBZihhKTt2YXIgYj1hLmg7bnVsbCE9PWImJmEuQm8uTigpJiYoYi5wb3NpdGlvbj1hLkJvKTtudWxsIT09YiYmdGYoYil9Y2YucHJvdG90eXBlLmRvQ2FuY2VsPWZ1bmN0aW9uKCl7eWYodGhpcyk7QWYodGhpcyk7dmFyIGE9dGhpcy5oO251bGwhPT1hJiZ0aGlzLkJvLk4oKSYmKGEucG9zaXRpb249dGhpcy5Cbyk7dGhpcy5zdG9wVG9vbCgpfTtmdW5jdGlvbiBlZihhLGIpe2lmKG51bGwhPT1iKXthLk52PSEwO2Zvcih2YXIgYz1iLms7Yy5uZXh0KCk7KXt2YXIgZD1jLmtleTtkIGluc3RhbmNlb2YgViYmKGQuV3A9ITApfX19DQpmdW5jdGlvbiB2ZihhLGIpe2lmKG51bGwhPT1iKXtmb3IodmFyIGM9Yi5rO2MubmV4dCgpOyl7dmFyIGQ9Yy5rZXk7ZCBpbnN0YW5jZW9mIFYmJihkLldwPSExLGQuZGomJkJmKGQpJiZkLmFjKCkpfWEuTnY9ITF9fWNmLnByb3RvdHlwZS5kb0tleURvd249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7bnVsbCE9PWEmJihhPWEuUixudWxsIT09YSYmdGhpcy5oYSYmKCJFc2MiPT09YS5rZXk/dGhpcy5kb0NhbmNlbCgpOnRoaXMuZG9Nb3VzZU1vdmUoKSkpfTtjZi5wcm90b3R5cGUuZG9LZXlVcD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtudWxsIT09YSYmbnVsbCE9PWEuUiYmdGhpcy5oYSYmdGhpcy5kb01vdXNlTW92ZSgpfTsNCmZ1bmN0aW9uIENmKGEsYil7Zm9yKHZhciBjPUluZmluaXR5LGQ9SW5maW5pdHksZj0tSW5maW5pdHksZz0tSW5maW5pdHksaD1hLms7aC5uZXh0KCk7KXt2YXIgaz1oLnZhbHVlO2lmKGsuTGQoKSYmay5RYSgpKXt2YXIgbD1rLmxvY2F0aW9uLGs9bC54LGw9bC55O2lzTmFOKGspfHxpc05hTihsKXx8KGs8YyYmKGM9ayksbDxkJiYoZD1sKSxrPmYmJihmPWspLGw+ZyYmKGc9bCkpfX1JbmZpbml0eT09PWM/Yi5wKDAsMCwwLDApOmIucChjLGQsZi1jLGctZCl9DQpmdW5jdGlvbiBEZihhLGIpe2lmKG51bGw9PT1hLkRjKXt2YXIgYz1hLmg7aWYoIShudWxsPT09Y3x8YiYmKGMuYWJ8fGMuWmUpKSYmbnVsbCE9PWEuRWMpe3ZhciBkPWMuamE7ZC5pc0VuYWJsZWQmJmQuZUY/bnVsbCE9PWQuWWkmJjA8ZC5ZaS5kaC5jb3VudCYmKGMuamEuTnAoKSxjLnNjKCJEcmFnIikpOkFmKGEpO2MuV2E9IWI7Yy51bj0hYjthLmpqPWMuTmMuZWE7ZD1hLmVFP2EuRWMuRGwoKTpjLnNlbGVjdGlvbjtjPWMuV28oZCxjLCEwKTtmb3IoZD1jLms7ZC5uZXh0KCk7KWQudmFsdWUubG9jYXRpb249ZC5rZXkubG9jYXRpb247ZD10LkdmKCk7Q2YoYyxkKTt0LmhjKGQpO2Zvcih2YXIgZD1uZXcgamEoRSxPYmplY3QpLGY9YS5FYy5rO2YubmV4dCgpOyl7dmFyIGc9Zi5rZXk7Zy5MZCgpJiZnLmNhbkNvcHkoKSYmKGc9Yy56YShnKSxudWxsIT09ZyYmKGcuc2YoKSxkLmFkZChnLGtmKGcubG9jYXRpb24pKSkpfWZvcihjPWMuaztjLm5leHQoKTspZj1jLnZhbHVlLGYgaW5zdGFuY2VvZg0KViYmZi5jYW5Db3B5KCkmJmQuYWRkKGYsa2YoKSk7YS5EYz1kO2RmKGEsZC5EbCgpKTtudWxsIT09YS5NYyYmKGM9YS5NYyxkPWMudmooKSxjLnBsKGEuamoueC0oZC54K2Qud2lkdGgvMiksYS5qai55LShkLnkrZC5oZWlnaHQvMikpKX19fWZ1bmN0aW9uIHlmKGEpe3ZhciBiPWEuaDtudWxsIT09YiYmKG51bGwhPT1hLkRjJiYoYi5YQShhLkRjLkRsKCksITEpLGEuRGM9bnVsbCksYi5XYT0hMSxiLnVuPSExLGEuamo9Yi5OYy5lYSl9ZnVuY3Rpb24geGYoYSl7aWYobnVsbCE9PWEuTWMpe2lmKGEuJGgmJm51bGwhPT1hLktpKXt2YXIgYj1hLktpO2IuaC5yZW1vdmUoYi5kZSk7Yi5oLnJlbW92ZShiLmVlKX1hLk1jPW51bGw7YS5LaT1udWxsfX1mdW5jdGlvbiBFZihhLGIsYyl7dmFyIGQ9YS5oO2lmKG51bGwhPT1kKXt2YXIgZj1hLmpqLGc9dC5LKCk7Zy5hc3NpZ24oZC5SLmVhKTthLm1vdmVQYXJ0cyhiLGcuVHQoZiksYyk7dC5CKGcpfX0NCmNmLnByb3RvdHlwZS5tb3ZlUGFydHM9ZnVuY3Rpb24oYSxiLGMpe2lmKG51bGwhPT1hJiYodC5sKGEsamEsY2YsIm1vdmVQYXJ0czpwYXJ0cyIpLDAhPT1hLmNvdW50KSl7dmFyIGQ9dC5LKCksZj10LksoKTtmLmFzc2lnbihiKTtpc05hTihmLngpJiYoZi54PTApO2lzTmFOKGYueSkmJihmLnk9MCk7dmFyIGc9dGhpcy5OdjtnfHxlZih0aGlzLGEpO2Zvcih2YXIgaD1uZXcgQixrPW5ldyBCKEVhKSxsPWEuaztsLm5leHQoKTspe3ZhciBtPWwua2V5O2lmKG0uTGQoKSl7dmFyIG49RmYodGhpcyxtLGEpO2lmKG51bGwhPT1uKWguYWRkKHtHYzptLGluZm86bC52YWx1ZSxNSTpufSk7ZWxzZSBpZighY3x8bS5jYW5Nb3ZlKCkpe249bC52YWx1ZS5wb2ludDtkLmFzc2lnbihuKTt2YXIgcD10LksoKTt0aGlzLmNvbXB1dGVNb3ZlKG0sZC5hZGQoZiksYSxwKTttLmxvY2F0aW9uPXA7dC5CKHApO2wudmFsdWUudXo9cC5UdChuKX19ZWxzZSBsLmtleSBpbnN0YW5jZW9mIFYmJmsuYWRkKGwueWIpfWZvcihjPQ0KaC5rO2MubmV4dCgpOyloPWMudmFsdWUsbj1oLmluZm8ucG9pbnQsZC5hc3NpZ24obiksaC5HYy5sb2NhdGlvbj1kLmFkZChoLk1JLnV6KTtuPXQuSygpO2M9dC5LKCk7Zm9yKGs9ay5rO2submV4dCgpOylpZihwPWsudmFsdWUsaD1wLmtleSxoIGluc3RhbmNlb2YgVilpZihoLldwKWlmKGw9aC5hYSxtPWguY2EsbnVsbCE9PXRoaXMuTWMmJnRoaXMuJGgpcD1wLnZhbHVlLnBvaW50LGEuYWRkKGgsa2YoZikpLGw9Yi54LXAueCxtPWIueS1wLnksaC5wbChsLG0pO2Vsc2V7aWYobnVsbCE9PWwpe24uYXNzaWduKGwubG9jYXRpb24pO3ZhciBxPWEuemEobCk7bnVsbCE9PXEmJm4uVHQocS5wb2ludCl9bnVsbCE9PW0mJihjLmFzc2lnbihtLmxvY2F0aW9uKSxxPWEuemEobSksbnVsbCE9PXEmJmMuVHQocS5wb2ludCkpO251bGwhPT1sJiZudWxsIT09bT9uLnRmKGMpPyhwPXAudmFsdWUucG9pbnQsbD1kLGwuYXNzaWduKG4pLGwuVHQocCksYS5hZGQoaCxrZihuKSksaC5wbChsLngsbC55KSk6DQooaC5XcD0hMSxoLmFjKCkpOihwPXAudmFsdWUucG9pbnQsYS5hZGQoaCxrZihudWxsIT09bD9uOm51bGwhPT1tP2M6YikpLGw9Zi54LXAueCxtPWYueS1wLnksaC5wbChsLG0pKX1lbHNlIGlmKG51bGw9PT1oLmFhfHxudWxsPT09aC5jYSlwPXAudmFsdWUucG9pbnQsYS5hZGQoaCxrZihiKSksbD1mLngtcC54LG09Zi55LXAueSxoLnBsKGwsbSk7dC5CKGQpO3QuQihmKTt0LkIobik7dC5CKGMpO2d8fHZmKHRoaXMsYSl9fTtmdW5jdGlvbiBGZihhLGIsYyl7Yj1iLmdiO2lmKG51bGwhPT1iKXthPUZmKGEsYixjKTtpZihudWxsIT09YSlyZXR1cm4gYTthPWMuemEoYik7aWYobnVsbCE9PWEpcmV0dXJuIGF9cmV0dXJuIG51bGx9DQpmdW5jdGlvbiBBZihhKXtpZihudWxsIT09YS5FYyl7Zm9yKHZhciBiPWEuaCxjPWEuRWMuaztjLm5leHQoKTspe3ZhciBkPWMua2V5O2QuTGQoKSYmKGQubG9jYXRpb249Yy52YWx1ZS5wb2ludCl9Zm9yKGM9YS5FYy5rO2MubmV4dCgpOylpZihkPWMua2V5LGQgaW5zdGFuY2VvZiBWJiZkLldwKXt2YXIgZj1jLnZhbHVlLnBvaW50O2EuRWMuYWRkKGQsa2YoKSk7ZC5wbCgtZi54LC1mLnkpfWIuVWYoKX19DQpjZi5wcm90b3R5cGUuY29tcHV0ZU1vdmU9ZnVuY3Rpb24oYSxiLGMsZCl7dm9pZCAwPT09ZCYmKGQ9bmV3IHcpO2QuYXNzaWduKGIpO2lmKG51bGw9PT1hKXJldHVybiBkO3ZvaWQgMD09PWMmJihjPW51bGwpO3ZhciBmPWI7aWYodGhpcy5xcCYmKHRoaXMuZEZ8fG51bGw9PT1jfHx0aGlzLmguUi5taikmJihmPXQuSygpLGM9ZixjLmFzc2lnbihiKSxudWxsIT09YSkpe3ZhciBnPXRoaXMuaDtpZihudWxsIT09Zyl7dmFyIGg9Zy5scCxrPXRoaXMubUEsZz1rLndpZHRoLGs9ay5oZWlnaHQsbD10aGlzLk5FLG09bC54LGw9bC55LG49dGhpcy5NRTtpZihudWxsIT09aCl7dmFyIHA9aC5ndDtpc05hTihnKSYmKGc9cC53aWR0aCk7aXNOYU4oaykmJihrPXAuaGVpZ2h0KTtoPWgubEE7aXNOYU4obSkmJihtPWgueCk7aXNOYU4obCkmJihsPWgueSl9aD10LmxjKDAsMCk7aC5QdCgwLDAsZyxrLG4pO0guY3QoYi54LGIueSxtK2gueCxsK2gueSxnLGssYyk7dC5CKGgpfX1jPW51bGwhPT1hLmJBPw0KYS5iQShhLGIsZik6ZjtrPWEuQUY7Zz1rLng7aXNOYU4oZykmJihnPWEubG9jYXRpb24ueCk7az1rLnk7aXNOYU4oaykmJihrPWEubG9jYXRpb24ueSk7aD1hLnVGO209aC54O2lzTmFOKG0pJiYobT1hLmxvY2F0aW9uLngpO2g9aC55O2lzTmFOKGgpJiYoaD1hLmxvY2F0aW9uLnkpO2QucChNYXRoLm1heChnLE1hdGgubWluKGMueCxtKSksTWF0aC5tYXgoayxNYXRoLm1pbihjLnksaCkpKTtmIT09YiYmdC5CKGYpO3JldHVybiBkfTtmdW5jdGlvbiBHZihhLGIpe2lmKG51bGw9PT1iKXJldHVybiEwO3ZhciBjPWIuUztyZXR1cm4gbnVsbD09PWN8fGMgaW5zdGFuY2VvZiBKZXx8Yy5sYXllci55Y3x8YS5FYyYmYS5FYy5jb250YWlucyhjKXx8YS5EYyYmYS5EYy5jb250YWlucyhjKT8hMDohMX0NCmZ1bmN0aW9uIEhmKGEsYixjLGQpe3ZhciBmPWEuaDtpZihudWxsIT09Zil7YS4kaCYmKG51bGwhPT1hLk1jJiYoYS5NYy5hYT1udWxsLGEuTWMuY2E9bnVsbCksSWYoYSwhMSkpO3ZhciBnPSExOyExPT09YS5JdiYmKGc9Zi5XYSxmLldhPSEwKTt2YXIgaD0hMSxrPVRmKGYsYixudWxsLGZ1bmN0aW9uKGIpe3JldHVybiFHZihhLGIpfSksbD1mLlI7bC5jZT1rO3ZhciBtPWYuV2E7Zi5XYT0hMDtpZihrIT09YS5MbCl7dmFyIG49YS5MbDthLnl2PW47Zm9yKGEuTGw9aztudWxsIT09bjspe3ZhciBwPW4uRUE7aWYobnVsbCE9PXApe2lmKGs9PT1uKWJyZWFrO2lmKG51bGwhPT1rJiZrLmVqKG4pKWJyZWFrO3AobCxuLGspO2g9ITA7aWYobC5FZSlicmVha31uPW4uaWF9bj1hLnl2O2lmKCFhLmhhJiZudWxsPT09ZmYpcmV0dXJuO2Zvcig7bnVsbCE9PWs7KXtwPWsuQkY7aWYobnVsbCE9PXApe2lmKG49PT1rKWJyZWFrO2lmKG51bGwhPT1uJiZuLmVqKGspKWJyZWFrO3AobCxrLG4pO2g9ITA7DQppZihsLkVlKWJyZWFrfWs9ay5pYX1rPWEuTGw7aWYoIWEuaGEmJm51bGw9PT1mZilyZXR1cm59bnVsbD09PWsmJihwPWYuQ0YsbnVsbCE9PXAmJihwKGwpLGg9ITApKTtpZihhLmhhfHxudWxsIT09ZmYpaWYoYS5kb0RyYWdPdmVyKGIsayksYS5oYXx8bnVsbCE9PWZmKWYuV2E9bSxoJiZmLlVmKCksITE9PT1hLkl2JiYoZi5XYT1nKSwoZi5vZnx8Zi5wZikmJihjfHxkKSYmVWYoZixsLktlKX19ZnVuY3Rpb24gVmYoYSxiLGMpe3ZhciBkPWEuS2k7aWYobnVsbD09PWQpcmV0dXJuIG51bGw7dmFyIGY9YS5oLlBtKGIsZC5OQSxmdW5jdGlvbihhKXtyZXR1cm4gZC5maW5kVmFsaWRMaW5rYWJsZVBvcnQoYSxjKX0pO2E9dC5LKCk7Zm9yKHZhciBnPUluZmluaXR5LGg9bnVsbCxmPWYuaztmLm5leHQoKTspe3ZhciBrPWYudmFsdWU7aWYobnVsbCE9PWsuUyl7dmFyIGw9ay5xYihLYixhKSxsPWIuWmoobCk7bDxnJiYoaD1rLGc9bCl9fXQuQihhKTtyZXR1cm4gaH0NCmZ1bmN0aW9uIElmKGEsYil7dmFyIGM9YS5NYztpZihudWxsIT09YyYmISgyPmMub2EpKXt2YXIgZD1hLmg7aWYobnVsbCE9PWQmJiFkLmFiJiYoZD1hLktpLG51bGwhPT1kKSl7dmFyIGY9bnVsbCxnPW51bGw7bnVsbD09PWMuYWEmJihmPVZmKGEsYy5vKDApLCExKSxudWxsIT09ZiYmKGc9Zi5TKSk7dmFyIGg9bnVsbCxrPW51bGw7bnVsbD09PWMuY2EmJihoPVZmKGEsYy5vKGMub2EtMSksITApLG51bGwhPT1oJiYoaz1oLlMpKTtpZigobnVsbD09PWd8fGcgaW5zdGFuY2VvZiBTKSYmKG51bGw9PT1rfHxrIGluc3RhbmNlb2YgUykpe3ZhciBsPWQuaXNWYWxpZExpbmsoZyxmLGssaCk7Yj8oYy5Gbj1jLm8oMCkuY29weSgpLGMuSm49Yy5vKGMub2EtMSkuY29weSgpLGMuV3A9ITEsYy5hYT1nLG51bGwhPT1mJiYoYy5SZj1mLk5kKSxjLmNhPWssbnVsbCE9PWgmJihjLk9nPWguTmQpKTpsP1dmKGQsZyxmLGssaCk6V2YoZCxudWxsLG51bGwsbnVsbCxudWxsKX19fX0NCmNmLnByb3RvdHlwZS5kb0RyYWdPdmVyPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBYZihhLGIpe3ZhciBjPWEuaDtpZihudWxsIT09YyYmbnVsbCE9PWMuYmEpe2EuJGgmJklmKGEsITApO3VmKGEpO3ZhciBkPVRmKGMsYixudWxsLGZ1bmN0aW9uKGIpe3JldHVybiFHZihhLGIpfSksZj1jLlI7Zi5jZT1kO2lmKG51bGwhPT1kKWZvcih2YXIgZz1kO251bGwhPT1nOyl7dmFyIGg9Zy52dDtpZihudWxsIT09aCYmKGgoZixnKSxmLkVlKSlicmVhaztnPWcuaWF9ZWxzZSBoPWMudnQsbnVsbCE9PWgmJmgoZik7aWYoYS5oYXx8bnVsbCE9PWZmKWlmKGEuZG9Ecm9wT250byhiLGQpLGEuaGF8fG51bGwhPT1mZilmb3IoZD1jLnNlbGVjdGlvbi5rO2QubmV4dCgpOylmPWQudmFsdWUsZiBpbnN0YW5jZW9mIFMmJllmKGMsZi5wYSl9fWNmLnByb3RvdHlwZS5kb0Ryb3BPbnRvPWZ1bmN0aW9uKCl7fTsNCmNmLnByb3RvdHlwZS5kb01vdXNlTW92ZT1mdW5jdGlvbigpe2lmKHRoaXMuaGEpe3ZhciBhPXRoaXMuaDtpZihudWxsIT09YSYmbnVsbCE9PXRoaXMuWW8mJm51bGwhPT10aGlzLkVjKXt2YXIgYj0hMSxjPSExO3RoaXMubWF5Q29weSgpPyhiPSEwLGEuJGI9ImNvcHkiLERmKHRoaXMsITEpLGVmKHRoaXMsdGhpcy5EYyksRWYodGhpcyx0aGlzLkRjLCExKSx2Zih0aGlzLHRoaXMuRGMpKTp0aGlzLm1heU1vdmUoKT8oYz0hMCxhLiRiPSJkZWZhdWx0Iix5Zih0aGlzKSxFZih0aGlzLHRoaXMuRWMsITApKTp0aGlzLm1heURyYWdPdXQoKT8oYS4kYj0ibm8tZHJvcCIsRGYodGhpcywhMSksRWYodGhpcyx0aGlzLkRjLCExKSk6eWYodGhpcyk7SGYodGhpcyxhLlIuZWEsYyxiKX19fTsNCmNmLnByb3RvdHlwZS5kb01vdXNlVXA9ZnVuY3Rpb24oKXtpZih0aGlzLmhhKXt2YXIgYT10aGlzLmg7aWYobnVsbCE9PWEpe3ZhciBiPSExLGM9dGhpcy5tYXlDb3B5KCk7YyYmbnVsbCE9PXRoaXMuRGM/KHlmKHRoaXMpLERmKHRoaXMsITApLGVmKHRoaXMsdGhpcy5EYyksRWYodGhpcyx0aGlzLkRjLCExKSx2Zih0aGlzLHRoaXMuRGMpLG51bGwhPT10aGlzLkRjJiZhLmhHKHRoaXMuRGMuRGwoKSkpOihiPSEwLHlmKHRoaXMpLHRoaXMubWF5TW92ZSgpJiYoRWYodGhpcyx0aGlzLkVjLCEwKSx0aGlzLkl2PSExLEhmKHRoaXMsYS5SLmVhLCEwLCExKSx0aGlzLkl2PSEwKSk7dGhpcy5JcT0hMDtYZih0aGlzLGEuUi5lYSk7aWYodGhpcy5oYSl7dGhpcy5EYz1udWxsO2lmKGImJm51bGwhPT10aGlzLkVjKWZvcihiPXRoaXMuRWMuaztiLm5leHQoKTspe3ZhciBkPWIua2V5O2QgaW5zdGFuY2VvZiBTJiYoZD1kLmdiLG51bGw9PT1kfHxudWxsPT09ZC5wbGFjZWhvbGRlcnx8dGhpcy5FYy5jb250YWlucyhkKXx8DQpkLld6JiZkLmZhKCkpfWEuT2MoKTt2Zih0aGlzLHRoaXMuRWMpO3RoaXMuZ2Y9Yz8iQ29weSI6Ik1vdmUiO2EuQmEoYz8iU2VsZWN0aW9uQ29waWVkIjoiU2VsZWN0aW9uTW92ZWQiLGEuc2VsZWN0aW9uKX10aGlzLnN0b3BUb29sKCl9fX07Y2YucHJvdG90eXBlLm1heUNvcHk9ZnVuY3Rpb24oKXtpZighdGhpcy5yQSlyZXR1cm4hMTt2YXIgYT10aGlzLmg7aWYobnVsbD09PWF8fGEuYWJ8fGEuWmV8fCFhLnptfHwhYS5TaXx8KHQuVW0/IWEuUi5hbHQ6IWEuUi5jb250cm9sKSlyZXR1cm4hMTtmb3IoYT1hLnNlbGVjdGlvbi5rO2EubmV4dCgpOyl7dmFyIGI9YS52YWx1ZTtpZihiLkxkKCkmJmIuY2FuQ29weSgpKXJldHVybiEwfXJldHVybiBudWxsIT09dGhpcy5NYyYmdGhpcy4kaCYmdGhpcy5NYy5jYW5Db3B5KCk/ITA6ITF9Ow0KY2YucHJvdG90eXBlLm1heURyYWdPdXQ9ZnVuY3Rpb24oKXtpZighdGhpcy5yQSlyZXR1cm4hMTt2YXIgYT10aGlzLmg7aWYobnVsbD09PWF8fCFhLk1zfHwhYS5TaXx8YS5TailyZXR1cm4hMTtmb3IoYT1hLnNlbGVjdGlvbi5rO2EubmV4dCgpOyl7dmFyIGI9YS52YWx1ZTtpZihiLkxkKCkmJmIuY2FuQ29weSgpKXJldHVybiEwfXJldHVybiBudWxsIT09dGhpcy5NYyYmdGhpcy4kaCYmdGhpcy5NYy5jYW5Db3B5KCk/ITA6ITF9O2NmLnByb3RvdHlwZS5tYXlNb3ZlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO2lmKG51bGw9PT1hfHxhLmFifHwhYS5TailyZXR1cm4hMTtmb3IoYT1hLnNlbGVjdGlvbi5rO2EubmV4dCgpOyl7dmFyIGI9YS52YWx1ZTtpZihiLkxkKCkmJmIuY2FuTW92ZSgpKXJldHVybiEwfXJldHVybiBudWxsIT09dGhpcy5NYyYmdGhpcy4kaCYmdGhpcy5NYy5jYW5Nb3ZlKCk/ITA6ITF9O3ZhciB3Zj1uZXcgQihjZiksZmY9bnVsbCxnZj1udWxsOw0KY2YucHJvdG90eXBlLm1heURyYWdJbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtyZXR1cm4gbnVsbD09PWF8fCFhLkx6fHxhLmFifHxhLlplfHwhYS56bXx8bnVsbD09PWEuYmE/ITE6ITB9O2NmLnByb3RvdHlwZS5kb1NpbXVsYXRlZERyYWdFbnRlcj1mdW5jdGlvbigpe2lmKHRoaXMubWF5RHJhZ0luKCkpe3ZhciBhPWZmO251bGwhPT1hJiYoYS5oLiRiPSJjb3B5Iil9fTtjZi5wcm90b3R5cGUuZG9TaW11bGF0ZWREcmFnTGVhdmU9ZnVuY3Rpb24oKXt2YXIgYT1mZjtudWxsIT09YSYmYS5kb1NpbXVsYXRlZERyYWdPdXQoKTt0aGlzLmRvQ2FuY2VsKCl9Ow0KY2YucHJvdG90eXBlLmRvU2ltdWxhdGVkRHJhZ092ZXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7aWYobnVsbCE9PWEpe3ZhciBiPWZmO251bGwhPT1iJiZudWxsIT09Yi5FYyYmdGhpcy5tYXlEcmFnSW4oKSYmKGEuJGI9ImNvcHkiLFpmKHRoaXMsYi5FYy5EbCgpLCExKSxFZih0aGlzLHRoaXMuRGMsITEpLEhmKHRoaXMsYS5SLmVhLCExLCEwKSl9fTsNCmNmLnByb3RvdHlwZS5kb1NpbXVsYXRlZERyb3A9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7aWYobnVsbCE9PWEpe3ZhciBiPWZmO251bGwhPT1iJiYoYi5JcT0hMCx5Zih0aGlzKSx0aGlzLm1heURyYWdJbigpJiYodGhpcy5zYygiRHJvcCIpLFpmKHRoaXMsYi5FYy5EbCgpLCEwKSxFZih0aGlzLHRoaXMuRGMsITEpLG51bGwhPT10aGlzLkRjJiZhLmhHKHRoaXMuRGMuRGwoKSksdGhpcy5nZj0iRXh0ZXJuYWxDb3B5IixYZih0aGlzLGEuUi5lYSksYS5PYygpLHRoaXMuRGM9bnVsbCxhLkJhKCJFeHRlcm5hbE9iamVjdHNEcm9wcGVkIixhLnNlbGVjdGlvbiksdGhpcy5naygpKSl9fTsNCmZ1bmN0aW9uIFpmKGEsYixjKXtpZihudWxsPT09YS5EYyl7dmFyIGQ9YS5oO2lmKG51bGwhPT1kJiYhZC5hYiYmIWQuWmUmJm51bGwhPT1kLmJhKXtkLldhPSFjO2QudW49IWM7YS5qaj1kLlIuZWE7ZD1kLldvKGIsZCwhMCk7Yz10LkdmKCk7Q2YoYixjKTt2YXIgZj1jLngrYy53aWR0aC8yLGc9Yy55K2MuaGVpZ2h0LzI7dC5oYyhjKTt2YXIgaD1hLkt2O2M9bmV3IGphKEUsT2JqZWN0KTt2YXIgaz10LksoKTtmb3IoYj1iLms7Yi5uZXh0KCk7KXt2YXIgbD1iLnZhbHVlO2lmKGwuTGQoKSYmbC5jYW5Db3B5KCkpe3ZhciBtPWwubG9jYXRpb24sbD1kLnphKGwpO2sucChoLngtKGYtbS54KSxoLnktKGctbS55KSk7bC5sb2NhdGlvbj1rO2wuc2YoKTtjLmFkZChsLGtmKGspKX19dC5CKGspO2ZvcihkPWQuaztkLm5leHQoKTspZj1kLnZhbHVlLGYgaW5zdGFuY2VvZiBWJiZmLmNhbkNvcHkoKSYmYy5hZGQoZixrZigpKTthLkRjPWM7ZGYoYSxjLkRsKCkpO251bGwhPT1hLk1jJiYoYz1hLk1jLA0KZD1jLnZqKCksYy5wbChhLmpqLngtKGQueCtkLndpZHRoLzIpLGEuamoueS0oZC55K2QuaGVpZ2h0LzIpKSl9fX1jZi5wcm90b3R5cGUuZG9TaW11bGF0ZWREcmFnT3V0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO251bGwhPT1hJiYodGhpcy5tYXlDb3B5KCl8fHRoaXMubWF5TW92ZSgpP2EuJGI9IiI6YS4kYj0ibm8tZHJvcCIpfTsNCmZ1bmN0aW9uICRmKCl7MDxhcmd1bWVudHMubGVuZ3RoJiZ0LmFkKCRmKTthZS5jYWxsKHRoaXMpO3RoaXMuWkM9MTAwO3RoaXMueUM9ITE7dmFyIGE9bmV3IFYsYj1uZXcgVztiLmZqPSEwO2Iuc3Ryb2tlPSJibHVlIjthLmFkZChiKTtiPW5ldyBXO2Iub249IlN0YW5kYXJkIjtiLmZpbGw9ImJsdWUiO2Iuc3Ryb2tlPSJibHVlIjthLmFkZChiKTthLmFmPSJUb29sIjt0aGlzLnREPWE7YT1uZXcgUztiPW5ldyBXO2IuTmQ9IiI7Yi56Yj0iUmVjdGFuZ2xlIjtiLmZpbGw9bnVsbDtiLnN0cm9rZT0ibWFnZW50YSI7Yi5mYj0yO2IuQ2E9SC5VeDthLmFkZChiKTthLnZsPSExO2EuYWY9IlRvb2wiO3RoaXMuckQ9YTt0aGlzLnNEPWI7YT1uZXcgUztiPW5ldyBXO2IuTmQ9IiI7Yi56Yj0iUmVjdGFuZ2xlIjtiLmZpbGw9bnVsbDtiLnN0cm9rZT0ibWFnZW50YSI7Yi5mYj0yO2IuQ2E9SC5VeDthLmFkZChiKTthLnZsPSExO2EuYWY9IlRvb2wiO3RoaXMudUQ9YTt0aGlzLnZEPWI7dGhpcy5YQz0NCnRoaXMuV0M9dGhpcy5TQz10aGlzLlJDPXRoaXMuVEM9bnVsbDt0aGlzLnVDPSEwO3RoaXMueUg9bmV3IGphKFEsImJvb2xlYW4iKTt0aGlzLiRDPXRoaXMuS2s9dGhpcy5uRD1udWxsfXQuZ2EoIkxpbmtpbmdCYXNlVG9vbCIsJGYpO3QuS2EoJGYsYWUpOyRmLnByb3RvdHlwZS5kb1N0b3A9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7bnVsbCE9PWEmJnRmKGEpO3RoaXMuS2c9dGhpcy5KZz10aGlzLklnPXRoaXMuSGc9dGhpcy5wYz1udWxsO3RoaXMuRHguY2xlYXIoKTt0aGlzLkZmPW51bGx9O3QuZygkZiwicG9ydEdyYXZpdHkiLCRmLnByb3RvdHlwZS5OQSk7dC5kZWZpbmVQcm9wZXJ0eSgkZix7TkE6InBvcnRHcmF2aXR5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5aQ30sZnVuY3Rpb24oYSl7dC5pKGEsIm51bWJlciIsJGYsInBvcnRHcmF2aXR5Iik7MDw9YSYmKHRoaXMuWkM9YSl9KTt0LmcoJGYsImlzVW5jb25uZWN0ZWRMaW5rVmFsaWQiLCRmLnByb3RvdHlwZS5WbSk7DQp0LmRlZmluZVByb3BlcnR5KCRmLHtWbToiaXNVbmNvbm5lY3RlZExpbmtWYWxpZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueUN9LGZ1bmN0aW9uKGEpe3QuaShhLCJib29sZWFuIiwkZiwiaXNVbmNvbm5lY3RlZExpbmtWYWxpZCIpO3RoaXMueUM9YX0pO3QuZygkZiwidGVtcG9yYXJ5TGluayIsJGYucHJvdG90eXBlLlpmKTt0LmRlZmluZVByb3BlcnR5KCRmLHtaZjoidGVtcG9yYXJ5TGluayJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudER9LGZ1bmN0aW9uKGEpe3QubChhLFYsJGYsInRlbXBvcmFyeUxpbmsiKTt0aGlzLnREPWF9KTt0LmcoJGYsInRlbXBvcmFyeUZyb21Ob2RlIiwkZi5wcm90b3R5cGUuZGUpO3QuZGVmaW5lUHJvcGVydHkoJGYse2RlOiJ0ZW1wb3JhcnlGcm9tTm9kZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuckR9LGZ1bmN0aW9uKGEpe3QubChhLFMsJGYsInRlbXBvcmFyeUZyb21Ob2RlIik7dGhpcy5yRD1hfSk7DQp0LmcoJGYsInRlbXBvcmFyeUZyb21Qb3J0IiwkZi5wcm90b3R5cGUuQmwpO3QuZGVmaW5lUHJvcGVydHkoJGYse0JsOiJ0ZW1wb3JhcnlGcm9tUG9ydCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc0R9LGZ1bmN0aW9uKGEpe3QubChhLFEsJGYsInRlbXBvcmFyeUZyb21Qb3J0Iik7dGhpcy5zRD1hfSk7dC5nKCRmLCJ0ZW1wb3JhcnlUb05vZGUiLCRmLnByb3RvdHlwZS5lZSk7dC5kZWZpbmVQcm9wZXJ0eSgkZix7ZWU6InRlbXBvcmFyeVRvTm9kZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudUR9LGZ1bmN0aW9uKGEpe3QubChhLFMsJGYsInRlbXBvcmFyeVRvTm9kZSIpO3RoaXMudUQ9YX0pO3QuZygkZiwidGVtcG9yYXJ5VG9Qb3J0IiwkZi5wcm90b3R5cGUuQ2wpO3QuZGVmaW5lUHJvcGVydHkoJGYse0NsOiJ0ZW1wb3JhcnlUb1BvcnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnZEfSxmdW5jdGlvbihhKXt0LmwoYSxRLCRmLCJ0ZW1wb3JhcnlUb1BvcnQiKTt0aGlzLnZEPWF9KTsNCnQuZygkZiwib3JpZ2luYWxMaW5rIiwkZi5wcm90b3R5cGUucGMpO3QuZGVmaW5lUHJvcGVydHkoJGYse3BjOiJvcmlnaW5hbExpbmsifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlRDfSxmdW5jdGlvbihhKXtudWxsIT09YSYmdC5sKGEsViwkZiwib3JpZ2luYWxMaW5rIik7dGhpcy5UQz1hfSk7dC5nKCRmLCJvcmlnaW5hbEZyb21Ob2RlIiwkZi5wcm90b3R5cGUuSGcpO3QuZGVmaW5lUHJvcGVydHkoJGYse0hnOiJvcmlnaW5hbEZyb21Ob2RlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SQ30sZnVuY3Rpb24oYSl7bnVsbCE9PWEmJnQubChhLFMsJGYsIm9yaWdpbmFsRnJvbU5vZGUiKTt0aGlzLlJDPWF9KTt0LmcoJGYsIm9yaWdpbmFsRnJvbVBvcnQiLCRmLnByb3RvdHlwZS5JZyk7DQp0LmRlZmluZVByb3BlcnR5KCRmLHtJZzoib3JpZ2luYWxGcm9tUG9ydCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU0N9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmwoYSxRLCRmLCJvcmlnaW5hbEZyb21Qb3J0Iik7dGhpcy5TQz1hfSk7dC5nKCRmLCJvcmlnaW5hbFRvTm9kZSIsJGYucHJvdG90eXBlLkpnKTt0LmRlZmluZVByb3BlcnR5KCRmLHtKZzoib3JpZ2luYWxUb05vZGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLldDfSxmdW5jdGlvbihhKXtudWxsIT09YSYmdC5sKGEsUywkZiwib3JpZ2luYWxUb05vZGUiKTt0aGlzLldDPWF9KTt0LmcoJGYsIm9yaWdpbmFsVG9Qb3J0IiwkZi5wcm90b3R5cGUuS2cpO3QuZGVmaW5lUHJvcGVydHkoJGYse0tnOiJvcmlnaW5hbFRvUG9ydCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWEN9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmwoYSxRLCRmLCJvcmlnaW5hbFRvUG9ydCIpO3RoaXMuWEM9YX0pOw0KdC5kZWZpbmVQcm9wZXJ0eSgkZix7WGQ6ImlzRm9yd2FyZHMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVDfSxmdW5jdGlvbihhKXt0LmkoYSwiYm9vbGVhbiIsJGYsImlzRm9yd2FyZHMiKTt0aGlzLnVDPWF9KTt0LkEoJGYse0R4OiJ2YWxpZFBvcnRzQ2FjaGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnlIfSk7dC5nKCRmLCJ0YXJnZXRQb3J0IiwkZi5wcm90b3R5cGUuRmYpO3QuZGVmaW5lUHJvcGVydHkoJGYse0ZmOiJ0YXJnZXRQb3J0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uRH0sZnVuY3Rpb24oYSl7bnVsbCE9PWEmJnQubChhLFEsJGYsInRhcmdldFBvcnQiKTt0aGlzLm5EPWF9KTsNCiRmLnByb3RvdHlwZS5jb3B5UG9ydFByb3BlcnRpZXM9ZnVuY3Rpb24oYSxiLGMsZCxmKXtpZihudWxsIT09YSYmbnVsbCE9PWImJm51bGwhPT1jJiZudWxsIT09ZCl7ZC5DYT1iLnBhLnNpemU7Zj8oZC50Yj1iLnRiLGQuaWs9Yi5payk6KGQucGI9Yi5wYixkLmNrPWIuY2spO2MuYmY9S2I7dmFyIGc9dC5LKCk7Yy5sb2NhdGlvbj1iLnFiKEtiLGcpO3QuQihnKTtkLmFuZ2xlPWIuZ2woKTtudWxsIT09dGhpcy5GdCYmdGhpcy5GdChhLGIsYyxkLGYpfX07JGYucHJvdG90eXBlLnNldE5vVGFyZ2V0UG9ydFByb3BlcnRpZXM9ZnVuY3Rpb24oYSxiLGMpe251bGwhPT1iJiYoYi5DYT1ILlV4LGIucGI9d2IsYi50Yj13Yik7bnVsbCE9PWEmJihhLmxvY2F0aW9uPXRoaXMuaC5SLmVhKTtudWxsIT09dGhpcy5GdCYmdGhpcy5GdChudWxsLG51bGwsYSxiLGMpfTskZi5wcm90b3R5cGUuZG9Nb3VzZURvd249ZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmRvTW91c2VNb3ZlKCl9Ow0KJGYucHJvdG90eXBlLmRvTW91c2VNb3ZlPWZ1bmN0aW9uKCl7aWYodGhpcy5oYSl7dmFyIGE9dGhpcy5oO2lmKG51bGwhPT1hKXt0aGlzLkZmPXRoaXMuZmluZFRhcmdldFBvcnQodGhpcy5YZCk7aWYobnVsbCE9PXRoaXMuRmYpe3ZhciBiPXRoaXMuRmYuUztpZihiIGluc3RhbmNlb2YgUyl7dGhpcy5YZD90aGlzLmNvcHlQb3J0UHJvcGVydGllcyhiLHRoaXMuRmYsdGhpcy5lZSx0aGlzLkNsLCEwKTp0aGlzLmNvcHlQb3J0UHJvcGVydGllcyhiLHRoaXMuRmYsdGhpcy5kZSx0aGlzLkJsLCExKTtyZXR1cm59fXRoaXMuWGQ/dGhpcy5zZXROb1RhcmdldFBvcnRQcm9wZXJ0aWVzKHRoaXMuZWUsdGhpcy5DbCwhMCk6dGhpcy5zZXROb1RhcmdldFBvcnRQcm9wZXJ0aWVzKHRoaXMuZGUsdGhpcy5CbCwhMSk7KGEub2Z8fGEucGYpJiZVZihhLGEuUi5LZSl9fX07DQokZi5wcm90b3R5cGUuZmluZFZhbGlkTGlua2FibGVQb3J0PWZ1bmN0aW9uKGEsYil7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7dmFyIGM9YS5TO2lmKCEoYyBpbnN0YW5jZW9mIFMpKXJldHVybiBudWxsO2Zvcig7bnVsbCE9PWE7KXt2YXIgZD1iP2EubEI6YS5pQTtpZighMD09PWQmJihudWxsIT09YS5OZHx8YSBpbnN0YW5jZW9mIFMpJiYoYj90aGlzLmlzVmFsaWRUbyhjLGEpOnRoaXMuaXNWYWxpZEZyb20oYyxhKSkpcmV0dXJuIGE7aWYoITE9PT1kKWJyZWFrO2E9YS5pYX1yZXR1cm4gbnVsbH07DQokZi5wcm90b3R5cGUuZmluZFRhcmdldFBvcnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5oLGM9Yi5SLmVhLGQ9dGhpcy5OQTswPj1kJiYoZD0wLjEpO2Zvcih2YXIgZj10aGlzLGc9Yi5QbShjLGQsZnVuY3Rpb24oYil7cmV0dXJuIGYuZmluZFZhbGlkTGlua2FibGVQb3J0KGIsYSl9LG51bGwsITApLGQ9SW5maW5pdHksYj1udWxsLGc9Zy5rO2cubmV4dCgpOyl7dmFyIGg9Zy52YWx1ZSxrPWguUztpZihrIGluc3RhbmNlb2YgUyl7dmFyIGw9aC5xYihLYix0LksoKSksbT1jLngtbC54LG49Yy55LWwueTt0LkIobCk7bD1tKm0rbipuO2w8ZCYmKG09dGhpcy5EeC56YShoKSxudWxsIT09bT9tJiYoYj1oLGQ9bCk6YSYmdGhpcy5pc1ZhbGlkTGluayh0aGlzLkhnLHRoaXMuSWcsayxoKXx8IWEmJnRoaXMuaXNWYWxpZExpbmsoayxoLHRoaXMuSmcsdGhpcy5LZyk/KHRoaXMuRHguYWRkKGgsITApLGI9aCxkPWwpOnRoaXMuRHguYWRkKGgsITEpKX19cmV0dXJuIG51bGwhPT1iJiYoYz1iLlMsDQpjIGluc3RhbmNlb2YgUyYmKG51bGw9PT1jLmxheWVyfHxjLmxheWVyLkFtKSk/YjpudWxsfTskZi5wcm90b3R5cGUuaXNWYWxpZEZyb209ZnVuY3Rpb24oYSxiKXtpZihudWxsPT09YXx8bnVsbD09PWIpcmV0dXJuIHRoaXMuVm07aWYodGhpcy5oLlVhPT09dGhpcyYmKG51bGwhPT1hLmxheWVyJiYhYS5sYXllci5BbXx8ITAhPT1iLmlBKSlyZXR1cm4hMTt2YXIgYz1iLkhFO2lmKEluZmluaXR5PmMpe2lmKG51bGwhPT10aGlzLnBjJiZhPT09dGhpcy5IZyYmYj09PXRoaXMuSWcpcmV0dXJuITA7dmFyIGQ9Yi5OZDtudWxsPT09ZCYmKGQ9IiIpO2lmKGEuQ3coZCkuY291bnQ+PWMpcmV0dXJuITF9cmV0dXJuITB9Ow0KJGYucHJvdG90eXBlLmlzVmFsaWRUbz1mdW5jdGlvbihhLGIpe2lmKG51bGw9PT1hfHxudWxsPT09YilyZXR1cm4gdGhpcy5WbTtpZih0aGlzLmguVWE9PT10aGlzJiYobnVsbCE9PWEubGF5ZXImJiFhLmxheWVyLkFtfHwhMCE9PWIubEIpKXJldHVybiExO3ZhciBjPWIuREc7aWYoSW5maW5pdHk+Yyl7aWYobnVsbCE9PXRoaXMucGMmJmE9PT10aGlzLkpnJiZiPT09dGhpcy5LZylyZXR1cm4hMDt2YXIgZD1iLk5kO251bGw9PT1kJiYoZD0iIik7aWYoYS53ZyhkKS5jb3VudD49YylyZXR1cm4hMX1yZXR1cm4hMH07JGYucHJvdG90eXBlLmlzSW5TYW1lTm9kZT1mdW5jdGlvbihhLGIpe2lmKG51bGw9PT1hfHxudWxsPT09YilyZXR1cm4hMTtpZihhPT09YilyZXR1cm4hMDt2YXIgYz1hLlMsZD1iLlM7cmV0dXJuIG51bGwhPT1jJiZjPT09ZH07DQokZi5wcm90b3R5cGUuaXNMaW5rZWQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsPT09YXx8bnVsbD09PWIpcmV0dXJuITE7dmFyIGM9YS5TO2lmKCEoYyBpbnN0YW5jZW9mIFMpKXJldHVybiExO3ZhciBkPWEuTmQ7bnVsbD09PWQmJihkPSIiKTt2YXIgZj1iLlM7aWYoIShmIGluc3RhbmNlb2YgUykpcmV0dXJuITE7dmFyIGc9Yi5OZDtudWxsPT09ZyYmKGc9IiIpO2ZvcihmPWYud2coZyk7Zi5uZXh0KCk7KWlmKGc9Zi52YWx1ZSxnLmFhPT09YyYmZy5SZj09PWQpcmV0dXJuITA7cmV0dXJuITF9Ow0KJGYucHJvdG90eXBlLmlzVmFsaWRMaW5rPWZ1bmN0aW9uKGEsYixjLGQpe2lmKCF0aGlzLmlzVmFsaWRGcm9tKGEsYil8fCF0aGlzLmlzVmFsaWRUbyhjLGQpfHwhKG51bGw9PT1ifHxudWxsPT09ZHx8KGIuR0UmJmQuQ0d8fCF0aGlzLmlzSW5TYW1lTm9kZShiLGQpKSYmKGIuRkUmJmQuQkd8fCF0aGlzLmlzTGlua2VkKGIsZCkpKXx8bnVsbCE9PXRoaXMucGMmJihudWxsIT09YSYmYWcodGhpcyxhLHRoaXMucGMpfHxudWxsIT09YyYmYWcodGhpcyxjLHRoaXMucGMpKXx8bnVsbCE9PWEmJm51bGwhPT1jJiYobnVsbD09PWEuZGF0YSYmbnVsbCE9PWMuZGF0YXx8bnVsbCE9PWEuZGF0YSYmbnVsbD09PWMuZGF0YSl8fCFiZyh0aGlzLGEsYyx0aGlzLnBjKSlyZXR1cm4hMTtpZihudWxsIT09YSl7dmFyIGY9YS5BcDtpZihudWxsIT09ZiYmIWYoYSxiLGMsZCx0aGlzLnBjKSlyZXR1cm4hMX1pZihudWxsIT09YyYmKGY9Yy5BcCxudWxsIT09ZiYmIWYoYSxiLGMsZCx0aGlzLnBjKSkpcmV0dXJuITE7DQpmPXRoaXMuQXA7cmV0dXJuIG51bGwhPT1mP2YoYSxiLGMsZCx0aGlzLnBjKTohMH07ZnVuY3Rpb24gYWcoYSxiLGMpe2lmKG51bGw9PT1iKXJldHVybiExO3ZhciBkPWIuJGQ7aWYobnVsbD09PWQpcmV0dXJuITE7aWYoZD09PWMpcmV0dXJuITA7dmFyIGY9bmV3IEMoUyk7Zi5hZGQoYik7cmV0dXJuIGNnKGEsZCxjLGYpfWZ1bmN0aW9uIGNnKGEsYixjLGQpe2lmKGI9PT1jKXJldHVybiEwO3ZhciBmPWIuYWE7aWYobnVsbCE9PWYmJmYuY2kmJihkLmFkZChmKSxjZyhhLGYuJGQsYyxkKSkpcmV0dXJuITA7Yj1iLmNhO3JldHVybiBudWxsIT09YiYmYi5jaSYmKGQuYWRkKGIpLGNnKGEsYi4kZCxjLGQpKT8hMDohMX0NCmZ1bmN0aW9uIGJnKGEsYixjLGQpe2lmKG51bGw9PT1ifHxudWxsPT09YylyZXR1cm4gYS5WbTt2YXIgZj1hLmguUkc7aWYoZiE9PWRnKXtpZihmPT09ZWcpe2lmKG51bGwhPT1kJiYhZC5GYylyZXR1cm4hMDtmb3IoZj1jLnFlO2YubmV4dCgpOyl7dmFyIGc9Zi52YWx1ZTtpZihnIT09ZCYmZy5GYyYmZy5jYT09PWMpcmV0dXJuITF9cmV0dXJuIWxnKGEsYixjLGQsITApfWlmKGY9PT1tZyl7aWYobnVsbCE9PWQmJiFkLkZjKXJldHVybiEwO2ZvcihmPWIucWU7Zi5uZXh0KCk7KWlmKGc9Zi52YWx1ZSxnIT09ZCYmZy5GYyYmZy5hYT09PWIpcmV0dXJuITE7cmV0dXJuIWxnKGEsYixjLGQsITApfWlmKGY9PT1uZylyZXR1cm4gYj09PWM/YT0hMDooZj1uZXcgQyhTKSxmLmFkZChjKSxhPW9nKGEsZixiLGMsZCkpLCFhO2lmKGY9PT1wZylyZXR1cm4hbGcoYSxiLGMsZCwhMSk7aWYoZj09PXFnKXJldHVybiBiPT09Yz9hPSEwOihmPW5ldyBDKFMpLGYuYWRkKGMpLGE9cmcoYSxmLGIsYyxkKSksDQohYX1yZXR1cm4hMH1mdW5jdGlvbiBsZyhhLGIsYyxkLGYpe2lmKGI9PT1jKXJldHVybiEwO2lmKG51bGw9PT1ifHxudWxsPT09YylyZXR1cm4hMTtmb3IodmFyIGc9Yi5xZTtnLm5leHQoKTspe3ZhciBoPWcudmFsdWU7aWYoaCE9PWQmJighZnx8aC5GYykmJmguY2E9PT1iJiYoaD1oLmFhLGghPT1iJiZsZyhhLGgsYyxkLGYpKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBvZyhhLGIsYyxkLGYpe2lmKGM9PT1kKXJldHVybiEwO2lmKG51bGw9PT1jfHxudWxsPT09ZHx8Yi5jb250YWlucyhjKSlyZXR1cm4hMTtiLmFkZChjKTtmb3IodmFyIGc9Yy5xZTtnLm5leHQoKTspe3ZhciBoPWcudmFsdWU7aWYoaCE9PWYmJmguY2E9PT1jJiYoaD1oLmFhLGghPT1jJiZvZyhhLGIsaCxkLGYpKSlyZXR1cm4hMH1yZXR1cm4hMX0NCmZ1bmN0aW9uIHJnKGEsYixjLGQsZil7aWYoYz09PWQpcmV0dXJuITA7aWYobnVsbD09PWN8fG51bGw9PT1kfHxiLmNvbnRhaW5zKGMpKXJldHVybiExO2IuYWRkKGMpO2Zvcih2YXIgZz1jLnFlO2cubmV4dCgpOyl7dmFyIGg9Zy52YWx1ZTtpZihoIT09Zil7dmFyIGs9aC5hYSxoPWguY2Esaz1rPT09Yz9oOms7aWYoayE9PWMmJnJnKGEsYixrLGQsZikpcmV0dXJuITB9fXJldHVybiExfXQuZygkZiwibGlua1ZhbGlkYXRpb24iLCRmLnByb3RvdHlwZS5BcCk7dC5kZWZpbmVQcm9wZXJ0eSgkZix7QXA6ImxpbmtWYWxpZGF0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5La30sZnVuY3Rpb24oYSl7bnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsJGYsImxpbmtWYWxpZGF0aW9uIik7dGhpcy5Laz1hfSk7dC5nKCRmLCJwb3J0VGFyZ2V0ZWQiLCRmLnByb3RvdHlwZS5GdCk7DQp0LmRlZmluZVByb3BlcnR5KCRmLHtGdDoicG9ydFRhcmdldGVkIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kQ30sZnVuY3Rpb24oYSl7bnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsJGYsInBvcnRUYXJnZXRlZCIpO3RoaXMuJEM9YX0pO2Z1bmN0aW9uIHBhKCl7MDxhcmd1bWVudHMubGVuZ3RoJiZ0LmFkKHBhKTskZi5jYWxsKHRoaXMpO3RoaXMubmFtZT0iTGlua2luZyI7dGhpcy5seT17fTt0aGlzLmt5PW51bGw7dGhpcy5zYT1zZzt0aGlzLnZ6PXRoaXMuakQ9bnVsbH10LmdhKCJMaW5raW5nVG9vbCIscGEpO3QuS2EocGEsJGYpO3ZhciBzZztwYS5FaXRoZXI9c2c9dC53KHBhLCJFaXRoZXIiLDApO3ZhciB0ZztwYS5Gb3J3YXJkc09ubHk9dGc9dC53KHBhLCJGb3J3YXJkc09ubHkiLDApO3ZhciB1ZztwYS5CYWNrd2FyZHNPbmx5PXVnPXQudyhwYSwiQmFja3dhcmRzT25seSIsMCk7dC5nKHBhLCJhcmNoZXR5cGVMaW5rRGF0YSIscGEucHJvdG90eXBlLk1EKTsNCnQuZGVmaW5lUHJvcGVydHkocGEse01EOiJhcmNoZXR5cGVMaW5rRGF0YSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHl9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmwoYSxPYmplY3QscGEsImFyY2hldHlwZUxpbmtEYXRhIik7YSBpbnN0YW5jZW9mIFEmJnQubChhLFYscGEsImFyY2hldHlwZUxpbmtEYXRhIik7dGhpcy5seT1hfSk7dC5nKHBhLCJhcmNoZXR5cGVMYWJlbE5vZGVEYXRhIixwYS5wcm90b3R5cGUuUHopO3QuZGVmaW5lUHJvcGVydHkocGEse1B6OiJhcmNoZXR5cGVMYWJlbE5vZGVEYXRhIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5reX0sZnVuY3Rpb24oYSl7bnVsbCE9PWEmJnQubChhLE9iamVjdCxwYSwiYXJjaGV0eXBlTGFiZWxOb2RlRGF0YSIpO2EgaW5zdGFuY2VvZiBRJiZ0LmwoYSxTLHBhLCJhcmNoZXR5cGVMYWJlbE5vZGVEYXRhIik7dGhpcy5reT1hfSk7dC5nKHBhLCJkaXJlY3Rpb24iLHBhLnByb3RvdHlwZS5kaXJlY3Rpb24pOw0KdC5kZWZpbmVQcm9wZXJ0eShwYSx7ZGlyZWN0aW9uOiJkaXJlY3Rpb24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnNhfSxmdW5jdGlvbihhKXt0LkFhKGEscGEscGEsImRpcmVjdGlvbiIpO3RoaXMuc2E9YX0pO3QuZyhwYSwic3RhcnRPYmplY3QiLHBhLnByb3RvdHlwZS5oQik7dC5kZWZpbmVQcm9wZXJ0eShwYSx7aEI6InN0YXJ0T2JqZWN0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qRH0sZnVuY3Rpb24oYSl7bnVsbCE9PWEmJnQubChhLFEscGEsInN0YXJ0T2JqZWN0Iik7dGhpcy5qRD1hfSk7dC5BKHBhLHt6eDoic3RhcnRQb3J0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52en0pOw0KcGEucHJvdG90eXBlLmNhblN0YXJ0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNFbmFibGVkKXJldHVybiExO3ZhciBhPXRoaXMuaDtpZihudWxsPT09YXx8YS5hYnx8YS5aZXx8IWEuQW0pcmV0dXJuITE7dmFyIGI9YS5iYTtyZXR1cm4gbnVsbCE9PWImJihiIGluc3RhbmNlb2YgUHx8YiBpbnN0YW5jZW9mIEtkKSYmYS5SLmxlZnQmJihhLlVhPT09dGhpc3x8dGhpcy5pc0JleW9uZERyYWdTaXplKCkpP251bGwhPT10aGlzLmZpbmRMaW5rYWJsZVBvcnQoKTohMX07DQpwYS5wcm90b3R5cGUuZmluZExpbmthYmxlUG9ydD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZihudWxsPT09YSlyZXR1cm4gbnVsbDt2YXIgYj10aGlzLmhCO251bGw9PT1iJiYoYj1hLnBlKGEuTmMuZWEsbnVsbCxudWxsKSk7aWYobnVsbD09PWJ8fCEoYi5TIGluc3RhbmNlb2YgUykpcmV0dXJuIG51bGw7dmFyIGM9dGhpcy5kaXJlY3Rpb247aWYoYz09PXNnfHxjPT09dGcpaWYoYT10aGlzLmZpbmRWYWxpZExpbmthYmxlUG9ydChiLCExKSxudWxsIT09YSlyZXR1cm4gdGhpcy5YZD0hMCxhO2lmKGM9PT1zZ3x8Yz09PXVnKWlmKGE9dGhpcy5maW5kVmFsaWRMaW5rYWJsZVBvcnQoYiwhMCksbnVsbCE9PWEpcmV0dXJuIHRoaXMuWGQ9ITEsYTtyZXR1cm4gbnVsbH07DQpwYS5wcm90b3R5cGUuZG9BY3RpdmF0ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZihudWxsIT09YSYmKG51bGw9PT10aGlzLnp4JiYodGhpcy52ej10aGlzLmZpbmRMaW5rYWJsZVBvcnQoKSksbnVsbCE9PXRoaXMuengpKXt0aGlzLnNjKHRoaXMubmFtZSk7YS5LZD0hMDthLiRiPSJwb2ludGVyIjtpZih0aGlzLlhkKXt0aGlzLklnPXRoaXMueng7dmFyIGI9dGhpcy5JZy5TO2IgaW5zdGFuY2VvZiBTJiYodGhpcy5IZz1iKTt0aGlzLmNvcHlQb3J0UHJvcGVydGllcyh0aGlzLkhnLHRoaXMuSWcsdGhpcy5kZSx0aGlzLkJsLCExKX1lbHNlIHRoaXMuS2c9dGhpcy56eCxiPXRoaXMuS2cuUyxiIGluc3RhbmNlb2YgUyYmKHRoaXMuSmc9YiksdGhpcy5jb3B5UG9ydFByb3BlcnRpZXModGhpcy5KZyx0aGlzLktnLHRoaXMuZWUsdGhpcy5DbCwhMCk7YS5hZGQodGhpcy5kZSk7YS5hZGQodGhpcy5lZSk7bnVsbCE9PXRoaXMuWmYmJihudWxsIT09dGhpcy5kZSYmKHRoaXMuWmYuYWE9dGhpcy5kZSksDQpudWxsIT09dGhpcy5lZSYmKHRoaXMuWmYuY2E9dGhpcy5lZSksdGhpcy5aZi5hYygpLGEuYWRkKHRoaXMuWmYpKTt0aGlzLmhhPSEwfX07cGEucHJvdG90eXBlLmRvRGVhY3RpdmF0ZT1mdW5jdGlvbigpe3RoaXMuaGE9ITE7dmFyIGE9dGhpcy5oO251bGwhPT1hJiYoYS5yZW1vdmUodGhpcy5aZiksYS5yZW1vdmUodGhpcy5kZSksYS5yZW1vdmUodGhpcy5lZSksYS5LZD0hMSxhLiRiPSIiLHRoaXMuZ2soKSl9O3BhLnByb3RvdHlwZS5kb1N0b3A9ZnVuY3Rpb24oKXskZi5wcm90b3R5cGUuZG9TdG9wLmNhbGwodGhpcyk7dGhpcy5oQj10aGlzLnZ6PW51bGx9Ow0KcGEucHJvdG90eXBlLmRvTW91c2VVcD1mdW5jdGlvbigpe2lmKHRoaXMuaGEpe3ZhciBhPXRoaXMuaDtpZihudWxsPT09YSlyZXR1cm47dmFyIGI9dGhpcy5nZj1udWxsLGM9bnVsbCxkPW51bGwsZj1udWxsLGc9dGhpcy5GZj10aGlzLmZpbmRUYXJnZXRQb3J0KHRoaXMuWGQpLGg9bnVsbDtudWxsIT09Zz8oaD1nLlMsaCBpbnN0YW5jZW9mIFMmJih0aGlzLlhkPyhudWxsIT09dGhpcy5IZyYmKGI9dGhpcy5IZyxjPXRoaXMuSWcpLGQ9aCxmPWcpOihiPWgsYz1nLG51bGwhPT10aGlzLkpnJiYoZD10aGlzLkpnLGY9dGhpcy5LZykpKSk6dGhpcy5YZD9udWxsIT09dGhpcy5IZyYmdGhpcy5WbSYmKGI9dGhpcy5IZyxjPXRoaXMuSWcpOm51bGwhPT10aGlzLkpnJiZ0aGlzLlZtJiYoZD10aGlzLkpnLGY9dGhpcy5LZyk7aWYobnVsbCE9PWJ8fG51bGwhPT1kKWI9dGhpcy5pbnNlcnRMaW5rKGIsYyxkLGYpLG51bGwhPT1iPyhudWxsPT09ZyYmKHRoaXMuWGQ/Yi5Kbj1hLlIuZWEuY29weSgpOg0KYi5Gbj1hLlIuZWEuY29weSgpKSxhLlBlJiZhLnNlbGVjdChiKSx0aGlzLmdmPXRoaXMubmFtZSxhLkJhKCJMaW5rRHJhd24iLGIpKTphLmJhLldEKCl9dGhpcy5zdG9wVG9vbCgpfTsNCnBhLnByb3RvdHlwZS5pbnNlcnRMaW5rPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBmPXRoaXMuaDtpZihudWxsPT09ZilyZXR1cm4gbnVsbDt2YXIgZz1mLmJhO2lmKG51bGw9PT1nKXJldHVybiBudWxsO2lmKGcgaW5zdGFuY2VvZiBLZCl7dmFyIGg9YTtiPWM7Zi5wZHx8KGg9YyxiPWEpO2lmKG51bGwhPT1oJiZudWxsIT09YilyZXR1cm4gZy5taChiLmRhdGEsZy5IYihoLmRhdGEpKSxiLmV0KCl9ZWxzZSBpZihnIGluc3RhbmNlb2YgUClpZihoPSIiLG51bGwhPT1hJiYobnVsbD09PWImJihiPWEpLGg9Yi5OZCxudWxsPT09aCYmKGg9IiIpKSxiPSIiLG51bGwhPT1jJiYobnVsbD09PWQmJihkPWMpLGI9ZC5OZCxudWxsPT09YiYmKGI9IiIpKSxkPXRoaXMuTUQsZCBpbnN0YW5jZW9mIFYpe2lmKExlKGQpLGc9ZC5jb3B5KCksZyBpbnN0YW5jZW9mIFYpcmV0dXJuIGcuYWE9YSxnLlJmPWgsZy5jYT1jLGcuT2c9YixmLmFkZChnKSxhPXRoaXMuUHosYSBpbnN0YW5jZW9mIFMmJihMZShhKSwNCmE9YS5jb3B5KCksYSBpbnN0YW5jZW9mIFMmJihhLiRkPWcsZi5hZGQoYSkpKSxnfWVsc2UgaWYobnVsbCE9PWQmJihkPWcuZ0UoZCksdC5yYihkKSkpcmV0dXJuIG51bGwhPT1hJiZnLnZ4KGQsZy5IYihhLmRhdGEpKSxnLmJCKGQsaCksbnVsbCE9PWMmJmcueHgoZCxnLkhiKGMuZGF0YSkpLGcuZUIoZCxiKSxnLiR2KGQpLGE9dGhpcy5QeixudWxsPT09YXx8YSBpbnN0YW5jZW9mIFN8fChhPWcuY29weU5vZGVEYXRhKGEpLHQucmIoYSkmJihnLnltKGEpLGE9Zy5IYihhKSx2b2lkIDAhPT1hJiZnLkpEKGQsYSkpKSxnPWYuUWYoZCk7cmV0dXJuIG51bGx9Ow0KZnVuY3Rpb24gaGYoKXswPGFyZ3VtZW50cy5sZW5ndGgmJnQuYWQoaGYpOyRmLmNhbGwodGhpcyk7dGhpcy5uYW1lPSJSZWxpbmtpbmciO3ZhciBhPW5ldyBXO2EuemI9IkRpYW1vbmQiO2EuQ2E9SC5OeDthLmZpbGw9ImxpZ2h0Ymx1ZSI7YS5zdHJva2U9ImRvZGdlcmJsdWUiO2EuY3Vyc29yPSJwb2ludGVyIjthLkNmPTA7dGhpcy5qQz1hO2E9bmV3IFc7YS56Yj0iRGlhbW9uZCI7YS5DYT1ILk54O2EuZmlsbD0ibGlnaHRibHVlIjthLnN0cm9rZT0iZG9kZ2VyYmx1ZSI7YS5jdXJzb3I9InBvaW50ZXIiO2EuQ2Y9LTE7dGhpcy53RD1hO3RoaXMuZGM9bnVsbDt0aGlzLlVDPW5ldyB4fXQuZ2EoIlJlbGlua2luZ1Rvb2wiLGhmKTt0LkthKGhmLCRmKTsNCmhmLnByb3RvdHlwZS51cGRhdGVBZG9ybm1lbnRzPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT1hJiZhIGluc3RhbmNlb2YgVil7dmFyIGI9IlJlbGlua0Zyb20iLGM9bnVsbDtpZihhLmViJiYhdGhpcy5oLmFiKXt2YXIgZD1hLk50O251bGwhPT1kJiZhLmNhblJlbGlua0Zyb20oKSYmYS5wYS5OKCkmJmEuUWEoKSYmZC5wYS5OKCkmJmQub2woKSYmKGM9YS5icChiKSxudWxsPT09YyYmKGM9dGhpcy5tYWtlQWRvcm5tZW50KGQsITEpLGMuWmM9YixhLlZrKGIsYykpKX1udWxsPT09YyYmYS51bChiKTtiPSJSZWxpbmtUbyI7Yz1udWxsO2EuZWImJiF0aGlzLmguYWImJihkPWEuTnQsbnVsbCE9PWQmJmEuY2FuUmVsaW5rVG8oKSYmYS5wYS5OKCkmJmEuUWEoKSYmZC5wYS5OKCkmJmQub2woKSYmKGM9YS5icChiKSxudWxsPT09YyYmKGM9dGhpcy5tYWtlQWRvcm5tZW50KGQsITApLGMuWmM9YixhLlZrKGIsYykpKSk7bnVsbD09PWMmJmEudWwoYil9fTsNCmhmLnByb3RvdHlwZS5tYWtlQWRvcm5tZW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IEplO2MudHlwZT12Zzt2YXIgZD1iP3RoaXMuY0s6dGhpcy5ISTtudWxsIT09ZCYmYy5hZGQoZC5jb3B5KCkpO2Mub2M9YTtyZXR1cm4gY307dC5kZWZpbmVQcm9wZXJ0eShoZix7SEk6ImZyb21IYW5kbGVBcmNoZXR5cGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmpDfSxmdW5jdGlvbihhKXtudWxsIT09YSYmdC5sKGEsUSxoZiwiZnJvbUhhbmRsZUFyY2hldHlwZSIpO3RoaXMuakM9YX0pO3QuZGVmaW5lUHJvcGVydHkoaGYse2NLOiJ0b0hhbmRsZUFyY2hldHlwZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud0R9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmwoYSxRLGhmLCJ0b0hhbmRsZUFyY2hldHlwZSIpO3RoaXMud0Q9YX0pO3QuQShoZix7aGFuZGxlOiJoYW5kbGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmRjfSk7DQpoZi5wcm90b3R5cGUuY2FuU3RhcnQ9ZnVuY3Rpb24oKXtpZighdGhpcy5pc0VuYWJsZWQpcmV0dXJuITE7dmFyIGE9dGhpcy5oO2lmKG51bGw9PT1hfHxhLmFifHxhLlplfHwhYS5UailyZXR1cm4hMTt2YXIgYj1hLmJhO2lmKG51bGw9PT1ifHwhKGIgaW5zdGFuY2VvZiBQfHxiIGluc3RhbmNlb2YgS2QpfHwhYS5SLmxlZnQpcmV0dXJuITE7Yj10aGlzLmZpbmRUb29sSGFuZGxlQXQoYS5OYy5lYSwiUmVsaW5rRnJvbSIpO251bGw9PT1iJiYoYj10aGlzLmZpbmRUb29sSGFuZGxlQXQoYS5OYy5lYSwiUmVsaW5rVG8iKSk7cmV0dXJuIG51bGwhPT1ifTsNCmhmLnByb3RvdHlwZS5kb0FjdGl2YXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO2lmKG51bGwhPT1hKXtpZihudWxsPT09dGhpcy5wYyl7dmFyIGI9dGhpcy5maW5kVG9vbEhhbmRsZUF0KGEuTmMuZWEsIlJlbGlua0Zyb20iKTtudWxsPT09YiYmKGI9dGhpcy5maW5kVG9vbEhhbmRsZUF0KGEuTmMuZWEsIlJlbGlua1RvIikpO2lmKG51bGw9PT1iKXJldHVybjt2YXIgYz1iLlM7aWYoIShjIGluc3RhbmNlb2YgSmUmJmMuWGggaW5zdGFuY2VvZiBWKSlyZXR1cm47dGhpcy5kYz1iO3RoaXMuWGQ9bnVsbD09PWN8fCJSZWxpbmtUbyI9PT1jLlpjO3RoaXMucGM9Yy5YaH10aGlzLnNjKHRoaXMubmFtZSk7YS5LZD0hMDthLiRiPSJwb2ludGVyIjt0aGlzLklnPXRoaXMucGMudWQ7dGhpcy5IZz10aGlzLnBjLmFhO3RoaXMuS2c9dGhpcy5wYy5mZTt0aGlzLkpnPXRoaXMucGMuY2E7dGhpcy5VQy5zZXQodGhpcy5wYy5wYSk7bnVsbCE9PXRoaXMucGMmJjA8dGhpcy5wYy5vYSYmKG51bGw9PT0NCnRoaXMucGMuYWEmJihudWxsIT09dGhpcy5CbCYmKHRoaXMuQmwuQ2E9SC5ncSksbnVsbCE9PXRoaXMuZGUmJih0aGlzLmRlLmxvY2F0aW9uPXRoaXMucGMubygwKSkpLG51bGw9PT10aGlzLnBjLmNhJiYobnVsbCE9PXRoaXMuQ2wmJih0aGlzLkNsLkNhPUguZ3EpLG51bGwhPT10aGlzLmVlJiYodGhpcy5lZS5sb2NhdGlvbj10aGlzLnBjLm8odGhpcy5wYy5vYS0xKSkpKTt0aGlzLmNvcHlQb3J0UHJvcGVydGllcyh0aGlzLkhnLHRoaXMuSWcsdGhpcy5kZSx0aGlzLkJsLCExKTt0aGlzLmNvcHlQb3J0UHJvcGVydGllcyh0aGlzLkpnLHRoaXMuS2csdGhpcy5lZSx0aGlzLkNsLCEwKTthLmFkZCh0aGlzLmRlKTthLmFkZCh0aGlzLmVlKTtudWxsIT09dGhpcy5aZiYmKG51bGwhPT10aGlzLmRlJiYodGhpcy5aZi5hYT10aGlzLmRlKSxudWxsIT09dGhpcy5lZSYmKHRoaXMuWmYuY2E9dGhpcy5lZSksdGhpcy5jb3B5TGlua1Byb3BlcnRpZXModGhpcy5wYyx0aGlzLlpmKSx0aGlzLlpmLmFjKCksDQphLmFkZCh0aGlzLlpmKSk7dGhpcy5oYT0hMH19O2hmLnByb3RvdHlwZS5jb3B5TGlua1Byb3BlcnRpZXM9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT09YSYmbnVsbCE9PWIpe2IuTG89YS5MbztiLnN3PWEuc3c7dmFyIGM9YS5EZTtpZihjPT09d2d8fGM9PT14ZyljPXlnO2IuRGU9YztiLldzPWEuV3M7Yi5LdD1hLkt0O2IubG49YS5sbjtiLnBiPWEucGI7Yi5jaz1hLmNrO2IuaHA9YS5ocDtiLmlwPWEuaXA7Yi50Yj1hLnRiO2IuaWs9YS5paztiLlhwPWEuWHA7Yi5ZcD1hLllwfX07aGYucHJvdG90eXBlLmRvRGVhY3RpdmF0ZT1mdW5jdGlvbigpe3RoaXMuaGE9ITE7dmFyIGE9dGhpcy5oO251bGwhPT1hJiYoYS5yZW1vdmUodGhpcy5aZiksYS5yZW1vdmUodGhpcy5kZSksYS5yZW1vdmUodGhpcy5lZSksYS5LZD0hMSxhLiRiPSIiLHRoaXMuZ2soKSl9O2hmLnByb3RvdHlwZS5kb1N0b3A9ZnVuY3Rpb24oKXskZi5wcm90b3R5cGUuZG9TdG9wLmNhbGwodGhpcyk7dGhpcy5kYz1udWxsfTsNCmhmLnByb3RvdHlwZS5kb01vdXNlVXA9ZnVuY3Rpb24oKXtpZih0aGlzLmhhKXt2YXIgYT10aGlzLmg7aWYobnVsbD09PWEpcmV0dXJuO3RoaXMuZ2Y9bnVsbDt2YXIgYj10aGlzLkhnLGM9dGhpcy5JZyxkPXRoaXMuSmcsZj10aGlzLktnLGc9dGhpcy5wYzt0aGlzLkZmPXRoaXMuZmluZFRhcmdldFBvcnQodGhpcy5YZCk7aWYobnVsbCE9PXRoaXMuRmYpe3ZhciBoPXRoaXMuRmYuUztoIGluc3RhbmNlb2YgUyYmKHRoaXMuWGQ/KGQ9aCxmPXRoaXMuRmYpOihiPWgsYz10aGlzLkZmKSl9ZWxzZSB0aGlzLlZtP3RoaXMuWGQ/Zj1kPW51bGw6Yz1iPW51bGw6Zz1udWxsO251bGwhPT1nJiYodGhpcy5yZWNvbm5lY3RMaW5rKGcsdGhpcy5YZD9kOmIsdGhpcy5YZD9mOmMsdGhpcy5YZCksbnVsbD09PXRoaXMuRmYmJih0aGlzLlhkP2cuSm49YS5SLmVhLmNvcHkoKTpnLkZuPWEuUi5lYS5jb3B5KCksZy5hYygpKSxhLlBlJiYoZy5lYj0hMCksdGhpcy5nZj10aGlzLm5hbWUsYS5CYSgiTGlua1JlbGlua2VkIiwNCmcsdGhpcy5YZD90aGlzLktnOnRoaXMuSWcpKTt6Zyh0aGlzLnBjLHRoaXMuVUMpfXRoaXMuc3RvcFRvb2woKX07aGYucHJvdG90eXBlLnJlY29ubmVjdExpbms9ZnVuY3Rpb24oYSxiLGMsZCl7aWYobnVsbD09PXRoaXMuaClyZXR1cm4hMTtjPW51bGwhPT1jJiZudWxsIT09Yy5OZD9jLk5kOiIiO2Q/KGEuY2E9YixhLk9nPWMpOihhLmFhPWIsYS5SZj1jKTtyZXR1cm4hMH07ZnVuY3Rpb24gV2YoYSxiLGMsZCxmKXtudWxsIT09Yj8oYS5jb3B5UG9ydFByb3BlcnRpZXMoYixjLGEuZGUsYS5CbCwhMSksYS5oLmFkZChhLmRlKSk6YS5oLnJlbW92ZShhLmRlKTtudWxsIT09ZD8oYS5jb3B5UG9ydFByb3BlcnRpZXMoZCxmLGEuZWUsYS5DbCwhMCksYS5oLmFkZChhLmVlKSk6YS5oLnJlbW92ZShhLmVlKX0NCmZ1bmN0aW9uIEFnKCl7MDxhcmd1bWVudHMubGVuZ3RoJiZ0LmFkKEFnKTthZS5jYWxsKHRoaXMpO3RoaXMubmFtZT0iTGlua1Jlc2hhcGluZyI7dmFyIGE9bmV3IFc7YS56Yj0iUmVjdGFuZ2xlIjthLkNhPUguZHE7YS5maWxsPSJsaWdodGJsdWUiO2Euc3Ryb2tlPSJkb2RnZXJibHVlIjt0aGlzLkVrPWE7YT1uZXcgVzthLnpiPSJEaWFtb25kIjthLkNhPUguZHE7YS5maWxsPSJsaWdodGJsdWUiO2Euc3Ryb2tlPSJkb2RnZXJibHVlIjt0aGlzLkZDPWE7dGhpcy5hRD0zO3RoaXMuaXk9dGhpcy5kYz1udWxsO3RoaXMuVkM9bmV3IHc7dGhpcy5uej1udWxsfXQuZ2EoIkxpbmtSZXNoYXBpbmdUb29sIixBZyk7dC5LYShBZyxhZSk7dmFyIElnO0FnLk5vbmU9SWc9dC53KEFnLCJOb25lIiwwKTt2YXIgS2c7QWcuSG9yaXpvbnRhbD1LZz10LncoQWcsIkhvcml6b250YWwiLDEpO3ZhciBMZztBZy5WZXJ0aWNhbD1MZz10LncoQWcsIlZlcnRpY2FsIiwyKTt2YXIgTWc7DQpBZy5BbGw9TWc9dC53KEFnLCJBbGwiLDMpO2Z1bmN0aW9uIE5nKGEsYil7dC5sKGEsUSxBZywic2V0UmVzaGFwaW5nQmVoYXZpb3I6b2JqIik7dC5BYShiLEFnLEFnLCJzZXRSZXNoYXBpbmdCZWhhdmlvcjpiZWhhdmlvciIpO2EuenY9Yn1BZy5wcm90b3R5cGUudXBkYXRlQWRvcm5tZW50cz1mdW5jdGlvbihhKXtpZihudWxsIT09YSYmYSBpbnN0YW5jZW9mIFYpe2lmKGEuZWImJiF0aGlzLmguYWIpe3ZhciBiPWEucGF0aDtpZihudWxsIT09YiYmYS5jYW5SZXNoYXBlKCkmJmEucGEuTigpJiZhLlFhKCkmJmIucGEuTigpJiZiLm9sKCkpe3ZhciBjPWEuYnAodGhpcy5uYW1lKTtpZihudWxsPT09Y3x8Yy5ySCE9PWEub2F8fGMuQUghPT1hLktwKWM9dGhpcy5tYWtlQWRvcm5tZW50KGIpLGMuckg9YS5vYSxjLkFIPWEuS3AsYS5Wayh0aGlzLm5hbWUsYyk7aWYobnVsbCE9PWMpe2MubG9jYXRpb249YS5wb3NpdGlvbjtyZXR1cm59fX1hLnVsKHRoaXMubmFtZSl9fTsNCkFnLnByb3RvdHlwZS5tYWtlQWRvcm5tZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWEuUyxjPWIub2EsZD1iLmljLGY9bnVsbDtpZihudWxsIT09Yi5wb2ludHMmJjE8Yyl7Zj1uZXcgSmU7Zi50eXBlPXZnO3ZhciBjPWIuZnQsZz1iLld3LGg9ZD8xOjA7aWYoYi5LcCYmYi5EZSE9PU9nKWZvcih2YXIgaz1jK2g7azxnLWg7aysrKXt2YXIgbD10aGlzLm1ha2VSZXNlZ21lbnRIYW5kbGUoYSxrKTtudWxsIT09bCYmKGwuQ2Y9ayxsLkx0PTAuNSxmLmFkZChsKSl9Zm9yKGs9YysxO2s8ZztrKyspaWYobD10aGlzLm1ha2VIYW5kbGUoYSxrKSxudWxsIT09bCl7bC5DZj1rO2lmKGshPT1jKWlmKGs9PT1jKzEmJmQpe3ZhciBoPWIubyhjKSxtPWIubyhjKzEpO0guSShoLngsbS54KSYmSC5JKGgueSxtLnkpJiYobT1iLm8oYy0xKSk7SC5JKGgueCxtLngpPyhOZyhsLExnKSxsLmN1cnNvcj0ibi1yZXNpemUiKTpILkkoaC55LG0ueSkmJihOZyhsLEtnKSxsLmN1cnNvcj0idy1yZXNpemUiKX1lbHNlIGs9PT0NCmctMSYmZD8oaD1iLm8oZy0xKSxtPWIubyhnKSxILkkoaC54LG0ueCkmJkguSShoLnksbS55KSYmKGg9Yi5vKGcrMSkpLEguSShoLngsbS54KT8oTmcobCxMZyksbC5jdXJzb3I9Im4tcmVzaXplIik6SC5JKGgueSxtLnkpJiYoTmcobCxLZyksbC5jdXJzb3I9InctcmVzaXplIikpOmshPT1nJiYoTmcobCxNZyksbC5jdXJzb3I9Im1vdmUiKTtmLmFkZChsKX1mLlpjPXRoaXMubmFtZTtmLm9jPWF9cmV0dXJuIGZ9O0FnLnByb3RvdHlwZS5tYWtlSGFuZGxlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5odDtyZXR1cm4gbnVsbD09PWE/bnVsbDphLmNvcHkoKX07dC5kZWZpbmVQcm9wZXJ0eShBZyx7aHQ6ImhhbmRsZUFyY2hldHlwZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRWt9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmwoYSxRLEFnLCJoYW5kbGVBcmNoZXR5cGUiKTt0aGlzLkVrPWF9KTsNCkFnLnByb3RvdHlwZS5tYWtlUmVzZWdtZW50SGFuZGxlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wSjtyZXR1cm4gbnVsbD09PWE/bnVsbDphLmNvcHkoKX07dC5kZWZpbmVQcm9wZXJ0eShBZyx7cEo6Im1pZEhhbmRsZUFyY2hldHlwZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRkN9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmwoYSxRLEFnLCJtaWRIYW5kbGVBcmNoZXR5cGUiKTt0aGlzLkZDPWF9KTt0LkEoQWcse2hhbmRsZToiaGFuZGxlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kY30pO3QuQShBZyx7THM6ImFkb3JuZWRMaW5rIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5peX0pO0FnLnByb3RvdHlwZS5jYW5TdGFydD1mdW5jdGlvbigpe2lmKCF0aGlzLmlzRW5hYmxlZClyZXR1cm4hMTt2YXIgYT10aGlzLmg7cmV0dXJuIG51bGwhPT1hJiYhYS5hYiYmYS5ObyYmYS5SLmxlZnQ/bnVsbCE9PXRoaXMuZmluZFRvb2xIYW5kbGVBdChhLk5jLmVhLHRoaXMubmFtZSk6ITF9Ow0KQWcucHJvdG90eXBlLmRvQWN0aXZhdGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7aWYobnVsbCE9PWEmJih0aGlzLmRjPXRoaXMuZmluZFRvb2xIYW5kbGVBdChhLk5jLmVhLHRoaXMubmFtZSksbnVsbCE9PXRoaXMuZGMpKXt2YXIgYj10aGlzLmRjLlMuWGg7aWYoYiBpbnN0YW5jZW9mIFYpe3RoaXMuaXk9YjthLktkPSEwO3RoaXMuc2ModGhpcy5uYW1lKTtpZihiLktwJiYwLjU9PT10aGlzLmRjLkx0KXt2YXIgYz1iLnBvaW50cy5jb3B5KCksZD10aGlzLmRjLnFiKEtiKTtjLkpkKHRoaXMuZGMuQ2YrMSxkKTtiLmljJiZjLkpkKHRoaXMuZGMuQ2YrMSxkKTtiLnBvaW50cz1jO2IuUGYoKTtiLnVwZGF0ZUFkb3JubWVudHMoKTt0aGlzLmRjPXRoaXMuZmluZFRvb2xIYW5kbGVBdChhLk5jLmVhLHRoaXMubmFtZSl9dGhpcy5WQz1iLm8odGhpcy5kYy5DZik7dGhpcy5uej1iLnBvaW50cy5jb3B5KCk7dGhpcy5oYT0hMH19fTsNCkFnLnByb3RvdHlwZS5kb0RlYWN0aXZhdGU9ZnVuY3Rpb24oKXt0aGlzLmdrKCk7dGhpcy5peT10aGlzLmRjPW51bGw7dmFyIGE9dGhpcy5oO251bGwhPT1hJiYoYS5LZD0hMSk7dGhpcy5oYT0hMX07QWcucHJvdG90eXBlLmRvQ2FuY2VsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5McztudWxsIT09YSYmKGEucG9pbnRzPXRoaXMubnopO3RoaXMuc3RvcFRvb2woKX07QWcucHJvdG90eXBlLmRvTW91c2VNb3ZlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO3RoaXMuaGEmJm51bGwhPT1hJiYoYT10aGlzLmNvbXB1dGVSZXNoYXBlKGEuUi5lYSksdGhpcy5yZXNoYXBlKGEpKX07DQpBZy5wcm90b3R5cGUuZG9Nb3VzZVVwPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO2lmKHRoaXMuaGEmJm51bGwhPT1hKXt2YXIgYj10aGlzLmNvbXB1dGVSZXNoYXBlKGEuUi5lYSk7dGhpcy5yZXNoYXBlKGIpO2I9dGhpcy5McztpZihudWxsIT09YiYmYi5LcCl7dmFyIGM9dGhpcy5oYW5kbGUuQ2YsZD1iLm8oYy0xKSxmPWIubyhjKSxnPWIubyhjKzEpO2lmKGIuaWMpe2lmKGM+Yi5mdCsxJiZjPGIuV3ctMSl7dmFyIGg9Yi5vKGMtMik7aWYoTWF0aC5hYnMoZC54LWYueCk8dGhpcy5MZyYmTWF0aC5hYnMoZC55LWYueSk8dGhpcy5MZyYmKFBnKHRoaXMsaCxkLGYsZywhMCl8fFBnKHRoaXMsaCxkLGYsZywhMSkpKXt2YXIgaz1iLnBvaW50cy5jb3B5KCk7UGcodGhpcyxoLGQsZixnLCEwKT8oay5NZyhjLTIsbmV3IHcoaC54LChnLnkraC55KS8yKSksay5NZyhjKzEsbmV3IHcoZy54LChnLnkraC55KS8yKSkpOihrLk1nKGMtMixuZXcgdygoZy54K2gueCkvMixoLnkpKSxrLk1nKGMrMSwNCm5ldyB3KChnLngraC54KS8yLGcueSkpKTtrLnFkKGMpO2sucWQoYy0xKTtiLnBvaW50cz1rO2IuUGYoKTtiLnVwZGF0ZUFkb3JubWVudHMoKX1lbHNlIGg9Yi5vKGMrMiksTWF0aC5hYnMoZi54LWcueCk8dGhpcy5MZyYmTWF0aC5hYnMoZi55LWcueSk8dGhpcy5MZyYmKFBnKHRoaXMsZCxmLGcsaCwhMCl8fFBnKHRoaXMsZCxmLGcsaCwhMSkpJiYoaz1iLnBvaW50cy5jb3B5KCksUGcodGhpcyxkLGYsZyxoLCEwKT8oay5NZyhjLTEsbmV3IHcoZC54LChkLnkraC55KS8yKSksay5NZyhjKzIsbmV3IHcoaC54LChkLnkraC55KS8yKSkpOihrLk1nKGMtMSxuZXcgdygoZC54K2gueCkvMixkLnkpKSxrLk1nKGMrMixuZXcgdygoZC54K2gueCkvMixoLnkpKSksay5xZChjKzEpLGsucWQoYyksYi5wb2ludHM9ayxiLlBmKCksYi51cGRhdGVBZG9ybm1lbnRzKCkpfX1lbHNlIGg9dC5LKCksSC5jbihkLngsZC55LGcueCxnLnksZi54LGYueSxoKSYmaC5aaihmKTx0aGlzLkxnKnRoaXMuTGcmJg0KKGs9Yi5wb2ludHMuY29weSgpLGsucWQoYyksYi5wb2ludHM9ayxiLlBmKCksYi51cGRhdGVBZG9ybm1lbnRzKCkpLHQuQihoKX1hLk9jKCk7dGhpcy5nZj10aGlzLm5hbWU7YS5CYSgiTGlua1Jlc2hhcGVkIix0aGlzLkxzKX10aGlzLnN0b3BUb29sKCl9O2Z1bmN0aW9uIFBnKGEsYixjLGQsZixnKXtyZXR1cm4gZz9NYXRoLmFicyhiLnktYy55KTxhLkxnJiZNYXRoLmFicyhjLnktZC55KTxhLkxnJiZNYXRoLmFicyhkLnktZi55KTxhLkxnOk1hdGguYWJzKGIueC1jLngpPGEuTGcmJk1hdGguYWJzKGMueC1kLngpPGEuTGcmJk1hdGguYWJzKGQueC1mLngpPGEuTGd9dC5nKEFnLCJyZXNlZ21lbnRpbmdEaXN0YW5jZSIsQWcucHJvdG90eXBlLkxnKTsNCnQuZGVmaW5lUHJvcGVydHkoQWcse0xnOiJyZXNlZ21lbnRpbmdEaXN0YW5jZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYUR9LGZ1bmN0aW9uKGEpe3QuaShhLCJudW1iZXIiLEFnLCJyZXNlZ21lbnRpbmdEaXN0YW5jZSIpO3RoaXMuYUQ9YX0pOw0KQWcucHJvdG90eXBlLnJlc2hhcGU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5McztiLnlsKCk7dmFyIGM9dGhpcy5oYW5kbGUuQ2YsZD10aGlzLmhhbmRsZSYmdGhpcy5oYW5kbGUuenY/dGhpcy5oYW5kbGUuenY6SWc7aWYoYi5pYylpZihjPT09Yi5mdCsxKWM9Yi5mdCsxLGQ9PT1MZz8oYi5ZKGMsYi5vKGMtMSkueCxhLnkpLGIuWShjKzEsYi5vKGMrMikueCxhLnkpKTpkPT09S2cmJihiLlkoYyxhLngsYi5vKGMtMSkueSksYi5ZKGMrMSxhLngsYi5vKGMrMikueSkpO2Vsc2UgaWYoYz09PWIuV3ctMSljPWIuV3ctMSxkPT09TGc/KGIuWShjLTEsYi5vKGMtMikueCxhLnkpLGIuWShjLGIubyhjKzEpLngsYS55KSk6ZD09PUtnJiYoYi5ZKGMtMSxhLngsYi5vKGMtMikueSksYi5ZKGMsYS54LGIubyhjKzEpLnkpKTtlbHNle3ZhciBkPWMsZj1iLm8oZCksZz1iLm8oZC0xKSxoPWIubyhkKzEpO0guSShnLngsZi54KSYmSC5JKGYueSxoLnkpPyhILkkoZy54LGIubyhkLTIpLngpJiYhSC5JKGcueSwNCmIubyhkLTIpLnkpPyhiLkMoZCxhLngsZy55KSxjKyssZCsrKTpiLlkoZC0xLGEueCxnLnkpLEguSShoLnksYi5vKGQrMikueSkmJiFILkkoaC54LGIubyhkKzIpLngpP2IuQyhkKzEsaC54LGEueSk6Yi5ZKGQrMSxoLngsYS55KSk6SC5JKGcueSxmLnkpJiZILkkoZi54LGgueCk/KEguSShnLnksYi5vKGQtMikueSkmJiFILkkoZy54LGIubyhkLTIpLngpPyhiLkMoZCxnLngsYS55KSxjKyssZCsrKTpiLlkoZC0xLGcueCxhLnkpLEguSShoLngsYi5vKGQrMikueCkmJiFILkkoaC55LGIubyhkKzIpLnkpP2IuQyhkKzEsYS54LGgueSk6Yi5ZKGQrMSxhLngsaC55KSk6SC5JKGcueCxmLngpJiZILkkoZi54LGgueCk/KEguSShnLngsYi5vKGQtMikueCkmJiFILkkoZy55LGIubyhkLTIpLnkpPyhiLkMoZCxhLngsZy55KSxjKyssZCsrKTpiLlkoZC0xLGEueCxnLnkpLEguSShoLngsYi5vKGQrMikueCkmJiFILkkoaC55LGIubyhkKzIpLnkpP2IuQyhkKzEsYS54LGgueSk6Yi5ZKGQrMSxhLngsDQpoLnkpKTpILkkoZy55LGYueSkmJkguSShmLnksaC55KSYmKEguSShnLnksYi5vKGQtMikueSkmJiFILkkoZy54LGIubyhkLTIpLngpPyhiLkMoZCxnLngsYS55KSxjKyssZCsrKTpiLlkoZC0xLGcueCxhLnkpLEguSShoLnksYi5vKGQrMikueSkmJiFILkkoaC54LGIubyhkKzIpLngpP2IuQyhkKzEsaC54LGEueSk6Yi5ZKGQrMSxoLngsYS55KSk7Yi5ZKGMsYS54LGEueSl9ZWxzZSBiLlkoYyxhLngsYS55KSwxPT09YyYmYi5jb21wdXRlU3BvdCghMCkuR2UoKSYmKGY9Yi5hYSxnPWIudWQsbnVsbD09PWZ8fGYuUWEoKXx8KGY9Zi5maW5kVmlzaWJsZU5vZGUoKSxmIT09Yi5hYSYmKGc9Zi5mbCgiIikpKSxkPWcucWIoS2IsdC5LKCkpLGY9Yi5nZXRMaW5rUG9pbnRGcm9tUG9pbnQoZixnLGQsYSwhMCx0LksoKSksYi5ZKDAsZi54LGYueSksdC5CKGQpLHQuQihmKSksYz09PWIub2EtMiYmYi5jb21wdXRlU3BvdCghMSkuR2UoKSYmKGM9Yi5jYSxmPWIuZmUsbnVsbD09PWN8fGMuUWEoKXx8DQooYz1jLmZpbmRWaXNpYmxlTm9kZSgpLGMhPT1iLmNhJiYoZj1jLmZsKCIiKSkpLGQ9Zi5xYihLYix0LksoKSksZj1iLmdldExpbmtQb2ludEZyb21Qb2ludChjLGYsZCxhLCExLHQuSygpKSxiLlkoYi5vYS0xLGYueCxmLnkpLHQuQihkKSx0LkIoZikpO2IuV2koKX07QWcucHJvdG90eXBlLmNvbXB1dGVSZXNoYXBlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuTHMsYz10aGlzLmhhbmRsZS5DZjtzd2l0Y2godGhpcy5oYW5kbGUmJnRoaXMuaGFuZGxlLnp2P3RoaXMuaGFuZGxlLnp2OklnKXtjYXNlIE1nOnJldHVybiBhO2Nhc2UgTGc6cmV0dXJuIGI9Yi5vKGMpLG5ldyB3KGIueCxhLnkpO2Nhc2UgS2c6cmV0dXJuIGI9Yi5vKGMpLG5ldyB3KGEueCxiLnkpO2RlZmF1bHQ6Y2FzZSBJZzpyZXR1cm4gYi5vKGMpfX07dC5nKEFnLCJvcmlnaW5hbFBvaW50IixBZy5wcm90b3R5cGUuekopO3QuQShBZyx7eko6Im9yaWdpbmFsUG9pbnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlZDfSk7DQp0LmcoQWcsIm9yaWdpbmFsUG9pbnRzIixBZy5wcm90b3R5cGUuQUopO3QuQShBZyx7QUo6Im9yaWdpbmFsUG9pbnRzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uen0pOw0KZnVuY3Rpb24gUWcoKXswPGFyZ3VtZW50cy5sZW5ndGgmJnQuYWQoUWcpO2FlLmNhbGwodGhpcyk7dGhpcy5uYW1lPSJSZXNpemluZyI7dGhpcy5Gaj0obmV3IGdhKDEsMSkpLmZyZWV6ZSgpO3RoaXMuRWo9KG5ldyBnYSg5OTk5LDk5OTkpKS5mcmVlemUoKTt0aGlzLnFqPShuZXcgZ2EoTmFOLE5hTikpLmZyZWV6ZSgpO3RoaXMuV3E9ITE7dGhpcy5pYj1udWxsO3ZhciBhPW5ldyBXO2EuUmo9S2I7YS56Yj0iUmVjdGFuZ2xlIjthLkNhPUguZHE7YS5maWxsPSJsaWdodGJsdWUiO2Euc3Ryb2tlPSJkb2RnZXJibHVlIjthLmZiPTE7YS5jdXJzb3I9InBvaW50ZXIiO3RoaXMuRWs9YTt0aGlzLmRjPW51bGw7dGhpcy51dj1uZXcgZ2E7dGhpcy5tej1uZXcgdzt0aGlzLlF5PW5ldyBnYSgwLDApO3RoaXMuUHk9bmV3IGdhKEluZmluaXR5LEluZmluaXR5KTt0aGlzLk95PW5ldyBnYSgxLDEpO3RoaXMuT0M9ITB9dC5nYSgiUmVzaXppbmdUb29sIixRZyk7dC5LYShRZyxhZSk7DQpRZy5wcm90b3R5cGUudXBkYXRlQWRvcm5tZW50cz1mdW5jdGlvbihhKXtpZighKG51bGw9PT1hfHxhIGluc3RhbmNlb2YgVikpe2lmKGEuZWImJiF0aGlzLmguYWIpe3ZhciBiPWEuWEY7aWYobnVsbCE9PWImJmEuY2FuUmVzaXplKCkmJmEucGEuTigpJiZhLlFhKCkmJmIucGEuTigpJiZiLm9sKCkpe3ZhciBjPWEuYnAodGhpcy5uYW1lKTtudWxsPT09YyYmKGM9dGhpcy5tYWtlQWRvcm5tZW50KGIpKTtpZihudWxsIT09Yyl7dmFyIGQ9Yi5nbCgpO2MuYW5nbGU9ZDt2YXIgZj1iLnFiKGMuYmYsdC5LKCkpLGc9Yi5kaygpO2MubG9jYXRpb249Zjt0LkIoZik7Zj1jLnBsYWNlaG9sZGVyO2lmKG51bGwhPT1mKXt2YXIgYj1iLlJhLGg9dC5BbCgpO2gucChiLndpZHRoKmcsYi5oZWlnaHQqZyk7Zi5DYT1oO3QuYmsoaCl9UmcodGhpcyxjLGQpO2EuVmsodGhpcy5uYW1lLGMpO3JldHVybn19fWEudWwodGhpcy5uYW1lKX19Ow0KUWcucHJvdG90eXBlLm1ha2VBZG9ybm1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbCxiPWEuUy5WRjtpZihudWxsPT09Yil7Yj1uZXcgSmU7Yi50eXBlPVNnO2IuYmY9S2I7dmFyIGM9bmV3IFRnO2MuZmo9ITA7Yi5hZGQoYyk7Yi5hZGQodGhpcy5tYWtlSGFuZGxlKGEsRWIpKTtiLmFkZCh0aGlzLm1ha2VIYW5kbGUoYSxHYikpO2IuYWRkKHRoaXMubWFrZUhhbmRsZShhLFBiKSk7Yi5hZGQodGhpcy5tYWtlSGFuZGxlKGEsTGIpKTtiLmFkZCh0aGlzLm1ha2VIYW5kbGUoYSxRYikpO2IuYWRkKHRoaXMubWFrZUhhbmRsZShhLFZiKSk7Yi5hZGQodGhpcy5tYWtlSGFuZGxlKGEsV2IpKTtiLmFkZCh0aGlzLm1ha2VIYW5kbGUoYSxVYikpfWVsc2UgaWYoTGUoYiksYj1iLmNvcHkoKSwhKGIgaW5zdGFuY2VvZiBKZSkpcmV0dXJuIG51bGw7Yi5aYz10aGlzLm5hbWU7Yi5vYz1hO3JldHVybiBifTsNClFnLnByb3RvdHlwZS5tYWtlSGFuZGxlPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5odDtpZihudWxsPT09YylyZXR1cm4gbnVsbDtjPWMuY29weSgpO2MuYWxpZ25tZW50PWI7cmV0dXJuIGN9Ow0KZnVuY3Rpb24gUmcoYSxiLGMpe2lmKG51bGwhPT1iKWlmKCFiLmFsaWdubWVudC5QYygpJiYiIiE9PWIuY3Vyc29yKWE6e2E9Yi5hbGlnbm1lbnQ7YS5HZSgpJiYoYT1LYik7aWYoMD49YS54KWM9MD49YS55P2MrMjI1OjE8PWEueT9jKzEzNTpjKzE4MDtlbHNlIGlmKDE8PWEueCkwPj1hLnk/Yys9MzE1OjE8PWEueSYmKGMrPTQ1KTtlbHNlIGlmKDA+PWEueSljKz0yNzA7ZWxzZSBpZigxPD1hLnkpYys9OTA7ZWxzZSBicmVhayBhOzA+Yz9jKz0zNjA6MzYwPD1jJiYoYy09MzYwKTtiLmN1cnNvcj0yMi41PmM/ImUtcmVzaXplIjo2Ny41PmM/InNlLXJlc2l6ZSI6MTEyLjU+Yz8icy1yZXNpemUiOjE1Ny41PmM/InN3LXJlc2l6ZSI6MjAyLjU+Yz8idy1yZXNpemUiOjI0Ny41PmM/Im53LXJlc2l6ZSI6MjkyLjU+Yz8ibi1yZXNpemUiOjMzNy41PmM/Im5lLXJlc2l6ZSI6ImUtcmVzaXplIn1lbHNlIGlmKGIgaW5zdGFuY2VvZiB5KWZvcihiPWIuZWxlbWVudHM7Yi5uZXh0KCk7KVJnKGEsDQpiLnZhbHVlLGMpfXQuZGVmaW5lUHJvcGVydHkoUWcse2h0OiJoYW5kbGVBcmNoZXR5cGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkVrfSxmdW5jdGlvbihhKXtudWxsIT09YSYmdC5sKGEsUSxRZywiaGFuZGxlQXJjaGV0eXBlIik7dGhpcy5Faz1hfSk7dC5BKFFnLHtoYW5kbGU6ImhhbmRsZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGN9KTt0LmRlZmluZVByb3BlcnR5KFFnLHtvYzoiYWRvcm5lZE9iamVjdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWJ9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmwoYSxRLFFnLCJhZG9ybmVkT2JqZWN0Iik7dGhpcy5pYj1hfSk7UWcucHJvdG90eXBlLmNhblN0YXJ0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNFbmFibGVkKXJldHVybiExO3ZhciBhPXRoaXMuaDtyZXR1cm4gbnVsbCE9PWEmJiFhLmFiJiZhLk9vJiZhLlIubGVmdD9udWxsIT09dGhpcy5maW5kVG9vbEhhbmRsZUF0KGEuTmMuZWEsdGhpcy5uYW1lKT8hMDohMTohMX07DQpRZy5wcm90b3R5cGUuZG9BY3RpdmF0ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtudWxsIT09YSYmKHRoaXMuZGM9dGhpcy5maW5kVG9vbEhhbmRsZUF0KGEuTmMuZWEsdGhpcy5uYW1lKSxudWxsIT09dGhpcy5kYyYmKHRoaXMuaWI9dGhpcy5kYy5TLm9jLHRoaXMubXouc2V0KHRoaXMuaWIuUy5sb2NhdGlvbiksdGhpcy51di5zZXQodGhpcy5pYi5DYSksdGhpcy5PeT10aGlzLmNvbXB1dGVDZWxsU2l6ZSgpLHRoaXMuUXk9dGhpcy5jb21wdXRlTWluU2l6ZSgpLHRoaXMuUHk9dGhpcy5jb21wdXRlTWF4U2l6ZSgpLGEuS2Q9ITAsdGhpcy5PQz1hLlpiLmlzRW5hYmxlZCxhLlpiLmlzRW5hYmxlZD0hMSx0aGlzLnNjKHRoaXMubmFtZSksdGhpcy5oYT0hMCkpfTtRZy5wcm90b3R5cGUuZG9EZWFjdGl2YXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO251bGwhPT1hJiYodGhpcy5naygpLHRoaXMuaWI9dGhpcy5kYz1udWxsLHRoaXMuaGE9YS5LZD0hMSxhLlpiLmlzRW5hYmxlZD10aGlzLk9DKX07DQpRZy5wcm90b3R5cGUuZG9DYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLmliLkNhPXRoaXMudXY7dGhpcy5pYi5TLmxvY2F0aW9uPXRoaXMubXo7dGhpcy5zdG9wVG9vbCgpfTtRZy5wcm90b3R5cGUuZG9Nb3VzZU1vdmU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7aWYodGhpcy5oYSYmbnVsbCE9PWEpe3ZhciBiPXRoaXMuUXksYz10aGlzLlB5LGQ9dGhpcy5PeSxmPXRoaXMuaWIuS0UoYS5SLmVhLHQuSygpKSxnPVVnO3RoaXMuaWIgaW5zdGFuY2VvZiBXJiYoZz10aGlzLmliLkl3LGc9PT1WZyYmKGc9dGhpcy5pYi5PYS52YykpO2I9dGhpcy5jb21wdXRlUmVzaXplKGYsdGhpcy5kYy5hbGlnbm1lbnQsYixjLGQsIShnPT09V2d8fGc9PT1YZ3x8YS5SLnNoaWZ0KSk7dGhpcy5yZXNpemUoYik7YS5VZigpO3QuQihmKX19Ow0KUWcucHJvdG90eXBlLmRvTW91c2VVcD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZih0aGlzLmhhJiZudWxsIT09YSl7dmFyIGI9dGhpcy5ReSxjPXRoaXMuUHksZD10aGlzLk95LGY9dGhpcy5pYi5LRShhLlIuZWEsdC5LKCkpLGc9VWc7dGhpcy5pYiBpbnN0YW5jZW9mIFcmJihnPXRoaXMuaWIuSXcsZz09PVZnJiYoZz10aGlzLmliLk9hLnZjKSk7Yj10aGlzLmNvbXB1dGVSZXNpemUoZix0aGlzLmRjLmFsaWdubWVudCxiLGMsZCwhKGc9PT1XZ3x8Zz09PVhnfHxhLlIuc2hpZnQpKTt0aGlzLnJlc2l6ZShiKTt0LkIoZik7YS5PYygpO3RoaXMuZ2Y9dGhpcy5uYW1lO2EuQmEoIlBhcnRSZXNpemVkIix0aGlzLmliLHRoaXMudXYpfXRoaXMuc3RvcFRvb2woKX07DQpRZy5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT10aGlzLmgpe3ZhciBiPXRoaXMub2MsYz1iLlMsZD1iLmdsKCksZj1iLmRrKCksZz1NYXRoLlBJKmQvMTgwLGg9TWF0aC5jb3MoZyksZz1NYXRoLnNpbihnKSxrPTA8ZCYmMTgwPmQ/MTowLGw9OTA8ZCYmMjcwPmQ/MTowLGQ9MTgwPGQmJjM2MD5kPzE6MCxtPWEud2lkdGgtYi5SYS53aWR0aCxuPWEuaGVpZ2h0LWIuUmEuaGVpZ2h0LHA9Yy5wb3NpdGlvbi5jb3B5KCk7cC54Kz1mKigoYS54K20qbCkqaC0oYS55K24qaykqZyk7cC55Kz1mKigoYS54K20qZCkqZysoYS55K24qbCkqaCk7Yi5DYT1hLnNpemU7Yy5zZigpO2MubW92ZShwKX19Ow0KUWcucHJvdG90eXBlLmNvbXB1dGVSZXNpemU9ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe2IuR2UoKSYmKGI9S2IpO3ZhciBoPXRoaXMub2MuUmEsaz1oLngsbD1oLnksbT1oLngraC53aWR0aCxuPWgueStoLmhlaWdodCxwPTE7aWYoIWcpe3ZhciBwPWgud2lkdGgscT1oLmhlaWdodDswPj1wJiYocD0xKTswPj1xJiYocT0xKTtwPXEvcH1xPXQuSygpO0guY3QoYS54LGEueSxrLGwsZi53aWR0aCxmLmhlaWdodCxxKTthPWguY29weSgpOzA+PWIueD8wPj1iLnk/KGEueD1NYXRoLm1heChxLngsbS1kLndpZHRoKSxhLng9TWF0aC5taW4oYS54LG0tYy53aWR0aCksYS53aWR0aD1NYXRoLm1heChtLWEueCxjLndpZHRoKSxhLnk9TWF0aC5tYXgocS55LG4tZC5oZWlnaHQpLGEueT1NYXRoLm1pbihhLnksbi1jLmhlaWdodCksYS5oZWlnaHQ9TWF0aC5tYXgobi1hLnksYy5oZWlnaHQpLGd8fChiPWEuaGVpZ2h0L2Eud2lkdGgscDxiPyhhLmhlaWdodD1wKmEud2lkdGgsYS55PW4tYS5oZWlnaHQpOg0KKGEud2lkdGg9YS5oZWlnaHQvcCxhLng9bS1hLndpZHRoKSkpOjE8PWIueT8oYS54PU1hdGgubWF4KHEueCxtLWQud2lkdGgpLGEueD1NYXRoLm1pbihhLngsbS1jLndpZHRoKSxhLndpZHRoPU1hdGgubWF4KG0tYS54LGMud2lkdGgpLGEuaGVpZ2h0PU1hdGgubWF4KE1hdGgubWluKHEueS1sLGQuaGVpZ2h0KSxjLmhlaWdodCksZ3x8KGI9YS5oZWlnaHQvYS53aWR0aCxwPGI/YS5oZWlnaHQ9cCphLndpZHRoOihhLndpZHRoPWEuaGVpZ2h0L3AsYS54PW0tYS53aWR0aCkpKTooYS54PU1hdGgubWF4KHEueCxtLWQud2lkdGgpLGEueD1NYXRoLm1pbihhLngsbS1jLndpZHRoKSxhLndpZHRoPW0tYS54LGd8fChhLmhlaWdodD1wKmEud2lkdGgsYS55PWwrMC41KihuLWwtYS5oZWlnaHQpKSk6MTw9Yi54PzA+PWIueT8oYS53aWR0aD1NYXRoLm1heChNYXRoLm1pbihxLngtayxkLndpZHRoKSxjLndpZHRoKSxhLnk9TWF0aC5tYXgocS55LG4tZC5oZWlnaHQpLGEueT1NYXRoLm1pbihhLnksDQpuLWMuaGVpZ2h0KSxhLmhlaWdodD1NYXRoLm1heChuLWEueSxjLmhlaWdodCksZ3x8KGI9YS5oZWlnaHQvYS53aWR0aCxwPGI/KGEuaGVpZ2h0PXAqYS53aWR0aCxhLnk9bi1hLmhlaWdodCk6YS53aWR0aD1hLmhlaWdodC9wKSk6MTw9Yi55PyhhLndpZHRoPU1hdGgubWF4KE1hdGgubWluKHEueC1rLGQud2lkdGgpLGMud2lkdGgpLGEuaGVpZ2h0PU1hdGgubWF4KE1hdGgubWluKHEueS1sLGQuaGVpZ2h0KSxjLmhlaWdodCksZ3x8KGI9YS5oZWlnaHQvYS53aWR0aCxwPGI/YS5oZWlnaHQ9cCphLndpZHRoOmEud2lkdGg9YS5oZWlnaHQvcCkpOihhLndpZHRoPU1hdGgubWF4KE1hdGgubWluKHEueC1rLGQud2lkdGgpLGMud2lkdGgpLGd8fChhLmhlaWdodD1wKmEud2lkdGgsYS55PWwrMC41KihuLWwtYS5oZWlnaHQpKSk6MD49Yi55PyhhLnk9TWF0aC5tYXgocS55LG4tZC5oZWlnaHQpLGEueT1NYXRoLm1pbihhLnksbi1jLmhlaWdodCksYS5oZWlnaHQ9bi1hLnksZ3x8KGEud2lkdGg9DQphLmhlaWdodC9wLGEueD1rKzAuNSoobS1rLWEud2lkdGgpKSk6MTw9Yi55JiYoYS5oZWlnaHQ9TWF0aC5tYXgoTWF0aC5taW4ocS55LWwsZC5oZWlnaHQpLGMuaGVpZ2h0KSxnfHwoYS53aWR0aD1hLmhlaWdodC9wLGEueD1rKzAuNSoobS1rLWEud2lkdGgpKSk7dC5CKHEpO3JldHVybiBhfTtRZy5wcm90b3R5cGUuY29tcHV0ZU1pblNpemU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9jLlZmLmNvcHkoKSxiPXRoaXMuVmY7IWlzTmFOKGIud2lkdGgpJiZiLndpZHRoPmEud2lkdGgmJihhLndpZHRoPWIud2lkdGgpOyFpc05hTihiLmhlaWdodCkmJmIuaGVpZ2h0PmEuaGVpZ2h0JiYoYS5oZWlnaHQ9Yi5oZWlnaHQpO3JldHVybiBhfTsNClFnLnByb3RvdHlwZS5jb21wdXRlTWF4U2l6ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2MuSGUuY29weSgpLGI9dGhpcy5IZTshaXNOYU4oYi53aWR0aCkmJmIud2lkdGg8YS53aWR0aCYmKGEud2lkdGg9Yi53aWR0aCk7IWlzTmFOKGIuaGVpZ2h0KSYmYi5oZWlnaHQ8YS5oZWlnaHQmJihhLmhlaWdodD1iLmhlaWdodCk7cmV0dXJuIGF9Ow0KUWcucHJvdG90eXBlLmNvbXB1dGVDZWxsU2l6ZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBnYShOYU4sTmFOKSxiPXRoaXMub2MuUztpZihiKXt2YXIgYz1iLldGOyFpc05hTihjLndpZHRoKSYmMDxjLndpZHRoJiYoYS53aWR0aD1jLndpZHRoKTshaXNOYU4oYy5oZWlnaHQpJiYwPGMuaGVpZ2h0JiYoYS5oZWlnaHQ9Yy5oZWlnaHQpfWM9dGhpcy4kaztpc05hTihhLndpZHRoKSYmIWlzTmFOKGMud2lkdGgpJiYwPGMud2lkdGgmJihhLndpZHRoPWMud2lkdGgpO2lzTmFOKGEuaGVpZ2h0KSYmIWlzTmFOKGMuaGVpZ2h0KSYmMDxjLmhlaWdodCYmKGEuaGVpZ2h0PWMuaGVpZ2h0KTtiPXRoaXMuaDsoaXNOYU4oYS53aWR0aCl8fGlzTmFOKGEuaGVpZ2h0KSkmJmImJihjPWIud2IuRmQsbnVsbCE9PWMmJmMucXAmJihjPWMubUEsaXNOYU4oYS53aWR0aCkmJiFpc05hTihjLndpZHRoKSYmMDxjLndpZHRoJiYoYS53aWR0aD1jLndpZHRoKSxpc05hTihhLmhlaWdodCkmJiFpc05hTihjLmhlaWdodCkmJg0KMDxjLmhlaWdodCYmKGEuaGVpZ2h0PWMuaGVpZ2h0KSksYj1iLmxwLG51bGwhPT1iJiZiLnZpc2libGUmJnRoaXMucXAmJihjPWIuZ3QsaXNOYU4oYS53aWR0aCkmJiFpc05hTihjLndpZHRoKSYmMDxjLndpZHRoJiYoYS53aWR0aD1jLndpZHRoKSxpc05hTihhLmhlaWdodCkmJiFpc05hTihjLmhlaWdodCkmJjA8Yy5oZWlnaHQmJihhLmhlaWdodD1jLmhlaWdodCkpKTtpZihpc05hTihhLndpZHRoKXx8MD09PWEud2lkdGh8fEluZmluaXR5PT09YS53aWR0aClhLndpZHRoPTE7aWYoaXNOYU4oYS5oZWlnaHQpfHwwPT09YS5oZWlnaHR8fEluZmluaXR5PT09YS5oZWlnaHQpYS5oZWlnaHQ9MTtyZXR1cm4gYX07dC5nKFFnLCJtaW5TaXplIixRZy5wcm90b3R5cGUuVmYpOw0KdC5kZWZpbmVQcm9wZXJ0eShRZyx7VmY6Im1pblNpemUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkZqfSxmdW5jdGlvbihhKXt0LmwoYSxnYSxRZywibWluU2l6ZSIpO2lmKCF0aGlzLkZqLk0oYSkpe3ZhciBiPWEud2lkdGg7aXNOYU4oYikmJihiPTApO2E9YS5oZWlnaHQ7aXNOYU4oYSkmJihhPTApO3RoaXMuRmoucChiLGEpfX0pO3QuZyhRZywibWF4U2l6ZSIsUWcucHJvdG90eXBlLkhlKTt0LmRlZmluZVByb3BlcnR5KFFnLHtIZToibWF4U2l6ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRWp9LGZ1bmN0aW9uKGEpe3QubChhLGdhLFFnLCJtYXhTaXplIik7aWYoIXRoaXMuRWouTShhKSl7dmFyIGI9YS53aWR0aDtpc05hTihiKSYmKGI9SW5maW5pdHkpO2E9YS5oZWlnaHQ7aXNOYU4oYSkmJihhPUluZmluaXR5KTt0aGlzLkVqLnAoYixhKX19KTt0LmcoUWcsImNlbGxTaXplIixRZy5wcm90b3R5cGUuJGspOw0KdC5kZWZpbmVQcm9wZXJ0eShRZyx7JGs6ImNlbGxTaXplIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xan0sZnVuY3Rpb24oYSl7dC5sKGEsZ2EsUWcsImNlbGxTaXplIik7dGhpcy5xai5NKGEpfHx0aGlzLnFqLmFzc2lnbihhKX0pO3QuZyhRZywiaXNHcmlkU25hcEVuYWJsZWQiLFFnLnByb3RvdHlwZS5xcCk7dC5kZWZpbmVQcm9wZXJ0eShRZyx7cXA6ImlzR3JpZFNuYXBFbmFibGVkIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5XcX0sZnVuY3Rpb24oYSl7dC5pKGEsImJvb2xlYW4iLFFnLCJpc0dyaWRTbmFwRW5hYmxlZCIpO3RoaXMuV3E9YX0pO3QuZyhRZywib3JpZ2luYWxEZXNpcmVkU2l6ZSIsUWcucHJvdG90eXBlLnhKKTt0LkEoUWcse3hKOiJvcmlnaW5hbERlc2lyZWRTaXplIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51dn0pO3QuZyhRZywib3JpZ2luYWxMb2NhdGlvbiIsUWcucHJvdG90eXBlLnlKKTt0LkEoUWcse3lKOiJvcmlnaW5hbExvY2F0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ten0pOw0KZnVuY3Rpb24gWWcoKXswPGFyZ3VtZW50cy5sZW5ndGgmJnQuYWQoWWcpO2FlLmNhbGwodGhpcyk7dGhpcy5uYW1lPSJSb3RhdGluZyI7dGhpcy5nRD00NTt0aGlzLmZEPTI7dGhpcy5pYj1udWxsO3ZhciBhPW5ldyBXO2EuemI9IkVsbGlwc2UiO2EuQ2E9SC5OeDthLmZpbGw9ImxpZ2h0Ymx1ZSI7YS5zdHJva2U9ImRvZGdlcmJsdWUiO2EuZmI9MTthLmN1cnNvcj0icG9pbnRlciI7dGhpcy5Faz1hO3RoaXMuZGM9bnVsbDt0aGlzLnR2PTA7dGhpcy5iRD1uZXcgd310LmdhKCJSb3RhdGluZ1Rvb2wiLFlnKTt0LkthKFlnLGFlKTsNCllnLnByb3RvdHlwZS51cGRhdGVBZG9ybm1lbnRzPWZ1bmN0aW9uKGEpe2lmKCEobnVsbD09PWF8fGEgaW5zdGFuY2VvZiBWKSl7aWYoYS5lYiYmIXRoaXMuaC5hYil7dmFyIGI9YS5iRztpZihudWxsIT09YiYmYS5jYW5Sb3RhdGUoKSYmYS5wYS5OKCkmJmEuUWEoKSYmYi5wYS5OKCkmJmIub2woKSl7dmFyIGM9YS5icCh0aGlzLm5hbWUpO251bGw9PT1jJiYoYz10aGlzLm1ha2VBZG9ybm1lbnQoYikpO2lmKG51bGwhPT1jKXtjLmFuZ2xlPWIuZ2woKTt2YXIgZD1udWxsLGY9bnVsbDtiPT09YXx8Yj09PWEua2M/KGQ9YS5rYyxmPWEuYmYpOihkPWIsZj1LYik7Zm9yKHZhciBnPWQuUmEsZj10LmxjKGcud2lkdGgqZi54K2Yub2Zmc2V0WCxnLmhlaWdodCpmLnkrZi5vZmZzZXRZKTtudWxsIT09ZCYmZCE9PWI7KWQudHJhbnNmb3JtLlRhKGYpLGQ9ZC5pYTt2YXIgZD1mLnksZz1NYXRoLm1heChmLngtYi5SYS53aWR0aCwwKSxoPXQuSygpO2MubG9jYXRpb249Yi5xYihuZXcgSSgxLDAsNTArDQpnLGQpLGgpO3QuQihoKTt0LkIoZik7YS5Wayh0aGlzLm5hbWUsYyk7cmV0dXJufX19YS51bCh0aGlzLm5hbWUpfX07WWcucHJvdG90eXBlLm1ha2VBZG9ybm1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbCxiPWEuUy5hRztpZihudWxsPT09Yil7Yj1uZXcgSmU7Yi50eXBlPVpnO2IuYmY9S2I7dmFyIGM9dGhpcy5odDtudWxsIT09YyYmYi5hZGQoYy5jb3B5KCkpfWVsc2UgaWYoTGUoYiksYj1iLmNvcHkoKSwhKGIgaW5zdGFuY2VvZiBKZSkpcmV0dXJuIG51bGw7Yi5aYz10aGlzLm5hbWU7Yi5vYz1hO3JldHVybiBifTt0LmRlZmluZVByb3BlcnR5KFlnLHtodDoiaGFuZGxlQXJjaGV0eXBlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Fa30sZnVuY3Rpb24oYSl7bnVsbCE9PWEmJnQubChhLFEsWWcsImhhbmRsZUFyY2hldHlwZSIpO3RoaXMuRWs9YX0pO3QuQShZZyx7aGFuZGxlOiJoYW5kbGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmRjfSk7DQp0LmRlZmluZVByb3BlcnR5KFlnLHtvYzoiYWRvcm5lZE9iamVjdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWJ9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmwoYSxRLFlnLCJhZG9ybmVkT2JqZWN0Iik7dGhpcy5pYj1hfSk7WWcucHJvdG90eXBlLmNhblN0YXJ0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNFbmFibGVkKXJldHVybiExO3ZhciBhPXRoaXMuaDtyZXR1cm4gbnVsbCE9PWEmJiFhLmFiJiZhLlBvJiZhLlIubGVmdD9udWxsIT09dGhpcy5maW5kVG9vbEhhbmRsZUF0KGEuTmMuZWEsdGhpcy5uYW1lKT8hMDohMTohMX07DQpZZy5wcm90b3R5cGUuZG9BY3RpdmF0ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZihudWxsIT09YSYmKHRoaXMuZGM9dGhpcy5maW5kVG9vbEhhbmRsZUF0KGEuTmMuZWEsdGhpcy5uYW1lKSxudWxsIT09dGhpcy5kYykpe3RoaXMuaWI9dGhpcy5kYy5TLm9jO3ZhciBiPXRoaXMuaWIuUyxjPWIua2M7dGhpcy5iRD10aGlzLmliPT09Ynx8dGhpcy5pYj09PWM/Yy5xYihiLmJmKTp0aGlzLmliLnFiKEtiKTt0aGlzLnR2PXRoaXMuaWIuYW5nbGU7YS5LZD0hMDthLnd3PSEwO3RoaXMuc2ModGhpcy5uYW1lKTt0aGlzLmhhPSEwfX07WWcucHJvdG90eXBlLmRvRGVhY3RpdmF0ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtudWxsIT09YSYmKHRoaXMuZ2soKSx0aGlzLmliPXRoaXMuZGM9bnVsbCx0aGlzLmhhPWEuS2Q9ITEpfTtZZy5wcm90b3R5cGUuZG9DYW5jZWw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7YSYmKGEud3c9ITEpO3RoaXMucm90YXRlKHRoaXMudHYpO3RoaXMuc3RvcFRvb2woKX07DQpZZy5wcm90b3R5cGUuZG9Nb3VzZU1vdmU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7dGhpcy5oYSYmbnVsbCE9PWEmJihhPXRoaXMuY29tcHV0ZVJvdGF0ZShhLlIuZWEpLHRoaXMucm90YXRlKGEpKX07WWcucHJvdG90eXBlLmRvTW91c2VVcD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZih0aGlzLmhhJiZudWxsIT09YSl7YS53dz0hMTt2YXIgYj10aGlzLmNvbXB1dGVSb3RhdGUoYS5SLmVhKTt0aGlzLnJvdGF0ZShiKTthLk9jKCk7dGhpcy5nZj10aGlzLm5hbWU7YS5CYSgiUGFydFJvdGF0ZWQiLHRoaXMuaWIsdGhpcy50dil9dGhpcy5zdG9wVG9vbCgpfTtZZy5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEpe2UmJnQucShhLFlnLCJyb3RhdGU6bmV3YW5nbGUiKTtudWxsIT09dGhpcy5pYiYmKHRoaXMuaWIuYW5nbGU9YSl9Ow0KWWcucHJvdG90eXBlLmNvbXB1dGVSb3RhdGU9ZnVuY3Rpb24oYSl7YT10aGlzLmJELiRpKGEpO3ZhciBiPXRoaXMuaWIuaWE7YiYmKGEtPWIuZ2woKSwzNjA8PWE/YS09MzYwOjA+YSYmKGErPTM2MCkpO3ZhciBiPU1hdGgubWluKE1hdGguYWJzKHRoaXMudkcpLDE4MCksYz1NYXRoLm1pbihNYXRoLmFicyh0aGlzLnVHKSxiLzIpOyF0aGlzLmguUi5zaGlmdCYmMDxiJiYwPGMmJihhJWI8Yz9hPU1hdGguZmxvb3IoYS9iKSpiOmElYj5iLWMmJihhPShNYXRoLmZsb29yKGEvYikrMSkqYikpOzM2MDw9YT9hLT0zNjA6MD5hJiYoYSs9MzYwKTtyZXR1cm4gYX07dC5nKFlnLCJzbmFwQW5nbGVNdWx0aXBsZSIsWWcucHJvdG90eXBlLnZHKTt0LmRlZmluZVByb3BlcnR5KFlnLHt2Rzoic25hcEFuZ2xlTXVsdGlwbGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmdEfSxmdW5jdGlvbihhKXt0LmkoYSwibnVtYmVyIixZZywic25hcEFuZ2xlTXVsdGlwbGUiKTt0aGlzLmdEPWF9KTsNCnQuZyhZZywic25hcEFuZ2xlRXBzaWxvbiIsWWcucHJvdG90eXBlLnVHKTt0LmRlZmluZVByb3BlcnR5KFlnLHt1Rzoic25hcEFuZ2xlRXBzaWxvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZkR9LGZ1bmN0aW9uKGEpe3QuaShhLCJudW1iZXIiLFlnLCJzbmFwQW5nbGVFcHNpbG9uIik7dGhpcy5mRD1hfSk7dC5nKFlnLCJvcmlnaW5hbEFuZ2xlIixZZy5wcm90b3R5cGUud0opO3QuQShZZyx7d0o6Im9yaWdpbmFsQW5nbGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnR2fSk7ZnVuY3Rpb24gJGcoKXswPGFyZ3VtZW50cy5sZW5ndGgmJnQuYWQoJGcpO2FlLmNhbGwodGhpcyk7dGhpcy5uYW1lPSJDbGlja1NlbGVjdGluZyJ9dC5nYSgiQ2xpY2tTZWxlY3RpbmdUb29sIiwkZyk7dC5LYSgkZyxhZSk7JGcucHJvdG90eXBlLmNhblN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNFbmFibGVkfHxudWxsPT09dGhpcy5ofHx0aGlzLmlzQmV5b25kRHJhZ1NpemUoKT8hMTohMH07DQokZy5wcm90b3R5cGUuZG9Nb3VzZVVwPWZ1bmN0aW9uKCl7dGhpcy5oYSYmKHRoaXMuc3RhbmRhcmRNb3VzZVNlbGVjdCgpLHRoaXMuc3RhbmRhcmRNb3VzZUNsaWNrKCkpO3RoaXMuc3RvcFRvb2woKX07ZnVuY3Rpb24gYWgoKXswPGFyZ3VtZW50cy5sZW5ndGgmJnQuYWQoYWgpO2FlLmNhbGwodGhpcyk7dGhpcy5uYW1lPSJBY3Rpb24iO3RoaXMudG49bnVsbH10LmdhKCJBY3Rpb25Ub29sIixhaCk7dC5LYShhaCxhZSk7YWgucHJvdG90eXBlLmNhblN0YXJ0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNFbmFibGVkKXJldHVybiExO3ZhciBhPXRoaXMuaDtpZihudWxsPT09YSlyZXR1cm4hMTt2YXIgYj1hLlIsYz1hLnBlKGIuZWEsZnVuY3Rpb24oYSl7Zm9yKDtudWxsIT09YS5pYSYmIWEuUHc7KWE9YS5pYTtyZXR1cm4gYX0sZnVuY3Rpb24oYSl7cmV0dXJuIGEuUHd9KTtyZXR1cm4gbnVsbCE9PWM/KHRoaXMudG49YyxhLkJuPWEucGUoYi5lYSxudWxsLG51bGwpLCEwKTohMX07DQphaC5wcm90b3R5cGUuZG9Nb3VzZURvd249ZnVuY3Rpb24oKXtpZih0aGlzLmhhKXt2YXIgYT10aGlzLmguUixiPXRoaXMudG47bnVsbCE9PWImJihhLmNlPWIsbnVsbCE9PWIuR3omJmIuR3ooYSxiKSl9ZWxzZSB0aGlzLmNhblN0YXJ0KCkmJnRoaXMuZG9BY3RpdmF0ZSgpfTthaC5wcm90b3R5cGUuZG9Nb3VzZU1vdmU9ZnVuY3Rpb24oKXtpZih0aGlzLmhhKXt2YXIgYT10aGlzLmguUixiPXRoaXMudG47bnVsbCE9PWImJihhLmNlPWIsbnVsbCE9PWIuSHomJmIuSHooYSxiKSl9fTthaC5wcm90b3R5cGUuZG9Nb3VzZVVwPWZ1bmN0aW9uKCl7aWYodGhpcy5oYSl7dmFyIGE9dGhpcy5oLGI9YS5SLGM9dGhpcy50bjtpZihudWxsPT09YylyZXR1cm47Yi5jZT1jO251bGwhPT1jLkl6JiZjLkl6KGIsYyk7dGhpcy5pc0JleW9uZERyYWdTaXplKCl8fCRlKGMsYixhKX10aGlzLnN0b3BUb29sKCl9Ow0KYWgucHJvdG90eXBlLmRvQ2FuY2VsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO2lmKG51bGwhPT1hKXt2YXIgYT1hLlIsYj10aGlzLnRuO2lmKG51bGw9PT1iKXJldHVybjthLmNlPWI7bnVsbCE9PWIuRnomJmIuRnooYSxiKX10aGlzLnN0b3BUb29sKCl9O2FoLnByb3RvdHlwZS5kb1N0b3A9ZnVuY3Rpb24oKXt0aGlzLnRuPW51bGx9O2Z1bmN0aW9uIHFhKCl7MDxhcmd1bWVudHMubGVuZ3RoJiZ0LmFkKHFhKTthZS5jYWxsKHRoaXMpO3RoaXMubmFtZT0iQ2xpY2tDcmVhdGluZyI7dGhpcy53az1udWxsO3RoaXMuc0M9ITA7dGhpcy5pQz1uZXcgdygwLDApfXQuZ2EoIkNsaWNrQ3JlYXRpbmdUb29sIixxYSk7dC5LYShxYSxhZSk7DQpxYS5wcm90b3R5cGUuY2FuU3RhcnQ9ZnVuY3Rpb24oKXtpZighdGhpcy5pc0VuYWJsZWR8fG51bGw9PT10aGlzLk9zKXJldHVybiExO3ZhciBhPXRoaXMuaDtpZihudWxsPT09YXx8YS5hYnx8YS5aZXx8IWEuem18fCFhLlIubGVmdHx8dGhpcy5pc0JleW9uZERyYWdTaXplKCkpcmV0dXJuITE7aWYodGhpcy5jRil7aWYoMT09PWEuUi5BZSYmKHRoaXMuaUM9YS5SLktlLmNvcHkoKSksMiE9PWEuUi5BZXx8dGhpcy5pc0JleW9uZERyYWdTaXplKHRoaXMuaUMpKXJldHVybiExfWVsc2UgaWYoMSE9PWEuUi5BZSlyZXR1cm4hMTtyZXR1cm4gYS5VYSE9PXRoaXMmJm51bGwhPT1hLmR0KGEuUi5lYSwhMCk/ITE6ITB9O3FhLnByb3RvdHlwZS5kb01vdXNlVXA9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7dGhpcy5oYSYmbnVsbCE9PWEmJnRoaXMuaW5zZXJ0UGFydChhLlIuZWEpO3RoaXMuc3RvcFRvb2woKX07DQpxYS5wcm90b3R5cGUuaW5zZXJ0UGFydD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmg7aWYobnVsbD09PWIpcmV0dXJuIG51bGw7dmFyIGM9dGhpcy5PcztpZihudWxsPT09YylyZXR1cm4gbnVsbDt0aGlzLnNjKHRoaXMubmFtZSk7dmFyIGQ9bnVsbDtjIGluc3RhbmNlb2YgRT9jLkxkKCkmJihMZShjKSxkPWMuY29weSgpLGQgaW5zdGFuY2VvZiBFJiZiLmFkZChkKSk6bnVsbCE9PWMmJihjPWIuYmEuY29weU5vZGVEYXRhKGMpLHQucmIoYykmJihiLmJhLnltKGMpLGQ9Yi5naChjKSkpO2QgaW5zdGFuY2VvZiBFJiYoZC5sb2NhdGlvbj1hLGIuUGUmJmIuc2VsZWN0KGQpKTtiLk9jKCk7dGhpcy5nZj10aGlzLm5hbWU7Yi5CYSgiUGFydENyZWF0ZWQiLGQpO3RoaXMuZ2soKTtyZXR1cm4gZCBpbnN0YW5jZW9mIEU/ZDpudWxsfTt0LmcocWEsImFyY2hldHlwZU5vZGVEYXRhIixxYS5wcm90b3R5cGUuT3MpOw0KdC5kZWZpbmVQcm9wZXJ0eShxYSx7T3M6ImFyY2hldHlwZU5vZGVEYXRhIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53a30sZnVuY3Rpb24oYSl7bnVsbCE9PWEmJnQubChhLE9iamVjdCxxYSwiYXJjaGV0eXBlTm9kZURhdGEiKTt0aGlzLndrPWF9KTt0LmcocWEsImlzRG91YmxlQ2xpY2siLHFhLnByb3RvdHlwZS5jRik7dC5kZWZpbmVQcm9wZXJ0eShxYSx7Y0Y6ImlzRG91YmxlQ2xpY2sifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnNDfSxmdW5jdGlvbihhKXt0LmkoYSwiYm9vbGVhbiIscWEsImlzRG91YmxlQ2xpY2siKTt0aGlzLnNDPWF9KTsNCmZ1bmN0aW9uIGJoKCl7MDxhcmd1bWVudHMubGVuZ3RoJiZ0LmFkKGJoKTthZS5jYWxsKHRoaXMpO3RoaXMubmFtZT0iQ29udGV4dE1lbnUiO3RoaXMuQ249dGhpcy5SQj1udWxsO3RoaXMuSUM9bmV3IHc7dGhpcy5Lbj1udWxsO2lmKCEwPT09dC5pQil7dGhpcy5Lbj1uZXcgSmU7dGhpcy5FeT1udWxsO3ZhciBhPXRoaXM7dGhpcy54RD1mdW5jdGlvbigpe2Euc3RvcFRvb2woKX07aWYoITE9PT10Lm5FKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Iuc3R5bGUuY3NzVGV4dD0idG9wOiAwcHg7ei1pbmRleDozMDA7cG9zaXRpb246IGZpeGVkO2Rpc3BsYXk6IG5vbmU7dGV4dC1hbGlnbjogY2VudGVyO2xlZnQ6IDI1JTt3aWR0aDogNTAlO2JhY2tncm91bmQtY29sb3I6ICNGNUY1RjU7cGFkZGluZzogMTZweDtib3JkZXI6IDE2cHggc29saWQgIzQ0NDtib3JkZXItcmFkaXVzOiAxMHB4O21hcmdpbi10b3A6IDEwcHgiOw0KYy5zdHlsZS5jc3NUZXh0PSJ6LWluZGV4OjI5OTtwb3NpdGlvbjogZml4ZWQ7ZGlzcGxheTogbm9uZTt0b3A6IDA7bGVmdDogMDt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7YmFja2dyb3VuZC1jb2xvcjogYmxhY2s7LW1vei1vcGFjaXR5OiAwLjg7b3BhY2l0eTouODA7ZmlsdGVyOiBhbHBoYShvcGFjaXR5PTgwKTsiO3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChkKTtkLnNoZWV0Lmluc2VydFJ1bGUoIi5kZWZhdWx0Q1h1bCB7IGxpc3Qtc3R5bGU6IG5vbmU7IH0iLDApO2Quc2hlZXQuaW5zZXJ0UnVsZSgiLmRlZmF1bHRDWGxpIHtmb250OjcwMCAxLjVlbSBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO3Bvc2l0aW9uOiByZWxhdGl2ZTttaW4td2lkdGg6IDYwcHg7IH0iLDApO2Quc2hlZXQuaW5zZXJ0UnVsZSgiLmRlZmF1bHRDWGEge2NvbG9yOiAjNDQ0O2Rpc3BsYXk6IGlubGluZS1ibG9jaztwYWRkaW5nOiA0cHg7dGV4dC1kZWNvcmF0aW9uOiBub25lO21hcmdpbjogMnB4O2JvcmRlcjogMXB4IHNvbGlkIGdyYXk7Ym9yZGVyLXJhZGl1czogMTBweDsgfSIsDQowKTtiLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuITF9LCExKTtiLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuITF9LCExKTtjLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuITF9LCExKTtkb2N1bWVudC5ib2R5JiYoZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpKTt0LlVzPWI7dC5Ucz1jO3QubkU9ITB9fX10LmdhKCJDb250ZXh0TWVudVRvb2wiLGJoKTt0LkthKGJoLGFlKTsNCmJoLnByb3RvdHlwZS5jYW5TdGFydD1mdW5jdGlvbigpe2lmKCF0aGlzLmlzRW5hYmxlZClyZXR1cm4hMTt2YXIgYT10aGlzLmg7cmV0dXJuIG51bGw9PT1hfHx0aGlzLmlzQmV5b25kRHJhZ1NpemUoKXx8IWEuUi5yaWdodD8hMToobnVsbD09PXRoaXMuS258fGEuUi5ldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpJiZudWxsPT09dGhpcy5maW5kT2JqZWN0V2l0aENvbnRleHRNZW51KCk/ITE6ITB9O2JoLnByb3RvdHlwZS5kb1N0YXJ0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO251bGwhPT1hJiZ0aGlzLklDLnNldChhLk5jLmVhKX07YmgucHJvdG90eXBlLmRvU3RvcD1mdW5jdGlvbigpe3RoaXMuaGlkZURlZmF1bHRDb250ZXh0TWVudSgpO3RoaXMuaGlkZUNvbnRleHRNZW51KCk7dGhpcy5Dbj1udWxsfTsNCmJoLnByb3RvdHlwZS5maW5kT2JqZWN0V2l0aENvbnRleHRNZW51PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaDtpZihudWxsPT09YilyZXR1cm4gbnVsbDt2YXIgYz1iLlIsZD1udWxsLGQ9dm9pZCAwIT09YT9hOmIucGUoYy5lYSxudWxsLGZ1bmN0aW9uKGEpe3JldHVybiFhLmxheWVyLnljfSk7aWYobnVsbCE9PWQpe2ZvcihhPWQ7bnVsbCE9PWE7KXtjPWEuY29udGV4dE1lbnU7aWYobnVsbCE9PWMpcmV0dXJuIGE7YT1hLmlhfWlmKG51bGwhPT10aGlzLktuJiYhKGIuUi5ldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpKXJldHVybiBkLlN9ZWxzZSBpZihjPWIuY29udGV4dE1lbnUsbnVsbCE9PWMpcmV0dXJuIGI7cmV0dXJuIG51bGx9O2JoLnByb3RvdHlwZS5kb0FjdGl2YXRlPWZ1bmN0aW9uKCl7fTsNCmJoLnByb3RvdHlwZS5kb01vdXNlRG93bj1mdW5jdGlvbigpe2lmKHRoaXMuaGEpe3ZhciBhPXRoaXMuaDtpZihudWxsIT09YSYmbnVsbCE9PXRoaXMucmYpe3ZhciBiPWEucGUoYS5SLmVhLG51bGwsbnVsbCk7bnVsbCE9PWImJmIuZWoodGhpcy5yZik/KHRoaXMuc3RhbmRhcmRNb3VzZUNsaWNrKG51bGwsbnVsbCksdGhpcy5zdG9wVG9vbCgpKToodGhpcy5zdG9wVG9vbCgpLGEuVWEuZG9Nb3VzZURvd24oKSl9fX07YmgucHJvdG90eXBlLmRvTW91c2VVcD1mdW5jdGlvbigpe3RoaXMuaGF8fHRoaXMuY2FuU3RhcnQoKSYmWmUodGhpcywhMCl9Ow0KZnVuY3Rpb24gWmUoYSxiLGMpe2EuaGE9ITA7YiYmYS5zdGFuZGFyZE1vdXNlU2VsZWN0KCk7YS5zdGFuZGFyZE1vdXNlQ2xpY2soKTthLkNuPW51bGw7dm9pZCAwPT09YyYmKGM9YS5maW5kT2JqZWN0V2l0aENvbnRleHRNZW51KCkpO251bGwhPT1jPyhiPWMuY29udGV4dE1lbnUsbnVsbCE9PWI/KGEuQ249YyBpbnN0YW5jZW9mIFE/YzpudWxsLGEuc2hvd0NvbnRleHRNZW51KGIsYS5DbikpOmEuc2hvd0RlZmF1bHRDb250ZXh0TWVudSgpKTphLnNob3dEZWZhdWx0Q29udGV4dE1lbnUoKX1iaC5wcm90b3R5cGUuZG9Nb3VzZU1vdmU9ZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLnN0YW5kYXJkTW91c2VPdmVyKCl9Ow0KYmgucHJvdG90eXBlLnNob3dDb250ZXh0TWVudT1mdW5jdGlvbihhLGIpe3QubChhLEplLGJoLCJzaG93Q29udGV4dE1lbnU6Y29udGV4dG1lbnUiKTtudWxsIT09YiYmdC5sKGIsUSxiaCwic2hvd0NvbnRleHRNZW51Om9iaiIpO3ZhciBjPXRoaXMuaDtpZihudWxsIT09Yyl7YSE9PXRoaXMucmYmJnRoaXMuaGlkZUNvbnRleHRNZW51KCk7YS5hZj0iVG9vbCI7YS52bD0hMTthLnNjYWxlPTEvYy5zY2FsZTthLlpjPXRoaXMubmFtZTtjLmFkZChhKTtpZihudWxsIT09Yil7dmFyIGM9bnVsbCxkPWIuZXAoKTtudWxsIT09ZCYmKGM9ZC5kYXRhKTthLm9jPWI7YS5kYXRhPWN9ZWxzZSBhLmRhdGE9Yy5iYTthLnNmKCk7dGhpcy5wb3NpdGlvbkNvbnRleHRNZW51KGEsYik7dGhpcy5yZj1hfX07DQpiaC5wcm90b3R5cGUucG9zaXRpb25Db250ZXh0TWVudT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmg7aWYobnVsbCE9PWIpe3ZhciBjPWIuUi5lYS5jb3B5KCksZD1hLkVhLGY9Yi54YjtiLlIuVXcmJihjLngtPWQud2lkdGgpO2MueCtkLndpZHRoPmYucmlnaHQmJihjLngtPWQud2lkdGgrNSk7Yy54PGYueCYmKGMueD1mLngpO2MueStkLmhlaWdodD5mLmJvdHRvbSYmKGMueS09ZC5oZWlnaHQrNSk7Yy55PGYueSYmKGMueT1mLnkpO2EucG9zaXRpb249Y319O2JoLnByb3RvdHlwZS5oaWRlQ29udGV4dE1lbnU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7bnVsbCE9PWEmJm51bGwhPT10aGlzLnJmJiYodGhpcy5yZi5kYXRhPW51bGwsdGhpcy5yZi5vYz1udWxsLGEucmVtb3ZlKHRoaXMucmYpLHRoaXMucmY9bnVsbCx0aGlzLnN0YW5kYXJkTW91c2VPdmVyKCkpfTsNCmJoLnByb3RvdHlwZS5pbml0aWFsaXplRGVmYXVsdEJ1dHRvbnM9ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5oKXJldHVybiBudWxsO3ZhciBhPW5ldyBCLGI9dGhpcy5oLlNlO2EuYWRkKHt0ZXh0OiJDb3B5IixlaDpmdW5jdGlvbigpe2IuY29weVNlbGVjdGlvbigpfSx2aXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGIuY2FuQ29weVNlbGVjdGlvbigpfX0pO2EuYWRkKHt0ZXh0OiJDdXQiLGVoOmZ1bmN0aW9uKCl7Yi5jdXRTZWxlY3Rpb24oKX0sdmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiBiLmNhbkN1dFNlbGVjdGlvbigpfX0pO2EuYWRkKHt0ZXh0OiJEZWxldGUiLGVoOmZ1bmN0aW9uKCl7Yi5kZWxldGVTZWxlY3Rpb24oKX0sdmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiBiLmNhbkRlbGV0ZVNlbGVjdGlvbigpfX0pO2EuYWRkKHt0ZXh0OiJQYXN0ZSIsZWg6ZnVuY3Rpb24oYSl7Yi5wYXN0ZVNlbGVjdGlvbihhLlIuZWEpfSx2aXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGIuY2FuUGFzdGVTZWxlY3Rpb24oKX19KTsNCmEuYWRkKHt0ZXh0OiJTZWxlY3QgQWxsIixlaDpmdW5jdGlvbigpe2Iuc2VsZWN0QWxsKCl9LHZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gYi5jYW5TZWxlY3RBbGwoKX19KTthLmFkZCh7dGV4dDoiVW5kbyIsZWg6ZnVuY3Rpb24oKXtiLnVuZG8oKX0sdmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiBiLmNhblVuZG8oKX19KTthLmFkZCh7dGV4dDoiUmVkbyIsZWg6ZnVuY3Rpb24oKXtiLnJlZG8oKX0sdmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiBiLmNhblJlZG8oKX19KTthLmFkZCh7dGV4dDoiWm9vbSBUbyBGaXQiLGVoOmZ1bmN0aW9uKCl7Yi56b29tVG9GaXQoKX0sdmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiBiLmNhblpvb21Ub0ZpdCgpfX0pO2EuYWRkKHt0ZXh0OiJSZXNldCBab29tIixlaDpmdW5jdGlvbigpe2IucmVzZXRab29tKCl9LHZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gYi5jYW5SZXNldFpvb20oKX19KTthLmFkZCh7dGV4dDoiR3JvdXAgU2VsZWN0aW9uIixlaDpmdW5jdGlvbigpe2IuZ3JvdXBTZWxlY3Rpb24oKX0sDQp2aXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGIuY2FuR3JvdXBTZWxlY3Rpb24oKX19KTthLmFkZCh7dGV4dDoiVW5ncm91cCBTZWxlY3Rpb24iLGVoOmZ1bmN0aW9uKCl7Yi51bmdyb3VwU2VsZWN0aW9uKCl9LHZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gYi5jYW5Vbmdyb3VwU2VsZWN0aW9uKCl9fSk7YS5hZGQoe3RleHQ6IkVkaXQgVGV4dCIsZWg6ZnVuY3Rpb24oKXtiLmVkaXRUZXh0QmxvY2soKX0sdmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiBiLmNhbkVkaXRUZXh0QmxvY2soKX19KTtyZXR1cm4gYX07DQpiaC5wcm90b3R5cGUuc2hvd0RlZmF1bHRDb250ZXh0TWVudT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZihudWxsIT09YSl7bnVsbD09PXRoaXMuRXkmJih0aGlzLkV5PXRoaXMuaW5pdGlhbGl6ZURlZmF1bHRCdXR0b25zKCkpO3RoaXMuS24hPT10aGlzLnJmJiZ0aGlzLmhpZGVDb250ZXh0TWVudSgpO3QuVXMuaW5uZXJIVE1MPSIiO3QuVHMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMueEQsITEpO3ZhciBiPXRoaXMsYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ1bCIpO2MuY2xhc3NOYW1lPSJkZWZhdWx0Q1h1bCI7dC5Vcy5hcHBlbmRDaGlsZChjKTtjLmlubmVySFRNTD0iIjtmb3IodmFyIGQ9dGhpcy5FeS5rO2QubmV4dCgpOyl7dmFyIGY9ZC52YWx1ZSxnPWYudGV4dCxoPWYudmlzaWJsZTtpZigiZnVuY3Rpb24iIT09dHlwZW9mIGh8fGgoKSl7aD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpO2guY2xhc3NOYW1lPSJkZWZhdWx0Q1hsaSI7dmFyIGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOw0Kay5jbGFzc05hbWU9ImRlZmF1bHRDWGEiO2suaHJlZj0iIyI7ay5rSD1mLmVoO2suYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGMpe3RoaXMua0goYSk7Yi5zdG9wVG9vbCgpO2MucHJldmVudERlZmF1bHQoKTtyZXR1cm4hMX0sITEpO2sudGV4dENvbnRlbnQ9ZztoLmFwcGVuZENoaWxkKGspO2MuYXBwZW5kQ2hpbGQoaCl9fXQuVXMuc3R5bGUuZGlzcGxheT0iYmxvY2siO3QuVHMuc3R5bGUuZGlzcGxheT0iYmxvY2siO3RoaXMucmY9dGhpcy5Lbn19O2JoLnByb3RvdHlwZS5oaWRlRGVmYXVsdENvbnRleHRNZW51PWZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMucmYmJnRoaXMucmY9PT10aGlzLktuJiYodC5Vcy5zdHlsZS5kaXNwbGF5PSJub25lIix0LlRzLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQuVHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMueEQsITEpLHRoaXMucmY9bnVsbCl9O3QuZyhiaCwiY3VycmVudENvbnRleHRNZW51IixiaC5wcm90b3R5cGUucmYpOw0KdC5kZWZpbmVQcm9wZXJ0eShiaCx7cmY6ImN1cnJlbnRDb250ZXh0TWVudSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUkJ9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmwoYSxKZSxiaCwiY3VycmVudENvbnRleHRNZW51Iik7dGhpcy5SQj1hfSk7dC5nKGJoLCJjdXJyZW50T2JqZWN0IixiaC5wcm90b3R5cGUubEkpO3QuZGVmaW5lUHJvcGVydHkoYmgse2xJOiJjdXJyZW50T2JqZWN0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Dbn0sZnVuY3Rpb24oYSl7bnVsbCE9PWEmJnQubChhLFEsYmgsImN1cnJlbnRPYmplY3QiKTt0aGlzLkNuPWF9KTt0LkEoYmgse0pLOiJtb3VzZURvd25Qb2ludCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSUN9KTsNCmZ1bmN0aW9uIGNoKCl7MDxhcmd1bWVudHMubGVuZ3RoJiZ0LmFkKGNoKTthZS5jYWxsKHRoaXMpO3RoaXMubmFtZT0iRHJhZ1NlbGVjdGluZyI7dGhpcy5Mbj0xNzU7dGhpcy54Qz0hMTt2YXIgYT1uZXcgRTthLmFmPSJUb29sIjthLnZsPSExO3ZhciBiPW5ldyBXO2IubmFtZT0iU0hBUEUiO2IuemI9IlJlY3RhbmdsZSI7Yi5maWxsPW51bGw7Yi5zdHJva2U9Im1hZ2VudGEiO2EuYWRkKGIpO3RoaXMuSWw9YX10LmdhKCJEcmFnU2VsZWN0aW5nVG9vbCIsY2gpO3QuS2EoY2gsYWUpOw0KY2gucHJvdG90eXBlLmNhblN0YXJ0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNFbmFibGVkKXJldHVybiExO3ZhciBhPXRoaXMuaDtpZihudWxsPT09YXx8IWEuUGUpcmV0dXJuITE7dmFyIGI9YS5SO3JldHVybiFiLmxlZnR8fGEuVWEhPT10aGlzJiYoIXRoaXMuaXNCZXlvbmREcmFnU2l6ZSgpfHxiLnRpbWVzdGFtcC1hLk5jLnRpbWVzdGFtcDx0aGlzLnZ3fHxudWxsIT09YS5kdChiLmVhLCEwKSk/ITE6ITB9O2NoLnByb3RvdHlwZS5kb0FjdGl2YXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO251bGwhPT1hJiYodGhpcy5oYT0hMCxhLktkPSEwLGEuV2E9ITAsYS5hZGQodGhpcy52ZyksdGhpcy5kb01vdXNlTW92ZSgpKX07Y2gucHJvdG90eXBlLmRvRGVhY3RpdmF0ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtudWxsIT09YSYmKGEucmVtb3ZlKHRoaXMudmcpLGEuV2E9ITEsdGhpcy5oYT1hLktkPSExKX07DQpjaC5wcm90b3R5cGUuZG9Nb3VzZU1vdmU9ZnVuY3Rpb24oKXtpZihudWxsIT09dGhpcy5oJiZ0aGlzLmhhJiZudWxsIT09dGhpcy52Zyl7dmFyIGE9dGhpcy5jb21wdXRlQm94Qm91bmRzKCksYj10aGlzLnZnLm9lKCJTSEFQRSIpO251bGw9PT1iJiYoYj10aGlzLnZnLkR3KCkpO2IuQ2E9YS5zaXplO3RoaXMudmcucG9zaXRpb249YS5wb3NpdGlvbn19O2NoLnByb3RvdHlwZS5kb01vdXNlVXA9ZnVuY3Rpb24oKXtpZih0aGlzLmhhKXt2YXIgYT10aGlzLmg7YS5yZW1vdmUodGhpcy52Zyk7dHJ5e2EuJGI9IndhaXQiLHRoaXMuc2VsZWN0SW5SZWN0KHRoaXMuY29tcHV0ZUJveEJvdW5kcygpKX1maW5hbGx5e2EuJGI9IiJ9fXRoaXMuc3RvcFRvb2woKX07Y2gucHJvdG90eXBlLmNvbXB1dGVCb3hCb3VuZHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7cmV0dXJuIG51bGw9PT1hP25ldyB4KDAsMCwwLDApOm5ldyB4KGEuTmMuZWEsYS5SLmVhKX07DQpjaC5wcm90b3R5cGUuc2VsZWN0SW5SZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaDtpZihudWxsIT09Yil7dmFyIGM9Yi5SO2IuQmEoIkNoYW5naW5nU2VsZWN0aW9uIik7YT1iLmFrKGEsbnVsbCxmdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEUmJmEuY2FuU2VsZWN0KCl9LHRoaXMuaEYpO2lmKHQuVW0/Yy5CcDpjLmNvbnRyb2wpaWYoYy5zaGlmdClmb3IoYT1hLms7YS5uZXh0KCk7KWM9YS52YWx1ZSxjLmViJiYoYy5lYj0hMSk7ZWxzZSBmb3IoYT1hLms7YS5uZXh0KCk7KWM9YS52YWx1ZSxjLmViPSFjLmViO2Vsc2V7aWYoIWMuc2hpZnQpe2Zvcih2YXIgZD1uZXcgQihFKSxmPWIuc2VsZWN0aW9uLms7Zi5uZXh0KCk7KWM9Zi52YWx1ZSxhLmNvbnRhaW5zKGMpfHxkLmFkZChjKTtmb3IoZD1kLms7ZC5uZXh0KCk7KWM9ZC52YWx1ZSxjLmViPSExfWZvcihhPWEuazthLm5leHQoKTspYz1hLnZhbHVlLGMuZWJ8fChjLmViPSEwKX1iLkJhKCJDaGFuZ2VkU2VsZWN0aW9uIil9fTsNCnQuZyhjaCwiZGVsYXkiLGNoLnByb3RvdHlwZS52dyk7dC5kZWZpbmVQcm9wZXJ0eShjaCx7dnc6ImRlbGF5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Mbn0sZnVuY3Rpb24oYSl7dC5pKGEsIm51bWJlciIsY2gsImRlbGF5Iik7dGhpcy5Mbj1hfSk7dC5nKGNoLCJpc1BhcnRpYWxJbmNsdXNpb24iLGNoLnByb3RvdHlwZS5oRik7dC5kZWZpbmVQcm9wZXJ0eShjaCx7aEY6ImlzUGFydGlhbEluY2x1c2lvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueEN9LGZ1bmN0aW9uKGEpe3QuaShhLCJib29sZWFuIixjaCwiaXNQYXJ0aWFsSW5jbHVzaW9uIik7dGhpcy54Qz1hfSk7dC5nKGNoLCJib3giLGNoLnByb3RvdHlwZS52Zyk7dC5kZWZpbmVQcm9wZXJ0eShjaCx7dmc6ImJveCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSWx9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmwoYSxFLGNoLCJib3giKTt0aGlzLklsPWF9KTsNCmZ1bmN0aW9uIGRoKCl7MDxhcmd1bWVudHMubGVuZ3RoJiZ0LmFkKGRoKTthZS5jYWxsKHRoaXMpO3RoaXMubmFtZT0iUGFubmluZyI7dGhpcy5vej1uZXcgdzt0aGlzLnBqPSExO3ZhciBhPXRoaXM7dGhpcy5sRD1mdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsYS5sRCwhMSk7YS5zdG9wVG9vbCgpfX10LmdhKCJQYW5uaW5nVG9vbCIsZGgpO3QuS2EoZGgsYWUpO2RoLnByb3RvdHlwZS5jYW5TdGFydD1mdW5jdGlvbigpe2lmKCF0aGlzLmlzRW5hYmxlZClyZXR1cm4hMTt2YXIgYT10aGlzLmg7cmV0dXJuIG51bGw9PT1hfHwhYS5vZiYmIWEucGZ8fCFhLlIubGVmdHx8YS5VYSE9PXRoaXMmJiF0aGlzLmlzQmV5b25kRHJhZ1NpemUoKT8hMTohMH07DQpkaC5wcm90b3R5cGUuZG9BY3RpdmF0ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtudWxsIT09YSYmKHRoaXMucGo/KGEuUi5idWJibGVzPSEwLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5sRCwhMSkpOihhLiRiPSJtb3ZlIixhLktkPSEwLHRoaXMub3o9YS5wb3NpdGlvbi5jb3B5KCkpLHRoaXMuaGE9ITApfTtkaC5wcm90b3R5cGUuZG9EZWFjdGl2YXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO251bGwhPT1hJiYoYS4kYj0iIix0aGlzLmhhPWEuS2Q9ITEpfTtkaC5wcm90b3R5cGUuZG9DYW5jZWw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7bnVsbCE9PWEmJihhLnBvc2l0aW9uPXRoaXMub3osYS5LZD0hMSk7dGhpcy5zdG9wVG9vbCgpfTtkaC5wcm90b3R5cGUuZG9Nb3VzZU1vdmU9ZnVuY3Rpb24oKXt0aGlzLm1vdmUoKX07ZGgucHJvdG90eXBlLmRvTW91c2VVcD1mdW5jdGlvbigpe3RoaXMubW92ZSgpO3RoaXMuc3RvcFRvb2woKX07DQpkaC5wcm90b3R5cGUubW92ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZih0aGlzLmhhJiZhKWlmKHRoaXMucGopYS5SLmJ1YmJsZXM9ITA7ZWxzZXt2YXIgYj1hLnBvc2l0aW9uLGM9YS5OYy5lYSxkPWEuUi5lYSxmPWIueCtjLngtZC54LGM9Yi55K2MueS1kLnk7YS5vZnx8KGY9Yi54KTthLnBmfHwoYz1iLnkpO2EucG9zaXRpb249bmV3IHcoZixjKX19O3QuZyhkaCwiYnViYmxlcyIsZGgucHJvdG90eXBlLmJ1YmJsZXMpO3QuZGVmaW5lUHJvcGVydHkoZGgse2J1YmJsZXM6ImJ1YmJsZXMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnBqfSxmdW5jdGlvbihhKXt0LmkoYSwiYm9vbGVhbiIsZGgsImJ1YmJsZXMiKTt0aGlzLnBqPWF9KTt0LmcoZGgsIm9yaWdpbmFsUG9zaXRpb24iLGRoLnByb3RvdHlwZS5CSik7dC5BKGRoLHtCSjoib3JpZ2luYWxQb3NpdGlvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3p9KTsNCmZ1bmN0aW9uIGVoKCl7MDxhcmd1bWVudHMubGVuZ3RoJiZ0LmFkKGVoKTthZS5jYWxsKHRoaXMpO3RoaXMubmFtZT0iVGV4dEVkaXRpbmciO3RoaXMuVUI9dGhpcy5Cej10aGlzLnBEPW51bGw7dGhpcy5rRD1maDt0aGlzLlNrPW51bGw7dGhpcy5ZYT1naDt0aGlzLk9rPW51bGw7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTthLkVCPSEwO3RoaXMuWkI9YTthLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixmdW5jdGlvbigpe3ZhciBhPXRoaXMudGV4dEVkaXRpbmdUb29sLnBEO2EudGV4dD10aGlzLnZhbHVlO2hoKGEsSW5maW5pdHksSW5maW5pdHkpO3RoaXMuc3R5bGUud2lkdGg9MjArYS5FYS53aWR0aCp0aGlzLmJLKyJweCI7dGhpcy5yb3dzPWEub0Z9LCExKTthLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKGEpe3ZhciBjPWEud2hpY2gsZD10aGlzLnRleHRFZGl0aW5nVG9vbDtpZihudWxsIT09ZClpZigxMz09PWMpZC5hY2NlcHRUZXh0KGloKTsNCmVsc2V7aWYoOT09PWMpcmV0dXJuIGQuYWNjZXB0VGV4dChqaCksYS5wcmV2ZW50RGVmYXVsdCgpLCExOzI3PT09YyYmKGQuZG9DYW5jZWwoKSxkLmgmJmQuaC5mb2N1cygpKX19LCExKTthLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixmdW5jdGlvbigpe3ZhciBhPXRoaXMudGV4dEVkaXRpbmdUb29sO2EuWWE9PT1raD9hLllhPWxoOmEuWWE9PT1taD9hLllhPXZoOmEuWWE9PT12aCYmKGEuWWE9bGgpO3RoaXMuc2VsZWN0KCl9LCExKTthLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGZ1bmN0aW9uKCl7dGhpcy5mb2N1cygpO3RoaXMuc2VsZWN0KCl9LCExKX10LmdhKCJUZXh0RWRpdGluZ1Rvb2wiLGVoKTt0LkthKGVoLGFlKTt2YXIgd2g7ZWguTG9zdEZvY3VzPXdoPXQudyhlaCwiTG9zdEZvY3VzIiwwKTt2YXIgeGg7ZWguTW91c2VEb3duPXhoPXQudyhlaCwiTW91c2VEb3duIiwxKTt2YXIgamg7ZWguVGFiPWpoPXQudyhlaCwiVGFiIiwyKTt2YXIgaWg7DQplaC5FbnRlcj1paD10LncoZWgsIkVudGVyIiwzKTtlaC5TaW5nbGVDbGljaz10LncoZWgsIlNpbmdsZUNsaWNrIiwwKTt2YXIgZmg7ZWguU2luZ2xlQ2xpY2tTZWxlY3RlZD1maD10LncoZWgsIlNpbmdsZUNsaWNrU2VsZWN0ZWQiLDEpO3ZhciBnaD10LncoZWgsIlN0YXRlTm9uZSIsMCksa2g9dC53KGVoLCJTdGF0ZUFjdGl2ZSIsMSksbGg9dC53KGVoLCJTdGF0ZUVkaXRpbmciLDIpLHZoPXQudyhlaCwiU3RhdGVFZGl0aW5nMiIsMykseWg9dC53KGVoLCJTdGF0ZVZhbGlkYXRpbmciLDQpLG1oPXQudyhlaCwiU3RhdGVWYWxpZGF0ZWQiLDUpO3QuZyhlaCwidGV4dEJsb2NrIixlaC5wcm90b3R5cGUuTmcpO3QuZGVmaW5lUHJvcGVydHkoZWgse05nOiJ0ZXh0QmxvY2sifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkJ6fSxmdW5jdGlvbihhKXtudWxsIT09YSYmdC5sKGEsbmEsZWgsInRleHRCbG9jayIpO3RoaXMuQno9YX0pO3QuZyhlaCwiY3VycmVudFRleHRFZGl0b3IiLGVoLnByb3RvdHlwZS5maCk7DQp0LmRlZmluZVByb3BlcnR5KGVoLHtmaDoiY3VycmVudFRleHRFZGl0b3IifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlVCfSxmdW5jdGlvbihhKXt0aGlzLlVCPWF9KTt0LmcoZWgsImRlZmF1bHRUZXh0RWRpdG9yIixlaC5wcm90b3R5cGUucEUpO3QuZGVmaW5lUHJvcGVydHkoZWgse3BFOiJkZWZhdWx0VGV4dEVkaXRvciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWkJ9LGZ1bmN0aW9uKGEpe3RoaXMuWkI9YX0pO3QuZyhlaCwic3RhcnRpbmciLGVoLnByb3RvdHlwZS53Ryk7dC5kZWZpbmVQcm9wZXJ0eShlaCx7d0c6InN0YXJ0aW5nIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rRH0sZnVuY3Rpb24oYSl7dC5BYShhLGVoLGVoLCJzdGFydGluZyIpO3RoaXMua0Q9YX0pOw0KZWgucHJvdG90eXBlLmNhblN0YXJ0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNFbmFibGVkKXJldHVybiExO3ZhciBhPXRoaXMuaDtpZihudWxsPT09YXx8YS5hYnx8IWEuUi5sZWZ0fHx0aGlzLmlzQmV5b25kRHJhZ1NpemUoKSlyZXR1cm4hMTthPWEucGUoYS5SLmVhLG51bGwsZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBuYX0pO2lmKCEoYSBpbnN0YW5jZW9mIG5hJiZhLnl3JiZhLlMuY2FuRWRpdCgpKSlyZXR1cm4hMTthPWEuUztyZXR1cm4gbnVsbD09PWF8fHRoaXMud0c9PT1maCYmIWEuZWI/ITE6ITB9O2VoLnByb3RvdHlwZS5kb1N0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5oYXx8bnVsbD09PXRoaXMuTmd8fHRoaXMuZG9BY3RpdmF0ZSgpfTsNCmVoLnByb3RvdHlwZS5kb0FjdGl2YXRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaGEpe3ZhciBhPXRoaXMuaDtpZihudWxsIT09YSl7dmFyIGI9dGhpcy5OZztudWxsPT09YiYmKGI9YS5wZShhLlIuZWEsZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBuYT9hOm51bGx9KSxiPWIgaW5zdGFuY2VvZiBuYT9iOm51bGwpO2lmKG51bGwhPT1iJiYodGhpcy5OZz1iLG51bGwhPT1iLlMpKXt0aGlzLmhhPSEwO3RoaXMuWWE9a2g7dmFyIGM9dGhpcy5wRSxkPSExO251bGwhPT1iLmpCJiYoYz1iLmpCKTtudWxsPT09Y3x8Yy5FQnx8KGQ9ITApO3RoaXMucEQ9dGhpcy5OZy5jb3B5KCk7aWYoYy5FQil7dmFyIGY9Yi5xYihLYiksZz1hLnBvc2l0aW9uLGg9YS5zY2FsZSxrPWIuZGsoKSpoLGw9Yi5SYS53aWR0aCprO3poKGIpO3ZhciBtPShmLngtZy54KSpoLGY9KGYueS1nLnkpKmg7Yy52YWx1ZT1iLnRleHQ7YS5hai5zdHlsZS5mb250PWIuZm9udDtjLnN0eWxlLmZvbnQ9ImluaGVyaXQiOw0KYy5zdHlsZS5mb250U2l6ZT0xMDAqaysiJSI7Yy5zdHlsZS5saW5lSGVpZ2h0PSJub3JtYWwiO2w9MjArbDtjLnN0eWxlLndpZHRoPWwrInB4IjtjLnN0eWxlLmhlaWdodD0iIjtjLnJvd3M9Yi5vRjthLmFqLmFwcGVuZENoaWxkKGMpO2Muc3R5bGUubGVmdD0obS1sLzJ8MCkrInB4IjtjLnN0eWxlLnRvcD0oZi1jLmNsaWVudEhlaWdodC8yfDApKyJweCI7Yy5zdHlsZS50ZXh0QWxpZ249Yi50ZXh0QWxpZ259ZWxzZSBhLmFqLmFwcGVuZENoaWxkKGMpO2Muc3R5bGUucG9zaXRpb249ImFic29sdXRlIjtjLnN0eWxlLnpJbmRleD0xMDA7Yy5jbGFzc05hbWU9InN0YXJ0IjtjLnRleHRFZGl0aW5nVG9vbD10aGlzO2MuYks9aztpZihkJiZ2b2lkIDAhPT1jLm9uQWN0aXZhdGUpYy5vbkFjdGl2YXRlKCk7dGhpcy5maD1jO2MuZm9jdXMoKTtjLnNlbGVjdCgpfX19fTsNCmVoLnByb3RvdHlwZS5kb0NhbmNlbD1mdW5jdGlvbigpe251bGwhPT10aGlzLk9rJiYodGhpcy5maC5zdHlsZS5ib3JkZXI9dGhpcy5Payx0aGlzLk9rPW51bGwpO3RoaXMuc3RvcFRvb2woKX07ZWgucHJvdG90eXBlLmRvTW91c2VVcD1mdW5jdGlvbigpeyF0aGlzLmhhJiZ0aGlzLmNhblN0YXJ0KCkmJnRoaXMuZG9BY3RpdmF0ZSgpfTtlaC5wcm90b3R5cGUuZG9Nb3VzZURvd249ZnVuY3Rpb24oKXt0aGlzLmhhJiZ0aGlzLmFjY2VwdFRleHQoeGgpfTsNCmVoLnByb3RvdHlwZS5hY2NlcHRUZXh0PWZ1bmN0aW9uKGEpe3N3aXRjaChhKXtjYXNlIHhoOmlmKHRoaXMuWWE9PT1taHx8dGhpcy5ZYT09PXZoKXRoaXMuZmguZm9jdXMoKTtlbHNlIGlmKHRoaXMuWWE9PT1raHx8dGhpcy5ZYT09PWxoKXRoaXMuWWE9eWgsQWgodGhpcyk7YnJlYWs7Y2FzZSB3aDpjYXNlIGloOmNhc2Ugamg6aWYoaWg9PT1hJiYhMD09PXRoaXMuQnouVHcpYnJlYWs7aWYodGhpcy5ZYT09PWtofHx0aGlzLllhPT09bGgpdGhpcy5ZYT15aCxBaCh0aGlzKX19Ow0KZnVuY3Rpb24gQWgoYSl7aWYobnVsbCE9PWEuTmcmJm51bGwhPT1hLmZoKXt2YXIgYj1hLk5nLGM9YS5OZy50ZXh0LGQ9YS5maC52YWx1ZSxmPSIiLGY9ImZ1bmN0aW9uIj09PXR5cGVvZiBkP2QoKTpkO2lmKCFhLmlzVmFsaWRUZXh0KGEuTmcsYyxmKSl7YS5ZYT1saDtudWxsIT09Yi4kcyYmYi4kcyhhLGMsZik7bnVsbD09PWEuT2smJihhLk9rPWEuZmguc3R5bGUuYm9yZGVyLGEuZmguc3R5bGUuYm9yZGVyPSIzcHggc29saWQgcmVkIik7YS5maC5mb2N1cygpO3JldHVybn1hLnNjKGEubmFtZSk7YS5ZYT1taDtjIT09ZiYmKGEuTmcudGV4dD1mKTthLmdmPWEubmFtZTtiPWEuaDtudWxsIT09YiYmYi5CYSgiVGV4dEVkaXRlZCIsYS5OZyxjKTthLmdrKCk7YS5zdG9wVG9vbCgpO251bGwhPT1iJiZiLmZvY3VzKCl9bnVsbCE9PWEuT2smJihhLmZoLnN0eWxlLmJvcmRlcj1hLk9rLGEuT2s9bnVsbCl9DQplaC5wcm90b3R5cGUuZG9EZWFjdGl2YXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO2lmKG51bGwhPT1hKXt0aGlzLllhPWdoO3RoaXMuTmc9bnVsbDtpZihudWxsIT09dGhpcy5maCl7dmFyIGI9dGhpcy5maDtpZih2b2lkIDAhPT1iLm9uRGVhY3RpdmF0ZSliLm9uRGVhY3RpdmF0ZSgpO251bGwhPT1iJiZhLmFqLnJlbW92ZUNoaWxkKGIpfXRoaXMuaGE9ITF9fTtlaC5wcm90b3R5cGUuaXNWYWxpZFRleHQ9ZnVuY3Rpb24oYSxiLGMpe3QubChhLG5hLGVoLCJpc1ZhbGlkVGV4dDp0ZXh0YmxvY2siKTt2YXIgZD10aGlzLlZ0O2lmKG51bGwhPT1kJiYhZChhLGIsYykpcmV0dXJuITE7ZD1hLlZ0O3JldHVybiBudWxsPT09ZHx8ZChhLGIsYyk/ITA6ITF9O3QuZyhlaCwidGV4dFZhbGlkYXRpb24iLGVoLnByb3RvdHlwZS5WdCk7DQp0LmRlZmluZVByb3BlcnR5KGVoLHtWdDoidGV4dFZhbGlkYXRpb24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlNrfSxmdW5jdGlvbihhKXtudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIixlaCwidGV4dFZhbGlkYXRpb24iKTt0aGlzLlNrPWF9KTtmdW5jdGlvbiBIZSgpe2FlLmNhbGwodGhpcyk7dGhpcy5uYW1lPSJUb29sTWFuYWdlciI7dGhpcy5KQz1uZXcgQihhZSk7dGhpcy5LQz1uZXcgQihhZSk7dGhpcy5MQz1uZXcgQihhZSk7dGhpcy5sQz10aGlzLm1DPTFFMzt0aGlzLmFDPShuZXcgZ2EoMiwyKSkuSmEoKTt0aGlzLnp1PXRoaXMuQ3k9bnVsbDt0aGlzLk1DPWJmfXQuZ2EoIlRvb2xNYW5hZ2VyIixIZSk7dC5LYShIZSxhZSk7dmFyIGJmO0hlLldoZWVsU2Nyb2xsPWJmPXQudyhIZSwiV2hlZWxTY3JvbGwiLDApO3ZhciBhZjtIZS5XaGVlbFpvb209YWY9dC53KEhlLCJXaGVlbFpvb20iLDEpO0hlLldoZWVsTm9uZT10LncoSGUsIldoZWVsTm9uZSIsMik7DQp0LmcoSGUsIm1vdXNlV2hlZWxCZWhhdmlvciIsSGUucHJvdG90eXBlLmJuKTt0LmRlZmluZVByb3BlcnR5KEhlLHtibjoibW91c2VXaGVlbEJlaGF2aW9yIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NQ30sZnVuY3Rpb24oYSl7dC5BYShhLEhlLEhlLCJtb3VzZVdoZWVsQmVoYXZpb3IiKTt0aGlzLk1DPWF9KTtIZS5wcm90b3R5cGUuaW5pdGlhbGl6ZVN0YW5kYXJkVG9vbHM9ZnVuY3Rpb24oKXt0aGlzLkdEPW5ldyBhaDt0aGlzLlVBPW5ldyBoZjt0aGlzLnJGPW5ldyBBZzt0aGlzLlpGPW5ldyBRZzt0aGlzLmRHPW5ldyBZZzt0aGlzLkJBPW5ldyBwYTt0aGlzLkZkPW5ldyBjZjt0aGlzLnZFPW5ldyBjaDt0aGlzLktGPW5ldyBkaDt0aGlzLnB3PW5ldyBiaDt0aGlzLkN4PW5ldyBlaDt0aGlzLlhEPW5ldyBxYTt0aGlzLllEPW5ldyAkZ307DQpIZS5wcm90b3R5cGUuZG9Nb3VzZURvd249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7aWYobnVsbCE9PWEpe3ZhciBiPWEuamE7Yi5VeiYmMCE9PWIuSmUmJnQudHJhY2UoIldBUk5JTkc6IEluIFRvb2xNYW5hZ2VyLmRvTW91c2VEb3duOiBVbmRvTWFuYWdlci50cmFuc2FjdGlvbkxldmVsIGlzIG5vdCB6ZXJvIik7Zm9yKHZhciBiPXRoaXMuZWYubGVuZ3RoLGM9MDtjPGI7YysrKXt2YXIgZD10aGlzLmVmLndhKGMpO251bGw9PT1kLmgmJmQud2QodGhpcy5oKTtpZihkLmNhblN0YXJ0KCkpe2EuVWE9ZDthLlVhPT09ZCYmKGQuaGF8fGQuZG9BY3RpdmF0ZSgpLGQuZG9Nb3VzZURvd24oKSk7cmV0dXJufX0xPT09YS5SLmJ1dHRvbiYmKHRoaXMuYm49PT1iZj90aGlzLmJuPWFmOnRoaXMuYm49PT1hZiYmKHRoaXMuYm49YmYpKTt0aGlzLmRvQWN0aXZhdGUoKTt0aGlzLnN0YW5kYXJkV2FpdEFmdGVyKHRoaXMubkEpfX07DQpIZS5wcm90b3R5cGUuZG9Nb3VzZU1vdmU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7aWYobnVsbCE9PWEpe2lmKHRoaXMuaGEpZm9yKHZhciBiPXRoaXMuRGcubGVuZ3RoLGM9MDtjPGI7YysrKXt2YXIgZD10aGlzLkRnLndhKGMpO251bGw9PT1kLmgmJmQud2QodGhpcy5oKTtpZihkLmNhblN0YXJ0KCkpe2EuVWE9ZDthLlVhPT09ZCYmKGQuaGF8fGQuZG9BY3RpdmF0ZSgpLGQuZG9Nb3VzZU1vdmUoKSk7cmV0dXJufX10aGlzLnN0YW5kYXJkTW91c2VPdmVyKCk7dGhpcy5pc0JleW9uZERyYWdTaXplKCkmJnRoaXMuc3RhbmRhcmRXYWl0QWZ0ZXIodGhpcy5oYT90aGlzLm5BOnRoaXMuVUUpfX07SGUucHJvdG90eXBlLmRvQ3VycmVudE9iamVjdENoYW5nZWQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmRsO251bGw9PT1jfHxudWxsIT09YiYmKGI9PT1jfHxiLmVqKGMpKXx8dGhpcy5oaWRlVG9vbFRpcCgpfTsNCkhlLnByb3RvdHlwZS5kb1dhaXRBZnRlcj1mdW5jdGlvbigpe3RoaXMuaCYmdGhpcy5oLmpiJiYodGhpcy5kb01vdXNlSG92ZXIoKSx0aGlzLmhhfHx0aGlzLmRvVG9vbFRpcCgpKX07SGUucHJvdG90eXBlLmRvTW91c2VIb3Zlcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZihudWxsIT09YSl7dmFyIGI9YS5SO251bGw9PT1iLmNlJiYoYi5jZT1hLnBlKGIuZWEsbnVsbCxudWxsKSk7dmFyIGM9Yi5jZTtpZihudWxsIT09Yylmb3IoO251bGwhPT1jOyl7YT10aGlzLmhhP2Mud3Q6Yy54dDtpZihudWxsIT09YSYmKGEoYixjKSxiLkVlKSlicmVhaztjPWMuaWF9ZWxzZSBhPXRoaXMuaGE/YS53dDphLnh0LG51bGwhPT1hJiZhKGIpfX07DQpIZS5wcm90b3R5cGUuZG9Ub29sVGlwPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO2lmKG51bGwhPT1hKXt2YXIgYj1hLlI7bnVsbD09PWIuY2UmJihiLmNlPWEucGUoYi5lYSxudWxsLG51bGwpKTtiPWIuY2U7aWYobnVsbCE9PWIpe2lmKGIhPT10aGlzLmRsJiYhYi5laih0aGlzLmRsKSl7Zm9yKDtudWxsIT09Yjspe2E9Yi5XdDtpZihudWxsIT09YSl7dGhpcy5zaG93VG9vbFRpcChhLGIpO3JldHVybn1iPWIuaWF9dGhpcy5oaWRlVG9vbFRpcCgpfX1lbHNlIGE9YS5XdCxudWxsIT09YT90aGlzLnNob3dUb29sVGlwKGEsbnVsbCk6dGhpcy5oaWRlVG9vbFRpcCgpfX07DQpIZS5wcm90b3R5cGUuc2hvd1Rvb2xUaXA9ZnVuY3Rpb24oYSxiKXt0LmwoYSxKZSxIZSwic2hvd1Rvb2xUaXA6dG9vbHRpcCIpO251bGwhPT1iJiZ0LmwoYixRLEhlLCJzaG93VG9vbFRpcDpvYmoiKTt2YXIgYz10aGlzLmg7aWYobnVsbCE9PWMpe2EhPT10aGlzLmRsJiZ0aGlzLmhpZGVUb29sVGlwKCk7YS5hZj0iVG9vbCI7YS52bD0hMTthLnNjYWxlPTEvYy5zY2FsZTtjLmFkZChhKTtpZihudWxsIT09YiYmYiE9PXRoaXMuenUpe3ZhciBjPW51bGwsZD1iLmVwKCk7bnVsbCE9PWQmJihjPWQuZGF0YSk7YS5vYz1iO2EuZGF0YT1jfWVsc2UgbnVsbD09PWImJihhLmRhdGE9Yy5iYSk7aWYobnVsbD09PWJ8fGIhPT10aGlzLnp1KWEuc2YoKSx0aGlzLnBvc2l0aW9uVG9vbFRpcChhLGIpO3RoaXMuQ3k9YTt0aGlzLnp1PWJ9fTsNCkhlLnByb3RvdHlwZS5wb3NpdGlvblRvb2xUaXA9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5oO2lmKG51bGwhPT1iKXt2YXIgYz1iLlIuZWEuY29weSgpLGQ9YS5FYSxmPWIueGI7Yi5SLlV3JiYoYy54LT1kLndpZHRoKTtjLngrZC53aWR0aD5mLnJpZ2h0JiYoYy54LT1kLndpZHRoKzUpO2MueDxmLngmJihjLng9Zi54KTtjLnk9Yy55KzIwK2QuaGVpZ2h0PmYuYm90dG9tP2MueS0oZC5oZWlnaHQrNSk6Yy55KzIwO2MueTxmLnkmJihjLnk9Zi55KTthLnBvc2l0aW9uPWN9fTtIZS5wcm90b3R5cGUuaGlkZVRvb2xUaXA9ZnVuY3Rpb24oKXtpZihudWxsIT09dGhpcy5kbCl7dmFyIGE9dGhpcy5oO251bGwhPT1hJiYodGhpcy5kbC5kYXRhPW51bGwsdGhpcy5kbC5vYz1udWxsLGEucmVtb3ZlKHRoaXMuZGwpLHRoaXMuenU9dGhpcy5DeT1udWxsKX19O3QuQShIZSx7ZGw6ImN1cnJlbnRUb29sVGlwIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DeX0pOw0KSGUucHJvdG90eXBlLmRvTW91c2VVcD1mdW5jdGlvbigpe3RoaXMuY2FuY2VsV2FpdEFmdGVyKCk7aWYodGhpcy5oYSl7dmFyIGE9dGhpcy5oO2lmKG51bGw9PT1hKXJldHVybjtmb3IodmFyIGI9dGhpcy5FZy5sZW5ndGgsYz0wO2M8YjtjKyspe3ZhciBkPXRoaXMuRWcud2EoYyk7bnVsbD09PWQuaCYmZC53ZCh0aGlzLmgpO2lmKGQuY2FuU3RhcnQoKSl7YS5VYT1kO2EuVWE9PT1kJiYoZC5oYXx8ZC5kb0FjdGl2YXRlKCksZC5kb01vdXNlVXAoKSk7cmV0dXJufX19dGhpcy5kb0RlYWN0aXZhdGUoKX07SGUucHJvdG90eXBlLmRvTW91c2VXaGVlbD1mdW5jdGlvbigpe3RoaXMuc3RhbmRhcmRNb3VzZVdoZWVsKCl9O0hlLnByb3RvdHlwZS5kb0tleURvd249ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7bnVsbCE9PWEmJmEuU2UuZG9LZXlEb3duKCl9O0hlLnByb3RvdHlwZS5kb0tleVVwPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5oO251bGwhPT1hJiZhLlNlLmRvS2V5VXAoKX07DQpIZS5wcm90b3R5cGUuZG9DYW5jZWw9ZnVuY3Rpb24oKXtudWxsIT09ZmYmJmZmLmRvQ2FuY2VsKCk7YWUucHJvdG90eXBlLmRvQ2FuY2VsLmNhbGwodGhpcyl9O0hlLnByb3RvdHlwZS5maW5kVG9vbD1mdW5jdGlvbihhKXt0LmkoYSwic3RyaW5nIixIZSwiZmluZFRvb2w6bmFtZSIpO2Zvcih2YXIgYj10aGlzLmVmLmxlbmd0aCxjPTA7YzxiO2MrKyl7dmFyIGQ9dGhpcy5lZi53YShjKTtpZihkLm5hbWU9PT1hKXJldHVybiBkfWI9dGhpcy5EZy5sZW5ndGg7Zm9yKGM9MDtjPGI7YysrKWlmKGQ9dGhpcy5EZy53YShjKSxkLm5hbWU9PT1hKXJldHVybiBkO2I9dGhpcy5FZy5sZW5ndGg7Zm9yKGM9MDtjPGI7YysrKWlmKGQ9dGhpcy5FZy53YShjKSxkLm5hbWU9PT1hKXJldHVybiBkO3JldHVybiBudWxsfTsNCkhlLnByb3RvdHlwZS5yZXBsYWNlVG9vbD1mdW5jdGlvbihhLGIpe3QuaShhLCJzdHJpbmciLEhlLCJyZXBsYWNlVG9vbDpuYW1lIik7bnVsbCE9PWImJih0LmwoYixhZSxIZSwicmVwbGFjZVRvb2w6bmV3dG9vbCIpLGIuaCYmYi5oIT09dGhpcy5oJiZ0Lm0oIkNhbm5vdCBzaGFyZSB0b29scyBiZXR3ZWVuIERpYWdyYW1zOiAiK2IudG9TdHJpbmcoKSksYi53ZCh0aGlzLmgpKTtmb3IodmFyIGM9dGhpcy5lZi5sZW5ndGgsZD0wO2Q8YztkKyspe3ZhciBmPXRoaXMuZWYud2EoZCk7aWYoZi5uYW1lPT09YSlyZXR1cm4gbnVsbCE9PWI/dGhpcy5lZi5NZyhkLGIpOnRoaXMuZWYucWQoZCksZn1jPXRoaXMuRGcubGVuZ3RoO2ZvcihkPTA7ZDxjO2QrKylpZihmPXRoaXMuRGcud2EoZCksZi5uYW1lPT09YSlyZXR1cm4gbnVsbCE9PWI/dGhpcy5EZy5NZyhkLGIpOnRoaXMuRGcucWQoZCksZjtjPXRoaXMuRWcubGVuZ3RoO2ZvcihkPTA7ZDxjO2QrKylpZihmPXRoaXMuRWcud2EoZCksZi5uYW1lPT09DQphKXJldHVybiBudWxsIT09Yj90aGlzLkVnLk1nKGQsYik6dGhpcy5FZy5xZChkKSxmO3JldHVybiBudWxsfTtmdW5jdGlvbiBCaChhLGIsYyxkKXt0LmkoYiwic3RyaW5nIixIZSwicmVwbGFjZVN0YW5kYXJkVG9vbDpuYW1lIik7dC5sKGQsQixIZSwicmVwbGFjZVN0YW5kYXJkVG9vbDpsaXN0Iik7bnVsbCE9PWMmJih0LmwoYyxhZSxIZSwicmVwbGFjZVN0YW5kYXJkVG9vbDpuZXd0b29sIiksYy5oJiZjLmghPT1hLmgmJnQubSgiQ2Fubm90IHNoYXJlIHRvb2xzIGJldHdlZW4gRGlhZ3JhbXM6ICIrYy50b1N0cmluZygpKSxjLm5hbWU9YixjLndkKGEuaCkpO2EuZmluZFRvb2woYik/YS5yZXBsYWNlVG9vbChiLGMpOm51bGwhPT1jJiZkLmFkZChjKX10LkEoSGUse2VmOiJtb3VzZURvd25Ub29scyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSkN9KTt0LkEoSGUse0RnOiJtb3VzZU1vdmVUb29scyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuS0N9KTsNCnQuQShIZSx7RWc6Im1vdXNlVXBUb29scyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTEN9KTt0LmcoSGUsImhvdmVyRGVsYXkiLEhlLnByb3RvdHlwZS5VRSk7dC5kZWZpbmVQcm9wZXJ0eShIZSx7VUU6ImhvdmVyRGVsYXkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm1DfSxmdW5jdGlvbihhKXt0LmkoYSwibnVtYmVyIixIZSwiaG92ZXJEZWxheSIpO3RoaXMubUM9YX0pO3QuZyhIZSwiaG9sZERlbGF5IixIZS5wcm90b3R5cGUubkEpO3QuZGVmaW5lUHJvcGVydHkoSGUse25BOiJob2xkRGVsYXkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmxDfSxmdW5jdGlvbihhKXt0LmkoYSwibnVtYmVyIixIZSwiaG9sZERlbGF5Iik7dGhpcy5sQz1hfSk7dC5nKEhlLCJkcmFnU2l6ZSIsSGUucHJvdG90eXBlLndFKTsNCnQuZGVmaW5lUHJvcGVydHkoSGUse3dFOiJkcmFnU2l6ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYUN9LGZ1bmN0aW9uKGEpe3QubChhLGdhLEhlLCJkcmFnU2l6ZSIpO3RoaXMuYUM9YS5aKCl9KTt0LmcoSGUsImFjdGlvblRvb2wiLEhlLnByb3RvdHlwZS5HRCk7dC5kZWZpbmVQcm9wZXJ0eShIZSx7R0Q6ImFjdGlvblRvb2wifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbmRUb29sKCJBY3Rpb24iKX0sZnVuY3Rpb24oYSl7QmgodGhpcywiQWN0aW9uIixhLHRoaXMuZWYpfSk7dC5nKEhlLCJyZWxpbmtpbmdUb29sIixIZS5wcm90b3R5cGUuVUEpO3QuZGVmaW5lUHJvcGVydHkoSGUse1VBOiJyZWxpbmtpbmdUb29sIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maW5kVG9vbCgiUmVsaW5raW5nIil9LGZ1bmN0aW9uKGEpe0JoKHRoaXMsIlJlbGlua2luZyIsYSx0aGlzLmVmKX0pO3QuZyhIZSwibGlua1Jlc2hhcGluZ1Rvb2wiLEhlLnByb3RvdHlwZS5yRik7DQp0LmRlZmluZVByb3BlcnR5KEhlLHtyRjoibGlua1Jlc2hhcGluZ1Rvb2wifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbmRUb29sKCJMaW5rUmVzaGFwaW5nIil9LGZ1bmN0aW9uKGEpe0JoKHRoaXMsIkxpbmtSZXNoYXBpbmciLGEsdGhpcy5lZil9KTt0LmcoSGUsInJlc2l6aW5nVG9vbCIsSGUucHJvdG90eXBlLlpGKTt0LmRlZmluZVByb3BlcnR5KEhlLHtaRjoicmVzaXppbmdUb29sIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maW5kVG9vbCgiUmVzaXppbmciKX0sZnVuY3Rpb24oYSl7QmgodGhpcywiUmVzaXppbmciLGEsdGhpcy5lZil9KTt0LmcoSGUsInJvdGF0aW5nVG9vbCIsSGUucHJvdG90eXBlLmRHKTt0LmRlZmluZVByb3BlcnR5KEhlLHtkRzoicm90YXRpbmdUb29sIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maW5kVG9vbCgiUm90YXRpbmciKX0sZnVuY3Rpb24oYSl7QmgodGhpcywiUm90YXRpbmciLGEsdGhpcy5lZil9KTsNCnQuZyhIZSwibGlua2luZ1Rvb2wiLEhlLnByb3RvdHlwZS5CQSk7dC5kZWZpbmVQcm9wZXJ0eShIZSx7QkE6ImxpbmtpbmdUb29sIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maW5kVG9vbCgiTGlua2luZyIpfSxmdW5jdGlvbihhKXtCaCh0aGlzLCJMaW5raW5nIixhLHRoaXMuRGcpfSk7dC5nKEhlLCJkcmFnZ2luZ1Rvb2wiLEhlLnByb3RvdHlwZS5GZCk7dC5kZWZpbmVQcm9wZXJ0eShIZSx7RmQ6ImRyYWdnaW5nVG9vbCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmluZFRvb2woIkRyYWdnaW5nIil9LGZ1bmN0aW9uKGEpe0JoKHRoaXMsIkRyYWdnaW5nIixhLHRoaXMuRGcpfSk7dC5nKEhlLCJkcmFnU2VsZWN0aW5nVG9vbCIsSGUucHJvdG90eXBlLnZFKTsNCnQuZGVmaW5lUHJvcGVydHkoSGUse3ZFOiJkcmFnU2VsZWN0aW5nVG9vbCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmluZFRvb2woIkRyYWdTZWxlY3RpbmciKX0sZnVuY3Rpb24oYSl7QmgodGhpcywiRHJhZ1NlbGVjdGluZyIsYSx0aGlzLkRnKX0pO3QuZyhIZSwicGFubmluZ1Rvb2wiLEhlLnByb3RvdHlwZS5LRik7dC5kZWZpbmVQcm9wZXJ0eShIZSx7S0Y6InBhbm5pbmdUb29sIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maW5kVG9vbCgiUGFubmluZyIpfSxmdW5jdGlvbihhKXtCaCh0aGlzLCJQYW5uaW5nIixhLHRoaXMuRGcpfSk7dC5nKEhlLCJjb250ZXh0TWVudVRvb2wiLEhlLnByb3RvdHlwZS5wdyk7dC5kZWZpbmVQcm9wZXJ0eShIZSx7cHc6ImNvbnRleHRNZW51VG9vbCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmluZFRvb2woIkNvbnRleHRNZW51Iil9LGZ1bmN0aW9uKGEpe0JoKHRoaXMsIkNvbnRleHRNZW51IixhLHRoaXMuRWcpfSk7DQp0LmcoSGUsInRleHRFZGl0aW5nVG9vbCIsSGUucHJvdG90eXBlLkN4KTt0LmRlZmluZVByb3BlcnR5KEhlLHtDeDoidGV4dEVkaXRpbmdUb29sIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maW5kVG9vbCgiVGV4dEVkaXRpbmciKX0sZnVuY3Rpb24oYSl7QmgodGhpcywiVGV4dEVkaXRpbmciLGEsdGhpcy5FZyl9KTt0LmcoSGUsImNsaWNrQ3JlYXRpbmdUb29sIixIZS5wcm90b3R5cGUuWEQpO3QuZGVmaW5lUHJvcGVydHkoSGUse1hEOiJjbGlja0NyZWF0aW5nVG9vbCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmluZFRvb2woIkNsaWNrQ3JlYXRpbmciKX0sZnVuY3Rpb24oYSl7QmgodGhpcywiQ2xpY2tDcmVhdGluZyIsYSx0aGlzLkVnKX0pO3QuZyhIZSwiY2xpY2tTZWxlY3RpbmdUb29sIixIZS5wcm90b3R5cGUuWUQpOw0KdC5kZWZpbmVQcm9wZXJ0eShIZSx7WUQ6ImNsaWNrU2VsZWN0aW5nVG9vbCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmluZFRvb2woIkNsaWNrU2VsZWN0aW5nIil9LGZ1bmN0aW9uKGEpe0JoKHRoaXMsIkNsaWNrU2VsZWN0aW5nIixhLHRoaXMuRWcpfSk7ZnVuY3Rpb24gQmUoKXt0aGlzLm1IPUNoO3RoaXMuVT1udWxsO25ldyBqYTt0aGlzLlFsPXRoaXMuUmw9bnVsbDt0aGlzLkhCPXRoaXMuc2Q9dGhpcy5jcj10aGlzLnhqPSExO3RoaXMuTGU9ITA7dGhpcy55dT10aGlzLnh1PXRoaXMuU0I9bnVsbDt0aGlzLkF5PTA7dGhpcy5MeT02MDA7dGhpcy5zSD1uZXcgdygwLDApO3RoaXMuSkI9dGhpcy5JQj10aGlzLkJEPSExO3RoaXMuc289bmV3IGphfWZ1bmN0aW9uIENoKGEsYixjLGQpe2EvPWQvMjtyZXR1cm4gMT5hP2MvMiphKmErYjotYy8yKigtLWEqKGEtMiktMSkrYn0NCkJlLnByb3RvdHlwZS5wcmVwYXJlQW5pbWF0aW9uPUJlLnByb3RvdHlwZS50bD1mdW5jdGlvbigpe3RoaXMuTGUmJih0aGlzLnhqJiZ0aGlzLm1uKCksdGhpcy5zZD0hMCx0aGlzLkhCPSExKX07ZnVuY3Rpb24gRGgoYSl7YS5MZSYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7ITE9PT1hLnNkfHxhLnhqfHwoYS5zZD0hMSxhLlUuQmEoIkFuaW1hdGlvblN0YXJ0aW5nIiksRWgoYSkpfSl9DQpmdW5jdGlvbiBGaChhLGIsYyxkKXtpZihhLnNkJiYoZSYmKGIgaW5zdGFuY2VvZiBRfHx0Lm0oImFkZFRvQW5pbWF0aW9uOm9iamVjdCBtdXN0IGJlIGEgR3JhcGhPYmplY3QuIikpLCEoYiBpbnN0YW5jZW9mIEUpfHxiLnBBKSl7dmFyIGY9YS5zbyxnO2YuY29udGFpbnMoYik/KGI9Zi56YShiKSxhPWJbMF0sZz1iWzFdLHZvaWQgMD09PWEucG9zaXRpb24mJihhLnBvc2l0aW9uPUdoKGMpKSxnLnBvc2l0aW9uPUdoKGQpKTooYT17fSxnPXt9LGEucG9zaXRpb249R2goYyksZy5wb3NpdGlvbj1HaChkKSxmLmFkZChiLFthLGddKSl9fWZ1bmN0aW9uIEdoKGEpe3JldHVybiBhIGluc3RhbmNlb2Ygdz9hLmNvcHkoKTphIGluc3RhbmNlb2YgZ2E/YS5jb3B5KCk6YX0NCmZ1bmN0aW9uIEVoKGEpe3ZhciBiLGM9YS5VO2lmKG51bGwhPT1jKWlmKDA9PT1hLnNvLmNvdW50KWEueGo9ITEsYy5VZigpO2Vsc2V7YS54aj0hMDtifHwoYj17fSk7dmFyIGQ9Yi56S3x8YS5tSCxmPWIuTEt8fG51bGwsZz1iLk1LfHxudWxsLGg9Yi5kdXJhdGlvbnx8YS5MeTtiPWEuc28uaztmb3IodmFyIGs9YS5zSDtiLm5leHQoKTspe3ZhciBsPWIudmFsdWVbMF0ucG9zaXRpb247bCYmIWwuTigpJiZsLmFzc2lnbihrKX1hLlNCPWQ7YS54dT1mO2EueXU9ZzthLkF5PWg7dmFyIG09YS5sSD1hLnNvO0hoKGEpO0loKGEsYyxtLGQsMCxoLG51bGwhPT1hLlJsJiZudWxsIT09YS5RbCk7SmgoYS5VKTtLaChhKTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oYil7dmFyIGY9Ynx8K25ldyBEYXRlLGc9ZitoLGs7KGZ1bmN0aW9uIHUoYil7ITEhPT1hLnhqJiYoaz1ifHwrbmV3IERhdGUsYj1rPmc/aDprLWYsSGgoYSksSWgoYSxjLG0sZCxiLGgsbnVsbCE9PWEuUmwmJm51bGwhPT0NCmEuUWwpLGEueHUmJmEueHUoKSxKaChjKSxLaChhKSxrPmc/TGgoYSk6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHUpKX0pKGYpfSl9fXZhciBNaD17b3BhY2l0eTpmdW5jdGlvbihhLGIsYyxkLGYsZyl7YS5vcGFjaXR5PWQoZixiLGMtYixnKX0scG9zaXRpb246ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe2YhPT1nP2EucEcoZChmLGIueCxjLngtYi54LGcpLGQoZixiLnksYy55LWIueSxnKSk6YS5wb3NpdGlvbj1uZXcgdyhkKGYsYi54LGMueC1iLngsZyksZChmLGIueSxjLnktYi55LGcpKX0sc2NhbGU6ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe2Euc2NhbGU9ZChmLGIsYy1iLGcpfSx2aXNpYmxlOmZ1bmN0aW9uKGEsYixjLGQsZixnKXthLnZpc2libGU9ZiE9PWc/YjpjfX07ZnVuY3Rpb24gSGgoYSl7aWYoIWEuY3Ipe3ZhciBiPWEuVTthLkJEPWIuV2E7YS5JQj1iLlJ0O2EuSkI9Yi55bztiLldhPSEwO2IuUnQ9ITA7Yi55bz0hMDthLmNyPSEwfX0NCmZ1bmN0aW9uIEtoKGEpe3ZhciBiPWEuVTtiLldhPWEuQkQ7Yi5SdD1hLklCO2IueW89YS5KQjthLmNyPSExfWZ1bmN0aW9uIEloKGEsYixjLGQsZixnLGgpe2ZvcihjPWMuaztjLm5leHQoKTspe3ZhciBrPWMua2V5LGw9Yy52YWx1ZSxtPWxbMF0sbD1sWzFdLG47Zm9yKG4gaW4gbClpZih2b2lkIDAhPT1NaFtuXSlNaFtuXShrLG1bbl0sbFtuXSxkLGYsZyl9aCYmKGg9YS5SbCxhPWEuUWwsbj1hLnktaC55LGE9ZChmLGgueCxhLngtaC54LGcpLGQ9ZChmLGgueSxuLGcpLGY9Yi5YYixiLlhiPSEwLGIucG9zaXRpb249bmV3IHcoYSxkKSxiLlhiPWYpfQ0KQmUucHJvdG90eXBlLnN0b3BBbmltYXRpb249QmUucHJvdG90eXBlLm1uPWZ1bmN0aW9uKCl7ITA9PT10aGlzLnNkJiYodGhpcy5zZD0hMSx0aGlzLkhCJiZ0aGlzLlUudGUoKSk7dGhpcy54aiYmdGhpcy5MZSYmKEhoKHRoaXMpLEloKHRoaXMsdGhpcy5VLHRoaXMubEgsdGhpcy5TQix0aGlzLkF5LHRoaXMuQXksbnVsbCE9PXRoaXMuUmwmJm51bGwhPT10aGlzLlFsKSxLaCh0aGlzKSxMaCh0aGlzKSl9O2Z1bmN0aW9uIExoKGEpe2EueGo9ITE7YS5SbD1udWxsO2EuUWw9bnVsbDthLnNvPW5ldyBqYTtIaChhKTtmb3IodmFyIGI9YS5VLmxpbmtzO2IubmV4dCgpOyl7dmFyIGM9Yi52YWx1ZTtudWxsIT09Yy54byYmKGMucG9pbnRzPWMueG8sYy54bz1udWxsKX1iPWEuVTtiLk9jKCk7Yi5VZigpO0toKGEpO2EueXUmJmEueXUoKTthLnl1PW51bGw7YS54dT1udWxsO2IuQmEoIkFuaW1hdGlvbkZpbmlzaGVkIil9DQpmdW5jdGlvbiBOaChhLGIsYyl7dmFyIGQ9Yi5wYSxmPWMucGE7YyBpbnN0YW5jZW9mIFQmJmMucGxhY2Vob2xkZXI/KGM9Yy5wbGFjZWhvbGRlcixkPWMucWIoRWIpLGQueCs9Yy5wYWRkaW5nLmxlZnQsZC55Kz1jLnBhZGRpbmcudG9wLEZoKGEsYixkLGIucG9zaXRpb24pKTpGaChhLGIsbmV3IHcoZi54K2Yud2lkdGgvMi1kLndpZHRoLzIsZi55K2YuaGVpZ2h0LzItZC5oZWlnaHQvMiksYi5wb3NpdGlvbil9ZnVuY3Rpb24gT2goYSxiLGMpe2Euc2QmJihudWxsPT09YS5SbCYmYi5OKCkmJm51bGw9PT1hLlFsJiYoYS5SbD1iLmNvcHkoKSksYS5RbD1jLmNvcHkoKSl9dC5nKEJlLCJpc0VuYWJsZWQiLEJlLnByb3RvdHlwZS5pc0VuYWJsZWQpO3QuZGVmaW5lUHJvcGVydHkoQmUse2lzRW5hYmxlZDoiaXNFbmFibGVkIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MZX0sZnVuY3Rpb24oYSl7dC5pKGEsImJvb2xlYW4iLEJlLCJpc0VuYWJsZWQiKTt0aGlzLkxlPWF9KTsNCnQuZyhCZSwiZHVyYXRpb24iLEJlLnByb3RvdHlwZS5kdXJhdGlvbik7dC5kZWZpbmVQcm9wZXJ0eShCZSx7ZHVyYXRpb246ImR1cmF0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MeX0sZnVuY3Rpb24oYSl7dC5pKGEsIm51bWJlciIsQmUsImR1cmF0aW9uIik7MT5hJiZ0LmxhKGEsIj49IDEiLEJlLCJkdXJhdGlvbiIpO3RoaXMuTHk9YX0pO3QuQShCZSx7eWc6ImlzQW5pbWF0aW5nIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54an0pO3QuQShCZSx7Q0s6ImlzVGlja2luZyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3J9KTsNCmZ1bmN0aW9uICRkKCl7MDxhcmd1bWVudHMubGVuZ3RoJiZ0LmFkKCRkKTt0LkFjKHRoaXMpO3RoaXMuVT1udWxsO3RoaXMuRmI9bmV3IEIoRSk7dGhpcy5ZYj0iIjt0aGlzLkxmPTE7dGhpcy5jej0hMTt0aGlzLlFrPXRoaXMuRXo9dGhpcy50az10aGlzLnNrPXRoaXMucms9dGhpcy5xaz10aGlzLm9rPXRoaXMucGs9dGhpcy5uaz10aGlzLnZrPXRoaXMubWs9dGhpcy51az10aGlzLmxrPXRoaXMua2s9ITA7dGhpcy4keT0hMTt0aGlzLnZ2PVtdfXQuZ2EoIkxheWVyIiwkZCk7JGQucHJvdG90eXBlLndkPWZ1bmN0aW9uKGEpe3RoaXMuVT1hfTsNCiRkLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT0wKTt2YXIgYj0nTGF5ZXIgIicrdGhpcy5uYW1lKyciJztpZigwPj1hKXJldHVybiBiO2Zvcih2YXIgYz0wLGQ9MCxmPTAsZz0wLGg9MCxrPXRoaXMuRmIuaztrLm5leHQoKTspe3ZhciBsPWsudmFsdWU7bCBpbnN0YW5jZW9mIFQ/ZisrOmwgaW5zdGFuY2VvZiBTP2QrKzpsIGluc3RhbmNlb2YgVj9nKys6bCBpbnN0YW5jZW9mIEplP2grKzpjKyt9az0iIjswPGMmJihrKz1jKyIgUGFydHMgIik7MDxkJiYoays9ZCsiIE5vZGVzICIpOzA8ZiYmKGsrPWYrIiBHcm91cHMgIik7MDxnJiYoays9ZysiIExpbmtzICIpOzA8aCYmKGsrPWgrIiBBZG9ybm1lbnRzICIpO2lmKDE8YSlmb3IoYz10aGlzLkZiLms7Yy5uZXh0KCk7KWQ9Yy52YWx1ZSxrKz0iXG4gICAgIitkLnRvU3RyaW5nKGEtMSksKGY9ZC5kYXRhKSYmdC5vZChmKSYmKGsrPSIgIyIrdC5vZChmKSksZCBpbnN0YW5jZW9mIFM/ays9IiAiK3lkKGYpOg0KZCBpbnN0YW5jZW9mIFYmJihrKz0iICIreWQoZC5hYSkrIiAiK3lkKGQuY2EpKTtyZXR1cm4gYisiICIrdGhpcy5GYi5jb3VudCsiOiAiK2t9Ow0KJGQucHJvdG90eXBlLmZpbmRPYmplY3RBdD0kZC5wcm90b3R5cGUucGU9ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWImJihiPW51bGwpO3ZvaWQgMD09PWMmJihjPW51bGwpO2lmKCExPT09dGhpcy5RaylyZXR1cm4gbnVsbDtlJiYhYS5OKCkmJnQubSgiZmluZE9iamVjdEF0OiBQb2ludCBtdXN0IGhhdmUgYSByZWFsIHZhbHVlLiIpO3ZhciBkPXRoaXMuRmIsZj0hMTt0aGlzLmgueGIuR2EoYSkmJihmPSEwKTtmb3IodmFyIGc9dC5LKCksaD1kLmxlbmd0aDtoLS07KXt2YXIgaz1kLndhKGgpO2lmKCghMCE9PWZ8fCExIT09UGgoaykpJiZrLlFhKCkmJihnLmFzc2lnbihhKSxRYShnLGsubWUpLGs9ay5wZShnLGIsYyksbnVsbCE9PWsmJihudWxsIT09YiYmKGs9YihrKSksayYmKG51bGw9PT1jfHxjKGspKSkpKXJldHVybiB0LkIoZyksa310LkIoZyk7cmV0dXJuIG51bGx9Ow0KJGQucHJvdG90eXBlLmZpbmRPYmplY3RzQXQ9JGQucHJvdG90eXBlLmNwPWZ1bmN0aW9uKGEsYixjLGQpe3ZvaWQgMD09PWImJihiPW51bGwpO3ZvaWQgMD09PWMmJihjPW51bGwpO2QgaW5zdGFuY2VvZiBCfHxkIGluc3RhbmNlb2YgQ3x8KGQ9bmV3IEMoUSkpO2lmKCExPT09dGhpcy5RaylyZXR1cm4gZDtlJiYhYS5OKCkmJnQubSgiZmluZE9iamVjdHNBdDogUG9pbnQgbXVzdCBoYXZlIGEgcmVhbCB2YWx1ZS4iKTt2YXIgZj10aGlzLkZiLGc9ITE7dGhpcy5oLnhiLkdhKGEpJiYoZz0hMCk7Zm9yKHZhciBoPXQuSygpLGs9Zi5sZW5ndGg7ay0tOyl7dmFyIGw9Zi53YShrKTshMD09PWcmJiExPT09UGgobCl8fCFsLlFhKCl8fChoLmFzc2lnbihhKSxRYShoLGwubWUpLGwuY3AoaCxiLGMsZCkmJihudWxsIT09YiYmKGw9YihsKSksbCYmKG51bGw9PT1jfHxjKGwpKSYmZC5hZGQobCkpKX10LkIoaCk7cmV0dXJuIGR9Ow0KJGQucHJvdG90eXBlLmZpbmRPYmplY3RzSW49JGQucHJvdG90eXBlLmFrPWZ1bmN0aW9uKGEsYixjLGQsZil7dm9pZCAwPT09YiYmKGI9bnVsbCk7dm9pZCAwPT09YyYmKGM9bnVsbCk7dm9pZCAwPT09ZCYmKGQ9ITEpO2YgaW5zdGFuY2VvZiBCfHxmIGluc3RhbmNlb2YgQ3x8KGY9bmV3IEMoUSkpO2lmKCExPT09dGhpcy5RaylyZXR1cm4gZjtlJiYhYS5OKCkmJnQubSgiZmluZE9iamVjdHNJbjogUmVjdCBtdXN0IGhhdmUgYSByZWFsIHZhbHVlLiIpO3ZhciBnPXRoaXMuRmIsaD0hMTt0aGlzLmgueGIuV2ooYSkmJihoPSEwKTtmb3IodmFyIGs9Zy5sZW5ndGgsZz1nLm47ay0tOyl7dmFyIGw9Z1trXTsoITAhPT1ofHwhMSE9PVBoKGwpKSYmbC5RYSgpJiZsLmFrKGEsYixjLGQsZikmJihudWxsIT09YiYmKGw9YihsKSksbCYmKG51bGw9PT1jfHxjKGwpKSYmZi5hZGQobCkpfXJldHVybiBmfTsNCiRkLnByb3RvdHlwZS5kQT1mdW5jdGlvbihhLGIsYyxkLGYsZyxoKXtpZighMT09PXRoaXMuUWspcmV0dXJuIGY7Zm9yKHZhciBrPXRoaXMuRmIsbD1rLmxlbmd0aCxrPWsubjtsLS07KXt2YXIgbT1rW2xdOyghMCE9PWh8fCExIT09UGgobSkpJiZnKG0pJiZtLlFhKCkmJm0uYWsoYSxiLGMsZCxmKSYmKG51bGwhPT1iJiYobT1iKG0pKSxtJiYobnVsbD09PWN8fGMobSkpJiZmLmFkZChtKSl9cmV0dXJuIGZ9Ow0KJGQucHJvdG90eXBlLmZpbmRPYmplY3RzTmVhcj0kZC5wcm90b3R5cGUuUG09ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe3ZvaWQgMD09PWMmJihjPW51bGwpO3ZvaWQgMD09PWQmJihkPW51bGwpO3ZvaWQgMD09PWYmJihmPSEwKTtpZighMSE9PWYmJiEwIT09Zil7aWYoZiBpbnN0YW5jZW9mIEJ8fGYgaW5zdGFuY2VvZiBDKWc9ZjtmPSEwfWcgaW5zdGFuY2VvZiBCfHxnIGluc3RhbmNlb2YgQ3x8KGc9bmV3IEMoUSkpO2lmKCExPT09dGhpcy5RaylyZXR1cm4gZztlJiYhYS5OKCkmJnQubSgiZmluZE9iamVjdHNOZWFyOiBQb2ludCBtdXN0IGhhdmUgYSByZWFsIHZhbHVlLiIpO3ZhciBoPXRoaXMuRmIsaz0hMTt0aGlzLmgueGIuR2EoYSkmJihrPSEwKTtmb3IodmFyIGw9dC5LKCksbT10LksoKSxuPWgubGVuZ3RoO24tLTspe3ZhciBwPWgubltuXTshMD09PWsmJiExPT09UGgocCl8fCFwLlFhKCl8fChsLmFzc2lnbihhKSxRYShsLHAubWUpLG0ucChhLngrYixhLnkpLFFhKG0scC5tZSksDQpwLlBtKGwsbSxjLGQsZixnKSYmKG51bGwhPT1jJiYocD1jKHApKSxwJiYobnVsbD09PWR8fGQocCkpJiZnLmFkZChwKSkpfXQuQihsKTt0LkIobSk7cmV0dXJuIGd9O2FhPSRkLnByb3RvdHlwZTthYS5EZj1mdW5jdGlvbihhLGIpe2lmKHRoaXMudmlzaWJsZSl7dmFyIGM9dGhpcy5GYixkO2Q9Yj9iOmEueGI7Zm9yKHZhciBmPWMubGVuZ3RoLGc9MDtnPGY7ZysrKXt2YXIgaD1jLm5bZ107aC5EQz1nO2lmKCEoaCBpbnN0YW5jZW9mIFYmJiExPT09aC5yZ3x8aCBpbnN0YW5jZW9mIEplJiZudWxsIT09aC5YaCkpaWYoZWIoaC5wYSxkKSlmb3IoaC5EZighMCksUWgoaCksaD1oLmJ3O2gubmV4dCgpOyl7dmFyIGs9aC52YWx1ZTtoaChrLEluZmluaXR5LEluZmluaXR5KTtrLkxjKCk7ay5EZighMCl9ZWxzZSBoLkRmKCExKSxudWxsIT09aC5idyYmMDxoLmJ3LmNvdW50JiZRaChoKX19fTsNCmFhLlVlPWZ1bmN0aW9uKGEsYixjLGQpe2lmKHRoaXMudmlzaWJsZSYmKHZvaWQgMD09PWQmJihkPSEwKSxkfHwhdGhpcy55YykpezEhPT10aGlzLkxmJiYoYS5nbG9iYWxBbHBoYT10aGlzLkxmKTtjPXRoaXMuRmI7ZD10aGlzLnZ2O2QubGVuZ3RoPTA7Zm9yKHZhciBmPWIuc2NhbGUsZz1jLmxlbmd0aCxoPTA7aDxnO2grKyl7dmFyIGs9Yy5uW2hdO2lmKFBoKGspKXtpZihrIGluc3RhbmNlb2YgViYmKGsuaWMmJmQucHVzaChrKSwhMT09PWsucmcpKWNvbnRpbnVlO3ZhciBsPWsucGE7MTxsLndpZHRoKmZ8fDE8bC5oZWlnaHQqZj9rLlVlKGEsYik6UmgoayxhKX19YS5nbG9iYWxBbHBoYT0xfX07DQpmdW5jdGlvbiBTaChhLGIsYyxkKXtpZihhLnZpc2libGUpe2IuZ2xvYmFsQWxwaGE9YS5MZjt2YXIgZj1hLkZiO2E9YS52djthLmxlbmd0aD0wO2Zvcih2YXIgZz1jLnNjYWxlLGg9Zi5sZW5ndGgsaz1kLmxlbmd0aCxsPTA7bDxoO2wrKyl7dmFyIG09Zi5uW2xdO2lmKFBoKG0pKXtpZihtIGluc3RhbmNlb2YgViYmKG0uaWMmJmEucHVzaChtKSwhMT09PW0ucmcpKWNvbnRpbnVlO3ZhciBuPVRoKG0sbS5wYSkscDthOntwPW47Zm9yKHZhciBxPWQscj1rLHM9Mi9nLHU9NC9nLHY9MDt2PHI7disrKXt2YXIgRD1xW3ZdO2lmKDAhPT1EWzJdJiYwIT09RFszXSYmcC5hRihEWzBdLXMsRFsxXS1zLERbMl0rdSxEWzNdK3UpKXtwPSEwO2JyZWFrIGF9fXA9ITF9cCYmKDE8bi53aWR0aCpnfHwxPG4uaGVpZ2h0Kmc/bS5VZShiLGMpOlJoKG0sYikpfX1iLmdsb2JhbEFscGhhPTF9fQ0KYWEuaj1mdW5jdGlvbihhLGIsYyxkLGYpe3ZhciBnPXRoaXMuaDtudWxsIT09ZyYmZy5JYyh2ZCxhLHRoaXMsYixjLGQsZil9O2FhLm5wPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLkZiO2IubG89dGhpcztpZihhPj1kLmNvdW50KWE9ZC5jb3VudDtlbHNlIGlmKGQud2EoYSk9PT1iKXJldHVybi0xO2QuSmQoYSxiKTtiLmt0KGMpO2Q9dGhpcy5oO251bGwhPT1kJiYoYz9kLmthKCk6ZC5ucChiKSk7YiBpbnN0YW5jZW9mIFQmJnRoaXMueXgoYik7cmV0dXJuIGF9O2FhLlhlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLkZiO2lmKDA+YXx8YT49ZC5sZW5ndGgpe2lmKGE9ZC5pbmRleE9mKGIpLDA+YSlyZXR1cm4tMX1lbHNlIGlmKGQud2EoYSkhPT1iJiYoYT1kLmluZGV4T2YoYiksMD5hKSlyZXR1cm4tMTtiLmx0KGMpO2QucWQoYSk7ZD10aGlzLmg7bnVsbCE9PWQmJihjP2Qua2EoKTpkLlhlKGIpKTtiLmxvPW51bGw7cmV0dXJuIGF9Ow0KYWEueXg9ZnVuY3Rpb24oYSl7Zm9yKDtudWxsIT09YTspe2lmKGEubGF5ZXI9PT10aGlzKXt2YXIgYj1hO2lmKGIuUmMubmV4dCgpKXtmb3IodmFyIGM9LTEsZD0tMSxmPXRoaXMuRmIubixnPWYubGVuZ3RoLGg9MDtoPGc7aCsrKXt2YXIgaz1mW2hdO2lmKGs9PT1iJiYoYz1oLDA8PWQpKWJyZWFrO2lmKDA+ZCYmay5nYj09PWImJihkPWgsMDw9YykpYnJlYWt9ISgwPmQpJiZkPGMmJihmPXRoaXMuRmIsZi5xZChjKSxmLkpkKGQsYikpfX1hPWEuZ2J9fTthYS5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLkZiLkllKCksYj1hLmxlbmd0aCxjPTA7YzxiO2MrKylhW2NdLkRmKCExKSx0aGlzLlhlKC0xLGFbY10sITEpfTt0LkEoJGQse3JsOiJwYXJ0cyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRmIua30pO3QuQSgkZCx7UEs6InBhcnRzQmFja3dhcmRzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GYi5XbX0pO3QuQSgkZCx7aDoiZGlhZ3JhbSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVX0pOw0KdC5nKCRkLCJuYW1lIiwkZC5wcm90b3R5cGUubmFtZSk7dC5kZWZpbmVQcm9wZXJ0eSgkZCx7bmFtZToibmFtZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWWJ9LGZ1bmN0aW9uKGEpe3QuaShhLCJzdHJpbmciLCRkLCJuYW1lIik7dmFyIGI9dGhpcy5ZYjtpZihiIT09YSl7dmFyIGM9dGhpcy5oO2lmKG51bGwhPT1jKWZvcigiIj09PWImJnQubSgiQ2Fubm90IHJlbmFtZSBkZWZhdWx0IExheWVyIHRvOiAiK2EpLGM9Yy5ZdztjLm5leHQoKTspYy52YWx1ZS5uYW1lPT09YSYmdC5tKCJMYXllci5uYW1lIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIGRpYWdyYW06ICIrYSk7dGhpcy5ZYj1hO3RoaXMuaigibmFtZSIsYixhKTtmb3IoYT10aGlzLkZiLms7YS5uZXh0KCk7KWEudmFsdWUuYWY9dGhpcy5ZYn19KTt0LmcoJGQsIm9wYWNpdHkiLCRkLnByb3RvdHlwZS5vcGFjaXR5KTsNCnQuZGVmaW5lUHJvcGVydHkoJGQse29wYWNpdHk6Im9wYWNpdHkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkxmfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkxmO2IhPT1hJiYodC5pKGEsIm51bWJlciIsJGQsIm9wYWNpdHkiKSwoMD5hfHwxPGEpJiZ0LmxhKGEsIjAgPD0gdmFsIDw9IDEiLCRkLCJvcGFjaXR5IiksdGhpcy5MZj1hLHRoaXMuaigib3BhY2l0eSIsYixhKSxhPXRoaXMuaCxudWxsIT09YSYmYS5rYSgpKX0pO3QuZygkZCwiaXNUZW1wb3JhcnkiLCRkLnByb3RvdHlwZS55Yyk7dC5kZWZpbmVQcm9wZXJ0eSgkZCx7eWM6ImlzVGVtcG9yYXJ5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jen0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jejtiIT09YSYmKHQuaShhLCJib29sZWFuIiwkZCwiaXNUZW1wb3JhcnkiKSx0aGlzLmN6PWEsdGhpcy5qKCJpc1RlbXBvcmFyeSIsYixhKSl9KTt0LmcoJGQsInZpc2libGUiLCRkLnByb3RvdHlwZS52aXNpYmxlKTsNCnQuZGVmaW5lUHJvcGVydHkoJGQse3Zpc2libGU6InZpc2libGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkV6fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkV6O2lmKGIhPT1hKXt0LmkoYSwiYm9vbGVhbiIsJGQsInZpc2libGUiKTt0aGlzLkV6PWE7dGhpcy5qKCJ2aXNpYmxlIixiLGEpO2ZvcihiPXRoaXMuRmIuaztiLm5leHQoKTspYi52YWx1ZS5kZihhKTthPXRoaXMuaDtudWxsIT09YSYmYS5rYSgpfX0pO3QuZygkZCwicGlja2FibGUiLCRkLnByb3RvdHlwZS5CZik7dC5kZWZpbmVQcm9wZXJ0eSgkZCx7QmY6InBpY2thYmxlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Ra30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5RaztiIT09YSYmKHQuaShhLCJib29sZWFuIiwkZCwicGlja2FibGUiKSx0aGlzLlFrPWEsdGhpcy5qKCJwaWNrYWJsZSIsYixhKSl9KTt0LmcoJGQsImlzQm91bmRzSW5jbHVkZWQiLCRkLnByb3RvdHlwZS5xQSk7DQp0LmRlZmluZVByb3BlcnR5KCRkLHtxQToiaXNCb3VuZHNJbmNsdWRlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHl9LGZ1bmN0aW9uKGEpe3RoaXMuJHkhPT1hJiYodGhpcy4keT1hLG51bGwhPT10aGlzLmgmJnRoaXMuaC5PYygpKX0pO3QuZygkZCwiYWxsb3dDb3B5IiwkZC5wcm90b3R5cGUuU2kpO3QuZGVmaW5lUHJvcGVydHkoJGQse1NpOiJhbGxvd0NvcHkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmtrfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmtrO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLCRkLCJhbGxvd0NvcHkiKSx0aGlzLmtrPWEsdGhpcy5qKCJhbGxvd0NvcHkiLGIsYSkpfSk7dC5nKCRkLCJhbGxvd0RlbGV0ZSIsJGQucHJvdG90eXBlLllrKTsNCnQuZGVmaW5lUHJvcGVydHkoJGQse1lrOiJhbGxvd0RlbGV0ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGt9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubGs7YiE9PWEmJih0LmkoYSwiYm9vbGVhbiIsJGQsImFsbG93RGVsZXRlIiksdGhpcy5saz1hLHRoaXMuaigiYWxsb3dEZWxldGUiLGIsYSkpfSk7dC5nKCRkLCJhbGxvd1RleHRFZGl0IiwkZC5wcm90b3R5cGUuUW8pO3QuZGVmaW5lUHJvcGVydHkoJGQse1FvOiJhbGxvd1RleHRFZGl0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51a30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy51aztiIT09YSYmKHQuaShhLCJib29sZWFuIiwkZCwiYWxsb3dUZXh0RWRpdCIpLHRoaXMudWs9YSx0aGlzLmooImFsbG93VGV4dEVkaXQiLGIsYSkpfSk7dC5nKCRkLCJhbGxvd0dyb3VwIiwkZC5wcm90b3R5cGUuTW8pOw0KdC5kZWZpbmVQcm9wZXJ0eSgkZCx7TW86ImFsbG93R3JvdXAifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm1rfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLm1rO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLCRkLCJhbGxvd0dyb3VwIiksdGhpcy5taz1hLHRoaXMuaigiYWxsb3dHcm91cCIsYixhKSl9KTt0LmcoJGQsImFsbG93VW5ncm91cCIsJGQucHJvdG90eXBlLlJvKTt0LmRlZmluZVByb3BlcnR5KCRkLHtSbzoiYWxsb3dVbmdyb3VwIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52a30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52aztiIT09YSYmKHQuaShhLCJib29sZWFuIiwkZCwiYWxsb3dVbmdyb3VwIiksdGhpcy52az1hLHRoaXMuaigiYWxsb3dVbmdyb3VwIixiLGEpKX0pO3QuZygkZCwiYWxsb3dMaW5rIiwkZC5wcm90b3R5cGUuQW0pOw0KdC5kZWZpbmVQcm9wZXJ0eSgkZCx7QW06ImFsbG93TGluayJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmt9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubms7YiE9PWEmJih0LmkoYSwiYm9vbGVhbiIsJGQsImFsbG93TGluayIpLHRoaXMubms9YSx0aGlzLmooImFsbG93TGluayIsYixhKSl9KTt0LmcoJGQsImFsbG93UmVsaW5rIiwkZC5wcm90b3R5cGUuVGopO3QuZGVmaW5lUHJvcGVydHkoJGQse1RqOiJhbGxvd1JlbGluayJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGt9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucGs7YiE9PWEmJih0LmkoYSwiYm9vbGVhbiIsJGQsImFsbG93UmVsaW5rIiksdGhpcy5waz1hLHRoaXMuaigiYWxsb3dSZWxpbmsiLGIsYSkpfSk7dC5nKCRkLCJhbGxvd01vdmUiLCRkLnByb3RvdHlwZS5Taik7DQp0LmRlZmluZVByb3BlcnR5KCRkLHtTajoiYWxsb3dNb3ZlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5va30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5vaztiIT09YSYmKHQuaShhLCJib29sZWFuIiwkZCwiYWxsb3dNb3ZlIiksdGhpcy5vaz1hLHRoaXMuaigiYWxsb3dNb3ZlIixiLGEpKX0pO3QuZygkZCwiYWxsb3dSZXNoYXBlIiwkZC5wcm90b3R5cGUuTm8pO3QuZGVmaW5lUHJvcGVydHkoJGQse05vOiJhbGxvd1Jlc2hhcGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnFrfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnFrO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLCRkLCJhbGxvd1Jlc2hhcGUiKSx0aGlzLnFrPWEsdGhpcy5qKCJhbGxvd1Jlc2hhcGUiLGIsYSkpfSk7dC5nKCRkLCJhbGxvd1Jlc2l6ZSIsJGQucHJvdG90eXBlLk9vKTsNCnQuZGVmaW5lUHJvcGVydHkoJGQse09vOiJhbGxvd1Jlc2l6ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmt9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucms7YiE9PWEmJih0LmkoYSwiYm9vbGVhbiIsJGQsImFsbG93UmVzaXplIiksdGhpcy5yaz1hLHRoaXMuaigiYWxsb3dSZXNpemUiLGIsYSkpfSk7dC5nKCRkLCJhbGxvd1JvdGF0ZSIsJGQucHJvdG90eXBlLlBvKTt0LmRlZmluZVByb3BlcnR5KCRkLHtQbzoiYWxsb3dSb3RhdGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnNrfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnNrO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLCRkLCJhbGxvd1JvdGF0ZSIpLHRoaXMuc2s9YSx0aGlzLmooImFsbG93Um90YXRlIixiLGEpKX0pO3QuZygkZCwiYWxsb3dTZWxlY3QiLCRkLnByb3RvdHlwZS5QZSk7DQp0LmRlZmluZVByb3BlcnR5KCRkLHtQZToiYWxsb3dTZWxlY3QifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnRrfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnRrO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLCRkLCJhbGxvd1NlbGVjdCIpLHRoaXMudGs9YSx0aGlzLmooImFsbG93U2VsZWN0IixiLGEpKX0pOw0KZnVuY3Rpb24geihhKXtmdW5jdGlvbiBiKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsYiwhMSk7VWgoYyl9MTxhcmd1bWVudHMubGVuZ3RoJiZ0Lm0oIkRpYWdyYW0gY29uc3RydWN0b3IgY2FuIG9ubHkgdGFrZSBvbmUgb3B0aW9uYWwgYXJndW1lbnQsIHRoZSBESVYgSFRNTCBlbGVtZW50IG9yIGl0cyBpZC4iKTt0LkFjKHRoaXMpO3QuYUE9W107dGhpcy5YYj0hMDt0aGlzLmxpPW5ldyBCZTt0aGlzLmxpLlU9dGhpczt0aGlzLm5mPTE3O3ZhciBjPXRoaXM7bnVsbCE9PWRvY3VtZW50LmJvZHk/VWgodGhpcyk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsYiwhMSk7dGhpcy5TYj1uZXcgQigkZCk7dGhpcy5EYj10aGlzLkViPTA7dGhpcy5NYj10aGlzLlNnPXRoaXMuamI9bnVsbDt0aGlzLlJrPXt9O3RoaXMuU0YoKTt0aGlzLlp5PXt9O3RoaXMuWnkudHdvVG91Y2hQYW49ITA7dGhpcy5NYT0obmV3IHcoTmFOLA0KTmFOKSkuZnJlZXplKCk7dGhpcy53Yz0xO3RoaXMuUnU9KG5ldyB3KE5hTixOYU4pKS5mcmVlemUoKTt0aGlzLlN1PU5hTjt0aGlzLmd2PTFFLTQ7dGhpcy5kdj0xMDA7dGhpcy5tZD1uZXcgaGE7dGhpcy5adj0obmV3IHcoTmFOLE5hTikpLmZyZWV6ZSgpO3RoaXMuSXU9KG5ldyB4KE5hTixOYU4sTmFOLE5hTikpLmZyZWV6ZSgpO3RoaXMuRmw9WGU7dGhpcy5Bbj14Yjt0aGlzLkdrPVhlO3RoaXMuWG49eGI7dGhpcy5UdT10aGlzLlF1PUViO3RoaXMuZmc9bmV3IEMoUSk7dGhpcy52ZT0hMDt0aGlzLlBsPW5ldyBqYShWLHgpO3RoaXMuTW49ITA7dGhpcy5pSD0yNTA7dGhpcy5HbD1udWxsO3RoaXMubnU9KG5ldyBhYigxNiwxNiwxNiwxNikpLmZyZWV6ZSgpO3RoaXMuQ3U9dGhpcy5OZj0hMTt0aGlzLlFuPSEwO3RoaXMuQ2s9bmV3IGxkO3RoaXMuQ2Q9bmV3IGxkO3RoaXMuZWM9bmV3IGxkO3RoaXMucmo9bnVsbDt0aGlzLk92PS0xO3RoaXMueHo9ITE7dGhpcy5JeT1uZXcgamEoInN0cmluZyIsDQpCKTt0aGlzLkh5PW5ldyBqYSgic3RyaW5nIiwic3RyaW5nIik7VmgodGhpcyk7dGhpcy5xdj1uZXcgQyhTKTt0aGlzLlRrPW5ldyBDKFQpO3RoaXMuJHU9bmV3IEMoVik7dGhpcy5GYj1uZXcgQyhFKTt0aGlzLlZ1PSEwO3RoaXMub0M9ITE7dGhpcy5Wdj1kZzt0aGlzLnpqPTEwO3RoaXMuQnk9dGhpcy5GeT10aGlzLlR2PW51bGw7dGhpcy56eT0iIjt0aGlzLkdxPSJhdXRvIjt0aGlzLnFpPXRoaXMuT2k9dGhpcy5CaT10aGlzLmp2PXRoaXMuQ2k9dGhpcy5EaT10aGlzLkVpPXRoaXMucGk9dGhpcy50aT10aGlzLm5pPW51bGw7dGhpcy52aT0hMDt0aGlzLmt6PSExO3RoaXMucHk9bnVsbDt0aGlzLld1PXRoaXMudW49dGhpcy5HeT10aGlzLnlvPXRoaXMuZUQ9dGhpcy5MaT0hMTt0aGlzLnpDPSEwO3RoaXMuemQ9ITE7dGhpcy5rZT1udWxsO3ZhciBkPXRoaXM7dGhpcy5HQz1mdW5jdGlvbihhKXtpZihhLmJhPT09ZC5iYSYmZC5OYSl7ZC5OYT0hMTt0cnl7dmFyIGI9YS50ZDsiIj09PWEuQWYmJg0KYj09PXZkJiZXaChkLGEub2JqZWN0LGEucHJvcGVydHlOYW1lKX1maW5hbGx5e2QuTmE9ITB9fX07dGhpcy5IQz1mdW5jdGlvbihhKXtYaChkLGEpfTt0aGlzLkREPSEwO3RoaXMuVWc9LTI7dGhpcy5yaT1uZXcgamEoT2JqZWN0LEUpO3RoaXMuems9bmV3IGphKE9iamVjdCxWKTt0aGlzLllsPW5ldyBqYShPYmplY3QsQXJyYXkpO3RoaXMuSWs9ITE7dGhpcy5saz10aGlzLmtrPXRoaXMuZHU9dGhpcy5MZT0hMDt0aGlzLmZ1PXRoaXMuZXU9ITE7dGhpcy5rdT10aGlzLml1PXRoaXMudGs9dGhpcy5zaz10aGlzLnJrPXRoaXMucWs9dGhpcy5vaz10aGlzLnBrPXRoaXMubms9dGhpcy5odT10aGlzLnZrPXRoaXMubWs9dGhpcy51az0hMDt0aGlzLmFvPXRoaXMud0M9ITE7dGhpcy5qdT10aGlzLmd1PXRoaXMuT3U9dGhpcy5OdT0hMDt0aGlzLkV2PXRoaXMuRHY9MTY7dGhpcy5yej10aGlzLkN2PSExO3RoaXMudHo9dGhpcy5zej10aGlzLk1qPXRoaXMuTGo9bnVsbDt0aGlzLk5lPShuZXcgYWIoNSkpLmZyZWV6ZSgpOw0KdGhpcy5Idj0obmV3IEMoRSkpLmZyZWV6ZSgpO3RoaXMuZXY9OTk5OTk5OTk5O3RoaXMuUHU9KG5ldyBDKEUpKS5mcmVlemUoKTt0aGlzLkhrPXRoaXMud2o9dGhpcy53aT0hMDt0aGlzLlRsPXRoaXMuU2w9ITE7dGhpcy5ZeT10aGlzLlh5PTA7dGhpcy5QZD1udWxsO3RoaXMubHU9ITA7dGhpcy5sZj0hMTt0aGlzLlNkPW51bGw7dGhpcy5pbT0xO3RoaXMuVG49ITE7dGhpcy5pRD0wO3RoaXMucG89bnVsbDt0aGlzLkNEPShuZXcgeChOYU4sTmFOLE5hTixOYU4pKS5mcmVlemUoKTt0aGlzLkR1PShuZXcgeChOYU4sTmFOLE5hTixOYU4pKS5mcmVlemUoKTt0aGlzLmptPW5ldyBDO1loKHRoaXMpO3RoaXMuWnU9dGhpcy5LdT10aGlzLnB2PXRoaXMuV0I9dGhpcy5WQj10aGlzLlhCPXRoaXMuQWo9dGhpcy5Eaz10aGlzLkZpPW51bGw7WmgodGhpcyk7dGhpcy5nZD1udWxsO3RoaXMuSnU9ITE7dGhpcy5Cbj1udWxsO3RoaXMud2I9bmV3IEhlO3RoaXMud2IuaW5pdGlhbGl6ZVN0YW5kYXJkVG9vbHMoKTsNCnRoaXMuVWE9dGhpcy51dz10aGlzLndiO3RoaXMuU2U9bmV3IG9hO3RoaXMuYmE9bmV3IFA7dGhpcy5MaT0hMDt0aGlzLmpjPW5ldyBiZTt0aGlzLkxpPSExO3ZvaWQgMD09PWEmJihhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTt0aGlzLmZDPXRoaXMuS3k9bnVsbDt0aGlzLlh2PSEwO3QuWEkmJih0aGlzLlh2PSExKTt0aGlzLnF6PSExO3RoaXMudWo9bnVsbDt0aGlzLm1nPTE7dGhpcy5Gaz1uZXcgJGg7YWkodGhpcyxhKTt0aGlzLiRsPTE7dGhpcy5hbT0wO3RoaXMuQ0M9bmV3IHc7dGhpcy56RD01MDA7dGhpcy5tdT1uZXcgdzt0aGlzLm5zPW51bGw7dGhpcy5YYj0hMX10LmdhKCJEaWFncmFtIix6KTsNCmZ1bmN0aW9uIFpoKGEpe2EuRmk9bmV3IGphKCJzdHJpbmciLEUpO3ZhciBiPW5ldyBTLGM9bmV3IG5hO2MuYmluZChuZXcgRGUoInRleHQiLCIiLHlkKSk7Yi5hZGQoYyk7YS5YQj1iO2EuRmkuYWRkKCIiLGIpO2I9bmV3IFM7Yz1uZXcgbmE7Yy5zdHJva2U9ImJyb3duIjtjLmJpbmQobmV3IERlKCJ0ZXh0IiwiIix5ZCkpO2IuYWRkKGMpO2EuRmkuYWRkKCJDb21tZW50IixiKTtiPW5ldyBTO2Iudmw9ITE7Yi5Sej0hMTtjPW5ldyBXO2MuemI9IkVsbGlwc2UiO2MuZmlsbD0iYmxhY2siO2Muc3Ryb2tlPW51bGw7Yy5DYT0obmV3IGdhKDMsMykpLkphKCk7Yi5hZGQoYyk7YS5GaS5hZGQoIkxpbmtMYWJlbCIsYik7YS5Eaz1uZXcgamEoInN0cmluZyIsVCk7Yj1uZXcgVDtiLnN4PSJHUk9VUFBBTkVMIjtiLnR5cGU9Ymk7Yz1uZXcgbmE7Yy5mb250PSJib2xkIDEycHQgc2Fucy1zZXJpZiI7Yy5iaW5kKG5ldyBEZSgidGV4dCIsIiIseWQpKTtiLmFkZChjKTtjPW5ldyB5KGNpKTtjLm5hbWU9DQoiR1JPVVBQQU5FTCI7dmFyIGQ9bmV3IFc7ZC56Yj0iUmVjdGFuZ2xlIjtkLmZpbGw9InJnYmEoMTI4LDEyOCwxMjgsMC4yKSI7ZC5zdHJva2U9ImJsYWNrIjtjLmFkZChkKTtkPW5ldyBUZztkLnBhZGRpbmc9KG5ldyBhYig1LDUsNSw1KSkuSmEoKTtjLmFkZChkKTtiLmFkZChjKTthLlZCPWI7YS5Eay5hZGQoIiIsYik7YS5Baj1uZXcgamEoInN0cmluZyIsVik7Yj1uZXcgVjtjPW5ldyBXO2MuZmo9ITA7Yi5hZGQoYyk7Yz1uZXcgVztjLm9uPSJTdGFuZGFyZCI7Yy5maWxsPSJibGFjayI7Yy5zdHJva2U9bnVsbDtjLmZiPTA7Yi5hZGQoYyk7YS5XQj1iO2EuQWouYWRkKCIiLGIpO2I9bmV3IFY7Yz1uZXcgVztjLmZqPSEwO2Muc3Ryb2tlPSJicm93biI7Yi5hZGQoYyk7YS5Bai5hZGQoIkNvbW1lbnQiLGIpO2I9bmV3IEplO2IudHlwZT1jaTtjPW5ldyBXO2MuZmlsbD1udWxsO2Muc3Ryb2tlPSJkb2RnZXJibHVlIjtjLmZiPTM7Yi5hZGQoYyk7Yz1uZXcgVGc7Yy5tYXJnaW49KG5ldyBhYigxLjUsDQoxLjUsMS41LDEuNSkpLkphKCk7Yi5hZGQoYyk7YS5wdj1iO2EuS3U9YjtiPW5ldyBKZTtiLnR5cGU9dmc7Yz1uZXcgVztjLmZqPSEwO2MuZmlsbD1udWxsO2Muc3Ryb2tlPSJkb2RnZXJibHVlIjtjLmZiPTM7Yi5hZGQoYyk7YS5adT1ifQ0KZnVuY3Rpb24gVWgoYSl7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO2Iuc3R5bGUud2lkdGg9IjEwMCUiO2Iuc3R5bGUuaGVpZ2h0PSIyMDBweCI7Yi5zdHlsZS5ib3hTaXppbmc9ImNvbnRlbnQtYm94Ijt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Yy5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iO2Muc3R5bGUud2lkdGg9IjIwMHB4IjtjLnN0eWxlLmhlaWdodD0iMTUwcHgiO2Muc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7Yy5zdHlsZS5ib3hTaXppbmc9ImNvbnRlbnQtYm94IjtjLmFwcGVuZENoaWxkKGIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYyk7dmFyIGQ9Yi5vZmZzZXRXaWR0aDtjLnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiO2I9Yi5vZmZzZXRXaWR0aDtkPT09YiYmKGI9Yy5jbGllbnRXaWR0aCk7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChjKTthLm5mPWQtYn0NCnoucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPTApO3ZhciBiPSIiO3RoaXMuaWQmJihiPXRoaXMuaWQpO3RoaXMuYWomJnRoaXMuYWouaWQmJihiPXRoaXMuYWouaWQpO2I9J0RpYWdyYW0gIicrYisnIic7aWYoMD49YSlyZXR1cm4gYjtmb3IodmFyIGM9dGhpcy5TYi5rO2MubmV4dCgpOyliKz0iXG4gICIrYy52YWx1ZS50b1N0cmluZyhhLTEpO3JldHVybiBifTt6LnByb3RvdHlwZS5jaGVja1Byb3BlcnRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5jSSh0aGlzKX07ei5mcm9tRGl2PWZ1bmN0aW9uKGEpe3ZhciBiPWE7InN0cmluZyI9PT10eXBlb2YgYSYmKGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpO3JldHVybiBiIGluc3RhbmNlb2YgSFRNTERpdkVsZW1lbnQmJmIuVSBpbnN0YW5jZW9mIHo/Yi5VOm51bGx9O3QuZyh6LCJkaXYiLHoucHJvdG90eXBlLmFqKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7YWo6ImRpdiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWJ9LGZ1bmN0aW9uKGEpe251bGwhPT1hJiZ0LmwoYSxIVE1MRGl2RWxlbWVudCx6LCJkaXYiKTtpZih0aGlzLk1iIT09YSl7dC5hQT1bXTt2YXIgYj10aGlzLk1iO2lmKG51bGwhPT1iKXtiLlU9dm9pZCAwO2IuaW5uZXJIVE1MPSIiO251bGwhPT10aGlzLmpiJiYodGhpcy5qYi5VPW51bGwsdGhpcy5qYi5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLkdHLCExKSx0aGlzLmpiLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5GRywhMSksdGhpcy5qYi5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5FRywhMSkpO2I9dGhpcy5UdjtpZihudWxsIT09Yil7Zm9yKHZhciBjPWIuSkMubixkPWMubGVuZ3RoLGY9MDtmPGQ7ZisrKWNbZl0uY2FuY2VsV2FpdEFmdGVyKCk7Yz1iLktDLm47ZD1jLmxlbmd0aDtmb3IoZj0wO2Y8ZDtmKyspY1tmXS5jYW5jZWxXYWl0QWZ0ZXIoKTsNCmM9Yi5MQy5uO2Q9Yy5sZW5ndGg7Zm9yKGY9MDtmPGQ7ZisrKWNbZl0uY2FuY2VsV2FpdEFmdGVyKCl9Yi5jYW5jZWxXYWl0QWZ0ZXIoKTt0aGlzLlNnPXRoaXMuamI9bnVsbDt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLlpHLCExKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLkRwLCEwKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLkNwLCEwKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5GcCwhMCk7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNld2hlZWwiLHRoaXMuaWgsITApO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Nb3VzZVNjcm9sbCIsdGhpcy5paCwhMCk7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0Iix0aGlzLkVwLCEwKTtudWxsIT09dGhpcy5wbyYmKHRoaXMucG89dGhpcy5wby50YXJnZXQ9bnVsbCl9ZWxzZSB0aGlzLmxmPQ0KITE7dGhpcy5NYj1udWxsO2lmKG51bGwhPT1hKXtpZihiPWEuVSliLmFqPW51bGw7YWkodGhpcyxhKTt0aGlzLlRBKCl9fX0pO2Z1bmN0aW9uICRoKCl7dGhpcy54SD0iNjNhZDA1YmJlMjNhMTc4NjQ2OGE0Yzc0MWI2ZDIiO3RoaXMueEg9PT10aGlzLl90az90aGlzLnpoPSEwOmRpKHRoaXMsITEpfQ0KZnVuY3Rpb24gZGkoYSxiKXt2YXIgYz0icCIsZD13aW5kb3dbdC5IYSgiNzZhNzE1YjJmNzNmMTQ4YSIpXVt0LkhhKCI3MmJhMTNiNSIpXTtpZih0LkhhKCI3N2JiNWJiMmYzMjYwM2RlIik9PT13aW5kb3dbdC5IYSgiNzZhNzE1YjJmNzNmMTQ4YSIpXVt0LkhhKCI2YWJhMTlhN2VjMzUxNDg4IildKXRyeXthLnpoPSF3aW5kb3dbdC5IYSgiNGRhMTE4YjdlYzIxMDgiKV0oW3QuSGEoIjViYjgwNmJmZWEzNTFhOTA0YTg0NTE1ZTFiNmQzOGI2IildKShbdC5IYSgiNDliYzE5YTFlNiIpXSkoW3QuSGEoIjU5YmQwNGExZTYzODBmYTU1MzliIildKShbdC5IYSgiN2JiODA2OWFlNyIpXT09PXQuSGEodC5jdykpO2lmKCExPT09YS56aClyZXR1cm47YS56aD0hd2luZG93W3QuSGEoIjRkYTExOGI3ZWMyMTA4IildKFt0LkhhKCI1YmI4MDZiZmVhMzUxYTkwNGE4NDUxNWUxYjZkMzhiNiIpXSkoW3QuSGEoIjQ5YmMxOWExZTYiKV0pKFt0LkhhKCI1OWJkMDRhMWU2MzgwZmE1NTM5YjZjN2ExOTdjMzFiYjRjZmQzZSIpXSkoW3QuSGEoIjdiYjgwNjlhZTciKV09PT0NCnQuSGEodC5jdykpO2lmKCExPT09YS56aClyZXR1cm59Y2F0Y2goZil7fWZvcih2YXIgZz1kW3QuSGEoIjc2YWQxOGI0ZjczZSIpXSxoPWRbdC5IYSgiNzNhNjEyYjZmYjE5MWQiKV0odC5IYSgiMzVlNyIpKSsyO2g8ZztoKyspYys9ZFtoXTtkPWNbdC5IYSgiNzNhNjEyYjZmYjE5MWQiKV0odC5IYSh0LmN3KSk7MD49ZCYmdC5IYSh0LmN3KSE9PXQuSGEoIjdkYTcxY2EwYWQzODFlOTAiKSYmKGQ9Y1t0LkhhKCI3M2E2MTJiNmZiMTkxZCIpXSh0LkhhKCI3NmE3MTViMmVmM2UxNDk3NTciKSkpO2Euemg9ISgwPGQmJmQ8Y1t0LkhhKCI3M2E2MTJiNmZiMTkxZCIpXSh0LkhhKCIzNSIpKSk7YS56aCYmKGM9ZG9jdW1lbnRbdC5IYSgiNzliYTEzYjJmNzMzM2U4ODQ2ODY1YTdkMDAiKV0oImRpdiIpLGQ9dC5IYSgiMDJjbmNuY24iKSwiLiI9PT1kWzBdJiYoZD1kW3QuSGEoIjY5YmQxNGEwZjcyNDEyOGE0NCIpXSgxKSksY1t0LkhhKCI3OWE0MTdhMGYwMTgxYTg5NDYiKV09ZCxkb2N1bWVudFt0LkhhKCI3OGE3MTJhYSIpXT8NCihkb2N1bWVudFt0LkhhKCI3OGE3MTJhYSIpXVt0LkhhKCI3YmI4MDZiNmVkMzIzODhjNGE4NzViIildKGMpLGQ9d2luZG93W3QuSGEoIjdkYWQwMjkwZWMzYjBiOTE1NzhlNWI0MDAwNzAzMWJmIildKGMpW3QuSGEoIjdkYWQwMjgzZjEzOTBiODE1MTlmNDY0NTE1NjUyOGJmIildKHQuSGEoIjc4YTcwNGI3ZTYyNDU2OTA0YzliMTI3MDFiNjUzMmE4IikpLGRvY3VtZW50W3QuSGEoIjc4YTcxMmFhIildW3QuSGEoJyI2OGFkMWJiY2Y1MzMzODhjNGE4NzViJyldKGMpLGQmJi0xIT09ZC5pbmRleE9mKHQuSGEodC5kSSkpJiYtMSE9PWQuaW5kZXhPZih0LkhhKHQuZUkpKSYmKGEuemg9ITEpKTooYS56aD1udWxsLGImJihhLnpoPSExKSkpfSRoLnByb3RvdHlwZS5FbD1mdW5jdGlvbihhKXthLlNnLnNldFRyYW5zZm9ybShhLm1nLDAsMCxhLm1nLDAsMCk7bnVsbD09PXRoaXMuemgmJmRpKHRoaXMsITApO3JldHVybiAwPHRoaXMuemgmJnRoaXMhPT10aGlzLnZIPyEwOiExfTsNCiRoLnByb3RvdHlwZS50PWZ1bmN0aW9uKCl7dGhpcy52SD1udWxsfTsNCmZ1bmN0aW9uIGFpKGEsYil7dm9pZCAwIT09YiYmbnVsbCE9PWJ8fHQubSgiRGlhZ3JhbSBzZXR1cCByZXF1aXJlcyBhbiBhcmd1bWVudCBESVYuIik7bnVsbCE9PWEuTWImJnQubSgiRGlhZ3JhbSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgc2V0dXAuIik7InN0cmluZyI9PT10eXBlb2YgYj9hLk1iPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGIpOmIgaW5zdGFuY2VvZiBIVE1MRGl2RWxlbWVudD9hLk1iPWI6dC5tKCJObyBESVYgb3IgRElWIGlkIHN1cHBsaWVkOiAiK2IpO251bGw9PT1hLk1iJiZ0Lm0oIkludmFsaWQgRElWIGlkOyBjb3VsZCBub3QgZ2V0IGVsZW1lbnQgd2l0aCBpZDogIitiKTt2b2lkIDAhPT1hLk1iLlUmJnQubSgiSW52YWxpZCBkaXYgaWQ7IGRpdiBhbHJlYWR5IGhhcyBhIERpYWdyYW0gYXNzb2NpYXRlZCB3aXRoIGl0LiIpOyJzdGF0aWMiPT09d2luZG93LmdldENvbXB1dGVkU3R5bGUoYS5NYixudWxsKS5wb3NpdGlvbiYmKGEuTWIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIik7DQphLk1iLnN0eWxlWyItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiXT0icmdiYSgyNTUsIDI1NSwgMjU1LCAwKSI7YS5NYi5zdHlsZVsiLW1zLXRvdWNoLWFjdGlvbiJdPSJub25lIjthLk1iLmlubmVySFRNTD0iIjthLk1iLlU9YTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtpZihjLmdldENvbnRleHQmJmMuZ2V0Q29udGV4dCgiMmQiKSl7Yy5pbm5lckhUTUw9IlRoaXMgdGV4dCBpcyBkaXNwbGF5ZWQgaWYgeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIENhbnZhcyBIVE1MIGVsZW1lbnQuIjt2b2lkIDAhPT1jLnN0eWxlJiYoYy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGMuc3R5bGUudG9wPSIwcHgiLGMuc3R5bGUubGVmdD0iMHB4IixjLnN0eWxlLnpJbmRleD0iMiIsYy5zdHlsZS5VSz0ibm9uZSIsYy5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PSJub25lIixjLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKTthLkViPWEuTWIuY2xpZW50V2lkdGh8fA0KMTthLkRiPWEuTWIuY2xpZW50SGVpZ2h0fHwxO2EuamI9YzthLlNnPWMuZ2V0Q29udGV4dCgiMmQiKTt2YXIgZD1hLlNnO2EubWc9YS5jb21wdXRlUGl4ZWxSYXRpbygpO2VpKGEsYS5FYixhLkRiKTthLll5PTA7YS5YeT0wO2lmKGRvY3VtZW50LmJvZHkpe3ZhciBmPWRvY3VtZW50LmJvZHkucGFyZW50Tm9kZTthLll5PWYub2Zmc2V0VG9wfHwwO2EuWHk9Zi5vZmZzZXRMZWZ0fHwwfWVsc2UgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXtpZihkb2N1bWVudC5ib2R5KXt2YXIgYj1kb2N1bWVudC5ib2R5LnBhcmVudE5vZGU7YS5ZeT1iLm9mZnNldFRvcHx8MDthLlh5PWIub2Zmc2V0TGVmdHx8MH19LCExKTtjLlU9YTthLmh5PWRbdC5IYSgiN2ViYTE3YTRjYTNiMWE4MzQ2IildW3QuSGEoIjc4YTExOGI3IildKGQsdC5FbCw0LDQpO2EuTWIuaW5zZXJ0QmVmb3JlKGMsYS5NYi5maXJzdENoaWxkKTtkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOw0KZC53aWR0aD0xO2QuaGVpZ2h0PTE7YS5LeT1kO2EuZkM9ZC5nZXRDb250ZXh0KCIyZCIpO3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Yuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjtmLnN0eWxlLm92ZXJmbG93PSJhdXRvIjtmLnN0eWxlLndpZHRoPWEuRWIrInB4IjtmLnN0eWxlLmhlaWdodD1hLkRiKyJweCI7Zi5zdHlsZS56SW5kZXg9IjEiO2cuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjtnLnN0eWxlLm92ZXJmbG93PSJhdXRvIjtnLnN0eWxlLndpZHRoPWEuRWIrInB4IjtnLnN0eWxlLmhlaWdodD1hLkRiKyJweCI7Zy5zdHlsZS56SW5kZXg9IjEiO2guc3R5bGUucG9zaXRpb249ImFic29sdXRlIjtoLnN0eWxlLndpZHRoPSIxcHgiO2guc3R5bGUuaGVpZ2h0PSIxcHgiO2suc3R5bGUucG9zaXRpb249DQoiYWJzb2x1dGUiO2suc3R5bGUud2lkdGg9IjFweCI7ay5zdHlsZS5oZWlnaHQ9IjFweCI7YS5NYi5hcHBlbmRDaGlsZChmKTthLk1iLmFwcGVuZENoaWxkKGcpO2YuYXBwZW5kQ2hpbGQoaCk7Zy5hcHBlbmRDaGlsZChrKTtmLm9uc2Nyb2xsPWEuUEM7Zi5vbm1vdXNlZG93bj1hLlFDO2YuVT1hO2YuY0Q9ITA7Zy5vbnNjcm9sbD1hLlBDO2cub25tb3VzZWRvd249YS5RQztnLlU9YTtnLmREPSEwO2EuTGo9ZjthLk1qPWc7YS5zej1oO2EudHo9azthLkdKPXQua0UoZnVuY3Rpb24oKXthLmthKCl9LDMwMCwhMSk7YS5aRz10LmtFKGZ1bmN0aW9uKCl7ZmkoYSl9LDI1MCwhMSk7YS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuITF9O2EuRHA9ZnVuY3Rpb24oYil7aWYoYS5pc0VuYWJsZWQpe2EuYW89ITA7dmFyIGM9YS5DZDt0LlRtJiZjLlV3PyhiLnByZXZlbnREZWZhdWx0KCksYi5zaW11bGF0ZWQ9ITAsYS5ucz1iKTooYS5DZD1hLmVjLGEuZWM9DQpjLGdpKGEsYSxiLGMsITApLGEuZkIoYixudWxsLGIudGFyZ2V0LlUpfHwoYS5kb01vdXNlTW92ZSgpLGEuVWEuaXNCZXlvbmREcmFnU2l6ZSgpJiYocWkoYSksYS4kbD0wKSkpfX07YS5DcD1mdW5jdGlvbihiKXtpZihhLmlzRW5hYmxlZCl7YS5hbz0hMDt2YXIgYz1hLkNkO2lmKHQuVG0mJm51bGwhPT1hLm5zKWEubnM9YixiLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBpZih0LlRtJiY0MDA+Yi50aW1lU3RhbXAtYS5hbSliLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBpZihhLkNkPWEuZWMsYS5lYz1jLGdpKGEsYSxiLGMsITApLGMuJGo9ITAsYy5BZT1iLmRldGFpbCxhLkNrPWMuY29weSgpLCEwPT09Yy5NcS5zaW11bGF0ZWQpYi5wcmV2ZW50RGVmYXVsdCgpLGIuc2ltdWxhdGVkPSEwO2Vsc2UgaWYoZSYmZS5HRiYmKHdpbmRvdy5HRj1hLmNwKGMuZWEpKSxmZj1udWxsLGEuZG9Nb3VzZURvd24oKSwxPT09Yi5idXR0b24pcmV0dXJuIGIucHJldmVudERlZmF1bHQoKSwhMX19O2EuRnA9ZnVuY3Rpb24oYil7aWYoYS5pc0VuYWJsZWQpe2EuYW89DQohMDt2YXIgYz1hLkNkO2lmKHQuVG0pe2lmKDQwMD5iLnRpbWVTdGFtcC1hLmFtKXtiLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufWEuYW09Yi50aW1lU3RhbXB9aWYodC5UbSYmbnVsbCE9PWEubnMpYS5ucz1udWxsLGIucHJldmVudERlZmF1bHQoKTtlbHNle2EuQ2Q9YS5lYzthLmVjPWM7Z2koYSxhLGIsYywhMCk7Yy5taj0hMDtjLkFlPWIuZGV0YWlsO2lmKHQuUnd8fHQudUEpYi50aW1lU3RhbXAtYS5hbTxhLnpEJiYhYS5VYS5pc0JleW9uZERyYWdTaXplKCk/YS4kbCsrOmEuJGw9MSxhLmFtPWIudGltZVN0YW1wLGMuQWU9YS4kbDtjLmJ1YmJsZXM9Yi5idWJibGVzO2IudGFyZ2V0LlUmJihjLm9oPWIudGFyZ2V0LlUpO2Euc0coYixudWxsLG5ldyB3LGMub2gpfHwoYS5kb01vdXNlVXAoKSx0ZihhKSxyaShhLGMsYikpfX19O2EuaWg9ZnVuY3Rpb24oYil7aWYoYS5pc0VuYWJsZWQpe3ZhciBjPWEuQ2Q7YS5DZD1hLmVjO2EuZWM9YztnaShhLGEsYixjLCEwKTtjLmJ1YmJsZXM9ITA7DQpjLllqPXZvaWQgMCE9PWIud2hlZWxEZWx0YT9iLndoZWVsRGVsdGE6LTQwKmIuZGV0YWlsO2EuZG9Nb3VzZVdoZWVsKCk7cmkoYSxjLGIpfX07YS5FcD1mdW5jdGlvbigpe2lmKGEuaXNFbmFibGVkKXthLmFvPSExO3ZhciBiPWEuVWE7Yi5jYW5jZWxXYWl0QWZ0ZXIoKTtiIGluc3RhbmNlb2YgSGUmJmIuaGlkZVRvb2xUaXAoKX19O2EuR0c9ZnVuY3Rpb24oYil7aWYoYS5pc0VuYWJsZWQpe2EueHo9ITE7aWYoMTxiLnRvdWNoZXMubGVuZ3RoKXthLlVhLmRvQ2FuY2VsKCk7aWYoYS52aSl7YS5Ubj0hMDthLmltPWEuc2NhbGU7dmFyIGM9YS5FYixkPWEuRGIsZj1hLmpiLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9Yi50YXJnZXRUb3VjaGVzWzBdLGg9Zy5jbGllbnRYLWMvZi53aWR0aCpmLmxlZnQsaz1nLmNsaWVudFktZC9mLmhlaWdodCpmLnRvcCxnPWIudGFyZ2V0VG91Y2hlc1sxXSxjPWcuY2xpZW50WC1jL2Yud2lkdGgqZi5sZWZ0LWgsZD1nLmNsaWVudFktZC9mLmhlaWdodCoNCmYudG9wLWssZD1NYXRoLnNxcnQoYypjK2QqZCk7YS5pRD1kO2IucHJldmVudERlZmF1bHQoKTtiLmNhbmNlbEJ1YmJsZT0hMDtyZXR1cm4hMX1xaShhKTtiLmNhbmNlbEJ1YmJsZT0hMTtyZXR1cm4hMH1kPWEuQ2Q7YS5DZD1hLmVjO2EuZWM9ZDtkLmg9YTtzaShhLGIudGFyZ2V0VG91Y2hlc1swXSxkKTtkLiRjPTA7ZC5idXR0b249MDtkLiRqPSEwO2QubWo9ITE7ZC5BZT0xO2QuWWo9MDtkLkVlPSExO2QuYnViYmxlcz0hMTtkLmV2ZW50PWI7ZC50aW1lc3RhbXA9RGF0ZS5ub3coKTtkLm9oPWIudGFyZ2V0LlU/Yi50YXJnZXQuVTpudWxsO2QuY2U9bnVsbDthLkNrPWQuY29weSgpO2ZmPW51bGw7YS5kb01vdXNlRG93bigpO3RpKGEsZCk7cmkoYSxkLGIpfX07YS5GRz1mdW5jdGlvbihiKXtpZihhLmlzRW5hYmxlZCl7aWYoMTxiLnRvdWNoZXMubGVuZ3RoKXthLlVhLmRvQ2FuY2VsKCk7cWkoYSk7aWYoYS52aSYmYS5UbiYmMTxiLnRhcmdldFRvdWNoZXMubGVuZ3RoKXt2YXIgYz1hLkViLA0KZD1hLkRiLGY9YS5qYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPWIudGFyZ2V0VG91Y2hlc1swXSxoPWcuY2xpZW50WC1jL2Yud2lkdGgqZi5sZWZ0LGs9Zy5jbGllbnRZLWQvZi5oZWlnaHQqZi50b3AsZz1iLnRhcmdldFRvdWNoZXNbMV0sYz1nLmNsaWVudFgtYy9mLndpZHRoKmYubGVmdCxnPWcuY2xpZW50WS1kL2YuaGVpZ2h0KmYudG9wLGQ9Yy1oLGY9Zy1rLGQ9TWF0aC5zcXJ0KGQqZCtmKmYpL2EuaUQsZz1uZXcgdygoTWF0aC5taW4oYyxoKStNYXRoLm1heChjLGgpKS8yLChNYXRoLm1pbihnLGspK01hdGgubWF4KGcsaykpLzIpLGg9YS5pbSpkLGs9YS5TZTtoIT09YS5zY2FsZSYmay5jYW5SZXNldFpvb20oaCkmJihjPWEuJGYsYS4kZj1nLGsucmVzZXRab29tKGgpLGEuJGY9Yyk7Yi5wcmV2ZW50RGVmYXVsdCgpO2IuY2FuY2VsQnViYmxlPSEwO3JldHVybiExfWIuY2FuY2VsQnViYmxlPSExO3JldHVybiEwfWg9YS5DZDthLkNkPWEuZWM7YS5lYz1oO2c9az1udWxsOzA8DQpiLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD9nPWIuY2hhbmdlZFRvdWNoZXNbMF06MDxiLnRhcmdldFRvdWNoZXMubGVuZ3RoJiYoZz1iLnRhcmdldFRvdWNoZXNbMF0pO2guaD1hO2c/KChrPWRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZy5jbGllbnRYLGcuY2xpZW50WSkpJiZrLlU/KGQ9ZyxjPWsuVSk6KGQ9Yi5jaGFuZ2VkVG91Y2hlc1swXSxjPWEpLHNpKGMsZCxoKSk6bnVsbCE9PWEuQ2Q/KGguZWE9YS5DZC5lYSxoLktlPWEuQ2QuS2Usaz1hLkNkLm9oKTpudWxsIT09YS5DayYmKGguZWE9YS5Day5lYSxoLktlPWEuQ2suS2Usaz1hLkNrLm9oKTtoLiRjPTA7aC5idXR0b249MDtoLiRqPSExO2gubWo9ITE7aC5BZT0xO2guWWo9MDtoLkVlPSExO2guYnViYmxlcz0hMTtoLmV2ZW50PWI7aC50aW1lc3RhbXA9RGF0ZS5ub3coKTtoLm9oPW51bGw9PT1rP2IudGFyZ2V0LlU6ay5VP2suVTpudWxsO2guY2U9bnVsbDthLlVhLmlzQmV5b25kRHJhZ1NpemUoKSYmcWkoYSk7YS5mQihnP2c6DQpiLG51bGwsaC5vaCl8fChhLmRvTW91c2VNb3ZlKCkscmkoYSxoLGIpKX19O2EuRUc9ZnVuY3Rpb24oYil7aWYoYS5pc0VuYWJsZWQpe3FpKGEpO2lmKGEueHopcmV0dXJuIGIucHJldmVudERlZmF1bHQoKSwhMTt2YXIgYz1hLkNkO2EuQ2Q9YS5lYzthLmVjPWM7aWYoMTxiLnRvdWNoZXMubGVuZ3RoKWEudmkmJihhLlRuPSExKTtlbHNle3ZhciBkPW51bGwsZj1udWxsOzA8Yi5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg/Zj1iLmNoYW5nZWRUb3VjaGVzWzBdOjA8Yi50YXJnZXRUb3VjaGVzLmxlbmd0aCYmKGY9Yi50YXJnZXRUb3VjaGVzWzBdKTtjLmg9YTtjLkFlPTE7aWYoZil7dmFyIGQ9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChmLmNsaWVudFgsZi5jbGllbnRZKSxnLGg7ZCYmZC5VPyhoPWYsZz1kLlUpOihoPWIuY2hhbmdlZFRvdWNoZXNbMF0sZz1hKTtzaShnLGgsYyk7Zz1mLnNjcmVlblg7aD1mLnNjcmVlblk7dmFyIGs9YS5DQztiLnRpbWVTdGFtcC1hLmFtPGEuekQmJiEoMjU8DQpNYXRoLmFicyhrLngtZyl8fDI1PE1hdGguYWJzKGsueS1oKSk/YS4kbCsrOmEuJGw9MTtjLkFlPWEuJGw7YS5hbT1iLnRpbWVTdGFtcDthLkNDLnAoZyxoKX1lbHNlIGQ9Yy5vaDtjLiRjPTA7Yy5idXR0b249MDtjLiRqPSExO2MubWo9ITA7Yy5Zaj0wO2MuRWU9ITE7Yy5idWJibGVzPSExO2MuZXZlbnQ9YjtjLnRpbWVzdGFtcD1EYXRlLm5vdygpO2Mub2g9bnVsbD09PWQ/Yi50YXJnZXQuVTpkLlU/ZC5VOm51bGw7Yy5jZT1udWxsO2Euc0coZj9mOmIsbnVsbCxuZXcgdyxjLm9oKXx8KGEuZG9Nb3VzZVVwKCkscmkoYSxjLGIpKX19fTtjLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLGEuR0csITEpO2MuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixhLkZHLCExKTtjLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixhLkVHLCExKTtjLmFkZEV2ZW50TGlzdGVuZXIoImdlc3R1cmVzdGFydCIsZnVuY3Rpb24oKXshMSE9PWEudmkmJihhLmltPWEuc2NhbGUsYS5VYS5kb0NhbmNlbCgpLA0KYS5rQz0wKX0sITEpO2MuYWRkRXZlbnRMaXN0ZW5lcigiZ2VzdHVyZWNoYW5nZSIsZnVuY3Rpb24oYil7aWYoITEhPT1hLnZpKXt2YXIgYz1iLnNjYWxlO2Eua0MrKztpZihhLlp5LnR3b1RvdWNoUGFuKXtpZigxPT09YS5rQylpZigxLjAyPGN8fDAuOTg+YyliLnByZXZlbnREZWZhdWx0KCk7ZWxzZXthLmltPW51bGw7cmV0dXJufX1lbHNlIGIucHJldmVudERlZmF1bHQoKTtpZihudWxsIT09YS5pbSl7dmFyIGQ9YS5FYixmPWEuRGIsZz1hLmpiLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2I9bmV3IHcoYi5wYWdlWC13aW5kb3cuc2Nyb2xsWC1kL2cud2lkdGgqZy5sZWZ0LGIucGFnZVktd2luZG93LnNjcm9sbFktZi9nLmhlaWdodCpnLnRvcCk7Yyo9YS5pbTtkPWEuU2U7YyE9PWEuc2NhbGUmJmQuY2FuUmVzZXRab29tKGMpJiYoZj1hLiRmLGEuJGY9YixkLnJlc2V0Wm9vbShjKSxhLiRmPWYpfX19LCExKTt3aW5kb3cuTVNHZXN0dXJlJiYoYS5wbz1uZXcgd2luZG93Lk1TR2VzdHVyZSwNCmEucG8udGFyZ2V0PWQsYy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsZnVuY3Rpb24oYil7YS5wby5hZGRQb2ludGVyKGIucG9pbnRlcklkKX0sITEpLGMuYWRkRXZlbnRMaXN0ZW5lcigiTVNHZXN0dXJlU3RhcnQiLGZ1bmN0aW9uKGIpeyExIT09YS52aSYmKGEuaW09YS5zY2FsZSxhLlRuPSEwLGIucHJldmVudERlZmF1bHQoKSl9LCExKSxjLmFkZEV2ZW50TGlzdGVuZXIoIk1TR2VzdHVyZUNoYW5nZSIsZnVuY3Rpb24oYil7aWYoITEhPT1hLnZpKXt2YXIgYz1iLnNjYWxlO2lmKDE9PT1jKWIuZ2VzdHVyZU9iamVjdC5zdG9wKCksYi5wcmV2ZW50RGVmYXVsdCgpO2Vsc2V7YS5UbiYmKGEuVWEuZG9DYW5jZWwoKSxhLlRuPSExKTtiPWEuSkcoYS5VbihiKSk7dmFyIGM9YS5zY2FsZSpjLGQ9YS5TZTtpZihjIT09YS5zY2FsZSYmZC5jYW5SZXNldFpvb20oYykpe3ZhciBmPWEuJGY7YS4kZj1iO2QucmVzZXRab29tKGMpO2EuJGY9Zn19fX0sITEpKTtjLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsDQphLkRwLCExKTtjLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsYS5DcCwhMSk7Yy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixhLkZwLCExKTtjLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNld2hlZWwiLGEuaWgsITEpO2MuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTW91c2VTY3JvbGwiLGEuaWgsITEpO2MuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGEuRXAsITEpO2MuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsYS5nSiwhMSk7Yy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsYS5oSiwhMSk7Yy5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiExfSwhMSk7Yy5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiExfSwhMSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYS5aRywhMSk7Yy50YWJJbmRleD0wO3VpKGEpfWVsc2UgYS5NYi5pbm5lckhUTUw9DQoiVGhpcyB0ZXh0IGlzIGRpc3BsYXllZCBpZiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgQ2FudmFzIEhUTUwgZWxlbWVudC4ifXoucHJvdG90eXBlLmNvbXB1dGVQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5TZztyZXR1cm4gTWF0aC5yb3VuZCgod2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpLyhhLndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fGEubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8YS5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fGEub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fGEuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8MSkpfTt6LnByb3RvdHlwZS5kb01vdXNlTW92ZT1mdW5jdGlvbigpe3RoaXMuVWEuZG9Nb3VzZU1vdmUoKX07ei5wcm90b3R5cGUuZG9Nb3VzZURvd249ZnVuY3Rpb24oKXt0aGlzLlVhLmRvTW91c2VEb3duKCl9O3oucHJvdG90eXBlLmRvTW91c2VVcD1mdW5jdGlvbigpe3RoaXMuVWEuZG9Nb3VzZVVwKCl9Ow0Kei5wcm90b3R5cGUuZG9Nb3VzZVdoZWVsPWZ1bmN0aW9uKCl7dGhpcy5VYS5kb01vdXNlV2hlZWwoKX07ei5wcm90b3R5cGUuZG9LZXlEb3duPWZ1bmN0aW9uKCl7dGhpcy5VYS5kb0tleURvd24oKX07ei5wcm90b3R5cGUuZG9LZXlVcD1mdW5jdGlvbigpe3RoaXMuVWEuZG9LZXlVcCgpfTtmdW5jdGlvbiBmaShhKXtpZihudWxsIT09YS5qYil7dmFyIGI9YS5NYjtpZigwIT09Yi5jbGllbnRXaWR0aCYmMCE9PWIuY2xpZW50SGVpZ2h0KXt2YXIgYz1hLlRsP2EubmY6MCxkPWEuU2w/YS5uZjowLGY9YS5tZzthLm1nPWEuY29tcHV0ZVBpeGVsUmF0aW8oKTthLm1nIT09ZiYmKGVpKGEsYS5FYixhLkRiKSx1aShhKSxhLnRlKCkpO2lmKGIuY2xpZW50V2lkdGghPT1hLkViK2N8fGIuY2xpZW50SGVpZ2h0IT09YS5EYitkKWEud2o9ITAsYS52ZT0hMCxiPWEuamMsbnVsbCE9PWImJmIucnQmJmIuSigpLGEuemR8fGEudGUoKX19fQ0Kei5wcm90b3R5cGUuZm9jdXM9ei5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLmpiJiZ0aGlzLmpiLmZvY3VzKCl9O2Z1bmN0aW9uIHVpKGEsYixjKXt2b2lkIDA9PT1iJiYoYj1hLlNnKTt2b2lkIDA9PT1jJiYoYz0hMCk7YyYmKGIuY3U9IiIpO2Iuc249IiI7Yi5ybj0iIn1mdW5jdGlvbiBZaChhKXt2YXIgYj1uZXcgJGQ7Yi5uYW1lPSJCYWNrZ3JvdW5kIjthLkpzKGIpO2I9bmV3ICRkO2IubmFtZT0iIjthLkpzKGIpO2I9bmV3ICRkO2IubmFtZT0iRm9yZWdyb3VuZCI7YS5KcyhiKTtiPW5ldyAkZDtiLm5hbWU9IkFkb3JubWVudCI7Yi55Yz0hMDthLkpzKGIpO2I9bmV3ICRkO2IubmFtZT0iVG9vbCI7Yi55Yz0hMDtiLnFBPSEwO2EuSnMoYik7Yj1uZXcgJGQ7Yi5uYW1lPSJHcmlkIjtiLlBlPSExO2IuQmY9ITE7Yi55Yz0hMDthLkVIKGIsYS5idCgiQmFja2dyb3VuZCIpKX0NCmZ1bmN0aW9uIHZpKGEpe2EuZ2Q9bmV3IHkod2kpO2EuZ2QubmFtZT0iR1JJRCI7dmFyIGI9bmV3IFc7Yi56Yj0iTGluZUgiO2Iuc3Ryb2tlPSJsaWdodGdyYXkiO2IuZmI9MC41O2IuaW50ZXJ2YWw9MTthLmdkLmFkZChiKTtiPW5ldyBXO2IuemI9IkxpbmVIIjtiLnN0cm9rZT0iZ3JheSI7Yi5mYj0wLjU7Yi5pbnRlcnZhbD01O2EuZ2QuYWRkKGIpO2I9bmV3IFc7Yi56Yj0iTGluZUgiO2Iuc3Ryb2tlPSJncmF5IjtiLmZiPTE7Yi5pbnRlcnZhbD0xMDthLmdkLmFkZChiKTtiPW5ldyBXO2IuemI9IkxpbmVWIjtiLnN0cm9rZT0ibGlnaHRncmF5IjtiLmZiPTAuNTtiLmludGVydmFsPTE7YS5nZC5hZGQoYik7Yj1uZXcgVztiLnpiPSJMaW5lViI7Yi5zdHJva2U9ImdyYXkiO2IuZmI9MC41O2IuaW50ZXJ2YWw9NTthLmdkLmFkZChiKTtiPW5ldyBXO2IuemI9IkxpbmVWIjtiLnN0cm9rZT0iZ3JheSI7Yi5mYj0xO2IuaW50ZXJ2YWw9MTA7YS5nZC5hZGQoYik7Yj1uZXcgRTtiLmFkZChhLmdkKTsNCmIuYWY9IkdyaWQiO2IudkE9ITE7Yi5wQT0hMTtiLkJmPSExO2IuYXg9IkdSSUQiO2EuYWRkKGIpO2EuRmIucmVtb3ZlKGIpO2EuZ2QudmlzaWJsZT0hMX0NCnoucHJvdG90eXBlLlBDPWZ1bmN0aW9uKCl7aWYodGhpcy5VLmlzRW5hYmxlZCl7dmFyIGE9dGhpcy5VO2lmKGEucnomJm51bGwhPT1hLmpiKXthLkN2PSEwO3ZhciBiPWEuRWQsYz1hLnhiLGQ9Yi53aWR0aCxmPWMud2lkdGgsZz1iLmhlaWdodCxoPWMuaGVpZ2h0LGs9Yi5yaWdodCxsPWMucmlnaHQsbT1iLmJvdHRvbSxuPWMuYm90dG9tLHA9Yi54LHE9Yy54LGI9Yi55LGM9Yy55LHI9YS5zY2FsZTtpZihmPGR8fGg8Zyl7dmFyIHM9dC5LKCk7dGhpcy5jRCYmYS5vZj8ocy5wKHRoaXMuc2Nyb2xsTGVmdC9yK3AsYS5wb3NpdGlvbi55KSxhLnBvc2l0aW9uPXMpOnRoaXMuZEQmJmEucGYmJihzLnAoYS5wb3NpdGlvbi54LHRoaXMuc2Nyb2xsVG9wL3IrYiksYS5wb3NpdGlvbj1zKTt0LkIocyk7YS5Ddj0hMTthLndqPSExfWVsc2Ugcz10LksoKSx0aGlzLmNEJiZhLm9mJiYocDxxJiYoYS5wb3NpdGlvbj1uZXcgdyh0aGlzLnNjcm9sbExlZnQrcCxhLnBvc2l0aW9uLnkpKSxrPmwmJihhLnBvc2l0aW9uPQ0KbmV3IHcoLShhLkxqLnNjcm9sbFdpZHRoLWEuRWIpK3RoaXMuc2Nyb2xsTGVmdC1hLkViL3IrYS5FZC5yaWdodCxhLnBvc2l0aW9uLnkpKSksdGhpcy5kRCYmYS5wZiYmKGI8YyYmKGEucG9zaXRpb249bmV3IHcoYS5wb3NpdGlvbi54LHRoaXMuc2Nyb2xsVG9wK2IpKSxtPm4mJihhLnBvc2l0aW9uPW5ldyB3KGEucG9zaXRpb24ueCwtKGEuTWouc2Nyb2xsSGVpZ2h0LWEuRGIpK3RoaXMuc2Nyb2xsVG9wLWEuRGIvcithLkVkLmJvdHRvbSkpKSx0LkIocykseGkoYSksYS5Ddj0hMSxhLndqPSExLGI9YS5FZCxjPWEueGIsaz1iLnJpZ2h0LGw9Yy5yaWdodCxtPWIuYm90dG9tLG49Yy5ib3R0b20scD1iLngscT1jLngsYj1iLnksYz1jLnksZj49ZCYmcD49cSYmazw9bCYmKGEuc3ouc3R5bGUud2lkdGg9IjFweCIpLGg+PWcmJmI+PWMmJm08PW4mJihhLnR6LnN0eWxlLmhlaWdodD0iMXB4Iil9fWVsc2UgeWkodGhpcy5VKX07DQp6LnByb3RvdHlwZS5RQz1mdW5jdGlvbigpe3RoaXMuVS5pc0VuYWJsZWQ/dGhpcy5VLnJ6PSEwOnlpKHRoaXMuVSl9O3oucHJvdG90eXBlLmNvbXB1dGVCb3VuZHM9ei5wcm90b3R5cGUucWY9ZnVuY3Rpb24oKXswPHRoaXMuZmcuY291bnQmJnppKHRoaXMpO3JldHVybiBBaSh0aGlzKX07ZnVuY3Rpb24gQWkoYSl7aWYoYS5mQS5OKCkpe3ZhciBiPWEuZkEuY29weSgpO2IuYXcoYS5wYWRkaW5nKTtyZXR1cm4gYn1mb3IodmFyIGM9ITAsZD1hLlNiLm4sZj1kLmxlbmd0aCxnPTA7ZzxmO2crKyl7dmFyIGg9ZFtnXTtpZihoLnZpc2libGUmJighaC55Y3x8aC5xQSkpZm9yKHZhciBoPWguRmIubixrPWgubGVuZ3RoLGw9MDtsPGs7bCsrKXt2YXIgbT1oW2xdO20udkEmJm0uUWEoKSYmKG09bS5wYSxtLk4oKSYmKGM/KGM9ITEsYj1tLmNvcHkoKSk6Yi5saihtKSkpfX1jJiYoYj1uZXcgeCgwLDAsMCwwKSk7Yi5hdyhhLnBhZGRpbmcpO3JldHVybiBifQ0Kei5wcm90b3R5cGUuY29tcHV0ZVBhcnRzQm91bmRzPWZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7Zm9yKGE9YS5rO2EubmV4dCgpOyl7dmFyIGM9YS52YWx1ZTtjIGluc3RhbmNlb2YgVnx8KGMuc2YoKSxudWxsPT09Yj9iPWMucGEuY29weSgpOmIubGooYy5wYSkpfXJldHVybiBudWxsPT09Yj9uZXcgeChOYU4sTmFOLDAsMCk6Yn07DQpmdW5jdGlvbiBCaShhLGIpe2lmKCFhLlpiLnlnJiYodm9pZCAwPT09YiYmKGI9ITEpLChifHxhLmxmKSYmIWEuWGImJmEuRWQuTigpJiZudWxsIT09YS5qYikpe2EuWGI9ITA7dmFyIGM9YS5GbDtiJiZhLkdrIT09WGUmJihjPWEuR2spO3ZhciBkPWMhPT1YZT9DaShhLGMpOmEuc2NhbGUsYz1hLnhiLmNvcHkoKSxmPWEuRWIvZCxnPWEuRGIvZCxoPW51bGwsaz1hLlpiO2suc2QmJihoPWEuTWEuY29weSgpKTthLnBvc2l0aW9uLkxhKCk7dmFyIGw9YS5BbjtiJiZhLlhuLnZkKCkmJihsPWEuWG4pO0RpKGEsYS5NYSxhLkVkLGYsZyxsKTthLnBvc2l0aW9uLmZyZWV6ZSgpO251bGwhPT1oJiZPaChrLGgsYS5NYSk7YS5zY2FsZT1kO2EuWGI9ITE7ZD1hLnhiO2QudGYoYyl8fGEuRHQoYyxkKX19DQpmdW5jdGlvbiBDaShhLGIpe2lmKG51bGwhPT1hLmpiKXthLndpJiZFaShhLGEucWYoKSk7dmFyIGM9YS5TZS5YcyxkPWEuRWQ7aWYoIWQuTigpKXJldHVybiBjO3ZhciBmPWQud2lkdGgsZD1kLmhlaWdodCxnPWEuRWIsaD1hLkRiLGs9Zy9mLGw9aC9kO3JldHVybiBiPT09Rmk/KGY9TWF0aC5taW4obCxrKSxmPmMmJihmPWMpLGY8YS5DZyYmKGY9YS5DZyksZj5hLkJnJiYoZj1hLkJnKSxmKTpiPT09R2k/KGY9bD5rPyhoLWEubmYpL2Q6KGctYS5uZikvZixmPmMmJihmPWMpLGY8YS5DZyYmKGY9YS5DZyksZj5hLkJnJiYoZj1hLkJnKSxmKTphLnNjYWxlfX16LnByb3RvdHlwZS56b29tVG9GaXQ9ei5wcm90b3R5cGUuem9vbVRvRml0PWZ1bmN0aW9uKCl7dGhpcy5zY2FsZT1DaSh0aGlzLEZpKX07DQp6LnByb3RvdHlwZS56b29tVG9SZWN0PWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9RmkpO3ZhciBjPWEud2lkdGgsZD1hLmhlaWdodDtpZighKDA9PT1jfHwwPT09ZHx8aXNOYU4oYykmJmlzTmFOKGQpKSl7dmFyIGY9MTtpZihiPT09Rml8fGI9PT1HaSlpZihpc05hTihjKSlmPXRoaXMueGIuaGVpZ2h0KnRoaXMuc2NhbGUvZDtlbHNlIGlmKGlzTmFOKGQpKWY9dGhpcy54Yi53aWR0aCp0aGlzLnNjYWxlL2M7ZWxzZSB2YXIgZj10aGlzLkViLGc9dGhpcy5EYixmPWI9PT1HaT9nL2Q+Zi9jPyhnLSh0aGlzLlNsP3RoaXMubmY6MCkpL2Q6KGYtKHRoaXMuVGw/dGhpcy5uZjowKSkvYzpNYXRoLm1pbihnL2QsZi9jKTt0aGlzLnNjYWxlPWY7dGhpcy5wb3NpdGlvbj1uZXcgdyhhLngsYS55KX19Ow0Kei5wcm90b3R5cGUuYWxpZ25Eb2N1bWVudD1mdW5jdGlvbihhLGIpe3RoaXMud2kmJkVpKHRoaXMsdGhpcy5xZigpKTt2YXIgYz10aGlzLkVkLGQ9dGhpcy54YixmPXRoaXMuWGI7dGhpcy5YYj0hMDt0aGlzLnBvc2l0aW9uPW5ldyB3KGMueCsoYS54KmMud2lkdGgrYS5vZmZzZXRYKS0oYi54KmQud2lkdGgtYi5vZmZzZXRYKSxjLnkrKGEueSpjLmhlaWdodCthLm9mZnNldFkpLShiLnkqZC5oZWlnaHQtYi5vZmZzZXRZKSk7dGhpcy5YYj1mO3RoaXMua2EoKX07DQpmdW5jdGlvbiBEaShhLGIsYyxkLGYsZyl7dmFyIGg7aD1iLng7dmFyIGs9Yi55O2cudmQoKSYmKGQ+Yy53aWR0aCYmKGg9Yy54KyhnLngqYy53aWR0aCtnLm9mZnNldFgpLShnLngqZC1nLm9mZnNldFgpKSxmPmMuaGVpZ2h0JiYoaz1jLnkrKGcueSpjLmhlaWdodCtnLm9mZnNldFkpLShnLnkqZi1nLm9mZnNldFkpKSk7ZDxjLndpZHRoPyhoPU1hdGgubWluKGgrZC8yLGMucmlnaHQtZC8yKSxoPU1hdGgubWF4KGgsYy5sZWZ0K2QvMiksaC09ZC8yKTpoPmMubGVmdD9oPWMubGVmdDpoPGMucmlnaHQtZCYmKGg9Yy5yaWdodC1kKTtmPGMuaGVpZ2h0PyhkPU1hdGgubWluKGsrZi8yLGMuYm90dG9tLWYvMiksZD1NYXRoLm1heChkLGMudG9wK2YvMiksaz1kLWYvMik6az5jLnRvcD9rPWMudG9wOms8Yy5ib3R0b20tZiYmKGs9Yy5ib3R0b20tZik7Yi54PWlzRmluaXRlKGgpP2g6LWEucGFkZGluZy5sZWZ0O2IueT1pc0Zpbml0ZShrKT9rOi1hLnBhZGRpbmcudG9wfQ0Kei5wcm90b3R5cGUuZmluZFBhcnRBdD16LnByb3RvdHlwZS5kdD1mdW5jdGlvbihhLGIpe3ZhciBjPWI/VGYodGhpcyxhLGZ1bmN0aW9uKGEpe3JldHVybiBhLlN9LGZ1bmN0aW9uKGEpe3JldHVybiBhLmNhblNlbGVjdCgpfSk6VGYodGhpcyxhLGZ1bmN0aW9uKGEpe3JldHVybiBhLlN9KTtyZXR1cm4gYyBpbnN0YW5jZW9mIEU/YzpudWxsfTt6LnByb3RvdHlwZS5maW5kT2JqZWN0QXQ9ei5wcm90b3R5cGUucGU9ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWImJihiPW51bGwpO3ZvaWQgMD09PWMmJihjPW51bGwpO3ZhciBkPXRoaXMuU2IuV207Zm9yKHppKHRoaXMpO2QubmV4dCgpOyl7dmFyIGY9ZC52YWx1ZTtpZihmLnZpc2libGUmJihmPWYucGUoYSxiLGMpLG51bGwhPT1mKSlyZXR1cm4gZn1yZXR1cm4gbnVsbH07DQpmdW5jdGlvbiBUZihhLGIsYyxkKXt2b2lkIDA9PT1jJiYoYz1udWxsKTt2b2lkIDA9PT1kJiYoZD1udWxsKTt2YXIgZj1hLlNiLldtO2Zvcih6aShhKTtmLm5leHQoKTspaWYoYT1mLnZhbHVlLGEudmlzaWJsZSYmIWEueWMmJihhPWEucGUoYixjLGQpLG51bGwhPT1hKSlyZXR1cm4gYTtyZXR1cm4gbnVsbH16LnByb3RvdHlwZS5maW5kT2JqZWN0c0F0PXoucHJvdG90eXBlLmNwPWZ1bmN0aW9uKGEsYixjLGQpe3ZvaWQgMD09PWImJihiPW51bGwpO3ZvaWQgMD09PWMmJihjPW51bGwpO2QgaW5zdGFuY2VvZiBCfHxkIGluc3RhbmNlb2YgQ3x8KGQ9bmV3IEMoUSkpO3ppKHRoaXMpO2Zvcih2YXIgZj10aGlzLlNiLldtO2YubmV4dCgpOyl7dmFyIGc9Zi52YWx1ZTtnLnZpc2libGUmJmcuY3AoYSxiLGMsZCl9cmV0dXJuIGR9Ow0Kei5wcm90b3R5cGUuZmluZE9iamVjdHNJbj16LnByb3RvdHlwZS5haz1mdW5jdGlvbihhLGIsYyxkLGYpe3ZvaWQgMD09PWImJihiPW51bGwpO3ZvaWQgMD09PWMmJihjPW51bGwpO3ZvaWQgMD09PWQmJihkPSExKTtmIGluc3RhbmNlb2YgQnx8ZiBpbnN0YW5jZW9mIEN8fChmPW5ldyBDKFEpKTt6aSh0aGlzKTtmb3IodmFyIGc9dGhpcy5TYi5XbTtnLm5leHQoKTspe3ZhciBoPWcudmFsdWU7aC52aXNpYmxlJiZoLmFrKGEsYixjLGQsZil9cmV0dXJuIGZ9O3oucHJvdG90eXBlLmRBPWZ1bmN0aW9uKGEsYixjLGQsZixnKXt2YXIgaD1uZXcgQyhRKTt6aSh0aGlzKTtmb3IodmFyIGs9dGhpcy5TYi5XbTtrLm5leHQoKTspe3ZhciBsPWsudmFsdWU7bC52aXNpYmxlJiZsLmRBKGEsYixjLGQsaCxmLGcpfXJldHVybiBofTsNCnoucHJvdG90eXBlLmZpbmRPYmplY3RzTmVhcj16LnByb3RvdHlwZS5QbT1mdW5jdGlvbihhLGIsYyxkLGYsZyl7dm9pZCAwPT09YyYmKGM9bnVsbCk7dm9pZCAwPT09ZCYmKGQ9bnVsbCk7dm9pZCAwPT09ZiYmKGY9ITApO2lmKCExIT09ZiYmITAhPT1mKXtpZihmIGluc3RhbmNlb2YgQnx8ZiBpbnN0YW5jZW9mIEMpZz1mO2Y9ITB9ZyBpbnN0YW5jZW9mIEJ8fGcgaW5zdGFuY2VvZiBDfHwoZz1uZXcgQyhRKSk7emkodGhpcyk7Zm9yKHZhciBoPXRoaXMuU2IuV207aC5uZXh0KCk7KXt2YXIgaz1oLnZhbHVlO2sudmlzaWJsZSYmay5QbShhLGIsYyxkLGYsZyl9cmV0dXJuIGd9O2Z1bmN0aW9uIHFpKGEpey0xIT09YS5PdiYmKGNsZWFyVGltZW91dChhLk92KSxhLk92PS0xKX1mdW5jdGlvbiB0aShhLGIpe3ZhciBjPWIuY29weSgpO2EuT3Y9c2V0VGltZW91dChmdW5jdGlvbigpe2MuYnV0dG9uPTI7YS5SPWM7YS54ej0hMDthLmRvTW91c2VVcCgpfSw4NTApfQ0Kei5wcm90b3R5cGUuYWNjZXB0RXZlbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5DZDt0aGlzLkNkPXRoaXMuZWM7dGhpcy5lYz1iO2dpKHRoaXMsdGhpcyxhLGIsYSBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpO3JldHVybiBifTtmdW5jdGlvbiBnaShhLGIsYyxkLGYpe2QuaD1iO2Y/c2koYSxjLGQpOihkLktlPWIuZWMuS2UsZC5lYT1iLmVjLmVhKTthPTA7Yy5jdHJsS2V5JiYoYSs9MSk7Yy5hbHRLZXkmJihhKz0yKTtjLnNoaWZ0S2V5JiYoYSs9NCk7Yy5tZXRhS2V5JiYoYSs9OCk7ZC4kYz1hO2QuYnV0dG9uPWMuYnV0dG9uO3QuVW0mJjA9PT1jLmJ1dHRvbiYmYy5jdHJsS2V5JiYoZC5idXR0b249Mik7ZC4kaj0hMTtkLm1qPSExO2QuQWU9MTtkLllqPTA7ZC5FZT0hMTtkLmJ1YmJsZXM9ITE7ZC5ldmVudD1jO2QudGltZXN0YW1wPURhdGUubm93KCk7ZC5vaD1jLnRhcmdldC5VP2MudGFyZ2V0LlU6bnVsbDtkLmNlPW51bGx9DQpmdW5jdGlvbiByaShhLGIsYyl7aWYoYi5idWJibGVzKXJldHVybiBlJiZlLlJFJiZ0LnRyYWNlKCJOT1QgaGFuZGxlZCAiK2MudHlwZSsiICIrYi50b1N0cmluZygpKSwhMDtlJiZlLlJFJiZ0LnRyYWNlKCJoYW5kbGVkICIrYy50eXBlKyIgIithLlVhLm5hbWUrIiAiK2IudG9TdHJpbmcoKSk7dm9pZCAwIT09Yy5zdG9wUHJvcGFnYXRpb24mJmMuc3RvcFByb3BhZ2F0aW9uKCk7KHZvaWQgMD09PWMudG91Y2hlc3x8Mj5jLnRvdWNoZXMubGVuZ3RoKSYmYy5wcmV2ZW50RGVmYXVsdCgpO2MuY2FuY2VsQnViYmxlPSEwO3JldHVybiExfQ0Kei5wcm90b3R5cGUuZ0o9ZnVuY3Rpb24oYSl7aWYodGhpcy5VLmlzRW5hYmxlZCl7dmFyIGI9dGhpcy5VLmVjO2dpKHRoaXMuVSx0aGlzLlUsYSxiLCExKTtiLmtleT1TdHJpbmcuZnJvbUNoYXJDb2RlKGEud2hpY2gpO2IuJGo9ITA7c3dpdGNoKGEud2hpY2gpe2Nhc2UgMzM6Yi5rZXk9IlBhZ2VVcCI7YnJlYWs7Y2FzZSAzNDpiLmtleT0iUGFnZURvd24iO2JyZWFrO2Nhc2UgMzU6Yi5rZXk9IkVuZCI7YnJlYWs7Y2FzZSAzNjpiLmtleT0iSG9tZSI7YnJlYWs7Y2FzZSAzNzpiLmtleT0iTGVmdCI7YnJlYWs7Y2FzZSAzODpiLmtleT0iVXAiO2JyZWFrO2Nhc2UgMzk6Yi5rZXk9IlJpZ2h0IjticmVhaztjYXNlIDQwOmIua2V5PSJEb3duIjticmVhaztjYXNlIDQ1OmIua2V5PSJJbnNlcnQiO2JyZWFrO2Nhc2UgNDY6Yi5rZXk9IkRlbCI7YnJlYWs7Y2FzZSA0ODpiLmtleT0iMCI7YnJlYWs7Y2FzZSAxODc6Y2FzZSA2MTpjYXNlIDEwNzpiLmtleT0iQWRkIjticmVhaztjYXNlIDE4OTpjYXNlIDE3MzpjYXNlIDEwOTpiLmtleT0NCiJTdWJ0cmFjdCI7YnJlYWs7Y2FzZSAyNzpiLmtleT0iRXNjIn10aGlzLlUuZG9LZXlEb3duKCk7cmV0dXJuIDE4NyE9PWEud2hpY2gmJjE4OSE9PWEud2hpY2gmJjQ4IT09YS53aGljaCYmMTA3IT09YS53aGljaCYmMTA5IT09YS53aGljaCYmNjEhPT1hLndoaWNoJiYxNzMhPT1hLndoaWNofHwhMCE9PWEuY3RybEtleT9yaSh0aGlzLlUsYixhKTooYS5jYW5jZWxCdWJibGU9ITAsYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksITEpfX07DQp6LnByb3RvdHlwZS5oSj1mdW5jdGlvbihhKXtpZih0aGlzLlUuaXNFbmFibGVkKXt2YXIgYj10aGlzLlUuZWM7Z2kodGhpcy5VLHRoaXMuVSxhLGIsITEpO2Iua2V5PVN0cmluZy5mcm9tQ2hhckNvZGUoYS53aGljaCk7Yi5taj0hMDtzd2l0Y2goYS53aGljaCl7Y2FzZSAzMzpiLmtleT0iUGFnZVVwIjticmVhaztjYXNlIDM0OmIua2V5PSJQYWdlRG93biI7YnJlYWs7Y2FzZSAzNTpiLmtleT0iRW5kIjticmVhaztjYXNlIDM2OmIua2V5PSJIb21lIjticmVhaztjYXNlIDM3OmIua2V5PSJMZWZ0IjticmVhaztjYXNlIDM4OmIua2V5PSJVcCI7YnJlYWs7Y2FzZSAzOTpiLmtleT0iUmlnaHQiO2JyZWFrO2Nhc2UgNDA6Yi5rZXk9IkRvd24iO2JyZWFrO2Nhc2UgNDU6Yi5rZXk9Ikluc2VydCI7YnJlYWs7Y2FzZSA0NjpiLmtleT0iRGVsIn10aGlzLlUuZG9LZXlVcCgpO3JldHVybiByaSh0aGlzLlUsYixhKX19Ow0Kei5wcm90b3R5cGUuVW49ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5qYjtpZihudWxsPT09YilyZXR1cm4gbmV3IHcoMCwwKTt2YXIgYz10aGlzLkViLGQ9dGhpcy5EYixiPWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz1hLmNsaWVudFgtYy9iLndpZHRoKmIubGVmdDthPWEuY2xpZW50WS1kL2IuaGVpZ2h0KmIudG9wO3JldHVybiBudWxsIT09dGhpcy5tZD8oYT1uZXcgdyhjLGEpLFFhKGEsdGhpcy5tZCksYSk6bmV3IHcoYyxhKX07ZnVuY3Rpb24gc2koYSxiLGMpe3ZhciBkPWEuamIsZj1hLkViLGc9YS5EYixoPTAsaz0wO251bGwhPT1kJiYoZD1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9Yi5jbGllbnRYLWYvZC53aWR0aCpkLmxlZnQsaz1iLmNsaWVudFktZy9kLmhlaWdodCpkLnRvcCk7Yy5LZS5wKGgsayk7bnVsbCE9PWEubWQ/KGI9dC5sYyhoLGspLGEubWQuYmkoYiksYy5lYS5hc3NpZ24oYiksdC5CKGIpKTpjLmVhLnAoaCxrKX0NCnoucHJvdG90eXBlLmludmFsaWRhdGVEb2N1bWVudEJvdW5kcz16LnByb3RvdHlwZS5PYz1mdW5jdGlvbigpe3RoaXMud2l8fCh0aGlzLndpPSEwLHRoaXMudGUoKSl9O2Z1bmN0aW9uIEhpKGEpe2EuemR8fHppKGEpO2Eud2kmJkVpKGEsYS5xZigpKTtCaShhKTtmb3IoYT1hLmptLms7YS5uZXh0KCk7KUhpKGEudmFsdWUpfXoucHJvdG90eXBlLnJlZHJhdz16LnByb3RvdHlwZS5UQT1mdW5jdGlvbigpe3RoaXMuWGJ8fHRoaXMuemR8fCh0aGlzLmthKCksSWkodGhpcykseGkodGhpcyksdGhpcy5PYygpLHRoaXMuVWYoKSl9O3oucHJvdG90eXBlLmlzVXBkYXRlUmVxdWVzdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTmZ9O3oucHJvdG90eXBlLmRlbGF5SW5pdGlhbGl6YXRpb249ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5aYixjPWIuaXNFbmFibGVkO2IuaXNFbmFibGVkPSExO0poKHRoaXMpO3RoaXMubGY9ITE7Yi5pc0VuYWJsZWQ9YzthJiZzZXRUaW1lb3V0KGEsMSl9Ow0Kei5wcm90b3R5cGUucmVxdWVzdFVwZGF0ZT16LnByb3RvdHlwZS50ZT1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT0hMSk7aWYoITAhPT10aGlzLk5mJiYhKHRoaXMuWGJ8fCExPT09YSYmdGhpcy56ZCkpe3RoaXMuTmY9ITA7dmFyIGI9dGhpcztyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtiLk5mJiZiLlVmKCl9KX19O3oucHJvdG90eXBlLm1heWJlVXBkYXRlPXoucHJvdG90eXBlLlVmPWZ1bmN0aW9uKCl7aWYoIXRoaXMuUW58fHRoaXMuTmYpdGhpcy5RbiYmKHRoaXMuUW49ITEpLEpoKHRoaXMpfTsNCmZ1bmN0aW9uIEpoKGEpe2lmKCFhLnpkJiYoYS5OZj0hMSxudWxsIT09YS5NYikpe2EuemQ9ITA7dmFyIGI9YS5saSxjPSExLGQ9ITE7Yi55Zz8oZD0hMCxjPWEuV2EsYS5XYT0hMCk6Yi5zZHx8ZmkoYSk7YS5YYnx8Yi55Z3x8IWEud2p8fHlpKGEpfHx5aShhKTtudWxsIT09YS5nZCYmKGEuZ2QudmlzaWJsZSYmIWEuSnUmJihKaShhKSxhLkp1PSEwKSwhYS5nZC52aXNpYmxlJiZhLkp1JiYoYS5KdT0hMSkpO3ppKGEpOzAhPT1hLlBsLmNvdW50JiYoS2koYSksemkoYSkpO3ZhciBmPSExO2lmKCFhLmxmfHxhLmx1KWEubGY/TGkoYSwhYS5DdSk6KGEuc2MoIkluaXRpYWwgTGF5b3V0IiksITE9PT1iLmlzRW5hYmxlZCYmYi5tbigpLExpKGEsITEpKSxmPSEwO2EuQ3U9ITE7emkoYSk7YS55b3x8Yi55Z3x8SGkoYSk7aWYoZil7aWYoIWEubGYpe3ZhciBnPWEuU2IubjthLkRmKGcsZy5sZW5ndGgsYSk7TWkoYSk7SmkoYSl9YS5CYSgiTGF5b3V0Q29tcGxldGVkIil9emkoYSk7YS5YYnx8Yi55Z3x8DQohYS53anx8eWkoYSl8fCh5aShhKSx6aShhKSk7ZiYmIWEubGYmJihhLmxmPSEwLGEuQ2UoIkluaXRpYWwgTGF5b3V0IiksYS5XYXx8YS5qYS5jbGVhcigpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXthLmhoPSExfSwxKSk7YS5VZSgpO2QmJihhLldhPWMpO2EuemQ9ITF9fQ0KZnVuY3Rpb24gTWkoYSl7aWYoYS5HayE9PVhlKWEuc2NhbGU9Q2koYSxhLkdrKTtlbHNlIGlmKGEuRmwhPT1YZSlhLnNjYWxlPUNpKGEsYS5GbCk7ZWxzZXt2YXIgYj1hLllFO2lzRmluaXRlKGIpJiYwPGImJihhLnNjYWxlPWIpfWEud2kmJkVpKGEsYS5xZigpKTtiPWEuWEU7aWYoYi5OKCkpYS5wb3NpdGlvbj1iO2Vsc2V7Yj10LksoKTtiLk90KGEuRWQsYS5XRSk7dmFyIGM9YS54YixjPXQuaGsoMCwwLGMud2lkdGgsYy5oZWlnaHQpLGQ9dC5LKCk7ZC5PdChjLGEuWkUpO2EucG9zaXRpb249bmV3IHcoYi54LWQueCxiLnktZC55KTt0LmhjKGMpO3QuQihkKTt0LkIoYik7QmkoYSwhMCl9YS5CYSgiSW5pdGlhbExheW91dENvbXBsZXRlZCIpfQ0KZnVuY3Rpb24gemkoYSl7aWYoKGEuemR8fCFhLlpiLnlnKSYmMCE9PWEuZmcuY291bnQpZm9yKHZhciBiPTA7MjM+YjtiKyspe3ZhciBjPWEuZmcuaztpZihudWxsPT09Y3x8MD09PWEuZmcuY291bnQpYnJlYWs7YS5mZz1uZXcgQyhRKTt2YXIgZD1hLGY9YS5mZztmb3IoYy5yZXNldCgpO2MubmV4dCgpOyl7dmFyIGc9Yy52YWx1ZTshZy5MZCgpfHxnIGluc3RhbmNlb2YgVHx8KGcubmwoKT8oaGgoZyxJbmZpbml0eSxJbmZpbml0eSksZy5MYygpKTpmLmFkZChnKSl9Zm9yKGMucmVzZXQoKTtjLm5leHQoKTspZz1jLnZhbHVlLGcgaW5zdGFuY2VvZiBUJiZOaShkLGcpO2ZvcihjLnJlc2V0KCk7Yy5uZXh0KCk7KWQ9Yy52YWx1ZSxkIGluc3RhbmNlb2YgViYmKGQubmwoKT8oaGgoZCxJbmZpbml0eSxJbmZpbml0eSksZC5MYygpLGQuYngoKSk6Zi5hZGQoZCkpO2ZvcihjLnJlc2V0KCk7Yy5uZXh0KCk7KWQ9Yy52YWx1ZSxkIGluc3RhbmNlb2YgSmUmJihkLm5sKCk/KGhoKGQsSW5maW5pdHksDQpJbmZpbml0eSksZC5MYygpKTpmLmFkZChkKSl9fWZ1bmN0aW9uIE5pKGEsYil7Zm9yKHZhciBjPWIuUmMsZD10LkNiKCk7Yy5uZXh0KCk7KXt2YXIgZj1jLnZhbHVlO2YuUWEoKSYmKGYgaW5zdGFuY2VvZiBUPyhPaShmKXx8UGkoZil8fFFpKGYpKSYmTmkoYSxmKTpmIGluc3RhbmNlb2YgVj9kLnB1c2goZik6KGhoKGYsSW5maW5pdHksSW5maW5pdHkpLGYuTGMoKSkpfWM9ZC5sZW5ndGg7Zm9yKGY9MDtmPGM7ZisrKXt2YXIgZz1kW2ZdO2hoKGcsSW5maW5pdHksSW5maW5pdHkpO2cuTGMoKX10LnlhKGQpO2hoKGIsSW5maW5pdHksSW5maW5pdHkpO2IuTGMoKX16LnByb3RvdHlwZS5EZj1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZj10aGlzLmxpO2lmKHRoaXMuSGt8fGYueWcpZm9yKGY9MDtmPGI7ZisrKWFbZl0uRGYoYyxkKX07DQp6LnByb3RvdHlwZS5VZT1mdW5jdGlvbihhLGIpe251bGw9PT10aGlzLk1iJiZ0Lm0oIk5vIGRpdiBzcGVjaWZpZWQiKTt2YXIgYz10aGlzLmpiO251bGw9PT1jJiZ0Lm0oIk5vIGNhbnZhcyBzcGVjaWZpZWQiKTtpZih0aGlzLmxpLnNkKTA9PT10aGlzLmphLkplJiZ0aGlzLnRlKCEwKTtlbHNle2F8fChhPXRoaXMuU2cpO3ZhciBkPWEhPT10aGlzLlNnLGY9dGhpcy5TYi5uLGc9Zi5sZW5ndGgsaD10aGlzO3RoaXMuRGYoZixnLGgpO2lmKGQpdWkodGhpcyxhKSx4aSh0aGlzKTtlbHNlIGlmKCF0aGlzLnZlJiZ2b2lkIDA9PT1iKXJldHVybjt2YXIgaz10aGlzLk1hLGc9dGhpcy53YyxsPU1hdGgucm91bmQoay54KmcpL2csbT1NYXRoLnJvdW5kKGsueSpnKS9nLG49dGhpcy5tZDtuLnJlc2V0KCk7MSE9PWcmJm4uc2NhbGUoZyk7MD09PWsueCYmMD09PWsueXx8bi50cmFuc2xhdGUoLWwsLW0pO3ZhciBwPXRoaXMudWo7aWYoaz1udWxsIT09cCYmMDxwLmxlbmd0aCYmITA9PT10aGlzLnF6KXttPQ0KdC5SdzthLnNhdmUoKTthLmJlZ2luUGF0aCgpO2c9cC5sZW5ndGg7Zm9yKGw9MDtsPGc7bCsrKXt2YXIgcT1wW2xdO2lmKDAhPT1xWzJdfHwwIT09cVszXSlxPVJpKHRoaXMscSksYS5yZWN0KE1hdGguZmxvb3IocVswXSktMSxNYXRoLmZsb29yKHFbMV0pLTEsTWF0aC5jZWlsKHFbMl0pKzIsTWF0aC5jZWlsKHFbM10pKzIpLG0mJmEuY2xlYXJSZWN0KE1hdGguZmxvb3IocVswXSktMSxNYXRoLmZsb29yKHFbMV0pLTEsTWF0aC5jZWlsKHFbMl0pKzIsTWF0aC5jZWlsKHFbM10pKzIpfWEuY2xpcCgpfWc9dGhpcy5tZzt0LlRtPyhjLndpZHRoPWMud2lkdGgsaz0hMSx1aSh0aGlzLGEpLGEuc2NhbGUoZyxnKSk6KGEuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxhLnNjYWxlKGcsZyksYS5jbGVhclJlY3QoMCwwLHRoaXMuRWIsdGhpcy5EYikpO2EubWl0ZXJMaW1pdD05O2Euc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKTthLnNjYWxlKGcsZyk7YS50cmFuc2Zvcm0obi5tMTEsbi5tMTIsDQpuLm0yMSxuLm0yMixuLmR4LG4uZHkpO2UmJmUuU3omJmUuQkkodGhpcyxhKTtjPWI/ZnVuY3Rpb24oYyl7dmFyIGQ9YTtpZihjLnZpc2libGUpe2QuZ2xvYmFsQWxwaGE9Yy5MZjt2YXIgZj1jLkZiO2M9Yy52djtjLmxlbmd0aD0wO2Zvcih2YXIgZz1oLnNjYWxlLGs9Zi5sZW5ndGgsbD0wO2w8aztsKyspe3ZhciBtPWYubltsXTtpZihQaChtKSYmIWIuY29udGFpbnMobSkpe2lmKG0gaW5zdGFuY2VvZiBWJiYobS5pYyYmYy5wdXNoKG0pLCExPT09bS5yZykpY29udGludWU7dmFyIG49bS5wYTsxPG4ud2lkdGgqZ3x8MTxuLmhlaWdodCpnP20uVWUoZCxoKTpSaChtLGQpfX1kLmdsb2JhbEFscGhhPTF9fTprP2Z1bmN0aW9uKGIpe1NoKGIsYSxoLHApfTpmdW5jdGlvbihiKXtiLlVlKGEsaCl9O1NpKHRoaXMsYSk7Zz1mLmxlbmd0aDtmb3IobD0wO2w8ZztsKyspYyhmW2xdKTt0aGlzLnVqPVtdO3RoaXMuRms/dGhpcy5Gay5FbCh0aGlzKSYmdGhpcy5oeSgpOnRoaXMuVW49ZnVuY3Rpb24oKXt9Ow0KayYmKGEucmVzdG9yZSgpLHVpKHRoaXMsYSksZSYmZS55SyYmZS54SyhwLGEsdGhpcykpO2Q/KHVpKHRoaXMpLHhpKHRoaXMpKTp0aGlzLnZlPXRoaXMuSGs9ITF9fTsNCmZ1bmN0aW9uIFRpKGEsYixjLGQsZil7bnVsbD09PWEuTWImJnQubSgiTm8gZGl2IHNwZWNpZmllZCIpO3ZhciBnPWEuamI7bnVsbD09PWcmJnQubSgiTm8gY2FudmFzIHNwZWNpZmllZCIpO3ZhciBoPWEuU2c7aWYoYS52ZSl7dmFyIGs9YS5tZzt0LlRtPyhnLndpZHRoPWcud2lkdGgsdWkoYSxoKSk6KGguc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxoLmNsZWFyUmVjdCgwLDAsYS5FYiprLGEuRGIqaykpO2guVkU9ITE7aC5kcmF3SW1hZ2UoYS5LeSwwPGQ/MDpNYXRoLnJvdW5kKC1kKSwwPGY/MDpNYXRoLnJvdW5kKC1mKSk7Zj1hLk1hO3ZhciBnPWEud2MsbD1NYXRoLnJvdW5kKGYueCpnKS9nLG09TWF0aC5yb3VuZChmLnkqZykvZztkPWEubWQ7ZC5yZXNldCgpOzEhPT1nJiZkLnNjYWxlKGcpOzA9PT1mLngmJjA9PT1mLnl8fGQudHJhbnNsYXRlKC1sLC1tKTtoLnNhdmUoKTtoLmJlZ2luUGF0aCgpO2Y9Yy5sZW5ndGg7Zm9yKGc9MDtnPGY7ZysrKWw9Y1tnXSwwIT09bFsyXSYmMCE9PQ0KbFszXSYmaC5yZWN0KE1hdGguZmxvb3IobFswXSksTWF0aC5mbG9vcihsWzFdKSxNYXRoLmNlaWwobFsyXSksTWF0aC5jZWlsKGxbM10pKTtoLmNsaXAoKTtoLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCk7aC5zY2FsZShrLGspO2gudHJhbnNmb3JtKGQubTExLGQubTEyLGQubTIxLGQubTIyLGQuZHgsZC5keSk7ZSYmZS5TeiYmZS5CSShhLGgpO2M9YS5TYi5uO2Y9Yy5sZW5ndGg7YS5EZihjLGYsYSk7U2koYSxoKTtmb3IoZz0wO2c8ZjtnKyspU2goY1tnXSxoLGEsYik7aC5yZXN0b3JlKCk7dWkoYSk7YS5Gaz9hLkZrLkVsKGEpJiZhLmh5KCk6YS5Vbj1mdW5jdGlvbigpe307YS5Iaz0hMTthLnZlPSExO2EuR0ooKX19DQpmdW5jdGlvbiBVaShhLGIsYyxkLGYsZyxoLGssbCxtKXtudWxsPT09YS5NYiYmdC5tKCJObyBkaXYgc3BlY2lmaWVkIik7bnVsbD09PWEuamImJnQubSgiTm8gY2FudmFzIHNwZWNpZmllZCIpO3VpKGEpO3hpKGEpO3ZhciBuPXZvaWQgMDtnJiZkJiZmJiYobj1uZXcgeChnLngsZy55LGQud2lkdGgvZixkLmhlaWdodC9mKSk7dmFyIHA9bi5jb3B5KCk7cC5hdyhjKTtKaShhLHApO3ppKGEpO3ZhciBwPWEuU2IubixxPXAubGVuZ3RoO2EuRGYocCxxLGEsbik7dmFyIHI9YS5tZztiLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCk7Yi5zY2FsZShyLHIpO2IuY2xlYXJSZWN0KDAsMCxkLndpZHRoLGQuaGVpZ2h0KTtrJiYoYi5maWxsU3R5bGU9ayxiLmZpbGxSZWN0KDAsMCxkLndpZHRoLGQuaGVpZ2h0KSk7ZD10LnBoKCk7ZC5yZXNldCgpO2QudHJhbnNsYXRlKGMubGVmdCxjLnRvcCk7ZC5zY2FsZShmKTswPT09Zy54JiYwPT09Zy55fHxkLnRyYW5zbGF0ZSgtZy54LC1nLnkpO2Iuc2V0VHJhbnNmb3JtKGQubTExLA0KZC5tMTIsZC5tMjEsZC5tMjIsZC5keCxkLmR5KTt0LldlKGQpO1NpKGEsYik7aWYoaCl7dmFyIHM9bmV3IEM7Yz1oLms7Zm9yKGMucmVzZXQoKTtjLm5leHQoKTspZj1jLnZhbHVlLlMsITE9PT1tJiYiR3JpZCI9PT1mLmxheWVyLm5hbWV8fG51bGw9PT1mfHxzLmFkZChmKTtjPWZ1bmN0aW9uKGMpe3ZhciBkPWw7aWYoYy52aXNpYmxlJiYodm9pZCAwPT09ZCYmKGQ9ITApLGR8fCFjLnljKSl7Yi5nbG9iYWxBbHBoYT1jLkxmO2Q9Yy5GYjtjPWMudnY7Yy5sZW5ndGg9MDtmb3IodmFyIGY9YS5zY2FsZSxnPWQubGVuZ3RoLGg9MDtoPGc7aCsrKXt2YXIgaz1kLm5baF07aWYoUGgoaykmJnMuY29udGFpbnMoaykpe2lmKGsgaW5zdGFuY2VvZiBWJiYoay5pYyYmYy5wdXNoKGspLCExPT09ay5yZykpY29udGludWU7dmFyIG09ay5wYTsxPG0ud2lkdGgqZnx8MTxtLmhlaWdodCpmP2suVWUoYixhKTpSaChrLGIpfX1iLmdsb2JhbEFscGhhPTF9fX1lbHNlIGlmKCFsJiZtKXt2YXIgdT1hLmxwLlMsDQp2PXUubGF5ZXI7Yz1mdW5jdGlvbihjKXtjPT09dj91LlVlKGIsYSk6Yy5VZShiLGEsbixsLG0pfX1lbHNlIGM9ZnVuY3Rpb24oYyl7Yy5VZShiLGEsbixsLG0pfTtmb3IoZj0wO2Y8cTtmKyspYyhwW2ZdKTthLkZrP2EuRmsuRWwoYSkmJmEuaHkoKTphLlVuPWZ1bmN0aW9uKCl7fTt1aShhKTt4aShhKTthLkRmKHAscSxhKTtKaShhKX16LnByb3RvdHlwZS5nZXRSZW5kZXJpbmdIaW50PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLlJrW2FdfTt6LnByb3RvdHlwZS5zZXRSZW5kZXJpbmdIaW50PXoucHJvdG90eXBlLlFKPWZ1bmN0aW9uKGEsYil7dGhpcy5Sa1thXT1iO3RoaXMuVEEoKX07ei5wcm90b3R5cGUucmVzZXRSZW5kZXJpbmdIaW50cz16LnByb3RvdHlwZS5TRj1mdW5jdGlvbigpe3RoaXMuUms9e2RyYXdTaGFkb3dzOiEwfX07DQpmdW5jdGlvbiBTaShhLGIpe3ZhciBjPWEuUms7aWYobnVsbCE9PWMpe2lmKHZvaWQgMCE9PWMuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKXt2YXIgZD0hIWMuaW1hZ2VTbW9vdGhpbmdFbmFibGVkO2IuVkU9ZDtiLktLPWR9Yz1jLmRlZmF1bHRGb250O3ZvaWQgMCE9PWMmJm51bGwhPT1jJiYoYi5mb250PWMsYi5jdT1jKX19ei5wcm90b3R5cGUuc2V0SW5wdXRPcHRpb249ZnVuY3Rpb24oYSxiKXt0aGlzLlp5W2FdPWJ9O2Z1bmN0aW9uIEtpKGEpe2lmKDA9PT1hLmphLkplKXtmb3IodmFyIGI9YS5QbC5rO2IubmV4dCgpOyl7dmFyIGM9Yi5rZXksZD1iLnZhbHVlO2MuWWUoKTt6ZyhjLGQpfWEuUGwuY2xlYXIoKX19DQp6LnByb3RvdHlwZS5rYT1mdW5jdGlvbihhLGIpe2lmKHRoaXMucXomJnZvaWQgMCE9PWEmJm51bGwhPT10aGlzLnVqKXt2YXIgYz10aGlzLnhiO2lmKGEmJmMuVGYoYSl8fGImJmMuVGYoYikpbnVsbCE9PXRoaXMudWomJihhJiZhLk4oKSYmVmkodGhpcyxhLngtMixhLnktMixhLndpZHRoKzQsYS5oZWlnaHQrNCksYiYmYi5OKCkmJlZpKHRoaXMsYi54LTIsYi55LTIsYi53aWR0aCs0LGIuaGVpZ2h0KzQpKSx0aGlzLnZlPSEwLHRoaXMudGUoKX1lbHNlIHRoaXMudWo9bnVsbCx0aGlzLnZlPSEwLHRoaXMudGUoKTtmb3IoYz10aGlzLmptLms7Yy5uZXh0KCk7KWMudmFsdWUua2EoYSxiKX07dC5nKHosInZpZXdwb3J0T3B0aW1pemF0aW9ucyIsei5wcm90b3R5cGUuZkspOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHtmSzpudWxsfSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlh2fSxmdW5jdGlvbihhKXt0LmkoYSwiYm9vbGVhbiIseiwidmlld3BvcnRPcHRpbWl6YXRpb25zIik7dGhpcy51aj1udWxsO3RoaXMuWHY9YX0pOw0KZnVuY3Rpb24gVmkoYSxiLGMsZCxmKXtiPU1hdGguZmxvb3IoYik7Yz1NYXRoLmZsb29yKGMpO2Q9TWF0aC5jZWlsKGQpO2Y9TWF0aC5jZWlsKGYpO2Zvcih2YXIgZz1hLnVqLGg9Zy5sZW5ndGgsaz0wO2s8aDtrKyspe3ZhciBsPWdba107aWYoYj49bFswXSYmYz49bFsxXSYmYitkPD1sWzBdK2xbMl0mJmMrZjw9bFsxXStsWzNdKXJldHVybiExO2I8PWxbMF0mJmM8PWxbMV0mJmIrZD49bFswXStsWzJdJiZjK2Y+PWxbMV0rbFszXT8oZ1trXVsyXT0wLGdba11bM109MCk6Yj49bFswXSYmYjxsWzBdK2xbMl0mJmM+PWxbMV0mJmMrZjw9bFsxXStsWzNdPyhkPWIrZC0obFswXStsWzJdKSxiPWxbMF0rbFsyXSxrPS0xKTpiK2Q+bFswXSYmYitkPD1sWzBdK2xbMl0mJmM+PWxbMV0mJmMrZjw9bFsxXStsWzNdPyhkPWxbMF0tYixrPS0xKTpiPj1sWzBdJiZiK2Q8PWxbMF0rbFsyXSYmYz49bFsxXSYmYzxsWzFdK2xbM10/KGY9YytmLShsWzFdK2xbM10pLGM9bFsxXStsWzNdLGs9LTEpOmI+PQ0KbFswXSYmYitkPD1sWzBdK2xbMl0mJmMrZj5sWzFdJiZjK2Y8PWxbMV0rbFszXT8oZj1sWzFdLWMsaz0tMSk6Z1trXVswXT49YiYmZ1trXVswXTxiK2QmJmdba11bMV0+PWMmJmdba11bMV0rZ1trXVszXTw9YytmPyhnW2tdWzJdLT1iK2QtZ1trXVswXSxnW2tdWzBdPWIrZCxrPS0xKTpnW2tdWzBdK2dba11bMl0+YiYmZ1trXVswXStnW2tdWzJdPD1iK2QmJmdba11bMV0+PWMmJmdba11bMV0rZ1trXVszXTw9YytmPyhnW2tdWzJdPWItZ1trXVswXSxrPS0xKTpnW2tdWzBdPj1iJiZnW2tdWzBdK2dba11bMl08PWIrZCYmZ1trXVsxXT49YyYmZ1trXVsxXTxjK2Y/KGdba11bM10tPWMrZi1nW2tdWzFdLGdba11bMV09YytmLGs9LTEpOmdba11bMF0+PWImJmdba11bMF0rZ1trXVsyXTw9YitkJiZnW2tdWzFdK2dba11bM10+YyYmZ1trXVsxXStnW2tdWzNdPD1jK2YmJihnW2tdWzNdPWMtZ1trXVsxXSxrPS0xKX1mb3Ioaz0wO2s8aDtrKyspaWYobD1nW2tdLDA8ZCYmMDxmJiYwPGxbMl0mJg0KMDxsWzNdJiYoTWF0aC5tYXgoYitkLGxbMF0rbFsyXSktTWF0aC5taW4oYixsWzBdKSkqKE1hdGgubWF4KGMrZixsWzFdK2xbM10pLU1hdGgubWluKGMsbFsxXSkpPGQqZitsWzJdKmxbM10rNTApe3ZhciBoPU1hdGgubWluKGxbMF0sYiksbT1NYXRoLm1pbihsWzFdLGMpO2I9TWF0aC5tYXgoYitkLGxbMF0rbFsyXSktTWF0aC5taW4obFswXSxiKTtjPU1hdGgubWF4KGMrZixsWzFdK2xbM10pLU1hdGgubWluKGxbMV0sYyk7Z1trXVsyXT0wO2dba11bM109MDtyZXR1cm4gVmkoYSxoLG0sYixjKX1nLnB1c2goW2IsYyxkLGZdKTtyZXR1cm4hMH0NCmZ1bmN0aW9uIFdpKGEsYixjKXtpZighMCE9PWEudmUpe2EudmU9ITA7aWYoYSBpbnN0YW5jZW9mIFhpKVlpKGEpO2Vsc2UgaWYoITA9PT1hLlh2JiZjLndpZHRoPT09Yi53aWR0aCYmYy5oZWlnaHQ9PT1iLmhlaWdodCl7dmFyIGQ9YS5zY2FsZSxmPXQuR2YoKSxnPU1hdGgubWF4KGIueCxjLngpLGg9TWF0aC5tYXgoYi55LGMueSksaz1NYXRoLm1pbihiLngrYi53aWR0aCxjLngrYy53aWR0aCksbD1NYXRoLm1pbihiLnkrYi5oZWlnaHQsYy55K2MuaGVpZ2h0KTtmLng9ZztmLnk9aDtmLndpZHRoPU1hdGgubWF4KDAsay1nKSpkO2YuaGVpZ2h0PU1hdGgubWF4KDAsbC1oKSpkO2lmKDA8Zi53aWR0aCYmMDxmLmhlaWdodCl7aWYoIWEuemQmJihhLk5mPSExLG51bGwhPT1hLk1iKSl7YS56ZD0hMDt6aShhKTswIT09YS5QbC5jb3VudCYmKEtpKGEpLHppKGEpKTthLkVkLk4oKXx8RWkoYSxhLnFmKCkpO3ZhciBtPWEuamI7aWYobnVsbCE9PW0pe2s9YS5tZztnPWEuRWIqaztoPWEuRGIqazsNCmw9YS5zY2FsZSprO2Q9TWF0aC5yb3VuZChNYXRoLnJvdW5kKGMueCpsKS1NYXRoLnJvdW5kKGIueCpsKSk7Yj1NYXRoLnJvdW5kKE1hdGgucm91bmQoYy55KmwpLU1hdGgucm91bmQoYi55KmwpKTtjPWEuS3k7dmFyIG49YS5mQztjLndpZHRoIT09ZyYmKGMud2lkdGg9Zyk7Yy5oZWlnaHQhPT1oJiYoYy5oZWlnaHQ9aCk7bi5jbGVhclJlY3QoMCwwLGcsaCk7Yz0xOTAqYS5tZzt2YXIgbD03MCphLm1nLHA9TWF0aC5tYXgoZCwwKSxxPU1hdGgubWF4KGIsMCkscj1nLXAscz1oLXE7bi5WRT0hMTtuLmRyYXdJbWFnZShtLHAscSxyLHMsMCwwLHIscyk7YS5Gay5FbChhKSYmbi5jbGVhclJlY3QoMCwwLGMsbCk7dmFyIG09dC5DYigpLG49dC5DYigpLHM9TWF0aC5hYnMoZCkscj1NYXRoLmFicyhiKSx1PTA9PT1wPzA6Zy1zLHA9dC5sYyh1LDApLHM9dC5sYyhzK3UsaCk7bi5wdXNoKFtNYXRoLm1pbihwLngscy54KSxNYXRoLm1pbihwLnkscy55KSxNYXRoLmFicyhwLngtcy54KSxNYXRoLmFicyhwLnktDQpzLnkpXSk7dmFyIHY9YS5tZDt2LnJlc2V0KCk7di5zY2FsZShrLGspOzEhPT1hLndjJiZ2LnNjYWxlKGEud2MpO2s9YS5NYTsoMCE9PWsueHx8MCE9PWsueSkmJmlzRmluaXRlKGsueCkmJmlzRmluaXRlKGsueSkmJnYudHJhbnNsYXRlKC1rLngsLWsueSk7UWEocCx2KTtRYShzLHYpO20ucHVzaChbTWF0aC5taW4ocC54LHMueCksTWF0aC5taW4ocC55LHMueSksTWF0aC5hYnMocC54LXMueCksTWF0aC5hYnMocC55LXMueSldKTt1PTA9PT1xPzA6aC1yO3AucCgwLHUpO3MucChnLHIrdSk7bi5wdXNoKFtNYXRoLm1pbihwLngscy54KSxNYXRoLm1pbihwLnkscy55KSxNYXRoLmFicyhwLngtcy54KSxNYXRoLmFicyhwLnktcy55KV0pO1FhKHAsdik7UWEocyx2KTttLnB1c2goW01hdGgubWluKHAueCxzLngpLE1hdGgubWluKHAueSxzLnkpLE1hdGguYWJzKHAueC1zLngpLE1hdGguYWJzKHAueS1zLnkpXSk7YS5Gay5FbChhKSYmKGc9MDxkPzA6LWQsaD0wPGI/MDotYixwLnAoZyxoKSwNCnMucChjK2csbCtoKSxuLnB1c2goW01hdGgubWluKHAueCxzLngpLE1hdGgubWluKHAueSxzLnkpLE1hdGguYWJzKHAueC1zLngpLE1hdGguYWJzKHAueS1zLnkpXSksUWEocCx2KSxRYShzLHYpLG0ucHVzaChbTWF0aC5taW4ocC54LHMueCksTWF0aC5taW4ocC55LHMueSksTWF0aC5hYnMocC54LXMueCksTWF0aC5hYnMocC55LXMueSldKSk7dC5CKHApO3QuQihzKTshYS5YYiYmYS53aiYmKHlpKGEpfHx5aShhKSk7VGkoYSxtLG4sZCxiKTt0LnlhKG0pO3QueWEobik7YS56ZD0hMX19fWVsc2UgYS5VZigpO3QuaGMoZil9ZWxzZSBhLlVmKCk7Zm9yKGE9YS5qbS5rO2EubmV4dCgpOylXaShhLnZhbHVlKX19ZnVuY3Rpb24gSWkoYSl7ITE9PT1hLndqJiYoYS53aj0hMCl9ZnVuY3Rpb24geGkoYSl7ITE9PT1hLkhrJiYoYS5Iaz0hMCl9DQpmdW5jdGlvbiBlaShhLGIsYyl7dmFyIGQ9YS5qYixmPWEubWcsZz1iKmYsZj1jKmY7aWYoZC53aWR0aCE9PWd8fGQuaGVpZ2h0IT09ZilkLndpZHRoPWcsZC5oZWlnaHQ9ZixkLnN0eWxlLndpZHRoPWIrInB4IixkLnN0eWxlLmhlaWdodD1jKyJweCIsYS52ZT0hMH0NCmZ1bmN0aW9uIHlpKGEpe2lmKG51bGwhPT1hLmpiJiYhYS5aYi5zZCl7dmFyIGI9YS5NYixjPWEuRWIsZD1hLkRiLGY9YS5DRC5jb3B5KCksZz0hMSxoPWEuVGw/YS5uZjowLGs9YS5TbD9hLm5mOjAsbD1iLmNsaWVudFdpZHRofHxjK2gsYj1iLmNsaWVudEhlaWdodHx8ZCtrO2lmKGwhPT1jK2h8fGIhPT1kK2spYS5UbD0hMSxhLlNsPSExLGEuRWI9bCxhLkRiPWIsZWkoYSxsLGIpLGc9ITA7YS53aj0hMTtpZihhLkN2KWM9PT1hLkViJiZkPT09YS5EYnx8YS5VZigpO2Vsc2V7dmFyIG09YS54YixuPWEuRWQsaD1uLndpZHRoLGs9bi5oZWlnaHQscD1tLndpZHRoLHE9bS5oZWlnaHQscj1uLngscz1tLngsdT1uLnJpZ2h0LHY9bS5yaWdodCxEPW4ueSxBPW0ueSxHPW4uYm90dG9tLEw9bS5ib3R0b20sbj1tPSIxcHgiLE49YS5zY2FsZTtsL04+aCYmYi9OPmt8fChhLlNFJiZhLm9mJiYocCsxPGg/KG09KGgtcCkqTithLkViKyJweCIsYS5Mai5zY3JvbGxMZWZ0PShhLnBvc2l0aW9uLngtcikqDQpOKTpyKzE8cz8obT0ocy1yKSpOK2EuRWIrInB4IixhLkxqLnNjcm9sbExlZnQ9YS5Mai5zY3JvbGxXaWR0aC1hLkxqLmNsaWVudFdpZHRoKTp1PnYrMSYmKG09KHUtdikqTithLkViKyJweCIsYS5Mai5zY3JvbGxMZWZ0PWEucG9zaXRpb24ueCpOKSksYS5URSYmYS5wZiYmKHErMTxrPyhuPShrLXEpKk4rYS5EYisicHgiLGEuTWouc2Nyb2xsVG9wPShhLnBvc2l0aW9uLnktRCkqTik6RCsxPEE/KG49KEEtRCkqTithLkRiKyJweCIsYS5Nai5zY3JvbGxUb3A9YS5Nai5zY3JvbGxIZWlnaHQtYS5Nai5jbGllbnRIZWlnaHQpOkc+TCsxJiYobj0oRy1MKSpOK2EuRGIrInB4IixhLk1qLnNjcm9sbFRvcD1hLnBvc2l0aW9uLnkqTikpKTtsPSIxcHgiIT09bTtiPSIxcHgiIT09bjtsIT09YS5TbCYmKGEuRGI9IjFweCI9PT1tP2EuRGIrYS5uZjpNYXRoLm1heChhLkRiLWEubmYsMSksZz0hMCk7YS5TbD1sO2Euc3ouc3R5bGUud2lkdGg9bTtiIT09YS5UbCYmKGEuRWI9IjFweCI9PT1uP2EuRWIrDQphLm5mOk1hdGgubWF4KGEuRWItYS5uZiwxKSxnPSEwKTthLlRsPWI7YS50ei5zdHlsZS5oZWlnaHQ9bjtnJiYoZWkoYSxhLkViLGEuRGIpLHVpKGEpKTtsPWEuRWI7Yj1hLkRiO2EuTWouc3R5bGUuaGVpZ2h0PWIrInB4IjthLk1qLnN0eWxlLndpZHRoPWwrKGEuVGw/YS5uZjowKSsicHgiO2EuTGouc3R5bGUud2lkdGg9bCsicHgiO2EuTGouc3R5bGUuaGVpZ2h0PWIrKGEuU2w/YS5uZjowKSsicHgiO2Eucno9ITE7cmV0dXJuIGMhPT1sfHxkIT09Yj8obT1hLnhiLGEuRHQoZixtLGc/ITA6dm9pZCAwKSwhMSk6ITB9fX0NCnoucHJvdG90eXBlLmFkZD16LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7dC5sKGEsRSx6LCJhZGQ6cGFydCIpO3ZhciBiPWEuaDtpZihiIT09dGhpcyl7bnVsbCE9PWImJnQubSgiQ2Fubm90IGFkZCBwYXJ0ICIrYS50b1N0cmluZygpKyIgdG8gIit0aGlzLnRvU3RyaW5nKCkrIi4gSXQgaXMgYWxyZWFkeSBhIHBhcnQgb2YgIitiLnRvU3RyaW5nKCkpO3RoaXMudW4mJihhLkprPSJUb29sIik7dmFyIGM9YS5hZixiPXRoaXMuYnQoYyk7bnVsbD09PWImJihiPXRoaXMuYnQoIiIpKTtudWxsPT09YiYmdC5tKCdDYW5ub3QgYWRkIGEgUGFydCB3aGVuIHVuYWJsZSBmaW5kIGEgTGF5ZXIgbmFtZWQgIicrYysnIiBhbmQgdGhlcmUgaXMgbm8gZGVmYXVsdCBMYXllcicpO2EubGF5ZXIhPT1iJiYoYz1iLm5wKDk5OTk5OTk5LGEsYS5oPT09dGhpcyksMDw9YyYmdGhpcy5JYyh3ZCwicGFydHMiLGIsbnVsbCxhLG51bGwsYyksYi55Y3x8dGhpcy5PYygpLGEuSihaaSksYz1hLnRwLG51bGwhPT0NCmMmJmMoYSxudWxsLGIpKX19Ow0Kei5wcm90b3R5cGUubnA9ZnVuY3Rpb24oYSl7aWYoYSBpbnN0YW5jZW9mIFMpe2lmKHRoaXMucXYuYWRkKGEpLGEgaW5zdGFuY2VvZiBUKXt2YXIgYj1hLmdiO251bGw9PT1iP3RoaXMuVGsuYWRkKGEpOmIucW8uYWRkKGEpO2I9YS5qYztudWxsIT09YiYmKGIuaD10aGlzKX19ZWxzZSBhIGluc3RhbmNlb2YgVj90aGlzLiR1LmFkZChhKTphIGluc3RhbmNlb2YgSmV8fHRoaXMuRmIuYWRkKGEpO2EuSmImJmEuZmEoKTtpZihiPWEuZGF0YSl7YSBpbnN0YW5jZW9mIEplfHwoYSBpbnN0YW5jZW9mIFY/dGhpcy56ay5hZGQoYixhKTp0aGlzLnJpLmFkZChiLGEpKTt2YXIgYz10aGlzOyRpKGEsZnVuY3Rpb24oYSl7YWooYyxhKX0pfSEwIT09UGkoYSkmJiEwIT09UWkoYSl8fHRoaXMuZmcuYWRkKGEpO2JqKGEsITAsdGhpcyk7Y2ooYSk/KGEucGEuTigpJiZ0aGlzLmthKFRoKGEsYS5wYSkpLHRoaXMuT2MoKSk6YS5RYSgpJiZhLnBhLk4oKSYmdGhpcy5rYShUaChhLGEucGEpKTt0aGlzLnRlKCl9Ow0Kei5wcm90b3R5cGUuWGU9ZnVuY3Rpb24oYSl7YS5QZigpO2lmKGEgaW5zdGFuY2VvZiBTKXtpZih0aGlzLnF2LnJlbW92ZShhKSxhIGluc3RhbmNlb2YgVCl7dmFyIGI9YS5nYjtudWxsPT09Yj90aGlzLlRrLnJlbW92ZShhKTpiLnFvLnJlbW92ZShhKTtiPWEuamM7bnVsbCE9PWImJihiLmg9bnVsbCl9fWVsc2UgYSBpbnN0YW5jZW9mIFY/dGhpcy4kdS5yZW1vdmUoYSk6YSBpbnN0YW5jZW9mIEplfHx0aGlzLkZiLnJlbW92ZShhKTtpZihiPWEuZGF0YSl7YSBpbnN0YW5jZW9mIEplfHwoYSBpbnN0YW5jZW9mIFY/dGhpcy56ay5yZW1vdmUoYik6dGhpcy5yaS5yZW1vdmUoYikpO3ZhciBjPXRoaXM7JGkoYSxmdW5jdGlvbihhKXtkaihjLGEpfSl9dGhpcy5mZy5yZW1vdmUoYSk7Y2ooYSk/KGEucGEuTigpJiZ0aGlzLmthKFRoKGEsYS5wYSkpLHRoaXMuT2MoKSk6YS5RYSgpJiZhLnBhLk4oKSYmdGhpcy5rYShUaChhLGEucGEpKTt0aGlzLnRlKCl9Ow0Kei5wcm90b3R5cGUucmVtb3ZlPXoucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXt0LmwoYSxFLHosInJlbW92ZTpwYXJ0Iik7YS5lYj0hMTthLnpnPSExO3ZhciBiPWEubGF5ZXI7aWYobnVsbCE9PWImJmIuaD09PXRoaXMpe2EuSihlaik7YS5NbSgpO3ZhciBjPWIuWGUoLTEsYSwhMSk7MDw9YyYmdGhpcy5JYyh4ZCwicGFydHMiLGIsYSxudWxsLGMsbnVsbCk7Yz1hLnRwO251bGwhPT1jJiZjKGEsYixudWxsKX19O3oucHJvdG90eXBlLnJlbW92ZVBhcnRzPXoucHJvdG90eXBlLlhBPWZ1bmN0aW9uKGEsYil7aWYoYT09PXRoaXMuc2VsZWN0aW9uKXt2YXIgYz1uZXcgQztjLk9lKGEpO2E9Y31mb3IoYz1hLms7Yy5uZXh0KCk7KXt2YXIgZD1jLnZhbHVlO2QuaD09PXRoaXMmJihiJiYhZC5jYW5EZWxldGUoKXx8dGhpcy5yZW1vdmUoZCkpfX07ei5wcm90b3R5cGUuY29weVBhcnRzPXoucHJvdG90eXBlLldvPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5TZS5XbyhhLGIsYyl9Ow0Kei5wcm90b3R5cGUubW92ZVBhcnRzPXoucHJvdG90eXBlLm1vdmVQYXJ0cz1mdW5jdGlvbihhLGIsYyl7dC5sKGIsdyx6LCJtb3ZlUGFydHM6b2Zmc2V0Iik7dmFyIGQ9dGhpcy53YjtpZihudWxsIT09ZCl7ZD1kLkZkO251bGw9PT1kJiYoZD1uZXcgY2YsZC5oPXRoaXMpO3ZhciBmPW5ldyBqYShFLE9iamVjdCk7aWYoYSlhPWEuaztlbHNle2ZvcihhPXRoaXMucmw7YS5uZXh0KCk7KWpmKGQsZixhLnZhbHVlLGMpO2ZvcihhPXRoaXMua2g7YS5uZXh0KCk7KWpmKGQsZixhLnZhbHVlLGMpO2E9dGhpcy5saW5rc31mb3IoO2EubmV4dCgpOylqZihkLGYsYS52YWx1ZSxjKTtkLm1vdmVQYXJ0cyhmLGIsYyl9fTsNCmZ1bmN0aW9uIGZqKGEsYixjKXt0LmwoYiwkZCx6LCJhZGRMYXllcjpsYXllciIpO251bGwhPT1iLmgmJmIuaCE9PWEmJnQubSgiQ2Fubm90IHNoYXJlIGEgTGF5ZXIgd2l0aCBhbm90aGVyIERpYWdyYW06ICIrYisiIG9mICIrYi5oKTtudWxsPT09Yz9udWxsIT09Yi5oJiZ0Lm0oIkNhbm5vdCBhZGQgYW4gZXhpc3RpbmcgTGF5ZXIgdG8gdGhpcyBEaWFncmFtIGFnYWluOiAiK2IpOih0LmwoYywkZCx6LCJhZGRMYXllcjpleGlzdGluZ0xheWVyIiksYy5oIT09YSYmdC5tKCJFeGlzdGluZyBMYXllciBtdXN0IGJlIGluIHRoaXMgRGlhZ3JhbTogIitjKyIgbm90IGluICIrYy5oKSxiPT09YyYmdC5tKCJDYW5ub3QgbW92ZSBhIExheWVyIGJlZm9yZSBvciBhZnRlciBpdHNlbGY6ICIrYikpO2lmKGIuaCE9PWEpe2I9Yi5uYW1lO2E9YS5TYjtjPWEuY291bnQ7Zm9yKHZhciBkPTA7ZDxjO2QrKylhLndhKGQpLm5hbWU9PT1iJiZ0Lm0oIkNhbm5vdCBhZGQgTGF5ZXIgd2l0aCB0aGUgbmFtZSAnIisNCmIrIic7IGEgTGF5ZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIERpYWdyYW0uIil9fXoucHJvdG90eXBlLmFkZExheWVyPXoucHJvdG90eXBlLkpzPWZ1bmN0aW9uKGEpe2ZqKHRoaXMsYSxudWxsKTthLndkKHRoaXMpO3ZhciBiPXRoaXMuU2IsYz1iLmNvdW50LTE7aWYoIWEueWMpZm9yKDswPD1jJiZiLndhKGMpLnljOyljLS07Yi5KZChjKzEsYSk7bnVsbCE9PXRoaXMua2UmJnRoaXMuSWMod2QsImxheWVycyIsdGhpcyxudWxsLGEsbnVsbCxjKzEpO3RoaXMua2EoKTt0aGlzLk9jKCl9Ow0Kei5wcm90b3R5cGUuYWRkTGF5ZXJCZWZvcmU9ei5wcm90b3R5cGUuRUg9ZnVuY3Rpb24oYSxiKXtmaih0aGlzLGEsYik7YS53ZCh0aGlzKTt2YXIgYz10aGlzLlNiLGQ9Yy5pbmRleE9mKGEpOzA8PWQmJihjLnJlbW92ZShhKSxudWxsIT09dGhpcy5rZSYmdGhpcy5JYyh4ZCwibGF5ZXJzIix0aGlzLGEsbnVsbCxkLG51bGwpKTtmb3IodmFyIGY9Yy5jb3VudCxnPTA7ZzxmO2crKylpZihjLndhKGcpPT09Yil7Yy5KZChnLGEpO2JyZWFrfW51bGwhPT10aGlzLmtlJiZ0aGlzLkljKHdkLCJsYXllcnMiLHRoaXMsbnVsbCxhLG51bGwsZyk7dGhpcy5rYSgpOzA+ZCYmdGhpcy5PYygpfTsNCnoucHJvdG90eXBlLmFkZExheWVyQWZ0ZXI9ZnVuY3Rpb24oYSxiKXtmaih0aGlzLGEsYik7YS53ZCh0aGlzKTt2YXIgYz10aGlzLlNiLGQ9Yy5pbmRleE9mKGEpOzA8PWQmJihjLnJlbW92ZShhKSxudWxsIT09dGhpcy5rZSYmdGhpcy5JYyh4ZCwibGF5ZXJzIix0aGlzLGEsbnVsbCxkLG51bGwpKTtmb3IodmFyIGY9Yy5jb3VudCxnPTA7ZzxmO2crKylpZihjLndhKGcpPT09Yil7Yy5KZChnKzEsYSk7YnJlYWt9bnVsbCE9PXRoaXMua2UmJnRoaXMuSWMod2QsImxheWVycyIsdGhpcyxudWxsLGEsbnVsbCxnKzEpO3RoaXMua2EoKTswPmQmJnRoaXMuT2MoKX07DQp6LnByb3RvdHlwZS5yZW1vdmVMYXllcj1mdW5jdGlvbihhKXt0LmwoYSwkZCx6LCJyZW1vdmVMYXllcjpsYXllciIpO2EuaCE9PXRoaXMmJnQubSgiQ2Fubm90IHJlbW92ZSBhIExheWVyIGZyb20gYW5vdGhlciBEaWFncmFtOiAiK2ErIiBvZiAiK2EuaCk7aWYoIiIhPT1hLm5hbWUpe3ZhciBiPXRoaXMuU2IsYz1iLmluZGV4T2YoYSk7aWYoYi5yZW1vdmUoYSkpe2ZvcihiPWEuRmIuY29weSgpLms7Yi5uZXh0KCk7KXt2YXIgZD1iLnZhbHVlLGY9ZC5hZjtkLmFmPWYhPT1hLm5hbWU/ZjoiIn1udWxsIT09dGhpcy5rZSYmdGhpcy5JYyh4ZCwibGF5ZXJzIix0aGlzLGEsbnVsbCxjLG51bGwpO3RoaXMua2EoKTt0aGlzLk9jKCl9fX07ei5wcm90b3R5cGUuZmluZExheWVyPXoucHJvdG90eXBlLmJ0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLll3O2IubmV4dCgpOyl7dmFyIGM9Yi52YWx1ZTtpZihjLm5hbWU9PT1hKXJldHVybiBjfXJldHVybiBudWxsfTsNCnoucHJvdG90eXBlLmFkZENoYW5nZWRMaXN0ZW5lcj16LnByb3RvdHlwZS5Kej1mdW5jdGlvbihhKXt0LmkoYSwiZnVuY3Rpb24iLHosImFkZENoYW5nZWRMaXN0ZW5lcjpsaXN0ZW5lciIpO251bGw9PT10aGlzLnJqJiYodGhpcy5yaj1uZXcgQigiZnVuY3Rpb24iKSk7dGhpcy5yai5hZGQoYSl9O3oucHJvdG90eXBlLnJlbW92ZUNoYW5nZWRMaXN0ZW5lcj16LnByb3RvdHlwZS5WQT1mdW5jdGlvbihhKXt0LmkoYSwiZnVuY3Rpb24iLHosInJlbW92ZUNoYW5nZWRMaXN0ZW5lcjpsaXN0ZW5lciIpO251bGwhPT10aGlzLnJqJiYodGhpcy5yai5yZW1vdmUoYSksMD09PXRoaXMucmouY291bnQmJih0aGlzLnJqPW51bGwpKX07DQp6LnByb3RvdHlwZS5odz1mdW5jdGlvbihhKXt0aGlzLldhfHx0aGlzLmphLlFFKGEpO2EudGQhPT11ZCYmKHRoaXMuaGg9ITApO2lmKG51bGwhPT10aGlzLnJqKXt2YXIgYj10aGlzLnJqLGM9Yi5sZW5ndGg7aWYoMT09PWMpYj1iLndhKDApLGIoYSk7ZWxzZSBpZigwIT09Yylmb3IodmFyIGQ9Yi5JZSgpLGY9MDtmPGM7ZisrKWI9ZFtmXSxiKGEpfX07ei5wcm90b3R5cGUucmFpc2VDaGFuZ2VkRXZlbnQ9ei5wcm90b3R5cGUuSWM9ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCl7dm9pZCAwPT09ZyYmKGc9bnVsbCk7dm9pZCAwPT09aCYmKGg9bnVsbCk7dmFyIGs9bmV3IHRkO2suaD10aGlzO2sudGQ9YTtrLnByb3BlcnR5TmFtZT1iO2sub2JqZWN0PWM7ay5vbGRWYWx1ZT1kO2suWWY9ZztrLm5ld1ZhbHVlPWY7ay5XZj1oO3RoaXMuaHcoayl9Ow0Kei5wcm90b3R5cGUucmFpc2VDaGFuZ2VkPXoucHJvdG90eXBlLmo9ZnVuY3Rpb24oYSxiLGMsZCxmKXt0aGlzLkljKHZkLGEsdGhpcyxiLGMsZCxmKX07dC5BKHose1piOiJhbmltYXRpb25NYW5hZ2VyIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saX0pO3QuQSh6LHtqYToidW5kb01hbmFnZXIifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmtlLmphfSk7dC5nKHosInNraXBzVW5kb01hbmFnZXIiLHoucHJvdG90eXBlLldhKTt0LmRlZmluZVByb3BlcnR5KHose1dhOiJza2lwc1VuZG9NYW5hZ2VyIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MaX0sZnVuY3Rpb24oYSl7dC5pKGEsImJvb2xlYW4iLHosInNraXBzVW5kb01hbmFnZXIiKTt0aGlzLkxpPWE7dGhpcy5rZS5MaT1hfSk7dC5nKHosImRlbGF5c0xheW91dCIsei5wcm90b3R5cGUud3cpOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHt3dzoiZGVsYXlzTGF5b3V0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5HeX0sZnVuY3Rpb24oYSl7dGhpcy5HeT1hfSk7DQp6LnByb3RvdHlwZS5jaGFuZ2VTdGF0ZT1mdW5jdGlvbihhLGIpe2lmKG51bGwhPT1hJiZhLmg9PT10aGlzKXt2YXIgYz1hLnRkO2lmKGM9PT12ZCl7dmFyIGQ9YS5vYmplY3QsYz1hLnByb3BlcnR5TmFtZSxmPWEuemEoYik7dC5TYShkLGMsZik7ZCBpbnN0YW5jZW9mIFEmJihjPWQuUyxudWxsIT09YyYmYy5QZigpKTt0aGlzLmhoPSEwfWVsc2UgaWYoYz09PXdkKXtmPWEub2JqZWN0O2M9YS5XZjtkPWEubmV3VmFsdWU7aWYoZiBpbnN0YW5jZW9mIHkpaWYoIm51bWJlciI9PT10eXBlb2YgYyYmZCBpbnN0YW5jZW9mIFEpe3ZhciBnPWY7Yj9nLlhlKGMpOmcuSmQoYyxkKTtjPWYuUztudWxsIT09YyYmYy5QZigpfWVsc2UibnVtYmVyIj09PXR5cGVvZiBjJiZkIGluc3RhbmNlb2YgQWUmJihnPWYsYj9kLnhmP2cuUkYoYyk6Zy5PRihjKTooYz1kLnhmP2cuSGQoZC5pbmRleCk6Zy5HZChkLmluZGV4KSxnaihjLGQpKSk7ZWxzZSBmIGluc3RhbmNlb2YgJGQ/KGc9ITA9PT1hLllmLCJudW1iZXIiPT09DQp0eXBlb2YgYyYmZCBpbnN0YW5jZW9mIEUmJihiPyhkLlBmKCksZz9mLlhlKGMsZCxnKTp0aGlzLnJlbW92ZShkKSk6Zi5ucChjLGQsZykpKTpmIGluc3RhbmNlb2Ygej8ibnVtYmVyIj09PXR5cGVvZiBjJiZkIGluc3RhbmNlb2YgJGQmJihiP3RoaXMuU2IucWQoYyk6KGQud2QodGhpcyksdGhpcy5TYi5KZChjLGQpKSk6dC5tKCJ1bmtub3duIENoYW5nZWRFdmVudC5JbnNlcnQgb2JqZWN0OiAiK2EudG9TdHJpbmcoKSk7dGhpcy5oaD0hMH1lbHNlIGM9PT14ZD8oZj1hLm9iamVjdCxjPWEuWWYsZD1hLm9sZFZhbHVlLGYgaW5zdGFuY2VvZiB5PyJudW1iZXIiPT09dHlwZW9mIGMmJmQgaW5zdGFuY2VvZiBRPyhnPWYsYj9nLkpkKGMsZCk6Zy5YZShjKSk6Im51bWJlciI9PT10eXBlb2YgYyYmZCBpbnN0YW5jZW9mIEFlJiYoZz1mLGI/KGM9ZC54Zj9nLkhkKGQuaW5kZXgpOmcuR2QoZC5pbmRleCksZ2ooYyxkKSk6ZC54Zj9nLlJGKGMpOmcuT0YoYykpOmYgaW5zdGFuY2VvZiAkZD8oZz0NCiEwPT09YS5XZiwibnVtYmVyIj09PXR5cGVvZiBjJiZkIGluc3RhbmNlb2YgRSYmKGI/Zi5ucChjLGQsZyk6KGQuUGYoKSxnP2YuWGUoYyxkLGcpOnRoaXMucmVtb3ZlKGQpKSkpOmYgaW5zdGFuY2VvZiB6PyJudW1iZXIiPT09dHlwZW9mIGMmJmQgaW5zdGFuY2VvZiAkZCYmKGI/KGQud2QodGhpcyksdGhpcy5TYi5KZChjLGQpKTp0aGlzLlNiLnFkKGMpKTp0Lm0oInVua25vd24gQ2hhbmdlZEV2ZW50LlJlbW92ZSBvYmplY3Q6ICIrYS50b1N0cmluZygpKSx0aGlzLmhoPSEwKTpjIT09dWQmJnQubSgidW5rbm93biBDaGFuZ2VkRXZlbnQ6ICIrYS50b1N0cmluZygpKX19O3oucHJvdG90eXBlLnN0YXJ0VHJhbnNhY3Rpb249ei5wcm90b3R5cGUuc2M9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuamEuc2MoYSl9O3oucHJvdG90eXBlLmNvbW1pdFRyYW5zYWN0aW9uPXoucHJvdG90eXBlLkNlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmphLkNlKGEpfTsNCnoucHJvdG90eXBlLnJvbGxiYWNrVHJhbnNhY3Rpb249ei5wcm90b3R5cGUuTnA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qYS5OcCgpfTt6LnByb3RvdHlwZS51cGRhdGVBbGxUYXJnZXRCaW5kaW5ncz1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT0iIik7Zm9yKHZhciBiPXRoaXMucmw7Yi5uZXh0KCk7KWIudmFsdWUuUWIoYSk7Zm9yKGI9dGhpcy5raDtiLm5leHQoKTspYi52YWx1ZS5RYihhKTtmb3IoYj10aGlzLmxpbmtzO2IubmV4dCgpOyliLnZhbHVlLlFiKGEpfTt6LnByb3RvdHlwZS51cGRhdGVBbGxNb2RlbERhdGFSZWZlcmVuY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMucmw7YS5uZXh0KCk7KWEudmFsdWUudXBkYXRlTW9kZWxEYXRhUmVmZXJlbmNlcygpO2ZvcihhPXRoaXMua2g7YS5uZXh0KCk7KWEudmFsdWUudXBkYXRlTW9kZWxEYXRhUmVmZXJlbmNlcygpO2ZvcihhPXRoaXMubGlua3M7YS5uZXh0KCk7KWEudmFsdWUudXBkYXRlTW9kZWxEYXRhUmVmZXJlbmNlcygpfTsNCnoucHJvdG90eXBlLkR0PWZ1bmN0aW9uKGEsYixjKXtJaSh0aGlzKTt4aSh0aGlzKTt2YXIgZD10aGlzLmpjO251bGw9PT1kfHwhZC5ydHx8Y3x8YS53aWR0aD09PWIud2lkdGgmJmEuaGVpZ2h0PT09Yi5oZWlnaHR8fGQuSigpO3RoaXMuWGJ8fEJpKHRoaXMpO0ppKHRoaXMpO2Q9dGhpcy5VYTshMD09PXRoaXMuYW8mJmQgaW5zdGFuY2VvZiBIZSYmKHRoaXMuUi5lYT10aGlzLkxHKHRoaXMuUi5LZSksZC5kb01vdXNlTW92ZSgpKTtXaSh0aGlzLGEsYik7dGhpcy5CYSgiVmlld3BvcnRCb3VuZHNDaGFuZ2VkIixjP3t9Om51bGwsYSl9Ow0KZnVuY3Rpb24gSmkoYSxiKXt2YXIgYz1hLmdkO2lmKG51bGwhPT1jJiZjLnZpc2libGUpe2Zvcih2YXIgZD10LkFsKCksZj0xLGc9MSxoPWMueGEubGVuZ3RoLGs9MDtrPGg7aysrKXt2YXIgbD1jLnhhLm5ba10sbT1sLmludGVydmFsOzI+bXx8KGhqKGwuemIpP2c9ZyptL0guSUUoZyxtKTpmPWYqbS9ILklFKGYsbSkpfWg9Yy5ndDtkLnAoZypoLndpZHRoLGYqaC5oZWlnaHQpO2lmKGIpaz1iLndpZHRoLGw9Yi5oZWlnaHQsZz1iLngsaD1iLnk7ZWxzZXtmPXQuR2YoKTtnPWEueGI7Zi5wKGcueCxnLnksZy53aWR0aCxnLmhlaWdodCk7Zm9yKGg9YS5qbS5rO2gubmV4dCgpOylnPWgudmFsdWUueGIsZy5OKCkmJmhiKGYsZy54LGcueSxnLndpZHRoLGcuaGVpZ2h0KTtrPWYud2lkdGg7bD1mLmhlaWdodDtnPWYueDtoPWYueTtpZighZi5OKCkpcmV0dXJufWMud2lkdGg9aysyKmQud2lkdGg7Yy5oZWlnaHQ9bCsyKmQuaGVpZ2h0O2Y9dC5LKCk7SC5jdChnLGgsMCwwLGQud2lkdGgsZC5oZWlnaHQsDQpmKTtmLm9mZnNldCgtZC53aWR0aCwtZC5oZWlnaHQpO3QuYmsoZCk7Yy5TLmxvY2F0aW9uPWY7dC5CKGYpfX16LnByb3RvdHlwZS5jbGVhclNlbGVjdGlvbj16LnByb3RvdHlwZS5qdz1mdW5jdGlvbigpe3ZhciBhPTA8dGhpcy5zZWxlY3Rpb24uY291bnQ7YSYmdGhpcy5CYSgiQ2hhbmdpbmdTZWxlY3Rpb24iKTtNZSh0aGlzKTthJiZ0aGlzLkJhKCJDaGFuZ2VkU2VsZWN0aW9uIil9O2Z1bmN0aW9uIE1lKGEpe2E9YS5zZWxlY3Rpb247aWYoMDxhLmNvdW50KXtmb3IodmFyIGI9YS5JZSgpLGM9Yi5sZW5ndGgsZD0wO2Q8YztkKyspYltkXS5lYj0hMTthLkxhKCk7YS5jbGVhcigpO2EuZnJlZXplKCl9fQ0Kei5wcm90b3R5cGUuc2VsZWN0PXoucHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbihhKXtudWxsIT09YSYmYS5sYXllci5oPT09dGhpcyYmKHQubChhLEUseiwic2VsZWN0OnBhcnQiKSwhYS5lYnx8MTx0aGlzLnNlbGVjdGlvbi5jb3VudCkmJih0aGlzLkJhKCJDaGFuZ2luZ1NlbGVjdGlvbiIpLE1lKHRoaXMpLGEuZWI9ITAsdGhpcy5CYSgiQ2hhbmdlZFNlbGVjdGlvbiIpKX07DQp6LnByb3RvdHlwZS5zZWxlY3RDb2xsZWN0aW9uPXoucHJvdG90eXBlLmhHPWZ1bmN0aW9uKGEpe3RoaXMuQmEoIkNoYW5naW5nU2VsZWN0aW9uIik7TWUodGhpcyk7aWYodC5pc0FycmF5KGEpKWZvcih2YXIgYj10LnZiKGEpLGM9MDtjPGI7YysrKXt2YXIgZD10Lm1iKGEsYyk7ZCBpbnN0YW5jZW9mIEV8fHQubSgiRGlhZ3JhbS5zZWxlY3RDb2xsZWN0aW9uIGdpdmVuIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBhIFBhcnQ6ICIrZCk7ZC5lYj0hMH1lbHNlIGZvcihhPWEuazthLm5leHQoKTspZD1hLnZhbHVlLGQgaW5zdGFuY2VvZiBFfHx0Lm0oIkRpYWdyYW0uc2VsZWN0Q29sbGVjdGlvbiBnaXZlbiBzb21ldGhpbmcgdGhhdCBpcyBub3QgYSBQYXJ0OiAiK2QpLGQuZWI9ITA7dGhpcy5CYSgiQ2hhbmdlZFNlbGVjdGlvbiIpfTsNCnoucHJvdG90eXBlLmNsZWFySGlnaGxpZ2h0ZWRzPXoucHJvdG90eXBlLlZEPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5MdztpZigwPGEuY291bnQpe2Zvcih2YXIgYj1hLkllKCksYz1iLmxlbmd0aCxkPTA7ZDxjO2QrKyliW2RdLnpnPSExO2EuTGEoKTthLmNsZWFyKCk7YS5mcmVlemUoKX19O3oucHJvdG90eXBlLmhpZ2hsaWdodD1mdW5jdGlvbihhKXtudWxsIT09YSYmYS5sYXllci5oPT09dGhpcyYmKHQubChhLEUseiwiaGlnaGxpZ2h0OnBhcnQiKSwhYS56Z3x8MTx0aGlzLkx3LmNvdW50KSYmKHRoaXMuVkQoKSxhLnpnPSEwKX07DQp6LnByb3RvdHlwZS5oaWdobGlnaHRDb2xsZWN0aW9uPWZ1bmN0aW9uKGEpe3RoaXMuVkQoKTtpZih0LmlzQXJyYXkoYSkpZm9yKHZhciBiPXQudmIoYSksYz0wO2M8YjtjKyspe3ZhciBkPXQubWIoYSxjKTtkIGluc3RhbmNlb2YgRXx8dC5tKCJEaWFncmFtLmhpZ2hsaWdodENvbGxlY3Rpb24gZ2l2ZW4gc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgUGFydDogIitkKTtkLnpnPSEwfWVsc2UgZm9yKGE9YS5rO2EubmV4dCgpOylkPWEudmFsdWUsZCBpbnN0YW5jZW9mIEV8fHQubSgiRGlhZ3JhbS5oaWdobGlnaHRDb2xsZWN0aW9uIGdpdmVuIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBhIFBhcnQ6ICIrZCksZC56Zz0hMH07DQp6LnByb3RvdHlwZS5zY3JvbGw9ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWMmJihjPTEpO3ZhciBkPSJ1cCI9PT1ifHwiZG93biI9PT1iLGY7InBpeGVsIj09PWE/Zj1jOiJsaW5lIj09PWE/Zj1jKihkP3RoaXMuUnA6dGhpcy5RcCk6InBhZ2UiPT09YT8oYT1kP3RoaXMueGIuaGVpZ2h0OnRoaXMueGIud2lkdGgsYSo9dGhpcy5zY2FsZSwwIT09YSYmKGY9TWF0aC5tYXgoYS0oZD90aGlzLlJwOnRoaXMuUXApLDApLGYqPWMpKTp0Lm0oInNjcm9sbGluZyB1bml0IG11c3QgYmUgJ3BpeGVsJywgJ2xpbmUnLCBvciAncGFnZScsIG5vdDogIithKTtmLz10aGlzLnNjYWxlO2M9dGhpcy5wb3NpdGlvbi5jb3B5KCk7InVwIj09PWI/Yy55PXRoaXMucG9zaXRpb24ueS1mOiJkb3duIj09PWI/Yy55PXRoaXMucG9zaXRpb24ueStmOiJsZWZ0Ij09PWI/Yy54PXRoaXMucG9zaXRpb24ueC1mOiJyaWdodCI9PT1iP2MueD10aGlzLnBvc2l0aW9uLngrZjp0Lm0oInNjcm9sbGluZyBkaXJlY3Rpb24gbXVzdCBiZSAndXAnLCAnZG93bicsICdsZWZ0Jywgb3IgJ3JpZ2h0Jywgbm90OiAiKw0KYik7dGhpcy5wb3NpdGlvbj1jfTt6LnByb3RvdHlwZS5zY3JvbGxUb1JlY3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54YjtiLldqKGEpfHwoYT1hLlR6LGEueC09Yi53aWR0aC8yLGEueS09Yi5oZWlnaHQvMix0aGlzLnBvc2l0aW9uPWEpfTt6LnByb3RvdHlwZS5jZW50ZXJSZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueGI7YT1hLlR6O2EueC09Yi53aWR0aC8yO2EueS09Yi5oZWlnaHQvMjt0aGlzLnBvc2l0aW9uPWF9O3oucHJvdG90eXBlLnRyYW5zZm9ybURvY1RvVmlldz16LnByb3RvdHlwZS5KRz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm1kO2IucmVzZXQoKTsxIT09dGhpcy53YyYmYi5zY2FsZSh0aGlzLndjKTt2YXIgYz10aGlzLk1hOygwIT09Yy54fHwwIT09Yy55KSYmaXNGaW5pdGUoYy54KSYmaXNGaW5pdGUoYy55KSYmYi50cmFuc2xhdGUoLWMueCwtYy55KTtyZXR1cm4gYS5jb3B5KCkudHJhbnNmb3JtKHRoaXMubWQpfTsNCmZ1bmN0aW9uIFJpKGEsYil7dmFyIGM9YS5tZCxkPWJbMF0sZj1iWzFdLGc9ZCtiWzJdLGg9ZitiWzNdLGs9Yy5tMTEsbD1jLm0xMixtPWMubTIxLG49Yy5tMjIscD1jLmR4LHE9Yy5keSxyPWQqaytmKm0rcCxzPWQqbCtmKm4rcSxjPWcqaytmKm0rcCxmPWcqbCtmKm4rcSx1PWQqaytoKm0rcCxkPWQqbCtoKm4rcSxrPWcqaytoKm0rcCxnPWcqbCtoKm4rcSxoPXIsbD1zLHI9TWF0aC5taW4ocixjKSxoPU1hdGgubWF4KGgsYyksbD1NYXRoLm1pbihsLGYpLHM9TWF0aC5tYXgocyxmKSxyPU1hdGgubWluKHIsdSksaD1NYXRoLm1heChoLHUpLGw9TWF0aC5taW4obCxkKSxzPU1hdGgubWF4KHMsZCkscj1NYXRoLm1pbihyLGspLGg9TWF0aC5tYXgoaCxrKSxsPU1hdGgubWluKGwsZykscz1NYXRoLm1heChzLGcpO3JldHVybltyLGwsaC1yLHMtbF19DQp6LnByb3RvdHlwZS50cmFuc2Zvcm1WaWV3VG9Eb2M9ei5wcm90b3R5cGUuTEc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5tZDtiLnJlc2V0KCk7MSE9PXRoaXMud2MmJmIuc2NhbGUodGhpcy53Yyk7dmFyIGM9dGhpcy5NYTsoMCE9PWMueHx8MCE9PWMueSkmJmlzRmluaXRlKGMueCkmJmlzRmluaXRlKGMueSkmJmIudHJhbnNsYXRlKC1jLngsLWMueSk7cmV0dXJuIFFhKGEuY29weSgpLHRoaXMubWQpfTt2YXIgWGU7ei5Ob25lPVhlPXQudyh6LCJOb25lIiwwKTt2YXIgRmk7ei5Vbmlmb3JtPUZpPXQudyh6LCJVbmlmb3JtIiwxKTt2YXIgR2k7ei5Vbmlmb3JtVG9GaWxsPUdpPXQudyh6LCJVbmlmb3JtVG9GaWxsIiwyKTt2YXIgZGc7ei5DeWNsZUFsbD1kZz10LncoeiwiQ3ljbGVBbGwiLDEwKTt2YXIgbmc7ei5DeWNsZU5vdERpcmVjdGVkPW5nPXQudyh6LCJDeWNsZU5vdERpcmVjdGVkIiwxMSk7dmFyIHBnOw0Kei5DeWNsZU5vdERpcmVjdGVkRmFzdD1wZz10LncoeiwiQ3ljbGVOb3REaXJlY3RlZEZhc3QiLDEyKTt2YXIgcWc7ei5DeWNsZU5vdFVuZGlyZWN0ZWQ9cWc9dC53KHosIkN5Y2xlTm90VW5kaXJlY3RlZCIsMTMpO3ZhciBlZzt6LkN5Y2xlRGVzdGluYXRpb25UcmVlPWVnPXQudyh6LCJDeWNsZURlc3RpbmF0aW9uVHJlZSIsMTQpO3ZhciBtZzt6LkN5Y2xlU291cmNlVHJlZT1tZz10LncoeiwiQ3ljbGVTb3VyY2VUcmVlIiwxNSk7dC5nKHosInZhbGlkQ3ljbGUiLHoucHJvdG90eXBlLlJHKTt0LmRlZmluZVByb3BlcnR5KHose1JHOiJ2YWxpZEN5Y2xlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Wdn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5WdjtiIT09YSYmKHQuQWEoYSx6LHosInZhbGlkQ3ljbGUiKSx0aGlzLlZ2PWEsdGhpcy5qKCJ2YWxpZEN5Y2xlIixiLGEpKX0pO3QuZyh6LCJsaW5rU3BhY2luZyIsei5wcm90b3R5cGUueXApOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHt5cDoibGlua1NwYWNpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnpqfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnpqO2IhPT1hJiYodC5xKGEseiwibGlua1NwYWNpbmciKSwwPmEmJnQubGEoYSwiPj0gemVybyIseiwibGlua1NwYWNpbmciKSx0aGlzLnpqPWEsdGhpcy5qKCJsaW5rU3BhY2luZyIsYixhKSl9KTt0LkEoeix7WXc6ImxheWVycyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU2Iua30pO3QuZyh6LCJpc01vZGVsUmVhZE9ubHkiLHoucHJvdG90eXBlLlplKTt0LmRlZmluZVByb3BlcnR5KHose1plOiJpc01vZGVsUmVhZE9ubHkifSxmdW5jdGlvbigpe3ZhciBhPXRoaXMua2U7cmV0dXJuIG51bGw9PT1hPyExOmEuYWJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMua2U7bnVsbCE9PWImJihiLmFiPWEpfSk7dC5nKHosImlzUmVhZE9ubHkiLHoucHJvdG90eXBlLmFiKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7YWI6ImlzUmVhZE9ubHkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLklrfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLklrO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHosImlzUmVhZE9ubHkiKSx0aGlzLklrPWEsdGhpcy5qKCJpc1JlYWRPbmx5IixiLGEpKX0pO3QuZyh6LCJpc0VuYWJsZWQiLHoucHJvdG90eXBlLmlzRW5hYmxlZCk7dC5kZWZpbmVQcm9wZXJ0eSh6LHtpc0VuYWJsZWQ6ImlzRW5hYmxlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTGV9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuTGU7YiE9PWEmJih0LmkoYSwiYm9vbGVhbiIseiwiaXNFbmFibGVkIiksdGhpcy5MZT1hLHRoaXMuaigiaXNFbmFibGVkIixiLGEpKX0pO3QuZyh6LCJhbGxvd0NsaXBib2FyZCIsei5wcm90b3R5cGUuZHcpOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHtkdzoiYWxsb3dDbGlwYm9hcmQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmR1fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmR1O2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHosImFsbG93Q2xpcGJvYXJkIiksdGhpcy5kdT1hLHRoaXMuaigiYWxsb3dDbGlwYm9hcmQiLGIsYSkpfSk7dC5nKHosImFsbG93Q29weSIsei5wcm90b3R5cGUuU2kpO3QuZGVmaW5lUHJvcGVydHkoeix7U2k6ImFsbG93Q29weSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2t9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMua2s7YiE9PWEmJih0LmkoYSwiYm9vbGVhbiIseiwiYWxsb3dDb3B5IiksdGhpcy5raz1hLHRoaXMuaigiYWxsb3dDb3B5IixiLGEpKX0pO3QuZyh6LCJhbGxvd0RlbGV0ZSIsei5wcm90b3R5cGUuWWspOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHtZazoiYWxsb3dEZWxldGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmxrfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxrO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHosImFsbG93RGVsZXRlIiksdGhpcy5saz1hLHRoaXMuaigiYWxsb3dEZWxldGUiLGIsYSkpfSk7dC5nKHosImFsbG93RHJhZ091dCIsei5wcm90b3R5cGUuTXMpO3QuZGVmaW5lUHJvcGVydHkoeix7TXM6ImFsbG93RHJhZ091dCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXV9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZXU7YiE9PWEmJih0LmkoYSwiYm9vbGVhbiIseiwiYWxsb3dEcmFnT3V0IiksdGhpcy5ldT1hLHRoaXMuaigiYWxsb3dEcmFnT3V0IixiLGEpKX0pO3QuZyh6LCJhbGxvd0Ryb3AiLHoucHJvdG90eXBlLkx6KTsNCnQuZGVmaW5lUHJvcGVydHkoeix7THo6ImFsbG93RHJvcCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnV9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZnU7YiE9PWEmJih0LmkoYSwiYm9vbGVhbiIseiwiYWxsb3dEcm9wIiksdGhpcy5mdT1hLHRoaXMuaigiYWxsb3dEcm9wIixiLGEpKX0pO3QuZyh6LCJhbGxvd1RleHRFZGl0Iix6LnByb3RvdHlwZS5Rbyk7dC5kZWZpbmVQcm9wZXJ0eSh6LHtRbzoiYWxsb3dUZXh0RWRpdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWt9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudWs7YiE9PWEmJih0LmkoYSwiYm9vbGVhbiIseiwiYWxsb3dUZXh0RWRpdCIpLHRoaXMudWs9YSx0aGlzLmooImFsbG93VGV4dEVkaXQiLGIsYSkpfSk7dC5nKHosImFsbG93R3JvdXAiLHoucHJvdG90eXBlLk1vKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7TW86ImFsbG93R3JvdXAifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm1rfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLm1rO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHosImFsbG93R3JvdXAiKSx0aGlzLm1rPWEsdGhpcy5qKCJhbGxvd0dyb3VwIixiLGEpKX0pO3QuZyh6LCJhbGxvd1VuZ3JvdXAiLHoucHJvdG90eXBlLlJvKTt0LmRlZmluZVByb3BlcnR5KHose1JvOiJhbGxvd1VuZ3JvdXAifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnZrfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnZrO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHosImFsbG93VW5ncm91cCIpLHRoaXMudms9YSx0aGlzLmooImFsbG93VW5ncm91cCIsYixhKSl9KTt0LmcoeiwiYWxsb3dJbnNlcnQiLHoucHJvdG90eXBlLnptKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7em06ImFsbG93SW5zZXJ0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5odX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5odTtiIT09YSYmKHQuaShhLCJib29sZWFuIix6LCJhbGxvd0luc2VydCIpLHRoaXMuaHU9YSx0aGlzLmooImFsbG93SW5zZXJ0IixiLGEpKX0pO3QuZyh6LCJhbGxvd0xpbmsiLHoucHJvdG90eXBlLkFtKTt0LmRlZmluZVByb3BlcnR5KHose0FtOiJhbGxvd0xpbmsifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm5rfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLm5rO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHosImFsbG93TGluayIpLHRoaXMubms9YSx0aGlzLmooImFsbG93TGluayIsYixhKSl9KTt0LmcoeiwiYWxsb3dSZWxpbmsiLHoucHJvdG90eXBlLlRqKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7VGo6ImFsbG93UmVsaW5rIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wa30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5waztiIT09YSYmKHQuaShhLCJib29sZWFuIix6LCJhbGxvd1JlbGluayIpLHRoaXMucGs9YSx0aGlzLmooImFsbG93UmVsaW5rIixiLGEpKX0pO3QuZyh6LCJhbGxvd01vdmUiLHoucHJvdG90eXBlLlNqKTt0LmRlZmluZVByb3BlcnR5KHose1NqOiJhbGxvd01vdmUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm9rfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLm9rO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHosImFsbG93TW92ZSIpLHRoaXMub2s9YSx0aGlzLmooImFsbG93TW92ZSIsYixhKSl9KTt0LmcoeiwiYWxsb3dSZXNoYXBlIix6LnByb3RvdHlwZS5Obyk7DQp0LmRlZmluZVByb3BlcnR5KHose05vOiJhbGxvd1Jlc2hhcGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnFrfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnFrO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHosImFsbG93UmVzaGFwZSIpLHRoaXMucWs9YSx0aGlzLmooImFsbG93UmVzaGFwZSIsYixhKSl9KTt0LmcoeiwiYWxsb3dSZXNpemUiLHoucHJvdG90eXBlLk9vKTt0LmRlZmluZVByb3BlcnR5KHose09vOiJhbGxvd1Jlc2l6ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmt9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucms7YiE9PWEmJih0LmkoYSwiYm9vbGVhbiIseiwiYWxsb3dSZXNpemUiKSx0aGlzLnJrPWEsdGhpcy5qKCJhbGxvd1Jlc2l6ZSIsYixhKSl9KTt0LmcoeiwiYWxsb3dSb3RhdGUiLHoucHJvdG90eXBlLlBvKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7UG86ImFsbG93Um90YXRlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5za30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zaztiIT09YSYmKHQuaShhLCJib29sZWFuIix6LCJhbGxvd1JvdGF0ZSIpLHRoaXMuc2s9YSx0aGlzLmooImFsbG93Um90YXRlIixiLGEpKX0pO3QuZyh6LCJhbGxvd1NlbGVjdCIsei5wcm90b3R5cGUuUGUpO3QuZGVmaW5lUHJvcGVydHkoeix7UGU6ImFsbG93U2VsZWN0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50a30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy50aztiIT09YSYmKHQuaShhLCJib29sZWFuIix6LCJhbGxvd1NlbGVjdCIpLHRoaXMudGs9YSx0aGlzLmooImFsbG93U2VsZWN0IixiLGEpKX0pO3QuZyh6LCJhbGxvd1VuZG8iLHoucHJvdG90eXBlLk16KTsNCnQuZGVmaW5lUHJvcGVydHkoeix7TXo6ImFsbG93VW5kbyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXV9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaXU7YiE9PWEmJih0LmkoYSwiYm9vbGVhbiIseiwiYWxsb3dVbmRvIiksdGhpcy5pdT1hLHRoaXMuaigiYWxsb3dVbmRvIixiLGEpKX0pO3QuZyh6LCJhbGxvd1pvb20iLHoucHJvdG90eXBlLk5zKTt0LmRlZmluZVByb3BlcnR5KHose05zOiJhbGxvd1pvb20ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmt1fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmt1O2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHosImFsbG93Wm9vbSIpLHRoaXMua3U9YSx0aGlzLmooImFsbG93Wm9vbSIsYixhKSl9KTt0LmcoeiwiaGFzVmVydGljYWxTY3JvbGxiYXIiLHoucHJvdG90eXBlLlRFKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7VEU6Imhhc1ZlcnRpY2FsU2Nyb2xsYmFyIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5PdX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5PdTtiIT09YSYmKHQuaShhLCJib29sZWFuIix6LCJoYXNWZXJ0aWNhbFNjcm9sbGJhciIpLHRoaXMuT3U9YSxJaSh0aGlzKSx0aGlzLmthKCksdGhpcy5qKCJoYXNWZXJ0aWNhbFNjcm9sbGJhciIsYixhKSxCaSh0aGlzKSl9KTt0LmcoeiwiaGFzSG9yaXpvbnRhbFNjcm9sbGJhciIsei5wcm90b3R5cGUuU0UpO3QuZGVmaW5lUHJvcGVydHkoeix7U0U6Imhhc0hvcml6b250YWxTY3JvbGxiYXIifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk51fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLk51O2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHosImhhc0hvcml6b250YWxTY3JvbGxiYXIiKSx0aGlzLk51PWEsSWkodGhpcyksdGhpcy5rYSgpLHRoaXMuaigiaGFzSG9yaXpvbnRhbFNjcm9sbGJhciIsYixhKSxCaSh0aGlzKSl9KTsNCnQuZyh6LCJhbGxvd0hvcml6b250YWxTY3JvbGwiLHoucHJvdG90eXBlLm9mKTt0LmRlZmluZVByb3BlcnR5KHose29mOiJhbGxvd0hvcml6b250YWxTY3JvbGwifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmd1fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmd1O2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHosImFsbG93SG9yaXpvbnRhbFNjcm9sbCIpLHRoaXMuZ3U9YSx0aGlzLmooImFsbG93SG9yaXpvbnRhbFNjcm9sbCIsYixhKSxCaSh0aGlzKSl9KTt0LmcoeiwiYWxsb3dWZXJ0aWNhbFNjcm9sbCIsei5wcm90b3R5cGUucGYpO3QuZGVmaW5lUHJvcGVydHkoeix7cGY6ImFsbG93VmVydGljYWxTY3JvbGwifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmp1fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmp1O2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHosImFsbG93VmVydGljYWxTY3JvbGwiKSx0aGlzLmp1PWEsdGhpcy5qKCJhbGxvd1ZlcnRpY2FsU2Nyb2xsIixiLGEpLEJpKHRoaXMpKX0pOw0KdC5nKHosInNjcm9sbEhvcml6b250YWxMaW5lQ2hhbmdlIix6LnByb3RvdHlwZS5RcCk7dC5kZWZpbmVQcm9wZXJ0eSh6LHtRcDoic2Nyb2xsSG9yaXpvbnRhbExpbmVDaGFuZ2UifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkR2fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkR2O2IhPT1hJiYodC5pKGEsIm51bWJlciIseiwic2Nyb2xsSG9yaXpvbnRhbExpbmVDaGFuZ2UiKSwwPmEmJnQubGEoYSwiPj0gMCIseiwic2Nyb2xsSG9yaXpvbnRhbExpbmVDaGFuZ2UiKSx0aGlzLkR2PWEsdGhpcy5qKCJzY3JvbGxIb3Jpem9udGFsTGluZUNoYW5nZSIsYixhKSl9KTt0Lmcoeiwic2Nyb2xsVmVydGljYWxMaW5lQ2hhbmdlIix6LnByb3RvdHlwZS5ScCk7DQp0LmRlZmluZVByb3BlcnR5KHose1JwOiJzY3JvbGxWZXJ0aWNhbExpbmVDaGFuZ2UifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkV2fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkV2O2IhPT1hJiYodC5pKGEsIm51bWJlciIseiwic2Nyb2xsVmVydGljYWxMaW5lQ2hhbmdlIiksMD5hJiZ0LmxhKGEsIj49IDAiLHosInNjcm9sbFZlcnRpY2FsTGluZUNoYW5nZSIpLHRoaXMuRXY9YSx0aGlzLmooInNjcm9sbFZlcnRpY2FsTGluZUNoYW5nZSIsYixhKSl9KTt0LmcoeiwibGFzdElucHV0Iix6LnByb3RvdHlwZS5SKTt0LmRlZmluZVByb3BlcnR5KHose1I6Imxhc3RJbnB1dCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWN9LGZ1bmN0aW9uKGEpe2UmJnQubChhLGxkLHosImxhc3RJbnB1dCIpO3RoaXMuZWM9YX0pO3QuZyh6LCJmaXJzdElucHV0Iix6LnByb3RvdHlwZS5OYyk7DQp0LmRlZmluZVByb3BlcnR5KHose05jOiJmaXJzdElucHV0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Da30sZnVuY3Rpb24oYSl7ZSYmdC5sKGEsbGQseiwiZmlyc3RJbnB1dCIpO3RoaXMuQ2s9YX0pO3QuZyh6LCJjdXJyZW50Q3Vyc29yIix6LnByb3RvdHlwZS4kYik7dC5kZWZpbmVQcm9wZXJ0eSh6LHskYjoiY3VycmVudEN1cnNvciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuenl9LGZ1bmN0aW9uKGEpeyIiPT09YSYmKGE9dGhpcy5HcSk7dGhpcy56eSE9PWEmJih0LmkoYSwic3RyaW5nIix6LCJjdXJyZW50Q3Vyc29yIiksbnVsbCE9PXRoaXMuamImJih0aGlzLnp5PWEsdGhpcy5qYi5zdHlsZS5jdXJzb3I9YSx0aGlzLk1iLnN0eWxlLmN1cnNvcj1hKSl9KTt0LmcoeiwiZGVmYXVsdEN1cnNvciIsei5wcm90b3R5cGUucEkpOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHtwSToiZGVmYXVsdEN1cnNvciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuR3F9LGZ1bmN0aW9uKGEpeyIiPT09YSYmKGE9ImF1dG8iKTt2YXIgYj10aGlzLkdxO2IhPT1hJiYodC5pKGEsInN0cmluZyIseiwiZGVmYXVsdEN1cnNvciIpLHRoaXMuR3E9YSx0aGlzLmooImRlZmF1bHRDdXJzb3IiLGIsYSkpfSk7dC5nKHosImhhc0dlc3R1cmVab29tIix6LnByb3RvdHlwZS5PSSk7dC5kZWZpbmVQcm9wZXJ0eSh6LHtPSToiaGFzR2VzdHVyZVpvb20ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnZpO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHosImhhc0dlc3R1cmVab29tIiksdGhpcy52aT1hLHRoaXMuaigiaGFzR2VzdHVyZVpvb20iLGIsYSkpfSk7dC5nKHosImNsaWNrIix6LnByb3RvdHlwZS5jbGljayk7DQp0LmRlZmluZVByb3BlcnR5KHose2NsaWNrOiJjbGljayJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubml9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubmk7YiE9PWEmJihudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIix6LCJjbGljayIpLHRoaXMubmk9YSx0aGlzLmooImNsaWNrIixiLGEpKX0pO3QuZyh6LCJkb3VibGVDbGljayIsei5wcm90b3R5cGUuTm0pO3QuZGVmaW5lUHJvcGVydHkoeix7Tm06ImRvdWJsZUNsaWNrIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy50aTtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLHosImRvdWJsZUNsaWNrIiksdGhpcy50aT1hLHRoaXMuaigiZG91YmxlQ2xpY2siLGIsYSkpfSk7dC5nKHosImNvbnRleHRDbGljayIsei5wcm90b3R5cGUuVnMpOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHtWczoiY29udGV4dENsaWNrIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5waX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5waTtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLHosImNvbnRleHRDbGljayIpLHRoaXMucGk9YSx0aGlzLmooImNvbnRleHRDbGljayIsYixhKSl9KTt0LmcoeiwibW91c2VPdmVyIix6LnByb3RvdHlwZS55dCk7dC5kZWZpbmVQcm9wZXJ0eSh6LHt5dDoibW91c2VPdmVyIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5FaX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5FaTtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLHosIm1vdXNlT3ZlciIpLHRoaXMuRWk9YSx0aGlzLmooIm1vdXNlT3ZlciIsYixhKSl9KTt0LmcoeiwibW91c2VIb3ZlciIsei5wcm90b3R5cGUueHQpOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHt4dDoibW91c2VIb3ZlciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRGl9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuRGk7YiE9PWEmJihudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIix6LCJtb3VzZUhvdmVyIiksdGhpcy5EaT1hLHRoaXMuaigibW91c2VIb3ZlciIsYixhKSl9KTt0LmcoeiwibW91c2VIb2xkIix6LnByb3RvdHlwZS53dCk7dC5kZWZpbmVQcm9wZXJ0eSh6LHt3dDoibW91c2VIb2xkIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DaX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5DaTtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLHosIm1vdXNlSG9sZCIpLHRoaXMuQ2k9YSx0aGlzLmooIm1vdXNlSG9sZCIsYixhKSl9KTt0LmcoeiwibW91c2VEcmFnT3ZlciIsei5wcm90b3R5cGUuQ0YpOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHtDRjoibW91c2VEcmFnT3ZlciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuanZ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuanY7YiE9PWEmJihudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIix6LCJtb3VzZURyYWdPdmVyIiksdGhpcy5qdj1hLHRoaXMuaigibW91c2VEcmFnT3ZlciIsYixhKSl9KTt0LmcoeiwibW91c2VEcm9wIix6LnByb3RvdHlwZS52dCk7dC5kZWZpbmVQcm9wZXJ0eSh6LHt2dDoibW91c2VEcm9wIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5CaX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5CaTtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLHosIm1vdXNlRHJvcCIpLHRoaXMuQmk9YSx0aGlzLmooIm1vdXNlRHJvcCIsYixhKSl9KTt0LmcoeiwidG9vbFRpcCIsei5wcm90b3R5cGUuV3QpOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHtXdDoidG9vbFRpcCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2l9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuT2k7YiE9PWEmJihudWxsIT09YSYmdC5sKGEsSmUseiwidG9vbFRpcCIpLHRoaXMuT2k9YSx0aGlzLmooInRvb2xUaXAiLGIsYSkpfSk7dC5nKHosImNvbnRleHRNZW51Iix6LnByb3RvdHlwZS5jb250ZXh0TWVudSk7dC5kZWZpbmVQcm9wZXJ0eSh6LHtjb250ZXh0TWVudToiY29udGV4dE1lbnUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnFpfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnFpO2IhPT1hJiYobnVsbCE9PWEmJnQubChhLEplLHosImNvbnRleHRNZW51IiksdGhpcy5xaT1hLHRoaXMuaigiY29udGV4dE1lbnUiLGIsYSkpfSk7dC5nKHosImNvbW1hbmRIYW5kbGVyIix6LnByb3RvdHlwZS5TZSk7DQp0LmRlZmluZVByb3BlcnR5KHose1NlOiJjb21tYW5kSGFuZGxlciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHl9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucHk7YiE9PWEmJih0LmwoYSxvYSx6LCJjb21tYW5kSGFuZGxlciIpLG51bGwhPT1hLmgmJnQubSgiQ2Fubm90IHNoYXJlIENvbW1hbmRIYW5kbGVycyBiZXR3ZWVuIERpYWdyYW1zOiAiK2EudG9TdHJpbmcoKSksbnVsbCE9PWImJmIud2QobnVsbCksdGhpcy5weT1hLGEud2QodGhpcykpfSk7dC5nKHosInRvb2xNYW5hZ2VyIix6LnByb3RvdHlwZS53Yik7DQp0LmRlZmluZVByb3BlcnR5KHose3diOiJ0b29sTWFuYWdlciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVHZ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuVHY7YiE9PWEmJih0LmwoYSxIZSx6LCJ0b29sTWFuYWdlciIpLG51bGwhPT1hLmgmJnQubSgiQ2Fubm90IHNoYXJlIFRvb2xNYW5hZ2VycyBiZXR3ZWVuIERpYWdyYW1zOiAiK2EudG9TdHJpbmcoKSksbnVsbCE9PWImJmIud2QobnVsbCksdGhpcy5Udj1hLGEud2QodGhpcykpfSk7dC5nKHosImRlZmF1bHRUb29sIix6LnByb3RvdHlwZS51dyk7dC5kZWZpbmVQcm9wZXJ0eSh6LHt1dzoiZGVmYXVsdFRvb2wifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkZ5fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkZ5O2IhPT1hJiYodC5sKGEsYWUseiwiZGVmYXVsdFRvb2wiKSx0aGlzLkZ5PWEsdGhpcy5VYT09PWImJih0aGlzLlVhPWEpKX0pO3QuZyh6LCJjdXJyZW50VG9vbCIsei5wcm90b3R5cGUuVWEpOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHtVYToiY3VycmVudFRvb2wifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkJ5fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkJ5O2lmKG51bGwhPT1iKWZvcihiLmhhJiZiLmRvRGVhY3RpdmF0ZSgpLGIuY2FuY2VsV2FpdEFmdGVyKCksYi5kb1N0b3AoKSxiPXRoaXMuam0uaztiLm5leHQoKTspYi52YWx1ZS5rYSgpO251bGw9PT1hJiYoYT10aGlzLnV3KTtudWxsIT09YSYmKHQubChhLGFlLHosImN1cnJlbnRUb29sIiksdGhpcy5CeT1hLGEud2QodGhpcyksYS5kb1N0YXJ0KCkpfSk7dC5BKHose3NlbGVjdGlvbjoic2VsZWN0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Idn0pO3QuZyh6LCJtYXhTZWxlY3Rpb25Db3VudCIsei5wcm90b3R5cGUudkYpOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHt2RjoibWF4U2VsZWN0aW9uQ291bnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmV2fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmV2O2lmKGIhPT1hKWlmKHQuaShhLCJudW1iZXIiLHosIm1heFNlbGVjdGlvbkNvdW50IiksMDw9YSYmIWlzTmFOKGEpKXtpZih0aGlzLmV2PWEsdGhpcy5qKCJtYXhTZWxlY3Rpb25Db3VudCIsYixhKSwhdGhpcy5qYS5zYiYmKGE9dGhpcy5zZWxlY3Rpb24uY291bnQtYSwwPGEpKXt0aGlzLkJhKCJDaGFuZ2luZ1NlbGVjdGlvbiIpO2Zvcih2YXIgYj10aGlzLnNlbGVjdGlvbi5JZSgpLGM9MDtjPGE7YysrKWJbY10uZWI9ITE7dGhpcy5CYSgiQ2hhbmdlZFNlbGVjdGlvbiIpfX1lbHNlIHQubGEoYSwiPj0gMCIseiwibWF4U2VsZWN0aW9uQ291bnQiKX0pO3QuZyh6LCJub2RlU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUiLHoucHJvdG90eXBlLkhGKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7SEY6Im5vZGVTZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHZ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucHY7YiE9PWEmJih0LmwoYSxKZSx6LCJub2RlU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUiKSx0aGlzLnB2PWEsdGhpcy5qKCJub2RlU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUiLGIsYSkpfSk7dC5nKHosImdyb3VwU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUiLHoucHJvdG90eXBlLk9FKTt0LmRlZmluZVByb3BlcnR5KHose09FOiJncm91cFNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LdX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5LdTtiIT09YSYmKHQubChhLEplLHosImdyb3VwU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUiKSx0aGlzLkt1PWEsdGhpcy5qKCJncm91cFNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlIixiLGEpKX0pOw0KdC5nKHosImxpbmtTZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSIsei5wcm90b3R5cGUuc0YpO3QuZGVmaW5lUHJvcGVydHkoeix7c0Y6ImxpbmtTZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWnV9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuWnU7YiE9PWEmJih0LmwoYSxKZSx6LCJsaW5rU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUiKSx0aGlzLlp1PWEsdGhpcy5qKCJsaW5rU2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGUiLGIsYSkpfSk7dC5BKHose0x3OiJoaWdobGlnaHRlZHMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlB1fSk7dC5nKHosImlzTW9kaWZpZWQiLHoucHJvdG90eXBlLmhoKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7aGg6ImlzTW9kaWZpZWQifSxmdW5jdGlvbigpe3ZhciBhPXRoaXMuamE7cmV0dXJuIGEuaXNFbmFibGVkP251bGwhPT1hLllpPyEwOnRoaXMuYXomJnRoaXMuVWchPT1hLmNqOnRoaXMuYXp9LGZ1bmN0aW9uKGEpe2lmKHRoaXMuYXohPT1hKXt0LmkoYSwiYm9vbGVhbiIseiwiaXNNb2RpZmllZCIpO3RoaXMuYXo9YTt2YXIgYj10aGlzLmphOyFhJiZiLmlzRW5hYmxlZCYmKHRoaXMuVWc9Yi5jaik7YXx8aWoodGhpcyl9fSk7ZnVuY3Rpb24gaWooYSl7dmFyIGI9YS5oaDthLkREIT09YiYmKGEuREQ9YixhLkJhKCJNb2RpZmllZCIpKX10LmcoeiwibW9kZWwiLHoucHJvdG90eXBlLmJhKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7YmE6Im1vZGVsIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5rZTtpZihiIT09YSl7dC5sKGEsRix6LCJtb2RlbCIpO3RoaXMuVWEuZG9DYW5jZWwoKTtudWxsIT09YiYmYi5qYSE9PWEuamEmJmIuamEuZUYmJnQubSgiRG8gbm90IHJlcGxhY2UgYSBEaWFncmFtLm1vZGVsIHdoaWxlIGEgdHJhbnNhY3Rpb24gaXMgaW4gcHJvZ3Jlc3MuIik7dGhpcy5aYi5tbigpO3RoaXMuancoKTt0aGlzLmxmPSExO3RoaXMuUW49ITA7dGhpcy5VZz0tMjt0aGlzLk5mPSExO3ZhciBjPXRoaXMuemQ7dGhpcy56ZD0hMDt0aGlzLlpiLnRsKCk7bnVsbCE9PWImJihiLlZBKHRoaXMuSEMpLGIgaW5zdGFuY2VvZiBQJiZqaih0aGlzLGIuaGopLGpqKHRoaXMsYi5HZykpO3RoaXMua2U9YTthLkp6KHRoaXMuR0MpO2tqKHRoaXMsYS5HZyk7YSBpbnN0YW5jZW9mIFAmJmxqKHRoaXMsYS5oaik7YS5WQSh0aGlzLkdDKTthLkp6KHRoaXMuSEMpOw0KdGhpcy56ZD1jO3RoaXMuWGJ8fHRoaXMua2EoKTtudWxsIT09YiYmKGEuamEuaXNFbmFibGVkPWIuamEuaXNFbmFibGVkKX19KTt0LmRlZmluZVByb3BlcnR5KHose05hOm51bGx9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuekN9LGZ1bmN0aW9uKGEpe3RoaXMuekM9YX0pOw0KZnVuY3Rpb24gWGgoYSxiKXtpZihiLmJhPT09YS5iYSl7dmFyIGM9Yi50ZCxkPWIucHJvcGVydHlOYW1lO2lmKGM9PT11ZCYmIlMiPT09ZFswXSlpZigiU3RhcnRpbmdGaXJzdFRyYW5zYWN0aW9uIj09PWQpe2M9YS53Yjtmb3IoZD1jLmVmLms7ZC5uZXh0KCk7KWQudmFsdWUud2QoYSk7Zm9yKGQ9Yy5EZy5rO2QubmV4dCgpOylkLnZhbHVlLndkKGEpO2ZvcihkPWMuRWcuaztkLm5leHQoKTspZC52YWx1ZS53ZChhKTthLnpkfHxhLmxmfHwoYS5DdT0hMCxhLlFuJiYoYS5OZj0hMCksYS5saS50bCgpKX1lbHNlIGlmKCJTdGFydGluZ1VuZG8iPT09ZHx8IlN0YXJ0aW5nUmVkbyI9PT1kKXt2YXIgZj1hLlpiO2YueWcmJiFhLldhJiZmLm1uKCk7YS5CYSgiQ2hhbmdpbmdTZWxlY3Rpb24iKX1lbHNlIlN0YXJ0ZWRUcmFuc2FjdGlvbiI9PT1kJiYoZj1hLlpiLGYueWcmJiFhLldhJiZmLm1uKCksYS5XdSYmZi50bCgpKTtlbHNlIGlmKGEuTmEpe2EuTmE9ITE7dHJ5e3ZhciBnPWIuQWY7aWYoIiIhPT0NCmcpaWYoYz09PXZkKXtpZigibGlua0Zyb21LZXkiPT09Zyl7dmFyIGg9Yi5vYmplY3Qsaz1hLlFmKGgpO2lmKG51bGwhPT1rKXt2YXIgbD1iLm5ld1ZhbHVlLG09YS5WZShsKTtrLmFhPW19fWVsc2UgaWYoImxpbmtUb0tleSI9PT1nKWg9Yi5vYmplY3Qsaz1hLlFmKGgpLG51bGwhPT1rJiYobD1iLm5ld1ZhbHVlLG09YS5WZShsKSxrLmNhPW0pO2Vsc2UgaWYoImxpbmtGcm9tUG9ydElkIj09PWcpe2lmKGg9Yi5vYmplY3Qsaz1hLlFmKGgpLG51bGwhPT1rKXt2YXIgbj1iLm5ld1ZhbHVlOyJzdHJpbmciPT09dHlwZW9mIG4mJihrLlJmPW4pfX1lbHNlIGlmKCJsaW5rVG9Qb3J0SWQiPT09ZyloPWIub2JqZWN0LGs9YS5RZihoKSxudWxsIT09ayYmKG49Yi5uZXdWYWx1ZSwic3RyaW5nIj09PXR5cGVvZiBuJiYoay5PZz1uKSk7ZWxzZSBpZigibm9kZUdyb3VwS2V5Ij09PWcpe3ZhciBoPWIub2JqZWN0LHA9YS5naChoKTtpZihudWxsIT09cCl7dmFyIHE9Yi5uZXdWYWx1ZTtpZih2b2lkIDAhPT0NCnEpe3ZhciByPWEuVmUocSk7cC5nYj1yIGluc3RhbmNlb2YgVD9yOm51bGx9ZWxzZSBwLmdiPW51bGx9fWVsc2UgaWYoImxpbmtMYWJlbEtleXMiPT09Zyl7aWYoaD1iLm9iamVjdCxrPWEuUWYoaCksbnVsbCE9PWspe3ZhciBzPWIub2xkVmFsdWUsdT1iLm5ld1ZhbHVlO2lmKHQuaXNBcnJheShzKSlmb3IodmFyIHY9dC52YihzKSxEPTA7RDx2O0QrKyl7dmFyIEE9dC5tYihzLEQpLG09YS5WZShBKTtudWxsIT09bSYmKG0uJGQ9bnVsbCl9aWYodC5pc0FycmF5KHUpKWZvcih2PXQudmIodSksRD0wO0Q8djtEKyspQT10Lm1iKHUsRCksbT1hLlZlKEEpLG51bGwhPT1tJiYobS4kZD1rKX19ZWxzZSBpZigibm9kZVBhcmVudEtleSI9PT1nKXt2YXIgRz1iLm9iamVjdCxMPWEuVmUoYi5uZXdWYWx1ZSksTj1hLkV3KEcpO2lmKG51bGwhPT1OKXt2YXIgTz1OLmV0KCk7bnVsbCE9PU8/bnVsbD09PUw/YS5yZW1vdmUoTyk6YS5wZD9PLmFhPUw6Ty5jYT1MOm1qKGEsTCxOKX19ZWxzZSBpZigicGFyZW50TGlua0NhdGVnb3J5Ij09PQ0KZyl7dmFyIEc9Yi5vYmplY3QsTj1hLkV3KEcpLFU9Yi5uZXdWYWx1ZTtudWxsIT09TiYmInN0cmluZyI9PT10eXBlb2YgVSYmKE89Ti5ldCgpLG51bGwhPT1PJiYoTy5aYz1VKSl9ZWxzZSBpZigibm9kZUNhdGVnb3J5Ij09PWcpe3ZhciBoPWIub2JqZWN0LFk9YS5naChoKSxVPWIubmV3VmFsdWU7bnVsbCE9PVkmJiJzdHJpbmciPT09dHlwZW9mIFUmJihZLlpjPVUpfWVsc2UgaWYoImxpbmtDYXRlZ29yeSI9PT1nKXt2YXIgaD1iLm9iamVjdCxiYT1hLlFmKGgpLFU9Yi5uZXdWYWx1ZTtudWxsIT09YmEmJiJzdHJpbmciPT09dHlwZW9mIFUmJihiYS5aYz1VKX1lbHNlIGlmKCJub2RlRGF0YUFycmF5Ij09PWcpe2Eua2EoKTt2YXIgUj1iLm9sZFZhbHVlO2pqKGEsUik7dmFyIHhhPWIubmV3VmFsdWU7a2ooYSx4YSl9ZWxzZSJsaW5rRGF0YUFycmF5Ij09PWcmJihhLmthKCksUj1iLm9sZFZhbHVlLGpqKGEsUikseGE9Yi5uZXdWYWx1ZSxsaihhLHhhKSk7YS5oaD0hMH1lbHNlIGlmKGM9PT0NCndkKXhhPWIubmV3VmFsdWUsIm5vZGVEYXRhQXJyYXkiPT09ZyYmdC5yYih4YSk/bmooYSx4YSk6ImxpbmtEYXRhQXJyYXkiPT09ZyYmdC5yYih4YSk/b2ooYSx4YSk6ImxpbmtMYWJlbEtleXMiPT09ZyYmb2UoeGEpJiYoaz1hLlFmKGIub2JqZWN0KSxtPWEuVmUoeGEpLG51bGwhPT1rJiZudWxsIT09bSYmKG0uJGQ9aykpLGEuaGg9ITA7ZWxzZSBpZihjPT09eGQpUj1iLm9sZFZhbHVlLCJub2RlRGF0YUFycmF5Ij09PWcmJnQucmIoUik/cGooYSxSKToibGlua0RhdGFBcnJheSI9PT1nJiZ0LnJiKFIpP3BqKGEsUik6ImxpbmtMYWJlbEtleXMiPT09ZyYmb2UoUikmJihtPWEuVmUoUiksbnVsbCE9PW0mJihtLiRkPW51bGwpKSxhLmhoPSEwO2Vsc2V7aWYoYz09PXVkJiYiU291cmNlQ2hhbmdlZCI9PT1nKXt2YXIgcD1hLmdoKGIub2JqZWN0KSxZYT1iLnByb3BlcnR5TmFtZTtudWxsIT09cCYmInN0cmluZyI9PT10eXBlb2YgWWEmJihwLlFiKFlhKSxhLmJhIGluc3RhbmNlb2YgS2QmJg0KKGs9YS5RZihiLm9iamVjdCksbnVsbCE9PWsmJmsuUWIoWWEpKSl9fWVsc2UgaWYoYz09PXZkKXt2YXIgemE9Yi5wcm9wZXJ0eU5hbWUsaD1iLm9iamVjdDtpZihoPT09YS5iYSl7aWYoIm5vZGVLZXlQcm9wZXJ0eSI9PT16YXx8Im5vZGVDYXRlZ29yeVByb3BlcnR5Ij09PXphfHwibGlua0Zyb21LZXlQcm9wZXJ0eSI9PT16YXx8ImxpbmtUb0tleVByb3BlcnR5Ij09PXphfHwibGlua0Zyb21Qb3J0SWRQcm9wZXJ0eSI9PT16YXx8ImxpbmtUb1BvcnRJZFByb3BlcnR5Ij09PXphfHwibGlua0xhYmVsS2V5c1Byb3BlcnR5Ij09PXphfHwibm9kZUlzR3JvdXBQcm9wZXJ0eSI9PT16YXx8Im5vZGVHcm91cEtleVByb3BlcnR5Ij09PXphfHwibm9kZVBhcmVudEtleVByb3BlcnR5Ij09PXphfHwibGlua0NhdGVnb3J5UHJvcGVydHkiPT09emEpYS5qYS5zYnx8YS5nbigpfWVsc2UgV2goYSxoLHphKTthLmhoPSEwfWVsc2UgaWYoYz09PXdkfHxjPT09eGQpcWooYSxiKSxhLmhoPSEwO2Vsc2UgaWYoYz09PQ0KdWQpe2lmKCJGaW5pc2hlZFVuZG8iPT09ZHx8IkZpbmlzaGVkUmVkbyI9PT1kKWEuamEueGk9ITAsYS5CYSgiQ2hhbmdlZFNlbGVjdGlvbiIpLHppKGEpLGEuamEueGk9ITE7YS5DdT0hMDthLlVmKCk7Zj1hLmxpO2Yuc2QmJjA9PT1hLmphLkplJiZEaChmKTsiQ29tbWl0dGVkVHJhbnNhY3Rpb24iPT09ZCYmYS5qYS5keiYmKGEuVWc9TWF0aC5taW4oYS5VZyxhLmphLmNqLTEpKTtpaihhKTthLmt6fHwiQ29tbWl0dGVkVHJhbnNhY3Rpb24iIT09ZHx8KGEua3o9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe2EuVWEuc3RhbmRhcmRNb3VzZU92ZXIoKTthLmt6PSExfSwxMCkpfX1maW5hbGx5e2EuTmE9ITB9fX19DQpmdW5jdGlvbiBXaChhLGIsYyl7dmFyIGQ9YS5naChiKTtpZihudWxsIT09ZCYmInN0cmluZyI9PT10eXBlb2YgYylkLlFiKGMpLGEuYmEgaW5zdGFuY2VvZiBLZCYmKGI9YS5RZihiKSxudWxsIT09YiYmYi5RYihjKSk7ZWxzZSBpZigic3RyaW5nIj09PXR5cGVvZiBjKXtkPW51bGw7Zm9yKGE9YS5ZbC5rO2EubmV4dCgpOyl7Zm9yKHZhciBmPWEudmFsdWUsZz0wO2c8Zi5sZW5ndGg7ZysrKXt2YXIgaD1mW2ddO251bGwhPT1oLmdnJiYoaD1oLmdnLnphKGIpLG51bGwhPT1oJiYobnVsbD09PWQmJihkPXQuQ2IoKSksZC5wdXNoKGgpKSl9aWYobnVsbCE9PWQpYnJlYWt9Yj1kO2lmKG51bGwhPT1iKXtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCsrKWJbZF0uUWIoYyk7dC55YShiKX19fXQuZyh6LCJza2lwc01vZGVsU291cmNlQmluZGluZ3MiLHoucHJvdG90eXBlLlJ0KTsNCnQuZGVmaW5lUHJvcGVydHkoeix7UnQ6InNraXBzTW9kZWxTb3VyY2VCaW5kaW5ncyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZUR9LGZ1bmN0aW9uKGEpe3RoaXMuZUQ9YX0pO2Z1bmN0aW9uIHFqKGEsYil7dmFyIGM9Yi50ZD09PXdkLGQ9Yz9iLldmOmIuWWYsZj1jP2IubmV3VmFsdWU6Yi5vbGRWYWx1ZSxnPWEuWWwuemEoYi5vYmplY3QpO2lmKEFycmF5LmlzQXJyYXkoZykmJiJudW1iZXIiPT09dHlwZW9mIGQpZm9yKHZhciBoPTA7aDxnLmxlbmd0aDtoKyspe3ZhciBrPWdbaF07ay50eXBlIT09U2cmJmsudHlwZSE9PWNpfHxkKys7Yz9yaihrLGYsZCk6KGsuWGUoZCksc2ooayxkLTEpKX19ZnVuY3Rpb24gYWooYSxiKXt2YXIgYz1iLnlpO2lmKHQuaXNBcnJheShjKSl7dmFyIGQ9YS5ZbC56YShjKTtpZihudWxsPT09ZClhLllsLmFkZChjLFtiXSk7ZWxzZXtmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKWlmKGRbY109PT1iKXJldHVybjtkLnB1c2goYil9fX0NCmZ1bmN0aW9uIGRqKGEsYil7dmFyIGM9Yi55aTtpZih0LmlzQXJyYXkoYykpe3ZhciBkPWEuWWwuemEoYyk7aWYobnVsbCE9PWQpZm9yKHZhciBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXT09PWIpe2Quc3BsaWNlKGYsMSk7MD09PWQubGVuZ3RoJiZhLllsLnJlbW92ZShjKTticmVha319fQ0Kei5wcm90b3R5cGUuY2xlYXI9ei5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgYT1udWxsO251bGwhPT10aGlzLmdkJiYoYT10aGlzLmdkLlMpO3RoaXMuYmEuY2xlYXIoKTtmb3IodmFyIGI9dGhpcy5TYi5sZW5ndGgsYz0wO2M8YjtjKyspdGhpcy5TYi5uW2NdLmNsZWFyKCk7dGhpcy5mZy5jbGVhcigpO3RoaXMuUGwuY2xlYXIoKTt0aGlzLnF2LmNsZWFyKCk7dGhpcy5Uay5jbGVhcigpO3RoaXMuJHUuY2xlYXIoKTt0aGlzLkZiLmNsZWFyKCk7dGhpcy5yaS5jbGVhcigpO3RoaXMuemsuY2xlYXIoKTt0aGlzLllsLmNsZWFyKCk7dGhpcy5Idi5MYSgpO3RoaXMuSHYuY2xlYXIoKTt0aGlzLkh2LmZyZWV6ZSgpO3RoaXMuUHUuTGEoKTt0aGlzLlB1LmNsZWFyKCk7dGhpcy5QdS5mcmVlemUoKTt0aGlzLkJuPW51bGw7dC5Tcz1udWxsO3RoaXMuRHU9KG5ldyB4KE5hTixOYU4sTmFOLE5hTikpLmZyZWV6ZSgpO251bGwhPT1hJiYodGhpcy5hZGQoYSksdGhpcy5GYi5yZW1vdmUoYSkpOw0KdGhpcy5rYSgpfTsNCnoucHJvdG90eXBlLnJlc2V0PXoucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5YYj0hMDt0aGlzLmNsZWFyKCk7dGhpcy5TYj1uZXcgQigkZCk7dGhpcy5Saz17fTt0aGlzLlNGKCk7dGhpcy5NYT0obmV3IHcoTmFOLE5hTikpLmZyZWV6ZSgpO3RoaXMud2M9MTt0aGlzLlJ1PShuZXcgdyhOYU4sTmFOKSkuZnJlZXplKCk7dGhpcy5TdT1OYU47dGhpcy5ndj0xRS00O3RoaXMuZHY9MTAwO3RoaXMuWnY9KG5ldyB3KE5hTixOYU4pKS5mcmVlemUoKTt0aGlzLkl1PShuZXcgeChOYU4sTmFOLE5hTixOYU4pKS5mcmVlemUoKTt0aGlzLkZsPVhlO3RoaXMuQW49eGI7dGhpcy5Haz1YZTt0aGlzLlhuPXhiO3RoaXMuVHU9dGhpcy5RdT1FYjt0aGlzLm51PShuZXcgYWIoMTYsMTYsMTYsMTYpKS5mcmVlemUoKTt0aGlzLlZ1PSEwO3RoaXMuVnY9ZGc7dGhpcy5HcT0iYXV0byI7dGhpcy5xaT10aGlzLk9pPXRoaXMuQmk9dGhpcy5qdj10aGlzLkNpPXRoaXMuRGk9dGhpcy5FaT10aGlzLnBpPQ0KdGhpcy50aT10aGlzLm5pPW51bGw7dGhpcy5Jaz0hMTt0aGlzLmxrPXRoaXMua2s9dGhpcy5kdT10aGlzLkxlPSEwO3RoaXMuZnU9dGhpcy5ldT0hMTt0aGlzLmp1PXRoaXMuZ3U9dGhpcy5PdT10aGlzLk51PXRoaXMua3U9dGhpcy5pdT10aGlzLnRrPXRoaXMuc2s9dGhpcy5yaz10aGlzLnFrPXRoaXMub2s9dGhpcy5waz10aGlzLm5rPXRoaXMuaHU9dGhpcy52az10aGlzLm1rPXRoaXMudWs9ITA7dGhpcy5Fdj10aGlzLkR2PTE2O3RoaXMuTmU9KG5ldyBhYig1KSkuZnJlZXplKCk7dGhpcy5ldj05OTk5OTk5OTk7dGhpcy5QZD1udWxsO1poKHRoaXMpO3RoaXMuZ2Q9bnVsbDt0aGlzLkxpPSEwO1loKHRoaXMpO3RoaXMuamM9bmV3IGJlO3RoaXMuTGk9ITE7dGhpcy5iYT1uZXcgUDt0aGlzLmxmPSExO3RoaXMuUW49ITA7dGhpcy5YYj10aGlzLk5mPSExO3RoaXMua2EoKX07DQp6LnByb3RvdHlwZS5yZWJ1aWxkUGFydHM9ei5wcm90b3R5cGUuZ249ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5neC5rO2EubmV4dCgpOyl7dmFyIGI9YS52YWx1ZTsoIWIuTGQoKXx8YiBpbnN0YW5jZW9mIFQpJiZ0Lm0oJ0ludmFsaWQgbm9kZSB0ZW1wbGF0ZSBpbiBEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcDogdGVtcGxhdGUgZm9yICInK2Eua2V5KyciIG11c3QgYmUgYSBOb2RlIG9yIGEgc2ltcGxlIFBhcnQsIG5vdCBhIEdyb3VwIG9yIExpbms6ICcrYil9Zm9yKGE9dGhpcy5Kdy5rO2EubmV4dCgpOyliPWEudmFsdWUsYiBpbnN0YW5jZW9mIFR8fHQubSgnSW52YWxpZCBncm91cCB0ZW1wbGF0ZSBpbiBEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXA6IHRlbXBsYXRlIGZvciAiJythLmtleSsnIiBtdXN0IGJlIGEgR3JvdXAsIG5vdCBhIG5vcm1hbCBOb2RlIG9yIExpbms6ICcrYik7Zm9yKGE9dGhpcy4kdy5rO2EubmV4dCgpOyliPWEudmFsdWUsYiBpbnN0YW5jZW9mIFZ8fHQubSgnSW52YWxpZCBsaW5rIHRlbXBsYXRlIGluIERpYWdyYW0ubGlua1RlbXBsYXRlTWFwOiB0ZW1wbGF0ZSBmb3IgIicrDQphLmtleSsnIiBtdXN0IGJlIGEgTGluaywgbm90IGEgbm9ybWFsIE5vZGUgb3Igc2ltcGxlIFBhcnQ6ICcrYik7YT10LkNiKCk7Zm9yKGI9dGhpcy5zZWxlY3Rpb24uaztiLm5leHQoKTspe3ZhciBjPWIudmFsdWUuZGF0YTtjJiZhLnB1c2goYyl9Zm9yKHZhciBiPXQuQ2IoKSxkPXRoaXMuTHcuaztkLm5leHQoKTspKGM9ZC52YWx1ZS5kYXRhKSYmYi5wdXNoKGMpO2Zvcih2YXIgYz10LkNiKCksZj10aGlzLmtoLms7Zi5uZXh0KCk7KWQ9Zi52YWx1ZSxkLmRhdGEmJihjLnB1c2goZC5kYXRhKSxjLnB1c2goZC5sb2NhdGlvbikpO2ZvcihmPXRoaXMubGlua3MuaztmLm5leHQoKTspZD1mLnZhbHVlLGQuZGF0YSYmKGMucHVzaChkLmRhdGEpLGMucHVzaChkLmxvY2F0aW9uKSk7Zm9yKGY9dGhpcy5ybC5rO2YubmV4dCgpOylkPWYudmFsdWUsZC5kYXRhJiYoYy5wdXNoKGQuZGF0YSksYy5wdXNoKGQubG9jYXRpb24pKTtkPXRoaXMuYmE7ZCBpbnN0YW5jZW9mIFAmJmpqKHRoaXMsZC5oaik7DQpqaih0aGlzLGQuR2cpO2tqKHRoaXMsZC5HZyk7ZCBpbnN0YW5jZW9mIFAmJmxqKHRoaXMsZC5oaik7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylpZihmPXRoaXMuZ2goYVtkXSkpZi5lYj0hMDtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCsrKWlmKGY9dGhpcy5naChiW2RdKSlmLnpnPSEwO2ZvcihkPTA7ZDxjLmxlbmd0aDtkKz0yKWlmKGY9dGhpcy5naChjW2RdKSlmLmxvY2F0aW9uPWNbZCsxXTt0LnlhKGEpO3QueWEoYik7dC55YShjKX07DQpmdW5jdGlvbiBraihhLGIpe2lmKG51bGwhPT1iKXtmb3IodmFyIGM9YS5iYSxkPXQudmIoYiksZj0wO2Y8ZDtmKyspe3ZhciBnPXQubWIoYixmKTtjLm5lKGcpP25qKGEsZywhMSk6YyBpbnN0YW5jZW9mIFAmJm9qKGEsZyl9aWYoYyBpbnN0YW5jZW9mIFB8fGMgaW5zdGFuY2VvZiBLZCl7Zm9yKGY9MDtmPGQ7ZisrKWc9dC5tYihiLGYpLGMubmUoZykmJnZqKGEsZyk7aWYoYyBpbnN0YW5jZW9mIFApZm9yKGM9YS5saW5rcztjLm5leHQoKTspR2ooYy52YWx1ZSl9SGooYSwhMSl9fQ0KZnVuY3Rpb24gbmooYSxiLGMpe2lmKHZvaWQgMCE9PWImJm51bGwhPT1iJiYhYS5qYS5zYiYmIWEucmkuY29udGFpbnMoYikpe3ZvaWQgMD09PWMmJihjPSEwKTt2YXIgZD1hLmdldENhdGVnb3J5Rm9yTm9kZURhdGEoYiksZj1hLmZpbmRUZW1wbGF0ZUZvck5vZGVEYXRhKGIsZCk7ZiBpbnN0YW5jZW9mIEUmJihMZShmKSxmPWYuY29weSgpLGYgaW5zdGFuY2VvZiBFJiYoZi5zaD1kLGEudW4mJihmLkprPSJUb29sIiksYS5hZGQoZiksZi5kYXRhPWIsYyYmdmooYSxiKSkpfX16LnByb3RvdHlwZS5nZXRDYXRlZ29yeUZvck5vZGVEYXRhPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYmEsYz1iLmdldENhdGVnb3J5Rm9yTm9kZURhdGEoYSksZD0hMTtiIGluc3RhbmNlb2YgUCYmKGQ9Yi5ZSShhKSk7ZCYmIiI9PT1jJiYoYz0iTGlua0xhYmVsIik7cmV0dXJuIGN9Ow0Kei5wcm90b3R5cGUuZmluZFRlbXBsYXRlRm9yTm9kZURhdGE9ZnVuY3Rpb24oYSxiKXt2YXIgYz0hMSxkPXRoaXMuYmE7ZCBpbnN0YW5jZW9mIFAmJihjPWQudEEoYSkpO2M/KGM9dGhpcy5Kdy56YShiKSxudWxsPT09YyYmKGM9dGhpcy5Kdy56YSgiIiksbnVsbD09PWMmJih0LlVHfHwodC5VRz0hMCx0LnRyYWNlKCdObyBHcm91cCB0ZW1wbGF0ZSBmb3VuZCBmb3IgY2F0ZWdvcnkgIicrYisnIicpLHQudHJhY2UoIiAgVXNpbmcgZGVmYXVsdCBncm91cCB0ZW1wbGF0ZSIpKSxjPXRoaXMuVkIpKSk6KGM9dGhpcy5neC56YShiKSxudWxsPT09YyYmKGM9dGhpcy5neC56YSgiIiksbnVsbD09PWMmJih0LlhHfHwodC5YRz0hMCx0LnRyYWNlKCdObyBOb2RlIHRlbXBsYXRlIGZvdW5kIGZvciBjYXRlZ29yeSAiJytiKyciJyksdC50cmFjZSgiICBVc2luZyBkZWZhdWx0IG5vZGUgdGVtcGxhdGUiKSksYz10aGlzLlhCKSkpO3JldHVybiBjIGluc3RhbmNlb2YgRT9jOm51bGx9Ow0KZnVuY3Rpb24gdmooYSxiKXt2YXIgYz1hLmJhO2lmKGMgaW5zdGFuY2VvZiBQfHxjIGluc3RhbmNlb2YgS2Qpe3ZhciBkPWMuSGIoYik7aWYodm9pZCAwIT09ZCl7dmFyIGY9cGUoYyxkKSxnPWEuZ2goYik7aWYobnVsbCE9PWYmJm51bGwhPT1nKXtmb3IoZj1mLms7Zi5uZXh0KCk7KXt2YXIgaD1mLnZhbHVlO2lmKGMgaW5zdGFuY2VvZiBQKWlmKGMubmUoaCkpe2lmKGcgaW5zdGFuY2VvZiBUJiZjLlJtKGgpPT09ZCl7dmFyIGs9YS5naChoKTtudWxsIT09ayYmKGsuZ2I9Zyl9fWVsc2V7aWYoaz1hLlFmKGgpLG51bGwhPT1rJiZnIGluc3RhbmNlb2YgUyYmKGMuaGwoaCk9PT1kJiYoay5hYT1nKSxjLmxsKGgpPT09ZCYmKGsuY2E9ZyksaD1jLmpsKGgpLHQuaXNBcnJheShoKSkpZm9yKHZhciBsPTA7bDx0LnZiKGgpO2wrKylpZih0Lm1iKGgsbCk9PT1kKXtnLiRkPWs7YnJlYWt9fWVsc2UgYyBpbnN0YW5jZW9mIEtkJiZjLm5lKGgpJiZnIGluc3RhbmNlb2YgUyYmYy5TbShoKT09PWQmJg0KKGs9YS5FdyhoKSxtaihhLGcsaykpfXJlKGMsZCl9YyBpbnN0YW5jZW9mIFA/KGM9Yy5SbShiKSx2b2lkIDAhPT1jJiYoYz1hLlZlKGMpLGMgaW5zdGFuY2VvZiBUJiYoZy5nYj1jKSkpOmMgaW5zdGFuY2VvZiBLZCYmKGM9Yy5TbShiKSx2b2lkIDAhPT1jJiZnIGluc3RhbmNlb2YgUyYmKGM9YS5WZShjKSxtaihhLGMsZykpKX19fQ0KZnVuY3Rpb24gbWooYSxiLGMpe2lmKG51bGwhPT1iJiZudWxsIT09Yyl7dmFyIGQ9YS53Yi5CQSxmPWIsZz1jO2lmKGEucGQpZm9yKGI9Zy5xZTtiLm5leHQoKTspe3ZhciBoPWIudmFsdWU7aWYoaC5jYT09PWcpcmV0dXJufWVsc2UgZm9yKGY9YyxnPWIsYj1mLnFlO2IubmV4dCgpOylpZihoPWIudmFsdWUsaC5hYT09PWYpcmV0dXJuO251bGwhPT1kJiZsZyhkLGYsZyxudWxsLCEwKXx8KGQ9YS5nZXRDYXRlZ29yeUZvckxpbmtEYXRhKGMuZGF0YSksYj1hLmZpbmRUZW1wbGF0ZUZvckxpbmtEYXRhKGMuZGF0YSxkKSxiIGluc3RhbmNlb2YgViYmKExlKGIpLGI9Yi5jb3B5KCksYiBpbnN0YW5jZW9mIFYmJihiLnNoPWQsYi5hYT1mLGIuY2E9ZyxhLmFkZChiKSxiLmRhdGE9Yy5kYXRhKSkpfX1mdW5jdGlvbiBsaihhLGIpe2lmKG51bGwhPT1iKXtmb3IodmFyIGM9dC52YihiKSxkPTA7ZDxjO2QrKyl7dmFyIGY9dC5tYihiLGQpO29qKGEsZil9SGooYSwhMSl9fQ0KZnVuY3Rpb24gb2ooYSxiKXtpZih2b2lkIDAhPT1iJiZudWxsIT09YiYmIWEuamEuc2ImJiFhLnprLmNvbnRhaW5zKGIpKXt2YXIgYz1hLmdldENhdGVnb3J5Rm9yTGlua0RhdGEoYiksZD1hLmZpbmRUZW1wbGF0ZUZvckxpbmtEYXRhKGIsYyk7aWYoZCBpbnN0YW5jZW9mIFYmJihMZShkKSxkPWQuY29weSgpLGQgaW5zdGFuY2VvZiBWKSl7ZC5zaD1jO3ZhciBjPWEuYmEsZj1jLklJKGIpOyIiIT09ZiYmKGQuUmY9Zik7Zj1jLmhsKGIpO3ZvaWQgMCE9PWYmJihmPWEuVmUoZiksZiBpbnN0YW5jZW9mIFMmJihkLmFhPWYpKTtmPWMuTEkoYik7IiIhPT1mJiYoZC5PZz1mKTtmPWMubGwoYik7dm9pZCAwIT09ZiYmKGY9YS5WZShmKSxmIGluc3RhbmNlb2YgUyYmKGQuY2E9ZikpO2M9Yy5qbChiKTtpZih0LmlzQXJyYXkoYykpZm9yKHZhciBmPXQudmIoYyksZz0wO2c8ZjtnKyspe3ZhciBoPXQubWIoYyxnKSxoPWEuVmUoaCk7bnVsbCE9PWgmJihoLiRkPWQpfWEuYWRkKGQpO2QuZGF0YT1ifX19DQp6LnByb3RvdHlwZS5nZXRDYXRlZ29yeUZvckxpbmtEYXRhPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYmEsYz0iIjtiIGluc3RhbmNlb2YgUD9jPWIuZ2V0Q2F0ZWdvcnlGb3JMaW5rRGF0YShhKTpiIGluc3RhbmNlb2YgS2QmJihjPWIuS0koYSkpO3JldHVybiBjfTt6LnByb3RvdHlwZS5maW5kVGVtcGxhdGVGb3JMaW5rRGF0YT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuJHcuemEoYik7bnVsbD09PWMmJihjPXRoaXMuJHcuemEoIiIpLG51bGw9PT1jJiYodC5XR3x8KHQuV0c9ITAsdC50cmFjZSgnTm8gTGluayB0ZW1wbGF0ZSBmb3VuZCBmb3IgY2F0ZWdvcnkgIicrYisnIicpLHQudHJhY2UoIiAgVXNpbmcgZGVmYXVsdCBsaW5rIHRlbXBsYXRlIikpLGM9dGhpcy5XQikpO3JldHVybiBjIGluc3RhbmNlb2YgVj9jOm51bGx9O2Z1bmN0aW9uIGpqKGEsYil7Zm9yKHZhciBjPXQudmIoYiksZD0wO2Q8YztkKyspe3ZhciBmPXQubWIoYixkKTtwaihhLGYpfX0NCmZ1bmN0aW9uIHBqKGEsYil7aWYodm9pZCAwIT09YiYmbnVsbCE9PWIpe3ZhciBjPWEuZ2goYik7aWYoYyBpbnN0YW5jZW9mIEUpe2MuZWI9ITE7Yy56Zz0hMTt2YXIgZD1jLmxheWVyO2lmKG51bGwhPT1kJiZkLmg9PT1hKXt2YXIgZj1hLmJhO2lmKGYgaW5zdGFuY2VvZiBQJiZjIGluc3RhbmNlb2YgUyl7dmFyIGc9Zi5IYihjLmRhdGEpO2lmKHZvaWQgMCE9PWcpe2Zvcih2YXIgaD1jLnFlO2gubmV4dCgpOyl7dmFyIGs9aC52YWx1ZS5kYXRhO3FlKGYsZyxrKX1jLmNpJiYoaD1jLiRkLG51bGwhPT1oJiYoaz1oLmRhdGEscWUoZixnLGspKSk7aWYoYyBpbnN0YW5jZW9mIFQpZm9yKGg9Yy5SYztoLm5leHQoKTspaz1oLnZhbHVlLmRhdGEsZi5uZShrKSYmcWUoZixnLGspfX1lbHNlIGlmKGYgaW5zdGFuY2VvZiBLZCYmYyBpbnN0YW5jZW9mIFMpe2g9YS5RZihjLmRhdGEpO2lmKG51bGwhPT1oJiYoaC5lYj0hMSxoLnpnPSExLGs9aC5sYXllcixudWxsIT09aykpe3ZhciBsPWsuWGUoLTEsDQpoLCExKTswPD1sJiZhLkljKHhkLCJwYXJ0cyIsayxoLG51bGwsbCxudWxsKTtsPWgudHA7bnVsbCE9PWwmJmwoaCxrLG51bGwpfWg9YS5wZDtmb3Ioaz1jLnFlO2submV4dCgpOylsPWsudmFsdWUsbD0oaD9sLmNhOmwuYWEpLmRhdGEsZi5uZShsKSYmcWUoZixnLGwpfWY9ZC5YZSgtMSxjLCExKTswPD1mJiZhLkljKHhkLCJwYXJ0cyIsZCxjLG51bGwsZixudWxsKTtmPWMudHA7bnVsbCE9PWYmJmYoYyxkLG51bGwpfX19fXoucHJvdG90eXBlLmZpbmRQYXJ0Rm9yS2V5PXoucHJvdG90eXBlLkdJPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hfHx2b2lkIDA9PT1hKXJldHVybiBudWxsO2E9dGhpcy5iYS51ZihhKTtpZihudWxsPT09YSlyZXR1cm4gbnVsbDthPXRoaXMucmkuemEoYSk7cmV0dXJuIGEgaW5zdGFuY2VvZiBFP2E6bnVsbH07DQp6LnByb3RvdHlwZS5maW5kTm9kZUZvcktleT16LnByb3RvdHlwZS5WZT1mdW5jdGlvbihhKXtpZihudWxsPT09YXx8dm9pZCAwPT09YSlyZXR1cm4gbnVsbDthPXRoaXMuYmEudWYoYSk7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7YT10aGlzLnJpLnphKGEpO3JldHVybiBhIGluc3RhbmNlb2YgUz9hOm51bGx9O3oucHJvdG90eXBlLmZpbmRQYXJ0Rm9yRGF0YT16LnByb3RvdHlwZS5naD1mdW5jdGlvbihhKXtpZihudWxsPT09YSlyZXR1cm4gbnVsbDt2YXIgYj10aGlzLnJpLnphKGEpO2lmKGIgaW5zdGFuY2VvZiBFKXJldHVybiBiO2I9dGhpcy56ay56YShhKTtyZXR1cm4gYiBpbnN0YW5jZW9mIEU/YjpudWxsfTt6LnByb3RvdHlwZS5maW5kTm9kZUZvckRhdGE9ei5wcm90b3R5cGUuRXc9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7YT10aGlzLnJpLnphKGEpO3JldHVybiBhIGluc3RhbmNlb2YgUz9hOm51bGx9Ow0Kei5wcm90b3R5cGUuZmluZExpbmtGb3JEYXRhPXoucHJvdG90eXBlLlFmPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiBudWxsO2E9dGhpcy56ay56YShhKTtyZXR1cm4gYSBpbnN0YW5jZW9mIFY/YTpudWxsfTt0Lmcoeiwibm9kZVRlbXBsYXRlIix6LnByb3RvdHlwZS50Sik7dC5kZWZpbmVQcm9wZXJ0eSh6LHt0Sjoibm9kZVRlbXBsYXRlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GaS56YSgiIil9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuRmkuemEoIiIpO2IhPT1hJiYodC5sKGEsRSx6LCJub2RlVGVtcGxhdGUiKSx0aGlzLkZpLmFkZCgiIixhKSx0aGlzLmooIm5vZGVUZW1wbGF0ZSIsYixhKSx0aGlzLmphLnNifHx0aGlzLmduKCkpfSk7dC5nKHosIm5vZGVUZW1wbGF0ZU1hcCIsei5wcm90b3R5cGUuZ3gpOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHtneDoibm9kZVRlbXBsYXRlTWFwIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GaX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5GaTtiIT09YSYmKHQubChhLGphLHosIm5vZGVUZW1wbGF0ZU1hcCIpLHRoaXMuRmk9YSx0aGlzLmooIm5vZGVUZW1wbGF0ZU1hcCIsYixhKSx0aGlzLmphLnNifHx0aGlzLmduKCkpfSk7dC5nKHosImdyb3VwVGVtcGxhdGUiLHoucHJvdG90eXBlLk5JKTt0LmRlZmluZVByb3BlcnR5KHose05JOiJncm91cFRlbXBsYXRlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Eay56YSgiIil9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuRGsuemEoIiIpO2IhPT1hJiYodC5sKGEsVCx6LCJncm91cFRlbXBsYXRlIiksdGhpcy5Eay5hZGQoIiIsYSksdGhpcy5qKCJncm91cFRlbXBsYXRlIixiLGEpLHRoaXMuamEuc2J8fHRoaXMuZ24oKSl9KTt0LmcoeiwiZ3JvdXBUZW1wbGF0ZU1hcCIsei5wcm90b3R5cGUuSncpOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHtKdzoiZ3JvdXBUZW1wbGF0ZU1hcCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRGt9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuRGs7YiE9PWEmJih0LmwoYSxqYSx6LCJncm91cFRlbXBsYXRlTWFwIiksdGhpcy5Eaz1hLHRoaXMuaigiZ3JvdXBUZW1wbGF0ZU1hcCIsYixhKSx0aGlzLmphLnNifHx0aGlzLmduKCkpfSk7dC5nKHosImxpbmtUZW1wbGF0ZSIsei5wcm90b3R5cGUua0opO3QuZGVmaW5lUHJvcGVydHkoeix7a0o6ImxpbmtUZW1wbGF0ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQWouemEoIiIpfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkFqLnphKCIiKTtiIT09YSYmKHQubChhLFYseiwibGlua1RlbXBsYXRlIiksdGhpcy5Bai5hZGQoIiIsYSksdGhpcy5qKCJsaW5rVGVtcGxhdGUiLGIsYSksdGhpcy5qYS5zYnx8dGhpcy5nbigpKX0pO3QuZyh6LCJsaW5rVGVtcGxhdGVNYXAiLHoucHJvdG90eXBlLiR3KTsNCnQuZGVmaW5lUHJvcGVydHkoeix7JHc6ImxpbmtUZW1wbGF0ZU1hcCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQWp9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuQWo7YiE9PWEmJih0LmwoYSxqYSx6LCJsaW5rVGVtcGxhdGVNYXAiKSx0aGlzLkFqPWEsdGhpcy5qKCJsaW5rVGVtcGxhdGVNYXAiLGIsYSksdGhpcy5qYS5zYnx8dGhpcy5nbigpKX0pO3QuZyh6LCJpc01vdXNlQ2FwdHVyZWQiLHoucHJvdG90eXBlLktkKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7S2Q6ImlzTW91c2VDYXB0dXJlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud0N9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuamI7bnVsbCE9PWImJihhPyh0aGlzLlIuYnViYmxlcz0hMSxiLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5EcCwhMSksYi5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuQ3AsITEpLGIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5GcCwhMSksYi5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIix0aGlzLmloLCExKSxiLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTU1vdXNlU2Nyb2xsIix0aGlzLmloLCExKSxiLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0Iix0aGlzLkVwLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLkRwLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLkNwLCEwKSwNCndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLkZwLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V3aGVlbCIsdGhpcy5paCwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTU1vdXNlU2Nyb2xsIix0aGlzLmloLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHRoaXMuRXAsITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsdGhpcy5wcmV2ZW50RGVmYXVsdCwhMSkpOih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLkRwLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLkNwLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5GcCwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNld2hlZWwiLHRoaXMuaWgsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Nb3VzZVNjcm9sbCIsDQp0aGlzLmloLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHRoaXMuRXAsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsdGhpcy5wcmV2ZW50RGVmYXVsdCwhMSksYi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuRHAsITEpLGIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLkNwLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuRnAsITEpLGIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V3aGVlbCIsdGhpcy5paCwhMSksYi5hZGRFdmVudExpc3RlbmVyKCJET01Nb3VzZVNjcm9sbCIsdGhpcy5paCwhMSksYi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdGhpcy5FcCwhMSkpLHRoaXMud0M9YSl9KTt0LmcoeiwicG9zaXRpb24iLHoucHJvdG90eXBlLnBvc2l0aW9uKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7cG9zaXRpb246InBvc2l0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NYX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5NYTtpZighYi5NKGEpKXt0LmwoYSx3LHosInBvc2l0aW9uIik7dmFyIGM9dGhpcy54Yi5jb3B5KCk7Yy54PWIueDtjLnk9Yi55O2E9YS5jb3B5KCk7aWYoIXRoaXMuWGImJm51bGwhPT10aGlzLmpiKXt0aGlzLlhiPSEwO3ZhciBkPXRoaXMuc2NhbGU7RGkodGhpcyxhLHRoaXMuRWQsdGhpcy5FYi9kLHRoaXMuRGIvZCx0aGlzLkFuKTt0aGlzLlhiPSExfXRoaXMuTWE9YS5aKCk7YT10aGlzLlpiO2Euc2QmJk9oKGEsYix0aGlzLk1hKTt0aGlzLlhifHx0aGlzLkR0KGMsdGhpcy54Yil9fSk7dC5nKHosImluaXRpYWxQb3NpdGlvbiIsei5wcm90b3R5cGUuWEUpOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHtYRToiaW5pdGlhbFBvc2l0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SdX0sZnVuY3Rpb24oYSl7dGhpcy5SdS5NKGEpfHwodC5sKGEsdyx6LCJpbml0aWFsUG9zaXRpb24iKSx0aGlzLlJ1PWEuWigpKX0pO3QuZyh6LCJpbml0aWFsU2NhbGUiLHoucHJvdG90eXBlLllFKTt0LmRlZmluZVByb3BlcnR5KHose1lFOiJpbml0aWFsU2NhbGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlN1fSxmdW5jdGlvbihhKXt0aGlzLlN1IT09YSYmKHQuaShhLCJudW1iZXIiLHosImluaXRpYWxTY2FsZSIpLHRoaXMuU3U9YSl9KTt0LmcoeiwiZ3JpZCIsei5wcm90b3R5cGUubHApOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHtscDoiZ3JpZCJ9LGZ1bmN0aW9uKCl7bnVsbD09PXRoaXMuZ2QmJnZpKHRoaXMpO3JldHVybiB0aGlzLmdkfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmdkO2lmKGIhPT1hKXtudWxsPT09YiYmKHZpKHRoaXMpLGI9dGhpcy5nZCk7dC5sKGEseSx6LCJncmlkIik7YS50eXBlIT09d2kmJnQubSgiRGlhZ3JhbS5ncmlkIG11c3QgYmUgYSBQYW5lbCBvZiB0eXBlIFBhbmVsLkdyaWQiKTt2YXIgYz1iLmlhO251bGwhPT1jJiZjLnJlbW92ZShiKTt0aGlzLmdkPWE7YS5uYW1lPSJHUklEIjtudWxsIT09YyYmYy5hZGQoYSk7SmkodGhpcyk7dGhpcy5rYSgpO3RoaXMuaigiZ3JpZCIsYixhKX19KTsNCnQuQSh6LHt4Yjoidmlld3BvcnRCb3VuZHMifSxmdW5jdGlvbigpe3ZhciBhPXRoaXMuQ0Q7aWYobnVsbD09PXRoaXMuamIpcmV0dXJuIGE7dmFyIGI9dGhpcy5NYSxjPXRoaXMud2M7YS5wKGIueCxiLnksTWF0aC5tYXgodGhpcy5FYiwwKS9jLE1hdGgubWF4KHRoaXMuRGIsMCkvYyk7cmV0dXJuIGF9KTt0LmcoeiwiZml4ZWRCb3VuZHMiLHoucHJvdG90eXBlLmZBKTt0LmRlZmluZVByb3BlcnR5KHose2ZBOiJmaXhlZEJvdW5kcyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSXV9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuSXU7Yi5NKGEpfHwodC5sKGEseCx6LCJmaXhlZEJvdW5kcyIpLHRoaXMuSXU9YT1hLlooKSx0aGlzLk9jKCksdGhpcy5qKCJmaXhlZEJvdW5kcyIsYixhKSl9KTt0LkEoeix7RWQ6ImRvY3VtZW50Qm91bmRzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5EdX0pOw0KZnVuY3Rpb24gRWkoYSxiKXthLndpPSExO3ZhciBjPWEuRHU7Yy5NKGIpfHwoYj1iLlooKSxhLkR1PWIsYS51aj1udWxsLEJpKGEpLGEuQmEoIkRvY3VtZW50Qm91bmRzQ2hhbmdlZCIsbnVsbCxjLmNvcHkoKSksSWkoYSkpfXQuZyh6LCJzY2FsZSIsei5wcm90b3R5cGUuc2NhbGUpOw0KdC5kZWZpbmVQcm9wZXJ0eSh6LHtzY2FsZToic2NhbGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLndjfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLndjO3QucShhLHosInNjYWxlIik7YTx0aGlzLkNnJiYoYT10aGlzLkNnKTthPnRoaXMuQmcmJihhPXRoaXMuQmcpO2lmKGIhPT1hKXt0aGlzLndjPWE7aWYoIXRoaXMuWGImJiF0aGlzLnpkJiYodGhpcy5YYj0hMCxudWxsIT09dGhpcy5qYikpe3ZhciBjPXRoaXMueGIuY29weSgpLGQ9dGhpcy5FYixmPXRoaXMuRGI7Yy53aWR0aD10aGlzLkViL2I7Yy5oZWlnaHQ9dGhpcy5EYi9iO3ZhciBnPXRoaXMuJGYuY29weSgpO2lmKGlzTmFOKGcueCkpc3dpdGNoKHRoaXMub3cpe2Nhc2UgYWM6Zy54PTA7YnJlYWs7Y2FzZSBiYzpnLng9ZC0xO2JyZWFrO2Nhc2UgS2I6Zy54PWQvMjticmVhaztjYXNlIHhiOmNhc2UgZ2M6Zy54PWQvMn1pZihpc05hTihnLnkpKXN3aXRjaCh0aGlzLm93KXtjYXNlICRiOmcueT0wO2JyZWFrO2Nhc2UgY2M6Zy55PQ0KZi0xO2JyZWFrO2Nhc2UgS2I6Zy55PWYvMjticmVhaztjYXNlIHhiOmNhc2UgZ2M6Zy55PWYvMn10aGlzLnBvc2l0aW9uPW5ldyB3KHRoaXMuTWEueCtnLngvYi1nLngvYSx0aGlzLk1hLnkrZy55L2ItZy55L2EpO3RoaXMuWGI9ITE7dGhpcy5EdChjLHRoaXMueGIpfXRoaXMua2EoKTtJaSh0aGlzKX19KTt0LmcoeiwiYXV0b1NjYWxlIix6LnByb3RvdHlwZS5EbSk7dC5kZWZpbmVQcm9wZXJ0eSh6LHtEbToiYXV0b1NjYWxlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GbH0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5GbDtiIT09YSYmKHQuQWEoYSx6LHosImF1dG9TY2FsZSIpLHRoaXMuRmw9YSx0aGlzLmooImF1dG9TY2FsZSIsYixhKSxhIT09WGUmJkJpKHRoaXMpKX0pO3QuZyh6LCJpbml0aWFsQXV0b1NjYWxlIix6LnByb3RvdHlwZS5USSk7DQp0LmRlZmluZVByb3BlcnR5KHose1RJOiJpbml0aWFsQXV0b1NjYWxlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Ha30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5HaztiIT09YSYmKHQuQWEoYSx6LHosImluaXRpYWxBdXRvU2NhbGUiKSx0aGlzLkdrPWEsdGhpcy5qKCJpbml0aWFsQXV0b1NjYWxlIixiLGEpKX0pO3QuZyh6LCJpbml0aWFsVmlld3BvcnRTcG90Iix6LnByb3RvdHlwZS5aRSk7dC5kZWZpbmVQcm9wZXJ0eSh6LHtaRToiaW5pdGlhbFZpZXdwb3J0U3BvdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVHV9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuVHU7YiE9PWEmJih0LmwoYSxJLHosImluaXRpYWxWaWV3cG9ydFNwb3QiKSxhLnZkKCl8fHQubSgiaW5pdGlhbFZpZXdwb3J0U3BvdCBtdXN0IGJlIGEgcmVhbCBTcG90OiAiK2EpLHRoaXMuVHU9YSx0aGlzLmooImluaXRpYWxWaWV3cG9ydFNwb3QiLGIsYSkpfSk7dC5nKHosImluaXRpYWxEb2N1bWVudFNwb3QiLHoucHJvdG90eXBlLldFKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7V0U6ImluaXRpYWxEb2N1bWVudFNwb3QifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlF1fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlF1O2IhPT1hJiYodC5sKGEsSSx6LCJpbml0aWFsRG9jdW1lbnRTcG90IiksYS52ZCgpfHx0Lm0oImluaXRpYWxWaWV3cG9ydFNwb3QgbXVzdCBiZSBhIHJlYWwgU3BvdDogIithKSx0aGlzLlF1PWEsdGhpcy5qKCJpbml0aWFsRG9jdW1lbnRTcG90IixiLGEpKX0pO3QuZyh6LCJtaW5TY2FsZSIsei5wcm90b3R5cGUuQ2cpO3QuZGVmaW5lUHJvcGVydHkoeix7Q2c6Im1pblNjYWxlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ndn0sZnVuY3Rpb24oYSl7dC5xKGEseiwibWluU2NhbGUiKTt2YXIgYj10aGlzLmd2O2IhPT1hJiYoMDxhPyh0aGlzLmd2PWEsdGhpcy5qKCJtaW5TY2FsZSIsYixhKSxhPnRoaXMuc2NhbGUmJih0aGlzLnNjYWxlPWEpKTp0LmxhKGEsIj4gMCIseiwibWluU2NhbGUiKSl9KTsNCnQuZyh6LCJtYXhTY2FsZSIsei5wcm90b3R5cGUuQmcpO3QuZGVmaW5lUHJvcGVydHkoeix7Qmc6Im1heFNjYWxlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kdn0sZnVuY3Rpb24oYSl7dC5xKGEseiwibWF4U2NhbGUiKTt2YXIgYj10aGlzLmR2O2IhPT1hJiYoMDxhPyh0aGlzLmR2PWEsdGhpcy5qKCJtYXhTY2FsZSIsYixhKSxhPHRoaXMuc2NhbGUmJih0aGlzLnNjYWxlPWEpKTp0LmxhKGEsIj4gMCIseiwibWF4U2NhbGUiKSl9KTt0Lmcoeiwiem9vbVBvaW50Iix6LnByb3RvdHlwZS4kZik7dC5kZWZpbmVQcm9wZXJ0eSh6LHskZjoiem9vbVBvaW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5adn0sZnVuY3Rpb24oYSl7dGhpcy5adi5NKGEpfHwodC5sKGEsdyx6LCJ6b29tUG9pbnQiKSx0aGlzLlp2PWE9YS5aKCkpfSk7dC5nKHosImNvbnRlbnRBbGlnbm1lbnQiLHoucHJvdG90eXBlLm93KTsNCnQuZGVmaW5lUHJvcGVydHkoeix7b3c6ImNvbnRlbnRBbGlnbm1lbnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkFufSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkFuO2IuTShhKXx8KHQubChhLEkseiwiY29udGVudEFsaWdubWVudCIpLHRoaXMuQW49YT1hLlooKSx0aGlzLmooImNvbnRlbnRBbGlnbm1lbnQiLGIsYSksQmkodGhpcykpfSk7dC5nKHosImluaXRpYWxDb250ZW50QWxpZ25tZW50Iix6LnByb3RvdHlwZS5VSSk7dC5kZWZpbmVQcm9wZXJ0eSh6LHtVSToiaW5pdGlhbENvbnRlbnRBbGlnbm1lbnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlhufSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlhuO2IuTShhKXx8KHQubChhLEkseiwiaW5pdGlhbENvbnRlbnRBbGlnbm1lbnQiKSx0aGlzLlhuPWE9YS5aKCksdGhpcy5qKCJpbml0aWFsQ29udGVudEFsaWdubWVudCIsYixhKSl9KTt0LmcoeiwicGFkZGluZyIsei5wcm90b3R5cGUucGFkZGluZyk7DQp0LmRlZmluZVByb3BlcnR5KHose3BhZGRpbmc6InBhZGRpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk5lfSxmdW5jdGlvbihhKXsibnVtYmVyIj09PXR5cGVvZiBhP2E9bmV3IGFiKGEpOnQubChhLGFiLHosInBhZGRpbmciKTt2YXIgYj10aGlzLk5lO2IuTShhKXx8KHRoaXMuTmU9YT1hLlooKSx0aGlzLk9jKCksdGhpcy5qKCJwYWRkaW5nIixiLGEpKX0pO3QuQSh6LHtraDoibm9kZXMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnF2Lmt9KTt0LkEoeix7bGlua3M6ImxpbmtzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdS5rfSk7dC5BKHose3JsOiJwYXJ0cyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRmIua30pO3oucHJvdG90eXBlLmZpbmRUb3BMZXZlbEdyb3Vwcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlRrLmt9O3QuZyh6LCJsYXlvdXQiLHoucHJvdG90eXBlLmpjKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7amM6ImxheW91dCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUGR9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuUGQ7YiE9PWEmJih0LmwoYSxiZSx6LCJsYXlvdXQiKSxudWxsIT09YiYmKGIuaD1udWxsLGIuZ3JvdXA9bnVsbCksdGhpcy5QZD1hLGEuaD10aGlzLGEuZ3JvdXA9bnVsbCx0aGlzLmx1PSEwLHRoaXMuaigibGF5b3V0IixiLGEpLHRoaXMudGUoKSl9KTt6LnByb3RvdHlwZS5sYXlvdXREaWFncmFtPWZ1bmN0aW9uKGEpe3ppKHRoaXMpO2EmJkhqKHRoaXMsITApO0xpKHRoaXMsITEpfTtmdW5jdGlvbiBIaihhLGIpe2Zvcih2YXIgYz1hLlRrLms7Yy5uZXh0KCk7KUlqKGEsYy52YWx1ZSxiKTtudWxsIT09YS5qYyYmKGI/YS5qYy4kZT0hMTphLmpjLkooKSl9DQpmdW5jdGlvbiBJaihhLGIsYyl7aWYobnVsbCE9PWIpe2Zvcih2YXIgZD1iLnFvLms7ZC5uZXh0KCk7KUlqKGEsZC52YWx1ZSxjKTtudWxsIT09Yi5qYyYmKGM/Yi5qYy4kZT0hMTpiLmpjLkooKSl9fWZ1bmN0aW9uIExpKGEsYil7aWYoIWEuR3kpe3ZhciBjPWEuamMsZD1hLld1O2EuV3U9ITA7dmFyIGY9YS5OYTthLk5hPSEwO3RyeXtmb3IodmFyIGc9YS5Uay5rO2cubmV4dCgpOylKaihhLGcudmFsdWUsYik7Yy4kZXx8YiYmIWMueUF8fChjLmRvTGF5b3V0KGEpLHppKGEpLGMuJGU9ITApfWZpbmFsbHl7YS5sdT0hYy4kZSxhLld1PWQsYS5OYT1mfX19ZnVuY3Rpb24gSmooYSxiLGMpe2lmKG51bGwhPT1iKXtmb3IodmFyIGQ9Yi5xby5rO2QubmV4dCgpOylKaihhLGQudmFsdWUsYyk7ZD1iLmpjO251bGw9PT1kfHxkLiRlfHxjJiYhZC55QXx8KGIuTkM9IWIubG9jYXRpb24uTigpLGQuZG9MYXlvdXQoYiksYi5KKEtqKSxkLiRlPSEwLE5pKGEsYikpfX0NCnQuZyh6LCJpc1RyZWVQYXRoVG9DaGlsZHJlbiIsei5wcm90b3R5cGUucGQpO3QuZGVmaW5lUHJvcGVydHkoeix7cGQ6ImlzVHJlZVBhdGhUb0NoaWxkcmVuIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5WdX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5WdTtpZihiIT09YSYmKHQuaShhLCJib29sZWFuIix6LCJpc1RyZWVQYXRoVG9DaGlsZHJlbiIpLHRoaXMuVnU9YSx0aGlzLmooImlzVHJlZVBhdGhUb0NoaWxkcmVuIixiLGEpLCF0aGlzLmphLnNiKSlmb3IoYT10aGlzLmtoO2EubmV4dCgpOylMaihhLnZhbHVlKX0pO3oucHJvdG90eXBlLmZpbmRUcmVlUm9vdHM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IEIoUyksYj10aGlzLmtoLms7Yi5uZXh0KCk7KXt2YXIgYz1iLnZhbHVlO2Muc3AmJm51bGw9PT1jLmV0KCkmJmEuYWRkKGMpfXJldHVybiBhLmt9O3QuZyh6LCJpc0NvbGxhcHNpbmdFeHBhbmRpbmciLHoucHJvdG90eXBlLldkKTsNCnQuZGVmaW5lUHJvcGVydHkoeix7V2Q6bnVsbH0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vQ30sZnVuY3Rpb24oYSl7dGhpcy5vQz1hfSk7DQpmdW5jdGlvbiBWaChhKXtmdW5jdGlvbiBiKGEpe3ZhciBiPWEudG9Mb3dlckNhc2UoKSxoPW5ldyBCKCJmdW5jdGlvbiIpO2MuYWRkKGEsaCk7Yy5hZGQoYixoKTtkLmFkZChhLGEpO2QuYWRkKGIsYSl9dmFyIGM9bmV3IGphKCJzdHJpbmciLEIpLGQ9bmV3IGphKCJzdHJpbmciLCJzdHJpbmciKTtiKCJBbmltYXRpb25TdGFydGluZyIpO2IoIkFuaW1hdGlvbkZpbmlzaGVkIik7YigiQmFja2dyb3VuZFNpbmdsZUNsaWNrZWQiKTtiKCJCYWNrZ3JvdW5kRG91YmxlQ2xpY2tlZCIpO2IoIkJhY2tncm91bmRDb250ZXh0Q2xpY2tlZCIpO2IoIkNsaXBib2FyZENoYW5nZWQiKTtiKCJDbGlwYm9hcmRQYXN0ZWQiKTtiKCJEb2N1bWVudEJvdW5kc0NoYW5nZWQiKTtiKCJFeHRlcm5hbE9iamVjdHNEcm9wcGVkIik7YigiSW5pdGlhbExheW91dENvbXBsZXRlZCIpO2IoIkxheW91dENvbXBsZXRlZCIpO2IoIkxpbmtEcmF3biIpO2IoIkxpbmtSZWxpbmtlZCIpO2IoIkxpbmtSZXNoYXBlZCIpO2IoIk1vZGlmaWVkIik7DQpiKCJPYmplY3RTaW5nbGVDbGlja2VkIik7YigiT2JqZWN0RG91YmxlQ2xpY2tlZCIpO2IoIk9iamVjdENvbnRleHRDbGlja2VkIik7YigiUGFydENyZWF0ZWQiKTtiKCJQYXJ0UmVzaXplZCIpO2IoIlBhcnRSb3RhdGVkIik7YigiU2VsZWN0aW9uTW92ZWQiKTtiKCJTZWxlY3Rpb25Db3BpZWQiKTtiKCJTZWxlY3Rpb25EZWxldGluZyIpO2IoIlNlbGVjdGlvbkRlbGV0ZWQiKTtiKCJTZWxlY3Rpb25Hcm91cGVkIik7YigiU2VsZWN0aW9uVW5ncm91cGVkIik7YigiQ2hhbmdpbmdTZWxlY3Rpb24iKTtiKCJDaGFuZ2VkU2VsZWN0aW9uIik7YigiU3ViR3JhcGhDb2xsYXBzZWQiKTtiKCJTdWJHcmFwaEV4cGFuZGVkIik7YigiVGV4dEVkaXRlZCIpO2IoIlRyZWVDb2xsYXBzZWQiKTtiKCJUcmVlRXhwYW5kZWQiKTtiKCJWaWV3cG9ydEJvdW5kc0NoYW5nZWQiKTthLkl5PWM7YS5IeT1kfQ0KZnVuY3Rpb24gbWEoYSxiKXt2YXIgYz1hLkh5LnphKGIpO3JldHVybiBudWxsIT09Yz9jOmEuSHkuemEoYi50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBNaihhLGIpe3ZhciBjPWEuSXkuemEoYik7aWYobnVsbCE9PWMpcmV0dXJuIGM7Yz1hLkl5LnphKGIudG9Mb3dlckNhc2UoKSk7aWYobnVsbCE9PWMpcmV0dXJuIGM7dC5tKCJVbmtub3duIERpYWdyYW1FdmVudCBuYW1lOiAiK2IpO3JldHVybiBudWxsfXoucHJvdG90eXBlLmFkZERpYWdyYW1MaXN0ZW5lcj16LnByb3RvdHlwZS5Lej1mdW5jdGlvbihhLGIpe3QuaShhLCJzdHJpbmciLHosImFkZERpYWdyYW1MaXN0ZW5lcjpuYW1lIik7dC5pKGIsImZ1bmN0aW9uIix6LCJhZGREaWFncmFtTGlzdGVuZXI6bGlzdGVuZXIiKTt2YXIgYz1Naih0aGlzLGEpO251bGwhPT1jJiZjLmFkZChiKX07DQp6LnByb3RvdHlwZS5yZW1vdmVEaWFncmFtTGlzdGVuZXI9ei5wcm90b3R5cGUuUEY9ZnVuY3Rpb24oYSxiKXt0LmkoYSwic3RyaW5nIix6LCJyZW1vdmVEaWFncmFtTGlzdGVuZXI6bmFtZSIpO3QuaShiLCJmdW5jdGlvbiIseiwiYWRkRGlhZ3JhbUxpc3RlbmVyOmxpc3RlbmVyIik7dmFyIGM9TWoodGhpcyxhKTtudWxsIT09YyYmYy5yZW1vdmUoYil9O3oucHJvdG90eXBlLnJhaXNlRGlhZ3JhbUV2ZW50PXoucHJvdG90eXBlLkJhPWZ1bmN0aW9uKGEsYixjKXtlJiZ0LmkoYSwic3RyaW5nIix6LCJyYWlzZURpYWdyYW1FdmVudDpuYW1lIik7dmFyIGQ9TWoodGhpcyxhKSxmPW5ldyByZDtmLmg9dGhpcztmLm5hbWU9bWEodGhpcyxhKTt2b2lkIDAhPT1iJiYoZi5CeD1iKTt2b2lkIDAhPT1jJiYoZi5reD1jKTthPWQubGVuZ3RoO2lmKDE9PT1hKWQ9ZC53YSgwKSxkKGYpO2Vsc2UgaWYoMCE9PWEpZm9yKGI9ZC5JZSgpLGM9MDtjPGE7YysrKWQ9YltjXSxkKGYpO3JldHVybiBmLmNhbmNlbH07DQpmdW5jdGlvbiBZZihhLGIpe3ZhciBjPSExO2EueGIuV2ooYikmJihjPSEwKTtjPWEuZEEoYixmdW5jdGlvbihhKXtyZXR1cm4gYS5TfSxmdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIFZ9LCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgVn0sYyk7aWYoMCE9PWMuY291bnQpZm9yKGM9Yy5rO2MubmV4dCgpOyl7dmFyIGQ9Yy52YWx1ZTtkLmRqJiZkLmFjKCl9fQ0KZnVuY3Rpb24gTmooYSxiKXtudWxsPT09YS5TZCYmKGEuU2Q9bmV3IE9qKTt2YXIgYz1udWxsIT09Yj9iLmdiOm51bGw7aWYoYS5TZC5tdHx8YS5TZC5ncm91cCE9PWMpe2lmKG51bGw9PT1jKXt2YXIgZDtkPWEud2k/QWkoYSk6YS5FZC5jb3B5KCk7ZC5TZigxMDAsMTAwKTthLlNkLmluaXRpYWxpemUoZCk7ZD10LkdmKCk7Zm9yKHZhciBmPWEua2g7Zi5uZXh0KCk7KXt2YXIgZz1mLnZhbHVlLGg9Zy5sYXllcjtudWxsIT09aCYmaC52aXNpYmxlJiYhaC55YyYmUGooYSxnLG51bGwsZCl9fWVsc2UgZm9yKGMucGEuTigpfHxjLnNmKCksZD1jLnBhLmNvcHkoKSxkLlNmKDIwLDIwKSxhLlNkLmluaXRpYWxpemUoZCksZD10LkdmKCksZj1jLlJjO2YubmV4dCgpOylnPWYudmFsdWUsZyBpbnN0YW5jZW9mIFMmJlBqKGEsZyxudWxsLGQpO3QuaGMoZCk7YS5TZC5ncm91cD1jO2EuU2QubXQ9ITF9ZWxzZSBRaihhLlNkKTtyZXR1cm4gYS5TZH0NCmZ1bmN0aW9uIFBqKGEsYixjLGQpe2lmKGIhPT1jKWlmKGIuUWEoKSYmYi5jYW5Bdm9pZCgpKXtjPWIuZ2V0QXZvaWRhYmxlUmVjdChkKTtkPWEuU2QuRm07Yj1hLlNkLkVtO2Zvcih2YXIgZj1jLngrYy53aWR0aCxnPWMueStjLmhlaWdodCxoPWMueDtoPGY7aCs9ZCl7Zm9yKHZhciBrPWMueTtrPGc7ays9YilSaihhLlNkLGgsayk7UmooYS5TZCxoLGcpfWZvcihrPWMueTtrPGc7ays9YilSaihhLlNkLGYsayk7UmooYS5TZCxmLGcpfWVsc2UgaWYoYiBpbnN0YW5jZW9mIFQpZm9yKGI9Yi5SYztiLm5leHQoKTspZj1iLnZhbHVlLGYgaW5zdGFuY2VvZiBTJiZQaihhLGYsYyxkKX1mdW5jdGlvbiBTaihhLGIpe251bGw9PT1hLlNkfHxhLlNkLm10fHxudWxsIT09YiYmIWIuY2FuQXZvaWQoKXx8KGEuU2QubXQ9ITApfQ0Kei5wcm90b3R5cGUuc2ltdWxhdGVkTW91c2VNb3ZlPXoucHJvdG90eXBlLmZCPWZ1bmN0aW9uKGEsYixjKXtpZihudWxsIT09ZmYpe3ZhciBkPWZmLmg7YyBpbnN0YW5jZW9mIHp8fChjPW51bGwpO3ZhciBmPWdmO2MhPT1mJiYobnVsbCE9PWYmJmYhPT1kJiZudWxsIT09Zi53Yi5GZCYmKHRmKGYpLGZmLm90PSExLGYud2IuRmQuZG9TaW11bGF0ZWREcmFnTGVhdmUoKSksZ2Y9YyxudWxsIT09YyYmYyE9PWQmJm51bGwhPT1jLndiLkZkJiYoemYoKSxmPWMud2IuRmQsd2YuY29udGFpbnMoZil8fHdmLmFkZChmKSxjLndiLkZkLmRvU2ltdWxhdGVkRHJhZ0VudGVyKCkpKTtpZihudWxsPT09Y3x8Yz09PWR8fCFjLkx6fHxjLmFifHwhYy56bSlyZXR1cm4hMTtkPWMud2IuRmQ7bnVsbCE9PWQmJihudWxsIT09YT9iPWMuVW4oYSk6bnVsbD09PWImJihiPW5ldyB3KSxjLmVjLmVhPWIsYy5lYy4kaj0hMSxjLmVjLm1qPSExLGQuZG9TaW11bGF0ZWREcmFnT3ZlcigpKTtyZXR1cm4hMH1yZXR1cm4hMX07DQp6LnByb3RvdHlwZS5zaW11bGF0ZWRNb3VzZVVwPXoucHJvdG90eXBlLnNHPWZ1bmN0aW9uKGEsYixjLGQpe2lmKG51bGwhPT1mZil7bnVsbD09PWQmJihkPWIpO2I9Z2Y7dmFyIGY9ZmYuaDtpZihkIT09Yil7aWYobnVsbCE9PWImJmIhPT1mJiZudWxsIT09Yi53Yi5GZClyZXR1cm4gdGYoYiksZmYub3Q9ITEsYi53Yi5GZC5kb1NpbXVsYXRlZERyYWdMZWF2ZSgpLCExO2dmPWQ7bnVsbCE9PWQmJm51bGwhPT1kLndiLkZkJiYoemYoKSxiPWQud2IuRmQsd2YuY29udGFpbnMoYil8fHdmLmFkZChiKSxkLndiLkZkLmRvU2ltdWxhdGVkRHJhZ0VudGVyKCkpfWlmKG51bGw9PT1kKXJldHVybiBmZi5kb0NhbmNlbCgpLCEwO2lmKGQhPT10aGlzKXJldHVybiBudWxsIT09YSYmKGM9ZC5VbihhKSksZC5lYy5lYT1jLGQuZWMuJGo9ITEsZC5lYy5taj0hMCxhPWQud2IuRmQsbnVsbCE9PWEmJmEuZG9TaW11bGF0ZWREcm9wKCksYT1mZixudWxsIT09YSYmKGQ9YS5tYXlDb3B5KCksYS5nZj1kPyJDb3B5IjoNCiJNb3ZlIixhLnN0b3BUb29sKCkpLCEwfXJldHVybiExfTt0LmcoeiwiYXV0b1Njcm9sbFJlZ2lvbiIsei5wcm90b3R5cGUuUUQpO3QuZGVmaW5lUHJvcGVydHkoeix7UUQ6ImF1dG9TY3JvbGxSZWdpb24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm51fSxmdW5jdGlvbihhKXsibnVtYmVyIj09PXR5cGVvZiBhP2E9bmV3IGFiKGEpOnQubChhLGFiLHosImF1dG9TY3JvbGxSZWdpb24iKTt2YXIgYj10aGlzLm51O2IuTShhKXx8KHRoaXMubnU9YT1hLlooKSx0aGlzLk9jKCksdGhpcy5qKCJhdXRvU2Nyb2xsUmVnaW9uIixiLGEpKX0pO2Z1bmN0aW9uIFVmKGEsYil7YS5tdS5hc3NpZ24oYik7VGooYSxhLm11KS50ZihhLnBvc2l0aW9uKT90ZihhKTpVaihhKX0NCmZ1bmN0aW9uIFVqKGEpe251bGw9PT1hLkdsJiYoYS5HbD17fSxhLkdsLmlkPXNldEludGVydmFsKGZ1bmN0aW9uKCl7aWYobnVsbCE9PWEuR2wpe3RmKGEpO3ZhciBiPWEuUi5ldmVudDtpZihudWxsIT09Yil7dmFyIGM9VGooYSxhLm11KTtjLnRmKGEucG9zaXRpb24pfHwoYS5wb3NpdGlvbj1jLGEuUi5lYT1hLkxHKGEubXUpLGEuZkIoYixudWxsLGIudGFyZ2V0LlUpfHxhLmRvTW91c2VNb3ZlKCksYS53aT0hMCxFaShhLGEucWYoKSksYS52ZT0hMCxhLlVmKCksVWooYSkpfX19LGEuaUgpKX1mdW5jdGlvbiB0ZihhKXtudWxsIT09YS5HbCYmKGNsZWFySW50ZXJ2YWwoYS5HbC5pZCksYS5HbD1udWxsKX0NCmZ1bmN0aW9uIFRqKGEsYil7dmFyIGM9YS5wb3NpdGlvbixkPWEuUUQ7aWYoMD49ZC50b3AmJjA+PWQubGVmdCYmMD49ZC5yaWdodCYmMD49ZC5ib3R0b20pcmV0dXJuIGM7dmFyIGY9YS54YixnPWEuc2NhbGUsZj10LmhrKDAsMCxmLndpZHRoKmcsZi5oZWlnaHQqZyksaD10LmxjKDAsMCk7aWYoYi54Pj1mLngmJmIueDxmLngrZC5sZWZ0KXt2YXIgaz1NYXRoLm1heChhLlFwLDEpLGs9a3wwO2gueC09aztiLng8Zi54K2QubGVmdC8yJiYoaC54LT1rKTtiLng8Zi54K2QubGVmdC80JiYoaC54LT00KmspfWVsc2UgYi54PD1mLngrZi53aWR0aCYmYi54PmYueCtmLndpZHRoLWQucmlnaHQmJihrPU1hdGgubWF4KGEuUXAsMSksa3w9MCxoLngrPWssYi54PmYueCtmLndpZHRoLWQucmlnaHQvMiYmKGgueCs9ayksYi54PmYueCtmLndpZHRoLWQucmlnaHQvNCYmKGgueCs9NCprKSk7Yi55Pj1mLnkmJmIueTxmLnkrZC50b3A/KGs9TWF0aC5tYXgoYS5ScCwxKSxrfD0wLGgueS09ayxiLnk8Zi55Kw0KZC50b3AvMiYmKGgueS09ayksYi55PGYueStkLnRvcC80JiYoaC55LT00KmspKTpiLnk8PWYueStmLmhlaWdodCYmYi55PmYueStmLmhlaWdodC1kLmJvdHRvbSYmKGs9TWF0aC5tYXgoYS5ScCwxKSxrfD0wLGgueSs9ayxiLnk+Zi55K2YuaGVpZ2h0LWQuYm90dG9tLzImJihoLnkrPWspLGIueT5mLnkrZi5oZWlnaHQtZC5ib3R0b20vNCYmKGgueSs9NCprKSk7aC50ZihILm5qKXx8KGM9bmV3IHcoYy54K2gueC9nLGMueStoLnkvZykpO3QuaGMoZik7dC5CKGgpO3JldHVybiBjfXoucHJvdG90eXBlLm1ha2VTVkc9ei5wcm90b3R5cGUubWFrZVN2Zz1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT17fSk7YS5jb250ZXh0PSJzdmciO2E9VmoodGhpcyxhKTtyZXR1cm4gbnVsbCE9PWE/YS56bDpudWxsfTsNCnoucHJvdG90eXBlLm1ha2VJbWFnZT1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT17fSk7dmFyIGI9KGEuZG9jdW1lbnR8fGRvY3VtZW50KS5jcmVhdGVFbGVtZW50KCJpbWciKTtiLnNyYz10aGlzLmxKKGEpO3JldHVybiBiIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9iOm51bGx9O3oucHJvdG90eXBlLm1ha2VJbWFnZURhdGE9ei5wcm90b3R5cGUubEo9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9e30pO3ZhciBiPVZqKHRoaXMsYSk7cmV0dXJuIG51bGwhPT1iP2IudG9EYXRhVVJMKGEudHlwZSxhLmRldGFpbHMpOiIifTsNCmZ1bmN0aW9uIFZqKGEsYil7YS5aYi5tbigpO2EuVWYoKTtpZihudWxsPT09YS5qYilyZXR1cm4gbnVsbDsib2JqZWN0IiE9PXR5cGVvZiBiJiZ0Lm0oInByb3BlcnRpZXMgYXJndW1lbnQgbXVzdCBiZSBhbiBPYmplY3QuIik7dmFyIGM9ITEsZD1iLnNpemV8fG51bGwsZj1iLnNjYWxlfHxudWxsO3ZvaWQgMCE9PWIuc2NhbGUmJmlzTmFOKGIuc2NhbGUpJiYoZj0iTmFOIik7dmFyIGc9Yi5tYXhTaXplO3ZvaWQgMD09PWIubWF4U2l6ZSYmKGM9ITAsZz0ic3ZnIj09PWIuY29udGV4dD9uZXcgZ2EoSW5maW5pdHksSW5maW5pdHkpOm5ldyBnYSgyRTMsMkUzKSk7dmFyIGg9Yi5wb3NpdGlvbnx8bnVsbCxrPWIucGFydHN8fG51bGwsbD12b2lkIDA9PT1iLnBhZGRpbmc/MTpiLnBhZGRpbmcsbT1iLmJhY2tncm91bmR8fG51bGwsbj1iLm9taXRUZW1wb3Jhcnk7dm9pZCAwPT09biYmKG49ITApO3ZhciBwPWIuZG9jdW1lbnR8fGRvY3VtZW50LHE9Yi5lbGVtZW50RmluaXNoZWR8fG51bGwscj0NCmIuc2hvd1RlbXBvcmFyeTt2b2lkIDA9PT1yJiYocj0hbik7bj1iLnNob3dHcmlkO3ZvaWQgMD09PW4mJihuPXIpO251bGwhPT1kJiZpc05hTihkLndpZHRoKSYmaXNOYU4oZC5oZWlnaHQpJiYoZD1udWxsKTtsJiYibnVtYmVyIj09PXR5cGVvZiBsJiYobD1uZXcgYWIobCkpO2x8fChsPW5ldyBhYigwKSk7bC5sZWZ0PU1hdGgubWF4KGwubGVmdCwwKTtsLnJpZ2h0PU1hdGgubWF4KGwucmlnaHQsMCk7bC50b3A9TWF0aC5tYXgobC50b3AsMCk7bC5ib3R0b209TWF0aC5tYXgobC5ib3R0b20sMCk7YS5Nbj0hMTt1aShhKTt2YXIgcz1wLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHU9cy5nZXRDb250ZXh0KCIyZCIpLHY9cztpZighKGR8fGZ8fGt8fGgpKXJldHVybiBzLndpZHRoPWEuRWIrTWF0aC5jZWlsKGwubGVmdCtsLnJpZ2h0KSxzLmhlaWdodD1hLkRiK01hdGguY2VpbChsLnRvcCtsLmJvdHRvbSksInN2ZyI9PT1iLmNvbnRleHQmJih1PXY9bmV3IG5jKHMscCxxKSx1IGluc3RhbmNlb2YNCm5jJiYoYS5Nbj0hMCkpLFVpKGEsdSxsLG5ldyBnYShzLndpZHRoLHMuaGVpZ2h0KSxhLndjLGEuTWEsayxtLHIsbiksYS5Nbj0hMCx2O3ZhciBEPWEuU2UuWHMsQSxHPW5ldyB3KDAsMCk7QT1hLkVkLmNvcHkoKTtBLlpKKGEucGFkZGluZyk7Ry54PUEueDtHLnk9QS55O2lmKGspe3ZhciBMLE49ITAsaz1rLms7Zm9yKGsucmVzZXQoKTtrLm5leHQoKTspe3ZhciBPPWsudmFsdWU7aWYoTyBpbnN0YW5jZW9mIEUpe3ZhciBVPU8ubGF5ZXI7VSYmIVUudmlzaWJsZXx8VSYmVS55Y3x8IU8uUWEoKXx8KE89Ty5wYSxPLk4oKSYmKE4/KE49ITEsTD1PLmNvcHkoKSk6TC5saihPKSkpfX1OJiYoTD1uZXcgeCgwLDAsMCwwKSk7QS53aWR0aD1MLndpZHRoO0EuaGVpZ2h0PUwuaGVpZ2h0O0cueD1MLng7Ry55PUwueX1udWxsIT09aCYmaC5OKCkmJihHPWgsZnx8KGY9RCkpO0w9aD0wO2wmJihoPWwubGVmdCtsLnJpZ2h0LEw9bC50b3ArbC5ib3R0b20pO049Tz0wO2QmJihPPWQud2lkdGgsTj1kLmhlaWdodCwNCmlzRmluaXRlKE8pJiYoTz1NYXRoLm1heCgwLE8taCkpLGlzRmluaXRlKE4pJiYoTj1NYXRoLm1heCgwLE4tTCkpKTtkJiZmPygiTmFOIj09PWYmJihmPUQpLGQuTigpPyhkPU8sQT1OKTppc05hTihOKT8oZD1PLEE9QS5oZWlnaHQqZik6KGQ9QS53aWR0aCpmLEE9TikpOmQ/ZC5OKCk/KGY9TWF0aC5taW4oTy9BLndpZHRoLE4vQS5oZWlnaHQpLGQ9TyxBPU4pOmlzTmFOKE4pPyhmPU8vQS53aWR0aCxkPU8sQT1BLmhlaWdodCpmKTooZj1OL0EuaGVpZ2h0LGQ9QS53aWR0aCpmLEE9Tik6Zj8iTmFOIj09PWYmJmcuTigpPyhmPU1hdGgubWluKChnLndpZHRoLWgpL0Eud2lkdGgsKGcuaGVpZ2h0LUwpL0EuaGVpZ2h0KSxmPkQ/KGY9RCxkPUEud2lkdGgsQT1BLmhlaWdodCk6KGQ9Zy53aWR0aCxBPWcuaGVpZ2h0KSk6KGQ9QS53aWR0aCpmLEE9QS5oZWlnaHQqZik6KGY9RCxkPUEud2lkdGgsQT1BLmhlaWdodCk7bD8oZCs9aCxBKz1MKTpsPW5ldyBhYigwKTtnJiYoRD1nLndpZHRoLGc9Zy5oZWlnaHQsDQoic3ZnIiE9PWIuY29udGV4dCYmYyYmIXQuVEcmJihkPkR8fEE+ZykmJih0LnRyYWNlKCJEaWFncmFtLm1ha2VJbWFnZShkYXRhKTogRGlhZ3JhbSB3aWR0aCBvciBoZWlnaHQgaXMgbGFyZ2VyIHRoYW4gdGhlIGRlZmF1bHQgbWF4IHNpemUuICgiK01hdGguY2VpbChkKSsieCIrTWF0aC5jZWlsKEEpKyIgdnMgMjAwMHgyMDAwKSBDb25zaWRlciBpbmNyZWFzaW5nIHRoZSBtYXggc2l6ZS4iKSx0LlRHPSEwKSxpc05hTihEKSYmKEQ9MkUzKSxpc05hTihnKSYmKGc9MkUzKSxpc0Zpbml0ZShEKSYmKGQ9TWF0aC5taW4oZCxEKSksaXNGaW5pdGUoZykmJihBPU1hdGgubWluKEEsZykpKTtzLndpZHRoPU1hdGguY2VpbChkKTtzLmhlaWdodD1NYXRoLmNlaWwoQSk7InN2ZyI9PT1iLmNvbnRleHQmJih1PXY9bmV3IG5jKHMscCxxKSx1IGluc3RhbmNlb2YgbmMmJihhLk1uPSEwKSk7VWkoYSx1LGwsbmV3IGdhKE1hdGguY2VpbChkKSxNYXRoLmNlaWwoQSkpLGYsRyxrLG0scixuKTthLk1uPSEwOw0KcmV0dXJuIHZ9ei5pbmhlcml0PWZ1bmN0aW9uKGEsYil7dC5pKGEsImZ1bmN0aW9uIix6LCJpbmhlcml0Iik7dC5pKGIsImZ1bmN0aW9uIix6LCJpbmhlcml0Iik7Yi51SCYmdC5tKCJDYW5ub3QgaW5oZXJpdCBmcm9tICIrdC54ZyhiKSk7dC5LYShhLGIpfTtmdW5jdGlvbiBXaihhKXsxPGFyZ3VtZW50cy5sZW5ndGgmJnQubSgiUGFsZXR0ZSBjb25zdHJ1Y3RvciBjYW4gb25seSB0YWtlIG9uZSBvcHRpb25hbCBhcmd1bWVudCwgdGhlIERJViBIVE1MIGVsZW1lbnQgb3IgaXRzIGlkLiIpO3ouY2FsbCh0aGlzLGEpO3RoaXMuTXM9ITA7dGhpcy5Taj0hMTt0aGlzLmFiPSEwO3RoaXMub3c9RmI7dGhpcy5qYz1uZXcgWGp9dC5nYSgiUGFsZXR0ZSIsV2opO3QuS2EoV2oseik7DQpmdW5jdGlvbiBYaShhKXsxPGFyZ3VtZW50cy5sZW5ndGgmJnQubSgiT3ZlcnZpZXcgY29uc3RydWN0b3IgY2FuIG9ubHkgdGFrZSBvbmUgb3B0aW9uYWwgYXJndW1lbnQsIHRoZSBESVYgSFRNTCBlbGVtZW50IG9yIGl0cyBpZC4iKTt6LmNhbGwodGhpcyxhKTt0aGlzLmxpLmlzRW5hYmxlZD0hMTt0aGlzLlhiPSEwO3RoaXMuR2k9bnVsbDt0aGlzLm9IPXRoaXMuRnU9ITA7dGhpcy5RSigiZHJhd1NoYWRvd3MiLCExKTt2YXIgYj1uZXcgRSxjPW5ldyBXO2Muc3Ryb2tlPSJtYWdlbnRhIjtjLmZiPTI7Yy5maWxsPSJ0cmFuc3BhcmVudCI7Yy5uYW1lPSJCT1hTSEFQRSI7Yi5zeD0iQk9YU0hBUEUiO2IuYXg9IkJPWFNIQVBFIjtiLmN1cnNvcj0ibW92ZSI7Yi5hZGQoYyk7dGhpcy5JbD1iO3RoaXMueno9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7dGhpcy53SD10aGlzLnp6LmdldENvbnRleHQoIjJkIik7Yj1uZXcgWWo7Yi53ZCh0aGlzKTt0aGlzLndiLmVmLkpkKDAsYik7DQp2YXIgZD10aGlzO3RoaXMuSkY9ZnVuY3Rpb24oKXtaaihkKX07dGhpcy5JRj1mdW5jdGlvbigpe251bGwhPT1kLkdpJiYoZC5PYygpLGQua2EoKSl9O3RoaXMuYWI9ITA7dGhpcy5QZT0hMTt0aGlzLkRtPUZpO3RoaXMud2IuYm49YWY7dGhpcy5YYj0hMX10LmdhKCJPdmVydmlldyIsWGkpO3QuS2EoWGkseik7DQpmdW5jdGlvbiBZaShhKXthLlhifHxhLnpkfHwhMSE9PWEuTmZ8fChhLk5mPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2lmKGEuTmYmJiFhLnpkJiYoYS5OZj0hMSxudWxsIT09YS5NYikpe2EuemQ9ITA7emkoYSk7YS5FZC5OKCl8fEVpKGEsYS5xZigpKTtudWxsPT09YS5NYiYmdC5tKCJObyBkaXYgc3BlY2lmaWVkIik7bnVsbD09PWEuamImJnQubSgiTm8gY2FudmFzIHNwZWNpZmllZCIpO2lmKGEudmUpe3ZhciBiPWEuR2k7aWYobnVsbCE9PWImJiFiLlpiLnlnJiYhYi5aYi5zZCl7dmFyIGI9YS5TZyxjPWEueno7Yi5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApO2IuY2xlYXJSZWN0KDAsMCxhLmpiLndpZHRoLGEuamIuaGVpZ2h0KTtiLmRyYXdJbWFnZShjLDAsMCk7Yz1hLm1kO2MucmVzZXQoKTsxIT09YS53YyYmYy5zY2FsZShhLnNjYWxlKTswPT09YS5wb3NpdGlvbi54JiYwPT09YS5wb3NpdGlvbi55fHxjLnRyYW5zbGF0ZSgtYS5NYS54LC1hLk1hLnkpO2Iuc2V0VHJhbnNmb3JtKGMubTExLA0KYy5tMTIsYy5tMjEsYy5tMjIsYy5keCxjLmR5KTtmb3IodmFyIGM9YS5TYi5sZW5ndGgsZD0wO2Q8YztkKyspYS5TYi5uW2RdLlVlKGIsYSk7YS5Iaz0hMTthLnZlPSExfX1hLnpkPSExfX0pKX1YaS5wcm90b3R5cGUuY29tcHV0ZVBpeGVsUmF0aW89ZnVuY3Rpb24oKXtyZXR1cm4gMX07DQpYaS5wcm90b3R5cGUuVWU9ZnVuY3Rpb24oKXtudWxsPT09dGhpcy5NYiYmdC5tKCJObyBkaXYgc3BlY2lmaWVkIik7bnVsbD09PXRoaXMuamImJnQubSgiTm8gY2FudmFzIHNwZWNpZmllZCIpO2lmKHRoaXMudmUpe3ZhciBhPXRoaXMuR2k7aWYoIShudWxsPT09YXx8YS5aYi55Z3x8YS5aYi5zZHx8IXRoaXMub0gmJmEud2IuRmQuaGEpKXt2YXIgYj1hLmxwOyhiJiZiLnZpc2libGUmJmlzTmFOKGIud2lkdGgpfHxpc05hTihiLmhlaWdodCkpJiZKaShhKTt2YXIgYz10aGlzLmpiLGI9dGhpcy5TZyxkPXRoaXMuenosZj10aGlzLndIO2Qud2lkdGg9Yy53aWR0aDtkLmhlaWdodD1jLmhlaWdodDtiLmN1PSIiO2Iuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKTtiLmNsZWFyUmVjdCgwLDAsdGhpcy5qYi53aWR0aCx0aGlzLmpiLmhlaWdodCk7dmFyIGc9dGhpcy5tZDtnLnJlc2V0KCk7MSE9PXRoaXMud2MmJmcuc2NhbGUodGhpcy5zY2FsZSk7MD09PXRoaXMucG9zaXRpb24ueCYmMD09PXRoaXMucG9zaXRpb24ueXx8DQpnLnRyYW5zbGF0ZSgtdGhpcy5NYS54LC10aGlzLk1hLnkpO2Iuc2V0VHJhbnNmb3JtKGcubTExLGcubTEyLGcubTIxLGcubTIyLGcuZHgsZy5keSk7Zm9yKHZhciBoPXRoaXMuRnUsaz10aGlzLnhiLGw9YS5TYi5sZW5ndGgsZz0wO2c8bDtnKyspe3ZhciBtPWEuU2IubltnXSxuPWIscD1rLHE9aDt2b2lkIDA9PT1xJiYocT0hMCk7aWYocXx8IW0ueWMpZm9yKHZhciBtPW0uRmIscT10aGlzLnNjYWxlLHI9bS5sZW5ndGgscz0wO3M8cjtzKyspe3ZhciB1PW0ubltzXSx2PXUucGE7di5UZihwKSYmKDE8di53aWR0aCpxfHwxPHYuaGVpZ2h0KnE/dS5VZShuLHRoaXMpOlJoKHUsbikpfX1mLmRyYXdJbWFnZShjLDAsMCk7ZSYmZS5TeiYmKGYuZmlsbFN0eWxlPSJyZWQiLGYuZmlsbFJlY3QoMCxkLmhlaWdodC8yLGQud2lkdGgsNCkpO2E9dGhpcy5TYi5uO2M9dGhpcy5TYi5sZW5ndGg7Zm9yKGc9MDtnPGM7ZysrKWFbZ10uVWUoYix0aGlzKTt0aGlzLnZlPXRoaXMuSGs9ITF9fX07DQp0LmcoWGksIm9ic2VydmVkIixYaS5wcm90b3R5cGUudkopO3QuZGVmaW5lUHJvcGVydHkoWGkse3ZKOiJvYnNlcnZlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuR2l9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuR2k7bnVsbCE9PWEmJnQubChhLHosWGksIm9ic2VydmVkIik7Yj09PWF8fGEgaW5zdGFuY2VvZiBYaXx8KG51bGwhPT1iJiYodGhpcy5yZW1vdmUodGhpcy52ZyksYi5QRigiVmlld3BvcnRCb3VuZHNDaGFuZ2VkIix0aGlzLkpGKSxiLlBGKCJEb2N1bWVudEJvdW5kc0NoYW5nZWQiLHRoaXMuSUYpLGIuam0ucmVtb3ZlKHRoaXMpKSx0aGlzLkdpPWEsbnVsbCE9PWEmJihhLkt6KCJWaWV3cG9ydEJvdW5kc0NoYW5nZWQiLHRoaXMuSkYpLGEuS3ooIkRvY3VtZW50Qm91bmRzQ2hhbmdlZCIsdGhpcy5JRiksYS5qbS5hZGQodGhpcyksdGhpcy5hZGQodGhpcy52ZyksWmoodGhpcykpLHRoaXMuT2MoKSx0aGlzLmooIm9ic2VydmVkIixiLGEpKX0pO3QuZyhYaSwiYm94IixYaS5wcm90b3R5cGUudmcpOw0KdC5kZWZpbmVQcm9wZXJ0eShYaSx7dmc6ImJveCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSWx9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuSWw7YiE9PWEmJih0aGlzLklsPWEsdGhpcy5yZW1vdmUoYiksdGhpcy5hZGQodGhpcy5JbCksWmoodGhpcyksdGhpcy5qKCJib3giLGIsYSkpfSk7dC5nKFhpLCJkcmF3c1RlbXBvcmFyeUxheWVycyIsWGkucHJvdG90eXBlLkRJKTt0LmRlZmluZVByb3BlcnR5KFhpLHtESToiZHJhd3NUZW1wb3JhcnlMYXllcnMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkZ1fSxmdW5jdGlvbihhKXt0aGlzLkZ1IT09YSYmKHRoaXMuRnU9YSx0aGlzLlRBKCkpfSk7DQpmdW5jdGlvbiBaaihhKXt2YXIgYj1hLnZnO2lmKG51bGwhPT1iKXt2YXIgYz1hLkdpO2lmKG51bGwhPT1jKXthLnZlPSEwO3ZhciBjPWMueGIsZD1iLk50LGY9dC5BbCgpO2YucChjLndpZHRoLGMuaGVpZ2h0KTtkLkNhPWY7dC5iayhmKTthPTIvYS5zY2FsZTtkIGluc3RhbmNlb2YgVyYmKGQuZmI9YSk7Yi5sb2NhdGlvbj1uZXcgdyhjLngtYS8yLGMueS1hLzIpfX19WGkucHJvdG90eXBlLnFmPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5HaTtyZXR1cm4gbnVsbD09PWE/SC5oSDphLkVkfTtYaS5wcm90b3R5cGUuRHQ9ZnVuY3Rpb24oYSl7dGhpcy5YYnx8KHhpKHRoaXMpLHRoaXMua2EoKSxJaSh0aGlzKSx0aGlzLk9jKCksWmoodGhpcyksdGhpcy5CYSgiVmlld3BvcnRCb3VuZHNDaGFuZ2VkIixhKSl9O2Z1bmN0aW9uIFlqKCl7YWUuY2FsbCh0aGlzKTt0aGlzLm5hbWU9Ik1vdmVCb3gifXQuS2EoWWosYWUpOw0KWWoucHJvdG90eXBlLmRvU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLmhhPXRoaXMuaC5LZD0hMH07WWoucHJvdG90eXBlLmRvTW91c2VNb3ZlPWZ1bmN0aW9uKCl7aWYodGhpcy5oYSl7dmFyIGE9dGhpcy5oO2lmKG51bGwhPT1hJiZudWxsIT09YS5HaSl7dmFyIGI9YS5HaTtpZihudWxsIT09Yil7dmFyIGM9Yi54YixkPWEuUi5lYTtiLnBvc2l0aW9uPW5ldyB3KGQueC1jLndpZHRoLzIsZC55LWMuaGVpZ2h0LzIpO2EudGUoKX19fX07WWoucHJvdG90eXBlLmRvTW91c2VVcD1mdW5jdGlvbigpe3RoaXMuaGEmJnRoaXMuZG9Nb3VzZU1vdmUoKTt0aGlzLnN0b3BUb29sKCl9O1lqLnByb3RvdHlwZS5kb1N0b3A9ZnVuY3Rpb24oKXt0aGlzLmhhPSExO3ZhciBhPXRoaXMuaDtudWxsIT09YSYmKGEuS2Q9ITEsWmooYSkpfTsNCmZ1bmN0aW9uIGZhKGEpezE8YXJndW1lbnRzLmxlbmd0aCYmdC5tKCJCcnVzaCBjb25zdHJ1Y3RvciBjYW4gdGFrZSBhdCBtb3N0IG9uZSBvcHRpb25hbCBhcmd1bWVudCwgdGhlIEJydXNoIHR5cGUuIik7dC5BYyh0aGlzKTt0aGlzLm9iPSExO3ZvaWQgMD09PWE/KHRoaXMuZGE9TmQsdGhpcy56bj0iYmxhY2siKToic3RyaW5nIj09PXR5cGVvZiBhPyh0aGlzLmRhPU5kLGUmJnQuVG8oIkJydXNoIGNvbnN0cnVjdG9yIixhKSx0aGlzLnpuPWEpOihlJiZ0LkFhKGEsZmEsZmEsImNvbnN0cnVjdG9yOnR5cGUiKSx0aGlzLmRhPWEsdGhpcy56bj0iYmxhY2siKTt2YXIgYj10aGlzLmRhO2I9PT1PZD8odGhpcy5Bbz1GYix0aGlzLk9uPU1iKTp0aGlzLk9uPWI9PT1aZD90aGlzLkFvPUtiOnRoaXMuQW89d2I7dGhpcy5Mdj0wO3RoaXMuR3U9TmFOO3RoaXMuUmc9dGhpcy54dj10aGlzLlFnPW51bGw7dGhpcy5zeT10aGlzLnR5PTB9dC5nYSgiQnJ1c2giLGZhKTt2YXIgTmQ7DQpmYS5Tb2xpZD1OZD10LncoZmEsIlNvbGlkIiwwKTt2YXIgT2Q7ZmEuTGluZWFyPU9kPXQudyhmYSwiTGluZWFyIiwxKTt2YXIgWmQ7ZmEuUmFkaWFsPVpkPXQudyhmYSwiUmFkaWFsIiwyKTt2YXIgYWs7ZmEuUGF0dGVybj1haz10LncoZmEsIlBhdHRlcm4iLDQpO3ZhciBlYTtmYS5pc1ZhbGlkQ29sb3I9ZWE9ZnVuY3Rpb24oYSl7aWYoImJsYWNrIj09PWEpcmV0dXJuITA7aWYoIiI9PT1hKXJldHVybiExO2UmJnQuaShhLCJzdHJpbmciLGZhLCJpc1ZhbGlkQ29sb3IiKTt2YXIgYj10LmtuO2IuZmlsbFN0eWxlPSIjMDAwMDAwIjt2YXIgYz1iLmZpbGxTdHlsZTtiLmZpbGxTdHlsZT1hO2lmKGIuZmlsbFN0eWxlIT09YylyZXR1cm4hMDtiLmZpbGxTdHlsZT0iI0ZGRkZGRiI7Yz1iLmZpbGxTdHlsZTtiLmZpbGxTdHlsZT1hO3JldHVybiBiLmZpbGxTdHlsZSE9PWN9Ow0KZmEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZmE7YS5kYT10aGlzLmRhO2Euem49dGhpcy56bjthLkFvPXRoaXMuQW8uWigpO2EuT249dGhpcy5Pbi5aKCk7YS5Mdj10aGlzLkx2O2EuR3U9dGhpcy5HdTtudWxsIT09dGhpcy5RZyYmKGEuUWc9dGhpcy5RZy5jb3B5KCkpO2EueHY9dGhpcy54djtyZXR1cm4gYX07ZmEucHJvdG90eXBlLkphPWZ1bmN0aW9uKCl7dGhpcy5mcmVlemUoKTtPYmplY3QuZnJlZXplKHRoaXMpO3JldHVybiB0aGlzfTtmYS5wcm90b3R5cGUuZnJlZXplPWZ1bmN0aW9uKCl7dGhpcy5vYj0hMDtudWxsIT09dGhpcy5RZyYmdGhpcy5RZy5mcmVlemUoKTtyZXR1cm4gdGhpc307ZmEucHJvdG90eXBlLkxhPWZ1bmN0aW9uKCl7T2JqZWN0LmlzRnJvemVuKHRoaXMpJiZ0Lm0oImNhbm5vdCB0aGF3IGNvbnN0YW50OiAiK3RoaXMpO3RoaXMub2I9ITE7bnVsbCE9PXRoaXMuUWcmJnRoaXMuUWcuTGEoKTtyZXR1cm4gdGhpc307DQpmYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT0iQnJ1c2goIjtpZih0aGlzLnR5cGU9PT1OZClhKz10aGlzLmNvbG9yO2Vsc2UgaWYoYT10aGlzLnR5cGU9PT1PZD9hKyJMaW5lYXIgIjp0aGlzLnR5cGU9PT1aZD9hKyJSYWRpYWwgIjp0aGlzLnR5cGU9PT1haz9hKyJQYXR0ZXJuICI6YSsiKHVua25vd24pICIsYSs9dGhpcy5zdGFydCsiICIrdGhpcy5lbmQsbnVsbCE9PXRoaXMuVm8pZm9yKHZhciBiPXRoaXMuVm8uaztiLm5leHQoKTspYSs9IiAiK2Iua2V5KyI6IitiLnZhbHVlO3JldHVybiBhKyIpIn07DQpmYS5wcm90b3R5cGUuYWRkQ29sb3JTdG9wPWZhLnByb3RvdHlwZS5hZGRDb2xvclN0b3A9ZnVuY3Rpb24oYSxiKXt0LkwodGhpcyk7KCJudW1iZXIiIT09dHlwZW9mIGF8fCFpc0Zpbml0ZShhKXx8MTxhfHwwPmEpJiZ0LmxhKGEsIjAgPD0gbG9jIDw9IDEiLGZhLCJhZGRDb2xvclN0b3A6bG9jIik7dC5pKGIsInN0cmluZyIsZmEsImFkZENvbG9yU3RvcDpjb2xvciIpO251bGw9PT10aGlzLlFnJiYodGhpcy5RZz1uZXcgamEoIm51bWJlciIsInN0cmluZyIpKTt0aGlzLlFnLmFkZChhLGIpO3RoaXMuZGE9PT1OZCYmKHRoaXMudHlwZT1PZCk7dGhpcy5SZz1udWxsfTt0LmcoZmEsInR5cGUiLGZhLnByb3RvdHlwZS50eXBlKTsNCnQuZGVmaW5lUHJvcGVydHkoZmEse3R5cGU6InR5cGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhfSxmdW5jdGlvbihhKXt0LkwodGhpcyxhKTt0LkFhKGEsZmEsZmEsInR5cGUiKTt0aGlzLmRhPWE7dGhpcy5zdGFydC5HZSgpJiYoYT09PU9kP3RoaXMuc3RhcnQ9RmI6YT09PVpkJiYodGhpcy5zdGFydD1LYikpO3RoaXMuZW5kLkdlKCkmJihhPT09T2Q/dGhpcy5lbmQ9TWI6YT09PVpkJiYodGhpcy5lbmQ9S2IpKTt0aGlzLlJnPW51bGx9KTt0LmcoZmEsImNvbG9yIixmYS5wcm90b3R5cGUuY29sb3IpO3QuZGVmaW5lUHJvcGVydHkoZmEse2NvbG9yOiJjb2xvciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuem59LGZ1bmN0aW9uKGEpe3QuTCh0aGlzLGEpO3QuaShhLCJzdHJpbmciLGZhLCJjb2xvciIpO3RoaXMuem49YTt0aGlzLlJnPW51bGx9KTt0LmcoZmEsInN0YXJ0IixmYS5wcm90b3R5cGUuc3RhcnQpOw0KdC5kZWZpbmVQcm9wZXJ0eShmYSx7c3RhcnQ6InN0YXJ0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Bb30sZnVuY3Rpb24oYSl7dC5MKHRoaXMsYSk7YSBpbnN0YW5jZW9mIEl8fHQuYmMoYSwiU3BvdCIsZmEsInN0YXJ0Iik7dGhpcy5Bbz1hLlooKTt0aGlzLlJnPW51bGx9KTt0LmcoZmEsImVuZCIsZmEucHJvdG90eXBlLmVuZCk7dC5kZWZpbmVQcm9wZXJ0eShmYSx7ZW5kOiJlbmQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk9ufSxmdW5jdGlvbihhKXt0LkwodGhpcyxhKTthIGluc3RhbmNlb2YgSXx8dC5iYyhhLCJTcG90IixmYSwiZW5kIik7dGhpcy5Pbj1hLlooKTt0aGlzLlJnPW51bGx9KTt0LmcoZmEsInN0YXJ0UmFkaXVzIixmYS5wcm90b3R5cGUuVnApOw0KdC5kZWZpbmVQcm9wZXJ0eShmYSx7VnA6InN0YXJ0UmFkaXVzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Mdn0sZnVuY3Rpb24oYSl7dC5MKHRoaXMsYSk7dC5xKGEsZmEsInN0YXJ0UmFkaXVzIik7MD5hJiZ0LmxhKGEsIj49IHplcm8iLGZhLCJzdGFydFJhZGl1cyIpO3RoaXMuTHY9YTt0aGlzLlJnPW51bGx9KTt0LmcoZmEsImVuZFJhZGl1cyIsZmEucHJvdG90eXBlLmFwKTt0LmRlZmluZVByb3BlcnR5KGZhLHthcDoiZW5kUmFkaXVzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5HdX0sZnVuY3Rpb24oYSl7dC5MKHRoaXMsYSk7dC5xKGEsZmEsImVuZFJhZGl1cyIpOzA+YSYmdC5sYShhLCI+PSB6ZXJvIixmYSwiZW5kUmFkaXVzIik7dGhpcy5HdT1hO3RoaXMuUmc9bnVsbH0pO3QuZyhmYSwiY29sb3JTdG9wcyIsZmEucHJvdG90eXBlLlZvKTsNCnQuZGVmaW5lUHJvcGVydHkoZmEse1ZvOiJjb2xvclN0b3BzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5RZ30sZnVuY3Rpb24oYSl7dC5MKHRoaXMsYSk7ZSYmdC5sKGEsamEsZmEsImNvbG9yU3RvcHMiKTt0aGlzLlFnPWE7dGhpcy5SZz1udWxsfSk7dC5nKGZhLCJwYXR0ZXJuIixmYS5wcm90b3R5cGUucGF0dGVybik7dC5kZWZpbmVQcm9wZXJ0eShmYSx7cGF0dGVybjoicGF0dGVybiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueHZ9LGZ1bmN0aW9uKGEpe3QuTCh0aGlzLGEpO3RoaXMueHY9YTt0aGlzLlJnPW51bGx9KTsNCmZhLnJhbmRvbUNvbG9yPWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YSYmKGE9MTI4KTtlJiYodC5xKGEsZmEsInJhbmRvbUNvbG9yOm1pbiIpLCgwPmF8fDI1NTxhKSYmdC5sYShhLCIwIDw9IG1pbiA8PSAyNTUiLGZhLCJyYW5kb21Db2xvcjptaW4iKSk7dm9pZCAwPT09YiYmKGI9TWF0aC5tYXgoYSwyNTUpKTtlJiYodC5xKGIsZmEsInJhbmRvbUNvbG9yOm1heCIpLChiPGF8fDI1NTxiKSYmdC5sYShiLCJtaW4gPD0gbWF4IDw9IDI1NSIsZmEsInJhbmRvbUNvbG9yOm1heCIpKTt2YXIgYz1NYXRoLmFicyhiLWEpLGQ9TWF0aC5mbG9vcihhK01hdGgucmFuZG9tKCkqYykudG9TdHJpbmcoMTYpLGY9TWF0aC5mbG9vcihhK01hdGgucmFuZG9tKCkqYykudG9TdHJpbmcoMTYpLGM9TWF0aC5mbG9vcihhK01hdGgucmFuZG9tKCkqYykudG9TdHJpbmcoMTYpOzI+ZC5sZW5ndGgmJihkPSIwIitkKTsyPmYubGVuZ3RoJiYoZj0iMCIrZik7Mj5jLmxlbmd0aCYmKGM9IjAiK2MpO3JldHVybiIjIisNCmQrZitjfTsNCmZ1bmN0aW9uIFEoKXt0LkFjKHRoaXMpO3RoaXMubWE9MzA3MjM7dGhpcy5MZj0xO3RoaXMuSWk9bnVsbDt0aGlzLlliPSIiO3RoaXMudGM9dGhpcy5MYj1udWxsO3RoaXMuTWE9KG5ldyB3KE5hTixOYU4pKS5mcmVlemUoKTt0aGlzLmpmPShuZXcgZ2EoTmFOLE5hTikpLmZyZWV6ZSgpO3RoaXMuRmo9SC5ncTt0aGlzLkVqPUguZ0g7dGhpcy5tZD1uZXcgaGE7dGhpcy5qaz1uZXcgaGE7dGhpcy5Maz1uZXcgaGE7dGhpcy53Yz0xO3RoaXMud249MDt0aGlzLlBoPVZnO3RoaXMuc3I9SC5mcTt0aGlzLldjPShuZXcgeChOYU4sTmFOLE5hTixOYU4pKS5mcmVlemUoKTt0aGlzLmNjPShuZXcgeChOYU4sTmFOLE5hTixOYU4pKS5mcmVlemUoKTt0aGlzLmhkPShuZXcgeCgwLDAsTmFOLE5hTikpLmZyZWV6ZSgpO3RoaXMueXM9dGhpcy5OcT10aGlzLlA9dGhpcy5Ocj10aGlzLlByPW51bGw7dGhpcy56cz10aGlzLk9xPUluZmluaXR5O3RoaXMubXE9dGhpcy51ZT14Yjt0aGlzLmFzPTA7dGhpcy5Laj0NCjE7dGhpcy50cT0wO3RoaXMuc2o9MTt0aGlzLmVzPS1JbmZpbml0eTt0aGlzLmRzPTA7dGhpcy5mcz1ILm5qO3RoaXMuZ3M9eWc7dGhpcy5BcT0iIjt0aGlzLmxtPXRoaXMub2k9dGhpcy5LbD10aGlzLktjPXRoaXMuUT1udWxsfXQuZ2EoIkdyYXBoT2JqZWN0IixRKTt0LlloKFEpOw0KUS5wcm90b3R5cGUuY2xvbmVQcm90ZWN0ZWQ9ZnVuY3Rpb24oYSl7YS5tYT10aGlzLm1hfDYxNDQ7YS5MZj10aGlzLkxmO2EuWWI9dGhpcy5ZYjthLkxiPXRoaXMuTGI7YS50Yz10aGlzLnRjO2EuTWEuYXNzaWduKHRoaXMuTWEpO2EuamYuYXNzaWduKHRoaXMuamYpO2EuRmo9dGhpcy5Gai5aKCk7YS5Faj10aGlzLkVqLlooKTthLkxrPXRoaXMuTGsuY29weSgpO2Eud2M9dGhpcy53YzthLnduPXRoaXMud247YS5QaD10aGlzLlBoO2Euc3I9dGhpcy5zci5aKCk7YS5XYy5hc3NpZ24odGhpcy5XYyk7YS5jYy5hc3NpZ24odGhpcy5jYyk7YS5oZC5hc3NpZ24odGhpcy5oZCk7YS5Ocj10aGlzLk5yO2lmKG51bGwhPT10aGlzLlApe3ZhciBiPXRoaXMuUDthLlA9e0VoOmIuRWguWigpLFVoOmIuVWguWigpLEJoOmIuQmgsUmg6Yi5SaCxBaDpiLkFoLFFoOmIuUWgsRGg6Yi5EaCxUaDpiLlRofX1lbHNlIGEuUD1udWxsO2EuTnE9dGhpcy5OcTthLk9xPXRoaXMuT3E7YS55cz10aGlzLnlzO2EuenM9DQp0aGlzLnpzO2EudWU9dGhpcy51ZS5aKCk7YS5tcT10aGlzLm1xLlooKTthLmFzPXRoaXMuYXM7YS5Laj10aGlzLktqO2EudHE9dGhpcy50cTthLnNqPXRoaXMuc2o7YS5lcz10aGlzLmVzO2EuZHM9dGhpcy5kczthLmZzPXRoaXMuZnMuWigpO2EuZ3M9dGhpcy5nczthLkFxPXRoaXMuQXE7bnVsbCE9PXRoaXMuUT8oYj10aGlzLlEsYS5RPXtuaTpiLm5pLHRpOmIudGkscGk6Yi5waSxEcjpiLkRyLEVyOmIuRXIsRWk6Yi5FaSxEaTpiLkRpLENpOmIuQ2ksQnI6Yi5CcixDcjpiLkNyLEJpOmIuQmksaXE6Yi5pcSxqcTpiLmpxLGtxOmIua3EsaHE6Yi5ocSxPaTpiLk9pLHFpOmIucWl9KTphLlE9bnVsbDthLktjPXRoaXMuS2M7aWYoQXJyYXkuaXNBcnJheSh0aGlzLktsKSlmb3IoYS5LbD10aGlzLktsLnNsaWNlKDApLGI9MDtiPHRoaXMuS2wubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5LbFtiXTthW2NdPXRoaXNbY119bnVsbCE9PXRoaXMub2kmJihhLm9pPXRoaXMub2kuY29weSgpKX07DQpRLnByb3RvdHlwZS5aaD1mdW5jdGlvbihhKXthLlByPW51bGw7YS5sbT1udWxsO2EuZmEoKX07US5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyB0aGlzLmNvbnN0cnVjdG9yO3RoaXMuY2xvbmVQcm90ZWN0ZWQoYSk7cmV0dXJuIGF9O1EucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQueGcoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpKSsiIyIrdC5vZCh0aGlzKX07dmFyIFVnO1EuTm9uZT1VZz10LncoUSwiTm9uZSIsMCk7dmFyIFZnO1EuRGVmYXVsdD1WZz10LncoUSwiRGVmYXVsdCIsMCk7dmFyIGJrO1EuVmVydGljYWw9Yms9dC53KFEsIlZlcnRpY2FsIiw0KTt2YXIgY2s7US5Ib3Jpem9udGFsPWNrPXQudyhRLCJIb3Jpem9udGFsIiw1KTt2YXIgQ2M7US5GaWxsPUNjPXQudyhRLCJGaWxsIiwzKTt2YXIgV2c7US5Vbmlmb3JtPVdnPXQudyhRLCJVbmlmb3JtIiwxKTt2YXIgWGc7DQpRLlVuaWZvcm1Ub0ZpbGw9WGc9dC53KFEsIlVuaWZvcm1Ub0ZpbGwiLDIpO2Z1bmN0aW9uIGRrKGEpe2EuUT17bmk6bnVsbCx0aTpudWxsLHBpOm51bGwsRHI6bnVsbCxFcjpudWxsLEVpOm51bGwsRGk6bnVsbCxDaTpudWxsLEJyOm51bGwsQ3I6bnVsbCxCaTpudWxsLGlxOm51bGwsanE6bnVsbCxrcTpudWxsLGhxOm51bGwsT2k6bnVsbCxxaTpudWxsfX1hYT1RLnByb3RvdHlwZTthYS5GZT1mdW5jdGlvbigpe3RoaXMuUD17RWg6d2IsVWg6d2IsQmg6MTAsUmg6MTAsQWg6ZWssUWg6ZWssRGg6MCxUaDowfX07DQpmdW5jdGlvbiBmayhhLGIsYyxkLGYsZyxoKXt2YXIgaz0wLjAwMSxsPWcubGVuZ3RoO2EubW92ZVRvKGIsYyk7ZC09YjtrPWYtYzswPT09ZCYmKGQ9MC4wMDEpO2Y9ay9kO2Zvcih2YXIgbT1NYXRoLnNxcnQoZCpkK2sqayksbj0wLHA9ITAscT0wPT09aD8hMTohMDswLjE8PW07KXtpZihxKXtrPWdbbisrJWxdO2ZvcihrLT1oOzA+azspays9Z1tuKyslbF0scD0hcDtxPSExfWVsc2Ugaz1nW24rKyVsXTtrPm0mJihrPW0pO3ZhciByPU1hdGguc3FydChrKmsvKDErZipmKSk7MD5kJiYocj0tcik7Yis9cjtjKz1mKnI7cD9hLmxpbmVUbyhiLGMpOmEubW92ZVRvKGIsYyk7bS09aztwPSFwfX1hYS5JYz1mdW5jdGlvbihhLGIsYyxkLGYsZyxoKXt2YXIgaz10aGlzLlM7bnVsbCE9PWsmJihrLmZuKGEsYixjLGQsZixnLGgpLDAhPT0odGhpcy5tYSYxMDI0KSYmYz09PXRoaXMmJmE9PT12ZCYmZ2sodGhpcyxrLGIpKX07DQpmdW5jdGlvbiBnayhhLGIsYyl7dmFyIGQ9YS5lcCgpO2lmKG51bGwhPT1kKWZvcih2YXIgZj1hLktjLms7Zi5uZXh0KCk7KXt2YXIgZz1mLnZhbHVlLGg9Zy5TdDtpZihudWxsIT09aCl7dmFyIGs9ZC5vZShoKTtpZihudWxsPT09ayljb250aW51ZTtnLnBCKGEsayxjLG51bGwpfWVsc2V7az1kLmRhdGE7aWYobnVsbD09PWspY29udGludWU7dmFyIGw9Yi5oO251bGwhPT1sJiZsLlJ0fHxnLnBCKGEsayxjLGwpfW51bGwhPT1oJiYoaz1kLCIiIT09aCYmKGs9ZC5vZShoKSksbnVsbCE9PWsmJihoPWcubm4sbD1kLCIiIT09aCYmKGw9ZC5vZShoKSksbnVsbCE9PWwmJmcuUUcobCxrLGMpKSl9fWFhLmo9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuSWModmQsYSx0aGlzLGIsYyl9Ow0KZnVuY3Rpb24gaGsoYSxiLGMsZCxmKXt2YXIgZz1hLldjLGg9YS5MaztoLnJlc2V0KCk7aWsoYSxoLGIsYyxkLGYpO2EuTGs9aDtnLng9YjtnLnk9YztnLndpZHRoPWQ7Zy5oZWlnaHQ9ZjtoLnB0KCl8fGguS0coZyl9ZnVuY3Rpb24gamsoYSxiLGMsZCl7aWYoITE9PT1hLkJmKXJldHVybiExO2QubXVsdGlwbHkoYS50cmFuc2Zvcm0pO3JldHVybiBjP2EuVGYoYixkKTphLkltKGIsZCl9DQphYS5DRT1mdW5jdGlvbihhLGIsYyl7aWYoITE9PT10aGlzLkJmKXJldHVybiExO3ZhciBkPXRoaXMuUmE7Yj1hLlpqKGIpO3ZhciBmPSExO2MmJihmPVJhKGEueCxhLnksMCwwLDAsZC5oZWlnaHQpPGJ8fFJhKGEueCxhLnksMCxkLmhlaWdodCxkLndpZHRoLGQuaGVpZ2h0KTxifHxSYShhLngsYS55LGQud2lkdGgsZC5oZWlnaHQsZC53aWR0aCwwKTxifHxSYShhLngsYS55LGQud2lkdGgsMCwwLDApPGIpO2N8fChmPVJhKGEueCxhLnksMCwwLDAsZC5oZWlnaHQpPGImJlJhKGEueCxhLnksMCxkLmhlaWdodCxkLndpZHRoLGQuaGVpZ2h0KTxiJiZSYShhLngsYS55LGQud2lkdGgsZC5oZWlnaHQsZC53aWR0aCwwKTxiJiZSYShhLngsYS55LGQud2lkdGgsMCwwLDApPGIpO3JldHVybiBmfTthYS5IZj1mdW5jdGlvbigpe3JldHVybiEwfTsNClEucHJvdG90eXBlLmNvbnRhaW5zUG9pbnQ9US5wcm90b3R5cGUuR2E9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEsdyxRLCJjb250YWluc1BvaW50OnAiKTt2YXIgYj10LksoKTtiLmFzc2lnbihhKTt0aGlzLnRyYW5zZm9ybS5UYShiKTt2YXIgYz10aGlzLnBhO2lmKCFjLk4oKSlyZXR1cm4hMTtpZih0LmlCKXt2YXIgZD10aGlzLlJhLGY9dGhpcy5kaygpKihudWxsIT09dGhpcy5oP3RoaXMuaC5zY2FsZToxKSxnPTEvZjtpZigxMD5kLndpZHRoKmYmJjEwPmQuaGVpZ2h0KmYpcmV0dXJuIGE9bWIoYy54LTUqZyxjLnktNSpnLGMud2lkdGgrMTAqZyxjLmhlaWdodCsxMCpnLGIueCxiLnkpLHQuQihiKSxhfWlmKHZvaWQgMCE9PXRoaXMub2N8fHRoaXMgaW5zdGFuY2VvZiBXP21iKGMueC01LGMueS01LGMud2lkdGgrMTAsYy5oZWlnaHQrMTAsYi54LGIueSk6Yy5HYShiKSl7aWYodGhpcy5vaSYmIXRoaXMub2kuR2EoYikpcmV0dXJuITE7aWYobnVsbCE9PXRoaXMudGMmJmMuR2EoYil8fG51bGwhPT0NCnRoaXMuTGImJnRoaXMuaGQuR2EoYSkpcmV0dXJuITA7dC5CKGIpO3JldHVybiB0aGlzLlZqKGEpfXQuQihiKTtyZXR1cm4hMX07US5wcm90b3R5cGUuVmo9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5SYTtyZXR1cm4gbWIoMCwwLGIud2lkdGgsYi5oZWlnaHQsYS54LGEueSl9Ow0KUS5wcm90b3R5cGUuY29udGFpbnNSZWN0PVEucHJvdG90eXBlLldqPWZ1bmN0aW9uKGEpe2UmJnQubChhLHgsUSwiY29udGFpbnNSZWN0OnIiKTtpZigwPT09dGhpcy5hbmdsZSlyZXR1cm4gdGhpcy5wYS5XaihhKTt2YXIgYj10aGlzLlJhLGI9dC5oaygwLDAsYi53aWR0aCxiLmhlaWdodCksYz10aGlzLnRyYW5zZm9ybSxkPSExLGY9dC5sYyhhLngsYS55KTtiLkdhKGMuYmkoZikpJiYoZi5wKGEueCxhLmJvdHRvbSksYi5HYShjLmJpKGYpKSYmKGYucChhLnJpZ2h0LGEuYm90dG9tKSxiLkdhKGMuYmkoZikpJiYoZi5wKGEucmlnaHQsYS55KSxiLkdhKGMuYmkoZikpJiYoZD0hMCkpKSk7dC5CKGYpO3QuaGMoYik7cmV0dXJuIGR9Ow0KUS5wcm90b3R5cGUuY29udGFpbmVkSW5SZWN0PVEucHJvdG90eXBlLkltPWZ1bmN0aW9uKGEsYil7ZSYmdC5sKGEseCxRLCJjb250YWluZWRJblJlY3Q6ciIpO2lmKHZvaWQgMD09PWIpcmV0dXJuIGEuV2oodGhpcy5wYSk7dmFyIGM9dGhpcy5SYSxkPSExLGY9dC5sYygwLDApO2EuR2EoYi5UYShmKSkmJihmLnAoMCxjLmhlaWdodCksYS5HYShiLlRhKGYpKSYmKGYucChjLndpZHRoLGMuaGVpZ2h0KSxhLkdhKGIuVGEoZikpJiYoZi5wKGMud2lkdGgsMCksYS5HYShiLlRhKGYpKSYmKGQ9ITApKSkpO3JldHVybiBkfTsNClEucHJvdG90eXBlLmludGVyc2VjdHNSZWN0PVEucHJvdG90eXBlLlRmPWZ1bmN0aW9uKGEsYil7ZSYmdC5sKGEseCxRLCJpbnRlcnNlY3RzUmVjdDpyIik7aWYodm9pZCAwPT09YiYmKGI9dGhpcy50cmFuc2Zvcm0sMD09PXRoaXMuYW5nbGUpKXJldHVybiBhLlRmKHRoaXMucGEpO3ZhciBjPXRoaXMuUmEsZD1iLGY9dC5sYygwLDApLGc9dC5sYygwLGMuaGVpZ2h0KSxoPXQubGMoYy53aWR0aCxjLmhlaWdodCksaz10LmxjKGMud2lkdGgsMCksbD0hMTtpZihhLkdhKGQuVGEoZikpfHxhLkdhKGQuVGEoZykpfHxhLkdhKGQuVGEoaCkpfHxhLkdhKGQuVGEoaykpKWw9ITA7ZWxzZXt2YXIgYz10LmhrKDAsMCxjLndpZHRoLGMuaGVpZ2h0KSxtPXQubGMoYS54LGEueSk7Yy5HYShkLmJpKG0pKT9sPSEwOihtLnAoYS54LGEuYm90dG9tKSxjLkdhKGQuYmkobSkpP2w9ITA6KG0ucChhLnJpZ2h0LGEuYm90dG9tKSxjLkdhKGQuYmkobSkpP2w9ITA6KG0ucChhLnJpZ2h0LGEueSksYy5HYShkLmJpKG0pKSYmDQoobD0hMCkpKSk7dC5CKG0pO3QuaGMoYyk7IWwmJihILk93KGEsZixnKXx8SC5PdyhhLGcsaCl8fEguT3coYSxoLGspfHxILk93KGEsayxmKSkmJihsPSEwKX10LkIoZik7dC5CKGcpO3QuQihoKTt0LkIoayk7cmV0dXJuIGx9O1EucHJvdG90eXBlLmdldERvY3VtZW50UG9pbnQ9US5wcm90b3R5cGUucWI9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj1uZXcgdyk7YS5HZSgpJiZ0Lm0oImdldERvY3VtZW50UG9pbnQ6cyBTcG90IG11c3QgYmUgcmVhbDogIithLnRvU3RyaW5nKCkpO3ZhciBjPXRoaXMuUmE7Yi5wKGEueCpjLndpZHRoK2Eub2Zmc2V0WCxhLnkqYy5oZWlnaHQrYS5vZmZzZXRZKTt0aGlzLm1lLlRhKGIpO3JldHVybiBifTtRLnByb3RvdHlwZS5nZXREb2N1bWVudEFuZ2xlPVEucHJvdG90eXBlLmdsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tZSxhPTE4MC9NYXRoLlBJKk1hdGguYXRhbjIoYS5tMTIsYS5tMTEpOzA+YSYmKGErPTM2MCk7cmV0dXJuIGF9Ow0KUS5wcm90b3R5cGUuZ2V0RG9jdW1lbnRTY2FsZT1RLnByb3RvdHlwZS5kaz1mdW5jdGlvbigpe3ZhciBhPXRoaXMud2M7cmV0dXJuIG51bGwhPT10aGlzLmlhP2EqdGhpcy5pYS5kaygpOmF9O1EucHJvdG90eXBlLmdldExvY2FsUG9pbnQ9US5wcm90b3R5cGUuS0U9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj1uZXcgdyk7Yi5hc3NpZ24oYSk7dGhpcy5tZS5iaShiKTtyZXR1cm4gYn07US5wcm90b3R5cGUuZ2V0TmVhcmVzdEludGVyc2VjdGlvblBvaW50PVEucHJvdG90eXBlLmtsPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5rcChhLngsYS55LGIueCxiLnksYyl9O2FhPVEucHJvdG90eXBlOw0KYWEua3A9ZnVuY3Rpb24oYSxiLGMsZCxmKXt2YXIgZz10aGlzLnRyYW5zZm9ybSxoPTEvKGcubTExKmcubTIyLWcubTEyKmcubTIxKSxrPWcubTIyKmgsbD0tZy5tMTIqaCxtPS1nLm0yMSpoLG49Zy5tMTEqaCxwPWgqKGcubTIxKmcuZHktZy5tMjIqZy5keCkscT1oKihnLm0xMipnLmR4LWcubTExKmcuZHkpO2lmKG51bGwhPT10aGlzLlprKXJldHVybiBnPXRoaXMucGEsSC5rbChnLmxlZnQsZy50b3AsZy5yaWdodCxnLmJvdHRvbSxhLGIsYyxkLGYpO2g9YSprK2IqbStwO2E9YSpsK2IqbitxO2I9YyprK2QqbStwO2M9YypsK2QqbitxO2YucCgwLDApO2Q9dGhpcy5SYTtjPUgua2woMCwwLGQud2lkdGgsZC5oZWlnaHQsaCxhLGIsYyxmKTtmLnRyYW5zZm9ybShnKTtyZXR1cm4gY307DQpmdW5jdGlvbiBoaChhLGIsYyxkLGYpe2lmKCExIT09T2koYSkpe3ZhciBnPWEubWFyZ2luLGg9Zy50b3ArZy5ib3R0b207Yj1NYXRoLm1heChiLShnLnJpZ2h0K2cubGVmdCksMCk7Yz1NYXRoLm1heChjLWgsMCk7Zz1hLmFuZ2xlO2lmKDkwPT09Z3x8MjcwPT09ZylnPWIsYj1jLGM9ZyxnPWQsZD1mLGY9ZztnPWEuQ2E7aD0wO2EuZmImJihoPWEuZmIpO2I9aXNGaW5pdGUoZy53aWR0aCk/Zy53aWR0aCtoOmI7Yz1pc0Zpbml0ZShnLmhlaWdodCk/Zy5oZWlnaHQraDpjO3ZhciBnPWR8fDAsaD1mfHwwLGs9YSBpbnN0YW5jZW9mIHk7c3dpdGNoKGtrKGEpKXtjYXNlIFVnOmg9Zz0wO2smJihjPWI9SW5maW5pdHkpO2JyZWFrO2Nhc2UgQ2M6aXNGaW5pdGUoYikmJmI+ZCYmKGc9Yik7aXNGaW5pdGUoYykmJmM+ZiYmKGg9Yyk7YnJlYWs7Y2FzZSBjazppc0Zpbml0ZShiKSYmYj5kJiYoZz1iKTtoPTA7ayYmKGM9SW5maW5pdHkpO2JyZWFrO2Nhc2UgYms6aXNGaW5pdGUoYykmJmM+ZiYmKGg9DQpjKSxnPTAsayYmKGI9SW5maW5pdHkpfXZhciBrPWEuSGUsbD1hLlZmO2c+ay53aWR0aCYmbC53aWR0aDxrLndpZHRoJiYoZz1rLndpZHRoKTtoPmsuaGVpZ2h0JiZsLmhlaWdodDxrLmhlaWdodCYmKGg9ay5oZWlnaHQpO2Q9TWF0aC5tYXgoZy9hLnNjYWxlLGwud2lkdGgpO2Y9TWF0aC5tYXgoaC9hLnNjYWxlLGwuaGVpZ2h0KTtrLndpZHRoPGQmJihkPU1hdGgubWluKGwud2lkdGgsZCkpO2suaGVpZ2h0PGYmJihmPU1hdGgubWluKGwuaGVpZ2h0LGYpKTtiPU1hdGgubWluKGsud2lkdGgsYik7Yz1NYXRoLm1pbihrLmhlaWdodCxjKTtiPU1hdGgubWF4KGQsYik7Yz1NYXRoLm1heChmLGMpO2EuV2MuTGEoKTthLnR0KGIsYyxkLGYpO2EuV2MuZnJlZXplKCk7YS5XYy5OKCl8fHQubSgiTm9uLXJlYWwgbWVhc3VyZWRCb3VuZHMgaGFzIGJlZW4gc2V0LiBPYmplY3QgIithKyIsIG1lYXN1cmVkQm91bmRzOiAiK2EuV2MudG9TdHJpbmcoKSk7bGsoYSwhMSl9fQ0KYWEuTGM9ZnVuY3Rpb24oYSxiLGMsZCxmKXttayh0aGlzKTt2YXIgZz10LkdmKCk7Zy5hc3NpZ24odGhpcy5jYyk7dGhpcy5jYy5MYSgpO2lmKCExPT09UGkodGhpcykpe3ZhciBoPXRoaXMuY2M7aC54PWE7aC55PWI7aC53aWR0aD1jO2guaGVpZ2h0PWR9ZWxzZSB0aGlzLlVqKGEsYixjLGQpO3RoaXMuY2MuZnJlZXplKCk7dGhpcy5vaT12b2lkIDA9PT1mP251bGw6ZjtjPSExO3ZvaWQgMCE9PWY/Yz0hMDp0aGlzLmlhJiYoZj10aGlzLmlhLmhkLGQ9dGhpcy5FYSxudWxsIT09dGhpcy5aayYmKGQ9dGhpcy5jYyksYz1iK2QuaGVpZ2h0LGQ9YStkLndpZHRoLGM9ISgwPD1hKzAuMDUmJmQ8PWYud2lkdGgrMC4wNSYmMDw9YiswLjA1JiZjPD1mLmhlaWdodCswLjA1KSx0aGlzIGluc3RhbmNlb2YgbmEmJihhPXRoaXMuaGQsdGhpcy5jdj5hLmhlaWdodHx8dGhpcy5uby5BZz5hLndpZHRoKSkmJihjPSEwKTt0aGlzLm1hPWM/dGhpcy5tYXwyNTY6dGhpcy5tYSYtMjU3O3RoaXMuY2MuTigpfHwNCnQubSgiTm9uLXJlYWwgYWN0dWFsQm91bmRzIGhhcyBiZWVuIHNldC4gT2JqZWN0ICIrdGhpcysiLCBhY3R1YWxCb3VuZHM6ICIrdGhpcy5jYy50b1N0cmluZygpKTtuayh0aGlzLGcsdGhpcy5jYyk7dC5oYyhnKX07YWEuVWo9ZnVuY3Rpb24oKXt9Ow0KZnVuY3Rpb24gb2soYSxiLGMsZCxmKXt2YXIgZz1hLnBhO2cueD1iO2cueT1jO2cud2lkdGg9ZDtnLmhlaWdodD1mO2lmKCFhLkNhLk4oKSl7Zz1hLldjO2M9YS5tYXJnaW47Yj1jLnJpZ2h0K2MubGVmdDt2YXIgaD1jLnRvcCtjLmJvdHRvbTtjPWcud2lkdGgrYjtnPWcuaGVpZ2h0K2g7ZCs9YjtmKz1oO2I9a2soYSk7Yz09PWQmJmc9PT1mJiYoYj1VZyk7c3dpdGNoKGIpe2Nhc2UgVWc6aWYoYz5kfHxnPmYpbGsoYSwhMCksaGgoYSxjPmQ/ZDpjLGc+Zj9mOmcpO2JyZWFrO2Nhc2UgQ2M6bGsoYSwhMCk7aGgoYSxkLGYsMCwwKTticmVhaztjYXNlIGNrOmxrKGEsITApO2hoKGEsZCxnLDAsMCk7YnJlYWs7Y2FzZSBiazpsayhhLCEwKSxoaChhLGMsZiwwLDApfX19DQpmdW5jdGlvbiBuayhhLGIsYyl7cGsoYSwhMSk7dmFyIGQ9YS5TO2lmKG51bGwhPT1kKXt2YXIgZj1kLmg7aWYobnVsbCE9PWYpaWYocWsoZCksYSBpbnN0YW5jZW9mIEUpe3ZhciBnPSExLGQ9Yi5OKCk7aWYoITE9PT1mLndpKXt2YXIgaD1mLkVkLGs9Zi5wYWRkaW5nLGw9aC54K2subGVmdCxtPWgueStrLnRvcCxuPWgud2lkdGgtMiprLnJpZ2h0LGg9aC5oZWlnaHQtMiprLmJvdHRvbTtkJiZiLng+bCYmYi55Pm0mJmIucmlnaHQ8biYmYi5ib3R0b208aCYmYy54PmwmJmMueT5tJiZjLnJpZ2h0PG4mJmMuYm90dG9tPGgmJihnPSEwKX0wIT09KGEuVyY2NTUzNikhPT0hMCYmYi5NKGMpfHxiaihhLGcsZik7Zi5xeiYmbnVsbCE9PWYudWo/KGc9bnVsbCxkJiYoZz10LkdmKCksVGgoYSxiLGcpKSxmLmthKGMuTigpP1RoKGEsYyk6bnVsbCxnKSxudWxsIT09ZyYmdC5oYyhnKSk6Zi5rYSgpfWVsc2UgcmsoYSxkKSxhLmthKCksYj1hLlMsbnVsbCE9PWImJihiLk50IT09YSYmYi5YRiE9PWEmJg0KYi5iRyE9PWF8fHNrKGIsITApKX19ZnVuY3Rpb24gcmsoYSxiKXtudWxsIT09YS5OZCYmc2soYiwhMCk7aWYoYSBpbnN0YW5jZW9mIHkpZm9yKHZhciBjPWEueGEsZD1jLmxlbmd0aCxmPTA7ZjxkO2YrKylyayhjLm5bZl0sYil9DQphYS5VZT1mdW5jdGlvbihhLGIpe2lmKHRoaXMudmlzaWJsZSl7dmFyIGM9dGhpcy5vcGFjaXR5LGQ9MTtpZigxIT09Yyl7aWYoMD09PWMpcmV0dXJuO2Q9YS5nbG9iYWxBbHBoYTthLmdsb2JhbEFscGhhPWQqY31pZihhIGluc3RhbmNlb2YgbmMpYTp7aWYodGhpcy52aXNpYmxlKXt2YXIgZj1udWxsLGc9YS5WdztpZih0aGlzIGluc3RhbmNlb2YgeSYmKHRoaXMudHlwZT09PXRrfHx0aGlzLnR5cGU9PT11aykpdmsodGhpcyxhLGIpO2Vsc2V7dmFyIGg9dGhpcy5jYztpZigwIT09aC53aWR0aCYmMCE9PWguaGVpZ2h0JiYhaXNOYU4oaC54KSYmIWlzTmFOKGgueSkpe3ZhciBrPXRoaXMudHJhbnNmb3JtLGw9dGhpcy5pYSxtPXRoaXMuams7bS5yZXNldCgpO251bGwhPT1sJiYobC5IZigpP20ubXVsdGlwbHkobC5tZSk6bnVsbCE9PWwuaWEmJm0ubXVsdGlwbHkobC5pYS5tZSkpO20ubXVsdGlwbHkodGhpcy5tZCk7dmFyIG09MCE9PSh0aGlzLm1hJjI1Niksbj0hMTt0aGlzIGluc3RhbmNlb2YNCm5hJiZ3ayh0aGlzLGEpO2lmKG0pe249bC5IZigpP2wuUmE6bC5wYTtpZih0aGlzLm9pKXZhciBwPXRoaXMub2kscT1wLngscj1wLnkscz1wLndpZHRoLHA9cC5oZWlnaHQ7ZWxzZSBxPU1hdGgubWF4KGgueCxuLngpLHI9TWF0aC5tYXgoaC55LG4ueSkscz1NYXRoLm1pbihoLnJpZ2h0LG4ucmlnaHQpLXEscD1NYXRoLm1pbihoLmJvdHRvbSxuLmJvdHRvbSktcjtpZihxPmgud2lkdGgraC54fHxoLng+bi53aWR0aCtuLnh8fHI+aC5oZWlnaHQraC55fHxoLnk+bi5oZWlnaHQrbi55KWJyZWFrIGE7bj0hMDtyYyhhLDEsMCwwLDEsMCwwKTthLnNhdmUoKTthLmJlZ2luUGF0aCgpO2EucmVjdChxLHIscyxwKTthLmNsaXAoKX1xPSExO2lmKHRoaXMgaW5zdGFuY2VvZiBFJiYocT0hMCwhdGhpcy5RYSgpKSlicmVhayBhO3I9ITE7cz1iLlJrO3RoaXMuUyYmcy5kcmF3U2hhZG93cyYmKHI9dGhpcy5TLmdqKTthLlppLmNmPVsxLDAsMCwxLDAsMF07bnVsbCE9PXRoaXMudGMmJih4ayh0aGlzLA0KYSx0aGlzLnRjLCEwLCEwKSx0aGlzLnRjIGluc3RhbmNlb2YgZmEmJnRoaXMudGMudHlwZT09PVpkPyhhLmJlZ2luUGF0aCgpLGEucmVjdChoLngsaC55LGgud2lkdGgsaC5oZWlnaHQpLHlrKGEsdGhpcy50YywhMCkpOmEuZmlsbFJlY3QoaC54LGgueSxoLndpZHRoLGguaGVpZ2h0KSk7cSYmdGhpcy5naiYmcy5kcmF3U2hhZG93cyYmKHJjKGEsMSwwLDAsMSwwLDApLGg9dGhpcy51bSxhLnNoYWRvd09mZnNldFg9aC54LGEuc2hhZG93T2Zmc2V0WT1oLnksYS5zaGFkb3dDb2xvcj10aGlzLnRtLGEuc2hhZG93Qmx1cj10aGlzLnNtL2Iuc2NhbGUsYS5iYigpKTt0aGlzIGluc3RhbmNlb2YgeT9yYyhhLGsubTExLGsubTEyLGsubTIxLGsubTIyLGsuZHgsay5keSk6YS5aaS5jZj1bay5tMTEsay5tMTIsay5tMjEsay5tMjIsay5keCxrLmR5XTtpZihudWxsIT09dGhpcy5MYil7dmFyIHA9dGhpcy5SYSxoPWs9MCxzPXAud2lkdGgscD1wLmhlaWdodCx1PTA7dGhpcyBpbnN0YW5jZW9mIFcmJg0KKHA9dGhpcy5PYS5PYixrPXAueCxoPXAueSxzPXAud2lkdGgscD1wLmhlaWdodCx1PXRoaXMuYmgpO3hrKHRoaXMsYSx0aGlzLkxiLCEwKTt0aGlzLkxiIGluc3RhbmNlb2YgZmEmJnRoaXMuTGIudHlwZT09PVpkPyhhLmJlZ2luUGF0aCgpLGEucmVjdChrLXUvMixoLXUvMixzK3UscCt1KSx5ayhhLHRoaXMuTGIsITApKTphLmZpbGxSZWN0KGstdS8yLGgtdS8yLHMrdSxwK3UpfWlmKHImJihudWxsIT09dGhpcy5MYnx8bnVsbCE9PXRoaXMudGN8fG51bGwhPT1sJiYwIT09KGwubWEmNTEyKXx8bnVsbCE9PWwmJmwudHlwZT09PWNpJiZsLkR3KCkhPT10aGlzKSl7emsodGhpcywhMCk7dmFyIHY9W2Euc2hhZG93T2Zmc2V0WCxhLnNoYWRvd09mZnNldFksYS5zaGFkb3dCbHVyXTthLnNoYWRvd09mZnNldFg9MDthLnNoYWRvd09mZnNldFk9MDthLnNoYWRvd0JsdXI9MH1lbHNlIHprKHRoaXMsITEpO3RoaXMuZWwoYSxiKTtyJiYwIT09KHRoaXMubWEmNTEyKT09PSEwJiYoYS5zaGFkb3dPZmZzZXRYPQ0KdlswXSxhLnNoYWRvd09mZnNldFk9dlsxXSxhLnNoYWRvd0JsdXI9dlsyXSk7cSYmciYmKGEuc2hhZG93T2Zmc2V0WD0wLGEuc2hhZG93T2Zmc2V0WT0wLGEuc2hhZG93Qmx1cj0wKTttPyhhLnJlc3RvcmUoKSxuJiZhLnZmLnBvcCgpLHVpKGIsYSkpOnRoaXMgaW5zdGFuY2VvZiB5JiYoZj1hLnZmLnBvcCgpKTtxJiZyJiZhLnZmLnBvcCgpO251bGwhPT1hLnlFJiYobnVsbD09PWYmJihnPT09YS5Wdz8ocmMoYSwxLDAsMCwxLDAsMCksdj1hLnZmLnBvcCgpKTp2PWEuVncsZj12KSxhLnlFKHRoaXMsZikpfX19fWVsc2UgaWYodGhpcyBpbnN0YW5jZW9mIHkmJih0aGlzLnR5cGU9PT10a3x8dGhpcy50eXBlPT09dWspKXZrKHRoaXMsYSxiKTtlbHNlIGlmKG09dGhpcy5jYywwIT09bS53aWR0aCYmMCE9PW0uaGVpZ2h0JiYhaXNOYU4obS54KSYmIWlzTmFOKG0ueSkpe3Y9dGhpcy50cmFuc2Zvcm07Zz10aGlzLmlhO2w9dGhpcy5qaztsLnJlc2V0KCk7bnVsbCE9PWcmJihnLkhmKCk/bC5tdWx0aXBseShnLm1lKToNCm51bGwhPT1nLmlhJiZsLm11bHRpcGx5KGcuaWEubWUpKTtsLm11bHRpcGx5KHRoaXMubWQpO2w9MCE9PSh0aGlzLm1hJjI1Nik7dGhpcyBpbnN0YW5jZW9mIG5hJiZ3ayh0aGlzLGEpO2lmKGwpe2UmJmUuQ0kmJnQudHJhY2UoImNsaXAiK3RoaXMudG9TdHJpbmcoKSk7bj1nLkhmKCk/Zy5SYTpnLnBhO3RoaXMub2k/KHI9dGhpcy5vaSxrPXIueCxoPXIueSxxPXIud2lkdGgscj1yLmhlaWdodCk6KGs9TWF0aC5tYXgobS54LG4ueCksaD1NYXRoLm1heChtLnksbi55KSxxPU1hdGgubWluKG0ucmlnaHQsbi5yaWdodCktayxyPU1hdGgubWluKG0uYm90dG9tLG4uYm90dG9tKS1oKTtpZihrPm0ud2lkdGgrbS54fHxtLng+bi53aWR0aCtuLnh8fGg+bS5oZWlnaHQrbS55fHxtLnk+bi5oZWlnaHQrbi55KXsxIT09YyYmKGEuZ2xvYmFsQWxwaGE9ZCk7cmV0dXJufWEuc2F2ZSgpO2EuYmVnaW5QYXRoKCk7YS5yZWN0KGssaCxxLHIpO2EuY2xpcCgpfWg9Yi5SaztuPSExO2lmKHRoaXMgaW5zdGFuY2VvZg0KRSl7bj0hMDtpZighdGhpcy5RYSgpKXsxIT09YyYmKGEuZ2xvYmFsQWxwaGE9ZCk7cmV0dXJufXRoaXMuZ2omJmguZHJhd1NoYWRvd3MmJihrPXRoaXMudW0sYS5zaGFkb3dPZmZzZXRYPWsueCpiLnNjYWxlLGEuc2hhZG93T2Zmc2V0WT1rLnkqYi5zY2FsZSxhLnNoYWRvd0NvbG9yPXRoaXMudG0sYS5zaGFkb3dCbHVyPXRoaXMuc20pfWs9ITE7dGhpcy5TJiZoLmRyYXdTaGFkb3dzJiYoaz10aGlzLlMuZ2opO251bGwhPT10aGlzLnRjJiYoeGsodGhpcyxhLHRoaXMudGMsITAsITApLHRoaXMudGMgaW5zdGFuY2VvZiBmYSYmdGhpcy50Yy50eXBlPT09WmQ/KGEuYmVnaW5QYXRoKCksYS5yZWN0KG0ueCxtLnksbS53aWR0aCxtLmhlaWdodCkseWsoYSx0aGlzLnRjLCEwKSk6YS5maWxsUmVjdChtLngsbS55LG0ud2lkdGgsbS5oZWlnaHQpKTt2LnB0KCl8fGEudHJhbnNmb3JtKHYubTExLHYubTEyLHYubTIxLHYubTIyLHYuZHgsdi5keSk7bnVsbCE9PXRoaXMuTGImJihyPXRoaXMuUmEsDQpoPW09MCxxPXIud2lkdGgscj1yLmhlaWdodCxzPTAsdGhpcyBpbnN0YW5jZW9mIFcmJihyPXRoaXMuT2EuT2IsbT1yLngsaD1yLnkscT1yLndpZHRoLHI9ci5oZWlnaHQscz10aGlzLmJoKSx4ayh0aGlzLGEsdGhpcy5MYiwhMCksdGhpcy5MYiBpbnN0YW5jZW9mIGZhJiZ0aGlzLkxiLnR5cGU9PT1aZD8oYS5iZWdpblBhdGgoKSxhLnJlY3QobS1zLzIsaC1zLzIscStzLHIrcykseWsoYSx0aGlzLkxiLCEwKSk6YS5maWxsUmVjdChtLXMvMixoLXMvMixxK3MscitzKSk7ayYmKG51bGwhPT10aGlzLkxifHxudWxsIT09dGhpcy50Y3x8bnVsbCE9PWcmJjAhPT0oZy5tYSY1MTIpfHxudWxsIT09ZyYmKGcudHlwZT09PWNpfHxnLnR5cGU9PT1TZykmJmcuRHcoKSE9PXRoaXMpPyh6ayh0aGlzLCEwKSxmPVthLnNoYWRvd09mZnNldFgsYS5zaGFkb3dPZmZzZXRZLGEuc2hhZG93Qmx1cl0sYS5zaGFkb3dPZmZzZXRYPTAsYS5zaGFkb3dPZmZzZXRZPTAsYS5zaGFkb3dCbHVyPTApOnprKHRoaXMsDQohMSk7dGhpcy5lbChhLGIpO2smJjAhPT0odGhpcy5tYSY1MTIpPT09ITAmJihhLnNoYWRvd09mZnNldFg9ZlswXSxhLnNoYWRvd09mZnNldFk9ZlsxXSxhLnNoYWRvd0JsdXI9ZlsyXSk7biYmayYmKGEuc2hhZG93T2Zmc2V0WD0wLGEuc2hhZG93T2Zmc2V0WT0wLGEuc2hhZG93Qmx1cj0wKTtsPyhhLnJlc3RvcmUoKSx0aGlzIGluc3RhbmNlb2YgeT91aShiLGEsITApOnVpKGIsYSwhMSkpOnYucHQoKXx8KGY9MS8odi5tMTEqdi5tMjItdi5tMTIqdi5tMjEpLGEudHJhbnNmb3JtKHYubTIyKmYsLXYubTEyKmYsLXYubTIxKmYsdi5tMTEqZixmKih2Lm0yMSp2LmR5LXYubTIyKnYuZHgpLGYqKHYubTEyKnYuZHgtdi5tMTEqdi5keSkpKX0xIT09YyYmKGEuZ2xvYmFsQWxwaGE9ZCl9fTsNCmZ1bmN0aW9uIHZrKGEsYixjKXt2YXIgZD1hLmNjOzA9PT1kLndpZHRofHwwPT09ZC5oZWlnaHR8fGlzTmFOKGQueCl8fGlzTmFOKGQueSl8fChudWxsIT09YS50YyYmKHhrKGEsYixhLnRjLCEwLCEwKSxhLnRjIGluc3RhbmNlb2YgZmEmJmEudGMudHlwZT09PVpkPyhiLmJlZ2luUGF0aCgpLGIucmVjdChkLngsZC55LGQud2lkdGgsZC5oZWlnaHQpLHlrKGIsYS50YywhMCkpOmIuZmlsbFJlY3QoZC54LGQueSxkLndpZHRoLGQuaGVpZ2h0KSksbnVsbCE9PWEuTGImJih4ayhhLGIsYS5MYiwhMCksYS5MYiBpbnN0YW5jZW9mIGZhJiZhLkxiLnR5cGU9PT1aZD8oYi5iZWdpblBhdGgoKSxiLnJlY3QoZC54LGQueSxkLndpZHRoLGQuaGVpZ2h0KSx5ayhiLGEuTGIsITApKTpiLmZpbGxSZWN0KGQueCxkLnksZC53aWR0aCxkLmhlaWdodCkpLGEuZWwoYixjKSl9YWEuZWw9ZnVuY3Rpb24oKXt9Ow0KZnVuY3Rpb24geWsoYSxiLGMpe2lmKGMpaWYoYSBpbnN0YW5jZW9mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCYmYiBpbnN0YW5jZW9mIGZhJiZiLnR5cGU9PT1aZCl7dmFyIGQ9Yi50eTtiPWIuc3k7Yj5kPyhhLnNjYWxlKGQvYiwxKSxhLnRyYW5zbGF0ZSgoYi1kKS8yLDApLGM/YS5maWxsKCk6YS5zdHJva2UoKSxhLnRyYW5zbGF0ZSgtKGItZCkvMiwwKSxhLnNjYWxlKDEvKGQvYiksMSkpOmQ+Yj8oYS5zY2FsZSgxLGIvZCksYS50cmFuc2xhdGUoMCwoZC1iKS8yKSxjP2EuZmlsbCgpOmEuc3Ryb2tlKCksYS50cmFuc2xhdGUoMCwtKGQtYikvMiksYS5zY2FsZSgxLDEvKGIvZCkpKTpjP2EuZmlsbCgpOmEuc3Ryb2tlKCl9ZWxzZSBjP2EuZmlsbCgpOmEuc3Ryb2tlKCk7ZWxzZSBhLnN0cm9rZSgpfQ0KZnVuY3Rpb24geGsoYSxiLGMsZCxmKXtpZihudWxsIT09Yyl7dmFyIGc9MSxoPTE7aWYoInN0cmluZyI9PT10eXBlb2YgYylkP2Iucm4hPT1jJiYoYi5maWxsU3R5bGU9YyxiLnJuPWMpOmIuc24hPT1jJiYoYi5zdHJva2VTdHlsZT1jLGIuc249Yyk7ZWxzZSBpZihjLnR5cGU9PT1OZCljPWMuY29sb3IsZD9iLnJuIT09YyYmKGIuZmlsbFN0eWxlPWMsYi5ybj1jKTpiLnNuIT09YyYmKGIuc3Ryb2tlU3R5bGU9YyxiLnNuPWMpO2Vsc2V7dmFyIGssaD1hLlJhLGc9aC53aWR0aCxoPWguaGVpZ2h0O2lmKGYpdmFyIGw9YS5wYSxnPWwud2lkdGgsaD1sLmhlaWdodDt2YXIgbT1iIGluc3RhbmNlb2YgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO2lmKG0mJihjLlJnJiZjLnR5cGU9PT1ha3x8Yy50eT09PWcmJmMuc3k9PT1oKSlrPWMuUmc7ZWxzZXt2YXIgbixwLHE9cD0wO2YmJihsPWEucGEsZz1sLndpZHRoLGg9bC5oZWlnaHQscD1sLngscT1sLnkpO2Muc3RhcnQgaW5zdGFuY2VvZiB3PyhhPQ0KYy5zdGFydC54LGY9Yy5zdGFydC55KTpjLnN0YXJ0IGluc3RhbmNlb2YgST8oYT1jLnN0YXJ0LngqZytjLnN0YXJ0Lm9mZnNldFgsZj1jLnN0YXJ0LnkqaCtjLnN0YXJ0Lm9mZnNldFkpOihhPUtiLngqZytjLnN0YXJ0Lm9mZnNldFgsZj1LYi55KmgrYy5zdGFydC5vZmZzZXRZKTtjLmVuZCBpbnN0YW5jZW9mIHc/KGw9Yy5lbmQueCxuPWMuZW5kLnkpOmMuZW5kIGluc3RhbmNlb2YgST8obD1jLmVuZC54KmcrYy5lbmQub2Zmc2V0WCxuPWMuZW5kLnkqaCtjLmVuZC5vZmZzZXRZKTpjLnR5cGU9PT1PZD8obD1NYi54KmcrYy5lbmQub2Zmc2V0WCxuPU1iLnkqaCtjLmVuZC5vZmZzZXRZKToobD1LYi54KmcrYy5lbmQub2Zmc2V0WCxuPUtiLnkqaCtjLmVuZC5vZmZzZXRZKTthKz1wO2wrPXA7Zis9cTtuKz1xO2MudHlwZT09PU9kP2s9Yi5jcmVhdGVMaW5lYXJHcmFkaWVudChhLGYsbCxuKTpjLnR5cGU9PT1aZD8ocD1pc05hTihjLmFwKT9NYXRoLm1heChnLGgpLzI6Yy5hcCxpc05hTihjLlZwKT8NCihrPTAscD1NYXRoLm1heChnLGgpLzIpOms9Yy5WcCxrPWIuY3JlYXRlUmFkaWFsR3JhZGllbnQoYSxmLGssbCxuLHApKTpjLnR5cGU9PT1haz9rPWIuY3JlYXRlUGF0dGVybihjLnBhdHRlcm4sInJlcGVhdCIpOnQuYmMoYy50eXBlLCJCcnVzaCB0eXBlIik7aWYoYy50eXBlIT09YWsmJihwPWMuVm8pKWZvcihwPXAuaztwLm5leHQoKTspay5hZGRDb2xvclN0b3AocC5rZXkscC52YWx1ZSk7bSYmKGMuUmc9ayxjLnR5PWcsYy5zeT1oKX1kP2Iucm4hPT1rJiYoYi5maWxsU3R5bGU9ayxiLnJuPWspOmIuc24hPT1rJiYoYi5zdHJva2VTdHlsZT1rLGIuc249ayl9fX1RLnByb3RvdHlwZS5pc0NvbnRhaW5lZEJ5PVEucHJvdG90eXBlLmVqPWZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiB5KWE6e2lmKHRoaXMhPT1hJiZudWxsIT09YSlmb3IodmFyIGI9dGhpcy5pYTtudWxsIT09Yjspe2lmKGI9PT1hKXthPSEwO2JyZWFrIGF9Yj1iLmlhfWE9ITF9ZWxzZSBhPSExO3JldHVybiBhfTsNClEucHJvdG90eXBlLmlzVmlzaWJsZU9iamVjdD1RLnByb3RvdHlwZS5vbD1mdW5jdGlvbigpe2lmKCF0aGlzLnZpc2libGUpcmV0dXJuITE7dmFyIGE9dGhpcy5pYTtyZXR1cm4gbnVsbCE9PWE/YS5vbCgpOiEwfTsNCmZ1bmN0aW9uIEFrKGEpe2lmKDAhPT0oYS5tYSYyMDQ4KT09PSEwKXt2YXIgYj1hLm1kO2IucmVzZXQoKTtpZighYS5jYy5OKCl8fCFhLldjLk4oKSl7QmsoYSwhMSk7cmV0dXJufWIudHJhbnNsYXRlKGEuY2MueCxhLmNjLnkpO2IudHJhbnNsYXRlKC1hLkVhLngsLWEuRWEueSk7dmFyIGM9YS5SYTtpayhhLGIsYy54LGMueSxjLndpZHRoLGMuaGVpZ2h0KTtCayhhLCExKTtDayhhLCEwKX0wIT09KGEubWEmNDA5Nik9PT0hMCYmKGI9YS5pYSxudWxsPT09Yj8oYS5qay5zZXQoYS5tZCksQ2soYSwhMSkpOm51bGwhPT1iLm1lJiYoYz1hLmprLGMucmVzZXQoKSxiLkhmKCk/Yy5tdWx0aXBseShiLmprKTpudWxsIT09Yi5pYSYmYy5tdWx0aXBseShiLmlhLmprKSxjLm11bHRpcGx5KGEubWQpLENrKGEsITEpKSl9DQpmdW5jdGlvbiBpayhhLGIsYyxkLGYsZyl7MSE9PWEuc2NhbGUmJmIuc2NhbGUoYS5zY2FsZSk7aWYoMCE9PWEuYW5nbGUpe3ZhciBoPUtiO2EuYmYmJmEuYmYudmQoKSYmKGg9YS5iZik7dmFyIGs9dC5LKCk7aWYoYSBpbnN0YW5jZW9mIEUmJmEua2MhPT1hKWZvcihjPWEua2MsZD1jLlJhLGsuUHQoZC54LGQueSxkLndpZHRoLGQuaGVpZ2h0LGgpLGMuTGsuVGEoayksay5vZmZzZXQoLWMuRWEueCwtYy5FYS55KSxoPWMuaWE7bnVsbCE9PWgmJmghPT1hOyloLkxrLlRhKGspLGsub2Zmc2V0KC1oLkVhLngsLWguRWEueSksaD1oLmlhO2Vsc2Ugay5QdChjLGQsZixnLGgpO2Iucm90YXRlKGEuYW5nbGUsay54LGsueSk7dC5CKGspfX0NClEucHJvdG90eXBlLmZhPWZ1bmN0aW9uKGEpe2lmKCEwIT09T2kodGhpcykpe2xrKHRoaXMsITApO3BrKHRoaXMsITApO3ZhciBiPXRoaXMuaWE7bnVsbCE9PWI/YXx8Yi5mYSgpOihhPXRoaXMuaCxudWxsIT09YSYmKHRoaXMuUWEoKSYmYS5mZy5hZGQodGhpcyksdGhpcyBpbnN0YW5jZW9mIFMmJihhLmphLnNifHx0aGlzLndmKCksbnVsbCE9PXRoaXMuJGQmJkRrKHRoaXMuJGQpKSxhLnRlKCkpKTtpZih0aGlzIGluc3RhbmNlb2YgeSl7dmFyIGM9bnVsbDthPXRoaXMueGE7Yj1hLmxlbmd0aDt0aGlzLmRhPT09Y2kmJihjPUVrKHRoaXMsYSxiKSkmJmMuZmEoITApO2E9YS5uO2ZvcihjPTA7YzxiO2MrKyl7dmFyIGQ9YVtjXTshMCE9PU9pKGQpJiYoZC5DYS5OKCl8fChkIGluc3RhbmNlb2YgVGd8fGQgaW5zdGFuY2VvZiB5fHxkIGluc3RhbmNlb2YgbmF8fGtrKGQpIT09VWcpJiZkLmZhKCEwKSl9fX19Ow0KZnVuY3Rpb24gRmsoYSl7aWYoITE9PT1PaShhKSYmKGxrKGEsITApLHBrKGEsITApLGEgaW5zdGFuY2VvZiB5KSl7YT1hLnhhLm47Zm9yKHZhciBiPWEubGVuZ3RoLGM9MDtjPGI7YysrKUZrKGFbY10pfX1mdW5jdGlvbiBEayhhKXtpZighMT09PVBpKGEpKXtpZihudWxsIT09YS5pYSlhLmlhLmZhKCk7ZWxzZXt2YXIgYj1hLmg7bnVsbCE9PWImJihhLlFhKCkmJmIuZmcuYWRkKGEpLGEgaW5zdGFuY2VvZiBTJiZhLndmKCksYi50ZSgpKX1wayhhLCEwKX19ZnVuY3Rpb24gbWsoYSl7aWYoMCE9PShhLm1hJjIwNDgpPT09ITEmJihCayhhLCEwKSxDayhhLCEwKSxhIGluc3RhbmNlb2YgeSkpe2E9YS54YS5uO2Zvcih2YXIgYj1hLmxlbmd0aCxjPTA7YzxiO2MrKylHayhhW2NdKX19ZnVuY3Rpb24gR2soYSl7Q2soYSwhMCk7aWYoYSBpbnN0YW5jZW9mIHkpe2E9YS54YS5uO2Zvcih2YXIgYj1hLmxlbmd0aCxjPTA7YzxiO2MrKylHayhhW2NdKX19DQpRLnByb3RvdHlwZS5rYT1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBFKXt2YXIgYT10aGlzLmg7bnVsbCE9PWEmJiFQaSh0aGlzKSYmIVFpKHRoaXMpJiZ0aGlzLlFhKCkmJnRoaXMuY2MuTigpJiZhLmthKFRoKHRoaXMsdGhpcy5jYykpfWVsc2UgbnVsbCE9PXRoaXMuUyYmdGhpcy5TLmthKCl9O2Z1bmN0aW9uIGtrKGEpe3ZhciBiPWEuZ2ksYz1hLmlhO2lmKGMmJmMuZGE9PT1IaylyZXR1cm4gSWsoYSxjLkhkKGEucWMpLGMuR2QoYS5jb2x1bW4pKTtpZihjJiZjLmRhPT09Y2kmJmMuRHcoKT09PWEpcmV0dXJuIENjO2lmKGI9PT1WZyl7aWYoYyl7Yy5kYT09PVNnJiZudWxsPT09Yy5FbyYmKGI9Yy54YSxFayhjLGIsYi5sZW5ndGgpKTtpZihjLkVvPT09YSlyZXR1cm4gQ2M7YT1jLiR6O3JldHVybiBhPT09Vmc/VWc6YX1yZXR1cm4gVWd9cmV0dXJuIGJ9DQpmdW5jdGlvbiBJayhhLGIsYyl7dmFyIGQ9YS5naTtpZihkIT09VmcpcmV0dXJuIGQ7dmFyIGY9ZD12b2lkIDA7c3dpdGNoKGIuZ2kpe2Nhc2UgYms6Zj0hMDticmVhaztjYXNlIENjOmY9ITB9c3dpdGNoKGMuZ2kpe2Nhc2UgY2s6ZD0hMDticmVhaztjYXNlIENjOmQ9ITB9YT1hLmlhLiR6O2Q9dm9pZCAwIT09ZHx8YSE9PWNrJiZhIT09Q2M/ITE6ITA7Zj12b2lkIDAhPT1mfHxhIT09YmsmJmEhPT1DYz8hMTohMDtyZXR1cm4hMD09PWQmJiEwPT09Zj9DYzohMD09PWQ/Y2s6ITA9PT1mP2JrOlVnfXQuZyhRLCJzZWdtZW50T3JpZW50YXRpb24iLFEucHJvdG90eXBlLk10KTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7TXQ6InNlZ21lbnRPcmllbnRhdGlvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3N9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ3M7YiE9PWEmJihlJiZ0LkFhKGEsVixRLCJzZWdtZW50T3JpZW50YXRpb24iKSx0aGlzLmdzPWEsdGhpcy5mYSgpLHRoaXMuaigic2VnbWVudE9yaWVudGF0aW9uIixiLGEpKX0pO3QuZyhRLCJzZWdtZW50SW5kZXgiLFEucHJvdG90eXBlLkNmKTt0LmRlZmluZVByb3BlcnR5KFEse0NmOiJzZWdtZW50SW5kZXgifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmVzfSxmdW5jdGlvbihhKXtlJiZ0LmkoYSwibnVtYmVyIixRLCJzZWdtZW50SW5kZXgiKTthPU1hdGgucm91bmQoYSk7dmFyIGI9dGhpcy5lcztiIT09YSYmKHRoaXMuZXM9YSx0aGlzLmZhKCksdGhpcy5qKCJzZWdtZW50SW5kZXgiLGIsYSkpfSk7dC5nKFEsInNlZ21lbnRGcmFjdGlvbiIsUS5wcm90b3R5cGUuTHQpOw0KdC5kZWZpbmVQcm9wZXJ0eShRLHtMdDoic2VnbWVudEZyYWN0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kc30sZnVuY3Rpb24oYSl7ZSYmdC5pKGEsIm51bWJlciIsUSwic2VnbWVudEZyYWN0aW9uIik7aXNOYU4oYSk/YT0wOjA+YT9hPTA6MTxhJiYoYT0xKTt2YXIgYj10aGlzLmRzO2IhPT1hJiYodGhpcy5kcz1hLHRoaXMuZmEoKSx0aGlzLmooInNlZ21lbnRGcmFjdGlvbiIsYixhKSl9KTt0LmcoUSwic2VnbWVudE9mZnNldCIsUS5wcm90b3R5cGUuJEEpO3QuZGVmaW5lUHJvcGVydHkoUSx7JEE6InNlZ21lbnRPZmZzZXQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmZzfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmZzO2IuTShhKXx8KGUmJnQubChhLHcsUSwic2VnbWVudE9mZnNldCIpLHRoaXMuZnM9YT1hLlooKSx0aGlzLmZhKCksdGhpcy5qKCJzZWdtZW50T2Zmc2V0IixiLGEpKX0pO3QuZyhRLCJzdHJldGNoIixRLnByb3RvdHlwZS5naSk7DQp0LmRlZmluZVByb3BlcnR5KFEse2dpOiJzdHJldGNoIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QaH0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5QaDtiIT09YSYmKGUmJnQuQWEoYSxRLFEsInN0cmV0Y2giKSx0aGlzLlBoPWEsdGhpcy5mYSgpLHRoaXMuaigic3RyZXRjaCIsYixhKSl9KTt0LmcoUSwibmFtZSIsUS5wcm90b3R5cGUubmFtZSk7dC5kZWZpbmVQcm9wZXJ0eShRLHtuYW1lOiJuYW1lIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ZYn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5ZYjtiIT09YSYmKGUmJnQuaShhLCJzdHJpbmciLFEsIm5hbWUiKSx0aGlzLlliPWEsdGhpcy5TJiYodGhpcy5TLkdqPW51bGwpLHRoaXMuaigibmFtZSIsYixhKSl9KTt0LmcoUSwib3BhY2l0eSIsUS5wcm90b3R5cGUub3BhY2l0eSk7DQp0LmRlZmluZVByb3BlcnR5KFEse29wYWNpdHk6Im9wYWNpdHkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkxmfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkxmO2IhPT1hJiYodC5pKGEsIm51bWJlciIsUSwib3BhY2l0eSIpLCgwPmF8fDE8YSkmJnQubGEoYSwiMCA8PSB2YWwgPD0gMSIsUSwib3BhY2l0eSIpLHRoaXMuTGY9YSx0aGlzLmooIm9wYWNpdHkiLGIsYSksYT10aGlzLmgsYj10aGlzLlMsbnVsbCE9PWEmJm51bGwhPT1iJiZhLmthKFRoKGIsYi5wYSkpKX0pO3QuZyhRLCJ2aXNpYmxlIixRLnByb3RvdHlwZS52aXNpYmxlKTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7dmlzaWJsZToidmlzaWJsZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIDAhPT0odGhpcy5tYSYxKX0sZnVuY3Rpb24oYSl7dmFyIGI9MCE9PSh0aGlzLm1hJjEpO2IhPT1hJiYoZSYmdC5pKGEsImJvb2xlYW4iLFEsInZpc2libGUiKSx0aGlzLm1hXj0xLHRoaXMuaigidmlzaWJsZSIsYixhKSxiPXRoaXMuaWEsbnVsbCE9PWI/Yi5mYSgpOnRoaXMgaW5zdGFuY2VvZiBFJiYodGhpcy5oJiZ0aGlzLmgua2EoKSxxayh0aGlzKSx0aGlzLmRmKGEpKSx0aGlzLmthKCksSmsodGhpcykpfSk7dC5nKFEsInBpY2thYmxlIixRLnByb3RvdHlwZS5CZik7dC5kZWZpbmVQcm9wZXJ0eShRLHtCZjoicGlja2FibGUifSxmdW5jdGlvbigpe3JldHVybiAwIT09KHRoaXMubWEmMil9LGZ1bmN0aW9uKGEpe3ZhciBiPTAhPT0odGhpcy5tYSYyKTtiIT09YSYmKGUmJnQuaShhLCJib29sZWFuIixRLCJwaWNrYWJsZSIpLHRoaXMubWFePTIsdGhpcy5qKCJwaWNrYWJsZSIsYixhKSl9KTsNCnQuZyhRLCJmcm9tTGlua2FibGVEdXBsaWNhdGVzIixRLnByb3RvdHlwZS5GRSk7dC5kZWZpbmVQcm9wZXJ0eShRLHtGRToiZnJvbUxpbmthYmxlRHVwbGljYXRlcyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIDAhPT0odGhpcy5tYSY0KX0sZnVuY3Rpb24oYSl7dmFyIGI9MCE9PSh0aGlzLm1hJjQpO2IhPT1hJiYoZSYmdC5pKGEsImJvb2xlYW4iLFEsImZyb21MaW5rYWJsZUR1cGxpY2F0ZXMiKSx0aGlzLm1hXj00LHRoaXMuaigiZnJvbUxpbmthYmxlRHVwbGljYXRlcyIsYixhKSl9KTt0LmcoUSwiZnJvbUxpbmthYmxlU2VsZk5vZGUiLFEucHJvdG90eXBlLkdFKTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7R0U6ImZyb21MaW5rYWJsZVNlbGZOb2RlIn0sZnVuY3Rpb24oKXtyZXR1cm4gMCE9PSh0aGlzLm1hJjgpfSxmdW5jdGlvbihhKXt2YXIgYj0wIT09KHRoaXMubWEmOCk7YiE9PWEmJihlJiZ0LmkoYSwiYm9vbGVhbiIsUSwiZnJvbUxpbmthYmxlU2VsZk5vZGUiKSx0aGlzLm1hXj04LHRoaXMuaigiZnJvbUxpbmthYmxlU2VsZk5vZGUiLGIsYSkpfSk7dC5nKFEsInRvTGlua2FibGVEdXBsaWNhdGVzIixRLnByb3RvdHlwZS5CRyk7dC5kZWZpbmVQcm9wZXJ0eShRLHtCRzoidG9MaW5rYWJsZUR1cGxpY2F0ZXMifSxmdW5jdGlvbigpe3JldHVybiAwIT09KHRoaXMubWEmMTYpfSxmdW5jdGlvbihhKXt2YXIgYj0wIT09KHRoaXMubWEmMTYpO2IhPT1hJiYoZSYmdC5pKGEsImJvb2xlYW4iLFEsInRvTGlua2FibGVEdXBsaWNhdGVzIiksdGhpcy5tYV49MTYsdGhpcy5qKCJ0b0xpbmthYmxlRHVwbGljYXRlcyIsYixhKSl9KTsNCnQuZyhRLCJ0b0xpbmthYmxlU2VsZk5vZGUiLFEucHJvdG90eXBlLkNHKTt0LmRlZmluZVByb3BlcnR5KFEse0NHOiJ0b0xpbmthYmxlU2VsZk5vZGUifSxmdW5jdGlvbigpe3JldHVybiAwIT09KHRoaXMubWEmMzIpfSxmdW5jdGlvbihhKXt2YXIgYj0wIT09KHRoaXMubWEmMzIpO2IhPT1hJiYoZSYmdC5pKGEsImJvb2xlYW4iLFEsInRvTGlua2FibGVTZWxmTm9kZSIpLHRoaXMubWFePTMyLHRoaXMuaigidG9MaW5rYWJsZVNlbGZOb2RlIixiLGEpKX0pO3QuZyhRLCJpc1BhbmVsTWFpbiIsUS5wcm90b3R5cGUuZmopO3QuZGVmaW5lUHJvcGVydHkoUSx7Zmo6ImlzUGFuZWxNYWluIn0sZnVuY3Rpb24oKXtyZXR1cm4gMCE9PSh0aGlzLm1hJjY0KX0sZnVuY3Rpb24oYSl7dmFyIGI9MCE9PSh0aGlzLm1hJjY0KTtiIT09YSYmKGUmJnQuaShhLCJib29sZWFuIixRLCJpc1BhbmVsTWFpbiIpLHRoaXMubWFePTY0LHRoaXMuZmEoKSx0aGlzLmooImlzUGFuZWxNYWluIixiLGEpKX0pOw0KdC5nKFEsImlzQWN0aW9uYWJsZSIsUS5wcm90b3R5cGUuUHcpO3QuZGVmaW5lUHJvcGVydHkoUSx7UHc6ImlzQWN0aW9uYWJsZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIDAhPT0odGhpcy5tYSYxMjgpfSxmdW5jdGlvbihhKXt2YXIgYj0wIT09KHRoaXMubWEmMTI4KTtiIT09YSYmKGUmJnQuaShhLCJib29sZWFuIixRLCJpc0FjdGlvbmFibGUiKSx0aGlzLm1hXj0xMjgsdGhpcy5qKCJpc0FjdGlvbmFibGUiLGIsYSkpfSk7dC5nKFEsImFyZWFCYWNrZ3JvdW5kIixRLnByb3RvdHlwZS5aayk7DQp0LmRlZmluZVByb3BlcnR5KFEse1prOiJhcmVhQmFja2dyb3VuZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGN9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudGM7YiE9PWEmJihlJiZudWxsIT09YSYmdC5UbyhhLCJHcmFwaE9iamVjdC5hcmVhQmFja2dyb3VuZCIpLGEgaW5zdGFuY2VvZiBmYSYmYS5mcmVlemUoKSx0aGlzLnRjPWEsdGhpcy5rYSgpLHRoaXMuaigiYXJlYUJhY2tncm91bmQiLGIsYSkpfSk7dC5nKFEsImJhY2tncm91bmQiLFEucHJvdG90eXBlLmJhY2tncm91bmQpO3QuZGVmaW5lUHJvcGVydHkoUSx7YmFja2dyb3VuZDoiYmFja2dyb3VuZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTGJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuTGI7YiE9PWEmJihlJiZudWxsIT09YSYmdC5UbyhhLCJHcmFwaE9iamVjdC5iYWNrZ3JvdW5kIiksYSBpbnN0YW5jZW9mIGZhJiZhLmZyZWV6ZSgpLHRoaXMuTGI9YSx0aGlzLmthKCksdGhpcy5qKCJiYWNrZ3JvdW5kIixiLGEpKX0pOw0KZnVuY3Rpb24gemsoYSxiKXthLm1hPWI/YS5tYXw1MTI6YS5tYSYtNTEzfWZ1bmN0aW9uIEtrKGEsYil7YS5tYT1iP2EubWF8MTAyNDphLm1hJi0xMDI1fWZ1bmN0aW9uIEJrKGEsYil7YS5tYT1iP2EubWF8MjA0ODphLm1hJi0yMDQ5fWZ1bmN0aW9uIENrKGEsYil7YS5tYT1iP2EubWF8NDA5NjphLm1hJi00MDk3fWZ1bmN0aW9uIE9pKGEpe3JldHVybiAwIT09KGEubWEmODE5Mil9ZnVuY3Rpb24gbGsoYSxiKXthLm1hPWI/YS5tYXw4MTkyOmEubWEmLTgxOTN9ZnVuY3Rpb24gUGkoYSl7cmV0dXJuIDAhPT0oYS5tYSYxNjM4NCl9ZnVuY3Rpb24gcGsoYSxiKXthLm1hPWI/YS5tYXwxNjM4NDphLm1hJi0xNjM4NX10LkEoUSx7UzoicGFydCJ9LGZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIEUpcmV0dXJuIHRoaXM7aWYodGhpcy5sbSlyZXR1cm4gdGhpcy5sbTt2YXIgYTtmb3IoYT10aGlzLmlhO2E7KXtpZihhIGluc3RhbmNlb2YgRSlyZXR1cm4gdGhpcy5sbT1hO2E9YS5pYX1yZXR1cm4gbnVsbH0pOw0KUS5wcm90b3R5cGUud2w9ZnVuY3Rpb24oYSl7dGhpcy5JaT1hfTt0LkEoUSx7aWE6InBhbmVsIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5JaX0pO3QuQShRLHtsYXllcjoibGF5ZXIifSxmdW5jdGlvbigpe3ZhciBhPXRoaXMuUztyZXR1cm4gbnVsbCE9PWE/YS5sYXllcjpudWxsfSk7dC5BKFEse2g6ImRpYWdyYW0ifSxmdW5jdGlvbigpe3ZhciBhPXRoaXMuUztyZXR1cm4gbnVsbCE9PWE/YS5oOm51bGx9LHtjb25maWd1cmFibGU6ITB9KTt0LmcoUSwicG9zaXRpb24iLFEucHJvdG90eXBlLnBvc2l0aW9uKTt0LmRlZmluZVByb3BlcnR5KFEse3Bvc2l0aW9uOiJwb3NpdGlvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWF9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuTWE7Yi5NKGEpfHwoZSYmdC5sKGEsdyxRLCJwb3NpdGlvbiIpLGE9YS5aKCksdGhpcy5vRyhhLGIpJiZ0aGlzLmooInBvc2l0aW9uIixiLGEpKX0pOw0KUS5wcm90b3R5cGUub0c9ZnVuY3Rpb24oYSl7dGhpcy5NYT1hO0RrKHRoaXMpO21rKHRoaXMpO3JldHVybiEwfTtRLnByb3RvdHlwZS5wRz1mdW5jdGlvbihhLGIpe3RoaXMuTWEucChhLGIpO0xrKHRoaXMsITEpO21rKHRoaXMpfTt0LkEoUSx7cGE6ImFjdHVhbEJvdW5kcyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2N9KTt0LmcoUSwic2NhbGUiLFEucHJvdG90eXBlLnNjYWxlKTt0LmRlZmluZVByb3BlcnR5KFEse3NjYWxlOiJzY2FsZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2N9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMud2M7YiE9PWEmJihlJiZ0LnEoYSxRLCJzY2FsZSIpLDA+PWEmJnQubSgiR3JhcGhPYmplY3Quc2NhbGUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIpLHRoaXMud2M9YSxtayh0aGlzKSx0aGlzLmZhKCksdGhpcy5qKCJzY2FsZSIsYixhKSl9KTt0LmcoUSwiYW5nbGUiLFEucHJvdG90eXBlLmFuZ2xlKTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7YW5nbGU6ImFuZ2xlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53bn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy53bjtiIT09YSYmKGUmJnQucShhLFEsImFuZ2xlIiksYSU9MzYwLDA+YSYmKGErPTM2MCksYiE9PWEmJih0aGlzLnduPWEsdGhpcy5mYSgpLG1rKHRoaXMpLHRoaXMuaigiYW5nbGUiLGIsYSkpKX0pO3QuZyhRLCJkZXNpcmVkU2l6ZSIsUS5wcm90b3R5cGUuQ2EpOw0KdC5kZWZpbmVQcm9wZXJ0eShRLHtDYToiZGVzaXJlZFNpemUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmpmfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmpmO2IuTShhKXx8KGUmJnQubChhLGdhLFEsImRlc2lyZWRTaXplIiksdGhpcy5qZj1hPWEuWigpLHRoaXMuZmEoKSx0aGlzIGluc3RhbmNlb2YgVyYmdGhpcy5ZZSgpLHRoaXMuaigiZGVzaXJlZFNpemUiLGIsYSksYT10aGlzLlMsbnVsbCE9PWEmJjAhPT0odGhpcy5tYSYxMDI0KSYmKGdrKHRoaXMsYSwid2lkdGgiKSxnayh0aGlzLGEsImhlaWdodCIpKSl9KTt0LmcoUSwid2lkdGgiLFEucHJvdG90eXBlLndpZHRoKTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7d2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qZi53aWR0aH0sZnVuY3Rpb24oYSl7aWYodGhpcy5qZi53aWR0aCE9PWEpe2UmJnQuaShhLCJudW1iZXIiLFEsIndpZHRoIik7dmFyIGI9dGhpcy5qZjt0aGlzLmpmPWE9KG5ldyBnYShhLHRoaXMuamYuaGVpZ2h0KSkuZnJlZXplKCk7dGhpcy5mYSgpO3RoaXMgaW5zdGFuY2VvZiBXJiZ0aGlzLlllKCk7dGhpcy5qKCJkZXNpcmVkU2l6ZSIsYixhKTtiPXRoaXMuUztudWxsIT09YiYmMCE9PSh0aGlzLm1hJjEwMjQpJiZnayh0aGlzLGIsIndpZHRoIil9fSk7dC5nKFEsImhlaWdodCIsUS5wcm90b3R5cGUuaGVpZ2h0KTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7aGVpZ2h0OiJoZWlnaHQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmpmLmhlaWdodH0sZnVuY3Rpb24oYSl7aWYodGhpcy5qZi5oZWlnaHQhPT1hKXtlJiZ0LmkoYSwibnVtYmVyIixRLCJoZWlnaHQiKTt2YXIgYj10aGlzLmpmO3RoaXMuamY9YT0obmV3IGdhKHRoaXMuamYud2lkdGgsYSkpLmZyZWV6ZSgpO3RoaXMuZmEoKTt0aGlzIGluc3RhbmNlb2YgVyYmdGhpcy5ZZSgpO3RoaXMuaigiZGVzaXJlZFNpemUiLGIsYSk7Yj10aGlzLlM7bnVsbCE9PWImJjAhPT0odGhpcy5tYSYxMDI0KSYmZ2sodGhpcyxiLCJoZWlnaHQiKX19KTt0LmcoUSwibWluU2l6ZSIsUS5wcm90b3R5cGUuVmYpOw0KdC5kZWZpbmVQcm9wZXJ0eShRLHtWZjoibWluU2l6ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRmp9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuRmo7Yi5NKGEpfHwoZSYmdC5sKGEsZ2EsUSwibWluU2l6ZSIpLGE9YS5jb3B5KCksaXNOYU4oYS53aWR0aCkmJihhLndpZHRoPTApLGlzTmFOKGEuaGVpZ2h0KSYmKGEuaGVpZ2h0PTApLGEuZnJlZXplKCksdGhpcy5Gaj1hLHRoaXMuZmEoKSx0aGlzLmooIm1pblNpemUiLGIsYSkpfSk7dC5nKFEsIm1heFNpemUiLFEucHJvdG90eXBlLkhlKTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7SGU6Im1heFNpemUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkVqfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkVqO2IuTShhKXx8KGUmJnQubChhLGdhLFEsIm1heFNpemUiKSxhPWEuY29weSgpLGlzTmFOKGEud2lkdGgpJiYoYS53aWR0aD1JbmZpbml0eSksaXNOYU4oYS5oZWlnaHQpJiYoYS5oZWlnaHQ9SW5maW5pdHkpLGEuZnJlZXplKCksdGhpcy5Faj1hLHRoaXMuZmEoKSx0aGlzLmooIm1heFNpemUiLGIsYSkpfSk7dC5BKFEse0VhOiJtZWFzdXJlZEJvdW5kcyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuV2N9KTt0LkEoUSx7UmE6Im5hdHVyYWxCb3VuZHMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmhkfSx7Y29uZmlndXJhYmxlOiEwfSk7dC5nKFEsIm1hcmdpbiIsUS5wcm90b3R5cGUubWFyZ2luKTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7bWFyZ2luOiJtYXJnaW4ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnNyfSxmdW5jdGlvbihhKXsibnVtYmVyIj09PXR5cGVvZiBhP2E9bmV3IGFiKGEpOmUmJnQubChhLGFiLFEsIm1hcmdpbiIpO3ZhciBiPXRoaXMuc3I7Yi5NKGEpfHwodGhpcy5zcj1hPWEuWigpLHRoaXMuZmEoKSx0aGlzLmooIm1hcmdpbiIsYixhKSl9KTt0LkEoUSx7dHJhbnNmb3JtOm51bGx9LGZ1bmN0aW9uKCl7MCE9PSh0aGlzLm1hJjIwNDgpPT09ITAmJkFrKHRoaXMpO3JldHVybiB0aGlzLm1kfSk7dC5BKFEse21lOm51bGx9LGZ1bmN0aW9uKCl7MCE9PSh0aGlzLm1hJjQwOTYpPT09ITAmJkFrKHRoaXMpO3JldHVybiB0aGlzLmprfSk7dC5nKFEsImFsaWdubWVudCIsUS5wcm90b3R5cGUuYWxpZ25tZW50KTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7YWxpZ25tZW50OiJhbGlnbm1lbnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVlfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnVlO2IuTShhKXx8KGU/dC5sKGEsSSxRLCJhbGlnbm1lbnQiKTphLkdlKCkmJiFhLlBjKCkmJnQubSgiYWxpZ25tZW50IG11c3QgYmUgYSByZWFsIFNwb3Qgb3IgU3BvdC5EZWZhdWx0IiksdGhpcy51ZT1hPWEuWigpLERrKHRoaXMpLHRoaXMuaigiYWxpZ25tZW50IixiLGEpKX0pO3QuZyhRLCJjb2x1bW4iLFEucHJvdG90eXBlLmNvbHVtbik7dC5kZWZpbmVQcm9wZXJ0eShRLHtjb2x1bW46ImNvbHVtbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHF9LGZ1bmN0aW9uKGEpe2UmJnQucShhLFEsImNvbHVtbiIpO2E9TWF0aC5yb3VuZChhKTt2YXIgYj10aGlzLnRxO2IhPT1hJiYoMD5hJiZ0LmxhKGEsIj49IDAiLFEsImNvbHVtbiIpLHRoaXMudHE9YSx0aGlzLmZhKCksdGhpcy5qKCJjb2x1bW4iLGIsYSkpfSk7DQp0LmcoUSwiY29sdW1uU3BhbiIsUS5wcm90b3R5cGUuYUUpO3QuZGVmaW5lUHJvcGVydHkoUSx7YUU6ImNvbHVtblNwYW4ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnNqfSxmdW5jdGlvbihhKXtlJiZ0LnEoYSxRLCJjb2x1bW5TcGFuIik7YT1NYXRoLnJvdW5kKGEpO3ZhciBiPXRoaXMuc2o7YiE9PWEmJigxPmEmJnQubGEoYSwiPj0gMSIsUSwiY29sdW1uU3BhbiIpLHRoaXMuc2o9YSx0aGlzLmZhKCksdGhpcy5qKCJjb2x1bW5TcGFuIixiLGEpKX0pO3QuZyhRLCJyb3ciLFEucHJvdG90eXBlLnFjKTt0LmRlZmluZVByb3BlcnR5KFEse3FjOiJyb3cifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzfSxmdW5jdGlvbihhKXtlJiZ0LnEoYSxRLCJyb3ciKTthPU1hdGgucm91bmQoYSk7dmFyIGI9dGhpcy5hcztiIT09YSYmKDA+YSYmdC5sYShhLCI+PSAwIixRLCJyb3ciKSx0aGlzLmFzPWEsdGhpcy5mYSgpLHRoaXMuaigicm93IixiLGEpKX0pO3QuZyhRLCJyb3dTcGFuIixRLnByb3RvdHlwZS5yb3dTcGFuKTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7cm93U3Bhbjoicm93U3BhbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuS2p9LGZ1bmN0aW9uKGEpe2UmJnQucShhLFEsInJvd1NwYW4iKTthPU1hdGgucm91bmQoYSk7dmFyIGI9dGhpcy5LajtiIT09YSYmKDE+YSYmdC5sYShhLCI+PSAxIixRLCJyb3dTcGFuIiksdGhpcy5Laj1hLHRoaXMuZmEoKSx0aGlzLmooInJvd1NwYW4iLGIsYSkpfSk7dC5nKFEsImFsaWdubWVudEZvY3VzIixRLnByb3RvdHlwZS5Saik7DQp0LmRlZmluZVByb3BlcnR5KFEse1JqOiJhbGlnbm1lbnRGb2N1cyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXF9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubXE7Yi5NKGEpfHwoZT90LmwoYSxJLFEsImFsaWdubWVudEZvY3VzIik6YS5HZSgpJiYhYS5QYygpJiZ0Lm0oImFsaWdubWVudEZvY3VzIG11c3QgYmUgYSByZWFsIFNwb3Qgb3IgU3BvdC5EZWZhdWx0IiksdGhpcy5tcT1hPWEuWigpLHRoaXMuZmEoKSx0aGlzLmooImFsaWdubWVudEZvY3VzIixiLGEpKX0pO3QuZyhRLCJwb3J0SWQiLFEucHJvdG90eXBlLk5kKTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7TmQ6InBvcnRJZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTnJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuTnI7aWYoYiE9PWEpe2UmJm51bGwhPT1hJiZ0LmkoYSwic3RyaW5nIixRLCJwb3J0SWQiKTt2YXIgYz10aGlzLlM7bnVsbD09PWN8fGMgaW5zdGFuY2VvZiBTfHwodC5tKCJwb3J0SUQgYmVpbmcgc2V0IG9uIGEgTGluazogIithKSxjPW51bGwpO251bGwhPT1iJiZjJiZNayhjLHRoaXMpO3RoaXMuTnI9YTtpZihudWxsIT09YSYmYyl7Yy5GaD0hMDtudWxsPT09Yy5SZCYmTmsoYyk7dmFyIGQ9dGhpcy5OZDtudWxsIT09ZCYmYy5SZC5hZGQoZCx0aGlzKX10aGlzLmooInBvcnRJZCIsYixhKX19KTtmdW5jdGlvbiBPayhhKXt2YXIgYj17dmFsdWU6bnVsbH07UGsoYSxiKTtyZXR1cm4gYi52YWx1ZX0NCmZ1bmN0aW9uIFBrKGEsYil7dmFyIGM9YS5pYTtyZXR1cm4gbnVsbD09PWN8fCFQayhjLGIpJiZhLnZpc2libGU/KGIudmFsdWU9YSwhMSk6ITB9ZnVuY3Rpb24gSmsoYSl7dmFyIGI9YS5TO2IgaW5zdGFuY2VvZiBTJiYoYT1hLmgpJiYhYS5qYS5zYiYmYi53ZigpfXQuZyhRLCJ0b1Nwb3QiLFEucHJvdG90eXBlLnRiKTt0LmRlZmluZVByb3BlcnR5KFEse3RiOiJ0b1Nwb3QifSxmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5QP3RoaXMuUC5VaDp3Yn0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUCYmdGhpcy5GZSgpO3ZhciBiPXRoaXMuUC5VaDtiLk0oYSl8fChlJiZ0LmwoYSxJLFEsInRvU3BvdCIpLGE9YS5aKCksdGhpcy5QLlVoPWEsdGhpcy5qKCJ0b1Nwb3QiLGIsYSksSmsodGhpcykpfSk7dC5nKFEsInRvRW5kU2VnbWVudExlbmd0aCIsUS5wcm90b3R5cGUuaWspOw0KdC5kZWZpbmVQcm9wZXJ0eShRLHtpazoidG9FbmRTZWdtZW50TGVuZ3RoIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUD90aGlzLlAuUmg6MTB9LGZ1bmN0aW9uKGEpe251bGw9PT10aGlzLlAmJnRoaXMuRmUoKTt2YXIgYj10aGlzLlAuUmg7YiE9PWEmJihlJiZ0LmkoYSwibnVtYmVyIixRLCJ0b0VuZFNlZ21lbnRMZW5ndGgiKSwwPmEmJnQubGEoYSwiPj0gMCIsUSwidG9FbmRTZWdtZW50TGVuZ3RoIiksdGhpcy5QLlJoPWEsdGhpcy5qKCJ0b0VuZFNlZ21lbnRMZW5ndGgiLGIsYSksSmsodGhpcykpfSk7dC5nKFEsInRvRW5kU2VnbWVudERpcmVjdGlvbiIsUS5wcm90b3R5cGUuWHApOw0KdC5kZWZpbmVQcm9wZXJ0eShRLHtYcDoidG9FbmRTZWdtZW50RGlyZWN0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUD90aGlzLlAuUWg6ZWt9LGZ1bmN0aW9uKGEpe251bGw9PT10aGlzLlAmJnRoaXMuRmUoKTt2YXIgYj10aGlzLlAuUWg7YiE9PWEmJihlJiZ0LkFhKGEsUyxRLCJ0b0VuZFNlZ21lbnREaXJlY3Rpb24iKSx0aGlzLlAuUWg9YSx0aGlzLmooInRvRW5kU2VnbWVudERpcmVjdGlvbiIsYixhKSxKayh0aGlzKSl9KTt0LmcoUSwidG9TaG9ydExlbmd0aCIsUS5wcm90b3R5cGUuWXApOw0KdC5kZWZpbmVQcm9wZXJ0eShRLHtZcDoidG9TaG9ydExlbmd0aCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLlA/dGhpcy5QLlRoOjB9LGZ1bmN0aW9uKGEpe251bGw9PT10aGlzLlAmJnRoaXMuRmUoKTt2YXIgYj10aGlzLlAuVGg7YiE9PWEmJihlJiZ0LmkoYSwibnVtYmVyIixRLCJ0b1Nob3J0TGVuZ3RoIiksdGhpcy5QLlRoPWEsdGhpcy5qKCJ0b1Nob3J0TGVuZ3RoIixiLGEpLEprKHRoaXMpKX0pO3QuZyhRLCJ0b0xpbmthYmxlIixRLnByb3RvdHlwZS5sQik7dC5kZWZpbmVQcm9wZXJ0eShRLHtsQjoidG9MaW5rYWJsZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueXN9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueXM7YiE9PWEmJihlJiZudWxsIT09YSYmdC5pKGEsImJvb2xlYW4iLFEsInRvTGlua2FibGUiKSx0aGlzLnlzPWEsdGhpcy5qKCJ0b0xpbmthYmxlIixiLGEpKX0pO3QuZyhRLCJ0b01heExpbmtzIixRLnByb3RvdHlwZS5ERyk7DQp0LmRlZmluZVByb3BlcnR5KFEse0RHOiJ0b01heExpbmtzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56c30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy56cztiIT09YSYmKGUmJnQucShhLFEsInRvTWF4TGlua3MiKSwwPmEmJnQubGEoYSwiPj0gMCIsUSwidG9NYXhMaW5rcyIpLHRoaXMuenM9YSx0aGlzLmooInRvTWF4TGlua3MiLGIsYSkpfSk7dC5nKFEsImZyb21TcG90IixRLnByb3RvdHlwZS5wYik7dC5kZWZpbmVQcm9wZXJ0eShRLHtwYjoiZnJvbVNwb3QifSxmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5QP3RoaXMuUC5FaDp3Yn0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUCYmdGhpcy5GZSgpO3ZhciBiPXRoaXMuUC5FaDtiLk0oYSl8fChlJiZ0LmwoYSxJLFEsImZyb21TcG90IiksYT1hLlooKSx0aGlzLlAuRWg9YSx0aGlzLmooImZyb21TcG90IixiLGEpLEprKHRoaXMpKX0pO3QuZyhRLCJmcm9tRW5kU2VnbWVudExlbmd0aCIsUS5wcm90b3R5cGUuY2spOw0KdC5kZWZpbmVQcm9wZXJ0eShRLHtjazoiZnJvbUVuZFNlZ21lbnRMZW5ndGgifSxmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5QP3RoaXMuUC5CaDoxMH0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUCYmdGhpcy5GZSgpO3ZhciBiPXRoaXMuUC5CaDtiIT09YSYmKGUmJnQuaShhLCJudW1iZXIiLFEsImZyb21FbmRTZWdtZW50TGVuZ3RoIiksMD5hJiZ0LmxhKGEsIj49IDAiLFEsImZyb21FbmRTZWdtZW50TGVuZ3RoIiksdGhpcy5QLkJoPWEsdGhpcy5qKCJmcm9tRW5kU2VnbWVudExlbmd0aCIsYixhKSxKayh0aGlzKSl9KTt0LmcoUSwiZnJvbUVuZFNlZ21lbnREaXJlY3Rpb24iLFEucHJvdG90eXBlLmhwKTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7aHA6ImZyb21FbmRTZWdtZW50RGlyZWN0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUD90aGlzLlAuQWg6ZWt9LGZ1bmN0aW9uKGEpe251bGw9PT10aGlzLlAmJnRoaXMuRmUoKTt2YXIgYj10aGlzLlAuQWg7YiE9PWEmJihlJiZ0LkFhKGEsUyxRLCJmcm9tRW5kU2VnbWVudERpcmVjdGlvbiIpLHRoaXMuUC5BaD1hLHRoaXMuaigiZnJvbUVuZFNlZ21lbnREaXJlY3Rpb24iLGIsYSksSmsodGhpcykpfSk7dC5nKFEsImZyb21TaG9ydExlbmd0aCIsUS5wcm90b3R5cGUuaXApOw0KdC5kZWZpbmVQcm9wZXJ0eShRLHtpcDoiZnJvbVNob3J0TGVuZ3RoIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUD90aGlzLlAuRGg6MH0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUCYmdGhpcy5GZSgpO3ZhciBiPXRoaXMuUC5EaDtiIT09YSYmKGUmJnQuaShhLCJudW1iZXIiLFEsImZyb21TaG9ydExlbmd0aCIpLHRoaXMuUC5EaD1hLHRoaXMuaigiZnJvbVNob3J0TGVuZ3RoIixiLGEpLEprKHRoaXMpKX0pO3QuZyhRLCJmcm9tTGlua2FibGUiLFEucHJvdG90eXBlLmlBKTt0LmRlZmluZVByb3BlcnR5KFEse2lBOiJmcm9tTGlua2FibGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk5xfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLk5xO2IhPT1hJiYoZSYmbnVsbCE9PWEmJnQuaShhLCJib29sZWFuIixRLCJmcm9tTGlua2FibGUiKSx0aGlzLk5xPWEsdGhpcy5qKCJmcm9tTGlua2FibGUiLGIsYSkpfSk7dC5nKFEsImZyb21NYXhMaW5rcyIsUS5wcm90b3R5cGUuSEUpOw0KdC5kZWZpbmVQcm9wZXJ0eShRLHtIRToiZnJvbU1heExpbmtzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5PcX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5PcTtiIT09YSYmKGUmJnQucShhLFEsImZyb21NYXhMaW5rcyIpLDA+YSYmdC5sYShhLCI+PSAwIixRLCJmcm9tTWF4TGlua3MiKSx0aGlzLk9xPWEsdGhpcy5qKCJmcm9tTWF4TGlua3MiLGIsYSkpfSk7dC5nKFEsImN1cnNvciIsUS5wcm90b3R5cGUuY3Vyc29yKTt0LmRlZmluZVByb3BlcnR5KFEse2N1cnNvcjoiY3Vyc29yIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5BcX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5BcTtiIT09YSYmKHQuaShhLCJzdHJpbmciLFEsImN1cnNvciIpLHRoaXMuQXE9YSx0aGlzLmooImN1cnNvciIsYixhKSl9KTt0LmcoUSwiY2xpY2siLFEucHJvdG90eXBlLmNsaWNrKTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7Y2xpY2s6ImNsaWNrIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUT90aGlzLlEubmk6bnVsbH0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUSYmZGsodGhpcyk7dmFyIGI9dGhpcy5RLm5pO2IhPT1hJiYobnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsUSwiY2xpY2siKSx0aGlzLlEubmk9YSx0aGlzLmooImNsaWNrIixiLGEpKX0pO3QuZyhRLCJkb3VibGVDbGljayIsUS5wcm90b3R5cGUuTm0pO3QuZGVmaW5lUHJvcGVydHkoUSx7Tm06ImRvdWJsZUNsaWNrIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUT90aGlzLlEudGk6bnVsbH0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUSYmZGsodGhpcyk7dmFyIGI9dGhpcy5RLnRpO2IhPT1hJiYobnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsUSwiZG91YmxlQ2xpY2siKSx0aGlzLlEudGk9YSx0aGlzLmooImRvdWJsZUNsaWNrIixiLGEpKX0pOw0KdC5nKFEsImNvbnRleHRDbGljayIsUS5wcm90b3R5cGUuVnMpO3QuZGVmaW5lUHJvcGVydHkoUSx7VnM6ImNvbnRleHRDbGljayJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLlE/dGhpcy5RLnBpOm51bGx9LGZ1bmN0aW9uKGEpe251bGw9PT10aGlzLlEmJmRrKHRoaXMpO3ZhciBiPXRoaXMuUS5waTtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLFEsImNvbnRleHRDbGljayIpLHRoaXMuUS5waT1hLHRoaXMuaigiY29udGV4dENsaWNrIixiLGEpKX0pO3QuZyhRLCJtb3VzZUVudGVyIixRLnByb3RvdHlwZS5GQSk7DQp0LmRlZmluZVByb3BlcnR5KFEse0ZBOiJtb3VzZUVudGVyIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUT90aGlzLlEuRHI6bnVsbH0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUSYmZGsodGhpcyk7dmFyIGI9dGhpcy5RLkRyO2IhPT1hJiYobnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsUSwibW91c2VFbnRlciIpLHRoaXMuUS5Ecj1hLHRoaXMuaigibW91c2VFbnRlciIsYixhKSl9KTt0LmcoUSwibW91c2VMZWF2ZSIsUS5wcm90b3R5cGUuR0EpO3QuZGVmaW5lUHJvcGVydHkoUSx7R0E6Im1vdXNlTGVhdmUifSxmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5RP3RoaXMuUS5FcjpudWxsfSxmdW5jdGlvbihhKXtudWxsPT09dGhpcy5RJiZkayh0aGlzKTt2YXIgYj10aGlzLlEuRXI7YiE9PWEmJihudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIixRLCJtb3VzZUxlYXZlIiksdGhpcy5RLkVyPWEsdGhpcy5qKCJtb3VzZUxlYXZlIixiLGEpKX0pOw0KdC5nKFEsIm1vdXNlT3ZlciIsUS5wcm90b3R5cGUueXQpO3QuZGVmaW5lUHJvcGVydHkoUSx7eXQ6Im1vdXNlT3ZlciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLlE/dGhpcy5RLkVpOm51bGx9LGZ1bmN0aW9uKGEpe251bGw9PT10aGlzLlEmJmRrKHRoaXMpO3ZhciBiPXRoaXMuUS5FaTtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLFEsIm1vdXNlT3ZlciIpLHRoaXMuUS5FaT1hLHRoaXMuaigibW91c2VPdmVyIixiLGEpKX0pO3QuZyhRLCJtb3VzZUhvdmVyIixRLnByb3RvdHlwZS54dCk7DQp0LmRlZmluZVByb3BlcnR5KFEse3h0OiJtb3VzZUhvdmVyIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUT90aGlzLlEuRGk6bnVsbH0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUSYmZGsodGhpcyk7dmFyIGI9dGhpcy5RLkRpO2IhPT1hJiYobnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsUSwibW91c2VIb3ZlciIpLHRoaXMuUS5EaT1hLHRoaXMuaigibW91c2VIb3ZlciIsYixhKSl9KTt0LmcoUSwibW91c2VIb2xkIixRLnByb3RvdHlwZS53dCk7dC5kZWZpbmVQcm9wZXJ0eShRLHt3dDoibW91c2VIb2xkIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUT90aGlzLlEuQ2k6bnVsbH0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUSYmZGsodGhpcyk7dmFyIGI9dGhpcy5RLkNpO2IhPT1hJiYobnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsUSwibW91c2VIb2xkIiksdGhpcy5RLkNpPWEsdGhpcy5qKCJtb3VzZUhvbGQiLGIsYSkpfSk7DQp0LmcoUSwibW91c2VEcmFnRW50ZXIiLFEucHJvdG90eXBlLkJGKTt0LmRlZmluZVByb3BlcnR5KFEse0JGOiJtb3VzZURyYWdFbnRlciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLlE/dGhpcy5RLkJyOm51bGx9LGZ1bmN0aW9uKGEpe251bGw9PT10aGlzLlEmJmRrKHRoaXMpO3ZhciBiPXRoaXMuUS5CcjtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLFEsIm1vdXNlRHJhZ0VudGVyIiksdGhpcy5RLkJyPWEsdGhpcy5qKCJtb3VzZURyYWdFbnRlciIsYixhKSl9KTt0LmcoUSwibW91c2VEcmFnTGVhdmUiLFEucHJvdG90eXBlLkVBKTsNCnQuZGVmaW5lUHJvcGVydHkoUSx7RUE6Im1vdXNlRHJhZ0xlYXZlIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUT90aGlzLlEuQ3I6bnVsbH0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUSYmZGsodGhpcyk7dmFyIGI9dGhpcy5RLkNyO2IhPT1hJiYobnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsUSwibW91c2VEcmFnTGVhdmUiKSx0aGlzLlEuQ3I9YSx0aGlzLmooIm1vdXNlRHJhZ0xlYXZlIixiLGEpKX0pO3QuZyhRLCJtb3VzZURyb3AiLFEucHJvdG90eXBlLnZ0KTt0LmRlZmluZVByb3BlcnR5KFEse3Z0OiJtb3VzZURyb3AifSxmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5RP3RoaXMuUS5CaTpudWxsfSxmdW5jdGlvbihhKXtudWxsPT09dGhpcy5RJiZkayh0aGlzKTt2YXIgYj10aGlzLlEuQmk7YiE9PWEmJihudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIixRLCJtb3VzZURyb3AiKSx0aGlzLlEuQmk9YSx0aGlzLmooIm1vdXNlRHJvcCIsYixhKSl9KTsNCnQuZyhRLCJhY3Rpb25Eb3duIixRLnByb3RvdHlwZS5Heik7dC5kZWZpbmVQcm9wZXJ0eShRLHtHejoiYWN0aW9uRG93biJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLlE/dGhpcy5RLmlxOm51bGx9LGZ1bmN0aW9uKGEpe251bGw9PT10aGlzLlEmJmRrKHRoaXMpO3ZhciBiPXRoaXMuUS5pcTtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLFEsImFjdGlvbkRvd24iKSx0aGlzLlEuaXE9YSx0aGlzLmooImFjdGlvbkRvd24iLGIsYSkpfSk7dC5nKFEsImFjdGlvblVwIixRLnByb3RvdHlwZS5Jeik7DQp0LmRlZmluZVByb3BlcnR5KFEse0l6OiJhY3Rpb25VcCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLlE/dGhpcy5RLmtxOm51bGx9LGZ1bmN0aW9uKGEpe251bGw9PT10aGlzLlEmJmRrKHRoaXMpO3ZhciBiPXRoaXMuUS5rcTtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLFEsImFjdGlvblVwIiksdGhpcy5RLmtxPWEsdGhpcy5qKCJhY3Rpb25VcCIsYixhKSl9KTt0LmcoUSwiYWN0aW9uTW92ZSIsUS5wcm90b3R5cGUuSHopO3QuZGVmaW5lUHJvcGVydHkoUSx7SHo6ImFjdGlvbk1vdmUifSxmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5RP3RoaXMuUS5qcTpudWxsfSxmdW5jdGlvbihhKXtudWxsPT09dGhpcy5RJiZkayh0aGlzKTt2YXIgYj10aGlzLlEuanE7YiE9PWEmJihudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIixRLCJhY3Rpb25Nb3ZlIiksdGhpcy5RLmpxPWEsdGhpcy5qKCJhY3Rpb25Nb3ZlIixiLGEpKX0pOw0KdC5nKFEsImFjdGlvbkNhbmNlbCIsUS5wcm90b3R5cGUuRnopO3QuZGVmaW5lUHJvcGVydHkoUSx7Rno6ImFjdGlvbkNhbmNlbCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLlE/dGhpcy5RLmhxOm51bGx9LGZ1bmN0aW9uKGEpe251bGw9PT10aGlzLlEmJmRrKHRoaXMpO3ZhciBiPXRoaXMuUS5ocTtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLFEsImFjdGlvbkNhbmNlbCIpLHRoaXMuUS5ocT1hLHRoaXMuaigiYWN0aW9uQ2FuY2VsIixiLGEpKX0pO3QuZyhRLCJ0b29sVGlwIixRLnByb3RvdHlwZS5XdCk7DQp0LmRlZmluZVByb3BlcnR5KFEse1d0OiJ0b29sVGlwIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUT90aGlzLlEuT2k6bnVsbH0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUSYmZGsodGhpcyk7dmFyIGI9dGhpcy5RLk9pO2IhPT1hJiYobnVsbCE9PWEmJnQubChhLEplLFEsInRvb2xUaXAiKSx0aGlzLlEuT2k9YSx0aGlzLmooInRvb2xUaXAiLGIsYSkpfSk7dC5nKFEsImNvbnRleHRNZW51IixRLnByb3RvdHlwZS5jb250ZXh0TWVudSk7dC5kZWZpbmVQcm9wZXJ0eShRLHtjb250ZXh0TWVudToiY29udGV4dE1lbnUifSxmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5RP3RoaXMuUS5xaTpudWxsfSxmdW5jdGlvbihhKXtudWxsPT09dGhpcy5RJiZkayh0aGlzKTt2YXIgYj10aGlzLlEucWk7YiE9PWEmJihudWxsIT09YSYmdC5sKGEsSmUsUSwiY29udGV4dE1lbnUiKSx0aGlzLlEucWk9YSx0aGlzLmooImNvbnRleHRNZW51IixiLGEpKX0pOw0KUS5wcm90b3R5cGUuYmluZD1RLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGEpe2EucGc9dGhpczt2YXIgYj10aGlzLmVwKCk7bnVsbCE9PWImJlFrKGIpJiZ0Lm0oIkNhbm5vdCBhZGQgYSBCaW5kaW5nIHRvIGEgdGVtcGxhdGUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvcGllZDogIithKTtudWxsPT09dGhpcy5LYyYmKHRoaXMuS2M9bmV3IEIoRGUpKTt0aGlzLktjLmFkZChhKX07US5wcm90b3R5cGUuZmluZFRlbXBsYXRlQmluZGVyPVEucHJvdG90eXBlLmVwPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMgaW5zdGFuY2VvZiB5P3RoaXM6dGhpcy5pYTtudWxsIT09YTspe2lmKG51bGwhPT1hLkhsJiZhIGluc3RhbmNlb2YgeSlyZXR1cm4gYTthPWEuaWF9cmV0dXJuIG51bGx9O1EuZnJvbVN2Zz1RLmZyb21TVkc9ZnVuY3Rpb24oYSl7cmV0dXJuIFJrKGEpfTtRLnByb3RvdHlwZS5zZXRQcm9wZXJ0aWVzPWZ1bmN0aW9uKGEpe3QudXgodGhpcyxhKX07dmFyIFNrOw0KUS5tYWtlPVNrPWZ1bmN0aW9uKGEsYil7dmFyIGM9YXJndW1lbnRzLGQ9bnVsbCxmPW51bGw7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBhKWY9YTtlbHNlIGlmKCJzdHJpbmciPT09dHlwZW9mIGEpe3ZhciBnPVRrLnphKGEpOyJmdW5jdGlvbiI9PT10eXBlb2YgZz8oYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLGQ9ZyhjKSk6Zj1jYVthXX1udWxsPT09ZCYmKHZvaWQgMD09PWYmJihkPXdpbmRvdy4kLHZvaWQgMCE9PWQmJnZvaWQgMCE9PWQubm9vcCYmdC5tKCJHcmFwaE9iamVjdC5tYWtlIGZhaWxlZCB0byBjb21wbGV0ZS4gSXMgaXQgY29uZmxpY3Rpbmcgd2l0aCBhbm90aGVyICQgdmFyPyAoc3VjaCBhcyBqUXVlcnkpIiksdC5tKCJHcmFwaE9iamVjdC5tYWtlIGZhaWxlZCB0byBjb21wbGV0ZSwgaXQgbWF5IGJlIGNvbmZsaWN0aW5nIHdpdGggYW5vdGhlciB2YXIuIikpLG51bGwhPT1mJiZmLmNvbnN0cnVjdG9yfHx0Lm0oIkdyYXBoT2JqZWN0Lm1ha2UgcmVxdWlyZXMgYSBjbGFzcyBmdW5jdGlvbiBvciBjbGFzcyBuYW1lLCBub3Q6ICIrDQphKSxkPW5ldyBmKTtnPTE7ZCBpbnN0YW5jZW9mIHomJjE8Yy5sZW5ndGgmJihmPWNbMV0sInN0cmluZyI9PT10eXBlb2YgZnx8ZiBpbnN0YW5jZW9mIEhUTUxEaXZFbGVtZW50KSYmKGQuYWo9bnVsbCxhaShkLGYpLGcrKyk7Zm9yKDtnPGMubGVuZ3RoO2crKylmPWNbZ10sdm9pZCAwPT09Zj90Lm0oIlVuZGVmaW5lZCB2YWx1ZSBhdCBhcmd1bWVudCAiK2crIiBmb3Igb2JqZWN0IGJlaW5nIGNvbnN0cnVjdGVkIGJ5IEdyYXBoT2JqZWN0Lm1ha2U6ICIrZCk6VWsoZCxmKTtyZXR1cm4gZH07DQpmdW5jdGlvbiBVayhhLGIpe2lmKCJzdHJpbmciPT09dHlwZW9mIGIpe3ZhciBjPWE7aWYoYyBpbnN0YW5jZW9mIG5hKWMudGV4dD1iO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIFcpYy56Yj1iO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIFZrKWMuc291cmNlPWI7ZWxzZSBpZihjIGluc3RhbmNlb2YgeSl7dmFyIGQ9dC5PbSh5LGIpO251bGwhPT1kP2MudHlwZT1kOnQubSgiVW5rbm93biBQYW5lbCB0eXBlIGFzIGFuIGFyZ3VtZW50IHRvIEdyYXBoT2JqZWN0Lm1ha2U6ICIrYil9ZWxzZSBjIGluc3RhbmNlb2YgZmE/KGQ9dC5PbShmYSxiKSxudWxsIT09ZD9jLnR5cGU9ZDp0Lm0oIlVua25vd24gQnJ1c2ggdHlwZSBhcyBhbiBhcmd1bWVudCB0byBHcmFwaE9iamVjdC5tYWtlOiAiK2IpKTpjIGluc3RhbmNlb2YgemM/KGQ9dC5PbSh6YyxiKSxudWxsIT09ZD9jLnR5cGU9ZDp0Lm0oIlVua25vd24gR2VvbWV0cnkgdHlwZSBhcyBhbiBhcmd1bWVudCB0byBHcmFwaE9iamVjdC5tYWtlOiAiK2IpKToNCmMgaW5zdGFuY2VvZiBpZD8oZD10Lk9tKGlkLGIpLG51bGwhPT1kP2MudHlwZT1kOnQubSgiVW5rbm93biBQYXRoU2VnbWVudCB0eXBlIGFzIGFuIGFyZ3VtZW50IHRvIEdyYXBoT2JqZWN0Lm1ha2U6ICIrYikpOnQubSgiVW5hYmxlIHRvIHVzZSBhIHN0cmluZyBhcyBhbiBhcmd1bWVudCB0byBHcmFwaE9iamVjdC5tYWtlOiAiK2IpfWVsc2UgaWYoYiBpbnN0YW5jZW9mIFEpYSBpbnN0YW5jZW9mIHl8fHQubSgiQSBHcmFwaE9iamVjdCBjYW4gb25seSBiZSBhZGRlZCB0byBhIFBhbmVsLCBub3QgdG86ICIrYSksYS5hZGQoYik7ZWxzZSBpZihiIGluc3RhbmNlb2YgQWUpYSBpbnN0YW5jZW9mIHl8fHQubSgiQSBSb3dDb2x1bW5EZWZpbml0aW9uIGNhbiBvbmx5IGJlIGFkZGVkIHRvIGEgUGFuZWwsIG5vdCB0bzogIithKSxnaihiLnhmP2EuSGQoYi5pbmRleCk6YS5HZChiLmluZGV4KSxiKTtlbHNlIGlmKGIgaW5zdGFuY2VvZiBkYSljPWEsYyBpbnN0YW5jZW9mIFYmJmIuUmU9PT1WPw0KMj09PShiLnZhbHVlJjIpP2MuS3Q9YjpiPT09T2d8fGI9PT14Z3x8Yj09PXdnP2MuRGU9YjpiPT09V2t8fGI9PT1Ya3x8Yj09PVlrP2MuTG89YjpiIT09WmsmJmIhPT15ZyYmdC5tKCJVbmtub3duIExpbmsgZW51bSB2YWx1ZSBmb3IgYSBMaW5rIHByb3BlcnR5OiAiK2IpOmMgaW5zdGFuY2VvZiB5JiZiLlJlPT09eT9jLnR5cGU9YjpjIGluc3RhbmNlb2YgbmEmJmIuUmU9PT1uYT9jLnJCPWI6YyBpbnN0YW5jZW9mIFEmJmIuUmU9PT1WPzA9PT1iLm5hbWUuaW5kZXhPZigiT3JpZW50Iik/Yy5NdD1iOnQubSgiVW5rbm93biBMaW5rIGVudW0gdmFsdWUgZm9yIEdyYXBoT2JqZWN0LnNlZ21lbnRPcmllbnRhdGlvbiBwcm9wZXJ0eTogIitiKTpjIGluc3RhbmNlb2YgUSYmYi5SZT09PVE/Yy5naT1iOmMgaW5zdGFuY2VvZiB6JiZiLlJlPT09ej9jLkRtPWI6YyBpbnN0YW5jZW9mIGZhJiZiLlJlPT09ZmE/Yy50eXBlPWI6YyBpbnN0YW5jZW9mIHpjJiZiLlJlPT09emM/Yy50eXBlPWI6YyBpbnN0YW5jZW9mDQppZCYmYi5SZT09PWlkP2MudHlwZT1iOmMgaW5zdGFuY2VvZiBEZSYmYi5SZT09PURlP2MubW9kZT1iOmMgaW5zdGFuY2VvZiB0ZCYmYi5SZT09PXRkP2MudGQ9YjpjIGluc3RhbmNlb2YgWCYmYi5SZT09PVg/MD09PWIubmFtZS5pbmRleE9mKCJBbGlnbm1lbnQiKT9jLmFsaWdubWVudD1iOjA9PT1iLm5hbWUuaW5kZXhPZigiQXJyYW5nZW1lbnQiKT9jLlFlPWI6MD09PWIubmFtZS5pbmRleE9mKCJDb21wYWN0aW9uIik/Yy5jb21wYWN0aW9uPWI6MD09PWIubmFtZS5pbmRleE9mKCJQYXRoIik/Yy5wYXRoPWI6MD09PWIubmFtZS5pbmRleE9mKCJTb3J0aW5nIik/Yy5zb3J0aW5nPWI6MD09PWIubmFtZS5pbmRleE9mKCJTdHlsZSIpP2MuTkc9Yjp0Lm0oIlVua25vd24gZW51bSB2YWx1ZTogIitiKTpjIGluc3RhbmNlb2YgWiYmYi5SZT09PVo/MD09PWIubmFtZS5pbmRleE9mKCJBZ2dyZXNzaXZlIik/Yy5MRD1iOjA9PT1iLm5hbWUuaW5kZXhPZigiQ3ljbGUiKT9jLmpFPWI6MD09PWIubmFtZS5pbmRleE9mKCJJbml0Iik/DQpjLiRFPWI6MD09PWIubmFtZS5pbmRleE9mKCJMYXllciIpP2MubUY9Yjp0Lm0oIlVua25vd24gZW51bSB2YWx1ZTogIitiKTpjIGluc3RhbmNlb2YgWGomJmIuUmU9PT1Yaj9iPT09JGt8fGI9PT1hbHx8Yj09PWJsfHxiPT09Y2w/Yy5zb3J0aW5nPWI6Yj09PWRsfHxiPT09ZWw/Yy5RZT1iOmI9PT1mbHx8Yj09PWdsP2MuYWxpZ25tZW50PWI6dC5tKCJVbmtub3duIGVudW0gdmFsdWU6ICIrYik6YyBpbnN0YW5jZW9mIGhsJiZiLlJlPT09aGw/Yj09PWlsfHxiPT09amx8fGI9PT1rbHx8Yj09PWxsfHxiPT09bWw/Yy5zb3J0aW5nPWI6Yj09PW5sfHxiPT09b2x8fGI9PT1wbHx8Yj09PXFsP2MuZGlyZWN0aW9uPWI6Yj09PXJsfHxiPT09c2x8fGI9PT16bHx8Yj09PUFsP2MuUWU9YjpiPT09Qmx8fGI9PT1DbD9jLkF0PWI6dC5tKCJVbmtub3duIGVudW0gdmFsdWU6ICIrYik6dC5tKCJObyBwcm9wZXJ0eSB0byBzZXQgZm9yIHRoaXMgZW51bSB2YWx1ZTogIitiKTtlbHNlIGlmKGIgaW5zdGFuY2VvZg0KRGUpaWYoYSBpbnN0YW5jZW9mIFF8fGEgaW5zdGFuY2VvZiBBZSl7dmFyIGQ9Yi5VdCxmPWQuaW5kZXhPZigiLiIpOzA8ZiYmYSBpbnN0YW5jZW9mIHkmJihjPWQuc3Vic3RyKGYrMSksZD1hLm9lKGQuc3Vic3RyaW5nKDAsZikpLG51bGwhPT1kJiYoYT1kLGIuVXQ9YykpO2EuYmluZChiKX1lbHNlIHQubSgiQSBCaW5kaW5nIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gYSBHcmFwaE9iamVjdCBvciBSb3dDb2x1bW5EZWZpbml0aW9uLCBub3QgdG86ICIrYSk7ZWxzZSBpZihiIGluc3RhbmNlb2YgQmMpYSBpbnN0YW5jZW9mIHpjP2EuQWIuYWRkKGIpOnQubSgiQSBQYXRoRmlndXJlIGNhbiBvbmx5IGJlIGFkZGVkIHRvIGEgR2VvbWV0cnksIG5vdCB0bzogIithKTtlbHNlIGlmKGIgaW5zdGFuY2VvZiBpZClhIGluc3RhbmNlb2YgQmM/YS5GYS5hZGQoYik6dC5tKCJBIFBhdGhTZWdtZW50IGNhbiBvbmx5IGJlIGFkZGVkIHRvIGEgUGF0aEZpZ3VyZSwgbm90IHRvOiAiK2EpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShiKSlmb3IoYz0NCjA7YzxiLmxlbmd0aDtjKyspVWsoYSxiW2NdKTtlbHNlIGlmKCJvYmplY3QiPT09dHlwZW9mIGImJm51bGwhPT1iKWlmKGM9YSxjIGluc3RhbmNlb2YgZmEpe2Q9e307Zm9yKGYgaW4gYil7dmFyIGc9cGFyc2VGbG9hdChmKTtpc05hTihnKT9kW2ZdPWJbZl06Yy5hZGRDb2xvclN0b3AoZyxiW2ZdKX10LnV4KGMsZCl9ZWxzZSBjIGluc3RhbmNlb2YgQWU/KHZvaWQgMCE9PWIucm93PyhkPWIucm93LCh2b2lkIDA9PT1kfHxudWxsPT09ZHx8SW5maW5pdHk9PT1kfHxpc05hTihkKXx8MD5kKSYmdC5tKCJNdXN0IHNwZWNpZnkgbm9uLW5lZ2F0aXZlIGludGVnZXIgcm93IGZvciBSb3dDb2x1bW5EZWZpbml0aW9uICIrYiksYy5WbD0hMCxjLlZjPWQpOnZvaWQgMCE9PWIuY29sdW1uPyhkPWIuY29sdW1uLCh2b2lkIDA9PT1kfHxudWxsPT09ZHx8SW5maW5pdHk9PT1kfHxpc05hTihkKXx8MD5kKSYmdC5tKCJNdXN0IHNwZWNpZnkgbm9uLW5lZ2F0aXZlIGludGVnZXIgY29sdW1uIGZvciBSb3dDb2x1bW5EZWZpbml0aW9uICIrDQpiKSxjLlZsPSExLGMuVmM9ZCk6dC5tKCJNdXN0IHNwZWNpZnkgcm93IG9yIGNvbHVtbiB2YWx1ZSBpbiBhIFJvd0NvbHVtbkRlZmluaXRpb24gIitiKSxkPXQuaEkoYiwicm93IiwiY29sdW1uIiksdC51eChjLGQpKTp0LnV4KGMsYik7ZWxzZSB0Lm0oJ1Vua25vd24gaW5pdGlhbGl6ZXIgIicrYisnIiBmb3Igb2JqZWN0IGJlaW5nIGNvbnN0cnVjdGVkIGJ5IEdyYXBoT2JqZWN0Lm1ha2U6ICcrYSl9dmFyIFRrO1EuQnVpbGRlcnM9VGs9bmV3IGphKCJzdHJpbmciLCJmdW5jdGlvbiIpOw0KVGsuYWRkKCJCdXR0b24iLGZ1bmN0aW9uKCl7dmFyIGE9bmV3IGZhKE9kKTthLmFkZENvbG9yU3RvcCgwLCJ3aGl0ZSIpO2EuYWRkQ29sb3JTdG9wKDEsImxpZ2h0Z3JheSIpO3ZhciBiPW5ldyBmYShPZCk7Yi5hZGRDb2xvclN0b3AoMCwid2hpdGUiKTtiLmFkZENvbG9yU3RvcCgxLCJkb2RnZXJibHVlIik7dmFyIGM9U2soeSxjaSx7UHc6ITB9LFNrKFcse25hbWU6IkJ1dHRvbkJvcmRlciIsemI6IlJvdW5kZWRSZWN0YW5nbGUiLGZpbGw6YSxzdHJva2U6ImdyYXkifSkpO2MuRkE9ZnVuY3Rpb24oYSxjKXt2YXIgZz1jLndhKDApLGg9Yy5fYnV0dG9uRmlsbE92ZXI7dm9pZCAwPT09aCYmKGg9Yik7Yy5fYnV0dG9uRmlsbE5vcm1hbD1nLmZpbGw7Zy5maWxsPWg7aD1jLl9idXR0b25TdHJva2VPdmVyO3ZvaWQgMD09PWgmJihoPSJibHVlIik7Yy5fYnV0dG9uU3Ryb2tlTm9ybWFsPWcuc3Ryb2tlO2cuc3Ryb2tlPWh9O2MuR0E9ZnVuY3Rpb24oYixjKXt2YXIgZz1jLndhKDApLGg9Yy5fYnV0dG9uRmlsbE5vcm1hbDsNCnZvaWQgMD09PWgmJihoPWEpO2cuZmlsbD1oO2g9Yy5fYnV0dG9uU3Ryb2tlTm9ybWFsO3ZvaWQgMD09PWgmJihoPSJncmF5Iik7Zy5zdHJva2U9aH07cmV0dXJuIGN9KTsNClRrLmFkZCgiVHJlZUV4cGFuZGVyQnV0dG9uIixmdW5jdGlvbigpe3ZhciBhPVNrKCJCdXR0b24iLFNrKFcse25hbWU6IkJ1dHRvbkljb24iLHpiOiJNaW51c0xpbmUiLENhOkguZHF9LChuZXcgRGUoImZpZ3VyZSIsImlzVHJlZUV4cGFuZGVkIixmdW5jdGlvbihhLGMpe3ZhciBkPW51bGwsZj1jLmlhO2YmJihkPWE/Zi5fdHJlZUV4cGFuZGVkRmlndXJlOmYuX3RyZWVDb2xsYXBzZWRGaWd1cmUpO2R8fChkPWE/Ik1pbnVzTGluZSI6IlBsdXNMaW5lIik7cmV0dXJuIGR9KSkuTEEoIiIpKSx7dmlzaWJsZTohMX0sKG5ldyBEZSgidmlzaWJsZSIsImlzVHJlZUxlYWYiLGZ1bmN0aW9uKGEpe3JldHVybiFhfSkpLkxBKCIiKSk7YS5jbGljaz1mdW5jdGlvbihhLGMpe3ZhciBkPWMuUztkIGluc3RhbmNlb2YgSmUmJihkPWQuWGgpO2lmKGQgaW5zdGFuY2VvZiBTKXt2YXIgZj1kLmg7aWYobnVsbCE9PWYpe2Y9Zi5TZTtpZihkLlFjKXtpZighZi5jYW5Db2xsYXBzZVRyZWUoZCkpcmV0dXJufWVsc2UgaWYoIWYuY2FuRXhwYW5kVHJlZShkKSlyZXR1cm47DQphLkVlPSEwO2QuUWM/Zi5jb2xsYXBzZVRyZWUoZCk6Zi5leHBhbmRUcmVlKGQpfX19O3JldHVybiBhfSk7DQpUay5hZGQoIlN1YkdyYXBoRXhwYW5kZXJCdXR0b24iLGZ1bmN0aW9uKCl7dmFyIGE9U2soIkJ1dHRvbiIsU2soVyx7bmFtZToiQnV0dG9uSWNvbiIsemI6Ik1pbnVzTGluZSIsQ2E6SC5kcX0sKG5ldyBEZSgiZmlndXJlIiwiaXNTdWJHcmFwaEV4cGFuZGVkIixmdW5jdGlvbihhLGMpe3ZhciBkPW51bGwsZj1jLmlhO2YmJihkPWE/Zi5fc3ViR3JhcGhFeHBhbmRlZEZpZ3VyZTpmLl9zdWJHcmFwaENvbGxhcHNlZEZpZ3VyZSk7ZHx8KGQ9YT8iTWludXNMaW5lIjoiUGx1c0xpbmUiKTtyZXR1cm4gZH0pKS5MQSgiIikpKTthLmNsaWNrPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9Yy5TO2QgaW5zdGFuY2VvZiBKZSYmKGQ9ZC5YaCk7aWYoZCBpbnN0YW5jZW9mIFQpe3ZhciBmPWQuaDtpZihudWxsIT09Zil7Zj1mLlNlO2lmKGQuWWQpe2lmKCFmLmNhbkNvbGxhcHNlU3ViR3JhcGgoZCkpcmV0dXJufWVsc2UgaWYoIWYuY2FuRXhwYW5kU3ViR3JhcGgoZCkpcmV0dXJuO2EuRWU9ITA7ZC5ZZD9mLmNvbGxhcHNlU3ViR3JhcGgoZCk6DQpmLmV4cGFuZFN1YkdyYXBoKGQpfX19O3JldHVybiBhfSk7VGsuYWRkKCJDb250ZXh0TWVudUJ1dHRvbiIsZnVuY3Rpb24oKXt2YXIgYT1TaygiQnV0dG9uIik7YS5naT1jazt2YXIgYj1hLm9lKCJCdXR0b25Cb3JkZXIiKTtiIGluc3RhbmNlb2YgVyYmKGIuemI9IlJlY3RhbmdsZSIsYi5HPW5ldyBJKDAsMCwyLDIpLGIuSD1uZXcgSSgxLDEsLTIsLTIpKTtyZXR1cm4gYX0pO1EuZGVmaW5lQnVpbGRlcj1mdW5jdGlvbihhLGIpe3QuaShhLCJzdHJpbmciLFEsImRlZmluZUJ1aWxkZXI6bmFtZSIpO3QuaShiLCJmdW5jdGlvbiIsUSwiZGVmaW5lQnVpbGRlcjpmdW5jIik7dmFyIGM9YS50b0xvd2VyQ2FzZSgpOyIiIT09YSYmIm5vbmUiIT09YyYmYSE9PWN8fHQubSgiU2hhcGUuZGVmaW5lRmlndXJlR2VuZXJhdG9yIG5hbWUgbXVzdCBub3QgYmUgZW1wdHkgb3IgTm9uZSBvciBhbGwtbG93ZXItY2FzZTogIithKTtRLkJ1aWxkZXJzLmFkZChhLGIpfTsNCmZ1bmN0aW9uIHkoYSl7US5jYWxsKHRoaXMpO3ZvaWQgMD09PWE/MD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5kYT1aZzp0Lm0oImludmFsaWQgYXJndW1lbnQgdG8gUGFuZWwgY29uc3RydWN0b3I6IHVuZGVmaW5lZCIpOih0LkFhKGEseSx5LCJ0eXBlIiksdGhpcy5kYT1hKTt0aGlzLnhhPW5ldyBCKFEpO3RoaXMuTmU9SC5mcTt0aGlzLlZnPSExO3RoaXMuZGE9PT13aSYmKHRoaXMuVmc9ITApO3RoaXMuRHE9eGI7dGhpcy52Yz1WZzt0aGlzLmRhPT09SGsmJkRsKHRoaXMpO3RoaXMuSW89V2c7dGhpcy5TcT0obmV3IGdhKDEwLDEwKSkuZnJlZXplKCk7dGhpcy5UcT1ILm5qO3RoaXMuSGw9dGhpcy5NbD1udWxsO3RoaXMuaHI9TmFOO3RoaXMuaGc9dGhpcy55aT1udWxsO3RoaXMuZW89ImNhdGVnb3J5Ijt0aGlzLmdnPW51bGw7dGhpcy5RaT1uZXcgeChOYU4sTmFOLE5hTixOYU4pO3RoaXMuRW89bnVsbDt0aGlzLkZoPSExO3RoaXMuYnM9bnVsbH10LmdhKCJQYW5lbCIseSk7dC5ZaCh5KTsNCnQuS2EoeSxRKTtmdW5jdGlvbiBEbChhKXthLnRqPUguZnE7YS54aD0xO2Euc2k9bnVsbDthLk9sPW51bGw7YS53aD0xO2Eudmg9bnVsbDthLk5sPW51bGw7YS5rZD1bXTthLmRkPVtdO2EucW09RWw7YS5KbD1FbDthLlBpPTA7YS56aT0wfQ0KeS5wcm90b3R5cGUuY2xvbmVQcm90ZWN0ZWQ9ZnVuY3Rpb24oYSl7US5wcm90b3R5cGUuY2xvbmVQcm90ZWN0ZWQuY2FsbCh0aGlzLGEpO2EuZGE9dGhpcy5kYTthLk5lPXRoaXMuTmUuWigpO2EuVmc9dGhpcy5WZzthLkRxPXRoaXMuRHEuWigpO2EudmM9dGhpcy52YztpZihhLmRhPT09SGspe2EudGo9dGhpcy50ai5aKCk7YS54aD10aGlzLnhoO2Euc2k9dGhpcy5zaTthLk9sPXRoaXMuT2w7YS53aD10aGlzLndoO2Eudmg9dGhpcy52aDthLk5sPXRoaXMuTmw7dmFyIGI9W107aWYoMDx0aGlzLmtkLmxlbmd0aClmb3IodmFyIGM9dGhpcy5rZCxkPWMubGVuZ3RoLGY9MDtmPGQ7ZisrKWlmKHZvaWQgMCE9PWNbZl0pe3ZhciBnPWNbZl0uY29weSgpO2cud2woYSk7YltmXT1nfWEua2Q9YjtiPVtdO2lmKDA8dGhpcy5kZC5sZW5ndGgpZm9yKGM9dGhpcy5kZCxkPWMubGVuZ3RoLGY9MDtmPGQ7ZisrKXZvaWQgMCE9PWNbZl0mJihnPWNbZl0uY29weSgpLGcud2woYSksYltmXT1nKTthLmRkPQ0KYjthLnFtPXRoaXMucW07YS5KbD10aGlzLkpsO2EuUGk9dGhpcy5QaTthLnppPXRoaXMueml9YS5Jbz10aGlzLklvO2EuU3EuYXNzaWduKHRoaXMuU3EpO2EuVHE9dGhpcy5UcS5aKCk7YS5NbD10aGlzLk1sO2EuSGw9dGhpcy5IbDthLmhyPXRoaXMuaHI7YS55aT10aGlzLnlpO2EuaGc9dGhpcy5oZzthLmVvPXRoaXMuZW87YS5RaS5hc3NpZ24odGhpcy5RaSk7YS5GaD10aGlzLkZoO3RoaXMuYnMmJihhLmJzPXRoaXMuYnMpO3RoaXMuX2J1dHRvbkZpbGxOb3JtYWwmJihhLl9idXR0b25GaWxsTm9ybWFsPXRoaXMuX2J1dHRvbkZpbGxOb3JtYWwpO3RoaXMuX2J1dHRvbkZpbGxPdmVyJiYoYS5fYnV0dG9uRmlsbE92ZXI9dGhpcy5fYnV0dG9uRmlsbE92ZXIpO3RoaXMuX2J1dHRvblN0cm9rZU5vcm1hbCYmKGEuX2J1dHRvblN0cm9rZU5vcm1hbD10aGlzLl9idXR0b25TdHJva2VOb3JtYWwpO3RoaXMuX2J1dHRvblN0cm9rZU92ZXImJihhLl9idXR0b25TdHJva2VPdmVyPXRoaXMuX2J1dHRvblN0cm9rZU92ZXIpOw0KdGhpcy5fdHJlZUV4cGFuZGVkRmlndXJlJiYoYS5fdHJlZUV4cGFuZGVkRmlndXJlPXRoaXMuX3RyZWVFeHBhbmRlZEZpZ3VyZSk7dGhpcy5fdHJlZUNvbGxhcHNlZEZpZ3VyZSYmKGEuX3RyZWVDb2xsYXBzZWRGaWd1cmU9dGhpcy5fdHJlZUNvbGxhcHNlZEZpZ3VyZSk7dGhpcy5fc3ViR3JhcGhFeHBhbmRlZEZpZ3VyZSYmKGEuX3N1YkdyYXBoRXhwYW5kZWRGaWd1cmU9dGhpcy5fc3ViR3JhcGhFeHBhbmRlZEZpZ3VyZSk7dGhpcy5fc3ViR3JhcGhDb2xsYXBzZWRGaWd1cmUmJihhLl9zdWJHcmFwaENvbGxhcHNlZEZpZ3VyZT10aGlzLl9zdWJHcmFwaENvbGxhcHNlZEZpZ3VyZSl9O3kucHJvdG90eXBlLlpoPWZ1bmN0aW9uKGEpe1EucHJvdG90eXBlLlpoLmNhbGwodGhpcyxhKTthLnhhPXRoaXMueGE7Zm9yKHZhciBiPWEueGEuaztiLm5leHQoKTspYi52YWx1ZS5JaT1hfTsNCnkucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYT1RLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyk7aWYoYSBpbnN0YW5jZW9mIHkpe3ZhciBiPXRoaXMueGE7aWYoMDxiLmxlbmd0aClmb3IodmFyIGM9Yi5sZW5ndGgsZD0wO2Q8YztkKyspe3ZhciBmPWIubltkXS5jb3B5KCksZz1hO2Yud2woZyk7Zi5sbT1udWxsO3ZhciBoPWcueGEsaz1oLmNvdW50O2guSmQoayxmKTtoPWcuUztpZihudWxsIT09aCl7aC5Haj1udWxsO251bGwhPT1mLk5kJiZoIGluc3RhbmNlb2YgUyYmKGguRmg9ITApO3ZhciBsPWcuaDtudWxsIT09bCYmbC5qYS5zYnx8aC5JYyh3ZCwiZWxlbWVudHMiLGcsbnVsbCxmLG51bGwsayl9fXJldHVybiBhfXJldHVybiBudWxsfTt5LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJQYW5lbCgiK3RoaXMudHlwZSsiKSMiK3Qub2QodGhpcyl9O3ZhciBaZzt5LlBvc2l0aW9uPVpnPXQudyh5LCJQb3NpdGlvbiIsMCk7DQp5Lkhvcml6b250YWw9dC53KHksIkhvcml6b250YWwiLDEpO3ZhciBiaTt5LlZlcnRpY2FsPWJpPXQudyh5LCJWZXJ0aWNhbCIsMik7dmFyIFNnO3kuU3BvdD1TZz10LncoeSwiU3BvdCIsMyk7dmFyIGNpO3kuQXV0bz1jaT10LncoeSwiQXV0byIsNCk7dmFyIEhrO3kuVGFibGU9SGs9dC53KHksIlRhYmxlIiw1KTt5LlZpZXdib3g9dC53KHksIlZpZXdib3giLDYpO3ZhciB0azt5LlRhYmxlUm93PXRrPXQudyh5LCJUYWJsZVJvdyIsNyk7dmFyIHVrO3kuVGFibGVDb2x1bW49dWs9dC53KHksIlRhYmxlQ29sdW1uIiw4KTt2YXIgdmc7eS5MaW5rPXZnPXQudyh5LCJMaW5rIiw5KTt2YXIgd2k7eS5HcmlkPXdpPXQudyh5LCJHcmlkIiwxMCk7dC5nKHksInR5cGUiLHkucHJvdG90eXBlLnR5cGUpOw0KdC5kZWZpbmVQcm9wZXJ0eSh5LHt0eXBlOiJ0eXBlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kYTtiIT09YSYmKGUmJnQuQWEoYSx5LHksInR5cGUiKSxiIT09dGsmJmIhPT11a3x8dC5tKCJDYW5ub3QgY2hhbmdlIFBhbmVsLnR5cGUgd2hlbiBpdCBpcyBhbHJlYWR5IGEgVGFibGVSb3cgb3IgYSBUYWJsZUNvbHVtbjogIithKSx0aGlzLmRhPWEsdGhpcy5kYT09PXdpP3RoaXMuVmc9ITA6dGhpcy5kYT09PUhrJiZEbCh0aGlzKSx0aGlzLmZhKCksdGhpcy5qKCJ0eXBlIixiLGEpKX0pO3QuQSh5LHtlbGVtZW50czoiZWxlbWVudHMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnhhLmt9KTt0LkEoeSx7UmE6Im5hdHVyYWxCb3VuZHMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmhkfSk7dC5nKHksInBhZGRpbmciLHkucHJvdG90eXBlLnBhZGRpbmcpOw0KdC5kZWZpbmVQcm9wZXJ0eSh5LHtwYWRkaW5nOiJwYWRkaW5nIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5OZX0sZnVuY3Rpb24oYSl7Im51bWJlciI9PT10eXBlb2YgYT8oMD5hJiZ0LmxhKGEsIj49IDAiLHksInBhZGRpbmciKSxhPW5ldyBhYihhKSk6KHQubChhLGFiLHksInBhZGRpbmciKSwwPmEubGVmdCYmdC5sYShhLmxlZnQsIj49IDAiLHksInBhZGRpbmc6dmFsLmxlZnQiKSwwPmEucmlnaHQmJnQubGEoYS5yaWdodCwiPj0gMCIseSwicGFkZGluZzp2YWwucmlnaHQiKSwwPmEudG9wJiZ0LmxhKGEudG9wLCI+PSAwIix5LCJwYWRkaW5nOnZhbC50b3AiKSwwPmEuYm90dG9tJiZ0LmxhKGEuYm90dG9tLCI+PSAwIix5LCJwYWRkaW5nOnZhbC5ib3R0b20iKSk7dmFyIGI9dGhpcy5OZTtiLk0oYSl8fCh0aGlzLk5lPWE9YS5aKCksdGhpcy5mYSgpLHRoaXMuaigicGFkZGluZyIsYixhKSl9KTt0LmcoeSwiZGVmYXVsdEFsaWdubWVudCIseS5wcm90b3R5cGUuWGopOw0KdC5kZWZpbmVQcm9wZXJ0eSh5LHtYajoiZGVmYXVsdEFsaWdubWVudCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRHF9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuRHE7Yi5NKGEpfHwoZSYmdC5sKGEsSSx5LCJkZWZhdWx0QWxpZ25tZW50IiksdGhpcy5EcT1hPWEuWigpLHRoaXMuZmEoKSx0aGlzLmooImRlZmF1bHRBbGlnbm1lbnQiLGIsYSkpfSk7dC5nKHksImRlZmF1bHRTdHJldGNoIix5LnByb3RvdHlwZS4keik7dC5kZWZpbmVQcm9wZXJ0eSh5LHskejoiZGVmYXVsdFN0cmV0Y2gifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnZjfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnZjO2IhPT1hJiYodC5BYShhLFEseSwiZGVmYXVsdFN0cmV0Y2giKSx0aGlzLnZjPWEsdGhpcy5mYSgpLHRoaXMuaigiZGVmYXVsdFN0cmV0Y2giLGIsYSkpfSk7dC5nKHksImRlZmF1bHRTZXBhcmF0b3JQYWRkaW5nIix5LnByb3RvdHlwZS52SSk7DQp0LmRlZmluZVByb3BlcnR5KHkse3ZJOiJkZWZhdWx0U2VwYXJhdG9yUGFkZGluZyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMudGo/SC5mcTp0aGlzLnRqfSxmdW5jdGlvbihhKXtpZih2b2lkIDAhPT10aGlzLnRqKXsibnVtYmVyIj09PXR5cGVvZiBhP2E9bmV3IGFiKGEpOmUmJnQubChhLGFiLHksImRlZmF1bHRTZXBhcmF0b3JQYWRkaW5nIik7dmFyIGI9dGhpcy50ajtiLk0oYSl8fCh0aGlzLnRqPWE9YS5aKCksdGhpcy5qKCJkZWZhdWx0U2VwYXJhdG9yUGFkZGluZyIsYixhKSl9fSk7dC5nKHksImRlZmF1bHRSb3dTZXBhcmF0b3JTdHJva2UiLHkucHJvdG90eXBlLnRJKTsNCnQuZGVmaW5lUHJvcGVydHkoeSx7dEk6ImRlZmF1bHRSb3dTZXBhcmF0b3JTdHJva2UifSxmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLnNpP251bGw6dGhpcy5zaX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zaTtiIT09YSYmKG51bGw9PT1hfHwic3RyaW5nIj09PXR5cGVvZiBhfHxhIGluc3RhbmNlb2YgZmEpJiYoYSBpbnN0YW5jZW9mIGZhJiZhLmZyZWV6ZSgpLHRoaXMuc2k9YSx0aGlzLmooImRlZmF1bHRSb3dTZXBhcmF0b3JTdHJva2UiLGIsYSkpfSk7dC5nKHksImRlZmF1bHRSb3dTZXBhcmF0b3JTdHJva2VXaWR0aCIseS5wcm90b3R5cGUudUkpOw0KdC5kZWZpbmVQcm9wZXJ0eSh5LHt1SToiZGVmYXVsdFJvd1NlcGFyYXRvclN0cm9rZVdpZHRoIn0sZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy54aD8xOnRoaXMueGh9LGZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PXRoaXMueGgpe3ZhciBiPXRoaXMueGg7YiE9PWEmJih0aGlzLnhoPWEsdGhpcy5qKCJkZWZhdWx0Um93U2VwYXJhdG9yU3Ryb2tlV2lkdGgiLGIsYSkpfX0pO3QuZyh5LCJkZWZhdWx0Um93U2VwYXJhdG9yRGFzaEFycmF5Iix5LnByb3RvdHlwZS5zSSk7DQp0LmRlZmluZVByb3BlcnR5KHkse3NJOiJkZWZhdWx0Um93U2VwYXJhdG9yRGFzaEFycmF5In0sZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5PbD9udWxsOnRoaXMuT2x9LGZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PXRoaXMuT2wpe3ZhciBiPXRoaXMuT2w7YiE9PWEmJihBcnJheS5pc0FycmF5KGEpfHx0LmJjKGEsIkFycmF5Iix5LCJkZWZhdWx0Um93U2VwYXJhdG9yRGFzaEFycmF5OnZhbCIpLHRoaXMuT2w9YSx0aGlzLmooImRlZmF1bHRSb3dTZXBhcmF0b3JEYXNoQXJyYXkiLGIsYSkpfX0pO3QuZyh5LCJkZWZhdWx0Q29sdW1uU2VwYXJhdG9yU3Ryb2tlIix5LnByb3RvdHlwZS5uSSk7DQp0LmRlZmluZVByb3BlcnR5KHkse25JOiJkZWZhdWx0Q29sdW1uU2VwYXJhdG9yU3Ryb2tlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy52aD9udWxsOnRoaXMudmh9LGZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PXRoaXMudmgpe3ZhciBiPXRoaXMudmg7YiE9PWEmJihudWxsPT09YXx8InN0cmluZyI9PT10eXBlb2YgYXx8YSBpbnN0YW5jZW9mIGZhKSYmKGEgaW5zdGFuY2VvZiBmYSYmYS5mcmVlemUoKSx0aGlzLnZoPWEsdGhpcy5qKCJkZWZhdWx0Q29sdW1uU2VwYXJhdG9yU3Ryb2tlIixiLGEpKX19KTt0LmcoeSwiZGVmYXVsdENvbHVtblNlcGFyYXRvclN0cm9rZVdpZHRoIix5LnByb3RvdHlwZS5vSSk7DQp0LmRlZmluZVByb3BlcnR5KHkse29JOiJkZWZhdWx0Q29sdW1uU2VwYXJhdG9yU3Ryb2tlV2lkdGgifSxmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLndoPzE6dGhpcy53aH0sZnVuY3Rpb24oYSl7aWYodm9pZCAwIT09dGhpcy53aCl7dmFyIGI9dGhpcy53aDtiIT09YSYmKHRoaXMud2g9YSx0aGlzLmooImRlZmF1bHRDb2x1bW5TZXBhcmF0b3JTdHJva2VXaWR0aCIsYixhKSl9fSk7dC5nKHksImRlZmF1bHRDb2x1bW5TZXBhcmF0b3JEYXNoQXJyYXkiLHkucHJvdG90eXBlLm1JKTsNCnQuZGVmaW5lUHJvcGVydHkoeSx7bUk6ImRlZmF1bHRDb2x1bW5TZXBhcmF0b3JEYXNoQXJyYXkifSxmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLk5sP251bGw6dGhpcy5ObH0sZnVuY3Rpb24oYSl7aWYodm9pZCAwIT09dGhpcy5ObCl7dmFyIGI9dGhpcy5ObDtiIT09YSYmKEFycmF5LmlzQXJyYXkoYSl8fHQuYmMoYSwiQXJyYXkiLHksImRlZmF1bHRDb2x1bW5TZXBhcmF0b3JEYXNoQXJyYXk6dmFsIiksdGhpcy5ObD1hLHRoaXMuaigiZGVmYXVsdENvbHVtblNlcGFyYXRvckRhc2hBcnJheSIsYixhKSl9fSk7dC5nKHksInZpZXdib3hTdHJldGNoIix5LnByb3RvdHlwZS5lSyk7DQp0LmRlZmluZVByb3BlcnR5KHkse2VLOiJ2aWV3Ym94U3RyZXRjaCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSW99LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuSW87YiE9PWEmJih0LkFhKGEsUSx5LCJ2aWV3Ym94U3RyZXRjaCIpLHRoaXMuSW89YSx0aGlzLmooInZpZXdib3hTdHJldGNoIixiLGEpKX0pO3QuZyh5LCJncmlkQ2VsbFNpemUiLHkucHJvdG90eXBlLmd0KTsNCnQuZGVmaW5lUHJvcGVydHkoeSx7Z3Q6ImdyaWRDZWxsU2l6ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU3F9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuU3E7Yi5NKGEpfHwodC5sKGEsZ2EseSwiZ3JpZENlbGxTaXplIiksYS5OKCkmJjAhPT1hLndpZHRoJiYwIT09YS5oZWlnaHR8fHQubSgiSW52YWxpZCBQYW5lbC5ncmlkQ2VsbFNpemU6ICIrYSksdGhpcy5TcT1hLlooKSxudWxsIT09dGhpcy5oJiZ0aGlzPT09dGhpcy5oLmxwJiZKaSh0aGlzLmgpLHRoaXMua2EoKSx0aGlzLmooImdyaWRDZWxsU2l6ZSIsYixhKSl9KTt0LmcoeSwiZ3JpZE9yaWdpbiIseS5wcm90b3R5cGUubEEpOw0KdC5kZWZpbmVQcm9wZXJ0eSh5LHtsQToiZ3JpZE9yaWdpbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVHF9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuVHE7Yi5NKGEpfHwodC5sKGEsdyx5LCJncmlkT3JpZ2luIiksYS5OKCl8fHQubSgiSW52YWxpZCBQYW5lbC5ncmlkT3JpZ2luOiAiK2EpLHRoaXMuVHE9YS5aKCksdGhpcy5oJiZKaSh0aGlzLmgpLHRoaXMua2EoKSx0aGlzLmooImdyaWRPcmlnaW4iLGIsYSkpfSk7DQp5LnByb3RvdHlwZS5lbD1mdW5jdGlvbihhLGIpe2lmKHRoaXMuZGE9PT13aSl7dmFyIGM9dGhpcy5kaygpKmIuc2NhbGU7MD49YyYmKGM9MSk7dmFyIGQ9dGhpcy5ndCxmPWQud2lkdGgsZD1kLmhlaWdodCxnPXRoaXMuUmEsaD1nLndpZHRoLGc9Zy5oZWlnaHQsaz1NYXRoLmNlaWwoaC9mKSxsPU1hdGguY2VpbChnL2QpLG09dGhpcy5sQTthLnNhdmUoKTthLmJlZ2luUGF0aCgpO2EucmVjdCgwLDAsaCxnKTthLmNsaXAoKTtmb3IodmFyIG49W10scD10aGlzLnhhLm4scT10aGlzLnhhLmxlbmd0aCxyPTA7cjxxO3IrKyl7dmFyIHM9W107bi5wdXNoKHMpO3ZhciB1PXBbcl07aWYodS52aXNpYmxlKWZvcih2YXIgdT1oaih1LnpiKSx2PXIrMTt2PHE7disrKXt2YXIgRD1wW3ZdO0QudmlzaWJsZSYmaGooRC56Yik9PT11JiYoRD1ELmludGVydmFsLDI8PUQmJnMucHVzaChEKSl9fXA9dGhpcy54YS5sZW5ndGg7Zm9yKHE9MDtxPHA7cSsrKXt2YXIgQT10aGlzLnhhLm5bcV07aWYoQS52aXNpYmxlKXt2YXIgcj0NCm5bcV0scz1BLmludGVydmFsLHU9ITEsRz1BLkF4O2lmKG51bGwhPT1HKXt2YXIgTD11PSEwO3ZvaWQgMCE9PWEuc2V0TGluZURhc2g/KGEuc2V0TGluZURhc2goRyksYS5saW5lRGFzaE9mZnNldD1BLmxkKTp2b2lkIDAhPT1hLndlYmtpdExpbmVEYXNoPyhhLndlYmtpdExpbmVEYXNoPUcsYS53ZWJraXRMaW5lRGFzaE9mZnNldD1BLmxkKTp2b2lkIDAhPT1hLm1vekRhc2g/KGEubW96RGFzaD1HLGEubW96RGFzaE9mZnNldD1BLmxkKTpMPSExfWlmKCJMaW5lViI9PT1BLnpiKXthLmxpbmVXaWR0aD1BLmZiO3hrKHRoaXMsYSxBLnN0cm9rZSwhMSk7YS5iZWdpblBhdGgoKTtmb3IoRD12PU1hdGguZmxvb3IoLW0ueC9mKTtEPD12K2s7RCsrKXt2YXIgTj1EKmYrbS54O2lmKDA8PU4mJk48aCYmRmwoRCxzLHIpJiYodSYmIUw/ZmsoYSxOLDAsTixnLEcsQS5sZCk6KGEubW92ZVRvKE4sMCksYS5saW5lVG8oTixnKSksMj5mKnMqYykpYnJlYWt9YS5zdHJva2UoKX1lbHNlIGlmKCJMaW5lSCI9PT0NCkEuemIpe2EubGluZVdpZHRoPUEuZmI7eGsodGhpcyxhLEEuc3Ryb2tlLCExKTthLmJlZ2luUGF0aCgpO2ZvcihEPXY9TWF0aC5mbG9vcigtbS55L2QpO0Q8PXYrbCYmIShOPUQqZCttLnksMDw9TiYmTjw9ZyYmRmwoRCxzLHIpJiYodSYmIUw/ZmsoYSwwLE4saCxOLEcsQS5sZCk6KGEubW92ZVRvKDAsTiksYS5saW5lVG8oaCxOKSksMj5kKnMqYykpO0QrKyk7YS5zdHJva2UoKX1lbHNlIGlmKCJCYXJWIj09PUEuemIpZm9yKHhrKHRoaXMsYSxBLmZpbGwsITApLEE9QS53aWR0aCxpc05hTihBKSYmKEE9ZiksRD12PU1hdGguZmxvb3IoLW0ueC9mKTtEPD12K2smJiEoTj1EKmYrbS54LDA8PU4mJk48aCYmRmwoRCxzLHIpJiYoYS5maWxsUmVjdChOLDAsQSxnKSwyPmYqcypjKSk7RCsrKTtlbHNlIGlmKCJCYXJIIj09PUEuemIpZm9yKHhrKHRoaXMsYSxBLmZpbGwsITApLEE9QS5oZWlnaHQsaXNOYU4oQSkmJihBPWQpLEQ9dj1NYXRoLmZsb29yKC1tLnkvZCk7RDw9ditsJiYhKE49RCpkKw0KbS55LDA8PU4mJk48PWcmJkZsKEQscyxyKSYmKGEuZmlsbFJlY3QoMCxOLGgsQSksMj5kKnMqYykpO0QrKyk7dSYmKHZvaWQgMCE9PWEuc2V0TGluZURhc2g/KGEuc2V0TGluZURhc2godC5qaSksYS5saW5lRGFzaE9mZnNldD0wKTp2b2lkIDAhPT1hLndlYmtpdExpbmVEYXNoPyhhLndlYmtpdExpbmVEYXNoPXQuamksYS53ZWJraXRMaW5lRGFzaE9mZnNldD0wKTp2b2lkIDAhPT1hLm1vekRhc2gmJihhLm1vekRhc2g9bnVsbCxhLm1vekRhc2hPZmZzZXQ9MCkpfX1hLnJlc3RvcmUoKTt1aShiLGEsITEpfWVsc2V7dGhpcy5kYT09PUhrJiYoYS5saW5lQ2FwPSJidXR0IixHbCh0aGlzLGEsITAsdGhpcy5rZCwhMCksR2wodGhpcyxhLCExLHRoaXMuZGQsITApLEhsKHRoaXMsYSwhMCx0aGlzLmtkKSxIbCh0aGlzLGEsITEsdGhpcy5kZCksR2wodGhpcyxhLCEwLHRoaXMua2QsITEpLEdsKHRoaXMsYSwhMSx0aGlzLmRkLCExKSk7Yz10aGlzLnhhLmxlbmd0aDtmb3IoZj0wO2Y8YztmKyspdGhpcy54YS5uW2ZdLlVlKGEsDQpiKTtlJiZlLnZLJiZ0aGlzIGluc3RhbmNlb2YgViYmZS51SyhhLGIsdGhpcyl9fTsNCmZ1bmN0aW9uIEhsKGEsYixjLGQpe2Zvcih2YXIgZj1kLmxlbmd0aCxnLGg9YS5wYSxrPWM/YS5IZCgwKTphLkdkKDApLGw9MDtsPGY7bCsrKWlmKGc9ZFtsXSx2b2lkIDAhPT1nJiZnIT09ayYmMCE9PWcuZmMpe3ZhciBtPWcuam47aXNOYU4obSkmJihtPWM/YS54aDphLndoKTt2YXIgbj1nLmhuO251bGw9PT1uJiYobj1jP2Euc2k6YS52aCk7aWYoMCE9PW0mJm51bGwhPT1uKXt4ayhhLGIsbiwhMSk7dmFyIG49ITEscD1nLmxHO2lmKG51bGwhPT1wKXt2YXIgcT1uPSEwO3ZvaWQgMCE9PWIuc2V0TGluZURhc2g/KGIuc2V0TGluZURhc2gocCksYi5saW5lRGFzaE9mZnNldD1hLmxkKTp2b2lkIDAhPT1iLndlYmtpdExpbmVEYXNoPyhiLndlYmtpdExpbmVEYXNoPXAsYi53ZWJraXRMaW5lRGFzaE9mZnNldD1hLmxkKTp2b2lkIDAhPT1iLm1vekRhc2g/KGIubW96RGFzaD1wLGIubW96RGFzaE9mZnNldD1hLmxkKTpxPSExfWIuYmVnaW5QYXRoKCk7dmFyIHI9Zy5wb3NpdGlvbittO2M/cj4NCmguaGVpZ2h0JiYobS09ci1oLmhlaWdodCk6cj5oLndpZHRoJiYobS09ci1oLndpZHRoKTtnPWcucG9zaXRpb24rbS8yO2IubGluZVdpZHRoPW07cj1hLnBhZGRpbmc7Yz8oZys9ci50b3AsbT1yLmxlZnQscj1oLndpZHRoLXIucmlnaHQsbiYmIXE/ZmsoYixtLGcscixnLHAsMCk6KGIubW92ZVRvKG0sZyksYi5saW5lVG8ocixnKSkpOihnKz1yLmxlZnQsbT1yLnRvcCxyPWguaGVpZ2h0LXIuYm90dG9tLG4mJiFxP2ZrKGIsZyxtLGcscixwLDApOihiLm1vdmVUbyhnLG0pLGIubGluZVRvKGcscikpKTtiLnN0cm9rZSgpO24mJih2b2lkIDAhPT1iLnNldExpbmVEYXNoPyhiLnNldExpbmVEYXNoKHQuamkpLGIubGluZURhc2hPZmZzZXQ9MCk6dm9pZCAwIT09Yi53ZWJraXRMaW5lRGFzaD8oYi53ZWJraXRMaW5lRGFzaD10LmppLGIud2Via2l0TGluZURhc2hPZmZzZXQ9MCk6dm9pZCAwIT09Yi5tb3pEYXNoJiYoYi5tb3pEYXNoPW51bGwsYi5tb3pEYXNoT2Zmc2V0PTApKX19fQ0KZnVuY3Rpb24gR2woYSxiLGMsZCxmKXtmb3IodmFyIGc9ZC5sZW5ndGgsaCxrPWEucGEsbD0wO2w8ZztsKyspaWYoaD1kW2xdLHZvaWQgMCE9PWgmJm51bGwhPT1oLmJhY2tncm91bmQmJmgudHchPT1mJiYwIT09aC5mYyl7dmFyIG09Yz9rLmhlaWdodDprLndpZHRoO2lmKCEoaC5wb3NpdGlvbj5tKSl7dmFyIG49SWwoaCkscD1oLmpuO2lzTmFOKHApJiYocD1jP2EueGg6YS53aCk7dmFyIHE9aC5objtudWxsPT09cSYmKHE9Yz9hLnNpOmEudmgpO251bGw9PT1xJiYocD0wKTtuLT1wO3A9aC5wb3NpdGlvbitwO24rPWguZmM7cCtuPm0mJihuPW0tcCk7MD49bnx8KG09YS5wYWRkaW5nLHhrKGEsYixoLmJhY2tncm91bmQsITApLGM/Yi5maWxsUmVjdChtLmxlZnQscCttLnRvcCxrLndpZHRoLShtLmxlZnQrbS5yaWdodCksbik6Yi5maWxsUmVjdChwK20ubGVmdCxtLnRvcCxuLGsuaGVpZ2h0LShtLnRvcCttLmJvdHRvbSkpKX19fQ0KZnVuY3Rpb24gRmwoYSxiLGMpe2lmKDAhPT1hJWIpcmV0dXJuITE7Yj1jLmxlbmd0aDtmb3IodmFyIGQ9MDtkPGI7ZCsrKWlmKDA9PT1hJWNbZF0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gaGooYSl7cmV0dXJuIkxpbmVWIj09PWF8fCJCYXJWIj09PWF9DQp5LnByb3RvdHlwZS5rcD1mdW5jdGlvbihhLGIsYyxkLGYpe3ZhciBnPXRoaXMuSGYoKSxoPXRoaXMudHJhbnNmb3JtLGs9MS8oaC5tMTEqaC5tMjItaC5tMTIqaC5tMjEpLGw9aC5tMjIqayxtPS1oLm0xMiprLG49LWgubTIxKmsscD1oLm0xMSprLHE9ayooaC5tMjEqaC5keS1oLm0yMipoLmR4KSxyPWsqKGgubTEyKmguZHgtaC5tMTEqaC5keSk7aWYobnVsbCE9PXRoaXMuWmspcmV0dXJuIGg9dGhpcy5wYSxILmtsKGgubGVmdCxoLnRvcCxoLnJpZ2h0LGguYm90dG9tLGEsYixjLGQsZik7aWYobnVsbCE9PXRoaXMuYmFja2dyb3VuZClnPWEqbCtiKm4rcSxrPWEqbStiKnArcixhPWMqbCtkKm4rcSxjPWMqbStkKnArcixmLnAoMCwwKSxkPXRoaXMuUmEsYz1ILmtsKDAsMCxkLndpZHRoLGQuaGVpZ2h0LGcsayxhLGMsZiksZi50cmFuc2Zvcm0oaCk7ZWxzZXtnfHwobD0xLG49bT0wLHA9MSxyPXE9MCk7az1hKmwrYipuK3E7YT1hKm0rYipwK3I7bD1jKmwrZCpuK3E7ZD1jKm0rZCpwK3I7DQpmLnAobCxkKTttPShsLWspKihsLWspKyhkLWEpKihkLWEpO2M9ITE7cD10aGlzLnhhLm47cj1wLmxlbmd0aDtuPXQuSygpO2ZvcihxPTA7cTxyO3ErKyliPXBbcV0sYi52aXNpYmxlJiZiLmtwKGssYSxsLGQsbikmJihjPSEwLGI9KGstbi54KSooay1uLngpKyhhLW4ueSkqKGEtbi55KSxiPG0mJihtPWIsZi5zZXQobikpKTt0LkIobik7ZyYmZi50cmFuc2Zvcm0oaCl9cmV0dXJuIGN9Ow0KeS5wcm90b3R5cGUudHQ9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGY9dGhpcy5RaTtmLndpZHRoPTA7Zi5oZWlnaHQ9MDt2YXIgZz10aGlzLkNhLGg9dGhpcy5WZjt2b2lkIDA9PT1jJiYoYz1oLndpZHRoLGQ9aC5oZWlnaHQpO2M9TWF0aC5tYXgoYyxoLndpZHRoKTtkPU1hdGgubWF4KGQsaC5oZWlnaHQpO3ZhciBrPXRoaXMuSGU7aXNOYU4oZy53aWR0aCl8fChhPU1hdGgubWluKGcud2lkdGgsay53aWR0aCkpO2lzTmFOKGcuaGVpZ2h0KXx8KGI9TWF0aC5taW4oZy5oZWlnaHQsay5oZWlnaHQpKTthPU1hdGgubWF4KGMsYSk7Yj1NYXRoLm1heChkLGIpO3ZhciBsPXRoaXMucGFkZGluZzthPU1hdGgubWF4KGEtbC5sZWZ0LWwucmlnaHQsMCk7Yj1NYXRoLm1heChiLWwudG9wLWwuYm90dG9tLDApO3ZhciBtPXRoaXMueGEsbj1tLmxlbmd0aDtpZigwIT09bil7dmFyIHA9dGhpcy5kYS5ZYjtzd2l0Y2gocCl7Y2FzZSAiUG9zaXRpb24iOnZhciBxPWEscj1iLHM9Yyx1PWQ7Zi54PTA7Zi55PQ0KMDtmLndpZHRoPTA7Zm9yKHZhciB2PWYuaGVpZ2h0PTA7djxuO3YrKyl7dmFyIEQ9bS5uW3ZdO2lmKEQudmlzaWJsZXx8RD09PXRoaXMua2Mpe3ZhciBBPUQubWFyZ2luLEc9QS5yaWdodCtBLmxlZnQsTD1BLnRvcCtBLmJvdHRvbTtoaChELHEscixzLHUpO3ZhciBOPUQuRWEsTz1NYXRoLm1heChOLndpZHRoK0csMCksVT1NYXRoLm1heChOLmhlaWdodCtMLDApLFk9RC5wb3NpdGlvbi54LGJhPUQucG9zaXRpb24ueTtpc0Zpbml0ZShZKXx8KFk9MCk7aXNGaW5pdGUoYmEpfHwoYmE9MCk7aWYoRCBpbnN0YW5jZW9mIFcmJkQuc0EpdmFyIFI9RC5mYi8yLFk9WS1SLGJhPWJhLVI7aGIoZixZLGJhLE8sVSl9fWJyZWFrO2Nhc2UgIlZlcnRpY2FsIjpmb3IodmFyIHhhPWEsWWE9Yyx6YT10LkNiKCksTmE9MDtOYTxuO05hKyspe3ZhciB2YT1tLm5bTmFdO2lmKHZhLnZpc2libGV8fHZhPT09dGhpcy5rYyl7dmFyIFBhPWtrKHZhKTtpZihQYSE9PVVnJiZQYSE9PWJrKXphLnB1c2godmEpO2Vsc2V7dmFyIEdhPQ0KdmEubWFyZ2luLEpmPUdhLnJpZ2h0K0dhLmxlZnQsbGY9R2EudG9wK0dhLmJvdHRvbTtoaCh2YSx4YSxJbmZpbml0eSxZYSwwKTt2YXIgWmI9dmEuRWEsZmc9TWF0aC5tYXgoWmIud2lkdGgrSmYsMCksaWM9TWF0aC5tYXgoWmIuaGVpZ2h0K2xmLDApO2Yud2lkdGg9TWF0aC5tYXgoZi53aWR0aCxmZyk7Zi5oZWlnaHQrPWljfX19dmFyIGtiPXphLmxlbmd0aDtpZigwIT09a2Ipe3RoaXMuQ2Eud2lkdGg/eGE9TWF0aC5taW4odGhpcy5DYS53aWR0aCx0aGlzLkhlLndpZHRoKTowIT09Zi53aWR0aCYmKHhhPU1hdGgubWluKGYud2lkdGgsdGhpcy5IZS53aWR0aCkpO2ZvcihOYT0wO05hPGtiO05hKyspaWYodmE9emFbTmFdLHZhLnZpc2libGV8fHZhPT09dGhpcy5rYylHYT12YS5tYXJnaW4sSmY9R2EucmlnaHQrR2EubGVmdCxsZj1HYS50b3ArR2EuYm90dG9tLGhoKHZhLHhhLEluZmluaXR5LFlhLDApLFpiPXZhLkVhLGZnPU1hdGgubWF4KFpiLndpZHRoK0pmLDApLGljPU1hdGgubWF4KFpiLmhlaWdodCsNCmxmLDApLGYud2lkdGg9TWF0aC5tYXgoZi53aWR0aCxmZyksZi5oZWlnaHQrPWljO3QueWEoemEpfWJyZWFrO2Nhc2UgIkhvcml6b250YWwiOmZvcih2YXIgZmI9YixJYT1kLEphPXQuQ2IoKSxYYT0wO1hhPG47WGErKyl7dmFyIGRiPW0ubltYYV07aWYoZGIudmlzaWJsZXx8ZGI9PT10aGlzLmtjKXt2YXIgQWI9a2soZGIpO2lmKEFiIT09VWcmJkFiIT09Y2spSmEucHVzaChkYik7ZWxzZXt2YXIgbWQ9ZGIubWFyZ2luLG1mPW1kLnJpZ2h0K21kLmxlZnQsRGQ9bWQudG9wK21kLmJvdHRvbTtoaChkYixJbmZpbml0eSxmYiwwLElhKTt2YXIgbmQ9ZGIuRWEsTmU9TWF0aC5tYXgobmQud2lkdGgrbWYsMCksRWQ9TWF0aC5tYXgobmQuaGVpZ2h0K0RkLDApO2Yud2lkdGgrPU5lO2YuaGVpZ2h0PU1hdGgubWF4KGYuaGVpZ2h0LEVkKX19fXZhciBzZT1KYS5sZW5ndGg7aWYoMCE9PXNlKXt0aGlzLkNhLmhlaWdodD9mYj1NYXRoLm1pbih0aGlzLkNhLmhlaWdodCx0aGlzLkhlLmhlaWdodCk6MCE9PQ0KZi5oZWlnaHQmJihmYj1NYXRoLm1pbihmLmhlaWdodCx0aGlzLkhlLmhlaWdodCkpO2ZvcihYYT0wO1hhPHNlO1hhKyspaWYoZGI9SmFbWGFdLGRiLnZpc2libGV8fGRiPT09dGhpcy5rYyltZD1kYi5tYXJnaW4sbWY9bWQucmlnaHQrbWQubGVmdCxEZD1tZC50b3ArbWQuYm90dG9tLGhoKGRiLEluZmluaXR5LGZiLDAsSWEpLG5kPWRiLkVhLE5lPU1hdGgubWF4KG5kLndpZHRoK21mLDApLEVkPU1hdGgubWF4KG5kLmhlaWdodCtEZCwwKSxmLndpZHRoKz1OZSxmLmhlaWdodD1NYXRoLm1heChmLmhlaWdodCxFZCk7dC55YShKYSl9YnJlYWs7Y2FzZSAiU3BvdCI6YTp7dmFyIEtmPWEsQmI9YixCZz1jLEhiPWQscWI9RWsodGhpcyxtLG4pLFphPXFiLm1hcmdpbix5YixqYyxMZj1aYS5yaWdodCtaYS5sZWZ0LE1mPVphLnRvcCtaYS5ib3R0b207aGgocWIsS2YsQmIsQmcsSGIpO3ZhciBrYz1xYi5FYSxVYz1rYy53aWR0aCxvZD1rYy5oZWlnaHQsZGM9TWF0aC5tYXgoVWMrTGYsMCkscGQ9DQpNYXRoLm1heChvZCtNZiwwKTtmLng9LVphLmxlZnQ7Zi55PS1aYS50b3A7Zi53aWR0aD1kYztmLmhlaWdodD1wZDtmb3IodmFyICRhPTA7JGE8bjskYSsrKXt2YXIgVGE9bS5uWyRhXTtpZihUYSE9PXFiJiYoVGEudmlzaWJsZXx8VGE9PT10aGlzLmtjKSl7WmE9VGEubWFyZ2luO3liPVphLnJpZ2h0K1phLmxlZnQ7amM9WmEudG9wK1phLmJvdHRvbTtoaChUYSxLZixCYiwwLDApO3ZhciBrYz1UYS5FYSxkYz1NYXRoLm1heChrYy53aWR0aCt5YiwwKSxwZD1NYXRoLm1heChrYy5oZWlnaHQramMsMCksUmI9VGEuYWxpZ25tZW50O1JiLlBjKCkmJihSYj10aGlzLlhqKTtSYi52ZCgpfHwoUmI9S2IpO3ZhciBJYj1UYS5SajtJYi5QYygpJiYoSWI9S2IpO2hiKGYsUmIueCpVYytSYi5vZmZzZXRYLShJYi54KmtjLndpZHRoLUliLm9mZnNldFgpLVphLmxlZnQsUmIueSpvZCtSYi5vZmZzZXRZLShJYi55KmtjLmhlaWdodC1JYi5vZmZzZXRZKS1aYS50b3AsZGMscGQpfX12YXIgT2U9cWIuZ2k7DQpPZT09PVZnJiYoT2U9a2socWIpKTtzd2l0Y2goT2Upe2Nhc2UgVWc6YnJlYWsgYTtjYXNlIENjOmlmKCFpc0Zpbml0ZShLZikmJiFpc0Zpbml0ZShCYikpYnJlYWsgYTticmVhaztjYXNlIGNrOmlmKCFpc0Zpbml0ZShLZikpYnJlYWsgYTticmVhaztjYXNlIGJrOmlmKCFpc0Zpbml0ZShCYikpYnJlYWsgYX1rYz1xYi5FYTtVYz1rYy53aWR0aDtvZD1rYy5oZWlnaHQ7ZGM9TWF0aC5tYXgoVWMrTGYsMCk7cGQ9TWF0aC5tYXgob2QrTWYsMCk7WmE9cWIubWFyZ2luO2YueD0tWmEubGVmdDtmLnk9LVphLnRvcDtmLndpZHRoPWRjO2YuaGVpZ2h0PXBkO2ZvcigkYT0wOyRhPG47JGErKylUYT1tLm5bJGFdLFRhPT09cWJ8fCFUYS52aXNpYmxlJiZUYSE9PXRoaXMua2N8fChaYT1UYS5tYXJnaW4seWI9WmEucmlnaHQrWmEubGVmdCxqYz1aYS50b3ArWmEuYm90dG9tLGtjPVRhLkVhLGRjPU1hdGgubWF4KGtjLndpZHRoK3liLDApLHBkPU1hdGgubWF4KGtjLmhlaWdodCtqYywwKSxSYj1UYS5hbGlnbm1lbnQsDQpSYi5QYygpJiYoUmI9dGhpcy5YaiksUmIudmQoKXx8KFJiPUtiKSxJYj1UYS5SaixJYi5QYygpJiYoSWI9S2IpLGhiKGYsUmIueCpVYytSYi5vZmZzZXRYLShJYi54KmtjLndpZHRoLUliLm9mZnNldFgpLVphLmxlZnQsUmIueSpvZCtSYi5vZmZzZXRZLShJYi55KmtjLmhlaWdodC1JYi5vZmZzZXRZKS1aYS50b3AsZGMscGQpKX1icmVhaztjYXNlICJBdXRvIjp2YXIgUGQ9YSxwYz1iLEpiPWMsZWU9ZCxyYj1Fayh0aGlzLG0sbiksRmQ9cmIubWFyZ2luLENnPUZkLnJpZ2h0K0ZkLmxlZnQsUGU9RmQudG9wK0ZkLmJvdHRvbTtoaChyYixQZCxwYyxKYixlZSk7dmFyIEdkPXJiLkVhLGdiPU1hdGgubWF4KEdkLndpZHRoK0NnLDApLG5mPU1hdGgubWF4KEdkLmhlaWdodCtQZSwwKSxpYj1KbChyYiksc2I9aWIueCpnYitpYi5vZmZzZXRYLFZjPWliLnkqbmYraWIub2Zmc2V0WSxpYj1LbChyYiksTmI9aWIueCpnYitpYi5vZmZzZXRYLFFkPWliLnkqbmYraWIub2Zmc2V0WSxSZD1QZCxmZT0NCnBjO2lzRmluaXRlKFBkKSYmKFJkPU1hdGguYWJzKHNiLU5iKSk7aXNGaW5pdGUocGMpJiYoZmU9TWF0aC5hYnMoVmMtUWQpKTt2YXIgRmM9dC5BbCgpO0ZjLnAoMCwwKTtmb3IodmFyIHRlPTA7dGU8bjt0ZSsrKXt2YXIgR2M9bS5uW3RlXTtpZihHYyE9PXJiJiYoR2MudmlzaWJsZXx8R2M9PT10aGlzLmtjKSl7dmFyIEZkPUdjLm1hcmdpbixDYj1GZC5yaWdodCtGZC5sZWZ0LFFlPUZkLnRvcCtGZC5ib3R0b207aGgoR2MsUmQsZmUsMCwwKTtHZD1HYy5FYTtnYj1NYXRoLm1heChHZC53aWR0aCtDYiwwKTtuZj1NYXRoLm1heChHZC5oZWlnaHQrUWUsMCk7RmMucChNYXRoLm1heChnYixGYy53aWR0aCksTWF0aC5tYXgobmYsRmMuaGVpZ2h0KSl9fWlmKDE9PT1uKWYud2lkdGg9Z2IsZi5oZWlnaHQ9bmYsdC5iayhGYyk7ZWxzZXt2YXIgcWQ9SmwocmIpLGxiPUtsKHJiKSxIZCxEYjtsYi54IT09cWQueCYmbGIueSE9PXFkLnkmJihIZD1GYy53aWR0aC9NYXRoLmFicyhsYi54LXFkLngpLA0KRGI9RmMuaGVpZ2h0L01hdGguYWJzKGxiLnktcWQueSkpO3QuYmsoRmMpO3ZhciBTZD0wO3JiIGluc3RhbmNlb2YgVyYmKFNkPXJiLmZiKnJiLnNjYWxlLExsKHJiKT09PVdnJiYoSGQ9TWF0aC5tYXgoSGQsRGIpLERiPU1hdGgubWF4KEhkLERiKSkpO0hkKz1NYXRoLmFicyhxZC5vZmZzZXRYKStNYXRoLmFicyhsYi5vZmZzZXRYKStTZDtEYis9TWF0aC5hYnMocWQub2Zmc2V0WSkrTWF0aC5hYnMobGIub2Zmc2V0WSkrU2Q7dmFyIElkPXJiLmdpO0lkPT09VmcmJihJZD1rayhyYikpO3N3aXRjaChJZCl7Y2FzZSBVZzplZT1KYj0wO2JyZWFrO2Nhc2UgQ2M6aXNGaW5pdGUoUGQpJiYoSGQ9UGQpO2lzRmluaXRlKHBjKSYmKERiPXBjKTticmVhaztjYXNlIGNrOmlzRmluaXRlKFBkKSYmKEhkPVBkKTtlZT0wO2JyZWFrO2Nhc2UgYms6SmI9MCxpc0Zpbml0ZShwYykmJihEYj1wYyl9cmIgaW5zdGFuY2VvZiBXJiYhcmIuQ2EuTigpJiYocmIuYWg/cmIueGs9bnVsbDpyYi5PYT1udWxsKTtGayhyYik7DQpoaChyYixIZCxEYixKYixlZSk7Zi53aWR0aD1yYi5FYS53aWR0aCtDZztmLmhlaWdodD1yYi5FYS5oZWlnaHQrUGV9YnJlYWs7Y2FzZSAiVGFibGUiOmZvcih2YXIgbGM9YSxPYj1iLHRiPW4sb2Y9YyxiYj1kLEpkPXQuQ2IoKSxXYz10LkNiKCksbGE9MDtsYTx0YjtsYSsrKXt2YXIgdGE9bS5uW2xhXTtpZih0YSBpbnN0YW5jZW9mIHkmJih0YS50eXBlPT09dGt8fHRhLnR5cGU9PT11aykmJnRhLnZpc2libGUpe1djLnB1c2godGEpO2Zvcih2YXIgdGo9dGEueGEsbmg9dGoubGVuZ3RoLHhjPTA7eGM8bmg7eGMrKyl7dmFyIG9oPXRqLm5beGNdO3RhLnR5cGU9PT10az9vaC5xYz10YS5xYzp0YS50eXBlPT09dWsmJihvaC5jb2x1bW49dGEuY29sdW1uKTtKZC5wdXNoKG9oKX19ZWxzZSBKZC5wdXNoKHRhKX1mb3IodmFyIHRiPUpkLmxlbmd0aCxlYz1bXSxsYT0wO2xhPHRiO2xhKyspdGE9SmRbbGFdLGxrKHRhLCEwKSxwayh0YSwhMCksZWNbdGEucWNdfHwoZWNbdGEucWNdPVtdKSxlY1t0YS5xY11bdGEuY29sdW1uXXx8DQooZWNbdGEucWNdW3RhLmNvbHVtbl09W10pLGVjW3RhLnFjXVt0YS5jb2x1bW5dLnB1c2godGEpO3QueWEoSmQpO2Zvcih2YXIgRGc9dC5DYigpLGdnPXQuQ2IoKSxIYz10LkNiKCksSWM9e2NvdW50OjB9LEpjPXtjb3VudDowfSx5Yz1sYyxLYz1PYixOZj10aGlzLmtkLHRiPU5mLmxlbmd0aCxsYT0wO2xhPHRiO2xhKyspe3ZhciBrYT1OZltsYV07dm9pZCAwIT09a2EmJk1sKGthLDApfU5mPXRoaXMuZGQ7dGI9TmYubGVuZ3RoO2ZvcihsYT0wO2xhPHRiO2xhKyspa2E9TmZbbGFdLHZvaWQgMCE9PWthJiZNbChrYSwwKTtmb3IodmFyIGdlPWVjLmxlbmd0aCxUZD0wLGxhPTA7bGE8Z2U7bGErKyllY1tsYV0mJihUZD1NYXRoLm1heChUZCxlY1tsYV0ubGVuZ3RoKSk7Zm9yKHZhciBoZz1NYXRoLm1pbih0aGlzLlBpLGdlLTEpLHVqPU1hdGgubWluKHRoaXMuemksVGQtMSksWGMsZ2U9ZWMubGVuZ3RoLGxhPWhnO2xhPGdlO2xhKyspaWYoZWNbbGFdKXt2YXIgVGQ9ZWNbbGFdLmxlbmd0aCwNCmpiPXRoaXMuSGQobGEpO01sKGpiLDApO2Zvcih4Yz11ajt4YzxUZDt4YysrKWlmKGVjW2xhXVt4Y10pe3ZhciBuYj10aGlzLkdkKHhjKTt2b2lkIDA9PT1EZ1t4Y10mJihNbChuYiwwKSxEZ1t4Y109ITApO2Zvcih2YXIgaGk9ZWNbbGFdW3hjXSx0bD1oaS5sZW5ndGgsaWc9MDtpZzx0bDtpZysrKWlmKHRhPWhpW2lnXSx0YS52aXNpYmxlfHx0YT09PXRoaXMua2Mpe3ZhciBqZz0xPHRhLktqfHwxPHRhLnNqO2pnJiZnZy5wdXNoKHRhKTt2YXIgU2I9dGEubWFyZ2luLE9mPVNiLnJpZ2h0K1NiLmxlZnQsUGY9U2IudG9wK1NiLmJvdHRvbSxVZD1Jayh0YSxqYixuYiksaGU9dGEuQ2EscGg9IWlzTmFOKGhlLndpZHRoKSxRZj0haXNOYU4oaGUuaGVpZ2h0KSxSZT1waCYmUWY7amd8fFVkPT09VWd8fFJlfHwodm9pZCAwPT09SWNbeGNdJiYoSWNbeGNdPS0xLEljLmNvdW50KyspLHZvaWQgMD09PUpjW2xhXSYmKEpjW2xhXT0tMSxKYy5jb3VudCsrKSxIYy5wdXNoKHRhKSk7aGgodGEsSW5maW5pdHksDQpJbmZpbml0eSwwLDApO3ZhciB1ZT10YS5FYSxTZT1NYXRoLm1heCh1ZS53aWR0aCtPZiwwKSxUZT1NYXRoLm1heCh1ZS5oZWlnaHQrUGYsMCk7MSE9PXRhLktqfHwhUWYmJlVkIT09VWcmJlVkIT09Y2t8fChrYT10aGlzLkhkKGxhKSxYYz1NYXRoLm1heChUZS1rYS5mYywwKSxYYz5LYyYmKFhjPUtjKSxNbChrYSxrYS5mYytYYyksS2M9TWF0aC5tYXgoS2MtWGMsMCkpOzEhPT10YS5zanx8IXBoJiZVZCE9PVVnJiZVZCE9PWJrfHwoa2E9dGhpcy5HZCh4YyksWGM9TWF0aC5tYXgoU2Uta2EuZmMsMCksWGM+eWMmJihYYz15YyksTWwoa2Esa2EuZmMrWGMpLHljPU1hdGgubWF4KHljLVhjLDApKTtqZyYmRmsodGEpfX19dC55YShEZyk7Zm9yKHZhciBpZT0wLGplPTAsdGI9dGhpcy5tdyxsYT0wO2xhPHRiO2xhKyspdm9pZCAwIT09dGhpcy5kZFtsYV0mJihpZSs9dGhpcy5HZChsYSkuS2IpO3RiPXRoaXMucHg7Zm9yKGxhPTA7bGE8dGI7bGErKyl2b2lkIDAhPT10aGlzLmtkW2xhXSYmKGplKz0NCnRoaXMuSGQobGEpLktiKTtmb3IodmFyIHljPU1hdGgubWF4KGxjLWllLDApLHNkPUtjPU1hdGgubWF4KE9iLWplLDApLHFoPXljLHRiPUhjLmxlbmd0aCxsYT0wO2xhPHRiO2xhKyspe3ZhciB0YT1IY1tsYV0samI9dGhpcy5IZCh0YS5xYyksbmI9dGhpcy5HZCh0YS5jb2x1bW4pLEVnPXRhLkVhLFNiPXRhLm1hcmdpbixPZj1TYi5yaWdodCtTYi5sZWZ0LFBmPVNiLnRvcCtTYi5ib3R0b207SWNbdGEuY29sdW1uXT0wPT09bmIuZmM/TWF0aC5tYXgoRWcud2lkdGgrT2YsSWNbdGEuY29sdW1uXSk6bnVsbDtKY1t0YS5xY109MD09PWpiLmZjP01hdGgubWF4KEVnLmhlaWdodCtQZixKY1t0YS5xY10pOm51bGx9dmFyIFZkPTAsRmc9MDtmb3IobGEgaW4gSmMpImNvdW50IiE9PWxhJiYoVmQrPUpjW2xhXSk7Zm9yKGxhIGluIEljKSJjb3VudCIhPT1sYSYmKEZnKz1JY1tsYV0pO2Zvcih2YXIgemI9dC5BbCgpLGxhPTA7bGE8dGI7bGErKylpZih0YT1IY1tsYV0sdGEudmlzaWJsZXx8dGE9PT0NCnRoaXMua2Mpe3ZhciBqYj10aGlzLkhkKHRhLnFjKSxuYj10aGlzLkdkKHRhLmNvbHVtbiksa2U7aXNGaW5pdGUobmIud2lkdGgpP2tlPW5iLndpZHRoOihrZT1pc0Zpbml0ZSh5YykmJm51bGwhPT1JY1t0YS5jb2x1bW5dPzA9PT1GZz9uYi5mYyt5YzpJY1t0YS5jb2x1bW5dL0ZnKnFoOm51bGwhPT1JY1t0YS5jb2x1bW5dP3ljOm5iLmZjfHx5YyxrZT1NYXRoLm1heCgwLGtlLUlsKG5iKSkpO3ZhciBwZjtpc0Zpbml0ZShqYi5oZWlnaHQpP3BmPWpiLmhlaWdodDoocGY9aXNGaW5pdGUoS2MpJiZudWxsIT09SmNbdGEucWNdPzA9PT1WZD9qYi5mYytLYzpKY1t0YS5xY10vVmQqc2Q6bnVsbCE9PUpjW3RhLnFjXT9LYzpqYi5mY3x8S2MscGY9TWF0aC5tYXgoMCxwZi1JbChqYikpKTt6Yi5wKE1hdGgubWF4KG5iLmVpLE1hdGgubWluKGtlLG5iLnpmKSksTWF0aC5tYXgoamIuZWksTWF0aC5taW4ocGYsamIuemYpKSk7VWQ9SWsodGEsamIsbmIpO3N3aXRjaChVZCl7Y2FzZSBjazp6Yi5oZWlnaHQ9DQpJbmZpbml0eTticmVhaztjYXNlIGJrOnpiLndpZHRoPUluZmluaXR5fVNiPXRhLm1hcmdpbjtPZj1TYi5yaWdodCtTYi5sZWZ0O1BmPVNiLnRvcCtTYi5ib3R0b207RmsodGEpO2hoKHRhLHpiLndpZHRoLHpiLmhlaWdodCxuYi5laSxqYi5laSk7dWU9dGEuRWE7U2U9TWF0aC5tYXgodWUud2lkdGgrT2YsMCk7VGU9TWF0aC5tYXgodWUuaGVpZ2h0K1BmLDApO2lzRmluaXRlKHljKSYmKFNlPU1hdGgubWluKFNlLHpiLndpZHRoKSk7aXNGaW5pdGUoS2MpJiYoVGU9TWF0aC5taW4oVGUsemIuaGVpZ2h0KSk7dmFyIHFmO3FmPWpiLmZjO01sKGpiLE1hdGgubWF4KGpiLmZjLFRlKSk7WGM9amIuZmMtcWY7S2M9TWF0aC5tYXgoS2MtWGMsMCk7cWY9bmIuZmM7TWwobmIsTWF0aC5tYXgobmIuZmMsU2UpKTtYYz1uYi5mYy1xZjt5Yz1NYXRoLm1heCh5Yy1YYywwKX10LnlhKEhjKTtmb3IodmFyIFdkPXQuQWwoKSx0Yj1nZy5sZW5ndGgsbGE9MDtsYTx0YjtsYSsrKWlmKHRhPWdnW2xhXSx0YS52aXNpYmxlfHwNCnRhPT09dGhpcy5rYyl7amI9dGhpcy5IZCh0YS5xYyk7bmI9dGhpcy5HZCh0YS5jb2x1bW4pO3piLnAoTWF0aC5tYXgobmIuZWksTWF0aC5taW4obGMsbmIuemYpKSxNYXRoLm1heChqYi5laSxNYXRoLm1pbihPYixqYi56ZikpKTtVZD1Jayh0YSxqYixuYik7c3dpdGNoKFVkKXtjYXNlIENjOjAhPT1uYi5mYyYmKHpiLndpZHRoPU1hdGgubWluKHpiLndpZHRoLG5iLmZjKSk7MCE9PWpiLmZjJiYoemIuaGVpZ2h0PU1hdGgubWluKHpiLmhlaWdodCxqYi5mYykpO2JyZWFrO2Nhc2UgY2s6MCE9PW5iLmZjJiYoemIud2lkdGg9TWF0aC5taW4oemIud2lkdGgsbmIuZmMpKTticmVhaztjYXNlIGJrOjAhPT1qYi5mYyYmKHpiLmhlaWdodD1NYXRoLm1pbih6Yi5oZWlnaHQsamIuZmMpKX1pc0Zpbml0ZShuYi53aWR0aCkmJih6Yi53aWR0aD1uYi53aWR0aCk7aXNGaW5pdGUoamIuaGVpZ2h0KSYmKHpiLmhlaWdodD1qYi5oZWlnaHQpO1dkLnAoMCwwKTtmb3IodmFyIGZjPTE7ZmM8dGEuS2omJg0KISh0YS5xYytmYz49dGhpcy5weCk7ZmMrKylrYT10aGlzLkhkKHRhLnFjK2ZjKSxXZC5oZWlnaHQrPU1hdGgubWF4KGthLmVpLGlzTmFOKGthLk1mKT9rYS56ZjpNYXRoLm1pbihrYS5NZixrYS56ZikpO2ZvcihmYz0xO2ZjPHRhLnNqJiYhKHRhLmNvbHVtbitmYz49dGhpcy5tdyk7ZmMrKylrYT10aGlzLkdkKHRhLmNvbHVtbitmYyksV2Qud2lkdGgrPU1hdGgubWF4KGthLmVpLGlzTmFOKGthLk1mKT9rYS56ZjpNYXRoLm1pbihrYS5NZixrYS56ZikpO3piLndpZHRoKz1XZC53aWR0aDt6Yi5oZWlnaHQrPVdkLmhlaWdodDtTYj10YS5tYXJnaW47T2Y9U2IucmlnaHQrU2IubGVmdDtQZj1TYi50b3ArU2IuYm90dG9tO2hoKHRhLHpiLndpZHRoLHpiLmhlaWdodCxvZixiYik7Zm9yKHZhciB1ZT10YS5FYSxTZT1NYXRoLm1heCh1ZS53aWR0aCtPZiwwKSxUZT1NYXRoLm1heCh1ZS5oZWlnaHQrUGYsMCksR2c9MCxmYz0wO2ZjPHRhLktqO2ZjKyspa2E9dGhpcy5IZCh0YS5xYytmYyksR2crPQ0Ka2EudG90YWx8fDA7aWYoR2c8VGUpZm9yKHZhciBYZD1UZS1HZzswPFhkOyl7dmFyIHFjPWthLktifHwwO2lzTmFOKGthLmhlaWdodCkmJmthLnpmPnFjJiYoTWwoa2EsTWF0aC5taW4oa2EuemYscWMrWGQpKSxrYS5LYiE9PXFjJiYoWGQtPWthLktiLXFjKSk7aWYoLTE9PT1rYS5pbmRleC0xKWJyZWFrO2thPXRoaXMuSGQoa2EuaW5kZXgtMSl9Zm9yKHZhciBVZT0wLGZjPTA7ZmM8dGEuc2o7ZmMrKylrYT10aGlzLkdkKHRhLmNvbHVtbitmYyksVWUrPWthLnRvdGFsfHwwO2lmKFVlPFNlKWZvcihYZD1TZS1VZTswPFhkOyl7cWM9a2EuS2J8fDA7aXNOYU4oa2Eud2lkdGgpJiZrYS56Zj5xYyYmKE1sKGthLE1hdGgubWluKGthLnpmLHFjK1hkKSksa2EuS2IhPT1xYyYmKFhkLT1rYS5LYi1xYykpO2lmKC0xPT09a2EuaW5kZXgtMSlicmVhaztrYT10aGlzLkdkKGthLmluZGV4LTEpfX10LnlhKGdnKTt0LmJrKFdkKTt0LmJrKHpiKTtmb3IodmFyIHJmPTAsbGU9MCxVZD1rayh0aGlzKSxIZz0NCnRoaXMuQ2Esa2c9dGhpcy5IZSxMYz1qZT1pZT0wLG1lPTAsdGI9dGhpcy5tdyxsYT0wO2xhPHRiO2xhKyspdm9pZCAwIT09dGhpcy5kZFtsYV0mJihrYT10aGlzLkdkKGxhKSxpc0Zpbml0ZShrYS53aWR0aCk/KExjKz1rYS53aWR0aCxMYys9SWwoa2EpKTpObChrYSk9PT1PbD8oTGMrPWthLktiLExjKz1JbChrYSkpOjAhPT1rYS5LYiYmKGllKz1rYS5LYixpZSs9SWwoa2EpKSk7dmFyIHJmPWlzRmluaXRlKEhnLndpZHRoKT9NYXRoLm1pbihIZy53aWR0aCxrZy53aWR0aCk6VWQhPT1VZyYmaXNGaW5pdGUobGMpP2xjOmllLHJmPU1hdGgubWF4KHJmLHRoaXMuVmYud2lkdGgpLHJmPU1hdGgubWF4KHJmLUxjLDApLEpnPU1hdGgubWF4KHJmL2llLDEpO2lzRmluaXRlKEpnKXx8KEpnPTEpO2ZvcihsYT0wO2xhPHRiO2xhKyspdm9pZCAwIT09dGhpcy5kZFtsYV0mJihrYT10aGlzLkdkKGxhKSxpc0Zpbml0ZShrYS53aWR0aCl8fE5sKGthKT09PU9sfHxNbChrYSxrYS5LYipKZyksa2EuTWE9DQpmLndpZHRoLDAhPT1rYS5LYiYmKGYud2lkdGgrPWthLktiLGYud2lkdGgrPUlsKGthKSkpO3RiPXRoaXMucHg7Zm9yKGxhPTA7bGE8dGI7bGErKyl2b2lkIDAhPT10aGlzLmtkW2xhXSYmKGthPXRoaXMuSGQobGEpLGlzRmluaXRlKGthLmhlaWdodCk/KG1lKz1rYS5oZWlnaHQsbWUrPUlsKGthKSk6Tmwoa2EpPT09T2w/KG1lKz1rYS5LYixtZSs9SWwoa2EpKTowIT09a2EuS2ImJihqZSs9a2EuS2IsamUrPUlsKGthKSkpO3ZhciBsZT1pc0Zpbml0ZShIZy5oZWlnaHQpP01hdGgubWluKEhnLmhlaWdodCxrZy5oZWlnaHQpOlVkIT09VWcmJmlzRmluaXRlKE9iKT9PYjpqZSxsZT1NYXRoLm1heChsZSx0aGlzLlZmLmhlaWdodCksbGU9TWF0aC5tYXgobGUtbWUsMCksVmU9TWF0aC5tYXgobGUvamUsMSk7aXNGaW5pdGUoVmUpfHwoVmU9MSk7Zm9yKGxhPTA7bGE8dGI7bGErKyl2b2lkIDAhPT10aGlzLmtkW2xhXSYmKGthPXRoaXMuSGQobGEpLGlzRmluaXRlKGthLmhlaWdodCl8fE5sKGthKT09PQ0KT2x8fE1sKGthLGthLktiKlZlKSxrYS5NYT1mLmhlaWdodCwwIT09a2EuS2ImJihmLmhlaWdodCs9a2EuS2IsZi5oZWlnaHQrPUlsKGthKSkpO3RiPVdjLmxlbmd0aDtmb3IobGE9MDtsYTx0YjtsYSsrKXt2YXIgWWM9V2NbbGFdO1ljLnR5cGU9PT10az8oa2U9Zi53aWR0aCxrYT10aGlzLkhkKFljLnFjKSxwZj1rYS5mYyk6KGthPXRoaXMuR2QoWWMuY29sdW1uKSxrZT1rYS5mYyxwZj1mLmhlaWdodCk7WWMuV2MucCgwLDAsa2UscGYpO2xrKFljLCExKTtlY1tZYy5xY118fChlY1tZYy5xY109W10pO2VjW1ljLnFjXVtZYy5jb2x1bW5dfHwoZWNbWWMucWNdW1ljLmNvbHVtbl09W10pO2VjW1ljLnFjXVtZYy5jb2x1bW5dLnB1c2goWWMpfXQueWEoV2MpO3RoaXMuYnM9ZWM7YnJlYWs7Y2FzZSAiVmlld2JveCI6dmFyIHdqPWEseGo9YixHbz1jLEhvPWQ7MTxuJiZ0Lm0oIlZpZXdib3ggUGFuZWwgY2Fubm90IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBHcmFwaE9iamVjdC4iKTt2YXIgdmU9DQptLm5bMF07dmUud2M9MTtGayh2ZSk7aGgodmUsSW5maW5pdHksSW5maW5pdHksR28sSG8pO3ZhciBpaT12ZS5FYSx5aj12ZS5tYXJnaW4sSW89eWoucmlnaHQreWoubGVmdCxKbz15ai50b3AreWouYm90dG9tO2lmKGlzRmluaXRlKHdqKXx8aXNGaW5pdGUoeGopKXt2YXIgTXE9dmUuc2NhbGUsS289aWkud2lkdGgsTG89aWkuaGVpZ2h0LE1vPU1hdGgubWF4KHdqLUlvLDApLE5vPU1hdGgubWF4KHhqLUpvLDApLHVsPXRoaXMuSW89PT1XZz9NYXRoLm1pbihNby9LbyxOby9Mbyk6TWF0aC5tYXgoTW8vS28sTm8vTG8pOzA9PT11bCYmKHVsPTFFLTQpO3ZlLndjKj11bDtNcSE9PXZlLnNjYWxlJiYobGsodmUsITApLGhoKHZlLEluZmluaXR5LEluZmluaXR5LEdvLEhvKSl9aWk9dmUuRWE7Zi53aWR0aD1pc0Zpbml0ZSh3aik/d2o6TWF0aC5tYXgoaWkud2lkdGgrSW8sMCk7Zi5oZWlnaHQ9aXNGaW5pdGUoeGopP3hqOk1hdGgubWF4KGlpLmhlaWdodCtKbywwKTticmVhaztjYXNlICJMaW5rIjp2YXIgemo9DQp0aGlzIGluc3RhbmNlb2YgSmU/dGhpcy5YaDp0aGlzO2lmKDA9PT1uKXt2YXIgQWo9dGhpcy5oZDtWYShBaiwwLDApO3ZhciBZZD10aGlzLkVhO1lkLnAoMCwwLDAsMCl9ZWxzZXt2YXIgQmo9dGhpcy5ScSgpLFdlPXRoaXMudmooKSx3ZT10aGlzLlFpO3dlLmFzc2lnbihXZSk7d2UueD0wO3dlLnk9MDt2YXIgcmgsamk9dGhpcy5TeSgpO3JoPXZvaWQgMCE9PXRoaXMub2E/dGhpcy5vYTpqaS5jb3VudDt0aGlzLllnLnAoV2UueCxXZS55KTt0aGlzLm1pLmNsZWFyKCk7bnVsbCE9PUJqJiYoUGwoQmosV2Uud2lkdGgsV2UuaGVpZ2h0KSxZZD1Cai5FYSx3ZS5saihZZCksdGhpcy5taS5hZGQoWWQpKTtmb3IodmFyIHNoPXQucGgoKSxraT10LksoKSxSZj10LksoKSx2bD0wO3ZsPG47dmwrKyl7dmFyIFRiPW0ublt2bF07aWYoVGIhPT1CailpZihUYi5maiYmVGIgaW5zdGFuY2VvZiBXKVBsKFRiLFdlLndpZHRoLFdlLmhlaWdodCksWWQ9VGIuRWEsd2UubGooWWQpLHRoaXMubWkuYWRkKFlkKTsNCmVsc2UgaWYoMj5yaCloaChUYixJbmZpbml0eSxJbmZpbml0eSksWWQ9VGIuRWEsd2UubGooWWQpLHRoaXMubWkuYWRkKFlkKTtlbHNle3ZhciBTZj1UYi5DZixQbz1UYi5MdCx3bD1UYi5Sajt3bC5HZSgpJiYod2w9S2IpO3ZhciBsaT1UYi5NdCxOcT1UYi4kQSxtaSxuaSxDaj0wO2lmKFNmPC1yaHx8U2Y+PXJoKXt2YXIgUW89emouekYsb2k9emoueUY7bGkhPT15ZyYmKENqPXpqLmNvbXB1dGVBbmdsZShUYixsaSxvaSksVGIuYW5nbGU9Q2opO21pPVFvLngtV2UueDtuaT1Rby55LVdlLnl9ZWxzZXt2YXIgc2YsdGg7aWYoMDw9U2Ypc2Y9amkubltTZl0sdGg9U2Y8cmgtMT9qaS5uW1NmKzFdOnNmO2Vsc2V7dmFyIHhsPXJoK1NmO3NmPWppLm5beGxdO3RoPTA8eGw/amkublt4bC0xXTpzZn1vaT0wPD1TZj9zZi4kaSh0aCk6dGguJGkoc2YpO2xpIT09eWcmJihDaj16ai5jb21wdXRlQW5nbGUoVGIsbGksb2kpLFRiLnduPUNqKTttaT1zZi54Kyh0aC54LXNmLngpKlBvLVdlLng7bmk9c2YueSsNCih0aC55LXNmLnkpKlBvLVdlLnl9aGgoVGIsSW5maW5pdHksSW5maW5pdHkpO3ZhciBZZD1UYi5FYSxBaj1UYi5SYSxwaT0wO1RiIGluc3RhbmNlb2YgVyYmKHBpPVRiLmZiKTt2YXIgRGo9QWoud2lkdGgrcGkseWw9QWouaGVpZ2h0K3BpO3NoLnJlc2V0KCk7c2gudHJhbnNsYXRlKC1ZZC54LC1ZZC55KTtzaC5zY2FsZShUYi5zY2FsZSxUYi5zY2FsZSk7c2gucm90YXRlKGxpPT09eWc/VGIuYW5nbGU6b2ksRGovMix5bC8yKTt2YXIgdWg9bmV3IHgoMCwwLERqLHlsKTtraS5PdCh1aCx3bCk7c2guVGEoa2kpO3ZhciBPcT0ta2kueCtwaS8yLFBxPS1raS55K3BpLzI7UmYuYXNzaWduKE5xKTtpc05hTihSZi54KSYmKFJmLng9MDw9U2Y/RGovMiszOi0oRGovMiszKSk7aXNOYU4oUmYueSkmJihSZi55PS0oeWwvMiszKSk7UmYucm90YXRlKG9pKTttaSs9UmYueDtuaSs9UmYueTt1aC5zZXQoWWQpO3VoLng9bWkrT3E7dWgueT1uaStQcTt0aGlzLm1pLmFkZCh1aCk7d2UubGoodWgpfX1pZih0aGlzLndlKWZvcih2YXIgUm89DQp0aGlzLmVrO1JvLm5leHQoKTspaGgoUm8udmFsdWUsSW5maW5pdHksSW5maW5pdHkpO3RoaXMuUWk9d2U7dmFyIEVqPXRoaXMuWWc7RWomJkVqLnAoRWoueCt3ZS54LEVqLnkrd2UueSk7VmEoZix3ZS53aWR0aHx8MCx3ZS5oZWlnaHR8fDApO3QuV2Uoc2gpO3QuQihraSk7dC5CKFJmKX1icmVhaztjYXNlICJHcmlkIjpicmVhaztjYXNlICJUYWJsZVJvdyI6Y2FzZSAiVGFibGVDb2x1bW4iOnQubSh0aGlzLnRvU3RyaW5nKCkrIiBpcyBub3QgYW4gZWxlbWVudCBvZiBhIFRhYmxlIFBhbmVsLiBUYWJsZVJvdyBhbmQgVGFibGVDb2x1bW4gUGFuZWxzIGNhbiBvbmx5IGJlIGVsZW1lbnRzIG9mIGEgVGFibGUgUGFuZWwuIik7YnJlYWs7ZGVmYXVsdDp0Lm0oIlVua25vd24gcGFuZWwgdHlwZTogIitwKX19dmFyIHhlPWYud2lkdGgseWU9Zi5oZWlnaHQsRmo9dGhpcy5wYWRkaW5nLFFxPUZqLnRvcCtGai5ib3R0b20seGU9eGUrKEZqLmxlZnQrRmoucmlnaHQpLHllPXllK1FxO2lzRmluaXRlKGcud2lkdGgpJiYNCih4ZT1nLndpZHRoKTtpc0Zpbml0ZShnLmhlaWdodCkmJih5ZT1nLmhlaWdodCk7eGU9TWF0aC5taW4oay53aWR0aCx4ZSk7eWU9TWF0aC5taW4oay5oZWlnaHQseWUpO3hlPU1hdGgubWF4KGgud2lkdGgseGUpO3llPU1hdGgubWF4KGguaGVpZ2h0LHllKTt4ZT1NYXRoLm1heChjLHhlKTt5ZT1NYXRoLm1heChkLHllKTtmLndpZHRoPXhlO2YuaGVpZ2h0PXllO1ZhKHRoaXMuaGQseGUseWUpO2hrKHRoaXMsMCwwLHhlLHllKX07eS5wcm90b3R5cGUuZmluZE1haW5FbGVtZW50PXkucHJvdG90eXBlLkR3PWZ1bmN0aW9uKCl7bnVsbD09PXRoaXMuRW8mJkVrKHRoaXMsdGhpcy54YSx0aGlzLnhhLmxlbmd0aCk7cmV0dXJuIHRoaXMuRW99O2Z1bmN0aW9uIEVrKGEsYixjKXtmb3IodmFyIGQ9MDtkPGM7ZCsrKXt2YXIgZj1iLm5bZF07aWYoITA9PT1mLmZqKXJldHVybiBhLkVvPWZ9Yj1iLm5bMF07cmV0dXJuIGEuRW89Yn0NCnkucHJvdG90eXBlLlVqPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBmPXRoaXMuUWksZz10aGlzLnhhLGg9Zy5sZW5ndGgsaz10LmhrKDAsMCwwLDApO2lmKDA9PT1oKXt2YXIgbD10aGlzLnBhO2wueD1hO2wueT1iO2wud2lkdGg9YztsLmhlaWdodD1kfWVsc2V7aWYoIXRoaXMuQ2EuTigpKXt2YXIgbT1rayh0aGlzKSxuPXRoaXMuV2MscD1uLndpZHRoLHE9bi5oZWlnaHQscj10aGlzLm1hcmdpbixzPXIubGVmdCtyLnJpZ2h0LHU9ci50b3Arci5ib3R0b207cD09PWMmJnE9PT1kJiYobT1VZyk7c3dpdGNoKG0pe2Nhc2UgVWc6aWYocD5jfHxxPmQpdGhpcy5mYSgpLGhoKHRoaXMscD5jP2M6cCxxPmQ/ZDpxKTticmVhaztjYXNlIENjOmxrKHRoaXMsITApO2hoKHRoaXMsYytzLGQrdSwwLDApO2JyZWFrO2Nhc2UgY2s6bGsodGhpcywhMCk7aGgodGhpcyxjK3MscSt1LDAsMCk7YnJlYWs7Y2FzZSBiazpsayh0aGlzLCEwKSxoaCh0aGlzLHArcyxkK3UsMCwwKX19bD10aGlzLnBhO2wueD1hOw0KbC55PWI7bC53aWR0aD1jO2wuaGVpZ2h0PWQ7dmFyIHY9dGhpcy5kYS5ZYjtzd2l0Y2godil7Y2FzZSAiUG9zaXRpb24iOmZvcih2YXIgRD1mLngtdGhpcy5wYWRkaW5nLmxlZnQsQT1mLnktdGhpcy5wYWRkaW5nLnRvcCxHPTA7RzxoO0crKyl7dmFyIEw9Zy5uW0ddLE49TC5FYSxPPUwubWFyZ2luLFU9TC5wb3NpdGlvbi54LFk9TC5wb3NpdGlvbi55O2sueD1pc05hTihVKT8tRDpVLUQ7ay55PWlzTmFOKFkpPy1BOlktQTtpZihMIGluc3RhbmNlb2YgVyYmTC5zQSl7dmFyIGJhPUwuZmIvMjtrLngtPWJhO2sueS09YmF9ay54Kz1PLmxlZnQ7ay55Kz1PLnRvcDtrLndpZHRoPU4ud2lkdGg7ay5oZWlnaHQ9Ti5oZWlnaHQ7TC52aXNpYmxlJiZMLkxjKGsueCxrLnksay53aWR0aCxrLmhlaWdodCl9YnJlYWs7Y2FzZSAiVmVydGljYWwiOmZvcih2YXIgUj10aGlzLnBhZGRpbmcubGVmdCx4YT10aGlzLnBhZGRpbmcudG9wLFlhPTA7WWE8aDtZYSsrKXt2YXIgemE9UixOYT1nLm5bWWFdO2lmKE5hLnZpc2libGUpe3ZhciB2YT0NCk5hLkVhLFBhPU5hLm1hcmdpbixHYT1QYS5sZWZ0K1BhLnJpZ2h0LEpmPVIrdGhpcy5wYWRkaW5nLnJpZ2h0LGxmPXZhLndpZHRoLFpiPWtrKE5hKTtpZihpc05hTihOYS5DYS53aWR0aCkmJlpiPT09Q2N8fFpiPT09Y2spbGY9TWF0aC5tYXgoZi53aWR0aC1HYS1KZiwwKTt2YXIgZmc9bGYrR2ErSmYsaWM9TmEuYWxpZ25tZW50O2ljLlBjKCkmJihpYz10aGlzLlhqKTtpYy52ZCgpfHwoaWM9S2IpO05hLkxjKHphK2ljLm9mZnNldFgrUGEubGVmdCsoZi53aWR0aCppYy54LWZnKmljLngpLHhhK2ljLm9mZnNldFkrUGEudG9wLGxmLHZhLmhlaWdodCk7eGErPXZhLmhlaWdodCtQYS5ib3R0b20rUGEudG9wfX1icmVhaztjYXNlICJIb3Jpem9udGFsIjpmb3IodmFyIGtiPXRoaXMucGFkZGluZy50b3AsZmI9dGhpcy5wYWRkaW5nLmxlZnQsSWE9MDtJYTxoO0lhKyspe3ZhciBKYT1rYixYYT1nLm5bSWFdO2lmKFhhLnZpc2libGUpe3ZhciBkYj1YYS5FYSxBYj1YYS5tYXJnaW4sbWQ9QWIudG9wKw0KQWIuYm90dG9tLG1mPWtiK3RoaXMucGFkZGluZy5ib3R0b20sRGQ9ZGIuaGVpZ2h0LG5kPWtrKFhhKTtpZihpc05hTihYYS5DYS5oZWlnaHQpJiZuZD09PUNjfHxuZD09PWJrKURkPU1hdGgubWF4KGYuaGVpZ2h0LW1kLW1mLDApO3ZhciBOZT1EZCttZCttZixFZD1YYS5hbGlnbm1lbnQ7RWQuUGMoKSYmKEVkPXRoaXMuWGopO0VkLnZkKCl8fChFZD1LYik7WGEuTGMoZmIrRWQub2Zmc2V0WCtBYi5sZWZ0LEphK0VkLm9mZnNldFkrQWIudG9wKyhmLmhlaWdodCpFZC55LU5lKkVkLnkpLGRiLndpZHRoLERkKTtmYis9ZGIud2lkdGgrQWIubGVmdCtBYi5yaWdodH19YnJlYWs7Y2FzZSAiU3BvdCI6dmFyIHNlPUVrKHRoaXMsZyxoKSxLZj1zZS5FYSxCYj1LZi53aWR0aCxCZz1LZi5oZWlnaHQsSGI9dGhpcy5wYWRkaW5nLHFiPUhiLmxlZnQsWmE9SGIudG9wO2sueD1xYi1mLng7ay55PVphLWYueTtzZS5MYyhrLngsay55LEJiLEJnKTtmb3IodmFyIHliPTA7eWI8aDt5YisrKXt2YXIgamM9DQpnLm5beWJdO2lmKGpjIT09c2Upe3ZhciBMZj1qYy5FYSxNZj1MZi53aWR0aCxrYz1MZi5oZWlnaHQsVWM9amMuYWxpZ25tZW50O1VjLlBjKCkmJihVYz10aGlzLlhqKTtVYy52ZCgpfHwoVWM9S2IpO3ZhciBvZD1qYy5SajtvZC5QYygpJiYob2Q9S2IpO2sueD1VYy54KkJiK1VjLm9mZnNldFgtKG9kLngqTWYtb2Qub2Zmc2V0WCk7ay55PVVjLnkqQmcrVWMub2Zmc2V0WS0ob2QueSprYy1vZC5vZmZzZXRZKTtrLngtPWYueDtrLnktPWYueTtqYy52aXNpYmxlJiZqYy5MYyhxYitrLngsWmEray55LE1mLGtjKX19YnJlYWs7Y2FzZSAiQXV0byI6dmFyIGRjPUVrKHRoaXMsZyxoKSxwZD1kYy5FYSwkYT10LkdmKCk7JGEucCgwLDAsMSwxKTt2YXIgVGE9ZGMubWFyZ2luLFJiPVRhLmxlZnQsSWI9VGEudG9wLE9lPXRoaXMucGFkZGluZyxQZD1PZS5sZWZ0LHBjPU9lLnRvcDtrLng9UmI7ay55PUliO2sud2lkdGg9cGQud2lkdGg7ay5oZWlnaHQ9cGQuaGVpZ2h0O2RjLkxjKFBkK2sueCxwYysNCmsueSxrLndpZHRoLGsuaGVpZ2h0KTt2YXIgSmI9SmwoZGMpLGVlPUtsKGRjKSxyYj0wK0piLnkqcGQuaGVpZ2h0K0piLm9mZnNldFksRmQ9MCtlZS54KnBkLndpZHRoK2VlLm9mZnNldFgsQ2c9MCtlZS55KnBkLmhlaWdodCtlZS5vZmZzZXRZOyRhLng9MCtKYi54KnBkLndpZHRoK0piLm9mZnNldFg7JGEueT1yYjtoYigkYSxGZCxDZywwLDApOyRhLngrPVJiK1BkOyRhLnkrPUliK3BjO2Zvcih2YXIgUGU9MDtQZTxoO1BlKyspe3ZhciBHZD1nLm5bUGVdO2lmKEdkIT09ZGMpe3ZhciBnYj1HZC5FYSxUYT1HZC5tYXJnaW4sbmY9TWF0aC5tYXgoZ2Iud2lkdGgrVGEucmlnaHQrVGEubGVmdCwwKSxpYj1NYXRoLm1heChnYi5oZWlnaHQrVGEudG9wK1RhLmJvdHRvbSwwKSxzYj1HZC5hbGlnbm1lbnQ7c2IuUGMoKSYmKHNiPXRoaXMuWGopO3NiLnZkKCl8fChzYj1LYik7ay54PSRhLndpZHRoKnNiLngrc2Iub2Zmc2V0WC1uZipzYi54K1RhLmxlZnQrJGEueDtrLnk9JGEuaGVpZ2h0KnNiLnkrDQpzYi5vZmZzZXRZLWliKnNiLnkrVGEudG9wKyRhLnk7ay53aWR0aD0kYS53aWR0aDtrLmhlaWdodD0kYS5oZWlnaHQ7R2QudmlzaWJsZSYmKG1iKCRhLngsJGEueSwkYS53aWR0aCwkYS5oZWlnaHQsay54LGsueSxnYi53aWR0aCxnYi5oZWlnaHQpP0dkLkxjKGsueCxrLnksZ2Iud2lkdGgsZ2IuaGVpZ2h0KTpHZC5MYyhrLngsay55LGdiLndpZHRoLGdiLmhlaWdodCxuZXcgeCgkYS54LCRhLnksJGEud2lkdGgsJGEuaGVpZ2h0KSkpfX10LmhjKCRhKTticmVhaztjYXNlICJUYWJsZSI6Zm9yKHZhciBWYz10aGlzLnBhZGRpbmcsTmI9VmMubGVmdCxRZD1WYy50b3AsUmQ9dGhpcy5icyxmZSxGYyx0ZT1SZC5sZW5ndGgsR2M9MCxDYj0wO0NiPHRlO0NiKyspUmRbQ2JdJiYoR2M9TWF0aC5tYXgoR2MsUmRbQ2JdLmxlbmd0aCkpO2Zvcih2YXIgUWU9TWF0aC5taW4odGhpcy5QaSx0ZS0xKTtRZSE9PXRlJiYodm9pZCAwPT09dGhpcy5rZFtRZV18fDA9PT10aGlzLmtkW1FlXS5LYik7KVFlKys7DQpmb3IodmFyIFFlPU1hdGgubWluKFFlLHRlLTEpLHFkPS10aGlzLmtkW1FlXS5NYSxsYj1NYXRoLm1pbih0aGlzLnppLEdjLTEpO2xiIT09R2MmJih2b2lkIDA9PT10aGlzLmRkW2xiXXx8MD09PXRoaXMuZGRbbGJdLktiKTspbGIrKztmb3IodmFyIGxiPU1hdGgubWluKGxiLEdjLTEpLEhkPS10aGlzLmRkW2xiXS5NYSxEYj10LkFsKCksQ2I9MDtDYjx0ZTtDYisrKWlmKFJkW0NiXSl7dmFyIEdjPVJkW0NiXS5sZW5ndGgsU2Q9dGhpcy5IZChDYik7RmM9U2QuTWErcWQrUWQrUWwoU2QpO2Zvcih2YXIgSWQ9MDtJZDxHYztJZCsrKWlmKFJkW0NiXVtJZF0pe3ZhciBsYz10aGlzLkdkKElkKTtmZT1sYy5NYStIZCtOYitRbChsYyk7Zm9yKHZhciBPYj1SZFtDYl1bSWRdLHRiPU9iLmxlbmd0aCxvZj0wO29mPHRiO29mKyspe3ZhciBiYj1PYltvZl0sSmQ9YmIuRWE7aWYoYmIgaW5zdGFuY2VvZiB5JiYoYmIudHlwZT09PXRrfHxiYi50eXBlPT09dWspKXttayhiYik7YmIuY2MuTGEoKTt2YXIgV2M9DQpiYi5jYztXYy54PWJiLnR5cGU9PT10az9OYjpmZTtXYy55PWJiLnR5cGU9PT11az9RZDpGYztXYy53aWR0aD1KZC53aWR0aDtXYy5oZWlnaHQ9SmQuaGVpZ2h0O2JiLmNjLmZyZWV6ZSgpO3BrKGJiLCExKX1lbHNle0RiLnAoMCwwKTtmb3IodmFyIGxhPTE7bGE8YmIucm93U3BhbiYmIShDYitsYT49dGhpcy5weCk7bGErKyl7dmFyIHRhPXRoaXMuSGQoQ2IrbGEpO0RiLmhlaWdodCs9dGEudG90YWx9Zm9yKGxhPTE7bGE8YmIuYUUmJiEoSWQrbGE+PXRoaXMubXcpO2xhKyspe3ZhciB0aj10aGlzLkdkKElkK2xhKTtEYi53aWR0aCs9dGoudG90YWx9dmFyIG5oPWxjLktiK0RiLndpZHRoLHhjPVNkLktiK0RiLmhlaWdodDtrLng9ZmU7ay55PUZjO2sud2lkdGg9bmg7ay5oZWlnaHQ9eGM7dmFyIG9oPWZlLGVjPUZjLERnPW5oLGdnPXhjO2ZlK25oPmYud2lkdGgmJihEZz1NYXRoLm1heChmLndpZHRoLWZlLDApKTtGYyt4Yz5mLmhlaWdodCYmKGdnPU1hdGgubWF4KGYuaGVpZ2h0LUZjLDApKTsNCnZhciBIYz1iYi5hbGlnbm1lbnQsSWMsSmMseWMsS2M7aWYoSGMuUGMoKSl7SGM9dGhpcy5YajtIYy52ZCgpfHwoSGM9S2IpO0ljPUhjLng7SmM9SGMueTt5Yz1IYy5vZmZzZXRYO0tjPUhjLm9mZnNldFk7dmFyIE5mPWxjLmFsaWdubWVudCxrYT1TZC5hbGlnbm1lbnQ7TmYudmQoKSYmKEljPU5mLngseWM9TmYub2Zmc2V0WCk7a2EudmQoKSYmKEpjPWthLnksS2M9a2Eub2Zmc2V0WSl9ZWxzZSBJYz1IYy54LEpjPUhjLnkseWM9SGMub2Zmc2V0WCxLYz1IYy5vZmZzZXRZO2lmKGlzTmFOKEljKXx8aXNOYU4oSmMpKUpjPUljPTAuNSxLYz15Yz0wO3ZhciBnZT1KZC53aWR0aCxUZD1KZC5oZWlnaHQsaGc9YmIubWFyZ2luLHVqPWhnLmxlZnQraGcucmlnaHQsWGM9aGcudG9wK2hnLmJvdHRvbSxqYj1JayhiYixTZCxsYyk7IWlzTmFOKGJiLkNhLndpZHRoKXx8amIhPT1DYyYmamIhPT1ja3x8KGdlPU1hdGgubWF4KG5oLXVqLDApKTshaXNOYU4oYmIuQ2EuaGVpZ2h0KXx8amIhPT1DYyYmamIhPT0NCmJrfHwoVGQ9TWF0aC5tYXgoeGMtWGMsMCkpO3ZhciBuYj1iYi5IZSxoaT1iYi5WZixnZT1NYXRoLm1pbihuYi53aWR0aCxnZSksVGQ9TWF0aC5taW4obmIuaGVpZ2h0LFRkKSxnZT1NYXRoLm1heChoaS53aWR0aCxnZSksVGQ9TWF0aC5tYXgoaGkuaGVpZ2h0LFRkKSx0bD1UZCtYYztrLngrPWsud2lkdGgqSWMtKGdlK3VqKSpJYyt5YytoZy5sZWZ0O2sueSs9ay5oZWlnaHQqSmMtdGwqSmMrS2MraGcudG9wO2JiLnZpc2libGUmJihtYihvaCxlYyxEZyxnZyxrLngsay55LEpkLndpZHRoLEpkLmhlaWdodCk/YmIuTGMoay54LGsueSxnZSxUZCk6YmIuTGMoay54LGsueSxnZSxUZCxuZXcgeChvaCxlYyxEZyxnZykpKX19fX10LmJrKERiKTtmb3IoQ2I9MDtDYjxoO0NiKyspYmI9Zy5uW0NiXSxiYiBpbnN0YW5jZW9mIHkmJihiYi50eXBlPT09dGt8fGJiLnR5cGU9PT11aykmJihXYz1iYi5jYyxiYi5oZC5MYSgpLGJiLmhkLlNwKDAsMCxXYy53aWR0aCxXYy5oZWlnaHQpLGJiLmhkLmZyZWV6ZSgpKTsNCmJyZWFrO2Nhc2UgIlZpZXdib3giOnZhciBpZz1nLm5bMF0samc9aWcuRWEsU2I9aWcubWFyZ2luLE9mPVNiLnRvcCtTYi5ib3R0b20sUGY9TWF0aC5tYXgoamcud2lkdGgrKFNiLnJpZ2h0K1NiLmxlZnQpLDApLFVkPU1hdGgubWF4KGpnLmhlaWdodCtPZiwwKSxoZT1pZy5hbGlnbm1lbnQ7aGUuUGMoKSYmKGhlPXRoaXMuWGopO2hlLnZkKCl8fChoZT1LYik7ay54PWYud2lkdGgqaGUueC1QZipoZS54K2hlLm9mZnNldFg7ay55PWYuaGVpZ2h0KmhlLnktVWQqaGUueStoZS5vZmZzZXRZO2sud2lkdGg9amcud2lkdGg7ay5oZWlnaHQ9amcuaGVpZ2h0O2lnLkxjKGsueCxrLnksay53aWR0aCxrLmhlaWdodCk7YnJlYWs7Y2FzZSAiTGluayI6dmFyIHBoPXRoaXMuUnEoKSxRZj0wO2lmKG51bGwhPT1waCYmUWY8dGhpcy5taS5jb3VudCl7dmFyIFJlPXRoaXMubWkubltRZl07UWYrKztwaC5MYyhSZS54LXRoaXMuUWkueCxSZS55LXRoaXMuUWkueSxSZS53aWR0aCxSZS5oZWlnaHQpfWZvcih2YXIgdWU9DQowO3VlPGg7dWUrKyl7dmFyIFNlPWcublt1ZV07U2UhPT1waCYmUWY8dGhpcy5taS5jb3VudCYmKFJlPXRoaXMubWkubltRZl0sUWYrKyxTZS5MYyhSZS54LXRoaXMuUWkueCxSZS55LXRoaXMuUWkueSxSZS53aWR0aCxSZS5oZWlnaHQpKX12YXIgVGU9dGhpcy5TeSgpLGllPVRlLmNvdW50O2lmKDI8PWllJiZ0aGlzLndlKWZvcih2YXIgamU9dGhpcy5laztqZS5uZXh0KCk7KXt2YXIgc2Q9amUudmFsdWUscWg9aWUsRWc9VGUsVmQ9c2QuQ2YsRmc9c2QuTHQsemI9c2QuUmo7emIuR2UoKSYmKHpiPUtiKTt2YXIga2U9c2QuTXQscGY9c2QuJEEscWY9dm9pZCAwLFdkPXZvaWQgMCxmYz0wO2lmKFZkPC1xaHx8VmQ+PXFoKXt2YXIgR2c9dGhpcy56RixYZD10aGlzLnlGO2tlIT09eWcmJihmYz10aGlzLmNvbXB1dGVBbmdsZShzZCxrZSxYZCksc2QuYW5nbGU9ZmMpO3FmPUdnLng7V2Q9R2cueX1lbHNle3ZhciBxYz12b2lkIDAsVWU9dm9pZCAwO2lmKDA8PVZkKXFjPUVnLm5bVmRdLFVlPVZkPA0KcWgtMT9FZy5uW1ZkKzFdOnFjO2Vsc2UgdmFyIHJmPXFoK1ZkLHFjPUVnLm5bcmZdLFVlPTA8cmY/RWcubltyZi0xXTpxYztYZD0wPD1WZD9xYy4kaShVZSk6VWUuJGkocWMpO2tlIT09eWcmJihmYz10aGlzLmNvbXB1dGVBbmdsZShzZCxrZSxYZCksc2QuYW5nbGU9ZmMpO3FmPXFjLngrKFVlLngtcWMueCkqRmc7V2Q9cWMueSsoVWUueS1xYy55KSpGZ312YXIgbGU9dC5waCgpO2xlLnJlc2V0KCk7bGUuc2NhbGUoc2Quc2NhbGUsc2Quc2NhbGUpO2xlLnJvdGF0ZShzZC5hbmdsZSwwLDApO3ZhciBIZz1zZC5SYSxrZz10LmhrKDAsMCxIZy53aWR0aCxIZy5oZWlnaHQpLExjPXQuSygpO0xjLk90KGtnLHpiKTtsZS5UYShMYyk7dmFyIG1lPS1MYy54LEpnPS1MYy55LFZlPXBmLmNvcHkoKTtpc05hTihWZS54KSYmKFZlLng9MDw9VmQ/TGMueCszOi0oTGMueCszKSk7aXNOYU4oVmUueSkmJihWZS55PS0oTGMueSszKSk7VmUucm90YXRlKFhkKTtxZis9VmUueDtXZCs9VmUueTtsZS5LRyhrZyk7DQp2YXIgbWU9bWUra2cueCxKZz1KZytrZy55LFljPXQubGMocWYrbWUsV2QrSmcpO3NkLm1vdmUoWWMpO3QuQihZYyk7dC5CKExjKTt0LmhjKGtnKTt0LldlKGxlKX10aGlzLmJ4KCk7YnJlYWs7Y2FzZSAiR3JpZCI6YnJlYWs7Y2FzZSAiVGFibGVSb3ciOmNhc2UgIlRhYmxlQ29sdW1uIjp0Lm0odGhpcy50b1N0cmluZygpKyIgaXMgbm90IGFuIGVsZW1lbnQgb2YgYSBUYWJsZSBQYW5lbC5UYWJsZVJvdyBhbmQgVGFibGVDb2x1bW4gcGFuZWxzIGNhbiBvbmx5IGJlIGVsZW1lbnRzIG9mIGEgVGFibGUgUGFuZWwuIik7YnJlYWs7ZGVmYXVsdDp0Lm0oIlVua25vd24gcGFuZWwgdHlwZTogIit2KX10LmhjKGspfX07DQp5LnByb3RvdHlwZS5Waj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLlJhO2lmKG1iKDAsMCxiLndpZHRoLGIuaGVpZ2h0LGEueCxhLnkpKXtmb3IodmFyIGM9dGhpcy54YS5sZW5ndGgsYj10LmxjKDAsMCk7Yy0tOyl7dmFyIGQ9dGhpcy54YS5uWzBdO2lmKGQudmlzaWJsZXx8ZD09PXRoaXMua2MpaWYoUWEoYi5zZXQoYSksZC50cmFuc2Zvcm0pLGQuR2EoYikpcmV0dXJuIHQuQihiKSwhMH10LkIoYik7cmV0dXJuIG51bGw9PT10aGlzLkxiJiZudWxsPT09dGhpcy50Yz8hMTohMH1yZXR1cm4hMX07ZnVuY3Rpb24gUmwoYSxiLGMpe2MoYSxiKTtpZihiIGluc3RhbmNlb2YgeSl7Yj1iLnhhLm47Zm9yKHZhciBkPWIubGVuZ3RoLGY9MDtmPGQ7ZisrKVJsKGEsYltmXSxjKX19ZnVuY3Rpb24gJGkoYSxiKXtTbChhLGEsYil9DQpmdW5jdGlvbiBTbChhLGIsYyl7YyhiKTtiPWIueGEubjtmb3IodmFyIGQ9Yi5sZW5ndGgsZj0wO2Y8ZDtmKyspe3ZhciBnPWJbZl07ZyBpbnN0YW5jZW9mIHkmJlNsKGEsZyxjKX19eS5wcm90b3R5cGUud2Fsa1Zpc3VhbFRyZWU9ZnVuY3Rpb24oYSl7VGwodGhpcyx0aGlzLGEpfTtmdW5jdGlvbiBUbChhLGIsYyl7YyhiKTtpZihiIGluc3RhbmNlb2YgeSl7Yj1iLnhhLm47Zm9yKHZhciBkPWIubGVuZ3RoLGY9MDtmPGQ7ZisrKVRsKGEsYltmXSxjKX19eS5wcm90b3R5cGUuZmluZEluVmlzdWFsVHJlZT15LnByb3RvdHlwZS5hdD1mdW5jdGlvbihhKXtyZXR1cm4gVWwodGhpcyx0aGlzLGEpfTtmdW5jdGlvbiBVbChhLGIsYyl7aWYoYyhiKSlyZXR1cm4gYjtpZihiIGluc3RhbmNlb2YgeSl7Yj1iLnhhLm47Zm9yKHZhciBkPWIubGVuZ3RoLGY9MDtmPGQ7ZisrKXt2YXIgZz1VbChhLGJbZl0sYyk7aWYobnVsbCE9PWcpcmV0dXJuIGd9fXJldHVybiBudWxsfQ0KeS5wcm90b3R5cGUuZmluZE9iamVjdD15LnByb3RvdHlwZS5vZT1mdW5jdGlvbihhKXtpZih0aGlzLm5hbWU9PT1hKXJldHVybiB0aGlzO2Zvcih2YXIgYj10aGlzLnhhLm4sYz1iLmxlbmd0aCxkPTA7ZDxjO2QrKyl7dmFyIGY9YltkXTtpZihmLm5hbWU9PT1hKXJldHVybiBmO2lmKGYgaW5zdGFuY2VvZiB5KWlmKG51bGw9PT1mLnlpJiZudWxsPT09Zi5oZyl7aWYoZj1mLm9lKGEpLG51bGwhPT1mKXJldHVybiBmfWVsc2UgaWYoVmwoZikmJihmPWYueGEuJGEoKSxudWxsIT09ZiYmKGY9Zi5vZShhKSxudWxsIT09ZikpKXJldHVybiBmfXJldHVybiBudWxsfTsNCmZ1bmN0aW9uIFdsKGEpe2E9YS54YS5uO2Zvcih2YXIgYj1hLmxlbmd0aCxjPTAsZD0wO2Q8YjtkKyspe3ZhciBmPWFbZF07aWYoZiBpbnN0YW5jZW9mIHkpYz1NYXRoLm1heChjLFdsKGYpKTtlbHNlIGlmKGYgaW5zdGFuY2VvZiBXKXthOntpZighZi5haClzd2l0Y2goZi5Qbil7Y2FzZSAiTm9uZSI6Y2FzZSAiU3F1YXJlIjpjYXNlICJFbGxpcHNlIjpjYXNlICJDaXJjbGUiOmNhc2UgIkxpbmVIIjpjYXNlICJMaW5lViI6Y2FzZSAiRnJhbWVkUmVjdGFuZ2xlIjpjYXNlICJSb3VuZGVkUmVjdGFuZ2xlIjpjYXNlICJMaW5lMSI6Y2FzZSAiTGluZTIiOmNhc2UgIkJvcmRlciI6Y2FzZSAiQ3ViZTEiOmNhc2UgIkN1YmUyIjpjYXNlICJKdW5jdGlvbiI6Y2FzZSAiQ3lsaW5kZXIxIjpjYXNlICJDeWxpbmRlcjIiOmNhc2UgIkN5bGluZGVyMyI6Y2FzZSAiQ3lsaW5kZXI0IjpjYXNlICJQbHVzTGluZSI6Y2FzZSAiWExpbmUiOmNhc2UgIlRoaW5Dcm9zcyI6Y2FzZSAiVGhpY2tDcm9zcyI6Zj0wOw0KYnJlYWsgYX1mPWYuYmgvMipmLndtKmYuZGsoKX1jPU1hdGgubWF4KGMsZil9fXJldHVybiBjfWFhPXkucHJvdG90eXBlO2FhLkhmPWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLnR5cGU9PT10a3x8dGhpcy50eXBlPT09dWspfTsNCmFhLnBlPWZ1bmN0aW9uKGEsYixjKXtpZighMT09PXRoaXMuQmYpcmV0dXJuIG51bGw7dm9pZCAwPT09YiYmKGI9bnVsbCk7dm9pZCAwPT09YyYmKGM9bnVsbCk7aWYoUGkodGhpcykpcmV0dXJuIG51bGw7dmFyIGQ9dGhpcy5SYSxmPTEvdGhpcy5kaygpLGc9dGhpcy5IZigpLGg9Zz9hOlFhKHQubGMoYS54LGEueSksdGhpcy50cmFuc2Zvcm0pO2lmKG1iKC0oNSpmKSwtKDUqZiksZC53aWR0aCsxMCpmLGQuaGVpZ2h0KzEwKmYsaC54LGgueSkpe2lmKCF0aGlzLlZnKXtmb3IodmFyIGs9dGhpcy54YS5sZW5ndGgsZj10LksoKTtrLS07KXt2YXIgbD10aGlzLnhhLm5ba107aWYobC52aXNpYmxlfHxsPT09dGhpcy5rYyl7bC5IZigpP1FhKGYuc2V0KGEpLGwudHJhbnNmb3JtKTpmLnNldChhKTt2YXIgbT1udWxsO2wgaW5zdGFuY2VvZiB5P209bC5wZShmLGIsYyk6ITA9PT1sLkJmJiZsLkdhKGYpJiYobT1sKTtpZihudWxsIT09bSYmKG51bGwhPT1iJiYobT1iKG0pKSxtJiYobnVsbD09PQ0KY3x8YyhtKSkpKXJldHVybiB0LkIoZiksZ3x8dC5CKGgpLG19fXQuQihmKX1pZihudWxsPT09dGhpcy5iYWNrZ3JvdW5kJiZudWxsPT09dGhpcy5aaylyZXR1cm4gZ3x8dC5CKGgpLG51bGw7YT1tYigwLDAsZC53aWR0aCxkLmhlaWdodCxoLngsaC55KT90aGlzOm51bGw7Z3x8dC5CKGgpO3JldHVybiBhfWd8fHQuQihoKTtyZXR1cm4gbnVsbH07DQphYS5jcD1mdW5jdGlvbihhLGIsYyxkKXtpZighMT09PXRoaXMuQmYpcmV0dXJuITE7dm9pZCAwPT09YiYmKGI9bnVsbCk7dm9pZCAwPT09YyYmKGM9bnVsbCk7ZCBpbnN0YW5jZW9mIEJ8fGQgaW5zdGFuY2VvZiBDfHwoZD1uZXcgQihRKSk7dmFyIGY9dGhpcy5SYSxnPXRoaXMuSGYoKSxoPWc/YTpRYSh0LmxjKGEueCxhLnkpLHRoaXMudHJhbnNmb3JtKTtpZihtYigwLDAsZi53aWR0aCxmLmhlaWdodCxoLngsaC55KSl7aWYoIXRoaXMuVmcpe2Zvcih2YXIgaz10aGlzLnhhLmxlbmd0aCxmPXQuSygpO2stLTspe3ZhciBsPXRoaXMueGEubltrXTtpZihsLnZpc2libGV8fGw9PT10aGlzLmtjKWwuSGYoKT9RYShmLnNldChhKSxsLnRyYW5zZm9ybSk6Zi5zZXQoYSksKGwgaW5zdGFuY2VvZiB5P2wuY3AoZixiLGMsZCk6bC5HYShmKSkmJiExIT09bC5CZiYmKG51bGwhPT1iJiYobD1iKGwpKSxsJiYobnVsbD09PWN8fGMobCkpJiZkLmFkZChsKSl9dC5CKGYpfWd8fHQuQihoKTtyZXR1cm4gbnVsbCE9PQ0KdGhpcy5iYWNrZ3JvdW5kfHxudWxsIT09dGhpcy5aa31nfHx0LkIoaCk7cmV0dXJuITF9Ow0KYWEuYWs9ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe2lmKCExPT09dGhpcy5CZilyZXR1cm4hMTt2b2lkIDA9PT1iJiYoYj1udWxsKTt2b2lkIDA9PT1jJiYoYz1udWxsKTt2YXIgaD1nO3ZvaWQgMD09PWcmJihoPXQucGgoKSxoLnJlc2V0KCkpO2gubXVsdGlwbHkodGhpcy50cmFuc2Zvcm0pO2lmKHRoaXMuSW0oYSxoKSlyZXR1cm4gWGwodGhpcyxiLGMsZiksdm9pZCAwPT09ZyYmdC5XZShoKSwhMDtpZih0aGlzLlRmKGEsaCkpe2lmKCF0aGlzLlZnKWZvcih2YXIgaz10aGlzLnhhLmxlbmd0aDtrLS07KXt2YXIgbD10aGlzLnhhLm5ba107aWYobC52aXNpYmxlfHxsPT09dGhpcy5rYyl7dmFyIG09bC5wYSxuPXRoaXMuUmE7aWYoIShtLng+bi53aWR0aHx8bS55Pm4uaGVpZ2h0fHwwPm0ueCttLndpZHRofHwwPm0ueSttLmhlaWdodCkpe209dC5waCgpO20uc2V0KGgpO2lmKGwgaW5zdGFuY2VvZiB5P2wuYWsoYSxiLGMsZCxmLG0pOmprKGwsYSxkLG0pKW51bGwhPT1iJiYobD1iKGwpKSxsJiYNCihudWxsPT09Y3x8YyhsKSkmJmYuYWRkKGwpO3QuV2UobSl9fX12b2lkIDA9PT1nJiZ0LldlKGgpO3JldHVybiBkfXZvaWQgMD09PWcmJnQuV2UoaCk7cmV0dXJuITF9O2Z1bmN0aW9uIFhsKGEsYixjLGQpe2Zvcih2YXIgZj1hLnhhLmxlbmd0aDtmLS07KXt2YXIgZz1hLnhhLm5bZl07aWYoZy52aXNpYmxlKXt2YXIgaD1nLnBhLGs9YS5SYTtoLng+ay53aWR0aHx8aC55PmsuaGVpZ2h0fHwwPmgueCtoLndpZHRofHwwPmgueStoLmhlaWdodHx8KGcgaW5zdGFuY2VvZiB5JiZYbChnLGIsYyxkKSxudWxsIT09YiYmKGc9YihnKSksZyYmKG51bGw9PT1jfHxjKGcpKSYmZC5hZGQoZykpfX19DQphYS5QbT1mdW5jdGlvbihhLGIsYyxkLGYsZyl7aWYoITE9PT10aGlzLkJmKXJldHVybiExO3ZvaWQgMD09PWMmJihjPW51bGwpO3ZvaWQgMD09PWQmJihkPW51bGwpO3ZhciBoPXRoaXMuUmEsaz10aGlzLkhmKCksbD1rP2E6UWEodC5sYyhhLngsYS55KSx0aGlzLnRyYW5zZm9ybSksbT1rP2I6UWEodC5sYyhiLngsYi55KSx0aGlzLnRyYW5zZm9ybSksbj1sLlpqKG0pLHA9MDxsLngmJmwueDxoLndpZHRoJiYwPGwueSYmbC55PGguaGVpZ2h0fHxSYShsLngsbC55LDAsMCwwLGguaGVpZ2h0KTxufHxSYShsLngsbC55LDAsaC5oZWlnaHQsaC53aWR0aCxoLmhlaWdodCk8bnx8UmEobC54LGwueSxoLndpZHRoLGguaGVpZ2h0LGgud2lkdGgsMCk8bnx8UmEobC54LGwueSxoLndpZHRoLDAsMCwwKTxuLGg9MDxsLngmJmwueDxoLndpZHRoJiYwPGwueSYmbC55PGguaGVpZ2h0JiZSYShsLngsbC55LDAsMCwwLGguaGVpZ2h0KTxuJiZSYShsLngsbC55LDAsaC5oZWlnaHQsaC53aWR0aCxoLmhlaWdodCk8DQpuJiZSYShsLngsbC55LGgud2lkdGgsaC5oZWlnaHQsaC53aWR0aCwwKTxuJiZSYShsLngsbC55LGgud2lkdGgsMCwwLDApPG47a3x8KHQuQihsKSx0LkIobSkpO2lmKHApe2lmKCF0aGlzLlZnKXtrPXQuSygpO2w9dC5LKCk7Zm9yKG09dGhpcy54YS5sZW5ndGg7bS0tOylpZihuPXRoaXMueGEublttXSxuLnZpc2libGV8fG49PT10aGlzLmtjKXt2YXIgcT1uLnBhLHI9dGhpcy5SYTtxLng+ci53aWR0aHx8cS55PnIuaGVpZ2h0fHwwPnEueCtxLndpZHRofHwwPnEueStxLmhlaWdodHx8KG4uSGYoKT8ocT1uLnRyYW5zZm9ybSxRYShrLnNldChhKSxxKSxRYShsLnNldChiKSxxKSk6KGsuc2V0KGEpLGwuc2V0KGIpKSxuIGluc3RhbmNlb2YgeT8hbi5QbShrLGwsYyxkLGYsZyk6IW4uQ0UoayxsLGYpKXx8KG51bGwhPT1jJiYobj1jKG4pKSxuJiYobnVsbD09PWR8fGQobikpJiZnLmFkZChuKSl9dC5CKGspO3QuQihsKX1yZXR1cm4gZj9wOmh9cmV0dXJuITF9Ow0KZnVuY3Rpb24gSmwoYSl7dmFyIGI9YS5HO2lmKHZvaWQgMD09PWJ8fGI9PT14YiliPW51bGw7bnVsbD09PWImJmEgaW5zdGFuY2VvZiBXJiYoYT1hLk9hLG51bGwhPT1hJiYoYj1hLkcpKTtudWxsPT09YiYmKGI9RWIpO3JldHVybiBifWZ1bmN0aW9uIEtsKGEpe3ZhciBiPWEuSDtpZih2b2lkIDA9PT1ifHxiPT09eGIpYj1udWxsO251bGw9PT1iJiZhIGluc3RhbmNlb2YgVyYmKGE9YS5PYSxudWxsIT09YSYmKGI9YS5IKSk7bnVsbD09PWImJihiPVBiKTtyZXR1cm4gYn15LnByb3RvdHlwZS5hZGQ9eS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEpe3QubChhLFEseSwiYWRkOmVsZW1lbnQiKTt0aGlzLkpkKHRoaXMueGEuY291bnQsYSl9O3kucHJvdG90eXBlLmVsdD15LnByb3RvdHlwZS53YT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy54YS53YShhKX07DQp5LnByb3RvdHlwZS5pbnNlcnRBdD15LnByb3RvdHlwZS5KZD1mdW5jdGlvbihhLGIpe2IgaW5zdGFuY2VvZiBFJiZ0Lm0oIkNhbm5vdCBhZGQgYSBQYXJ0IHRvIGEgUGFuZWw6ICIrYik7aWYodGhpcz09PWJ8fHRoaXMuZWooYikpdGhpcz09PWImJnQubSgiQ2Fubm90IG1ha2UgYSBQYW5lbCBjb250YWluIGl0c2VsZjogIit0aGlzLnRvU3RyaW5nKCkpLHQubSgiQ2Fubm90IG1ha2UgYSBQYW5lbCBpbmRpcmVjdGx5IGNvbnRhaW4gaXRzZWxmOiAiK3RoaXMudG9TdHJpbmcoKSsiIGFscmVhZHkgY29udGFpbnMgIitiLnRvU3RyaW5nKCkpO3ZhciBjPWIuaWE7bnVsbCE9PWMmJmMhPT10aGlzJiZ0Lm0oIkNhbm5vdCBhZGQgYSBHcmFwaE9iamVjdCB0aGF0IGFscmVhZHkgYmVsb25ncyB0byBhbm90aGVyIFBhbmVsIHRvIHRoaXMgUGFuZWw6ICIrYi50b1N0cmluZygpKyIsIGFscmVhZHkgY29udGFpbmVkIGJ5ICIrYy50b1N0cmluZygpKyIsIGNhbm5vdCBiZSBzaGFyZWQgYnkgdGhpcyBQYW5lbDogIisNCnRoaXMudG9TdHJpbmcoKSk7dGhpcy5kYSE9PXdpfHxiIGluc3RhbmNlb2YgV3x8dC5tKCJDYW4gb25seSBhZGQgU2hhcGVzIHRvIGEgR3JpZCBQYW5lbCwgbm90OiAiK2IpO2Iud2wodGhpcyk7Yi5sbT1udWxsO2lmKG51bGwhPT10aGlzLnpBKXt2YXIgZD1iLmRhdGE7bnVsbCE9PWQmJiJvYmplY3QiPT09dHlwZW9mIGQmJihudWxsPT09dGhpcy5nZyYmKHRoaXMuZ2c9bmV3IGphKE9iamVjdCx5KSksdGhpcy5nZy5hZGQoZCxiKSl9dmFyIGY9dGhpcy54YSxkPS0xO2lmKGM9PT10aGlzKXtmb3IodmFyIGc9LTEsaD1mLmNvdW50LGs9MDtrPGg7aysrKWlmKGYubltrXT09PWIpe2c9azticmVha31pZigtMSE9PWcpe2lmKGc9PT1hfHxnKzE+PWYuY291bnQmJmE+PWYuY291bnQpcmV0dXJuO2YucWQoZyk7ZD1nfWVsc2UgdC5tKCJlbGVtZW50ICIrYi50b1N0cmluZygpKyIgaGFzIHBhbmVsICIrYy50b1N0cmluZygpKyIgYnV0IGlzIG5vdCBjb250YWluZWQgYnkgaXQuIil9aWYoMD5hfHwNCmE+Zi5jb3VudClhPWYuY291bnQ7Zi5KZChhLGIpO3RoaXMuZmEoKTtiLmZhKCk7bnVsbCE9PWIuTmQ/dGhpcy5GaD0hMDpiIGluc3RhbmNlb2YgeSYmITA9PT1iLkZoJiYodGhpcy5GaD0hMCk7Yz10aGlzLlM7bnVsbCE9PWMmJihjLkdqPW51bGwsYy5Eaj1OYU4sdGhpcy5GaCYmYyBpbnN0YW5jZW9mIFMmJihjLkZoPSEwKSxjLkZoJiYoYy5SZD1udWxsKSxmPXRoaXMuaCxudWxsIT09ZiYmZi5qYS5zYnx8KC0xIT09ZCYmYy5JYyh4ZCwiZWxlbWVudHMiLHRoaXMsYixudWxsLGQsbnVsbCksYy5JYyh3ZCwiZWxlbWVudHMiLHRoaXMsbnVsbCxiLG51bGwsYSkpKX07eS5wcm90b3R5cGUucmVtb3ZlPXkucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXt0LmwoYSxRLHksInJlbW92ZTplbGVtZW50Iik7Zm9yKHZhciBiPXRoaXMueGEsYz1iLmNvdW50LGQ9LTEsZj0wO2Y8YztmKyspaWYoYi5uW2ZdPT09YSl7ZD1mO2JyZWFrfS0xIT09ZCYmdGhpcy5YZShkKX07DQp5LnByb3RvdHlwZS5yZW1vdmVBdD15LnByb3RvdHlwZS5xZD1mdW5jdGlvbihhKXtlJiZ0LnEoYSx5LCJyZW1vdmVBdDppZHgiKTswPD1hJiZ0aGlzLlhlKGEpfTt5LnByb3RvdHlwZS5YZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnhhLGM9Yi53YShhKTtjLmxtPW51bGw7Yy53bChudWxsKTtpZihudWxsIT09dGhpcy5nZyl7dmFyIGQ9Yy5kYXRhOyJvYmplY3QiPT09dHlwZW9mIGQmJnRoaXMuZ2cucmVtb3ZlKGQpfWIucWQoYSk7bGsodGhpcywhMSk7dGhpcy5mYSgpO2I9dGhpcy5TO251bGwhPT1iJiYoYi5Haj1udWxsLGIuRGo9TmFOLGQ9dGhpcy5oLG51bGwhPT1kJiZkLmphLnNifHxiLkljKHhkLCJlbGVtZW50cyIsdGhpcyxjLG51bGwsYSxudWxsKSl9O3QuQSh5LHtweDoicm93Q291bnQifSxmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLmtkPzA6dGhpcy5rZC5sZW5ndGh9KTsNCnkucHJvdG90eXBlLmdldFJvd0RlZmluaXRpb249eS5wcm90b3R5cGUuSGQ9ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09dGhpcy5rZClyZXR1cm4gbnVsbDtlJiZ0LnEoYSx5LCJnZXRSb3dEZWZpbml0aW9uOmlkeCIpOzA+YSYmdC5sYShhLCI+PSAwIix5LCJnZXRSb3dEZWZpbml0aW9uOmlkeCIpO2E9TWF0aC5yb3VuZChhKTt2YXIgYj10aGlzLmtkO2lmKHZvaWQgMD09PWJbYV0pe3ZhciBjPW5ldyBBZTtjLndsKHRoaXMpO2MuVmw9ITA7Yy5WYz1hO2JbYV09Y31yZXR1cm4gYlthXX07DQp5LnByb3RvdHlwZS5yZW1vdmVSb3dEZWZpbml0aW9uPXkucHJvdG90eXBlLlJGPWZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PXRoaXMua2Qpe2UmJnQucShhLHksInJlbW92ZVJvd0RlZmluaXRpb246aWR4Iik7MD5hJiZ0LmxhKGEsIj49IDAiLHksInJlbW92ZVJvd0RlZmluaXRpb246aWR4Iik7YT1NYXRoLnJvdW5kKGEpO3ZhciBiPXRoaXMua2Q7dGhpcy5JYyh4ZCwiY29sZGVmcyIsdGhpcyxiW2FdLG51bGwsYSxudWxsKTtiW2FdJiYoYlthXT12b2lkIDApO3RoaXMuZmEoKX19O3QuQSh5LHttdzoiY29sdW1uQ291bnQifSxmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLmRkPzA6dGhpcy5kZC5sZW5ndGh9KTsNCnkucHJvdG90eXBlLmdldENvbHVtbkRlZmluaXRpb249eS5wcm90b3R5cGUuR2Q9ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09dGhpcy5kZClyZXR1cm4gbnVsbDtlJiZ0LnEoYSx5LCJnZXRDb2x1bW5EZWZpbml0aW9uOmlkeCIpOzA+YSYmdC5sYShhLCI+PSAwIix5LCJnZXRDb2x1bW5EZWZpbml0aW9uOmlkeCIpO2E9TWF0aC5yb3VuZChhKTt2YXIgYj10aGlzLmRkO2lmKHZvaWQgMD09PWJbYV0pe3ZhciBjPW5ldyBBZTtjLndsKHRoaXMpO2MuVmw9ITE7Yy5WYz1hO2JbYV09Y31yZXR1cm4gYlthXX07DQp5LnByb3RvdHlwZS5yZW1vdmVDb2x1bW5EZWZpbml0aW9uPXkucHJvdG90eXBlLk9GPWZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PXRoaXMuZGQpe2UmJnQucShhLHksInJlbW92ZUNvbHVtbkRlZmluaXRpb246aWR4Iik7MD5hJiZ0LmxhKGEsIj49IDAiLHksInJlbW92ZUNvbHVtbkRlZmluaXRpb246aWR4Iik7YT1NYXRoLnJvdW5kKGEpO3ZhciBiPXRoaXMuZGQ7dGhpcy5JYyh4ZCwiY29sZGVmcyIsdGhpcyxiW2FdLG51bGwsYSxudWxsKTtiW2FdJiYoYlthXT12b2lkIDApO3RoaXMuZmEoKX19O3QuZyh5LCJyb3dTaXppbmciLHkucHJvdG90eXBlLmVHKTsNCnQuZGVmaW5lUHJvcGVydHkoeSx7ZUc6InJvd1NpemluZyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMucW0/RWw6dGhpcy5xbX0sZnVuY3Rpb24oYSl7aWYodm9pZCAwIT09dGhpcy5xbSl7dmFyIGI9dGhpcy5xbTtiIT09YSYmKGEhPT1FbCYmYSE9PU9sJiZ0Lm0oInJvd1NpemluZyBtdXN0IGJlIFJvd0NvbHVtbkRlZmluaXRpb24uUHJvcG9ydGlvbmFsRXh0cmEgb3IgUm93Q29sdW1uRGVmaW5pdGlvbi5Ob25lIiksdGhpcy5xbT1hLHRoaXMuZmEoKSx0aGlzLmooInJvd1NpemluZyIsYixhKSl9fSk7dC5nKHksImNvbHVtblNpemluZyIseS5wcm90b3R5cGUuJEQpOw0KdC5kZWZpbmVQcm9wZXJ0eSh5LHskRDoiY29sdW1uU2l6aW5nIn0sZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5KbD9FbDp0aGlzLkpsfSxmdW5jdGlvbihhKXtpZih2b2lkIDAhPT10aGlzLkpsKXt2YXIgYj10aGlzLkpsO2IhPT1hJiYoYSE9PUVsJiZhIT09T2wmJnQubSgiY29sdW1uU2l6aW5nIG11c3QgYmUgUm93Q29sdW1uRGVmaW5pdGlvbi5Qcm9wb3J0aW9uYWxFeHRyYSBvciBSb3dDb2x1bW5EZWZpbml0aW9uLk5vbmUiKSx0aGlzLkpsPWEsdGhpcy5mYSgpLHRoaXMuaigiY29sdW1uU2l6aW5nIixiLGEpKX19KTt0LmcoeSwidG9wSW5kZXgiLHkucHJvdG90eXBlLmRLKTsNCnQuZGVmaW5lUHJvcGVydHkoeSx7ZEs6InRvcEluZGV4In0sZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5QaT8wOnRoaXMuUGl9LGZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PXRoaXMuUGkpe3ZhciBiPXRoaXMuUGk7YiE9PWEmJigoIWlzRmluaXRlKGEpfHwwPmEpJiZ0Lm0oInRvcEluZGV4IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGEgcmVhbCBudW1iZXIuIFdhcyAiK2EpLHRoaXMuUGk9YSx0aGlzLmZhKCksdGhpcy5qKCJ0b3BJbmRleCIsYixhKSl9fSk7dC5nKHksImxlZnRJbmRleCIseS5wcm90b3R5cGUuakopOw0KdC5kZWZpbmVQcm9wZXJ0eSh5LHtqSjoibGVmdEluZGV4In0sZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy56aT8wOnRoaXMueml9LGZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PXRoaXMuemkpe3ZhciBiPXRoaXMuemk7YiE9PWEmJigoIWlzRmluaXRlKGEpfHwwPmEpJiZ0Lm0oImxlZnRJbmRleCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBhIHJlYWwgbnVtYmVyLiBXYXMgIithKSx0aGlzLnppPWEsdGhpcy5mYSgpLHRoaXMuaigibGVmdEluZGV4IixiLGEpKX19KTt5LnByb3RvdHlwZS5maW5kUm93Rm9yTG9jYWxZPWZ1bmN0aW9uKGEpe2lmKDA+YSlyZXR1cm4tMTtpZih0aGlzLnR5cGUhPT1IaylyZXR1cm4gTmFOO2Zvcih2YXIgYj0wLGM9dGhpcy5rZCxkPWMubGVuZ3RoLGY9dGhpcy5QaTtmPGQ7ZisrKXt2YXIgZz1jW2ZdO2lmKHZvaWQgMCE9PWcmJihiKz1nLnRvdGFsLGE8YikpcmV0dXJuIGZ9cmV0dXJuLTF9Ow0KeS5wcm90b3R5cGUuZmluZENvbHVtbkZvckxvY2FsWD1mdW5jdGlvbihhKXtpZigwPmEpcmV0dXJuLTE7aWYodGhpcy50eXBlIT09SGspcmV0dXJuIE5hTjtmb3IodmFyIGI9MCxjPXRoaXMuZGQsZD1jLmxlbmd0aCxmPXRoaXMuemk7ZjxkO2YrKyl7dmFyIGc9Y1tmXTtpZih2b2lkIDAhPT1nJiYoYis9Zy50b3RhbCxhPGIpKXJldHVybiBmfXJldHVybi0xfTt0LmcoeSwiZGF0YSIseS5wcm90b3R5cGUuZGF0YSk7DQp0LmRlZmluZVByb3BlcnR5KHkse2RhdGE6ImRhdGEifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk1sfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLk1sO2lmKGIhPT1hKXt2YXIgYz10aGlzIGluc3RhbmNlb2YgRSYmISh0aGlzIGluc3RhbmNlb2YgSmUpO2MmJnQuaShhLCJvYmplY3QiLHksImRhdGEiKTtMZSh0aGlzKTt0aGlzLk1sPWE7dmFyIGQ9dGhpcy5oO251bGwhPT1kJiYoYz90aGlzIGluc3RhbmNlb2YgVj8obnVsbCE9PWImJmQuemsucmVtb3ZlKGIpLG51bGwhPT1hJiZkLnprLmFkZChhLHRoaXMpKToobnVsbCE9PWImJmQucmkucmVtb3ZlKGIpLG51bGwhPT1hJiZkLnJpLmFkZChhLHRoaXMpKTooYz10aGlzLmlhLG51bGwhPT1jJiZudWxsIT09Yy5nZyYmKG51bGwhPT1iJiZjLmdnLnJlbW92ZShiKSxudWxsIT09YSYmYy5nZy5hZGQoYSx0aGlzKSkpKTt0aGlzLmooImRhdGEiLGIsYSk7bnVsbCE9PWQmJmQuamEuc2J8fG51bGwhPT1hJiZ0aGlzLlFiKCl9fSk7DQp0LmcoeSwiaXRlbUluZGV4Iix5LnByb3RvdHlwZS5pRik7dC5kZWZpbmVQcm9wZXJ0eSh5LHtpRjoiaXRlbUluZGV4In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ocn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5ocjtiIT09YSYmKHRoaXMuaHI9YSx0aGlzLmooIml0ZW1JbmRleCIsYixhKSl9KTtmdW5jdGlvbiBRayhhKXthPWEuSGw7cmV0dXJuIG51bGwhPT1hJiZhLm9ifQ0KZnVuY3Rpb24gTGUoYSl7dmFyIGI9YS5IbDtpZihudWxsPT09YiludWxsIT09YS5kYXRhJiZ0Lm0oIlRlbXBsYXRlIGNhbm5vdCBoYXZlIC5kYXRhIGJlIG5vbi1udWxsOiAiK2EpLGEuSGw9Yj1uZXcgQihEZSk7ZWxzZSBpZihiLm9iKXJldHVybjt2YXIgYz1uZXcgQihRKTtSbChhLGEsZnVuY3Rpb24oYSxkKXt2YXIgZj1kLktjO2lmKG51bGwhPT1mKXtLayhkLCExKTtmb3IodmFyIGc9Zi5rO2cubmV4dCgpOyl7Zj1nLnZhbHVlO2YubW9kZT09PUZlJiZLayhkLCEwKTt2YXIgaD1mLlN0O2lmKG51bGwhPT1oKXt2YXIgcT1hOyIiIT09aCYmKHE9YS5vZShoKSk7bnVsbCE9PXEmJihjLmFkZChxKSx2b2lkIDA9PT1xLnJzJiYocS5ycz1uZXcgQihEZSkpLHEucnMuYWRkKGYpKX1iLmFkZChmKX19aWYoZCBpbnN0YW5jZW9mIHkmJmQudHlwZT09PUhrKXtpZigwPGQua2QubGVuZ3RoKWZvcihnPWQua2QsaD1nLmxlbmd0aCxxPTA7cTxoO3ErKyl7dmFyIHI9Z1txXTtpZih2b2lkIDAhPT1yJiYNCm51bGwhPT1yLktjKWZvcih2YXIgcz1yLktjLms7cy5uZXh0KCk7KWY9cy52YWx1ZSxmLnBnPXIsZi55ej0yLGYuUHY9ci5pbmRleCxiLmFkZChmKX1pZigwPGQuZGQubGVuZ3RoKWZvcihnPWQuZGQsaD1nLmxlbmd0aCxxPTA7cTxoO3ErKylpZihyPWdbcV0sdm9pZCAwIT09ciYmbnVsbCE9PXIuS2MpZm9yKHM9ci5LYy5rO3MubmV4dCgpOylmPXMudmFsdWUsZi5wZz1yLGYueXo9MSxmLlB2PXIuaW5kZXgsYi5hZGQoZil9fSk7Zm9yKHZhciBkPWMuaztkLm5leHQoKTspe3ZhciBmPWQudmFsdWU7aWYodm9pZCAwIT09Zi5ycyl7S2soZiwhMCk7Zm9yKHZhciBnPWYucnMuaztnLm5leHQoKTspe3ZhciBoPWcudmFsdWU7bnVsbD09PWYuS2MmJihmLktjPW5ldyBCKERlKSk7Zi5LYy5hZGQoaCl9fWRlbGV0ZSBmLnJzfWZvcihkPWIuaztkLm5leHQoKTspZj1kLnZhbHVlLGc9Zi5wZyxudWxsIT09ZyYmKGYucGc9bnVsbCxnPT09YT9mLm5uPSIiOihnIGluc3RhbmNlb2YgQWUmJihnPWcuaWEpLA0KZi5ubj0iIiE9PWcubmFtZT9nLm5hbWU6Zy5uYW1lPSJfIit0Lm9kKGcpKSk7Yi5mcmVlemUoKTthIGluc3RhbmNlb2YgRSYmYS5MZCgpJiYoaGgoYSxJbmZpbml0eSxJbmZpbml0eSksYS5MYygpKX0NCnkucHJvdG90eXBlLnVwZGF0ZVRhcmdldEJpbmRpbmdzPXkucHJvdG90eXBlLlFiPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuSGw7aWYobnVsbCE9PWIpZm9yKHZvaWQgMD09PWEmJihhPSIiKSxiPWIuaztiLm5leHQoKTspe3ZhciBjPWIudmFsdWUsZD1jLmdCO2lmKCIiPT09YXx8IiI9PT1kfHxkPT09YSlpZihkPWMuVXQsbnVsbCE9PWMuZEV8fCIiIT09ZCl7dmFyIGQ9dGhpcy5kYXRhLGY9Yy5TdDtudWxsIT09ZiYmKGQ9dGhpcy5vZShmKSk7aWYobnVsbD09PWQpZSYmdC50cmFjZSgiQmluZGluZyBlcnJvcjogbWlzc2luZyBHcmFwaE9iamVjdCBuYW1lZCAiK2YrIiBpbiAiK3RoaXMudG9TdHJpbmcoKSk7ZWxzZXt2YXIgZj10aGlzLGc9Yy5ubjtpZigiIiE9PWcpe2lmKGY9dGhpcy5vZShnKSxudWxsPT09Ziljb250aW51ZX1lbHNlIG51bGwhPT1jLnBnJiYoZj1jLnBnKTtnPWMueXo7aWYoMCE9PWcpe2lmKCEoZiBpbnN0YW5jZW9mIHkpKWNvbnRpbnVlOzE9PT1nP2Y9Zi5HZChjLlB2KToNCjI9PT1nJiYoZj1mLkhkKGMuUHYpKX12b2lkIDAhPT1mJiZjLlFHKGYsZCl9fX19O3QuZyh5LCJpdGVtQXJyYXkiLHkucHJvdG90eXBlLnpBKTt0LmRlZmluZVByb3BlcnR5KHkse3pBOiJpdGVtQXJyYXkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnlpfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnlpO2lmKGIhPT1hKXtlJiZudWxsIT09YSYmIXQuaXNBcnJheShhKSYmdC5tKCJQYW5lbC5pdGVtQXJyYXkgbXVzdCBiZSBhbiBBcnJheS1saWtlIG9iamVjdCBvciBudWxsLCBub3Q6ICIrYSk7dmFyIGM9dGhpcy5oO251bGwhPT1jJiZudWxsIT09YiYmZGooYyx0aGlzKTt0aGlzLnlpPWE7bnVsbCE9PWMmJm51bGwhPT1hJiZhaihjLHRoaXMpO3RoaXMuaigiaXRlbUFycmF5IixiLGEpO251bGwhPT1jJiZjLmphLnNifHx0aGlzLlNBKCl9fSk7ZnVuY3Rpb24gVmwoYSl7cmV0dXJuIGEudHlwZT09PVNnfHxhLnR5cGU9PT1jaXx8YS50eXBlPT09dmd9DQp5LnByb3RvdHlwZS5yZWJ1aWxkSXRlbUVsZW1lbnRzPXkucHJvdG90eXBlLlNBPWZ1bmN0aW9uKCl7dmFyIGE9MDtmb3IoVmwodGhpcykmJihhPTEpO3RoaXMueGEubGVuZ3RoPmE7KXRoaXMuWGUoYSk7YT10aGlzLnpBO2lmKG51bGwhPT1hKWZvcih2YXIgYj10LnZiKGEpLGM9MDtjPGI7YysrKXJqKHRoaXMsdC5tYihhLGMpLGMpfTtmdW5jdGlvbiByaihhLGIsYyl7aWYodm9pZCAwIT09YiYmbnVsbCE9PWIpe3ZhciBkPWEuZ2V0Q2F0ZWdvcnlGb3JJdGVtRGF0YShiLGMpLGQ9YS5maW5kVGVtcGxhdGVGb3JJdGVtRGF0YShiLGMsZCk7ZCBpbnN0YW5jZW9mIHkmJihMZShkKSxkPWQuY29weSgpLCJvYmplY3QiPT09dHlwZW9mIGImJihudWxsPT09YS5nZyYmKGEuZ2c9bmV3IGphKE9iamVjdCx5KSksYS5nZy5hZGQoYixkKSksYS50eXBlIT09U2cmJmEudHlwZSE9PWNpfHxjKyssYS5KZChjLGQpLFlsKGQsYyksc2ooYSxjKSxkLmRhdGE9Yil9fQ0KZnVuY3Rpb24gc2ooYSxiKXtmb3IodmFyIGM9YS54YSxkPWIrMTtkPGMubGVuZ3RoOyl7dmFyIGY9Yy53YShkKTtmIGluc3RhbmNlb2YgeSYmWWwoZixkKTtkKyt9fWZ1bmN0aW9uIFlsKGEsYil7YS50eXBlPT09dGs/YS5xYz1iOmEudHlwZT09PXVrJiYoYS5jb2x1bW49Yik7YS5pRj1ifXQuZyh5LCJpdGVtVGVtcGxhdGUiLHkucHJvdG90eXBlLmVKKTsNCnQuZGVmaW5lUHJvcGVydHkoeSx7ZUo6Iml0ZW1UZW1wbGF0ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLmhnP251bGw6dGhpcy5oZy56YSgiIil9LGZ1bmN0aW9uKGEpe2lmKG51bGw9PT10aGlzLmhnKXtpZihudWxsPT09YSlyZXR1cm47dGhpcy5oZz1uZXcgamEoInN0cmluZyIseSl9dmFyIGI9dGhpcy5oZy56YSgiIik7YiE9PWEmJih0LmwoYSx5LHksIml0ZW1UZW1wbGF0ZSIpLGEgaW5zdGFuY2VvZiBFJiZ0Lm0oIml0ZW1UZW1wbGF0ZSBtdXN0IG5vdCBiZSBhIFBhcnQ6ICIrYSksdGhpcy5oZy5hZGQoIiIsYSksdGhpcy5qKCJpdGVtVGVtcGxhdGUiLGIsYSksYT10aGlzLmgsbnVsbCE9PWEmJmEuamEuc2J8fHRoaXMuU0EoKSl9KTt0LmcoeSwiaXRlbVRlbXBsYXRlTWFwIix5LnByb3RvdHlwZS5qRik7DQp0LmRlZmluZVByb3BlcnR5KHkse2pGOiJpdGVtVGVtcGxhdGVNYXAifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmhnfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmhnO2lmKGIhPT1hKXt0LmwoYSxqYSx5LCJpdGVtVGVtcGxhdGVNYXAiKTtmb3IodmFyIGM9YS5rO2MubmV4dCgpOyl7dmFyIGQ9Yy52YWx1ZTtkIGluc3RhbmNlb2YgRSYmdC5tKCJUZW1wbGF0ZSBpbiBpdGVtVGVtcGxhdGVNYXAgbXVzdCBub3QgYmUgYSBQYXJ0OiAiK2QpfXRoaXMuaGc9YTt0aGlzLmooIml0ZW1UZW1wbGF0ZU1hcCIsYixhKTthPXRoaXMuaDtudWxsIT09YSYmYS5qYS5zYnx8dGhpcy5TQSgpfX0pO3QuZyh5LCJpdGVtQ2F0ZWdvcnlQcm9wZXJ0eSIseS5wcm90b3R5cGUuZEopOw0KdC5kZWZpbmVQcm9wZXJ0eSh5LHtkSjoiaXRlbUNhdGVnb3J5UHJvcGVydHkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmVvfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmVvO2IhPT1hJiYoInN0cmluZyIhPT10eXBlb2YgYSYmImZ1bmN0aW9uIiE9PXR5cGVvZiBhJiZ0LmJjKGEsInN0cmluZyBvciBmdW5jdGlvbiIseSwiaXRlbUNhdGVnb3J5UHJvcGVydHkiKSx0aGlzLmVvPWEsdGhpcy5qKCJpdGVtQ2F0ZWdvcnlQcm9wZXJ0eSIsYixhKSl9KTsNCnkucHJvdG90eXBlLmdldENhdGVnb3J5Rm9ySXRlbURhdGE9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuIiI7dmFyIGI9dGhpcy5lbztpZigiZnVuY3Rpb24iPT09dHlwZW9mIGIpYj1iKGEpO2Vsc2UgaWYoInN0cmluZyI9PT10eXBlb2YgYiYmIm9iamVjdCI9PT10eXBlb2YgYSl7aWYoIiI9PT1iKXJldHVybiIiO2I9dC5oYihhLGIpfWVsc2UgcmV0dXJuIiI7aWYodm9pZCAwPT09YilyZXR1cm4iIjtpZigic3RyaW5nIj09PXR5cGVvZiBiKXJldHVybiBiO3QubSgiUGFuZWwuZ2V0Q2F0ZWdvcnlGb3JJdGVtRGF0YSBmb3VuZCBhIG5vbi1zdHJpbmcgY2F0ZWdvcnkgZm9yICIrYSsiOiAiK2IpO3JldHVybiIifTsNCnkucHJvdG90eXBlLmZpbmRUZW1wbGF0ZUZvckl0ZW1EYXRhPWZ1bmN0aW9uKGEsYixjKXthPXRoaXMuakY7Yj1udWxsO251bGwhPT1hJiYoYj1hLnphKGMpKTtudWxsPT09YiYmKHQuVkd8fCh0LlZHPSEwLHQudHJhY2UoJ05vIGl0ZW0gdGVtcGxhdGUgUGFuZWwgZm91bmQgZm9yIGNhdGVnb3J5ICInK2MrJyIgb24gJyt0aGlzKSx0LnRyYWNlKCIgIFVzaW5nIGRlZmF1bHQgaXRlbSB0ZW1wbGF0ZS4iKSxjPW5ldyB5LGE9bmV3IG5hLGEuYmluZChuZXcgRGUoInRleHQiLCIiLHlkKSksYy5hZGQoYSksdC5vRT1jKSxiPXQub0UpO3JldHVybiBiIGluc3RhbmNlb2YgeT9iOm51bGx9O3QuZyh5LCJpc0F0b21pYyIseS5wcm90b3R5cGUuV0kpOw0KdC5kZWZpbmVQcm9wZXJ0eSh5LHtXSToiaXNBdG9taWMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlZnfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlZnO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLHksImlzQXRvbWljIiksdGhpcy5WZz1hLHRoaXMuaigiaXNBdG9taWMiLGIsYSkpfSk7ZnVuY3Rpb24gQWUoKXt0LkFjKHRoaXMpO3RoaXMuSWk9bnVsbDt0aGlzLlZsPSEwO3RoaXMuVmM9MDt0aGlzLk1mPU5hTjt0aGlzLmZtPTA7dGhpcy5lbT1JbmZpbml0eTt0aGlzLnVlPXhiO3RoaXMuTWE9dGhpcy5LYj0wO3RoaXMuS2M9bnVsbDt0aGlzLm9zPVpsO3RoaXMuUGg9Vmc7dGhpcy5scz10aGlzLk5qPW51bGw7dGhpcy5tcz1OYU47dGhpcy5MYj10aGlzLkxoPW51bGw7dGhpcy56cT0hMX10LmdhKCJSb3dDb2x1bW5EZWZpbml0aW9uIixBZSk7DQpBZS5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyBBZTthLlZsPXRoaXMuVmw7YS5WYz10aGlzLlZjO2EuTWY9dGhpcy5NZjthLmZtPXRoaXMuZm07YS5lbT10aGlzLmVtO2EudWU9dGhpcy51ZTthLktiPXRoaXMuS2I7YS5NYT10aGlzLk1hO2EuUGg9dGhpcy5QaDthLm9zPXRoaXMub3M7YS5Oaj1udWxsPT09dGhpcy5Oaj9udWxsOnRoaXMuTmouWigpO2EubHM9dGhpcy5sczthLm1zPXRoaXMubXM7YS5MaD1udWxsO3RoaXMuTGgmJihhLkxoPXRoaXMuTGguc2xpY2UoMCkpO2EuTGI9dGhpcy5MYjthLnpxPXRoaXMuenE7YS5LYz10aGlzLktjO3JldHVybiBhfTsNCmZ1bmN0aW9uIGdqKGEsYil7dC5sKGIsQWUsQWUsImNvcHlGcm9tOnBkIik7Yi54Zj9hLmhlaWdodD1iLmhlaWdodDphLndpZHRoPWIud2lkdGg7YS5laT1iLmVpO2EuemY9Yi56ZjthLmFsaWdubWVudD1iLmFsaWdubWVudDthLlF0PWIuUXQ7YS5Oaj1udWxsPT09Yi5Oaj9udWxsOmIuTmouWigpO2EuaG49Yi5objthLmpuPWIuam47YS5MaD1udWxsO2IuTGgmJihhLkxoPWIuTGguc2xpY2UoMCkpO2EuYmFja2dyb3VuZD1iLmJhY2tncm91bmQ7YS50dz1iLnR3O2EuS2M9Yi5LY31BZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm93Q29sdW1uRGVmaW5pdGlvbiAiKyh0aGlzLnhmPyIoUm93ICI6IihDb2x1bW4gIikrdGhpcy5pbmRleCsiKSAjIit0Lm9kKHRoaXMpfTt2YXIgWmw7QWUuRGVmYXVsdD1abD10LncoQWUsIkRlZmF1bHQiLDApO3ZhciBPbDtBZS5Ob25lPU9sPXQudyhBZSwiTm9uZSIsMSk7dmFyIEVsOw0KQWUuUHJvcG9ydGlvbmFsRXh0cmE9RWw9dC53KEFlLCJQcm9wb3J0aW9uYWxFeHRyYSIsMik7QWUucHJvdG90eXBlLndsPWZ1bmN0aW9uKGEpe3RoaXMuSWk9YX07ZnVuY3Rpb24gTWwoYSxiKXthLktiPWlzTmFOKGEuTWYpP01hdGgubWF4KE1hdGgubWluKGEuZW0sYiksYS5mbSk6TWF0aC5tYXgoTWF0aC5taW4oYS5lbSxhLk1mKSxhLmZtKX1mdW5jdGlvbiBRbChhKXt2YXIgYj1hLklpLGM9YS5objtudWxsPT09YyYmKGM9YS54Zj9iLnNpOmIudmgpO3ZhciBkPWEuam47aXNOYU4oZCkmJihkPWEueGY/Yi54aDpiLndoKTtkPW51bGwhPT1jP2Q6MDswPT09YS5pbmRleCYmKGQ9MCk7Yz1hLmFCO251bGw9PT1jJiYoYz1iLnRqKTtyZXR1cm4gZCsoYS54Zj9jLnRvcDpjLmxlZnQpfQ0KZnVuY3Rpb24gSWwoYSl7dmFyIGI9YS5JaSxjPWEuaG47bnVsbD09PWMmJihjPWEueGY/Yi5zaTpiLnZoKTt2YXIgZD1hLmpuO2lzTmFOKGQpJiYoZD1hLnhmP2IueGg6Yi53aCk7ZD1udWxsIT09Yz9kOjA7MD09PWEuaW5kZXgmJihkPTApO2M9YS5hQjtudWxsPT09YyYmKGM9Yi50aik7cmV0dXJuIGQrKGEueGY/Yy50b3ArYy5ib3R0b206Yy5sZWZ0K2MucmlnaHQpfQ0KQWUucHJvdG90eXBlLlhjPWZ1bmN0aW9uKGEsYixjLGQsZil7dmFyIGc9dGhpcy5JaTtpZihudWxsIT09Zyl7Zy5mYSgpO2Zvcih2YXIgaD10aGlzLnhmLGs9Zy54YSxsPWsubGVuZ3RoLG09MDttPGw7bSsrKXt2YXIgbj1rLm5bbV07KGg/bi5xYzpuLmNvbHVtbik9PT10aGlzLmluZGV4JiZuLmZhKCl9Zy5JYyh2ZCxhLHRoaXMsYixjLGQsZik7aWYobnVsbCE9PXRoaXMuS2MmJihiPWcuZXAoKSxudWxsIT09YiYmKGI9Yi5kYXRhLG51bGwhPT1iKSkpZm9yKGM9dGhpcy5LYy5rO2MubmV4dCgpOyljLnZhbHVlLnBCKHRoaXMsYixhLG51bGwpfX07dC5BKEFlLHtpYToicGFuZWwifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLklpfSk7dC5BKEFlLHt4ZjoiaXNSb3cifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlZsfSk7dC5BKEFlLHtpbmRleDoiaW5kZXgifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlZjfSk7dC5nKEFlLCJoZWlnaHQiLEFlLnByb3RvdHlwZS5oZWlnaHQpOw0KdC5kZWZpbmVQcm9wZXJ0eShBZSx7aGVpZ2h0OiJoZWlnaHQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk1mfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLk1mO2IhPT1hJiYoZSYmdC5pKGEsIm51bWJlciIsQWUsImhlaWdodCIpLDA+YSYmdC5sYShhLCI+PSAwIixBZSwiaGVpZ2h0IiksdGhpcy5NZj1hLE1sKHRoaXMsdGhpcy5LYiksdGhpcy5YYygiaGVpZ2h0IixiLGEpKX0pO3QuZyhBZSwid2lkdGgiLEFlLnByb3RvdHlwZS53aWR0aCk7dC5kZWZpbmVQcm9wZXJ0eShBZSx7d2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NZn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5NZjtiIT09YSYmKGUmJnQuaShhLCJudW1iZXIiLEFlLCJ3aWR0aCIpLDA+YSYmdC5sYShhLCI+PSAwIixBZSwid2lkdGgiKSx0aGlzLk1mPWEsTWwodGhpcyx0aGlzLktiKSx0aGlzLlhjKCJ3aWR0aCIsYixhKSl9KTt0LmcoQWUsIm1pbmltdW0iLEFlLnByb3RvdHlwZS5laSk7DQp0LmRlZmluZVByb3BlcnR5KEFlLHtlaToibWluaW11bSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm19LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZm07YiE9PWEmJihlJiZ0LmkoYSwibnVtYmVyIixBZSwibWluaW11bSIpLCgwPmF8fCFpc0Zpbml0ZShhKSkmJnQubGEoYSwiPj0gMCIsQWUsIm1pbmltdW0iKSx0aGlzLmZtPWEsTWwodGhpcyx0aGlzLktiKSx0aGlzLlhjKCJtaW5pbXVtIixiLGEpKX0pO3QuZyhBZSwibWF4aW11bSIsQWUucHJvdG90eXBlLnpmKTt0LmRlZmluZVByb3BlcnR5KEFlLHt6ZjoibWF4aW11bSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW19LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZW07YiE9PWEmJihlJiZ0LmkoYSwibnVtYmVyIixBZSwibWF4aW11bSIpLDA+YSYmdC5sYShhLCI+PSAwIixBZSwibWF4aW11bSIpLHRoaXMuZW09YSxNbCh0aGlzLHRoaXMuS2IpLHRoaXMuWGMoIm1heGltdW0iLGIsYSkpfSk7dC5nKEFlLCJhbGlnbm1lbnQiLEFlLnByb3RvdHlwZS5hbGlnbm1lbnQpOw0KdC5kZWZpbmVQcm9wZXJ0eShBZSx7YWxpZ25tZW50OiJhbGlnbm1lbnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVlfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnVlO2IuTShhKXx8KGUmJnQubChhLEksQWUsImFsaWdubWVudCIpLHRoaXMudWU9YS5aKCksdGhpcy5YYygiYWxpZ25tZW50IixiLGEpKX0pO3QuZyhBZSwic3RyZXRjaCIsQWUucHJvdG90eXBlLmdpKTt0LmRlZmluZVByb3BlcnR5KEFlLHtnaToic3RyZXRjaCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUGh9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuUGg7YiE9PWEmJihlJiZ0LkFhKGEsUSxBZSwic3RyZXRjaCIpLHRoaXMuUGg9YSx0aGlzLlhjKCJzdHJldGNoIixiLGEpKX0pO3QuZyhBZSwic2VwYXJhdG9yUGFkZGluZyIsQWUucHJvdG90eXBlLmFCKTsNCnQuZGVmaW5lUHJvcGVydHkoQWUse2FCOiJzZXBhcmF0b3JQYWRkaW5nIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Oan0sZnVuY3Rpb24oYSl7Im51bWJlciI9PT10eXBlb2YgYT9hPW5ldyBhYihhKTpudWxsIT09YSYmZSYmdC5sKGEsYWIsQWUsInNlcGFyYXRvclBhZGRpbmciKTt2YXIgYj10aGlzLk5qO251bGwhPT1hJiZudWxsIT09YiYmYi5NKGEpfHwobnVsbCE9PWEmJihhPWEuWigpKSx0aGlzLk5qPWEsdGhpcy5YYygic2VwYXJhdG9yUGFkZGluZyIsYixhKSl9KTt0LmcoQWUsInNlcGFyYXRvclN0cm9rZSIsQWUucHJvdG90eXBlLmhuKTsNCnQuZGVmaW5lUHJvcGVydHkoQWUse2huOiJzZXBhcmF0b3JTdHJva2UifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmxzfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxzO2IhPT1hJiYobnVsbD09PWF8fCJzdHJpbmciPT09dHlwZW9mIGF8fGEgaW5zdGFuY2VvZiBmYSkmJihhIGluc3RhbmNlb2YgZmEmJmEuZnJlZXplKCksdGhpcy5scz1hLHRoaXMuaWEmJnRoaXMuaWEua2EoKSx0aGlzLlhjKCJzZXBhcmF0b3JTdHJva2UiLGIsYSkpfSk7dC5nKEFlLCJzZXBhcmF0b3JTdHJva2VXaWR0aCIsQWUucHJvdG90eXBlLmpuKTt0LmRlZmluZVByb3BlcnR5KEFlLHtqbjoic2VwYXJhdG9yU3Ryb2tlV2lkdGgifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm1zfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLm1zO2IhPT1hJiYodGhpcy5tcz1hLHRoaXMuaWEmJnRoaXMuaWEua2EoKSx0aGlzLlhjKCJzZXBhcmF0b3JTdHJva2VXaWR0aCIsYixhKSl9KTsNCnQuZyhBZSwic2VwYXJhdG9yRGFzaEFycmF5IixBZS5wcm90b3R5cGUubEcpO3QuZGVmaW5lUHJvcGVydHkoQWUse2xHOiJzZXBhcmF0b3JEYXNoQXJyYXkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkxofSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkxoO2IhPT1hJiYoQXJyYXkuaXNBcnJheShhKXx8dC5iYyhhLCJBcnJheSIsQWUsInNlcGFyYXRvckRhc2hBcnJheTp2YWwiKSx0aGlzLkxoPWEsdGhpcy5pYSYmdGhpcy5pYS5rYSgpLHRoaXMuWGMoInNlcGFyYXRvckRhc2hBcnJheSIsYixhKSl9KTt0LmcoQWUsImJhY2tncm91bmQiLEFlLnByb3RvdHlwZS5iYWNrZ3JvdW5kKTsNCnQuZGVmaW5lUHJvcGVydHkoQWUse2JhY2tncm91bmQ6ImJhY2tncm91bmQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkxifSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkxiO2IhPT1hJiYobnVsbD09PWF8fCJzdHJpbmciPT09dHlwZW9mIGF8fGEgaW5zdGFuY2VvZiBmYSkmJihhIGluc3RhbmNlb2YgZmEmJmEuZnJlZXplKCksdGhpcy5MYj1hLHRoaXMuaWEmJnRoaXMuaWEua2EoKSx0aGlzLlhjKCJiYWNrZ3JvdW5kIixiLGEpKX0pO3QuZyhBZSwiY292ZXJzU2VwYXJhdG9ycyIsQWUucHJvdG90eXBlLnR3KTt0LmRlZmluZVByb3BlcnR5KEFlLHt0dzoiY292ZXJzU2VwYXJhdG9ycyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuenF9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuenE7YiE9PWEmJih0LmkoYSwiYm9vbGVhbiIsQWUsImNvdmVyc1NlcGFyYXRvcnMiKSx0aGlzLnpxPWEsdGhpcy5YYygiY292ZXJzU2VwYXJhdG9ycyIsYixhKSl9KTt0LmcoQWUsInNpemluZyIsQWUucHJvdG90eXBlLlF0KTsNCnQuZGVmaW5lUHJvcGVydHkoQWUse1F0OiJzaXppbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm9zfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLm9zO2IhPT1hJiYoZSYmdC5BYShhLEFlLEFlLCJzaXppbmciKSx0aGlzLm9zPWEsdGhpcy5YYygic2l6aW5nIixiLGEpKX0pO2Z1bmN0aW9uIE5sKGEpe2lmKGEuUXQ9PT1abCl7dmFyIGI9YS5JaTtyZXR1cm4gYS54Zj9iLmVHOmIuJER9cmV0dXJuIGEuUXR9dC5BKEFlLHtmYzoiYWN0dWFsIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LYn0pO3QuQShBZSx7dG90YWw6InRvdGFsIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LYitJbCh0aGlzKX0pO3QuQShBZSx7cG9zaXRpb246InBvc2l0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NYX0pOw0KQWUucHJvdG90eXBlLmJpbmQ9QWUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oYSl7YS5wZz10aGlzO3ZhciBiPXRoaXMuaWE7bnVsbCE9PWImJihiPWIuZXAoKSxudWxsIT09YiYmUWsoYikmJnQubSgiQ2Fubm90IGFkZCBhIEJpbmRpbmcgdG8gYSBSb3dDb2x1bW5EZWZpbml0aW9uIHRoYXQgaXMgYWxyZWFkeSBmcm96ZW46ICIrYSkpO251bGw9PT10aGlzLktjJiYodGhpcy5LYz1uZXcgQihEZSkpO3RoaXMuS2MuYWRkKGEpfTsNCmZ1bmN0aW9uIFcoKXtRLmNhbGwodGhpcyk7dGhpcy5PYT1udWxsO3RoaXMuUG49Ik5vbmUiO3RoaXMuYWg9ITE7dGhpcy5RcT1WZzt0aGlzLnhrPW51bGw7dGhpcy5HYj10aGlzLlVjPSJibGFjayI7dGhpcy5iaD0xO3RoaXMuQ289ImJ1dHQiO3RoaXMuRG89Im1pdGVyIjt0aGlzLndtPTEwO3RoaXMudm09bnVsbDt0aGlzLmxkPTA7dGhpcy5OaT10aGlzLk1pPXhiO3RoaXMuS3I9dGhpcy5Kcj0wO3RoaXMuVnE9ITE7dGhpcy5hcj0hMDt0aGlzLk1yPW51bGw7dGhpcy5Tbj10aGlzLkZvPSJOb25lIjt0aGlzLlVxPTF9dC5nYSgiU2hhcGUiLFcpO3QuS2EoVyxRKTsNClcucHJvdG90eXBlLmNsb25lUHJvdGVjdGVkPWZ1bmN0aW9uKGEpe1EucHJvdG90eXBlLmNsb25lUHJvdGVjdGVkLmNhbGwodGhpcyxhKTthLk9hPXRoaXMuT2E7YS5Qbj10aGlzLlBuO2EuYWg9dGhpcy5haDthLlFxPXRoaXMuUXE7YS54az10aGlzLnhrO2EuVWM9dGhpcy5VYzthLkdiPXRoaXMuR2I7YS5iaD10aGlzLmJoO2EuQ289dGhpcy5DbzthLkRvPXRoaXMuRG87YS53bT10aGlzLndtO2Eudm09bnVsbDt0aGlzLnZtJiYoYS52bT10aGlzLnZtLnNsaWNlKDApKTthLmxkPXRoaXMubGQ7YS5NaT10aGlzLk1pLlooKTthLk5pPXRoaXMuTmkuWigpO2EuSnI9dGhpcy5KcjthLktyPXRoaXMuS3I7YS5WcT10aGlzLlZxO2EuYXI9dGhpcy5hcjthLk1yPXRoaXMuTXI7YS5Gbz10aGlzLkZvO2EuU249dGhpcy5TbjthLlVxPXRoaXMuVXF9Ow0KVy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iU2hhcGUoIisoIk5vbmUiIT09dGhpcy56Yj90aGlzLnpiOiJOb25lIiE9PXRoaXMub24/dGhpcy5vbjp0aGlzLkh3KSsiKSMiK3Qub2QodGhpcyl9Ow0KZnVuY3Rpb24gJGwoYSxiLGMsZCl7dmFyIGY9MC4wMDEsZz1kLkVhLGg9Zy53aWR0aCxnPWcuaGVpZ2h0LGssbCxtLG49Yy5sZW5ndGg7aWYoISgyPm4pKXtrPWNbMF1bMF07bD1jWzBdWzFdO2Zvcih2YXIgcCxxLHIscyx1PTAsdj10LkNiKCksRD0xO0Q8bjtEKyspcD1jW0RdLGY9cFswXSxtPXBbMV0scD1mLWssaz1tLWwsMD09PXAmJihwPTAuMDAxKSxxPWsvcCxzPU1hdGguYXRhbjIoayxwKSxrPU1hdGguc3FydChwKnArayprKSx2LnB1c2goW3AscyxxLGtdKSx1Kz1rLGs9ZixsPW07az1jWzBdWzBdO2w9Y1swXVsxXTtjPTA7Zj1oO249aC8yO0Q9MD09PW4/ITE6ITA7bT0wO3I9dlttXTtwPXJbMF07cz1yWzFdO3E9clsyXTtyPXJbM107Zm9yKHZhciBBPTA7MC4xPD11Oyl7MD09PUEmJihEPyhmPWgsYysrLGYtPW4sdS09bixEPSExKTooZj1oLGMrKyksMD09PWYmJihmPTEpKTtpZihmPnUpe3QueWEodik7cmV0dXJufWY+cj8oQT1mLXIsZj1yKTpBPTA7dmFyIEc9TWF0aC5zcXJ0KGYqDQpmLygxK3EqcSkpOzA+cCYmKEc9LUcpO2srPUc7bCs9cSpHO2EudHJhbnNsYXRlKGssbCk7YS5yb3RhdGUocyk7YS50cmFuc2xhdGUoLShoLzIpLC0oZy8yKSk7MD09PUEmJmQuZWwoYSxiKTthLnRyYW5zbGF0ZShoLzIsZy8yKTthLnJvdGF0ZSgtcyk7YS50cmFuc2xhdGUoLWssLWwpO3UtPWY7ci09ZjtpZigwIT09QSl7bSsrO2lmKG09PT12Lmxlbmd0aCl7dC55YSh2KTtyZXR1cm59cj12W21dO3A9clswXTtzPXJbMV07cT1yWzJdO3I9clszXTtmPUF9fXQueWEodil9fQ0KVy5wcm90b3R5cGUuZWw9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT09dGhpcy5HYnx8bnVsbCE9PXRoaXMuVWMpe251bGwhPT10aGlzLlVjJiZ4ayh0aGlzLGEsdGhpcy5VYywhMCk7bnVsbCE9PXRoaXMuR2ImJnhrKHRoaXMsYSx0aGlzLkdiLCExKTt2YXIgYz10aGlzLmJoO2lmKDA9PT1jKXt2YXIgZD10aGlzLlM7ZCBpbnN0YW5jZW9mIEplJiZkLnR5cGU9PT12ZyYmZC5vYyBpbnN0YW5jZW9mIFcmJihjPWQub2MuZmIpfWEubGluZVdpZHRoPWM7YS5saW5lSm9pbj10aGlzLkRvO2EubGluZUNhcD10aGlzLkNvO2EubWl0ZXJMaW1pdD10aGlzLndtO3ZhciBmPSExO3RoaXMuUyYmYi5Say5kcmF3U2hhZG93cyYmKGY9dGhpcy5TLmdqKTt2YXIgZz0hMDtudWxsIT09dGhpcy5HYiYmbnVsbD09PXRoaXMuVWMmJihnPSExKTt2YXIgZD0hMSxoPXRoaXMuQXg7aWYobnVsbCE9PWgpe3ZhciBrPWQ9ITA7dm9pZCAwIT09YS5zZXRMaW5lRGFzaD8oYS5zZXRMaW5lRGFzaChoKSxhLmxpbmVEYXNoT2Zmc2V0PQ0KdGhpcy5sZCk6dm9pZCAwIT09YS53ZWJraXRMaW5lRGFzaD8oYS53ZWJraXRMaW5lRGFzaD1oLGEud2Via2l0TGluZURhc2hPZmZzZXQ9dGhpcy5sZCk6dm9pZCAwIT09YS5tb3pEYXNoPyhhLm1vekRhc2g9aCxhLm1vekRhc2hPZmZzZXQ9dGhpcy5sZCk6az0hMX12YXIgbD10aGlzLk9hO2lmKG51bGwhPT1sKXtpZihsLmRhPT09RGMpYS5iZWdpblBhdGgoKSxkJiYhaz9mayhhLGwubmMsbC54YyxsLmtiLGwudWIsaCx0aGlzLmxkKTooYS5tb3ZlVG8obC5uYyxsLnhjKSxhLmxpbmVUbyhsLmtiLGwudWIpKSxudWxsIT09dGhpcy5VYyYmeWsoYSx0aGlzLlVjLCEwKSwwIT09YyYmbnVsbCE9PXRoaXMuR2ImJnlrKGEsdGhpcy5HYiwhMSk7ZWxzZSBpZihsLmRhPT09RWMpe3ZhciBtPWwubmMsbj1sLnhjLHA9bC5rYixsPWwudWIscT1NYXRoLm1pbihtLHApLHI9TWF0aC5taW4obixsKSxtPU1hdGguYWJzKHAtbSksbj1NYXRoLmFicyhsLW4pO251bGwhPT10aGlzLlVjJiYodGhpcy5VYyBpbnN0YW5jZW9mDQpmYSYmdGhpcy5VYy50eXBlPT09WmQ/KGEuYmVnaW5QYXRoKCksYS5yZWN0KHEscixtLG4pLHlrKGEsdGhpcy5VYywhMCkpOmEuZmlsbFJlY3QocSxyLG0sbikpO2lmKG51bGwhPT10aGlzLkdiKXtpZihnJiZmKXt2YXIgcz1bYS5zaGFkb3dPZmZzZXRYLGEuc2hhZG93T2Zmc2V0WSxhLnNoYWRvd0JsdXJdO2Euc2hhZG93T2Zmc2V0WD0wO2Euc2hhZG93T2Zmc2V0WT0wO2Euc2hhZG93Qmx1cj0wfWQmJiFrPyhrPVtbcSxyXSxbcSttLHJdLFtxK20scituXSxbcSxyK25dLFtxLHJdXSxhLmJlZ2luUGF0aCgpLGFtKGEsayxoLHRoaXMubGQpLHlrKGEsdGhpcy5HYiwhMSkpOjAhPT1jJiYodGhpcy5HYiBpbnN0YW5jZW9mIGZhJiZ0aGlzLkdiLnR5cGU9PT1aZD8oYS5iZWdpblBhdGgoKSxhLnJlY3QocSxyLG0sbikseWsoYSx0aGlzLkdiLCExKSk6YS5zdHJva2VSZWN0KHEscixtLG4pKTtnJiZmJiYoYS5zaGFkb3dPZmZzZXRYPXNbMF0sYS5zaGFkb3dPZmZzZXRZPXNbMV0sYS5zaGFkb3dCbHVyPQ0Kc1syXSl9fWVsc2UgaWYobC5kYT09PU1jKW09bC5uYyxuPWwueGMscD1sLmtiLGw9bC51YixxPU1hdGguYWJzKHAtbSkvMixyPU1hdGguYWJzKGwtbikvMixtPU1hdGgubWluKG0scCkrcSxuPU1hdGgubWluKG4sbCkrcixhLmJlZ2luUGF0aCgpLGEubW92ZVRvKG0sbi1yKSxhLmJlemllckN1cnZlVG8obStILnZhKnEsbi1yLG0rcSxuLUgudmEqcixtK3EsbiksYS5iZXppZXJDdXJ2ZVRvKG0rcSxuK0gudmEqcixtK0gudmEqcSxuK3IsbSxuK3IpLGEuYmV6aWVyQ3VydmVUbyhtLUgudmEqcSxuK3IsbS1xLG4rSC52YSpyLG0tcSxuKSxhLmJlemllckN1cnZlVG8obS1xLG4tSC52YSpyLG0tSC52YSpxLG4tcixtLG4tciksYS5jbG9zZVBhdGgoKSxudWxsIT09dGhpcy5VYyYmeWsoYSx0aGlzLlVjLCEwKSxkJiYhayYmKGs9dC5DYigpLEguemUobSxuLXIsbStILnZhKnEsbi1yLG0rcSxuLUgudmEqcixtK3EsbiwwLjUsayksSC56ZShtK3EsbixtK3EsbitILnZhKnIsbStILnZhKnEsbityLA0KbSxuK3IsMC41LGspLEguemUobSxuK3IsbS1ILnZhKnEsbityLG0tcSxuK0gudmEqcixtLXEsbiwwLjUsayksSC56ZShtLXEsbixtLXEsbi1ILnZhKnIsbS1ILnZhKnEsbi1yLG0sbi1yLDAuNSxrKSxhLmJlZ2luUGF0aCgpLGFtKGEsayxoLHRoaXMubGQpLHQueWEoaykpLDAhPT1jJiZudWxsIT09dGhpcy5HYiYmKGcmJmYmJihzPVthLnNoYWRvd09mZnNldFgsYS5zaGFkb3dPZmZzZXRZLGEuc2hhZG93Qmx1cl0sYS5zaGFkb3dPZmZzZXRYPTAsYS5zaGFkb3dPZmZzZXRZPTAsYS5zaGFkb3dCbHVyPTApLHlrKGEsdGhpcy5HYiwhMSksZyYmZiYmKGEuc2hhZG93T2Zmc2V0WD1zWzBdLGEuc2hhZG93T2Zmc2V0WT1zWzFdLGEuc2hhZG93Qmx1cj1zWzJdKSk7ZWxzZSBpZihsLmRhPT09QWMpe2Zvcih2YXIgcT1sLkJrLHI9cS5sZW5ndGgsdT0wO3U8cjt1Kyspe3ZhciB2PXEublt1XTthLmJlZ2luUGF0aCgpO2EubW92ZVRvKHYucWEsdi5yYSk7Zm9yKHZhciBEPXYuRmEubixBPUQubGVuZ3RoLA0KRz1udWxsLEw9MDtMPEE7TCsrKXt2YXIgTj1EW0xdO3N3aXRjaChOLmRhKXtjYXNlIGJkOmEubW92ZVRvKE4uRCxOLkYpO2JyZWFrO2Nhc2UgT2M6YS5saW5lVG8oTi5ELE4uRik7YnJlYWs7Y2FzZSBjZDphLmJlemllckN1cnZlVG8oTi5qZCxOLnllLE4ubmcsTi5vZyxOLmtiLE4udWIpO2JyZWFrO2Nhc2UgZGQ6YS5xdWFkcmF0aWNDdXJ2ZVRvKE4uamQsTi55ZSxOLmtiLE4udWIpO2JyZWFrO2Nhc2UgZWQ6aWYoTi5yYWRpdXNYPT09Ti5yYWRpdXNZKUc9TWF0aC5QSS8xODAsYS5hcmMoTi5qZCxOLnllLE4ucmFkaXVzWCxOLm5oKkcsKE4ubmgrTi5oaSkqRywwPk4uaGkpO2Vsc2UgZm9yKHZhciBHPWdkKE4sdiksTz1HLmxlbmd0aCxVPTA7VTxPO1UrKyl7dmFyIFk9R1tVXTswPT09VSYmYS5saW5lVG8oWS54MSxZLnkxKTthLmJlemllckN1cnZlVG8oWS54MixZLnkyLFkuZ2UsWS5oZSxZLlViLFkuVmIpfWJyZWFrO2Nhc2UgZmQ6RyYmRy50eXBlPT09ZWQ/KEc9Z2QoRyx2KSxHPUdbRy5sZW5ndGgtDQoxXXx8bnVsbCxudWxsIT09RyYmKG09Ry5VYixwPUcuVmIpKToobT1HP0cuRDp2LnFhLHA9Rz9HLkY6di5yYSk7Rz1oZChOLHYsbSxwKTtPPUcubGVuZ3RoO2ZvcihVPTA7VTxPO1UrKylZPUdbVV0sYS5iZXppZXJDdXJ2ZVRvKFkueDIsWS55MixZLmdlLFkuaGUsWS5VYixZLlZiKTticmVhaztkZWZhdWx0OnQubSgiU2VnbWVudCBub3Qgb2YgdmFsaWQgdHlwZSIpfU4uSGgmJmEuY2xvc2VQYXRoKCk7Rz1OfWY/di5ibz8oITA9PT12LlVsJiZudWxsIT09dGhpcy5VYz8oeWsoYSx0aGlzLlVjLCEwKSxnPSEwKTpnPSExLDAhPT1jJiZudWxsIT09dGhpcy5HYiYmKGcmJihzPVthLnNoYWRvd09mZnNldFgsYS5zaGFkb3dPZmZzZXRZLGEuc2hhZG93Qmx1cl0sYS5zaGFkb3dPZmZzZXRYPTAsYS5zaGFkb3dPZmZzZXRZPTAsYS5zaGFkb3dCbHVyPTApLGQmJiFrfHx5ayhhLHRoaXMuR2IsITEpLGcmJihhLnNoYWRvd09mZnNldFg9c1swXSxhLnNoYWRvd09mZnNldFk9c1sxXSxhLnNoYWRvd0JsdXI9DQpzWzJdKSkpOihnJiYocz1bYS5zaGFkb3dPZmZzZXRYLGEuc2hhZG93T2Zmc2V0WSxhLnNoYWRvd0JsdXJdLGEuc2hhZG93T2Zmc2V0WD0wLGEuc2hhZG93T2Zmc2V0WT0wLGEuc2hhZG93Qmx1cj0wKSwhMD09PXYuVWwmJm51bGwhPT10aGlzLlVjJiZ5ayhhLHRoaXMuVWMsITApLDAhPT1jJiZudWxsIT09dGhpcy5HYiYmKGQmJiFrfHx5ayhhLHRoaXMuR2IsITEpKSxnJiYoYS5zaGFkb3dPZmZzZXRYPXNbMF0sYS5zaGFkb3dPZmZzZXRZPXNbMV0sYS5zaGFkb3dCbHVyPXNbMl0pKTooITA9PT12LlVsJiZudWxsIT09dGhpcy5VYyYmeWsoYSx0aGlzLlVjLCEwKSwwPT09Y3x8bnVsbD09PXRoaXMuR2J8fGQmJiFrfHx5ayhhLHRoaXMuR2IsITEpKX1pZihkJiYhaylmb3IoYz1nLHM9bC5CayxnPXMubGVuZ3RoLGs9MDtrPGc7aysrKXtsPXMubltrXTthLmJlZ2luUGF0aCgpO209dC5DYigpO20ucHVzaChbbC5xYSxsLnJhXSk7cD1sLnFhO3E9bC5yYTtyPXA7dT1xO3Y9bC5GYS5uO0Q9di5sZW5ndGg7DQpmb3IoQT0wO0E8RDtBKyspe0w9dltBXTtzd2l0Y2goTC5kYSl7Y2FzZSBiZDphbShhLG0saCx0aGlzLmxkKTttLmxlbmd0aD0wO20ucHVzaChbTC5ELEwuRl0pO3A9TC5EO3E9TC5GO3I9cDt1PXE7YnJlYWs7Y2FzZSBPYzptLnB1c2goW0wuRCxMLkZdKTtwPUwuRDtxPUwuRjticmVhaztjYXNlIGNkOkguemUocCxxLEwuamQsTC55ZSxMLm5nLEwub2csTC5rYixMLnViLDAuNSxtKTtwPUwuRDtxPUwuRjticmVhaztjYXNlIGRkOkguSnAocCxxLEwuamQsTC55ZSxMLmtiLEwudWIsMC41LG0pO3A9TC5EO3E9TC5GO2JyZWFrO2Nhc2UgZWQ6Tj1nZChMLGwpO0c9Ti5sZW5ndGg7Zm9yKE89MDtPPEc7TysrKVU9TltPXSxILnplKHAscSxVLngyLFUueTIsVS5nZSxVLmhlLFUuVWIsVS5WYiwwLjUsbSkscD1VLlViLHE9VS5WYjticmVhaztjYXNlIGZkOk49aGQoTCxsLHAscSk7Rz1OLmxlbmd0aDtmb3IoTz0wO088RztPKyspVT1OW09dLEguemUocCxxLFUueDIsVS55MixVLmdlLFUuaGUsVS5VYiwNClUuVmIsMC41LG0pLHA9VS5VYixxPVUuVmI7YnJlYWs7ZGVmYXVsdDp0Lm0oIlNlZ21lbnQgbm90IG9mIHZhbGlkIHR5cGUiKX1MLkhoJiYobS5wdXNoKFtyLHVdKSxhbShhLG0saCx0aGlzLmxkKSl9YW0oYSxtLGgsdGhpcy5sZCk7dC55YShtKTtudWxsIT09dGhpcy5HYiYmKGMmJmYmJihuPVthLnNoYWRvd09mZnNldFgsYS5zaGFkb3dPZmZzZXRZLGEuc2hhZG93Qmx1cl0sYS5zaGFkb3dPZmZzZXRYPTAsYS5zaGFkb3dPZmZzZXRZPTAsYS5zaGFkb3dCbHVyPTApLHlrKGEsdGhpcy5HYiwhMSksYyYmZiYmKGEuc2hhZG93T2Zmc2V0WD1uWzBdLGEuc2hhZG93T2Zmc2V0WT1uWzFdLGEuc2hhZG93Qmx1cj1uWzJdKSl9fWQmJih2b2lkIDAhPT1hLnNldExpbmVEYXNoPyhhLnNldExpbmVEYXNoKHQuamkpLGEubGluZURhc2hPZmZzZXQ9MCk6dm9pZCAwIT09YS53ZWJraXRMaW5lRGFzaD8oYS53ZWJraXRMaW5lRGFzaD10LmppLGEud2Via2l0TGluZURhc2hPZmZzZXQ9MCk6dm9pZCAwIT09DQphLm1vekRhc2gmJihhLm1vekRhc2g9bnVsbCxhLm1vekRhc2hPZmZzZXQ9MCkpO2lmKHRoaXMuTUEpe2Q9dGhpcy5NQTtoaChkLEluZmluaXR5LEluZmluaXR5KTtoPWQuRWE7ZC5MYygwLDAsaC53aWR0aCxoLmhlaWdodCk7YS5zYXZlKCk7aD10aGlzLm5kLkFiLiRhKCk7YS5iZWdpblBhdGgoKTtuPXQuQ2IoKTtuLnB1c2goW2gucWEsaC5yYV0pO2M9aC5xYTtmPWgucmE7cz1jO2c9ZjtrPWguRmEubjtsPWsubGVuZ3RoO2ZvcihtPTA7bTxsO20rKyl7cD1rW21dO3N3aXRjaChwLmRhKXtjYXNlIGJkOiRsKGEsYixuLGQpO24ubGVuZ3RoPTA7bi5wdXNoKFtwLkQscC5GXSk7Yz1wLkQ7Zj1wLkY7cz1jO2c9ZjticmVhaztjYXNlIE9jOm4ucHVzaChbcC5ELHAuRl0pO2M9cC5EO2Y9cC5GO2JyZWFrO2Nhc2UgY2Q6SC56ZShjLGYscC5qZCxwLnllLHAubmcscC5vZyxwLmtiLHAudWIsMC41LG4pO2M9cC5EO2Y9cC5GO2JyZWFrO2Nhc2UgZGQ6SC5KcChjLGYscC5qZCxwLnllLHAua2IscC51YiwNCjAuNSxuKTtjPXAuRDtmPXAuRjticmVhaztjYXNlIGVkOnE9Z2QocCxoKTtyPXEubGVuZ3RoO2Zvcih1PTA7dTxyO3UrKyl2PXFbdV0sSC56ZShjLGYsdi54Mix2LnkyLHYuZ2Usdi5oZSx2LlViLHYuVmIsMC41LG4pLGM9di5VYixmPXYuVmI7YnJlYWs7Y2FzZSBmZDpxPWhkKHAsaCxjLGYpO3I9cS5sZW5ndGg7Zm9yKHU9MDt1PHI7dSsrKXY9cVt1XSxILnplKGMsZix2LngyLHYueTIsdi5nZSx2LmhlLHYuVWIsdi5WYiwwLjUsbiksYz12LlViLGY9di5WYjticmVhaztkZWZhdWx0OnQubSgiU2VnbWVudCBub3Qgb2YgdmFsaWQgdHlwZSIpfXAuSGgmJihuLnB1c2goW3MsZ10pLCRsKGEsYixuLGQpKX0kbChhLGIsbixkKTt0LnlhKG4pO2EucmVzdG9yZSgpfX19fTsNCmZ1bmN0aW9uIGFtKGEsYixjLGQpe3ZhciBmPTAuMDAxLGc9Yy5sZW5ndGgsaCxrLGwsbT1iLmxlbmd0aDtpZighKDI+bSkpaWYoaD1iWzBdWzBdLGs9YlswXVsxXSwyPT09bSlmayhhLGgsayxiWzFdWzBdLGJbMV1bMV0sYyxkKTtlbHNle2EubW92ZVRvKGgsayk7Zm9yKHZhciBuLHAscSxyPTAscz10LkNiKCksdT0xO3U8bTt1Kyspbj1iW3VdLGY9blswXSxsPW5bMV0sbj1mLWgsaD1sLWssMD09PW4mJihuPTAuMDAxKSxwPWgvbixoPU1hdGguc3FydChuKm4raCpoKSxzLnB1c2goW24scCxoXSkscis9aCxoPWYsaz1sO2g9YlswXVswXTtrPWJbMF1bMV07Yj0wO209ITA7Zj1jW2IlZ107dT0wIT09ZDtsPTA7cT1zW2xdO249cVswXTtwPXFbMV07cT1xWzJdO2Zvcih2YXIgdj0wOzAuMTw9cjspezA9PT12JiYoZj1jW2IlZ10sYisrLHUmJihkJT1mLGYtPWQsdT0hMSkpO2Y+ciYmKGY9cik7Zj5xPyh2PWYtcSxmPXEpOnY9MDt2YXIgRD1NYXRoLnNxcnQoZipmLygxK3AqcCkpOzA+biYmKEQ9DQotRCk7aCs9RDtrKz1wKkQ7bT9hLmxpbmVUbyhoLGspOmEubW92ZVRvKGgsayk7ci09ZjtxLT1mO2lmKDAhPT12KXtsKys7aWYobD09PXMubGVuZ3RoKXt0LnlhKHMpO3JldHVybn1xPXNbbF07bj1xWzBdO3A9cVsxXTtxPXFbMl07Zj12fWVsc2UgbT0hbX10LnlhKHMpfX1XLnByb3RvdHlwZS5nZXREb2N1bWVudFBvaW50PVcucHJvdG90eXBlLnFiPWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9bmV3IHcpO2EuR2UoKSYmdC5tKCJnZXREb2N1bWVudFBvaW50OnMgU3BvdCBtdXN0IGJlIHJlYWw6ICIrYS50b1N0cmluZygpKTt2YXIgYz10aGlzLlJhLGQ9dGhpcy5mYjtiLnAoYS54KihjLndpZHRoK2QpLWQvMitjLngrYS5vZmZzZXRYLGEueSooYy5oZWlnaHQrZCktZC8yK2MueSthLm9mZnNldFkpO3RoaXMubWUuVGEoYik7cmV0dXJuIGJ9Ow0KVy5wcm90b3R5cGUuVmo9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLk9hO2lmKG51bGw9PT1jfHxudWxsPT09dGhpcy5maWxsJiZudWxsPT09dGhpcy5zdHJva2UpcmV0dXJuITE7dmFyIGQ9Yy5PYixmPXRoaXMuZmIvMjtjLnR5cGUhPT1EY3x8Ynx8KGYrPTIpO3ZhciBnPXQuR2YoKTtnLmFzc2lnbihkKTtnLlNmKGYrMixmKzIpO2lmKCFnLkdhKGEpKXJldHVybiB0LmhjKGcpLCExO2Q9ZisxRS00O2lmKGMudHlwZT09PURjKXtpZihudWxsPT09dGhpcy5zdHJva2UpcmV0dXJuITE7ZD0oYy5ELWMucWEpKihhLngtYy5xYSkrKGMuRi1jLnJhKSooYS55LWMucmEpO2lmKDA+KGMucWEtYy5EKSooYS54LWMuRCkrKGMucmEtYy5GKSooYS55LWMuRil8fDA+ZClyZXR1cm4hMTt0LmhjKGcpO3JldHVybiBILk1kKGMucWEsYy5yYSxjLkQsYy5GLGYsYS54LGEueSl9aWYoYy50eXBlPT09RWMpe3ZhciBoPWMucWEsaz1jLnJhLGw9Yy5ELG09Yy5GLGM9TWF0aC5taW4oaCxsKSxuPU1hdGgubWluKGssDQptKSxoPU1hdGguYWJzKGwtaCksaz1NYXRoLmFicyhtLWspO2cueD1jO2cueT1uO2cud2lkdGg9aDtnLmhlaWdodD1rO2lmKG51bGw9PT10aGlzLmZpbGwpe2cuU2YoLWQsLWQpO2lmKGcuR2EoYSkpcmV0dXJuIHQuaGMoZyksITE7Zy5TZihkLGQpfW51bGwhPT10aGlzLnN0cm9rZSYmZy5TZihmLGYpO2Y9Zy5HYShhKTt0LmhjKGcpO3JldHVybiBmfWlmKGMudHlwZT09PU1jKXtoPWMucWE7az1jLnJhO2w9Yy5EO209Yy5GO2M9TWF0aC5taW4oaCxsKTtuPU1hdGgubWluKGssbSk7aD1NYXRoLmFicyhsLWgpO2s9TWF0aC5hYnMobS1rKTtoLz0yO2svPTI7Yz1hLngtKGMraCk7bj1hLnktKG4rayk7aWYobnVsbD09PXRoaXMuZmlsbCl7aC09ZDtrLT1kO2lmKDA+PWh8fDA+PWt8fDE+PWMqYy8oaCpoKStuKm4vKGsqaykpcmV0dXJuIHQuaGMoZyksITE7aCs9ZDtrKz1kfW51bGwhPT10aGlzLnN0cm9rZSYmKGgrPWYsays9Zik7dC5oYyhnKTtyZXR1cm4gMD49aHx8MD49az8hMToxPj1jKmMvDQooaCpoKStuKm4vKGsqayl9aWYoYy50eXBlPT09QWMpcmV0dXJuIHQuaGMoZyksbnVsbD09PXRoaXMuZmlsbD9rZChjLGEueCxhLnksZik6Yy5HYShhLGYsMTx0aGlzLmZiLGIpO3QubSgiVW5rbm93biBHZW9tZXRyeSB0eXBlIik7cmV0dXJuITF9Ow0KVy5wcm90b3R5cGUudHQ9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGY9dGhpcy5DYSxnPXRoaXMuYmg7YT1NYXRoLm1heChhLDApO2I9TWF0aC5tYXgoYiwwKTt2YXIgaDtpZih0aGlzLmFoKWg9dGhpcy5PYS5PYjtlbHNle3ZhciBrPXRoaXMuemIsbD1ILk9BW2tdO2lmKHZvaWQgMD09PWwpe3ZhciBtPUguYmpba107InN0cmluZyI9PT10eXBlb2YgbSYmKG09SC5ialttXSk7ImZ1bmN0aW9uIj09PXR5cGVvZiBtPyhsPW0obnVsbCwxMDAsMTAwKSxILk9BW2tdPWwpOnQubSgiVW5zdXBwb3J0ZWQgRmlndXJlOiIrayl9aD1sLk9ifXZhciBrPWgud2lkdGgsbD1oLmhlaWdodCxtPWgud2lkdGgsbj1oLmhlaWdodDtzd2l0Y2goa2sodGhpcykpe2Nhc2UgVWc6ZD1jPTA7YnJlYWs7Y2FzZSBDYzptPU1hdGgubWF4KGEtZywwKTtuPU1hdGgubWF4KGItZywwKTticmVhaztjYXNlIGNrOm09TWF0aC5tYXgoYS1nLDApO2Q9MDticmVhaztjYXNlIGJrOmM9MCxuPU1hdGgubWF4KGItZywwKX1pc0Zpbml0ZShmLndpZHRoKSYmDQoobT1mLndpZHRoKTtpc0Zpbml0ZShmLmhlaWdodCkmJihuPWYuaGVpZ2h0KTtmPXRoaXMuSGU7aD10aGlzLlZmO2M9TWF0aC5tYXgoYyxoLndpZHRoKS1nO2Q9TWF0aC5tYXgoZCxoLmhlaWdodCktZzttPU1hdGgubWluKGYud2lkdGgsbSk7bj1NYXRoLm1pbihmLmhlaWdodCxuKTttPWlzRmluaXRlKG0pP01hdGgubWF4KGMsbSk6TWF0aC5tYXgoayxjKTtuPWlzRmluaXRlKG4pP01hdGgubWF4KGQsbik6TWF0aC5tYXgobCxkKTtjPUxsKHRoaXMpO3N3aXRjaChjKXtjYXNlIFVnOmJyZWFrO2Nhc2UgQ2M6az1tO2w9bjticmVhaztjYXNlIFdnOmM9TWF0aC5taW4obS9rLG4vbCk7aXNGaW5pdGUoYyl8fChjPTEpO2sqPWM7bCo9YzticmVhaztkZWZhdWx0OnQubShjKyIgaXMgbm90IGEgdmFsaWQgZ2VvbWV0cnlTdHJldGNoLiIpfWlmKHRoaXMuYWgpe2g9dGhpcy5uZDtkPWs7Zj1sO2M9aC5jb3B5KCk7aD1oLk9iO2QvPWgud2lkdGg7Zi89aC5oZWlnaHQ7aXNGaW5pdGUoZCl8fChkPTEpOw0KaXNGaW5pdGUoZil8fChmPTEpO2lmKDEhPT1kfHwxIT09Zilzd2l0Y2goYy50eXBlKXtjYXNlIERjOmNhc2UgRWM6Y2FzZSBNYzpjLnFhKj1kO2MucmEqPWY7Yy5EKj1kO2MuRio9ZjticmVhaztjYXNlIEFjOmg9Yy5BYjtmb3IodmFyIHA9aC5sZW5ndGgscT0wO3E8cDtxKyspe3ZhciByPWgubltxXTtyLnFhKj1kO3IucmEqPWY7Zm9yKHZhciByPXIuRmEscz1yLmxlbmd0aCx1PTA7dTxzO3UrKyl7dmFyIHY9ci5uW3VdO3N3aXRjaCh2LnR5cGUpe2Nhc2UgT2M6Y2FzZSBiZDp2LkQqPWQ7di5GKj1mO2JyZWFrO2Nhc2UgY2Q6di5CYio9ZDt2LlJiKj1mO3YucmUqPWQ7di5zZSo9Zjt2LkQqPWQ7di5GKj1mO2JyZWFrO2Nhc2UgZGQ6di5CYio9ZDt2LlJiKj1mO3YuRCo9ZDt2LkYqPWY7YnJlYWs7Y2FzZSBlZDp2LkRhKj1kO3YuUGEqPWY7di5yYWRpdXNYKj1kO3ZvaWQgMCE9PXYucmFkaXVzWSYmKHYucmFkaXVzWSo9Zik7YnJlYWs7Y2FzZSBmZDp2LkQqPWQ7di5GKj1mO3YucmFkaXVzWCo9DQpkO3YucmFkaXVzWSo9ZjticmVhaztkZWZhdWx0OnQubSgiVW5rbm93biBTZWdtZW50IHR5cGU6ICIrdi50eXBlKX19fX10aGlzLk9hPWN9ZWxzZSBpZihudWxsPT09dGhpcy5PYXx8dGhpcy5PYS4kbiE9PWEtZ3x8dGhpcy5PYS5abiE9PWItZyl0aGlzLk9hPUgubWFrZUdlb21ldHJ5KHRoaXMsayxsKTtoPXRoaXMuT2EuT2I7SW5maW5pdHk9PT1hfHxJbmZpbml0eT09PWI/aGsodGhpcyxoLngtZy8yLGgueS1nLzIsMD09PWEmJjA9PT1rPzA6aC53aWR0aCtnLDA9PT1iJiYwPT09bD8wOmguaGVpZ2h0K2cpOmhrKHRoaXMsLShnLzIpLC0oZy8yKSxtK2csbitnKX07DQpmdW5jdGlvbiBQbChhLGIsYyl7aWYoITEhPT1PaShhKSl7YS5XYy5MYSgpO3ZhciBkPWEuYmg7aWYoMD09PWQpe3ZhciBmPWEuUztmIGluc3RhbmNlb2YgSmUmJmYudHlwZT09PXZnJiZmLm9jIGluc3RhbmNlb2YgVyYmKGQ9Zi5vYy5mYil9ZCo9YS53YztoayhhLC0oZC8yKSwtKGQvMiksYitkLGMrZCk7Yj1hLldjO2M9YS5IZTtkPWEuVmY7Yi53aWR0aD1NYXRoLm1pbihjLndpZHRoLGIud2lkdGgpO2IuaGVpZ2h0PU1hdGgubWluKGMuaGVpZ2h0LGIuaGVpZ2h0KTtiLndpZHRoPU1hdGgubWF4KGQud2lkdGgsYi53aWR0aCk7Yi5oZWlnaHQ9TWF0aC5tYXgoZC5oZWlnaHQsYi5oZWlnaHQpO2EuV2MuZnJlZXplKCk7YS5XYy5OKCl8fHQubSgiTm9uLXJlYWwgbWVhc3VyZWRCb3VuZHMgaGFzIGJlZW4gc2V0LiBPYmplY3QgIithKyIsIG1lYXN1cmVkQm91bmRzOiAiK2EuV2MudG9TdHJpbmcoKSk7bGsoYSwhMSl9fQ0KZnVuY3Rpb24gTGwoYSl7dmFyIGI9YS5JdztyZXR1cm4gYS5haD9iPT09Vmc/Q2M6YjpiPT09Vmc/SC5PQVthLnpiXS52YzpifVcucHJvdG90eXBlLlVqPWZ1bmN0aW9uKGEsYixjLGQpe29rKHRoaXMsYSxiLGMsZCl9O1cucHJvdG90eXBlLmdldE5lYXJlc3RJbnRlcnNlY3Rpb25Qb2ludD1XLnByb3RvdHlwZS5rbD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMua3AoYS54LGEueSxiLngsYi55LGMpfTsNClcucHJvdG90eXBlLmtwPWZ1bmN0aW9uKGEsYixjLGQsZil7dmFyIGc9dGhpcy50cmFuc2Zvcm0saD0xLyhnLm0xMSpnLm0yMi1nLm0xMipnLm0yMSksaz1nLm0yMipoLGw9LWcubTEyKmgsbT0tZy5tMjEqaCxuPWcubTExKmgscD1oKihnLm0yMSpnLmR5LWcubTIyKmcuZHgpLHE9aCooZy5tMTIqZy5keC1nLm0xMSpnLmR5KSxnPWEqaytiKm0rcCxoPWEqbCtiKm4rcSxrPWMqaytkKm0rcCxsPWMqbCtkKm4rcSxtPXRoaXMuZmIvMixwPXRoaXMuT2E7bnVsbD09PXAmJihoaCh0aGlzLEluZmluaXR5LEluZmluaXR5KSxwPXRoaXMuT2EpO3E9cC5PYjtuPSExO2lmKHAudHlwZT09PURjKWlmKDEuNT49dGhpcy5mYiluPUguamgocC5uYyxwLnhjLHAua2IscC51YixnLGgsayxsLGYpO2Vsc2V7dmFyIHIscztwLm5jPT09cC5rYj8ocj1tLHM9MCk6KGI9KHAudWItcC54YykvKHAua2ItcC5uYykscz1tL01hdGguc3FydCgxK2IqYikscj1zKmIpO2Q9dC5DYigpO2I9bmV3IHc7SC5qaChwLm5jKw0KcixwLnhjK3MscC5rYityLHAudWIrcyxnLGgsayxsLGIpJiZkLnB1c2goYik7Yj1uZXcgdztILmpoKHAubmMtcixwLnhjLXMscC5rYi1yLHAudWItcyxnLGgsayxsLGIpJiZkLnB1c2goYik7Yj1uZXcgdztILmpoKHAubmMrcixwLnhjK3MscC5uYy1yLHAueGMtcyxnLGgsayxsLGIpJiZkLnB1c2goYik7Yj1uZXcgdztILmpoKHAua2IrcixwLnViK3MscC5rYi1yLHAudWItcyxnLGgsayxsLGIpJiZkLnB1c2goYik7Yj1kLmxlbmd0aDtpZigwPT09YilyZXR1cm4gdC55YShkKSwhMTtuPSEwO3M9SW5maW5pdHk7Zm9yKHI9MDtyPGI7cisrKXt2YXIgaz1kW3JdLHU9KGsueC1nKSooay54LWcpKyhrLnktaCkqKGsueS1oKTt1PHMmJihzPXUsZi54PWsueCxmLnk9ay55KX10LnlhKGQpfWVsc2UgaWYocC50eXBlPT09RWMpYj1xLngtbSxuPUgua2woYixxLnktbSxxLngrcS53aWR0aCttLHEueStxLmhlaWdodCttLGcsaCxrLGwsZik7ZWxzZSBpZihwLnR5cGU9PT1NYylhOmlmKGI9cS5jb3B5KCkuU2YobSwNCm0pLDA9PT1iLndpZHRoKW49SC5qaChiLngsYi55LGIueCxiLnkrYi5oZWlnaHQsZyxoLGssbCxmKTtlbHNlIGlmKDA9PT1iLmhlaWdodCluPUguamgoYi54LGIueSxiLngrYi53aWR0aCxiLnksZyxoLGssbCxmKTtlbHNle2E9Yi53aWR0aC8yO3ZhciB2PWIuaGVpZ2h0LzI7ZD1iLngrYTtiPWIueSt2O2M9OTk5OTtnIT09ayYmKGM9KGgtbCkvKGctaykpO2lmKDk5OTk+TWF0aC5hYnMoYykpe249aC1iLWMqKGctZCk7aWYoMD5hKmEqYypjK3Yqdi1uKm4pe2YueD1OYU47Zi55PU5hTjtuPSExO2JyZWFrIGF9bT1NYXRoLnNxcnQoYSphKmMqYyt2KnYtbipuKTtrPSgtKGEqYSpjKm4pK2EqdiptKS8odip2K2EqYSpjKmMpK2Q7YT0oLShhKmEqYypuKS1hKnYqbSkvKHYqdithKmEqYypjKStkO2w9Yyooay1kKStuK2I7Yj1jKihhLWQpK24rYjtkPU1hdGguYWJzKChnLWspKihnLWspKStNYXRoLmFicygoaC1sKSooaC1sKSk7aD1NYXRoLmFicygoZy1hKSooZy1hKSkrTWF0aC5hYnMoKGgtYikqDQooaC1iKSk7ZDxoPyhmLng9ayxmLnk9bCk6KGYueD1hLGYueT1iKX1lbHNle2s9dip2O2w9Zy1kO2stPWsvKGEqYSkqbCpsO2lmKDA+ayl7Zi54PU5hTjtmLnk9TmFOO249ITE7YnJlYWsgYX1tPU1hdGguc3FydChrKTtsPWIrbTtiLT1tO2Q9TWF0aC5hYnMobC1oKTtoPU1hdGguYWJzKGItaCk7ZDxoPyhmLng9ZyxmLnk9bCk6KGYueD1nLGYueT1iKX1uPSEwfWVsc2UgaWYocC50eXBlPT09QWMpe3ZhciBELEEsRyxxPXQuSygpO3I9ay1nO3M9bC1oO3M9cipyK3MqcztmLng9aztmLnk9bDtmb3Iocj0wO3I8cC5BYi5jb3VudDtyKyspe3ZhciBMPXAuQWIubltyXSxOPUwuRmE7RD1MLnFhO0E9TC5yYTtmb3IodmFyIE89RCxVPUEsWSxiYSxSPTA7UjxOLmNvdW50O1IrKyl7WT1OLm5bUl07YmE9WS50eXBlO3U9WS5EO0c9WS5GO3ZhciB4YT0hMTtzd2l0Y2goYmEpe2Nhc2UgYmQ6Tz11O1U9RzticmVhaztjYXNlIE9jOnhhPWJtKEQsQSx1LEcsZyxoLGssbCxxKTticmVhaztjYXNlIGNkOnhhPQ0KWS5CYjtiYT1ZLlJiO3ZhciBZYT1ZLnJlLHphPVkuc2UseGE9SC5QcyhELEEseGEsYmEsWWEsemEsdSxHLGcsaCxrLGwsMC41LHEpO2JyZWFrO2Nhc2UgZGQ6eGE9KEQrMipZLkJiKS8zO2JhPShBKzIqWS5SYikvMztZYT0oMipZLkJiK3UpLzM7emE9KDIqWS5CYit1KS8zO3hhPUguUHMoRCxBLHhhLGJhLFlhLHphLHUsRyxnLGgsayxsLDAuNSxxKTticmVhaztjYXNlIGVkOmNhc2UgZmQ6Rz1ZLnR5cGU9PT1lZD9nZChZLEwpOmhkKFksTCxELEEpO2JhPUcubGVuZ3RoO2ZvcihZYT0wO1lhPGJhO1lhKyspdj1HW1lhXSwwPT09WWEmJmJtKEQsQSx2LngxLHYueTEsZyxoLGssbCxxKSYmKHU9Y20oZyxoLHEscyxmKSx1PHMmJihzPXUsbj0hMCkpLEguUHModi54MSx2LnkxLHYueDIsdi55Mix2LmdlLHYuaGUsdi5VYix2LlZiLGcsaCxrLGwsMC41LHEpJiYodT1jbShnLGgscSxzLGYpLHU8cyYmKHM9dSxuPSEwKSk7dT12LlViO0c9di5WYjticmVhaztkZWZhdWx0OnQubSgiVW5rbm93biBTZWdtZW50IHR5cGU6ICIrDQpZLnR5cGUpfUQ9dTtBPUc7eGEmJih1PWNtKGcsaCxxLHMsZiksdTxzJiYocz11LG49ITApKTtZLm50JiYodT1PLEc9VSxibShELEEsdSxHLGcsaCxrLGwscSkmJih1PWNtKGcsaCxxLHMsZiksdTxzJiYocz11LG49ITApKSl9fWc9Yy1hO2g9ZC1iO2I9TWF0aC5zcXJ0KGcqZytoKmgpOzAhPT1iJiYoZy89YixoLz1iKTtmLngtPWcqbTtmLnktPWgqbTt0LkIocSl9ZWxzZSB0Lm0oIkludmFsaWQgR2VvbWV0cnkgdHlwZSIpO2lmKCFuKXJldHVybiExO3RoaXMudHJhbnNmb3JtLlRhKGYpO3JldHVybiEwfTtmdW5jdGlvbiBjbShhLGIsYyxkLGYpe2E9Yy54LWE7Yj1jLnktYjtiPWEqYStiKmI7cmV0dXJuIGI8ZD8oZi54PWMueCxmLnk9Yy55LGIpOmR9DQpmdW5jdGlvbiBibShhLGIsYyxkLGYsZyxoLGssbCl7dmFyIG09ITEsbj0oZi1oKSooYi1kKS0oZy1rKSooYS1jKTtpZigwPT09bilyZXR1cm4hMTtsLng9KChmKmstZypoKSooYS1jKS0oZi1oKSooYSpkLWIqYykpL247bC55PSgoZiprLWcqaCkqKGItZCktKGctaykqKGEqZC1iKmMpKS9uOyhhPmM/YS1jOmMtYSk8KGI+ZD9iLWQ6ZC1iKT8oZj1iPGQ/YjpkLGE9YjxkP2Q6YiwobC55PmZ8fEgubmIobC55LGYpKSYmKGwueTxhfHxILm5iKGwueSxhKSkmJihtPSEwKSk6KGY9YTxjP2E6YyxhPWE8Yz9jOmEsKGwueD5mfHxILm5iKGwueCxmKSkmJihsLng8YXx8SC5uYihsLngsYSkpJiYobT0hMCkpO3JldHVybiBtfQ0KVy5wcm90b3R5cGUuY29udGFpbmVkSW5SZWN0PVcucHJvdG90eXBlLkltPWZ1bmN0aW9uKGEsYil7aWYodm9pZCAwPT09YilyZXR1cm4gYS5Xaih0aGlzLnBhKTt2YXIgYz10aGlzLk9hO251bGw9PT1jJiYoaGgodGhpcyxJbmZpbml0eSxJbmZpbml0eSksYz10aGlzLk9hKTt2YXIgYz1jLk9iLGQ9dGhpcy5mYi8yLGY9ITEsZz10LksoKTtnLnAoYy54LWQsYy55LWQpO2EuR2EoYi5UYShnKSkmJihnLnAoYy54LWQsYy5ib3R0b20rZCksYS5HYShiLlRhKGcpKSYmKGcucChjLnJpZ2h0K2QsYy5ib3R0b20rZCksYS5HYShiLlRhKGcpKSYmKGcucChjLnJpZ2h0K2QsYy55LWQpLGEuR2EoYi5UYShnKSkmJihmPSEwKSkpKTt0LkIoZyk7cmV0dXJuIGZ9Ow0KVy5wcm90b3R5cGUuaW50ZXJzZWN0c1JlY3Q9Vy5wcm90b3R5cGUuVGY9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLkltKGEsYil8fHZvaWQgMD09PWImJihiPXRoaXMudHJhbnNmb3JtLGEuV2oodGhpcy5wYSkpKXJldHVybiEwO3ZhciBjPXQucGgoKTtjLnNldChiKTtjLm9BKCk7dmFyIGQ9YS5sZWZ0LGY9YS5yaWdodCxnPWEudG9wLGg9YS5ib3R0b20saz10LksoKTtrLnAoZCxnKTtjLlRhKGspO2lmKHRoaXMuVmooaywhMCkpcmV0dXJuIHQuQihrKSwhMDtrLnAoZixnKTtjLlRhKGspO2lmKHRoaXMuVmooaywhMCkpcmV0dXJuIHQuQihrKSwhMDtrLnAoZCxoKTtjLlRhKGspO2lmKHRoaXMuVmooaywhMCkpcmV0dXJuIHQuQihrKSwhMDtrLnAoZixoKTtjLlRhKGspO2lmKHRoaXMuVmooaywhMCkpcmV0dXJuIHQuQihrKSwhMDt2YXIgbD10LksoKSxtPXQuSygpO2Muc2V0KGIpO2MuRUYodGhpcy50cmFuc2Zvcm0pO2Mub0EoKTtsLng9ZjtsLnk9ZztsLnRyYW5zZm9ybShjKTtrLng9ZDtrLnk9DQpnO2sudHJhbnNmb3JtKGMpO3ZhciBuPSExO2RtKHRoaXMsayxsLG0pP249ITA6KGsueD1mLGsueT1oLGsudHJhbnNmb3JtKGMpLGRtKHRoaXMsayxsLG0pP249ITA6KGwueD1kLGwueT1oLGwudHJhbnNmb3JtKGMpLGRtKHRoaXMsayxsLG0pP249ITA6KGsueD1kLGsueT1nLGsudHJhbnNmb3JtKGMpLGRtKHRoaXMsayxsLG0pJiYobj0hMCkpKSk7dC5CKGspO3QuV2UoYyk7dC5CKGwpO3QuQihtKTtyZXR1cm4gbn07ZnVuY3Rpb24gZG0oYSxiLGMsZCl7aWYoIWEua2woYixjLGQpKXJldHVybiExO2E9Yi54O2I9Yi55O3ZhciBmPWMueCxnPWMueTtjPWQueDtkPWQueTtpZihhPT09Zil7dmFyIGg7YjxnPyhoPWIsYT1nKTooaD1nLGE9Yik7cmV0dXJuIGQ+PWgmJmQ8PWF9YTxmPyhoPWEsYT1mKTpoPWY7cmV0dXJuIGM+PWgmJmM8PWF9DQpXLnByb3RvdHlwZS5DRT1mdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgYz1hLmxlbmd0aCxkPTA7ZDxjO2QrKyl7dmFyIGc9YVtkXTtpZihiLllzKGdbMF0sZ1sxXSk+ZilyZXR1cm4hMH1yZXR1cm4hMX1pZihjJiZudWxsIT09dGhpcy5maWxsJiZ0aGlzLlZqKGEsITApKXJldHVybiEwO3ZhciBmPWEuWmooYik7Yj1mOzEuNTx0aGlzLmZiJiYoZj10aGlzLmZiLzIrTWF0aC5zcXJ0KGYpLGYqPWYpO3ZhciBnPXRoaXMuT2E7bnVsbD09PWcmJihoaCh0aGlzLEluZmluaXR5LEluZmluaXR5KSxnPXRoaXMuT2EpO2lmKCFjKXt2YXIgaD1nLk9iLGs9aC54LGw9aC55LG09aC54K2gud2lkdGgsaD1oLnkraC5oZWlnaHQ7aWYoU2EoYS54LGEueSxrLGwpPD1mJiZTYShhLngsYS55LG0sbCk8PWYmJlNhKGEueCxhLnksayxoKTw9ZiYmU2EoYS54LGEueSxtLGgpPD1mKXJldHVybiEwfWs9Zy5uYztsPWcueGM7bT1nLmtiO2g9Zy51YjtpZihnLnR5cGU9PT1EYyl7aWYoYz0NClJhKGEueCxhLnksayxsLG0saCksZz0oay1tKSooYS54LW0pKyhsLWgpKihhLnktaCksYzw9KDA8PShtLWspKihhLngtaykrKGgtbCkqKGEueS1sKSYmMDw9Zz9mOmIpKXJldHVybiEwfWVsc2V7aWYoZy50eXBlPT09RWMpcmV0dXJuIGI9ITEsYyYmKGI9UmEoYS54LGEueSxrLGwsayxoKTw9Znx8UmEoYS54LGEueSxrLGwsbSxsKTw9Znx8UmEoYS54LGEueSxtLGwsbSxoKTw9Znx8UmEoYS54LGEueSxrLGgsbSxoKTw9ZiksYjtpZihnLnR5cGU9PT1NYyl7Yj1hLngtKGsrbSkvMjt2YXIgZz1hLnktKGwraCkvMixuPU1hdGguYWJzKG0taykvMixwPU1hdGguYWJzKGgtbCkvMjtpZigwPT09bnx8MD09PXApcmV0dXJuIGM9UmEoYS54LGEueSxrLGwsbSxoKSxjPD1mPyEwOiExO2lmKGMpe2lmKGE9SC56SShuLHAsYixnKSxhKmE8PWYpcmV0dXJuITB9ZWxzZSByZXR1cm4gU2EoYixnLC1uLDApPj1mfHxTYShiLGcsMCwtcCk+PWZ8fFNhKGIsZywwLHApPj1mfHxTYShiLGcsbiwwKT49Zj8hMToNCiEwfWVsc2UgaWYoZy50eXBlPT09QWMpe2g9Zy5PYjtrPWgueDtsPWgueTttPWgueCtoLndpZHRoO2g9aC55K2guaGVpZ2h0O2lmKGEueD5tJiZhLng8ayYmYS55PmgmJmEueTxsJiZSYShhLngsYS55LGssbCxrLGgpPmYmJlJhKGEueCxhLnksayxsLG0sbCk+ZiYmUmEoYS54LGEueSxtLGgsayxoKT5mJiZSYShhLngsYS55LG0saCxtLGwpPmYpcmV0dXJuITE7Yj1NYXRoLnNxcnQoZik7aWYoYyl7aWYobnVsbD09PXRoaXMuZmlsbD9rZChnLGEueCxhLnksYik6Zy5HYShhLGIsITApKXJldHVybiEwfWVsc2V7Yz1nLkFiO2ZvcihiPTA7YjxjLmNvdW50O2IrKyl7az1jLm5bYl07bj1rLnFhO3A9ay5yYTtpZihhLllzKG4scCk+ZilyZXR1cm4hMTtsPWsuRmEubjttPWwubGVuZ3RoO2ZvcihoPTA7aDxtO2grKyl7dmFyIHE9bFtoXTtzd2l0Y2gocS50eXBlKXtjYXNlIGJkOmNhc2UgT2M6bj1xLkQ7cD1xLkY7aWYoYS5ZcyhuLHApPmYpcmV0dXJuITE7YnJlYWs7Y2FzZSBjZDpnPXQuQ2IoKTsNCkguemUobixwLHEuQmIscS5SYixxLnJlLHEuc2UscS5ELHEuRiwwLjgsZyk7bj1kKGcsYSk7dC55YShnKTtpZihuKXJldHVybiExO249cS5EO3A9cS5GO2lmKGEuWXMobixwKT5mKXJldHVybiExO2JyZWFrO2Nhc2UgZGQ6Zz10LkNiKCk7SC5KcChuLHAscS5CYixxLlJiLHEuRCxxLkYsMC44LGcpO249ZChnLGEpO3QueWEoZyk7aWYobilyZXR1cm4hMTtuPXEuRDtwPXEuRjtpZihhLllzKG4scCk+ZilyZXR1cm4hMTticmVhaztjYXNlIGVkOmNhc2UgZmQ6dmFyIHE9cS50eXBlPT09ZWQ/Z2QocSxrKTpoZChxLGssbixwKSxyPXEubGVuZ3RoLHM9bnVsbCxnPXQuQ2IoKTtmb3IoYj0wO2I8cjtiKyspaWYocz1xW2JdLGcubGVuZ3RoPTAsSC56ZShzLngxLHMueTEscy54MixzLnkyLHMuZ2Uscy5oZSxzLlViLHMuVmIsMC44LGcpLGQoZyxhKSlyZXR1cm4gdC55YShnKSwhMTt0LnlhKGcpO251bGwhPT1zJiYobj1zLlViLHA9cy5WYik7YnJlYWs7ZGVmYXVsdDp0Lm0oIlVua25vd24gU2VnbWVudCB0eXBlOiAiKw0KcS50eXBlKX19fXJldHVybiEwfX19cmV0dXJuITF9O3QuZyhXLCJnZW9tZXRyeSIsVy5wcm90b3R5cGUubmQpO3QuZGVmaW5lUHJvcGVydHkoVyx7bmQ6Imdlb21ldHJ5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54az90aGlzLnhrOnRoaXMuT2F9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuT2E7aWYoYiE9PWEpe251bGwhPT1hPyhlJiZ0LmwoYSx6YyxXLCJnZW9tZXRyeSIpLHRoaXMueGs9dGhpcy5PYT1hLmZyZWV6ZSgpKTp0aGlzLnhrPXRoaXMuT2E9bnVsbDt2YXIgYz10aGlzLlM7YyYmKGMuRGo9TmFOKTt0aGlzLmFoPSEwO3RoaXMuZmEoKTt0aGlzLmooImdlb21ldHJ5IixiLGEpfX0pO3QuZyhXLCJnZW9tZXRyeVN0cmluZyIsVy5wcm90b3R5cGUuSkUpOw0KdC5kZWZpbmVQcm9wZXJ0eShXLHtKRToiZ2VvbWV0cnlTdHJpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm5kLnRvU3RyaW5nKCl9LGZ1bmN0aW9uKGEpe3ZhciBiPVJjKGEpO2E9Yi5ub3JtYWxpemUoKTt0aGlzLm5kPWI7dmFyIGI9dC5LKCksYz10aGlzLnBvc2l0aW9uO2MuTigpP2IucChjLngtYS54LGMueS1hLnkpOmIucCgtYS54LC1hLnkpO3RoaXMucG9zaXRpb249Yjt0LkIoYil9KTt0LmRlZmluZVByb3BlcnR5KFcse3NBOiJpc0dlb21ldHJ5UG9zaXRpb25lZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVnF9LGZ1bmN0aW9uKGEpe2UmJnQuaShhLCJib29sZWFuIixXLCJpc0dlb21ldHJ5UG9zaXRpb25lZCIpO3ZhciBiPXRoaXMuVnE7YiE9PWEmJih0aGlzLlZxPWEsdGhpcy5mYSgpLHRoaXMuaigiaXNHZW9tZXRyeVBvc2l0aW9uZWQiLGIsYSkpfSk7Vy5wcm90b3R5cGUuWWU9ZnVuY3Rpb24oKXt0aGlzLmFoP3RoaXMueGs9bnVsbDp0aGlzLk9hPW51bGw7dGhpcy5mYSgpfTsNCnQuZyhXLCJmaWxsIixXLnByb3RvdHlwZS5maWxsKTt0LmRlZmluZVByb3BlcnR5KFcse2ZpbGw6ImZpbGwifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlVjfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlVjO2IhPT1hJiYoZSYmbnVsbCE9PWEmJnQuVG8oYSwiU2hhcGUuZmlsbCIpLGEgaW5zdGFuY2VvZiBmYSYmYS5mcmVlemUoKSx0aGlzLlVjPWEsdGhpcy5rYSgpLHRoaXMuaigiZmlsbCIsYixhKSl9KTt0LmcoVywic3Ryb2tlIixXLnByb3RvdHlwZS5zdHJva2UpO3QuZGVmaW5lUHJvcGVydHkoVyx7c3Ryb2tlOiJzdHJva2UifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkdifSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkdiO2IhPT1hJiYoZSYmbnVsbCE9PWEmJnQuVG8oYSwiU2hhcGUuc3Ryb2tlIiksYSBpbnN0YW5jZW9mIGZhJiZhLmZyZWV6ZSgpLHRoaXMuR2I9YSx0aGlzLmthKCksdGhpcy5qKCJzdHJva2UiLGIsYSkpfSk7dC5nKFcsInN0cm9rZVdpZHRoIixXLnByb3RvdHlwZS5mYik7DQp0LmRlZmluZVByb3BlcnR5KFcse2ZiOiJzdHJva2VXaWR0aCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmh9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYmg7aWYoYiE9PWEpaWYoZSYmdC5xKGEsVywic3Ryb2tlV2lkdGgiKSwwPD1hKXt0aGlzLmJoPWE7dGhpcy5mYSgpO3ZhciBjPXRoaXMuUztjJiYoYy5Eaj1OYU4pO3RoaXMuaigic3Ryb2tlV2lkdGgiLGIsYSl9ZWxzZSB0LmxhKGEsInZhbCA+PSAwIixXLCJzdHJva2VXaWR0aDp2YWwiKX0pO3QuZyhXLCJzdHJva2VDYXAiLFcucHJvdG90eXBlLnhHKTsNCnQuZGVmaW5lUHJvcGVydHkoVyx7eEc6InN0cm9rZUNhcCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ299LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuQ287YiE9PWEmJigic3RyaW5nIiE9PXR5cGVvZiBhfHwiYnV0dCIhPT1hJiYicm91bmQiIT09YSYmInNxdWFyZSIhPT1hP3QubGEoYSwnImJ1dHQiLCAicm91bmQiLCBvciAic3F1YXJlIicsVywic3Ryb2tlQ2FwIik6KHRoaXMuQ289YSx0aGlzLmthKCksdGhpcy5qKCJzdHJva2VDYXAiLGIsYSkpKX0pO3QuZyhXLCJzdHJva2VKb2luIixXLnByb3RvdHlwZS5YSik7DQp0LmRlZmluZVByb3BlcnR5KFcse1hKOiJzdHJva2VKb2luIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Eb30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5EbztiIT09YSYmKCJzdHJpbmciIT09dHlwZW9mIGF8fCJtaXRlciIhPT1hJiYiYmV2ZWwiIT09YSYmInJvdW5kIiE9PWE/dC5sYShhLCcibWl0ZXIiLCAiYmV2ZWwiLCBvciAicm91bmQiJyxXLCJzdHJva2VKb2luIik6KHRoaXMuRG89YSx0aGlzLmthKCksdGhpcy5qKCJzdHJva2VKb2luIixiLGEpKSl9KTt0LmcoVywic3Ryb2tlTWl0ZXJMaW1pdCIsVy5wcm90b3R5cGUuWUopOw0KdC5kZWZpbmVQcm9wZXJ0eShXLHtZSjoic3Ryb2tlTWl0ZXJMaW1pdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud219LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMud207aWYoYiE9PWEpaWYoZSYmdC5xKGEsVywic3Ryb2tlTWl0ZXJMaW1pdCIpLDA8YSl7dGhpcy53bT1hO3RoaXMua2EoKTt2YXIgYz10aGlzLlM7YyYmKGMuRGo9TmFOKTt0aGlzLmooInN0cm9rZU1pdGVyTGltaXQiLGIsYSl9ZWxzZSB0LmxhKGEsInZhbCA+IDAiLFcsInN0cm9rZVdpZHRoOnZhbCIpfSk7dC5nKFcsInN0cm9rZURhc2hBcnJheSIsVy5wcm90b3R5cGUuQXgpOw0KdC5kZWZpbmVQcm9wZXJ0eShXLHtBeDoic3Ryb2tlRGFzaEFycmF5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52bX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy52bTtpZihiIT09YSl7bnVsbD09PWF8fEFycmF5LmlzQXJyYXkoYSl8fHQuYmMoYSwiQXJyYXkiLFcsInN0cm9rZURhc2hBcnJheTp2YWwiKTtpZihudWxsIT09YSlmb3IodmFyIGM9YS5sZW5ndGgsZD0wO2Q8YztkKyspe3ZhciBmPWFbZF07Im51bWJlciI9PT10eXBlb2YgZiYmMDxmJiZpc0Zpbml0ZShmKXx8dC5tKCJzdHJva2VEYXNoQXJyYXk6dmFsICIrZisiIG11c3QgYmUgYSBwb3NpdGl2ZSBub24temVybyBudW1iZXIuIil9dGhpcy52bT1hO3RoaXMua2EoKTt0aGlzLmooInN0cm9rZURhc2hBcnJheSIsYixhKX19KTt0LmcoVywic3Ryb2tlRGFzaE9mZnNldCIsVy5wcm90b3R5cGUueUcpOw0KdC5kZWZpbmVQcm9wZXJ0eShXLHt5Rzoic3Ryb2tlRGFzaE9mZnNldCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGR9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubGQ7YiE9PWEmJihlJiZ0LnEoYSxXLCJzdHJva2VEYXNoT2Zmc2V0IiksMDw9YSYmKHRoaXMubGQ9YSx0aGlzLmthKCksdGhpcy5qKCJzdHJva2VEYXNoT2Zmc2V0IixiLGEpKSl9KTt0LmcoVywiZmlndXJlIixXLnByb3RvdHlwZS56Yik7DQp0LmRlZmluZVByb3BlcnR5KFcse3piOiJmaWd1cmUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlBufSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlBuO2lmKGIhPT1hKXtlJiZ0LmkoYSwic3RyaW5nIixXLCJmaWd1cmUiKTt2YXIgYz1ILmJqW2FdOyJmdW5jdGlvbiI9PT10eXBlb2YgYz9jPWE6KGM9SC5ialthLnRvTG93ZXJDYXNlKCldKXx8dC5tKCJVbmtub3duIFNoYXBlLmZpZ3VyZTogIithKTtpZihiIT09Yyl7aWYoYT10aGlzLlMpYS5Eaj1OYU47dGhpcy5Qbj1jO3RoaXMuYWg9ITE7dGhpcy5ZZSgpO3RoaXMuaigiZmlndXJlIixiLGMpfX19KTt0LmcoVywidG9BcnJvdyIsVy5wcm90b3R5cGUub24pOw0KdC5kZWZpbmVQcm9wZXJ0eShXLHtvbjoidG9BcnJvdyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRm99LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuRm87ITA9PT1hP2E9IlN0YW5kYXJkIjohMT09PWEmJihhPSIiKTtpZihiIT09YSl7ZSYmdC5pKGEsInN0cmluZyIsVywidG9BcnJvdyIpO3ZhciBjPUguVEQoYSk7bnVsbD09PWM/dC5tKCJVbmtub3duIFNoYXBlLnRvQXJyb3c6ICIrYSk6YiE9PWMmJih0aGlzLkZvPWMsdGhpcy5haD0hMSx0aGlzLlllKCksZW0odGhpcyksdGhpcy5qKCJ0b0Fycm93IixiLGMpKX19KTt0LmcoVywiZnJvbUFycm93IixXLnByb3RvdHlwZS5Idyk7DQp0LmRlZmluZVByb3BlcnR5KFcse0h3OiJmcm9tQXJyb3cifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlNufSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlNuOyEwPT09YT9hPSJTdGFuZGFyZCI6ITE9PT1hJiYoYT0iIik7aWYoYiE9PWEpe2UmJnQuaShhLCJzdHJpbmciLFcsImZyb21BcnJvdyIpO3ZhciBjPUguVEQoYSk7bnVsbD09PWM/dC5tKCJVbmtub3duIFNoYXBlLmZyb21BcnJvdzogIithKTpiIT09YyYmKHRoaXMuU249Yyx0aGlzLmFoPSExLHRoaXMuWWUoKSxlbSh0aGlzKSx0aGlzLmooImZyb21BcnJvdyIsYixjKSl9fSk7ZnVuY3Rpb24gZW0oYSl7dmFyIGI9YS5oO251bGwhPT1iJiZiLmphLnNifHwoYS5NdD1mbSwiTm9uZSIhPT1hLkZvPyhhLkNmPS0xLGEuUmo9VmIpOiJOb25lIiE9PWEuU24mJihhLkNmPTAsYS5Saj1uZXcgSSgxLVZiLngsVmIueSkpKX0NCnQuZGVmaW5lUHJvcGVydHkoVyx7Rzoic3BvdDEifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk1pfSxmdW5jdGlvbihhKXt0LmwoYSxJLFcsInNwb3QxIik7dmFyIGI9dGhpcy5NaTtiLk0oYSl8fCh0aGlzLk1pPWE9YS5aKCksdGhpcy5mYSgpLHRoaXMuaigic3BvdDEiLGIsYSkpfSk7dC5kZWZpbmVQcm9wZXJ0eShXLHtIOiJzcG90MiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTml9LGZ1bmN0aW9uKGEpe3QubChhLEksVywic3BvdDIiKTt2YXIgYj10aGlzLk5pO2IuTShhKXx8KHRoaXMuTmk9YT1hLlooKSx0aGlzLmZhKCksdGhpcy5qKCJzcG90MiIsYixhKSl9KTt0LmRlZmluZVByb3BlcnR5KFcse0hjOiJwYXJhbWV0ZXIxIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Kcn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5KcjtiIT09YSYmKHRoaXMuSnI9YSx0aGlzLmZhKCksdGhpcy5qKCJwYXJhbWV0ZXIxIixiLGEpKX0pOw0KdC5kZWZpbmVQcm9wZXJ0eShXLHtFdDoicGFyYW1ldGVyMiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuS3J9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuS3I7YiE9PWEmJih0aGlzLktyPWEsdGhpcy5mYSgpLHRoaXMuaigicGFyYW1ldGVyMiIsYixhKSl9KTt0LkEoVyx7UmE6Im5hdHVyYWxCb3VuZHMifSxmdW5jdGlvbigpe2lmKG51bGwhPT10aGlzLk9hKXJldHVybiB0aGlzLmhkLmFzc2lnbih0aGlzLk9hLk9iKSx0aGlzLmhkO3ZhciBhPXRoaXMuQ2E7cmV0dXJuIG5ldyB4KDAsMCxhLndpZHRoLGEuaGVpZ2h0KX0pO3QuZyhXLCJpc1JlY3Rhbmd1bGFyIixXLnByb3RvdHlwZS4kSSk7DQp0LmRlZmluZVByb3BlcnR5KFcseyRJOiJpc1JlY3Rhbmd1bGFyIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hcjtiIT09YSYmKGUmJnQuaShhLCJib29sZWFuIixXLCJpc1JlY3Rhbmd1bGFyIiksdGhpcy5hcj1hLHRoaXMuZmEoKSx0aGlzLmooImlzUmVjdGFuZ3VsYXIiLGIsYSkpfSk7dC5nKFcsInBhdGhPYmplY3QiLFcucHJvdG90eXBlLk1BKTt0LmRlZmluZVByb3BlcnR5KFcse01BOiJwYXRoT2JqZWN0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Ncn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5NcjtiIT09YSYmKGUmJnQubChhLFEsVywicGF0aE9iamVjdCIpLHRoaXMuTXI9YSx0aGlzLmthKCksdGhpcy5qKCJwYXRoT2JqZWN0IixiLGEpKX0pO3QuZyhXLCJnZW9tZXRyeVN0cmV0Y2giLFcucHJvdG90eXBlLkl3KTsNCnQuZGVmaW5lUHJvcGVydHkoVyx7SXc6Imdlb21ldHJ5U3RyZXRjaCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUXF9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuUXE7YiE9PWEmJih0LkFhKGEsUSxXLCJnZW9tZXRyeVN0cmV0Y2giKSx0aGlzLlFxPWEsdGhpcy5qKCJnZW9tZXRyeVN0cmV0Y2giLGIsYSkpfSk7dC5nKFcsImludGVydmFsIixXLnByb3RvdHlwZS5pbnRlcnZhbCk7dC5kZWZpbmVQcm9wZXJ0eShXLHtpbnRlcnZhbDoiaW50ZXJ2YWwifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlVxfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlVxO2UmJnQucShhLFcsImludGVydmFsIik7YT1NYXRoLmZsb29yKGEpO2IhPT1hJiYwPD1hJiYodGhpcy5VcT1hLHRoaXMuaCYmSmkodGhpcy5oKSx0aGlzLmZhKCksdGhpcy5qKCJpbnRlcnZhbCIsYixhKSl9KTsNClcuZGVmaW5lRmlndXJlR2VuZXJhdG9yPWZ1bmN0aW9uKGEsYil7dC5pKGEsInN0cmluZyIsVywiZGVmaW5lRmlndXJlR2VuZXJhdG9yOm5hbWUiKTt0LmkoYiwiZnVuY3Rpb24iLFcsImRlZmluZUZpZ3VyZUdlbmVyYXRvcjpmdW5jIik7dmFyIGM9YS50b0xvd2VyQ2FzZSgpOyIiIT09YSYmIm5vbmUiIT09YyYmYSE9PWN8fHQubSgiU2hhcGUuZGVmaW5lRmlndXJlR2VuZXJhdG9yIG5hbWUgbXVzdCBub3QgYmUgZW1wdHkgb3IgTm9uZSBvciBhbGwtbG93ZXItY2FzZTogIithKTt2YXIgZD1XLkZpZ3VyZUdlbmVyYXRvcnM7ZFthXT1iO2RbY109YX07DQpXLmRlZmluZUFycm93aGVhZEdlb21ldHJ5PWZ1bmN0aW9uKGEsYil7dC5pKGEsInN0cmluZyIsVywiZGVmaW5lQXJyb3doZWFkR2VvbWV0cnk6bmFtZSIpO3QuaShiLCJzdHJpbmciLFcsImRlZmluZUFycm93aGVhZEdlb21ldHJ5OnBhdGhzdHIiKTt2YXIgYz1hLnRvTG93ZXJDYXNlKCk7IiIhPT1hJiYibm9uZSIhPT1jJiZhIT09Y3x8dC5tKCJTaGFwZS5kZWZpbmVBcnJvd2hlYWRHZW9tZXRyeSBuYW1lIG11c3Qgbm90IGJlIGVtcHR5IG9yIE5vbmUgb3IgYWxsLWxvd2VyLWNhc2U6ICIrYSk7dmFyIGQ9Vy5BcnJvd2hlYWRHZW9tZXRyaWVzO2RbYV09YjtkW2NdPWF9Ow0KZnVuY3Rpb24gbmEoKXtRLmNhbGwodGhpcyk7dGhpcy5sZT0iIjt0aGlzLkdiPSJibGFjayI7dGhpcy5UZz0iMTNweCBzYW5zLXNlcmlmIjt0aGlzLlRkPSJzdGFydCI7dGhpcy5ZcT0hMDt0aGlzLldsPXRoaXMuWGw9ITE7dGhpcy5Qaz1nbTt0aGlzLnhtPWhtO3RoaXMuY3Y9dGhpcy5tZj0wO3RoaXMuUm49dGhpcy5mej10aGlzLmd6PW51bGw7dGhpcy5ubz17fTt0aGlzLktxPSExO3RoaXMua2Y9dGhpcy5Taz10aGlzLnhzPW51bGw7dGhpcy5Raj10aGlzLlBqPTA7dGhpcy5BaT1JbmZpbml0eX10LmdhKCJUZXh0QmxvY2siLG5hKTt0LkthKG5hLFEpO25hLmdldEVsbGlwc2lzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuWnN9O25hLnNldEVsbGlwc2lzPWZ1bmN0aW9uKGEpe3QuWnM9YTt0Lkd3PXt9O3QuZ0E9MH07DQpuYS5wcm90b3R5cGUuY2xvbmVQcm90ZWN0ZWQ9ZnVuY3Rpb24oYSl7US5wcm90b3R5cGUuY2xvbmVQcm90ZWN0ZWQuY2FsbCh0aGlzLGEpO2EubGU9dGhpcy5sZTthLkdiPXRoaXMuR2I7YS5UZz10aGlzLlRnO2EuVGQ9dGhpcy5UZDthLllxPXRoaXMuWXE7YS5YbD10aGlzLlhsO2EuV2w9dGhpcy5XbDthLnhtPXRoaXMueG07YS5Qaz10aGlzLlBrO2EubWY9dGhpcy5tZjthLmN2PXRoaXMuY3Y7YS5nej10aGlzLmd6O2EuZno9dGhpcy5mejthLlJuPXRoaXMuUm47YS5ubz10aGlzLm5vO2EuS3E9dGhpcy5LcTthLnhzPXRoaXMueHM7YS5Taz10aGlzLlNrO2Eua2Y9dGhpcy5rZjthLlBqPXRoaXMuUGo7YS5Raj10aGlzLlFqO2EuQWk9dGhpcy5BaX07bmEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDIyPHRoaXMubGUubGVuZ3RoPydUZXh0QmxvY2soIicrdGhpcy5sZS5zdWJzdHJpbmcoMCwyMCkrJyIuLi4pJzonVGV4dEJsb2NrKCInK3RoaXMubGUrJyIpJ307dmFyIGltOw0KbmEuTm9uZT1pbT10LncobmEsIk5vbmUiLDApO3ZhciBqbTtuYS5XcmFwRml0PWptPXQudyhuYSwiV3JhcEZpdCIsMSk7dmFyIGhtO25hLldyYXBEZXNpcmVkU2l6ZT1obT10LncobmEsIldyYXBEZXNpcmVkU2l6ZSIsMik7dmFyIGdtO25hLk92ZXJmbG93Q2xpcD1nbT10LncobmEsIk92ZXJmbG93Q2xpcCIsMCk7dmFyIGttO25hLk92ZXJmbG93RWxsaXBzaXM9a209dC53KG5hLCJPdmVyZmxvd0VsbGlwc2lzIiwxKTtuYS5wcm90b3R5cGUuZmE9ZnVuY3Rpb24oKXtRLnByb3RvdHlwZS5mYS5jYWxsKHRoaXMpO3RoaXMuZno9dGhpcy5nej1udWxsfTt0LmcobmEsImZvbnQiLG5hLnByb3RvdHlwZS5mb250KTsNCnQuZGVmaW5lUHJvcGVydHkobmEse2ZvbnQ6ImZvbnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlRnfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlRnO2IhPT1hJiYoZSYmdC5pKGEsInN0cmluZyIsbmEsImZvbnQiKSx0aGlzLlRnPWEsdGhpcy5Sbj1udWxsLHRoaXMuZmEoKSx0aGlzLmooImZvbnQiLGIsYSkpfSk7dC5nKG5hLCJ0ZXh0IixuYS5wcm90b3R5cGUudGV4dCk7dC5kZWZpbmVQcm9wZXJ0eShuYSx7dGV4dDoidGV4dCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGV9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubGU7YT1udWxsIT09YSYmdm9pZCAwIT09YT9hLnRvU3RyaW5nKCk6IiI7YiE9PWEmJih0aGlzLmxlPWEsdGhpcy5mYSgpLHRoaXMuaigidGV4dCIsYixhKSl9KTt0LmcobmEsInRleHRBbGlnbiIsbmEucHJvdG90eXBlLnRleHRBbGlnbik7DQp0LmRlZmluZVByb3BlcnR5KG5hLHt0ZXh0QWxpZ246InRleHRBbGlnbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVGR9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuVGQ7YiE9PWEmJihlJiZ0LmkoYSwic3RyaW5nIixuYSwidGV4dEFsaWduIiksInN0YXJ0Ij09PWF8fCJlbmQiPT09YXx8ImxlZnQiPT09YXx8InJpZ2h0Ij09PWF8fCJjZW50ZXIiPT09YT8odGhpcy5UZD1hLHRoaXMua2EoKSx0aGlzLmooInRleHRBbGlnbiIsYixhKSk6dC5sYShhLCcic3RhcnQiLCAiZW5kIiwgImxlZnQiLCAicmlnaHQiLCBvciAiY2VudGVyIicsbmEsInRleHRBbGlnbiIpKX0pOw0KdC5BKG5hLHtSYToibmF0dXJhbEJvdW5kcyJ9LGZ1bmN0aW9uKCl7aWYoIXRoaXMuaGQuTigpKXt2YXIgYT1sbSh0aGlzLHRoaXMubGUse30sOTk5OTk5KS53aWR0aCxiPW1tKHRoaXMsYSx7fSksYz10aGlzLkNhO2lzTmFOKGMud2lkdGgpfHwoYT1jLndpZHRoKTtpc05hTihjLmhlaWdodCl8fChiPWMuaGVpZ2h0KTtWYSh0aGlzLmhkLGEsYil9cmV0dXJuIHRoaXMuaGR9KTt0LmcobmEsImlzTXVsdGlsaW5lIixuYS5wcm90b3R5cGUuVHcpO3QuZGVmaW5lUHJvcGVydHkobmEse1R3OiJpc011bHRpbGluZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWXF9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuWXE7YiE9PWEmJihlJiZ0LmkoYSwiYm9vbGVhbiIsbmEsImlzTXVsdGlsaW5lIiksdGhpcy5ZcT1hLHRoaXMuZmEoKSx0aGlzLmooImlzTXVsdGlsaW5lIixiLGEpKX0pO3QuZyhuYSwiaXNVbmRlcmxpbmUiLG5hLnByb3RvdHlwZS5jSik7DQp0LmRlZmluZVByb3BlcnR5KG5hLHtjSjoiaXNVbmRlcmxpbmUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlhsfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlhsO2IhPT1hJiYoZSYmdC5pKGEsImJvb2xlYW4iLG5hLCJpc1VuZGVybGluZSIpLHRoaXMuWGw9YSx0aGlzLmthKCksdGhpcy5qKCJpc1VuZGVybGluZSIsYixhKSl9KTt0LmcobmEsImlzU3RyaWtldGhyb3VnaCIsbmEucHJvdG90eXBlLmFKKTt0LmRlZmluZVByb3BlcnR5KG5hLHthSjoiaXNTdHJpa2V0aHJvdWdoIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5XbH0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5XbDtiIT09YSYmKGUmJnQuaShhLCJib29sZWFuIixuYSwiaXNTdHJpa2V0aHJvdWdoIiksdGhpcy5XbD1hLHRoaXMua2EoKSx0aGlzLmooImlzU3RyaWtldGhyb3VnaCIsYixhKSl9KTt0LmcobmEsIndyYXAiLG5hLnByb3RvdHlwZS5yQik7DQp0LmRlZmluZVByb3BlcnR5KG5hLHtyQjoid3JhcCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueG19LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueG07YiE9PWEmJihlJiZ0LkFhKGEsbmEsbmEsIndyYXAiKSx0aGlzLnhtPWEsdGhpcy5mYSgpLHRoaXMuaigid3JhcCIsYixhKSl9KTt0LmcobmEsIm92ZXJmbG93IixuYS5wcm90b3R5cGUub3ZlcmZsb3cpO3QuZGVmaW5lUHJvcGVydHkobmEse292ZXJmbG93OiJvdmVyZmxvdyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUGt9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuUGs7YiE9PWEmJihlJiZ0LkFhKGEsbmEsbmEsIm92ZXJmbG93IiksdGhpcy5Qaz1hLHRoaXMuZmEoKSx0aGlzLmooIm92ZXJmbG93IixiLGEpKX0pO3QuZyhuYSwic3Ryb2tlIixuYS5wcm90b3R5cGUuc3Ryb2tlKTsNCnQuZGVmaW5lUHJvcGVydHkobmEse3N0cm9rZToic3Ryb2tlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5HYn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5HYjtiIT09YSYmKGUmJm51bGwhPT1hJiZ0LlRvKGEsIlRleHRCbG9jay5zdHJva2UiKSxhIGluc3RhbmNlb2YgZmEmJmEuZnJlZXplKCksdGhpcy5HYj1hLHRoaXMua2EoKSx0aGlzLmooInN0cm9rZSIsYixhKSl9KTt0LkEobmEse29GOiJsaW5lQ291bnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm1mfSk7dC5nKG5hLCJlZGl0YWJsZSIsbmEucHJvdG90eXBlLnl3KTt0LmRlZmluZVByb3BlcnR5KG5hLHt5dzoiZWRpdGFibGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLktxfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLktxO2IhPT1hJiYoZSYmdC5pKGEsImJvb2xlYW4iLG5hLCJlZGl0YWJsZSIpLHRoaXMuS3E9YSx0aGlzLmooImVkaXRhYmxlIixiLGEpKX0pO3QuZyhuYSwidGV4dEVkaXRvciIsbmEucHJvdG90eXBlLmpCKTsNCnQuZGVmaW5lUHJvcGVydHkobmEse2pCOiJ0ZXh0RWRpdG9yIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54c30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy54cztiIT09YSYmKGEgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8dC5tKCJ0ZXh0RWRpdG9yIG11c3QgYmUgYW4gSFRNTEVsZW1lbnQiKSx0aGlzLnhzPWEsdGhpcy5qKCJ0ZXh0RWRpdG9yIixiLGEpKX0pO3QuZyhuYSwiZXJyb3JGdW5jdGlvbiIsbmEucHJvdG90eXBlLiRzKTt0LmRlZmluZVByb3BlcnR5KG5hLHskczoiZXJyb3JGdW5jdGlvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2Z9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMua2Y7YiE9PWEmJihudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIixuYSwiZXJyb3JGdW5jdGlvbiIpLHRoaXMua2Y9YSx0aGlzLmooImVycm9yRnVuY3Rpb24iLGIsYSkpfSk7ZnVuY3Rpb24gd2soYSxiKXt2YXIgYz1hLlRnO251bGwhPT1jJiZiLmN1IT09YyYmKGIuZm9udD1jLGIuY3U9Yyl9DQpuYS5wcm90b3R5cGUuZWw9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT09dGhpcy5HYiYmMCE9PXRoaXMubGUubGVuZ3RoJiZudWxsIT09dGhpcy5UZyl7dmFyIGM9dGhpcy5SYS53aWR0aCxkPXpoKHRoaXMpO2EudGV4dEFsaWduPXRoaXMuVGQ7eGsodGhpcyxhLHRoaXMuR2IsITApOyh0aGlzLlhsfHx0aGlzLldsKSYmeGsodGhpcyxhLHRoaXMuR2IsITEpO3ZhciBmPXRoaXMubm8sZz0wLGg9ITEsaz10LmxjKDAsMCk7dGhpcy5tZS5UYShrKTt2YXIgbD10LmxjKDAsZCk7dGhpcy5tZS5UYShsKTt2YXIgbT1rLlpqKGwpO3QuQihrKTt0LkIobCk7az1iLnNjYWxlOzg+bSprKmsmJihoPSEwKTtiLlNnIT09YSYmKGg9ITEpO2Zvcih2YXIgbT10aGlzLlBqLGs9dGhpcy5RaixsPWYudWcubGVuZ3RoLG49MDtuPGw7bisrKXt2YXIgcD1mLnVnW25dLHE9Zi5PZltuXTtwPmMmJihwPWMpO3ZhciBnPWcrbSxyPXEscT1hLHM9Zyx1PWMsdj1kLEQ9MDtoPygic3RhcnQiPT09dGhpcy5UZHx8ImxlZnQiPT09DQp0aGlzLlRkP0Q9MDoiZW5kIj09PXRoaXMuVGR8fCJyaWdodCI9PT10aGlzLlRkP0Q9dS1wOiJjZW50ZXIiPT09dGhpcy5UZD9EPSh1LXApLzI6dC5tKCJ0ZXh0QWxpZ24gbXVzdCBiZSBzdGFydCwgZW5kLCBsZWZ0LCByaWdodCwgb3IgY2VudGVyIikscS5maWxsUmVjdCgwK0QscyswLjI1KnYscCwxKSk6KCJzdGFydCI9PT10aGlzLlRkfHwibGVmdCI9PT10aGlzLlRkP0Q9MDoiZW5kIj09PXRoaXMuVGR8fCJyaWdodCI9PT10aGlzLlRkP0Q9dToiY2VudGVyIj09PXRoaXMuVGQ/RD11LzI6dC5tKCJ0ZXh0QWxpZ24gbXVzdCBiZSBzdGFydCwgZW5kLCBsZWZ0LCByaWdodCwgb3IgY2VudGVyIikscS5maWxsVGV4dChyLDArRCxzK3YtMC4yNSp2KSxyPXYvMjB8MCx0aGlzLlhsJiYoImVuZCI9PT10aGlzLlRkfHwicmlnaHQiPT09dGhpcy5UZD9ELT1wOiJjZW50ZXIiPT09dGhpcy5UZCYmKEQtPXAvMikscS5iZWdpblBhdGgoKSxxLmxpbmVXaWR0aD1yLHEubW92ZVRvKDArRCxzK3YtMC4yKg0KdikscS5saW5lVG8oMCtEK3Ascyt2LTAuMip2KSxxLnN0cm9rZSgpKSx0aGlzLldsJiYocS5iZWdpblBhdGgoKSxxLmxpbmVXaWR0aD1yLHM9cyt2LXYvMi4yfDAsMCE9PXIlMiYmKHMrPTAuNSkscS5tb3ZlVG8oMCxzKSxxLmxpbmVUbygwK3AscykscS5zdHJva2UoKSkpO2crPWQra319fTsNCm5hLnByb3RvdHlwZS50dD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZj17fSxnPTAsaD0wO2lmKGlzTmFOKHRoaXMuQ2Eud2lkdGgpKXtnPXRoaXMubGU7aWYoMD09PWcubGVuZ3RoKWc9MDtlbHNlIGlmKHRoaXMuVHcpe2Zvcih2YXIgaz1oPTAsbD0hMSxtPXtxaDowfTshbDspe3ZhciBuPW5tKGcsayxtKTstMT09PW4mJihuPWcubGVuZ3RoLGw9ITApO2s9b20oZy5zdWJzdHIoayxuLWspLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKSx0aGlzLlRnKTtrPmgmJihoPWspO2s9bS5xaH1nPWh9ZWxzZSBoPW5tKGcsMCx7fSksMDw9aCYmKGc9Zy5zdWJzdHIoMCxoKSksZz1rPW9tKGcsdGhpcy5UZyk7Zz1NYXRoLm1pbihnLGEvdGhpcy5zY2FsZSk7Zz1NYXRoLm1heCg4LGcpfWVsc2UgZz10aGlzLkNhLndpZHRoO3RoaXMuaWEmJihnPU1hdGgubWluKGcsdGhpcy5pYS5IZS53aWR0aCksZz1NYXRoLm1heChnLHRoaXMuaWEuVmYud2lkdGgpKTtoPW1tKHRoaXMsZyxmKTttPWg9aXNOYU4odGhpcy5DYS5oZWlnaHQpPw0KTWF0aC5taW4oaCxiL3RoaXMuc2NhbGUpOnRoaXMuQ2EuaGVpZ2h0O2lmKDAhPT1mLkFnJiYxIT09Zi5PZi5sZW5ndGgmJnRoaXMuUGs9PT1rbSYmKGI9dGhpcy5UZyxsPXRoaXMuUGs9PT1rbT9wbShiKTowLGs9dGhpcy5Qait0aGlzLlFqLGs9TWF0aC5tYXgoMCx6aCh0aGlzKStrKSxtPU1hdGgubWF4KE1hdGguZmxvb3IobS9rKS0xLDApLCEobSsxPj1mLk9mLmxlbmd0aCkpKXtrPWYuT2ZbbV07Zm9yKGE9TWF0aC5tYXgoMSxhLWwpO29tKGssYik+YSYmMTxrLmxlbmd0aDspaz1rLnN1YnN0cigwLGsubGVuZ3RoLTEpO2srPXQuWnM7YT1vbShrLGIpO2YuT2ZbbV09aztmLk9mPWYuT2Yuc2xpY2UoMCxtKzEpO2YudWdbbV09YTtmLnVnPWYudWcuc2xpY2UoMCxtKzEpO2YucWg9Zi5PZi5sZW5ndGg7Zi5BZz1NYXRoLm1heChmLkFnLGEpfWlmKHRoaXMuckI9PT1qbXx8aXNOYU4odGhpcy5DYS53aWR0aCkpZz1mLkFnLGlzTmFOKHRoaXMuQ2Eud2lkdGgpJiYoZz1NYXRoLm1heCg4LGcpKTsNCmc9TWF0aC5tYXgoYyxnKTtoPU1hdGgubWF4KGQsaCk7VmEodGhpcy5oZCxnLGgpO2hrKHRoaXMsMCwwLGcsaCk7dGhpcy5ubz1mfTtuYS5wcm90b3R5cGUuVWo9ZnVuY3Rpb24oYSxiLGMsZCl7b2sodGhpcyxhLGIsYyxkKX07DQpmdW5jdGlvbiBsbShhLGIsYyxkKXtiPWIucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO3ZvaWQgMD09PWMuQWcmJihjLkFnPTApO3ZvaWQgMD09PWMudWcmJihjLnVnPVtdKTt2b2lkIDA9PT1jLk9mJiYoYy5PZj1bXSk7dmFyIGY9MCxnLGgsaz1hLlRnO2c9YS5QaithLlFqO3ZhciBsPU1hdGgubWF4KDAsemgoYSkrZyksbT1hLlBrPT09a20/cG0oayk6MDtpZighKGEubWY+PWEuQWkpKXtpZihhLnhtPT09aW0pe2MucWg9MTtnPW9tKGIsayk7aWYoMD09PW18fGc8PWQpcmV0dXJuIGMuQWc9ZyxjLnVnLnB1c2goYy5BZyksYy5PZi5wdXNoKGIpLG5ldyBnYShnLGwpO3ZhciBuPXFtKGIpO2I9Yi5zdWJzdHIobi5sZW5ndGgpO2g9cW0oYik7Zm9yKGc9b20obitoLGspOzA8aC5sZW5ndGgmJmc8PWQ7KW4rPWgsYj1iLnN1YnN0cihoLmxlbmd0aCksaD1xbShiKSxnPW9tKChuK2gpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKSxrKTtuKz1oLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTtmb3IoZD0NCk1hdGgubWF4KDEsZC1tKTtvbShuLGspPmQmJjE8bi5sZW5ndGg7KW49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKTtuKz10LlpzO2g9b20obixrKTtjLnVnLnB1c2goaCk7Yy5BZz1oO2MuT2YucHVzaChuKTtyZXR1cm4gbmV3IGdhKGgsbCl9bT0wOzA9PT1iLmxlbmd0aCYmKG09MSxjLnVnLnB1c2goMCksYy5PZi5wdXNoKGIpKTtmb3IoOzA8Yi5sZW5ndGg7KXtuPXFtKGIpO2ZvcihiPWIuc3Vic3RyKG4ubGVuZ3RoKTtvbShuLGspPmQ7KXt2YXIgcD0xO2c9b20obi5zdWJzdHIoMCxwKSxrKTtmb3IoaD0wO2c8PWQ7KXArKyxoPWcsZz1vbShuLnN1YnN0cigwLHApLGspOzE9PT1wPyhjLnVnW2EubWYrbV09ZyxmPU1hdGgubWF4KGYsZykpOihjLnVnW2EubWYrbV09aCxmPU1hdGgubWF4KGYsaCkpO3AtLTsxPnAmJihwPTEpO2MuT2ZbYS5tZittXT1uLnN1YnN0cigwLHApO20rKztuPW4uc3Vic3RyKHApO2lmKGEubWYrbT09PWEuQWkpYnJlYWt9aD1xbShiKTtmb3IoZz1vbShuK2gsayk7MDwNCmgubGVuZ3RoJiZnPD1kOyluKz1oLGI9Yi5zdWJzdHIoaC5sZW5ndGgpLGg9cW0oYiksZz1vbSgobitoKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIiksayk7bj1uLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTtpZigiIiE9PW4mJigwPT09aC5sZW5ndGg/KGMudWcucHVzaChnKSxmPU1hdGgubWF4KGYsZykpOihoPW9tKG4sayksYy51Zy5wdXNoKGgpLGY9TWF0aC5tYXgoZixoKSksYy5PZi5wdXNoKG4pLG0rKyxhLm1mK209PT1hLkFpKSlicmVha31jLnFoPU1hdGgubWluKGEuQWksbSk7Yy5BZz1NYXRoLm1heChjLkFnLGYpO3JldHVybiBuZXcgZ2EoYy5BZyxsKmMucWgpfX1mdW5jdGlvbiBxbShhKXtmb3IodmFyIGI9YS5sZW5ndGgsYz0wO2M8YiYmIiAiIT09YS5jaGFyQXQoYyk7KWMrKztmb3IoO2M8YiYmIiAiPT09YS5jaGFyQXQoYyk7KWMrKztyZXR1cm4gYz49Yj9hOmEuc3Vic3RyKDAsYyl9DQpmdW5jdGlvbiBvbShhLGIpe3QuVHAhPT1iJiYodC5rbi5mb250PWIsdC5UcD1iKTtyZXR1cm4gdC5rbi5tZWFzdXJlVGV4dChhKS53aWR0aH1mdW5jdGlvbiB6aChhKXtpZihudWxsIT09YS5SbilyZXR1cm4gYS5Sbjt2YXIgYj1hLlRnO3QuVHAhPT1iJiYodC5rbi5mb250PWIsdC5UcD1iKTt2YXIgYz0wO3ZvaWQgMCE9PXQuaEFbYl0mJjVFMz50LkVFP2M9dC5oQVtiXTooYz0xLjMqdC5rbi5tZWFzdXJlVGV4dCgiTSIpLndpZHRoLHQuaEFbYl09Yyx0LkVFKyspO3JldHVybiBhLlJuPWN9ZnVuY3Rpb24gcG0oYSl7dC5UcCE9PWEmJih0LmtuLmZvbnQ9YSx0LlRwPWEpO3ZhciBiPTA7dm9pZCAwIT09dC5Hd1thXSYmNUUzPnQuZ0E/Yj10Lkd3W2FdOihiPXQua24ubWVhc3VyZVRleHQodC5acykud2lkdGgsdC5Hd1thXT1iLHQuZ0ErKyk7cmV0dXJuIGJ9DQpmdW5jdGlvbiBubShhLGIsYyl7dm9pZCAwPT09Yy5xaCYmKGMucWg9MCk7dmFyIGQ9YS5pbmRleE9mKCJcciIsYik7LTE9PT1kJiYoZD1hLmluZGV4T2YoIlxuIixiKSk7MDw9ZCYmKGMucWg9IlxyIj09PWFbZF0mJmQrMTxhLmxlbmd0aCYmIlxuIj09PWFbZCsxXT9kKzI6ZCsxKTtyZXR1cm4gZH0NCmZ1bmN0aW9uIG1tKGEsYixjKXt2YXIgZD1hLmxlLGY9YS5QaithLlFqLGY9TWF0aC5tYXgoMCx6aChhKStmKTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIGMuQWc9MCxhLm1mPTEsZjtpZighYS5Udyl7dmFyIGc9bm0oZCwwLHt9KTswPD1nJiYoZD1kLnN1YnN0cigwLGcpKX1mb3IodmFyIGc9MCxoPWEubWY9MCxrPS0xLGw9e3FoOjB9LG09ITE7IW07KWs9bm0oZCxoLGwpLC0xPT09ayYmKGs9ZC5sZW5ndGgsbT0hMCksaDw9ayYmKGg9ZC5zdWJzdHIoaCxrLWgpLGEueG0hPT1pbT8oYy5xaD0wLGg9bG0oYSxoLGMsYiksZys9aC5oZWlnaHQsYS5tZis9Yy5xaCk6KGxtKGEsaCxjLGIpLGcrPWYsYS5tZisrKSxhLm1mPT09YS5BaSYmKG09ITApKSxoPWwucWg7cmV0dXJuIGEuY3Y9Z310LmcobmEsInRleHRWYWxpZGF0aW9uIixuYS5wcm90b3R5cGUuVnQpOw0KdC5kZWZpbmVQcm9wZXJ0eShuYSx7VnQ6InRleHRWYWxpZGF0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Ta30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5TaztiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLG5hLCJ0ZXh0VmFsaWRhdGlvbiIpLHRoaXMuU2s9YSx0aGlzLmooInRleHRWYWxpZGF0aW9uIixiLGEpKX0pO3QuZyhuYSwic3BhY2luZ0Fib3ZlIixuYS5wcm90b3R5cGUuVUopO3QuZGVmaW5lUHJvcGVydHkobmEse1VKOiJzcGFjaW5nQWJvdmUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlBqfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlBqO2IhPT1hJiYodGhpcy5Qaj1hLHRoaXMuaigic3BhY2luZ0Fib3ZlIixiLGEpKX0pO3QuZyhuYSwic3BhY2luZ0JlbG93IixuYS5wcm90b3R5cGUuVkopOw0KdC5kZWZpbmVQcm9wZXJ0eShuYSx7Vko6InNwYWNpbmdCZWxvdyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUWp9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuUWo7YiE9PWEmJih0aGlzLlFqPWEsdGhpcy5qKCJzcGFjaW5nQmVsb3ciLGIsYSkpfSk7dC5nKG5hLCJtYXhMaW5lcyIsbmEucHJvdG90eXBlLm9KKTt0LmRlZmluZVByb3BlcnR5KG5hLHtvSjoibWF4TGluZXMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkFpfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkFpO2IhPT1hJiYodGhpcy5BaT1hLHRoaXMuaigibWF4TGluZXMiLGIsYSkpfSk7ZnVuY3Rpb24gVmsoKXtRLmNhbGwodGhpcyk7dGhpcy5kZz1udWxsO3RoaXMucXM9IiI7dGhpcy5Paj0obmV3IHgoTmFOLE5hTixOYU4sTmFOKSkuZnJlZXplKCk7dGhpcy5Xbj1DYzt0aGlzLnZzPXRoaXMua2Y9bnVsbDt0aGlzLlV1PXRoaXMuTHU9dGhpcy5kbT0hMTt0aGlzLmhDPSEwO3RoaXMuem89bnVsbH10LmdhKCJQaWN0dXJlIixWayk7DQp0LkthKFZrLFEpO3ZhciBybTtWay5jbGVhckNhY2hlPXJtPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPSIiKTt0LmkoYSwic3RyaW5nIixWaywiY2xlYXJDYWNoZTp1cmwiKTsiIiE9PWE/dC5qdFthXSYmKGRlbGV0ZSB0Lmp0W2FdLHQuTXctLSk6KHQuanQ9e30sdC5Ndz0wKX07VmsucHJvdG90eXBlLmNsb25lUHJvdGVjdGVkPWZ1bmN0aW9uKGEpe1EucHJvdG90eXBlLmNsb25lUHJvdGVjdGVkLmNhbGwodGhpcyxhKTthLmVsZW1lbnQ9dGhpcy5kZzthLnFzPXRoaXMucXM7YS5Pai5hc3NpZ24odGhpcy5Paik7YS5Xbj10aGlzLlduO2Eua2Y9dGhpcy5rZjthLnpvPXRoaXMuem99O1ZrLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJQaWN0dXJlKCIrdGhpcy5zb3VyY2UrIikjIit0Lm9kKHRoaXMpfTt0LmcoVmssImVsZW1lbnQiLFZrLnByb3RvdHlwZS5lbGVtZW50KTsNCnQuZGVmaW5lUHJvcGVydHkoVmsse2VsZW1lbnQ6ImVsZW1lbnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmRnfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmRnO2lmKGIhPT1hKXthIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8YSBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnR8fGEgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dC5tKCJQaWN0dXJlLmVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBJbWFnZSwgQ2FudmFzLCBvciBWaWRlby4iKTt0aGlzLkx1PSExO3ZhciBjPXRoaXM7YSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50P3RoaXMuVXU9ITA6KHRoaXMuVXU9ITEsYS5vbmVycm9yPWZ1bmN0aW9uKGEpe2MuTHU9ITA7bnVsbCE9PWMua2YmJmMua2YoYyxhKX0pO3RoaXMuZGc9YTshMD09PWEuY29tcGxldGV8fHZvaWQgMD09PWEuY29tcGxldGU/KHRoaXMuZG09ITAsdGhpcy5DYS5OKCl8fChsayh0aGlzLCExKSx0aGlzLmZhKCkpKToodC5uQi5wdXNoKHRoaXMpLA0KbnVsbD09PXQubHgmJih0Lmx4PXNldEludGVydmFsKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPVtdLGI9dC5uQixjPWIubGVuZ3RoLGg9MDtoPGM7aCsrKXt2YXIgaz1iW2hdLGw7bD1rO3ZhciBtPWwuZGc7aWYobSlpZihtLmNvbXBsZXRlKXtsLmRtPSEwO2wuQ2EuTigpfHwobGsobCwhMSksbC5mYSgpKTtpZihsLmgpbC5DYS5OKCl8fGwuaC5PYygpLGwuaC5rYSgpO2Vsc2V7bD10LmFBO3ZhciBuPWwubGVuZ3RoO2lmKDA9PT1uKWZvcih2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY2FudmFzIikscD1uLmxlbmd0aCxtPTA7bTxwO20rKyl7dmFyIHE9blttXTtxLnBhcmVudEVsZW1lbnQmJnEucGFyZW50RWxlbWVudC5VJiZsLnB1c2gocS5wYXJlbnRFbGVtZW50LlUpfW49bC5sZW5ndGg7Zm9yKG09MDttPG47bSsrKWxbbV0ua2EoKX1sPSEwfWVsc2UgbD0hMTtlbHNlIGw9ITA7bHx8YS5wdXNoKGspfTA9PT1hLmxlbmd0aCYmKGNsZWFySW50ZXJ2YWwodC5seCksdC5seD0NCm51bGwpO3QubkI9YX0sMjAwKSkpO3RoaXMuaigiZWxlbWVudCIsYixhKTt0aGlzLmthKCl9fSk7dC5nKFZrLCJzb3VyY2UiLFZrLnByb3RvdHlwZS5zb3VyY2UpOw0KdC5kZWZpbmVQcm9wZXJ0eShWayx7c291cmNlOiJzb3VyY2UifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnFzfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnFzO2lmKGIhPT1hKXt0LmkoYSwic3RyaW5nIixWaywic291cmNlIik7dGhpcy5xcz1hO3RoaXMuTHU9ITE7dmFyIGM9dC5qdDtpZih2b2lkIDAhPT1jW2FdKXRoaXMuZWxlbWVudD1jW2FdO2Vsc2V7MTA8dC5NdyYmKHJtKCksYz10Lmp0KTt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTtkLnNyYz1hO3ZhciBmPWQuc3JjLGc9dGhpcy56bztkLmNyb3NzT3JpZ2luPW51bGw9PT1nPzA9PT1mLmluZGV4T2YoImRhdGEiKXx8MD09PWYuaW5kZXhPZigiZmlsZSIpP251bGw6ImFub255bW91cyI6ZygpO2NbYV09ZDt0Lk13Kys7ZCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQmJih0aGlzLmVsZW1lbnQ9ZCl9dGhpcy5rYSgpO3RoaXMuaigic291cmNlIixiLGEpfX0pOw0KdC5nKFZrLCJzb3VyY2VDcm9zc09yaWdpbiIsVmsucHJvdG90eXBlLlNKKTt0LmRlZmluZVByb3BlcnR5KFZrLHtTSjoic291cmNlQ3Jvc3NPcmlnaW4ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnpvfSxmdW5jdGlvbihhKXt0aGlzLnpvIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLFZrLCJzb3VyY2VDcm9zc09yaWdpbiIpLHRoaXMuem89YSx0aGlzLmVsZW1lbnQmJih0aGlzLmVsZW1lbnQuY3Jvc3NPcmlnaW49bnVsbD09PWE/MD09PWEuaW5kZXhPZigiZGF0YSIpfHxhLmluZGV4T2YoImZpbGUiKT9udWxsOiJhbm9ueW1vdXMiOmEoKSkpfSk7dC5nKFZrLCJzb3VyY2VSZWN0IixWay5wcm90b3R5cGUuZmkpOw0KdC5kZWZpbmVQcm9wZXJ0eShWayx7Zmk6InNvdXJjZVJlY3QifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk9qfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLk9qO2IuTShhKXx8KHQubChhLHgsVmssInNvdXJjZVJlY3QiKSx0aGlzLk9qPWE9YS5aKCksdGhpcy5rYSgpLHRoaXMuaigic291cmNlUmVjdCIsYixhKSl9KTt0LmcoVmssImltYWdlU3RyZXRjaCIsVmsucHJvdG90eXBlLlJJKTt0LmRlZmluZVByb3BlcnR5KFZrLHtSSToiaW1hZ2VTdHJldGNoIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Xbn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5XbjtiIT09YSYmKHQuQWEoYSxRLFZrLCJpbWFnZVN0cmV0Y2giKSx0aGlzLlduPWEsdGhpcy5rYSgpLHRoaXMuaigiaW1hZ2VTdHJldGNoIixiLGEpKX0pO3QuZyhWaywiZXJyb3JGdW5jdGlvbiIsVmsucHJvdG90eXBlLiRzKTsNCnQuZGVmaW5lUHJvcGVydHkoVmsseyRzOiJlcnJvckZ1bmN0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5rZjtpZihiIT09YSl7bnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsVmssImVycm9yRnVuY3Rpb24iKTt0aGlzLmtmPWE7aWYodGhpcy5kZyl7dmFyIGM9dGhpczt0aGlzLmRnLm9uZXJyb3I9ZnVuY3Rpb24oYSl7bnVsbCE9PWMua2YmJmMua2YoYyxhKX19dGhpcy5qKCJlcnJvckZ1bmN0aW9uIixiLGEpfX0pOw0KVmsucHJvdG90eXBlLmVsPWZ1bmN0aW9uKGEsYil7aWYoIWIuTW4pe2lmKG51bGw9PT10aGlzLnZzKWlmKG51bGw9PT10aGlzLmRnKXRoaXMudnM9ITE7ZWxzZXt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOzAhPT10aGlzLmRnLndpZHRoJiYwIT09dGhpcy5kZy5oZWlnaHQmJmMuZHJhd0ltYWdlKHRoaXMuZGcsMCwwKTt0cnl7Yy5nZXRJbWFnZURhdGEoMCwwLDEsMSksdGhpcy52cz0hMX1jYXRjaChkKXt0aGlzLnZzPSEwfX1pZih0aGlzLnZzKXJldHVybn1pZih0aGlzLmRtJiYhdGhpcy5MdSYmKGM9dGhpcy5kZyxudWxsIT09Yykpe3ZhciBmPWMuc3JjO251bGwhPT1mJiYiIiE9PWZ8fHQubSgiRWxlbWVudCBoYXMgbm8gc291cmNlIGF0dHJpYnV0ZTogIitjKTt2YXIgZj10aGlzLlJhLGc9MCxoPTAsaz10aGlzLlV1LGw9az8rYy53aWR0aDpjLm5hdHVyYWxXaWR0aCxrPWs/K2MuaGVpZ2h0OmMubmF0dXJhbEhlaWdodDt2b2lkIDA9PT0NCmwmJmMudmlkZW9XaWR0aCYmKGw9Yy52aWRlb1dpZHRoKTt2b2lkIDA9PT1rJiZjLnZpZGVvSGVpZ2h0JiYoaz1jLnZpZGVvSGVpZ2h0KTtsPWx8fGYud2lkdGg7az1rfHxmLmhlaWdodDtpZigwIT09bCYmMCE9PWspe3RoaXMuZmkuTigpJiYoZz10aGlzLk9qLngsaD10aGlzLk9qLnksbD10aGlzLk9qLndpZHRoLGs9dGhpcy5Pai5oZWlnaHQpO3ZhciBtPWwsbj1rLHA9dGhpcy5Xbjtzd2l0Y2gocCl7Y2FzZSBVZzppZih0aGlzLmZpLk4oKSlicmVhaztnKz1NYXRoLm1heCgobS1mLndpZHRoKS8yLDApO2grPU1hdGgubWF4KChuLWYuaGVpZ2h0KS8yLDApO2w9TWF0aC5taW4oZi53aWR0aCxtKTtrPU1hdGgubWluKGYuaGVpZ2h0LG4pO2JyZWFrO2Nhc2UgQ2M6bT1mLndpZHRoO249Zi5oZWlnaHQ7YnJlYWs7Y2FzZSBXZzpjYXNlIFhnOnA9PT1XZz8ocD1NYXRoLm1pbihmLmhlaWdodC9uLGYud2lkdGgvbSksbSo9cCxuKj1wKTpwPT09WGcmJihwPU1hdGgubWF4KGYuaGVpZ2h0L24sZi53aWR0aC8NCm0pLG0qPXAsbio9cCxnKz0obS1mLndpZHRoKS8yLGgrPShuLWYuaGVpZ2h0KS8yLGwqPTEvKG0vZi53aWR0aCksayo9MS8obi9mLmhlaWdodCksbT1mLndpZHRoLG49Zi5oZWlnaHQpfXRyeXthLmRyYXdJbWFnZShjLGcsaCxsLGssTWF0aC5tYXgoKGYud2lkdGgtbSkvMiwwKSxNYXRoLm1heCgoZi5oZWlnaHQtbikvMiwwKSxNYXRoLm1pbihmLndpZHRoLG0pLE1hdGgubWluKGYuaGVpZ2h0LG4pKX1jYXRjaChxKXtlJiZ0aGlzLmhDJiZ0LnRyYWNlKHEudG9TdHJpbmcoKSksdGhpcy5oQz0hMX19fX07dC5BKFZrLHtSYToibmF0dXJhbEJvdW5kcyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGR9KTsNClZrLnByb3RvdHlwZS50dD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZj10aGlzLkNhLGc9a2sodGhpcyksaD10aGlzLmRnLGs9dGhpcy5VdTtpZihrfHwhdGhpcy5kbSYmaCYmaC5jb21wbGV0ZSl0aGlzLmRtPSEwO251bGw9PT1oJiYoaXNGaW5pdGUoYSl8fChhPTApLGlzRmluaXRlKGIpfHwoYj0wKSk7aXNGaW5pdGUoZi53aWR0aCl8fGc9PT1DY3x8Zz09PWNrPyhpc0Zpbml0ZShhKXx8KGE9dGhpcy5maS5OKCk/dGhpcy5maS53aWR0aDprPytoLndpZHRoOmgubmF0dXJhbFdpZHRoKSxjPTApOm51bGwhPT1oJiYhMSE9PXRoaXMuZG0mJihhPXRoaXMuZmkuTigpP3RoaXMuZmkud2lkdGg6az8raC53aWR0aDpoLm5hdHVyYWxXaWR0aCk7aXNGaW5pdGUoZi5oZWlnaHQpfHxnPT09Q2N8fGc9PT1iaz8oaXNGaW5pdGUoYil8fChiPXRoaXMuZmkuTigpP3RoaXMuZmkuaGVpZ2h0Oms/K2guaGVpZ2h0OmgubmF0dXJhbEhlaWdodCksZD0wKTpudWxsIT09aCYmITEhPT10aGlzLmRtJiYoYj10aGlzLmZpLk4oKT8NCnRoaXMuZmkuaGVpZ2h0Oms/K2guaGVpZ2h0OmgubmF0dXJhbEhlaWdodCk7aXNGaW5pdGUoZi53aWR0aCkmJihhPWYud2lkdGgpO2lzRmluaXRlKGYuaGVpZ2h0KSYmKGI9Zi5oZWlnaHQpO2Y9dGhpcy5IZTtnPXRoaXMuVmY7Yz1NYXRoLm1heChjLGcud2lkdGgpO2Q9TWF0aC5tYXgoZCxnLmhlaWdodCk7YT1NYXRoLm1pbihmLndpZHRoLGEpO2I9TWF0aC5taW4oZi5oZWlnaHQsYik7YT1NYXRoLm1heChjLGEpO2I9TWF0aC5tYXgoZCxiKTtudWxsPT09aHx8aC5jb21wbGV0ZXx8KGlzRmluaXRlKGEpfHwoYT0wKSxpc0Zpbml0ZShiKXx8KGI9MCkpO1ZhKHRoaXMuaGQsYSxiKTtoayh0aGlzLDAsMCxhLGIpfTtWay5wcm90b3R5cGUuVWo9ZnVuY3Rpb24oYSxiLGMsZCl7b2sodGhpcyxhLGIsYyxkKX07ZnVuY3Rpb24gaWEoKXt0aGlzLnM9bmV3IHpjO3RoaXMuV2I9bnVsbH1hYT1pYS5wcm90b3R5cGU7YWEucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnM9bmV3IHpjO3RoaXMuV2I9bnVsbH07DQpmdW5jdGlvbiBKKGEsYixjLGQsZixnKXtudWxsPT09YS5zJiZ0Lm0oIlN0cmVhbUdlb21ldHJ5Q29udGV4dCBoYXMgYmVlbiBjbG9zZWQiKTt2b2lkIDAhPT1mJiYhMD09PWY/KG51bGw9PT1hLldiJiZ0Lm0oIk5lZWQgdG8gY2FsbCBiZWdpbkZpZ3VyZSBmaXJzdCIpLGQ9bmV3IGlkKGJkKSxkLkQ9YixkLkY9YyxhLldiLkZhLmFkZChkKSk6KGEuV2I9bmV3IEJjLGEuV2IucWE9YixhLldiLnJhPWMsYS5XYi5wcD1kLGEucy5BYi5hZGQoYS5XYikpO3ZvaWQgMCE9PWcmJihhLldiLmJvPWcpfWZ1bmN0aW9uIE0oYSl7bnVsbD09PWEucyYmdC5tKCJTdHJlYW1HZW9tZXRyeUNvbnRleHQgaGFzIGJlZW4gY2xvc2VkIik7bnVsbD09PWEuV2ImJnQubSgiTmVlZCB0byBjYWxsIGJlZ2luRmlndXJlIGZpcnN0Iik7dmFyIGI9YS5XYi5GYS5sZW5ndGg7MDxiJiZhLldiLkZhLm5bYi0xXS5jbG9zZSgpfQ0KZnVuY3Rpb24gWmMoYSl7bnVsbD09PWEucyYmdC5tKCJTdHJlYW1HZW9tZXRyeUNvbnRleHQgaGFzIGJlZW4gY2xvc2VkIik7bnVsbD09PWEuV2ImJnQubSgiTmVlZCB0byBjYWxsIGJlZ2luRmlndXJlIGZpcnN0Iik7MDxhLldiLkZhLmxlbmd0aCYmKGEuV2IucHA9ITApfWFhLmJiPWZ1bmN0aW9uKGEpe251bGw9PT10aGlzLnMmJnQubSgiU3RyZWFtR2VvbWV0cnlDb250ZXh0IGhhcyBiZWVuIGNsb3NlZCIpO251bGw9PT10aGlzLldiJiZ0Lm0oIk5lZWQgdG8gY2FsbCBiZWdpbkZpZ3VyZSBmaXJzdCIpO3RoaXMuV2IuZ2o9YX07YWEubW92ZVRvPWZ1bmN0aW9uKGEsYixjKXtudWxsPT09dGhpcy5zJiZ0Lm0oIlN0cmVhbUdlb21ldHJ5Q29udGV4dCBoYXMgYmVlbiBjbG9zZWQiKTtudWxsPT09dGhpcy5XYiYmdC5tKCJOZWVkIHRvIGNhbGwgYmVnaW5GaWd1cmUgZmlyc3QiKTt2YXIgZD1uZXcgaWQoYmQpO2QuRD1hO2QuRj1iO2MmJmQuY2xvc2UoKTt0aGlzLldiLkZhLmFkZChkKX07DQphYS5saW5lVG89ZnVuY3Rpb24oYSxiLGMpe251bGw9PT10aGlzLnMmJnQubSgiU3RyZWFtR2VvbWV0cnlDb250ZXh0IGhhcyBiZWVuIGNsb3NlZCIpO251bGw9PT10aGlzLldiJiZ0Lm0oIk5lZWQgdG8gY2FsbCBiZWdpbkZpZ3VyZSBmaXJzdCIpO3ZhciBkPW5ldyBpZChPYyk7ZC5EPWE7ZC5GPWI7YyYmZC5jbG9zZSgpO3RoaXMuV2IuRmEuYWRkKGQpfTtmdW5jdGlvbiBLKGEsYixjLGQsZixnLGgsayl7bnVsbD09PWEucyYmdC5tKCJTdHJlYW1HZW9tZXRyeUNvbnRleHQgaGFzIGJlZW4gY2xvc2VkIik7bnVsbD09PWEuV2ImJnQubSgiTmVlZCB0byBjYWxsIGJlZ2luRmlndXJlIGZpcnN0Iik7dmFyIGw9bmV3IGlkKGNkKTtsLkJiPWI7bC5SYj1jO2wucmU9ZDtsLnNlPWY7bC5EPWc7bC5GPWg7ayYmbC5jbG9zZSgpO2EuV2IuRmEuYWRkKGwpfQ0KZnVuY3Rpb24gU2MoYSxiLGMsZCxmKXtudWxsPT09YS5zJiZ0Lm0oIlN0cmVhbUdlb21ldHJ5Q29udGV4dCBoYXMgYmVlbiBjbG9zZWQiKTtudWxsPT09YS5XYiYmdC5tKCJOZWVkIHRvIGNhbGwgYmVnaW5GaWd1cmUgZmlyc3QiKTt2YXIgZz1uZXcgaWQoZGQpO2cuQmI9YjtnLlJiPWM7Zy5EPWQ7Zy5GPWY7YS5XYi5GYS5hZGQoZyl9YWEuYXJjVG89ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCl7bnVsbD09PXRoaXMucyYmdC5tKCJTdHJlYW1HZW9tZXRyeUNvbnRleHQgaGFzIGJlZW4gY2xvc2VkIik7bnVsbD09PXRoaXMuV2ImJnQubSgiTmVlZCB0byBjYWxsIGJlZ2luRmlndXJlIGZpcnN0Iik7dmFyIGs9bmV3IGlkKGVkKTtrLm5oPWE7ay5oaT1iO2suRGE9YztrLlBhPWQ7ay5yYWRpdXNYPWY7ay5yYWRpdXNZPWc/ZzpmO2gmJmsuY2xvc2UoKTt0aGlzLldiLkZhLmFkZChrKX07DQpmdW5jdGlvbiBUYyhhLGIsYyxkLGYsZyxoLGspe251bGw9PT1hLnMmJnQubSgiU3RyZWFtR2VvbWV0cnlDb250ZXh0IGhhcyBiZWVuIGNsb3NlZCIpO251bGw9PT1hLldiJiZ0Lm0oIk5lZWQgdG8gY2FsbCBiZWdpbkZpZ3VyZSBmaXJzdCIpO2I9bmV3IGlkKGZkLGgsayxiLGMsZCxmLGcpO2EuV2IuRmEuYWRkKGIpfQ0KSC5tYWtlR2VvbWV0cnk9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuQ2EsZj1kLndpZHRoLGQ9ZC5oZWlnaHQ7dm9pZCAwIT09YiYmIWlzTmFOKGIpJiZpc0Zpbml0ZShiKSYmKGY9Yik7dm9pZCAwIT09YyYmIWlzTmFOKGMpJiZpc0Zpbml0ZShjKSYmKGQ9Yyk7aXNGaW5pdGUoZil8fChmPTEwMCk7aXNGaW5pdGUoZCl8fChkPTEwMCk7Yj12b2lkIDA7Ik5vbmUiIT09YS5vbj9iPUguQm1bYS5vbl06Ik5vbmUiIT09YS5Idz9iPUguQm1bYS5Id106KGM9SC5ialthLnpiXSwic3RyaW5nIj09PXR5cGVvZiBjJiYoYz1ILmJqW2NdKSx2b2lkIDA9PT1jJiZ0Lm0oIlVua25vd24gU2hhcGUuZmlndXJlOiAiK2EuemIpLGI9YyhhLGYsZCksYi4kbj1mLGIuWm49ZCk7dm9pZCAwPT09YiYmKGM9SC5iai5SZWN0YW5nbGUpJiYoYj1jKGEsZixkKSk7cmV0dXJuIGJ9Ow0KSC5WaT1mdW5jdGlvbihhLGIsYyxkLGYsZyxoLGssbCxtLG4scCxxLHIpe3ZhciBzPTEtbDthPWEqcytjKmw7Yj1iKnMrZCpsO2M9YypzK2YqbDtkPWQqcytnKmw7Zj1mKnMraCpsO2c9ZypzK2sqbDtrPWEqcytjKmw7aD1iKnMrZCpsO2M9YypzK2YqbDtkPWQqcytnKmw7bS54PWE7bS55PWI7bi54PWs7bi55PWg7cC54PWsqcytjKmw7cC55PWgqcytkKmw7cS54PWM7cS55PWQ7ci54PWY7ci55PWd9O0guWG89ZnVuY3Rpb24oYSl7YT1ILkttKGEpO3ZhciBiPXQuQ2IoKTtiWzBdPWFbMF07Zm9yKHZhciBjPTEsZD0xO2M8YS5sZW5ndGg7Yys9MixkKz0zKWJbZF09YVtjXSxiW2QrMV09YVtjXSxiW2QrMl09YVtjKzFdO3QueWEoYSk7cmV0dXJuIGJ9Ow0KSC5LbT1mdW5jdGlvbihhKXt2YXIgYj1ILmNsKGEpLGM9dC5DYigpLGQ9TWF0aC5mbG9vcihiLmxlbmd0aC8yKSxmPWIubGVuZ3RoLTE7YT0wPT09YSUyPzI6MTtmb3IodmFyIGc9MDtnPGY7ZysrKXt2YXIgaD1iW2ddLGs9YltnKzFdLGw9YlsoZCtnLTEpJWZdLG09YlsoZCtnK2EpJWZdO2NbMipnXT1oO2NbMipnKzFdPUguaWwoaC54LGgueSxsLngsbC55LGsueCxrLnksbS54LG0ueSxuZXcgdyl9Y1tjLmxlbmd0aF09Y1swXTt0LnlhKGIpO3JldHVybiBjfTtILmlsPWZ1bmN0aW9uKGEsYixjLGQsZixnLGgsayxsKXtjPWEtYztoPWYtaDswPT09Y3x8MD09PWg/MD09PWM/KGg9KGctaykvaCxrPWEsZj1oKmsrKGctaCpmKSk6KGQ9KGItZCkvYyxrPWYsZj1kKmsrKGItZCphKSk6KGQ9KGItZCkvYyxoPShnLWspL2gsYT1iLWQqYSxrPShnLWgqZi1hKS8oZC1oKSxmPWQqaythKTtsLnAoayxmKTtyZXR1cm4gbH07DQpILmNsPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10LkNiKCksYz0xLjUqTWF0aC5QSSxkPTAsZj0wO2Y8YTtmKyspZD0yKk1hdGguUEkvYSpmK2MsYltmXT1uZXcgdygwLjUrMC41Kk1hdGguY29zKGQpLDAuNSswLjUqTWF0aC5zaW4oZCkpO2IucHVzaChiWzBdKTtyZXR1cm4gYn07SC51Qj0obmV3IEkoMC4xNTYsMC4xNTYpKS5KYSgpO0gudkI9KG5ldyBJKDAuODQ0LDAuODQ0KSkuSmEoKTsNCkguYmo9e05vbmU6IlJlY3RhbmdsZSIsUmVjdGFuZ2xlOmZ1bmN0aW9uKGEsYixjKXthPW5ldyB6YzthLnR5cGU9RWM7YS5xYT0wO2EucmE9MDthLkQ9YjthLkY9YztyZXR1cm4gYX0sU3F1YXJlOmZ1bmN0aW9uKGEsYixjKXthPW5ldyB6YzthLnZjPVdnO2EudHlwZT1FYzthLnFhPTA7YS5yYT0wO2EuRD1iO2EuRj1jO3JldHVybiBhfSxFbGxpcHNlOmZ1bmN0aW9uKGEsYixjKXthPW5ldyB6YzthLnR5cGU9TWM7YS5xYT0wO2EucmE9MDthLkQ9YjthLkY9YzthLkc9SC51QjthLkg9SC52QjtyZXR1cm4gYX0sQ2lyY2xlOmZ1bmN0aW9uKGEsYixjKXthPW5ldyB6YzthLnZjPVdnO2EudHlwZT1NYzthLnFhPTA7YS5yYT0wO2EuRD1iO2EuRj1jO2EuRz1ILnVCO2EuSD1ILnZCO3JldHVybiBhfSxDb25uZWN0b3I6IkVsbGlwc2UiLFRyaWFuZ2xlUmlnaHQ6ZnVuY3Rpb24oYSxiLGMpe2E9bmV3IHpjO3ZhciBkPW5ldyBCYyxmPW5ldyBpZDtmLkQ9YjtmLkY9MC41KmM7ZC5GYS5hZGQoZik7Yj0NCm5ldyBpZDtiLkQ9MDtiLkY9YztkLkZhLmFkZChiLmNsb3NlKCkpO2EuQWIuYWRkKGQpO2EuRz1uZXcgSSgwLDAuMjUpO2EuSD1uZXcgSSgwLjUsMC43NSk7cmV0dXJuIGF9LFRyaWFuZ2xlRG93bjpmdW5jdGlvbihhLGIsYyl7YT1uZXcgemM7dmFyIGQ9bmV3IEJjLGY9bmV3IGlkO2YuRD1iO2YuRj0wO2QuRmEuYWRkKGYpO2Y9bmV3IGlkO2YuRD0wLjUqYjtmLkY9YztkLkZhLmFkZChmLmNsb3NlKCkpO2EuQWIuYWRkKGQpO2EuRz1uZXcgSSgwLjI1LDApO2EuSD1uZXcgSSgwLjc1LDAuNSk7cmV0dXJuIGF9LFRyaWFuZ2xlTGVmdDpmdW5jdGlvbihhLGIsYyl7YT1uZXcgemM7dmFyIGQ9bmV3IEJjO2QucWE9YjtkLnJhPWM7dmFyIGY9bmV3IGlkO2YuRD0wO2YuRj0wLjUqYztkLkZhLmFkZChmKTtjPW5ldyBpZDtjLkQ9YjtjLkY9MDtkLkZhLmFkZChjLmNsb3NlKCkpO2EuQWIuYWRkKGQpO2EuRz1uZXcgSSgwLjUsMC4yNSk7YS5IPW5ldyBJKDEsMC43NSk7cmV0dXJuIGF9LFRyaWFuZ2xlVXA6ZnVuY3Rpb24oYSwNCmIsYyl7YT1uZXcgemM7dmFyIGQ9bmV3IEJjO2QucWE9YjtkLnJhPWM7dmFyIGY9bmV3IGlkO2YuRD0wO2YuRj1jO2QuRmEuYWRkKGYpO2M9bmV3IGlkO2MuRD0wLjUqYjtjLkY9MDtkLkZhLmFkZChjLmNsb3NlKCkpO2EuQWIuYWRkKGQpO2EuRz1uZXcgSSgwLjI1LDAuNSk7YS5IPW5ldyBJKDAuNzUsMSk7cmV0dXJuIGF9LExpbmUxOmZ1bmN0aW9uKGEsYixjKXthPW5ldyB6YzthLnR5cGU9RGM7YS5xYT0wO2EucmE9MDthLkQ9YjthLkY9YztyZXR1cm4gYX0sTGluZTI6ZnVuY3Rpb24oYSxiLGMpe2E9bmV3IHpjO2EudHlwZT1EYzthLnFhPWI7YS5yYT0wO2EuRD0wO2EuRj1jO3JldHVybiBhfSxNaW51c0xpbmU6IkxpbmVIIixMaW5lSDpmdW5jdGlvbihhLGIsYyl7YT1uZXcgemM7YS50eXBlPURjO2EucWE9MDthLnJhPWMvMjthLkQ9YjthLkY9Yy8yO3JldHVybiBhfSxMaW5lVjpmdW5jdGlvbihhLGIsYyl7YT1uZXcgemM7YS50eXBlPURjO2EucWE9Yi8yO2EucmE9MDthLkQ9Yi8yOw0KYS5GPWM7cmV0dXJuIGF9LEN1cnZlMTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SC52YTthPXQudSgpO0ooYSwwLDAsITEpO0soYSxkKmIsMCwxKmIsKDEtZCkqYyxiLGMpO2I9YS5zO3QudihhKTtyZXR1cm4gYn0sQ3VydmUyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1ILnZhO2E9dC51KCk7SihhLDAsMCwhMSk7SyhhLDAsZCpjLCgxLWQpKmIsYyxiLGMpO2I9YS5zO3QudihhKTtyZXR1cm4gYn0sQ3VydmUzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1ILnZhO2E9dC51KCk7SihhLDEqYiwwLCExKTtLKGEsMSpiLGQqYyxkKmIsMSpjLDAsMSpjKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LEN1cnZlNDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SC52YTthPXQudSgpO0ooYSwxKmIsMCwhMSk7SyhhLCgxLWQpKmIsMCwwLCgxLWQpKmMsMCwxKmMpO2I9YS5zO3QudihhKTtyZXR1cm4gYn0sQWx0ZXJuYXRpdmU6IlRyaWFuZ2xlIixNZXJnZToiVHJpYW5nbGUiLFRyaWFuZ2xlOmZ1bmN0aW9uKGEsYixjKXthPQ0KdC51KCk7SihhLDAuNSpiLDAqYywhMCk7YS5saW5lVG8oMCpiLDEqYyk7YS5saW5lVG8oMSpiLDEqYywhMCk7Yj1hLnM7Yi5HPW5ldyBJKDAuMjUsMC41KTtiLkg9bmV3IEkoMC43NSwxKTt0LnYoYSk7cmV0dXJuIGJ9LERlY2lzaW9uOiJEaWFtb25kIixEaWFtb25kOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLjUqYiwwLCEwKTthLmxpbmVUbygwLDAuNSpjKTthLmxpbmVUbygwLjUqYiwxKmMpO2EubGluZVRvKDEqYiwwLjUqYywhMCk7Yj1hLnM7Yi5HPW5ldyBJKDAuMjUsMC4yNSk7Yi5IPW5ldyBJKDAuNzUsMC43NSk7dC52KGEpO3JldHVybiBifSxQZW50YWdvbjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SC5jbCg1KTthPXQudSgpO0ooYSxkWzBdLngqYixkWzBdLnkqYywhMCk7Zm9yKHZhciBmPTE7NT5mO2YrKylhLmxpbmVUbyhkW2ZdLngqYixkW2ZdLnkqYyk7dC55YShkKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLjIsMC4yMik7Yi5IPW5ldyBJKDAuOCwwLjkpO3QudihhKTsNCnJldHVybiBifSxEYXRhVHJhbnNtaXNzaW9uOiJIZXhhZ29uIixIZXhhZ29uOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1ILmNsKDYpO2E9dC51KCk7SihhLGRbMF0ueCpiLGRbMF0ueSpjLCEwKTtmb3IodmFyIGY9MTs2PmY7ZisrKWEubGluZVRvKGRbZl0ueCpiLGRbZl0ueSpjKTt0LnlhKGQpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMDcsMC4yNSk7Yi5IPW5ldyBJKDAuOTMsMC43NSk7dC52KGEpO3JldHVybiBifSxIZXB0YWdvbjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SC5jbCg3KTthPXQudSgpO0ooYSxkWzBdLngqYixkWzBdLnkqYywhMCk7Zm9yKHZhciBmPTE7Nz5mO2YrKylhLmxpbmVUbyhkW2ZdLngqYixkW2ZdLnkqYyk7dC55YShkKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLjIsMC4xNSk7Yi5IPW5ldyBJKDAuOCwwLjg1KTt0LnYoYSk7cmV0dXJuIGJ9LE9jdGFnb246ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUguY2woOCk7YT10LnUoKTtKKGEsZFswXS54KmIsZFswXS55KmMsITApOw0KZm9yKHZhciBmPTE7OD5mO2YrKylhLmxpbmVUbyhkW2ZdLngqYixkW2ZdLnkqYyk7dC55YShkKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLjE1LDAuMTUpO2IuSD1uZXcgSSgwLjg1LDAuODUpO3QudihhKTtyZXR1cm4gYn0sTm9uYWdvbjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SC5jbCg5KTthPXQudSgpO0ooYSxkWzBdLngqYixkWzBdLnkqYywhMCk7Zm9yKHZhciBmPTE7OT5mO2YrKylhLmxpbmVUbyhkW2ZdLngqYixkW2ZdLnkqYyk7dC55YShkKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLjE3LDAuMTMpO2IuSD1uZXcgSSgwLjgyLDAuODIpO3QudihhKTtyZXR1cm4gYn0sRGVjYWdvbjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SC5jbCgxMCk7YT10LnUoKTtKKGEsZFswXS54KmIsZFswXS55KmMsITApO2Zvcih2YXIgZj0xOzEwPmY7ZisrKWEubGluZVRvKGRbZl0ueCpiLGRbZl0ueSpjKTt0LnlhKGQpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMTYsMC4xNik7Yi5IPW5ldyBJKDAuODQsDQowLjg0KTt0LnYoYSk7cmV0dXJuIGJ9LERvZGVjYWdvbjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SC5jbCgxMik7YT10LnUoKTtKKGEsZFswXS54KmIsZFswXS55KmMsITApO2Zvcih2YXIgZj0xOzEyPmY7ZisrKWEubGluZVRvKGRbZl0ueCpiLGRbZl0ueSpjKTt0LnlhKGQpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMTYsMC4xNik7Yi5IPW5ldyBJKDAuODQsMC44NCk7dC52KGEpO3JldHVybiBifSxGaXZlUG9pbnRlZFN0YXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUguS20oNSk7YT10LnUoKTtKKGEsZFswXS54KmIsZFswXS55KmMsITApO2Zvcih2YXIgZj0xOzEwPmY7ZisrKWEubGluZVRvKGRbZl0ueCpiLGRbZl0ueSpjKTt0LnlhKGQpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMzEyLDAuMzgzKTtiLkg9bmV3IEkoMC42OTMsMC43NjUpO3QudihhKTtyZXR1cm4gYn0sU2l4UG9pbnRlZFN0YXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUguS20oNik7YT10LnUoKTtKKGEsZFswXS54KmIsDQpkWzBdLnkqYywhMCk7Zm9yKHZhciBmPTE7MTI+ZjtmKyspYS5saW5lVG8oZFtmXS54KmIsZFtmXS55KmMpO3QueWEoZCk7TShhKTtiPWEucztiLkc9bmV3IEkoMC4xNywwLjI1MSk7Yi5IPW5ldyBJKDAuODMzLDAuNzU1KTt0LnYoYSk7cmV0dXJuIGJ9LFNldmVuUG9pbnRlZFN0YXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUguS20oNyk7YT10LnUoKTtKKGEsZFswXS54KmIsZFswXS55KmMsITApO2Zvcih2YXIgZj0xOzE0PmY7ZisrKWEubGluZVRvKGRbZl0ueCpiLGRbZl0ueSpjKTt0LnlhKGQpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMzYzLDAuMzYxKTtiLkg9bmV3IEkoMC42NDEsMC43MDkpO3QudihhKTtyZXR1cm4gYn0sRWlnaHRQb2ludGVkU3RhcjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SC5LbSg4KTthPXQudSgpO0ooYSxkWzBdLngqYixkWzBdLnkqYywhMCk7Zm9yKHZhciBmPTE7MTY+ZjtmKyspYS5saW5lVG8oZFtmXS54KmIsZFtmXS55KmMpO3QueWEoZCk7TShhKTtiPWEuczsNCmIuRz1uZXcgSSgwLjI1MiwwLjI1NSk7Yi5IPW5ldyBJKDAuNzUsMC43NSk7dC52KGEpO3JldHVybiBifSxOaW5lUG9pbnRlZFN0YXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUguS20oOSk7YT10LnUoKTtKKGEsZFswXS54KmIsZFswXS55KmMsITApO2Zvcih2YXIgZj0xOzE4PmY7ZisrKWEubGluZVRvKGRbZl0ueCpiLGRbZl0ueSpjKTt0LnlhKGQpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMzU1LDAuMzYxKTtiLkg9bmV3IEkoMC42NDUsMC42NTEpO3QudihhKTtyZXR1cm4gYn0sVGVuUG9pbnRlZFN0YXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUguS20oMTApO2E9dC51KCk7SihhLGRbMF0ueCpiLGRbMF0ueSpjLCEwKTtmb3IodmFyIGY9MTsyMD5mO2YrKylhLmxpbmVUbyhkW2ZdLngqYixkW2ZdLnkqYyk7dC55YShkKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLjI4MSwwLjI2MSk7Yi5IPW5ldyBJKDAuNzIzLDAuNzQ4KTt0LnYoYSk7cmV0dXJuIGJ9LEZpdmVQb2ludGVkQnVyc3Q6ZnVuY3Rpb24oYSwNCmIsYyl7dmFyIGQ9SC5Ybyg1KTthPXQudSgpO0ooYSxkWzBdLngqYixkWzBdLnkqYywhMCk7Zm9yKHZhciBmPTE7ZjxkLmxlbmd0aDtmKz0zKUsoYSxkW2ZdLngqYixkW2ZdLnkqYyxkW2YrMV0ueCpiLGRbZisxXS55KmMsZFtmKzJdLngqYixkW2YrMl0ueSpjKTt0LnlhKGQpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMzEyLDAuMzgzKTtiLkg9bmV3IEkoMC42OTMsMC43NjUpO3QudihhKTtyZXR1cm4gYn0sU2l4UG9pbnRlZEJ1cnN0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1ILlhvKDYpO2E9dC51KCk7SihhLGRbMF0ueCpiLGRbMF0ueSpjLCEwKTtmb3IodmFyIGY9MTtmPGQubGVuZ3RoO2YrPTMpSyhhLGRbZl0ueCpiLGRbZl0ueSpjLGRbZisxXS54KmIsZFtmKzFdLnkqYyxkW2YrMl0ueCpiLGRbZisyXS55KmMpO3QueWEoZCk7TShhKTtiPWEucztiLkc9bmV3IEkoMC4xNywwLjI1MSk7Yi5IPW5ldyBJKDAuODMzLDAuNzU1KTt0LnYoYSk7cmV0dXJuIGJ9LFNldmVuUG9pbnRlZEJ1cnN0OmZ1bmN0aW9uKGEsDQpiLGMpe3ZhciBkPUguWG8oNyk7YT10LnUoKTtKKGEsZFswXS54KmIsZFswXS55KmMsITApO2Zvcih2YXIgZj0xO2Y8ZC5sZW5ndGg7Zis9MylLKGEsZFtmXS54KmIsZFtmXS55KmMsZFtmKzFdLngqYixkW2YrMV0ueSpjLGRbZisyXS54KmIsZFtmKzJdLnkqYyk7dC55YShkKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLjM2MywwLjM2MSk7Yi5IPW5ldyBJKDAuNjQxLDAuNzA5KTt0LnYoYSk7cmV0dXJuIGJ9LEVpZ2h0UG9pbnRlZEJ1cnN0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1ILlhvKDgpO2E9dC51KCk7SihhLGRbMF0ueCpiLGRbMF0ueSpjLCEwKTtmb3IodmFyIGY9MTtmPGQubGVuZ3RoO2YrPTMpSyhhLGRbZl0ueCpiLGRbZl0ueSpjLGRbZisxXS54KmIsZFtmKzFdLnkqYyxkW2YrMl0ueCpiLGRbZisyXS55KmMpO3QueWEoZCk7TShhKTtiPWEucztiLkc9bmV3IEkoMC4yNTIsMC4yNTUpO2IuSD1uZXcgSSgwLjc1LDAuNzUpO3QudihhKTtyZXR1cm4gYn0sTmluZVBvaW50ZWRCdXJzdDpmdW5jdGlvbihhLA0KYixjKXt2YXIgZD1ILlhvKDkpO2E9dC51KCk7SihhLGRbMF0ueCpiLGRbMF0ueSpjLCEwKTtmb3IodmFyIGY9MTtmPGQubGVuZ3RoO2YrPTMpSyhhLGRbZl0ueCpiLGRbZl0ueSpjLGRbZisxXS54KmIsZFtmKzFdLnkqYyxkW2YrMl0ueCpiLGRbZisyXS55KmMpO3QueWEoZCk7TShhKTtiPWEucztiLkc9bmV3IEkoMC4zNTUsMC4zNjEpO2IuSD1uZXcgSSgwLjY0NSwwLjY1MSk7dC52KGEpO3JldHVybiBifSxUZW5Qb2ludGVkQnVyc3Q6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUguWG8oMTApO2E9dC51KCk7SihhLGRbMF0ueCpiLGRbMF0ueSpjLCEwKTtmb3IodmFyIGY9MTtmPGQubGVuZ3RoO2YrPTMpSyhhLGRbZl0ueCpiLGRbZl0ueSpjLGRbZisxXS54KmIsZFtmKzFdLnkqYyxkW2YrMl0ueCpiLGRbZisyXS55KmMpO3QueWEoZCk7TShhKTtiPWEucztiLkc9bmV3IEkoMC4yODEsMC4yNjEpO2IuSD1uZXcgSSgwLjcyMywwLjc0OCk7dC52KGEpO3JldHVybiBifSxDbG91ZDpmdW5jdGlvbihhLA0KYixjKXthPXQudSgpO0ooYSwwLjA4MDM0NDYxKmIsMC4xOTQ0Mjk5KmMsITApO0soYSwtMC4wOTIzOTYzMSpiLDAuMDc4MzY0MjEqYywwLjE0MDYwMzEqYiwtMC4wNTQyODIzKmMsMC4yMDA4NjE1KmIsMC4wNTM0OTI5OSpjKTtLKGEsMC4yNDUwNTExKmIsLTAuMDA2OTc1NDcqYywwLjM3NzYxOTcqYiwtMC4wMTExMjA2NypjLDAuNDMzODYwOSpiLDAuMDc0MjE5KmMpO0soYSwwLjQ1Mzk0NzEqYiwwLDAuNjA2NjAxOCpiLC0wLjAyNTI2NTg3KmMsMC42NTU4MjI4KmIsMC4wNzAwNDE5NipjKTtLKGEsMC42OTE0Mjc3KmIsLTAuMDE5MDQxNzcqYywwLjg5MjEwOTUqYiwtMC4wMTIyMDg0MypjLDAuODkyMTA5NSpiLDAuMDgzNzA4NjUqYyk7SyhhLDEuMDM2NDQ2KmIsMC4wNDEwNTczOCpjLDEuMDIwMzc3KmIsMC4zMDIyMDUyKmMsMC45MTQ3NjcxKmIsMC4zMTk0NTk2KmMpO0soYSwxLjA0NDQ4KmIsMC4zNjAyMzgqYywwLjk5MjI1NipiLDAuNTIxOTAwOSpjLDAuOTA4MjkzNSpiLDAuNTYyMDQ0Kg0KYyk7SyhhLDEuMDMyMzM3KmIsMC41NzcxNzgxKmMsMS4wMTg0MTEqYiwwLjgxMjA2NTEqYywwLjkyMTI0MDYqYiwwLjgyMTcxMTcqYyk7SyhhLDEuMDI4NDExKmIsMC45NTcxNDcyKmMsMC44NTU2NzAyKmIsMS4wNTI0ODcqYywwLjc1OTI1NjYqYiwwLjkxNTY5NTMqYyk7SyhhLDAuNzQzMTg3NypiLDEuMDA5MzI1KmMsMC41NjI0MTIzKmIsMS4wMjE3NjEqYywwLjUxMDE2NjYqYiwwLjkzMTA0NTUqYyk7SyhhLDAuNDgyMDY3NypiLDEuMDMxNzYxKmMsMC4zMDMwMTEyKmIsMS4wMDI3OTYqYywwLjI2MDkzMjgqYiwwLjkzNDQ2MjMqYyk7SyhhLDAuMjMyOTk5NCpiLDEuMDE1MTgqYywwLjAzMjEzNzg0KmIsMS4wMTUxOCpjLDAuMDgwMzQ0NjEqYiwwLjg3MDA5OCpjKTtLKGEsLTAuMDI4MTIwNjEqYiwwLjkwMzI1OTcqYywtMC4wMTIwNTE2OSpiLDAuNjgzNTYzOCpjLDAuMDY4MjkyOTIqYiwwLjY1NDU0NzUqYyk7SyhhLC0wLjAxODEyMDYxKmIsMC42MDg5NTAzKmMsLTAuMDA2MDY4OTIqDQpiLDAuNDU1NTc3NypjLDAuMDY0Mjc1NjkqYiwwLjQyNjU2MTMqYyk7SyhhLC0wLjAxNjA2ODkyKmIsMC4zODkyNTQ1KmMsLTAuMDEyMDUxNjkqYiwwLjE5NDQyOTkqYywwLjA4MDM0NDYxKmIsMC4xOTQ0Mjk5KmMpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMSwwLjEpO2IuSD1uZXcgSSgwLjksMC45KTt0LnYoYSk7cmV0dXJuIGJ9LEdhdGU6IkNyZXNjZW50IixDcmVzY2VudDpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwwLCEwKTtLKGEsMSpiLDAsMSpiLDEqYywwLDEqYyk7SyhhLDAuNSpiLDAuNzUqYywwLjUqYiwwLjI1KmMsMCwwKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLjUxMSwwLjE5KTtiLkg9bmV3IEkoMC43NzYsMC43Nik7dC52KGEpO3JldHVybiBifSxGcmFtZWRSZWN0YW5nbGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXQudSgpLGY9YT9hLkhjOjA7YT1hP2EuRXQ6MDswPT09ZiYmKGY9MC4xKTswPT09YSYmKGE9MC4xKTtKKGQsMCwwLCEwKTtkLmxpbmVUbygxKmIsDQowKTtkLmxpbmVUbygxKmIsMSpjKTtkLmxpbmVUbygwLDEqYywhMCk7SihkLGYqYixhKmMsITEsITApO2QubGluZVRvKGYqYiwoMS1hKSpjKTtkLmxpbmVUbygoMS1mKSpiLCgxLWEpKmMpO2QubGluZVRvKCgxLWYpKmIsYSpjLCEwKTtiPWQucztiLkc9bmV3IEkoZixhKTtiLkg9bmV3IEkoMS1mLDEtYSk7dC52KGQpO3JldHVybiBifSxEZWxheToiSGFsZkVsbGlwc2UiLEhhbGZFbGxpcHNlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1ILnZhO2E9dC51KCk7SihhLDAsMCwhMCk7SyhhLGQqYiwwLDEqYiwoMC41LWQvMikqYywxKmIsMC41KmMpO0soYSwxKmIsKDAuNStkLzIpKmMsZCpiLDEqYywwLDEqYyk7TShhKTtiPWEucztiLkc9bmV3IEkoMCwwLjIpO2IuSD1uZXcgSSgwLjc1LDAuOCk7dC52KGEpO3JldHVybiBifSxIZWFydDpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMC41KmIsMSpjLCEwKTtLKGEsMC4xKmIsMC44KmMsMCwwLjUqYywwKmIsMC4zKmMpO0soYSwwKmIsMCwwLjQ1Kg0KYiwwLDAuNSpiLDAuMypjKTtLKGEsMC41NSpiLDAsMSpiLDAsMSpiLDAuMypjKTtLKGEsYiwwLjUqYywwLjkqYiwwLjgqYywwLjUqYiwxKmMpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMTUsMC4yOSk7Yi5IPW5ldyBJKDAuODYsMC42OCk7dC52KGEpO3JldHVybiBifSxTcGFkZTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMC41KmIsMCwhMCk7YS5saW5lVG8oMC41MSpiLDAuMDEqYyk7SyhhLDAuNipiLDAuMipjLGIsMC4yNSpjLGIsMC41KmMpO0soYSxiLDAuOCpjLDAuNipiLDAuOCpjLDAuNTUqYiwwLjcqYyk7SyhhLDAuNSpiLDAuNzUqYywwLjU1KmIsMC45NSpjLDAuNzUqYixjKTthLmxpbmVUbygwLjI1KmIsYyk7SyhhLDAuNDUqYiwwLjk1KmMsMC41KmIsMC43NSpjLDAuNDUqYiwwLjcqYyk7SyhhLDAuNCpiLDAuOCpjLDAsMC44KmMsMCwwLjUqYyk7SyhhLDAsMC4yNSpjLDAuNCpiLDAuMipjLDAuNDkqYiwwLjAxKmMpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMTksMC4yNik7DQpiLkg9bmV3IEkoMC44LDAuNjgpO3QudihhKTtyZXR1cm4gYn0sQ2x1YjpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMC40KmIsMC42KmMsITApO0soYSwwLjUqYiwwLjc1KmMsMC40NSpiLDAuOTUqYywwLjE1KmIsMSpjKTthLmxpbmVUbygwLjg1KmIsYyk7SyhhLDAuNTUqYiwwLjk1KmMsMC41KmIsMC43NSpjLDAuNipiLDAuNipjKTt2YXIgZD0wLjIsZj0wLjMsZz0wLGg9NCooTWF0aC5TUVJUMi0xKS8zKmQ7SyhhLCgwLjUtZCtmKSpiLCgwLjUraCtnKSpjLCgwLjUtaCtmKSpiLCgwLjUrZCtnKSpjLCgwLjUrZikqYiwoMC41K2QrZykqYyk7SyhhLCgwLjUraCtmKSpiLCgwLjUrZCtnKSpjLCgwLjUrZCtmKSpiLCgwLjUraCtnKSpjLCgwLjUrZCtmKSpiLCgwLjUrZykqYyk7SyhhLCgwLjUrZCtmKSpiLCgwLjUtaCtnKSpjLCgwLjUraCtmKSpiLCgwLjUtZCtnKSpjLCgwLjUrZikqYiwoMC41LWQrZykqYyk7SyhhLCgwLjUtaCtmKSpiLCgwLjUtZCtnKSpjLCgwLjUtZCtmKzAuMDUpKg0KYiwoMC41LWgrZy0wLjAyKSpjLDAuNjUqYiwwLjM2NzcxMjQzKmMpO2Q9MC4yO2Y9MDtnPS0wLjM7aD00KihNYXRoLlNRUlQyLTEpLzMqZDtLKGEsKDAuNStoK2YpKmIsKDAuNStkK2cpKmMsKDAuNStkK2YpKmIsKDAuNStoK2cpKmMsKDAuNStkK2YpKmIsKDAuNStnKSpjKTtLKGEsKDAuNStkK2YpKmIsKDAuNS1oK2cpKmMsKDAuNStoK2YpKmIsKDAuNS1kK2cpKmMsKDAuNStmKSpiLCgwLjUtZCtnKSpjKTtLKGEsKDAuNS1oK2YpKmIsKDAuNS1kK2cpKmMsKDAuNS1kK2YpKmIsKDAuNS1oK2cpKmMsKDAuNS1kK2YpKmIsKDAuNStnKSpjKTtLKGEsKDAuNS1kK2YpKmIsKDAuNStoK2cpKmMsKDAuNS1oK2YpKmIsKDAuNStkK2cpKmMsMC4zNSpiLDAuMzY3NzEyNDMqYyk7ZD0wLjI7Zj0tMC4zO2c9MDtoPTQqKE1hdGguU1FSVDItMSkvMypkO0soYSwoMC41K2QrZi0wLjA1KSpiLCgwLjUtaCtnLTAuMDIpKmMsKDAuNStoK2YpKmIsKDAuNS1kK2cpKmMsKDAuNStmKSpiLCgwLjUtZCtnKSpjKTsNCksoYSwoMC41LWgrZikqYiwoMC41LWQrZykqYywoMC41LWQrZikqYiwoMC41LWgrZykqYywoMC41LWQrZikqYiwoMC41K2cpKmMpO0soYSwoMC41LWQrZikqYiwoMC41K2grZykqYywoMC41LWgrZikqYiwoMC41K2QrZykqYywoMC41K2YpKmIsKDAuNStkK2cpKmMpO0soYSwoMC41K2grZikqYiwoMC41K2QrZykqYywoMC41K2QrZikqYiwoMC41K2grZykqYywwLjQqYiwwLjYqYyk7TShhKTtiPWEucztiLkc9bmV3IEkoMC4wNiwwLjM5KTtiLkg9bmV3IEkoMC45MywwLjU4KTt0LnYoYSk7cmV0dXJuIGJ9LFJpbmc6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7dmFyIGQ9NCooTWF0aC5TUVJUMi0xKS8zKjAuNTtKKGEsYiwwLjUqYywhMCk7SyhhLGIsKDAuNS1kKSpjLCgwLjUrZCkqYiwwLDAuNSpiLDApO0soYSwoMC41LWQpKmIsMCwwLCgwLjUtZCkqYywwLDAuNSpjKTtLKGEsMCwoMC41K2QpKmMsKDAuNS1kKSpiLGMsMC41KmIsYyk7SyhhLCgwLjUrZCkqYixjLGIsKDAuNStkKSpjLGIsMC41Kg0KYyk7ZD00KihNYXRoLlNRUlQyLTEpLzMqMC40O0ooYSwwLjUqYiwwLjEqYywhMCwhMCk7SyhhLCgwLjUrZCkqYiwwLjEqYywwLjkqYiwoMC41LWQpKmMsMC45KmIsMC41KmMpO0soYSwwLjkqYiwoMC41K2QpKmMsKDAuNStkKSpiLDAuOSpjLDAuNSpiLDAuOSpjKTtLKGEsKDAuNS1kKSpiLDAuOSpjLDAuMSpiLCgwLjUrZCkqYywwLjEqYiwwLjUqYyk7SyhhLDAuMSpiLCgwLjUtZCkqYywoMC41LWQpKmIsMC4xKmMsMC41KmIsMC4xKmMpO2I9YS5zO2IuRz1uZXcgSSgwLjE0NiwwLjE0Nik7Yi5IPW5ldyBJKDAuODUzLDAuODUzKTtiLnZjPVdnO3QudihhKTtyZXR1cm4gYn0sWWluWWFuZzpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MC41O2E9dC51KCk7ZD0wLjU7SihhLDAuNSpiLDAsITApO2EuYXJjVG8oMjcwLDE4MCwwLjUqYiwwLjUqYiwwLjUqYik7SyhhLDEqYixkKmMsMCxkKmMsZCpiLDAsITApO3ZhciBkPTAuMSxmPTAuMjU7SihhLCgwLjUrZCkqYixmKmMsITAsITApO2EuYXJjVG8oMCwNCi0zNjAsMC41KmIsYypmLGQqYik7TShhKTtKKGEsMC41KmIsMCwhMSk7YS5hcmNUbygyNzAsLTE4MCwwLjUqYiwwLjUqYiwwLjUqYik7YS5iYighMSk7Zj0wLjc1O0ooYSwoMC41K2QpKmIsZipjLCEwKTthLmFyY1RvKDAsMzYwLDAuNSpiLGMqZixkKmIpO00oYSk7Yj1hLnM7Yi52Yz1XZzt0LnYoYSk7cmV0dXJuIGJ9LFBlYWNlOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO3ZhciBkPTQqKE1hdGguU1FSVDItMSkvMyowLjU7SihhLGIsMC41KmMsITApO0soYSxiLCgwLjUtZCkqYywoMC41K2QpKmIsMCwwLjUqYiwwKTtLKGEsKDAuNS1kKSpiLDAsMCwoMC41LWQpKmMsMCwwLjUqYyk7SyhhLDAsKDAuNStkKSpjLCgwLjUtZCkqYixjLDAuNSpiLGMpO0soYSwoMC41K2QpKmIsYyxiLCgwLjUrZCkqYyxiLDAuNSpjKTtkPTQqKE1hdGguU1FSVDItMSkvMyowLjQ7SihhLDAuNSpiLDAuMSpjLCEwLCEwKTtLKGEsKDAuNStkKSpiLDAuMSpjLDAuOSpiLCgwLjUtZCkqYywwLjkqYiwwLjUqYyk7SyhhLA0KMC45KmIsKDAuNStkKSpjLCgwLjUrZCkqYiwwLjkqYywwLjUqYiwwLjkqYyk7SyhhLCgwLjUtZCkqYiwwLjkqYywwLjEqYiwoMC41K2QpKmMsMC4xKmIsMC41KmMpO0soYSwwLjEqYiwoMC41LWQpKmMsKDAuNS1kKSpiLDAuMSpjLDAuNSpiLDAuMSpjKTt2YXIgZD0wLjA3LGY9MCxnPS0wLjcwNyowLjExLGg9NCooTWF0aC5TUVJUMi0xKS8zKmQ7SihhLCgwLjUrZCtmKSpiLCgwLjUrZykqYywhMCk7SyhhLCgwLjUrZCtmKSpiLCgwLjUtaCtnKSpjLCgwLjUraCtmKSpiLCgwLjUtZCtnKSpjLCgwLjUrZikqYiwoMC41LWQrZykqYyk7SyhhLCgwLjUtaCtmKSpiLCgwLjUtZCtnKSpjLCgwLjUtZCtmKSpiLCgwLjUtaCtnKSpjLCgwLjUtZCtmKSpiLCgwLjUrZykqYyk7SyhhLCgwLjUtZCtmKSpiLCgwLjUraCtnKSpjLCgwLjUtaCtmKSpiLCgwLjUrZCtnKSpjLCgwLjUrZikqYiwoMC41K2QrZykqYyk7SyhhLCgwLjUraCtmKSpiLCgwLjUrZCtnKSpjLCgwLjUrZCtmKSpiLCgwLjUraCtnKSpjLA0KKDAuNStkK2YpKmIsKDAuNStnKSpjKTtkPTAuMDc7Zj0tMC43MDcqMC4xMTtnPTAuNzA3KjAuMTE7aD00KihNYXRoLlNRUlQyLTEpLzMqZDtKKGEsKDAuNStkK2YpKmIsKDAuNStnKSpjLCEwKTtLKGEsKDAuNStkK2YpKmIsKDAuNS1oK2cpKmMsKDAuNStoK2YpKmIsKDAuNS1kK2cpKmMsKDAuNStmKSpiLCgwLjUtZCtnKSpjKTtLKGEsKDAuNS1oK2YpKmIsKDAuNS1kK2cpKmMsKDAuNS1kK2YpKmIsKDAuNS1oK2cpKmMsKDAuNS1kK2YpKmIsKDAuNStnKSpjKTtLKGEsKDAuNS1kK2YpKmIsKDAuNStoK2cpKmMsKDAuNS1oK2YpKmIsKDAuNStkK2cpKmMsKDAuNStmKSpiLCgwLjUrZCtnKSpjKTtLKGEsKDAuNStoK2YpKmIsKDAuNStkK2cpKmMsKDAuNStkK2YpKmIsKDAuNStoK2cpKmMsKDAuNStkK2YpKmIsKDAuNStnKSpjKTtkPTAuMDc7Zj0wLjcwNyowLjExO2c9MC43MDcqMC4xMTtoPTQqKE1hdGguU1FSVDItMSkvMypkO0ooYSwoMC41K2QrZikqYiwoMC41K2cpKmMsITApO0soYSwoMC41Kw0KZCtmKSpiLCgwLjUtaCtnKSpjLCgwLjUraCtmKSpiLCgwLjUtZCtnKSpjLCgwLjUrZikqYiwoMC41LWQrZykqYyk7SyhhLCgwLjUtaCtmKSpiLCgwLjUtZCtnKSpjLCgwLjUtZCtmKSpiLCgwLjUtaCtnKSpjLCgwLjUtZCtmKSpiLCgwLjUrZykqYyk7SyhhLCgwLjUtZCtmKSpiLCgwLjUraCtnKSpjLCgwLjUtaCtmKSpiLCgwLjUrZCtnKSpjLCgwLjUrZikqYiwoMC41K2QrZykqYyk7SyhhLCgwLjUraCtmKSpiLCgwLjUrZCtnKSpjLCgwLjUrZCtmKSpiLCgwLjUraCtnKSpjLCgwLjUrZCtmKSpiLCgwLjUrZykqYyk7Yj1hLnM7Yi5HPW5ldyBJKDAuMTQ2LDAuMTQ2KTtiLkg9bmV3IEkoMC44NTMsMC44NTMpO2IudmM9V2c7dC52KGEpO3JldHVybiBifSxOb3RBbGxvd2VkOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1ILnZhLGY9MC41KmQsZz0wLjU7YT10LnUoKTtKKGEsMC41KmIsKDAuNS1nKSpjLCEwKTtLKGEsKDAuNS1mKSpiLCgwLjUtZykqYywoMC41LWcpKmIsKDAuNS1mKSpjLCgwLjUtDQpnKSpiLDAuNSpjKTtLKGEsKDAuNS1nKSpiLCgwLjUrZikqYywoMC41LWYpKmIsKDAuNStnKSpjLDAuNSpiLCgwLjUrZykqYyk7SyhhLCgwLjUrZikqYiwoMC41K2cpKmMsKDAuNStnKSpiLCgwLjUrZikqYywoMC41K2cpKmIsMC41KmMpO0soYSwoMC41K2cpKmIsKDAuNS1mKSpjLCgwLjUrZikqYiwoMC41LWcpKmMsMC41KmIsKDAuNS1nKSpjKTt2YXIgZz0wLjQsZj0wLjQqZCxkPXQuSygpLGg9dC5LKCksaz10LksoKSxsPXQuSygpO0guVmkoMC41LDAuNS1nLDAuNStmLDAuNS1nLDAuNStnLDAuNS1mLDAuNStnLDAuNSwwLjQyLGQsaCxrLGwsbCk7dmFyIG09dC5LKCksbj10LksoKSxwPXQuSygpO0guVmkoMC41LDAuNS1nLDAuNStmLDAuNS1nLDAuNStnLDAuNS1mLDAuNStnLDAuNSwwLjU4LGwsbCxwLG0sbik7dmFyIHE9dC5LKCkscj10LksoKSxzPXQuSygpO0guVmkoMC41LDAuNStnLDAuNS1mLDAuNStnLDAuNS1nLDAuNStmLDAuNS1nLDAuNSwwLjQyLHEscixzLGwsbCk7dmFyIHU9DQp0LksoKSx2PXQuSygpLEQ9dC5LKCk7SC5WaSgwLjUsMC41K2csMC41LWYsMC41K2csMC41LWcsMC41K2YsMC41LWcsMC41LDAuNTgsbCxsLEQsdSx2KTtKKGEsRC54KmIsRC55KmMsITAsITApO0soYSx1LngqYix1LnkqYyx2LngqYix2LnkqYywoMC41LWcpKmIsMC41KmMpO0soYSwoMC41LWcpKmIsKDAuNS1mKSpjLCgwLjUtZikqYiwoMC41LWcpKmMsMC41KmIsKDAuNS1nKSpjKTtLKGEsZC54KmIsZC55KmMsaC54KmIsaC55KmMsay54KmIsay55KmMpO2EubGluZVRvKEQueCpiLEQueSpjKTtNKGEpO0ooYSxzLngqYixzLnkqYywhMCwhMCk7YS5saW5lVG8ocC54KmIscC55KmMpO0soYSxtLngqYixtLnkqYyxuLngqYixuLnkqYywoMC41K2cpKmIsMC41KmMpO0soYSwoMC41K2cpKmIsKDAuNStmKSpjLCgwLjUrZikqYiwoMC41K2cpKmMsMC41KmIsKDAuNStnKSpjKTtLKGEscS54KmIscS55KmMsci54KmIsci55KmMscy54KmIscy55KmMpO00oYSk7dC5CKGQpO3QuQihoKTt0LkIoayk7DQp0LkIobCk7dC5CKG0pO3QuQihuKTt0LkIocCk7dC5CKHEpO3QuQihyKTt0LkIocyk7dC5CKHUpO3QuQih2KTt0LkIoRCk7Yj1hLnM7dC52KGEpO2IudmM9V2c7cmV0dXJuIGJ9LEZyYWdpbGU6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMCwhMCk7YS5saW5lVG8oMC4yNSpiLDApO2EubGluZVRvKDAuMipiLDAuMTUqYyk7YS5saW5lVG8oMC4zKmIsMC4yNSpjKTthLmxpbmVUbygwLjI5KmIsMC4zMypjKTthLmxpbmVUbygwLjM1KmIsMC4yNSpjKTthLmxpbmVUbygwLjMqYiwwLjE1KmMpO2EubGluZVRvKDAuNCpiLDApO2EubGluZVRvKDEqYiwwKTtLKGEsMSpiLDAuMjUqYywwLjc1KmIsMC41KmMsMC41NSpiLDAuNSpjKTthLmxpbmVUbygwLjU1KmIsMC45KmMpO2EubGluZVRvKDAuNypiLDAuOSpjKTthLmxpbmVUbygwLjcqYiwxKmMpO2EubGluZVRvKDAuMypiLDEqYyk7YS5saW5lVG8oMC4zKmIsMC45KmMpO2EubGluZVRvKDAuNDUqYiwwLjkqYyk7YS5saW5lVG8oMC40NSoNCmIsMC41KmMpO0soYSwwLjI1KmIsMC41KmMsMCwwLjI1KmMsMCwwKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLjI1LDApO2IuSD1uZXcgSSgwLjc1LDAuNCk7dC52KGEpO3JldHVybiBifSxIb3VyR2xhc3M6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAuNjUqYiwwLjUqYywhMCk7YS5saW5lVG8oMSpiLDEqYyk7YS5saW5lVG8oMCwxKmMpO2EubGluZVRvKDAuMzUqYiwwLjUqYyk7YS5saW5lVG8oMCwwKTthLmxpbmVUbygxKmIsMCk7TShhKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LExpZ2h0bmluZzpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCpiLDAuNTUqYywhMCk7YS5saW5lVG8oMC43NSpiLDApO2EubGluZVRvKDAuMjUqYiwwLjQ1KmMpO2EubGluZVRvKDAuOSpiLDAuNDgqYyk7YS5saW5lVG8oMC40KmIsMSpjKTthLmxpbmVUbygwLjY1KmIsMC41NSpjKTtNKGEpO2I9YS5zO3QudihhKTtyZXR1cm4gYn0sUGFyYWxsZWxvZ3JhbTE6ZnVuY3Rpb24oYSxiLGMpe2E9YT8NCmEuSGM6MDswPT09YSYmKGE9MC4xKTt2YXIgZD10LnUoKTtKKGQsYSpiLDAsITApO2QubGluZVRvKDEqYiwwKTtkLmxpbmVUbygoMS1hKSpiLDEqYyk7ZC5saW5lVG8oMCwxKmMpO00oZCk7Yj1kLnM7Yi5HPW5ldyBJKGEsMCk7Yi5IPW5ldyBJKDEtYSwxKTt0LnYoZCk7cmV0dXJuIGJ9LElucHV0OiJPdXRwdXQiLE91dHB1dDpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwxKmMsITApO2EubGluZVRvKDAuMSpiLDApO2EubGluZVRvKDEqYiwwKTthLmxpbmVUbygwLjkqYiwxKmMpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMSwwKTtiLkg9bmV3IEkoMC45LDEpO3QudihhKTtyZXR1cm4gYn0sUGFyYWxsZWxvZ3JhbTI6ZnVuY3Rpb24oYSxiLGMpe2E9YT9hLkhjOjA7MD09PWEmJihhPTAuMjUpO3ZhciBkPXQudSgpO0ooZCxhKmIsMCwhMCk7ZC5saW5lVG8oMSpiLDApO2QubGluZVRvKCgxLWEpKmIsMSpjKTtkLmxpbmVUbygwLDEqYyk7TShkKTtiPWQucztiLkc9bmV3IEkoYSwwKTsNCmIuSD1uZXcgSSgxLWEsMSk7dC52KGQpO3JldHVybiBifSxUaGlja0Nyb3NzOmZ1bmN0aW9uKGEsYixjKXthPWE/YS5IYzowOzA9PT1hJiYoYT0wLjI1KTt2YXIgZD10LnUoKTtKKGQsKDAuNS1hLzIpKmIsMCwhMCk7ZC5saW5lVG8oKDAuNSthLzIpKmIsMCk7ZC5saW5lVG8oKDAuNSthLzIpKmIsKDAuNS1hLzIpKmMpO2QubGluZVRvKDEqYiwoMC41LWEvMikqYyk7ZC5saW5lVG8oMSpiLCgwLjUrYS8yKSpjKTtkLmxpbmVUbygoMC41K2EvMikqYiwoMC41K2EvMikqYyk7ZC5saW5lVG8oKDAuNSthLzIpKmIsMSpjKTtkLmxpbmVUbygoMC41LWEvMikqYiwxKmMpO2QubGluZVRvKCgwLjUtYS8yKSpiLCgwLjUrYS8yKSpjKTtkLmxpbmVUbygwLCgwLjUrYS8yKSpjKTtkLmxpbmVUbygwLCgwLjUtYS8yKSpjKTtkLmxpbmVUbygoMC41LWEvMikqYiwoMC41LWEvMikqYyk7TShkKTtiPWQucztiLkc9bmV3IEkoMC41LWEvMiwwLjUtYS8yKTtiLkg9bmV3IEkoMC41K2EvMiwwLjUrYS8yKTt0LnYoZCk7DQpyZXR1cm4gYn0sVGhpY2tYOmZ1bmN0aW9uKGEsYixjKXthPTAuMjUvTWF0aC5TUVJUMjt2YXIgZD10LnUoKTtKKGQsMC4zKmIsMCwhMCk7ZC5saW5lVG8oMC41KmIsMC4yKmMpO2QubGluZVRvKDAuNypiLDApO2QubGluZVRvKDEqYiwwLjMqYyk7ZC5saW5lVG8oMC44KmIsMC41KmMpO2QubGluZVRvKDEqYiwwLjcqYyk7ZC5saW5lVG8oMC43KmIsMSpjKTtkLmxpbmVUbygwLjUqYiwwLjgqYyk7ZC5saW5lVG8oMC4zKmIsMSpjKTtkLmxpbmVUbygwLDAuNypjKTtkLmxpbmVUbygwLjIqYiwwLjUqYyk7ZC5saW5lVG8oMCwwLjMqYyk7TShkKTtiPWQucztiLkc9bmV3IEkoMC41LWEsMC41LWEpO2IuSD1uZXcgSSgwLjUrYSwwLjUrYSk7dC52KGQpO3JldHVybiBifSxUaGluQ3Jvc3M6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWE/YS5IYzowOzA9PT1kJiYoZD0wLjEpO2E9dC51KCk7SihhLCgwLjUtZC8yKSpiLDAsITApO2EubGluZVRvKCgwLjUrZC8yKSpiLDApO2EubGluZVRvKCgwLjUrZC8NCjIpKmIsKDAuNS1kLzIpKmMpO2EubGluZVRvKDEqYiwoMC41LWQvMikqYyk7YS5saW5lVG8oMSpiLCgwLjUrZC8yKSpjKTthLmxpbmVUbygoMC41K2QvMikqYiwoMC41K2QvMikqYyk7YS5saW5lVG8oKDAuNStkLzIpKmIsMSpjKTthLmxpbmVUbygoMC41LWQvMikqYiwxKmMpO2EubGluZVRvKCgwLjUtZC8yKSpiLCgwLjUrZC8yKSpjKTthLmxpbmVUbygwLCgwLjUrZC8yKSpjKTthLmxpbmVUbygwLCgwLjUtZC8yKSpjKTthLmxpbmVUbygoMC41LWQvMikqYiwoMC41LWQvMikqYyk7TShhKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LFRoaW5YOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLjEqYiwwLCEwKTthLmxpbmVUbygwLjUqYiwwLjQqYyk7YS5saW5lVG8oMC45KmIsMCk7YS5saW5lVG8oMSpiLDAuMSpjKTthLmxpbmVUbygwLjYqYiwwLjUqYyk7YS5saW5lVG8oMSpiLDAuOSpjKTthLmxpbmVUbygwLjkqYiwxKmMpO2EubGluZVRvKDAuNSpiLDAuNipjKTthLmxpbmVUbygwLjEqDQpiLDEqYyk7YS5saW5lVG8oMCwwLjkqYyk7YS5saW5lVG8oMC40KmIsMC41KmMpO2EubGluZVRvKDAsMC4xKmMpO00oYSk7cmV0dXJuIGEuc30sUmlnaHRUcmlhbmdsZTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwwLCEwKTthLmxpbmVUbygxKmIsMSpjKTthLmxpbmVUbygwLDEqYyk7TShhKTtiPWEucztiLkc9bmV3IEkoMCwwLjUpO2IuSD1uZXcgSSgwLjUsMSk7dC52KGEpO3JldHVybiBifSxSb3VuZGVkSUJlYW06ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMCwhMCk7YS5saW5lVG8oMSpiLDApO0soYSwwLjUqYiwwLjI1KmMsMC41KmIsMC43NSpjLDEqYiwxKmMpO2EubGluZVRvKDAsMSpjKTtLKGEsMC41KmIsMC43NSpjLDAuNSpiLDAuMjUqYywwLDApO00oYSk7Yj1hLnM7dC52KGEpO3JldHVybiBifSxSb3VuZGVkUmVjdGFuZ2xlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hP2EuSGM6MDswPj1kJiYoZD01KTtkPU1hdGgubWluKGQsYi8zKTtkPU1hdGgubWluKGQsDQpjLzMpO2E9ZCpILnZhO3ZhciBmPXQudSgpO0ooZixkLDAsITApO2YubGluZVRvKGItZCwwKTtLKGYsYi1hLDAsYixhLGIsZCk7Zi5saW5lVG8oYixjLWQpO0soZixiLGMtYSxiLWEsYyxiLWQsYyk7Zi5saW5lVG8oZCxjKTtLKGYsYSxjLDAsYy1hLDAsYy1kKTtmLmxpbmVUbygwLGQpO0soZiwwLGEsYSwwLGQsMCk7TShmKTtiPWYuczsxPGE/KGIuRz1uZXcgSSgwLDAsYSxhKSxiLkg9bmV3IEkoMSwxLC1hLC1hKSk6KGIuRz1FYixiLkg9UGIpO3QudihmKTtyZXR1cm4gYn0sQm9yZGVyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hP2EuSGM6MDswPj1kJiYoZD01KTtkPU1hdGgubWluKGQsYi8zKTtkPU1hdGgubWluKGQsYy8zKTthPXQudSgpO0ooYSxkLDAsITApO2EubGluZVRvKGItZCwwKTtLKGEsYi0wLDAsYiwwLGIsZCk7YS5saW5lVG8oYixjLWQpO0soYSxiLGMtMCxiLTAsYyxiLWQsYyk7YS5saW5lVG8oZCxjKTtLKGEsMCxjLDAsYy0wLDAsYy1kKTthLmxpbmVUbygwLGQpO0soYSwNCjAsMCwwLDAsZCwwKTtNKGEpO2I9YS5zO2IuRz1FYjtiLkg9UGI7dC52KGEpO3JldHVybiBifSxTcXVhcmVJQmVhbTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YT9hLkhjOjA7MD09PWQmJihkPTAuMik7YT10LnUoKTtKKGEsMCwwLCEwKTthLmxpbmVUbygxKmIsMCk7YS5saW5lVG8oMSpiLGQqYyk7YS5saW5lVG8oKDAuNStkLzIpKmIsZCpjKTthLmxpbmVUbygoMC41K2QvMikqYiwoMS1kKSpjKTthLmxpbmVUbygxKmIsKDEtZCkqYyk7YS5saW5lVG8oMSpiLDEqYyk7YS5saW5lVG8oMCwxKmMpO2EubGluZVRvKDAsKDEtZCkqYyk7YS5saW5lVG8oKDAuNS1kLzIpKmIsKDEtZCkqYyk7YS5saW5lVG8oKDAuNS1kLzIpKmIsZCpjKTthLmxpbmVUbygwLGQqYyk7TShhKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LFRyYXBlem9pZDpmdW5jdGlvbihhLGIsYyl7YT1hP2EuSGM6MDswPT09YSYmKGE9MC4yKTt2YXIgZD10LnUoKTtKKGQsYSpiLDAsITApO2QubGluZVRvKCgxLWEpKmIsMCk7ZC5saW5lVG8oMSoNCmIsMSpjKTtkLmxpbmVUbygwLDEqYyk7TShkKTtiPWQucztiLkc9bmV3IEkoYSwwKTtiLkg9bmV3IEkoMS1hLDEpO3QudihkKTtyZXR1cm4gYn0sTWFudWFsTG9vcDoiTWFudWFsT3BlcmF0aW9uIixNYW51YWxPcGVyYXRpb246ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWE/YS5IYzowO2E9dC51KCk7SihhLGQsMCwhMCk7YS5saW5lVG8oMCwwKTthLmxpbmVUbygxKmIsMCk7YS5saW5lVG8oMC45KmIsMSpjKTthLmxpbmVUbygwLjEqYiwxKmMpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMSwwKTtiLkg9bmV3IEkoMC45LDEpO3QudihhKTtyZXR1cm4gYn0sR2VuZGVyTWFsZTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTt2YXIgZD1ILnZhLGY9MC40KmQsZz0wLjQsaD10LksoKSxrPXQuSygpLGw9dC5LKCksbT10LksoKTtKKGEsKDAuNS1nKSpiLDAuNSpjLCEwKTtLKGEsKDAuNS1nKSpiLCgwLjUtZikqYywoMC41LWYpKmIsKDAuNS1nKSpjLDAuNSpiLCgwLjUtZykqYyk7SC5WaSgwLjUsMC41LQ0KZywwLjUrZiwwLjUtZywwLjUrZywwLjUtZiwwLjUrZywwLjUsMC40NCxsLG0sayxoLGgpO0soYSxsLngqYixsLnkqYyxtLngqYixtLnkqYyxrLngqYixrLnkqYyk7dmFyIG49dC5sYyhrLngsay55KTtILlZpKDAuNSwwLjUtZywwLjUrZiwwLjUtZywwLjUrZywwLjUtZiwwLjUrZywwLjUsMC41NixoLGgsayxsLG0pO3ZhciBwPXQubGMoay54LGsueSk7YS5saW5lVG8oKDAuMSpuLngrMC44NTUpKmIsMC4xKm4ueSpjKTthLmxpbmVUbygwLjg1KmIsMC4xKm4ueSpjKTthLmxpbmVUbygwLjg1KmIsMCk7YS5saW5lVG8oMSpiLDApO2EubGluZVRvKDEqYiwwLjE1KmMpO2EubGluZVRvKCgwLjEqcC54KzAuOSkqYiwwLjE1KmMpO2EubGluZVRvKCgwLjEqcC54KzAuOSkqYiwoMC4xKnAueSswLjA1KjAuOSkqYyk7YS5saW5lVG8ocC54KmIscC55KmMpO0soYSxsLngqYixsLnkqYyxtLngqYixtLnkqYywoMC41K2cpKmIsMC41KmMpO0soYSwoMC41K2cpKmIsKDAuNStmKSpjLCgwLjUrZikqYiwoMC41Kw0KZykqYywwLjUqYiwoMC41K2cpKmMpO0soYSwoMC41LWYpKmIsKDAuNStnKSpjLCgwLjUtZykqYiwoMC41K2YpKmMsKDAuNS1nKSpiLDAuNSpjKTtnPTAuMzU7Zj0wLjM1KmQ7SihhLDAuNSpiLCgwLjUtZykqYywhMCwhMCk7SyhhLCgwLjUtZikqYiwoMC41LWcpKmMsKDAuNS1nKSpiLCgwLjUtZikqYywoMC41LWcpKmIsMC41KmMpO0soYSwoMC41LWcpKmIsKDAuNStmKSpjLCgwLjUtZikqYiwoMC41K2cpKmMsMC41KmIsKDAuNStnKSpjKTtLKGEsKDAuNStmKSpiLCgwLjUrZykqYywoMC41K2cpKmIsKDAuNStmKSpjLCgwLjUrZykqYiwwLjUqYyk7SyhhLCgwLjUrZykqYiwoMC41LWYpKmMsKDAuNStmKSpiLCgwLjUtZykqYywwLjUqYiwoMC41LWcpKmMpO0ooYSwoMC41LWcpKmIsMC41KmMsITApO3QuQihoKTt0LkIoayk7dC5CKGwpO3QuQihtKTt0LkIobik7dC5CKHApO2I9YS5zO2IuRz1uZXcgSSgwLjIwMiwwLjI1Nyk7Yi5IPW5ldyBJKDAuNjkyLDAuODM5KTtiLnZjPVdnO3QudihhKTsNCnJldHVybiBifSxHZW5kZXJGZW1hbGU6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7dmFyIGQ9MC4zNzUsZj0wLGc9LTAuMTI1LGg9NCooTWF0aC5TUVJUMi0xKS8zKmQ7SihhLCgwLjUyNStmKSpiLCgwLjUrZCtnKSpjLCEwKTtLKGEsKDAuNStoK2YpKmIsKDAuNStkK2cpKmMsKDAuNStkK2YpKmIsKDAuNStoK2cpKmMsKDAuNStkK2YpKmIsKDAuNStnKSpjKTtLKGEsKDAuNStkK2YpKmIsKDAuNS1oK2cpKmMsKDAuNStoK2YpKmIsKDAuNS1kK2cpKmMsKDAuNStmKSpiLCgwLjUtZCtnKSpjKTtLKGEsKDAuNS1oK2YpKmIsKDAuNS1kK2cpKmMsKDAuNS1kK2YpKmIsKDAuNS1oK2cpKmMsKDAuNS1kK2YpKmIsKDAuNStnKSpjKTtLKGEsKDAuNS1kK2YpKmIsKDAuNStoK2cpKmMsKDAuNS1oK2YpKmIsKDAuNStkK2cpKmMsKDAuNDc1K2YpKmIsKDAuNStkK2cpKmMpO2EubGluZVRvKDAuNDc1KmIsMC44NSpjKTthLmxpbmVUbygwLjQyNSpiLDAuODUqYyk7YS5saW5lVG8oMC40MjUqYiwwLjkqYyk7DQphLmxpbmVUbygwLjQ3NSpiLDAuOSpjKTthLmxpbmVUbygwLjQ3NSpiLDEqYyk7YS5saW5lVG8oMC41MjUqYiwxKmMpO2EubGluZVRvKDAuNTI1KmIsMC45KmMpO2EubGluZVRvKDAuNTc1KmIsMC45KmMpO2EubGluZVRvKDAuNTc1KmIsMC44NSpjKTthLmxpbmVUbygwLjUyNSpiLDAuODUqYyk7TShhKTtkPTAuMzI1O2Y9MDtnPS0wLjEyNTtoPTQqKE1hdGguU1FSVDItMSkvMypkO0ooYSwoMC41K2QrZikqYiwoMC41K2cpKmMsITAsITApO0soYSwoMC41K2QrZikqYiwoMC41K2grZykqYywoMC41K2grZikqYiwoMC41K2QrZykqYywoMC41K2YpKmIsKDAuNStkK2cpKmMpO0soYSwoMC41LWgrZikqYiwoMC41K2QrZykqYywoMC41LWQrZikqYiwoMC41K2grZykqYywoMC41LWQrZikqYiwoMC41K2cpKmMpO0soYSwoMC41LWQrZikqYiwoMC41LWgrZykqYywoMC41LWgrZikqYiwoMC41LWQrZykqYywoMC41K2YpKmIsKDAuNS1kK2cpKmMpO0soYSwoMC41K2grZikqYiwoMC41LWQrZykqYywNCigwLjUrZCtmKSpiLCgwLjUtaCtnKSpjLCgwLjUrZCtmKSpiLCgwLjUrZykqYyk7SihhLCgwLjUyNStmKSpiLCgwLjUrZCtnKSpjLCEwKTtiPWEucztiLkc9bmV3IEkoMC4yMzIsMC4xMzYpO2IuSD1uZXcgSSgwLjc4MiwwLjYxMSk7Yi52Yz1XZzt0LnYoYSk7cmV0dXJuIGJ9LFBsdXNMaW5lOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLDAuNSpjLCExKTthLmxpbmVUbygxKmIsMC41KmMpO2EubW92ZVRvKDAuNSpiLDApO2EubGluZVRvKDAuNSpiLDEqYyk7Yj1hLnM7dC52KGEpO3JldHVybiBifSxYTGluZTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwxKmMsITEpO2EubGluZVRvKDEqYiwwKTthLm1vdmVUbygwLDApO2EubGluZVRvKDEqYiwxKmMpO2I9YS5zO3QudihhKTtyZXR1cm4gYn0sQXN0ZXJpc2tMaW5lOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO3ZhciBkPTAuMi9NYXRoLlNRUlQyO0ooYSxkKmIsKDEtZCkqYywhMSk7YS5saW5lVG8oKDEtZCkqYixkKmMpOw0KYS5tb3ZlVG8oZCpiLGQqYyk7YS5saW5lVG8oKDEtZCkqYiwoMS1kKSpjKTthLm1vdmVUbygwKmIsMC41KmMpO2EubGluZVRvKDEqYiwwLjUqYyk7YS5tb3ZlVG8oMC41KmIsMCpjKTthLmxpbmVUbygwLjUqYiwxKmMpO2I9YS5zO3QudihhKTtyZXR1cm4gYn0sQ2lyY2xlTGluZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MC41KkgudmE7YT10LnUoKTtKKGEsMSpiLDAuNSpjLCExKTtLKGEsMSpiLCgwLjUrZCkqYywoMC41K2QpKmIsMSpjLDAuNSpiLDEqYyk7SyhhLCgwLjUtZCkqYiwxKmMsMCwoMC41K2QpKmMsMCwwLjUqYyk7SyhhLDAsKDAuNS1kKSpjLCgwLjUtZCkqYiwwLDAuNSpiLDApO0soYSwoMC41K2QpKmIsMCwxKmIsKDAuNS1kKSpjLDEqYiwwLjUqYyk7Yj1hLnM7Yi5HPW5ldyBJKDAuMTQ2LDAuMTQ2KTtiLkg9bmV3IEkoMC44NTMsMC44NTMpO2IudmM9V2c7dC52KGEpO3JldHVybiBifSxQaWU6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7dmFyIGQ9NCooTWF0aC5TUVJUMi0xKS8NCjMqMC41O0ooYSwoMC41Kk1hdGguU1FSVDIvMiswLjUpKmIsKDAuNS0wLjUqTWF0aC5TUVJUMi8yKSpjLCEwKTtLKGEsMC43KmIsMCpjLDAuNSpiLDAqYywwLjUqYiwwKmMpO0soYSwoMC41LWQrMCkqYiwwKmMsMCpiLCgwLjUtZCswKSpjLDAqYiwwLjUqYyk7SyhhLDAqYiwoMC41K2QrMCkqYywoMC41LWQrMCkqYiwxKmMsMC41KmIsMSpjKTtLKGEsKDAuNStkKzApKmIsMSpjLDEqYiwoMC41K2QrMCkqYywxKmIsMC41KmMpO2EubGluZVRvKDAuNSpiLDAuNSpjKTtNKGEpO2I9YS5zO3QudihhKTtyZXR1cm4gYn0sUGllUGllY2U6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUgudmEvTWF0aC5TUVJUMiowLjUsZj1NYXRoLlNRUlQyLzIsZz0xLU1hdGguU1FSVDIvMjthPXQudSgpO0ooYSxiLGMsITApO0soYSxiLCgxLWQpKmMsKGYrZCkqYiwoZytkKSpjLGYqYixnKmMpO2EubGluZVRvKDAsYyk7TShhKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LFN0b3BTaWduOmZ1bmN0aW9uKGEsYixjKXthPQ0KMS8oTWF0aC5TUVJUMisyKTt2YXIgZD10LnUoKTtKKGQsYSpiLDAsITApO2QubGluZVRvKCgxLWEpKmIsMCk7ZC5saW5lVG8oMSpiLGEqYyk7ZC5saW5lVG8oMSpiLCgxLWEpKmMpO2QubGluZVRvKCgxLWEpKmIsMSpjKTtkLmxpbmVUbyhhKmIsMSpjKTtkLmxpbmVUbygwLCgxLWEpKmMpO2QubGluZVRvKDAsYSpjKTtNKGQpO2I9ZC5zO2IuRz1uZXcgSShhLzIsYS8yKTtiLkg9bmV3IEkoMS1hLzIsMS1hLzIpO3QudihkKTtyZXR1cm4gYn0sTG9naWNJbXBsaWVzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hP2EuSGM6MDswPT09ZCYmKGQ9MC4yKTthPXQudSgpO0ooYSwoMS1kKSpiLDAqYywhMSk7YS5saW5lVG8oMSpiLDAuNSpjKTthLmxpbmVUbygoMS1kKSpiLGMpO2EubW92ZVRvKDAsMC41KmMpO2EubGluZVRvKGIsMC41KmMpO2I9YS5zO2IuRz1FYjtiLkg9bmV3IEkoMC44LDAuNSk7dC52KGEpO3JldHVybiBifSxMb2dpY0lmZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YT9hLkhjOjA7DQowPT09ZCYmKGQ9MC4yKTthPXQudSgpO0ooYSwoMS1kKSpiLDAqYywhMSk7YS5saW5lVG8oMSpiLDAuNSpjKTthLmxpbmVUbygoMS1kKSpiLGMpO2EubW92ZVRvKDAsMC41KmMpO2EubGluZVRvKGIsMC41KmMpO2EubW92ZVRvKGQqYiwwKTthLmxpbmVUbygwLDAuNSpjKTthLmxpbmVUbyhkKmIsYyk7Yj1hLnM7Yi5HPW5ldyBJKDAuMiwwKTtiLkg9bmV3IEkoMC44LDAuNSk7dC52KGEpO3JldHVybiBifSxMb2dpY05vdDpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwwLCExKTthLmxpbmVUbygxKmIsMCk7YS5saW5lVG8oMSpiLDEqYyk7Yj1hLnM7dC52KGEpO3JldHVybiBifSxMb2dpY0FuZDpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwxKmMsITEpO2EubGluZVRvKDAuNSpiLDApO2EubGluZVRvKDEqYiwxKmMpO2I9YS5zO2IuRz1uZXcgSSgwLjI1LDAuNSk7Yi5IPW5ldyBJKDAuNzUsMSk7dC52KGEpO3JldHVybiBifSxMb2dpY09yOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpOw0KSihhLDAsMCwhMSk7YS5saW5lVG8oMC41KmIsMSpjKTthLmxpbmVUbygxKmIsMCk7Yj1hLnM7Yi5HPW5ldyBJKDAuMjE5LDApO2IuSD1uZXcgSSgwLjc4LDAuNDA5KTt0LnYoYSk7cmV0dXJuIGJ9LExvZ2ljWG9yOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLjUqYiwwLCExKTthLmxpbmVUbygwLjUqYiwxKmMpO2EubW92ZVRvKDAsMC41KmMpO2EubGluZVRvKDEqYiwwLjUqYyk7dmFyIGQ9MC41KkgudmE7SyhhLDEqYiwoMC41K2QpKmMsKDAuNStkKSpiLDEqYywwLjUqYiwxKmMpO0soYSwoMC41LWQpKmIsMSpjLDAsKDAuNStkKSpjLDAsMC41KmMpO0soYSwwLCgwLjUtZCkqYywoMC41LWQpKmIsMCwwLjUqYiwwKTtLKGEsKDAuNStkKSpiLDAsMSpiLCgwLjUtZCkqYywxKmIsMC41KmMpO2I9YS5zO2IudmM9V2c7dC52KGEpO3JldHVybiBifSxMb2dpY1RydXRoOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLDAsITEpO2EubGluZVRvKDEqYiwwKTthLm1vdmVUbygwLjUqDQpiLDApO2EubGluZVRvKDAuNSpiLDEqYyk7Yj1hLnM7dC52KGEpO3JldHVybiBifSxMb2dpY0ZhbHNpdHk6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMSpjLCExKTthLmxpbmVUbygxKmIsMSpjKTthLm1vdmVUbygwLjUqYiwxKmMpO2EubGluZVRvKDAuNSpiLDApO2I9YS5zO3QudihhKTtyZXR1cm4gYn0sTG9naWNUaGVyZUV4aXN0czpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwwLCExKTthLmxpbmVUbygxKmIsMCk7YS5saW5lVG8oMSpiLDAuNSpjKTthLmxpbmVUbygwLDAuNSpjKTthLm1vdmVUbygxKmIsMC41KmMpO2EubGluZVRvKDEqYiwxKmMpO2EubGluZVRvKDAsMSpjKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LExvZ2ljRm9yQWxsOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLDAsITEpO2EubGluZVRvKDAuNSpiLDEqYyk7YS5saW5lVG8oMSpiLDApO2EubW92ZVRvKDAuMjUqYiwwLjUqYyk7YS5saW5lVG8oMC43NSpiLDAuNSpjKTtiPWEucztiLkc9DQpuZXcgSSgwLjI1LDApO2IuSD1uZXcgSSgwLjc1LDAuNSk7dC52KGEpO3JldHVybiBifSxMb2dpY0lzRGVmaW5lZEFzOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLDAsITEpO2EubGluZVRvKGIsMCk7YS5tb3ZlVG8oMCwwLjUqYyk7YS5saW5lVG8oYiwwLjUqYyk7YS5tb3ZlVG8oMCxjKTthLmxpbmVUbyhiLGMpO2I9YS5zO2IuRz1uZXcgSSgwLjAxLDAuMDEpO2IuSD1uZXcgSSgwLjk5LDAuNDkpO3QudihhKTtyZXR1cm4gYn0sTG9naWNJbnRlcnNlY3Q6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPTAuNSpILnZhO2E9dC51KCk7SihhLDAsMSpjLCExKTthLmxpbmVUbygwLDAuNSpjKTtLKGEsMCwoMC41LWQpKmMsKDAuNS1kKSpiLDAsMC41KmIsMCk7SyhhLCgwLjUrZCkqYiwwLDEqYiwoMC41LWQpKmMsMSpiLDAuNSpjKTthLmxpbmVUbygxKmIsMSpjKTtiPWEucztiLkc9bmV3IEkoMCwwLjUpO2IuSD1QYjt0LnYoYSk7cmV0dXJuIGJ9LExvZ2ljVW5pb246ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPQ0KMC41KkgudmE7YT10LnUoKTtKKGEsMSpiLDAsITEpO2EubGluZVRvKDEqYiwwLjUqYyk7SyhhLDEqYiwoMC41K2QpKmMsKDAuNStkKSpiLDEqYywwLjUqYiwxKmMpO0soYSwoMC41LWQpKmIsMSpjLDAsKDAuNStkKSpjLDAsMC41KmMpO2EubGluZVRvKDAsMCk7Yj1hLnM7Yi5HPUViO2IuSD1uZXcgSSgxLDAuNSk7dC52KGEpO3JldHVybiBifSxBcnJvdzpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YT9hLkhjOjAsZj1hP2EuRXQ6MDswPT09ZCYmKGQ9MC4zKTswPT09ZiYmKGY9MC4zKTthPXQudSgpO0ooYSwwLCgwLjUtZi8yKSpjLCEwKTthLmxpbmVUbygoMS1kKSpiLCgwLjUtZi8yKSpjKTthLmxpbmVUbygoMS1kKSpiLDApO2EubGluZVRvKDEqYiwwLjUqYyk7YS5saW5lVG8oKDEtZCkqYiwxKmMpO2EubGluZVRvKCgxLWQpKmIsKDAuNStmLzIpKmMpO2EubGluZVRvKDAsKDAuNStmLzIpKmMpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAsMC41LWYvMik7ZD1ILmlsKDAsMC41K2YvMiwxLDAuNSsNCmYvMiwxLWQsMSwxLDAuNSx0LksoKSk7Yi5IPW5ldyBJKGQueCxkLnkpO3QuQihkKTt0LnYoYSk7cmV0dXJuIGJ9LElTT1Byb2Nlc3M6IkNoZXZyb24iLENoZXZyb246ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMCwhMCk7YS5saW5lVG8oMC41KmIsMCk7YS5saW5lVG8oMSpiLDAuNSpjKTthLmxpbmVUbygwLjUqYiwxKmMpO2EubGluZVRvKDAsMSpjKTthLmxpbmVUbygwLjUqYiwwLjUqYyk7TShhKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LERvdWJsZUFycm93OmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLDAsITApO2EubGluZVRvKDAuMypiLDAuMjE0KmMpO2EubGluZVRvKDAuMypiLDApO2EubGluZVRvKDEqYiwwLjUqYyk7YS5saW5lVG8oMC4zKmIsMSpjKTthLmxpbmVUbygwLjMqYiwwLjc4NipjKTthLmxpbmVUbygwLDEqYyk7TShhKTtKKGEsMC4zKmIsMC4yMTQqYywhMSk7YS5saW5lVG8oMC4zKmIsMC43ODYqYyk7YS5iYighMSk7Yj1hLnM7dC52KGEpO3JldHVybiBifSwNCkRvdWJsZUVuZEFycm93OmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwxKmIsMC41KmMsITApO2EubGluZVRvKDAuNypiLDEqYyk7YS5saW5lVG8oMC43KmIsMC43KmMpO2EubGluZVRvKDAuMypiLDAuNypjKTthLmxpbmVUbygwLjMqYiwxKmMpO2EubGluZVRvKDAsMC41KmMpO2EubGluZVRvKDAuMypiLDApO2EubGluZVRvKDAuMypiLDAuMypjKTthLmxpbmVUbygwLjcqYiwwLjMqYyk7YS5saW5lVG8oMC43KmIsMCk7TShhKTtiPWEucztjPUguaWwoMCwwLjUsMC4zLDAsMCwwLjMsMC4zLDAuMyx0LksoKSk7Yi5HPW5ldyBJKGMueCxjLnkpO2M9SC5pbCgwLjcsMSwxLDAuNSwwLjcsMC43LDEsMC43LGMpO2IuSD1uZXcgSShjLngsYy55KTt0LkIoYyk7dC52KGEpO3JldHVybiBifSxJQmVhbUFycm93OmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwxKmIsMC41KmMsITApO2EubGluZVRvKDAuNypiLDEqYyk7YS5saW5lVG8oMC43KmIsMC43KmMpO2EubGluZVRvKDAuMipiLDAuNyoNCmMpO2EubGluZVRvKDAuMipiLDEqYyk7YS5saW5lVG8oMCwxKmMpO2EubGluZVRvKDAsMCk7YS5saW5lVG8oMC4yKmIsMCk7YS5saW5lVG8oMC4yKmIsMC4zKmMpO2EubGluZVRvKDAuNypiLDAuMypjKTthLmxpbmVUbygwLjcqYiwwKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLDAuMyk7Yz1ILmlsKDAuNywxLDEsMC41LDAuNywwLjcsMSwwLjcsdC5LKCkpO2IuSD1uZXcgSShjLngsYy55KTt0LkIoYyk7dC52KGEpO3JldHVybiBifSxQb2ludGVyOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwxKmIsMC41KmMsITApO2EubGluZVRvKDAsMSpjKTthLmxpbmVUbygwLjIqYiwwLjUqYyk7YS5saW5lVG8oMCwwKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLjIsMC4zNSk7Yz1ILmlsKDAuMiwwLjY1LDEsMC42NSwwLDEsMSwwLjUsdC5LKCkpO2IuSD1uZXcgSShjLngsYy55KTt0LkIoYyk7dC52KGEpO3JldHVybiBifSxSb3VuZGVkUG9pbnRlcjpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsDQoxKmIsMC41KmMsITApO2EubGluZVRvKDAsMSpjKTtLKGEsMC41KmIsMC43NSpjLDAuNSpiLDAuMjUqYywwLDApO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuNCwwLjM1KTtjPUguaWwoMC4yLDAuNjUsMSwwLjY1LDAsMSwxLDAuNSx0LksoKSk7Yi5IPW5ldyBJKGMueCxjLnkpO3QuQihjKTt0LnYoYSk7cmV0dXJuIGJ9LFNwbGl0RW5kQXJyb3c6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDEqYiwwLjUqYywhMCk7YS5saW5lVG8oMC43KmIsMSpjKTthLmxpbmVUbygwLjcqYiwwLjcqYyk7YS5saW5lVG8oMCwwLjcqYyk7YS5saW5lVG8oMC4yKmIsMC41KmMpO2EubGluZVRvKDAsMC4zKmMpO2EubGluZVRvKDAuNypiLDAuMypjKTthLmxpbmVUbygwLjcqYiwwKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLjIsMC4zKTtjPUguaWwoMC43LDEsMSwwLjUsMC43LDAuNywxLDAuNyx0LksoKSk7Yi5IPW5ldyBJKGMueCxjLnkpO3QuQihjKTt0LnYoYSk7cmV0dXJuIGJ9LE1lc3NhZ2VUb1VzZXI6IlNxdWFyZUFycm93IiwNClNxdWFyZUFycm93OmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwxKmIsMC41KmMsITApO2EubGluZVRvKDAuNypiLDEqYyk7YS5saW5lVG8oMCwxKmMpO2EubGluZVRvKDAsMCk7YS5saW5lVG8oMC43KmIsMCk7TShhKTtiPWEucztiLkc9RWI7Yi5IPW5ldyBJKDAuNywxKTt0LnYoYSk7cmV0dXJuIGJ9LENvbmUxOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1ILnZhO2E9MC41KmQ7dmFyIGY9MC4xKmQsZD10LnUoKTtKKGQsMCwwLjkqYywhMCk7ZC5saW5lVG8oMC41KmIsMCk7ZC5saW5lVG8oMSpiLDAuOSpjKTtLKGQsMSpiLCgwLjkrZikqYywoMC41K2EpKmIsMSpjLDAuNSpiLDEqYyk7SyhkLCgwLjUtYSkqYiwxKmMsMCwoMC45K2YpKmMsMCwwLjkqYyk7TShkKTtiPWQucztiLkc9bmV3IEkoMC4yNSwwLjUpO2IuSD1uZXcgSSgwLjc1LDAuOTcpO3QudihkKTtyZXR1cm4gYn0sQ29uZTI6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMC45KmMsITApO0soYSwoMS0wLjg1LzAuOSkqDQpiLDEqYywwLjg1LzAuOSpiLDEqYywxKmIsMC45KmMpO2EubGluZVRvKDAuNSpiLDApO2EubGluZVRvKDAsMC45KmMpO00oYSk7SihhLDAsMC45KmMsITEpO0soYSwoMS0wLjg1LzAuOSkqYiwwLjgqYywwLjg1LzAuOSpiLDAuOCpjLDEqYiwwLjkqYyk7YS5iYighMSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMjUsMC41KTtiLkg9bmV3IEkoMC43NSwwLjgyKTt0LnYoYSk7cmV0dXJuIGJ9LEN1YmUxOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLjUqYiwxKmMsITApO2EubGluZVRvKDEqYiwwLjg1KmMpO2EubGluZVRvKDEqYiwwLjE1KmMpO2EubGluZVRvKDAuNSpiLDAqYyk7YS5saW5lVG8oMCpiLDAuMTUqYyk7YS5saW5lVG8oMCpiLDAuODUqYyk7TShhKTtKKGEsMC41KmIsMSpjLCExKTthLmxpbmVUbygwLjUqYiwwLjMqYyk7YS5saW5lVG8oMCwwLjE1KmMpO2EubW92ZVRvKDAuNSpiLDAuMypjKTthLmxpbmVUbygxKmIsMC4xNSpjKTthLmJiKCExKTtiPWEucztiLkc9bmV3IEkoMCwNCjAuMyk7Yi5IPW5ldyBJKDAuNSwwLjg1KTt0LnYoYSk7cmV0dXJuIGJ9LEN1YmUyOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLDAuMypjLCEwKTthLmxpbmVUbygwKmIsMSpjKTthLmxpbmVUbygwLjcqYixjKTthLmxpbmVUbygxKmIsMC43KmMpO2EubGluZVRvKDEqYiwwKmMpO2EubGluZVRvKDAuMypiLDAqYyk7TShhKTtKKGEsMCwwLjMqYywhMSk7YS5saW5lVG8oMC43KmIsMC4zKmMpO2EubGluZVRvKDEqYiwwKmMpO2EubW92ZVRvKDAuNypiLDAuMypjKTthLmxpbmVUbygwLjcqYiwxKmMpO2EuYmIoITEpO2I9YS5zO2IuRz1uZXcgSSgwLDAuMyk7Yi5IPW5ldyBJKDAuNywxKTt0LnYoYSk7cmV0dXJuIGJ9LE1hZ25ldGljRGF0YToiQ3lsaW5kZXIxIixDeWxpbmRlcjE6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUgudmE7YT0wLjUqZDt2YXIgZj0wLjEqZCxkPXQudSgpO0ooZCwwLDAuMSpjLCEwKTtLKGQsMCwoMC4xLWYpKmMsKDAuNS1hKSpiLDAsMC41KmIsMCk7SyhkLCgwLjUrDQphKSpiLDAsMSpiLCgwLjEtZikqYywxKmIsMC4xKmMpO2QubGluZVRvKGIsMC45KmMpO0soZCwxKmIsKDAuOStmKSpjLCgwLjUrYSkqYiwxKmMsMC41KmIsMSpjKTtLKGQsKDAuNS1hKSpiLDEqYywwLCgwLjkrZikqYywwLDAuOSpjKTtkLmxpbmVUbygwLDAuMSpjKTtKKGQsMCwwLjEqYywhMSk7SyhkLDAsKDAuMStmKSpjLCgwLjUtYSkqYiwwLjIqYywwLjUqYiwwLjIqYyk7SyhkLCgwLjUrYSkqYiwwLjIqYywxKmIsKDAuMStmKSpjLDEqYiwwLjEqYyk7ZC5iYighMSk7Yj1kLnM7Yi5HPW5ldyBJKDAsMC4yKTtiLkg9bmV3IEkoMSwwLjkpO3QudihkKTtyZXR1cm4gYn0sQ3lsaW5kZXIyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1ILnZhO2E9MC41KmQ7dmFyIGY9MC4xKmQsZD10LnUoKTtKKGQsMCwwLjkqYywhMCk7ZC5saW5lVG8oMCwwLjEqYyk7SyhkLDAsKDAuMS1mKSpjLCgwLjUtYSkqYiwwLDAuNSpiLDApO0soZCwoMC41K2EpKmIsMCwxKmIsKDAuMS1mKSpjLDEqYiwwLjEqYyk7ZC5saW5lVG8oMSoNCmIsMC45KmMpO0soZCwxKmIsKDAuOStmKSpjLCgwLjUrYSkqYiwxKmMsMC41KmIsMSpjKTtLKGQsKDAuNS1hKSpiLDEqYywwLCgwLjkrZikqYywwLDAuOSpjKTtKKGQsMCwwLjkqYywhMSk7SyhkLDAsKDAuOS1mKSpjLCgwLjUtYSkqYiwwLjgqYywwLjUqYiwwLjgqYyk7SyhkLCgwLjUrYSkqYiwwLjgqYywxKmIsKDAuOS1mKSpjLDEqYiwwLjkqYyk7ZC5iYighMSk7Yj1kLnM7Yi5HPW5ldyBJKDAsMC4xKTtiLkg9bmV3IEkoMSwwLjgpO3QudihkKTtyZXR1cm4gYn0sQ3lsaW5kZXIzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1ILnZhO2E9MC4xKmQ7dmFyIGY9MC41KmQsZD10LnUoKTtKKGQsMC4xKmIsMCwhMCk7ZC5saW5lVG8oMC45KmIsMCk7SyhkLCgwLjkrYSkqYiwwLDEqYiwoMC41LWYpKmMsMSpiLDAuNSpjKTtLKGQsMSpiLCgwLjUrZikqYywoMC45K2EpKmIsMSpjLDAuOSpiLDEqYyk7ZC5saW5lVG8oMC4xKmIsMSpjKTtLKGQsKDAuMS1hKSpiLDEqYywwLCgwLjUrZikqYywwLDAuNSoNCmMpO0soZCwwLCgwLjUtZikqYywoMC4xLWEpKmIsMCwwLjEqYiwwKTtKKGQsMC4xKmIsMCwhMSk7SyhkLCgwLjErYSkqYiwwLDAuMipiLCgwLjUtZikqYywwLjIqYiwwLjUqYyk7SyhkLDAuMipiLCgwLjUrZikqYywoMC4xK2EpKmIsMSpjLDAuMSpiLDEqYyk7ZC5iYighMSk7Yj1kLnM7Yi5HPW5ldyBJKDAuMiwwKTtiLkg9bmV3IEkoMC45LDEpO3QudihkKTtyZXR1cm4gYn0sRGlyZWN0RGF0YToiQ3lsaW5kZXI0IixDeWxpbmRlcjQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUgudmE7YT0wLjEqZDt2YXIgZj0wLjUqZCxkPXQudSgpO0ooZCwwLjkqYiwwLCEwKTtLKGQsKDAuOSthKSpiLDAsMSpiLCgwLjUtZikqYywxKmIsMC41KmMpO0soZCwxKmIsKDAuNStmKSpjLCgwLjkrYSkqYiwxKmMsMC45KmIsMSpjKTtkLmxpbmVUbygwLjEqYiwxKmMpO0soZCwoMC4xLWEpKmIsMSpjLDAsKDAuNStmKSpjLDAsMC41KmMpO0soZCwwLCgwLjUtZikqYywoMC4xLWEpKmIsMCwwLjEqYiwwKTtkLmxpbmVUbygwLjkqDQpiLDApO0ooZCwwLjkqYiwwLCExKTtLKGQsKDAuOS1hKSpiLDAsMC44KmIsKDAuNS1mKSpjLDAuOCpiLDAuNSpjKTtLKGQsMC44KmIsKDAuNStmKSpjLCgwLjktYSkqYiwxKmMsMC45KmIsMSpjKTtkLmJiKCExKTtiPWQucztiLkc9bmV3IEkoMC4xLDApO2IuSD1uZXcgSSgwLjgsMSk7dC52KGQpO3JldHVybiBifSxQcmlzbTE6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAuMjUqYiwwLjI1KmMsITApO2EubGluZVRvKDAuNzUqYiwwKTthLmxpbmVUbyhiLDAuNSpjKTthLmxpbmVUbygwLjUqYixjKTthLmxpbmVUbygwLGMpO00oYSk7SihhLDAuMjUqYiwwLjI1KmMsITEpO2EubGluZVRvKDAuNSpiLGMpO2EuYmIoITEpO2I9YS5zO2IuRz1uZXcgSSgwLjQwOCwwLjE3Mik7Yi5IPW5ldyBJKDAuODMzLDAuNjYyKTt0LnYoYSk7cmV0dXJuIGJ9LFByaXNtMjpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwwLjI1KmMsITApO2EubGluZVRvKDAuNzUqYiwwKTthLmxpbmVUbygxKmIsDQowLjI1KmMpO2EubGluZVRvKDAuNzUqYiwwLjc1KmMpO2EubGluZVRvKDAsMSpjKTtNKGEpO0ooYSwwLGMsITEpO2EubGluZVRvKDAuMjUqYiwwLjUqYyk7YS5saW5lVG8oYiwwLjI1KmMpO2EubW92ZVRvKDAsMC4yNSpjKTthLmxpbmVUbygwLjI1KmIsMC41KmMpO2EuYmIoITEpO2I9YS5zO2IuRz1uZXcgSSgwLjI1LDAuNSk7Yi5IPW5ldyBJKDAuNzUsMC43NSk7dC52KGEpO3JldHVybiBifSxQeXJhbWlkMTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMC41KmIsMCwhMCk7YS5saW5lVG8oYiwwLjc1KmMpO2EubGluZVRvKDAuNSpiLDEqYyk7YS5saW5lVG8oMCwwLjc1KmMpO00oYSk7SihhLDAuNSpiLDAsITEpO2EubGluZVRvKDAuNSpiLDEqYyk7YS5iYighMSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMjUsMC4zNjcpO2IuSD1uZXcgSSgwLjc1LDAuODc1KTt0LnYoYSk7cmV0dXJuIGJ9LFB5cmFtaWQyOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLjUqYiwwLCEwKTthLmxpbmVUbyhiLA0KMC44NSpjKTthLmxpbmVUbygwLjUqYiwxKmMpO2EubGluZVRvKDAsMC44NSpjKTtNKGEpO0ooYSwwLjUqYiwwLCExKTthLmxpbmVUbygwLjUqYiwwLjcqYyk7YS5saW5lVG8oMCwwLjg1KmMpO2EubW92ZVRvKDAuNSpiLDAuNypjKTthLmxpbmVUbygxKmIsMC44NSpjKTthLmJiKCExKTtiPWEucztiLkc9bmV3IEkoMC4yNSwwLjM2Nyk7Yi5IPW5ldyBJKDAuNzUsMC44NzUpO3QudihhKTtyZXR1cm4gYn0sQWN0b3I6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUgudmEsZj0wLjIqZCxnPTAuMSpkLGg9MC41LGs9MC4xO2E9dC51KCk7SihhLGgqYiwoayswLjEpKmMsITApO0soYSwoaC1mKSpiLChrKzAuMSkqYywoaC0wLjIpKmIsKGsrZykqYywoaC0wLjIpKmIsaypjKTtLKGEsKGgtMC4yKSpiLChrLWcpKmMsKGgtZikqYiwoay0wLjEpKmMsaCpiLChrLTAuMSkqYyk7SyhhLChoK2YpKmIsKGstMC4xKSpjLChoKzAuMikqYiwoay1nKSpjLChoKzAuMikqYixrKmMpO0soYSwoaCswLjIpKmIsKGsrDQpnKSpjLChoK2YpKmIsKGsrMC4xKSpjLGgqYiwoayswLjEpKmMpO2Y9MC4wNTtnPWQqZjtKKGEsMC41KmIsMC4yKmMsITApO2EubGluZVRvKDAuOTUqYiwwLjIqYyk7aD0wLjk1O2s9MC4yNTtLKGEsKGgrZykqYiwoay1mKSpjLChoK2YpKmIsKGstZykqYywoaCtmKSpiLGsqYyk7YS5saW5lVG8oMSpiLDAuNipjKTthLmxpbmVUbygwLjg1KmIsMC42KmMpO2EubGluZVRvKDAuODUqYiwwLjM1KmMpO2Y9MC4wMjU7Zz1kKmY7aD0wLjgyNTtrPTAuMzU7SyhhLChoK2YpKmIsKGstZykqYywoaCtnKSpiLChrLWYpKmMsaCpiLChrLWYpKmMpO0soYSwoaC1nKSpiLChrLWYpKmMsKGgtZikqYiwoay1nKSpjLChoLWYpKmIsaypjKTthLmxpbmVUbygwLjgqYiwxKmMpO2EubGluZVRvKDAuNTUqYiwxKmMpO2EubGluZVRvKDAuNTUqYiwwLjcqYyk7Zj0wLjA1O2c9ZCpmO2g9MC41O2s9MC43O0soYSwoaCtmKSpiLChrLWcpKmMsKGgrZykqYiwoay1mKSpjLGgqYiwoay1mKSpjKTtLKGEsKGgtZykqYiwNCihrLWYpKmMsKGgtZikqYiwoay1nKSpjLChoLWYpKmIsaypjKTthLmxpbmVUbygwLjQ1KmIsMSpjKTthLmxpbmVUbygwLjIqYiwxKmMpO2EubGluZVRvKDAuMipiLDAuMzUqYyk7Zj0wLjAyNTtnPWQqZjtoPTAuMTc1O2s9MC4zNTtLKGEsKGgrZikqYiwoay1nKSpjLChoK2cpKmIsKGstZikqYyxoKmIsKGstZikqYyk7SyhhLChoLWcpKmIsKGstZikqYywoaC1mKSpiLChrLWcpKmMsKGgtZikqYixrKmMpO2EubGluZVRvKDAuMTUqYiwwLjYqYyk7YS5saW5lVG8oMCpiLDAuNipjKTthLmxpbmVUbygwKmIsMC4yNSpjKTtmPTAuMDU7Zz1kKmY7aD0wLjA1O2s9MC4yNTtLKGEsKGgtZikqYiwoay1nKSpjLChoLWcpKmIsKGstZikqYyxoKmIsKGstZikqYyk7YS5saW5lVG8oMC41KmIsMC4yKmMpO2I9YS5zO2IuRz1uZXcgSSgwLjIsMC4yKTtiLkg9bmV3IEkoMC44LDAuNjUpO3QudihhKTtyZXR1cm4gYn0sQ2FyZDpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMSpiLDAqYywhMCk7YS5saW5lVG8oMSoNCmIsMSpjKTthLmxpbmVUbygwKmIsMSpjKTthLmxpbmVUbygwKmIsMC4yKmMpO2EubGluZVRvKDAuMipiLDAqYyk7TShhKTtiPWEucztiLkc9bmV3IEkoMCwwLjIpO2IuSD1QYjt0LnYoYSk7cmV0dXJuIGJ9LENvbGxhdGU6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAuNSpiLDAuNSpjLCEwKTthLmxpbmVUbygwLDApO2EubGluZVRvKDEqYiwwKTthLmxpbmVUbygwLjUqYiwwLjUqYyk7SihhLDAuNSpiLDAuNSpjLCEwKTthLmxpbmVUbygxKmIsMSpjKTthLmxpbmVUbygwLDEqYyk7YS5saW5lVG8oMC41KmIsMC41KmMpO2I9YS5zO2IuRz1uZXcgSSgwLjI1LDApO2IuSD1uZXcgSSgwLjc1LDAuMjUpO3QudihhKTtyZXR1cm4gYn0sQ3JlYXRlUmVxdWVzdDpmdW5jdGlvbihhLGIsYyl7YT1hP2EuSGM6MDswPT09YSYmKGE9MC4xKTt2YXIgZD10LnUoKTtKKGQsMCwwLCEwKTtkLmxpbmVUbygxKmIsMCk7ZC5saW5lVG8oMSpiLDEqYyk7ZC5saW5lVG8oMCwxKmMpO00oZCk7SihkLDAsYSoNCmMsITEpO2QubGluZVRvKDEqYixhKmMpO2QubW92ZVRvKDAsKDEtYSkqYyk7ZC5saW5lVG8oMSpiLCgxLWEpKmMpO2QuYmIoITEpO2I9ZC5zO2IuRz1uZXcgSSgwLGEpO2IuSD1uZXcgSSgxLDEtYSk7dC52KGQpO3JldHVybiBifSxEYXRhYmFzZTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTt2YXIgZD1ILnZhLGY9MC41KmQsZD0wLjEqZDtKKGEsMSpiLDAuMSpjLCEwKTthLmxpbmVUbygxKmIsMC45KmMpO0soYSwxKmIsKDAuOStkKSpjLCgwLjUrZikqYiwxKmMsMC41KmIsMSpjKTtLKGEsKDAuNS1mKSpiLDEqYywwLCgwLjkrZCkqYywwLDAuOSpjKTthLmxpbmVUbygwLDAuMSpjKTtLKGEsMCwoMC4xLWQpKmMsKDAuNS1mKSpiLDAsMC41KmIsMCk7SyhhLCgwLjUrZikqYiwwLDEqYiwoMC4xLWQpKmMsMSpiLDAuMSpjKTtKKGEsMSpiLDAuMSpjLCExKTtLKGEsMSpiLCgwLjErZCkqYywoMC41K2YpKmIsMC4yKmMsMC41KmIsMC4yKmMpO0soYSwoMC41LWYpKmIsMC4yKmMsMCwoMC4xK2QpKg0KYywwLDAuMSpjKTthLm1vdmVUbygxKmIsMC4yKmMpO0soYSwxKmIsKDAuMitkKSpjLCgwLjUrZikqYiwwLjMqYywwLjUqYiwwLjMqYyk7SyhhLCgwLjUtZikqYiwwLjMqYywwLCgwLjIrZCkqYywwLDAuMipjKTthLm1vdmVUbygxKmIsMC4zKmMpO0soYSwxKmIsKDAuMytkKSpjLCgwLjUrZikqYiwwLjQqYywwLjUqYiwwLjQqYyk7SyhhLCgwLjUtZikqYiwwLjQqYywwLCgwLjMrZCkqYywwLDAuMypjKTthLmJiKCExKTtiPWEucztiLkc9bmV3IEkoMCwwLjQpO2IuSD1uZXcgSSgxLDAuOSk7dC52KGEpO3JldHVybiBifSxTdG9yZWREYXRhOiJEYXRhU3RvcmFnZSIsRGF0YVN0b3JhZ2U6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMCwhMCk7YS5saW5lVG8oMC43NSpiLDApO0soYSwxKmIsMCwxKmIsMSpjLDAuNzUqYiwxKmMpO2EubGluZVRvKDAsMSpjKTtLKGEsMC4yNSpiLDAuOSpjLDAuMjUqYiwwLjEqYywwLDApO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMjI2LDApO2IuSD1uZXcgSSgwLjgxLA0KMSk7dC52KGEpO3JldHVybiBifSxEaXNrU3RvcmFnZTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTt2YXIgZD1ILnZhLGY9MC41KmQsZD0wLjEqZDtKKGEsMSpiLDAuMSpjLCEwKTthLmxpbmVUbygxKmIsMC45KmMpO0soYSwxKmIsKDAuOStkKSpjLCgwLjUrZikqYiwxKmMsMC41KmIsMSpjKTtLKGEsKDAuNS1mKSpiLDEqYywwLCgwLjkrZCkqYywwLDAuOSpjKTthLmxpbmVUbygwLDAuMSpjKTtLKGEsMCwoMC4xLWQpKmMsKDAuNS1mKSpiLDAsMC41KmIsMCk7SyhhLCgwLjUrZikqYiwwLDEqYiwoMC4xLWQpKmMsMSpiLDAuMSpjKTtKKGEsMSpiLDAuMSpjLCExKTtLKGEsMSpiLCgwLjErZCkqYywoMC41K2YpKmIsMC4yKmMsMC41KmIsMC4yKmMpO0soYSwoMC41LWYpKmIsMC4yKmMsMCwoMC4xK2QpKmMsMCwwLjEqYyk7YS5tb3ZlVG8oMSpiLDAuMipjKTtLKGEsMSpiLCgwLjIrZCkqYywoMC41K2YpKmIsMC4zKmMsMC41KmIsMC4zKmMpO0soYSwoMC41LWYpKmIsMC4zKmMsMCwoMC4yK2QpKg0KYywwLDAuMipjKTthLmJiKCExKTtiPWEucztiLkc9bmV3IEkoMCwwLjMpO2IuSD1uZXcgSSgxLDAuOSk7dC52KGEpO3JldHVybiBifSxEaXNwbGF5OmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLjI1KmIsMCwhMCk7YS5saW5lVG8oMC43NSpiLDApO0soYSwxKmIsMCwxKmIsMSpjLDAuNzUqYiwxKmMpO2EubGluZVRvKDAuMjUqYiwxKmMpO2EubGluZVRvKDAsMC41KmMpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMjUsMCk7Yi5IPW5ldyBJKDAuNzUsMSk7dC52KGEpO3JldHVybiBifSxEaXZpZGVkRXZlbnQ6ZnVuY3Rpb24oYSxiLGMpe2E9YT9hLkhjOjA7MD09PWE/YT0wLjI6MC4xNT5hJiYoYT0wLjE1KTt2YXIgZD10LnUoKSxmPTAuMipILnZhO0ooZCwwLDAuMipjLCEwKTtLKGQsMCwoMC4yLWYpKmMsKDAuMi1mKSpiLDAsMC4yKmIsMCk7ZC5saW5lVG8oMC44KmIsMCk7SyhkLCgwLjgrZikqYiwwLDEqYiwoMC4yLWYpKmMsMSpiLDAuMipjKTtkLmxpbmVUbygxKmIsMC44KmMpOw0KSyhkLDEqYiwoMC44K2YpKmMsKDAuOCtmKSpiLDEqYywwLjgqYiwxKmMpO2QubGluZVRvKDAuMipiLDEqYyk7SyhkLCgwLjItZikqYiwxKmMsMCwoMC44K2YpKmMsMCwwLjgqYyk7ZC5saW5lVG8oMCwwLjIqYyk7SihkLDAsYSpjLCExKTtkLmxpbmVUbygxKmIsYSpjKTtkLmJiKCExKTtiPWQucztiLkc9bmV3IEkoMCxhKTtiLkg9bmV3IEkoMSwxLWEpO3QudihkKTtyZXR1cm4gYn0sRGl2aWRlZFByb2Nlc3M6ZnVuY3Rpb24oYSxiLGMpe2E9YT9hLkhjOjA7MC4xPmEmJihhPTAuMSk7dmFyIGQ9dC51KCk7SihkLDAsMCwhMCk7ZC5saW5lVG8oMSpiLDApO2QubGluZVRvKDEqYiwxKmMpO2QubGluZVRvKDAsMSpjKTtNKGQpO0ooZCwwLGEqYywhMSk7ZC5saW5lVG8oMSpiLGEqYyk7ZC5iYighMSk7Yj1kLnM7Yi5HPW5ldyBJKDAsYSk7Yi5IPVBiO3QudihkKTtyZXR1cm4gYn0sRG9jdW1lbnQ6ZnVuY3Rpb24oYSxiLGMpe2MvPTAuODthPXQudSgpO0ooYSwwLDAuNypjLCEwKTthLmxpbmVUbygwLA0KMCk7YS5saW5lVG8oMSpiLDApO2EubGluZVRvKDEqYiwwLjcqYyk7SyhhLDAuNSpiLDAuNCpjLDAuNSpiLDEqYywwLDAuNypjKTtNKGEpO2I9YS5zO2IuRz1FYjtiLkg9bmV3IEkoMSwwLjYpO3QudihhKTtyZXR1cm4gYn0sRXh0ZXJuYWxPcmdhbml6YXRpb246ZnVuY3Rpb24oYSxiLGMpe2E9YT9hLkhjOjA7MC4yPmEmJihhPTAuMik7dmFyIGQ9dC51KCk7SihkLDAsMCwhMCk7ZC5saW5lVG8oMSpiLDApO2QubGluZVRvKDEqYiwxKmMpO2QubGluZVRvKDAsMSpjKTtNKGQpO0ooZCxhKmIsMCwhMSk7ZC5saW5lVG8oMCxhKmMpO2QubW92ZVRvKDEqYixhKmMpO2QubGluZVRvKCgxLWEpKmIsMCk7ZC5tb3ZlVG8oMCwoMS1hKSpjKTtkLmxpbmVUbyhhKmIsMSpjKTtkLm1vdmVUbygoMS1hKSpiLDEqYyk7ZC5saW5lVG8oMSpiLCgxLWEpKmMpO2QuYmIoITEpO2I9ZC5zO2IuRz1uZXcgSShhLzIsYS8yKTtiLkg9bmV3IEkoMS1hLzIsMS1hLzIpO3QudihkKTtyZXR1cm4gYn0sRXh0ZXJuYWxQcm9jZXNzOmZ1bmN0aW9uKGEsDQpiLGMpe2E9dC51KCk7SihhLDAuNSpiLDAsITApO2EubGluZVRvKDEqYiwwLjUqYyk7YS5saW5lVG8oMC41KmIsMSpjKTthLmxpbmVUbygwLDAuNSpjKTtNKGEpO0ooYSwwLjEqYiwwLjQqYywhMSk7YS5saW5lVG8oMC4xKmIsMC42KmMpO2EubW92ZVRvKDAuOSpiLDAuNipjKTthLmxpbmVUbygwLjkqYiwwLjQqYyk7YS5tb3ZlVG8oMC42KmIsMC4xKmMpO2EubGluZVRvKDAuNCpiLDAuMSpjKTthLm1vdmVUbygwLjQqYiwwLjkqYyk7YS5saW5lVG8oMC42KmIsMC45KmMpO2EuYmIoITEpO2I9YS5zO2IuRz1uZXcgSSgwLjI1LDAuMjUpO2IuSD1uZXcgSSgwLjc1LDAuNzUpO3QudihhKTtyZXR1cm4gYn0sRmlsZTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwwLCEwKTthLmxpbmVUbygwLjc1KmIsMCk7YS5saW5lVG8oMSpiLDAuMjUqYyk7YS5saW5lVG8oMSpiLDEqYyk7YS5saW5lVG8oMCwxKmMpO00oYSk7SihhLDAuNzUqYiwwLCExKTthLmxpbmVUbygwLjc1KmIsMC4yNSpjKTsNCmEubGluZVRvKDEqYiwwLjI1KmMpO2EuYmIoITEpO2I9YS5zO2IuRz1uZXcgSSgwLDAuMjUpO2IuSD1QYjt0LnYoYSk7cmV0dXJuIGJ9LEludGVycnVwdDpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMSpiLDAuNSpjLCEwKTthLmxpbmVUbygwLDEqYyk7YS5saW5lVG8oMCwwKTthLmxpbmVUbygxKmIsMC41KmMpO0ooYSwxKmIsMC41KmMsITEpO2EubGluZVRvKDEqYiwxKmMpO0ooYSwxKmIsMC41KmMsITEpO2EubGluZVRvKDEqYiwwKTtiPWEucztiLkc9bmV3IEkoMCwwLjI1KTtiLkg9bmV3IEkoMC41LDAuNzUpO3QudihhKTtyZXR1cm4gYn0sSW50ZXJuYWxTdG9yYWdlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hP2EuSGM6MDthPWE/YS5FdDowOzA9PT1kJiYoZD0wLjEpOzA9PT1hJiYoYT0wLjEpO3ZhciBmPXQudSgpO0ooZiwwLDAsITApO2YubGluZVRvKDEqYiwwKTtmLmxpbmVUbygxKmIsMSpjKTtmLmxpbmVUbygwLDEqYyk7TShmKTtKKGYsZCpiLDAsITEpO2YubGluZVRvKGQqDQpiLDEqYyk7Zi5tb3ZlVG8oMCxhKmMpO2YubGluZVRvKDEqYixhKmMpO2YuYmIoITEpO2I9Zi5zO2IuRz1uZXcgSShkLGEpO2IuSD1QYjt0LnYoZik7cmV0dXJuIGJ9LEp1bmN0aW9uOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO3ZhciBkPTEvTWF0aC5TUVJUMixmPSgxLTEvTWF0aC5TUVJUMikvMixnPTAuNSpILnZhO0ooYSwxKmIsMC41KmMsITApO0soYSwxKmIsKDAuNStnKSpjLCgwLjUrZykqYiwxKmMsMC41KmIsMSpjKTtLKGEsKDAuNS1nKSpiLDEqYywwLCgwLjUrZykqYywwLDAuNSpjKTtLKGEsMCwoMC41LWcpKmMsKDAuNS1nKSpiLDAsMC41KmIsMCk7SyhhLCgwLjUrZykqYiwwLDEqYiwoMC41LWcpKmMsMSpiLDAuNSpjKTtKKGEsKGYrZCkqYiwoZitkKSpjLCExKTthLmxpbmVUbyhmKmIsZipjKTthLm1vdmVUbyhmKmIsKGYrZCkqYyk7YS5saW5lVG8oKGYrZCkqYixmKmMpO2EuYmIoITEpO2I9YS5zO2IudmM9V2c7dC52KGEpO3JldHVybiBifSxMaW5lZERvY3VtZW50OmZ1bmN0aW9uKGEsDQpiLGMpe2MvPTAuODthPXQudSgpO0ooYSwwLDAuNypjLCEwKTthLmxpbmVUbygwLDApO2EubGluZVRvKDEqYiwwKTthLmxpbmVUbygxKmIsMC43KmMpO0soYSwwLjUqYiwwLjQqYywwLjUqYiwxKmMsMCwwLjcqYyk7TShhKTtKKGEsMC4xKmIsMCwhMSk7YS5saW5lVG8oMC4xKmIsMC43NSpjKTthLmJiKCExKTtiPWEucztiLkc9bmV3IEkoMC4xLDApO2IuSD1uZXcgSSgxLDAuNik7dC52KGEpO3JldHVybiBifSxMb29wTGltaXQ6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMSpjLCEwKTthLmxpbmVUbygwLDAuMjUqYyk7YS5saW5lVG8oMC4yNSpiLDApO2EubGluZVRvKDAuNzUqYiwwKTthLmxpbmVUbygxKmIsMC4yNSpjKTthLmxpbmVUbygxKmIsMSpjKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLDAuMjUpO2IuSD1QYjt0LnYoYSk7cmV0dXJuIGJ9LFNlcXVlbnRpYWxEYXRhOiJNYWduZXRpY1RhcGUiLE1hZ25ldGljVGFwZTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTt2YXIgZD0NCjAuNSpILnZhO0ooYSwwLjUqYiwxKmMsITApO0soYSwoMC41LWQpKmIsMSpjLDAsKDAuNStkKSpjLDAsMC41KmMpO0soYSwwLCgwLjUtZCkqYywoMC41LWQpKmIsMCwwLjUqYiwwKTtLKGEsKDAuNStkKSpiLDAsMSpiLCgwLjUtZCkqYywxKmIsMC41KmMpO0soYSwxKmIsKDAuNStkKSpjLCgwLjUrZCkqYiwwLjkqYywwLjYqYiwwLjkqYyk7YS5saW5lVG8oMSpiLDAuOSpjKTthLmxpbmVUbygxKmIsMSpjKTthLmxpbmVUbygwLjUqYiwxKmMpO2I9YS5zO2IuRz1uZXcgSSgwLjE1LDAuMTUpO2IuSD1uZXcgSSgwLjg1LDAuOCk7dC52KGEpO3JldHVybiBifSxNYW51YWxJbnB1dDpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMSpiLDAsITApO2EubGluZVRvKDEqYiwxKmMpO2EubGluZVRvKDAsMSpjKTthLmxpbmVUbygwLDAuMjUqYyk7TShhKTtiPWEucztiLkc9bmV3IEkoMCwwLjI1KTtiLkg9UGI7dC52KGEpO3JldHVybiBifSxNZXNzYWdlRnJvbVVzZXI6ZnVuY3Rpb24oYSxiLGMpe2E9DQphP2EuSGM6MDswPT09YSYmKGE9MC43KTt2YXIgZD10LnUoKTtKKGQsMCwwLCEwKTtkLmxpbmVUbygxKmIsMCk7ZC5saW5lVG8oYSpiLDAuNSpjKTtkLmxpbmVUbygxKmIsMSpjKTtkLmxpbmVUbygwLDEqYyk7TShkKTtiPWQucztiLkc9RWI7Yi5IPW5ldyBJKGEsMSk7dC52KGQpO3JldHVybiBifSxNaWNyb2Zvcm1Qcm9jZXNzaW5nOmZ1bmN0aW9uKGEsYixjKXthPWE/YS5IYzowOzA9PT1hJiYoYT0wLjI1KTt2YXIgZD10LnUoKTtKKGQsMCwwLCEwKTtkLmxpbmVUbygwLjUqYixhKmMpO2QubGluZVRvKDEqYiwwKTtkLmxpbmVUbygxKmIsMSpjKTtkLmxpbmVUbygwLjUqYiwoMS1hKSpjKTtkLmxpbmVUbygwLDEqYyk7TShkKTtiPWQucztiLkc9bmV3IEkoMCxhKTtiLkg9bmV3IEkoMSwxLWEpO3QudihkKTtyZXR1cm4gYn0sTWljcm9mb3JtUmVjb3JkaW5nOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLDAsITApO2EubGluZVRvKDAuNzUqYiwwLjI1KmMpO2EubGluZVRvKDEqYiwNCjAuMTUqYyk7YS5saW5lVG8oMSpiLDAuODUqYyk7YS5saW5lVG8oMC43NSpiLDAuNzUqYyk7YS5saW5lVG8oMCwxKmMpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAsMC4yNSk7Yi5IPW5ldyBJKDEsMC43NSk7dC52KGEpO3JldHVybiBifSxNdWx0aURvY3VtZW50OmZ1bmN0aW9uKGEsYixjKXtjLz0wLjg7YT10LnUoKTtKKGEsYiwwLCEwKTthLmxpbmVUbyhiLDAuNSpjKTtLKGEsMC45NipiLDAuNDcqYywwLjkzKmIsMC40NSpjLDAuOSpiLDAuNDQqYyk7YS5saW5lVG8oMC45KmIsMC42KmMpO0soYSwwLjg2KmIsMC41NypjLDAuODMqYiwwLjU1KmMsMC44KmIsMC41NCpjKTthLmxpbmVUbygwLjgqYiwwLjcqYyk7SyhhLDAuNCpiLDAuNCpjLDAuNCpiLDEqYywwLDAuNypjKTthLmxpbmVUbygwLDAuMipjKTthLmxpbmVUbygwLjEqYiwwLjIqYyk7YS5saW5lVG8oMC4xKmIsMC4xKmMpO2EubGluZVRvKDAuMipiLDAuMSpjKTthLmxpbmVUbygwLjIqYiwwKTtNKGEpO0ooYSwwLjEqYiwwLjIqYywNCiExKTthLmxpbmVUbygwLjgqYiwwLjIqYyk7YS5saW5lVG8oMC44KmIsMC41NCpjKTthLm1vdmVUbygwLjIqYiwwLjEqYyk7YS5saW5lVG8oMC45KmIsMC4xKmMpO2EubGluZVRvKDAuOSpiLDAuNDQqYyk7YS5iYighMSk7Yj1hLnM7Yi5HPW5ldyBJKDAsMC4yNSk7Yi5IPW5ldyBJKDAuOCwwLjc3KTt0LnYoYSk7cmV0dXJuIGJ9LE11bHRpUHJvY2VzczpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMC4xKmIsMC4xKmMsITApO2EubGluZVRvKDAuMipiLDAuMSpjKTthLmxpbmVUbygwLjIqYiwwKTthLmxpbmVUbygxKmIsMCk7YS5saW5lVG8oMSpiLDAuOCpjKTthLmxpbmVUbygwLjkqYiwwLjgqYyk7YS5saW5lVG8oMC45KmIsMC45KmMpO2EubGluZVRvKDAuOCpiLDAuOSpjKTthLmxpbmVUbygwLjgqYiwxKmMpO2EubGluZVRvKDAsMSpjKTthLmxpbmVUbygwLDAuMipjKTthLmxpbmVUbygwLjEqYiwwLjIqYyk7TShhKTtKKGEsMC4yKmIsMC4xKmMsITEpO2EubGluZVRvKDAuOSpiLA0KMC4xKmMpO2EubGluZVRvKDAuOSpiLDAuOCpjKTthLm1vdmVUbygwLjEqYiwwLjIqYyk7YS5saW5lVG8oMC44KmIsMC4yKmMpO2EubGluZVRvKDAuOCpiLDAuOSpjKTthLmJiKCExKTtiPWEucztiLkc9bmV3IEkoMCwwLjIpO2IuSD1uZXcgSSgwLjgsMSk7dC52KGEpO3JldHVybiBifSxPZmZsaW5lU3RvcmFnZTpmdW5jdGlvbihhLGIsYyl7YT1hP2EuSGM6MDswPT09YSYmKGE9MC4xKTt2YXIgZD0xLWEsZj10LnUoKTtKKGYsMCwwLCEwKTtmLmxpbmVUbygxKmIsMCk7Zi5saW5lVG8oMC41KmIsMSpjKTtNKGYpO0ooZiwwLjUqYSpiLGEqYywhMSk7Zi5saW5lVG8oKDEtMC41KmEpKmIsYSpjKTtmLmJiKCExKTtiPWYucztiLkc9bmV3IEkoZC80KzAuNSphLGEpO2IuSD1uZXcgSSgzKmQvNCswLjUqYSxhKzAuNSpkKTt0LnYoZik7cmV0dXJuIGJ9LE9mZlBhZ2VDb25uZWN0b3I6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMCwhMCk7YS5saW5lVG8oMC43NSpiLDApO2EubGluZVRvKDEqDQpiLDAuNSpjKTthLmxpbmVUbygwLjc1KmIsMSpjKTthLmxpbmVUbygwLDEqYyk7TShhKTtiPWEucztiLkc9RWI7Yi5IPW5ldyBJKDAuNzUsMSk7dC52KGEpO3JldHVybiBifSxPcjpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTt2YXIgZD0wLjUqSC52YTtKKGEsMSpiLDAuNSpjLCEwKTtLKGEsMSpiLCgwLjUrZCkqYywoMC41K2QpKmIsMSpjLDAuNSpiLDEqYyk7SyhhLCgwLjUtZCkqYiwxKmMsMCwoMC41K2QpKmMsMCwwLjUqYyk7SyhhLDAsKDAuNS1kKSpjLCgwLjUtZCkqYiwwLDAuNSpiLDApO0soYSwoMC41K2QpKmIsMCwxKmIsKDAuNS1kKSpjLDEqYiwwLjUqYyk7SihhLDEqYiwwLjUqYywhMSk7YS5saW5lVG8oMCwwLjUqYyk7YS5tb3ZlVG8oMC41KmIsMSpjKTthLmxpbmVUbygwLjUqYiwwKTthLmJiKCExKTtiPWEucztiLnZjPVdnO3QudihhKTtyZXR1cm4gYn0sUGFwZXJUYXBlOmZ1bmN0aW9uKGEsYixjKXtjLz0wLjg7YT10LnUoKTtKKGEsMCwwLjcqYywhMCk7YS5saW5lVG8oMCwNCjAuMypjKTtLKGEsMC41KmIsMC42KmMsMC41KmIsMCwxKmIsMC4zKTthLmxpbmVUbygxKmIsMC43KmMpO0soYSwwLjUqYiwwLjQqYywwLjUqYiwxKmMsMCwwLjcqYyk7TShhKTtiPWEucztiLkc9bmV3IEkoMCwwLjQ5KTtiLkg9bmV3IEkoMSwwLjc1KTt0LnYoYSk7cmV0dXJuIGJ9LFByaW1pdGl2ZUZyb21DYWxsOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hP2EuSGM6MDthPWE/YS5FdDowOzA9PT1kJiYoZD0wLjEpOzA9PT1hJiYoYT0wLjMpO3ZhciBmPXQudSgpO0ooZiwwLDAsITApO2YubGluZVRvKDEqYiwwKTtmLmxpbmVUbygoMS1hKSpiLDAuNSpjKTtmLmxpbmVUbygxKmIsMSpjKTtmLmxpbmVUbygwLDEqYyk7TShmKTtiPWYucztiLkc9bmV3IEkoZCwwKTtiLkg9bmV3IEkoMS1hLDEpO3QudihmKTtyZXR1cm4gYn0sUHJpbWl0aXZlVG9DYWxsOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hP2EuSGM6MDthPWE/YS5FdDowOzA9PT1kJiYoZD0wLjEpOzA9PT1hJiYoYT0wLjMpO3ZhciBmPQ0KdC51KCk7SihmLDAsMCwhMCk7Zi5saW5lVG8oKDEtYSkqYiwwKTtmLmxpbmVUbygxKmIsMC41KmMpO2YubGluZVRvKCgxLWEpKmIsMSpjKTtmLmxpbmVUbygwLDEqYyk7TShmKTtiPWYucztiLkc9bmV3IEkoZCwwKTtiLkg9bmV3IEkoMS1hLDEpO3QudihmKTtyZXR1cm4gYn0sU3Vicm91dGluZToiUHJvY2VkdXJlIixQcm9jZWR1cmU6ZnVuY3Rpb24oYSxiLGMpe2E9YT9hLkhjOjA7MD09PWEmJihhPTAuMSk7dmFyIGQ9dC51KCk7SihkLDAsMCwhMCk7ZC5saW5lVG8oMSpiLDApO2QubGluZVRvKDEqYiwxKmMpO2QubGluZVRvKDAsMSpjKTtNKGQpO0ooZCwoMS1hKSpiLDAsITEpO2QubGluZVRvKCgxLWEpKmIsMSpjKTtkLm1vdmVUbyhhKmIsMCk7ZC5saW5lVG8oYSpiLDEqYyk7ZC5iYighMSk7Yj1kLnM7Yi5HPW5ldyBJKGEsMCk7Yi5IPW5ldyBJKDEtYSwxKTt0LnYoZCk7cmV0dXJuIGJ9LFByb2Nlc3M6ZnVuY3Rpb24oYSxiLGMpe2E9YT9hLkhjOjA7MD09PWEmJihhPTAuMSk7dmFyIGQ9DQp0LnUoKTtKKGQsMCwwLCEwKTtkLmxpbmVUbygxKmIsMCk7ZC5saW5lVG8oMSpiLDEqYyk7ZC5saW5lVG8oMCwxKmMpO00oZCk7SihkLGEqYiwwLCExKTtkLmxpbmVUbyhhKmIsMSpjKTtkLmJiKCExKTtiPWQucztiLkc9bmV3IEkoYSwwKTtiLkg9UGI7dC52KGQpO3JldHVybiBifSxTb3J0OmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLjUqYiwwLCEwKTthLmxpbmVUbygxKmIsMC41KmMpO2EubGluZVRvKDAuNSpiLDEqYyk7YS5saW5lVG8oMCwwLjUqYyk7TShhKTtKKGEsMCwwLjUqYywhMSk7YS5saW5lVG8oMSpiLDAuNSpjKTthLmJiKCExKTtiPWEucztiLkc9bmV3IEkoMC4yNSwwLjI1KTtiLkg9bmV3IEkoMC43NSwwLjUpO3QudihhKTtyZXR1cm4gYn0sU3RhcnQ6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAuMjUqYiwwLCEwKTtKKGEsMC4yNSpiLDAsITApO2EuYXJjVG8oMjcwLDE4MCwwLjc1KmIsMC41KmMsMC4yNSpiLDAuNSpjKTthLmFyY1RvKDkwLDE4MCwwLjI1Kg0KYiwwLjUqYywwLjI1KmIsMC41KmMpO0ooYSwwLjI1KmIsMCwhMSk7YS5saW5lVG8oMC4yNSpiLDEqYyk7YS5tb3ZlVG8oMC43NSpiLDApO2EubGluZVRvKDAuNzUqYiwxKmMpO2EuYmIoITEpO2I9YS5zO2IuRz1uZXcgSSgwLjI1LDApO2IuSD1uZXcgSSgwLjc1LDEpO3QudihhKTtyZXR1cm4gYn0sVGVybWluYXRvcjpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMC4yNSpiLDAsITApO2EuYXJjVG8oMjcwLDE4MCwwLjc1KmIsMC41KmMsMC4yNSpiLDAuNSpjKTthLmFyY1RvKDkwLDE4MCwwLjI1KmIsMC41KmMsMC4yNSpiLDAuNSpjKTtiPWEucztiLkc9bmV3IEkoMC4yMywwKTtiLkg9bmV3IEkoMC43NywxKTt0LnYoYSk7cmV0dXJuIGJ9LFRyYW5zbWl0dGFsVGFwZTpmdW5jdGlvbihhLGIsYyl7YT1hP2EuSGM6MDswPT09YSYmKGE9MC4xKTt2YXIgZD10LnUoKTtKKGQsMCwwLCEwKTtkLmxpbmVUbygxKmIsMCk7ZC5saW5lVG8oMSpiLDEqYyk7ZC5saW5lVG8oMC43NSpiLCgxLWEpKg0KYyk7ZC5saW5lVG8oMCwoMS1hKSpjKTtNKGQpO2I9ZC5zO2IuRz1FYjtiLkg9bmV3IEkoMSwxLWEpO3QudihkKTtyZXR1cm4gYn0sQW5kR2F0ZTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTt2YXIgZD0wLjUqSC52YTtKKGEsMCwwLCEwKTthLmxpbmVUbygwLjUqYiwwKTtLKGEsKDAuNStkKSpiLDAsMSpiLCgwLjUtZCkqYywxKmIsMC41KmMpO0soYSwxKmIsKDAuNStkKSpjLCgwLjUrZCkqYiwxKmMsMC41KmIsMSpjKTthLmxpbmVUbygwLDEqYyk7TShhKTtiPWEucztiLkc9RWI7Yi5IPW5ldyBJKDAuNTUsMSk7dC52KGEpO3JldHVybiBifSxCdWZmZXI6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMCwhMCk7YS5saW5lVG8oMSpiLDAuNSpjKTthLmxpbmVUbygwLDEqYyk7TShhKTtiPWEucztiLkc9bmV3IEkoMCwwLjI1KTtiLkg9bmV3IEkoMC41LDAuNzUpO3QudihhKTtyZXR1cm4gYn0sQ2xvY2s6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7dmFyIGQ9MC41KkgudmE7SihhLDEqDQpiLDAuNSpjLCEwKTtLKGEsMSpiLCgwLjUrZCkqYywoMC41K2QpKmIsMSpjLDAuNSpiLDEqYyk7SyhhLCgwLjUtZCkqYiwxKmMsMCwoMC41K2QpKmMsMCwwLjUqYyk7SyhhLDAsKDAuNS1kKSpjLCgwLjUtZCkqYiwwLDAuNSpiLDApO0soYSwoMC41K2QpKmIsMCwxKmIsKDAuNS1kKSpjLDEqYiwwLjUqYyk7SihhLDEqYiwwLjUqYywhMSk7YS5saW5lVG8oMSpiLDAuNSpjKTtKKGEsMC44KmIsMC43NSpjLCExKTthLmxpbmVUbygwLjgqYiwwLjI1KmMpO2EubGluZVRvKDAuNipiLDAuMjUqYyk7YS5saW5lVG8oMC42KmIsMC43NSpjKTthLmxpbmVUbygwLjQqYiwwLjc1KmMpO2EubGluZVRvKDAuNCpiLDAuMjUqYyk7YS5saW5lVG8oMC4yKmIsMC4yNSpjKTthLmxpbmVUbygwLjIqYiwwLjc1KmMpO2EuYmIoITEpO2I9YS5zO2IudmM9V2c7dC52KGEpO3JldHVybiBifSxHcm91bmQ6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAuNSpiLDAsITEpO2EubGluZVRvKDAuNSpiLDAuNCpjKTsNCmEubW92ZVRvKDAuMipiLDAuNipjKTthLmxpbmVUbygwLjgqYiwwLjYqYyk7YS5tb3ZlVG8oMC4zKmIsMC44KmMpO2EubGluZVRvKDAuNypiLDAuOCpjKTthLm1vdmVUbygwLjQqYiwxKmMpO2EubGluZVRvKDAuNipiLDEqYyk7Yj1hLnM7dC52KGEpO3JldHVybiBifSxJbnZlcnRlcjpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTt2YXIgZD0wLjEqSC52YTtKKGEsMC44KmIsMC41KmMsITApO2EubGluZVRvKDAsMSpjKTthLmxpbmVUbygwLDApO2EubGluZVRvKDAuOCpiLDAuNSpjKTtKKGEsMSpiLDAuNSpjLCEwKTtLKGEsMSpiLCgwLjUrZCkqYywoMC45K2QpKmIsMC42KmMsMC45KmIsMC42KmMpO0soYSwoMC45LWQpKmIsMC42KmMsMC44KmIsKDAuNStkKSpjLDAuOCpiLDAuNSpjKTtLKGEsMC44KmIsKDAuNS1kKSpjLCgwLjktZCkqYiwwLjQqYywwLjkqYiwwLjQqYyk7SyhhLCgwLjkrZCkqYiwwLjQqYywxKmIsKDAuNS1kKSpjLDEqYiwwLjUqYyk7Yj1hLnM7Yi5HPW5ldyBJKDAsMC4yNSk7DQpiLkg9bmV3IEkoMC40LDAuNzUpO3QudihhKTtyZXR1cm4gYn0sTmFuZEdhdGU6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7dmFyIGQ9SC52YSxmPTAuNSpkLGc9MC40KmQsZD0wLjEqZDtKKGEsMC44KmIsMC41KmMsITApO0soYSwwLjgqYiwoMC41K2cpKmMsKDAuNCtmKSpiLDEqYywwLjQqYiwxKmMpO2EubGluZVRvKDAsMSpjKTthLmxpbmVUbygwLDApO2EubGluZVRvKDAuNCpiLDApO0soYSwoMC40K2YpKmIsMCwwLjgqYiwoMC41LWcpKmMsMC44KmIsMC41KmMpO0ooYSwxKmIsMC41KmMsITApO0soYSwxKmIsKDAuNStkKSpjLCgwLjkrZCkqYiwwLjYqYywwLjkqYiwwLjYqYyk7SyhhLCgwLjktZCkqYiwwLjYqYywwLjgqYiwoMC41K2QpKmMsMC44KmIsMC41KmMpO0soYSwwLjgqYiwoMC41LWQpKmMsKDAuOS1kKSpiLDAuNCpjLDAuOSpiLDAuNCpjKTtLKGEsKDAuOStkKSpiLDAuNCpjLDEqYiwoMC41LWQpKmMsMSpiLDAuNSpjKTtiPWEucztiLkc9bmV3IEkoMCwwLjA1KTtiLkg9bmV3IEkoMC41NSwNCjAuOTUpO3QudihhKTtyZXR1cm4gYn0sTm9yR2F0ZTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTt2YXIgZD1ILnZhLGY9MC41LGc9ZCpmLGg9MCxrPTAuNTtKKGEsMC44KmIsMC41KmMsITApO0soYSwwLjcqYiwoaytnKSpjLChoK2cpKmIsKGsrZikqYywwLDEqYyk7SyhhLDAuMjUqYiwwLjc1KmMsMC4yNSpiLDAuMjUqYywwLDApO0soYSwoaCtnKSpiLChrLWYpKmMsMC43KmIsKGstZykqYywwLjgqYiwwLjUqYyk7Zj0wLjE7Zz0wLjEqZDtoPTAuOTtrPTAuNTtKKGEsKGgtZikqYixrKmMsITApO0soYSwoaC1mKSpiLChrLWcpKmMsKGgtZykqYiwoay1mKSpjLGgqYiwoay1mKSpjKTtLKGEsKGgrZykqYiwoay1mKSpjLChoK2YpKmIsKGstZykqYywoaCtmKSpiLGsqYyk7SyhhLChoK2YpKmIsKGsrZykqYywoaCtnKSpiLChrK2YpKmMsaCpiLChrK2YpKmMpO0soYSwoaC1nKSpiLChrK2YpKmMsKGgtZikqYiwoaytnKSpjLChoLWYpKmIsaypjKTtiPWEucztiLkc9bmV3IEkoMC4yLDAuMjUpOw0KYi5IPW5ldyBJKDAuNiwwLjc1KTt0LnYoYSk7cmV0dXJuIGJ9LE9yR2F0ZTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTt2YXIgZD0wLjUqSC52YTtKKGEsMCwwLCEwKTtLKGEsKDArZCtkKSpiLDAqYywwLjgqYiwoMC41LWQpKmMsMSpiLDAuNSpjKTtLKGEsMC44KmIsKDAuNStkKSpjLCgwK2QrZCkqYiwxKmMsMCwxKmMpO0soYSwwLjI1KmIsMC43NSpjLDAuMjUqYiwwLjI1KmMsMCwwKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLjIsMC4yNSk7Yi5IPW5ldyBJKDAuNzUsMC43NSk7dC52KGEpO3JldHVybiBifSxYbm9yR2F0ZTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTt2YXIgZD1ILnZhLGY9MC41LGc9ZCpmLGg9MC4yLGs9MC41O0ooYSwwLjEqYiwwLCExKTtLKGEsMC4zNSpiLDAuMjUqYywwLjM1KmIsMC43NSpjLDAuMSpiLDEqYyk7SihhLDAuOCpiLDAuNSpjLCEwKTtLKGEsMC43KmIsKGsrZykqYywoaCtnKSpiLChrK2YpKmMsMC4yKmIsMSpjKTtLKGEsMC40NSpiLDAuNzUqYywwLjQ1Kg0KYiwwLjI1KmMsMC4yKmIsMCk7SyhhLChoK2cpKmIsKGstZikqYywwLjcqYiwoay1nKSpjLDAuOCpiLDAuNSpjKTtmPTAuMTtnPTAuMSpkO2g9MC45O2s9MC41O0ooYSwoaC1mKSpiLGsqYywhMCk7SyhhLChoLWYpKmIsKGstZykqYywoaC1nKSpiLChrLWYpKmMsaCpiLChrLWYpKmMpO0soYSwoaCtnKSpiLChrLWYpKmMsKGgrZikqYiwoay1nKSpjLChoK2YpKmIsaypjKTtLKGEsKGgrZikqYiwoaytnKSpjLChoK2cpKmIsKGsrZikqYyxoKmIsKGsrZikqYyk7SyhhLChoLWcpKmIsKGsrZikqYywoaC1mKSpiLChrK2cpKmMsKGgtZikqYixrKmMpO2I9YS5zO2IuRz1uZXcgSSgwLjQsMC4yNSk7Yi5IPW5ldyBJKDAuNjUsMC43NSk7dC52KGEpO3JldHVybiBifSxYb3JHYXRlOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO3ZhciBkPTAuNSpILnZhO0ooYSwwLjEqYiwwLCExKTtLKGEsMC4zNSpiLDAuMjUqYywwLjM1KmIsMC43NSpjLDAuMSpiLDEqYyk7SihhLDAuMipiLDAsITApO0soYSwoMC4yKw0KZCkqYiwwKmMsMC45KmIsKDAuNS1kKSpjLDEqYiwwLjUqYyk7SyhhLDAuOSpiLCgwLjUrZCkqYywoMC4yK2QpKmIsMSpjLDAuMipiLDEqYyk7SyhhLDAuNDUqYiwwLjc1KmMsMC40NSpiLDAuMjUqYywwLjIqYiwwKTtNKGEpO2I9YS5zO2IuRz1uZXcgSSgwLjQsMC4yNSk7Yi5IPW5ldyBJKDAuOCwwLjc1KTt0LnYoYSk7cmV0dXJuIGJ9LENhcGFjaXRvcjpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwwLCExKTthLmxpbmVUbygwLDEqYyk7YS5tb3ZlVG8oMSpiLDApO2EubGluZVRvKDEqYiwxKmMpO2I9YS5zO3QudihhKTtyZXR1cm4gYn0sUmVzaXN0b3I6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMC41KmMsITEpO2EubGluZVRvKDAuMSpiLDApO2EubGluZVRvKDAuMipiLDEqYyk7YS5saW5lVG8oMC4zKmIsMCk7YS5saW5lVG8oMC40KmIsMSpjKTthLmxpbmVUbygwLjUqYiwwKTthLmxpbmVUbygwLjYqYiwxKmMpO2EubGluZVRvKDAuNypiLDAuNSpjKTtiPWEuczt0LnYoYSk7DQpyZXR1cm4gYn0sSW5kdWN0b3I6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7dmFyIGQ9MC4xKkgudmEsZj0wLjEsZz0wLjU7SihhLChmLTAuNSpkKSpiLChnKzAuMSkqYywhMSk7SyhhLChmLWQpKmIsKGcrMC4xKSpjLChmLTAuMSkqYiwoZytkKSpjLChmKzAuMSkqYiwoZytkKSpjKTtmPTAuMztnPTAuNTtLKGEsKGYrMC4xKSpiLChnK2QpKmMsKGYrZCkqYiwoZyswLjEpKmMsZipiLChnKzAuMSkqYyk7SyhhLChmLWQpKmIsKGcrMC4xKSpjLChmLTAuMSkqYiwoZytkKSpjLChmKzAuMSkqYiwoZytkKSpjKTtnPWY9MC41O0soYSwoZiswLjEpKmIsKGcrZCkqYywoZitkKSpiLChnKzAuMSkqYyxmKmIsKGcrMC4xKSpjKTtLKGEsKGYtZCkqYiwoZyswLjEpKmMsKGYtMC4xKSpiLChnK2QpKmMsKGYrMC4xKSpiLChnK2QpKmMpO2Y9MC43O2c9MC41O0soYSwoZiswLjEpKmIsKGcrZCkqYywoZitkKSpiLChnKzAuMSkqYyxmKmIsKGcrMC4xKSpjKTtLKGEsKGYtZCkqYiwoZyswLjEpKmMsKGYtMC4xKSoNCmIsKGcrZCkqYywoZiswLjEpKmIsKGcrZCkqYyk7Zj0wLjk7Zz0wLjU7SyhhLChmKzAuMSkqYiwoZytkKSpjLChmK2QpKmIsKGcrMC4xKSpjLChmKzAuNSpkKSpiLChnKzAuMSkqYyk7Yj1hLnM7dC52KGEpO3JldHVybiBifSxBQ3ZvbHRhZ2VTb3VyY2U6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7dmFyIGQ9MC41KkgudmE7SihhLDAqYiwwLjUqYywhMSk7SyhhLDAqYiwoMC41LWQpKmMsKDAuNS1kKSpiLDAqYywwLjUqYiwwKmMpO0soYSwoMC41K2QpKmIsMCpjLDEqYiwoMC41LWQpKmMsMSpiLDAuNSpjKTtLKGEsMSpiLCgwLjUrZCkqYywoMC41K2QpKmIsMSpjLDAuNSpiLDEqYyk7SyhhLCgwLjUtZCkqYiwxKmMsMCpiLCgwLjUrZCkqYywwKmIsMC41KmMpO2EubW92ZVRvKDAuMSpiLDAuNSpjKTtLKGEsMC41KmIsMCpjLDAuNSpiLDEqYywwLjkqYiwwLjUqYyk7Yj1hLnM7Yi52Yz1XZzt0LnYoYSk7cmV0dXJuIGJ9LERDdm9sdGFnZVNvdXJjZTpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTsNCkooYSwwLDAuNzUqYywhMSk7YS5saW5lVG8oMCwwLjI1KmMpO2EubW92ZVRvKDEqYiwwKTthLmxpbmVUbygxKmIsMSpjKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LERpb2RlOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwxKmIsMCwhMSk7YS5saW5lVG8oMSpiLDAuNSpjKTthLmxpbmVUbygwLDEqYyk7YS5saW5lVG8oMCwwKTthLmxpbmVUbygxKmIsMC41KmMpO2EubGluZVRvKDEqYiwxKmMpO2I9YS5zO2IuRz1uZXcgSSgwLDAuMjUpO2IuSD1uZXcgSSgwLjUsMC43NSk7dC52KGEpO3JldHVybiBifSxXaWZpOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1iLGY9YztiKj0wLjM4O2MqPTAuNjthPXQudSgpO3ZhciBnPUgudmEsaD0wLjgqZyxrPTAuOCxsPTAsbT0wLjUsZD0oZC1iKS8yLGY9KGYtYykvMjtKKGEsbCpiK2QsKG0raykqYytmLCEwKTtLKGEsKGwtaCkqYitkLChtK2spKmMrZiwobC1rKSpiK2QsKG0raCkqYytmLChsLWspKmIrZCxtKmMrZik7SyhhLChsLWspKmIrZCwobS1oKSoNCmMrZiwobC1oKSpiK2QsKG0taykqYytmLGwqYitkLChtLWspKmMrZik7SyhhLGwqYitkLChtLWspKmMrZiwobC1rKzAuNSpoKSpiK2QsKG0taCkqYytmLChsLWsrMC41KmgpKmIrZCxtKmMrZik7SyhhLChsLWsrMC41KmgpKmIrZCwobStoKSpjK2YsbCpiK2QsKG0raykqYytmLGwqYitkLChtK2spKmMrZik7TShhKTtoPTAuNCpnO2s9MC40O2w9MC4yO209MC41O0ooYSxsKmIrZCwobStrKSpjK2YsITApO0soYSwobC1oKSpiK2QsKG0raykqYytmLChsLWspKmIrZCwobStoKSpjK2YsKGwtaykqYitkLG0qYytmKTtLKGEsKGwtaykqYitkLChtLWgpKmMrZiwobC1oKSpiK2QsKG0taykqYytmLGwqYitkLChtLWspKmMrZik7SyhhLGwqYitkLChtLWspKmMrZiwobC1rKzAuNSpoKSpiK2QsKG0taCkqYytmLChsLWsrMC41KmgpKmIrZCxtKmMrZik7SyhhLChsLWsrMC41KmgpKmIrZCwobStoKSpjK2YsbCpiK2QsKG0raykqYytmLGwqYitkLChtK2spKmMrZik7TShhKTtoPTAuMipnO2s9MC4yOw0KbT1sPTAuNTtKKGEsKGwtaykqYitkLG0qYytmLCEwKTtLKGEsKGwtaykqYitkLChtLWgpKmMrZiwobC1oKSpiK2QsKG0taykqYytmLGwqYitkLChtLWspKmMrZik7SyhhLChsK2gpKmIrZCwobS1rKSpjK2YsKGwraykqYitkLChtLWgpKmMrZiwobCtrKSpiK2QsbSpjK2YpO0soYSwobCtrKSpiK2QsKG0raCkqYytmLChsK2gpKmIrZCwobStrKSpjK2YsbCpiK2QsKG0raykqYytmKTtLKGEsKGwtaCkqYitkLChtK2spKmMrZiwobC1rKSpiK2QsKG0raCkqYytmLChsLWspKmIrZCxtKmMrZik7aD0wLjQqZztrPTAuNDtsPTAuODttPTAuNTtKKGEsbCpiK2QsKG0taykqYytmLCEwKTtLKGEsKGwraCkqYitkLChtLWspKmMrZiwobCtrKSpiK2QsKG0taCkqYytmLChsK2spKmIrZCxtKmMrZik7SyhhLChsK2spKmIrZCwobStoKSpjK2YsKGwraCkqYitkLChtK2spKmMrZixsKmIrZCwobStrKSpjK2YpO0soYSxsKmIrZCwobStrKSpjK2YsKGwray0wLjUqaCkqYitkLChtK2gpKmMrZiwobCtrLTAuNSoNCmgpKmIrZCxtKmMrZik7SyhhLChsK2stMC41KmgpKmIrZCwobS1oKSpjK2YsbCpiK2QsKG0taykqYytmLGwqYitkLChtLWspKmMrZik7TShhKTtoPTAuOCpnO2s9MC44O2w9MTttPTAuNTtKKGEsbCpiK2QsKG0taykqYytmLCEwKTtLKGEsKGwraCkqYitkLChtLWspKmMrZiwobCtrKSpiK2QsKG0taCkqYytmLChsK2spKmIrZCxtKmMrZik7SyhhLChsK2spKmIrZCwobStoKSpjK2YsKGwraCkqYitkLChtK2spKmMrZixsKmIrZCwobStrKSpjK2YpO0soYSxsKmIrZCwobStrKSpjK2YsKGwray0wLjUqaCkqYitkLChtK2gpKmMrZiwobCtrLTAuNSpoKSpiK2QsbSpjK2YpO0soYSwobCtrLTAuNSpoKSpiK2QsKG0taCkqYytmLGwqYitkLChtLWspKmMrZixsKmIrZCwobS1rKSpjK2YpO00oYSk7Yj1hLnM7dC52KGEpO3JldHVybiBifSxFbWFpbDpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwwLCEwKTthLmxpbmVUbygxKmIsMCk7YS5saW5lVG8oMSpiLDEqYyk7YS5saW5lVG8oMCwxKg0KYyk7YS5saW5lVG8oMCwwKTtNKGEpO0ooYSwwLDAsITEpO2EubGluZVRvKDAuNSpiLDAuNipjKTthLmxpbmVUbygxKmIsMCk7YS5tb3ZlVG8oMCwxKmMpO2EubGluZVRvKDAuNDUqYiwwLjU0KmMpO2EubW92ZVRvKDEqYiwxKmMpO2EubGluZVRvKDAuNTUqYiwwLjU0KmMpO2EuYmIoITEpO2I9YS5zO3QudihhKTtyZXR1cm4gYn0sRXRoZXJuZXQ6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAuMzUqYiwwLCEwKTthLmxpbmVUbygwLjY1KmIsMCk7YS5saW5lVG8oMC42NSpiLDAuNCpjKTthLmxpbmVUbygwLjM1KmIsMC40KmMpO2EubGluZVRvKDAuMzUqYiwwKTtNKGEpO0ooYSwwLjEqYiwxKmMsITAsITApO2EubGluZVRvKDAuNCpiLDEqYyk7YS5saW5lVG8oMC40KmIsMC42KmMpO2EubGluZVRvKDAuMSpiLDAuNipjKTthLmxpbmVUbygwLjEqYiwxKmMpO00oYSk7SihhLDAuNipiLDEqYywhMCwhMCk7YS5saW5lVG8oMC45KmIsMSpjKTthLmxpbmVUbygwLjkqYiwwLjYqYyk7YS5saW5lVG8oMC42Kg0KYiwwLjYqYyk7YS5saW5lVG8oMC42KmIsMSpjKTtNKGEpO0ooYSwwLDAuNSpjLCExKTthLmxpbmVUbygxKmIsMC41KmMpO2EubW92ZVRvKDAuNSpiLDAuNSpjKTthLmxpbmVUbygwLjUqYiwwLjQqYyk7YS5tb3ZlVG8oMC43NSpiLDAuNSpjKTthLmxpbmVUbygwLjc1KmIsMC42KmMpO2EubW92ZVRvKDAuMjUqYiwwLjUqYyk7YS5saW5lVG8oMC4yNSpiLDAuNipjKTthLmJiKCExKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LFBvd2VyOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO3ZhciBkPUgudmEsZj0wLjQqZCxnPTAuNCxoPXQuSygpLGs9dC5LKCksbD10LksoKSxtPXQuSygpO0guVmkoMC41LDAuNS1nLDAuNStmLDAuNS1nLDAuNStnLDAuNS1mLDAuNStnLDAuNSwwLjUsaCxoLGssbCxtKTt2YXIgbj10LmxjKGsueCxrLnkpO0ooYSxrLngqYixrLnkqYywhMCk7SyhhLGwueCpiLGwueSpjLG0ueCpiLG0ueSpjLCgwLjUrZykqYiwwLjUqYyk7SyhhLCgwLjUrZykqYiwoMC41K2YpKmMsKDAuNSsNCmYpKmIsKDAuNStnKSpjLDAuNSpiLCgwLjUrZykqYyk7SyhhLCgwLjUtZikqYiwoMC41K2cpKmMsKDAuNS1nKSpiLCgwLjUrZikqYywoMC41LWcpKmIsMC41KmMpO0guVmkoMC41LWcsMC41LDAuNS1nLDAuNS1mLDAuNS1mLDAuNS1nLDAuNSwwLjUtZywwLjUsbCxtLGssaCxoKTtLKGEsbC54KmIsbC55KmMsbS54KmIsbS55KmMsay54KmIsay55KmMpO2Y9MC4zKmQ7Zz0wLjM7SC5WaSgwLjUtZywwLjUsMC41LWcsMC41LWYsMC41LWYsMC41LWcsMC41LDAuNS1nLDAuNSxsLG0sayxoLGgpO2EubGluZVRvKGsueCpiLGsueSpjKTtLKGEsbS54KmIsbS55KmMsbC54KmIsbC55KmMsKDAuNS1nKSpiLDAuNSpjKTtLKGEsKDAuNS1nKSpiLCgwLjUrZikqYywoMC41LWYpKmIsKDAuNStnKSpjLDAuNSpiLCgwLjUrZykqYyk7SyhhLCgwLjUrZikqYiwoMC41K2cpKmMsKDAuNStnKSpiLCgwLjUrZikqYywoMC41K2cpKmIsMC41KmMpO0guVmkoMC41LDAuNS1nLDAuNStmLDAuNS1nLDAuNStnLDAuNS0NCmYsMC41K2csMC41LDAuNSxoLGgsayxsLG0pO0soYSxtLngqYixtLnkqYyxsLngqYixsLnkqYyxrLngqYixrLnkqYyk7TShhKTtKKGEsMC40NSpiLDAsITApO2EubGluZVRvKDAuNDUqYiwwLjUqYyk7YS5saW5lVG8oMC41NSpiLDAuNSpjKTthLmxpbmVUbygwLjU1KmIsMCk7TShhKTt0LkIoaCk7dC5CKGspO3QuQihsKTt0LkIobSk7dC5CKG4pO2I9YS5zO2IuRz1uZXcgSSgwLjI1LDAuNTUpO2IuSD1uZXcgSSgwLjc1LDAuOCk7dC52KGEpO3JldHVybiBifSxGYWxsb3V0OmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO3ZhciBkPTAuNSpILnZhO0ooYSwwKmIsMC41KmMsITApO0soYSwwKmIsKDAuNS1kKSpjLCgwLjUtZCkqYiwwKmMsMC41KmIsMCpjKTtLKGEsKDAuNStkKSpiLDAqYywxKmIsKDAuNS1kKSpjLDEqYiwwLjUqYyk7SyhhLDEqYiwoMC41K2QpKmMsKDAuNStkKSpiLDEqYywwLjUqYiwxKmMpO0soYSwoMC41LWQpKmIsMSpjLDAqYiwoMC41K2QpKmMsMCpiLDAuNSpjKTt2YXIgZj0NCmQ9MDtKKGEsKDAuMytkKSpiLCgwLjgrZikqYywhMCwhMCk7YS5saW5lVG8oKDAuNStkKSpiLCgwLjUrZikqYyk7YS5saW5lVG8oKDAuMStkKSpiLCgwLjUrZikqYyk7YS5saW5lVG8oKDAuMytkKSpiLCgwLjgrZikqYyk7ZD0wLjQ7Zj0wO00oYSk7SihhLCgwLjMrZCkqYiwoMC44K2YpKmMsITAsITApO2EubGluZVRvKCgwLjUrZCkqYiwoMC41K2YpKmMpO2EubGluZVRvKCgwLjErZCkqYiwoMC41K2YpKmMpO2EubGluZVRvKCgwLjMrZCkqYiwoMC44K2YpKmMpO2Q9MC4yO2Y9LTAuMztNKGEpO0ooYSwoMC4zK2QpKmIsKDAuOCtmKSpjLCEwLCEwKTthLmxpbmVUbygoMC41K2QpKmIsKDAuNStmKSpjKTthLmxpbmVUbygoMC4xK2QpKmIsKDAuNStmKSpjKTthLmxpbmVUbygoMC4zK2QpKmIsKDAuOCtmKSpjKTtNKGEpO2I9YS5zO2IudmM9V2c7dC52KGEpO3JldHVybiBifSxJcnJpdGF0aW9uSGF6YXJkOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLjIqYiwwKmMsITApO2EubGluZVRvKDAuNSoNCmIsMC4zKmMpO2EubGluZVRvKDAuOCpiLDAqYyk7YS5saW5lVG8oMSpiLDAuMipjKTthLmxpbmVUbygwLjcqYiwwLjUqYyk7YS5saW5lVG8oMSpiLDAuOCpjKTthLmxpbmVUbygwLjgqYiwxKmMpO2EubGluZVRvKDAuNSpiLDAuNypjKTthLmxpbmVUbygwLjIqYiwxKmMpO2EubGluZVRvKDAqYiwwLjgqYyk7YS5saW5lVG8oMC4zKmIsMC41KmMpO2EubGluZVRvKDAqYiwwLjIqYyk7TShhKTtiPWEucztiLkc9bmV3IEkoMC4zLDAuMyk7Yi5IPW5ldyBJKDAuNywwLjcpO3QudihhKTtyZXR1cm4gYn0sRWxlY3RyaWNhbEhhemFyZDpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMC4zNywwKmMsITApO2EubGluZVRvKDAuNSpiLDAuMTEqYyk7YS5saW5lVG8oMC43NypiLDAuMDQqYyk7YS5saW5lVG8oMC4zMypiLDAuNDkqYyk7YS5saW5lVG8oMSpiLDAuMzcqYyk7YS5saW5lVG8oMC42MypiLDAuODYqYyk7YS5saW5lVG8oMC43NypiLDAuOTEqYyk7YS5saW5lVG8oMC4zNCpiLDEqYyk7YS5saW5lVG8oMC4zNCoNCmIsMC43OCpjKTthLmxpbmVUbygwLjQ0KmIsMC44KmMpO2EubGluZVRvKDAuNjUqYiwwLjU2KmMpO2EubGluZVRvKDAqYiwwLjY4KmMpO00oYSk7Yj1hLnM7dC52KGEpO3JldHVybiBifSxGaXJlSGF6YXJkOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLjEqYiwxKmMsITApO0soYSwtMC4yNSpiLDAuNjMqYywwLjQ1KmIsMC40NCpjLDAuMjkqYiwwKmMpO0soYSwwLjQ4KmIsMC4xNypjLDAuNTQqYiwwLjM1KmMsMC41MSpiLDAuNDIqYyk7SyhhLDAuNTkqYiwwLjI5KmMsMC41OCpiLDAuMjgqYywwLjU5KmIsMC4xOCpjKTtLKGEsMC44KmIsMC4zNCpjLDAuODgqYiwwLjQzKmMsMC43NSpiLDAuNipjKTtLKGEsMC44NypiLDAuNDgqYywwLjg4KmIsMC40MypjLDAuODgqYiwwLjMxKmMpO0soYSwxLjE3KmIsMC43NipjLDAuODIqYiwwLjgqYywwLjkqYiwxKmMpO00oYSk7Yj1hLnM7Yi5HPW5ldyBJKDAuMDUsMC42NDUpO2IuSD1uZXcgSSgwLjg4NCwwLjkwOCk7dC52KGEpO3JldHVybiBifSwNCkJwbW5BY3Rpdml0eUxvb3A6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7dmFyIGQ9NCooTWF0aC5TUVJUMi0xKS8zKjAuNTtKKGEsKDAuNSpNYXRoLlNRUlQyLzIrMC41KSpiLCgxLSgwLjUtMC41Kk1hdGguU1FSVDIvMikpKmMsITEpO0soYSwxKmIsMC43KmMsMSpiLDAuNSpjLDEqYiwwLjUqYyk7SyhhLDEqYiwoMC41LWQrMCkqYywoMC41K2QrMCkqYiwwKmMsMC41KmIsMCpjKTtLKGEsKDAuNS1kKzApKmIsMCpjLDAqYiwoMC41LWQrMCkqYywwKmIsMC41KmMpO0soYSwwKmIsKDAuNStkKzApKmMsKDAuNS1kKzApKmIsMSpjLDAuMzUqYiwwLjk4KmMpO2EubW92ZVRvKDAuMzUqYiwwLjgqYyk7YS5saW5lVG8oMC4zNSpiLDEqYyk7YS5saW5lVG8oMC4xNSpiLDEqYyk7Yj1hLnM7dC52KGEpO3JldHVybiBifSxCcG1uQWN0aXZpdHlQYXJhbGxlbDpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwwLCExKTthLmxpbmVUbygwLDEqYyk7YS5tb3ZlVG8oMC41KmIsMCk7YS5saW5lVG8oMC41Kg0KYiwxKmMpO2EubW92ZVRvKDEqYiwwKTthLmxpbmVUbygxKmIsMSpjKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LEJwbW5BY3Rpdml0eVNlcXVlbnRpYWw6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMCwhMSk7YS5saW5lVG8oMSpiLDApO2EubW92ZVRvKDAsMC41KmMpO2EubGluZVRvKDEqYiwwLjUqYyk7YS5tb3ZlVG8oMCwxKmMpO2EubGluZVRvKDEqYiwxKmMpO2I9YS5zO3QudihhKTtyZXR1cm4gYn0sQnBtbkFjdGl2aXR5QWRIb2M6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMCwhMSk7SihhLDEqYiwxKmMsITEpO0ooYSwwLDAuNSpjLCExKTtLKGEsMC4yKmIsMC4zNSpjLDAuMypiLDAuMzUqYywwLjUqYiwwLjUqYyk7SyhhLDAuNypiLDAuNjUqYywwLjgqYiwwLjY1KmMsMSpiLDAuNSpjKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LEJwbW5BY3Rpdml0eUNvbXBlbnNhdGlvbjpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwwLjUqYywhMCk7YS5saW5lVG8oMC41Kg0KYiwwKTthLmxpbmVUbygwLjUqYiwwLjUqYyk7YS5saW5lVG8oMSpiLDEqYyk7YS5saW5lVG8oMSpiLDApO2EubGluZVRvKDAuNSpiLDAuNSpjKTthLmxpbmVUbygwLjUqYiwxKmMpO00oYSk7Yj1hLnM7dC52KGEpO3JldHVybiBifSxCcG1uVGFza01lc3NhZ2U6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMC4yKmMsITApO2EubGluZVRvKDEqYiwwLjIqYyk7YS5saW5lVG8oMSpiLDAuOCpjKTthLmxpbmVUbygwLDAuOCpjKTthLmxpbmVUbygwLDAuOCpjKTtNKGEpO0ooYSwwLDAuMipjLCExKTthLmxpbmVUbygwLjUqYiwwLjUqYyk7YS5saW5lVG8oMSpiLDAuMipjKTthLmJiKCExKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LEJwbW5UYXNrU2NyaXB0OmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLjcqYiwxKmMsITApO2EubGluZVRvKDAuMypiLDEqYyk7SyhhLDAuNipiLDAuNSpjLDAsMC41KmMsMC4zKmIsMCk7YS5saW5lVG8oMC43KmIsMCk7SyhhLDAuNCpiLDAuNSpjLA0KMSpiLDAuNSpjLDAuNypiLDEqYyk7TShhKTtKKGEsMC40NSpiLDAuNzMqYywhMSk7YS5saW5lVG8oMC43KmIsMC43MypjKTthLm1vdmVUbygwLjM4KmIsMC41KmMpO2EubGluZVRvKDAuNjMqYiwwLjUqYyk7YS5tb3ZlVG8oMC4zMSpiLDAuMjcqYyk7YS5saW5lVG8oMC41NipiLDAuMjcqYyk7YS5iYighMSk7Yj1hLnM7dC52KGEpO3JldHVybiBifSxCcG1uVGFza1VzZXI6ZnVuY3Rpb24oYSxiLGMpe2E9dC51KCk7SihhLDAsMCwhMSk7SihhLDAuMzM1KmIsKDEtMC41NTUpKmMsITApO2EubGluZVRvKDAuMzM1KmIsMC41OTUqYyk7YS5saW5lVG8oMC42NjUqYiwwLjU5NSpjKTthLmxpbmVUbygwLjY2NSpiLCgxLTAuNTU1KSpjKTtLKGEsMC44OCpiLDAuNDYqYywwLjk4KmIsMC41NCpjLDEqYiwwLjY4KmMpO2EubGluZVRvKDEqYiwxKmMpO2EubGluZVRvKDAsMSpjKTthLmxpbmVUbygwLDAuNjgqYyk7SyhhLDAuMDIqYiwwLjU0KmMsMC4xMipiLDAuNDYqYywwLjMzNSpiLCgxLTAuNTU1KSoNCmMpO2EubGluZVRvKDAuMzY1KmIsMC40MDUqYyk7dmFyIGQ9MC41LTAuMjg1LGY9TWF0aC5QSS80LGc9NCooMS1NYXRoLmNvcyhmKSkvKDMqTWF0aC5zaW4oZikpLGY9ZypkLGc9ZypkO0soYSwoMC41LShmK2QpLzIpKmIsKGQrKGQrZykvMikqYywoMC41LWQpKmIsKGQrZykqYywoMC41LWQpKmIsZCpjKTtLKGEsKDAuNS1kKSpiLChkLWcpKmMsKDAuNS1mKSpiLChkLWQpKmMsMC41KmIsKGQtZCkqYyk7SyhhLCgwLjUrZikqYiwoZC1kKSpjLCgwLjUrZCkqYiwoZC1nKSpjLCgwLjUrZCkqYixkKmMpO0soYSwoMC41K2QpKmIsKGQrZykqYywoMC41KyhmK2QpLzIpKmIsKGQrKGQrZykvMikqYywwLjYzNSpiLDAuNDA1KmMpO2EubGluZVRvKDAuNjM1KmIsMC40MDUqYyk7YS5saW5lVG8oMC42NjUqYiwoMS0wLjU1NSkqYyk7YS5saW5lVG8oMC42NjUqYiwwLjU5NSpjKTthLmxpbmVUbygwLjMzNSpiLDAuNTk1KmMpO0ooYSwwLjIqYiwxKmMsITEpO2EubGluZVRvKDAuMipiLDAuOCpjKTtKKGEsDQowLjgqYiwxKmMsITEpO2EubGluZVRvKDAuOCpiLDAuOCpjKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LEJwbW5FdmVudENvbmRpdGlvbmFsOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLjEqYiwwLCEwKTthLmxpbmVUbygwLjkqYiwwKTthLmxpbmVUbygwLjkqYiwxKmMpO2EubGluZVRvKDAuMSpiLDEqYyk7TShhKTtKKGEsMC4yKmIsMC4yKmMsITEpO2EubGluZVRvKDAuOCpiLDAuMipjKTthLm1vdmVUbygwLjIqYiwwLjQqYyk7YS5saW5lVG8oMC44KmIsMC40KmMpO2EubW92ZVRvKDAuMipiLDAuNipjKTthLmxpbmVUbygwLjgqYiwwLjYqYyk7YS5tb3ZlVG8oMC4yKmIsMC44KmMpO2EubGluZVRvKDAuOCpiLDAuOCpjKTthLmJiKCExKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LEJwbW5FdmVudEVycm9yOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO0ooYSwwLDEqYywhMCk7YS5saW5lVG8oMC4zMypiLDApO2EubGluZVRvKDAuNjYqYiwwLjUqYyk7YS5saW5lVG8oMSpiLDApO2EubGluZVRvKDAuNjYqDQpiLDEqYyk7YS5saW5lVG8oMC4zMypiLDAuNSpjKTtNKGEpO2I9YS5zO3QudihhKTtyZXR1cm4gYn0sQnBtbkV2ZW50RXNjYWxhdGlvbjpmdW5jdGlvbihhLGIsYyl7YT10LnUoKTtKKGEsMCwwLCExKTtKKGEsMSpiLDEqYywhMSk7SihhLDAuMSpiLDEqYywhMCk7YS5saW5lVG8oMC41KmIsMCk7YS5saW5lVG8oMC45KmIsMSpjKTthLmxpbmVUbygwLjUqYiwwLjUqYyk7TShhKTtiPWEuczt0LnYoYSk7cmV0dXJuIGJ9LEJwbW5FdmVudFRpbWVyOmZ1bmN0aW9uKGEsYixjKXthPXQudSgpO3ZhciBkPTAuNSpILnZhO0ooYSwxKmIsMC41KmMsITApO0soYSwxKmIsKDAuNStkKSpjLCgwLjUrZCkqYiwxKmMsMC41KmIsMSpjKTtLKGEsKDAuNS1kKSpiLDEqYywwLCgwLjUrZCkqYywwLDAuNSpjKTtLKGEsMCwoMC41LWQpKmMsKDAuNS1kKSpiLDAsMC41KmIsMCk7SyhhLCgwLjUrZCkqYiwwLDEqYiwoMC41LWQpKmMsMSpiLDAuNSpjKTtKKGEsMC41KmIsMCwhMSk7YS5saW5lVG8oMC41KmIsMC4xNSoNCmMpO2EubW92ZVRvKDAuNSpiLDEqYyk7YS5saW5lVG8oMC41KmIsMC44NSpjKTthLm1vdmVUbygwLDAuNSpjKTthLmxpbmVUbygwLjE1KmIsMC41KmMpO2EubW92ZVRvKDEqYiwwLjUqYyk7YS5saW5lVG8oMC44NSpiLDAuNSpjKTthLm1vdmVUbygwLjUqYiwwLjUqYyk7YS5saW5lVG8oMC41OCpiLDAuMSpjKTthLm1vdmVUbygwLjUqYiwwLjUqYyk7YS5saW5lVG8oMC43OCpiLDAuNTQqYyk7YS5iYighMSk7Yj1hLnM7Yi52Yz1XZzt0LnYoYSk7cmV0dXJuIGJ9fTtILk9BPXt9O2Zvcih2YXIgc20gaW4gSC5iailILmJqW3NtLnRvTG93ZXJDYXNlKCldPXNtOw0KSC5mdz17IiI6IiIsU3RhbmRhcmQ6IkYxIG0gMCwwIGwgOCw0IC04LDQgMiwtNCB6IixCYWNrd2FyZDoiRjEgbSA4LDAgbCAtMiw0IDIsNCAtOCwtNCB6IixUcmlhbmdsZToiRjEgbSAwLDAgbCA4LDQuNjIgLTgsNC42MiB6IixCYWNrd2FyZFRyaWFuZ2xlOiJGMSBtIDgsNCBsIDAsNCAtOCwtNCA4LC00IDAsNCB6IixCb29tZXJhbmc6IkYxIG0gMCwwIGwgOCw0IC04LDQgNCwtNCAtNCwtNCB6IixCYWNrd2FyZEJvb21lcmFuZzoiRjEgbSA4LDAgbCAtOCw0IDgsNCAtNCwtNCA0LC00IHoiLFNpZGV3YXlzVjoibSAwLDAgbCA4LDQgLTgsNCAwLC0xIDYsLTMgLTYsLTMgMCwtMSB6IixCYWNrd2FyZFY6Im0gOCwwIGwgLTgsNCA4LDQgMCwtMSAtNiwtMyA2LC0zIDAsLTEgeiIsT3BlblRyaWFuZ2xlOiJtIDAsMCBsIDgsNCAtOCw0IixCYWNrd2FyZE9wZW5UcmlhbmdsZToibSA4LDAgbCAtOCw0IDgsNCIsT3BlblRyaWFuZ2xlTGluZToibSAwLDAgbCA4LDQgLTgsNCBtIDguNSwwIGwgMCwtOCIsDQpCYWNrd2FyZE9wZW5UcmlhbmdsZUxpbmU6Im0gOCwwIGwgIC04LDQgOCw0IG0gLTguNSwwIGwgMCwtOCIsT3BlblRyaWFuZ2xlVG9wOiJtIDAsMCBsIDgsNCBtIDAsNCIsQmFja3dhcmRPcGVuVHJpYW5nbGVUb3A6Im0gOCwwIGwgLTgsNCBtIDAsNCIsT3BlblRyaWFuZ2xlQm90dG9tOiJtIDAsOCBsIDgsLTQiLEJhY2t3YXJkT3BlblRyaWFuZ2xlQm90dG9tOiJtIDAsNCBsIDgsNCIsSGFsZlRyaWFuZ2xlVG9wOiJGMSBtIDAsMCBsIDAsNCA4LDAgeiBtIDAsOCIsQmFja3dhcmRIYWxmVHJpYW5nbGVUb3A6IkYxIG0gOCwwIGwgMCw0IC04LDAgeiBtIDAsOCIsSGFsZlRyaWFuZ2xlQm90dG9tOiJGMSBtIDAsNCBsIDAsNCA4LC00IHoiLEJhY2t3YXJkSGFsZlRyaWFuZ2xlQm90dG9tOiJGMSBtIDgsNCBsIDAsNCAtOCwtNCB6IixGb3J3YXJkU2VtaUNpcmNsZToibSA0LDAgYiAyNzAgMTgwIDAgNCA0IixCYWNrd2FyZFNlbWlDaXJjbGU6Im0gNCw4IGIgOTAgMTgwIDAgLTQgNCIsRmVhdGhlcjoibSAwLDAgbCAzLDQgLTMsNCIsDQpCYWNrd2FyZEZlYXRoZXI6Im0gMywwIGwgLTMsNCAzLDQiLERvdWJsZUZlYXRoZXJzOiJtIDAsMCBsIDMsNCAtMyw0IG0gMywtOCBsIDMsNCAtMyw0IixCYWNrd2FyZERvdWJsZUZlYXRoZXJzOiJtIDMsMCBsIC0zLDQgMyw0IG0gMywtOCBsIC0zLDQgMyw0IixUcmlwbGVGZWF0aGVyczoibSAwLDAgbCAzLDQgLTMsNCBtIDMsLTggbCAzLDQgLTMsNCBtIDMsLTggbCAzLDQgLTMsNCIsQmFja3dhcmRUcmlwbGVGZWF0aGVyczoibSAzLDAgbCAtMyw0IDMsNCBtIDMsLTggbCAtMyw0IDMsNCBtIDMsLTggbCAtMyw0IDMsNCIsRm9yd2FyZFNsYXNoOiJtIDAsOCBsIDUsLTgiLEJhY2tTbGFzaDoibSAwLDAgbCA1LDgiLERvdWJsZUZvcndhcmRTbGFzaDoibSAwLDggbCA0LC04IG0gLTIsOCBsIDQsLTgiLERvdWJsZUJhY2tTbGFzaDoibSAwLDAgbCA0LDggbSAtMiwtOCBsIDQsOCIsVHJpcGxlRm9yd2FyZFNsYXNoOiJtIDAsOCBsIDQsLTggbSAtMiw4IGwgNCwtOCBtIC0yLDggbCA0LC04IiwNClRyaXBsZUJhY2tTbGFzaDoibSAwLDAgbCA0LDggbSAtMiwtOCBsIDQsOCBtIC0yLC04IGwgNCw4IixGb3JrOiJtIDAsNCBsIDgsMCBtIC04LDAgbCA4LC00IG0gLTgsNCBsIDgsNCIsQmFja3dhcmRGb3JrOiJtIDgsNCBsIC04LDAgbSA4LDAgbCAtOCwtNCBtIDgsNCBsIC04LDQiLExpbmVGb3JrOiJtIDAsMCBsIDAsOCBtIDAsLTQgbCA4LDAgbSAtOCwwIGwgOCwtNCBtIC04LDQgbCA4LDQiLEJhY2t3YXJkTGluZUZvcms6Im0gOCw0IGwgLTgsMCBtIDgsMCBsIC04LC00IG0gOCw0IGwgLTgsNCBtIDgsLTggbCAwLDgiLENpcmNsZUZvcms6IkYxIG0gNiw0IGIgMCAzNjAgLTMgMCAzIHogbSAwLDAgbCA2LDAgbSAtNiwwIGwgNiwtNCBtIC02LDQgbCA2LDQiLEJhY2t3YXJkQ2lyY2xlRm9yazoiRjEgbSAwLDQgbCA2LDAgbSAtNiwtNCBsIDYsNCBtIC02LDQgbCA2LC00IG0gNiwwIGIgMCAzNjAgLTMgMCAzIixDaXJjbGVMaW5lRm9yazoiRjEgbSA2LDQgYiAwIDM2MCAtMyAwIDMgeiBtIDEsLTQgbCAwLDggbSAwLC00IGwgNiwwIG0gLTYsMCBsIDYsLTQgbSAtNiw0IGwgNiw0IiwNCkJhY2t3YXJkQ2lyY2xlTGluZUZvcms6IkYxIG0gMCw0IGwgNiwwIG0gLTYsLTQgbCA2LDQgbSAtNiw0IGwgNiwtNCBtIDAsLTQgbCAwLDggbSA3LC00IGIgMCAzNjAgLTMgMCAzIixDaXJjbGU6IkYxIG0gOCw0IGIgMCAzNjAgLTQgMCA0IHoiLEJsb2NrOiJGMSBtIDAsMCBsIDAsOCA4LDAgMCwtOCB6IixTdHJldGNoZWREaWFtb25kOiJGMSBtIDAsMyBsIDUsLTMgNSwzIC01LDMgLTUsLTMgeiIsRGlhbW9uZDoiRjEgbSAwLDQgbCA0LC00IDQsNCAtNCw0IC00LC00IHoiLENoZXZyb246IkYxIG0gMCwwIGwgNSwwIDMsNCAtMyw0IC01LDAgMywtNCAtMywtNCB6IixTdHJldGNoZWRDaGV2cm9uOiJGMSBtIDAsMCBsIDgsMCAzLDQgLTMsNCAtOCwwIDMsLTQgLTMsLTQgeiIsTm9ybWFsQXJyb3c6IkYxIG0gMCwyIGwgNCwwIDAsLTIgNCw0IC00LDQgMCwtMiAtNCwwIHoiLFg6Im0gMCwwIGwgOCw4IG0gMCwtOCBsIC04LDgiLFRhaWxlZE5vcm1hbEFycm93OiJGMSBtIDAsMCBsIDIsMCAxLDIgMywwIDAsLTIgMiw0IC0yLDQgMCwtMiAtMywwIC0xLDIgLTIsMCAxLC00IC0xLC00IHoiLA0KRG91YmxlVHJpYW5nbGU6IkYxIG0gMCwwIGwgNCw0IC00LDQgMCwtOCB6ICBtIDQsMCBsIDQsNCAtNCw0IDAsLTggeiIsQmlnRW5kQXJyb3c6IkYxIG0gMCwwIGwgNSwyIDAsLTIgMyw0IC0zLDQgMCwtMiAtNSwyIDAsLTggeiIsQ29uY2F2ZVRhaWxBcnJvdzoiRjEgbSAwLDIgaCA0IHYgLTIgbCA0LDQgLTQsNCB2IC0yIGggLTQgbCAyLC0yIC0yLC0yIHoiLFJvdW5kZWRUcmlhbmdsZToiRjEgbSAwLDEgYSAxLDEgMCAwIDEgMSwtMSBsIDcsMyBhIDAuNSwxIDAgMCAxIDAsMiBsIC03LDMgYSAxLDEgMCAwIDEgLTEsLTEgbCAwLC02IHoiLFNpbXBsZUFycm93OiJGMSBtIDEsMiBsIC0xLC0yIDIsMCAxLDIgLTEsMiAtMiwwIDEsLTIgNSwwIDAsLTIgMiwyIC0yLDIgMCwtMiB6IixBY2NlbGVyYXRpb25BcnJvdzoiRjEgbSAwLDAgbCAwLDggMC4yLDAgMCwtOCAtMC4yLDAgeiBtIDIsMCBsIDAsOCAxLDAgMCwtOCAtMSwwIHogbSAzLDAgbCAyLDAgMiw0IC0yLDQgLTIsMCAwLC04IHoiLEJveEFycm93OiJGMSBtIDAsMCBsIDQsMCAwLDIgMiwwIDAsLTIgMiw0IC0yLDQgMCwtMiAtMiwwIDAsMiAtNCwwIDAsLTggeiIsDQpUcmlhbmdsZUxpbmU6IkYxIG0gOCw0IGwgLTgsLTQgMCw4IDgsLTQgeiBtIDAuNSw0IGwgMCwtOCIsQ2lyY2xlRW5kZWRBcnJvdzoiRjEgbSAxMCw0IGwgLTIsLTMgMCwyIC0yLDAgMCwyIDIsMCAwLDIgMiwtMyB6IG0gLTQsMCBiIDAgMzYwIC0zIDAgMyB6IixEeW5hbWljV2lkdGhBcnJvdzoiRjEgbSAwLDMgbCAyLDAgMiwtMSAyLC0yIDIsNCAtMiw0IC0yLC0yIC0yLC0xIC0yLDAgMCwtMiB6IixFcXVpbGlicml1bUFycm93OiJtIDAsMyBsIDgsMCAtMywtMyBtIDMsNSBsIC04LDAgMywzIixGYXN0Rm9yd2FyZDoiRjEgbSAwLDAgbCAzLjUsNCAwLC00IDMuNSw0IDAsLTQgMSwwIDAsOCAtMSwwIDAsLTQgLTMuNSw0IDAsLTQgLTMuNSw0IDAsLTggeiIsS2l0ZToiRjEgbSAwLDQgbCAyLC00IDYsNCAtNiw0IC0yLC00IHoiLEhhbGZBcnJvd1RvcDoiRjEgbSAwLDAgbCA0LDQgNCwwIC04LC00IHogbSAwLDgiLEhhbGZBcnJvd0JvdHRvbToiRjEgbSAwLDggbCA0LC00IDQsMCAtOCw0IHoiLA0KT3Bwb3NpbmdEaXJlY3Rpb25Eb3VibGVBcnJvdzoiRjEgbSAwLDQgbCAyLC00IDAsMiA0LDAgMCwtMiAyLDQgLTIsNCAwLC0yIC00LDAgMCwyIC0yLC00IHoiLFBhcnRpYWxEb3VibGVUcmlhbmdsZToiRjEgbSAwLDAgNCwzIDAsLTMgNCw0IC00LDQgMCwtMyAtNCwzIDAsLTggeiIsTGluZUNpcmNsZToiRjEgbSAwLDAgbCAwLDggbSA3IC00IGIgMCAzNjAgLTMgMCAzIHoiLERvdWJsZUxpbmVDaXJjbGU6IkYxIG0gMCwwIGwgMCw4IG0gMiwtOCBsIDAsOCBtIDcgLTQgYiAwIDM2MCAtMyAwIDMgeiIsVHJpcGxlTGluZUNpcmNsZToiRjEgbSAwLDAgbCAwLDggbSAyLC04IGwgMCw4IG0gMiwtOCBsIDAsOCBtIDcgLTQgYiAwIDM2MCAtMyAwIDMgeiIsQ2lyY2xlTGluZToiRjEgbSA2IDQgYiAwIDM2MCAtMyAwIDMgeiBtIDEsLTQgbCAwLDgiLERpYW1vbmRDaXJjbGU6IkYxIG0gOCw0IGwgLTQsNCAtNCwtNCA0LC00IDQsNCBtIDgsMCBiIDAgMzYwIC00IDAgNCB6IixQbHVzQ2lyY2xlOiJGMSBtIDgsNCBiIDAgMzYwIC00IDAgNCBsIC04IDAgeiBtIC00IC00IGwgMCA4IiwNCk9wZW5SaWdodFRyaWFuZ2xlVG9wOiJtIDgsMCBsIDAsNCAtOCwwIG0gMCw0IixPcGVuUmlnaHRUcmlhbmdsZUJvdHRvbToibSA4LDggbCAwLC00IC04LDAiLExpbmU6Im0gMCwwIGwgMCw4IixEb3VibGVMaW5lOiJtIDAsMCBsIDAsOCBtIDIsMCBsIDAsLTgiLFRyaXBsZUxpbmU6Im0gMCwwIGwgMCw4IG0gMiwwIGwgMCwtOCBtIDIsMCBsIDAsOCIsUGVudGFnb25BcnJvdzoiRjEgbSA4LDQgbCAtNCwtNCAtNCwwIDAsOCA0LDAgNCwtNCB6In07SC5CbT17fTtILlJKPWZ1bmN0aW9uKCl7aWYoSC5mdyl7Zm9yKHZhciBhIGluIEguZncpe3ZhciBiPVJjKEguZndbYV0sITEpO0guQm1bYV09YjthLnRvTG93ZXJDYXNlKCkhPT1hJiYoSC5CbVthLnRvTG93ZXJDYXNlKCldPWEpfUguZnc9dm9pZCAwfX07DQpILlREPWZ1bmN0aW9uKGEpe0guUkooKTt2YXIgYj1ILkJtW2FdO2lmKHZvaWQgMD09PWIpe2I9YS50b0xvd2VyQ2FzZSgpO2lmKCJub25lIj09PWIpcmV0dXJuIk5vbmUiO2I9SC5CbVtiXX1yZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBiP2I6YiBpbnN0YW5jZW9mIHpjP2E6bnVsbH07Vy5GaWd1cmVHZW5lcmF0b3JzPUguYmo7Vy5BcnJvd2hlYWRHZW9tZXRyaWVzPUguQm07DQpmdW5jdGlvbiBFKGEpezA9PT1hcmd1bWVudHMubGVuZ3RoP3kuY2FsbCh0aGlzKTp5LmNhbGwodGhpcyxhKTt0aGlzLlc9MzExODA3O3RoaXMuSms9dGhpcy5zaD0iIjt0aGlzLlpyPXRoaXMuV3I9dGhpcy5pcz10aGlzLmpyPW51bGw7dGhpcy5rcz0iIjt0aGlzLmtpPXRoaXMuanM9dGhpcy5ybT1udWxsO3RoaXMuWXI9IiI7dGhpcy52bz1udWxsO3RoaXMuWHI9KG5ldyBnYShOYU4sTmFOKSkuZnJlZXplKCk7dGhpcy4kcj0iIjt0aGlzLndvPW51bGw7dGhpcy5sZT0iIjt0aGlzLmxvPXRoaXMueHE9dGhpcy55az1udWxsO3RoaXMuWWc9KG5ldyB3KE5hTixOYU4pKS5mcmVlemUoKTt0aGlzLnFyPSIiO3RoaXMuTWs9bnVsbDt0aGlzLnJyPUViO3RoaXMuQXI9SC5kSDt0aGlzLnRyPUguY0g7dGhpcy5IcT1udWxsO3RoaXMua3I9dG07dGhpcy51bT0obmV3IHcoNiw2KSkuZnJlZXplKCk7dGhpcy50bT0iZ3JheSI7dGhpcy5zbT00O3RoaXMuREM9LTE7dGhpcy5uSD1uZXcgeDt0aGlzLkdqPQ0KbnVsbDt0aGlzLkRqPU5hTn10LmdhKCJQYXJ0IixFKTt0LkthKEUseSk7RS5wcm90b3R5cGUuY2xvbmVQcm90ZWN0ZWQ9ZnVuY3Rpb24oYSl7eS5wcm90b3R5cGUuY2xvbmVQcm90ZWN0ZWQuY2FsbCh0aGlzLGEpO2EuVz10aGlzLlcmLTQwOTd8NDkxNTI7YS5zaD10aGlzLnNoO2EuSms9dGhpcy5KazthLmpyPXRoaXMuanI7YS5pcz10aGlzLmlzO2EuV3I9dGhpcy5XcjthLlpyPXRoaXMuWnI7YS5rcz10aGlzLmtzO2EuanM9dGhpcy5qczthLmtpPW51bGw7YS5Zcj10aGlzLllyO2EuWHIuYXNzaWduKHRoaXMuWHIpO2EuJHI9dGhpcy4kcjthLmxlPXRoaXMubGU7YS54cT10aGlzLnhxO2EuWWcuYXNzaWduKHRoaXMuWWcpO2EucXI9dGhpcy5xcjthLnJyPXRoaXMucnIuWigpO2EuQXI9dGhpcy5Bci5aKCk7YS50cj10aGlzLnRyLlooKTthLkhxPXRoaXMuSHE7YS5rcj10aGlzLmtyO2EudW0uYXNzaWduKHRoaXMudW0pO2EudG09dGhpcy50bTthLnNtPXRoaXMuc219Ow0KRS5wcm90b3R5cGUuWmg9ZnVuY3Rpb24oYSl7eS5wcm90b3R5cGUuWmguY2FsbCh0aGlzLGEpO3FrKGEpO2Eucm09bnVsbDthLnZvPW51bGw7YS53bz1udWxsO2EuTWs9bnVsbDthLkdqPW51bGx9O0UucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9dC54ZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykpKyIjIit0Lm9kKHRoaXMpO3RoaXMuZGF0YSYmKGErPSIoIit5ZCh0aGlzLmRhdGEpKyIpIik7cmV0dXJuIGF9O0UuTGF5b3V0Tm9uZT0wO3ZhciBaaTtFLkxheW91dEFkZGVkPVppPTE7dmFyIGVqO0UuTGF5b3V0UmVtb3ZlZD1laj0yO0UuTGF5b3V0U2hvd249NDtFLkxheW91dEhpZGRlbj04O0UuTGF5b3V0Tm9kZVNpemVkPTE2O3ZhciBLajtFLkxheW91dEdyb3VwTGF5b3V0PUtqPTMyO0UuTGF5b3V0Tm9kZVJlcGxhY2VkPTY0O3ZhciB0bTtFLkxheW91dFN0YW5kYXJkPXRtPVppfGVqfDI4fEtqfDY0Ow0KRS5wcm90b3R5cGUuZm49ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCl7dmFyIGs9dGhpcy5oO251bGwhPT1rJiYoYT09PXdkJiYiZWxlbWVudHMiPT09Yj9mIGluc3RhbmNlb2YgeSYmJGkoZixmdW5jdGlvbihhKXthaihrLGEpfSk6YT09PXhkJiYiZWxlbWVudHMiPT09YiYmZiBpbnN0YW5jZW9mIHkmJiRpKGYsZnVuY3Rpb24oYSl7ZGooayxhKX0pLGsuSWMoYSxiLGMsZCxmLGcsaCkpfTtFLnByb3RvdHlwZS51cGRhdGVUYXJnZXRCaW5kaW5ncz1FLnByb3RvdHlwZS5RYj1mdW5jdGlvbihhKXt5LnByb3RvdHlwZS5RYi5jYWxsKHRoaXMsYSk7aWYobnVsbCE9PXRoaXMuZGF0YSl7YT10aGlzLnhhLm47Zm9yKHZhciBiPWEubGVuZ3RoLGM9MDtjPGI7YysrKXt2YXIgZD1hW2NdO2QgaW5zdGFuY2VvZiB5JiYkaShkLGZ1bmN0aW9uKGEpe251bGwhPT1hLmRhdGEmJmEuUWIoKX0pfX19Ow0KRS5wcm90b3R5cGUudXBkYXRlTW9kZWxEYXRhUmVmZXJlbmNlcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YTtpZihudWxsIT09YSYmISh0aGlzIGluc3RhbmNlb2YgSmUpKXt2YXIgYj10aGlzLmg7aWYobnVsbCE9PWIpe3ZhciBjPWIuYmE7aWYoYyBpbnN0YW5jZW9mIFApe3ZhciBkPWMuUm0oYSksYj1iLkdJKGQpLGY9dGhpcy5nYjtiIT09ZiYmKGI9bnVsbCE9PWY/Yy5IYihmLmRhdGEpOnZvaWQgMCxmPWMuZG4sImZ1bmN0aW9uIj09PXR5cGVvZiBmP2YoYSxiKTphW2ZdPWIsYy53eChhLGQpKX19fX07dC5BKEUse2J3OiJhZG9ybm1lbnRzIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMua2k/dC5hZzp0aGlzLmtpLmtGfSk7RS5wcm90b3R5cGUuZmluZEFkb3JubWVudD1FLnByb3RvdHlwZS5icD1mdW5jdGlvbihhKXtlJiZ0LmkoYSwic3RyaW5nIixFLCJmaW5kQWRvcm5tZW50OmNhdGVnb3J5Iik7dmFyIGI9dGhpcy5raTtyZXR1cm4gbnVsbD09PWI/bnVsbDpiLnphKGEpfTsNCkUucHJvdG90eXBlLmFkZEFkb3JubWVudD1FLnByb3RvdHlwZS5Waz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPT1iKXtlJiYodC5pKGEsInN0cmluZyIsRSwiYWRkQWRvcm5tZW50OmNhdGVnb3J5IiksdC5sKGIsSmUsRSwiYWRkQWRvcm5tZW50OmFkIikpO3ZhciBjPW51bGwsZD10aGlzLmtpO251bGwhPT1kJiYoYz1kLnphKGEpKTtpZihjIT09Yil7aWYobnVsbCE9PWMpe3ZhciBmPWMuaDtudWxsIT09ZiYmZi5yZW1vdmUoYyl9bnVsbD09PWQmJih0aGlzLmtpPWQ9bmV3IGphKCJzdHJpbmciLEplKSk7Yi5zaCE9PWEmJihiLlpjPWEpO2QuYWRkKGEsYik7Yz10aGlzLmg7bnVsbCE9PWMmJihjLmFkZChiKSxiLmRhdGE9dGhpcy5kYXRhKX19fTsNCkUucHJvdG90eXBlLnJlbW92ZUFkb3JubWVudD1FLnByb3RvdHlwZS51bD1mdW5jdGlvbihhKXtlJiZ0LmkoYSwic3RyaW5nIixFLCJyZW1vdmVBZG9ybm1lbnQ6Y2F0ZWdvcnkiKTt2YXIgYj10aGlzLmtpO2lmKG51bGwhPT1iKXt2YXIgYz1iLnphKGEpO2lmKG51bGwhPT1jKXt2YXIgZD1jLmg7bnVsbCE9PWQmJmQucmVtb3ZlKGMpfWIucmVtb3ZlKGEpOzA9PT1iLmNvdW50JiYodGhpcy5raT1udWxsKX19O0UucHJvdG90eXBlLmNsZWFyQWRvcm5tZW50cz1FLnByb3RvdHlwZS5QZj1mdW5jdGlvbigpe3ZhciBhPXRoaXMua2k7aWYobnVsbCE9PWEpe2Zvcih2YXIgYj10LkNiKCksYT1hLms7YS5uZXh0KCk7KWIucHVzaChhLmtleSk7Zm9yKHZhciBhPWIubGVuZ3RoLGM9MDtjPGE7YysrKXRoaXMudWwoYltjXSk7dC55YShiKX19Ow0KRS5wcm90b3R5cGUudXBkYXRlQWRvcm5tZW50cz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZihudWxsIT09YSl7dW0odGhpcyxhKTtmb3IodmFyIGE9YS53Yi5lZi5uLGI9YS5sZW5ndGgsYz0wO2M8YjtjKyspe3ZhciBkPWFbY107ZC5pc0VuYWJsZWQmJmQudXBkYXRlQWRvcm5tZW50cyh0aGlzKX1mb3IoYT10aGlzLmJ3O2EubmV4dCgpOylhLnZhbHVlLmZhKCl9fTsNCmZ1bmN0aW9uIHVtKGEsYil7aWYoYS5lYiYmYS5pRyl7dmFyIGM9YS5OdDtpZihudWxsPT09Y3x8IShhLnBhLk4oKSYmYS5RYSgpJiZjLm9sKCkmJmMucGEuTigpKSlyZXR1cm47dmFyIGQ9YS5icCgiU2VsZWN0aW9uIik7aWYobnVsbD09PWQpe2Q9YS5qRztudWxsPT09ZCYmKGEgaW5zdGFuY2VvZiBWP2Q9Yi5zRjphIGluc3RhbmNlb2YgRSYmKGQ9YSBpbnN0YW5jZW9mIFQ/Yi5PRTpiLkhGKSk7aWYoIShkIGluc3RhbmNlb2YgSmUpKXJldHVybjtMZShkKTtkPWQuY29weSgpO2lmKCEoZCBpbnN0YW5jZW9mIEplKSlyZXR1cm47ZC5aYz0iU2VsZWN0aW9uIjtkLm9jPWN9aWYobnVsbCE9PWQpe3ZhciBmPWQucGxhY2Vob2xkZXI7aWYobnVsbCE9PWYpe3ZhciBnPWMuZGsoKSxoPTA7YyBpbnN0YW5jZW9mIFcmJihoPWMuZmIpO3ZhciBrPXQuQWwoKTtrLnAoKGMuUmEud2lkdGgraCkqZywoYy5SYS5oZWlnaHQraCkqZyk7Zi5DYT1rO3QuYmsoayl9ZC5hbmdsZT1jLmdsKCk7ZC50eXBlIT09DQp2Zz8oZj10LksoKSxkLmxvY2F0aW9uPWMucWIoRWIsZiksdC5CKGYpKTpkLmZhKCk7YS5WaygiU2VsZWN0aW9uIixkKTtyZXR1cm59fWEudWwoIlNlbGVjdGlvbiIpfXQuQShFLHtsYXllcjoibGF5ZXIifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvfSk7dC5BKEUse2g6ImRpYWdyYW0ifSxmdW5jdGlvbigpe3ZhciBhPXRoaXMubG87cmV0dXJuIG51bGwhPT1hP2EuaDpudWxsfSk7dC5nKEUsImxheWVyTmFtZSIsRS5wcm90b3R5cGUuYWYpOw0KdC5kZWZpbmVQcm9wZXJ0eShFLHthZjoibGF5ZXJOYW1lIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Ka30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5KaztpZihiIT09YSl7dC5pKGEsInN0cmluZyIsRSwibGF5ZXJOYW1lIik7dmFyIGM9dGhpcy5oO2lmKG51bGw9PT1jfHxudWxsIT09Yy5idChhKSYmIWMudW4paWYodGhpcy5Kaz1hLHRoaXMuaigibGF5ZXJOYW1lIixiLGEpLGI9dGhpcy5sYXllcixudWxsIT09YiYmYi5uYW1lIT09YSYmKGM9Yi5oLG51bGwhPT1jJiYoYT1jLmJ0KGEpLG51bGwhPT1hJiZhIT09YikpKXt2YXIgZD1iLlhlKC0xLHRoaXMsITApOzA8PWQmJmMuSWMoeGQsInBhcnRzIixiLHRoaXMsbnVsbCxkLCEwKTtkPWEubnAoOTk5OTk5OTksdGhpcywhMCk7MDw9ZCYmYy5JYyh3ZCwicGFydHMiLGEsbnVsbCx0aGlzLCEwLGQpO2Q9dGhpcy50cDtpZihudWxsIT09ZCl7dmFyIGY9Yy5OYTtjLk5hPSEwO2QodGhpcyxiLGEpO2MuTmE9Zn19fX0pOw0KdC5nKEUsImxheWVyQ2hhbmdlZCIsRS5wcm90b3R5cGUudHApO3QuZGVmaW5lUHJvcGVydHkoRSx7dHA6ImxheWVyQ2hhbmdlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuanJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuanI7YiE9PWEmJihudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIixFLCJsYXllckNoYW5nZWQiKSx0aGlzLmpyPWEsdGhpcy5qKCJsYXllckNoYW5nZWQiLGIsYSkpfSk7dC5BKEUse3ljOiJpc1RlbXBvcmFyeSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmxvP3RoaXMubG8ueWM6ITF9KTtmdW5jdGlvbiB2bShhKXt2YXIgYj1hLmg7bnVsbCE9PWImJih4aShiKSwwIT09KGEuVyYxNjM4NCkhPT0hMCYmKGEuV3w9MTYzODQsYi50ZSgpKSl9ZnVuY3Rpb24gUWgoYSl7MCE9PShhLlcmMTYzODQpIT09ITEmJihhLnVwZGF0ZUFkb3JubWVudHMoKSxhLlcmPS0xNjM4NSxhPWEuaCxudWxsIT09YSYmKGEudmU9ITApKX10LmcoRSwibG9jYXRpb24iLEUucHJvdG90eXBlLmxvY2F0aW9uKTsNCnQuZGVmaW5lUHJvcGVydHkoRSx7bG9jYXRpb246ImxvY2F0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ZZ30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5ZZztpZighKGIuTShhKXx8dGhpcyBpbnN0YW5jZW9mIFYpKXtlJiZ0LmwoYSx3LEUsImxvY2F0aW9uIik7YT1hLlooKTt2YXIgYz10aGlzLmg7dGhpcy5ZZz1hO2lmKCExPT09UGkodGhpcykpe3ZhciBkPXRoaXMuTWEsZj1hLngtYi54LGc9YS55LWIueSxoPWQuY29weSgpO2QucChoLngrZixoLnkrZyk7TGsodGhpcywhMCk7IWQuTShoKSYmYyYmdGhpcy5qKCJwb3NpdGlvbiIsaCxkKX10aGlzLmooImxvY2F0aW9uIixiLGEpfX0pO2Z1bmN0aW9uIExrKGEsYil7aWYoITE9PT1RaShhKSl7dmFyIGM9YS5oO251bGwhPT1jJiYoYS5RYSgpJiZjLmZnLmFkZChhKSxhIGluc3RhbmNlb2YgUyYmIWMuamEuc2ImJmEud2YoKSxifHxjLnRlKCkpO3dtKGEsITApfX0NCmZ1bmN0aW9uIHhtKGEpe2lmKCExIT09UWkoYSkpe3ZhciBiPWEucG9zaXRpb24sYz1hLmxvY2F0aW9uO2MuTigpJiZiLk4oKXx8KHltKGEsYixjKSxtayhhKSk7dmFyIGI9YS5NYSxjPWEuY2MsZD1jLmNvcHkoKTtjLkxhKCk7Yy54PWIueDtjLnk9Yi55O2MuZnJlZXplKCk7bmsoYSxkLGMpO3dtKGEsITEpfX10LkEoRSx7a2M6ImxvY2F0aW9uT2JqZWN0In0sZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5Nayl7dmFyIGE9dGhpcy5heDt2b2lkIDAhPT1hJiZudWxsIT09YSYmIiIhPT1hPyhhPXRoaXMub2UoYSksdGhpcy5Naz1udWxsIT09YT9hOnRoaXMpOnRoaXMuTWs9dGhpcyBpbnN0YW5jZW9mIEplJiZ0aGlzLmRhIT09dmcmJm51bGwhPT10aGlzLkpiP3RoaXMuSmI6dGhpc31yZXR1cm4gdGhpcy5Nay52aXNpYmxlP3RoaXMuTWs6dGhpc30pO3QuZyhFLCJtaW5Mb2NhdGlvbiIsRS5wcm90b3R5cGUuQUYpOw0KdC5kZWZpbmVQcm9wZXJ0eShFLHtBRjoibWluTG9jYXRpb24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkFyfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkFyO2IuTShhKXx8KGUmJnQubChhLHcsRSwibWluTG9jYXRpb24iKSx0aGlzLkFyPWE9YS5aKCksdGhpcy5qKCJtaW5Mb2NhdGlvbiIsYixhKSl9KTt0LmcoRSwibWF4TG9jYXRpb24iLEUucHJvdG90eXBlLnVGKTt0LmRlZmluZVByb3BlcnR5KEUse3VGOiJtYXhMb2NhdGlvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudHI7Yi5NKGEpfHwoZSYmdC5sKGEsdyxFLCJtYXhMb2NhdGlvbiIpLHRoaXMudHI9YT1hLlooKSx0aGlzLmooIm1heExvY2F0aW9uIixiLGEpKX0pO3QuZyhFLCJsb2NhdGlvbk9iamVjdE5hbWUiLEUucHJvdG90eXBlLmF4KTsNCnQuZGVmaW5lUHJvcGVydHkoRSx7YXg6ImxvY2F0aW9uT2JqZWN0TmFtZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucXI7YiE9PWEmJihlJiZ0LmkoYSwic3RyaW5nIixFLCJsb2NhdGlvbk9iamVjdE5hbWUiKSx0aGlzLnFyPWEsdGhpcy5Naz1udWxsLERrKHRoaXMpLHRoaXMuaigibG9jYXRpb25PYmplY3ROYW1lIixiLGEpKX0pO3QuZyhFLCJsb2NhdGlvblNwb3QiLEUucHJvdG90eXBlLmJmKTsNCnQuZGVmaW5lUHJvcGVydHkoRSx7YmY6ImxvY2F0aW9uU3BvdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucnJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucnI7Yi5NKGEpfHwoZSYmKHQubChhLEksRSwibG9jYXRpb25TcG90IiksYS52ZCgpfHx0Lm0oIlBhcnQubG9jYXRpb25TcG90IG11c3QgYmUgYSBzcGVjaWZpYyBTcG90IHZhbHVlLCBub3Q6ICIrYSkpLHRoaXMucnI9YT1hLlooKSxEayh0aGlzKSx0aGlzLmooImxvY2F0aW9uU3BvdCIsYixhKSl9KTtFLnByb3RvdHlwZS5tb3ZlPUUucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oYSl7dGhpcy5wb3NpdGlvbj1hfTtFLnByb3RvdHlwZS5tb3ZlVG89RS5wcm90b3R5cGUubW92ZVRvPWZ1bmN0aW9uKGEsYil7dmFyIGM9dC5sYyhhLGIpO3RoaXMubW92ZShjKTt0LkIoYyl9Ow0KRS5wcm90b3R5cGUuaXNWaXNpYmxlPUUucHJvdG90eXBlLlFhPWZ1bmN0aW9uKCl7aWYoIXRoaXMudmlzaWJsZSlyZXR1cm4hMTt2YXIgYT10aGlzLmxheWVyO2lmKG51bGwhPT1hJiYhYS52aXNpYmxlKXJldHVybiExO2E9dGhpcy5nYjtpZighKG51bGw9PT1hfHxhLllkJiZhLlFhKCkpKXJldHVybiExO2lmKHRoaXMgaW5zdGFuY2VvZiBTKXthPXRoaXMuZUEoKTtpZihudWxsIT09YSYmIWEuUWMpcmV0dXJuITE7YT10aGlzLiRkO2lmKG51bGwhPT1hKXJldHVybiBhLlFhKCl9ZWxzZSBpZih0aGlzIGluc3RhbmNlb2YgVil7dmFyIGI9ITAsYz10aGlzLmg7bnVsbCE9PWMmJihiPWMucGQpO2M9dGhpcy5hYTtpZihudWxsIT09Yyl7aWYodGhpcy5GYyYmYiYmIWMuUWMpcmV0dXJuITE7Yz1jLmZpbmRWaXNpYmxlTm9kZSgpO2lmKG51bGw9PT1jfHxjPT09YSlyZXR1cm4hMX1jPXRoaXMuY2E7aWYobnVsbCE9PWMpe2lmKHRoaXMuRmMmJiFiJiYhYy5RYylyZXR1cm4hMTtiPWMuZmluZFZpc2libGVOb2RlKCk7DQppZihudWxsPT09Ynx8Yj09PWEpcmV0dXJuITF9fXJldHVybiEwfTtFLnByb3RvdHlwZS5kZj1mdW5jdGlvbihhKXthPyh0aGlzLkooNCksdm0odGhpcyksdGhpcy5rYSgpLGE9dGhpcy5oLG51bGwhPT1hJiZhLmZnLmFkZCh0aGlzKSk6KHRoaXMuSig4KSx0aGlzLlBmKCkpfTsNCkUucHJvdG90eXBlLmZpbmRPYmplY3Q9RS5wcm90b3R5cGUub2U9ZnVuY3Rpb24oYSl7aWYodGhpcy5uYW1lPT09YSlyZXR1cm4gdGhpcztudWxsPT09dGhpcy5HaiYmKHRoaXMuR2o9e30pO3ZhciBiPXRoaXMuR2o7aWYodm9pZCAwIT09YlthXSlyZXR1cm4gYlthXTtmb3IodmFyIGM9dGhpcy54YS5uLGQ9Yy5sZW5ndGgsZj0wO2Y8ZDtmKyspe3ZhciBnPWNbZl07aWYoZy5uYW1lPT09YSlyZXR1cm4gYlthXT1nO2lmKGcgaW5zdGFuY2VvZiB5KWlmKG51bGw9PT1nLnlpJiZudWxsPT09Zy5oZyl7aWYoZz1nLm9lKGEpLG51bGwhPT1nKXJldHVybiBiW2FdPWd9ZWxzZSBpZihWbChnKSYmKGc9Zy54YS4kYSgpLG51bGwhPT1nJiZnLm5hbWU9PT1hKSlyZXR1cm4gYlthXT1nfXJldHVybiBiW2FdPW51bGx9Ow0KZnVuY3Rpb24gem0oYSxiLGMsZCl7dm9pZCAwPT09ZCYmKGQ9bmV3IHcpO2MuR2UoKSYmKGM9S2IpO3ZhciBmPWIuUmE7ZC5wKGYud2lkdGgqYy54K2Mub2Zmc2V0WCxmLmhlaWdodCpjLnkrYy5vZmZzZXRZKTtpZihudWxsPT09Ynx8Yj09PWEpcmV0dXJuIGQ7Yi50cmFuc2Zvcm0uVGEoZCk7Zm9yKGI9Yi5pYTtudWxsIT09YiYmYiE9PWE7KWIudHJhbnNmb3JtLlRhKGQpLGI9Yi5pYTthLkxrLlRhKGQpO2Qub2Zmc2V0KC1hLldjLngsLWEuV2MueSk7cmV0dXJuIGR9RS5wcm90b3R5cGUuZW5zdXJlQm91bmRzPUUucHJvdG90eXBlLnNmPWZ1bmN0aW9uKCl7aGgodGhpcyxJbmZpbml0eSxJbmZpbml0eSk7dGhpcy5MYygpfTsNCmZ1bmN0aW9uIFRoKGEsYixjKXtjPXZvaWQgMD09PWM/YS5uSDpjO3ZhciBkO2lzTmFOKGEuRGopJiYoYS5Eaj1XbChhKSk7ZD1hLkRqO3ZhciBmPTIqZDtpZighYS5nailyZXR1cm4gYy5wKGIueC0xLWQsYi55LTEtZCxiLndpZHRoKzIrZixiLmhlaWdodCsyK2YpLGM7ZD1iLng7dmFyIGY9Yi55LGc9Yi53aWR0aDtiPWIuaGVpZ2h0O3ZhciBoPWEuc2hhZG93Qmx1cjthPWEucUc7Zys9aDtiKz1oO2QtPWgvMjtmLT1oLzI7MDxhLng/Zys9YS54OihkKz1hLngsZy09YS54KTswPGEueT9iKz1hLnk6KGYrPWEueSxiLT1hLnkpO2MucChkLTEsZi0xLGcrMixiKzIpO3JldHVybiBjfWFhPUUucHJvdG90eXBlOw0KYWEuTGM9ZnVuY3Rpb24oKXttayh0aGlzKTtpZighMT09PVBpKHRoaXMpKXhtKHRoaXMpO2Vsc2V7dmFyIGE9dC5HZigpO2EuYXNzaWduKHRoaXMuY2MpO0FrKHRoaXMpO3RoaXMuY2MuTGEoKTt2YXIgYj1QaCh0aGlzKTt0aGlzLlVqKDAsMCx0aGlzLldjLndpZHRoLHRoaXMuV2MuaGVpZ2h0KTt2YXIgYz10aGlzLnBvc2l0aW9uO3ltKHRoaXMsYyx0aGlzLmxvY2F0aW9uKTt2YXIgZD10aGlzLmNjO2QueD1jLng7ZC55PWMueTtkLmZyZWV6ZSgpO21rKHRoaXMpO25rKHRoaXMsYSxkKTthLk0oZCk/dGhpcy5EZihiKTohdGhpcy5MZCgpfHxILkkoYS53aWR0aCxkLndpZHRoKSYmSC5JKGEuaGVpZ2h0LGQuaGVpZ2h0KXx8MDw9dGhpcy5EQyYmdGhpcy5KKDE2KTt0LmhjKGEpO3dtKHRoaXMsITEpfX07DQphYS5vRz1mdW5jdGlvbihhLGIpe2lmKCFhLk4oKXx8dGhpcyBpbnN0YW5jZW9mIFYpcmV0dXJuITE7aWYodGhpcy5oJiYhKHRoaXMgaW5zdGFuY2VvZiBKZSkpe3ZhciBjPXRoaXMuaC5saTtjLnNkJiZGaChjLHRoaXMsYi5jb3B5KCksYS5jb3B5KCkpfXZhciBjPXRoaXMuWWcsZD1jLmNvcHkoKTshMT09PVBpKHRoaXMpPyhjLnAoYy54KyhhLngtdGhpcy5NYS54KSxjLnkrKGEueS10aGlzLk1hLnkpKSx0aGlzLk1hPWEsTGsodGhpcywhMCksbWsodGhpcykseG0odGhpcyksYy5NKGQpfHx0aGlzLmooImxvY2F0aW9uIixkLGMpKToodGhpcy5NYT1hLGMucChOYU4sTmFOKSk7cmV0dXJuITB9O2FhLnBHPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5ZZzshMT09PVBpKHRoaXMpPyh0aGlzLllnLnAoYy54K2EtdGhpcy5NYS54LGMueStiLXRoaXMuTWEueSksdGhpcy5NYS5wKGEsYiksTGsodGhpcywhMSksbWsodGhpcykpOihjLnAoTmFOLE5hTiksdGhpcy5NYS5wKGEsYikpfTsNCmZ1bmN0aW9uIHltKGEsYixjKXt2YXIgZD1OYU4sZj1OYU4sZz10LksoKSxoPWEuYmYsaz1hLmtjO2guR2UoKSYmdC5tKCJkZXRlcm1pbmVPZmZzZXQ6IFBhcnQncyBsb2NhdGlvblNwb3QgbXVzdCBiZSByZWFsOiAiK2gudG9TdHJpbmcoKSk7dmFyIGw9ay5SYSxkPTA7ay5mYiYmKGQ9ay5iaCk7Zy5QdCgwLDAsbC53aWR0aCtkLGwuaGVpZ2h0K2QsaCk7aWYoayE9PWEpZm9yKGsuZmImJmcub2Zmc2V0KC1kLzIsLWQvMiksay50cmFuc2Zvcm0uVGEoZyksaD1rLmlhO251bGwhPT1oJiZoIT09YTspaC50cmFuc2Zvcm0uVGEoZyksaD1oLmlhO2EuTGsuVGEoZyk7Zy5vZmZzZXQoLWEuV2MueCwtYS5XYy55KTtoPWEuaDtjLk4oKT8oaz1iLngsbD1iLnksZD1jLngtZy54LGY9Yy55LWcueSxiLnAoZCxmKSxjPSExLG51bGwhPT1oJiYoZD1oLmxpLGQueGo/Yz0hMDohZC5zZHx8YSBpbnN0YW5jZW9mIEplfHxGaChkLGEsbmV3IHcoayxsKSxiKSxjfHxiLng9PT1rJiZiLnk9PT1sfHwoZD1oLldhLA0KaC5XYT0hMCxhLmooInBvc2l0aW9uIixuZXcgdyhrLGwpLGIpLGguV2E9ZCkpKTpiLk4oKSYmKGQ9Yi54LGY9Yi55LGI9Yy5jb3B5KCksYy5wKGQrZy54LGYrZy55KSxjLk0oYil8fG51bGw9PT1ofHwoZD1oLldhLGguV2E9ITAsYS5qKCJsb2NhdGlvbiIsYixjKSxoLldhPWQpKTt0LkIoZyl9ZnVuY3Rpb24gYmooYSxiLGMpe3NrKGEsITEpO2EgaW5zdGFuY2VvZiBTJiZTaihjLGEpO2EubGF5ZXIueWN8fGJ8fGMuT2MoKTtiPWEuY2M7dmFyIGQ9Yy54YjtkLk4oKT8oUGgoYSk/ZWIoYixkKXx8KGEuRGYoITEpLHZtKGEpKTpiLlRmKGQpJiZhLkRmKCEwKSxhLnVwZGF0ZUFkb3JubWVudHMoKSk6Yy5Iaz0hMH1hYS5ubD1mdW5jdGlvbigpe3JldHVybiEwfTsNCmZ1bmN0aW9uIFJoKGEsYil7aWYoYS52aXNpYmxlKXt2YXIgYz1hLmNjO2lmKDAhPT1jLndpZHRoJiYwIT09Yy5oZWlnaHQmJiFpc05hTihjLngpJiYhaXNOYU4oYy55KSl7dmFyIGQ9YS50cmFuc2Zvcm0sZj1hLmlhLGc9YS5qaztnLnJlc2V0KCk7bnVsbCE9PWYmJihmLkhmKCk/Zy5tdWx0aXBseShmLm1lKTpudWxsIT09Zi5pYSYmZy5tdWx0aXBseShmLmlhLm1lKSk7Zy5tdWx0aXBseShhLm1kKTtudWxsIT09YS50YyYmKHhrKGEsYixhLnRjLCEwLCEwKSxiLmZpbGxSZWN0KGMueCxjLnksYy53aWR0aCxjLmhlaWdodCkpO251bGw9PT1hLnRjJiZudWxsPT09YS5MYiYmKGIuZmlsbFN0eWxlPSJyZ2JhKDAsMCwwLDAuNCkiLGIuZmlsbFJlY3QoYy54LGMueSxjLndpZHRoLGMuaGVpZ2h0KSk7bnVsbCE9PWEuTGImJihkLnB0KCl8fGIudHJhbnNmb3JtKGQubTExLGQubTEyLGQubTIxLGQubTIyLGQuZHgsZC5keSksZj1hLlJhLGM9Zi53aWR0aCxmPWYuaGVpZ2h0LHhrKGEsYixhLkxiLA0KITApLGIuZmlsbFJlY3QoMCwwLGMrMCxmKzApLGQucHQoKXx8KGM9MS8oZC5tMTEqZC5tMjItZC5tMTIqZC5tMjEpLGIudHJhbnNmb3JtKGQubTIyKmMsLWQubTEyKmMsLWQubTIxKmMsZC5tMTEqYyxjKihkLm0yMSpkLmR5LWQubTIyKmQuZHgpLGMqKGQubTEyKmQuZHgtZC5tMTEqZC5keSkpKSl9fX1hYS5MZD1mdW5jdGlvbigpe3JldHVybiEwfTt0LmcoRSwiY2F0ZWdvcnkiLEUucHJvdG90eXBlLlpjKTsNCnQuZGVmaW5lUHJvcGVydHkoRSx7WmM6ImNhdGVnb3J5In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaH0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zaDtpZihiIT09YSl7dC5pKGEsInN0cmluZyIsRSwiY2F0ZWdvcnkiKTt0aGlzLnNoPWE7dGhpcy5qKCJjYXRlZ29yeSIsYixhKTt2YXIgYz10aGlzLmgsZD10aGlzLmRhdGE7aWYobnVsbCE9PWMmJm51bGwhPT1kKXt2YXIgZj1jLmJhO3RoaXMgaW5zdGFuY2VvZiBWPyhmIGluc3RhbmNlb2YgUD9mLm1HKGQsYSk6ZiBpbnN0YW5jZW9mIEtkJiZmLlBKKGQsYSksYz1jLmZpbmRUZW1wbGF0ZUZvckxpbmtEYXRhKGQsYSksYyBpbnN0YW5jZW9mIFYmJihMZShjKSxjPWMuY29weSgpLGMgaW5zdGFuY2VvZiBWJiZBbSh0aGlzLGMsYixhKSkpOnRoaXMgaW5zdGFuY2VvZiBKZXx8KG51bGwhPT1mJiZmLnR4KGQsYSksYz1jLmZpbmRUZW1wbGF0ZUZvck5vZGVEYXRhKGQsYSksYyBpbnN0YW5jZW9mIEUmJihMZShjKSxjPWMuY29weSgpLGMgaW5zdGFuY2VvZg0KRSYmIShjIGluc3RhbmNlb2YgVikmJihjLmxvY2F0aW9uPXRoaXMubG9jYXRpb24sQW0odGhpcyxjLGIsYSkpKSl9dGhpcyBpbnN0YW5jZW9mIEplJiYoYT10aGlzLlhoLG51bGwhPT1hJiYoYz1hLmtpLG51bGwhPT1jJiZjLnJlbW92ZShiKSxhLlZrKHRoaXMuc2gsdGhpcykpKX19KTsNCmZ1bmN0aW9uIEFtKGEsYixjLGQpe2IuY29uc3RydWN0b3I9PT1hLmNvbnN0cnVjdG9yfHx0LlNHfHwodC5TRz0hMCx0LnRyYWNlKCdTaG91bGQgbm90IGNoYW5nZSB0aGUgY2xhc3Mgb2YgdGhlIFBhcnQgd2hlbiBjaGFuZ2luZyBjYXRlZ29yeSBmcm9tICInK2MrJyIgdG8gIicrZCsnIicpLHQudHJhY2UoIiAgT2xkIGNsYXNzOiAiK3QueGcoYSkrIiwgbmV3IGNsYXNzOiAiK3QueGcoYikrIiwgcGFydDogIithLnRvU3RyaW5nKCkpKTthLlBmKCk7dmFyIGY9YS5kYXRhO2M9YS5hZjt2YXIgZz1hLmViLGg9YS56ZyxrPSEwLGw9ITAsbT0hMTthIGluc3RhbmNlb2YgUyYmKGs9YS5kaSxsPWEuUWMsbT1hLnBuKTtiLlpoKGEpO2IuY2xvbmVQcm90ZWN0ZWQoYSk7YS5zaD1kO2EuZmEoKTthLmthKCk7Yj1hLmg7ZD0hMDtudWxsIT09YiYmKGQ9Yi5XYSxiLldhPSEwKTthLk1sPWY7bnVsbCE9PWYmJmEuUWIoKTtudWxsIT09YiYmKGIuV2E9ZCk7Zj1hLmFmO2YhPT1jJiYoYS5Kaz1jLGEuYWY9DQpmKTthIGluc3RhbmNlb2YgUyYmKGEuZGk9ayxhLlFjPWwsYS5wbj1tLGEuTGQoKSYmYS5KKDY0KSk7YS5lYj1nO2Euemc9aH1FLnByb3RvdHlwZS5jYW5Db3B5PWZ1bmN0aW9uKCl7aWYoIXRoaXMuaEUpcmV0dXJuITE7dmFyIGE9dGhpcy5sYXllcjtpZihudWxsPT09YSlyZXR1cm4hMDtpZighYS5TaSlyZXR1cm4hMTthPWEuaDtyZXR1cm4gbnVsbD09PWE/ITA6YS5TaT8hMDohMX07RS5wcm90b3R5cGUuY2FuRGVsZXRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMucUUpcmV0dXJuITE7dmFyIGE9dGhpcy5sYXllcjtpZihudWxsPT09YSlyZXR1cm4hMDtpZighYS5ZaylyZXR1cm4hMTthPWEuaDtyZXR1cm4gbnVsbD09PWE/ITA6YS5Zaz8hMDohMX07DQpFLnByb3RvdHlwZS5jYW5FZGl0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuQUcpcmV0dXJuITE7dmFyIGE9dGhpcy5sYXllcjtpZihudWxsPT09YSlyZXR1cm4hMDtpZighYS5RbylyZXR1cm4hMTthPWEuaDtyZXR1cm4gbnVsbD09PWE/ITA6YS5Rbz8hMDohMX07RS5wcm90b3R5cGUuY2FuR3JvdXA9ZnVuY3Rpb24oKXtpZighdGhpcy5QRSlyZXR1cm4hMTt2YXIgYT10aGlzLmxheWVyO2lmKG51bGw9PT1hKXJldHVybiEwO2lmKCFhLk1vKXJldHVybiExO2E9YS5oO3JldHVybiBudWxsPT09YT8hMDphLk1vPyEwOiExfTtFLnByb3RvdHlwZS5jYW5Nb3ZlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuREYpcmV0dXJuITE7dmFyIGE9dGhpcy5sYXllcjtpZihudWxsPT09YSlyZXR1cm4hMDtpZighYS5TailyZXR1cm4hMTthPWEuaDtyZXR1cm4gbnVsbD09PWE/ITA6YS5Taj8hMDohMX07DQpFLnByb3RvdHlwZS5jYW5SZXNoYXBlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuVEYpcmV0dXJuITE7dmFyIGE9dGhpcy5sYXllcjtpZihudWxsPT09YSlyZXR1cm4hMDtpZighYS5ObylyZXR1cm4hMTthPWEuaDtyZXR1cm4gbnVsbD09PWE/ITA6YS5Obz8hMDohMX07RS5wcm90b3R5cGUuY2FuUmVzaXplPWZ1bmN0aW9uKCl7aWYoIXRoaXMuVUYpcmV0dXJuITE7dmFyIGE9dGhpcy5sYXllcjtpZihudWxsPT09YSlyZXR1cm4hMDtpZighYS5PbylyZXR1cm4hMTthPWEuaDtyZXR1cm4gbnVsbD09PWE/ITA6YS5Pbz8hMDohMX07RS5wcm90b3R5cGUuY2FuUm90YXRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuJEYpcmV0dXJuITE7dmFyIGE9dGhpcy5sYXllcjtpZihudWxsPT09YSlyZXR1cm4hMDtpZighYS5QbylyZXR1cm4hMTthPWEuaDtyZXR1cm4gbnVsbD09PWE/ITA6YS5Qbz8hMDohMX07DQpFLnByb3RvdHlwZS5jYW5TZWxlY3Q9ZnVuY3Rpb24oKXtpZighdGhpcy52bClyZXR1cm4hMTt2YXIgYT10aGlzLmxheWVyO2lmKG51bGw9PT1hKXJldHVybiEwO2lmKCFhLlBlKXJldHVybiExO2E9YS5oO3JldHVybiBudWxsPT09YT8hMDphLlBlPyEwOiExfTt0LmcoRSwiY29weWFibGUiLEUucHJvdG90eXBlLmhFKTt0LmRlZmluZVByb3BlcnR5KEUse2hFOiJjb3B5YWJsZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIDAhPT0odGhpcy5XJjEpfSxmdW5jdGlvbihhKXt2YXIgYj0wIT09KHRoaXMuVyYxKTtiIT09YSYmKGUmJnQuaShhLCJib29sZWFuIixFLCJjb3B5YWJsZSIpLHRoaXMuV149MSx0aGlzLmooImNvcHlhYmxlIixiLGEpKX0pO3QuZyhFLCJkZWxldGFibGUiLEUucHJvdG90eXBlLnFFKTsNCnQuZGVmaW5lUHJvcGVydHkoRSx7cUU6ImRlbGV0YWJsZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIDAhPT0odGhpcy5XJjIpfSxmdW5jdGlvbihhKXt2YXIgYj0wIT09KHRoaXMuVyYyKTtiIT09YSYmKGUmJnQuaShhLCJib29sZWFuIixFLCJkZWxldGFibGUiKSx0aGlzLldePTIsdGhpcy5qKCJkZWxldGFibGUiLGIsYSkpfSk7dC5nKEUsInRleHRFZGl0YWJsZSIsRS5wcm90b3R5cGUuQUcpO3QuZGVmaW5lUHJvcGVydHkoRSx7QUc6InRleHRFZGl0YWJsZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIDAhPT0odGhpcy5XJjQpfSxmdW5jdGlvbihhKXt2YXIgYj0wIT09KHRoaXMuVyY0KTtiIT09YSYmKGUmJnQuaShhLCJib29sZWFuIixFLCJ0ZXh0RWRpdGFibGUiKSx0aGlzLldePTQsdGhpcy5qKCJ0ZXh0RWRpdGFibGUiLGIsYSksdGhpcy51cGRhdGVBZG9ybm1lbnRzKCkpfSk7dC5nKEUsImdyb3VwYWJsZSIsRS5wcm90b3R5cGUuUEUpOw0KdC5kZWZpbmVQcm9wZXJ0eShFLHtQRToiZ3JvdXBhYmxlIn0sZnVuY3Rpb24oKXtyZXR1cm4gMCE9PSh0aGlzLlcmOCl9LGZ1bmN0aW9uKGEpe3ZhciBiPTAhPT0odGhpcy5XJjgpO2IhPT1hJiYoZSYmdC5pKGEsImJvb2xlYW4iLEUsImdyb3VwYWJsZSIpLHRoaXMuV149OCx0aGlzLmooImdyb3VwYWJsZSIsYixhKSl9KTt0LmcoRSwibW92YWJsZSIsRS5wcm90b3R5cGUuREYpO3QuZGVmaW5lUHJvcGVydHkoRSx7REY6Im1vdmFibGUifSxmdW5jdGlvbigpe3JldHVybiAwIT09KHRoaXMuVyYxNil9LGZ1bmN0aW9uKGEpe3ZhciBiPTAhPT0odGhpcy5XJjE2KTtiIT09YSYmKGUmJnQuaShhLCJib29sZWFuIixFLCJtb3ZhYmxlIiksdGhpcy5XXj0xNix0aGlzLmooIm1vdmFibGUiLGIsYSkpfSk7dC5nKEUsInNlbGVjdGlvbkFkb3JuZWQiLEUucHJvdG90eXBlLmlHKTsNCnQuZGVmaW5lUHJvcGVydHkoRSx7aUc6InNlbGVjdGlvbkFkb3JuZWQifSxmdW5jdGlvbigpe3JldHVybiAwIT09KHRoaXMuVyYzMil9LGZ1bmN0aW9uKGEpe3ZhciBiPTAhPT0odGhpcy5XJjMyKTtiIT09YSYmKGUmJnQuaShhLCJib29sZWFuIixFLCJzZWxlY3Rpb25BZG9ybmVkIiksdGhpcy5XXj0zMix0aGlzLmooInNlbGVjdGlvbkFkb3JuZWQiLGIsYSksdGhpcy51cGRhdGVBZG9ybm1lbnRzKCkpfSk7dC5nKEUsImlzSW5Eb2N1bWVudEJvdW5kcyIsRS5wcm90b3R5cGUudkEpO3QuZGVmaW5lUHJvcGVydHkoRSx7dkE6ImlzSW5Eb2N1bWVudEJvdW5kcyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIDAhPT0odGhpcy5XJjY0KX0sZnVuY3Rpb24oYSl7dmFyIGI9MCE9PSh0aGlzLlcmNjQpO2IhPT1hJiYoZSYmdC5pKGEsImJvb2xlYW4iLEUsImlzSW5Eb2N1bWVudEJvdW5kcyIpLHRoaXMuV149NjQsdGhpcy5qKCJpc0luRG9jdW1lbnRCb3VuZHMiLGIsYSkpfSk7DQp0LmcoRSwiaXNMYXlvdXRQb3NpdGlvbmVkIixFLnByb3RvdHlwZS54QSk7dC5kZWZpbmVQcm9wZXJ0eShFLHt4QToiaXNMYXlvdXRQb3NpdGlvbmVkIn0sZnVuY3Rpb24oKXtyZXR1cm4gMCE9PSh0aGlzLlcmMTI4KX0sZnVuY3Rpb24oYSl7dmFyIGI9MCE9PSh0aGlzLlcmMTI4KTtiIT09YSYmKGUmJnQuaShhLCJib29sZWFuIixFLCJpc0xheW91dFBvc2l0aW9uZWQiKSx0aGlzLldePTEyOCx0aGlzLmooImlzTGF5b3V0UG9zaXRpb25lZCIsYixhKSx0aGlzLkooYT80OjgpKX0pO3QuZyhFLCJzZWxlY3RhYmxlIixFLnByb3RvdHlwZS52bCk7dC5kZWZpbmVQcm9wZXJ0eShFLHt2bDoic2VsZWN0YWJsZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIDAhPT0odGhpcy5XJjI1Nil9LGZ1bmN0aW9uKGEpe3ZhciBiPTAhPT0odGhpcy5XJjI1Nik7YiE9PWEmJihlJiZ0LmkoYSwiYm9vbGVhbiIsRSwic2VsZWN0YWJsZSIpLHRoaXMuV149MjU2LHRoaXMuaigic2VsZWN0YWJsZSIsYixhKSx0aGlzLnVwZGF0ZUFkb3JubWVudHMoKSl9KTsNCnQuZyhFLCJyZXNoYXBhYmxlIixFLnByb3RvdHlwZS5URik7dC5kZWZpbmVQcm9wZXJ0eShFLHtURjoicmVzaGFwYWJsZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIDAhPT0odGhpcy5XJjUxMil9LGZ1bmN0aW9uKGEpe3ZhciBiPTAhPT0odGhpcy5XJjUxMik7YiE9PWEmJihlJiZ0LmkoYSwiYm9vbGVhbiIsRSwicmVzaGFwYWJsZSIpLHRoaXMuV149NTEyLHRoaXMuaigicmVzaGFwYWJsZSIsYixhKSx0aGlzLnVwZGF0ZUFkb3JubWVudHMoKSl9KTt0LmcoRSwicmVzaXphYmxlIixFLnByb3RvdHlwZS5VRik7dC5kZWZpbmVQcm9wZXJ0eShFLHtVRjoicmVzaXphYmxlIn0sZnVuY3Rpb24oKXtyZXR1cm4gMCE9PSh0aGlzLlcmMTAyNCl9LGZ1bmN0aW9uKGEpe3ZhciBiPTAhPT0odGhpcy5XJjEwMjQpO2IhPT1hJiYoZSYmdC5pKGEsImJvb2xlYW4iLEUsInJlc2l6YWJsZSIpLHRoaXMuV149MTAyNCx0aGlzLmooInJlc2l6YWJsZSIsYixhKSx0aGlzLnVwZGF0ZUFkb3JubWVudHMoKSl9KTsNCnQuZyhFLCJyb3RhdGFibGUiLEUucHJvdG90eXBlLiRGKTt0LmRlZmluZVByb3BlcnR5KEUseyRGOiJyb3RhdGFibGUifSxmdW5jdGlvbigpe3JldHVybiAwIT09KHRoaXMuVyYyMDQ4KX0sZnVuY3Rpb24oYSl7dmFyIGI9MCE9PSh0aGlzLlcmMjA0OCk7YiE9PWEmJihlJiZ0LmkoYSwiYm9vbGVhbiIsRSwicm90YXRhYmxlIiksdGhpcy5XXj0yMDQ4LHRoaXMuaigicm90YXRhYmxlIixiLGEpLHRoaXMudXBkYXRlQWRvcm5tZW50cygpKX0pO3QuZyhFLCJpc1NlbGVjdGVkIixFLnByb3RvdHlwZS5lYik7DQp0LmRlZmluZVByb3BlcnR5KEUse2ViOiJpc1NlbGVjdGVkIn0sZnVuY3Rpb24oKXtyZXR1cm4gMCE9PSh0aGlzLlcmNDA5Nil9LGZ1bmN0aW9uKGEpe3ZhciBiPTAhPT0odGhpcy5XJjQwOTYpO2lmKGIhPT1hKXtlJiZ0LmkoYSwiYm9vbGVhbiIsRSwiaXNTZWxlY3RlZCIpO3ZhciBjPXRoaXMuaDtpZighYXx8dGhpcy5jYW5TZWxlY3QoKSYmIShudWxsIT09YyYmYy5zZWxlY3Rpb24uY291bnQ+PWMudkYpKXt0aGlzLldePTQwOTY7dmFyIGQ9ITE7aWYobnVsbCE9PWMpe2Q9Yy5XYTtjLldhPSEwO3ZhciBmPWMuc2VsZWN0aW9uO2YuTGEoKTthP2YuYWRkKHRoaXMpOmYucmVtb3ZlKHRoaXMpO2YuZnJlZXplKCl9dGhpcy5qKCJpc1NlbGVjdGVkIixiLGEpO3ZtKHRoaXMpO2E9dGhpcy5rRztudWxsIT09YSYmYSh0aGlzKTtudWxsIT09YyYmKGMudGUoKSxjLldhPWQpfX19KTt0LmcoRSwiaXNIaWdobGlnaHRlZCIsRS5wcm90b3R5cGUuemcpOw0KdC5kZWZpbmVQcm9wZXJ0eShFLHt6ZzoiaXNIaWdobGlnaHRlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIDAhPT0odGhpcy5XJjUyNDI4OCl9LGZ1bmN0aW9uKGEpe3ZhciBiPTAhPT0odGhpcy5XJjUyNDI4OCk7aWYoYiE9PWEpe2UmJnQuaShhLCJib29sZWFuIixFLCJpc0hpZ2hsaWdodGVkIik7dGhpcy5XXj01MjQyODg7dmFyIGM9dGhpcy5oO251bGwhPT1jJiYoYz1jLkx3LGMuTGEoKSxhP2MuYWRkKHRoaXMpOmMucmVtb3ZlKHRoaXMpLGMuZnJlZXplKCkpO3RoaXMuaigiaXNIaWdobGlnaHRlZCIsYixhKTt0aGlzLmthKCl9fSk7dC5nKEUsImlzU2hhZG93ZWQiLEUucHJvdG90eXBlLmdqKTsNCnQuZGVmaW5lUHJvcGVydHkoRSx7Z2o6ImlzU2hhZG93ZWQifSxmdW5jdGlvbigpe3JldHVybiAwIT09KHRoaXMuVyY4MTkyKX0sZnVuY3Rpb24oYSl7dmFyIGI9MCE9PSh0aGlzLlcmODE5Mik7YiE9PWEmJihlJiZ0LmkoYSwiYm9vbGVhbiIsRSwiaXNTaGFkb3dlZCIpLHRoaXMuV149ODE5Mix0aGlzLmooImlzU2hhZG93ZWQiLGIsYSksdGhpcy5rYSgpKX0pO2Z1bmN0aW9uIFFpKGEpe3JldHVybiAwIT09KGEuVyYzMjc2OCl9ZnVuY3Rpb24gd20oYSxiKXthLlc9Yj9hLld8MzI3Njg6YS5XJi0zMjc2OX1mdW5jdGlvbiBzayhhLGIpe2EuVz1iP2EuV3w2NTUzNjphLlcmLTY1NTM3fWZ1bmN0aW9uIFBoKGEpe3JldHVybiAwIT09KGEuVyYxMzEwNzIpfUUucHJvdG90eXBlLkRmPWZ1bmN0aW9uKGEpe3RoaXMuVz1hP3RoaXMuV3wxMzEwNzI6dGhpcy5XJi0xMzEwNzN9O3QuZyhFLCJpc0FuaW1hdGVkIixFLnByb3RvdHlwZS5wQSk7DQp0LmRlZmluZVByb3BlcnR5KEUse3BBOiJpc0FuaW1hdGVkIn0sZnVuY3Rpb24oKXtyZXR1cm4gMCE9PSh0aGlzLlcmMjYyMTQ0KX0sZnVuY3Rpb24oYSl7dmFyIGI9MCE9PSh0aGlzLlcmMjYyMTQ0KTtiIT09YSYmKGUmJnQuaShhLCJib29sZWFuIixFLCJpc0FuaW1hdGVkIiksdGhpcy5XXj0yNjIxNDQsdGhpcy5qKCJpc0FuaW1hdGVkIixiLGEpKX0pO3QuZyhFLCJzZWxlY3Rpb25PYmplY3ROYW1lIixFLnByb3RvdHlwZS5zeCk7dC5kZWZpbmVQcm9wZXJ0eShFLHtzeDoic2VsZWN0aW9uT2JqZWN0TmFtZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua3N9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMua3M7YiE9PWEmJihlJiZ0LmkoYSwic3RyaW5nIixFLCJzZWxlY3Rpb25PYmplY3ROYW1lIiksdGhpcy5rcz1hLHRoaXMucm09bnVsbCx0aGlzLmooInNlbGVjdGlvbk9iamVjdE5hbWUiLGIsYSkpfSk7dC5nKEUsInNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlIixFLnByb3RvdHlwZS5qRyk7DQp0LmRlZmluZVByb3BlcnR5KEUse2pHOiJzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXN9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaXM7YiE9PWEmJihlJiZ0LmwoYSxKZSxFLCJzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSIpLHRoaXMgaW5zdGFuY2VvZiBWJiYoYS50eXBlPXZnKSx0aGlzLmlzPWEsdGhpcy5qKCJzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZSIsYixhKSl9KTt0LkEoRSx7TnQ6InNlbGVjdGlvbk9iamVjdCJ9LGZ1bmN0aW9uKCl7aWYobnVsbD09PXRoaXMucm0pe3ZhciBhPXRoaXMuc3g7bnVsbCE9PWEmJiIiIT09YT8oYT10aGlzLm9lKGEpLHRoaXMucm09bnVsbCE9PWE/YTp0aGlzKTp0aGlzIGluc3RhbmNlb2YgVj8oYT10aGlzLnBhdGgsdGhpcy5ybT1udWxsIT09YT9hOnRoaXMpOnRoaXMucm09dGhpc31yZXR1cm4gdGhpcy5ybX0pO3QuZyhFLCJzZWxlY3Rpb25DaGFuZ2VkIixFLnByb3RvdHlwZS5rRyk7DQp0LmRlZmluZVByb3BlcnR5KEUse2tHOiJzZWxlY3Rpb25DaGFuZ2VkIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qc30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5qcztiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLEUsInNlbGVjdGlvbkNoYW5nZWQiKSx0aGlzLmpzPWEsdGhpcy5qKCJzZWxlY3Rpb25DaGFuZ2VkIixiLGEpKX0pO3QuZyhFLCJyZXNpemVBZG9ybm1lbnRUZW1wbGF0ZSIsRS5wcm90b3R5cGUuVkYpO3QuZGVmaW5lUHJvcGVydHkoRSx7VkY6InJlc2l6ZUFkb3JubWVudFRlbXBsYXRlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Xcn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5XcjtiIT09YSYmKGUmJnQubChhLEplLEUsInJlc2l6ZUFkb3JubWVudFRlbXBsYXRlIiksdGhpcy5Xcj1hLHRoaXMuaigicmVzaXplQWRvcm5tZW50VGVtcGxhdGUiLGIsYSkpfSk7dC5nKEUsInJlc2l6ZU9iamVjdE5hbWUiLEUucHJvdG90eXBlLllGKTsNCnQuZGVmaW5lUHJvcGVydHkoRSx7WUY6InJlc2l6ZU9iamVjdE5hbWUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLllyfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLllyO2IhPT1hJiYoZSYmdC5pKGEsInN0cmluZyIsRSwicmVzaXplT2JqZWN0TmFtZSIpLHRoaXMuWXI9YSx0aGlzLnZvPW51bGwsdGhpcy5qKCJyZXNpemVPYmplY3ROYW1lIixiLGEpKX0pO3QuQShFLHtYRjoicmVzaXplT2JqZWN0In0sZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy52byl7dmFyIGE9dGhpcy5ZRjtudWxsIT09YSYmIiIhPT1hPyhhPXRoaXMub2UoYSksdGhpcy52bz1udWxsIT09YT9hOnRoaXMpOnRoaXMudm89dGhpc31yZXR1cm4gdGhpcy52b30pO3QuZyhFLCJyZXNpemVDZWxsU2l6ZSIsRS5wcm90b3R5cGUuV0YpOw0KdC5kZWZpbmVQcm9wZXJ0eShFLHtXRjoicmVzaXplQ2VsbFNpemUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlhyfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlhyO2IuTShhKXx8KGUmJnQubChhLGdhLEUsInJlc2l6ZUNlbGxTaXplIiksdGhpcy5Ycj1hPWEuWigpLHRoaXMuaigicmVzaXplQ2VsbFNpemUiLGIsYSkpfSk7dC5nKEUsInJvdGF0ZUFkb3JubWVudFRlbXBsYXRlIixFLnByb3RvdHlwZS5hRyk7dC5kZWZpbmVQcm9wZXJ0eShFLHthRzoicm90YXRlQWRvcm5tZW50VGVtcGxhdGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlpyfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlpyO2IhPT1hJiYoZSYmdC5sKGEsSmUsRSwicm90YXRlQWRvcm5tZW50VGVtcGxhdGUiKSx0aGlzLlpyPWEsdGhpcy5qKCJyb3RhdGVBZG9ybm1lbnRUZW1wbGF0ZSIsYixhKSl9KTt0LmcoRSwicm90YXRlT2JqZWN0TmFtZSIsRS5wcm90b3R5cGUuY0cpOw0KdC5kZWZpbmVQcm9wZXJ0eShFLHtjRzoicm90YXRlT2JqZWN0TmFtZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuJHI7YiE9PWEmJihlJiZ0LmkoYSwic3RyaW5nIixFLCJyb3RhdGVPYmplY3ROYW1lIiksdGhpcy4kcj1hLHRoaXMud289bnVsbCx0aGlzLmooInJvdGF0ZU9iamVjdE5hbWUiLGIsYSkpfSk7dC5BKEUse2JHOiJyb3RhdGVPYmplY3QifSxmdW5jdGlvbigpe2lmKG51bGw9PT10aGlzLndvKXt2YXIgYT10aGlzLmNHO251bGwhPT1hJiYiIiE9PWE/KGE9dGhpcy5vZShhKSx0aGlzLndvPW51bGwhPT1hP2E6dGhpcyk6dGhpcy53bz10aGlzfXJldHVybiB0aGlzLndvfSk7dC5nKEUsInRleHQiLEUucHJvdG90eXBlLnRleHQpOw0KdC5kZWZpbmVQcm9wZXJ0eShFLHt0ZXh0OiJ0ZXh0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5sZTtiIT09YSYmKGUmJnQuaShhLCJzdHJpbmciLEUsInRleHQiKSx0aGlzLmxlPWEsdGhpcy5qKCJ0ZXh0IixiLGEpKX0pO3QuZyhFLCJjb250YWluaW5nR3JvdXAiLEUucHJvdG90eXBlLmdiKTsNCnQuZGVmaW5lUHJvcGVydHkoRSx7Z2I6ImNvbnRhaW5pbmdHcm91cCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueWt9LGZ1bmN0aW9uKGEpe2lmKHRoaXMuTGQoKSl7dmFyIGI9dGhpcy55aztpZihiIT09YSl7ZSYmbnVsbCE9PWEmJnQubChhLFQsRSwiY29udGFpbmluZ0dyb3VwIik7bnVsbD09PWF8fHRoaXMhPT1hJiYhYS5tbCh0aGlzKXx8KHRoaXM9PT1hJiZ0Lm0oIkNhbm5vdCBtYWtlIGEgR3JvdXAgYSBtZW1iZXIgb2YgaXRzZWxmOiAiK3RoaXMudG9TdHJpbmcoKSksdC5tKCJDYW5ub3QgbWFrZSBhIEdyb3VwIGluZGlyZWN0bHkgY29udGFpbiBpdHNlbGY6ICIrdGhpcy50b1N0cmluZygpKyIgYWxyZWFkeSBjb250YWlucyAiK2EudG9TdHJpbmcoKSkpO3RoaXMuSihlaik7dmFyIGM9dGhpcy5oO251bGwhPT1iP0JtKGIsdGhpcyk6dGhpcyBpbnN0YW5jZW9mIFQmJm51bGwhPT1jJiZjLlRrLnJlbW92ZSh0aGlzKTt0aGlzLnlrPWE7bnVsbCE9PWE/Q20oYSx0aGlzKTp0aGlzIGluc3RhbmNlb2YNClQmJm51bGwhPT1jJiZjLlRrLmFkZCh0aGlzKTt0aGlzLkooWmkpO2lmKG51bGwhPT1jKXt2YXIgZD10aGlzLmRhdGEsZj1jLmJhO251bGwhPT1kJiZmIGluc3RhbmNlb2YgUCYmZi53eChkLGYuSGIobnVsbCE9PWE/YS5kYXRhOm51bGwpKX1kPXRoaXMuWHo7bnVsbCE9PWQmJihmPSEwLG51bGwhPT1jJiYoZj1jLk5hLGMuTmE9ITApLGQodGhpcyxiLGEpLG51bGwhPT1jJiYoYy5OYT1mKSk7aWYodGhpcyBpbnN0YW5jZW9mIFQpZm9yKGM9bmV3IEMoRSksSWUoYyx0aGlzLCEwLDApLGM9Yy5rO2MubmV4dCgpOylpZihkPWMudmFsdWUsZCBpbnN0YW5jZW9mIFMpZm9yKGQ9ZC5xZTtkLm5leHQoKTspZj1kLnZhbHVlLEdqKGYpO2lmKHRoaXMgaW5zdGFuY2VvZiBTKWZvcihkPXRoaXMucWU7ZC5uZXh0KCk7KWY9ZC52YWx1ZSxHaihmKTt0aGlzLmooImNvbnRhaW5pbmdHcm91cCIsYixhKTtudWxsIT09YSYmYS55eCgpfX1lbHNlIHQubSgiY2Fubm90IHNldCB0aGUgUGFydC5jb250YWluaW5nR3JvdXAgb2YgYSBMaW5rIG9yIEFkb3JubWVudCIpfSk7DQpmdW5jdGlvbiBxayhhKXthPWEuZ2I7bnVsbCE9PWEmJihhLmZhKCksbnVsbCE9PWEuSmImJmEuSmIuZmEoKSxhLndmKCkpfUUucHJvdG90eXBlLmt0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueWs7bnVsbD09PWJ8fGF8fENtKGIsdGhpcyl9O0UucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueWs7bnVsbD09PWJ8fGF8fEJtKGIsdGhpcyl9O0UucHJvdG90eXBlLk1tPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhO2lmKG51bGwhPT1hKXt2YXIgYj10aGlzLmg7bnVsbCE9PWImJihiPWIuYmEsbnVsbCE9PWImJmIubngoYSkpfX07dC5nKEUsImNvbnRhaW5pbmdHcm91cENoYW5nZWQiLEUucHJvdG90eXBlLlh6KTsNCnQuZGVmaW5lUHJvcGVydHkoRSx7WHo6ImNvbnRhaW5pbmdHcm91cENoYW5nZWQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnhxfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnhxO2IhPT1hJiYobnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsRSwiY29udGFpbmluZ0dyb3VwQ2hhbmdlZCIpLHRoaXMueHE9YSx0aGlzLmooImNvbnRhaW5pbmdHcm91cENoYW5nZWQiLGIsYSkpfSk7RS5wcm90b3R5cGUuZmluZFRvcExldmVsUGFydD1mdW5jdGlvbigpe3JldHVybiBEbSh0aGlzLHRoaXMpfTtmdW5jdGlvbiBEbShhLGIpe3ZhciBjPWIuZ2I7cmV0dXJuIG51bGwhPT1jP0RtKGEsYyk6YiBpbnN0YW5jZW9mIFMmJihjPWIuJGQsbnVsbCE9PWMpP0RtKGEsYyk6Yn10LkEoRSx7c3A6ImlzVG9wTGV2ZWwifSxmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5nYnx8dGhpcyBpbnN0YW5jZW9mIFMmJnRoaXMuY2k/ITE6ITB9KTsNCkUucHJvdG90eXBlLmlzTWVtYmVyT2Y9RS5wcm90b3R5cGUubWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBUP0VtKHRoaXMsdGhpcyxhKTohMX07ZnVuY3Rpb24gRW0oYSxiLGMpe2lmKGI9PT1jfHxudWxsPT09YylyZXR1cm4hMTt2YXIgZD1iLmdiO3JldHVybiBudWxsPT09ZHx8ZCE9PWMmJiFFbShhLGQsYyk/YiBpbnN0YW5jZW9mIFMmJihiPWIuJGQsbnVsbCE9PWIpP0VtKGEsYixjKTohMTohMH1FLnByb3RvdHlwZS5maW5kQ29tbW9uQ29udGFpbmluZ0dyb3VwPUUucHJvdG90eXBlLkZJPWZ1bmN0aW9uKGEpe3JldHVybiBGbSh0aGlzLHRoaXMsYSl9Ow0KZnVuY3Rpb24gRm0oYSxiLGMpe2lmKG51bGw9PT1ifHxudWxsPT09YylyZXR1cm4gbnVsbDt2YXIgZD1iLmdiO2lmKG51bGw9PT1kKXJldHVybiBudWxsO2lmKGI9PT1jKXJldHVybiBkO3ZhciBmPWMuZ2I7cmV0dXJuIG51bGw9PT1mP251bGw6ZD09PWY/ZjpFbShhLGMsZCk/ZDpFbShhLGIsZik/ZjpGbShhLGQsZil9dC5nKEUsImxheW91dENvbmRpdGlvbnMiLEUucHJvdG90eXBlLm5GKTt0LmRlZmluZVByb3BlcnR5KEUse25GOiJsYXlvdXRDb25kaXRpb25zIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rcn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5rcjtiIT09YSYmKGUmJnQuaShhLCJudW1iZXIiLEUsImxheW91dENvbmRpdGlvbnMiKSx0aGlzLmtyPWEsdGhpcy5qKCJsYXlvdXRDb25kaXRpb25zIixiLGEpKX0pOw0KRS5wcm90b3R5cGUuY2FuTGF5b3V0PWZ1bmN0aW9uKCl7aWYoIXRoaXMueEF8fCF0aGlzLlFhKCkpcmV0dXJuITE7dmFyIGE9dGhpcy5sYXllcjtyZXR1cm4gbnVsbCE9PWEmJmEueWN8fHRoaXMgaW5zdGFuY2VvZiBTJiZ0aGlzLmNpPyExOiEwfTtFLnByb3RvdHlwZS5pbnZhbGlkYXRlTGF5b3V0PUUucHJvdG90eXBlLko9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9MTY3NzcyMTUpO3ZhciBiO3RoaXMueEEmJjAhPT0oYSZ0aGlzLm5GKT8oYj10aGlzLmxheWVyLG51bGwhPT1iJiZiLnljfHx0aGlzIGluc3RhbmNlb2YgUyYmdGhpcy5jaT9iPSExOihiPXRoaXMuaCxiPW51bGwhPT1iJiZiLmphLnNiPyExOiEwKSk6Yj0hMTtpZihiKWlmKGI9dGhpcy55ayxudWxsIT09Yil7dmFyIGM9Yi5qYztudWxsIT09Yz9jLkooKTpiLkooYSl9ZWxzZSBhPXRoaXMuaCxudWxsIT09YSYmKGM9YS5qYyxudWxsIT09YyYmYy5KKCkpfTsNCmZ1bmN0aW9uIGNqKGEpe2lmKCFhLlFhKCkpcmV0dXJuITE7YT1hLmxheWVyO3JldHVybiBudWxsIT09YSYmYS55Yz8hMTohMH10LmcoRSwiZHJhZ0NvbXB1dGF0aW9uIixFLnByb3RvdHlwZS5iQSk7dC5kZWZpbmVQcm9wZXJ0eShFLHtiQToiZHJhZ0NvbXB1dGF0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5IcX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5IcTtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLEUsImRyYWdDb21wdXRhdGlvbiIpLHRoaXMuSHE9YSx0aGlzLmooImRyYWdDb21wdXRhdGlvbiIsYixhKSl9KTt0LmcoRSwic2hhZG93T2Zmc2V0IixFLnByb3RvdHlwZS5xRyk7DQp0LmRlZmluZVByb3BlcnR5KEUse3FHOiJzaGFkb3dPZmZzZXQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVtfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnVtO2IuTShhKXx8KGUmJnQubChhLHcsRSwic2hhZG93T2Zmc2V0IiksdGhpcy51bT1hPWEuWigpLHRoaXMua2EoKSx0aGlzLmooInNoYWRvd09mZnNldCIsYixhKSl9KTt0LmcoRSwic2hhZG93Q29sb3IiLEUucHJvdG90eXBlLnNoYWRvd0NvbG9yKTt0LmRlZmluZVByb3BlcnR5KEUse3NoYWRvd0NvbG9yOiJzaGFkb3dDb2xvciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG19LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudG07YiE9PWEmJihlJiZ0LmkoYSwic3RyaW5nIixFLCJzaGFkb3dDb2xvciIpLHRoaXMudG09YSx0aGlzLmthKCksdGhpcy5qKCJzaGFkb3dDb2xvciIsYixhKSl9KTt0LmcoRSwic2hhZG93Qmx1ciIsRS5wcm90b3R5cGUuc2hhZG93Qmx1cik7DQp0LmRlZmluZVByb3BlcnR5KEUse3NoYWRvd0JsdXI6InNoYWRvd0JsdXIifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnNtfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnNtO2IhPT1hJiYoZSYmdC5pKGEsIm51bWJlciIsRSwic2hhZG93Qmx1ciIpLHRoaXMuc209YSx0aGlzLmthKCksdGhpcy5qKCJzaGFkb3dCbHVyIixiLGEpKX0pO2Z1bmN0aW9uIEplKGEpezA9PT1hcmd1bWVudHMubGVuZ3RoP0UuY2FsbCh0aGlzLFpnKTpFLmNhbGwodGhpcyxhKTt0aGlzLmFmPSJBZG9ybm1lbnQiO3RoaXMuaWI9bnVsbDt0aGlzLlcmPS0yNTc7dGhpcy5ZZz1uZXcgdyhOYU4sTmFOKTt0aGlzLm1pPW5ldyBCKHgpO3RoaXMuSmI9bnVsbH10LmdhKCJBZG9ybm1lbnQiLEplKTt0LkthKEplLEUpO2FhPUplLnByb3RvdHlwZTthYS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuWGg7cmV0dXJuIkFkb3JubWVudCgiK3RoaXMuWmMrIikiKyhudWxsIT09YT9hLnRvU3RyaW5nKCk6IiIpfTsNCmFhLnZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWImJnRoaXMuaWIuUyBpbnN0YW5jZW9mIFY/dGhpcy5pYi5TLnZqKCk6bnVsbH07YWEuUnE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07YWEuYng9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9jLlMsYj10aGlzLm9jO2lmKGEgaW5zdGFuY2VvZiBWJiZiIGluc3RhbmNlb2YgVyl7dmFyIGM9YS5wYXRoLGI9Yy5PYTthLmJ4KCk7Zm9yKHZhciBiPWMuT2EsYT10aGlzLnhhLGM9YS5sZW5ndGgsZD0wO2Q8YztkKyspe3ZhciBmPWEubltkXTtmLmZqJiZmIGluc3RhbmNlb2YgVyYmKGYuT2E9Yil9fX07YWEuU3k9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLlhoO3JldHVybiBhIGluc3RhbmNlb2YgVj9hLkNjOm51bGx9O3QuQShKZSx7cGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5KYn0pO3QuZyhKZSwiYWRvcm5lZE9iamVjdCIsSmUucHJvdG90eXBlLm9jKTsNCnQuZGVmaW5lUHJvcGVydHkoSmUse29jOiJhZG9ybmVkT2JqZWN0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pYn0sZnVuY3Rpb24oYSl7ZSYmbnVsbCE9PWEmJnQubChhLFEsRSwiYWRvcm5lZE9iamVjdDp2YWwiKTt2YXIgYj10aGlzLlhoLGM9bnVsbDtudWxsIT09YSYmKGM9YS5TKTtudWxsPT09Ynx8bnVsbCE9PWEmJmI9PT1jfHxiLnVsKHRoaXMuWmMpO3RoaXMuaWI9YTtjJiZjLlZrKHRoaXMuWmMsdGhpcyl9KTt0LkEoSmUse1hoOiJhZG9ybmVkUGFydCJ9LGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5pYjtyZXR1cm4gbnVsbCE9PWE/YS5TOm51bGx9KTtKZS5wcm90b3R5cGUubmw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmliO2lmKG51bGw9PT1hKXJldHVybiEwO2E9YS5TO3JldHVybiBudWxsPT09YXx8IVBpKGEpfTtKZS5wcm90b3R5cGUuTGQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX07dC5BKEplLHtnYjoiY29udGFpbmluZ0dyb3VwIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pOw0KSmUucHJvdG90eXBlLmZuPWZ1bmN0aW9uKGEsYixjLGQsZixnLGgpe2lmKGE9PT13ZCYmImVsZW1lbnRzIj09PWIpaWYoZiBpbnN0YW5jZW9mIFRnKW51bGw9PT10aGlzLkpiP3RoaXMuSmI9Zjp0aGlzLkpiIT09ZiYmdC5tKCJDYW5ub3QgaW5zZXJ0IGEgc2Vjb25kIFBsYWNlaG9sZGVyIGludG8gdGhlIHZpc3VhbCB0cmVlIG9mIGFuIEFkb3JubWVudC4iKTtlbHNle2lmKGYgaW5zdGFuY2VvZiB5KXt2YXIgaz1mLmF0KGZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgVGd9KTtrIGluc3RhbmNlb2YgVGcmJihudWxsPT09dGhpcy5KYj90aGlzLkpiPWs6dGhpcy5KYiE9PWsmJnQubSgiQ2Fubm90IGluc2VydCBhIHNlY29uZCBQbGFjZWhvbGRlciBpbnRvIHRoZSB2aXN1YWwgdHJlZSBvZiBhbiBBZG9ybm1lbnQuIikpfX1lbHNlIGE9PT14ZCYmImVsZW1lbnRzIj09PWImJm51bGwhPT10aGlzLkpiJiYoZD09PXRoaXMuSmI/dGhpcy5KYj1udWxsOmQgaW5zdGFuY2VvZiB5JiZ0aGlzLkpiLmVqKGQpJiYNCih0aGlzLkpiPW51bGwpKTtFLnByb3RvdHlwZS5mbi5jYWxsKHRoaXMsYSxiLGMsZCxmLGcsaCl9O0plLnByb3RvdHlwZS51cGRhdGVBZG9ybm1lbnRzPWZ1bmN0aW9uKCl7fTtKZS5wcm90b3R5cGUuTW09ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIFMoYSl7MD09PWFyZ3VtZW50cy5sZW5ndGg/RS5jYWxsKHRoaXMsWmcpOkUuY2FsbCh0aGlzLGEpO3RoaXMubWM9bmV3IEIoVik7dGhpcy5pbz10aGlzLktrPXRoaXMubnI9dGhpcy5tcj1udWxsO3RoaXMuZHI9ITA7dGhpcy5Hcz0hMTt0aGlzLkJzPW51bGw7dGhpcy5xcT10aGlzLmVyPSEwO3RoaXMucnE9SC5mSDt0aGlzLlJkPXRoaXMucmg9bnVsbDt0aGlzLlFyPUdtO3RoaXMuVmg9ITF9dC5nYSgiTm9kZSIsUyk7dC5LYShTLEUpOw0KUy5wcm90b3R5cGUuY2xvbmVQcm90ZWN0ZWQ9ZnVuY3Rpb24oYSl7RS5wcm90b3R5cGUuY2xvbmVQcm90ZWN0ZWQuY2FsbCh0aGlzLGEpO2EubXI9dGhpcy5tcjthLm5yPXRoaXMubnI7YS5Laz10aGlzLktrO2EuZHI9dGhpcy5kcjthLkdzPXRoaXMuR3M7YS5Ccz10aGlzLkJzO2EuZXI9dGhpcy5lcjthLnFxPXRoaXMucXE7YS5ycT10aGlzLnJxLlooKTthLlFyPXRoaXMuUXJ9O1MucHJvdG90eXBlLlpoPWZ1bmN0aW9uKGEpe0UucHJvdG90eXBlLlpoLmNhbGwodGhpcyxhKTthLndmKCk7YS5yaD10aGlzLnJoO2EuUmQ9bnVsbH07dmFyIEhtO1MuRGlyZWN0aW9uRGVmYXVsdD1IbT10LncoUywiRGlyZWN0aW9uRGVmYXVsdCIsMCk7Uy5EaXJlY3Rpb25BYnNvbHV0ZT10LncoUywiRGlyZWN0aW9uQWJzb2x1dGUiLDEpO3ZhciBJbTtTLkRpcmVjdGlvblJvdGF0ZWROb2RlPUltPXQudyhTLCJEaXJlY3Rpb25Sb3RhdGVkTm9kZSIsMik7dmFyIGVrOw0KUy5EaXJlY3Rpb25Sb3RhdGVkTm9kZU9ydGhvZ29uYWw9ZWs9dC53KFMsIkRpcmVjdGlvblJvdGF0ZWROb2RlT3J0aG9nb25hbCIsMyk7Uy5TcHJlYWRpbmdOb25lPXQudyhTLCJTcHJlYWRpbmdOb25lIiwxMCk7dmFyIEdtO1MuU3ByZWFkaW5nRXZlbmx5PUdtPXQudyhTLCJTcHJlYWRpbmdFdmVubHkiLDExKTt2YXIgSm07Uy5TcHJlYWRpbmdQYWNrZWQ9Sm09dC53KFMsIlNwcmVhZGluZ1BhY2tlZCIsMTIpO2Z1bmN0aW9uIEttKGEsYil7bnVsbCE9PWImJihudWxsPT09YS5yaCYmKGEucmg9bmV3IEMoTG0pKSxhLnJoLmFkZChiKSl9DQpTLnByb3RvdHlwZS5mbj1mdW5jdGlvbihhLGIsYyxkLGYsZyxoKXthPT09d2QmJiJlbGVtZW50cyI9PT1iP3RoaXMuUmQ9bnVsbDphPT09eGQmJiJlbGVtZW50cyI9PT1iJiYobnVsbD09PXRoaXMuaD90aGlzLlJkPW51bGw6ZCBpbnN0YW5jZW9mIFEmJlJsKHRoaXMsZCxmdW5jdGlvbihhLGIpe01rKGEsYiwhMCl9KSk7RS5wcm90b3R5cGUuZm4uY2FsbCh0aGlzLGEsYixjLGQsZixnLGgpfTtTLnByb3RvdHlwZS5pbnZhbGlkYXRlQ29ubmVjdGVkTGlua3M9Uy5wcm90b3R5cGUud2Y9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9bnVsbCk7Zm9yKHZhciBiPXRoaXMucWU7Yi5uZXh0KCk7KXt2YXIgYz1iLnZhbHVlO251bGwhPT1hJiZhLmNvbnRhaW5zKGMpfHwoTW0odGhpcyxjLnVkKSxNbSh0aGlzLGMuZmUpLGMuYWMoKSl9fTtmdW5jdGlvbiBNbShhLGIpe2lmKG51bGwhPT1iKXtiLlByPW51bGw7dmFyIGM9YS5nYjtudWxsPT09Y3x8Yy5ZZHx8TW0oYyxjLmZsKCIiKSl9fQ0KUy5wcm90b3R5cGUubmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH07dC5kZWZpbmVQcm9wZXJ0eShTLHtFSjoicG9ydFNwcmVhZGluZyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUXJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuUXI7YiE9PWEmJihlJiZ0LkFhKGEsUyxTLCJwb3J0U3ByZWFkaW5nIiksdGhpcy5Rcj1hLHRoaXMuaigicG9ydFNwcmVhZGluZyIsYixhKSxhPXRoaXMuaCxudWxsIT09YSYmYS5qYS5zYnx8dGhpcy53ZigpKX0pO3QuZyhTLCJhdm9pZGFibGUiLFMucHJvdG90eXBlLlJ6KTt0LmRlZmluZVByb3BlcnR5KFMse1J6OiJhdm9pZGFibGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnFxfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnFxO2lmKGIhPT1hKXtlJiZ0LmkoYSwiYm9vbGVhbiIsUywiYXZvaWRhYmxlIik7dGhpcy5xcT1hO3ZhciBjPXRoaXMuaDtudWxsIT09YyYmU2ooYyx0aGlzKTt0aGlzLmooImF2b2lkYWJsZSIsYixhKX19KTsNCnQuZyhTLCJhdm9pZGFibGVNYXJnaW4iLFMucHJvdG90eXBlLlJEKTt0LmRlZmluZVByb3BlcnR5KFMse1JEOiJhdm9pZGFibGVNYXJnaW4ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnJxfSxmdW5jdGlvbihhKXsibnVtYmVyIj09PXR5cGVvZiBhP2E9bmV3IGFiKGEpOnQubChhLGFiLFMsImF2b2lkYWJsZU1hcmdpbiIpO3ZhciBiPXRoaXMucnE7aWYoIWIuTShhKSl7dGhpcy5ycT1hPWEuWigpO3ZhciBjPXRoaXMuaDtudWxsIT09YyYmU2ooYyx0aGlzKTt0aGlzLmooImF2b2lkYWJsZU1hcmdpbiIsYixhKX19KTtTLnByb3RvdHlwZS5jYW5Bdm9pZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJ6JiYhdGhpcy5jaX07Uy5wcm90b3R5cGUuZ2V0QXZvaWRhYmxlUmVjdD1mdW5jdGlvbihhKXthLnNldCh0aGlzLnBhKTthLmF3KHRoaXMuUkQpO3JldHVybiBhfTsNClMucHJvdG90eXBlLmZpbmRWaXNpYmxlTm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzO251bGwhPT1hJiYhYS5RYSgpOylhPWEuZ2I7cmV0dXJuIGF9O1MucHJvdG90eXBlLmRmPWZ1bmN0aW9uKGEpe0UucHJvdG90eXBlLmRmLmNhbGwodGhpcyxhKTtmb3IodmFyIGI9dGhpcy5xZTtiLm5leHQoKTspYi52YWx1ZS5kZihhKX07dC5BKFMse3FlOiJsaW5rc0Nvbm5lY3RlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWMua30pO1MucHJvdG90eXBlLmZpbmRMaW5rc0Nvbm5lY3RlZD1TLnByb3RvdHlwZS5BRT1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT1udWxsKTtpZihudWxsPT09YSlyZXR1cm4gdGhpcy5tYy5rO2UmJnQuaShhLCJzdHJpbmciLFMsImZpbmRMaW5rc0Nvbm5lY3RlZDpwaWQiKTt2YXIgYj1uZXcgQmEodGhpcy5tYyksYz10aGlzO2Iuc2w9ZnVuY3Rpb24oYil7cmV0dXJuIGIuYWE9PT1jJiZiLlJmPT09YXx8Yi5jYT09PWMmJmIuT2c9PT1hfTtyZXR1cm4gYn07DQpTLnByb3RvdHlwZS5maW5kTGlua3NPdXRPZj1TLnByb3RvdHlwZS5Ddz1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT1udWxsKTtlJiZudWxsIT09YSYmdC5pKGEsInN0cmluZyIsUywiZmluZExpbmtzT3V0T2Y6cGlkIik7dmFyIGI9bmV3IEJhKHRoaXMubWMpLGM9dGhpcztiLnNsPWZ1bmN0aW9uKGIpe3JldHVybiBiLmFhIT09Yz8hMTpudWxsPT09YT8hMDpiLlJmPT09YX07cmV0dXJuIGJ9O1MucHJvdG90eXBlLmZpbmRMaW5rc0ludG89Uy5wcm90b3R5cGUud2c9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9bnVsbCk7ZSYmbnVsbCE9PWEmJnQuaShhLCJzdHJpbmciLFMsImZpbmRMaW5rc0ludG86cGlkIik7dmFyIGI9bmV3IEJhKHRoaXMubWMpLGM9dGhpcztiLnNsPWZ1bmN0aW9uKGIpe3JldHVybiBiLmNhIT09Yz8hMTpudWxsPT09YT8hMDpiLk9nPT09YX07cmV0dXJuIGJ9Ow0KUy5wcm90b3R5cGUuZmluZE5vZGVzQ29ubmVjdGVkPVMucHJvdG90eXBlLkJFPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPW51bGwpO2UmJm51bGwhPT1hJiZ0LmkoYSwic3RyaW5nIixTLCJmaW5kTm9kZXNDb25uZWN0ZWQ6cGlkIik7Zm9yKHZhciBiPW51bGwsYz1udWxsLGQ9dGhpcy5tYy5rO2QubmV4dCgpOyl7dmFyIGY9ZC52YWx1ZTtpZihmLmFhPT09dGhpcyl7aWYobnVsbD09PWF8fGYuUmY9PT1hKWY9Zi5jYSxudWxsIT09Yj9iLmFkZChmKTpudWxsIT09YyYmYyE9PWY/KGI9bmV3IEMoUyksYi5hZGQoYyksYi5hZGQoZikpOmM9Zn1lbHNlIGYuY2EhPT10aGlzfHxudWxsIT09YSYmZi5PZyE9PWF8fChmPWYuYWEsbnVsbCE9PWI/Yi5hZGQoZik6bnVsbCE9PWMmJmMhPT1mPyhiPW5ldyBDKFMpLGIuYWRkKGMpLGIuYWRkKGYpKTpjPWYpfXJldHVybiBudWxsIT09Yj9iLms6bnVsbCE9PWM/bmV3IEFhKGMpOnQuYWd9Ow0KUy5wcm90b3R5cGUuZmluZE5vZGVzT3V0T2Y9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9bnVsbCk7ZSYmbnVsbCE9PWEmJnQuaShhLCJzdHJpbmciLFMsImZpbmROb2Rlc091dE9mOnBpZCIpO2Zvcih2YXIgYj1udWxsLGM9bnVsbCxkPXRoaXMubWMuaztkLm5leHQoKTspe3ZhciBmPWQudmFsdWU7Zi5hYSE9PXRoaXN8fG51bGwhPT1hJiZmLlJmIT09YXx8KGY9Zi5jYSxudWxsIT09Yj9iLmFkZChmKTpudWxsIT09YyYmYyE9PWY/KGI9bmV3IEMoUyksYi5hZGQoYyksYi5hZGQoZikpOmM9Zil9cmV0dXJuIG51bGwhPT1iP2IuazpudWxsIT09Yz9uZXcgQWEoYyk6dC5hZ307DQpTLnByb3RvdHlwZS5maW5kTm9kZXNJbnRvPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPW51bGwpO2UmJm51bGwhPT1hJiZ0LmkoYSwic3RyaW5nIixTLCJmaW5kTm9kZXNJbnRvOnBpZCIpO2Zvcih2YXIgYj1udWxsLGM9bnVsbCxkPXRoaXMubWMuaztkLm5leHQoKTspe3ZhciBmPWQudmFsdWU7Zi5jYSE9PXRoaXN8fG51bGwhPT1hJiZmLk9nIT09YXx8KGY9Zi5hYSxudWxsIT09Yj9iLmFkZChmKTpudWxsIT09YyYmYyE9PWY/KGI9bmV3IEMoUyksYi5hZGQoYyksYi5hZGQoZikpOmM9Zil9cmV0dXJuIG51bGwhPT1iP2IuazpudWxsIT09Yz9uZXcgQWEoYyk6dC5hZ307DQpTLnByb3RvdHlwZS5maW5kTGlua3NCZXR3ZWVuPWZ1bmN0aW9uKGEsYixjKXt2b2lkIDA9PT1iJiYoYj1udWxsKTt2b2lkIDA9PT1jJiYoYz1udWxsKTtlJiYodC5sKGEsUyxTLCJmaW5kTGlua3NCZXR3ZWVuOm90aGVybm9kZSIpLG51bGwhPT1iJiZ0LmkoYiwic3RyaW5nIixTLCJmaW5kTGlua3NCZXR3ZWVuOnBpZCIpLG51bGwhPT1jJiZ0LmkoYywic3RyaW5nIixTLCJmaW5kTGlua3NCZXR3ZWVuOm90aGVycGlkIikpO3ZhciBkPW5ldyBCYSh0aGlzLm1jKSxmPXRoaXM7ZC5zbD1mdW5jdGlvbihkKXtyZXR1cm4oZC5hYSE9PWZ8fGQuY2EhPT1hfHxudWxsIT09YiYmZC5SZiE9PWJ8fG51bGwhPT1jJiZkLk9nIT09YykmJihkLmFhIT09YXx8ZC5jYSE9PWZ8fG51bGwhPT1jJiZkLlJmIT09Y3x8bnVsbCE9PWImJmQuT2chPT1iKT8hMTohMH07cmV0dXJuIGR9Ow0KUy5wcm90b3R5cGUuZmluZExpbmtzVG89ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWImJihiPW51bGwpO3ZvaWQgMD09PWMmJihjPW51bGwpO2UmJih0LmwoYSxTLFMsImZpbmRMaW5rc1RvOm90aGVybm9kZSIpLG51bGwhPT1iJiZ0LmkoYiwic3RyaW5nIixTLCJmaW5kTGlua3NUbzpwaWQiKSxudWxsIT09YyYmdC5pKGMsInN0cmluZyIsUywiZmluZExpbmtzVG86b3RoZXJwaWQiKSk7dmFyIGQ9bmV3IEJhKHRoaXMubWMpLGY9dGhpcztkLnNsPWZ1bmN0aW9uKGQpe3JldHVybiBkLmFhIT09Znx8ZC5jYSE9PWF8fG51bGwhPT1iJiZkLlJmIT09Ynx8bnVsbCE9PWMmJmQuT2c9PT1jPyExOiEwfTtyZXR1cm4gZH07dC5nKFMsImxpbmtDb25uZWN0ZWQiLFMucHJvdG90eXBlLnBGKTsNCnQuZGVmaW5lUHJvcGVydHkoUyx7cEY6ImxpbmtDb25uZWN0ZWQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm1yfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLm1yO2IhPT1hJiYobnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsUywibGlua0Nvbm5lY3RlZCIpLHRoaXMubXI9YSx0aGlzLmooImxpbmtDb25uZWN0ZWQiLGIsYSkpfSk7dC5nKFMsImxpbmtEaXNjb25uZWN0ZWQiLFMucHJvdG90eXBlLnFGKTt0LmRlZmluZVByb3BlcnR5KFMse3FGOiJsaW5rRGlzY29ubmVjdGVkIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ucn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5ucjtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLFMsImxpbmtEaXNjb25uZWN0ZWQiKSx0aGlzLm5yPWEsdGhpcy5qKCJsaW5rRGlzY29ubmVjdGVkIixiLGEpKX0pO3QuZyhTLCJsaW5rVmFsaWRhdGlvbiIsUy5wcm90b3R5cGUuQXApOw0KdC5kZWZpbmVQcm9wZXJ0eShTLHtBcDoibGlua1ZhbGlkYXRpb24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLktrfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLktrO2IhPT1hJiYobnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsUywibGlua1ZhbGlkYXRpb24iKSx0aGlzLktrPWEsdGhpcy5qKCJsaW5rVmFsaWRhdGlvbiIsYixhKSl9KTsNCmZ1bmN0aW9uIE5tKGEsYixjKXtNbShhLGMpO2lmKCFhLm1jLmNvbnRhaW5zKGIpKXthLm1jLmFkZChiKTt2YXIgZD1hLnBGO2lmKG51bGwhPT1kKXt2YXIgZj0hMCxnPWEuaDtudWxsIT09ZyYmKGY9Zy5OYSxnLk5hPSEwKTtkKGEsYixjKTtudWxsIT09ZyYmKGcuTmE9Zil9Yi5GYyYmKGM9Yi5hYSxiPWIuY2EsbnVsbCE9PWMmJm51bGwhPT1iJiZjIT09YiYmKGQ9ITAsZz1hLmgsbnVsbCE9PWcmJihkPWcucGQpLGE9ZD9iOmMsZj1kP2M6YixhLlZofHwoYS5WaD1mKSwhZi5kaXx8bnVsbCE9PWcmJmcuamEuc2J8fChkP2M9PT1mJiYoZi5kaT0hMSk6Yj09PWYmJihmLmRpPSExKSkpKX19DQpmdW5jdGlvbiBPbShhLGIsYyl7TW0oYSxjKTtpZihhLm1jLnJlbW92ZShiKSl7dmFyIGQ9YS5xRixmPWEuaDtpZihudWxsIT09ZCl7dmFyIGc9ITA7bnVsbCE9PWYmJihnPWYuTmEsZi5OYT0hMCk7ZChhLGIsYyk7bnVsbCE9PWYmJihmLk5hPWcpfWIuRmMmJihjPSEwLG51bGwhPT1mJiYoYz1mLnBkKSxhPWM/Yi5jYTpiLmFhLGI9Yz9iLmFhOmIuY2EsbnVsbCE9PWEmJihhLlZoPSExKSxudWxsPT09Ynx8Yi5kaXx8KDA9PT1iLm1jLmNvdW50PyhiLlZoPW51bGwsbnVsbCE9PWYmJmYuamEuc2J8fChiLmRpPSEwKSk6TGooYikpKX19DQpmdW5jdGlvbiBMaihhKXthLlZoPSExO2lmKDAhPT1hLm1jLmNvdW50KXt2YXIgYj0hMCxjPWEuaDtpZihudWxsPT09Y3x8IWMuamEuc2Ipe251bGwhPT1jJiYoYj1jLnBkKTtmb3IoYz1hLm1jLms7Yy5uZXh0KCk7KXt2YXIgZD1jLnZhbHVlO2lmKGQuRmMpaWYoYil7aWYoZC5hYT09PWEpe2EuZGk9ITE7cmV0dXJufX1lbHNlIGlmKGQuY2E9PT1hKXthLmRpPSExO3JldHVybn19YS5kaT0hMH19fQ0KUy5wcm90b3R5cGUudXBkYXRlTW9kZWxEYXRhUmVmZXJlbmNlcz1mdW5jdGlvbigpe0UucHJvdG90eXBlLnVwZGF0ZU1vZGVsRGF0YVJlZmVyZW5jZXMuY2FsbCh0aGlzKTt2YXIgYT10aGlzLmRhdGE7aWYobnVsbCE9PWEpe3ZhciBiPXRoaXMuaDtpZihudWxsIT09Yil7dmFyIGM9Yi5iYTtpZihjIGluc3RhbmNlb2YgS2Qpe3ZhciBkPWMuU20oYSksYj1iLlZlKGQpLGY9dGhpcy5lQSgpO2IhPT1mJiYoYj1udWxsIT09Zj9jLkhiKGYuZGF0YSk6dm9pZCAwLGY9Yy5lbiwiZnVuY3Rpb24iPT09dHlwZW9mIGY/ZihhLGIpOmFbZl09YixjLm1oKGEsZCkpfX19fTtTLnByb3RvdHlwZS5rdD1mdW5jdGlvbihhKXtFLnByb3RvdHlwZS5rdC5jYWxsKHRoaXMsYSk7YXx8TGoodGhpcyk7dmFyIGI9dGhpcy5pbztudWxsPT09Ynx8YXx8UG0oYix0aGlzKX07DQpTLnByb3RvdHlwZS5sdD1mdW5jdGlvbihhKXtFLnByb3RvdHlwZS5sdC5jYWxsKHRoaXMsYSk7dmFyIGI9dGhpcy5pbztudWxsPT09Ynx8YXx8bnVsbD09PWIud2V8fChiLndlLnJlbW92ZSh0aGlzKSxiLmZhKCkpfTtTLnByb3RvdHlwZS5NbT1mdW5jdGlvbigpe2lmKDA8dGhpcy5tYy5jb3VudCl7dmFyIGE9dGhpcy5oO2lmKG51bGw9PT1hKXJldHVybjtmb3IodmFyIGI9dGhpcy5tYy5jb3B5KCkuaztiLm5leHQoKTspYS5yZW1vdmUoYi52YWx1ZSl9dGhpcy4kZD1udWxsO0UucHJvdG90eXBlLk1tLmNhbGwodGhpcyl9O3QuQShTLHtjaToiaXNMaW5rTGFiZWwifSxmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5pb30pO3QuZyhTLCJsYWJlbGVkTGluayIsUy5wcm90b3R5cGUuJGQpOw0KdC5kZWZpbmVQcm9wZXJ0eShTLHskZDoibGFiZWxlZExpbmsifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmlvfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmlvO2lmKGIhPT1hKXtlJiZudWxsIT09YSYmdC5sKGEsVixTLCJsYWJlbGVkTGluayIpO3ZhciBjPXRoaXMuaCxkPXRoaXMuZGF0YTtpZihudWxsIT09YiYmKG51bGwhPT1iLndlJiYoYi53ZS5yZW1vdmUodGhpcyksYi5mYSgpKSxudWxsIT09YyYmbnVsbCE9PWQmJiFjLmphLnNiKSl7dmFyIGY9Yi5kYXRhLGc9Yy5iYTtpZihudWxsIT09ZiYmZyBpbnN0YW5jZW9mIFApe3ZhciBoPWcuSGIoZCk7dm9pZCAwIT09aCYmZy5KSihmLGgpfX10aGlzLmlvPWE7bnVsbCE9PWEmJihQbShhLHRoaXMpLG51bGw9PT1jfHxudWxsPT09ZHx8Yy5qYS5zYnx8KGY9YS5kYXRhLGc9Yy5iYSxudWxsIT09ZiYmZyBpbnN0YW5jZW9mIFAmJihoPWcuSGIoZCksdm9pZCAwIT09aCYmZy5KRChmLGgpKSkpO0RrKHRoaXMpO3RoaXMuaigibGFiZWxlZExpbmsiLA0KYixhKX19KTtTLnByb3RvdHlwZS5maW5kUG9ydD1TLnByb3RvdHlwZS5mbD1mdW5jdGlvbihhKXtlJiZ0LmkoYSwic3RyaW5nIixTLCJmaW5kUG9ydDpwaWQiKTtpZihudWxsPT09dGhpcy5SZCl7aWYoIiI9PT1hJiYhMT09PXRoaXMuRmgpcmV0dXJuIHRoaXM7TmsodGhpcyl9dmFyIGI9dGhpcy5SZC56YShhKTtyZXR1cm4gbnVsbCE9PWJ8fCIiIT09YSYmKGI9dGhpcy5SZC56YSgiIiksbnVsbCE9PWIpP2I6dGhpc307dC5BKFMse3BvcnQ6InBvcnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmZsKCIiKX0pO3QuQShTLHtwb3J0czoicG9ydHMifSxmdW5jdGlvbigpe251bGw9PT10aGlzLlJkJiZOayh0aGlzKTtyZXR1cm4gdGhpcy5SZC5rRn0pOw0KZnVuY3Rpb24gTmsoYSl7bnVsbD09PWEuUmQ/YS5SZD1uZXcgamEoInN0cmluZyIsUSk6YS5SZC5jbGVhcigpO1JsKGEsYSxmdW5jdGlvbihhLGMpe3ZhciBkPWMuTmQ7bnVsbCE9PWQmJmEuUmQuYWRkKGQsYyl9KTswPT09YS5SZC5jb3VudCYmYS5SZC5hZGQoIiIsYSl9ZnVuY3Rpb24gTWsoYSxiLGMpe3ZhciBkPWIuTmQ7aWYobnVsbCE9PWQmJihudWxsIT09YS5SZCYmYS5SZC5yZW1vdmUoZCksYj1hLmgsbnVsbCE9PWImJmMpKXtjPW51bGw7Zm9yKGE9YS5BRShkKTthLm5leHQoKTspbnVsbD09PWMmJihjPXQuQ2IoKSksYy5wdXNoKGEudmFsdWUpO2lmKG51bGwhPT1jKXtmb3IoYT0wO2E8Yy5sZW5ndGg7YSsrKWIucmVtb3ZlKGNbYV0pO3QueWEoYyl9fX0NClMucHJvdG90eXBlLmlzSW5UcmVlT2Y9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWF8fGE9PT10aGlzKXJldHVybiExO3ZhciBiPSEwLGM9dGhpcy5oO251bGwhPT1jJiYoYj1jLnBkKTtjPXRoaXM7aWYoYilmb3IoO2MhPT1hOyl7Zm9yKHZhciBiPW51bGwsZD1jLm1jLms7ZC5uZXh0KCk7KXt2YXIgZj1kLnZhbHVlO2lmKGYuRmMmJihiPWYuYWEsYiE9PWMmJmIhPT10aGlzKSlicmVha31pZihiPT09dGhpc3x8bnVsbD09PWJ8fGI9PT1jKXJldHVybiExO2M9Yn1lbHNlIGZvcig7YyE9PWE7KXtiPW51bGw7Zm9yKGQ9Yy5tYy5rO2QubmV4dCgpJiYoZj1kLnZhbHVlLCFmLkZjfHwoYj1mLmNhLGI9PT1jfHxiPT09dGhpcykpOyk7aWYoYj09PXRoaXN8fG51bGw9PT1ifHxiPT09YylyZXR1cm4hMTtjPWJ9cmV0dXJuITB9Ow0KUy5wcm90b3R5cGUuZmluZFRyZWVSb290PWZ1bmN0aW9uKCl7dmFyIGE9ITAsYj10aGlzLmg7bnVsbCE9PWImJihhPWIucGQpO2I9dGhpcztpZihhKWZvcig7Oyl7Zm9yKHZhciBhPW51bGwsYz1iLm1jLms7Yy5uZXh0KCk7KXt2YXIgZD1jLnZhbHVlO2lmKGQuRmMmJihhPWQuYWEsYSE9PWImJmEhPT10aGlzKSlicmVha31pZihhPT09dGhpcylyZXR1cm4gdGhpcztpZihudWxsPT09YXx8YT09PWIpcmV0dXJuIGI7Yj1hfWVsc2UgZm9yKDs7KXthPW51bGw7Zm9yKGM9Yi5tYy5rO2MubmV4dCgpJiYoZD1jLnZhbHVlLCFkLkZjfHwoYT1kLmNhLGE9PT1ifHxhPT09dGhpcykpOyk7aWYoYT09PXRoaXMpcmV0dXJuIHRoaXM7aWYobnVsbD09PWF8fGE9PT1iKXJldHVybiBiO2I9YX19Ow0KUy5wcm90b3R5cGUuZmluZFRyZWVQYXJlbnRMaW5rPVMucHJvdG90eXBlLmV0PWZ1bmN0aW9uKCl7dmFyIGE9ITAsYj10aGlzLmg7bnVsbCE9PWImJihhPWIucGQpO2I9dGhpcy5tYy5rO2lmKGEpZm9yKDtiLm5leHQoKTspe2lmKGE9Yi52YWx1ZSxhLkZjJiZhLmFhIT09dGhpcylyZXR1cm4gYX1lbHNlIGZvcig7Yi5uZXh0KCk7KWlmKGE9Yi52YWx1ZSxhLkZjJiZhLmNhIT09dGhpcylyZXR1cm4gYTtyZXR1cm4gbnVsbH07DQpTLnByb3RvdHlwZS5maW5kVHJlZVBhcmVudE5vZGU9Uy5wcm90b3R5cGUuZUE9ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5WaHx8dGhpcy5WaCBpbnN0YW5jZW9mIFMpcmV0dXJuIHRoaXMuVmg7dmFyIGE9ITAsYj10aGlzLmg7bnVsbCE9PWImJihhPWIucGQpO3ZhciBiPXRoaXMubWMubixjPWIubGVuZ3RoO2lmKGEpZm9yKGE9MDthPGM7YSsrKXt2YXIgZD1iW2FdO2lmKGQuRmMmJihkPWQuYWEsZCE9PXRoaXMpKXJldHVybiB0aGlzLlZoPWR9ZWxzZSBmb3IoYT0wO2E8YzthKyspaWYoZD1iW2FdLGQuRmMmJihkPWQuY2EsZCE9PXRoaXMpKXJldHVybiB0aGlzLlZoPWQ7cmV0dXJuIHRoaXMuVmg9bnVsbH07DQpTLnByb3RvdHlwZS5maW5kVHJlZUNoaWxkcmVuTGlua3M9Uy5wcm90b3R5cGUuRnc9ZnVuY3Rpb24oKXt2YXIgYT0hMCxiPXRoaXMuaDtudWxsIT09YiYmKGE9Yi5wZCk7aWYoYSl7dmFyIGE9bmV3IEJhKHRoaXMubWMpLGM9dGhpczthLnNsPWZ1bmN0aW9uKGEpe3JldHVybiBhLkZjJiZhLmFhPT09Yz8hMDohMX19ZWxzZSBhPW5ldyBCYSh0aGlzLm1jKSxjPXRoaXMsYS5zbD1mdW5jdGlvbihhKXtyZXR1cm4gYS5GYyYmYS5jYT09PWM/ITA6ITF9O3JldHVybiBhfTsNClMucHJvdG90eXBlLmZpbmRUcmVlQ2hpbGRyZW5Ob2Rlcz1TLnByb3RvdHlwZS5ERT1mdW5jdGlvbigpe3ZhciBhPSEwLGI9dGhpcy5oO251bGwhPT1iJiYoYT1iLnBkKTt2YXIgYz1iPW51bGwsZD10aGlzLm1jLms7aWYoYSlmb3IoO2QubmV4dCgpOylhPWQudmFsdWUsYS5GYyYmYS5hYT09PXRoaXMmJihhPWEuY2EsbnVsbCE9PWI/Yi5hZGQoYSk6bnVsbCE9PWMmJmMhPT1hPyhiPW5ldyBCKFMpLGIuYWRkKGMpLGIuYWRkKGEpKTpjPWEpO2Vsc2UgZm9yKDtkLm5leHQoKTspYT1kLnZhbHVlLGEuRmMmJmEuY2E9PT10aGlzJiYoYT1hLmFhLG51bGwhPT1iP2IuYWRkKGEpOm51bGwhPT1jJiZjIT09YT8oYj1uZXcgQihTKSxiLmFkZChjKSxiLmFkZChhKSk6Yz1hKTtyZXR1cm4gbnVsbCE9PWI/Yi5rOm51bGwhPT1jP25ldyBBYShjKTp0LmFnfTsNClMucHJvdG90eXBlLmZpbmRUcmVlUGFydHM9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9SW5maW5pdHkpO3QuaShhLCJudW1iZXIiLFMsImNvbGxhcHNlVHJlZTpsZXZlbCIpO3ZhciBiPW5ldyBDKEUpO0llKGIsdGhpcywhMSxhKTtyZXR1cm4gYn07Uy5wcm90b3R5cGUuY29sbGFwc2VUcmVlPVMucHJvdG90eXBlLmNvbGxhcHNlVHJlZT1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT0xKTt0LnEoYSxTLCJjb2xsYXBzZVRyZWU6bGV2ZWwiKTsxPmEmJihhPTEpO3ZhciBiPXRoaXMuaDtpZihudWxsIT09YiYmIWIuV2Qpe3ZhciBjPWIuWmI7MCE9PWIuamEuSmUmJmMudGwoKTtiLldkPSEwO3ZhciBjPWIucGQsZD1uZXcgQyhTKTtkLmFkZCh0aGlzKTtRbSh0aGlzLGQsYyxhLHRoaXMuUWMpO2IuV2Q9ITE7Yi5rYSgpfX07DQpmdW5jdGlvbiBRbShhLGIsYyxkLGYpe2lmKDE8ZClmb3IoZj1jP2EuQ3coKTphLndnKCk7Zi5uZXh0KCk7KXt2YXIgZz1mLnZhbHVlO2cuRmMmJihnPWcua0EoYSksbnVsbD09PWd8fGc9PT1hfHxiLmNvbnRhaW5zKGcpfHwoYi5hZGQoZyksUW0oZyxiLGMsZC0xLGcuUWMpKSl9ZWxzZSBSbShhLGIsYyxmKX1mdW5jdGlvbiBSbShhLGIsYyxkKXtmb3IodmFyIGY9Yz9hLkN3KCk6YS53ZygpO2YubmV4dCgpOyl7dmFyIGc9Zi52YWx1ZTtkJiZnLlBmKCk7Zy5GYyYmKGc9Zy5rQShhKSxudWxsPT09Z3x8Zz09PWF8fGIuY29udGFpbnMoZyl8fChiLmFkZChnKSxkJiYoZy5rYSgpLHFrKGcpLGcuZGYoITEpKSxnLlFjJiYoZy5wbj1nLlFjLFJtKGcsYixjLGcucG4pKSkpfWEuUWM9ITF9DQpTLnByb3RvdHlwZS5leHBhbmRUcmVlPVMucHJvdG90eXBlLmV4cGFuZFRyZWU9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9Mik7dC5xKGEsUywiY29sbGFwc2VUcmVlOmxldmVsIik7Mj5hJiYoYT0yKTt2YXIgYj10aGlzLmg7aWYobnVsbCE9PWImJiFiLldkKXt2YXIgYz1iLlpiOzAhPT1iLmphLkplJiZjLnRsKCk7Yi5XZD0hMDt2YXIgZD1iLnBkLGY9bmV3IEMoUyk7Zi5hZGQodGhpcyk7U20odGhpcyxmLGQsYSx0aGlzLlFjLGMsdGhpcyk7Yi5XZD0hMX19Ow0KZnVuY3Rpb24gU20oYSxiLGMsZCxmLGcsaCl7Zm9yKHZhciBrPWM/YS5DdygpOmEud2coKTtrLm5leHQoKTspe3ZhciBsPWsudmFsdWU7bC5GYyYmKGZ8fChsLnJnfHxsLmFjKCksbC51cGRhdGVBZG9ybm1lbnRzKCkpLGw9bC5rQShhKSxudWxsIT09bCYmbCE9PWEmJiFiLmNvbnRhaW5zKGwpJiYoYi5hZGQobCksZnx8KGwuZGYoITApLHFrKGwpLE5oKGcsbCxoKSksMjxkfHxsLnBuKSkmJihsLnBuPSExLFNtKGwsYixjLGQtMSxsLlFjLGcsaCkpfWEuUWM9ITB9dC5nKFMsImlzVHJlZUV4cGFuZGVkIixTLnByb3RvdHlwZS5RYyk7DQp0LmRlZmluZVByb3BlcnR5KFMse1FjOiJpc1RyZWVFeHBhbmRlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZHI7aWYoYiE9PWEpe2UmJnQuaShhLCJib29sZWFuIixTLCJpc1RyZWVFeHBhbmRlZCIpO3RoaXMuZHI9YTt2YXIgYz10aGlzLmg7dGhpcy5qKCJpc1RyZWVFeHBhbmRlZCIsYixhKTtiPXRoaXMuTUc7aWYobnVsbCE9PWIpe3ZhciBkPSEwO251bGwhPT1jJiYoZD1jLk5hLGMuTmE9ITApO2IodGhpcyk7bnVsbCE9PWMmJihjLk5hPWQpfW51bGwhPT1jJiZjLmphLnNiP3RoaXMuZGYoYSk6YT9udWxsPT09Y3x8Yy5XZHx8KDAhPT1jLmphLkplJiZjLlpiLnRsKCksYy5XZD0hMCxhPWMucGQsYj1uZXcgQyhTKSxiLmFkZCh0aGlzKSxTbSh0aGlzLGIsYSwyLCExLGMuWmIsdGhpcyksYy5XZD0hMSk6bnVsbD09PWN8fGMuV2R8fCgwIT09Yy5qYS5KZSYmYy5aYi50bCgpLGMuV2Q9ITAsYT1jLnBkLGI9bmV3IEMoUyksYi5hZGQodGhpcyksDQpSbSh0aGlzLGIsYSwhMCksYy5XZD0hMSl9fSk7dC5nKFMsIndhc1RyZWVFeHBhbmRlZCIsUy5wcm90b3R5cGUucG4pO3QuZGVmaW5lUHJvcGVydHkoUyx7cG46Indhc1RyZWVFeHBhbmRlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuR3N9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuR3M7YiE9PWEmJihlJiZ0LmkoYSwiYm9vbGVhbiIsUywid2FzVHJlZUV4cGFuZGVkIiksdGhpcy5Hcz1hLHRoaXMuaigid2FzVHJlZUV4cGFuZGVkIixiLGEpKX0pO3QuZyhTLCJ0cmVlRXhwYW5kZWRDaGFuZ2VkIixTLnByb3RvdHlwZS5NRyk7dC5kZWZpbmVQcm9wZXJ0eShTLHtNRzoidHJlZUV4cGFuZGVkQ2hhbmdlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQnN9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuQnM7YiE9PWEmJihudWxsIT09YSYmdC5pKGEsImZ1bmN0aW9uIixTLCJ0cmVlRXhwYW5kZWRDaGFuZ2VkIiksdGhpcy5Ccz1hLHRoaXMuaigidHJlZUV4cGFuZGVkQ2hhbmdlZCIsYixhKSl9KTsNCnQuZyhTLCJpc1RyZWVMZWFmIixTLnByb3RvdHlwZS5kaSk7dC5kZWZpbmVQcm9wZXJ0eShTLHtkaToiaXNUcmVlTGVhZiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZXI7YiE9PWEmJihlJiZ0LmkoYSwiYm9vbGVhbiIsUywiaXNUcmVlTGVhZiIpLHRoaXMuZXI9YSx0aGlzLmooImlzVHJlZUxlYWYiLGIsYSkpfSk7DQpmdW5jdGlvbiBWKCl7RS5jYWxsKHRoaXMsdmcpO3RoaXMuZWc9bnVsbDt0aGlzLkNoPSIiO3RoaXMucWc9dGhpcy5QcT1udWxsO3RoaXMuU2g9IiI7dGhpcy5Bcz1udWxsO3RoaXMuVnI9dGhpcy5Vcj10aGlzLlRyPSExO3RoaXMuZnI9ITA7dGhpcy5scT15Zzt0aGlzLnlxPTA7dGhpcy5CcT15Zzt0aGlzLkNxPU5hTjt0aGlzLm5tPVprO3RoaXMucHM9MC41O3RoaXMuSmk9dGhpcy53ZT1udWxsO3RoaXMuQ2M9KG5ldyBCKHcpKS5mcmVlemUoKTt0aGlzLnhvPXRoaXMueGU9bnVsbDt0aGlzLnJnPSExO3RoaXMucHo9bnVsbDt0aGlzLnd6PSExO3RoaXMueG49dGhpcy51aT10aGlzLk9hPW51bGw7dGhpcy5oZj0wO3RoaXMuSm49dGhpcy5Gbj1udWxsO3RoaXMubWk9bmV3IEIoeCk7dGhpcy5Bej1uZXcgdzt0aGlzLnFEPXRoaXMub0Q9bnVsbDt0aGlzLnF5PSExO3RoaXMuUD1udWxsfXQuZ2EoIkxpbmsiLFYpO3QuS2EoVixFKTsNClYucHJvdG90eXBlLmNsb25lUHJvdGVjdGVkPWZ1bmN0aW9uKGEpe0UucHJvdG90eXBlLmNsb25lUHJvdGVjdGVkLmNhbGwodGhpcyxhKTthLkNoPXRoaXMuQ2g7YS5QcT10aGlzLlBxO2EuU2g9dGhpcy5TaDthLkFzPXRoaXMuQXM7YS5Ucj10aGlzLlRyO2EuVXI9dGhpcy5VcjthLlZyPXRoaXMuVnI7YS5mcj10aGlzLmZyO2EubHE9dGhpcy5scTthLnlxPXRoaXMueXE7YS5CcT10aGlzLkJxO2EuQ3E9dGhpcy5DcTthLm5tPXRoaXMubm07YS5wcz10aGlzLnBzO2lmKG51bGwhPT10aGlzLlApe3ZhciBiPXRoaXMuUDthLlA9e0VoOmIuRWguWigpLFVoOmIuVWguWigpLEJoOmIuQmgsUmg6Yi5SaCxBaDpiLkFoLFFoOmIuUWgsRGg6Yi5EaCxUaDpiLlRofX1lbHNlIGEuUD1udWxsfTsNClYucHJvdG90eXBlLlpoPWZ1bmN0aW9uKGEpe0UucHJvdG90eXBlLlpoLmNhbGwodGhpcyxhKTt0aGlzLkNoPWEuQ2g7dGhpcy5TaD1hLlNoO2EuSmk9bnVsbDthLnhlPW51bGw7YS5hYygpO2EueG49dGhpcy54bjthLmhmPXRoaXMuaGZ9O3ZhciBaaztWLk5vcm1hbD1aaz10LncoViwiTm9ybWFsIiwxKTtWLk9ydGhvZ29uYWw9dC53KFYsIk9ydGhvZ29uYWwiLDIpO1YuQXZvaWRzTm9kZXM9dC53KFYsIkF2b2lkc05vZGVzIiw2KTt2YXIgVG07Vi5Bdm9pZHNOb2Rlc1N0cmFpZ2h0PVRtPXQudyhWLCJBdm9pZHNOb2Rlc1N0cmFpZ2h0Iiw3KTt2YXIgeWc7Vi5Ob25lPXlnPXQudyhWLCJOb25lIiwwKTt2YXIgT2c7Vi5CZXppZXI9T2c9dC53KFYsIkJlemllciIsOSk7dmFyIHhnO1YuSnVtcEdhcD14Zz10LncoViwiSnVtcEdhcCIsMTApO3ZhciB3ZztWLkp1bXBPdmVyPXdnPXQudyhWLCJKdW1wT3ZlciIsMTEpO3ZhciBXaztWLkVuZD1Xaz10LncoViwiRW5kIiwxNyk7dmFyIFhrOw0KVi5TY2FsZT1Yaz10LncoViwiU2NhbGUiLDE4KTt2YXIgWWs7Vi5TdHJldGNoPVlrPXQudyhWLCJTdHJldGNoIiwxOSk7dmFyIGZtO1YuT3JpZW50QWxvbmc9Zm09dC53KFYsIk9yaWVudEFsb25nIiwyMSk7dmFyIFVtO1YuT3JpZW50UGx1czkwPVVtPXQudyhWLCJPcmllbnRQbHVzOTAiLDIyKTt2YXIgVm07Vi5PcmllbnRNaW51czkwPVZtPXQudyhWLCJPcmllbnRNaW51czkwIiwyMyk7dmFyIFdtO1YuT3JpZW50T3Bwb3NpdGU9V209dC53KFYsIk9yaWVudE9wcG9zaXRlIiwyNCk7dmFyIFhtO1YuT3JpZW50VXByaWdodD1YbT10LncoViwiT3JpZW50VXByaWdodCIsMjUpO3ZhciBZbTtWLk9yaWVudFBsdXM5MFVwcmlnaHQ9WW09dC53KFYsIk9yaWVudFBsdXM5MFVwcmlnaHQiLDI2KTt2YXIgWm07Vi5PcmllbnRNaW51czkwVXByaWdodD1abT10LncoViwiT3JpZW50TWludXM5MFVwcmlnaHQiLDI3KTt2YXIgJG07DQpWLk9yaWVudFVwcmlnaHQ0NT0kbT10LncoViwiT3JpZW50VXByaWdodDQ1IiwyOCk7Vi5wcm90b3R5cGUuRmU9ZnVuY3Rpb24oKXt0aGlzLlA9e0VoOnhiLFVoOnhiLEJoOk5hTixSaDpOYU4sQWg6SG0sUWg6SG0sRGg6TmFOLFRoOk5hTn19O1YucHJvdG90eXBlLm5sPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5hYTtpZihudWxsIT09YSl7dmFyIGI9YS5maW5kVmlzaWJsZU5vZGUoKTtudWxsIT09YiYmKGE9Yik7aWYoUGkoYSl8fFFpKGEpKXJldHVybiExfWE9dGhpcy5jYTtyZXR1cm4gbnVsbCE9PWEmJihiPWEuZmluZFZpc2libGVOb2RlKCksbnVsbCE9PWImJihhPWIpLFBpKGEpfHxRaShhKSk/ITE6ITB9O1YucHJvdG90eXBlLkxkPWZ1bmN0aW9uKCl7cmV0dXJuITF9Ow0KVi5wcm90b3R5cGUuY29tcHV0ZUFuZ2xlPWZ1bmN0aW9uKGEsYixjKXtzd2l0Y2goYil7ZGVmYXVsdDpjYXNlIHlnOmE9MDticmVhaztjYXNlIGZtOmE9YzticmVhaztjYXNlIFVtOmE9Yys5MDticmVhaztjYXNlIFZtOmE9Yy05MDticmVhaztjYXNlIFdtOmE9YysxODA7YnJlYWs7Y2FzZSBYbTphPUguQ3QoYyk7OTA8YSYmMjcwPmEmJihhLT0xODApO2JyZWFrO2Nhc2UgWW06YT1ILkN0KGMrOTApOzkwPGEmJjI3MD5hJiYoYS09MTgwKTticmVhaztjYXNlIFptOmE9SC5DdChjLTkwKTs5MDxhJiYyNzA+YSYmKGEtPTE4MCk7YnJlYWs7Y2FzZSAkbTphPUguQ3QoYyk7aWYoNDU8YSYmMTM1PmF8fDIyNTxhJiYzMTU+YSlyZXR1cm4gMDs5MDxhJiYyNzA+YSYmKGEtPTE4MCl9cmV0dXJuIEguQ3QoYSl9O3QuZyhWLCJmcm9tTm9kZSIsVi5wcm90b3R5cGUuYWEpOw0KdC5kZWZpbmVQcm9wZXJ0eShWLHthYToiZnJvbU5vZGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmVnfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmVnO2lmKGIhPT1hKXtlJiZudWxsIT09YSYmdC5sKGEsUyxWLCJmcm9tTm9kZSIpO3ZhciBjPXRoaXMudWQ7bnVsbCE9PWImJih0aGlzLnFnIT09YiYmT20oYix0aGlzLGMpLGFuKHRoaXMpLHRoaXMuSihlaikpO3RoaXMuZWc9YTt0aGlzLnVpPW51bGw7dGhpcy5hYygpO3ZhciBkPXRoaXMuaDtpZihudWxsIT09ZCl7dmFyIGY9dGhpcy5kYXRhLGc9ZC5iYTtpZihudWxsIT09ZilpZihnIGluc3RhbmNlb2YgUCl7dmFyIGg9bnVsbCE9PWE/YS5kYXRhOm51bGw7Zy52eChmLGcuSGIoaCkpfWVsc2UgZyBpbnN0YW5jZW9mIEtkJiYoaD1udWxsIT09YT9hLmRhdGE6bnVsbCxkLnBkP2cubWgoZixnLkhiKGgpKToobnVsbCE9PWImJmcubWgoYi5kYXRhLHZvaWQgMCksZy5taChoLGcuSGIobnVsbCE9PXRoaXMucWc/dGhpcy5xZy5kYXRhOm51bGwpKSkpfWY9DQp0aGlzLnVkO2c9dGhpcy5qQTtudWxsIT09ZyYmKGg9ITAsbnVsbCE9PWQmJihoPWQuTmEsZC5OYT0hMCksZyh0aGlzLGMsZiksbnVsbCE9PWQmJihkLk5hPWgpKTtudWxsIT09YSYmKHRoaXMucWchPT1hJiZObShhLHRoaXMsZiksYm4odGhpcyksdGhpcy5KKFppKSk7dGhpcy5qKCJmcm9tTm9kZSIsYixhKTtHaih0aGlzKX19KTt0LmcoViwiZnJvbVBvcnRJZCIsVi5wcm90b3R5cGUuUmYpOw0KdC5kZWZpbmVQcm9wZXJ0eShWLHtSZjoiZnJvbVBvcnRJZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2h9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuQ2g7aWYoYiE9PWEpe2UmJnQuaShhLCJzdHJpbmciLFYsImZyb21Qb3J0SWQiKTt2YXIgYz10aGlzLnVkO251bGwhPT1jJiZNbSh0aGlzLmFhLGMpO2FuKHRoaXMpO3RoaXMuQ2g9YTt2YXIgZD10aGlzLnVkO251bGwhPT1kJiZNbSh0aGlzLmFhLGQpO3ZhciBmPXRoaXMuaDtpZihudWxsIT09Zil7dmFyIGc9dGhpcy5kYXRhLGg9Zi5iYTtudWxsIT09ZyYmaCBpbnN0YW5jZW9mIFAmJmguYkIoZyxhKX1jIT09ZCYmKHRoaXMudWk9bnVsbCx0aGlzLmFjKCksZz10aGlzLmpBLG51bGwhPT1nJiYoaD0hMCxudWxsIT09ZiYmKGg9Zi5OYSxmLk5hPSEwKSxnKHRoaXMsYyxkKSxudWxsIT09ZiYmKGYuTmE9aCkpKTtibih0aGlzKTt0aGlzLmooImZyb21Qb3J0SWQiLGIsYSl9fSk7DQp0LkEoVix7dWQ6ImZyb21Qb3J0In0sZnVuY3Rpb24oKXt2YXIgYT10aGlzLmVnO3JldHVybiBudWxsPT09YT9udWxsOmEuZmwodGhpcy5DaCl9KTt0LmcoViwiZnJvbVBvcnRDaGFuZ2VkIixWLnByb3RvdHlwZS5qQSk7dC5kZWZpbmVQcm9wZXJ0eShWLHtqQToiZnJvbVBvcnRDaGFuZ2VkIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QcX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5QcTtiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLFYsImZyb21Qb3J0Q2hhbmdlZCIpLHRoaXMuUHE9YSx0aGlzLmooImZyb21Qb3J0Q2hhbmdlZCIsYixhKSl9KTt0LmcoViwidG9Ob2RlIixWLnByb3RvdHlwZS5jYSk7DQp0LmRlZmluZVByb3BlcnR5KFYse2NhOiJ0b05vZGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnFnfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnFnO2lmKGIhPT1hKXtlJiZudWxsIT09YSYmdC5sKGEsUyxWLCJ0b05vZGUiKTt2YXIgYz10aGlzLmZlO251bGwhPT1iJiYodGhpcy5lZyE9PWImJk9tKGIsdGhpcyxjKSxhbih0aGlzKSx0aGlzLkooZWopKTt0aGlzLnFnPWE7dGhpcy51aT1udWxsO3RoaXMuYWMoKTt2YXIgZD10aGlzLmg7aWYobnVsbCE9PWQpe3ZhciBmPXRoaXMuZGF0YSxnPWQuYmE7aWYobnVsbCE9PWYpaWYoZyBpbnN0YW5jZW9mIFApe3ZhciBoPW51bGwhPT1hP2EuZGF0YTpudWxsO2cueHgoZixnLkhiKGgpKX1lbHNlIGcgaW5zdGFuY2VvZiBLZCYmKGg9bnVsbCE9PWE/YS5kYXRhOm51bGwsZC5wZD8obnVsbCE9PWImJmcubWgoYi5kYXRhLHZvaWQgMCksZy5taChoLGcuSGIobnVsbCE9PXRoaXMuZWc/dGhpcy5lZy5kYXRhOm51bGwpKSk6Zy5taChmLGcuSGIoaCkpKX1mPQ0KdGhpcy5mZTtnPXRoaXMubUI7bnVsbCE9PWcmJihoPSEwLG51bGwhPT1kJiYoaD1kLk5hLGQuTmE9ITApLGcodGhpcyxjLGYpLG51bGwhPT1kJiYoZC5OYT1oKSk7bnVsbCE9PWEmJih0aGlzLmVnIT09YSYmTm0oYSx0aGlzLGYpLGJuKHRoaXMpLHRoaXMuSihaaSkpO3RoaXMuaigidG9Ob2RlIixiLGEpO0dqKHRoaXMpfX0pO3QuZyhWLCJ0b1BvcnRJZCIsVi5wcm90b3R5cGUuT2cpOw0KdC5kZWZpbmVQcm9wZXJ0eShWLHtPZzoidG9Qb3J0SWQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlNofSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlNoO2lmKGIhPT1hKXtlJiZ0LmkoYSwic3RyaW5nIixWLCJ0b1BvcnRJZCIpO3ZhciBjPXRoaXMuZmU7bnVsbCE9PWMmJk1tKHRoaXMuY2EsYyk7YW4odGhpcyk7dGhpcy5TaD1hO3ZhciBkPXRoaXMuZmU7bnVsbCE9PWQmJk1tKHRoaXMuY2EsZCk7dmFyIGY9dGhpcy5oO2lmKG51bGwhPT1mKXt2YXIgZz10aGlzLmRhdGEsaD1mLmJhO251bGwhPT1nJiZoIGluc3RhbmNlb2YgUCYmaC5lQihnLGEpfWMhPT1kJiYodGhpcy51aT1udWxsLHRoaXMuYWMoKSxnPXRoaXMubUIsbnVsbCE9PWcmJihoPSEwLG51bGwhPT1mJiYoaD1mLk5hLGYuTmE9ITApLGcodGhpcyxjLGQpLG51bGwhPT1mJiYoZi5OYT1oKSkpO2JuKHRoaXMpO3RoaXMuaigidG9Qb3J0SWQiLGIsYSl9fSk7DQp0LkEoVix7ZmU6InRvUG9ydCJ9LGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5xZztyZXR1cm4gbnVsbD09PWE/bnVsbDphLmZsKHRoaXMuU2gpfSk7dC5nKFYsInRvUG9ydENoYW5nZWQiLFYucHJvdG90eXBlLm1CKTt0LmRlZmluZVByb3BlcnR5KFYse21COiJ0b1BvcnRDaGFuZ2VkIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Bc30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5BcztiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLFYsInRvUG9ydENoYW5nZWQiKSx0aGlzLkFzPWEsdGhpcy5qKCJ0b1BvcnRDaGFuZ2VkIixiLGEpKX0pOw0KdC5kZWZpbmVQcm9wZXJ0eShWLHtwYjoiZnJvbVNwb3QifSxmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5QP3RoaXMuUC5FaDp4Yn0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUCYmdGhpcy5GZSgpO3ZhciBiPXRoaXMuUC5FaDtiLk0oYSl8fChlJiZ0LmwoYSxJLFYsImZyb21TcG90IiksYT1hLlooKSx0aGlzLlAuRWg9YSx0aGlzLmooImZyb21TcG90IixiLGEpLHRoaXMuYWMoKSl9KTsNCnQuZGVmaW5lUHJvcGVydHkoVix7Y2s6ImZyb21FbmRTZWdtZW50TGVuZ3RoIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUD90aGlzLlAuQmg6TmFOfSxmdW5jdGlvbihhKXtudWxsPT09dGhpcy5QJiZ0aGlzLkZlKCk7dmFyIGI9dGhpcy5QLkJoO2IhPT1hJiYoZSYmdC5pKGEsIm51bWJlciIsViwiZnJvbUVuZFNlZ21lbnRMZW5ndGgiKSwwPmEmJnQubGEoYSwiPj0gMCIsViwiZnJvbUVuZFNlZ21lbnRMZW5ndGgiKSx0aGlzLlAuQmg9YSx0aGlzLmooImZyb21FbmRTZWdtZW50TGVuZ3RoIixiLGEpLHRoaXMuYWMoKSl9KTsNCnQuZGVmaW5lUHJvcGVydHkoVix7aHA6ImZyb21FbmRTZWdtZW50RGlyZWN0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUD90aGlzLlAuQWg6SG19LGZ1bmN0aW9uKGEpe251bGw9PT10aGlzLlAmJnRoaXMuRmUoKTt2YXIgYj10aGlzLlAuQWg7YiE9PWEmJihlJiZ0LkFhKGEsUyxWLCJmcm9tRW5kU2VnbWVudERpcmVjdGlvbiIpLHRoaXMuUC5BaD1hLHRoaXMuaigiZnJvbUVuZFNlZ21lbnREaXJlY3Rpb24iLGIsYSksdGhpcy5hYygpKX0pO3QuZGVmaW5lUHJvcGVydHkoVix7aXA6ImZyb21TaG9ydExlbmd0aCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLlA/dGhpcy5QLkRoOk5hTn0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUCYmdGhpcy5GZSgpO3ZhciBiPXRoaXMuUC5EaDtiIT09YSYmKGUmJnQuaShhLCJudW1iZXIiLFYsImZyb21TaG9ydExlbmd0aCIpLHRoaXMuUC5EaD1hLHRoaXMuaigiZnJvbVNob3J0TGVuZ3RoIixiLGEpLHRoaXMuYWMoKSl9KTsNCnQuZGVmaW5lUHJvcGVydHkoVix7dGI6InRvU3BvdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLlA/dGhpcy5QLlVoOnhifSxmdW5jdGlvbihhKXtudWxsPT09dGhpcy5QJiZ0aGlzLkZlKCk7dmFyIGI9dGhpcy5QLlVoO2IuTShhKXx8KGUmJnQubChhLEksViwidG9TcG90IiksYT1hLlooKSx0aGlzLlAuVWg9YSx0aGlzLmooInRvU3BvdCIsYixhKSx0aGlzLmFjKCkpfSk7DQp0LmRlZmluZVByb3BlcnR5KFYse2lrOiJ0b0VuZFNlZ21lbnRMZW5ndGgifSxmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5QP3RoaXMuUC5SaDpOYU59LGZ1bmN0aW9uKGEpe251bGw9PT10aGlzLlAmJnRoaXMuRmUoKTt2YXIgYj10aGlzLlAuUmg7YiE9PWEmJihlJiZ0LmkoYSwibnVtYmVyIixWLCJ0b0VuZFNlZ21lbnRMZW5ndGgiKSwwPmEmJnQubGEoYSwiPj0gMCIsViwidG9FbmRTZWdtZW50TGVuZ3RoIiksdGhpcy5QLlJoPWEsdGhpcy5qKCJ0b0VuZFNlZ21lbnRMZW5ndGgiLGIsYSksdGhpcy5hYygpKX0pOw0KdC5kZWZpbmVQcm9wZXJ0eShWLHtYcDoidG9FbmRTZWdtZW50RGlyZWN0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuUD90aGlzLlAuUWg6SG19LGZ1bmN0aW9uKGEpe251bGw9PT10aGlzLlAmJnRoaXMuRmUoKTt2YXIgYj10aGlzLlAuUWg7YiE9PWEmJihlJiZ0LkFhKGEsUyxWLCJ0b0VuZFNlZ21lbnREaXJlY3Rpb24iKSx0aGlzLlAuUWg9YSx0aGlzLmooInRvRW5kU2VnbWVudERpcmVjdGlvbiIsYixhKSx0aGlzLmFjKCkpfSk7dC5kZWZpbmVQcm9wZXJ0eShWLHtZcDoidG9TaG9ydExlbmd0aCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLlA/dGhpcy5QLlRoOk5hTn0sZnVuY3Rpb24oYSl7bnVsbD09PXRoaXMuUCYmdGhpcy5GZSgpO3ZhciBiPXRoaXMuUC5UaDtiIT09YSYmKGUmJnQuaShhLCJudW1iZXIiLFYsInRvU2hvcnRMZW5ndGgiKSx0aGlzLlAuVGg9YSx0aGlzLmooInRvU2hvcnRMZW5ndGgiLGIsYSksdGhpcy5hYygpKX0pOw0KZnVuY3Rpb24gR2ooYSl7dmFyIGI9YS5hYSxjPWEuY2E7bnVsbCE9PWImJm51bGwhPT1jP2NuKGEsYi5GSShjKSk6Y24oYSxudWxsKX1mdW5jdGlvbiBjbihhLGIpe3ZhciBjPWEueWs7aWYoYyE9PWIpe251bGwhPT1jJiZCbShjLGEpO2EueWs9YjtudWxsIT09YiYmQ20oYixhKTt2YXIgZD1hLlh6O2lmKG51bGwhPT1kKXt2YXIgZj0hMCxnPWEuaDtudWxsIT09ZyYmKGY9Zy5OYSxnLk5hPSEwKTtkKGEsYyxiKTtudWxsIT09ZyYmKGcuTmE9Zil9IWEucmd8fGEub0QhPT1jJiZhLnFEIT09Y3x8YS5hYygpfX1WLnByb3RvdHlwZS5nZXRPdGhlck5vZGU9Vi5wcm90b3R5cGUua0E9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEsUyxWLCJnZXRPdGhlck5vZGU6bm9kZSIpO3ZhciBiPXRoaXMuYWE7cmV0dXJuIGE9PT1iP3RoaXMuY2E6Yn07DQpWLnByb3RvdHlwZS5nZXRPdGhlclBvcnQ9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEsUSxWLCJnZXRPdGhlclBvcnQ6cG9ydCIpO3ZhciBiPXRoaXMudWQ7cmV0dXJuIGE9PT1iP3RoaXMuZmU6Yn07dC5BKFYse0JLOiJpc0xhYmVsZWRMaW5rIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMud2U/ITE6MDx0aGlzLndlLmNvdW50fSk7dC5BKFYse2VrOiJsYWJlbE5vZGVzIn0sZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMud2U/dC5hZzp0aGlzLndlLmt9KTtmdW5jdGlvbiBQbShhLGIpe251bGw9PT1hLndlJiYoYS53ZT1uZXcgQyhTKSk7YS53ZS5hZGQoYik7YS5mYSgpfQ0KVi5wcm90b3R5cGUua3Q9ZnVuY3Rpb24oYSl7RS5wcm90b3R5cGUua3QuY2FsbCh0aGlzLGEpO2RuKHRoaXMpJiZ6Zyh0aGlzLHRoaXMucGEpO2lmKCFhKXthPXRoaXMuZWc7dmFyIGI9dGhpcy5xZztudWxsIT09YSYmKE5tKGEsdGhpcyx0aGlzLnVkKSxibih0aGlzKSk7bnVsbCE9PWImJihObShiLHRoaXMsdGhpcy5mZSksYm4odGhpcykpfX07Vi5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oYSl7RS5wcm90b3R5cGUubHQuY2FsbCh0aGlzLGEpO2RuKHRoaXMpJiZ6Zyh0aGlzLHRoaXMucGEpO2lmKCFhKXthPXRoaXMuZWc7dmFyIGI9dGhpcy5xZztudWxsIT09YSYmKE9tKGEsdGhpcyx0aGlzLnVkKSxhbih0aGlzKSk7bnVsbCE9PWImJihPbShiLHRoaXMsdGhpcy5mZSksYW4odGhpcykpfX07DQpWLnByb3RvdHlwZS5NbT1mdW5jdGlvbigpe3RoaXMucmc9ITA7aWYobnVsbCE9PXRoaXMud2Upe3ZhciBhPXRoaXMuaDtpZihudWxsPT09YSlyZXR1cm47Zm9yKHZhciBiPXRoaXMud2UuY29weSgpLms7Yi5uZXh0KCk7KWEucmVtb3ZlKGIudmFsdWUpfWI9dGhpcy5kYXRhO251bGwhPT1iJiYoYT10aGlzLmgsbnVsbCE9PWEmJihhPWEuYmEsYSBpbnN0YW5jZW9mIFA/YS5XQShiKTphIGluc3RhbmNlb2YgS2QmJmEubWgoYix2b2lkIDApKSl9Ow0KVi5wcm90b3R5cGUudXBkYXRlTW9kZWxEYXRhUmVmZXJlbmNlcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YTtpZihudWxsIT09YSl7dmFyIGI9dGhpcy5oO2lmKG51bGwhPT1iKXt2YXIgYz1iLmJhO2lmKGMgaW5zdGFuY2VvZiBQKXt2YXIgZD1jLmhsKGEpLGY9Yi5WZShkKSxnPXRoaXMuYWE7ZiE9PWcmJihmPW51bGwhPT1nP2MuSGIoZy5kYXRhKTp2b2lkIDAsZz1jLlltLCJmdW5jdGlvbiI9PT10eXBlb2YgZz9nKGEsZik6YVtnXT1mLGMudngoYSxkKSk7ZD1jLmxsKGEpO2Y9Yi5WZShkKTtnPXRoaXMuY2E7ZiE9PWcmJihmPW51bGwhPT1nP2MuSGIoZy5kYXRhKTp2b2lkIDAsZz1jLlptLCJmdW5jdGlvbiI9PT10eXBlb2YgZz9nKGEsZik6YVtnXT1mLGMueHgoYSxkKSl9fX19Ow0KVi5wcm90b3R5cGUubW92ZT1WLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucG9zaXRpb24sYz1iLng7aXNOYU4oYykmJihjPTApO2I9Yi55O2lzTmFOKGIpJiYoYj0wKTtjPWEueC1jO2I9YS55LWI7RS5wcm90b3R5cGUubW92ZS5jYWxsKHRoaXMsYSk7dGhpcy5wbChjLGIpO2ZvcihhPXRoaXMuZWs7YS5uZXh0KCk7KXt2YXIgZD1hLnZhbHVlLGY9ZC5wb3NpdGlvbjtkLm1vdmVUbyhmLngrYyxmLnkrYil9fTt0LmcoViwicmVsaW5rYWJsZUZyb20iLFYucHJvdG90eXBlLk1GKTt0LmRlZmluZVByb3BlcnR5KFYse01GOiJyZWxpbmthYmxlRnJvbSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVHJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuVHI7YiE9PWEmJihlJiZ0LmkoYSwiYm9vbGVhbiIsViwicmVsaW5rYWJsZUZyb20iKSx0aGlzLlRyPWEsdGhpcy5qKCJyZWxpbmthYmxlRnJvbSIsYixhKSx0aGlzLnVwZGF0ZUFkb3JubWVudHMoKSl9KTsNCnQuZyhWLCJyZWxpbmthYmxlVG8iLFYucHJvdG90eXBlLk5GKTt0LmRlZmluZVByb3BlcnR5KFYse05GOiJyZWxpbmthYmxlVG8ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlVyfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlVyO2IhPT1hJiYoZSYmdC5pKGEsImJvb2xlYW4iLFYsInJlbGlua2FibGVUbyIpLHRoaXMuVXI9YSx0aGlzLmooInJlbGlua2FibGVUbyIsYixhKSx0aGlzLnVwZGF0ZUFkb3JubWVudHMoKSl9KTtWLnByb3RvdHlwZS5jYW5SZWxpbmtGcm9tPWZ1bmN0aW9uKCl7aWYoIXRoaXMuTUYpcmV0dXJuITE7dmFyIGE9dGhpcy5sYXllcjtpZihudWxsPT09YSlyZXR1cm4hMDtpZighYS5UailyZXR1cm4hMTthPWEuaDtyZXR1cm4gbnVsbD09PWF8fGEuVGo/ITA6ITF9Ow0KVi5wcm90b3R5cGUuY2FuUmVsaW5rVG89ZnVuY3Rpb24oKXtpZighdGhpcy5ORilyZXR1cm4hMTt2YXIgYT10aGlzLmxheWVyO2lmKG51bGw9PT1hKXJldHVybiEwO2lmKCFhLlRqKXJldHVybiExO2E9YS5oO3JldHVybiBudWxsPT09YXx8YS5Uaj8hMDohMX07dC5nKFYsInJlc2VnbWVudGFibGUiLFYucHJvdG90eXBlLktwKTt0LmRlZmluZVByb3BlcnR5KFYse0twOiJyZXNlZ21lbnRhYmxlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Wcn0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5WcjtiIT09YSYmKGUmJnQuaShhLCJib29sZWFuIixWLCJyZXNlZ21lbnRhYmxlIiksdGhpcy5Wcj1hLHRoaXMuaigicmVzZWdtZW50YWJsZSIsYixhKSx0aGlzLnVwZGF0ZUFkb3JubWVudHMoKSl9KTt0LmcoViwiaXNUcmVlTGluayIsVi5wcm90b3R5cGUuRmMpOw0KdC5kZWZpbmVQcm9wZXJ0eShWLHtGYzoiaXNUcmVlTGluayJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZnI7YiE9PWEmJihlJiZ0LmkoYSwiYm9vbGVhbiIsViwiaXNUcmVlTGluayIpLHRoaXMuZnI9YSx0aGlzLmooImlzVHJlZUxpbmsiLGIsYSksbnVsbCE9PXRoaXMuYWEmJkxqKHRoaXMuYWEpLG51bGwhPT10aGlzLmNhJiZMaih0aGlzLmNhKSl9KTt0LkEoVix7cGF0aDoicGF0aCJ9LGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5KaTtpZihudWxsIT09YSlyZXR1cm4gYTthPXRoaXMueGE7YT1Fayh0aGlzLGEsYS5sZW5ndGgpO3JldHVybiBhIGluc3RhbmNlb2YgVz90aGlzLkppPWE6bnVsbH0pO1YucHJvdG90eXBlLlJxPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aH07Vi5wcm90b3R5cGUuU3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DY307DQpWLnByb3RvdHlwZS52aj1mdW5jdGlvbigpe3RoaXMudXBkYXRlUm91dGUoKTt2YXIgYT1uZXcgeDt0aGlzLnFmKGEpO3JldHVybiB0aGlzLnB6PWF9Ow0KVi5wcm90b3R5cGUucWY9ZnVuY3Rpb24oYSl7dmFyIGI9SW5maW5pdHksYz1JbmZpbml0eSxkPXRoaXMub2E7aWYoMD09PWQpcmV0dXJuIGEucChOYU4sTmFOLDAsMCksYTtpZigxPT09ZClkPXRoaXMubygwKSxiPU1hdGgubWluKGQueCxiKSxjPU1hdGgubWluKGQueSxjKSxhLnAoZC54LGQueSwwLDApO2Vsc2UgaWYoMj09PWQpe3ZhciBmPXRoaXMubygwKSxnPXRoaXMubygxKSxiPU1hdGgubWluKGYueCxnLngpLGM9TWF0aC5taW4oZi55LGcueSk7YS5wKGYueCxmLnksMCwwKTthLmtqKGcpfWVsc2UgaWYodGhpcy5jb21wdXRlQ3VydmUoKT09PU9nJiYzPD1kJiYhdGhpcy5pYylpZihmPXRoaXMubygwKSxiPWYueCxjPWYueSxhLnAoYixjLDAsMCksMz09PWQpZD10aGlzLm8oMSksYj1NYXRoLm1pbihkLngsYiksYz1NYXRoLm1pbihkLnksYyksZz10aGlzLm8oMiksYj1NYXRoLm1pbihnLngsYiksYz1NYXRoLm1pbihnLnksYyksSC5TbyhmLngsZi55LGQueCxkLnksZC54LGQueSxnLngsDQpnLnksMC41LGEpO2Vsc2UgZm9yKHZhciBoLGssbD0zO2w8ZDtsKz0zKWg9dGhpcy5vKGwtMiksbCszPj1kJiYobD1kLTEpLGs9dGhpcy5vKGwtMSksZz10aGlzLm8obCksSC5TbyhmLngsZi55LGgueCxoLnksay54LGsueSxnLngsZy55LDAuNSxhKSxiPU1hdGgubWluKGcueCxiKSxjPU1hdGgubWluKGcueSxjKSxmPWc7ZWxzZSBmb3IoZj10aGlzLm8oMCksZz10aGlzLm8oMSksYj1NYXRoLm1pbihmLngsZy54KSxjPU1hdGgubWluKGYueSxnLnkpLGEucChmLngsZi55LDAsMCksYS5raihnKSxsPTI7bDxkO2wrKylmPXRoaXMubyhsKSxiPU1hdGgubWluKGYueCxiKSxjPU1hdGgubWluKGYueSxjKSxhLmtqKGYpO3RoaXMuQXoucChiLWEueCxjLWEueSk7cmV0dXJuIGF9O3QuQShWLHt6RjoibWlkUG9pbnQifSxmdW5jdGlvbigpe3RoaXMudXBkYXRlUm91dGUoKTtyZXR1cm4gdGhpcy5jb21wdXRlTWlkUG9pbnQobmV3IHcpfSk7DQpWLnByb3RvdHlwZS5jb21wdXRlTWlkUG9pbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5vYTtpZigwPT09YilyZXR1cm4gYS5hc3NpZ24oSC5lSCksYTtpZigxPT09YilyZXR1cm4gYS5hc3NpZ24odGhpcy5vKDApKSxhO2lmKDI9PT1iKXt2YXIgYz10aGlzLm8oMCksZD10aGlzLm8oMSk7YS5wKChjLngrZC54KS8yLChjLnkrZC55KS8yKTtyZXR1cm4gYX1pZih0aGlzLmNvbXB1dGVDdXJ2ZSgpPT09T2cmJjM8PWImJiF0aGlzLmljKXtpZigzPT09YilyZXR1cm4gdGhpcy5vKDEpO3ZhciBiPShiLTEpLzN8MCxmPTMqKGIvMnwwKTsxPT09YiUyPyhjPXRoaXMubyhmKSxkPXRoaXMubyhmKzEpLGI9dGhpcy5vKGYrMiksZj10aGlzLm8oZiszKSxILmJJKGMueCxjLnksZC54LGQueSxiLngsYi55LGYueCxmLnksYSkpOmEuYXNzaWduKHRoaXMubyhmKSk7cmV0dXJuIGF9Zm9yKHZhciBmPTAsZz10LkNiKCksaD0wO2g8Yi0xO2grKyljPXRoaXMubyhoKSxkPXRoaXMubyhoKzEpLEgubmIoYy54LA0KZC54KT8oYz1kLnktYy55LDA+YyYmKGM9LWMpKTpILm5iKGMueSxkLnkpPyhjPWQueC1jLngsMD5jJiYoYz0tYykpOmM9TWF0aC5zcXJ0KGMuWmooZCkpLGcucHVzaChjKSxmKz1jO2ZvcihkPWg9Yz0wO2M8Zi8yJiZoPGI7KXtkPWdbaF07aWYoYytkPmYvMilicmVhaztjKz1kO2grK310LnlhKGcpO2I9dGhpcy5vKGgpO2c9dGhpcy5vKGgrMSk7Yi54PT09Zy54P2IueT5nLnk/YS5wKGIueCxiLnktKGYvMi1jKSk6YS5wKGIueCxiLnkrKGYvMi1jKSk6Yi55PT09Zy55P2IueD5nLng/YS5wKGIueC0oZi8yLWMpLGIueSk6YS5wKGIueCsoZi8yLWMpLGIueSk6KGY9KGYvMi1jKS9kLGEucChiLngrZiooZy54LWIueCksYi55K2YqKGcueS1iLnkpKSk7cmV0dXJuIGF9O3QuQShWLHt5RjoibWlkQW5nbGUifSxmdW5jdGlvbigpe3RoaXMudXBkYXRlUm91dGUoKTtyZXR1cm4gdGhpcy5jb21wdXRlTWlkQW5nbGUoKX0pOw0KVi5wcm90b3R5cGUuY29tcHV0ZU1pZEFuZ2xlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vYTtpZigyPmEpcmV0dXJuIE5hTjtpZih0aGlzLmNvbXB1dGVDdXJ2ZSgpPT09T2cmJjQ8PWEmJiF0aGlzLmljKXt2YXIgYj0oYS0xKS8zfDAsYz0zKihiLzJ8MCk7aWYoMT09PWIlMil7dmFyIGM9TWF0aC5mbG9vcihjKSxhPXRoaXMubyhjKSxiPXRoaXMubyhjKzEpLGQ9dGhpcy5vKGMrMiksYz10aGlzLm8oYyszKTtyZXR1cm4gSC5hSShhLngsYS55LGIueCxiLnksZC54LGQueSxjLngsYy55KX1pZigwPGMmJmMrMTxhKXJldHVybiBhPXRoaXMubyhjLTEpLGI9dGhpcy5vKGMrMSksYS4kaShiKX1kPWEvMnwwO2lmKDA9PT1hJTIpcmV0dXJuIGE9dGhpcy5vKGQtMSksYj10aGlzLm8oZCksYS4kaShiKTt2YXIgYT10aGlzLm8oZC0xKSxiPXRoaXMubyhkKSxkPXRoaXMubyhkKzEpLGM9YS5aaihiKSxmPWIuWmooZCk7cmV0dXJuIGM+Zj9hLiRpKGIpOmIuJGkoZCl9O3QuZyhWLCJwb2ludHMiLFYucHJvdG90eXBlLnBvaW50cyk7DQp0LmRlZmluZVByb3BlcnR5KFYse3BvaW50czoicG9pbnRzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DY30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5DYztpZihiIT09YSl7ZSYmKEFycmF5LmlzQXJyYXkoYSl8fGEgaW5zdGFuY2VvZiBCfHx0Lm0oIkxpbmsucG9pbnRzIHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBMaXN0IG9yIEFycmF5IikpO3ZhciBjPWE7aWYoQXJyYXkuaXNBcnJheShhKSl7dmFyIGQ9MD09PWEubGVuZ3RoJTI7aWYoZClmb3IodmFyIGY9MDtmPGEubGVuZ3RoO2YrKylpZigibnVtYmVyIiE9PXR5cGVvZiBhW2ZdKXtkPSExO2JyZWFrfWlmKGQpZm9yKGM9bmV3IEIodyksZD0wO2Q8YS5sZW5ndGgvMjtkKyspZj0obmV3IHcoYVsyKmRdLGFbMipkKzFdKSkuZnJlZXplKCksYy5hZGQoZik7ZWxzZSB0Lm0oIkxpbmsucG9pbnRzIGFycmF5IG11c3QgY29udGFpbiBvbmx5IG51bWJlcnMiKX1lbHNlIGZvcihjPWEuY29weSgpLGE9Yy5rO2EubmV4dCgpOylhLnZhbHVlLmZyZWV6ZSgpOw0KYy5mcmVlemUoKTt0aGlzLkNjPWM7dGhpcy5ZZSgpO2VuKHRoaXMpO3RoaXMuaCYmdGhpcy5oLlpiLnNkJiYodGhpcy54bz1jKTt0aGlzLmooInBvaW50cyIsYixjKX19KTt0LkEoVix7b2E6InBvaW50c0NvdW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DYy5jb3VudH0pO1YucHJvdG90eXBlLmdldFBvaW50PVYucHJvdG90eXBlLm89ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuQ2MublthXX07Vi5wcm90b3R5cGUuc2V0UG9pbnQ9Vi5wcm90b3R5cGUuRWY9ZnVuY3Rpb24oYSxiKXtlJiYodC5sKGIsdyxWLCJzZXRQb2ludCIpLGIuTigpfHx0Lm0oIkxpbmsuc2V0UG9pbnQgY2FsbGVkIHdpdGggYSBQb2ludCB0aGF0IGRvZXMgbm90IGhhdmUgcmVhbCBudW1iZXJzOiAiK2IudG9TdHJpbmcoKSkpO251bGw9PT10aGlzLnhlJiZ0Lm0oIkNhbGwgTGluay5zdGFydFJvdXRlIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHBvaW50cyBvZiB0aGUgcm91dGUuIik7dGhpcy5DYy5NZyhhLGIpfTsNClYucHJvdG90eXBlLnNldFBvaW50QXQ9Vi5wcm90b3R5cGUuWT1mdW5jdGlvbihhLGIsYyl7ZSYmKHQucShiLFYsInNldFBvaW50QXQ6eCIpLHQucShjLFYsInNldFBvaW50QXQ6eSIpKTtudWxsPT09dGhpcy54ZSYmdC5tKCJDYWxsIExpbmsuc3RhcnRSb3V0ZSBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBwb2ludHMgb2YgdGhlIHJvdXRlLiIpO3RoaXMuQ2MuTWcoYSxuZXcgdyhiLGMpKX07Vi5wcm90b3R5cGUuaW5zZXJ0UG9pbnQ9ZnVuY3Rpb24oYSxiKXtlJiYodC5sKGIsdyxWLCJpbnNlcnRQb2ludCIpLGIuTigpfHx0Lm0oIkxpbmsuaW5zZXJ0UG9pbnQgY2FsbGVkIHdpdGggYSBQb2ludCB0aGF0IGRvZXMgbm90IGhhdmUgcmVhbCBudW1iZXJzOiAiK2IudG9TdHJpbmcoKSkpO251bGw9PT10aGlzLnhlJiZ0Lm0oIkNhbGwgTGluay5zdGFydFJvdXRlIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHBvaW50cyBvZiB0aGUgcm91dGUuIik7dGhpcy5DYy5KZChhLGIpfTsNClYucHJvdG90eXBlLmluc2VydFBvaW50QXQ9Vi5wcm90b3R5cGUuQz1mdW5jdGlvbihhLGIsYyl7ZSYmKHQucShiLFYsImluc2VydFBvaW50QXQ6eCIpLHQucShjLFYsImluc2VydFBvaW50QXQ6eSIpKTtudWxsPT09dGhpcy54ZSYmdC5tKCJDYWxsIExpbmsuc3RhcnRSb3V0ZSBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBwb2ludHMgb2YgdGhlIHJvdXRlLiIpO3RoaXMuQ2MuSmQoYSxuZXcgdyhiLGMpKX07Vi5wcm90b3R5cGUuYWRkUG9pbnQ9Vi5wcm90b3R5cGUuV2g9ZnVuY3Rpb24oYSl7ZSYmKHQubChhLHcsViwiYWRkUG9pbnQiKSxhLk4oKXx8dC5tKCJMaW5rLmFkZFBvaW50IGNhbGxlZCB3aXRoIGEgUG9pbnQgdGhhdCBkb2VzIG5vdCBoYXZlIHJlYWwgbnVtYmVyczogIithLnRvU3RyaW5nKCkpKTtudWxsPT09dGhpcy54ZSYmdC5tKCJDYWxsIExpbmsuc3RhcnRSb3V0ZSBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBwb2ludHMgb2YgdGhlIHJvdXRlLiIpO3RoaXMuQ2MuYWRkKGEpfTsNClYucHJvdG90eXBlLmFkZFBvaW50QXQ9Vi5wcm90b3R5cGUuV2s9ZnVuY3Rpb24oYSxiKXtlJiYodC5xKGEsViwiaW5zZXJ0UG9pbnRBdDp4IiksdC5xKGIsViwiaW5zZXJ0UG9pbnRBdDp5IikpO251bGw9PT10aGlzLnhlJiZ0Lm0oIkNhbGwgTGluay5zdGFydFJvdXRlIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHBvaW50cyBvZiB0aGUgcm91dGUuIik7dGhpcy5DYy5hZGQobmV3IHcoYSxiKSl9O1YucHJvdG90eXBlLnJlbW92ZVBvaW50PVYucHJvdG90eXBlLlFGPWZ1bmN0aW9uKGEpe251bGw9PT10aGlzLnhlJiZ0Lm0oIkNhbGwgTGluay5zdGFydFJvdXRlIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHBvaW50cyBvZiB0aGUgcm91dGUuIik7dGhpcy5DYy5xZChhKX07DQpWLnByb3RvdHlwZS5jbGVhclBvaW50cz1WLnByb3RvdHlwZS5Vbz1mdW5jdGlvbigpe251bGw9PT10aGlzLnhlJiZ0Lm0oIkNhbGwgTGluay5zdGFydFJvdXRlIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHBvaW50cyBvZiB0aGUgcm91dGUuIik7dGhpcy5DYy5jbGVhcigpfTtWLnByb3RvdHlwZS5tb3ZlUG9pbnRzPVYucHJvdG90eXBlLnBsPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPW5ldyBCKHcpLGQ9dGhpcy5DYy5rO2QubmV4dCgpOyl7dmFyIGY9ZC52YWx1ZTtjLmFkZCgobmV3IHcoZi54K2EsZi55K2IpKS5mcmVlemUoKSl9Yy5mcmVlemUoKTtkPXRoaXMuQ2M7dGhpcy5DYz1jO3RoaXMuWWUoKTtlbih0aGlzKTt0aGlzLmgmJnRoaXMuaC5aYi5zZCYmKHRoaXMueG89Yyk7dGhpcy5qKCJwb2ludHMiLGQsYyl9O1YucHJvdG90eXBlLnN0YXJ0Um91dGU9Vi5wcm90b3R5cGUueWw9ZnVuY3Rpb24oKXtudWxsPT09dGhpcy54ZSYmKHRoaXMueGU9dGhpcy5DYyx0aGlzLkNjPXRoaXMuQ2MuY29weSgpKX07DQpWLnByb3RvdHlwZS5jb21taXRSb3V0ZT1WLnByb3RvdHlwZS5XaT1mdW5jdGlvbigpe2lmKG51bGwhPT10aGlzLnhlKXtmb3IodmFyIGE9dGhpcy54ZSxiPXRoaXMuQ2MsYz1JbmZpbml0eSxkPUluZmluaXR5LGY9YS5jb3VudCxnPTA7ZzxmO2crKyl2YXIgaD1hLm5bZ10sYz1NYXRoLm1pbihoLngsYyksZD1NYXRoLm1pbihoLnksZCk7Zm9yKHZhciBrPUluZmluaXR5LGw9SW5maW5pdHksbT1iLmNvdW50LGc9MDtnPG07ZysrKWg9Yi5uW2ddLGs9TWF0aC5taW4oaC54LGspLGw9TWF0aC5taW4oaC55LGwpLGguZnJlZXplKCk7Yi5mcmVlemUoKTtpZihtPT09Zilmb3IoZz0wO2c8bTtnKyspe2lmKGY9YS5uW2ddLGg9Yi5uW2ddLGYueC1jIT09aC54LWt8fGYueS1kIT09aC55LWwpe3RoaXMuWWUoKTticmVha319ZWxzZSB0aGlzLlllKCk7dGhpcy54ZT1udWxsO3RoaXMuaCYmdGhpcy5oLlpiLnNkJiYodGhpcy54bz1iKTtlbih0aGlzKTt0aGlzLmooInBvaW50cyIsYSxiKX19Ow0KVi5wcm90b3R5cGUucm9sbGJhY2tSb3V0ZT1WLnByb3RvdHlwZS5MSj1mdW5jdGlvbigpe251bGwhPT10aGlzLnhlJiYodGhpcy5DYz10aGlzLnhlLHRoaXMueGU9bnVsbCl9O2Z1bmN0aW9uIGVuKGEpezA9PT1hLkNjLmNvdW50P2Eucmc9ITE6KGEucmc9ITAsYS5Gbj1hLm8oMCkuY29weSgpLGEuSm49YS5vKGEub2EtMSkuY29weSgpLGZuKGEsITEpKX1WLnByb3RvdHlwZS5pbnZhbGlkYXRlUm91dGU9Vi5wcm90b3R5cGUuYWM9ZnVuY3Rpb24oKXtpZighKHRoaXMud3p8fHRoaXMuaCYmdGhpcy5oLmphLnNiKSl7dmFyIGE9dGhpcy5ScSgpO251bGwhPT1hJiYodGhpcy5yZz0hMSx0aGlzLlllKCksYS5mYSgpKX19O3QuZGVmaW5lUHJvcGVydHkoVix7V3A6bnVsbH0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53en0sZnVuY3Rpb24oYSl7dGhpcy53ej1hfSk7DQpWLnByb3RvdHlwZS51cGRhdGVSb3V0ZT1mdW5jdGlvbigpe2lmKCF0aGlzLnJnJiYhdGhpcy5xeSl7dmFyIGE9ITA7dHJ5e3RoaXMucXk9ITAsdGhpcy55bCgpLGE9dGhpcy5jb21wdXRlUG9pbnRzKCl9ZmluYWxseXt0aGlzLnF5PSExLGE/dGhpcy5XaSgpOnRoaXMuTEooKX19fTsNClYucHJvdG90eXBlLmNvbXB1dGVQb2ludHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7aWYobnVsbD09PWEpcmV0dXJuITE7dmFyIGI9dGhpcy5hYSxjPW51bGw7bnVsbD09PWI/KGEub218fChhLkF2PW5ldyBXLGEuQXYuQ2E9SC5ncSxhLkF2LmZiPTAsYS5vbT1uZXcgUyxhLm9tLmFkZChhLkF2KSxhLm9tLnNmKCkpLHRoaXMuRm4mJihhLm9tLnBvc2l0aW9uPWEub20ubG9jYXRpb249dGhpcy5GbixhLm9tLnNmKCksYj1hLm9tLGM9YS5BdikpOmM9dGhpcy51ZDtpZihudWxsIT09Yyl7dmFyIGQ9T2soYyk7ZCE9PWImJmIuUWEoKT9jPWQ6KGQ9Yi5maW5kVmlzaWJsZU5vZGUoKSxudWxsIT09ZCYmZCE9PWI/KGI9ZCxjPWQuZmwoIiIpKTpiPWQpfXRoaXMub0Q9YjtpZihudWxsPT09Ynx8bnVsbD09PWN8fCFiLmxvY2F0aW9uLk4oKSlyZXR1cm4hMTt2YXIgZD10aGlzLmNhLGY9bnVsbDtudWxsPT09ZD8oYS5wbXx8KGEuQnY9bmV3IFcsYS5Cdi5DYT1ILmdxLGEuQnYuZmI9MCxhLnBtPQ0KbmV3IFMsYS5wbS5hZGQoYS5CdiksYS5wbS5zZigpKSx0aGlzLkpuJiYoYS5wbS5wb3NpdGlvbj1hLnBtLmxvY2F0aW9uPXRoaXMuSm4sYS5wbS5zZigpLGQ9YS5wbSxmPWEuQnYpKTpmPXRoaXMuZmU7bnVsbCE9PWYmJihhPU9rKGYpLGEhPT1kJiZkLlFhKCk/Zj1hOihhPWQuZmluZFZpc2libGVOb2RlKCksbnVsbCE9PWEmJmEhPT1kPyhkPWEsZj1hLmZsKCIiKSk6ZD1hKSk7dGhpcy5xRD1kO2lmKG51bGw9PT1kfHxudWxsPT09Znx8IWQubG9jYXRpb24uTigpKXJldHVybiExO3ZhciBhPXRoaXMub2EsZz1nbih0aGlzLGMpLGg9aG4odGhpcyxmKSxrPWM9PT1mJiZudWxsIT09YyxsPXRoaXMuaWMsbT10aGlzLkRlPT09T2c7dGhpcy51aT1rJiYhbD9tPSEwOiExO3ZhciBuPXRoaXMuTG89PT15Z3x8aztpZihsfHxnIT09d2J8fGghPT13Ynx8ayl7bT10aGlzLmRqO24mJihsJiZtfHxrKSYmdGhpcy5VbygpO3ZhciBwPWs/dGhpcy5jb21wdXRlQ3VydmluZXNzKCk6MCxxPXRoaXMuZ2V0TGlua1BvaW50KGIsDQpjLGcsITAsbCxkLGYpLHI9MCxzPTAsdT0wO2lmKGx8fGchPT13Ynx8ayl7dmFyIHY9dGhpcy5jb21wdXRlRW5kU2VnbWVudExlbmd0aChiLGMsZywhMCksdT10aGlzLmdldExpbmtEaXJlY3Rpb24oYixjLHEsZywhMCxsLGQsZik7ayYmKHUtPWw/OTA6MzAsMD5wJiYodS09MTgwKSk7MD51P3UrPTM2MDozNjA8PXUmJih1LT0zNjApO2smJih2Kz1NYXRoLmFicyhwKSk7MD09PXU/cj12OjkwPT09dT9zPXY6MTgwPT09dT9yPS12OjI3MD09PXU/cz0tdjoocj12Kk1hdGguY29zKHUqTWF0aC5QSS8xODApLHM9dipNYXRoLnNpbih1Kk1hdGguUEkvMTgwKSk7aWYoZy5HZSgpJiZrKXt2YXIgRD1jLnFiKEtiLHQuSygpKSxBPXQubGMoRC54KzFFMypyLEQueSsxRTMqcyk7dGhpcy5nZXRMaW5rUG9pbnRGcm9tUG9pbnQoYixjLEQsQSwhMCxxKTt0LkIoRCk7dC5CKEEpfX12YXIgdj10aGlzLmdldExpbmtQb2ludChkLGYsaCwhMSxsLGIsYyksRz0wLEw9MCxOPTA7aWYobHx8aCE9PXdifHxrKUQ9DQp0aGlzLmNvbXB1dGVFbmRTZWdtZW50TGVuZ3RoKGQsZixoLCExKSxOPXRoaXMuZ2V0TGlua0RpcmVjdGlvbihkLGYsdixoLCExLGwsYixjKSxrJiYoTis9bD8wOjMwLDA+cCYmKE4rPTE4MCkpLDA+Tj9OKz0zNjA6MzYwPD1OJiYoTi09MzYwKSxrJiYoRCs9TWF0aC5hYnMocCkpLDA9PT1OP0c9RDo5MD09PU4/TD1EOjE4MD09PU4/Rz0tRDoyNzA9PT1OP0w9LUQ6KEc9RCpNYXRoLmNvcyhOKk1hdGguUEkvMTgwKSxMPUQqTWF0aC5zaW4oTipNYXRoLlBJLzE4MCkpLGguR2UoKSYmayYmKEQ9Zi5xYihLYix0LksoKSksQT10LmxjKEQueCsxRTMqRyxELnkrMUUzKkwpLHRoaXMuZ2V0TGlua1BvaW50RnJvbVBvaW50KGQsZixELEEsITEsdiksdC5CKEQpLHQuQihBKSk7Zj1xO2lmKGx8fGchPT13Ynx8aylmPW5ldyB3KHEueCtyLHEueStzKTtjPXY7aWYobHx8aCE9PXdifHxrKWM9bmV3IHcodi54K0csdi55K0wpOyFuJiYhbCYmZz09PXdiJiYzPGEmJnRoaXMuYWRqdXN0UG9pbnRzKDAscSwNCmEtMixjKT90aGlzLkVmKGEtMSx2KTohbiYmIWwmJmg9PT13YiYmMzxhJiZ0aGlzLmFkanVzdFBvaW50cygxLGYsYS0xLHYpP3RoaXMuRWYoMCxxKTohbiYmIWwmJjQ8YSYmdGhpcy5hZGp1c3RQb2ludHMoMSxmLGEtMixjKT8odGhpcy5FZigwLHEpLHRoaXMuRWYoYS0xLHYpKTohbiYmbCYmNjw9YSYmIW0mJnRoaXMuYWRqdXN0UG9pbnRzKDEsZixhLTIsYyk/KHRoaXMuRWYoMCxxKSx0aGlzLkVmKGEtMSx2KSk6KHRoaXMuVW8oKSx0aGlzLldoKHEpLChsfHxnIT09d2J8fGspJiZ0aGlzLldoKGYpLGwmJnRoaXMuYWRkT3J0aG9Qb2ludHMoZix1LGMsTixiLGQpLChsfHxoIT09d2J8fGspJiZ0aGlzLldoKGMpLHRoaXMuV2godikpfWVsc2UgZz0hMSwhbiYmMzw9YSYmKG49dGhpcy5nZXRMaW5rUG9pbnQoYixjLHdiLCEwLCExLGQsZiksZz10aGlzLmdldExpbmtQb2ludChkLGYsd2IsITEsITEsYixjKSxnPXRoaXMuYWRqdXN0UG9pbnRzKDAsbixhLTEsZykpLGd8fCh0aGlzLlVvKCksbT8NCihhPXRoaXMuZ2V0TGlua1BvaW50KGIsYyx3YiwhMCwhMSxkLGYpLG49dGhpcy5nZXRMaW5rUG9pbnQoZCxmLHdiLCExLCExLGIsYyksZz1uLngtYS54LGg9bi55LWEueSxrPXRoaXMuY29tcHV0ZUN1cnZpbmVzcygpLG09bD0wLHE9YS54K2cvMyx1PWEueStoLzMscj1xLHM9dSxILkkoaCwwKT9zPTA8Zz9zLWs6cytrOihsPS1nL2gsbT1NYXRoLnNxcnQoayprLyhsKmwrMSkpLDA+ayYmKG09LW0pLHI9KDA+aD8tMToxKSptK3Escz1sKihyLXEpK3UpLHE9YS54KzIqZy8zLHU9YS55KzIqaC8zLHY9cSxHPXUsSC5JKGgsMCk/Rz0wPGc/Ry1rOkcrazoodj0oMD5oPy0xOjEpKm0rcSxHPWwqKHYtcSkrdSksdGhpcy5VbygpLHRoaXMuV2goYSksdGhpcy5XayhyLHMpLHRoaXMuV2sodixHKSx0aGlzLldoKG4pLHRoaXMuRWYoMCx0aGlzLmdldExpbmtQb2ludChiLGMsd2IsITAsITEsZCxmKSksdGhpcy5FZigzLHRoaXMuZ2V0TGlua1BvaW50KGQsZix3YiwhMSwhMSxiLGMpKSk6KGE9ZCxkPQ0KdGhpcy5nZXRMaW5rUG9pbnQoYixjLHdiLCEwLCExLGEsZiksZj10aGlzLmdldExpbmtQb2ludChhLGYsd2IsITEsITEsYixjKSx0aGlzLmhhc0N1cnZpbmVzcygpPyhoPWYueC1kLngsYj1mLnktZC55LGM9dGhpcy5jb21wdXRlQ3VydmluZXNzKCksYT1kLngraC8yLG49ZC55K2IvMixnPWEsaz1uLEguSShiLDApP2s9MDxoP2stYzprK2M6KGg9LWgvYixnPU1hdGguc3FydChjKmMvKGgqaCsxKSksMD5jJiYoZz0tZyksZz0oMD5iPy0xOjEpKmcrYSxrPWgqKGctYSkrbiksdGhpcy5XaChkKSx0aGlzLldrKGcsaykpOnRoaXMuV2goZCksdGhpcy5XaChmKSkpO3JldHVybiEwfTtmdW5jdGlvbiBqbihhLGIpe01hdGguYWJzKGIueC1hLngpPk1hdGguYWJzKGIueS1hLnkpPyhiLng9Yi54Pj1hLng/YS54KzlFOTphLngtOUU5LGIueT1hLnkpOihiLnk9Yi55Pj1hLnk/YS55KzlFOTphLnktOUU5LGIueD1hLngpO3JldHVybiBifQ0KVi5wcm90b3R5cGUuZ2V0TGlua1BvaW50RnJvbVBvaW50PWZ1bmN0aW9uKGEsYixjLGQsZixnKXt2b2lkIDA9PT1nJiYoZz1uZXcgdyk7aWYobnVsbD09PWF8fG51bGw9PT1iKXJldHVybiBnLmFzc2lnbihjKSxnO2EuUWEoKXx8KGY9YS5maW5kVmlzaWJsZU5vZGUoKSxudWxsIT09ZiYmZiE9PWEmJihiPWYucG9ydCkpO3ZhciBoO2E9bnVsbDtmPWIuaWE7bnVsbD09PWZ8fGYuSGYoKXx8KGY9Zi5pYSk7aWYobnVsbD09PWYpZj1kLngsZD1kLnksaD1jLngsYz1jLnk7ZWxzZXthPWYubWU7Zj0xLyhhLm0xMSphLm0yMi1hLm0xMiphLm0yMSk7aD1hLm0yMipmO3ZhciBrPS1hLm0xMipmLGw9LWEubTIxKmYsbT1hLm0xMSpmLG49ZiooYS5tMjEqYS5keS1hLm0yMiphLmR4KSxwPWYqKGEubTEyKmEuZHgtYS5tMTEqYS5keSk7Zj1kLngqaCtkLnkqbCtuO2Q9ZC54KmsrZC55Km0rcDtoPWMueCpoK2MueSpsK247Yz1jLngqaytjLnkqbStwfWIua3AoZixkLGgsYyxnKTthJiZnLnRyYW5zZm9ybShhKTsNCnJldHVybiBnfTtmdW5jdGlvbiBrbihhLGIpe3ZhciBjPWIuUHI7bnVsbD09PWMmJihjPW5ldyBsbixjLnBvcnQ9YixjLkdjPWIuUyxiLlByPWMpO3JldHVybiBtbihjLGEpfQ0KVi5wcm90b3R5cGUuZ2V0TGlua1BvaW50PWZ1bmN0aW9uKGEsYixjLGQsZixnLGgsayl7dm9pZCAwPT09ayYmKGs9bmV3IHcpO2lmKGMudmQoKSlyZXR1cm4gYi5xYihjLGspLGs7aWYoYy5ycCgpJiYoYz1rbih0aGlzLGIpLG51bGwhPT1jKSl7ay5hc3NpZ24oYy54cCk7aWYoZiYmdGhpcy5LdD09PVRtKXt2YXIgbD1rbih0aGlzLGgpO2lmKGMuSm08bC5KbSl7Yz10LksoKTt2YXIgbD10LksoKSxtPW5ldyB4KGIucWIoRWIsYyksYi5xYihQYixsKSksbj10aGlzLmNvbXB1dGVTcG90KCFkKTthPXRoaXMuZ2V0TGlua1BvaW50KGcsaCxuLCFkLGYsYSxiLGwpO2EueD49bS54JiZhLng8PW0ueCttLndpZHRoP2sueD1hLng6YS55Pj1tLnkmJmEueTw9bS55K20uaGVpZ2h0JiYoay55PWEueSk7dC5CKGMpO3QuQihsKX19cmV0dXJuIGt9Zz1iLnFiKEtiLHQuSygpKTtjPW51bGw7dGhpcy5vYT4oZj82OjIpPyhoPWQ/dGhpcy5vKDEpOnRoaXMubyh0aGlzLm9hLTIpLGYmJihoPWpuKGcsaC5jb3B5KCkpKSk6DQooYz10LksoKSxoPWgucWIoS2IsYyksZiYmKGg9am4oZyxoKSkpO3RoaXMuZ2V0TGlua1BvaW50RnJvbVBvaW50KGEsYixnLGgsZCxrKTt0LkIoZyk7bnVsbCE9PWMmJnQuQihjKTtyZXR1cm4ga307DQpWLnByb3RvdHlwZS5nZXRMaW5rRGlyZWN0aW9uPWZ1bmN0aW9uKGEsYixjLGQsZixnLGgsayl7YTppZihkLnZkKCkpYz1kLng+ZC55P2QueD4xLWQueT8wOmQueDwxLWQueT8yNzA6MzE1OmQueDxkLnk/ZC54PjEtZC55PzkwOmQueDwxLWQueT8xODA6MTM1OjAuNT5kLng/MjI1OjAuNTxkLng/NDU6MDtlbHNle2lmKGQucnAoKSYmKGE9a24odGhpcyxiKSxudWxsIT09YSkpc3dpdGNoKGEuYmUpe2Nhc2UgdC5iZDpjPTI3MDticmVhayBhO2Nhc2UgdC5KYzpjPTE4MDticmVhayBhO2RlZmF1bHQ6Y2FzZSB0LlRjOmM9MDticmVhayBhO2Nhc2UgdC5TYzpjPTkwO2JyZWFrIGF9YT1iLnFiKEtiLHQuSygpKTtkPW51bGw7dGhpcy5vYT4oZz82OjIpPyhrPWY/dGhpcy5vKDEpOnRoaXMubyh0aGlzLm9hLTIpLGs9Zz9qbihhLGsuY29weSgpKTpjKTooZD10LksoKSxrPWsucWIoS2IsZCkpO2M9TWF0aC5hYnMoay54LWEueCk+TWF0aC5hYnMoay55LWEueSk/ay54Pj1hLng/MDoxODA6ay55Pj0NCmEueT85MDoyNzA7dC5CKGEpO251bGwhPT1kJiZ0LkIoZCl9Zz1IbTtnPWY/dGhpcy5ocDp0aGlzLlhwO2c9PT1IbSYmKGc9Zj9iLmhwOmIuWHApO3N3aXRjaChnKXtjYXNlIEltOmI9Yi5nbCgpO2MrPWI7MzYwPD1jJiYoYy09MzYwKTticmVhaztjYXNlIEhtOmNhc2UgZWs6Yj1iLmdsKCk7aWYoMD09PWIpYnJlYWs7NDU8PWImJjEzNT5iP2MrPTkwOjEzNTw9YiYmMjI1PmI/Yys9MTgwOjIyNTw9YiYmMzE1PmImJihjKz0yNzApOzM2MDw9YyYmKGMtPTM2MCl9cmV0dXJuIGN9O1YucHJvdG90eXBlLmNvbXB1dGVFbmRTZWdtZW50TGVuZ3RoPWZ1bmN0aW9uKGEsYixjLGQpe2lmKG51bGwhPT1iJiZjLnJwKCkmJihhPWtuKHRoaXMsYiksbnVsbCE9PWEpKXJldHVybiBhLkF3O2E9TmFOO2E9ZD90aGlzLmNrOnRoaXMuaWs7bnVsbCE9PWImJmlzTmFOKGEpJiYoYT1kP2IuY2s6Yi5payk7aXNOYU4oYSkmJihhPTEwKTtyZXR1cm4gYX07DQpWLnByb3RvdHlwZS5jb21wdXRlU3BvdD1mdW5jdGlvbihhKXtyZXR1cm4gYT9nbih0aGlzLHRoaXMudWQpOmhuKHRoaXMsdGhpcy5mZSl9O2Z1bmN0aW9uIGduKGEsYil7aWYobnVsbD09PWIpcmV0dXJuIEtiO3ZhciBjPWEucGI7Yy5QYygpJiYodm9pZCAwPT09YiYmKGI9YS51ZCksbnVsbCE9PWImJihjPWIucGIpKTtyZXR1cm4gYz09PXhiP3diOmN9ZnVuY3Rpb24gaG4oYSxiKXtpZihudWxsPT09YilyZXR1cm4gS2I7dmFyIGM9YS50YjtjLlBjKCkmJih2b2lkIDA9PT1iJiYoYj1hLmZlKSxudWxsIT09YiYmKGM9Yi50YikpO3JldHVybiBjPT09eGI/d2I6Y31WLnByb3RvdHlwZS5jb21wdXRlT3RoZXJQb2ludD1mdW5jdGlvbihhLGIpe3ZhciBjPWIucWIoS2IpLGQ7ZD1iLlByO2Q9bnVsbCE9PWQ/bW4oZCx0aGlzKTpudWxsO251bGwhPT1kJiYoYz1kLnhwKTtyZXR1cm4gY307DQpWLnByb3RvdHlwZS5jb21wdXRlU2hvcnRMZW5ndGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGE/bm4odGhpcyk6b24odGhpcyl9O2Z1bmN0aW9uIG5uKGEpe3ZhciBiPWEuaXA7aXNOYU4oYikmJihhPWEudWQsbnVsbCE9PWEmJihiPWEuaXApKTtyZXR1cm4gaXNOYU4oYik/MDpifWZ1bmN0aW9uIG9uKGEpe3ZhciBiPWEuWXA7aXNOYU4oYikmJihhPWEuZmUsbnVsbCE9PWEmJihiPWEuWXApKTtyZXR1cm4gaXNOYU4oYik/MDpifQ0KVi5wcm90b3R5cGUuYWs9ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe2lmKCExPT09dGhpcy5CZilyZXR1cm4hMTt2b2lkIDA9PT1iJiYoYj1udWxsKTt2b2lkIDA9PT1jJiYoYz1udWxsKTt2YXIgaD1nO3ZvaWQgMD09PWcmJihoPXQucGgoKSxoLnJlc2V0KCkpO2gubXVsdGlwbHkodGhpcy50cmFuc2Zvcm0pO2lmKHRoaXMuSW0oYSxoKSlyZXR1cm4gWGwodGhpcyxiLGMsZiksdm9pZCAwPT09ZyYmdC5XZShoKSwhMDtpZih0aGlzLlRmKGEsaCkpe3ZhciBrPSExO2lmKCF0aGlzLlZnKWZvcih2YXIgbD10aGlzLnhhLmxlbmd0aDtsLS07KXt2YXIgbT10aGlzLnhhLm5bbF07aWYobS52aXNpYmxlfHxtPT09dGhpcy5rYyl7dmFyIG49bS5wYSxwPXRoaXMuUmE7aWYoIShuLng+cC53aWR0aHx8bi55PnAuaGVpZ2h0fHwwPm4ueCtuLndpZHRofHwwPm4ueStuLmhlaWdodCkpe249dC5waCgpO24uc2V0KGgpO2lmKG0gaW5zdGFuY2VvZiB5KWs9bS5hayhhLGIsYyxkLGYsbik7ZWxzZSBpZih0aGlzLnBhdGg9PT0NCm0pe3ZhciBrPW0scT1hLHI9ZCxwPW47aWYoITE9PT1rLkJmKWs9ITE7ZWxzZSBpZihwLm11bHRpcGx5KGsudHJhbnNmb3JtKSxyKWI6e3ZhciBzPXEsdT1wO2lmKGsuSW0ocyx1KSlrPSEwO2Vsc2V7aWYodm9pZCAwPT09dSYmKHU9ay50cmFuc2Zvcm0scy5XaihrLnBhKSkpe2s9ITA7YnJlYWsgYn12YXIgcD1zLmxlZnQscT1zLnJpZ2h0LHI9cy50b3Ascz1zLmJvdHRvbSx2PXQuSygpLEQ9dC5LKCksQT10LksoKSxHPXQucGgoKTtHLnNldCh1KTtHLkVGKGsudHJhbnNmb3JtKTtHLm9BKCk7RC54PXE7RC55PXI7RC50cmFuc2Zvcm0oRyk7di54PXA7di55PXI7di50cmFuc2Zvcm0oRyk7dT0hMTtkbShrLHYsRCxBKT91PSEwOih2Lng9cSx2Lnk9cyx2LnRyYW5zZm9ybShHKSxkbShrLHYsRCxBKT91PSEwOihELng9cCxELnk9cyxELnRyYW5zZm9ybShHKSxkbShrLHYsRCxBKT91PSEwOih2Lng9cCx2Lnk9cix2LnRyYW5zZm9ybShHKSxkbShrLHYsRCxBKSYmKHU9ITApKSkpO3QuV2UoRyk7DQp0LkIodik7dC5CKEQpO3QuQihBKTtrPXV9fWVsc2Ugaz1rLkltKHEscCl9ZWxzZSBrPWprKG0sYSxkLG4pO2smJihudWxsIT09YiYmKG09YihtKSksbSYmKG51bGw9PT1jfHxjKG0pKSYmZi5hZGQobSkpO3QuV2Uobil9fX12b2lkIDA9PT1nJiZ0LldlKGgpO3JldHVybiBrfHxudWxsIT09dGhpcy5iYWNrZ3JvdW5kfHxudWxsIT09dGhpcy5aa312b2lkIDA9PT1nJiZ0LldlKGgpO3JldHVybiExfTt0LkEoVix7aWM6ImlzT3J0aG9nb25hbCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIDI9PT0odGhpcy5ubS52YWx1ZSYyKX0pO3QuQShWLHtkajoiaXNBdm9pZGluZyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIDQ9PT0odGhpcy5ubS52YWx1ZSY0KX0pO1YucHJvdG90eXBlLmNvbXB1dGVDdXJ2ZT1mdW5jdGlvbigpe2lmKG51bGw9PT10aGlzLnVpKXt2YXIgYT10aGlzLnVkLGI9dGhpcy5pYzt0aGlzLnVpPW51bGwhPT1hJiZhPT09dGhpcy5mZSYmIWJ9cmV0dXJuIHRoaXMudWk/T2c6dGhpcy5EZX07DQpWLnByb3RvdHlwZS5jb21wdXRlQ29ybmVyPWZ1bmN0aW9uKCl7aWYodGhpcy5EZT09PU9nKXJldHVybiAwO3ZhciBhPXRoaXMuc3c7aWYoaXNOYU4oYSl8fDA+YSlhPTEwO3JldHVybiBhfTtWLnByb3RvdHlwZS5jb21wdXRlQ3VydmluZXNzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5XcztpZihpc05hTihhKSl7dmFyIGI9dGhpcy5oZjtpZigwIT09Yil7dmFyIGE9MTAsYz10aGlzLmg7bnVsbCE9PWMmJihhPWMueXApO2M9TWF0aC5hYnMoYik7YT1hLzIrKChjLTEpLzJ8MCkqYTswPT09YyUyJiYoYT0tYSk7MD5iJiYoYT0tYSl9ZWxzZSBhPTEwfXJldHVybiBhfTtWLnByb3RvdHlwZS5jb21wdXRlVGhpY2tuZXNzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXRoO3JldHVybiBudWxsIT09YT9NYXRoLm1heChhLmZiLDEpOjF9O1YucHJvdG90eXBlLmhhc0N1cnZpbmVzcz1mdW5jdGlvbigpe3JldHVybiFpc05hTih0aGlzLldzKXx8MCE9PXRoaXMuaGYmJiF0aGlzLmljfTsNClYucHJvdG90eXBlLmFkanVzdFBvaW50cz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZj10aGlzLkxvO2lmKHRoaXMuaWMpe2lmKGY9PT1YaylyZXR1cm4hMTtmPT09WWsmJihmPVdrKX1zd2l0Y2goZil7Y2FzZSBYazp2YXIgZz10aGlzLm8oYSksaD10aGlzLm8oYyk7aWYoIWcuTShiKXx8IWguTShkKSl7dmFyIGY9Zy54LGc9Zy55LGs9aC54LWYsbD1oLnktZyxtPU1hdGguc3FydChrKmsrbCpsKTtpZighSC5JKG0sMCkpe3ZhciBuO0guSShrLDApP249MD5sPy1NYXRoLlBJLzI6TWF0aC5QSS8yOihuPU1hdGguYXRhbihsL01hdGguYWJzKGspKSwwPmsmJihuPU1hdGguUEktbikpO3ZhciBoPWIueCxwPWIueSxrPWQueC1oLHE9ZC55LXAsbD1NYXRoLnNxcnQoayprK3EqcSk7SC5JKGssMCk/cT0wPnE/LU1hdGguUEkvMjpNYXRoLlBJLzI6KHE9TWF0aC5hdGFuKHEvTWF0aC5hYnMoaykpLDA+ayYmKHE9TWF0aC5QSS1xKSk7bT1sL207bj1xLW47dGhpcy5FZihhLGIpO2ZvcihhKz0xO2E8YzthKyspYj0NCnRoaXMubyhhKSxrPWIueC1mLGw9Yi55LWcsYj1NYXRoLnNxcnQoayprK2wqbCksSC5JKGIsMCl8fChILkkoaywwKT9sPTA+bD8tTWF0aC5QSS8yOk1hdGguUEkvMjoobD1NYXRoLmF0YW4obC9NYXRoLmFicyhrKSksMD5rJiYobD1NYXRoLlBJLWwpKSxrPWwrbixiKj1tLHRoaXMuWShhLGgrYipNYXRoLmNvcyhrKSxwK2IqTWF0aC5zaW4oaykpKTt0aGlzLkVmKGMsZCl9fXJldHVybiEwO2Nhc2UgWWs6Zz10aGlzLm8oYSk7cD10aGlzLm8oYyk7aWYoIWcuTShiKXx8IXAuTShkKSl7Zj1nLng7Zz1nLnk7aD1wLng7cD1wLnk7bT0oaC1mKSooaC1mKSsocC1nKSoocC1nKTtrPWIueDtuPWIueTt2YXIgbD1kLngscT1kLnkscj0wLHM9MSxyPTAhPT1sLWs/KHEtbikvKGwtayk6OUU5OzAhPT1yJiYocz1NYXRoLnNxcnQoMSsxLyhyKnIpKSk7dGhpcy5FZihhLGIpO2ZvcihhKz0xO2E8YzthKyspe2I9dGhpcy5vKGEpO3ZhciB1PWIueCx2PWIueSxEPTAuNTswIT09bSYmKEQ9KChmLXUpKihmLQ0KaCkrKGctdikqKGctcCkpL20pO3ZhciBBPWYrRCooaC1mKSxHPWcrRCoocC1nKTtiPU1hdGguc3FydCgodS1BKSoodS1BKSsodi1HKSoodi1HKSk7djxyKih1LUEpK0cmJihiPS1iKTswPHImJihiPS1iKTt1PWsrRCoobC1rKTtEPW4rRCoocS1uKTswIT09cj8oYj11K2Ivcyx0aGlzLlkoYSxiLEQtKGItdSkvcikpOnRoaXMuWShhLHUsRCtiKX10aGlzLkVmKGMsZCl9cmV0dXJuITA7Y2FzZSBXazpyZXR1cm4gdGhpcy5pYyYmKGY9dGhpcy5vKGEpLGc9dGhpcy5vKGErMSksaD10aGlzLm8oYSsyKSxILkkoZi55LGcueSk/SC5JKGcueCxoLngpP3RoaXMuWShhKzEsZy54LGIueSk6SC5JKGcueSxoLnkpJiZ0aGlzLlkoYSsxLGIueCxnLnkpOkguSShmLngsZy54KSYmKEguSShnLnksaC55KT90aGlzLlkoYSsxLGIueCxnLnkpOkguSShnLngsaC54KSYmdGhpcy5ZKGErMSxnLngsYi55KSksZj10aGlzLm8oYyksZz10aGlzLm8oYy0xKSxoPXRoaXMubyhjLTIpLEguSShmLnksZy55KT9ILkkoZy54LA0KaC54KT90aGlzLlkoYy0xLGcueCxkLnkpOkguSShnLnksaC55KSYmdGhpcy5ZKGMtMSxkLngsZy55KTpILkkoZi54LGcueCkmJihILkkoZy55LGgueSk/dGhpcy5ZKGMtMSxkLngsZy55KTpILkkoZy54LGgueCkmJnRoaXMuWShjLTEsZy54LGQueSkpKSx0aGlzLkVmKGEsYiksdGhpcy5FZihjLGQpLCEwO2RlZmF1bHQ6cmV0dXJuITF9fTsNClYucHJvdG90eXBlLmFkZE9ydGhvUG9pbnRzPWZ1bmN0aW9uKGEsYixjLGQsZixnKXtiPS00NTw9YiYmNDU+Yj8wOjQ1PD1iJiYxMzU+Yj85MDoxMzU8PWImJjIyNT5iPzE4MDoyNzA7ZD0tNDU8PWQmJjQ1PmQ/MDo0NTw9ZCYmMTM1PmQ/OTA6MTM1PD1kJiYyMjU+ZD8xODA6MjcwO3ZhciBoPWYucGEuY29weSgpLGs9Zy5wYS5jb3B5KCk7aWYoaC5OKCkmJmsuTigpKXtoLlNmKDgsOCk7ay5TZig4LDgpO2gua2ooYSk7ay5raihjKTt2YXIgbCxtO2lmKDA9PT1iKWlmKGMueD5hLnh8fDI3MD09PWQmJmMueTxhLnkmJmsucmlnaHQ+YS54fHw5MD09PWQmJmMueT5hLnkmJmsucmlnaHQ+YS54KWw9bmV3IHcoYy54LGEueSksbT1uZXcgdyhjLngsKGEueStjLnkpLzIpLDE4MD09PWQ/KGwueD10aGlzLmNvbXB1dGVNaWRPcnRob1Bvc2l0aW9uKGEueCxjLngsITEpLG0ueD1sLngsbS55PWMueSk6MjcwPT09ZCYmYy55PGEueXx8OTA9PT1kJiZjLnk+YS55PyhsLng9YS54PGsubGVmdD90aGlzLmNvbXB1dGVNaWRPcnRob1Bvc2l0aW9uKGEueCwNCmsubGVmdCwhMSk6YS54PGsucmlnaHQmJigyNzA9PT1kJiZhLnk8ay50b3B8fDkwPT09ZCYmYS55PmsuYm90dG9tKT90aGlzLmNvbXB1dGVNaWRPcnRob1Bvc2l0aW9uKGEueCxjLngsITEpOmsucmlnaHQsbS54PWwueCxtLnk9Yy55KTowPT09ZCYmYS54PGsubGVmdCYmYS55PmsudG9wJiZhLnk8ay5ib3R0b20mJihsLng9YS54LGwueT1hLnk8Yy55P01hdGgubWluKGMueSxrLnRvcCk6TWF0aC5tYXgoYy55LGsuYm90dG9tKSxtLnk9bC55KTtlbHNle2w9bmV3IHcoYS54LGMueSk7bT1uZXcgdygoYS54K2MueCkvMixjLnkpO2lmKDE4MD09PWR8fDkwPT09ZCYmYy55PGgudG9wfHwyNzA9PT1kJiZjLnk+aC5ib3R0b20pMTgwPT09ZCYmKGsuR2EoYSl8fGguR2EoYykpP2wueT10aGlzLmNvbXB1dGVNaWRPcnRob1Bvc2l0aW9uKGEueSxjLnksITApOmMueTxhLnkmJigxODA9PT1kfHw5MD09PWQpP2wueT10aGlzLmNvbXB1dGVNaWRPcnRob1Bvc2l0aW9uKGgudG9wLE1hdGgubWF4KGMueSwNCmsuYm90dG9tKSwhMCk6Yy55PmEueSYmKDE4MD09PWR8fDI3MD09PWQpJiYobC55PXRoaXMuY29tcHV0ZU1pZE9ydGhvUG9zaXRpb24oaC5ib3R0b20sTWF0aC5taW4oYy55LGsudG9wKSwhMCkpLG0ueD1jLngsbS55PWwueTtpZihsLnk+aC50b3AmJmwueTxoLmJvdHRvbSlpZihjLng+PWgubGVmdCYmYy54PD1hLnh8fGEueDw9ay5yaWdodCYmYS54Pj1jLngpe2lmKDkwPT09ZHx8MjcwPT09ZClsPW5ldyB3KE1hdGgubWF4KChhLngrYy54KS8yLGEueCksYS55KSxtPW5ldyB3KGwueCxjLnkpfWVsc2UgbC55PTI3MD09PWR8fCgwPT09ZHx8MTgwPT09ZCkmJmMueTxhLnk/TWF0aC5taW4oYy55LDA9PT1kP2gudG9wOk1hdGgubWluKGgudG9wLGsudG9wKSk6TWF0aC5tYXgoYy55LDA9PT1kP2guYm90dG9tOk1hdGgubWF4KGguYm90dG9tLGsuYm90dG9tKSksbS54PWMueCxtLnk9bC55fWVsc2UgaWYoMTgwPT09YilpZihjLng8YS54fHwyNzA9PT1kJiZjLnk8YS55JiZrLmxlZnQ8YS54fHwNCjkwPT09ZCYmYy55PmEueSYmay5sZWZ0PGEueClsPW5ldyB3KGMueCxhLnkpLG09bmV3IHcoYy54LChhLnkrYy55KS8yKSwwPT09ZD8obC54PXRoaXMuY29tcHV0ZU1pZE9ydGhvUG9zaXRpb24oYS54LGMueCwhMSksbS54PWwueCxtLnk9Yy55KToyNzA9PT1kJiZjLnk8YS55fHw5MD09PWQmJmMueT5hLnk/KGwueD1hLng+ay5yaWdodD90aGlzLmNvbXB1dGVNaWRPcnRob1Bvc2l0aW9uKGEueCxrLnJpZ2h0LCExKTphLng+ay5sZWZ0JiYoMjcwPT09ZCYmYS55PGsudG9wfHw5MD09PWQmJmEueT5rLmJvdHRvbSk/dGhpcy5jb21wdXRlTWlkT3J0aG9Qb3NpdGlvbihhLngsYy54LCExKTprLmxlZnQsbS54PWwueCxtLnk9Yy55KToxODA9PT1kJiZhLng+ay5yaWdodCYmYS55PmsudG9wJiZhLnk8ay5ib3R0b20mJihsLng9YS54LGwueT1hLnk8Yy55P01hdGgubWluKGMueSxrLnRvcCk6TWF0aC5tYXgoYy55LGsuYm90dG9tKSxtLnk9bC55KTtlbHNle2w9bmV3IHcoYS54LGMueSk7bT1uZXcgdygoYS54Kw0KYy54KS8yLGMueSk7aWYoMD09PWR8fDkwPT09ZCYmYy55PGgudG9wfHwyNzA9PT1kJiZjLnk+aC5ib3R0b20pMD09PWQmJihrLkdhKGEpfHxoLkdhKGMpKT9sLnk9dGhpcy5jb21wdXRlTWlkT3J0aG9Qb3NpdGlvbihhLnksYy55LCEwKTpjLnk8YS55JiYoMD09PWR8fDkwPT09ZCk/bC55PXRoaXMuY29tcHV0ZU1pZE9ydGhvUG9zaXRpb24oaC50b3AsTWF0aC5tYXgoYy55LGsuYm90dG9tKSwhMCk6Yy55PmEueSYmKDA9PT1kfHwyNzA9PT1kKSYmKGwueT10aGlzLmNvbXB1dGVNaWRPcnRob1Bvc2l0aW9uKGguYm90dG9tLE1hdGgubWluKGMueSxrLnRvcCksITApKSxtLng9Yy54LG0ueT1sLnk7aWYobC55PmgudG9wJiZsLnk8aC5ib3R0b20paWYoYy54PD1oLnJpZ2h0JiZjLng+PWEueHx8YS54Pj1rLmxlZnQmJmEueDw9Yy54KXtpZig5MD09PWR8fDI3MD09PWQpbD1uZXcgdyhNYXRoLm1pbigoYS54K2MueCkvMixhLngpLGEueSksbT1uZXcgdyhsLngsYy55KX1lbHNlIGwueT0yNzA9PT0NCmR8fCgwPT09ZHx8MTgwPT09ZCkmJmMueTxhLnk/TWF0aC5taW4oYy55LDE4MD09PWQ/aC50b3A6TWF0aC5taW4oaC50b3Asay50b3ApKTpNYXRoLm1heChjLnksMTgwPT09ZD9oLmJvdHRvbTpNYXRoLm1heChoLmJvdHRvbSxrLmJvdHRvbSkpLG0ueD1jLngsbS55PWwueX1lbHNlIGlmKDkwPT09YilpZihjLnk+YS55fHwxODA9PT1kJiZjLng8YS54JiZrLmJvdHRvbT5hLnl8fDA9PT1kJiZjLng+YS54JiZrLmJvdHRvbT5hLnkpbD1uZXcgdyhhLngsYy55KSxtPW5ldyB3KChhLngrYy54KS8yLGMueSksMjcwPT09ZD8obC55PXRoaXMuY29tcHV0ZU1pZE9ydGhvUG9zaXRpb24oYS55LGMueSwhMCksbS54PWMueCxtLnk9bC55KToxODA9PT1kJiZjLng8YS54fHwwPT09ZCYmYy54PmEueD8obC55PWEueTxrLnRvcD90aGlzLmNvbXB1dGVNaWRPcnRob1Bvc2l0aW9uKGEueSxrLnRvcCwhMCk6YS55PGsuYm90dG9tJiYoMTgwPT09ZCYmYS54PGsubGVmdHx8MD09PWQmJmEueD5rLnJpZ2h0KT8NCnRoaXMuY29tcHV0ZU1pZE9ydGhvUG9zaXRpb24oYS55LGMueSwhMCk6ay5ib3R0b20sbS54PWMueCxtLnk9bC55KTo5MD09PWQmJmEueTxrLnRvcCYmYS54PmsubGVmdCYmYS54PGsucmlnaHQmJihsLng9YS54PGMueD9NYXRoLm1pbihjLngsay5sZWZ0KTpNYXRoLm1heChjLngsay5yaWdodCksbC55PWEueSxtLng9bC54KTtlbHNle2w9bmV3IHcoYy54LGEueSk7bT1uZXcgdyhjLngsKGEueStjLnkpLzIpO2lmKDI3MD09PWR8fDA9PT1kJiZjLng8aC5sZWZ0fHwxODA9PT1kJiZjLng+aC5yaWdodCkyNzA9PT1kJiYoay5HYShhKXx8aC5HYShjKSk/bC54PXRoaXMuY29tcHV0ZU1pZE9ydGhvUG9zaXRpb24oYS54LGMueCwhMSk6Yy54PGEueCYmKDI3MD09PWR8fDA9PT1kKT9sLng9dGhpcy5jb21wdXRlTWlkT3J0aG9Qb3NpdGlvbihoLmxlZnQsTWF0aC5tYXgoYy54LGsucmlnaHQpLCExKTpjLng+YS54JiYoMjcwPT09ZHx8MTgwPT09ZCkmJihsLng9dGhpcy5jb21wdXRlTWlkT3J0aG9Qb3NpdGlvbihoLnJpZ2h0LA0KTWF0aC5taW4oYy54LGsubGVmdCksITEpKSxtLng9bC54LG0ueT1jLnk7aWYobC54PmgubGVmdCYmbC54PGgucmlnaHQpaWYoYy55Pj1oLnRvcCYmYy55PD1hLnl8fGEueTw9ay5ib3R0b20mJmEueT49Yy55KXtpZigwPT09ZHx8MTgwPT09ZClsPW5ldyB3KGEueCxNYXRoLm1heCgoYS55K2MueSkvMixhLnkpKSxtPW5ldyB3KGMueCxsLnkpfWVsc2UgbC54PTE4MD09PWR8fCg5MD09PWR8fDI3MD09PWQpJiZjLng8YS54P01hdGgubWluKGMueCw5MD09PWQ/aC5sZWZ0Ok1hdGgubWluKGgubGVmdCxrLmxlZnQpKTpNYXRoLm1heChjLngsOTA9PT1kP2gucmlnaHQ6TWF0aC5tYXgoaC5yaWdodCxrLnJpZ2h0KSksbS54PWwueCxtLnk9Yy55fWVsc2UgaWYoYy55PGEueXx8MTgwPT09ZCYmYy54PGEueCYmay50b3A8YS55fHwwPT09ZCYmYy54PmEueCYmay50b3A8YS55KWw9bmV3IHcoYS54LGMueSksbT1uZXcgdygoYS54K2MueCkvMixjLnkpLDkwPT09ZD8obC55PXRoaXMuY29tcHV0ZU1pZE9ydGhvUG9zaXRpb24oYS55LA0KYy55LCEwKSxtLng9Yy54LG0ueT1sLnkpOjE4MD09PWQmJmMueDxhLnh8fDA9PT1kJiZjLng+PWEueD8obC55PWEueT5rLmJvdHRvbT90aGlzLmNvbXB1dGVNaWRPcnRob1Bvc2l0aW9uKGEueSxrLmJvdHRvbSwhMCk6YS55PmsudG9wJiYoMTgwPT09ZCYmYS54PGsubGVmdHx8MD09PWQmJmEueD5rLnJpZ2h0KT90aGlzLmNvbXB1dGVNaWRPcnRob1Bvc2l0aW9uKGEueSxjLnksITApOmsudG9wLG0ueD1jLngsbS55PWwueSk6MjcwPT09ZCYmYS55PmsuYm90dG9tJiZhLng+ay5sZWZ0JiZhLng8ay5yaWdodCYmKGwueD1hLng8Yy54P01hdGgubWluKGMueCxrLmxlZnQpOk1hdGgubWF4KGMueCxrLnJpZ2h0KSxsLnk9YS55LG0ueD1sLngpO2Vsc2V7bD1uZXcgdyhjLngsYS55KTttPW5ldyB3KGMueCwoYS55K2MueSkvMik7aWYoOTA9PT1kfHwwPT09ZCYmYy54PGgubGVmdHx8MTgwPT09ZCYmYy54PmgucmlnaHQpOTA9PT1kJiYoay5HYShhKXx8aC5HYShjKSk/bC54PXRoaXMuY29tcHV0ZU1pZE9ydGhvUG9zaXRpb24oYS54LA0KYy54LCExKTpjLng8YS54JiYoOTA9PT1kfHwwPT09ZCk/bC54PXRoaXMuY29tcHV0ZU1pZE9ydGhvUG9zaXRpb24oaC5sZWZ0LE1hdGgubWF4KGMueCxrLnJpZ2h0KSwhMSk6Yy54PmEueCYmKDkwPT09ZHx8MTgwPT09ZCkmJihsLng9dGhpcy5jb21wdXRlTWlkT3J0aG9Qb3NpdGlvbihoLnJpZ2h0LE1hdGgubWluKGMueCxrLmxlZnQpLCExKSksbS54PWwueCxtLnk9Yy55O2lmKGwueD5oLmxlZnQmJmwueDxoLnJpZ2h0KWlmKGMueTw9aC5ib3R0b20mJmMueT49YS55fHxhLnk+PWsudG9wJiZhLnk8PWMueSl7aWYoMD09PWR8fDE4MD09PWQpbD1uZXcgdyhhLngsTWF0aC5taW4oKGEueStjLnkpLzIsYS55KSksbT1uZXcgdyhjLngsbC55KX1lbHNlIGwueD0xODA9PT1kfHwoOTA9PT1kfHwyNzA9PT1kKSYmYy54PGEueD9NYXRoLm1pbihjLngsMjcwPT09ZD9oLmxlZnQ6TWF0aC5taW4oaC5sZWZ0LGsubGVmdCkpOk1hdGgubWF4KGMueCwyNzA9PT1kP2gucmlnaHQ6TWF0aC5tYXgoaC5yaWdodCwNCmsucmlnaHQpKSxtLng9bC54LG0ueT1jLnl9dmFyIG49bCxwPW07aWYodGhpcy5kail7dmFyIHE9dGhpcy5oLHI7KHI9bnVsbD09PXEpfHwocS5aYi55Zz9yPSExOihyPXEuVWEscj1yIGluc3RhbmNlb2YgY2Y/IXIuTnZ8fHIuYkY6ITApLHI9IXIpO2lmKHJ8fGguR2EoYyl8fGsuR2EoYSl8fGY9PT1nfHx0aGlzLmxheWVyLnljKWE9ITE7ZWxzZSBpZihmPU5qKHEsdGhpcykscG4oZixNYXRoLm1pbihhLngsbi54KSxNYXRoLm1pbihhLnksbi55KSxNYXRoLmFicyhhLngtbi54KSxNYXRoLmFicyhhLnktbi55KSkmJnBuKGYsTWF0aC5taW4obi54LHAueCksTWF0aC5taW4obi55LHAueSksTWF0aC5hYnMobi54LXAueCksTWF0aC5hYnMobi55LXAueSkpJiZwbihmLE1hdGgubWluKHAueCxjLngpLE1hdGgubWluKHAueSxjLnkpLE1hdGguYWJzKHAueC1jLngpLE1hdGguYWJzKHAueS1jLnkpKSlhPSExO2Vsc2UgaWYoaD1oLmNvcHkoKS5saihrKSxoLlNmKDIqZi5GbSwyKmYuRW0pLHFuKGYsDQphLGIsYyxkLGgpLGs9cm4oZixjLngsYy55KSxmLmFib3J0fHxrIT09c258fChRaihmKSxrPWYudEcsaC5TZihmLkZtKmssZi5FbSprKSxxbihmLGEsYixjLGQsaCksaz1ybihmLGMueCxjLnkpKSxmLmFib3J0fHxrIT09c258fChRaihmKSxrPWYubEYsaC5TZihmLkZtKmssZi5FbSprKSxxbihmLGEsYixjLGQsaCksaz1ybihmLGMueCxjLnkpKSwhZi5hYm9ydCYmaz09PXNuJiZmLllHJiYoUWooZikscW4oZixhLGIsYyxkLGYuT2IpLGs9cm4oZixjLngsYy55KSksIWYuYWJvcnQmJms8c24mJjAhPT1ybihmLGMueCxjLnkpKXt0bih0aGlzLGYsYy54LGMueSxkLCEwKTtkPXRoaXMubygyKTtpZig0PnRoaXMub2EpMD09PWJ8fDE4MD09PWI/KGQueD1hLngsZC55PWMueSk6KGQueD1jLngsZC55PWEueSksdGhpcy5ZKDIsZC54LGQueSksdGhpcy5DKDMsZC54LGQueSk7ZWxzZSBpZihjPXRoaXMubygzKSwwPT09Ynx8MTgwPT09YilILkkoZC54LGMueCk/KGI9MD09PWI/TWF0aC5tYXgoZC54LA0KYS54KTpNYXRoLm1pbihkLngsYS54KSx0aGlzLlkoMixiLGEueSksdGhpcy5ZKDMsYixjLnkpKTpILkkoZC55LGMueSk/KE1hdGguYWJzKGEueS1kLnkpPD1mLkVtLzImJih0aGlzLlkoMixkLngsYS55KSx0aGlzLlkoMyxjLngsYS55KSksdGhpcy5DKDIsZC54LGEueSkpOnRoaXMuWSgyLGEueCxkLnkpO2Vsc2UgaWYoOTA9PT1ifHwyNzA9PT1iKUguSShkLnksYy55KT8oYj05MD09PWI/TWF0aC5tYXgoZC55LGEueSk6TWF0aC5taW4oZC55LGEueSksdGhpcy5ZKDIsYS54LGIpLHRoaXMuWSgzLGMueCxiKSk6SC5JKGQueCxjLngpPyhNYXRoLmFicyhhLngtZC54KTw9Zi5GbS8yJiYodGhpcy5ZKDIsYS54LGQueSksdGhpcy5ZKDMsYS54LGMueSkpLHRoaXMuQygyLGEueCxkLnkpKTp0aGlzLlkoMixkLngsYS55KTthPSEwfWVsc2UgYT0hMX1lbHNlIGE9ITE7YXx8KHRoaXMuV2gobCksdGhpcy5XaChtKSl9fTsNClYucHJvdG90eXBlLmNvbXB1dGVNaWRPcnRob1Bvc2l0aW9uPWZ1bmN0aW9uKGEsYil7aWYodGhpcy5oYXNDdXJ2aW5lc3MoKSl7dmFyIGM9dGhpcy5jb21wdXRlQ3VydmluZXNzKCk7cmV0dXJuKGErYikvMitjfXJldHVybihhK2IpLzJ9O2Z1bmN0aW9uIEJmKGEpe2lmKCFhLmRqKXJldHVybiExO3ZhciBiPWEucG9pbnRzLm4sYz1iLmxlbmd0aDtpZig0PmMpcmV0dXJuITE7YT1OaihhLmgsYSk7Zm9yKHZhciBkPTE7ZDxjLTI7ZCsrKXt2YXIgZj1iW2RdLGc9YltkKzFdO2lmKCFwbihhLE1hdGgubWluKGYueCxnLngpLE1hdGgubWluKGYueSxnLnkpLE1hdGguYWJzKGYueC1nLngpLE1hdGguYWJzKGYueS1nLnkpKSlyZXR1cm4hMH1yZXR1cm4hMX0NCmZ1bmN0aW9uIHRuKGEsYixjLGQsZixnKXt2YXIgaD1iLkZtLGs9Yi5FbSxsPXJuKGIsYyxkKSxtPWMsbj1kO2ZvcigwPT09Zj9tKz1oOjkwPT09Zj9uKz1rOjE4MD09PWY/bS09aDpuLT1rO2w+dW4mJnJuKGIsbSxuKT09PWwtdm47KWM9bSxkPW4sMD09PWY/bSs9aDo5MD09PWY/bis9azoxODA9PT1mP20tPWg6bi09ayxsLT12bjtpZihnKXtpZihsPnVuKWlmKDE4MD09PWZ8fDA9PT1mKWM9TWF0aC5mbG9vcihjL2gpKmgraC8yO2Vsc2UgaWYoOTA9PT1mfHwyNzA9PT1mKWQ9TWF0aC5mbG9vcihkL2spKmsray8yfWVsc2UgYz1NYXRoLmZsb29yKGMvaCkqaCtoLzIsZD1NYXRoLmZsb29yKGQvaykqaytrLzI7bD51biYmKGc9ZixtPWMsbj1kLDA9PT1mPyhnPTkwLG4rPWspOjkwPT09Zj8oZz0xODAsbS09aCk6MTgwPT09Zj8oZz0yNzAsbi09ayk6MjcwPT09ZiYmKGc9MCxtKz1oKSxybihiLG0sbik9PT1sLXZuP3RuKGEsYixtLG4sZywhMSk6KG09YyxuPWQsMD09PWY/KGc9MjcwLG4tPQ0Kayk6OTA9PT1mPyhnPTAsbSs9aCk6MTgwPT09Zj8oZz05MCxuKz1rKToyNzA9PT1mJiYoZz0xODAsbS09aCkscm4oYixtLG4pPT09bC12biYmdG4oYSxiLG0sbixnLCExKSkpO2EuV2soYyxkKX1WLnByb3RvdHlwZS5maW5kQ2xvc2VzdFNlZ21lbnQ9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEsdyxWLCJmaW5kQ2xvc2VzdFNlZ21lbnQ6cCIpO3ZhciBiPWEueDthPWEueTtmb3IodmFyIGM9dGhpcy5vKDApLGQ9dGhpcy5vKDEpLGY9UmEoYixhLGMueCxjLnksZC54LGQueSksZz0wLGg9MTtoPHRoaXMub2EtMTtoKyspe3ZhciBjPXRoaXMubyhoKzEpLGs9UmEoYixhLGQueCxkLnksYy54LGMueSksZD1jO2s8ZiYmKGc9aCxmPWspfXJldHVybiBnfTtWLnByb3RvdHlwZS5pbnZhbGlkYXRlR2VvbWV0cnk9Vi5wcm90b3R5cGUuWWU9ZnVuY3Rpb24oKXt0aGlzLkppPXRoaXMuT2E9bnVsbDt0aGlzLmZhKCl9Ow0KdC5BKFYse25kOiJnZW9tZXRyeSJ9LGZ1bmN0aW9uKCl7bnVsbD09PXRoaXMuT2EmJih0aGlzLnVwZGF0ZVJvdXRlKCksdGhpcy5PYT10aGlzLm1ha2VHZW9tZXRyeSgpKTtyZXR1cm4gdGhpcy5PYX0pO1YucHJvdG90eXBlLmJ4PWZ1bmN0aW9uKCl7aWYobnVsbD09PXRoaXMuT2EmJiExIT09dGhpcy5yZyl7dGhpcy5PYT10aGlzLm1ha2VHZW9tZXRyeSgpO3ZhciBhPXRoaXMuUnEoKTtpZihudWxsIT09YSl7YS5PYT10aGlzLk9hO2Zvcih2YXIgYj10aGlzLnhhLGM9Yi5sZW5ndGgsZD0wO2Q8YztkKyspe3ZhciBmPWIubltkXTtmIT09YSYmZi5maiYmZiBpbnN0YW5jZW9mIFcmJihmLk9hPXRoaXMuT2EpfX19fTsNClYucHJvdG90eXBlLm1ha2VHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2E7aWYoMj5hKXt2YXIgYj1uZXcgemMoQWMpLGM9bmV3IEJjKDAsMCk7Yi5BYi5hZGQoYyk7cmV0dXJuIGJ9dmFyIGQ9ITEsYj10aGlzLmg7bnVsbCE9PWImJjAhPT1iLmphLkplJiZkbih0aGlzKSYmKGQ9ITApO3ZhciBmPXRoaXMubygwKS5jb3B5KCksZz1mLmNvcHkoKSxoPXRoaXMuY29tcHV0ZUN1cnZlKCk7aWYoaD09PU9nJiYzPD1hJiYhSC5uYih0aGlzLmxuLDApKWlmKDM9PT1hKXZhciBrPXRoaXMubygxKSxiPU1hdGgubWluKGYueCxrLngpLGM9TWF0aC5taW4oZi55LGsueSksaz10aGlzLm8oMiksYj1NYXRoLm1pbihiLGsueCksYz1NYXRoLm1pbihjLGsueSk7ZWxzZXtpZih0aGlzLmljKWZvcihrPTA7azxhO2srKyliPXRoaXMuQ2MubltrXSxnLng9TWF0aC5taW4oYi54LGcueCksZy55PU1hdGgubWluKGIueSxnLnkpO2Vsc2UgZm9yKHZhciBsLGs9MztrPGE7ays9MylrKzM+PWEmJihrPQ0KYS0xKSxsPXRoaXMubyhrKSxnLng9TWF0aC5taW4obC54LGcueCksZy55PU1hdGgubWluKGwueSxnLnkpO2I9Zy54O2M9Zy55fWVsc2V7Zm9yKGs9MDtrPGE7aysrKWI9dGhpcy5DYy5uW2tdLGcueD1NYXRoLm1pbihiLngsZy54KSxnLnk9TWF0aC5taW4oYi55LGcueSk7Yj1nLng7Yz1nLnl9Yi09dGhpcy5Bei54O2MtPXRoaXMuQXoueTtmLngtPWI7Zi55LT1jO2lmKDI9PT1hKXt2YXIgbT10aGlzLm8oMSkuY29weSgpO20ueC09YjttLnktPWM7MCE9PW5uKHRoaXMpJiZ3bih0aGlzLGYsITAsZyk7MCE9PW9uKHRoaXMpJiZ3bih0aGlzLG0sITEsZyk7Yj1uZXcgemMoRGMpO2IucWE9Zi54O2IucmE9Zi55O2IuRD1tLng7Yi5GPW0ueX1lbHNle209dC51KCk7MCE9PW5uKHRoaXMpJiZ3bih0aGlzLGYsITAsZyk7SihtLGYueCxmLnksITEsITEpO2lmKGg9PT1PZyYmMzw9YSYmIUgubmIodGhpcy5sbiwwKSlpZigzPT09YSlrPXRoaXMubygxKSxhPWsueC1iLGQ9ay55LWMsaz10aGlzLm8oMikuY29weSgpLA0Kay54LT1iLGsueS09YywwIT09b24odGhpcykmJnduKHRoaXMsaywhMSxnKSxLKG0sYSxkLGEsZCxrLngsay55KTtlbHNlIGlmKHRoaXMuaWMpe2c9bmV3IHcoYixjKTtmPXRoaXMubygxKS5jb3B5KCk7aD1uZXcgdyhiLGMpO2E9bmV3IHcoYixjKTtkPXRoaXMubygwKTtsPW51bGw7Zm9yKHZhciBuPXRoaXMubG4vMyxrPTE7azx0aGlzLm9hLTE7aysrKXtsPXRoaXMubyhrKTt2YXIgcD1kLHE9bCxyPXRoaXMubyh4bih0aGlzLGwsaywhMSkpO2lmKCFILm5iKHAueCxxLngpfHwhSC5uYihxLngsci54KSlpZighSC5uYihwLnkscS55KXx8IUgubmIocS55LHIueSkpe3ZhciBzPW4sdT1oLHY9YTtpc05hTihzKSYmKHM9dGhpcy5sbi8zKTt2YXIgRD1wLngscD1wLnksQT1xLngscT1xLnksRz1yLngscj1yLnksTD1zKnluKEQscCxBLHEpLHM9cyp5bihBLHEsRyxyKTtILm5iKHAscSkmJkgubmIoQSxHKSYmKEE+RD9yPnE/KHUueD1BLUwsdS55PXEtTCx2Lng9QStzLHYueT1xK3MpOih1Lng9DQpBLUwsdS55PXErTCx2Lng9QStzLHYueT1xLXMpOnI+cT8odS54PUErTCx1Lnk9cS1MLHYueD1BLXMsdi55PXErcyk6KHUueD1BK0wsdS55PXErTCx2Lng9QS1zLHYueT1xLXMpKTtILm5iKEQsQSkmJkgubmIocSxyKSYmKHE+cD8oRz5BPyh1Lng9QS1MLHUueT1xLUwsdi54PUErcyk6KHUueD1BK0wsdS55PXEtTCx2Lng9QS1zKSx2Lnk9cStzKTooRz5BPyh1Lng9QS1MLHUueT1xK0wsdi54PUErcyk6KHUueD1BK0wsdS55PXErTCx2Lng9QS1zKSx2Lnk9cS1zKSk7aWYoSC5uYihELEEpJiZILm5iKEEsRyl8fEgubmIocCxxKSYmSC5uYihxLHIpKUQ9MC41KihEK0cpLHA9MC41KihwK3IpLHUueD1ELHUueT1wLHYueD1ELHYueT1wOzE9PT1rPyhmLng9MC41KihkLngrbC54KSxmLnk9MC41KihkLnkrbC55KSk6Mj09PWsmJkgubmIoZC54LHRoaXMubygwKS54KSYmSC5uYihkLnksdGhpcy5vKDApLnkpJiYoZi54PTAuNSooZC54K2wueCksZi55PTAuNSooZC55K2wueSkpO0sobSxmLngtYiwNCmYueS1jLGgueC1iLGgueS1jLGwueC1iLGwueS1jKTtnLnNldChoKTtmLnNldChhKTtkPWx9fWs9ZC54O2Q9ZC55O2c9dGhpcy5vKHRoaXMub2EtMSk7az0wLjUqKGsrZy54KTtkPTAuNSooZCtnLnkpO0sobSxhLngtYixhLnktYyxrLWIsZC1jLGcueC1iLGcueS1jKX1lbHNlIGZvcihrPTM7azxhO2srPTMpZD10aGlzLm8oay0yKSxrKzM+PWEmJihrPWEtMSksZz10aGlzLm8oay0xKSxsPXRoaXMubyhrKSxrPT09YS0xJiYwIT09b24odGhpcykmJihsPWwuY29weSgpLHduKHRoaXMsbCwhMSxILm5qKSksSyhtLGQueC1iLGQueS1jLGcueC1iLGcueS1jLGwueC1iLGwueS1jKTtlbHNle2c9dC5LKCk7Zy5hc3NpZ24odGhpcy5vKDApKTtmb3Ioaz0xO2s8YTspe2s9eG4odGhpcyxnLGssMTxrKTt1PXRoaXMubyhrKTtpZihrPj1hLTEpe2chPT11JiYoMCE9PW9uKHRoaXMpJiYodT11LmNvcHkoKSx3bih0aGlzLHUsITEsSC5uaikpLHpuKHRoaXMsbSwtYiwtYyxnLHUsZCkpO2JyZWFrfWs9eG4odGhpcywNCnUsaysxLGs8YS0zKTtmPW07aD0tYjtsPS1jO249Zzt2PXRoaXMubyhrKTtEPWc7cD1kO0guSShuLnksdS55KSYmSC5JKHUueCx2LngpPyhzPXRoaXMuY29tcHV0ZUNvcm5lcigpLHM9TWF0aC5taW4ocyxNYXRoLmFicyh1Lngtbi54KS8yKSxzPUE9TWF0aC5taW4ocyxNYXRoLmFicyh2LnktdS55KS8yKSxILkkocywwKT8oem4odGhpcyxmLGgsbCxuLHUscCksRC5hc3NpZ24odSkpOihxPXUueCxHPXUueSxyPXEsTD1HLHE9dS54Pm4ueD91Lngtczp1LngrcyxMPXYueT51Lnk/dS55K0E6dS55LUEsem4odGhpcyxmLGgsbCxuLG5ldyB3KHEsRykscCksU2MoZix1LngraCx1LnkrbCxyK2gsTCtsKSxELnAocixMKSkpOkguSShuLngsdS54KSYmSC5JKHUueSx2LnkpPyhzPXRoaXMuY29tcHV0ZUNvcm5lcigpLEE9TWF0aC5taW4ocyxNYXRoLmFicyh1Lnktbi55KS8yKSxBPXM9TWF0aC5taW4oQSxNYXRoLmFicyh2LngtdS54KS8yKSxILkkocywwKT8oem4odGhpcyxmLGgsbCxuLHUscCksRC5hc3NpZ24odSkpOg0KKHE9dS54LEw9Rz11LnksRz11Lnk+bi55P3UueS1BOnUueStBLHI9di54PnUueD91Lngrczp1Lngtcyx6bih0aGlzLGYsaCxsLG4sbmV3IHcocSxHKSxwKSxTYyhmLHUueCtoLHUueStsLHIraCxMK2wpLEQucChyLEwpKSk6KHpuKHRoaXMsZixoLGwsbix1LHApLEQuYXNzaWduKHUpKX10LkIoZyl9Yj1tLnM7dC52KG0pfXJldHVybiBifTtmdW5jdGlvbiB5bihhLGIsYyxkKXthPWMtYTtpZihpc05hTihhKXx8SW5maW5pdHk9PT1hfHwtSW5maW5pdHk9PT1hKXJldHVybiBOYU47MD5hJiYoYT0tYSk7Yj1kLWI7aWYoaXNOYU4oYil8fEluZmluaXR5PT09Ynx8LUluZmluaXR5PT09YilyZXR1cm4gTmFOOzA+YiYmKGI9LWIpO3JldHVybiBILm5iKGEsMCk/YjpILm5iKGIsMCk/YTpNYXRoLnNxcnQoYSphK2IqYil9DQpmdW5jdGlvbiB3bihhLGIsYyxkKXt2YXIgZj1hLm9hO2lmKCEoMj5mKSlpZihjKXt2YXIgZz1hLm8oMSk7Yz1nLngtZC54O2Q9Zy55LWQueTtnPXluKGIueCxiLnksYyxkKTswIT09ZyYmKGY9Mj09PWY/MC41Kmc6ZyxhPW5uKGEpLGE+ZiYmKGE9ZiksYz1hKihjLWIueCkvZyxhPWEqKGQtYi55KS9nLGIueCs9YyxiLnkrPWEpfWVsc2UgZz1hLm8oZi0yKSxjPWcueC1kLngsZD1nLnktZC55LGc9eW4oYi54LGIueSxjLGQpLDAhPT1nJiYoZj0yPT09Zj8wLjUqZzpnLGE9b24oYSksYT5mJiYoYT1mKSxjPWEqKGIueC1jKS9nLGE9YSooYi55LWQpL2csYi54LT1jLGIueS09YSl9DQpmdW5jdGlvbiB4bihhLGIsYyxkKXtmb3IodmFyIGY9YS5vYSxnPWI7SC5uYihiLngsZy54KSYmSC5uYihiLnksZy55KTspe2lmKGM+PWYpcmV0dXJuIGYtMTtnPWEubyhjKyspfWlmKCFILm5iKGIueCxnLngpJiYhSC5uYihiLnksZy55KSlyZXR1cm4gYy0xO2Zvcih2YXIgaD1nO0gubmIoYi54LGcueCkmJkgubmIoZy54LGgueCkmJighZHx8KGIueT49Zy55P2cueT49aC55OmcueTw9aC55KSl8fEgubmIoYi55LGcueSkmJkgubmIoZy55LGgueSkmJighZHx8KGIueD49Zy54P2cueD49aC54OmcueDw9aC54KSk7KXtpZihjPj1mKXJldHVybiBmLTE7aD1hLm8oYysrKX1yZXR1cm4gYy0yfQ0KZnVuY3Rpb24gem4oYSxiLGMsZCxmLGcsaCl7aWYoIWgmJmRuKGEpKXtoPVtdO3ZhciBrPTA7YS5RYSgpJiYoaz1BbihhLGYsZyxoKSk7dmFyIGw9Zi54LGw9Zi55O2lmKDA8aylpZihILkkoZi55LGcueSkpaWYoZi54PGcueClmb3IodmFyIG09MDttPGs7KXt2YXIgbj1NYXRoLm1heChmLngsTWF0aC5taW4oaFttKytdLTUsZy54LTEwKSk7Yi5saW5lVG8obitjLGcueStkKTtmb3IodmFyIGw9bitjLHA9TWF0aC5taW4obisxMCxnLngpO208azspe3ZhciBxPWhbbV07aWYocTxwKzEwKW0rKyxwPU1hdGgubWluKHErNSxnLngpO2Vsc2UgYnJlYWt9cT0obitwKS8yK2M7cT1nLnktMTArZDtuPXArYztwPWcueStkO2EuRGU9PT14Zz9KKGIsbixwLCExLCExKTpLKGIsbCxxLG4scSxuLHApfWVsc2UgZm9yKG09ay0xOzA8PW07KXtuPU1hdGgubWluKGYueCxNYXRoLm1heChoW20tLV0rNSxnLngrMTApKTtiLmxpbmVUbyhuK2MsZy55K2QpO2w9bitjO2ZvcihwPU1hdGgubWF4KG4tMTAsZy54KTswPD0NCm07KWlmKHE9aFttXSxxPnAtMTApbS0tLHA9TWF0aC5tYXgocS01LGcueCk7ZWxzZSBicmVhaztxPWcueS0xMCtkO249cCtjO3A9Zy55K2Q7YS5EZT09PXhnP0ooYixuLHAsITEsITEpOksoYixsLHEsbixxLG4scCl9ZWxzZSBpZihILkkoZi54LGcueCkpaWYoZi55PGcueSlmb3IobT0wO208azspe249TWF0aC5tYXgoZi55LE1hdGgubWluKGhbbSsrXS01LGcueS0xMCkpO2IubGluZVRvKGcueCtjLG4rZCk7bD1uK2Q7Zm9yKHA9TWF0aC5taW4obisxMCxnLnkpO208azspaWYocT1oW21dLHE8cCsxMCltKysscD1NYXRoLm1pbihxKzUsZy55KTtlbHNlIGJyZWFrO3E9Zy54LTEwK2M7bj1nLngrYztwKz1kO2EuRGU9PT14Zz9KKGIsbixwLCExLCExKTpLKGIscSxsLHEscCxuLHApfWVsc2UgZm9yKG09ay0xOzA8PW07KXtuPU1hdGgubWluKGYueSxNYXRoLm1heChoW20tLV0rNSxnLnkrMTApKTtiLmxpbmVUbyhnLngrYyxuK2QpO2w9bitkO2ZvcihwPU1hdGgubWF4KG4tMTAsZy55KTswPD0NCm07KWlmKHE9aFttXSxxPnAtMTApbS0tLHA9TWF0aC5tYXgocS01LGcueSk7ZWxzZSBicmVhaztxPWcueC0xMCtjO249Zy54K2M7cCs9ZDthLkRlPT09eGc/SihiLG4scCwhMSwhMSk6SyhiLHEsbCxxLHAsbixwKX19Yi5saW5lVG8oZy54K2MsZy55K2QpfQ0KZnVuY3Rpb24gQW4oYSxiLGMsZCl7dmFyIGY9YS5oO2lmKG51bGw9PT1mfHxiLk0oYykpcmV0dXJuIDA7Zm9yKGY9Zi5ZdztmLm5leHQoKTspe3ZhciBnPWYudmFsdWU7aWYobnVsbCE9PWcmJmcudmlzaWJsZSlmb3IodmFyIGc9Zy5GYi5uLGg9Zy5sZW5ndGgsaz0wO2s8aDtrKyspe3ZhciBsPWdba107aWYobD09PWEpcmV0dXJuIDA8ZC5sZW5ndGgmJmQuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLWJ9KSxkLmxlbmd0aDtpZihsIGluc3RhbmNlb2YgViYmbC5RYSgpJiZkbihsKSl7dmFyIG09bC52aigpO20uTigpJiZhLnZqKCkuVGYobSkmJiFhLnVzZXNTYW1lUG9ydChsKSYmKG09bC5wYXRoLG51bGwhPT1tJiZtLm9sKCkmJkJuKGIsYyxkLGwpKX19fTA8ZC5sZW5ndGgmJmQuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLWJ9KTtyZXR1cm4gZC5sZW5ndGh9DQpmdW5jdGlvbiBCbihhLGIsYyxkKXtmb3IodmFyIGY9SC5JKGEueSxiLnkpLGc9ZC5vYSxoPWQubygwKSxrPXQuSygpLGw9MTtsPGc7bCsrKXt2YXIgbT1kLm8obCk7aWYobDxnLTEpe3ZhciBuPWQubyhsKzEpO2lmKGgueT09PW0ueSYmbS55PT09bi55KXtpZihtLng+aC54JiZuLng+bS54fHxtLng8aC54JiZuLng8bS54KW09bixsKyt9ZWxzZSBoLng9PT1tLngmJm0ueD09PW4ueCYmKG0ueT5oLnkmJm4ueT5tLnl8fG0ueTxoLnkmJm4ueTxtLnkpJiYobT1uLGwrKyl9YTp7dmFyIG49ayxwPWEueCxxPWEueSxyPWIueCxzPWIueSx1PWgueCxoPWgueSx2PW0ueCxEPW0ueTtpZighSC5JKHAscikpe2lmKEguSShxLHMpJiZILkkodSx2KSYmTWF0aC5taW4ocCxyKTx1JiZNYXRoLm1heChwLHIpPnUmJk1hdGgubWluKGgsRCk8cSYmTWF0aC5tYXgoaCxEKT5xJiYhSC5JKGgsRCkpe24ueD11O24ueT1xO249ITA7YnJlYWsgYX19ZWxzZSBpZighSC5JKHEscykmJkguSShoLEQpJiZNYXRoLm1pbihxLA0Kcyk8aCYmTWF0aC5tYXgocSxzKT5oJiZNYXRoLm1pbih1LHYpPHAmJk1hdGgubWF4KHUsdik+cCYmIUguSSh1LHYpKXtuLng9cDtuLnk9aDtuPSEwO2JyZWFrIGF9bi54PTA7bi55PTA7bj0hMX1uJiYoZj9jLnB1c2goay54KTpjLnB1c2goay55KSk7aD1tfXQuQihrKX10LkEoVix7ZnQ6ImZpcnN0UGlja0luZGV4In0sZnVuY3Rpb24oKXtyZXR1cm4gMj49dGhpcy5vYT8wOnRoaXMuaWN8fGduKHRoaXMpIT09d2I/MTowfSk7dC5BKFYse1d3OiJsYXN0UGlja0luZGV4In0sZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9hO3JldHVybiAwPT09YT8wOjI+PWE/YS0xOnRoaXMuaWN8fGhuKHRoaXMpIT09d2I/YS0yOmEtMX0pO2Z1bmN0aW9uIGRuKGEpe2E9YS5EZTtyZXR1cm4gYT09PXdnfHxhPT09eGd9ZnVuY3Rpb24gZm4oYSxiKXtpZihifHxkbihhKSl7dmFyIGM9YS5oO251bGw9PT1jfHxjLlBsLmNvbnRhaW5zKGEpfHxudWxsPT09YS5wenx8Yy5QbC5hZGQoYSxhLnB6KX19DQpmdW5jdGlvbiB6ZyhhLGIpe3ZhciBjPWEubGF5ZXI7aWYobnVsbCE9PWMmJmMudmlzaWJsZSYmIWMueWMpe3ZhciBkPWMuaDtpZihudWxsIT09ZClmb3IodmFyIGY9ITEsZD1kLll3O2QubmV4dCgpOyl7dmFyIGc9ZC52YWx1ZTtpZihnLnZpc2libGUpaWYoZz09PWMpZm9yKHZhciBmPSEwLGg9ITEsZz1nLkZiLm4saz1nLmxlbmd0aCxsPTA7bDxrO2wrKyl7dmFyIG09Z1tsXTttIGluc3RhbmNlb2YgViYmKG09PT1hP2g9ITA6aCYmQ24oYSxtLGIpKX1lbHNlIGlmKGYpZm9yKGc9Zy5GYi5uLGs9Zy5sZW5ndGgsbD0wO2w8aztsKyspbT1nW2xdLG0gaW5zdGFuY2VvZiBWJiZDbihhLG0sYil9fX1mdW5jdGlvbiBDbihhLGIsYyl7aWYobnVsbCE9PWImJmRuKGIpJiZudWxsIT09Yi5PYSl7dmFyIGQ9Yi52aigpO2QuTigpJiYoYS52aigpLlRmKGQpfHxjLlRmKGQpKSYmKGEudXNlc1NhbWVQb3J0KGIpfHxiLlllKCkpfX0NClYucHJvdG90eXBlLnVzZXNTYW1lUG9ydD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm9hLGM9YS5vYTtpZigwPGImJjA8Yyl7aWYodGhpcy5vKDApLnRmKGEubygwKSl8fHRoaXMubyhiLTEpLnRmKGEubyhjLTEpKSlyZXR1cm4hMH1lbHNlIGlmKHRoaXMuYWE9PT1hLmFhfHx0aGlzLmNhPT09YS5jYSlyZXR1cm4hMDtyZXR1cm4hMX07Vi5wcm90b3R5cGUuZGY9ZnVuY3Rpb24oYSl7RS5wcm90b3R5cGUuZGYuY2FsbCh0aGlzLGEpO2EmJnRoaXMudXBkYXRlUm91dGUoKTtpZihudWxsIT09dGhpcy53ZSlmb3IodmFyIGI9dGhpcy53ZS5rO2IubmV4dCgpOyliLnZhbHVlLmRmKGEpfTt0LmcoViwiYWRqdXN0aW5nIixWLnByb3RvdHlwZS5Mbyk7DQp0LmRlZmluZVByb3BlcnR5KFYse0xvOiJhZGp1c3RpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmxxfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxxO2IhPT1hJiYoZSYmdC5BYShhLFYsViwiYWRqdXN0aW5nIiksdGhpcy5scT1hLHRoaXMuaigiYWRqdXN0aW5nIixiLGEpKX0pO3QuZyhWLCJjb3JuZXIiLFYucHJvdG90eXBlLnN3KTt0LmRlZmluZVByb3BlcnR5KFYse3N3OiJjb3JuZXIifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnlxfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnlxO2IhPT1hJiYoZSYmdC5pKGEsIm51bWJlciIsViwiY29ybmVyIiksdGhpcy55cT1hLHRoaXMuWWUoKSx0aGlzLmooImNvcm5lciIsYixhKSl9KTt0LmcoViwiY3VydmUiLFYucHJvdG90eXBlLkRlKTsNCnQuZGVmaW5lUHJvcGVydHkoVix7RGU6ImN1cnZlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5CcX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5CcTtiIT09YSYmKGUmJnQuQWEoYSxWLFYsImN1cnZlIiksdGhpcy5CcT1hLHRoaXMuYWMoKSxmbih0aGlzLGI9PT14Z3x8Yj09PXdnfHxhPT09eGd8fGE9PT13ZyksdGhpcy5qKCJjdXJ2ZSIsYixhKSl9KTt0LmcoViwiY3VydmluZXNzIixWLnByb3RvdHlwZS5Xcyk7dC5kZWZpbmVQcm9wZXJ0eShWLHtXczoiY3VydmluZXNzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DcX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5DcTtiIT09YSYmKGUmJnQuaShhLCJudW1iZXIiLFYsImN1cnZpbmVzcyIpLHRoaXMuQ3E9YSx0aGlzLmFjKCksdGhpcy5qKCJjdXJ2aW5lc3MiLGIsYSkpfSk7dC5nKFYsInJvdXRpbmciLFYucHJvdG90eXBlLkt0KTsNCnQuZGVmaW5lUHJvcGVydHkoVix7S3Q6InJvdXRpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm5tfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLm5tO2IhPT1hJiYoZSYmdC5BYShhLFYsViwicm91dGluZyIpLHRoaXMubm09YSx0aGlzLnVpPW51bGwsdGhpcy5hYygpLGZuKHRoaXMsMj09PShiLnZhbHVlJjIpfHwyPT09KGEudmFsdWUmMikpLHRoaXMuaigicm91dGluZyIsYixhKSl9KTt0LmcoViwic21vb3RobmVzcyIsVi5wcm90b3R5cGUubG4pO3QuZGVmaW5lUHJvcGVydHkoVix7bG46InNtb290aG5lc3MifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnBzfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnBzO2IhPT1hJiYoZSYmdC5pKGEsIm51bWJlciIsViwic21vb3RobmVzcyIpLHRoaXMucHM9YSx0aGlzLlllKCksdGhpcy5qKCJzbW9vdGhuZXNzIixiLGEpKX0pOw0KZnVuY3Rpb24gYm4oYSl7dmFyIGI9YS5lZztpZihudWxsIT09Yil7dmFyIGM9YS5xZztpZihudWxsIT09Yyl7dmFyIGQ9YS5DaCxmPWEuU2g7YTp7aWYobnVsbCE9PWMmJm51bGwhPT1iLnJoKWZvcihhPWIucmguazthLm5leHQoKTspe3ZhciBnPWEudmFsdWU7aWYoZy5IcD09PWImJmcuenQ9PT1jJiZnLml4PT09ZCYmZy5qeD09PWZ8fGcuSHA9PT1jJiZnLnp0PT09YiYmZy5peD09PWYmJmcuang9PT1kKXthPWc7YnJlYWsgYX19YT1udWxsfWZvcih2YXIgaD1nPW51bGwsaz1iLm1jLm4sbD1rLmxlbmd0aCxtPTA7bTxsO20rKyl7dmFyIG49a1ttXTtpZihuLmVnPT09YiYmbi5DaD09PWQmJm4ucWc9PT1jJiZuLlNoPT09Znx8bi5lZz09PWMmJm4uQ2g9PT1mJiZuLnFnPT09YiYmbi5TaD09PWQpbnVsbD09PWg/aD1uOihudWxsPT09ZyYmKGc9bmV3IEIoViksZy5hZGQoaCkpLGcuYWRkKG4pKX1pZihudWxsIT09Zylmb3IobnVsbD09PWEmJihhPW5ldyBMbSxhLkhwPWIsYS5peD1kLGEuenQ9DQpjLGEuang9ZixLbShiLGEpLEttKGMsYSkpLGEubGlua3M9ZyxtPTA7bTxnLmNvdW50O20rKylpZihuPWcublttXSwwPT09bi5oZil7Yj0xO2ZvcihjPTA7YzxnLmNvdW50O2MrKylNYXRoLmFicyhnLm5bY10uaGYpPT09YiYmKGIrKyxjPS0xKTtuLnhuPWE7bi5oZj1uLmFhPT09YS5IcD9iOi1iO2I9bi5oOyhudWxsPT09Ynx8Yi5sZikmJm4uYWMoKX19fX0NCmZ1bmN0aW9uIGFuKGEpe3ZhciBiPWEueG47aWYobnVsbCE9PWIpe3ZhciBjPWEuaGY7YS54bj1udWxsO2EuaGY9MDtiLmxpbmtzLnJlbW92ZShhKTtpZigyPmIubGlua3MuY291bnQpMT09PWIubGlua3MuY291bnQmJihjPWIubGlua3MublswXSxjLnhuPW51bGwsYy5oZj0wLGMuYWMoKSksYz1iLkhwLG51bGwhPT1iJiZudWxsIT09Yy5yaCYmYy5yaC5yZW1vdmUoYiksYz1iLnp0LG51bGwhPT1iJiZudWxsIT09Yy5yaCYmYy5yaC5yZW1vdmUoYik7ZWxzZSBmb3IoYz1NYXRoLmFicyhjKSxhPTA9PT1jJTIsYj1iLmxpbmtzLms7Yi5uZXh0KCk7KXt2YXIgZD1iLnZhbHVlLGY9TWF0aC5hYnMoZC5oZiksZz0wPT09ZiUyO2Y+YyYmYT09PWcmJihkLmhmPTA8ZC5oZj9kLmhmLTI6ZC5oZisyLGQuYWMoKSl9fX1mdW5jdGlvbiBMbSgpe3QuQWModGhpcyk7dGhpcy5saW5rcz10aGlzLmp4PXRoaXMuenQ9dGhpcy5peD10aGlzLkhwPW51bGx9DQp0LlZkKExtLHtIcDohMCxpeDohMCx6dDohMCxqeDohMCxsaW5rczohMCxzcGFjaW5nOiEwfSk7ZnVuY3Rpb24gT2ooKXt0LkFjKHRoaXMpO3RoaXMuZ3JvdXA9bnVsbDt0aGlzLm10PSEwO3RoaXMuYWJvcnQ9ITE7dGhpcy5rZz10aGlzLmpnPTE7dGhpcy52cj10aGlzLnVyPS0xO3RoaXMuamU9dGhpcy5pZT04O3RoaXMudWM9bnVsbDt0aGlzLllHPSExO3RoaXMudEc9MjI7dGhpcy5sRj0xMTF9dC5WZChPaix7Z3JvdXA6ITAsbXQ6ITAsYWJvcnQ6ITAsWUc6ITAsdEc6ITAsbEY6ITB9KTt2YXIgdW49MSx2bj0xLHNuPTk5OTk5OTk5OSxEbj1zbjsNCk9qLnByb3RvdHlwZS5pbml0aWFsaXplPWZ1bmN0aW9uKGEpe2lmKCEoMD49YS53aWR0aHx8MD49YS5oZWlnaHQpKXt2YXIgYj1hLnksYz1hLngrYS53aWR0aCxkPWEueSthLmhlaWdodDt0aGlzLmpnPU1hdGguZmxvb3IoKGEueC10aGlzLmllKS90aGlzLmllKSp0aGlzLmllO3RoaXMua2c9TWF0aC5mbG9vcigoYi10aGlzLmplKS90aGlzLmplKSp0aGlzLmplO3RoaXMudXI9TWF0aC5jZWlsKChjKzIqdGhpcy5pZSkvdGhpcy5pZSkqdGhpcy5pZTt0aGlzLnZyPU1hdGguY2VpbCgoZCsyKnRoaXMuamUpL3RoaXMuamUpKnRoaXMuamU7YT0xKyhNYXRoLmNlaWwoKHRoaXMudXItdGhpcy5qZykvdGhpcy5pZSl8MCk7Yj0xKyhNYXRoLmNlaWwoKHRoaXMudnItdGhpcy5rZykvdGhpcy5qZSl8MCk7aWYobnVsbD09PXRoaXMudWN8fHRoaXMuR288YS0xfHx0aGlzLkhvPGItMSl7Yz1bXTtmb3IoZD0wO2Q8PWE7ZCsrKXtmb3IodmFyIGY9W10sZz0wO2c8PWI7ZysrKWZbZ109MDtjW2RdPWZ9dGhpcy51Yz0NCmM7dGhpcy5Hbz1hLTE7dGhpcy5Ibz1iLTF9aWYobnVsbCE9PXRoaXMudWMpZm9yKGE9MDthPD10aGlzLkdvO2ErKylmb3IoYj0wO2I8PXRoaXMuSG87YisrKXRoaXMudWNbYV1bYl09RG59fTt0LkEoT2ose09iOm51bGx9LGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB4KHRoaXMuamcsdGhpcy5rZyx0aGlzLnVyLXRoaXMuamcsdGhpcy52ci10aGlzLmtnKX0pO3QuZyhPaiwiY2VsbFdpZHRoIixPai5wcm90b3R5cGUuRm0pO3QuZGVmaW5lUHJvcGVydHkoT2ose0ZtOm51bGx9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWV9LGZ1bmN0aW9uKGEpezA8YSYmYSE9PXRoaXMuaWUmJih0aGlzLmllPWEsdGhpcy5pbml0aWFsaXplKHRoaXMuT2IpKX0pO3QuZyhPaiwiY2VsbEhlaWdodCIsT2oucHJvdG90eXBlLkVtKTt0LmRlZmluZVByb3BlcnR5KE9qLHtFbTpudWxsfSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmplfSxmdW5jdGlvbihhKXswPGEmJmEhPT10aGlzLmplJiYodGhpcy5qZT1hLHRoaXMuaW5pdGlhbGl6ZSh0aGlzLk9iKSl9KTsNCmZ1bmN0aW9uIEVuKGEsYixjKXtyZXR1cm4gYS5qZzw9YiYmYjw9YS51ciYmYS5rZzw9YyYmYzw9YS52cn1mdW5jdGlvbiBybihhLGIsYyl7aWYoIUVuKGEsYixjKSlyZXR1cm4gMDtiLT1hLmpnO2IvPWEuaWU7Yy09YS5rZztjLz1hLmplO3JldHVybiBhLnVjW2J8MF1bY3wwXX1mdW5jdGlvbiBSaihhLGIsYyl7RW4oYSxiLGMpJiYoYi09YS5qZyxiLz1hLmllLGMtPWEua2csYy89YS5qZSxhLnVjW2J8MF1bY3wwXT0wKX1mdW5jdGlvbiBRaihhKXtpZihudWxsIT09YS51Yylmb3IodmFyIGI9MDtiPD1hLkdvO2IrKylmb3IodmFyIGM9MDtjPD1hLkhvO2MrKylhLnVjW2JdW2NdPj11biYmKGEudWNbYl1bY118PXNuKX0NCmZ1bmN0aW9uIHBuKGEsYixjLGQsZil7aWYoYj5hLnVyfHxiK2Q8YS5qZ3x8Yz5hLnZyfHxjK2Y8YS5rZylyZXR1cm4hMDtiPShiLWEuamcpL2EuaWV8MDtjPShjLWEua2cpL2EuamV8MDtkPU1hdGgubWF4KDAsZCkvYS5pZSsxfDA7dmFyIGc9TWF0aC5tYXgoMCxmKS9hLmplKzF8MDswPmImJihkKz1iLGI9MCk7MD5jJiYoZys9YyxjPTApO2lmKDA+ZHx8MD5nKXJldHVybiEwO2Y9TWF0aC5taW4oYitkLTEsYS5Hbyl8MDtmb3IoZD1NYXRoLm1pbihjK2ctMSxhLkhvKXwwO2I8PWY7YisrKWZvcihnPWM7Zzw9ZDtnKyspaWYoMD09PWEudWNbYl1bZ10pcmV0dXJuITE7cmV0dXJuITB9DQpmdW5jdGlvbiBGbihhLGIsYyxkLGYsZyxoLGssbCl7aWYoIShiPGd8fGI+aHx8YzxrfHxjPmwpKXt2YXIgbSxuO209YnwwO249Y3wwO3ZhciBwPWEudWNbbV1bbl07aWYocD49dW4mJnA8c24pZm9yKGY/bis9ZDptKz1kLHArPXZuO2c8PW0mJm08PWgmJms8PW4mJm48PWwmJiEocD49YS51Y1ttXVtuXSk7KWEudWNbbV1bbl09cCxwKz12bixmP24rPWQ6bSs9ZDttPWY/bjptO2lmKGYpaWYoMDxkKWZvcihjKz1kO2M8bTtjKz1kKUZuKGEsYixjLDEsIWYsZyxoLGssbCksRm4oYSxiLGMsLTEsIWYsZyxoLGssbCk7ZWxzZSBmb3IoYys9ZDtjPm07Yys9ZClGbihhLGIsYywxLCFmLGcsaCxrLGwpLEZuKGEsYixjLC0xLCFmLGcsaCxrLGwpO2Vsc2UgaWYoMDxkKWZvcihiKz1kO2I8bTtiKz1kKUZuKGEsYixjLDEsIWYsZyxoLGssbCksRm4oYSxiLGMsLTEsIWYsZyxoLGssbCk7ZWxzZSBmb3IoYis9ZDtiPm07Yis9ZClGbihhLGIsYywxLCFmLGcsaCxrLGwpLEZuKGEsYixjLC0xLCFmLGcsaCwNCmssbCl9fWZ1bmN0aW9uIEduKGEsYixjLGQsZixnLGgsayxsLG0sbil7Zm9yKHZhciBwPWJ8MCxxPWN8MCxyPWEudWNbcF1bcV07MD09PXImJnA+ayYmcDxsJiZxPm0mJnE8bjspaWYoaD9xKz1nOnArPWcscj1hLnVjW3BdW3FdLDE+PU1hdGguYWJzKHAtZCkmJjE+PU1hdGguYWJzKHEtZikpcmV0dXJuIGEuYWJvcnQ9ITAsMDtwPWJ8MDtxPWN8MDtyPWEudWNbcF1bcV07Yj11bjtmb3IoYS51Y1twXVtxXT1iOzA9PT1yJiZwPmsmJnA8bCYmcT5tJiZxPG47KWg/cSs9ZzpwKz1nLHI9YS51Y1twXVtxXSxhLnVjW3BdW3FdPWIsYis9dm47cmV0dXJuIGg/cTpwfQ0KZnVuY3Rpb24gcW4oYSxiLGMsZCxmLGcpe2lmKG51bGwhPT1hLnVjKXthLmFib3J0PSExO3ZhciBoPWIueCxrPWIueTtpZihFbihhLGgsaykpe3ZhciBoPWgtYS5qZyxoPWgvYS5pZSxrPWstYS5rZyxrPWsvYS5qZSxsPWQueCxtPWQueTtpZihFbihhLGwsbSkpaWYobC09YS5qZyxsLz1hLmllLG0tPWEua2csbS89YS5qZSwxPj1NYXRoLmFicyhoLWwpJiYxPj1NYXRoLmFicyhrLW0pKWEuYWJvcnQ9ITA7ZWxzZXt2YXIgbj1nLng7Yj1nLnk7ZD1nLngrZy53aWR0aDt2YXIgcD1nLnkrZy5oZWlnaHQsbj1uLWEuamcsbj1uL2EuaWU7Yi09YS5rZztiLz1hLmplO2QtPWEuamc7ZC89YS5pZTtwLT1hLmtnO3AvPWEuamU7Zz1NYXRoLm1heCgwLE1hdGgubWluKGEuR28sbnwwKSk7ZD1NYXRoLm1pbihhLkdvLE1hdGgubWF4KDAsZHwwKSk7Yj1NYXRoLm1heCgwLE1hdGgubWluKGEuSG8sYnwwKSk7dmFyIHA9TWF0aC5taW4oYS5IbyxNYXRoLm1heCgwLHB8MCkpLGg9aHwwLGs9a3wwLGw9bHwwLA0KbT1tfDAsbj1oLHE9ayxyPTA9PT1jfHw5MD09PWM/MTotMTsoYz05MD09PWN8fDI3MD09PWMpP3E9R24oYSxoLGssbCxtLHIsYyxnLGQsYixwKTpuPUduKGEsaCxrLGwsbSxyLGMsZyxkLGIscCk7aWYoIWEuYWJvcnQpe2E6e2M9MD09PWZ8fDkwPT09Zj8xOi0xO2Y9OTA9PT1mfHwyNzA9PT1mO2Zvcih2YXIgcj1sfDAscz1tfDAsdT1hLnVjW3JdW3NdOzA9PT11JiZyPmcmJnI8ZCYmcz5iJiZzPHA7KWlmKGY/cys9YzpyKz1jLHU9YS51Y1tyXVtzXSwxPj1NYXRoLmFicyhyLWgpJiYxPj1NYXRoLmFicyhzLWspKXthLmFib3J0PSEwO2JyZWFrIGF9cj1sfDA7cz1tfDA7dT1hLnVjW3JdW3NdO2ZvcihhLnVjW3JdW3NdPURuOzA9PT11JiZyPmcmJnI8ZCYmcz5iJiZzPHA7KWY/cys9YzpyKz1jLHU9YS51Y1tyXVtzXSxhLnVjW3JdW3NdPURufWEuYWJvcnR8fChGbihhLG4scSwxLCExLGcsZCxiLHApLEZuKGEsbixxLC0xLCExLGcsZCxiLHApLEZuKGEsbixxLDEsITAsZyxkLGIscCksRm4oYSwNCm4scSwtMSwhMCxnLGQsYixwKSl9fX19fWZ1bmN0aW9uIGxuKCl7dC5BYyh0aGlzKTt0aGlzLnBvcnQ9dGhpcy5HYz1udWxsO3RoaXMuRmc9W107dGhpcy5HcD0hMX10LlZkKGxuLHtHYzohMCxwb3J0OiEwLEZnOiEwLEdwOiEwfSk7bG4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuRmcsYj10aGlzLkdjLnRvU3RyaW5nKCkrIiAiK2EubGVuZ3RoLnRvU3RyaW5nKCkrIjoiLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtudWxsIT09ZCYmKGIrPSJcbiAgIitkLnRvU3RyaW5nKCkpfXJldHVybiBifTsNCmZ1bmN0aW9uIEhuKGEsYixjLGQpe2I9Yi5vZmZzZXRZO3N3aXRjaChiKXtjYXNlIHQuU2M6cmV0dXJuIDkwO2Nhc2UgdC5KYzpyZXR1cm4gMTgwO2Nhc2UgdC5iZDpyZXR1cm4gMjcwO2Nhc2UgdC5UYzpyZXR1cm4gMH1zd2l0Y2goYil7Y2FzZSB0LlNjfHQuYmQ6cmV0dXJuIDE4MDxjPzI3MDo5MDtjYXNlIHQuSmN8dC5UYzpyZXR1cm4gOTA8YyYmMjcwPj1jPzE4MDowfWE9MTgwKk1hdGguYXRhbjIoYS5oZWlnaHQsYS53aWR0aCkvTWF0aC5QSTtzd2l0Y2goYil7Y2FzZSB0LkpjfHQuYmQ6cmV0dXJuIGM+YSYmYzw9MTgwK2E/MTgwOjI3MDtjYXNlIHQuYmR8dC5UYzpyZXR1cm4gYz4xODAtYSYmYzw9MzYwLWE/MjcwOjA7Y2FzZSB0LlRjfHQuU2M6cmV0dXJuIGM+YSYmYzw9MTgwK2E/OTA6MDtjYXNlIHQuU2N8dC5KYzpyZXR1cm4gYz4xODAtYSYmYzw9MzYwLWE/MTgwOjkwO2Nhc2UgdC5KY3x0LmJkfHQuVGM6cmV0dXJuIDkwPGMmJmM8PTE4MCthPzE4MDpjPjE4MCthJiZjPD0zNjAtDQphPzI3MDowO2Nhc2UgdC5iZHx0LlRjfHQuU2M6cmV0dXJuIDE4MDxjJiZjPD0zNjAtYT8yNzA6Yz5hJiYxODA+PWM/OTA6MDtjYXNlIHQuVGN8dC5TY3x0LkpjOnJldHVybiBjPmEmJmM8PTE4MC1hPzkwOmM+MTgwLWEmJjI3MD49Yz8xODA6MDtjYXNlIHQuU2N8dC5KY3x0LmJkOnJldHVybiBjPjE4MC1hJiZjPD0xODArYT8xODA6Yz4xODArYT8yNzA6OTB9ZCYmYiE9PSh0LkpjfHQuYmR8dC5UY3x0LlNjKSYmKGMtPTE1LDA+YyYmKGMrPTM2MCkpO3JldHVybiBjPmEmJmM8MTgwLWE/OTA6Yz49MTgwLWEmJmM8PTE4MCthPzE4MDpjPjE4MCthJiZjPDM2MC1hPzI3MDowfQ0KZnVuY3Rpb24gbW4oYSxiKXt2YXIgYz1hLkZnO2lmKDA9PT1jLmxlbmd0aCl7YTppZighYS5HcCl7Yz1hLkdwO2EuR3A9ITA7dmFyIGQsZj1udWxsLGc9YS5HYztpZihnIGluc3RhbmNlb2YgVCYmIWcuWWQpe2lmKCFnLnBhLk4oKSl7YS5HcD1jO2JyZWFrIGF9Zj1nO2Q9Zi56RSgpfWVsc2UgZD1hLkdjLkFFKCk7dmFyIGg9YS5GZy5sZW5ndGg9MCxrPWEucG9ydC5xYihFYix0LksoKSksbD1hLnBvcnQucWIoUGIsdC5LKCkpLGc9dC5oayhrLngsay55LDAsMCk7Zy5raihsKTt0LkIoayk7dC5CKGwpO2s9dC5sYyhnLngrZy53aWR0aC8yLGcueStnLmhlaWdodC8yKTtmb3IoZD1kLms7ZC5uZXh0KCk7KWlmKGw9ZC52YWx1ZSxsLlFhKCkpe3ZhciBtPXdiLG49bC51ZD09PWEucG9ydHx8bC5hYS5tbChmKSxtPW4/Z24obCxhLnBvcnQpOmhuKGwsYS5wb3J0KTtpZihtLnJwKCkmJihuPW4/bC5mZTpsLnVkLG51bGwhPT1uKSl7dmFyIHA9bi5TO2lmKG51bGwhPT1wKXt2YXIgbj1sLmNvbXB1dGVPdGhlclBvaW50KHAsDQpuKSxwPWsuJGkobiksbT1IbihnLG0scCxsLmljKSxxOzA9PT1tPyhxPXQuVGMsMTgwPHAmJihwLT0zNjApKTpxPTkwPT09bT90LlNjOjE4MD09PW0/dC5KYzp0LmJkOyhtPWEuRmdbaF0pPyhtLmxpbms9bCxtLmFuZ2xlPXAsbS5iZT1xKToobT1uZXcgSW4obCxwLHEpLGEuRmdbaF09bSk7bS5oeC5zZXQobik7aCsrfX19dC5CKGspO2EuRmcuc29ydChsbi5wcm90b3R5cGUuc0opO2Y9YS5GZy5sZW5ndGg7az0tMTtmb3IoaD1kPTA7aDxmO2grKyltPWEuRmdbaF0sbnVsbCE9PW0mJihtLmJlIT09ayYmKGs9bS5iZSxkPTApLG0ubXA9ZCxkKyspO2s9LTE7ZD0wO2ZvcihoPWYtMTswPD1oO2gtLSltPWEuRmdbaF0sbnVsbCE9PW0mJihtLmJlIT09ayYmKGs9bS5iZSxkPW0ubXArMSksbS5KbT1kKTtoPWEuRmc7bj1hLnBvcnQ7Zj1hLkdjLkVKO2s9dC5LKCk7ZD10LksoKTtsPXQuSygpO209dC5LKCk7bi5xYihFYixrKTtuLnFiKEdiLGQpO24ucWIoUGIsbCk7bi5xYihMYixtKTt2YXIgcj0NCnE9cD1uPTA7aWYoZj09PUptKWZvcih2YXIgcz0wO3M8aC5sZW5ndGg7cysrKXt2YXIgdT1oW3NdO2lmKG51bGwhPT11KXt2YXIgdj11LmxpbmsuY29tcHV0ZVRoaWNrbmVzcygpO3N3aXRjaCh1LmJlKXtjYXNlIHQuU2M6cSs9djticmVhaztjYXNlIHQuSmM6cis9djticmVhaztjYXNlIHQuYmQ6bis9djticmVhaztkZWZhdWx0OmNhc2UgdC5UYzpwKz12fX19Zm9yKHZhciBEPTAsQSxHLEw9MCxOPUc9MCxPPTEscz0wO3M8aC5sZW5ndGg7cysrKWlmKHU9aFtzXSxudWxsIT09dSl7aWYoRCE9dS5iZSl7RD11LmJlO3N3aXRjaChEKXtjYXNlIHQuU2M6QT1sO0c9bTticmVhaztjYXNlIHQuSmM6QT1tO0c9azticmVhaztjYXNlIHQuYmQ6QT1rO0c9ZDticmVhaztkZWZhdWx0OmNhc2UgdC5UYzpBPWQsRz1sfUw9Ry54LUEueDtHPUcueS1BLnk7c3dpdGNoKEQpe2Nhc2UgdC5TYzpxPk1hdGguYWJzKEwpPyhPPU1hdGguYWJzKEwpL3EscT1NYXRoLmFicyhMKSk6Tz0xO2JyZWFrO2Nhc2UgdC5KYzpyPg0KTWF0aC5hYnMoRyk/KE89TWF0aC5hYnMoRykvcixyPU1hdGguYWJzKEcpKTpPPTE7YnJlYWs7Y2FzZSB0LmJkOm4+TWF0aC5hYnMoTCk/KE89TWF0aC5hYnMoTCkvbixuPU1hdGguYWJzKEwpKTpPPTE7YnJlYWs7ZGVmYXVsdDpjYXNlIHQuVGM6cD5NYXRoLmFicyhHKT8oTz1NYXRoLmFicyhHKS9wLHA9TWF0aC5hYnMoRykpOk89MX1OPTB9dmFyIFU9dS54cDtpZihmPT09Sm0pe3Y9dS5saW5rLmNvbXB1dGVUaGlja25lc3MoKTt2Kj1PO1Uuc2V0KEEpO3N3aXRjaChEKXtjYXNlIHQuU2M6VS54PUEueCtMLzIrcS8yLU4tdi8yO2JyZWFrO2Nhc2UgdC5KYzpVLnk9QS55K0cvMityLzItTi12LzI7YnJlYWs7Y2FzZSB0LmJkOlUueD1BLngrTC8yLW4vMitOK3YvMjticmVhaztkZWZhdWx0OmNhc2UgdC5UYzpVLnk9QS55K0cvMi1wLzIrTit2LzJ9Tis9dn1lbHNlIHY9MC41LGY9PT1HbSYmKHY9KHUubXArMSkvKHUuSm0rMSkpLFUueD1BLngrTCp2LFUueT1BLnkrRyp2fXQuQihrKTt0LkIoZCk7DQp0LkIobCk7dC5CKG0pO0E9YS5GZztmb3IoaD0wO2g8QS5sZW5ndGg7aCsrKWY9QVtoXSxudWxsIT09ZiYmKGYuQXc9YS5jb21wdXRlRW5kU2VnbWVudExlbmd0aChmKSk7YS5HcD1jO3QuaGMoZyl9Yz1hLkZnfWZvcihnPTA7ZzxjLmxlbmd0aDtnKyspaWYoQT1jW2ddLG51bGwhPT1BJiZBLmxpbms9PT1iKXJldHVybiBBO3JldHVybiBudWxsfWxuLnByb3RvdHlwZS5zSj1mdW5jdGlvbihhLGIpe3JldHVybiBhPT09Yj8wOm51bGw9PT1hPy0xOm51bGw9PT1iPzE6YS5iZTxiLmJlPy0xOmEuYmU+Yi5iZT8xOmEuYW5nbGU8Yi5hbmdsZT8tMTphLmFuZ2xlPmIuYW5nbGU/MTowfTsNCmxuLnByb3RvdHlwZS5jb21wdXRlRW5kU2VnbWVudExlbmd0aD1mdW5jdGlvbihhKXt2YXIgYj1hLmxpbmssYz1iLmNvbXB1dGVFbmRTZWdtZW50TGVuZ3RoKHRoaXMuR2MsdGhpcy5wb3J0LHdiLGIudWQ9PT10aGlzLnBvcnQpLGQ9YS5tcDtpZigwPmQpcmV0dXJuIGM7dmFyIGY9YS5KbTtpZigxPj1mfHwhYi5pYylyZXR1cm4gYzt2YXIgYj1hLmh4LGc9YS54cDtpZihhLmJlPT09dC5KY3x8YS5iZT09PXQuU2MpZD1mLTEtZDtyZXR1cm4oKGE9YS5iZT09PXQuSmN8fGEuYmU9PT10LlRjKT9iLnk8Zy55OmIueDxnLngpP2MrOCpkOihhP2IueT09PWcueTpiLng9PT1nLngpP2M6Yys4KihmLTEtZCl9O2Z1bmN0aW9uIEluKGEsYixjKXt0aGlzLmxpbms9YTt0aGlzLmFuZ2xlPWI7dGhpcy5iZT1jO3RoaXMuaHg9bmV3IHc7dGhpcy5KbT10aGlzLm1wPTA7dGhpcy54cD1uZXcgdzt0aGlzLkF3PTB9DQp0LlZkKEluLHtsaW5rOiEwLGFuZ2xlOiEwLGJlOiEwLGh4OiEwLG1wOiEwLEptOiEwLHhwOiEwLEF3OiEwfSk7SW4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluay50b1N0cmluZygpKyIgIit0aGlzLmFuZ2xlLnRvU3RyaW5nKCkrIiAiK3RoaXMuYmUudG9TdHJpbmcoKSsiOiIrdGhpcy5tcC50b1N0cmluZygpKyIvIit0aGlzLkptLnRvU3RyaW5nKCkrIiAiK3RoaXMueHAudG9TdHJpbmcoKSsiICIrdGhpcy5Bdy50b1N0cmluZygpKyIgIit0aGlzLmh4LnRvU3RyaW5nKCl9Ow0KZnVuY3Rpb24gVChhKXswPT09YXJndW1lbnRzLmxlbmd0aD9TLmNhbGwodGhpcyxaZyk6Uy5jYWxsKHRoaXMsYSk7dGhpcy54cj1uZXcgQyhFKTt0aGlzLnFvPW5ldyBDKFQpO3RoaXMuTms9dGhpcy55cj10aGlzLndyPW51bGw7dGhpcy5Fcz0hMTt0aGlzLmJyPSEwO3RoaXMuRnM9ITE7dGhpcy5KYj10aGlzLnRzPW51bGw7dGhpcy51cT0hMTt0aGlzLnZxPSEwO3RoaXMud3E9ITE7dGhpcy5QZD1uZXcgYmU7dGhpcy5QZC5ncm91cD10aGlzfXQuZ2EoIkdyb3VwIixUKTt0LkthKFQsUyk7DQpULnByb3RvdHlwZS5jbG9uZVByb3RlY3RlZD1mdW5jdGlvbihhKXtTLnByb3RvdHlwZS5jbG9uZVByb3RlY3RlZC5jYWxsKHRoaXMsYSk7YS53cj10aGlzLndyO2EueXI9dGhpcy55cjthLk5rPXRoaXMuTms7YS5Fcz10aGlzLkVzO2EuYnI9dGhpcy5icjthLkZzPXRoaXMuRnM7YS50cz10aGlzLnRzO3ZhciBiPWEuYXQoZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBUZ30pO2EuSmI9YiBpbnN0YW5jZW9mIFRnP2I6bnVsbDthLnVxPXRoaXMudXE7YS52cT10aGlzLnZxO2Eud3E9dGhpcy53cTtudWxsIT09dGhpcy5QZD8oYS5QZD10aGlzLlBkLmNvcHkoKSxhIGluc3RhbmNlb2YgVCYmKGEuUGQuZ3JvdXA9YSkpOihudWxsIT09YS5QZCYmKGEuUGQuZ3JvdXA9bnVsbCksYS5QZD1udWxsKX07DQpULnByb3RvdHlwZS5aaD1mdW5jdGlvbihhKXtTLnByb3RvdHlwZS5aaC5jYWxsKHRoaXMsYSk7dmFyIGI9YS5kcCgpO2ZvcihhPWEuUmM7YS5uZXh0KCk7KXt2YXIgYz1hLnZhbHVlO2MuZmEoKTtjLkooOCk7Yy5QZigpO2MgaW5zdGFuY2VvZiBUJiYoYy5ZdD1jLllkLEpuKGMsYikpO2lmKGMgaW5zdGFuY2VvZiBTKWMud2YoYik7ZWxzZSBpZihjIGluc3RhbmNlb2YgVilmb3IoYz1jLmVrO2MubmV4dCgpOyljLnZhbHVlLndmKGIpfX07DQpULnByb3RvdHlwZS5mbj1mdW5jdGlvbihhLGIsYyxkLGYsZyxoKXtpZihhPT09d2QmJiJlbGVtZW50cyI9PT1iKWlmKGYgaW5zdGFuY2VvZiBUZyludWxsPT09dGhpcy5KYj90aGlzLkpiPWY6dGhpcy5KYiE9PWYmJnQubSgiQ2Fubm90IGluc2VydCBhIHNlY29uZCBQbGFjZWhvbGRlciBpbnRvIHRoZSB2aXN1YWwgdHJlZSBvZiBhIEdyb3VwLiIpO2Vsc2V7aWYoZiBpbnN0YW5jZW9mIHkpe3ZhciBrPWYuYXQoZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBUZ30pO2sgaW5zdGFuY2VvZiBUZyYmKG51bGw9PT10aGlzLkpiP3RoaXMuSmI9azp0aGlzLkpiIT09ayYmdC5tKCJDYW5ub3QgaW5zZXJ0IGEgc2Vjb25kIFBsYWNlaG9sZGVyIGludG8gdGhlIHZpc3VhbCB0cmVlIG9mIGEgR3JvdXAuIikpfX1lbHNlIGE9PT14ZCYmImVsZW1lbnRzIj09PWImJm51bGwhPT10aGlzLkpiJiYoZD09PXRoaXMuSmI/dGhpcy5KYj1udWxsOmQgaW5zdGFuY2VvZiB5JiZ0aGlzLkpiLmVqKGQpJiYNCih0aGlzLkpiPW51bGwpKTtTLnByb3RvdHlwZS5mbi5jYWxsKHRoaXMsYSxiLGMsZCxmLGcsaCl9O1QucHJvdG90eXBlLlVqPWZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuTWs9dGhpcy5KYjt5LnByb3RvdHlwZS5Vai5jYWxsKHRoaXMsYSxiLGMsZCl9O1QucHJvdG90eXBlLm5sPWZ1bmN0aW9uKCl7aWYoIVMucHJvdG90eXBlLm5sLmNhbGwodGhpcykpcmV0dXJuITE7Zm9yKHZhciBhPXRoaXMuUmM7YS5uZXh0KCk7KXt2YXIgYj1hLnZhbHVlO2lmKGIgaW5zdGFuY2VvZiBTKXtpZihiLlFhKCkmJlBpKGIpKXJldHVybiExfWVsc2UgaWYoYiBpbnN0YW5jZW9mIFYmJmIuUWEoKSYmUGkoYikmJmIuYWEhPT10aGlzJiZiLmNhIT09dGhpcylyZXR1cm4hMX1yZXR1cm4hMH07dC5BKFQse3BsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSmJ9KTt0LmcoVCwiY29tcHV0ZXNCb3VuZHNBZnRlckRyYWciLFQucHJvdG90eXBlLld6KTsNCnQuZGVmaW5lUHJvcGVydHkoVCx7V3o6ImNvbXB1dGVzQm91bmRzQWZ0ZXJEcmFnIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy51cTtiIT09YSYmKHQuaShhLCJib29sZWFuIixULCJjb21wdXRlc0JvdW5kc0FmdGVyRHJhZyIpLHRoaXMudXE9YSx0aGlzLmooImNvbXB1dGVzQm91bmRzQWZ0ZXJEcmFnIixiLGEpKX0pO3QuZyhULCJjb21wdXRlc0JvdW5kc0luY2x1ZGluZ0xpbmtzIixULnByb3RvdHlwZS5iRSk7dC5kZWZpbmVQcm9wZXJ0eShULHtiRToiY29tcHV0ZXNCb3VuZHNJbmNsdWRpbmdMaW5rcyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudnF9LGZ1bmN0aW9uKGEpe3QuaShhLCJib29sZWFuIixULCJjb21wdXRlc0JvdW5kc0luY2x1ZGluZ0xpbmtzIik7dmFyIGI9dGhpcy52cTtiIT09YSYmKHRoaXMudnE9YSx0aGlzLmooImNvbXB1dGVzQm91bmRzSW5jbHVkaW5nTGlua3MiLGIsYSkpfSk7DQp0LmcoVCwiY29tcHV0ZXNCb3VuZHNJbmNsdWRpbmdMb2NhdGlvbiIsVC5wcm90b3R5cGUuY0UpO3QuZGVmaW5lUHJvcGVydHkoVCx7Y0U6ImNvbXB1dGVzQm91bmRzSW5jbHVkaW5nTG9jYXRpb24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLndxfSxmdW5jdGlvbihhKXt0LmkoYSwiYm9vbGVhbiIsVCwiY29tcHV0ZXNCb3VuZHNJbmNsdWRpbmdMb2NhdGlvbiIpO3ZhciBiPXRoaXMud3E7YiE9PWEmJih0aGlzLndxPWEsdGhpcy5qKCJjb21wdXRlc0JvdW5kc0luY2x1ZGluZ0xvY2F0aW9uIixiLGEpKX0pO3QuQShULHtSYzoibWVtYmVyUGFydHMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnhyLmt9KTsNCmZ1bmN0aW9uIENtKGEsYil7aWYoYS54ci5hZGQoYikpe2IgaW5zdGFuY2VvZiBUJiZhLnFvLmFkZChiKTt2YXIgYz1hLndGO2lmKG51bGwhPT1jKXt2YXIgZD0hMCxmPWEuaDtudWxsIT09ZiYmKGQ9Zi5OYSxmLk5hPSEwKTtjKGEsYik7bnVsbCE9PWYmJihmLk5hPWQpfX1jPWEuSmI7bnVsbD09PWMmJihjPWEpO2MuZmEoKX1mdW5jdGlvbiBCbShhLGIpe2lmKGEueHIucmVtb3ZlKGIpKXtiIGluc3RhbmNlb2YgVCYmYS5xby5yZW1vdmUoYik7dmFyIGM9YS54RjtpZihudWxsIT09Yyl7dmFyIGQ9ITAsZj1hLmg7bnVsbCE9PWYmJihkPWYuTmEsZi5OYT0hMCk7YyhhLGIpO251bGwhPT1mJiYoZi5OYT1kKX19Yz1hLkpiO251bGw9PT1jJiYoYz1hKTtjLmZhKCl9VC5wcm90b3R5cGUuTW09ZnVuY3Rpb24oKXtpZigwPHRoaXMueHIuY291bnQpe3ZhciBhPXRoaXMuaDtpZihudWxsPT09YSlyZXR1cm47Zm9yKHZhciBiPXRoaXMueHIuY29weSgpLms7Yi5uZXh0KCk7KWEucmVtb3ZlKGIudmFsdWUpfVMucHJvdG90eXBlLk1tLmNhbGwodGhpcyl9Ow0KVC5wcm90b3R5cGUueXg9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmxheWVyO251bGwhPT1hJiZhLnl4KHRoaXMpfTt0LmcoVCwibGF5b3V0IixULnByb3RvdHlwZS5qYyk7dC5kZWZpbmVQcm9wZXJ0eShULHtqYzoibGF5b3V0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QZH0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5QZDtiIT09YSYmKG51bGwhPT1hJiZ0LmwoYSxiZSxULCJsYXlvdXQiKSxudWxsIT09YiYmKGIuaD1udWxsLGIuZ3JvdXA9bnVsbCksdGhpcy5QZD1hLG51bGwhPT1hJiYoYS5oPXRoaXMuaCxhLmdyb3VwPXRoaXMpLHRoaXMuaigibGF5b3V0IixiLGEpKX0pO3QuZyhULCJtZW1iZXJBZGRlZCIsVC5wcm90b3R5cGUud0YpOw0KdC5kZWZpbmVQcm9wZXJ0eShULHt3RjoibWVtYmVyQWRkZWQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLndyfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLndyO2IhPT1hJiYobnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsVCwibWVtYmVyQWRkZWQiKSx0aGlzLndyPWEsdGhpcy5qKCJtZW1iZXJBZGRlZCIsYixhKSl9KTt0LmcoVCwibWVtYmVyUmVtb3ZlZCIsVC5wcm90b3R5cGUueEYpO3QuZGVmaW5lUHJvcGVydHkoVCx7eEY6Im1lbWJlclJlbW92ZWQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnlyfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLnlyO2IhPT1hJiYobnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsVCwibWVtYmVyUmVtb3ZlZCIpLHRoaXMueXI9YSx0aGlzLmooIm1lbWJlclJlbW92ZWQiLGIsYSkpfSk7dC5nKFQsIm1lbWJlclZhbGlkYXRpb24iLFQucHJvdG90eXBlLnV0KTsNCnQuZGVmaW5lUHJvcGVydHkoVCx7dXQ6Im1lbWJlclZhbGlkYXRpb24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk5rfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLk5rO2IhPT1hJiYobnVsbCE9PWEmJnQuaShhLCJmdW5jdGlvbiIsVCwibWVtYmVyVmFsaWRhdGlvbiIpLHRoaXMuTms9YSx0aGlzLmooIm1lbWJlclZhbGlkYXRpb24iLGIsYSkpfSk7VC5wcm90b3R5cGUuY2FuQWRkTWVtYmVycz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmg7aWYobnVsbD09PWIpcmV0dXJuITE7Yj1iLlNlO2ZvcihhPVllKGEpLms7YS5uZXh0KCk7KWlmKCFiLmlzVmFsaWRNZW1iZXIodGhpcyxhLnZhbHVlKSlyZXR1cm4hMTtyZXR1cm4hMH07DQpULnByb3RvdHlwZS5hZGRNZW1iZXJzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5oO2lmKG51bGw9PT1jKXJldHVybiExO2Zvcih2YXIgYz1jLlNlLGQ9ITAsZj1ZZShhKS5rO2YubmV4dCgpOyl7dmFyIGc9Zi52YWx1ZTshYnx8Yy5pc1ZhbGlkTWVtYmVyKHRoaXMsZyk/Zy5nYj10aGlzOmQ9ITF9cmV0dXJuIGR9O3QuZyhULCJ1bmdyb3VwYWJsZSIsVC5wcm90b3R5cGUuT0cpO3QuZGVmaW5lUHJvcGVydHkoVCx7T0c6InVuZ3JvdXBhYmxlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Fc30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5FcztiIT09YSYmKHQuaShhLCJib29sZWFuIixULCJ1bmdyb3VwYWJsZSIpLHRoaXMuRXM9YSx0aGlzLmooInVuZ3JvdXBhYmxlIixiLGEpKX0pOw0KVC5wcm90b3R5cGUuY2FuVW5ncm91cD1mdW5jdGlvbigpe2lmKCF0aGlzLk9HKXJldHVybiExO3ZhciBhPXRoaXMubGF5ZXI7aWYobnVsbCE9PWEmJiFhLlJvKXJldHVybiExO2E9YS5oO3JldHVybiBudWxsPT09YXx8YS5Sbz8hMDohMX07VC5wcm90b3R5cGUuaW52YWxpZGF0ZUNvbm5lY3RlZExpbmtzPVQucHJvdG90eXBlLndmPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPW51bGwpO1MucHJvdG90eXBlLndmLmNhbGwodGhpcyxhKTtmb3IodmFyIGI9dGhpcy56RSgpO2IubmV4dCgpOyl7dmFyIGM9Yi52YWx1ZTtpZihudWxsPT09YXx8IWEuY29udGFpbnMoYykpe3ZhciBkPWMuYWE7bnVsbCE9PWQmJmQubWwodGhpcykmJiFkLlFhKCk/Yy5hYygpOihkPWMuY2EsbnVsbCE9PWQmJmQubWwodGhpcykmJiFkLlFhKCkmJmMuYWMoKSl9fX07DQpULnByb3RvdHlwZS5maW5kRXh0ZXJuYWxMaW5rc0Nvbm5lY3RlZD1ULnByb3RvdHlwZS56RT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZHAoKTthLmFkZCh0aGlzKTtmb3IodmFyIGI9bmV3IEMoViksYz1hLms7Yy5uZXh0KCk7KXt2YXIgZD1jLnZhbHVlO2lmKGQgaW5zdGFuY2VvZiBTKWZvcihkPWQucWU7ZC5uZXh0KCk7KXt2YXIgZj1kLnZhbHVlO2EuY29udGFpbnMoZil8fGIuYWRkKGYpfX1yZXR1cm4gYi5rfTtULnByb3RvdHlwZS5maW5kRXh0ZXJuYWxOb2Rlc0Nvbm5lY3RlZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZHAoKTthLmFkZCh0aGlzKTtmb3IodmFyIGI9bmV3IEMoUyksYz1hLms7Yy5uZXh0KCk7KXt2YXIgZD1jLnZhbHVlO2lmKGQgaW5zdGFuY2VvZiBTKWZvcihkPWQucWU7ZC5uZXh0KCk7KXt2YXIgZj1kLnZhbHVlLGc9Zi5hYTthLmNvbnRhaW5zKGcpJiZnIT09dGhpc3x8Yi5hZGQoZyk7Zj1mLmNhO2EuY29udGFpbnMoZikmJmYhPT10aGlzfHxiLmFkZChmKX19cmV0dXJuIGIua307DQpULnByb3RvdHlwZS5maW5kU3ViR3JhcGhQYXJ0cz1ULnByb3RvdHlwZS5kcD1mdW5jdGlvbigpe3ZhciBhPW5ldyBDKEUpO0llKGEsdGhpcywhMCwwKTthLnJlbW92ZSh0aGlzKTtyZXR1cm4gYX07VC5wcm90b3R5cGUuZGY9ZnVuY3Rpb24oYSl7Uy5wcm90b3R5cGUuZGYuY2FsbCh0aGlzLGEpO2Zvcih2YXIgYj10aGlzLlJjO2IubmV4dCgpOyliLnZhbHVlLmRmKGEpfTtULnByb3RvdHlwZS5jb2xsYXBzZVN1YkdyYXBoPVQucHJvdG90eXBlLmNvbGxhcHNlU3ViR3JhcGg9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7aWYobnVsbCE9PWEmJiFhLldkKXthLldkPSEwO3ZhciBiPXRoaXMuZHAoKTtKbih0aGlzLGIpO2EuV2Q9ITF9fTsNCmZ1bmN0aW9uIEpuKGEsYil7Zm9yKHZhciBjPWEuUmM7Yy5uZXh0KCk7KXt2YXIgZD1jLnZhbHVlO2QuZGYoITEpO2lmKGQgaW5zdGFuY2VvZiBUKXt2YXIgZj1kO2YuWWQmJihmLll0PWYuWWQsSm4oZixiKSl9aWYoZCBpbnN0YW5jZW9mIFMpZC53ZihiKTtlbHNlIGlmKGQgaW5zdGFuY2VvZiBWKWZvcihkPWQuZWs7ZC5uZXh0KCk7KWQudmFsdWUud2YoYil9YS5ZZD0hMX1ULnByb3RvdHlwZS5leHBhbmRTdWJHcmFwaD1ULnByb3RvdHlwZS5leHBhbmRTdWJHcmFwaD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaDtpZihudWxsIT09YSYmIWEuV2Qpe3ZhciBiPWEuWmI7MCE9PWEuamEuSmUmJmIudGwoKTthLldkPSEwO3ZhciBjPXRoaXMuZHAoKTtLbih0aGlzLGMsYix0aGlzKTthLldkPSExfX07DQpmdW5jdGlvbiBLbihhLGIsYyxkKXtmb3IodmFyIGY9YS5SYztmLm5leHQoKTspe3ZhciBnPWYudmFsdWU7Zy5kZighMCk7aWYoZyBpbnN0YW5jZW9mIFQpe3ZhciBoPWc7aC5ZdCYmKGguWXQ9ITEsS24oaCxiLGMsZCkpfWlmKGcgaW5zdGFuY2VvZiBTKWcud2YoYiksTmgoYyxnLGQpO2Vsc2UgaWYoZyBpbnN0YW5jZW9mIFYpZm9yKGc9Zy5laztnLm5leHQoKTspZy52YWx1ZS53ZihiKX1hLllkPSEwfXQuZyhULCJpc1N1YkdyYXBoRXhwYW5kZWQiLFQucHJvdG90eXBlLllkKTsNCnQuZGVmaW5lUHJvcGVydHkoVCx7WWQ6ImlzU3ViR3JhcGhFeHBhbmRlZCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnJ9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYnI7aWYoYiE9PWEpe3QuaShhLCJib29sZWFuIixULCJpc1N1YkdyYXBoRXhwYW5kZWQiKTt0aGlzLmJyPWE7dmFyIGM9dGhpcy5oO3RoaXMuaigiaXNTdWJHcmFwaEV4cGFuZGVkIixiLGEpO2I9dGhpcy56RztpZihudWxsIT09Yil7dmFyIGQ9ITA7bnVsbCE9PWMmJihkPWMuTmEsYy5OYT0hMCk7Yih0aGlzKTtudWxsIT09YyYmKGMuTmE9ZCl9bnVsbCE9PWMmJmMuamEuc2J8fChhP3RoaXMuZXhwYW5kU3ViR3JhcGgoKTp0aGlzLmNvbGxhcHNlU3ViR3JhcGgoKSl9fSk7dC5nKFQsIndhc1N1YkdyYXBoRXhwYW5kZWQiLFQucHJvdG90eXBlLll0KTsNCnQuZGVmaW5lUHJvcGVydHkoVCx7WXQ6Indhc1N1YkdyYXBoRXhwYW5kZWQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkZzfSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLkZzO2IhPT1hJiYodC5pKGEsImJvb2xlYW4iLFQsIndhc1N1YkdyYXBoRXhwYW5kZWQiKSx0aGlzLkZzPWEsdGhpcy5qKCJ3YXNTdWJHcmFwaEV4cGFuZGVkIixiLGEpKX0pO3QuZyhULCJzdWJHcmFwaEV4cGFuZGVkQ2hhbmdlZCIsVC5wcm90b3R5cGUuekcpO3QuZGVmaW5lUHJvcGVydHkoVCx7ekc6InN1YkdyYXBoRXhwYW5kZWRDaGFuZ2VkIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50c30sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy50cztiIT09YSYmKG51bGwhPT1hJiZ0LmkoYSwiZnVuY3Rpb24iLFQsInN1YkdyYXBoRXhwYW5kZWRDaGFuZ2VkIiksdGhpcy50cz1hLHRoaXMuaigic3ViR3JhcGhFeHBhbmRlZENoYW5nZWQiLGIsYSkpfSk7DQpULnByb3RvdHlwZS5tb3ZlPVQucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wb3NpdGlvbixjPWIueDtpc05hTihjKSYmKGM9MCk7Yj1iLnk7aXNOYU4oYikmJihiPTApO3ZhciBjPWEueC1jLGI9YS55LWIsZD10LmxjKGMsYik7Uy5wcm90b3R5cGUubW92ZS5jYWxsKHRoaXMsYSk7Zm9yKGE9dGhpcy5kcCgpLms7YS5uZXh0KCk7KXt2YXIgZj1hLnZhbHVlO2lmKCEoZiBpbnN0YW5jZW9mIFZ8fGYuY2kpKXt2YXIgZz1mLnBvc2l0aW9uO2QueD1nLngrYztkLnk9Zy55K2I7Uy5wcm90b3R5cGUubW92ZS5jYWxsKGYsZCl9fWZvcihhLnJlc2V0KCk7YS5uZXh0KCk7KWY9YS52YWx1ZSxmIGluc3RhbmNlb2YgViYmKGc9Zi5wb3NpdGlvbixkLng9Zy54K2MsZC55PWcueStiLGYubW92ZShkKSk7dC5CKGQpfTtmdW5jdGlvbiBUZygpe1EuY2FsbCh0aGlzKTt0aGlzLk5lPUguZnE7dGhpcy5jcz1uZXcgeChOYU4sTmFOLE5hTixOYU4pfQ0KdC5nYSgiUGxhY2Vob2xkZXIiLFRnKTt0LkthKFRnLFEpO1RnLnByb3RvdHlwZS5jbG9uZVByb3RlY3RlZD1mdW5jdGlvbihhKXtRLnByb3RvdHlwZS5jbG9uZVByb3RlY3RlZC5jYWxsKHRoaXMsYSk7YS5OZT10aGlzLk5lLlooKTthLmNzPXRoaXMuY3MuY29weSgpfTtUZy5wcm90b3R5cGUuVmo9ZnVuY3Rpb24oYSl7aWYobnVsbD09PXRoaXMuYmFja2dyb3VuZCYmbnVsbD09PXRoaXMuWmspcmV0dXJuITE7dmFyIGI9dGhpcy5SYTtyZXR1cm4gbWIoMCwwLGIud2lkdGgsYi5oZWlnaHQsYS54LGEueSl9Ow0KVGcucHJvdG90eXBlLnR0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5TO251bGwhPT1hJiYoYSBpbnN0YW5jZW9mIFR8fGEgaW5zdGFuY2VvZiBKZSl8fHQubSgiUGxhY2Vob2xkZXIgaXMgbm90IGluc2lkZSBhIEdyb3VwIG9yIEFkb3JubWVudC4iKTtpZihhIGluc3RhbmNlb2YgVCl7dmFyIGI9dGhpcy5jb21wdXRlQm9yZGVyKHRoaXMuY3MpLGM9dGhpcy5oZDtWYShjLGIud2lkdGh8fDAsYi5oZWlnaHR8fDApO2hrKHRoaXMsMCwwLGMud2lkdGgsYy5oZWlnaHQpO2Zvcih2YXIgYz1hLlJjLGQ9ITE7Yy5uZXh0KCk7KWlmKGMudmFsdWUuUWEoKSl7ZD0hMDticmVha30hZHx8aXNOYU4oYi54KXx8aXNOYU4oYi55KXx8KGM9bmV3IHcsYy5PdChiLGEuYmYpLGEubG9jYXRpb249bmV3IHcoYy54LGMueSkpfWVsc2V7dmFyIGI9dGhpcy5DYSxjPXRoaXMuaGQsYT10aGlzLnBhZGRpbmcsZD1hLmxlZnQrYS5yaWdodCxmPWEudG9wK2EuYm90dG9tO2lmKGIuTigpKVZhKGMsYi53aWR0aCtkfHwwLA0KYi5oZWlnaHQrZnx8MCksaGsodGhpcywtYS5sZWZ0LC1hLnRvcCxjLndpZHRoLGMuaGVpZ2h0KTtlbHNle3ZhciBnPXRoaXMuUyxoPWcub2Msaz1oLnFiKEViLHQuSygpKSxiPXQuaGsoay54LGsueSwwLDApO2Iua2ooaC5xYihQYixrKSk7Yi5raihoLnFiKEdiLGspKTtiLmtqKGgucWIoTGIsaykpO2cuWWcucChiLngsYi55KTtWYShjLGIud2lkdGgrZHx8MCxiLmhlaWdodCtmfHwwKTtoayh0aGlzLC1hLmxlZnQsLWEudG9wLGMud2lkdGgsYy5oZWlnaHQpO3QuQihrKTt0LmhjKGIpfX19O1RnLnByb3RvdHlwZS5Vaj1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZj10aGlzLnBhO2YueD1hO2YueT1iO2Yud2lkdGg9YztmLmhlaWdodD1kfTsNClRnLnByb3RvdHlwZS5jb21wdXRlQm9yZGVyPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuUztpZihiIGluc3RhbmNlb2YgVCYmYi5XeiYmdGhpcy5jcy5OKCkpe3ZhciBjPWIuaDtpZihudWxsIT09YyYmKGM9Yy5VYSxjIGluc3RhbmNlb2YgY2YmJiFjLklxJiZudWxsIT09Yy5FYyYmIWMuRWMuY29udGFpbnMoYikpKXJldHVybiBhLmFzc2lnbih0aGlzLmNzKSxhfXZhciBjPXQuR2YoKSxkPXRoaXMuY29tcHV0ZU1lbWJlckJvdW5kcyhjKSxmPXRoaXMucGFkZGluZzthLnAoZC54LWYubGVmdCxkLnktZi50b3AsZC53aWR0aCtmLmxlZnQrZi5yaWdodCxkLmhlaWdodCtmLnRvcCtmLmJvdHRvbSk7dC5oYyhjKTtiIGluc3RhbmNlb2YgVCYmYi5jRSYmYi5sb2NhdGlvbi5OKCkmJmEua2ooYi5sb2NhdGlvbik7cmV0dXJuIGF9Ow0KVGcucHJvdG90eXBlLmNvbXB1dGVNZW1iZXJCb3VuZHM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5TO2lmKCEoYiBpbnN0YW5jZW9mIFQpKXJldHVybiBhLnAoMCwwLDAsMCksYTtmb3IodmFyIGM9SW5maW5pdHksZD1JbmZpbml0eSxmPS1JbmZpbml0eSxnPS1JbmZpbml0eSxoPWIuUmM7aC5uZXh0KCk7KXt2YXIgaz1oLnZhbHVlO2lmKGsuUWEoKSl7aWYoayBpbnN0YW5jZW9mIFYpe2lmKCFiLmJFKWNvbnRpbnVlO2lmKE9pKGspKWNvbnRpbnVlO2lmKGsuYWE9PT1ifHxrLmNhPT09Yiljb250aW51ZX1rPWsucGE7ay5sZWZ0PGMmJihjPWsubGVmdCk7ay50b3A8ZCYmKGQ9ay50b3ApO2sucmlnaHQ+ZiYmKGY9ay5yaWdodCk7ay5ib3R0b20+ZyYmKGc9ay5ib3R0b20pfX1pc0Zpbml0ZShjKSYmaXNGaW5pdGUoZCk/YS5wKGMsZCxmLWMsZy1kKTooYj1iLmxvY2F0aW9uLGM9dGhpcy5wYWRkaW5nLGEucChiLngrYy5sZWZ0LGIueStjLnRvcCwwLDApKTtyZXR1cm4gYX07DQp0LmcoVGcsInBhZGRpbmciLFRnLnByb3RvdHlwZS5wYWRkaW5nKTt0LmRlZmluZVByb3BlcnR5KFRnLHtwYWRkaW5nOiJwYWRkaW5nIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5OZX0sZnVuY3Rpb24oYSl7Im51bWJlciI9PT10eXBlb2YgYT8oMD5hJiZ0LmxhKGEsIj49IDAiLFRnLCJwYWRkaW5nIiksYT1uZXcgYWIoYSkpOih0LmwoYSxhYixUZywicGFkZGluZyIpLDA+YS5sZWZ0JiZ0LmxhKGEubGVmdCwiPj0gMCIsVGcsInBhZGRpbmc6dmFsLmxlZnQiKSwwPmEucmlnaHQmJnQubGEoYS5yaWdodCwiPj0gMCIsVGcsInBhZGRpbmc6dmFsLnJpZ2h0IiksMD5hLnRvcCYmdC5sYShhLnRvcCwiPj0gMCIsVGcsInBhZGRpbmc6dmFsLnRvcCIpLDA+YS5ib3R0b20mJnQubGEoYS5ib3R0b20sIj49IDAiLFRnLCJwYWRkaW5nOnZhbC5ib3R0b20iKSk7dmFyIGI9dGhpcy5OZTtiLk0oYSl8fCh0aGlzLk5lPWE9YS5aKCksdGhpcy5qKCJwYWRkaW5nIixiLGEpKX0pOw0KZnVuY3Rpb24gYmUoKXswPGFyZ3VtZW50cy5sZW5ndGgmJnQuYWQoYmUpO3QuQWModGhpcyk7dGhpcy5XeT10aGlzLlU9bnVsbDt0aGlzLlhxPXRoaXMuWnE9ITA7dGhpcy5ncj10aGlzLmNvPSExO3RoaXMubnE9KG5ldyB3KDAsMCkpLmZyZWV6ZSgpO3RoaXMuYno9ITA7dGhpcy5sej1udWxsO3RoaXMuJHE9ITB9dC5nYSgiTGF5b3V0IixiZSk7YmUucHJvdG90eXBlLmNsb25lUHJvdGVjdGVkPWZ1bmN0aW9uKGEpe2EuWnE9dGhpcy5acTthLlhxPXRoaXMuWHE7dGhpcy5YcXx8KGEuY289ITApO2EuZ3I9dGhpcy5ncjthLm5xLmFzc2lnbih0aGlzLm5xKTthLiRxPXRoaXMuJHF9O2JlLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHRoaXMuY29uc3RydWN0b3I7dGhpcy5jbG9uZVByb3RlY3RlZChhKTtyZXR1cm4gYX07DQpiZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT10LnhnKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSksYT1hKyIoIjtudWxsIT09dGhpcy5ncm91cCYmKGErPSIgaW4gIit0aGlzLmdyb3VwKTtudWxsIT09dGhpcy5oJiYoYSs9IiBmb3IgIit0aGlzLmgpO3JldHVybiBhKyIpIn07dC5nKGJlLCJkaWFncmFtIixiZS5wcm90b3R5cGUuaCk7dC5kZWZpbmVQcm9wZXJ0eShiZSx7aDoiZGlhZ3JhbSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVX0sZnVuY3Rpb24oYSl7dGhpcy5VIT09YSYmKG51bGwhPT1hJiZ0LmwoYSx6LGJlLCJkaWFncmFtIiksdGhpcy5VPWEpfSk7dC5nKGJlLCJncm91cCIsYmUucHJvdG90eXBlLmdyb3VwKTsNCnQuZGVmaW5lUHJvcGVydHkoYmUse2dyb3VwOiJncm91cCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuV3l9LGZ1bmN0aW9uKGEpe3RoaXMuV3khPT1hJiYobnVsbCE9PWEmJnQubChhLFQsYmUsImdyb3VwIiksdGhpcy5XeT1hLG51bGwhPT1hJiYodGhpcy5VPWEuaCkpfSk7dC5nKGJlLCJpc09uZ29pbmciLGJlLnByb3RvdHlwZS5nRik7dC5kZWZpbmVQcm9wZXJ0eShiZSx7Z0Y6ImlzT25nb2luZyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWnF9LGZ1bmN0aW9uKGEpe3RoaXMuWnEhPT1hJiYodC5pKGEsImJvb2xlYW4iLGJlLCJpc09uZ29pbmciKSx0aGlzLlpxPWEpfSk7dC5nKGJlLCJpc0luaXRpYWwiLGJlLnByb3RvdHlwZS5mRik7dC5kZWZpbmVQcm9wZXJ0eShiZSx7ZkY6ImlzSW5pdGlhbCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWHF9LGZ1bmN0aW9uKGEpe3QuaShhLCJib29sZWFuIixiZSwiaXNJbml0aWFsIik7dGhpcy5YcT1hO2F8fCh0aGlzLmNvPSEwKX0pOw0KdC5nKGJlLCJpc1ZhbGlkTGF5b3V0IixiZS5wcm90b3R5cGUuJGUpO3QuZGVmaW5lUHJvcGVydHkoYmUseyRlOiJpc1ZhbGlkTGF5b3V0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb30sZnVuY3Rpb24oYSl7dGhpcy5jbyE9PWEmJih0LmkoYSwiYm9vbGVhbiIsYmUsImlzVmFsaWRMYXlvdXQiKSx0aGlzLmNvPWEsYXx8KGE9dGhpcy5oLG51bGwhPT1hJiYoYS5sdT0hMCkpKX0pO2JlLnByb3RvdHlwZS5pbnZhbGlkYXRlTGF5b3V0PWJlLnByb3RvdHlwZS5KPWZ1bmN0aW9uKCl7aWYodGhpcy5jbyl7dmFyIGE9dGhpcy5oO2lmKG51bGwhPT1hJiYhYS5qYS5zYil7dmFyIGI9YS5aYjshYi5jciYmKGIueWcmJmIubW4oKSx0aGlzLmdGJiZhLmxmfHx0aGlzLmZGJiYhYS5sZikmJih0aGlzLiRlPSExLGEudGUoKSl9fX07dC5nKGJlLCJpc1JlYWx0aW1lIixiZS5wcm90b3R5cGUueUEpOw0KdC5kZWZpbmVQcm9wZXJ0eShiZSx7eUE6ImlzUmVhbHRpbWUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLiRxfSxmdW5jdGlvbihhKXt0aGlzLiRxIT09YSYmKHQuaShhLCJib29sZWFuIixiZSwiaXNSZWFsdGltZSIpLHRoaXMuJHE9YSl9KTt0LmcoYmUsImlzVmlld3BvcnRTaXplZCIsYmUucHJvdG90eXBlLnJ0KTt0LmRlZmluZVByb3BlcnR5KGJlLHtydDoiaXNWaWV3cG9ydFNpemVkIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncn0sZnVuY3Rpb24oYSl7dGhpcy5nciE9PWEmJih0LmkoYSwiYm9vbGVhbiIsYmUsImlzVmlld3BvcnRTaXplZCIpLCh0aGlzLmdyPWEpJiZ0aGlzLkooKSl9KTt0LmcoYmUsImlzUm91dGluZyIsYmUucHJvdG90eXBlLnF0KTsNCnQuZGVmaW5lUHJvcGVydHkoYmUse3F0OiJpc1JvdXRpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ6fSxmdW5jdGlvbihhKXt0aGlzLmJ6IT09YSYmKHQuaShhLCJib29sZWFuIixiZSwiaXNSb3V0aW5nIiksdGhpcy5iej1hKX0pO3QuZyhiZSwibmV0d29yayIsYmUucHJvdG90eXBlLm5ldHdvcmspO3QuZGVmaW5lUHJvcGVydHkoYmUse25ldHdvcms6Im5ldHdvcmsifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmx6fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLmx6O2IhPT1hJiYobnVsbCE9PWEmJnQubChhLHJhLGJlLCJuZXR3b3JrIiksbnVsbCE9PWImJkxuKGIsbnVsbCksdGhpcy5sej1hLG51bGwhPT1hJiZMbihhLHRoaXMpKX0pO2JlLnByb3RvdHlwZS5jcmVhdGVOZXR3b3JrPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHJhO0xuKGEsdGhpcyk7cmV0dXJuIGF9Ow0KYmUucHJvdG90eXBlLm1ha2VOZXR3b3JrPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY3JlYXRlTmV0d29yaygpO2EgaW5zdGFuY2VvZiB6PyhiLktzKGEua2gsITApLGIuS3MoYS5saW5rcywhMCkpOmEgaW5zdGFuY2VvZiBUP2IuS3MoYS5SYyk6Yi5LcyhhLmspO3JldHVybiBifTtiZS5wcm90b3R5cGUudXBkYXRlUGFydHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmg7aWYobnVsbD09PWEmJm51bGwhPT10aGlzLm5ldHdvcmspZm9yKHZhciBiPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rO2IubmV4dCgpOyl7dmFyIGM9Yi52YWx1ZS5HYztpZihudWxsIT09YyYmKGE9Yy5oLG51bGwhPT1hKSlicmVha310aGlzLiRlPSEwO251bGwhPT1hJiZhLnNjKCJMYXlvdXQiKTt0aGlzLmNvbW1pdExheW91dCgpO251bGwhPT1hJiZhLkNlKCJMYXlvdXQiKX07YmUucHJvdG90eXBlLmNvbW1pdExheW91dD1mdW5jdGlvbigpe307DQpiZS5wcm90b3R5cGUuZG9MYXlvdXQ9ZnVuY3Rpb24oYSl7YXx8dC5tKCJMYXlvdXQuZG9MYXlvdXQoY29sbGVjdGlvbikgYXJndW1lbnQgbXVzdCBub3QgYmUgbnVsbCBidXQgYSBEaWFncmFtLCBhIEdyb3VwLCBvciBhbiBJdGVyYWJsZSBvZiBQYXJ0cyIpO3ZhciBiPW5ldyBDKEUpO2E9PT10aGlzLmg/KE1uKHRoaXMsYixhLmtoLCEwLHRoaXMuSEEsITAsITEsITApLE1uKHRoaXMsYixhLnJsLCEwLHRoaXMuSEEsITAsITEsITApKTphPT09dGhpcy5ncm91cD9Nbih0aGlzLGIsYS5SYywhMSx0aGlzLkhBLCEwLCExLCEwKTpiLk9lKGEuayk7dmFyIGM9Yi5jb3VudDtpZigwPGMpe2E9dGhpcy5oO251bGwhPT1hJiZhLnNjKCJMYXlvdXQiKTtmb3IodmFyIGM9TWF0aC5jZWlsKE1hdGguc3FydChjKSksZD10aGlzLkRkLngsZj1kLGc9dGhpcy5EZC55LGg9MCxrPTAsYj1iLms7Yi5uZXh0KCk7KXt2YXIgbD1iLnZhbHVlO2wuc2YoKTt2YXIgbT1sLkVhLG49bS53aWR0aCxtPW0uaGVpZ2h0Ow0KbC5tb3ZlVG8oZixnKTtkZWxldGUgbC5OQztmKz1NYXRoLm1heChuLDUwKSsyMDtrPU1hdGgubWF4KGssTWF0aC5tYXgobSw1MCkpO2g+PWMtMT8oaD0wLGY9ZCxnKz1rKzIwLGs9MCk6aCsrfW51bGwhPT1hJiZhLkNlKCJMYXlvdXQiKX10aGlzLiRlPSEwfTtiZS5wcm90b3R5cGUuSEE9ZnVuY3Rpb24oYSl7cmV0dXJuIWEubG9jYXRpb24uTigpfHxhIGluc3RhbmNlb2YgVCYmYS5OQz8hMDohMX07ZnVuY3Rpb24gTW4oYSxiLGMsZCxmLGcsaCxrKXtmb3IoYz1jLms7Yy5uZXh0KCk7KXt2YXIgbD1jLnZhbHVlO2QmJiFsLnNwfHxmJiYhZihsKXx8bC5jYW5MYXlvdXQoKSYmKGcmJmwgaW5zdGFuY2VvZiBTP2wuY2l8fChsIGluc3RhbmNlb2YgVCYmbnVsbD09PWwuamM/TW4oYSxiLGwuUmMsITEsZixnLGgsayk6Yi5hZGQobCkpOmgmJmwgaW5zdGFuY2VvZiBWP2IuYWRkKGwpOiFrfHwhbC5MZCgpfHxsIGluc3RhbmNlb2YgU3x8Yi5hZGQobCkpfX0NCnQuZyhiZSwiYXJyYW5nZW1lbnRPcmlnaW4iLGJlLnByb3RvdHlwZS5EZCk7dC5kZWZpbmVQcm9wZXJ0eShiZSx7RGQ6ImFycmFuZ2VtZW50T3JpZ2luIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ucX0sZnVuY3Rpb24oYSl7dC5sKGEsdyxiZSwiYXJyYW5nZW1lbnRPcmlnaW4iKTt0aGlzLm5xLk0oYSl8fCh0aGlzLm5xLmFzc2lnbihhKSx0aGlzLkooKSl9KTtiZS5wcm90b3R5cGUuaW5pdGlhbE9yaWdpbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdyb3VwO2lmKG51bGwhPT1iKXt2YXIgYz1iLmxvY2F0aW9uO2lmKGlzTmFOKGMueCl8fGlzTmFOKGMueSkpcmV0dXJuIGE7YT1iLnBsYWNlaG9sZGVyO251bGwhPT1hPyhjPWEucWIoRWIpLGMueCs9YS5wYWRkaW5nLmxlZnQsYy55Kz1hLnBhZGRpbmcudG9wKTpjPWIucG9zaXRpb24uY29weSgpO3JldHVybiBjfXJldHVybiBhfTtmdW5jdGlvbiByYSgpe3QuQWModGhpcyk7dGhpcy5QZD1udWxsO3RoaXMuY2xlYXIoKX0NCnQuZ2EoIkxheW91dE5ldHdvcmsiLHJhKTtyYS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZih0aGlzLnZlcnRleGVzKWZvcih2YXIgYT10aGlzLnZlcnRleGVzLms7YS5uZXh0KCk7KXt2YXIgYj1hLnZhbHVlO2IuY2xlYXIoKTtiLm5ldHdvcms9bnVsbH1pZih0aGlzLmVkZ2VzKWZvcihhPXRoaXMuZWRnZXMuazthLm5leHQoKTspYj1hLnZhbHVlLGIuY2xlYXIoKSxiLm5ldHdvcms9bnVsbDt0aGlzLnZlcnRleGVzPW5ldyBDKHNhKTt0aGlzLmVkZ2VzPW5ldyBDKHVhKTt0aGlzLktBPW5ldyBqYShTLHNhKTt0aGlzLkFBPW5ldyBqYShWLHVhKX07cmEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkxheW91dE5ldHdvcmsiKyhudWxsIT09dGhpcy5qYz8iKCIrdGhpcy5qYy50b1N0cmluZygpKyIpIjoiIil9O3QuQShyYSx7amM6ImxheW91dCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUGR9KTsNCmZ1bmN0aW9uIExuKGEsYil7ZSYmbnVsbCE9PWImJnQubChiLGJlLHJhLCJzZXRMYXlvdXQiKTthLlBkPWJ9cmEucHJvdG90eXBlLmNyZWF0ZVZlcnRleD1mdW5jdGlvbigpe3JldHVybiBuZXcgc2F9O3JhLnByb3RvdHlwZS5jcmVhdGVFZGdlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1YX07DQpyYS5wcm90b3R5cGUuYWRkUGFydHM9cmEucHJvdG90eXBlLktzPWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9PWEpe3ZvaWQgMD09PWImJihiPSExKTt0LmkoYiwiYm9vbGVhbiIscmEsImFkZFBhcnRzOnRvcGxldmVsb25seSIpO2Zvcih2YXIgYz1hLms7Yy5uZXh0KCk7KXt2YXIgZD1jLnZhbHVlO2lmKGQgaW5zdGFuY2VvZiBTJiYoIWJ8fGQuc3ApJiZkLmNhbkxheW91dCgpJiYhZC5jaSlpZihkIGluc3RhbmNlb2YgVCYmbnVsbD09PWQuamMpdGhpcy5LcyhkLlJjLCExKTtlbHNlIGlmKG51bGw9PT10aGlzLlFtKGQpKXt2YXIgZj10aGlzLmNyZWF0ZVZlcnRleCgpO2YuR2M9ZDt0aGlzLlhrKGYpfX1mb3IoYy5yZXNldCgpO2MubmV4dCgpOylpZihkPWMudmFsdWUsZCBpbnN0YW5jZW9mIFYmJighYnx8ZC5zcCkmJmQuY2FuTGF5b3V0KCkmJm51bGw9PT10aGlzLkJ3KGQpKXt2YXIgZz1kLmFhLGY9ZC5jYTtnIT09ZiYmKGc9dGhpcy5maW5kR3JvdXBWZXJ0ZXgoZyksZj10aGlzLmZpbmRHcm91cFZlcnRleChmKSwNCm51bGwhPT1nJiZudWxsIT09ZiYmdGhpcy4kbShnLGYsZCkpfX19O3JhLnByb3RvdHlwZS5maW5kR3JvdXBWZXJ0ZXg9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7dmFyIGI9YS5maW5kVmlzaWJsZU5vZGUoKTtpZihudWxsPT09YilyZXR1cm4gbnVsbDthPXRoaXMuUW0oYik7aWYobnVsbCE9PWEpcmV0dXJuIGE7Zm9yKGI9Yi5nYjtudWxsIT09Yjspe2E9dGhpcy5RbShiKTtpZihudWxsIT09YSlyZXR1cm4gYTtiPWIuZ2J9cmV0dXJuIG51bGx9O3JhLnByb3RvdHlwZS5hZGRWZXJ0ZXg9cmEucHJvdG90eXBlLlhrPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT1hKXtlJiZ0LmwoYSxzYSxyYSwiYWRkVmVydGV4OnZlcnRleCIpO3RoaXMudmVydGV4ZXMuYWRkKGEpO3ZhciBiPWEuR2M7bnVsbCE9PWImJnRoaXMuS0EuYWRkKGIsYSk7YS5uZXR3b3JrPXRoaXN9fTsNCnJhLnByb3RvdHlwZS5hZGROb2RlPXJhLnByb3RvdHlwZS5Lbz1mdW5jdGlvbihhKXtpZihudWxsPT09YSlyZXR1cm4gbnVsbDtlJiZ0LmwoYSxTLHJhLCJhZGROb2RlOm5vZGUiKTt2YXIgYj10aGlzLlFtKGEpO251bGw9PT1iJiYoYj10aGlzLmNyZWF0ZVZlcnRleCgpLGIuR2M9YSx0aGlzLlhrKGIpKTtyZXR1cm4gYn07cmEucHJvdG90eXBlLmRlbGV0ZVZlcnRleD1yYS5wcm90b3R5cGUudEU9ZnVuY3Rpb24oYSl7aWYobnVsbCE9PWEmJihlJiZ0LmwoYSxzYSxyYSwiZGVsZXRlVmVydGV4OnZlcnRleCIpLE5uKHRoaXMsYSkpKXtmb3IodmFyIGI9YS5mZixjPWIuY291bnQtMTswPD1jO2MtLSl7dmFyIGQ9Yi53YShjKTt0aGlzLlpvKGQpfWI9YS5UZTtmb3IoYz1iLmNvdW50LTE7MDw9YztjLS0pZD1iLndhKGMpLHRoaXMuWm8oZCl9fTsNCmZ1bmN0aW9uIE5uKGEsYil7aWYobnVsbD09PWIpcmV0dXJuITE7dmFyIGM9YS52ZXJ0ZXhlcy5yZW1vdmUoYik7YyYmKGEuS0EucmVtb3ZlKGIuR2MpLGIubmV0d29yaz1udWxsKTtyZXR1cm4gY31yYS5wcm90b3R5cGUuZGVsZXRlTm9kZT1mdW5jdGlvbihhKXtudWxsIT09YSYmKGUmJnQubChhLFMscmEsImRlbGV0ZU5vZGU6bm9kZSIpLGE9dGhpcy5RbShhKSxudWxsIT09YSYmdGhpcy50RShhKSl9O3JhLnByb3RvdHlwZS5maW5kVmVydGV4PXJhLnByb3RvdHlwZS5RbT1mdW5jdGlvbihhKXtpZihudWxsPT09YSlyZXR1cm4gbnVsbDtlJiZ0LmwoYSxTLHJhLCJmaW5kVmVydGV4Om5vZGUiKTtyZXR1cm4gdGhpcy5LQS56YShhKX07DQpyYS5wcm90b3R5cGUuYWRkRWRnZT1yYS5wcm90b3R5cGUuSm89ZnVuY3Rpb24oYSl7aWYobnVsbCE9PWEpe2UmJnQubChhLHVhLHJhLCJhZGRFZGdlOmVkZ2UiKTt0aGlzLmVkZ2VzLmFkZChhKTt2YXIgYj1hLmxpbms7bnVsbCE9PWImJm51bGw9PT10aGlzLkJ3KGIpJiZ0aGlzLkFBLmFkZChiLGEpO2I9YS50b1ZlcnRleDtudWxsIT09YiYmYi5LRChhKTtiPWEuZnJvbVZlcnRleDtudWxsIT09YiYmYi5IRChhKTthLm5ldHdvcms9dGhpc319Ow0KcmEucHJvdG90eXBlLmFkZExpbms9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7ZSYmdC5sKGEsVixyYSwiYWRkTGluazpsaW5rIik7dmFyIGI9YS5hYSxjPWEuY2EsZD10aGlzLkJ3KGEpO251bGw9PT1kPyhkPXRoaXMuY3JlYXRlRWRnZSgpLGQubGluaz1hLG51bGwhPT1iJiYoZC5mcm9tVmVydGV4PXRoaXMuS28oYikpLG51bGwhPT1jJiYoZC50b1ZlcnRleD10aGlzLktvKGMpKSx0aGlzLkpvKGQpKTooZC5mcm9tVmVydGV4PW51bGwhPT1iP3RoaXMuS28oYik6bnVsbCxkLnRvVmVydGV4PW51bGwhPT1jP3RoaXMuS28oYyk6bnVsbCk7cmV0dXJuIGR9O3JhLnByb3RvdHlwZS5kZWxldGVFZGdlPXJhLnByb3RvdHlwZS5abz1mdW5jdGlvbihhKXtpZihudWxsIT09YSl7ZSYmdC5sKGEsdWEscmEsImRlbGV0ZUVkZ2U6ZWRnZSIpO3ZhciBiPWEudG9WZXJ0ZXg7bnVsbCE9PWImJmIuc0UoYSk7Yj1hLmZyb21WZXJ0ZXg7bnVsbCE9PWImJmIuckUoYSk7T24odGhpcyxhKX19Ow0KZnVuY3Rpb24gT24oYSxiKXtudWxsIT09YiYmYS5lZGdlcy5yZW1vdmUoYikmJihhLkFBLnJlbW92ZShiLmxpbmspLGIubmV0d29yaz1udWxsKX1yYS5wcm90b3R5cGUuZGVsZXRlTGluaz1mdW5jdGlvbihhKXtudWxsIT09YSYmKGUmJnQubChhLFYscmEsImRlbGV0ZUxpbms6bGluayIpLGE9dGhpcy5CdyhhKSxudWxsIT09YSYmdGhpcy5abyhhKSl9O3JhLnByb3RvdHlwZS5maW5kRWRnZT1yYS5wcm90b3R5cGUuQnc9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7ZSYmdC5sKGEsVixyYSwiZmluZEVkZ2U6bGluayIpO3JldHVybiB0aGlzLkFBLnphKGEpfTsNCnJhLnByb3RvdHlwZS5saW5rVmVydGV4ZXM9cmEucHJvdG90eXBlLiRtPWZ1bmN0aW9uKGEsYixjKXtpZihudWxsPT09YXx8bnVsbD09PWIpcmV0dXJuIG51bGw7ZSYmKHQubChhLHNhLHJhLCJsaW5rVmVydGV4ZXM6ZnJvbVZlcnRleCIpLHQubChiLHNhLHJhLCJsaW5rVmVydGV4ZXM6dG9WZXJ0ZXgiKSxudWxsIT09YyYmdC5sKGMsVixyYSwibGlua1ZlcnRleGVzOmxpbmsiKSk7aWYoYS5uZXR3b3JrPT09dGhpcyYmYi5uZXR3b3JrPT09dGhpcyl7dmFyIGQ9dGhpcy5jcmVhdGVFZGdlKCk7ZC5saW5rPWM7ZC5mcm9tVmVydGV4PWE7ZC50b1ZlcnRleD1iO3RoaXMuSm8oZCk7cmV0dXJuIGR9cmV0dXJuIG51bGx9Ow0KcmEucHJvdG90eXBlLnJldmVyc2VFZGdlPXJhLnByb3RvdHlwZS5veD1mdW5jdGlvbihhKXtpZihudWxsIT09YSl7ZSYmdC5sKGEsdWEscmEsInJldmVyc2VFZGdlOmVkZ2UiKTt2YXIgYj1hLmZyb21WZXJ0ZXgsYz1hLnRvVmVydGV4O251bGwhPT1iJiZudWxsIT09YyYmKGIuckUoYSksYy5zRShhKSxhLm94KCksYi5LRChhKSxjLkhEKGEpKX19O3JhLnByb3RvdHlwZS5kZWxldGVTZWxmRWRnZXM9cmEucHJvdG90eXBlLnh3PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXQuQ2IoKSxiPXRoaXMuZWRnZXMuaztiLm5leHQoKTspe3ZhciBjPWIudmFsdWU7Yy5mcm9tVmVydGV4PT09Yy50b1ZlcnRleCYmYS5wdXNoKGMpfWI9YS5sZW5ndGg7Zm9yKGM9MDtjPGI7YysrKXRoaXMuWm8oYVtjXSk7dC55YShhKX07DQpyYS5wcm90b3R5cGUuZGVsZXRlQXJ0aWZpY2lhbFZlcnRleGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXQuQ2IoKSxiPXRoaXMudmVydGV4ZXMuaztiLm5leHQoKTspe3ZhciBjPWIudmFsdWU7bnVsbD09PWMuR2MmJmEucHVzaChjKX1jPWEubGVuZ3RoO2ZvcihiPTA7YjxjO2IrKyl0aGlzLnRFKGFbYl0pO2M9dC5DYigpO2ZvcihiPXRoaXMuZWRnZXMuaztiLm5leHQoKTspe3ZhciBkPWIudmFsdWU7bnVsbD09PWQubGluayYmYy5wdXNoKGQpfWQ9Yy5sZW5ndGg7Zm9yKGI9MDtiPGQ7YisrKXRoaXMuWm8oY1tiXSk7dC55YShhKTt0LnlhKGMpfTtmdW5jdGlvbiBQbihhKXtmb3IodmFyIGI9dC5DYigpLGM9YS5lZGdlcy5rO2MubmV4dCgpOyl7dmFyIGQ9Yy52YWx1ZTtudWxsIT09ZC5mcm9tVmVydGV4JiZudWxsIT09ZC50b1ZlcnRleHx8Yi5wdXNoKGQpfWM9Yi5sZW5ndGg7Zm9yKGQ9MDtkPGM7ZCsrKWEuWm8oYltkXSk7dC55YShiKX0NCnJhLnByb3RvdHlwZS5zcGxpdEludG9TdWJOZXR3b3Jrcz1yYS5wcm90b3R5cGUuV0o9ZnVuY3Rpb24oKXt0aGlzLmRlbGV0ZUFydGlmaWNpYWxWZXJ0ZXhlcygpO1BuKHRoaXMpO3RoaXMueHcoKTtmb3IodmFyIGE9bmV3IEIocmEpLGI9ITA7YjspZm9yKHZhciBiPSExLGM9dGhpcy52ZXJ0ZXhlcy5rO2MubmV4dCgpOyl7dmFyIGQ9Yy52YWx1ZTtpZigwPGQuZmYuY291bnR8fDA8ZC5UZS5jb3VudCl7Yj10aGlzLmpjLmNyZWF0ZU5ldHdvcmsoKTthLmFkZChiKTtRbih0aGlzLGIsZCk7Yj0hMDticmVha319YS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PT1hfHxudWxsPT09Ynx8YT09PWI/MDpiLnZlcnRleGVzLmNvdW50LWEudmVydGV4ZXMuY291bnR9KTtyZXR1cm4gYX07DQpmdW5jdGlvbiBRbihhLGIsYyl7aWYobnVsbCE9PWMmJmMubmV0d29yayE9PWIpe05uKGEsYyk7Yi5YayhjKTtmb3IodmFyIGQ9Yy5yYztkLm5leHQoKTspe3ZhciBmPWQudmFsdWU7Zi5uZXR3b3JrIT09YiYmKE9uKGEsZiksYi5KbyhmKSxRbihhLGIsZi5mcm9tVmVydGV4KSl9Zm9yKGQ9Yy5nYztkLm5leHQoKTspZj1kLnZhbHVlLGYubmV0d29yayE9PWImJihPbihhLGYpLGIuSm8oZiksUW4oYSxiLGYudG9WZXJ0ZXgpKX19cmEucHJvdG90eXBlLmZpbmRBbGxQYXJ0cz1mdW5jdGlvbigpe2Zvcih2YXIgYT1uZXcgQyhFKSxiPXRoaXMudmVydGV4ZXMuaztiLm5leHQoKTspYS5hZGQoYi52YWx1ZS5HYyk7Zm9yKGI9dGhpcy5lZGdlcy5rO2IubmV4dCgpOylhLmFkZChiLnZhbHVlLmxpbmspO3JldHVybiBhfTsNCmZ1bmN0aW9uIHNhKCl7dC5BYyh0aGlzKTt0aGlzLm5ldHdvcms9bnVsbDt0aGlzLlQ9KG5ldyB4KDAsMCwxMCwxMCkpLmZyZWV6ZSgpO3RoaXMuTz0obmV3IHcoNSw1KSkuZnJlZXplKCk7dGhpcy5jbGVhcigpfXQuZ2EoIkxheW91dFZlcnRleCIsc2EpO3NhLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMucmQ9bnVsbDt0aGlzLmZmPW5ldyBCKHVhKTt0aGlzLlRlPW5ldyBCKHVhKX07c2EucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkxheW91dFZlcnRleCMiK3Qub2QodGhpcykrKG51bGwhPT10aGlzLkdjPyIoIit0aGlzLkdjLnRvU3RyaW5nKCkrIikiOiIiKX07dC5nKHNhLCJub2RlIixzYS5wcm90b3R5cGUuR2MpOw0KdC5kZWZpbmVQcm9wZXJ0eShzYSx7R2M6Im5vZGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnJkfSxmdW5jdGlvbihhKXtpZih0aGlzLnJkIT09YSl7ZSYmbnVsbCE9PWEmJnQubChhLFMsc2EsIm5vZGUiKTt0aGlzLnJkPWE7YS5zZigpO3ZhciBiPWEucGEsYz1iLngsZD1iLnksZj1iLndpZHRoLGI9Yi5oZWlnaHQ7aXNOYU4oYykmJihjPTApO2lzTmFOKGQpJiYoZD0wKTt0aGlzLlQucChjLGQsZixiKTtpZighKGEgaW5zdGFuY2VvZiBUKSYmKGE9YS5rYy5xYihLYiksYS5OKCkpKXt0aGlzLk8ucChhLngtYyxhLnktZCk7cmV0dXJufXRoaXMuTy5wKGYvMixiLzIpfX0pO3QuZyhzYSwiYm91bmRzIixzYS5wcm90b3R5cGUuT2IpO3QuZGVmaW5lUHJvcGVydHkoc2Ese09iOiJib3VuZHMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlR9LGZ1bmN0aW9uKGEpe3RoaXMuVC5NKGEpfHwoZSYmdC5sKGEseCxzYSwiYm91bmRzIiksdGhpcy5ULmFzc2lnbihhKSl9KTsNCnQuZyhzYSwiZm9jdXMiLHNhLnByb3RvdHlwZS5mb2N1cyk7dC5kZWZpbmVQcm9wZXJ0eShzYSx7Zm9jdXM6ImZvY3VzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5PfSxmdW5jdGlvbihhKXt0aGlzLk8uTShhKXx8KGUmJnQubChhLHcsc2EsImZvY3VzIiksdGhpcy5PLmFzc2lnbihhKSl9KTt0Lmcoc2EsImNlbnRlclgiLHNhLnByb3RvdHlwZS5EYSk7dC5kZWZpbmVQcm9wZXJ0eShzYSx7RGE6ImNlbnRlclgifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlQueCt0aGlzLk8ueH0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5UO2IueCt0aGlzLk8ueCE9PWEmJihlJiZ0LnEoYSxzYSwiY2VudGVyWCIpLGIuTGEoKSxiLng9YS10aGlzLk8ueCxiLmZyZWV6ZSgpKX0pO3QuZyhzYSwiY2VudGVyWSIsc2EucHJvdG90eXBlLlBhKTsNCnQuZGVmaW5lUHJvcGVydHkoc2Ese1BhOiJjZW50ZXJZIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ULnkrdGhpcy5PLnl9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuVDtiLnkrdGhpcy5PLnkhPT1hJiYoZSYmdC5xKGEsc2EsImNlbnRlclkiKSxiLkxhKCksYi55PWEtdGhpcy5PLnksYi5mcmVlemUoKSl9KTt0Lmcoc2EsImZvY3VzWCIsc2EucHJvdG90eXBlLmZwKTt0LmRlZmluZVByb3BlcnR5KHNhLHtmcDoiZm9jdXNYIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5PLnh9LGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuTztiLnghPT1hJiYoYi5MYSgpLGIueD1hLGIuZnJlZXplKCkpfSk7dC5nKHNhLCJmb2N1c1kiLHNhLnByb3RvdHlwZS5ncCk7dC5kZWZpbmVQcm9wZXJ0eShzYSx7Z3A6ImZvY3VzWSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTy55fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLk87Yi55IT09YSYmKGIuTGEoKSxiLnk9YSxiLmZyZWV6ZSgpKX0pO3QuZyhzYSwieCIsc2EucHJvdG90eXBlLngpOw0KdC5kZWZpbmVQcm9wZXJ0eShzYSx7eDoieCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVC54fSxmdW5jdGlvbihhKXt2YXIgYj10aGlzLlQ7Yi54IT09YSYmKGIuTGEoKSxiLng9YSxiLmZyZWV6ZSgpKX0pO3QuZyhzYSwieSIsc2EucHJvdG90eXBlLnkpO3QuZGVmaW5lUHJvcGVydHkoc2Ese3k6InkifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlQueX0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5UO2IueSE9PWEmJihiLkxhKCksYi55PWEsYi5mcmVlemUoKSl9KTt0Lmcoc2EsIndpZHRoIixzYS5wcm90b3R5cGUud2lkdGgpO3QuZGVmaW5lUHJvcGVydHkoc2Ese3dpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVC53aWR0aH0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5UO2Iud2lkdGghPT1hJiYoYi5MYSgpLGIud2lkdGg9YSxiLmZyZWV6ZSgpKX0pO3QuZyhzYSwiaGVpZ2h0IixzYS5wcm90b3R5cGUuaGVpZ2h0KTsNCnQuZGVmaW5lUHJvcGVydHkoc2Ese2hlaWdodDoiaGVpZ2h0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ULmhlaWdodH0sZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5UO2IuaGVpZ2h0IT09YSYmKGIuTGEoKSxiLmhlaWdodD1hLGIuZnJlZXplKCkpfSk7c2EucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuR2M7aWYobnVsbCE9PWEpe3ZhciBiPXRoaXMuT2I7aWYoIShhIGluc3RhbmNlb2YgVCkpe3ZhciBjPWEucGEsZD1hLmtjLnFiKEtiKTtpZihjLk4oKSYmZC5OKCkpe2EubW92ZVRvKGIueCt0aGlzLmZwLShkLngtYy54KSxiLnkrdGhpcy5ncC0oZC55LWMueSkpO3JldHVybn19YS5tb3ZlVG8oYi54LGIueSl9fTtzYS5wcm90b3R5cGUuYWRkU291cmNlRWRnZT1zYS5wcm90b3R5cGUuS0Q9ZnVuY3Rpb24oYSl7bnVsbCE9PWEmJihlJiZ0LmwoYSx1YSxzYSwiYWRkU291cmNlRWRnZTplZGdlIiksdGhpcy5mZi5jb250YWlucyhhKXx8dGhpcy5mZi5hZGQoYSkpfTsNCnNhLnByb3RvdHlwZS5kZWxldGVTb3VyY2VFZGdlPXNhLnByb3RvdHlwZS5zRT1mdW5jdGlvbihhKXtudWxsIT09YSYmKGUmJnQubChhLHVhLHNhLCJkZWxldGVTb3VyY2VFZGdlOmVkZ2UiKSx0aGlzLmZmLnJlbW92ZShhKSl9O3NhLnByb3RvdHlwZS5hZGREZXN0aW5hdGlvbkVkZ2U9c2EucHJvdG90eXBlLkhEPWZ1bmN0aW9uKGEpe251bGwhPT1hJiYoZSYmdC5sKGEsdWEsc2EsImFkZERlc3RpbmF0aW9uRWRnZTplZGdlIiksdGhpcy5UZS5jb250YWlucyhhKXx8dGhpcy5UZS5hZGQoYSkpfTtzYS5wcm90b3R5cGUuZGVsZXRlRGVzdGluYXRpb25FZGdlPXNhLnByb3RvdHlwZS5yRT1mdW5jdGlvbihhKXtudWxsIT09YSYmKGUmJnQubChhLHVhLHNhLCJkZWxldGVEZXN0aW5hdGlvbkVkZ2U6ZWRnZSIpLHRoaXMuVGUucmVtb3ZlKGEpKX07DQp0LkEoc2Ese1RKOiJzb3VyY2VWZXJ0ZXhlcyJ9LGZ1bmN0aW9uKCl7Zm9yKHZhciBhPW5ldyBDKHNhKSxiPXRoaXMucmM7Yi5uZXh0KCk7KXt2YXIgYz1iLnZhbHVlLmZyb21WZXJ0ZXg7bnVsbD09PWN8fGEuY29udGFpbnMoYyl8fGEuYWRkKGMpfXJldHVybiBhLmt9KTt0LkEoc2Ese3lJOiJkZXN0aW5hdGlvblZlcnRleGVzIn0sZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IEMoc2EpLGI9dGhpcy5nYztiLm5leHQoKTspe3ZhciBjPWIudmFsdWUudG9WZXJ0ZXg7bnVsbD09PWN8fGEuY29udGFpbnMoYyl8fGEuYWRkKGMpfXJldHVybiBhLmt9KTsNCnQuQShzYSx7dmVydGV4ZXM6InZlcnRleGVzIn0sZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IEMoc2EpLGI9dGhpcy5yYztiLm5leHQoKTspe3ZhciBjPWIudmFsdWUsYz1jLmZyb21WZXJ0ZXg7bnVsbD09PWN8fGEuY29udGFpbnMoYyl8fGEuYWRkKGMpfWZvcihiPXRoaXMuZ2M7Yi5uZXh0KCk7KWM9Yi52YWx1ZSxjPWMudG9WZXJ0ZXgsbnVsbD09PWN8fGEuY29udGFpbnMoYyl8fGEuYWRkKGMpO3JldHVybiBhLmt9KTt0LkEoc2Ese3JjOiJzb3VyY2VFZGdlcyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmYua30pO3QuQShzYSx7Z2M6ImRlc3RpbmF0aW9uRWRnZXMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlRlLmt9KTt0LkEoc2Ese2VkZ2VzOiJlZGdlcyJ9LGZ1bmN0aW9uKCl7Zm9yKHZhciBhPW5ldyBCKHVhKSxiPXRoaXMucmM7Yi5uZXh0KCk7KXt2YXIgYz1iLnZhbHVlO2EuYWRkKGMpfWZvcihiPXRoaXMuZ2M7Yi5uZXh0KCk7KWM9Yi52YWx1ZSxhLmFkZChjKTtyZXR1cm4gYS5rfSk7DQp0LkEoc2Ese0VJOiJlZGdlc0NvdW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZi5jb3VudCt0aGlzLlRlLmNvdW50fSk7dmFyIFJuO3NhLnN0YW5kYXJkQ29tcGFyZXI9Um49ZnVuY3Rpb24oYSxiKXtlJiZ0LmwoYSxzYSxzYSwic3RhbmRhcmRDb21wYXJlcjptIik7ZSYmdC5sKGIsc2Esc2EsInN0YW5kYXJkQ29tcGFyZXI6biIpO3ZhciBjPWEucmQsZD1iLnJkO3JldHVybiBjP2Q/KGM9Yy50ZXh0LGQ9ZC50ZXh0LGM8ZD8tMTpjPmQ/MTowKToxOm51bGwhPT1kPy0xOjB9Ow0Kc2Euc21hcnRDb21wYXJlcj1mdW5jdGlvbihhLGIpe2UmJnQubChhLHNhLHNhLCJzbWFydENvbXBhcmVyOm0iKTtlJiZ0LmwoYixzYSxzYSwic21hcnRDb21wYXJlcjpuIik7aWYobnVsbCE9PWEpe2lmKG51bGwhPT1iKXt2YXIgYz1hLnJkLGQ9Yi5yZDtpZihudWxsIT09Yyl7aWYobnVsbCE9PWQpe3ZhciBjPWMudGV4dC50b0xvY2FsZUxvd2VyQ2FzZSgpLnNwbGl0KC8oWytcLV0/W1wuXT9cZCsoPzpcLlxkKik/KD86ZVsrXC1dP1xkKyk/KS8pLGQ9ZC50ZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCkuc3BsaXQoLyhbK1wtXT9bXC5dP1xkKyg/OlwuXGQqKT8oPzplWytcLV0/XGQrKT8pLyksZjtmb3IoZj0wO2Y8Yy5sZW5ndGg7ZisrKWlmKCIiIT09ZFtmXSYmdm9pZCAwIT09ZFtmXSl7dmFyIGc9cGFyc2VGbG9hdChjW2ZdKSxoPXBhcnNlRmxvYXQoZFtmXSk7aWYoaXNOYU4oZykpe2lmKCFpc05hTihoKSlyZXR1cm4gMTtpZigwIT09Y1tmXS5sb2NhbGVDb21wYXJlKGRbZl0pKXJldHVybiBjW2ZdLmxvY2FsZUNvbXBhcmUoZFtmXSl9ZWxzZXtpZihpc05hTihoKSlyZXR1cm4tMTsNCmlmKDAhPT1nLWgpcmV0dXJuIGctaH19ZWxzZSBpZigiIiE9PWNbZl0pcmV0dXJuIDE7cmV0dXJuIiIhPT1kW2ZdJiZ2b2lkIDAhPT1kW2ZdPy0xOjB9cmV0dXJuIDF9cmV0dXJuIG51bGwhPT1kPy0xOjB9cmV0dXJuIDF9cmV0dXJuIG51bGwhPT1iPy0xOjB9O2Z1bmN0aW9uIHVhKCl7dC5BYyh0aGlzKTt0aGlzLm5ldHdvcms9bnVsbDt0aGlzLmNsZWFyKCl9dC5nYSgiTGF5b3V0RWRnZSIsdWEpO3VhLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMudG9WZXJ0ZXg9dGhpcy5mcm9tVmVydGV4PXRoaXMubGluaz1udWxsfTt1YS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTGF5b3V0RWRnZSMiK3Qub2QodGhpcykrKG51bGwhPT10aGlzLmxpbms/IigiK3RoaXMubGluay50b1N0cmluZygpKyIpIjoiIil9Ow0KdWEucHJvdG90eXBlLm94PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5mcm9tVmVydGV4O3RoaXMuZnJvbVZlcnRleD10aGlzLnRvVmVydGV4O3RoaXMudG9WZXJ0ZXg9YX07dWEucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbigpe307dWEucHJvdG90eXBlLmdldE90aGVyVmVydGV4PXVhLnByb3RvdHlwZS5KST1mdW5jdGlvbihhKXtlJiZ0LmwoYSxzYSx1YSwiZ2V0T3RoZXJWZXJ0ZXg6diIpO3JldHVybiB0aGlzLnRvVmVydGV4PT09YT90aGlzLmZyb21WZXJ0ZXg6dGhpcy5mcm9tVmVydGV4PT09YT90aGlzLnRvVmVydGV4Om51bGx9Ow0KZnVuY3Rpb24gWGooKXswPGFyZ3VtZW50cy5sZW5ndGgmJnQuYWQoWGopO2JlLmNhbGwodGhpcyk7dGhpcy5ydD0hMDt0aGlzLkhzPXRoaXMuSXM9TmFOO3RoaXMucWo9KG5ldyBnYShOYU4sTmFOKSkuZnJlZXplKCk7dGhpcy5PaD0obmV3IGdhKDEwLDEwKSkuZnJlZXplKCk7dGhpcy51ZT1mbDt0aGlzLmNkPWRsO3RoaXMuTmg9JGs7dGhpcy51aD1Tbn10LmdhKCJHcmlkTGF5b3V0IixYaik7dC5LYShYaixiZSk7WGoucHJvdG90eXBlLmNsb25lUHJvdGVjdGVkPWZ1bmN0aW9uKGEpe2JlLnByb3RvdHlwZS5jbG9uZVByb3RlY3RlZC5jYWxsKHRoaXMsYSk7YS5Jcz10aGlzLklzO2EuSHM9dGhpcy5IczthLnFqLmFzc2lnbih0aGlzLnFqKTthLk9oLmFzc2lnbih0aGlzLk9oKTthLnVlPXRoaXMudWU7YS5jZD10aGlzLmNkO2EuTmg9dGhpcy5OaDthLnVoPXRoaXMudWh9Ow0KWGoucHJvdG90eXBlLmRvTGF5b3V0PWZ1bmN0aW9uKGEpe2F8fHQubSgiTGF5b3V0LmRvTGF5b3V0KGNvbGxlY3Rpb24pIGFyZ3VtZW50IG11c3Qgbm90IGJlIG51bGwgYnV0IGEgRGlhZ3JhbSwgYSBHcm91cCwgb3IgYW4gSXRlcmFibGUgb2YgUGFydHMiKTt2YXIgYj10aGlzLmg7bnVsbD09PWImJm51bGw9PT10aGlzLmdyb3VwJiZ0Lm0oIlRoZSBkaWFncmFtIGZvciB0aGlzIGxheW91dCBpcyBub3Qgc2V0LiIpO3RoaXMuRGQ9dGhpcy5pbml0aWFsT3JpZ2luKHRoaXMuRGQpO3ZhciBjPW5ldyBDKEUpO2E9PT1iPyhNbih0aGlzLGMsYS5raCwhMCxudWxsLCEwLCEwLCEwKSxNbih0aGlzLGMsYS5saW5rcywhMCxudWxsLCEwLCEwLCEwKSxNbih0aGlzLGMsYS5ybCwhMCxudWxsLCEwLCEwLCEwKSk6YT09PXRoaXMuZ3JvdXA/TW4odGhpcyxjLGEuUmMsITEsbnVsbCwhMCwhMCwhMCk6Yy5PZShhLmspO2ZvcihhPWMuY29weSgpLms7YS5uZXh0KCk7KXt2YXIgZD1hLnZhbHVlO2lmKGQgaW5zdGFuY2VvZg0KViYmKG51bGwhPT1kLmFhfHxudWxsIT09ZC5jYSkpYy5yZW1vdmUoZCk7ZWxzZSBpZihkLnNmKCksZCBpbnN0YW5jZW9mIFQpZm9yKGQ9ZC5SYztkLm5leHQoKTspYy5yZW1vdmUoZC52YWx1ZSl9Yz1jLkllKCk7aWYoMCE9PWMubGVuZ3RoKXtzd2l0Y2godGhpcy5zb3J0aW5nKXtjYXNlIGNsOmMucmV2ZXJzZSgpO2JyZWFrO2Nhc2UgJGs6Yy5zb3J0KHRoaXMuY29tcGFyZXIpO2JyZWFrO2Nhc2UgYWw6Yy5zb3J0KHRoaXMuY29tcGFyZXIpLGMucmV2ZXJzZSgpfXZhciBmPXRoaXMuJEc7aXNOYU4oZikmJihmPTApO3ZhciBnPXRoaXMuc0IsZz1pc05hTihnKT9NYXRoLm1heChiLnhiLndpZHRoLWIucGFkZGluZy5sZWZ0LWIucGFkZGluZy5yaWdodCwwKTpNYXRoLm1heCh0aGlzLnNCLDApOzA+PWYmJjA+PWcmJihmPTEpO2E9dGhpcy5zcGFjaW5nLndpZHRoO2lzRmluaXRlKGEpfHwoYT0wKTtkPXRoaXMuc3BhY2luZy5oZWlnaHQ7aXNGaW5pdGUoZCl8fChkPTApO2Iuc2MoIkxheW91dCIpOw0KdmFyIGg9W107c3dpdGNoKHRoaXMuYWxpZ25tZW50KXtjYXNlIGdsOnZhciBrPWEsbD1kLG09TWF0aC5tYXgodGhpcy4kay53aWR0aCwxKTtpZighaXNGaW5pdGUobSkpZm9yKHZhciBuPW09MDtuPGMubGVuZ3RoO24rKyl2YXIgcD1jW25dLHE9cC5FYSxtPU1hdGgubWF4KG0scS53aWR0aCk7dmFyIG09TWF0aC5tYXgobStrLDEpLHI9TWF0aC5tYXgodGhpcy4kay5oZWlnaHQsMSk7aWYoIWlzRmluaXRlKHIpKWZvcihuPXI9MDtuPGMubGVuZ3RoO24rKylwPWNbbl0scT1wLkVhLHI9TWF0aC5tYXgocixxLmhlaWdodCk7Zm9yKHZhciByPU1hdGgubWF4KHIrbCwxKSxzPXRoaXMuUWUsdT10aGlzLkRkLngsdj11LEQ9dGhpcy5EZC55LEE9MCxHPTAsbj0wO248Yy5sZW5ndGg7bisrKXt2YXIgcD1jW25dLHE9cC5FYSxMPU1hdGguY2VpbCgocS53aWR0aCtrKS9tKSptLE49TWF0aC5jZWlsKChxLmhlaWdodCtsKS9yKSpyLE87c3dpdGNoKHMpe2Nhc2UgZWw6Tz1NYXRoLmFicyh2LXEud2lkdGgpOw0KYnJlYWs7ZGVmYXVsdDpPPXYrcS53aWR0aH1pZigwPGYmJkE+Zi0xfHwwPGcmJjA8QSYmTz5nKWgucHVzaChuZXcgeCgwLEQsZyxHK2wpKSxBPTAsdj11LEQrPUcsRz0wO0c9TWF0aC5tYXgoRyxOKTtzd2l0Y2gocyl7Y2FzZSBlbDpxPS1xLndpZHRoO2JyZWFrO2RlZmF1bHQ6cT0wfXAubW92ZVRvKHYrcSxEKTtzd2l0Y2gocyl7Y2FzZSBlbDp2LT1MO2JyZWFrO2RlZmF1bHQ6dis9TH1BKyt9aC5wdXNoKG5ldyB4KDAsRCxnLEcrbCkpO2JyZWFrO2Nhc2UgZmw6az1hO2w9ZDttPU1hdGgubWF4KHRoaXMuJGsud2lkdGgsMSk7bj1BPXE9MDtwPXQuSygpO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspcz1jW3JdLHU9cy5FYSx2PXptKHMscy5rYyxzLmJmLHApLHE9TWF0aC5tYXgocSx2LngpLEE9TWF0aC5tYXgoQSx1LndpZHRoLXYueCksbj1NYXRoLm1heChuLHYueSk7RD10aGlzLlFlO3N3aXRjaChEKXtjYXNlIGVsOnErPWs7YnJlYWs7ZGVmYXVsdDpBKz1rfXZhciBtPWlzRmluaXRlKG0pPw0KTWF0aC5tYXgobStrLDEpOk1hdGgubWF4KHErQSwxKSxVPUE9dGhpcy5EZC54LEc9dGhpcy5EZC55LEw9MDtnPj1xJiYoZy09cSk7cT0wO049TWF0aC5tYXgodGhpcy4kay5oZWlnaHQsMSk7Tz1uPTA7Zm9yKHZhciBZPSEwLGJhPXQuSygpLHI9MDtyPGMubGVuZ3RoO3IrKyl7cz1jW3JdO3U9cy5FYTt2PXptKHMscy5rYyxzLmJmLHApO2lmKDA8TClzd2l0Y2goRCl7Y2FzZSBlbDpVPU1hdGguZmxvb3IoKFUtQS0odS53aWR0aC12LngpKS9tKSptK0E7YnJlYWs7ZGVmYXVsdDpVPU1hdGguY2VpbCgoVS1BK3YueCkvbSkqbStBfWVsc2Ugc3dpdGNoKEQpe2Nhc2UgZWw6cT1VK3YueCt1LndpZHRoO2JyZWFrO2RlZmF1bHQ6cT1VLXYueH12YXIgUjtzd2l0Y2goRCl7Y2FzZSBlbDpSPS0oVSt2LngpK3E7YnJlYWs7ZGVmYXVsdDpSPVUrdS53aWR0aC12LngtcX1pZigwPGYmJkw+Zi0xfHwwPGcmJjA8TCYmUj5nKXtoLnB1c2gobmV3IHgoMCxHLGcsKFk/TzpPK24pK2wpKTtmb3IoVT0wO1U8DQpMJiZyIT09TDtVKyspe1I9Y1tyLUwrVV07dmFyIHhhPXptKFIsUi5rYyxSLmJmLGJhKTtSLm1vdmVUbyhSLnBvc2l0aW9uLngsUi5wb3NpdGlvbi55K24teGEueSl9Tys9bDtHPVk/RytPOkcrKE8rbik7TD1PPW49MDtVPUE7WT0hMX1uPU1hdGgubWF4KG4sdi55KTtPPU1hdGgubWF4KE8sdS5oZWlnaHQtdi55KTtpc0Zpbml0ZShOKSYmKE89TWF0aC5tYXgoTyxNYXRoLm1heCh1LmhlaWdodCxOKS12LnkpKTtZP3MubW92ZVRvKFUtdi54LEctdi55KTpzLm1vdmVUbyhVLXYueCxHKTtzd2l0Y2goRCl7Y2FzZSBlbDpVLT12LngrazticmVhaztkZWZhdWx0OlUrPXUud2lkdGgtdi54K2t9TCsrfWgucHVzaChuZXcgeCgwLEcsZywoWT9POk8rbikrbCkpO2ZvcihVPTA7VTxMJiZyIT09TDtVKyspUj1jW3ItTCtVXSx4YT16bShSLFIua2MsUi5iZixwKSxSLm1vdmVUbyhSLnBvc2l0aW9uLngsUi5wb3NpdGlvbi55K24teGEueSk7dC5CKHApO3QuQihiYSl9dGhpcy5jb21taXRMYXllcnMoaCwNCm5ldyB3KC1hLzIsLWQvMikpO2IuQ2UoIkxheW91dCIpO3RoaXMuJGU9ITB9fTtYai5wcm90b3R5cGUuY29tbWl0TGF5ZXJzPWZ1bmN0aW9uKCl7fTt0LmcoWGosIndyYXBwaW5nV2lkdGgiLFhqLnByb3RvdHlwZS5zQik7dC5kZWZpbmVQcm9wZXJ0eShYaix7c0I6IndyYXBwaW5nV2lkdGgifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLklzfSxmdW5jdGlvbihhKXt0aGlzLklzIT09YSYmKHQuaShhLCJudW1iZXIiLFhqLCJ3cmFwcGluZ1dpZHRoIiksMDxhfHxpc05hTihhKSkmJih0aGlzLklzPWEsdGhpcy5ydD1pc05hTihhKSx0aGlzLkooKSl9KTt0LmcoWGosIndyYXBwaW5nQ29sdW1uIixYai5wcm90b3R5cGUuJEcpOw0KdC5kZWZpbmVQcm9wZXJ0eShYaix7JEc6IndyYXBwaW5nQ29sdW1uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Ic30sZnVuY3Rpb24oYSl7dGhpcy5IcyE9PWEmJih0LmkoYSwibnVtYmVyIixYaiwid3JhcHBpbmdDb2x1bW4iKSwwPGF8fGlzTmFOKGEpKSYmKHRoaXMuSHM9YSx0aGlzLkooKSl9KTt0LmcoWGosImNlbGxTaXplIixYai5wcm90b3R5cGUuJGspO3QuZGVmaW5lUHJvcGVydHkoWGoseyRrOiJjZWxsU2l6ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucWp9LGZ1bmN0aW9uKGEpe3QubChhLGdhLFhqLCJjZWxsU2l6ZSIpO3RoaXMucWouTShhKXx8KHRoaXMucWouYXNzaWduKGEpLHRoaXMuSigpKX0pO3QuZyhYaiwic3BhY2luZyIsWGoucHJvdG90eXBlLnNwYWNpbmcpOw0KdC5kZWZpbmVQcm9wZXJ0eShYaix7c3BhY2luZzoic3BhY2luZyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2h9LGZ1bmN0aW9uKGEpe3QubChhLGdhLFhqLCJzcGFjaW5nIik7dGhpcy5PaC5NKGEpfHwodGhpcy5PaC5hc3NpZ24oYSksdGhpcy5KKCkpfSk7dC5nKFhqLCJhbGlnbm1lbnQiLFhqLnByb3RvdHlwZS5hbGlnbm1lbnQpO3QuZGVmaW5lUHJvcGVydHkoWGose2FsaWdubWVudDoiYWxpZ25tZW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51ZX0sZnVuY3Rpb24oYSl7dGhpcy51ZSE9PWEmJih0LkFhKGEsWGosWGosImFsaWdubWVudCIpLGE9PT1mbHx8YT09PWdsKSYmKHRoaXMudWU9YSx0aGlzLkooKSl9KTt0LmcoWGosImFycmFuZ2VtZW50IixYai5wcm90b3R5cGUuUWUpOw0KdC5kZWZpbmVQcm9wZXJ0eShYaix7UWU6ImFycmFuZ2VtZW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jZH0sZnVuY3Rpb24oYSl7dGhpcy5jZCE9PWEmJih0LkFhKGEsWGosWGosImFycmFuZ2VtZW50IiksYT09PWRsfHxhPT09ZWwpJiYodGhpcy5jZD1hLHRoaXMuSigpKX0pO3QuZyhYaiwic29ydGluZyIsWGoucHJvdG90eXBlLnNvcnRpbmcpO3QuZGVmaW5lUHJvcGVydHkoWGose3NvcnRpbmc6InNvcnRpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk5ofSxmdW5jdGlvbihhKXt0aGlzLk5oIT09YSYmKHQuQWEoYSxYaixYaiwic29ydGluZyIpLGE9PT1ibHx8YT09PWNsfHxhPT09JGt8fGE9PT1hbCkmJih0aGlzLk5oPWEsdGhpcy5KKCkpfSk7dC5nKFhqLCJjb21wYXJlciIsWGoucHJvdG90eXBlLmNvbXBhcmVyKTsNCnQuZGVmaW5lUHJvcGVydHkoWGose2NvbXBhcmVyOiJjb21wYXJlciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWh9LGZ1bmN0aW9uKGEpe3RoaXMudWghPT1hJiYodC5pKGEsImZ1bmN0aW9uIixYaiwiY29tcGFyZXIiKSx0aGlzLnVoPWEsdGhpcy5KKCkpfSk7dmFyIFNuO1hqLnN0YW5kYXJkQ29tcGFyZXI9U249ZnVuY3Rpb24oYSxiKXtlJiZ0LmwoYSxFLFhqLCJzdGFuZGFyZENvbXBhcmVyOmEiKTtlJiZ0LmwoYixFLFhqLCJzdGFuZGFyZENvbXBhcmVyOmIiKTt2YXIgYz1hLnRleHQsZD1iLnRleHQ7cmV0dXJuIGM8ZD8tMTpjPmQ/MTowfTsNClhqLnNtYXJ0Q29tcGFyZXI9ZnVuY3Rpb24oYSxiKXtlJiZ0LmwoYSxFLFhqLCJzdGFuZGFyZENvbXBhcmVyOmEiKTtlJiZ0LmwoYixFLFhqLCJzdGFuZGFyZENvbXBhcmVyOmIiKTtpZihudWxsIT09YSl7aWYobnVsbCE9PWIpe3ZhciBjPWEudGV4dC50b0xvY2FsZUxvd2VyQ2FzZSgpLnNwbGl0KC8oWytcLV0/W1wuXT9cZCsoPzpcLlxkKik/KD86ZVsrXC1dP1xkKyk/KS8pLGQ9Yi50ZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCkuc3BsaXQoLyhbK1wtXT9bXC5dP1xkKyg/OlwuXGQqKT8oPzplWytcLV0/XGQrKT8pLyksZjtmb3IoZj0wO2Y8Yy5sZW5ndGg7ZisrKWlmKCIiIT09ZFtmXSYmdm9pZCAwIT09ZFtmXSl7dmFyIGc9cGFyc2VGbG9hdChjW2ZdKSxoPXBhcnNlRmxvYXQoZFtmXSk7aWYoaXNOYU4oZykpe2lmKCFpc05hTihoKSlyZXR1cm4gMTtpZigwIT09Y1tmXS5sb2NhbGVDb21wYXJlKGRbZl0pKXJldHVybiBjW2ZdLmxvY2FsZUNvbXBhcmUoZFtmXSl9ZWxzZXtpZihpc05hTihoKSlyZXR1cm4tMTsNCmlmKDAhPT1nLWgpcmV0dXJuIGctaH19ZWxzZSBpZigiIiE9PWNbZl0pcmV0dXJuIDE7cmV0dXJuIiIhPT1kW2ZdJiZ2b2lkIDAhPT1kW2ZdPy0xOjB9cmV0dXJuIDF9cmV0dXJuIG51bGwhPT1iPy0xOjB9O3ZhciBnbDtYai5Qb3NpdGlvbj1nbD10LncoWGosIlBvc2l0aW9uIiwwKTt2YXIgZmw7WGouTG9jYXRpb249Zmw9dC53KFhqLCJMb2NhdGlvbiIsMSk7dmFyIGRsO1hqLkxlZnRUb1JpZ2h0PWRsPXQudyhYaiwiTGVmdFRvUmlnaHQiLDIpO3ZhciBlbDtYai5SaWdodFRvTGVmdD1lbD10LncoWGosIlJpZ2h0VG9MZWZ0IiwzKTt2YXIgYmw7WGouRm9yd2FyZD1ibD10LncoWGosIkZvcndhcmQiLDQpO3ZhciBjbDtYai5SZXZlcnNlPWNsPXQudyhYaiwiUmV2ZXJzZSIsNSk7dmFyICRrO1hqLkFzY2VuZGluZz0kaz10LncoWGosIkFzY2VuZGluZyIsNik7dmFyIGFsO1hqLkRlc2NlbmRpbmc9YWw9dC53KFhqLCJEZXNjZW5kaW5nIiw3KTsNCmZ1bmN0aW9uIGhsKCl7MDxhcmd1bWVudHMubGVuZ3RoJiZ0LmFkKGhsKTtiZS5jYWxsKHRoaXMpO3RoaXMuTnk9dGhpcy5Obj10aGlzLnlkPTA7dGhpcy5KcT0zNjA7dGhpcy5NeT16bDt0aGlzLkFrPTA7dGhpcy5nQz16bDt0aGlzLnR1PXRoaXMudGc9dGhpcy55RD0wO3RoaXMuV3Y9bmV3IFRuO3RoaXMud3U9dGhpcy5rbT0wO3RoaXMudEg9NjAwO3RoaXMuUnI9TmFOO3RoaXMucHE9MTt0aGlzLnNzPTA7dGhpcy51cz0zNjA7dGhpcy5jZD16bDt0aGlzLnNhPXBsO3RoaXMuTmg9bWw7dGhpcy51aD1Sbjt0aGlzLk9oPTY7dGhpcy5Jcj1DbH10LmdhKCJDaXJjdWxhckxheW91dCIsaGwpO3QuS2EoaGwsYmUpOw0KaGwucHJvdG90eXBlLmNsb25lUHJvdGVjdGVkPWZ1bmN0aW9uKGEpe2JlLnByb3RvdHlwZS5jbG9uZVByb3RlY3RlZC5jYWxsKHRoaXMsYSk7YS5Scj10aGlzLlJyO2EucHE9dGhpcy5wcTthLnNzPXRoaXMuc3M7YS51cz10aGlzLnVzO2EuY2Q9dGhpcy5jZDthLnNhPXRoaXMuc2E7YS5OaD10aGlzLk5oO2EudWg9dGhpcy51aDthLk9oPXRoaXMuT2g7YS5Jcj10aGlzLklyfTtobC5wcm90b3R5cGUuY3JlYXRlTmV0d29yaz1mdW5jdGlvbigpe3ZhciBhPW5ldyBVbjtMbihhLHRoaXMpO3JldHVybiBhfTsNCmhsLnByb3RvdHlwZS5kb0xheW91dD1mdW5jdGlvbihhKXthfHx0Lm0oIkxheW91dC5kb0xheW91dChjb2xsZWN0aW9uKSBhcmd1bWVudCBtdXN0IG5vdCBiZSBudWxsIGJ1dCBhIERpYWdyYW0sIGEgR3JvdXAsIG9yIGFuIEl0ZXJhYmxlIG9mIFBhcnRzIik7bnVsbD09PXRoaXMubmV0d29yayYmKHRoaXMubmV0d29yaz10aGlzLm1ha2VOZXR3b3JrKGEpKTthPXRoaXMubmV0d29yay52ZXJ0ZXhlcztpZigxPj1hLmNvdW50KTE9PT1hLmNvdW50JiYoYT1hLiRhKCksYS5EYT0wLGEuUGE9MCk7ZWxzZXt2YXIgYj1uZXcgQihWbik7Yi5PZShhLmspO2E9bmV3IEIoVm4pO3ZhciBjPW5ldyBCKFZuKSxiPXRoaXMuc29ydChiKTthPW5ldyBCKFZuKTt2YXIgYz1uZXcgQihWbiksZD10aGlzLk15LGY9dGhpcy5nQyxnPXRoaXMueWQsaD10aGlzLk5uLGs9dGhpcy5OeSxsPXRoaXMuSnEsbT10aGlzLkFrLG49dGhpcy55RCxwPXRoaXMudGcscT10aGlzLnR1LGQ9dGhpcy5RZSxmPXRoaXMuQXQsZz0NCnRoaXMuTEY7aWYoIWlzRmluaXRlKGcpfHwwPj1nKWc9TmFOO2g9dGhpcy5QRDtpZighaXNGaW5pdGUoaCl8fDA+PWgpaD0xO2s9dGhpcy5uaDtpc0Zpbml0ZShrKXx8KGs9MCk7bD10aGlzLmhpO2lmKCFpc0Zpbml0ZShsKXx8MzYwPGx8fDE+bClsPTM2MDttPXRoaXMuc3BhY2luZztpc0Zpbml0ZShtKXx8KG09TmFOKTtkPT09QWwmJmY9PT1CbD9kPXpsOmQ9PT1BbCYmZiE9PUJsJiYoZj1CbCxkPXRoaXMuUWUpO2lmKCh0aGlzLmRpcmVjdGlvbj09PW5sfHx0aGlzLmRpcmVjdGlvbj09PW9sKSYmdGhpcy5zb3J0aW5nIT09bWwpe2Zvcih2YXIgcj0wOyEocj49Yi5sZW5ndGgpO3IrPTIpe2EuYWRkKGIud2EocikpO2lmKHIrMT49Yi5sZW5ndGgpYnJlYWs7Yy5hZGQoYi53YShyKzEpKX10aGlzLmRpcmVjdGlvbj09PW5sPyh0aGlzLlFlPT09QWwmJmEucmV2ZXJzZSgpLGI9bmV3IEIoVm4pLGIuT2UoYSksYi5PZShjKSk6KHRoaXMuUWU9PT1BbCYmYy5yZXZlcnNlKCksYj1uZXcgQihWbiksDQpiLk9lKGMpLGIuT2UoYSkpfWZvcih2YXIgcz1iLmxlbmd0aCx1PW49MCxyPTA7cjxiLmxlbmd0aDtyKyspe3ZhciBwPWsrbCp1Kih0aGlzLmRpcmVjdGlvbj09PXBsPzE6LTEpL3Msdj1iLndhKHIpLmRpYW1ldGVyO2lzTmFOKHYpJiYodj1XbihiLndhKHIpLHApKTszNjA+bCYmKDA9PT1yfHxyPT09Yi5sZW5ndGgtMSkmJih2Lz0yKTtuKz12O3UrK31pZihpc05hTihnKXx8ZD09PUFsKXtpc05hTihtKSYmKG09Nik7aWYoZCE9PXpsJiZkIT09QWwpe3Y9LUluZmluaXR5O2ZvcihyPTA7cjxzO3IrKyl7dmFyIHE9Yi53YShyKSxEPWIud2Eocj09PXMtMT8wOnIrMSk7aXNOYU4ocS5kaWFtZXRlcikmJlduKHEsMCk7aXNOYU4oRC5kaWFtZXRlcikmJlduKEQsMCk7dj1NYXRoLm1heCh2LChxLmRpYW1ldGVyK0QuZGlhbWV0ZXIpLzIpfXE9dittO2Q9PT1ybD8ocD0yKk1hdGguUEkvcyxnPSh2K20pL3ApOmc9WG4odGhpcyxxKigzNjA8PWw/czpzLTEpLGgsaypNYXRoLlBJLzE4MCxsKk1hdGguUEkvDQoxODApfWVsc2UgZz1Ybih0aGlzLG4rKDM2MDw9bD9zOnMtMSkqKGQhPT1BbD9tOjEuNiptKSxoLGsqTWF0aC5QSS8xODAsbCpNYXRoLlBJLzE4MCk7cD1nKmh9ZWxzZSBpZihwPWcqaCx1PVluKHRoaXMsZyxwLGsqTWF0aC5QSS8xODAsbCpNYXRoLlBJLzE4MCksaXNOYU4obSkpe2lmKGQ9PT16bHx8ZD09PUFsKW09KHUtbikvKDM2MDw9bD9zOnMtMSl9ZWxzZSBpZihkPT09emx8fGQ9PT1BbClyPSh1LW4pLygzNjA8PWw/czpzLTEpLHI8bT8oZz1Ybih0aGlzLG4rbSooMzYwPD1sP3M6cy0xKSxoLGsqTWF0aC5QSS8xODAsbCpNYXRoLlBJLzE4MCkscD1nKmgpOm09cjtlbHNle3Y9LUluZmluaXR5O2ZvcihyPTA7cjxzO3IrKylxPWIud2EociksRD1iLndhKHI9PT1zLTE/MDpyKzEpLGlzTmFOKHEuZGlhbWV0ZXIpJiZXbihxLDApLGlzTmFOKEQuZGlhbWV0ZXIpJiZXbihELDApLHY9TWF0aC5tYXgodiwocS5kaWFtZXRlcitELmRpYW1ldGVyKS8yKTtxPXYrbTtyPVhuKHRoaXMscSooMzYwPD0NCmw/czpzLTEpLGgsaypNYXRoLlBJLzE4MCxsKk1hdGguUEkvMTgwKTtyPmc/KGc9cixwPWcqaCk6cT11LygzNjA8PWw/czpzLTEpfXRoaXMuTXk9ZDt0aGlzLmdDPWY7dGhpcy55ZD1nO3RoaXMuTm49aDt0aGlzLk55PWs7dGhpcy5KcT1sO3RoaXMuQWs9bTt0aGlzLnlEPW47dGhpcy50Zz1wO3RoaXMudHU9cTtjPVtiLGEsY107Yj1jWzBdO2E9Y1sxXTtjPWNbMl07ZD10aGlzLk15O2Y9dGhpcy55ZDtoPXRoaXMuTnk7az10aGlzLkpxO2w9dGhpcy5BazttPXRoaXMudGc7bj10aGlzLnR1O2lmKHRoaXMuZGlyZWN0aW9uIT09bmwmJnRoaXMuZGlyZWN0aW9uIT09b2x8fGQhPT1BbClpZih0aGlzLmRpcmVjdGlvbj09PW5sfHx0aGlzLmRpcmVjdGlvbj09PW9sKXtnPTA7c3dpdGNoKGQpe2Nhc2Ugc2w6Zz0xODAqWm4odGhpcyxmLG0saCxuKS9NYXRoLlBJO2JyZWFrO2Nhc2Ugemw6bj1iPTA7Zz1hLiRhKCk7bnVsbCE9PWcmJihiPVduKGcsTWF0aC5QSS8yKSk7Zz1jLiRhKCk7bnVsbCE9PQ0KZyYmKG49V24oZyxNYXRoLlBJLzIpKTtnPTE4MCpabih0aGlzLGYsbSxoLGwrKGIrbikvMikvTWF0aC5QSTticmVhaztjYXNlIHJsOmc9ay9iLmxlbmd0aH1pZih0aGlzLmRpcmVjdGlvbj09PW5sKXtzd2l0Y2goZCl7Y2FzZSBzbDokbih0aGlzLGEsaCxxbCk7YnJlYWs7Y2FzZSB6bDphbyh0aGlzLGEsaCxxbCk7YnJlYWs7Y2FzZSBybDpibyh0aGlzLGEsay8yLGgscWwpfXN3aXRjaChkKXtjYXNlIHNsOiRuKHRoaXMsYyxoK2cscGwpO2JyZWFrO2Nhc2Ugemw6YW8odGhpcyxjLGgrZyxwbCk7YnJlYWs7Y2FzZSBybDpibyh0aGlzLGMsay8yLGgrZyxwbCl9fWVsc2V7c3dpdGNoKGQpe2Nhc2Ugc2w6JG4odGhpcyxjLGgscWwpO2JyZWFrO2Nhc2Ugemw6YW8odGhpcyxjLGgscWwpO2JyZWFrO2Nhc2Ugcmw6Ym8odGhpcyxjLGsvMixoLHFsKX1zd2l0Y2goZCl7Y2FzZSBzbDokbih0aGlzLGEsaCtnLHBsKTticmVhaztjYXNlIHpsOmFvKHRoaXMsYSxoK2cscGwpO2JyZWFrO2Nhc2Ugcmw6Ym8odGhpcywNCmEsay8yLGgrZyxwbCl9fX1lbHNlIHN3aXRjaChkKXtjYXNlIHNsOiRuKHRoaXMsYixoLHRoaXMuZGlyZWN0aW9uKTticmVhaztjYXNlIHpsOmFvKHRoaXMsYixoLHRoaXMuZGlyZWN0aW9uKTticmVhaztjYXNlIHJsOmJvKHRoaXMsYixrLGgsdGhpcy5kaXJlY3Rpb24pO2JyZWFrO2Nhc2UgQWw6Y28odGhpcyxiLGssaCx0aGlzLmRpcmVjdGlvbil9ZWxzZSBjbyh0aGlzLGIsayxoLWsvMixwbCl9dGhpcy51cGRhdGVQYXJ0cygpO3RoaXMubmV0d29yaz1udWxsO3RoaXMuJGU9ITB9Ow0KZnVuY3Rpb24gYm8oYSxiLGMsZCxmKXt2YXIgZz1hLkpxLGg9YS55ZDthPWEudGc7ZD1kKk1hdGguUEkvMTgwO2M9YypNYXRoLlBJLzE4MDtmb3IodmFyIGs9Yi5sZW5ndGgsbD0wO2w8aztsKyspe3ZhciBtPWQrKGY9PT1wbD9sKmMvKDM2MDw9Zz9rOmstMSk6LShsKmMpL2spLG49Yi53YShsKSxwPWgqTWF0aC50YW4obSkvYSxwPU1hdGguc3FydCgoaCpoK2EqYSpwKnApLygxK3AqcCkpO24uRGE9cCpNYXRoLmNvcyhtKTtuLlBhPXAqTWF0aC5zaW4obSk7bi5hY3R1YWxBbmdsZT0xODAqbS9NYXRoLlBJfX0NCmZ1bmN0aW9uIGFvKGEsYixjLGQpe3ZhciBmPWEueWQsZz1hLnRnLGg9YS5BaztjPWMqTWF0aC5QSS8xODA7Zm9yKHZhciBrPWIubGVuZ3RoLGw9MDtsPGs7bCsrKXt2YXIgbT1iLndhKGwpLG49Yi53YShsPT09ay0xPzA6bCsxKSxwPWcqTWF0aC5zaW4oYyk7bS5EYT1mKk1hdGguY29zKGMpO20uUGE9cDttLmFjdHVhbEFuZ2xlPTE4MCpjL01hdGguUEk7aXNOYU4obS5kaWFtZXRlcikmJlduKG0sMCk7aXNOYU4obi5kaWFtZXRlcikmJlduKG4sMCk7bT1abihhLGYsZyxkPT09cGw/YzotYywobS5kaWFtZXRlcituLmRpYW1ldGVyKS8yK2gpO2MrPWQ9PT1wbD9tOi1tfX0NCmZ1bmN0aW9uICRuKGEsYixjLGQpe3ZhciBmPWEueWQsZz1hLnRnLGg9YS50dTtjPWMqTWF0aC5QSS8xODA7Zm9yKHZhciBrPWIubGVuZ3RoLGw9MDtsPGs7bCsrKXt2YXIgbT1iLndhKGwpO20uRGE9ZipNYXRoLmNvcyhjKTttLlBhPWcqTWF0aC5zaW4oYyk7bS5hY3R1YWxBbmdsZT0xODAqYy9NYXRoLlBJO209Wm4oYSxmLGcsZD09PXBsP2M6LWMsaCk7Yys9ZD09PXBsP206LW19fWZ1bmN0aW9uIGNvKGEsYixjLGQsZil7dmFyIGc9YS53dSxnPWEuSnE7YS5rbT0wO2EuV3Y9bmV3IFRuO2lmKDM2MD5jKXtmb3IoZz1kKyhmPT09cGw/ZzotZyk7MD5nOylnKz0zNjA7ZyU9MzYwOzE4MDxnJiYoZy09MzYwKTtnKj1NYXRoLlBJLzE4MDthLnd1PWc7ZW8oYSxiLGMsZCxmKX1lbHNlIGZvKGEsYixjLGQsZik7YS5Xdi5jb21taXQoYil9DQpmdW5jdGlvbiBmbyhhLGIsYyxkLGYpe3ZhciBnPWEueWQsaD1hLkFrLGs9YS5ObixsPWcqTWF0aC5jb3MoZCpNYXRoLlBJLzE4MCksbT1hLnRnKk1hdGguc2luKGQqTWF0aC5QSS8xODApLG49Yi5JZSgpO2lmKDM9PT1uLmxlbmd0aCluWzBdLkRhPWcsblswXS5QYT0wLG5bMV0uRGE9blswXS5EYS1uWzBdLndpZHRoLzItblsxXS53aWR0aC8yLWgsblsxXS55PW5bMF0ueSxuWzJdLkRhPShuWzBdLkRhK25bMV0uRGEpLzIsblsyXS55PW5bMF0ueS1uWzJdLmhlaWdodC1oO2Vsc2UgaWYoND09PW4ubGVuZ3RoKW5bMF0uRGE9ZyxuWzBdLlBhPTAsblsyXS5EYT0tblswXS5EYSxuWzJdLlBhPW5bMF0uUGEsblsxXS5EYT0wLG5bMV0ueT1NYXRoLm1pbihuWzBdLnksblsyXS55KS1uWzFdLmhlaWdodC1oLG5bM10uRGE9MCxuWzNdLnk9TWF0aC5tYXgoblswXS55K25bMF0uaGVpZ2h0K2gsblsyXS55K25bMl0uaGVpZ2h0K2gpO2Vsc2V7Zm9yKGc9MDtnPG4ubGVuZ3RoO2crKyl7bltnXS5EYT0NCmw7bltnXS5QYT1tO2lmKGc+PW4ubGVuZ3RoLTEpYnJlYWs7dmFyIHA9aG8oYSxsLG0sbixnLGYpO3BbMF18fChwPWlvKGEsbCxtLG4sZyxmKSk7bD1wWzFdO209cFsyXX1hLmttKys7aWYoISgyMzxhLmttKSl7dmFyIGw9blswXS5EYSxtPW5bMF0uUGEsZz1uW24ubGVuZ3RoLTFdLkRhLHA9bltuLmxlbmd0aC0xXS5QYSxxPU1hdGguYWJzKGwtZyktKChuWzBdLndpZHRoK25bbi5sZW5ndGgtMV0ud2lkdGgpLzIraCkscj1NYXRoLmFicyhtLXApLSgoblswXS5oZWlnaHQrbltuLmxlbmd0aC0xXS5oZWlnaHQpLzIraCksaD0wOzE+TWF0aC5hYnMocik/TWF0aC5hYnMobC1nKTwoblswXS53aWR0aCtuW24ubGVuZ3RoLTFdLndpZHRoKS8yJiYoaD0wKTpoPTA8cj9yOjE+TWF0aC5hYnMocSk/MDpxO3E9ITE7cT1NYXRoLmFicyhnKT5NYXRoLmFicyhwKT8wPGchPT1tPnA6MDxwIT09bDxnO2lmKHE9Zj09PXBsP3E6IXEpaD0tTWF0aC5hYnMoaCksaD1NYXRoLm1pbihoLC1uW24ubGVuZ3RoLQ0KMV0ud2lkdGgpLGg9TWF0aC5taW4oaCwtbltuLmxlbmd0aC0xXS5oZWlnaHQpO2w9YS5XdjtpZigwPGgmJjA+bC5qcHx8TWF0aC5hYnMoaCk8TWF0aC5hYnMobC5qcCkmJiEoMD5oJiYwPGwuanApKWZvcihsLmpwPWgsbC5xbj1bXSxsLiRwPVtdLG09MDttPG4ubGVuZ3RoO20rKylsLnFuW21dPW5bbV0uT2IueCxsLiRwW21dPW5bbV0uT2IueTsxPE1hdGguYWJzKGgpJiYoYS55ZD04PmEua20/YS55ZC1oLygyKk1hdGguUEkpOjU+bi5sZW5ndGgmJjEwPGg/YS55ZC8yOmEueWQtKDA8aD8xLjc6LTIuMyksYS50Zz1hLnlkKmssZm8oYSxiLGMsZCxmKSl9fX0NCmZ1bmN0aW9uIGVvKGEsYixjLGQsZil7Zm9yKHZhciBnPWEueWQsaD1hLnRnLGs9YS5ObixsPWcqTWF0aC5jb3MoZCpNYXRoLlBJLzE4MCksbT1oKk1hdGguc2luKGQqTWF0aC5QSS8xODApLG49Yi5JZSgpLHA9MDtwPG4ubGVuZ3RoO3ArKyl7bltwXS5EYT1sO25bcF0uUGE9bTtpZihwPj1uLmxlbmd0aC0xKWJyZWFrO3ZhciBxPWhvKGEsbCxtLG4scCxmKTtxWzBdfHwocT1pbyhhLGwsbSxuLHAsZikpO2w9cVsxXTttPXFbMl19YS5rbSsrO2lmKCEoMjM8YS5rbSkpe2w9TWF0aC5hdGFuMihtLGwpO2w9Zj09PXBsP2Eud3UtbDpsLWEud3U7bD1NYXRoLmFicyhsKTxNYXRoLmFicyhsLTIqTWF0aC5QSSk/bDpsLTIqTWF0aC5QSTtnPWwqKGcraCkvMjtoPWEuV3Y7aWYoTWF0aC5hYnMoZyk8TWF0aC5hYnMoaC5qcCkpZm9yKGguanA9ZyxoLnFuPVtdLGguJHA9W10sbD0wO2w8bi5sZW5ndGg7bCsrKWgucW5bbF09bltsXS5PYi54LGguJHBbbF09bltsXS5PYi55OzE8TWF0aC5hYnMoZykmJg0KKGEueWQ9OD5hLmttP2EueWQtZy8oMipNYXRoLlBJKTphLnlkLSgwPGc/MS43Oi0yLjMpLGEudGc9YS55ZCprLGVvKGEsYixjLGQsZikpfX1mdW5jdGlvbiBobyhhLGIsYyxkLGYsZyl7dmFyIGg9YS55ZCxrPWEudGcsbD0wLG09MDthPShkW2ZdLndpZHRoK2RbZisxXS53aWR0aCkvMithLkFrO3ZhciBuPSExO2lmKDA8PWMhPT0oZz09PXBsKSl7aWYobD1iK2EsbD5oKXtsPWItYTtpZihsPC1oKXJldHVybiBiPVshMV0sYlsxXT1sLGJbMl09bSxiO249ITB9fWVsc2UgaWYobD1iLWEsbDwtaCl7bD1iK2E7aWYobD5oKXJldHVybiBiPVshMV0sYlsxXT1sLGJbMl09bSxiO249ITB9bT1NYXRoLnNxcnQoMS1NYXRoLm1pbigxLGwqbC8oaCpoKSkpKms7MD5jIT09biYmKG09LW0pO2I9TWF0aC5hYnMoYy1tKT4oZFtmXS5oZWlnaHQrZFtmKzFdLmhlaWdodCkvMj9bITFdOlshMF07YlsxXT1sO2JbMl09bTtyZXR1cm4gYn0NCmZ1bmN0aW9uIGlvKGEsYixjLGQsZixnKXt2YXIgaD1hLnlkLGs9YS50ZyxsPTAsbT0wO2E9KGRbZl0uaGVpZ2h0K2RbZisxXS5oZWlnaHQpLzIrYS5Bazt2YXIgbj0hMTtpZigwPD1iIT09KGc9PT1wbCkpe2lmKG09Yy1hLG08LWspe209YythO2lmKG0+aylyZXR1cm4gYj1bITFdLGJbMV09bCxiWzJdPW0sYjtuPSEwfX1lbHNlIGlmKG09YythLG0+ayl7bT1jLWE7aWYobTwtaylyZXR1cm4gYj1bITFdLGJbMV09bCxiWzJdPW0sYjtuPSEwfWw9TWF0aC5zcXJ0KDEtTWF0aC5taW4oMSxtKm0vKGsqaykpKSpoOzA+YiE9PW4mJihsPS1sKTtiPU1hdGguYWJzKGItbCk+KGRbZl0ud2lkdGgrZFtmKzFdLndpZHRoKS8yP1shMV06WyEwXTtiWzFdPWw7YlsyXT1tO3JldHVybiBifWZ1bmN0aW9uIFRuKCl7dGhpcy5qcD0tSW5maW5pdHk7dGhpcy4kcD10aGlzLnFuPW51bGx9DQpUbi5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uKGEpe2lmKG51bGwhPT10aGlzLnFuJiZudWxsIT09dGhpcy4kcClmb3IodmFyIGI9MDtiPHRoaXMucW4ubGVuZ3RoO2IrKyl7dmFyIGM9YS53YShiKTtjLng9dGhpcy5xbltiXTtjLnk9dGhpcy4kcFtiXX19O2hsLnByb3RvdHlwZS5jb21taXRMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmNvbW1pdE5vZGVzKCk7dGhpcy5xdCYmdGhpcy5jb21taXRMaW5rcygpfTtobC5wcm90b3R5cGUuY29tbWl0Tm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5CSCxiPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rLGM7Yi5uZXh0KCk7KWM9Yi52YWx1ZSxjLngrPWEueCxjLnkrPWEueSxjLmNvbW1pdCgpfTtobC5wcm90b3R5cGUuY29tbWl0TGlua3M9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5uZXR3b3JrLmVkZ2VzLms7YS5uZXh0KCk7KWEudmFsdWUuY29tbWl0KCl9Ow0KZnVuY3Rpb24gWW4oYSxiLGMsZCxmKXt2YXIgZz1hLnRIO2lmKDAuMDAxPk1hdGguYWJzKGEuTm4tMSkpcmV0dXJuIHZvaWQgMCE9PWQmJnZvaWQgMCE9PWY/ZipiOjIqTWF0aC5QSSpiO2E9Yj5jP01hdGguc3FydChiKmItYypjKS9iOk1hdGguc3FydChjKmMtYipiKS9jO3ZhciBoPTAsaztrPXZvaWQgMCE9PWQmJnZvaWQgMCE9PWY/Zi8oZysxKTpNYXRoLlBJLygyKihnKzEpKTtmb3IodmFyIGw9MDtsPD1nO2wrKyl2YXIgbT1NYXRoLnNpbih2b2lkIDAhPT1kJiZ2b2lkIDAhPT1mP2QrbCpmL2c6bCpNYXRoLlBJLygyKmcpKSxoPWgrTWF0aC5zcXJ0KDEtYSphKm0qbSkqaztyZXR1cm4gdm9pZCAwIT09ZCYmdm9pZCAwIT09Zj8oYj5jP2I6YykqaDo0KihiPmM/YjpjKSpofWZ1bmN0aW9uIFhuKGEsYixjLGQsZil7YT12b2lkIDAhPT1kJiZ2b2lkIDAhPT1mP1luKGEsMSxjLGQsZik6WW4oYSwxLGMpO3JldHVybiBiL2F9DQpmdW5jdGlvbiBabihhLGIsYyxkLGYpe2lmKDAuMDAxPk1hdGguYWJzKGEuTm4tMSkpcmV0dXJuIGYvYjt2YXIgZz1iPmM/TWF0aC5zcXJ0KGIqYi1jKmMpL2I6TWF0aC5zcXJ0KGMqYy1iKmIpL2MsaD0wO2E9MipNYXRoLlBJLyg3MDAqYS5uZXR3b3JrLnZlcnRleGVzLmNvdW50KTtiPmMmJihkKz1NYXRoLlBJLzIpO2Zvcih2YXIgaz0wOztrKyspe3ZhciBsPU1hdGguc2luKGQrayphKSxoPWgrKGI+Yz9iOmMpKk1hdGguc3FydCgxLWcqZypsKmwpKmE7aWYoaD49ZilyZXR1cm4gayphfXJldHVybiAwfQ0KaGwucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24oYSl7c3dpdGNoKHRoaXMuc29ydGluZyl7Y2FzZSBrbDpicmVhaztjYXNlIGxsOmEucmV2ZXJzZSgpO2JyZWFrO2Nhc2UgaWw6YS5zb3J0KHRoaXMuY29tcGFyZXIpO2JyZWFrO2Nhc2Ugamw6YS5zb3J0KHRoaXMuY29tcGFyZXIpO2EucmV2ZXJzZSgpO2JyZWFrO2Nhc2UgbWw6Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyliLnB1c2goMCk7Zm9yKHZhciBkPW5ldyBCKFZuKSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBmPS0xLGc9LTE7aWYoMD09PWMpZm9yKHZhciBoPTA7aDxhLmxlbmd0aDtoKyspe3ZhciBrPWEud2EoaCkuRUk7az5mJiYoZj1rLGc9aCl9ZWxzZSBmb3IoaD0wO2g8YS5sZW5ndGg7aCsrKWs9YltoXSxrPmYmJihmPWssZz1oKTtkLmFkZChhLndhKGcpKTtiW2ddPS0xO2c9YS53YShnKTtmPWcucmM7Zm9yKGc9Zy5nYztmLm5leHQoKTspaD1mLnZhbHVlLGg9aC5mcm9tVmVydGV4LGg9YS5pbmRleE9mKGgpLDA+DQpofHwwPD1iW2hdJiZiW2hdKys7Zm9yKDtnLm5leHQoKTspaD1nLnZhbHVlLGg9aC50b1ZlcnRleCxoPWEuaW5kZXhPZihoKSwwPmh8fDA8PWJbaF0mJmJbaF0rK31hPVtdO2ZvcihiPTA7YjxkLmxlbmd0aDtiKyspe2s9ZC53YShiKTthW2JdPVtdO2Zvcih2YXIgYz1rLmdjLGY9ay5yYyxsLG07Yy5uZXh0KCk7KWw9Yy52YWx1ZSxtPWQuaW5kZXhPZihsLnRvVmVydGV4KSxtIT09YiYmMD5hW2JdLmluZGV4T2YobSkmJmFbYl0ucHVzaChtKTtmb3IoO2YubmV4dCgpOylsPWYudmFsdWUsbT1kLmluZGV4T2YobC5mcm9tVmVydGV4KSxtIT09YiYmMD5hW2JdLmluZGV4T2YobSkmJmFbYl0ucHVzaChtKX1rPVtdO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspa1tiXT0wO2Zvcih2YXIgYz1bXSxuPVtdLHA9W10sZj1bXSxnPW5ldyBCKFZuKSxoPWI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIHE9YVtiXS5sZW5ndGg7aWYoMT09PXEpZi5wdXNoKGIpO2Vsc2UgaWYoMD09PXEpZy5hZGQoZC53YShiKSk7DQplbHNle2lmKDA9PT1oKWMucHVzaChiKTtlbHNle2Zvcih2YXIgcj1JbmZpbml0eSxzPUluZmluaXR5LHU9LTEsdj1bXSxxPTA7cTxjLmxlbmd0aDtxKyspMD5hW2NbcV1dLmluZGV4T2YoY1txPT09Yy5sZW5ndGgtMT8wOnErMV0pJiZ2LnB1c2gocT09PWMubGVuZ3RoLTE/MDpxKzEpO2lmKDA9PT12Lmxlbmd0aClmb3IocT0wO3E8Yy5sZW5ndGg7cSsrKXYucHVzaChxKTtmb3IocT0wO3E8di5sZW5ndGg7cSsrKXt2YXIgRD12W3FdLEE7bT1hW2JdO2w9bjtBPXA7Zm9yKHZhciBHPWssTD1ELE49YyxPPTAsVT0wO1U8bC5sZW5ndGg7VSsrKXt2YXIgWT1HW2xbVV1dLGJhPUdbQVtVXV0sUj0wLHhhPTA7WTxiYT8oUj1ZLHhhPWJhKTooUj1iYSx4YT1ZKTtpZihSPEwmJkw8PXhhKWZvcihZPTA7WTxtLmxlbmd0aDtZKyspYmE9bVtZXSwwPk4uaW5kZXhPZihiYSl8fFI8R1tiYV0mJkdbYmFdPHhhfHxSPT09R1tiYV18fHhhPT09R1tiYV18fE8rKztlbHNlIGZvcihZPTA7WTxtLmxlbmd0aDtZKyspYmE9DQptW1ldLDA+Ti5pbmRleE9mKGJhKXx8UjxHW2JhXSYmR1tiYV08eGEmJlIhPT1HW2JhXSYmeGEhPT1HW2JhXSYmTysrfUE9Tztmb3IobD1HPTA7bDxhW2JdLmxlbmd0aDtsKyspbT1jLmluZGV4T2YoYVtiXVtsXSksMDw9bSYmKG09TWF0aC5hYnMoRC0obT49RD9tKzE6bSkpLEcrPW08Yy5sZW5ndGgrMS1tP206Yy5sZW5ndGgrMS1tKTtmb3IobD0wO2w8bi5sZW5ndGg7bCsrKW09a1tuW2xdXSxMPWtbcFtsXV0sbT49RCYmbSsrLEw+PUQmJkwrKyxtPkwmJihOPUwsTD1tLG09TiksTC1tPChjLmxlbmd0aCsyKS8yPT09KG08RCYmRDw9TCkmJkcrKztpZihBPHJ8fEE9PT1yJiZHPHMpcj1BLHM9Ryx1PUR9Yy5zcGxpY2UodSwwLGIpO2ZvcihxPTA7cTxjLmxlbmd0aDtxKyspa1tjW3FdXT1xO2ZvcihxPTA7cTxhW2JdLmxlbmd0aDtxKyspcj1hW2JdW3FdLDA8PWMuaW5kZXhPZihyKSYmKG4ucHVzaChiKSxwLnB1c2gocikpfWgrK319bj0hMTtmb3IocD1jLmxlbmd0aDs7KXtuPSEwO2ZvcihrPQ0KMDtrPGYubGVuZ3RoO2srKylpZihiPWZba10scT1hW2JdWzBdLG09Yy5pbmRleE9mKHEpLDA8PW0pe2ZvcihoPXM9MDtoPGFbcV0ubGVuZ3RoO2grKylyPWFbcV1baF0scj1jLmluZGV4T2YociksMD5yfHxyPT09bXx8KHU9cj5tP3ItbTptLXIscys9cjxtIT09dT5wLXU/MTotMSk7Yy5zcGxpY2UoMD5zP206bSsxLDAsYik7Zi5zcGxpY2UoaywxKTtrLS19ZWxzZSBuPSExO2lmKG4pYnJlYWs7ZWxzZSBjLnB1c2goZlswXSksZi5zcGxpY2UoMCwxKX1mb3IoYj0wO2I8Yy5sZW5ndGg7YisrKW09Y1tiXSxnLmFkZChkLndhKG0pKTtyZXR1cm4gZztkZWZhdWx0OnQubSgiSW52YWxpZCBzb3J0aW5nIHR5cGUuIil9cmV0dXJuIGF9O3QuZyhobCwicmFkaXVzIixobC5wcm90b3R5cGUuTEYpOw0KdC5kZWZpbmVQcm9wZXJ0eShobCx7TEY6InJhZGl1cyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUnJ9LGZ1bmN0aW9uKGEpe3RoaXMuUnIhPT1hJiYodC5pKGEsIm51bWJlciIsaGwsInJhZGl1cyIpLDA8YXx8aXNOYU4oYSkpJiYodGhpcy5Scj1hLHRoaXMuSigpKX0pO3QuZyhobCwiYXNwZWN0UmF0aW8iLGhsLnByb3RvdHlwZS5QRCk7dC5kZWZpbmVQcm9wZXJ0eShobCx7UEQ6ImFzcGVjdFJhdGlvIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcX0sZnVuY3Rpb24oYSl7dGhpcy5wcSE9PWEmJih0LmkoYSwibnVtYmVyIixobCwiYXNwZWN0UmF0aW8iKSwwPGEmJih0aGlzLnBxPWEsdGhpcy5KKCkpKX0pO3QuZyhobCwic3RhcnRBbmdsZSIsaGwucHJvdG90eXBlLm5oKTsNCnQuZGVmaW5lUHJvcGVydHkoaGwse25oOiJzdGFydEFuZ2xlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zc30sZnVuY3Rpb24oYSl7dGhpcy5zcyE9PWEmJih0LmkoYSwibnVtYmVyIixobCwic3RhcnRBbmdsZSIpLHRoaXMuc3M9YSx0aGlzLkooKSl9KTt0LmcoaGwsInN3ZWVwQW5nbGUiLGhsLnByb3RvdHlwZS5oaSk7dC5kZWZpbmVQcm9wZXJ0eShobCx7aGk6InN3ZWVwQW5nbGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVzfSxmdW5jdGlvbihhKXt0aGlzLnVzIT09YSYmKHQuaShhLCJudW1iZXIiLGhsLCJzd2VlcEFuZ2xlIiksdGhpcy51cz0wPGEmJjM2MD49YT9hOjM2MCx0aGlzLkooKSl9KTt0LmcoaGwsImFycmFuZ2VtZW50IixobC5wcm90b3R5cGUuUWUpOw0KdC5kZWZpbmVQcm9wZXJ0eShobCx7UWU6ImFycmFuZ2VtZW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jZH0sZnVuY3Rpb24oYSl7dGhpcy5jZCE9PWEmJih0LkFhKGEsaGwsaGwsImFycmFuZ2VtZW50IiksYT09PUFsfHxhPT09emx8fGE9PT1zbHx8YT09PXJsKSYmKHRoaXMuY2Q9YSx0aGlzLkooKSl9KTt0LmcoaGwsImRpcmVjdGlvbiIsaGwucHJvdG90eXBlLmRpcmVjdGlvbik7dC5kZWZpbmVQcm9wZXJ0eShobCx7ZGlyZWN0aW9uOiJkaXJlY3Rpb24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnNhfSxmdW5jdGlvbihhKXt0aGlzLnNhIT09YSYmKHQuQWEoYSxobCxobCwiZGlyZWN0aW9uIiksYT09PXBsfHxhPT09cWx8fGE9PT1ubHx8YT09PW9sKSYmKHRoaXMuc2E9YSx0aGlzLkooKSl9KTt0LmcoaGwsInNvcnRpbmciLGhsLnByb3RvdHlwZS5zb3J0aW5nKTsNCnQuZGVmaW5lUHJvcGVydHkoaGwse3NvcnRpbmc6InNvcnRpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk5ofSxmdW5jdGlvbihhKXt0aGlzLk5oIT09YSYmKHQuQWEoYSxobCxobCwic29ydGluZyIpLGE9PT1rbHx8YT09PWxsfHxhPT09aWx8fGpsfHxhPT09bWwpJiYodGhpcy5OaD1hLHRoaXMuSigpKX0pO3QuZyhobCwiY29tcGFyZXIiLGhsLnByb3RvdHlwZS5jb21wYXJlcik7dC5kZWZpbmVQcm9wZXJ0eShobCx7Y29tcGFyZXI6ImNvbXBhcmVyIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aH0sZnVuY3Rpb24oYSl7dGhpcy51aCE9PWEmJih0LmkoYSwiZnVuY3Rpb24iLGhsLCJjb21wYXJlciIpLHRoaXMudWg9YSx0aGlzLkooKSl9KTt0LmcoaGwsInNwYWNpbmciLGhsLnByb3RvdHlwZS5zcGFjaW5nKTsNCnQuZGVmaW5lUHJvcGVydHkoaGwse3NwYWNpbmc6InNwYWNpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLk9ofSxmdW5jdGlvbihhKXt0aGlzLk9oIT09YSYmKHQuaShhLCJudW1iZXIiLGhsLCJzcGFjaW5nIiksdGhpcy5PaD1hLHRoaXMuSigpKX0pO3QuZyhobCwibm9kZURpYW1ldGVyRm9ybXVsYSIsaGwucHJvdG90eXBlLkF0KTt0LmRlZmluZVByb3BlcnR5KGhsLHtBdDoibm9kZURpYW1ldGVyRm9ybXVsYSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSXJ9LGZ1bmN0aW9uKGEpe3RoaXMuSXIhPT1hJiYodC5BYShhLGhsLGhsLCJub2RlRGlhbWV0ZXJGb3JtdWxhIiksYT09PUNsfHxhPT09QmwpJiYodGhpcy5Jcj1hLHRoaXMuSigpKX0pO3QuQShobCx7Q0g6ImFjdHVhbFhSYWRpdXMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnlkfSk7dC5BKGhsLHtESDoiYWN0dWFsWVJhZGl1cyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGd9KTsNCnQuQShobCx7Z0s6ImFjdHVhbFNwYWNpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkFrfSk7dC5BKGhsLHtCSDoiYWN0dWFsQ2VudGVyIn0sZnVuY3Rpb24oKXtyZXR1cm4gaXNOYU4odGhpcy5EZC54KXx8aXNOYU4odGhpcy5EZC55KT9uZXcgdygwLDApOm5ldyB3KHRoaXMuRGQueCt0aGlzLkNILHRoaXMuRGQueSt0aGlzLkRIKX0pO3ZhciB6bDtobC5Db25zdGFudFNwYWNpbmc9emw9dC53KGhsLCJDb25zdGFudFNwYWNpbmciLDApO3ZhciBzbDtobC5Db25zdGFudERpc3RhbmNlPXNsPXQudyhobCwiQ29uc3RhbnREaXN0YW5jZSIsMSk7dmFyIHJsO2hsLkNvbnN0YW50QW5nbGU9cmw9dC53KGhsLCJDb25zdGFudEFuZ2xlIiwyKTt2YXIgQWw7aGwuUGFja2VkPUFsPXQudyhobCwiUGFja2VkIiwzKTt2YXIgcGw7aGwuQ2xvY2t3aXNlPXBsPXQudyhobCwiQ2xvY2t3aXNlIiw0KTt2YXIgcWw7DQpobC5Db3VudGVyY2xvY2t3aXNlPXFsPXQudyhobCwiQ291bnRlcmNsb2Nrd2lzZSIsNSk7dmFyIG5sO2hsLkJpZGlyZWN0aW9uYWxMZWZ0PW5sPXQudyhobCwiQmlkaXJlY3Rpb25hbExlZnQiLDYpO3ZhciBvbDtobC5CaWRpcmVjdGlvbmFsUmlnaHQ9b2w9dC53KGhsLCJCaWRpcmVjdGlvbmFsUmlnaHQiLDcpO3ZhciBrbDtobC5Gb3J3YXJkcz1rbD10LncoaGwsIkZvcndhcmRzIiw4KTt2YXIgbGw7aGwuUmV2ZXJzZT1sbD10LncoaGwsIlJldmVyc2UiLDkpO3ZhciBpbDtobC5Bc2NlbmRpbmc9aWw9dC53KGhsLCJBc2NlbmRpbmciLDEwKTt2YXIgamw7aGwuRGVzY2VuZGluZz1qbD10LncoaGwsIkRlc2NlbmRpbmciLDExKTt2YXIgbWw7aGwuT3B0aW1pemVkPW1sPXQudyhobCwiT3B0aW1pemVkIiwxMik7dmFyIENsO2hsLlB5dGhhZ29yZWFuPUNsPXQudyhobCwiUHl0aGFnb3JlYW4iLDEzKTt2YXIgQmw7aGwuQ2lyY3VsYXI9Qmw9dC53KGhsLCJDaXJjdWxhciIsMTQpOw0KZnVuY3Rpb24gVW4oKXtyYS5jYWxsKHRoaXMpfXQuZ2EoIkNpcmN1bGFyTmV0d29yayIsVW4pO3QuS2EoVW4scmEpO1VuLnByb3RvdHlwZS5jcmVhdGVWZXJ0ZXg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZufTtVbi5wcm90b3R5cGUuY3JlYXRlRWRnZT1mdW5jdGlvbigpe3JldHVybiBuZXcgam99O2Z1bmN0aW9uIFZuKCl7c2EuY2FsbCh0aGlzKTt0aGlzLmFjdHVhbEFuZ2xlPXRoaXMuZGlhbWV0ZXI9TmFOfXQuZ2EoIkNpcmN1bGFyVmVydGV4IixWbik7dC5LYShWbixzYSk7DQpmdW5jdGlvbiBXbihhLGIpe3ZhciBjPWEubmV0d29yaztpZihudWxsPT09YylyZXR1cm4gTmFOO2M9Yy5qYztpZihudWxsPT09YylyZXR1cm4gTmFOO2lmKGMuUWU9PT1BbClpZihjLkF0PT09QmwpYS5kaWFtZXRlcj1NYXRoLm1heChhLndpZHRoLGEuaGVpZ2h0KTtlbHNle3ZhciBjPU1hdGguYWJzKE1hdGguc2luKGIpKSxkPU1hdGguYWJzKE1hdGguY29zKGIpKTtpZigwPT09YylyZXR1cm4gYS53aWR0aDtpZigwPT09ZClyZXR1cm4gYS5oZWlnaHQ7YS5kaWFtZXRlcj1NYXRoLm1pbihhLmhlaWdodC9jLGEud2lkdGgvZCl9ZWxzZSBhLmRpYW1ldGVyPWMuQXQ9PT1CbD9NYXRoLm1heChhLndpZHRoLGEuaGVpZ2h0KTpNYXRoLnNxcnQoYS53aWR0aCphLndpZHRoK2EuaGVpZ2h0KmEuaGVpZ2h0KTtyZXR1cm4gYS5kaWFtZXRlcn1mdW5jdGlvbiBqbygpe3VhLmNhbGwodGhpcyl9dC5nYSgiQ2lyY3VsYXJFZGdlIixqbyk7dC5LYShqbyx1YSk7DQpmdW5jdGlvbiBsbygpezA8YXJndW1lbnRzLmxlbmd0aCYmdC5hZChsbyk7YmUuY2FsbCh0aGlzKTt0aGlzLnNnPW51bGw7dGhpcy5pcj0wO3RoaXMuYmc9KG5ldyBnYSgxMDAsMTAwKSkuZnJlZXplKCk7dGhpcy5vcT0hMTt0aGlzLk1oPSEwO3RoaXMudGg9ITE7dGhpcy5vbz0xMDA7dGhpcy5McT0xO3RoaXMuR2g9MUUzO3RoaXMuSW49MC4wNTt0aGlzLkhuPTUwO3RoaXMuRW49MTUwO3RoaXMuR249MDt0aGlzLkZxPTEwO3RoaXMuRXE9NX10LmdhKCJGb3JjZURpcmVjdGVkTGF5b3V0Iixsbyk7dC5LYShsbyxiZSk7DQpsby5wcm90b3R5cGUuY2xvbmVQcm90ZWN0ZWQ9ZnVuY3Rpb24oYSl7YmUucHJvdG90eXBlLmNsb25lUHJvdGVjdGVkLmNhbGwodGhpcyxhKTthLmJnLmFzc2lnbih0aGlzLmJnKTthLm9xPXRoaXMub3E7YS5NaD10aGlzLk1oO2EudGg9dGhpcy50aDthLm9vPXRoaXMub287YS5McT10aGlzLkxxO2EuR2g9dGhpcy5HaDthLkluPXRoaXMuSW47YS5Ibj10aGlzLkhuO2EuRW49dGhpcy5FbjthLkduPXRoaXMuR247YS5GcT10aGlzLkZxO2EuRXE9dGhpcy5FcX07bG8ucHJvdG90eXBlLmNyZWF0ZU5ldHdvcms9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgbW87TG4oYSx0aGlzKTtyZXR1cm4gYX07DQpsby5wcm90b3R5cGUuZG9MYXlvdXQ9ZnVuY3Rpb24oYSl7YXx8dC5tKCJMYXlvdXQuZG9MYXlvdXQoY29sbGVjdGlvbikgYXJndW1lbnQgbXVzdCBub3QgYmUgbnVsbCBidXQgYSBEaWFncmFtLCBhIEdyb3VwLCBvciBhbiBJdGVyYWJsZSBvZiBQYXJ0cyIpO251bGw9PT10aGlzLm5ldHdvcmsmJih0aGlzLm5ldHdvcms9dGhpcy5tYWtlTmV0d29yayhhKSk7YT10aGlzLmV4O2lmKDA8dGhpcy5uZXR3b3JrLnZlcnRleGVzLmNvdW50KXt0aGlzLm5ldHdvcmsueHcoKTtmb3IodmFyIGI9dGhpcy5uZXR3b3JrLnZlcnRleGVzLms7Yi5uZXh0KCk7KXt2YXIgYz1iLnZhbHVlO2MuY2hhcmdlPXRoaXMuZWxlY3RyaWNhbENoYXJnZShjKTtjLm1hc3M9dGhpcy5ncmF2aXRhdGlvbmFsTWFzcyhjKX1mb3IoYj10aGlzLm5ldHdvcmsuZWRnZXMuaztiLm5leHQoKTspYz1iLnZhbHVlLGMuc3RpZmZuZXNzPXRoaXMuc3ByaW5nU3RpZmZuZXNzKGMpLGMubGVuZ3RoPXRoaXMuc3ByaW5nTGVuZ3RoKGMpOw0KdGhpcy5OeigpO3RoaXMuaXI9MDtpZih0aGlzLm5lZWRzQ2x1c3RlckxheW91dCgpKXtmb3IodmFyIGI9dGhpcy5uZXR3b3JrLGQ9Yi5XSigpLms7ZC5uZXh0KCk7KXt2YXIgZj1kLnZhbHVlO3RoaXMubmV0d29yaz1mO2ZvcihjPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rO2MubmV4dCgpOyl7Zm9yKHZhciBmPWMudmFsdWUsZz0wLGg9Zi52ZXJ0ZXhlcztoLm5leHQoKTspZysrO2YuWGY9ZztmLmZrPTE7Zi5IbT1udWxsO2YubGg9bnVsbH1ubyh0aGlzLDAsYSl9dGhpcy5uZXR3b3JrPWI7ZC5yZXNldCgpO2UmJnQubChiLG1vLGxvLCJhcnJhbmdlQ29ubmVjdGVkR3JhcGhzOnNpbmdsZXRvbnMiKTtmb3IodmFyIGM9dGhpcy5ldyxrPWQuY291bnQsbD0hMCxnPWY9MCxoPXQuQ2IoKSxtPTA7bTxrK2IudmVydGV4ZXMuY291bnQrMjttKyspaFttXT1udWxsO2s9MDtkLnJlc2V0KCk7Zm9yKG09dC5HZigpO2QubmV4dCgpOyl7dmFyIG49ZC52YWx1ZTt0aGlzLnFmKG4sbSk7aWYobClsPSExLA0KZj1tLngrbS53aWR0aC8yLGc9bS55K20uaGVpZ2h0LzIsaFswXT1uZXcgdyhtLngrbS53aWR0aCtjLndpZHRoLG0ueSksaFsxXT1uZXcgdyhtLngsbS55K20uaGVpZ2h0K2MuaGVpZ2h0KSxrPTI7ZWxzZXt2YXIgcD1vbyhoLGssZixnLG0ud2lkdGgsbS5oZWlnaHQsYykscT1oW3BdLHI9bmV3IHcocS54K20ud2lkdGgrYy53aWR0aCxxLnkpLHM9bmV3IHcocS54LHEueSttLmhlaWdodCtjLmhlaWdodCk7cCsxPGsmJmguc3BsaWNlKHArMSwwLG51bGwpO2hbcF09cjtoW3ArMV09cztrKys7cD1xLngtbS54O3E9cS55LW0ueTtmb3Iobj1uLnZlcnRleGVzLms7bi5uZXh0KCk7KXt2YXIgdT1uLnZhbHVlO3UuRGErPXA7dS5QYSs9cX19fXQuaGMobSk7Zm9yKG49Yi52ZXJ0ZXhlcy5rO24ubmV4dCgpOyl1PW4udmFsdWUsbD11LlQsMj5rPyhmPWwueCtsLndpZHRoLzIsZz1sLnkrbC5oZWlnaHQvMixoWzBdPW5ldyB3KGwueCtsLndpZHRoK2Mud2lkdGgsbC55KSxoWzFdPW5ldyB3KGwueCxsLnkrDQpsLmhlaWdodCtjLmhlaWdodCksaz0yKToocD1vbyhoLGssZixnLGwud2lkdGgsbC5oZWlnaHQsYykscT1oW3BdLHI9bmV3IHcocS54K2wud2lkdGgrYy53aWR0aCxxLnkpLHM9bmV3IHcocS54LHEueStsLmhlaWdodCtjLmhlaWdodCkscCsxPGsmJmguc3BsaWNlKHArMSwwLG51bGwpLGhbcF09cixoW3ArMV09cyxrKyssdS5EYT1xLngrdS53aWR0aC8yLHUuUGE9cS55K3UuaGVpZ2h0LzIpO3QueWEoaCk7Zm9yKGQucmVzZXQoKTtkLm5leHQoKTspe2Y9ZC52YWx1ZTtmb3IoZz1mLnZlcnRleGVzLms7Zy5uZXh0KCk7KWM9Zy52YWx1ZSxiLlhrKGMpO2ZvcihmPWYuZWRnZXMuaztmLm5leHQoKTspYz1mLnZhbHVlLGIuSm8oYyl9fXBvKHRoaXMsYSk7dGhpcy51cGRhdGVQYXJ0cygpfXRoaXMub289YTt0aGlzLm5ldHdvcms9bnVsbDt0aGlzLiRlPSEwfTsNCmxvLnByb3RvdHlwZS5uZWVkc0NsdXN0ZXJMYXlvdXQ9ZnVuY3Rpb24oKXtpZigzPnRoaXMubmV0d29yay52ZXJ0ZXhlcy5jb3VudClyZXR1cm4hMTt2YXIgYT0wLGI9MCxjPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rO2MubmV4dCgpO2Zvcih2YXIgZD1jLnZhbHVlLlQ7Yy5uZXh0KCk7KXtpZihjLnZhbHVlLlQuVGYoZCkmJihhKyssMTxhKSlyZXR1cm4hMDtpZigxMDxiKWJyZWFrO2IrK31yZXR1cm4hMX07bG8ucHJvdG90eXBlLnFmPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPSEwLGQ9YS52ZXJ0ZXhlcy5rO2QubmV4dCgpOyl7dmFyIGY9ZC52YWx1ZTtjPyhjPSExLGIuc2V0KGYuVCkpOmIubGooZi5UKX1yZXR1cm4gYn07DQpmdW5jdGlvbiBxbyhhLGIsYyl7ZSYmKHQucShiLGxvLCJjb21wdXRlQ2x1c3RlckxheW91dEl0ZXJhdGlvbnM6bGV2ZWwiKSx0LnEoYyxsbywiY29tcHV0ZUNsdXN0ZXJMYXlvdXRJdGVyYXRpb25zOm1heGl0ZXIiKSk7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGEubmV0d29yay52ZXJ0ZXhlcy5jb3VudCxjKihiKzEpLzExKSwxMCl9DQpmdW5jdGlvbiBubyhhLGIsYyl7ZSYmKHQucShiLGxvLCJsYXlvdXRDbHVzdGVyczpsZXZlbCIpLHQucShjLGxvLCJsYXlvdXRDbHVzdGVyczptYXhpdGVyIikpO2lmKHJvKGEsYikpe3ZhciBkPWEuR2g7YS5HaCo9MSsxLyhiKzEpO3ZhciBmPXNvKGEsYiksZz1NYXRoLm1heCgwLHFvKGEsYixjKSk7YS5leCs9ZztubyhhLGIrMSxjKTtwbyhhLGcpO3RvKGEsZixiKTtjPWEuc2c7bnVsbD09PWM/Yz1uZXcgQih1byk6Yy5jbGVhcigpO2MuT2UoZi52ZXJ0ZXhlcyk7Yy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PT1hfHxudWxsPT09Ynx8YT09PWI/MDpiLlhmLWEuWGZ9KTtmb3IoZj1jLms7Zi5uZXh0KCk7KXZvKGEsZi52YWx1ZSxiKTthLkdoPWR9fQ0KZnVuY3Rpb24gcm8oYSxiKXtlJiZ0LnEoYixsbywiaGFzQ2x1c3RlcnM6bGV2ZWwiKTtpZigxMDxifHwzPmEubmV0d29yay52ZXJ0ZXhlcy5jb3VudClyZXR1cm4hMTtudWxsPT09YS5zZz9hLnNnPW5ldyBCKHVvKTphLnNnLmNsZWFyKCk7YS5zZy5PZShhLm5ldHdvcmsudmVydGV4ZXMpO3ZhciBjPWEuc2c7Yy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PT1hfHxudWxsPT09Ynx8YT09PWI/MDpiLlhmLWEuWGZ9KTtmb3IodmFyIGQ9Yy5jb3VudC0xOzA8PWQmJjE+PWMubltkXS5YZjspZC0tO3JldHVybiAxPGMuY291bnQtZH0NCmZ1bmN0aW9uIHNvKGEsYil7ZSYmdC5xKGIsbG8sInB1c2hTdWJOZXR3b3JrOmxldmVsIik7Zm9yKHZhciBjPWEubmV0d29yayxkPW5ldyBtbyxmPWEuc2cuaztmLm5leHQoKTspe3ZhciBnPWYudmFsdWU7aWYoMTxnLlhmKXtkLlhrKGcpO3ZhciBoPXt4QjpnLlhmLHpCOmcud2lkdGgsd0I6Zy5oZWlnaHQsYUg6Zy5PLngsYkg6Zy5PLnl9O251bGw9PT1nLmxoJiYoZy5saD1uZXcgQik7Zy5saC5hZGQoaCk7Zy5aQT1nLmxoLmNvdW50LTF9ZWxzZSBicmVha31mb3IodmFyIGs9Yy5lZGdlcy5rO2submV4dCgpOyl7dmFyIGw9ay52YWx1ZTtpZihsLmZyb21WZXJ0ZXgubmV0d29yaz09PWQmJmwudG9WZXJ0ZXgubmV0d29yaz09PWQpZC5KbyhsKTtlbHNlIGlmKGwuZnJvbVZlcnRleC5uZXR3b3JrPT09ZCl7dmFyIG09bC5mcm9tVmVydGV4LkhtO251bGw9PT1tJiYobT1uZXcgQih1byksbC5mcm9tVmVydGV4LkhtPW0pO20uYWRkKGwudG9WZXJ0ZXgpO2wuZnJvbVZlcnRleC5YZi0tO2wuZnJvbVZlcnRleC5mays9DQpsLnRvVmVydGV4LmZrfWVsc2UgbC50b1ZlcnRleC5uZXR3b3JrPT09ZCYmKG09bC50b1ZlcnRleC5IbSxudWxsPT09bSYmKG09bmV3IEIodW8pLGwudG9WZXJ0ZXguSG09bSksbS5hZGQobC5mcm9tVmVydGV4KSxsLnRvVmVydGV4LlhmLS0sbC50b1ZlcnRleC5mays9bC5mcm9tVmVydGV4LmZrKX1mb3Ioaz1kLmVkZ2VzLms7ay5uZXh0KCk7KWw9ay52YWx1ZSxsLmxlbmd0aCo9TWF0aC5tYXgoMSxILnNxcnQoKGwuZnJvbVZlcnRleC5maytsLnRvVmVydGV4LmZrKS8oNCpiKzEpKSk7Zm9yKGY9ZC52ZXJ0ZXhlcy5rO2YubmV4dCgpOylpZihnPWYudmFsdWUsbT1nLkhtLG51bGwhPT1tJiYwPG0uY291bnQmJihoPWcubGgubltnLmxoLmNvdW50LTFdLGg9aC54Qi1nLlhmLCEoMD49aCkpKXtmb3IodmFyIG49MCxwPTAscT1tLmNvdW50LWg7cTxtLmNvdW50O3ErKyl7Zm9yKHZhciByPW0ubltxXSxsPW51bGwsaz1yLmVkZ2VzLms7ay5uZXh0KCk7KXt2YXIgcz1rLnZhbHVlO2lmKHMuSkkocik9PT0NCmcpe2w9czticmVha319bnVsbCE9PWwmJihwKz1sLmxlbmd0aCxuKz1yLndpZHRoKnIuaGVpZ2h0KX1tPWcuRGE7az1nLlBhO2w9Zy53aWR0aDtxPWcuaGVpZ2h0O3I9Zy5PO3M9bCpxOzE+cyYmKHM9MSk7bj1ILnNxcnQoKG4rcytwKnAqNC8oaCpoKSkvcyk7aD0obi0xKSpsLzI7bj0obi0xKSpxLzI7Zy5PYj1uZXcgeChtLXIueC1oLGstci55LW4sbCsyKmgscSsyKm4pO2cuZm9jdXM9bmV3IHcoci54K2gsci55K24pfWEubmV0d29yaz1kO3JldHVybiBjfQ0KZnVuY3Rpb24gdG8oYSxiLGMpe2UmJih0LmwoYixtbyxsbywicG9wTmV0d29yazpvbGRuZXQiKSx0LnEoYyxsbywicG9wTmV0d29yazpsZXZlbCIpKTtmb3IoYz1hLm5ldHdvcmsudmVydGV4ZXMuaztjLm5leHQoKTspe3ZhciBkPWMudmFsdWU7ZC5uZXR3b3JrPWI7aWYobnVsbCE9PWQubGgpe3ZhciBmPWQubGgubltkLlpBXTtkLlhmPWYueEI7dmFyIGc9Zi5hSCxoPWYuYkg7ZC5PYj1uZXcgeChkLkRhLWcsZC5QYS1oLGYuekIsZi53Qik7ZC5mb2N1cz1uZXcgdyhnLGgpO2QuWkEtLX19Zm9yKGM9YS5uZXR3b3JrLmVkZ2VzLms7Yy5uZXh0KCk7KWMudmFsdWUubmV0d29yaz1iO2EubmV0d29yaz1ifQ0KZnVuY3Rpb24gdm8oYSxiLGMpe2UmJih0LmwoYix1byxsbywic3Vycm91bmROb2RlOm9sZG5ldCIpLHQucShjLGxvLCJzdXJyb3VuZE5vZGU6bGV2ZWwiKSk7dmFyIGQ9Yi5IbTtpZihudWxsIT09ZCYmMCE9PWQuY291bnQpe2M9Yi5EYTt2YXIgZj1iLlBhLGc9Yi53aWR0aCxoPWIuaGVpZ2h0O251bGwhPT1iLmxoJiYwPGIubGguY291bnQmJihoPWIubGgublswXSxnPWguekIsaD1oLndCKTtmb3IodmFyIGc9SC5zcXJ0KGcqZytoKmgpLzIsaz0hMSxsPWg9MCxtPTAsbj1iLnZlcnRleGVzLms7bi5uZXh0KCk7KXt2YXIgcD1uLnZhbHVlOzE+PXAuWGY/bCsrOihrPSEwLG0rKyxoKz1NYXRoLmF0YW4yKGIuUGEtcC5QYSxiLkRhLXAuRGEpKX1pZigwIT09bClmb3IoMDxtJiYoaC89bSksbT1iPTAsYj1rPzIqTWF0aC5QSS8obCsxKToyKk1hdGguUEkvbCwwPT09bCUyJiYobT1iLzIpLDE8ZC5jb3VudCYmZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PT1hfHxudWxsPT09Ynx8DQphPT09Yj8wOmIud2lkdGgqYi5oZWlnaHQtYS53aWR0aCphLmhlaWdodH0pLGs9MD09PWwlMj8wOjEsbj1kLms7bi5uZXh0KCk7KWlmKHA9bi52YWx1ZSwhKDE8cC5YZnx8YS5pc0ZpeGVkKHApKSl7ZD1udWxsO2ZvcihsPXAuZWRnZXMuaztsLm5leHQoKTspe2Q9bC52YWx1ZTticmVha312YXIgbD1wLndpZHRoLHE9cC5oZWlnaHQsbD1ILnNxcnQobCpsK3EqcSkvMixkPWcrZC5sZW5ndGgrbCxsPWgrKGIqKGsvMj4+MSkrbSkqKDA9PT1rJTI/MTotMSk7cC5EYT1jK2QqTWF0aC5jb3MobCk7cC5QYT1mK2QqTWF0aC5zaW4obCk7aysrfX19DQpmdW5jdGlvbiBvbyhhLGIsYyxkLGYsZyxoKXt2YXIgaz05RTE5LGw9LTEsbT0wO2E6Zm9yKDttPGI7bSsrKXt2YXIgbj1hW21dLHA9bi54LWMscT1uLnktZCxwPXAqcCtxKnE7aWYocDxrKXtmb3IocT1tLTE7MDw9cTtxLS0paWYoYVtxXS55Pm4ueSYmYVtxXS54LW4ueDxmK2gud2lkdGgpY29udGludWUgYTtmb3IocT1tKzE7cTxiO3ErKylpZihhW3FdLng+bi54JiZhW3FdLnktbi55PGcraC5oZWlnaHQpY29udGludWUgYTtsPW07az1wfX1yZXR1cm4gbH1sby5wcm90b3R5cGUuTno9ZnVuY3Rpb24oKXtpZih0aGlzLmNvbW1lbnRzKWZvcih2YXIgYT10aGlzLm5ldHdvcmsudmVydGV4ZXMuazthLm5leHQoKTspdGhpcy5hZGRDb21tZW50cyhhLnZhbHVlKX07DQpsby5wcm90b3R5cGUuYWRkQ29tbWVudHM9ZnVuY3Rpb24oYSl7dmFyIGI9YS5HYztpZihudWxsIT09Yilmb3IoYj1iLkJFKCk7Yi5uZXh0KCk7KXt2YXIgYz1iLnZhbHVlO2lmKCJDb21tZW50Ij09PWMuWmMmJmMuUWEoKSl7dmFyIGQ9dGhpcy5uZXR3b3JrLlFtKGMpO251bGw9PT1kJiYoZD10aGlzLm5ldHdvcmsuS28oYykpO2QuY2hhcmdlPXRoaXMubEU7Zm9yKHZhciBjPW51bGwsZj1kLmdjO2YubmV4dCgpOylpZihmLnZhbHVlLnRvVmVydGV4PT09YSl7Yz1mLnZhbHVlO2JyZWFrfWlmKG51bGw9PT1jKWZvcihmPWQucmM7Zi5uZXh0KCk7KWlmKGYudmFsdWUuZnJvbVZlcnRleD09PWEpe2M9Zi52YWx1ZTticmVha31udWxsPT09YyYmKGM9dGhpcy5uZXR3b3JrLiRtKGEsZCxudWxsKSk7Yy5sZW5ndGg9dGhpcy5tRX19fTsNCmZ1bmN0aW9uIHdvKGEsYil7ZSYmKHQubChhLHVvLGxvLCJnZXROb2RlRGlzdGFuY2U6dmVydGV4QSIpLHQubChiLHVvLGxvLCJnZXROb2RlRGlzdGFuY2U6dmVydGV4QiIpKTt2YXIgYz1hLlQsZD1jLngsZj1jLnksZz1jLndpZHRoLGM9Yy5oZWlnaHQsaD1iLlQsaz1oLngsbD1oLnksbT1oLndpZHRoLGg9aC5oZWlnaHQ7cmV0dXJuIGQrZzxrP2Y+bCtoPyhkPWQrZy1rLGY9Zi1sLWgsSC5zcXJ0KGQqZCtmKmYpKTpmK2M8bD8oZD1kK2ctayxmPWYrYy1sLEguc3FydChkKmQrZipmKSk6ay0oZCtnKTpkPmsrbT9mPmwraD8oZD1kLWstbSxmPWYtbC1oLEguc3FydChkKmQrZipmKSk6ZitjPGw/KGQ9ZC1rLW0sZj1mK2MtbCxILnNxcnQoZCpkK2YqZikpOmQtKGsrbSk6Zj5sK2g/Zi0obCtoKTpmK2M8bD9sLShmK2MpOjAuMX0NCmZ1bmN0aW9uIHBvKGEsYil7ZSYmdC5xKGIsbG8sInBlcmZvcm1JdGVyYXRpb25zOm51bSIpO2Euc2c9bnVsbDtmb3IodmFyIGM9YS5pcitiO2EuaXI8YyYmKGEuaXIrKyx4byhhKSk7KTthLnNnPW51bGx9DQpmdW5jdGlvbiB4byhhKXtudWxsPT09YS5zZyYmKGEuc2c9bmV3IEIodW8pLGEuc2cuT2UoYS5uZXR3b3JrLnZlcnRleGVzKSk7dmFyIGI9YS5zZy5uO2lmKDA+PWIubGVuZ3RoKXJldHVybiExO3ZhciBjPWJbMF07Yy5mb3JjZVg9MDtjLmZvcmNlWT0wO2Zvcih2YXIgZD1jLkRhLGY9ZCxnPWMuUGEsaD1nLGM9MTtjPGIubGVuZ3RoO2MrKyl7dmFyIGs9YltjXTtrLmZvcmNlWD0wO2suZm9yY2VZPTA7dmFyIGw9ay5EYSxrPWsuUGEsZD1NYXRoLm1pbihkLGwpLGY9TWF0aC5tYXgoZixsKSxnPU1hdGgubWluKGcsayksaD1NYXRoLm1heChoLGspfShnPWYtZD5oLWcpP2Iuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBudWxsPT09YXx8bnVsbD09PWJ8fGE9PT1iPzA6YS5EYS1iLkRhfSk6Yi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PT1hfHxudWxsPT09Ynx8YT09PWI/MDphLlBhLWIuUGF9KTtmb3IodmFyIGg9YS5HaCxtPTAsbj0wLHA9MCxjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBrPQ0KYltjXSxsPWsuVCxxPWsuTyxkPWwueCtxLngsbD1sLnkrcS55LG49ay5jaGFyZ2UqYS5lbGVjdHJpY2FsRmllbGRYKGQsbCkscD1rLmNoYXJnZSphLmVsZWN0cmljYWxGaWVsZFkoZCxsKSxuPW4ray5tYXNzKmEuZ3Jhdml0YXRpb25hbEZpZWxkWChkLGwpLHA9cCtrLm1hc3MqYS5ncmF2aXRhdGlvbmFsRmllbGRZKGQsbCk7ay5mb3JjZVgrPW47ay5mb3JjZVkrPXA7Zm9yKHE9YysxO3E8Yi5sZW5ndGg7cSsrKWlmKGY9YltxXSxmIT09ayl7dmFyIG49Zi5ULHI9Zi5PLHA9bi54K3IueCxyPW4ueStyLnk7aWYoZC1wPmh8fHAtZD5oKXtpZihnKWJyZWFrfWVsc2UgaWYobC1yPmh8fHItbD5oKXtpZighZylicmVha31lbHNle3ZhciBzPXdvKGssZik7MT5zPyhkPnA/KG49TWF0aC5hYnMoZi5ULnJpZ2h0LWsuVC54KSxuPSgxK24pKk1hdGgucmFuZG9tKCkpOmQ8cD8obj1NYXRoLmFicyhmLlQueC1rLlQucmlnaHQpLG49LSgxK24pKk1hdGgucmFuZG9tKCkpOihuPU1hdGgubWF4KGYud2lkdGgsDQprLndpZHRoKSxuPSgxK24pKk1hdGgucmFuZG9tKCktbi8yKSxsPnI/KHA9TWF0aC5hYnMoZi5ULmJvdHRvbS1rLlQueSkscD0oMStwKSpNYXRoLnJhbmRvbSgpKTpkPHA/KHA9TWF0aC5hYnMoZi5ULnktay5ULmJvdHRvbSkscD0tKDErcCkqTWF0aC5yYW5kb20oKSk6KHA9TWF0aC5tYXgoZi5oZWlnaHQsay5oZWlnaHQpLHA9KDErcCkqTWF0aC5yYW5kb20oKS1wLzIpKToobT0tKGsuY2hhcmdlKmYuY2hhcmdlKS8ocypzKSxuPShwLWQpL3MqbSxwPShyLWwpL3MqbSk7ay5mb3JjZVgrPW47ay5mb3JjZVkrPXA7Zi5mb3JjZVgtPW47Zi5mb3JjZVktPXB9fX1mb3IoYz1hLm5ldHdvcmsuZWRnZXMuaztjLm5leHQoKTspZz1jLnZhbHVlLGs9Zy5mcm9tVmVydGV4LGY9Zy50b1ZlcnRleCxsPWsuVCxxPWsuTyxkPWwueCtxLngsbD1sLnkrcS55LG49Zi5ULHI9Zi5PLHA9bi54K3IueCxyPW4ueStyLnkscz13byhrLGYpLDE+cz8obj0oZD5wPzE6LTEpKigxKyhmLndpZHRoPmsud2lkdGgpP2Yud2lkdGg6DQprLndpZHRoKSpNYXRoLnJhbmRvbSgpLHA9KGw+cj8xOi0xKSooMSsoZi5oZWlnaHQ+ay5oZWlnaHQpP2YuaGVpZ2h0OmsuaGVpZ2h0KSpNYXRoLnJhbmRvbSgpKToobT1nLnN0aWZmbmVzcyoocy1nLmxlbmd0aCksbj0ocC1kKS9zKm0scD0oci1sKS9zKm0pLGsuZm9yY2VYKz1uLGsuZm9yY2VZKz1wLGYuZm9yY2VYLT1uLGYuZm9yY2VZLT1wO2M9MDtkPU1hdGgubWF4KGEuR2gvMjAsNTApO2ZvcihmPTA7ZjxiLmxlbmd0aDtmKyspaz1iW2ZdLGEuaXNGaXhlZChrKT9hLm1vdmVGaXhlZFZlcnRleChrKTooZz1rLmZvcmNlWCxoPWsuZm9yY2VZLGc8LWQ/Zz0tZDpnPmQmJihnPWQpLGg8LWQ/aD0tZDpoPmQmJihoPWQpLGsuRGErPWcsay5QYSs9aCxjPU1hdGgubWF4KGMsZypnK2gqaCkpO3JldHVybiBjPmEuY0EqYS5jQX1sby5wcm90b3R5cGUubW92ZUZpeGVkVmVydGV4PWZ1bmN0aW9uKCl7fTsNCmxvLnByb3RvdHlwZS5jb21taXRMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmRCKCk7dGhpcy5jb21taXROb2RlcygpO3RoaXMucXQmJnRoaXMuY29tbWl0TGlua3MoKX07bG8ucHJvdG90eXBlLmRCPWZ1bmN0aW9uKCl7aWYodGhpcy54bClmb3IodmFyIGE9dGhpcy5uZXR3b3JrLmVkZ2VzLms7YS5uZXh0KCk7KXt2YXIgYj1hLnZhbHVlLmxpbms7bnVsbCE9PWImJihiLnBiPXhiLGIudGI9eGIpfX07bG8ucHJvdG90eXBlLmNvbW1pdE5vZGVzPWZ1bmN0aW9uKCl7dmFyIGE9MCxiPTA7aWYodGhpcy5ORCl7dmFyIGM9dC5HZigpO3RoaXMucWYodGhpcy5uZXR3b3JrLGMpO2I9dGhpcy5EZDthPWIueC1jLng7Yj1iLnktYy55O3QuaGMoYyl9Zm9yKHZhciBjPXQuR2YoKSxkPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rO2QubmV4dCgpOyl7dmFyIGY9ZC52YWx1ZTtpZigwIT09YXx8MCE9PWIpYy5hc3NpZ24oZi5UKSxjLngrPWEsYy55Kz1iLGYuT2I9YztmLmNvbW1pdCgpfXQuaGMoYyl9Ow0KbG8ucHJvdG90eXBlLmNvbW1pdExpbmtzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMubmV0d29yay5lZGdlcy5rO2EubmV4dCgpOylhLnZhbHVlLmNvbW1pdCgpfTtsby5wcm90b3R5cGUuc3ByaW5nU3RpZmZuZXNzPWZ1bmN0aW9uKGEpe2E9YS5zdGlmZm5lc3M7cmV0dXJuIGlzTmFOKGEpP3RoaXMuSW46YX07bG8ucHJvdG90eXBlLnNwcmluZ0xlbmd0aD1mdW5jdGlvbihhKXthPWEubGVuZ3RoO3JldHVybiBpc05hTihhKT90aGlzLkhuOmF9O2xvLnByb3RvdHlwZS5lbGVjdHJpY2FsQ2hhcmdlPWZ1bmN0aW9uKGEpe2E9YS5jaGFyZ2U7cmV0dXJuIGlzTmFOKGEpP3RoaXMuRW46YX07bG8ucHJvdG90eXBlLmVsZWN0cmljYWxGaWVsZFg9ZnVuY3Rpb24oKXtyZXR1cm4gMH07bG8ucHJvdG90eXBlLmVsZWN0cmljYWxGaWVsZFk9ZnVuY3Rpb24oKXtyZXR1cm4gMH07DQpsby5wcm90b3R5cGUuZ3Jhdml0YXRpb25hbE1hc3M9ZnVuY3Rpb24oYSl7YT1hLm1hc3M7cmV0dXJuIGlzTmFOKGEpP3RoaXMuR246YX07bG8ucHJvdG90eXBlLmdyYXZpdGF0aW9uYWxGaWVsZFg9ZnVuY3Rpb24oKXtyZXR1cm4gMH07bG8ucHJvdG90eXBlLmdyYXZpdGF0aW9uYWxGaWVsZFk9ZnVuY3Rpb24oKXtyZXR1cm4gMH07bG8ucHJvdG90eXBlLmlzRml4ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaXNGaXhlZH07dC5BKGxvLHtpSzoiY3VycmVudEl0ZXJhdGlvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXJ9KTt0LmcobG8sImFycmFuZ2VtZW50U3BhY2luZyIsbG8ucHJvdG90eXBlLmV3KTt0LmRlZmluZVByb3BlcnR5KGxvLHtldzoiYXJyYW5nZW1lbnRTcGFjaW5nIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iZ30sZnVuY3Rpb24oYSl7dC5sKGEsZ2EsbG8sImFycmFuZ2VtZW50U3BhY2luZyIpO3RoaXMuYmcuTShhKXx8KHRoaXMuYmcuYXNzaWduKGEpLHRoaXMuSigpKX0pOw0KdC5nKGxvLCJhcnJhbmdlc1RvT3JpZ2luIixsby5wcm90b3R5cGUuTkQpO3QuZGVmaW5lUHJvcGVydHkobG8se05EOiJhcnJhbmdlc1RvT3JpZ2luIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcX0sZnVuY3Rpb24oYSl7dGhpcy5vcSE9PWEmJih0LmkoYSwiYm9vbGVhbiIsbG8sImFycmFuZ2VzVG9PcmlnaW4iKSx0aGlzLm9xPWEsdGhpcy5KKCkpfSk7dC5nKGxvLCJzZXRzUG9ydFNwb3RzIixsby5wcm90b3R5cGUueGwpO3QuZGVmaW5lUHJvcGVydHkobG8se3hsOiJzZXRzUG9ydFNwb3RzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NaH0sZnVuY3Rpb24oYSl7dGhpcy5NaCE9PWEmJih0LmkoYSwiYm9vbGVhbiIsbG8sInNldHNQb3J0U3BvdHMiKSx0aGlzLk1oPWEsdGhpcy5KKCkpfSk7dC5nKGxvLCJjb21tZW50cyIsbG8ucHJvdG90eXBlLmNvbW1lbnRzKTsNCnQuZGVmaW5lUHJvcGVydHkobG8se2NvbW1lbnRzOiJjb21tZW50cyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGh9LGZ1bmN0aW9uKGEpe3RoaXMudGghPT1hJiYodC5pKGEsImJvb2xlYW4iLGxvLCJjb21tZW50cyIpLHRoaXMudGg9YSx0aGlzLkooKSl9KTt0LmcobG8sIm1heEl0ZXJhdGlvbnMiLGxvLnByb3RvdHlwZS5leCk7dC5kZWZpbmVQcm9wZXJ0eShsbyx7ZXg6Im1heEl0ZXJhdGlvbnMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLm9vfSxmdW5jdGlvbihhKXt0aGlzLm9vIT09YSYmKHQuaShhLCJudW1iZXIiLGxvLCJtYXhJdGVyYXRpb25zIiksMDw9YSYmKHRoaXMub289YSx0aGlzLkooKSkpfSk7dC5nKGxvLCJlcHNpbG9uRGlzdGFuY2UiLGxvLnByb3RvdHlwZS5jQSk7DQp0LmRlZmluZVByb3BlcnR5KGxvLHtjQToiZXBzaWxvbkRpc3RhbmNlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5McX0sZnVuY3Rpb24oYSl7dGhpcy5McSE9PWEmJih0LmkoYSwibnVtYmVyIixsbywiZXBzaWxvbkRpc3RhbmNlIiksMDxhJiYodGhpcy5McT1hLHRoaXMuSigpKSl9KTt0LmcobG8sImluZmluaXR5RGlzdGFuY2UiLGxvLnByb3RvdHlwZS5TSSk7dC5kZWZpbmVQcm9wZXJ0eShsbyx7U0k6ImluZmluaXR5RGlzdGFuY2UifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkdofSxmdW5jdGlvbihhKXt0aGlzLkdoIT09YSYmKHQuaShhLCJudW1iZXIiLGxvLCJpbmZpbml0eURpc3RhbmNlIiksMTxhJiYodGhpcy5HaD1hLHRoaXMuSigpKSl9KTt0LmcobG8sImRlZmF1bHRTcHJpbmdTdGlmZm5lc3MiLGxvLnByb3RvdHlwZS54SSk7DQp0LmRlZmluZVByb3BlcnR5KGxvLHt4SToiZGVmYXVsdFNwcmluZ1N0aWZmbmVzcyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSW59LGZ1bmN0aW9uKGEpe3RoaXMuSW4hPT1hJiYodC5pKGEsIm51bWJlciIsbG8sImRlZmF1bHRTcHJpbmdTdGlmZm5lc3MiKSx0aGlzLkluPWEsdGhpcy5KKCkpfSk7dC5nKGxvLCJkZWZhdWx0U3ByaW5nTGVuZ3RoIixsby5wcm90b3R5cGUud0kpO3QuZGVmaW5lUHJvcGVydHkobG8se3dJOiJkZWZhdWx0U3ByaW5nTGVuZ3RoIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Ibn0sZnVuY3Rpb24oYSl7dGhpcy5IbiE9PWEmJih0LmkoYSwibnVtYmVyIixsbywiZGVmYXVsdFNwcmluZ0xlbmd0aCIpLHRoaXMuSG49YSx0aGlzLkooKSl9KTt0LmcobG8sImRlZmF1bHRFbGVjdHJpY2FsQ2hhcmdlIixsby5wcm90b3R5cGUucUkpOw0KdC5kZWZpbmVQcm9wZXJ0eShsbyx7cUk6ImRlZmF1bHRFbGVjdHJpY2FsQ2hhcmdlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Fbn0sZnVuY3Rpb24oYSl7dGhpcy5FbiE9PWEmJih0LmkoYSwibnVtYmVyIixsbywiZGVmYXVsdEVsZWN0cmljYWxDaGFyZ2UiKSx0aGlzLkVuPWEsdGhpcy5KKCkpfSk7dC5nKGxvLCJkZWZhdWx0R3Jhdml0YXRpb25hbE1hc3MiLGxvLnByb3RvdHlwZS5ySSk7dC5kZWZpbmVQcm9wZXJ0eShsbyx7ckk6ImRlZmF1bHRHcmF2aXRhdGlvbmFsTWFzcyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuR259LGZ1bmN0aW9uKGEpe3RoaXMuR24hPT1hJiYodC5pKGEsIm51bWJlciIsbG8sImRlZmF1bHRHcmF2aXRhdGlvbmFsTWFzcyIpLHRoaXMuR249YSx0aGlzLkooKSl9KTt0LmcobG8sImRlZmF1bHRDb21tZW50U3ByaW5nTGVuZ3RoIixsby5wcm90b3R5cGUubUUpOw0KdC5kZWZpbmVQcm9wZXJ0eShsbyx7bUU6ImRlZmF1bHRDb21tZW50U3ByaW5nTGVuZ3RoIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GcX0sZnVuY3Rpb24oYSl7dGhpcy5GcSE9PWEmJih0LmkoYSwibnVtYmVyIixsbywiZGVmYXVsdENvbW1lbnRTcHJpbmdMZW5ndGgiKSx0aGlzLkZxPWEsdGhpcy5KKCkpfSk7dC5nKGxvLCJkZWZhdWx0Q29tbWVudEVsZWN0cmljYWxDaGFyZ2UiLGxvLnByb3RvdHlwZS5sRSk7dC5kZWZpbmVQcm9wZXJ0eShsbyx7bEU6ImRlZmF1bHRDb21tZW50RWxlY3RyaWNhbENoYXJnZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRXF9LGZ1bmN0aW9uKGEpe3RoaXMuRXEhPT1hJiYodC5pKGEsIm51bWJlciIsbG8sImRlZmF1bHRDb21tZW50RWxlY3RyaWNhbENoYXJnZSIpLHRoaXMuRXE9YSx0aGlzLkooKSl9KTtmdW5jdGlvbiBtbygpe3JhLmNhbGwodGhpcyl9dC5nYSgiRm9yY2VEaXJlY3RlZE5ldHdvcmsiLG1vKTt0LkthKG1vLHJhKTsNCm1vLnByb3RvdHlwZS5jcmVhdGVWZXJ0ZXg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHVvfTttby5wcm90b3R5cGUuY3JlYXRlRWRnZT1mdW5jdGlvbigpe3JldHVybiBuZXcgeW99O2Z1bmN0aW9uIHVvKCl7c2EuY2FsbCh0aGlzKTt0aGlzLmlzRml4ZWQ9ITE7dGhpcy5tYXNzPXRoaXMuY2hhcmdlPU5hTjt0aGlzLmZrPXRoaXMuWGY9dGhpcy5mb3JjZVk9dGhpcy5mb3JjZVg9MDt0aGlzLmxoPXRoaXMuSG09bnVsbDt0aGlzLlpBPTB9dC5nYSgiRm9yY2VEaXJlY3RlZFZlcnRleCIsdW8pO3QuS2EodW8sc2EpO2Z1bmN0aW9uIHlvKCl7dWEuY2FsbCh0aGlzKTt0aGlzLmxlbmd0aD10aGlzLnN0aWZmbmVzcz1OYU59dC5nYSgiRm9yY2VEaXJlY3RlZEVkZ2UiLHlvKTt0LkthKHlvLHVhKTsNCmZ1bmN0aW9uIFooKXswPGFyZ3VtZW50cy5sZW5ndGgmJnQuYWQoWik7YmUuY2FsbCh0aGlzKTt0aGlzLnhkPXRoaXMuYm09MjU7dGhpcy5zYT0wO3RoaXMuRG49em87dGhpcy5tbz1Bbzt0aGlzLlluPUJvO3RoaXMuWmw9NDt0aGlzLnZuPUNvO3RoaXMuSGk9RG87dGhpcy5NaD0hMDt0aGlzLnpqPTQ7dGhpcy5JYj10aGlzLmJ2PXRoaXMubGI9LTE7dGhpcy5LZj10aGlzLnpyPTA7dGhpcy5OYj10aGlzLkpmPXRoaXMuaWc9dGhpcy5XZz10aGlzLk9kPW51bGw7dGhpcy5Gcj0wO3RoaXMua3Y9dGhpcy5nbT1udWxsO3RoaXMubGc9MDt0aGlzLkdyPW51bGw7dGhpcy5aZz1bXTt0aGlzLlpnLmxlbmd0aD0xMDB9dC5nYSgiTGF5ZXJlZERpZ3JhcGhMYXlvdXQiLFopO3QuS2EoWixiZSk7DQpaLnByb3RvdHlwZS5jbG9uZVByb3RlY3RlZD1mdW5jdGlvbihhKXtiZS5wcm90b3R5cGUuY2xvbmVQcm90ZWN0ZWQuY2FsbCh0aGlzLGEpO2EuYm09dGhpcy5ibTthLnhkPXRoaXMueGQ7YS5zYT10aGlzLnNhO2EuRG49dGhpcy5EbjthLm1vPXRoaXMubW87YS5Zbj10aGlzLlluO2EuWmw9dGhpcy5abDthLnZuPXRoaXMudm47YS5IaT10aGlzLkhpO2EuTWg9dGhpcy5NaDthLnpqPXRoaXMuemp9O1oucHJvdG90eXBlLmNyZWF0ZU5ldHdvcms9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgRW87TG4oYSx0aGlzKTtyZXR1cm4gYX07DQpaLnByb3RvdHlwZS5kb0xheW91dD1mdW5jdGlvbihhKXthfHx0Lm0oIkxheW91dC5kb0xheW91dChjb2xsZWN0aW9uKSBhcmd1bWVudCBtdXN0IG5vdCBiZSBudWxsIGJ1dCBhIERpYWdyYW0sIGEgR3JvdXAsIG9yIGFuIEl0ZXJhYmxlIG9mIFBhcnRzIik7bnVsbD09PXRoaXMubmV0d29yayYmKHRoaXMubmV0d29yaz10aGlzLm1ha2VOZXR3b3JrKGEpKTt0aGlzLkRkPXRoaXMuaW5pdGlhbE9yaWdpbih0aGlzLkRkKTt0aGlzLmJ2PS0xO3RoaXMuS2Y9dGhpcy56cj0wO3RoaXMuR3I9dGhpcy5rdj10aGlzLmdtPW51bGw7Zm9yKGE9MDthPHRoaXMuWmcubGVuZ3RoO2ErKyl0aGlzLlpnW2FdPW51bGw7aWYoMDx0aGlzLm5ldHdvcmsudmVydGV4ZXMuY291bnQpe3RoaXMubmV0d29yay54dygpO2ZvcihhPXRoaXMubmV0d29yay5lZGdlcy5rO2EubmV4dCgpOylhLnZhbHVlLnJldj0hMTtzd2l0Y2godGhpcy5Ebil7ZGVmYXVsdDpjYXNlIEZvOnZhciBiPTAsYz10aGlzLm5ldHdvcmsudmVydGV4ZXMuY291bnQtDQoxO2E9W107YS5sZW5ndGg9YysxO2Zvcih2YXIgZD10aGlzLm5ldHdvcmsudmVydGV4ZXMuaztkLm5leHQoKTspZC52YWx1ZS52YWxpZD0hMDtmb3IoO251bGwhPT1Pbyh0aGlzLm5ldHdvcmspOyl7Zm9yKGQ9U28odGhpcy5uZXR3b3JrKTtudWxsIT09ZDspYVtjXT1kLGMtLSxkLnZhbGlkPSExLGQ9U28odGhpcy5uZXR3b3JrKTtmb3IoZD1Ubyh0aGlzLm5ldHdvcmspO251bGwhPT1kOylhW2JdPWQsYisrLGQudmFsaWQ9ITEsZD1Ubyh0aGlzLm5ldHdvcmspO2Zvcih2YXIgZD1udWxsLGY9MCxnPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rO2cubmV4dCgpOyl7dmFyIGg9Zy52YWx1ZTtpZihoLnZhbGlkKXtmb3IodmFyIGs9MCxsPWguZ2M7bC5uZXh0KCk7KWwudmFsdWUudG9WZXJ0ZXgudmFsaWQmJmsrKztmb3IodmFyIGw9MCxtPWgucmM7bS5uZXh0KCk7KW0udmFsdWUuZnJvbVZlcnRleC52YWxpZCYmbCsrO2lmKG51bGw9PT1kfHxmPGstbClkPWgsZj1rLWx9fW51bGwhPT1kJiYoYVtiXT0NCmQsYisrLGQudmFsaWQ9ITEpfWZvcihiPTA7Yjx0aGlzLm5ldHdvcmsudmVydGV4ZXMuY291bnQ7YisrKWFbYl0uaW5kZXg9Yjtmb3IoYT10aGlzLm5ldHdvcmsuZWRnZXMuazthLm5leHQoKTspYj1hLnZhbHVlLGIuZnJvbVZlcnRleC5pbmRleD5iLnRvVmVydGV4LmluZGV4JiYodGhpcy5uZXR3b3JrLm94KGIpLGIucmV2PSEwKTticmVhaztjYXNlIHpvOmZvcihiPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rO2IubmV4dCgpOyliLnZhbHVlLiRvPS0xLGIudmFsdWUuZmluaXNoPS0xO2ZvcihhPXRoaXMubmV0d29yay5lZGdlcy5rO2EubmV4dCgpOylhLnZhbHVlLmZvcmVzdD0hMTt0aGlzLkZyPTA7Zm9yKGIucmVzZXQoKTtiLm5leHQoKTspMD09PWIudmFsdWUucmMuY291bnQmJlVvKHRoaXMsYi52YWx1ZSk7Zm9yKGIucmVzZXQoKTtiLm5leHQoKTspLTE9PT1iLnZhbHVlLiRvJiZVbyh0aGlzLGIudmFsdWUpO2ZvcihhLnJlc2V0KCk7YS5uZXh0KCk7KWI9YS52YWx1ZSxiLmZvcmVzdHx8DQooYz1iLmZyb21WZXJ0ZXgsZD1jLmZpbmlzaCxmPWIudG9WZXJ0ZXgsZz1mLmZpbmlzaCxmLiRvPGMuJG8mJmQ8ZyYmKHRoaXMubmV0d29yay5veChiKSxiLnJldj0hMCkpfWZvcihhPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rO2EubmV4dCgpOyliPWEudmFsdWUsYi5sYXllcj0tMTt0aGlzLmxiPS0xO3RoaXMuYXNzaWduTGF5ZXJzKCk7Zm9yKGEucmVzZXQoKTthLm5leHQoKTspdGhpcy5sYj1NYXRoLm1heCh0aGlzLmxiLGEudmFsdWUubGF5ZXIpO2M9dGhpcy5uZXR3b3JrLmVkZ2VzLms7Zm9yKGI9W107Yy5uZXh0KCk7KWE9Yy52YWx1ZSxhLnZhbGlkPSExLGIucHVzaChhKTtmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKWlmKGE9YltjXSwhYS52YWxpZCYmKG51bGwhPT1hLmZyb21WZXJ0ZXgucmQmJm51bGwhPT1hLnRvVmVydGV4LnJkfHxhLmZyb21WZXJ0ZXgubGF5ZXIhPT1hLnRvVmVydGV4LmxheWVyKSl7Zz1rPWg9bD0wO2Y9YS5mcm9tVmVydGV4O2Q9YS50b1ZlcnRleDtpZihudWxsIT09DQphLmxpbmspe2s9YS5saW5rO2lmKG51bGw9PT1rKWNvbnRpbnVlO3ZhciBuPWYucmQsZz1kLnJkO2lmKG51bGw9PT1ufHxudWxsPT09Zyljb250aW51ZTt2YXIgcD1rLmFhLGg9ay5jYSxxPWsudWQsbD1rLmZlO2EucmV2JiYoaz1wLG09cSxwPWgscT1sLGg9ayxsPW0pO3ZhciByPWYuTyxrPWEudG9WZXJ0ZXguTyxzPWEucmV2P2QuVDpmLlQsbT10LksoKTtpc05hTihzLngpP20uYXNzaWduKHIpOnptKHAscSxLYixtKTtuIT09cCYmIWlzTmFOKHMueCkmJnAuUWEoKSYmKG49Zi5ULGlzTmFOKG4ueCl8fChtLngrPXMueC1uLngsbS55Kz1zLnktbi55KSk7cD1hLnJldj9mLlQ6ZC5UO249dC5LKCk7aXNOYU4ocC54KT9uLmFzc2lnbihrKTp6bShoLGwsS2Isbik7ZyE9PWgmJiFpc05hTihwLngpJiZoLlFhKCkmJihnPWQuVCxpc05hTihnLngpfHwobi54Kz1wLngtZy54LG4ueSs9cC55LWcueSkpOzkwPT09dGhpcy5zYXx8MjcwPT09dGhpcy5zYT8oZz1NYXRoLnJvdW5kKChtLngtci54KS8NCnRoaXMueGQpLGg9bS54LGs9TWF0aC5yb3VuZCgobi54LWsueCkvdGhpcy54ZCksbD1uLngpOihnPU1hdGgucm91bmQoKG0ueS1yLnkpL3RoaXMueGQpLGg9bS55LGs9TWF0aC5yb3VuZCgobi55LWsueSkvdGhpcy54ZCksbD1uLnkpO3QuQihtKTt0LkIobik7YS5wb3J0RnJvbUNvbE9mZnNldD1nO2EucG9ydEZyb21Qb3M9aDthLnBvcnRUb0NvbE9mZnNldD1rO2EucG9ydFRvUG9zPWx9ZWxzZSBhLnBvcnRGcm9tQ29sT2Zmc2V0PTAsYS5wb3J0RnJvbVBvcz0wLGEucG9ydFRvQ29sT2Zmc2V0PTAsYS5wb3J0VG9Qb3M9MDttPWYubGF5ZXI7cj1kLmxheWVyO249YTtwPTA7cz1uLmxpbms7aWYobnVsbCE9PXMpe3ZhciB1PXMudWQsdj1zLmZlO2lmKG51bGwhPT11JiZudWxsIT09dil7dmFyIEQ9cy5hYSxxPXMuY2E7aWYobnVsbCE9PUQmJm51bGwhPT1xKXt2YXIgQT11LnBiLEc9di50Yjt0aGlzLnhsfHwocy5wYi5QYygpfHwoQT1zLnBiKSxzLnRiLlBjKCl8fChHPXMudGIpKTtpZihBLlBjKCl8fA0KQT09PXdiKUE9Vm8odGhpcywhMCk7aWYoRy5QYygpfHxHPT09d2IpRz1Wbyh0aGlzLCExKTt2YXIgTD1zLmljLE49cy5nZXRMaW5rUG9pbnQoRCx1LEEsITAsTCxxLHYsdC5LKCkpLEE9cy5nZXRMaW5rRGlyZWN0aW9uKEQsdSxOLEEsITAsTCxxLHYpO3QuQihOKTtBPT09V28odGhpcyxuLCEwKT9wKz0xOnRoaXMueGwmJm51bGwhPT1EJiYxPT09RC5wb3J0cy5jb3VudCYmbi5yZXYmJihwKz0xKTtOPXMuZ2V0TGlua1BvaW50KHEsdixHLCExLEwsRCx1LHQuSygpKTtzPXMuZ2V0TGlua0RpcmVjdGlvbihxLHYsTixHLCExLEwsRCx1KTt0LkIoTik7cz09PVdvKHRoaXMsbiwhMSk/cCs9Mjp0aGlzLnhsJiZudWxsIT09cSYmMT09PXEucG9ydHMuY291bnQmJm4ucmV2JiYocCs9Mil9fX1uPTE9PT1wfHwzPT09cD8hMDohMTtpZihwPTI9PT1wfHwzPT09cD8hMDohMSlxPXRoaXMubmV0d29yay5jcmVhdGVWZXJ0ZXgoKSxxLnJkPW51bGwscS5DbT0xLHEubGF5ZXI9bSxxLm5lYXI9Zix0aGlzLm5ldHdvcmsuWGsocSksDQpmPXRoaXMubmV0d29yay4kbShmLHEsYS5saW5rKSxmLnZhbGlkPSExLGYucmV2PWEucmV2LGYucG9ydEZyb21Db2xPZmZzZXQ9ZyxmLnBvcnRUb0NvbE9mZnNldD0wLGYucG9ydEZyb21Qb3M9aCxmLnBvcnRUb1Bvcz0wLGY9cTtzPTE7biYmcy0tO2lmKG0tcj5zJiYwPG0pe2EudmFsaWQ9ITE7cT10aGlzLm5ldHdvcmsuY3JlYXRlVmVydGV4KCk7cS5yZD1udWxsO3EuQ209MjtxLmxheWVyPW0tMTt0aGlzLm5ldHdvcmsuWGsocSk7Zj10aGlzLm5ldHdvcmsuJG0oZixxLGEubGluayk7Zi52YWxpZD0hMDtmLnJldj1hLnJldjtmLnBvcnRGcm9tQ29sT2Zmc2V0PXA/MDpnO2YucG9ydFRvQ29sT2Zmc2V0PTA7Zi5wb3J0RnJvbVBvcz1wPzA6aDtmLnBvcnRUb1Bvcz0wO2Y9cTtmb3IobS0tO20tcj5zJiYwPG07KXE9dGhpcy5uZXR3b3JrLmNyZWF0ZVZlcnRleCgpLHEucmQ9bnVsbCxxLkNtPTMscS5sYXllcj1tLTEsdGhpcy5uZXR3b3JrLlhrKHEpLGY9dGhpcy5uZXR3b3JrLiRtKGYscSwNCmEubGluayksZi52YWxpZD0hMCxmLnJldj1hLnJldixmLnBvcnRGcm9tQ29sT2Zmc2V0PTAsZi5wb3J0VG9Db2xPZmZzZXQ9MCxmLnBvcnRGcm9tUG9zPTAsZi5wb3J0VG9Qb3M9MCxmPXEsbS0tO2Y9dGhpcy5uZXR3b3JrLiRtKHEsZCxhLmxpbmspO2YudmFsaWQ9IW47biYmKHEubmVhcj1kKTtmLnJldj1hLnJldjtmLnBvcnRGcm9tQ29sT2Zmc2V0PTA7Zi5wb3J0VG9Db2xPZmZzZXQ9aztmLnBvcnRGcm9tUG9zPTA7Zi5wb3J0VG9Qb3M9bH1lbHNlIGEudmFsaWQ9ITB9Yj10aGlzLk9kPVtdO2ZvcihjPTA7Yzw9dGhpcy5sYjtjKyspYltjXT0wO2ZvcihhPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rO2EubmV4dCgpOylhLnZhbHVlLmluZGV4PS0xO3RoaXMuaW5pdGlhbGl6ZUluZGljZXMoKTt0aGlzLmJ2PS0xO2ZvcihjPXRoaXMuS2Y9dGhpcy56cj0wO2M8PXRoaXMubGI7YysrKWJbY10+Ylt0aGlzLktmXSYmKHRoaXMuYnY9YltjXS0xLHRoaXMuS2Y9YyksYltjXTxiW3RoaXMuenJdJiYNCih0aGlzLnpyPWMpO3RoaXMuR3I9W107Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyl0aGlzLkdyW2NdPVtdO2ZvcihhLnJlc2V0KCk7YS5uZXh0KCk7KWM9YS52YWx1ZSxiPWMubGF5ZXIsdGhpcy5HcltiXVtjLmluZGV4XT1jO3RoaXMuSWI9LTE7Zm9yKGE9MDthPD10aGlzLmxiO2ErKyl7Yj1Ybyh0aGlzLGEpO2M9MDtkPXRoaXMuT2RbYV07Zm9yKGY9MDtmPGQ7ZisrKWc9YltmXSxjKz10aGlzLm5vZGVNaW5Db2x1bW5TcGFjZShnLCEwKSxnLmNvbHVtbj1jLGMrPTEsYys9dGhpcy5ub2RlTWluQ29sdW1uU3BhY2UoZywhMSk7dGhpcy5JYj1NYXRoLm1heCh0aGlzLkliLGMtMSk7WW8odGhpcyxhLGIpfXRoaXMucmVkdWNlQ3Jvc3NpbmdzKCk7dGhpcy5zdHJhaWdodGVuQW5kUGFjaygpO3RoaXMudXBkYXRlUGFydHMoKX10aGlzLm5ldHdvcms9bnVsbDt0aGlzLiRlPSEwfTsNCloucHJvdG90eXBlLmxpbmtNaW5MZW5ndGg9ZnVuY3Rpb24oYSl7dmFyIGI9YS50b1ZlcnRleCxjPTA7Zm9yKGE9YS5mcm9tVmVydGV4LmdjO2EubmV4dCgpOylhLnZhbHVlLnRvVmVydGV4PT09YiYmYysrO3JldHVybiAxPGM/MjoxfTtmdW5jdGlvbiBabyhhKXt2YXIgYj1hLmZyb21WZXJ0ZXgucmQ7YT1hLnRvVmVydGV4LnJkO3JldHVybiBudWxsPT09YiYmbnVsbD09PWE/ODpudWxsPT09Ynx8bnVsbD09PWE/NDoxfVoucHJvdG90eXBlLm5vZGVNaW5MYXllclNwYWNlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PT1hLnJkPzA6OTA9PT10aGlzLnNhfHwyNzA9PT10aGlzLnNhP2I/YS5PLnkrMTA6YS5ULmhlaWdodC1hLk8ueSsxMDpiP2EuTy54KzEwOmEuVC53aWR0aC1hLk8ueCsxMH07DQpaLnByb3RvdHlwZS5ub2RlTWluQ29sdW1uU3BhY2U9ZnVuY3Rpb24oYSxiKXtpZihudWxsPT09YS5yZClyZXR1cm4gMDt2YXIgYz1iP2EuSkE6YS5JQTtpZih2b2lkIDAhPT1jKXJldHVybiBjO2M9dGhpcy5zYTtyZXR1cm4gOTA9PT1jfHwyNzA9PT1jP2I/YS5KQT1hLk8ueC90aGlzLnhkKzF8MDphLklBPShhLlQud2lkdGgtYS5PLngpL3RoaXMueGQrMXwwOmI/YS5KQT1hLk8ueS90aGlzLnhkKzF8MDphLklBPShhLlQuaGVpZ2h0LWEuTy55KS90aGlzLnhkKzF8MH07ZnVuY3Rpb24gJG8oYSl7bnVsbD09PWEuZ20mJihhLmdtPVtdKTtmb3IodmFyIGI9MCxjPWEubmV0d29yay52ZXJ0ZXhlcy5rLGQ7Yy5uZXh0KCk7KWQ9Yy52YWx1ZSxhLmdtW2JdPWQubGF5ZXIsYisrLGEuZ21bYl09ZC5jb2x1bW4sYisrLGEuZ21bYl09ZC5pbmRleCxiKys7cmV0dXJuIGEuZ219DQpmdW5jdGlvbiBhcChhLGIpe2Zvcih2YXIgYz0wLGQ9YS5uZXR3b3JrLnZlcnRleGVzLmssZjtkLm5leHQoKTspZj1kLnZhbHVlLGYubGF5ZXI9YltjXSxjKyssZi5jb2x1bW49YltjXSxjKyssZi5pbmRleD1iW2NdLGMrK30NCmZ1bmN0aW9uIGJwKGEsYixjKXtlJiYodC5xKGIsWiwiY3Jvc3NpbmdNYXRyaXg6dW5maXhlZExheWVyIiksdC5xKGMsWiwiY3Jvc3NpbmdNYXRyaXg6ZGlyZWN0aW9uIikpO3ZhciBkPVhvKGEsYiksZj1hLk9kW2JdO2Eua3Z8fChhLmt2PVtdKTtmb3IodmFyIGc9YS5rdixoLGs9MDtrPGY7aysrKXtoPTA7dmFyIGw9ZFtrXSxtPWwubmVhcixuLHA7aWYobnVsbCE9PW0mJm0ubGF5ZXI9PT1sLmxheWVyKWlmKGw9bS5pbmRleCxsPmspZm9yKHA9aysxO3A8bDtwKyspbj1kW3BdLG4ubmVhcj09PW0mJm4uQ209PT1tLkNtfHxoKys7ZWxzZSBmb3IocD1rLTE7cD5sO3AtLSluPWRbcF0sbi5uZWFyPT09bSYmbi5DbT09PW0uQ218fGgrKzt2YXIgcSxyLHMsdSx2LEQ7aWYoMDw9Yylmb3IobD1kW2tdLmZmLG09MDttPGwuY291bnQ7bSsrKWlmKHE9bC5uW21dLHEudmFsaWQmJnEuZnJvbVZlcnRleC5sYXllciE9PWIpZm9yKG49cS5mcm9tVmVydGV4LmluZGV4LHA9cS5wb3J0VG9Qb3MscT1xLnBvcnRGcm9tUG9zLA0Kcj1tKzE7cjxsLmNvdW50O3IrKylzPWwubltyXSxzLnZhbGlkJiZzLmZyb21WZXJ0ZXgubGF5ZXIhPT1iJiYodT1zLmZyb21WZXJ0ZXguaW5kZXgsdj1zLnBvcnRUb1BvcyxzPXMucG9ydEZyb21Qb3MscDx2JiYobj51fHxuPT09dSYmcT5zKSYmaCsrLHY8cCYmKHU+bnx8dT09PW4mJnM+cSkmJmgrKyk7aWYoMD49Yylmb3IobD1kW2tdLlRlLG09MDttPGwuY291bnQ7bSsrKWlmKHE9bC5uW21dLHEudmFsaWQmJnEudG9WZXJ0ZXgubGF5ZXIhPT1iKWZvcihuPXEudG9WZXJ0ZXguaW5kZXgscD1xLnBvcnRUb1BvcyxxPXEucG9ydEZyb21Qb3Mscj1tKzE7cjxsLmNvdW50O3IrKylzPWwubltyXSxzLnZhbGlkJiZzLnRvVmVydGV4LmxheWVyIT09YiYmKHU9cy50b1ZlcnRleC5pbmRleCx2PXMucG9ydFRvUG9zLHM9cy5wb3J0RnJvbVBvcyxxPHMmJihuPnV8fG49PT11JiZwPnYpJiZoKyssczxxJiYodT5ufHx1PT09biYmdj5wKSYmaCsrKTtnW2sqZitrXT1oO2ZvcihsPWsrMTtsPGY7bCsrKXt2YXIgQT0NCjAsRz0wO2lmKDA8PWMpZm9yKGg9ZFtrXS5mZixEPWRbbF0uZmYsbT0wO208aC5jb3VudDttKyspaWYocT1oLm5bbV0scS52YWxpZCYmcS5mcm9tVmVydGV4LmxheWVyIT09Yilmb3Iobj1xLmZyb21WZXJ0ZXguaW5kZXgscT1xLnBvcnRGcm9tUG9zLHI9MDtyPEQuY291bnQ7cisrKXM9RC5uW3JdLHMudmFsaWQmJnMuZnJvbVZlcnRleC5sYXllciE9PWImJih1PXMuZnJvbVZlcnRleC5pbmRleCxzPXMucG9ydEZyb21Qb3MsKG48dXx8bj09PXUmJnE8cykmJkcrKywodTxufHx1PT09biYmczxxKSYmQSsrKTtpZigwPj1jKWZvcihoPWRba10uVGUsRD1kW2xdLlRlLG09MDttPGguY291bnQ7bSsrKWlmKHE9aC5uW21dLHEudmFsaWQmJnEudG9WZXJ0ZXgubGF5ZXIhPT1iKWZvcihuPXEudG9WZXJ0ZXguaW5kZXgscD1xLnBvcnRUb1BvcyxyPTA7cjxELmNvdW50O3IrKylzPUQubltyXSxzLnZhbGlkJiZzLnRvVmVydGV4LmxheWVyIT09YiYmKHU9cy50b1ZlcnRleC5pbmRleCx2PXMucG9ydFRvUG9zLA0KKG48dXx8bj09PXUmJnA8dikmJkcrKywodTxufHx1PT09biYmdjxwKSYmQSsrKTtnW2sqZitsXT1BO2dbbCpmK2tdPUd9fVlvKGEsYixkKTtyZXR1cm4gZ31aLnByb3RvdHlwZS5jb3VudENyb3NzaW5ncz1mdW5jdGlvbigpe3ZhciBhLGI9MCxjLGQ7Zm9yKGE9MDthPD10aGlzLmxiO2ErKyl7Yz1icCh0aGlzLGEsMSk7ZD10aGlzLk9kW2FdO2Zvcih2YXIgZj0wO2Y8ZDtmKyspZm9yKHZhciBnPWY7ZzxkO2crKyliKz1jW2YqZCtnXX1yZXR1cm4gYn07DQpmdW5jdGlvbiBjcChhKXtmb3IodmFyIGI9MCxjPTA7Yzw9YS5sYjtjKyspe2Zvcih2YXIgZD1hLGY9YyxnPVhvKGQsZiksaD1kLk9kW2ZdLGs9MCxsPXZvaWQgMCxsPTA7bDxoO2wrKyl7dmFyIG09Z1tsXS5UZSxuLHAscTtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBtKWZvcih2YXIgcj0wO3I8bS5jb3VudDtyKyspbj1tLm5bcl0sbi52YWxpZCYmbi50b1ZlcnRleC5sYXllciE9PWYmJihwPW4uZnJvbVZlcnRleC5jb2x1bW4rbi5wb3J0RnJvbUNvbE9mZnNldCxxPW4udG9WZXJ0ZXguY29sdW1uK24ucG9ydFRvQ29sT2Zmc2V0LGsrPShNYXRoLmFicyhwLXEpKzEpKlpvKG4pKX1ZbyhkLGYsZyk7Yis9a31yZXR1cm4gYn0NCloucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3ZhciBhPUluZmluaXR5O3RoaXMuSWI9LTE7Zm9yKHZhciBiPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rLGM7Yi5uZXh0KCk7KWM9Yi52YWx1ZSxhPU1hdGgubWluKGEsYy5jb2x1bW4tdGhpcy5ub2RlTWluQ29sdW1uU3BhY2UoYywhMCkpLHRoaXMuSWI9TWF0aC5tYXgodGhpcy5JYixjLmNvbHVtbit0aGlzLm5vZGVNaW5Db2x1bW5TcGFjZShjLCExKSk7Zm9yKGIucmVzZXQoKTtiLm5leHQoKTspYi52YWx1ZS5jb2x1bW4tPWE7dGhpcy5JYi09YX07DQpmdW5jdGlvbiBkcChhLGIsYyl7ZSYmKHQucShiLFosImJhcnljZW50ZXJzOnVuZml4ZWRMYXllciIpLHQucShjLFosImJhcnljZW50ZXJzOmRpcmVjdGlvbiIpKTt2YXIgZD1YbyhhLGIpLGY9YS5PZFtiXSxnPVtdLGg7Zm9yKGg9MDtoPGY7aCsrKXt2YXIgaz1kW2hdLGw9bnVsbDswPj1jJiYobD1rLmZmKTt2YXIgbT1udWxsOzA8PWMmJihtPWsuVGUpO3ZhciBuPTAscD0wLHE9ay5uZWFyO251bGwhPT1xJiZxLmxheWVyPT09ay5sYXllciYmKG4rPXEuY29sdW1uLTEscCsrKTtpZihudWxsIT09bClmb3IocT0wO3E8bC5jb3VudDtxKyspe3ZhciBrPWwubltxXSxyPWsuZnJvbVZlcnRleDtrLnZhbGlkJiYhay5yZXYmJnIubGF5ZXIhPT1iJiYobis9ci5jb2x1bW4ray5wb3J0RnJvbUNvbE9mZnNldCxwKyspfWlmKG51bGwhPT1tKWZvcihsPTA7bDxtLmNvdW50O2wrKylrPW0ubltsXSxxPWsudG9WZXJ0ZXgsay52YWxpZCYmIWsucmV2JiZxLmxheWVyIT09YiYmKG4rPXEuY29sdW1uK2sucG9ydFRvQ29sT2Zmc2V0LA0KcCsrKTtnW2hdPTA9PT1wPy0xOm4vcH1ZbyhhLGIsZCk7cmV0dXJuIGd9DQpmdW5jdGlvbiBlcChhLGIsYyl7ZSYmKHQucShiLFosIm1lZGlhbnM6dW5maXhlZExheWVyIiksdC5xKGMsWiwibWVkaWFuczpkaXJlY3Rpb24iKSk7Zm9yKHZhciBkPVhvKGEsYiksZj1hLk9kW2JdLGc9W10saD0wO2g8ZjtoKyspe3ZhciBrPWRbaF0sbD1udWxsOzA+PWMmJihsPWsuZmYpO3ZhciBtPW51bGw7MDw9YyYmKG09ay5UZSk7dmFyIG49MCxwPVtdLHE9ay5uZWFyO251bGwhPT1xJiZxLmxheWVyPT09ay5sYXllciYmKHBbbl09cS5jb2x1bW4tMSxuKyspO2lmKG51bGwhPT1sKWZvcihxPTA7cTxsLmNvdW50O3ErKyl7dmFyIGs9bC5uW3FdLHI9ay5mcm9tVmVydGV4O2sudmFsaWQmJiFrLnJldiYmci5sYXllciE9PWImJihwW25dPXIuY29sdW1uK2sucG9ydEZyb21Db2xPZmZzZXQsbisrKX1pZihudWxsIT09bSlmb3IobD0wO2w8bS5jb3VudDtsKyspaz1tLm5bbF0scT1rLnRvVmVydGV4LGsudmFsaWQmJiFrLnJldiYmcS5sYXllciE9PWImJihwW25dPXEuY29sdW1uK2sucG9ydFRvQ29sT2Zmc2V0LA0KbisrKTswPT09bj9nW2hdPS0xOihwLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS1ifSksbT1uPj4xLGdbaF09biYxP3BbbV06cFttLTFdK3BbbV0+PjEpfVlvKGEsYixkKTtyZXR1cm4gZ31mdW5jdGlvbiBmcChhLGIsYyxkLGYsZyl7aWYoYi5jb21wb25lbnQ9PT1kKXtiLmNvbXBvbmVudD1jO3ZhciBoLGs7aWYoZilmb3IodmFyIGw9Yi5nYztsLm5leHQoKTspe3ZhciBtPWwudmFsdWUudG9WZXJ0ZXg7aD1iLmxheWVyLW0ubGF5ZXI7az1hLmxpbmtNaW5MZW5ndGgobC52YWx1ZSk7aD09PWsmJmZwKGEsbSxjLGQsZixnKX1pZihnKWZvcihsPWIucmM7bC5uZXh0KCk7KW09bC52YWx1ZS5mcm9tVmVydGV4LGg9bS5sYXllci1iLmxheWVyLGs9YS5saW5rTWluTGVuZ3RoKGwudmFsdWUpLGg9PT1rJiZmcChhLG0sYyxkLGYsZyl9fQ0KZnVuY3Rpb24gZ3AoYSxiLGMsZCxmLGcpe2lmKGIuY29tcG9uZW50PT09ZCl7Yi5jb21wb25lbnQ9YztpZihmKWZvcih2YXIgaD1iLmdjLGs7aC5uZXh0KCk7KWs9aC52YWx1ZS50b1ZlcnRleCxncChhLGssYyxkLGYsZyk7aWYoZylmb3IoYj1iLnJjO2IubmV4dCgpOyloPWIudmFsdWUuZnJvbVZlcnRleCxncChhLGgsYyxkLGYsZyl9fWZ1bmN0aW9uIE9vKGEpe2ZvcihhPWEudmVydGV4ZXMuazthLm5leHQoKTspe3ZhciBiPWEudmFsdWU7aWYoYi52YWxpZClyZXR1cm4gYn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBTbyhhKXtmb3IoYT1hLnZlcnRleGVzLms7YS5uZXh0KCk7KXt2YXIgYj1hLnZhbHVlO2lmKGIudmFsaWQpe2Zvcih2YXIgYz0hMCxkPWIuZ2M7ZC5uZXh0KCk7KWlmKGQudmFsdWUudG9WZXJ0ZXgudmFsaWQpe2M9ITE7YnJlYWt9aWYoYylyZXR1cm4gYn19cmV0dXJuIG51bGx9DQpmdW5jdGlvbiBUbyhhKXtmb3IoYT1hLnZlcnRleGVzLms7YS5uZXh0KCk7KXt2YXIgYj1hLnZhbHVlO2lmKGIudmFsaWQpe2Zvcih2YXIgYz0hMCxkPWIucmM7ZC5uZXh0KCk7KWlmKGQudmFsdWUuZnJvbVZlcnRleC52YWxpZCl7Yz0hMTticmVha31pZihjKXJldHVybiBifX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBVbyhhLGIpe2IuJG89YS5GcjthLkZyKys7Zm9yKHZhciBjPWIuZ2M7Yy5uZXh0KCk7KXt2YXIgZD1jLnZhbHVlLGY9ZC50b1ZlcnRleDstMT09PWYuJG8mJihkLmZvcmVzdD0hMCxVbyhhLGYpKX1iLmZpbmlzaD1hLkZyO2EuRnIrK30NCloucHJvdG90eXBlLmFzc2lnbkxheWVycz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLm1vKXtjYXNlIGhwOmlwKHRoaXMpO2JyZWFrO2Nhc2UganA6Zm9yKHZhciBhLGI9dGhpcy5uZXR3b3JrLnZlcnRleGVzLms7Yi5uZXh0KCk7KWE9a3AodGhpcyxiLnZhbHVlKSx0aGlzLmxiPU1hdGgubWF4KGEsdGhpcy5sYik7Zm9yKGIucmVzZXQoKTtiLm5leHQoKTspYT1iLnZhbHVlLGEubGF5ZXI9dGhpcy5sYi1hLmxheWVyO2JyZWFrO2RlZmF1bHQ6Y2FzZSBBbzppcCh0aGlzKTtmb3IoYj10aGlzLm5ldHdvcmsudmVydGV4ZXMuaztiLm5leHQoKTspYi52YWx1ZS52YWxpZD0hMTtmb3IoYi5yZXNldCgpO2IubmV4dCgpOykwPT09Yi52YWx1ZS5yYy5jb3VudCYmbHAodGhpcyxiLnZhbHVlKTthPUluZmluaXR5O2ZvcihiLnJlc2V0KCk7Yi5uZXh0KCk7KWE9TWF0aC5taW4oYSxiLnZhbHVlLmxheWVyKTt0aGlzLmxiPS0xO2ZvcihiLnJlc2V0KCk7Yi5uZXh0KCk7KWIudmFsdWUubGF5ZXItPWEsdGhpcy5sYj0NCk1hdGgubWF4KHRoaXMubGIsYi52YWx1ZS5sYXllcil9fTtmdW5jdGlvbiBpcChhKXtmb3IodmFyIGI9YS5uZXR3b3JrLnZlcnRleGVzLms7Yi5uZXh0KCk7KXt2YXIgYz1tcChhLGIudmFsdWUpO2EubGI9TWF0aC5tYXgoYyxhLmxiKX19ZnVuY3Rpb24gbXAoYSxiKXt2YXIgYz0wO2lmKC0xPT09Yi5sYXllcil7Zm9yKHZhciBkPWIuZ2M7ZC5uZXh0KCk7KXZhciBmPWQudmFsdWUsZz1hLmxpbmtNaW5MZW5ndGgoZiksYz1NYXRoLm1heChjLG1wKGEsZi50b1ZlcnRleCkrZyk7Yi5sYXllcj1jfWVsc2UgYz1iLmxheWVyO3JldHVybiBjfWZ1bmN0aW9uIGtwKGEsYil7dmFyIGM9MDtpZigtMT09PWIubGF5ZXIpe2Zvcih2YXIgZCxmLGc9Yi5yYztnLm5leHQoKTspZj1nLnZhbHVlLGQ9YS5saW5rTWluTGVuZ3RoKGYpLGM9TWF0aC5tYXgoYyxrcChhLGYuZnJvbVZlcnRleCkrZCk7Yi5sYXllcj1jfWVsc2UgYz1iLmxheWVyO3JldHVybiBjfQ0KZnVuY3Rpb24gbHAoYSxiKXtpZighYi52YWxpZCl7Yi52YWxpZD0hMDtmb3IodmFyIGM9Yi5nYztjLm5leHQoKTspbHAoYSxjLnZhbHVlLnRvVmVydGV4KTtmb3IoYz1hLm5ldHdvcmsudmVydGV4ZXMuaztjLm5leHQoKTspYy52YWx1ZS5jb21wb25lbnQ9LTE7Zm9yKHZhciBkPWIuZmYubixmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKXt2YXIgaD1kW2ddLGs9YS5saW5rTWluTGVuZ3RoKGgpO2guZnJvbVZlcnRleC5sYXllci1oLnRvVmVydGV4LmxheWVyPmsmJmZwKGEsaC5mcm9tVmVydGV4LDAsLTEsITAsITEpfWZvcihmcChhLGIsMSwtMSwhMCwhMCk7MCE9PWIuY29tcG9uZW50Oyl7Zm9yKHZhciBrPTAsZD1JbmZpbml0eSxsPTAsbT1udWxsLG49YS5uZXR3b3JrLnZlcnRleGVzLms7bi5uZXh0KCk7KXt2YXIgcD1uLnZhbHVlO2lmKDE9PT1wLmNvbXBvbmVudCl7Zm9yKHZhciBxPTAscj0hMSxzPXAuZmYubixmPXMubGVuZ3RoLGc9MDtnPGY7ZysrKXt2YXIgaD1zW2ddLHU9aC5mcm9tVmVydGV4LA0KcT1xKzE7MSE9PXUuY29tcG9uZW50JiYoays9MSx1PXUubGF5ZXItcC5sYXllcixoPWEubGlua01pbkxlbmd0aChoKSxkPU1hdGgubWluKGQsdS1oKSl9aD1wLlRlLm47Zj1oLmxlbmd0aDtmb3IoZz0wO2c8ZjtnKyspcz1oW2ddLnRvVmVydGV4LHEtPTEsMSE9PXMuY29tcG9uZW50P2stPTE6cj0hMDsobnVsbD09PW18fHE8bCkmJiFyJiYobT1wLGw9cSl9fWlmKDA8ayl7Zm9yKGMucmVzZXQoKTtjLm5leHQoKTspZj1jLnZhbHVlLDE9PT1mLmNvbXBvbmVudCYmKGYubGF5ZXIrPWQpO2IuY29tcG9uZW50PTB9ZWxzZSBtLmNvbXBvbmVudD0wfWZvcihjPWEubmV0d29yay52ZXJ0ZXhlcy5rO2MubmV4dCgpOyljLnZhbHVlLmNvbXBvbmVudD0tMTtmb3IoZnAoYSxiLDEsLTEsITAsITEpOzAhPT1iLmNvbXBvbmVudDspe2c9MDtmPUluZmluaXR5O2Q9MDtrPW51bGw7Zm9yKGw9YS5uZXR3b3JrLnZlcnRleGVzLms7bC5uZXh0KCk7KWlmKG09bC52YWx1ZSwxPT09bS5jb21wb25lbnQpe249DQowO3A9ITE7aD1tLmZmLm47cT1oLmxlbmd0aDtmb3Iocj0wO3I8cTtyKyspcz1oW3JdLmZyb21WZXJ0ZXgsbis9MSwxIT09cy5jb21wb25lbnQ/Zys9MTpwPSEwO2g9bS5UZS5uO3E9aC5sZW5ndGg7Zm9yKHI9MDtyPHE7cisrKXM9aFtyXSx1PXMudG9WZXJ0ZXgsbi09MSwxIT09dS5jb21wb25lbnQmJihnLT0xLHU9bS5sYXllci11LmxheWVyLHM9YS5saW5rTWluTGVuZ3RoKHMpLGY9TWF0aC5taW4oZix1LXMpKTsobnVsbD09PWt8fG4+ZCkmJiFwJiYoaz1tLGQ9bil9aWYoMD5nKXtmb3IoYy5yZXNldCgpO2MubmV4dCgpOylnPWMudmFsdWUsMT09PWcuY29tcG9uZW50JiYoZy5sYXllci09Zik7Yi5jb21wb25lbnQ9MH1lbHNlIGsuY29tcG9uZW50PTB9fX0NCmZ1bmN0aW9uIFdvKGEsYixjKXtyZXR1cm4gOTA9PT1hLnNhP2MmJiFiLnJldnx8IWMmJmIucmV2PzI3MDo5MDoxODA9PT1hLnNhP2MmJiFiLnJldnx8IWMmJmIucmV2PzA6MTgwOjI3MD09PWEuc2E/YyYmIWIucmV2fHwhYyYmYi5yZXY/OTA6MjcwOmMmJiFiLnJldnx8IWMmJmIucmV2PzE4MDowfQ0KWi5wcm90b3R5cGUuaW5pdGlhbGl6ZUluZGljZXM9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5Zbil7ZGVmYXVsdDpjYXNlIG5wOmZvcih2YXIgYSxiPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rO2IubmV4dCgpOyl7dmFyIGM9Yi52YWx1ZTthPWMubGF5ZXI7Yy5pbmRleD10aGlzLk9kW2FdO3RoaXMuT2RbYV0rK31icmVhaztjYXNlIEJvOmI9dGhpcy5uZXR3b3JrLnZlcnRleGVzLms7Zm9yKGE9dGhpcy5sYjswPD1hO2EtLSl7Zm9yKDtiLm5leHQoKTspYi52YWx1ZS5sYXllcj09PWEmJi0xPT09Yi52YWx1ZS5pbmRleCYmb3AodGhpcyxiLnZhbHVlKTtiLnJlc2V0KCl9YnJlYWs7Y2FzZSBwcDpmb3IoYj10aGlzLm5ldHdvcmsudmVydGV4ZXMuayxhPTA7YTw9dGhpcy5sYjthKyspe2Zvcig7Yi5uZXh0KCk7KWIudmFsdWUubGF5ZXI9PT1hJiYtMT09PWIudmFsdWUuaW5kZXgmJnFwKHRoaXMsYi52YWx1ZSk7Yi5yZXNldCgpfX19Ow0KZnVuY3Rpb24gb3AoYSxiKXt2YXIgYz1iLmxheWVyO2IuaW5kZXg9YS5PZFtjXTthLk9kW2NdKys7Zm9yKHZhciBjPWIuVGUuSWUoKSxkPSEwLGY7ZDspZm9yKGQ9ITEsZj0wO2Y8Yy5sZW5ndGgtMTtmKyspe3ZhciBnPWNbZl0saD1jW2YrMV07Zy5wb3J0RnJvbUNvbE9mZnNldD5oLnBvcnRGcm9tQ29sT2Zmc2V0JiYoZD0hMCxjW2ZdPWgsY1tmKzFdPWcpfWZvcihmPTA7ZjxjLmxlbmd0aDtmKyspZD1jW2ZdLGQudmFsaWQmJihkPWQudG9WZXJ0ZXgsLTE9PT1kLmluZGV4JiZvcChhLGQpKX0NCmZ1bmN0aW9uIHFwKGEsYil7dmFyIGM9Yi5sYXllcjtiLmluZGV4PWEuT2RbY107YS5PZFtjXSsrO2Zvcih2YXIgYz1iLmZmLkllKCksZD0hMCxmO2Q7KWZvcihkPSExLGY9MDtmPGMubGVuZ3RoLTE7ZisrKXt2YXIgZz1jW2ZdLGg9Y1tmKzFdO2cucG9ydFRvQ29sT2Zmc2V0PmgucG9ydFRvQ29sT2Zmc2V0JiYoZD0hMCxjW2ZdPWgsY1tmKzFdPWcpfWZvcihmPTA7ZjxjLmxlbmd0aDtmKyspZD1jW2ZdLGQudmFsaWQmJihkPWQuZnJvbVZlcnRleCwtMT09PWQuaW5kZXgmJnFwKGEsZCkpfQ0KWi5wcm90b3R5cGUucmVkdWNlQ3Jvc3NpbmdzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jb3VudENyb3NzaW5ncygpLGI9JG8odGhpcyksYyxkLGY7Zm9yKGM9MDtjPHRoaXMuWmw7YysrKXtmb3IoZD0wO2Q8PXRoaXMubGI7ZCsrKXJwKHRoaXMsZCwxKSxzcCh0aGlzLGQsMSk7Zj10aGlzLmNvdW50Q3Jvc3NpbmdzKCk7ZjxhJiYoYT1mLGI9JG8odGhpcykpO2ZvcihkPXRoaXMubGI7MDw9ZDtkLS0pcnAodGhpcyxkLC0xKSxzcCh0aGlzLGQsLTEpO2Y9dGhpcy5jb3VudENyb3NzaW5ncygpO2Y8YSYmKGE9ZixiPSRvKHRoaXMpKX1hcCh0aGlzLGIpO2ZvcihjPTA7Yzx0aGlzLlpsO2MrKyl7Zm9yKGQ9MDtkPD10aGlzLmxiO2QrKylycCh0aGlzLGQsMCksc3AodGhpcyxkLDApO2Y9dGhpcy5jb3VudENyb3NzaW5ncygpO2Y8YSYmKGE9ZixiPSRvKHRoaXMpKTtmb3IoZD10aGlzLmxiOzA8PWQ7ZC0tKXJwKHRoaXMsZCwwKSxzcCh0aGlzLGQsMCk7Zj10aGlzLmNvdW50Q3Jvc3NpbmdzKCk7DQpmPGEmJihhPWYsYj0kbyh0aGlzKSl9YXAodGhpcyxiKTt2YXIgZyxoLGs7c3dpdGNoKHRoaXMudm4pe2Nhc2UgdHA6YnJlYWs7Y2FzZSB1cDpmb3Ioaz1hKzE7KGQ9dGhpcy5jb3VudENyb3NzaW5ncygpKTxrOylmb3Ioaz1kLGM9dGhpcy5sYjswPD1jO2MtLSlmb3IoaD0wO2g8PWM7aCsrKXtmb3IoZz0hMDtnOylmb3IoZz0hMSxkPWM7ZD49aDtkLS0pZz1zcCh0aGlzLGQsLTEpfHxnO2Y9dGhpcy5jb3VudENyb3NzaW5ncygpO2Y+PWE/YXAodGhpcyxiKTooYT1mLGI9JG8odGhpcykpO2ZvcihnPSEwO2c7KWZvcihnPSExLGQ9YztkPj1oO2QtLSlnPXNwKHRoaXMsZCwxKXx8ZztmPXRoaXMuY291bnRDcm9zc2luZ3MoKTtmPj1hP2FwKHRoaXMsYik6KGE9ZixiPSRvKHRoaXMpKTtmb3IoZz0hMDtnOylmb3IoZz0hMSxkPWg7ZDw9YztkKyspZz1zcCh0aGlzLGQsMSl8fGc7Zj49YT9hcCh0aGlzLGIpOihhPWYsYj0kbyh0aGlzKSk7Zm9yKGc9ITA7ZzspZm9yKGc9ITEsZD1oO2Q8PWM7ZCsrKWc9DQpzcCh0aGlzLGQsLTEpfHxnO2Y+PWE/YXAodGhpcyxiKTooYT1mLGI9JG8odGhpcykpO2ZvcihnPSEwO2c7KWZvcihnPSExLGQ9YztkPj1oO2QtLSlnPXNwKHRoaXMsZCwwKXx8ZztmPj1hP2FwKHRoaXMsYik6KGE9ZixiPSRvKHRoaXMpKTtmb3IoZz0hMDtnOylmb3IoZz0hMSxkPWg7ZDw9YztkKyspZz1zcCh0aGlzLGQsMCl8fGc7Zj49YT9hcCh0aGlzLGIpOihhPWYsYj0kbyh0aGlzKSl9YnJlYWs7ZGVmYXVsdDpjYXNlIENvOmZvcihjPXRoaXMubGIsaD0wLGs9YSsxOyhkPXRoaXMuY291bnRDcm9zc2luZ3MoKSk8azspe2s9ZDtmb3IoZz0hMDtnOylmb3IoZz0hMSxkPWM7ZD49aDtkLS0pZz1zcCh0aGlzLGQsLTEpfHxnO2Y9dGhpcy5jb3VudENyb3NzaW5ncygpO2Y+PWE/YXAodGhpcyxiKTooYT1mLGI9JG8odGhpcykpO2ZvcihnPSEwO2c7KWZvcihnPSExLGQ9YztkPj1oO2QtLSlnPXNwKHRoaXMsZCwxKXx8ZztmPXRoaXMuY291bnRDcm9zc2luZ3MoKTtmPj1hP2FwKHRoaXMsYik6DQooYT1mLGI9JG8odGhpcykpO2ZvcihnPSEwO2c7KWZvcihnPSExLGQ9aDtkPD1jO2QrKylnPXNwKHRoaXMsZCwxKXx8ZztmPj1hP2FwKHRoaXMsYik6KGE9ZixiPSRvKHRoaXMpKTtmb3IoZz0hMDtnOylmb3IoZz0hMSxkPWg7ZDw9YztkKyspZz1zcCh0aGlzLGQsLTEpfHxnO2Y+PWE/YXAodGhpcyxiKTooYT1mLGI9JG8odGhpcykpO2ZvcihnPSEwO2c7KWZvcihnPSExLGQ9YztkPj1oO2QtLSlnPXNwKHRoaXMsZCwwKXx8ZztmPj1hP2FwKHRoaXMsYik6KGE9ZixiPSRvKHRoaXMpKTtmb3IoZz0hMDtnOylmb3IoZz0hMSxkPWg7ZDw9YztkKyspZz1zcCh0aGlzLGQsMCl8fGc7Zj49YT9hcCh0aGlzLGIpOihhPWYsYj0kbyh0aGlzKSl9fWFwKHRoaXMsYil9Ow0KZnVuY3Rpb24gcnAoYSxiLGMpe2UmJih0LnEoYixaLCJtZWRpYW5CYXJ5Y2VudGVyQ3Jvc3NpbmdSZWR1Y3Rpb246dW5maXhlZExheWVyIiksdC5xKGMsWiwibWVkaWFuQmFyeWNlbnRlckNyb3NzaW5nUmVkdWN0aW9uOmRpcmVjdGlvbiIpKTt2YXIgZD1YbyhhLGIpLGY9YS5PZFtiXSxnPWVwKGEsYixjKSxoPWRwKGEsYixjKTtmb3IoYz0wO2M8ZjtjKyspLTE9PT1oW2NdJiYoaFtjXT1kW2NdLmNvbHVtbiksLTE9PT1nW2NdJiYoZ1tjXT1kW2NdLmNvbHVtbik7Zm9yKHZhciBrPSEwLGw7azspZm9yKGs9ITEsYz0wO2M8Zi0xO2MrKylpZihnW2MrMV08Z1tjXXx8Z1tjKzFdPT09Z1tjXSYmaFtjKzFdPGhbY10paz0hMCxsPWdbY10sZ1tjXT1nW2MrMV0sZ1tjKzFdPWwsbD1oW2NdLGhbY109aFtjKzFdLGhbYysxXT1sLGw9ZFtjXSxkW2NdPWRbYysxXSxkW2MrMV09bDtmb3IoYz1nPTA7YzxmO2MrKylsPWRbY10sbC5pbmRleD1jLGcrPWEubm9kZU1pbkNvbHVtblNwYWNlKGwsITApLGwuY29sdW1uPQ0KZyxnKz0xLGcrPWEubm9kZU1pbkNvbHVtblNwYWNlKGwsITEpO1lvKGEsYixkKX0NCmZ1bmN0aW9uIHNwKGEsYixjKXt2YXIgZD1YbyhhLGIpLGY9YS5PZFtiXTtjPWJwKGEsYixjKTt2YXIgZyxoO2g9W107Zm9yKGc9MDtnPGY7ZysrKWhbZ109LTE7dmFyIGs7az1bXTtmb3IoZz0wO2c8ZjtnKyspa1tnXT0tMTtmb3IodmFyIGw9ITEsbT0hMDttOylmb3IobT0hMSxnPTA7ZzxmLTE7ZysrKXt2YXIgbj1jW2RbZ10uaW5kZXgqZitkW2crMV0uaW5kZXhdLHA9Y1tkW2crMV0uaW5kZXgqZitkW2ddLmluZGV4XSxxPTAscj0wLHM9ZFtnXS5jb2x1bW4sdT1kW2crMV0uY29sdW1uLHY9YS5ub2RlTWluQ29sdW1uU3BhY2UoZFtnXSwhMCksRD1hLm5vZGVNaW5Db2x1bW5TcGFjZShkW2ddLCExKSxBPWEubm9kZU1pbkNvbHVtblNwYWNlKGRbZysxXSwhMCksRz1hLm5vZGVNaW5Db2x1bW5TcGFjZShkW2crMV0sITEpLHY9cy12K0EsRD11LUQrRyxMPWRbZ10ucmMuaztmb3IoTC5yZXNldCgpO0wubmV4dCgpOylpZihHPUwudmFsdWUsRy52YWxpZCYmRy5mcm9tVmVydGV4LmxheWVyPT09DQpiKXtHPUcuZnJvbVZlcnRleDtmb3IoQT0wO2RbQV0hPT1HOylBKys7QTxnJiYocSs9MiooZy1BKSxyKz0yKihnKzEtQSkpO0E9PT1nKzEmJihxKz0xKTtBPmcrMSYmKHErPTQqKEEtZykscis9NCooQS0oZysxKSkpfUw9ZFtnXS5nYy5rO2ZvcihMLnJlc2V0KCk7TC5uZXh0KCk7KWlmKEc9TC52YWx1ZSxHLnZhbGlkJiZHLnRvVmVydGV4LmxheWVyPT09Yil7Rz1HLnRvVmVydGV4O2ZvcihBPTA7ZFtBXSE9PUc7KUErKztBPT09ZysxJiYocis9MSl9TD1kW2crMV0ucmMuaztmb3IoTC5yZXNldCgpO0wubmV4dCgpOylpZihHPUwudmFsdWUsRy52YWxpZCYmRy5mcm9tVmVydGV4LmxheWVyPT09Yil7Rz1HLmZyb21WZXJ0ZXg7Zm9yKEE9MDtkW0FdIT09RzspQSsrO0E8ZyYmKHErPTIqKGcrMS1BKSxyKz0yKihnLUEpKTtBPT09ZyYmKHIrPTEpO0E+ZysxJiYocSs9NCooQS0oZysxKSkscis9NCooQS1nKSl9TD1kW2crMV0uZ2Muaztmb3IoTC5yZXNldCgpO0wubmV4dCgpOylpZihHPUwudmFsdWUsDQpHLnZhbGlkJiZHLnRvVmVydGV4LmxheWVyPT09Yil7Rz1HLnRvVmVydGV4O2ZvcihBPTA7ZFtBXSE9PUc7KUErKztBPT09ZyYmKHErPTEpfXZhciBBPUc9MCxMPWhbZFtnXS5pbmRleF0sTj1rW2RbZ10uaW5kZXhdLE89aFtkW2crMV0uaW5kZXhdLFU9a1tkW2crMV0uaW5kZXhdOy0xIT09TCYmKEcrPU1hdGguYWJzKEwtcyksQSs9TWF0aC5hYnMoTC1EKSk7LTEhPT1OJiYoRys9TWF0aC5hYnMoTi1zKSxBKz1NYXRoLmFicyhOLUQpKTstMSE9PU8mJihHKz1NYXRoLmFicyhPLXUpLEErPU1hdGguYWJzKE8tdikpOy0xIT09VSYmKEcrPU1hdGguYWJzKFUtdSksQSs9TWF0aC5hYnMoVS12KSk7aWYocjxxLTAuNXx8cj09PXEmJnA8bi0wLjV8fHI9PT1xJiZwPT09biYmQTxHLTAuNSltPWw9ITAsZFtnXS5jb2x1bW49RCxkW2crMV0uY29sdW1uPXYsbj1kW2ddLGRbZ109ZFtnKzFdLGRbZysxXT1ufWZvcihnPTA7ZzxmO2crKylkW2ddLmluZGV4PWc7WW8oYSxiLGQpO3JldHVybiBsfQ0KWi5wcm90b3R5cGUuc3RyYWlnaHRlbkFuZFBhY2s9ZnVuY3Rpb24oKXt2YXIgYSxiLGM9MCE9PSh0aGlzLkhpJnZwKTthPXRoaXMuSGk9PT1EbzsxRTM8dGhpcy5uZXR3b3JrLmVkZ2VzLmNvdW50JiYhYSYmKGM9ITEpO2lmKGMpe2I9W107Zm9yKGE9MDthPD10aGlzLmxiO2ErKyliW2FdPTA7Zm9yKHZhciBkPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rLGYsZztkLm5leHQoKTspZj1kLnZhbHVlLGE9Zi5sYXllcixnPWYuY29sdW1uLGY9dGhpcy5ub2RlTWluQ29sdW1uU3BhY2UoZiwhMSksYlthXT1NYXRoLm1heChiW2FdLGcrZik7Zm9yKGQucmVzZXQoKTtkLm5leHQoKTspZj1kLnZhbHVlLGE9Zi5sYXllcixnPWYuY29sdW1uLGYuY29sdW1uPSg4Kih0aGlzLkliLWJbYV0pPj4xKSs4Kmc7dGhpcy5JYio9OH1pZigwIT09KHRoaXMuSGkmd3ApKWZvcihiPSEwO2I7KXtiPSExO2ZvcihhPXRoaXMuS2YrMTthPD10aGlzLmxiO2ErKyliPXhwKHRoaXMsYSwxKXx8Yjtmb3IoYT10aGlzLktmLQ0KMTswPD1hO2EtLSliPXhwKHRoaXMsYSwtMSl8fGI7Yj14cCh0aGlzLHRoaXMuS2YsMCl8fGJ9aWYoMCE9PSh0aGlzLkhpJnlwKSl7Zm9yKGE9dGhpcy5LZisxO2E8PXRoaXMubGI7YSsrKXpwKHRoaXMsYSwxKTtmb3IoYT10aGlzLktmLTE7MDw9YTthLS0penAodGhpcyxhLC0xKTt6cCh0aGlzLHRoaXMuS2YsMCl9YyYmKEFwKHRoaXMsLTEpLEFwKHRoaXMsMSkpO2lmKDAhPT0odGhpcy5IaSZ3cCkpZm9yKGI9ITA7Yjspe2I9ITE7Yj14cCh0aGlzLHRoaXMuS2YsMCl8fGI7Zm9yKGE9dGhpcy5LZisxO2E8PXRoaXMubGI7YSsrKWI9eHAodGhpcyxhLDApfHxiO2ZvcihhPXRoaXMuS2YtMTswPD1hO2EtLSliPXhwKHRoaXMsYSwwKXx8Yn19O2Z1bmN0aW9uIHhwKGEsYixjKXtlJiYodC5xKGIsWiwiYmVuZFN0cmFpZ2h0ZW46dW5maXhlZExheWVyIiksdC5xKGMsWiwiYmVuZFN0cmFpZ2h0ZW46ZGlyZWN0aW9uIikpO2Zvcih2YXIgZD0hMTtCcChhLGIsYyk7KWQ9ITA7cmV0dXJuIGR9DQpmdW5jdGlvbiBCcChhLGIsYyl7ZSYmKHQucShiLFosInNoaWZ0YmVuZFN0cmFpZ2h0ZW46dW5maXhlZExheWVyIiksdC5xKGMsWiwic2hpZnRiZW5kU3RyYWlnaHRlbjpkaXJlY3Rpb24iKSk7dmFyIGQsZj1YbyhhLGIpLGc9YS5PZFtiXSxoPWRwKGEsYiwtMSk7aWYoMDxjKWZvcihkPTA7ZDxnO2QrKyloW2RdPS0xO3ZhciBrPWRwKGEsYiwxKTtpZigwPmMpZm9yKGQ9MDtkPGc7ZCsrKWtbZF09LTE7Zm9yKHZhciBsPSExLG09ITA7bTspZm9yKG09ITEsZD0wO2Q8ZztkKyspe3ZhciBuPWZbZF0uY29sdW1uLHA9YS5ub2RlTWluQ29sdW1uU3BhY2UoZltkXSwhMCkscT1hLm5vZGVNaW5Db2x1bW5TcGFjZShmW2RdLCExKSxwPTA+ZC0xfHxuLWZbZC0xXS5jb2x1bW4tMT5wK2Eubm9kZU1pbkNvbHVtblNwYWNlKGZbZC0xXSwhMSk/bi0xOm4scT1kKzE+PWd8fGZbZCsxXS5jb2x1bW4tbi0xPnErYS5ub2RlTWluQ29sdW1uU3BhY2UoZltkKzFdLCEwKT9uKzE6bixyPTAscz0wLHU9MCx2LEQsDQpBLEc7aWYoMD49Yylmb3IodmFyIEw9ZltkXS5yYy5rO0wubmV4dCgpOyl2PUwudmFsdWUsdi52YWxpZCYmdi5mcm9tVmVydGV4LmxheWVyIT09YiYmKEQ9Wm8odiksQT12LnBvcnRGcm9tQ29sT2Zmc2V0LEc9di5wb3J0VG9Db2xPZmZzZXQsdj12LmZyb21WZXJ0ZXguY29sdW1uLHIrPShNYXRoLmFicyhuK0ctKHYrQSkpKzEpKkQscys9KE1hdGguYWJzKHArRy0oditBKSkrMSkqRCx1Kz0oTWF0aC5hYnMocStHLSh2K0EpKSsxKSpEKTtpZigwPD1jKWZvcihMPWZbZF0uZ2MuaztMLm5leHQoKTspdj1MLnZhbHVlLHYudmFsaWQmJnYudG9WZXJ0ZXgubGF5ZXIhPT1iJiYoRD1abyh2KSxBPXYucG9ydEZyb21Db2xPZmZzZXQsRz12LnBvcnRUb0NvbE9mZnNldCx2PXYudG9WZXJ0ZXguY29sdW1uLHIrPShNYXRoLmFicyhuK0EtKHYrRykpKzEpKkQscys9KE1hdGguYWJzKHArQS0oditHKSkrMSkqRCx1Kz0oTWF0aC5hYnMocStBLSh2K0cpKSsxKSpEKTtHPUE9RD0wO3Y9aFtmW2RdLmluZGV4XTsNCkw9a1tmW2RdLmluZGV4XTstMSE9PXYmJihEKz1NYXRoLmFicyh2LW4pLEErPU1hdGguYWJzKHYtcCksRys9TWF0aC5hYnModi1xKSk7LTEhPT1MJiYoRCs9TWF0aC5hYnMoTC1uKSxBKz1NYXRoLmFicyhMLXApLEcrPU1hdGguYWJzKEwtcSkpO2lmKHM8cnx8cz09PXImJkE8RCltPWw9ITAsZltkXS5jb2x1bW49cDtpZih1PHJ8fHU9PT1yJiZHPEQpbT1sPSEwLGZbZF0uY29sdW1uPXF9WW8oYSxiLGYpO2Eubm9ybWFsaXplKCk7cmV0dXJuIGx9DQpmdW5jdGlvbiB6cChhLGIsYyl7ZSYmKHQucShiLFosIm1lZGlhblN0cmFpZ2h0ZW46dW5maXhlZExheWVyIiksdC5xKGMsWiwibWVkaWFuU3RyYWlnaHRlbjpkaXJlY3Rpb24iKSk7dmFyIGQ9WG8oYSxiKSxmPWEuT2RbYl0sZz1lcChhLGIsYyksaD1bXTtmb3IoYz0wO2M8ZjtjKyspaFtjXT1nW2NdO2ZvcihnPSEwO2c7KWZvcihnPSExLGM9MDtjPGY7YysrKXt2YXIgaz1kW2NdLmNvbHVtbixsPWEubm9kZU1pbkNvbHVtblNwYWNlKGRbY10sITApLG09YS5ub2RlTWluQ29sdW1uU3BhY2UoZFtjXSwhMSksbj0wLHA7LTE9PT1oW2NdPzA9PT1jJiZjPT09Zi0xP249azowPT09Yz8ocD1kW2MrMV0uY29sdW1uLG49cC1rPT09bSthLm5vZGVNaW5Db2x1bW5TcGFjZShkW2MrMV0sITApP2stMTprKTpjPT09Zi0xPyhwPWRbYy0xXS5jb2x1bW4sbj1rLXA9PT1sK2Eubm9kZU1pbkNvbHVtblNwYWNlKGRbYy0xXSwhMSk/aysxOmspOihwPWRbYy0xXS5jb2x1bW4sbD1wK2Eubm9kZU1pbkNvbHVtblNwYWNlKGRbYy0NCjFdLCExKStsKzEscD1kW2MrMV0uY29sdW1uLG09cC1hLm5vZGVNaW5Db2x1bW5TcGFjZShkW2MrMV0sITApLW0tMSxuPShsK20pLzJ8MCk6MD09PWMmJmM9PT1mLTE/bj1oW2NdOjA9PT1jPyhwPWRbYysxXS5jb2x1bW4sbT1wLWEubm9kZU1pbkNvbHVtblNwYWNlKGRbYysxXSwhMCktbS0xLG49TWF0aC5taW4oaFtjXSxtKSk6Yz09PWYtMT8ocD1kW2MtMV0uY29sdW1uLGw9cCthLm5vZGVNaW5Db2x1bW5TcGFjZShkW2MtMV0sITEpK2wrMSxuPU1hdGgubWF4KGhbY10sbCkpOihwPWRbYy0xXS5jb2x1bW4sbD1wK2Eubm9kZU1pbkNvbHVtblNwYWNlKGRbYy0xXSwhMSkrbCsxLHA9ZFtjKzFdLmNvbHVtbixtPXAtYS5ub2RlTWluQ29sdW1uU3BhY2UoZFtjKzFdLCEwKS1tLTEsbDxoW2NdJiZoW2NdPG0/bj1oW2NdOmw+PWhbY10/bj1sOm08PWhbY10mJihuPW0pKTtuIT09ayYmKGc9ITAsZFtjXS5jb2x1bW49bil9WW8oYSxiLGQpO2Eubm9ybWFsaXplKCl9DQpmdW5jdGlvbiBDcChhLGIpe2UmJih0LnEoYixaLCJwYWNrQXV4OmNvbHVtbiIpLHQucSgxLFosInBhY2tBdXg6ZGlyZWN0aW9uIikpO2Zvcih2YXIgYz0hMCxkPWEubmV0d29yay52ZXJ0ZXhlcy5rLGY7ZC5uZXh0KCk7KXtmPWQudmFsdWU7dmFyIGc9YS5ub2RlTWluQ29sdW1uU3BhY2UoZiwhMCksaD1hLm5vZGVNaW5Db2x1bW5TcGFjZShmLCExKTtpZihmLmNvbHVtbi1nPD1iJiZmLmNvbHVtbitoPj1iKXtjPSExO2JyZWFrfX1nPSExO2lmKGMpZm9yKGQucmVzZXQoKTtkLm5leHQoKTspZj1kLnZhbHVlLGYuY29sdW1uPmImJihmLmNvbHVtbi09MSxnPSEwKTtyZXR1cm4gZ30NCmZ1bmN0aW9uIERwKGEsYil7ZSYmKHQucShiLFosInRpZ2h0UGFja0F1eDpjb2x1bW4iKSx0LnEoMSxaLCJ0aWdodFBhY2tBdXg6ZGlyZWN0aW9uIikpO3ZhciBjPWIsYz1iKzEsZCxmPVtdLGc9W107Zm9yKGQ9MDtkPD1hLmxiO2QrKylmW2RdPSExLGdbZF09ITE7Zm9yKHZhciBoPWEubmV0d29yay52ZXJ0ZXhlcy5rO2gubmV4dCgpOyl7ZD1oLnZhbHVlO3ZhciBrPWQuY29sdW1uLWEubm9kZU1pbkNvbHVtblNwYWNlKGQsITApLGw9ZC5jb2x1bW4rYS5ub2RlTWluQ29sdW1uU3BhY2UoZCwhMSk7azw9YiYmbD49YiYmKGZbZC5sYXllcl09ITApO2s8PWMmJmw+PWMmJihnW2QubGF5ZXJdPSEwKX1rPSEwO2M9ITE7Zm9yKGQ9MDtkPD1hLmxiO2QrKylrPWsmJiEoZltkXSYmZ1tkXSk7aWYoaylmb3IoaC5yZXNldCgpO2gubmV4dCgpOylkPWgudmFsdWUsZC5jb2x1bW4+YiYmKGQuY29sdW1uLT0xLGM9ITApO3JldHVybiBjfQ0KZnVuY3Rpb24gQXAoYSxiKXtlJiZ0LnEoYixaLCJjb21wb25lbnRQYWNrOmRpcmVjdGlvbiIpO2Zvcih2YXIgYz0wO2M8PWEuSWI7YysrKWZvcig7Q3AoYSxjKTspO2Eubm9ybWFsaXplKCk7Zm9yKGM9MDtjPGEuSWI7YysrKWZvcig7RHAoYSxjKTspO2Eubm9ybWFsaXplKCk7dmFyIGQsZixnLGg7aWYoMDxiKWZvcihjPTA7Yzw9YS5JYjtjKyspZm9yKGQ9JG8oYSksZj1jcChhKSxnPWYrMTtmPGc7KWc9ZixFcChhLGMsMSksaD1jcChhKSxoPmY/YXAoYSxkKTpoPGYmJihmPWgsZD0kbyhhKSk7aWYoMD5iKWZvcihjPWEuSWI7MDw9YztjLS0pZm9yKGQ9JG8oYSksZj1jcChhKSxnPWYrMTtmPGc7KWc9ZixFcChhLGMsLTEpLGg9Y3AoYSksaD5mP2FwKGEsZCk6aDxmJiYoZj1oLGQ9JG8oYSkpO2Eubm9ybWFsaXplKCl9DQpmdW5jdGlvbiBFcChhLGIsYyl7YS5sZz0wO2Zvcih2YXIgZD1hLm5ldHdvcmsudmVydGV4ZXMuayxmO2QubmV4dCgpOylkLnZhbHVlLmNvbXBvbmVudD0tMTtpZigwPGMpZm9yKGQucmVzZXQoKTtkLm5leHQoKTspZj1kLnZhbHVlLGYuY29sdW1uLWEubm9kZU1pbkNvbHVtblNwYWNlKGYsITApPD1iJiYoZi5jb21wb25lbnQ9YS5sZyk7aWYoMD5jKWZvcihkLnJlc2V0KCk7ZC5uZXh0KCk7KWY9ZC52YWx1ZSxmLmNvbHVtbithLm5vZGVNaW5Db2x1bW5TcGFjZShmLCExKT49YiYmKGYuY29tcG9uZW50PWEubGcpO2EubGcrKztmb3IoZC5yZXNldCgpO2QubmV4dCgpOylmPWQudmFsdWUsLTE9PT1mLmNvbXBvbmVudCYmKGdwKGEsZixhLmxnLC0xLCEwLCEwKSxhLmxnKyspO2I9W107Zm9yKGY9MDtmPGEubGcqYS5sZztmKyspYltmXT0hMTt2YXIgZz1bXTtmb3IoZj0wO2Y8KGEubGIrMSkqKGEuSWIrMSk7ZisrKWdbZl09LTE7Zm9yKGQucmVzZXQoKTtkLm5leHQoKTspe2Y9ZC52YWx1ZTsNCmZvcih2YXIgaD1mLmxheWVyLGs9TWF0aC5tYXgoMCxmLmNvbHVtbi1hLm5vZGVNaW5Db2x1bW5TcGFjZShmLCEwKSksbD1NYXRoLm1pbihhLkliLGYuY29sdW1uK2Eubm9kZU1pbkNvbHVtblNwYWNlKGYsITEpKTtrPD1sO2srKylnW2gqKGEuSWIrMSkra109Zi5jb21wb25lbnR9Zm9yKGY9MDtmPD1hLmxiO2YrKyl7aWYoMDxjKWZvcihrPTA7azxhLkliO2srKyktMSE9PWdbZiooYS5JYisxKStrXSYmLTEhPT1nW2YqKGEuSWIrMSkraysxXSYmZ1tmKihhLkliKzEpK2tdIT09Z1tmKihhLkliKzEpK2srMV0mJihiW2dbZiooYS5JYisxKStrXSphLmxnK2dbZiooYS5JYisxKStrKzFdXT0hMCk7aWYoMD5jKWZvcihrPWEuSWI7MDxrO2stLSktMSE9PWdbZiooYS5JYisxKStrXSYmLTEhPT1nW2YqKGEuSWIrMSkray0xXSYmZ1tmKihhLkliKzEpK2tdIT09Z1tmKihhLkliKzEpK2stMV0mJihiW2dbZiooYS5JYisxKStrXSphLmxnK2dbZiooYS5JYisxKStrLTFdXT0hMCl9Zz1bXTtmb3IoZj0NCjA7ZjxhLmxnO2YrKylnW2ZdPSEwO2g9bmV3IEIoIm51bWJlciIpO2ZvcihoLmFkZCgwKTswIT09aC5jb3VudDspaWYobD1oLm5baC5jb3VudC0xXSxoLnFkKGguY291bnQtMSksZ1tsXSlmb3IoZ1tsXT0hMSxmPTA7ZjxhLmxnO2YrKyliW2wqYS5sZytmXSYmaC5KZCgwLGYpO2lmKDA8Yylmb3IoZC5yZXNldCgpO2QubmV4dCgpOylmPWQudmFsdWUsZ1tmLmNvbXBvbmVudF0mJihmLmNvbHVtbi09MSk7aWYoMD5jKWZvcihkLnJlc2V0KCk7ZC5uZXh0KCk7KWY9ZC52YWx1ZSxnW2YuY29tcG9uZW50XSYmKGYuY29sdW1uKz0xKX1aLnByb3RvdHlwZS5jb21taXRMYXlvdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLnhsKWZvcih2YXIgYT1Wbyh0aGlzLCEwKSxiPVZvKHRoaXMsITEpLGM9dGhpcy5uZXR3b3JrLmVkZ2VzLmssZDtjLm5leHQoKTspZD1jLnZhbHVlLmxpbmssbnVsbCE9PWQmJihkLnBiPWEsZC50Yj1iKTt0aGlzLmNvbW1pdE5vZGVzKCk7dGhpcy5WeigpO3RoaXMucXQmJnRoaXMuY29tbWl0TGlua3MoKX07DQpmdW5jdGlvbiBWbyhhLGIpe3JldHVybiAyNzA9PT1hLnNhP2I/UWI6V2I6OTA9PT1hLnNhP2I/V2I6UWI6MTgwPT09YS5zYT9iP1ViOlZiOmI/VmI6VWJ9DQpaLnByb3RvdHlwZS5jb21taXROb2Rlcz1mdW5jdGlvbigpe3RoaXMuV2c9W107dGhpcy5pZz1bXTt0aGlzLkpmPVtdO3RoaXMuTmI9W107Zm9yKHZhciBhPTA7YTw9dGhpcy5sYjthKyspdGhpcy5XZ1thXT0wLHRoaXMuaWdbYV09MCx0aGlzLkpmW2FdPTAsdGhpcy5OYlthXT0wO2Zvcih2YXIgYT10aGlzLm5ldHdvcmsudmVydGV4ZXMuayxiLGM7YS5uZXh0KCk7KWI9YS52YWx1ZSxjPWIubGF5ZXIsdGhpcy5XZ1tjXT1NYXRoLm1heCh0aGlzLldnW2NdLHRoaXMubm9kZU1pbkxheWVyU3BhY2UoYiwhMCkpLHRoaXMuaWdbY109TWF0aC5tYXgodGhpcy5pZ1tjXSx0aGlzLm5vZGVNaW5MYXllclNwYWNlKGIsITEpKTt2YXIgZD0wLGY9dGhpcy5ibTtmb3IoYj0wO2I8PXRoaXMubGI7YisrKWM9ZiwwPj10aGlzLldnW2JdK3RoaXMuaWdbYl0mJihjPTApLDA8YiYmKGQrPWMvMiksOTA9PT10aGlzLnNhfHwwPT09dGhpcy5zYT8oZCs9dGhpcy5pZ1tiXSx0aGlzLkpmW2JdPWQsZCs9dGhpcy5XZ1tiXSk6DQooZCs9dGhpcy5XZ1tiXSx0aGlzLkpmW2JdPWQsZCs9dGhpcy5pZ1tiXSksYjx0aGlzLmxiJiYoZCs9Yy8yKSx0aGlzLk5iW2JdPWQ7Zj1kO2Q9dGhpcy5EZDtmb3IoYj0wO2I8PXRoaXMubGI7YisrKTI3MD09PXRoaXMuc2E/dGhpcy5KZltiXT1kLnkrdGhpcy5KZltiXTo5MD09PXRoaXMuc2E/KHRoaXMuSmZbYl09ZC55K2YtdGhpcy5KZltiXSx0aGlzLk5iW2JdPWYtdGhpcy5OYltiXSk6MTgwPT09dGhpcy5zYT90aGlzLkpmW2JdPWQueCt0aGlzLkpmW2JdOih0aGlzLkpmW2JdPWQueCtmLXRoaXMuSmZbYl0sdGhpcy5OYltiXT1mLXRoaXMuTmJbYl0pO2ZvcihhLnJlc2V0KCk7YS5uZXh0KCk7KXtiPWEudmFsdWU7Yz1iLmxheWVyO3ZhciBnPWIuY29sdW1ufDA7MjcwPT09dGhpcy5zYXx8OTA9PT10aGlzLnNhPyhmPWQueCt0aGlzLnhkKmcsYz10aGlzLkpmW2NdKTooZj10aGlzLkpmW2NdLGM9ZC55K3RoaXMueGQqZyk7Yi5EYT1mO2IuUGE9YztiLmNvbW1pdCgpfX07DQpaLnByb3RvdHlwZS5Wej1mdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dGhpcy5ibSxjPTA7Yzw9dGhpcy5sYjtjKyspYSs9dGhpcy5XZ1tjXSxhKz10aGlzLmlnW2NdO2Zvcih2YXIgYT1hK3RoaXMubGIqYixiPVtdLGM9dGhpcy54ZCp0aGlzLkliLGQ9dGhpcy5uSjswPD1kO2QtLSkyNzA9PT10aGlzLnNhPzA9PT1kP2IucHVzaChuZXcgeCgwLDAsYyxNYXRoLmFicyh0aGlzLk5iWzBdKSkpOmIucHVzaChuZXcgeCgwLHRoaXMuTmJbZC0xXSxjLE1hdGguYWJzKHRoaXMuTmJbZC0xXS10aGlzLk5iW2RdKSkpOjkwPT09dGhpcy5zYT8wPT09ZD9iLnB1c2gobmV3IHgoMCx0aGlzLk5iWzBdLGMsTWF0aC5hYnModGhpcy5OYlswXS1hKSkpOmIucHVzaChuZXcgeCgwLHRoaXMuTmJbZF0sYyxNYXRoLmFicyh0aGlzLk5iW2QtMV0tdGhpcy5OYltkXSkpKToxODA9PT10aGlzLnNhPzA9PT1kP2IucHVzaChuZXcgeCgwLDAsTWF0aC5hYnModGhpcy5OYlswXSksYykpOmIucHVzaChuZXcgeCh0aGlzLk5iW2QtDQoxXSwwLE1hdGguYWJzKHRoaXMuTmJbZC0xXS10aGlzLk5iW2RdKSxjKSk6MD09PWQ/Yi5wdXNoKG5ldyB4KHRoaXMuTmJbMF0sMCxNYXRoLmFicyh0aGlzLk5iWzBdLWEpLGMpKTpiLnB1c2gobmV3IHgodGhpcy5OYltkXSwwLE1hdGguYWJzKHRoaXMuTmJbZC0xXS10aGlzLk5iW2RdKSxjKSk7dGhpcy5jb21taXRMYXllcnMoYixILm5qKX07Wi5wcm90b3R5cGUuY29tbWl0TGF5ZXJzPWZ1bmN0aW9uKCl7fTsNCloucHJvdG90eXBlLmNvbW1pdExpbmtzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMubmV0d29yay5lZGdlcy5rLGIsYzthLm5leHQoKTspYz1hLnZhbHVlLmxpbmssInVuZGVmaW5lZCIhPT10eXBlb2YgYyYmbnVsbCE9PWMmJihjLnlsKCksYy5VbygpLGMuV2koKSk7Zm9yKGEucmVzZXQoKTthLm5leHQoKTspYz1hLnZhbHVlLmxpbmssInVuZGVmaW5lZCIhPT10eXBlb2YgYyYmbnVsbCE9PWMmJmMudXBkYXRlUm91dGUoKTtmb3IoYS5yZXNldCgpO2EubmV4dCgpOylpZihiPWEudmFsdWUsYz1iLmxpbmspe2MueWwoKTt2YXIgZD1jLGY9ZC5hYSxnPWQuY2EsaD1kLnVkLGs9ZC5mZTtpZihiLnZhbGlkKXtpZihjLkRlPT09T2cmJjQ9PT1jLm9hKXtpZihiLnJldil2YXIgbD1mLGY9ZyxnPWwsbT1oLGg9ayxrPW07aWYoYi5mcm9tVmVydGV4LmNvbHVtbj09PWIudG9WZXJ0ZXguY29sdW1uKXt2YXIgbj1jLmdldExpbmtQb2ludChmLGgsYy5jb21wdXRlU3BvdCghMCksITAsITEsZyxrKSwNCnA9Yy5nZXRMaW5rUG9pbnQoZyxrLGMuY29tcHV0ZVNwb3QoITEpLCExLCExLGYsaCk7Yy5VbygpO2MuV2sobi54LG4ueSk7Yy5XaygoMipuLngrcC54KS8zLCgyKm4ueStwLnkpLzMpO2MuV2soKG4ueCsyKnAueCkvMywobi55KzIqcC55KS8zKTtjLldrKHAueCxwLnkpfWVsc2V7dmFyIHE9ITEscj0hMTtudWxsIT09aCYmYy5jb21wdXRlU3BvdCghMCk9PT13YiYmKHE9ITApO251bGwhPT1rJiZjLmNvbXB1dGVTcG90KCExKT09PXdiJiYocj0hMCk7aWYocXx8cil7dmFyIHM9Yy5vKDApLngsdT1jLm8oMCkueSx2PWMubygxKS54LEQ9Yy5vKDEpLnksQT1jLm8oMikueCxHPWMubygyKS55LEw9Yy5vKDMpLngsTj1jLm8oMykueTtpZihxKXs5MD09PXRoaXMuc2F8fDI3MD09PXRoaXMuc2E/KHY9cyxEPSh1K04pLzIpOih2PShzK0wpLzIsRD11KTtjLlkoMSx2LEQpO3ZhciBPPWMuZ2V0TGlua1BvaW50KGYsaCxjLmNvbXB1dGVTcG90KCEwKSwhMCwhMSxnLGspO2MuWSgwLE8ueCxPLnkpfXImJg0KKDkwPT09dGhpcy5zYXx8MjcwPT09dGhpcy5zYT8oQT1MLEc9KHUrTikvMik6KEE9KHMrTCkvMixHPU4pLGMuWSgyLEEsRyksTz1jLmdldExpbmtQb2ludChnLGssYy5jb21wdXRlU3BvdCghMSksITEsITEsZixoKSxjLlkoMyxPLngsTy55KSl9fX1jLldpKCl9ZWxzZSBpZihiLmZyb21WZXJ0ZXgubGF5ZXI9PT1iLnRvVmVydGV4LmxheWVyKWMuV2koKTtlbHNle3ZhciBVPSExLFk9ITEsYmEsUj1jLmZ0KzE7aWYoYy5pYylZPSEwLGJhPWMub2EsNDxiYSYmYy5wb2ludHMucmVtb3ZlUmFuZ2UoMixiYS0zKTtlbHNlIGlmKGMuRGU9PT1PZylVPSEwLGJhPWMub2EsNDxiYSYmYy5wb2ludHMucmVtb3ZlUmFuZ2UoMixiYS0zKSxSPTI7ZWxzZXtiYT1jLm9hO3ZhciB4YT1jLmNvbXB1dGVTcG90KCEwKT09PXdiLFlhPWMuY29tcHV0ZVNwb3QoITEpPT09d2I7MjxiYSYmeGEmJllhP2MucG9pbnRzLnJlbW92ZVJhbmdlKDEsYmEtMik6MzxiYSYmeGEmJiFZYT9jLnBvaW50cy5yZW1vdmVSYW5nZSgxLA0KYmEtMyk6MzxiYSYmIXhhJiZZYT9jLnBvaW50cy5yZW1vdmVSYW5nZSgyLGJhLTIpOjQ8YmEmJiF4YSYmIVlhJiZjLnBvaW50cy5yZW1vdmVSYW5nZSgyLGJhLTMpfXZhciB6YT1iLmZyb21WZXJ0ZXgsTmE9Yi50b1ZlcnRleCx2YSxQYTtpZihiLnJldil7Zm9yKHZhciBHYTtudWxsIT09TmEmJnphIT09TmE7KXtQYT12YT1udWxsO2Zvcih2YXIgSmY9TmEucmMuaztKZi5uZXh0KCkmJihpYz1KZi52YWx1ZSxpYy5saW5rIT09Yi5saW5rfHwodmE9aWMuZnJvbVZlcnRleCxQYT1pYy50b1ZlcnRleCxudWxsIT09dmEucmQpKTspO3ZhIT09emEmJihrYj1jLm8oUi0xKS54LGZiPWMubyhSLTEpLnksSWE9dmEuRGEsSmE9dmEuUGEsWT8xODA9PT10aGlzLnNhfHwwPT09dGhpcy5zYT8yPT09Uj8oYy5DKFIrKyxrYixmYiksYy5DKFIrKyxrYixKYSkpOihtZD1udWxsIT09UGE/UGEuUGE6ZmIsbWQhPT1KYSYmKFhhPXRoaXMuTmJbdmEubGF5ZXItMV0sYy5DKFIrKyxYYSxmYiksYy5DKFIrKyxYYSwNCkphKSkpOjI9PT1SPyhjLkMoUisrLGtiLGZiKSxjLkMoUisrLElhLGZiKSk6KG1mPW51bGwhPT1QYT9QYS5EYTprYixtZiE9PUlhJiYoWGE9dGhpcy5OYlt2YS5sYXllci0xXSxjLkMoUisrLGtiLFhhKSxjLkMoUisrLElhLFhhKSkpOjI9PT1SP1U/KGRiPU1hdGgubWF4KDEwLHRoaXMuV2dbTmEubGF5ZXJdKSxBYj1NYXRoLm1heCgxMCx0aGlzLmlnW05hLmxheWVyXSksMTgwPT09dGhpcy5zYT8oR2E9TmEuVC54LGMuQyhSKyssR2EtZGIsSmEpLGMuQyhSKyssR2EsSmEpLGMuQyhSKyssR2ErQWIsSmEpKTo5MD09PXRoaXMuc2E/KEdhPU5hLlQueStOYS5ULmhlaWdodCxjLkMoUisrLElhLEdhK0FiKSxjLkMoUisrLElhLEdhKSxjLkMoUisrLElhLEdhLWRiKSk6MjcwPT09dGhpcy5zYT8oR2E9TmEuVC55LGMuQyhSKyssSWEsR2EtZGIpLGMuQyhSKyssSWEsR2EpLGMuQyhSKyssSWEsR2ErQWIpKTooR2E9TmEuVC54K05hLlQud2lkdGgsYy5DKFIrKyxHYStBYixKYSksYy5DKFIrKyxHYSwNCkphKSxjLkMoUisrLEdhLWRiLEphKSkpOihjLkMoUisrLGtiLGZiKSwxODA9PT10aGlzLnNhfHwwPT09dGhpcy5zYT9jLkMoUisrLGtiLEphKTpjLkMoUisrLElhLGZiKSxjLkMoUisrLElhLEphKSk6KGRiPU1hdGgubWF4KDEwLHRoaXMuV2dbdmEubGF5ZXJdKSxBYj1NYXRoLm1heCgxMCx0aGlzLmlnW3ZhLmxheWVyXSksMTgwPT09dGhpcy5zYT8oVSYmYy5DKFIrKyxJYS1kYixKYSksYy5DKFIrKyxJYSxKYSksVSYmYy5DKFIrKyxJYStBYixKYSkpOjkwPT09dGhpcy5zYT8oVSYmYy5DKFIrKyxJYSxKYStBYiksYy5DKFIrKyxJYSxKYSksVSYmYy5DKFIrKyxJYSxKYS1kYikpOjI3MD09PXRoaXMuc2E/KFUmJmMuQyhSKyssSWEsSmEtZGIpLGMuQyhSKyssSWEsSmEpLFUmJmMuQyhSKyssSWEsSmErQWIpKTooVSYmYy5DKFIrKyxJYStBYixKYSksYy5DKFIrKyxJYSxKYSksVSYmYy5DKFIrKyxJYS1kYixKYSkpKSk7TmE9dmF9aWYobnVsbD09PWt8fGMuY29tcHV0ZVNwb3QoITEpIT09d2IpaWYoa2I9DQpjLm8oUi0xKS54LGZiPWMubyhSLTEpLnksSWE9Yy5vKFIpLngsSmE9Yy5vKFIpLnksWSl7dmFyIGxmPXRoaXMuaWdbemEubGF5ZXJdLFpiOzE4MD09PXRoaXMuc2F8fDA9PT10aGlzLnNhPyhaYj1mYixaYj49emEuVC55JiZaYjw9emEuVC5ib3R0b20mJihHYT16YS5EYStsZixaYj1aYjx6YS5ULnkremEuVC5oZWlnaHQvMj96YS5ULnktdGhpcy54ZC8yOnphLlQuYm90dG9tK3RoaXMueGQvMixjLkMoUisrLEdhLGZiKSxjLkMoUisrLEdhLFpiKSksYy5DKFIrKyxJYSxaYikpOihaYj1rYixaYj49emEuVC54JiZaYjw9emEuVC5yaWdodCYmKEdhPXphLlBhK2xmLFpiPVpiPHphLlQueCt6YS5ULndpZHRoLzI/emEuVC54LXRoaXMueGQvMjp6YS5ULnJpZ2h0K3RoaXMueGQvMixjLkMoUisrLGtiLEdhKSxjLkMoUisrLFpiLEdhKSksYy5DKFIrKyxaYixKYSkpO2MuQyhSKyssSWEsSmEpfWVsc2UgVT8oZGI9TWF0aC5tYXgoMTAsdGhpcy5XZ1t6YS5sYXllcl0pLEFiPU1hdGgubWF4KDEwLHRoaXMuaWdbemEubGF5ZXJdKSwNCjE4MD09PXRoaXMuc2E/KEdhPXphLlQueCt6YS5ULndpZHRoLGMuWShSLTIsR2EsZmIpLGMuWShSLTEsR2ErQWIsZmIpKTo5MD09PXRoaXMuc2E/KEdhPXphLlQueSxjLlkoUi0yLGtiLEdhKSxjLlkoUi0xLGtiLEdhLWRiKSk6MjcwPT09dGhpcy5zYT8oR2E9emEuVC55K3phLlQuaGVpZ2h0LGMuWShSLTIsa2IsR2EpLGMuWShSLTEsa2IsR2ErQWIpKTooR2E9emEuVC54LGMuWShSLTIsR2EsZmIpLGMuWShSLTEsR2EtZGIsZmIpKSk6KDE4MD09PXRoaXMuc2F8fDA9PT10aGlzLnNhP2MuQyhSKyssSWEsZmIpOmMuQyhSKyssa2IsSmEpLGMuQyhSKyssSWEsSmEpKX1lbHNle2Zvcig7bnVsbCE9PXphJiZ6YSE9PU5hOyl7UGE9dmE9bnVsbDtmb3IodmFyIGZnPXphLmdjLmssaWM7ZmcubmV4dCgpJiYoaWM9ZmcudmFsdWUsaWMubGluayE9PWIubGlua3x8KHZhPWljLnRvVmVydGV4LFBhPWljLmZyb21WZXJ0ZXgsbnVsbCE9PVBhLnJkJiYoUGE9bnVsbCksbnVsbCE9PXZhLnJkKSk7KTt2YXIga2IsDQpmYixJYSxKYSxYYSxkYixBYjtpZih2YSE9PU5hKWlmKGtiPWMubyhSLTEpLngsZmI9Yy5vKFItMSkueSxJYT12YS5EYSxKYT12YS5QYSxZKWlmKDE4MD09PXRoaXMuc2F8fDA9PT10aGlzLnNhKXt2YXIgbWQ9bnVsbCE9PVBhP1BhLlBhOmZiO21kIT09SmEmJihYYT10aGlzLk5iW3ZhLmxheWVyXSwyPT09UiYmKFhhPTA9PT10aGlzLnNhP01hdGgubWF4KFhhLGtiKTpNYXRoLm1pbihYYSxrYikpLGMuQyhSKyssWGEsZmIpLGMuQyhSKyssWGEsSmEpKX1lbHNle3ZhciBtZj1udWxsIT09UGE/UGEuRGE6a2I7bWYhPT1JYSYmKFhhPXRoaXMuTmJbdmEubGF5ZXJdLDI9PT1SJiYoWGE9OTA9PT10aGlzLnNhP01hdGgubWF4KFhhLGZiKTpNYXRoLm1pbihYYSxmYikpLGMuQyhSKyssa2IsWGEpLGMuQyhSKyssSWEsWGEpKX1lbHNlIGRiPU1hdGgubWF4KDEwLHRoaXMuV2dbdmEubGF5ZXJdKSxBYj1NYXRoLm1heCgxMCx0aGlzLmlnW3ZhLmxheWVyXSksMTgwPT09dGhpcy5zYT8oYy5DKFIrKywNCklhK0FiLEphKSxVJiZjLkMoUisrLElhLEphKSxjLkMoUisrLElhLWRiLEphKSk6OTA9PT10aGlzLnNhPyhjLkMoUisrLElhLEphLWRiKSxVJiZjLkMoUisrLElhLEphKSxjLkMoUisrLElhLEphK0FiKSk6MjcwPT09dGhpcy5zYT8oYy5DKFIrKyxJYSxKYStBYiksVSYmYy5DKFIrKyxJYSxKYSksYy5DKFIrKyxJYSxKYS1kYikpOihjLkMoUisrLElhLWRiLEphKSxVJiZjLkMoUisrLElhLEphKSxjLkMoUisrLElhK0FiLEphKSk7emE9dmF9WSYmKGtiPWMubyhSLTEpLngsZmI9Yy5vKFItMSkueSxJYT1jLm8oUikueCxKYT1jLm8oUikueSwxODA9PT10aGlzLnNhfHwwPT09dGhpcy5zYT9mYiE9PUphJiYoWGE9MD09PXRoaXMuc2E/TWF0aC5taW4oTWF0aC5tYXgoKElhK2tiKS8yLHRoaXMuTmJbTmEubGF5ZXJdKSxJYSk6TWF0aC5tYXgoTWF0aC5taW4oKElhK2tiKS8yLHRoaXMuTmJbTmEubGF5ZXJdKSxJYSksYy5DKFIrKyxYYSxmYiksYy5DKFIrKyxYYSxKYSkpOmtiIT09SWEmJihYYT0NCjkwPT09dGhpcy5zYT9NYXRoLm1pbihNYXRoLm1heCgoSmErZmIpLzIsdGhpcy5OYltOYS5sYXllcl0pLEphKTpNYXRoLm1heChNYXRoLm1pbigoSmErZmIpLzIsdGhpcy5OYltOYS5sYXllcl0pLEphKSxjLkMoUisrLGtiLFhhKSxjLkMoUisrLElhLFhhKSkpfWlmKG51bGwhPT1kJiZVKXtpZihudWxsIT09aCl7aWYoYy5jb21wdXRlU3BvdCghMCk9PT13Yil7dmFyIERkPWMubygwKSxuZD1jLm8oMik7RGQuTShuZCl8fGMuWSgxLChEZC54K25kLngpLzIsKERkLnkrbmQueSkvMil9Tz1jLmdldExpbmtQb2ludChmLGgsd2IsITAsITEsZyxrKTtjLlkoMCxPLngsTy55KX1udWxsIT09ayYmKGMuY29tcHV0ZVNwb3QoITEpPT09d2ImJihEZD1jLm8oYy5vYS0xKSxuZD1jLm8oYy5vYS0zKSxEZC5NKG5kKXx8Yy5ZKGMub2EtMiwoRGQueCtuZC54KS8yLChEZC55K25kLnkpLzIpKSxPPWMuZ2V0TGlua1BvaW50KGcsayx3YiwhMSwhMSxmLGgpLGMuWShjLm9hLTEsTy54LE8ueSkpfWMuV2koKTsNCmIuY29tbWl0KCl9fWZvcih2YXIgTmU9bmV3IEIoViksRWQ9dGhpcy5uZXR3b3JrLmVkZ2VzLmssc2U7RWQubmV4dCgpOylzZT1FZC52YWx1ZS5saW5rLG51bGwhPT1zZSYmc2UuaWMmJiFOZS5jb250YWlucyhzZSkmJk5lLmFkZChzZSk7aWYoMDxOZS5jb3VudClpZig5MD09PXRoaXMuc2F8fDI3MD09PXRoaXMuc2Epe2Zvcih2YXIgS2Y9MCxCYj1uZXcgQihGcCksQmc9TmUuayxIYixxYixaYTtCZy5uZXh0KCk7KWlmKEhiPUJnLnZhbHVlLG51bGwhPT1IYiYmSGIuaWMpZm9yKHZhciB5Yj0yO3liPEhiLm9hLTM7eWIrKylpZihxYj1IYi5vKHliKSxaYT1IYi5vKHliKzEpLHRoaXMuSShxYi55LFphLnkpJiYhdGhpcy5JKHFiLngsWmEueCkpe3ZhciBqYz1uZXcgRnA7amMubGF5ZXI9TWF0aC5mbG9vcihxYi55LzIpO3ZhciBMZj1IYi5vKDApLE1mPUhiLm8oSGIub2EtMSk7amMuJGE9TGYueCpMZi54K0xmLnk7amMuYWU9TWYueCpNZi54K01mLnk7amMuQmU9TWF0aC5taW4ocWIueCxaYS54KTsNCmpjLlVkPU1hdGgubWF4KHFiLngsWmEueCk7amMuaW5kZXg9eWI7amMubGluaz1IYjtpZih5YisyPEhiLm9hKXt2YXIga2M9SGIubyh5Yi0xKSxVYz1IYi5vKHliKzIpLG9kPTA7a2MueTxxYi55P29kPVVjLnk8cWIueT8zOnFiLng8WmEueD8yOjE6a2MueT5xYi55JiYob2Q9VWMueT5xYi55PzA6WmEueDxxYi54PzI6MSk7amMuaWk9b2R9QmIuYWRkKGpjKX1pZigxPEJiLmNvdW50KXtCYi5zb3J0KHRoaXMuZ0cpO2Zvcih2YXIgZGM9MDtkYzxCYi5jb3VudDspe2Zvcih2YXIgcGQ9QmIubltkY10ubGF5ZXIsJGE9ZGMrMTskYTxCYi5jb3VudCYmQmIublskYV0ubGF5ZXI9PT1wZDspJGErKztpZigxPCRhLWRjKWZvcih2YXIgVGE9ZGM7VGE8JGE7KXtmb3IodmFyIFJiPUJiLm5bVGFdLlVkLEliPWRjKzE7SWI8JGEmJkJiLm5bSWJdLkJlPFJiOylSYj1NYXRoLm1heChSYixCYi5uW0liXS5VZCksSWIrKzt2YXIgT2U9SWItVGE7aWYoMTxPZSl7QmIuVXAodGhpcy5xeCxUYSxUYStPZSk7Zm9yKHZhciBQZD0NCjEscGM9QmIubltUYV0uYWUsSmIseWI9VGE7eWI8SWI7eWIrKylKYj1CYi5uW3liXSxKYi5hZSE9PXBjJiYoUGQrKyxwYz1KYi5hZSk7QmIuVXAodGhpcy5mRyxUYSxUYStPZSk7Zm9yKHZhciBlZT0xLHBjPUJiLm5bVGFdLiRhLHliPVRhO3liPEliO3liKyspSmI9QmIublt5Yl0sSmIuJGEhPT1wYyYmKGVlKysscGM9SmIuJGEpO3ZhciByYixGZDtQZDxlZT8ocmI9ITEsRmQ9UGQscGM9QmIubltUYV0uYWUsQmIuVXAodGhpcy5xeCxUYSxUYStPZSkpOihyYj0hMCxGZD1lZSxwYz1CYi5uW1RhXS4kYSk7Zm9yKHZhciBDZz0wLHliPVRhO3liPEliO3liKyspe0piPUJiLm5beWJdOyhyYj9KYi4kYTpKYi5hZSkhPT1wYyYmKENnKysscGM9cmI/SmIuJGE6SmIuYWUpO0hiPUpiLmxpbms7cWI9SGIubyhKYi5pbmRleCk7WmE9SGIubyhKYi5pbmRleCsxKTt2YXIgUGU9dGhpcy55cCooQ2ctKEZkLTEpLzIpO2lmKCFIYi5kanx8R3AocWIueCxxYi55K1BlLFphLngsWmEueStQZSkpS2YrKyxIYi55bCgpLA0KSGIuWShKYi5pbmRleCxxYi54LHFiLnkrUGUpLEhiLlkoSmIuaW5kZXgrMSxaYS54LFphLnkrUGUpLEhiLldpKCl9fVRhPUlifWRjPSRhfX19ZWxzZXtmb3IodmFyIEdkPTAsZ2I9bmV3IEIoRnApLG5mPU5lLmssaWIsc2IsVmM7bmYubmV4dCgpOylpZihpYj1uZi52YWx1ZSxudWxsIT09aWImJmliLmljKWZvcih2YXIgTmI9MjtOYjxpYi5vYS0zO05iKyspaWYoc2I9aWIubyhOYiksVmM9aWIubyhOYisxKSx0aGlzLkkoc2IueCxWYy54KSYmIXRoaXMuSShzYi55LFZjLnkpKXt2YXIgUWQ9bmV3IEZwO1FkLmxheWVyPU1hdGguZmxvb3Ioc2IueC8yKTt2YXIgUmQ9aWIubygwKSxmZT1pYi5vKGliLm9hLTEpO1FkLiRhPVJkLngrUmQueSpSZC55O1FkLmFlPWZlLngrZmUueSpmZS55O1FkLkJlPU1hdGgubWluKHNiLnksVmMueSk7UWQuVWQ9TWF0aC5tYXgoc2IueSxWYy55KTtRZC5pbmRleD1OYjtRZC5saW5rPWliO2lmKE5iKzI8aWIub2Epe3ZhciBGYz1pYi5vKE5iLTEpLHRlPWliLm8oTmIrDQoyKSxHYz0wO0ZjLng8c2IueD9HYz10ZS54PHNiLng/MzpzYi55PFZjLnk/MjoxOkZjLng+c2IueCYmKEdjPXRlLng+c2IueD8wOlZjLnk8c2IueT8yOjEpO1FkLmlpPUdjfWdiLmFkZChRZCl9aWYoMTxnYi5jb3VudCl7Z2Iuc29ydCh0aGlzLmdHKTtmb3IodmFyIENiPTA7Q2I8Z2IuY291bnQ7KXtmb3IodmFyIFFlPWdiLm5bQ2JdLmxheWVyLHFkPUNiKzE7cWQ8Z2IuY291bnQmJmdiLm5bcWRdLmxheWVyPT09UWU7KXFkKys7aWYoMTxxZC1DYilmb3IodmFyIGxiPUNiO2xiPHFkOyl7Zm9yKHZhciBIZD1nYi5uW2xiXS5VZCxEYj1DYisxO0RiPHFkJiZnYi5uW0RiXS5CZTxIZDspSGQ9TWF0aC5tYXgoSGQsZ2IubltEYl0uVWQpLERiKys7dmFyIFNkPURiLWxiO2lmKDE8U2Qpe2diLlVwKHRoaXMucXgsbGIsbGIrU2QpO2Zvcih2YXIgSWQ9MSxsYz1nYi5uW2xiXS5hZSxPYixOYj1sYjtOYjxEYjtOYisrKU9iPWdiLm5bTmJdLE9iLmFlIT09bGMmJihJZCsrLGxjPU9iLmFlKTtnYi5VcCh0aGlzLmZHLA0KbGIsbGIrU2QpO2Zvcih2YXIgdGI9MSxsYz1nYi5uW2xiXS4kYSxOYj1sYjtOYjxEYjtOYisrKU9iPWdiLm5bTmJdLE9iLiRhIT09bGMmJih0YisrLGxjPU9iLiRhKTt2YXIgb2YsYmI7SWQ8dGI/KG9mPSExLGJiPUlkLGxjPWdiLm5bbGJdLmFlLGdiLlVwKHRoaXMucXgsbGIsbGIrU2QpKToob2Y9ITAsYmI9dGIsbGM9Z2IubltsYl0uJGEpO2Zvcih2YXIgSmQ9MCxOYj1sYjtOYjxEYjtOYisrKXtPYj1nYi5uW05iXTsob2Y/T2IuJGE6T2IuYWUpIT09bGMmJihKZCsrLGxjPW9mP09iLiRhOk9iLmFlKTtpYj1PYi5saW5rO3NiPWliLm8oT2IuaW5kZXgpO1ZjPWliLm8oT2IuaW5kZXgrMSk7dmFyIFdjPXRoaXMueXAqKEpkLShiYi0xKS8yKTtpZighaWIuZGp8fEdwKHNiLngrV2Msc2IueSxWYy54K1djLFZjLnkpKUdkKyssaWIueWwoKSxpYi5ZKE9iLmluZGV4LHNiLngrV2Msc2IueSksaWIuWShPYi5pbmRleCsxLFZjLngrV2MsVmMueSksaWIuV2koKX19bGI9RGJ9Q2I9cWR9fX19Ow0KZnVuY3Rpb24gRnAoKXt0aGlzLmluZGV4PXRoaXMuVWQ9dGhpcy5CZT10aGlzLmFlPXRoaXMuJGE9dGhpcy5sYXllcj0wO3RoaXMubGluaz1udWxsO3RoaXMuaWk9MH10LlZkKEZwLHtsYXllcjohMCwkYTohMCxhZTohMCxCZTohMCxVZDohMCxpbmRleDohMCxsaW5rOiEwLGlpOiEwfSk7Wi5wcm90b3R5cGUuZ0c9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEZwJiZiIGluc3RhbmNlb2YgRnAmJmEhPT1iP2EubGF5ZXI8Yi5sYXllcj8tMTphLmxheWVyPmIubGF5ZXI/MTphLkJlPGIuQmU/LTE6YS5CZT5iLkJlPzE6YS5VZDxiLlVkPy0xOmEuVWQ+Yi5VZD8xOjA6MH07DQpaLnByb3RvdHlwZS5mRz1mdW5jdGlvbihhLGIpe3JldHVybiBhIGluc3RhbmNlb2YgRnAmJmIgaW5zdGFuY2VvZiBGcCYmYSE9PWI/YS4kYTxiLiRhPy0xOmEuJGE+Yi4kYXx8YS5paTxiLmlpPzE6YS5paT5iLmlpfHxhLkJlPGIuQmU/LTE6YS5CZT5iLkJlPzE6YS5VZDxiLlVkPy0xOmEuVWQ+Yi5VZD8xOjA6MH07Wi5wcm90b3R5cGUucXg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEZwJiZiIGluc3RhbmNlb2YgRnAmJmEhPT1iP2EuYWU8Yi5hZT8tMTphLmFlPmIuYWV8fGEuaWk8Yi5paT8xOmEuaWk+Yi5paXx8YS5CZTxiLkJlPy0xOmEuQmU+Yi5CZT8xOmEuVWQ8Yi5VZD8tMTphLlVkPmIuVWQ/MTowOjB9O1oucHJvdG90eXBlLkk9ZnVuY3Rpb24oYSxiKXtlJiYodC5xKGEsWiwiaXNBcHByb3g6YSIpLHQucShiLFosImlzQXBwcm94OmIiKSk7dmFyIGM9YS1iO3JldHVybi0xPGMmJjE+Y307DQpmdW5jdGlvbiBHcChhLGIsYyxkKXtlJiYodC5xKGEsWiwiaXNVbm9jY3VwaWVkMjpweCIpLHQucShiLFosImlzVW5vY2N1cGllZDI6cHkiKSx0LnEoYyxaLCJpc1Vub2NjdXBpZWQyOnF4IiksdC5xKGQsWiwiaXNVbm9jY3VwaWVkMjpxeSIpKTtyZXR1cm4hMH1mdW5jdGlvbiBYbyhhLGIpe3ZhciBjLGQ9YS5PZFtiXTtpZihkPj1hLlpnLmxlbmd0aCl7Yz1bXTt2YXIgZjtmb3IoZj0wO2Y8YS5aZy5sZW5ndGg7ZisrKWNbZl09YS5aZ1tmXTthLlpnPWN9InVuZGVmaW5lZCI9PT10eXBlb2YgYS5aZ1tkXXx8bnVsbD09PWEuWmdbZF0/Yz1bXTooYz1hLlpnW2RdLGEuWmdbZF09bnVsbCk7dmFyIGQ9YS5HcltiXSxnO2ZvcihmPTA7ZjxkLmxlbmd0aDtmKyspZz1kW2ZdLGcgaW5zdGFuY2VvZiBIcCYmKGNbZy5pbmRleF09Zyk7cmV0dXJuIGN9ZnVuY3Rpb24gWW8oYSxiLGMpe2EuWmdbYS5PZFtiXV09Y310LmcoWiwibGF5ZXJTcGFjaW5nIixaLnByb3RvdHlwZS5sYXllclNwYWNpbmcpOw0KdC5kZWZpbmVQcm9wZXJ0eShaLHtsYXllclNwYWNpbmc6ImxheWVyU3BhY2luZyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm19LGZ1bmN0aW9uKGEpe3RoaXMuYm0hPT1hJiYodC5pKGEsIm51bWJlciIsWiwibGF5ZXJTcGFjaW5nIiksMDw9YSYmKHRoaXMuYm09YSx0aGlzLkooKSkpfSk7dC5nKFosImNvbHVtblNwYWNpbmciLFoucHJvdG90eXBlLmZJKTt0LmRlZmluZVByb3BlcnR5KFose2ZJOiJjb2x1bW5TcGFjaW5nIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54ZH0sZnVuY3Rpb24oYSl7dGhpcy54ZCE9PWEmJih0LmkoYSwibnVtYmVyIixaLCJjb2x1bW5TcGFjaW5nIiksMDw9YSYmKHRoaXMueGQ9YSx0aGlzLkooKSkpfSk7dC5nKFosImRpcmVjdGlvbiIsWi5wcm90b3R5cGUuZGlyZWN0aW9uKTsNCnQuZGVmaW5lUHJvcGVydHkoWix7ZGlyZWN0aW9uOiJkaXJlY3Rpb24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnNhfSxmdW5jdGlvbihhKXt0aGlzLnNhIT09YSYmKHQuaShhLCJudW1iZXIiLFosImRpcmVjdGlvbiIpLHRoaXMuc2E9YSx0aGlzLkooKSl9KTt0LmcoWiwiY3ljbGVSZW1vdmVPcHRpb24iLFoucHJvdG90eXBlLmpFKTt0LmRlZmluZVByb3BlcnR5KFose2pFOiJjeWNsZVJlbW92ZU9wdGlvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRG59LGZ1bmN0aW9uKGEpe3RoaXMuRG4hPT1hJiYodC5BYShhLFosWiwiY3ljbGVSZW1vdmVPcHRpb24iKSxhPT09Rm98fGE9PT16bykmJih0aGlzLkRuPWEsdGhpcy5KKCkpfSk7dC5nKFosImxheWVyaW5nT3B0aW9uIixaLnByb3RvdHlwZS5tRik7DQp0LmRlZmluZVByb3BlcnR5KFose21GOiJsYXllcmluZ09wdGlvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW99LGZ1bmN0aW9uKGEpe3RoaXMubW8hPT1hJiYodC5BYShhLFosWiwibGF5ZXJpbmdPcHRpb24iKSxhPT09QW98fGE9PT1ocHx8YT09PWpwKSYmKHRoaXMubW89YSx0aGlzLkooKSl9KTt0LmcoWiwiaW5pdGlhbGl6ZU9wdGlvbiIsWi5wcm90b3R5cGUuJEUpO3QuZGVmaW5lUHJvcGVydHkoWix7JEU6ImluaXRpYWxpemVPcHRpb24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLllufSxmdW5jdGlvbihhKXt0aGlzLlluIT09YSYmKHQuQWEoYSxaLFosImluaXRpYWxpemVPcHRpb24iKSxhPT09Qm98fGE9PT1wcHx8YT09PW5wKSYmKHRoaXMuWW49YSx0aGlzLkooKSl9KTt0LmcoWiwiaXRlcmF0aW9ucyIsWi5wcm90b3R5cGUuZkopOw0KdC5kZWZpbmVQcm9wZXJ0eShaLHtmSjoiaXRlcmF0aW9ucyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmx9LGZ1bmN0aW9uKGEpe3RoaXMuWmwhPT1hJiYodC5xKGEsRW8sIml0ZXJhdGlvbnMiKSwwPD1hJiYodGhpcy5abD1hLHRoaXMuSigpKSl9KTt0LmcoWiwiYWdncmVzc2l2ZU9wdGlvbiIsWi5wcm90b3R5cGUuTEQpO3QuZGVmaW5lUHJvcGVydHkoWix7TEQ6ImFnZ3Jlc3NpdmVPcHRpb24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnZufSxmdW5jdGlvbihhKXt0aGlzLnZuIT09YSYmKHQuQWEoYSxaLFosImFnZ3Jlc3NpdmVPcHRpb24iKSxhPT09dHB8fGE9PT1Db3x8YT09PXVwKSYmKHRoaXMudm49YSx0aGlzLkooKSl9KTt0LmcoWiwicGFja09wdGlvbiIsWi5wcm90b3R5cGUuQ0opOw0KdC5kZWZpbmVQcm9wZXJ0eShaLHtDSjoicGFja09wdGlvbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGl9LGZ1bmN0aW9uKGEpe3RoaXMuSGkhPT1hJiYodC5pKGEsIm51bWJlciIsWiwicGFja09wdGlvbiIpLDA8PWEmJjg+YSYmKHRoaXMuSGk9YSx0aGlzLkooKSkpfSk7dC5nKFosInNldHNQb3J0U3BvdHMiLFoucHJvdG90eXBlLnhsKTt0LmRlZmluZVByb3BlcnR5KFose3hsOiJzZXRzUG9ydFNwb3RzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NaH0sZnVuY3Rpb24oYSl7dGhpcy5NaCE9PWEmJih0LmkoYSwiYm9vbGVhbiIsWiwic2V0c1BvcnRTcG90cyIpLHRoaXMuTWg9YSx0aGlzLkooKSl9KTt0LmcoWiwibGlua1NwYWNpbmciLFoucHJvdG90eXBlLnlwKTsNCnQuZGVmaW5lUHJvcGVydHkoWix7eXA6ImxpbmtTcGFjaW5nIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56an0sZnVuY3Rpb24oYSl7dGhpcy56aiE9PWEmJih0LmkoYSwibnVtYmVyIixaLCJsaW5rU3BhY2luZyIpLDA8PWEmJih0aGlzLnpqPWEsdGhpcy5KKCkpKX0pO3QuQShaLHtuSjoibWF4TGF5ZXIifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmxifSk7dC5BKFose0dLOiJtYXhJbmRleCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnZ9KTt0LkEoWix7Rks6Im1heENvbHVtbiJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSWJ9KTt0LkEoWix7SUs6Im1pbkluZGV4TGF5ZXIifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnpyfSk7dC5BKFose0hLOiJtYXhJbmRleExheWVyIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LZn0pO3ZhciB6bztaLkN5Y2xlRGVwdGhGaXJzdD16bz10LncoWiwiQ3ljbGVEZXB0aEZpcnN0IiwwKTt2YXIgRm87DQpaLkN5Y2xlR3JlZWR5PUZvPXQudyhaLCJDeWNsZUdyZWVkeSIsMSk7dmFyIEFvO1ouTGF5ZXJPcHRpbWFsTGlua0xlbmd0aD1Bbz10LncoWiwiTGF5ZXJPcHRpbWFsTGlua0xlbmd0aCIsMCk7dmFyIGhwO1ouTGF5ZXJMb25nZXN0UGF0aFNpbms9aHA9dC53KFosIkxheWVyTG9uZ2VzdFBhdGhTaW5rIiwxKTt2YXIganA7Wi5MYXllckxvbmdlc3RQYXRoU291cmNlPWpwPXQudyhaLCJMYXllckxvbmdlc3RQYXRoU291cmNlIiwyKTt2YXIgQm87Wi5Jbml0RGVwdGhGaXJzdE91dD1Cbz10LncoWiwiSW5pdERlcHRoRmlyc3RPdXQiLDApO3ZhciBwcDtaLkluaXREZXB0aEZpcnN0SW49cHA9dC53KFosIkluaXREZXB0aEZpcnN0SW4iLDEpO3ZhciBucDtaLkluaXROYWl2ZT1ucD10LncoWiwiSW5pdE5haXZlIiwyKTt2YXIgdHA7Wi5BZ2dyZXNzaXZlTm9uZT10cD10LncoWiwiQWdncmVzc2l2ZU5vbmUiLDApO3ZhciBDbzsNClouQWdncmVzc2l2ZUxlc3M9Q289dC53KFosIkFnZ3Jlc3NpdmVMZXNzIiwxKTt2YXIgdXA7Wi5BZ2dyZXNzaXZlTW9yZT11cD10LncoWiwiQWdncmVzc2l2ZU1vcmUiLDIpO1ouUGFja05vbmU9MDt2YXIgdnA7Wi5QYWNrRXhwYW5kPXZwPTE7dmFyIHdwO1ouUGFja1N0cmFpZ2h0ZW49d3A9Mjt2YXIgeXA7Wi5QYWNrTWVkaWFuPXlwPTQ7dmFyIERvO1ouUGFja0FsbD1Ebz03O2Z1bmN0aW9uIEVvKCl7cmEuY2FsbCh0aGlzKX10LmdhKCJMYXllcmVkRGlncmFwaE5ldHdvcmsiLEVvKTt0LkthKEVvLHJhKTtFby5wcm90b3R5cGUuY3JlYXRlVmVydGV4PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIcH07RW8ucHJvdG90eXBlLmNyZWF0ZUVkZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IElwfTsNCmZ1bmN0aW9uIEhwKCl7c2EuY2FsbCh0aGlzKTt0aGlzLmluZGV4PXRoaXMuY29sdW1uPXRoaXMubGF5ZXI9LTE7dGhpcy5jb21wb25lbnQ9TmFOO3RoaXMubmVhcj1udWxsO3RoaXMudmFsaWQ9ITE7dGhpcy5maW5pc2g9dGhpcy4kbz1OYU47dGhpcy5DbT0wO3RoaXMuSUE9dGhpcy5KQT12b2lkIDB9dC5nYSgiTGF5ZXJlZERpZ3JhcGhWZXJ0ZXgiLEhwKTt0LkthKEhwLHNhKTtmdW5jdGlvbiBJcCgpe3VhLmNhbGwodGhpcyk7dGhpcy5mb3Jlc3Q9dGhpcy5yZXY9dGhpcy52YWxpZD0hMTt0aGlzLnBvcnRUb1Bvcz10aGlzLnBvcnRGcm9tUG9zPU5hTjt0aGlzLnBvcnRUb0NvbE9mZnNldD10aGlzLnBvcnRGcm9tQ29sT2Zmc2V0PTB9dC5nYSgiTGF5ZXJlZERpZ3JhcGhFZGdlIixJcCk7dC5LYShJcCx1YSk7DQpmdW5jdGlvbiBYKCl7MDxhcmd1bWVudHMubGVuZ3RoJiZ0LmFkKFgpO2JlLmNhbGwodGhpcyk7dGhpcy5ZYz1uZXcgQyhPYmplY3QpO3RoaXMuSmk9SnA7dGhpcy5JZj1LcDt0aGlzLkNzPUxwO3RoaXMuWXU9TXA7dGhpcy5HQj1udWxsO3RoaXMudGg9ITA7dGhpcy5jZD1OcDt0aGlzLmJnPShuZXcgZ2EoMTAsMTApKS5mcmVlemUoKTt0aGlzLnVhPW5ldyBPcDt0aGlzLnRhPW5ldyBPcH10LmdhKCJUcmVlTGF5b3V0IixYKTt0LkthKFgsYmUpO1gucHJvdG90eXBlLmNsb25lUHJvdGVjdGVkPWZ1bmN0aW9uKGEpe2JlLnByb3RvdHlwZS5jbG9uZVByb3RlY3RlZC5jYWxsKHRoaXMsYSk7YS5KaT10aGlzLkppO2EuQ3M9dGhpcy5DczthLll1PXRoaXMuWXU7YS50aD10aGlzLnRoO2EuY2Q9dGhpcy5jZDthLmJnLmFzc2lnbih0aGlzLmJnKTthLnVhLmNvcHlJbmhlcml0ZWRQcm9wZXJ0aWVzRnJvbSh0aGlzLnVhKTthLnRhLmNvcHlJbmhlcml0ZWRQcm9wZXJ0aWVzRnJvbSh0aGlzLnRhKX07DQpYLnByb3RvdHlwZS5jcmVhdGVOZXR3b3JrPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IFBwO0xuKGEsdGhpcyk7cmV0dXJuIGF9O1gucHJvdG90eXBlLm1ha2VOZXR3b3JrPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY3JlYXRlTmV0d29yaygpO2EgaW5zdGFuY2VvZiB6PyhRcCh0aGlzLGIsYS5raCwhMCksUXAodGhpcyxiLGEubGlua3MsITApKTphIGluc3RhbmNlb2YgVD9RcCh0aGlzLGIsYS5SYywhMSk6UXAodGhpcyxiLGEuaywhMSk7cmV0dXJuIGJ9Ow0KZnVuY3Rpb24gUXAoYSxiLGMsZCl7Zm9yKGM9Yy5rO2MubmV4dCgpOyl7dmFyIGY9Yy52YWx1ZTtmIGluc3RhbmNlb2YgUyYmZi5jYW5MYXlvdXQoKSYmIkNvbW1lbnQiIT09Zi5aYyYmKCFkfHxmLnNwKSYmKGYuY2l8fChmIGluc3RhbmNlb2YgVCYmbnVsbD09PWYuamM/UXAoYSxiLGYuUmMsITEpOmIuS28oZikpKX1mb3IoYy5yZXNldCgpO2MubmV4dCgpOylpZihmPWMudmFsdWUsZiBpbnN0YW5jZW9mIFYmJmYuY2FuTGF5b3V0KCkmJiJDb21tZW50IiE9PWYuWmMmJighZHx8Zi5zcCkpe3ZhciBnPWYuYWE7YT1mLmNhO251bGwhPT1nJiZudWxsIT09YSYmZyE9PWEmJiJDb21tZW50IiE9PWcuWmMmJiJDb21tZW50IiE9PWEuWmMmJihnPWIuZmluZEdyb3VwVmVydGV4KGcpLGE9Yi5maW5kR3JvdXBWZXJ0ZXgoYSksbnVsbCE9PWcmJm51bGwhPT1hJiZiLiRtKGcsYSxmKSl9fQ0KWC5wcm90b3R5cGUuZG9MYXlvdXQ9ZnVuY3Rpb24oYSl7YXx8dC5tKCJMYXlvdXQuZG9MYXlvdXQoY29sbGVjdGlvbikgYXJndW1lbnQgbXVzdCBub3QgYmUgbnVsbCBidXQgYSBEaWFncmFtLCBhIEdyb3VwLCBvciBhbiBJdGVyYWJsZSBvZiBQYXJ0cyIpO251bGw9PT10aGlzLm5ldHdvcmsmJih0aGlzLm5ldHdvcms9dGhpcy5tYWtlTmV0d29yayhhKSk7dGhpcy5RZSE9PVJwJiYodGhpcy5EZD10aGlzLmluaXRpYWxPcmlnaW4odGhpcy5EZCkpO3ZhciBiPXRoaXMuaDtudWxsPT09YiYmYSBpbnN0YW5jZW9mIHomJihiPWEpO3RoaXMuSWY9dGhpcy5wYXRoPT09SnAmJm51bGwhPT1iP2IucGQ/S3A6U3A6dGhpcy5wYXRoPT09SnA/S3A6dGhpcy5wYXRoO2lmKDA8dGhpcy5uZXR3b3JrLnZlcnRleGVzLmNvdW50KXt0aGlzLm5ldHdvcmsueHcoKTtmb3IoYj10aGlzLm5ldHdvcmsudmVydGV4ZXMuaztiLm5leHQoKTspYT1iLnZhbHVlLGEuaW5pdGlhbGl6ZWQ9ITEsYS5sZXZlbD0wLGEucGFyZW50PQ0KbnVsbCxhLmNoaWxkcmVuPVtdO2lmKDA8dGhpcy5ZYy5jb3VudClmb3IoYj10aGlzLlljLmssdGhpcy5ZYz1uZXcgQyhPcCk7Yi5uZXh0KCk7KWE9Yi52YWx1ZSxhIGluc3RhbmNlb2YgUz8oYT10aGlzLm5ldHdvcmsuUW0oYSksbnVsbCE9PWEmJnRoaXMuWWMuYWRkKGEpKTphIGluc3RhbmNlb2YgT3AmJnRoaXMuWWMuYWRkKGEpOzA9PT10aGlzLlljLmNvdW50JiZ0aGlzLmZpbmRSb290cygpO2ZvcihiPXRoaXMuWWMuY29weSgpLms7Yi5uZXh0KCk7KWE9Yi52YWx1ZSxhLmluaXRpYWxpemVkfHwoYS5pbml0aWFsaXplZD0hMCxUcCh0aGlzLGEpKTtmb3IoYT10aGlzLlljLms7YS5uZXh0KCk7KVVwKHRoaXMsYS52YWx1ZSk7Zm9yKGE9dGhpcy5ZYy5rO2EubmV4dCgpOylWcCh0aGlzLGEudmFsdWUpO2ZvcihhPXRoaXMuWWMuazthLm5leHQoKTspV3AodGhpcyxhLnZhbHVlKTt0aGlzLk56KCk7aWYodGhpcy5Ydz09PVhwKXt2YXIgYz1bXTtmb3IoYT10aGlzLm5ldHdvcmsudmVydGV4ZXMuazthLm5leHQoKTspe3ZhciBiPQ0KYS52YWx1ZSxkPWIucGFyZW50O2R8fChkPWIpO3ZhciBkPTA9PT1kLmFuZ2xlfHwxODA9PT1kLmFuZ2xlLGY9Y1tiLmxldmVsXTt2b2lkIDA9PT1mJiYoZj0wKTtjW2IubGV2ZWxdPU1hdGgubWF4KGYsZD9iLndpZHRoOmIuaGVpZ2h0KX1mb3IoZj0wO2Y8Yy5sZW5ndGg7ZisrKXZvaWQgMD09PWNbZl0mJihjW2ZdPTApO3RoaXMuR0I9Yztmb3IoYT10aGlzLm5ldHdvcmsudmVydGV4ZXMuazthLm5leHQoKTspYj1hLnZhbHVlLChkPWIucGFyZW50KXx8KGQ9YiksMD09PWQuYW5nbGV8fDE4MD09PWQuYW5nbGU/KDE4MD09PWQuYW5nbGUmJihiLmZwKz1jW2IubGV2ZWxdLWIud2lkdGgpLGIud2lkdGg9Y1tiLmxldmVsXSk6KDI3MD09PWQuYW5nbGUmJihiLmdwKz1jW2IubGV2ZWxdLWIuaGVpZ2h0KSxiLmhlaWdodD1jW2IubGV2ZWxdKX1lbHNlIGlmKHRoaXMuWHc9PT1ZcClmb3IoYT10aGlzLm5ldHdvcmsudmVydGV4ZXMuazthLm5leHQoKTspe2I9YS52YWx1ZTtkPTA9PT1iLmFuZ2xlfHwNCjE4MD09PWIuYW5nbGU7Yz0tMTtmb3IoZj0wO2Y8Yi5jaGlsZHJlbi5sZW5ndGg7ZisrKXZhciBnPWIuY2hpbGRyZW5bZl0sYz1NYXRoLm1heChjLGQ/Zy53aWR0aDpnLmhlaWdodCk7aWYoMDw9Yylmb3IoZj0wO2Y8Yi5jaGlsZHJlbi5sZW5ndGg7ZisrKWc9Yi5jaGlsZHJlbltmXSxkPygxODA9PT1iLmFuZ2xlJiYoZy5mcCs9Yy1nLndpZHRoKSxnLndpZHRoPWMpOigyNzA9PT1iLmFuZ2xlJiYoZy5ncCs9Yy1nLmhlaWdodCksZy5oZWlnaHQ9Yyl9Zm9yKGE9dGhpcy5ZYy5rO2EubmV4dCgpOyl0aGlzLmxheW91dFRyZWUoYS52YWx1ZSk7dGhpcy5hcnJhbmdlVHJlZXMoKTt0aGlzLnVwZGF0ZVBhcnRzKCl9dGhpcy5uZXR3b3JrPW51bGw7dGhpcy5ZYz1uZXcgQyhPYmplY3QpO3RoaXMuJGU9ITB9Ow0KWC5wcm90b3R5cGUuZmluZFJvb3RzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rO2EubmV4dCgpOyl7dmFyIGI9YS52YWx1ZTtzd2l0Y2godGhpcy5JZil7Y2FzZSBLcDowPT09Yi5yYy5jb3VudCYmdGhpcy5ZYy5hZGQoYik7YnJlYWs7Y2FzZSBTcDowPT09Yi5nYy5jb3VudCYmdGhpcy5ZYy5hZGQoYik7YnJlYWs7ZGVmYXVsdDp0Lm0oIlVuaGFuZGxlZCBwYXRoIHZhbHVlICIrdGhpcy5JZi50b1N0cmluZygpKX19aWYoMD09PXRoaXMuWWMuY291bnQpe2Zvcih2YXIgYT05OTk5OTksYj1udWxsLGM9dGhpcy5uZXR3b3JrLnZlcnRleGVzLms7Yy5uZXh0KCk7KXt2YXIgZD1jLnZhbHVlO3N3aXRjaCh0aGlzLklmKXtjYXNlIEtwOmQucmMuY291bnQ8YSYmKGE9ZC5yYy5jb3VudCxiPWQpO2JyZWFrO2Nhc2UgU3A6ZC5nYy5jb3VudDxhJiYoYT1kLmdjLmNvdW50LGI9ZCk7YnJlYWs7ZGVmYXVsdDp0Lm0oIlVuaGFuZGxlZCBwYXRoIHZhbHVlICIrdGhpcy5JZi50b1N0cmluZygpKX19bnVsbCE9PQ0KYiYmdGhpcy5ZYy5hZGQoYil9fTsNCmZ1bmN0aW9uIFRwKGEsYil7aWYobnVsbCE9PWIpe2UmJnQubChiLE9wLFgsIndhbGtUcmVlOnYiKTtzd2l0Y2goYS5JZil7Y2FzZSBLcDppZigwPGIuZ2MuY291bnQpe2Zvcih2YXIgYz1uZXcgQihPcCksZD1iLnlJO2QubmV4dCgpOyl7dmFyIGY9ZC52YWx1ZTtacChhLGIsZikmJmMuYWRkKGYpfTA8Yy5jb3VudCYmKGIuY2hpbGRyZW49Yy5JZSgpKX1icmVhaztjYXNlIFNwOmlmKDA8Yi5yYy5jb3VudCl7Yz1uZXcgQihPcCk7Zm9yKGQ9Yi5USjtkLm5leHQoKTspZj1kLnZhbHVlLFpwKGEsYixmKSYmYy5hZGQoZik7MDxjLmNvdW50JiYoYi5jaGlsZHJlbj1jLkllKCkpfWJyZWFrO2RlZmF1bHQ6dC5tKCJVbmhhbmRsZWQgcGF0aCB2YWx1ZSIrYS5JZi50b1N0cmluZygpKX1mb3IodmFyIGM9Yi5jaGlsZHJlbixkPWMubGVuZ3RoLGc9MDtnPGQ7ZysrKWY9Y1tnXSxmLmluaXRpYWxpemVkPSEwLGYubGV2ZWw9Yi5sZXZlbCsxLGYucGFyZW50PWIsYS5ZYy5yZW1vdmUoZik7Zm9yKGc9MDtnPA0KZDtnKyspZj1jW2ddLFRwKGEsZil9fWZ1bmN0aW9uIFpwKGEsYixjKXtlJiZ0LmwoYixPcCxYLCJ3YWxrT0s6diIpO2UmJnQubChjLE9wLFgsIndhbGtPSzpjIik7aWYoYy5pbml0aWFsaXplZCl7dmFyIGQ7aWYobnVsbD09PWIpZD0hMTtlbHNle2UmJnQubChjLE9wLFgsImlzQW5jZXN0b3I6YSIpO2UmJnQubChiLE9wLFgsImlzQW5jZXN0b3I6YiIpO2ZvcihkPWIucGFyZW50O251bGwhPT1kJiZkIT09YzspZD1kLnBhcmVudDtkPWQ9PT1jfWlmKGR8fGMubGV2ZWw+Yi5sZXZlbClyZXR1cm4hMTthLnJlbW92ZUNoaWxkKGMucGFyZW50LGMpfXJldHVybiEwfQ0KWC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oYSxiKXtpZihudWxsIT09YSYmbnVsbCE9PWIpe2UmJnQubChhLE9wLFgsInJlbW92ZUNoaWxkOnAiKTtlJiZ0LmwoYixPcCxYLCJyZW1vdmVDaGlsZDpjIik7Zm9yKHZhciBjPWEuY2hpbGRyZW4sZD0wLGY9MDtmPGMubGVuZ3RoO2YrKyljW2ZdPT09YiYmZCsrO2lmKDA8ZCl7Zm9yKHZhciBkPUFycmF5KGMubGVuZ3RoLWQpLGc9MCxmPTA7ZjxjLmxlbmd0aDtmKyspY1tmXSE9PWImJihkW2crK109Y1tmXSk7YS5jaGlsZHJlbj1kfX19Ow0KZnVuY3Rpb24gVXAoYSxiKXtpZihudWxsIT09Yil7ZSYmdC5sKGIsT3AsWCwiaW5pdGlhbGl6ZVRyZWU6diIpO2EuaW5pdGlhbGl6ZVRyZWVWZXJ0ZXhWYWx1ZXMoYik7Yi5hbGlnbm1lbnQ9PT0kcCYmYS5zb3J0VHJlZVZlcnRleENoaWxkcmVuKGIpO2Zvcih2YXIgYz0wLGQ9Yi5HbSxmPTAsZz1iLmNoaWxkcmVuLGg9Zy5sZW5ndGgsaz0wO2s8aDtrKyspe3ZhciBsPWdba107VXAoYSxsKTtjKz1sLmRlc2NlbmRhbnRDb3VudCsxO2Q9TWF0aC5tYXgoZCxsLm1heENoaWxkcmVuQ291bnQpO2Y9TWF0aC5tYXgoZixsLm1heEdlbmVyYXRpb25Db3VudCl9Yi5kZXNjZW5kYW50Q291bnQ9YztiLm1heENoaWxkcmVuQ291bnQ9ZDtiLm1heEdlbmVyYXRpb25Db3VudD0wPGQ/ZisxOjB9fQ0KZnVuY3Rpb24gYXEoYSxiKXtlJiZ0LmwoYixPcCxYLCJtb206diIpO3N3aXRjaChhLkNzKXtkZWZhdWx0OmNhc2UgTHA6cmV0dXJuIG51bGwhPT1iLnBhcmVudD9iLnBhcmVudDphLnVhO2Nhc2UgYnE6cmV0dXJuIG51bGw9PT1iLnBhcmVudD9hLnVhOm51bGw9PT1iLnBhcmVudC5wYXJlbnQ/YS50YTpiLnBhcmVudDtjYXNlIGNxOmlmKG51bGwhPT1iLnBhcmVudClyZXR1cm4gbnVsbCE9PWIucGFyZW50LnBhcmVudD9iLnBhcmVudC5wYXJlbnQ6YS50YTtjYXNlIGRxOnZhciBjPSEwO2lmKDA9PT1iLkdtKWM9ITE7ZWxzZSBmb3IodmFyIGQ9Yi5jaGlsZHJlbixmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKWlmKDA8ZFtnXS5HbSl7Yz0hMTticmVha31yZXR1cm4gYyYmbnVsbCE9PWIucGFyZW50P2EudGE6bnVsbCE9PWIucGFyZW50P2IucGFyZW50OmEudWF9fQ0KWC5wcm90b3R5cGUuaW5pdGlhbGl6ZVRyZWVWZXJ0ZXhWYWx1ZXM9ZnVuY3Rpb24oYSl7ZSYmdC5sKGEsT3AsWCwiaW5pdGlhbGl6ZVRyZWVWZXJ0ZXhWYWx1ZXM6diIpO3ZhciBiPWFxKHRoaXMsYSk7YS5jb3B5SW5oZXJpdGVkUHJvcGVydGllc0Zyb20oYik7aWYobnVsbCE9PWEucGFyZW50JiZhLnBhcmVudC5hbGlnbm1lbnQ9PT0kcCl7Zm9yKHZhciBiPWEuYW5nbGUsYz1hLnBhcmVudC5jaGlsZHJlbixkPTA7ZDxjLmxlbmd0aCYmYSE9PWNbZF07KWQrKzswPT09ZCUyP2QhPT1jLmxlbmd0aC0xJiYoYj05MD09PWI/MTgwOjE4MD09PWI/MjcwOjI3MD09PWI/MTgwOjI3MCk6Yj05MD09PWI/MDoxODA9PT1iPzkwOjI3MD09PWI/MDo5MDthLmFuZ2xlPWJ9YS5pbml0aWFsaXplZD0hMH07DQpmdW5jdGlvbiBWcChhLGIpe2lmKG51bGwhPT1iKXtlJiZ0LmwoYixPcCxYLCJhc3NpZ25UcmVlOnYiKTthLmFzc2lnblRyZWVWZXJ0ZXhWYWx1ZXMoYik7Zm9yKHZhciBjPWIuY2hpbGRyZW4sZD1jLmxlbmd0aCxmPTA7ZjxkO2YrKylWcChhLGNbZl0pfX1YLnByb3RvdHlwZS5hc3NpZ25UcmVlVmVydGV4VmFsdWVzPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBXcChhLGIpe2lmKG51bGwhPT1iKXtlJiZ0LmwoYixPcCxYLCJzb3J0VHJlZTp2Iik7Yi5hbGlnbm1lbnQhPT0kcCYmYS5zb3J0VHJlZVZlcnRleENoaWxkcmVuKGIpO2Zvcih2YXIgYz1iLmNoaWxkcmVuLGQ9Yy5sZW5ndGgsZj0wO2Y8ZDtmKyspV3AoYSxjW2ZdKX19DQpYLnByb3RvdHlwZS5zb3J0VHJlZVZlcnRleENoaWxkcmVuPWZ1bmN0aW9uKGEpe2UmJnQubChhLE9wLFgsInNvcnRUcmVlVmVydGV4Q2hpbGRyZW46diIpO3N3aXRjaChhLnNvcnRpbmcpe2Nhc2UgZXE6YnJlYWs7Y2FzZSBmcTphLmNoaWxkcmVuLnJldmVyc2UoKTticmVhaztjYXNlIGdxOmEuY2hpbGRyZW4uc29ydChhLmNvbXBhcmVyKTticmVhaztjYXNlIGhxOmEuY2hpbGRyZW4uc29ydChhLmNvbXBhcmVyKTthLmNoaWxkcmVuLnJldmVyc2UoKTticmVhaztkZWZhdWx0OnQubSgiVW5oYW5kbGVkIHNvcnRpbmcgdmFsdWUgIithLnNvcnRpbmcudG9TdHJpbmcoKSl9fTtYLnByb3RvdHlwZS5Oej1mdW5jdGlvbigpe2lmKHRoaXMuY29tbWVudHMpZm9yKHZhciBhPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rO2EubmV4dCgpOyl0aGlzLmFkZENvbW1lbnRzKGEudmFsdWUpfTsNClgucHJvdG90eXBlLmFkZENvbW1lbnRzPWZ1bmN0aW9uKGEpe2UmJnQubChhLE9wLFgsImFkZENvbW1lbnRzOnYiKTt2YXIgYj1hLmFuZ2xlLGM9YS5wYXJlbnQsZD0wLGY9aXEsZj0hMTtudWxsIT09YyYmKGQ9Yy5hbmdsZSxmPWMuYWxpZ25tZW50LGY9anEoZikpO3ZhciBiPTkwPT09Ynx8MjcwPT09YixkPTkwPT09ZHx8MjcwPT09ZCxjPTA9PT1hLkdtLGc9MCxoPTAsaz0wLGw9YS5jb21tZW50U3BhY2luZztpZihudWxsIT09YS5HYylmb3IodmFyIG09YS5HYy5CRSgpO20ubmV4dCgpOyl7dmFyIG49bS52YWx1ZTsiQ29tbWVudCI9PT1uLlpjJiZuLlFhKCkmJihudWxsPT09YS5jb21tZW50cyYmKGEuY29tbWVudHM9W10pLGEuY29tbWVudHMucHVzaChuKSxuLnNmKCksbj1uLkVhLGImJiFjfHwhZiYmIWQmJmN8fGYmJmQmJmM/KGc9TWF0aC5tYXgoZyxuLndpZHRoKSxoKz1uLmhlaWdodCtNYXRoLmFicyhrKSk6KGcrPW4ud2lkdGgrTWF0aC5hYnMoayksaD1NYXRoLm1heChoLG4uaGVpZ2h0KSksDQprPWwpfW51bGwhPT1hLmNvbW1lbnRzJiYoYiYmIWN8fCFmJiYhZCYmY3x8ZiYmZCYmYz8oZys9TWF0aC5hYnMoYS5jb21tZW50TWFyZ2luKSxoPU1hdGgubWF4KDAsaC1hLmhlaWdodCkpOihoKz1NYXRoLmFicyhhLmNvbW1lbnRNYXJnaW4pLGc9TWF0aC5tYXgoMCxnLWEud2lkdGgpKSxmPXQuaGsoMCwwLGEuVC53aWR0aCtnLGEuVC5oZWlnaHQraCksYS5PYj1mLHQuaGMoZikpfTtmdW5jdGlvbiBqcShhKXtyZXR1cm4gYT09PWtxfHxhPT09JHB8fGE9PT1scXx8YT09PW1xfWZ1bmN0aW9uIG5xKGEpe3JldHVybiBhPT09a3F8fGE9PT0kcH0NCmZ1bmN0aW9uIG9xKGEpe2UmJnQubChhLE9wLFgsImlzTGVmdFNpZGVCdXM6diIpO3ZhciBiPWEucGFyZW50O2lmKG51bGwhPT1iKXt2YXIgYz1iLmFsaWdubWVudDtpZihqcShjKSl7aWYobnEoYykpe2I9Yi5jaGlsZHJlbjtmb3IoYz0wO2M8Yi5sZW5ndGgmJmEhPT1iW2NdOyljKys7cmV0dXJuIDA9PT1jJTJ9aWYoYz09PWxxKXJldHVybiEwfX1yZXR1cm4hMX0NClgucHJvdG90eXBlLmxheW91dENvbW1lbnRzPWZ1bmN0aW9uKGEpe2UmJnQubChhLE9wLFgsImxheW91dENvbW1lbnRzOnYiKTtpZihudWxsIT09YS5jb21tZW50cyl7dmFyIGI9YS5HYy5FYSxjPWEucGFyZW50LGQ9YS5hbmdsZSxmPTAsZz1pcSxnPSExO251bGwhPT1jJiYoZj1jLmFuZ2xlLGc9Yy5hbGlnbm1lbnQsZz1qcShnKSk7Zm9yKHZhciBkPTkwPT09ZHx8MjcwPT09ZCxoPTkwPT09Znx8MjcwPT09ZixrPTA9PT1hLkdtLGw9b3EoYSksbT0wLG49YS5jb21tZW50cyxwPW4ubGVuZ3RoLHE9dC5LKCkscj0wO3I8cDtyKyspe3ZhciBjPW5bcl0scz1jLkVhO2lmKGQmJiFrfHwhZyYmIWgmJmt8fGcmJmgmJmspe2lmKDEzNTxmJiYhZ3x8aCYmbClpZigwPD1hLmNvbW1lbnRNYXJnaW4pe3EucChhLlQueC1hLmNvbW1lbnRNYXJnaW4tcy53aWR0aCxhLlQueSttKTtjLm1vdmUocSk7Zm9yKHZhciB1PWMud2coKTt1Lm5leHQoKTspYz11LnZhbHVlLGMucGI9VWIsYy50Yj1WYn1lbHNlIGZvcihxLnAoYS5ULngrDQoyKmEuTy54LWEuY29tbWVudE1hcmdpbixhLlQueSttKSxjLm1vdmUocSksdT1jLndnKCk7dS5uZXh0KCk7KWM9dS52YWx1ZSxjLnBiPVZiLGMudGI9VWI7ZWxzZSBpZigwPD1hLmNvbW1lbnRNYXJnaW4pZm9yKHEucChhLlQueCsyKmEuTy54K2EuY29tbWVudE1hcmdpbixhLlQueSttKSxjLm1vdmUocSksdT1jLndnKCk7dS5uZXh0KCk7KWM9dS52YWx1ZSxjLnBiPVZiLGMudGI9VWI7ZWxzZSBmb3IocS5wKGEuVC54K2EuY29tbWVudE1hcmdpbi1zLndpZHRoLGEuVC55K20pLGMubW92ZShxKSx1PWMud2coKTt1Lm5leHQoKTspYz11LnZhbHVlLGMucGI9VWIsYy50Yj1WYjttPTA8PWEuY29tbWVudFNwYWNpbmc/bSsocy5oZWlnaHQrYS5jb21tZW50U3BhY2luZyk6bSsoYS5jb21tZW50U3BhY2luZy1zLmhlaWdodCl9ZWxzZXtpZigxMzU8ZiYmIWd8fCFoJiZsKWlmKDA8PWEuY29tbWVudE1hcmdpbilmb3IocS5wKGEuVC54K20sYS5ULnktYS5jb21tZW50TWFyZ2luLXMuaGVpZ2h0KSwNCmMubW92ZShxKSx1PWMud2coKTt1Lm5leHQoKTspYz11LnZhbHVlLGMucGI9UWIsYy50Yj1XYjtlbHNlIGZvcihxLnAoYS5ULngrbSxhLlQueSsyKmEuTy55LWEuY29tbWVudE1hcmdpbiksYy5tb3ZlKHEpLHU9Yy53ZygpO3UubmV4dCgpOyljPXUudmFsdWUsYy5wYj1XYixjLnRiPVFiO2Vsc2UgaWYoMDw9YS5jb21tZW50TWFyZ2luKWZvcihxLnAoYS5ULngrbSxhLlQueSsyKmEuTy55K2EuY29tbWVudE1hcmdpbiksYy5tb3ZlKHEpLHU9Yy53ZygpO3UubmV4dCgpOyljPXUudmFsdWUsYy5wYj1XYixjLnRiPVFiO2Vsc2UgZm9yKHEucChhLlQueCttLGEuVC55K2EuY29tbWVudE1hcmdpbi1zLmhlaWdodCksYy5tb3ZlKHEpLHU9Yy53ZygpO3UubmV4dCgpOyljPXUudmFsdWUsYy5wYj1RYixjLnRiPVdiO209MDw9YS5jb21tZW50U3BhY2luZz9tKyhzLndpZHRoK2EuY29tbWVudFNwYWNpbmcpOm0rKGEuY29tbWVudFNwYWNpbmctcy53aWR0aCl9fXQuQihxKTtiPW0tYS5jb21tZW50U3BhY2luZy0NCihkP2IuaGVpZ2h0OmIud2lkdGgpO2lmKHRoaXMuSWY9PT1LcClmb3IoYT1hLmdjO2EubmV4dCgpOylmPWEudmFsdWUsKGM9Zi5saW5rKSYmIWMuZGomJihjLmNrPTA8Yj9iOk5hTik7ZWxzZSBmb3IoYT1hLnJjO2EubmV4dCgpOylmPWEudmFsdWUsKGM9Zi5saW5rKSYmIWMuZGomJihjLmlrPTA8Yj9iOk5hTil9fTsNClgucHJvdG90eXBlLmxheW91dFRyZWU9ZnVuY3Rpb24oYSl7aWYobnVsbCE9PWEpe2UmJnQubChhLE9wLFgsImxheW91dFRyZWU6diIpO2Zvcih2YXIgYj1hLmNoaWxkcmVuLGM9Yi5sZW5ndGgsZD0wO2Q8YztkKyspdGhpcy5sYXlvdXRUcmVlKGJbZF0pO3N3aXRjaChhLmNvbXBhY3Rpb24pe2Nhc2UgcHE6cXEodGhpcyxhKTticmVhaztjYXNlIHJxOmlmKGEuYWxpZ25tZW50PT09JHApcXEodGhpcyxhKTtlbHNlIGlmKGUmJnQubChhLE9wLFgsImxheW91dFRyZWVCbG9jazp2IiksMD09PWEuR20pe3ZhciBkPWEucGFyZW50LGI9ITEsYz0wLGY9aXE7bnVsbCE9PWQmJihjPWQuYW5nbGUsZj1kLmFsaWdubWVudCxiPWpxKGYpKTtkPW9xKGEpO2EubmEucCgwLDApO2EuWmEucChhLndpZHRoLGEuaGVpZ2h0KTtudWxsPT09YS5wYXJlbnR8fG51bGw9PT1hLmNvbW1lbnRzfHwoMTgwIT09YyYmMjcwIT09Y3x8YikmJiFkP2EuSWEucCgwLDApOjE4MD09PWMmJiFifHwoOTA9PT1jfHwyNzA9PT0NCmMpJiZkP2EuSWEucChhLndpZHRoLTIqYS5PLngsMCk6YS5JYS5wKDAsYS5oZWlnaHQtMiphLk8ueSk7YS5zdD1udWxsO2EuSnQ9bnVsbH1lbHNle2Zvcih2YXIgZz1zcShhKSxiPTkwPT09Z3x8MjcwPT09ZyxoPTAsaz1hLmNoaWxkcmVuLGw9ay5sZW5ndGgsbT0wO208bDttKyspdmFyIG49a1ttXSxoPU1hdGgubWF4KGgsYj9uLlphLndpZHRoOm4uWmEuaGVpZ2h0KTt2YXIgcD1hLmFsaWdubWVudCxkPXA9PT10cSxxPXA9PT11cSxyPWpxKHApLHM9TWF0aC5tYXgoMCxhLmJyZWFkdGhMaW1pdCksYz12cShhKSx1PWEubm9kZVNwYWNpbmcsdj13cShhKSxEPWEucm93U3BhY2luZyxBPTA7aWYoZHx8cXx8YS5PcHx8YS5QcCYmMT09PWEubWF4R2VuZXJhdGlvbkNvdW50KUE9TWF0aC5tYXgoMCxhLnJvd0luZGVudCk7dmFyIGQ9YS53aWR0aCxmPWEuaGVpZ2h0LEc9MCxMPTAsTj0wLE89bnVsbCxVPW51bGwsWT0wLGJhPTAsUj0wLHhhPTAsWWE9MCx6YT0wLE5hPTAsdmE9MCxuPTA7ciYmIW5xKHApJiYNCjEzNTxnJiZrLnJldmVyc2UoKTtpZihucShwKSlpZigxPGwpZm9yKG09MDttPGw7bSsrKTA9PT1tJTImJm0hPT1sLTE/dmE9TWF0aC5tYXgodmEsYj9rW21dLlphLndpZHRoOmtbbV0uWmEuaGVpZ2h0KTowIT09bSUyJiYobj1NYXRoLm1heChuLGI/a1ttXS5aYS53aWR0aDprW21dLlphLmhlaWdodCkpO2Vsc2UgMT09PWwmJih2YT1iP2tbMF0uWmEud2lkdGg6a1swXS5aYS5oZWlnaHQpO2lmKHIpe3N3aXRjaChwKXtjYXNlIGtxOmJhPTEzNT5nP3hxKGEsayx2YSxHLEwpOnlxKGEsayx2YSxHLEwpO3ZhPWJhWzBdO0c9YmFbMV07TD1iYVsyXTticmVhaztjYXNlIGxxOmZvcihtPTA7bTxsO20rKyl7dmFyIG49a1ttXSxQYT1uLlphLE89MD09PXphPzA6RDtiPyhuLm5hLnAoaC1QYS53aWR0aCx4YStPKSxHPU1hdGgubWF4KEcsUGEud2lkdGgpLEw9TWF0aC5tYXgoTCx4YStPK1BhLmhlaWdodCkseGErPU8rUGEuaGVpZ2h0KToobi5uYS5wKFIrTyxoLVBhLmhlaWdodCksRz1NYXRoLm1heChHLA0KUitPK1BhLndpZHRoKSxMPU1hdGgubWF4KEwsUGEuaGVpZ2h0KSxSKz1PK1BhLndpZHRoKTt6YSsrfWJyZWFrO2Nhc2UgbXE6Zm9yKG09MDttPGw7bSsrKW49a1ttXSxQYT1uLlphLE89MD09PXphPzA6RCxiPyhuLm5hLnAodS8yK2EuTy54LHhhK08pLEc9TWF0aC5tYXgoRyxQYS53aWR0aCksTD1NYXRoLm1heChMLHhhK08rUGEuaGVpZ2h0KSx4YSs9TytQYS5oZWlnaHQpOihuLm5hLnAoUitPLHUvMithLk8ueSksRz1NYXRoLm1heChHLFIrTytQYS53aWR0aCksTD1NYXRoLm1heChMLFBhLmhlaWdodCksUis9TytQYS53aWR0aCksemErK31PPXpxKHRoaXMsMik7VT16cSh0aGlzLDIpO2I/KE9bMF0ucCgwLDApLE9bMV0ucCgwLEwpLFVbMF0ucChHLDApKTooT1swXS5wKDAsMCksT1sxXS5wKEcsMCksVVswXS5wKDAsTCkpO1VbMV0ucChHLEwpfWVsc2UgZm9yKG09MDttPGw7bSsrKXtuPWtbbV07UGE9bi5aYTtpZihiKXswPHMmJjA8emEmJlIrdStQYS53aWR0aD5zJiYoUjxoJiZBcShhLA0KcCxoLVIsMCxOYSxtLTEpLFlhKyssemE9MCxOYT1tLE49TCxSPTAseGE9MTM1PGc/LUwtRDpMK0QpO0JxKHRoaXMsbiwwLHhhKTt2YXIgR2E9MDtpZigwPT09emEpe2lmKE89bi5zdCxVPW4uSnQsWT1QYS53aWR0aCxiYT1QYS5oZWlnaHQsbnVsbD09PU98fG51bGw9PT1VfHxnIT09c3EobikpTz16cSh0aGlzLDIpLFU9enEodGhpcywyKSxPWzBdLnAoMCwwKSxPWzFdLnAoMCxiYSksVVswXS5wKFksMCksVVsxXS5wKFksYmEpfWVsc2UgYmE9Q3EodGhpcyxhLG4sTyxVLFksYmEpLEdhPWJhWzBdLE89YmFbMV0sVT1iYVsyXSxZPWJhWzNdLGJhPWJhWzRdLFI8UGEud2lkdGgmJjA+R2EmJihEcShhLC1HYSwwLE5hLG0tMSksRXEoTywtR2EsMCksRXEoVSwtR2EsMCksR2E9MCk7bi5uYS5wKEdhLHhhKTtHPU1hdGgubWF4KEcsWSk7TD1NYXRoLm1heChMLE4rKDA9PT1ZYT8wOkQpK1BhLmhlaWdodCk7Uj1ZfWVsc2V7MDxzJiYwPHphJiZ4YSt1K1BhLmhlaWdodD5zJiYoeGE8aCYmQXEoYSxwLA0KMCxoLXhhLE5hLG0tMSksWWErKyx6YT0wLE5hPW0sTj1HLHhhPTAsUj0xMzU8Zz8tRy1EOkcrRCk7QnEodGhpcyxuLFIsMCk7R2E9MDtpZigwPT09emEpe2lmKE89bi5zdCxVPW4uSnQsWT1QYS53aWR0aCxiYT1QYS5oZWlnaHQsbnVsbD09PU98fG51bGw9PT1VfHxnIT09c3EobikpTz16cSh0aGlzLDIpLFU9enEodGhpcywyKSxPWzBdLnAoMCwwKSxPWzFdLnAoWSwwKSxVWzBdLnAoMCxiYSksVVsxXS5wKFksYmEpfWVsc2UgYmE9Q3EodGhpcyxhLG4sTyxVLFksYmEpLEdhPWJhWzBdLE89YmFbMV0sVT1iYVsyXSxZPWJhWzNdLGJhPWJhWzRdLHhhPFBhLmhlaWdodCYmMD5HYSYmKERxKGEsMCwtR2EsTmEsbS0xKSxFcShPLDAsLUdhKSxFcShVLDAsLUdhKSxHYT0wKTtuLm5hLnAoUixHYSk7TD1NYXRoLm1heChMLGJhKTtHPU1hdGgubWF4KEcsTisoMD09PVlhPzA6RCkrUGEud2lkdGgpO3hhPWJhfXphKyt9MDxZYSYmKGI/KEwrPU1hdGgubWF4KDAsYyksUjxHJiZBcShhLHAsRy1SLDAsDQpOYSxsLTEpLDA8QSYmKHF8fERxKGEsQSwwLDAsbC0xKSxHKz1BKSk6KEcrPU1hdGgubWF4KDAsYykseGE8TCYmQXEoYSxwLDAsTC14YSxOYSxsLTEpLDA8QSYmKHF8fERxKGEsMCxBLDAsbC0xKSxMKz1BKSkpO3E9aD0wO3N3aXRjaChwKXtjYXNlIEZxOmI/aCs9Ry8yLWEuTy54LXYvMjpxKz1MLzItYS5PLnktdi8yO2JyZWFrO2Nhc2UgaXE6MDxZYT9iP2grPUcvMi1hLk8ueC12LzI6cSs9TC8yLWEuTy55LXYvMjpiPyhtPWtbMF0ubmEueCtrWzBdLklhLngsdmE9a1tsLTFdLm5hLngra1tsLTFdLklhLngrMiprW2wtMV0uTy54LGgrPW0rKHZhLW0pLzItYS5PLngtdi8yKToobT1rWzBdLm5hLnkra1swXS5JYS55LHZhPWtbbC0xXS5uYS55K2tbbC0xXS5JYS55KzIqa1tsLTFdLk8ueSxxKz1tKyh2YS1tKS8yLWEuTy55LXYvMik7YnJlYWs7Y2FzZSB0cTpiPyhoLT12LEcrPXYpOihxLT12LEwrPXYpO2JyZWFrO2Nhc2UgdXE6Yj8oaCs9Ry1hLndpZHRoK3YsRys9dik6KHErPUwtYS5oZWlnaHQrDQp2LEwrPXYpO2JyZWFrO2Nhc2Uga3E6Yj9oPTE8bD9oKyh2YSt1LzItYS5PLngpOmgrKGtbMF0uTy54LWEuTy54K2tbMF0uSWEueCk6cT0xPGw/cSsodmErdS8yLWEuTy55KTpxKyhrWzBdLk8ueS1hLk8ueStrWzBdLklhLnkpO2JyZWFrO2Nhc2UgbHE6Yj9oKz1HK3UvMi1hLk8ueDpxKz1MK3UvMi1hLk8ueTticmVhaztjYXNlIG1xOmJyZWFrO2RlZmF1bHQ6dC5tKCJVbmhhbmRsZWQgYWxpZ25tZW50IHZhbHVlICIrcC50b1N0cmluZygpKX1mb3IobT0wO208bDttKyspbj1rW21dLGI/bi5uYS5wKG4ubmEueCtuLklhLngtaCxuLm5hLnkrKDEzNTxnPyhyPy1MOi1uLlphLmhlaWdodCkrbi5JYS55LWM6ZitjK24uSWEueSkpOm4ubmEucChuLm5hLngrKDEzNTxnPyhyPy1HOi1uLlphLndpZHRoKStuLklhLngtYzpkK2Mrbi5JYS54KSxuLm5hLnkrbi5JYS55LXEpO2w9az0wO3I/Yj8oRz1HcShhLEcsaCksMD5oJiYoaD0wKSwxMzU8ZyYmKHErPUwrYyksTCs9ZitjLHA9PT1tcSYmKGsrPXUvDQoyK2EuTy54KSxsKz1mK2MpOigxMzU8ZyYmKGgrPUcrYyksRys9ZCtjLEw9SHEoYSxMLHEpLDA+cSYmKHE9MCkscD09PW1xJiYobCs9dS8yK2EuTy55KSxrKz1kK2MpOmI/KG51bGw9PT1hLmNvbW1lbnRzP2Q+RyYmKHA9SXEocCxkLUcsMCksaz1wWzBdLGw9cFsxXSxHPWQsaD0wKTpHPUdxKGEsRyxoKSwwPmgmJihrLT1oLGg9MCksMTM1PGcmJihxKz1MK2MpLEw9TWF0aC5tYXgoTWF0aC5tYXgoTCxmKSxMK2YrYyksbCs9ZitjKTooMTM1PGcmJihoKz1HK2MpLEc9TWF0aC5tYXgoTWF0aC5tYXgoRyxkKSxHK2QrYyksbnVsbD09PWEuY29tbWVudHM/Zj5MJiYocD1JcShwLDAsZi1MKSxrPXBbMF0sbD1wWzFdLEw9ZixxPTApOkw9SHEoYSxMLHEpLDA+cSYmKGwtPXEscT0wKSxrKz1kK2MpO2lmKDA8WWEpZz16cSh0aGlzLDQpLHA9enEodGhpcyw0KSxiPyhnWzJdLnAoMCxmK2MpLGdbM10ucChnWzJdLngsTCkscFsyXS5wKEcsZ1syXS55KSxwWzNdLnAocFsyXS54LGdbM10ueSkpOihnWzJdLnAoZCsNCmMsMCksZ1szXS5wKEcsZ1syXS55KSxwWzJdLnAoZ1syXS54LEwpLHBbM10ucChnWzNdLngscFsyXS55KSk7ZWxzZXtnPXpxKHRoaXMsTy5sZW5ndGgrMik7cD16cSh0aGlzLFUubGVuZ3RoKzIpO2ZvcihtPTA7bTxPLmxlbmd0aDttKyspcj1PW21dLGdbbSsyXS5wKHIueCtrLHIueStsKTtmb3IobT0wO208VS5sZW5ndGg7bSsrKXI9VVttXSxwW20rMl0ucChyLngrayxyLnkrbCl9Yj8oZ1swXS5wKGgsMCksZ1sxXS5wKGdbMF0ueCxmKSxnWzJdLnk8Z1sxXS55JiYoZ1syXS54PmdbMF0ueD9nWzJdLmFzc2lnbihnWzFdKTpnWzFdLmFzc2lnbihnWzJdKSksZ1szXS55PGdbMl0ueSYmKGdbM10ueD5nWzBdLng/Z1szXS5hc3NpZ24oZ1syXSk6Z1syXS5hc3NpZ24oZ1szXSkpLHBbMF0ucChoK2QsMCkscFsxXS5wKHBbMF0ueCxmKSxwWzJdLnk8cFsxXS55JiYocFsyXS54PHBbMF0ueD9wWzJdLmFzc2lnbihwWzFdKTpwWzFdLmFzc2lnbihwWzJdKSkscFszXS55PHBbMl0ueSYmKHBbM10ueDwNCnBbMF0ueD9wWzNdLmFzc2lnbihwWzJdKTpwWzJdLmFzc2lnbihwWzNdKSksZ1syXS55LT1jLzIscFsyXS55LT1jLzIpOihnWzBdLnAoMCxxKSxnWzFdLnAoZCxnWzBdLnkpLGdbMl0ueDxnWzFdLngmJihnWzJdLnk+Z1swXS55P2dbMl0uYXNzaWduKGdbMV0pOmdbMV0uYXNzaWduKGdbMl0pKSxnWzNdLng8Z1syXS54JiYoZ1szXS55PmdbMF0ueT9nWzNdLmFzc2lnbihnWzJdKTpnWzJdLmFzc2lnbihnWzNdKSkscFswXS5wKDAscStmKSxwWzFdLnAoZCxwWzBdLnkpLHBbMl0ueDxwWzFdLngmJihwWzJdLnk8cFswXS55P3BbMl0uYXNzaWduKHBbMV0pOnBbMV0uYXNzaWduKHBbMl0pKSxwWzNdLng8cFsyXS54JiYocFszXS55PHBbMF0ueT9wWzNdLmFzc2lnbihwWzJdKTpwWzJdLmFzc2lnbihwWzNdKSksZ1syXS54LT1jLzIscFsyXS54LT1jLzIpO0pxKHRoaXMsTyk7SnEodGhpcyxVKTthLnN0PWc7YS5KdD1wO2EuSWEucChoLHEpO2EuWmEucChHLEwpfWJyZWFrO2RlZmF1bHQ6dC5tKCJVbmhhbmRsZWQgY29tcGFjdGlvbiB2YWx1ZSAiKw0KYS5jb21wYWN0aW9uLnRvU3RyaW5nKCkpfX19Ow0KZnVuY3Rpb24gcXEoYSxiKXtlJiZ0LmwoYixPcCxYLCJsYXlvdXRUcmVlTm9uZTp2Iik7aWYoMD09PWIuR20pe3ZhciBjPSExLGQ9MCxmPWlxO251bGwhPT1iLnBhcmVudCYmKGQ9Yi5wYXJlbnQuYW5nbGUsZj1iLnBhcmVudC5hbGlnbm1lbnQsYz1qcShmKSk7Zj1vcShiKTtiLm5hLnAoMCwwKTtiLlphLnAoYi53aWR0aCxiLmhlaWdodCk7bnVsbD09PWIucGFyZW50fHxudWxsPT09Yi5jb21tZW50c3x8KDE4MCE9PWQmJjI3MCE9PWR8fGMpJiYhZj9iLklhLnAoMCwwKToxODA9PT1kJiYhY3x8KDkwPT09ZHx8MjcwPT09ZCkmJmY/Yi5JYS5wKGIud2lkdGgtMipiLk8ueCwwKTpiLklhLnAoMCxiLmhlaWdodC0yKmIuTy55KX1lbHNle2Zvcih2YXIgYz1zcShiKSxkPTkwPT09Y3x8MjcwPT09YyxnPTAsZj1iLmNoaWxkcmVuLGg9Zi5sZW5ndGgsaz0wO2s8aDtrKyspdmFyIGw9ZltrXSxnPU1hdGgubWF4KGcsZD9sLlphLndpZHRoOmwuWmEuaGVpZ2h0KTt2YXIgbT1iLmFsaWdubWVudCxuPQ0KbT09PXRxLHA9bT09PXVxLHE9anEobSkscj1NYXRoLm1heCgwLGIuYnJlYWR0aExpbWl0KSxzPXZxKGIpLHU9Yi5ub2RlU3BhY2luZyx2PXdxKGIpLEQ9bnx8cD8wOnYvMixBPWIucm93U3BhY2luZyxHPTA7aWYobnx8cHx8Yi5PcHx8Yi5QcCYmMT09PWIubWF4R2VuZXJhdGlvbkNvdW50KUc9TWF0aC5tYXgoMCxiLnJvd0luZGVudCk7dmFyIG49Yi53aWR0aCxMPWIuaGVpZ2h0LE49MCxPPTAsVT0wLFk9MCxiYT0wLFI9MCx4YT0wLFlhPTAsemE9MCxOYT0wO3EmJiFucShtKSYmMTM1PGMmJmYucmV2ZXJzZSgpO2lmKG5xKG0pKWlmKDE8aClmb3Ioaz0wO2s8aDtrKyspe3ZhciBsPWZba10sdmE9bC5aYTswPT09ayUyJiZrIT09aC0xP3phPU1hdGgubWF4KHphLChkP3ZhLndpZHRoOnZhLmhlaWdodCkrS3EobCktdSk6MCE9PWslMiYmKE5hPU1hdGgubWF4KE5hLChkP3ZhLndpZHRoOnZhLmhlaWdodCkrS3EobCktdSkpfWVsc2UgMT09PWgmJih6YT1kP2ZbMF0uWmEud2lkdGg6ZlswXS5aYS5oZWlnaHQpOw0KaWYocSlzd2l0Y2gobSl7Y2FzZSBrcTpjYXNlICRwOk89MTM1PmM/eHEoYixmLHphLE4sTyk6eXEoYixmLHphLE4sTyk7emE9T1swXTtOPU9bMV07Tz1PWzJdO2JyZWFrO2Nhc2UgbHE6Zm9yKGs9MDtrPGg7aysrKWw9ZltrXSx2YT1sLlphLHI9MD09PXhhPzA6QSxkPyhsLm5hLnAoZy12YS53aWR0aCxiYStyKSxOPU1hdGgubWF4KE4sdmEud2lkdGgpLE89TWF0aC5tYXgoTyxiYStyK3ZhLmhlaWdodCksYmErPXIrdmEuaGVpZ2h0KToobC5uYS5wKFkrcixnLXZhLmhlaWdodCksTj1NYXRoLm1heChOLFkrcit2YS53aWR0aCksTz1NYXRoLm1heChPLHZhLmhlaWdodCksWSs9cit2YS53aWR0aCkseGErKzticmVhaztjYXNlIG1xOmZvcihnPTA7ZzxoO2crKylsPWZbZ10sdmE9bC5aYSxyPTA9PT14YT8wOkEsZD8obC5uYS5wKHUvMitiLk8ueCxiYStyKSxOPU1hdGgubWF4KE4sdmEud2lkdGgpLE89TWF0aC5tYXgoTyxiYStyK3ZhLmhlaWdodCksYmErPXIrdmEuaGVpZ2h0KToobC5uYS5wKFkrDQpyLHUvMitiLk8ueSksTj1NYXRoLm1heChOLFkrcit2YS53aWR0aCksTz1NYXRoLm1heChPLHZhLmhlaWdodCksWSs9cit2YS53aWR0aCkseGErK31lbHNlIGZvcihrPTA7azxoO2srKylsPWZba10sdmE9bC5aYSxkPygwPHImJjA8eGEmJlkrdSt2YS53aWR0aD5yJiYoWTxnJiZBcShiLG0sZy1ZLDAsWWEsay0xKSxSKysseGE9MCxZYT1rLFU9TyxZPTAsYmE9MTM1PGM/LU8tQTpPK0EpLE5hPTA9PT14YT9EOnUsQnEoYSxsLDAsYmEpLGwubmEucChZK05hLGJhKSxOPU1hdGgubWF4KE4sWStOYSt2YS53aWR0aCksTz1NYXRoLm1heChPLFUrKDA9PT1SPzA6QSkrdmEuaGVpZ2h0KSxZKz1OYSt2YS53aWR0aCk6KDA8ciYmMDx4YSYmYmErdSt2YS5oZWlnaHQ+ciYmKGJhPGcmJkFxKGIsbSwwLGctYmEsWWEsay0xKSxSKysseGE9MCxZYT1rLFU9TixiYT0wLFk9MTM1PGM/LU4tQTpOK0EpLE5hPTA9PT14YT9EOnUsQnEoYSxsLFksMCksbC5uYS5wKFksYmErTmEpLE89TWF0aC5tYXgoTyxiYSsNCk5hK3ZhLmhlaWdodCksTj1NYXRoLm1heChOLFUrKDA9PT1SPzA6QSkrdmEud2lkdGgpLGJhKz1OYSt2YS5oZWlnaHQpLHhhKys7MDxSJiYoZD8oTys9TWF0aC5tYXgoMCxzKSxZPE4mJkFxKGIsbSxOLVksMCxZYSxoLTEpLDA8RyYmKHB8fERxKGIsRywwLDAsaC0xKSxOKz1HKSk6KE4rPU1hdGgubWF4KDAscyksYmE8TyYmQXEoYixtLDAsTy1iYSxZYSxoLTEpLDA8RyYmKHB8fERxKGIsMCxHLDAsaC0xKSxPKz1HKSkpO0c9cD0wO3N3aXRjaChtKXtjYXNlIEZxOmQ/cCs9Ti8yLWIuTy54LXYvMjpHKz1PLzItYi5PLnktdi8yO2JyZWFrO2Nhc2UgaXE6MDxSP2Q/cCs9Ti8yLWIuTy54LXYvMjpHKz1PLzItYi5PLnktdi8yOmQ/KG09ZlswXS5uYS54K2ZbMF0uSWEueCx1PWZbaC0xXS5uYS54K2ZbaC0xXS5JYS54KzIqZltoLTFdLk8ueCxwKz1tKyh1LW0pLzItYi5PLngtdi8yKToobT1mWzBdLm5hLnkrZlswXS5JYS55LHU9ZltoLTFdLm5hLnkrZltoLTFdLklhLnkrMipmW2gtMV0uTy55LA0KRys9bSsodS1tKS8yLWIuTy55LXYvMik7YnJlYWs7Y2FzZSB0cTpkPyhwLT12LE4rPXYpOihHLT12LE8rPXYpO2JyZWFrO2Nhc2UgdXE6ZD8ocCs9Ti1iLndpZHRoK3YsTis9dik6KEcrPU8tYi5oZWlnaHQrdixPKz12KTticmVhaztjYXNlIGtxOmNhc2UgJHA6ZD9wPTE8aD9wKyh6YSt1LzItYi5PLngpOnArKGZbMF0uTy54LWIuTy54K2ZbMF0uSWEueCk6Rz0xPGg/RysoemErdS8yLWIuTy55KTpHKyhmWzBdLk8ueS1iLk8ueStmWzBdLklhLnkpO2JyZWFrO2Nhc2UgbHE6ZD9wKz1OK3UvMi1iLk8ueDpHKz1PK3UvMi1iLk8ueTticmVhaztjYXNlIG1xOmJyZWFrO2RlZmF1bHQ6dC5tKCJVbmhhbmRsZWQgYWxpZ25tZW50IHZhbHVlICIrbS50b1N0cmluZygpKX1mb3Ioaz0wO2s8aDtrKyspbD1mW2tdLGQ/bC5uYS5wKGwubmEueCtsLklhLngtcCxsLm5hLnkrKDEzNTxjPyhxPy1POi1sLlphLmhlaWdodCkrbC5JYS55LXM6TCtzK2wuSWEueSkpOmwubmEucChsLm5hLngrKDEzNTxjPyhxPw0KLU46LWwuWmEud2lkdGgpK2wuSWEueC1zOm4rcytsLklhLngpLGwubmEueStsLklhLnktRyk7ZD8oTj1HcShiLE4scCksMD5wJiYocD0wKSwxMzU8YyYmKEcrPU8rcyksTys9TCtzKTooMTM1PGMmJihwKz1OK3MpLE4rPW4rcyxPPUhxKGIsTyxHKSwwPkcmJihHPTApKTtiLklhLnAocCxHKTtiLlphLnAoTixPKX19DQpmdW5jdGlvbiB4cShhLGIsYyxkLGYpe2UmJnQubChhLE9wLFgsImxheW91dEJ1c0NoaWxkcmVuUG9zRGlyOnYiKTt2YXIgZz1iLmxlbmd0aDtpZigwPT09ZylyZXR1cm4gYT1bXSxhWzBdPWMsYVsxXT1kLGFbMl09ZixhO2lmKDE9PT1nKXt2YXIgaD1iWzBdO2Q9aC5aYS53aWR0aDtmPWguWmEuaGVpZ2h0O2E9W107YVswXT1jO2FbMV09ZDthWzJdPWY7cmV0dXJuIGF9Zm9yKHZhciBrPWEubm9kZVNwYWNpbmcsbD1hLnJvd1NwYWNpbmcsbT05MD09PXNxKGEpLG49MCxwPTAscT0wLHI9MDtyPGc7cisrKWlmKCEoMCE9PXIlMnx8MTxnJiZyPT09Zy0xKSl7dmFyIGg9YltyXSxzPWguWmEsdT0wPT09bj8wOmw7aWYobSl7dmFyIHY9S3EoaCktaztoLm5hLnAoYy0ocy53aWR0aCt2KSxxK3UpO2Q9TWF0aC5tYXgoZCxzLndpZHRoK3YpO2Y9TWF0aC5tYXgoZixxK3Urcy5oZWlnaHQpO3ErPXUrcy5oZWlnaHR9ZWxzZSB2PUtxKGgpLWssaC5uYS5wKHArdSxjLShzLmhlaWdodCt2KSksZj1NYXRoLm1heChmLA0Kcy5oZWlnaHQrdiksZD1NYXRoLm1heChkLHArdStzLndpZHRoKSxwKz11K3Mud2lkdGg7bisrfXZhciBuPTAsRD1wLEE9cTttPyhwPWMrayxxPTApOihwPTAscT1jK2spO2ZvcihyPTA7cjxnO3IrKykwIT09ciUyJiYoaD1iW3JdLHM9aC5aYSx1PTA9PT1uPzA6bCxtPyh2PUtxKGgpLWssaC5uYS5wKHArdixxK3UpLGQ9TWF0aC5tYXgoZCxwK3Mud2lkdGgrdiksZj1NYXRoLm1heChmLHErdStzLmhlaWdodCkscSs9dStzLmhlaWdodCk6KHY9S3EoaCktayxoLm5hLnAocCt1LHErdiksZD1NYXRoLm1heChkLHArdStzLndpZHRoKSxmPU1hdGgubWF4KGYscStzLmhlaWdodCt2KSxwKz11K3Mud2lkdGgpLG4rKyk7MTxnJiYxPT09ZyUyJiYoaD1iW2ctMV0scz1oLlphLGI9THEoaCxtP01hdGgubWF4KE1hdGguYWJzKEEpLE1hdGguYWJzKHEpKTpNYXRoLm1heChNYXRoLmFicyhEKSxNYXRoLmFicyhwKSkpLG0/KGgubmEucChjK2svMi1oLk8ueC1oLklhLngsZitiKSxtPWMray8yLWguTy54LQ0KaC5JYS54LGQ9TWF0aC5tYXgoZCxtK3Mud2lkdGgpLDA+bSYmKGQtPW0pLGY9TWF0aC5tYXgoZixNYXRoLm1heChBLHEpK2Ircy5oZWlnaHQpLDA+aC5uYS54JiYoYz1ScShhLGgubmEueCwhMSxjLGspKSk6KGgubmEucChkK2IsYytrLzItaC5PLnktaC5JYS55KSxkPU1hdGgubWF4KGQsTWF0aC5tYXgoRCxwKStiK3Mud2lkdGgpLG09YytrLzItaC5PLnktaC5JYS55LGY9TWF0aC5tYXgoZixtK3MuaGVpZ2h0KSwwPm0mJihmLT1tKSwwPmgubmEueSYmKGM9UnEoYSxoLm5hLnksITAsYyxrKSkpKTthPVtdO2FbMF09YzthWzFdPWQ7YVsyXT1mO3JldHVybiBhfQ0KZnVuY3Rpb24geXEoYSxiLGMsZCxmKXtlJiZ0LmwoYSxPcCxYLCJsYXlvdXRCdXNDaGlsZHJlbk5lZ0Rpcjp2Iik7dmFyIGc9Yi5sZW5ndGg7aWYoMD09PWcpcmV0dXJuIGE9W10sYVswXT1jLGFbMV09ZCxhWzJdPWYsYTtpZigxPT09Zyl7dmFyIGg9YlswXTtkPWguWmEud2lkdGg7Zj1oLlphLmhlaWdodDthPVtdO2FbMF09YzthWzFdPWQ7YVsyXT1mO3JldHVybiBhfWZvcih2YXIgaz1hLm5vZGVTcGFjaW5nLGw9YS5yb3dTcGFjaW5nLG09MjcwPT09c3EoYSksbj0wLHA9MCxxPTAscj0wO3I8ZztyKyspaWYoISgwIT09ciUyfHwxPGcmJnI9PT1nLTEpKXt2YXIgaD1iW3JdLHM9aC5aYSx1PTA9PT1uPzA6bDtpZihtKXt2YXIgdj1LcShoKS1rLHE9cS0odStzLmhlaWdodCk7aC5uYS5wKGMtKHMud2lkdGgrdikscSk7ZD1NYXRoLm1heChkLHMud2lkdGgrdik7Zj1NYXRoLm1heChmLE1hdGguYWJzKHEpKX1lbHNlIHY9S3EoaCktayxwLT11K3Mud2lkdGgsaC5uYS5wKHAsYy0ocy5oZWlnaHQrDQp2KSksZj1NYXRoLm1heChmLHMuaGVpZ2h0K3YpLGQ9TWF0aC5tYXgoZCxNYXRoLmFicyhwKSk7bisrfXZhciBuPTAsRD1wLEE9cTttPyhwPWMrayxxPTApOihwPTAscT1jK2spO2ZvcihyPTA7cjxnO3IrKykwIT09ciUyJiYoaD1iW3JdLHM9aC5aYSx1PTA9PT1uPzA6bCxtPyh2PUtxKGgpLWsscS09dStzLmhlaWdodCxoLm5hLnAocCt2LHEpLGQ9TWF0aC5tYXgoZCxwK3Mud2lkdGgrdiksZj1NYXRoLm1heChmLE1hdGguYWJzKHEpKSk6KHY9S3EoaCktayxwLT11K3Mud2lkdGgsaC5uYS5wKHAscSt2KSxmPU1hdGgubWF4KGYscStzLmhlaWdodCt2KSxkPU1hdGgubWF4KGQsTWF0aC5hYnMocCkpKSxuKyspOzE8ZyYmMT09PWclMiYmKGg9YltnLTFdLHM9aC5aYSxsPUxxKGgsbT9NYXRoLm1heChNYXRoLmFicyhBKSxNYXRoLmFicyhxKSk6TWF0aC5tYXgoTWF0aC5hYnMoRCksTWF0aC5hYnMocCkpKSxtPyhoLm5hLnAoYytrLzItaC5PLngtaC5JYS54LC1mLXMuaGVpZ2h0LWwpLHA9YysNCmsvMi1oLk8ueC1oLklhLngsZD1NYXRoLm1heChkLHArcy53aWR0aCksMD5wJiYoZC09cCksZj1NYXRoLm1heChmLE1hdGguYWJzKE1hdGgubWluKEEscSkpK2wrcy5oZWlnaHQpLDA+aC5uYS54JiYoYz1ScShhLGgubmEueCwhMSxjLGspKSk6KGgubmEucCgtZC1zLndpZHRoLWwsYytrLzItaC5PLnktaC5JYS55KSxkPU1hdGgubWF4KGQsTWF0aC5hYnMoTWF0aC5taW4oRCxwKSkrbCtzLndpZHRoKSxwPWMray8yLWguTy55LWguSWEueSxmPU1hdGgubWF4KGYscCtzLmhlaWdodCksMD5wJiYoZi09cCksMD5oLm5hLnkmJihjPVJxKGEsaC5uYS55LCEwLGMsaykpKSk7Zm9yKHI9MDtyPGc7cisrKWg9YltyXSxtP2gubmEucChoLm5hLngsaC5uYS55K2YpOmgubmEucChoLm5hLngrZCxoLm5hLnkpO2E9W107YVswXT1jO2FbMV09ZDthWzJdPWY7cmV0dXJuIGF9DQpmdW5jdGlvbiBLcShhKXtlJiZ0LmwoYSxPcCxYLCJmaXhSZWxhdGl2ZVBvc3Rpb25zOmNoaWxkIik7cmV0dXJuIG51bGw9PT1hLnBhcmVudD8wOmEucGFyZW50Lm5vZGVTcGFjaW5nfWZ1bmN0aW9uIExxKGEpe2UmJnQubChhLE9wLFgsImZpeFJlbGF0aXZlUG9zdGlvbnM6bGFzdGNoaWxkIik7cmV0dXJuIG51bGw9PT1hLnBhcmVudD8wOmEucGFyZW50LnJvd1NwYWNpbmd9ZnVuY3Rpb24gUnEoYSxiLGMsZCxmKXtlJiZ0LmwoYSxPcCxYLCJmaXhSZWxhdGl2ZVBvc3Rpb25zOnYiKTthPWEuY2hpbGRyZW47Zm9yKHZhciBnPWEubGVuZ3RoLGg9MDtoPGc7aCsrKWM/YVtoXS5uYS5wKGFbaF0ubmEueCxhW2hdLm5hLnktYik6YVtoXS5uYS5wKGFbaF0ubmEueC1iLGFbaF0ubmEueSk7Yj1hW2ctMV07cmV0dXJuIE1hdGgubWF4KGQsYz9iLklhLnkrYi5PLnktZi8yOmIuSWEueCtiLk8ueC1mLzIpfQ0KZnVuY3Rpb24gR3EoYSxiLGMpe2UmJnQubChhLE9wLFgsImNhbGN1bGF0ZVN1YndpZHRoOnYiKTtzd2l0Y2goYS5hbGlnbm1lbnQpe2Nhc2UgaXE6Y2FzZSBGcTp2YXIgZD1iO2MrYS53aWR0aD5kJiYoZD1jK2Eud2lkdGgpOzA+YyYmKGQtPWMpO3JldHVybiBkO2Nhc2UgdHE6cmV0dXJuIGEud2lkdGg+Yj9hLndpZHRoOmI7Y2FzZSB1cTpyZXR1cm4gMiphLk8ueD5iP2Eud2lkdGg6YithLndpZHRoLTIqYS5PLng7Y2FzZSBrcTpjYXNlICRwOnJldHVybiBkPU1hdGgubWluKDAsYyksYz1NYXRoLm1heChiLGMrYS53aWR0aCksTWF0aC5tYXgoYS53aWR0aCxjLWQpO2Nhc2UgbHE6cmV0dXJuIGEud2lkdGgtYS5PLngrYS5ub2RlU3BhY2luZy8yK2I7Y2FzZSBtcTpyZXR1cm4gTWF0aC5tYXgoYS53aWR0aCxhLk8ueCthLm5vZGVTcGFjaW5nLzIrYik7ZGVmYXVsdDpyZXR1cm4gYn19DQpmdW5jdGlvbiBIcShhLGIsYyl7ZSYmdC5sKGEsT3AsWCwiY2FsY3VsYXRlU3ViaGVpZ2h0OnYiKTtzd2l0Y2goYS5hbGlnbm1lbnQpe2Nhc2UgaXE6Y2FzZSBGcTp2YXIgZD1iO2MrYS5oZWlnaHQ+ZCYmKGQ9YythLmhlaWdodCk7MD5jJiYoZC09Yyk7cmV0dXJuIGQ7Y2FzZSB0cTpyZXR1cm4gYS5oZWlnaHQ+Yj9hLmhlaWdodDpiO2Nhc2UgdXE6cmV0dXJuIDIqYS5PLnk+Yj9hLmhlaWdodDpiK2EuaGVpZ2h0LTIqYS5PLnk7Y2FzZSBrcTpjYXNlICRwOnJldHVybiBkPU1hdGgubWluKDAsYyksYz1NYXRoLm1heChiLGMrYS5oZWlnaHQpLE1hdGgubWF4KGEuaGVpZ2h0LGMtZCk7Y2FzZSBscTpyZXR1cm4gYS5oZWlnaHQtYS5PLnkrYS5ub2RlU3BhY2luZy8yK2I7Y2FzZSBtcTpyZXR1cm4gTWF0aC5tYXgoYS5oZWlnaHQsYS5PLnkrYS5ub2RlU3BhY2luZy8yK2IpO2RlZmF1bHQ6cmV0dXJuIGJ9fQ0KZnVuY3Rpb24gSXEoYSxiLGMpe2UmJnQubChhLGRhLFgsImFsaWduT2Zmc2V0OmFsaWduIik7c3dpdGNoKGEpe2Nhc2UgRnE6Yi89MjtjLz0yO2JyZWFrO2Nhc2UgaXE6Yi89MjtjLz0yO2JyZWFrO2Nhc2UgdHE6Yz1iPTA7YnJlYWs7Y2FzZSB1cTpicmVhaztkZWZhdWx0OnQubSgiVW5oYW5kbGVkIGFsaWdubWVudCB2YWx1ZSAiK2EudG9TdHJpbmcoKSl9YT1bXTthWzBdPWI7YVsxXT1jO3JldHVybiBhfWZ1bmN0aW9uIEFxKGEsYixjLGQsZixnKXtlJiZ0LmwoYSxPcCxYLCJzaGlmdFJlbFBvc0FsaWduOnYiKTtlJiZ0LmwoYixkYSxYLCJzaGlmdFJlbFBvc0FsaWduOmFsaWduIik7Yj1JcShiLGMsZCk7RHEoYSxiWzBdLGJbMV0sZixnKX1mdW5jdGlvbiBEcShhLGIsYyxkLGYpe2UmJnQubChhLE9wLFgsInNoaWZ0UmVsUG9zOnYiKTtpZigwIT09Ynx8MCE9PWMpZm9yKGE9YS5jaGlsZHJlbjtkPD1mO2QrKyl7dmFyIGc9YVtkXS5uYTtnLngrPWI7Zy55Kz1jfX0NCmZ1bmN0aW9uIEJxKGEsYixjLGQpe2UmJih0LmwoYixPcCxYLCJyZWNvcmRNaWRQb2ludHM6diIpLHQuaShjLCJudW1iZXIiLFgsInJlY29yZE1pZFBvaW50czp4IiksdC5pKGQsIm51bWJlciIsWCwicmVjb3JkTWlkUG9pbnRzOnkiKSk7dmFyIGY9Yi5wYXJlbnQ7c3dpdGNoKGEuSWYpe2Nhc2UgS3A6Zm9yKGE9Yi5yYzthLm5leHQoKTspYj1hLnZhbHVlLGIuZnJvbVZlcnRleD09PWYmJmIuU3IucChjLGQpO2JyZWFrO2Nhc2UgU3A6Zm9yKGE9Yi5nYzthLm5leHQoKTspYj1hLnZhbHVlLGIudG9WZXJ0ZXg9PT1mJiZiLlNyLnAoYyxkKTticmVhaztkZWZhdWx0OnQubSgiVW5oYW5kbGVkIHBhdGggdmFsdWUgIithLklmLnRvU3RyaW5nKCkpfX1mdW5jdGlvbiBFcShhLGIsYyl7Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aDtkKyspe3ZhciBmPWFbZF07Zi54Kz1iO2YueSs9Y319DQpmdW5jdGlvbiBDcShhLGIsYyxkLGYsZyxoKXtlJiZ0LmwoYixPcCxYLCJtZXJnZUZyaW5nZXM6cGFyZW50Iik7ZSYmdC5sKGMsT3AsWCwibWVyZ2VGcmluZ2VzOmNoaWxkIik7dmFyIGs9c3EoYiksbD05MD09PWt8fDI3MD09PWssbT1iLm5vZGVTcGFjaW5nO2I9ZDt2YXIgbj1mO2Q9ZztmPWg7dmFyIHA9Yy5zdCxxPWMuSnQ7aD1jLlphO3ZhciByPWw/TWF0aC5tYXgoZixoLmhlaWdodCk6TWF0aC5tYXgoZCxoLndpZHRoKTtpZihudWxsPT09cHx8ayE9PXNxKGMpKXA9enEoYSwyKSxxPXpxKGEsMiksbD8ocFswXS5wKDAsMCkscFsxXS5wKDAsaC5oZWlnaHQpLHFbMF0ucChoLndpZHRoLDApLHFbMV0ucChxWzBdLngscFsxXS55KSk6KHBbMF0ucCgwLDApLHBbMV0ucChoLndpZHRoLDApLHFbMF0ucCgwLGguaGVpZ2h0KSxxWzFdLnAocFsxXS54LHFbMF0ueSkpO2lmKGwpe2M9ZDtkPTk5OTk5OTk7aWYoIShudWxsPT09bnx8Mj5uLmxlbmd0aHx8bnVsbD09PXB8fDI+cC5sZW5ndGgpKWZvcihnPQ0KZj0wO2Y8bi5sZW5ndGgmJmc8cC5sZW5ndGg7KXt2YXIgaz1uW2ZdLHM9cFtnXSxsPXMueCx1PXMueSxsPWwrYyx2PWs7ZisxPG4ubGVuZ3RoJiYodj1uW2YrMV0pO3ZhciBEPXMscz1ELngsRD1ELnk7ZysxPHAubGVuZ3RoJiYoRD1wW2crMV0scz1ELngsRD1ELnkscys9Yyk7dmFyIEE9ZDtrLnk9PT11P0E9bC1rLng6ay55PnUmJmsueTxEP0E9bCsoay55LXUpLyhELXUpKihzLWwpLWsueDp1PmsueSYmdTx2LnkmJihBPWwtKGsueCsodS1rLnkpLyh2Lnktay55KSoodi54LWsueCkpKTtBPGQmJihkPUEpO3YueTw9ay55P2YrKzpEPD11P2crKzoodi55PD1EJiZmKyssRDw9di55JiZnKyspfWMtPWQ7Yys9bTtmPXA7Zz1jO2lmKG51bGw9PT1ifHwyPmIubGVuZ3RofHxudWxsPT09Znx8Mj5mLmxlbmd0aClkPW51bGw7ZWxzZXttPXpxKGEsYi5sZW5ndGgrZi5sZW5ndGgpO2ZvcihkPWw9az0wO2w8Zi5sZW5ndGgmJmZbbF0ueTxiWzBdLnk7KXU9ZltsKytdLG1bZCsrXS5wKHUueCtnLHUueSk7DQpmb3IoO2s8Yi5sZW5ndGg7KXU9YltrKytdLG1bZCsrXS5wKHUueCx1LnkpO2ZvcihrPWJbYi5sZW5ndGgtMV0ueTtsPGYubGVuZ3RoJiZmW2xdLnk8PWs7KWwrKztmb3IoO2w8Zi5sZW5ndGgmJmZbbF0ueT5rOyl1PWZbbCsrXSxtW2QrK10ucCh1LngrZyx1LnkpO2Y9enEoYSxkKTtmb3Ioaz0wO2s8ZDtrKyspZltrXS5hc3NpZ24obVtrXSk7SnEoYSxtKTtkPWZ9bD1xO3U9YztpZihudWxsPT09bnx8Mj5uLmxlbmd0aHx8bnVsbD09PWx8fDI+bC5sZW5ndGgpZj1udWxsO2Vsc2V7bT16cShhLG4ubGVuZ3RoK2wubGVuZ3RoKTtmb3IoZz12PWY9MDtmPG4ubGVuZ3RoJiZuW2ZdLnk8bFswXS55OylrPW5bZisrXSxtW2crK10ucChrLngsay55KTtmb3IoO3Y8bC5sZW5ndGg7KWs9bFt2KytdLG1bZysrXS5wKGsueCt1LGsueSk7Zm9yKGw9bFtsLmxlbmd0aC0xXS55O2Y8bi5sZW5ndGgmJm5bZl0ueTw9bDspZisrO2Zvcig7ZjxuLmxlbmd0aCYmbltmXS55Pmw7KWs9bltmKytdLG1bZysrXS5wKGsueCwNCmsueSk7az16cShhLGcpO2ZvcihmPTA7ZjxnO2YrKylrW2ZdLmFzc2lnbihtW2ZdKTtKcShhLG0pO2Y9a31nPU1hdGgubWF4KDAsYykraC53aWR0aDtoPXJ9ZWxzZXtjPWY7ZD05OTk5OTk5O2lmKCEobnVsbD09PW58fDI+bi5sZW5ndGh8fG51bGw9PT1wfHwyPnAubGVuZ3RoKSlmb3IoZz1mPTA7ZjxuLmxlbmd0aCYmZzxwLmxlbmd0aDspaz1uW2ZdLHM9cFtnXSxsPXMueCx1PXMueSx1Kz1jLHY9ayxmKzE8bi5sZW5ndGgmJih2PW5bZisxXSksRD1zLHM9RC54LEQ9RC55LGcrMTxwLmxlbmd0aCYmKEQ9cFtnKzFdLHM9RC54LEQ9RC55LEQrPWMpLEE9ZCxrLng9PT1sP0E9dS1rLnk6ay54PmwmJmsueDxzP0E9dSsoay54LWwpLyhzLWwpKihELXUpLWsueTpsPmsueCYmbDx2LngmJihBPXUtKGsueSsobC1rLngpLyh2Lngtay54KSoodi55LWsueSkpKSxBPGQmJihkPUEpLHYueDw9ay54P2YrKzpzPD1sP2crKzoodi54PD1zJiZmKyssczw9di54JiZnKyspO2MtPWQ7Yys9bTtmPXA7Zz1jOw0KaWYobnVsbD09PWJ8fDI+Yi5sZW5ndGh8fG51bGw9PT1mfHwyPmYubGVuZ3RoKWQ9bnVsbDtlbHNle209enEoYSxiLmxlbmd0aCtmLmxlbmd0aCk7Zm9yKGQ9bD1rPTA7bDxmLmxlbmd0aCYmZltsXS54PGJbMF0ueDspdT1mW2wrK10sbVtkKytdLnAodS54LHUueStnKTtmb3IoO2s8Yi5sZW5ndGg7KXU9YltrKytdLG1bZCsrXS5wKHUueCx1LnkpO2ZvcihrPWJbYi5sZW5ndGgtMV0ueDtsPGYubGVuZ3RoJiZmW2xdLng8PWs7KWwrKztmb3IoO2w8Zi5sZW5ndGgmJmZbbF0ueD5rOyl1PWZbbCsrXSxtW2QrK10ucCh1LngsdS55K2cpO2Y9enEoYSxkKTtmb3Ioaz0wO2s8ZDtrKyspZltrXS5hc3NpZ24obVtrXSk7SnEoYSxtKTtkPWZ9bD1xO3U9YztpZihudWxsPT09bnx8Mj5uLmxlbmd0aHx8bnVsbD09PWx8fDI+bC5sZW5ndGgpZj1udWxsO2Vsc2V7bT16cShhLG4ubGVuZ3RoK2wubGVuZ3RoKTtmb3IoZz12PWY9MDtmPG4ubGVuZ3RoJiZuW2ZdLng8bFswXS54OylrPW5bZisrXSxtW2crK10ucChrLngsDQprLnkpO2Zvcig7djxsLmxlbmd0aDspaz1sW3YrK10sbVtnKytdLnAoay54LGsueSt1KTtmb3IobD1sW2wubGVuZ3RoLTFdLng7ZjxuLmxlbmd0aCYmbltmXS54PD1sOylmKys7Zm9yKDtmPG4ubGVuZ3RoJiZuW2ZdLng+bDspaz1uW2YrK10sbVtnKytdLnAoay54LGsueSk7az16cShhLGcpO2ZvcihmPTA7ZjxnO2YrKylrW2ZdLmFzc2lnbihtW2ZdKTtKcShhLG0pO2Y9a31nPXI7aD1NYXRoLm1heCgwLGMpK2guaGVpZ2h0fUpxKGEsYik7SnEoYSxwKTtKcShhLG4pO0pxKGEscSk7YT1bXTthWzBdPWM7YVsxXT1kO2FbMl09ZjthWzNdPWc7YVs0XT1oO3JldHVybiBhfWZ1bmN0aW9uIHpxKGEsYil7YS53c3x8KGEud3M9W10pO3ZhciBjPWEud3NbYl07aWYodm9pZCAwIT09YyYmKGM9Yy5wb3AoKSx2b2lkIDAhPT1jKSlyZXR1cm4gYztmb3IodmFyIGM9W10sZD0wO2Q8YjtkKyspY1tkXT1uZXcgdztyZXR1cm4gY30NCmZ1bmN0aW9uIEpxKGEsYil7aWYoYS53cyl7dmFyIGM9Yi5sZW5ndGgsZD1hLndzW2NdO3ZvaWQgMD09PWQmJihkPVtdLGEud3NbY109ZCk7ZC5wdXNoKGIpfX0NClgucHJvdG90eXBlLmFycmFuZ2VUcmVlcz1mdW5jdGlvbigpe2lmKHRoaXMuY2Q9PT1ScClmb3IodmFyIGE9dGhpcy5ZYy5rO2EubmV4dCgpOyl7dmFyIGI9YS52YWx1ZSxjPWIuR2M7aWYobnVsbCE9PWMpe3ZhciBkPWMucG9zaXRpb24sYz1kLngsZD1kLnk7aXNGaW5pdGUoYyl8fChjPTApO2lzRmluaXRlKGQpfHwoZD0wKTtTcSh0aGlzLGIsYyxkKX19ZWxzZSBmb3IoYT10aGlzLkRkLGM9YS54LGQ9YS55LGE9dGhpcy5ZYy5rO2EubmV4dCgpOylzd2l0Y2goYj1hLnZhbHVlLFNxKHRoaXMsYixjK2IuSWEueCxkK2IuSWEueSksdGhpcy5jZCl7Y2FzZSBOcDpkKz1iLlphLmhlaWdodCt0aGlzLmJnLmhlaWdodDticmVhaztjYXNlIFRxOmMrPWIuWmEud2lkdGgrdGhpcy5iZy53aWR0aDticmVhaztkZWZhdWx0OnQubSgiVW5oYW5kbGVkIGFycmFuZ2VtZW50IHZhbHVlICIrdGhpcy5jZC50b1N0cmluZygpKX19Ow0KZnVuY3Rpb24gU3EoYSxiLGMsZCl7aWYobnVsbCE9PWIpe2UmJnQubChiLE9wLFgsImFzc2lnbkFic29sdXRlUG9zaXRpb25zOnYiKTtiLng9YztiLnk9ZDtiPWIuY2hpbGRyZW47Zm9yKHZhciBmPWIubGVuZ3RoLGc9MDtnPGY7ZysrKXt2YXIgaD1iW2ddO1NxKGEsaCxjK2gubmEueCxkK2gubmEueSl9fX1YLnByb3RvdHlwZS5jb21taXRMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmRCKCk7dGhpcy5jb21taXROb2RlcygpO3RoaXMuVnooKTt0aGlzLnF0JiZ0aGlzLmNvbW1pdExpbmtzKCl9O1gucHJvdG90eXBlLmNvbW1pdE5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rLGI7YS5uZXh0KCk7KWI9YS52YWx1ZSxiLmNvbW1pdCgpO2ZvcihhLnJlc2V0KCk7YS5uZXh0KCk7KWI9YS52YWx1ZSx0aGlzLmxheW91dENvbW1lbnRzKGIpfTsNClgucHJvdG90eXBlLlZ6PWZ1bmN0aW9uKCl7aWYodGhpcy5Ydz09PVhwKXtmb3IodmFyIGE9dGhpcy5HQixiPVtdLGM9bnVsbCxkPXRoaXMubmV0d29yay52ZXJ0ZXhlcy5rO2QubmV4dCgpOyl7dmFyIGY9ZC52YWx1ZTtudWxsPT09Yz9jPWYuT2IuY29weSgpOmMubGooZi5PYik7dmFyIGc9YltmLmxldmVsXSxnPXZvaWQgMD09PWc/dnEoZik6TWF0aC5tYXgoZyx2cShmKSk7YltmLmxldmVsXT1nfWZvcihkPTA7ZDxiLmxlbmd0aDtkKyspdm9pZCAwPT09YltkXSYmKGJbZF09MCk7OTA9PT10aGlzLmFuZ2xlfHwyNzA9PT10aGlzLmFuZ2xlPyhjLlNmKHRoaXMubm9kZVNwYWNpbmcvMix0aGlzLmxheWVyU3BhY2luZyksZj1uZXcgdygtdGhpcy5ub2RlU3BhY2luZy8yLC10aGlzLmxheWVyU3BhY2luZy8yKSk6KGMuU2YodGhpcy5sYXllclNwYWNpbmcsdGhpcy5ub2RlU3BhY2luZy8yKSxmPW5ldyB3KC10aGlzLmxheWVyU3BhY2luZy8yLC10aGlzLm5vZGVTcGFjaW5nLzIpKTt2YXIgZz0NCltdLGM9OTA9PT10aGlzLmFuZ2xlfHwyNzA9PT10aGlzLmFuZ2xlP2Mud2lkdGg6Yy5oZWlnaHQsaD0wO2lmKDE4MD09PXRoaXMuYW5nbGV8fDI3MD09PXRoaXMuYW5nbGUpZm9yKGQ9MDtkPGEubGVuZ3RoO2QrKyloKz1hW2RdK2JbZF07Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGs9YVtkXStiW2RdOzI3MD09PXRoaXMuYW5nbGU/KGgtPWssZy5wdXNoKG5ldyB4KDAsaCxjLGspKSk6OTA9PT10aGlzLmFuZ2xlPyhnLnB1c2gobmV3IHgoMCxoLGMsaykpLGgrPWspOjE4MD09PXRoaXMuYW5nbGU/KGgtPWssZy5wdXNoKG5ldyB4KGgsMCxrLGMpKSk6KGcucHVzaChuZXcgeChoLDAsayxjKSksaCs9ayl9dGhpcy5jb21taXRMYXllcnMoZyxmKX19O1gucHJvdG90eXBlLmNvbW1pdExheWVycz1mdW5jdGlvbigpe307WC5wcm90b3R5cGUuY29tbWl0TGlua3M9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5uZXR3b3JrLmVkZ2VzLms7YS5uZXh0KCk7KWEudmFsdWUuY29tbWl0KCl9Ow0KWC5wcm90b3R5cGUuZEI9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5ZYy5rO2EubmV4dCgpOylVcSh0aGlzLGEudmFsdWUpfTtmdW5jdGlvbiBVcShhLGIpe2lmKG51bGwhPT1iKXtlJiZ0LmwoYixPcCxYLCJzZXRQb3J0U3BvdHNUcmVlOnYiKTthLnNldFBvcnRTcG90cyhiKTtmb3IodmFyIGM9Yi5jaGlsZHJlbixkPWMubGVuZ3RoLGY9MDtmPGQ7ZisrKVVxKGEsY1tmXSl9fQ0KWC5wcm90b3R5cGUuc2V0UG9ydFNwb3RzPWZ1bmN0aW9uKGEpe2UmJnQubChhLE9wLFgsInNldFBvcnRTcG90czp2Iik7dmFyIGI9YS5hbGlnbm1lbnQ7aWYoanEoYikpe2UmJnQubChhLE9wLFgsInNldFBvcnRTcG90c0J1czp2Iik7ZSYmdC5sKGIsZGEsWCwic2V0UG9ydFNwb3RzOmFsaWduIik7dmFyIGM9dGhpcy5JZj09PUtwLGQ9c3EoYSksZjtzd2l0Y2goZCl7Y2FzZSAwOmY9VmI7YnJlYWs7Y2FzZSA5MDpmPVdiO2JyZWFrO2Nhc2UgMTgwOmY9VWI7YnJlYWs7ZGVmYXVsdDpmPVFifXZhciBnPWEuY2hpbGRyZW4saD1nLmxlbmd0aDtzd2l0Y2goYil7Y2FzZSBrcTpjYXNlICRwOmZvcihiPTA7YjxoO2IrKyl7dmFyIGs9Z1tiXSxrPWM/ay5yYzprLmdjO2lmKGsubmV4dCgpKXt2YXIgbD1rLnZhbHVlLGw9bC5saW5rO2lmKG51bGwhPT1sKXt2YXIgbT05MD09PWR8fDI3MD09PWQ/VWI6UWI7aWYoMT09PWh8fGI9PT1oLTEmJjE9PT1oJTIpc3dpdGNoKGQpe2Nhc2UgMDptPVViO2JyZWFrOw0KY2FzZSA5MDptPVFiO2JyZWFrO2Nhc2UgMTgwOm09VmI7YnJlYWs7ZGVmYXVsdDptPVdifWVsc2UgMD09PWIlMiYmKG09OTA9PT1kfHwyNzA9PT1kP1ZiOldiKTtjPyhhLnNldHNQb3J0U3BvdCYmKGwucGI9ZiksYS5zZXRzQ2hpbGRQb3J0U3BvdCYmKGwudGI9bSkpOihhLnNldHNQb3J0U3BvdCYmKGwucGI9bSksYS5zZXRzQ2hpbGRQb3J0U3BvdCYmKGwudGI9ZikpfX19YnJlYWs7Y2FzZSBscTptPTkwPT09ZHx8MjcwPT09ZD9WYjpXYjtmb3Ioaz1jP2EuZ2M6YS5yYztrLm5leHQoKTspbD1rLnZhbHVlLGw9bC5saW5rLG51bGwhPT1sJiYoYz8oYS5zZXRzUG9ydFNwb3QmJihsLnBiPWYpLGEuc2V0c0NoaWxkUG9ydFNwb3QmJihsLnRiPW0pKTooYS5zZXRzUG9ydFNwb3QmJihsLnBiPW0pLGEuc2V0c0NoaWxkUG9ydFNwb3QmJihsLnRiPWYpKSk7YnJlYWs7Y2FzZSBtcTpmb3IobT05MD09PWR8fDI3MD09PWQ/VWI6UWIsaz1jP2EuZ2M6YS5yYztrLm5leHQoKTspbD1rLnZhbHVlLGw9DQpsLmxpbmssbnVsbCE9PWwmJihjPyhhLnNldHNQb3J0U3BvdCYmKGwucGI9ZiksYS5zZXRzQ2hpbGRQb3J0U3BvdCYmKGwudGI9bSkpOihhLnNldHNQb3J0U3BvdCYmKGwucGI9bSksYS5zZXRzQ2hpbGRQb3J0U3BvdCYmKGwudGI9ZikpKX19ZWxzZSBpZihjPXNxKGEpLHRoaXMuSWY9PT1LcClmb3IoZD1hLmdjO2QubmV4dCgpOyl7aWYoZj1kLnZhbHVlLGY9Zi5saW5rLG51bGwhPT1mKXtpZihhLnNldHNQb3J0U3BvdClpZihhLnBvcnRTcG90LlBjKCkpc3dpdGNoKGMpe2Nhc2UgMDpmLnBiPVZiO2JyZWFrO2Nhc2UgOTA6Zi5wYj1XYjticmVhaztjYXNlIDE4MDpmLnBiPVViO2JyZWFrO2RlZmF1bHQ6Zi5wYj1RYn1lbHNlIGYucGI9YS5wb3J0U3BvdDtpZihhLnNldHNDaGlsZFBvcnRTcG90KWlmKGEuY2hpbGRQb3J0U3BvdC5QYygpKXN3aXRjaChjKXtjYXNlIDA6Zi50Yj1VYjticmVhaztjYXNlIDkwOmYudGI9UWI7YnJlYWs7Y2FzZSAxODA6Zi50Yj1WYjticmVhaztkZWZhdWx0OmYudGI9DQpXYn1lbHNlIGYudGI9YS5jaGlsZFBvcnRTcG90fX1lbHNlIGZvcihkPWEucmM7ZC5uZXh0KCk7KWlmKGY9ZC52YWx1ZSxmPWYubGluayxudWxsIT09Zil7aWYoYS5zZXRzUG9ydFNwb3QpaWYoYS5wb3J0U3BvdC5QYygpKXN3aXRjaChjKXtjYXNlIDA6Zi50Yj1WYjticmVhaztjYXNlIDkwOmYudGI9V2I7YnJlYWs7Y2FzZSAxODA6Zi50Yj1VYjticmVhaztkZWZhdWx0OmYudGI9UWJ9ZWxzZSBmLnRiPWEucG9ydFNwb3Q7aWYoYS5zZXRzQ2hpbGRQb3J0U3BvdClpZihhLmNoaWxkUG9ydFNwb3QuUGMoKSlzd2l0Y2goYyl7Y2FzZSAwOmYucGI9VWI7YnJlYWs7Y2FzZSA5MDpmLnBiPVFiO2JyZWFrO2Nhc2UgMTgwOmYucGI9VmI7YnJlYWs7ZGVmYXVsdDpmLnBiPVdifWVsc2UgZi5wYj1hLmNoaWxkUG9ydFNwb3R9fTtmdW5jdGlvbiBzcShhKXthPWEuYW5nbGU7cmV0dXJuIDQ1Pj1hPzA6MTM1Pj1hPzkwOjIyNT49YT8xODA6MzE1Pj1hPzI3MDowfQ0KZnVuY3Rpb24gdnEoYSl7ZSYmdC5sKGEsT3AsWCwiY29tcHV0ZUxheWVyU3BhY2luZzp2Iik7dmFyIGI9c3EoYSksYj05MD09PWJ8fDI3MD09PWIsYz1hLmxheWVyU3BhY2luZztpZigwPGEubGF5ZXJTcGFjaW5nUGFyZW50T3ZlcmxhcCl2YXIgZD1NYXRoLm1pbigxLGEubGF5ZXJTcGFjaW5nUGFyZW50T3ZlcmxhcCksYz1jLShiP2EuaGVpZ2h0KmQ6YS53aWR0aCpkKTtjPChiPy1hLmhlaWdodDotYS53aWR0aCkmJihjPWI/LWEuaGVpZ2h0Oi1hLndpZHRoKTtyZXR1cm4gY31mdW5jdGlvbiB3cShhKXtlJiZ0LmwoYSxPcCxYLCJjb21wdXRlTm9kZUluZGVudDp2Iik7dmFyIGI9c3EoYSksYj05MD09PWJ8fDI3MD09PWIsYz1hLm5vZGVJbmRlbnQ7aWYoMDxhLm5vZGVJbmRlbnRQYXN0UGFyZW50KXZhciBkPU1hdGgubWluKDEsYS5ub2RlSW5kZW50UGFzdFBhcmVudCksYz1jKyhiP2Eud2lkdGgqZDphLmhlaWdodCpkKTtyZXR1cm4gYz1NYXRoLm1heCgwLGMpfQ0KdC5nKFgsInJvb3RzIixYLnByb3RvdHlwZS5OSik7dC5kZWZpbmVQcm9wZXJ0eShYLHtOSjoicm9vdHMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLlljfSxmdW5jdGlvbihhKXt0aGlzLlljIT09YSYmKHQubChhLEMsWCwicm9vdHMiKSx0aGlzLlljPWEsdGhpcy5KKCkpfSk7dC5nKFgsInBhdGgiLFgucHJvdG90eXBlLnBhdGgpO3QuZGVmaW5lUHJvcGVydHkoWCx7cGF0aDoicGF0aCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSml9LGZ1bmN0aW9uKGEpe3RoaXMuSmkhPT1hJiYodC5BYShhLFgsWCwicGF0aCIpLHRoaXMuSmk9YSx0aGlzLkooKSl9KTt0LmcoWCwidHJlZVN0eWxlIixYLnByb3RvdHlwZS5ORyk7DQp0LmRlZmluZVByb3BlcnR5KFgse05HOiJ0cmVlU3R5bGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLkNzfSxmdW5jdGlvbihhKXt0aGlzLmNkIT09YSYmKHQuQWEoYSxYLFgsInRyZWVTdHlsZSIpLGE9PT1McHx8YT09PWNxfHxhPT09ZHF8fGE9PT1icSkmJih0aGlzLkNzPWEsdGhpcy5KKCkpfSk7dC5nKFgsImxheWVyU3R5bGUiLFgucHJvdG90eXBlLlh3KTt0LmRlZmluZVByb3BlcnR5KFgse1h3OiJsYXllclN0eWxlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ZdX0sZnVuY3Rpb24oYSl7dGhpcy5jZCE9PWEmJih0LkFhKGEsWCxYLCJsYXllclN0eWxlIiksYT09PU1wfHxhPT09WXB8fGE9PT1YcCkmJih0aGlzLll1PWEsdGhpcy5KKCkpfSk7dC5nKFgsImNvbW1lbnRzIixYLnByb3RvdHlwZS5jb21tZW50cyk7DQp0LmRlZmluZVByb3BlcnR5KFgse2NvbW1lbnRzOiJjb21tZW50cyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGh9LGZ1bmN0aW9uKGEpe3RoaXMudGghPT1hJiYodC5pKGEsImJvb2xlYW4iLFgsImNvbW1lbnRzIiksdGhpcy50aD1hLHRoaXMuSigpKX0pO3QuZyhYLCJhcnJhbmdlbWVudCIsWC5wcm90b3R5cGUuUWUpO3QuZGVmaW5lUHJvcGVydHkoWCx7UWU6ImFycmFuZ2VtZW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jZH0sZnVuY3Rpb24oYSl7dGhpcy5jZCE9PWEmJih0LkFhKGEsWCxYLCJhcnJhbmdlbWVudCIpLGE9PT1OcHx8YT09PVRxfHxhPT09UnApJiYodGhpcy5jZD1hLHRoaXMuSigpKX0pO3QuZyhYLCJhcnJhbmdlbWVudFNwYWNpbmciLFgucHJvdG90eXBlLmV3KTsNCnQuZGVmaW5lUHJvcGVydHkoWCx7ZXc6ImFycmFuZ2VtZW50U3BhY2luZyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmd9LGZ1bmN0aW9uKGEpe3QubChhLGdhLFgsImFycmFuZ2VtZW50U3BhY2luZyIpO3RoaXMuYmcuTShhKXx8KHRoaXMuYmcuYXNzaWduKGEpLHRoaXMuSigpKX0pO3QuZyhYLCJyb290RGVmYXVsdHMiLFgucHJvdG90eXBlLk1KKTt0LmRlZmluZVByb3BlcnR5KFgse01KOiJyb290RGVmYXVsdHMifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVhfSxmdW5jdGlvbihhKXt0aGlzLnVhIT09YSYmKHQubChhLE9wLFgsInJvb3REZWZhdWx0cyIpLHRoaXMudWE9YSx0aGlzLkooKSl9KTt0LmcoWCwiYWx0ZXJuYXRlRGVmYXVsdHMiLFgucHJvdG90eXBlLk9IKTsNCnQuZGVmaW5lUHJvcGVydHkoWCx7T0g6ImFsdGVybmF0ZURlZmF1bHRzIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YX0sZnVuY3Rpb24oYSl7dGhpcy50YSE9PWEmJih0LmwoYSxPcCxYLCJhbHRlcm5hdGVEZWZhdWx0cyIpLHRoaXMudGE9YSx0aGlzLkooKSl9KTt0LmcoWCwic29ydGluZyIsWC5wcm90b3R5cGUuc29ydGluZyk7dC5kZWZpbmVQcm9wZXJ0eShYLHtzb3J0aW5nOiJzb3J0aW5nIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51YS5zb3J0aW5nfSxmdW5jdGlvbihhKXt0aGlzLnVhLnNvcnRpbmchPT1hJiYodC5BYShhLFgsWCwic29ydGluZyIpLGE9PT1lcXx8YT09PWZxfHxhPT09Z3F8fGhxKSYmKHRoaXMudWEuc29ydGluZz1hLHRoaXMuSigpKX0pO3QuZyhYLCJjb21wYXJlciIsWC5wcm90b3R5cGUuY29tcGFyZXIpOw0KdC5kZWZpbmVQcm9wZXJ0eShYLHtjb21wYXJlcjoiY29tcGFyZXIifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVhLmNvbXBhcmVyfSxmdW5jdGlvbihhKXt0aGlzLnVhLmNvbXBhcmVyIT09YSYmKHQuaShhLCJmdW5jdGlvbiIsWCwiY29tcGFyZXIiKSx0aGlzLnVhLmNvbXBhcmVyPWEsdGhpcy5KKCkpfSk7dC5nKFgsImFuZ2xlIixYLnByb3RvdHlwZS5hbmdsZSk7dC5kZWZpbmVQcm9wZXJ0eShYLHthbmdsZToiYW5nbGUifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVhLmFuZ2xlfSxmdW5jdGlvbihhKXt0aGlzLnVhLmFuZ2xlIT09YSYmKHQuaShhLCJudW1iZXIiLFgsImFuZ2xlIiksMD09PWF8fDkwPT09YXx8MTgwPT09YXx8MjcwPT09YSkmJih0aGlzLnVhLmFuZ2xlPWEsdGhpcy5KKCkpfSk7dC5nKFgsImFsaWdubWVudCIsWC5wcm90b3R5cGUuYWxpZ25tZW50KTsNCnQuZGVmaW5lUHJvcGVydHkoWCx7YWxpZ25tZW50OiJhbGlnbm1lbnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVhLmFsaWdubWVudH0sZnVuY3Rpb24oYSl7dGhpcy51YS5hbGlnbm1lbnQhPT1hJiYodC5BYShhLFgsWCwiYWxpZ25tZW50IiksdGhpcy51YS5hbGlnbm1lbnQ9YSx0aGlzLkooKSl9KTt0LmcoWCwibm9kZUluZGVudCIsWC5wcm90b3R5cGUubm9kZUluZGVudCk7dC5kZWZpbmVQcm9wZXJ0eShYLHtub2RlSW5kZW50OiJub2RlSW5kZW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51YS5ub2RlSW5kZW50fSxmdW5jdGlvbihhKXt0aGlzLnVhLm5vZGVJbmRlbnQhPT1hJiYodC5pKGEsIm51bWJlciIsWCwibm9kZUluZGVudCIpLDA8PWEmJih0aGlzLnVhLm5vZGVJbmRlbnQ9YSx0aGlzLkooKSkpfSk7dC5nKFgsIm5vZGVJbmRlbnRQYXN0UGFyZW50IixYLnByb3RvdHlwZS5ub2RlSW5kZW50UGFzdFBhcmVudCk7DQp0LmRlZmluZVByb3BlcnR5KFgse25vZGVJbmRlbnRQYXN0UGFyZW50OiJub2RlSW5kZW50UGFzdFBhcmVudCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWEubm9kZUluZGVudFBhc3RQYXJlbnR9LGZ1bmN0aW9uKGEpe3RoaXMudWEubm9kZUluZGVudFBhc3RQYXJlbnQhPT1hJiYodC5pKGEsIm51bWJlciIsWCwibm9kZUluZGVudFBhc3RQYXJlbnQiKSwwPD1hJiYxPj1hJiYodGhpcy51YS5ub2RlSW5kZW50UGFzdFBhcmVudD1hLHRoaXMuSigpKSl9KTt0LmcoWCwibm9kZVNwYWNpbmciLFgucHJvdG90eXBlLm5vZGVTcGFjaW5nKTt0LmRlZmluZVByb3BlcnR5KFgse25vZGVTcGFjaW5nOiJub2RlU3BhY2luZyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWEubm9kZVNwYWNpbmd9LGZ1bmN0aW9uKGEpe3RoaXMudWEubm9kZVNwYWNpbmchPT1hJiYodC5pKGEsIm51bWJlciIsWCwibm9kZVNwYWNpbmciKSx0aGlzLnVhLm5vZGVTcGFjaW5nPWEsdGhpcy5KKCkpfSk7DQp0LmcoWCwibGF5ZXJTcGFjaW5nIixYLnByb3RvdHlwZS5sYXllclNwYWNpbmcpO3QuZGVmaW5lUHJvcGVydHkoWCx7bGF5ZXJTcGFjaW5nOiJsYXllclNwYWNpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVhLmxheWVyU3BhY2luZ30sZnVuY3Rpb24oYSl7dGhpcy51YS5sYXllclNwYWNpbmchPT1hJiYodC5pKGEsIm51bWJlciIsWCwibGF5ZXJTcGFjaW5nIiksdGhpcy51YS5sYXllclNwYWNpbmc9YSx0aGlzLkooKSl9KTt0LmcoWCwibGF5ZXJTcGFjaW5nUGFyZW50T3ZlcmxhcCIsWC5wcm90b3R5cGUubGF5ZXJTcGFjaW5nUGFyZW50T3ZlcmxhcCk7DQp0LmRlZmluZVByb3BlcnR5KFgse2xheWVyU3BhY2luZ1BhcmVudE92ZXJsYXA6ImxheWVyU3BhY2luZ1BhcmVudE92ZXJsYXAifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVhLmxheWVyU3BhY2luZ1BhcmVudE92ZXJsYXB9LGZ1bmN0aW9uKGEpe3RoaXMudWEubGF5ZXJTcGFjaW5nUGFyZW50T3ZlcmxhcCE9PWEmJih0LmkoYSwibnVtYmVyIixYLCJsYXllclNwYWNpbmdQYXJlbnRPdmVybGFwIiksMDw9YSYmMT49YSYmKHRoaXMudWEubGF5ZXJTcGFjaW5nUGFyZW50T3ZlcmxhcD1hLHRoaXMuSigpKSl9KTt0LmcoWCwiY29tcGFjdGlvbiIsWC5wcm90b3R5cGUuY29tcGFjdGlvbik7DQp0LmRlZmluZVByb3BlcnR5KFgse2NvbXBhY3Rpb246ImNvbXBhY3Rpb24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVhLmNvbXBhY3Rpb259LGZ1bmN0aW9uKGEpe3RoaXMudWEuY29tcGFjdGlvbiE9PWEmJih0LkFhKGEsWCxYLCJjb21wYWN0aW9uIiksYT09PXBxfHxhPT09cnEpJiYodGhpcy51YS5jb21wYWN0aW9uPWEsdGhpcy5KKCkpfSk7dC5nKFgsImJyZWFkdGhMaW1pdCIsWC5wcm90b3R5cGUuYnJlYWR0aExpbWl0KTt0LmRlZmluZVByb3BlcnR5KFgse2JyZWFkdGhMaW1pdDoiYnJlYWR0aExpbWl0In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51YS5icmVhZHRoTGltaXR9LGZ1bmN0aW9uKGEpe3RoaXMudWEuYnJlYWR0aExpbWl0IT09YSYmKHQuaShhLCJudW1iZXIiLFgsImJyZWFkdGhMaW1pdCIpLDA8PWEmJih0aGlzLnVhLmJyZWFkdGhMaW1pdD1hLHRoaXMuSigpKSl9KTt0LmcoWCwicm93U3BhY2luZyIsWC5wcm90b3R5cGUucm93U3BhY2luZyk7DQp0LmRlZmluZVByb3BlcnR5KFgse3Jvd1NwYWNpbmc6InJvd1NwYWNpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnVhLnJvd1NwYWNpbmd9LGZ1bmN0aW9uKGEpe3RoaXMudWEucm93U3BhY2luZyE9PWEmJih0LmkoYSwibnVtYmVyIixYLCJyb3dTcGFjaW5nIiksdGhpcy51YS5yb3dTcGFjaW5nPWEsdGhpcy5KKCkpfSk7dC5nKFgsInJvd0luZGVudCIsWC5wcm90b3R5cGUucm93SW5kZW50KTt0LmRlZmluZVByb3BlcnR5KFgse3Jvd0luZGVudDoicm93SW5kZW50In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51YS5yb3dJbmRlbnR9LGZ1bmN0aW9uKGEpe3RoaXMudWEucm93SW5kZW50IT09YSYmKHQuaShhLCJudW1iZXIiLFgsInJvd0luZGVudCIpLDA8PWEmJih0aGlzLnVhLnJvd0luZGVudD1hLHRoaXMuSigpKSl9KTt0LmcoWCwiY29tbWVudFNwYWNpbmciLFgucHJvdG90eXBlLmNvbW1lbnRTcGFjaW5nKTsNCnQuZGVmaW5lUHJvcGVydHkoWCx7Y29tbWVudFNwYWNpbmc6ImNvbW1lbnRTcGFjaW5nIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51YS5jb21tZW50U3BhY2luZ30sZnVuY3Rpb24oYSl7dGhpcy51YS5jb21tZW50U3BhY2luZyE9PWEmJih0LmkoYSwibnVtYmVyIixYLCJjb21tZW50U3BhY2luZyIpLHRoaXMudWEuY29tbWVudFNwYWNpbmc9YSx0aGlzLkooKSl9KTt0LmcoWCwiY29tbWVudE1hcmdpbiIsWC5wcm90b3R5cGUuY29tbWVudE1hcmdpbik7dC5kZWZpbmVQcm9wZXJ0eShYLHtjb21tZW50TWFyZ2luOiJjb21tZW50TWFyZ2luIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51YS5jb21tZW50TWFyZ2lufSxmdW5jdGlvbihhKXt0aGlzLnVhLmNvbW1lbnRNYXJnaW4hPT1hJiYodC5pKGEsIm51bWJlciIsWCwiY29tbWVudE1hcmdpbiIpLHRoaXMudWEuY29tbWVudE1hcmdpbj1hLHRoaXMuSigpKX0pO3QuZyhYLCJzZXRzUG9ydFNwb3QiLFgucHJvdG90eXBlLnNldHNQb3J0U3BvdCk7DQp0LmRlZmluZVByb3BlcnR5KFgse3NldHNQb3J0U3BvdDoic2V0c1BvcnRTcG90In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51YS5zZXRzUG9ydFNwb3R9LGZ1bmN0aW9uKGEpe3RoaXMudWEuc2V0c1BvcnRTcG90IT09YSYmKHQuaShhLCJib29sZWFuIixYLCJzZXRzUG9ydFNwb3QiKSx0aGlzLnVhLnNldHNQb3J0U3BvdD1hLHRoaXMuSigpKX0pO3QuZyhYLCJwb3J0U3BvdCIsWC5wcm90b3R5cGUucG9ydFNwb3QpO3QuZGVmaW5lUHJvcGVydHkoWCx7cG9ydFNwb3Q6InBvcnRTcG90In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51YS5wb3J0U3BvdH0sZnVuY3Rpb24oYSl7dC5sKGEsSSxYLCJwb3J0U3BvdCIpO3RoaXMudWEucG9ydFNwb3QuTShhKXx8KHRoaXMudWEucG9ydFNwb3Q9YSx0aGlzLkooKSl9KTt0LmcoWCwic2V0c0NoaWxkUG9ydFNwb3QiLFgucHJvdG90eXBlLnNldHNDaGlsZFBvcnRTcG90KTsNCnQuZGVmaW5lUHJvcGVydHkoWCx7c2V0c0NoaWxkUG9ydFNwb3Q6InNldHNDaGlsZFBvcnRTcG90In0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51YS5zZXRzQ2hpbGRQb3J0U3BvdH0sZnVuY3Rpb24oYSl7dGhpcy51YS5zZXRzQ2hpbGRQb3J0U3BvdCE9PWEmJih0LmkoYSwiYm9vbGVhbiIsWCwic2V0c0NoaWxkUG9ydFNwb3QiKSx0aGlzLnVhLnNldHNDaGlsZFBvcnRTcG90PWEsdGhpcy5KKCkpfSk7dC5nKFgsImNoaWxkUG9ydFNwb3QiLFgucHJvdG90eXBlLmNoaWxkUG9ydFNwb3QpO3QuZGVmaW5lUHJvcGVydHkoWCx7Y2hpbGRQb3J0U3BvdDoiY2hpbGRQb3J0U3BvdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWEuY2hpbGRQb3J0U3BvdH0sZnVuY3Rpb24oYSl7dC5sKGEsSSxYLCJjaGlsZFBvcnRTcG90Iik7dGhpcy51YS5jaGlsZFBvcnRTcG90Lk0oYSl8fCh0aGlzLnVhLmNoaWxkUG9ydFNwb3Q9YSx0aGlzLkooKSl9KTt0LmcoWCwiYWx0ZXJuYXRlU29ydGluZyIsWC5wcm90b3R5cGUuWkgpOw0KdC5kZWZpbmVQcm9wZXJ0eShYLHtaSDoiYWx0ZXJuYXRlU29ydGluZyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGEuc29ydGluZ30sZnVuY3Rpb24oYSl7dGhpcy50YS5zb3J0aW5nIT09YSYmKHQuQWEoYSxYLFgsImFsdGVybmF0ZVNvcnRpbmciKSxhPT09ZXF8fGE9PT1mcXx8YT09PWdxfHxocSkmJih0aGlzLnRhLnNvcnRpbmc9YSx0aGlzLkooKSl9KTt0LmcoWCwiYWx0ZXJuYXRlQ29tcGFyZXIiLFgucHJvdG90eXBlLk5IKTt0LmRlZmluZVByb3BlcnR5KFgse05IOiJhbHRlcm5hdGVDb21wYXJlciJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGEuY29tcGFyZXJ9LGZ1bmN0aW9uKGEpe3RoaXMudGEuY29tcGFyZXIhPT1hJiYodC5pKGEsImZ1bmN0aW9uIixYLCJhbHRlcm5hdGVDb21wYXJlciIpLHRoaXMudGEuY29tcGFyZXI9YSx0aGlzLkooKSl9KTt0LmcoWCwiYWx0ZXJuYXRlQW5nbGUiLFgucHJvdG90eXBlLkhIKTsNCnQuZGVmaW5lUHJvcGVydHkoWCx7SEg6ImFsdGVybmF0ZUFuZ2xlIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YS5hbmdsZX0sZnVuY3Rpb24oYSl7dGhpcy50YS5hbmdsZSE9PWEmJih0LmkoYSwibnVtYmVyIixYLCJhbHRlcm5hdGVBbmdsZSIpLDA9PT1hfHw5MD09PWF8fDE4MD09PWF8fDI3MD09PWEpJiYodGhpcy50YS5hbmdsZT1hLHRoaXMuSigpKX0pO3QuZyhYLCJhbHRlcm5hdGVBbGlnbm1lbnQiLFgucHJvdG90eXBlLkdIKTt0LmRlZmluZVByb3BlcnR5KFgse0dIOiJhbHRlcm5hdGVBbGlnbm1lbnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhLmFsaWdubWVudH0sZnVuY3Rpb24oYSl7dGhpcy50YS5hbGlnbm1lbnQhPT1hJiYodC5BYShhLFgsWCwiYWx0ZXJuYXRlQWxpZ25tZW50IiksdGhpcy50YS5hbGlnbm1lbnQ9YSx0aGlzLkooKSl9KTt0LmcoWCwiYWx0ZXJuYXRlTm9kZUluZGVudCIsWC5wcm90b3R5cGUuUkgpOw0KdC5kZWZpbmVQcm9wZXJ0eShYLHtSSDoiYWx0ZXJuYXRlTm9kZUluZGVudCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGEubm9kZUluZGVudH0sZnVuY3Rpb24oYSl7dGhpcy50YS5ub2RlSW5kZW50IT09YSYmKHQuaShhLCJudW1iZXIiLFgsImFsdGVybmF0ZU5vZGVJbmRlbnQiKSwwPD1hJiYodGhpcy50YS5ub2RlSW5kZW50PWEsdGhpcy5KKCkpKX0pO3QuZyhYLCJhbHRlcm5hdGVOb2RlSW5kZW50UGFzdFBhcmVudCIsWC5wcm90b3R5cGUuU0gpOw0KdC5kZWZpbmVQcm9wZXJ0eShYLHtTSDoiYWx0ZXJuYXRlTm9kZUluZGVudFBhc3RQYXJlbnQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhLm5vZGVJbmRlbnRQYXN0UGFyZW50fSxmdW5jdGlvbihhKXt0aGlzLnRhLm5vZGVJbmRlbnRQYXN0UGFyZW50IT09YSYmKHQuaShhLCJudW1iZXIiLFgsImFsdGVybmF0ZU5vZGVJbmRlbnRQYXN0UGFyZW50IiksMDw9YSYmMT49YSYmKHRoaXMudGEubm9kZUluZGVudFBhc3RQYXJlbnQ9YSx0aGlzLkooKSkpfSk7dC5nKFgsImFsdGVybmF0ZU5vZGVTcGFjaW5nIixYLnByb3RvdHlwZS5USCk7dC5kZWZpbmVQcm9wZXJ0eShYLHtUSDoiYWx0ZXJuYXRlTm9kZVNwYWNpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhLm5vZGVTcGFjaW5nfSxmdW5jdGlvbihhKXt0aGlzLnRhLm5vZGVTcGFjaW5nIT09YSYmKHQuaShhLCJudW1iZXIiLFgsImFsdGVybmF0ZU5vZGVTcGFjaW5nIiksdGhpcy50YS5ub2RlU3BhY2luZz1hLHRoaXMuSigpKX0pOw0KdC5nKFgsImFsdGVybmF0ZUxheWVyU3BhY2luZyIsWC5wcm90b3R5cGUuUEgpO3QuZGVmaW5lUHJvcGVydHkoWCx7UEg6ImFsdGVybmF0ZUxheWVyU3BhY2luZyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGEubGF5ZXJTcGFjaW5nfSxmdW5jdGlvbihhKXt0aGlzLnRhLmxheWVyU3BhY2luZyE9PWEmJih0LmkoYSwibnVtYmVyIixYLCJhbHRlcm5hdGVMYXllclNwYWNpbmciKSx0aGlzLnRhLmxheWVyU3BhY2luZz1hLHRoaXMuSigpKX0pO3QuZyhYLCJhbHRlcm5hdGVMYXllclNwYWNpbmdQYXJlbnRPdmVybGFwIixYLnByb3RvdHlwZS5RSCk7DQp0LmRlZmluZVByb3BlcnR5KFgse1FIOiJhbHRlcm5hdGVMYXllclNwYWNpbmdQYXJlbnRPdmVybGFwIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YS5sYXllclNwYWNpbmdQYXJlbnRPdmVybGFwfSxmdW5jdGlvbihhKXt0aGlzLnRhLmxheWVyU3BhY2luZ1BhcmVudE92ZXJsYXAhPT1hJiYodC5pKGEsIm51bWJlciIsWCwiYWx0ZXJuYXRlTGF5ZXJTcGFjaW5nUGFyZW50T3ZlcmxhcCIpLDA8PWEmJjE+PWEmJih0aGlzLnRhLmxheWVyU3BhY2luZ1BhcmVudE92ZXJsYXA9YSx0aGlzLkooKSkpfSk7dC5nKFgsImFsdGVybmF0ZUNvbXBhY3Rpb24iLFgucHJvdG90eXBlLk1IKTsNCnQuZGVmaW5lUHJvcGVydHkoWCx7TUg6ImFsdGVybmF0ZUNvbXBhY3Rpb24ifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhLmNvbXBhY3Rpb259LGZ1bmN0aW9uKGEpe3RoaXMudGEuY29tcGFjdGlvbiE9PWEmJih0LkFhKGEsWCxYLCJhbHRlcm5hdGVDb21wYWN0aW9uIiksYT09PXBxfHxhPT09cnEpJiYodGhpcy50YS5jb21wYWN0aW9uPWEsdGhpcy5KKCkpfSk7dC5nKFgsImFsdGVybmF0ZUJyZWFkdGhMaW1pdCIsWC5wcm90b3R5cGUuSUgpO3QuZGVmaW5lUHJvcGVydHkoWCx7SUg6ImFsdGVybmF0ZUJyZWFkdGhMaW1pdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGEuYnJlYWR0aExpbWl0fSxmdW5jdGlvbihhKXt0aGlzLnRhLmJyZWFkdGhMaW1pdCE9PWEmJih0LmkoYSwibnVtYmVyIixYLCJhbHRlcm5hdGVCcmVhZHRoTGltaXQiKSwwPD1hJiYodGhpcy50YS5icmVhZHRoTGltaXQ9YSx0aGlzLkooKSkpfSk7dC5nKFgsImFsdGVybmF0ZVJvd1NwYWNpbmciLFgucHJvdG90eXBlLldIKTsNCnQuZGVmaW5lUHJvcGVydHkoWCx7V0g6ImFsdGVybmF0ZVJvd1NwYWNpbmcifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhLnJvd1NwYWNpbmd9LGZ1bmN0aW9uKGEpe3RoaXMudGEucm93U3BhY2luZyE9PWEmJih0LmkoYSwibnVtYmVyIixYLCJhbHRlcm5hdGVSb3dTcGFjaW5nIiksdGhpcy50YS5yb3dTcGFjaW5nPWEsdGhpcy5KKCkpfSk7dC5nKFgsImFsdGVybmF0ZVJvd0luZGVudCIsWC5wcm90b3R5cGUuVkgpO3QuZGVmaW5lUHJvcGVydHkoWCx7Vkg6ImFsdGVybmF0ZVJvd0luZGVudCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGEucm93SW5kZW50fSxmdW5jdGlvbihhKXt0aGlzLnRhLnJvd0luZGVudCE9PWEmJih0LmkoYSwibnVtYmVyIixYLCJhbHRlcm5hdGVSb3dJbmRlbnQiKSwwPD1hJiYodGhpcy50YS5yb3dJbmRlbnQ9YSx0aGlzLkooKSkpfSk7dC5nKFgsImFsdGVybmF0ZUNvbW1lbnRTcGFjaW5nIixYLnByb3RvdHlwZS5MSCk7DQp0LmRlZmluZVByb3BlcnR5KFgse0xIOiJhbHRlcm5hdGVDb21tZW50U3BhY2luZyJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGEuY29tbWVudFNwYWNpbmd9LGZ1bmN0aW9uKGEpe3RoaXMudGEuY29tbWVudFNwYWNpbmchPT1hJiYodC5pKGEsIm51bWJlciIsWCwiYWx0ZXJuYXRlQ29tbWVudFNwYWNpbmciKSx0aGlzLnRhLmNvbW1lbnRTcGFjaW5nPWEsdGhpcy5KKCkpfSk7dC5nKFgsImFsdGVybmF0ZUNvbW1lbnRNYXJnaW4iLFgucHJvdG90eXBlLktIKTt0LmRlZmluZVByb3BlcnR5KFgse0tIOiJhbHRlcm5hdGVDb21tZW50TWFyZ2luIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YS5jb21tZW50TWFyZ2lufSxmdW5jdGlvbihhKXt0aGlzLnRhLmNvbW1lbnRNYXJnaW4hPT1hJiYodC5pKGEsIm51bWJlciIsWCwiYWx0ZXJuYXRlQ29tbWVudE1hcmdpbiIpLHRoaXMudGEuY29tbWVudE1hcmdpbj1hLHRoaXMuSigpKX0pO3QuZyhYLCJhbHRlcm5hdGVTZXRzUG9ydFNwb3QiLFgucHJvdG90eXBlLllIKTsNCnQuZGVmaW5lUHJvcGVydHkoWCx7WUg6ImFsdGVybmF0ZVNldHNQb3J0U3BvdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGEuc2V0c1BvcnRTcG90fSxmdW5jdGlvbihhKXt0aGlzLnRhLnNldHNQb3J0U3BvdCE9PWEmJih0LmkoYSwiYm9vbGVhbiIsWCwiYWx0ZXJuYXRlU2V0c1BvcnRTcG90IiksdGhpcy50YS5zZXRzUG9ydFNwb3Q9YSx0aGlzLkooKSl9KTt0LmcoWCwiYWx0ZXJuYXRlUG9ydFNwb3QiLFgucHJvdG90eXBlLlVIKTt0LmRlZmluZVByb3BlcnR5KFgse1VIOiJhbHRlcm5hdGVQb3J0U3BvdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGEucG9ydFNwb3R9LGZ1bmN0aW9uKGEpe3QubChhLEksWCwiYWx0ZXJuYXRlUG9ydFNwb3QiKTt0aGlzLnRhLnBvcnRTcG90Lk0oYSl8fCh0aGlzLnRhLnBvcnRTcG90PWEsdGhpcy5KKCkpfSk7dC5nKFgsImFsdGVybmF0ZVNldHNDaGlsZFBvcnRTcG90IixYLnByb3RvdHlwZS5YSCk7DQp0LmRlZmluZVByb3BlcnR5KFgse1hIOiJhbHRlcm5hdGVTZXRzQ2hpbGRQb3J0U3BvdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGEuc2V0c0NoaWxkUG9ydFNwb3R9LGZ1bmN0aW9uKGEpe3RoaXMudGEuc2V0c0NoaWxkUG9ydFNwb3QhPT1hJiYodC5pKGEsImJvb2xlYW4iLFgsImFsdGVybmF0ZVNldHNDaGlsZFBvcnRTcG90IiksdGhpcy50YS5zZXRzQ2hpbGRQb3J0U3BvdD1hLHRoaXMuSigpKX0pO3QuZyhYLCJhbHRlcm5hdGVDaGlsZFBvcnRTcG90IixYLnByb3RvdHlwZS5KSCk7dC5kZWZpbmVQcm9wZXJ0eShYLHtKSDoiYWx0ZXJuYXRlQ2hpbGRQb3J0U3BvdCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGEuY2hpbGRQb3J0U3BvdH0sZnVuY3Rpb24oYSl7dC5sKGEsSSxYLCJhbHRlcm5hdGVDaGlsZFBvcnRTcG90Iik7dGhpcy50YS5jaGlsZFBvcnRTcG90Lk0oYSl8fCh0aGlzLnRhLmNoaWxkUG9ydFNwb3Q9YSx0aGlzLkooKSl9KTt2YXIgSnA7DQpYLlBhdGhEZWZhdWx0PUpwPXQudyhYLCJQYXRoRGVmYXVsdCIsLTEpO3ZhciBLcDtYLlBhdGhEZXN0aW5hdGlvbj1LcD10LncoWCwiUGF0aERlc3RpbmF0aW9uIiwwKTt2YXIgU3A7WC5QYXRoU291cmNlPVNwPXQudyhYLCJQYXRoU291cmNlIiwxKTt2YXIgZXE7WC5Tb3J0aW5nRm9yd2FyZHM9ZXE9dC53KFgsIlNvcnRpbmdGb3J3YXJkcyIsMTApO3ZhciBmcTtYLlNvcnRpbmdSZXZlcnNlPWZxPXQudyhYLCJTb3J0aW5nUmV2ZXJzZSIsMTEpO3ZhciBncTtYLlNvcnRpbmdBc2NlbmRpbmc9Z3E9dC53KFgsIlNvcnRpbmdBc2NlbmRpbmciLDEyKTt2YXIgaHE7WC5Tb3J0aW5nRGVzY2VuZGluZz1ocT10LncoWCwiU29ydGluZ0Rlc2NlbmRpbmciLDEzKTt2YXIgRnE7WC5BbGlnbm1lbnRDZW50ZXJTdWJ0cmVlcz1GcT10LncoWCwiQWxpZ25tZW50Q2VudGVyU3VidHJlZXMiLDIwKTt2YXIgaXE7DQpYLkFsaWdubWVudENlbnRlckNoaWxkcmVuPWlxPXQudyhYLCJBbGlnbm1lbnRDZW50ZXJDaGlsZHJlbiIsMjEpO3ZhciB0cTtYLkFsaWdubWVudFN0YXJ0PXRxPXQudyhYLCJBbGlnbm1lbnRTdGFydCIsMjIpO3ZhciB1cTtYLkFsaWdubWVudEVuZD11cT10LncoWCwiQWxpZ25tZW50RW5kIiwyMyk7dmFyIGtxO1guQWxpZ25tZW50QnVzPWtxPXQudyhYLCJBbGlnbm1lbnRCdXMiLDI0KTt2YXIgJHA7WC5BbGlnbm1lbnRCdXNCcmFuY2hpbmc9JHA9dC53KFgsIkFsaWdubWVudEJ1c0JyYW5jaGluZyIsMjUpO3ZhciBscTtYLkFsaWdubWVudFRvcExlZnRCdXM9bHE9dC53KFgsIkFsaWdubWVudFRvcExlZnRCdXMiLDI2KTt2YXIgbXE7WC5BbGlnbm1lbnRCb3R0b21SaWdodEJ1cz1tcT10LncoWCwiQWxpZ25tZW50Qm90dG9tUmlnaHRCdXMiLDI3KTt2YXIgcHE7WC5Db21wYWN0aW9uTm9uZT1wcT10LncoWCwiQ29tcGFjdGlvbk5vbmUiLDMwKTt2YXIgcnE7DQpYLkNvbXBhY3Rpb25CbG9jaz1ycT10LncoWCwiQ29tcGFjdGlvbkJsb2NrIiwzMSk7dmFyIExwO1guU3R5bGVMYXllcmVkPUxwPXQudyhYLCJTdHlsZUxheWVyZWQiLDQwKTt2YXIgZHE7WC5TdHlsZUxhc3RQYXJlbnRzPWRxPXQudyhYLCJTdHlsZUxhc3RQYXJlbnRzIiw0MSk7dmFyIGNxO1guU3R5bGVBbHRlcm5hdGluZz1jcT10LncoWCwiU3R5bGVBbHRlcm5hdGluZyIsNDIpO3ZhciBicTtYLlN0eWxlUm9vdE9ubHk9YnE9dC53KFgsIlN0eWxlUm9vdE9ubHkiLDQzKTt2YXIgTnA7WC5BcnJhbmdlbWVudFZlcnRpY2FsPU5wPXQudyhYLCJBcnJhbmdlbWVudFZlcnRpY2FsIiw1MCk7dmFyIFRxO1guQXJyYW5nZW1lbnRIb3Jpem9udGFsPVRxPXQudyhYLCJBcnJhbmdlbWVudEhvcml6b250YWwiLDUxKTt2YXIgUnA7WC5BcnJhbmdlbWVudEZpeGVkUm9vdHM9UnA9dC53KFgsIkFycmFuZ2VtZW50Rml4ZWRSb290cyIsNTIpO3ZhciBNcDsNClguTGF5ZXJJbmRpdmlkdWFsPU1wPXQudyhYLCJMYXllckluZGl2aWR1YWwiLDYwKTt2YXIgWXA7WC5MYXllclNpYmxpbmdzPVlwPXQudyhYLCJMYXllclNpYmxpbmdzIiw2MSk7dmFyIFhwO1guTGF5ZXJVbmlmb3JtPVhwPXQudyhYLCJMYXllclVuaWZvcm0iLDYyKTtmdW5jdGlvbiBQcCgpe3JhLmNhbGwodGhpcyl9dC5nYSgiVHJlZU5ldHdvcmsiLFBwKTt0LkthKFBwLHJhKTtQcC5wcm90b3R5cGUuY3JlYXRlVmVydGV4PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPcH07UHAucHJvdG90eXBlLmNyZWF0ZUVkZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZxfTsNCmZ1bmN0aW9uIE9wKCl7c2EuY2FsbCh0aGlzKTt0aGlzLmluaXRpYWxpemVkPSExO3RoaXMucGFyZW50PW51bGw7dGhpcy5jaGlsZHJlbj1bXTt0aGlzLm1heEdlbmVyYXRpb25Db3VudD10aGlzLm1heENoaWxkcmVuQ291bnQ9dGhpcy5kZXNjZW5kYW50Q291bnQ9dGhpcy5sZXZlbD0wO3RoaXMuY29tbWVudHM9bnVsbDt0aGlzLm5hPW5ldyB3KDAsMCk7dGhpcy5aYT1uZXcgZ2EoMCwwKTt0aGlzLklhPW5ldyB3KDAsMCk7dGhpcy5QcD10aGlzLk9wPXRoaXMuT0o9ITE7dGhpcy5KdD10aGlzLnN0PW51bGw7dGhpcy5zb3J0aW5nPWVxO3RoaXMuY29tcGFyZXI9Um47dGhpcy5hbmdsZT0wO3RoaXMuYWxpZ25tZW50PWlxO3RoaXMubm9kZUluZGVudFBhc3RQYXJlbnQ9dGhpcy5ub2RlSW5kZW50PTA7dGhpcy5ub2RlU3BhY2luZz0yMDt0aGlzLmxheWVyU3BhY2luZz01MDt0aGlzLmxheWVyU3BhY2luZ1BhcmVudE92ZXJsYXA9MDt0aGlzLmNvbXBhY3Rpb249cnE7dGhpcy5icmVhZHRoTGltaXQ9DQowO3RoaXMucm93U3BhY2luZz0yNTt0aGlzLmNvbW1lbnRTcGFjaW5nPXRoaXMucm93SW5kZW50PTEwO3RoaXMuY29tbWVudE1hcmdpbj0yMDt0aGlzLnNldHNQb3J0U3BvdD0hMDt0aGlzLnBvcnRTcG90PXhiO3RoaXMuc2V0c0NoaWxkUG9ydFNwb3Q9ITA7dGhpcy5jaGlsZFBvcnRTcG90PXhifXQuZ2EoIlRyZWVWZXJ0ZXgiLE9wKTt0LkthKE9wLHNhKTsNCk9wLnByb3RvdHlwZS5jb3B5SW5oZXJpdGVkUHJvcGVydGllc0Zyb209ZnVuY3Rpb24oYSl7bnVsbCE9PWEmJih0aGlzLnNvcnRpbmc9YS5zb3J0aW5nLHRoaXMuY29tcGFyZXI9YS5jb21wYXJlcix0aGlzLmFuZ2xlPWEuYW5nbGUsdGhpcy5hbGlnbm1lbnQ9YS5hbGlnbm1lbnQsdGhpcy5ub2RlSW5kZW50PWEubm9kZUluZGVudCx0aGlzLm5vZGVJbmRlbnRQYXN0UGFyZW50PWEubm9kZUluZGVudFBhc3RQYXJlbnQsdGhpcy5ub2RlU3BhY2luZz1hLm5vZGVTcGFjaW5nLHRoaXMubGF5ZXJTcGFjaW5nPWEubGF5ZXJTcGFjaW5nLHRoaXMubGF5ZXJTcGFjaW5nUGFyZW50T3ZlcmxhcD1hLmxheWVyU3BhY2luZ1BhcmVudE92ZXJsYXAsdGhpcy5jb21wYWN0aW9uPWEuY29tcGFjdGlvbix0aGlzLmJyZWFkdGhMaW1pdD1hLmJyZWFkdGhMaW1pdCx0aGlzLnJvd1NwYWNpbmc9YS5yb3dTcGFjaW5nLHRoaXMucm93SW5kZW50PWEucm93SW5kZW50LHRoaXMuY29tbWVudFNwYWNpbmc9YS5jb21tZW50U3BhY2luZywNCnRoaXMuY29tbWVudE1hcmdpbj1hLmNvbW1lbnRNYXJnaW4sdGhpcy5zZXRzUG9ydFNwb3Q9YS5zZXRzUG9ydFNwb3QsdGhpcy5wb3J0U3BvdD1hLnBvcnRTcG90LHRoaXMuc2V0c0NoaWxkUG9ydFNwb3Q9YS5zZXRzQ2hpbGRQb3J0U3BvdCx0aGlzLmNoaWxkUG9ydFNwb3Q9YS5jaGlsZFBvcnRTcG90KX07dC5BKE9wLHtHbToiY2hpbGRyZW5Db3VudCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RofSk7dC5nKE9wLCJyZWxhdGl2ZVBvc2l0aW9uIixPcC5wcm90b3R5cGUuSUopO3QuZGVmaW5lUHJvcGVydHkoT3Ase0lKOiJyZWxhdGl2ZVBvc2l0aW9uIn0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYX0sZnVuY3Rpb24oYSl7dGhpcy5uYS5zZXQoYSl9KTt0LmcoT3AsInN1YnRyZWVTaXplIixPcC5wcm90b3R5cGUuYUspO3QuZGVmaW5lUHJvcGVydHkoT3Ase2FLOiJzdWJ0cmVlU2l6ZSJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmF9LGZ1bmN0aW9uKGEpe3RoaXMuWmEuc2V0KGEpfSk7DQp0LmcoT3AsInN1YnRyZWVPZmZzZXQiLE9wLnByb3RvdHlwZS4kSik7dC5kZWZpbmVQcm9wZXJ0eShPcCx7JEo6InN1YnRyZWVPZmZzZXQifSxmdW5jdGlvbigpe3JldHVybiB0aGlzLklhfSxmdW5jdGlvbihhKXt0aGlzLklhLnNldChhKX0pO2Z1bmN0aW9uIFZxKCl7dWEuY2FsbCh0aGlzKTt0aGlzLlNyPW5ldyB3KDAsMCl9dC5nYSgiVHJlZUVkZ2UiLFZxKTt0LkthKFZxLHVhKTsNClZxLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmxpbms7aWYobnVsbCE9PWEmJiFhLmRqKXt2YXIgYj10aGlzLm5ldHdvcmsuamMsYz1udWxsLGQ9bnVsbDtzd2l0Y2goYi5JZil7Y2FzZSBLcDpjPXRoaXMuZnJvbVZlcnRleDtkPXRoaXMudG9WZXJ0ZXg7YnJlYWs7Y2FzZSBTcDpjPXRoaXMudG9WZXJ0ZXg7ZD10aGlzLmZyb21WZXJ0ZXg7YnJlYWs7ZGVmYXVsdDp0Lm0oIlVuaGFuZGxlZCBwYXRoIHZhbHVlICIrYi5JZi50b1N0cmluZygpKX1pZihudWxsIT09YyYmbnVsbCE9PWQpaWYoYj10aGlzLlNyLDAhPT1iLnh8fDAhPT1iLnl8fGMuT0ope3ZhciBkPWMuT2IsZj1zcShjKSxnPXZxKGMpLGg9Yy5yb3dTcGFjaW5nO2EudXBkYXRlUm91dGUoKTt2YXIgaz1hLkRlPT09T2csbD1hLmljLG0sbixwLHE7YS55bCgpO2lmKGx8fGspe2ZvcihtPTI7NDxhLm9hOylhLlFGKDIpO249YS5vKDEpO3A9YS5vKDIpfWVsc2V7Zm9yKG09MTszPGEub2E7KWEuUUYoMSk7bj0NCmEubygwKTtwPWEubyhhLm9hLTEpfXE9YS5vKGEub2EtMSk7MD09PWY/KGMuYWxpZ25tZW50PT09dXE/KGY9ZC5ib3R0b20rYi55LDA9PT1iLnkmJm4ueT5xLnkrYy5yb3dJbmRlbnQmJihmPU1hdGgubWluKGYsTWF0aC5tYXgobi55LGYtd3EoYykpKSkpOmMuYWxpZ25tZW50PT09dHE/KGY9ZC50b3ArYi55LDA9PT1iLnkmJm4ueTxxLnktYy5yb3dJbmRlbnQmJihmPU1hdGgubWF4KGYsTWF0aC5taW4obi55LGYrd3EoYykpKSkpOmY9Yy5PcHx8Yy5QcCYmMT09PWMubWF4R2VuZXJhdGlvbkNvdW50P2QudG9wLWMuSWEueStiLnk6ZC55K2QuaGVpZ2h0LzIrYi55LGs/KGEuQyhtLG4ueCxmKSxtKyssYS5DKG0sZC5yaWdodCtnLGYpLG0rKyxhLkMobSxkLnJpZ2h0K2crKGIueC1oKS8zLGYpLG0rKyxhLkMobSxkLnJpZ2h0K2crMiooYi54LWgpLzMsZiksbSsrLGEuQyhtLGQucmlnaHQrZysoYi54LWgpLGYpLG0rKyxhLkMobSxwLngsZikpOihsJiYoYS5DKG0sZC5yaWdodCtnLzIsbi55KSwNCm0rKyksYS5DKG0sZC5yaWdodCtnLzIsZiksbSsrLGEuQyhtLGQucmlnaHQrZytiLngtKGw/aC8yOmgpLGYpLG0rKyxsJiZhLkMobSxhLm8obS0xKS54LHAueSkpKTo5MD09PWY/KGMuYWxpZ25tZW50PT09dXE/KGY9ZC5yaWdodCtiLngsMD09PWIueCYmbi54PnEueCtjLnJvd0luZGVudCYmKGY9TWF0aC5taW4oZixNYXRoLm1heChuLngsZi13cShjKSkpKSk6Yy5hbGlnbm1lbnQ9PT10cT8oZj1kLmxlZnQrYi54LDA9PT1iLngmJm4ueDxxLngtYy5yb3dJbmRlbnQmJihmPU1hdGgubWF4KGYsTWF0aC5taW4obi54LGYrd3EoYykpKSkpOmY9Yy5PcHx8Yy5QcCYmMT09PWMubWF4R2VuZXJhdGlvbkNvdW50P2QubGVmdC1jLklhLngrYi54OmQueCtkLndpZHRoLzIrYi54LGs/KGEuQyhtLGYsbi55KSxtKyssYS5DKG0sZixkLmJvdHRvbStnKSxtKyssYS5DKG0sZixkLmJvdHRvbStnKyhiLnktaCkvMyksbSsrLGEuQyhtLGYsZC5ib3R0b20rZysyKihiLnktaCkvMyksbSsrLGEuQyhtLGYsZC5ib3R0b20rDQpnKyhiLnktaCkpLG0rKyxhLkMobSxmLHAueSkpOihsJiYoYS5DKG0sbi54LGQuYm90dG9tK2cvMiksbSsrKSxhLkMobSxmLGQuYm90dG9tK2cvMiksbSsrLGEuQyhtLGYsZC5ib3R0b20rZytiLnktKGw/aC8yOmgpKSxtKyssbCYmYS5DKG0scC54LGEubyhtLTEpLnkpKSk6MTgwPT09Zj8oYy5hbGlnbm1lbnQ9PT11cT8oZj1kLmJvdHRvbStiLnksMD09PWIueSYmbi55PnEueStjLnJvd0luZGVudCYmKGY9TWF0aC5taW4oZixNYXRoLm1heChuLnksZi13cShjKSkpKSk6Yy5hbGlnbm1lbnQ9PT10cT8oZj1kLnRvcCtiLnksMD09PWIueSYmbi55PHEueS1jLnJvd0luZGVudCYmKGY9TWF0aC5tYXgoZixNYXRoLm1pbihuLnksZit3cShjKSkpKSk6Zj1jLk9wfHxjLlBwJiYxPT09Yy5tYXhHZW5lcmF0aW9uQ291bnQ/ZC50b3AtYy5JYS55K2IueTpkLnkrZC5oZWlnaHQvMitiLnksaz8oYS5DKG0sbi54LGYpLG0rKyxhLkMobSxkLmxlZnQtZyxmKSxtKyssYS5DKG0sZC5sZWZ0LWcrKGIueCsNCmgpLzMsZiksbSsrLGEuQyhtLGQubGVmdC1nKzIqKGIueCtoKS8zLGYpLG0rKyxhLkMobSxkLmxlZnQtZysoYi54K2gpLGYpLG0rKyxhLkMobSxwLngsZikpOihsJiYoYS5DKG0sZC5sZWZ0LWcvMixuLnkpLG0rKyksYS5DKG0sZC5sZWZ0LWcvMixmKSxtKyssYS5DKG0sZC5sZWZ0LWcrYi54KyhsP2gvMjpoKSxmKSxtKyssbCYmYS5DKG0sYS5vKG0tMSkueCxwLnkpKSk6MjcwPT09Zj8oYy5hbGlnbm1lbnQ9PT11cT8oZj1kLnJpZ2h0K2IueCwwPT09Yi54JiZuLng+cS54K2Mucm93SW5kZW50JiYoZj1NYXRoLm1pbihmLE1hdGgubWF4KG4ueCxmLXdxKGMpKSkpKTpjLmFsaWdubWVudD09PXRxPyhmPWQubGVmdCtiLngsMD09PWIueCYmbi54PHEueC1jLnJvd0luZGVudCYmKGY9TWF0aC5tYXgoZixNYXRoLm1pbihuLngsZit3cShjKSkpKSk6Zj1jLk9wfHxjLlBwJiYxPT09Yy5tYXhHZW5lcmF0aW9uQ291bnQ/ZC5sZWZ0LWMuSWEueCtiLng6ZC54K2Qud2lkdGgvMitiLngsaz8oYS5DKG0sDQpmLG4ueSksbSsrLGEuQyhtLGYsZC50b3AtZyksbSsrLGEuQyhtLGYsZC50b3AtZysoYi55K2gpLzMpLG0rKyxhLkMobSxmLGQudG9wLWcrMiooYi55K2gpLzMpLG0rKyxhLkMobSxmLGQudG9wLWcrKGIueStoKSksbSsrLGEuQyhtLGYscC55KSk6KGwmJihhLkMobSxuLngsZC50b3AtZy8yKSxtKyspLGEuQyhtLGYsZC50b3AtZy8yKSxtKyssYS5DKG0sZixkLnRvcC1nK2IueSsobD9oLzI6aCkpLG0rKyxsJiZhLkMobSxwLngsYS5vKG0tMSkueSkpKTp0Lm0oIkludmFsaWQgYW5nbGUgIitmKTthLldpKCl9ZWxzZSBnPWMsaD1kLGUmJnQubChnLE9wLFZxLCJhZGp1c3RSb3V0ZUZvckFuZ2xlQ2hhbmdlOnBhcmVudCIpLGUmJnQubChoLE9wLFZxLCJhZGp1c3RSb3V0ZUZvckFuZ2xlQ2hhbmdlOmNoaWxkIiksYT10aGlzLmxpbmssYz1zcShnKSxjIT09c3EoaCkmJihiPXZxKGcpLGQ9Zy5PYixnPWguT2IsMD09PWMmJmcubGVmdC1kLnJpZ2h0PGIrMXx8OTA9PT1jJiZnLnRvcC1kLmJvdHRvbTwNCmIrMXx8MTgwPT09YyYmZC5sZWZ0LWcucmlnaHQ8YisxfHwyNzA9PT1jJiZkLnRvcC1nLmJvdHRvbTxiKzF8fChhLnVwZGF0ZVJvdXRlKCksZz1hLkRlPT09T2csaD1hLmljLGs9anEodGhpcy5mcm9tVmVydGV4LmFsaWdubWVudCksYS55bCgpLDA9PT1jPyhjPWQucmlnaHQrYi8yLGc/ND09PWEub2EmJihiPWEubygzKS55LGEuWSgxLGMtMjAsYS5vKDEpLnkpLGEuQygyLGMtMjAsYiksYS5DKDMsYyxiKSxhLkMoNCxjKzIwLGIpLGEuWSg1LGEubyg1KS54LGIpKTpoP2s/YS5ZKDMsYS5vKDIpLngsYS5vKDQpLnkpOjY9PT1hLm9hJiYoYS5ZKDIsYyxhLm8oMikueSksYS5ZKDMsYyxhLm8oMykueSkpOjQ9PT1hLm9hP2EuQygyLGMsYS5vKDIpLnkpOjM9PT1hLm9hP2EuWSgxLGMsYS5vKDIpLnkpOjI9PT1hLm9hJiZhLkMoMSxjLGEubygxKS55KSk6OTA9PT1jPyhiPWQuYm90dG9tK2IvMixnPzQ9PT1hLm9hJiYoYz1hLm8oMykueCxhLlkoMSxhLm8oMSkueCxiLTIwKSxhLkMoMixjLGItMjApLA0KYS5DKDMsYyxiKSxhLkMoNCxjLGIrMjApLGEuWSg1LGMsYS5vKDUpLnkpKTpoP2s/YS5ZKDMsYS5vKDIpLngsYS5vKDQpLnkpOjY9PT1hLm9hJiYoYS5ZKDIsYS5vKDIpLngsYiksYS5ZKDMsYS5vKDMpLngsYikpOjQ9PT1hLm9hP2EuQygyLGEubygyKS54LGIpOjM9PT1hLm9hP2EuWSgxLGEubygyKS54LGIpOjI9PT1hLm9hJiZhLkMoMSxhLm8oMSkueCxiKSk6MTgwPT09Yz8oYz1kLmxlZnQtYi8yLGc/ND09PWEub2EmJihiPWEubygzKS55LGEuWSgxLGMrMjAsYS5vKDEpLnkpLGEuQygyLGMrMjAsYiksYS5DKDMsYyxiKSxhLkMoNCxjLTIwLGIpLGEuWSg1LGEubyg1KS54LGIpKTpoP2s/YS5ZKDMsYS5vKDIpLngsYS5vKDQpLnkpOjY9PT1hLm9hJiYoYS5ZKDIsYyxhLm8oMikueSksYS5ZKDMsYyxhLm8oMykueSkpOjQ9PT1hLm9hP2EuQygyLGMsYS5vKDIpLnkpOjM9PT1hLm9hP2EuWSgxLGMsYS5vKDIpLnkpOjI9PT1hLm9hJiZhLkMoMSxjLGEubygxKS55KSk6MjcwPT09YyYmKGI9DQpkLnRvcC1iLzIsZz80PT09YS5vYSYmKGM9YS5vKDMpLngsYS5ZKDEsYS5vKDEpLngsYisyMCksYS5DKDIsYyxiKzIwKSxhLkMoMyxjLGIpLGEuQyg0LGMsYi0yMCksYS5ZKDUsYyxhLm8oNSkueSkpOmg/az9hLlkoMyxhLm8oMikueCxhLm8oNCkueSk6Nj09PWEub2EmJihhLlkoMixhLm8oMikueCxiKSxhLlkoMyxhLm8oMykueCxiKSk6ND09PWEub2E/YS5DKDIsYS5vKDIpLngsYik6Mz09PWEub2E/YS5ZKDEsYS5vKDIpLngsYik6Mj09PWEub2EmJmEuQygxLGEubygxKS54LGIpKSxhLldpKCkpKX19O3QuZyhWcSwicmVsYXRpdmVQb2ludCIsVnEucHJvdG90eXBlLkhKKTt0LmRlZmluZVByb3BlcnR5KFZxLHtISjoicmVsYXRpdmVQb2ludCJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU3J9LGZ1bmN0aW9uKGEpe3RoaXMuU3Iuc2V0KGEpfSk7ZnVuY3Rpb24gV3EoKXt0aGlzLlZuPVtdfQ0KZnVuY3Rpb24gUmsoYSl7dmFyIGI9bmV3IFdxLGM7aWYoInN0cmluZyI9PT10eXBlb2YgYSljPShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYSwidGV4dC94bWwiKTtlbHNlIGlmKGEgaW5zdGFuY2VvZiBEb2N1bWVudCljPWEuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIixudWxsKSxjLmFwcGVuZENoaWxkKGMuaW1wb3J0Tm9kZShhLmRvY3VtZW50RWxlbWVudCwhMCkpO2Vsc2UgcmV0dXJuIG51bGw7YT1jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzdmciKTtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIGQ9YVswXSxmPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmVhckdyYWRpZW50IiksZz1jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJyYWRpYWxHcmFkaWVudCIpO2ZvcihhPTA7YTxmLmxlbmd0aDthKyspe2Zvcih2YXIgaD1mW2FdLGs9U2soZmEsT2Qse3N0YXJ0OlhiLGVuZDpZYn0pLGw9DQpoLmNoaWxkTm9kZXMsbT0wO208bC5sZW5ndGg7bSsrKWlmKCJzdG9wIj09PWxbbV0udGFnTmFtZSl7dmFyIG49WHEoYixsW21dLCJzdG9wLWNvbG9yIik7aWYobil7dmFyIHA9WHEoYixsW21dLCJvZmZzZXQiKTtwfHwocD0iMCIpO3ZhciBxPXBhcnNlRmxvYXQocCk7aXNOYU4ocSkmJihxPTApO2suYWRkQ29sb3JTdG9wKCgtMSE9PXAuaW5kZXhPZigiJSIpPzAuMDE6MSkqcSxuKX19aD1oLmdldEF0dHJpYnV0ZSgiaWQiKTsic3RyaW5nIj09PXR5cGVvZiBoJiYoYlsiX2JydXNoIitoXT1rKX1mb3IoYT0wO2E8Zy5sZW5ndGg7YSsrKXtoPWdbYV07az1TayhmYSxaZCx7c3RhcnQ6S2IsZW5kOktifSk7bD1oLmNoaWxkTm9kZXM7Zm9yKG09MDttPGwubGVuZ3RoO20rKykic3RvcCI9PT1sW21dLnRhZ05hbWUmJihuPVhxKGIsbFttXSwic3RvcC1jb2xvciIpKSYmKChwPVhxKGIsbFttXSwib2Zmc2V0IikpfHwocD0iMCIpLHE9cGFyc2VGbG9hdChwKSxpc05hTihxKSYmKHE9MCksay5hZGRDb2xvclN0b3AoKC0xIT09DQpwLmluZGV4T2YoIiUiKT8wLjAxOjEpKnEsbikpO2g9aC5nZXRBdHRyaWJ1dGUoImlkIik7InN0cmluZyI9PT10eXBlb2YgaCYmKGJbIl9icnVzaCIraF09ayl9Zm9yKGY9ITA7ZjspZm9yKGY9ITEsZz1jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ1c2UiKSxhPTA7YTxnLmxlbmd0aDthKyspaz1nW2FdLDA9PT1rLmNoaWxkTm9kZXMubGVuZ3RoJiYoaD1rLmhyZWYsdm9pZCAwIT09aCYmKGg9Yy5nZXRFbGVtZW50QnlJZChoLmJhc2VWYWwuc3Vic3RyaW5nKDEpKSxudWxsIT09aCYmKGg9aC5jbG9uZU5vZGUoITApLGgucmVtb3ZlQXR0cmlidXRlKCJpZCIpLGw9cGFyc2VGbG9hdChrLmdldEF0dHJpYnV0ZSgieCIpKSxpc05hTihsKSYmKGw9MCksbT1wYXJzZUZsb2F0KGsuZ2V0QXR0cmlidXRlKCJ5IikpLGlzTmFOKG0pJiYobT0wKSxuPWsuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKSxudWxsPT09biYmKG49IiIpLGsuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLG4rIiB0cmFuc2xhdGUoIisNCmwrIiwiK20rIikiKSxrLmFwcGVuZENoaWxkKGgpLCJ1c2UiPT09aC50YWdOYW1lJiYoZj0hMCkpKSk7WXEoYixkLG51bGwpO2M9bmV3IHk7aWYoMD09PWIuVm4ubGVuZ3RoKXJldHVybiBjO2lmKDE9PT1iLlZuLmxlbmd0aClyZXR1cm4gYi5WblswXTtmb3IoYT0wO2E8Yi5Wbi5sZW5ndGg7YSsrKWMuYWRkKGIuVm5bYV0pO3JldHVybiBjfWZ1bmN0aW9uIFpxKGEsYil7dmFyIGM9YS5nZXRBdHRyaWJ1dGUoYik7InN0cmluZyIhPT10eXBlb2YgYyYmYS5zdHlsZSYmKGM9YS5zdHlsZVtiXSk7cmV0dXJuInN0cmluZyIhPT10eXBlb2YgYz9udWxsOmN9DQpmdW5jdGlvbiBYcShhLGIsYyl7dmFyIGQ9Yi5nZXRBdHRyaWJ1dGUoYyk7InN0cmluZyIhPT10eXBlb2YgZCYmYi5zdHlsZSYmKGQ9Yi5zdHlsZVtjXSk7cmV0dXJuInN0cmluZyIhPT10eXBlb2YgZHx8IiI9PT1kfHwiaW5oZXJpdCI9PT1kPyhiPWIucGFyZW50Tm9kZSwiZyI9PT1iLnRhZ05hbWV8fCJ1c2UiPT09Yi50YWdOYW1lP1hxKGEsYixjKTpudWxsKTpkfQ0KZnVuY3Rpb24gWXEoYSxiLGMpe3ZhciBkPWIudGFnTmFtZTtpZigoImciPT09ZHx8InN2ZyI9PT1kfHwidXNlIj09PWR8fCJzeW1ib2wiPT09ZCkmJiJub25lIiE9PVhxKGEsYiwiZGlzcGxheSIpKXtmb3IodmFyIGQ9Yi5jaGlsZE5vZGVzLGY9MDtmPGQubGVuZ3RoO2YrKyl7dmFyIGc9ZFtmXSxoPW51bGw7aWYodm9pZCAwIT09Zy5nZXRBdHRyaWJ1dGUpe3ZhciBrPWcuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKTtzd2l0Y2goZy50YWdOYW1lKXtjYXNlICJnIjpudWxsPT09az9ZcShhLGcsbnVsbCk6KGg9bmV3IHksWXEoYSxnLGgpKTticmVhaztjYXNlICJ1c2UiOm51bGw9PT1rP1lxKGEsZyxudWxsKTooaD1uZXcgeSxZcShhLGcsaCkpO2JyZWFrO2Nhc2UgInN5bWJvbCI6aWYoInVzZSIhPT1iLnRhZ05hbWUpYnJlYWs7aD1uZXcgeTtZcShhLGcsaCk7dmFyIGw9aCxtPWEsbj1nO1hxKG0sbiwicHJlc2VydmVBc3BlY3RSYXRpbyIpO1hxKG0sbiwidmlld0JveCIpO2wuc2NhbGU9DQoxO2JyZWFrO2Nhc2UgInBhdGgiOmw9ZztoPW5ldyBXO2w9bC5nZXRBdHRyaWJ1dGUoImQiKTsic3RyaW5nIj09PXR5cGVvZiBsJiYoaC5KRT1RYyhsKSk7YnJlYWs7Y2FzZSAibGluZSI6dmFyIHA9ZyxoPW5ldyBXLGw9cGFyc2VGbG9hdChwLmdldEF0dHJpYnV0ZSgieDEiKSk7aXNOYU4obCkmJihsPTApO209cGFyc2VGbG9hdChwLmdldEF0dHJpYnV0ZSgieTEiKSk7aXNOYU4obSkmJihtPTApO249cGFyc2VGbG9hdChwLmdldEF0dHJpYnV0ZSgieDIiKSk7aXNOYU4obikmJihuPTApO3A9cGFyc2VGbG9hdChwLmdldEF0dHJpYnV0ZSgieTIiKSk7aXNOYU4ocCkmJihwPTApO3ZhciBxPW5ldyB6YyhEYyk7aC5wb3NpdGlvbj1uZXcgdyhNYXRoLm1pbihsLG4pLE1hdGgubWluKG0scCkpOzA8KG4tbCkvKHAtbSk/KHEucWE9MCxxLnJhPTAscS5EPU1hdGguYWJzKG4tbCkscS5GPU1hdGguYWJzKHAtbSkpOihxLnFhPTAscS5yYT1NYXRoLmFicyhwLW0pLHEuRD1NYXRoLmFicyhuLWwpLHEuRj0NCjApO2gubmQ9cTticmVhaztjYXNlICJjaXJjbGUiOm49ZztoPW5ldyBXO2w9cGFyc2VGbG9hdChuLmdldEF0dHJpYnV0ZSgiciIpKTtpc05hTihsKXx8MD5sP2g9bnVsbDoobT1wYXJzZUZsb2F0KG4uZ2V0QXR0cmlidXRlKCJjeCIpKSxpc05hTihtKSYmKG09MCksbj1wYXJzZUZsb2F0KG4uZ2V0QXR0cmlidXRlKCJjeSIpKSxpc05hTihuKSYmKG49MCkscD1uZXcgemMoTWMpLHAucWE9MCxwLnJhPTAscC5EPTIqbCxwLkY9MipsLGgucG9zaXRpb249bmV3IHcobS1sLG4tbCksaC5uZD1wKTticmVhaztjYXNlICJlbGxpcHNlIjpwPWc7aD1uZXcgVztsPXBhcnNlRmxvYXQocC5nZXRBdHRyaWJ1dGUoInJ4IikpO2lzTmFOKGwpfHwwPmw/aD1udWxsOihtPXBhcnNlRmxvYXQocC5nZXRBdHRyaWJ1dGUoInJ5IikpLGlzTmFOKG0pfHwwPm0/aD1udWxsOihuPXBhcnNlRmxvYXQocC5nZXRBdHRyaWJ1dGUoImN4IikpLGlzTmFOKG4pJiYobj0wKSxwPXBhcnNlRmxvYXQocC5nZXRBdHRyaWJ1dGUoImN5IikpLA0KaXNOYU4ocCkmJihwPTApLHE9bmV3IHpjKE1jKSxxLnFhPTAscS5yYT0wLHEuRD0yKmwscS5GPTIqbSxoLnBvc2l0aW9uPW5ldyB3KG4tbCxwLW0pLGgubmQ9cSkpO2JyZWFrO2Nhc2UgInJlY3QiOnE9ZztoPW5ldyBXO2w9cGFyc2VGbG9hdChxLmdldEF0dHJpYnV0ZSgid2lkdGgiKSk7aWYoaXNOYU4obCl8fDA+bCloPW51bGw7ZWxzZSBpZihtPXBhcnNlRmxvYXQocS5nZXRBdHRyaWJ1dGUoImhlaWdodCIpKSxpc05hTihtKXx8MD5tKWg9bnVsbDtlbHNle249cGFyc2VGbG9hdChxLmdldEF0dHJpYnV0ZSgieCIpKTtpc05hTihuKSYmKG49MCk7cD1wYXJzZUZsb2F0KHEuZ2V0QXR0cmlidXRlKCJ5IikpO2lzTmFOKHApJiYocD0wKTt2YXIgcj1xLmdldEF0dHJpYnV0ZSgicngiKSxzPXEuZ2V0QXR0cmlidXRlKCJyeSIpLHE9cGFyc2VGbG9hdChyKTtpZihpc05hTihxKXx8MD5xKXE9MDt2YXIgdT1wYXJzZUZsb2F0KHMpO2lmKGlzTmFOKHUpfHwwPnUpdT0wOyFyJiZzP3E9dTpyJiYhcyYmDQoodT1xKTtxPU1hdGgubWluKHEsbC8yKTt1PU1hdGgubWluKHUsbS8yKTtzPXZvaWQgMDswPT09cSYmMD09PXU/KHM9bmV3IHpjKEVjKSxzLnFhPTAscy5yYT0wLHMuRD1sLHMuRj1tKToocz1ILnZhLzIscj10LnUoKSxKKHIscSwwLCEwKSxyLmxpbmVUbyhsLXEsMCksSyhyLGwtcSpzLDAsbCx1KnMsbCx1KSxyLmxpbmVUbyhsLG0tdSksSyhyLGwsbS11KnMsbC1xKnMsbSxsLXEsbSksci5saW5lVG8ocSxtKSxLKHIscSpzLG0sMCxtLXUqcywwLG0tdSksci5saW5lVG8oMCx1KSxLKHIsMCx1KnMscSpzLDAscSwwKSxNKHIpLHM9ci5zLHQudihyKSk7aC5wb3NpdGlvbj1uZXcgdyhuLHApO2gubmQ9c31icmVhaztjYXNlICJwb2x5Z29uIjpoPSRxKGcpO2JyZWFrO2Nhc2UgInBvbHlsaW5lIjpoPSRxKGcpfWlmKG51bGwhPT1oKXtpZihoIGluc3RhbmNlb2YgVyl7bD1YcShhLGcsImZpbGwiKTtudWxsIT09bCYmLTEhPT1sLmluZGV4T2YoInVybCIpPyhsPWwuc3Vic3RyaW5nKGwuaW5kZXhPZigiIyIpKw0KMSxsLmxlbmd0aC0xKSxsPWFbIl9icnVzaCIrbF0saC5maWxsPWwgaW5zdGFuY2VvZiBmYT9sOiJibGFjayIpOmguZmlsbD1udWxsPT09bD8iYmxhY2siOiJub25lIj09PWw/bnVsbDpsO2w9WHEoYSxnLCJzdHJva2UiKTtudWxsIT09bCYmLTEhPT1sLmluZGV4T2YoInVybCIpPyhsPWwuc3Vic3RyaW5nKGwuaW5kZXhPZigiIyIpKzEsbC5sZW5ndGgtMSksbD1hWyJfYnJ1c2giK2xdLGguc3Ryb2tlPWwgaW5zdGFuY2VvZiBmYT9sOiJibGFjayIpOmguc3Ryb2tlPSJub25lIj09PWw/bnVsbDpsO2w9cGFyc2VGbG9hdChYcShhLGcsInN0cm9rZS13aWR0aCIpKTtpc05hTihsKXx8KGguZmI9bCk7bD1YcShhLGcsInN0cm9rZS1saW5lY2FwIik7bnVsbCE9PWwmJihoLnhHPWwpO2lmKGw9WHEoYSxnLCJzdHJva2UtZGFzaGFycmF5Iikpe209bC5zcGxpdCgiLCIpO249W107Zm9yKGw9MDtsPG0ubGVuZ3RoO2wrKylwPXBhcnNlRmxvYXQobVtsXSksIWlzTmFOKHApJiYwPHAmJm4ucHVzaChwKTsNCmguQXg9bn1pZihnPVhxKGEsZywic3Ryb2tlLWRhc2hvZmZzZXQiKSlnPXBhcnNlRmxvYXQoZyksaXNOYU4oZyl8fChoLnlHPWcpO2guc0E9ITB9aWYobnVsbCE9PWspe2s9ay5zcGxpdCgiKSIpO2c9ITA7Zm9yKGw9MDtsPGsubGVuZ3RoO2wrKykvXCguKlteMC05XC4sXHMtXS8udGVzdChrW2xdKSYmKGc9ITEpLC9cKC4qWzAtOV0tWzAtOV0vLnRlc3Qoa1tsXSkmJihnPSExKTtpZihnKWZvcihsPWsubGVuZ3RoLTE7MDw9bDtsLS0paWYobT1rW2xdLCIiIT09bSlzd2l0Y2gobj1tLmluZGV4T2YoIigiKSxnPW0uc3Vic3RyaW5nKDAsbikucmVwbGFjZSgvXHMqLywiIiksbj1tLnN1YnN0cmluZyhuKzEpLnNwbGl0KC9ccypbXHMsXVxzKi8pLGcpe2Nhc2UgInJvdGF0ZSI6YXIoYSxoLG4pO2JyZWFrO2Nhc2UgInRyYW5zbGF0ZSI6Zz1oO209cGFyc2VGbG9hdChuWzBdKTtpc05hTihtKSYmKG09MCk7bj1wYXJzZUZsb2F0KG5bMV0pO2lzTmFOKG4pJiYobj0wKTtpZigwIT09bXx8MCE9PQ0KbilwPWcucG9zaXRpb24uY29weSgpLGlzTmFOKHAueCkmJihwLng9MCksaXNOYU4ocC55KSYmKHAueT0wKSxnLnBvc2l0aW9uPW5ldyB3KG0rcC54LG4rcC55KTticmVhaztjYXNlICJzY2FsZSI6YnIoYSxoLG4pO2JyZWFrO2Nhc2UgInNrZXdYIjpjcihhLGgsbik7YnJlYWs7Y2FzZSAic2tld1kiOmRyKGEsaCxuKTticmVhaztjYXNlICJtYXRyaXgiOmVyKGEsaCxuKX19aWYoaCBpbnN0YW5jZW9mIHkpe2s9aC5lbGVtZW50cy5rO2w9Zz0wO209aC5wb3NpdGlvbi5jb3B5KCk7aXNOYU4obS54KSYmKG0ueD0wKTtpc05hTihtLnkpJiYobS55PTApO2Zvcig7ay5uZXh0KCk7KW49ay52YWx1ZS5wb3NpdGlvbi5jb3B5KCksaXNOYU4obi54KSYmKG4ueD0wKSxpc05hTihuLnkpJiYobi55PTApLG4ueDxnJiYoZz1uLngpLG4ueTxsJiYobD1uLnkpO20ueCs9ZzttLnkrPWw7aC5wb3NpdGlvbj1tfW51bGw9PT1jP2EuVm4ucHVzaChoKTpjLmFkZChoKX19fWlmKG51bGwhPT1oKXthPVpxKGIsDQoidmlzaWJpbGl0eSIpO2lmKCJoaWRkZW4iPT09YXx8ImNvbGxhcHNlIj09PWEpaC52aXNpYmxlPSExO2lmKGI9WnEoYiwib3BhY2l0eSIpKWI9cGFyc2VGbG9hdChiKSxpc05hTihiKXx8KGgub3BhY2l0eT1iKX19fQ0KZnVuY3Rpb24gZXIoYSxiLGMpe3ZhciBkPXBhcnNlRmxvYXQoY1swXSksZj1wYXJzZUZsb2F0KGNbMV0pLGc9cGFyc2VGbG9hdChjWzJdKSxoPXBhcnNlRmxvYXQoY1szXSksaz1wYXJzZUZsb2F0KGNbNF0pLGw9cGFyc2VGbG9hdChjWzVdKTtpZighaXNOYU4oZCtmK2craCtrK2wpKXt2YXIgbT1iLnBvc2l0aW9uLmNvcHkoKTtpc05hTihtLngpJiYobS54PTApO2lzTmFOKG0ueSkmJihtLnk9MCk7aWYoYiBpbnN0YW5jZW9mIFcpe2M9Yi5uZC5jb3B5KCk7aWYoYy50eXBlPT09RWMpYz1hLkRzKGMpO2Vsc2UgaWYoYy50eXBlPT09TWMpYz1mcihjKTtlbHNlIGlmKGMudHlwZT09PURjKXtjLnR5cGU9QWM7YT1uZXcgQmMoYy5xYSxjLnJhKTt2YXIgbj1uZXcgaWQoT2MsYy5ELGMuRik7YS5GYS5hZGQobik7Yy5BYi5hZGQoYSl9Yy5vZmZzZXQobS54LG0ueSk7Yy50cmFuc2Zvcm0oZCxmLGcsaCxrLW0ueCxsLW0ueSk7YT1jLm5vcm1hbGl6ZSgpO2IubmQ9YzttLngtPWEueDttLnktPWEueTsNCmIucG9zaXRpb249bX1lbHNle2ZvcihiPWIuZWxlbWVudHMuaztiLm5leHQoKTspZD1iLnZhbHVlLnBvc2l0aW9uLmNvcHkoKSxkLngrPW0ueCxkLnkrPW0ueSxiLnZhbHVlLnBvc2l0aW9uPWQ7Zm9yKGIucmVzZXQoKTtiLm5leHQoKTspZXIoYSxiLnZhbHVlLGMpO2ZvcihiLnJlc2V0KCk7Yi5uZXh0KCk7KWQ9Yi52YWx1ZS5wb3NpdGlvbi5jb3B5KCksZC54LT1tLngsZC55LT1tLnksYi52YWx1ZS5wb3NpdGlvbj1kfX19DQpmdW5jdGlvbiBhcihhLGIsYyl7dmFyIGQ9cGFyc2VGbG9hdChjWzBdKTtpc05hTihkKSYmKGQ9MCk7dmFyIGY9cGFyc2VGbG9hdChjWzFdKTtpc05hTihmKSYmKGY9MCk7dmFyIGc9cGFyc2VGbG9hdChjWzJdKTtpc05hTihnKSYmKGc9MCk7aWYoMCE9PWQpe3ZhciBoPWQqTWF0aC5QSS8xODAsaz1iLnBvc2l0aW9uLmNvcHkoKTtpc05hTihrLngpJiYoay54PTApO2lzTmFOKGsueSkmJihrLnk9MCk7aWYoYiBpbnN0YW5jZW9mIFcpe2M9Yi5uZC5jb3B5KCk7Yy50eXBlPT09TWM/Yz1mcihjKTpjLnR5cGU9PT1FYyYmKGM9YS5EcyhjKSk7aWYoYy50eXBlPT09QWMpYy5yb3RhdGUoZCxmLWsueCxnLWsueSksZz1jLm5vcm1hbGl6ZSgpLGIubmQ9YyxrLngtPWcueCxrLnktPWcueSxiLnBvc2l0aW9uPWs7ZWxzZXt2YXIgZD1jLnFhLWYray54LGw9Yy5yYS1nK2sueSxtPWMuRC1mK2sueCxuPWMuRi1nK2sueTthPWQqTWF0aC5jb3MoaCktbCpNYXRoLnNpbihoKStmLWsueDtkPWwqTWF0aC5jb3MoaCkrDQpkKk1hdGguc2luKGgpK2ctay55O2Y9bSpNYXRoLmNvcyhoKS1uKk1hdGguc2luKGgpK2Ytay54O2c9bipNYXRoLmNvcyhoKSttKk1hdGguc2luKGgpK2ctay55O209TWF0aC5taW4oYSxmKTtuPU1hdGgubWluKGQsZyk7Yy5xYT1hLW07Yy5yYT1kLW47Yy5EPWYtbTtjLkY9Zy1uO2sueCs9bTtrLnkrPW47Yi5wb3NpdGlvbj1rO2IubmQ9Y31iLmZpbGwgaW5zdGFuY2VvZiBmYSYmKGs9Yi5maWxsLmNvcHkoKSxjPU1hdGguYXRhbigoMC41LWsuc3RhcnQueSkvKDAuNS1rLnN0YXJ0LngpKSxpc05hTihjKXx8KGMrPWgsay5zdGFydD1uZXcgSSgoMS1NYXRoLmNvcyhjKSkvMiwoMS1NYXRoLnNpbihjKSkvMiksay5lbmQ9bmV3IEkoKDErTWF0aC5jb3MoYykpLzIsKDErTWF0aC5zaW4oYykpLzIpKSxiLmZpbGw9ayk7Yi5zdHJva2UgaW5zdGFuY2VvZiBmYSYmKGs9Yi5zdHJva2UuY29weSgpLGM9TWF0aC5hdGFuKCgwLjUtay5zdGFydC55KS8oMC41LWsuc3RhcnQueCkpLGlzTmFOKGMpfHwNCihjKz1oLGsuc3RhcnQ9bmV3IEkoKDEtTWF0aC5jb3MoYykpLzIsKDEtTWF0aC5zaW4oYykpLzIpLGsuZW5kPW5ldyBJKCgxK01hdGguY29zKGMpKS8yLCgxK01hdGguc2luKGMpKS8yKSksYi5zdHJva2U9ayl9ZWxzZXtmb3IoYj1iLmVsZW1lbnRzLms7Yi5uZXh0KCk7KWg9Yi52YWx1ZS5wb3NpdGlvbi5jb3B5KCksaC54Kz1rLngsaC55Kz1rLnksYi52YWx1ZS5wb3NpdGlvbj1oO2ZvcihiLnJlc2V0KCk7Yi5uZXh0KCk7KWFyKGEsYi52YWx1ZSxjKTtmb3IoYi5yZXNldCgpO2IubmV4dCgpOyloPWIudmFsdWUucG9zaXRpb24uY29weSgpLGgueC09ay54LGgueS09ay55LGIudmFsdWUucG9zaXRpb249aH19fQ0KZnVuY3Rpb24gYnIoYSxiLGMpe3ZhciBkPXBhcnNlRmxvYXQoY1swXSk7aXNOYU4oZCkmJihkPTEpO3ZhciBmPXBhcnNlRmxvYXQoY1sxXSk7aXNOYU4oZikmJihmPWQpO2lmKDEhPT1kfHwxIT09Zil7dmFyIGc9Yi5wb3NpdGlvbi5jb3B5KCk7aXNOYU4oZy54KSYmKGcueD0wKTtpc05hTihnLnkpJiYoZy55PTApO2lmKGIgaW5zdGFuY2VvZiBXKWE9Yi5uZC5jb3B5KCksZy54Kj1kLGcueSo9ZixiLnBvc2l0aW9uPWcsYS5zY2FsZShkLGYpLGIubmQ9YTtlbHNle2ZvcihiPWIuZWxlbWVudHMuaztiLm5leHQoKTspZD1iLnZhbHVlLnBvc2l0aW9uLmNvcHkoKSxkLngrPWcueCxkLnkrPWcueSxiLnZhbHVlLnBvc2l0aW9uPWQ7Zm9yKGIucmVzZXQoKTtiLm5leHQoKTspYnIoYSxiLnZhbHVlLGMpO2ZvcihiLnJlc2V0KCk7Yi5uZXh0KCk7KWQ9Yi52YWx1ZS5wb3NpdGlvbi5jb3B5KCksZC54LT1nLngsZC55LT1nLnksYi52YWx1ZS5wb3NpdGlvbj1kfX19DQpmdW5jdGlvbiBjcihhLGIsYyl7dmFyIGQ9cGFyc2VGbG9hdChjWzBdKTtpZighaXNOYU4oZCkpe3ZhciBkPWQqTWF0aC5QSS8xODAsZj1iLnBvc2l0aW9uLmNvcHkoKTtpc05hTihmLngpJiYoZi54PTApO2lzTmFOKGYueSkmJihmLnk9MCk7aWYoYiBpbnN0YW5jZW9mIFcpe2M9Yi5uZC5jb3B5KCk7aWYoYy50eXBlPT09RWMpYz1hLkRzKGMpO2Vsc2UgaWYoYy50eXBlPT09TWMpYz1mcihjKTtlbHNlIGlmKGMudHlwZT09PURjKXtjLnR5cGU9QWM7YT1uZXcgQmMoYy5xYSxjLnJhKTt2YXIgZz1uZXcgaWQoT2MsYy5ELGMuRik7YS5GYS5hZGQoZyk7Yy5BYi5hZGQoYSl9Yy5vZmZzZXQoZi54LGYueSk7Yy50cmFuc2Zvcm0oMSwwLE1hdGgudGFuKGQpLDEsLWYueCwtZi55KTthPWMubm9ybWFsaXplKCk7Yi5uZD1jO2YueC09YS54O2YueS09YS55O2IucG9zaXRpb249Zn1lbHNle2ZvcihiPWIuZWxlbWVudHMuaztiLm5leHQoKTspZD1iLnZhbHVlLnBvc2l0aW9uLmNvcHkoKSxkLngrPWYueCwNCmQueSs9Zi55LGIudmFsdWUucG9zaXRpb249ZDtmb3IoYi5yZXNldCgpO2IubmV4dCgpOyljcihhLGIudmFsdWUsYyk7Zm9yKGIucmVzZXQoKTtiLm5leHQoKTspZD1iLnZhbHVlLnBvc2l0aW9uLmNvcHkoKSxkLngtPWYueCxkLnktPWYueSxiLnZhbHVlLnBvc2l0aW9uPWR9fX0NCmZ1bmN0aW9uIGRyKGEsYixjKXt2YXIgZD1wYXJzZUZsb2F0KGNbMF0pO2lmKCFpc05hTihkKSl7dmFyIGQ9ZCpNYXRoLlBJLzE4MCxmPWIucG9zaXRpb24uY29weSgpO2lzTmFOKGYueCkmJihmLng9MCk7aXNOYU4oZi55KSYmKGYueT0wKTtpZihiIGluc3RhbmNlb2YgVyl7Yz1iLm5kLmNvcHkoKTtpZihjLnR5cGU9PT1FYyljPWEuRHMoYyk7ZWxzZSBpZihjLnR5cGU9PT1NYyljPWZyKGMpO2Vsc2UgaWYoYy50eXBlPT09RGMpe2MudHlwZT1BYzthPW5ldyBCYyhjLnFhLGMucmEpO3ZhciBnPW5ldyBpZChPYyxjLkQsYy5GKTthLkZhLmFkZChnKTtjLkFiLmFkZChhKX1jLm9mZnNldChmLngsZi55KTtjLnRyYW5zZm9ybSgxLE1hdGgudGFuKGQpLDAsMSwtZi54LC1mLnkpO2E9Yy5ub3JtYWxpemUoKTtiLm5kPWM7Zi54LT1hLng7Zi55LT1hLnk7Yi5wb3NpdGlvbj1mfWVsc2V7Zm9yKGI9Yi5lbGVtZW50cy5rO2IubmV4dCgpOylkPWIudmFsdWUucG9zaXRpb24uY29weSgpLGQueCs9Zi54LA0KZC55Kz1mLnksYi52YWx1ZS5wb3NpdGlvbj1kO2ZvcihiLnJlc2V0KCk7Yi5uZXh0KCk7KWRyKGEsYi52YWx1ZSxjKTtmb3IoYi5yZXNldCgpO2IubmV4dCgpOylkPWIudmFsdWUucG9zaXRpb24uY29weSgpLGQueC09Zi54LGQueS09Zi55LGIudmFsdWUucG9zaXRpb249ZH19fQ0KZnVuY3Rpb24gJHEoYSl7dmFyIGI9ITE7aWYoInBvbHlnb24iPT09YS50YWdOYW1lKWI9ITA7ZWxzZSBpZigicG9seWxpbmUiIT09YS50YWdOYW1lKXJldHVybiBudWxsO3ZhciBjPW5ldyBXLGQ9YS5nZXRBdHRyaWJ1dGUoInBvaW50cyIpO2E9bmV3IHpjO3ZhciBmPW5ldyBCKEJjKSxnPWQuc3BsaXQoL1xzKltccyxdXHMqLyk7aWYoND5nLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIGgsZD1uZXcgQihpZCksayxsLG09MTttPGcubGVuZ3RoO20rPTIpe2s9ZXZhbChnW20tMV0pO2w9ZXZhbChnW21dKTtpZigibnVtYmVyIiE9PXR5cGVvZiBrfHxpc05hTihrKXx8Im51bWJlciIhPT10eXBlb2YgbHx8aXNOYU4obCkpcmV0dXJuIG51bGw7MT09PW0/aD1uZXcgQmMoayxsKTpkLmFkZChuZXcgaWQoT2MsayxsKSl9YiYmKGI9bmV3IGlkKE9jLGgucWEsaC5yYSksYi5jbG9zZSgpLGQuYWRkKGIpKTtoLkZhPWQ7Zi5hZGQoaCk7YS5BYj1mO2g9YS5ub3JtYWxpemUoKTtjLnBvc2l0aW9uPQ0KbmV3IHcoLWgueCwtaC55KTtjLm5kPWE7cmV0dXJuIGN9DQpmdW5jdGlvbiBmcihhKXt2YXIgYj1hLnFhLGM9YS5yYSxkPWEuRCxmPWEuRixnPU1hdGguYWJzKGQtYikvMixoPU1hdGguYWJzKGYtYykvMixiPU1hdGgubWluKGIsZCkrZyxjPU1hdGgubWluKGMsZikraDtuZXcgdztmPW5ldyBCYyhiLGMtaCk7ZD1uZXcgaWQoY2QpO2QuQmI9YitILnZhKmc7ZC5SYj1jLWg7ZC5yZT1iK2c7ZC5zZT1jLUgudmEqaDtkLkQ9YitnO2QuRj1jO2YuRmEuYWRkKGQpO2Q9bmV3IGlkKGNkKTtkLkJiPWIrZztkLlJiPWMrSC52YSpoO2QucmU9YitILnZhKmc7ZC5zZT1jK2g7ZC5EPWI7ZC5GPWMraDtmLkZhLmFkZChkKTtkPW5ldyBpZChjZCk7ZC5CYj1iLUgudmEqZztkLlJiPWMraDtkLnJlPWItZztkLnNlPWMrSC52YSpoO2QuRD1iLWc7ZC5GPWM7Zi5GYS5hZGQoZCk7ZD1uZXcgaWQoY2QpO2QuQmI9Yi1nO2QuUmI9Yy1ILnZhKmg7ZC5yZT1iLUgudmEqZztkLnNlPWMtaDtkLkQ9YjtkLkY9Yy1oO2YuRmEuYWRkKGQpO2EudHlwZT1BYzthLkFiLmFkZChmKTsNCnJldHVybiBhfVdxLnByb3RvdHlwZS5Ecz1mdW5jdGlvbihhKXt2YXIgYj1hLnFhLGM9YS5yYSxkPWEuRCxmPWEuRixnPU1hdGgubWluKGIsZCksaD1NYXRoLm1pbihjLGYpLGI9TWF0aC5hYnMoZC1iKSxjPU1hdGguYWJzKGYtYyksZj1uZXcgQmMoZyxoKTtmLkZhLmFkZChuZXcgaWQoT2MsZytiLGgpKTtmLkZhLmFkZChuZXcgaWQoT2MsZytiLGgrYykpO2YuRmEuYWRkKChuZXcgaWQoT2MsZyxoK2MpKS5jbG9zZSgpKTthLnR5cGU9QWM7YS5BYi5hZGQoZik7cmV0dXJuIGF9O2NhLnZlcnNpb249IjEuNC4yMCI7DQp3aW5kb3cmJih3aW5kb3cubW9kdWxlJiYib2JqZWN0Ij09PXR5cGVvZiB3aW5kb3cubW9kdWxlJiYib2JqZWN0Ij09PXR5cGVvZiB3aW5kb3cubW9kdWxlLmV4cG9ydHM/d2luZG93Lm1vZHVsZS5leHBvcnRzPWNhOndpbmRvdy5kZWZpbmUmJiJmdW5jdGlvbiI9PT10eXBlb2Ygd2luZG93LmRlZmluZSYmd2luZG93LmRlZmluZS5hbWQ/KHdpbmRvdy5nbz1jYSx3aW5kb3cuZGVmaW5lKGNhKSk6d2luZG93LmdvPWNhKTsgfSkod2luZG93KTsNCg=="></script>


	


<!-- <link href="../assets/css/goSamples.css" rel="stylesheet" type="text/css" /> -->
<!-- you don't need to use this -->
<!-- this is only for the GoJS Samples framework -->
<script src="goSamples.js"></script>
<!-- we also link to a file that contains some data on the iris flower -->
<script src="dataVisualization.js"></script>
<script id="code">
  var myDiagram;
  var myLocation = {  // this controls the data properties used by data binding conversions
    x: "sepalLength",
    y: "sepalWidth"
  }
  var lastStroked = null;  // this remembers the last highlit Shape

  function init() {
    if (window.goSamples) goSamples();  // init for these samples -- you don't need to call this
    var $ = go.GraphObject.make;  // for conciseness in defining templates

    myDiagram =
      $(go.Diagram, "myDiagram",  // create a Diagram for the DIV HTML element
        {
          "animationManager.isEnabled": false,
          contentAlignment: go.Spot.Center,  // content is always centered in the viewport
          autoScale: go.Diagram.Uniform,  // scale always has all content fitting in the viewport
          isReadOnly: true,
          mouseOver: doMouseOver  // this event handler is defined below
        });

    // define a simple Node template
    myDiagram.nodeTemplate =
      $(go.Node, "Auto",
        {
          selectable: false,
          mouseOver: highlightNode  // this event handler is defined below
        },
        new go.Binding("location", "", function(nothing, elt) {
            return new go.Point(elt.data[myLocation.x]*200,
                                elt.data[myLocation.y]*200)
          }),

        $(go.Shape, "Hexagon",
          {
            name: "SHAPE",
            width: 20, height: 20,
            strokeWidth: 4, stroke: null
          },
          new go.Binding("fill", "species", function(name) {
              switch (name) {
                case "Iris-setosa":     return "rgba(240, 120,  50, .6)";
                case "Iris-versicolor": return "rgba(240, 230, 120, .6)";
                case "Iris-virginica":  return "rgba(125, 200, 120, .6)";
              }
              return "black";
            }))
      );

    // http://en.wikipedia.org/wiki/Iris_flower_data_set
    // data is defined in dataVisualization.js
    var array = [];
    for (var i = 0; i < irisData.length; i++) {
      var line = irisData[i];
      var data = {
        sepalLength: line[0],
        sepalWidth:  line[1],
        petalLength: line[2],
        petalWidth:  line[3],
        species:     line[4]
      };
      array.push(data);
    }

    myDiagram.model = new go.Model(array);

    function doMouseOver(e) {
      if (e === undefined) e = myDiagram.lastInput;
      var doc = e.documentPoint;
      // find all Nodes that are within 100 units
      var list = myDiagram.findObjectsNear(doc, 100, null, function(x) { return x instanceof go.Node; });
      // now find the one that is closest to e.documentPoint
      var closest = null;
      var closestDist = 999999999;
      list.each(function(node) {
        var dist = doc.distanceSquaredPoint(node.getDocumentPoint(go.Spot.Center));
        if (dist < closestDist) {
          closestDist = dist;
          closest = node;
        }
      });
      highlightNode(e, closest);
    }

    // Called with a Node (or null) that the mouse is over or near
    function highlightNode(e, node) {
      if (node !== null) {
        var shape = node.findObject("SHAPE");
        shape.stroke = "white";
        if (lastStroked !== null && lastStroked !== shape) lastStroked.stroke = null;
        lastStroked = shape;
        updateInfoBox(e.viewPoint, node.data);
      } else {
        if (lastStroked !== null) lastStroked.stroke = null;
        lastStroked = null;
        document.getElementById("infoBoxHolder").innerHTML = "";
      }
    }

    // Make sure the infoBox is momentarily hidden if the user tries to mouse over it
    var infoBoxH = document.getElementById("infoBoxHolder");
    infoBoxH.addEventListener("mousemove", function() {
      var box = document.getElementById("infoBoxHolder");
      box.style.left = parseInt(box.style.left) + "px";
      box.style.top = parseInt(box.style.top)+30 + "px";
    }, false);

    var diagramDiv = document.getElementById("myDiagram");
    // Make sure the infoBox is hidden when the mouse is not over the Diagram
    diagramDiv.addEventListener("mouseout", function(e) {
      if (lastStroked !== null) lastStroked.stroke = null;
      lastStroked = null;

      var infoBox = document.getElementById("infoBox");
      var elem = document.elementFromPoint(e.clientX, e.clientY);
      if (elem === infoBox || elem.parentNode === infoBox) {
        var box = document.getElementById("infoBoxHolder");
        box.style.left = parseInt(box.style.left) + "px";
        box.style.top = parseInt(box.style.top)+30 + "px";
      } else {
        var box = document.getElementById("infoBoxHolder");
        box.innerHTML = "";
      }
    }, false);

  } // end init

  // This function is called to update the tooltip information
  // depending on the bound data of the Node that is closest to the pointer.
  function updateInfoBox(mousePt, data) {
    var x =
    "<div id='infoBox'>" +
    "<div>" + data.species + "</div>" +
    "<div class='infoTitle'>Sepal Length</div>" +
    "<div class='infoValues'>" + data.sepalLength + "</div>" +
    "<div class='infoTitle'>Sepal Width</div>" +
    "<div class='infoValues'>" + data.sepalWidth + "</div>" +
    "<div class='infoTitle'>Petal Length</div>" +
    "<div class='infoValues'>" + data.petalLength + "</div>" +
    "<div class='infoTitle'>Petal Width</div>" +
    "<div class='infoValues'>" + data.petalWidth + "</div></div>"

    var box = document.getElementById("infoBoxHolder");
    box.innerHTML = x;
    box.style.left = mousePt.x+120 + "px";
    box.style.top = mousePt.y+20 + "px";
  }

  // This function is called which a radio button is pressed.
  // It changes the value of a variable that the node template's location conversion function uses.
  // It then updates all target bindings, causing all node locations to change.
  function changeAxes(e) {
    var value = e.value;
    if (e.name === "X") {
      myLocation.x = value;
    } else {
		myLocation.y = value;
			}
		myDiagram.startTransaction("updateBindings");
		myDiagram.updateAllTargetBindings();
		myDiagram.commitTransaction("updateBindings");
			}
		</script>

	<script id="script_dataview_data" >
// used in dataVisualization.html demo

		function dataview_data() {
var irisdata = [
[ 5.1, 3.5, 1.4, 0.2, "Iris-setosa" ],
[ 4.9, 3.0, 1.4, 0.2, "Iris-setosa" ],
[ 4.7, 3.2, 1.3, 0.2, "Iris-setosa" ],
[ 4.6, 3.1, 1.5, 0.2, "Iris-setosa" ],
[ 5.0, 3.6, 1.4, 0.2, "Iris-setosa" ],
[ 5.4, 3.9, 1.7, 0.4, "Iris-setosa" ],
[ 4.6, 3.4, 1.4, 0.3, "Iris-setosa" ],
[ 5.0, 3.4, 1.5, 0.2, "Iris-setosa" ],
[ 4.4, 2.9, 1.4, 0.2, "Iris-setosa" ],
[ 4.9, 3.1, 1.5, 0.1, "Iris-setosa" ],
[ 5.4, 3.7, 1.5, 0.2, "Iris-setosa" ],
[ 4.8, 3.4, 1.6, 0.2, "Iris-setosa" ],
[ 4.8, 3.0, 1.4, 0.1, "Iris-setosa" ],
[ 4.3, 3.0, 1.1, 0.1, "Iris-setosa" ],
[ 5.8, 4.0, 1.2, 0.2, "Iris-setosa" ],
[ 5.7, 4.4, 1.5, 0.4, "Iris-setosa" ],
[ 5.4, 3.9, 1.3, 0.4, "Iris-setosa" ],
[ 5.1, 3.5, 1.4, 0.3, "Iris-setosa" ],
[ 5.7, 3.8, 1.7, 0.3, "Iris-setosa" ],
[ 5.1, 3.8, 1.5, 0.3, "Iris-setosa" ],
[ 5.4, 3.4, 1.7, 0.2, "Iris-setosa" ],
[ 5.1, 3.7, 1.5, 0.4, "Iris-setosa" ],
[ 4.6, 3.6, 1.0, 0.2, "Iris-setosa" ],
[ 5.1, 3.3, 1.7, 0.5, "Iris-setosa" ],
[ 4.8, 3.4, 1.9, 0.2, "Iris-setosa" ],
[ 5.0, 3.0, 1.6, 0.2, "Iris-setosa" ],
[ 5.0, 3.4, 1.6, 0.4, "Iris-setosa" ],
[ 5.2, 3.5, 1.5, 0.2, "Iris-setosa" ],
[ 5.2, 3.4, 1.4, 0.2, "Iris-setosa" ],
[ 4.7, 3.2, 1.6, 0.2, "Iris-setosa" ],
[ 4.8, 3.1, 1.6, 0.2, "Iris-setosa" ],
[ 5.4, 3.4, 1.5, 0.4, "Iris-setosa" ],
[ 5.2, 4.1, 1.5, 0.1, "Iris-setosa" ],
[ 5.5, 4.2, 1.4, 0.2, "Iris-setosa" ],
[ 4.9, 3.1, 1.5, 0.2, "Iris-setosa" ],
[ 5.0, 3.2, 1.2, 0.2, "Iris-setosa" ],
[ 5.5, 3.5, 1.3, 0.2, "Iris-setosa" ],
[ 4.9, 3.6, 1.4, 0.1, "Iris-setosa" ],
[ 4.4, 3.0, 1.3, 0.2, "Iris-setosa" ],
[ 5.1, 3.4, 1.5, 0.2, "Iris-setosa" ],
[ 5.0, 3.5, 1.3, 0.3, "Iris-setosa" ],
[ 4.5, 2.3, 1.3, 0.3, "Iris-setosa" ],
[ 4.4, 3.2, 1.3, 0.2, "Iris-setosa" ],
[ 5.0, 3.5, 1.6, 0.6, "Iris-setosa" ],
[ 5.1, 3.8, 1.9, 0.4, "Iris-setosa" ],
[ 4.8, 3.0, 1.4, 0.3, "Iris-setosa" ],
[ 5.1, 3.8, 1.6, 0.2, "Iris-setosa" ],
[ 4.6, 3.2, 1.4, 0.2, "Iris-setosa" ],
[ 5.3, 3.7, 1.5, 0.2, "Iris-setosa" ],
[ 5.0, 3.3, 1.4, 0.2, "Iris-setosa" ],
[ 7.0, 3.2, 4.7, 1.4, "Iris-versicolor" ],
[ 6.4, 3.2, 4.5, 1.5, "Iris-versicolor" ],
[ 6.9, 3.1, 4.9, 1.5, "Iris-versicolor" ],
[ 5.5, 2.3, 4.0, 1.3, "Iris-versicolor" ],
[ 6.5, 2.8, 4.6, 1.5, "Iris-versicolor" ],
[ 5.7, 2.8, 4.5, 1.3, "Iris-versicolor" ],
[ 6.3, 3.3, 4.7, 1.6, "Iris-versicolor" ],
[ 4.9, 2.4, 3.3, 1.0, "Iris-versicolor" ],
[ 6.6, 2.9, 4.6, 1.3, "Iris-versicolor" ],
[ 5.2, 2.7, 3.9, 1.4, "Iris-versicolor" ],
[ 5.0, 2.0, 3.5, 1.0, "Iris-versicolor" ],
[ 5.9, 3.0, 4.2, 1.5, "Iris-versicolor" ],
[ 6.0, 2.2, 4.0, 1.0, "Iris-versicolor" ],
[ 6.1, 2.9, 4.7, 1.4, "Iris-versicolor" ],
[ 5.6, 2.9, 3.6, 1.3, "Iris-versicolor" ],
[ 6.7, 3.1, 4.4, 1.4, "Iris-versicolor" ],
[ 5.6, 3.0, 4.5, 1.5, "Iris-versicolor" ],
[ 5.8, 2.7, 4.1, 1.0, "Iris-versicolor" ],
[ 6.2, 2.2, 4.5, 1.5, "Iris-versicolor" ],
[ 5.6, 2.5, 3.9, 1.1, "Iris-versicolor" ],
[ 5.9, 3.2, 4.8, 1.8, "Iris-versicolor" ],
[ 6.1, 2.8, 4.0, 1.3, "Iris-versicolor" ],
[ 6.3, 2.5, 4.9, 1.5, "Iris-versicolor" ],
[ 6.1, 2.8, 4.7, 1.2, "Iris-versicolor" ],
[ 6.4, 2.9, 4.3, 1.3, "Iris-versicolor" ],
[ 6.6, 3.0, 4.4, 1.4, "Iris-versicolor" ],
[ 6.8, 2.8, 4.8, 1.4, "Iris-versicolor" ],
[ 6.7, 3.0, 5.0, 1.7, "Iris-versicolor" ],
[ 6.0, 2.9, 4.5, 1.5, "Iris-versicolor" ],
[ 5.7, 2.6, 3.5, 1.0, "Iris-versicolor" ],
[ 5.5, 2.4, 3.8, 1.1, "Iris-versicolor" ],
[ 5.5, 2.4, 3.7, 1.0, "Iris-versicolor" ],
[ 5.8, 2.7, 3.9, 1.2, "Iris-versicolor" ],
[ 6.0, 2.7, 5.1, 1.6, "Iris-versicolor" ],
[ 5.4, 3.0, 4.5, 1.5, "Iris-versicolor" ],
[ 6.0, 3.4, 4.5, 1.6, "Iris-versicolor" ],
[ 6.7, 3.1, 4.7, 1.5, "Iris-versicolor" ],
[ 6.3, 2.3, 4.4, 1.3, "Iris-versicolor" ],
[ 5.6, 3.0, 4.1, 1.3, "Iris-versicolor" ],
[ 5.5, 2.5, 4.0, 1.3, "Iris-versicolor" ],
[ 5.5, 2.6, 4.4, 1.2, "Iris-versicolor" ],
[ 6.1, 3.0, 4.6, 1.4, "Iris-versicolor" ],
[ 5.8, 2.6, 4.0, 1.2, "Iris-versicolor" ],
[ 5.0, 2.3, 3.3, 1.0, "Iris-versicolor" ],
[ 5.6, 2.7, 4.2, 1.3, "Iris-versicolor" ],
[ 5.7, 3.0, 4.2, 1.2, "Iris-versicolor" ],
[ 5.7, 2.9, 4.2, 1.3, "Iris-versicolor" ],
[ 6.2, 2.9, 4.3, 1.3, "Iris-versicolor" ],
[ 5.1, 2.5, 3.0, 1.1, "Iris-versicolor" ],
[ 5.7, 2.8, 4.1, 1.3, "Iris-versicolor" ],
[ 6.3, 3.3, 6.0, 2.5, "Iris-virginica" ],
[ 5.8, 2.7, 5.1, 1.9, "Iris-virginica" ],
[ 7.1, 3.0, 5.9, 2.1, "Iris-virginica" ],
[ 6.3, 2.9, 5.6, 1.8, "Iris-virginica" ],
[ 6.5, 3.0, 5.8, 2.2, "Iris-virginica" ],
[ 7.6, 3.0, 6.6, 2.1, "Iris-virginica" ],
[ 4.9, 2.5, 4.5, 1.7, "Iris-virginica" ],
[ 7.3, 2.9, 6.3, 1.8, "Iris-virginica" ],
[ 6.7, 2.5, 5.8, 1.8, "Iris-virginica" ],
[ 7.2, 3.6, 6.1, 2.5, "Iris-virginica" ],
[ 6.5, 3.2, 5.1, 2.0, "Iris-virginica" ],
[ 6.4, 2.7, 5.3, 1.9, "Iris-virginica" ],
[ 6.8, 3.0, 5.5, 2.1, "Iris-virginica" ],
[ 5.7, 2.5, 5.0, 2.0, "Iris-virginica" ],
[ 5.8, 2.8, 5.1, 2.4, "Iris-virginica" ],
[ 6.4, 3.2, 5.3, 2.3, "Iris-virginica" ],
[ 6.5, 3.0, 5.5, 1.8, "Iris-virginica" ],
[ 7.7, 3.8, 6.7, 2.2, "Iris-virginica" ],
[ 7.7, 2.6, 6.9, 2.3, "Iris-virginica" ],
[ 6.0, 2.2, 5.0, 1.5, "Iris-virginica" ],
[ 6.9, 3.2, 5.7, 2.3, "Iris-virginica" ],
[ 5.6, 2.8, 4.9, 2.0, "Iris-virginica" ],
[ 7.7, 2.8, 6.7, 2.0, "Iris-virginica" ],
[ 6.3, 2.7, 4.9, 1.8, "Iris-virginica" ],
[ 6.7, 3.3, 5.7, 2.1, "Iris-virginica" ],
[ 7.2, 3.2, 6.0, 1.8, "Iris-virginica" ],
[ 6.2, 2.8, 4.8, 1.8, "Iris-virginica" ],
[ 6.1, 3.0, 4.9, 1.8, "Iris-virginica" ],
[ 6.4, 2.8, 5.6, 2.1, "Iris-virginica" ],
[ 7.2, 3.0, 5.8, 1.6, "Iris-virginica" ],
[ 7.4, 2.8, 6.1, 1.9, "Iris-virginica" ],
[ 7.9, 3.8, 6.4, 2.0, "Iris-virginica" ],
[ 6.4, 2.8, 5.6, 2.2, "Iris-virginica" ],
[ 6.3, 2.8, 5.1, 1.5, "Iris-virginica" ],
[ 6.1, 2.6, 5.6, 1.4, "Iris-virginica" ],
[ 7.7, 3.0, 6.1, 2.3, "Iris-virginica" ],
[ 6.3, 3.4, 5.6, 2.4, "Iris-virginica" ],
[ 6.4, 3.1, 5.5, 1.8, "Iris-virginica" ],
[ 6.0, 3.0, 4.8, 1.8, "Iris-virginica" ],
[ 6.9, 3.1, 5.4, 2.1, "Iris-virginica" ],
[ 6.7, 3.1, 5.6, 2.4, "Iris-virginica" ],
[ 6.9, 3.1, 5.1, 2.3, "Iris-virginica" ],
[ 5.8, 2.7, 5.1, 1.9, "Iris-virginica" ],
[ 6.8, 3.2, 5.9, 2.3, "Iris-virginica" ],
[ 6.7, 3.3, 5.7, 2.5, "Iris-virginica" ],
[ 6.7, 3.0, 5.2, 2.3, "Iris-virginica" ],
[ 6.3, 2.5, 5.0, 1.9, "Iris-virginica" ],
[ 6.5, 3.0, 5.2, 2.0, "Iris-virginica" ],
[ 6.2, 3.4, 5.4, 2.3, "Iris-virginica" ],
[ 5.9, 3.0, 5.1, 1.8, "Iris-virginica" ]];
		return(irisdata);
		}
		</script>



<!--	<style id="style_main">body{background: darkslategrey; font-color:linen; }</style> -->
	<style id="style_main">body{background: ivory; font-color:darkslategrey; }</style>
	</head>


<body onload="init()">
	<div id="div_font_color" font-color=ivory>
	<div id="sample">
		<div style="display: inline-block">

<!--The DIV for the Diagram needs an explicit size or else we won't see anything.
         Also add a border to help see the edges. -->

<!-- This sibling of the Diagram provides information when the mouse is near a Diagram Node -->
	<div id="myDiagram" style="background-color: #3D3D3D; border: solid 1px black; width:500px; height:500px"></div>
	<div id="infoBoxHolder">
<!-- Initially Empty, it is populated when updateInfoBox is called -->
		</div>


  <div id="controls">
    <div style="border: solid 1px gray; float: left;  padding: 2px;">
      <p style="text-align: center;">X-axis</p>
      <hr/>
      <input type="radio" name="X" onclick="changeAxes(this)" value="sepalLength" id="SLx" checked/>
      <label for="SLx">Sepal Length</label><br/>
      <input type="radio" name="X" onclick="changeAxes(this)" value="sepalWidth" id="SWx" />
      <label for="SWx">Sepal Width</label><br/>
      <input type="radio" name="X" onclick="changeAxes(this)" value="petalLength" id="PLx"/>
      <label for="PLx">Petal Length</label><br/>
      <input type="radio" name="X" onclick="changeAxes(this)" value="petalWidth" id="PWx"/>
      <label for="PWx">Petal Width</label><br/>
    </div>
    <div style="border: solid 1px gray; float: left; margin-left: 10px; padding: 2px;">
      <p style="text-align: center;">Y-axis</p>
      <hr/>
      <input type="radio" name="Y" onclick="changeAxes(this)" value="sepalLength" id="SLy"/>
      <label for="SLy">Sepal Length</label><br/>
      <input type="radio" name="Y" onclick="changeAxes(this)" value="sepalWidth" id="SWy" checked/>
      <label for="SWy">Sepal Width</label><br/>
      <input type="radio" name="Y" onclick="changeAxes(this)" value="petalLength" id="PLy"/>
      <label for="PLy">Petal Length</label><br/>
      <input type="radio" name="Y" onclick="changeAxes(this)" value="petalWidth" id="PWy"/>
      <label for="PWy">Petal Width</label><br/>
    </div>

    <div id="description" style="float: left;">
      <p>This sample gives an example of a Diagram interacting with other HTML elements on the page.</p>
      <p>As the mouse moves over the diagram, a formatted div displays information about the nearest Node.</p>
      <p>The data displayed is from the <a href="http://en.wikipedia.org/wiki/Iris_flower_data_set">Iris flower data set</a>,
      describing the variations in dimensions of three related flower species.</p>
					</div>
				</div>
			</div>
		</div>
	</div>
</body>
</html>
//


koh5_pano



Your browser does not support the HTML5 canvas element.


Drag mouse to navigate.

Navigation





17.Aug.2010, Martin Wengenmayer