3NCUbh7cABzRyEMEXAcGCAozSuxvUTf75ms · data · bootstrap.bundle.min.js_2
{
"bootstrap.bundle.min.js_2": "base64:LnRlc3QodC50YXJnZXQudGFnTmFtZSl8fCJrZXl1cCI9PT10LnR5cGUmJjk9PT10LndoaWNoKSYmcC5jb250YWlucyhvLHQudGFyZ2V0KSkpe3ZhciBsPXAuRXZlbnQoQWUuSElERSxzKTtwKG8pLnRyaWdnZXIobCksbC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZwKGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub2ZmKCJtb3VzZW92ZXIiLG51bGwscC5ub29wKSxlW25dLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsImZhbHNlIikscChhKS5yZW1vdmVDbGFzcyhOZSkscChvKS5yZW1vdmVDbGFzcyhOZSkudHJpZ2dlcihwLkV2ZW50KEFlLkhJRERFTixzKSkpfX19fSxjLl9nZXRQYXJlbnRGcm9tRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZSxuPW0uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0KTtyZXR1cm4gbiYmKGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKSksZXx8dC5wYXJlbnROb2RlfSxjLl9kYXRhQXBpS2V5ZG93bkhhbmRsZXI9ZnVuY3Rpb24odCl7aWYoKC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QodC50YXJnZXQudGFnTmFtZSk/ISgzMj09PXQud2hpY2h8fDI3IT09dC53aGljaCYmKDQwIT09dC53aGljaCYmMzghPT10LndoaWNofHxwKHQudGFyZ2V0KS5jbG9zZXN0KEZlKS5sZW5ndGgpKTpJZS50ZXN0KHQud2hpY2gpKSYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLCF0aGlzLmRpc2FibGVkJiYhcCh0aGlzKS5oYXNDbGFzcyhPZSkpKXt2YXIgZT1jLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzKSxuPXAoZSkuaGFzQ2xhc3MoTmUpO2lmKG4mJighbnx8MjchPT10LndoaWNoJiYzMiE9PXQud2hpY2gpKXt2YXIgaT1bXS5zbGljZS5jYWxsKGUucXVlcnlTZWxlY3RvckFsbChXZSkpO2lmKDAhPT1pLmxlbmd0aCl7dmFyIG89aS5pbmRleE9mKHQudGFyZ2V0KTszOD09PXQud2hpY2gmJjA8byYmby0tLDQwPT09dC53aGljaCYmbzxpLmxlbmd0aC0xJiZvKyssbzwwJiYobz0wKSxpW29dLmZvY3VzKCl9fWVsc2V7aWYoMjc9PT10LndoaWNoKXt2YXIgcj1lLnF1ZXJ5U2VsZWN0b3IoamUpO3AocikudHJpZ2dlcigiZm9jdXMiKX1wKHRoaXMpLnRyaWdnZXIoImNsaWNrIil9fX0scyhjLG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjMuMSJ9fSx7a2V5OiJEZWZhdWx0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWWV9fSx7a2V5OiJEZWZhdWx0VHlwZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHplfX1dKSxjfSgpO3AoZG9jdW1lbnQpLm9uKEFlLktFWURPV05fREFUQV9BUEksamUsWGUuX2RhdGFBcGlLZXlkb3duSGFuZGxlcikub24oQWUuS0VZRE9XTl9EQVRBX0FQSSxGZSxYZS5fZGF0YUFwaUtleWRvd25IYW5kbGVyKS5vbihBZS5DTElDS19EQVRBX0FQSSsiICIrQWUuS0VZVVBfREFUQV9BUEksWGUuX2NsZWFyTWVudXMpLm9uKEFlLkNMSUNLX0RBVEFfQVBJLGplLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLFhlLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChwKHRoaXMpLCJ0b2dnbGUiKX0pLm9uKEFlLkNMSUNLX0RBVEFfQVBJLFJlLGZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCl9KSxwLmZuW3dlXT1YZS5falF1ZXJ5SW50ZXJmYWNlLHAuZm5bd2VdLkNvbnN0cnVjdG9yPVhlLHAuZm5bd2VdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcC5mblt3ZV09RGUsWGUuX2pRdWVyeUludGVyZmFjZX07dmFyIEdlPSJtb2RhbCIsJGU9ImJzLm1vZGFsIixKZT0iLiIrJGUsWmU9cC5mbltHZV0sdG49e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwLGZvY3VzOiEwLHNob3c6ITB9LGVuPXtiYWNrZHJvcDoiKGJvb2xlYW58c3RyaW5nKSIsa2V5Ym9hcmQ6ImJvb2xlYW4iLGZvY3VzOiJib29sZWFuIixzaG93OiJib29sZWFuIn0sbm49e0hJREU6ImhpZGUiK0plLEhJRERFTjoiaGlkZGVuIitKZSxTSE9XOiJzaG93IitKZSxTSE9XTjoic2hvd24iK0plLEZPQ1VTSU46ImZvY3VzaW4iK0plLFJFU0laRToicmVzaXplIitKZSxDTElDS19ESVNNSVNTOiJjbGljay5kaXNtaXNzIitKZSxLRVlET1dOX0RJU01JU1M6ImtleWRvd24uZGlzbWlzcyIrSmUsTU9VU0VVUF9ESVNNSVNTOiJtb3VzZXVwLmRpc21pc3MiK0plLE1PVVNFRE9XTl9ESVNNSVNTOiJtb3VzZWRvd24uZGlzbWlzcyIrSmUsQ0xJQ0tfREFUQV9BUEk6ImNsaWNrIitKZSsiLmRhdGEtYXBpIn0sb249Im1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIixybj0ibW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUiLHNuPSJtb2RhbC1iYWNrZHJvcCIsYW49Im1vZGFsLW9wZW4iLGxuPSJmYWRlIixjbj0ic2hvdyIsaG49Ii5tb2RhbC1kaWFsb2ciLHVuPSIubW9kYWwtYm9keSIsZm49J1tkYXRhLXRvZ2dsZT0ibW9kYWwiXScsZG49J1tkYXRhLWRpc21pc3M9Im1vZGFsIl0nLHBuPSIuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wIixtbj0iLnN0aWNreS10b3AiLGduPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy5fZWxlbWVudD10LHRoaXMuX2RpYWxvZz10LnF1ZXJ5U2VsZWN0b3IoaG4pLHRoaXMuX2JhY2tkcm9wPW51bGwsdGhpcy5faXNTaG93bj0hMSx0aGlzLl9pc0JvZHlPdmVyZmxvd2luZz0hMSx0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrPSExLHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl9zY3JvbGxiYXJXaWR0aD0wfXZhciB0PW8ucHJvdG90eXBlO3JldHVybiB0LnRvZ2dsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3codCl9LHQuc2hvdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCF0aGlzLl9pc1Nob3duJiYhdGhpcy5faXNUcmFuc2l0aW9uaW5nKXtwKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKGxuKSYmKHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMCk7dmFyIG49cC5FdmVudChubi5TSE9XLHtyZWxhdGVkVGFyZ2V0OnR9KTtwKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobiksdGhpcy5faXNTaG93bnx8bi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KHRoaXMuX2lzU2hvd249ITAsdGhpcy5fY2hlY2tTY3JvbGxiYXIoKSx0aGlzLl9zZXRTY3JvbGxiYXIoKSx0aGlzLl9hZGp1c3REaWFsb2coKSx0aGlzLl9zZXRFc2NhcGVFdmVudCgpLHRoaXMuX3NldFJlc2l6ZUV2ZW50KCkscCh0aGlzLl9lbGVtZW50KS5vbihubi5DTElDS19ESVNNSVNTLGRuLGZ1bmN0aW9uKHQpe3JldHVybiBlLmhpZGUodCl9KSxwKHRoaXMuX2RpYWxvZykub24obm4uTU9VU0VET1dOX0RJU01JU1MsZnVuY3Rpb24oKXtwKGUuX2VsZW1lbnQpLm9uZShubi5NT1VTRVVQX0RJU01JU1MsZnVuY3Rpb24odCl7cCh0LnRhcmdldCkuaXMoZS5fZWxlbWVudCkmJihlLl9pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5fc2hvd0JhY2tkcm9wKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3Nob3dFbGVtZW50KHQpfSkpfX0sdC5oaWRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodCYmdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2lzU2hvd24mJiF0aGlzLl9pc1RyYW5zaXRpb25pbmcpe3ZhciBuPXAuRXZlbnQobm4uSElERSk7aWYocCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKG4pLHRoaXMuX2lzU2hvd24mJiFuLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt0aGlzLl9pc1Nob3duPSExO3ZhciBpPXAodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MobG4pO2lmKGkmJih0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITApLHRoaXMuX3NldEVzY2FwZUV2ZW50KCksdGhpcy5fc2V0UmVzaXplRXZlbnQoKSxwKGRvY3VtZW50KS5vZmYobm4uRk9DVVNJTikscCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhjbikscCh0aGlzLl9lbGVtZW50KS5vZmYobm4uQ0xJQ0tfRElTTUlTUykscCh0aGlzLl9kaWFsb2cpLm9mZihubi5NT1VTRURPV05fRElTTUlTUyksaSl7dmFyIG89bS5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtwKHRoaXMuX2VsZW1lbnQpLm9uZShtLlRSQU5TSVRJT05fRU5ELGZ1bmN0aW9uKHQpe3JldHVybiBlLl9oaWRlTW9kYWwodCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChvKX1lbHNlIHRoaXMuX2hpZGVNb2RhbCgpfX19LHQuZGlzcG9zZT1mdW5jdGlvbigpe1t3aW5kb3csdGhpcy5fZWxlbWVudCx0aGlzLl9kaWFsb2ddLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHAodCkub2ZmKEplKX0pLHAoZG9jdW1lbnQpLm9mZihubi5GT0NVU0lOKSxwLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwkZSksdGhpcy5fY29uZmlnPW51bGwsdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuX2RpYWxvZz1udWxsLHRoaXMuX2JhY2tkcm9wPW51bGwsdGhpcy5faXNTaG93bj1udWxsLHRoaXMuX2lzQm9keU92ZXJmbG93aW5nPW51bGwsdGhpcy5faWdub3JlQmFja2Ryb3BDbGljaz1udWxsLHRoaXMuX2lzVHJhbnNpdGlvbmluZz1udWxsLHRoaXMuX3Njcm9sbGJhcldpZHRoPW51bGx9LHQuaGFuZGxlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0RGlhbG9nKCl9LHQuX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdD1sKHt9LHRuLHQpLG0udHlwZUNoZWNrQ29uZmlnKEdlLHQsZW4pLHR9LHQuX3Nob3dFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1wKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKGxuKTt0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfHxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLW1vZGFsIiwhMCkscCh0aGlzLl9kaWFsb2cpLmhhc0NsYXNzKG9uKT90aGlzLl9kaWFsb2cucXVlcnlTZWxlY3Rvcih1bikuc2Nyb2xsVG9wPTA6dGhpcy5fZWxlbWVudC5zY3JvbGxUb3A9MCxuJiZtLnJlZmxvdyh0aGlzLl9lbGVtZW50KSxwKHRoaXMuX2VsZW1lbnQpLmFkZENsYXNzKGNuKSx0aGlzLl9jb25maWcuZm9jdXMmJnRoaXMuX2VuZm9yY2VGb2N1cygpO3ZhciBpPXAuRXZlbnQobm4uU0hPV04se3JlbGF0ZWRUYXJnZXQ6dH0pLG89ZnVuY3Rpb24oKXtlLl9jb25maWcuZm9jdXMmJmUuX2VsZW1lbnQuZm9jdXMoKSxlLl9pc1RyYW5zaXRpb25pbmc9ITEscChlLl9lbGVtZW50KS50cmlnZ2VyKGkpfTtpZihuKXt2YXIgcj1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2RpYWxvZyk7cCh0aGlzLl9kaWFsb2cpLm9uZShtLlRSQU5TSVRJT05fRU5ELG8pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHIpfWVsc2UgbygpfSx0Ll9lbmZvcmNlRm9jdXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3AoZG9jdW1lbnQpLm9mZihubi5GT0NVU0lOKS5vbihubi5GT0NVU0lOLGZ1bmN0aW9uKHQpe2RvY3VtZW50IT09dC50YXJnZXQmJmUuX2VsZW1lbnQhPT10LnRhcmdldCYmMD09PXAoZS5fZWxlbWVudCkuaGFzKHQudGFyZ2V0KS5sZW5ndGgmJmUuX2VsZW1lbnQuZm9jdXMoKX0pfSx0Ll9zZXRFc2NhcGVFdmVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5faXNTaG93biYmdGhpcy5fY29uZmlnLmtleWJvYXJkP3AodGhpcy5fZWxlbWVudCkub24obm4uS0VZRE9XTl9ESVNNSVNTLGZ1bmN0aW9uKHQpezI3PT09dC53aGljaCYmKHQucHJldmVudERlZmF1bHQoKSxlLmhpZGUoKSl9KTp0aGlzLl9pc1Nob3dufHxwKHRoaXMuX2VsZW1lbnQpLm9mZihubi5LRVlET1dOX0RJU01JU1MpfSx0Ll9zZXRSZXNpemVFdmVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5faXNTaG93bj9wKHdpbmRvdykub24obm4uUkVTSVpFLGZ1bmN0aW9uKHQpe3JldHVybiBlLmhhbmRsZVVwZGF0ZSh0KX0pOnAod2luZG93KS5vZmYobm4uUkVTSVpFKX0sdC5faGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApLHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW1vZGFsIiksdGhpcy5faXNUcmFuc2l0aW9uaW5nPSExLHRoaXMuX3Nob3dCYWNrZHJvcChmdW5jdGlvbigpe3AoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3MoYW4pLHQuX3Jlc2V0QWRqdXN0bWVudHMoKSx0Ll9yZXNldFNjcm9sbGJhcigpLHAodC5fZWxlbWVudCkudHJpZ2dlcihubi5ISURERU4pfSl9LHQuX3JlbW92ZUJhY2tkcm9wPWZ1bmN0aW9uKCl7dGhpcy5fYmFja2Ryb3AmJihwKHRoaXMuX2JhY2tkcm9wKS5yZW1vdmUoKSx0aGlzLl9iYWNrZHJvcD1udWxsKX0sdC5fc2hvd0JhY2tkcm9wPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1wKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKGxuKT9sbjoiIjtpZih0aGlzLl9pc1Nob3duJiZ0aGlzLl9jb25maWcuYmFja2Ryb3Ape2lmKHRoaXMuX2JhY2tkcm9wPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2JhY2tkcm9wLmNsYXNzTmFtZT1zbixuJiZ0aGlzLl9iYWNrZHJvcC5jbGFzc0xpc3QuYWRkKG4pLHAodGhpcy5fYmFja2Ryb3ApLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLHAodGhpcy5fZWxlbWVudCkub24obm4uQ0xJQ0tfRElTTUlTUyxmdW5jdGlvbih0KXtlLl9pZ25vcmVCYWNrZHJvcENsaWNrP2UuX2lnbm9yZUJhY2tkcm9wQ2xpY2s9ITE6dC50YXJnZXQ9PT10LmN1cnJlbnRUYXJnZXQmJigic3RhdGljIj09PWUuX2NvbmZpZy5iYWNrZHJvcD9lLl9lbGVtZW50LmZvY3VzKCk6ZS5oaWRlKCkpfSksbiYmbS5yZWZsb3codGhpcy5fYmFja2Ryb3ApLHAodGhpcy5fYmFja2Ryb3ApLmFkZENsYXNzKGNuKSwhdClyZXR1cm47aWYoIW4pcmV0dXJuIHZvaWQgdCgpO3ZhciBpPW0uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO3AodGhpcy5fYmFja2Ryb3ApLm9uZShtLlRSQU5TSVRJT05fRU5ELHQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkpfWVsc2UgaWYoIXRoaXMuX2lzU2hvd24mJnRoaXMuX2JhY2tkcm9wKXtwKHRoaXMuX2JhY2tkcm9wKS5yZW1vdmVDbGFzcyhjbik7dmFyIG89ZnVuY3Rpb24oKXtlLl9yZW1vdmVCYWNrZHJvcCgpLHQmJnQoKX07aWYocCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhsbikpe3ZhciByPW0uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO3AodGhpcy5fYmFja2Ryb3ApLm9uZShtLlRSQU5TSVRJT05fRU5ELG8pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHIpfWVsc2UgbygpfWVsc2UgdCYmdCgpfSx0Ll9hZGp1c3REaWFsb2c9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OyF0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyYmdCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQ9dGhpcy5fc2Nyb2xsYmFyV2lkdGgrInB4IiksdGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcmJiF0JiYodGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQ9dGhpcy5fc2Nyb2xsYmFyV2lkdGgrInB4Iil9LHQuX3Jlc2V0QWRqdXN0bWVudHM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0PSIiLHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0PSIifSx0Ll9jaGVja1Njcm9sbGJhcj1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5faXNCb2R5T3ZlcmZsb3dpbmc9dC5sZWZ0K3QucmlnaHQ8d2luZG93LmlubmVyV2lkdGgsdGhpcy5fc2Nyb2xsYmFyV2lkdGg9dGhpcy5fZ2V0U2Nyb2xsYmFyV2lkdGgoKX0sdC5fc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIG89dGhpcztpZih0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyl7dmFyIHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHBuKSksZT1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwobW4pKTtwKHQpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN0eWxlLnBhZGRpbmdSaWdodCxpPXAoZSkuY3NzKCJwYWRkaW5nLXJpZ2h0Iik7cChlKS5kYXRhKCJwYWRkaW5nLXJpZ2h0IixuKS5jc3MoInBhZGRpbmctcmlnaHQiLHBhcnNlRmxvYXQoaSkrby5fc2Nyb2xsYmFyV2lkdGgrInB4Iil9KSxwKGUpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN0eWxlLm1hcmdpblJpZ2h0LGk9cChlKS5jc3MoIm1hcmdpbi1yaWdodCIpO3AoZSkuZGF0YSgibWFyZ2luLXJpZ2h0IixuKS5jc3MoIm1hcmdpbi1yaWdodCIscGFyc2VGbG9hdChpKS1vLl9zY3JvbGxiYXJXaWR0aCsicHgiKX0pO3ZhciBuPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0LGk9cChkb2N1bWVudC5ib2R5KS5jc3MoInBhZGRpbmctcmlnaHQiKTtwKGRvY3VtZW50LmJvZHkpLmRhdGEoInBhZGRpbmctcmlnaHQiLG4pLmNzcygicGFkZGluZy1yaWdodCIscGFyc2VGbG9hdChpKSt0aGlzLl9zY3JvbGxiYXJXaWR0aCsicHgiKX1wKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKGFuKX0sdC5fcmVzZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgdD1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocG4pKTtwKHQpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1wKGUpLmRhdGEoInBhZGRpbmctcmlnaHQiKTtwKGUpLnJlbW92ZURhdGEoInBhZGRpbmctcmlnaHQiKSxlLnN0eWxlLnBhZGRpbmdSaWdodD1ufHwiIn0pO3ZhciBlPVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIittbikpO3AoZSkuZWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPXAoZSkuZGF0YSgibWFyZ2luLXJpZ2h0Iik7InVuZGVmaW5lZCIhPXR5cGVvZiBuJiZwKGUpLmNzcygibWFyZ2luLXJpZ2h0IixuKS5yZW1vdmVEYXRhKCJtYXJnaW4tcmlnaHQiKX0pO3ZhciBuPXAoZG9jdW1lbnQuYm9keSkuZGF0YSgicGFkZGluZy1yaWdodCIpO3AoZG9jdW1lbnQuYm9keSkucmVtb3ZlRGF0YSgicGFkZGluZy1yaWdodCIpLGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PW58fCIifSx0Ll9nZXRTY3JvbGxiYXJXaWR0aD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPXJuLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aC10LmNsaWVudFdpZHRoO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLGV9LG8uX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihuLGkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLmRhdGEoJGUpLGU9bCh7fSx0bixwKHRoaXMpLmRhdGEoKSwib2JqZWN0Ij09dHlwZW9mIG4mJm4/bjp7fSk7aWYodHx8KHQ9bmV3IG8odGhpcyxlKSxwKHRoaXMpLmRhdGEoJGUsdCkpLCJzdHJpbmciPT10eXBlb2Ygbil7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJytuKyciJyk7dFtuXShpKX1lbHNlIGUuc2hvdyYmdC5zaG93KGkpfSl9LHMobyxudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iNC4zLjEifX0se2tleToiRGVmYXVsdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRufX1dKSxvfSgpO3AoZG9jdW1lbnQpLm9uKG5uLkNMSUNLX0RBVEFfQVBJLGZuLGZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcyxpPW0uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKTtpJiYoZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGkpKTt2YXIgbz1wKGUpLmRhdGEoJGUpPyJ0b2dnbGUiOmwoe30scChlKS5kYXRhKCkscCh0aGlzKS5kYXRhKCkpOyJBIiE9PXRoaXMudGFnTmFtZSYmIkFSRUEiIT09dGhpcy50YWdOYW1lfHx0LnByZXZlbnREZWZhdWx0KCk7dmFyIHI9cChlKS5vbmUobm4uU0hPVyxmdW5jdGlvbih0KXt0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHxyLm9uZShubi5ISURERU4sZnVuY3Rpb24oKXtwKG4pLmlzKCI6dmlzaWJsZSIpJiZuLmZvY3VzKCl9KX0pO2duLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChwKGUpLG8sdGhpcyl9KSxwLmZuW0dlXT1nbi5falF1ZXJ5SW50ZXJmYWNlLHAuZm5bR2VdLkNvbnN0cnVjdG9yPWduLHAuZm5bR2VdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcC5mbltHZV09WmUsZ24uX2pRdWVyeUludGVyZmFjZX07dmFyIF9uPVsiYmFja2dyb3VuZCIsImNpdGUiLCJocmVmIiwiaXRlbXR5cGUiLCJsb25nZGVzYyIsInBvc3RlciIsInNyYyIsInhsaW5rOmhyZWYiXSx2bj17IioiOlsiY2xhc3MiLCJkaXIiLCJpZCIsImxhbmciLCJyb2xlIiwvXmFyaWEtW1x3LV0qJC9pXSxhOlsidGFyZ2V0IiwiaHJlZiIsInRpdGxlIiwicmVsIl0sYXJlYTpbXSxiOltdLGJyOltdLGNvbDpbXSxjb2RlOltdLGRpdjpbXSxlbTpbXSxocjpbXSxoMTpbXSxoMjpbXSxoMzpbXSxoNDpbXSxoNTpbXSxoNjpbXSxpOltdLGltZzpbInNyYyIsImFsdCIsInRpdGxlIiwid2lkdGgiLCJoZWlnaHQiXSxsaTpbXSxvbDpbXSxwOltdLHByZTpbXSxzOltdLHNtYWxsOltdLHNwYW46W10sc3ViOltdLHN1cDpbXSxzdHJvbmc6W10sdTpbXSx1bDpbXX0seW49L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZSk6fFteJjovPyNdKig/OlsvPyNdfCQpKS9naSxFbj0vXmRhdGE6KD86aW1hZ2VcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1wvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05Ky9dKz0qJC9pO2Z1bmN0aW9uIGJuKHQscyxlKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIHQ7aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUpcmV0dXJuIGUodCk7Zm9yKHZhciBuPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQsInRleHQvaHRtbCIpLGE9T2JqZWN0LmtleXMocyksbD1bXS5zbGljZS5jYWxsKG4uYm9keS5xdWVyeVNlbGVjdG9yQWxsKCIqIikpLGk9ZnVuY3Rpb24odCxlKXt2YXIgbj1sW3RdLGk9bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKC0xPT09YS5pbmRleE9mKG4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSwiY29udGludWUiO3ZhciBvPVtdLnNsaWNlLmNhbGwobi5hdHRyaWJ1dGVzKSxyPVtdLmNvbmNhdChzWyIqIl18fFtdLHNbaV18fFtdKTtvLmZvckVhY2goZnVuY3Rpb24odCl7KGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKC0xIT09ZS5pbmRleE9mKG4pKXJldHVybi0xPT09X24uaW5kZXhPZihuKXx8Qm9vbGVhbih0Lm5vZGVWYWx1ZS5tYXRjaCh5bil8fHQubm9kZVZhbHVlLm1hdGNoKEVuKSk7Zm9yKHZhciBpPWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfSksbz0wLHI9aS5sZW5ndGg7bzxyO28rKylpZihuLm1hdGNoKGlbb10pKXJldHVybiEwO3JldHVybiExfSkodCxyKXx8bi5yZW1vdmVBdHRyaWJ1dGUodC5ub2RlTmFtZSl9KX0sbz0wLHI9bC5sZW5ndGg7bzxyO28rKylpKG8pO3JldHVybiBuLmJvZHkuaW5uZXJIVE1MfXZhciB3bj0idG9vbHRpcCIsQ249ImJzLnRvb2x0aXAiLFRuPSIuIitDbixTbj1wLmZuW3duXSxEbj0iYnMtdG9vbHRpcCIsSW49bmV3IFJlZ0V4cCgiKF58XFxzKSIrRG4rIlxcUysiLCJnIiksQW49WyJzYW5pdGl6ZSIsIndoaXRlTGlzdCIsInNhbml0aXplRm4iXSxPbj17YW5pbWF0aW9uOiJib29sZWFuIix0ZW1wbGF0ZToic3RyaW5nIix0aXRsZToiKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSIsdHJpZ2dlcjoic3RyaW5nIixkZWxheToiKG51bWJlcnxvYmplY3QpIixodG1sOiJib29sZWFuIixzZWxlY3RvcjoiKHN0cmluZ3xib29sZWFuKSIscGxhY2VtZW50OiIoc3RyaW5nfGZ1bmN0aW9uKSIsb2Zmc2V0OiIobnVtYmVyfHN0cmluZ3xmdW5jdGlvbikiLGNvbnRhaW5lcjoiKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pIixmYWxsYmFja1BsYWNlbWVudDoiKHN0cmluZ3xhcnJheSkiLGJvdW5kYXJ5OiIoc3RyaW5nfGVsZW1lbnQpIixzYW5pdGl6ZToiYm9vbGVhbiIsc2FuaXRpemVGbjoiKG51bGx8ZnVuY3Rpb24pIix3aGl0ZUxpc3Q6Im9iamVjdCJ9LE5uPXtBVVRPOiJhdXRvIixUT1A6InRvcCIsUklHSFQ6InJpZ2h0IixCT1RUT006ImJvdHRvbSIsTEVGVDoibGVmdCJ9LGtuPXthbmltYXRpb246ITAsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48ZGl2IGNsYXNzPSJ0b29sdGlwLWlubmVyIj48L2Rpdj48L2Rpdj4nLHRyaWdnZXI6ImhvdmVyIGZvY3VzIix0aXRsZToiIixkZWxheTowLGh0bWw6ITEsc2VsZWN0b3I6ITEscGxhY2VtZW50OiJ0b3AiLG9mZnNldDowLGNvbnRhaW5lcjohMSxmYWxsYmFja1BsYWNlbWVudDoiZmxpcCIsYm91bmRhcnk6InNjcm9sbFBhcmVudCIsc2FuaXRpemU6ITAsc2FuaXRpemVGbjpudWxsLHdoaXRlTGlzdDp2bn0sTG49InNob3ciLHhuPSJvdXQiLFBuPXtISURFOiJoaWRlIitUbixISURERU46ImhpZGRlbiIrVG4sU0hPVzoic2hvdyIrVG4sU0hPV046InNob3duIitUbixJTlNFUlRFRDoiaW5zZXJ0ZWQiK1RuLENMSUNLOiJjbGljayIrVG4sRk9DVVNJTjoiZm9jdXNpbiIrVG4sRk9DVVNPVVQ6ImZvY3Vzb3V0IitUbixNT1VTRUVOVEVSOiJtb3VzZWVudGVyIitUbixNT1VTRUxFQVZFOiJtb3VzZWxlYXZlIitUbn0sSG49ImZhZGUiLGpuPSJzaG93IixSbj0iLnRvb2x0aXAtaW5uZXIiLEZuPSIuYXJyb3ciLE1uPSJob3ZlciIsV249ImZvY3VzIixVbj0iY2xpY2siLEJuPSJtYW51YWwiLHFuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0LGUpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgYmUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9vdHN0cmFwJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIuanMgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy8pIik7dGhpcy5faXNFbmFibGVkPSEwLHRoaXMuX3RpbWVvdXQ9MCx0aGlzLl9ob3ZlclN0YXRlPSIiLHRoaXMuX2FjdGl2ZVRyaWdnZXI9e30sdGhpcy5fcG9wcGVyPW51bGwsdGhpcy5lbGVtZW50PXQsdGhpcy5jb25maWc9dGhpcy5fZ2V0Q29uZmlnKGUpLHRoaXMudGlwPW51bGwsdGhpcy5fc2V0TGlzdGVuZXJzKCl9dmFyIHQ9aS5wcm90b3R5cGU7cmV0dXJuIHQuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5faXNFbmFibGVkPSEwfSx0LmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9pc0VuYWJsZWQ9ITF9LHQudG9nZ2xlRW5hYmxlZD1mdW5jdGlvbigpe3RoaXMuX2lzRW5hYmxlZD0hdGhpcy5faXNFbmFibGVkfSx0LnRvZ2dsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9pc0VuYWJsZWQpaWYodCl7dmFyIGU9dGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSxuPXAodC5jdXJyZW50VGFyZ2V0KS5kYXRhKGUpO258fChuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHQuY3VycmVudFRhcmdldCx0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKSxwKHQuY3VycmVudFRhcmdldCkuZGF0YShlLG4pKSxuLl9hY3RpdmVUcmlnZ2VyLmNsaWNrPSFuLl9hY3RpdmVUcmlnZ2VyLmNsaWNrLG4uX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKT9uLl9lbnRlcihudWxsLG4pOm4uX2xlYXZlKG51bGwsbil9ZWxzZXtpZihwKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhqbikpcmV0dXJuIHZvaWQgdGhpcy5fbGVhdmUobnVsbCx0aGlzKTt0aGlzLl9lbnRlcihudWxsLHRoaXMpfX0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHAucmVtb3ZlRGF0YSh0aGlzLmVsZW1lbnQsdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSkscCh0aGlzLmVsZW1lbnQpLm9mZih0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSkscCh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoIi5tb2RhbCIpLm9mZigiaGlkZS5icy5tb2RhbCIpLHRoaXMudGlwJiZwKHRoaXMudGlwKS5yZW1vdmUoKSx0aGlzLl9pc0VuYWJsZWQ9bnVsbCx0aGlzLl90aW1lb3V0PW51bGwsdGhpcy5faG92ZXJTdGF0ZT1udWxsLCh0aGlzLl9hY3RpdmVUcmlnZ2VyPW51bGwpIT09dGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuZGVzdHJveSgpLHRoaXMuX3BvcHBlcj1udWxsLHRoaXMuZWxlbWVudD1udWxsLHRoaXMuY29uZmlnPW51bGwsdGhpcy50aXA9bnVsbH0sdC5zaG93PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZigibm9uZSI9PT1wKHRoaXMuZWxlbWVudCkuY3NzKCJkaXNwbGF5IikpdGhyb3cgbmV3IEVycm9yKCJQbGVhc2UgdXNlIHNob3cgb24gdmlzaWJsZSBlbGVtZW50cyIpO3ZhciB0PXAuRXZlbnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XKTtpZih0aGlzLmlzV2l0aENvbnRlbnQoKSYmdGhpcy5faXNFbmFibGVkKXtwKHRoaXMuZWxlbWVudCkudHJpZ2dlcih0KTt2YXIgbj1tLmZpbmRTaGFkb3dSb290KHRoaXMuZWxlbWVudCksaT1wLmNvbnRhaW5zKG51bGwhPT1uP246dGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuZWxlbWVudCk7aWYodC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8IWkpcmV0dXJuO3ZhciBvPXRoaXMuZ2V0VGlwRWxlbWVudCgpLHI9bS5nZXRVSUQodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKTtvLnNldEF0dHJpYnV0ZSgiaWQiLHIpLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLHIpLHRoaXMuc2V0Q29udGVudCgpLHRoaXMuY29uZmlnLmFuaW1hdGlvbiYmcChvKS5hZGRDbGFzcyhIbik7dmFyIHM9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29uZmlnLnBsYWNlbWVudD90aGlzLmNvbmZpZy5wbGFjZW1lbnQuY2FsbCh0aGlzLG8sdGhpcy5lbGVtZW50KTp0aGlzLmNvbmZpZy5wbGFjZW1lbnQsYT10aGlzLl9nZXRBdHRhY2htZW50KHMpO3RoaXMuYWRkQXR0YWNobWVudENsYXNzKGEpO3ZhciBsPXRoaXMuX2dldENvbnRhaW5lcigpO3AobykuZGF0YSh0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLHRoaXMpLHAuY29udGFpbnModGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMudGlwKXx8cChvKS5hcHBlbmRUbyhsKSxwKHRoaXMuZWxlbWVudCkudHJpZ2dlcih0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LklOU0VSVEVEKSx0aGlzLl9wb3BwZXI9bmV3IGJlKHRoaXMuZWxlbWVudCxvLHtwbGFjZW1lbnQ6YSxtb2RpZmllcnM6e29mZnNldDp0aGlzLl9nZXRPZmZzZXQoKSxmbGlwOntiZWhhdmlvcjp0aGlzLmNvbmZpZy5mYWxsYmFja1BsYWNlbWVudH0sYXJyb3c6e2VsZW1lbnQ6Rm59LHByZXZlbnRPdmVyZmxvdzp7Ym91bmRhcmllc0VsZW1lbnQ6dGhpcy5jb25maWcuYm91bmRhcnl9fSxvbkNyZWF0ZTpmdW5jdGlvbih0KXt0Lm9yaWdpbmFsUGxhY2VtZW50IT09dC5wbGFjZW1lbnQmJmUuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSh0KX0sb25VcGRhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSh0KX19KSxwKG8pLmFkZENsYXNzKGpuKSwib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmcChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9uKCJtb3VzZW92ZXIiLG51bGwscC5ub29wKTt2YXIgYz1mdW5jdGlvbigpe2UuY29uZmlnLmFuaW1hdGlvbiYmZS5fZml4VHJhbnNpdGlvbigpO3ZhciB0PWUuX2hvdmVyU3RhdGU7ZS5faG92ZXJTdGF0ZT1udWxsLHAoZS5lbGVtZW50KS50cmlnZ2VyKGUuY29uc3RydWN0b3IuRXZlbnQuU0hPV04pLHQ9PT14biYmZS5fbGVhdmUobnVsbCxlKX07aWYocCh0aGlzLnRpcCkuaGFzQ2xhc3MoSG4pKXt2YXIgaD1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMudGlwKTtwKHRoaXMudGlwKS5vbmUobS5UUkFOU0lUSU9OX0VORCxjKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChoKX1lbHNlIGMoKX19LHQuaGlkZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5nZXRUaXBFbGVtZW50KCksaT1wLkV2ZW50KHRoaXMuY29uc3RydWN0b3IuRXZlbnQuSElERSksbz1mdW5jdGlvbigpe2UuX2hvdmVyU3RhdGUhPT1MbiYmbi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobiksZS5fY2xlYW5UaXBDbGFzcygpLGUuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiKSxwKGUuZWxlbWVudCkudHJpZ2dlcihlLmNvbnN0cnVjdG9yLkV2ZW50LkhJRERFTiksbnVsbCE9PWUuX3BvcHBlciYmZS5fcG9wcGVyLmRlc3Ryb3koKSx0JiZ0KCl9O2lmKHAodGhpcy5lbGVtZW50KS50cmlnZ2VyKGkpLCFpLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZihwKG4pLnJlbW92ZUNsYXNzKGpuKSwib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmcChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9mZigibW91c2VvdmVyIixudWxsLHAubm9vcCksdGhpcy5fYWN0aXZlVHJpZ2dlcltVbl09ITEsdGhpcy5fYWN0aXZlVHJpZ2dlcltXbl09ITEsdGhpcy5fYWN0aXZlVHJpZ2dlcltNbl09ITEscCh0aGlzLnRpcCkuaGFzQ2xhc3MoSG4pKXt2YXIgcj1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KG4pO3Aobikub25lKG0uVFJBTlNJVElPTl9FTkQsbykuZW11bGF0ZVRyYW5zaXRpb25FbmQocil9ZWxzZSBvKCk7dGhpcy5faG92ZXJTdGF0ZT0iIn19LHQudXBkYXRlPWZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3BvcHBlciYmdGhpcy5fcG9wcGVyLnNjaGVkdWxlVXBkYXRlKCl9LHQuaXNXaXRoQ29udGVudD1mdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuZ2V0VGl0bGUoKSl9LHQuYWRkQXR0YWNobWVudENsYXNzPWZ1bmN0aW9uKHQpe3AodGhpcy5nZXRUaXBFbGVtZW50KCkpLmFkZENsYXNzKERuKyItIit0KX0sdC5nZXRUaXBFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGlwPXRoaXMudGlwfHxwKHRoaXMuY29uZmlnLnRlbXBsYXRlKVswXSx0aGlzLnRpcH0sdC5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRUaXBFbGVtZW50KCk7dGhpcy5zZXRFbGVtZW50Q29udGVudChwKHQucXVlcnlTZWxlY3RvckFsbChSbikpLHRoaXMuZ2V0VGl0bGUoKSkscCh0KS5yZW1vdmVDbGFzcyhIbisiICIram4pfSx0LnNldEVsZW1lbnRDb250ZW50PWZ1bmN0aW9uKHQsZSl7Im9iamVjdCIhPXR5cGVvZiBlfHwhZS5ub2RlVHlwZSYmIWUuanF1ZXJ5P3RoaXMuY29uZmlnLmh0bWw/KHRoaXMuY29uZmlnLnNhbml0aXplJiYoZT1ibihlLHRoaXMuY29uZmlnLndoaXRlTGlzdCx0aGlzLmNvbmZpZy5zYW5pdGl6ZUZuKSksdC5odG1sKGUpKTp0LnRleHQoZSk6dGhpcy5jb25maWcuaHRtbD9wKGUpLnBhcmVudCgpLmlzKHQpfHx0LmVtcHR5KCkuYXBwZW5kKGUpOnQudGV4dChwKGUpLnRleHQoKSl9LHQuZ2V0VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLW9yaWdpbmFsLXRpdGxlIik7cmV0dXJuIHR8fCh0PSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbmZpZy50aXRsZT90aGlzLmNvbmZpZy50aXRsZS5jYWxsKHRoaXMuZWxlbWVudCk6dGhpcy5jb25maWcudGl0bGUpLHR9LHQuX2dldE9mZnNldD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD17fTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb25maWcub2Zmc2V0P3QuZm49ZnVuY3Rpb24odCl7cmV0dXJuIHQub2Zmc2V0cz1sKHt9LHQub2Zmc2V0cyxlLmNvbmZpZy5vZmZzZXQodC5vZmZzZXRzLGUuZWxlbWVudCl8fHt9KSx0fTp0Lm9mZnNldD10aGlzLmNvbmZpZy5vZmZzZXQsdH0sdC5fZ2V0Q29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLmNvbmZpZy5jb250YWluZXI/ZG9jdW1lbnQuYm9keTptLmlzRWxlbWVudCh0aGlzLmNvbmZpZy5jb250YWluZXIpP3AodGhpcy5jb25maWcuY29udGFpbmVyKTpwKGRvY3VtZW50KS5maW5kKHRoaXMuY29uZmlnLmNvbnRhaW5lcil9LHQuX2dldEF0dGFjaG1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIE5uW3QudG9VcHBlckNhc2UoKV19LHQuX3NldExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBpPXRoaXM7dGhpcy5jb25maWcudHJpZ2dlci5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24odCl7aWYoImNsaWNrIj09PXQpcChpLmVsZW1lbnQpLm9uKGkuY29uc3RydWN0b3IuRXZlbnQuQ0xJQ0ssaS5jb25maWcuc2VsZWN0b3IsZnVuY3Rpb24odCl7cmV0dXJuIGkudG9nZ2xlKHQpfSk7ZWxzZSBpZih0IT09Qm4pe3ZhciBlPXQ9PT1Nbj9pLmNvbnN0cnVjdG9yLkV2ZW50Lk1PVVNFRU5URVI6aS5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU0lOLG49dD09PU1uP2kuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VMRUFWRTppLmNvbnN0cnVjdG9yLkV2ZW50LkZPQ1VTT1VUO3AoaS5lbGVtZW50KS5vbihlLGkuY29uZmlnLnNlbGVjdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBpLl9lbnRlcih0KX0pLm9uKG4saS5jb25maWcuc2VsZWN0b3IsZnVuY3Rpb24odCl7cmV0dXJuIGkuX2xlYXZlKHQpfSl9fSkscCh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoIi5tb2RhbCIpLm9uKCJoaWRlLmJzLm1vZGFsIixmdW5jdGlvbigpe2kuZWxlbWVudCYmaS5oaWRlKCl9KSx0aGlzLmNvbmZpZy5zZWxlY3Rvcj90aGlzLmNvbmZpZz1sKHt9LHRoaXMuY29uZmlnLHt0cmlnZ2VyOiJtYW51YWwiLHNlbGVjdG9yOiIifSk6dGhpcy5fZml4VGl0bGUoKX0sdC5fZml4VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10eXBlb2YgdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbC10aXRsZSIpOyh0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpfHwic3RyaW5nIiE9PXQpJiYodGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbC10aXRsZSIsdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgidGl0bGUiKXx8IiIpLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiIikpfSx0Ll9lbnRlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY29uc3RydWN0b3IuREFUQV9LRVk7KGU9ZXx8cCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobikpfHwoZT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0LmN1cnJlbnRUYXJnZXQsdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSkscCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobixlKSksdCYmKGUuX2FjdGl2ZVRyaWdnZXJbImZvY3VzaW4iPT09dC50eXBlP1duOk1uXT0hMCkscChlLmdldFRpcEVsZW1lbnQoKSkuaGFzQ2xhc3Moam4pfHxlLl9ob3ZlclN0YXRlPT09TG4/ZS5faG92ZXJTdGF0ZT1MbjooY2xlYXJUaW1lb3V0KGUuX3RpbWVvdXQpLGUuX2hvdmVyU3RhdGU9TG4sZS5jb25maWcuZGVsYXkmJmUuY29uZmlnLmRlbGF5LnNob3c/ZS5fdGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5faG92ZXJTdGF0ZT09PUxuJiZlLnNob3coKX0sZS5jb25maWcuZGVsYXkuc2hvdyk6ZS5zaG93KCkpfSx0Ll9sZWF2ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY29uc3RydWN0b3IuREFUQV9LRVk7KGU9ZXx8cCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobikpfHwoZT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0LmN1cnJlbnRUYXJnZXQsdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSkscCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobixlKSksdCYmKGUuX2FjdGl2ZVRyaWdnZXJbImZvY3Vzb3V0Ij09PXQudHlwZT9XbjpNbl09ITEpLGUuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKXx8KGNsZWFyVGltZW91dChlLl90aW1lb3V0KSxlLl9ob3ZlclN0YXRlPXhuLGUuY29uZmlnLmRlbGF5JiZlLmNvbmZpZy5kZWxheS5oaWRlP2UuX3RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX2hvdmVyU3RhdGU9PT14biYmZS5oaWRlKCl9LGUuY29uZmlnLmRlbGF5LmhpZGUpOmUuaGlkZSgpKX0sdC5faXNXaXRoQWN0aXZlVHJpZ2dlcj1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9hY3RpdmVUcmlnZ2VyKWlmKHRoaXMuX2FjdGl2ZVRyaWdnZXJbdF0pcmV0dXJuITA7cmV0dXJuITF9LHQuX2dldENvbmZpZz1mdW5jdGlvbih0KXt2YXIgZT1wKHRoaXMuZWxlbWVudCkuZGF0YSgpO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpey0xIT09QW4uaW5kZXhPZih0KSYmZGVsZXRlIGVbdF19KSwibnVtYmVyIj09dHlwZW9mKHQ9bCh7fSx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsZSwib2JqZWN0Ij09dHlwZW9mIHQmJnQ/dDp7fSkpLmRlbGF5JiYodC5kZWxheT17c2hvdzp0LmRlbGF5LGhpZGU6dC5kZWxheX0pLCJudW1iZXIiPT10eXBlb2YgdC50aXRsZSYmKHQudGl0bGU9dC50aXRsZS50b1N0cmluZygpKSwibnVtYmVyIj09dHlwZW9mIHQuY29udGVudCYmKHQuY29udGVudD10LmNvbnRlbnQudG9TdHJpbmcoKSksbS50eXBlQ2hlY2tDb25maWcod24sdCx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSx0LnNhbml0aXplJiYodC50ZW1wbGF0ZT1ibih0LnRlbXBsYXRlLHQud2hpdGVMaXN0LHQuc2FuaXRpemVGbikpLHR9LHQuX2dldERlbGVnYXRlQ29uZmlnPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5jb25maWcpZm9yKHZhciBlIGluIHRoaXMuY29uZmlnKXRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtlXSE9PXRoaXMuY29uZmlnW2VdJiYodFtlXT10aGlzLmNvbmZpZ1tlXSk7cmV0dXJuIHR9LHQuX2NsZWFuVGlwQ2xhc3M9ZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMuZ2V0VGlwRWxlbWVudCgpKSxlPXQuYXR0cigiY2xhc3MiKS5tYXRjaChJbik7bnVsbCE9PWUmJmUubGVuZ3RoJiZ0LnJlbW92ZUNsYXNzKGUuam9pbigiIikpfSx0Ll9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5pbnN0YW5jZTt0aGlzLnRpcD1lLnBvcHBlcix0aGlzLl9jbGVhblRpcENsYXNzKCksdGhpcy5hZGRBdHRhY2htZW50Q2xhc3ModGhpcy5fZ2V0QXR0YWNobWVudCh0LnBsYWNlbWVudCkpfSx0Ll9maXhUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRUaXBFbGVtZW50KCksZT10aGlzLmNvbmZpZy5hbmltYXRpb247bnVsbD09PXQuZ2V0QXR0cmlidXRlKCJ4LXBsYWNlbWVudCIpJiYocCh0KS5yZW1vdmVDbGFzcyhIbiksdGhpcy5jb25maWcuYW5pbWF0aW9uPSExLHRoaXMuaGlkZSgpLHRoaXMuc2hvdygpLHRoaXMuY29uZmlnLmFuaW1hdGlvbj1lKX0saS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLmRhdGEoQ24pLGU9Im9iamVjdCI9PXR5cGVvZiBuJiZuO2lmKCh0fHwhL2Rpc3Bvc2V8aGlkZS8udGVzdChuKSkmJih0fHwodD1uZXcgaSh0aGlzLGUpLHAodGhpcykuZGF0YShDbix0KSksInN0cmluZyI9PXR5cGVvZiBuKSl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJytuKyciJyk7dFtuXSgpfX0pfSxzKGksbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMy4xIn19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigpe3JldHVybiBrbn19LHtrZXk6Ik5BTUUiLGdldDpmdW5jdGlvbigpe3JldHVybiB3bn19LHtrZXk6IkRBVEFfS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQ259fSx7a2V5OiJFdmVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFBufX0se2tleToiRVZFTlRfS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVG59fSx7a2V5OiJEZWZhdWx0VHlwZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9ufX1dKSxpfSgpO3AuZm5bd25dPXFuLl9qUXVlcnlJbnRlcmZhY2UscC5mblt3bl0uQ29uc3RydWN0b3I9cW4scC5mblt3bl0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBwLmZuW3duXT1Tbixxbi5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgS249InBvcG92ZXIiLFFuPSJicy5wb3BvdmVyIixWbj0iLiIrUW4sWW49cC5mbltLbl0sem49ImJzLXBvcG92ZXIiLFhuPW5ldyBSZWdFeHA="
}
Changelog:
{
"2020.04.17 15:38": "base64:LnRlc3QodC50YXJnZXQudGFnTmFtZSl8fCJrZXl1cCI9PT10LnR5cGUmJjk9PT10LndoaWNoKSYmcC5jb250YWlucyhvLHQudGFyZ2V0KSkpe3ZhciBsPXAuRXZlbnQoQWUuSElERSxzKTtwKG8pLnRyaWdnZXIobCksbC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZwKGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub2ZmKCJtb3VzZW92ZXIiLG51bGwscC5ub29wKSxlW25dLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsImZhbHNlIikscChhKS5yZW1vdmVDbGFzcyhOZSkscChvKS5yZW1vdmVDbGFzcyhOZSkudHJpZ2dlcihwLkV2ZW50KEFlLkhJRERFTixzKSkpfX19fSxjLl9nZXRQYXJlbnRGcm9tRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZSxuPW0uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0KTtyZXR1cm4gbiYmKGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKSksZXx8dC5wYXJlbnROb2RlfSxjLl9kYXRhQXBpS2V5ZG93bkhhbmRsZXI9ZnVuY3Rpb24odCl7aWYoKC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QodC50YXJnZXQudGFnTmFtZSk/ISgzMj09PXQud2hpY2h8fDI3IT09dC53aGljaCYmKDQwIT09dC53aGljaCYmMzghPT10LndoaWNofHxwKHQudGFyZ2V0KS5jbG9zZXN0KEZlKS5sZW5ndGgpKTpJZS50ZXN0KHQud2hpY2gpKSYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLCF0aGlzLmRpc2FibGVkJiYhcCh0aGlzKS5oYXNDbGFzcyhPZSkpKXt2YXIgZT1jLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzKSxuPXAoZSkuaGFzQ2xhc3MoTmUpO2lmKG4mJighbnx8MjchPT10LndoaWNoJiYzMiE9PXQud2hpY2gpKXt2YXIgaT1bXS5zbGljZS5jYWxsKGUucXVlcnlTZWxlY3RvckFsbChXZSkpO2lmKDAhPT1pLmxlbmd0aCl7dmFyIG89aS5pbmRleE9mKHQudGFyZ2V0KTszOD09PXQud2hpY2gmJjA8byYmby0tLDQwPT09dC53aGljaCYmbzxpLmxlbmd0aC0xJiZvKyssbzwwJiYobz0wKSxpW29dLmZvY3VzKCl9fWVsc2V7aWYoMjc9PT10LndoaWNoKXt2YXIgcj1lLnF1ZXJ5U2VsZWN0b3IoamUpO3AocikudHJpZ2dlcigiZm9jdXMiKX1wKHRoaXMpLnRyaWdnZXIoImNsaWNrIil9fX0scyhjLG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjMuMSJ9fSx7a2V5OiJEZWZhdWx0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWWV9fSx7a2V5OiJEZWZhdWx0VHlwZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHplfX1dKSxjfSgpO3AoZG9jdW1lbnQpLm9uKEFlLktFWURPV05fREFUQV9BUEksamUsWGUuX2RhdGFBcGlLZXlkb3duSGFuZGxlcikub24oQWUuS0VZRE9XTl9EQVRBX0FQSSxGZSxYZS5fZGF0YUFwaUtleWRvd25IYW5kbGVyKS5vbihBZS5DTElDS19EQVRBX0FQSSsiICIrQWUuS0VZVVBfREFUQV9BUEksWGUuX2NsZWFyTWVudXMpLm9uKEFlLkNMSUNLX0RBVEFfQVBJLGplLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLFhlLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChwKHRoaXMpLCJ0b2dnbGUiKX0pLm9uKEFlLkNMSUNLX0RBVEFfQVBJLFJlLGZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCl9KSxwLmZuW3dlXT1YZS5falF1ZXJ5SW50ZXJmYWNlLHAuZm5bd2VdLkNvbnN0cnVjdG9yPVhlLHAuZm5bd2VdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcC5mblt3ZV09RGUsWGUuX2pRdWVyeUludGVyZmFjZX07dmFyIEdlPSJtb2RhbCIsJGU9ImJzLm1vZGFsIixKZT0iLiIrJGUsWmU9cC5mbltHZV0sdG49e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwLGZvY3VzOiEwLHNob3c6ITB9LGVuPXtiYWNrZHJvcDoiKGJvb2xlYW58c3RyaW5nKSIsa2V5Ym9hcmQ6ImJvb2xlYW4iLGZvY3VzOiJib29sZWFuIixzaG93OiJib29sZWFuIn0sbm49e0hJREU6ImhpZGUiK0plLEhJRERFTjoiaGlkZGVuIitKZSxTSE9XOiJzaG93IitKZSxTSE9XTjoic2hvd24iK0plLEZPQ1VTSU46ImZvY3VzaW4iK0plLFJFU0laRToicmVzaXplIitKZSxDTElDS19ESVNNSVNTOiJjbGljay5kaXNtaXNzIitKZSxLRVlET1dOX0RJU01JU1M6ImtleWRvd24uZGlzbWlzcyIrSmUsTU9VU0VVUF9ESVNNSVNTOiJtb3VzZXVwLmRpc21pc3MiK0plLE1PVVNFRE9XTl9ESVNNSVNTOiJtb3VzZWRvd24uZGlzbWlzcyIrSmUsQ0xJQ0tfREFUQV9BUEk6ImNsaWNrIitKZSsiLmRhdGEtYXBpIn0sb249Im1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIixybj0ibW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUiLHNuPSJtb2RhbC1iYWNrZHJvcCIsYW49Im1vZGFsLW9wZW4iLGxuPSJmYWRlIixjbj0ic2hvdyIsaG49Ii5tb2RhbC1kaWFsb2ciLHVuPSIubW9kYWwtYm9keSIsZm49J1tkYXRhLXRvZ2dsZT0ibW9kYWwiXScsZG49J1tkYXRhLWRpc21pc3M9Im1vZGFsIl0nLHBuPSIuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wIixtbj0iLnN0aWNreS10b3AiLGduPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy5fZWxlbWVudD10LHRoaXMuX2RpYWxvZz10LnF1ZXJ5U2VsZWN0b3IoaG4pLHRoaXMuX2JhY2tkcm9wPW51bGwsdGhpcy5faXNTaG93bj0hMSx0aGlzLl9pc0JvZHlPdmVyZmxvd2luZz0hMSx0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrPSExLHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl9zY3JvbGxiYXJXaWR0aD0wfXZhciB0PW8ucHJvdG90eXBlO3JldHVybiB0LnRvZ2dsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3codCl9LHQuc2hvdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCF0aGlzLl9pc1Nob3duJiYhdGhpcy5faXNUcmFuc2l0aW9uaW5nKXtwKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKGxuKSYmKHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMCk7dmFyIG49cC5FdmVudChubi5TSE9XLHtyZWxhdGVkVGFyZ2V0OnR9KTtwKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobiksdGhpcy5faXNTaG93bnx8bi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KHRoaXMuX2lzU2hvd249ITAsdGhpcy5fY2hlY2tTY3JvbGxiYXIoKSx0aGlzLl9zZXRTY3JvbGxiYXIoKSx0aGlzLl9hZGp1c3REaWFsb2coKSx0aGlzLl9zZXRFc2NhcGVFdmVudCgpLHRoaXMuX3NldFJlc2l6ZUV2ZW50KCkscCh0aGlzLl9lbGVtZW50KS5vbihubi5DTElDS19ESVNNSVNTLGRuLGZ1bmN0aW9uKHQpe3JldHVybiBlLmhpZGUodCl9KSxwKHRoaXMuX2RpYWxvZykub24obm4uTU9VU0VET1dOX0RJU01JU1MsZnVuY3Rpb24oKXtwKGUuX2VsZW1lbnQpLm9uZShubi5NT1VTRVVQX0RJU01JU1MsZnVuY3Rpb24odCl7cCh0LnRhcmdldCkuaXMoZS5fZWxlbWVudCkmJihlLl9pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5fc2hvd0JhY2tkcm9wKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3Nob3dFbGVtZW50KHQpfSkpfX0sdC5oaWRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodCYmdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2lzU2hvd24mJiF0aGlzLl9pc1RyYW5zaXRpb25pbmcpe3ZhciBuPXAuRXZlbnQobm4uSElERSk7aWYocCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKG4pLHRoaXMuX2lzU2hvd24mJiFuLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt0aGlzLl9pc1Nob3duPSExO3ZhciBpPXAodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MobG4pO2lmKGkmJih0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITApLHRoaXMuX3NldEVzY2FwZUV2ZW50KCksdGhpcy5fc2V0UmVzaXplRXZlbnQoKSxwKGRvY3VtZW50KS5vZmYobm4uRk9DVVNJTikscCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhjbikscCh0aGlzLl9lbGVtZW50KS5vZmYobm4uQ0xJQ0tfRElTTUlTUykscCh0aGlzLl9kaWFsb2cpLm9mZihubi5NT1VTRURPV05fRElTTUlTUyksaSl7dmFyIG89bS5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtwKHRoaXMuX2VsZW1lbnQpLm9uZShtLlRSQU5TSVRJT05fRU5ELGZ1bmN0aW9uKHQpe3JldHVybiBlLl9oaWRlTW9kYWwodCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChvKX1lbHNlIHRoaXMuX2hpZGVNb2RhbCgpfX19LHQuZGlzcG9zZT1mdW5jdGlvbigpe1t3aW5kb3csdGhpcy5fZWxlbWVudCx0aGlzLl9kaWFsb2ddLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHAodCkub2ZmKEplKX0pLHAoZG9jdW1lbnQpLm9mZihubi5GT0NVU0lOKSxwLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwkZSksdGhpcy5fY29uZmlnPW51bGwsdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuX2RpYWxvZz1udWxsLHRoaXMuX2JhY2tkcm9wPW51bGwsdGhpcy5faXNTaG93bj1udWxsLHRoaXMuX2lzQm9keU92ZXJmbG93aW5nPW51bGwsdGhpcy5faWdub3JlQmFja2Ryb3BDbGljaz1udWxsLHRoaXMuX2lzVHJhbnNpdGlvbmluZz1udWxsLHRoaXMuX3Njcm9sbGJhcldpZHRoPW51bGx9LHQuaGFuZGxlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0RGlhbG9nKCl9LHQuX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdD1sKHt9LHRuLHQpLG0udHlwZUNoZWNrQ29uZmlnKEdlLHQsZW4pLHR9LHQuX3Nob3dFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1wKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKGxuKTt0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfHxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLW1vZGFsIiwhMCkscCh0aGlzLl9kaWFsb2cpLmhhc0NsYXNzKG9uKT90aGlzLl9kaWFsb2cucXVlcnlTZWxlY3Rvcih1bikuc2Nyb2xsVG9wPTA6dGhpcy5fZWxlbWVudC5zY3JvbGxUb3A9MCxuJiZtLnJlZmxvdyh0aGlzLl9lbGVtZW50KSxwKHRoaXMuX2VsZW1lbnQpLmFkZENsYXNzKGNuKSx0aGlzLl9jb25maWcuZm9jdXMmJnRoaXMuX2VuZm9yY2VGb2N1cygpO3ZhciBpPXAuRXZlbnQobm4uU0hPV04se3JlbGF0ZWRUYXJnZXQ6dH0pLG89ZnVuY3Rpb24oKXtlLl9jb25maWcuZm9jdXMmJmUuX2VsZW1lbnQuZm9jdXMoKSxlLl9pc1RyYW5zaXRpb25pbmc9ITEscChlLl9lbGVtZW50KS50cmlnZ2VyKGkpfTtpZihuKXt2YXIgcj1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2RpYWxvZyk7cCh0aGlzLl9kaWFsb2cpLm9uZShtLlRSQU5TSVRJT05fRU5ELG8pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHIpfWVsc2UgbygpfSx0Ll9lbmZvcmNlRm9jdXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3AoZG9jdW1lbnQpLm9mZihubi5GT0NVU0lOKS5vbihubi5GT0NVU0lOLGZ1bmN0aW9uKHQpe2RvY3VtZW50IT09dC50YXJnZXQmJmUuX2VsZW1lbnQhPT10LnRhcmdldCYmMD09PXAoZS5fZWxlbWVudCkuaGFzKHQudGFyZ2V0KS5sZW5ndGgmJmUuX2VsZW1lbnQuZm9jdXMoKX0pfSx0Ll9zZXRFc2NhcGVFdmVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5faXNTaG93biYmdGhpcy5fY29uZmlnLmtleWJvYXJkP3AodGhpcy5fZWxlbWVudCkub24obm4uS0VZRE9XTl9ESVNNSVNTLGZ1bmN0aW9uKHQpezI3PT09dC53aGljaCYmKHQucHJldmVudERlZmF1bHQoKSxlLmhpZGUoKSl9KTp0aGlzLl9pc1Nob3dufHxwKHRoaXMuX2VsZW1lbnQpLm9mZihubi5LRVlET1dOX0RJU01JU1MpfSx0Ll9zZXRSZXNpemVFdmVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5faXNTaG93bj9wKHdpbmRvdykub24obm4uUkVTSVpFLGZ1bmN0aW9uKHQpe3JldHVybiBlLmhhbmRsZVVwZGF0ZSh0KX0pOnAod2luZG93KS5vZmYobm4uUkVTSVpFKX0sdC5faGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApLHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW1vZGFsIiksdGhpcy5faXNUcmFuc2l0aW9uaW5nPSExLHRoaXMuX3Nob3dCYWNrZHJvcChmdW5jdGlvbigpe3AoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3MoYW4pLHQuX3Jlc2V0QWRqdXN0bWVudHMoKSx0Ll9yZXNldFNjcm9sbGJhcigpLHAodC5fZWxlbWVudCkudHJpZ2dlcihubi5ISURERU4pfSl9LHQuX3JlbW92ZUJhY2tkcm9wPWZ1bmN0aW9uKCl7dGhpcy5fYmFja2Ryb3AmJihwKHRoaXMuX2JhY2tkcm9wKS5yZW1vdmUoKSx0aGlzLl9iYWNrZHJvcD1udWxsKX0sdC5fc2hvd0JhY2tkcm9wPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1wKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKGxuKT9sbjoiIjtpZih0aGlzLl9pc1Nob3duJiZ0aGlzLl9jb25maWcuYmFja2Ryb3Ape2lmKHRoaXMuX2JhY2tkcm9wPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2JhY2tkcm9wLmNsYXNzTmFtZT1zbixuJiZ0aGlzLl9iYWNrZHJvcC5jbGFzc0xpc3QuYWRkKG4pLHAodGhpcy5fYmFja2Ryb3ApLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLHAodGhpcy5fZWxlbWVudCkub24obm4uQ0xJQ0tfRElTTUlTUyxmdW5jdGlvbih0KXtlLl9pZ25vcmVCYWNrZHJvcENsaWNrP2UuX2lnbm9yZUJhY2tkcm9wQ2xpY2s9ITE6dC50YXJnZXQ9PT10LmN1cnJlbnRUYXJnZXQmJigic3RhdGljIj09PWUuX2NvbmZpZy5iYWNrZHJvcD9lLl9lbGVtZW50LmZvY3VzKCk6ZS5oaWRlKCkpfSksbiYmbS5yZWZsb3codGhpcy5fYmFja2Ryb3ApLHAodGhpcy5fYmFja2Ryb3ApLmFkZENsYXNzKGNuKSwhdClyZXR1cm47aWYoIW4pcmV0dXJuIHZvaWQgdCgpO3ZhciBpPW0uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO3AodGhpcy5fYmFja2Ryb3ApLm9uZShtLlRSQU5TSVRJT05fRU5ELHQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkpfWVsc2UgaWYoIXRoaXMuX2lzU2hvd24mJnRoaXMuX2JhY2tkcm9wKXtwKHRoaXMuX2JhY2tkcm9wKS5yZW1vdmVDbGFzcyhjbik7dmFyIG89ZnVuY3Rpb24oKXtlLl9yZW1vdmVCYWNrZHJvcCgpLHQmJnQoKX07aWYocCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhsbikpe3ZhciByPW0uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO3AodGhpcy5fYmFja2Ryb3ApLm9uZShtLlRSQU5TSVRJT05fRU5ELG8pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHIpfWVsc2UgbygpfWVsc2UgdCYmdCgpfSx0Ll9hZGp1c3REaWFsb2c9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OyF0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyYmdCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQ9dGhpcy5fc2Nyb2xsYmFyV2lkdGgrInB4IiksdGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcmJiF0JiYodGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQ9dGhpcy5fc2Nyb2xsYmFyV2lkdGgrInB4Iil9LHQuX3Jlc2V0QWRqdXN0bWVudHM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0PSIiLHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0PSIifSx0Ll9jaGVja1Njcm9sbGJhcj1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5faXNCb2R5T3ZlcmZsb3dpbmc9dC5sZWZ0K3QucmlnaHQ8d2luZG93LmlubmVyV2lkdGgsdGhpcy5fc2Nyb2xsYmFyV2lkdGg9dGhpcy5fZ2V0U2Nyb2xsYmFyV2lkdGgoKX0sdC5fc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIG89dGhpcztpZih0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyl7dmFyIHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHBuKSksZT1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwobW4pKTtwKHQpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN0eWxlLnBhZGRpbmdSaWdodCxpPXAoZSkuY3NzKCJwYWRkaW5nLXJpZ2h0Iik7cChlKS5kYXRhKCJwYWRkaW5nLXJpZ2h0IixuKS5jc3MoInBhZGRpbmctcmlnaHQiLHBhcnNlRmxvYXQoaSkrby5fc2Nyb2xsYmFyV2lkdGgrInB4Iil9KSxwKGUpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN0eWxlLm1hcmdpblJpZ2h0LGk9cChlKS5jc3MoIm1hcmdpbi1yaWdodCIpO3AoZSkuZGF0YSgibWFyZ2luLXJpZ2h0IixuKS5jc3MoIm1hcmdpbi1yaWdodCIscGFyc2VGbG9hdChpKS1vLl9zY3JvbGxiYXJXaWR0aCsicHgiKX0pO3ZhciBuPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0LGk9cChkb2N1bWVudC5ib2R5KS5jc3MoInBhZGRpbmctcmlnaHQiKTtwKGRvY3VtZW50LmJvZHkpLmRhdGEoInBhZGRpbmctcmlnaHQiLG4pLmNzcygicGFkZGluZy1yaWdodCIscGFyc2VGbG9hdChpKSt0aGlzLl9zY3JvbGxiYXJXaWR0aCsicHgiKX1wKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKGFuKX0sdC5fcmVzZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgdD1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocG4pKTtwKHQpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1wKGUpLmRhdGEoInBhZGRpbmctcmlnaHQiKTtwKGUpLnJlbW92ZURhdGEoInBhZGRpbmctcmlnaHQiKSxlLnN0eWxlLnBhZGRpbmdSaWdodD1ufHwiIn0pO3ZhciBlPVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIittbikpO3AoZSkuZWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPXAoZSkuZGF0YSgibWFyZ2luLXJpZ2h0Iik7InVuZGVmaW5lZCIhPXR5cGVvZiBuJiZwKGUpLmNzcygibWFyZ2luLXJpZ2h0IixuKS5yZW1vdmVEYXRhKCJtYXJnaW4tcmlnaHQiKX0pO3ZhciBuPXAoZG9jdW1lbnQuYm9keSkuZGF0YSgicGFkZGluZy1yaWdodCIpO3AoZG9jdW1lbnQuYm9keSkucmVtb3ZlRGF0YSgicGFkZGluZy1yaWdodCIpLGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PW58fCIifSx0Ll9nZXRTY3JvbGxiYXJXaWR0aD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPXJuLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aC10LmNsaWVudFdpZHRoO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLGV9LG8uX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihuLGkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLmRhdGEoJGUpLGU9bCh7fSx0bixwKHRoaXMpLmRhdGEoKSwib2JqZWN0Ij09dHlwZW9mIG4mJm4/bjp7fSk7aWYodHx8KHQ9bmV3IG8odGhpcyxlKSxwKHRoaXMpLmRhdGEoJGUsdCkpLCJzdHJpbmciPT10eXBlb2Ygbil7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJytuKyciJyk7dFtuXShpKX1lbHNlIGUuc2hvdyYmdC5zaG93KGkpfSl9LHMobyxudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iNC4zLjEifX0se2tleToiRGVmYXVsdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRufX1dKSxvfSgpO3AoZG9jdW1lbnQpLm9uKG5uLkNMSUNLX0RBVEFfQVBJLGZuLGZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcyxpPW0uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKTtpJiYoZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGkpKTt2YXIgbz1wKGUpLmRhdGEoJGUpPyJ0b2dnbGUiOmwoe30scChlKS5kYXRhKCkscCh0aGlzKS5kYXRhKCkpOyJBIiE9PXRoaXMudGFnTmFtZSYmIkFSRUEiIT09dGhpcy50YWdOYW1lfHx0LnByZXZlbnREZWZhdWx0KCk7dmFyIHI9cChlKS5vbmUobm4uU0hPVyxmdW5jdGlvbih0KXt0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHxyLm9uZShubi5ISURERU4sZnVuY3Rpb24oKXtwKG4pLmlzKCI6dmlzaWJsZSIpJiZuLmZvY3VzKCl9KX0pO2duLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChwKGUpLG8sdGhpcyl9KSxwLmZuW0dlXT1nbi5falF1ZXJ5SW50ZXJmYWNlLHAuZm5bR2VdLkNvbnN0cnVjdG9yPWduLHAuZm5bR2VdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcC5mbltHZV09WmUsZ24uX2pRdWVyeUludGVyZmFjZX07dmFyIF9uPVsiYmFja2dyb3VuZCIsImNpdGUiLCJocmVmIiwiaXRlbXR5cGUiLCJsb25nZGVzYyIsInBvc3RlciIsInNyYyIsInhsaW5rOmhyZWYiXSx2bj17IioiOlsiY2xhc3MiLCJkaXIiLCJpZCIsImxhbmciLCJyb2xlIiwvXmFyaWEtW1x3LV0qJC9pXSxhOlsidGFyZ2V0IiwiaHJlZiIsInRpdGxlIiwicmVsIl0sYXJlYTpbXSxiOltdLGJyOltdLGNvbDpbXSxjb2RlOltdLGRpdjpbXSxlbTpbXSxocjpbXSxoMTpbXSxoMjpbXSxoMzpbXSxoNDpbXSxoNTpbXSxoNjpbXSxpOltdLGltZzpbInNyYyIsImFsdCIsInRpdGxlIiwid2lkdGgiLCJoZWlnaHQiXSxsaTpbXSxvbDpbXSxwOltdLHByZTpbXSxzOltdLHNtYWxsOltdLHNwYW46W10sc3ViOltdLHN1cDpbXSxzdHJvbmc6W10sdTpbXSx1bDpbXX0seW49L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZSk6fFteJjovPyNdKig/OlsvPyNdfCQpKS9naSxFbj0vXmRhdGE6KD86aW1hZ2VcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1wvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05Ky9dKz0qJC9pO2Z1bmN0aW9uIGJuKHQscyxlKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIHQ7aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUpcmV0dXJuIGUodCk7Zm9yKHZhciBuPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQsInRleHQvaHRtbCIpLGE9T2JqZWN0LmtleXMocyksbD1bXS5zbGljZS5jYWxsKG4uYm9keS5xdWVyeVNlbGVjdG9yQWxsKCIqIikpLGk9ZnVuY3Rpb24odCxlKXt2YXIgbj1sW3RdLGk9bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKC0xPT09YS5pbmRleE9mKG4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSwiY29udGludWUiO3ZhciBvPVtdLnNsaWNlLmNhbGwobi5hdHRyaWJ1dGVzKSxyPVtdLmNvbmNhdChzWyIqIl18fFtdLHNbaV18fFtdKTtvLmZvckVhY2goZnVuY3Rpb24odCl7KGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKC0xIT09ZS5pbmRleE9mKG4pKXJldHVybi0xPT09X24uaW5kZXhPZihuKXx8Qm9vbGVhbih0Lm5vZGVWYWx1ZS5tYXRjaCh5bil8fHQubm9kZVZhbHVlLm1hdGNoKEVuKSk7Zm9yKHZhciBpPWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfSksbz0wLHI9aS5sZW5ndGg7bzxyO28rKylpZihuLm1hdGNoKGlbb10pKXJldHVybiEwO3JldHVybiExfSkodCxyKXx8bi5yZW1vdmVBdHRyaWJ1dGUodC5ub2RlTmFtZSl9KX0sbz0wLHI9bC5sZW5ndGg7bzxyO28rKylpKG8pO3JldHVybiBuLmJvZHkuaW5uZXJIVE1MfXZhciB3bj0idG9vbHRpcCIsQ249ImJzLnRvb2x0aXAiLFRuPSIuIitDbixTbj1wLmZuW3duXSxEbj0iYnMtdG9vbHRpcCIsSW49bmV3IFJlZ0V4cCgiKF58XFxzKSIrRG4rIlxcUysiLCJnIiksQW49WyJzYW5pdGl6ZSIsIndoaXRlTGlzdCIsInNhbml0aXplRm4iXSxPbj17YW5pbWF0aW9uOiJib29sZWFuIix0ZW1wbGF0ZToic3RyaW5nIix0aXRsZToiKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSIsdHJpZ2dlcjoic3RyaW5nIixkZWxheToiKG51bWJlcnxvYmplY3QpIixodG1sOiJib29sZWFuIixzZWxlY3RvcjoiKHN0cmluZ3xib29sZWFuKSIscGxhY2VtZW50OiIoc3RyaW5nfGZ1bmN0aW9uKSIsb2Zmc2V0OiIobnVtYmVyfHN0cmluZ3xmdW5jdGlvbikiLGNvbnRhaW5lcjoiKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pIixmYWxsYmFja1BsYWNlbWVudDoiKHN0cmluZ3xhcnJheSkiLGJvdW5kYXJ5OiIoc3RyaW5nfGVsZW1lbnQpIixzYW5pdGl6ZToiYm9vbGVhbiIsc2FuaXRpemVGbjoiKG51bGx8ZnVuY3Rpb24pIix3aGl0ZUxpc3Q6Im9iamVjdCJ9LE5uPXtBVVRPOiJhdXRvIixUT1A6InRvcCIsUklHSFQ6InJpZ2h0IixCT1RUT006ImJvdHRvbSIsTEVGVDoibGVmdCJ9LGtuPXthbmltYXRpb246ITAsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48ZGl2IGNsYXNzPSJ0b29sdGlwLWlubmVyIj48L2Rpdj48L2Rpdj4nLHRyaWdnZXI6ImhvdmVyIGZvY3VzIix0aXRsZToiIixkZWxheTowLGh0bWw6ITEsc2VsZWN0b3I6ITEscGxhY2VtZW50OiJ0b3AiLG9mZnNldDowLGNvbnRhaW5lcjohMSxmYWxsYmFja1BsYWNlbWVudDoiZmxpcCIsYm91bmRhcnk6InNjcm9sbFBhcmVudCIsc2FuaXRpemU6ITAsc2FuaXRpemVGbjpudWxsLHdoaXRlTGlzdDp2bn0sTG49InNob3ciLHhuPSJvdXQiLFBuPXtISURFOiJoaWRlIitUbixISURERU46ImhpZGRlbiIrVG4sU0hPVzoic2hvdyIrVG4sU0hPV046InNob3duIitUbixJTlNFUlRFRDoiaW5zZXJ0ZWQiK1RuLENMSUNLOiJjbGljayIrVG4sRk9DVVNJTjoiZm9jdXNpbiIrVG4sRk9DVVNPVVQ6ImZvY3Vzb3V0IitUbixNT1VTRUVOVEVSOiJtb3VzZWVudGVyIitUbixNT1VTRUxFQVZFOiJtb3VzZWxlYXZlIitUbn0sSG49ImZhZGUiLGpuPSJzaG93IixSbj0iLnRvb2x0aXAtaW5uZXIiLEZuPSIuYXJyb3ciLE1uPSJob3ZlciIsV249ImZvY3VzIixVbj0iY2xpY2siLEJuPSJtYW51YWwiLHFuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0LGUpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgYmUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9vdHN0cmFwJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIuanMgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy8pIik7dGhpcy5faXNFbmFibGVkPSEwLHRoaXMuX3RpbWVvdXQ9MCx0aGlzLl9ob3ZlclN0YXRlPSIiLHRoaXMuX2FjdGl2ZVRyaWdnZXI9e30sdGhpcy5fcG9wcGVyPW51bGwsdGhpcy5lbGVtZW50PXQsdGhpcy5jb25maWc9dGhpcy5fZ2V0Q29uZmlnKGUpLHRoaXMudGlwPW51bGwsdGhpcy5fc2V0TGlzdGVuZXJzKCl9dmFyIHQ9aS5wcm90b3R5cGU7cmV0dXJuIHQuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5faXNFbmFibGVkPSEwfSx0LmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9pc0VuYWJsZWQ9ITF9LHQudG9nZ2xlRW5hYmxlZD1mdW5jdGlvbigpe3RoaXMuX2lzRW5hYmxlZD0hdGhpcy5faXNFbmFibGVkfSx0LnRvZ2dsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9pc0VuYWJsZWQpaWYodCl7dmFyIGU9dGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSxuPXAodC5jdXJyZW50VGFyZ2V0KS5kYXRhKGUpO258fChuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHQuY3VycmVudFRhcmdldCx0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKSxwKHQuY3VycmVudFRhcmdldCkuZGF0YShlLG4pKSxuLl9hY3RpdmVUcmlnZ2VyLmNsaWNrPSFuLl9hY3RpdmVUcmlnZ2VyLmNsaWNrLG4uX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKT9uLl9lbnRlcihudWxsLG4pOm4uX2xlYXZlKG51bGwsbil9ZWxzZXtpZihwKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhqbikpcmV0dXJuIHZvaWQgdGhpcy5fbGVhdmUobnVsbCx0aGlzKTt0aGlzLl9lbnRlcihudWxsLHRoaXMpfX0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHAucmVtb3ZlRGF0YSh0aGlzLmVsZW1lbnQsdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSkscCh0aGlzLmVsZW1lbnQpLm9mZih0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSkscCh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoIi5tb2RhbCIpLm9mZigiaGlkZS5icy5tb2RhbCIpLHRoaXMudGlwJiZwKHRoaXMudGlwKS5yZW1vdmUoKSx0aGlzLl9pc0VuYWJsZWQ9bnVsbCx0aGlzLl90aW1lb3V0PW51bGwsdGhpcy5faG92ZXJTdGF0ZT1udWxsLCh0aGlzLl9hY3RpdmVUcmlnZ2VyPW51bGwpIT09dGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuZGVzdHJveSgpLHRoaXMuX3BvcHBlcj1udWxsLHRoaXMuZWxlbWVudD1udWxsLHRoaXMuY29uZmlnPW51bGwsdGhpcy50aXA9bnVsbH0sdC5zaG93PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZigibm9uZSI9PT1wKHRoaXMuZWxlbWVudCkuY3NzKCJkaXNwbGF5IikpdGhyb3cgbmV3IEVycm9yKCJQbGVhc2UgdXNlIHNob3cgb24gdmlzaWJsZSBlbGVtZW50cyIpO3ZhciB0PXAuRXZlbnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XKTtpZih0aGlzLmlzV2l0aENvbnRlbnQoKSYmdGhpcy5faXNFbmFibGVkKXtwKHRoaXMuZWxlbWVudCkudHJpZ2dlcih0KTt2YXIgbj1tLmZpbmRTaGFkb3dSb290KHRoaXMuZWxlbWVudCksaT1wLmNvbnRhaW5zKG51bGwhPT1uP246dGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuZWxlbWVudCk7aWYodC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8IWkpcmV0dXJuO3ZhciBvPXRoaXMuZ2V0VGlwRWxlbWVudCgpLHI9bS5nZXRVSUQodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKTtvLnNldEF0dHJpYnV0ZSgiaWQiLHIpLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLHIpLHRoaXMuc2V0Q29udGVudCgpLHRoaXMuY29uZmlnLmFuaW1hdGlvbiYmcChvKS5hZGRDbGFzcyhIbik7dmFyIHM9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29uZmlnLnBsYWNlbWVudD90aGlzLmNvbmZpZy5wbGFjZW1lbnQuY2FsbCh0aGlzLG8sdGhpcy5lbGVtZW50KTp0aGlzLmNvbmZpZy5wbGFjZW1lbnQsYT10aGlzLl9nZXRBdHRhY2htZW50KHMpO3RoaXMuYWRkQXR0YWNobWVudENsYXNzKGEpO3ZhciBsPXRoaXMuX2dldENvbnRhaW5lcigpO3AobykuZGF0YSh0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLHRoaXMpLHAuY29udGFpbnModGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMudGlwKXx8cChvKS5hcHBlbmRUbyhsKSxwKHRoaXMuZWxlbWVudCkudHJpZ2dlcih0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LklOU0VSVEVEKSx0aGlzLl9wb3BwZXI9bmV3IGJlKHRoaXMuZWxlbWVudCxvLHtwbGFjZW1lbnQ6YSxtb2RpZmllcnM6e29mZnNldDp0aGlzLl9nZXRPZmZzZXQoKSxmbGlwOntiZWhhdmlvcjp0aGlzLmNvbmZpZy5mYWxsYmFja1BsYWNlbWVudH0sYXJyb3c6e2VsZW1lbnQ6Rm59LHByZXZlbnRPdmVyZmxvdzp7Ym91bmRhcmllc0VsZW1lbnQ6dGhpcy5jb25maWcuYm91bmRhcnl9fSxvbkNyZWF0ZTpmdW5jdGlvbih0KXt0Lm9yaWdpbmFsUGxhY2VtZW50IT09dC5wbGFjZW1lbnQmJmUuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSh0KX0sb25VcGRhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSh0KX19KSxwKG8pLmFkZENsYXNzKGpuKSwib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmcChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9uKCJtb3VzZW92ZXIiLG51bGwscC5ub29wKTt2YXIgYz1mdW5jdGlvbigpe2UuY29uZmlnLmFuaW1hdGlvbiYmZS5fZml4VHJhbnNpdGlvbigpO3ZhciB0PWUuX2hvdmVyU3RhdGU7ZS5faG92ZXJTdGF0ZT1udWxsLHAoZS5lbGVtZW50KS50cmlnZ2VyKGUuY29uc3RydWN0b3IuRXZlbnQuU0hPV04pLHQ9PT14biYmZS5fbGVhdmUobnVsbCxlKX07aWYocCh0aGlzLnRpcCkuaGFzQ2xhc3MoSG4pKXt2YXIgaD1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMudGlwKTtwKHRoaXMudGlwKS5vbmUobS5UUkFOU0lUSU9OX0VORCxjKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChoKX1lbHNlIGMoKX19LHQuaGlkZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5nZXRUaXBFbGVtZW50KCksaT1wLkV2ZW50KHRoaXMuY29uc3RydWN0b3IuRXZlbnQuSElERSksbz1mdW5jdGlvbigpe2UuX2hvdmVyU3RhdGUhPT1MbiYmbi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobiksZS5fY2xlYW5UaXBDbGFzcygpLGUuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiKSxwKGUuZWxlbWVudCkudHJpZ2dlcihlLmNvbnN0cnVjdG9yLkV2ZW50LkhJRERFTiksbnVsbCE9PWUuX3BvcHBlciYmZS5fcG9wcGVyLmRlc3Ryb3koKSx0JiZ0KCl9O2lmKHAodGhpcy5lbGVtZW50KS50cmlnZ2VyKGkpLCFpLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZihwKG4pLnJlbW92ZUNsYXNzKGpuKSwib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmcChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9mZigibW91c2VvdmVyIixudWxsLHAubm9vcCksdGhpcy5fYWN0aXZlVHJpZ2dlcltVbl09ITEsdGhpcy5fYWN0aXZlVHJpZ2dlcltXbl09ITEsdGhpcy5fYWN0aXZlVHJpZ2dlcltNbl09ITEscCh0aGlzLnRpcCkuaGFzQ2xhc3MoSG4pKXt2YXIgcj1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KG4pO3Aobikub25lKG0uVFJBTlNJVElPTl9FTkQsbykuZW11bGF0ZVRyYW5zaXRpb25FbmQocil9ZWxzZSBvKCk7dGhpcy5faG92ZXJTdGF0ZT0iIn19LHQudXBkYXRlPWZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3BvcHBlciYmdGhpcy5fcG9wcGVyLnNjaGVkdWxlVXBkYXRlKCl9LHQuaXNXaXRoQ29udGVudD1mdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuZ2V0VGl0bGUoKSl9LHQuYWRkQXR0YWNobWVudENsYXNzPWZ1bmN0aW9uKHQpe3AodGhpcy5nZXRUaXBFbGVtZW50KCkpLmFkZENsYXNzKERuKyItIit0KX0sdC5nZXRUaXBFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGlwPXRoaXMudGlwfHxwKHRoaXMuY29uZmlnLnRlbXBsYXRlKVswXSx0aGlzLnRpcH0sdC5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRUaXBFbGVtZW50KCk7dGhpcy5zZXRFbGVtZW50Q29udGVudChwKHQucXVlcnlTZWxlY3RvckFsbChSbikpLHRoaXMuZ2V0VGl0bGUoKSkscCh0KS5yZW1vdmVDbGFzcyhIbisiICIram4pfSx0LnNldEVsZW1lbnRDb250ZW50PWZ1bmN0aW9uKHQsZSl7Im9iamVjdCIhPXR5cGVvZiBlfHwhZS5ub2RlVHlwZSYmIWUuanF1ZXJ5P3RoaXMuY29uZmlnLmh0bWw/KHRoaXMuY29uZmlnLnNhbml0aXplJiYoZT1ibihlLHRoaXMuY29uZmlnLndoaXRlTGlzdCx0aGlzLmNvbmZpZy5zYW5pdGl6ZUZuKSksdC5odG1sKGUpKTp0LnRleHQoZSk6dGhpcy5jb25maWcuaHRtbD9wKGUpLnBhcmVudCgpLmlzKHQpfHx0LmVtcHR5KCkuYXBwZW5kKGUpOnQudGV4dChwKGUpLnRleHQoKSl9LHQuZ2V0VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLW9yaWdpbmFsLXRpdGxlIik7cmV0dXJuIHR8fCh0PSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbmZpZy50aXRsZT90aGlzLmNvbmZpZy50aXRsZS5jYWxsKHRoaXMuZWxlbWVudCk6dGhpcy5jb25maWcudGl0bGUpLHR9LHQuX2dldE9mZnNldD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD17fTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb25maWcub2Zmc2V0P3QuZm49ZnVuY3Rpb24odCl7cmV0dXJuIHQub2Zmc2V0cz1sKHt9LHQub2Zmc2V0cyxlLmNvbmZpZy5vZmZzZXQodC5vZmZzZXRzLGUuZWxlbWVudCl8fHt9KSx0fTp0Lm9mZnNldD10aGlzLmNvbmZpZy5vZmZzZXQsdH0sdC5fZ2V0Q29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLmNvbmZpZy5jb250YWluZXI/ZG9jdW1lbnQuYm9keTptLmlzRWxlbWVudCh0aGlzLmNvbmZpZy5jb250YWluZXIpP3AodGhpcy5jb25maWcuY29udGFpbmVyKTpwKGRvY3VtZW50KS5maW5kKHRoaXMuY29uZmlnLmNvbnRhaW5lcil9LHQuX2dldEF0dGFjaG1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIE5uW3QudG9VcHBlckNhc2UoKV19LHQuX3NldExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBpPXRoaXM7dGhpcy5jb25maWcudHJpZ2dlci5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24odCl7aWYoImNsaWNrIj09PXQpcChpLmVsZW1lbnQpLm9uKGkuY29uc3RydWN0b3IuRXZlbnQuQ0xJQ0ssaS5jb25maWcuc2VsZWN0b3IsZnVuY3Rpb24odCl7cmV0dXJuIGkudG9nZ2xlKHQpfSk7ZWxzZSBpZih0IT09Qm4pe3ZhciBlPXQ9PT1Nbj9pLmNvbnN0cnVjdG9yLkV2ZW50Lk1PVVNFRU5URVI6aS5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU0lOLG49dD09PU1uP2kuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VMRUFWRTppLmNvbnN0cnVjdG9yLkV2ZW50LkZPQ1VTT1VUO3AoaS5lbGVtZW50KS5vbihlLGkuY29uZmlnLnNlbGVjdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBpLl9lbnRlcih0KX0pLm9uKG4saS5jb25maWcuc2VsZWN0b3IsZnVuY3Rpb24odCl7cmV0dXJuIGkuX2xlYXZlKHQpfSl9fSkscCh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoIi5tb2RhbCIpLm9uKCJoaWRlLmJzLm1vZGFsIixmdW5jdGlvbigpe2kuZWxlbWVudCYmaS5oaWRlKCl9KSx0aGlzLmNvbmZpZy5zZWxlY3Rvcj90aGlzLmNvbmZpZz1sKHt9LHRoaXMuY29uZmlnLHt0cmlnZ2VyOiJtYW51YWwiLHNlbGVjdG9yOiIifSk6dGhpcy5fZml4VGl0bGUoKX0sdC5fZml4VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10eXBlb2YgdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbC10aXRsZSIpOyh0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpfHwic3RyaW5nIiE9PXQpJiYodGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbC10aXRsZSIsdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgidGl0bGUiKXx8IiIpLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiIikpfSx0Ll9lbnRlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY29uc3RydWN0b3IuREFUQV9LRVk7KGU9ZXx8cCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobikpfHwoZT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0LmN1cnJlbnRUYXJnZXQsdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSkscCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobixlKSksdCYmKGUuX2FjdGl2ZVRyaWdnZXJbImZvY3VzaW4iPT09dC50eXBlP1duOk1uXT0hMCkscChlLmdldFRpcEVsZW1lbnQoKSkuaGFzQ2xhc3Moam4pfHxlLl9ob3ZlclN0YXRlPT09TG4/ZS5faG92ZXJTdGF0ZT1MbjooY2xlYXJUaW1lb3V0KGUuX3RpbWVvdXQpLGUuX2hvdmVyU3RhdGU9TG4sZS5jb25maWcuZGVsYXkmJmUuY29uZmlnLmRlbGF5LnNob3c/ZS5fdGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5faG92ZXJTdGF0ZT09PUxuJiZlLnNob3coKX0sZS5jb25maWcuZGVsYXkuc2hvdyk6ZS5zaG93KCkpfSx0Ll9sZWF2ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY29uc3RydWN0b3IuREFUQV9LRVk7KGU9ZXx8cCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobikpfHwoZT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0LmN1cnJlbnRUYXJnZXQsdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSkscCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobixlKSksdCYmKGUuX2FjdGl2ZVRyaWdnZXJbImZvY3Vzb3V0Ij09PXQudHlwZT9XbjpNbl09ITEpLGUuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKXx8KGNsZWFyVGltZW91dChlLl90aW1lb3V0KSxlLl9ob3ZlclN0YXRlPXhuLGUuY29uZmlnLmRlbGF5JiZlLmNvbmZpZy5kZWxheS5oaWRlP2UuX3RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX2hvdmVyU3RhdGU9PT14biYmZS5oaWRlKCl9LGUuY29uZmlnLmRlbGF5LmhpZGUpOmUuaGlkZSgpKX0sdC5faXNXaXRoQWN0aXZlVHJpZ2dlcj1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9hY3RpdmVUcmlnZ2VyKWlmKHRoaXMuX2FjdGl2ZVRyaWdnZXJbdF0pcmV0dXJuITA7cmV0dXJuITF9LHQuX2dldENvbmZpZz1mdW5jdGlvbih0KXt2YXIgZT1wKHRoaXMuZWxlbWVudCkuZGF0YSgpO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpey0xIT09QW4uaW5kZXhPZih0KSYmZGVsZXRlIGVbdF19KSwibnVtYmVyIj09dHlwZW9mKHQ9bCh7fSx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsZSwib2JqZWN0Ij09dHlwZW9mIHQmJnQ/dDp7fSkpLmRlbGF5JiYodC5kZWxheT17c2hvdzp0LmRlbGF5LGhpZGU6dC5kZWxheX0pLCJudW1iZXIiPT10eXBlb2YgdC50aXRsZSYmKHQudGl0bGU9dC50aXRsZS50b1N0cmluZygpKSwibnVtYmVyIj09dHlwZW9mIHQuY29udGVudCYmKHQuY29udGVudD10LmNvbnRlbnQudG9TdHJpbmcoKSksbS50eXBlQ2hlY2tDb25maWcod24sdCx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSx0LnNhbml0aXplJiYodC50ZW1wbGF0ZT1ibih0LnRlbXBsYXRlLHQud2hpdGVMaXN0LHQuc2FuaXRpemVGbikpLHR9LHQuX2dldERlbGVnYXRlQ29uZmlnPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5jb25maWcpZm9yKHZhciBlIGluIHRoaXMuY29uZmlnKXRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtlXSE9PXRoaXMuY29uZmlnW2VdJiYodFtlXT10aGlzLmNvbmZpZ1tlXSk7cmV0dXJuIHR9LHQuX2NsZWFuVGlwQ2xhc3M9ZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMuZ2V0VGlwRWxlbWVudCgpKSxlPXQuYXR0cigiY2xhc3MiKS5tYXRjaChJbik7bnVsbCE9PWUmJmUubGVuZ3RoJiZ0LnJlbW92ZUNsYXNzKGUuam9pbigiIikpfSx0Ll9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5pbnN0YW5jZTt0aGlzLnRpcD1lLnBvcHBlcix0aGlzLl9jbGVhblRpcENsYXNzKCksdGhpcy5hZGRBdHRhY2htZW50Q2xhc3ModGhpcy5fZ2V0QXR0YWNobWVudCh0LnBsYWNlbWVudCkpfSx0Ll9maXhUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRUaXBFbGVtZW50KCksZT10aGlzLmNvbmZpZy5hbmltYXRpb247bnVsbD09PXQuZ2V0QXR0cmlidXRlKCJ4LXBsYWNlbWVudCIpJiYocCh0KS5yZW1vdmVDbGFzcyhIbiksdGhpcy5jb25maWcuYW5pbWF0aW9uPSExLHRoaXMuaGlkZSgpLHRoaXMuc2hvdygpLHRoaXMuY29uZmlnLmFuaW1hdGlvbj1lKX0saS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLmRhdGEoQ24pLGU9Im9iamVjdCI9PXR5cGVvZiBuJiZuO2lmKCh0fHwhL2Rpc3Bvc2V8aGlkZS8udGVzdChuKSkmJih0fHwodD1uZXcgaSh0aGlzLGUpLHAodGhpcykuZGF0YShDbix0KSksInN0cmluZyI9PXR5cGVvZiBuKSl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJytuKyciJyk7dFtuXSgpfX0pfSxzKGksbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMy4xIn19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigpe3JldHVybiBrbn19LHtrZXk6Ik5BTUUiLGdldDpmdW5jdGlvbigpe3JldHVybiB3bn19LHtrZXk6IkRBVEFfS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQ259fSx7a2V5OiJFdmVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFBufX0se2tleToiRVZFTlRfS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVG59fSx7a2V5OiJEZWZhdWx0VHlwZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9ufX1dKSxpfSgpO3AuZm5bd25dPXFuLl9qUXVlcnlJbnRlcmZhY2UscC5mblt3bl0uQ29uc3RydWN0b3I9cW4scC5mblt3bl0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBwLmZuW3duXT1Tbixxbi5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgS249InBvcG92ZXIiLFFuPSJicy5wb3BvdmVyIixWbj0iLiIrUW4sWW49cC5mbltLbl0sem49ImJzLXBvcG92ZXIiLFhuPW5ldyBSZWdFeHA=",
"2020.04.17 15:37": "base64:LnRlc3QodC50YXJnZXQudGFnTmFtZSl8fCJrZXl1cCI9PT10LnR5cGUmJjk9PT10LndoaWNoKSYmcC5jb250YWlucyhvLHQudGFyZ2V0KSkpe3ZhciBsPXAuRXZlbnQoQWUuSElERSxzKTtwKG8pLnRyaWdnZXIobCksbC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZwKGRvY3VtZW50LmJvZHkpLmNoaWxkcmVuKCkub2ZmKCJtb3VzZW92ZXIiLG51bGwscC5ub29wKSxlW25dLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsImZhbHNlIikscChhKS5yZW1vdmVDbGFzcyhOZSkscChvKS5yZW1vdmVDbGFzcyhOZSkudHJpZ2dlcihwLkV2ZW50KEFlLkhJRERFTixzKSkpfX19fSxjLl9nZXRQYXJlbnRGcm9tRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZSxuPW0uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0KTtyZXR1cm4gbiYmKGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKSksZXx8dC5wYXJlbnROb2RlfSxjLl9kYXRhQXBpS2V5ZG93bkhhbmRsZXI9ZnVuY3Rpb24odCl7aWYoKC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QodC50YXJnZXQudGFnTmFtZSk/ISgzMj09PXQud2hpY2h8fDI3IT09dC53aGljaCYmKDQwIT09dC53aGljaCYmMzghPT10LndoaWNofHxwKHQudGFyZ2V0KS5jbG9zZXN0KEZlKS5sZW5ndGgpKTpJZS50ZXN0KHQud2hpY2gpKSYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLCF0aGlzLmRpc2FibGVkJiYhcCh0aGlzKS5oYXNDbGFzcyhPZSkpKXt2YXIgZT1jLl9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzKSxuPXAoZSkuaGFzQ2xhc3MoTmUpO2lmKG4mJighbnx8MjchPT10LndoaWNoJiYzMiE9PXQud2hpY2gpKXt2YXIgaT1bXS5zbGljZS5jYWxsKGUucXVlcnlTZWxlY3RvckFsbChXZSkpO2lmKDAhPT1pLmxlbmd0aCl7dmFyIG89aS5pbmRleE9mKHQudGFyZ2V0KTszOD09PXQud2hpY2gmJjA8byYmby0tLDQwPT09dC53aGljaCYmbzxpLmxlbmd0aC0xJiZvKyssbzwwJiYobz0wKSxpW29dLmZvY3VzKCl9fWVsc2V7aWYoMjc9PT10LndoaWNoKXt2YXIgcj1lLnF1ZXJ5U2VsZWN0b3IoamUpO3AocikudHJpZ2dlcigiZm9jdXMiKX1wKHRoaXMpLnRyaWdnZXIoImNsaWNrIil9fX0scyhjLG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjMuMSJ9fSx7a2V5OiJEZWZhdWx0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWWV9fSx7a2V5OiJEZWZhdWx0VHlwZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHplfX1dKSxjfSgpO3AoZG9jdW1lbnQpLm9uKEFlLktFWURPV05fREFUQV9BUEksamUsWGUuX2RhdGFBcGlLZXlkb3duSGFuZGxlcikub24oQWUuS0VZRE9XTl9EQVRBX0FQSSxGZSxYZS5fZGF0YUFwaUtleWRvd25IYW5kbGVyKS5vbihBZS5DTElDS19EQVRBX0FQSSsiICIrQWUuS0VZVVBfREFUQV9BUEksWGUuX2NsZWFyTWVudXMpLm9uKEFlLkNMSUNLX0RBVEFfQVBJLGplLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLFhlLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChwKHRoaXMpLCJ0b2dnbGUiKX0pLm9uKEFlLkNMSUNLX0RBVEFfQVBJLFJlLGZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCl9KSxwLmZuW3dlXT1YZS5falF1ZXJ5SW50ZXJmYWNlLHAuZm5bd2VdLkNvbnN0cnVjdG9yPVhlLHAuZm5bd2VdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcC5mblt3ZV09RGUsWGUuX2pRdWVyeUludGVyZmFjZX07dmFyIEdlPSJtb2RhbCIsJGU9ImJzLm1vZGFsIixKZT0iLiIrJGUsWmU9cC5mbltHZV0sdG49e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwLGZvY3VzOiEwLHNob3c6ITB9LGVuPXtiYWNrZHJvcDoiKGJvb2xlYW58c3RyaW5nKSIsa2V5Ym9hcmQ6ImJvb2xlYW4iLGZvY3VzOiJib29sZWFuIixzaG93OiJib29sZWFuIn0sbm49e0hJREU6ImhpZGUiK0plLEhJRERFTjoiaGlkZGVuIitKZSxTSE9XOiJzaG93IitKZSxTSE9XTjoic2hvd24iK0plLEZPQ1VTSU46ImZvY3VzaW4iK0plLFJFU0laRToicmVzaXplIitKZSxDTElDS19ESVNNSVNTOiJjbGljay5kaXNtaXNzIitKZSxLRVlET1dOX0RJU01JU1M6ImtleWRvd24uZGlzbWlzcyIrSmUsTU9VU0VVUF9ESVNNSVNTOiJtb3VzZXVwLmRpc21pc3MiK0plLE1PVVNFRE9XTl9ESVNNSVNTOiJtb3VzZWRvd24uZGlzbWlzcyIrSmUsQ0xJQ0tfREFUQV9BUEk6ImNsaWNrIitKZSsiLmRhdGEtYXBpIn0sb249Im1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIixybj0ibW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUiLHNuPSJtb2RhbC1iYWNrZHJvcCIsYW49Im1vZGFsLW9wZW4iLGxuPSJmYWRlIixjbj0ic2hvdyIsaG49Ii5tb2RhbC1kaWFsb2ciLHVuPSIubW9kYWwtYm9keSIsZm49J1tkYXRhLXRvZ2dsZT0ibW9kYWwiXScsZG49J1tkYXRhLWRpc21pc3M9Im1vZGFsIl0nLHBuPSIuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wIixtbj0iLnN0aWNreS10b3AiLGduPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy5fZWxlbWVudD10LHRoaXMuX2RpYWxvZz10LnF1ZXJ5U2VsZWN0b3IoaG4pLHRoaXMuX2JhY2tkcm9wPW51bGwsdGhpcy5faXNTaG93bj0hMSx0aGlzLl9pc0JvZHlPdmVyZmxvd2luZz0hMSx0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrPSExLHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl9zY3JvbGxiYXJXaWR0aD0wfXZhciB0PW8ucHJvdG90eXBlO3JldHVybiB0LnRvZ2dsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3codCl9LHQuc2hvdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCF0aGlzLl9pc1Nob3duJiYhdGhpcy5faXNUcmFuc2l0aW9uaW5nKXtwKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKGxuKSYmKHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMCk7dmFyIG49cC5FdmVudChubi5TSE9XLHtyZWxhdGVkVGFyZ2V0OnR9KTtwKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobiksdGhpcy5faXNTaG93bnx8bi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KHRoaXMuX2lzU2hvd249ITAsdGhpcy5fY2hlY2tTY3JvbGxiYXIoKSx0aGlzLl9zZXRTY3JvbGxiYXIoKSx0aGlzLl9hZGp1c3REaWFsb2coKSx0aGlzLl9zZXRFc2NhcGVFdmVudCgpLHRoaXMuX3NldFJlc2l6ZUV2ZW50KCkscCh0aGlzLl9lbGVtZW50KS5vbihubi5DTElDS19ESVNNSVNTLGRuLGZ1bmN0aW9uKHQpe3JldHVybiBlLmhpZGUodCl9KSxwKHRoaXMuX2RpYWxvZykub24obm4uTU9VU0VET1dOX0RJU01JU1MsZnVuY3Rpb24oKXtwKGUuX2VsZW1lbnQpLm9uZShubi5NT1VTRVVQX0RJU01JU1MsZnVuY3Rpb24odCl7cCh0LnRhcmdldCkuaXMoZS5fZWxlbWVudCkmJihlLl9pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5fc2hvd0JhY2tkcm9wKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3Nob3dFbGVtZW50KHQpfSkpfX0sdC5oaWRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodCYmdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2lzU2hvd24mJiF0aGlzLl9pc1RyYW5zaXRpb25pbmcpe3ZhciBuPXAuRXZlbnQobm4uSElERSk7aWYocCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKG4pLHRoaXMuX2lzU2hvd24mJiFuLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt0aGlzLl9pc1Nob3duPSExO3ZhciBpPXAodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MobG4pO2lmKGkmJih0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITApLHRoaXMuX3NldEVzY2FwZUV2ZW50KCksdGhpcy5fc2V0UmVzaXplRXZlbnQoKSxwKGRvY3VtZW50KS5vZmYobm4uRk9DVVNJTikscCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhjbikscCh0aGlzLl9lbGVtZW50KS5vZmYobm4uQ0xJQ0tfRElTTUlTUykscCh0aGlzLl9kaWFsb2cpLm9mZihubi5NT1VTRURPV05fRElTTUlTUyksaSl7dmFyIG89bS5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtwKHRoaXMuX2VsZW1lbnQpLm9uZShtLlRSQU5TSVRJT05fRU5ELGZ1bmN0aW9uKHQpe3JldHVybiBlLl9oaWRlTW9kYWwodCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChvKX1lbHNlIHRoaXMuX2hpZGVNb2RhbCgpfX19LHQuZGlzcG9zZT1mdW5jdGlvbigpe1t3aW5kb3csdGhpcy5fZWxlbWVudCx0aGlzLl9kaWFsb2ddLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHAodCkub2ZmKEplKX0pLHAoZG9jdW1lbnQpLm9mZihubi5GT0NVU0lOKSxwLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwkZSksdGhpcy5fY29uZmlnPW51bGwsdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuX2RpYWxvZz1udWxsLHRoaXMuX2JhY2tkcm9wPW51bGwsdGhpcy5faXNTaG93bj1udWxsLHRoaXMuX2lzQm9keU92ZXJmbG93aW5nPW51bGwsdGhpcy5faWdub3JlQmFja2Ryb3BDbGljaz1udWxsLHRoaXMuX2lzVHJhbnNpdGlvbmluZz1udWxsLHRoaXMuX3Njcm9sbGJhcldpZHRoPW51bGx9LHQuaGFuZGxlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0RGlhbG9nKCl9LHQuX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdD1sKHt9LHRuLHQpLG0udHlwZUNoZWNrQ29uZmlnKEdlLHQsZW4pLHR9LHQuX3Nob3dFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1wKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKGxuKTt0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfHxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLW1vZGFsIiwhMCkscCh0aGlzLl9kaWFsb2cpLmhhc0NsYXNzKG9uKT90aGlzLl9kaWFsb2cucXVlcnlTZWxlY3Rvcih1bikuc2Nyb2xsVG9wPTA6dGhpcy5fZWxlbWVudC5zY3JvbGxUb3A9MCxuJiZtLnJlZmxvdyh0aGlzLl9lbGVtZW50KSxwKHRoaXMuX2VsZW1lbnQpLmFkZENsYXNzKGNuKSx0aGlzLl9jb25maWcuZm9jdXMmJnRoaXMuX2VuZm9yY2VGb2N1cygpO3ZhciBpPXAuRXZlbnQobm4uU0hPV04se3JlbGF0ZWRUYXJnZXQ6dH0pLG89ZnVuY3Rpb24oKXtlLl9jb25maWcuZm9jdXMmJmUuX2VsZW1lbnQuZm9jdXMoKSxlLl9pc1RyYW5zaXRpb25pbmc9ITEscChlLl9lbGVtZW50KS50cmlnZ2VyKGkpfTtpZihuKXt2YXIgcj1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2RpYWxvZyk7cCh0aGlzLl9kaWFsb2cpLm9uZShtLlRSQU5TSVRJT05fRU5ELG8pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHIpfWVsc2UgbygpfSx0Ll9lbmZvcmNlRm9jdXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3AoZG9jdW1lbnQpLm9mZihubi5GT0NVU0lOKS5vbihubi5GT0NVU0lOLGZ1bmN0aW9uKHQpe2RvY3VtZW50IT09dC50YXJnZXQmJmUuX2VsZW1lbnQhPT10LnRhcmdldCYmMD09PXAoZS5fZWxlbWVudCkuaGFzKHQudGFyZ2V0KS5sZW5ndGgmJmUuX2VsZW1lbnQuZm9jdXMoKX0pfSx0Ll9zZXRFc2NhcGVFdmVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5faXNTaG93biYmdGhpcy5fY29uZmlnLmtleWJvYXJkP3AodGhpcy5fZWxlbWVudCkub24obm4uS0VZRE9XTl9ESVNNSVNTLGZ1bmN0aW9uKHQpezI3PT09dC53aGljaCYmKHQucHJldmVudERlZmF1bHQoKSxlLmhpZGUoKSl9KTp0aGlzLl9pc1Nob3dufHxwKHRoaXMuX2VsZW1lbnQpLm9mZihubi5LRVlET1dOX0RJU01JU1MpfSx0Ll9zZXRSZXNpemVFdmVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5faXNTaG93bj9wKHdpbmRvdykub24obm4uUkVTSVpFLGZ1bmN0aW9uKHQpe3JldHVybiBlLmhhbmRsZVVwZGF0ZSh0KX0pOnAod2luZG93KS5vZmYobm4uUkVTSVpFKX0sdC5faGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApLHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW1vZGFsIiksdGhpcy5faXNUcmFuc2l0aW9uaW5nPSExLHRoaXMuX3Nob3dCYWNrZHJvcChmdW5jdGlvbigpe3AoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3MoYW4pLHQuX3Jlc2V0QWRqdXN0bWVudHMoKSx0Ll9yZXNldFNjcm9sbGJhcigpLHAodC5fZWxlbWVudCkudHJpZ2dlcihubi5ISURERU4pfSl9LHQuX3JlbW92ZUJhY2tkcm9wPWZ1bmN0aW9uKCl7dGhpcy5fYmFja2Ryb3AmJihwKHRoaXMuX2JhY2tkcm9wKS5yZW1vdmUoKSx0aGlzLl9iYWNrZHJvcD1udWxsKX0sdC5fc2hvd0JhY2tkcm9wPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1wKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKGxuKT9sbjoiIjtpZih0aGlzLl9pc1Nob3duJiZ0aGlzLl9jb25maWcuYmFja2Ryb3Ape2lmKHRoaXMuX2JhY2tkcm9wPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2JhY2tkcm9wLmNsYXNzTmFtZT1zbixuJiZ0aGlzLl9iYWNrZHJvcC5jbGFzc0xpc3QuYWRkKG4pLHAodGhpcy5fYmFja2Ryb3ApLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLHAodGhpcy5fZWxlbWVudCkub24obm4uQ0xJQ0tfRElTTUlTUyxmdW5jdGlvbih0KXtlLl9pZ25vcmVCYWNrZHJvcENsaWNrP2UuX2lnbm9yZUJhY2tkcm9wQ2xpY2s9ITE6dC50YXJnZXQ9PT10LmN1cnJlbnRUYXJnZXQmJigic3RhdGljIj09PWUuX2NvbmZpZy5iYWNrZHJvcD9lLl9lbGVtZW50LmZvY3VzKCk6ZS5oaWRlKCkpfSksbiYmbS5yZWZsb3codGhpcy5fYmFja2Ryb3ApLHAodGhpcy5fYmFja2Ryb3ApLmFkZENsYXNzKGNuKSwhdClyZXR1cm47aWYoIW4pcmV0dXJuIHZvaWQgdCgpO3ZhciBpPW0uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO3AodGhpcy5fYmFja2Ryb3ApLm9uZShtLlRSQU5TSVRJT05fRU5ELHQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkpfWVsc2UgaWYoIXRoaXMuX2lzU2hvd24mJnRoaXMuX2JhY2tkcm9wKXtwKHRoaXMuX2JhY2tkcm9wKS5yZW1vdmVDbGFzcyhjbik7dmFyIG89ZnVuY3Rpb24oKXtlLl9yZW1vdmVCYWNrZHJvcCgpLHQmJnQoKX07aWYocCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhsbikpe3ZhciByPW0uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fYmFja2Ryb3ApO3AodGhpcy5fYmFja2Ryb3ApLm9uZShtLlRSQU5TSVRJT05fRU5ELG8pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHIpfWVsc2UgbygpfWVsc2UgdCYmdCgpfSx0Ll9hZGp1c3REaWFsb2c9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OyF0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyYmdCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQ9dGhpcy5fc2Nyb2xsYmFyV2lkdGgrInB4IiksdGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcmJiF0JiYodGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQ9dGhpcy5fc2Nyb2xsYmFyV2lkdGgrInB4Iil9LHQuX3Jlc2V0QWRqdXN0bWVudHM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0PSIiLHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0PSIifSx0Ll9jaGVja1Njcm9sbGJhcj1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5faXNCb2R5T3ZlcmZsb3dpbmc9dC5sZWZ0K3QucmlnaHQ8d2luZG93LmlubmVyV2lkdGgsdGhpcy5fc2Nyb2xsYmFyV2lkdGg9dGhpcy5fZ2V0U2Nyb2xsYmFyV2lkdGgoKX0sdC5fc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIG89dGhpcztpZih0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyl7dmFyIHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHBuKSksZT1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwobW4pKTtwKHQpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN0eWxlLnBhZGRpbmdSaWdodCxpPXAoZSkuY3NzKCJwYWRkaW5nLXJpZ2h0Iik7cChlKS5kYXRhKCJwYWRkaW5nLXJpZ2h0IixuKS5jc3MoInBhZGRpbmctcmlnaHQiLHBhcnNlRmxvYXQoaSkrby5fc2Nyb2xsYmFyV2lkdGgrInB4Iil9KSxwKGUpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN0eWxlLm1hcmdpblJpZ2h0LGk9cChlKS5jc3MoIm1hcmdpbi1yaWdodCIpO3AoZSkuZGF0YSgibWFyZ2luLXJpZ2h0IixuKS5jc3MoIm1hcmdpbi1yaWdodCIscGFyc2VGbG9hdChpKS1vLl9zY3JvbGxiYXJXaWR0aCsicHgiKX0pO3ZhciBuPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0LGk9cChkb2N1bWVudC5ib2R5KS5jc3MoInBhZGRpbmctcmlnaHQiKTtwKGRvY3VtZW50LmJvZHkpLmRhdGEoInBhZGRpbmctcmlnaHQiLG4pLmNzcygicGFkZGluZy1yaWdodCIscGFyc2VGbG9hdChpKSt0aGlzLl9zY3JvbGxiYXJXaWR0aCsicHgiKX1wKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKGFuKX0sdC5fcmVzZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgdD1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocG4pKTtwKHQpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1wKGUpLmRhdGEoInBhZGRpbmctcmlnaHQiKTtwKGUpLnJlbW92ZURhdGEoInBhZGRpbmctcmlnaHQiKSxlLnN0eWxlLnBhZGRpbmdSaWdodD1ufHwiIn0pO3ZhciBlPVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIittbikpO3AoZSkuZWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPXAoZSkuZGF0YSgibWFyZ2luLXJpZ2h0Iik7InVuZGVmaW5lZCIhPXR5cGVvZiBuJiZwKGUpLmNzcygibWFyZ2luLXJpZ2h0IixuKS5yZW1vdmVEYXRhKCJtYXJnaW4tcmlnaHQiKX0pO3ZhciBuPXAoZG9jdW1lbnQuYm9keSkuZGF0YSgicGFkZGluZy1yaWdodCIpO3AoZG9jdW1lbnQuYm9keSkucmVtb3ZlRGF0YSgicGFkZGluZy1yaWdodCIpLGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PW58fCIifSx0Ll9nZXRTY3JvbGxiYXJXaWR0aD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPXJuLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aC10LmNsaWVudFdpZHRoO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLGV9LG8uX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihuLGkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLmRhdGEoJGUpLGU9bCh7fSx0bixwKHRoaXMpLmRhdGEoKSwib2JqZWN0Ij09dHlwZW9mIG4mJm4/bjp7fSk7aWYodHx8KHQ9bmV3IG8odGhpcyxlKSxwKHRoaXMpLmRhdGEoJGUsdCkpLCJzdHJpbmciPT10eXBlb2Ygbil7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJytuKyciJyk7dFtuXShpKX1lbHNlIGUuc2hvdyYmdC5zaG93KGkpfSl9LHMobyxudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iNC4zLjEifX0se2tleToiRGVmYXVsdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRufX1dKSxvfSgpO3AoZG9jdW1lbnQpLm9uKG5uLkNMSUNLX0RBVEFfQVBJLGZuLGZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcyxpPW0uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKTtpJiYoZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGkpKTt2YXIgbz1wKGUpLmRhdGEoJGUpPyJ0b2dnbGUiOmwoe30scChlKS5kYXRhKCkscCh0aGlzKS5kYXRhKCkpOyJBIiE9PXRoaXMudGFnTmFtZSYmIkFSRUEiIT09dGhpcy50YWdOYW1lfHx0LnByZXZlbnREZWZhdWx0KCk7dmFyIHI9cChlKS5vbmUobm4uU0hPVyxmdW5jdGlvbih0KXt0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHxyLm9uZShubi5ISURERU4sZnVuY3Rpb24oKXtwKG4pLmlzKCI6dmlzaWJsZSIpJiZuLmZvY3VzKCl9KX0pO2duLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChwKGUpLG8sdGhpcyl9KSxwLmZuW0dlXT1nbi5falF1ZXJ5SW50ZXJmYWNlLHAuZm5bR2VdLkNvbnN0cnVjdG9yPWduLHAuZm5bR2VdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcC5mbltHZV09WmUsZ24uX2pRdWVyeUludGVyZmFjZX07dmFyIF9uPVsiYmFja2dyb3VuZCIsImNpdGUiLCJocmVmIiwiaXRlbXR5cGUiLCJsb25nZGVzYyIsInBvc3RlciIsInNyYyIsInhsaW5rOmhyZWYiXSx2bj17IioiOlsiY2xhc3MiLCJkaXIiLCJpZCIsImxhbmciLCJyb2xlIiwvXmFyaWEtW1x3LV0qJC9pXSxhOlsidGFyZ2V0IiwiaHJlZiIsInRpdGxlIiwicmVsIl0sYXJlYTpbXSxiOltdLGJyOltdLGNvbDpbXSxjb2RlOltdLGRpdjpbXSxlbTpbXSxocjpbXSxoMTpbXSxoMjpbXSxoMzpbXSxoNDpbXSxoNTpbXSxoNjpbXSxpOltdLGltZzpbInNyYyIsImFsdCIsInRpdGxlIiwid2lkdGgiLCJoZWlnaHQiXSxsaTpbXSxvbDpbXSxwOltdLHByZTpbXSxzOltdLHNtYWxsOltdLHNwYW46W10sc3ViOltdLHN1cDpbXSxzdHJvbmc6W10sdTpbXSx1bDpbXX0seW49L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZSk6fFteJjovPyNdKig/OlsvPyNdfCQpKS9naSxFbj0vXmRhdGE6KD86aW1hZ2VcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1wvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05Ky9dKz0qJC9pO2Z1bmN0aW9uIGJuKHQscyxlKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIHQ7aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUpcmV0dXJuIGUodCk7Zm9yKHZhciBuPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQsInRleHQvaHRtbCIpLGE9T2JqZWN0LmtleXMocyksbD1bXS5zbGljZS5jYWxsKG4uYm9keS5xdWVyeVNlbGVjdG9yQWxsKCIqIikpLGk9ZnVuY3Rpb24odCxlKXt2YXIgbj1sW3RdLGk9bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKC0xPT09YS5pbmRleE9mKG4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSwiY29udGludWUiO3ZhciBvPVtdLnNsaWNlLmNhbGwobi5hdHRyaWJ1dGVzKSxyPVtdLmNvbmNhdChzWyIqIl18fFtdLHNbaV18fFtdKTtvLmZvckVhY2goZnVuY3Rpb24odCl7KGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKC0xIT09ZS5pbmRleE9mKG4pKXJldHVybi0xPT09X24uaW5kZXhPZihuKXx8Qm9vbGVhbih0Lm5vZGVWYWx1ZS5tYXRjaCh5bil8fHQubm9kZVZhbHVlLm1hdGNoKEVuKSk7Zm9yKHZhciBpPWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfSksbz0wLHI9aS5sZW5ndGg7bzxyO28rKylpZihuLm1hdGNoKGlbb10pKXJldHVybiEwO3JldHVybiExfSkodCxyKXx8bi5yZW1vdmVBdHRyaWJ1dGUodC5ub2RlTmFtZSl9KX0sbz0wLHI9bC5sZW5ndGg7bzxyO28rKylpKG8pO3JldHVybiBuLmJvZHkuaW5uZXJIVE1MfXZhciB3bj0idG9vbHRpcCIsQ249ImJzLnRvb2x0aXAiLFRuPSIuIitDbixTbj1wLmZuW3duXSxEbj0iYnMtdG9vbHRpcCIsSW49bmV3IFJlZ0V4cCgiKF58XFxzKSIrRG4rIlxcUysiLCJnIiksQW49WyJzYW5pdGl6ZSIsIndoaXRlTGlzdCIsInNhbml0aXplRm4iXSxPbj17YW5pbWF0aW9uOiJib29sZWFuIix0ZW1wbGF0ZToic3RyaW5nIix0aXRsZToiKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSIsdHJpZ2dlcjoic3RyaW5nIixkZWxheToiKG51bWJlcnxvYmplY3QpIixodG1sOiJib29sZWFuIixzZWxlY3RvcjoiKHN0cmluZ3xib29sZWFuKSIscGxhY2VtZW50OiIoc3RyaW5nfGZ1bmN0aW9uKSIsb2Zmc2V0OiIobnVtYmVyfHN0cmluZ3xmdW5jdGlvbikiLGNvbnRhaW5lcjoiKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pIixmYWxsYmFja1BsYWNlbWVudDoiKHN0cmluZ3xhcnJheSkiLGJvdW5kYXJ5OiIoc3RyaW5nfGVsZW1lbnQpIixzYW5pdGl6ZToiYm9vbGVhbiIsc2FuaXRpemVGbjoiKG51bGx8ZnVuY3Rpb24pIix3aGl0ZUxpc3Q6Im9iamVjdCJ9LE5uPXtBVVRPOiJhdXRvIixUT1A6InRvcCIsUklHSFQ6InJpZ2h0IixCT1RUT006ImJvdHRvbSIsTEVGVDoibGVmdCJ9LGtuPXthbmltYXRpb246ITAsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48ZGl2IGNsYXNzPSJ0b29sdGlwLWlubmVyIj48L2Rpdj48L2Rpdj4nLHRyaWdnZXI6ImhvdmVyIGZvY3VzIix0aXRsZToiIixkZWxheTowLGh0bWw6ITEsc2VsZWN0b3I6ITEscGxhY2VtZW50OiJ0b3AiLG9mZnNldDowLGNvbnRhaW5lcjohMSxmYWxsYmFja1BsYWNlbWVudDoiZmxpcCIsYm91bmRhcnk6InNjcm9sbFBhcmVudCIsc2FuaXRpemU6ITAsc2FuaXRpemVGbjpudWxsLHdoaXRlTGlzdDp2bn0sTG49InNob3ciLHhuPSJvdXQiLFBuPXtISURFOiJoaWRlIitUbixISURERU46ImhpZGRlbiIrVG4sU0hPVzoic2hvdyIrVG4sU0hPV046InNob3duIitUbixJTlNFUlRFRDoiaW5zZXJ0ZWQiK1RuLENMSUNLOiJjbGljayIrVG4sRk9DVVNJTjoiZm9jdXNpbiIrVG4sRk9DVVNPVVQ6ImZvY3Vzb3V0IitUbixNT1VTRUVOVEVSOiJtb3VzZWVudGVyIitUbixNT1VTRUxFQVZFOiJtb3VzZWxlYXZlIitUbn0sSG49ImZhZGUiLGpuPSJzaG93IixSbj0iLnRvb2x0aXAtaW5uZXIiLEZuPSIuYXJyb3ciLE1uPSJob3ZlciIsV249ImZvY3VzIixVbj0iY2xpY2siLEJuPSJtYW51YWwiLHFuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0LGUpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgYmUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9vdHN0cmFwJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIuanMgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy8pIik7dGhpcy5faXNFbmFibGVkPSEwLHRoaXMuX3RpbWVvdXQ9MCx0aGlzLl9ob3ZlclN0YXRlPSIiLHRoaXMuX2FjdGl2ZVRyaWdnZXI9e30sdGhpcy5fcG9wcGVyPW51bGwsdGhpcy5lbGVtZW50PXQsdGhpcy5jb25maWc9dGhpcy5fZ2V0Q29uZmlnKGUpLHRoaXMudGlwPW51bGwsdGhpcy5fc2V0TGlzdGVuZXJzKCl9dmFyIHQ9aS5wcm90b3R5cGU7cmV0dXJuIHQuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5faXNFbmFibGVkPSEwfSx0LmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9pc0VuYWJsZWQ9ITF9LHQudG9nZ2xlRW5hYmxlZD1mdW5jdGlvbigpe3RoaXMuX2lzRW5hYmxlZD0hdGhpcy5faXNFbmFibGVkfSx0LnRvZ2dsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9pc0VuYWJsZWQpaWYodCl7dmFyIGU9dGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSxuPXAodC5jdXJyZW50VGFyZ2V0KS5kYXRhKGUpO258fChuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHQuY3VycmVudFRhcmdldCx0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKSxwKHQuY3VycmVudFRhcmdldCkuZGF0YShlLG4pKSxuLl9hY3RpdmVUcmlnZ2VyLmNsaWNrPSFuLl9hY3RpdmVUcmlnZ2VyLmNsaWNrLG4uX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKT9uLl9lbnRlcihudWxsLG4pOm4uX2xlYXZlKG51bGwsbil9ZWxzZXtpZihwKHRoaXMuZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhqbikpcmV0dXJuIHZvaWQgdGhpcy5fbGVhdmUobnVsbCx0aGlzKTt0aGlzLl9lbnRlcihudWxsLHRoaXMpfX0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHAucmVtb3ZlRGF0YSh0aGlzLmVsZW1lbnQsdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSkscCh0aGlzLmVsZW1lbnQpLm9mZih0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSkscCh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoIi5tb2RhbCIpLm9mZigiaGlkZS5icy5tb2RhbCIpLHRoaXMudGlwJiZwKHRoaXMudGlwKS5yZW1vdmUoKSx0aGlzLl9pc0VuYWJsZWQ9bnVsbCx0aGlzLl90aW1lb3V0PW51bGwsdGhpcy5faG92ZXJTdGF0ZT1udWxsLCh0aGlzLl9hY3RpdmVUcmlnZ2VyPW51bGwpIT09dGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuZGVzdHJveSgpLHRoaXMuX3BvcHBlcj1udWxsLHRoaXMuZWxlbWVudD1udWxsLHRoaXMuY29uZmlnPW51bGwsdGhpcy50aXA9bnVsbH0sdC5zaG93PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZigibm9uZSI9PT1wKHRoaXMuZWxlbWVudCkuY3NzKCJkaXNwbGF5IikpdGhyb3cgbmV3IEVycm9yKCJQbGVhc2UgdXNlIHNob3cgb24gdmlzaWJsZSBlbGVtZW50cyIpO3ZhciB0PXAuRXZlbnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XKTtpZih0aGlzLmlzV2l0aENvbnRlbnQoKSYmdGhpcy5faXNFbmFibGVkKXtwKHRoaXMuZWxlbWVudCkudHJpZ2dlcih0KTt2YXIgbj1tLmZpbmRTaGFkb3dSb290KHRoaXMuZWxlbWVudCksaT1wLmNvbnRhaW5zKG51bGwhPT1uP246dGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuZWxlbWVudCk7aWYodC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8IWkpcmV0dXJuO3ZhciBvPXRoaXMuZ2V0VGlwRWxlbWVudCgpLHI9bS5nZXRVSUQodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKTtvLnNldEF0dHJpYnV0ZSgiaWQiLHIpLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLHIpLHRoaXMuc2V0Q29udGVudCgpLHRoaXMuY29uZmlnLmFuaW1hdGlvbiYmcChvKS5hZGRDbGFzcyhIbik7dmFyIHM9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29uZmlnLnBsYWNlbWVudD90aGlzLmNvbmZpZy5wbGFjZW1lbnQuY2FsbCh0aGlzLG8sdGhpcy5lbGVtZW50KTp0aGlzLmNvbmZpZy5wbGFjZW1lbnQsYT10aGlzLl9nZXRBdHRhY2htZW50KHMpO3RoaXMuYWRkQXR0YWNobWVudENsYXNzKGEpO3ZhciBsPXRoaXMuX2dldENvbnRhaW5lcigpO3AobykuZGF0YSh0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLHRoaXMpLHAuY29udGFpbnModGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMudGlwKXx8cChvKS5hcHBlbmRUbyhsKSxwKHRoaXMuZWxlbWVudCkudHJpZ2dlcih0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LklOU0VSVEVEKSx0aGlzLl9wb3BwZXI9bmV3IGJlKHRoaXMuZWxlbWVudCxvLHtwbGFjZW1lbnQ6YSxtb2RpZmllcnM6e29mZnNldDp0aGlzLl9nZXRPZmZzZXQoKSxmbGlwOntiZWhhdmlvcjp0aGlzLmNvbmZpZy5mYWxsYmFja1BsYWNlbWVudH0sYXJyb3c6e2VsZW1lbnQ6Rm59LHByZXZlbnRPdmVyZmxvdzp7Ym91bmRhcmllc0VsZW1lbnQ6dGhpcy5jb25maWcuYm91bmRhcnl9fSxvbkNyZWF0ZTpmdW5jdGlvbih0KXt0Lm9yaWdpbmFsUGxhY2VtZW50IT09dC5wbGFjZW1lbnQmJmUuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSh0KX0sb25VcGRhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSh0KX19KSxwKG8pLmFkZENsYXNzKGpuKSwib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmcChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9uKCJtb3VzZW92ZXIiLG51bGwscC5ub29wKTt2YXIgYz1mdW5jdGlvbigpe2UuY29uZmlnLmFuaW1hdGlvbiYmZS5fZml4VHJhbnNpdGlvbigpO3ZhciB0PWUuX2hvdmVyU3RhdGU7ZS5faG92ZXJTdGF0ZT1udWxsLHAoZS5lbGVtZW50KS50cmlnZ2VyKGUuY29uc3RydWN0b3IuRXZlbnQuU0hPV04pLHQ9PT14biYmZS5fbGVhdmUobnVsbCxlKX07aWYocCh0aGlzLnRpcCkuaGFzQ2xhc3MoSG4pKXt2YXIgaD1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMudGlwKTtwKHRoaXMudGlwKS5vbmUobS5UUkFOU0lUSU9OX0VORCxjKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChoKX1lbHNlIGMoKX19LHQuaGlkZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5nZXRUaXBFbGVtZW50KCksaT1wLkV2ZW50KHRoaXMuY29uc3RydWN0b3IuRXZlbnQuSElERSksbz1mdW5jdGlvbigpe2UuX2hvdmVyU3RhdGUhPT1MbiYmbi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobiksZS5fY2xlYW5UaXBDbGFzcygpLGUuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiKSxwKGUuZWxlbWVudCkudHJpZ2dlcihlLmNvbnN0cnVjdG9yLkV2ZW50LkhJRERFTiksbnVsbCE9PWUuX3BvcHBlciYmZS5fcG9wcGVyLmRlc3Ryb3koKSx0JiZ0KCl9O2lmKHAodGhpcy5lbGVtZW50KS50cmlnZ2VyKGkpLCFpLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZihwKG4pLnJlbW92ZUNsYXNzKGpuKSwib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmcChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9mZigibW91c2VvdmVyIixudWxsLHAubm9vcCksdGhpcy5fYWN0aXZlVHJpZ2dlcltVbl09ITEsdGhpcy5fYWN0aXZlVHJpZ2dlcltXbl09ITEsdGhpcy5fYWN0aXZlVHJpZ2dlcltNbl09ITEscCh0aGlzLnRpcCkuaGFzQ2xhc3MoSG4pKXt2YXIgcj1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KG4pO3Aobikub25lKG0uVFJBTlNJVElPTl9FTkQsbykuZW11bGF0ZVRyYW5zaXRpb25FbmQocil9ZWxzZSBvKCk7dGhpcy5faG92ZXJTdGF0ZT0iIn19LHQudXBkYXRlPWZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3BvcHBlciYmdGhpcy5fcG9wcGVyLnNjaGVkdWxlVXBkYXRlKCl9LHQuaXNXaXRoQ29udGVudD1mdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuZ2V0VGl0bGUoKSl9LHQuYWRkQXR0YWNobWVudENsYXNzPWZ1bmN0aW9uKHQpe3AodGhpcy5nZXRUaXBFbGVtZW50KCkpLmFkZENsYXNzKERuKyItIit0KX0sdC5nZXRUaXBFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGlwPXRoaXMudGlwfHxwKHRoaXMuY29uZmlnLnRlbXBsYXRlKVswXSx0aGlzLnRpcH0sdC5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRUaXBFbGVtZW50KCk7dGhpcy5zZXRFbGVtZW50Q29udGVudChwKHQucXVlcnlTZWxlY3RvckFsbChSbikpLHRoaXMuZ2V0VGl0bGUoKSkscCh0KS5yZW1vdmVDbGFzcyhIbisiICIram4pfSx0LnNldEVsZW1lbnRDb250ZW50PWZ1bmN0aW9uKHQsZSl7Im9iamVjdCIhPXR5cGVvZiBlfHwhZS5ub2RlVHlwZSYmIWUuanF1ZXJ5P3RoaXMuY29uZmlnLmh0bWw/KHRoaXMuY29uZmlnLnNhbml0aXplJiYoZT1ibihlLHRoaXMuY29uZmlnLndoaXRlTGlzdCx0aGlzLmNvbmZpZy5zYW5pdGl6ZUZuKSksdC5odG1sKGUpKTp0LnRleHQoZSk6dGhpcy5jb25maWcuaHRtbD9wKGUpLnBhcmVudCgpLmlzKHQpfHx0LmVtcHR5KCkuYXBwZW5kKGUpOnQudGV4dChwKGUpLnRleHQoKSl9LHQuZ2V0VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLW9yaWdpbmFsLXRpdGxlIik7cmV0dXJuIHR8fCh0PSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbmZpZy50aXRsZT90aGlzLmNvbmZpZy50aXRsZS5jYWxsKHRoaXMuZWxlbWVudCk6dGhpcy5jb25maWcudGl0bGUpLHR9LHQuX2dldE9mZnNldD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD17fTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb25maWcub2Zmc2V0P3QuZm49ZnVuY3Rpb24odCl7cmV0dXJuIHQub2Zmc2V0cz1sKHt9LHQub2Zmc2V0cyxlLmNvbmZpZy5vZmZzZXQodC5vZmZzZXRzLGUuZWxlbWVudCl8fHt9KSx0fTp0Lm9mZnNldD10aGlzLmNvbmZpZy5vZmZzZXQsdH0sdC5fZ2V0Q29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLmNvbmZpZy5jb250YWluZXI/ZG9jdW1lbnQuYm9keTptLmlzRWxlbWVudCh0aGlzLmNvbmZpZy5jb250YWluZXIpP3AodGhpcy5jb25maWcuY29udGFpbmVyKTpwKGRvY3VtZW50KS5maW5kKHRoaXMuY29uZmlnLmNvbnRhaW5lcil9LHQuX2dldEF0dGFjaG1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIE5uW3QudG9VcHBlckNhc2UoKV19LHQuX3NldExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBpPXRoaXM7dGhpcy5jb25maWcudHJpZ2dlci5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24odCl7aWYoImNsaWNrIj09PXQpcChpLmVsZW1lbnQpLm9uKGkuY29uc3RydWN0b3IuRXZlbnQuQ0xJQ0ssaS5jb25maWcuc2VsZWN0b3IsZnVuY3Rpb24odCl7cmV0dXJuIGkudG9nZ2xlKHQpfSk7ZWxzZSBpZih0IT09Qm4pe3ZhciBlPXQ9PT1Nbj9pLmNvbnN0cnVjdG9yLkV2ZW50Lk1PVVNFRU5URVI6aS5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU0lOLG49dD09PU1uP2kuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VMRUFWRTppLmNvbnN0cnVjdG9yLkV2ZW50LkZPQ1VTT1VUO3AoaS5lbGVtZW50KS5vbihlLGkuY29uZmlnLnNlbGVjdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBpLl9lbnRlcih0KX0pLm9uKG4saS5jb25maWcuc2VsZWN0b3IsZnVuY3Rpb24odCl7cmV0dXJuIGkuX2xlYXZlKHQpfSl9fSkscCh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoIi5tb2RhbCIpLm9uKCJoaWRlLmJzLm1vZGFsIixmdW5jdGlvbigpe2kuZWxlbWVudCYmaS5oaWRlKCl9KSx0aGlzLmNvbmZpZy5zZWxlY3Rvcj90aGlzLmNvbmZpZz1sKHt9LHRoaXMuY29uZmlnLHt0cmlnZ2VyOiJtYW51YWwiLHNlbGVjdG9yOiIifSk6dGhpcy5fZml4VGl0bGUoKX0sdC5fZml4VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10eXBlb2YgdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbC10aXRsZSIpOyh0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpfHwic3RyaW5nIiE9PXQpJiYodGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbC10aXRsZSIsdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgidGl0bGUiKXx8IiIpLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiIikpfSx0Ll9lbnRlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY29uc3RydWN0b3IuREFUQV9LRVk7KGU9ZXx8cCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobikpfHwoZT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0LmN1cnJlbnRUYXJnZXQsdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSkscCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobixlKSksdCYmKGUuX2FjdGl2ZVRyaWdnZXJbImZvY3VzaW4iPT09dC50eXBlP1duOk1uXT0hMCkscChlLmdldFRpcEVsZW1lbnQoKSkuaGFzQ2xhc3Moam4pfHxlLl9ob3ZlclN0YXRlPT09TG4/ZS5faG92ZXJTdGF0ZT1MbjooY2xlYXJUaW1lb3V0KGUuX3RpbWVvdXQpLGUuX2hvdmVyU3RhdGU9TG4sZS5jb25maWcuZGVsYXkmJmUuY29uZmlnLmRlbGF5LnNob3c/ZS5fdGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5faG92ZXJTdGF0ZT09PUxuJiZlLnNob3coKX0sZS5jb25maWcuZGVsYXkuc2hvdyk6ZS5zaG93KCkpfSx0Ll9sZWF2ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY29uc3RydWN0b3IuREFUQV9LRVk7KGU9ZXx8cCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobikpfHwoZT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0LmN1cnJlbnRUYXJnZXQsdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSkscCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobixlKSksdCYmKGUuX2FjdGl2ZVRyaWdnZXJbImZvY3Vzb3V0Ij09PXQudHlwZT9XbjpNbl09ITEpLGUuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKXx8KGNsZWFyVGltZW91dChlLl90aW1lb3V0KSxlLl9ob3ZlclN0YXRlPXhuLGUuY29uZmlnLmRlbGF5JiZlLmNvbmZpZy5kZWxheS5oaWRlP2UuX3RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX2hvdmVyU3RhdGU9PT14biYmZS5oaWRlKCl9LGUuY29uZmlnLmRlbGF5LmhpZGUpOmUuaGlkZSgpKX0sdC5faXNXaXRoQWN0aXZlVHJpZ2dlcj1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9hY3RpdmVUcmlnZ2VyKWlmKHRoaXMuX2FjdGl2ZVRyaWdnZXJbdF0pcmV0dXJuITA7cmV0dXJuITF9LHQuX2dldENvbmZpZz1mdW5jdGlvbih0KXt2YXIgZT1wKHRoaXMuZWxlbWVudCkuZGF0YSgpO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpey0xIT09QW4uaW5kZXhPZih0KSYmZGVsZXRlIGVbdF19KSwibnVtYmVyIj09dHlwZW9mKHQ9bCh7fSx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsZSwib2JqZWN0Ij09dHlwZW9mIHQmJnQ/dDp7fSkpLmRlbGF5JiYodC5kZWxheT17c2hvdzp0LmRlbGF5LGhpZGU6dC5kZWxheX0pLCJudW1iZXIiPT10eXBlb2YgdC50aXRsZSYmKHQudGl0bGU9dC50aXRsZS50b1N0cmluZygpKSwibnVtYmVyIj09dHlwZW9mIHQuY29udGVudCYmKHQuY29udGVudD10LmNvbnRlbnQudG9TdHJpbmcoKSksbS50eXBlQ2hlY2tDb25maWcod24sdCx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSx0LnNhbml0aXplJiYodC50ZW1wbGF0ZT1ibih0LnRlbXBsYXRlLHQud2hpdGVMaXN0LHQuc2FuaXRpemVGbikpLHR9LHQuX2dldERlbGVnYXRlQ29uZmlnPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5jb25maWcpZm9yKHZhciBlIGluIHRoaXMuY29uZmlnKXRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtlXSE9PXRoaXMuY29uZmlnW2VdJiYodFtlXT10aGlzLmNvbmZpZ1tlXSk7cmV0dXJuIHR9LHQuX2NsZWFuVGlwQ2xhc3M9ZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMuZ2V0VGlwRWxlbWVudCgpKSxlPXQuYXR0cigiY2xhc3MiKS5tYXRjaChJbik7bnVsbCE9PWUmJmUubGVuZ3RoJiZ0LnJlbW92ZUNsYXNzKGUuam9pbigiIikpfSx0Ll9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5pbnN0YW5jZTt0aGlzLnRpcD1lLnBvcHBlcix0aGlzLl9jbGVhblRpcENsYXNzKCksdGhpcy5hZGRBdHRhY2htZW50Q2xhc3ModGhpcy5fZ2V0QXR0YWNobWVudCh0LnBsYWNlbWVudCkpfSx0Ll9maXhUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRUaXBFbGVtZW50KCksZT10aGlzLmNvbmZpZy5hbmltYXRpb247bnVsbD09PXQuZ2V0QXR0cmlidXRlKCJ4LXBsYWNlbWVudCIpJiYocCh0KS5yZW1vdmVDbGFzcyhIbiksdGhpcy5jb25maWcuYW5pbWF0aW9uPSExLHRoaXMuaGlkZSgpLHRoaXMuc2hvdygpLHRoaXMuY29uZmlnLmFuaW1hdGlvbj1lKX0saS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLmRhdGEoQ24pLGU9Im9iamVjdCI9PXR5cGVvZiBuJiZuO2lmKCh0fHwhL2Rpc3Bvc2V8aGlkZS8udGVzdChuKSkmJih0fHwodD1uZXcgaSh0aGlzLGUpLHAodGhpcykuZGF0YShDbix0KSksInN0cmluZyI9PXR5cGVvZiBuKSl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJytuKyciJyk7dFtuXSgpfX0pfSxzKGksbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMy4xIn19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigpe3JldHVybiBrbn19LHtrZXk6Ik5BTUUiLGdldDpmdW5jdGlvbigpe3JldHVybiB3bn19LHtrZXk6IkRBVEFfS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQ259fSx7a2V5OiJFdmVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFBufX0se2tleToiRVZFTlRfS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVG59fSx7a2V5OiJEZWZhdWx0VHlwZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9ufX1dKSxpfSgpO3AuZm5bd25dPXFuLl9qUXVlcnlJbnRlcmZhY2UscC5mblt3bl0uQ29uc3RydWN0b3I9cW4scC5mblt3bl0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBwLmZuW3duXT1Tbixxbi5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgS249InBvcG92ZXIiLFFuPSJicy5wb3BvdmVyIixWbj0iLiIrUW4sWW49cC5mbltLbl0sem49ImJzLXBvcG92ZXIiLFhuPW5ldyBSZWdFeHA="
}