managehosting14ba02c2-aruba.zukunst.at Open in urlscan Pro
172.171.241.51  Malicious Activity! Public Scan

Submitted URL: http://login-147b02bc-konsoleh-com.ordinationfestenburg.at/indexx.php
Effective URL: https://managehosting14ba02c2-aruba.zukunst.at/login.php?NfHD1msTPByTJJNpvTMSBOw1Smw0hBMNVq1v8SWuJkyAx4VCnpOejpaQYQ5HkmhVraeDjHBXYAFbaDEM62l643...
Submission: On September 15 via api from JP — Scanned from AT

Form analysis 1 forms found in the DOM

Name: aspnetFormPOST ./report/index.php

<form method="post" action="./report/index.php" name="aspnetForm" id="aspnetForm">
  <input type="hidden" name="what" value="LOGIN">
  <div class="aspNetHidden">
  </div>
  <script class="sf-hidden">
    //<![CDATA[
    var theForm = document.forms['aspnetForm'];
    if (!theForm) {
      theForm = document.aspnetForm;
    }

    function __doPostBack(eventTarget, eventArgument) {
      if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
      }
    }
    //]]>
  </script>
  <script class="sf-hidden"
    src="data:application/x-javascript;base64,ZnVuY3Rpb24gV2ViRm9ybV9Qb3N0QmFja09wdGlvbnMoZXZlbnRUYXJnZXQsIGV2ZW50QXJndW1lbnQsIHZhbGlkYXRpb24sIHZhbGlkYXRpb25Hcm91cCwgYWN0aW9uVXJsLCB0cmFja0ZvY3VzLCBjbGllbnRTdWJtaXQpIHsNCiAgICB0aGlzLmV2ZW50VGFyZ2V0ID0gZXZlbnRUYXJnZXQ7DQogICAgdGhpcy5ldmVudEFyZ3VtZW50ID0gZXZlbnRBcmd1bWVudDsNCiAgICB0aGlzLnZhbGlkYXRpb24gPSB2YWxpZGF0aW9uOw0KICAgIHRoaXMudmFsaWRhdGlvbkdyb3VwID0gdmFsaWRhdGlvbkdyb3VwOw0KICAgIHRoaXMuYWN0aW9uVXJsID0gYWN0aW9uVXJsOw0KICAgIHRoaXMudHJhY2tGb2N1cyA9IHRyYWNrRm9jdXM7DQogICAgdGhpcy5jbGllbnRTdWJtaXQgPSBjbGllbnRTdWJtaXQ7DQp9DQpmdW5jdGlvbiBXZWJGb3JtX0RvUG9zdEJhY2tXaXRoT3B0aW9ucyhvcHRpb25zKSB7DQogICAgdmFyIHZhbGlkYXRpb25SZXN1bHQgPSB0cnVlOw0KICAgIGlmIChvcHRpb25zLnZhbGlkYXRpb24pIHsNCiAgICAgICAgaWYgKHR5cGVvZihQYWdlX0NsaWVudFZhbGlkYXRlKSA9PSAnZnVuY3Rpb24nKSB7DQogICAgICAgICAgICB2YWxpZGF0aW9uUmVzdWx0ID0gUGFnZV9DbGllbnRWYWxpZGF0ZShvcHRpb25zLnZhbGlkYXRpb25Hcm91cCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKHZhbGlkYXRpb25SZXN1bHQpIHsNCiAgICAgICAgaWYgKCh0eXBlb2Yob3B0aW9ucy5hY3Rpb25VcmwpICE9ICJ1bmRlZmluZWQiKSAmJiAob3B0aW9ucy5hY3Rpb25VcmwgIT0gbnVsbCkgJiYgKG9wdGlvbnMuYWN0aW9uVXJsLmxlbmd0aCA+IDApKSB7DQogICAgICAgICAgICB0aGVGb3JtLmFjdGlvbiA9IG9wdGlvbnMuYWN0aW9uVXJsOw0KICAgICAgICB9DQogICAgICAgIGlmIChvcHRpb25zLnRyYWNrRm9jdXMpIHsNCiAgICAgICAgICAgIHZhciBsYXN0Rm9jdXMgPSB0aGVGb3JtLmVsZW1lbnRzWyJfX0xBU1RGT0NVUyJdOw0KICAgICAgICAgICAgaWYgKCh0eXBlb2YobGFzdEZvY3VzKSAhPSAidW5kZWZpbmVkIikgJiYgKGxhc3RGb2N1cyAhPSBudWxsKSkgew0KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgPT0gInVuZGVmaW5lZCIpIHsNCiAgICAgICAgICAgICAgICAgICAgbGFzdEZvY3VzLnZhbHVlID0gb3B0aW9ucy5ldmVudFRhcmdldDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBhY3RpdmUgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50Ow0KICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZihhY3RpdmUpICE9ICJ1bmRlZmluZWQiKSAmJiAoYWN0aXZlICE9IG51bGwpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZihhY3RpdmUuaWQpICE9ICJ1bmRlZmluZWQiKSAmJiAoYWN0aXZlLmlkICE9IG51bGwpICYmIChhY3RpdmUuaWQubGVuZ3RoID4gMCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Rm9jdXMudmFsdWUgPSBhY3RpdmUuaWQ7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YoYWN0aXZlLm5hbWUpICE9ICJ1bmRlZmluZWQiKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEZvY3VzLnZhbHVlID0gYWN0aXZlLm5hbWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKG9wdGlvbnMuY2xpZW50U3VibWl0KSB7DQogICAgICAgIF9fZG9Qb3N0QmFjayhvcHRpb25zLmV2ZW50VGFyZ2V0LCBvcHRpb25zLmV2ZW50QXJndW1lbnQpOw0KICAgIH0NCn0NCnZhciBfX3BlbmRpbmdDYWxsYmFja3MgPSBuZXcgQXJyYXkoKTsNCnZhciBfX3N5bmNocm9ub3VzQ2FsbEJhY2tJbmRleCA9IC0xOw0KZnVuY3Rpb24gV2ViRm9ybV9Eb0NhbGxiYWNrKGV2ZW50VGFyZ2V0LCBldmVudEFyZ3VtZW50LCBldmVudENhbGxiYWNrLCBjb250ZXh0LCBlcnJvckNhbGxiYWNrLCB1c2VBc3luYykgew0KICAgIHZhciBwb3N0RGF0YSA9IF9fdGhlRm9ybVBvc3REYXRhICsNCiAgICAgICAgICAgICAgICAiX19DQUxMQkFDS0lEPSIgKyBXZWJGb3JtX0VuY29kZUNhbGxiYWNrKGV2ZW50VGFyZ2V0KSArDQogICAgICAgICAgICAgICAgIiZfX0NBTExCQUNLUEFSQU09IiArIFdlYkZvcm1fRW5jb2RlQ2FsbGJhY2soZXZlbnRBcmd1bWVudCk7DQogICAgaWYgKHRoZUZvcm1bIl9fRVZFTlRWQUxJREFUSU9OIl0pIHsNCiAgICAgICAgcG9zdERhdGEgKz0gIiZfX0VWRU5UVkFMSURBVElPTj0iICsgV2ViRm9ybV9FbmNvZGVDYWxsYmFjayh0aGVGb3JtWyJfX0VWRU5UVkFMSURBVElPTiJdLnZhbHVlKTsNCiAgICB9DQogICAgdmFyIHhtbFJlcXVlc3QsZTsNCiAgICB0cnkgew0KICAgICAgICB4bWxSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7DQogICAgfQ0KICAgIGNhdGNoKGUpIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIHhtbFJlcXVlc3QgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsNCiAgICAgICAgfQ0KICAgICAgICBjYXRjaChlKSB7DQogICAgICAgIH0NCiAgICB9DQogICAgdmFyIHNldFJlcXVlc3RIZWFkZXJNZXRob2RFeGlzdHMgPSB0cnVlOw0KICAgIHRyeSB7DQogICAgICAgIHNldFJlcXVlc3RIZWFkZXJNZXRob2RFeGlzdHMgPSAoeG1sUmVxdWVzdCAmJiB4bWxSZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIpOw0KICAgIH0NCiAgICBjYXRjaChlKSB7fQ0KICAgIHZhciBjYWxsYmFjayA9IG5ldyBPYmplY3QoKTsNCiAgICBjYWxsYmFjay5ldmVudENhbGxiYWNrID0gZXZlbnRDYWxsYmFjazsNCiAgICBjYWxsYmFjay5jb250ZXh0ID0gY29udGV4dDsNCiAgICBjYWxsYmFjay5lcnJvckNhbGxiYWNrID0gZXJyb3JDYWxsYmFjazsNCiAgICBjYWxsYmFjay5hc3luYyA9IHVzZUFzeW5jOw0KICAgIHZhciBjYWxsYmFja0luZGV4ID0gV2ViRm9ybV9GaWxsRmlyc3RBdmFpbGFibGVTbG90KF9fcGVuZGluZ0NhbGxiYWNrcywgY2FsbGJhY2spOw0KICAgIGlmICghdXNlQXN5bmMpIHsNCiAgICAgICAgaWYgKF9fc3luY2hyb25vdXNDYWxsQmFja0luZGV4ICE9IC0xKSB7DQogICAgICAgICAgICBfX3BlbmRpbmdDYWxsYmFja3NbX19zeW5jaHJvbm91c0NhbGxCYWNrSW5kZXhdID0gbnVsbDsNCiAgICAgICAgfQ0KICAgICAgICBfX3N5bmNocm9ub3VzQ2FsbEJhY2tJbmRleCA9IGNhbGxiYWNrSW5kZXg7DQogICAgfQ0KICAgIGlmIChzZXRSZXF1ZXN0SGVhZGVyTWV0aG9kRXhpc3RzKSB7DQogICAgICAgIHhtbFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gV2ViRm9ybV9DYWxsYmFja0NvbXBsZXRlOw0KICAgICAgICBjYWxsYmFjay54bWxSZXF1ZXN0ID0geG1sUmVxdWVzdDsNCiAgICAgICAgLy8gZS5nLiBodHRwOg0KICAgICAgICB2YXIgYWN0aW9uID0gdGhlRm9ybS5hY3Rpb24gfHwgZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWUsIGZyYWdtZW50SW5kZXggPSBhY3Rpb24uaW5kZXhPZignIycpOw0KICAgICAgICBpZiAoZnJhZ21lbnRJbmRleCAhPT0gLTEpIHsNCiAgICAgICAgICAgIGFjdGlvbiA9IGFjdGlvbi5zdWJzdHIoMCwgZnJhZ21lbnRJbmRleCk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCFfX25vbk1TRE9NQnJvd3Nlcikgew0KICAgICAgICAgICAgdmFyIGRvbWFpbiA9ICIiOw0KICAgICAgICAgICAgdmFyIHBhdGggPSBhY3Rpb247DQogICAgICAgICAgICB2YXIgcXVlcnkgPSAiIjsNCiAgICAgICAgICAgIHZhciBxdWVyeUluZGV4ID0gYWN0aW9uLmluZGV4T2YoJz8nKTsNCiAgICAgICAgICAgIGlmIChxdWVyeUluZGV4ICE9PSAtMSkgew0KICAgICAgICAgICAgICAgIHF1ZXJ5ID0gYWN0aW9uLnN1YnN0cihxdWVyeUluZGV4KTsNCiAgICAgICAgICAgICAgICBwYXRoID0gYWN0aW9uLnN1YnN0cigwLCBxdWVyeUluZGV4KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChwYXRoLmluZGV4T2YoIiUiKSA9PT0gLTEpIHsNCiAgICAgICAgICAgICAgICAvLyBkb21haW4gbWF5IG9yIG1heSBub3QgYmUgcHJlc2VudCAoZS5nLiBhY3Rpb24gb2YgImZvby5hc3B4IiB2cyAiaHR0cDoNCiAgICAgICAgICAgICAgICBpZiAoL15odHRwcz9cOlwvXC8uKiQvZ2kudGVzdChwYXRoKSkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgZG9tYWluUGFydEluZGV4ID0gcGF0aC5pbmRleE9mKCJcL1wvIikgKyAyOw0KICAgICAgICAgICAgICAgICAgICB2YXIgc2xhc2hBZnRlckRvbWFpbiA9IHBhdGguaW5kZXhPZigiLyIsIGRvbWFpblBhcnRJbmRleCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChzbGFzaEFmdGVyRG9tYWluID09PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW50aXJlIHVybCBpcyB0aGUgZG9tYWluIChlLmcuICJodHRwOg0KICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluID0gcGF0aDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSAiIjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiA9IHBhdGguc3Vic3RyKDAsIHNsYXNoQWZ0ZXJEb21haW4pOw0KICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKHNsYXNoQWZ0ZXJEb21haW4pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGFjdGlvbiA9IGRvbWFpbiArIGVuY29kZVVSSShwYXRoKSArIHF1ZXJ5Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHhtbFJlcXVlc3Qub3BlbigiUE9TVCIsIGFjdGlvbiwgdHJ1ZSk7DQogICAgICAgIHhtbFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD11dGYtOCIpOw0KICAgICAgICB4bWxSZXF1ZXN0LnNlbmQocG9zdERhdGEpOw0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIGNhbGxiYWNrLnhtbFJlcXVlc3QgPSBuZXcgT2JqZWN0KCk7DQogICAgdmFyIGNhbGxiYWNrRnJhbWVJRCA9ICJfX0NBTExCQUNLRlJBTUUiICsgY2FsbGJhY2tJbmRleDsNCiAgICB2YXIgeG1sUmVxdWVzdEZyYW1lID0gZG9jdW1lbnQuZnJhbWVzW2NhbGxiYWNrRnJhbWVJRF07DQogICAgaWYgKCF4bWxSZXF1ZXN0RnJhbWUpIHsNCiAgICAgICAgeG1sUmVxdWVzdEZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSUZSQU1FIik7DQogICAgICAgIHhtbFJlcXVlc3RGcmFtZS53aWR0aCA9ICIxIjsNCiAgICAgICAgeG1sUmVxdWVzdEZyYW1lLmhlaWdodCA9ICIxIjsNCiAgICAgICAgeG1sUmVxdWVzdEZyYW1lLmZyYW1lQm9yZGVyID0gIjAiOw0KICAgICAgICB4bWxSZXF1ZXN0RnJhbWUuaWQgPSBjYWxsYmFja0ZyYW1lSUQ7DQogICAgICAgIHhtbFJlcXVlc3RGcmFtZS5uYW1lID0gY2FsbGJhY2tGcmFtZUlEOw0KICAgICAgICB4bWxSZXF1ZXN0RnJhbWUuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOw0KICAgICAgICB4bWxSZXF1ZXN0RnJhbWUuc3R5bGUudG9wID0gIi0xMDBweCINCiAgICAgICAgeG1sUmVxdWVzdEZyYW1lLnN0eWxlLmxlZnQgPSAiLTEwMHB4IjsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGlmIChjYWxsQmFja0ZyYW1lVXJsKSB7DQogICAgICAgICAgICAgICAgeG1sUmVxdWVzdEZyYW1lLnNyYyA9IGNhbGxCYWNrRnJhbWVVcmw7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2goZSkge30NCiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh4bWxSZXF1ZXN0RnJhbWUpOw0KICAgIH0NCiAgICB2YXIgaW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7DQogICAgICAgIHhtbFJlcXVlc3RGcmFtZSA9IGRvY3VtZW50LmZyYW1lc1tjYWxsYmFja0ZyYW1lSURdOw0KICAgICAgICBpZiAoeG1sUmVxdWVzdEZyYW1lICYmIHhtbFJlcXVlc3RGcmFtZS5kb2N1bWVudCkgew0KICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOw0KICAgICAgICAgICAgeG1sUmVxdWVzdEZyYW1lLmRvY3VtZW50LndyaXRlKCIiKTsNCiAgICAgICAgICAgIHhtbFJlcXVlc3RGcmFtZS5kb2N1bWVudC5jbG9zZSgpOw0KICAgICAgICAgICAgeG1sUmVxdWVzdEZyYW1lLmRvY3VtZW50LndyaXRlKCc8aHRtbD48Ym9keT48Zm9ybSBtZXRob2Q9InBvc3QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Il9fQ0FMTEJBQ0tMT0FEU0NSSVBUIiB2YWx1ZT0idCI+PC9mb3JtPjwvYm9keT48L2h0bWw+Jyk7DQogICAgICAgICAgICB4bWxSZXF1ZXN0RnJhbWUuZG9jdW1lbnQuY2xvc2UoKTsNCiAgICAgICAgICAgIHhtbFJlcXVlc3RGcmFtZS5kb2N1bWVudC5mb3Jtc1swXS5hY3Rpb24gPSB0aGVGb3JtLmFjdGlvbjsNCiAgICAgICAgICAgIHZhciBjb3VudCA9IF9fdGhlRm9ybVBvc3RDb2xsZWN0aW9uLmxlbmd0aDsNCiAgICAgICAgICAgIHZhciBlbGVtZW50Ow0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7DQogICAgICAgICAgICAgICAgZWxlbWVudCA9IF9fdGhlRm9ybVBvc3RDb2xsZWN0aW9uW2ldOw0KICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZEVsZW1lbnQgPSB4bWxSZXF1ZXN0RnJhbWUuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsNCiAgICAgICAgICAgICAgICAgICAgZmllbGRFbGVtZW50LnR5cGUgPSAiaGlkZGVuIjsNCiAgICAgICAgICAgICAgICAgICAgZmllbGRFbGVtZW50Lm5hbWUgPSBlbGVtZW50Lm5hbWU7DQogICAgICAgICAgICAgICAgICAgIGZpZWxkRWxlbWVudC52YWx1ZSA9IGVsZW1lbnQudmFsdWU7DQogICAgICAgICAgICAgICAgICAgIHhtbFJlcXVlc3RGcmFtZS5kb2N1bWVudC5mb3Jtc1swXS5hcHBlbmRDaGlsZChmaWVsZEVsZW1lbnQpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHZhciBjYWxsYmFja0lkRmllbGRFbGVtZW50ID0geG1sUmVxdWVzdEZyYW1lLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7DQogICAgICAgICAgICBjYWxsYmFja0lkRmllbGRFbGVtZW50LnR5cGUgPSAiaGlkZGVuIjsNCiAgICAgICAgICAgIGNhbGxiYWNrSWRGaWVsZEVsZW1lbnQubmFtZSA9ICJfX0NBTExCQUNLSUQiOw0KICAgICAgICAgICAgY2FsbGJhY2tJZEZpZWxkRWxlbWVudC52YWx1ZSA9IGV2ZW50VGFyZ2V0Ow0KICAgICAgICAgICAgeG1sUmVxdWVzdEZyYW1lLmRvY3VtZW50LmZvcm1zWzBdLmFwcGVuZENoaWxkKGNhbGxiYWNrSWRGaWVsZEVsZW1lbnQpOw0KICAgICAgICAgICAgdmFyIGNhbGxiYWNrUGFyYW1GaWVsZEVsZW1lbnQgPSB4bWxSZXF1ZXN0RnJhbWUuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsNCiAgICAgICAgICAgIGNhbGxiYWNrUGFyYW1GaWVsZEVsZW1lbnQudHlwZSA9ICJoaWRkZW4iOw0KICAgICAgICAgICAgY2FsbGJhY2tQYXJhbUZpZWxkRWxlbWVudC5uYW1lID0gIl9fQ0FMTEJBQ0tQQVJBTSI7DQogICAgICAgICAgICBjYWxsYmFja1BhcmFtRmllbGRFbGVtZW50LnZhbHVlID0gZXZlbnRBcmd1bWVudDsNCiAgICAgICAgICAgIHhtbFJlcXVlc3RGcmFtZS5kb2N1bWVudC5mb3Jtc1swXS5hcHBlbmRDaGlsZChjYWxsYmFja1BhcmFtRmllbGRFbGVtZW50KTsNCiAgICAgICAgICAgIGlmICh0aGVGb3JtWyJfX0VWRU5UVkFMSURBVElPTiJdKSB7DQogICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrVmFsaWRhdGlvbkZpZWxkRWxlbWVudCA9IHhtbFJlcXVlc3RGcmFtZS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOw0KICAgICAgICAgICAgICAgIGNhbGxiYWNrVmFsaWRhdGlvbkZpZWxkRWxlbWVudC50eXBlID0gImhpZGRlbiI7DQogICAgICAgICAgICAgICAgY2FsbGJhY2tWYWxpZGF0aW9uRmllbGRFbGVtZW50Lm5hbWUgPSAiX19FVkVOVFZBTElEQVRJT04iOw0KICAgICAgICAgICAgICAgIGNhbGxiYWNrVmFsaWRhdGlvbkZpZWxkRWxlbWVudC52YWx1ZSA9IHRoZUZvcm1bIl9fRVZFTlRWQUxJREFUSU9OIl0udmFsdWU7DQogICAgICAgICAgICAgICAgeG1sUmVxdWVzdEZyYW1lLmRvY3VtZW50LmZvcm1zWzBdLmFwcGVuZENoaWxkKGNhbGxiYWNrVmFsaWRhdGlvbkZpZWxkRWxlbWVudCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgY2FsbGJhY2tJbmRleEZpZWxkRWxlbWVudCA9IHhtbFJlcXVlc3RGcmFtZS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOw0KICAgICAgICAgICAgY2FsbGJhY2tJbmRleEZpZWxkRWxlbWVudC50eXBlID0gImhpZGRlbiI7DQogICAgICAgICAgICBjYWxsYmFja0luZGV4RmllbGRFbGVtZW50Lm5hbWUgPSAiX19DQUxMQkFDS0lOREVYIjsNCiAgICAgICAgICAgIGNhbGxiYWNrSW5kZXhGaWVsZEVsZW1lbnQudmFsdWUgPSBjYWxsYmFja0luZGV4Ow0KICAgICAgICAgICAgeG1sUmVxdWVzdEZyYW1lLmRvY3VtZW50LmZvcm1zWzBdLmFwcGVuZENoaWxkKGNhbGxiYWNrSW5kZXhGaWVsZEVsZW1lbnQpOw0KICAgICAgICAgICAgeG1sUmVxdWVzdEZyYW1lLmRvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpOw0KICAgICAgICB9DQogICAgfSwgMTApOw0KfQ0KZnVuY3Rpb24gV2ViRm9ybV9DYWxsYmFja0NvbXBsZXRlKCkgew0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX19wZW5kaW5nQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGNhbGxiYWNrT2JqZWN0ID0gX19wZW5kaW5nQ2FsbGJhY2tzW2ldOw0KICAgICAgICBpZiAoY2FsbGJhY2tPYmplY3QgJiYgY2FsbGJhY2tPYmplY3QueG1sUmVxdWVzdCAmJiAoY2FsbGJhY2tPYmplY3QueG1sUmVxdWVzdC5yZWFkeVN0YXRlID09IDQpKSB7DQogICAgICAgICAgICBpZiAoIV9fcGVuZGluZ0NhbGxiYWNrc1tpXS5hc3luYykgew0KICAgICAgICAgICAgICAgIF9fc3luY2hyb25vdXNDYWxsQmFja0luZGV4ID0gLTE7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBfX3BlbmRpbmdDYWxsYmFja3NbaV0gPSBudWxsOw0KICAgICAgICAgICAgdmFyIGNhbGxiYWNrRnJhbWVJRCA9ICJfX0NBTExCQUNLRlJBTUUiICsgaTsNCiAgICAgICAgICAgIHZhciB4bWxSZXF1ZXN0RnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYWxsYmFja0ZyYW1lSUQpOw0KICAgICAgICAgICAgaWYgKHhtbFJlcXVlc3RGcmFtZSkgew0KICAgICAgICAgICAgICAgIHhtbFJlcXVlc3RGcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHhtbFJlcXVlc3RGcmFtZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBXZWJGb3JtX0V4ZWN1dGVDYWxsYmFjayhjYWxsYmFja09iamVjdCk7DQogICAgICAgIH0NCiAgICB9DQp9DQpmdW5jdGlvbiBXZWJGb3JtX0V4ZWN1dGVDYWxsYmFjayhjYWxsYmFja09iamVjdCkgew0KICAgIHZhciByZXNwb25zZSA9IGNhbGxiYWNrT2JqZWN0LnhtbFJlcXVlc3QucmVzcG9uc2VUZXh0Ow0KICAgIGlmIChyZXNwb25zZS5jaGFyQXQoMCkgPT0gInMiKSB7DQogICAgICAgIGlmICgodHlwZW9mKGNhbGxiYWNrT2JqZWN0LmV2ZW50Q2FsbGJhY2spICE9ICJ1bmRlZmluZWQiKSAmJiAoY2FsbGJhY2tPYmplY3QuZXZlbnRDYWxsYmFjayAhPSBudWxsKSkgew0KICAgICAgICAgICAgY2FsbGJhY2tPYmplY3QuZXZlbnRDYWxsYmFjayhyZXNwb25zZS5zdWJzdHJpbmcoMSksIGNhbGxiYWNrT2JqZWN0LmNvbnRleHQpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UgaWYgKHJlc3BvbnNlLmNoYXJBdCgwKSA9PSAiZSIpIHsNCiAgICAgICAgaWYgKCh0eXBlb2YoY2FsbGJhY2tPYmplY3QuZXJyb3JDYWxsYmFjaykgIT0gInVuZGVmaW5lZCIpICYmIChjYWxsYmFja09iamVjdC5lcnJvckNhbGxiYWNrICE9IG51bGwpKSB7DQogICAgICAgICAgICBjYWxsYmFja09iamVjdC5lcnJvckNhbGxiYWNrKHJlc3BvbnNlLnN1YnN0cmluZygxKSwgY2FsbGJhY2tPYmplY3QuY29udGV4dCk7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIHZhciBzZXBhcmF0b3JJbmRleCA9IHJlc3BvbnNlLmluZGV4T2YoInwiKTsNCiAgICAgICAgaWYgKHNlcGFyYXRvckluZGV4ICE9IC0xKSB7DQogICAgICAgICAgICB2YXIgdmFsaWRhdGlvbkZpZWxkTGVuZ3RoID0gcGFyc2VJbnQocmVzcG9uc2Uuc3Vic3RyaW5nKDAsIHNlcGFyYXRvckluZGV4KSk7DQogICAgICAgICAgICBpZiAoIWlzTmFOKHZhbGlkYXRpb25GaWVsZExlbmd0aCkpIHsNCiAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdGlvbkZpZWxkID0gcmVzcG9uc2Uuc3Vic3RyaW5nKHNlcGFyYXRvckluZGV4ICsgMSwgc2VwYXJhdG9ySW5kZXggKyB2YWxpZGF0aW9uRmllbGRMZW5ndGggKyAxKTsNCiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbkZpZWxkICE9ICIiKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciB2YWxpZGF0aW9uRmllbGRFbGVtZW50ID0gdGhlRm9ybVsiX19FVkVOVFZBTElEQVRJT04iXTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0aW9uRmllbGRFbGVtZW50KSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uRmllbGRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25GaWVsZEVsZW1lbnQudHlwZSA9ICJoaWRkZW4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbkZpZWxkRWxlbWVudC5uYW1lID0gIl9fRVZFTlRWQUxJREFUSU9OIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoZUZvcm0uYXBwZW5kQ2hpbGQodmFsaWRhdGlvbkZpZWxkRWxlbWVudCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbkZpZWxkRWxlbWVudC52YWx1ZSA9IHZhbGlkYXRpb25GaWVsZDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YoY2FsbGJhY2tPYmplY3QuZXZlbnRDYWxsYmFjaykgIT0gInVuZGVmaW5lZCIpICYmIChjYWxsYmFja09iamVjdC5ldmVudENhbGxiYWNrICE9IG51bGwpKSB7DQogICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrT2JqZWN0LmV2ZW50Q2FsbGJhY2socmVzcG9uc2Uuc3Vic3RyaW5nKHNlcGFyYXRvckluZGV4ICsgdmFsaWRhdGlvbkZpZWxkTGVuZ3RoICsgMSksIGNhbGxiYWNrT2JqZWN0LmNvbnRleHQpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCmZ1bmN0aW9uIFdlYkZvcm1fRmlsbEZpcnN0QXZhaWxhYmxlU2xvdChhcnJheSwgZWxlbWVudCkgew0KICAgIHZhciBpOw0KICAgIGZvciAoaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgew0KICAgICAgICBpZiAoIWFycmF5W2ldKSBicmVhazsNCiAgICB9DQogICAgYXJyYXlbaV0gPSBlbGVtZW50Ow0KICAgIHJldHVybiBpOw0KfQ0KdmFyIF9fbm9uTVNET01Ccm93c2VyID0gKHdpbmRvdy5uYXZpZ2F0b3IuYXBwTmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2V4cGxvcmVyJykgPT0gLTEpOw0KdmFyIF9fdGhlRm9ybVBvc3REYXRhID0gIiI7DQp2YXIgX190aGVGb3JtUG9zdENvbGxlY3Rpb24gPSBuZXcgQXJyYXkoKTsNCnZhciBfX2NhbGxiYWNrVGV4dFR5cGVzID0gL14odGV4dHxwYXNzd29yZHxoaWRkZW58c2VhcmNofHRlbHx1cmx8ZW1haWx8bnVtYmVyfHJhbmdlfGNvbG9yfGRhdGV0aW1lfGRhdGV8bW9udGh8d2Vla3x0aW1lfGRhdGV0aW1lLWxvY2FsKSQvaTsNCmZ1bmN0aW9uIFdlYkZvcm1fSW5pdENhbGxiYWNrKCkgew0KICAgIHZhciBmb3JtRWxlbWVudHMgPSB0aGVGb3JtLmVsZW1lbnRzLA0KICAgICAgICBjb3VudCA9IGZvcm1FbGVtZW50cy5sZW5ndGgsDQogICAgICAgIGVsZW1lbnQ7DQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7DQogICAgICAgIGVsZW1lbnQgPSBmb3JtRWxlbWVudHNbaV07DQogICAgICAgIHZhciB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7DQogICAgICAgIGlmICh0YWdOYW1lID09ICJpbnB1dCIpIHsNCiAgICAgICAgICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlOw0KICAgICAgICAgICAgaWYgKChfX2NhbGxiYWNrVGV4dFR5cGVzLnRlc3QodHlwZSkgfHwgKCh0eXBlID09ICJjaGVja2JveCIgfHwgdHlwZSA9PSAicmFkaW8iKSAmJiBlbGVtZW50LmNoZWNrZWQpKQ0KICAgICAgICAgICAgICAgICYmIChlbGVtZW50LmlkICE9ICJfX0VWRU5UVkFMSURBVElPTiIpKSB7DQogICAgICAgICAgICAgICAgV2ViRm9ybV9Jbml0Q2FsbGJhY2tBZGRGaWVsZChlbGVtZW50Lm5hbWUsIGVsZW1lbnQudmFsdWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gInNlbGVjdCIpIHsNCiAgICAgICAgICAgIHZhciBzZWxlY3RDb3VudCA9IGVsZW1lbnQub3B0aW9ucy5sZW5ndGg7DQogICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlbGVjdENvdW50OyBqKyspIHsNCiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0Q2hpbGQgPSBlbGVtZW50Lm9wdGlvbnNbal07DQogICAgICAgICAgICAgICAgaWYgKHNlbGVjdENoaWxkLnNlbGVjdGVkID09IHRydWUpIHsNCiAgICAgICAgICAgICAgICAgICAgV2ViRm9ybV9Jbml0Q2FsbGJhY2tBZGRGaWVsZChlbGVtZW50Lm5hbWUsIGVsZW1lbnQudmFsdWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmICh0YWdOYW1lID09ICJ0ZXh0YXJlYSIpIHsNCiAgICAgICAgICAgIFdlYkZvcm1fSW5pdENhbGxiYWNrQWRkRmllbGQoZWxlbWVudC5uYW1lLCBlbGVtZW50LnZhbHVlKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCmZ1bmN0aW9uIFdlYkZvcm1fSW5pdENhbGxiYWNrQWRkRmllbGQobmFtZSwgdmFsdWUpIHsNCiAgICB2YXIgbmFtZVZhbHVlID0gbmV3IE9iamVjdCgpOw0KICAgIG5hbWVWYWx1ZS5uYW1lID0gbmFtZTsNCiAgICBuYW1lVmFsdWUudmFsdWUgPSB2YWx1ZTsNCiAgICBfX3RoZUZvcm1Qb3N0Q29sbGVjdGlvbltfX3RoZUZvcm1Qb3N0Q29sbGVjdGlvbi5sZW5ndGhdID0gbmFtZVZhbHVlOw0KICAgIF9fdGhlRm9ybVBvc3REYXRhICs9IFdlYkZvcm1fRW5jb2RlQ2FsbGJhY2sobmFtZSkgKyAiPSIgKyBXZWJGb3JtX0VuY29kZUNhbGxiYWNrKHZhbHVlKSArICImIjsNCn0NCmZ1bmN0aW9uIFdlYkZvcm1fRW5jb2RlQ2FsbGJhY2socGFyYW1ldGVyKSB7DQogICAgaWYgKGVuY29kZVVSSUNvbXBvbmVudCkgew0KICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcik7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICByZXR1cm4gZXNjYXBlKHBhcmFtZXRlcik7DQogICAgfQ0KfQ0KdmFyIF9fZGlzYWJsZWRDb250cm9sQXJyYXkgPSBuZXcgQXJyYXkoKTsNCmZ1bmN0aW9uIFdlYkZvcm1fUmVFbmFibGVDb250cm9scygpIHsNCiAgICBpZiAodHlwZW9mKF9fZW5hYmxlZENvbnRyb2xBcnJheSkgPT0gJ3VuZGVmaW5lZCcpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgICB2YXIgZGlzYWJsZWRJbmRleCA9IDA7DQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfX2VuYWJsZWRDb250cm9sQXJyYXkubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgdmFyIGM7DQogICAgICAgIGlmIChfX25vbk1TRE9NQnJvd3Nlcikgew0KICAgICAgICAgICAgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKF9fZW5hYmxlZENvbnRyb2xBcnJheVtpXSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBjID0gZG9jdW1lbnQuYWxsW19fZW5hYmxlZENvbnRyb2xBcnJheVtpXV07DQogICAgICAgIH0NCiAgICAgICAgaWYgKCh0eXBlb2YoYykgIT0gInVuZGVmaW5lZCIpICYmIChjICE9IG51bGwpICYmIChjLmRpc2FibGVkID09IHRydWUpKSB7DQogICAgICAgICAgICBjLmRpc2FibGVkID0gZmFsc2U7DQogICAgICAgICAgICBfX2Rpc2FibGVkQ29udHJvbEFycmF5W2Rpc2FibGVkSW5kZXgrK10gPSBjOw0KICAgICAgICB9DQogICAgfQ0KICAgIHNldFRpbWVvdXQoIldlYkZvcm1fUmVEaXNhYmxlQ29udHJvbHMoKSIsIDApOw0KICAgIHJldHVybiB0cnVlOw0KfQ0KZnVuY3Rpb24gV2ViRm9ybV9SZURpc2FibGVDb250cm9scygpIHsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9fZGlzYWJsZWRDb250cm9sQXJyYXkubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgX19kaXNhYmxlZENvbnRyb2xBcnJheVtpXS5kaXNhYmxlZCA9IHRydWU7DQogICAgfQ0KfQ0KZnVuY3Rpb24gV2ViRm9ybV9TaW11bGF0ZUNsaWNrKGVsZW1lbnQsIGV2ZW50KSB7DQogICAgdmFyIGNsaWNrRXZlbnQ7DQogICAgaWYgKGVsZW1lbnQpIHsNCiAgICAgICAgaWYgKGVsZW1lbnQuY2xpY2spIHsNCiAgICAgICAgICAgIGVsZW1lbnQuY2xpY2soKTsNCiAgICAgICAgfSBlbHNlIHsgDQogICAgICAgICAgICBjbGlja0V2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIik7DQogICAgICAgICAgICBjbGlja0V2ZW50LmluaXRNb3VzZUV2ZW50KCJjbGljayIsIHRydWUsIHRydWUsIHdpbmRvdywgMCwgMCwgMCwgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpOw0KICAgICAgICAgICAgaWYgKCFlbGVtZW50LmRpc3BhdGNoRXZlbnQoY2xpY2tFdmVudCkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOw0KICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7DQogICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KICAgIHJldHVybiB0cnVlOw0KfQ0KZnVuY3Rpb24gV2ViRm9ybV9GaXJlRGVmYXVsdEJ1dHRvbihldmVudCwgdGFyZ2V0KSB7DQogICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gMTMpIHsNCiAgICAgICAgdmFyIHNyYyA9IGV2ZW50LnNyY0VsZW1lbnQgfHwgZXZlbnQudGFyZ2V0Ow0KICAgICAgICBpZiAoc3JjICYmDQogICAgICAgICAgICAoKHNyYy50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gImlucHV0IikgJiYNCiAgICAgICAgICAgICAoc3JjLnR5cGUudG9Mb3dlckNhc2UoKSA9PSAic3VibWl0IiB8fCBzcmMudHlwZS50b0xvd2VyQ2FzZSgpID09ICJidXR0b24iKSkgfHwNCiAgICAgICAgICAgICgoc3JjLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAiYSIpICYmDQogICAgICAgICAgICAgKHNyYy5ocmVmICE9IG51bGwpICYmIChzcmMuaHJlZiAhPSAiIikpIHx8DQogICAgICAgICAgICAoc3JjLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAidGV4dGFyZWEiKSkgew0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgdmFyIGRlZmF1bHRCdXR0b247DQogICAgICAgIGlmIChfX25vbk1TRE9NQnJvd3Nlcikgew0KICAgICAgICAgICAgZGVmYXVsdEJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBkZWZhdWx0QnV0dG9uID0gZG9jdW1lbnQuYWxsW3RhcmdldF07DQogICAgICAgIH0NCiAgICAgICAgaWYgKGRlZmF1bHRCdXR0b24pIHsNCiAgICAgICAgICAgIHJldHVybiBXZWJGb3JtX1NpbXVsYXRlQ2xpY2soZGVmYXVsdEJ1dHRvbiwgZXZlbnQpOw0KICAgICAgICB9IA0KICAgIH0NCiAgICByZXR1cm4gdHJ1ZTsNCn0NCmZ1bmN0aW9uIFdlYkZvcm1fR2V0U2Nyb2xsWCgpIHsNCiAgICBpZiAoX19ub25NU0RPTUJyb3dzZXIpIHsNCiAgICAgICAgcmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldDsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpIHsNCiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChkb2N1bWVudC5ib2R5KSB7DQogICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0Ow0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAwOw0KfQ0KZnVuY3Rpb24gV2ViRm9ybV9HZXRTY3JvbGxZKCkgew0KICAgIGlmIChfX25vbk1TRE9NQnJvd3Nlcikgew0KICAgICAgICByZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSB7DQogICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChkb2N1bWVudC5ib2R5KSB7DQogICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIDA7DQp9DQpmdW5jdGlvbiBXZWJGb3JtX1NhdmVTY3JvbGxQb3NpdGlvblN1Ym1pdCgpIHsNCiAgICBpZiAoX19ub25NU0RPTUJyb3dzZXIpIHsNCiAgICAgICAgdGhlRm9ybS5lbGVtZW50c1snX19TQ1JPTExQT1NJVElPTlknXS52YWx1ZSA9IHdpbmRvdy5wYWdlWU9mZnNldDsNCiAgICAgICAgdGhlRm9ybS5lbGVtZW50c1snX19TQ1JPTExQT1NJVElPTlgnXS52YWx1ZSA9IHdpbmRvdy5wYWdlWE9mZnNldDsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIHRoZUZvcm0uX19TQ1JPTExQT1NJVElPTlgudmFsdWUgPSBXZWJGb3JtX0dldFNjcm9sbFgoKTsNCiAgICAgICAgdGhlRm9ybS5fX1NDUk9MTFBPU0lUSU9OWS52YWx1ZSA9IFdlYkZvcm1fR2V0U2Nyb2xsWSgpOw0KICAgIH0NCiAgICBpZiAoKHR5cGVvZih0aGlzLm9sZFN1Ym1pdCkgIT0gInVuZGVmaW5lZCIpICYmICh0aGlzLm9sZFN1Ym1pdCAhPSBudWxsKSkgew0KICAgICAgICByZXR1cm4gdGhpcy5vbGRTdWJtaXQoKTsNCiAgICB9DQogICAgcmV0dXJuIHRydWU7DQp9DQpmdW5jdGlvbiBXZWJGb3JtX1NhdmVTY3JvbGxQb3NpdGlvbk9uU3VibWl0KCkgew0KICAgIHRoZUZvcm0uX19TQ1JPTExQT1NJVElPTlgudmFsdWUgPSBXZWJGb3JtX0dldFNjcm9sbFgoKTsNCiAgICB0aGVGb3JtLl9fU0NST0xMUE9TSVRJT05ZLnZhbHVlID0gV2ViRm9ybV9HZXRTY3JvbGxZKCk7DQogICAgaWYgKCh0eXBlb2YodGhpcy5vbGRPblN1Ym1pdCkgIT0gInVuZGVmaW5lZCIpICYmICh0aGlzLm9sZE9uU3VibWl0ICE9IG51bGwpKSB7DQogICAgICAgIHJldHVybiB0aGlzLm9sZE9uU3VibWl0KCk7DQogICAgfQ0KICAgIHJldHVybiB0cnVlOw0KfQ0KZnVuY3Rpb24gV2ViRm9ybV9SZXN0b3JlU2Nyb2xsUG9zaXRpb24oKSB7DQogICAgaWYgKF9fbm9uTVNET01Ccm93c2VyKSB7DQogICAgICAgIHdpbmRvdy5zY3JvbGxUbyh0aGVGb3JtLmVsZW1lbnRzWydfX1NDUk9MTFBPU0lUSU9OWCddLnZhbHVlLCB0aGVGb3JtLmVsZW1lbnRzWydfX1NDUk9MTFBPU0lUSU9OWSddLnZhbHVlKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIHdpbmRvdy5zY3JvbGxUbyh0aGVGb3JtLl9fU0NST0xMUE9TSVRJT05YLnZhbHVlLCB0aGVGb3JtLl9fU0NST0xMUE9TSVRJT05ZLnZhbHVlKTsNCiAgICB9DQogICAgaWYgKCh0eXBlb2YodGhlRm9ybS5vbGRPbkxvYWQpICE9ICJ1bmRlZmluZWQiKSAmJiAodGhlRm9ybS5vbGRPbkxvYWQgIT0gbnVsbCkpIHsNCiAgICAgICAgcmV0dXJuIHRoZUZvcm0ub2xkT25Mb2FkKCk7DQogICAgfQ0KICAgIHJldHVybiB0cnVlOw0KfQ0KZnVuY3Rpb24gV2ViRm9ybV9UZXh0Qm94S2V5SGFuZGxlcihldmVudCkgew0KICAgIGlmIChldmVudC5rZXlDb2RlID09IDEzKSB7DQogICAgICAgIHZhciB0YXJnZXQ7DQogICAgICAgIGlmIChfX25vbk1TRE9NQnJvd3Nlcikgew0KICAgICAgICAgICAgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0Ow0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgdGFyZ2V0ID0gZXZlbnQuc3JjRWxlbWVudDsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoKHR5cGVvZih0YXJnZXQpICE9ICJ1bmRlZmluZWQiKSAmJiAodGFyZ2V0ICE9IG51bGwpKSB7DQogICAgICAgICAgICBpZiAodHlwZW9mKHRhcmdldC5vbmNoYW5nZSkgIT0gInVuZGVmaW5lZCIpIHsNCiAgICAgICAgICAgICAgICB0YXJnZXQub25jaGFuZ2UoKTsNCiAgICAgICAgICAgICAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOw0KICAgICAgICAgICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOw0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gdHJ1ZTsNCn0NCmZ1bmN0aW9uIFdlYkZvcm1fVHJpbVN0cmluZyh2YWx1ZSkgew0KICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpDQp9DQpmdW5jdGlvbiBXZWJGb3JtX0FwcGVuZFRvQ2xhc3NOYW1lKGVsZW1lbnQsIGNsYXNzTmFtZSkgew0KICAgIHZhciBjdXJyZW50Q2xhc3NOYW1lID0gJyAnICsgV2ViRm9ybV9UcmltU3RyaW5nKGVsZW1lbnQuY2xhc3NOYW1lKSArICcgJzsNCiAgICBjbGFzc05hbWUgPSBXZWJGb3JtX1RyaW1TdHJpbmcoY2xhc3NOYW1lKTsNCiAgICB2YXIgaW5kZXggPSBjdXJyZW50Q2xhc3NOYW1lLmluZGV4T2YoJyAnICsgY2xhc3NOYW1lICsgJyAnKTsNCiAgICBpZiAoaW5kZXggPT09IC0xKSB7DQogICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gKGVsZW1lbnQuY2xhc3NOYW1lID09PSAnJykgPyBjbGFzc05hbWUgOiBlbGVtZW50LmNsYXNzTmFtZSArICcgJyArIGNsYXNzTmFtZTsNCiAgICB9DQp9DQpmdW5jdGlvbiBXZWJGb3JtX1JlbW92ZUNsYXNzTmFtZShlbGVtZW50LCBjbGFzc05hbWUpIHsNCiAgICB2YXIgY3VycmVudENsYXNzTmFtZSA9ICcgJyArIFdlYkZvcm1fVHJpbVN0cmluZyhlbGVtZW50LmNsYXNzTmFtZSkgKyAnICc7DQogICAgY2xhc3NOYW1lID0gV2ViRm9ybV9UcmltU3RyaW5nKGNsYXNzTmFtZSk7DQogICAgdmFyIGluZGV4ID0gY3VycmVudENsYXNzTmFtZS5pbmRleE9mKCcgJyArIGNsYXNzTmFtZSArICcgJyk7DQogICAgaWYgKGluZGV4ID49IDApIHsNCiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBXZWJGb3JtX1RyaW1TdHJpbmcoY3VycmVudENsYXNzTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpICsgJyAnICsNCiAgICAgICAgICAgIGN1cnJlbnRDbGFzc05hbWUuc3Vic3RyaW5nKGluZGV4ICsgY2xhc3NOYW1lLmxlbmd0aCArIDEsIGN1cnJlbnRDbGFzc05hbWUubGVuZ3RoKSk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gV2ViRm9ybV9HZXRFbGVtZW50QnlJZChlbGVtZW50SWQpIHsNCiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpIHsNCiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7DQogICAgfQ0KICAgIGVsc2UgaWYgKGRvY3VtZW50LmFsbCkgew0KICAgICAgICByZXR1cm4gZG9jdW1lbnQuYWxsW2VsZW1lbnRJZF07DQogICAgfQ0KICAgIGVsc2UgcmV0dXJuIG51bGw7DQp9DQpmdW5jdGlvbiBXZWJGb3JtX0dldEVsZW1lbnRCeVRhZ05hbWUoZWxlbWVudCwgdGFnTmFtZSkgew0KICAgIHZhciBlbGVtZW50cyA9IFdlYkZvcm1fR2V0RWxlbWVudHNCeVRhZ05hbWUoZWxlbWVudCwgdGFnTmFtZSk7DQogICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgcmV0dXJuIGVsZW1lbnRzWzBdOw0KICAgIH0NCiAgICBlbHNlIHJldHVybiBudWxsOw0KfQ0KZnVuY3Rpb24gV2ViRm9ybV9HZXRFbGVtZW50c0J5VGFnTmFtZShlbGVtZW50LCB0YWdOYW1lKSB7DQogICAgaWYgKGVsZW1lbnQgJiYgdGFnTmFtZSkgew0KICAgICAgICBpZiAoZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSkgew0KICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGVsZW1lbnQuYWxsICYmIGVsZW1lbnQuYWxsLnRhZ3MpIHsNCiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmFsbC50YWdzKHRhZ05hbWUpOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiBudWxsOw0KfQ0KZnVuY3Rpb24gV2ViRm9ybV9HZXRFbGVtZW50RGlyKGVsZW1lbnQpIHsNCiAgICBpZiAoZWxlbWVudCkgew0KICAgICAgICBpZiAoZWxlbWVudC5kaXIpIHsNCiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmRpcjsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gV2ViRm9ybV9HZXRFbGVtZW50RGlyKGVsZW1lbnQucGFyZW50Tm9kZSk7DQogICAgfQ0KICAgIHJldHVybiAibHRyIjsNCn0NCmZ1bmN0aW9uIFdlYkZvcm1fR2V0RWxlbWVudFBvc2l0aW9uKGVsZW1lbnQpIHsNCiAgICB2YXIgcmVzdWx0ID0gbmV3IE9iamVjdCgpOw0KICAgIHJlc3VsdC54ID0gMDsNCiAgICByZXN1bHQueSA9IDA7DQogICAgcmVzdWx0LndpZHRoID0gMDsNCiAgICByZXN1bHQuaGVpZ2h0ID0gMDsNCiAgICBpZiAoZWxlbWVudC5vZmZzZXRQYXJlbnQpIHsNCiAgICAgICAgcmVzdWx0LnggPSBlbGVtZW50Lm9mZnNldExlZnQ7DQogICAgICAgIHJlc3VsdC55ID0gZWxlbWVudC5vZmZzZXRUb3A7DQogICAgICAgIHZhciBwYXJlbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDsNCiAgICAgICAgd2hpbGUgKHBhcmVudCkgew0KICAgICAgICAgICAgcmVzdWx0LnggKz0gcGFyZW50Lm9mZnNldExlZnQ7DQogICAgICAgICAgICByZXN1bHQueSArPSBwYXJlbnQub2Zmc2V0VG9wOw0KICAgICAgICAgICAgdmFyIHBhcmVudFRhZ05hbWUgPSBwYXJlbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOw0KICAgICAgICAgICAgaWYgKHBhcmVudFRhZ05hbWUgIT0gInRhYmxlIiAmJg0KICAgICAgICAgICAgICAgIHBhcmVudFRhZ05hbWUgIT0gImJvZHkiICYmIA0KICAgICAgICAgICAgICAgIHBhcmVudFRhZ05hbWUgIT0gImh0bWwiICYmIA0KICAgICAgICAgICAgICAgIHBhcmVudFRhZ05hbWUgIT0gImRpdiIgJiYgDQogICAgICAgICAgICAgICAgcGFyZW50LmNsaWVudFRvcCAmJiANCiAgICAgICAgICAgICAgICBwYXJlbnQuY2xpZW50TGVmdCkgew0KICAgICAgICAgICAgICAgIHJlc3VsdC54ICs9IHBhcmVudC5jbGllbnRMZWZ0Ow0KICAgICAgICAgICAgICAgIHJlc3VsdC55ICs9IHBhcmVudC5jbGllbnRUb3A7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQub2Zmc2V0UGFyZW50Ow0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UgaWYgKGVsZW1lbnQubGVmdCAmJiBlbGVtZW50LnRvcCkgew0KICAgICAgICByZXN1bHQueCA9IGVsZW1lbnQubGVmdDsNCiAgICAgICAgcmVzdWx0LnkgPSBlbGVtZW50LnRvcDsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIGlmIChlbGVtZW50LngpIHsNCiAgICAgICAgICAgIHJlc3VsdC54ID0gZWxlbWVudC54Ow0KICAgICAgICB9DQogICAgICAgIGlmIChlbGVtZW50LnkpIHsNCiAgICAgICAgICAgIHJlc3VsdC55ID0gZWxlbWVudC55Ow0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChlbGVtZW50Lm9mZnNldFdpZHRoICYmIGVsZW1lbnQub2Zmc2V0SGVpZ2h0KSB7DQogICAgICAgIHJlc3VsdC53aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7DQogICAgICAgIHJlc3VsdC5oZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDsNCiAgICB9DQogICAgZWxzZSBpZiAoZWxlbWVudC5zdHlsZSAmJiBlbGVtZW50LnN0eWxlLnBpeGVsV2lkdGggJiYgZWxlbWVudC5zdHlsZS5waXhlbEhlaWdodCkgew0KICAgICAgICByZXN1bHQud2lkdGggPSBlbGVtZW50LnN0eWxlLnBpeGVsV2lkdGg7DQogICAgICAgIHJlc3VsdC5oZWlnaHQgPSBlbGVtZW50LnN0eWxlLnBpeGVsSGVpZ2h0Ow0KICAgIH0NCiAgICByZXR1cm4gcmVzdWx0Ow0KfQ0KZnVuY3Rpb24gV2ViRm9ybV9HZXRQYXJlbnRCeVRhZ05hbWUoZWxlbWVudCwgdGFnTmFtZSkgew0KICAgIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7DQogICAgdmFyIHVwcGVyVGFnTmFtZSA9IHRhZ05hbWUudG9VcHBlckNhc2UoKTsNCiAgICB3aGlsZSAocGFyZW50ICYmIChwYXJlbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9IHVwcGVyVGFnTmFtZSkpIHsNCiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGUgPyBwYXJlbnQucGFyZW50Tm9kZSA6IHBhcmVudC5wYXJlbnRFbGVtZW50Ow0KICAgIH0NCiAgICByZXR1cm4gcGFyZW50Ow0KfQ0KZnVuY3Rpb24gV2ViRm9ybV9TZXRFbGVtZW50SGVpZ2h0KGVsZW1lbnQsIGhlaWdodCkgew0KICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuc3R5bGUpIHsNCiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOw0KICAgIH0NCn0NCmZ1bmN0aW9uIFdlYkZvcm1fU2V0RWxlbWVudFdpZHRoKGVsZW1lbnQsIHdpZHRoKSB7DQogICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5zdHlsZSkgew0KICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAicHgiOw0KICAgIH0NCn0NCmZ1bmN0aW9uIFdlYkZvcm1fU2V0RWxlbWVudFgoZWxlbWVudCwgeCkgew0KICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuc3R5bGUpIHsNCiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0geCArICJweCI7DQogICAgfQ0KfQ0KZnVuY3Rpb24gV2ViRm9ybV9TZXRFbGVtZW50WShlbGVtZW50LCB5KSB7DQogICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5zdHlsZSkgew0KICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IHkgKyAicHgiOw0KICAgIH0NCn0=">
  </script>
  <script class="sf-hidden"
    src="data:application/x-javascript;base64,77u/dmFyIFBhZ2VfVmFsaWRhdGlvblZlciA9ICIxMjUiOw0KdmFyIFBhZ2VfSXNWYWxpZCA9IHRydWU7DQp2YXIgUGFnZV9CbG9ja1N1Ym1pdCA9IGZhbHNlOw0KdmFyIFBhZ2VfSW52YWxpZENvbnRyb2xUb0JlRm9jdXNlZCA9IG51bGw7DQp2YXIgUGFnZV9UZXh0VHlwZXMgPSAvXih0ZXh0fHBhc3N3b3JkfGZpbGV8c2VhcmNofHRlbHx1cmx8ZW1haWx8bnVtYmVyfHJhbmdlfGNvbG9yfGRhdGV0aW1lfGRhdGV8bW9udGh8d2Vla3x0aW1lfGRhdGV0aW1lLWxvY2FsKSQvaTsNCmZ1bmN0aW9uIFZhbGlkYXRvclVwZGF0ZURpc3BsYXkodmFsKSB7DQogICAgaWYgKHR5cGVvZih2YWwuZGlzcGxheSkgPT0gInN0cmluZyIpIHsNCiAgICAgICAgaWYgKHZhbC5kaXNwbGF5ID09ICJOb25lIikgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIGlmICh2YWwuZGlzcGxheSA9PSAiRHluYW1pYyIpIHsNCiAgICAgICAgICAgIHZhbC5zdHlsZS5kaXNwbGF5ID0gdmFsLmlzdmFsaWQgPyAibm9uZSIgOiAiaW5saW5lIjsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTWFjIikgPiAtMSkgJiYNCiAgICAgICAgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTVNJRSIpID4gLTEpKSB7DQogICAgICAgIHZhbC5zdHlsZS5kaXNwbGF5ID0gImlubGluZSI7DQogICAgfQ0KICAgIHZhbC5zdHlsZS52aXNpYmlsaXR5ID0gdmFsLmlzdmFsaWQgPyAiaGlkZGVuIiA6ICJ2aXNpYmxlIjsNCn0NCmZ1bmN0aW9uIFZhbGlkYXRvclVwZGF0ZUlzVmFsaWQoKSB7DQogICAgUGFnZV9Jc1ZhbGlkID0gQWxsVmFsaWRhdG9yc1ZhbGlkKFBhZ2VfVmFsaWRhdG9ycyk7DQp9DQpmdW5jdGlvbiBBbGxWYWxpZGF0b3JzVmFsaWQodmFsaWRhdG9ycykgew0KICAgIGlmICgodHlwZW9mKHZhbGlkYXRvcnMpICE9ICJ1bmRlZmluZWQiKSAmJiAodmFsaWRhdG9ycyAhPSBudWxsKSkgew0KICAgICAgICB2YXIgaTsNCiAgICAgICAgZm9yIChpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIGlmICghdmFsaWRhdG9yc1tpXS5pc3ZhbGlkKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiB0cnVlOw0KfQ0KZnVuY3Rpb24gVmFsaWRhdG9ySG9va3VwQ29udHJvbElEKGNvbnRyb2xJRCwgdmFsKSB7DQogICAgaWYgKHR5cGVvZihjb250cm9sSUQpICE9ICJzdHJpbmciKSB7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgdmFyIGN0cmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSUQpOw0KICAgIGlmICgodHlwZW9mKGN0cmwpICE9ICJ1bmRlZmluZWQiKSAmJiAoY3RybCAhPSBudWxsKSkgew0KICAgICAgICBWYWxpZGF0b3JIb29rdXBDb250cm9sKGN0cmwsIHZhbCk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICB2YWwuaXN2YWxpZCA9IHRydWU7DQogICAgICAgIHZhbC5lbmFibGVkID0gZmFsc2U7DQogICAgfQ0KfQ0KZnVuY3Rpb24gVmFsaWRhdG9ySG9va3VwQ29udHJvbChjb250cm9sLCB2YWwpIHsNCiAgICBpZiAodHlwZW9mKGNvbnRyb2wudGFnTmFtZSkgIT0gInN0cmluZyIpIHsNCiAgICAgICAgcmV0dXJuOyAgDQogICAgfQ0KICAgIGlmIChjb250cm9sLnRhZ05hbWUgIT0gIklOUFVUIiAmJiBjb250cm9sLnRhZ05hbWUgIT0gIlRFWFRBUkVBIiAmJiBjb250cm9sLnRhZ05hbWUgIT0gIlNFTEVDVCIpIHsNCiAgICAgICAgdmFyIGk7DQogICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb250cm9sLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIFZhbGlkYXRvckhvb2t1cENvbnRyb2woY29udHJvbC5jaGlsZE5vZGVzW2ldLCB2YWwpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIGlmICh0eXBlb2YoY29udHJvbC5WYWxpZGF0b3JzKSA9PSAidW5kZWZpbmVkIikgew0KICAgICAgICAgICAgY29udHJvbC5WYWxpZGF0b3JzID0gbmV3IEFycmF5Ow0KICAgICAgICAgICAgdmFyIGV2ZW50VHlwZTsNCiAgICAgICAgICAgIGlmIChjb250cm9sLnR5cGUgPT0gInJhZGlvIikgew0KICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9ICJvbmNsaWNrIjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgZXZlbnRUeXBlID0gIm9uY2hhbmdlIjsNCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKHZhbC5mb2N1c09uRXJyb3IpID09ICJzdHJpbmciICYmIHZhbC5mb2N1c09uRXJyb3IgPT0gInQiKSB7DQogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvckhvb2t1cEV2ZW50KGNvbnRyb2wsICJvbmJsdXIiLCAiVmFsaWRhdGVkQ29udHJvbE9uQmx1cihldmVudCk7ICIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIFZhbGlkYXRvckhvb2t1cEV2ZW50KGNvbnRyb2wsIGV2ZW50VHlwZSwgIlZhbGlkYXRvck9uQ2hhbmdlKGV2ZW50KTsgIik7DQogICAgICAgICAgICBpZiAoUGFnZV9UZXh0VHlwZXMudGVzdChjb250cm9sLnR5cGUpKSB7DQogICAgICAgICAgICAgICAgVmFsaWRhdG9ySG9va3VwRXZlbnQoY29udHJvbCwgIm9ua2V5cHJlc3MiLCANCiAgICAgICAgICAgICAgICAgICAgImV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50OyBpZiAoIVZhbGlkYXRlZFRleHRCb3hPbktleVByZXNzKGV2ZW50KSkgeyBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOyBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmV0dXJuIGZhbHNlOyB9ICIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGNvbnRyb2wuVmFsaWRhdG9yc1tjb250cm9sLlZhbGlkYXRvcnMubGVuZ3RoXSA9IHZhbDsNCiAgICB9DQp9DQpmdW5jdGlvbiBWYWxpZGF0b3JIb29rdXBFdmVudChjb250cm9sLCBldmVudFR5cGUsIGZ1bmN0aW9uUHJlZml4KSB7DQogICAgdmFyIGV2ID0gY29udHJvbFtldmVudFR5cGVdOw0KICAgIGlmICh0eXBlb2YoZXYpID09ICJmdW5jdGlvbiIpIHsNCiAgICAgICAgZXYgPSBldi50b1N0cmluZygpOw0KICAgICAgICBldiA9IGV2LnN1YnN0cmluZyhldi5pbmRleE9mKCJ7IikgKyAxLCBldi5sYXN0SW5kZXhPZigifSIpKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIGV2ID0gIiI7DQogICAgfQ0KICAgIGNvbnRyb2xbZXZlbnRUeXBlXSA9IG5ldyBGdW5jdGlvbigiZXZlbnQiLCBmdW5jdGlvblByZWZpeCArICIgIiArIGV2KTsNCn0NCmZ1bmN0aW9uIFZhbGlkYXRvckdldFZhbHVlKGlkKSB7DQogICAgdmFyIGNvbnRyb2w7DQogICAgY29udHJvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsNCiAgICBpZiAodHlwZW9mKGNvbnRyb2wudmFsdWUpID09ICJzdHJpbmciKSB7DQogICAgICAgIHJldHVybiBjb250cm9sLnZhbHVlOw0KICAgIH0NCiAgICByZXR1cm4gVmFsaWRhdG9yR2V0VmFsdWVSZWN1cnNpdmUoY29udHJvbCk7DQp9DQpmdW5jdGlvbiBWYWxpZGF0b3JHZXRWYWx1ZVJlY3Vyc2l2ZShjb250cm9sKQ0Kew0KICAgIGlmICh0eXBlb2YoY29udHJvbC52YWx1ZSkgPT0gInN0cmluZyIgJiYgKGNvbnRyb2wudHlwZSAhPSAicmFkaW8iIHx8IGNvbnRyb2wuY2hlY2tlZCA9PSB0cnVlKSkgew0KICAgICAgICByZXR1cm4gY29udHJvbC52YWx1ZTsNCiAgICB9DQogICAgdmFyIGksIHZhbDsNCiAgICBmb3IgKGkgPSAwOyBpPGNvbnRyb2wuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICB2YWwgPSBWYWxpZGF0b3JHZXRWYWx1ZVJlY3Vyc2l2ZShjb250cm9sLmNoaWxkTm9kZXNbaV0pOw0KICAgICAgICBpZiAodmFsICE9ICIiKSByZXR1cm4gdmFsOw0KICAgIH0NCiAgICByZXR1cm4gIiI7DQp9DQpmdW5jdGlvbiBQYWdlX0NsaWVudFZhbGlkYXRlKHZhbGlkYXRpb25Hcm91cCkgew0KICAgIFBhZ2VfSW52YWxpZENvbnRyb2xUb0JlRm9jdXNlZCA9IG51bGw7DQogICAgaWYgKHR5cGVvZihQYWdlX1ZhbGlkYXRvcnMpID09ICJ1bmRlZmluZWQiKSB7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgICB2YXIgaTsNCiAgICBmb3IgKGkgPSAwOyBpIDwgUGFnZV9WYWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIFZhbGlkYXRvclZhbGlkYXRlKFBhZ2VfVmFsaWRhdG9yc1tpXSwgdmFsaWRhdGlvbkdyb3VwLCBudWxsKTsNCiAgICB9DQogICAgVmFsaWRhdG9yVXBkYXRlSXNWYWxpZCgpOw0KICAgIFZhbGlkYXRpb25TdW1tYXJ5T25TdWJtaXQodmFsaWRhdGlvbkdyb3VwKTsNCiAgICBQYWdlX0Jsb2NrU3VibWl0ID0gIVBhZ2VfSXNWYWxpZDsNCiAgICByZXR1cm4gUGFnZV9Jc1ZhbGlkOw0KfQ0KZnVuY3Rpb24gVmFsaWRhdG9yQ29tbW9uT25TdWJtaXQoKSB7DQogICAgUGFnZV9JbnZhbGlkQ29udHJvbFRvQmVGb2N1c2VkID0gbnVsbDsNCiAgICB2YXIgcmVzdWx0ID0gIVBhZ2VfQmxvY2tTdWJtaXQ7DQogICAgaWYgKCh0eXBlb2Yod2luZG93LmV2ZW50KSAhPSAidW5kZWZpbmVkIikgJiYgKHdpbmRvdy5ldmVudCAhPSBudWxsKSkgew0KICAgICAgICB3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUgPSByZXN1bHQ7DQogICAgfQ0KICAgIFBhZ2VfQmxvY2tTdWJtaXQgPSBmYWxzZTsNCiAgICByZXR1cm4gcmVzdWx0Ow0KfQ0KZnVuY3Rpb24gVmFsaWRhdG9yRW5hYmxlKHZhbCwgZW5hYmxlKSB7DQogICAgdmFsLmVuYWJsZWQgPSAoZW5hYmxlICE9IGZhbHNlKTsNCiAgICBWYWxpZGF0b3JWYWxpZGF0ZSh2YWwpOw0KICAgIFZhbGlkYXRvclVwZGF0ZUlzVmFsaWQoKTsNCn0NCmZ1bmN0aW9uIFZhbGlkYXRvck9uQ2hhbmdlKGV2ZW50KSB7DQogICAgZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7DQogICAgUGFnZV9JbnZhbGlkQ29udHJvbFRvQmVGb2N1c2VkID0gbnVsbDsNCiAgICB2YXIgdGFyZ2V0ZWRDb250cm9sOw0KICAgIGlmICgodHlwZW9mKGV2ZW50LnNyY0VsZW1lbnQpICE9ICJ1bmRlZmluZWQiKSAmJiAoZXZlbnQuc3JjRWxlbWVudCAhPSBudWxsKSkgew0KICAgICAgICB0YXJnZXRlZENvbnRyb2wgPSBldmVudC5zcmNFbGVtZW50Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgdGFyZ2V0ZWRDb250cm9sID0gZXZlbnQudGFyZ2V0Ow0KICAgIH0NCiAgICB2YXIgdmFsczsNCiAgICBpZiAodHlwZW9mKHRhcmdldGVkQ29udHJvbC5WYWxpZGF0b3JzKSAhPSAidW5kZWZpbmVkIikgew0KICAgICAgICB2YWxzID0gdGFyZ2V0ZWRDb250cm9sLlZhbGlkYXRvcnM7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICBpZiAodGFyZ2V0ZWRDb250cm9sLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAibGFiZWwiKSB7DQogICAgICAgICAgICB0YXJnZXRlZENvbnRyb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXRlZENvbnRyb2wuaHRtbEZvcik7DQogICAgICAgICAgICB2YWxzID0gdGFyZ2V0ZWRDb250cm9sLlZhbGlkYXRvcnM7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKHZhbHMpIHsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBWYWxpZGF0b3JWYWxpZGF0ZSh2YWxzW2ldLCBudWxsLCBldmVudCk7DQogICAgICAgIH0NCiAgICB9DQogICAgVmFsaWRhdG9yVXBkYXRlSXNWYWxpZCgpOw0KfQ0KZnVuY3Rpb24gVmFsaWRhdGVkVGV4dEJveE9uS2V5UHJlc3MoZXZlbnQpIHsNCiAgICBldmVudCA9IGV2ZW50IHx8IHdpbmRvdy5ldmVudDsNCiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PSAxMykgew0KICAgICAgICBWYWxpZGF0b3JPbkNoYW5nZShldmVudCk7DQogICAgICAgIHZhciB2YWxzOw0KICAgICAgICBpZiAoKHR5cGVvZihldmVudC5zcmNFbGVtZW50KSAhPSAidW5kZWZpbmVkIikgJiYgKGV2ZW50LnNyY0VsZW1lbnQgIT0gbnVsbCkpIHsNCiAgICAgICAgICAgIHZhbHMgPSBldmVudC5zcmNFbGVtZW50LlZhbGlkYXRvcnM7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICB2YWxzID0gZXZlbnQudGFyZ2V0LlZhbGlkYXRvcnM7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIEFsbFZhbGlkYXRvcnNWYWxpZCh2YWxzKTsNCiAgICB9DQogICAgcmV0dXJuIHRydWU7DQp9DQpmdW5jdGlvbiBWYWxpZGF0ZWRDb250cm9sT25CbHVyKGV2ZW50KSB7DQogICAgZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7DQogICAgdmFyIGNvbnRyb2w7DQogICAgaWYgKCh0eXBlb2YoZXZlbnQuc3JjRWxlbWVudCkgIT0gInVuZGVmaW5lZCIpICYmIChldmVudC5zcmNFbGVtZW50ICE9IG51bGwpKSB7DQogICAgICAgIGNvbnRyb2wgPSBldmVudC5zcmNFbGVtZW50Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgY29udHJvbCA9IGV2ZW50LnRhcmdldDsNCiAgICB9DQogICAgaWYgKCh0eXBlb2YoY29udHJvbCkgIT0gInVuZGVmaW5lZCIpICYmIChjb250cm9sICE9IG51bGwpICYmIChQYWdlX0ludmFsaWRDb250cm9sVG9CZUZvY3VzZWQgPT0gY29udHJvbCkpIHsNCiAgICAgICAgY29udHJvbC5mb2N1cygpOw0KICAgICAgICBQYWdlX0ludmFsaWRDb250cm9sVG9CZUZvY3VzZWQgPSBudWxsOw0KICAgIH0NCn0NCmZ1bmN0aW9uIFZhbGlkYXRvclZhbGlkYXRlKHZhbCwgdmFsaWRhdGlvbkdyb3VwLCBldmVudCkgew0KICAgIHZhbC5pc3ZhbGlkID0gdHJ1ZTsNCiAgICBpZiAoKHR5cGVvZih2YWwuZW5hYmxlZCkgPT0gInVuZGVmaW5lZCIgfHwgdmFsLmVuYWJsZWQgIT0gZmFsc2UpICYmIElzVmFsaWRhdGlvbkdyb3VwTWF0Y2godmFsLCB2YWxpZGF0aW9uR3JvdXApKSB7DQogICAgICAgIGlmICh0eXBlb2YodmFsLmV2YWx1YXRpb25mdW5jdGlvbikgPT0gImZ1bmN0aW9uIikgew0KICAgICAgICAgICAgdmFsLmlzdmFsaWQgPSB2YWwuZXZhbHVhdGlvbmZ1bmN0aW9uKHZhbCk7DQogICAgICAgICAgICBpZiAoIXZhbC5pc3ZhbGlkICYmIFBhZ2VfSW52YWxpZENvbnRyb2xUb0JlRm9jdXNlZCA9PSBudWxsICYmDQogICAgICAgICAgICAgICAgdHlwZW9mKHZhbC5mb2N1c09uRXJyb3IpID09ICJzdHJpbmciICYmIHZhbC5mb2N1c09uRXJyb3IgPT0gInQiKSB7DQogICAgICAgICAgICAgICAgVmFsaWRhdG9yU2V0Rm9jdXModmFsLCBldmVudCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgVmFsaWRhdG9yVXBkYXRlRGlzcGxheSh2YWwpOw0KfQ0KZnVuY3Rpb24gVmFsaWRhdG9yU2V0Rm9jdXModmFsLCBldmVudCkgew0KICAgIHZhciBjdHJsOw0KICAgIGlmICh0eXBlb2YodmFsLmNvbnRyb2xob29rdXApID09ICJzdHJpbmciKSB7DQogICAgICAgIHZhciBldmVudEN0cmw7DQogICAgICAgIGlmICgodHlwZW9mKGV2ZW50KSAhPSAidW5kZWZpbmVkIikgJiYgKGV2ZW50ICE9IG51bGwpKSB7DQogICAgICAgICAgICBpZiAoKHR5cGVvZihldmVudC5zcmNFbGVtZW50KSAhPSAidW5kZWZpbmVkIikgJiYgKGV2ZW50LnNyY0VsZW1lbnQgIT0gbnVsbCkpIHsNCiAgICAgICAgICAgICAgICBldmVudEN0cmwgPSBldmVudC5zcmNFbGVtZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgZXZlbnRDdHJsID0gZXZlbnQudGFyZ2V0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICgodHlwZW9mKGV2ZW50Q3RybCkgIT0gInVuZGVmaW5lZCIpICYmIChldmVudEN0cmwgIT0gbnVsbCkgJiYNCiAgICAgICAgICAgICh0eXBlb2YoZXZlbnRDdHJsLmlkKSA9PSAic3RyaW5nIikgJiYNCiAgICAgICAgICAgIChldmVudEN0cmwuaWQgPT0gdmFsLmNvbnRyb2xob29rdXApKSB7DQogICAgICAgICAgICBjdHJsID0gZXZlbnRDdHJsOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmICgodHlwZW9mKGN0cmwpID09ICJ1bmRlZmluZWQiKSB8fCAoY3RybCA9PSBudWxsKSkgew0KICAgICAgICBjdHJsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodmFsLmNvbnRyb2x0b3ZhbGlkYXRlKTsNCiAgICB9DQogICAgaWYgKCh0eXBlb2YoY3RybCkgIT0gInVuZGVmaW5lZCIpICYmIChjdHJsICE9IG51bGwpICYmDQogICAgICAgIChjdHJsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSAidGFibGUiIHx8ICh0eXBlb2YoZXZlbnQpID09ICJ1bmRlZmluZWQiKSB8fCAoZXZlbnQgPT0gbnVsbCkpICYmIA0KICAgICAgICAoKGN0cmwudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9ICJpbnB1dCIpIHx8IChjdHJsLnR5cGUudG9Mb3dlckNhc2UoKSAhPSAiaGlkZGVuIikpICYmDQogICAgICAgICh0eXBlb2YoY3RybC5kaXNhYmxlZCkgPT0gInVuZGVmaW5lZCIgfHwgY3RybC5kaXNhYmxlZCA9PSBudWxsIHx8IGN0cmwuZGlzYWJsZWQgPT0gZmFsc2UpICYmDQogICAgICAgICh0eXBlb2YoY3RybC52aXNpYmxlKSA9PSAidW5kZWZpbmVkIiB8fCBjdHJsLnZpc2libGUgPT0gbnVsbCB8fCBjdHJsLnZpc2libGUgIT0gZmFsc2UpICYmDQogICAgICAgIChJc0luVmlzaWJsZUNvbnRhaW5lcihjdHJsKSkpIHsNCiAgICAgICAgaWYgKChjdHJsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAidGFibGUiICYmICh0eXBlb2YoX19ub25NU0RPTUJyb3dzZXIpID09ICJ1bmRlZmluZWQiIHx8IF9fbm9uTVNET01Ccm93c2VyKSkgfHwNCiAgICAgICAgICAgIChjdHJsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAic3BhbiIpKSB7DQogICAgICAgICAgICB2YXIgaW5wdXRFbGVtZW50cyA9IGN0cmwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7DQogICAgICAgICAgICB2YXIgbGFzdElucHV0RWxlbWVudCAgPSBpbnB1dEVsZW1lbnRzW2lucHV0RWxlbWVudHMubGVuZ3RoIC0xXTsNCiAgICAgICAgICAgIGlmIChsYXN0SW5wdXRFbGVtZW50ICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICBjdHJsID0gbGFzdElucHV0RWxlbWVudDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAodHlwZW9mKGN0cmwuZm9jdXMpICE9ICJ1bmRlZmluZWQiICYmIGN0cmwuZm9jdXMgIT0gbnVsbCkgew0KICAgICAgICAgICAgY3RybC5mb2N1cygpOw0KICAgICAgICAgICAgUGFnZV9JbnZhbGlkQ29udHJvbFRvQmVGb2N1c2VkID0gY3RybDsNCiAgICAgICAgfQ0KICAgIH0NCn0NCmZ1bmN0aW9uIElzSW5WaXNpYmxlQ29udGFpbmVyKGN0cmwpIHsNCiAgICBpZiAodHlwZW9mKGN0cmwuc3R5bGUpICE9ICJ1bmRlZmluZWQiICYmDQogICAgICAgICggKCB0eXBlb2YoY3RybC5zdHlsZS5kaXNwbGF5KSAhPSAidW5kZWZpbmVkIiAmJg0KICAgICAgICAgICAgY3RybC5zdHlsZS5kaXNwbGF5ID09ICJub25lIikgfHwNCiAgICAgICAgICAoIHR5cGVvZihjdHJsLnN0eWxlLnZpc2liaWxpdHkpICE9ICJ1bmRlZmluZWQiICYmDQogICAgICAgICAgICBjdHJsLnN0eWxlLnZpc2liaWxpdHkgPT0gImhpZGRlbiIpICkgKSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgZWxzZSBpZiAodHlwZW9mKGN0cmwucGFyZW50Tm9kZSkgIT0gInVuZGVmaW5lZCIgJiYNCiAgICAgICAgICAgICBjdHJsLnBhcmVudE5vZGUgIT0gbnVsbCAmJg0KICAgICAgICAgICAgIGN0cmwucGFyZW50Tm9kZSAhPSBjdHJsKSB7DQogICAgICAgIHJldHVybiBJc0luVmlzaWJsZUNvbnRhaW5lcihjdHJsLnBhcmVudE5vZGUpOw0KICAgIH0NCiAgICByZXR1cm4gdHJ1ZTsNCn0NCmZ1bmN0aW9uIElzVmFsaWRhdGlvbkdyb3VwTWF0Y2goY29udHJvbCwgdmFsaWRhdGlvbkdyb3VwKSB7DQogICAgaWYgKCh0eXBlb2YodmFsaWRhdGlvbkdyb3VwKSA9PSAidW5kZWZpbmVkIikgfHwgKHZhbGlkYXRpb25Hcm91cCA9PSBudWxsKSkgew0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQogICAgdmFyIGNvbnRyb2xHcm91cCA9ICIiOw0KICAgIGlmICh0eXBlb2YoY29udHJvbC52YWxpZGF0aW9uR3JvdXApID09ICJzdHJpbmciKSB7DQogICAgICAgIGNvbnRyb2xHcm91cCA9IGNvbnRyb2wudmFsaWRhdGlvbkdyb3VwOw0KICAgIH0NCiAgICByZXR1cm4gKGNvbnRyb2xHcm91cCA9PSB2YWxpZGF0aW9uR3JvdXApOw0KfQ0KZnVuY3Rpb24gVmFsaWRhdG9yT25Mb2FkKCkgew0KICAgIGlmICh0eXBlb2YoUGFnZV9WYWxpZGF0b3JzKSA9PSAidW5kZWZpbmVkIikNCiAgICAgICAgcmV0dXJuOw0KICAgIHZhciBpLCB2YWw7DQogICAgZm9yIChpID0gMDsgaSA8IFBhZ2VfVmFsaWRhdG9ycy5sZW5ndGg7IGkrKykgew0KICAgICAgICB2YWwgPSBQYWdlX1ZhbGlkYXRvcnNbaV07DQogICAgICAgIGlmICh0eXBlb2YodmFsLmV2YWx1YXRpb25mdW5jdGlvbikgPT0gInN0cmluZyIpIHsNCiAgICAgICAgICAgIGV2YWwoInZhbC5ldmFsdWF0aW9uZnVuY3Rpb24gPSAiICsgdmFsLmV2YWx1YXRpb25mdW5jdGlvbiArICI7Iik7DQogICAgICAgIH0NCiAgICAgICAgaWYgKHR5cGVvZih2YWwuaXN2YWxpZCkgPT0gInN0cmluZyIpIHsNCiAgICAgICAgICAgIGlmICh2YWwuaXN2YWxpZCA9PSAiRmFsc2UiKSB7DQogICAgICAgICAgICAgICAgdmFsLmlzdmFsaWQgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICBQYWdlX0lzVmFsaWQgPSBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIHZhbC5pc3ZhbGlkID0gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHZhbC5pc3ZhbGlkID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAodHlwZW9mKHZhbC5lbmFibGVkKSA9PSAic3RyaW5nIikgew0KICAgICAgICAgICAgdmFsLmVuYWJsZWQgPSAodmFsLmVuYWJsZWQgIT0gIkZhbHNlIik7DQogICAgICAgIH0NCiAgICAgICAgaWYgKHR5cGVvZih2YWwuY29udHJvbHRvdmFsaWRhdGUpID09ICJzdHJpbmciKSB7DQogICAgICAgICAgICBWYWxpZGF0b3JIb29rdXBDb250cm9sSUQodmFsLmNvbnRyb2x0b3ZhbGlkYXRlLCB2YWwpOw0KICAgICAgICB9DQogICAgICAgIGlmICh0eXBlb2YodmFsLmNvbnRyb2xob29rdXApID09ICJzdHJpbmciKSB7DQogICAgICAgICAgICBWYWxpZGF0b3JIb29rdXBDb250cm9sSUQodmFsLmNvbnRyb2xob29rdXAsIHZhbCk7DQogICAgICAgIH0NCiAgICB9DQogICAgUGFnZV9WYWxpZGF0aW9uQWN0aXZlID0gdHJ1ZTsNCn0NCmZ1bmN0aW9uIFZhbGlkYXRvckNvbnZlcnQob3AsIGRhdGFUeXBlLCB2YWwpIHsNCiAgICBmdW5jdGlvbiBHZXRGdWxsWWVhcih5ZWFyKSB7DQogICAgICAgIHZhciB0d29EaWdpdEN1dG9mZlllYXIgPSB2YWwuY3V0b2ZmeWVhciAlIDEwMDsNCiAgICAgICAgdmFyIGN1dG9mZlllYXJDZW50dXJ5ID0gdmFsLmN1dG9mZnllYXIgLSB0d29EaWdpdEN1dG9mZlllYXI7DQogICAgICAgIHJldHVybiAoKHllYXIgPiB0d29EaWdpdEN1dG9mZlllYXIpID8gKGN1dG9mZlllYXJDZW50dXJ5IC0gMTAwICsgeWVhcikgOiAoY3V0b2ZmWWVhckNlbnR1cnkgKyB5ZWFyKSk7DQogICAgfQ0KICAgIHZhciBudW0sIGNsZWFuSW5wdXQsIG0sIGV4cDsNCiAgICBpZiAoZGF0YVR5cGUgPT0gIkludGVnZXIiKSB7DQogICAgICAgIGV4cCA9IC9eXHMqWy1cK10/XGQrXHMqJC87DQogICAgICAgIGlmIChvcC5tYXRjaChleHApID09IG51bGwpDQogICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgbnVtID0gcGFyc2VJbnQob3AsIDEwKTsNCiAgICAgICAgcmV0dXJuIChpc05hTihudW0pID8gbnVsbCA6IG51bSk7DQogICAgfQ0KICAgIGVsc2UgaWYoZGF0YVR5cGUgPT0gIkRvdWJsZSIpIHsNCiAgICAgICAgZXhwID0gbmV3IFJlZ0V4cCgiXlxccyooWy1cXCtdKT8oXFxkKilcXCIgKyB2YWwuZGVjaW1hbGNoYXIgKyAiPyhcXGQqKVxccyokIik7DQogICAgICAgIG0gPSBvcC5tYXRjaChleHApOw0KICAgICAgICBpZiAobSA9PSBudWxsKQ0KICAgICAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICAgIGlmIChtWzJdLmxlbmd0aCA9PSAwICYmIG1bM10ubGVuZ3RoID09IDApDQogICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgY2xlYW5JbnB1dCA9IChtWzFdICE9IG51bGwgPyBtWzFdIDogIiIpICsgKG1bMl0ubGVuZ3RoPjAgPyBtWzJdIDogIjAiKSArIChtWzNdLmxlbmd0aD4wID8gIi4iICsgbVszXSA6ICIiKTsNCiAgICAgICAgbnVtID0gcGFyc2VGbG9hdChjbGVhbklucHV0KTsNCiAgICAgICAgcmV0dXJuIChpc05hTihudW0pID8gbnVsbCA6IG51bSk7DQogICAgfQ0KICAgIGVsc2UgaWYgKGRhdGFUeXBlID09ICJDdXJyZW5jeSIpIHsNCiAgICAgICAgdmFyIGhhc0RpZ2l0cyA9ICh2YWwuZGlnaXRzID4gMCk7DQogICAgICAgIHZhciBiZWdpbkdyb3VwU2l6ZSwgc3Vic2VxdWVudEdyb3VwU2l6ZTsNCiAgICAgICAgdmFyIGdyb3VwU2l6ZU51bSA9IHBhcnNlSW50KHZhbC5ncm91cHNpemUsIDEwKTsNCiAgICAgICAgaWYgKCFpc05hTihncm91cFNpemVOdW0pICYmIGdyb3VwU2l6ZU51bSA+IDApIHsNCiAgICAgICAgICAgIGJlZ2luR3JvdXBTaXplID0gInsxLCIgKyBncm91cFNpemVOdW0gKyAifSI7DQogICAgICAgICAgICBzdWJzZXF1ZW50R3JvdXBTaXplID0gInsiICsgZ3JvdXBTaXplTnVtICsgIn0iOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgYmVnaW5Hcm91cFNpemUgPSBzdWJzZXF1ZW50R3JvdXBTaXplID0gIisiOw0KICAgICAgICB9DQogICAgICAgIGV4cCA9IG5ldyBSZWdFeHAoIl5cXHMqKFstXFwrXSk/KChcXGQiICsgYmVnaW5Hcm91cFNpemUgKyAiKFxcIiArIHZhbC5ncm91cGNoYXIgKyAiXFxkIiArIHN1YnNlcXVlbnRHcm91cFNpemUgKyAiKSspfFxcZCopIg0KICAgICAgICAgICAgICAgICAgICAgICAgKyAoaGFzRGlnaXRzID8gIlxcIiArIHZhbC5kZWNpbWFsY2hhciArICI/KFxcZHswLCIgKyB2YWwuZGlnaXRzICsgIn0pIiA6ICIiKQ0KICAgICAgICAgICAgICAgICAgICAgICAgKyAiXFxzKiQiKTsNCiAgICAgICAgbSA9IG9wLm1hdGNoKGV4cCk7DQogICAgICAgIGlmIChtID09IG51bGwpDQogICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgaWYgKG1bMl0ubGVuZ3RoID09IDAgJiYgaGFzRGlnaXRzICYmIG1bNV0ubGVuZ3RoID09IDApDQogICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgY2xlYW5JbnB1dCA9IChtWzFdICE9IG51bGwgPyBtWzFdIDogIiIpICsgbVsyXS5yZXBsYWNlKG5ldyBSZWdFeHAoIihcXCIgKyB2YWwuZ3JvdXBjaGFyICsgIikiLCAiZyIpLCAiIikgKyAoKGhhc0RpZ2l0cyAmJiBtWzVdLmxlbmd0aCA+IDApID8gIi4iICsgbVs1XSA6ICIiKTsNCiAgICAgICAgbnVtID0gcGFyc2VGbG9hdChjbGVhbklucHV0KTsNCiAgICAgICAgcmV0dXJuIChpc05hTihudW0pID8gbnVsbCA6IG51bSk7DQogICAgfQ0KICAgIGVsc2UgaWYgKGRhdGFUeXBlID09ICJEYXRlIikgew0KICAgICAgICB2YXIgeWVhckZpcnN0RXhwID0gbmV3IFJlZ0V4cCgiXlxccyooKFxcZHs0fSl8KFxcZHsyfSkpKFstL118XFwuID8pKFxcZHsxLDJ9KVxcNChcXGR7MSwyfSlcXC4/XFxzKiQiKTsNCiAgICAgICAgbSA9IG9wLm1hdGNoKHllYXJGaXJzdEV4cCk7DQogICAgICAgIHZhciBkYXksIG1vbnRoLCB5ZWFyOw0KICAgICAgICBpZiAobSAhPSBudWxsICYmICgoKHR5cGVvZihtWzJdKSAhPSAidW5kZWZpbmVkIikgJiYgKG1bMl0ubGVuZ3RoID09IDQpKSB8fCB2YWwuZGF0ZW9yZGVyID09ICJ5bWQiKSkgew0KICAgICAgICAgICAgZGF5ID0gbVs2XTsNCiAgICAgICAgICAgIG1vbnRoID0gbVs1XTsNCiAgICAgICAgICAgIHllYXIgPSAobVsyXS5sZW5ndGggPT0gNCkgPyBtWzJdIDogR2V0RnVsbFllYXIocGFyc2VJbnQobVszXSwgMTApKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIGlmICh2YWwuZGF0ZW9yZGVyID09ICJ5bWQiKXsNCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHZhciB5ZWFyTGFzdEV4cCA9IG5ldyBSZWdFeHAoIl5cXHMqKFxcZHsxLDJ9KShbLS9dfFxcLiA/KShcXGR7MSwyfSkoPzpcXHN8XFwyKSgoXFxkezR9KXwoXFxkezJ9KSkoPzpcXHNcdTA0MzNcXC58XFwuKT9cXHMqJCIpOw0KICAgICAgICAgICAgbSA9IG9wLm1hdGNoKHllYXJMYXN0RXhwKTsNCiAgICAgICAgICAgIGlmIChtID09IG51bGwpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh2YWwuZGF0ZW9yZGVyID09ICJtZHkiKSB7DQogICAgICAgICAgICAgICAgZGF5ID0gbVszXTsNCiAgICAgICAgICAgICAgICBtb250aCA9IG1bMV07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBkYXkgPSBtWzFdOw0KICAgICAgICAgICAgICAgIG1vbnRoID0gbVszXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHllYXIgPSAoKHR5cGVvZihtWzVdKSAhPSAidW5kZWZpbmVkIikgJiYgKG1bNV0ubGVuZ3RoID09IDQpKSA/IG1bNV0gOiBHZXRGdWxsWWVhcihwYXJzZUludChtWzZdLCAxMCkpOw0KICAgICAgICB9DQogICAgICAgIG1vbnRoIC09IDE7DQogICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSk7DQogICAgICAgIGlmICh5ZWFyIDwgMTAwKSB7DQogICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHllYXIpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAodHlwZW9mKGRhdGUpID09ICJvYmplY3QiICYmIHllYXIgPT0gZGF0ZS5nZXRGdWxsWWVhcigpICYmIG1vbnRoID09IGRhdGUuZ2V0TW9udGgoKSAmJiBkYXkgPT0gZGF0ZS5nZXREYXRlKCkpID8gZGF0ZS52YWx1ZU9mKCkgOiBudWxsOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgcmV0dXJuIG9wLnRvU3RyaW5nKCk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gVmFsaWRhdG9yQ29tcGFyZShvcGVyYW5kMSwgb3BlcmFuZDIsIG9wZXJhdG9yLCB2YWwpIHsNCiAgICB2YXIgZGF0YVR5cGUgPSB2YWwudHlwZTsNCiAgICB2YXIgb3AxLCBvcDI7DQogICAgaWYgKChvcDEgPSBWYWxpZGF0b3JDb252ZXJ0KG9wZXJhbmQxLCBkYXRhVHlwZSwgdmFsKSkgPT0gbnVsbCkNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIGlmIChvcGVyYXRvciA9PSAiRGF0YVR5cGVDaGVjayIpDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIGlmICgob3AyID0gVmFsaWRhdG9yQ29udmVydChvcGVyYW5kMiwgZGF0YVR5cGUsIHZhbCkpID09IG51bGwpDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIHN3aXRjaCAob3BlcmF0b3IpIHsNCiAgICAgICAgY2FzZSAiTm90RXF1YWwiOg0KICAgICAgICAgICAgcmV0dXJuIChvcDEgIT0gb3AyKTsNCiAgICAgICAgY2FzZSAiR3JlYXRlclRoYW4iOg0KICAgICAgICAgICAgcmV0dXJuIChvcDEgPiBvcDIpOw0KICAgICAgICBjYXNlICJHcmVhdGVyVGhhbkVxdWFsIjoNCiAgICAgICAgICAgIHJldHVybiAob3AxID49IG9wMik7DQogICAgICAgIGNhc2UgIkxlc3NUaGFuIjoNCiAgICAgICAgICAgIHJldHVybiAob3AxIDwgb3AyKTsNCiAgICAgICAgY2FzZSAiTGVzc1RoYW5FcXVhbCI6DQogICAgICAgICAgICByZXR1cm4gKG9wMSA8PSBvcDIpOw0KICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgcmV0dXJuIChvcDEgPT0gb3AyKTsNCiAgICB9DQp9DQpmdW5jdGlvbiBDb21wYXJlVmFsaWRhdG9yRXZhbHVhdGVJc1ZhbGlkKHZhbCkgew0KICAgIHZhciB2YWx1ZSA9IFZhbGlkYXRvckdldFZhbHVlKHZhbC5jb250cm9sdG92YWxpZGF0ZSk7DQogICAgaWYgKFZhbGlkYXRvclRyaW0odmFsdWUpLmxlbmd0aCA9PSAwKQ0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB2YXIgY29tcGFyZVRvID0gIiI7DQogICAgaWYgKCh0eXBlb2YodmFsLmNvbnRyb2x0b2NvbXBhcmUpICE9ICJzdHJpbmciKSB8fA0KICAgICAgICAodHlwZW9mKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHZhbC5jb250cm9sdG9jb21wYXJlKSkgPT0gInVuZGVmaW5lZCIpIHx8DQogICAgICAgIChudWxsID09IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHZhbC5jb250cm9sdG9jb21wYXJlKSkpIHsNCiAgICAgICAgaWYgKHR5cGVvZih2YWwudmFsdWV0b2NvbXBhcmUpID09ICJzdHJpbmciKSB7DQogICAgICAgICAgICBjb21wYXJlVG8gPSB2YWwudmFsdWV0b2NvbXBhcmU7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIGNvbXBhcmVUbyA9IFZhbGlkYXRvckdldFZhbHVlKHZhbC5jb250cm9sdG9jb21wYXJlKTsNCiAgICB9DQogICAgdmFyIG9wZXJhdG9yID0gIkVxdWFsIjsNCiAgICBpZiAodHlwZW9mKHZhbC5vcGVyYXRvcikgPT0gInN0cmluZyIpIHsNCiAgICAgICAgb3BlcmF0b3IgPSB2YWwub3BlcmF0b3I7DQogICAgfQ0KICAgIHJldHVybiBWYWxpZGF0b3JDb21wYXJlKHZhbHVlLCBjb21wYXJlVG8sIG9wZXJhdG9yLCB2YWwpOw0KfQ0KZnVuY3Rpb24gQ3VzdG9tVmFsaWRhdG9yRXZhbHVhdGVJc1ZhbGlkKHZhbCkgew0KICAgIHZhciB2YWx1ZSA9ICIiOw0KICAgIGlmICh0eXBlb2YodmFsLmNvbnRyb2x0b3ZhbGlkYXRlKSA9PSAic3RyaW5nIikgew0KICAgICAgICB2YWx1ZSA9IFZhbGlkYXRvckdldFZhbHVlKHZhbC5jb250cm9sdG92YWxpZGF0ZSk7DQogICAgICAgIGlmICgoVmFsaWRhdG9yVHJpbSh2YWx1ZSkubGVuZ3RoID09IDApICYmDQogICAgICAgICAgICAoKHR5cGVvZih2YWwudmFsaWRhdGVlbXB0eXRleHQpICE9ICJzdHJpbmciKSB8fCAodmFsLnZhbGlkYXRlZW1wdHl0ZXh0ICE9ICJ0cnVlIikpKSB7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICB2YXIgYXJncyA9IHsgVmFsdWU6dmFsdWUsIElzVmFsaWQ6dHJ1ZSB9Ow0KICAgIGlmICh0eXBlb2YodmFsLmNsaWVudHZhbGlkYXRpb25mdW5jdGlvbikgPT0gInN0cmluZyIpIHsNCiAgICAgICAgZXZhbCh2YWwuY2xpZW50dmFsaWRhdGlvbmZ1bmN0aW9uICsgIih2YWwsIGFyZ3MpIDsiKTsNCiAgICB9DQogICAgcmV0dXJuIGFyZ3MuSXNWYWxpZDsNCn0NCmZ1bmN0aW9uIFJlZ3VsYXJFeHByZXNzaW9uVmFsaWRhdG9yRXZhbHVhdGVJc1ZhbGlkKHZhbCkgew0KICAgIHZhciB2YWx1ZSA9IFZhbGlkYXRvckdldFZhbHVlKHZhbC5jb250cm9sdG92YWxpZGF0ZSk7DQogICAgaWYgKFZhbGlkYXRvclRyaW0odmFsdWUpLmxlbmd0aCA9PSAwKQ0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHZhbC52YWxpZGF0aW9uZXhwcmVzc2lvbik7DQogICAgdmFyIG1hdGNoZXMgPSByeC5leGVjKHZhbHVlKTsNCiAgICByZXR1cm4gKG1hdGNoZXMgIT0gbnVsbCAmJiB2YWx1ZSA9PSBtYXRjaGVzWzBdKTsNCn0NCmZ1bmN0aW9uIFZhbGlkYXRvclRyaW0ocykgew0KICAgIHZhciBtID0gcy5tYXRjaCgvXlxzKihcUysoXHMrXFMrKSopXHMqJC8pOw0KICAgIHJldHVybiAobSA9PSBudWxsKSA/ICIiIDogbVsxXTsNCn0NCmZ1bmN0aW9uIFJlcXVpcmVkRmllbGRWYWxpZGF0b3JFdmFsdWF0ZUlzVmFsaWQodmFsKSB7DQogICAgcmV0dXJuIChWYWxpZGF0b3JUcmltKFZhbGlkYXRvckdldFZhbHVlKHZhbC5jb250cm9sdG92YWxpZGF0ZSkpICE9IFZhbGlkYXRvclRyaW0odmFsLmluaXRpYWx2YWx1ZSkpDQp9DQpmdW5jdGlvbiBSYW5nZVZhbGlkYXRvckV2YWx1YXRlSXNWYWxpZCh2YWwpIHsNCiAgICB2YXIgdmFsdWUgPSBWYWxpZGF0b3JHZXRWYWx1ZSh2YWwuY29udHJvbHRvdmFsaWRhdGUpOw0KICAgIGlmIChWYWxpZGF0b3JUcmltKHZhbHVlKS5sZW5ndGggPT0gMCkNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgcmV0dXJuIChWYWxpZGF0b3JDb21wYXJlKHZhbHVlLCB2YWwubWluaW11bXZhbHVlLCAiR3JlYXRlclRoYW5FcXVhbCIsIHZhbCkgJiYNCiAgICAgICAgICAgIFZhbGlkYXRvckNvbXBhcmUodmFsdWUsIHZhbC5tYXhpbXVtdmFsdWUsICJMZXNzVGhhbkVxdWFsIiwgdmFsKSk7DQp9DQpmdW5jdGlvbiBWYWxpZGF0aW9uU3VtbWFyeU9uU3VibWl0KHZhbGlkYXRpb25Hcm91cCkgew0KICAgIGlmICh0eXBlb2YoUGFnZV9WYWxpZGF0aW9uU3VtbWFyaWVzKSA9PSAidW5kZWZpbmVkIikNCiAgICAgICAgcmV0dXJuOw0KICAgIHZhciBzdW1tYXJ5LCBzdW1zLCBzOw0KICAgIHZhciBoZWFkZXJTZXAsIGZpcnN0LCBwcmUsIHBvc3QsIGVuZDsNCiAgICBmb3IgKHN1bXMgPSAwOyBzdW1zIDwgUGFnZV9WYWxpZGF0aW9uU3VtbWFyaWVzLmxlbmd0aDsgc3VtcysrKSB7DQogICAgICAgIHN1bW1hcnkgPSBQYWdlX1ZhbGlkYXRpb25TdW1tYXJpZXNbc3Vtc107DQogICAgICAgIGlmICghc3VtbWFyeSkgY29udGludWU7DQogICAgICAgIHN1bW1hcnkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsNCiAgICAgICAgaWYgKCFQYWdlX0lzVmFsaWQgJiYgSXNWYWxpZGF0aW9uR3JvdXBNYXRjaChzdW1tYXJ5LCB2YWxpZGF0aW9uR3JvdXApKSB7DQogICAgICAgICAgICB2YXIgaTsNCiAgICAgICAgICAgIGlmIChzdW1tYXJ5LnNob3dzdW1tYXJ5ICE9ICJGYWxzZSIpIHsNCiAgICAgICAgICAgICAgICBzdW1tYXJ5LnN0eWxlLmRpc3BsYXkgPSAiIjsNCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKHN1bW1hcnkuZGlzcGxheW1vZGUpICE9ICJzdHJpbmciKSB7DQogICAgICAgICAgICAgICAgICAgIHN1bW1hcnkuZGlzcGxheW1vZGUgPSAiQnVsbGV0TGlzdCI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHN3aXRjaCAoc3VtbWFyeS5kaXNwbGF5bW9kZSkgew0KICAgICAgICAgICAgICAgICAgICBjYXNlICJMaXN0IjoNCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlclNlcCA9ICI8YnI+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gIiI7DQogICAgICAgICAgICAgICAgICAgICAgICBwcmUgPSAiIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3QgPSAiPGJyPiI7DQogICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSAiIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICJCdWxsZXRMaXN0IjoNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlclNlcCA9ICIiOw0KICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSAiPHVsPiI7DQogICAgICAgICAgICAgICAgICAgICAgICBwcmUgPSAiPGxpPiI7DQogICAgICAgICAgICAgICAgICAgICAgICBwb3N0ID0gIjwvbGk+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9ICI8L3VsPiI7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAiU2luZ2xlUGFyYWdyYXBoIjoNCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlclNlcCA9ICIgIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gIiI7DQogICAgICAgICAgICAgICAgICAgICAgICBwcmUgPSAiIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3QgPSAiICI7DQogICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSAiPGJyPiI7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcyA9ICIiOw0KICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yoc3VtbWFyeS5oZWFkZXJ0ZXh0KSA9PSAic3RyaW5nIikgew0KICAgICAgICAgICAgICAgICAgICBzICs9IHN1bW1hcnkuaGVhZGVydGV4dCArIGhlYWRlclNlcDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcyArPSBmaXJzdDsNCiAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTxQYWdlX1ZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFQYWdlX1ZhbGlkYXRvcnNbaV0uaXN2YWxpZCAmJiB0eXBlb2YoUGFnZV9WYWxpZGF0b3JzW2ldLmVycm9ybWVzc2FnZSkgPT0gInN0cmluZyIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHMgKz0gcHJlICsgUGFnZV9WYWxpZGF0b3JzW2ldLmVycm9ybWVzc2FnZSArIHBvc3Q7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcyArPSBlbmQ7DQogICAgICAgICAgICAgICAgc3VtbWFyeS5pbm5lckhUTUwgPSBzOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLDApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHN1bW1hcnkuc2hvd21lc3NhZ2Vib3ggPT0gIlRydWUiKSB7DQogICAgICAgICAgICAgICAgcyA9ICIiOw0KICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yoc3VtbWFyeS5oZWFkZXJ0ZXh0KSA9PSAic3RyaW5nIikgew0KICAgICAgICAgICAgICAgICAgICBzICs9IHN1bW1hcnkuaGVhZGVydGV4dCArICJcclxuIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdmFyIGxhc3RWYWxJbmRleCA9IFBhZ2VfVmFsaWRhdG9ycy5sZW5ndGggLSAxOw0KICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPD1sYXN0VmFsSW5kZXg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoIVBhZ2VfVmFsaWRhdG9yc1tpXS5pc3ZhbGlkICYmIHR5cGVvZihQYWdlX1ZhbGlkYXRvcnNbaV0uZXJyb3JtZXNzYWdlKSA9PSAic3RyaW5nIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdW1tYXJ5LmRpc3BsYXltb2RlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiTGlzdCI6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgKz0gUGFnZV9WYWxpZGF0b3JzW2ldLmVycm9ybWVzc2FnZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBsYXN0VmFsSW5kZXgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgKz0gIlxyXG4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIkJ1bGxldExpc3QiOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgKz0gIi0gIiArIFBhZ2VfVmFsaWRhdG9yc1tpXS5lcnJvcm1lc3NhZ2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgbGFzdFZhbEluZGV4KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICs9ICJcclxuIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJTaW5nbGVQYXJhZ3JhcGgiOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICs9IFBhZ2VfVmFsaWRhdG9yc1tpXS5lcnJvcm1lc3NhZ2UgKyAiICI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGFsZXJ0KHMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQ0KaWYgKHdpbmRvdy5qUXVlcnkpIHsNCiAgICAoZnVuY3Rpb24gKCQpIHsNCiAgICAgICAgdmFyIGRhdGFWYWxpZGF0aW9uQXR0cmlidXRlID0gImRhdGEtdmFsIiwNCiAgICAgICAgICAgIGRhdGFWYWxpZGF0aW9uU3VtbWFyeUF0dHJpYnV0ZSA9ICJkYXRhLXZhbHN1bW1hcnkiLA0KICAgICAgICAgICAgbm9ybWFsaXplZEF0dHJpYnV0ZXMgPSB7IHZhbGlkYXRpb25ncm91cDogInZhbGlkYXRpb25Hcm91cCIsIGZvY3Vzb25lcnJvcjogImZvY3VzT25FcnJvciIgfTsNCiAgICAgICAgZnVuY3Rpb24gZ2V0QXR0cmlidXRlc1dpdGhQcmVmaXgoZWxlbWVudCwgcHJlZml4KSB7DQogICAgICAgICAgICB2YXIgaSwNCiAgICAgICAgICAgICAgICBhdHRyaWJ1dGUsDQogICAgICAgICAgICAgICAgbGlzdCA9IHt9LA0KICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBlbGVtZW50LmF0dHJpYnV0ZXMsDQogICAgICAgICAgICAgICAgbGVuZ3RoID0gYXR0cmlidXRlcy5sZW5ndGgsDQogICAgICAgICAgICAgICAgcHJlZml4TGVuZ3RoID0gcHJlZml4Lmxlbmd0aDsNCiAgICAgICAgICAgIHByZWZpeCA9IHByZWZpeC50b0xvd2VyQ2FzZSgpOw0KICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgYXR0cmlidXRlID0gYXR0cmlidXRlc1tpXTsNCiAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlLnNwZWNpZmllZCAmJiBhdHRyaWJ1dGUubmFtZS5zdWJzdHIoMCwgcHJlZml4TGVuZ3RoKS50b0xvd2VyQ2FzZSgpID09PSBwcmVmaXgpIHsNCiAgICAgICAgICAgICAgICAgICAgbGlzdFthdHRyaWJ1dGUubmFtZS5zdWJzdHIocHJlZml4TGVuZ3RoKV0gPSBhdHRyaWJ1dGUudmFsdWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGxpc3Q7DQogICAgICAgIH0NCiAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplS2V5KGtleSkgew0KICAgICAgICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7DQogICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZEF0dHJpYnV0ZXNba2V5XSA9PT0gdW5kZWZpbmVkID8ga2V5IDogbm9ybWFsaXplZEF0dHJpYnV0ZXNba2V5XTsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBhZGRWYWxpZGF0aW9uRXhwYW5kbyhlbGVtZW50KSB7DQogICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGdldEF0dHJpYnV0ZXNXaXRoUHJlZml4KGVsZW1lbnQsIGRhdGFWYWxpZGF0aW9uQXR0cmlidXRlICsgIi0iKTsNCiAgICAgICAgICAgICQuZWFjaChhdHRyaWJ1dGVzLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgew0KICAgICAgICAgICAgICAgIGVsZW1lbnRbbm9ybWFsaXplS2V5KGtleSldID0gdmFsdWU7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBkaXNwb3NlKGVsZW1lbnQpIHsNCiAgICAgICAgICAgIHZhciBpbmRleCA9ICQuaW5BcnJheShlbGVtZW50LCBQYWdlX1ZhbGlkYXRvcnMpOw0KICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHsNCiAgICAgICAgICAgICAgICBQYWdlX1ZhbGlkYXRvcnMuc3BsaWNlKGluZGV4LCAxKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBhZGROb3JtYWxpemVkQXR0cmlidXRlKG5hbWUsIG5vcm1hbGl6ZWROYW1lKSB7DQogICAgICAgICAgICBub3JtYWxpemVkQXR0cmlidXRlc1tuYW1lLnRvTG93ZXJDYXNlKCldID0gbm9ybWFsaXplZE5hbWU7DQogICAgICAgIH0NCiAgICAgICAgZnVuY3Rpb24gcGFyc2VTcGVjaWZpY0F0dHJpYnV0ZShzZWxlY3RvciwgYXR0cmlidXRlLCB2YWxpZGF0b3JzQXJyYXkpIHsNCiAgICAgICAgICAgIHJldHVybiAkKHNlbGVjdG9yKS5maW5kKCJbIiArIGF0dHJpYnV0ZSArICI9J3RydWUnXSIpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7DQogICAgICAgICAgICAgICAgYWRkVmFsaWRhdGlvbkV4cGFuZG8oZWxlbWVudCk7DQogICAgICAgICAgICAgICAgZWxlbWVudC5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeyBkaXNwb3NlKGVsZW1lbnQpOyBlbGVtZW50LmRpc3Bvc2UgPSBudWxsOyB9Ow0KICAgICAgICAgICAgICAgIGlmICgkLmluQXJyYXkoZWxlbWVudCwgdmFsaWRhdG9yc0FycmF5KSA9PT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yc0FycmF5LnB1c2goZWxlbWVudCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkubGVuZ3RoOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIHBhcnNlKHNlbGVjdG9yKSB7DQogICAgICAgICAgICB2YXIgbGVuZ3RoID0gcGFyc2VTcGVjaWZpY0F0dHJpYnV0ZShzZWxlY3RvciwgZGF0YVZhbGlkYXRpb25BdHRyaWJ1dGUsIFBhZ2VfVmFsaWRhdG9ycyk7DQogICAgICAgICAgICBsZW5ndGggKz0gcGFyc2VTcGVjaWZpY0F0dHJpYnV0ZShzZWxlY3RvciwgZGF0YVZhbGlkYXRpb25TdW1tYXJ5QXR0cmlidXRlLCBQYWdlX1ZhbGlkYXRpb25TdW1tYXJpZXMpOw0KICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBsb2FkVmFsaWRhdG9ycygpIHsNCiAgICAgICAgICAgIGlmICh0eXBlb2YgKFZhbGlkYXRvck9uTG9hZCkgPT09ICJmdW5jdGlvbiIpIHsNCiAgICAgICAgICAgICAgICBWYWxpZGF0b3JPbkxvYWQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0eXBlb2YgKFZhbGlkYXRvck9uU3VibWl0KSA9PT0gInVuZGVmaW5lZCIpIHsNCiAgICAgICAgICAgICAgICB3aW5kb3cuVmFsaWRhdG9yT25TdWJtaXQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBQYWdlX1ZhbGlkYXRpb25BY3RpdmUgPyBWYWxpZGF0b3JDb21tb25PblN1Ym1pdCgpIDogdHJ1ZTsNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIHJlZ2lzdGVyVXBkYXRlUGFuZWwoKSB7DQogICAgICAgICAgICBpZiAod2luZG93LlN5cyAmJiBTeXMuV2ViRm9ybXMgJiYgU3lzLldlYkZvcm1zLlBhZ2VSZXF1ZXN0TWFuYWdlcikgew0KICAgICAgICAgICAgICAgIHZhciBwcm0gPSBTeXMuV2ViRm9ybXMuUGFnZVJlcXVlc3RNYW5hZ2VyLmdldEluc3RhbmNlKCksDQogICAgICAgICAgICAgICAgICAgIHBvc3RCYWNrRWxlbWVudCwgZW5kUmVxdWVzdEhhbmRsZXI7DQogICAgICAgICAgICAgICAgaWYgKHBybS5nZXRfaXNJbkFzeW5jUG9zdEJhY2soKSkgew0KICAgICAgICAgICAgICAgICAgICBlbmRSZXF1ZXN0SGFuZGxlciA9IGZ1bmN0aW9uIChzZW5kZXIsIGFyZ3MpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZShkb2N1bWVudCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkVmFsaWRhdG9ycygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgcHJtLnJlbW92ZV9lbmRSZXF1ZXN0KGVuZFJlcXVlc3RIYW5kbGVyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFJlcXVlc3RIYW5kbGVyID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICAgICAgcHJtLmFkZF9lbmRSZXF1ZXN0KGVuZFJlcXVlc3RIYW5kbGVyKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcHJtLmFkZF9iZWdpblJlcXVlc3QoZnVuY3Rpb24gKHNlbmRlciwgYXJncykgew0KICAgICAgICAgICAgICAgICAgICBwb3N0QmFja0VsZW1lbnQgPSBhcmdzLmdldF9wb3N0QmFja0VsZW1lbnQoKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBwcm0uYWRkX3BhZ2VMb2FkZWQoZnVuY3Rpb24gKHNlbmRlciwgYXJncykgew0KICAgICAgICAgICAgICAgICAgICB2YXIgaSwgcGFuZWxzLCB2YWxGb3VuZCA9IDA7DQogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHBvc3RCYWNrRWxlbWVudCkgPT09ICJ1bmRlZmluZWQiKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgcGFuZWxzID0gYXJncy5nZXRfcGFuZWxzVXBkYXRlZCgpOw0KICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YWxGb3VuZCArPSBwYXJzZShwYW5lbHNbaV0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHBhbmVscyA9IGFyZ3MuZ2V0X3BhbmVsc0NyZWF0ZWQoKTsNCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsRm91bmQgKz0gcGFyc2UocGFuZWxzW2ldKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAodmFsRm91bmQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRWYWxpZGF0b3JzKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmICh0eXBlb2YgKFBhZ2VfVmFsaWRhdG9ycykgPT09ICJ1bmRlZmluZWQiKSB7DQogICAgICAgICAgICAgICAgd2luZG93LlBhZ2VfVmFsaWRhdG9ycyA9IFtdOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHR5cGVvZiAoUGFnZV9WYWxpZGF0aW9uU3VtbWFyaWVzKSA9PT0gInVuZGVmaW5lZCIpIHsNCiAgICAgICAgICAgICAgICB3aW5kb3cuUGFnZV9WYWxpZGF0aW9uU3VtbWFyaWVzID0gW107DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAodHlwZW9mIChQYWdlX1ZhbGlkYXRpb25BY3RpdmUpID09PSAidW5kZWZpbmVkIikgew0KICAgICAgICAgICAgICAgIHdpbmRvdy5QYWdlX1ZhbGlkYXRpb25BY3RpdmUgPSBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQuV2ViRm9ybVZhbGlkYXRvciA9IHsNCiAgICAgICAgICAgICAgICBhZGROb3JtYWxpemVkQXR0cmlidXRlOiBhZGROb3JtYWxpemVkQXR0cmlidXRlLA0KICAgICAgICAgICAgICAgIHBhcnNlOiBwYXJzZQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGlmIChwYXJzZShkb2N1bWVudCkpIHsNCiAgICAgICAgICAgICAgICBsb2FkVmFsaWRhdG9ycygpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmVnaXN0ZXJVcGRhdGVQYW5lbCgpOw0KICAgICAgICB9KTsNCiAgICB9IChqUXVlcnkpKTsNCn0=">
  </script>
  <script class="sf-hidden"
    src="data:application/x-javascript;base64,77u/Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBDb3B5cmlnaHQgKEMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gTWljcm9zb2Z0QWpheC5qcw0KRnVuY3Rpb24uX190eXBlTmFtZT0iRnVuY3Rpb24iO0Z1bmN0aW9uLl9fY2xhc3M9dHJ1ZTtGdW5jdGlvbi5jcmVhdGVDYWxsYmFjaz1mdW5jdGlvbihiLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7aWYoZT4wKXt2YXIgZD1bXTtmb3IodmFyIGM9MDtjPGU7YysrKWRbY109YXJndW1lbnRzW2NdO2RbZV09YTtyZXR1cm4gYi5hcHBseSh0aGlzLGQpfXJldHVybiBiLmNhbGwodGhpcyxhKX19O0Z1bmN0aW9uLmNyZWF0ZURlbGVnYXRlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGIuYXBwbHkoYSxhcmd1bWVudHMpfX07RnVuY3Rpb24uZW1wdHlGdW5jdGlvbj1GdW5jdGlvbi5lbXB0eU1ldGhvZD1mdW5jdGlvbigpe307RnVuY3Rpb24udmFsaWRhdGVQYXJhbWV0ZXJzPWZ1bmN0aW9uKGMsYixhKXtyZXR1cm4gRnVuY3Rpb24uX3ZhbGlkYXRlUGFyYW1zKGMsYixhKX07RnVuY3Rpb24uX3ZhbGlkYXRlUGFyYW1zPWZ1bmN0aW9uKGcsZSxjKXt2YXIgYSxkPWUubGVuZ3RoO2M9Y3x8dHlwZW9mIGM9PT0idW5kZWZpbmVkIjthPUZ1bmN0aW9uLl92YWxpZGF0ZVBhcmFtZXRlckNvdW50KGcsZSxjKTtpZihhKXthLnBvcFN0YWNrRnJhbWUoKTtyZXR1cm4gYX1mb3IodmFyIGI9MCxpPWcubGVuZ3RoO2I8aTtiKyspe3ZhciBmPWVbTWF0aC5taW4oYixkLTEpXSxoPWYubmFtZTtpZihmLnBhcmFtZXRlckFycmF5KWgrPSJbIisoYi1kKzEpKyJdIjtlbHNlIGlmKCFjJiZiPj1kKWJyZWFrO2E9RnVuY3Rpb24uX3ZhbGlkYXRlUGFyYW1ldGVyKGdbYl0sZixoKTtpZihhKXthLnBvcFN0YWNrRnJhbWUoKTtyZXR1cm4gYX19cmV0dXJuIG51bGx9O0Z1bmN0aW9uLl92YWxpZGF0ZVBhcmFtZXRlckNvdW50PWZ1bmN0aW9uKGosZCxpKXt2YXIgYSxjLGI9ZC5sZW5ndGgsZT1qLmxlbmd0aDtpZihlPGIpe3ZhciBmPWI7Zm9yKGE9MDthPGI7YSsrKXt2YXIgZz1kW2FdO2lmKGcub3B0aW9uYWx8fGcucGFyYW1ldGVyQXJyYXkpZi0tfWlmKGU8ZiljPXRydWV9ZWxzZSBpZihpJiZlPmIpe2M9dHJ1ZTtmb3IoYT0wO2E8YjthKyspaWYoZFthXS5wYXJhbWV0ZXJBcnJheSl7Yz1mYWxzZTticmVha319aWYoYyl7dmFyIGg9RXJyb3IucGFyYW1ldGVyQ291bnQoKTtoLnBvcFN0YWNrRnJhbWUoKTtyZXR1cm4gaH1yZXR1cm4gbnVsbH07RnVuY3Rpb24uX3ZhbGlkYXRlUGFyYW1ldGVyPWZ1bmN0aW9uKGMsYSxoKXt2YXIgYixnPWEudHlwZSxsPSEhYS5pbnRlZ2VyLGs9ISFhLmRvbUVsZW1lbnQsbT0hIWEubWF5QmVOdWxsO2I9RnVuY3Rpb24uX3ZhbGlkYXRlUGFyYW1ldGVyVHlwZShjLGcsbCxrLG0saCk7aWYoYil7Yi5wb3BTdGFja0ZyYW1lKCk7cmV0dXJuIGJ9dmFyIGU9YS5lbGVtZW50VHlwZSxmPSEhYS5lbGVtZW50TWF5QmVOdWxsO2lmKGc9PT1BcnJheSYmdHlwZW9mIGMhPT0idW5kZWZpbmVkIiYmYyE9PW51bGwmJihlfHwhZikpe3ZhciBqPSEhYS5lbGVtZW50SW50ZWdlcixpPSEhYS5lbGVtZW50RG9tRWxlbWVudDtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIG49Y1tkXTtiPUZ1bmN0aW9uLl92YWxpZGF0ZVBhcmFtZXRlclR5cGUobixlLGosaSxmLGgrIlsiK2QrIl0iKTtpZihiKXtiLnBvcFN0YWNrRnJhbWUoKTtyZXR1cm4gYn19fXJldHVybiBudWxsfTtGdW5jdGlvbi5fdmFsaWRhdGVQYXJhbWV0ZXJUeXBlPWZ1bmN0aW9uKGIsYyxrLGosaCxkKXt2YXIgYSxnO2lmKHR5cGVvZiBiPT09InVuZGVmaW5lZCIpaWYoaClyZXR1cm4gbnVsbDtlbHNle2E9RXJyb3IuYXJndW1lbnRVbmRlZmluZWQoZCk7YS5wb3BTdGFja0ZyYW1lKCk7cmV0dXJuIGF9aWYoYj09PW51bGwpaWYoaClyZXR1cm4gbnVsbDtlbHNle2E9RXJyb3IuYXJndW1lbnROdWxsKGQpO2EucG9wU3RhY2tGcmFtZSgpO3JldHVybiBhfWlmKGMmJmMuX19lbnVtKXtpZih0eXBlb2YgYiE9PSJudW1iZXIiKXthPUVycm9yLmFyZ3VtZW50VHlwZShkLE9iamVjdC5nZXRUeXBlKGIpLGMpO2EucG9wU3RhY2tGcmFtZSgpO3JldHVybiBhfWlmKGIlMT09PTApe3ZhciBlPWMucHJvdG90eXBlO2lmKCFjLl9fZmxhZ3N8fGI9PT0wKXtmb3IoZyBpbiBlKWlmKGVbZ109PT1iKXJldHVybiBudWxsfWVsc2V7dmFyIGk9Yjtmb3IoZyBpbiBlKXt2YXIgZj1lW2ddO2lmKGY9PT0wKWNvbnRpbnVlO2lmKChmJmIpPT09ZilpLT1mO2lmKGk9PT0wKXJldHVybiBudWxsfX19YT1FcnJvci5hcmd1bWVudE91dE9mUmFuZ2UoZCxiLFN0cmluZy5mb3JtYXQoU3lzLlJlcy5lbnVtSW52YWxpZFZhbHVlLGIsYy5nZXROYW1lKCkpKTthLnBvcFN0YWNrRnJhbWUoKTtyZXR1cm4gYX1pZihqJiYoIVN5cy5faXNEb21FbGVtZW50KGIpfHxiLm5vZGVUeXBlPT09Mykpe2E9RXJyb3IuYXJndW1lbnQoZCxTeXMuUmVzLmFyZ3VtZW50RG9tRWxlbWVudCk7YS5wb3BTdGFja0ZyYW1lKCk7cmV0dXJuIGF9aWYoYyYmIVN5cy5faXNJbnN0YW5jZU9mVHlwZShjLGIpKXthPUVycm9yLmFyZ3VtZW50VHlwZShkLE9iamVjdC5nZXRUeXBlKGIpLGMpO2EucG9wU3RhY2tGcmFtZSgpO3JldHVybiBhfWlmKGM9PT1OdW1iZXImJmspaWYoYiUxIT09MCl7YT1FcnJvci5hcmd1bWVudE91dE9mUmFuZ2UoZCxiLFN5cy5SZXMuYXJndW1lbnRJbnRlZ2VyKTthLnBvcFN0YWNrRnJhbWUoKTtyZXR1cm4gYX1yZXR1cm4gbnVsbH07RXJyb3IuX190eXBlTmFtZT0iRXJyb3IiO0Vycm9yLl9fY2xhc3M9dHJ1ZTtFcnJvci5jcmVhdGU9ZnVuY3Rpb24oZCxiKXt2YXIgYT1uZXcgRXJyb3IoZCk7YS5tZXNzYWdlPWQ7aWYoYilmb3IodmFyIGMgaW4gYilhW2NdPWJbY107YS5wb3BTdGFja0ZyYW1lKCk7cmV0dXJuIGF9O0Vycm9yLmFyZ3VtZW50PWZ1bmN0aW9uKGEsYyl7dmFyIGI9IlN5cy5Bcmd1bWVudEV4Y2VwdGlvbjogIisoYz9jOlN5cy5SZXMuYXJndW1lbnQpO2lmKGEpYis9IlxuIitTdHJpbmcuZm9ybWF0KFN5cy5SZXMucGFyYW1OYW1lLGEpO3ZhciBkPUVycm9yLmNyZWF0ZShiLHtuYW1lOiJTeXMuQXJndW1lbnRFeGNlcHRpb24iLHBhcmFtTmFtZTphfSk7ZC5wb3BTdGFja0ZyYW1lKCk7cmV0dXJuIGR9O0Vycm9yLmFyZ3VtZW50TnVsbD1mdW5jdGlvbihhLGMpe3ZhciBiPSJTeXMuQXJndW1lbnROdWxsRXhjZXB0aW9uOiAiKyhjP2M6U3lzLlJlcy5hcmd1bWVudE51bGwpO2lmKGEpYis9IlxuIitTdHJpbmcuZm9ybWF0KFN5cy5SZXMucGFyYW1OYW1lLGEpO3ZhciBkPUVycm9yLmNyZWF0ZShiLHtuYW1lOiJTeXMuQXJndW1lbnROdWxsRXhjZXB0aW9uIixwYXJhbU5hbWU6YX0pO2QucG9wU3RhY2tGcmFtZSgpO3JldHVybiBkfTtFcnJvci5hcmd1bWVudE91dE9mUmFuZ2U9ZnVuY3Rpb24oYyxhLGQpe3ZhciBiPSJTeXMuQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uOiAiKyhkP2Q6U3lzLlJlcy5hcmd1bWVudE91dE9mUmFuZ2UpO2lmKGMpYis9IlxuIitTdHJpbmcuZm9ybWF0KFN5cy5SZXMucGFyYW1OYW1lLGMpO2lmKHR5cGVvZiBhIT09InVuZGVmaW5lZCImJmEhPT1udWxsKWIrPSJcbiIrU3RyaW5nLmZvcm1hdChTeXMuUmVzLmFjdHVhbFZhbHVlLGEpO3ZhciBlPUVycm9yLmNyZWF0ZShiLHtuYW1lOiJTeXMuQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uIixwYXJhbU5hbWU6YyxhY3R1YWxWYWx1ZTphfSk7ZS5wb3BTdGFja0ZyYW1lKCk7cmV0dXJuIGV9O0Vycm9yLmFyZ3VtZW50VHlwZT1mdW5jdGlvbihkLGMsYixlKXt2YXIgYT0iU3lzLkFyZ3VtZW50VHlwZUV4Y2VwdGlvbjogIjtpZihlKWErPWU7ZWxzZSBpZihjJiZiKWErPVN0cmluZy5mb3JtYXQoU3lzLlJlcy5hcmd1bWVudFR5cGVXaXRoVHlwZXMsYy5nZXROYW1lKCksYi5nZXROYW1lKCkpO2Vsc2UgYSs9U3lzLlJlcy5hcmd1bWVudFR5cGU7aWYoZClhKz0iXG4iK1N0cmluZy5mb3JtYXQoU3lzLlJlcy5wYXJhbU5hbWUsZCk7dmFyIGY9RXJyb3IuY3JlYXRlKGEse25hbWU6IlN5cy5Bcmd1bWVudFR5cGVFeGNlcHRpb24iLHBhcmFtTmFtZTpkLGFjdHVhbFR5cGU6YyxleHBlY3RlZFR5cGU6Yn0pO2YucG9wU3RhY2tGcmFtZSgpO3JldHVybiBmfTtFcnJvci5hcmd1bWVudFVuZGVmaW5lZD1mdW5jdGlvbihhLGMpe3ZhciBiPSJTeXMuQXJndW1lbnRVbmRlZmluZWRFeGNlcHRpb246ICIrKGM/YzpTeXMuUmVzLmFyZ3VtZW50VW5kZWZpbmVkKTtpZihhKWIrPSJcbiIrU3RyaW5nLmZvcm1hdChTeXMuUmVzLnBhcmFtTmFtZSxhKTt2YXIgZD1FcnJvci5jcmVhdGUoYix7bmFtZToiU3lzLkFyZ3VtZW50VW5kZWZpbmVkRXhjZXB0aW9uIixwYXJhbU5hbWU6YX0pO2QucG9wU3RhY2tGcmFtZSgpO3JldHVybiBkfTtFcnJvci5mb3JtYXQ9ZnVuY3Rpb24oYSl7dmFyIGM9IlN5cy5Gb3JtYXRFeGNlcHRpb246ICIrKGE/YTpTeXMuUmVzLmZvcm1hdCksYj1FcnJvci5jcmVhdGUoYyx7bmFtZToiU3lzLkZvcm1hdEV4Y2VwdGlvbiJ9KTtiLnBvcFN0YWNrRnJhbWUoKTtyZXR1cm4gYn07RXJyb3IuaW52YWxpZE9wZXJhdGlvbj1mdW5jdGlvbihhKXt2YXIgYz0iU3lzLkludmFsaWRPcGVyYXRpb25FeGNlcHRpb246ICIrKGE/YTpTeXMuUmVzLmludmFsaWRPcGVyYXRpb24pLGI9RXJyb3IuY3JlYXRlKGMse25hbWU6IlN5cy5JbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uIn0pO2IucG9wU3RhY2tGcmFtZSgpO3JldHVybiBifTtFcnJvci5ub3RJbXBsZW1lbnRlZD1mdW5jdGlvbihhKXt2YXIgYz0iU3lzLk5vdEltcGxlbWVudGVkRXhjZXB0aW9uOiAiKyhhP2E6U3lzLlJlcy5ub3RJbXBsZW1lbnRlZCksYj1FcnJvci5jcmVhdGUoYyx7bmFtZToiU3lzLk5vdEltcGxlbWVudGVkRXhjZXB0aW9uIn0pO2IucG9wU3RhY2tGcmFtZSgpO3JldHVybiBifTtFcnJvci5wYXJhbWV0ZXJDb3VudD1mdW5jdGlvbihhKXt2YXIgYz0iU3lzLlBhcmFtZXRlckNvdW50RXhjZXB0aW9uOiAiKyhhP2E6U3lzLlJlcy5wYXJhbWV0ZXJDb3VudCksYj1FcnJvci5jcmVhdGUoYyx7bmFtZToiU3lzLlBhcmFtZXRlckNvdW50RXhjZXB0aW9uIn0pO2IucG9wU3RhY2tGcmFtZSgpO3JldHVybiBifTtFcnJvci5wcm90b3R5cGUucG9wU3RhY2tGcmFtZT1mdW5jdGlvbigpe2lmKHR5cGVvZiB0aGlzLnN0YWNrPT09InVuZGVmaW5lZCJ8fHRoaXMuc3RhY2s9PT1udWxsfHx0eXBlb2YgdGhpcy5maWxlTmFtZT09PSJ1bmRlZmluZWQifHx0aGlzLmZpbGVOYW1lPT09bnVsbHx8dHlwZW9mIHRoaXMubGluZU51bWJlcj09PSJ1bmRlZmluZWQifHx0aGlzLmxpbmVOdW1iZXI9PT1udWxsKXJldHVybjt2YXIgYT10aGlzLnN0YWNrLnNwbGl0KCJcbiIpLGM9YVswXSxlPXRoaXMuZmlsZU5hbWUrIjoiK3RoaXMubGluZU51bWJlcjt3aGlsZSh0eXBlb2YgYyE9PSJ1bmRlZmluZWQiJiZjIT09bnVsbCYmYy5pbmRleE9mKGUpPT09LTEpe2Euc2hpZnQoKTtjPWFbMF19dmFyIGQ9YVsxXTtpZih0eXBlb2YgZD09PSJ1bmRlZmluZWQifHxkPT09bnVsbClyZXR1cm47dmFyIGI9ZC5tYXRjaCgvQCguKik6KFxkKykkLyk7aWYodHlwZW9mIGI9PT0idW5kZWZpbmVkInx8Yj09PW51bGwpcmV0dXJuO3RoaXMuZmlsZU5hbWU9YlsxXTt0aGlzLmxpbmVOdW1iZXI9cGFyc2VJbnQoYlsyXSk7YS5zaGlmdCgpO3RoaXMuc3RhY2s9YS5qb2luKCJcbiIpfTtPYmplY3QuX190eXBlTmFtZT0iT2JqZWN0IjtPYmplY3QuX19jbGFzcz10cnVlO09iamVjdC5nZXRUeXBlPWZ1bmN0aW9uKGIpe3ZhciBhPWIuY29uc3RydWN0b3I7aWYoIWF8fHR5cGVvZiBhIT09ImZ1bmN0aW9uInx8IWEuX190eXBlTmFtZXx8YS5fX3R5cGVOYW1lPT09Ik9iamVjdCIpcmV0dXJuIE9iamVjdDtyZXR1cm4gYX07T2JqZWN0LmdldFR5cGVOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBPYmplY3QuZ2V0VHlwZShhKS5nZXROYW1lKCl9O1N0cmluZy5fX3R5cGVOYW1lPSJTdHJpbmciO1N0cmluZy5fX2NsYXNzPXRydWU7U3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zdWJzdHIodGhpcy5sZW5ndGgtYS5sZW5ndGgpPT09YX07U3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnN1YnN0cigwLGEubGVuZ3RoKT09PWF9O1N0cmluZy5wcm90b3R5cGUudHJpbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX07U3RyaW5nLnByb3RvdHlwZS50cmltRW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVwbGFjZSgvXHMrJC8sIiIpfTtTdHJpbmcucHJvdG90eXBlLnRyaW1TdGFydD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoL15ccysvLCIiKX07U3RyaW5nLmZvcm1hdD1mdW5jdGlvbigpe3JldHVybiBTdHJpbmcuX3RvRm9ybWF0dGVkU3RyaW5nKGZhbHNlLGFyZ3VtZW50cyl9O1N0cmluZy5fdG9Gb3JtYXR0ZWRTdHJpbmc9ZnVuY3Rpb24obCxqKXt2YXIgYz0iIixlPWpbMF07Zm9yKHZhciBhPTA7dHJ1ZTspe3ZhciBmPWUuaW5kZXhPZigieyIsYSksZD1lLmluZGV4T2YoIn0iLGEpO2lmKGY8MCYmZDwwKXtjKz1lLnNsaWNlKGEpO2JyZWFrfWlmKGQ+MCYmKGQ8Znx8ZjwwKSl7Yys9ZS5zbGljZShhLGQrMSk7YT1kKzI7Y29udGludWV9Yys9ZS5zbGljZShhLGYpO2E9ZisxO2lmKGUuY2hhckF0KGEpPT09InsiKXtjKz0ieyI7YSsrO2NvbnRpbnVlfWlmKGQ8MClicmVhazt2YXIgaD1lLnN1YnN0cmluZyhhLGQpLGc9aC5pbmRleE9mKCI6Iiksaz1wYXJzZUludChnPDA/aDpoLnN1YnN0cmluZygwLGcpLDEwKSsxLGk9ZzwwPyIiOmguc3Vic3RyaW5nKGcrMSksYj1qW2tdO2lmKHR5cGVvZiBiPT09InVuZGVmaW5lZCJ8fGI9PT1udWxsKWI9IiI7aWYoYi50b0Zvcm1hdHRlZFN0cmluZyljKz1iLnRvRm9ybWF0dGVkU3RyaW5nKGkpO2Vsc2UgaWYobCYmYi5sb2NhbGVGb3JtYXQpYys9Yi5sb2NhbGVGb3JtYXQoaSk7ZWxzZSBpZihiLmZvcm1hdCljKz1iLmZvcm1hdChpKTtlbHNlIGMrPWIudG9TdHJpbmcoKTthPWQrMX1yZXR1cm4gY307Qm9vbGVhbi5fX3R5cGVOYW1lPSJCb29sZWFuIjtCb29sZWFuLl9fY2xhc3M9dHJ1ZTtCb29sZWFuLnBhcnNlPWZ1bmN0aW9uKGIpe3ZhciBhPWIudHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoYT09PSJmYWxzZSIpcmV0dXJuIGZhbHNlO2lmKGE9PT0idHJ1ZSIpcmV0dXJuIHRydWV9O0RhdGUuX190eXBlTmFtZT0iRGF0ZSI7RGF0ZS5fX2NsYXNzPXRydWU7TnVtYmVyLl9fdHlwZU5hbWU9Ik51bWJlciI7TnVtYmVyLl9fY2xhc3M9dHJ1ZTtSZWdFeHAuX190eXBlTmFtZT0iUmVnRXhwIjtSZWdFeHAuX19jbGFzcz10cnVlO2lmKCF3aW5kb3cpdGhpcy53aW5kb3c9dGhpczt3aW5kb3cuVHlwZT1GdW5jdGlvbjtUeXBlLnByb3RvdHlwZS5jYWxsQmFzZU1ldGhvZD1mdW5jdGlvbihhLGQsYil7dmFyIGM9U3lzLl9nZXRCYXNlTWV0aG9kKHRoaXMsYSxkKTtpZighYilyZXR1cm4gYy5hcHBseShhKTtlbHNlIHJldHVybiBjLmFwcGx5KGEsYil9O1R5cGUucHJvdG90eXBlLmdldEJhc2VNZXRob2Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gU3lzLl9nZXRCYXNlTWV0aG9kKHRoaXMsYSxiKX07VHlwZS5wcm90b3R5cGUuZ2V0QmFzZVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIHRoaXMuX19iYXNlVHlwZT09PSJ1bmRlZmluZWQiP251bGw6dGhpcy5fX2Jhc2VUeXBlfTtUeXBlLnByb3RvdHlwZS5nZXRJbnRlcmZhY2VzPWZ1bmN0aW9uKCl7dmFyIGE9W10sYj10aGlzO3doaWxlKGIpe3ZhciBjPWIuX19pbnRlcmZhY2VzO2lmKGMpZm9yKHZhciBkPTAsZj1jLmxlbmd0aDtkPGY7ZCsrKXt2YXIgZT1jW2RdO2lmKCFBcnJheS5jb250YWlucyhhLGUpKWFbYS5sZW5ndGhdPWV9Yj1iLl9fYmFzZVR5cGV9cmV0dXJuIGF9O1R5cGUucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIHRoaXMuX190eXBlTmFtZT09PSJ1bmRlZmluZWQiPyIiOnRoaXMuX190eXBlTmFtZX07VHlwZS5wcm90b3R5cGUuaW1wbGVtZW50c0ludGVyZmFjZT1mdW5jdGlvbihkKXt0aGlzLnJlc29sdmVJbmhlcml0YW5jZSgpO3ZhciBjPWQuZ2V0TmFtZSgpLGE9dGhpcy5fX2ludGVyZmFjZUNhY2hlO2lmKGEpe3ZhciBlPWFbY107aWYodHlwZW9mIGUhPT0idW5kZWZpbmVkIilyZXR1cm4gZX1lbHNlIGE9dGhpcy5fX2ludGVyZmFjZUNhY2hlPXt9O3ZhciBiPXRoaXM7d2hpbGUoYil7dmFyIGY9Yi5fX2ludGVyZmFjZXM7aWYoZilpZihBcnJheS5pbmRleE9mKGYsZCkhPT0tMSlyZXR1cm4gYVtjXT10cnVlO2I9Yi5fX2Jhc2VUeXBlfXJldHVybiBhW2NdPWZhbHNlfTtUeXBlLnByb3RvdHlwZS5pbmhlcml0c0Zyb209ZnVuY3Rpb24oYil7dGhpcy5yZXNvbHZlSW5oZXJpdGFuY2UoKTt2YXIgYT10aGlzLl9fYmFzZVR5cGU7d2hpbGUoYSl7aWYoYT09PWIpcmV0dXJuIHRydWU7YT1hLl9fYmFzZVR5cGV9cmV0dXJuIGZhbHNlfTtUeXBlLnByb3RvdHlwZS5pbml0aWFsaXplQmFzZT1mdW5jdGlvbihhLGIpe3RoaXMucmVzb2x2ZUluaGVyaXRhbmNlKCk7aWYodGhpcy5fX2Jhc2VUeXBlKWlmKCFiKXRoaXMuX19iYXNlVHlwZS5hcHBseShhKTtlbHNlIHRoaXMuX19iYXNlVHlwZS5hcHBseShhLGIpO3JldHVybiBhfTtUeXBlLnByb3RvdHlwZS5pc0ltcGxlbWVudGVkQnk9ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PT0idW5kZWZpbmVkInx8YT09PW51bGwpcmV0dXJuIGZhbHNlO3ZhciBiPU9iamVjdC5nZXRUeXBlKGEpO3JldHVybiAhIShiLmltcGxlbWVudHNJbnRlcmZhY2UmJmIuaW1wbGVtZW50c0ludGVyZmFjZSh0aGlzKSl9O1R5cGUucHJvdG90eXBlLmlzSW5zdGFuY2VPZlR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuIFN5cy5faXNJbnN0YW5jZU9mVHlwZSh0aGlzLGEpfTtUeXBlLnByb3RvdHlwZS5yZWdpc3RlckNsYXNzPWZ1bmN0aW9uKGMsYixkKXt0aGlzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10aGlzO3RoaXMuX190eXBlTmFtZT1jO3RoaXMuX19jbGFzcz10cnVlO2lmKGIpe3RoaXMuX19iYXNlVHlwZT1iO3RoaXMuX19iYXNlUHJvdG90eXBlUGVuZGluZz10cnVlfVN5cy5fX3VwcGVyQ2FzZVR5cGVzW2MudG9VcHBlckNhc2UoKV09dGhpcztpZihkKXt0aGlzLl9faW50ZXJmYWNlcz1bXTtmb3IodmFyIGE9MixmPWFyZ3VtZW50cy5sZW5ndGg7YTxmO2ErKyl7dmFyIGU9YXJndW1lbnRzW2FdO3RoaXMuX19pbnRlcmZhY2VzLnB1c2goZSl9fXJldHVybiB0aGlzfTtUeXBlLnByb3RvdHlwZS5yZWdpc3RlckludGVyZmFjZT1mdW5jdGlvbihhKXtTeXMuX191cHBlckNhc2VUeXBlc1thLnRvVXBwZXJDYXNlKCldPXRoaXM7dGhpcy5wcm90b3R5cGUuY29uc3RydWN0b3I9dGhpczt0aGlzLl9fdHlwZU5hbWU9YTt0aGlzLl9faW50ZXJmYWNlPXRydWU7cmV0dXJuIHRoaXN9O1R5cGUucHJvdG90eXBlLnJlc29sdmVJbmhlcml0YW5jZT1mdW5jdGlvbigpe2lmKHRoaXMuX19iYXNlUHJvdG90eXBlUGVuZGluZyl7dmFyIGI9dGhpcy5fX2Jhc2VUeXBlO2IucmVzb2x2ZUluaGVyaXRhbmNlKCk7Zm9yKHZhciBhIGluIGIucHJvdG90eXBlKXt2YXIgYz1iLnByb3RvdHlwZVthXTtpZighdGhpcy5wcm90b3R5cGVbYV0pdGhpcy5wcm90b3R5cGVbYV09Y31kZWxldGUgdGhpcy5fX2Jhc2VQcm90b3R5cGVQZW5kaW5nfX07VHlwZS5nZXRSb290TmFtZXNwYWNlcz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5jbG9uZShTeXMuX19yb290TmFtZXNwYWNlcyl9O1R5cGUuaXNDbGFzcz1mdW5jdGlvbihhKXtpZih0eXBlb2YgYT09PSJ1bmRlZmluZWQifHxhPT09bnVsbClyZXR1cm4gZmFsc2U7cmV0dXJuICEhYS5fX2NsYXNzfTtUeXBlLmlzSW50ZXJmYWNlPWZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT09InVuZGVmaW5lZCJ8fGE9PT1udWxsKXJldHVybiBmYWxzZTtyZXR1cm4gISFhLl9faW50ZXJmYWNlfTtUeXBlLmlzTmFtZXNwYWNlPWZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT09InVuZGVmaW5lZCJ8fGE9PT1udWxsKXJldHVybiBmYWxzZTtyZXR1cm4gISFhLl9fbmFtZXNwYWNlfTtUeXBlLnBhcnNlPWZ1bmN0aW9uKHR5cGVOYW1lLG5zKXt2YXIgZm47aWYobnMpe2ZuPVN5cy5fX3VwcGVyQ2FzZVR5cGVzW25zLmdldE5hbWUoKS50b1VwcGVyQ2FzZSgpKyIuIit0eXBlTmFtZS50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gZm58fG51bGx9aWYoIXR5cGVOYW1lKXJldHVybiBudWxsO2lmKCFUeXBlLl9faHRDbGFzc2VzKVR5cGUuX19odENsYXNzZXM9e307Zm49VHlwZS5fX2h0Q2xhc3Nlc1t0eXBlTmFtZV07aWYoIWZuKXtmbj1ldmFsKHR5cGVOYW1lKTtUeXBlLl9faHRDbGFzc2VzW3R5cGVOYW1lXT1mbn1yZXR1cm4gZm59O1R5cGUucmVnaXN0ZXJOYW1lc3BhY2U9ZnVuY3Rpb24oZSl7dmFyIGQ9d2luZG93LGM9ZS5zcGxpdCgiLiIpO2Zvcih2YXIgYj0wO2I8Yy5sZW5ndGg7YisrKXt2YXIgZj1jW2JdLGE9ZFtmXTtpZighYSlhPWRbZl09e307aWYoIWEuX19uYW1lc3BhY2Upe2lmKGI9PT0wJiZlIT09IlN5cyIpU3lzLl9fcm9vdE5hbWVzcGFjZXNbU3lzLl9fcm9vdE5hbWVzcGFjZXMubGVuZ3RoXT1hO2EuX19uYW1lc3BhY2U9dHJ1ZTthLl9fdHlwZU5hbWU9Yy5zbGljZSgwLGIrMSkuam9pbigiLiIpO2EuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdHlwZU5hbWV9fWQ9YX19O1R5cGUuX2NoZWNrRGVwZW5kZW5jeT1mdW5jdGlvbihjLGEpe3ZhciBkPVR5cGUuX3JlZ2lzdGVyU2NyaXB0Ll9zY3JpcHRzLGI9ZD8hIWRbY106ZmFsc2U7aWYodHlwZW9mIGEhPT0idW5kZWZpbmVkIiYmIWIpdGhyb3cgRXJyb3IuaW52YWxpZE9wZXJhdGlvbihTdHJpbmcuZm9ybWF0KFN5cy5SZXMucmVxdWlyZWRTY3JpcHRSZWZlcmVuY2VOb3RJbmNsdWRlZCxhLGMpKTtyZXR1cm4gYn07VHlwZS5fcmVnaXN0ZXJTY3JpcHQ9ZnVuY3Rpb24oYSxjKXt2YXIgYj1UeXBlLl9yZWdpc3RlclNjcmlwdC5fc2NyaXB0cztpZighYilUeXBlLl9yZWdpc3RlclNjcmlwdC5fc2NyaXB0cz1iPXt9O2lmKGJbYV0pdGhyb3cgRXJyb3IuaW52YWxpZE9wZXJhdGlvbihTdHJpbmcuZm9ybWF0KFN5cy5SZXMuc2NyaXB0QWxyZWFkeUxvYWRlZCxhKSk7YlthXT10cnVlO2lmKGMpZm9yKHZhciBkPTAsZj1jLmxlbmd0aDtkPGY7ZCsrKXt2YXIgZT1jW2RdO2lmKCFUeXBlLl9jaGVja0RlcGVuZGVuY3koZSkpdGhyb3cgRXJyb3IuaW52YWxpZE9wZXJhdGlvbihTdHJpbmcuZm9ybWF0KFN5cy5SZXMuc2NyaXB0RGVwZW5kZW5jeU5vdEZvdW5kLGEsZSkpfX07VHlwZS5yZWdpc3Rlck5hbWVzcGFjZSgiU3lzIik7U3lzLl9fdXBwZXJDYXNlVHlwZXM9e307U3lzLl9fcm9vdE5hbWVzcGFjZXM9W1N5c107U3lzLl9pc0luc3RhbmNlT2ZUeXBlPWZ1bmN0aW9uKGMsYil7aWYodHlwZW9mIGI9PT0idW5kZWZpbmVkInx8Yj09PW51bGwpcmV0dXJuIGZhbHNlO2lmKGIgaW5zdGFuY2VvZiBjKXJldHVybiB0cnVlO3ZhciBhPU9iamVjdC5nZXRUeXBlKGIpO3JldHVybiAhIShhPT09Yyl8fGEuaW5oZXJpdHNGcm9tJiZhLmluaGVyaXRzRnJvbShjKXx8YS5pbXBsZW1lbnRzSW50ZXJmYWNlJiZhLmltcGxlbWVudHNJbnRlcmZhY2UoYyl9O1N5cy5fZ2V0QmFzZU1ldGhvZD1mdW5jdGlvbihkLGUsYyl7dmFyIGI9ZC5nZXRCYXNlVHlwZSgpO2lmKGIpe3ZhciBhPWIucHJvdG90eXBlW2NdO3JldHVybiBhIGluc3RhbmNlb2YgRnVuY3Rpb24/YTpudWxsfXJldHVybiBudWxsfTtTeXMuX2lzRG9tRWxlbWVudD1mdW5jdGlvbihhKXt2YXIgYz1mYWxzZTtpZih0eXBlb2YgYS5ub2RlVHlwZSE9PSJudW1iZXIiKXt2YXIgYj1hLm93bmVyRG9jdW1lbnR8fGEuZG9jdW1lbnR8fGE7aWYoYiE9YSl7dmFyIGQ9Yi5kZWZhdWx0Vmlld3x8Yi5wYXJlbnRXaW5kb3c7Yz1kIT1hfWVsc2UgYz10eXBlb2YgYi5ib2R5PT09InVuZGVmaW5lZCJ9cmV0dXJuICFjfTtBcnJheS5fX3R5cGVOYW1lPSJBcnJheSI7QXJyYXkuX19jbGFzcz10cnVlO0FycmF5LmFkZD1BcnJheS5lbnF1ZXVlPWZ1bmN0aW9uKGEsYil7YVthLmxlbmd0aF09Yn07QXJyYXkuYWRkUmFuZ2U9ZnVuY3Rpb24oYSxiKXthLnB1c2guYXBwbHkoYSxiKX07QXJyYXkuY2xlYXI9ZnVuY3Rpb24oYSl7YS5sZW5ndGg9MH07QXJyYXkuY2xvbmU9ZnVuY3Rpb24oYSl7aWYoYS5sZW5ndGg9PT0xKXJldHVybiBbYVswXV07ZWxzZSByZXR1cm4gQXJyYXkuYXBwbHkobnVsbCxhKX07QXJyYXkuY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gU3lzLl9pbmRleE9mKGEsYik+PTB9O0FycmF5LmRlcXVldWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc2hpZnQoKX07QXJyYXkuZm9yRWFjaD1mdW5jdGlvbihiLGUsZCl7Zm9yKHZhciBhPTAsZj1iLmxlbmd0aDthPGY7YSsrKXt2YXIgYz1iW2FdO2lmKHR5cGVvZiBjIT09InVuZGVmaW5lZCIpZS5jYWxsKGQsYyxhLGIpfX07QXJyYXkuaW5kZXhPZj1mdW5jdGlvbihhLGMsYil7cmV0dXJuIFN5cy5faW5kZXhPZihhLGMsYil9O0FycmF5Lmluc2VydD1mdW5jdGlvbihhLGIsYyl7YS5zcGxpY2UoYiwwLGMpfTtBcnJheS5wYXJzZT1mdW5jdGlvbih2YWx1ZSl7aWYoIXZhbHVlKXJldHVybiBbXTtyZXR1cm4gZXZhbCh2YWx1ZSl9O0FycmF5LnJlbW92ZT1mdW5jdGlvbihiLGMpe3ZhciBhPVN5cy5faW5kZXhPZihiLGMpO2lmKGE+PTApYi5zcGxpY2UoYSwxKTtyZXR1cm4gYT49MH07QXJyYXkucmVtb3ZlQXQ9ZnVuY3Rpb24oYSxiKXthLnNwbGljZShiLDEpfTtTeXMuX2luZGV4T2Y9ZnVuY3Rpb24oZCxlLGEpe2lmKHR5cGVvZiBlPT09InVuZGVmaW5lZCIpcmV0dXJuIC0xO3ZhciBjPWQubGVuZ3RoO2lmKGMhPT0wKXthPWEtMDtpZihpc05hTihhKSlhPTA7ZWxzZXtpZihpc0Zpbml0ZShhKSlhPWEtYSUxO2lmKGE8MClhPU1hdGgubWF4KDAsYythKX1mb3IodmFyIGI9YTtiPGM7YisrKWlmKHR5cGVvZiBkW2JdIT09InVuZGVmaW5lZCImJmRbYl09PT1lKXJldHVybiBifXJldHVybiAtMX07VHlwZS5fcmVnaXN0ZXJTY3JpcHQuX3NjcmlwdHM9eyJNaWNyb3NvZnRBamF4Q29yZS5qcyI6dHJ1ZSwiTWljcm9zb2Z0QWpheEdsb2JhbGl6YXRpb24uanMiOnRydWUsIk1pY3Jvc29mdEFqYXhTZXJpYWxpemF0aW9uLmpzIjp0cnVlLCJNaWNyb3NvZnRBamF4Q29tcG9uZW50TW9kZWwuanMiOnRydWUsIk1pY3Jvc29mdEFqYXhIaXN0b3J5LmpzIjp0cnVlLCJNaWNyb3NvZnRBamF4TmV0d29yay5qcyI6dHJ1ZSwiTWljcm9zb2Z0QWpheFdlYlNlcnZpY2VzLmpzIjp0cnVlfTtTeXMuSURpc3Bvc2FibGU9ZnVuY3Rpb24oKXt9O1N5cy5JRGlzcG9zYWJsZS5wcm90b3R5cGU9e307U3lzLklEaXNwb3NhYmxlLnJlZ2lzdGVySW50ZXJmYWNlKCJTeXMuSURpc3Bvc2FibGUiKTtTeXMuU3RyaW5nQnVpbGRlcj1mdW5jdGlvbihhKXt0aGlzLl9wYXJ0cz10eXBlb2YgYSE9PSJ1bmRlZmluZWQiJiZhIT09bnVsbCYmYSE9PSIiP1thLnRvU3RyaW5nKCldOltdO3RoaXMuX3ZhbHVlPXt9O3RoaXMuX2xlbj0wfTtTeXMuU3RyaW5nQnVpbGRlci5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihhKXt0aGlzLl9wYXJ0c1t0aGlzLl9wYXJ0cy5sZW5ndGhdPWF9LGFwcGVuZExpbmU6ZnVuY3Rpb24oYSl7dGhpcy5fcGFydHNbdGhpcy5fcGFydHMubGVuZ3RoXT10eXBlb2YgYT09PSJ1bmRlZmluZWQifHxhPT09bnVsbHx8YT09PSIiPyJcclxuIjphKyJcclxuIn0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLl9wYXJ0cz1bXTt0aGlzLl92YWx1ZT17fTt0aGlzLl9sZW49MH0saXNFbXB0eTpmdW5jdGlvbigpe2lmKHRoaXMuX3BhcnRzLmxlbmd0aD09PTApcmV0dXJuIHRydWU7cmV0dXJuIHRoaXMudG9TdHJpbmcoKT09PSIifSx0b1N0cmluZzpmdW5jdGlvbihhKXthPWF8fCIiO3ZhciBiPXRoaXMuX3BhcnRzO2lmKHRoaXMuX2xlbiE9PWIubGVuZ3RoKXt0aGlzLl92YWx1ZT17fTt0aGlzLl9sZW49Yi5sZW5ndGh9dmFyIGQ9dGhpcy5fdmFsdWU7aWYodHlwZW9mIGRbYV09PT0idW5kZWZpbmVkIil7aWYoYSE9PSIiKWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7KWlmKHR5cGVvZiBiW2NdPT09InVuZGVmaW5lZCJ8fGJbY109PT0iInx8YltjXT09PW51bGwpYi5zcGxpY2UoYywxKTtlbHNlIGMrKztkW2FdPXRoaXMuX3BhcnRzLmpvaW4oYSl9cmV0dXJuIGRbYV19fTtTeXMuU3RyaW5nQnVpbGRlci5yZWdpc3RlckNsYXNzKCJTeXMuU3RyaW5nQnVpbGRlciIpO1N5cy5Ccm93c2VyPXt9O1N5cy5Ccm93c2VyLkludGVybmV0RXhwbG9yZXI9e307U3lzLkJyb3dzZXIuRmlyZWZveD17fTtTeXMuQnJvd3Nlci5TYWZhcmk9e307U3lzLkJyb3dzZXIuT3BlcmE9e307U3lzLkJyb3dzZXIuYWdlbnQ9bnVsbDtTeXMuQnJvd3Nlci5oYXNEZWJ1Z2dlclN0YXRlbWVudD1mYWxzZTtTeXMuQnJvd3Nlci5uYW1lPW5hdmlnYXRvci5hcHBOYW1lO1N5cy5Ccm93c2VyLnZlcnNpb249cGFyc2VGbG9hdChuYXZpZ2F0b3IuYXBwVmVyc2lvbik7U3lzLkJyb3dzZXIuZG9jdW1lbnRNb2RlPTA7aWYobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCIgTVNJRSAiKT4tMSl7U3lzLkJyb3dzZXIuYWdlbnQ9U3lzLkJyb3dzZXIuSW50ZXJuZXRFeHBsb3JlcjtTeXMuQnJvd3Nlci52ZXJzaW9uPXBhcnNlRmxvYXQobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvTVNJRSAoXGQrXC5cZCspLylbMV0pO2lmKFN5cy5Ccm93c2VyLnZlcnNpb24+PTgpaWYoZG9jdW1lbnQuZG9jdW1lbnRNb2RlPj03KVN5cy5Ccm93c2VyLmRvY3VtZW50TW9kZT1kb2N1bWVudC5kb2N1bWVudE1vZGU7U3lzLkJyb3dzZXIuaGFzRGVidWdnZXJTdGF0ZW1lbnQ9dHJ1ZX1lbHNlIGlmKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiIEZpcmVmb3gvIik+LTEpe1N5cy5Ccm93c2VyLmFnZW50PVN5cy5Ccm93c2VyLkZpcmVmb3g7U3lzLkJyb3dzZXIudmVyc2lvbj1wYXJzZUZsb2F0KG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0ZpcmVmb3hcLyhcZCtcLlxkKykvKVsxXSk7U3lzLkJyb3dzZXIubmFtZT0iRmlyZWZveCI7U3lzLkJyb3dzZXIuaGFzRGVidWdnZXJTdGF0ZW1lbnQ9dHJ1ZX1lbHNlIGlmKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiIEFwcGxlV2ViS2l0LyIpPi0xKXtTeXMuQnJvd3Nlci5hZ2VudD1TeXMuQnJvd3Nlci5TYWZhcmk7U3lzLkJyb3dzZXIudmVyc2lvbj1wYXJzZUZsb2F0KG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XC8oXGQrKFwuXGQrKT8pLylbMV0pO1N5cy5Ccm93c2VyLm5hbWU9IlNhZmFyaSJ9ZWxzZSBpZihuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk9wZXJhLyIpPi0xKVN5cy5Ccm93c2VyLmFnZW50PVN5cy5Ccm93c2VyLk9wZXJhO1N5cy5FdmVudEFyZ3M9ZnVuY3Rpb24oKXt9O1N5cy5FdmVudEFyZ3MucmVnaXN0ZXJDbGFzcygiU3lzLkV2ZW50QXJncyIpO1N5cy5FdmVudEFyZ3MuRW1wdHk9bmV3IFN5cy5FdmVudEFyZ3M7U3lzLkNhbmNlbEV2ZW50QXJncz1mdW5jdGlvbigpe1N5cy5DYW5jZWxFdmVudEFyZ3MuaW5pdGlhbGl6ZUJhc2UodGhpcyk7dGhpcy5fY2FuY2VsPWZhbHNlfTtTeXMuQ2FuY2VsRXZlbnRBcmdzLnByb3RvdHlwZT17Z2V0X2NhbmNlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW5jZWx9LHNldF9jYW5jZWw6ZnVuY3Rpb24oYSl7dGhpcy5fY2FuY2VsPWF9fTtTeXMuQ2FuY2VsRXZlbnRBcmdzLnJlZ2lzdGVyQ2xhc3MoIlN5cy5DYW5jZWxFdmVudEFyZ3MiLFN5cy5FdmVudEFyZ3MpO1R5cGUucmVnaXN0ZXJOYW1lc3BhY2UoIlN5cy5VSSIpO1N5cy5fRGVidWc9ZnVuY3Rpb24oKXt9O1N5cy5fRGVidWcucHJvdG90eXBlPXtfYXBwZW5kQ29uc29sZTpmdW5jdGlvbihhKXtpZih0eXBlb2YgRGVidWchPT0idW5kZWZpbmVkIiYmRGVidWcud3JpdGVsbilEZWJ1Zy53cml0ZWxuKGEpO2lmKHdpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cpd2luZG93LmNvbnNvbGUubG9nKGEpO2lmKHdpbmRvdy5vcGVyYSl3aW5kb3cub3BlcmEucG9zdEVycm9yKGEpO2lmKHdpbmRvdy5kZWJ1Z1NlcnZpY2Upd2luZG93LmRlYnVnU2VydmljZS50cmFjZShhKX0sX2FwcGVuZFRyYWNlOmZ1bmN0aW9uKGIpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUcmFjZUNvbnNvbGUiKTtpZihhJiZhLnRhZ05hbWUudG9VcHBlckNhc2UoKT09PSJURVhUQVJFQSIpYS52YWx1ZSs9YisiXG4ifSxhc3NlcnQ6ZnVuY3Rpb24oYyxhLGIpe2lmKCFjKXthPWImJnRoaXMuYXNzZXJ0LmNhbGxlcj9TdHJpbmcuZm9ybWF0KFN5cy5SZXMuYXNzZXJ0RmFpbGVkQ2FsbGVyLGEsdGhpcy5hc3NlcnQuY2FsbGVyKTpTdHJpbmcuZm9ybWF0KFN5cy5SZXMuYXNzZXJ0RmFpbGVkLGEpO2lmKGNvbmZpcm0oU3RyaW5nLmZvcm1hdChTeXMuUmVzLmJyZWFrSW50b0RlYnVnZ2VyLGEpKSl0aGlzLmZhaWwoYSl9fSxjbGVhclRyYWNlOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRyYWNlQ29uc29sZSIpO2lmKGEmJmEudGFnTmFtZS50b1VwcGVyQ2FzZSgpPT09IlRFWFRBUkVBIilhLnZhbHVlPSIifSxmYWlsOmZ1bmN0aW9uKG1lc3NhZ2Upe3RoaXMuX2FwcGVuZENvbnNvbGUobWVzc2FnZSk7aWYoU3lzLkJyb3dzZXIuaGFzRGVidWdnZXJTdGF0ZW1lbnQpZXZhbCgiZGVidWdnZXIiKX0sdHJhY2U6ZnVuY3Rpb24oYSl7dGhpcy5fYXBwZW5kQ29uc29sZShhKTt0aGlzLl9hcHBlbmRUcmFjZShhKX0sdHJhY2VEdW1wOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fdHJhY2VEdW1wKGEsYix0cnVlKX0sX3RyYWNlRHVtcDpmdW5jdGlvbihhLGMsZixiLGQpe2M9Yz9jOiJ0cmFjZUR1bXAiO2I9Yj9iOiIiO2lmKGE9PT1udWxsKXt0aGlzLnRyYWNlKGIrYysiOiBudWxsIik7cmV0dXJufXN3aXRjaCh0eXBlb2YgYSl7Y2FzZSAidW5kZWZpbmVkIjp0aGlzLnRyYWNlKGIrYysiOiBVbmRlZmluZWQiKTticmVhaztjYXNlICJudW1iZXIiOmNhc2UgInN0cmluZyI6Y2FzZSAiYm9vbGVhbiI6dGhpcy50cmFjZShiK2MrIjogIithKTticmVhaztkZWZhdWx0OmlmKERhdGUuaXNJbnN0YW5jZU9mVHlwZShhKXx8UmVnRXhwLmlzSW5zdGFuY2VPZlR5cGUoYSkpe3RoaXMudHJhY2UoYitjKyI6ICIrYS50b1N0cmluZygpKTticmVha31pZighZClkPVtdO2Vsc2UgaWYoQXJyYXkuY29udGFpbnMoZCxhKSl7dGhpcy50cmFjZShiK2MrIjogLi4uIik7cmV0dXJufUFycmF5LmFkZChkLGEpO2lmKGE9PXdpbmRvd3x8YT09PWRvY3VtZW50fHx3aW5kb3cuSFRNTEVsZW1lbnQmJmEgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8dHlwZW9mIGEubm9kZU5hbWU9PT0ic3RyaW5nIil7dmFyIGs9YS50YWdOYW1lP2EudGFnTmFtZToiRG9tRWxlbWVudCI7aWYoYS5pZClrKz0iIC0gIithLmlkO3RoaXMudHJhY2UoYitjKyIgeyIraysifSIpfWVsc2V7dmFyIGk9T2JqZWN0LmdldFR5cGVOYW1lKGEpO3RoaXMudHJhY2UoYitjKyh0eXBlb2YgaT09PSJzdHJpbmciPyIgeyIraSsifSI6IiIpKTtpZihiPT09IiJ8fGYpe2IrPSIgICAgIjt2YXIgZSxqLGwsZyxoO2lmKEFycmF5LmlzSW5zdGFuY2VPZlR5cGUoYSkpe2o9YS5sZW5ndGg7Zm9yKGU9MDtlPGo7ZSsrKXRoaXMuX3RyYWNlRHVtcChhW2VdLCJbIitlKyJdIixmLGIsZCl9ZWxzZSBmb3IoZyBpbiBhKXtoPWFbZ107aWYoIUZ1bmN0aW9uLmlzSW5zdGFuY2VPZlR5cGUoaCkpdGhpcy5fdHJhY2VEdW1wKGgsZyxmLGIsZCl9fX1BcnJheS5yZW1vdmUoZCxhKX19fTtTeXMuX0RlYnVnLnJlZ2lzdGVyQ2xhc3MoIlN5cy5fRGVidWciKTtTeXMuRGVidWc9bmV3IFN5cy5fRGVidWc7U3lzLkRlYnVnLmlzRGVidWc9ZmFsc2U7ZnVuY3Rpb24gU3lzJEVudW0kcGFyc2UoYyxlKXt2YXIgYSxiLGk7aWYoZSl7YT10aGlzLl9fbG93ZXJDYXNlVmFsdWVzO2lmKCFhKXt0aGlzLl9fbG93ZXJDYXNlVmFsdWVzPWE9e307dmFyIGc9dGhpcy5wcm90b3R5cGU7Zm9yKHZhciBmIGluIGcpYVtmLnRvTG93ZXJDYXNlKCldPWdbZl19fWVsc2UgYT10aGlzLnByb3RvdHlwZTtpZighdGhpcy5fX2ZsYWdzKXtpPWU/Yy50b0xvd2VyQ2FzZSgpOmM7Yj1hW2kudHJpbSgpXTtpZih0eXBlb2YgYiE9PSJudW1iZXIiKXRocm93IEVycm9yLmFyZ3VtZW50KCJ2YWx1ZSIsU3RyaW5nLmZvcm1hdChTeXMuUmVzLmVudW1JbnZhbGlkVmFsdWUsYyx0aGlzLl9fdHlwZU5hbWUpKTtyZXR1cm4gYn1lbHNle3ZhciBoPShlP2MudG9Mb3dlckNhc2UoKTpjKS5zcGxpdCgiLCIpLGo9MDtmb3IodmFyIGQ9aC5sZW5ndGgtMTtkPj0wO2QtLSl7dmFyIGs9aFtkXS50cmltKCk7Yj1hW2tdO2lmKHR5cGVvZiBiIT09Im51bWJlciIpdGhyb3cgRXJyb3IuYXJndW1lbnQoInZhbHVlIixTdHJpbmcuZm9ybWF0KFN5cy5SZXMuZW51bUludmFsaWRWYWx1ZSxjLnNwbGl0KCIsIilbZF0udHJpbSgpLHRoaXMuX190eXBlTmFtZSkpO2p8PWJ9cmV0dXJuIGp9fWZ1bmN0aW9uIFN5cyRFbnVtJHRvU3RyaW5nKGMpe2lmKHR5cGVvZiBjPT09InVuZGVmaW5lZCJ8fGM9PT1udWxsKXJldHVybiB0aGlzLl9fc3RyaW5nO3ZhciBkPXRoaXMucHJvdG90eXBlLGE7aWYoIXRoaXMuX19mbGFnc3x8Yz09PTApe2ZvcihhIGluIGQpaWYoZFthXT09PWMpcmV0dXJuIGF9ZWxzZXt2YXIgYj10aGlzLl9fc29ydGVkVmFsdWVzO2lmKCFiKXtiPVtdO2ZvcihhIGluIGQpYltiLmxlbmd0aF09e2tleTphLHZhbHVlOmRbYV19O2Iuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnZhbHVlLWIudmFsdWV9KTt0aGlzLl9fc29ydGVkVmFsdWVzPWJ9dmFyIGU9W10sZz1jO2ZvcihhPWIubGVuZ3RoLTE7YT49MDthLS0pe3ZhciBoPWJbYV0sZj1oLnZhbHVlO2lmKGY9PT0wKWNvbnRpbnVlO2lmKChmJmMpPT09Zil7ZVtlLmxlbmd0aF09aC5rZXk7Zy09ZjtpZihnPT09MClicmVha319aWYoZS5sZW5ndGgmJmc9PT0wKXJldHVybiBlLnJldmVyc2UoKS5qb2luKCIsICIpfXJldHVybiAiIn1UeXBlLnByb3RvdHlwZS5yZWdpc3RlckVudW09ZnVuY3Rpb24oYixjKXtTeXMuX191cHBlckNhc2VUeXBlc1tiLnRvVXBwZXJDYXNlKCldPXRoaXM7Zm9yKHZhciBhIGluIHRoaXMucHJvdG90eXBlKXRoaXNbYV09dGhpcy5wcm90b3R5cGVbYV07dGhpcy5fX3R5cGVOYW1lPWI7dGhpcy5wYXJzZT1TeXMkRW51bSRwYXJzZTt0aGlzLl9fc3RyaW5nPXRoaXMudG9TdHJpbmcoKTt0aGlzLnRvU3RyaW5nPVN5cyRFbnVtJHRvU3RyaW5nO3RoaXMuX19mbGFncz1jO3RoaXMuX19lbnVtPXRydWV9O1R5cGUuaXNFbnVtPWZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT09InVuZGVmaW5lZCJ8fGE9PT1udWxsKXJldHVybiBmYWxzZTtyZXR1cm4gISFhLl9fZW51bX07VHlwZS5pc0ZsYWdzPWZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT09InVuZGVmaW5lZCJ8fGE9PT1udWxsKXJldHVybiBmYWxzZTtyZXR1cm4gISFhLl9fZmxhZ3N9O1N5cy5Db2xsZWN0aW9uQ2hhbmdlPWZ1bmN0aW9uKGUsYSxjLGIsZCl7dGhpcy5hY3Rpb249ZTtpZihhKWlmKCEoYSBpbnN0YW5jZW9mIEFycmF5KSlhPVthXTt0aGlzLm5ld0l0ZW1zPWF8fG51bGw7aWYodHlwZW9mIGMhPT0ibnVtYmVyIiljPS0xO3RoaXMubmV3U3RhcnRpbmdJbmRleD1jO2lmKGIpaWYoIShiIGluc3RhbmNlb2YgQXJyYXkpKWI9W2JdO3RoaXMub2xkSXRlbXM9Ynx8bnVsbDtpZih0eXBlb2YgZCE9PSJudW1iZXIiKWQ9LTE7dGhpcy5vbGRTdGFydGluZ0luZGV4PWR9O1N5cy5Db2xsZWN0aW9uQ2hhbmdlLnJlZ2lzdGVyQ2xhc3MoIlN5cy5Db2xsZWN0aW9uQ2hhbmdlIik7U3lzLk5vdGlmeUNvbGxlY3Rpb25DaGFuZ2VkQWN0aW9uPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3Iubm90SW1wbGVtZW50ZWQoKX07U3lzLk5vdGlmeUNvbGxlY3Rpb25DaGFuZ2VkQWN0aW9uLnByb3RvdHlwZT17YWRkOjAscmVtb3ZlOjEscmVzZXQ6Mn07U3lzLk5vdGlmeUNvbGxlY3Rpb25DaGFuZ2VkQWN0aW9uLnJlZ2lzdGVyRW51bSgiU3lzLk5vdGlmeUNvbGxlY3Rpb25DaGFuZ2VkQWN0aW9uIik7U3lzLk5vdGlmeUNvbGxlY3Rpb25DaGFuZ2VkRXZlbnRBcmdzPWZ1bmN0aW9uKGEpe3RoaXMuX2NoYW5nZXM9YTtTeXMuTm90aWZ5Q29sbGVjdGlvbkNoYW5nZWRFdmVudEFyZ3MuaW5pdGlhbGl6ZUJhc2UodGhpcyl9O1N5cy5Ob3RpZnlDb2xsZWN0aW9uQ2hhbmdlZEV2ZW50QXJncy5wcm90b3R5cGU9e2dldF9jaGFuZ2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXN8fFtdfX07U3lzLk5vdGlmeUNvbGxlY3Rpb25DaGFuZ2VkRXZlbnRBcmdzLnJlZ2lzdGVyQ2xhc3MoIlN5cy5Ob3RpZnlDb2xsZWN0aW9uQ2hhbmdlZEV2ZW50QXJncyIsU3lzLkV2ZW50QXJncyk7U3lzLk9ic2VydmVyPWZ1bmN0aW9uKCl7fTtTeXMuT2JzZXJ2ZXIucmVnaXN0ZXJDbGFzcygiU3lzLk9ic2VydmVyIik7U3lzLk9ic2VydmVyLm1ha2VPYnNlcnZhYmxlPWZ1bmN0aW9uKGEpe3ZhciBjPWEgaW5zdGFuY2VvZiBBcnJheSxiPVN5cy5PYnNlcnZlcjtpZihhLnNldFZhbHVlPT09Yi5fb2JzZXJ2ZU1ldGhvZHMuc2V0VmFsdWUpcmV0dXJuIGE7Yi5fYWRkTWV0aG9kcyhhLGIuX29ic2VydmVNZXRob2RzKTtpZihjKWIuX2FkZE1ldGhvZHMoYSxiLl9hcnJheU1ldGhvZHMpO3JldHVybiBhfTtTeXMuT2JzZXJ2ZXIuX2FkZE1ldGhvZHM9ZnVuY3Rpb24oYyxiKXtmb3IodmFyIGEgaW4gYiljW2FdPWJbYV19O1N5cy5PYnNlcnZlci5fYWRkRXZlbnRIYW5kbGVyPWZ1bmN0aW9uKGMsYSxiKXtTeXMuT2JzZXJ2ZXIuX2dldENvbnRleHQoYyx0cnVlKS5ldmVudHMuX2FkZEhhbmRsZXIoYSxiKX07U3lzLk9ic2VydmVyLmFkZEV2ZW50SGFuZGxlcj1mdW5jdGlvbihjLGEsYil7U3lzLk9ic2VydmVyLl9hZGRFdmVudEhhbmRsZXIoYyxhLGIpfTtTeXMuT2JzZXJ2ZXIuX3JlbW92ZUV2ZW50SGFuZGxlcj1mdW5jdGlvbihjLGEsYil7U3lzLk9ic2VydmVyLl9nZXRDb250ZXh0KGMsdHJ1ZSkuZXZlbnRzLl9yZW1vdmVIYW5kbGVyKGEsYil9O1N5cy5PYnNlcnZlci5yZW1vdmVFdmVudEhhbmRsZXI9ZnVuY3Rpb24oYyxhLGIpe1N5cy5PYnNlcnZlci5fcmVtb3ZlRXZlbnRIYW5kbGVyKGMsYSxiKX07U3lzLk9ic2VydmVyLnJhaXNlRXZlbnQ9ZnVuY3Rpb24oYixlLGQpe3ZhciBjPVN5cy5PYnNlcnZlci5fZ2V0Q29udGV4dChiKTtpZighYylyZXR1cm47dmFyIGE9Yy5ldmVudHMuZ2V0SGFuZGxlcihlKTtpZihhKWEoYixkKX07U3lzLk9ic2VydmVyLmFkZFByb3BlcnR5Q2hhbmdlZD1mdW5jdGlvbihiLGEpe1N5cy5PYnNlcnZlci5fYWRkRXZlbnRIYW5kbGVyKGIsInByb3BlcnR5Q2hhbmdlZCIsYSl9O1N5cy5PYnNlcnZlci5yZW1vdmVQcm9wZXJ0eUNoYW5nZWQ9ZnVuY3Rpb24oYixhKXtTeXMuT2JzZXJ2ZXIuX3JlbW92ZUV2ZW50SGFuZGxlcihiLCJwcm9wZXJ0eUNoYW5nZWQiLGEpfTtTeXMuT2JzZXJ2ZXIuYmVnaW5VcGRhdGU9ZnVuY3Rpb24oYSl7U3lzLk9ic2VydmVyLl9nZXRDb250ZXh0KGEsdHJ1ZSkudXBkYXRpbmc9dHJ1ZX07U3lzLk9ic2VydmVyLmVuZFVwZGF0ZT1mdW5jdGlvbihiKXt2YXIgYT1TeXMuT2JzZXJ2ZXIuX2dldENvbnRleHQoYik7aWYoIWF8fCFhLnVwZGF0aW5nKXJldHVybjthLnVwZGF0aW5nPWZhbHNlO3ZhciBkPWEuZGlydHk7YS5kaXJ0eT1mYWxzZTtpZihkKXtpZihiIGluc3RhbmNlb2YgQXJyYXkpe3ZhciBjPWEuY2hhbmdlczthLmNoYW5nZXM9bnVsbDtTeXMuT2JzZXJ2ZXIucmFpc2VDb2xsZWN0aW9uQ2hhbmdlZChiLGMpfVN5cy5PYnNlcnZlci5yYWlzZVByb3BlcnR5Q2hhbmdlZChiLCIiKX19O1N5cy5PYnNlcnZlci5pc1VwZGF0aW5nPWZ1bmN0aW9uKGIpe3ZhciBhPVN5cy5PYnNlcnZlci5fZ2V0Q29udGV4dChiKTtyZXR1cm4gYT9hLnVwZGF0aW5nOmZhbHNlfTtTeXMuT2JzZXJ2ZXIuX3NldFZhbHVlPWZ1bmN0aW9uKGEsaixnKXt2YXIgYixmLGs9YSxkPWouc3BsaXQoIi4iKTtmb3IodmFyIGk9MCxtPWQubGVuZ3RoLTE7aTxtO2krKyl7dmFyIGw9ZFtpXTtiPWFbImdldF8iK2xdO2lmKHR5cGVvZiBiPT09ImZ1bmN0aW9uIilhPWIuY2FsbChhKTtlbHNlIGE9YVtsXTt2YXIgbj10eXBlb2YgYTtpZihhPT09bnVsbHx8bj09PSJ1bmRlZmluZWQiKXRocm93IEVycm9yLmludmFsaWRPcGVyYXRpb24oU3RyaW5nLmZvcm1hdChTeXMuUmVzLm51bGxSZWZlcmVuY2VJblBhdGgsaikpfXZhciBlLGM9ZFttXTtiPWFbImdldF8iK2NdO2Y9YVsic2V0XyIrY107aWYodHlwZW9mIGI9PT0iZnVuY3Rpb24iKWU9Yi5jYWxsKGEpO2Vsc2UgZT1hW2NdO2lmKHR5cGVvZiBmPT09ImZ1bmN0aW9uIilmLmNhbGwoYSxnKTtlbHNlIGFbY109ZztpZihlIT09Zyl7dmFyIGg9U3lzLk9ic2VydmVyLl9nZXRDb250ZXh0KGspO2lmKGgmJmgudXBkYXRpbmcpe2guZGlydHk9dHJ1ZTtyZXR1cm59U3lzLk9ic2VydmVyLnJhaXNlUHJvcGVydHlDaGFuZ2VkKGssZFswXSl9fTtTeXMuT2JzZXJ2ZXIuc2V0VmFsdWU9ZnVuY3Rpb24oYixhLGMpe1N5cy5PYnNlcnZlci5fc2V0VmFsdWUoYixhLGMpfTtTeXMuT2JzZXJ2ZXIucmFpc2VQcm9wZXJ0eUNoYW5nZWQ9ZnVuY3Rpb24oYixhKXtTeXMuT2JzZXJ2ZXIucmFpc2VFdmVudChiLCJwcm9wZXJ0eUNoYW5nZWQiLG5ldyBTeXMuUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzKGEpKX07U3lzLk9ic2VydmVyLmFkZENvbGxlY3Rpb25DaGFuZ2VkPWZ1bmN0aW9uKGIsYSl7U3lzLk9ic2VydmVyLl9hZGRFdmVudEhhbmRsZXIoYiwiY29sbGVjdGlvbkNoYW5nZWQiLGEpfTtTeXMuT2JzZXJ2ZXIucmVtb3ZlQ29sbGVjdGlvbkNoYW5nZWQ9ZnVuY3Rpb24oYixhKXtTeXMuT2JzZXJ2ZXIuX3JlbW92ZUV2ZW50SGFuZGxlcihiLCJjb2xsZWN0aW9uQ2hhbmdlZCIsYSl9O1N5cy5PYnNlcnZlci5fY29sbGVjdGlvbkNoYW5nZT1mdW5jdGlvbihkLGMpe3ZhciBhPVN5cy5PYnNlcnZlci5fZ2V0Q29udGV4dChkKTtpZihhJiZhLnVwZGF0aW5nKXthLmRpcnR5PXRydWU7dmFyIGI9YS5jaGFuZ2VzO2lmKCFiKWEuY2hhbmdlcz1iPVtjXTtlbHNlIGIucHVzaChjKX1lbHNle1N5cy5PYnNlcnZlci5yYWlzZUNvbGxlY3Rpb25DaGFuZ2VkKGQsW2NdKTtTeXMuT2JzZXJ2ZXIucmFpc2VQcm9wZXJ0eUNoYW5nZWQoZCwibGVuZ3RoIil9fTtTeXMuT2JzZXJ2ZXIuYWRkPWZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IFN5cy5Db2xsZWN0aW9uQ2hhbmdlKFN5cy5Ob3RpZnlDb2xsZWN0aW9uQ2hhbmdlZEFjdGlvbi5hZGQsW2JdLGEubGVuZ3RoKTtBcnJheS5hZGQoYSxiKTtTeXMuT2JzZXJ2ZXIuX2NvbGxlY3Rpb25DaGFuZ2UoYSxjKX07U3lzLk9ic2VydmVyLmFkZFJhbmdlPWZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IFN5cy5Db2xsZWN0aW9uQ2hhbmdlKFN5cy5Ob3RpZnlDb2xsZWN0aW9uQ2hhbmdlZEFjdGlvbi5hZGQsYixhLmxlbmd0aCk7QXJyYXkuYWRkUmFuZ2UoYSxiKTtTeXMuT2JzZXJ2ZXIuX2NvbGxlY3Rpb25DaGFuZ2UoYSxjKX07U3lzLk9ic2VydmVyLmNsZWFyPWZ1bmN0aW9uKGEpe3ZhciBiPUFycmF5LmNsb25lKGEpO0FycmF5LmNsZWFyKGEpO1N5cy5PYnNlcnZlci5fY29sbGVjdGlvbkNoYW5nZShhLG5ldyBTeXMuQ29sbGVjdGlvbkNoYW5nZShTeXMuTm90aWZ5Q29sbGVjdGlvbkNoYW5nZWRBY3Rpb24ucmVzZXQsbnVsbCwtMSxiLDApKX07U3lzLk9ic2VydmVyLmluc2VydD1mdW5jdGlvbihhLGIsYyl7QXJyYXkuaW5zZXJ0KGEsYixjKTtTeXMuT2JzZXJ2ZXIuX2NvbGxlY3Rpb25DaGFuZ2UoYSxuZXcgU3lzLkNvbGxlY3Rpb25DaGFuZ2UoU3lzLk5vdGlmeUNvbGxlY3Rpb25DaGFuZ2VkQWN0aW9uLmFkZCxbY10sYikpfTtTeXMuT2JzZXJ2ZXIucmVtb3ZlPWZ1bmN0aW9uKGEsYil7dmFyIGM9QXJyYXkuaW5kZXhPZihhLGIpO2lmKGMhPT0tMSl7QXJyYXkucmVtb3ZlKGEsYik7U3lzLk9ic2VydmVyLl9jb2xsZWN0aW9uQ2hhbmdlKGEsbmV3IFN5cy5Db2xsZWN0aW9uQ2hhbmdlKFN5cy5Ob3RpZnlDb2xsZWN0aW9uQ2hhbmdlZEFjdGlvbi5yZW1vdmUsbnVsbCwtMSxbYl0sYykpO3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07U3lzLk9ic2VydmVyLnJlbW92ZUF0PWZ1bmN0aW9uKGIsYSl7aWYoYT4tMSYmYTxiLmxlbmd0aCl7dmFyIGM9YlthXTtBcnJheS5yZW1vdmVBdChiLGEpO1N5cy5PYnNlcnZlci5fY29sbGVjdGlvbkNoYW5nZShiLG5ldyBTeXMuQ29sbGVjdGlvbkNoYW5nZShTeXMuTm90aWZ5Q29sbGVjdGlvbkNoYW5nZWRBY3Rpb24ucmVtb3ZlLG51bGwsLTEsW2NdLGEpKX19O1N5cy5PYnNlcnZlci5yYWlzZUNvbGxlY3Rpb25DaGFuZ2VkPWZ1bmN0aW9uKGIsYSl7U3lzLk9ic2VydmVyLnJhaXNlRXZlbnQoYiwiY29sbGVjdGlvbkNoYW5nZWQiLG5ldyBTeXMuTm90aWZ5Q29sbGVjdGlvbkNoYW5nZWRFdmVudEFyZ3MoYSkpfTtTeXMuT2JzZXJ2ZXIuX29ic2VydmVNZXRob2RzPXthZGRfcHJvcGVydHlDaGFuZ2VkOmZ1bmN0aW9uKGEpe1N5cy5PYnNlcnZlci5fYWRkRXZlbnRIYW5kbGVyKHRoaXMsInByb3BlcnR5Q2hhbmdlZCIsYSl9LHJlbW92ZV9wcm9wZXJ0eUNoYW5nZWQ6ZnVuY3Rpb24oYSl7U3lzLk9ic2VydmVyLl9yZW1vdmVFdmVudEhhbmRsZXIodGhpcywicHJvcGVydHlDaGFuZ2VkIixhKX0sYWRkRXZlbnRIYW5kbGVyOmZ1bmN0aW9uKGEsYil7U3lzLk9ic2VydmVyLl9hZGRFdmVudEhhbmRsZXIodGhpcyxhLGIpfSxyZW1vdmVFdmVudEhhbmRsZXI6ZnVuY3Rpb24oYSxiKXtTeXMuT2JzZXJ2ZXIuX3JlbW92ZUV2ZW50SGFuZGxlcih0aGlzLGEsYil9LGdldF9pc1VwZGF0aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIFN5cy5PYnNlcnZlci5pc1VwZGF0aW5nKHRoaXMpfSxiZWdpblVwZGF0ZTpmdW5jdGlvbigpe1N5cy5PYnNlcnZlci5iZWdpblVwZGF0ZSh0aGlzKX0sZW5kVXBkYXRlOmZ1bmN0aW9uKCl7U3lzLk9ic2VydmVyLmVuZFVwZGF0ZSh0aGlzKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYixhKXtTeXMuT2JzZXJ2ZXIuX3NldFZhbHVlKHRoaXMsYixhKX0scmFpc2VFdmVudDpmdW5jdGlvbihiLGEpe1N5cy5PYnNlcnZlci5yYWlzZUV2ZW50KHRoaXMsYixhKX0scmFpc2VQcm9wZXJ0eUNoYW5nZWQ6ZnVuY3Rpb24oYSl7U3lzLk9ic2VydmVyLnJhaXNlRXZlbnQodGhpcywicHJvcGVydHlDaGFuZ2VkIixuZXcgU3lzLlByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncyhhKSl9fTtTeXMuT2JzZXJ2ZXIuX2FycmF5TWV0aG9kcz17YWRkX2NvbGxlY3Rpb25DaGFuZ2VkOmZ1bmN0aW9uKGEpe1N5cy5PYnNlcnZlci5fYWRkRXZlbnRIYW5kbGVyKHRoaXMsImNvbGxlY3Rpb25DaGFuZ2VkIixhKX0scmVtb3ZlX2NvbGxlY3Rpb25DaGFuZ2VkOmZ1bmN0aW9uKGEpe1N5cy5PYnNlcnZlci5fcmVtb3ZlRXZlbnRIYW5kbGVyKHRoaXMsImNvbGxlY3Rpb25DaGFuZ2VkIixhKX0sYWRkOmZ1bmN0aW9uKGEpe1N5cy5PYnNlcnZlci5hZGQodGhpcyxhKX0sYWRkUmFuZ2U6ZnVuY3Rpb24oYSl7U3lzLk9ic2VydmVyLmFkZFJhbmdlKHRoaXMsYSl9LGNsZWFyOmZ1bmN0aW9uKCl7U3lzLk9ic2VydmVyLmNsZWFyKHRoaXMpfSxpbnNlcnQ6ZnVuY3Rpb24oYSxiKXtTeXMuT2JzZXJ2ZXIuaW5zZXJ0KHRoaXMsYSxiKX0scmVtb3ZlOmZ1bmN0aW9uKGEpe3JldHVybiBTeXMuT2JzZXJ2ZXIucmVtb3ZlKHRoaXMsYSl9LHJlbW92ZUF0OmZ1bmN0aW9uKGEpe1N5cy5PYnNlcnZlci5yZW1vdmVBdCh0aGlzLGEpfSxyYWlzZUNvbGxlY3Rpb25DaGFuZ2VkOmZ1bmN0aW9uKGEpe1N5cy5PYnNlcnZlci5yYWlzZUV2ZW50KHRoaXMsImNvbGxlY3Rpb25DaGFuZ2VkIixuZXcgU3lzLk5vdGlmeUNvbGxlY3Rpb25DaGFuZ2VkRXZlbnRBcmdzKGEpKX19O1N5cy5PYnNlcnZlci5fZ2V0Q29udGV4dD1mdW5jdGlvbihiLGMpe3ZhciBhPWIuX29ic2VydmVyQ29udGV4dDtpZihhKXJldHVybiBhKCk7aWYoYylyZXR1cm4gKGIuX29ic2VydmVyQ29udGV4dD1TeXMuT2JzZXJ2ZXIuX2NyZWF0ZUNvbnRleHQoKSkoKTtyZXR1cm4gbnVsbH07U3lzLk9ic2VydmVyLl9jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIGE9e2V2ZW50czpuZXcgU3lzLkV2ZW50SGFuZGxlckxpc3R9O3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhfX07RGF0ZS5fYXBwZW5kUHJlT3JQb3N0TWF0Y2g9ZnVuY3Rpb24oZSxiKXt2YXIgZD0wLGE9ZmFsc2U7Zm9yKHZhciBjPTAsZz1lLmxlbmd0aDtjPGc7YysrKXt2YXIgZj1lLmNoYXJBdChjKTtzd2l0Y2goZil7Y2FzZSAiJyI6aWYoYSliLmFwcGVuZCgiJyIpO2Vsc2UgZCsrO2E9ZmFsc2U7YnJlYWs7Y2FzZSAiXFwiOmlmKGEpYi5hcHBlbmQoIlxcIik7YT0hYTticmVhaztkZWZhdWx0OmIuYXBwZW5kKGYpO2E9ZmFsc2V9fXJldHVybiBkfTtEYXRlLl9leHBhbmRGb3JtYXQ9ZnVuY3Rpb24oYSxiKXtpZighYiliPSJGIjt2YXIgYz1iLmxlbmd0aDtpZihjPT09MSlzd2l0Y2goYil7Y2FzZSAiZCI6cmV0dXJuIGEuU2hvcnREYXRlUGF0dGVybjtjYXNlICJEIjpyZXR1cm4gYS5Mb25nRGF0ZVBhdHRlcm47Y2FzZSAidCI6cmV0dXJuIGEuU2hvcnRUaW1lUGF0dGVybjtjYXNlICJUIjpyZXR1cm4gYS5Mb25nVGltZVBhdHRlcm47Y2FzZSAiZiI6cmV0dXJuIGEuTG9uZ0RhdGVQYXR0ZXJuKyIgIithLlNob3J0VGltZVBhdHRlcm47Y2FzZSAiRiI6cmV0dXJuIGEuRnVsbERhdGVUaW1lUGF0dGVybjtjYXNlICJNIjpjYXNlICJtIjpyZXR1cm4gYS5Nb250aERheVBhdHRlcm47Y2FzZSAicyI6cmV0dXJuIGEuU29ydGFibGVEYXRlVGltZVBhdHRlcm47Y2FzZSAiWSI6Y2FzZSAieSI6cmV0dXJuIGEuWWVhck1vbnRoUGF0dGVybjtkZWZhdWx0OnRocm93IEVycm9yLmZvcm1hdChTeXMuUmVzLmZvcm1hdEludmFsaWRTdHJpbmcpfWVsc2UgaWYoYz09PTImJmIuY2hhckF0KDApPT09IiUiKWI9Yi5jaGFyQXQoMSk7cmV0dXJuIGJ9O0RhdGUuX2V4cGFuZFllYXI9ZnVuY3Rpb24oYyxhKXt2YXIgZD1uZXcgRGF0ZSxlPURhdGUuX2dldEVyYShkKTtpZihhPDEwMCl7dmFyIGI9RGF0ZS5fZ2V0RXJhWWVhcihkLGMsZSk7YSs9Yi1iJTEwMDtpZihhPmMuQ2FsZW5kYXIuVHdvRGlnaXRZZWFyTWF4KWEtPTEwMH1yZXR1cm4gYX07RGF0ZS5fZ2V0RXJhPWZ1bmN0aW9uKGUsYyl7aWYoIWMpcmV0dXJuIDA7dmFyIGIsZD1lLmdldFRpbWUoKTtmb3IodmFyIGE9MCxmPWMubGVuZ3RoO2E8ZjthKz00KXtiPWNbYSsyXTtpZihiPT09bnVsbHx8ZD49YilyZXR1cm4gYX1yZXR1cm4gMH07RGF0ZS5fZ2V0RXJhWWVhcj1mdW5jdGlvbihkLGIsZSxjKXt2YXIgYT1kLmdldEZ1bGxZZWFyKCk7aWYoIWMmJmIuZXJhcylhLT1iLmVyYXNbZSszXTtyZXR1cm4gYX07RGF0ZS5fZ2V0UGFyc2VSZWdFeHA9ZnVuY3Rpb24oYixlKXtpZighYi5fcGFyc2VSZWdFeHApYi5fcGFyc2VSZWdFeHA9e307ZWxzZSBpZihiLl9wYXJzZVJlZ0V4cFtlXSlyZXR1cm4gYi5fcGFyc2VSZWdFeHBbZV07dmFyIGM9RGF0ZS5fZXhwYW5kRm9ybWF0KGIsZSk7Yz1jLnJlcGxhY2UoLyhbXF5cJFwuXCpcK1w/XHxcW1xdXChcKVx7XH1dKS9nLCJcXFxcJDEiKTt2YXIgYT1uZXcgU3lzLlN0cmluZ0J1aWxkZXIoIl4iKSxqPVtdLGY9MCxpPTAsaD1EYXRlLl9nZXRUb2tlblJlZ0V4cCgpLGQ7d2hpbGUoKGQ9aC5leGVjKGMpKSE9PW51bGwpe3ZhciBsPWMuc2xpY2UoZixkLmluZGV4KTtmPWgubGFzdEluZGV4O2krPURhdGUuX2FwcGVuZFByZU9yUG9zdE1hdGNoKGwsYSk7aWYoaSUyPT09MSl7YS5hcHBlbmQoZFswXSk7Y29udGludWV9c3dpdGNoKGRbMF0pe2Nhc2UgImRkZGQiOmNhc2UgImRkZCI6Y2FzZSAiTU1NTSI6Y2FzZSAiTU1NIjpjYXNlICJnZyI6Y2FzZSAiZyI6YS5hcHBlbmQoIihcXEQrKSIpO2JyZWFrO2Nhc2UgInR0IjpjYXNlICJ0IjphLmFwcGVuZCgiKFxcRCopIik7YnJlYWs7Y2FzZSAieXl5eSI6YS5hcHBlbmQoIihcXGR7NH0pIik7YnJlYWs7Y2FzZSAiZmZmIjphLmFwcGVuZCgiKFxcZHszfSkiKTticmVhaztjYXNlICJmZiI6YS5hcHBlbmQoIihcXGR7Mn0pIik7YnJlYWs7Y2FzZSAiZiI6YS5hcHBlbmQoIihcXGQpIik7YnJlYWs7Y2FzZSAiZGQiOmNhc2UgImQiOmNhc2UgIk1NIjpjYXNlICJNIjpjYXNlICJ5eSI6Y2FzZSAieSI6Y2FzZSAiSEgiOmNhc2UgIkgiOmNhc2UgImhoIjpjYXNlICJoIjpjYXNlICJtbSI6Y2FzZSAibSI6Y2FzZSAic3MiOmNhc2UgInMiOmEuYXBwZW5kKCIoXFxkXFxkPykiKTticmVhaztjYXNlICJ6enoiOmEuYXBwZW5kKCIoWystXT9cXGRcXGQ/OlxcZHsyfSkiKTticmVhaztjYXNlICJ6eiI6Y2FzZSAieiI6YS5hcHBlbmQoIihbKy1dP1xcZFxcZD8pIik7YnJlYWs7Y2FzZSAiLyI6YS5hcHBlbmQoIihcXCIrYi5EYXRlU2VwYXJhdG9yKyIpIil9QXJyYXkuYWRkKGosZFswXSl9RGF0ZS5fYXBwZW5kUHJlT3JQb3N0TWF0Y2goYy5zbGljZShmKSxhKTthLmFwcGVuZCgiJCIpO3ZhciBrPWEudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiXFxzKyIpLGc9eyJyZWdFeHAiOmssImdyb3VwcyI6an07Yi5fcGFyc2VSZWdFeHBbZV09ZztyZXR1cm4gZ307RGF0ZS5fZ2V0VG9rZW5SZWdFeHA9ZnVuY3Rpb24oKXtyZXR1cm4gL1wvfGRkZGR8ZGRkfGRkfGR8TU1NTXxNTU18TU18TXx5eXl5fHl5fHl8aGh8aHxISHxIfG1tfG18c3N8c3x0dHx0fGZmZnxmZnxmfHp6enx6enx6fGdnfGcvZ307RGF0ZS5wYXJzZUxvY2FsZT1mdW5jdGlvbihhKXtyZXR1cm4gRGF0ZS5fcGFyc2UoYSxTeXMuQ3VsdHVyZUluZm8uQ3VycmVudEN1bHR1cmUsYXJndW1lbnRzKX07RGF0ZS5wYXJzZUludmFyaWFudD1mdW5jdGlvbihhKXtyZXR1cm4gRGF0ZS5fcGFyc2UoYSxTeXMuQ3VsdHVyZUluZm8uSW52YXJpYW50Q3VsdHVyZSxhcmd1bWVudHMpfTtEYXRlLl9wYXJzZT1mdW5jdGlvbihoLGQsaSl7dmFyIGEsYyxiLGYsZSxnPWZhbHNlO2ZvcihhPTEsYz1pLmxlbmd0aDthPGM7YSsrKXtmPWlbYV07aWYoZil7Zz10cnVlO2I9RGF0ZS5fcGFyc2VFeGFjdChoLGYsZCk7aWYoYilyZXR1cm4gYn19aWYoIWcpe2U9ZC5fZ2V0RGF0ZVRpbWVGb3JtYXRzKCk7Zm9yKGE9MCxjPWUubGVuZ3RoO2E8YzthKyspe2I9RGF0ZS5fcGFyc2VFeGFjdChoLGVbYV0sZCk7aWYoYilyZXR1cm4gYn19cmV0dXJuIG51bGx9O0RhdGUuX3BhcnNlRXhhY3Q9ZnVuY3Rpb24odyxELGspe3c9dy50cmltKCk7dmFyIGc9ay5kYXRlVGltZUZvcm1hdCxBPURhdGUuX2dldFBhcnNlUmVnRXhwKGcsRCksQz0obmV3IFJlZ0V4cChBLnJlZ0V4cCkpLmV4ZWModyk7aWYoQz09PW51bGwpcmV0dXJuIG51bGw7dmFyIEI9QS5ncm91cHMseD1udWxsLGU9bnVsbCxjPW51bGwsaj1udWxsLGk9bnVsbCxkPTAsaCxwPTAscT0wLGY9MCxsPW51bGwsdj1mYWxzZTtmb3IodmFyIHM9MCxFPUIubGVuZ3RoO3M8RTtzKyspe3ZhciBhPUNbcysxXTtpZihhKXN3aXRjaChCW3NdKXtjYXNlICJkZCI6Y2FzZSAiZCI6aj1wYXJzZUludChhLDEwKTtpZihqPDF8fGo+MzEpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSAiTU1NTSI6Yz1rLl9nZXRNb250aEluZGV4KGEpO2lmKGM8MHx8Yz4xMSlyZXR1cm4gbnVsbDticmVhaztjYXNlICJNTU0iOmM9ay5fZ2V0QWJick1vbnRoSW5kZXgoYSk7aWYoYzwwfHxjPjExKXJldHVybiBudWxsO2JyZWFrO2Nhc2UgIk0iOmNhc2UgIk1NIjpjPXBhcnNlSW50KGEsMTApLTE7aWYoYzwwfHxjPjExKXJldHVybiBudWxsO2JyZWFrO2Nhc2UgInkiOmNhc2UgInl5IjplPURhdGUuX2V4cGFuZFllYXIoZyxwYXJzZUludChhLDEwKSk7aWYoZTwwfHxlPjk5OTkpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSAieXl5eSI6ZT1wYXJzZUludChhLDEwKTtpZihlPDB8fGU+OTk5OSlyZXR1cm4gbnVsbDticmVhaztjYXNlICJoIjpjYXNlICJoaCI6ZD1wYXJzZUludChhLDEwKTtpZihkPT09MTIpZD0wO2lmKGQ8MHx8ZD4xMSlyZXR1cm4gbnVsbDticmVhaztjYXNlICJIIjpjYXNlICJISCI6ZD1wYXJzZUludChhLDEwKTtpZihkPDB8fGQ+MjMpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSAibSI6Y2FzZSAibW0iOnA9cGFyc2VJbnQoYSwxMCk7aWYocDwwfHxwPjU5KXJldHVybiBudWxsO2JyZWFrO2Nhc2UgInMiOmNhc2UgInNzIjpxPXBhcnNlSW50KGEsMTApO2lmKHE8MHx8cT41OSlyZXR1cm4gbnVsbDticmVhaztjYXNlICJ0dCI6Y2FzZSAidCI6dmFyIHo9YS50b1VwcGVyQ2FzZSgpO3Y9ej09PWcuUE1EZXNpZ25hdG9yLnRvVXBwZXJDYXNlKCk7aWYoIXYmJnohPT1nLkFNRGVzaWduYXRvci50b1VwcGVyQ2FzZSgpKXJldHVybiBudWxsO2JyZWFrO2Nhc2UgImYiOmY9cGFyc2VJbnQoYSwxMCkqMTAwO2lmKGY8MHx8Zj45OTkpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSAiZmYiOmY9cGFyc2VJbnQoYSwxMCkqMTA7aWYoZjwwfHxmPjk5OSlyZXR1cm4gbnVsbDticmVhaztjYXNlICJmZmYiOmY9cGFyc2VJbnQoYSwxMCk7aWYoZjwwfHxmPjk5OSlyZXR1cm4gbnVsbDticmVhaztjYXNlICJkZGRkIjppPWsuX2dldERheUluZGV4KGEpO2lmKGk8MHx8aT42KXJldHVybiBudWxsO2JyZWFrO2Nhc2UgImRkZCI6aT1rLl9nZXRBYmJyRGF5SW5kZXgoYSk7aWYoaTwwfHxpPjYpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSAienp6Ijp2YXIgdT1hLnNwbGl0KC86Lyk7aWYodS5sZW5ndGghPT0yKXJldHVybiBudWxsO2g9cGFyc2VJbnQodVswXSwxMCk7aWYoaDwtMTJ8fGg+MTMpcmV0dXJuIG51bGw7dmFyIG09cGFyc2VJbnQodVsxXSwxMCk7aWYobTwwfHxtPjU5KXJldHVybiBudWxsO2w9aCo2MCsoYS5zdGFydHNXaXRoKCItIik/LW06bSk7YnJlYWs7Y2FzZSAieiI6Y2FzZSAienoiOmg9cGFyc2VJbnQoYSwxMCk7aWYoaDwtMTJ8fGg+MTMpcmV0dXJuIG51bGw7bD1oKjYwO2JyZWFrO2Nhc2UgImciOmNhc2UgImdnIjp2YXIgbz1hO2lmKCFvfHwhZy5lcmFzKXJldHVybiBudWxsO289by50b0xvd2VyQ2FzZSgpLnRyaW0oKTtmb3IodmFyIHI9MCxGPWcuZXJhcy5sZW5ndGg7cjxGO3IrPTQpaWYobz09PWcuZXJhc1tyKzFdLnRvTG93ZXJDYXNlKCkpe3g9cjticmVha31pZih4PT09bnVsbClyZXR1cm4gbnVsbH19dmFyIGI9bmV3IERhdGUsdCxuPWcuQ2FsZW5kYXIuY29udmVydDtpZihuKXQ9bi5mcm9tR3JlZ29yaWFuKGIpWzBdO2Vsc2UgdD1iLmdldEZ1bGxZZWFyKCk7aWYoZT09PW51bGwpZT10O2Vsc2UgaWYoZy5lcmFzKWUrPWcuZXJhc1soeHx8MCkrM107aWYoYz09PW51bGwpYz0wO2lmKGo9PT1udWxsKWo9MTtpZihuKXtiPW4udG9HcmVnb3JpYW4oZSxjLGopO2lmKGI9PT1udWxsKXJldHVybiBudWxsfWVsc2V7Yi5zZXRGdWxsWWVhcihlLGMsaik7aWYoYi5nZXREYXRlKCkhPT1qKXJldHVybiBudWxsO2lmKGkhPT1udWxsJiZiLmdldERheSgpIT09aSlyZXR1cm4gbnVsbH1pZih2JiZkPDEyKWQrPTEyO2Iuc2V0SG91cnMoZCxwLHEsZik7aWYobCE9PW51bGwpe3ZhciB5PWIuZ2V0TWludXRlcygpLShsK2IuZ2V0VGltZXpvbmVPZmZzZXQoKSk7Yi5zZXRIb3VycyhiLmdldEhvdXJzKCkrcGFyc2VJbnQoeS82MCwxMCkseSU2MCl9cmV0dXJuIGJ9O0RhdGUucHJvdG90eXBlLmZvcm1hdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fdG9Gb3JtYXR0ZWRTdHJpbmcoYSxTeXMuQ3VsdHVyZUluZm8uSW52YXJpYW50Q3VsdHVyZSl9O0RhdGUucHJvdG90eXBlLmxvY2FsZUZvcm1hdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fdG9Gb3JtYXR0ZWRTdHJpbmcoYSxTeXMuQ3VsdHVyZUluZm8uQ3VycmVudEN1bHR1cmUpfTtEYXRlLnByb3RvdHlwZS5fdG9Gb3JtYXR0ZWRTdHJpbmc9ZnVuY3Rpb24oZSxqKXt2YXIgYj1qLmRhdGVUaW1lRm9ybWF0LG49Yi5DYWxlbmRhci5jb252ZXJ0O2lmKCFlfHwhZS5sZW5ndGh8fGU9PT0iaSIpaWYoaiYmai5uYW1lLmxlbmd0aClpZihuKXJldHVybiB0aGlzLl90b0Zvcm1hdHRlZFN0cmluZyhiLkZ1bGxEYXRlVGltZVBhdHRlcm4saik7ZWxzZXt2YXIgcj1uZXcgRGF0ZSh0aGlzLmdldFRpbWUoKSkseD1EYXRlLl9nZXRFcmEodGhpcyxiLmVyYXMpO3Iuc2V0RnVsbFllYXIoRGF0ZS5fZ2V0RXJhWWVhcih0aGlzLGIseCkpO3JldHVybiByLnRvTG9jYWxlU3RyaW5nKCl9ZWxzZSByZXR1cm4gdGhpcy50b1N0cmluZygpO3ZhciBsPWIuZXJhcyxrPWU9PT0icyI7ZT1EYXRlLl9leHBhbmRGb3JtYXQoYixlKTt2YXIgYT1uZXcgU3lzLlN0cmluZ0J1aWxkZXIsYztmdW5jdGlvbiBkKGEpe2lmKGE8MTApcmV0dXJuICIwIithO3JldHVybiBhLnRvU3RyaW5nKCl9ZnVuY3Rpb24gbShhKXtpZihhPDEwKXJldHVybiAiMDAiK2E7aWYoYTwxMDApcmV0dXJuICIwIithO3JldHVybiBhLnRvU3RyaW5nKCl9ZnVuY3Rpb24gdihhKXtpZihhPDEwKXJldHVybiAiMDAwIithO2Vsc2UgaWYoYTwxMDApcmV0dXJuICIwMCIrYTtlbHNlIGlmKGE8MTAwMClyZXR1cm4gIjAiK2E7cmV0dXJuIGEudG9TdHJpbmcoKX12YXIgaCxwLHQ9LyhbXmRdfF4pKGR8ZGQpKFteZF18JCkvZztmdW5jdGlvbiBzKCl7aWYoaHx8cClyZXR1cm4gaDtoPXQudGVzdChlKTtwPXRydWU7cmV0dXJuIGh9dmFyIHE9MCxvPURhdGUuX2dldFRva2VuUmVnRXhwKCksZjtpZighayYmbilmPW4uZnJvbUdyZWdvcmlhbih0aGlzKTtmb3IoO3RydWU7KXt2YXIgdz1vLmxhc3RJbmRleCxpPW8uZXhlYyhlKSx1PWUuc2xpY2UodyxpP2kuaW5kZXg6ZS5sZW5ndGgpO3ErPURhdGUuX2FwcGVuZFByZU9yUG9zdE1hdGNoKHUsYSk7aWYoIWkpYnJlYWs7aWYocSUyPT09MSl7YS5hcHBlbmQoaVswXSk7Y29udGludWV9ZnVuY3Rpb24gZyhhLGIpe2lmKGYpcmV0dXJuIGZbYl07c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gYS5nZXRGdWxsWWVhcigpO2Nhc2UgMTpyZXR1cm4gYS5nZXRNb250aCgpO2Nhc2UgMjpyZXR1cm4gYS5nZXREYXRlKCl9fXN3aXRjaChpWzBdKXtjYXNlICJkZGRkIjphLmFwcGVuZChiLkRheU5hbWVzW3RoaXMuZ2V0RGF5KCldKTticmVhaztjYXNlICJkZGQiOmEuYXBwZW5kKGIuQWJicmV2aWF0ZWREYXlOYW1lc1t0aGlzLmdldERheSgpXSk7YnJlYWs7Y2FzZSAiZGQiOmg9dHJ1ZTthLmFwcGVuZChkKGcodGhpcywyKSkpO2JyZWFrO2Nhc2UgImQiOmg9dHJ1ZTthLmFwcGVuZChnKHRoaXMsMikpO2JyZWFrO2Nhc2UgIk1NTU0iOmEuYXBwZW5kKGIuTW9udGhHZW5pdGl2ZU5hbWVzJiZzKCk/Yi5Nb250aEdlbml0aXZlTmFtZXNbZyh0aGlzLDEpXTpiLk1vbnRoTmFtZXNbZyh0aGlzLDEpXSk7YnJlYWs7Y2FzZSAiTU1NIjphLmFwcGVuZChiLkFiYnJldmlhdGVkTW9udGhHZW5pdGl2ZU5hbWVzJiZzKCk/Yi5BYmJyZXZpYXRlZE1vbnRoR2VuaXRpdmVOYW1lc1tnKHRoaXMsMSldOmIuQWJicmV2aWF0ZWRNb250aE5hbWVzW2codGhpcywxKV0pO2JyZWFrO2Nhc2UgIk1NIjphLmFwcGVuZChkKGcodGhpcywxKSsxKSk7YnJlYWs7Y2FzZSAiTSI6YS5hcHBlbmQoZyh0aGlzLDEpKzEpO2JyZWFrO2Nhc2UgInl5eXkiOmEuYXBwZW5kKHYoZj9mWzBdOkRhdGUuX2dldEVyYVllYXIodGhpcyxiLERhdGUuX2dldEVyYSh0aGlzLGwpLGspKSk7YnJlYWs7Y2FzZSAieXkiOmEuYXBwZW5kKGQoKGY/ZlswXTpEYXRlLl9nZXRFcmFZZWFyKHRoaXMsYixEYXRlLl9nZXRFcmEodGhpcyxsKSxrKSklMTAwKSk7YnJlYWs7Y2FzZSAieSI6YS5hcHBlbmQoKGY/ZlswXTpEYXRlLl9nZXRFcmFZZWFyKHRoaXMsYixEYXRlLl9nZXRFcmEodGhpcyxsKSxrKSklMTAwKTticmVhaztjYXNlICJoaCI6Yz10aGlzLmdldEhvdXJzKCklMTI7aWYoYz09PTApYz0xMjthLmFwcGVuZChkKGMpKTticmVhaztjYXNlICJoIjpjPXRoaXMuZ2V0SG91cnMoKSUxMjtpZihjPT09MCljPTEyO2EuYXBwZW5kKGMpO2JyZWFrO2Nhc2UgIkhIIjphLmFwcGVuZChkKHRoaXMuZ2V0SG91cnMoKSkpO2JyZWFrO2Nhc2UgIkgiOmEuYXBwZW5kKHRoaXMuZ2V0SG91cnMoKSk7YnJlYWs7Y2FzZSAibW0iOmEuYXBwZW5kKGQodGhpcy5nZXRNaW51dGVzKCkpKTticmVhaztjYXNlICJtIjphLmFwcGVuZCh0aGlzLmdldE1pbnV0ZXMoKSk7YnJlYWs7Y2FzZSAic3MiOmEuYXBwZW5kKGQodGhpcy5nZXRTZWNvbmRzKCkpKTticmVhaztjYXNlICJzIjphLmFwcGVuZCh0aGlzLmdldFNlY29uZHMoKSk7YnJlYWs7Y2FzZSAidHQiOmEuYXBwZW5kKHRoaXMuZ2V0SG91cnMoKTwxMj9iLkFNRGVzaWduYXRvcjpiLlBNRGVzaWduYXRvcik7YnJlYWs7Y2FzZSAidCI6YS5hcHBlbmQoKHRoaXMuZ2V0SG91cnMoKTwxMj9iLkFNRGVzaWduYXRvcjpiLlBNRGVzaWduYXRvcikuY2hhckF0KDApKTticmVhaztjYXNlICJmIjphLmFwcGVuZChtKHRoaXMuZ2V0TWlsbGlzZWNvbmRzKCkpLmNoYXJBdCgwKSk7YnJlYWs7Y2FzZSAiZmYiOmEuYXBwZW5kKG0odGhpcy5nZXRNaWxsaXNlY29uZHMoKSkuc3Vic3RyKDAsMikpO2JyZWFrO2Nhc2UgImZmZiI6YS5hcHBlbmQobSh0aGlzLmdldE1pbGxpc2Vjb25kcygpKSk7YnJlYWs7Y2FzZSAieiI6Yz10aGlzLmdldFRpbWV6b25lT2Zmc2V0KCkvNjA7YS5hcHBlbmQoKGM8PTA/IisiOiItIikrTWF0aC5mbG9vcihNYXRoLmFicyhjKSkpO2JyZWFrO2Nhc2UgInp6IjpjPXRoaXMuZ2V0VGltZXpvbmVPZmZzZXQoKS82MDthLmFwcGVuZCgoYzw9MD8iKyI6Ii0iKStkKE1hdGguZmxvb3IoTWF0aC5hYnMoYykpKSk7YnJlYWs7Y2FzZSAienp6IjpjPXRoaXMuZ2V0VGltZXpvbmVPZmZzZXQoKS82MDthLmFwcGVuZCgoYzw9MD8iKyI6Ii0iKStkKE1hdGguZmxvb3IoTWF0aC5hYnMoYykpKSsiOiIrZChNYXRoLmFicyh0aGlzLmdldFRpbWV6b25lT2Zmc2V0KCklNjApKSk7YnJlYWs7Y2FzZSAiZyI6Y2FzZSAiZ2ciOmlmKGIuZXJhcylhLmFwcGVuZChiLmVyYXNbRGF0ZS5fZ2V0RXJhKHRoaXMsbCkrMV0pO2JyZWFrO2Nhc2UgIi8iOmEuYXBwZW5kKGIuRGF0ZVNlcGFyYXRvcil9fXJldHVybiBhLnRvU3RyaW5nKCl9O1N0cmluZy5sb2NhbGVGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nLl90b0Zvcm1hdHRlZFN0cmluZyh0cnVlLGFyZ3VtZW50cyl9O051bWJlci5wYXJzZUxvY2FsZT1mdW5jdGlvbihhKXtyZXR1cm4gTnVtYmVyLl9wYXJzZShhLFN5cy5DdWx0dXJlSW5mby5DdXJyZW50Q3VsdHVyZSl9O051bWJlci5wYXJzZUludmFyaWFudD1mdW5jdGlvbihhKXtyZXR1cm4gTnVtYmVyLl9wYXJzZShhLFN5cy5DdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlKX07TnVtYmVyLl9wYXJzZT1mdW5jdGlvbihiLG8pe2I9Yi50cmltKCk7aWYoYi5tYXRjaCgvXlsrLV0/aW5maW5pdHkkL2kpKXJldHVybiBwYXJzZUZsb2F0KGIpO2lmKGIubWF0Y2goL14weFthLWYwLTldKyQvaSkpcmV0dXJuIHBhcnNlSW50KGIpO3ZhciBhPW8ubnVtYmVyRm9ybWF0LGc9TnVtYmVyLl9wYXJzZU51bWJlck5lZ2F0aXZlUGF0dGVybihiLGEsYS5OdW1iZXJOZWdhdGl2ZVBhdHRlcm4pLGg9Z1swXSxlPWdbMV07aWYoaD09PSIiJiZhLk51bWJlck5lZ2F0aXZlUGF0dGVybiE9PTEpe2c9TnVtYmVyLl9wYXJzZU51bWJlck5lZ2F0aXZlUGF0dGVybihiLGEsMSk7aD1nWzBdO2U9Z1sxXX1pZihoPT09IiIpaD0iKyI7dmFyIGosZCxmPWUuaW5kZXhPZigiZSIpO2lmKGY8MClmPWUuaW5kZXhPZigiRSIpO2lmKGY8MCl7ZD1lO2o9bnVsbH1lbHNle2Q9ZS5zdWJzdHIoMCxmKTtqPWUuc3Vic3RyKGYrMSl9dmFyIGMsayxtPWQuaW5kZXhPZihhLk51bWJlckRlY2ltYWxTZXBhcmF0b3IpO2lmKG08MCl7Yz1kO2s9bnVsbH1lbHNle2M9ZC5zdWJzdHIoMCxtKTtrPWQuc3Vic3RyKG0rYS5OdW1iZXJEZWNpbWFsU2VwYXJhdG9yLmxlbmd0aCl9Yz1jLnNwbGl0KGEuTnVtYmVyR3JvdXBTZXBhcmF0b3IpLmpvaW4oIiIpO3ZhciBuPWEuTnVtYmVyR3JvdXBTZXBhcmF0b3IucmVwbGFjZSgvXHUwMEEwL2csIiAiKTtpZihhLk51bWJlckdyb3VwU2VwYXJhdG9yIT09biljPWMuc3BsaXQobikuam9pbigiIik7dmFyIGw9aCtjO2lmKGshPT1udWxsKWwrPSIuIitrO2lmKGohPT1udWxsKXt2YXIgaT1OdW1iZXIuX3BhcnNlTnVtYmVyTmVnYXRpdmVQYXR0ZXJuKGosYSwxKTtpZihpWzBdPT09IiIpaVswXT0iKyI7bCs9ImUiK2lbMF0raVsxXX1pZihsLm1hdGNoKC9eWystXT9cZCpcLj9cZCooZVsrLV0/XGQrKT8kLykpcmV0dXJuIHBhcnNlRmxvYXQobCk7cmV0dXJuIE51bWJlci5OYU59O051bWJlci5fcGFyc2VOdW1iZXJOZWdhdGl2ZVBhdHRlcm49ZnVuY3Rpb24oYSxkLGUpe3ZhciBiPWQuTmVnYXRpdmVTaWduLGM9ZC5Qb3NpdGl2ZVNpZ247c3dpdGNoKGUpe2Nhc2UgNDpiPSIgIitiO2M9IiAiK2M7Y2FzZSAzOmlmKGEuZW5kc1dpdGgoYikpcmV0dXJuIFsiLSIsYS5zdWJzdHIoMCxhLmxlbmd0aC1iLmxlbmd0aCldO2Vsc2UgaWYoYS5lbmRzV2l0aChjKSlyZXR1cm4gWyIrIixhLnN1YnN0cigwLGEubGVuZ3RoLWMubGVuZ3RoKV07YnJlYWs7Y2FzZSAyOmIrPSIgIjtjKz0iICI7Y2FzZSAxOmlmKGEuc3RhcnRzV2l0aChiKSlyZXR1cm4gWyItIixhLnN1YnN0cihiLmxlbmd0aCldO2Vsc2UgaWYoYS5zdGFydHNXaXRoKGMpKXJldHVybiBbIisiLGEuc3Vic3RyKGMubGVuZ3RoKV07YnJlYWs7Y2FzZSAwOmlmKGEuc3RhcnRzV2l0aCgiKCIpJiZhLmVuZHNXaXRoKCIpIikpcmV0dXJuIFsiLSIsYS5zdWJzdHIoMSxhLmxlbmd0aC0yKV19cmV0dXJuIFsiIixhXX07TnVtYmVyLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3RvRm9ybWF0dGVkU3RyaW5nKGEsU3lzLkN1bHR1cmVJbmZvLkludmFyaWFudEN1bHR1cmUpfTtOdW1iZXIucHJvdG90eXBlLmxvY2FsZUZvcm1hdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fdG9Gb3JtYXR0ZWRTdHJpbmcoYSxTeXMuQ3VsdHVyZUluZm8uQ3VycmVudEN1bHR1cmUpfTtOdW1iZXIucHJvdG90eXBlLl90b0Zvcm1hdHRlZFN0cmluZz1mdW5jdGlvbihlLGope2lmKCFlfHxlLmxlbmd0aD09PTB8fGU9PT0iaSIpaWYoaiYmai5uYW1lLmxlbmd0aD4wKXJldHVybiB0aGlzLnRvTG9jYWxlU3RyaW5nKCk7ZWxzZSByZXR1cm4gdGhpcy50b1N0cmluZygpO3ZhciBvPVsibiAlIiwibiUiLCIlbiJdLG49WyItbiAlIiwiLW4lIiwiLSVuIl0scD1bIihuKSIsIi1uIiwiLSBuIiwibi0iLCJuIC0iXSxtPVsiJG4iLCJuJCIsIiQgbiIsIm4gJCJdLGw9WyIoJG4pIiwiLSRuIiwiJC1uIiwiJG4tIiwiKG4kKSIsIi1uJCIsIm4tJCIsIm4kLSIsIi1uICQiLCItJCBuIiwibiAkLSIsIiQgbi0iLCIkIC1uIiwibi0gJCIsIigkIG4pIiwiKG4gJCkiXTtmdW5jdGlvbiBnKGEsYyxkKXtmb3IodmFyIGI9YS5sZW5ndGg7YjxjO2IrKylhPWQ/IjAiK2E6YSsiMCI7cmV0dXJuIGF9ZnVuY3Rpb24gaShqLGksbCxuLHApe3ZhciBoPWxbMF0saz0xLG89TWF0aC5wb3coMTAsaSksbT1NYXRoLnJvdW5kKGoqbykvbztpZighaXNGaW5pdGUobSkpbT1qO2o9bTt2YXIgYj1qLnRvU3RyaW5nKCksYT0iIixjLGU9Yi5zcGxpdCgvZS9pKTtiPWVbMF07Yz1lLmxlbmd0aD4xP3BhcnNlSW50KGVbMV0pOjA7ZT1iLnNwbGl0KCIuIik7Yj1lWzBdO2E9ZS5sZW5ndGg+MT9lWzFdOiIiO3ZhciBxO2lmKGM+MCl7YT1nKGEsYyxmYWxzZSk7Yis9YS5zbGljZSgwLGMpO2E9YS5zdWJzdHIoYyl9ZWxzZSBpZihjPDApe2M9LWM7Yj1nKGIsYysxLHRydWUpO2E9Yi5zbGljZSgtYyxiLmxlbmd0aCkrYTtiPWIuc2xpY2UoMCwtYyl9aWYoaT4wKXtpZihhLmxlbmd0aD5pKWE9YS5zbGljZSgwLGkpO2Vsc2UgYT1nKGEsaSxmYWxzZSk7YT1wK2F9ZWxzZSBhPSIiO3ZhciBkPWIubGVuZ3RoLTEsZj0iIjt3aGlsZShkPj0wKXtpZihoPT09MHx8aD5kKWlmKGYubGVuZ3RoPjApcmV0dXJuIGIuc2xpY2UoMCxkKzEpK24rZithO2Vsc2UgcmV0dXJuIGIuc2xpY2UoMCxkKzEpK2E7aWYoZi5sZW5ndGg+MClmPWIuc2xpY2UoZC1oKzEsZCsxKStuK2Y7ZWxzZSBmPWIuc2xpY2UoZC1oKzEsZCsxKTtkLT1oO2lmKGs8bC5sZW5ndGgpe2g9bFtrXTtrKyt9fXJldHVybiBiLnNsaWNlKDAsZCsxKStuK2YrYX12YXIgYT1qLm51bWJlckZvcm1hdCxkPU1hdGguYWJzKHRoaXMpO2lmKCFlKWU9IkQiO3ZhciBiPS0xO2lmKGUubGVuZ3RoPjEpYj1wYXJzZUludChlLnNsaWNlKDEpLDEwKTt2YXIgYztzd2l0Y2goZS5jaGFyQXQoMCkpe2Nhc2UgImQiOmNhc2UgIkQiOmM9Im4iO2lmKGIhPT0tMSlkPWcoIiIrZCxiLHRydWUpO2lmKHRoaXM8MClkPS1kO2JyZWFrO2Nhc2UgImMiOmNhc2UgIkMiOmlmKHRoaXM8MCljPWxbYS5DdXJyZW5jeU5lZ2F0aXZlUGF0dGVybl07ZWxzZSBjPW1bYS5DdXJyZW5jeVBvc2l0aXZlUGF0dGVybl07aWYoYj09PS0xKWI9YS5DdXJyZW5jeURlY2ltYWxEaWdpdHM7ZD1pKE1hdGguYWJzKHRoaXMpLGIsYS5DdXJyZW5jeUdyb3VwU2l6ZXMsYS5DdXJyZW5jeUdyb3VwU2VwYXJhdG9yLGEuQ3VycmVuY3lEZWNpbWFsU2VwYXJhdG9yKTticmVhaztjYXNlICJuIjpjYXNlICJOIjppZih0aGlzPDApYz1wW2EuTnVtYmVyTmVnYXRpdmVQYXR0ZXJuXTtlbHNlIGM9Im4iO2lmKGI9PT0tMSliPWEuTnVtYmVyRGVjaW1hbERpZ2l0cztkPWkoTWF0aC5hYnModGhpcyksYixhLk51bWJlckdyb3VwU2l6ZXMsYS5OdW1iZXJHcm91cFNlcGFyYXRvcixhLk51bWJlckRlY2ltYWxTZXBhcmF0b3IpO2JyZWFrO2Nhc2UgInAiOmNhc2UgIlAiOmlmKHRoaXM8MCljPW5bYS5QZXJjZW50TmVnYXRpdmVQYXR0ZXJuXTtlbHNlIGM9b1thLlBlcmNlbnRQb3NpdGl2ZVBhdHRlcm5dO2lmKGI9PT0tMSliPWEuUGVyY2VudERlY2ltYWxEaWdpdHM7ZD1pKE1hdGguYWJzKHRoaXMpKjEwMCxiLGEuUGVyY2VudEdyb3VwU2l6ZXMsYS5QZXJjZW50R3JvdXBTZXBhcmF0b3IsYS5QZXJjZW50RGVjaW1hbFNlcGFyYXRvcik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvci5mb3JtYXQoU3lzLlJlcy5mb3JtYXRCYWRGb3JtYXRTcGVjaWZpZXIpfXZhciBrPS9ufFwkfC18JS9nLGY9IiI7Zm9yKDt0cnVlOyl7dmFyIHE9ay5sYXN0SW5kZXgsaD1rLmV4ZWMoYyk7Zis9Yy5zbGljZShxLGg/aC5pbmRleDpjLmxlbmd0aCk7aWYoIWgpYnJlYWs7c3dpdGNoKGhbMF0pe2Nhc2UgIm4iOmYrPWQ7YnJlYWs7Y2FzZSAiJCI6Zis9YS5DdXJyZW5jeVN5bWJvbDticmVhaztjYXNlICItIjppZigvWzEtOV0vLnRlc3QoZCkpZis9YS5OZWdhdGl2ZVNpZ247YnJlYWs7Y2FzZSAiJSI6Zis9YS5QZXJjZW50U3ltYm9sfX1yZXR1cm4gZn07U3lzLkN1bHR1cmVJbmZvPWZ1bmN0aW9uKGMsYixhKXt0aGlzLm5hbWU9Yzt0aGlzLm51bWJlckZvcm1hdD1iO3RoaXMuZGF0ZVRpbWVGb3JtYXQ9YX07U3lzLkN1bHR1cmVJbmZvLnByb3RvdHlwZT17X2dldERhdGVUaW1lRm9ybWF0czpmdW5jdGlvbigpe2lmKCF0aGlzLl9kYXRlVGltZUZvcm1hdHMpe3ZhciBhPXRoaXMuZGF0ZVRpbWVGb3JtYXQ7dGhpcy5fZGF0ZVRpbWVGb3JtYXRzPVthLk1vbnRoRGF5UGF0dGVybixhLlllYXJNb250aFBhdHRlcm4sYS5TaG9ydERhdGVQYXR0ZXJuLGEuU2hvcnRUaW1lUGF0dGVybixhLkxvbmdEYXRlUGF0dGVybixhLkxvbmdUaW1lUGF0dGVybixhLkZ1bGxEYXRlVGltZVBhdHRlcm4sYS5SRkMxMTIzUGF0dGVybixhLlNvcnRhYmxlRGF0ZVRpbWVQYXR0ZXJuLGEuVW5pdmVyc2FsU29ydGFibGVEYXRlVGltZVBhdHRlcm5dfXJldHVybiB0aGlzLl9kYXRlVGltZUZvcm1hdHN9LF9nZXRJbmRleDpmdW5jdGlvbihjLGQsZSl7dmFyIGI9dGhpcy5fdG9VcHBlcihjKSxhPUFycmF5LmluZGV4T2YoZCxiKTtpZihhPT09LTEpYT1BcnJheS5pbmRleE9mKGUsYik7cmV0dXJuIGF9LF9nZXRNb250aEluZGV4OmZ1bmN0aW9uKGEpe2lmKCF0aGlzLl91cHBlck1vbnRocyl7dGhpcy5fdXBwZXJNb250aHM9dGhpcy5fdG9VcHBlckFycmF5KHRoaXMuZGF0ZVRpbWVGb3JtYXQuTW9udGhOYW1lcyk7dGhpcy5fdXBwZXJNb250aHNHZW5pdGl2ZT10aGlzLl90b1VwcGVyQXJyYXkodGhpcy5kYXRlVGltZUZvcm1hdC5Nb250aEdlbml0aXZlTmFtZXMpfXJldHVybiB0aGlzLl9nZXRJbmRleChhLHRoaXMuX3VwcGVyTW9udGhzLHRoaXMuX3VwcGVyTW9udGhzR2VuaXRpdmUpfSxfZ2V0QWJick1vbnRoSW5kZXg6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuX3VwcGVyQWJick1vbnRocyl7dGhpcy5fdXBwZXJBYmJyTW9udGhzPXRoaXMuX3RvVXBwZXJBcnJheSh0aGlzLmRhdGVUaW1lRm9ybWF0LkFiYnJldmlhdGVkTW9udGhOYW1lcyk7dGhpcy5fdXBwZXJBYmJyTW9udGhzR2VuaXRpdmU9dGhpcy5fdG9VcHBlckFycmF5KHRoaXMuZGF0ZVRpbWVGb3JtYXQuQWJicmV2aWF0ZWRNb250aEdlbml0aXZlTmFtZXMpfXJldHVybiB0aGlzLl9nZXRJbmRleChhLHRoaXMuX3VwcGVyQWJick1vbnRocyx0aGlzLl91cHBlckFiYnJNb250aHNHZW5pdGl2ZSl9LF9nZXREYXlJbmRleDpmdW5jdGlvbihhKXtpZighdGhpcy5fdXBwZXJEYXlzKXRoaXMuX3VwcGVyRGF5cz10aGlzLl90b1VwcGVyQXJyYXkodGhpcy5kYXRlVGltZUZvcm1hdC5EYXlOYW1lcyk7cmV0dXJuIEFycmF5LmluZGV4T2YodGhpcy5fdXBwZXJEYXlzLHRoaXMuX3RvVXBwZXIoYSkpfSxfZ2V0QWJickRheUluZGV4OmZ1bmN0aW9uKGEpe2lmKCF0aGlzLl91cHBlckFiYnJEYXlzKXRoaXMuX3VwcGVyQWJickRheXM9dGhpcy5fdG9VcHBlckFycmF5KHRoaXMuZGF0ZVRpbWVGb3JtYXQuQWJicmV2aWF0ZWREYXlOYW1lcyk7cmV0dXJuIEFycmF5LmluZGV4T2YodGhpcy5fdXBwZXJBYmJyRGF5cyx0aGlzLl90b1VwcGVyKGEpKX0sX3RvVXBwZXJBcnJheTpmdW5jdGlvbihjKXt2YXIgYj1bXTtmb3IodmFyIGE9MCxkPWMubGVuZ3RoO2E8ZDthKyspYlthXT10aGlzLl90b1VwcGVyKGNbYV0pO3JldHVybiBifSxfdG9VcHBlcjpmdW5jdGlvbihhKXtyZXR1cm4gYS5zcGxpdCgiXHUwMGEwIikuam9pbigiICIpLnRvVXBwZXJDYXNlKCl9fTtTeXMuQ3VsdHVyZUluZm8ucmVnaXN0ZXJDbGFzcygiU3lzLkN1bHR1cmVJbmZvIik7U3lzLkN1bHR1cmVJbmZvLl9wYXJzZT1mdW5jdGlvbihhKXt2YXIgYj1hLmRhdGVUaW1lRm9ybWF0O2lmKGImJiFiLmVyYXMpYi5lcmFzPWEuZXJhcztyZXR1cm4gbmV3IFN5cy5DdWx0dXJlSW5mbyhhLm5hbWUsYS5udW1iZXJGb3JtYXQsYil9O1N5cy5DdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlPVN5cy5DdWx0dXJlSW5mby5fcGFyc2UoeyJuYW1lIjoiIiwibnVtYmVyRm9ybWF0Ijp7IkN1cnJlbmN5RGVjaW1hbERpZ2l0cyI6MiwiQ3VycmVuY3lEZWNpbWFsU2VwYXJhdG9yIjoiLiIsIklzUmVhZE9ubHkiOnRydWUsIkN1cnJlbmN5R3JvdXBTaXplcyI6WzNdLCJOdW1iZXJHcm91cFNpemVzIjpbM10sIlBlcmNlbnRHcm91cFNpemVzIjpbM10sIkN1cnJlbmN5R3JvdXBTZXBhcmF0b3IiOiIsIiwiQ3VycmVuY3lTeW1ib2wiOiJcdTAwYTQiLCJOYU5TeW1ib2wiOiJOYU4iLCJDdXJyZW5jeU5lZ2F0aXZlUGF0dGVybiI6MCwiTnVtYmVyTmVnYXRpdmVQYXR0ZXJuIjoxLCJQZXJjZW50UG9zaXRpdmVQYXR0ZXJuIjowLCJQZXJjZW50TmVnYXRpdmVQYXR0ZXJuIjowLCJOZWdhdGl2ZUluZmluaXR5U3ltYm9sIjoiLUluZmluaXR5IiwiTmVnYXRpdmVTaWduIjoiLSIsIk51bWJlckRlY2ltYWxEaWdpdHMiOjIsIk51bWJlckRlY2ltYWxTZXBhcmF0b3IiOiIuIiwiTnVtYmVyR3JvdXBTZXBhcmF0b3IiOiIsIiwiQ3VycmVuY3lQb3NpdGl2ZVBhdHRlcm4iOjAsIlBvc2l0aXZlSW5maW5pdHlTeW1ib2wiOiJJbmZpbml0eSIsIlBvc2l0aXZlU2lnbiI6IisiLCJQZXJjZW50RGVjaW1hbERpZ2l0cyI6MiwiUGVyY2VudERlY2ltYWxTZXBhcmF0b3IiOiIuIiwiUGVyY2VudEdyb3VwU2VwYXJhdG9yIjoiLCIsIlBlcmNlbnRTeW1ib2wiOiIlIiwiUGVyTWlsbGVTeW1ib2wiOiJcdTIwMzAiLCJOYXRpdmVEaWdpdHMiOlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSJdLCJEaWdpdFN1YnN0aXR1dGlvbiI6MX0sImRhdGVUaW1lRm9ybWF0Ijp7IkFNRGVzaWduYXRvciI6IkFNIiwiQ2FsZW5kYXIiOnsiTWluU3VwcG9ydGVkRGF0ZVRpbWUiOiJALTYyMTM1NTY4MDAwMDAwQCIsIk1heFN1cHBvcnRlZERhdGVUaW1lIjoiQDI1MzQwMjMwMDc5OTk5OUAiLCJBbGdvcml0aG1UeXBlIjoxLCJDYWxlbmRhclR5cGUiOjEsIkVyYXMiOlsxXSwiVHdvRGlnaXRZZWFyTWF4IjoyMDI5LCJJc1JlYWRPbmx5Ijp0cnVlfSwiRGF0ZVNlcGFyYXRvciI6Ii8iLCJGaXJzdERheU9mV2VlayI6MCwiQ2FsZW5kYXJXZWVrUnVsZSI6MCwiRnVsbERhdGVUaW1lUGF0dGVybiI6ImRkZGQsIGRkIE1NTU0geXl5eSBISDptbTpzcyIsIkxvbmdEYXRlUGF0dGVybiI6ImRkZGQsIGRkIE1NTU0geXl5eSIsIkxvbmdUaW1lUGF0dGVybiI6IkhIOm1tOnNzIiwiTW9udGhEYXlQYXR0ZXJuIjoiTU1NTSBkZCIsIlBNRGVzaWduYXRvciI6IlBNIiwiUkZDMTEyM1BhdHRlcm4iOiJkZGQsIGRkIE1NTSB5eXl5IEhIJzonbW0nOidzcyAnR01UJyIsIlNob3J0RGF0ZVBhdHRlcm4iOiJNTS9kZC95eXl5IiwiU2hvcnRUaW1lUGF0dGVybiI6IkhIOm1tIiwiU29ydGFibGVEYXRlVGltZVBhdHRlcm4iOiJ5eXl5Jy0nTU0nLSdkZCdUJ0hIJzonbW0nOidzcyIsIlRpbWVTZXBhcmF0b3IiOiI6IiwiVW5pdmVyc2FsU29ydGFibGVEYXRlVGltZVBhdHRlcm4iOiJ5eXl5Jy0nTU0nLSdkZCBISCc6J21tJzonc3MnWiciLCJZZWFyTW9udGhQYXR0ZXJuIjoieXl5eSBNTU1NIiwiQWJicmV2aWF0ZWREYXlOYW1lcyI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwiU2hvcnRlc3REYXlOYW1lcyI6WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLCJEYXlOYW1lcyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLCJBYmJyZXZpYXRlZE1vbnRoTmFtZXMiOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIiwiIl0sIk1vbnRoTmFtZXMiOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiLCIiXSwiSXNSZWFkT25seSI6dHJ1ZSwiTmF0aXZlQ2FsZW5kYXJOYW1lIjoiR3JlZ29yaWFuIENhbGVuZGFyIiwiQWJicmV2aWF0ZWRNb250aEdlbml0aXZlTmFtZXMiOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIiwiIl0sIk1vbnRoR2VuaXRpdmVOYW1lcyI6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciIsIiJdfSwiZXJhcyI6WzEsIkEuRC4iLG51bGwsMF19KTtpZih0eXBlb2YgX19jdWx0dXJlSW5mbz09PSJvYmplY3QiKXtTeXMuQ3VsdHVyZUluZm8uQ3VycmVudEN1bHR1cmU9U3lzLkN1bHR1cmVJbmZvLl9wYXJzZShfX2N1bHR1cmVJbmZvKTtkZWxldGUgX19jdWx0dXJlSW5mb31lbHNlIFN5cy5DdWx0dXJlSW5mby5DdXJyZW50Q3VsdHVyZT1TeXMuQ3VsdHVyZUluZm8uX3BhcnNlKHsibmFtZSI6ImVuLVVTIiwibnVtYmVyRm9ybWF0Ijp7IkN1cnJlbmN5RGVjaW1hbERpZ2l0cyI6MiwiQ3VycmVuY3lEZWNpbWFsU2VwYXJhdG9yIjoiLiIsIklzUmVhZE9ubHkiOmZhbHNlLCJDdXJyZW5jeUdyb3VwU2l6ZXMiOlszXSwiTnVtYmVyR3JvdXBTaXplcyI6WzNdLCJQZXJjZW50R3JvdXBTaXplcyI6WzNdLCJDdXJyZW5jeUdyb3VwU2VwYXJhdG9yIjoiLCIsIkN1cnJlbmN5U3ltYm9sIjoiJCIsIk5hTlN5bWJvbCI6Ik5hTiIsIkN1cnJlbmN5TmVnYXRpdmVQYXR0ZXJuIjowLCJOdW1iZXJOZWdhdGl2ZVBhdHRlcm4iOjEsIlBlcmNlbnRQb3NpdGl2ZVBhdHRlcm4iOjAsIlBlcmNlbnROZWdhdGl2ZVBhdHRlcm4iOjAsIk5lZ2F0aXZlSW5maW5pdHlTeW1ib2wiOiItSW5maW5pdHkiLCJOZWdhdGl2ZVNpZ24iOiItIiwiTnVtYmVyRGVjaW1hbERpZ2l0cyI6MiwiTnVtYmVyRGVjaW1hbFNlcGFyYXRvciI6Ii4iLCJOdW1iZXJHcm91cFNlcGFyYXRvciI6IiwiLCJDdXJyZW5jeVBvc2l0aXZlUGF0dGVybiI6MCwiUG9zaXRpdmVJbmZpbml0eVN5bWJvbCI6IkluZmluaXR5IiwiUG9zaXRpdmVTaWduIjoiKyIsIlBlcmNlbnREZWNpbWFsRGlnaXRzIjoyLCJQZXJjZW50RGVjaW1hbFNlcGFyYXRvciI6Ii4iLCJQZXJjZW50R3JvdXBTZXBhcmF0b3IiOiIsIiwiUGVyY2VudFN5bWJvbCI6IiUiLCJQZXJNaWxsZVN5bWJvbCI6Ilx1MjAzMCIsIk5hdGl2ZURpZ2l0cyI6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5Il0sIkRpZ2l0U3Vic3RpdHV0aW9uIjoxfSwiZGF0ZVRpbWVGb3JtYXQiOnsiQU1EZXNpZ25hdG9yIjoiQU0iLCJDYWxlbmRhciI6eyJNaW5TdXBwb3J0ZWREYXRlVGltZSI6IkAtNjIxMzU1NjgwMDAwMDBAIiwiTWF4U3VwcG9ydGVkRGF0ZVRpbWUiOiJAMjUzNDAyMzAwNzk5OTk5QCIsIkFsZ29yaXRobVR5cGUiOjEsIkNhbGVuZGFyVHlwZSI6MSwiRXJhcyI6WzFdLCJUd29EaWdpdFllYXJNYXgiOjIwMjksIklzUmVhZE9ubHkiOmZhbHNlfSwiRGF0ZVNlcGFyYXRvciI6Ii8iLCJGaXJzdERheU9mV2VlayI6MCwiQ2FsZW5kYXJXZWVrUnVsZSI6MCwiRnVsbERhdGVUaW1lUGF0dGVybiI6ImRkZGQsIE1NTU0gZGQsIHl5eXkgaDptbTpzcyB0dCIsIkxvbmdEYXRlUGF0dGVybiI6ImRkZGQsIE1NTU0gZGQsIHl5eXkiLCJMb25nVGltZVBhdHRlcm4iOiJoOm1tOnNzIHR0IiwiTW9udGhEYXlQYXR0ZXJuIjoiTU1NTSBkZCIsIlBNRGVzaWduYXRvciI6IlBNIiwiUkZDMTEyM1BhdHRlcm4iOiJkZGQsIGRkIE1NTSB5eXl5IEhIJzonbW0nOidzcyAnR01UJyIsIlNob3J0RGF0ZVBhdHRlcm4iOiJNL2QveXl5eSIsIlNob3J0VGltZVBhdHRlcm4iOiJoOm1tIHR0IiwiU29ydGFibGVEYXRlVGltZVBhdHRlcm4iOiJ5eXl5Jy0nTU0nLSdkZCdUJ0hIJzonbW0nOidzcyIsIlRpbWVTZXBhcmF0b3IiOiI6IiwiVW5pdmVyc2FsU29ydGFibGVEYXRlVGltZVBhdHRlcm4iOiJ5eXl5Jy0nTU0nLSdkZCBISCc6J21tJzonc3MnWiciLCJZZWFyTW9udGhQYXR0ZXJuIjoiTU1NTSwgeXl5eSIsIkFiYnJldmlhdGVkRGF5TmFtZXMiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sIlNob3J0ZXN0RGF5TmFtZXMiOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSwiRGF5TmFtZXMiOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSwiQWJicmV2aWF0ZWRNb250aE5hbWVzIjpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyIsIiJdLCJNb250aE5hbWVzIjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIiwiIl0sIklzUmVhZE9ubHkiOmZhbHNlLCJOYXRpdmVDYWxlbmRhck5hbWUiOiJHcmVnb3JpYW4gQ2FsZW5kYXIiLCJBYmJyZXZpYXRlZE1vbnRoR2VuaXRpdmVOYW1lcyI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiLCIiXSwiTW9udGhHZW5pdGl2ZU5hbWVzIjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIiwiIl19LCJlcmFzIjpbMSwiQS5ELiIsbnVsbCwwXX0pO1R5cGUucmVnaXN0ZXJOYW1lc3BhY2UoIlN5cy5TZXJpYWxpemF0aW9uIik7U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXI9ZnVuY3Rpb24oKXt9O1N5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLnJlZ2lzdGVyQ2xhc3MoIlN5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyIik7U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX2NoYXJzVG9Fc2NhcGVSZWdFeHM9W107U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX2NoYXJzVG9Fc2NhcGU9W107U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX2RhdGVSZWdFeD1uZXcgUmVnRXhwKCcoXnxbXlxcXFxdKVxcIlxcXFwvRGF0ZVxcKCgtP1swLTldKykoPzpbYS16QS1aXXwoPzpcXCt8LSlbMC05XXs0fSk/XFwpXFxcXC9cXCInLCJnIik7U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX2VzY2FwZUNoYXJzPXt9O1N5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9lc2NhcGVSZWdFeD1uZXcgUmVnRXhwKCdbIlxcXFxcXHgwMC1cXHgxRl0nLCJpIik7U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX2VzY2FwZVJlZ0V4R2xvYmFsPW5ldyBSZWdFeHAoJ1siXFxcXFxceDAwLVxceDFGXScsImciKTtTeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5fanNvblJlZ0V4PW5ldyBSZWdFeHAoIlteLDp7fVxcW1xcXTAtOS5cXC0rRWFlZmxuci11IFxcblxcclxcdF0iLCJnIik7U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX2pzb25TdHJpbmdSZWdFeD1uZXcgUmVnRXhwKCciKFxcXFwufFteIlxcXFxdKSoiJywiZyIpO1N5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9zZXJ2ZXJUeXBlRmllbGROYW1lPSJfX3R5cGUiO1N5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9pbml0PWZ1bmN0aW9uKCl7dmFyIGM9WyJcXHUwMDAwIiwiXFx1MDAwMSIsIlxcdTAwMDIiLCJcXHUwMDAzIiwiXFx1MDAwNCIsIlxcdTAwMDUiLCJcXHUwMDA2IiwiXFx1MDAwNyIsIlxcYiIsIlxcdCIsIlxcbiIsIlxcdTAwMGIiLCJcXGYiLCJcXHIiLCJcXHUwMDBlIiwiXFx1MDAwZiIsIlxcdTAwMTAiLCJcXHUwMDExIiwiXFx1MDAxMiIsIlxcdTAwMTMiLCJcXHUwMDE0IiwiXFx1MDAxNSIsIlxcdTAwMTYiLCJcXHUwMDE3IiwiXFx1MDAxOCIsIlxcdTAwMTkiLCJcXHUwMDFhIiwiXFx1MDAxYiIsIlxcdTAwMWMiLCJcXHUwMDFkIiwiXFx1MDAxZSIsIlxcdTAwMWYiXTtTeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5fY2hhcnNUb0VzY2FwZVswXT0iXFwiO1N5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9jaGFyc1RvRXNjYXBlUmVnRXhzWyJcXCJdPW5ldyBSZWdFeHAoIlxcXFwiLCJnIik7U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX2VzY2FwZUNoYXJzWyJcXCJdPSJcXFxcIjtTeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5fY2hhcnNUb0VzY2FwZVsxXT0nIic7U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX2NoYXJzVG9Fc2NhcGVSZWdFeHNbJyInXT1uZXcgUmVnRXhwKCciJywiZyIpO1N5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9lc2NhcGVDaGFyc1snIiddPSdcXCInO2Zvcih2YXIgYT0wO2E8MzI7YSsrKXt2YXIgYj1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpO1N5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9jaGFyc1RvRXNjYXBlW2ErMl09YjtTeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5fY2hhcnNUb0VzY2FwZVJlZ0V4c1tiXT1uZXcgUmVnRXhwKGIsImciKTtTeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5fZXNjYXBlQ2hhcnNbYl09Y1thXX19O1N5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9zZXJpYWxpemVCb29sZWFuV2l0aEJ1aWxkZXI9ZnVuY3Rpb24oYixhKXthLmFwcGVuZChiLnRvU3RyaW5nKCkpfTtTeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5fc2VyaWFsaXplTnVtYmVyV2l0aEJ1aWxkZXI9ZnVuY3Rpb24oYSxiKXtpZihpc0Zpbml0ZShhKSliLmFwcGVuZChTdHJpbmcoYSkpO2Vsc2UgdGhyb3cgRXJyb3IuaW52YWxpZE9wZXJhdGlvbihTeXMuUmVzLmNhbm5vdFNlcmlhbGl6ZU5vbkZpbml0ZU51bWJlcnMpfTtTeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5fc2VyaWFsaXplU3RyaW5nV2l0aEJ1aWxkZXI9ZnVuY3Rpb24oYSxjKXtjLmFwcGVuZCgnIicpO2lmKFN5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9lc2NhcGVSZWdFeC50ZXN0KGEpKXtpZihTeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5fY2hhcnNUb0VzY2FwZS5sZW5ndGg9PT0wKVN5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9pbml0KCk7aWYoYS5sZW5ndGg8MTI4KWE9YS5yZXBsYWNlKFN5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9lc2NhcGVSZWdFeEdsb2JhbCxmdW5jdGlvbihhKXtyZXR1cm4gU3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX2VzY2FwZUNoYXJzW2FdfSk7ZWxzZSBmb3IodmFyIGQ9MDtkPDM0O2QrKyl7dmFyIGI9U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX2NoYXJzVG9Fc2NhcGVbZF07aWYoYS5pbmRleE9mKGIpIT09LTEpaWYoU3lzLkJyb3dzZXIuYWdlbnQ9PT1TeXMuQnJvd3Nlci5PcGVyYXx8U3lzLkJyb3dzZXIuYWdlbnQ9PT1TeXMuQnJvd3Nlci5GaXJlRm94KWE9YS5zcGxpdChiKS5qb2luKFN5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9lc2NhcGVDaGFyc1tiXSk7ZWxzZSBhPWEucmVwbGFjZShTeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5fY2hhcnNUb0VzY2FwZVJlZ0V4c1tiXSxTeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5fZXNjYXBlQ2hhcnNbYl0pfX1jLmFwcGVuZChhKTtjLmFwcGVuZCgnIicpfTtTeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5fc2VyaWFsaXplV2l0aEJ1aWxkZXI9ZnVuY3Rpb24oYixhLGksZyl7dmFyIGM7c3dpdGNoKHR5cGVvZiBiKXtjYXNlICJvYmplY3QiOmlmKGIpaWYoTnVtYmVyLmlzSW5zdGFuY2VPZlR5cGUoYikpU3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX3NlcmlhbGl6ZU51bWJlcldpdGhCdWlsZGVyKGIsYSk7ZWxzZSBpZihCb29sZWFuLmlzSW5zdGFuY2VPZlR5cGUoYikpU3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX3NlcmlhbGl6ZUJvb2xlYW5XaXRoQnVpbGRlcihiLGEpO2Vsc2UgaWYoU3RyaW5nLmlzSW5zdGFuY2VPZlR5cGUoYikpU3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX3NlcmlhbGl6ZVN0cmluZ1dpdGhCdWlsZGVyKGIsYSk7ZWxzZSBpZihBcnJheS5pc0luc3RhbmNlT2ZUeXBlKGIpKXthLmFwcGVuZCgiWyIpO2ZvcihjPTA7YzxiLmxlbmd0aDsrK2Mpe2lmKGM+MClhLmFwcGVuZCgiLCIpO1N5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9zZXJpYWxpemVXaXRoQnVpbGRlcihiW2NdLGEsZmFsc2UsZyl9YS5hcHBlbmQoIl0iKX1lbHNle2lmKERhdGUuaXNJbnN0YW5jZU9mVHlwZShiKSl7YS5hcHBlbmQoJyJcXC9EYXRlKCcpO2EuYXBwZW5kKGIuZ2V0VGltZSgpKTthLmFwcGVuZCgnKVxcLyInKTticmVha312YXIgZD1bXSxmPTA7Zm9yKHZhciBlIGluIGIpe2lmKGUuc3RhcnRzV2l0aCgiJCIpKWNvbnRpbnVlO2lmKGU9PT1TeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5fc2VydmVyVHlwZUZpZWxkTmFtZSYmZiE9PTApe2RbZisrXT1kWzBdO2RbMF09ZX1lbHNlIGRbZisrXT1lfWlmKGkpZC5zb3J0KCk7YS5hcHBlbmQoInsiKTt2YXIgaj1mYWxzZTtmb3IoYz0wO2M8ZjtjKyspe3ZhciBoPWJbZFtjXV07aWYodHlwZW9mIGghPT0idW5kZWZpbmVkIiYmdHlwZW9mIGghPT0iZnVuY3Rpb24iKXtpZihqKWEuYXBwZW5kKCIsIik7ZWxzZSBqPXRydWU7U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX3NlcmlhbGl6ZVdpdGhCdWlsZGVyKGRbY10sYSxpLGcpO2EuYXBwZW5kKCI6Iik7U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX3NlcmlhbGl6ZVdpdGhCdWlsZGVyKGgsYSxpLGcpfX1hLmFwcGVuZCgifSIpfWVsc2UgYS5hcHBlbmQoIm51bGwiKTticmVhaztjYXNlICJudW1iZXIiOlN5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9zZXJpYWxpemVOdW1iZXJXaXRoQnVpbGRlcihiLGEpO2JyZWFrO2Nhc2UgInN0cmluZyI6U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX3NlcmlhbGl6ZVN0cmluZ1dpdGhCdWlsZGVyKGIsYSk7YnJlYWs7Y2FzZSAiYm9vbGVhbiI6U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX3NlcmlhbGl6ZUJvb2xlYW5XaXRoQnVpbGRlcihiLGEpO2JyZWFrO2RlZmF1bHQ6YS5hcHBlbmQoIm51bGwiKX19O1N5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLnNlcmlhbGl6ZT1mdW5jdGlvbihiKXt2YXIgYT1uZXcgU3lzLlN0cmluZ0J1aWxkZXI7U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX3NlcmlhbGl6ZVdpdGhCdWlsZGVyKGIsYSxmYWxzZSk7cmV0dXJuIGEudG9TdHJpbmcoKX07U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuZGVzZXJpYWxpemU9ZnVuY3Rpb24oZGF0YSxzZWN1cmUpe2lmKGRhdGEubGVuZ3RoPT09MCl0aHJvdyBFcnJvci5hcmd1bWVudCgiZGF0YSIsU3lzLlJlcy5jYW5ub3REZXNlcmlhbGl6ZUVtcHR5U3RyaW5nKTt0cnl7dmFyIGV4cD1kYXRhLnJlcGxhY2UoU3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuX2RhdGVSZWdFeCwiJDFuZXcgRGF0ZSgkMikiKTtpZihzZWN1cmUmJlN5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLl9qc29uUmVnRXgudGVzdChleHAucmVwbGFjZShTeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5fanNvblN0cmluZ1JlZ0V4LCIiKSkpdGhyb3cgbnVsbDtyZXR1cm4gZXZhbCgiKCIrZXhwKyIpIil9Y2F0Y2goYSl7dGhyb3cgRXJyb3IuYXJndW1lbnQoImRhdGEiLFN5cy5SZXMuY2Fubm90RGVzZXJpYWxpemVJbnZhbGlkSnNvbil9fTtUeXBlLnJlZ2lzdGVyTmFtZXNwYWNlKCJTeXMuVUkiKTtTeXMuRXZlbnRIYW5kbGVyTGlzdD1mdW5jdGlvbigpe3RoaXMuX2xpc3Q9e319O1N5cy5FdmVudEhhbmRsZXJMaXN0LnByb3RvdHlwZT17X2FkZEhhbmRsZXI6ZnVuY3Rpb24oYixhKXtBcnJheS5hZGQodGhpcy5fZ2V0RXZlbnQoYix0cnVlKSxhKX0sYWRkSGFuZGxlcjpmdW5jdGlvbihiLGEpe3RoaXMuX2FkZEhhbmRsZXIoYixhKX0sX3JlbW92ZUhhbmRsZXI6ZnVuY3Rpb24oYyxiKXt2YXIgYT10aGlzLl9nZXRFdmVudChjKTtpZighYSlyZXR1cm47QXJyYXkucmVtb3ZlKGEsYil9LHJlbW92ZUhhbmRsZXI6ZnVuY3Rpb24oYixhKXt0aGlzLl9yZW1vdmVIYW5kbGVyKGIsYSl9LGdldEhhbmRsZXI6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5fZ2V0RXZlbnQoYik7aWYoIWF8fGEubGVuZ3RoPT09MClyZXR1cm4gbnVsbDthPUFycmF5LmNsb25lKGEpO3JldHVybiBmdW5jdGlvbihjLGQpe2Zvcih2YXIgYj0wLGU9YS5sZW5ndGg7YjxlO2IrKylhW2JdKGMsZCl9fSxfZ2V0RXZlbnQ6ZnVuY3Rpb24oYSxiKXtpZighdGhpcy5fbGlzdFthXSl7aWYoIWIpcmV0dXJuIG51bGw7dGhpcy5fbGlzdFthXT1bXX1yZXR1cm4gdGhpcy5fbGlzdFthXX19O1N5cy5FdmVudEhhbmRsZXJMaXN0LnJlZ2lzdGVyQ2xhc3MoIlN5cy5FdmVudEhhbmRsZXJMaXN0Iik7U3lzLkNvbW1hbmRFdmVudEFyZ3M9ZnVuY3Rpb24oYyxhLGIpe1N5cy5Db21tYW5kRXZlbnRBcmdzLmluaXRpYWxpemVCYXNlKHRoaXMpO3RoaXMuX2NvbW1hbmROYW1lPWM7dGhpcy5fY29tbWFuZEFyZ3VtZW50PWE7dGhpcy5fY29tbWFuZFNvdXJjZT1ifTtTeXMuQ29tbWFuZEV2ZW50QXJncy5wcm90b3R5cGU9e19jb21tYW5kTmFtZTpudWxsLF9jb21tYW5kQXJndW1lbnQ6bnVsbCxfY29tbWFuZFNvdXJjZTpudWxsLGdldF9jb21tYW5kTmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21tYW5kTmFtZX0sZ2V0X2NvbW1hbmRBcmd1bWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21tYW5kQXJndW1lbnR9LGdldF9jb21tYW5kU291cmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbW1hbmRTb3VyY2V9fTtTeXMuQ29tbWFuZEV2ZW50QXJncy5yZWdpc3RlckNsYXNzKCJTeXMuQ29tbWFuZEV2ZW50QXJncyIsU3lzLkNhbmNlbEV2ZW50QXJncyk7U3lzLklOb3RpZnlQcm9wZXJ0eUNoYW5nZT1mdW5jdGlvbigpe307U3lzLklOb3RpZnlQcm9wZXJ0eUNoYW5nZS5wcm90b3R5cGU9e307U3lzLklOb3RpZnlQcm9wZXJ0eUNoYW5nZS5yZWdpc3RlckludGVyZmFjZSgiU3lzLklOb3RpZnlQcm9wZXJ0eUNoYW5nZSIpO1N5cy5Qcm9wZXJ0eUNoYW5nZWRFdmVudEFyZ3M9ZnVuY3Rpb24oYSl7U3lzLlByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncy5pbml0aWFsaXplQmFzZSh0aGlzKTt0aGlzLl9wcm9wZXJ0eU5hbWU9YX07U3lzLlByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncy5wcm90b3R5cGU9e2dldF9wcm9wZXJ0eU5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJvcGVydHlOYW1lfX07U3lzLlByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncy5yZWdpc3RlckNsYXNzKCJTeXMuUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzIixTeXMuRXZlbnRBcmdzKTtTeXMuSU5vdGlmeURpc3Bvc2luZz1mdW5jdGlvbigpe307U3lzLklOb3RpZnlEaXNwb3NpbmcucHJvdG90eXBlPXt9O1N5cy5JTm90aWZ5RGlzcG9zaW5nLnJlZ2lzdGVySW50ZXJmYWNlKCJTeXMuSU5vdGlmeURpc3Bvc2luZyIpO1N5cy5Db21wb25lbnQ9ZnVuY3Rpb24oKXtpZihTeXMuQXBwbGljYXRpb24pU3lzLkFwcGxpY2F0aW9uLnJlZ2lzdGVyRGlzcG9zYWJsZU9iamVjdCh0aGlzKX07U3lzLkNvbXBvbmVudC5wcm90b3R5cGU9e19pZDpudWxsLF9pbml0aWFsaXplZDpmYWxzZSxfdXBkYXRpbmc6ZmFsc2UsZ2V0X2V2ZW50czpmdW5jdGlvbigpe2lmKCF0aGlzLl9ldmVudHMpdGhpcy5fZXZlbnRzPW5ldyBTeXMuRXZlbnRIYW5kbGVyTGlzdDtyZXR1cm4gdGhpcy5fZXZlbnRzfSxnZXRfaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faWR9LHNldF9pZDpmdW5jdGlvbihhKXt0aGlzLl9pZD1hfSxnZXRfaXNJbml0aWFsaXplZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbml0aWFsaXplZH0sZ2V0X2lzVXBkYXRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRpbmd9LGFkZF9kaXNwb3Npbmc6ZnVuY3Rpb24oYSl7dGhpcy5nZXRfZXZlbnRzKCkuYWRkSGFuZGxlcigiZGlzcG9zaW5nIixhKX0scmVtb3ZlX2Rpc3Bvc2luZzpmdW5jdGlvbihhKXt0aGlzLmdldF9ldmVudHMoKS5yZW1vdmVIYW5kbGVyKCJkaXNwb3NpbmciLGEpfSxhZGRfcHJvcGVydHlDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZ2V0X2V2ZW50cygpLmFkZEhhbmRsZXIoInByb3BlcnR5Q2hhbmdlZCIsYSl9LHJlbW92ZV9wcm9wZXJ0eUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5nZXRfZXZlbnRzKCkucmVtb3ZlSGFuZGxlcigicHJvcGVydHlDaGFuZ2VkIixhKX0sYmVnaW5VcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGluZz10cnVlfSxkaXNwb3NlOmZ1bmN0aW9uKCl7aWYodGhpcy5fZXZlbnRzKXt2YXIgYT10aGlzLl9ldmVudHMuZ2V0SGFuZGxlcigiZGlzcG9zaW5nIik7aWYoYSlhKHRoaXMsU3lzLkV2ZW50QXJncy5FbXB0eSl9ZGVsZXRlIHRoaXMuX2V2ZW50cztTeXMuQXBwbGljYXRpb24udW5yZWdpc3RlckRpc3Bvc2FibGVPYmplY3QodGhpcyk7U3lzLkFwcGxpY2F0aW9uLnJlbW92ZUNvbXBvbmVudCh0aGlzKX0sZW5kVXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRpbmc9ZmFsc2U7aWYoIXRoaXMuX2luaXRpYWxpemVkKXRoaXMuaW5pdGlhbGl6ZSgpO3RoaXMudXBkYXRlZCgpfSxpbml0aWFsaXplOmZ1bmN0aW9uKCl7dGhpcy5faW5pdGlhbGl6ZWQ9dHJ1ZX0scmFpc2VQcm9wZXJ0eUNoYW5nZWQ6ZnVuY3Rpb24oYil7aWYoIXRoaXMuX2V2ZW50cylyZXR1cm47dmFyIGE9dGhpcy5fZXZlbnRzLmdldEhhbmRsZXIoInByb3BlcnR5Q2hhbmdlZCIpO2lmKGEpYSh0aGlzLG5ldyBTeXMuUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzKGIpKX0sdXBkYXRlZDpmdW5jdGlvbigpe319O1N5cy5Db21wb25lbnQucmVnaXN0ZXJDbGFzcygiU3lzLkNvbXBvbmVudCIsbnVsbCxTeXMuSURpc3Bvc2FibGUsU3lzLklOb3RpZnlQcm9wZXJ0eUNoYW5nZSxTeXMuSU5vdGlmeURpc3Bvc2luZyk7ZnVuY3Rpb24gU3lzJENvbXBvbmVudCRfc2V0UHJvcGVydGllcyhhLGkpe3ZhciBkLGo9T2JqZWN0LmdldFR5cGUoYSksZT1qPT09T2JqZWN0fHxqPT09U3lzLlVJLkRvbUVsZW1lbnQsaD1TeXMuQ29tcG9uZW50LmlzSW5zdGFuY2VPZlR5cGUoYSkmJiFhLmdldF9pc1VwZGF0aW5nKCk7aWYoaClhLmJlZ2luVXBkYXRlKCk7Zm9yKHZhciBjIGluIGkpe3ZhciBiPWlbY10sZj1lP251bGw6YVsiZ2V0XyIrY107aWYoZXx8dHlwZW9mIGYhPT0iZnVuY3Rpb24iKXt2YXIgaz1hW2NdO2lmKCFifHx0eXBlb2YgYiE9PSJvYmplY3QifHxlJiYhaylhW2NdPWI7ZWxzZSBTeXMkQ29tcG9uZW50JF9zZXRQcm9wZXJ0aWVzKGssYil9ZWxzZXt2YXIgbD1hWyJzZXRfIitjXTtpZih0eXBlb2YgbD09PSJmdW5jdGlvbiIpbC5hcHBseShhLFtiXSk7ZWxzZSBpZihiIGluc3RhbmNlb2YgQXJyYXkpe2Q9Zi5hcHBseShhKTtmb3IodmFyIGc9MCxtPWQubGVuZ3RoLG49Yi5sZW5ndGg7ZzxuO2crKyxtKyspZFttXT1iW2ddfWVsc2UgaWYodHlwZW9mIGI9PT0ib2JqZWN0IiYmT2JqZWN0LmdldFR5cGUoYik9PT1PYmplY3Qpe2Q9Zi5hcHBseShhKTtTeXMkQ29tcG9uZW50JF9zZXRQcm9wZXJ0aWVzKGQsYil9fX1pZihoKWEuZW5kVXBkYXRlKCl9ZnVuY3Rpb24gU3lzJENvbXBvbmVudCRfc2V0UmVmZXJlbmNlcyhjLGIpe2Zvcih2YXIgYSBpbiBiKXt2YXIgZT1jWyJzZXRfIithXSxkPSRmaW5kKGJbYV0pO2UuYXBwbHkoYyxbZF0pfX12YXIgJGNyZWF0ZT1TeXMuQ29tcG9uZW50LmNyZWF0ZT1mdW5jdGlvbihoLGYsZCxjLGcpe3ZhciBhPWc/bmV3IGgoZyk6bmV3IGgsYj1TeXMuQXBwbGljYXRpb24saT1iLmdldF9pc0NyZWF0aW5nQ29tcG9uZW50cygpO2EuYmVnaW5VcGRhdGUoKTtpZihmKVN5cyRDb21wb25lbnQkX3NldFByb3BlcnRpZXMoYSxmKTtpZihkKWZvcih2YXIgZSBpbiBkKWFbImFkZF8iK2VdKGRbZV0pO2lmKGEuZ2V0X2lkKCkpYi5hZGRDb21wb25lbnQoYSk7aWYoaSl7Yi5fY3JlYXRlZENvbXBvbmVudHNbYi5fY3JlYXRlZENvbXBvbmVudHMubGVuZ3RoXT1hO2lmKGMpYi5fYWRkQ29tcG9uZW50VG9TZWNvbmRQYXNzKGEsYyk7ZWxzZSBhLmVuZFVwZGF0ZSgpfWVsc2V7aWYoYylTeXMkQ29tcG9uZW50JF9zZXRSZWZlcmVuY2VzKGEsYyk7YS5lbmRVcGRhdGUoKX1yZXR1cm4gYX07U3lzLlVJLk1vdXNlQnV0dG9uPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3Iubm90SW1wbGVtZW50ZWQoKX07U3lzLlVJLk1vdXNlQnV0dG9uLnByb3RvdHlwZT17bGVmdEJ1dHRvbjowLG1pZGRsZUJ1dHRvbjoxLHJpZ2h0QnV0dG9uOjJ9O1N5cy5VSS5Nb3VzZUJ1dHRvbi5yZWdpc3RlckVudW0oIlN5cy5VSS5Nb3VzZUJ1dHRvbiIpO1N5cy5VSS5LZXk9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvci5ub3RJbXBsZW1lbnRlZCgpfTtTeXMuVUkuS2V5LnByb3RvdHlwZT17YmFja3NwYWNlOjgsdGFiOjksZW50ZXI6MTMsZXNjOjI3LHNwYWNlOjMyLHBhZ2VVcDozMyxwYWdlRG93bjozNCxlbmQ6MzUsaG9tZTozNixsZWZ0OjM3LHVwOjM4LHJpZ2h0OjM5LGRvd246NDAsZGVsOjEyN307U3lzLlVJLktleS5yZWdpc3RlckVudW0oIlN5cy5VSS5LZXkiKTtTeXMuVUkuUG9pbnQ9ZnVuY3Rpb24oYSxiKXt0aGlzLnJhd1g9YTt0aGlzLnJhd1k9Yjt0aGlzLng9TWF0aC5yb3VuZChhKTt0aGlzLnk9TWF0aC5yb3VuZChiKX07U3lzLlVJLlBvaW50LnJlZ2lzdGVyQ2xhc3MoIlN5cy5VSS5Qb2ludCIpO1N5cy5VSS5Cb3VuZHM9ZnVuY3Rpb24oYyxkLGIsYSl7dGhpcy54PWM7dGhpcy55PWQ7dGhpcy5oZWlnaHQ9YTt0aGlzLndpZHRoPWJ9O1N5cy5VSS5Cb3VuZHMucmVnaXN0ZXJDbGFzcygiU3lzLlVJLkJvdW5kcyIpO1N5cy5VSS5Eb21FdmVudD1mdW5jdGlvbihlKXt2YXIgYT1lLGI9dGhpcy50eXBlPWEudHlwZS50b0xvd2VyQ2FzZSgpO3RoaXMucmF3RXZlbnQ9YTt0aGlzLmFsdEtleT1hLmFsdEtleTtpZih0eXBlb2YgYS5idXR0b24hPT0idW5kZWZpbmVkIil0aGlzLmJ1dHRvbj10eXBlb2YgYS53aGljaCE9PSJ1bmRlZmluZWQiP2EuYnV0dG9uOmEuYnV0dG9uPT09ND9TeXMuVUkuTW91c2VCdXR0b24ubWlkZGxlQnV0dG9uOmEuYnV0dG9uPT09Mj9TeXMuVUkuTW91c2VCdXR0b24ucmlnaHRCdXR0b246U3lzLlVJLk1vdXNlQnV0dG9uLmxlZnRCdXR0b247aWYoYj09PSJrZXlwcmVzcyIpdGhpcy5jaGFyQ29kZT1hLmNoYXJDb2RlfHxhLmtleUNvZGU7ZWxzZSBpZihhLmtleUNvZGUmJmEua2V5Q29kZT09PTQ2KXRoaXMua2V5Q29kZT0xMjc7ZWxzZSB0aGlzLmtleUNvZGU9YS5rZXlDb2RlO3RoaXMuY2xpZW50WD1hLmNsaWVudFg7dGhpcy5jbGllbnRZPWEuY2xpZW50WTt0aGlzLmN0cmxLZXk9YS5jdHJsS2V5O3RoaXMudGFyZ2V0PWEudGFyZ2V0P2EudGFyZ2V0OmEuc3JjRWxlbWVudDtpZighYi5zdGFydHNXaXRoKCJrZXkiKSlpZih0eXBlb2YgYS5vZmZzZXRYIT09InVuZGVmaW5lZCImJnR5cGVvZiBhLm9mZnNldFkhPT0idW5kZWZpbmVkIil7dGhpcy5vZmZzZXRYPWEub2Zmc2V0WDt0aGlzLm9mZnNldFk9YS5vZmZzZXRZfWVsc2UgaWYodGhpcy50YXJnZXQmJnRoaXMudGFyZ2V0Lm5vZGVUeXBlIT09MyYmdHlwZW9mIGEuY2xpZW50WD09PSJudW1iZXIiKXt2YXIgYz1TeXMuVUkuRG9tRWxlbWVudC5nZXRMb2NhdGlvbih0aGlzLnRhcmdldCksZD1TeXMuVUkuRG9tRWxlbWVudC5fZ2V0V2luZG93KHRoaXMudGFyZ2V0KTt0aGlzLm9mZnNldFg9KGQucGFnZVhPZmZzZXR8fDApK2EuY2xpZW50WC1jLng7dGhpcy5vZmZzZXRZPShkLnBhZ2VZT2Zmc2V0fHwwKSthLmNsaWVudFktYy55fXRoaXMuc2NyZWVuWD1hLnNjcmVlblg7dGhpcy5zY3JlZW5ZPWEuc2NyZWVuWTt0aGlzLnNoaWZ0S2V5PWEuc2hpZnRLZXl9O1N5cy5VSS5Eb21FdmVudC5wcm90b3R5cGU9e3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5yYXdFdmVudC5wcmV2ZW50RGVmYXVsdCl0aGlzLnJhd0V2ZW50LnByZXZlbnREZWZhdWx0KCk7ZWxzZSBpZih3aW5kb3cuZXZlbnQpdGhpcy5yYXdFdmVudC5yZXR1cm5WYWx1ZT1mYWxzZX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5yYXdFdmVudC5zdG9wUHJvcGFnYXRpb24pdGhpcy5yYXdFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtlbHNlIGlmKHdpbmRvdy5ldmVudCl0aGlzLnJhd0V2ZW50LmNhbmNlbEJ1YmJsZT10cnVlfX07U3lzLlVJLkRvbUV2ZW50LnJlZ2lzdGVyQ2xhc3MoIlN5cy5VSS5Eb21FdmVudCIpO3ZhciAkYWRkSGFuZGxlcj1TeXMuVUkuRG9tRXZlbnQuYWRkSGFuZGxlcj1mdW5jdGlvbihhLGQsZSxnKXtpZighYS5fZXZlbnRzKWEuX2V2ZW50cz17fTt2YXIgYz1hLl9ldmVudHNbZF07aWYoIWMpYS5fZXZlbnRzW2RdPWM9W107dmFyIGI7aWYoYS5hZGRFdmVudExpc3RlbmVyKXtiPWZ1bmN0aW9uKGIpe3JldHVybiBlLmNhbGwoYSxuZXcgU3lzLlVJLkRvbUV2ZW50KGIpKX07YS5hZGRFdmVudExpc3RlbmVyKGQsYixmYWxzZSl9ZWxzZSBpZihhLmF0dGFjaEV2ZW50KXtiPWZ1bmN0aW9uKCl7dmFyIGI9e307dHJ5e2I9U3lzLlVJLkRvbUVsZW1lbnQuX2dldFdpbmRvdyhhKS5ldmVudH1jYXRjaChjKXt9cmV0dXJuIGUuY2FsbChhLG5ldyBTeXMuVUkuRG9tRXZlbnQoYikpfTthLmF0dGFjaEV2ZW50KCJvbiIrZCxiKX1jW2MubGVuZ3RoXT17aGFuZGxlcjplLGJyb3dzZXJIYW5kbGVyOmIsYXV0b1JlbW92ZTpnfTtpZihnKXt2YXIgZj1hLmRpc3Bvc2U7aWYoZiE9PVN5cy5VSS5Eb21FdmVudC5fZGlzcG9zZUhhbmRsZXJzKXthLmRpc3Bvc2U9U3lzLlVJLkRvbUV2ZW50Ll9kaXNwb3NlSGFuZGxlcnM7aWYodHlwZW9mIGYhPT0idW5kZWZpbmVkIilhLl9jaGFpbkRpc3Bvc2U9Zn19fSwkYWRkSGFuZGxlcnM9U3lzLlVJLkRvbUV2ZW50LmFkZEhhbmRsZXJzPWZ1bmN0aW9uKGYsZCxjLGUpe2Zvcih2YXIgYiBpbiBkKXt2YXIgYT1kW2JdO2lmKGMpYT1GdW5jdGlvbi5jcmVhdGVEZWxlZ2F0ZShjLGEpOyRhZGRIYW5kbGVyKGYsYixhLGV8fGZhbHNlKX19LCRjbGVhckhhbmRsZXJzPVN5cy5VSS5Eb21FdmVudC5jbGVhckhhbmRsZXJzPWZ1bmN0aW9uKGEpe1N5cy5VSS5Eb21FdmVudC5fY2xlYXJIYW5kbGVycyhhLGZhbHNlKX07U3lzLlVJLkRvbUV2ZW50Ll9jbGVhckhhbmRsZXJzPWZ1bmN0aW9uKGEsZyl7aWYoYS5fZXZlbnRzKXt2YXIgZT1hLl9ldmVudHM7Zm9yKHZhciBiIGluIGUpe3ZhciBkPWVbYl07Zm9yKHZhciBjPWQubGVuZ3RoLTE7Yz49MDtjLS0pe3ZhciBmPWRbY107aWYoIWd8fGYuYXV0b1JlbW92ZSkkcmVtb3ZlSGFuZGxlcihhLGIsZi5oYW5kbGVyKX19YS5fZXZlbnRzPW51bGx9fTtTeXMuVUkuRG9tRXZlbnQuX2Rpc3Bvc2VIYW5kbGVycz1mdW5jdGlvbigpe1N5cy5VSS5Eb21FdmVudC5fY2xlYXJIYW5kbGVycyh0aGlzLHRydWUpO3ZhciBiPXRoaXMuX2NoYWluRGlzcG9zZSxhPXR5cGVvZiBiO2lmKGEhPT0idW5kZWZpbmVkIil7dGhpcy5kaXNwb3NlPWI7dGhpcy5fY2hhaW5EaXNwb3NlPW51bGw7aWYoYT09PSJmdW5jdGlvbiIpdGhpcy5kaXNwb3NlKCl9fTt2YXIgJHJlbW92ZUhhbmRsZXI9U3lzLlVJLkRvbUV2ZW50LnJlbW92ZUhhbmRsZXI9ZnVuY3Rpb24oYixhLGMpe1N5cy5VSS5Eb21FdmVudC5fcmVtb3ZlSGFuZGxlcihiLGEsYyl9O1N5cy5VSS5Eb21FdmVudC5fcmVtb3ZlSGFuZGxlcj1mdW5jdGlvbihhLGUsZil7dmFyIGQ9bnVsbCxjPWEuX2V2ZW50c1tlXTtmb3IodmFyIGI9MCxnPWMubGVuZ3RoO2I8ZztiKyspaWYoY1tiXS5oYW5kbGVyPT09Zil7ZD1jW2JdLmJyb3dzZXJIYW5kbGVyO2JyZWFrfWlmKGEucmVtb3ZlRXZlbnRMaXN0ZW5lcilhLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxkLGZhbHNlKTtlbHNlIGlmKGEuZGV0YWNoRXZlbnQpYS5kZXRhY2hFdmVudCgib24iK2UsZCk7Yy5zcGxpY2UoYiwxKX07U3lzLlVJLkRvbUVsZW1lbnQ9ZnVuY3Rpb24oKXt9O1N5cy5VSS5Eb21FbGVtZW50LnJlZ2lzdGVyQ2xhc3MoIlN5cy5VSS5Eb21FbGVtZW50Iik7U3lzLlVJLkRvbUVsZW1lbnQuYWRkQ3NzQ2xhc3M9ZnVuY3Rpb24oYSxiKXtpZighU3lzLlVJLkRvbUVsZW1lbnQuY29udGFpbnNDc3NDbGFzcyhhLGIpKWlmKGEuY2xhc3NOYW1lPT09IiIpYS5jbGFzc05hbWU9YjtlbHNlIGEuY2xhc3NOYW1lKz0iICIrYn07U3lzLlVJLkRvbUVsZW1lbnQuY29udGFpbnNDc3NDbGFzcz1mdW5jdGlvbihiLGEpe3JldHVybiBBcnJheS5jb250YWlucyhiLmNsYXNzTmFtZS5zcGxpdCgiICIpLGEpfTtTeXMuVUkuRG9tRWxlbWVudC5nZXRCb3VuZHM9ZnVuY3Rpb24oYSl7dmFyIGI9U3lzLlVJLkRvbUVsZW1lbnQuZ2V0TG9jYXRpb24oYSk7cmV0dXJuIG5ldyBTeXMuVUkuQm91bmRzKGIueCxiLnksYS5vZmZzZXRXaWR0aHx8MCxhLm9mZnNldEhlaWdodHx8MCl9O3ZhciAkZ2V0PVN5cy5VSS5Eb21FbGVtZW50LmdldEVsZW1lbnRCeUlkPWZ1bmN0aW9uKGYsZSl7aWYoIWUpcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpO2lmKGUuZ2V0RWxlbWVudEJ5SWQpcmV0dXJuIGUuZ2V0RWxlbWVudEJ5SWQoZik7dmFyIGM9W10sZD1lLmNoaWxkTm9kZXM7Zm9yKHZhciBiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciBhPWRbYl07aWYoYS5ub2RlVHlwZT09MSljW2MubGVuZ3RoXT1hfXdoaWxlKGMubGVuZ3RoKXthPWMuc2hpZnQoKTtpZihhLmlkPT1mKXJldHVybiBhO2Q9YS5jaGlsZE5vZGVzO2ZvcihiPTA7YjxkLmxlbmd0aDtiKyspe2E9ZFtiXTtpZihhLm5vZGVUeXBlPT0xKWNbYy5sZW5ndGhdPWF9fXJldHVybiBudWxsfTtpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KVN5cy5VSS5Eb21FbGVtZW50LmdldExvY2F0aW9uPWZ1bmN0aW9uKGEpe2lmKGEuc2VsZnx8YS5ub2RlVHlwZT09PTl8fGE9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGEucGFyZW50Tm9kZT09PWEub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpcmV0dXJuIG5ldyBTeXMuVUkuUG9pbnQoMCwwKTt2YXIgZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFmKXJldHVybiBuZXcgU3lzLlVJLlBvaW50KDAsMCk7dmFyIGU9YS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxoPWEub3duZXJEb2N1bWVudC5ib2R5LGwsYz1NYXRoLnJvdW5kKGYubGVmdCkrKGUuc2Nyb2xsTGVmdHx8aC5zY3JvbGxMZWZ0KSxkPU1hdGgucm91bmQoZi50b3ApKyhlLnNjcm9sbFRvcHx8aC5zY3JvbGxUb3ApO2lmKFN5cy5Ccm93c2VyLmFnZW50PT09U3lzLkJyb3dzZXIuSW50ZXJuZXRFeHBsb3Jlcil7dHJ5e3ZhciBnPWEub3duZXJEb2N1bWVudC5wYXJlbnRXaW5kb3cuZnJhbWVFbGVtZW50fHxudWxsO2lmKGcpe3ZhciBpPWcuZnJhbWVCb3JkZXI9PT0iMCJ8fGcuZnJhbWVCb3JkZXI9PT0ibm8iPzI6MDtjKz1pO2QrPWl9fWNhdGNoKG0pe31pZihTeXMuQnJvd3Nlci52ZXJzaW9uPT09NyYmIWRvY3VtZW50LmRvY3VtZW50TW9kZSl7dmFyIGo9ZG9jdW1lbnQuYm9keSxrPWouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYj0oay5yaWdodC1rLmxlZnQpL2ouY2xpZW50V2lkdGg7Yj1NYXRoLnJvdW5kKGIqMTAwKTtiPShiLWIlNSkvMTAwO2lmKCFpc05hTihiKSYmYiE9PTEpe2M9TWF0aC5yb3VuZChjL2IpO2Q9TWF0aC5yb3VuZChkL2IpfX1pZigoZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHwwKTw4KXtjLT1lLmNsaWVudExlZnQ7ZC09ZS5jbGllbnRUb3B9fXJldHVybiBuZXcgU3lzLlVJLlBvaW50KGMsZCl9O2Vsc2UgaWYoU3lzLkJyb3dzZXIuYWdlbnQ9PT1TeXMuQnJvd3Nlci5TYWZhcmkpU3lzLlVJLkRvbUVsZW1lbnQuZ2V0TG9jYXRpb249ZnVuY3Rpb24oYyl7aWYoYy53aW5kb3cmJmMud2luZG93PT09Y3x8Yy5ub2RlVHlwZT09PTkpcmV0dXJuIG5ldyBTeXMuVUkuUG9pbnQoMCwwKTt2YXIgZD0wLGU9MCxhLGo9bnVsbCxnPW51bGwsYjtmb3IoYT1jO2E7aj1hLChnPWIsYT1hLm9mZnNldFBhcmVudCkpe2I9U3lzLlVJLkRvbUVsZW1lbnQuX2dldEN1cnJlbnRTdHlsZShhKTt2YXIgZj1hLnRhZ05hbWU/YS50YWdOYW1lLnRvVXBwZXJDYXNlKCk6bnVsbDtpZigoYS5vZmZzZXRMZWZ0fHxhLm9mZnNldFRvcCkmJihmIT09IkJPRFkifHwoIWd8fGcucG9zaXRpb24hPT0iYWJzb2x1dGUiKSkpe2QrPWEub2Zmc2V0TGVmdDtlKz1hLm9mZnNldFRvcH1pZihqJiZTeXMuQnJvd3Nlci52ZXJzaW9uPj0zKXtkKz1wYXJzZUludChiLmJvcmRlckxlZnRXaWR0aCk7ZSs9cGFyc2VJbnQoYi5ib3JkZXJUb3BXaWR0aCl9fWI9U3lzLlVJLkRvbUVsZW1lbnQuX2dldEN1cnJlbnRTdHlsZShjKTt2YXIgaD1iP2IucG9zaXRpb246bnVsbDtpZighaHx8aCE9PSJhYnNvbHV0ZSIpZm9yKGE9Yy5wYXJlbnROb2RlO2E7YT1hLnBhcmVudE5vZGUpe2Y9YS50YWdOYW1lP2EudGFnTmFtZS50b1VwcGVyQ2FzZSgpOm51bGw7aWYoZiE9PSJCT0RZIiYmZiE9PSJIVE1MIiYmKGEuc2Nyb2xsTGVmdHx8YS5zY3JvbGxUb3ApKXtkLT1hLnNjcm9sbExlZnR8fDA7ZS09YS5zY3JvbGxUb3B8fDB9Yj1TeXMuVUkuRG9tRWxlbWVudC5fZ2V0Q3VycmVudFN0eWxlKGEpO3ZhciBpPWI/Yi5wb3NpdGlvbjpudWxsO2lmKGkmJmk9PT0iYWJzb2x1dGUiKWJyZWFrfXJldHVybiBuZXcgU3lzLlVJLlBvaW50KGQsZSl9O2Vsc2UgU3lzLlVJLkRvbUVsZW1lbnQuZ2V0TG9jYXRpb249ZnVuY3Rpb24oZCl7aWYoZC53aW5kb3cmJmQud2luZG93PT09ZHx8ZC5ub2RlVHlwZT09PTkpcmV0dXJuIG5ldyBTeXMuVUkuUG9pbnQoMCwwKTt2YXIgZT0wLGY9MCxhLGk9bnVsbCxnPW51bGwsYj1udWxsO2ZvcihhPWQ7YTtpPWEsKGc9YixhPWEub2Zmc2V0UGFyZW50KSl7dmFyIGM9YS50YWdOYW1lP2EudGFnTmFtZS50b1VwcGVyQ2FzZSgpOm51bGw7Yj1TeXMuVUkuRG9tRWxlbWVudC5fZ2V0Q3VycmVudFN0eWxlKGEpO2lmKChhLm9mZnNldExlZnR8fGEub2Zmc2V0VG9wKSYmIShjPT09IkJPRFkiJiYoIWd8fGcucG9zaXRpb24hPT0iYWJzb2x1dGUiKSkpe2UrPWEub2Zmc2V0TGVmdDtmKz1hLm9mZnNldFRvcH1pZihpIT09bnVsbCYmYil7aWYoYyE9PSJUQUJMRSImJmMhPT0iVEQiJiZjIT09IkhUTUwiKXtlKz1wYXJzZUludChiLmJvcmRlckxlZnRXaWR0aCl8fDA7Zis9cGFyc2VJbnQoYi5ib3JkZXJUb3BXaWR0aCl8fDB9aWYoYz09PSJUQUJMRSImJihiLnBvc2l0aW9uPT09InJlbGF0aXZlInx8Yi5wb3NpdGlvbj09PSJhYnNvbHV0ZSIpKXtlKz1wYXJzZUludChiLm1hcmdpbkxlZnQpfHwwO2YrPXBhcnNlSW50KGIubWFyZ2luVG9wKXx8MH19fWI9U3lzLlVJLkRvbUVsZW1lbnQuX2dldEN1cnJlbnRTdHlsZShkKTt2YXIgaD1iP2IucG9zaXRpb246bnVsbDtpZighaHx8aCE9PSJhYnNvbHV0ZSIpZm9yKGE9ZC5wYXJlbnROb2RlO2E7YT1hLnBhcmVudE5vZGUpe2M9YS50YWdOYW1lP2EudGFnTmFtZS50b1VwcGVyQ2FzZSgpOm51bGw7aWYoYyE9PSJCT0RZIiYmYyE9PSJIVE1MIiYmKGEuc2Nyb2xsTGVmdHx8YS5zY3JvbGxUb3ApKXtlLT1hLnNjcm9sbExlZnR8fDA7Zi09YS5zY3JvbGxUb3B8fDA7Yj1TeXMuVUkuRG9tRWxlbWVudC5fZ2V0Q3VycmVudFN0eWxlKGEpO2lmKGIpe2UrPXBhcnNlSW50KGIuYm9yZGVyTGVmdFdpZHRoKXx8MDtmKz1wYXJzZUludChiLmJvcmRlclRvcFdpZHRoKXx8MH19fXJldHVybiBuZXcgU3lzLlVJLlBvaW50KGUsZil9O1N5cy5VSS5Eb21FbGVtZW50LmlzRG9tRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gU3lzLl9pc0RvbUVsZW1lbnQoYSl9O1N5cy5VSS5Eb21FbGVtZW50LnJlbW92ZUNzc0NsYXNzPWZ1bmN0aW9uKGQsYyl7dmFyIGE9IiAiK2QuY2xhc3NOYW1lKyIgIixiPWEuaW5kZXhPZigiICIrYysiICIpO2lmKGI+PTApZC5jbGFzc05hbWU9KGEuc3Vic3RyKDAsYikrIiAiK2Euc3Vic3RyaW5nKGIrYy5sZW5ndGgrMSxhLmxlbmd0aCkpLnRyaW0oKX07U3lzLlVJLkRvbUVsZW1lbnQucmVzb2x2ZUVsZW1lbnQ9ZnVuY3Rpb24oYixjKXt2YXIgYT1iO2lmKCFhKXJldHVybiBudWxsO2lmKHR5cGVvZiBhPT09InN0cmluZyIpYT1TeXMuVUkuRG9tRWxlbWVudC5nZXRFbGVtZW50QnlJZChhLGMpO3JldHVybiBhfTtTeXMuVUkuRG9tRWxlbWVudC5yYWlzZUJ1YmJsZUV2ZW50PWZ1bmN0aW9uKGMsZCl7dmFyIGI9Yzt3aGlsZShiKXt2YXIgYT1iLmNvbnRyb2w7aWYoYSYmYS5vbkJ1YmJsZUV2ZW50JiZhLnJhaXNlQnViYmxlRXZlbnQpe1N5cy5VSS5Eb21FbGVtZW50Ll9yYWlzZUJ1YmJsZUV2ZW50RnJvbUNvbnRyb2woYSxjLGQpO3JldHVybn1iPWIucGFyZW50Tm9kZX19O1N5cy5VSS5Eb21FbGVtZW50Ll9yYWlzZUJ1YmJsZUV2ZW50RnJvbUNvbnRyb2w9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhLm9uQnViYmxlRXZlbnQoYixjKSlhLl9yYWlzZUJ1YmJsZUV2ZW50KGIsYyl9O1N5cy5VSS5Eb21FbGVtZW50LnNldExvY2F0aW9uPWZ1bmN0aW9uKGIsYyxkKXt2YXIgYT1iLnN0eWxlO2EucG9zaXRpb249ImFic29sdXRlIjthLmxlZnQ9YysicHgiO2EudG9wPWQrInB4In07U3lzLlVJLkRvbUVsZW1lbnQudG9nZ2xlQ3NzQ2xhc3M9ZnVuY3Rpb24oYixhKXtpZihTeXMuVUkuRG9tRWxlbWVudC5jb250YWluc0Nzc0NsYXNzKGIsYSkpU3lzLlVJLkRvbUVsZW1lbnQucmVtb3ZlQ3NzQ2xhc3MoYixhKTtlbHNlIFN5cy5VSS5Eb21FbGVtZW50LmFkZENzc0NsYXNzKGIsYSl9O1N5cy5VSS5Eb21FbGVtZW50LmdldFZpc2liaWxpdHlNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBhLl92aXNpYmlsaXR5TW9kZT09PVN5cy5VSS5WaXNpYmlsaXR5TW9kZS5oaWRlP1N5cy5VSS5WaXNpYmlsaXR5TW9kZS5oaWRlOlN5cy5VSS5WaXNpYmlsaXR5TW9kZS5jb2xsYXBzZX07U3lzLlVJLkRvbUVsZW1lbnQuc2V0VmlzaWJpbGl0eU1vZGU9ZnVuY3Rpb24oYSxiKXtTeXMuVUkuRG9tRWxlbWVudC5fZW5zdXJlT2xkRGlzcGxheU1vZGUoYSk7aWYoYS5fdmlzaWJpbGl0eU1vZGUhPT1iKXthLl92aXNpYmlsaXR5TW9kZT1iO2lmKFN5cy5VSS5Eb21FbGVtZW50LmdldFZpc2libGUoYSk9PT1mYWxzZSlpZihhLl92aXNpYmlsaXR5TW9kZT09PVN5cy5VSS5WaXNpYmlsaXR5TW9kZS5oaWRlKWEuc3R5bGUuZGlzcGxheT1hLl9vbGREaXNwbGF5TW9kZTtlbHNlIGEuc3R5bGUuZGlzcGxheT0ibm9uZSI7YS5fdmlzaWJpbGl0eU1vZGU9Yn19O1N5cy5VSS5Eb21FbGVtZW50LmdldFZpc2libGU9ZnVuY3Rpb24oYil7dmFyIGE9Yi5jdXJyZW50U3R5bGV8fFN5cy5VSS5Eb21FbGVtZW50Ll9nZXRDdXJyZW50U3R5bGUoYik7aWYoIWEpcmV0dXJuIHRydWU7cmV0dXJuIGEudmlzaWJpbGl0eSE9PSJoaWRkZW4iJiZhLmRpc3BsYXkhPT0ibm9uZSJ9O1N5cy5VSS5Eb21FbGVtZW50LnNldFZpc2libGU9ZnVuY3Rpb24oYSxiKXtpZihiIT09U3lzLlVJLkRvbUVsZW1lbnQuZ2V0VmlzaWJsZShhKSl7U3lzLlVJLkRvbUVsZW1lbnQuX2Vuc3VyZU9sZERpc3BsYXlNb2RlKGEpO2Euc3R5bGUudmlzaWJpbGl0eT1iPyJ2aXNpYmxlIjoiaGlkZGVuIjtpZihifHxhLl92aXNpYmlsaXR5TW9kZT09PVN5cy5VSS5WaXNpYmlsaXR5TW9kZS5oaWRlKWEuc3R5bGUuZGlzcGxheT1hLl9vbGREaXNwbGF5TW9kZTtlbHNlIGEuc3R5bGUuZGlzcGxheT0ibm9uZSJ9fTtTeXMuVUkuRG9tRWxlbWVudC5fZW5zdXJlT2xkRGlzcGxheU1vZGU9ZnVuY3Rpb24oYSl7aWYoIWEuX29sZERpc3BsYXlNb2RlKXt2YXIgYj1hLmN1cnJlbnRTdHlsZXx8U3lzLlVJLkRvbUVsZW1lbnQuX2dldEN1cnJlbnRTdHlsZShhKTthLl9vbGREaXNwbGF5TW9kZT1iP2IuZGlzcGxheTpudWxsO2lmKCFhLl9vbGREaXNwbGF5TW9kZXx8YS5fb2xkRGlzcGxheU1vZGU9PT0ibm9uZSIpc3dpdGNoKGEudGFnTmFtZS50b1VwcGVyQ2FzZSgpKXtjYXNlICJESVYiOmNhc2UgIlAiOmNhc2UgIkFERFJFU1MiOmNhc2UgIkJMT0NLUVVPVEUiOmNhc2UgIkJPRFkiOmNhc2UgIkNPTCI6Y2FzZSAiQ09MR1JPVVAiOmNhc2UgIkREIjpjYXNlICJETCI6Y2FzZSAiRFQiOmNhc2UgIkZJRUxEU0VUIjpjYXNlICJGT1JNIjpjYXNlICJIMSI6Y2FzZSAiSDIiOmNhc2UgIkgzIjpjYXNlICJINCI6Y2FzZSAiSDUiOmNhc2UgIkg2IjpjYXNlICJIUiI6Y2FzZSAiSUZSQU1FIjpjYXNlICJMRUdFTkQiOmNhc2UgIk9MIjpjYXNlICJQUkUiOmNhc2UgIlRBQkxFIjpjYXNlICJURCI6Y2FzZSAiVEgiOmNhc2UgIlRSIjpjYXNlICJVTCI6YS5fb2xkRGlzcGxheU1vZGU9ImJsb2NrIjticmVhaztjYXNlICJMSSI6YS5fb2xkRGlzcGxheU1vZGU9Imxpc3QtaXRlbSI7YnJlYWs7ZGVmYXVsdDphLl9vbGREaXNwbGF5TW9kZT0iaW5saW5lIn19fTtTeXMuVUkuRG9tRWxlbWVudC5fZ2V0V2luZG93PWZ1bmN0aW9uKGEpe3ZhciBiPWEub3duZXJEb2N1bWVudHx8YS5kb2N1bWVudHx8YTtyZXR1cm4gYi5kZWZhdWx0Vmlld3x8Yi5wYXJlbnRXaW5kb3d9O1N5cy5VSS5Eb21FbGVtZW50Ll9nZXRDdXJyZW50U3R5bGU9ZnVuY3Rpb24oYSl7aWYoYS5ub2RlVHlwZT09PTMpcmV0dXJuIG51bGw7dmFyIGM9U3lzLlVJLkRvbUVsZW1lbnQuX2dldFdpbmRvdyhhKTtpZihhLmRvY3VtZW50RWxlbWVudClhPWEuZG9jdW1lbnRFbGVtZW50O3ZhciBiPWMmJmEhPT1jJiZjLmdldENvbXB1dGVkU3R5bGU/Yy5nZXRDb21wdXRlZFN0eWxlKGEsbnVsbCk6YS5jdXJyZW50U3R5bGV8fGEuc3R5bGU7aWYoIWImJlN5cy5Ccm93c2VyLmFnZW50PT09U3lzLkJyb3dzZXIuU2FmYXJpJiZhLnN0eWxlKXt2YXIgZz1hLnN0eWxlLmRpc3BsYXksZj1hLnN0eWxlLnBvc2l0aW9uO2Euc3R5bGUucG9zaXRpb249ImFic29sdXRlIjthLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjt2YXIgZT1jLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKTthLnN0eWxlLmRpc3BsYXk9ZzthLnN0eWxlLnBvc2l0aW9uPWY7Yj17fTtmb3IodmFyIGQgaW4gZSliW2RdPWVbZF07Yi5kaXNwbGF5PSJub25lIn1yZXR1cm4gYn07U3lzLklDb250YWluZXI9ZnVuY3Rpb24oKXt9O1N5cy5JQ29udGFpbmVyLnByb3RvdHlwZT17fTtTeXMuSUNvbnRhaW5lci5yZWdpc3RlckludGVyZmFjZSgiU3lzLklDb250YWluZXIiKTtTeXMuQXBwbGljYXRpb25Mb2FkRXZlbnRBcmdzPWZ1bmN0aW9uKGIsYSl7U3lzLkFwcGxpY2F0aW9uTG9hZEV2ZW50QXJncy5pbml0aWFsaXplQmFzZSh0aGlzKTt0aGlzLl9jb21wb25lbnRzPWI7dGhpcy5faXNQYXJ0aWFsTG9hZD1hfTtTeXMuQXBwbGljYXRpb25Mb2FkRXZlbnRBcmdzLnByb3RvdHlwZT17Z2V0X2NvbXBvbmVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50c30sZ2V0X2lzUGFydGlhbExvYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNQYXJ0aWFsTG9hZH19O1N5cy5BcHBsaWNhdGlvbkxvYWRFdmVudEFyZ3MucmVnaXN0ZXJDbGFzcygiU3lzLkFwcGxpY2F0aW9uTG9hZEV2ZW50QXJncyIsU3lzLkV2ZW50QXJncyk7U3lzLl9BcHBsaWNhdGlvbj1mdW5jdGlvbigpe1N5cy5fQXBwbGljYXRpb24uaW5pdGlhbGl6ZUJhc2UodGhpcyk7dGhpcy5fZGlzcG9zYWJsZU9iamVjdHM9W107dGhpcy5fY29tcG9uZW50cz17fTt0aGlzLl9jcmVhdGVkQ29tcG9uZW50cz1bXTt0aGlzLl9zZWNvbmRQYXNzQ29tcG9uZW50cz1bXTt0aGlzLl91bmxvYWRIYW5kbGVyRGVsZWdhdGU9RnVuY3Rpb24uY3JlYXRlRGVsZWdhdGUodGhpcyx0aGlzLl91bmxvYWRIYW5kbGVyKTtTeXMuVUkuRG9tRXZlbnQuYWRkSGFuZGxlcih3aW5kb3csInVubG9hZCIsdGhpcy5fdW5sb2FkSGFuZGxlckRlbGVnYXRlKTt0aGlzLl9kb21SZWFkeSgpfTtTeXMuX0FwcGxpY2F0aW9uLnByb3RvdHlwZT17X2NyZWF0aW5nQ29tcG9uZW50czpmYWxzZSxfZGlzcG9zaW5nOmZhbHNlLF9kZWxldGVDb3VudDowLGdldF9pc0NyZWF0aW5nQ29tcG9uZW50czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGluZ0NvbXBvbmVudHN9LGdldF9pc0Rpc3Bvc2luZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNwb3Npbmd9LGFkZF9pbml0OmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2luaXRpYWxpemVkKWEodGhpcyxTeXMuRXZlbnRBcmdzLkVtcHR5KTtlbHNlIHRoaXMuZ2V0X2V2ZW50cygpLmFkZEhhbmRsZXIoImluaXQiLGEpfSxyZW1vdmVfaW5pdDpmdW5jdGlvbihhKXt0aGlzLmdldF9ldmVudHMoKS5yZW1vdmVIYW5kbGVyKCJpbml0IixhKX0sYWRkX2xvYWQ6ZnVuY3Rpb24oYSl7dGhpcy5nZXRfZXZlbnRzKCkuYWRkSGFuZGxlcigibG9hZCIsYSl9LHJlbW92ZV9sb2FkOmZ1bmN0aW9uKGEpe3RoaXMuZ2V0X2V2ZW50cygpLnJlbW92ZUhhbmRsZXIoImxvYWQiLGEpfSxhZGRfdW5sb2FkOmZ1bmN0aW9uKGEpe3RoaXMuZ2V0X2V2ZW50cygpLmFkZEhhbmRsZXIoInVubG9hZCIsYSl9LHJlbW92ZV91bmxvYWQ6ZnVuY3Rpb24oYSl7dGhpcy5nZXRfZXZlbnRzKCkucmVtb3ZlSGFuZGxlcigidW5sb2FkIixhKX0sYWRkQ29tcG9uZW50OmZ1bmN0aW9uKGEpe3RoaXMuX2NvbXBvbmVudHNbYS5nZXRfaWQoKV09YX0sYmVnaW5DcmVhdGVDb21wb25lbnRzOmZ1bmN0aW9uKCl7dGhpcy5fY3JlYXRpbmdDb21wb25lbnRzPXRydWV9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtpZighdGhpcy5fZGlzcG9zaW5nKXt0aGlzLl9kaXNwb3Npbmc9dHJ1ZTtpZih0aGlzLl90aW1lckNvb2tpZSl7d2luZG93LmNsZWFyVGltZW91dCh0aGlzLl90aW1lckNvb2tpZSk7ZGVsZXRlIHRoaXMuX3RpbWVyQ29va2llfWlmKHRoaXMuX2VuZFJlcXVlc3RIYW5kbGVyKXtTeXMuV2ViRm9ybXMuUGFnZVJlcXVlc3RNYW5hZ2VyLmdldEluc3RhbmNlKCkucmVtb3ZlX2VuZFJlcXVlc3QodGhpcy5fZW5kUmVxdWVzdEhhbmRsZXIpO2RlbGV0ZSB0aGlzLl9lbmRSZXF1ZXN0SGFuZGxlcn1pZih0aGlzLl9iZWdpblJlcXVlc3RIYW5kbGVyKXtTeXMuV2ViRm9ybXMuUGFnZVJlcXVlc3RNYW5hZ2VyLmdldEluc3RhbmNlKCkucmVtb3ZlX2JlZ2luUmVxdWVzdCh0aGlzLl9iZWdpblJlcXVlc3RIYW5kbGVyKTtkZWxldGUgdGhpcy5fYmVnaW5SZXF1ZXN0SGFuZGxlcn1pZih3aW5kb3cucGFnZVVubG9hZCl3aW5kb3cucGFnZVVubG9hZCh0aGlzLFN5cy5FdmVudEFyZ3MuRW1wdHkpO3ZhciBjPXRoaXMuZ2V0X2V2ZW50cygpLmdldEhhbmRsZXIoInVubG9hZCIpO2lmKGMpYyh0aGlzLFN5cy5FdmVudEFyZ3MuRW1wdHkpO3ZhciBiPUFycmF5LmNsb25lKHRoaXMuX2Rpc3Bvc2FibGVPYmplY3RzKTtmb3IodmFyIGE9MCxmPWIubGVuZ3RoO2E8ZjthKyspe3ZhciBkPWJbYV07aWYodHlwZW9mIGQhPT0idW5kZWZpbmVkIilkLmRpc3Bvc2UoKX1BcnJheS5jbGVhcih0aGlzLl9kaXNwb3NhYmxlT2JqZWN0cyk7U3lzLlVJLkRvbUV2ZW50LnJlbW92ZUhhbmRsZXIod2luZG93LCJ1bmxvYWQiLHRoaXMuX3VubG9hZEhhbmRsZXJEZWxlZ2F0ZSk7aWYoU3lzLl9TY3JpcHRMb2FkZXIpe3ZhciBlPVN5cy5fU2NyaXB0TG9hZGVyLmdldEluc3RhbmNlKCk7aWYoZSllLmRpc3Bvc2UoKX1TeXMuX0FwcGxpY2F0aW9uLmNhbGxCYXNlTWV0aG9kKHRoaXMsImRpc3Bvc2UiKX19LGRpc3Bvc2VFbGVtZW50OmZ1bmN0aW9uKGMsail7aWYoYy5ub2RlVHlwZT09PTEpe3ZhciBiLGg9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLGc9aC5sZW5ndGgsaT1uZXcgQXJyYXkoZyk7Zm9yKGI9MDtiPGc7YisrKWlbYl09aFtiXTtmb3IoYj1nLTE7Yj49MDtiLS0pe3ZhciBkPWlbYl0sZj1kLmRpc3Bvc2U7aWYoZiYmdHlwZW9mIGY9PT0iZnVuY3Rpb24iKWQuZGlzcG9zZSgpO2Vsc2V7dmFyIGU9ZC5jb250cm9sO2lmKGUmJnR5cGVvZiBlLmRpc3Bvc2U9PT0iZnVuY3Rpb24iKWUuZGlzcG9zZSgpfXZhciBhPWQuX2JlaGF2aW9ycztpZihhKXRoaXMuX2Rpc3Bvc2VDb21wb25lbnRzKGEpO2E9ZC5fY29tcG9uZW50cztpZihhKXt0aGlzLl9kaXNwb3NlQ29tcG9uZW50cyhhKTtkLl9jb21wb25lbnRzPW51bGx9fWlmKCFqKXt2YXIgZj1jLmRpc3Bvc2U7aWYoZiYmdHlwZW9mIGY9PT0iZnVuY3Rpb24iKWMuZGlzcG9zZSgpO2Vsc2V7dmFyIGU9Yy5jb250cm9sO2lmKGUmJnR5cGVvZiBlLmRpc3Bvc2U9PT0iZnVuY3Rpb24iKWUuZGlzcG9zZSgpfXZhciBhPWMuX2JlaGF2aW9ycztpZihhKXRoaXMuX2Rpc3Bvc2VDb21wb25lbnRzKGEpO2E9Yy5fY29tcG9uZW50cztpZihhKXt0aGlzLl9kaXNwb3NlQ29tcG9uZW50cyhhKTtjLl9jb21wb25lbnRzPW51bGx9fX19LGVuZENyZWF0ZUNvbXBvbmVudHM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9zZWNvbmRQYXNzQ29tcG9uZW50cztmb3IodmFyIGE9MCxkPWIubGVuZ3RoO2E8ZDthKyspe3ZhciBjPWJbYV0uY29tcG9uZW50O1N5cyRDb21wb25lbnQkX3NldFJlZmVyZW5jZXMoYyxiW2FdLnJlZmVyZW5jZXMpO2MuZW5kVXBkYXRlKCl9dGhpcy5fc2Vjb25kUGFzc0NvbXBvbmVudHM9W107dGhpcy5fY3JlYXRpbmdDb21wb25lbnRzPWZhbHNlfSxmaW5kQ29tcG9uZW50OmZ1bmN0aW9uKGIsYSl7cmV0dXJuIGE/U3lzLklDb250YWluZXIuaXNJbnN0YW5jZU9mVHlwZShhKT9hLmZpbmRDb21wb25lbnQoYik6YVtiXXx8bnVsbDpTeXMuQXBwbGljYXRpb24uX2NvbXBvbmVudHNbYl18fG51bGx9LGdldENvbXBvbmVudHM6ZnVuY3Rpb24oKXt2YXIgYT1bXSxiPXRoaXMuX2NvbXBvbmVudHM7Zm9yKHZhciBjIGluIGIpYVthLmxlbmd0aF09YltjXTtyZXR1cm4gYX0saW5pdGlhbGl6ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmdldF9pc0luaXRpYWxpemVkKCkmJiF0aGlzLl9kaXNwb3Npbmcpe1N5cy5fQXBwbGljYXRpb24uY2FsbEJhc2VNZXRob2QodGhpcywiaW5pdGlhbGl6ZSIpO3RoaXMuX3JhaXNlSW5pdCgpO2lmKHRoaXMuZ2V0X3N0YXRlU3RyaW5nKXtpZihTeXMuV2ViRm9ybXMmJlN5cy5XZWJGb3Jtcy5QYWdlUmVxdWVzdE1hbmFnZXIpe3RoaXMuX2JlZ2luUmVxdWVzdEhhbmRsZXI9RnVuY3Rpb24uY3JlYXRlRGVsZWdhdGUodGhpcyx0aGlzLl9vblBhZ2VSZXF1ZXN0TWFuYWdlckJlZ2luUmVxdWVzdCk7U3lzLldlYkZvcm1zLlBhZ2VSZXF1ZXN0TWFuYWdlci5nZXRJbnN0YW5jZSgpLmFkZF9iZWdpblJlcXVlc3QodGhpcy5fYmVnaW5SZXF1ZXN0SGFuZGxlcik7dGhpcy5fZW5kUmVxdWVzdEhhbmRsZXI9RnVuY3Rpb24uY3JlYXRlRGVsZWdhdGUodGhpcyx0aGlzLl9vblBhZ2VSZXF1ZXN0TWFuYWdlckVuZFJlcXVlc3QpO1N5cy5XZWJGb3Jtcy5QYWdlUmVxdWVzdE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5hZGRfZW5kUmVxdWVzdCh0aGlzLl9lbmRSZXF1ZXN0SGFuZGxlcil9dmFyIGE9dGhpcy5nZXRfc3RhdGVTdHJpbmcoKTtpZihhIT09dGhpcy5fY3VycmVudEVudHJ5KXRoaXMuX25hdmlnYXRlKGEpO2Vsc2UgdGhpcy5fZW5zdXJlSGlzdG9yeSgpfXRoaXMucmFpc2VMb2FkKCl9fSxub3RpZnlTY3JpcHRMb2FkZWQ6ZnVuY3Rpb24oKXt9LHJlZ2lzdGVyRGlzcG9zYWJsZU9iamVjdDpmdW5jdGlvbihiKXtpZighdGhpcy5fZGlzcG9zaW5nKXt2YXIgYT10aGlzLl9kaXNwb3NhYmxlT2JqZWN0cyxjPWEubGVuZ3RoO2FbY109YjtiLl9fbXNkaXNwb3NlaW5kZXg9Y319LHJhaXNlTG9hZDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0X2V2ZW50cygpLmdldEhhbmRsZXIoImxvYWQiKSxhPW5ldyBTeXMuQXBwbGljYXRpb25Mb2FkRXZlbnRBcmdzKEFycmF5LmNsb25lKHRoaXMuX2NyZWF0ZWRDb21wb25lbnRzKSwhIXRoaXMuX2xvYWRlZCk7dGhpcy5fbG9hZGVkPXRydWU7aWYoYiliKHRoaXMsYSk7aWYod2luZG93LnBhZ2VMb2FkKXdpbmRvdy5wYWdlTG9hZCh0aGlzLGEpO3RoaXMuX2NyZWF0ZWRDb21wb25lbnRzPVtdfSxyZW1vdmVDb21wb25lbnQ6ZnVuY3Rpb24oYil7dmFyIGE9Yi5nZXRfaWQoKTtpZihhKWRlbGV0ZSB0aGlzLl9jb21wb25lbnRzW2FdfSx1bnJlZ2lzdGVyRGlzcG9zYWJsZU9iamVjdDpmdW5jdGlvbihhKXtpZighdGhpcy5fZGlzcG9zaW5nKXt2YXIgZT1hLl9fbXNkaXNwb3NlaW5kZXg7aWYodHlwZW9mIGU9PT0ibnVtYmVyIil7dmFyIGI9dGhpcy5fZGlzcG9zYWJsZU9iamVjdHM7ZGVsZXRlIGJbZV07ZGVsZXRlIGEuX19tc2Rpc3Bvc2VpbmRleDtpZigrK3RoaXMuX2RlbGV0ZUNvdW50PjEwMDApe3ZhciBjPVtdO2Zvcih2YXIgZD0wLGY9Yi5sZW5ndGg7ZDxmO2QrKyl7YT1iW2RdO2lmKHR5cGVvZiBhIT09InVuZGVmaW5lZCIpe2EuX19tc2Rpc3Bvc2VpbmRleD1jLmxlbmd0aDtjLnB1c2goYSl9fXRoaXMuX2Rpc3Bvc2FibGVPYmplY3RzPWM7dGhpcy5fZGVsZXRlQ291bnQ9MH19fX0sX2FkZENvbXBvbmVudFRvU2Vjb25kUGFzczpmdW5jdGlvbihiLGEpe3RoaXMuX3NlY29uZFBhc3NDb21wb25lbnRzW3RoaXMuX3NlY29uZFBhc3NDb21wb25lbnRzLmxlbmd0aF09e2NvbXBvbmVudDpiLHJlZmVyZW5jZXM6YX19LF9kaXNwb3NlQ29tcG9uZW50czpmdW5jdGlvbihhKXtpZihhKWZvcih2YXIgYj1hLmxlbmd0aC0xO2I+PTA7Yi0tKXt2YXIgYz1hW2JdO2lmKHR5cGVvZiBjLmRpc3Bvc2U9PT0iZnVuY3Rpb24iKWMuZGlzcG9zZSgpfX0sX2RvbVJlYWR5OmZ1bmN0aW9uKCl7dmFyIGEsZyxmPXRoaXM7ZnVuY3Rpb24gYigpe2YuaW5pdGlhbGl6ZSgpfXZhciBjPWZ1bmN0aW9uKCl7U3lzLlVJLkRvbUV2ZW50LnJlbW92ZUhhbmRsZXIod2luZG93LCJsb2FkIixjKTtiKCl9O1N5cy5VSS5Eb21FdmVudC5hZGRIYW5kbGVyKHdpbmRvdywibG9hZCIsYyk7aWYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcil0cnl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsYT1mdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGEsZmFsc2UpO2IoKX0sZmFsc2UpfWNhdGNoKGgpe31lbHNlIGlmKGRvY3VtZW50LmF0dGFjaEV2ZW50KWlmKHdpbmRvdz09d2luZG93LnRvcCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKXt2YXIgZSxkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2E9ZnVuY3Rpb24oKXt0cnl7ZC5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGMpe2U9d2luZG93LnNldFRpbWVvdXQoYSwwKTtyZXR1cm59ZD1udWxsO2IoKX07YSgpfWVsc2UgZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsYT1mdW5jdGlvbigpe2lmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXtkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixhKTtiKCl9fSl9LF9yYWlzZUluaXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldF9ldmVudHMoKS5nZXRIYW5kbGVyKCJpbml0Iik7aWYoYSl7dGhpcy5iZWdpbkNyZWF0ZUNvbXBvbmVudHMoKTthKHRoaXMsU3lzLkV2ZW50QXJncy5FbXB0eSk7dGhpcy5lbmRDcmVhdGVDb21wb25lbnRzKCl9fSxfdW5sb2FkSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuZGlzcG9zZSgpfX07U3lzLl9BcHBsaWNhdGlvbi5yZWdpc3RlckNsYXNzKCJTeXMuX0FwcGxpY2F0aW9uIixTeXMuQ29tcG9uZW50LFN5cy5JQ29udGFpbmVyKTtTeXMuQXBwbGljYXRpb249bmV3IFN5cy5fQXBwbGljYXRpb247dmFyICRmaW5kPVN5cy5BcHBsaWNhdGlvbi5maW5kQ29tcG9uZW50O1N5cy5VSS5CZWhhdmlvcj1mdW5jdGlvbihiKXtTeXMuVUkuQmVoYXZpb3IuaW5pdGlhbGl6ZUJhc2UodGhpcyk7dGhpcy5fZWxlbWVudD1iO3ZhciBhPWIuX2JlaGF2aW9ycztpZighYSliLl9iZWhhdmlvcnM9W3RoaXNdO2Vsc2UgYVthLmxlbmd0aF09dGhpc307U3lzLlVJLkJlaGF2aW9yLnByb3RvdHlwZT17X25hbWU6bnVsbCxnZXRfZWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50fSxnZXRfaWQ6ZnVuY3Rpb24oKXt2YXIgYT1TeXMuVUkuQmVoYXZpb3IuY2FsbEJhc2VNZXRob2QodGhpcywiZ2V0X2lkIik7aWYoYSlyZXR1cm4gYTtpZighdGhpcy5fZWxlbWVudHx8IXRoaXMuX2VsZW1lbnQuaWQpcmV0dXJuICIiO3JldHVybiB0aGlzLl9lbGVtZW50LmlkKyIkIit0aGlzLmdldF9uYW1lKCl9LGdldF9uYW1lOmZ1bmN0aW9uKCl7aWYodGhpcy5fbmFtZSlyZXR1cm4gdGhpcy5fbmFtZTt2YXIgYT1PYmplY3QuZ2V0VHlwZU5hbWUodGhpcyksYj1hLmxhc3RJbmRleE9mKCIuIik7aWYoYiE9PS0xKWE9YS5zdWJzdHIoYisxKTtpZighdGhpcy5nZXRfaXNJbml0aWFsaXplZCgpKXRoaXMuX25hbWU9YTtyZXR1cm4gYX0sc2V0X25hbWU6ZnVuY3Rpb24oYSl7dGhpcy5fbmFtZT1hfSxpbml0aWFsaXplOmZ1bmN0aW9uKCl7U3lzLlVJLkJlaGF2aW9yLmNhbGxCYXNlTWV0aG9kKHRoaXMsImluaXRpYWxpemUiKTt2YXIgYT10aGlzLmdldF9uYW1lKCk7aWYoYSl0aGlzLl9lbGVtZW50W2FdPXRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtTeXMuVUkuQmVoYXZpb3IuY2FsbEJhc2VNZXRob2QodGhpcywiZGlzcG9zZSIpO3ZhciBhPXRoaXMuX2VsZW1lbnQ7aWYoYSl7dmFyIGM9dGhpcy5nZXRfbmFtZSgpO2lmKGMpYVtjXT1udWxsO3ZhciBiPWEuX2JlaGF2aW9ycztBcnJheS5yZW1vdmUoYix0aGlzKTtpZihiLmxlbmd0aD09PTApYS5fYmVoYXZpb3JzPW51bGw7ZGVsZXRlIHRoaXMuX2VsZW1lbnR9fX07U3lzLlVJLkJlaGF2aW9yLnJlZ2lzdGVyQ2xhc3MoIlN5cy5VSS5CZWhhdmlvciIsU3lzLkNvbXBvbmVudCk7U3lzLlVJLkJlaGF2aW9yLmdldEJlaGF2aW9yQnlOYW1lPWZ1bmN0aW9uKGIsYyl7dmFyIGE9YltjXTtyZXR1cm4gYSYmU3lzLlVJLkJlaGF2aW9yLmlzSW5zdGFuY2VPZlR5cGUoYSk/YTpudWxsfTtTeXMuVUkuQmVoYXZpb3IuZ2V0QmVoYXZpb3JzPWZ1bmN0aW9uKGEpe2lmKCFhLl9iZWhhdmlvcnMpcmV0dXJuIFtdO3JldHVybiBBcnJheS5jbG9uZShhLl9iZWhhdmlvcnMpfTtTeXMuVUkuQmVoYXZpb3IuZ2V0QmVoYXZpb3JzQnlUeXBlPWZ1bmN0aW9uKGQsZSl7dmFyIGE9ZC5fYmVoYXZpb3JzLGM9W107aWYoYSlmb3IodmFyIGI9MCxmPWEubGVuZ3RoO2I8ZjtiKyspaWYoZS5pc0luc3RhbmNlT2ZUeXBlKGFbYl0pKWNbYy5sZW5ndGhdPWFbYl07cmV0dXJuIGN9O1N5cy5VSS5WaXNpYmlsaXR5TW9kZT1mdW5jdGlvbigpe3Rocm93IEVycm9yLm5vdEltcGxlbWVudGVkKCl9O1N5cy5VSS5WaXNpYmlsaXR5TW9kZS5wcm90b3R5cGU9e2hpZGU6MCxjb2xsYXBzZToxfTtTeXMuVUkuVmlzaWJpbGl0eU1vZGUucmVnaXN0ZXJFbnVtKCJTeXMuVUkuVmlzaWJpbGl0eU1vZGUiKTtTeXMuVUkuQ29udHJvbD1mdW5jdGlvbihhKXtTeXMuVUkuQ29udHJvbC5pbml0aWFsaXplQmFzZSh0aGlzKTt0aGlzLl9lbGVtZW50PWE7YS5jb250cm9sPXRoaXM7dmFyIGI9dGhpcy5nZXRfcm9sZSgpO2lmKGIpYS5zZXRBdHRyaWJ1dGUoInJvbGUiLGIpfTtTeXMuVUkuQ29udHJvbC5wcm90b3R5cGU9e19wYXJlbnQ6bnVsbCxfdmlzaWJpbGl0eU1vZGU6U3lzLlVJLlZpc2liaWxpdHlNb2RlLmhpZGUsZ2V0X2VsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudH0sZ2V0X2lkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2VsZW1lbnQpcmV0dXJuICIiO3JldHVybiB0aGlzLl9lbGVtZW50LmlkfSxzZXRfaWQ6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvci5pbnZhbGlkT3BlcmF0aW9uKFN5cy5SZXMuY2FudFNldElkKX0sZ2V0X3BhcmVudDpmdW5jdGlvbigpe2lmKHRoaXMuX3BhcmVudClyZXR1cm4gdGhpcy5fcGFyZW50O2lmKCF0aGlzLl9lbGVtZW50KXJldHVybiBudWxsO3ZhciBhPXRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZTt3aGlsZShhKXtpZihhLmNvbnRyb2wpcmV0dXJuIGEuY29udHJvbDthPWEucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH0sc2V0X3BhcmVudDpmdW5jdGlvbihhKXt0aGlzLl9wYXJlbnQ9YX0sZ2V0X3JvbGU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZ2V0X3Zpc2liaWxpdHlNb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIFN5cy5VSS5Eb21FbGVtZW50LmdldFZpc2liaWxpdHlNb2RlKHRoaXMuX2VsZW1lbnQpfSxzZXRfdmlzaWJpbGl0eU1vZGU6ZnVuY3Rpb24oYSl7U3lzLlVJLkRvbUVsZW1lbnQuc2V0VmlzaWJpbGl0eU1vZGUodGhpcy5fZWxlbWVudCxhKX0sZ2V0X3Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gU3lzLlVJLkRvbUVsZW1lbnQuZ2V0VmlzaWJsZSh0aGlzLl9lbGVtZW50KX0sc2V0X3Zpc2libGU6ZnVuY3Rpb24oYSl7U3lzLlVJLkRvbUVsZW1lbnQuc2V0VmlzaWJsZSh0aGlzLl9lbGVtZW50LGEpfSxhZGRDc3NDbGFzczpmdW5jdGlvbihhKXtTeXMuVUkuRG9tRWxlbWVudC5hZGRDc3NDbGFzcyh0aGlzLl9lbGVtZW50LGEpfSxkaXNwb3NlOmZ1bmN0aW9uKCl7U3lzLlVJLkNvbnRyb2wuY2FsbEJhc2VNZXRob2QodGhpcywiZGlzcG9zZSIpO2lmKHRoaXMuX2VsZW1lbnQpe3RoaXMuX2VsZW1lbnQuY29udHJvbD1udWxsO2RlbGV0ZSB0aGlzLl9lbGVtZW50fWlmKHRoaXMuX3BhcmVudClkZWxldGUgdGhpcy5fcGFyZW50fSxvbkJ1YmJsZUV2ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSxyYWlzZUJ1YmJsZUV2ZW50OmZ1bmN0aW9uKGEsYil7dGhpcy5fcmFpc2VCdWJibGVFdmVudChhLGIpfSxfcmFpc2VCdWJibGVFdmVudDpmdW5jdGlvbihiLGMpe3ZhciBhPXRoaXMuZ2V0X3BhcmVudCgpO3doaWxlKGEpe2lmKGEub25CdWJibGVFdmVudChiLGMpKXJldHVybjthPWEuZ2V0X3BhcmVudCgpfX0scmVtb3ZlQ3NzQ2xhc3M6ZnVuY3Rpb24oYSl7U3lzLlVJLkRvbUVsZW1lbnQucmVtb3ZlQ3NzQ2xhc3ModGhpcy5fZWxlbWVudCxhKX0sdG9nZ2xlQ3NzQ2xhc3M6ZnVuY3Rpb24oYSl7U3lzLlVJLkRvbUVsZW1lbnQudG9nZ2xlQ3NzQ2xhc3ModGhpcy5fZWxlbWVudCxhKX19O1N5cy5VSS5Db250cm9sLnJlZ2lzdGVyQ2xhc3MoIlN5cy5VSS5Db250cm9sIixTeXMuQ29tcG9uZW50KTtTeXMuSGlzdG9yeUV2ZW50QXJncz1mdW5jdGlvbihhKXtTeXMuSGlzdG9yeUV2ZW50QXJncy5pbml0aWFsaXplQmFzZSh0aGlzKTt0aGlzLl9zdGF0ZT1hfTtTeXMuSGlzdG9yeUV2ZW50QXJncy5wcm90b3R5cGU9e2dldF9zdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZX19O1N5cy5IaXN0b3J5RXZlbnRBcmdzLnJlZ2lzdGVyQ2xhc3MoIlN5cy5IaXN0b3J5RXZlbnRBcmdzIixTeXMuRXZlbnRBcmdzKTtTeXMuQXBwbGljYXRpb24uX2FwcExvYWRIYW5kbGVyPW51bGw7U3lzLkFwcGxpY2F0aW9uLl9iZWdpblJlcXVlc3RIYW5kbGVyPW51bGw7U3lzLkFwcGxpY2F0aW9uLl9jbGllbnRJZD1udWxsO1N5cy5BcHBsaWNhdGlvbi5fY3VycmVudEVudHJ5PSIiO1N5cy5BcHBsaWNhdGlvbi5fZW5kUmVxdWVzdEhhbmRsZXI9bnVsbDtTeXMuQXBwbGljYXRpb24uX2hpc3Rvcnk9bnVsbDtTeXMuQXBwbGljYXRpb24uX2VuYWJsZUhpc3Rvcnk9ZmFsc2U7U3lzLkFwcGxpY2F0aW9uLl9oaXN0b3J5RnJhbWU9bnVsbDtTeXMuQXBwbGljYXRpb24uX2hpc3RvcnlJbml0aWFsaXplZD1mYWxzZTtTeXMuQXBwbGljYXRpb24uX2hpc3RvcnlQb2ludElzTmV3PWZhbHNlO1N5cy5BcHBsaWNhdGlvbi5faWdub3JlVGltZXI9ZmFsc2U7U3lzLkFwcGxpY2F0aW9uLl9pbml0aWFsU3RhdGU9bnVsbDtTeXMuQXBwbGljYXRpb24uX3N0YXRlPXt9O1N5cy5BcHBsaWNhdGlvbi5fdGltZXJDb29raWU9MDtTeXMuQXBwbGljYXRpb24uX3RpbWVySGFuZGxlcj1udWxsO1N5cy5BcHBsaWNhdGlvbi5fdW5pcXVlSWQ9bnVsbDtTeXMuX0FwcGxpY2F0aW9uLnByb3RvdHlwZS5nZXRfc3RhdGVTdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT1udWxsO2lmKFN5cy5Ccm93c2VyLmFnZW50PT09U3lzLkJyb3dzZXIuRmlyZWZveCl7dmFyIGM9d2luZG93LmxvY2F0aW9uLmhyZWYsYj1jLmluZGV4T2YoIiMiKTtpZihiIT09LTEpYT1jLnN1YnN0cmluZyhiKzEpO2Vsc2UgYT0iIjtyZXR1cm4gYX1lbHNlIGE9d2luZG93LmxvY2F0aW9uLmhhc2g7aWYoYS5sZW5ndGg+MCYmYS5jaGFyQXQoMCk9PT0iIyIpYT1hLnN1YnN0cmluZygxKTtyZXR1cm4gYX07U3lzLl9BcHBsaWNhdGlvbi5wcm90b3R5cGUuZ2V0X2VuYWJsZUhpc3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlSGlzdG9yeX07U3lzLl9BcHBsaWNhdGlvbi5wcm90b3R5cGUuc2V0X2VuYWJsZUhpc3Rvcnk9ZnVuY3Rpb24oYSl7dGhpcy5fZW5hYmxlSGlzdG9yeT1hfTtTeXMuX0FwcGxpY2F0aW9uLnByb3RvdHlwZS5hZGRfbmF2aWdhdGU9ZnVuY3Rpb24oYSl7dGhpcy5nZXRfZXZlbnRzKCkuYWRkSGFuZGxlcigibmF2aWdhdGUiLGEpfTtTeXMuX0FwcGxpY2F0aW9uLnByb3RvdHlwZS5yZW1vdmVfbmF2aWdhdGU9ZnVuY3Rpb24oYSl7dGhpcy5nZXRfZXZlbnRzKCkucmVtb3ZlSGFuZGxlcigibmF2aWdhdGUiLGEpfTtTeXMuX0FwcGxpY2F0aW9uLnByb3RvdHlwZS5hZGRIaXN0b3J5UG9pbnQ9ZnVuY3Rpb24oYyxmKXt0aGlzLl9lbnN1cmVIaXN0b3J5KCk7dmFyIGI9dGhpcy5fc3RhdGU7Zm9yKHZhciBhIGluIGMpe3ZhciBkPWNbYV07aWYoZD09PW51bGwpe2lmKHR5cGVvZiBiW2FdIT09InVuZGVmaW5lZCIpZGVsZXRlIGJbYV19ZWxzZSBiW2FdPWR9dmFyIGU9dGhpcy5fc2VyaWFsaXplU3RhdGUoYik7dGhpcy5faGlzdG9yeVBvaW50SXNOZXc9dHJ1ZTt0aGlzLl9zZXRTdGF0ZShlLGYpO3RoaXMuX3JhaXNlTmF2aWdhdGUoKX07U3lzLl9BcHBsaWNhdGlvbi5wcm90b3R5cGUuc2V0U2VydmVySWQ9ZnVuY3Rpb24oYSxiKXt0aGlzLl9jbGllbnRJZD1hO3RoaXMuX3VuaXF1ZUlkPWJ9O1N5cy5fQXBwbGljYXRpb24ucHJvdG90eXBlLnNldFNlcnZlclN0YXRlPWZ1bmN0aW9uKGEpe3RoaXMuX2Vuc3VyZUhpc3RvcnkoKTt0aGlzLl9zdGF0ZS5fX3M9YTt0aGlzLl91cGRhdGVIaWRkZW5GaWVsZChhKX07U3lzLl9BcHBsaWNhdGlvbi5wcm90b3R5cGUuX2Rlc2VyaWFsaXplU3RhdGU9ZnVuY3Rpb24oYSl7dmFyIGU9e307YT1hfHwiIjt2YXIgYj1hLmluZGV4T2YoIiYmIik7aWYoYiE9PS0xJiZiKzI8YS5sZW5ndGgpe2UuX19zPWEuc3Vic3RyKGIrMik7YT1hLnN1YnN0cigwLGIpfXZhciBnPWEuc3BsaXQoIiYiKTtmb3IodmFyIGY9MCxqPWcubGVuZ3RoO2Y8ajtmKyspe3ZhciBkPWdbZl0sYz1kLmluZGV4T2YoIj0iKTtpZihjIT09LTEmJmMrMTxkLmxlbmd0aCl7dmFyIGk9ZC5zdWJzdHIoMCxjKSxoPWQuc3Vic3RyKGMrMSk7ZVtpXT1kZWNvZGVVUklDb21wb25lbnQoaCl9fXJldHVybiBlfTtTeXMuX0FwcGxpY2F0aW9uLnByb3RvdHlwZS5fZW5hYmxlSGlzdG9yeUluU2NyaXB0TWFuYWdlcj1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZUhpc3Rvcnk9dHJ1ZX07U3lzLl9BcHBsaWNhdGlvbi5wcm90b3R5cGUuX2Vuc3VyZUhpc3Rvcnk9ZnVuY3Rpb24oKXtpZighdGhpcy5faGlzdG9yeUluaXRpYWxpemVkJiZ0aGlzLl9lbmFibGVIaXN0b3J5KXtpZihTeXMuQnJvd3Nlci5hZ2VudD09PVN5cy5Ccm93c2VyLkludGVybmV0RXhwbG9yZXImJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU8OCkpe3RoaXMuX2hpc3RvcnlGcmFtZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiX19oaXN0b3J5RnJhbWUiKTt0aGlzLl9pZ25vcmVJRnJhbWU9dHJ1ZX10aGlzLl90aW1lckhhbmRsZXI9RnVuY3Rpb24uY3JlYXRlRGVsZWdhdGUodGhpcyx0aGlzLl9vbklkbGUpO3RoaXMuX3RpbWVyQ29va2llPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuX3RpbWVySGFuZGxlciwxMDApO3RyeXt0aGlzLl9pbml0aWFsU3RhdGU9dGhpcy5fZGVzZXJpYWxpemVTdGF0ZSh0aGlzLmdldF9zdGF0ZVN0cmluZygpKX1jYXRjaChhKXt9dGhpcy5faGlzdG9yeUluaXRpYWxpemVkPXRydWV9fTtTeXMuX0FwcGxpY2F0aW9uLnByb3RvdHlwZS5fbmF2aWdhdGU9ZnVuY3Rpb24oYyl7dGhpcy5fZW5zdXJlSGlzdG9yeSgpO3ZhciBiPXRoaXMuX2Rlc2VyaWFsaXplU3RhdGUoYyk7aWYodGhpcy5fdW5pcXVlSWQpe3ZhciBkPXRoaXMuX3N0YXRlLl9fc3x8IiIsYT1iLl9fc3x8IiI7aWYoYSE9PWQpe3RoaXMuX3VwZGF0ZUhpZGRlbkZpZWxkKGEpO19fZG9Qb3N0QmFjayh0aGlzLl91bmlxdWVJZCxhKTt0aGlzLl9zdGF0ZT1iO3JldHVybn19dGhpcy5fc2V0U3RhdGUoYyk7dGhpcy5fc3RhdGU9Yjt0aGlzLl9yYWlzZU5hdmlnYXRlKCl9O1N5cy5fQXBwbGljYXRpb24ucHJvdG90eXBlLl9vbklkbGU9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5fdGltZXJDb29raWU7dmFyIGE9dGhpcy5nZXRfc3RhdGVTdHJpbmcoKTtpZihhIT09dGhpcy5fY3VycmVudEVudHJ5KXtpZighdGhpcy5faWdub3JlVGltZXIpe3RoaXMuX2hpc3RvcnlQb2ludElzTmV3PWZhbHNlO3RoaXMuX25hdmlnYXRlKGEpfX1lbHNlIHRoaXMuX2lnbm9yZVRpbWVyPWZhbHNlO3RoaXMuX3RpbWVyQ29va2llPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuX3RpbWVySGFuZGxlciwxMDApfTtTeXMuX0FwcGxpY2F0aW9uLnByb3RvdHlwZS5fb25JRnJhbWVMb2FkPWZ1bmN0aW9uKGEpe2lmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw4KXt0aGlzLl9lbnN1cmVIaXN0b3J5KCk7aWYoIXRoaXMuX2lnbm9yZUlGcmFtZSl7dGhpcy5faGlzdG9yeVBvaW50SXNOZXc9ZmFsc2U7dGhpcy5fbmF2aWdhdGUoYSl9dGhpcy5faWdub3JlSUZyYW1lPWZhbHNlfX07U3lzLl9BcHBsaWNhdGlvbi5wcm90b3R5cGUuX29uUGFnZVJlcXVlc3RNYW5hZ2VyQmVnaW5SZXF1ZXN0PWZ1bmN0aW9uKCl7dGhpcy5faWdub3JlVGltZXI9dHJ1ZTt0aGlzLl9vcmlnaW5hbFRpdGxlPWRvY3VtZW50LnRpdGxlfTtTeXMuX0FwcGxpY2F0aW9uLnByb3RvdHlwZS5fb25QYWdlUmVxdWVzdE1hbmFnZXJFbmRSZXF1ZXN0PWZ1bmN0aW9uKGcsZil7dmFyIGQ9Zi5nZXRfZGF0YUl0ZW1zKClbdGhpcy5fY2xpZW50SWRdLGM9dGhpcy5fb3JpZ2luYWxUaXRsZTt0aGlzLl9vcmlnaW5hbFRpdGxlPW51bGw7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIl9fRVZFTlRUQVJHRVQiKTtpZihiJiZiLnZhbHVlPT09dGhpcy5fdW5pcXVlSWQpYi52YWx1ZT0iIjtpZih0eXBlb2YgZCE9PSJ1bmRlZmluZWQiKXt0aGlzLnNldFNlcnZlclN0YXRlKGQpO3RoaXMuX2hpc3RvcnlQb2ludElzTmV3PXRydWV9ZWxzZSB0aGlzLl9pZ25vcmVUaW1lcj1mYWxzZTt2YXIgYT10aGlzLl9zZXJpYWxpemVTdGF0ZSh0aGlzLl9zdGF0ZSk7aWYoYSE9PXRoaXMuX2N1cnJlbnRFbnRyeSl7dGhpcy5faWdub3JlVGltZXI9dHJ1ZTtpZih0eXBlb2YgYz09PSJzdHJpbmciKXtpZihTeXMuQnJvd3Nlci5hZ2VudCE9PVN5cy5Ccm93c2VyLkludGVybmV0RXhwbG9yZXJ8fFN5cy5Ccm93c2VyLnZlcnNpb24+Nyl7dmFyIGU9ZG9jdW1lbnQudGl0bGU7ZG9jdW1lbnQudGl0bGU9Yzt0aGlzLl9zZXRTdGF0ZShhKTtkb2N1bWVudC50aXRsZT1lfWVsc2UgdGhpcy5fc2V0U3RhdGUoYSk7dGhpcy5fcmFpc2VOYXZpZ2F0ZSgpfWVsc2V7dGhpcy5fc2V0U3RhdGUoYSk7dGhpcy5fcmFpc2VOYXZpZ2F0ZSgpfX19O1N5cy5fQXBwbGljYXRpb24ucHJvdG90eXBlLl9yYWlzZU5hdmlnYXRlPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5faGlzdG9yeVBvaW50SXNOZXcsYz10aGlzLmdldF9ldmVudHMoKS5nZXRIYW5kbGVyKCJuYXZpZ2F0ZSIpLGI9e307Zm9yKHZhciBhIGluIHRoaXMuX3N0YXRlKWlmKGEhPT0iX19zIiliW2FdPXRoaXMuX3N0YXRlW2FdO3ZhciBlPW5ldyBTeXMuSGlzdG9yeUV2ZW50QXJncyhiKTtpZihjKWModGhpcyxlKTtpZighZCl7dmFyIGY7dHJ5e2lmKFN5cy5Ccm93c2VyLmFnZW50PT09U3lzLkJyb3dzZXIuRmlyZWZveCYmd2luZG93LmxvY2F0aW9uLmhhc2gmJighd2luZG93LmZyYW1lRWxlbWVudHx8d2luZG93LnRvcC5sb2NhdGlvbi5oYXNoKSlTeXMuQnJvd3Nlci52ZXJzaW9uPDMuNT93aW5kb3cuaGlzdG9yeS5nbygwKToobG9jYXRpb24uaGFzaD10aGlzLmdldF9zdGF0ZVN0cmluZygpKX1jYXRjaChnKXt9fX07U3lzLl9BcHBsaWNhdGlvbi5wcm90b3R5cGUuX3NlcmlhbGl6ZVN0YXRlPWZ1bmN0aW9uKGQpe3ZhciBiPVtdO2Zvcih2YXIgYSBpbiBkKXt2YXIgZT1kW2FdO2lmKGE9PT0iX19zIil2YXIgYz1lO2Vsc2UgYltiLmxlbmd0aF09YSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUpfXJldHVybiBiLmpvaW4oIiYiKSsoYz8iJiYiK2M6IiIpfTtTeXMuX0FwcGxpY2F0aW9uLnByb3RvdHlwZS5fc2V0U3RhdGU9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLl9lbmFibGVIaXN0b3J5KXthPWF8fCIiO2lmKGEhPT10aGlzLl9jdXJyZW50RW50cnkpe2lmKHdpbmRvdy50aGVGb3JtKXt2YXIgZD13aW5kb3cudGhlRm9ybS5hY3Rpb24sZT1kLmluZGV4T2YoIiMiKTt3aW5kb3cudGhlRm9ybS5hY3Rpb249KGUhPT0tMT9kLnN1YnN0cmluZygwLGUpOmQpKyIjIithfWlmKHRoaXMuX2hpc3RvcnlGcmFtZSYmdGhpcy5faGlzdG9yeVBvaW50SXNOZXcpe3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2YuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYnx8ZG9jdW1lbnQudGl0bGUpKTt2YXIgZz1mLmlubmVySFRNTDt0aGlzLl9pZ25vcmVJRnJhbWU9dHJ1ZTt2YXIgYz10aGlzLl9oaXN0b3J5RnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtjLm9wZW4oImphdmFzY3JpcHQ6JzxodG1sPjwvaHRtbD4nIik7Yy53cml0ZSgiPGh0bWw+PGhlYWQ+PHRpdGxlPiIrZysiPC90aXRsZT48c2NyaSIrJ3B0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+cGFyZW50LlN5cy5BcHBsaWNhdGlvbi5fb25JRnJhbWVMb2FkKCcrU3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEpKyIpOzwvc2NyaSIrInB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIpO2MuY2xvc2UoKX10aGlzLl9pZ25vcmVUaW1lcj1mYWxzZTt0aGlzLl9jdXJyZW50RW50cnk9YTtpZih0aGlzLl9oaXN0b3J5RnJhbWV8fHRoaXMuX2hpc3RvcnlQb2ludElzTmV3KXt2YXIgaD10aGlzLmdldF9zdGF0ZVN0cmluZygpO2lmKGEhPT1oKXt3aW5kb3cubG9jYXRpb24uaGFzaD1hO3RoaXMuX2N1cnJlbnRFbnRyeT10aGlzLmdldF9zdGF0ZVN0cmluZygpO2lmKHR5cGVvZiBiIT09InVuZGVmaW5lZCImJmIhPT1udWxsKWRvY3VtZW50LnRpdGxlPWJ9fXRoaXMuX2hpc3RvcnlQb2ludElzTmV3PWZhbHNlfX19O1N5cy5fQXBwbGljYXRpb24ucHJvdG90eXBlLl91cGRhdGVIaWRkZW5GaWVsZD1mdW5jdGlvbihiKXtpZih0aGlzLl9jbGllbnRJZCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fY2xpZW50SWQpO2lmKGEpYS52YWx1ZT1ifX07aWYoIXdpbmRvdy5YTUxIdHRwUmVxdWVzdCl3aW5kb3cuWE1MSHR0cFJlcXVlc3Q9ZnVuY3Rpb24oKXt2YXIgYj1bIk1zeG1sMi5YTUxIVFRQLjMuMCIsIk1zeG1sMi5YTUxIVFRQIl07Zm9yKHZhciBhPTAsYz1iLmxlbmd0aDthPGM7YSsrKXRyeXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoYlthXSl9Y2F0Y2goZCl7fXJldHVybiBudWxsfTtUeXBlLnJlZ2lzdGVyTmFtZXNwYWNlKCJTeXMuTmV0Iik7U3lzLk5ldC5XZWJSZXF1ZXN0RXhlY3V0b3I9ZnVuY3Rpb24oKXt0aGlzLl93ZWJSZXF1ZXN0PW51bGw7dGhpcy5fcmVzdWx0T2JqZWN0PW51bGx9O1N5cy5OZXQuV2ViUmVxdWVzdEV4ZWN1dG9yLnByb3RvdHlwZT17Z2V0X3dlYlJlcXVlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2ViUmVxdWVzdH0sX3NldF93ZWJSZXF1ZXN0OmZ1bmN0aW9uKGEpe3RoaXMuX3dlYlJlcXVlc3Q9YX0sZ2V0X3N0YXJ0ZWQ6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvci5ub3RJbXBsZW1lbnRlZCgpfSxnZXRfcmVzcG9uc2VBdmFpbGFibGU6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvci5ub3RJbXBsZW1lbnRlZCgpfSxnZXRfdGltZWRPdXQ6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvci5ub3RJbXBsZW1lbnRlZCgpfSxnZXRfYWJvcnRlZDpmdW5jdGlvbigpe3Rocm93IEVycm9yLm5vdEltcGxlbWVudGVkKCl9LGdldF9yZXNwb25zZURhdGE6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvci5ub3RJbXBsZW1lbnRlZCgpfSxnZXRfc3RhdHVzQ29kZTpmdW5jdGlvbigpe3Rocm93IEVycm9yLm5vdEltcGxlbWVudGVkKCl9LGdldF9zdGF0dXNUZXh0OmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3Iubm90SW1wbGVtZW50ZWQoKX0sZ2V0X3htbDpmdW5jdGlvbigpe3Rocm93IEVycm9yLm5vdEltcGxlbWVudGVkKCl9LGdldF9vYmplY3Q6ZnVuY3Rpb24oKXtpZighdGhpcy5fcmVzdWx0T2JqZWN0KXRoaXMuX3Jlc3VsdE9iamVjdD1TeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5kZXNlcmlhbGl6ZSh0aGlzLmdldF9yZXNwb25zZURhdGEoKSk7cmV0dXJuIHRoaXMuX3Jlc3VsdE9iamVjdH0sZXhlY3V0ZVJlcXVlc3Q6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvci5ub3RJbXBsZW1lbnRlZCgpfSxhYm9ydDpmdW5jdGlvbigpe3Rocm93IEVycm9yLm5vdEltcGxlbWVudGVkKCl9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3Iubm90SW1wbGVtZW50ZWQoKX0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3Iubm90SW1wbGVtZW50ZWQoKX19O1N5cy5OZXQuV2ViUmVxdWVzdEV4ZWN1dG9yLnJlZ2lzdGVyQ2xhc3MoIlN5cy5OZXQuV2ViUmVxdWVzdEV4ZWN1dG9yIik7U3lzLk5ldC5YTUxET009ZnVuY3Rpb24oZCl7aWYoIXdpbmRvdy5ET01QYXJzZXIpe3ZhciBjPVsiTXN4bWwyLkRPTURvY3VtZW50LjMuMCIsIk1zeG1sMi5ET01Eb2N1bWVudCJdO2Zvcih2YXIgYj0wLGY9Yy5sZW5ndGg7YjxmO2IrKyl0cnl7dmFyIGE9bmV3IEFjdGl2ZVhPYmplY3QoY1tiXSk7YS5hc3luYz1mYWxzZTthLmxvYWRYTUwoZCk7YS5zZXRQcm9wZXJ0eSgiU2VsZWN0aW9uTGFuZ3VhZ2UiLCJYUGF0aCIpO3JldHVybiBhfWNhdGNoKGcpe319ZWxzZSB0cnl7dmFyIGU9bmV3IHdpbmRvdy5ET01QYXJzZXI7cmV0dXJuIGUucGFyc2VGcm9tU3RyaW5nKGQsInRleHQveG1sIil9Y2F0Y2goZyl7fXJldHVybiBudWxsfTtTeXMuTmV0LlhNTEh0dHBFeGVjdXRvcj1mdW5jdGlvbigpe1N5cy5OZXQuWE1MSHR0cEV4ZWN1dG9yLmluaXRpYWxpemVCYXNlKHRoaXMpO3ZhciBhPXRoaXM7dGhpcy5feG1sSHR0cFJlcXVlc3Q9bnVsbDt0aGlzLl93ZWJSZXF1ZXN0PW51bGw7dGhpcy5fcmVzcG9uc2VBdmFpbGFibGU9ZmFsc2U7dGhpcy5fdGltZWRPdXQ9ZmFsc2U7dGhpcy5fdGltZXI9bnVsbDt0aGlzLl9hYm9ydGVkPWZhbHNlO3RoaXMuX3N0YXJ0ZWQ9ZmFsc2U7dGhpcy5fb25SZWFkeVN0YXRlQ2hhbmdlPWZ1bmN0aW9uKCl7aWYoYS5feG1sSHR0cFJlcXVlc3QucmVhZHlTdGF0ZT09PTQpe3RyeXtpZih0eXBlb2YgYS5feG1sSHR0cFJlcXVlc3Quc3RhdHVzPT09InVuZGVmaW5lZCJ8fGEuX3htbEh0dHBSZXF1ZXN0LnN0YXR1cz09PTApcmV0dXJufWNhdGNoKGIpe3JldHVybn1hLl9jbGVhclRpbWVyKCk7YS5fcmVzcG9uc2VBdmFpbGFibGU9dHJ1ZTt0cnl7YS5fd2ViUmVxdWVzdC5jb21wbGV0ZWQoU3lzLkV2ZW50QXJncy5FbXB0eSl9ZmluYWxseXtpZihhLl94bWxIdHRwUmVxdWVzdCE9bnVsbCl7YS5feG1sSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlPUZ1bmN0aW9uLmVtcHR5TWV0aG9kO2EuX3htbEh0dHBSZXF1ZXN0PW51bGx9fX19O3RoaXMuX2NsZWFyVGltZXI9ZnVuY3Rpb24oKXtpZihhLl90aW1lciE9bnVsbCl7d2luZG93LmNsZWFyVGltZW91dChhLl90aW1lcik7YS5fdGltZXI9bnVsbH19O3RoaXMuX29uVGltZW91dD1mdW5jdGlvbigpe2lmKCFhLl9yZXNwb25zZUF2YWlsYWJsZSl7YS5fY2xlYXJUaW1lcigpO2EuX3RpbWVkT3V0PXRydWU7YS5feG1sSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlPUZ1bmN0aW9uLmVtcHR5TWV0aG9kO2EuX3htbEh0dHBSZXF1ZXN0LmFib3J0KCk7YS5fd2ViUmVxdWVzdC5jb21wbGV0ZWQoU3lzLkV2ZW50QXJncy5FbXB0eSk7YS5feG1sSHR0cFJlcXVlc3Q9bnVsbH19fTtTeXMuTmV0LlhNTEh0dHBFeGVjdXRvci5wcm90b3R5cGU9e2dldF90aW1lZE91dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lZE91dH0sZ2V0X3N0YXJ0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sZ2V0X3Jlc3BvbnNlQXZhaWxhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc3BvbnNlQXZhaWxhYmxlfSxnZXRfYWJvcnRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hYm9ydGVkfSxleGVjdXRlUmVxdWVzdDpmdW5jdGlvbigpe3RoaXMuX3dlYlJlcXVlc3Q9dGhpcy5nZXRfd2ViUmVxdWVzdCgpO3ZhciBjPXRoaXMuX3dlYlJlcXVlc3QuZ2V0X2JvZHkoKSxhPXRoaXMuX3dlYlJlcXVlc3QuZ2V0X2hlYWRlcnMoKTt0aGlzLl94bWxIdHRwUmVxdWVzdD1uZXcgWE1MSHR0cFJlcXVlc3Q7dGhpcy5feG1sSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlPXRoaXMuX29uUmVhZHlTdGF0ZUNoYW5nZTt2YXIgZT10aGlzLl93ZWJSZXF1ZXN0LmdldF9odHRwVmVyYigpO3RoaXMuX3htbEh0dHBSZXF1ZXN0Lm9wZW4oZSx0aGlzLl93ZWJSZXF1ZXN0LmdldFJlc29sdmVkVXJsKCksdHJ1ZSk7dGhpcy5feG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsIlhNTEh0dHBSZXF1ZXN0Iik7aWYoYSlmb3IodmFyIGIgaW4gYSl7dmFyIGY9YVtiXTtpZih0eXBlb2YgZiE9PSJmdW5jdGlvbiIpdGhpcy5feG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihiLGYpfWlmKGUudG9Mb3dlckNhc2UoKT09PSJwb3N0Iil7aWYoYT09PW51bGx8fCFhWyJDb250ZW50LVR5cGUiXSl0aGlzLl94bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9dXRmLTgiKTtpZighYyljPSIifXZhciBkPXRoaXMuX3dlYlJlcXVlc3QuZ2V0X3RpbWVvdXQoKTtpZihkPjApdGhpcy5fdGltZXI9d2luZG93LnNldFRpbWVvdXQoRnVuY3Rpb24uY3JlYXRlRGVsZWdhdGUodGhpcyx0aGlzLl9vblRpbWVvdXQpLGQpO3RoaXMuX3htbEh0dHBSZXF1ZXN0LnNlbmQoYyk7dGhpcy5fc3RhcnRlZD10cnVlfSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihiKXt2YXIgYTt0cnl7YT10aGlzLl94bWxIdHRwUmVxdWVzdC5nZXRSZXNwb25zZUhlYWRlcihiKX1jYXRjaChjKXt9aWYoIWEpYT0iIjtyZXR1cm4gYX0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3htbEh0dHBSZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpfSxnZXRfcmVzcG9uc2VEYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3htbEh0dHBSZXF1ZXN0LnJlc3BvbnNlVGV4dH0sZ2V0X3N0YXR1c0NvZGU6ZnVuY3Rpb24oKXt2YXIgYT0wO3RyeXthPXRoaXMuX3htbEh0dHBSZXF1ZXN0LnN0YXR1c31jYXRjaChiKXt9cmV0dXJuIGF9LGdldF9zdGF0dXNUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3htbEh0dHBSZXF1ZXN0LnN0YXR1c1RleHR9LGdldF94bWw6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl94bWxIdHRwUmVxdWVzdC5yZXNwb25zZVhNTDtpZighYXx8IWEuZG9jdW1lbnRFbGVtZW50KXthPVN5cy5OZXQuWE1MRE9NKHRoaXMuX3htbEh0dHBSZXF1ZXN0LnJlc3BvbnNlVGV4dCk7aWYoIWF8fCFhLmRvY3VtZW50RWxlbWVudClyZXR1cm4gbnVsbH1lbHNlIGlmKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTVNJRSIpIT09LTEmJnR5cGVvZiBhLnNldFByb3BlcnR5IT0idW5kZWZpbmVkIilhLnNldFByb3BlcnR5KCJTZWxlY3Rpb25MYW5ndWFnZSIsIlhQYXRoIik7aWYoYS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvbmV3bGF5b3V0L3htbC9wYXJzZXJlcnJvci54bWwiJiZhLmRvY3VtZW50RWxlbWVudC50YWdOYW1lPT09InBhcnNlcmVycm9yIilyZXR1cm4gbnVsbDtpZihhLmRvY3VtZW50RWxlbWVudC5maXJzdENoaWxkJiZhLmRvY3VtZW50RWxlbWVudC5maXJzdENoaWxkLnRhZ05hbWU9PT0icGFyc2VyZXJyb3IiKXJldHVybiBudWxsO3JldHVybiBhfSxhYm9ydDpmdW5jdGlvbigpe2lmKHRoaXMuX2Fib3J0ZWR8fHRoaXMuX3Jlc3BvbnNlQXZhaWxhYmxlfHx0aGlzLl90aW1lZE91dClyZXR1cm47dGhpcy5fYWJvcnRlZD10cnVlO3RoaXMuX2NsZWFyVGltZXIoKTtpZih0aGlzLl94bWxIdHRwUmVxdWVzdCYmIXRoaXMuX3Jlc3BvbnNlQXZhaWxhYmxlKXt0aGlzLl94bWxIdHRwUmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2U9RnVuY3Rpb24uZW1wdHlNZXRob2Q7dGhpcy5feG1sSHR0cFJlcXVlc3QuYWJvcnQoKTt0aGlzLl94bWxIdHRwUmVxdWVzdD1udWxsO3RoaXMuX3dlYlJlcXVlc3QuY29tcGxldGVkKFN5cy5FdmVudEFyZ3MuRW1wdHkpfX19O1N5cy5OZXQuWE1MSHR0cEV4ZWN1dG9yLnJlZ2lzdGVyQ2xhc3MoIlN5cy5OZXQuWE1MSHR0cEV4ZWN1dG9yIixTeXMuTmV0LldlYlJlcXVlc3RFeGVjdXRvcik7U3lzLk5ldC5fV2ViUmVxdWVzdE1hbmFnZXI9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0VGltZW91dD0wO3RoaXMuX2RlZmF1bHRFeGVjdXRvclR5cGU9IlN5cy5OZXQuWE1MSHR0cEV4ZWN1dG9yIn07U3lzLk5ldC5fV2ViUmVxdWVzdE1hbmFnZXIucHJvdG90eXBlPXthZGRfaW52b2tpbmdSZXF1ZXN0OmZ1bmN0aW9uKGEpe3RoaXMuX2dldF9ldmVudEhhbmRsZXJMaXN0KCkuYWRkSGFuZGxlcigiaW52b2tpbmdSZXF1ZXN0IixhKX0scmVtb3ZlX2ludm9raW5nUmVxdWVzdDpmdW5jdGlvbihhKXt0aGlzLl9nZXRfZXZlbnRIYW5kbGVyTGlzdCgpLnJlbW92ZUhhbmRsZXIoImludm9raW5nUmVxdWVzdCIsYSl9LGFkZF9jb21wbGV0ZWRSZXF1ZXN0OmZ1bmN0aW9uKGEpe3RoaXMuX2dldF9ldmVudEhhbmRsZXJMaXN0KCkuYWRkSGFuZGxlcigiY29tcGxldGVkUmVxdWVzdCIsYSl9LHJlbW92ZV9jb21wbGV0ZWRSZXF1ZXN0OmZ1bmN0aW9uKGEpe3RoaXMuX2dldF9ldmVudEhhbmRsZXJMaXN0KCkucmVtb3ZlSGFuZGxlcigiY29tcGxldGVkUmVxdWVzdCIsYSl9LF9nZXRfZXZlbnRIYW5kbGVyTGlzdDpmdW5jdGlvbigpe2lmKCF0aGlzLl9ldmVudHMpdGhpcy5fZXZlbnRzPW5ldyBTeXMuRXZlbnRIYW5kbGVyTGlzdDtyZXR1cm4gdGhpcy5fZXZlbnRzfSxnZXRfZGVmYXVsdFRpbWVvdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFRpbWVvdXR9LHNldF9kZWZhdWx0VGltZW91dDpmdW5jdGlvbihhKXt0aGlzLl9kZWZhdWx0VGltZW91dD1hfSxnZXRfZGVmYXVsdEV4ZWN1dG9yVHlwZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0RXhlY3V0b3JUeXBlfSxzZXRfZGVmYXVsdEV4ZWN1dG9yVHlwZTpmdW5jdGlvbihhKXt0aGlzLl9kZWZhdWx0RXhlY3V0b3JUeXBlPWF9LGV4ZWN1dGVSZXF1ZXN0OmZ1bmN0aW9uKHdlYlJlcXVlc3Qpe3ZhciBleGVjdXRvcj13ZWJSZXF1ZXN0LmdldF9leGVjdXRvcigpO2lmKCFleGVjdXRvcil7dmFyIGZhaWxlZD1mYWxzZTt0cnl7dmFyIGV4ZWN1dG9yVHlwZT1ldmFsKHRoaXMuX2RlZmF1bHRFeGVjdXRvclR5cGUpO2V4ZWN1dG9yPW5ldyBleGVjdXRvclR5cGV9Y2F0Y2goYSl7ZmFpbGVkPXRydWV9d2ViUmVxdWVzdC5zZXRfZXhlY3V0b3IoZXhlY3V0b3IpfWlmKGV4ZWN1dG9yLmdldF9hYm9ydGVkKCkpcmV0dXJuO3ZhciBldkFyZ3M9bmV3IFN5cy5OZXQuTmV0d29ya1JlcXVlc3RFdmVudEFyZ3Mod2ViUmVxdWVzdCksaGFuZGxlcj10aGlzLl9nZXRfZXZlbnRIYW5kbGVyTGlzdCgpLmdldEhhbmRsZXIoImludm9raW5nUmVxdWVzdCIpO2lmKGhhbmRsZXIpaGFuZGxlcih0aGlzLGV2QXJncyk7aWYoIWV2QXJncy5nZXRfY2FuY2VsKCkpZXhlY3V0b3IuZXhlY3V0ZVJlcXVlc3QoKX19O1N5cy5OZXQuX1dlYlJlcXVlc3RNYW5hZ2VyLnJlZ2lzdGVyQ2xhc3MoIlN5cy5OZXQuX1dlYlJlcXVlc3RNYW5hZ2VyIik7U3lzLk5ldC5XZWJSZXF1ZXN0TWFuYWdlcj1uZXcgU3lzLk5ldC5fV2ViUmVxdWVzdE1hbmFnZXI7U3lzLk5ldC5OZXR3b3JrUmVxdWVzdEV2ZW50QXJncz1mdW5jdGlvbihhKXtTeXMuTmV0Lk5ldHdvcmtSZXF1ZXN0RXZlbnRBcmdzLmluaXRpYWxpemVCYXNlKHRoaXMpO3RoaXMuX3dlYlJlcXVlc3Q9YX07U3lzLk5ldC5OZXR3b3JrUmVxdWVzdEV2ZW50QXJncy5wcm90b3R5cGU9e2dldF93ZWJSZXF1ZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dlYlJlcXVlc3R9fTtTeXMuTmV0Lk5ldHdvcmtSZXF1ZXN0RXZlbnRBcmdzLnJlZ2lzdGVyQ2xhc3MoIlN5cy5OZXQuTmV0d29ya1JlcXVlc3RFdmVudEFyZ3MiLFN5cy5DYW5jZWxFdmVudEFyZ3MpO1N5cy5OZXQuV2ViUmVxdWVzdD1mdW5jdGlvbigpe3RoaXMuX3VybD0iIjt0aGlzLl9oZWFkZXJzPXt9O3RoaXMuX2JvZHk9bnVsbDt0aGlzLl91c2VyQ29udGV4dD1udWxsO3RoaXMuX2h0dHBWZXJiPW51bGw7dGhpcy5fZXhlY3V0b3I9bnVsbDt0aGlzLl9pbnZva2VDYWxsZWQ9ZmFsc2U7dGhpcy5fdGltZW91dD0wfTtTeXMuTmV0LldlYlJlcXVlc3QucHJvdG90eXBlPXthZGRfY29tcGxldGVkOmZ1bmN0aW9uKGEpe3RoaXMuX2dldF9ldmVudEhhbmRsZXJMaXN0KCkuYWRkSGFuZGxlcigiY29tcGxldGVkIixhKX0scmVtb3ZlX2NvbXBsZXRlZDpmdW5jdGlvbihhKXt0aGlzLl9nZXRfZXZlbnRIYW5kbGVyTGlzdCgpLnJlbW92ZUhhbmRsZXIoImNvbXBsZXRlZCIsYSl9LGNvbXBsZXRlZDpmdW5jdGlvbihiKXt2YXIgYT1TeXMuTmV0LldlYlJlcXVlc3RNYW5hZ2VyLl9nZXRfZXZlbnRIYW5kbGVyTGlzdCgpLmdldEhhbmRsZXIoImNvbXBsZXRlZFJlcXVlc3QiKTtpZihhKWEodGhpcy5fZXhlY3V0b3IsYik7YT10aGlzLl9nZXRfZXZlbnRIYW5kbGVyTGlzdCgpLmdldEhhbmRsZXIoImNvbXBsZXRlZCIpO2lmKGEpYSh0aGlzLl9leGVjdXRvcixiKX0sX2dldF9ldmVudEhhbmRsZXJMaXN0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2V2ZW50cyl0aGlzLl9ldmVudHM9bmV3IFN5cy5FdmVudEhhbmRsZXJMaXN0O3JldHVybiB0aGlzLl9ldmVudHN9LGdldF91cmw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXJsfSxzZXRfdXJsOmZ1bmN0aW9uKGEpe3RoaXMuX3VybD1hfSxnZXRfaGVhZGVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWFkZXJzfSxnZXRfaHR0cFZlcmI6ZnVuY3Rpb24oKXtpZih0aGlzLl9odHRwVmVyYj09PW51bGwpe2lmKHRoaXMuX2JvZHk9PT1udWxsKXJldHVybiAiR0VUIjtyZXR1cm4gIlBPU1QifXJldHVybiB0aGlzLl9odHRwVmVyYn0sc2V0X2h0dHBWZXJiOmZ1bmN0aW9uKGEpe3RoaXMuX2h0dHBWZXJiPWF9LGdldF9ib2R5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvZHl9LHNldF9ib2R5OmZ1bmN0aW9uKGEpe3RoaXMuX2JvZHk9YX0sZ2V0X3VzZXJDb250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VzZXJDb250ZXh0fSxzZXRfdXNlckNvbnRleHQ6ZnVuY3Rpb24oYSl7dGhpcy5fdXNlckNvbnRleHQ9YX0sZ2V0X2V4ZWN1dG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V4ZWN1dG9yfSxzZXRfZXhlY3V0b3I6ZnVuY3Rpb24oYSl7dGhpcy5fZXhlY3V0b3I9YTt0aGlzLl9leGVjdXRvci5fc2V0X3dlYlJlcXVlc3QodGhpcyl9LGdldF90aW1lb3V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fdGltZW91dD09PTApcmV0dXJuIFN5cy5OZXQuV2ViUmVxdWVzdE1hbmFnZXIuZ2V0X2RlZmF1bHRUaW1lb3V0KCk7cmV0dXJuIHRoaXMuX3RpbWVvdXR9LHNldF90aW1lb3V0OmZ1bmN0aW9uKGEpe3RoaXMuX3RpbWVvdXQ9YX0sZ2V0UmVzb2x2ZWRVcmw6ZnVuY3Rpb24oKXtyZXR1cm4gU3lzLk5ldC5XZWJSZXF1ZXN0Ll9yZXNvbHZlVXJsKHRoaXMuX3VybCl9LGludm9rZTpmdW5jdGlvbigpe1N5cy5OZXQuV2ViUmVxdWVzdE1hbmFnZXIuZXhlY3V0ZVJlcXVlc3QodGhpcyk7dGhpcy5faW52b2tlQ2FsbGVkPXRydWV9fTtTeXMuTmV0LldlYlJlcXVlc3QuX3Jlc29sdmVVcmw9ZnVuY3Rpb24oYixhKXtpZihiJiZiLmluZGV4T2YoIjovLyIpIT09LTEpcmV0dXJuIGI7aWYoIWF8fGEubGVuZ3RoPT09MCl7dmFyIGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJhc2UiKVswXTtpZihkJiZkLmhyZWYmJmQuaHJlZi5sZW5ndGg+MClhPWQuaHJlZjtlbHNlIGE9ZG9jdW1lbnQuVVJMfXZhciBjPWEuaW5kZXhPZigiPyIpO2lmKGMhPT0tMSlhPWEuc3Vic3RyKDAsYyk7Yz1hLmluZGV4T2YoIiMiKTtpZihjIT09LTEpYT1hLnN1YnN0cigwLGMpO2E9YS5zdWJzdHIoMCxhLmxhc3RJbmRleE9mKCIvIikrMSk7aWYoIWJ8fGIubGVuZ3RoPT09MClyZXR1cm4gYTtpZihiLmNoYXJBdCgwKT09PSIvIil7dmFyIGU9YS5pbmRleE9mKCI6Ly8iKSxnPWEuaW5kZXhPZigiLyIsZSszKTtyZXR1cm4gYS5zdWJzdHIoMCxnKStifWVsc2V7dmFyIGY9YS5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBhLnN1YnN0cigwLGYrMSkrYn19O1N5cy5OZXQuV2ViUmVxdWVzdC5fY3JlYXRlUXVlcnlTdHJpbmc9ZnVuY3Rpb24oYyxiLGYpe2I9Ynx8ZW5jb2RlVVJJQ29tcG9uZW50O3ZhciBoPTAsZSxnLGQsYT1uZXcgU3lzLlN0cmluZ0J1aWxkZXI7aWYoYylmb3IoZCBpbiBjKXtlPWNbZF07aWYodHlwZW9mIGU9PT0iZnVuY3Rpb24iKWNvbnRpbnVlO2c9U3lzLlNlcmlhbGl6YXRpb24uSmF2YVNjcmlwdFNlcmlhbGl6ZXIuc2VyaWFsaXplKGUpO2lmKGgrKylhLmFwcGVuZCgiJiIpO2EuYXBwZW5kKGQpO2EuYXBwZW5kKCI9Iik7YS5hcHBlbmQoYihnKSl9aWYoZil7aWYoaClhLmFwcGVuZCgiJiIpO2EuYXBwZW5kKGYpfXJldHVybiBhLnRvU3RyaW5nKCl9O1N5cy5OZXQuV2ViUmVxdWVzdC5fY3JlYXRlVXJsPWZ1bmN0aW9uKGEsYixjKXtpZighYiYmIWMpcmV0dXJuIGE7dmFyIGQ9U3lzLk5ldC5XZWJSZXF1ZXN0Ll9jcmVhdGVRdWVyeVN0cmluZyhiLG51bGwsYyk7cmV0dXJuIGQubGVuZ3RoP2ErKGEmJmEuaW5kZXhPZigiPyIpPj0wPyImIjoiPyIpK2Q6YX07U3lzLk5ldC5XZWJSZXF1ZXN0LnJlZ2lzdGVyQ2xhc3MoIlN5cy5OZXQuV2ViUmVxdWVzdCIpO1N5cy5fU2NyaXB0TG9hZGVyVGFzaz1mdW5jdGlvbihiLGEpe3RoaXMuX3NjcmlwdEVsZW1lbnQ9Yjt0aGlzLl9jb21wbGV0ZWRDYWxsYmFjaz1hfTtTeXMuX1NjcmlwdExvYWRlclRhc2sucHJvdG90eXBlPXtnZXRfc2NyaXB0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY3JpcHRFbGVtZW50fSxkaXNwb3NlOmZ1bmN0aW9uKCl7aWYodGhpcy5fZGlzcG9zZWQpcmV0dXJuO3RoaXMuX2Rpc3Bvc2VkPXRydWU7dGhpcy5fcmVtb3ZlU2NyaXB0RWxlbWVudEhhbmRsZXJzKCk7U3lzLl9TY3JpcHRMb2FkZXJUYXNrLl9jbGVhclNjcmlwdCh0aGlzLl9zY3JpcHRFbGVtZW50KTt0aGlzLl9zY3JpcHRFbGVtZW50PW51bGx9LGV4ZWN1dGU6ZnVuY3Rpb24oKXtpZih0aGlzLl9lbnN1cmVSZWFkeVN0YXRlTG9hZGVkKCkpdGhpcy5fZXhlY3V0ZUludGVybmFsKCl9LF9leGVjdXRlSW50ZXJuYWw6ZnVuY3Rpb24oKXt0aGlzLl9hZGRTY3JpcHRFbGVtZW50SGFuZGxlcnMoKTtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKHRoaXMuX3NjcmlwdEVsZW1lbnQpfSxfZW5zdXJlUmVhZHlTdGF0ZUxvYWRlZDpmdW5jdGlvbigpe2lmKHRoaXMuX3VzZVJlYWR5U3RhdGUoKSYmdGhpcy5fc2NyaXB0RWxlbWVudC5yZWFkeVN0YXRlIT09ImxvYWRlZCImJnRoaXMuX3NjcmlwdEVsZW1lbnQucmVhZHlTdGF0ZSE9PSJjb21wbGV0ZSIpe3RoaXMuX3NjcmlwdERvd25sb2FkRGVsZWdhdGU9RnVuY3Rpb24uY3JlYXRlRGVsZWdhdGUodGhpcyx0aGlzLl9leGVjdXRlSW50ZXJuYWwpOyRhZGRIYW5kbGVyKHRoaXMuX3NjcmlwdEVsZW1lbnQsInJlYWR5c3RhdGVjaGFuZ2UiLHRoaXMuX3NjcmlwdERvd25sb2FkRGVsZWdhdGUpO3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0sX2FkZFNjcmlwdEVsZW1lbnRIYW5kbGVyczpmdW5jdGlvbigpe2lmKHRoaXMuX3NjcmlwdERvd25sb2FkRGVsZWdhdGUpeyRyZW1vdmVIYW5kbGVyKHRoaXMuX3NjcmlwdEVsZW1lbnQsInJlYWR5c3RhdGVjaGFuZ2UiLHRoaXMuX3NjcmlwdERvd25sb2FkRGVsZWdhdGUpO3RoaXMuX3NjcmlwdERvd25sb2FkRGVsZWdhdGU9bnVsbH10aGlzLl9zY3JpcHRMb2FkRGVsZWdhdGU9RnVuY3Rpb24uY3JlYXRlRGVsZWdhdGUodGhpcyx0aGlzLl9zY3JpcHRMb2FkSGFuZGxlcik7aWYodGhpcy5fdXNlUmVhZHlTdGF0ZSgpKSRhZGRIYW5kbGVyKHRoaXMuX3NjcmlwdEVsZW1lbnQsInJlYWR5c3RhdGVjaGFuZ2UiLHRoaXMuX3NjcmlwdExvYWREZWxlZ2F0ZSk7ZWxzZSAkYWRkSGFuZGxlcih0aGlzLl9zY3JpcHRFbGVtZW50LCJsb2FkIix0aGlzLl9zY3JpcHRMb2FkRGVsZWdhdGUpO2lmKHRoaXMuX3NjcmlwdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcil7dGhpcy5fc2NyaXB0RXJyb3JEZWxlZ2F0ZT1GdW5jdGlvbi5jcmVhdGVEZWxlZ2F0ZSh0aGlzLHRoaXMuX3NjcmlwdEVycm9ySGFuZGxlcik7dGhpcy5fc2NyaXB0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5fc2NyaXB0RXJyb3JEZWxlZ2F0ZSxmYWxzZSl9fSxfcmVtb3ZlU2NyaXB0RWxlbWVudEhhbmRsZXJzOmZ1bmN0aW9uKCl7aWYodGhpcy5fc2NyaXB0TG9hZERlbGVnYXRlKXt2YXIgYT10aGlzLmdldF9zY3JpcHRFbGVtZW50KCk7aWYodGhpcy5fc2NyaXB0RG93bmxvYWREZWxlZ2F0ZSl7JHJlbW92ZUhhbmRsZXIodGhpcy5fc2NyaXB0RWxlbWVudCwicmVhZHlzdGF0ZWNoYW5nZSIsdGhpcy5fc2NyaXB0RG93bmxvYWREZWxlZ2F0ZSk7dGhpcy5fc2NyaXB0RG93bmxvYWREZWxlZ2F0ZT1udWxsfWlmKHRoaXMuX3VzZVJlYWR5U3RhdGUoKSYmdGhpcy5fc2NyaXB0TG9hZERlbGVnYXRlKSRyZW1vdmVIYW5kbGVyKGEsInJlYWR5c3RhdGVjaGFuZ2UiLHRoaXMuX3NjcmlwdExvYWREZWxlZ2F0ZSk7ZWxzZSAkcmVtb3ZlSGFuZGxlcihhLCJsb2FkIix0aGlzLl9zY3JpcHRMb2FkRGVsZWdhdGUpO2lmKHRoaXMuX3NjcmlwdEVycm9yRGVsZWdhdGUpe3RoaXMuX3NjcmlwdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHRoaXMuX3NjcmlwdEVycm9yRGVsZWdhdGUsZmFsc2UpO3RoaXMuX3NjcmlwdEVycm9yRGVsZWdhdGU9bnVsbH10aGlzLl9zY3JpcHRMb2FkRGVsZWdhdGU9bnVsbH19LF9zY3JpcHRFcnJvckhhbmRsZXI6ZnVuY3Rpb24oKXtpZih0aGlzLl9kaXNwb3NlZClyZXR1cm47dGhpcy5fY29tcGxldGVkQ2FsbGJhY2sodGhpcy5nZXRfc2NyaXB0RWxlbWVudCgpLGZhbHNlKX0sX3NjcmlwdExvYWRIYW5kbGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5fZGlzcG9zZWQpcmV0dXJuO3ZhciBhPXRoaXMuZ2V0X3NjcmlwdEVsZW1lbnQoKTtpZih0aGlzLl91c2VSZWFkeVN0YXRlKCkmJmEucmVhZHlTdGF0ZSE9PSJjb21wbGV0ZSIpcmV0dXJuO3RoaXMuX2NvbXBsZXRlZENhbGxiYWNrKGEsdHJ1ZSl9LF91c2VSZWFkeVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIFN5cy5Ccm93c2VyLmFnZW50PT09U3lzLkJyb3dzZXIuSW50ZXJuZXRFeHBsb3JlciYmKFN5cy5Ccm93c2VyLnZlcnNpb248OXx8KGRvY3VtZW50LmRvY3VtZW50TW9kZXx8MCk8OSl9fTtTeXMuX1NjcmlwdExvYWRlclRhc2sucmVnaXN0ZXJDbGFzcygiU3lzLl9TY3JpcHRMb2FkZXJUYXNrIixudWxsLFN5cy5JRGlzcG9zYWJsZSk7U3lzLl9TY3JpcHRMb2FkZXJUYXNrLl9jbGVhclNjcmlwdD1mdW5jdGlvbihhKXtpZighU3lzLkRlYnVnLmlzRGVidWcmJmEucGFyZW50Tm9kZSlhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSl9O1R5cGUucmVnaXN0ZXJOYW1lc3BhY2UoIlN5cy5OZXQiKTtTeXMuTmV0LldlYlNlcnZpY2VQcm94eT1mdW5jdGlvbigpe307U3lzLk5ldC5XZWJTZXJ2aWNlUHJveHkucHJvdG90eXBlPXtnZXRfdGltZW91dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lb3V0fHwwfSxzZXRfdGltZW91dDpmdW5jdGlvbihhKXtpZihhPDApdGhyb3cgRXJyb3IuYXJndW1lbnRPdXRPZlJhbmdlKCJ2YWx1ZSIsYSxTeXMuUmVzLmludmFsaWRUaW1lb3V0KTt0aGlzLl90aW1lb3V0PWF9LGdldF9kZWZhdWx0VXNlckNvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIHRoaXMuX3VzZXJDb250ZXh0PT09InVuZGVmaW5lZCI/bnVsbDp0aGlzLl91c2VyQ29udGV4dH0sc2V0X2RlZmF1bHRVc2VyQ29udGV4dDpmdW5jdGlvbihhKXt0aGlzLl91c2VyQ29udGV4dD1hfSxnZXRfZGVmYXVsdFN1Y2NlZWRlZENhbGxiYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N1Y2NlZWRlZHx8bnVsbH0sc2V0X2RlZmF1bHRTdWNjZWVkZWRDYWxsYmFjazpmdW5jdGlvbihhKXt0aGlzLl9zdWNjZWVkZWQ9YX0sZ2V0X2RlZmF1bHRGYWlsZWRDYWxsYmFjazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mYWlsZWR8fG51bGx9LHNldF9kZWZhdWx0RmFpbGVkQ2FsbGJhY2s6ZnVuY3Rpb24oYSl7dGhpcy5fZmFpbGVkPWF9LGdldF9lbmFibGVKc29ucDpmdW5jdGlvbigpe3JldHVybiAhIXRoaXMuX2pzb25wfSxzZXRfZW5hYmxlSnNvbnA6ZnVuY3Rpb24oYSl7dGhpcy5fanNvbnA9YX0sZ2V0X3BhdGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGF0aHx8bnVsbH0sc2V0X3BhdGg6ZnVuY3Rpb24oYSl7dGhpcy5fcGF0aD1hfSxnZXRfanNvbnBDYWxsYmFja1BhcmFtZXRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxsYmFja1BhcmFtZXRlcnx8ImNhbGxiYWNrIn0sc2V0X2pzb25wQ2FsbGJhY2tQYXJhbWV0ZXI6ZnVuY3Rpb24oYSl7dGhpcy5fY2FsbGJhY2tQYXJhbWV0ZXI9YX0sX2ludm9rZTpmdW5jdGlvbihkLGUsZyxmLGMsYixhKXtjPWN8fHRoaXMuZ2V0X2RlZmF1bHRTdWNjZWVkZWRDYWxsYmFjaygpO2I9Ynx8dGhpcy5nZXRfZGVmYXVsdEZhaWxlZENhbGxiYWNrKCk7aWYoYT09PW51bGx8fHR5cGVvZiBhPT09InVuZGVmaW5lZCIpYT10aGlzLmdldF9kZWZhdWx0VXNlckNvbnRleHQoKTtyZXR1cm4gU3lzLk5ldC5XZWJTZXJ2aWNlUHJveHkuaW52b2tlKGQsZSxnLGYsYyxiLGEsdGhpcy5nZXRfdGltZW91dCgpLHRoaXMuZ2V0X2VuYWJsZUpzb25wKCksdGhpcy5nZXRfanNvbnBDYWxsYmFja1BhcmFtZXRlcigpKX19O1N5cy5OZXQuV2ViU2VydmljZVByb3h5LnJlZ2lzdGVyQ2xhc3MoIlN5cy5OZXQuV2ViU2VydmljZVByb3h5Iik7U3lzLk5ldC5XZWJTZXJ2aWNlUHJveHkuaW52b2tlPWZ1bmN0aW9uKHEsYSxtLGwsaixiLGcsZSx3LHApe3ZhciBpPXchPT1mYWxzZT9TeXMuTmV0LldlYlNlcnZpY2VQcm94eS5feGRvbWFpbi5leGVjKHEpOm51bGwsYyxuPWkmJmkubGVuZ3RoPT09MyYmKGlbMV0hPT1sb2NhdGlvbi5wcm90b2NvbHx8aVsyXSE9PWxvY2F0aW9uLmhvc3QpO209bnx8bTtpZihuKXtwPXB8fCJjYWxsYmFjayI7Yz0iX2pzb25wIitTeXMuX2pzb25wKyt9aWYoIWwpbD17fTt2YXIgcj1sO2lmKCFtfHwhcilyPXt9O3ZhciBzLGgsZj1udWxsLGssbz1udWxsLHU9U3lzLk5ldC5XZWJSZXF1ZXN0Ll9jcmVhdGVVcmwoYT9xKyIvIitlbmNvZGVVUklDb21wb25lbnQoYSk6cSxyLG4/cCsiPVN5cy4iK2M6bnVsbCk7aWYobil7cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtzLnNyYz11O2s9bmV3IFN5cy5fU2NyaXB0TG9hZGVyVGFzayhzLGZ1bmN0aW9uKGQsYil7aWYoIWJ8fGMpdCh7TWVzc2FnZTpTdHJpbmcuZm9ybWF0KFN5cy5SZXMud2ViU2VydmljZUZhaWxlZE5vTXNnLGEpfSwtMSl9KTtmdW5jdGlvbiB2KCl7aWYoZj09PW51bGwpcmV0dXJuO2Y9bnVsbDtoPW5ldyBTeXMuTmV0LldlYlNlcnZpY2VFcnJvcih0cnVlLFN0cmluZy5mb3JtYXQoU3lzLlJlcy53ZWJTZXJ2aWNlVGltZWRPdXQsYSkpO2suZGlzcG9zZSgpO2RlbGV0ZSBTeXNbY107aWYoYiliKGgsZyxhKX1mdW5jdGlvbiB0KGQsZSl7aWYoZiE9PW51bGwpe3dpbmRvdy5jbGVhclRpbWVvdXQoZik7Zj1udWxsfWsuZGlzcG9zZSgpO2RlbGV0ZSBTeXNbY107Yz1udWxsO2lmKHR5cGVvZiBlIT09InVuZGVmaW5lZCImJmUhPT0yMDApe2lmKGIpe2g9bmV3IFN5cy5OZXQuV2ViU2VydmljZUVycm9yKGZhbHNlLGQuTWVzc2FnZXx8U3RyaW5nLmZvcm1hdChTeXMuUmVzLndlYlNlcnZpY2VGYWlsZWROb01zZyxhKSxkLlN0YWNrVHJhY2V8fG51bGwsZC5FeGNlcHRpb25UeXBlfHxudWxsLGQpO2guX3N0YXR1c0NvZGU9ZTtiKGgsZyxhKX19ZWxzZSBpZihqKWooZCxnLGEpfVN5c1tjXT10O2U9ZXx8U3lzLk5ldC5XZWJSZXF1ZXN0TWFuYWdlci5nZXRfZGVmYXVsdFRpbWVvdXQoKTtpZihlPjApZj13aW5kb3cuc2V0VGltZW91dCh2LGUpO2suZXhlY3V0ZSgpO3JldHVybiBudWxsfXZhciBkPW5ldyBTeXMuTmV0LldlYlJlcXVlc3Q7ZC5zZXRfdXJsKHUpO2QuZ2V0X2hlYWRlcnMoKVsiQ29udGVudC1UeXBlIl09ImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiO2lmKCFtKXtvPVN5cy5TZXJpYWxpemF0aW9uLkphdmFTY3JpcHRTZXJpYWxpemVyLnNlcmlhbGl6ZShsKTtpZihvPT09Int9IilvPSIifWQuc2V0X2JvZHkobyk7ZC5hZGRfY29tcGxldGVkKHgpO2lmKGUmJmU+MClkLnNldF90aW1lb3V0KGUpO2QuaW52b2tlKCk7ZnVuY3Rpb24geChkKXtpZihkLmdldF9yZXNwb25zZUF2YWlsYWJsZSgpKXt2YXIgZj1kLmdldF9zdGF0dXNDb2RlKCksYz1udWxsO3RyeXt2YXIgZT1kLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKTtpZihlLnN0YXJ0c1dpdGgoImFwcGxpY2F0aW9uL2pzb24iKSljPWQuZ2V0X29iamVjdCgpO2Vsc2UgaWYoZS5zdGFydHNXaXRoKCJ0ZXh0L3htbCIpKWM9ZC5nZXRfeG1sKCk7ZWxzZSBjPWQuZ2V0X3Jlc3BvbnNlRGF0YSgpfWNhdGNoKG0pe312YXIgaz1kLmdldFJlc3BvbnNlSGVhZGVyKCJqc29uZXJyb3IiKSxoPWs9PT0idHJ1ZSI7aWYoaCl7aWYoYyljPW5ldyBTeXMuTmV0LldlYlNlcnZpY2VFcnJvcihmYWxzZSxjLk1lc3NhZ2UsYy5TdGFja1RyYWNlLGMuRXhjZXB0aW9uVHlwZSxjKX1lbHNlIGlmKGUuc3RhcnRzV2l0aCgiYXBwbGljYXRpb24vanNvbiIpKWM9IWN8fHR5cGVvZiBjLmQ9PT0idW5kZWZpbmVkIj9jOmMuZDtpZihmPDIwMHx8Zj49MzAwfHxoKXtpZihiKXtpZighY3x8IWgpYz1uZXcgU3lzLk5ldC5XZWJTZXJ2aWNlRXJyb3IoZmFsc2UsU3RyaW5nLmZvcm1hdChTeXMuUmVzLndlYlNlcnZpY2VGYWlsZWROb01zZyxhKSk7Yy5fc3RhdHVzQ29kZT1mO2IoYyxnLGEpfX1lbHNlIGlmKGopaihjLGcsYSl9ZWxzZXt2YXIgaTtpZihkLmdldF90aW1lZE91dCgpKWk9U3RyaW5nLmZvcm1hdChTeXMuUmVzLndlYlNlcnZpY2VUaW1lZE91dCxhKTtlbHNlIGk9U3RyaW5nLmZvcm1hdChTeXMuUmVzLndlYlNlcnZpY2VGYWlsZWROb01zZyxhKTtpZihiKWIobmV3IFN5cy5OZXQuV2ViU2VydmljZUVycm9yKGQuZ2V0X3RpbWVkT3V0KCksaSwiIiwiIiksZyxhKX19cmV0dXJuIGR9O1N5cy5OZXQuV2ViU2VydmljZVByb3h5Ll9nZW5lcmF0ZVR5cGVkQ29uc3RydWN0b3I9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2lmKGIpZm9yKHZhciBjIGluIGIpdGhpc1tjXT1iW2NdO3RoaXMuX190eXBlPWF9fTtTeXMuX2pzb25wPTA7U3lzLk5ldC5XZWJTZXJ2aWNlUHJveHkuX3hkb21haW49L15ccyooW2EtekEtWjAtOVwrXC1cLl0rXDopXC9cLyhbXj8jXC9dKykvO1N5cy5OZXQuV2ViU2VydmljZUVycm9yPWZ1bmN0aW9uKGQsZSxjLGEsYil7dGhpcy5fdGltZWRPdXQ9ZDt0aGlzLl9tZXNzYWdlPWU7dGhpcy5fc3RhY2tUcmFjZT1jO3RoaXMuX2V4Y2VwdGlvblR5cGU9YTt0aGlzLl9lcnJvck9iamVjdD1iO3RoaXMuX3N0YXR1c0NvZGU9LTF9O1N5cy5OZXQuV2ViU2VydmljZUVycm9yLnByb3RvdHlwZT17Z2V0X3RpbWVkT3V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpbWVkT3V0fSxnZXRfc3RhdHVzQ29kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0dXNDb2RlfSxnZXRfbWVzc2FnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZXNzYWdlfSxnZXRfc3RhY2tUcmFjZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFja1RyYWNlfHwiIn0sZ2V0X2V4Y2VwdGlvblR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXhjZXB0aW9uVHlwZXx8IiJ9LGdldF9lcnJvck9iamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lcnJvck9iamVjdHx8bnVsbH19O1N5cy5OZXQuV2ViU2VydmljZUVycm9yLnJlZ2lzdGVyQ2xhc3MoIlN5cy5OZXQuV2ViU2VydmljZUVycm9yIik7DQpUeXBlLnJlZ2lzdGVyTmFtZXNwYWNlKCdTeXMnKTtTeXMuUmVzPXsiYXJndW1lbnRJbnRlZ2VyIjoiVmFsdWUgbXVzdCBiZSBhbiBpbnRlZ2VyLiIsImludm9rZUNhbGxlZFR3aWNlIjoiQ2Fubm90IGNhbGwgaW52b2tlIG1vcmUgdGhhbiBvbmNlLiIsIndlYlNlcnZpY2VGYWlsZWQiOiJUaGUgc2VydmVyIG1ldGhvZCBcdTAwMjd7MH1cdTAwMjcgZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBlcnJvcjogezF9IiwiYXJndW1lbnRUeXBlIjoiT2JqZWN0IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gdGhlIHJlcXVpcmVkIHR5cGUuIiwiYXJndW1lbnROdWxsIjoiVmFsdWUgY2Fubm90IGJlIG51bGwuIiwic2NyaXB0QWxyZWFkeUxvYWRlZCI6IlRoZSBzY3JpcHQgXHUwMDI3ezB9XHUwMDI3IGhhcyBiZWVuIHJlZmVyZW5jZWQgbXVsdGlwbGUgdGltZXMuIElmIHJlZmVyZW5jaW5nIE1pY3Jvc29mdCBBSkFYIHNjcmlwdHMgZXhwbGljaXRseSwgc2V0IHRoZSBNaWNyb3NvZnRBamF4TW9kZSBwcm9wZXJ0eSBvZiB0aGUgU2NyaXB0TWFuYWdlciB0byBFeHBsaWNpdC4iLCJzY3JpcHREZXBlbmRlbmN5Tm90Rm91bmQiOiJUaGUgc2NyaXB0IFx1MDAyN3swfVx1MDAyNyBmYWlsZWQgdG8gbG9hZCBiZWNhdXNlIGl0IGlzIGRlcGVuZGVudCBvbiBzY3JpcHQgXHUwMDI3ezF9XHUwMDI3LiIsImZvcm1hdEJhZEZvcm1hdFNwZWNpZmllciI6IkZvcm1hdCBzcGVjaWZpZXIgd2FzIGludmFsaWQuIiwicmVxdWlyZWRTY3JpcHRSZWZlcmVuY2VOb3RJbmNsdWRlZCI6Ilx1MDAyN3swfVx1MDAyNyByZXF1aXJlcyB0aGF0IHlvdSBoYXZlIGluY2x1ZGVkIGEgc2NyaXB0IHJlZmVyZW5jZSB0byBcdTAwMjd7MX1cdTAwMjcuIiwid2ViU2VydmljZUZhaWxlZE5vTXNnIjoiVGhlIHNlcnZlciBtZXRob2QgXHUwMDI3ezB9XHUwMDI3IGZhaWxlZC4iLCJhcmd1bWVudERvbUVsZW1lbnQiOiJWYWx1ZSBtdXN0IGJlIGEgRE9NIGVsZW1lbnQuIiwiaW52YWxpZEV4ZWN1dG9yVHlwZSI6IkNvdWxkIG5vdCBjcmVhdGUgYSB2YWxpZCBTeXMuTmV0LldlYlJlcXVlc3RFeGVjdXRvciBmcm9tOiB7MH0uIiwiY2Fubm90Q2FsbEJlZm9yZVJlc3BvbnNlIjoiQ2Fubm90IGNhbGwgezB9IHdoZW4gcmVzcG9uc2VBdmFpbGFibGUgaXMgZmFsc2UuIiwiYWN0dWFsVmFsdWUiOiJBY3R1YWwgdmFsdWUgd2FzIHswfS4iLCJlbnVtSW52YWxpZFZhbHVlIjoiXHUwMDI3ezB9XHUwMDI3IGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciBlbnVtIHsxfS4iLCJzY3JpcHRMb2FkRmFpbGVkIjoiVGhlIHNjcmlwdCBcdTAwMjd7MH1cdTAwMjcgY291bGQgbm90IGJlIGxvYWRlZC4iLCJwYXJhbWV0ZXJDb3VudCI6IlBhcmFtZXRlciBjb3VudCBtaXNtYXRjaC4iLCJjYW5ub3REZXNlcmlhbGl6ZUVtcHR5U3RyaW5nIjoiQ2Fubm90IGRlc2VyaWFsaXplIGVtcHR5IHN0cmluZy4iLCJmb3JtYXRJbnZhbGlkU3RyaW5nIjoiSW5wdXQgc3RyaW5nIHdhcyBub3QgaW4gYSBjb3JyZWN0IGZvcm1hdC4iLCJpbnZhbGlkVGltZW91dCI6IlZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uIiwiY2Fubm90QWJvcnRCZWZvcmVTdGFydCI6IkNhbm5vdCBhYm9ydCB3aGVuIGV4ZWN1dG9yIGhhcyBub3Qgc3RhcnRlZC4iLCJhcmd1bWVudCI6IlZhbHVlIGRvZXMgbm90IGZhbGwgd2l0aGluIHRoZSBleHBlY3RlZCByYW5nZS4iLCJjYW5ub3REZXNlcmlhbGl6ZUludmFsaWRKc29uIjoiQ2Fubm90IGRlc2VyaWFsaXplLiBUaGUgZGF0YSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIHZhbGlkIEpTT04uIiwiaW52YWxpZEh0dHBWZXJiIjoiaHR0cFZlcmIgY2Fubm90IGJlIHNldCB0byBhbiBlbXB0eSBvciBudWxsIHN0cmluZy4iLCJudWxsV2ViUmVxdWVzdCI6IkNhbm5vdCBjYWxsIGV4ZWN1dGVSZXF1ZXN0IHdpdGggYSBudWxsIHdlYlJlcXVlc3QuIiwiZXZlbnRIYW5kbGVySW52YWxpZCI6IkhhbmRsZXIgd2FzIG5vdCBhZGRlZCB0aHJvdWdoIHRoZSBTeXMuVUkuRG9tRXZlbnQuYWRkSGFuZGxlciBtZXRob2QuIiwiY2Fubm90U2VyaWFsaXplTm9uRmluaXRlTnVtYmVycyI6IkNhbm5vdCBzZXJpYWxpemUgbm9uIGZpbml0ZSBudW1iZXJzLiIsImFyZ3VtZW50VW5kZWZpbmVkIjoiVmFsdWUgY2Fubm90IGJlIHVuZGVmaW5lZC4iLCJ3ZWJTZXJ2aWNlSW52YWxpZFJldHVyblR5cGUiOiJUaGUgc2VydmVyIG1ldGhvZCBcdTAwMjd7MH1cdTAwMjcgcmV0dXJuZWQgYW4gaW52YWxpZCB0eXBlLiBFeHBlY3RlZCB0eXBlOiB7MX0iLCJzZXJ2aWNlUGF0aE5vdFNldCI6IlRoZSBwYXRoIHRvIHRoZSB3ZWIgc2VydmljZSBoYXMgbm90IGJlZW4gc2V0LiIsImFyZ3VtZW50VHlwZVdpdGhUeXBlcyI6Ik9iamVjdCBvZiB0eXBlIFx1MDAyN3swfVx1MDAyNyBjYW5ub3QgYmUgY29udmVydGVkIHRvIHR5cGUgXHUwMDI3ezF9XHUwMDI3LiIsImNhbm5vdENhbGxPbmNlU3RhcnRlZCI6IkNhbm5vdCBjYWxsIHswfSBvbmNlIHN0YXJ0ZWQuIiwiYmFkQmFzZVVybDEiOiJCYXNlIFVSTCBkb2VzIG5vdCBjb250YWluIDovLy4iLCJiYWRCYXNlVXJsMiI6IkJhc2UgVVJMIGRvZXMgbm90IGNvbnRhaW4gYW5vdGhlciAvLiIsImJhZEJhc2VVcmwzIjoiQ2Fubm90IGZpbmQgbGFzdCAvIGluIGJhc2UgVVJMLiIsInNldEV4ZWN1dG9yQWZ0ZXJBY3RpdmUiOiJDYW5ub3Qgc2V0IGV4ZWN1dG9yIGFmdGVyIGl0IGhhcyBiZWNvbWUgYWN0aXZlLiIsInBhcmFtTmFtZSI6IlBhcmFtZXRlciBuYW1lOiB7MH0iLCJudWxsUmVmZXJlbmNlSW5QYXRoIjoiTnVsbCByZWZlcmVuY2Ugd2hpbGUgZXZhbHVhdGluZyBkYXRhIHBhdGg6IFx1MDAyN3swfVx1MDAyNy4iLCJjYW5ub3RDYWxsT3V0c2lkZUhhbmRsZXIiOiJDYW5ub3QgY2FsbCB7MH0gb3V0c2lkZSBvZiBhIGNvbXBsZXRlZCBldmVudCBoYW5kbGVyLiIsImNhbm5vdFNlcmlhbGl6ZU9iamVjdFdpdGhDeWNsZSI6IkNhbm5vdCBzZXJpYWxpemUgb2JqZWN0IHdpdGggY3ljbGljIHJlZmVyZW5jZSB3aXRoaW4gY2hpbGQgcHJvcGVydGllcy4iLCJmb3JtYXQiOiJPbmUgb2YgdGhlIGlkZW50aWZpZWQgaXRlbXMgd2FzIGluIGFuIGludmFsaWQgZm9ybWF0LiIsImFzc2VydEZhaWxlZENhbGxlciI6IkFzc2VydGlvbiBGYWlsZWQ6IHswfVxyXG5hdCB7MX0iLCJhcmd1bWVudE91dE9mUmFuZ2UiOiJTcGVjaWZpZWQgYXJndW1lbnQgd2FzIG91dCBvZiB0aGUgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzLiIsIndlYlNlcnZpY2VUaW1lZE91dCI6IlRoZSBzZXJ2ZXIgbWV0aG9kIFx1MDAyN3swfVx1MDAyNyB0aW1lZCBvdXQuIiwibm90SW1wbGVtZW50ZWQiOiJUaGUgbWV0aG9kIG9yIG9wZXJhdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQuIiwiYXNzZXJ0RmFpbGVkIjoiQXNzZXJ0aW9uIEZhaWxlZDogezB9IiwiaW52YWxpZE9wZXJhdGlvbiI6Ik9wZXJhdGlvbiBpcyBub3QgdmFsaWQgZHVlIHRvIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBvYmplY3QuIiwiYnJlYWtJbnRvRGVidWdnZXIiOiJ7MH1cclxuXHJcbkJyZWFrIGludG8gZGVidWdnZXI/In07">
  </script>
  <script class="sf-hidden"
    src="data:application/x-javascript;base64,77u/Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBDb3B5cmlnaHQgKEMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gTWljcm9zb2Z0QWpheFdlYkZvcm1zLmpzDQpUeXBlLl9yZWdpc3RlclNjcmlwdCgiTWljcm9zb2Z0QWpheFdlYkZvcm1zLmpzIixbIk1pY3Jvc29mdEFqYXhDb3JlLmpzIiwiTWljcm9zb2Z0QWpheFNlcmlhbGl6YXRpb24uanMiLCJNaWNyb3NvZnRBamF4TmV0d29yay5qcyIsIk1pY3Jvc29mdEFqYXhDb21wb25lbnRNb2RlbC5qcyJdKTtUeXBlLnJlZ2lzdGVyTmFtZXNwYWNlKCJTeXMuV2ViRm9ybXMiKTtTeXMuV2ViRm9ybXMuQmVnaW5SZXF1ZXN0RXZlbnRBcmdzPWZ1bmN0aW9uKGMsYixhKXtTeXMuV2ViRm9ybXMuQmVnaW5SZXF1ZXN0RXZlbnRBcmdzLmluaXRpYWxpemVCYXNlKHRoaXMpO3RoaXMuX3JlcXVlc3Q9Yzt0aGlzLl9wb3N0QmFja0VsZW1lbnQ9Yjt0aGlzLl91cGRhdGVQYW5lbHNUb1VwZGF0ZT1hfTtTeXMuV2ViRm9ybXMuQmVnaW5SZXF1ZXN0RXZlbnRBcmdzLnByb3RvdHlwZT17Z2V0X3Bvc3RCYWNrRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3N0QmFja0VsZW1lbnR9LGdldF9yZXF1ZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcXVlc3R9LGdldF91cGRhdGVQYW5lbHNUb1VwZGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVQYW5lbHNUb1VwZGF0ZT9BcnJheS5jbG9uZSh0aGlzLl91cGRhdGVQYW5lbHNUb1VwZGF0ZSk6W119fTtTeXMuV2ViRm9ybXMuQmVnaW5SZXF1ZXN0RXZlbnRBcmdzLnJlZ2lzdGVyQ2xhc3MoIlN5cy5XZWJGb3Jtcy5CZWdpblJlcXVlc3RFdmVudEFyZ3MiLFN5cy5FdmVudEFyZ3MpO1N5cy5XZWJGb3Jtcy5FbmRSZXF1ZXN0RXZlbnRBcmdzPWZ1bmN0aW9uKGMsYSxiKXtTeXMuV2ViRm9ybXMuRW5kUmVxdWVzdEV2ZW50QXJncy5pbml0aWFsaXplQmFzZSh0aGlzKTt0aGlzLl9lcnJvckhhbmRsZWQ9ZmFsc2U7dGhpcy5fZXJyb3I9Yzt0aGlzLl9kYXRhSXRlbXM9YXx8e307dGhpcy5fcmVzcG9uc2U9Yn07U3lzLldlYkZvcm1zLkVuZFJlcXVlc3RFdmVudEFyZ3MucHJvdG90eXBlPXtnZXRfZGF0YUl0ZW1zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGFJdGVtc30sZ2V0X2Vycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Vycm9yfSxnZXRfZXJyb3JIYW5kbGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Vycm9ySGFuZGxlZH0sc2V0X2Vycm9ySGFuZGxlZDpmdW5jdGlvbihhKXt0aGlzLl9lcnJvckhhbmRsZWQ9YX0sZ2V0X3Jlc3BvbnNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc3BvbnNlfX07U3lzLldlYkZvcm1zLkVuZFJlcXVlc3RFdmVudEFyZ3MucmVnaXN0ZXJDbGFzcygiU3lzLldlYkZvcm1zLkVuZFJlcXVlc3RFdmVudEFyZ3MiLFN5cy5FdmVudEFyZ3MpO1N5cy5XZWJGb3Jtcy5Jbml0aWFsaXplUmVxdWVzdEV2ZW50QXJncz1mdW5jdGlvbihjLGIsYSl7U3lzLldlYkZvcm1zLkluaXRpYWxpemVSZXF1ZXN0RXZlbnRBcmdzLmluaXRpYWxpemVCYXNlKHRoaXMpO3RoaXMuX3JlcXVlc3Q9Yzt0aGlzLl9wb3N0QmFja0VsZW1lbnQ9Yjt0aGlzLl91cGRhdGVQYW5lbHNUb1VwZGF0ZT1hfTtTeXMuV2ViRm9ybXMuSW5pdGlhbGl6ZVJlcXVlc3RFdmVudEFyZ3MucHJvdG90eXBlPXtnZXRfcG9zdEJhY2tFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc3RCYWNrRWxlbWVudH0sZ2V0X3JlcXVlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVxdWVzdH0sZ2V0X3VwZGF0ZVBhbmVsc1RvVXBkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVBhbmVsc1RvVXBkYXRlP0FycmF5LmNsb25lKHRoaXMuX3VwZGF0ZVBhbmVsc1RvVXBkYXRlKTpbXX0sc2V0X3VwZGF0ZVBhbmVsc1RvVXBkYXRlOmZ1bmN0aW9uKGEpe3RoaXMuX3VwZGF0ZWQ9dHJ1ZTt0aGlzLl91cGRhdGVQYW5lbHNUb1VwZGF0ZT1hfX07U3lzLldlYkZvcm1zLkluaXRpYWxpemVSZXF1ZXN0RXZlbnRBcmdzLnJlZ2lzdGVyQ2xhc3MoIlN5cy5XZWJGb3Jtcy5Jbml0aWFsaXplUmVxdWVzdEV2ZW50QXJncyIsU3lzLkNhbmNlbEV2ZW50QXJncyk7U3lzLldlYkZvcm1zLlBhZ2VMb2FkZWRFdmVudEFyZ3M9ZnVuY3Rpb24oYixhLGMpe1N5cy5XZWJGb3Jtcy5QYWdlTG9hZGVkRXZlbnRBcmdzLmluaXRpYWxpemVCYXNlKHRoaXMpO3RoaXMuX3BhbmVsc1VwZGF0ZWQ9Yjt0aGlzLl9wYW5lbHNDcmVhdGVkPWE7dGhpcy5fZGF0YUl0ZW1zPWN8fHt9fTtTeXMuV2ViRm9ybXMuUGFnZUxvYWRlZEV2ZW50QXJncy5wcm90b3R5cGU9e2dldF9kYXRhSXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YUl0ZW1zfSxnZXRfcGFuZWxzQ3JlYXRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYW5lbHNDcmVhdGVkfSxnZXRfcGFuZWxzVXBkYXRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYW5lbHNVcGRhdGVkfX07U3lzLldlYkZvcm1zLlBhZ2VMb2FkZWRFdmVudEFyZ3MucmVnaXN0ZXJDbGFzcygiU3lzLldlYkZvcm1zLlBhZ2VMb2FkZWRFdmVudEFyZ3MiLFN5cy5FdmVudEFyZ3MpO1N5cy5XZWJGb3Jtcy5QYWdlTG9hZGluZ0V2ZW50QXJncz1mdW5jdGlvbihiLGEsYyl7U3lzLldlYkZvcm1zLlBhZ2VMb2FkaW5nRXZlbnRBcmdzLmluaXRpYWxpemVCYXNlKHRoaXMpO3RoaXMuX3BhbmVsc1VwZGF0aW5nPWI7dGhpcy5fcGFuZWxzRGVsZXRpbmc9YTt0aGlzLl9kYXRhSXRlbXM9Y3x8e319O1N5cy5XZWJGb3Jtcy5QYWdlTG9hZGluZ0V2ZW50QXJncy5wcm90b3R5cGU9e2dldF9kYXRhSXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YUl0ZW1zfSxnZXRfcGFuZWxzRGVsZXRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFuZWxzRGVsZXRpbmd9LGdldF9wYW5lbHNVcGRhdGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYW5lbHNVcGRhdGluZ319O1N5cy5XZWJGb3Jtcy5QYWdlTG9hZGluZ0V2ZW50QXJncy5yZWdpc3RlckNsYXNzKCJTeXMuV2ViRm9ybXMuUGFnZUxvYWRpbmdFdmVudEFyZ3MiLFN5cy5FdmVudEFyZ3MpO1N5cy5fU2NyaXB0TG9hZGVyPWZ1bmN0aW9uKCl7dGhpcy5fc2NyaXB0c1RvTG9hZD1udWxsO3RoaXMuX3Nlc3Npb25zPVtdO3RoaXMuX3NjcmlwdExvYWRlZERlbGVnYXRlPUZ1bmN0aW9uLmNyZWF0ZURlbGVnYXRlKHRoaXMsdGhpcy5fc2NyaXB0TG9hZGVkSGFuZGxlcil9O1N5cy5fU2NyaXB0TG9hZGVyLnByb3RvdHlwZT17ZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuX3N0b3BTZXNzaW9uKCk7dGhpcy5fbG9hZGluZz1mYWxzZTtpZih0aGlzLl9ldmVudHMpZGVsZXRlIHRoaXMuX2V2ZW50czt0aGlzLl9zZXNzaW9ucz1udWxsO3RoaXMuX2N1cnJlbnRTZXNzaW9uPW51bGw7dGhpcy5fc2NyaXB0TG9hZGVkRGVsZWdhdGU9bnVsbH0sbG9hZFNjcmlwdHM6ZnVuY3Rpb24oZCxiLGMsYSl7dmFyIGU9e2FsbFNjcmlwdHNMb2FkZWRDYWxsYmFjazpiLHNjcmlwdExvYWRGYWlsZWRDYWxsYmFjazpjLHNjcmlwdExvYWRUaW1lb3V0Q2FsbGJhY2s6YSxzY3JpcHRzVG9Mb2FkOnRoaXMuX3NjcmlwdHNUb0xvYWQsc2NyaXB0VGltZW91dDpkfTt0aGlzLl9zY3JpcHRzVG9Mb2FkPW51bGw7dGhpcy5fc2Vzc2lvbnNbdGhpcy5fc2Vzc2lvbnMubGVuZ3RoXT1lO2lmKCF0aGlzLl9sb2FkaW5nKXRoaXMuX25leHRTZXNzaW9uKCl9LHF1ZXVlQ3VzdG9tU2NyaXB0VGFnOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLl9zY3JpcHRzVG9Mb2FkKXRoaXMuX3NjcmlwdHNUb0xvYWQ9W107QXJyYXkuYWRkKHRoaXMuX3NjcmlwdHNUb0xvYWQsYSl9LHF1ZXVlU2NyaXB0QmxvY2s6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuX3NjcmlwdHNUb0xvYWQpdGhpcy5fc2NyaXB0c1RvTG9hZD1bXTtBcnJheS5hZGQodGhpcy5fc2NyaXB0c1RvTG9hZCx7dGV4dDphfSl9LHF1ZXVlU2NyaXB0UmVmZXJlbmNlOmZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuX3NjcmlwdHNUb0xvYWQpdGhpcy5fc2NyaXB0c1RvTG9hZD1bXTtBcnJheS5hZGQodGhpcy5fc2NyaXB0c1RvTG9hZCx7c3JjOmEsZmFsbGJhY2s6Yn0pfSxfY3JlYXRlU2NyaXB0RWxlbWVudDpmdW5jdGlvbihjKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTthLnR5cGU9InRleHQvamF2YXNjcmlwdCI7Zm9yKHZhciBiIGluIGMpYVtiXT1jW2JdO3JldHVybiBhfSxfbG9hZFNjcmlwdHNJbnRlcm5hbDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuX2N1cnJlbnRTZXNzaW9uO2lmKGMuc2NyaXB0c1RvTG9hZCYmYy5zY3JpcHRzVG9Mb2FkLmxlbmd0aD4wKXt2YXIgYj1BcnJheS5kZXF1ZXVlKGMuc2NyaXB0c1RvTG9hZCksZj10aGlzLl9zY3JpcHRMb2FkZWREZWxlZ2F0ZTtpZihiLmZhbGxiYWNrKXt2YXIgZz1iLmZhbGxiYWNrO2RlbGV0ZSBiLmZhbGxiYWNrO3ZhciBkPXRoaXM7Zj1mdW5jdGlvbihiLGEpe2F8fGZ1bmN0aW9uKCl7dmFyIGE9ZC5fY3JlYXRlU2NyaXB0RWxlbWVudCh7c3JjOmd9KTtkLl9jdXJyZW50VGFzaz1uZXcgU3lzLl9TY3JpcHRMb2FkZXJUYXNrKGEsZC5fc2NyaXB0TG9hZGVkRGVsZWdhdGUpO2QuX2N1cnJlbnRUYXNrLmV4ZWN1dGUoKX0oKX19dmFyIGE9dGhpcy5fY3JlYXRlU2NyaXB0RWxlbWVudChiKTtpZihhLnRleHQmJlN5cy5Ccm93c2VyLmFnZW50PT09U3lzLkJyb3dzZXIuU2FmYXJpKXthLmlubmVySFRNTD1hLnRleHQ7ZGVsZXRlIGEudGV4dH1pZih0eXBlb2YgYi5zcmM9PT0ic3RyaW5nIil7dGhpcy5fY3VycmVudFRhc2s9bmV3IFN5cy5fU2NyaXB0TG9hZGVyVGFzayhhLGYpO3RoaXMuX2N1cnJlbnRUYXNrLmV4ZWN1dGUoKX1lbHNle2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQoYSk7U3lzLl9TY3JpcHRMb2FkZXJUYXNrLl9jbGVhclNjcmlwdChhKTt0aGlzLl9sb2FkU2NyaXB0c0ludGVybmFsKCl9fWVsc2V7dGhpcy5fc3RvcFNlc3Npb24oKTt2YXIgZT1jLmFsbFNjcmlwdHNMb2FkZWRDYWxsYmFjaztpZihlKWUodGhpcyk7dGhpcy5fbmV4dFNlc3Npb24oKX19LF9uZXh0U2Vzc2lvbjpmdW5jdGlvbigpe2lmKHRoaXMuX3Nlc3Npb25zLmxlbmd0aD09PTApe3RoaXMuX2xvYWRpbmc9ZmFsc2U7dGhpcy5fY3VycmVudFNlc3Npb249bnVsbDtyZXR1cm59dGhpcy5fbG9hZGluZz10cnVlO3ZhciBhPUFycmF5LmRlcXVldWUodGhpcy5fc2Vzc2lvbnMpO3RoaXMuX2N1cnJlbnRTZXNzaW9uPWE7aWYoYS5zY3JpcHRUaW1lb3V0PjApdGhpcy5fdGltZW91dENvb2tpZT13aW5kb3cuc2V0VGltZW91dChGdW5jdGlvbi5jcmVhdGVEZWxlZ2F0ZSh0aGlzLHRoaXMuX3NjcmlwdExvYWRUaW1lb3V0SGFuZGxlciksYS5zY3JpcHRUaW1lb3V0KjEwMDApO3RoaXMuX2xvYWRTY3JpcHRzSW50ZXJuYWwoKX0sX3JhaXNlRXJyb3I6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jdXJyZW50U2Vzc2lvbi5zY3JpcHRMb2FkRmFpbGVkQ2FsbGJhY2ssYT10aGlzLl9jdXJyZW50VGFzay5nZXRfc2NyaXB0RWxlbWVudCgpO3RoaXMuX3N0b3BTZXNzaW9uKCk7aWYoYil7Yih0aGlzLGEpO3RoaXMuX25leHRTZXNzaW9uKCl9ZWxzZXt0aGlzLl9sb2FkaW5nPWZhbHNlO3Rocm93IFN5cy5fU2NyaXB0TG9hZGVyLl9lcnJvclNjcmlwdExvYWRGYWlsZWQoYS5zcmMpfX0sX3NjcmlwdExvYWRlZEhhbmRsZXI6ZnVuY3Rpb24oYSxiKXtpZihiKXtBcnJheS5hZGQoU3lzLl9TY3JpcHRMb2FkZXIuX2dldExvYWRlZFNjcmlwdHMoKSxhLnNyYyk7dGhpcy5fY3VycmVudFRhc2suZGlzcG9zZSgpO3RoaXMuX2N1cnJlbnRUYXNrPW51bGw7dGhpcy5fbG9hZFNjcmlwdHNJbnRlcm5hbCgpfWVsc2UgdGhpcy5fcmFpc2VFcnJvcigpfSxfc2NyaXB0TG9hZFRpbWVvdXRIYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fY3VycmVudFNlc3Npb24uc2NyaXB0TG9hZFRpbWVvdXRDYWxsYmFjazt0aGlzLl9zdG9wU2Vzc2lvbigpO2lmKGEpYSh0aGlzKTt0aGlzLl9uZXh0U2Vzc2lvbigpfSxfc3RvcFNlc3Npb246ZnVuY3Rpb24oKXtpZih0aGlzLl90aW1lb3V0Q29va2llKXt3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRDb29raWUpO3RoaXMuX3RpbWVvdXRDb29raWU9bnVsbH1pZih0aGlzLl9jdXJyZW50VGFzayl7dGhpcy5fY3VycmVudFRhc2suZGlzcG9zZSgpO3RoaXMuX2N1cnJlbnRUYXNrPW51bGx9fX07U3lzLl9TY3JpcHRMb2FkZXIucmVnaXN0ZXJDbGFzcygiU3lzLl9TY3JpcHRMb2FkZXIiLG51bGwsU3lzLklEaXNwb3NhYmxlKTtTeXMuX1NjcmlwdExvYWRlci5nZXRJbnN0YW5jZT1mdW5jdGlvbigpe3ZhciBhPVN5cy5fU2NyaXB0TG9hZGVyLl9hY3RpdmVJbnN0YW5jZTtpZighYSlhPVN5cy5fU2NyaXB0TG9hZGVyLl9hY3RpdmVJbnN0YW5jZT1uZXcgU3lzLl9TY3JpcHRMb2FkZXI7cmV0dXJuIGF9O1N5cy5fU2NyaXB0TG9hZGVyLmlzU2NyaXB0TG9hZGVkPWZ1bmN0aW9uKGIpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2Euc3JjPWI7cmV0dXJuIEFycmF5LmNvbnRhaW5zKFN5cy5fU2NyaXB0TG9hZGVyLl9nZXRMb2FkZWRTY3JpcHRzKCksYS5zcmMpfTtTeXMuX1NjcmlwdExvYWRlci5yZWFkTG9hZGVkU2NyaXB0cz1mdW5jdGlvbigpe2lmKCFTeXMuX1NjcmlwdExvYWRlci5fcmVmZXJlbmNlZFNjcmlwdHMpe3ZhciBjPVN5cy5fU2NyaXB0TG9hZGVyLl9yZWZlcmVuY2VkU2NyaXB0cz1bXSxkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTtmb3IodmFyIGI9ZC5sZW5ndGgtMTtiPj0wO2ItLSl7dmFyIGU9ZFtiXSxhPWUuc3JjO2lmKGEubGVuZ3RoKWlmKCFBcnJheS5jb250YWlucyhjLGEpKUFycmF5LmFkZChjLGEpfX19O1N5cy5fU2NyaXB0TG9hZGVyLl9lcnJvclNjcmlwdExvYWRGYWlsZWQ9ZnVuY3Rpb24oYil7dmFyIGE7YT1TeXMuUmVzLnNjcmlwdExvYWRGYWlsZWQ7dmFyIGQ9IlN5cy5TY3JpcHRMb2FkRmFpbGVkRXhjZXB0aW9uOiAiK1N0cmluZy5mb3JtYXQoYSxiKSxjPUVycm9yLmNyZWF0ZShkLHtuYW1lOiJTeXMuU2NyaXB0TG9hZEZhaWxlZEV4Y2VwdGlvbiIsInNjcmlwdFVybCI6Yn0pO2MucG9wU3RhY2tGcmFtZSgpO3JldHVybiBjfTtTeXMuX1NjcmlwdExvYWRlci5fZ2V0TG9hZGVkU2NyaXB0cz1mdW5jdGlvbigpe2lmKCFTeXMuX1NjcmlwdExvYWRlci5fcmVmZXJlbmNlZFNjcmlwdHMpe1N5cy5fU2NyaXB0TG9hZGVyLl9yZWZlcmVuY2VkU2NyaXB0cz1bXTtTeXMuX1NjcmlwdExvYWRlci5yZWFkTG9hZGVkU2NyaXB0cygpfXJldHVybiBTeXMuX1NjcmlwdExvYWRlci5fcmVmZXJlbmNlZFNjcmlwdHN9O1N5cy5XZWJGb3Jtcy5QYWdlUmVxdWVzdE1hbmFnZXI9ZnVuY3Rpb24oKXt0aGlzLl9mb3JtPW51bGw7dGhpcy5fYWN0aXZlRGVmYXVsdEJ1dHRvbj1udWxsO3RoaXMuX2FjdGl2ZURlZmF1bHRCdXR0b25DbGlja2VkPWZhbHNlO3RoaXMuX3VwZGF0ZVBhbmVsSURzPW51bGw7dGhpcy5fdXBkYXRlUGFuZWxDbGllbnRJRHM9bnVsbDt0aGlzLl91cGRhdGVQYW5lbEhhc0NoaWxkcmVuQXNUcmlnZ2Vycz1udWxsO3RoaXMuX2FzeW5jUG9zdEJhY2tDb250cm9sSURzPW51bGw7dGhpcy5fYXN5bmNQb3N0QmFja0NvbnRyb2xDbGllbnRJRHM9bnVsbDt0aGlzLl9wb3N0QmFja0NvbnRyb2xJRHM9bnVsbDt0aGlzLl9wb3N0QmFja0NvbnRyb2xDbGllbnRJRHM9bnVsbDt0aGlzLl9zY3JpcHRNYW5hZ2VySUQ9bnVsbDt0aGlzLl9wYWdlTG9hZGVkSGFuZGxlcj1udWxsO3RoaXMuX2FkZGl0aW9uYWxJbnB1dD1udWxsO3RoaXMuX29uc3VibWl0PW51bGw7dGhpcy5fb25TdWJtaXRTdGF0ZW1lbnRzPVtdO3RoaXMuX29yaWdpbmFsRG9Qb3N0QmFjaz1udWxsO3RoaXMuX29yaWdpbmFsRG9Qb3N0QmFja1dpdGhPcHRpb25zPW51bGw7dGhpcy5fb3JpZ2luYWxGaXJlRGVmYXVsdEJ1dHRvbj1udWxsO3RoaXMuX29yaWdpbmFsRG9DYWxsYmFjaz1udWxsO3RoaXMuX2lzQ3Jvc3NQb3N0PWZhbHNlO3RoaXMuX3Bvc3RCYWNrU2V0dGluZ3M9bnVsbDt0aGlzLl9yZXF1ZXN0PW51bGw7dGhpcy5fb25Gb3JtU3VibWl0SGFuZGxlcj1udWxsO3RoaXMuX29uRm9ybUVsZW1lbnRDbGlja0hhbmRsZXI9bnVsbDt0aGlzLl9vbldpbmRvd1VubG9hZEhhbmRsZXI9bnVsbDt0aGlzLl9hc3luY1Bvc3RCYWNrVGltZW91dD1udWxsO3RoaXMuX2NvbnRyb2xJRFRvRm9jdXM9bnVsbDt0aGlzLl9zY3JvbGxQb3NpdGlvbj1udWxsO3RoaXMuX3Byb2Nlc3NpbmdSZXF1ZXN0PWZhbHNlO3RoaXMuX3NjcmlwdERpc3Bvc2VzPXt9O3RoaXMuX3RyYW5zaWVudEZpZWxkcz1bIl9fVklFV1NUQVRFRU5DUllQVEVEIiwiX19WSUVXU1RBVEVGSUVMRENPVU5UIl07dGhpcy5fdGV4dFR5cGVzPS9eKHRleHR8cGFzc3dvcmR8aGlkZGVufHNlYXJjaHx0ZWx8dXJsfGVtYWlsfG51bWJlcnxyYW5nZXxjb2xvcnxkYXRldGltZXxkYXRlfG1vbnRofHdlZWt8dGltZXxkYXRldGltZS1sb2NhbCkkL2l9O1N5cy5XZWJGb3Jtcy5QYWdlUmVxdWVzdE1hbmFnZXIucHJvdG90eXBlPXtfZ2V0X2V2ZW50SGFuZGxlckxpc3Q6ZnVuY3Rpb24oKXtpZighdGhpcy5fZXZlbnRzKXRoaXMuX2V2ZW50cz1uZXcgU3lzLkV2ZW50SGFuZGxlckxpc3Q7cmV0dXJuIHRoaXMuX2V2ZW50c30sZ2V0X2lzSW5Bc3luY1Bvc3RCYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcXVlc3QhPT1udWxsfSxhZGRfYmVnaW5SZXF1ZXN0OmZ1bmN0aW9uKGEpe3RoaXMuX2dldF9ldmVudEhhbmRsZXJMaXN0KCkuYWRkSGFuZGxlcigiYmVnaW5SZXF1ZXN0IixhKX0scmVtb3ZlX2JlZ2luUmVxdWVzdDpmdW5jdGlvbihhKXt0aGlzLl9nZXRfZXZlbnRIYW5kbGVyTGlzdCgpLnJlbW92ZUhhbmRsZXIoImJlZ2luUmVxdWVzdCIsYSl9LGFkZF9lbmRSZXF1ZXN0OmZ1bmN0aW9uKGEpe3RoaXMuX2dldF9ldmVudEhhbmRsZXJMaXN0KCkuYWRkSGFuZGxlcigiZW5kUmVxdWVzdCIsYSl9LHJlbW92ZV9lbmRSZXF1ZXN0OmZ1bmN0aW9uKGEpe3RoaXMuX2dldF9ldmVudEhhbmRsZXJMaXN0KCkucmVtb3ZlSGFuZGxlcigiZW5kUmVxdWVzdCIsYSl9LGFkZF9pbml0aWFsaXplUmVxdWVzdDpmdW5jdGlvbihhKXt0aGlzLl9nZXRfZXZlbnRIYW5kbGVyTGlzdCgpLmFkZEhhbmRsZXIoImluaXRpYWxpemVSZXF1ZXN0IixhKX0scmVtb3ZlX2luaXRpYWxpemVSZXF1ZXN0OmZ1bmN0aW9uKGEpe3RoaXMuX2dldF9ldmVudEhhbmRsZXJMaXN0KCkucmVtb3ZlSGFuZGxlcigiaW5pdGlhbGl6ZVJlcXVlc3QiLGEpfSxhZGRfcGFnZUxvYWRlZDpmdW5jdGlvbihhKXt0aGlzLl9nZXRfZXZlbnRIYW5kbGVyTGlzdCgpLmFkZEhhbmRsZXIoInBhZ2VMb2FkZWQiLGEpfSxyZW1vdmVfcGFnZUxvYWRlZDpmdW5jdGlvbihhKXt0aGlzLl9nZXRfZXZlbnRIYW5kbGVyTGlzdCgpLnJlbW92ZUhhbmRsZXIoInBhZ2VMb2FkZWQiLGEpfSxhZGRfcGFnZUxvYWRpbmc6ZnVuY3Rpb24oYSl7dGhpcy5fZ2V0X2V2ZW50SGFuZGxlckxpc3QoKS5hZGRIYW5kbGVyKCJwYWdlTG9hZGluZyIsYSl9LHJlbW92ZV9wYWdlTG9hZGluZzpmdW5jdGlvbihhKXt0aGlzLl9nZXRfZXZlbnRIYW5kbGVyTGlzdCgpLnJlbW92ZUhhbmRsZXIoInBhZ2VMb2FkaW5nIixhKX0sYWJvcnRQb3N0QmFjazpmdW5jdGlvbigpe2lmKCF0aGlzLl9wcm9jZXNzaW5nUmVxdWVzdCYmdGhpcy5fcmVxdWVzdCl7dGhpcy5fcmVxdWVzdC5nZXRfZXhlY3V0b3IoKS5hYm9ydCgpO3RoaXMuX3JlcXVlc3Q9bnVsbH19LGJlZ2luQXN5bmNQb3N0QmFjazpmdW5jdGlvbihjLGEsZixkLGUpe2lmKGQmJnR5cGVvZiBQYWdlX0NsaWVudFZhbGlkYXRlPT09ImZ1bmN0aW9uIiYmIVBhZ2VfQ2xpZW50VmFsaWRhdGUoZXx8bnVsbCkpcmV0dXJuO3RoaXMuX3Bvc3RCYWNrU2V0dGluZ3M9dGhpcy5fY3JlYXRlUG9zdEJhY2tTZXR0aW5ncyh0cnVlLGMsYSk7dmFyIGI9dGhpcy5fZm9ybTtiLl9fRVZFTlRUQVJHRVQudmFsdWU9YXx8IiI7Yi5fX0VWRU5UQVJHVU1FTlQudmFsdWU9Znx8IiI7dGhpcy5faXNDcm9zc1Bvc3Q9ZmFsc2U7dGhpcy5fYWRkaXRpb25hbElucHV0PW51bGw7dGhpcy5fb25Gb3JtU3VibWl0KCl9LF9jYW5jZWxQZW5kaW5nQ2FsbGJhY2tzOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsZT13aW5kb3cuX19wZW5kaW5nQ2FsbGJhY2tzLmxlbmd0aDthPGU7YSsrKXt2YXIgYz13aW5kb3cuX19wZW5kaW5nQ2FsbGJhY2tzW2FdO2lmKGMpe2lmKCFjLmFzeW5jKXdpbmRvdy5fX3N5bmNocm9ub3VzQ2FsbEJhY2tJbmRleD0tMTt3aW5kb3cuX19wZW5kaW5nQ2FsbGJhY2tzW2FdPW51bGw7dmFyIGQ9Il9fQ0FMTEJBQ0tGUkFNRSIrYSxiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGQpO2lmKGIpYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpfX19LF9jb21taXRDb250cm9sczpmdW5jdGlvbihhLGIpe2lmKGEpe3RoaXMuX3VwZGF0ZVBhbmVsSURzPWEudXBkYXRlUGFuZWxJRHM7dGhpcy5fdXBkYXRlUGFuZWxDbGllbnRJRHM9YS51cGRhdGVQYW5lbENsaWVudElEczt0aGlzLl91cGRhdGVQYW5lbEhhc0NoaWxkcmVuQXNUcmlnZ2Vycz1hLnVwZGF0ZVBhbmVsSGFzQ2hpbGRyZW5Bc1RyaWdnZXJzO3RoaXMuX2FzeW5jUG9zdEJhY2tDb250cm9sSURzPWEuYXN5bmNQb3N0QmFja0NvbnRyb2xJRHM7dGhpcy5fYXN5bmNQb3N0QmFja0NvbnRyb2xDbGllbnRJRHM9YS5hc3luY1Bvc3RCYWNrQ29udHJvbENsaWVudElEczt0aGlzLl9wb3N0QmFja0NvbnRyb2xJRHM9YS5wb3N0QmFja0NvbnRyb2xJRHM7dGhpcy5fcG9zdEJhY2tDb250cm9sQ2xpZW50SURzPWEucG9zdEJhY2tDb250cm9sQ2xpZW50SURzfWlmKHR5cGVvZiBiIT09InVuZGVmaW5lZCImJmIhPT1udWxsKXRoaXMuX2FzeW5jUG9zdEJhY2tUaW1lb3V0PWIqMTAwMH0sX2NyZWF0ZUhpZGRlbkZpZWxkOmZ1bmN0aW9uKGMsZCl7dmFyIGIsYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChjKTtpZihhKWlmKCFhLl9pc0NvbnRhaW5lZClhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSk7ZWxzZSBiPWEucGFyZW50Tm9kZTtpZighYil7Yj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Yi5zdHlsZS5jc3NUZXh0PSJkaXNwbGF5Om5vbmUgIWltcG9ydGFudCI7dGhpcy5fZm9ybS5hcHBlbmRDaGlsZChiKX1iLmlubmVySFRNTD0iPGlucHV0IHR5cGU9J2hpZGRlbicgLz4iO2E9Yi5jaGlsZE5vZGVzWzBdO2EuX2lzQ29udGFpbmVkPXRydWU7YS5pZD1hLm5hbWU9YzthLnZhbHVlPWR9LF9jcmVhdGVQYWdlUmVxdWVzdE1hbmFnZXJUaW1lb3V0RXJyb3I6ZnVuY3Rpb24oKXt2YXIgYj0iU3lzLldlYkZvcm1zLlBhZ2VSZXF1ZXN0TWFuYWdlclRpbWVvdXRFeGNlcHRpb246ICIrU3lzLldlYkZvcm1zLlJlcy5QUk1fVGltZW91dEVycm9yLGE9RXJyb3IuY3JlYXRlKGIse25hbWU6IlN5cy5XZWJGb3Jtcy5QYWdlUmVxdWVzdE1hbmFnZXJUaW1lb3V0RXhjZXB0aW9uIn0pO2EucG9wU3RhY2tGcmFtZSgpO3JldHVybiBhfSxfY3JlYXRlUGFnZVJlcXVlc3RNYW5hZ2VyU2VydmVyRXJyb3I6ZnVuY3Rpb24oYSxkKXt2YXIgYz0iU3lzLldlYkZvcm1zLlBhZ2VSZXF1ZXN0TWFuYWdlclNlcnZlckVycm9yRXhjZXB0aW9uOiAiKyhkfHxTdHJpbmcuZm9ybWF0KFN5cy5XZWJGb3Jtcy5SZXMuUFJNX1NlcnZlckVycm9yLGEpKSxiPUVycm9yLmNyZWF0ZShjLHtuYW1lOiJTeXMuV2ViRm9ybXMuUGFnZVJlcXVlc3RNYW5hZ2VyU2VydmVyRXJyb3JFeGNlcHRpb24iLGh0dHBTdGF0dXNDb2RlOmF9KTtiLnBvcFN0YWNrRnJhbWUoKTtyZXR1cm4gYn0sX2NyZWF0ZVBhZ2VSZXF1ZXN0TWFuYWdlclBhcnNlckVycm9yOmZ1bmN0aW9uKGIpe3ZhciBjPSJTeXMuV2ViRm9ybXMuUGFnZVJlcXVlc3RNYW5hZ2VyUGFyc2VyRXJyb3JFeGNlcHRpb246ICIrU3RyaW5nLmZvcm1hdChTeXMuV2ViRm9ybXMuUmVzLlBSTV9QYXJzZXJFcnJvcixiKSxhPUVycm9yLmNyZWF0ZShjLHtuYW1lOiJTeXMuV2ViRm9ybXMuUGFnZVJlcXVlc3RNYW5hZ2VyUGFyc2VyRXJyb3JFeGNlcHRpb24ifSk7YS5wb3BTdGFja0ZyYW1lKCk7cmV0dXJuIGF9LF9jcmVhdGVQYW5lbElEOmZ1bmN0aW9uKGUsYil7dmFyIGM9Yi5hc3luY1RhcmdldCxhPXRoaXMuX2Vuc3VyZVVuaXF1ZUlkcyhlfHxiLnBhbmVsc1RvVXBkYXRlKSxkPWEgaW5zdGFuY2VvZiBBcnJheT9hLmpvaW4oIiwiKTphfHx0aGlzLl9zY3JpcHRNYW5hZ2VySUQ7aWYoYylkKz0ifCIrYztyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuX3NjcmlwdE1hbmFnZXJJRCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChkKSsiJiJ9LF9jcmVhdGVQb3N0QmFja1NldHRpbmdzOmZ1bmN0aW9uKGQsYSxjLGIpe3JldHVybiB7YXN5bmM6ZCxhc3luY1RhcmdldDpjLHBhbmVsc1RvVXBkYXRlOmEsc291cmNlRWxlbWVudDpifX0sX2NvbnZlcnRUb0NsaWVudElEczpmdW5jdGlvbihhLGYsZSxkKXtpZihhKWZvcih2YXIgYj0wLGg9YS5sZW5ndGg7YjxoO2IrPWQ/MjoxKXt2YXIgYz1hW2JdLGc9KGQ/YVtiKzFdOiIiKXx8dGhpcy5fdW5pcXVlSURUb0NsaWVudElEKGMpO0FycmF5LmFkZChmLGMpO0FycmF5LmFkZChlLGcpfX0sZGlzcG9zZTpmdW5jdGlvbigpe2lmKHRoaXMuX2Zvcm0pe1N5cy5VSS5Eb21FdmVudC5yZW1vdmVIYW5kbGVyKHRoaXMuX2Zvcm0sInN1Ym1pdCIsdGhpcy5fb25Gb3JtU3VibWl0SGFuZGxlcik7U3lzLlVJLkRvbUV2ZW50LnJlbW92ZUhhbmRsZXIodGhpcy5fZm9ybSwiY2xpY2siLHRoaXMuX29uRm9ybUVsZW1lbnRDbGlja0hhbmRsZXIpO1N5cy5VSS5Eb21FdmVudC5yZW1vdmVIYW5kbGVyKHdpbmRvdywidW5sb2FkIix0aGlzLl9vbldpbmRvd1VubG9hZEhhbmRsZXIpO1N5cy5VSS5Eb21FdmVudC5yZW1vdmVIYW5kbGVyKHdpbmRvdywibG9hZCIsdGhpcy5fcGFnZUxvYWRlZEhhbmRsZXIpfWlmKHRoaXMuX29yaWdpbmFsRG9Qb3N0QmFjayl7d2luZG93Ll9fZG9Qb3N0QmFjaz10aGlzLl9vcmlnaW5hbERvUG9zdEJhY2s7dGhpcy5fb3JpZ2luYWxEb1Bvc3RCYWNrPW51bGx9aWYodGhpcy5fb3JpZ2luYWxEb1Bvc3RCYWNrV2l0aE9wdGlvbnMpe3dpbmRvdy5XZWJGb3JtX0RvUG9zdEJhY2tXaXRoT3B0aW9ucz10aGlzLl9vcmlnaW5hbERvUG9zdEJhY2tXaXRoT3B0aW9uczt0aGlzLl9vcmlnaW5hbERvUG9zdEJhY2tXaXRoT3B0aW9ucz1udWxsfWlmKHRoaXMuX29yaWdpbmFsRmlyZURlZmF1bHRCdXR0b24pe3dpbmRvdy5XZWJGb3JtX0ZpcmVEZWZhdWx0QnV0dG9uPXRoaXMuX29yaWdpbmFsRmlyZURlZmF1bHRCdXR0b247dGhpcy5fb3JpZ2luYWxGaXJlRGVmYXVsdEJ1dHRvbj1udWxsfWlmKHRoaXMuX29yaWdpbmFsRG9DYWxsYmFjayl7d2luZG93LldlYkZvcm1fRG9DYWxsYmFjaz10aGlzLl9vcmlnaW5hbERvQ2FsbGJhY2s7dGhpcy5fb3JpZ2luYWxEb0NhbGxiYWNrPW51bGx9dGhpcy5fZm9ybT1udWxsO3RoaXMuX3VwZGF0ZVBhbmVsSURzPW51bGw7dGhpcy5fdXBkYXRlUGFuZWxDbGllbnRJRHM9bnVsbDt0aGlzLl9hc3luY1Bvc3RCYWNrQ29udHJvbElEcz1udWxsO3RoaXMuX2FzeW5jUG9zdEJhY2tDb250cm9sQ2xpZW50SURzPW51bGw7dGhpcy5fcG9zdEJhY2tDb250cm9sSURzPW51bGw7dGhpcy5fcG9zdEJhY2tDb250cm9sQ2xpZW50SURzPW51bGw7dGhpcy5fYXN5bmNQb3N0QmFja1RpbWVvdXQ9bnVsbDt0aGlzLl9zY3JvbGxQb3NpdGlvbj1udWxsO3RoaXMuX2FjdGl2ZUVsZW1lbnQ9bnVsbH0sX2RvQ2FsbGJhY2s6ZnVuY3Rpb24oZCxiLGMsZixhLGUpe2lmKCF0aGlzLmdldF9pc0luQXN5bmNQb3N0QmFjaygpKXRoaXMuX29yaWdpbmFsRG9DYWxsYmFjayhkLGIsYyxmLGEsZSl9LF9kb1Bvc3RCYWNrOmZ1bmN0aW9uKGEsayl7dmFyIGY9d2luZG93LmV2ZW50O2lmKCFmKXt2YXIgZD1hcmd1bWVudHMuY2FsbGVlP2FyZ3VtZW50cy5jYWxsZWUuY2FsbGVyOm51bGw7aWYoZCl7dmFyIGo9MzA7d2hpbGUoZC5hcmd1bWVudHMuY2FsbGVlLmNhbGxlciYmLS1qKWQ9ZC5hcmd1bWVudHMuY2FsbGVlLmNhbGxlcjtmPWomJmQuYXJndW1lbnRzLmxlbmd0aD9kLmFyZ3VtZW50c1swXTpudWxsfX10aGlzLl9hZGRpdGlvbmFsSW5wdXQ9bnVsbDt2YXIgaD10aGlzLl9mb3JtO2lmKGE9PT1udWxsfHx0eXBlb2YgYT09PSJ1bmRlZmluZWQifHx0aGlzLl9pc0Nyb3NzUG9zdCl7dGhpcy5fcG9zdEJhY2tTZXR0aW5ncz10aGlzLl9jcmVhdGVQb3N0QmFja1NldHRpbmdzKGZhbHNlKTt0aGlzLl9pc0Nyb3NzUG9zdD1mYWxzZX1lbHNle3ZhciBjPXRoaXMuX21hc3RlclBhZ2VVbmlxdWVJRCxsPXRoaXMuX3VuaXF1ZUlEVG9DbGllbnRJRChhKSxnPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGwpO2lmKCFnJiZjKWlmKGEuaW5kZXhPZihjKyIkIik9PT0wKWc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobC5zdWJzdHIoYy5sZW5ndGgrMSkpO2lmKCFnKWlmKEFycmF5LmNvbnRhaW5zKHRoaXMuX2FzeW5jUG9zdEJhY2tDb250cm9sSURzLGEpKXRoaXMuX3Bvc3RCYWNrU2V0dGluZ3M9dGhpcy5fY3JlYXRlUG9zdEJhY2tTZXR0aW5ncyh0cnVlLG51bGwsYSk7ZWxzZSBpZihBcnJheS5jb250YWlucyh0aGlzLl9wb3N0QmFja0NvbnRyb2xJRHMsYSkpdGhpcy5fcG9zdEJhY2tTZXR0aW5ncz10aGlzLl9jcmVhdGVQb3N0QmFja1NldHRpbmdzKGZhbHNlKTtlbHNle3ZhciBlPXRoaXMuX2ZpbmROZWFyZXN0RWxlbWVudChhKTtpZihlKXRoaXMuX3Bvc3RCYWNrU2V0dGluZ3M9dGhpcy5fZ2V0UG9zdEJhY2tTZXR0aW5ncyhlLGEpO2Vsc2V7aWYoYyl7Yys9IiQiO2lmKGEuaW5kZXhPZihjKT09PTApZT10aGlzLl9maW5kTmVhcmVzdEVsZW1lbnQoYS5zdWJzdHIoYy5sZW5ndGgpKX1pZihlKXRoaXMuX3Bvc3RCYWNrU2V0dGluZ3M9dGhpcy5fZ2V0UG9zdEJhY2tTZXR0aW5ncyhlLGEpO2Vsc2V7dmFyIGI7dHJ5e2I9Zj9mLnRhcmdldHx8Zi5zcmNFbGVtZW50Om51bGx9Y2F0Y2gobil7fWI9Ynx8dGhpcy5fYWN0aXZlRWxlbWVudDt2YXIgbT0vX19kb1Bvc3RCYWNrXCh8V2ViRm9ybV9Eb1Bvc3RCYWNrV2l0aE9wdGlvbnNcKC87ZnVuY3Rpb24gaShiKXtiPWI/Yi50b1N0cmluZygpOiIiO3JldHVybiBtLnRlc3QoYikmJmIuaW5kZXhPZigiJyIrYSsiJyIpIT09LTF8fGIuaW5kZXhPZignIicrYSsnIicpIT09LTF9aWYoYiYmKGIubmFtZT09PWF8fGkoYi5ocmVmKXx8aShiLm9uY2xpY2spfHxpKGIub25jaGFuZ2UpKSl0aGlzLl9wb3N0QmFja1NldHRpbmdzPXRoaXMuX2dldFBvc3RCYWNrU2V0dGluZ3MoYixhKTtlbHNlIHRoaXMuX3Bvc3RCYWNrU2V0dGluZ3M9dGhpcy5fY3JlYXRlUG9zdEJhY2tTZXR0aW5ncyhmYWxzZSl9fX1lbHNlIHRoaXMuX3Bvc3RCYWNrU2V0dGluZ3M9dGhpcy5fZ2V0UG9zdEJhY2tTZXR0aW5ncyhnLGEpfWlmKCF0aGlzLl9wb3N0QmFja1NldHRpbmdzLmFzeW5jKXtoLm9uc3VibWl0PXRoaXMuX29uc3VibWl0O3RoaXMuX29yaWdpbmFsRG9Qb3N0QmFjayhhLGspO2gub25zdWJtaXQ9bnVsbDtyZXR1cm59aC5fX0VWRU5UVEFSR0VULnZhbHVlPWE7aC5fX0VWRU5UQVJHVU1FTlQudmFsdWU9azt0aGlzLl9vbkZvcm1TdWJtaXQoKX0sX2RvUG9zdEJhY2tXaXRoT3B0aW9uczpmdW5jdGlvbihhKXt0aGlzLl9pc0Nyb3NzUG9zdD1hJiZhLmFjdGlvblVybDt2YXIgZD10cnVlO2lmKGEudmFsaWRhdGlvbilpZih0eXBlb2YgUGFnZV9DbGllbnRWYWxpZGF0ZT09ImZ1bmN0aW9uIilkPVBhZ2VfQ2xpZW50VmFsaWRhdGUoYS52YWxpZGF0aW9uR3JvdXApO2lmKGQpe2lmKHR5cGVvZiBhLmFjdGlvblVybCE9InVuZGVmaW5lZCImJmEuYWN0aW9uVXJsIT1udWxsJiZhLmFjdGlvblVybC5sZW5ndGg+MCl0aGVGb3JtLmFjdGlvbj1hLmFjdGlvblVybDtpZihhLnRyYWNrRm9jdXMpe3ZhciBjPXRoZUZvcm0uZWxlbWVudHNbIl9fTEFTVEZPQ1VTIl07aWYodHlwZW9mIGMhPSJ1bmRlZmluZWQiJiZjIT1udWxsKWlmKHR5cGVvZiBkb2N1bWVudC5hY3RpdmVFbGVtZW50PT0idW5kZWZpbmVkIiljLnZhbHVlPWEuZXZlbnRUYXJnZXQ7ZWxzZXt2YXIgYj1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKHR5cGVvZiBiIT0idW5kZWZpbmVkIiYmYiE9bnVsbClpZih0eXBlb2YgYi5pZCE9InVuZGVmaW5lZCImJmIuaWQhPW51bGwmJmIuaWQubGVuZ3RoPjApYy52YWx1ZT1iLmlkO2Vsc2UgaWYodHlwZW9mIGIubmFtZSE9InVuZGVmaW5lZCIpYy52YWx1ZT1iLm5hbWV9fX1pZihhLmNsaWVudFN1Ym1pdCl0aGlzLl9kb1Bvc3RCYWNrKGEuZXZlbnRUYXJnZXQsYS5ldmVudEFyZ3VtZW50KX0sX2VsZW1lbnRDb250YWluczpmdW5jdGlvbihiLGEpe3doaWxlKGEpe2lmKGE9PT1iKXJldHVybiB0cnVlO2E9YS5wYXJlbnROb2RlfXJldHVybiBmYWxzZX0sX2VuZFBvc3RCYWNrOmZ1bmN0aW9uKGEsZCxmKXtpZih0aGlzLl9yZXF1ZXN0PT09ZC5nZXRfd2ViUmVxdWVzdCgpKXt0aGlzLl9wcm9jZXNzaW5nUmVxdWVzdD1mYWxzZTt0aGlzLl9hZGRpdGlvbmFsSW5wdXQ9bnVsbDt0aGlzLl9yZXF1ZXN0PW51bGx9dmFyIGU9dGhpcy5fZ2V0X2V2ZW50SGFuZGxlckxpc3QoKS5nZXRIYW5kbGVyKCJlbmRSZXF1ZXN0IiksYj1mYWxzZTtpZihlKXt2YXIgYz1uZXcgU3lzLldlYkZvcm1zLkVuZFJlcXVlc3RFdmVudEFyZ3MoYSxmP2YuZGF0YUl0ZW1zOnt9LGQpO2UodGhpcyxjKTtiPWMuZ2V0X2Vycm9ySGFuZGxlZCgpfWlmKGEmJiFiKXRocm93IGF9LF9lbnN1cmVVbmlxdWVJZHM6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIGE7YT1hIGluc3RhbmNlb2YgQXJyYXk/YTpbYV07dmFyIGM9W107Zm9yKHZhciBiPTAsZj1hLmxlbmd0aDtiPGY7YisrKXt2YXIgZT1hW2JdLGQ9QXJyYXkuaW5kZXhPZih0aGlzLl91cGRhdGVQYW5lbENsaWVudElEcyxlKTtjLnB1c2goZD4tMT90aGlzLl91cGRhdGVQYW5lbElEc1tkXTplKX1yZXR1cm4gY30sX2ZpbmROZWFyZXN0RWxlbWVudDpmdW5jdGlvbihhKXt3aGlsZShhLmxlbmd0aD4wKXt2YXIgZD10aGlzLl91bmlxdWVJRFRvQ2xpZW50SUQoYSksYz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChkKTtpZihjKXJldHVybiBjO3ZhciBiPWEubGFzdEluZGV4T2YoIiQiKTtpZihiPT09LTEpcmV0dXJuIG51bGw7YT1hLnN1YnN0cmluZygwLGIpfXJldHVybiBudWxsfSxfZmluZFRleHQ6ZnVuY3Rpb24oYixhKXt2YXIgYz1NYXRoLm1heCgwLGEtMjApLGQ9TWF0aC5taW4oYi5sZW5ndGgsYSsyMCk7cmV0dXJuIGIuc3Vic3RyaW5nKGMsZCl9LF9maXJlRGVmYXVsdEJ1dHRvbjpmdW5jdGlvbihhLGQpe2lmKGEua2V5Q29kZT09PTEzKXt2YXIgYz1hLnNyY0VsZW1lbnR8fGEudGFyZ2V0O2lmKCFjfHxjLnRhZ05hbWUudG9Mb3dlckNhc2UoKSE9PSJ0ZXh0YXJlYSIpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGQpO2lmKGImJnR5cGVvZiBiLmNsaWNrIT09InVuZGVmaW5lZCIpe3RoaXMuX2FjdGl2ZURlZmF1bHRCdXR0b249Yjt0aGlzLl9hY3RpdmVEZWZhdWx0QnV0dG9uQ2xpY2tlZD1mYWxzZTt0cnl7Yi5jbGljaygpfWZpbmFsbHl7dGhpcy5fYWN0aXZlRGVmYXVsdEJ1dHRvbj1udWxsfWEuY2FuY2VsQnViYmxlPXRydWU7aWYodHlwZW9mIGEuc3RvcFByb3BhZ2F0aW9uPT09ImZ1bmN0aW9uIilhLnN0b3BQcm9wYWdhdGlvbigpO3JldHVybiBmYWxzZX19fXJldHVybiB0cnVlfSxfZ2V0UGFnZUxvYWRlZEV2ZW50QXJnczpmdW5jdGlvbihuLGMpe3ZhciBtPVtdLGw9W10saz1jP2MudmVyc2lvbjQ6ZmFsc2UsZD1jP2MudXBkYXRlUGFuZWxEYXRhOm51bGwsZSxnLGgsYjtpZighZCl7ZT10aGlzLl91cGRhdGVQYW5lbElEcztnPXRoaXMuX3VwZGF0ZVBhbmVsQ2xpZW50SURzO2g9bnVsbDtiPW51bGx9ZWxzZXtlPWQudXBkYXRlUGFuZWxJRHM7Zz1kLnVwZGF0ZVBhbmVsQ2xpZW50SURzO2g9ZC5jaGlsZFVwZGF0ZVBhbmVsSURzO2I9ZC5wYW5lbHNUb1JlZnJlc2hJRHN9dmFyIGEsZixqLGk7aWYoYilmb3IoYT0wLGY9Yi5sZW5ndGg7YTxmO2ErPWs/MjoxKXtqPWJbYV07aT0oaz9iW2ErMV06IiIpfHx0aGlzLl91bmlxdWVJRFRvQ2xpZW50SUQoaik7QXJyYXkuYWRkKG0sZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaSkpfWZvcihhPTAsZj1lLmxlbmd0aDthPGY7YSsrKWlmKG58fEFycmF5LmluZGV4T2YoaCxlW2FdKSE9PS0xKUFycmF5LmFkZChsLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGdbYV0pKTtyZXR1cm4gbmV3IFN5cy5XZWJGb3Jtcy5QYWdlTG9hZGVkRXZlbnRBcmdzKG0sbCxjP2MuZGF0YUl0ZW1zOnt9KX0sX2dldFBhZ2VMb2FkaW5nRXZlbnRBcmdzOmZ1bmN0aW9uKGYpe3ZhciBqPVtdLGk9W10sYz1mLnVwZGF0ZVBhbmVsRGF0YSxrPWMub2xkVXBkYXRlUGFuZWxJRHMsbD1jLm9sZFVwZGF0ZVBhbmVsQ2xpZW50SURzLG49Yy51cGRhdGVQYW5lbElEcyxtPWMuY2hpbGRVcGRhdGVQYW5lbElEcyxkPWMucGFuZWxzVG9SZWZyZXNoSURzLGEsZSxiLGcsaD1mLnZlcnNpb240O2ZvcihhPTAsZT1kLmxlbmd0aDthPGU7YSs9aD8yOjEpe2I9ZFthXTtnPShoP2RbYSsxXToiIil8fHRoaXMuX3VuaXF1ZUlEVG9DbGllbnRJRChiKTtBcnJheS5hZGQoaixkb2N1bWVudC5nZXRFbGVtZW50QnlJZChnKSl9Zm9yKGE9MCxlPWsubGVuZ3RoO2E8ZTthKyspe2I9a1thXTtpZihBcnJheS5pbmRleE9mKGQsYik9PT0tMSYmKEFycmF5LmluZGV4T2YobixiKT09PS0xfHxBcnJheS5pbmRleE9mKG0sYik+LTEpKUFycmF5LmFkZChpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGxbYV0pKX1yZXR1cm4gbmV3IFN5cy5XZWJGb3Jtcy5QYWdlTG9hZGluZ0V2ZW50QXJncyhqLGksZi5kYXRhSXRlbXMpfSxfZ2V0UG9zdEJhY2tTZXR0aW5nczpmdW5jdGlvbihhLGMpe3ZhciBkPWEsYj1udWxsO3doaWxlKGEpe2lmKGEuaWQpe2lmKCFiJiZBcnJheS5jb250YWlucyh0aGlzLl9hc3luY1Bvc3RCYWNrQ29udHJvbENsaWVudElEcyxhLmlkKSliPXRoaXMuX2NyZWF0ZVBvc3RCYWNrU2V0dGluZ3ModHJ1ZSxudWxsLGMsZCk7ZWxzZSBpZighYiYmQXJyYXkuY29udGFpbnModGhpcy5fcG9zdEJhY2tDb250cm9sQ2xpZW50SURzLGEuaWQpKXJldHVybiB0aGlzLl9jcmVhdGVQb3N0QmFja1NldHRpbmdzKGZhbHNlKTtlbHNle3ZhciBlPUFycmF5LmluZGV4T2YodGhpcy5fdXBkYXRlUGFuZWxDbGllbnRJRHMsYS5pZCk7aWYoZSE9PS0xKWlmKHRoaXMuX3VwZGF0ZVBhbmVsSGFzQ2hpbGRyZW5Bc1RyaWdnZXJzW2VdKXJldHVybiB0aGlzLl9jcmVhdGVQb3N0QmFja1NldHRpbmdzKHRydWUsW3RoaXMuX3VwZGF0ZVBhbmVsSURzW2VdXSxjLGQpO2Vsc2UgcmV0dXJuIHRoaXMuX2NyZWF0ZVBvc3RCYWNrU2V0dGluZ3ModHJ1ZSxudWxsLGMsZCl9aWYoIWImJnRoaXMuX21hdGNoZXNQYXJlbnRJREluTGlzdChhLmlkLHRoaXMuX2FzeW5jUG9zdEJhY2tDb250cm9sQ2xpZW50SURzKSliPXRoaXMuX2NyZWF0ZVBvc3RCYWNrU2V0dGluZ3ModHJ1ZSxudWxsLGMsZCk7ZWxzZSBpZighYiYmdGhpcy5fbWF0Y2hlc1BhcmVudElESW5MaXN0KGEuaWQsdGhpcy5fcG9zdEJhY2tDb250cm9sQ2xpZW50SURzKSlyZXR1cm4gdGhpcy5fY3JlYXRlUG9zdEJhY2tTZXR0aW5ncyhmYWxzZSl9YT1hLnBhcmVudE5vZGV9aWYoIWIpcmV0dXJuIHRoaXMuX2NyZWF0ZVBvc3RCYWNrU2V0dGluZ3MoZmFsc2UpO2Vsc2UgcmV0dXJuIGJ9LF9nZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtpZihhJiYodGhpcy5fdmFsaWRQb3NpdGlvbihhLnNjcm9sbExlZnQpfHx0aGlzLl92YWxpZFBvc2l0aW9uKGEuc2Nyb2xsVG9wKSkpcmV0dXJuIHt4OmEuc2Nyb2xsTGVmdCx5OmEuc2Nyb2xsVG9wfTtlbHNle2E9ZG9jdW1lbnQuYm9keTtpZihhJiYodGhpcy5fdmFsaWRQb3NpdGlvbihhLnNjcm9sbExlZnQpfHx0aGlzLl92YWxpZFBvc2l0aW9uKGEuc2Nyb2xsVG9wKSkpcmV0dXJuIHt4OmEuc2Nyb2xsTGVmdCx5OmEuc2Nyb2xsVG9wfTtlbHNlIGlmKHRoaXMuX3ZhbGlkUG9zaXRpb24od2luZG93LnBhZ2VYT2Zmc2V0KXx8dGhpcy5fdmFsaWRQb3NpdGlvbih3aW5kb3cucGFnZVlPZmZzZXQpKXJldHVybiB7eDp3aW5kb3cucGFnZVhPZmZzZXQseTp3aW5kb3cucGFnZVlPZmZzZXR9O2Vsc2UgcmV0dXJuIHt4OjAseTowfX19LF9pbml0aWFsaXplSW50ZXJuYWw6ZnVuY3Rpb24oZixnLGEsYixlLGMsZCl7aWYodGhpcy5fcHJtSW5pdGlhbGl6ZWQpdGhyb3cgRXJyb3IuaW52YWxpZE9wZXJhdGlvbihTeXMuV2ViRm9ybXMuUmVzLlBSTV9DYW5ub3RSZWdpc3RlclR3aWNlKTt0aGlzLl9wcm1Jbml0aWFsaXplZD10cnVlO3RoaXMuX21hc3RlclBhZ2VVbmlxdWVJRD1kO3RoaXMuX3NjcmlwdE1hbmFnZXJJRD1mO3RoaXMuX2Zvcm09U3lzLlVJLkRvbUVsZW1lbnQucmVzb2x2ZUVsZW1lbnQoZyk7dGhpcy5fb25zdWJtaXQ9dGhpcy5fZm9ybS5vbnN1Ym1pdDt0aGlzLl9mb3JtLm9uc3VibWl0PW51bGw7dGhpcy5fb25Gb3JtU3VibWl0SGFuZGxlcj1GdW5jdGlvbi5jcmVhdGVEZWxlZ2F0ZSh0aGlzLHRoaXMuX29uRm9ybVN1Ym1pdCk7dGhpcy5fb25Gb3JtRWxlbWVudENsaWNrSGFuZGxlcj1GdW5jdGlvbi5jcmVhdGVEZWxlZ2F0ZSh0aGlzLHRoaXMuX29uRm9ybUVsZW1lbnRDbGljayk7dGhpcy5fb25XaW5kb3dVbmxvYWRIYW5kbGVyPUZ1bmN0aW9uLmNyZWF0ZURlbGVnYXRlKHRoaXMsdGhpcy5fb25XaW5kb3dVbmxvYWQpO1N5cy5VSS5Eb21FdmVudC5hZGRIYW5kbGVyKHRoaXMuX2Zvcm0sInN1Ym1pdCIsdGhpcy5fb25Gb3JtU3VibWl0SGFuZGxlcik7U3lzLlVJLkRvbUV2ZW50LmFkZEhhbmRsZXIodGhpcy5fZm9ybSwiY2xpY2siLHRoaXMuX29uRm9ybUVsZW1lbnRDbGlja0hhbmRsZXIpO1N5cy5VSS5Eb21FdmVudC5hZGRIYW5kbGVyKHdpbmRvdywidW5sb2FkIix0aGlzLl9vbldpbmRvd1VubG9hZEhhbmRsZXIpO3RoaXMuX29yaWdpbmFsRG9Qb3N0QmFjaz13aW5kb3cuX19kb1Bvc3RCYWNrO2lmKHRoaXMuX29yaWdpbmFsRG9Qb3N0QmFjayl3aW5kb3cuX19kb1Bvc3RCYWNrPUZ1bmN0aW9uLmNyZWF0ZURlbGVnYXRlKHRoaXMsdGhpcy5fZG9Qb3N0QmFjayk7dGhpcy5fb3JpZ2luYWxEb1Bvc3RCYWNrV2l0aE9wdGlvbnM9d2luZG93LldlYkZvcm1fRG9Qb3N0QmFja1dpdGhPcHRpb25zO2lmKHRoaXMuX29yaWdpbmFsRG9Qb3N0QmFja1dpdGhPcHRpb25zKXdpbmRvdy5XZWJGb3JtX0RvUG9zdEJhY2tXaXRoT3B0aW9ucz1GdW5jdGlvbi5jcmVhdGVEZWxlZ2F0ZSh0aGlzLHRoaXMuX2RvUG9zdEJhY2tXaXRoT3B0aW9ucyk7dGhpcy5fb3JpZ2luYWxGaXJlRGVmYXVsdEJ1dHRvbj13aW5kb3cuV2ViRm9ybV9GaXJlRGVmYXVsdEJ1dHRvbjtpZih0aGlzLl9vcmlnaW5hbEZpcmVEZWZhdWx0QnV0dG9uKXdpbmRvdy5XZWJGb3JtX0ZpcmVEZWZhdWx0QnV0dG9uPUZ1bmN0aW9uLmNyZWF0ZURlbGVnYXRlKHRoaXMsdGhpcy5fZmlyZURlZmF1bHRCdXR0b24pO3RoaXMuX29yaWdpbmFsRG9DYWxsYmFjaz13aW5kb3cuV2ViRm9ybV9Eb0NhbGxiYWNrO2lmKHRoaXMuX29yaWdpbmFsRG9DYWxsYmFjayl3aW5kb3cuV2ViRm9ybV9Eb0NhbGxiYWNrPUZ1bmN0aW9uLmNyZWF0ZURlbGVnYXRlKHRoaXMsdGhpcy5fZG9DYWxsYmFjayk7dGhpcy5fcGFnZUxvYWRlZEhhbmRsZXI9RnVuY3Rpb24uY3JlYXRlRGVsZWdhdGUodGhpcyx0aGlzLl9wYWdlTG9hZGVkSW5pdGlhbExvYWQpO1N5cy5VSS5Eb21FdmVudC5hZGRIYW5kbGVyKHdpbmRvdywibG9hZCIsdGhpcy5fcGFnZUxvYWRlZEhhbmRsZXIpO2lmKGEpdGhpcy5fdXBkYXRlQ29udHJvbHMoYSxiLGUsYyx0cnVlKX0sX21hdGNoZXNQYXJlbnRJREluTGlzdDpmdW5jdGlvbihjLGIpe2Zvcih2YXIgYT0wLGQ9Yi5sZW5ndGg7YTxkO2ErKylpZihjLnN0YXJ0c1dpdGgoYlthXSsiXyIpKXJldHVybiB0cnVlO3JldHVybiBmYWxzZX0sX29uRm9ybUVsZW1lbnRBY3RpdmU6ZnVuY3Rpb24oYSxkLGUpe2lmKGEuZGlzYWJsZWQpcmV0dXJuO3RoaXMuX2FjdGl2ZUVsZW1lbnQ9YTt0aGlzLl9wb3N0QmFja1NldHRpbmdzPXRoaXMuX2dldFBvc3RCYWNrU2V0dGluZ3MoYSxhLm5hbWUpO2lmKGEubmFtZSl7dmFyIGI9YS50YWdOYW1lLnRvVXBwZXJDYXNlKCk7aWYoYj09PSJJTlBVVCIpe3ZhciBjPWEudHlwZTtpZihjPT09InN1Ym1pdCIpdGhpcy5fYWRkaXRpb25hbElucHV0PWVuY29kZVVSSUNvbXBvbmVudChhLm5hbWUpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYS52YWx1ZSk7ZWxzZSBpZihjPT09ImltYWdlIil0aGlzLl9hZGRpdGlvbmFsSW5wdXQ9ZW5jb2RlVVJJQ29tcG9uZW50KGEubmFtZSkrIi54PSIrZCsiJiIrZW5jb2RlVVJJQ29tcG9uZW50KGEubmFtZSkrIi55PSIrZX1lbHNlIGlmKGI9PT0iQlVUVE9OIiYmYS5uYW1lLmxlbmd0aCE9PTAmJmEudHlwZT09PSJzdWJtaXQiKXRoaXMuX2FkZGl0aW9uYWxJbnB1dD1lbmNvZGVVUklDb21wb25lbnQoYS5uYW1lKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGEudmFsdWUpfX0sX29uRm9ybUVsZW1lbnRDbGljazpmdW5jdGlvbihhKXt0aGlzLl9hY3RpdmVEZWZhdWx0QnV0dG9uQ2xpY2tlZD1hLnRhcmdldD09PXRoaXMuX2FjdGl2ZURlZmF1bHRCdXR0b247dGhpcy5fb25Gb3JtRWxlbWVudEFjdGl2ZShhLnRhcmdldCxhLm9mZnNldFgsYS5vZmZzZXRZKX0sX29uRm9ybVN1Ym1pdDpmdW5jdGlvbihpKXt2YXIgZix4LGg9dHJ1ZSx6PXRoaXMuX2lzQ3Jvc3NQb3N0O3RoaXMuX2lzQ3Jvc3NQb3N0PWZhbHNlO2lmKHRoaXMuX29uc3VibWl0KWg9dGhpcy5fb25zdWJtaXQoKTtpZihoKWZvcihmPTAseD10aGlzLl9vblN1Ym1pdFN0YXRlbWVudHMubGVuZ3RoO2Y8eDtmKyspaWYoIXRoaXMuX29uU3VibWl0U3RhdGVtZW50c1tmXSgpKXtoPWZhbHNlO2JyZWFrfWlmKCFoKXtpZihpKWkucHJldmVudERlZmF1bHQoKTtyZXR1cm59dmFyIHc9dGhpcy5fZm9ybTtpZih6KXJldHVybjtpZih0aGlzLl9hY3RpdmVEZWZhdWx0QnV0dG9uJiYhdGhpcy5fYWN0aXZlRGVmYXVsdEJ1dHRvbkNsaWNrZWQpdGhpcy5fb25Gb3JtRWxlbWVudEFjdGl2ZSh0aGlzLl9hY3RpdmVEZWZhdWx0QnV0dG9uLDAsMCk7aWYoIXRoaXMuX3Bvc3RCYWNrU2V0dGluZ3N8fCF0aGlzLl9wb3N0QmFja1NldHRpbmdzLmFzeW5jKXJldHVybjt2YXIgYj1uZXcgU3lzLlN0cmluZ0J1aWxkZXIscz13LmVsZW1lbnRzLEI9cy5sZW5ndGgsdD10aGlzLl9jcmVhdGVQYW5lbElEKG51bGwsdGhpcy5fcG9zdEJhY2tTZXR0aW5ncyk7Yi5hcHBlbmQodCk7Zm9yKGY9MDtmPEI7ZisrKXt2YXIgZT1zW2ZdLGc9ZS5uYW1lO2lmKHR5cGVvZiBnPT09InVuZGVmaW5lZCJ8fGc9PT1udWxsfHxnLmxlbmd0aD09PTB8fGc9PT10aGlzLl9zY3JpcHRNYW5hZ2VySUQpY29udGludWU7dmFyIG49ZS50YWdOYW1lLnRvVXBwZXJDYXNlKCk7aWYobj09PSJJTlBVVCIpe3ZhciBwPWUudHlwZTtpZih0aGlzLl90ZXh0VHlwZXMudGVzdChwKXx8KHA9PT0iY2hlY2tib3gifHxwPT09InJhZGlvIikmJmUuY2hlY2tlZCl7Yi5hcHBlbmQoZW5jb2RlVVJJQ29tcG9uZW50KGcpKTtiLmFwcGVuZCgiPSIpO2IuYXBwZW5kKGVuY29kZVVSSUNvbXBvbmVudChlLnZhbHVlKSk7Yi5hcHBlbmQoIiYiKX19ZWxzZSBpZihuPT09IlNFTEVDVCIpe3ZhciBBPWUub3B0aW9ucy5sZW5ndGg7Zm9yKHZhciBxPTA7cTxBO3ErKyl7dmFyIHU9ZS5vcHRpb25zW3FdO2lmKHUuc2VsZWN0ZWQpe2IuYXBwZW5kKGVuY29kZVVSSUNvbXBvbmVudChnKSk7Yi5hcHBlbmQoIj0iKTtiLmFwcGVuZChlbmNvZGVVUklDb21wb25lbnQodS52YWx1ZSkpO2IuYXBwZW5kKCImIil9fX1lbHNlIGlmKG49PT0iVEVYVEFSRUEiKXtiLmFwcGVuZChlbmNvZGVVUklDb21wb25lbnQoZykpO2IuYXBwZW5kKCI9Iik7Yi5hcHBlbmQoZW5jb2RlVVJJQ29tcG9uZW50KGUudmFsdWUpKTtiLmFwcGVuZCgiJiIpfX1iLmFwcGVuZCgiX19BU1lOQ1BPU1Q9dHJ1ZSYiKTtpZih0aGlzLl9hZGRpdGlvbmFsSW5wdXQpe2IuYXBwZW5kKHRoaXMuX2FkZGl0aW9uYWxJbnB1dCk7dGhpcy5fYWRkaXRpb25hbElucHV0PW51bGx9dmFyIGM9bmV3IFN5cy5OZXQuV2ViUmVxdWVzdCxhPXcuYWN0aW9uO2lmKFN5cy5Ccm93c2VyLmFnZW50PT09U3lzLkJyb3dzZXIuSW50ZXJuZXRFeHBsb3Jlcil7dmFyIHI9YS5pbmRleE9mKCIjIik7aWYociE9PS0xKWE9YS5zdWJzdHIoMCxyKTt2YXIgbz0iIix2PSIiLG09YS5pbmRleE9mKCI/Iik7aWYobSE9PS0xKXt2PWEuc3Vic3RyKG0pO2E9YS5zdWJzdHIoMCxtKX1pZigvXmh0dHBzP1w6XC9cLy4qJC9naS50ZXN0KGEpKXt2YXIgeT1hLmluZGV4T2YoIi8vIikrMixsPWEuaW5kZXhPZigiLyIseSk7aWYobD09PS0xKXtvPWE7YT0iIn1lbHNle289YS5zdWJzdHIoMCxsKTthPWEuc3Vic3RyKGwpfX1hPW8rZW5jb2RlVVJJKGRlY29kZVVSSShhKSkrdn1jLnNldF91cmwoYSk7Yy5nZXRfaGVhZGVycygpWyJYLU1pY3Jvc29mdEFqYXgiXT0iRGVsdGE9dHJ1ZSI7Yy5nZXRfaGVhZGVycygpWyJDYWNoZS1Db250cm9sIl09Im5vLWNhY2hlIjtjLnNldF90aW1lb3V0KHRoaXMuX2FzeW5jUG9zdEJhY2tUaW1lb3V0KTtjLmFkZF9jb21wbGV0ZWQoRnVuY3Rpb24uY3JlYXRlRGVsZWdhdGUodGhpcyx0aGlzLl9vbkZvcm1TdWJtaXRDb21wbGV0ZWQpKTtjLnNldF9ib2R5KGIudG9TdHJpbmcoKSk7dmFyIGosZCxrPXRoaXMuX2dldF9ldmVudEhhbmRsZXJMaXN0KCkuZ2V0SGFuZGxlcigiaW5pdGlhbGl6ZVJlcXVlc3QiKTtpZihrKXtqPXRoaXMuX3Bvc3RCYWNrU2V0dGluZ3MucGFuZWxzVG9VcGRhdGU7ZD1uZXcgU3lzLldlYkZvcm1zLkluaXRpYWxpemVSZXF1ZXN0RXZlbnRBcmdzKGMsdGhpcy5fcG9zdEJhY2tTZXR0aW5ncy5zb3VyY2VFbGVtZW50LGopO2sodGhpcyxkKTtoPSFkLmdldF9jYW5jZWwoKX1pZighaCl7aWYoaSlpLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufWlmKGQmJmQuX3VwZGF0ZWQpe2o9ZC5nZXRfdXBkYXRlUGFuZWxzVG9VcGRhdGUoKTtjLnNldF9ib2R5KGMuZ2V0X2JvZHkoKS5yZXBsYWNlKHQsdGhpcy5fY3JlYXRlUGFuZWxJRChqLHRoaXMuX3Bvc3RCYWNrU2V0dGluZ3MpKSl9dGhpcy5fc2Nyb2xsUG9zaXRpb249dGhpcy5fZ2V0U2Nyb2xsUG9zaXRpb24oKTt0aGlzLmFib3J0UG9zdEJhY2soKTtrPXRoaXMuX2dldF9ldmVudEhhbmRsZXJMaXN0KCkuZ2V0SGFuZGxlcigiYmVnaW5SZXF1ZXN0Iik7aWYoayl7ZD1uZXcgU3lzLldlYkZvcm1zLkJlZ2luUmVxdWVzdEV2ZW50QXJncyhjLHRoaXMuX3Bvc3RCYWNrU2V0dGluZ3Muc291cmNlRWxlbWVudCxqfHx0aGlzLl9wb3N0QmFja1NldHRpbmdzLnBhbmVsc1RvVXBkYXRlKTtrKHRoaXMsZCl9aWYodGhpcy5fb3JpZ2luYWxEb0NhbGxiYWNrKXRoaXMuX2NhbmNlbFBlbmRpbmdDYWxsYmFja3MoKTt0aGlzLl9yZXF1ZXN0PWM7dGhpcy5fcHJvY2Vzc2luZ1JlcXVlc3Q9ZmFsc2U7Yy5pbnZva2UoKTtpZihpKWkucHJldmVudERlZmF1bHQoKX0sX29uRm9ybVN1Ym1pdENvbXBsZXRlZDpmdW5jdGlvbihjKXt0aGlzLl9wcm9jZXNzaW5nUmVxdWVzdD10cnVlO2lmKGMuZ2V0X3RpbWVkT3V0KCkpe3RoaXMuX2VuZFBvc3RCYWNrKHRoaXMuX2NyZWF0ZVBhZ2VSZXF1ZXN0TWFuYWdlclRpbWVvdXRFcnJvcigpLGMsbnVsbCk7cmV0dXJufWlmKGMuZ2V0X2Fib3J0ZWQoKSl7dGhpcy5fZW5kUG9zdEJhY2sobnVsbCxjLG51bGwpO3JldHVybn1pZighdGhpcy5fcmVxdWVzdHx8Yy5nZXRfd2ViUmVxdWVzdCgpIT09dGhpcy5fcmVxdWVzdClyZXR1cm47aWYoYy5nZXRfc3RhdHVzQ29kZSgpIT09MjAwKXt0aGlzLl9lbmRQb3N0QmFjayh0aGlzLl9jcmVhdGVQYWdlUmVxdWVzdE1hbmFnZXJTZXJ2ZXJFcnJvcihjLmdldF9zdGF0dXNDb2RlKCkpLGMsbnVsbCk7cmV0dXJufXZhciBhPXRoaXMuX3BhcnNlRGVsdGEoYyk7aWYoIWEpcmV0dXJuO3ZhciBiLGU7aWYoYS5hc3luY1Bvc3RCYWNrQ29udHJvbElEc05vZGUmJmEucG9zdEJhY2tDb250cm9sSURzTm9kZSYmYS51cGRhdGVQYW5lbElEc05vZGUmJmEucGFuZWxzVG9SZWZyZXNoTm9kZSYmYS5jaGlsZFVwZGF0ZVBhbmVsSURzTm9kZSl7dmFyIHI9dGhpcy5fdXBkYXRlUGFuZWxJRHMsbj10aGlzLl91cGRhdGVQYW5lbENsaWVudElEcyxpPWEuY2hpbGRVcGRhdGVQYW5lbElEc05vZGUuY29udGVudCxwPWkubGVuZ3RoP2kuc3BsaXQoIiwiKTpbXSxtPXRoaXMuX3NwbGl0Tm9kZUludG9BcnJheShhLmFzeW5jUG9zdEJhY2tDb250cm9sSURzTm9kZSksbz10aGlzLl9zcGxpdE5vZGVJbnRvQXJyYXkoYS5wb3N0QmFja0NvbnRyb2xJRHNOb2RlKSxxPXRoaXMuX3NwbGl0Tm9kZUludG9BcnJheShhLnVwZGF0ZVBhbmVsSURzTm9kZSksZz10aGlzLl9zcGxpdE5vZGVJbnRvQXJyYXkoYS5wYW5lbHNUb1JlZnJlc2hOb2RlKSxoPWEudmVyc2lvbjQ7Zm9yKGI9MCxlPWcubGVuZ3RoO2I8ZTtiKz1oPzI6MSl7dmFyIGo9KGg/Z1tiKzFdOiIiKXx8dGhpcy5fdW5pcXVlSURUb0NsaWVudElEKGdbYl0pO2lmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChqKSl7dGhpcy5fZW5kUG9zdEJhY2soRXJyb3IuaW52YWxpZE9wZXJhdGlvbihTdHJpbmcuZm9ybWF0KFN5cy5XZWJGb3Jtcy5SZXMuUFJNX01pc3NpbmdQYW5lbCxqKSksYyxhKTtyZXR1cm59fXZhciBmPXRoaXMuX3Byb2Nlc3NVcGRhdGVQYW5lbEFycmF5cyhxLG0sbyxoKTtmLm9sZFVwZGF0ZVBhbmVsSURzPXI7Zi5vbGRVcGRhdGVQYW5lbENsaWVudElEcz1uO2YuY2hpbGRVcGRhdGVQYW5lbElEcz1wO2YucGFuZWxzVG9SZWZyZXNoSURzPWc7YS51cGRhdGVQYW5lbERhdGE9Zn1hLmRhdGFJdGVtcz17fTt2YXIgZDtmb3IoYj0wLGU9YS5kYXRhSXRlbU5vZGVzLmxlbmd0aDtiPGU7YisrKXtkPWEuZGF0YUl0ZW1Ob2Rlc1tiXTthLmRhdGFJdGVtc1tkLmlkXT1kLmNvbnRlbnR9Zm9yKGI9MCxlPWEuZGF0YUl0ZW1Kc29uTm9kZXMubGVuZ3RoO2I8ZTtiKyspe2Q9YS5kYXRhSXRlbUpzb25Ob2Rlc1tiXTthLmRhdGFJdGVtc1tkLmlkXT1TeXMuU2VyaWFsaXphdGlvbi5KYXZhU2NyaXB0U2VyaWFsaXplci5kZXNlcmlhbGl6ZShkLmNvbnRlbnQpfXZhciBsPXRoaXMuX2dldF9ldmVudEhhbmRsZXJMaXN0KCkuZ2V0SGFuZGxlcigicGFnZUxvYWRpbmciKTtpZihsKWwodGhpcyx0aGlzLl9nZXRQYWdlTG9hZGluZ0V2ZW50QXJncyhhKSk7U3lzLl9TY3JpcHRMb2FkZXIucmVhZExvYWRlZFNjcmlwdHMoKTtTeXMuQXBwbGljYXRpb24uYmVnaW5DcmVhdGVDb21wb25lbnRzKCk7dmFyIGs9U3lzLl9TY3JpcHRMb2FkZXIuZ2V0SW5zdGFuY2UoKTt0aGlzLl9xdWV1ZVNjcmlwdHMoayxhLnNjcmlwdEJsb2NrTm9kZXMsdHJ1ZSxmYWxzZSk7dGhpcy5fcHJvY2Vzc2luZ1JlcXVlc3Q9dHJ1ZTtrLmxvYWRTY3JpcHRzKDAsRnVuY3Rpb24uY3JlYXRlRGVsZWdhdGUodGhpcyxGdW5jdGlvbi5jcmVhdGVDYWxsYmFjayh0aGlzLl9zY3JpcHRJbmNsdWRlc0xvYWRDb21wbGV0ZSxhKSksRnVuY3Rpb24uY3JlYXRlRGVsZWdhdGUodGhpcyxGdW5jdGlvbi5jcmVhdGVDYWxsYmFjayh0aGlzLl9zY3JpcHRJbmNsdWRlc0xvYWRGYWlsZWQsYSkpLG51bGwpfSxfb25XaW5kb3dVbmxvYWQ6ZnVuY3Rpb24oKXt0aGlzLmRpc3Bvc2UoKX0sX3BhZ2VMb2FkZWQ6ZnVuY3Rpb24oYSxjKXt2YXIgYj10aGlzLl9nZXRfZXZlbnRIYW5kbGVyTGlzdCgpLmdldEhhbmRsZXIoInBhZ2VMb2FkZWQiKTtpZihiKWIodGhpcyx0aGlzLl9nZXRQYWdlTG9hZGVkRXZlbnRBcmdzKGEsYykpO2lmKCFhKVN5cy5BcHBsaWNhdGlvbi5yYWlzZUxvYWQoKX0sX3BhZ2VMb2FkZWRJbml0aWFsTG9hZDpmdW5jdGlvbigpe3RoaXMuX3BhZ2VMb2FkZWQodHJ1ZSxudWxsKX0sX3BhcnNlRGVsdGE6ZnVuY3Rpb24oaCl7dmFyIGM9aC5nZXRfcmVzcG9uc2VEYXRhKCksZCxpLEUsRixELGI9MCxlPW51bGwsaz1bXTt3aGlsZShiPGMubGVuZ3RoKXtkPWMuaW5kZXhPZigifCIsYik7aWYoZD09PS0xKXtlPXRoaXMuX2ZpbmRUZXh0KGMsYik7YnJlYWt9aT1wYXJzZUludChjLnN1YnN0cmluZyhiLGQpLDEwKTtpZihpJTEhPT0wKXtlPXRoaXMuX2ZpbmRUZXh0KGMsYik7YnJlYWt9Yj1kKzE7ZD1jLmluZGV4T2YoInwiLGIpO2lmKGQ9PT0tMSl7ZT10aGlzLl9maW5kVGV4dChjLGIpO2JyZWFrfUU9Yy5zdWJzdHJpbmcoYixkKTtiPWQrMTtkPWMuaW5kZXhPZigifCIsYik7aWYoZD09PS0xKXtlPXRoaXMuX2ZpbmRUZXh0KGMsYik7YnJlYWt9Rj1jLnN1YnN0cmluZyhiLGQpO2I9ZCsxO2lmKGIraT49Yy5sZW5ndGgpe2U9dGhpcy5fZmluZFRleHQoYyxjLmxlbmd0aCk7YnJlYWt9RD1jLnN1YnN0cihiLGkpO2IrPWk7aWYoYy5jaGFyQXQoYikhPT0ifCIpe2U9dGhpcy5fZmluZFRleHQoYyxiKTticmVha31iKys7QXJyYXkuYWRkKGsse3R5cGU6RSxpZDpGLGNvbnRlbnQ6RH0pfWlmKGUpe3RoaXMuX2VuZFBvc3RCYWNrKHRoaXMuX2NyZWF0ZVBhZ2VSZXF1ZXN0TWFuYWdlclBhcnNlckVycm9yKFN0cmluZy5mb3JtYXQoU3lzLldlYkZvcm1zLlJlcy5QUk1fUGFyc2VyRXJyb3JEZXRhaWxzLGUpKSxoLG51bGwpO3JldHVybiBudWxsfXZhciB4PVtdLHc9W10scT1bXSxqPVtdLHQ9W10sQz1bXSxBPVtdLHo9W10sdj1bXSxzPVtdLG0scCx1LG4sbyxyLHksZztmb3IodmFyIGw9MCxHPWsubGVuZ3RoO2w8RztsKyspe3ZhciBhPWtbbF07c3dpdGNoKGEudHlwZSl7Y2FzZSAiIyI6Zz1hO2JyZWFrO2Nhc2UgInVwZGF0ZVBhbmVsIjpBcnJheS5hZGQoeCxhKTticmVhaztjYXNlICJoaWRkZW5GaWVsZCI6QXJyYXkuYWRkKHcsYSk7YnJlYWs7Y2FzZSAiYXJyYXlEZWNsYXJhdGlvbiI6QXJyYXkuYWRkKHEsYSk7YnJlYWs7Y2FzZSAic2NyaXB0QmxvY2siOkFycmF5LmFkZChqLGEpO2JyZWFrO2Nhc2UgImZhbGxiYWNrU2NyaXB0IjpqW2oubGVuZ3RoLTFdLmZhbGxiYWNrPWEuaWQ7Y2FzZSAic2NyaXB0U3RhcnR1cEJsb2NrIjpBcnJheS5hZGQodCxhKTticmVhaztjYXNlICJleHBhbmRvIjpBcnJheS5hZGQoQyxhKTticmVhaztjYXNlICJvblN1Ym1pdCI6QXJyYXkuYWRkKEEsYSk7YnJlYWs7Y2FzZSAiYXN5bmNQb3N0QmFja0NvbnRyb2xJRHMiOm09YTticmVhaztjYXNlICJwb3N0QmFja0NvbnRyb2xJRHMiOnA9YTticmVhaztjYXNlICJ1cGRhdGVQYW5lbElEcyI6dT1hO2JyZWFrO2Nhc2UgImFzeW5jUG9zdEJhY2tUaW1lb3V0IjpuPWE7YnJlYWs7Y2FzZSAiY2hpbGRVcGRhdGVQYW5lbElEcyI6bz1hO2JyZWFrO2Nhc2UgInBhbmVsc1RvUmVmcmVzaElEcyI6cj1hO2JyZWFrO2Nhc2UgImZvcm1BY3Rpb24iOnk9YTticmVhaztjYXNlICJkYXRhSXRlbSI6QXJyYXkuYWRkKHosYSk7YnJlYWs7Y2FzZSAiZGF0YUl0ZW1Kc29uIjpBcnJheS5hZGQodixhKTticmVhaztjYXNlICJzY3JpcHREaXNwb3NlIjpBcnJheS5hZGQocyxhKTticmVhaztjYXNlICJwYWdlUmVkaXJlY3QiOmlmKGcmJnBhcnNlRmxvYXQoZy5jb250ZW50KT49NClhLmNvbnRlbnQ9dW5lc2NhcGUoYS5jb250ZW50KTtpZihTeXMuQnJvd3Nlci5hZ2VudD09PVN5cy5Ccm93c2VyLkludGVybmV0RXhwbG9yZXIpe3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2YuYXR0YWNoRXZlbnQoIm9uY2xpY2siLEIpO2YuaHJlZj1hLmNvbnRlbnQ7dGhpcy5fZm9ybS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShmLHRoaXMuX2Zvcm0pO2YuY2xpY2soKTtmLmRldGFjaEV2ZW50KCJvbmNsaWNrIixCKTt0aGlzLl9mb3JtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZik7ZnVuY3Rpb24gQihhKXthLmNhbmNlbEJ1YmJsZT10cnVlfX1lbHNlIHdpbmRvdy5sb2NhdGlvbi5ocmVmPWEuY29udGVudDtyZXR1cm4gbnVsbDtjYXNlICJlcnJvciI6dGhpcy5fZW5kUG9zdEJhY2sodGhpcy5fY3JlYXRlUGFnZVJlcXVlc3RNYW5hZ2VyU2VydmVyRXJyb3IoTnVtYmVyLnBhcnNlSW52YXJpYW50KGEuaWQpLGEuY29udGVudCksaCxudWxsKTtyZXR1cm4gbnVsbDtjYXNlICJwYWdlVGl0bGUiOmRvY3VtZW50LnRpdGxlPWEuY29udGVudDticmVhaztjYXNlICJmb2N1cyI6dGhpcy5fY29udHJvbElEVG9Gb2N1cz1hLmNvbnRlbnQ7YnJlYWs7ZGVmYXVsdDp0aGlzLl9lbmRQb3N0QmFjayh0aGlzLl9jcmVhdGVQYWdlUmVxdWVzdE1hbmFnZXJQYXJzZXJFcnJvcihTdHJpbmcuZm9ybWF0KFN5cy5XZWJGb3Jtcy5SZXMuUFJNX1Vua25vd25Ub2tlbixhLnR5cGUpKSxoLG51bGwpO3JldHVybiBudWxsfX1yZXR1cm4ge3ZlcnNpb240Omc/cGFyc2VGbG9hdChnLmNvbnRlbnQpPj00OmZhbHNlLGV4ZWN1dG9yOmgsdXBkYXRlUGFuZWxOb2Rlczp4LGhpZGRlbkZpZWxkTm9kZXM6dyxhcnJheURlY2xhcmF0aW9uTm9kZXM6cSxzY3JpcHRCbG9ja05vZGVzOmosc2NyaXB0U3RhcnR1cE5vZGVzOnQsZXhwYW5kb05vZGVzOkMsb25TdWJtaXROb2RlczpBLGRhdGFJdGVtTm9kZXM6eixkYXRhSXRlbUpzb25Ob2Rlczp2LHNjcmlwdERpc3Bvc2VOb2RlczpzLGFzeW5jUG9zdEJhY2tDb250cm9sSURzTm9kZTptLHBvc3RCYWNrQ29udHJvbElEc05vZGU6cCx1cGRhdGVQYW5lbElEc05vZGU6dSxhc3luY1Bvc3RCYWNrVGltZW91dE5vZGU6bixjaGlsZFVwZGF0ZVBhbmVsSURzTm9kZTpvLHBhbmVsc1RvUmVmcmVzaE5vZGU6cixmb3JtQWN0aW9uTm9kZTp5fX0sX3Byb2Nlc3NVcGRhdGVQYW5lbEFycmF5czpmdW5jdGlvbihlLHEscixmKXt2YXIgZCxjLGI7aWYoZSl7dmFyIGk9ZS5sZW5ndGgsaj1mPzI6MTtkPW5ldyBBcnJheShpL2opO2M9bmV3IEFycmF5KGkvaik7Yj1uZXcgQXJyYXkoaS9qKTtmb3IodmFyIGc9MCxoPTA7ZzxpO2crPWosaCsrKXt2YXIgcCxhPWVbZ10saz1mP2VbZysxXToiIjtwPWEuY2hhckF0KDApPT09InQiO2E9YS5zdWJzdHIoMSk7aWYoIWspaz10aGlzLl91bmlxdWVJRFRvQ2xpZW50SUQoYSk7YltoXT1wO2RbaF09YTtjW2hdPWt9fWVsc2V7ZD1bXTtjPVtdO2I9W119dmFyIG49W10sbD1bXTt0aGlzLl9jb252ZXJ0VG9DbGllbnRJRHMocSxuLGwsZik7dmFyIG89W10sbT1bXTt0aGlzLl9jb252ZXJ0VG9DbGllbnRJRHMocixvLG0sZik7cmV0dXJuIHt1cGRhdGVQYW5lbElEczpkLHVwZGF0ZVBhbmVsQ2xpZW50SURzOmMsdXBkYXRlUGFuZWxIYXNDaGlsZHJlbkFzVHJpZ2dlcnM6Yixhc3luY1Bvc3RCYWNrQ29udHJvbElEczpuLGFzeW5jUG9zdEJhY2tDb250cm9sQ2xpZW50SURzOmwscG9zdEJhY2tDb250cm9sSURzOm8scG9zdEJhY2tDb250cm9sQ2xpZW50SURzOm19fSxfcXVldWVTY3JpcHRzOmZ1bmN0aW9uKHNjcmlwdExvYWRlcixzY3JpcHRCbG9ja05vZGVzLHF1ZXVlSW5jbHVkZXMscXVldWVCbG9ja3Mpe2Zvcih2YXIgaT0wLGw9c2NyaXB0QmxvY2tOb2Rlcy5sZW5ndGg7aTxsO2krKyl7dmFyIHNjcmlwdEJsb2NrVHlwZT1zY3JpcHRCbG9ja05vZGVzW2ldLmlkO3N3aXRjaChzY3JpcHRCbG9ja1R5cGUpe2Nhc2UgIlNjcmlwdENvbnRlbnROb1RhZ3MiOmlmKCFxdWV1ZUJsb2Nrcyljb250aW51ZTtzY3JpcHRMb2FkZXIucXVldWVTY3JpcHRCbG9jayhzY3JpcHRCbG9ja05vZGVzW2ldLmNvbnRlbnQpO2JyZWFrO2Nhc2UgIlNjcmlwdENvbnRlbnRXaXRoVGFncyI6dmFyIHNjcmlwdFRhZ0F0dHJpYnV0ZXM7ZXZhbCgic2NyaXB0VGFnQXR0cmlidXRlcyA9ICIrc2NyaXB0QmxvY2tOb2Rlc1tpXS5jb250ZW50KTtpZihzY3JpcHRUYWdBdHRyaWJ1dGVzLnNyYyl7aWYoIXF1ZXVlSW5jbHVkZXN8fFN5cy5fU2NyaXB0TG9hZGVyLmlzU2NyaXB0TG9hZGVkKHNjcmlwdFRhZ0F0dHJpYnV0ZXMuc3JjKSljb250aW51ZX1lbHNlIGlmKCFxdWV1ZUJsb2Nrcyljb250aW51ZTtzY3JpcHRMb2FkZXIucXVldWVDdXN0b21TY3JpcHRUYWcoc2NyaXB0VGFnQXR0cmlidXRlcyk7YnJlYWs7Y2FzZSAiU2NyaXB0UGF0aCI6dmFyIHNjcmlwdD1zY3JpcHRCbG9ja05vZGVzW2ldO2lmKCFxdWV1ZUluY2x1ZGVzfHxTeXMuX1NjcmlwdExvYWRlci5pc1NjcmlwdExvYWRlZChzY3JpcHQuY29udGVudCkpY29udGludWU7c2NyaXB0TG9hZGVyLnF1ZXVlU2NyaXB0UmVmZXJlbmNlKHNjcmlwdC5jb250ZW50LHNjcmlwdC5mYWxsYmFjayl9fX0sX3JlZ2lzdGVyRGlzcG9zZVNjcmlwdDpmdW5jdGlvbihhLGIpe2lmKCF0aGlzLl9zY3JpcHREaXNwb3Nlc1thXSl0aGlzLl9zY3JpcHREaXNwb3Nlc1thXT1bYl07ZWxzZSBBcnJheS5hZGQodGhpcy5fc2NyaXB0RGlzcG9zZXNbYV0sYil9LF9zY3JpcHRJbmNsdWRlc0xvYWRDb21wbGV0ZTpmdW5jdGlvbihlLGIpe2lmKGIuZXhlY3V0b3IuZ2V0X3dlYlJlcXVlc3QoKSE9PXRoaXMuX3JlcXVlc3QpcmV0dXJuO3RoaXMuX2NvbW1pdENvbnRyb2xzKGIudXBkYXRlUGFuZWxEYXRhLGIuYXN5bmNQb3N0QmFja1RpbWVvdXROb2RlP2IuYXN5bmNQb3N0QmFja1RpbWVvdXROb2RlLmNvbnRlbnQ6bnVsbCk7aWYoYi5mb3JtQWN0aW9uTm9kZSl0aGlzLl9mb3JtLmFjdGlvbj1iLmZvcm1BY3Rpb25Ob2RlLmNvbnRlbnQ7dmFyIGEsZCxjO2ZvcihhPTAsZD1iLnVwZGF0ZVBhbmVsTm9kZXMubGVuZ3RoO2E8ZDthKyspe2M9Yi51cGRhdGVQYW5lbE5vZGVzW2FdO3ZhciBqPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGMuaWQpO2lmKCFqKXt0aGlzLl9lbmRQb3N0QmFjayhFcnJvci5pbnZhbGlkT3BlcmF0aW9uKFN0cmluZy5mb3JtYXQoU3lzLldlYkZvcm1zLlJlcy5QUk1fTWlzc2luZ1BhbmVsLGMuaWQpKSxiLmV4ZWN1dG9yLGIpO3JldHVybn10aGlzLl91cGRhdGVQYW5lbChqLGMuY29udGVudCl9Zm9yKGE9MCxkPWIuc2NyaXB0RGlzcG9zZU5vZGVzLmxlbmd0aDthPGQ7YSsrKXtjPWIuc2NyaXB0RGlzcG9zZU5vZGVzW2FdO3RoaXMuX3JlZ2lzdGVyRGlzcG9zZVNjcmlwdChjLmlkLGMuY29udGVudCl9Zm9yKGE9MCxkPXRoaXMuX3RyYW5zaWVudEZpZWxkcy5sZW5ndGg7YTxkO2ErKyl7dmFyIGc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fdHJhbnNpZW50RmllbGRzW2FdKTtpZihnKXt2YXIgaz1nLl9pc0NvbnRhaW5lZD9nLnBhcmVudE5vZGU6ZztrLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoayl9fWZvcihhPTAsZD1iLmhpZGRlbkZpZWxkTm9kZXMubGVuZ3RoO2E8ZDthKyspe2M9Yi5oaWRkZW5GaWVsZE5vZGVzW2FdO3RoaXMuX2NyZWF0ZUhpZGRlbkZpZWxkKGMuaWQsYy5jb250ZW50KX1pZihiLnNjcmlwdHNGYWlsZWQpdGhyb3cgU3lzLl9TY3JpcHRMb2FkZXIuX2Vycm9yU2NyaXB0TG9hZEZhaWxlZChiLnNjcmlwdHNGYWlsZWQuc3JjLGIuc2NyaXB0c0ZhaWxlZC5tdWx0aXBsZUNhbGxiYWNrcyk7dGhpcy5fcXVldWVTY3JpcHRzKGUsYi5zY3JpcHRCbG9ja05vZGVzLGZhbHNlLHRydWUpO3ZhciBpPSIiO2ZvcihhPTAsZD1iLmFycmF5RGVjbGFyYXRpb25Ob2Rlcy5sZW5ndGg7YTxkO2ErKyl7Yz1iLmFycmF5RGVjbGFyYXRpb25Ob2Rlc1thXTtpKz0iU3lzLldlYkZvcm1zLlBhZ2VSZXF1ZXN0TWFuYWdlci5fYWRkQXJyYXlFbGVtZW50KCciK2MuaWQrIicsICIrYy5jb250ZW50KyIpO1xyXG4ifXZhciBoPSIiO2ZvcihhPTAsZD1iLmV4cGFuZG9Ob2Rlcy5sZW5ndGg7YTxkO2ErKyl7Yz1iLmV4cGFuZG9Ob2Rlc1thXTtoKz1jLmlkKyIgPSAiK2MuY29udGVudCsiXHJcbiJ9aWYoaS5sZW5ndGgpZS5xdWV1ZVNjcmlwdEJsb2NrKGkpO2lmKGgubGVuZ3RoKWUucXVldWVTY3JpcHRCbG9jayhoKTt0aGlzLl9xdWV1ZVNjcmlwdHMoZSxiLnNjcmlwdFN0YXJ0dXBOb2Rlcyx0cnVlLHRydWUpO3ZhciBmPSIiO2ZvcihhPTAsZD1iLm9uU3VibWl0Tm9kZXMubGVuZ3RoO2E8ZDthKyspe2lmKGE9PT0wKWY9IkFycmF5LmFkZChTeXMuV2ViRm9ybXMuUGFnZVJlcXVlc3RNYW5hZ2VyLmdldEluc3RhbmNlKCkuX29uU3VibWl0U3RhdGVtZW50cywgZnVuY3Rpb24oKSB7XHJcbiI7Zis9Yi5vblN1Ym1pdE5vZGVzW2FdLmNvbnRlbnQrIlxyXG4ifWlmKGYubGVuZ3RoKXtmKz0iXHJcbnJldHVybiB0cnVlO1xyXG59KTtcclxuIjtlLnF1ZXVlU2NyaXB0QmxvY2soZil9ZS5sb2FkU2NyaXB0cygwLEZ1bmN0aW9uLmNyZWF0ZURlbGVnYXRlKHRoaXMsRnVuY3Rpb24uY3JlYXRlQ2FsbGJhY2sodGhpcy5fc2NyaXB0c0xvYWRDb21wbGV0ZSxiKSksbnVsbCxudWxsKX0sX3NjcmlwdEluY2x1ZGVzTG9hZEZhaWxlZDpmdW5jdGlvbihkLGMsYixhKXthLnNjcmlwdHNGYWlsZWQ9e3NyYzpjLnNyYyxtdWx0aXBsZUNhbGxiYWNrczpifTt0aGlzLl9zY3JpcHRJbmNsdWRlc0xvYWRDb21wbGV0ZShkLGEpfSxfc2NyaXB0c0xvYWRDb21wbGV0ZTpmdW5jdGlvbihmLGMpe3ZhciBlPWMuZXhlY3V0b3I7aWYod2luZG93Ll9fdGhlRm9ybVBvc3REYXRhKXdpbmRvdy5fX3RoZUZvcm1Qb3N0RGF0YT0iIjtpZih3aW5kb3cuX190aGVGb3JtUG9zdENvbGxlY3Rpb24pd2luZG93Ll9fdGhlRm9ybVBvc3RDb2xsZWN0aW9uPVtdO2lmKHdpbmRvdy5XZWJGb3JtX0luaXRDYWxsYmFjayl3aW5kb3cuV2ViRm9ybV9Jbml0Q2FsbGJhY2soKTtpZih0aGlzLl9zY3JvbGxQb3NpdGlvbil7aWYod2luZG93LnNjcm9sbFRvKXdpbmRvdy5zY3JvbGxUbyh0aGlzLl9zY3JvbGxQb3NpdGlvbi54LHRoaXMuX3Njcm9sbFBvc2l0aW9uLnkpO3RoaXMuX3Njcm9sbFBvc2l0aW9uPW51bGx9U3lzLkFwcGxpY2F0aW9uLmVuZENyZWF0ZUNvbXBvbmVudHMoKTt0aGlzLl9wYWdlTG9hZGVkKGZhbHNlLGMpO3RoaXMuX2VuZFBvc3RCYWNrKG51bGwsZSxjKTtpZih0aGlzLl9jb250cm9sSURUb0ZvY3VzKXt2YXIgYSxkO2lmKFN5cy5Ccm93c2VyLmFnZW50PT09U3lzLkJyb3dzZXIuSW50ZXJuZXRFeHBsb3Jlcil7dmFyIGI9JGdldCh0aGlzLl9jb250cm9sSURUb0ZvY3VzKTthPWI7aWYoYiYmIVdlYkZvcm1fQ2FuRm9jdXMoYikpYT1XZWJGb3JtX0ZpbmRGaXJzdEZvY3VzYWJsZUNoaWxkKGIpO2lmKGEmJnR5cGVvZiBhLmNvbnRlbnRFZGl0YWJsZSE9PSJ1bmRlZmluZWQiKXtkPWEuY29udGVudEVkaXRhYmxlO2EuY29udGVudEVkaXRhYmxlPWZhbHNlfWVsc2UgYT1udWxsfVdlYkZvcm1fQXV0b0ZvY3VzKHRoaXMuX2NvbnRyb2xJRFRvRm9jdXMpO2lmKGEpYS5jb250ZW50RWRpdGFibGU9ZDt0aGlzLl9jb250cm9sSURUb0ZvY3VzPW51bGx9fSxfc3BsaXROb2RlSW50b0FycmF5OmZ1bmN0aW9uKGIpe3ZhciBhPWIuY29udGVudCxjPWEubGVuZ3RoP2Euc3BsaXQoIiwiKTpbXTtyZXR1cm4gY30sX3VuaXF1ZUlEVG9DbGllbnRJRDpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC9cJC9nLCJfIil9LF91cGRhdGVDb250cm9sczpmdW5jdGlvbihkLGEsYyxiLGUpe3RoaXMuX2NvbW1pdENvbnRyb2xzKHRoaXMuX3Byb2Nlc3NVcGRhdGVQYW5lbEFycmF5cyhkLGEsYyxlKSxiKX0sX3VwZGF0ZVBhbmVsOmZ1bmN0aW9uKHVwZGF0ZVBhbmVsRWxlbWVudCxyZW5kZXJpbmcpe2Zvcih2YXIgdXBkYXRlUGFuZWxJRCBpbiB0aGlzLl9zY3JpcHREaXNwb3NlcylpZih0aGlzLl9lbGVtZW50Q29udGFpbnModXBkYXRlUGFuZWxFbGVtZW50LGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHVwZGF0ZVBhbmVsSUQpKSl7dmFyIGRpc3Bvc2VTY3JpcHRzPXRoaXMuX3NjcmlwdERpc3Bvc2VzW3VwZGF0ZVBhbmVsSURdO2Zvcih2YXIgaT0wLGw9ZGlzcG9zZVNjcmlwdHMubGVuZ3RoO2k8bDtpKyspZXZhbChkaXNwb3NlU2NyaXB0c1tpXSk7ZGVsZXRlIHRoaXMuX3NjcmlwdERpc3Bvc2VzW3VwZGF0ZVBhbmVsSURdfVN5cy5BcHBsaWNhdGlvbi5kaXNwb3NlRWxlbWVudCh1cGRhdGVQYW5lbEVsZW1lbnQsdHJ1ZSk7dXBkYXRlUGFuZWxFbGVtZW50LmlubmVySFRNTD1yZW5kZXJpbmd9LF92YWxpZFBvc2l0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgYSE9PSJ1bmRlZmluZWQiJiZhIT09bnVsbCYmYSE9PTB9fTtTeXMuV2ViRm9ybXMuUGFnZVJlcXVlc3RNYW5hZ2VyLmdldEluc3RhbmNlPWZ1bmN0aW9uKCl7dmFyIGE9U3lzLldlYkZvcm1zLlBhZ2VSZXF1ZXN0TWFuYWdlci5faW5zdGFuY2U7aWYoIWEpYT1TeXMuV2ViRm9ybXMuUGFnZVJlcXVlc3RNYW5hZ2VyLl9pbnN0YW5jZT1uZXcgU3lzLldlYkZvcm1zLlBhZ2VSZXF1ZXN0TWFuYWdlcjtyZXR1cm4gYX07U3lzLldlYkZvcm1zLlBhZ2VSZXF1ZXN0TWFuYWdlci5fYWRkQXJyYXlFbGVtZW50PWZ1bmN0aW9uKGEpe2lmKCF3aW5kb3dbYV0pd2luZG93W2FdPVtdO2Zvcih2YXIgYj0xLGM9YXJndW1lbnRzLmxlbmd0aDtiPGM7YisrKUFycmF5LmFkZCh3aW5kb3dbYV0sYXJndW1lbnRzW2JdKX07U3lzLldlYkZvcm1zLlBhZ2VSZXF1ZXN0TWFuYWdlci5faW5pdGlhbGl6ZT1mdW5jdGlvbigpe3ZhciBhPVN5cy5XZWJGb3Jtcy5QYWdlUmVxdWVzdE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTthLl9pbml0aWFsaXplSW50ZXJuYWwuYXBwbHkoYSxhcmd1bWVudHMpfTtTeXMuV2ViRm9ybXMuUGFnZVJlcXVlc3RNYW5hZ2VyLnJlZ2lzdGVyQ2xhc3MoIlN5cy5XZWJGb3Jtcy5QYWdlUmVxdWVzdE1hbmFnZXIiKTtTeXMuVUkuX1VwZGF0ZVByb2dyZXNzPWZ1bmN0aW9uKGEpe1N5cy5VSS5fVXBkYXRlUHJvZ3Jlc3MuaW5pdGlhbGl6ZUJhc2UodGhpcyxbYV0pO3RoaXMuX2Rpc3BsYXlBZnRlcj01MDA7dGhpcy5fZHluYW1pY0xheW91dD10cnVlO3RoaXMuX2Fzc29jaWF0ZWRVcGRhdGVQYW5lbElkPW51bGw7dGhpcy5fYmVnaW5SZXF1ZXN0SGFuZGxlckRlbGVnYXRlPW51bGw7dGhpcy5fc3RhcnREZWxlZ2F0ZT1udWxsO3RoaXMuX2VuZFJlcXVlc3RIYW5kbGVyRGVsZWdhdGU9bnVsbDt0aGlzLl9wYWdlUmVxdWVzdE1hbmFnZXI9bnVsbDt0aGlzLl90aW1lckNvb2tpZT1udWxsfTtTeXMuVUkuX1VwZGF0ZVByb2dyZXNzLnByb3RvdHlwZT17Z2V0X2Rpc3BsYXlBZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNwbGF5QWZ0ZXJ9LHNldF9kaXNwbGF5QWZ0ZXI6ZnVuY3Rpb24oYSl7dGhpcy5fZGlzcGxheUFmdGVyPWF9LGdldF9keW5hbWljTGF5b3V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2R5bmFtaWNMYXlvdXR9LHNldF9keW5hbWljTGF5b3V0OmZ1bmN0aW9uKGEpe3RoaXMuX2R5bmFtaWNMYXlvdXQ9YX0sZ2V0X2Fzc29jaWF0ZWRVcGRhdGVQYW5lbElkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc29jaWF0ZWRVcGRhdGVQYW5lbElkfSxzZXRfYXNzb2NpYXRlZFVwZGF0ZVBhbmVsSWQ6ZnVuY3Rpb24oYSl7dGhpcy5fYXNzb2NpYXRlZFVwZGF0ZVBhbmVsSWQ9YX0sZ2V0X3JvbGU6ZnVuY3Rpb24oKXtyZXR1cm4gInN0YXR1cyJ9LF9jbGVhclRpbWVvdXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl90aW1lckNvb2tpZSl7d2luZG93LmNsZWFyVGltZW91dCh0aGlzLl90aW1lckNvb2tpZSk7dGhpcy5fdGltZXJDb29raWU9bnVsbH19LF9nZXRVbmlxdWVJRDpmdW5jdGlvbihiKXt2YXIgYT1BcnJheS5pbmRleE9mKHRoaXMuX3BhZ2VSZXF1ZXN0TWFuYWdlci5fdXBkYXRlUGFuZWxDbGllbnRJRHMsYik7cmV0dXJuIGE9PT0tMT9udWxsOnRoaXMuX3BhZ2VSZXF1ZXN0TWFuYWdlci5fdXBkYXRlUGFuZWxJRHNbYV19LF9oYW5kbGVCZWdpblJlcXVlc3Q6ZnVuY3Rpb24oZixlKXt2YXIgYj1lLmdldF9wb3N0QmFja0VsZW1lbnQoKSxhPXRydWUsZD10aGlzLl9hc3NvY2lhdGVkVXBkYXRlUGFuZWxJZDtpZih0aGlzLl9hc3NvY2lhdGVkVXBkYXRlUGFuZWxJZCl7dmFyIGM9ZS5nZXRfdXBkYXRlUGFuZWxzVG9VcGRhdGUoKTtpZihjJiZjLmxlbmd0aClhPUFycmF5LmNvbnRhaW5zKGMsZCl8fEFycmF5LmNvbnRhaW5zKGMsdGhpcy5fZ2V0VW5pcXVlSUQoZCkpO2Vsc2UgYT1mYWxzZX13aGlsZSghYSYmYil7aWYoYi5pZCYmdGhpcy5fYXNzb2NpYXRlZFVwZGF0ZVBhbmVsSWQ9PT1iLmlkKWE9dHJ1ZTtiPWIucGFyZW50Tm9kZX1pZihhKXRoaXMuX3RpbWVyQ29va2llPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuX3N0YXJ0RGVsZWdhdGUsdGhpcy5fZGlzcGxheUFmdGVyKX0sX3N0YXJ0UmVxdWVzdDpmdW5jdGlvbigpe2lmKHRoaXMuX3BhZ2VSZXF1ZXN0TWFuYWdlci5nZXRfaXNJbkFzeW5jUG9zdEJhY2soKSl7dmFyIGE9dGhpcy5nZXRfZWxlbWVudCgpO2lmKHRoaXMuX2R5bmFtaWNMYXlvdXQpYS5zdHlsZS5kaXNwbGF5PSJibG9jayI7ZWxzZSBhLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUiO2lmKHRoaXMuZ2V0X3JvbGUoKT09PSJzdGF0dXMiKWEuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsImZhbHNlIil9dGhpcy5fdGltZXJDb29raWU9bnVsbH0sX2hhbmRsZUVuZFJlcXVlc3Q6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldF9lbGVtZW50KCk7aWYodGhpcy5fZHluYW1pY0xheW91dClhLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2Vsc2UgYS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iO2lmKHRoaXMuZ2V0X3JvbGUoKT09PSJzdGF0dXMiKWEuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKTt0aGlzLl9jbGVhclRpbWVvdXQoKX0sZGlzcG9zZTpmdW5jdGlvbigpe2lmKHRoaXMuX2JlZ2luUmVxdWVzdEhhbmRsZXJEZWxlZ2F0ZSE9PW51bGwpe3RoaXMuX3BhZ2VSZXF1ZXN0TWFuYWdlci5yZW1vdmVfYmVnaW5SZXF1ZXN0KHRoaXMuX2JlZ2luUmVxdWVzdEhhbmRsZXJEZWxlZ2F0ZSk7dGhpcy5fcGFnZVJlcXVlc3RNYW5hZ2VyLnJlbW92ZV9lbmRSZXF1ZXN0KHRoaXMuX2VuZFJlcXVlc3RIYW5kbGVyRGVsZWdhdGUpO3RoaXMuX2JlZ2luUmVxdWVzdEhhbmRsZXJEZWxlZ2F0ZT1udWxsO3RoaXMuX2VuZFJlcXVlc3RIYW5kbGVyRGVsZWdhdGU9bnVsbH10aGlzLl9jbGVhclRpbWVvdXQoKTtTeXMuVUkuX1VwZGF0ZVByb2dyZXNzLmNhbGxCYXNlTWV0aG9kKHRoaXMsImRpc3Bvc2UiKX0saW5pdGlhbGl6ZTpmdW5jdGlvbigpe1N5cy5VSS5fVXBkYXRlUHJvZ3Jlc3MuY2FsbEJhc2VNZXRob2QodGhpcywiaW5pdGlhbGl6ZSIpO2lmKHRoaXMuZ2V0X3JvbGUoKT09PSJzdGF0dXMiKXRoaXMuZ2V0X2VsZW1lbnQoKS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpO3RoaXMuX2JlZ2luUmVxdWVzdEhhbmRsZXJEZWxlZ2F0ZT1GdW5jdGlvbi5jcmVhdGVEZWxlZ2F0ZSh0aGlzLHRoaXMuX2hhbmRsZUJlZ2luUmVxdWVzdCk7dGhpcy5fZW5kUmVxdWVzdEhhbmRsZXJEZWxlZ2F0ZT1GdW5jdGlvbi5jcmVhdGVEZWxlZ2F0ZSh0aGlzLHRoaXMuX2hhbmRsZUVuZFJlcXVlc3QpO3RoaXMuX3N0YXJ0RGVsZWdhdGU9RnVuY3Rpb24uY3JlYXRlRGVsZWdhdGUodGhpcyx0aGlzLl9zdGFydFJlcXVlc3QpO2lmKFN5cy5XZWJGb3JtcyYmU3lzLldlYkZvcm1zLlBhZ2VSZXF1ZXN0TWFuYWdlcil0aGlzLl9wYWdlUmVxdWVzdE1hbmFnZXI9U3lzLldlYkZvcm1zLlBhZ2VSZXF1ZXN0TWFuYWdlci5nZXRJbnN0YW5jZSgpO2lmKHRoaXMuX3BhZ2VSZXF1ZXN0TWFuYWdlciE9PW51bGwpe3RoaXMuX3BhZ2VSZXF1ZXN0TWFuYWdlci5hZGRfYmVnaW5SZXF1ZXN0KHRoaXMuX2JlZ2luUmVxdWVzdEhhbmRsZXJEZWxlZ2F0ZSk7dGhpcy5fcGFnZVJlcXVlc3RNYW5hZ2VyLmFkZF9lbmRSZXF1ZXN0KHRoaXMuX2VuZFJlcXVlc3RIYW5kbGVyRGVsZWdhdGUpfX19O1N5cy5VSS5fVXBkYXRlUHJvZ3Jlc3MucmVnaXN0ZXJDbGFzcygiU3lzLlVJLl9VcGRhdGVQcm9ncmVzcyIsU3lzLlVJLkNvbnRyb2wpOw0KVHlwZS5yZWdpc3Rlck5hbWVzcGFjZSgnU3lzLldlYkZvcm1zJyk7U3lzLldlYkZvcm1zLlJlcz17IlBSTV9Vbmtub3duVG9rZW4iOiJVbmtub3duIHRva2VuOiBcdTAwMjd7MH1cdTAwMjcuIiwiUFJNX01pc3NpbmdQYW5lbCI6IkNvdWxkIG5vdCBmaW5kIFVwZGF0ZVBhbmVsIHdpdGggSUQgXHUwMDI3ezB9XHUwMDI3LiBJZiBpdCBpcyBiZWluZyB1cGRhdGVkIGR5bmFtaWNhbGx5IHRoZW4gaXQgbXVzdCBiZSBpbnNpZGUgYW5vdGhlciBVcGRhdGVQYW5lbC4iLCJQUk1fU2VydmVyRXJyb3IiOiJBbiB1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3Qgb24gdGhlIHNlcnZlci4gVGhlIHN0YXR1cyBjb2RlIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciB3YXM6IHswfSIsIlBSTV9QYXJzZXJFcnJvciI6IlRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBjb3VsZCBub3QgYmUgcGFyc2VkLiBDb21tb24gY2F1c2VzIGZvciB0aGlzIGVycm9yIGFyZSB3aGVuIHRoZSByZXNwb25zZSBpcyBtb2RpZmllZCBieSBjYWxscyB0byBSZXNwb25zZS5Xcml0ZSgpLCByZXNwb25zZSBmaWx0ZXJzLCBIdHRwTW9kdWxlcywgb3Igc2VydmVyIHRyYWNlIGlzIGVuYWJsZWQuXHJcbkRldGFpbHM6IHswfSIsIlBSTV9UaW1lb3V0RXJyb3IiOiJUaGUgc2VydmVyIHJlcXVlc3QgdGltZWQgb3V0LiIsIlBSTV9QYXJzZXJFcnJvckRldGFpbHMiOiJFcnJvciBwYXJzaW5nIG5lYXIgXHUwMDI3ezB9XHUwMDI3LiIsIlBSTV9DYW5ub3RSZWdpc3RlclR3aWNlIjoiVGhlIFBhZ2VSZXF1ZXN0TWFuYWdlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgbW9yZSB0aGFuIG9uY2UuIn07">
  </script>
  <script class="sf-hidden">
    //<![CDATA[
    function WebForm_OnSubmit() {
      if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
      return true;
    }
    //]]>
  </script>
  <div class="aspNetHidden">
  </div>
  <script class="sf-hidden">
    //<![CDATA[
    Sys.WebForms.PageRequestManager._initialize('ctl00$ScriptManager', 'aspnetForm', [], [], [], 90, 'ctl00');
    //]]>
  </script>
  <div class="headerBox">
    <header class="headerPagamenti">
      <div class="navbar-top">
        <div class="container-pagamenti">
          <div id="languageBoxIt">
            <ul class="langselector">
              <li class="lifirst">
                <a href="https://pagamenti.aruba.it/home/default.aspx?Op=ChangeLanguage" id="lnkLanguage1" hreflang="it" class="first">Italiano <b class="caret"></b></a>
                <ul>
                  <li><a id="lnkLanguage2" hreflang="en" href="javascript:__doPostBack('ctl00$lnkLanguage2','')">English</a></li>
                  <li><a id="lnkLanguage3" hreflang="es" href="javascript:__doPostBack('ctl00$lnkLanguage3','')">Español</a></li>
                </ul>
              </li>
            </ul>
          </div>
          <div class="navbar-right">
            <ul class="nav navbar-nav">
              <li class="borderListSeparator">
                <a href="http://webmail.aruba.it/" target="_blank">
<span id="Label1">webmail</span></a>
              </li>
              <li class="borderListSeparator">
                <a href="https://managehosting.aruba.it/Rinnovi/InsDatiRinnovo.asp?Lang=IT" target="_blank"><span id="Label2">rinnovi</span></a>
              </li>
              <li class="borderListSeparator">
                <a id="areaClientiOrangeBtn" href="https://managehosting.aruba.it/AreaUtenti.asp?Lang=IT" target="_blank"><span id="Label4">area clienti</span></a>
              </li>
              <li>
                <a id="assistenzaGreen" href="http://assistenza.aruba.it/" target="_blank"><span id="Label5">assistenza h24</span></a>
              </li>
            </ul>
          </div>
        </div>
      </div>
      <nav class="navbar-default" role="navigation">
        <div class="container-pagamenti">
          <div class="row">
            <div class="col-md-3">
              <a title="Home" href="https://pagamenti.aruba.it/">
<img class="navbar-brand" alt="logo" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA0NDQuOCAxMjQuNSIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDQ0LjggMTI0LjUiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6I0UzNTIwNTt9Cgkuc3Qxe2ZpbGw6I0ZGRkZGRjt9Cjwvc3R5bGU+CgkJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJtNTUuNyA0NS45Yy0wLjUgMC0xIDAtMS40IDAuMS0zLjkgMC41LTcuMiAyLjctOSA2LjEtMC44LTAuMi0xLjYtMC40LTIuNS0wLjctMy42LTAuOS02LjYtMS40LTkuMS0xLjZoLTEuNWMtMi43IDAtNS42IDAuNS04LjUgMS41LTIuMyAwLjgtNC4zIDEuNi02IDIuMy0yLjMgMS00LjQgMi4yLTYuMiAzLjYtMi42IDItNC41IDQuOS02LjEgOC44LTAuOSAyLjMtMS43IDQuMy0yLjUgNi4yLTEuMSAyLjctMS44IDUuOS0yLjIgOS4zLTAuMyAyLjctMC41IDUuMi0wLjYgNy41LTAuMiAyLjUtMC4yIDUuMSAwIDcuNiAwLjIgMy45IDEuMyA3LjMgMy4zIDEwLjNsMy4xIDQuNmMxLjcgMi42IDQuMyA1IDcuNiA3LjIgMy41IDIuMyA2LjUgMy43IDkuNSA0LjIgMS42IDAuMyAzLjggMC42IDYuNSAxIDIuNSAwLjQgNC42IDAuNSA2LjUgMC41IDAuNyAwIDEuNCAwIDIuMS0wLjEgMy0wLjIgNi0xLjIgOS4xLTIuOCAwLjYtMC4zIDEuMS0wLjYgMS43LTEgMi4yIDIuNiA1LjIgNCA4LjYgNCA0LjEgMCA5LjQtMi41IDEwLjgtOS42IDAuNC0yLjEgMC41LTUgMC40LTkuNy0wLjEtMy42LTAuMy0xMC42LTAuNC0yMC43LTAuMS0xMC40LTAuMy0xNy41LTAuNi0yMS4zLTAuNC01LTAuOS04LTEuOS0xMC4zLTItNC4zLTYuMS03LTEwLjctN3ptLTI0LjggMjguOGg0LjNjMS4xIDAgMi40IDAuMSAzLjYgMC4zIDEuMiAxLjEgMS44IDEuOCAyIDIgMC4xIDAuMiAwLjcgMS4xIDIgNC4xIDAuOCAxLjggMS4zIDMuNSAxLjMgNC45IDAuMSAxLjYtMC4xIDMuMS0wLjUgNC42cy0xLjEgMy0yLjEgNC42Yy0xLjIgMS45LTIuMiAyLjktMi44IDMuNC0wLjcgMC42LTEuNyAxLjEtMi43IDEuNC0wLjMgMC4xLTAuNiAwLjEtMC45IDAuMS0wLjIgMC0wLjUgMC0wLjctMC4xLTEuOC0wLjQtMy41LTAuOS01LjItMS42LTEuNS0wLjYtMi4yLTEtMi40LTEuMmwtMi43LTIuMWMtMC4xLTEuNC0wLjItMy42LTAuMi03LjIgMC0yLjkgMC40LTUuNSAxLjItNy44IDAuNS0xLjMgMS41LTIuNyAzLjEtNC4xIDEuMS0wLjUgMi0wLjkgMi43LTEuM3ptLTYuNyAyMS41eiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0ibTgwLjMgNDguMWMtMiAwLTMuOSAwLjUtNS43IDEuNS0zLjUgMi01LjkgNS44LTYuMyAxMGwtMC4yIDEuNnYwLjggMSAwLjNjMS4yIDI5IDIgNDYuNSAyLjEgNDguNyAwLjUgNi45IDMuOCA5LjkgNi42IDExLjMgMS42IDAuOCAzLjMgMS4yIDUgMS4yIDMuMyAwIDYuNS0xLjUgOC43LTQuMiAyLjUtMyAzLjItNi44IDMtMTYuOC0wLjEtNi4xLTAuMi0xMi43LTAuMi0xOS41IDAtNC4yIDAtNi43LTAuMS04LjUgMC42LTAuOCAxLjMtMS42IDIuMi0yLjMgMC42LTAuNSAxLjQtMC44IDIuNS0xIDAuOC0wLjIgMS42LTAuMyAyLjItMC4zIDAuNCAwIDAuNiAwIDAuOCAwLjEgMC4zIDAuMSAwLjQgMC4xIDAuNSAwLjIgMS45IDEuOCAzLjMgMi45IDQuNiAzLjYgMC4zIDAuMiAwLjggMC41IDEuNyAxLjEgMi41IDEuOCA1LjIgMi43IDcuOCAyLjcgMy41IDAgNi44LTEuNiA5LjEtNC41IDIuMS0yLjcgMy4xLTYuMSAyLjYtOS42LTAuNS0zLjctMi43LTYuOS02LjEtOS0wLjQtMC4yLTEuMi0wLjgtMi43LTItMi43LTIuMi01LjctMy44LTktNC43LTIuNS0wLjctNS40LTEuMS04LjYtMS4zaC0xLjdjLTIuOSAwLTUuOCAwLjQtOC43IDEuMS0wLjkgMC4yLTEuOCAwLjUtMi42IDAuOC0yLjEtMS41LTQuNi0yLjMtNy41LTIuM3oiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Im0xNDUuMyA0MS45Yy0yLjcgMC01LjQgMC45LTguMSAyLjdsLTAuMyAwLjJjLTEuMSAwLjgtMiAxLjgtMi42IDNsLTAuMiAwLjNjLTQuMyA4LjYtNi41IDE0LjEtNy40IDE3LjgtMC43IDMuMi0xLjMgNi42LTEuNyAxMC4xLTAuNCAzLjYtMC41IDYuOS0wLjQgOS44IDAuMiA0LjIgMS41IDguMiA0IDExLjkgMi4yIDMuMyA0LjcgNS45IDcuNiA3LjggMi4yIDEuNSA0LjYgMi43IDYuOSAzLjggMy4xIDEuNCA2LjIgMi4xIDkuMyAyLjFoN2MzLjggMCA2LjYtMC4zIDguOC0wLjggMi41LTAuNiA1LjMtMiA5LTQuMyA0LjQtMi44IDcuNS02LjIgOS4zLTEwLjIgMS4zLTIuOSAyLjMtNiAyLjktOS4xczEtNi44IDEtMTAuOGMwLTQuNi0xLjEtMTAtMy40LTE2LjEtMi44LTcuNy01LjUtMTIuNC0xMC43LTE0LTEuMy0wLjQtMi42LTAuNi00LTAuNi0yLjQgMC00LjggMC42LTcgMS45LTIuMyAxLjMtNC4xIDMuMy01LjEgNS42cy0xLjYgNS45IDAuNCAxMC42YzAuOSAyLjEgMi4xIDQuNiAzLjQgNy4zIDAuNiAxLjMgMSAyLjkgMSA0LjcgMCAyLjYtMC4yIDQuOS0wLjYgNi42LTAuNCAyLTAuOCAyLjctMC44IDIuNyAwIDAuMS0wLjUgMC44LTEuOSAyLjEtMC41IDAuNS0xLjEgMC44LTEuOSAxLTEuNSAwLjQtMi44IDAuNi00IDAuNi0xLjEgMC0yLjItMC4yLTMuMy0wLjUtMC45LTAuMy0xLjctMC43LTIuNC0xLjItMC42LTAuNS0xLTAuOS0xLjEtMS0wLjEtMC4zLTAuMy0xLjQtMC41LTMuNS0wLjItMi4zIDAtNC40IDAuNS02LjMgMC43LTIuNiAxLjYtNS4zIDIuNy04LjEgMS4zLTMuMSAxLjktNC4yIDItNC40IDEuNy0yLjMgMi43LTQuOCAzLTcuMyAwLjQtMy0wLjEtNS44LTEuNS04LjMtMS45LTMuOS01LjctNi4xLTkuOS02LjF6Ii8+CgkJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0ibTIwMi43IDBjLTIuNyAwLTUuMiAwLjktNy4yIDIuNi0zIDIuNi0zLjUgNS43LTMuOSA5LjQtMC4zIDMuOS0wLjUgMTEuMS0wLjYgMjIuNi0wLjIgMTkuNi0wLjQgMjYuNC0wLjYgMjguNy0wLjMgMy43LTAuNSAxMC45LTAuNiAyMS4zLTAuMSAxMC4xLTAuMyAxNy4xLTAuNCAyMC43LTAuMiA0LjctMC4xIDcuNiAwLjQgOS43IDEuNCA3IDYuNyA5LjYgMTAuOCA5LjYgMy4zIDAgNi40LTEuNSA4LjYtNCAwLjYgMC4zIDEuMSAwLjcgMS43IDEgMy4xIDEuNiA2LjEgMi42IDkuMSAyLjggMC43IDAuMSAxLjQgMC4xIDIuMSAwLjEgMS45IDAgNC0wLjIgNi41LTAuNSAyLjgtMC40IDUtMC43IDYuNS0xIDIuOS0wLjUgNS45LTEuOCA5LjUtNC4xIDMuMy0yLjIgNS45LTQuNyA3LjYtNy4ybDMuMS00LjZjMi0zIDMuMS02LjQgMy4zLTEwLjMgMC4xLTIuNSAwLjEtNS4xIDAtNy42LTAuMS0yLjMtMC4zLTQuOC0wLjYtNy41LTAuMy0zLjQtMS4xLTYuNi0yLjItOS4zLTAuOC0xLjktMS42LTQtMi41LTYuMi0xLjUtNC0zLjUtNi45LTYuMS04LjgtMS44LTEuNC0zLjktMi42LTYuMi0zLjYtMS43LTAuNy0zLjctMS41LTYtMi4zLTIuOS0xLTUuNy0xLjUtOC41LTEuNWgtMS40Yy0yLjUgMC4yLTUuNSAwLjctOS4xIDEuNi0wLjYgMC4yLTEuMiAwLjMtMS44IDAuNSAwLTMuNCAwLjEtNy41IDAuMi0xMi44IDAuMy0xOS45IDAuNi0yMy41IDAuNy0yNC4xIDAuNi00LjktMC45LTExLjEtNy0xMy43LTEuOS0xLjEtMy43LTEuNS01LjQtMS41em0xNy4xIDc0LjhjMS4zLTAuMiAyLjUtMC4zIDMuNi0wLjNoNC4zYzAuOCAwLjQgMS43IDAuOSAyLjcgMS4zIDEuNiAxLjQgMi43IDIuOCAzLjEgNC4xIDAuOCAyLjMgMS4yIDQuOSAxLjIgNy44IDAgMy41LTAuMSA1LjgtMC4yIDcuMmwtMi43IDIuMWMtMC4yIDAuMi0wLjkgMC42LTIuNCAxLjItMS43IDAuNi0zLjQgMS4yLTUuMiAxLjYtMC4yIDAuMS0wLjUgMC4xLTAuNyAwLjEtMC4zIDAtMC42IDAtMC45LTAuMS0xLTAuMy0xLjktMC44LTIuOC0xLjQtMC42LTAuNS0xLjYtMS41LTIuOC0zLjQtMS0xLjYtMS43LTMuMi0yLjEtNC42LTAuNC0xLjUtMC41LTMtMC41LTQuNiAwLjEtMS40IDAuNS0zLjEgMS4zLTQuOSAxLjMtMi45IDEuOS0zLjkgMi00LjEgMC40LTAuMiAwLjktMC45IDIuMS0yeiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0ibTMxNC4xIDQ1LjljLTAuNSAwLTEgMC0xLjUgMC4xLTMuOSAwLjUtNy4xIDIuNy05IDYtMC44LTAuMi0xLjYtMC40LTIuNS0wLjctMy42LTAuOS02LjYtMS40LTkuMS0xLjZoLTEuNWMtMi44IDAtNS42IDAuNS04LjUgMS41LTIuMyAwLjgtNC40IDEuNi02IDIuMy0yLjMgMS00LjQgMi4yLTYuMiAzLjYtMi42IDItNC41IDQuOS02LjEgOC44LTAuOSAyLjMtMS43IDQuNC0yLjUgNi4yLTEuMSAyLjctMS44IDUuOS0yLjIgOS4zLTAuMyAyLjctMC41IDUuMi0wLjYgNy41LTAuMSAyLjUtMC4xIDUuMSAwIDcuNiAwLjIgMy45IDEuMyA3LjMgMy4zIDEwLjNsMy4xIDQuNmMxLjcgMi42IDQuMyA1IDcuNiA3LjIgMy41IDIuMyA2LjUgMy43IDkuNSA0LjEgMS42IDAuMyAzLjggMC42IDYuNSAxIDIuNSAwLjQgNC42IDAuNSA2LjUgMC41IDAuNyAwIDEuNCAwIDIuMS0wLjEgMy0wLjIgNi0xLjIgOS4xLTIuOCAwLjYtMC4zIDEuMS0wLjYgMS43LTEgMi4yIDIuNiA1LjIgNCA4LjYgNCA0LjEgMCA5LjQtMi41IDEwLjgtOS41IDAuNC0yLjEgMC41LTUgMC40LTkuNy0wLjEtMy42LTAuMi0xMC40LTAuNC0yMC43LTAuMS0xMC4zLTAuMy0xNy41LTAuNi0yMS4zLTAuNC01LTAuOS04LTEuOS0xMC4zLTEuOS00LjItNi02LjktMTAuNi02Ljl6bS0yNC44IDI4LjhoNC4zYzEuMSAwIDIuNCAwLjEgMy42IDAuMyAxLjIgMS4xIDEuOCAxLjggMiAyIDAuMSAwLjIgMC43IDEuMSAyIDQuMSAwLjggMS44IDEuMyAzLjUgMS4zIDQuOSAwLjEgMS42LTAuMSAzLjEtMC41IDQuNnMtMS4xIDMtMi4xIDQuNmMtMS4yIDEuOS0yLjIgMi45LTIuOCAzLjQtMC44IDAuNy0xLjggMS4xLTIuOCAxLjQtMC4zIDAuMS0wLjYgMC4xLTAuOSAwLjEtMC4yIDAtMC41IDAtMC43LTAuMS0xLjgtMC40LTMuNS0wLjktNS4yLTEuNi0xLjUtMC42LTIuMi0xLTIuNC0xLjJsLTIuNy0yLjFjLTAuMS0xLjQtMC4yLTMuNi0wLjItNy4yIDAtMi45IDAuNC01LjUgMS4yLTcuOCAwLjUtMS4zIDEuNS0yLjcgMy4xLTQuMSAxLjItMC41IDIuMS0wLjkgMi44LTEuM3oiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Im0zNDEuMyA5NC41Yy0wLjkgMC0xLjkgMC4yLTIuOCAwLjVsLTIgMC44Yy02LjUgMi40LTguNyA2LjYtOS40IDkuNy0wLjUgMi4yLTAuNiA0LjQtMC4zIDYuNSAwLjQgMi41IDEuOSA3LjEgOC4yIDkuNyAyLjEgMC45IDQuMiAxLjMgNi4zIDEuMyAxLjUgMCAzLTAuMiA0LjQtMC43IDIuOC0wLjkgNS4yLTIuNSA3LTQuNyAyLjYtMy4xIDMuNS03LjEgMi41LTExLjEtMC44LTMuMi0yLjctNi01LjQtNy45LTAuOS0wLjYtMS43LTEuMi0yLjUtMS42LTAuNC0wLjQtMC44LTAuOC0xLjMtMS4yLTEuNS0wLjgtMy4xLTEuMy00LjctMS4zeiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0ibTM2OCAxOS4zYy0zIDAtNS44IDAuOC04LjQgMi40LTIuNyAxLjctNC43IDMuOS01LjggNi42LTAuOCAxLjgtMS4yIDMuNy0xLjUgNS44LTAuMiAxLjUtMC4yIDIuOS0wLjIgNC4zIDAgMi41IDAuNSA0LjggMS42IDYuOSAwLjYgMS4xIDEuMiAyLjIgMS45IDMuMyAwLjcgMSAxLjYgMi4yIDIuOCAzLjdsMC4yIDAuM2MwLjEgMC4xIDAuMiAwLjMgMC4zIDAuNC0wLjIgMS4xLTAuMyAyLjMtMC4zIDMuNSAwIDIuMSAwLjMgNC4xIDAuOSA2IDIgMjQuMiAzIDM3LjUgMy4yIDM5LjEgMC41IDYuMyA0LjIgOS4zIDYuMyAxMC41IDIgMS4xIDQgMS43IDYuMSAxLjcgMiAwIDQtMC42IDUuOC0xLjYgMS45LTEuMSA1LjEtMy45IDUuNy05LjcgMC4xLTEuMyAwLjMtMi44LTEuNy0yNC44LTEuNy0xOC45LTIuMi0yMi45LTIuNC0yNC4yLTAuMi0xLTAuNC0yLTAuOC0yLjkgMC44LTEuMSAxLjUtMi40IDIuMi0zLjkgMS41LTMuNSAyLjItNi45IDEuOS0xMC4yLTAuMi0zLjItMS4xLTYuMS0yLjUtOC43LTEuOS0zLjQtNC44LTUuOS04LjMtNy4zLTIuNS0wLjgtNC44LTEuMi03LTEuMnoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Im00MTYgNi40Yy0zLjMgMC02LjQgMS40LTguOSAzLjktMy4yIDMuMi00IDcuMy0zLjggMTguNCAwLjEgMy45IDAuMiA3LjkgMC4zIDExLjktMTEuMSAxLTEyLjMgMS42LTE0IDIuNy00IDIuMy02LjIgNi4xLTYuMiAxMC4zIDAgMi40IDAuOCA0LjcgMi4zIDYuNiAxLjMgMS43IDMuOSAzLjggOC4zIDQuMyAwLjcgMC4xIDEuNCAwLjEgMi4zIDAuMSAxLjcgMCA0LTAuMSA3LjItMC40IDAuMSAzLjkgMC4xIDguOSAwLjIgMTQuOSAwLjMgMTguNCAwLjIgMjQuNSAwLjEgMjYuNC0wLjMgNSAwLjMgOC41IDEuOSAxMS4yIDIuMyA0IDYgNi4yIDEwLjEgNi4yIDMgMCA3LjItMS4yIDEwLjUtNi44IDEuOS0zLjMgMi41LTcuOCAyLjItMTYuNy0wLjItNi4xLTAuMy0xNC45LTAuMi0yNi4xIDAtNC4zIDAuMS03LjkgMC4xLTEwLjZoMWM1LjQgMCA5LjYtMS42IDEyLjMtNC43IDQuNi01LjIgMy41LTExLjMgMC41LTE1LTEuNy0yLTQuOS00LjUtMTAuNC00LjVoLTAuN2MtMC44IDAtMS43IDAuMS0yLjcgMC4xIDAtMC44IDAtMS43LTAuMS0yLjctMC4xLTcuNi0wLjMtMTIuNy0wLjctMTYtMC4yLTEuOC0wLjUtNC0xLjMtNi4yLTEuNS00LTQuNi02LjYtOC41LTcuMS0wLjYtMC4yLTEuMi0wLjItMS44LTAuMnoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Im01OC4xIDExNi41Yy0wLjkgMC0yLjMtMC40LTMuMy0yLjQtMC40LTAuOC0wLjgtMi41LTAuOS04LjhsLTQuMyA0LjdjLTEuNiAxLjgtMy41IDMuMi01LjYgNC4zcy00LjEgMS44LTYgMS45Yy0xLjggMC4xLTQgMC02LjgtMC40LTIuNy0wLjQtNC44LTAuNy02LjQtMS0xLjgtMC4zLTMuOC0xLjItNi4zLTIuOS0yLjUtMS42LTQuMy0zLjMtNS40LTVsLTMuMS00LjZjLTEuMi0xLjctMS44LTMuOS0yLTYuMy0wLjEtMi4yLTAuMS00LjUgMC02LjdzMC4zLTQuNiAwLjYtNy4yYzAuMy0yLjcgMC44LTUuMSAxLjYtNy4xIDAuOC0xLjkgMS42LTQgMi41LTYuMyAxLTIuNiAyLjItNC40IDMuNS01LjRzMi43LTEuOCA0LjQtMi41YzEuNi0wLjcgMy41LTEuNCA1LjYtMi4xIDIuNC0wLjggNC42LTEuMiA2LjctMSAyIDAuMSA0LjYgMC42IDcuNyAxLjQgMy4yIDAuOCA1LjcgMS43IDcuNiAyLjYgMS4yIDAuNiAyLjQgMS40IDMuMyAyLjMtMC4xLTEuMi0wLjItMi4yLTAuMy0zLjEtMC4xLTEuNiAwLTMuMSAwLjUtNC4zIDAuNi0xLjUgMS44LTIuNSAzLjMtMi43IDEuNy0wLjIgMy4xIDAuNyAzLjkgMi40IDAuNiAxLjMgMSAzLjggMS4zIDcuNiAwLjMgMy42IDAuNSAxMC42IDAuNiAyMC44czAuMyAxNy4yIDAuNCAyMC45YzAuMSAzLjkgMC4xIDYuNC0wLjIgNy44LTAuNSAyLjctMiAzLjEtMi45IDMuMXptLTQwLjYtMzljLTEuMSAzLjEtMS42IDYuNy0xLjYgMTAuNCAwIDMuOSAwLjEgNi45IDAuNCA5IDAuMiAxLjcgMC44IDIuOSAxLjcgMy41IDEuMyAwLjkgMi42IDEuOSAzLjkgMi45IDEuMSAwLjkgMi43IDEuNyA0LjYgMi41IDIgMC43IDQgMS40IDYuMSAxLjkgMS45IDAuNCAzLjggMC40IDUuOC0wLjJzMy44LTEuNSA1LjQtMi44IDMuMi0zLjEgNC42LTUuNCAyLjUtNC42IDMuMS02LjkgMC44LTQuNiAwLjctNy0wLjgtNS0yLTcuN2MtMS41LTMuNS0yLjQtNS0yLjktNS42LTAuNy0wLjktMS43LTItMy4xLTMuMi0xLjItMS4xLTIuNS0xLjctNC0xLjktMS43LTAuMi0zLjQtMC40LTUtMC40aC00LjhjLTEuNSAwLTIuMyAwLjMtMi42IDAuNS0wLjggMC41LTIuMSAxLjItMy45IDItMy4yIDIuNi01LjMgNS41LTYuNCA4LjR6Ii8+CgkJCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJtODEuOCAxMTYuNWMtMC41IDAtMC45LTAuMS0xLjQtMC4zLTEuMy0wLjYtMi0yLjItMi4yLTQuNy0wLjEtMS45LTAuOC0xNy41LTIuMS00OC41di0xbDAuMi0xLjZjMC4yLTEuNiAxLTMuMSAyLjQtMy44IDAuNi0wLjMgMS4xLTAuNSAxLjctMC41IDEuMiAwIDIuNSAwLjQgMy4xIDEuNSAwLjggMS43IDAuNyA0LjEgMC45IDQuOCAwLjMtMC4zIDAuNi0wLjcgMS0xLjEgMS43LTEuOSA0LTMuMiA2LjktMy45IDIuNy0wLjcgNS40LTAuOSA4LjEtMC44IDIuNiAwLjEgNSAwLjUgNyAxIDIuMiAwLjYgNC4yIDEuNyA1LjkgMy4xIDEuNCAxLjIgMi42IDIuMSAzLjUgMi42IDEuNCAwLjkgMi4yIDIgMi40IDMuNCAwLjIgMS4zLTAuMSAyLjUtMC45IDMuNS0xIDEuMy0yLjEgMS41LTIuOSAxLjUtMSAwLTItMC40LTMuMi0xLjItMC45LTAuNi0xLjYtMS4xLTIuMi0xLjUtMC43LTAuNC0xLjgtMS4zLTMuMy0yLjctMS4yLTEuMS0yLjYtMS44LTQuMy0yLjFzLTMuOC0wLjMtNi4xIDAuMi00LjMgMS4zLTUuOSAyLjYtMyAyLjgtNC4xIDQuNGMtMC44IDEuMy0xLjEgMS45LTEuMyAyLjEgMC4xIDEuMiAwLjIgMy44IDAuMiAxMC41IDAgNi45IDAuMSAxMy42IDAuMiAxOS43IDAuMiA5LjItMC41IDEwLjgtMS4xIDExLjUtMC43IDAuOS0xLjUgMS4zLTIuNSAxLjN6Ii8+CgkJCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJtMTU5LjUgMTAzLjRoLTdjLTIgMC00LTAuNS02LjEtMS40LTItMC45LTMuOS0xLjktNS43LTMuMS0xLjktMS4zLTMuNy0zLjItNS40LTUuNS0xLjctMi41LTIuNS01LjEtMi42LTcuNy0wLjEtMi41IDAtNS40IDAuNC04LjZzMC45LTYuMyAxLjUtOS4yYzAuNy0zIDIuOS04LjIgNi43LTE2bDAuMi0wLjMgMC4zLTAuMmMxLjMtMC45IDIuNC0xLjMgMy41LTEuMyAxLjMgMCAyLjQgMC43IDMgMS44IDAuNSAxIDAuNyAyLjEgMC42IDMuNC0wLjIgMS4yLTAuNyAyLjUtMS42IDMuNy0wLjUgMC43LTEuNCAyLjItMi45IDYtMS4yIDMuMS0yLjMgNi4yLTMgOS4xLTAuNyAyLjgtMSA1LjgtMC43IDguOSAwLjMgMy45IDAuOSA1LjcgMS40IDYuNSAwLjcgMS4yIDEuOCAyLjUgMy4yIDMuNiAxLjUgMS4yIDMuMiAyLjEgNSAyLjYgMy43IDEuMSA3LjUgMS4xIDExLjcgMCAyLTAuNSAzLjgtMS41IDUuMy0yLjlzMi43LTIuNyAzLjQtMy45IDEuMy0yLjkgMS43LTUuMWMwLjUtMi4zIDAuNy01LjEgMC43LTguMyAwLTMuMS0wLjYtNS45LTEuOC04LjMtMS4zLTIuNi0yLjQtNS0zLjMtNy0xLjctMy45IDAuMy01LjUgMS4yLTYgMS42LTAuOSAzLjMtMS4xIDQuOC0wLjYgMS4zIDAuNCAyLjggMS44IDUuNSA5LjEgMS45IDUuMyAyLjkgOS44IDIuOSAxMy40IDAgMy41LTAuMyA2LjYtMC44IDkuMnMtMS4zIDUuMS0yLjQgNy41Yy0xLjEgMi41LTMuMiA0LjgtNi4zIDYuNy0yLjkgMS45LTUuMSAzLTYuNyAzLjQtMS40IDAuMy0zLjYgMC41LTYuNyAwLjV6Ii8+CgkJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0ibTIwMC42IDExNi40Yy0wLjkgMC0yLjUtMC40LTMtMy4xLTAuMy0xLjQtMC40LTQtMC4yLTcuOCAwLjEtMy43IDAuMy0xMC43IDAuNC0yMC45czAuMy0xNy4yIDAuNi0yMC44YzAuMy0zLjUgMC40LTEzLjQgMC42LTI5LjIgMC4yLTI0LjYgMC45LTI1LjIgMS42LTI1LjkgMC43LTAuNiAyLjEtMS4yIDQuMi0wLjIgMS4zIDAuNiAyLjcgMS45IDIuMyA1LjQtMC4yIDItMC41IDEwLjQtMC44IDI0LjlzLTAuMyAyMy4yLTAuMiAyNS45YzEuMi0xLjMgMi41LTIuMyA0LjItMy4xIDEuOS0wLjkgNC40LTEuOCA3LjYtMi42IDMuMS0wLjggNS43LTEuMiA3LjctMS40IDIuMS0wLjEgNC40IDAuMiA2LjcgMSAyLjIgMC44IDQuMSAxLjUgNS42IDIuMSAxLjcgMC43IDMuMSAxLjUgNC40IDIuNSAxLjQgMS4xIDIuNSAyLjkgMy41IDUuNCAwLjkgMi4zIDEuNyA0LjQgMi41IDYuMyAwLjggMiAxLjQgNC40IDEuNiA3LjEgMC4zIDIuNiAwLjUgNSAwLjYgNy4yczAuMSA0LjUgMCA2LjdjLTAuMSAyLjQtMC44IDQuNi0yIDYuM2wtMy4xIDQuNmMtMS4xIDEuNy0yLjkgMy40LTUuNCA1LTIuNSAxLjctNC42IDIuNi02LjMgMi45LTEuNSAwLjMtMy42IDAuNi02LjQgMXMtNS4xIDAuNS02LjggMC40Yy0xLjktMC4xLTMuOS0wLjgtNi0xLjlzLTMuOS0yLjYtNS42LTQuM2wtNC4zLTQuN2MtMC4xIDYuMy0wLjUgOC0wLjkgOC44LTAuOCAyLTIuMSAyLjQtMy4xIDIuNHptMjIuOC00OS44Yy0xLjYgMC0zLjIgMC4xLTUgMC40LTEuNSAwLjItMi44IDAuOC00IDEuOS0xLjMgMS4yLTIuNCAyLjMtMy4xIDMuMi0wLjUgMC42LTEuNCAyLjEtMi45IDUuNi0xLjIgMi44LTEuOSA1LjQtMiA3LjctMC4xIDIuNCAwLjEgNC44IDAuNyA3IDAuNiAyLjMgMS42IDQuNiAzLjEgNi45IDEuNCAyLjMgMyA0LjEgNC42IDUuNHMzLjUgMi4yIDUuNCAyLjggMy44IDAuNiA1LjggMC4yYzIuMS0wLjUgNC4yLTEuMSA2LjEtMS45IDEuOS0wLjcgMy40LTEuNSA0LjYtMi41IDEuMy0xIDIuNi0yIDMuOS0yLjkgMC45LTAuNiAxLjUtMS44IDEuNy0zLjUgMC4yLTIuMSAwLjQtNS4yIDAuNC05cy0wLjYtNy4zLTEuNi0xMC40Yy0xLTMtMy4yLTUuOC02LjQtOC40LTEuOC0wLjgtMy4xLTEuNC0zLjktMi0wLjQtMC4yLTEuMS0wLjUtMi42LTAuNWgtNC44eiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0ibTMxNi41IDExNi41Yy0wLjkgMC0yLjMtMC40LTMuMy0yLjQtMC40LTAuOC0wLjgtMi41LTAuOS04LjhsLTQuMyA0LjdjLTEuNiAxLjgtMy41IDMuMi01LjYgNC4zcy00LjEgMS44LTYgMS45Yy0xLjggMC4xLTQgMC02LjgtMC40LTIuNy0wLjQtNC44LTAuNy02LjQtMS0xLjgtMC4zLTMuOC0xLjItNi4zLTIuOS0yLjUtMS42LTQuMy0zLjMtNS40LTVsLTMuMS00LjZjLTEuMi0xLjgtMS44LTMuOS0yLTYuMy0wLjEtMi4yLTAuMS00LjUgMC02LjdzMC4zLTQuNiAwLjYtNy4yYzAuMy0yLjcgMC44LTUuMSAxLjYtNy4xIDAuOC0xLjkgMS42LTQgMi41LTYuMyAxLTIuNiAyLjItNC40IDMuNS01LjRzMi43LTEuOCA0LjQtMi41YzEuNi0wLjcgMy41LTEuNCA1LjYtMi4xIDIuNC0wLjggNC42LTEuMiA2LjctMSAyIDAuMSA0LjYgMC42IDcuNyAxLjQgMy4yIDAuOCA1LjcgMS43IDcuNiAyLjYgMS4yIDAuNiAyLjQgMS40IDMuMyAyLjMtMC4xLTEuMi0wLjItMi4yLTAuMy0zLjEtMC4xLTEuNiAwLTMuMSAwLjUtNC4zIDAuNi0xLjUgMS44LTIuNSAzLjMtMi43IDEuNy0wLjIgMy4xIDAuNyAzLjkgMi40IDAuNiAxLjMgMSAzLjggMS4zIDcuNiAwLjMgMy42IDAuNSAxMC42IDAuNiAyMC44IDAuMSAxMC40IDAuMyAxNy4yIDAuNCAyMC45IDAuMSAzLjkgMC4xIDYuNC0wLjIgNy44LTAuNCAyLjctMiAzLjEtMi45IDMuMXptLTQuMy01MC4xem0tMzYuMyAxMS4xYy0xLjEgMy4xLTEuNiA2LjctMS42IDEwLjQgMCAzLjkgMC4xIDYuOSAwLjQgOSAwLjIgMS43IDAuOCAyLjkgMS43IDMuNSAxLjMgMC45IDIuNiAxLjkgMy45IDIuOSAxLjEgMC45IDIuNyAxLjcgNC42IDIuNSAyIDAuNyA0IDEuNCA2LjEgMS45IDEuOSAwLjQgMy44IDAuNCA1LjgtMC4yczMuOC0xLjUgNS40LTIuOCAzLjItMy4xIDQuNi01LjQgMi41LTQuNiAzLjEtNi45IDAuOC00LjYgMC43LTctMC44LTUtMi03LjdjLTEuNS0zLjUtMi40LTUtMi45LTUuNi0wLjctMC45LTEuNy0yLTMuMS0zLjItMS4yLTEuMS0yLjUtMS43LTQtMS45LTEuNy0wLjItMy40LTAuNC01LTAuNGgtNC44Yy0xLjUgMC0yLjMgMC4zLTIuNiAwLjUtMC44IDAuNS0yLjEgMS4yLTMuOSAyLTMuMiAyLjYtNS4zIDUuNS02LjQgOC40eiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0ibTM0MS4zIDExNWMtMSAwLTIuMS0wLjItMy4yLTAuNy0yLTAuOS0zLjItMi0zLjQtMy41LTAuMi0xLjEtMC4xLTIuMyAwLjItMy42IDAuNC0xLjcgMS44LTMgNC40LTRsMi0wLjh2MS4xYzAuNCAwIDAuOCAwLjEgMS4yIDAuMiAwLjcgMC4yIDEuNSAwLjYgMi42IDEuNCAxLjIgMC45IDIgMiAyLjMgMy4zIDAuNCAxLjUgMC4xIDIuOS0wLjkgNC0wLjggMS0yIDEuNy0zLjQgMi4yLTAuNSAwLjMtMS4xIDAuNC0xLjggMC40eiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0ibTM3NSAxMDUuOGMtMC42IDAtMS4zLTAuMi0yLjItMC42LTEuMy0wLjgtMi4xLTIuMi0yLjMtNC4yLTAuMS0xLjUtMS4yLTE0LjktMy4yLTQwLTAuNS0xLjQtMC44LTIuOC0wLjgtNC40IDAtMS44IDAuNC0zLjEgMS4xLTQgMC42LTAuNyAxLjYtMS41IDMuNS0xLjUgMS4xIDAgMi45IDAuNSAzLjQgMy44IDAuMyAxLjcgMSA5LjUgMi4zIDIzLjcgMS43IDE5IDEuOCAyMi40IDEuNyAyMy4zLTAuMiAxLjgtMC44IDMtMS45IDMuNi0wLjMgMC4xLTAuOSAwLjMtMS42IDAuM3ptLTUuOC01Ny4xYy0xLjIgMC0yLjYtMC4zLTQtMC45bC0wLjQtMC4xLTAuMi0wLjNjLTEtMS4zLTEuOC0yLjQtMi40LTMuMi0wLjUtMC44LTEtMS42LTEuNC0yLjUtMC41LTEtMC43LTIuMS0wLjctMy40IDAtMS4xIDAuMS0yLjIgMC4yLTMuNCAwLjEtMS4zIDAuNC0yLjUgMC45LTMuNSAwLjUtMS4yIDEuNC0yLjIgMi43LTMgMi40LTEuNSA1LjEtMS41IDguNC0wLjMgMS44IDAuNiAzLjEgMS44IDQuMSAzLjYgMC45IDEuNiAxLjQgMy40IDEuNSA1LjRzLTAuMyA0LjItMS4zIDYuNWMtMS4xIDIuNS0yLjMgMy45LTMuNyA0LjQtMS4zIDAuNC0yLjUgMC43LTMuNyAwLjd6bS0wLjgtNy40YzAuNyAwLjMgMS4yIDAuMiAxLjcgMCAwIDAgMC4zLTAuMiAwLjgtMS4zIDAuNC0wLjkgMC41LTEuNiAwLjUtMi4zLTAuMS0wLjgtMC4zLTEuNS0wLjYtMi4xLTAuMi0wLjQtMC41LTAuNy0wLjktMC44LTAuOS0wLjQtMS42LTAuNS0yLjItMC4xLTAuMyAwLjItMC40IDAuNC0wLjUgMC42LTAuMSAwLjMtMC4yIDAuNy0wLjIgMS4xdjEuN2MwIDAuNCAwIDAuOCAwLjEgMSAwLjEgMC4zIDAuMiAwLjYgMC40IDAuOSAwLjEgMC4yIDAuMyAwLjYgMC45IDEuM3oiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Im00MTUuOCAxMTVjLTAuOSAwLTIuMS0wLjQtMy4yLTIuMi0wLjctMS4zLTEtMy40LTAuOC02LjggMC4yLTIuOSAwLjEtMTItMC4xLTI3LTAuMi0xMi42LTAuMy0yMC43LTAuMy0yMy4yLTAuNy0wLjEtMi40LTAuMi02LjIgMC4yLTUuNCAwLjYtOC44IDAuNy0xMC4zIDAuNi0zLjEtMC40LTMuNC0yLjItMy40LTMgMC0xIDAuNC0yLjMgMi4yLTMuNCAwLjYtMC40IDEuNy0xIDE4LjMtMi4yLTAuMy02LjUtMC41LTEzLTAuNi0xOS40LTAuMi0xMC4xIDAuNy0xMS44IDEuNS0xMi42IDEuNS0xLjUgMi45LTEuNiAzLjgtMS41IDIuMiAwLjMgMi43IDMuMyAzIDYuMiAwLjMgMy4xIDAuNSA4LjIgMC42IDE1LjQgMC4xIDcuMyAwLjMgOS45IDAuNCAxMC44IDAuNCAwLjEgMS40IDAuMiAzLjUgMC4xIDMtMC4yIDUuNC0wLjMgNy4xLTAuNCAyLjItMC4xIDMuNyAwLjUgNC43IDEuNiAwLjUgMC42IDEuNiAyLjQtMC40IDQuNi0xLjIgMS4zLTMuMiAyLTYuMyAyLTIuNSAwLTQuOSAwLjEtNyAwLjItMS4xIDAuMS0xLjYgMC4yLTEuOSAwLjMgMCAxLjYtMC4xIDcuMy0wLjIgMTgtMC4xIDExLjQtMC4xIDIwLjMgMC4yIDI2LjYgMC40IDguNy0wLjQgMTEuMi0xLjEgMTIuM3MtMS44IDIuOC0zLjUgMi44eiIvPgo8L3N2Zz4K">
</a>
            </div>
            <div class="logon">
              <div class="divLogin">
              </div>
              <div class="divLogout">
                <div id="boxLogout">
                </div>
              </div>
            </div>
          </div>
        </div>
      </nav>
    </header>
  </div>
  <div class="clear"></div>
  <div id="contentRightSrv" class="contentRightNoLogin">
    <div id="boxes">
      <div id="mask" style="width:1366px;height:657px" class="sf-hidden"></div>
    </div>
    <table border="0" cellpadding="0" cellspacing="0" align="center" id="HPOuterBox">
      <tbody>
        <tr>
          <td valign="top" align="left">
            <table cellpadding="0" cellspacing="8" id="HPLoginBox">
              <tbody>
                <tr>
                  <td colspan="2">
                    <div id="cphBody_lblTop">
                      <h1>Pannello gestione pagamenti</h1>
                      <span class="lblDescriptionList" style="margin-left:15px">Accedi al pannello per:</span>
                      <ul class="lblDescriptionList">
                        <li>Pagare gli ordini con carta di credito o PayPal</li>
                        <li>Gestire i tuoi metodi di pagamento</li>
                        <li>Scaricare il bollettino precompilato</li>
                        <li>Visualizzare le coordinate bancarie per effettuare un bonifico</li>
                      </ul>
                    </div>
                  </td>
                </tr>
                <tr>
                  <td class="alignCenter">
                    <table cellpadding="0" cellspacing="8" id="HPLoginInnerBox">
                      <tbody>
                        <tr>
                          <td align="right">
                            <span id="cphBody_lblLogin">Username</span>
                          </td>
                          <td>
                            <input type="hidden" name="what" value="LOGIN">
                            <input name="username" required="" type="text" id="txtLogin" class="txtBigHeight" placeholder="Es: 12345@aruba.it" value="">
                          </td>
                          <td align="left">
                          </td>
                        </tr>
                        <tr>
                          <td align="right">
                            <span id="cphBody_lblPassword">Password</span>
                          </td>
                          <td>
                            <input name="password" required="" type="password" id="txtPassword" class="txtBigHeight" value="">
                          </td>
                          <td>&nbsp;</td>
                        </tr>
                        <tr>
                          <td colspan="2">
                            <span id="cphBody_lblAsicurazione"></span>
                          </td>
                        </tr>
                        <tr>
                          <td>&nbsp;</td>
                          <td align="right">
                            <button type="submit" id="imgEntraPaga" class="buttonNew">Accedi</button>
                          </td>
                          <td>&nbsp;</td>
                        </tr>
                      </tbody>
                    </table>
                    <a id="cphBody_HypRecuperaAccount" title="Non ricordi lo username o la password?" class="linkRecuperaDati" href="https://gestioneaccessi.aruba.it/it/Recover-Access-Data/Insert-Login/ARUBA" target="_blank">Non ricordi lo username o la password?</a>
                  </td>
                </tr>
              </tbody>
            </table>
          </td>
          <td valign="top" align="left">
            <table border="0" cellpadding="0" cellspacing="8" id="fastPaymentHPOuterBox">
              <tbody>
                <tr>
                  <td>
                    <table border="0" cellpadding="0" cellspacing="0" valign="middle">
                      <tbody>
                        <tr>
                          <td>
                            <h4> Pagamento rapido </h4>
                            <span id="cphBody_NoLoginPayDescription">Inserisci il numero del tuo ordine e paga subito con carta di credito o PayPal senza effettuare l'accesso. <ol>
                                <li>Nr. Ordine</li>
                                <li>Vai al pagamento</li>
                              </ol></span>
                            <table border="0" cellpadding="0" cellspacing="0" id="fastPaymentHPBox">
                              <tbody>
                                <tr>
                                  <td align="right" valign="top">
                                    <span id="NOrdDescr">
                                      <span id="cphBody_LblOrdno">N° Ordine</span></span>
                                  </td>
                                  <td>
                                    <table border="0" cellpadding="0" cellspacing="0">
                                      <tbody>
                                        <tr>
                                          <td align="right">
                                            <input name="ctl00$cphBody$txtOrderId" type="text" id="txtOrderId" class="txtBigHeight" placeholder="Es: MO2314564" value="">
                                            <span id="cphBody_rfvOrderValidator" class="hpOrderIdError" style="display:none">ID Ordine richiesto</span>
                                          </td>
                                        </tr>
                                        <tr>
                                          <td align="left">
                                            <table id="cphBody_rblPaymentType">
                                              <tbody>
                                                <tr>
                                                  <td><input id="cphBody_rblPaymentType_0" type="radio" name="ctl00$cphBody$rblPaymentType" value="CC" checked=""><label for="cphBody_rblPaymentType_0">Carta di credito</label></td>
                                                </tr>
                                                <tr>
                                                  <td><input id="cphBody_rblPaymentType_1" type="radio" name="ctl00$cphBody$rblPaymentType" value="PP"><label for="cphBody_rblPaymentType_1">PayPal</label></td>
                                                </tr>
                                              </tbody>
                                            </table>
                                          </td>
                                        </tr>
                                        <tr>
                                          <td align="right">
                                            <br>
                                            <a id="imgPagaNoLog" class="buttonNew" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$cphBody$imgPagaNoLog&quot;, &quot;&quot;, true, &quot;payNoLogin&quot;, &quot;&quot;, false, true))">Vai al pagamento</a>
                                          </td>
                                        </tr>
                                      </tbody>
                                    </table>
                                  </td>
                                </tr>
                              </tbody>
                            </table>
                          </td>
                        </tr>
                      </tbody>
                    </table>
                  </td>
                </tr>
                <tr>
                  <td class="lineSeparatorOver">
                    <span id="cphBody_lblPaymentAccepted" class="spanLittlegrey">Pagamenti supportati</span>
                    <img id="cphBody_Image1"
                      src="data:image/png;base64,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">
                  </td>
                </tr>
              </tbody>
            </table>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
  <div class="clear clearHeight"></div>
  <div id="push"></div>
  <div class="footer">
    <span class="copyrightBottomDescription">Copyright © 2022 Aruba S.p.A.- P.I. 01573850516 - All rights reserved</span>
    <br>
    <a href="https://www.aruba.it/cookie-policy.aspx?lang=it-IT" target="_blank">Cookie</a> - <a href="javascript: Cookiebot.renew()">Personalizza cookie</a>
  </div>
  <script class="sf-hidden">
    //<![CDATA[
    var Page_Validators = new Array(document.getElementById("cphBody_rfvOrderValidator"));
    //]]>
  </script>
  <script class="sf-hidden">
    //<![CDATA[
    var cphBody_rfvOrderValidator = document.all ? document.all["cphBody_rfvOrderValidator"] : document.getElementById("cphBody_rfvOrderValidator");
    cphBody_rfvOrderValidator.controltovalidate = "txtOrderId";
    cphBody_rfvOrderValidator.errormessage = "ID Ordine richiesto";
    cphBody_rfvOrderValidator.display = "Dynamic";
    cphBody_rfvOrderValidator.validationGroup = "payNoLogin";
    cphBody_rfvOrderValidator.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid";
    cphBody_rfvOrderValidator.initialvalue = "";
    //]]>
  </script>
  <script class="sf-hidden">
    //<![CDATA[
    var Page_ValidationActive = false;
    if (typeof(ValidatorOnLoad) == "function") {
      ValidatorOnLoad();
    }

    function ValidatorOnSubmit() {
      if (Page_ValidationActive) {
        return ValidatorCommonOnSubmit();
      } else {
        return true;
      }
    }
    document.getElementById('cphBody_rfvOrderValidator').dispose = function() {
      Array.remove(Page_Validators, document.getElementById('cphBody_rfvOrderValidator'));
    }
    //]]>
  </script>
</form>

Text Content

 * Italiano
   * English
   * Español

 * webmail
 * rinnovi
 * area clienti
 * assistenza h24





PANNELLO GESTIONE PAGAMENTI

Accedi al pannello per:
 * Pagare gli ordini con carta di credito o PayPal
 * Gestire i tuoi metodi di pagamento
 * Scaricare il bollettino precompilato
 * Visualizzare le coordinate bancarie per effettuare un bonifico

Username Password     Accedi  

Non ricordi lo username o la password?

PAGAMENTO RAPIDO

Inserisci il numero del tuo ordine e paga subito con carta di credito o PayPal
senza effettuare l'accesso.
 1. Nr. Ordine
 2. Vai al pagamento

N° Ordine

ID Ordine richiesto

Carta di credito PayPal


Vai al pagamento

Pagamenti supportati



Copyright © 2022 Aruba S.p.A.- P.I. 01573850516 - All rights reserved
Cookie - Personalizza cookie