LyotCiAqID09PT09PT09PT09PUxJQ0VOU0VfU1RBUlQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIFNEQwogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBDb3B5cmlnaHQgKEMpIDIwMTcgQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKiAKICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICogCiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqID09PT09PT09PT09PUxJQ0VOU0VfRU5EPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwoKKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2UuaGlzdG9yeT1lLmhpc3Rvcnl8fFtdLGUuaGlzdG9yeS5wdXNoKGFyZ3VtZW50cyksdGhpcy5jb25zb2xlJiZjb25zb2xlLmxvZyhBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpWzBdKX10aGlzLkhhbmRsZWJhcnM9dGhpcy5IYW5kbGViYXJzfHx7fSx0aGlzLkhhbmRsZWJhcnMudGVtcGxhdGVzPXRoaXMuSGFuZGxlYmFycy50ZW1wbGF0ZXN8fHt9LHRoaXMuSGFuZGxlYmFycy50ZW1wbGF0ZXMuYXBpa2V5X2J1dHRvbl92aWV3PUhhbmRsZWJhcnMudGVtcGxhdGUoe2NvbXBpbGVyOls2LCI+PSAyLjAuMC1iZXRhLjEiXSxtYWluOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9ImZ1bmN0aW9uIixvPXQuaGVscGVyTWlzc2luZyxzPXRoaXMuZXNjYXBlRXhwcmVzc2lvbjtyZXR1cm4iPCEtLWRpdiBjbGFzcz0nYXV0aF9idXR0b24nIGlkPSdhcGlrZXlfYnV0dG9uJz48aW1nIGNsYXNzPSdhdXRoX2ljb24nIGFsdD0nYXBwbHkgYXBpIGtleScgc3JjPSdpbWFnZXMvYXBpa2V5LmpwZWcnPjwvZGl2LS0+XG48ZGl2IGNsYXNzPSdhdXRoX2NvbnRhaW5lcicgaWQ9J2FwaWtleV9jb250YWluZXInPlxuICA8ZGl2IGNsYXNzPSdrZXlfaW5wdXRfY29udGFpbmVyJz5cbiAgICA8ZGl2IGNsYXNzPSdhdXRoX2xhYmVsJz48bGFiZWwgZm9yPSdpbnB1dF9hcGlLZXlfZW50cnknPiIrcygoaT1udWxsIT0oaT10LmtleU5hbWV8fChudWxsIT1lP2Uua2V5TmFtZTplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToia2V5TmFtZSIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrIjwvbGFiZWw+PC9kaXY+XG4gICAgPGlucHV0IHBsYWNlaG9sZGVyPSdhcGlfa2V5JyBjbGFzcz0nYXV0aF9pbnB1dCcgaWQ9J2lucHV0X2FwaUtleV9lbnRyeScgbmFtZT0nYXBpS2V5JyB0eXBlPSd0ZXh0Jy8+XG4gICAgPGRpdiBjbGFzcz0nYXV0aF9zdWJtaXQnPjxhIGNsYXNzPSdhdXRoX3N1Ym1pdF9idXR0b24nIGlkPSdhcHBseV9hcGlfa2V5JyBocmVmPScjJyBkYXRhLXN3LXRyYW5zbGF0ZT5hcHBseTwvYT48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJ9LHVzZURhdGE6ITB9KSx0aGlzLkhhbmRsZWJhcnMudGVtcGxhdGVzLmJhc2ljX2F1dGhfYnV0dG9uX3ZpZXc9SGFuZGxlYmFycy50ZW1wbGF0ZSh7Y29tcGlsZXI6WzYsIj49IDIuMC4wLWJldGEuMSJdLG1haW46ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuJzxkaXYgY2xhc3M9XCdhdXRoX2J1dHRvblwnIGlkPVwnYmFzaWNfYXV0aF9idXR0b25cJz48aW1nIGNsYXNzPVwnYXV0aF9pY29uXCcgc3JjPVwnaW1hZ2VzL3Bhc3N3b3JkLmpwZWdcJz48L2Rpdj5cbjxkaXYgY2xhc3M9XCdhdXRoX2NvbnRhaW5lclwnIGlkPVwnYmFzaWNfYXV0aF9jb250YWluZXJcJz5cbiAgPGRpdiBjbGFzcz1cJ2tleV9pbnB1dF9jb250YWluZXJcJz5cbiAgICA8ZGl2IGNsYXNzPSJhdXRoX2xhYmVsIj48bGFiZWwgZm9yPSJpbnB1dF91c2VybmFtZSIgZGF0YS1zdy10cmFuc2xhdGU+VXNlcm5hbWU8L2xhYmVsPjwvZGl2PlxuICAgIDxpbnB1dCBwbGFjZWhvbGRlcj0idXNlcm5hbWUiIGNsYXNzPSJhdXRoX2lucHV0IiBpZD0iaW5wdXRfdXNlcm5hbWUiIG5hbWU9InVzZXJuYW1lIiB0eXBlPSJ0ZXh0Ii8+XG4gICAgPGRpdiBjbGFzcz0iYXV0aF9sYWJlbCI+PGxhYmVsIGZvcj0icGFzc3dvcmQiIGRhdGEtc3ctdHJhbnNsYXRlPlBhc3N3b3JkPC9sYWJlbD48L2Rpdj5cbiAgICA8aW5wdXQgcGxhY2Vob2xkZXI9InBhc3N3b3JkIiBjbGFzcz0iYXV0aF9pbnB1dCIgaWQ9ImlucHV0X3Bhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiLz5cbiAgICA8ZGl2IGNsYXNzPVwnYXV0aF9zdWJtaXRcJz48YSBjbGFzcz1cJ2F1dGhfc3VibWl0X2J1dHRvblwnIGlkPSJhcHBseV9iYXNpY19hdXRoIiBocmVmPSIjIj5hcHBseTwvYT48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuJ30sdXNlRGF0YTohMH0pLHRoaXMuSGFuZGxlYmFycy50ZW1wbGF0ZXMuY29udGVudF90eXBlPUhhbmRsZWJhcnMudGVtcGxhdGUoezE6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYT0iIjtyZXR1cm4gaT10LmVhY2guY2FsbChlLG51bGwhPWU/ZS5wcm9kdWNlczplLHtuYW1lOiJlYWNoIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgyLHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJihhKz1pKSxhfSwyOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9dGhpcy5sYW1iZGEsbz0nCTxvcHRpb24gdmFsdWU9Iic7cmV0dXJuIGk9YShlLGUpLG51bGwhPWkmJihvKz1pKSxvKz0nIj4nLGk9YShlLGUpLG51bGwhPWkmJihvKz1pKSxvKyI8L29wdGlvbj5cbiJ9LDQ6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuJyAgPG9wdGlvbiB2YWx1ZT0iYXBwbGljYXRpb24vanNvbiI+YXBwbGljYXRpb24vanNvbjwvb3B0aW9uPlxuJ30sY29tcGlsZXI6WzYsIj49IDIuMC4wLWJldGEuMSJdLG1haW46ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYSxvPSJmdW5jdGlvbiIscz10LmhlbHBlck1pc3NpbmcsbD10aGlzLmVzY2FwZUV4cHJlc3Npb24sdT0nPGxhYmVsIGRhdGEtc3ctdHJhbnNsYXRlIGZvcj0iJytsKChhPW51bGwhPShhPXQuY29udGVudFR5cGVJZHx8KG51bGwhPWU/ZS5jb250ZW50VHlwZUlkOmUpKT9hOnMsdHlwZW9mIGE9PT1vP2EuY2FsbChlLHtuYW1lOiJjb250ZW50VHlwZUlkIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsnIj5SZXNwb25zZSBDb250ZW50IFR5cGU8L2xhYmVsPlxuPHNlbGVjdCBuYW1lPSJjb250ZW50VHlwZSIgaWQ9IicrbCgoYT1udWxsIT0oYT10LmNvbnRlbnRUeXBlSWR8fChudWxsIT1lP2UuY29udGVudFR5cGVJZDplKSk/YTpzLHR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToiY29udGVudFR5cGVJZCIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrJyI+XG4nO3JldHVybiBpPXRbImlmIl0uY2FsbChlLG51bGwhPWU/ZS5wcm9kdWNlczplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMSxyKSxpbnZlcnNlOnRoaXMucHJvZ3JhbSg0LHIpLGRhdGE6cn0pLG51bGwhPWkmJih1Kz1pKSx1KyI8L3NlbGVjdD5cbiJ9LHVzZURhdGE6ITB9KSwkKGZ1bmN0aW9uKCl7JC5mbi52QWxpZ249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9JCh0aGlzKS5oZWlnaHQoKSx0PSQodGhpcykucGFyZW50KCkuaGVpZ2h0KCksbj0odC1lKS8yOyQodGhpcykuY3NzKCJtYXJnaW4tdG9wIixuKX0pfSwkLmZuLnN0cmV0Y2hGb3JtdGFzdGljSW5wdXRXaWR0aFRvUGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPSQodGhpcykuY2xvc2VzdCgiZm9ybSIpLmlubmVyV2lkdGgoKSx0PXBhcnNlSW50KCQodGhpcykuY2xvc2VzdCgiZm9ybSIpLmNzcygicGFkZGluZy1sZWZ0IiksMTApK3BhcnNlSW50KCQodGhpcykuY2xvc2VzdCgiZm9ybSIpLmNzcygicGFkZGluZy1yaWdodCIpLDEwKSxuPXBhcnNlSW50KCQodGhpcykuY3NzKCJwYWRkaW5nLWxlZnQiKSwxMCkrcGFyc2VJbnQoJCh0aGlzKS5jc3MoInBhZGRpbmctcmlnaHQiKSwxMCk7JCh0aGlzKS5jc3MoIndpZHRoIixlLXQtbil9KX0sJCgiZm9ybS5mb3JtdGFzdGljIGxpLnN0cmluZyBpbnB1dCwgZm9ybS5mb3JtdGFzdGljIHRleHRhcmVhIikuc3RyZXRjaEZvcm10YXN0aWNJbnB1dFdpZHRoVG9QYXJlbnQoKSwkKCJ1bC5kb3ducGxheWVkIGxpIGRpdi5jb250ZW50IHAiKS52QWxpZ24oKSwkKCJmb3JtLnNhbmRib3giKS5zdWJtaXQoZnVuY3Rpb24oKXt2YXIgZT0hMDtyZXR1cm4gJCh0aGlzKS5maW5kKCJpbnB1dC5yZXF1aXJlZCIpLmVhY2goZnVuY3Rpb24oKXskKHRoaXMpLnJlbW92ZUNsYXNzKCJlcnJvciIpLCIiPT09JCh0aGlzKS52YWwoKSYmKCQodGhpcykuYWRkQ2xhc3MoImVycm9yIiksJCh0aGlzKS53aWdnbGUoKSxlPSExKX0pLGV9KX0pLEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kJiZjb25zb2xlJiYib2JqZWN0Ij09dHlwZW9mIGNvbnNvbGUubG9nJiZbImxvZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJhc3NlcnQiLCJkaXIiLCJjbGVhciIsInByb2ZpbGUiLCJwcm9maWxlRW5kIl0uZm9yRWFjaChmdW5jdGlvbihlKXtjb25zb2xlW2VdPXRoaXMuYmluZChjb25zb2xlW2VdLGNvbnNvbGUpfSxGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCksd2luZG93LkRvY3M9e3NoZWJhbmc6ZnVuY3Rpb24oKXt2YXIgZT0kLnBhcmFtLmZyYWdtZW50KCkuc3BsaXQoIi8iKTtzd2l0Y2goZS5zaGlmdCgpLGUubGVuZ3RoKXtjYXNlIDE6aWYoZVswXS5sZW5ndGg+MCl7dmFyIHQ9InJlc291cmNlXyIrZVswXTtEb2NzLmV4cGFuZEVuZHBvaW50TGlzdEZvclJlc291cmNlKGVbMF0pLCQoIiMiK3QpLnNsaWRldG8oe2hpZ2hsaWdodDohMX0pfWJyZWFrO2Nhc2UgMjpEb2NzLmV4cGFuZEVuZHBvaW50TGlzdEZvclJlc291cmNlKGVbMF0pLCQoIiMiK3QpLnNsaWRldG8oe2hpZ2hsaWdodDohMX0pO3ZhciBuPWUuam9pbigiXyIpLHI9bisiX2NvbnRlbnQiO0RvY3MuZXhwYW5kT3BlcmF0aW9uKCQoIiMiK3IpKSwkKCIjIituKS5zbGlkZXRvKHtoaWdobGlnaHQ6ITF9KX19LHRvZ2dsZUVuZHBvaW50TGlzdEZvclJlc291cmNlOmZ1bmN0aW9uKGUpe3ZhciB0PSQoImxpI3Jlc291cmNlXyIrRG9jcy5lc2NhcGVSZXNvdXJjZU5hbWUoZSkrIiB1bC5lbmRwb2ludHMiKTt0LmlzKCI6dmlzaWJsZSIpP0RvY3MuY29sbGFwc2VFbmRwb2ludExpc3RGb3JSZXNvdXJjZShlKTpEb2NzLmV4cGFuZEVuZHBvaW50TGlzdEZvclJlc291cmNlKGUpfSxleHBhbmRFbmRwb2ludExpc3RGb3JSZXNvdXJjZTpmdW5jdGlvbihlKXt2YXIgZT1Eb2NzLmVzY2FwZVJlc291cmNlTmFtZShlKTtpZigiIj09ZSlyZXR1cm4gdm9pZCAkKCIucmVzb3VyY2UgdWwuZW5kcG9pbnRzIikuc2xpZGVEb3duKCk7JCgibGkjcmVzb3VyY2VfIitlKS5hZGRDbGFzcygiYWN0aXZlIik7dmFyIHQ9JCgibGkjcmVzb3VyY2VfIitlKyIgdWwuZW5kcG9pbnRzIik7dC5zbGlkZURvd24oKX0sY29sbGFwc2VFbmRwb2ludExpc3RGb3JSZXNvdXJjZTpmdW5jdGlvbihlKXt2YXIgZT1Eb2NzLmVzY2FwZVJlc291cmNlTmFtZShlKTtpZigiIj09ZSlyZXR1cm4gdm9pZCAkKCIucmVzb3VyY2UgdWwuZW5kcG9pbnRzIikuc2xpZGVVcCgpOyQoImxpI3Jlc291cmNlXyIrZSkucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpO3ZhciB0PSQoImxpI3Jlc291cmNlXyIrZSsiIHVsLmVuZHBvaW50cyIpO3Quc2xpZGVVcCgpfSxleHBhbmRPcGVyYXRpb25zRm9yUmVzb3VyY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIERvY3MuZXhwYW5kRW5kcG9pbnRMaXN0Rm9yUmVzb3VyY2UoZSksIiI9PWU/dm9pZCAkKCIucmVzb3VyY2UgdWwuZW5kcG9pbnRzIGxpLm9wZXJhdGlvbiBkaXYuY29udGVudCIpLnNsaWRlRG93bigpOnZvaWQgJCgibGkjcmVzb3VyY2VfIitEb2NzLmVzY2FwZVJlc291cmNlTmFtZShlKSsiIGxpLm9wZXJhdGlvbiBkaXYuY29udGVudCIpLmVhY2goZnVuY3Rpb24oKXtEb2NzLmV4cGFuZE9wZXJhdGlvbigkKHRoaXMpKX0pfSxjb2xsYXBzZU9wZXJhdGlvbnNGb3JSZXNvdXJjZTpmdW5jdGlvbihlKXtyZXR1cm4gRG9jcy5leHBhbmRFbmRwb2ludExpc3RGb3JSZXNvdXJjZShlKSwiIj09ZT92b2lkICQoIi5yZXNvdXJjZSB1bC5lbmRwb2ludHMgbGkub3BlcmF0aW9uIGRpdi5jb250ZW50Iikuc2xpZGVVcCgpOnZvaWQgJCgibGkjcmVzb3VyY2VfIitEb2NzLmVzY2FwZVJlc291cmNlTmFtZShlKSsiIGxpLm9wZXJhdGlvbiBkaXYuY29udGVudCIpLmVhY2goZnVuY3Rpb24oKXtEb2NzLmNvbGxhcHNlT3BlcmF0aW9uKCQodGhpcykpfSl9LGVzY2FwZVJlc291cmNlTmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bISIjJCUmJygpKissLlwvOjs8PT4/QFxbXFxcXVxeYHt8fX5dL2csIlxcJCYiKX0sZXhwYW5kT3BlcmF0aW9uOmZ1bmN0aW9uKGUpe2Uuc2xpZGVEb3duKCl9LGNvbGxhcHNlT3BlcmF0aW9uOmZ1bmN0aW9uKGUpe2Uuc2xpZGVVcCgpfX0sSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcigic2FuaXRpemUiLGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSwiIiksbmV3IEhhbmRsZWJhcnMuU2FmZVN0cmluZyhlKX0pLEhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoInJlbmRlclRleHRQYXJhbSIsZnVuY3Rpb24oZSl7dmFyIHQsbj0idGV4dCIscj0iIixpPSJhcnJheSI9PT1lLnR5cGUudG9Mb3dlckNhc2UoKXx8ZS5hbGxvd011bHRpcGxlLGE9aSYmQXJyYXkuaXNBcnJheShlWyJkZWZhdWx0Il0pP2VbImRlZmF1bHQiXS5qb2luKCJcbiIpOmVbImRlZmF1bHQiXSxvPU9iamVjdC5rZXlzKGUpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUubWF0Y2goL15YLWRhdGEtL2kpfSkucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQrPSIgIituLnN1YnN0cmluZygyLG4ubGVuZ3RoKSsiPSciK2Vbbl0rIicifSwiIik7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBhJiYoYT0iIiksZS5mb3JtYXQmJiJwYXNzd29yZCI9PT1lLmZvcm1hdCYmKG49InBhc3N3b3JkIiksZS52YWx1ZUlkJiYocj0iIGlkPSciK2UudmFsdWVJZCsiJyIpLGkpdD0iPHRleHRhcmVhIGNsYXNzPSdib2R5LXRleHRhcmVhIisoZS5yZXF1aXJlZD8iIHJlcXVpcmVkIjoiIikrIicgbmFtZT0nIitlLm5hbWUrIiciK3Irbyx0Kz0iIHBsYWNlaG9sZGVyPSdQcm92aWRlIG11bHRpcGxlIHZhbHVlcyBpbiBuZXcgbGluZXMiKyhlLnJlcXVpcmVkPyIgKGF0IGxlYXN0IG9uZSByZXF1aXJlZCkuIjoiLiIpKyInPiIsdCs9YSsiPC90ZXh0YXJlYT4iO2Vsc2V7dmFyIHM9InBhcmFtZXRlciI7ZS5yZXF1aXJlZCYmKHMrPSIgcmVxdWlyZWQiKSx0PSI8aW5wdXQgY2xhc3M9JyIrcysiJyBtaW5sZW5ndGg9JyIrKGUucmVxdWlyZWQ/MTowKSsiJyIsdCs9IiBuYW1lPSciK2UubmFtZSsiJyBwbGFjZWhvbGRlcj0nIisoZS5yZXF1aXJlZD8iKHJlcXVpcmVkKSI6IiIpKyInIityK28sdCs9IiB0eXBlPSciK24rIicgdmFsdWU9JyIrYSsiJy8+In1yZXR1cm4gbmV3IEhhbmRsZWJhcnMuU2FmZVN0cmluZyh0KX0pLHRoaXMuSGFuZGxlYmFycy50ZW1wbGF0ZXMubWFpbj1IYW5kbGViYXJzLnRlbXBsYXRlKHsxOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9dGhpcy5sYW1iZGEsbz10aGlzLmVzY2FwZUV4cHJlc3Npb24scz0nICA8ZGl2IGNsYXNzPSJpbmZvX3RpdGxlIj4nK28oYShudWxsIT0oaT1udWxsIT1lP2UuaW5mbzplKT9pLnRpdGxlOmksZSkpKyc8L2Rpdj5cbiAgPGRpdiBjbGFzcz0iaW5mb19kZXNjcmlwdGlvbiBtYXJrZG93biI+JztyZXR1cm4gaT1hKG51bGwhPShpPW51bGwhPWU/ZS5pbmZvOmUpP2kuZGVzY3JpcHRpb246aSxlKSxudWxsIT1pJiYocys9aSkscys9IjwvZGl2PlxuIixpPXRbImlmIl0uY2FsbChlLG51bGwhPWU/ZS5leHRlcm5hbERvY3M6ZSx7bmFtZToiaWYiLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDIsciksaW52ZXJzZTp0aGlzLm5vb3AsZGF0YTpyfSksbnVsbCE9aSYmKHMrPWkpLHMrPSIgICIsaT10WyJpZiJdLmNhbGwoZSxudWxsIT0oaT1udWxsIT1lP2UuaW5mbzplKT9pLnRlcm1zT2ZTZXJ2aWNlVXJsOmkse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSg0LHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJihzKz1pKSxzKz0iXG4gICIsaT10WyJpZiJdLmNhbGwoZSxudWxsIT0oaT1udWxsIT0oaT1udWxsIT1lP2UuaW5mbzplKT9pLmNvbnRhY3Q6aSk/aS5uYW1lOmkse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSg2LHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJihzKz1pKSxzKz0iXG4gICIsaT10WyJpZiJdLmNhbGwoZSxudWxsIT0oaT1udWxsIT0oaT1udWxsIT1lP2UuaW5mbzplKT9pLmNvbnRhY3Q6aSk/aS51cmw6aSx7bmFtZToiaWYiLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDgsciksaW52ZXJzZTp0aGlzLm5vb3AsZGF0YTpyfSksbnVsbCE9aSYmKHMrPWkpLHMrPSJcbiAgIixpPXRbImlmIl0uY2FsbChlLG51bGwhPShpPW51bGwhPShpPW51bGwhPWU/ZS5pbmZvOmUpP2kuY29udGFjdDppKT9pLmVtYWlsOmkse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgxMCxyKSxpbnZlcnNlOnRoaXMubm9vcCxkYXRhOnJ9KSxudWxsIT1pJiYocys9aSkscys9IlxuICAiLGk9dFsiaWYiXS5jYWxsKGUsbnVsbCE9KGk9bnVsbCE9ZT9lLmluZm86ZSk/aS5saWNlbnNlOmkse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgxMixyKSxpbnZlcnNlOnRoaXMubm9vcCxkYXRhOnJ9KSxudWxsIT1pJiYocys9aSkscysiXG4ifSwyOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9dGhpcy5sYW1iZGEsbz10aGlzLmVzY2FwZUV4cHJlc3Npb247cmV0dXJuIiAgPHA+IitvKGEobnVsbCE9KGk9bnVsbCE9ZT9lLmV4dGVybmFsRG9jczplKT9pLmRlc2NyaXB0aW9uOmksZSkpKyc8L3A+XG4gIDxhIGhyZWY9IicrbyhhKG51bGwhPShpPW51bGwhPWU/ZS5leHRlcm5hbERvY3M6ZSk/aS51cmw6aSxlKSkrJyIgdGFyZ2V0PSJfYmxhbmsiPicrbyhhKG51bGwhPShpPW51bGwhPWU/ZS5leHRlcm5hbERvY3M6ZSk/aS51cmw6aSxlKSkrIjwvYT5cbiJ9LDQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYT10aGlzLmxhbWJkYSxvPXRoaXMuZXNjYXBlRXhwcmVzc2lvbjtyZXR1cm4nPGRpdiBjbGFzcz0iaW5mb190b3MiPjxhIGhyZWY9IicrbyhhKG51bGwhPShpPW51bGwhPWU/ZS5pbmZvOmUpP2kudGVybXNPZlNlcnZpY2VVcmw6aSxlKSkrJyIgZGF0YS1zdy10cmFuc2xhdGU+VGVybXMgb2Ygc2VydmljZTwvYT48L2Rpdj4nfSw2OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9dGhpcy5sYW1iZGEsbz10aGlzLmVzY2FwZUV4cHJlc3Npb247cmV0dXJuIjxkaXYgY2xhc3M9J2luZm9fbmFtZScgZGF0YS1zdy10cmFuc2xhdGU+Q3JlYXRlZCBieSAiK28oYShudWxsIT0oaT1udWxsIT0oaT1udWxsIT1lP2UuaW5mbzplKT9pLmNvbnRhY3Q6aSk/aS5uYW1lOmksZSkpKyI8L2Rpdj4ifSw4OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9dGhpcy5sYW1iZGEsbz10aGlzLmVzY2FwZUV4cHJlc3Npb247cmV0dXJuIjxkaXYgY2xhc3M9J2luZm9fdXJsJyBkYXRhLXN3LXRyYW5zbGF0ZT5TZWUgbW9yZSBhdCA8YSBocmVmPVwiIitvKGEobnVsbCE9KGk9bnVsbCE9KGk9bnVsbCE9ZT9lLmluZm86ZSk/aS5jb250YWN0OmkpP2kudXJsOmksZSkpKyciPicrbyhhKG51bGwhPShpPW51bGwhPShpPW51bGwhPWU/ZS5pbmZvOmUpP2kuY29udGFjdDppKT9pLnVybDppLGUpKSsiPC9hPjwvZGl2PiJ9LDEwOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9dGhpcy5sYW1iZGEsbz10aGlzLmVzY2FwZUV4cHJlc3Npb247cmV0dXJuIjxkaXYgY2xhc3M9J2luZm9fZW1haWwnPjxhIGhyZWY9XCJtYWlsdG86IitvKGEobnVsbCE9KGk9bnVsbCE9KGk9bnVsbCE9ZT9lLmluZm86ZSk/aS5jb250YWN0OmkpP2kuZW1haWw6aSxlKSkrIj9zdWJqZWN0PSIrbyhhKG51bGwhPShpPW51bGwhPWU/ZS5pbmZvOmUpP2kudGl0bGU6aSxlKSkrJyIgZGF0YS1zdy10cmFuc2xhdGU+Q29udGFjdCB0aGUgZGV2ZWxvcGVyPC9hPjwvZGl2Pid9LDEyOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9dGhpcy5sYW1iZGEsbz10aGlzLmVzY2FwZUV4cHJlc3Npb247cmV0dXJuIjxkaXYgY2xhc3M9J2luZm9fbGljZW5zZSc+PGEgaHJlZj0nIitvKGEobnVsbCE9KGk9bnVsbCE9KGk9bnVsbCE9ZT9lLmluZm86ZSk/aS5saWNlbnNlOmkpP2kudXJsOmksZSkpKyInPiIrbyhhKG51bGwhPShpPW51bGwhPShpPW51bGwhPWU/ZS5pbmZvOmUpP2kubGljZW5zZTppKT9pLm5hbWU6aSxlKSkrIjwvYT48L2Rpdj4ifSwxNDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhPXRoaXMubGFtYmRhLG89dGhpcy5lc2NhcGVFeHByZXNzaW9uO3JldHVybicgICwgPHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudDogc21hbGwtY2FwcyIgZGF0YS1zdy10cmFuc2xhdGU+YXBpIHZlcnNpb248L3NwYW4+OiAnK28oYShudWxsIT0oaT1udWxsIT1lP2UuaW5mbzplKT9pLnZlcnNpb246aSxlKSkrIlxuICAgICJ9LDE2OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9ImZ1bmN0aW9uIixvPXQuaGVscGVyTWlzc2luZyxzPXRoaXMuZXNjYXBlRXhwcmVzc2lvbjtyZXR1cm4nICAgIDxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodCI+PGEgaHJlZj0iJytzKChpPW51bGwhPShpPXQudmFsaWRhdG9yVXJsfHwobnVsbCE9ZT9lLnZhbGlkYXRvclVybDplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToidmFsaWRhdG9yVXJsIixoYXNoOnt9LGRhdGE6cn0pOmkpKSsiL2RlYnVnP3VybD0iK3MoKGk9bnVsbCE9KGk9dC51cmx8fChudWxsIT1lP2UudXJsOmUpKT9pOm8sdHlwZW9mIGk9PT1hP2kuY2FsbChlLHtuYW1lOiJ1cmwiLGhhc2g6e30sZGF0YTpyfSk6aSkpKyciPjxpbWcgaWQ9InZhbGlkYXRvciIgc3JjPSInK3MoKGk9bnVsbCE9KGk9dC52YWxpZGF0b3JVcmx8fChudWxsIT1lP2UudmFsaWRhdG9yVXJsOmUpKT9pOm8sdHlwZW9mIGk9PT1hP2kuY2FsbChlLHtuYW1lOiJ2YWxpZGF0b3JVcmwiLGhhc2g6e30sZGF0YTpyfSk6aSkpKyI/dXJsPSIrcygoaT1udWxsIT0oaT10LnVybHx8KG51bGwhPWU/ZS51cmw6ZSkpP2k6byx0eXBlb2YgaT09PWE/aS5jYWxsKGUse25hbWU6InVybCIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrJyI+PC9hPlxuICAgIDwvc3Bhbj5cbid9LGNvbXBpbGVyOls2LCI+PSAyLjAuMC1iZXRhLjEiXSxtYWluOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGEsbz0iZnVuY3Rpb24iLHM9dC5oZWxwZXJNaXNzaW5nLGw9dGhpcy5lc2NhcGVFeHByZXNzaW9uLHU9IjxkaXYgY2xhc3M9J2luZm8nIGlkPSdhcGlfaW5mbyc+XG4iO3JldHVybiBpPXRbImlmIl0uY2FsbChlLG51bGwhPWU/ZS5pbmZvOmUse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgxLHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJih1Kz1pKSx1Kz0iPC9kaXY+XG48ZGl2IGNsYXNzPSdjb250YWluZXInIGlkPSdyZXNvdXJjZXNfY29udGFpbmVyJz5cbiAgPHVsIGlkPSdyZXNvdXJjZXMnPjwvdWw+XG5cbiAgPGRpdiBjbGFzcz1cImZvb3RlclwiPlxuICAgIDxoNCBzdHlsZT1cImNvbG9yOiAjOTk5XCI+WyA8c3BhbiBzdHlsZT1cImZvbnQtdmFyaWFudDogc21hbGwtY2Fwc1wiPmJhc2UgdXJsPC9zcGFuPjogIitsKChhPW51bGwhPShhPXQuYmFzZVBhdGh8fChudWxsIT1lP2UuYmFzZVBhdGg6ZSkpP2E6cyx0eXBlb2YgYT09PW8/YS5jYWxsKGUse25hbWU6ImJhc2VQYXRoIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsiXG4iLGk9dFsiaWYiXS5jYWxsKGUsbnVsbCE9KGk9bnVsbCE9ZT9lLmluZm86ZSk/aS52ZXJzaW9uOmkse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgxNCxyKSxpbnZlcnNlOnRoaXMubm9vcCxkYXRhOnJ9KSxudWxsIT1pJiYodSs9aSksdSs9Il1cbiIsaT10WyJpZiJdLmNhbGwoZSxudWxsIT1lP2UudmFsaWRhdG9yVXJsOmUse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgxNixyKSxpbnZlcnNlOnRoaXMubm9vcCxkYXRhOnJ9KSxudWxsIT1pJiYodSs9aSksdSsiICAgIDwvaDQ+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJ9LHVzZURhdGE6ITB9KSx0aGlzLkhhbmRsZWJhcnMudGVtcGxhdGVzLm9wZXJhdGlvbj1IYW5kbGViYXJzLnRlbXBsYXRlKHsxOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiJkZXByZWNhdGVkIn0sMzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4iICAgICAgICAgICAgPGg0Pldhcm5pbmc6IERlcHJlY2F0ZWQ8L2g0PlxuIn0sNTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhLG89ImZ1bmN0aW9uIixzPXQuaGVscGVyTWlzc2luZyxsPScgICAgICAgIDxoND5JbXBsZW1lbnRhdGlvbiBOb3RlczwvaDQ+XG4gICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duIj4nO3JldHVybiBhPW51bGwhPShhPXQuZGVzY3JpcHRpb258fChudWxsIT1lP2UuZGVzY3JpcHRpb246ZSkpP2E6cyxpPXR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToiZGVzY3JpcHRpb24iLGhhc2g6e30sZGF0YTpyfSk6YSxudWxsIT1pJiYobCs9aSksbCsiPC9kaXY+XG4ifSw3OmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybicgICAgICAgIDxkaXYgY2xhc3M9ImF1dGgiPlxuICAgICAgICA8c3BhbiBjbGFzcz0iYXBpLWljIGljLWVycm9yIj4nfSw5OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9JyAgICAgICAgICA8ZGl2IGNsYXNzPSJhcGlfaW5mb3JtYXRpb25fcGFuZWwiPlxuJztyZXR1cm4gaT10LmVhY2guY2FsbChlLGUse25hbWU6ImVhY2giLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDEwLHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJihhKz1pKSxhKyIgICAgICAgICAgPC9kaXY+XG4ifSwxMDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhPXRoaXMubGFtYmRhLG89dGhpcy5lc2NhcGVFeHByZXNzaW9uLHM9IiAgICAgICAgICAgIDxkaXYgdGl0bGU9JyI7cmV0dXJuIGk9YShudWxsIT1lP2UuZGVzY3JpcHRpb246ZSxlKSxudWxsIT1pJiYocys9aSkscysiJz4iK28oYShudWxsIT1lP2Uuc2NvcGU6ZSxlKSkrIjwvZGl2PlxuIn0sMTI6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIjwvc3Bhbj48L2Rpdj4ifSwxNDpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4nICAgICAgICA8ZGl2IGNsYXNzPVwnYWNjZXNzXCc+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImFwaS1pYyBpYy1vZmYiIHRpdGxlPSJjbGljayB0byBhdXRoZW50aWNhdGUiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4nfSwxNjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhPSJmdW5jdGlvbiIsbz10LmhlbHBlck1pc3Npbmcscz10aGlzLmVzY2FwZUV4cHJlc3Npb247cmV0dXJuIiAgICAgICAgICA8aDQ+PHNwYW4gZGF0YS1zdy10cmFuc2xhdGU+UmVzcG9uc2UgQ2xhc3M8L3NwYW4+ICg8c3BhbiBkYXRhLXN3LXRyYW5zbGF0ZT5TdGF0dXM8L3NwYW4+ICIrcygoaT1udWxsIT0oaT10LnN1Y2Nlc3NDb2RlfHwobnVsbCE9ZT9lLnN1Y2Nlc3NDb2RlOmUpKT9pOm8sdHlwZW9mIGk9PT1hP2kuY2FsbChlLHtuYW1lOiJzdWNjZXNzQ29kZSIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrJyk8L2g0PlxuICAgICAgICAgIDxwPjxzcGFuIGNsYXNzPSJtb2RlbC1zaWduYXR1cmUiIC8+PC9wPlxuICAgICAgICAgIDxici8+XG4gICAgICAgICAgPGRpdiBjbGFzcz0icmVzcG9uc2UtY29udGVudC10eXBlIiAvPlxuJ30sMTg6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuJyAgICAgICAgICA8aDQgZGF0YS1zdy10cmFuc2xhdGU+UGFyYW1ldGVyczwvaDQ+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwnZnVsbHdpZHRoXCc+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDogMTAwcHg7IG1heC13aWR0aDogMTAwcHgiIGRhdGEtc3ctdHJhbnNsYXRlPlBhcmFtZXRlcjwvdGg+XG4gICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOiAzMTBweDsgbWF4LXdpZHRoOiAzMTBweCIgZGF0YS1zdy10cmFuc2xhdGU+VmFsdWU8L3RoPlxuICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDogMjAwcHg7IG1heC13aWR0aDogMjAwcHgiIGRhdGEtc3ctdHJhbnNsYXRlPkRlc2NyaXB0aW9uPC90aD5cbiAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6IDEwMHB4OyBtYXgtd2lkdGg6IDEwMHB4IiBkYXRhLXN3LXRyYW5zbGF0ZT5QYXJhbWV0ZXIgVHlwZTwvdGg+XG4gICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOiAyMjBweDsgbWF4LXdpZHRoOiAyMzBweCIgZGF0YS1zdy10cmFuc2xhdGU+RGF0YSBUeXBlPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHkgY2xhc3M9Im9wZXJhdGlvbi1wYXJhbXMiPlxuXG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuJ30sMjA6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIiAgICAgICAgICA8ZGl2IHN0eWxlPSdtYXJnaW46MDtwYWRkaW5nOjA7ZGlzcGxheTppbmxpbmUnPjwvZGl2PlxuICAgICAgICAgIDxoNCBkYXRhLXN3LXRyYW5zbGF0ZT5SZXNwb25zZSBNZXNzYWdlczwvaDQ+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzPSdmdWxsd2lkdGgnPlxuICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGggZGF0YS1zdy10cmFuc2xhdGU+SFRUUCBTdGF0dXMgQ29kZTwvdGg+XG4gICAgICAgICAgICAgIDx0aCBkYXRhLXN3LXRyYW5zbGF0ZT5SZWFzb248L3RoPlxuICAgICAgICAgICAgICA8dGggZGF0YS1zdy10cmFuc2xhdGU+UmVzcG9uc2UgTW9kZWw8L3RoPlxuICAgICAgICAgICAgICA8dGggZGF0YS1zdy10cmFuc2xhdGU+SGVhZGVyczwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cIm9wZXJhdGlvbi1zdGF0dXNcIj5cblxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuIn0sMjI6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIiJ9LDI0OmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiIgICAgICAgICAgPGRpdiBjbGFzcz0nc2FuZGJveF9oZWFkZXInPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPSdzdWJtaXQnIHR5cGU9J2J1dHRvbicgdmFsdWU9J1RyeSBpdCBvdXQhJyBkYXRhLXN3LXRyYW5zbGF0ZS8+XG4gICAgICAgICAgICA8YSBocmVmPScjJyBjbGFzcz0ncmVzcG9uc2VfaGlkZXInIHN0eWxlPSdkaXNwbGF5Om5vbmUnIGRhdGEtc3ctdHJhbnNsYXRlPkhpZGUgUmVzcG9uc2U8L2E+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz0ncmVzcG9uc2VfdGhyb2JiZXInIHN0eWxlPSdkaXNwbGF5Om5vbmUnPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiJ9LDI2OmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiIgICAgICAgICAgPGg0IGRhdGEtc3ctdHJhbnNsYXRlPlJlcXVlc3QgSGVhZGVyczwvaDQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz0nYmxvY2sgcmVxdWVzdF9oZWFkZXJzJz48L2Rpdj5cbiJ9LGNvbXBpbGVyOls2LCI+PSAyLjAuMC1iZXRhLjEiXSxtYWluOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGEsbyxzPSJmdW5jdGlvbiIsbD10LmhlbHBlck1pc3NpbmcsdT10aGlzLmVzY2FwZUV4cHJlc3Npb24sYz10LmJsb2NrSGVscGVyTWlzc2luZyxwPSJcbiAgPHVsIGNsYXNzPSdvcGVyYXRpb25zJyA+XG4gICAgPGxpIGNsYXNzPSciK3UoKGE9bnVsbCE9KGE9dC5tZXRob2R8fChudWxsIT1lP2UubWV0aG9kOmUpKT9hOmwsdHlwZW9mIGE9PT1zP2EuY2FsbChlLHtuYW1lOiJtZXRob2QiLGhhc2g6e30sZGF0YTpyfSk6YSkpKyIgb3BlcmF0aW9uJyBpZD0nIit1KChhPW51bGwhPShhPXQucGFyZW50SWR8fChudWxsIT1lP2UucGFyZW50SWQ6ZSkpP2E6bCx0eXBlb2YgYT09PXM/YS5jYWxsKGUse25hbWU6InBhcmVudElkIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsiXyIrdSgoYT1udWxsIT0oYT10Lm5pY2tuYW1lfHwobnVsbCE9ZT9lLm5pY2tuYW1lOmUpKT9hOmwsdHlwZW9mIGE9PT1zP2EuY2FsbChlLHtuYW1lOiJuaWNrbmFtZSIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrIic+XG4gICAgICA8ZGl2IGNsYXNzPSdoZWFkaW5nJz5cbiAgICAgICAgPGgzPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSdodHRwX21ldGhvZCc+XG4gICAgICAgICAgPGEgaHJlZj0nIyEvIit1KChhPW51bGwhPShhPXQuZW5jb2RlZFBhcmVudElkfHwobnVsbCE9ZT9lLmVuY29kZWRQYXJlbnRJZDplKSk/YTpsLHR5cGVvZiBhPT09cz9hLmNhbGwoZSx7bmFtZToiZW5jb2RlZFBhcmVudElkIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsiLyIrdSgoYT1udWxsIT0oYT10Lm5pY2tuYW1lfHwobnVsbCE9ZT9lLm5pY2tuYW1lOmUpKT9hOmwsdHlwZW9mIGE9PT1zP2EuY2FsbChlLHtuYW1lOiJuaWNrbmFtZSIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrJ1wnIGNsYXNzPSJ0b2dnbGVPcGVyYXRpb24iPicrdSgoYT1udWxsIT0oYT10Lm1ldGhvZHx8KG51bGwhPWU/ZS5tZXRob2Q6ZSkpP2E6bCx0eXBlb2YgYT09PXM/YS5jYWxsKGUse25hbWU6Im1ldGhvZCIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrIjwvYT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9J3BhdGgnPlxuICAgICAgICAgIDxhIGhyZWY9JyMhLyIrdSgoYT1udWxsIT0oYT10LmVuY29kZWRQYXJlbnRJZHx8KG51bGwhPWU/ZS5lbmNvZGVkUGFyZW50SWQ6ZSkpP2E6bCx0eXBlb2YgYT09PXM/YS5jYWxsKGUse25hbWU6ImVuY29kZWRQYXJlbnRJZCIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrIi8iK3UoKGE9bnVsbCE9KGE9dC5uaWNrbmFtZXx8KG51bGwhPWU/ZS5uaWNrbmFtZTplKSk/YTpsLHR5cGVvZiBhPT09cz9hLmNhbGwoZSx7bmFtZToibmlja25hbWUiLGhhc2g6e30sZGF0YTpyfSk6YSkpKyInIGNsYXNzPVwidG9nZ2xlT3BlcmF0aW9uICI7cmV0dXJuIGk9dFsiaWYiXS5jYWxsKGUsbnVsbCE9ZT9lLmRlcHJlY2F0ZWQ6ZSx7bmFtZToiaWYiLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDEsciksaW52ZXJzZTp0aGlzLm5vb3AsZGF0YTpyfSksbnVsbCE9aSYmKHArPWkpLHArPSciPicrdSgoYT1udWxsIT0oYT10LnBhdGh8fChudWxsIT1lP2UucGF0aDplKSk/YTpsLHR5cGVvZiBhPT09cz9hLmNhbGwoZSx7bmFtZToicGF0aCIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrIjwvYT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvaDM+XG4gICAgICAgIDx1bCBjbGFzcz0nb3B0aW9ucyc+XG4gICAgICAgICAgPGxpPlxuICAgICAgICAgIDxhIGhyZWY9JyMhLyIrdSgoYT1udWxsIT0oYT10LmVuY29kZWRQYXJlbnRJZHx8KG51bGwhPWU/ZS5lbmNvZGVkUGFyZW50SWQ6ZSkpP2E6bCx0eXBlb2YgYT09PXM/YS5jYWxsKGUse25hbWU6ImVuY29kZWRQYXJlbnRJZCIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrIi8iK3UoKGE9bnVsbCE9KGE9dC5uaWNrbmFtZXx8KG51bGwhPWU/ZS5uaWNrbmFtZTplKSk/YTpsLHR5cGVvZiBhPT09cz9hLmNhbGwoZSx7bmFtZToibmlja25hbWUiLGhhc2g6e30sZGF0YTpyfSk6YSkpKydcJyBjbGFzcz0idG9nZ2xlT3BlcmF0aW9uIj4nLGE9bnVsbCE9KGE9dC5zdW1tYXJ5fHwobnVsbCE9ZT9lLnN1bW1hcnk6ZSkpP2E6bCxpPXR5cGVvZiBhPT09cz9hLmNhbGwoZSx7bmFtZToic3VtbWFyeSIsaGFzaDp7fSxkYXRhOnJ9KTphLG51bGwhPWkmJihwKz1pKSxwKz0iPC9hPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9J2NvbnRlbnQnIGlkPSciK3UoKGE9bnVsbCE9KGE9dC5wYXJlbnRJZHx8KG51bGwhPWU/ZS5wYXJlbnRJZDplKSk/YTpsLHR5cGVvZiBhPT09cz9hLmNhbGwoZSx7bmFtZToicGFyZW50SWQiLGhhc2g6e30sZGF0YTpyfSk6YSkpKyJfIit1KChhPW51bGwhPShhPXQubmlja25hbWV8fChudWxsIT1lP2Uubmlja25hbWU6ZSkpP2E6bCx0eXBlb2YgYT09PXM/YS5jYWxsKGUse25hbWU6Im5pY2tuYW1lIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsiX2NvbnRlbnQnIHN0eWxlPSdkaXNwbGF5Om5vbmUnPlxuIixpPXRbImlmIl0uY2FsbChlLG51bGwhPWU/ZS5kZXByZWNhdGVkOmUse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgzLHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJihwKz1pKSxpPXRbImlmIl0uY2FsbChlLG51bGwhPWU/ZS5kZXNjcmlwdGlvbjplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oNSxyKSxpbnZlcnNlOnRoaXMubm9vcCxkYXRhOnJ9KSxudWxsIT1pJiYocCs9aSksYT1udWxsIT0oYT10Lm9hdXRofHwobnVsbCE9ZT9lLm9hdXRoOmUpKT9hOmwsbz17bmFtZToib2F1dGgiLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDcsciksaW52ZXJzZTp0aGlzLm5vb3AsZGF0YTpyfSxpPXR5cGVvZiBhPT09cz9hLmNhbGwoZSxvKTphLHQub2F1dGh8fChpPWMuY2FsbChlLGksbykpLG51bGwhPWkmJihwKz1pKSxwKz0iXG4iLGk9dC5lYWNoLmNhbGwoZSxudWxsIT1lP2Uub2F1dGg6ZSx7bmFtZToiZWFjaCIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oOSxyKSxpbnZlcnNlOnRoaXMubm9vcCxkYXRhOnJ9KSxudWxsIT1pJiYocCs9aSkscCs9IiAgICAgICAgIixhPW51bGwhPShhPXQub2F1dGh8fChudWxsIT1lP2Uub2F1dGg6ZSkpP2E6bCxvPXtuYW1lOiJvYXV0aCIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMTIsciksaW52ZXJzZTp0aGlzLm5vb3AsZGF0YTpyfSxpPXR5cGVvZiBhPT09cz9hLmNhbGwoZSxvKTphLHQub2F1dGh8fChpPWMuY2FsbChlLGksbykpLG51bGwhPWkmJihwKz1pKSxwKz0iXG4iLGE9bnVsbCE9KGE9dC5vYXV0aHx8KG51bGwhPWU/ZS5vYXV0aDplKSk/YTpsLG89e25hbWU6Im9hdXRoIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgxNCxyKSxpbnZlcnNlOnRoaXMubm9vcCxkYXRhOnJ9LGk9dHlwZW9mIGE9PT1zP2EuY2FsbChlLG8pOmEsdC5vYXV0aHx8KGk9Yy5jYWxsKGUsaSxvKSksbnVsbCE9aSYmKHArPWkpLGk9dFsiaWYiXS5jYWxsKGUsbnVsbCE9ZT9lLnR5cGU6ZSx7bmFtZToiaWYiLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDE2LHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJihwKz1pKSxwKz0iICAgICAgICA8Zm9ybSBhY2NlcHQtY2hhcnNldD0nVVRGLTgnIGNsYXNzPSdzYW5kYm94Jz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPSdtYXJnaW46MDtwYWRkaW5nOjA7ZGlzcGxheTppbmxpbmUnPjwvZGl2PlxuIixpPXRbImlmIl0uY2FsbChlLG51bGwhPWU/ZS5wYXJhbWV0ZXJzOmUse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgxOCxyKSxpbnZlcnNlOnRoaXMubm9vcCxkYXRhOnJ9KSxudWxsIT1pJiYocCs9aSksaT10WyJpZiJdLmNhbGwoZSxudWxsIT1lP2UucmVzcG9uc2VNZXNzYWdlczplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMjAsciksaW52ZXJzZTp0aGlzLm5vb3AsZGF0YTpyfSksbnVsbCE9aSYmKHArPWkpLGk9dFsiaWYiXS5jYWxsKGUsbnVsbCE9ZT9lLmlzUmVhZE9ubHk6ZSx7bmFtZToiaWYiLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDIyLHIpLGludmVyc2U6dGhpcy5wcm9ncmFtKDI0LHIpLGRhdGE6cn0pLG51bGwhPWkmJihwKz1pKSxwKz0iICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDxkaXYgY2xhc3M9J3Jlc3BvbnNlJyBzdHlsZT0nZGlzcGxheTpub25lJz5cbiAgICAgICAgICA8aDQ+Q3VybDwvaDQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz0nYmxvY2sgY3VybCc+PC9kaXY+XG4gICAgICAgICAgPGg0IGRhdGEtc3ctdHJhbnNsYXRlPlJlcXVlc3QgVVJMPC9oND5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSdibG9jayByZXF1ZXN0X3VybCc+PC9kaXY+XG4iLGk9dFsiaWYiXS5jYWxsKGUsbnVsbCE9ZT9lLnNob3dSZXF1ZXN0SGVhZGVyczplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMjYsciksaW52ZXJzZTp0aGlzLm5vb3AsZGF0YTpyfSksbnVsbCE9aSYmKHArPWkpLHArIiAgICAgICAgICA8aDQgZGF0YS1zdy10cmFuc2xhdGU+UmVzcG9uc2UgQm9keTwvaDQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz0nYmxvY2sgcmVzcG9uc2VfYm9keSc+PC9kaXY+XG4gICAgICAgICAgPGg0IGRhdGEtc3ctdHJhbnNsYXRlPlJlc3BvbnNlIENvZGU8L2g0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9J2Jsb2NrIHJlc3BvbnNlX2NvZGUnPjwvZGl2PlxuICAgICAgICAgIDxoNCBkYXRhLXN3LXRyYW5zbGF0ZT5SZXNwb25zZSBIZWFkZXJzPC9oND5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSdibG9jayByZXNwb25zZV9oZWFkZXJzJz48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2xpPlxuICA8L3VsPlxuIn0sdXNlRGF0YTohMH0pLHRoaXMuSGFuZGxlYmFycy50ZW1wbGF0ZXMucGFyYW1fbGlzdD1IYW5kbGViYXJzLnRlbXBsYXRlKHsxOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiIgcmVxdWlyZWQifSwzOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybicgbXVsdGlwbGU9Im11bHRpcGxlIid9LDU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIiByZXF1aXJlZCAifSw3OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9IiAgICAgIDxvcHRpb24gIjtyZXR1cm4gaT10LnVubGVzcy5jYWxsKGUsbnVsbCE9ZT9lLmhhc0RlZmF1bHQ6ZSx7bmFtZToidW5sZXNzIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSg4LHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJihhKz1pKSxhKyIgdmFsdWU9Jyc+PC9vcHRpb24+XG4ifSw4OmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybicgIHNlbGVjdGVkPSIiICd9LDEwOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGEsbz0iZnVuY3Rpb24iLHM9dC5oZWxwZXJNaXNzaW5nLGw9dGhpcy5lc2NhcGVFeHByZXNzaW9uLHU9IlxuICAgICAgPG9wdGlvbiAiO3JldHVybiBpPXRbImlmIl0uY2FsbChlLG51bGwhPWU/ZS5pc0RlZmF1bHQ6ZSx7bmFtZToiaWYiLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDExLHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJih1Kz1pKSx1Kz0iICB2YWx1ZT0nIitsKChhPW51bGwhPShhPXQudmFsdWV8fChudWxsIT1lP2UudmFsdWU6ZSkpP2E6cyx0eXBlb2YgYT09PW8/YS5jYWxsKGUse25hbWU6InZhbHVlIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsiJz4gIitsKChhPW51bGwhPShhPXQudmFsdWV8fChudWxsIT1lP2UudmFsdWU6ZSkpP2E6cyx0eXBlb2YgYT09PW8/YS5jYWxsKGUse25hbWU6InZhbHVlIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsiICIsaT10WyJpZiJdLmNhbGwoZSxudWxsIT1lP2UuaXNEZWZhdWx0OmUse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgxMyxyKSxpbnZlcnNlOnRoaXMubm9vcCxkYXRhOnJ9KSxudWxsIT1pJiYodSs9aSksdSsiIDwvb3B0aW9uPlxuXG4ifSwxMTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4nIHNlbGVjdGVkPSIiICAnfSwxMzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4iIChkZWZhdWx0KSAifSwxNTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4iPHN0cm9uZz4ifSwxNzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4iPC9zdHJvbmc+In0sY29tcGlsZXI6WzYsIj49IDIuMC4wLWJldGEuMSJdLG1haW46ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYSxvPSJmdW5jdGlvbiIscz10LmhlbHBlck1pc3NpbmcsbD10aGlzLmVzY2FwZUV4cHJlc3Npb24sdT0iPHRkIGNsYXNzPSdjb2RlIjtyZXR1cm4gaT10WyJpZiJdLmNhbGwoZSxudWxsIT1lP2UucmVxdWlyZWQ6ZSx7bmFtZToiaWYiLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDEsciksaW52ZXJzZTp0aGlzLm5vb3AsZGF0YTpyfSksbnVsbCE9aSYmKHUrPWkpLHUrPSInPjxsYWJlbCBmb3I9JyIrbCgoYT1udWxsIT0oYT10LnZhbHVlSWR8fChudWxsIT1lP2UudmFsdWVJZDplKSk/YTpzLHR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToidmFsdWVJZCIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrIic+IitsKChhPW51bGwhPShhPXQubmFtZXx8KG51bGwhPWU/ZS5uYW1lOmUpKT9hOnMsdHlwZW9mIGE9PT1vP2EuY2FsbChlLHtuYW1lOiJuYW1lIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsiPC9sYWJlbD48L3RkPlxuPHRkPlxuICA8c2VsZWN0ICIsaT0odC5pc0FycmF5fHxlJiZlLmlzQXJyYXl8fHMpLmNhbGwoZSxlLHtuYW1lOiJpc0FycmF5IixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgzLHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJih1Kz1pKSx1Kz0nIGNsYXNzPSJwYXJhbWV0ZXIgJyxpPXRbImlmIl0uY2FsbChlLG51bGwhPWU/ZS5yZXF1aXJlZDplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oNSxyKSxpbnZlcnNlOnRoaXMubm9vcCxkYXRhOnJ9KSxudWxsIT1pJiYodSs9aSksdSs9JyIgbmFtZT0iJytsKChhPW51bGwhPShhPXQubmFtZXx8KG51bGwhPWU/ZS5uYW1lOmUpKT9hOnMsdHlwZW9mIGE9PT1vP2EuY2FsbChlLHtuYW1lOiJuYW1lIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsnIiBpZD0iJytsKChhPW51bGwhPShhPXQudmFsdWVJZHx8KG51bGwhPWU/ZS52YWx1ZUlkOmUpKT9hOnMsdHlwZW9mIGE9PT1vP2EuY2FsbChlLHtuYW1lOiJ2YWx1ZUlkIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsnIj5cblxuJyxpPXQudW5sZXNzLmNhbGwoZSxudWxsIT1lP2UucmVxdWlyZWQ6ZSx7bmFtZToidW5sZXNzIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSg3LHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJih1Kz1pKSx1Kz0iXG4iLGk9dC5lYWNoLmNhbGwoZSxudWxsIT0oaT1udWxsIT1lP2UuYWxsb3dhYmxlVmFsdWVzOmUpP2kuZGVzY3JpcHRpdmVWYWx1ZXM6aSx7bmFtZToiZWFjaCIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMTAsciksaW52ZXJzZTp0aGlzLm5vb3AsZGF0YTpyfSksbnVsbCE9aSYmKHUrPWkpLHUrPSdcbiAgPC9zZWxlY3Q+XG48L3RkPlxuPHRkIGNsYXNzPSJtYXJrZG93biI+JyxpPXRbImlmIl0uY2FsbChlLG51bGwhPWU/ZS5yZXF1aXJlZDplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMTUsciksaW52ZXJzZTp0aGlzLm5vb3AsZGF0YTpyfSksbnVsbCE9aSYmKHUrPWkpLGE9bnVsbCE9KGE9dC5kZXNjcmlwdGlvbnx8KG51bGwhPWU/ZS5kZXNjcmlwdGlvbjplKSk/YTpzLGk9dHlwZW9mIGE9PT1vP2EuY2FsbChlLHtuYW1lOiJkZXNjcmlwdGlvbiIsaGFzaDp7fSxkYXRhOnJ9KTphLG51bGwhPWkmJih1Kz1pKSxpPXRbImlmIl0uY2FsbChlLG51bGwhPWU/ZS5yZXF1aXJlZDplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMTcsciksaW52ZXJzZTp0aGlzLm5vb3AsZGF0YTpyfSksbnVsbCE9aSYmKHUrPWkpLHUrPSI8L3RkPlxuPHRkPiIsYT1udWxsIT0oYT10LnBhcmFtVHlwZXx8KG51bGwhPWU/ZS5wYXJhbVR5cGU6ZSkpP2E6cyxpPXR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToicGFyYW1UeXBlIixoYXNoOnt9LGRhdGE6cn0pOmEsbnVsbCE9aSYmKHUrPWkpLHUrJzwvdGQ+XG48dGQ+PHNwYW4gY2xhc3M9Im1vZGVsLXNpZ25hdHVyZSI+PC9zcGFuPjwvdGQ+XG4nfSx1c2VEYXRhOiEwfSksdGhpcy5IYW5kbGViYXJzLnRlbXBsYXRlcy5wYXJhbV9yZWFkb25seV9yZXF1aXJlZD1IYW5kbGViYXJzLnRlbXBsYXRlKHsxOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9ImZ1bmN0aW9uIixvPXQuaGVscGVyTWlzc2luZyxzPXRoaXMuZXNjYXBlRXhwcmVzc2lvbjtyZXR1cm4iICAgICAgICA8dGV4dGFyZWEgY2xhc3M9J2JvZHktdGV4dGFyZWEnIHJlYWRvbmx5PSdyZWFkb25seScgcGxhY2Vob2xkZXI9JyhyZXF1aXJlZCknIG5hbWU9JyIrcygoaT1udWxsIT0oaT10Lm5hbWV8fChudWxsIT1lP2UubmFtZTplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToibmFtZSIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrIicgaWQ9JyIrcygoaT1udWxsIT0oaT10LnZhbHVlSWR8fChudWxsIT1lP2UudmFsdWVJZDplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToidmFsdWVJZCIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrIic+IitzKChpPW51bGwhPShpPXRbImRlZmF1bHQiXXx8KG51bGwhPWU/ZVsiZGVmYXVsdCJdOmUpKT9pOm8sdHlwZW9mIGk9PT1hP2kuY2FsbChlLHtuYW1lOiJkZWZhdWx0IixoYXNoOnt9LGRhdGE6cn0pOmkpKSsiPC90ZXh0YXJlYT5cbiJ9LDM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYT0iIjtyZXR1cm4gaT10WyJpZiJdLmNhbGwoZSxudWxsIT1lP2VbImRlZmF1bHQiXTplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oNCxyKSxpbnZlcnNlOnRoaXMucHJvZ3JhbSg2LHIpLGRhdGE6cn0pLG51bGwhPWkmJihhKz1pKSxhfSw0OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9ImZ1bmN0aW9uIixvPXQuaGVscGVyTWlzc2luZyxzPXRoaXMuZXNjYXBlRXhwcmVzc2lvbjtyZXR1cm4iICAgICAgICAgICAgIitzKChpPW51bGwhPShpPXRbImRlZmF1bHQiXXx8KG51bGwhPWU/ZVsiZGVmYXVsdCJdOmUpKT9pOm8sdHlwZW9mIGk9PT1hP2kuY2FsbChlLHtuYW1lOiJkZWZhdWx0IixoYXNoOnt9LGRhdGE6cn0pOmkpKSsiXG4ifSw2OmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiIgICAgICAgICAgICAoZW1wdHkpXG4ifSxjb21waWxlcjpbNiwiPj0gMi4wLjAtYmV0YS4xIl0sbWFpbjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhLG89ImZ1bmN0aW9uIixzPXQuaGVscGVyTWlzc2luZyxsPXRoaXMuZXNjYXBlRXhwcmVzc2lvbix1PSI8dGQgY2xhc3M9J2NvZGUgcmVxdWlyZWQnPjxsYWJlbCBmb3I9JyIrbCgoYT1udWxsIT0oYT10LnZhbHVlSWR8fChudWxsIT1lP2UudmFsdWVJZDplKSk/YTpzLHR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToidmFsdWVJZCIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrIic+IitsKChhPW51bGwhPShhPXQubmFtZXx8KG51bGwhPWU/ZS5uYW1lOmUpKT9hOnMsdHlwZW9mIGE9PT1vP2EuY2FsbChlLHtuYW1lOiJuYW1lIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsiPC9sYWJlbD48L3RkPlxuPHRkPlxuIjtyZXR1cm4gaT10WyJpZiJdLmNhbGwoZSxudWxsIT1lP2UuaXNCb2R5OmUse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgxLHIpLGludmVyc2U6dGhpcy5wcm9ncmFtKDMsciksZGF0YTpyfSksbnVsbCE9aSYmKHUrPWkpLHUrPSc8L3RkPlxuPHRkIGNsYXNzPSJtYXJrZG93biI+JyxhPW51bGwhPShhPXQuZGVzY3JpcHRpb258fChudWxsIT1lP2UuZGVzY3JpcHRpb246ZSkpP2E6cyxpPXR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToiZGVzY3JpcHRpb24iLGhhc2g6e30sZGF0YTpyfSk6YSxudWxsIT1pJiYodSs9aSksdSs9IjwvdGQ+XG48dGQ+IixhPW51bGwhPShhPXQucGFyYW1UeXBlfHwobnVsbCE9ZT9lLnBhcmFtVHlwZTplKSk/YTpzLGk9dHlwZW9mIGE9PT1vP2EuY2FsbChlLHtuYW1lOiJwYXJhbVR5cGUiLGhhc2g6e30sZGF0YTpyfSk6YSxudWxsIT1pJiYodSs9aSksdSsnPC90ZD5cbjx0ZD48c3BhbiBjbGFzcz0ibW9kZWwtc2lnbmF0dXJlIj48L3NwYW4+PC90ZD5cbid9LHVzZURhdGE6ITB9KSx0aGlzLkhhbmRsZWJhcnMudGVtcGxhdGVzLnBhcmFtX3JlYWRvbmx5PUhhbmRsZWJhcnMudGVtcGxhdGUoezE6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYT0iZnVuY3Rpb24iLG89dC5oZWxwZXJNaXNzaW5nLHM9dGhpcy5lc2NhcGVFeHByZXNzaW9uO3JldHVybiIgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0nYm9keS10ZXh0YXJlYScgcmVhZG9ubHk9J3JlYWRvbmx5JyBuYW1lPSciK3MoKGk9bnVsbCE9KGk9dC5uYW1lfHwobnVsbCE9ZT9lLm5hbWU6ZSkpP2k6byx0eXBlb2YgaT09PWE/aS5jYWxsKGUse25hbWU6Im5hbWUiLGhhc2g6e30sZGF0YTpyfSk6aSkpKyInIGlkPSciK3MoKGk9bnVsbCE9KGk9dC52YWx1ZUlkfHwobnVsbCE9ZT9lLnZhbHVlSWQ6ZSkpP2k6byx0eXBlb2YgaT09PWE/aS5jYWxsKGUse25hbWU6InZhbHVlSWQiLGhhc2g6e30sZGF0YTpyfSk6aSkpKyInPiIrcygoaT1udWxsIT0oaT10WyJkZWZhdWx0Il18fChudWxsIT1lP2VbImRlZmF1bHQiXTplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToiZGVmYXVsdCIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrIjwvdGV4dGFyZWE+XG4ifSwzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9IiI7cmV0dXJuIGk9dFsiaWYiXS5jYWxsKGUsbnVsbCE9ZT9lWyJkZWZhdWx0Il06ZSx7bmFtZToiaWYiLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDQsciksaW52ZXJzZTp0aGlzLnByb2dyYW0oNixyKSxkYXRhOnJ9KSxudWxsIT1pJiYoYSs9aSksYX0sNDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhPSJmdW5jdGlvbiIsbz10LmhlbHBlck1pc3Npbmcscz10aGlzLmVzY2FwZUV4cHJlc3Npb247cmV0dXJuIiAgICAgICAgICAgICIrcygoaT1udWxsIT0oaT10WyJkZWZhdWx0Il18fChudWxsIT1lP2VbImRlZmF1bHQiXTplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToiZGVmYXVsdCIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrIlxuIn0sNjpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4iICAgICAgICAgICAgKGVtcHR5KVxuIn0sY29tcGlsZXI6WzYsIj49IDIuMC4wLWJldGEuMSJdLG1haW46ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYSxvPSJmdW5jdGlvbiIscz10LmhlbHBlck1pc3NpbmcsbD10aGlzLmVzY2FwZUV4cHJlc3Npb24sdT0iPHRkIGNsYXNzPSdjb2RlJz48bGFiZWwgZm9yPSciK2woKGE9bnVsbCE9KGE9dC52YWx1ZUlkfHwobnVsbCE9ZT9lLnZhbHVlSWQ6ZSkpP2E6cyx0eXBlb2YgYT09PW8/YS5jYWxsKGUse25hbWU6InZhbHVlSWQiLGhhc2g6e30sZGF0YTpyfSk6YSkpKyInPiIrbCgoYT1udWxsIT0oYT10Lm5hbWV8fChudWxsIT1lP2UubmFtZTplKSk/YTpzLHR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToibmFtZSIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrIjwvbGFiZWw+PC90ZD5cbjx0ZD5cbiI7cmV0dXJuIGk9dFsiaWYiXS5jYWxsKGUsbnVsbCE9ZT9lLmlzQm9keTplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMSxyKSxpbnZlcnNlOnRoaXMucHJvZ3JhbSgzLHIpLGRhdGE6cn0pLG51bGwhPWkmJih1Kz1pKSx1Kz0nPC90ZD5cbjx0ZCBjbGFzcz0ibWFya2Rvd24iPicsYT1udWxsIT0oYT10LmRlc2NyaXB0aW9ufHwobnVsbCE9ZT9lLmRlc2NyaXB0aW9uOmUpKT9hOnMsaT10eXBlb2YgYT09PW8/YS5jYWxsKGUse25hbWU6ImRlc2NyaXB0aW9uIixoYXNoOnt9LGRhdGE6cn0pOmEsbnVsbCE9aSYmKHUrPWkpLHUrPSI8L3RkPlxuPHRkPiIsYT1udWxsIT0oYT10LnBhcmFtVHlwZXx8KG51bGwhPWU/ZS5wYXJhbVR5cGU6ZSkpP2E6cyxpPXR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToicGFyYW1UeXBlIixoYXNoOnt9LGRhdGE6cn0pOmEsbnVsbCE9aSYmKHUrPWkpLHUrJzwvdGQ+XG48dGQ+PHNwYW4gY2xhc3M9Im1vZGVsLXNpZ25hdHVyZSI+PC9zcGFuPjwvdGQ+XG4nfSx1c2VEYXRhOiEwfSksdGhpcy5IYW5kbGViYXJzLnRlbXBsYXRlcy5wYXJhbV9yZXF1aXJlZD1IYW5kbGViYXJzLnRlbXBsYXRlKHsxOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9IiI7cmV0dXJuIGk9dFsiaWYiXS5jYWxsKGUsbnVsbCE9ZT9lLmlzRmlsZTplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMixyKSxpbnZlcnNlOnRoaXMucHJvZ3JhbSg0LHIpLGRhdGE6cn0pLG51bGwhPWkmJihhKz1pKSxhfSwyOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9ImZ1bmN0aW9uIixvPXQuaGVscGVyTWlzc2luZyxzPXRoaXMuZXNjYXBlRXhwcmVzc2lvbjtyZXR1cm4nCQkJPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9XCcnK3MoKGk9bnVsbCE9KGk9dC5uYW1lfHwobnVsbCE9ZT9lLm5hbWU6ZSkpP2k6byx0eXBlb2YgaT09PWE/aS5jYWxsKGUse25hbWU6Im5hbWUiLGhhc2g6e30sZGF0YTpyfSk6aSkpKyInIGlkPSciK3MoKGk9bnVsbCE9KGk9dC52YWx1ZUlkfHwobnVsbCE9ZT9lLnZhbHVlSWQ6ZSkpP2k6byx0eXBlb2YgaT09PWE/aS5jYWxsKGUse25hbWU6InZhbHVlSWQiLGhhc2g6e30sZGF0YTpyfSk6aSkpKyInLz5cbiJ9LDQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYT0iIjtyZXR1cm4gaT10WyJpZiJdLmNhbGwoZSxudWxsIT1lP2VbImRlZmF1bHQiXTplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oNSxyKSxpbnZlcnNlOnRoaXMucHJvZ3JhbSg3LHIpLGRhdGE6cn0pLG51bGwhPWkmJihhKz1pKSxhfSw1OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9ImZ1bmN0aW9uIixvPXQuaGVscGVyTWlzc2luZyxzPXRoaXMuZXNjYXBlRXhwcmVzc2lvbjtyZXR1cm4iCQkJCTx0ZXh0YXJlYSBjbGFzcz0nYm9keS10ZXh0YXJlYSByZXF1aXJlZCcgcGxhY2Vob2xkZXI9JyhyZXF1aXJlZCknIG5hbWU9JyIrcygoaT1udWxsIT0oaT10Lm5hbWV8fChudWxsIT1lP2UubmFtZTplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToibmFtZSIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrIicgaWQ9XCIiK3MoKGk9bnVsbCE9KGk9dC52YWx1ZUlkfHwobnVsbCE9ZT9lLnZhbHVlSWQ6ZSkpP2k6byx0eXBlb2YgaT09PWE/aS5jYWxsKGUse25hbWU6InZhbHVlSWQiLGhhc2g6e30sZGF0YTpyfSk6aSkpKyciPicrcygoaT1udWxsIT0oaT10WyJkZWZhdWx0Il18fChudWxsIT1lP2VbImRlZmF1bHQiXTplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToiZGVmYXVsdCIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrJzwvdGV4dGFyZWE+XG4gICAgICAgIDxiciAvPlxuICAgICAgICA8ZGl2IGNsYXNzPSJwYXJhbWV0ZXItY29udGVudC10eXBlIiAvPlxuJ30sNzpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhPSJmdW5jdGlvbiIsbz10LmhlbHBlck1pc3Npbmcscz10aGlzLmVzY2FwZUV4cHJlc3Npb247cmV0dXJuIgkJCQk8dGV4dGFyZWEgY2xhc3M9J2JvZHktdGV4dGFyZWEgcmVxdWlyZWQnIHBsYWNlaG9sZGVyPScocmVxdWlyZWQpJyBuYW1lPSciK3MoKGk9bnVsbCE9KGk9dC5uYW1lfHwobnVsbCE9ZT9lLm5hbWU6ZSkpP2k6byx0eXBlb2YgaT09PWE/aS5jYWxsKGUse25hbWU6Im5hbWUiLGhhc2g6e30sZGF0YTpyfSk6aSkpKyInIGlkPSciK3MoKGk9bnVsbCE9KGk9dC52YWx1ZUlkfHwobnVsbCE9ZT9lLnZhbHVlSWQ6ZSkpP2k6byx0eXBlb2YgaT09PWE/aS5jYWxsKGUse25hbWU6InZhbHVlSWQiLGhhc2g6e30sZGF0YTpyfSk6aSkpKydcJz48L3RleHRhcmVhPlxuCQkJCTxiciAvPlxuCQkJCTxkaXYgY2xhc3M9InBhcmFtZXRlci1jb250ZW50LXR5cGUiIC8+XG4nfSw5OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9IiI7cmV0dXJuIGk9dFsiaWYiXS5jYWxsKGUsbnVsbCE9ZT9lLmlzRmlsZTplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMTAsciksaW52ZXJzZTp0aGlzLnByb2dyYW0oMTIsciksZGF0YTpyfSksbnVsbCE9aSYmKGErPWkpLGF9LDEwOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9ImZ1bmN0aW9uIixvPXQuaGVscGVyTWlzc2luZyxzPXRoaXMuZXNjYXBlRXhwcmVzc2lvbjtyZXR1cm4iCQkJPGlucHV0IGNsYXNzPSdwYXJhbWV0ZXInIGNsYXNzPSdyZXF1aXJlZCcgdHlwZT0nZmlsZScgbmFtZT0nIitzKChpPW51bGwhPShpPXQubmFtZXx8KG51bGwhPWU/ZS5uYW1lOmUpKT9pOm8sdHlwZW9mIGk9PT1hP2kuY2FsbChlLHtuYW1lOiJuYW1lIixoYXNoOnt9LGRhdGE6cn0pOmkpKSsiJyBpZD0nIitzKChpPW51bGwhPShpPXQudmFsdWVJZHx8KG51bGwhPWU/ZS52YWx1ZUlkOmUpKT9pOm8sdHlwZW9mIGk9PT1hP2kuY2FsbChlLHtuYW1lOiJ2YWx1ZUlkIixoYXNoOnt9LGRhdGE6cn0pOmkpKSsiJy8+XG4ifSwxMjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhPXQuaGVscGVyTWlzc2luZyxvPSIiO3JldHVybiBpPSh0LnJlbmRlclRleHRQYXJhbXx8ZSYmZS5yZW5kZXJUZXh0UGFyYW18fGEpLmNhbGwoZSxlLHtuYW1lOiJyZW5kZXJUZXh0UGFyYW0iLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDEzLHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJihvKz1pKSxvfSwxMzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4iIn0sY29tcGlsZXI6WzYsIj49IDIuMC4wLWJldGEuMSJdLG1haW46ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYSxvPSJmdW5jdGlvbiIscz10LmhlbHBlck1pc3NpbmcsbD10aGlzLmVzY2FwZUV4cHJlc3Npb24sdT0iPHRkIGNsYXNzPSdjb2RlIHJlcXVpcmVkJz48bGFiZWwgZm9yPSciK2woKGE9bnVsbCE9KGE9dC52YWx1ZUlkfHwobnVsbCE9ZT9lLnZhbHVlSWQ6ZSkpP2E6cyx0eXBlb2YgYT09PW8/YS5jYWxsKGUse25hbWU6InZhbHVlSWQiLGhhc2g6e30sZGF0YTpyfSk6YSkpKyInPiIrbCgoYT1udWxsIT0oYT10Lm5hbWV8fChudWxsIT1lP2UubmFtZTplKSk/YTpzLHR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToibmFtZSIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrIjwvbGFiZWw+PC90ZD5cbjx0ZD5cbiI7cmV0dXJuIGk9dFsiaWYiXS5jYWxsKGUsbnVsbCE9ZT9lLmlzQm9keTplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMSxyKSxpbnZlcnNlOnRoaXMucHJvZ3JhbSg5LHIpLGRhdGE6cn0pLG51bGwhPWkmJih1Kz1pKSx1Kz0nPC90ZD5cbjx0ZD5cbgk8c3Ryb25nPjxzcGFuIGNsYXNzPSJtYXJrZG93biI+JyxhPW51bGwhPShhPXQuZGVzY3JpcHRpb258fChudWxsIT1lP2UuZGVzY3JpcHRpb246ZSkpP2E6cyxpPXR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToiZGVzY3JpcHRpb24iLGhhc2g6e30sZGF0YTpyfSk6YSxudWxsIT1pJiYodSs9aSksdSs9Ijwvc3Bhbj48L3N0cm9uZz5cbjwvdGQ+XG48dGQ+IixhPW51bGwhPShhPXQucGFyYW1UeXBlfHwobnVsbCE9ZT9lLnBhcmFtVHlwZTplKSk/YTpzLGk9dHlwZW9mIGE9PT1vP2EuY2FsbChlLHtuYW1lOiJwYXJhbVR5cGUiLGhhc2g6e30sZGF0YTpyfSk6YSxudWxsIT1pJiYodSs9aSksdSsnPC90ZD5cbjx0ZD48c3BhbiBjbGFzcz0ibW9kZWwtc2lnbmF0dXJlIj48L3NwYW4+PC90ZD5cbid9LHVzZURhdGE6ITB9KSx0aGlzLkhhbmRsZWJhcnMudGVtcGxhdGVzLnBhcmFtPUhhbmRsZWJhcnMudGVtcGxhdGUoezE6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYT0iIjtyZXR1cm4gaT10WyJpZiJdLmNhbGwoZSxudWxsIT1lP2UuaXNGaWxlOmUse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgyLHIpLGludmVyc2U6dGhpcy5wcm9ncmFtKDQsciksZGF0YTpyfSksbnVsbCE9aSYmKGErPWkpLGF9LDI6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYT0iZnVuY3Rpb24iLG89dC5oZWxwZXJNaXNzaW5nLHM9dGhpcy5lc2NhcGVFeHByZXNzaW9uO3JldHVybicJCQk8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT1cJycrcygoaT1udWxsIT0oaT10Lm5hbWV8fChudWxsIT1lP2UubmFtZTplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToibmFtZSIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrIicgaWQ9JyIrcygoaT1udWxsIT0oaT10LnZhbHVlSWR8fChudWxsIT1lP2UudmFsdWVJZDplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToidmFsdWVJZCIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrJ1wnLz5cbgkJCTxkaXYgY2xhc3M9InBhcmFtZXRlci1jb250ZW50LXR5cGUiIC8+XG4nfSw0OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9IiI7cmV0dXJuIGk9dFsiaWYiXS5jYWxsKGUsbnVsbCE9ZT9lWyJkZWZhdWx0Il06ZSx7bmFtZToiaWYiLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDUsciksaW52ZXJzZTp0aGlzLnByb2dyYW0oNyxyKSxkYXRhOnJ9KSxudWxsIT1pJiYoYSs9aSksYX0sNTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhPSJmdW5jdGlvbiIsbz10LmhlbHBlck1pc3Npbmcscz10aGlzLmVzY2FwZUV4cHJlc3Npb247cmV0dXJuIgkJCQk8dGV4dGFyZWEgY2xhc3M9J2JvZHktdGV4dGFyZWEnIG5hbWU9JyIrcygoaT1udWxsIT0oaT10Lm5hbWV8fChudWxsIT1lP2UubmFtZTplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToibmFtZSIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrIicgaWQ9JyIrcygoaT1udWxsIT0oaT10LnZhbHVlSWR8fChudWxsIT1lP2UudmFsdWVJZDplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToidmFsdWVJZCIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrIic+IitzKChpPW51bGwhPShpPXRbImRlZmF1bHQiXXx8KG51bGwhPWU/ZVsiZGVmYXVsdCJdOmUpKT9pOm8sdHlwZW9mIGk9PT1hP2kuY2FsbChlLHtuYW1lOiJkZWZhdWx0IiwKaGFzaDp7fSxkYXRhOnJ9KTppKSkrJzwvdGV4dGFyZWE+XG4gICAgICAgIDxiciAvPlxuICAgICAgICA8ZGl2IGNsYXNzPSJwYXJhbWV0ZXItY29udGVudC10eXBlIiAvPlxuJ30sNzpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhPSJmdW5jdGlvbiIsbz10LmhlbHBlck1pc3Npbmcscz10aGlzLmVzY2FwZUV4cHJlc3Npb247cmV0dXJuIgkJCQk8dGV4dGFyZWEgY2xhc3M9J2JvZHktdGV4dGFyZWEnIG5hbWU9JyIrcygoaT1udWxsIT0oaT10Lm5hbWV8fChudWxsIT1lP2UubmFtZTplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToibmFtZSIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrIicgaWQ9JyIrcygoaT1udWxsIT0oaT10LnZhbHVlSWR8fChudWxsIT1lP2UudmFsdWVJZDplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToidmFsdWVJZCIsaGFzaDp7fSxkYXRhOnJ9KTppKSkrJ1wnPjwvdGV4dGFyZWE+XG4JCQkJPGJyIC8+XG4JCQkJPGRpdiBjbGFzcz0icGFyYW1ldGVyLWNvbnRlbnQtdHlwZSIgLz5cbid9LDk6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYT0iIjtyZXR1cm4gaT10WyJpZiJdLmNhbGwoZSxudWxsIT1lP2UuaXNGaWxlOmUse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgyLHIpLGludmVyc2U6dGhpcy5wcm9ncmFtKDEwLHIpLGRhdGE6cn0pLG51bGwhPWkmJihhKz1pKSxhfSwxMDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhPXQuaGVscGVyTWlzc2luZyxvPSIiO3JldHVybiBpPSh0LnJlbmRlclRleHRQYXJhbXx8ZSYmZS5yZW5kZXJUZXh0UGFyYW18fGEpLmNhbGwoZSxlLHtuYW1lOiJyZW5kZXJUZXh0UGFyYW0iLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDExLHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJihvKz1pKSxvfSwxMTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4iIn0sY29tcGlsZXI6WzYsIj49IDIuMC4wLWJldGEuMSJdLG1haW46ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYSxvPSJmdW5jdGlvbiIscz10LmhlbHBlck1pc3NpbmcsbD10aGlzLmVzY2FwZUV4cHJlc3Npb24sdT0iPHRkIGNsYXNzPSdjb2RlJz48bGFiZWwgZm9yPSciK2woKGE9bnVsbCE9KGE9dC52YWx1ZUlkfHwobnVsbCE9ZT9lLnZhbHVlSWQ6ZSkpP2E6cyx0eXBlb2YgYT09PW8/YS5jYWxsKGUse25hbWU6InZhbHVlSWQiLGhhc2g6e30sZGF0YTpyfSk6YSkpKyInPiIrbCgoYT1udWxsIT0oYT10Lm5hbWV8fChudWxsIT1lP2UubmFtZTplKSk/YTpzLHR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToibmFtZSIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrIjwvbGFiZWw+PC90ZD5cbjx0ZD5cblxuIjtyZXR1cm4gaT10WyJpZiJdLmNhbGwoZSxudWxsIT1lP2UuaXNCb2R5OmUse25hbWU6ImlmIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgxLHIpLGludmVyc2U6dGhpcy5wcm9ncmFtKDksciksZGF0YTpyfSksbnVsbCE9aSYmKHUrPWkpLHUrPSdcbjwvdGQ+XG48dGQgY2xhc3M9Im1hcmtkb3duIj4nLGE9bnVsbCE9KGE9dC5kZXNjcmlwdGlvbnx8KG51bGwhPWU/ZS5kZXNjcmlwdGlvbjplKSk/YTpzLGk9dHlwZW9mIGE9PT1vP2EuY2FsbChlLHtuYW1lOiJkZXNjcmlwdGlvbiIsaGFzaDp7fSxkYXRhOnJ9KTphLG51bGwhPWkmJih1Kz1pKSx1Kz0iPC90ZD5cbjx0ZD4iLGE9bnVsbCE9KGE9dC5wYXJhbVR5cGV8fChudWxsIT1lP2UucGFyYW1UeXBlOmUpKT9hOnMsaT10eXBlb2YgYT09PW8/YS5jYWxsKGUse25hbWU6InBhcmFtVHlwZSIsaGFzaDp7fSxkYXRhOnJ9KTphLG51bGwhPWkmJih1Kz1pKSx1Kyc8L3RkPlxuPHRkPlxuCTxzcGFuIGNsYXNzPSJtb2RlbC1zaWduYXR1cmUiPjwvc3Bhbj5cbjwvdGQ+XG4nfSx1c2VEYXRhOiEwfSksdGhpcy5IYW5kbGViYXJzLnRlbXBsYXRlcy5wYXJhbWV0ZXJfY29udGVudF90eXBlPUhhbmRsZWJhcnMudGVtcGxhdGUoezE6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYT0iIjtyZXR1cm4gaT10LmVhY2guY2FsbChlLG51bGwhPWU/ZS5jb25zdW1lczplLHtuYW1lOiJlYWNoIixoYXNoOnt9LGZuOnRoaXMucHJvZ3JhbSgyLHIpLGludmVyc2U6dGhpcy5ub29wLGRhdGE6cn0pLG51bGwhPWkmJihhKz1pKSxhfSwyOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9dGhpcy5sYW1iZGEsbz0nICA8b3B0aW9uIHZhbHVlPSInO3JldHVybiBpPWEoZSxlKSxudWxsIT1pJiYobys9aSksbys9JyI+JyxpPWEoZSxlKSxudWxsIT1pJiYobys9aSksbysiPC9vcHRpb24+XG4ifSw0OmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybicgIDxvcHRpb24gdmFsdWU9ImFwcGxpY2F0aW9uL2pzb24iPmFwcGxpY2F0aW9uL2pzb248L29wdGlvbj5cbid9LGNvbXBpbGVyOls2LCI+PSAyLjAuMC1iZXRhLjEiXSxtYWluOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGEsbz0iZnVuY3Rpb24iLHM9dC5oZWxwZXJNaXNzaW5nLGw9dGhpcy5lc2NhcGVFeHByZXNzaW9uLHU9JzxsYWJlbCBmb3I9IicrbCgoYT1udWxsIT0oYT10LnBhcmFtZXRlckNvbnRlbnRUeXBlSWR8fChudWxsIT1lP2UucGFyYW1ldGVyQ29udGVudFR5cGVJZDplKSk/YTpzLHR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToicGFyYW1ldGVyQ29udGVudFR5cGVJZCIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrJyI+UGFyYW1ldGVyIGNvbnRlbnQgdHlwZTo8L2xhYmVsPlxuPHNlbGVjdCBuYW1lPSJwYXJhbWV0ZXJDb250ZW50VHlwZSIgaWQ9IicrbCgoYT1udWxsIT0oYT10LnBhcmFtZXRlckNvbnRlbnRUeXBlSWR8fChudWxsIT1lP2UucGFyYW1ldGVyQ29udGVudFR5cGVJZDplKSk/YTpzLHR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToicGFyYW1ldGVyQ29udGVudFR5cGVJZCIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrJyI+XG4nO3JldHVybiBpPXRbImlmIl0uY2FsbChlLG51bGwhPWU/ZS5jb25zdW1lczplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMSxyKSxpbnZlcnNlOnRoaXMucHJvZ3JhbSg0LHIpLGRhdGE6cn0pLG51bGwhPWkmJih1Kz1pKSx1KyI8L3NlbGVjdD5cbiJ9LHVzZURhdGE6ITB9KSx0aGlzLkhhbmRsZWJhcnMudGVtcGxhdGVzLnJlc291cmNlPUhhbmRsZWJhcnMudGVtcGxhdGUoezE6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIiA6ICJ9LDM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYT0iZnVuY3Rpb24iLG89dC5oZWxwZXJNaXNzaW5nLHM9dGhpcy5lc2NhcGVFeHByZXNzaW9uO3JldHVybiIgICAgPGxpPlxuICAgICAgPGEgaHJlZj0nIitzKChpPW51bGwhPShpPXQudXJsfHwobnVsbCE9ZT9lLnVybDplKSk/aTpvLHR5cGVvZiBpPT09YT9pLmNhbGwoZSx7bmFtZToidXJsIixoYXNoOnt9LGRhdGE6cn0pOmkpKSsiJyBkYXRhLXN3LXRyYW5zbGF0ZT5SYXc8L2E+XG4gICAgPC9saT5cbiJ9LGNvbXBpbGVyOls2LCI+PSAyLjAuMC1iZXRhLjEiXSxtYWluOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGEsbyxzPSJmdW5jdGlvbiIsbD10LmhlbHBlck1pc3NpbmcsdT10aGlzLmVzY2FwZUV4cHJlc3Npb24sYz10LmJsb2NrSGVscGVyTWlzc2luZyxwPSI8ZGl2IGNsYXNzPSdoZWFkaW5nJz5cbiAgPGgyPlxuICAgIDxhIGhyZWY9JyMhLyIrdSgoYT1udWxsIT0oYT10LmlkfHwobnVsbCE9ZT9lLmlkOmUpKT9hOmwsdHlwZW9mIGE9PT1zP2EuY2FsbChlLHtuYW1lOiJpZCIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrJ1wnIGNsYXNzPSJ0b2dnbGVFbmRwb2ludExpc3QiIGRhdGEtaWQ9IicrdSgoYT1udWxsIT0oYT10LmlkfHwobnVsbCE9ZT9lLmlkOmUpKT9hOmwsdHlwZW9mIGE9PT1zP2EuY2FsbChlLHtuYW1lOiJpZCIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrJyI+Jyt1KChhPW51bGwhPShhPXQubmFtZXx8KG51bGwhPWU/ZS5uYW1lOmUpKT9hOmwsdHlwZW9mIGE9PT1zP2EuY2FsbChlLHtuYW1lOiJuYW1lIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsiPC9hPiAiO3JldHVybiBhPW51bGwhPShhPXQuc3VtbWFyeXx8KG51bGwhPWU/ZS5zdW1tYXJ5OmUpKT9hOmwsbz17bmFtZToic3VtbWFyeSIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMSxyKSxpbnZlcnNlOnRoaXMubm9vcCxkYXRhOnJ9LGk9dHlwZW9mIGE9PT1zP2EuY2FsbChlLG8pOmEsdC5zdW1tYXJ5fHwoaT1jLmNhbGwoZSxpLG8pKSxudWxsIT1pJiYocCs9aSksYT1udWxsIT0oYT10LnN1bW1hcnl8fChudWxsIT1lP2Uuc3VtbWFyeTplKSk/YTpsLGk9dHlwZW9mIGE9PT1zP2EuY2FsbChlLHtuYW1lOiJzdW1tYXJ5IixoYXNoOnt9LGRhdGE6cn0pOmEsbnVsbCE9aSYmKHArPWkpLHArPSJcbiAgPC9oMj5cbiAgPHVsIGNsYXNzPSdvcHRpb25zJz5cbiAgICA8bGk+XG4gICAgICA8YSBocmVmPScjIS8iK3UoKGE9bnVsbCE9KGE9dC5pZHx8KG51bGwhPWU/ZS5pZDplKSk/YTpsLHR5cGVvZiBhPT09cz9hLmNhbGwoZSx7bmFtZToiaWQiLGhhc2g6e30sZGF0YTpyfSk6YSkpKyInIGlkPSdlbmRwb2ludExpc3RUb2dnZXJfIit1KChhPW51bGwhPShhPXQuaWR8fChudWxsIT1lP2UuaWQ6ZSkpP2E6bCx0eXBlb2YgYT09PXM/YS5jYWxsKGUse25hbWU6ImlkIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsnXCcgY2xhc3M9InRvZ2dsZUVuZHBvaW50TGlzdCIgZGF0YS1pZD0iJyt1KChhPW51bGwhPShhPXQuaWR8fChudWxsIT1lP2UuaWQ6ZSkpP2E6bCx0eXBlb2YgYT09PXM/YS5jYWxsKGUse25hbWU6ImlkIixoYXNoOnt9LGRhdGE6cn0pOmEpKSsnIiBkYXRhLXN3LXRyYW5zbGF0ZT5TaG93L0hpZGU8L2E+XG4gICAgPC9saT5cbiAgICA8bGk+XG4gICAgICA8YSBocmVmPVwnI1wnIGNsYXNzPSJjb2xsYXBzZVJlc291cmNlIiBkYXRhLWlkPSInK3UoKGE9bnVsbCE9KGE9dC5pZHx8KG51bGwhPWU/ZS5pZDplKSk/YTpsLHR5cGVvZiBhPT09cz9hLmNhbGwoZSx7bmFtZToiaWQiLGhhc2g6e30sZGF0YTpyfSk6YSkpKyciIGRhdGEtc3ctdHJhbnNsYXRlPlxuICAgICAgICBMaXN0IE9wZXJhdGlvbnNcbiAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIDxsaT5cbiAgICAgIDxhIGhyZWY9XCcjXCcgY2xhc3M9ImV4cGFuZFJlc291cmNlIiBkYXRhLWlkPSInK3UoKGE9bnVsbCE9KGE9dC5pZHx8KG51bGwhPWU/ZS5pZDplKSk/YTpsLHR5cGVvZiBhPT09cz9hLmNhbGwoZSx7bmFtZToiaWQiLGhhc2g6e30sZGF0YTpyfSk6YSkpKyciIGRhdGEtc3ctdHJhbnNsYXRlPlxuICAgICAgICBFeHBhbmQgT3BlcmF0aW9uc1xuICAgICAgPC9hPlxuICAgIDwvbGk+XG4nLGk9dFsiaWYiXS5jYWxsKGUsbnVsbCE9ZT9lLnVybDplLHtuYW1lOiJpZiIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMyxyKSxpbnZlcnNlOnRoaXMubm9vcCxkYXRhOnJ9KSxudWxsIT1pJiYocCs9aSkscCsiICA8L3VsPlxuPC9kaXY+XG48dWwgY2xhc3M9J2VuZHBvaW50cycgaWQ9JyIrdSgoYT1udWxsIT0oYT10LmlkfHwobnVsbCE9ZT9lLmlkOmUpKT9hOmwsdHlwZW9mIGE9PT1zP2EuY2FsbChlLHtuYW1lOiJpZCIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrIl9lbmRwb2ludF9saXN0JyBzdHlsZT0nZGlzcGxheTpub25lJz5cblxuPC91bD5cbiJ9LHVzZURhdGE6ITB9KSx0aGlzLkhhbmRsZWJhcnMudGVtcGxhdGVzLnJlc3BvbnNlX2NvbnRlbnRfdHlwZT1IYW5kbGViYXJzLnRlbXBsYXRlKHsxOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGE9IiI7cmV0dXJuIGk9dC5lYWNoLmNhbGwoZSxudWxsIT1lP2UucHJvZHVjZXM6ZSx7bmFtZToiZWFjaCIsaGFzaDp7fSxmbjp0aGlzLnByb2dyYW0oMixyKSxpbnZlcnNlOnRoaXMubm9vcCxkYXRhOnJ9KSxudWxsIT1pJiYoYSs9aSksYX0sMjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhPXRoaXMubGFtYmRhLG89JyAgPG9wdGlvbiB2YWx1ZT0iJztyZXR1cm4gaT1hKGUsZSksbnVsbCE9aSYmKG8rPWkpLG8rPSciPicsaT1hKGUsZSksbnVsbCE9aSYmKG8rPWkpLG8rIjwvb3B0aW9uPlxuIn0sNDpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4nICA8b3B0aW9uIHZhbHVlPSJhcHBsaWNhdGlvbi9qc29uIj5hcHBsaWNhdGlvbi9qc29uPC9vcHRpb24+XG4nfSxjb21waWxlcjpbNiwiPj0gMi4wLjAtYmV0YS4xIl0sbWFpbjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhLG89ImZ1bmN0aW9uIixzPXQuaGVscGVyTWlzc2luZyxsPXRoaXMuZXNjYXBlRXhwcmVzc2lvbix1PSc8bGFiZWwgZGF0YS1zdy10cmFuc2xhdGUgZm9yPSInK2woKGE9bnVsbCE9KGE9dC5yZXNwb25zZUNvbnRlbnRUeXBlSWR8fChudWxsIT1lP2UucmVzcG9uc2VDb250ZW50VHlwZUlkOmUpKT9hOnMsdHlwZW9mIGE9PT1vP2EuY2FsbChlLHtuYW1lOiJyZXNwb25zZUNvbnRlbnRUeXBlSWQiLGhhc2g6e30sZGF0YTpyfSk6YSkpKyciPlJlc3BvbnNlIENvbnRlbnQgVHlwZTwvbGFiZWw+XG48c2VsZWN0IG5hbWU9InJlc3BvbnNlQ29udGVudFR5cGUiIGlkPSInK2woKGE9bnVsbCE9KGE9dC5yZXNwb25zZUNvbnRlbnRUeXBlSWR8fChudWxsIT1lP2UucmVzcG9uc2VDb250ZW50VHlwZUlkOmUpKT9hOnMsdHlwZW9mIGE9PT1vP2EuY2FsbChlLHtuYW1lOiJyZXNwb25zZUNvbnRlbnRUeXBlSWQiLGhhc2g6e30sZGF0YTpyfSk6YSkpKyciPlxuJztyZXR1cm4gaT10WyJpZiJdLmNhbGwoZSxudWxsIT1lP2UucHJvZHVjZXM6ZSx7bmFtZToiaWYiLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDEsciksaW52ZXJzZTp0aGlzLnByb2dyYW0oNCxyKSxkYXRhOnJ9KSxudWxsIT1pJiYodSs9aSksdSsiPC9zZWxlY3Q+XG4ifSx1c2VEYXRhOiEwfSksdGhpcy5IYW5kbGViYXJzLnRlbXBsYXRlcy5zaWduYXR1cmU9SGFuZGxlYmFycy50ZW1wbGF0ZSh7Y29tcGlsZXI6WzYsIj49IDIuMC4wLWJldGEuMSJdLG1haW46ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYSxvPSJmdW5jdGlvbiIscz10LmhlbHBlck1pc3NpbmcsbD10aGlzLmVzY2FwZUV4cHJlc3Npb24sdT0nPGRpdj5cbjx1bCBjbGFzcz0ic2lnbmF0dXJlLW5hdiI+XG4gIDxsaT48YSBjbGFzcz0iZGVzY3JpcHRpb24tbGluayIgaHJlZj0iIyIgZGF0YS1zdy10cmFuc2xhdGU+TW9kZWw8L2E+PC9saT5cbiAgPGxpPjxhIGNsYXNzPSJzbmlwcGV0LWxpbmsiIGhyZWY9IiMiIGRhdGEtc3ctdHJhbnNsYXRlPk1vZGVsIFNjaGVtYTwvYT48L2xpPlxuPC91bD5cbjxkaXY+XG5cbjxkaXYgY2xhc3M9InNpZ25hdHVyZS1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+XG4gICAgJztyZXR1cm4gYT1udWxsIT0oYT10LnNpZ25hdHVyZXx8KG51bGwhPWU/ZS5zaWduYXR1cmU6ZSkpP2E6cyxpPXR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToic2lnbmF0dXJlIixoYXNoOnt9LGRhdGE6cn0pOmEsbnVsbCE9aSYmKHUrPWkpLHUrJ1xuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPSJzbmlwcGV0Ij5cbiAgICA8cHJlPjxjb2RlPicrbCgoYT1udWxsIT0oYT10LnNhbXBsZUpTT058fChudWxsIT1lP2Uuc2FtcGxlSlNPTjplKSk/YTpzLHR5cGVvZiBhPT09bz9hLmNhbGwoZSx7bmFtZToic2FtcGxlSlNPTiIsaGFzaDp7fSxkYXRhOnJ9KTphKSkrJzwvY29kZT48L3ByZT5cbiAgICA8c21hbGwgY2xhc3M9Im5vdGljZSI+PC9zbWFsbD5cbiAgPC9kaXY+XG48L2Rpdj5cblxuJ30sdXNlRGF0YTohMH0pLHRoaXMuSGFuZGxlYmFycy50ZW1wbGF0ZXMuc3RhdHVzX2NvZGU9SGFuZGxlYmFycy50ZW1wbGF0ZSh7MTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLmxhbWJkYSxhPXRoaXMuZXNjYXBlRXhwcmVzc2lvbjtyZXR1cm4iICAgICAgPHRyPlxuICAgICAgICA8dGQ+IithKGkociYmci5rZXksZSkpKyI8L3RkPlxuICAgICAgICA8dGQ+IithKGkobnVsbCE9ZT9lLmRlc2NyaXB0aW9uOmUsZSkpKyI8L3RkPlxuICAgICAgICA8dGQ+IithKGkobnVsbCE9ZT9lLnR5cGU6ZSxlKSkrIjwvdGQ+XG4gICAgICA8L3RyPlxuIn0sY29tcGlsZXI6WzYsIj49IDIuMC4wLWJldGEuMSJdLG1haW46ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYSxvPSJmdW5jdGlvbiIscz10LmhlbHBlck1pc3NpbmcsbD10aGlzLmVzY2FwZUV4cHJlc3Npb24sdT0iPHRkIHdpZHRoPScxNSUnIGNsYXNzPSdjb2RlJz4iK2woKGE9bnVsbCE9KGE9dC5jb2RlfHwobnVsbCE9ZT9lLmNvZGU6ZSkpP2E6cyx0eXBlb2YgYT09PW8/YS5jYWxsKGUse25hbWU6ImNvZGUiLGhhc2g6e30sZGF0YTpyfSk6YSkpKyc8L3RkPlxuPHRkIGNsYXNzPSJtYXJrZG93biI+JztyZXR1cm4gYT1udWxsIT0oYT10Lm1lc3NhZ2V8fChudWxsIT1lP2UubWVzc2FnZTplKSk/YTpzLGk9dHlwZW9mIGE9PT1vP2EuY2FsbChlLHtuYW1lOiJtZXNzYWdlIixoYXNoOnt9LGRhdGE6cn0pOmEsbnVsbCE9aSYmKHUrPWkpLHUrPSc8L3RkPlxuPHRkIHdpZHRoPVwnNTAlXCc+PHNwYW4gY2xhc3M9Im1vZGVsLXNpZ25hdHVyZSIgLz48L3RkPlxuPHRkIGNsYXNzPSJoZWFkZXJzIj5cbiAgPHRhYmxlPlxuICAgIDx0Ym9keT5cbicsaT10LmVhY2guY2FsbChlLG51bGwhPWU/ZS5oZWFkZXJzOmUse25hbWU6ImVhY2giLGhhc2g6e30sZm46dGhpcy5wcm9ncmFtKDEsciksaW52ZXJzZTp0aGlzLm5vb3AsZGF0YTpyfSksbnVsbCE9aSYmKHUrPWkpLHUrIiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuPC90ZD4ifSx1c2VEYXRhOiEwfSksZnVuY3Rpb24oZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1lKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxlKTtlbHNle3ZhciB0O3Q9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLHQuU3dhZ2dlckNsaWVudD1lKCl9fShmdW5jdGlvbigpe3ZhciBlO3JldHVybiBmdW5jdGlvbiB0KGUsbixyKXtmdW5jdGlvbiBpKG8scyl7aWYoIW5bb10pe2lmKCFlW29dKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighcyYmbClyZXR1cm4gbChvLCEwKTtpZihhKXJldHVybiBhKG8sITApO3ZhciB1PW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28rIiciKTt0aHJvdyB1LmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLHV9dmFyIGM9bltvXT17ZXhwb3J0czp7fX07ZVtvXVswXS5jYWxsKGMuZXhwb3J0cyxmdW5jdGlvbih0KXt2YXIgbj1lW29dWzFdW3RdO3JldHVybiBpKG4/bjp0KX0sYyxjLmV4cG9ydHMsdCxlLG4scil9cmV0dXJuIG5bb10uZXhwb3J0c31mb3IodmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsbz0wO288ci5sZW5ndGg7bysrKWkocltvXSk7cmV0dXJuIGl9KHsxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vbGliL2F1dGgiKSxpPWUoIi4vbGliL2hlbHBlcnMiKSxhPWUoIi4vbGliL2NsaWVudCIpLG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5sb2coJ1RoaXMgaXMgZGVwcmVjYXRlZCwgdXNlICJuZXcgU3dhZ2dlckNsaWVudCIgaW5zdGVhZC4nKSxuZXcgYShlLHQpfTtBcnJheS5wcm90b3R5cGUuaW5kZXhPZnx8KEFycmF5LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXR8fDAscj10aGlzLmxlbmd0aDtyPm47bisrKWlmKHRoaXNbbl09PT1lKXJldHVybiBuO3JldHVybi0xfSksU3RyaW5nLnByb3RvdHlwZS50cmltfHwoU3RyaW5nLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSksU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aHx8KFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGg9ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0aGlzLmxlbmd0aC1lLmxlbmd0aCl9KSx0LmV4cG9ydHM9YSxhLkFwaUtleUF1dGhvcml6YXRpb249ci5BcGlLZXlBdXRob3JpemF0aW9uLGEuUGFzc3dvcmRBdXRob3JpemF0aW9uPXIuUGFzc3dvcmRBdXRob3JpemF0aW9uLGEuQ29va2llQXV0aG9yaXphdGlvbj1yLkNvb2tpZUF1dGhvcml6YXRpb24sYS5Td2FnZ2VyQXBpPW8sYS5Td2FnZ2VyQ2xpZW50PW8sYS5TY2hlbWFNYXJrdXA9ZSgiLi9saWIvc2NoZW1hLW1hcmt1cCIpfSx7Ii4vbGliL2F1dGgiOjIsIi4vbGliL2NsaWVudCI6MywiLi9saWIvaGVscGVycyI6NCwiLi9saWIvc2NoZW1hLW1hcmt1cCI6N31dLDI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi9oZWxwZXJzIiksaT1lKCJidG9hIiksYT1lKCJjb29raWVqYXIiKSxvPXtlYWNoOmUoImxvZGFzaC1jb21wYXQvY29sbGVjdGlvbi9lYWNoIiksaW5jbHVkZXM6ZSgibG9kYXNoLWNvbXBhdC9jb2xsZWN0aW9uL2luY2x1ZGVzIiksaXNPYmplY3Q6ZSgibG9kYXNoLWNvbXBhdC9sYW5nL2lzT2JqZWN0IiksaXNBcnJheTplKCJsb2Rhc2gtY29tcGF0L2xhbmcvaXNBcnJheSIpfSxzPXQuZXhwb3J0cy5Td2FnZ2VyQXV0aG9yaXphdGlvbnM9ZnVuY3Rpb24oZSl7dGhpcy5hdXRoej1lfHx7fX07cy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUsdCl7aWYoby5pc09iamVjdChlKSlmb3IodmFyIG4gaW4gZSl0aGlzLmF1dGh6W25dPWVbbl07ZWxzZSJzdHJpbmciPT10eXBlb2YgZSYmKHRoaXMuYXV0aHpbZV09dCk7cmV0dXJuIHR9LHMucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXtyZXR1cm4gZGVsZXRlIHRoaXMuYXV0aHpbZV19LHMucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKGUsdCl7dmFyIG49ITAscj0hdCxpPVtdO3JldHVybiBvLmVhY2godCxmdW5jdGlvbihlLHQpeyJzdHJpbmciPT10eXBlb2YgdCYmaS5wdXNoKHQpLG8uZWFjaChlLGZ1bmN0aW9uKGUsdCl7aS5wdXNoKHQpfSl9KSxvLmVhY2godGhpcy5hdXRoeixmdW5jdGlvbih0LGEpe2lmKHJ8fG8uaW5jbHVkZXMoaSxhKSl7dmFyIHM9dC5hcHBseShlKTtuPW4mJiEhc319KSxufTt2YXIgbD10LmV4cG9ydHMuQXBpS2V5QXV0aG9yaXphdGlvbj1mdW5jdGlvbihlLHQsbil7dGhpcy5uYW1lPWUsdGhpcy52YWx1ZT10LHRoaXMudHlwZT1ufTtsLnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbihlKXtyZXR1cm4icXVlcnkiPT09dGhpcy50eXBlPyhlLnVybC5pbmRleE9mKCI/Iik+MD9lLnVybD1lLnVybCsiJiIrdGhpcy5uYW1lKyI9Iit0aGlzLnZhbHVlOmUudXJsPWUudXJsKyI/Iit0aGlzLm5hbWUrIj0iK3RoaXMudmFsdWUsITApOiJoZWFkZXIiPT09dGhpcy50eXBlPygidW5kZWZpbmVkIj09dHlwZW9mIGUuaGVhZGVyc1t0aGlzLm5hbWVdJiYoZS5oZWFkZXJzW3RoaXMubmFtZV09dGhpcy52YWx1ZSksITApOnZvaWQgMH07dmFyIHU9dC5leHBvcnRzLkNvb2tpZUF1dGhvcml6YXRpb249ZnVuY3Rpb24oZSl7dGhpcy5jb29raWU9ZX07dS5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29va2llSmFyPWUuY29va2llSmFyfHxuZXcgYSxlLmNvb2tpZUphci5zZXRDb29raWUodGhpcy5jb29raWUpLCEwfTt2YXIgYz10LmV4cG9ydHMuUGFzc3dvcmRBdXRob3JpemF0aW9uPWZ1bmN0aW9uKGUsdCl7Mz09PWFyZ3VtZW50cy5sZW5ndGgmJihyLmxvZygiUGFzc3dvcmRBdXRob3JpemF0aW9uOiB0aGUgJ25hbWUnIGFyZ3VtZW50IGhhcyBiZWVuIHJlbW92ZWQsIHBhc3Mgb25seSB1c2VybmFtZSBhbmQgcGFzc3dvcmQiKSxlPWFyZ3VtZW50c1sxXSx0PWFyZ3VtZW50c1syXSksdGhpcy51c2VybmFtZT1lLHRoaXMucGFzc3dvcmQ9dH07Yy5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBlLmhlYWRlcnMuQXV0aG9yaXphdGlvbiYmKGUuaGVhZGVycy5BdXRob3JpemF0aW9uPSJCYXNpYyAiK2kodGhpcy51c2VybmFtZSsiOiIrdGhpcy5wYXNzd29yZCkpLCEwfX0seyIuL2hlbHBlcnMiOjQsYnRvYToxOCxjb29raWVqYXI6MTksImxvZGFzaC1jb21wYXQvY29sbGVjdGlvbi9lYWNoIjo1NSwibG9kYXNoLWNvbXBhdC9jb2xsZWN0aW9uL2luY2x1ZGVzIjo1OCwibG9kYXNoLWNvbXBhdC9sYW5nL2lzQXJyYXkiOjE0MywibG9kYXNoLWNvbXBhdC9sYW5nL2lzT2JqZWN0IjoxNDd9XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXtiaW5kOmUoImxvZGFzaC1jb21wYXQvZnVuY3Rpb24vYmluZCIpLGNsb25lRGVlcDplKCJsb2Rhc2gtY29tcGF0L2xhbmcvY2xvbmVEZWVwIiksZmluZDplKCJsb2Rhc2gtY29tcGF0L2NvbGxlY3Rpb24vZmluZCIpLGZvckVhY2g6ZSgibG9kYXNoLWNvbXBhdC9jb2xsZWN0aW9uL2ZvckVhY2giKSxpbmRleE9mOmUoImxvZGFzaC1jb21wYXQvYXJyYXkvaW5kZXhPZiIpLGlzQXJyYXk6ZSgibG9kYXNoLWNvbXBhdC9sYW5nL2lzQXJyYXkiKSxpc09iamVjdDplKCJsb2Rhc2gtY29tcGF0L2xhbmcvaXNPYmplY3QiKSxpc0Z1bmN0aW9uOmUoImxvZGFzaC1jb21wYXQvbGFuZy9pc0Z1bmN0aW9uIiksaXNQbGFpbk9iamVjdDplKCJsb2Rhc2gtY29tcGF0L2xhbmcvaXNQbGFpbk9iamVjdCIpLGlzVW5kZWZpbmVkOmUoImxvZGFzaC1jb21wYXQvbGFuZy9pc1VuZGVmaW5lZCIpfSxpPWUoIi4vYXV0aCIpLGE9ZSgiLi9oZWxwZXJzIiksbz1lKCIuL3R5cGVzL21vZGVsIikscz1lKCIuL3R5cGVzL29wZXJhdGlvbiIpLGw9ZSgiLi90eXBlcy9vcGVyYXRpb25Hcm91cCIpLHU9ZSgiLi9yZXNvbHZlciIpLGM9ZSgiLi9odHRwIikscD1lKCIuL3NwZWMtY29udmVydGVyIiksZj1bImFwaXMiLCJhdXRob3JpemF0aW9uU2NoZW1lIiwiYXV0aG9yaXphdGlvbnMiLCJiYXNlUGF0aCIsImJ1aWxkIiwiYnVpbGRGcm9tMV8xU3BlYyIsImJ1aWxkRnJvbTFfMlNwZWMiLCJidWlsZEZyb21TcGVjIiwiY2xpZW50QXV0aG9yaXphdGlvbnMiLCJjb252ZXJ0SW5mbyIsImRlYnVnIiwiZGVmYXVsdEVycm9yQ2FsbGJhY2siLCJkZWZhdWx0U3VjY2Vzc0NhbGxiYWNrIiwiZmFpbCIsImZhaWx1cmUiLCJmaW5pc2giLCJoZWxwIiwiaWRGcm9tT3AiLCJpbmZvIiwiaW5pdGlhbGl6ZSIsImlzQnVpbHQiLCJpc1ZhbGlkIiwibW9kZWxQcm9wZXJ0eU1hY3JvIiwibW9kZWxzIiwibW9kZWxzQXJyYXkiLCJvcHRpb25zIiwicGFyYW1ldGVyTWFjcm8iLCJwYXJzZVVyaSIsInByb2dyZXNzIiwicmVzb3VyY2VDb3VudCIsInNhbXBsZU1vZGVscyIsInNlbGZSZWZsZWN0Iiwic2V0Q29uc29saWRhdGVkTW9kZWxzIiwic3BlYyIsInN1cHBvcnRlZFN1Ym1pdE1ldGhvZHMiLCJzd2FnZ2VyUmVxdWVzdEhlYWRlcnMiLCJ0YWdGcm9tTGFiZWwiLCJ0aXRsZSIsInVybCIsInVzZUpRdWVyeSJdLGg9WyJhcGlzIiwiYXNDdXJsIiwiZGVzY3JpcHRpb24iLCJleHRlcm5hbERvY3MiLCJoZWxwIiwibGFiZWwiLCJuYW1lIiwib3BlcmF0aW9uIiwib3BlcmF0aW9ucyIsIm9wZXJhdGlvbnNBcnJheSIsInBhdGgiLCJ0YWciXSxkPVsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiLCJwYXRjaCIsInBvc3QiLCJwdXQiXSxtPXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmF1dGhvcml6YXRpb25zPW51bGwsdGhpcy5hdXRob3JpemF0aW9uU2NoZW1lPW51bGwsdGhpcy5iYXNlUGF0aD1udWxsLHRoaXMuZGVidWc9ITEsdGhpcy5pbmZvPW51bGwsdGhpcy5pc0J1aWx0PSExLHRoaXMuaXNWYWxpZD0hMSx0aGlzLm1vZGVsc0FycmF5PVtdLHRoaXMucmVzb3VyY2VDb3VudD0wLHRoaXMudXJsPW51bGwsdGhpcy51c2VKUXVlcnk9ITEsdGhpcy5zd2FnZ2VyT2JqZWN0PXt9LHRoaXMuY2xpZW50QXV0aG9yaXphdGlvbnM9bmV3IGkuU3dhZ2dlckF1dGhvcml6YXRpb25zLCJ1bmRlZmluZWQiIT10eXBlb2YgZT90aGlzLmluaXRpYWxpemUoZSx0KTp0aGlzfTttLnByb3RvdHlwZS5pbml0aWFsaXplPWZ1bmN0aW9uKGUsdCl7dGhpcy5tb2RlbHM9e30sdGhpcy5zYW1wbGVNb2RlbHM9e30sInN0cmluZyI9PXR5cGVvZiBlP3RoaXMudXJsPWU6ci5pc09iamVjdChlKSYmKHQ9ZSx0aGlzLnVybD10LnVybCksdD10fHx7fSx0aGlzLmNsaWVudEF1dGhvcml6YXRpb25zLmFkZCh0LmF1dGhvcml6YXRpb25zKSx0aGlzLnN3YWdnZXJSZXF1ZXN0SGVhZGVycz10LnN3YWdnZXJSZXF1ZXN0SGVhZGVyc3x8ImFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCwqLyoiLHRoaXMuZGVmYXVsdFN1Y2Nlc3NDYWxsYmFjaz10LmRlZmF1bHRTdWNjZXNzQ2FsbGJhY2t8fG51bGwsdGhpcy5kZWZhdWx0RXJyb3JDYWxsYmFjaz10LmRlZmF1bHRFcnJvckNhbGxiYWNrfHxudWxsLHRoaXMubW9kZWxQcm9wZXJ0eU1hY3JvPXQubW9kZWxQcm9wZXJ0eU1hY3JvfHxudWxsLHRoaXMucGFyYW1ldGVyTWFjcm89dC5wYXJhbWV0ZXJNYWNyb3x8bnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgdC5zdWNjZXNzJiYodGhpcy5zdWNjZXNzPXQuc3VjY2VzcyksdC51c2VKUXVlcnkmJih0aGlzLnVzZUpRdWVyeT10LnVzZUpRdWVyeSksdGhpcy5vcHRpb25zPXR8fHt9LHRoaXMuc3VwcG9ydGVkU3VibWl0TWV0aG9kcz10LnN1cHBvcnRlZFN1Ym1pdE1ldGhvZHN8fFtdLHRoaXMuZmFpbHVyZT10LmZhaWx1cmV8fGZ1bmN0aW9uKCl7fSx0aGlzLnByb2dyZXNzPXQucHJvZ3Jlc3N8fGZ1bmN0aW9uKCl7fSx0aGlzLnNwZWM9ci5jbG9uZURlZXAodC5zcGVjKSx0LnNjaGVtZSYmKHRoaXMuc2NoZW1lPXQuc2NoZW1lKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5zdWNjZXNzJiYodGhpcy5yZWFkeT0hMCx0aGlzLmJ1aWxkKCkpfSxtLnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbihlKXtpZih0aGlzLmlzQnVpbHQpcmV0dXJuIHRoaXM7dmFyIHQ9dGhpczt0aGlzLnByb2dyZXNzKCJmZXRjaGluZyByZXNvdXJjZSBsaXN0OiAiK3RoaXMudXJsKyI7IFBsZWFzZSB3YWl0LiIpO3ZhciBuPXt1c2VKUXVlcnk6dGhpcy51c2VKUXVlcnksdXJsOnRoaXMudXJsLG1ldGhvZDoiZ2V0IixoZWFkZXJzOnthY2NlcHQ6dGhpcy5zd2FnZ2VyUmVxdWVzdEhlYWRlcnN9LG9uOntlcnJvcjpmdW5jdGlvbihlKXtyZXR1cm4iaHR0cCIhPT10LnVybC5zdWJzdHJpbmcoMCw0KT90LmZhaWwoIlBsZWFzZSBzcGVjaWZ5IHRoZSBwcm90b2NvbCBmb3IgIit0LnVybCk6MD09PWUuc3RhdHVzP3QuZmFpbCgiQ2FuJ3QgcmVhZCBmcm9tIHNlcnZlci4gIEl0IG1heSBub3QgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgYWNjZXNzLWNvbnRyb2wtb3JpZ2luIHNldHRpbmdzLiIpOjQwND09PWUuc3RhdHVzP3QuZmFpbCgiQ2FuJ3QgcmVhZCBzd2FnZ2VyIEpTT04gZnJvbSAiK3QudXJsKTp0LmZhaWwoZS5zdGF0dXMrIiA6ICIrZS5zdGF0dXNUZXh0KyIgIit0LnVybCl9LHJlc3BvbnNlOmZ1bmN0aW9uKGUpe3ZhciBuPWUub2JqO2lmKCFuKXJldHVybiB0LmZhaWwoImZhaWxlZCB0byBwYXJzZSBKU09OL1lBTUwgcmVzcG9uc2UiKTtpZih0LnN3YWdnZXJWZXJzaW9uPW4uc3dhZ2dlclZlcnNpb24sdC5zd2FnZ2VyT2JqZWN0PW4sbi5zd2FnZ2VyJiYyPT09cGFyc2VJbnQobi5zd2FnZ2VyKSl0LnN3YWdnZXJWZXJzaW9uPW4uc3dhZ2dlciwobmV3IHUpLnJlc29sdmUobix0LnVybCx0LmJ1aWxkRnJvbVNwZWMsdCksdC5pc1ZhbGlkPSEwO2Vsc2V7dmFyIHI9bmV3IHA7dC5vbGRTd2FnZ2VyT2JqZWN0PXQuc3dhZ2dlck9iamVjdCxyLnNldERvY3VtZW50YXRpb25Mb2NhdGlvbih0LnVybCksci5jb252ZXJ0KG4sdC5jbGllbnRBdXRob3JpemF0aW9ucyxmdW5jdGlvbihlKXt0LnN3YWdnZXJPYmplY3Q9ZSwobmV3IHUpLnJlc29sdmUoZSx0LnVybCx0LmJ1aWxkRnJvbVNwZWMsdCksdC5pc1ZhbGlkPSEwfSl9fX19O2lmKHRoaXMuc3BlYyl0LnN3YWdnZXJPYmplY3Q9dGhpcy5zcGVjLHNldFRpbWVvdXQoZnVuY3Rpb24oKXsobmV3IHUpLnJlc29sdmUodC5zcGVjLHQuYnVpbGRGcm9tU3BlYyx0KX0sMTApO2Vsc2V7aWYodGhpcy5jbGllbnRBdXRob3JpemF0aW9ucy5hcHBseShuKSxlKXJldHVybiBuOyhuZXcgYykuZXhlY3V0ZShuLHRoaXMub3B0aW9ucyl9cmV0dXJuIHRoaXN9LG0ucHJvdG90eXBlLmJ1aWxkRnJvbVNwZWM9ZnVuY3Rpb24oZSl7aWYodGhpcy5pc0J1aWx0KXJldHVybiB0aGlzO3RoaXMuYXBpcz17fSx0aGlzLmFwaXNBcnJheT1bXSx0aGlzLmJhc2VQYXRoPWUuYmFzZVBhdGh8fCIiLHRoaXMuY29uc3VtZXM9ZS5jb25zdW1lcyx0aGlzLmhvc3Q9ZS5ob3N0fHwiIix0aGlzLmluZm89ZS5pbmZvfHx7fSx0aGlzLnByb2R1Y2VzPWUucHJvZHVjZXMsdGhpcy5zY2hlbWVzPWUuc2NoZW1lc3x8W10sdGhpcy5zZWN1cml0eURlZmluaXRpb25zPWUuc2VjdXJpdHlEZWZpbml0aW9ucyx0aGlzLnRpdGxlPWUudGl0bGV8fCIiLGUuZXh0ZXJuYWxEb2NzJiYodGhpcy5leHRlcm5hbERvY3M9ZS5leHRlcm5hbERvY3MpLHRoaXMuYXV0aFNjaGVtZXM9ZS5zZWN1cml0eURlZmluaXRpb25zO3ZhciB0LG49e307aWYoQXJyYXkuaXNBcnJheShlLnRhZ3MpKWZvcihuPXt9LHQ9MDt0PGUudGFncy5sZW5ndGg7dCsrKXt2YXIgaT1lLnRhZ3NbdF07bltpLm5hbWVdPWl9dmFyIHU7InN0cmluZyI9PXR5cGVvZiB0aGlzLnVybD8odT10aGlzLnBhcnNlVXJpKHRoaXMudXJsKSwidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMuc2NoZW1lJiYidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMuc2NoZW1lc3x8MD09PXRoaXMuc2NoZW1lcy5sZW5ndGg/dGhpcy5zY2hlbWU9dS5zY2hlbWV8fCJodHRwIjoidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMuc2NoZW1lJiYodGhpcy5zY2hlbWU9dGhpcy5zY2hlbWVzWzBdKSwoInVuZGVmaW5lZCI9PXR5cGVvZiB0aGlzLmhvc3R8fCIiPT09dGhpcy5ob3N0KSYmKHRoaXMuaG9zdD11Lmhvc3QsdS5wb3J0JiYodGhpcy5ob3N0PXRoaXMuaG9zdCsiOiIrdS5wb3J0KSkpOiJ1bmRlZmluZWQiPT10eXBlb2YgdGhpcy5zY2hlbWVzfHwwPT09dGhpcy5zY2hlbWVzLmxlbmd0aD90aGlzLnNjaGVtZT0iaHR0cCI6InVuZGVmaW5lZCI9PXR5cGVvZiB0aGlzLnNjaGVtZSYmKHRoaXMuc2NoZW1lPXRoaXMuc2NoZW1lc1swXSksdGhpcy5kZWZpbml0aW9ucz1lLmRlZmluaXRpb25zO3ZhciBjO2ZvcihjIGluIHRoaXMuZGVmaW5pdGlvbnMpe3ZhciBwPW5ldyBvKGMsdGhpcy5kZWZpbml0aW9uc1tjXSx0aGlzLm1vZGVscyx0aGlzLm1vZGVsUHJvcGVydHlNYWNybyk7cCYmKHRoaXMubW9kZWxzW2NdPXApfXZhciBtPXRoaXM7cmV0dXJuIG0uYXBpcy5oZWxwPXIuYmluZChtLmhlbHAsbSksci5mb3JFYWNoKGUucGF0aHMsZnVuY3Rpb24oZSx0KXtyLmlzUGxhaW5PYmplY3QoZSkmJnIuZm9yRWFjaChkLGZ1bmN0aW9uKGkpe3ZhciBvPWVbaV07aWYoIXIuaXNVbmRlZmluZWQobykpe2lmKCFyLmlzUGxhaW5PYmplY3QobykpcmV0dXJuIHZvaWQgYS5sb2coIlRoZSAnIitpKyInIG9wZXJhdGlvbiBmb3IgJyIrdCsiJyBwYXRoIGlzIG5vdCBhbiBPcGVyYXRpb24gT2JqZWN0Iik7dmFyIHU9by50YWdzOyhyLmlzVW5kZWZpbmVkKHUpfHwhci5pc0FycmF5KHUpfHwwPT09dS5sZW5ndGgpJiYodT1vLnRhZ3M9WyJkZWZhdWx0Il0pO3ZhciBjPW0uaWRGcm9tT3AodCxpLG8pLHA9bmV3IHMobSxvLnNjaGVtZSxjLGksdCxvLG0uZGVmaW5pdGlvbnMsbS5tb2RlbHMsbS5jbGllbnRBdXRob3JpemF0aW9ucyk7ci5mb3JFYWNoKHUsZnVuY3Rpb24oZSl7dmFyIHQ9ci5pbmRleE9mKGYsZSk+LTE/Il8iK2U6ZSxpPXIuaW5kZXhPZihoLGUpPi0xPyJfIitlOmUsbz1tW3RdO2lmKHQhPT1lJiZhLmxvZygiVGhlICciK2UrIicgdGFnIGNvbmZsaWN0cyB3aXRoIGEgU3dhZ2dlckNsaWVudCBmdW5jdGlvbi9wcm9wZXJ0eSBuYW1lLiAgVXNlICdjbGllbnQuIit0KyInIG9yICdjbGllbnQuYXBpcy4iK2UrIicgaW5zdGVhZCBvZiAnY2xpZW50LiIrZSsiJy4iKSxpIT09ZSYmYS5sb2coIlRoZSAnIitlKyInIHRhZyBjb25mbGljdHMgd2l0aCBhIFN3YWdnZXJDbGllbnQgb3BlcmF0aW9uIGZ1bmN0aW9uL3Byb3BlcnR5IG5hbWUuICBVc2UgJ2NsaWVudC5hcGlzLiIraSsiJyBpbnN0ZWFkIG9mICdjbGllbnQuYXBpcy4iK2UrIicuIiksci5pbmRleE9mKGgsYyk+LTEmJihhLmxvZygiVGhlICciK2MrIicgb3BlcmF0aW9uSWQgY29uZmxpY3RzIHdpdGggYSBTd2FnZ2VyQ2xpZW50IG9wZXJhdGlvbiBmdW5jdGlvbi9wcm9wZXJ0eSBuYW1lLiAgVXNlICdjbGllbnQuYXBpcy4iK2krIi5fIitjKyInIGluc3RlYWQgb2YgJ2NsaWVudC5hcGlzLiIraSsiLiIrYysiJy4iKSxjPSJfIitjLHAubmlja25hbWU9Yyksci5pc1VuZGVmaW5lZChvKSl7bz1tW3RdPW0uYXBpc1tpXT17fSxvLm9wZXJhdGlvbnM9e30sby5sYWJlbD1pLG8uYXBpcz17fTt2YXIgcz1uW2VdO3IuaXNVbmRlZmluZWQocyl8fChvLmRlc2NyaXB0aW9uPXMuZGVzY3JpcHRpb24sby5leHRlcm5hbERvY3M9cy5leHRlcm5hbERvY3MpLG1bdF0uaGVscD1yLmJpbmQobS5oZWxwLG8pLG0uYXBpc0FycmF5LnB1c2gobmV3IGwoZSxvLmRlc2NyaXB0aW9uLG8uZXh0ZXJuYWxEb2NzLHApKX1yLmlzRnVuY3Rpb24oby5oZWxwKXx8KG8uaGVscD1yLmJpbmQobS5oZWxwLG8pKSxtLmFwaXNbaV1bY109b1tjXT1yLmJpbmQocC5leGVjdXRlLHApLG0uYXBpc1tpXVtjXS5oZWxwPW9bY10uaGVscD1yLmJpbmQocC5oZWxwLHApLG0uYXBpc1tpXVtjXS5hc0N1cmw9b1tjXS5hc0N1cmw9ci5iaW5kKHAuYXNDdXJsLHApLG8uYXBpc1tjXT1vLm9wZXJhdGlvbnNbY109cDt2YXIgdT1yLmZpbmQobS5hcGlzQXJyYXksZnVuY3Rpb24odCl7cmV0dXJuIHQudGFnPT09ZX0pO3UmJnUub3BlcmF0aW9uc0FycmF5LnB1c2gocCl9KX19KX0pLHRoaXMuaXNCdWlsdD0hMCx0aGlzLnN1Y2Nlc3MmJih0aGlzLmlzVmFsaWQ9ITAsdGhpcy5pc0J1aWx0PSEwLHRoaXMuc3VjY2VzcygpKSx0aGlzfSxtLnByb3RvdHlwZS5wYXJzZVVyaT1mdW5jdGlvbihlKXt2YXIgdD0vXigoKChbXjpcLyNcP10rOik/KD86KFwvXC8pKCg/OigoW146QFwvI1w/XSspKD86XDooW146QFwvI1w/XSspKT8pQCk/KChbXjpcLyNcP1xdXFtdK3xcW1teXC9cXUAjP10rXF0pKD86XDooWzAtOV0rKSk/KSk/KT8pPygoXC8/KD86W15cL1w/I10rXC8rKSopKFteXD8jXSopKSk/KFw/W14jXSspPykoIy4qKT8vLG49dC5leGVjKGUpO3JldHVybntzY2hlbWU6bls0XS5yZXBsYWNlKCI6IiwiIiksaG9zdDpuWzExXSxwb3J0Om5bMTJdLHBhdGg6blsxNV19fSxtLnByb3RvdHlwZS5oZWxwPWZ1bmN0aW9uKGUpe3ZhciB0PSIiO3JldHVybiB0aGlzIGluc3RhbmNlb2YgbT9yLmZvckVhY2godGhpcy5hcGlzLGZ1bmN0aW9uKGUsbil7ci5pc1BsYWluT2JqZWN0KGUpJiYodCs9Im9wZXJhdGlvbnMgZm9yIHRoZSAnIituKyInIHRhZ1xuIixyLmZvckVhY2goZS5vcGVyYXRpb25zLGZ1bmN0aW9uKGUsbil7dCs9IiAgKiAiK24rIjogIitlLnN1bW1hcnkrIlxuIn0pKX0pOih0aGlzIGluc3RhbmNlb2YgbHx8ci5pc1BsYWluT2JqZWN0KHRoaXMpKSYmKHQrPSJvcGVyYXRpb25zIGZvciB0aGUgJyIrdGhpcy5sYWJlbCsiJyB0YWdcbiIsci5mb3JFYWNoKHRoaXMuYXBpcyxmdW5jdGlvbihlLG4pe3QrPSIgICogIituKyI6ICIrZS5zdW1tYXJ5KyJcbiJ9KSksZT90OihhLmxvZyh0KSx0KX0sbS5wcm90b3R5cGUudGFnRnJvbUxhYmVsPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxtLnByb3RvdHlwZS5pZEZyb21PcD1mdW5jdGlvbihlLHQsbil7biYmbi5vcGVyYXRpb25JZHx8KG49bnx8e30sbi5vcGVyYXRpb25JZD10KyJfIitlKTt2YXIgcj1uLm9wZXJhdGlvbklkLnJlcGxhY2UoL1tccyFAIyQlXiYqKClfKz1cW3tcXX07Ojw+fC5cLz8sXFwnIiItXS9nLCJfIil8fGUuc3Vic3RyaW5nKDEpKyJfIit0O3JldHVybiByPXIucmVwbGFjZSgvKChfKXsyLH0pL2csIl8iKSxyPXIucmVwbGFjZSgvXihfKSovZywiIikscj1yLnJlcGxhY2UoLyhbX10pKiQvZywiIil9LG0ucHJvdG90eXBlLnNldEhvc3Q9ZnVuY3Rpb24oZSl7dGhpcy5ob3N0PWUsdGhpcy5hcGlzJiZyLmZvckVhY2godGhpcy5hcGlzLGZ1bmN0aW9uKHQpe3Qub3BlcmF0aW9ucyYmci5mb3JFYWNoKHQub3BlcmF0aW9ucyxmdW5jdGlvbih0KXt0Lmhvc3Q9ZX0pfSl9LG0ucHJvdG90eXBlLnNldEJhc2VQYXRoPWZ1bmN0aW9uKGUpe3RoaXMuYmFzZVBhdGg9ZSx0aGlzLmFwaXMmJnIuZm9yRWFjaCh0aGlzLmFwaXMsZnVuY3Rpb24odCl7dC5vcGVyYXRpb25zJiZyLmZvckVhY2godC5vcGVyYXRpb25zLGZ1bmN0aW9uKHQpe3QuYmFzZVBhdGg9ZX0pfSl9LG0ucHJvdG90eXBlLmZhaWw9ZnVuY3Rpb24oZSl7dGhyb3cgdGhpcy5mYWlsdXJlKGUpLGV9fSx7Ii4vYXV0aCI6MiwiLi9oZWxwZXJzIjo0LCIuL2h0dHAiOjUsIi4vcmVzb2x2ZXIiOjYsIi4vc3BlYy1jb252ZXJ0ZXIiOjgsIi4vdHlwZXMvbW9kZWwiOjksIi4vdHlwZXMvb3BlcmF0aW9uIjoxMCwiLi90eXBlcy9vcGVyYXRpb25Hcm91cCI6MTEsImxvZGFzaC1jb21wYXQvYXJyYXkvaW5kZXhPZiI6NTIsImxvZGFzaC1jb21wYXQvY29sbGVjdGlvbi9maW5kIjo1NiwibG9kYXNoLWNvbXBhdC9jb2xsZWN0aW9uL2ZvckVhY2giOjU3LCJsb2Rhc2gtY29tcGF0L2Z1bmN0aW9uL2JpbmQiOjYxLCJsb2Rhc2gtY29tcGF0L2xhbmcvY2xvbmVEZWVwIjoxNDEsImxvZGFzaC1jb21wYXQvbGFuZy9pc0FycmF5IjoxNDMsImxvZGFzaC1jb21wYXQvbGFuZy9pc0Z1bmN0aW9uIjoxNDUsImxvZGFzaC1jb21wYXQvbGFuZy9pc09iamVjdCI6MTQ3LCJsb2Rhc2gtY29tcGF0L2xhbmcvaXNQbGFpbk9iamVjdCI6MTQ4LCJsb2Rhc2gtY29tcGF0L2xhbmcvaXNVbmRlZmluZWQiOjE1MX1dLDQ6W2Z1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24obil7InVzZSBzdHJpY3QiO3ZhciByPXtpc1BsYWluT2JqZWN0OmUoImxvZGFzaC1jb21wYXQvbGFuZy9pc1BsYWluT2JqZWN0IiksaW5kZXhPZjplKCJsb2Rhc2gtY29tcGF0L2FycmF5L2luZGV4T2YiKX07dC5leHBvcnRzLl9fYmluZD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19O3ZhciBpPXQuZXhwb3J0cy5sb2c9ZnVuY3Rpb24oKXtjb25zb2xlJiYidGVzdCIhPT1uLmVudi5OT0RFX0VOViYmY29uc29sZS5sb2coQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKVswXSl9O3QuZXhwb3J0cy5mYWlsPWZ1bmN0aW9uKGUpe2koZSl9O3ZhciBhPSh0LmV4cG9ydHMub3B0aW9uSHRtbD1mdW5jdGlvbihlLHQpe3JldHVybic8dHI+PHRkIGNsYXNzPSJvcHRpb25OYW1lIj4nK2UrIjo8L3RkPjx0ZD4iK3QrIjwvdGQ+PC90cj4ifSx0LmV4cG9ydHMucmVzb2x2ZVNjaGVtYT1mdW5jdGlvbihlKXtyZXR1cm4gci5pc1BsYWluT2JqZWN0KGUuc2NoZW1hKSYmKGU9YShlLnNjaGVtYSkpLGV9KTt0LmV4cG9ydHMuc2ltcGxlUmVmPWZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZT9udWxsOjA9PT1lLmluZGV4T2YoIiMvZGVmaW5pdGlvbnMvIik/ZS5zdWJzdHJpbmcoIiMvZGVmaW5pdGlvbnMvIi5sZW5ndGgpOmV9fSkuY2FsbCh0aGlzLGUoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6MTcsImxvZGFzaC1jb21wYXQvYXJyYXkvaW5kZXhPZiI6NTIsImxvZGFzaC1jb21wYXQvbGFuZy9pc1BsYWluT2JqZWN0IjoxNDh9XSw1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vaGVscGVycyIpLGk9ZSgianF1ZXJ5IiksYT1lKCJzdXBlcmFnZW50Iiksbz1lKCJqcy15YW1sIikscz17aXNPYmplY3Q6ZSgibG9kYXNoLWNvbXBhdC9sYW5nL2lzT2JqZWN0Iil9LGw9ZnVuY3Rpb24oKXt9LHU9ZnVuY3Rpb24oKXt9LGM9dC5leHBvcnRzPWZ1bmN0aW9uKCl7fTtjLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG47bj10JiZ0LmNsaWVudD90LmNsaWVudDpuZXcgdSh0KSwoZSYmZS51c2VKUXVlcnk9PT0hMHx8dGhpcy5pc0ludGVybmV0RXhwbG9yZXIoKSkmJihuPW5ldyBsKHQpKTt2YXIgcj1lLm9uLnJlc3BvbnNlLGk9ZnVuY3Rpb24oZSl7dCYmdC5yZXNwb25zZUludGVyY2VwdG9yJiYoZT10LnJlc3BvbnNlSW50ZXJjZXB0b3IuYXBwbHkoZSkpLHIoZSl9O2Uub24ucmVzcG9uc2U9ZnVuY3Rpb24oZSl7aShlKX0scy5pc09iamVjdChlKSYmcy5pc09iamVjdChlLmJvZHkpJiYoZS5ib2R5LnR5cGUmJiJmb3JtRGF0YSI9PT1lLmJvZHkudHlwZT8oZS5jb250ZW50VHlwZT0hMSxlLnByb2Nlc3NEYXRhPSExLGRlbGV0ZSBlLmhlYWRlcnNbIkNvbnRlbnQtVHlwZSJdKTplLmJvZHk9SlNPTi5zdHJpbmdpZnkoZS5ib2R5KSksbi5leGVjdXRlKGUpfSxjLnByb3RvdHlwZS5pc0ludGVybmV0RXhwbG9yZXI9ZnVuY3Rpb24oKXt2YXIgZT0hMTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLnVzZXJBZ2VudCl7dmFyIHQ9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO2lmKC0xIT09dC5pbmRleE9mKCJtc2llIikpe3ZhciBuPXBhcnNlSW50KHQuc3BsaXQoIm1zaWUiKVsxXSk7OD49biYmKGU9ITApfX1yZXR1cm4gZX0sbC5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihlKXt2YXIgdD1lLm9uLG49ZTtyZXR1cm4gZS50eXBlPWUubWV0aG9kLGUuY2FjaGU9ITEsZGVsZXRlIGUudXNlSlF1ZXJ5LGUuZGF0YT1lLmJvZHksZGVsZXRlIGUuYm9keSxlLmNvbXBsZXRlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgaT17fSxhPWUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkuc3BsaXQoIlxuIikscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLnRyaW0oKTtpZigwIT09bC5sZW5ndGgpe3ZhciB1PWwuaW5kZXhPZigiOiIpO2lmKC0xIT09dSl7dmFyIGM9bC5zdWJzdHJpbmcoMCx1KS50cmltKCkscD1sLnN1YnN0cmluZyh1KzEpLnRyaW0oKTtpW2NdPXB9ZWxzZSBpW2xdPW51bGx9fXZhciBmPXt1cmw6bi51cmwsbWV0aG9kOm4ubWV0aG9kLHN0YXR1czplLnN0YXR1cyxzdGF0dXNUZXh0OmUuc3RhdHVzVGV4dCxkYXRhOmUucmVzcG9uc2VUZXh0LGhlYWRlcnM6aX07dHJ5e3ZhciBoPWUucmVzcG9uc2VKU09OfHxvLnNhZmVMb2FkKGUucmVzcG9uc2VUZXh0KTtmLm9iaj0ic3RyaW5nIj09dHlwZW9mIGg/e306aH1jYXRjaChkKXtyLmxvZygidW5hYmxlIHRvIHBhcnNlIEpTT04vWUFNTCBjb250ZW50Iil9aWYoZi5vYmo9Zi5vYmp8fG51bGwsZS5zdGF0dXM+PTIwMCYmZS5zdGF0dXM8MzAwKXQucmVzcG9uc2UoZik7ZWxzZXtpZighKDA9PT1lLnN0YXR1c3x8ZS5zdGF0dXM+PTQwMCYmZS5zdGF0dXM8NTk5KSlyZXR1cm4gdC5yZXNwb25zZShmKTt0LmVycm9yKGYpfX0saS5zdXBwb3J0LmNvcnM9ITAsaS5hamF4KGUpfSx1LnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWV0aG9kLnRvTG93ZXJDYXNlKCk7ImRlbGV0ZSI9PT10JiYodD0iZGVsIik7dmFyIG4saT1lLmhlYWRlcnN8fHt9LHM9YVt0XShlLnVybCk7Zm9yKG4gaW4gaSlzLnNldChuLGlbbl0pO2UuYm9keSYmcy5zZW5kKGUuYm9keSksImZ1bmN0aW9uIj09dHlwZW9mIHMuYnVmZmVyJiZzLmJ1ZmZlcigpLHMuZW5kKGZ1bmN0aW9uKHQsbil7bj1ufHx7c3RhdHVzOjAsaGVhZGVyczp7ZXJyb3I6Im5vIHJlc3BvbnNlIGZyb20gc2VydmVyIn19O3ZhciBpLGE9e3VybDplLnVybCxtZXRob2Q6ZS5tZXRob2QsaGVhZGVyczpuLmhlYWRlcnN9O2lmKCF0JiZuLmVycm9yJiYodD1uLmVycm9yKSx0JiZlLm9uJiZlLm9uLmVycm9yKWEub2JqPXQsYS5zdGF0dXM9bj9uLnN0YXR1czo1MDAsYS5zdGF0dXNUZXh0PW4/bi50ZXh0OnQubWVzc2FnZSxpPWUub24uZXJyb3I7ZWxzZSBpZihuJiZlLm9uJiZlLm9uLnJlc3BvbnNlKXt2YXIgcztpZihuLmJvZHkmJk9iamVjdC5rZXlzKG4uYm9keSkubGVuZ3RoPjApcz1uLmJvZHk7ZWxzZSB0cnl7cz1vLnNhZmVMb2FkKG4udGV4dCkscz0ic3RyaW5nIj09dHlwZW9mIHM/bnVsbDpzfWNhdGNoKGwpe3IubG9nKCJjYW5ub3QgcGFyc2UgSlNPTi9ZQU1MIGNvbnRlbnQiKX1hLm9iaj1zfHxudWxsLGEuc3RhdHVzPW4uc3RhdHVzLGEuc3RhdHVzVGV4dD1uLnRleHQsaT1lLm9uLnJlc3BvbnNlfWEuZGF0YT1hLnN0YXR1c1RleHQsaSYmaShhKX0pfX0seyIuL2hlbHBlcnMiOjQsanF1ZXJ5OjIwLCJqcy15YW1sIjoyMSwibG9kYXNoLWNvbXBhdC9sYW5nL2lzT2JqZWN0IjoxNDcsc3VwZXJhZ2VudDoxNjB9XSw2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vaHR0cCIpLGk9e2lzT2JqZWN0OmUoImxvZGFzaC1jb21wYXQvbGFuZy9pc09iamVjdCIpLGlzQXJyYXk6ZSgibG9kYXNoLWNvbXBhdC9sYW5nL2lzQXJyYXkiKX0sYT10LmV4cG9ydHM9ZnVuY3Rpb24oKXt9O2EucHJvdG90eXBlLnByb2Nlc3NBbGxPZj1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBhLG8sczt0WyJ4LXJlc29sdmVkLWZyb20iXT1bIiMvZGVmaW5pdGlvbnMvIitlXTt2YXIgbD10LmFsbE9mO2ZvcihsLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS4kcmVmJiZ0LiRyZWY/MDplLiRyZWY/LTE6MX0pLGE9MDthPGwubGVuZ3RoO2ErKylzPWxbYV0sbz0iL2RlZmluaXRpb25zLyIrZSsiL2FsbE9mIix0aGlzLnJlc29sdmVJbmxpbmUobnVsbCxpLHMsbixyLG8pfSxhLnByb3RvdHlwZS5yZXNvbHZlPWZ1bmN0aW9uKGUsdCxuLGEpe3ZhciBvLHMsbD10LHU9bixjPWE7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJihsPW51bGwsdT10LGM9bik7dmFyIHA9bDt0aGlzLnNjb3BlPWN8fHRoaXMsdGhpcy5pdGVyYXRpb249dGhpcy5pdGVyYXRpb258fDA7dmFyIGYsaCxkLG0sZz0wLHk9e30sdj17fSxiPVtdO2ZvcihmIGluIGUuZGVmaW5pdGlvbnMpe3ZhciB3PWUuZGVmaW5pdGlvbnNbZl07Zm9yKG0gaW4gdy5wcm9wZXJ0aWVzKWQ9dy5wcm9wZXJ0aWVzW21dLGkuaXNBcnJheShkLmFsbE9mKT90aGlzLnByb2Nlc3NBbGxPZihmLGQsYix2LGUpOnRoaXMucmVzb2x2ZVRvKGwsZCxiLCIvZGVmaW5pdGlvbnMiKTt3LmFsbE9mJiZ0aGlzLnByb2Nlc3NBbGxPZihmLHcsYix2LGUpfWZvcihmIGluIGUucGF0aHMpe3ZhciB4LFMsQTtoPWUucGF0aHNbZl07Zm9yKHggaW4gaClpZigiJHJlZiI9PT14KW89Ii9wYXRocyIrZix0aGlzLnJlc29sdmVJbmxpbmUobCxlLGgsYix2LG8pO2Vsc2V7Uz1oW3hdO3ZhciBDPVMucGFyYW1ldGVycztmb3IocyBpbiBDKXt2YXIgRT1DW3NdO289Ii9wYXRocyIrZisiLyIreCsiL3BhcmFtZXRlcnMiLCJib2R5Ij09PUVbImluIl0mJkUuc2NoZW1hJiZ0aGlzLnJlc29sdmVUbyhsLEUuc2NoZW1hLGIsbyksRS4kcmVmJiZ0aGlzLnJlc29sdmVJbmxpbmUobCxlLEUsYix2LEUuJHJlZil9Zm9yKEEgaW4gUy5yZXNwb25zZXMpe3ZhciBrPVMucmVzcG9uc2VzW0FdO289Ii9wYXRocyIrZisiLyIreCsiL3Jlc3BvbnNlcy8iK0EsaS5pc09iamVjdChrKSYmKGsuJHJlZiYmdGhpcy5yZXNvbHZlSW5saW5lKGwsZSxrLGIsdixvKSxrLnNjaGVtYSYmdGhpcy5yZXNvbHZlVG8obCxrLnNjaGVtYSxiLG8pKX19fXZhciBPLGo9MCxUPVtdLEk9Yjtmb3Iocz0wO3M8SS5sZW5ndGg7cysrKXt2YXIgXz1JW3NdO2lmKGw9PT1fLnJvb3Qpe2lmKCJyZWYiPT09Xy5yZXNvbHZlQXMpe3ZhciBELEw9KChfLnJvb3R8fCIiKSsiLyIrXy5rZXkpLnNwbGl0KCIvIiksUD1bXSxOPSIiO2lmKF8ua2V5LmluZGV4T2YoIi4uLyIpPj0wKXtmb3IodmFyICQ9MDskPEwubGVuZ3RoOyQrKykiLi4iPT09TFskXT9QPVAuc2xpY2UoMCxQLmxlbmd0aC0xKTpQLnB1c2goTFskXSk7Zm9yKEQ9MDtEPFAubGVuZ3RoO0QrKylEPjAmJihOKz0iLyIpLE4rPVBbRF07Xy5yb290PU4sVC5wdXNoKF8pfWVsc2UgaWYoTz1fLmtleS5zcGxpdCgiIyIpLDI9PT1PLmxlbmd0aCl7KDA9PT1PWzBdLmluZGV4T2YoImh0dHA6Ly8iKXx8MD09PU9bMF0uaW5kZXhPZigiaHR0cHM6Ly8iKSkmJihfLnJvb3Q9T1swXSksbz1PWzFdLnNwbGl0KCIvIik7dmFyIE0sUj1lO2ZvcihEPTA7RDxvLmxlbmd0aDtEKyspe3ZhciBGPW9bRF07aWYoIiIhPT1GKXtpZihSPVJbRl0sInVuZGVmaW5lZCI9PXR5cGVvZiBSKXtNPW51bGw7YnJlYWt9TT1SfX1udWxsPT09TSYmVC5wdXNoKF8pfX1lbHNlIGlmKCJpbmxpbmUiPT09Xy5yZXNvbHZlQXMpe2lmKF8ua2V5JiYtMT09PV8ua2V5LmluZGV4T2YoIiMiKSYmIi8iIT09Xy5rZXkuY2hhckF0KDApKXtmb3IoTz1fLnJvb3Quc3BsaXQoIi8iKSxvPSIiLHM9MDtzPE8ubGVuZ3RoLTE7cysrKW8rPU9bc10rIi8iO28rPV8ua2V5LF8ucm9vdD1vLF8ubG9jYXRpb249IiJ9VC5wdXNoKF8pfX1lbHNlIFQucHVzaChfKX1qPVQubGVuZ3RoO2Zvcih2YXIgVT0wO1U8VC5sZW5ndGg7VSsrKSFmdW5jdGlvbih0LG4pe2lmKG51bGw9PT10LnJvb3R8fHQucm9vdD09PWwpbi5yZXNvbHZlSXRlbShlLHAsYix5LHYsdCksZys9MSxnPT09aiYmbi5maW5pc2goZSxsLGIseSx2LHUpO2Vsc2V7dmFyIGk9e3VzZUpRdWVyeTohMSx1cmw6dC5yb290LG1ldGhvZDoiZ2V0IixoZWFkZXJzOnthY2NlcHQ6bi5zY29wZS5zd2FnZ2VyUmVxdWVzdEhlYWRlcnN8fCJhcHBsaWNhdGlvbi9qc29uIn0sb246e2Vycm9yOmZ1bmN0aW9uKCl7Zys9MSx2W3Qua2V5XT17cm9vdDp0LnJvb3QsbG9jYXRpb246dC5sb2NhdGlvbn0sZz09PWomJm4uZmluaXNoKGUscCxiLHksdix1KX0scmVzcG9uc2U6ZnVuY3Rpb24ocil7dmFyIGk9ci5vYmo7bi5yZXNvbHZlSXRlbShpLHQucm9vdCxiLHksdix0KSxnKz0xLGc9PT1qJiZuLmZpbmlzaChlLHAsYix5LHYsdSl9fX07YyYmYy5jbGllbnRBdXRob3JpemF0aW9ucyYmYy5jbGllbnRBdXRob3JpemF0aW9ucy5hcHBseShpKSwobmV3IHIpLmV4ZWN1dGUoaSl9fShUW1VdLHRoaXMpOzA9PT1PYmplY3Qua2V5cyhUKS5sZW5ndGgmJnRoaXMuZmluaXNoKGUscCxiLHksdix1KX0sYS5wcm90b3R5cGUucmVzb2x2ZUl0ZW09ZnVuY3Rpb24oZSx0LG4scixpLGEpe3ZhciBvPWEubG9jYXRpb24scz1lLGw9by5zcGxpdCgiLyIpO2lmKCIiIT09bylmb3IodmFyIHU9MDt1PGwubGVuZ3RoO3UrKyl7dmFyIGM9bFt1XTtpZigtMSE9PWMuaW5kZXhPZigifjEiKSYmKGM9bFt1XS5yZXBsYWNlKC9+MC9nLCJ+IikucmVwbGFjZSgvfjEvZywiLyIpLCIvIiE9PWMuY2hhckF0KDApJiYoYz0iLyIrYykpLCJ1bmRlZmluZWQiPT10eXBlb2Ygc3x8bnVsbD09PXMpYnJlYWs7aWYoIiI9PT1jJiZ1PT09bC5sZW5ndGgtMSYmbC5sZW5ndGg+MSl7cz1udWxsO2JyZWFrfWMubGVuZ3RoPjAmJihzPXNbY10pfXZhciBwPWEua2V5O2w9YS5rZXkuc3BsaXQoIi8iKTt2YXIgZj1sW2wubGVuZ3RoLTFdO2YuaW5kZXhPZigiIyIpPj0wJiYoZj1mLnNwbGl0KCIjIilbMV0pLG51bGwhPT1zJiYidW5kZWZpbmVkIiE9dHlwZW9mIHM/cltwXT17bmFtZTpmLG9iajpzLGtleTphLmtleSxyb290OmEucm9vdH06aVtwXT17cm9vdDphLnJvb3QsbG9jYXRpb246YS5sb2NhdGlvbn19LGEucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlLHQsbixyLGksYSl7dmFyIG87Zm9yKG8gaW4gbil7dmFyIHM9bltvXSxsPXMua2V5LHU9cltsXTtpZih1KWlmKGUuZGVmaW5pdGlvbnM9ZS5kZWZpbml0aW9uc3x8e30sInJlZiI9PT1zLnJlc29sdmVBcyl7Zm9yKGwgaW4gdS5vYmopdmFyIGM9dGhpcy5yZXRhaW5Sb290KHUub2JqW2xdLHMucm9vdCk7ZS5kZWZpbml0aW9uc1t1Lm5hbWVdPXUub2JqLHMub2JqLiRyZWY9IiMvZGVmaW5pdGlvbnMvIit1Lm5hbWV9ZWxzZSBpZigiaW5saW5lIj09PXMucmVzb2x2ZUFzKXt2YXIgcD1zLm9iajtwWyJ4LXJlc29sdmVkLWZyb20iXT1bcy5rZXldLGRlbGV0ZSBwLiRyZWY7Zm9yKGwgaW4gdS5vYmope3ZhciBjPXRoaXMucmV0YWluUm9vdCh1Lm9ialtsXSxzLnJvb3QpO3BbbF09Y319fXZhciBmPXRoaXMuY291bnRVbnJlc29sdmVkUmVmcyhlKTswPT09Zi5sZW5ndGh8fHRoaXMuaXRlcmF0aW9uPjU/KHRoaXMucmVzb2x2ZUFsbE9mKGUuZGVmaW5pdGlvbnMpLGEuY2FsbCh0aGlzLnNjb3BlLGUsaSkpOih0aGlzLml0ZXJhdGlvbis9MSx0aGlzLnJlc29sdmUoZSx0LGEsdGhpcy5zY29wZSkpfSxhLnByb3RvdHlwZS5jb3VudFVucmVzb2x2ZWRSZWZzPWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5nZXRSZWZzKGUpLHI9W10saT1bXTtmb3IodCBpbiBuKTA9PT10LmluZGV4T2YoIiMiKT9yLnB1c2godC5zdWJzdHJpbmcoMSkpOmkucHVzaCh0KTtmb3IodD0wO3Q8ci5sZW5ndGg7dCsrKWZvcih2YXIgYT1yW3RdLG89YS5zcGxpdCgiLyIpLHM9ZSxsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciB1PW9bbF07aWYoIiIhPT11JiYocz1zW3VdLCJ1bmRlZmluZWQiPT10eXBlb2Ygcykpe2kucHVzaChhKTticmVha319cmV0dXJuIGkubGVuZ3RofSxhLnByb3RvdHlwZS5nZXRSZWZzPWZ1bmN0aW9uKGUsdCl7dD10fHxlO3ZhciBuPXt9O2Zvcih2YXIgciBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkocikpe3ZhciBhPXRbcl07aWYoIiRyZWYiPT09ciYmInN0cmluZyI9PXR5cGVvZiBhKW5bYV09bnVsbDtlbHNlIGlmKGkuaXNPYmplY3QoYSkpe3ZhciBvPXRoaXMuZ2V0UmVmcyhhKTtmb3IodmFyIHMgaW4gbyluW3NdPW51bGx9fXJldHVybiBufSxhLnByb3RvdHlwZS5yZXRhaW5Sb290PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpe3ZhciByPWVbbl07IiRyZWYiPT09biYmInN0cmluZyI9PXR5cGVvZiByPzAhPT1yLmluZGV4T2YoImh0dHA6Ly8iKSYmMCE9PXIuaW5kZXhPZigiaHR0cHM6Ly8iKSYmKDAhPT1yLmluZGV4T2YoIiMiKSYmKHI9IiMiK3IpLHI9KHR8fCIiKStyLGVbbl09cik6aS5pc09iamVjdChyKSYmdGhpcy5yZXRhaW5Sb290KHIsdCl9cmV0dXJuIGV9LGEucHJvdG90eXBlLnJlc29sdmVJbmxpbmU9ZnVuY3Rpb24oZSx0LG4scixpLGEpe3ZhciBvLHMsbCx1LGM9bi4kcmVmLHA9bi4kcmVmLGY9ITE7aWYocCl7aWYoMD09PXAuaW5kZXhPZigiLi4vIikpe2ZvcihzPXAuc3BsaXQoIi4uLyIpLGw9ZS5zcGxpdCgiLyIpLHA9IiIsbz0wO288cy5sZW5ndGg7bysrKSIiPT09c1tvXT9sPWwuc2xpY2UoMCxsLmxlbmd0aC0xKTpwKz1zW29dO2ZvcihlPSIiLG89MDtvPGwubGVuZ3RoLTE7bysrKW8+MCYmKGUrPSIvIiksZSs9bFtvXTtmPSEwfWlmKHAuaW5kZXhPZigiIyIpPj0wKWlmKDA9PT1wLmluZGV4T2YoIi8iKSl1PXAuc3BsaXQoIiMiKSxzPWUuc3BsaXQoIi8vIiksbD1zWzFdLnNwbGl0KCIvIiksZT1zWzBdKyIvLyIrbFswXSt1WzBdLGE9dVsxXTtlbHNle2lmKHU9cC5zcGxpdCgiIyIpLCIiIT09dVswXSl7aWYobD1lLnNwbGl0KCIvIiksbD1sLnNsaWNlKDAsbC5sZW5ndGgtMSksIWYpe2U9IiI7Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspaD4wJiYoZSs9Ii8iKSxlKz1sW2hdfWUrPSIvIitwLnNwbGl0KCIjIilbMF19YT11WzFdfTA9PT1wLmluZGV4T2YoImh0dHAiKT8ocC5pbmRleE9mKCIjIik+PTA/KGU9cC5zcGxpdCgiIyIpWzBdLGE9cC5zcGxpdCgiIyIpWzFdKTooZT1wLGE9IiIpLHIucHVzaCh7b2JqOm4scmVzb2x2ZUFzOiJpbmxpbmUiLHJvb3Q6ZSxrZXk6Yyxsb2NhdGlvbjphfSkpOjA9PT1wLmluZGV4T2YoIiMiKT8oYT1wLnNwbGl0KCIjIilbMV0sci5wdXNoKHtvYmo6bixyZXNvbHZlQXM6ImlubGluZSIscm9vdDplLGtleTpjLGxvY2F0aW9uOmF9KSk6ci5wdXNoKHtvYmo6bixyZXNvbHZlQXM6ImlubGluZSIscm9vdDplLGtleTpjLGxvY2F0aW9uOmF9KX1lbHNlImFycmF5Ij09PW4udHlwZSYmdGhpcy5yZXNvbHZlVG8oZSxuLml0ZW1zLHIsYSl9LGEucHJvdG90eXBlLnJlc29sdmVUbz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhLG89dC4kcmVmLHM9ZTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG8pe2lmKG8uaW5kZXhPZigiIyIpPj0wKXt2YXIgbD1vLnNwbGl0KCIjIik7aWYobFswXSYmMD09PW8uaW5kZXhPZigiLyIpKTtlbHNlIGlmKGxbMF0mJjA9PT1sWzBdLmluZGV4T2YoImh0dHAiKSlzPWxbMF0sbz1sWzFdO2Vsc2UgaWYobFswXSYmbFswXS5sZW5ndGg+MCl7Zm9yKGk9ZS5zcGxpdCgiLyIpLHM9IiIsYT0wO2E8aS5sZW5ndGgtMTthKyspcys9aVthXSsiLyI7cys9bFswXX1yPWxbMV19ZWxzZSBpZigwPT09by5pbmRleE9mKCJodHRwOi8vIil8fDA9PT1vLmluZGV4T2YoImh0dHBzOi8vIikpcz1vLHI9IiI7ZWxzZXtmb3IoaT1lLnNwbGl0KCIvIikscz0iIixhPTA7YTxpLmxlbmd0aC0xO2ErKylzKz1pW2FdKyIvIjtzKz1vLHI9IiJ9bi5wdXNoKHtvYmo6dCxyZXNvbHZlQXM6InJlZiIscm9vdDpzLGtleTpvLGxvY2F0aW9uOnJ9KX1lbHNlIGlmKCJhcnJheSI9PT10LnR5cGUpe3ZhciB1PXQuaXRlbXM7dGhpcy5yZXNvbHZlVG8oZSx1LG4scil9fSxhLnByb3RvdHlwZS5yZXNvbHZlQWxsT2Y9ZnVuY3Rpb24oZSx0LG4pe249bnx8MCx0PXR8fGU7dmFyIHI7Zm9yKHZhciBhIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIG89dFthXTtpZihudWxsPT09byl0aHJvdyBuZXcgVHlwZUVycm9yKCJTd2FnZ2VyIDIuMCBkb2VzIG5vdCBzdXBwb3J0IG51bGwgdHlwZXMgKCIrdCsiKS4gIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1zcGVjL2lzc3Vlcy8yMjkuIik7aWYoIm9iamVjdCI9PXR5cGVvZiBvJiZ0aGlzLnJlc29sdmVBbGxPZihlLG8sbisxKSxvJiYidW5kZWZpbmVkIiE9dHlwZW9mIG8uYWxsT2Ype3ZhciBzPW8uYWxsT2Y7aWYoaS5pc0FycmF5KHMpKXt2YXIgbD17fTtsWyJ4LWNvbXBvc2VkIl09ITAsInVuZGVmaW5lZCIhPXR5cGVvZiBvWyJ4LXJlc29sdmVkLWZyb20iXSYmKGxbIngtcmVzb2x2ZWQtZnJvbSJdPW9bIngtcmVzb2x2ZWQtZnJvbSJdKSxsLnByb3BlcnRpZXM9e30sby5leGFtcGxlJiYobC5leGFtcGxlPW8uZXhhbXBsZSk7Zm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBjPXNbdV0scD0ic2VsZiI7InVuZGVmaW5lZCIhPXR5cGVvZiBjWyJ4LXJlc29sdmVkLWZyb20iXSYmKHA9Y1sieC1yZXNvbHZlZC1mcm9tIl1bMF0pO2Zvcih2YXIgZiBpbiBjKWlmKGwuaGFzT3duUHJvcGVydHkoZikpaWYoInByb3BlcnRpZXMiPT09Zil7dmFyIGg9Y1tmXTtmb3IociBpbiBoKXtsLnByb3BlcnRpZXNbcl09SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShoW3JdKSk7dmFyIGQ9aFtyXVsieC1yZXNvbHZlZC1mcm9tIl07KCJ1bmRlZmluZWQiPT10eXBlb2YgZHx8InNlbGYiPT09ZCkmJihkPXApLGwucHJvcGVydGllc1tyXVsieC1yZXNvbHZlZC1mcm9tIl09ZH19ZWxzZSBpZigicmVxdWlyZWQiPT09Zil7Zm9yKHZhciBtPWwucmVxdWlyZWQuY29uY2F0KGNbZl0pLGc9MDtnPG0ubGVuZ3RoOysrZylmb3IodmFyIHk9ZysxO3k8bS5sZW5ndGg7Kyt5KW1bZ109PT1tW3ldJiZtLnNwbGljZSh5LS0sMSk7bC5yZXF1aXJlZD1tfWVsc2UieC1yZXNvbHZlZC1mcm9tIj09PWYmJmxbIngtcmVzb2x2ZWQtZnJvbSJdLnB1c2gocCk7ZWxzZSBpZihsW2ZdPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY1tmXSkpLCJwcm9wZXJ0aWVzIj09PWYpZm9yKHIgaW4gbFtmXSlsW2ZdW3JdWyJ4LXJlc29sdmVkLWZyb20iXT1wfXRbYV09bH19aS5pc09iamVjdChvKSYmdGhpcy5yZXNvbHZlQWxsT2YoZSxvLG4rMSl9fX0seyIuL2h0dHAiOjUsImxvZGFzaC1jb21wYXQvbGFuZy9pc0FycmF5IjoxNDMsImxvZGFzaC1jb21wYXQvbGFuZy9pc09iamVjdCI6MTQ3fV0sNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuJzx0cj48dGQgY2xhc3M9Im9wdGlvbk5hbWUiPicrZSsiOjwvdGQ+PHRkPiIrdCsiPC90ZD48L3RyPiJ9ZnVuY3Rpb24gaShlLHQpe3ZhciBuO3JldHVybiJpbnRlZ2VyIj09PWUmJiJpbnQzMiI9PT10P249ImludGVnZXIiOiJpbnRlZ2VyIj09PWUmJiJpbnQ2NCI9PT10P249ImxvbmciOiJpbnRlZ2VyIj09PWUmJiJ1bmRlZmluZWQiPT10eXBlb2YgdD9uPSJsb25nIjoic3RyaW5nIj09PWUmJiJkYXRlLXRpbWUiPT09dD9uPSJkYXRlLXRpbWUiOiJzdHJpbmciPT09ZSYmImRhdGUiPT09dD9uPSJkYXRlIjoibnVtYmVyIj09PWUmJiJmbG9hdCI9PT10P249ImZsb2F0IjoibnVtYmVyIj09PWUmJiJkb3VibGUiPT09dD9uPSJkb3VibGUiOiJudW1iZXIiPT09ZSYmInVuZGVmaW5lZCI9PXR5cGVvZiB0P249ImRvdWJsZSI6ImJvb2xlYW4iPT09ZT9uPSJib29sZWFuIjoic3RyaW5nIj09PWUmJihuPSJzdHJpbmciKSxufWZ1bmN0aW9uIGEoZSx0KXt2YXIgbj0iIjtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGUuJHJlZj9uKz1sLnNpbXBsZVJlZihlLiRyZWYpOiJ1bmRlZmluZWQiPT10eXBlb2YgZS50eXBlP24rPSJvYmplY3QiOiJhcnJheSI9PT1lLnR5cGU/dD9uKz1hKGUuaXRlbXN8fGUuJHJlZnx8e30pOihuKz0iQXJyYXlbIiwKbis9YShlLml0ZW1zfHxlLiRyZWZ8fHt9KSxuKz0iXSIpOm4rPSJpbnRlZ2VyIj09PWUudHlwZSYmImludDMyIj09PWUuZm9ybWF0PyJpbnRlZ2VyIjoiaW50ZWdlciI9PT1lLnR5cGUmJiJpbnQ2NCI9PT1lLmZvcm1hdD8ibG9uZyI6ImludGVnZXIiPT09ZS50eXBlJiYidW5kZWZpbmVkIj09dHlwZW9mIGUuZm9ybWF0PyJsb25nIjoic3RyaW5nIj09PWUudHlwZSYmImRhdGUtdGltZSI9PT1lLmZvcm1hdD8iZGF0ZS10aW1lIjoic3RyaW5nIj09PWUudHlwZSYmImRhdGUiPT09ZS5mb3JtYXQ/ImRhdGUiOiJzdHJpbmciPT09ZS50eXBlJiYidW5kZWZpbmVkIj09dHlwZW9mIGUuZm9ybWF0PyJzdHJpbmciOiJudW1iZXIiPT09ZS50eXBlJiYiZmxvYXQiPT09ZS5mb3JtYXQ/ImZsb2F0IjoibnVtYmVyIj09PWUudHlwZSYmImRvdWJsZSI9PT1lLmZvcm1hdD8iZG91YmxlIjoibnVtYmVyIj09PWUudHlwZSYmInVuZGVmaW5lZCI9PXR5cGVvZiBlLmZvcm1hdD8iZG91YmxlIjoiYm9vbGVhbiI9PT1lLnR5cGU/ImJvb2xlYW4iOmUuJHJlZj9sLnNpbXBsZVJlZihlLiRyZWYpOmUudHlwZSxufWZ1bmN0aW9uIG8oZSx0LG4scil7ZT1sLnJlc29sdmVTY2hlbWEoZSksImZ1bmN0aW9uIiE9dHlwZW9mIHImJihyPWZ1bmN0aW9uKGUpe3JldHVybihlfHx7fSlbImRlZmF1bHQiXX0pLG49bnx8e307dmFyIGksYSxzPWUudHlwZXx8Im9iamVjdCIsYz1lLmZvcm1hdDtyZXR1cm4gdS5pc1VuZGVmaW5lZChlLmV4YW1wbGUpP3UuaXNVbmRlZmluZWQoZS5pdGVtcykmJnUuaXNBcnJheShlWyJlbnVtIl0pJiYoYT1lWyJlbnVtIl1bMF0pOmE9ZS5leGFtcGxlLHUuaXNVbmRlZmluZWQoYSkmJihlLiRyZWY/KGk9dFtsLnNpbXBsZVJlZihlLiRyZWYpXSx1LmlzVW5kZWZpbmVkKGkpfHwodS5pc1VuZGVmaW5lZChuW2kubmFtZV0pPyhuW2kubmFtZV09aSxhPW8oaS5kZWZpbml0aW9uLHQsbixyKSxkZWxldGUgbltpLm5hbWVdKTphPSJhcnJheSI9PT1pLnR5cGU/W106e30pKTp1LmlzVW5kZWZpbmVkKGVbImRlZmF1bHQiXSk/InN0cmluZyI9PT1zP2E9ImRhdGUtdGltZSI9PT1jPyhuZXcgRGF0ZSkudG9JU09TdHJpbmcoKToiZGF0ZSI9PT1jPyhuZXcgRGF0ZSkudG9JU09TdHJpbmcoKS5zcGxpdCgiVCIpWzBdOiJzdHJpbmciOiJpbnRlZ2VyIj09PXM/YT0wOiJudW1iZXIiPT09cz9hPTA6ImJvb2xlYW4iPT09cz9hPSEwOiJvYmplY3QiPT09cz8oYT17fSx1LmZvckVhY2goZS5wcm9wZXJ0aWVzLGZ1bmN0aW9uKGUsaSl7dmFyIHM9dS5jbG9uZURlZXAoZSk7c1siZGVmYXVsdCJdPXIoZSksYVtpXT1vKHMsdCxuLHIpfSkpOiJhcnJheSI9PT1zJiYoYT1bXSx1LmlzQXJyYXkoZS5pdGVtcyk/dS5mb3JFYWNoKGUuaXRlbXMsZnVuY3Rpb24oZSl7YS5wdXNoKG8oZSx0LG4scikpfSk6dS5pc1BsYWluT2JqZWN0KGUuaXRlbXMpP2EucHVzaChvKGUuaXRlbXMsdCxuLHIpKTp1LmlzVW5kZWZpbmVkKGUuaXRlbXMpP2EucHVzaCh7fSk6bC5sb2coIkFycmF5IHR5cGUncyAnaXRlbXMnIHByb3BlcnR5IGlzIG5vdCBhbiBhcnJheSBvciBhbiBvYmplY3QsIGNhbm5vdCBwcm9jZXNzIikpOmE9ZVsiZGVmYXVsdCJdKSxhfWZ1bmN0aW9uIHMoZSx0LG4saSl7ZnVuY3Rpb24gYShlLHQscil7dmFyIGksYT10O3JldHVybiBlLiRyZWY/KGE9ZS50aXRsZXx8bC5zaW1wbGVSZWYoZS4kcmVmKSxpPW5bYV0pOnUuaXNVbmRlZmluZWQodCkmJihhPWUudGl0bGV8fCJJbmxpbmUgTW9kZWwgIisgKyttLGk9e2RlZmluaXRpb246ZX0pLHIhPT0hMCYmKGhbYV09dS5pc1VuZGVmaW5lZChpKT97fTppLmRlZmluaXRpb24pLGF9ZnVuY3Rpb24gbyhlKXt2YXIgdD0nPHNwYW4gY2xhc3M9InByb3BUeXBlIj4nLG49ZS50eXBlfHwib2JqZWN0IjtyZXR1cm4gZS4kcmVmP3QrPWEoZSxsLnNpbXBsZVJlZihlLiRyZWYpKToib2JqZWN0Ij09PW4/dCs9dS5pc1VuZGVmaW5lZChlLnByb3BlcnRpZXMpPyJvYmplY3QiOmEoZSk6ImFycmF5Ij09PW4/KHQrPSJBcnJheVsiLHUuaXNBcnJheShlLml0ZW1zKT90Kz11Lm1hcChlLml0ZW1zLGEpLmpvaW4oIiwiKTp1LmlzUGxhaW5PYmplY3QoZS5pdGVtcyk/dCs9dS5pc1VuZGVmaW5lZChlLml0ZW1zLiRyZWYpP3UuaXNVbmRlZmluZWQoZS5pdGVtcy50eXBlKXx8LTEhPT11LmluZGV4T2YoWyJhcnJheSIsIm9iamVjdCJdLGUuaXRlbXMudHlwZSk/YShlLml0ZW1zKTplLml0ZW1zLnR5cGU6YShlLml0ZW1zLGwuc2ltcGxlUmVmKGUuaXRlbXMuJHJlZikpOihsLmxvZygiQXJyYXkgdHlwZSdzICdpdGVtcycgc2NoZW1hIGlzIG5vdCBhbiBhcnJheSBvciBhbiBvYmplY3QsIGNhbm5vdCBwcm9jZXNzIiksdCs9Im9iamVjdCIpLHQrPSJdIik6dCs9ZS50eXBlLHQrPSI8L3NwYW4+In1mdW5jdGlvbiBzKGUsdCl7dmFyIG49IiIsaT1lLnR5cGV8fCJvYmplY3QiLGE9ImFycmF5Ij09PWk7c3dpdGNoKGEmJihpPXUuaXNQbGFpbk9iamVjdChlLml0ZW1zKSYmIXUuaXNVbmRlZmluZWQoZS5pdGVtcy50eXBlKT9lLml0ZW1zLnR5cGU6Im9iamVjdCIpLHUuaXNVbmRlZmluZWQoZVsiZGVmYXVsdCJdKXx8KG4rPXIoIkRlZmF1bHQiLGVbImRlZmF1bHQiXSkpLGkpe2Nhc2Uic3RyaW5nIjplLm1pbkxlbmd0aCYmKG4rPXIoIk1pbi4gTGVuZ3RoIixlLm1pbkxlbmd0aCkpLGUubWF4TGVuZ3RoJiYobis9cigiTWF4LiBMZW5ndGgiLGUubWF4TGVuZ3RoKSksZS5wYXR0ZXJuJiYobis9cigiUmVnLiBFeHAuIixlLnBhdHRlcm4pKTticmVhaztjYXNlImludGVnZXIiOmNhc2UibnVtYmVyIjplLm1pbmltdW0mJihuKz1yKCJNaW4uIFZhbHVlIixlLm1pbmltdW0pKSxlLmV4Y2x1c2l2ZU1pbmltdW0mJihuKz1yKCJFeGNsdXNpdmUgTWluLiIsInRydWUiKSksZS5tYXhpbXVtJiYobis9cigiTWF4LiBWYWx1ZSIsZS5tYXhpbXVtKSksZS5leGNsdXNpdmVNYXhpbXVtJiYobis9cigiRXhjbHVzaXZlIE1heC4iLCJ0cnVlIikpLGUubXVsdGlwbGVPZiYmKG4rPXIoIk11bHRpcGxlIE9mIixlLm11bHRpcGxlT2YpKX1pZihhJiYoZS5taW5JdGVtcyYmKG4rPXIoIk1pbi4gSXRlbXMiLGUubWluSXRlbXMpKSxlLm1heEl0ZW1zJiYobis9cigiTWF4LiBJdGVtcyIsZS5tYXhJdGVtcykpLGUudW5pcXVlSXRlbXMmJihuKz1yKCJVbmlxdWUgSXRlbXMiLCJ0cnVlIikpLGUuY29sbGVjdGlvbkZvcm1hdCYmKG4rPXIoIkNvbGwuIEZvcm1hdCIsZS5jb2xsZWN0aW9uRm9ybWF0KSkpLHUuaXNVbmRlZmluZWQoZS5pdGVtcykmJnUuaXNBcnJheShlWyJlbnVtIl0pKXt2YXIgbztvPSJudW1iZXIiPT09aXx8ImludGVnZXIiPT09aT9lWyJlbnVtIl0uam9pbigiLCAiKTonIicrZVsiZW51bSJdLmpvaW4oJyIsICInKSsnIicsbis9cigiRW51bSIsbyl9cmV0dXJuIG4ubGVuZ3RoPjAmJih0PSc8c3BhbiBjbGFzcz0icHJvcFdyYXAiPicrdCsnPHRhYmxlIGNsYXNzPSJvcHRpb25zV3JhcHBlciI+PHRyPjx0aCBjb2xzcGFuPSIyIj4nK2krIjwvdGg+PC90cj4iK24rIjwvdGFibGU+PC9zcGFuPiIpLHR9ZnVuY3Rpb24gYyhlLHQpe3ZhciByPWUudHlwZXx8Im9iamVjdCIsYz0iYXJyYXkiPT09ZS50eXBlLGg9cCt0KyIgIisoYz8iWyI6InsiKStmO3JldHVybiB0JiZkLnB1c2godCksYz91LmlzQXJyYXkoZS5pdGVtcyk/aCs9IjxkaXY+Iit1Lm1hcChlLml0ZW1zLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZXx8Im9iamVjdCI7cmV0dXJuIHUuaXNVbmRlZmluZWQoZS4kcmVmKT91LmluZGV4T2YoWyJhcnJheSIsIm9iamVjdCJdLHQpPi0xPyJvYmplY3QiPT09dCYmdS5pc1VuZGVmaW5lZChlLnByb3BlcnRpZXMpPyJvYmplY3QiOmEoZSk6cyhlLHQpOmEoZSxsLnNpbXBsZVJlZihlLiRyZWYpKX0pLmpvaW4oIiw8L2Rpdj48ZGl2PiIpOnUuaXNQbGFpbk9iamVjdChlLml0ZW1zKT9oKz11LmlzVW5kZWZpbmVkKGUuaXRlbXMuJHJlZik/dS5pbmRleE9mKFsiYXJyYXkiLCJvYmplY3QiXSxlLml0ZW1zLnR5cGV8fCJvYmplY3QiKT4tMT8odS5pc1VuZGVmaW5lZChlLml0ZW1zLnR5cGUpfHwib2JqZWN0Ij09PWUuaXRlbXMudHlwZSkmJnUuaXNVbmRlZmluZWQoZS5pdGVtcy5wcm9wZXJ0aWVzKT8iPGRpdj5vYmplY3Q8L2Rpdj4iOiI8ZGl2PiIrYShlLml0ZW1zKSsiPC9kaXY+IjoiPGRpdj4iK3MoZS5pdGVtcyxlLml0ZW1zLnR5cGUpKyI8L2Rpdj4iOiI8ZGl2PiIrYShlLml0ZW1zLGwuc2ltcGxlUmVmKGUuaXRlbXMuJHJlZikpKyI8L2Rpdj4iOihsLmxvZygiQXJyYXkgdHlwZSdzICdpdGVtcycgcHJvcGVydHkgaXMgbm90IGFuIGFycmF5IG9yIGFuIG9iamVjdCwgY2Fubm90IHByb2Nlc3MiKSxoKz0iPGRpdj5vYmplY3Q8L2Rpdj4iKTplLiRyZWY/aCs9IjxkaXY+IithKGUsdCkrIjwvZGl2PiI6Im9iamVjdCI9PT1yPyhoKz0iPGRpdj4iLHUuaXNQbGFpbk9iamVjdChlLnByb3BlcnRpZXMpJiYoaCs9dS5tYXAoZS5wcm9wZXJ0aWVzLGZ1bmN0aW9uKHQscil7dmFyIGEsYz11LmluZGV4T2YoZS5yZXF1aXJlZCxyKT49MCxwPXUuY2xvbmVEZWVwKHQpLGY9Yz8icmVxdWlyZWQiOiIiLGg9JzxzcGFuIGNsYXNzPSJwcm9wTmFtZSAnK2YrJyI+JytyKyI8L3NwYW4+ICgiO3JldHVybiBwWyJkZWZhdWx0Il09aShwKSxwPWwucmVzb2x2ZVNjaGVtYShwKSx1LmlzVW5kZWZpbmVkKHAuJHJlZil8fChhPW5bbC5zaW1wbGVSZWYocC4kcmVmKV0sdS5pc1VuZGVmaW5lZChhKXx8LTEhPT11LmluZGV4T2YoW3ZvaWQgMCwiYXJyYXkiLCJvYmplY3QiXSxhLmRlZmluaXRpb24udHlwZSl8fChwPWwucmVzb2x2ZVNjaGVtYShhLmRlZmluaXRpb24pKSksaCs9byhwKSxjfHwoaCs9JywgPHNwYW4gY2xhc3M9InByb3BPcHRLZXkiPm9wdGlvbmFsPC9zcGFuPicpLGgrPSIpIix1LmlzVW5kZWZpbmVkKHAuZGVzY3JpcHRpb24pfHwoaCs9JzogPHNwYW4gY2xhc3M9InByb3BEZXNjIj4nK3AuZGVzY3JpcHRpb24rIjwvc3Bhbj4iKSxwWyJlbnVtIl0mJihoKz0nID0gPHNwYW4gY2xhc3M9InByb3BWYWxzIj5bXCcnK3BbImVudW0iXS5qb2luKCInLCAnIikrIiddPC9zcGFuPiIpLHMocCxoKX0pLmpvaW4oIiw8L2Rpdj48ZGl2PiIpKSxoKz0iPC9kaXY+Iik6aCs9IjxkaXY+IitzKGUscikrIjwvZGl2PiIsaCtwKyhjPyJdIjoifSIpK2Z9dmFyIHA9JzxzcGFuIGNsYXNzPSJzdHJvbmciPicsZj0iPC9zcGFuPiI7aWYodS5pc09iamVjdChhcmd1bWVudHNbMF0pJiYoZT12b2lkIDAsdD1hcmd1bWVudHNbMF0sbj1hcmd1bWVudHNbMV0saT1hcmd1bWVudHNbMl0pLG49bnx8e30sdD1sLnJlc29sdmVTY2hlbWEodCksdS5pc0VtcHR5KHQpKXJldHVybiBwKyJFbXB0eSIrZjtpZigic3RyaW5nIj09dHlwZW9mIHQuJHJlZiYmKGU9bC5zaW1wbGVSZWYodC4kcmVmKSx0PW5bZV0sInVuZGVmaW5lZCI9PXR5cGVvZiB0KSlyZXR1cm4gcCtlKyIgaXMgbm90IGRlZmluZWQhIitmOyJzdHJpbmciIT10eXBlb2YgZSYmKGU9dC50aXRsZXx8IklubGluZSBNb2RlbCIpLHQuZGVmaW5pdGlvbiYmKHQ9dC5kZWZpbml0aW9uKSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmKGk9ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fHt9KVsiZGVmYXVsdCJdfSk7Zm9yKHZhciBoPXt9LGQ9W10sbT0wLGc9Yyh0LGUpO3Uua2V5cyhoKS5sZW5ndGg+MDspdS5mb3JFYWNoKGgsZnVuY3Rpb24oZSx0KXt2YXIgbj11LmluZGV4T2YoZCx0KT4tMTtkZWxldGUgaFt0XSxufHwoZC5wdXNoKHQpLGcrPSI8YnIgLz4iK2MoZSx0KSl9KTtyZXR1cm4gZ312YXIgbD1lKCIuL2hlbHBlcnMiKSx1PXtpc1BsYWluT2JqZWN0OmUoImxvZGFzaC1jb21wYXQvbGFuZy9pc1BsYWluT2JqZWN0IiksaXNVbmRlZmluZWQ6ZSgibG9kYXNoLWNvbXBhdC9sYW5nL2lzVW5kZWZpbmVkIiksaXNBcnJheTplKCJsb2Rhc2gtY29tcGF0L2xhbmcvaXNBcnJheSIpLGlzT2JqZWN0OmUoImxvZGFzaC1jb21wYXQvbGFuZy9pc09iamVjdCIpLGlzRW1wdHk6ZSgibG9kYXNoLWNvbXBhdC9sYW5nL2lzRW1wdHkiKSxtYXA6ZSgibG9kYXNoLWNvbXBhdC9jb2xsZWN0aW9uL21hcCIpLGluZGV4T2Y6ZSgibG9kYXNoLWNvbXBhdC9hcnJheS9pbmRleE9mIiksY2xvbmVEZWVwOmUoImxvZGFzaC1jb21wYXQvbGFuZy9jbG9uZURlZXAiKSxrZXlzOmUoImxvZGFzaC1jb21wYXQvb2JqZWN0L2tleXMiKSxmb3JFYWNoOmUoImxvZGFzaC1jb21wYXQvY29sbGVjdGlvbi9mb3JFYWNoIil9O3QuZXhwb3J0cy5vcHRpb25IdG1sPXIsdC5leHBvcnRzLnR5cGVGcm9tSnNvblNjaGVtYT1pLHQuZXhwb3J0cy5nZXRTdHJpbmdTaWduYXR1cmU9YSx0LmV4cG9ydHMuc2NoZW1hVG9IVE1MPXMsdC5leHBvcnRzLnNjaGVtYVRvSlNPTj1vfSx7Ii4vaGVscGVycyI6NCwibG9kYXNoLWNvbXBhdC9hcnJheS9pbmRleE9mIjo1MiwibG9kYXNoLWNvbXBhdC9jb2xsZWN0aW9uL2ZvckVhY2giOjU3LCJsb2Rhc2gtY29tcGF0L2NvbGxlY3Rpb24vbWFwIjo1OSwibG9kYXNoLWNvbXBhdC9sYW5nL2Nsb25lRGVlcCI6MTQxLCJsb2Rhc2gtY29tcGF0L2xhbmcvaXNBcnJheSI6MTQzLCJsb2Rhc2gtY29tcGF0L2xhbmcvaXNFbXB0eSI6MTQ0LCJsb2Rhc2gtY29tcGF0L2xhbmcvaXNPYmplY3QiOjE0NywibG9kYXNoLWNvbXBhdC9sYW5nL2lzUGxhaW5PYmplY3QiOjE0OCwibG9kYXNoLWNvbXBhdC9sYW5nL2lzVW5kZWZpbmVkIjoxNTEsImxvZGFzaC1jb21wYXQvb2JqZWN0L2tleXMiOjE1Mn1dLDg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi9odHRwIiksaT17aXNPYmplY3Q6ZSgibG9kYXNoLWNvbXBhdC9sYW5nL2lzT2JqZWN0Iil9LGE9dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5lcnJvcnM9W10sdGhpcy53YXJuaW5ncz1bXSx0aGlzLm1vZGVsTWFwPXt9fTthLnByb3RvdHlwZS5zZXREb2N1bWVudGF0aW9uTG9jYXRpb249ZnVuY3Rpb24oZSl7dGhpcy5kb2NMb2NhdGlvbj1lfSxhLnByb3RvdHlwZS5jb252ZXJ0PWZ1bmN0aW9uKGUsdCxuKXtpZighZXx8IUFycmF5LmlzQXJyYXkoZS5hcGlzKSlyZXR1cm4gdGhpcy5maW5pc2gobixudWxsKTt0aGlzLmNsaWVudEF1dGhvcml6YXRpb25zPXQ7dmFyIHI9e3N3YWdnZXI6IjIuMCJ9O3Iub3JpZ2luYWxWZXJzaW9uPWUuc3dhZ2dlclZlcnNpb24sdGhpcy5hcGlJbmZvKGUsciksdGhpcy5zZWN1cml0eURlZmluaXRpb25zKGUsciksZS5iYXNlUGF0aCYmdGhpcy5zZXREb2N1bWVudGF0aW9uTG9jYXRpb24oZS5iYXNlUGF0aCk7dmFyIGksYT0hMTtmb3IoaT0wO2k8ZS5hcGlzLmxlbmd0aDtpKyspe3ZhciBvPWUuYXBpc1tpXTtBcnJheS5pc0FycmF5KG8ub3BlcmF0aW9ucykmJihhPSEwKX1hPyh0aGlzLmRlY2xhcmF0aW9uKGUsciksdGhpcy5maW5pc2gobixyKSk6dGhpcy5yZXNvdXJjZUxpc3RpbmcoZSxyLG4pfSxhLnByb3RvdHlwZS5kZWNsYXJhdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuLHIsYSxvO2lmKGUuYXBpcyl7MD09PWUuYmFzZVBhdGguaW5kZXhPZigiaHR0cDovLyIpPyhhPWUuYmFzZVBhdGguc3Vic3RyaW5nKCJodHRwOi8vIi5sZW5ndGgpLG89YS5pbmRleE9mKCIvIiksbz4wPyh0Lmhvc3Q9YS5zdWJzdHJpbmcoMCxvKSx0LmJhc2VQYXRoPWEuc3Vic3RyaW5nKG8pKToodC5ob3N0PWEsdC5iYXNlUGF0aD0iLyIpKTowPT09ZS5iYXNlUGF0aC5pbmRleE9mKCJodHRwczovLyIpPyhhPWUuYmFzZVBhdGguc3Vic3RyaW5nKCJodHRwczovLyIubGVuZ3RoKSxvPWEuaW5kZXhPZigiLyIpLG8+MD8odC5ob3N0PWEuc3Vic3RyaW5nKDAsbyksdC5iYXNlUGF0aD1hLnN1YnN0cmluZyhvKSk6KHQuaG9zdD1hLHQuYmFzZVBhdGg9Ii8iKSk6dC5iYXNlUGF0aD1lLmJhc2VQYXRoO3ZhciBzO2lmKGUuYXV0aG9yaXphdGlvbnMmJihzPWUuYXV0aG9yaXphdGlvbnMpLGUuY29uc3VtZXMmJih0LmNvbnN1bWVzPWUuY29uc3VtZXMpLGUucHJvZHVjZXMmJih0LnByb2R1Y2VzPWUucHJvZHVjZXMpLGkuaXNPYmplY3QoZSkpZm9yKG4gaW4gZS5tb2RlbHMpe3ZhciBsPWUubW9kZWxzW25dLHU9bC5pZHx8bjt0aGlzLm1vZGVsTWFwW3VdPW59Zm9yKHI9MDtyPGUuYXBpcy5sZW5ndGg7cisrKXt2YXIgYz1lLmFwaXNbcl0scD1jLnBhdGgsZj1jLm9wZXJhdGlvbnM7dGhpcy5vcGVyYXRpb25zKHAsZS5yZXNvdXJjZVBhdGgsZixzLHQpfXZhciBoPWUubW9kZWxzfHx7fTt0aGlzLm1vZGVscyhoLHQpfX0sYS5wcm90b3R5cGUubW9kZWxzPWZ1bmN0aW9uKGUsdCl7aWYoaS5pc09iamVjdChlKSl7dmFyIG47dC5kZWZpbml0aW9ucz10LmRlZmluaXRpb25zfHx7fTtmb3IobiBpbiBlKXt2YXIgcixhPWVbbl0sbz1bXSxzPXtwcm9wZXJ0aWVzOnt9fTtmb3IociBpbiBhLnByb3BlcnRpZXMpe3ZhciBsPWEucHJvcGVydGllc1tyXSx1PXt9O3RoaXMuZGF0YVR5cGUobCx1KSxsLmRlc2NyaXB0aW9uJiYodS5kZXNjcmlwdGlvbj1sLmRlc2NyaXB0aW9uKSxsWyJlbnVtIl0mJih1WyJlbnVtIl09bFsiZW51bSJdKSwiYm9vbGVhbiI9PXR5cGVvZiBsLnJlcXVpcmVkJiZsLnJlcXVpcmVkPT09ITAmJm8ucHVzaChyKSwic3RyaW5nIj09dHlwZW9mIGwucmVxdWlyZWQmJiJ0cnVlIj09PWwucmVxdWlyZWQmJm8ucHVzaChyKSxzLnByb3BlcnRpZXNbcl09dX1vLmxlbmd0aD4wJiYoc1siZW51bSJdPW8pLHMucmVxdWlyZWQ9YS5yZXF1aXJlZCx0LmRlZmluaXRpb25zW25dPXN9fX0sYS5wcm90b3R5cGUuZXh0cmFjdFRhZz1mdW5jdGlvbihlKXt2YXIgdD1lfHwiZGVmYXVsdCI7cmV0dXJuKDA9PT10LmluZGV4T2YoImh0dHA6Iil8fDA9PT10LmluZGV4T2YoImh0dHBzOiIpKSYmKHQ9dC5zcGxpdChbIi8iXSksdD10W3QubGVuZ3RoLTFdLnN1YnN0cmluZygpKSx0LmVuZHNXaXRoKCIuanNvbiIpJiYodD10LnN1YnN0cmluZygwLHQubGVuZ3RoLSIuanNvbiIubGVuZ3RoKSksdC5yZXBsYWNlKCIvIiwiIil9LGEucHJvdG90eXBlLm9wZXJhdGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpKXtpZihBcnJheS5pc0FycmF5KG4pKXt2YXIgYTtpLnBhdGhzfHwoaS5wYXRocz17fSk7dmFyIG89aS5wYXRoc1tlXXx8e30scz10aGlzLmV4dHJhY3RUYWcodCk7aS50YWdzPWkudGFnc3x8W107dmFyIGw9ITE7Zm9yKGE9MDthPGkudGFncy5sZW5ndGg7YSsrKXt2YXIgdT1pLnRhZ3NbYV07dS5uYW1lPT09cyYmKGw9ITApfWZvcihsfHxpLnRhZ3MucHVzaCh7bmFtZTpzfSksYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgYz1uW2FdLHA9KGMubWV0aG9kfHxjLmh0dHBNZXRob2QpLnRvTG93ZXJDYXNlKCksZj17dGFnczpbc119LGg9Yy5hdXRob3JpemF0aW9ucztpZihoJiYwPT09T2JqZWN0LmtleXMoaCkubGVuZ3RoJiYoaD1yKSwidW5kZWZpbmVkIiE9dHlwZW9mIGgpe3ZhciBkO2Zvcih2YXIgbSBpbiBoKXtmLnNlY3VyaXR5PWYuc2VjdXJpdHl8fFtdO3ZhciBnPWhbbV07aWYoZyl7dmFyIHk9W107Zm9yKHZhciB2IGluIGcpeS5wdXNoKGdbdl0uc2NvcGUpO2Q9e30sZFttXT15LGYuc2VjdXJpdHkucHVzaChkKX1lbHNlIGQ9e30sZFttXT1bXSxmLnNlY3VyaXR5LnB1c2goZCl9fWMuY29uc3VtZXM/Zi5jb25zdW1lcz1jLmNvbnN1bWVzOmkuY29uc3VtZXMmJihmLmNvbnN1bWVzPWkuY29uc3VtZXMpLGMucHJvZHVjZXM/Zi5wcm9kdWNlcz1jLnByb2R1Y2VzOmkucHJvZHVjZXMmJihmLnByb2R1Y2VzPWkucHJvZHVjZXMpLGMuc3VtbWFyeSYmKGYuc3VtbWFyeT1jLnN1bW1hcnkpLGMubm90ZXMmJihmLmRlc2NyaXB0aW9uPWMubm90ZXMpLGMubmlja25hbWUmJihmLm9wZXJhdGlvbklkPWMubmlja25hbWUpLGMuZGVwcmVjYXRlZCYmKGYuZGVwcmVjYXRlZD1jLmRlcHJlY2F0ZWQpLHRoaXMuYXV0aG9yaXphdGlvbnMoaCxpKSx0aGlzLnBhcmFtZXRlcnMoZixjLnBhcmFtZXRlcnMsaSksdGhpcy5yZXNwb25zZU1lc3NhZ2VzKGYsYyxpKSxvW3BdPWZ9aS5wYXRoc1tlXT1vfX0sYS5wcm90b3R5cGUucmVzcG9uc2VNZXNzYWdlcz1mdW5jdGlvbihlLHQpe2lmKGkuaXNPYmplY3QodCkpe3ZhciBuPXt9O3RoaXMuZGF0YVR5cGUodCxuKSwhbi5zY2hlbWEmJm4udHlwZSYmKG49e3NjaGVtYTpufSksZS5yZXNwb25zZXM9ZS5yZXNwb25zZXN8fHt9O3ZhciByPSExO2lmKEFycmF5LmlzQXJyYXkodC5yZXNwb25zZU1lc3NhZ2VzKSl7dmFyIGEsbz10LnJlc3BvbnNlTWVzc2FnZXM7Zm9yKGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIHM9b1thXSxsPXtkZXNjcmlwdGlvbjpzLm1lc3NhZ2V9OzIwMD09PXMuY29kZSYmKHI9ITApLHMucmVzcG9uc2VNb2RlbCYmKGwuc2NoZW1hPXskcmVmOnMucmVzcG9uc2VNb2RlbH0pLGUucmVzcG9uc2VzWyIiK3MuY29kZV09bH19cj9lLnJlc3BvbnNlc1siZGVmYXVsdCJdPW46ZS5yZXNwb25zZXNbMjAwXT1ufX0sYS5wcm90b3R5cGUuYXV0aG9yaXphdGlvbnM9ZnVuY3Rpb24oZSl7IWkuaXNPYmplY3QoZSl9LGEucHJvdG90eXBlLnBhcmFtZXRlcnM9ZnVuY3Rpb24oZSx0KXtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbjtmb3Iobj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dLGk9e307aWYoaS5uYW1lPXIubmFtZSxpLmRlc2NyaXB0aW9uPXIuZGVzY3JpcHRpb24saS5yZXF1aXJlZD1yLnJlcXVpcmVkLGlbImluIl09ci5wYXJhbVR5cGUsImJvZHkiPT09aVsiaW4iXSYmKGkubmFtZT0iYm9keSIpLCJmb3JtIj09PWlbImluIl0mJihpWyJpbiJdPSJmb3JtRGF0YSIpLHJbImVudW0iXSYmKGlbImVudW0iXT1yWyJlbnVtIl0pLHIuYWxsb3dNdWx0aXBsZT09PSEwfHwidHJ1ZSI9PT1yLmFsbG93TXVsdGlwbGUpe3ZhciBhPXt9O2lmKHRoaXMuZGF0YVR5cGUocixhKSxpLnR5cGU9ImFycmF5IixpLml0ZW1zPWEsci5hbGxvd2FibGVWYWx1ZXMpe3ZhciBvPXIuYWxsb3dhYmxlVmFsdWVzOyJMSVNUIj09PW8udmFsdWVUeXBlJiYoaVsiZW51bSJdPW8udmFsdWVzKX19ZWxzZSB0aGlzLmRhdGFUeXBlKHIsaSk7InVuZGVmaW5lZCIhPXR5cGVvZiByLmRlZmF1bHRWYWx1ZSYmKGlbImRlZmF1bHQiXT1yLmRlZmF1bHRWYWx1ZSksZS5wYXJhbWV0ZXJzPWUucGFyYW1ldGVyc3x8W10sZS5wYXJhbWV0ZXJzLnB1c2goaSl9fX0sYS5wcm90b3R5cGUuZGF0YVR5cGU9ZnVuY3Rpb24oZSx0KXtpZihpLmlzT2JqZWN0KGUpKXtlLm1pbmltdW0mJih0Lm1pbmltdW09ZS5taW5pbXVtKSxlLm1heGltdW0mJih0Lm1heGltdW09ZS5tYXhpbXVtKSxlLmZvcm1hdCYmKHQuZm9ybWF0PWUuZm9ybWF0KSwidW5kZWZpbmVkIiE9dHlwZW9mIGUuZGVmYXVsdFZhbHVlJiYodFsiZGVmYXVsdCJdPWUuZGVmYXVsdFZhbHVlKTt2YXIgbj10aGlzLnRvSnNvblNjaGVtYShlKTtuJiYodD10fHx7fSxuLnR5cGUmJih0LnR5cGU9bi50eXBlKSxuLmZvcm1hdCYmKHQuZm9ybWF0PW4uZm9ybWF0KSxuLiRyZWYmJih0LnNjaGVtYT17JHJlZjpuLiRyZWZ9KSxuLml0ZW1zJiYodC5pdGVtcz1uLml0ZW1zKSl9fSxhLnByb3RvdHlwZS50b0pzb25TY2hlbWE9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIm9iamVjdCI7dmFyIHQ9ZS50eXBlfHxlLmRhdGFUeXBlfHxlLnJlc3BvbnNlQ2xhc3N8fCIiLG49dC50b0xvd2VyQ2FzZSgpLHI9KGUuZm9ybWF0fHwiIikudG9Mb3dlckNhc2UoKTtpZigwPT09bi5pbmRleE9mKCJsaXN0WyIpKXt2YXIgaT10LnN1YnN0cmluZyg1LHQubGVuZ3RoLTEpLGE9dGhpcy50b0pzb25TY2hlbWEoe3R5cGU6aX0pO3JldHVybnt0eXBlOiJhcnJheSIsaXRlbXM6YX19aWYoImludCI9PT1ufHwiaW50ZWdlciI9PT1uJiYiaW50MzIiPT09cilyZXR1cm57dHlwZToiaW50ZWdlciIsZm9ybWF0OiJpbnQzMiJ9O2lmKCJsb25nIj09PW58fCJpbnRlZ2VyIj09PW4mJiJpbnQ2NCI9PT1yKXJldHVybnt0eXBlOiJpbnRlZ2VyIixmb3JtYXQ6ImludDY0In07aWYoImludGVnZXIiPT09bilyZXR1cm57dHlwZToiaW50ZWdlciIsZm9ybWF0OiJpbnQ2NCJ9O2lmKCJmbG9hdCI9PT1ufHwibnVtYmVyIj09PW4mJiJmbG9hdCI9PT1yKXJldHVybnt0eXBlOiJudW1iZXIiLGZvcm1hdDoiZmxvYXQifTtpZigiZG91YmxlIj09PW58fCJudW1iZXIiPT09biYmImRvdWJsZSI9PT1yKXJldHVybnt0eXBlOiJudW1iZXIiLGZvcm1hdDoiZG91YmxlIn07aWYoInN0cmluZyI9PT1uJiYiZGF0ZS10aW1lIj09PXJ8fCJkYXRlIj09PW4pcmV0dXJue3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRlLXRpbWUifTtpZigic3RyaW5nIj09PW4pcmV0dXJue3R5cGU6InN0cmluZyJ9O2lmKCJmaWxlIj09PW4pcmV0dXJue3R5cGU6ImZpbGUifTtpZigiYm9vbGVhbiI9PT1uKXJldHVybnt0eXBlOiJib29sZWFuIn07aWYoImFycmF5Ij09PW58fCJsaXN0Ij09PW4pe2lmKGUuaXRlbXMpe3ZhciBvPXRoaXMudG9Kc29uU2NoZW1hKGUuaXRlbXMpO3JldHVybnt0eXBlOiJhcnJheSIsaXRlbXM6b319cmV0dXJue3R5cGU6ImFycmF5IixpdGVtczp7dHlwZToib2JqZWN0In19fXJldHVybiBlLiRyZWY/eyRyZWY6IiMvZGVmaW5pdGlvbnMvIit0aGlzLm1vZGVsTWFwW2UuJHJlZl18fGUuJHJlZn06InZvaWQiPT09bnx8IiI9PT1uP3t9OnskcmVmOiIjL2RlZmluaXRpb25zLyIrdGhpcy5tb2RlbE1hcFtlLnR5cGVdfHxlLnR5cGV9fSxhLnByb3RvdHlwZS5yZXNvdXJjZUxpc3Rpbmc9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLGE9MCxvPXRoaXMscz1lLmFwaXMubGVuZ3RoLGw9dDtmb3IoMD09PXMmJnRoaXMuZmluaXNoKG4sdCksaT0wO3M+aTtpKyspe3ZhciB1PWUuYXBpc1tpXSxjPXUucGF0aCxwPXRoaXMuZ2V0QWJzb2x1dGVQYXRoKGUuc3dhZ2dlclZlcnNpb24sdGhpcy5kb2NMb2NhdGlvbixjKTt1LmRlc2NyaXB0aW9uJiYodC50YWdzPXQudGFnc3x8W10sdC50YWdzLnB1c2goe25hbWU6dGhpcy5leHRyYWN0VGFnKHUucGF0aCksZGVzY3JpcHRpb246dS5kZXNjcmlwdGlvbnx8IiJ9KSk7dmFyIGY9e3VybDpwLGhlYWRlcnM6e2FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9LG9uOnt9LG1ldGhvZDoiZ2V0In07Zi5vbi5yZXNwb25zZT1mdW5jdGlvbihlKXthKz0xO3ZhciB0PWUub2JqO3QmJm8uZGVjbGFyYXRpb24odCxsKSxhPT09cyYmby5maW5pc2gobixsKX0sZi5vbi5lcnJvcj1mdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpLGErPTEsYT09PXMmJm8uZmluaXNoKG4sbCl9LHRoaXMuY2xpZW50QXV0aG9yaXphdGlvbnMmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNsaWVudEF1dGhvcml6YXRpb25zLmFwcGx5JiZ0aGlzLmNsaWVudEF1dGhvcml6YXRpb25zLmFwcGx5KGYpLChuZXcgcikuZXhlY3V0ZShmKX19LGEucHJvdG90eXBlLmdldEFic29sdXRlUGF0aD1mdW5jdGlvbihlLHQsbil7aWYoIjEuMCI9PT1lJiZ0LmVuZHNXaXRoKCIuanNvbiIpKXt2YXIgcj10Lmxhc3RJbmRleE9mKCIvIik7cj4wJiYodD10LnN1YnN0cmluZygwLHIpKX12YXIgaT10O3JldHVybiAwPT09bi5pbmRleE9mKCJodHRwOi8vIil8fDA9PT1uLmluZGV4T2YoImh0dHBzOi8vIik/aT1uOih0LmVuZHNXaXRoKCIvIikmJihpPXQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtMSkpLGkrPW4pLGk9aS5yZXBsYWNlKCJ7Zm9ybWF0fSIsImpzb24iKX0sYS5wcm90b3R5cGUuc2VjdXJpdHlEZWZpbml0aW9ucz1mdW5jdGlvbihlLHQpe2lmKGUuYXV0aG9yaXphdGlvbnMpe3ZhciBuO2ZvcihuIGluIGUuYXV0aG9yaXphdGlvbnMpe3ZhciByPSExLGk9e30sYT1lLmF1dGhvcml6YXRpb25zW25dO2lmKCJhcGlLZXkiPT09YS50eXBlKWkudHlwZT0iYXBpS2V5IixpWyJpbiJdPWEucGFzc0FzLGkubmFtZT1hLmtleW5hbWV8fG4scj0hMDtlbHNlIGlmKCJvYXV0aDIiPT09YS50eXBlKXt2YXIgbyxzPWEuc2NvcGVzfHxbXSxsPXt9O2ZvcihvIGluIHMpe3ZhciB1PXNbb107bFt1LnNjb3BlXT11LmRlc2NyaXB0aW9ufWlmKGkudHlwZT0ib2F1dGgyIixvPjAmJihpLnNjb3Blcz1sKSxhLmdyYW50VHlwZXMpe2lmKGEuZ3JhbnRUeXBlcy5pbXBsaWNpdCl7dmFyIGM9YS5ncmFudFR5cGVzLmltcGxpY2l0O2kuZmxvdz0iaW1wbGljaXQiLGkuYXV0aG9yaXphdGlvblVybD1jLmxvZ2luRW5kcG9pbnQscj0hMH1pZihhLmdyYW50VHlwZXMuYXV0aG9yaXphdGlvbl9jb2RlJiYhaS5mbG93KXt2YXIgcD1hLmdyYW50VHlwZXMuYXV0aG9yaXphdGlvbl9jb2RlO2kuZmxvdz0iYWNjZXNzQ29kZSIsaS5hdXRob3JpemF0aW9uVXJsPXAudG9rZW5SZXF1ZXN0RW5kcG9pbnQudXJsLGkudG9rZW5Vcmw9cC50b2tlbkVuZHBvaW50LnVybCxyPSEwfX19ciYmKHQuc2VjdXJpdHlEZWZpbml0aW9ucz10LnNlY3VyaXR5RGVmaW5pdGlvbnN8fHt9LHQuc2VjdXJpdHlEZWZpbml0aW9uc1tuXT1pKX19fSxhLnByb3RvdHlwZS5hcGlJbmZvPWZ1bmN0aW9uKGUsdCl7aWYoZS5pbmZvKXt2YXIgbj1lLmluZm87dC5pbmZvPXt9LG4uY29udGFjdCYmKHQuaW5mby5jb250YWN0PXt9LHQuaW5mby5jb250YWN0LmVtYWlsPW4uY29udGFjdCksbi5kZXNjcmlwdGlvbiYmKHQuaW5mby5kZXNjcmlwdGlvbj1uLmRlc2NyaXB0aW9uKSxuLnRpdGxlJiYodC5pbmZvLnRpdGxlPW4udGl0bGUpLG4udGVybXNPZlNlcnZpY2VVcmwmJih0LmluZm8udGVybXNPZlNlcnZpY2U9bi50ZXJtc09mU2VydmljZVVybCksKG4ubGljZW5zZXx8bi5saWNlbnNlVXJsKSYmKHQubGljZW5zZT17fSxuLmxpY2Vuc2UmJih0LmxpY2Vuc2UubmFtZT1uLmxpY2Vuc2UpLG4ubGljZW5zZVVybCYmKHQubGljZW5zZS51cmw9bi5saWNlbnNlVXJsKSl9ZWxzZSB0aGlzLndhcm5pbmdzLnB1c2goIm1pc3NpbmcgaW5mbyBzZWN0aW9uIil9LGEucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlLHQpe2UodCl9fSx7Ii4vaHR0cCI6NSwibG9kYXNoLWNvbXBhdC9sYW5nL2lzT2JqZWN0IjoxNDd9XSw5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXtpc1BsYWluT2JqZWN0OmUoImxvZGFzaC1jb21wYXQvbGFuZy9pc1BsYWluT2JqZWN0IiksaXNTdHJpbmc6ZSgibG9kYXNoLWNvbXBhdC9sYW5nL2lzU3RyaW5nIil9LGk9ZSgiLi4vc2NoZW1hLW1hcmt1cC5qcyIpLGE9ZSgianMteWFtbCIpLG89dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmRlZmluaXRpb249dHx8e30sdGhpcy5pc0FycmF5PSJhcnJheSI9PT10LnR5cGUsdGhpcy5tb2RlbHM9bnx8e30sdGhpcy5uYW1lPXQudGl0bGV8fGV8fCJJbmxpbmUgTW9kZWwiLHRoaXMubW9kZWxQcm9wZXJ0eU1hY3JvPXJ8fGZ1bmN0aW9uKGUpe3JldHVybiBlWyJkZWZhdWx0Il19LHRoaXN9O28ucHJvdG90eXBlLmNyZWF0ZUpTT05TYW1wbGU9by5wcm90b3R5cGUuZ2V0U2FtcGxlVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZXx8e30sZVt0aGlzLm5hbWVdPXRoaXMsdGhpcy5leGFtcGxlcyYmci5pc1BsYWluT2JqZWN0KHRoaXMuZXhhbXBsZXMpJiZ0aGlzLmV4YW1wbGVzWyJhcHBsaWNhdGlvbi9qc29uIl0/KHRoaXMuZGVmaW5pdGlvbi5leGFtcGxlPXRoaXMuZXhhbXBsZXNbImFwcGxpY2F0aW9uL2pzb24iXSxyLmlzU3RyaW5nKHRoaXMuZGVmaW5pdGlvbi5leGFtcGxlKSYmKHRoaXMuZGVmaW5pdGlvbi5leGFtcGxlPWEuc2FmZUxvYWQodGhpcy5kZWZpbml0aW9uLmV4YW1wbGUpKSk6dGhpcy5kZWZpbml0aW9uLmV4YW1wbGV8fCh0aGlzLmRlZmluaXRpb24uZXhhbXBsZT10aGlzLmV4YW1wbGVzKSxpLnNjaGVtYVRvSlNPTih0aGlzLmRlZmluaXRpb24sdGhpcy5tb2RlbHMsZSx0aGlzLm1vZGVsUHJvcGVydHlNYWNybyl9LG8ucHJvdG90eXBlLmdldE1vY2tTaWduYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4gaS5zY2hlbWFUb0hUTUwodGhpcy5uYW1lLHRoaXMuZGVmaW5pdGlvbix0aGlzLm1vZGVscyx0aGlzLm1vZGVsUHJvcGVydHlNYWNybyl9fSx7Ii4uL3NjaGVtYS1tYXJrdXAuanMiOjcsImpzLXlhbWwiOjIxLCJsb2Rhc2gtY29tcGF0L2xhbmcvaXNQbGFpbk9iamVjdCI6MTQ4LCJsb2Rhc2gtY29tcGF0L2xhbmcvaXNTdHJpbmciOjE0OX1dLDEwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZihpLmlzRW1wdHkodCkpcmV0dXJuIGVbMF07Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtyPm47bisrKWlmKGUuaW5kZXhPZih0W25dKT4tMSlyZXR1cm4gdFtuXTtyZXR1cm4gZVswXX12YXIgaT17Y2xvbmVEZWVwOmUoImxvZGFzaC1jb21wYXQvbGFuZy9jbG9uZURlZXAiKSxpc1VuZGVmaW5lZDplKCJsb2Rhc2gtY29tcGF0L2xhbmcvaXNVbmRlZmluZWQiKSxpc0VtcHR5OmUoImxvZGFzaC1jb21wYXQvbGFuZy9pc0VtcHR5IiksaXNPYmplY3Q6ZSgibG9kYXNoLWNvbXBhdC9sYW5nL2lzT2JqZWN0Iil9LGE9ZSgiLi4vaGVscGVycyIpLG89ZSgiLi9tb2RlbCIpLHM9ZSgiLi4vaHR0cCIpLGw9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIsaSxhLHMsbCx1KXt2YXIgYz1bXTtpZihlPWV8fHt9LGE9YXx8e30sZSYmZS5vcHRpb25zJiYodGhpcy5jbGllbnQ9ZS5vcHRpb25zLmNsaWVudHx8bnVsbCx0aGlzLnJlc3BvbnNlSW50ZXJjZXB0b3I9ZS5vcHRpb25zLnJlc3BvbnNlSW50ZXJjZXB0b3J8fG51bGwpLHRoaXMuYXV0aG9yaXphdGlvbnM9YS5zZWN1cml0eSx0aGlzLmJhc2VQYXRoPWUuYmFzZVBhdGh8fCIvIix0aGlzLmNsaWVudEF1dGhvcml6YXRpb25zPXUsdGhpcy5jb25zdW1lcz1hLmNvbnN1bWVzfHxlLmNvbnN1bWVzfHxbImFwcGxpY2F0aW9uL2pzb24iXSx0aGlzLnByb2R1Y2VzPWEucHJvZHVjZXN8fGUucHJvZHVjZXN8fFsiYXBwbGljYXRpb24vanNvbiJdLHRoaXMuZGVwcmVjYXRlZD1hLmRlcHJlY2F0ZWQsdGhpcy5kZXNjcmlwdGlvbj1hLmRlc2NyaXB0aW9uLHRoaXMuaG9zdD1lLmhvc3R8fCJsb2NhbGhvc3QiLHRoaXMubWV0aG9kPXJ8fGMucHVzaCgiT3BlcmF0aW9uICIrbisiIGlzIG1pc3NpbmcgbWV0aG9kLiIpLHRoaXMubW9kZWxzPWx8fHt9LHRoaXMubmlja25hbWU9bnx8Yy5wdXNoKCJPcGVyYXRpb25zIG11c3QgaGF2ZSBhIG5pY2tuYW1lLiIpLHRoaXMub3BlcmF0aW9uPWEsdGhpcy5vcGVyYXRpb25zPXt9LHRoaXMucGFyYW1ldGVycz1udWxsIT09YT9hLnBhcmFtZXRlcnN8fFtdOnt9LHRoaXMucGFyZW50PWUsdGhpcy5wYXRoPWl8fGMucHVzaCgiT3BlcmF0aW9uICIrdGhpcy5uaWNrbmFtZSsiIGlzIG1pc3NpbmcgcGF0aC4iKSx0aGlzLnJlc3BvbnNlcz1hLnJlc3BvbnNlc3x8e30sdGhpcy5zY2hlbWU9dHx8ZS5zY2hlbWV8fCJodHRwIix0aGlzLnNjaGVtZXM9YS5zY2hlbWVzfHxlLnNjaGVtZXMsdGhpcy5zZWN1cml0eT1hLnNlY3VyaXR5LHRoaXMuc3VtbWFyeT1hLnN1bW1hcnl8fCIiLHRoaXMudHlwZT1udWxsLHRoaXMudXNlSlF1ZXJ5PWUudXNlSlF1ZXJ5LHRoaXMucGFyYW1ldGVyTWFjcm89ZS5wYXJhbWV0ZXJNYWNyb3x8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdFsiZGVmYXVsdCJdfSx0aGlzLmlubGluZU1vZGVscz1bXSwic3RyaW5nIj09dHlwZW9mIHRoaXMuZGVwcmVjYXRlZClzd2l0Y2godGhpcy5kZXByZWNhdGVkLnRvTG93ZXJDYXNlKCkpe2Nhc2UidHJ1ZSI6Y2FzZSJ5ZXMiOmNhc2UiMSI6dGhpcy5kZXByZWNhdGVkPSEwO2JyZWFrO2Nhc2UiZmFsc2UiOmNhc2Uibm8iOmNhc2UiMCI6Y2FzZSBudWxsOnRoaXMuZGVwcmVjYXRlZD0hMTticmVhaztkZWZhdWx0OnRoaXMuZGVwcmVjYXRlZD1Cb29sZWFuKHRoaXMuZGVwcmVjYXRlZCl9dmFyIHAsZjtpZihzKXt2YXIgaDtmb3IoaCBpbiBzKWY9bmV3IG8oaCxzW2hdLHRoaXMubW9kZWxzLGUubW9kZWxQcm9wZXJ0eU1hY3JvKSxmJiYodGhpcy5tb2RlbHNbaF09Zil9ZWxzZSBzPXt9O2ZvcihwPTA7cDx0aGlzLnBhcmFtZXRlcnMubGVuZ3RoO3ArKyl7dmFyIGQ9dGhpcy5wYXJhbWV0ZXJzW3BdO2RbImRlZmF1bHQiXT10aGlzLnBhcmFtZXRlck1hY3JvKHRoaXMsZCksImFycmF5Ij09PWQudHlwZSYmKGQuaXNMaXN0PSEwLGQuYWxsb3dNdWx0aXBsZT0hMCxkLml0ZW1zJiZkLml0ZW1zWyJlbnVtIl0mJihkWyJlbnVtIl09ZC5pdGVtc1siZW51bSJdKSk7dmFyIG09dGhpcy5nZXRUeXBlKGQpO2lmKG0mJiJib29sZWFuIj09PW0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpJiYoZC5hbGxvd2FibGVWYWx1ZXM9e30sZC5pc0xpc3Q9ITAsZFsiZW51bSJdPVshMCwhMV0pLGRbIngtZXhhbXBsZXMiXSl7dmFyIGc9ZFsieC1leGFtcGxlcyJdWyJkZWZhdWx0Il07InVuZGVmaW5lZCIhPXR5cGVvZiBnJiYoZFsiZGVmYXVsdCJdPWcpfWlmKCJ1bmRlZmluZWQiIT10eXBlb2YgZFsiZW51bSJdKXt2YXIgeTtmb3IoZC5hbGxvd2FibGVWYWx1ZXM9e30sZC5hbGxvd2FibGVWYWx1ZXMudmFsdWVzPVtdLGQuYWxsb3dhYmxlVmFsdWVzLmRlc2NyaXB0aXZlVmFsdWVzPVtdLHk9MDt5PGRbImVudW0iXS5sZW5ndGg7eSsrKXt2YXIgdj1kWyJlbnVtIl1beV0sYj12PT09ZFsiZGVmYXVsdCJdfHx2KyIiPT09ZFsiZGVmYXVsdCJdO2QuYWxsb3dhYmxlVmFsdWVzLnZhbHVlcy5wdXNoKHYpLGQuYWxsb3dhYmxlVmFsdWVzLmRlc2NyaXB0aXZlVmFsdWVzLnB1c2goe3ZhbHVlOnYrIiIsaXNEZWZhdWx0OmJ9KX19ImFycmF5Ij09PWQudHlwZSYmKG09W21dLCJ1bmRlZmluZWQiPT10eXBlb2YgZC5hbGxvd2FibGVWYWx1ZXMmJihkZWxldGUgZC5pc0xpc3QsZGVsZXRlIGQuYWxsb3dNdWx0aXBsZSkpLGQuc2lnbmF0dXJlPXRoaXMuZ2V0TW9kZWxTaWduYXR1cmUobSx0aGlzLm1vZGVscykudG9TdHJpbmcoKSxkLnNhbXBsZUpTT049dGhpcy5nZXRNb2RlbFNhbXBsZUpTT04obSx0aGlzLm1vZGVscyksZC5yZXNwb25zZUNsYXNzU2lnbmF0dXJlPWQuc2lnbmF0dXJlfXZhciB3LHgsUz10aGlzLnJlc3BvbnNlcztpZihTWzIwMF0/KHg9U1syMDBdLHc9IjIwMCIpOlNbMjAxXT8oeD1TWzIwMV0sdz0iMjAxIik6U1syMDJdPyh4PVNbMjAyXSx3PSIyMDIiKTpTWzIwM10/KHg9U1syMDNdLHc9IjIwMyIpOlNbMjA0XT8oeD1TWzIwNF0sdz0iMjA0Iik6U1syMDVdPyh4PVNbMjA1XSx3PSIyMDUiKTpTWzIwNl0/KHg9U1syMDZdLHc9IjIwNiIpOlNbImRlZmF1bHQiXSYmKHg9U1siZGVmYXVsdCJdLHc9ImRlZmF1bHQiKSx4JiZ4LnNjaGVtYSl7dmFyIEEsQz10aGlzLnJlc29sdmVNb2RlbCh4LnNjaGVtYSxzKTtkZWxldGUgU1t3XSxDPyh0aGlzLnN1Y2Nlc3NSZXNwb25zZT17fSxBPXRoaXMuc3VjY2Vzc1Jlc3BvbnNlW3ddPUMpOnguc2NoZW1hLnR5cGUmJiJvYmplY3QiIT09eC5zY2hlbWEudHlwZSYmImFycmF5IiE9PXguc2NoZW1hLnR5cGU/KHRoaXMuc3VjY2Vzc1Jlc3BvbnNlPXt9LEE9dGhpcy5zdWNjZXNzUmVzcG9uc2Vbd109eC5zY2hlbWEpOih0aGlzLnN1Y2Nlc3NSZXNwb25zZT17fSxBPXRoaXMuc3VjY2Vzc1Jlc3BvbnNlW3ddPW5ldyBvKHZvaWQgMCx4LnNjaGVtYXx8e30sdGhpcy5tb2RlbHMsZS5tb2RlbFByb3BlcnR5TWFjcm8pKSxBJiYoeC5kZXNjcmlwdGlvbiYmKEEuZGVzY3JpcHRpb249eC5kZXNjcmlwdGlvbikseC5leGFtcGxlcyYmKEEuZXhhbXBsZXM9eC5leGFtcGxlcykseC5oZWFkZXJzJiYoQS5oZWFkZXJzPXguaGVhZGVycykpLHRoaXMudHlwZT14fXJldHVybiBjLmxlbmd0aD4wJiZ0aGlzLnJlc291cmNlJiZ0aGlzLnJlc291cmNlLmFwaSYmdGhpcy5yZXNvdXJjZS5hcGkuZmFpbCYmdGhpcy5yZXNvdXJjZS5hcGkuZmFpbChjKSx0aGlzfTtsLnByb3RvdHlwZS5pc0RlZmF1bHRBcnJheUl0ZW1WYWx1ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0WyJkZWZhdWx0Il0mJkFycmF5LmlzQXJyYXkodFsiZGVmYXVsdCJdKT8tMSE9PXRbImRlZmF1bHQiXS5pbmRleE9mKGUpOmU9PT10WyJkZWZhdWx0Il19LGwucHJvdG90eXBlLmdldFR5cGU9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLnR5cGUscj1lLmZvcm1hdCxpPSExOyJpbnRlZ2VyIj09PW4mJiJpbnQzMiI9PT1yP3Q9ImludGVnZXIiOiJpbnRlZ2VyIj09PW4mJiJpbnQ2NCI9PT1yP3Q9ImxvbmciOiJpbnRlZ2VyIj09PW4/dD0iaW50ZWdlciI6InN0cmluZyI9PT1uP3Q9ImRhdGUtdGltZSI9PT1yPyJkYXRlLXRpbWUiOiJkYXRlIj09PXI/ImRhdGUiOiJzdHJpbmciOiJudW1iZXIiPT09biYmImZsb2F0Ij09PXI/dD0iZmxvYXQiOiJudW1iZXIiPT09biYmImRvdWJsZSI9PT1yP3Q9ImRvdWJsZSI6Im51bWJlciI9PT1uP3Q9ImRvdWJsZSI6ImJvb2xlYW4iPT09bj90PSJib29sZWFuIjoiYXJyYXkiPT09biYmKGk9ITAsZS5pdGVtcyYmKHQ9dGhpcy5nZXRUeXBlKGUuaXRlbXMpKSksZS4kcmVmJiYodD1hLnNpbXBsZVJlZihlLiRyZWYpKTt2YXIgbz1lLnNjaGVtYTtpZihvKXt2YXIgcz1vLiRyZWY7cmV0dXJuIHM/KHM9YS5zaW1wbGVSZWYocyksaT9bc106cyk6Im9iamVjdCI9PT1vLnR5cGU/dGhpcy5hZGRJbmxpbmVNb2RlbChvKTp0aGlzLmdldFR5cGUobyl9cmV0dXJuIGk/W3RdOnR9LGwucHJvdG90eXBlLmFkZElubGluZU1vZGVsPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW5saW5lTW9kZWxzLmxlbmd0aCxuPXRoaXMucmVzb2x2ZU1vZGVsKGUse30pO3JldHVybiBuPyh0aGlzLmlubGluZU1vZGVscy5wdXNoKG4pLCJJbmxpbmUgTW9kZWwgIit0KTpudWxsfSxsLnByb3RvdHlwZS5nZXRJbmxpbmVNb2RlbD1mdW5jdGlvbihlKXtpZigvXklubGluZSBNb2RlbCBcZCskLy50ZXN0KGUpKXt2YXIgdD1wYXJzZUludChlLnN1YnN0cigiSW5saW5lIE1vZGVsIi5sZW5ndGgpLnRyaW0oKSwxMCksbj10aGlzLmlubGluZU1vZGVsc1t0XTtyZXR1cm4gbn1yZXR1cm4gbnVsbH0sbC5wcm90b3R5cGUucmVzb2x2ZU1vZGVsPWZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBlLiRyZWYpe3ZhciBuPWUuJHJlZjtpZigwPT09bi5pbmRleE9mKCIjL2RlZmluaXRpb25zLyIpJiYobj1uLnN1YnN0cmluZygiIy9kZWZpbml0aW9ucy8iLmxlbmd0aCkpLHRbbl0pcmV0dXJuIG5ldyBvKG4sdFtuXSx0aGlzLm1vZGVscyx0aGlzLnBhcmVudC5tb2RlbFByb3BlcnR5TWFjcm8pfWVsc2UgaWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYoIm9iamVjdCI9PT1lLnR5cGV8fGkuaXNVbmRlZmluZWQoZS50eXBlKSkpcmV0dXJuIG5ldyBvKHZvaWQgMCxlLHRoaXMubW9kZWxzLHRoaXMucGFyZW50Lm1vZGVsUHJvcGVydHlNYWNybyk7cmV0dXJuIG51bGx9LGwucHJvdG90eXBlLmhlbHA9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMubmlja25hbWUrIjogIit0aGlzLnN1bW1hcnkrIlxuIixuPTA7bjx0aGlzLnBhcmFtZXRlcnMubGVuZ3RoO24rKyl7dmFyIHI9dGhpcy5wYXJhbWV0ZXJzW25dLGk9ci5zaWduYXR1cmU7dCs9IlxuICAqICIrci5uYW1lKyIgKCIraSsiKTogIityLmRlc2NyaXB0aW9ufXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZSYmYS5sb2codCksdH0sbC5wcm90b3R5cGUuZ2V0TW9kZWxTaWduYXR1cmU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyO3JldHVybiBlIGluc3RhbmNlb2YgQXJyYXkmJihyPSEwLGU9ZVswXSksInVuZGVmaW5lZCI9PXR5cGVvZiBlPyhlPSJ1bmRlZmluZWQiLG49ITApOnRbZV0/KGU9dFtlXSxuPSExKTp0aGlzLmdldElubGluZU1vZGVsKGUpPyhlPXRoaXMuZ2V0SW5saW5lTW9kZWwoZSksbj0hMSk6bj0hMCxuP3I/IkFycmF5WyIrZSsiXSI6ZS50b1N0cmluZygpOnI/IkFycmF5WyIrZS5nZXRNb2NrU2lnbmF0dXJlKCkrIl0iOmUuZ2V0TW9ja1NpZ25hdHVyZSgpfSxsLnByb3RvdHlwZS5zdXBwb3J0SGVhZGVyUGFyYW1zPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwucHJvdG90eXBlLnN1cHBvcnRlZFN1Ym1pdE1ldGhvZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQuc3VwcG9ydGVkU3VibWl0TWV0aG9kc30sbC5wcm90b3R5cGUuZ2V0SGVhZGVyUGFyYW1zPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnNldENvbnRlbnRUeXBlcyhlLHt9KSxuPTA7bjx0aGlzLnBhcmFtZXRlcnMubGVuZ3RoO24rKyl7dmFyIHI9dGhpcy5wYXJhbWV0ZXJzW25dO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZVtyLm5hbWVdJiYiaGVhZGVyIj09PXJbImluIl0pe3ZhciBpPWVbci5uYW1lXTtBcnJheS5pc0FycmF5KGkpJiYoaT1pLnRvU3RyaW5nKCkpLHRbci5uYW1lXT1pfX1yZXR1cm4gdH0sbC5wcm90b3R5cGUudXJsaWZ5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD17fSxuPXRoaXMucGF0aCxyPSIiLGk9MDtpPHRoaXMucGFyYW1ldGVycy5sZW5ndGg7aSsrKXt2YXIgYT10aGlzLnBhcmFtZXRlcnNbaV07aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBlW2EubmFtZV0paWYoInBhdGgiPT09YVsiaW4iXSl7dmFyIG89bmV3IFJlZ0V4cCgieyIrYS5uYW1lKyJ9IiwiZ2kiKSxzPWVbYS5uYW1lXTtzPUFycmF5LmlzQXJyYXkocyk/dGhpcy5lbmNvZGVQYXRoQ29sbGVjdGlvbihhLmNvbGxlY3Rpb25Gb3JtYXQsYS5uYW1lLHMpOnRoaXMuZW5jb2RlUGF0aFBhcmFtKHMpLG49bi5yZXBsYWNlKG8scyl9ZWxzZSBpZigicXVlcnkiPT09YVsiaW4iXSYmInVuZGVmaW5lZCIhPXR5cGVvZiBlW2EubmFtZV0paWYocis9IiI9PT1yPyI/IjoiJiIsInVuZGVmaW5lZCIhPXR5cGVvZiBhLmNvbGxlY3Rpb25Gb3JtYXQpe3ZhciBsPWVbYS5uYW1lXTtyKz1BcnJheS5pc0FycmF5KGwpP3RoaXMuZW5jb2RlUXVlcnlDb2xsZWN0aW9uKGEuY29sbGVjdGlvbkZvcm1hdCxhLm5hbWUsbCk6dGhpcy5lbmNvZGVRdWVyeVBhcmFtKGEubmFtZSkrIj0iK3RoaXMuZW5jb2RlUXVlcnlQYXJhbShlW2EubmFtZV0pfWVsc2Ugcis9dGhpcy5lbmNvZGVRdWVyeVBhcmFtKGEubmFtZSkrIj0iK3RoaXMuZW5jb2RlUXVlcnlQYXJhbShlW2EubmFtZV0pO2Vsc2UiZm9ybURhdGEiPT09YVsiaW4iXSYmKHRbYS5uYW1lXT1lW2EubmFtZV0pfXZhciB1PXRoaXMuc2NoZW1lKyI6Ly8iK3RoaXMuaG9zdDtyZXR1cm4iLyIhPT10aGlzLmJhc2VQYXRoJiYodSs9dGhpcy5iYXNlUGF0aCksdStuK3J9LGwucHJvdG90eXBlLmdldE1pc3NpbmdQYXJhbXM9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXTtmb3IodD0wO3Q8dGhpcy5wYXJhbWV0ZXJzLmxlbmd0aDt0Kyspe3ZhciByPXRoaXMucGFyYW1ldGVyc1t0XTtyLnJlcXVpcmVkPT09ITAmJiJ1bmRlZmluZWQiPT10eXBlb2YgZVtyLm5hbWVdJiYobj1yLm5hbWUpfXJldHVybiBufSxsLnByb3RvdHlwZS5nZXRCb2R5PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIsaSxhLG89e30scz0hMSxsPTA7bDx0aGlzLnBhcmFtZXRlcnMubGVuZ3RoO2wrKyl7dmFyIHU9dGhpcy5wYXJhbWV0ZXJzW2xdOyJ1bmRlZmluZWQiIT10eXBlb2YgdFt1Lm5hbWVdPyJib2R5Ij09PXVbImluIl0/cj10W3UubmFtZV06ImZvcm1EYXRhIj09PXVbImluIl0mJihvW3UubmFtZV09dFt1Lm5hbWVdKToiYm9keSI9PT11WyJpbiJdJiYocz0hMCl9aWYocyYmInVuZGVmaW5lZCI9PXR5cGVvZiByKXt2YXIgYz1lWyJDb250ZW50LVR5cGUiXTtjJiYwPT09Yy5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIikmJihyPSJ7fSIpfWlmKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiPT09ZVsiQ29udGVudC1UeXBlIl0mJiJmb3JtRGF0YSI9PT11WyJpbiJdKXt2YXIgcD0iIjtmb3IoaSBpbiBvKWE9b1tpXSwidW5kZWZpbmVkIiE9dHlwZW9mIGEmJigiIiE9PXAmJihwKz0iJiIpLHArPWVuY29kZVVSSUNvbXBvbmVudChpKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGEpKTtyPXB9ZWxzZSBpZihlWyJDb250ZW50LVR5cGUiXSYmZVsiQ29udGVudC1UeXBlIl0uaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPj0wJiZuLnVzZUpRdWVyeSl7dmFyIGY9bmV3IEZvcm1EYXRhO2YudHlwZT0iZm9ybURhdGEiO2ZvcihpIGluIG8pYT10W2ldLCJ1bmRlZmluZWQiIT10eXBlb2YgYSYmKCJmaWxlIj09PWEudHlwZSYmYS52YWx1ZT8oZGVsZXRlIGVbIkNvbnRlbnQtVHlwZSJdLGYuYXBwZW5kKGksYS52YWx1ZSkpOmYuYXBwZW5kKGksYSkpO3I9Zn1yZXR1cm4gcn0sbC5wcm90b3R5cGUuZ2V0TW9kZWxTYW1wbGVKU09OPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixhO2lmKHQ9dHx8e30sbj1lIGluc3RhbmNlb2YgQXJyYXksYT1uP2VbMF06ZSx0W2FdP3I9dFthXS5jcmVhdGVKU09OU2FtcGxlKCk6dGhpcy5nZXRJbmxpbmVNb2RlbChhKSYmKHI9dGhpcy5nZXRJbmxpbmVNb2RlbChhKS5jcmVhdGVKU09OU2FtcGxlKCkpLHIpe2lmKHI9bj9bcl06ciwic3RyaW5nIj09dHlwZW9mIHIpcmV0dXJuIHI7aWYoaS5pc09iamVjdChyKSl7dmFyIG89cjtpZihyIGluc3RhbmNlb2YgQXJyYXkmJnIubGVuZ3RoPjAmJihvPXJbMF0pLG8ubm9kZU5hbWUpe3ZhciBzPShuZXcgWE1MU2VyaWFsaXplcikuc2VyaWFsaXplVG9TdHJpbmcobyk7cmV0dXJuIHRoaXMuZm9ybWF0WG1sKHMpfXJldHVybiBKU09OLnN0cmluZ2lmeShyLG51bGwsMil9cmV0dXJuIHJ9fSxsLnByb3RvdHlwZVsiZG8iXT1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiB0aGlzLmV4ZWN1dGUoZSx0LG4scixpKX0sbC5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihlLHQsbixyLG8pe3ZhciBsLHUsYz1lfHx7fSxwPXt9O2kuaXNPYmplY3QodCkmJihwPXQsbD1uLHU9ciksdGhpcy5jbGllbnQmJihwLmNsaWVudD10aGlzLmNsaWVudCksdGhpcy5yZXNwb25zZUludGVyY2VwdG9yJiYocC5yZXNwb25zZUludGVyY2VwdG9yPXRoaXMucmVzcG9uc2VJbnRlcmNlcHRvciksImZ1bmN0aW9uIj09dHlwZW9mIHQmJihsPXQsdT1uKSxsPWx8fHRoaXMucGFyZW50LmRlZmF1bHRTdWNjZXNzQ2FsbGJhY2t8fGEubG9nLHU9dXx8dGhpcy5wYXJlbnQuZGVmYXVsdEVycm9yQ2FsbGJhY2t8fGEubG9nLCJ1bmRlZmluZWQiPT10eXBlb2YgcC51c2VKUXVlcnkmJihwLnVzZUpRdWVyeT10aGlzLnVzZUpRdWVyeSk7dmFyIGY9dGhpcy5nZXRNaXNzaW5nUGFyYW1zKGMpO2lmKGYubGVuZ3RoPjApe3ZhciBoPSJtaXNzaW5nIHJlcXVpcmVkIHBhcmFtczogIitmO3JldHVybiBhLmZhaWwoaCksdm9pZCB1KGgpfXZhciBkLG09dGhpcy5nZXRIZWFkZXJQYXJhbXMoYyksZz10aGlzLnNldENvbnRlbnRUeXBlcyhjLHApLHk9e307Zm9yKGQgaW4gbSl5W2RdPW1bZF07Zm9yKGQgaW4gZyl5W2RdPWdbZF07dmFyIHY9dGhpcy5nZXRCb2R5KGcsYyxwKSxiPXRoaXMudXJsaWZ5KGMpO2lmKGIuaW5kZXhPZigiLntmb3JtYXR9Iik+MCYmeSl7dmFyIHc9eS5BY2NlcHR8fHkuYWNjZXB0O3cmJncuaW5kZXhPZigianNvbiIpPjA/Yj1iLnJlcGxhY2UoIi57Zm9ybWF0fSIsIi5qc29uIik6dyYmdy5pbmRleE9mKCJ4bWwiKT4wJiYoYj1iLnJlcGxhY2UoIi57Zm9ybWF0fSIsIi54bWwiKSl9dmFyIHg9e3VybDpiLG1ldGhvZDp0aGlzLm1ldGhvZC50b1VwcGVyQ2FzZSgpLGJvZHk6dix1c2VKUXVlcnk6cC51c2VKUXVlcnksaGVhZGVyczp5LG9uOntyZXNwb25zZTpmdW5jdGlvbihlKXtyZXR1cm4gbChlLG8pfSxlcnJvcjpmdW5jdGlvbihlKXtyZXR1cm4gdShlLG8pfX19O3JldHVybiB0aGlzLmNsaWVudEF1dGhvcml6YXRpb25zLmFwcGx5KHgsdGhpcy5vcGVyYXRpb24uc2VjdXJpdHkpLHAubW9jaz09PSEwP3g6dm9pZChuZXcgcykuZXhlY3V0ZSh4LHApfSxsLnByb3RvdHlwZS5zZXRDb250ZW50VHlwZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbixpLG89dGhpcy5wYXJhbWV0ZXJzLHM9ZS5wYXJhbWV0ZXJDb250ZW50VHlwZXx8cih0aGlzLmNvbnN1bWVzLFsiYXBwbGljYXRpb24vanNvbiIsImFwcGxpY2F0aW9uL3lhbWwiXSksbD10LnJlc3BvbnNlQ29udGVudFR5cGV8fHIodGhpcy5wcm9kdWNlcyxbImFwcGxpY2F0aW9uL2pzb24iLCJhcHBsaWNhdGlvbi95YW1sIl0pLHU9W10sYz1bXSxwPXt9O2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe3ZhciBmPW9baV07aWYoImZvcm1EYXRhIj09PWZbImluIl0pImZpbGUiPT09Zi50eXBlP3UucHVzaChmKTpjLnB1c2goZik7ZWxzZSBpZigiaGVhZGVyIj09PWZbImluIl0mJnQpe3ZhciBoPWYubmFtZSxkPXRbZi5uYW1lXTsidW5kZWZpbmVkIiE9dHlwZW9mIHRbZi5uYW1lXSYmKHBbaF09ZCl9ZWxzZSJib2R5Ij09PWZbImluIl0mJiJ1bmRlZmluZWQiIT10eXBlb2YgZVtmLm5hbWVdJiYobj1lW2YubmFtZV0pfXJldHVybiJwb3N0Ij09PXRoaXMubWV0aG9kfHwicHV0Ij09PXRoaXMubWV0aG9kfHwicGF0Y2giPT09dGhpcy5tZXRob2R8fCJkZWxldGUiPT09dGhpcy5tZXRob2QmJm4/KHQucmVxdWVzdENvbnRlbnRUeXBlJiYocz10LnJlcXVlc3RDb250ZW50VHlwZSksYy5sZW5ndGg+MCYmKHM9dC5yZXF1ZXN0Q29udGVudFR5cGU/dC5yZXF1ZXN0Q29udGVudFR5cGU6dS5sZW5ndGg+MD8ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpKTpzPW51bGwscyYmdGhpcy5jb25zdW1lcyYmLTE9PT10aGlzLmNvbnN1bWVzLmluZGV4T2YocykmJmEubG9nKCJzZXJ2ZXIgZG9lc24ndCBjb25zdW1lICIrcysiLCB0cnkgIitKU09OLnN0cmluZ2lmeSh0aGlzLmNvbnN1bWVzKSksdGhpcy5tYXRjaGVzQWNjZXB0KGwpfHxhLmxvZygic2VydmVyIGNhbid0IHByb2R1Y2UgIitsKSwocyYmIiIhPT1ufHwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIj09PXMpJiYocFsiQ29udGVudC1UeXBlIl09cyksbCYmKHAuQWNjZXB0PWwpLHB9LGwucHJvdG90eXBlLm1hdGNoZXNBY2NlcHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnRoaXMucHJvZHVjZXM/LTEhPT10aGlzLnByb2R1Y2VzLmluZGV4T2YoZSl8fC0xIT09dGhpcy5wcm9kdWNlcy5pbmRleE9mKCIqLyoiKTohMH0sbC5wcm90b3R5cGUuYXNDdXJsPWZ1bmN0aW9uKGUsdCl7dmFyIG49e21vY2s6ITB9O2lmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIHIgaW4gdCluW3JdPXRbcl07dmFyIGE9dGhpcy5leGVjdXRlKGUsbik7dGhpcy5jbGllbnRBdXRob3JpemF0aW9ucy5hcHBseShhLHRoaXMub3BlcmF0aW9uLnNlY3VyaXR5KTt2YXIgbz1bXTtpZihvLnB1c2goIi1YICIrdGhpcy5tZXRob2QudG9VcHBlckNhc2UoKSksYS5oZWFkZXJzKXt2YXIgcztmb3IocyBpbiBhLmhlYWRlcnMpe3ZhciBsPWEuaGVhZGVyc1tzXTsic3RyaW5nIj09dHlwZW9mIGwmJihsPWwucmVwbGFjZSgvIi9nLCdcXCInKSksby5wdXNoKCctLWhlYWRlciAiJytzKyI6ICIrbCsnIicpfX1pZihhLmJvZHkpe3ZhciB1O3U9aS5pc09iamVjdChhLmJvZHkpP0pTT04uc3RyaW5naWZ5KGEuYm9keSk6YS5ib2R5LG8ucHVzaCgnLWQgIicrdS5yZXBsYWNlKC8iL2csJ1xcIicpKyciJyl9cmV0dXJuImN1cmwgIitvLmpvaW4oIiAiKSsnICInK2EudXJsKyciJ30sbC5wcm90b3R5cGUuZW5jb2RlUGF0aENvbGxlY3Rpb249ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9IiIsYT0iIjtmb3IoYT0ic3N2Ij09PWU/IiUyMCI6InRzdiI9PT1lPyJcXHQiOiJwaXBlcyI9PT1lPyJ8IjoiLCIscj0wO3I8bi5sZW5ndGg7cisrKTA9PT1yP2k9dGhpcy5lbmNvZGVRdWVyeVBhcmFtKG5bcl0pOmkrPWErdGhpcy5lbmNvZGVRdWVyeVBhcmFtKG5bcl0pO3JldHVybiBpfSxsLnByb3RvdHlwZS5lbmNvZGVRdWVyeUNvbGxlY3Rpb249ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9IiI7aWYoImRlZmF1bHQiPT09ZXx8Im11bHRpIj09PWUpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKylyPjAmJihpKz0iJiIpLGkrPXRoaXMuZW5jb2RlUXVlcnlQYXJhbSh0KSsiPSIrdGhpcy5lbmNvZGVRdWVyeVBhcmFtKG5bcl0pO2Vsc2V7dmFyIGE9IiI7aWYoImNzdiI9PT1lKWE9IiwiO2Vsc2UgaWYoInNzdiI9PT1lKWE9IiUyMCI7ZWxzZSBpZigidHN2Ij09PWUpYT0iXFx0IjtlbHNlIGlmKCJwaXBlcyI9PT1lKWE9InwiO2Vsc2UgaWYoImJyYWNrZXRzIj09PWUpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKykwIT09ciYmKGkrPSImIiksaSs9dGhpcy5lbmNvZGVRdWVyeVBhcmFtKHQpKyJbXT0iK3RoaXMuZW5jb2RlUXVlcnlQYXJhbShuW3JdKTtpZigiIiE9PWEpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKykwPT09cj9pPXRoaXMuZW5jb2RlUXVlcnlQYXJhbSh0KSsiPSIrdGhpcy5lbmNvZGVRdWVyeVBhcmFtKG5bcl0pOmkrPWErdGhpcy5lbmNvZGVRdWVyeVBhcmFtKG5bcl0pfXJldHVybiBpfSxsLnByb3RvdHlwZS5lbmNvZGVRdWVyeVBhcmFtPWZ1bmN0aW9uKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSl9LGwucHJvdG90eXBlLmVuY29kZVBhdGhQYXJhbT1mdW5jdGlvbihlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpfX0seyIuLi9oZWxwZXJzIjo0LCIuLi9odHRwIjo1LCIuL21vZGVsIjo5LCJsb2Rhc2gtY29tcGF0L2xhbmcvY2xvbmVEZWVwIjoxNDEsImxvZGFzaC1jb21wYXQvbGFuZy9pc0VtcHR5IjoxNDQsImxvZGFzaC1jb21wYXQvbGFuZy9pc09iamVjdCI6MTQ3LCJsb2Rhc2gtY29tcGF0L2xhbmcvaXNVbmRlZmluZWQiOjE1MX1dLDExOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXQuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXt0aGlzLmRlc2NyaXB0aW9uPXQsdGhpcy5leHRlcm5hbERvY3M9bix0aGlzLm5hbWU9ZSx0aGlzLm9wZXJhdGlvbj1yLHRoaXMub3BlcmF0aW9uc0FycmF5PVtdLHRoaXMucGF0aD1lLHRoaXMudGFnPWV9O3IucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24oKXt9fSx7fV0sMTI6W2Z1bmN0aW9uKGUsdCxuKXt9LHt9XSwxMzpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoKXtyZXR1cm4gaS5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBpKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT8odGhpcy5sZW5ndGg9MCx0aGlzLnBhcmVudD12b2lkIDAsIm51bWJlciI9PXR5cGVvZiBlP2EodGhpcyxlKToic3RyaW5nIj09dHlwZW9mIGU/byh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXToidXRmOCIpOnModGhpcyxlKSk6YXJndW1lbnRzLmxlbmd0aD4xP25ldyBpKGUsYXJndW1lbnRzWzFdKTpuZXcgaShlKX1mdW5jdGlvbiBhKGUsdCl7aWYoZT1oKGUsMD50PzA6MHxkKHQpKSwhaS5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgbj0wO3Q+bjtuKyspZVtuXT0wO3JldHVybiBlfWZ1bmN0aW9uIG8oZSx0LG4peygic3RyaW5nIiE9dHlwZW9mIG58fCIiPT09bikmJihuPSJ1dGY4Iik7dmFyIHI9MHxnKHQsbik7cmV0dXJuIGU9aChlLHIpLGUud3JpdGUodCxuKSxlfWZ1bmN0aW9uIHMoZSx0KXtpZihpLmlzQnVmZmVyKHQpKXJldHVybiBsKGUsdCk7aWYoWSh0KSlyZXR1cm4gdShlLHQpO2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigibXVzdCBzdGFydCB3aXRoIG51bWJlciwgYnVmZmVyLCBhcnJheSBvciBzdHJpbmciKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2MoZSx0KTp0Lmxlbmd0aD9wKGUsdCk6ZihlLHQpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbj0wfGQodC5sZW5ndGgpO3JldHVybiBlPWgoZSxuKSx0LmNvcHkoZSwwLDAsbiksZX1mdW5jdGlvbiB1KGUsdCl7dmFyIG49MHxkKHQubGVuZ3RoKTtlPWgoZSxuKTtmb3IodmFyIHI9MDtuPnI7cis9MSllW3JdPTI1NSZ0W3JdO3JldHVybiBlfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj0wfGQodC5sZW5ndGgpO2U9aChlLG4pO2Zvcih2YXIgcj0wO24+cjtyKz0xKWVbcl09MjU1JnRbcl07cmV0dXJuIGV9ZnVuY3Rpb24gcChlLHQpe3ZhciBuPTB8ZCh0Lmxlbmd0aCk7ZT1oKGUsbik7Zm9yKHZhciByPTA7bj5yO3IrPTEpZVtyXT0yNTUmdFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBmKGUsdCl7dmFyIG4scj0wOyJCdWZmZXIiPT09dC50eXBlJiZZKHQuZGF0YSkmJihuPXQuZGF0YSxyPTB8ZChuLmxlbmd0aCkpLGU9aChlLHIpO2Zvcih2YXIgaT0wO3I+aTtpKz0xKWVbaV09MjU1Jm5baV07cmV0dXJuIGV9ZnVuY3Rpb24gaChlLHQpe2kuVFlQRURfQVJSQVlfU1VQUE9SVD9lPWkuX2F1Z21lbnQobmV3IFVpbnQ4QXJyYXkodCkpOihlLmxlbmd0aD10LGUuX2lzQnVmZmVyPSEwKTt2YXIgbj0wIT09dCYmdDw9aS5wb29sU2l6ZT4+PjE7cmV0dXJuIG4mJihlLnBhcmVudD1LKSxlfWZ1bmN0aW9uIGQoZSl7aWYoZT49cigpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IityKCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIG0oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBtKSlyZXR1cm4gbmV3IG0oZSx0KTt2YXIgbj1uZXcgaShlLHQpO3JldHVybiBkZWxldGUgbi5wYXJlbnQsbn1mdW5jdGlvbiBnKGUsdCl7InN0cmluZyIhPXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgbj1lLmxlbmd0aDtpZigwPT09bilyZXR1cm4gMDtmb3IodmFyIHI9ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UicmF3IjpjYXNlInJhd3MiOnJldHVybiBuO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFUoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipuO2Nhc2UiaGV4IjpyZXR1cm4gbj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBIKGUpLmxlbmd0aDtkZWZhdWx0OmlmKHIpcmV0dXJuIFUoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24geShlLHQsbil7dmFyIHI9ITE7aWYodD0wfHQsbj12b2lkIDA9PT1ufHxuPT09MS8wP3RoaXMubGVuZ3RoOjB8bixlfHwoZT0idXRmOCIpLDA+dCYmKHQ9MCksbj50aGlzLmxlbmd0aCYmKG49dGhpcy5sZW5ndGgpLHQ+PW4pcmV0dXJuIiI7Zm9yKDs7KXN3aXRjaChlKXtjYXNlImhleCI6cmV0dXJuIGoodGhpcyx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEUodGhpcyx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBrKHRoaXMsdCxuKTtjYXNlImJpbmFyeSI6cmV0dXJuIE8odGhpcyx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gQyh0aGlzLHQsbik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBUKHRoaXMsdCxuKTtkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLHI9ITB9fWZ1bmN0aW9uIHYoZSx0LG4scil7bj1OdW1iZXIobil8fDA7dmFyIGk9ZS5sZW5ndGgtbjtyPyhyPU51bWJlcihyKSxyPmkmJihyPWkpKTpyPWk7dmFyIGE9dC5sZW5ndGg7aWYoYSUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO3I+YS8yJiYocj1hLzIpO2Zvcih2YXIgbz0wO3I+bztvKyspe3ZhciBzPXBhcnNlSW50KHQuc3Vic3RyKDIqbywyKSwxNik7aWYoaXNOYU4ocykpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtlW24rb109c31yZXR1cm4gb31mdW5jdGlvbiBiKGUsdCxuLHIpe3JldHVybiB6KFUodCxlLmxlbmd0aC1uKSxlLG4scil9ZnVuY3Rpb24gdyhlLHQsbixyKXtyZXR1cm4geihCKHQpLGUsbixyKX1mdW5jdGlvbiB4KGUsdCxuLHIpe3JldHVybiB3KGUsdCxuLHIpfWZ1bmN0aW9uIFMoZSx0LG4scil7cmV0dXJuIHooSCh0KSxlLG4scil9ZnVuY3Rpb24gQShlLHQsbixyKXtyZXR1cm4geihxKHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIEMoZSx0LG4pe3JldHVybiAwPT09dCYmbj09PWUubGVuZ3RoP1cuZnJvbUJ5dGVBcnJheShlKTpXLmZyb21CeXRlQXJyYXkoZS5zbGljZSh0LG4pKX1mdW5jdGlvbiBFKGUsdCxuKXt2YXIgcj0iIixpPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBhPXQ7bj5hO2ErKyllW2FdPD0xMjc/KHIrPVYoaSkrU3RyaW5nLmZyb21DaGFyQ29kZShlW2FdKSxpPSIiKTppKz0iJSIrZVthXS50b1N0cmluZygxNik7cmV0dXJuIHIrVihpKX1mdW5jdGlvbiBrKGUsdCxuKXt2YXIgcj0iIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgaT10O24+aTtpKyspcis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTyhlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtuPmk7aSsrKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gaihlLHQsbil7dmFyIHI9ZS5sZW5ndGg7KCF0fHwwPnQpJiYodD0wKSwoIW58fDA+bnx8bj5yKSYmKG49cik7Zm9yKHZhciBpPSIiLGE9dDtuPmE7YSsrKWkrPUYoZVthXSk7cmV0dXJuIGl9ZnVuY3Rpb24gVChlLHQsbil7Zm9yKHZhciByPWUuc2xpY2UodCxuKSxpPSIiLGE9MDthPHIubGVuZ3RoO2ErPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShyW2FdKzI1NipyW2ErMV0pOwpyZXR1cm4gaX1mdW5jdGlvbiBJKGUsdCxuKXtpZihlJTEhPT0wfHwwPmUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5uKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gXyhlLHQsbixyLGEsbyl7aWYoIWkuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYnVmZmVyIG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UiKTtpZih0PmF8fG8+dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidmFsdWUgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gRChlLHQsbixyKXswPnQmJih0PTY1NTM1K3QrMSk7Zm9yKHZhciBpPTAsYT1NYXRoLm1pbihlLmxlbmd0aC1uLDIpO2E+aTtpKyspZVtuK2ldPSh0JjI1NTw8OCoocj9pOjEtaSkpPj4+OCoocj9pOjEtaSl9ZnVuY3Rpb24gTChlLHQsbixyKXswPnQmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxhPU1hdGgubWluKGUubGVuZ3RoLW4sNCk7YT5pO2krKyllW24raV09dD4+PjgqKHI/aTozLWkpJjI1NX1mdW5jdGlvbiBQKGUsdCxuLHIsaSxhKXtpZih0Pml8fGE+dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidmFsdWUgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW5kZXggb3V0IG9mIHJhbmdlIik7aWYoMD5uKXRocm93IG5ldyBSYW5nZUVycm9yKCJpbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBOKGUsdCxuLHIsaSl7cmV0dXJuIGl8fFAoZSx0LG4sNCwzLjQwMjgyMzQ2NjM4NTI4ODZlMzgsLTMuNDAyODIzNDY2Mzg1Mjg4NmUzOCksSi53cml0ZShlLHQsbixyLDIzLDQpLG4rNH1mdW5jdGlvbiAkKGUsdCxuLHIsaSl7cmV0dXJuIGl8fFAoZSx0LG4sOCwxLjc5NzY5MzEzNDg2MjMxNTdlMzA4LC0xLjc5NzY5MzEzNDg2MjMxNTdlMzA4KSxKLndyaXRlKGUsdCxuLHIsNTIsOCksbis4fWZ1bmN0aW9uIE0oZSl7aWYoZT1SKGUpLnJlcGxhY2UoWCwiIiksZS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPT0wOyllKz0iPSI7cmV0dXJuIGV9ZnVuY3Rpb24gUihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfWZ1bmN0aW9uIEYoZSl7cmV0dXJuIDE2PmU/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFUoZSx0KXt0PXR8fDEvMDtmb3IodmFyIG4scj1lLmxlbmd0aCxpPW51bGwsYT1bXSxvPTA7cj5vO28rKyl7aWYobj1lLmNoYXJDb2RlQXQobyksbj41NTI5NSYmNTczNDQ+bil7aWYoIWkpe2lmKG4+NTYzMTkpeyh0LT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihvKzE9PT1yKXsodC09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1uO2NvbnRpbnVlfWlmKDU2MzIwPm4peyh0LT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KSxpPW47Y29udGludWV9bj1pLTU1Mjk2PDwxMHxuLTU2MzIwfDY1NTM2LGk9bnVsbH1lbHNlIGkmJigodC09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSksaT1udWxsKTtpZigxMjg+bil7aWYoKHQtPTEpPDApYnJlYWs7YS5wdXNoKG4pfWVsc2UgaWYoMjA0OD5uKXtpZigodC09Mik8MClicmVhazthLnB1c2gobj4+NnwxOTIsNjMmbnwxMjgpfWVsc2UgaWYoNjU1MzY+bil7aWYoKHQtPTMpPDApYnJlYWs7YS5wdXNoKG4+PjEyfDIyNCxuPj42JjYzfDEyOCw2MyZufDEyOCl9ZWxzZXtpZighKDIwOTcxNTI+bikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhazthLnB1c2gobj4+MTh8MjQwLG4+PjEyJjYzfDEyOCxuPj42JjYzfDEyOCw2MyZufDEyOCl9fXJldHVybiBhfWZ1bmN0aW9uIEIoZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoO24rKyl0LnB1c2goMjU1JmUuY2hhckNvZGVBdChuKSk7cmV0dXJuIHR9ZnVuY3Rpb24gcShlLHQpe2Zvcih2YXIgbixyLGksYT1bXSxvPTA7bzxlLmxlbmd0aCYmISgodC09Mik8MCk7bysrKW49ZS5jaGFyQ29kZUF0KG8pLHI9bj4+OCxpPW4lMjU2LGEucHVzaChpKSxhLnB1c2gocik7cmV0dXJuIGF9ZnVuY3Rpb24gSChlKXtyZXR1cm4gVy50b0J5dGVBcnJheShNKGUpKX1mdW5jdGlvbiB6KGUsdCxuLHIpe2Zvcih2YXIgaT0wO3I+aSYmIShpK24+PXQubGVuZ3RofHxpPj1lLmxlbmd0aCk7aSsrKXRbaStuXT1lW2ldO3JldHVybiBpfWZ1bmN0aW9uIFYoZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2godCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjU1MzMpfX12YXIgVz1lKCJiYXNlNjQtanMiKSxKPWUoImllZWU3NTQiKSxZPWUoImlzLWFycmF5Iik7bi5CdWZmZXI9aSxuLlNsb3dCdWZmZXI9bSxuLklOU1BFQ1RfTUFYX0JZVEVTPTUwLGkucG9vbFNpemU9ODE5Mjt2YXIgSz17fTtpLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXRyeXt2YXIgdD1uZXcgQXJyYXlCdWZmZXIoMCksbj1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gbi5mb289ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9LG4uY29uc3RydWN0b3I9ZSw0Mj09PW4uZm9vKCkmJm4uY29uc3RydWN0b3I9PT1lJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5zdWJhcnJheSYmMD09PW5ldyBVaW50OEFycmF5KDEpLnN1YmFycmF5KDEsMSkuYnl0ZUxlbmd0aH1jYXRjaChyKXtyZXR1cm4hMX19KCksaS5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9LGkuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFpLmlzQnVmZmVyKGUpfHwhaS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dC5sZW5ndGgsYT0wLG89TWF0aC5taW4obixyKTtvPmEmJmVbYV09PT10W2FdOykrK2E7cmV0dXJuIGEhPT1vJiYobj1lW2FdLHI9dFthXSkscj5uPy0xOm4+cj8xOjB9LGkuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJyYXciOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0saS5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighWShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJsaXN0IGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycy4iKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBpKDApO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gZVswXTt2YXIgbjtpZih2b2lkIDA9PT10KWZvcih0PTAsbj0wO248ZS5sZW5ndGg7bisrKXQrPWVbbl0ubGVuZ3RoO3ZhciByPW5ldyBpKHQpLGE9MDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbz1lW25dO28uY29weShyLGEpLGErPW8ubGVuZ3RofXJldHVybiByfSxpLmJ5dGVMZW5ndGg9ZyxpLnByb3RvdHlwZS5sZW5ndGg9dm9pZCAwLGkucHJvdG90eXBlLnBhcmVudD12b2lkIDAsaS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9FKHRoaXMsMCxlKTp5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFpLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWU/ITA6MD09PWkuY29tcGFyZSh0aGlzLGUpfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiIsdD1uLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsdCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPnQmJihlKz0iIC4uLiAiKSksIjxCdWZmZXIgIitlKyI+In0saS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlKXtpZighaS5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1lPzA6aS5jb21wYXJlKHRoaXMsZSl9LGkucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCxuKXtmb3IodmFyIHI9LTEsaT0wO24raTxlLmxlbmd0aDtpKyspaWYoZVtuK2ldPT09dFstMT09PXI/MDppLXJdKXtpZigtMT09PXImJihyPWkpLGktcisxPT09dC5sZW5ndGgpcmV0dXJuIG4rcn1lbHNlIHI9LTE7cmV0dXJuLTF9aWYodD4yMTQ3NDgzNjQ3P3Q9MjE0NzQ4MzY0NzotMjE0NzQ4MzY0OD50JiYodD0tMjE0NzQ4MzY0OCksdD4+PTAsMD09PXRoaXMubGVuZ3RoKXJldHVybi0xO2lmKHQ+PXRoaXMubGVuZ3RoKXJldHVybi0xO2lmKDA+dCYmKHQ9TWF0aC5tYXgodGhpcy5sZW5ndGgrdCwwKSksInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiAwPT09ZS5sZW5ndGg/LTE6U3RyaW5nLnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcyxlLHQpO2lmKGkuaXNCdWZmZXIoZSkpcmV0dXJuIG4odGhpcyxlLHQpO2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gaS5UWVBFRF9BUlJBWV9TVVBQT1JUJiYiZnVuY3Rpb24iPT09VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcyxlLHQpOm4odGhpcyxbZV0sdCk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS5sb2coIi5nZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLiIpLHRoaXMucmVhZFVJbnQ4KGUpfSxpLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS5sb2coIi5zZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLiIpLHRoaXMud3JpdGVVSW50OChlLHQpfSxpLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQsbixyKXtpZih2b2lkIDA9PT10KXI9InV0ZjgiLG49dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09biYmInN0cmluZyI9PXR5cGVvZiB0KXI9dCxuPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKGlzRmluaXRlKHQpKXQ9MHx0LGlzRmluaXRlKG4pPyhuPTB8bix2b2lkIDA9PT1yJiYocj0idXRmOCIpKToocj1uLG49dm9pZCAwKTtlbHNle3ZhciBpPXI7cj10LHQ9MHxuLG49aX12YXIgYT10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1ufHxuPmEpJiYobj1hKSxlLmxlbmd0aD4wJiYoMD5ufHwwPnQpfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJhdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO3J8fChyPSJ1dGY4Iik7Zm9yKHZhciBvPSExOzspc3dpdGNoKHIpe2Nhc2UiaGV4IjpyZXR1cm4gdih0aGlzLGUsdCxuKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBiKHRoaXMsZSx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiB3KHRoaXMsZSx0LG4pO2Nhc2UiYmluYXJ5IjpyZXR1cm4geCh0aGlzLGUsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIFModGhpcyxlLHQsbik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBBKHRoaXMsZSx0LG4pO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksbz0hMH19LGkucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX0saS5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmxlbmd0aDtlPX5+ZSx0PXZvaWQgMD09PXQ/bjp+fnQsMD5lPyhlKz1uLDA+ZSYmKGU9MCkpOmU+biYmKGU9biksMD50Pyh0Kz1uLDA+dCYmKHQ9MCkpOnQ+biYmKHQ9biksZT50JiYodD1lKTt2YXIgcjtpZihpLlRZUEVEX0FSUkFZX1NVUFBPUlQpcj1pLl9hdWdtZW50KHRoaXMuc3ViYXJyYXkoZSx0KSk7ZWxzZXt2YXIgYT10LWU7cj1uZXcgaShhLHZvaWQgMCk7Zm9yKHZhciBvPTA7YT5vO28rKylyW29dPXRoaXNbbytlXX1yZXR1cm4gci5sZW5ndGgmJihyLnBhcmVudD10aGlzLnBhcmVudHx8dGhpcykscn0saS5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQsbil7ZT0wfGUsdD0wfHQsbnx8SShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2VdLGk9MSxhPTA7KythPHQmJihpKj0yNTYpOylyKz10aGlzW2UrYV0qaTtyZXR1cm4gcn0saS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQsbil7ZT0wfGUsdD0wfHQsbnx8SShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2UrLS10XSxpPTE7dD4wJiYoaSo9MjU2KTspcis9dGhpc1tlKy0tdF0qaTtyZXR1cm4gcn0saS5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEkoZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxpLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8SShlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxpLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8SShlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDh8dGhpc1tlKzFdfSxpLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8SShlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LGkucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxJKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0saS5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxuKXtlPTB8ZSx0PTB8dCxufHxJKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0saT0xLGE9MDsrK2E8dCYmKGkqPTI1Nik7KXIrPXRoaXNbZSthXSppO3JldHVybiBpKj0xMjgscj49aSYmKHItPU1hdGgucG93KDIsOCp0KSkscn0saS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxuKXtlPTB8ZSx0PTB8dCxufHxJKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXQsaT0xLGE9dGhpc1tlKy0tcl07cj4wJiYoaSo9MjU2KTspYSs9dGhpc1tlKy0tcl0qaTtyZXR1cm4gaSo9MTI4LGE+PWkmJihhLT1NYXRoLnBvdygyLDgqdCkpLGF9LGkucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEkoZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0saS5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxJKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LGkucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7dHx8SShlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxpLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxJKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNnx0aGlzW2UrM108PDI0fSxpLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxJKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxpLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxJKGUsNCx0aGlzLmxlbmd0aCksSi5yZWFkKHRoaXMsZSwhMCwyMyw0KX0saS5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8SShlLDQsdGhpcy5sZW5ndGgpLEoucmVhZCh0aGlzLGUsITEsMjMsNCl9LGkucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxJKGUsOCx0aGlzLmxlbmd0aCksSi5yZWFkKHRoaXMsZSwhMCw1Miw4KX0saS5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEkoZSw4LHRoaXMubGVuZ3RoKSxKLnJlYWQodGhpcyxlLCExLDUyLDgpfSxpLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtlPStlLHQ9MHx0LG49MHxuLHJ8fF8odGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiksMCk7dmFyIGk9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KythPG4mJihpKj0yNTYpOyl0aGlzW3QrYV09ZS9pJjI1NTtyZXR1cm4gdCtufSxpLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtlPStlLHQ9MHx0LG49MHxuLHJ8fF8odGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiksMCk7dmFyIGk9bi0xLGE9MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKGEqPTI1Nik7KXRoaXNbdCtpXT1lL2EmMjU1O3JldHVybiB0K259LGkucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ9MHx0LG58fF8odGhpcyxlLHQsMSwyNTUsMCksaS5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPWUsdCsxfSxpLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0PTB8dCxufHxfKHRoaXMsZSx0LDIsNjU1MzUsMCksaS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWUsdGhpc1t0KzFdPWU+Pj44KTpEKHRoaXMsZSx0LCEwKSx0KzJ9LGkucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ9MHx0LG58fF8odGhpcyxlLHQsMiw2NTUzNSwwKSxpLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPWUpOkQodGhpcyxlLHQsITEpLHQrMn0saS5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD0wfHQsbnx8Xyh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksaS5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09ZSk6TCh0aGlzLGUsdCwhMCksdCs0fSxpLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0PTB8dCxufHxfKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxpLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT1lKTpMKHRoaXMsZSx0LCExKSx0KzR9LGkucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0PTB8dCwhcil7dmFyIGk9TWF0aC5wb3coMiw4Km4tMSk7Xyh0aGlzLGUsdCxuLGktMSwtaSl9dmFyIGE9MCxvPTEscz0wPmU/MTowO2Zvcih0aGlzW3RdPTI1NSZlOysrYTxuJiYobyo9MjU2KTspdGhpc1t0K2FdPShlL28+PjApLXMmMjU1O3JldHVybiB0K259LGkucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT0rZSx0PTB8dCwhcil7dmFyIGk9TWF0aC5wb3coMiw4Km4tMSk7Xyh0aGlzLGUsdCxuLGktMSwtaSl9dmFyIGE9bi0xLG89MSxzPTA+ZT8xOjA7Zm9yKHRoaXNbdCthXT0yNTUmZTstLWE+PTAmJihvKj0yNTYpOyl0aGlzW3QrYV09KGUvbz4+MCktcyYyNTU7cmV0dXJuIHQrbn0saS5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0PTB8dCxufHxfKHRoaXMsZSx0LDEsMTI3LC0xMjgpLGkuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksMD5lJiYoZT0yNTUrZSsxKSx0aGlzW3RdPWUsdCsxfSxpLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ9MHx0LG58fF8odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLGkuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lLHRoaXNbdCsxXT1lPj4+OCk6RCh0aGlzLGUsdCwhMCksdCsyfSxpLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ9MHx0LG58fF8odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLGkuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09ZSk6RCh0aGlzLGUsdCwhMSksdCsyfSxpLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ9MHx0LG58fF8odGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxpLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpMKHRoaXMsZSx0LCEwKSx0KzR9LGkucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD0wfHQsbnx8Xyh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLDA+ZSYmKGU9NDI5NDk2NzI5NStlKzEpLGkuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPWUpOkwodGhpcyxlLHQsITEpLHQrNH0saS5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gTih0aGlzLGUsdCwhMCxuKX0saS5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gTih0aGlzLGUsdCwhMSxuKX0saS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuICQodGhpcyxlLHQsITAsbil9LGkucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAkKHRoaXMsZSx0LCExLG4pfSxpLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxuLHIpe2lmKG58fChuPTApLHJ8fDA9PT1yfHwocj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxyPjAmJm4+ciYmKHI9bikscj09PW4pcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoMD50KXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYoMD5ufHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKDA+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxyLW4mJihyPWUubGVuZ3RoLXQrbik7dmFyIGE9ci1uO2lmKDFlMz5hfHwhaS5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgbz0wO2E+bztvKyspZVtvK3RdPXRoaXNbbytuXTtlbHNlIGUuX3NldCh0aGlzLnN1YmFycmF5KG4sbithKSx0KTtyZXR1cm4gYX0saS5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQsbil7aWYoZXx8KGU9MCksdHx8KHQ9MCksbnx8KG49dGhpcy5sZW5ndGgpLHQ+bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiZW5kIDwgc3RhcnQiKTtpZihuIT09dCYmMCE9PXRoaXMubGVuZ3RoKXtpZigwPnR8fHQ+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzdGFydCBvdXQgb2YgYm91bmRzIik7aWYoMD5ufHxuPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJlbmQgb3V0IG9mIGJvdW5kcyIpO3ZhciByO2lmKCJudW1iZXIiPT10eXBlb2YgZSlmb3Iocj10O24+cjtyKyspdGhpc1tyXT1lO2Vsc2V7dmFyIGk9VShlLnRvU3RyaW5nKCkpLGE9aS5sZW5ndGg7Zm9yKHI9dDtuPnI7cisrKXRoaXNbcl09aVtyJWFdfXJldHVybiB0aGlzfX0saS5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheSl7aWYoaS5UWVBFRF9BUlJBWV9TVVBQT1JUKXJldHVybiBuZXcgaSh0aGlzKS5idWZmZXI7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMubGVuZ3RoKSx0PTAsbj1lLmxlbmd0aDtuPnQ7dCs9MSllW3RdPXRoaXNbdF07cmV0dXJuIGUuYnVmZmVyfXRocm93IG5ldyBUeXBlRXJyb3IoIkJ1ZmZlci50b0FycmF5QnVmZmVyIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyIil9O3ZhciBRPWkucHJvdG90eXBlO2kuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29uc3RydWN0b3I9aSxlLl9pc0J1ZmZlcj0hMCxlLl9zZXQ9ZS5zZXQsZS5nZXQ9US5nZXQsZS5zZXQ9US5zZXQsZS53cml0ZT1RLndyaXRlLGUudG9TdHJpbmc9US50b1N0cmluZyxlLnRvTG9jYWxlU3RyaW5nPVEudG9TdHJpbmcsZS50b0pTT049US50b0pTT04sZS5lcXVhbHM9US5lcXVhbHMsZS5jb21wYXJlPVEuY29tcGFyZSxlLmluZGV4T2Y9US5pbmRleE9mLGUuY29weT1RLmNvcHksZS5zbGljZT1RLnNsaWNlLGUucmVhZFVJbnRMRT1RLnJlYWRVSW50TEUsZS5yZWFkVUludEJFPVEucmVhZFVJbnRCRSxlLnJlYWRVSW50OD1RLnJlYWRVSW50OCxlLnJlYWRVSW50MTZMRT1RLnJlYWRVSW50MTZMRSxlLnJlYWRVSW50MTZCRT1RLnJlYWRVSW50MTZCRSxlLnJlYWRVSW50MzJMRT1RLnJlYWRVSW50MzJMRSxlLnJlYWRVSW50MzJCRT1RLnJlYWRVSW50MzJCRSxlLnJlYWRJbnRMRT1RLnJlYWRJbnRMRSxlLnJlYWRJbnRCRT1RLnJlYWRJbnRCRSxlLnJlYWRJbnQ4PVEucmVhZEludDgsZS5yZWFkSW50MTZMRT1RLnJlYWRJbnQxNkxFLGUucmVhZEludDE2QkU9US5yZWFkSW50MTZCRSxlLnJlYWRJbnQzMkxFPVEucmVhZEludDMyTEUsZS5yZWFkSW50MzJCRT1RLnJlYWRJbnQzMkJFLGUucmVhZEZsb2F0TEU9US5yZWFkRmxvYXRMRSxlLnJlYWRGbG9hdEJFPVEucmVhZEZsb2F0QkUsZS5yZWFkRG91YmxlTEU9US5yZWFkRG91YmxlTEUsZS5yZWFkRG91YmxlQkU9US5yZWFkRG91YmxlQkUsZS53cml0ZVVJbnQ4PVEud3JpdGVVSW50OCxlLndyaXRlVUludExFPVEud3JpdGVVSW50TEUsZS53cml0ZVVJbnRCRT1RLndyaXRlVUludEJFLGUud3JpdGVVSW50MTZMRT1RLndyaXRlVUludDE2TEUsZS53cml0ZVVJbnQxNkJFPVEud3JpdGVVSW50MTZCRSxlLndyaXRlVUludDMyTEU9US53cml0ZVVJbnQzMkxFLGUud3JpdGVVSW50MzJCRT1RLndyaXRlVUludDMyQkUsZS53cml0ZUludExFPVEud3JpdGVJbnRMRSxlLndyaXRlSW50QkU9US53cml0ZUludEJFLGUud3JpdGVJbnQ4PVEud3JpdGVJbnQ4LGUud3JpdGVJbnQxNkxFPVEud3JpdGVJbnQxNkxFLGUud3JpdGVJbnQxNkJFPVEud3JpdGVJbnQxNkJFLGUud3JpdGVJbnQzMkxFPVEud3JpdGVJbnQzMkxFLGUud3JpdGVJbnQzMkJFPVEud3JpdGVJbnQzMkJFLGUud3JpdGVGbG9hdExFPVEud3JpdGVGbG9hdExFLGUud3JpdGVGbG9hdEJFPVEud3JpdGVGbG9hdEJFLGUud3JpdGVEb3VibGVMRT1RLndyaXRlRG91YmxlTEUsZS53cml0ZURvdWJsZUJFPVEud3JpdGVEb3VibGVCRSxlLmZpbGw9US5maWxsLGUuaW5zcGVjdD1RLmluc3BlY3QsZS50b0FycmF5QnVmZmVyPVEudG9BcnJheUJ1ZmZlcixlfTt2YXIgWD0vW14rXC8wLTlBLXpcLV0vZ30seyJiYXNlNjQtanMiOjE0LGllZWU3NTQ6MTUsImlzLWFycmF5IjoxNn1dLDE0OltmdW5jdGlvbihlLHQsbil7dmFyIHI9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHQ9PT1vfHx0PT09cD82Mjp0PT09c3x8dD09PWY/NjM6bD50Py0xOmwrMTA+dD90LWwrMjYrMjY6YysyNj50P3QtYzp1KzI2PnQ/dC11KzI2OnZvaWQgMH1mdW5jdGlvbiBuKGUpe2Z1bmN0aW9uIG4oZSl7dVtwKytdPWV9dmFyIHIsaSxvLHMsbCx1O2lmKGUubGVuZ3RoJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgYz1lLmxlbmd0aDtsPSI9Ij09PWUuY2hhckF0KGMtMik/MjoiPSI9PT1lLmNoYXJBdChjLTEpPzE6MCx1PW5ldyBhKDMqZS5sZW5ndGgvNC1sKSxvPWw+MD9lLmxlbmd0aC00OmUubGVuZ3RoO3ZhciBwPTA7Zm9yKHI9MCxpPTA7bz5yO3IrPTQsaSs9MylzPXQoZS5jaGFyQXQocikpPDwxOHx0KGUuY2hhckF0KHIrMSkpPDwxMnx0KGUuY2hhckF0KHIrMikpPDw2fHQoZS5jaGFyQXQociszKSksbigoMTY3MTE2ODAmcyk+PjE2KSxuKCg2NTI4MCZzKT4+OCksbigyNTUmcyk7cmV0dXJuIDI9PT1sPyhzPXQoZS5jaGFyQXQocikpPDwyfHQoZS5jaGFyQXQocisxKSk+PjQsbigyNTUmcykpOjE9PT1sJiYocz10KGUuY2hhckF0KHIpKTw8MTB8dChlLmNoYXJBdChyKzEpKTw8NHx0KGUuY2hhckF0KHIrMikpPj4yLG4ocz4+OCYyNTUpLG4oMjU1JnMpKSx1fWZ1bmN0aW9uIGkoZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gci5jaGFyQXQoZSl9ZnVuY3Rpb24gbihlKXtyZXR1cm4gdChlPj4xOCY2MykrdChlPj4xMiY2MykrdChlPj42JjYzKSt0KDYzJmUpfXZhciBpLGEsbyxzPWUubGVuZ3RoJTMsbD0iIjtmb3IoaT0wLG89ZS5sZW5ndGgtcztvPmk7aSs9MylhPShlW2ldPDwxNikrKGVbaSsxXTw8OCkrZVtpKzJdLGwrPW4oYSk7c3dpdGNoKHMpe2Nhc2UgMTphPWVbZS5sZW5ndGgtMV0sbCs9dChhPj4yKSxsKz10KGE8PDQmNjMpLGwrPSI9PSI7YnJlYWs7Y2FzZSAyOmE9KGVbZS5sZW5ndGgtMl08PDgpK2VbZS5sZW5ndGgtMV0sbCs9dChhPj4xMCksbCs9dChhPj40JjYzKSxsKz10KGE8PDImNjMpLGwrPSI9In1yZXR1cm4gbH12YXIgYT0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxvPSIrIi5jaGFyQ29kZUF0KDApLHM9Ii8iLmNoYXJDb2RlQXQoMCksbD0iMCIuY2hhckNvZGVBdCgwKSx1PSJhIi5jaGFyQ29kZUF0KDApLGM9IkEiLmNoYXJDb2RlQXQoMCkscD0iLSIuY2hhckNvZGVBdCgwKSxmPSJfIi5jaGFyQ29kZUF0KDApO2UudG9CeXRlQXJyYXk9bixlLmZyb21CeXRlQXJyYXk9aX0oInVuZGVmaW5lZCI9PXR5cGVvZiBuP3RoaXMuYmFzZTY0anM9e306bil9LHt9XSwxNTpbZnVuY3Rpb24oZSx0LG4pe24ucmVhZD1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBhLG8scz04Kmktci0xLGw9KDE8PHMpLTEsdT1sPj4xLGM9LTcscD1uP2ktMTowLGY9bj8tMToxLGg9ZVt0K3BdO2ZvcihwKz1mLGE9aCYoMTw8LWMpLTEsaD4+PS1jLGMrPXM7Yz4wO2E9MjU2KmErZVt0K3BdLHArPWYsYy09OCk7Zm9yKG89YSYoMTw8LWMpLTEsYT4+PS1jLGMrPXI7Yz4wO289MjU2Km8rZVt0K3BdLHArPWYsYy09OCk7aWYoMD09PWEpYT0xLXU7ZWxzZXtpZihhPT09bClyZXR1cm4gbz9OYU46KGg/LTE6MSkqKDEvMCk7bys9TWF0aC5wb3coMixyKSxhLT11fXJldHVybihoPy0xOjEpKm8qTWF0aC5wb3coMixhLXIpfSxuLndyaXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbyxzLGwsdT04KmEtaS0xLGM9KDE8PHUpLTEscD1jPj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxoPXI/MDphLTEsZD1yPzE6LTEsbT0wPnR8fDA9PT10JiYwPjEvdD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KHM9aXNOYU4odCk/MTowLG89Yyk6KG89TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoobD1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSxsKj0yKSx0Kz1vK3A+PTE/Zi9sOmYqTWF0aC5wb3coMiwxLXApLHQqbD49MiYmKG8rKyxsLz0yKSxvK3A+PWM/KHM9MCxvPWMpOm8rcD49MT8ocz0odCpsLTEpKk1hdGgucG93KDIsaSksbys9cCk6KHM9dCpNYXRoLnBvdygyLHAtMSkqTWF0aC5wb3coMixpKSxvPTApKTtpPj04O2VbbitoXT0yNTUmcyxoKz1kLHMvPTI1NixpLT04KTtmb3Iobz1vPDxpfHMsdSs9aTt1PjA7ZVtuK2hdPTI1NSZvLGgrPWQsby89MjU2LHUtPTgpO2VbbitoLWRdfD0xMjgqbX19LHt9XSwxNjpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPUFycmF5LmlzQXJyYXksaT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3QuZXhwb3J0cz1yfHxmdW5jdGlvbihlKXtyZXR1cm4hIWUmJiJbb2JqZWN0IEFycmF5XSI9PWkuY2FsbChlKX19LHt9XSwxNzpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoKXtpZighcyl7cz0hMDtmb3IodmFyIGUsdD1vLmxlbmd0aDt0Oyl7ZT1vLG89W107Zm9yKHZhciBuPS0xOysrbjx0OyllW25dKCk7dD1vLmxlbmd0aH1zPSExfX1mdW5jdGlvbiBpKCl7fXZhciBhPXQuZXhwb3J0cz17fSxvPVtdLHM9ITE7YS5uZXh0VGljaz1mdW5jdGlvbihlKXtvLnB1c2goZSksc3x8c2V0VGltZW91dChyLDApfSxhLnRpdGxlPSJicm93c2VyIixhLmJyb3dzZXI9ITAsYS5lbnY9e30sYS5hcmd2PVtdLGEudmVyc2lvbj0iIixhLnZlcnNpb25zPXt9LGEub249aSxhLmFkZExpc3RlbmVyPWksYS5vbmNlPWksYS5vZmY9aSxhLnJlbW92ZUxpc3RlbmVyPWksYS5yZW1vdmVBbGxMaXN0ZW5lcnM9aSxhLmVtaXQ9aSxhLmJpbmRpbmc9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxhLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sYS5jaGRpcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxhLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sMTg6W2Z1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIG47cmV0dXJuIG49dCBpbnN0YW5jZW9mIGU/dDpuZXcgZSh0LnRvU3RyaW5nKCksImJpbmFyeSIpLG4udG9TdHJpbmcoImJhc2U2NCIpfXQuZXhwb3J0cz1ufSgpfSkuY2FsbCh0aGlzLGUoImJ1ZmZlciIpLkJ1ZmZlcil9LHtidWZmZXI6MTN9XSwxOTpbZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsbixyLGkpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZT8odGhpcy5kb21haW49dHx8dm9pZCAwLHRoaXMucGF0aD1ufHwiLyIsdGhpcy5zZWN1cmU9ISFyLHRoaXMuc2NyaXB0PSEhaSx0aGlzKTpuZXcgZSh0LG4scixpKX1mdW5jdGlvbiB0KGUsbixyKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHQ/ZTp0aGlzIGluc3RhbmNlb2YgdD8odGhpcy5uYW1lPW51bGwsdGhpcy52YWx1ZT1udWxsLHRoaXMuZXhwaXJhdGlvbl9kYXRlPTEvMCx0aGlzLnBhdGg9U3RyaW5nKHJ8fCIvIiksdGhpcy5leHBsaWNpdF9wYXRoPSExLHRoaXMuZG9tYWluPW58fG51bGwsdGhpcy5leHBsaWNpdF9kb21haW49ITEsdGhpcy5zZWN1cmU9ITEsdGhpcy5ub3NjcmlwdD0hMSxlJiZ0aGlzLnBhcnNlKGUsbixyKSx0aGlzKTpuZXcgdChlKX1mdW5jdGlvbiByKCl7dmFyIGUsbixpO3JldHVybiB0aGlzIGluc3RhbmNlb2Ygcj8oZT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc2V0Q29va2llPWZ1bmN0aW9uKHIsYSxvKXt2YXIgcyxsO2lmKHI9bmV3IHQocixhLG8pLHM9ci5leHBpcmF0aW9uX2RhdGU8PURhdGUubm93KCksdm9pZCAwIT09ZVtyLm5hbWVdKXtmb3Iobj1lW3IubmFtZV0sbD0wO2w8bi5sZW5ndGg7bCs9MSlpZihpPW5bbF0saS5jb2xsaWRlc1dpdGgocikpcmV0dXJuIHM/KG4uc3BsaWNlKGwsMSksMD09PW4ubGVuZ3RoJiZkZWxldGUgZVtyLm5hbWVdLCExKToobltsXT1yLHIpO3JldHVybiBzPyExOihuLnB1c2gocikscil9cmV0dXJuIHM/ITE6KGVbci5uYW1lXT1bcl0sZVtyLm5hbWVdKX0sdGhpcy5nZXRDb29raWU9ZnVuY3Rpb24odCxyKXt2YXIgaSxhO2lmKG49ZVt0XSlmb3IoYT0wO2E8bi5sZW5ndGg7YSs9MSlpZihpPW5bYV0saS5leHBpcmF0aW9uX2RhdGU8PURhdGUubm93KCkpMD09PW4ubGVuZ3RoJiZkZWxldGUgZVtpLm5hbWVdO2Vsc2UgaWYoaS5tYXRjaGVzKHIpKXJldHVybiBpfSx0aGlzLmdldENvb2tpZXM9ZnVuY3Rpb24odCl7dmFyIG4scixpPVtdO2ZvcihuIGluIGUpcj10aGlzLmdldENvb2tpZShuLHQpLHImJmkucHVzaChyKTtyZXR1cm4gaS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBpLmpvaW4oIjoiKX0saS50b1ZhbHVlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvVmFsdWVTdHJpbmcoKX0pLmpvaW4oIjsiKX0saX0sdGhpcyk6bmV3IHJ9bi5Db29raWVBY2Nlc3NJbmZvPWUsbi5Db29raWU9dCx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPVt0aGlzLm5hbWUrIj0iK3RoaXMudmFsdWVdO3JldHVybiB0aGlzLmV4cGlyYXRpb25fZGF0ZSE9PTEvMCYmZS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodGhpcy5leHBpcmF0aW9uX2RhdGUpLnRvR01UU3RyaW5nKCkpLHRoaXMuZG9tYWluJiZlLnB1c2goImRvbWFpbj0iK3RoaXMuZG9tYWluKSx0aGlzLnBhdGgmJmUucHVzaCgicGF0aD0iK3RoaXMucGF0aCksdGhpcy5zZWN1cmUmJmUucHVzaCgic2VjdXJlIiksdGhpcy5ub3NjcmlwdCYmZS5wdXNoKCJodHRwb25seSIpLGUuam9pbigiOyAiKX0sdC5wcm90b3R5cGUudG9WYWx1ZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUrIj0iK3RoaXMudmFsdWV9O3ZhciBpPS9bOl0oPz1ccypbYS16QS1aMC05X1wtXStccypbPV0pL2c7dC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSxuLHIpe2lmKHRoaXMgaW5zdGFuY2VvZiB0KXt2YXIgaSxhPWUuc3BsaXQoIjsiKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuISFlfSksbz1hWzBdLm1hdGNoKC8oW149XSspPShbXHNcU10qKS8pLHM9b1sxXSxsPW9bMl07Zm9yKHRoaXMubmFtZT1zLHRoaXMudmFsdWU9bCxpPTE7aTxhLmxlbmd0aDtpKz0xKXN3aXRjaChvPWFbaV0ubWF0Y2goLyhbXj1dKykoPzo9KFtcc1xTXSopKT8vKSxzPW9bMV0udHJpbSgpLnRvTG93ZXJDYXNlKCksbD1vWzJdLHMpe2Nhc2UiaHR0cG9ubHkiOnRoaXMubm9zY3JpcHQ9ITA7YnJlYWs7Y2FzZSJleHBpcmVzIjp0aGlzLmV4cGlyYXRpb25fZGF0ZT1sP051bWJlcihEYXRlLnBhcnNlKGwpKToxLzA7YnJlYWs7Y2FzZSJwYXRoIjp0aGlzLnBhdGg9bD9sLnRyaW0oKToiIix0aGlzLmV4cGxpY2l0X3BhdGg9ITA7YnJlYWs7Y2FzZSJkb21haW4iOnRoaXMuZG9tYWluPWw/bC50cmltKCk6IiIsdGhpcy5leHBsaWNpdF9kb21haW49ISF0aGlzLmRvbWFpbjticmVhaztjYXNlInNlY3VyZSI6dGhpcy5zZWN1cmU9ITB9cmV0dXJuIHRoaXMuZXhwbGljaXRfcGF0aHx8KHRoaXMucGF0aD1yfHwiLyIpLHRoaXMuZXhwbGljaXRfZG9tYWlufHwodGhpcy5kb21haW49biksdGhpc31yZXR1cm4obmV3IHQpLnBhcnNlKGUsbixyKX0sdC5wcm90b3R5cGUubWF0Y2hlcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ub3NjcmlwdCYmZS5zY3JpcHR8fHRoaXMuc2VjdXJlJiYhZS5zZWN1cmV8fCF0aGlzLmNvbGxpZGVzV2l0aChlKT8hMTohMH0sdC5wcm90b3R5cGUuY29sbGlkZXNXaXRoPWZ1bmN0aW9uKGUpe2lmKHRoaXMucGF0aCYmIWUucGF0aHx8dGhpcy5kb21haW4mJiFlLmRvbWFpbilyZXR1cm4hMTtpZih0aGlzLnBhdGgmJjAhPT1lLnBhdGguaW5kZXhPZih0aGlzLnBhdGgpKXJldHVybiExO2lmKCF0aGlzLmV4cGxpY2l0X3BhdGgmJnRoaXMucGF0aCE9PWUucGF0aClyZXR1cm4hMTt2YXIgdD1lLmRvbWFpbiYmZS5kb21haW4ucmVwbGFjZSgvXltcLl0vLCIiKSxuPXRoaXMuZG9tYWluJiZ0aGlzLmRvbWFpbi5yZXBsYWNlKC9eW1wuXS8sIiIpO2lmKG49PT10KXJldHVybiEwO2lmKG4pe2lmKCF0aGlzLmV4cGxpY2l0X2RvbWFpbilyZXR1cm4hMTt2YXIgcj10LmluZGV4T2Yobik7cmV0dXJuLTE9PT1yfHxyIT09dC5sZW5ndGgtbi5sZW5ndGg/ITE6ITB9cmV0dXJuITB9LG4uQ29va2llSmFyPXIsci5wcm90b3R5cGUuc2V0Q29va2llcz1mdW5jdGlvbihlLG4scil7ZT1BcnJheS5pc0FycmF5KGUpP2U6ZS5zcGxpdChpKTt2YXIgYSxvLHM9W107Zm9yKGU9ZS5tYXAodCksYT0wO2E8ZS5sZW5ndGg7YSs9MSlvPWVbYV0sdGhpcy5zZXRDb29raWUobyxuLHIpJiZzLnB1c2gobyk7cmV0dXJuIHN9fSgpfSx7fV0sMjA6W2Z1bmN0aW9uKHQsbixyKXshZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIG4mJiJvYmplY3QiPT10eXBlb2Ygbi5leHBvcnRzP24uZXhwb3J0cz1lLmRvY3VtZW50P3QoZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIWUuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIHQoZSl9OnQoZSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcihlKXt2YXIgdD0ibGVuZ3RoImluIGUmJmUubGVuZ3RoLG49ZWUudHlwZShlKTtyZXR1cm4iZnVuY3Rpb24iPT09bnx8ZWUuaXNXaW5kb3coZSk/ITE6MT09PWUubm9kZVR5cGUmJnQ/ITA6ImFycmF5Ij09PW58fDA9PT10fHwibnVtYmVyIj09dHlwZW9mIHQmJnQ+MCYmdC0xIGluIGV9ZnVuY3Rpb24gaShlLHQsbil7aWYoZWUuaXNGdW5jdGlvbih0KSlyZXR1cm4gZWUuZ3JlcChlLGZ1bmN0aW9uKGUscil7cmV0dXJuISF0LmNhbGwoZSxyLGUpIT09bn0pO2lmKHQubm9kZVR5cGUpcmV0dXJuIGVlLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQhPT1ufSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZihsZS50ZXN0KHQpKXJldHVybiBlZS5maWx0ZXIodCxlLG4pO3Q9ZWUuZmlsdGVyKHQsZSl9cmV0dXJuIGVlLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gSi5jYWxsKHQsZSk+PTAhPT1ufSl9ZnVuY3Rpb24gYShlLHQpe2Zvcig7KGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlOyk7cmV0dXJuIGV9ZnVuY3Rpb24gbyhlKXt2YXIgdD1tZVtlXT17fTtyZXR1cm4gZWUuZWFjaChlLm1hdGNoKGRlKXx8W10sZnVuY3Rpb24oZSxuKXt0W25dPSEwfSksdH1mdW5jdGlvbiBzKCl7Ry5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixzLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHMsITEpLGVlLnJlYWR5KCl9ZnVuY3Rpb24gbCgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmNhY2hlPXt9LDAse2dldDpmdW5jdGlvbigpe3JldHVybnt9fX0pLHRoaXMuZXhwYW5kbz1lZS5leHBhbmRvK2wudWlkKyt9ZnVuY3Rpb24gdShlLHQsbil7dmFyIHI7aWYodm9pZCAwPT09biYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZSh4ZSwiLSQxIikudG9Mb3dlckNhc2UoKSxuPWUuZ2V0QXR0cmlidXRlKHIpLCJzdHJpbmciPT10eXBlb2Ygbil7dHJ5e249InRydWUiPT09bj8hMDoiZmFsc2UiPT09bj8hMToibnVsbCI9PT1uP251bGw6K24rIiI9PT1uPytuOndlLnRlc3Qobik/ZWUucGFyc2VKU09OKG4pOm59Y2F0Y2goaSl7fWJlLnNldChlLHQsbil9ZWxzZSBuPXZvaWQgMDtyZXR1cm4gbn1mdW5jdGlvbiBjKCl7cmV0dXJuITB9ZnVuY3Rpb24gcCgpe3JldHVybiExfWZ1bmN0aW9uIGYoKXt0cnl7cmV0dXJuIEcuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gZWUubm9kZU5hbWUoZSwidGFibGUiKSYmZWUubm9kZU5hbWUoMTEhPT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGUuYXBwZW5kQ2hpbGQoZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmV9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS50eXBlPShudWxsIT09ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIG0oZSl7dmFyIHQ9TWUuZXhlYyhlLnR5cGUpO3JldHVybiB0P2UudHlwZT10WzFdOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBnKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtyPm47bisrKXZlLnNldChlW25dLCJnbG9iYWxFdmFsIiwhdHx8dmUuZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9ZnVuY3Rpb24geShlLHQpe3ZhciBuLHIsaSxhLG8scyxsLHU7aWYoMT09PXQubm9kZVR5cGUpe2lmKHZlLmhhc0RhdGEoZSkmJihhPXZlLmFjY2VzcyhlKSxvPXZlLnNldCh0LGEpLHU9YS5ldmVudHMpKXtkZWxldGUgby5oYW5kbGUsby5ldmVudHM9e307Zm9yKGkgaW4gdSlmb3Iobj0wLHI9dVtpXS5sZW5ndGg7cj5uO24rKyllZS5ldmVudC5hZGQodCxpLHVbaV1bbl0pfWJlLmhhc0RhdGEoZSkmJihzPWJlLmFjY2VzcyhlKSxsPWVlLmV4dGVuZCh7fSxzKSxiZS5zZXQodCxsKSl9fWZ1bmN0aW9uIHYoZSx0KXt2YXIgbj1lLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKTplLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W107cmV0dXJuIHZvaWQgMD09PXR8fHQmJmVlLm5vZGVOYW1lKGUsdCk/ZWUubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24gYihlLHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsiaW5wdXQiPT09biYmRWUudGVzdChlLnR5cGUpP3QuY2hlY2tlZD1lLmNoZWNrZWQ6KCJpbnB1dCI9PT1ufHwidGV4dGFyZWEiPT09bikmJih0LmRlZmF1bHRWYWx1ZT1lLmRlZmF1bHRWYWx1ZSl9ZnVuY3Rpb24gdyhlLG4pe3ZhciByLGk9ZWUobi5jcmVhdGVFbGVtZW50KGUpKS5hcHBlbmRUbyhuLmJvZHkpLGE9dC5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZSYmKHI9dC5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZShpWzBdKSk/ci5kaXNwbGF5OmVlLmNzcyhpWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGkuZGV0YWNoKCksYX1mdW5jdGlvbiB4KGUpe3ZhciB0PUcsbj1CZVtlXTtyZXR1cm4gbnx8KG49dyhlLHQpLCJub25lIiE9PW4mJm58fChVZT0oVWV8fGVlKCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IikpLmFwcGVuZFRvKHQuZG9jdW1lbnRFbGVtZW50KSx0PVVlWzBdLmNvbnRlbnREb2N1bWVudCx0LndyaXRlKCksdC5jbG9zZSgpLG49dyhlLHQpLFVlLmRldGFjaCgpKSxCZVtlXT1uKSxufWZ1bmN0aW9uIFMoZSx0LG4pe3ZhciByLGksYSxvLHM9ZS5zdHlsZTtyZXR1cm4gbj1ufHx6ZShlKSxuJiYobz1uLmdldFByb3BlcnR5VmFsdWUodCl8fG5bdF0pLG4mJigiIiE9PW98fGVlLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8KG89ZWUuc3R5bGUoZSx0KSksSGUudGVzdChvKSYmcWUudGVzdCh0KSYmKHI9cy53aWR0aCxpPXMubWluV2lkdGgsYT1zLm1heFdpZHRoLHMubWluV2lkdGg9cy5tYXhXaWR0aD1zLndpZHRoPW8sbz1uLndpZHRoLHMud2lkdGg9cixzLm1pbldpZHRoPWkscy5tYXhXaWR0aD1hKSksdm9pZCAwIT09bz9vKyIiOm99ZnVuY3Rpb24gQShlLHQpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpP3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD10KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1mdW5jdGlvbiBDKGUsdCl7aWYodCBpbiBlKXJldHVybiB0O2Zvcih2YXIgbj10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSxyPXQsaT1RZS5sZW5ndGg7aS0tOylpZih0PVFlW2ldK24sdCBpbiBlKXJldHVybiB0O3JldHVybiByfWZ1bmN0aW9uIEUoZSx0LG4pe3ZhciByPVdlLmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzFdLShufHwwKSkrKHJbMl18fCJweCIpOnR9ZnVuY3Rpb24gayhlLHQsbixyLGkpe2Zvcih2YXIgYT1uPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKT80OiJ3aWR0aCI9PT10PzE6MCxvPTA7ND5hO2ErPTIpIm1hcmdpbiI9PT1uJiYobys9ZWUuY3NzKGUsbitBZVthXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKG8tPWVlLmNzcyhlLCJwYWRkaW5nIitBZVthXSwhMCxpKSksIm1hcmdpbiIhPT1uJiYoby09ZWUuY3NzKGUsImJvcmRlciIrQWVbYV0rIldpZHRoIiwhMCxpKSkpOihvKz1lZS5jc3MoZSwicGFkZGluZyIrQWVbYV0sITAsaSksInBhZGRpbmciIT09biYmKG8rPWVlLmNzcyhlLCJib3JkZXIiK0FlW2FdKyJXaWR0aCIsITAsaSkpKTtyZXR1cm4gb31mdW5jdGlvbiBPKGUsdCxuKXt2YXIgcj0hMCxpPSJ3aWR0aCI9PT10P2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHQsYT16ZShlKSxvPSJib3JkZXItYm94Ij09PWVlLmNzcyhlLCJib3hTaXppbmciLCExLGEpO2lmKDA+PWl8fG51bGw9PWkpe2lmKGk9UyhlLHQsYSksKDA+aXx8bnVsbD09aSkmJihpPWUuc3R5bGVbdF0pLEhlLnRlc3QoaSkpcmV0dXJuIGk7cj1vJiYoWC5ib3hTaXppbmdSZWxpYWJsZSgpfHxpPT09ZS5zdHlsZVt0XSksaT1wYXJzZUZsb2F0KGkpfHwwfXJldHVybiBpK2soZSx0LG58fChvPyJib3JkZXIiOiJjb250ZW50IikscixhKSsicHgifWZ1bmN0aW9uIGooZSx0KXtmb3IodmFyIG4scixpLGE9W10sbz0wLHM9ZS5sZW5ndGg7cz5vO28rKylyPWVbb10sci5zdHlsZSYmKGFbb109dmUuZ2V0KHIsIm9sZGRpc3BsYXkiKSxuPXIuc3R5bGUuZGlzcGxheSx0PyhhW29dfHwibm9uZSIhPT1ufHwoci5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmQ2UocikmJihhW29dPXZlLmFjY2VzcyhyLCJvbGRkaXNwbGF5Iix4KHIubm9kZU5hbWUpKSkpOihpPUNlKHIpLCJub25lIj09PW4mJml8fHZlLnNldChyLCJvbGRkaXNwbGF5IixpP246ZWUuY3NzKHIsImRpc3BsYXkiKSkpKTtmb3Iobz0wO3M+bztvKyspcj1lW29dLHIuc3R5bGUmJih0JiYibm9uZSIhPT1yLnN0eWxlLmRpc3BsYXkmJiIiIT09ci5zdHlsZS5kaXNwbGF5fHwoci5zdHlsZS5kaXNwbGF5PXQ/YVtvXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGV9ZnVuY3Rpb24gVChlLHQsbixyLGkpe3JldHVybiBuZXcgVC5wcm90b3R5cGUuaW5pdChlLHQsbixyLGkpfWZ1bmN0aW9uIEkoKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1hlPXZvaWQgMH0pLFhlPWVlLm5vdygpfWZ1bmN0aW9uIF8oZSx0KXt2YXIgbixyPTAsaT17aGVpZ2h0OmV9O2Zvcih0PXQ/MTowOzQ+cjtyKz0yLXQpbj1BZVtyXSxpWyJtYXJnaW4iK25dPWlbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihpLm9wYWNpdHk9aS53aWR0aD1lKSxpfWZ1bmN0aW9uIEQoZSx0LG4pe2Zvcih2YXIgcixpPShydFt0XXx8W10pLmNvbmNhdChydFsiKiJdKSxhPTAsbz1pLmxlbmd0aDtvPmE7YSsrKWlmKHI9aVthXS5jYWxsKG4sdCxlKSlyZXR1cm4gcn1mdW5jdGlvbiBMKGUsdCxuKXt2YXIgcixpLGEsbyxzLGwsdSxjLHA9dGhpcyxmPXt9LGg9ZS5zdHlsZSxkPWUubm9kZVR5cGUmJkNlKGUpLG09dmUuZ2V0KGUsImZ4c2hvdyIpO24ucXVldWV8fChzPWVlLl9xdWV1ZUhvb2tzKGUsImZ4IiksbnVsbD09cy51bnF1ZXVlZCYmKHMudW5xdWV1ZWQ9MCxsPXMuZW1wdHkuZmlyZSxzLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtzLnVucXVldWVkfHxsKCl9KSxzLnVucXVldWVkKysscC5hbHdheXMoZnVuY3Rpb24oKXtwLmFsd2F5cyhmdW5jdGlvbigpe3MudW5xdWV1ZWQtLSxlZS5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8cy5lbXB0eS5maXJlKCl9KX0pKSwxPT09ZS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gdHx8IndpZHRoImluIHQpJiYobi5vdmVyZmxvdz1baC5vdmVyZmxvdyxoLm92ZXJmbG93WCxoLm92ZXJmbG93WV0sdT1lZS5jc3MoZSwiZGlzcGxheSIpLGM9Im5vbmUiPT09dT92ZS5nZXQoZSwib2xkZGlzcGxheSIpfHx4KGUubm9kZU5hbWUpOnUsImlubGluZSI9PT1jJiYibm9uZSI9PT1lZS5jc3MoZSwiZmxvYXQiKSYmKGguZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihoLm92ZXJmbG93PSJoaWRkZW4iLHAuYWx3YXlzKGZ1bmN0aW9uKCl7aC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLGgub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0saC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKTtmb3IociBpbiB0KWlmKGk9dFtyXSxaZS5leGVjKGkpKXtpZihkZWxldGUgdFtyXSxhPWF8fCJ0b2dnbGUiPT09aSxpPT09KGQ/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWl8fCFtfHx2b2lkIDA9PT1tW3JdKWNvbnRpbnVlO2Q9ITB9ZltyXT1tJiZtW3JdfHxlZS5zdHlsZShlLHIpfWVsc2UgdT12b2lkIDA7aWYoZWUuaXNFbXB0eU9iamVjdChmKSkiaW5saW5lIj09PSgibm9uZSI9PT11P3goZS5ub2RlTmFtZSk6dSkmJihoLmRpc3BsYXk9dSk7ZWxzZXttPyJoaWRkZW4iaW4gbSYmKGQ9bS5oaWRkZW4pOm09dmUuYWNjZXNzKGUsImZ4c2hvdyIse30pLGEmJihtLmhpZGRlbj0hZCksZD9lZShlKS5zaG93KCk6cC5kb25lKGZ1bmN0aW9uKCl7ZWUoZSkuaGlkZSgpfSkscC5kb25lKGZ1bmN0aW9uKCl7dmFyIHQ7dmUucmVtb3ZlKGUsImZ4c2hvdyIpO2Zvcih0IGluIGYpZWUuc3R5bGUoZSx0LGZbdF0pfSk7Zm9yKHIgaW4gZilvPUQoZD9tW3JdOjAscixwKSxyIGluIG18fChtW3JdPW8uc3RhcnQsZCYmKG8uZW5kPW8uc3RhcnQsby5zdGFydD0id2lkdGgiPT09cnx8ImhlaWdodCI9PT1yPzE6MCkpfX1mdW5jdGlvbiBQKGUsdCl7dmFyIG4scixpLGEsbztmb3IobiBpbiBlKWlmKHI9ZWUuY2FtZWxDYXNlKG4pLGk9dFtyXSxhPWVbbl0sZWUuaXNBcnJheShhKSYmKGk9YVsxXSxhPWVbbl09YVswXSksbiE9PXImJihlW3JdPWEsZGVsZXRlIGVbbl0pLG89ZWUuY3NzSG9va3Nbcl0sbyYmImV4cGFuZCJpbiBvKXthPW8uZXhwYW5kKGEpLGRlbGV0ZSBlW3JdO2ZvcihuIGluIGEpbiBpbiBlfHwoZVtuXT1hW25dLHRbbl09aSl9ZWxzZSB0W3JdPWl9ZnVuY3Rpb24gTihlLHQsbil7dmFyIHIsaSxhPTAsbz1udC5sZW5ndGgscz1lZS5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBsLmVsZW19KSxsPWZ1bmN0aW9uKCl7aWYoaSlyZXR1cm4hMTtmb3IodmFyIHQ9WGV8fEkoKSxuPU1hdGgubWF4KDAsdS5zdGFydFRpbWUrdS5kdXJhdGlvbi10KSxyPW4vdS5kdXJhdGlvbnx8MCxhPTEtcixvPTAsbD11LnR3ZWVucy5sZW5ndGg7bD5vO28rKyl1LnR3ZWVuc1tvXS5ydW4oYSk7cmV0dXJuIHMubm90aWZ5V2l0aChlLFt1LGEsbl0pLDE+YSYmbD9uOihzLnJlc29sdmVXaXRoKGUsW3VdKSwhMSl9LHU9cy5wcm9taXNlKHtlbGVtOmUscHJvcHM6ZWUuZXh0ZW5kKHt9LHQpLG9wdHM6ZWUuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6WGV8fEkoKSxkdXJhdGlvbjpuLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciByPWVlLlR3ZWVuKGUsdS5vcHRzLHQsbix1Lm9wdHMuc3BlY2lhbEVhc2luZ1t0XXx8dS5vcHRzLmVhc2luZyk7cmV0dXJuIHUudHdlZW5zLnB1c2gocikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD91LnR3ZWVucy5sZW5ndGg6MDtpZihpKXJldHVybiB0aGlzO2ZvcihpPSEwO3I+bjtuKyspdS50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0P3MucmVzb2x2ZVdpdGgoZSxbdSx0XSk6cy5yZWplY3RXaXRoKGUsW3UsdF0pLHRoaXN9fSksYz11LnByb3BzO2ZvcihQKGMsdS5vcHRzLnNwZWNpYWxFYXNpbmcpO28+YTthKyspaWYocj1udFthXS5jYWxsKHUsZSxjLHUub3B0cykpcmV0dXJuIHI7cmV0dXJuIGVlLm1hcChjLEQsdSksZWUuaXNGdW5jdGlvbih1Lm9wdHMuc3RhcnQpJiZ1Lm9wdHMuc3RhcnQuY2FsbChlLHUpLGVlLmZ4LnRpbWVyKGVlLmV4dGVuZChsLHtlbGVtOmUsYW5pbTp1LHF1ZXVlOnUub3B0cy5xdWV1ZX0pKSx1LnByb2dyZXNzKHUub3B0cy5wcm9ncmVzcykuZG9uZSh1Lm9wdHMuZG9uZSx1Lm9wdHMuY29tcGxldGUpLmZhaWwodS5vcHRzLmZhaWwpLmFsd2F5cyh1Lm9wdHMuYWx3YXlzKX1mdW5jdGlvbiAkKGUpe3JldHVybiBmdW5jdGlvbih0LG4peyJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSIqIik7dmFyIHIsaT0wLGE9dC50b0xvd2VyQ2FzZSgpLm1hdGNoKGRlKXx8W107aWYoZWUuaXNGdW5jdGlvbihuKSlmb3IoO3I9YVtpKytdOykiKyI9PT1yWzBdPyhyPXIuc2xpY2UoMSl8fCIqIiwoZVtyXT1lW3JdfHxbXSkudW5zaGlmdChuKSk6KGVbcl09ZVtyXXx8W10pLnB1c2gobil9fWZ1bmN0aW9uIE0oZSx0LG4scil7ZnVuY3Rpb24gaShzKXt2YXIgbDtyZXR1cm4gYVtzXT0hMCxlZS5lYWNoKGVbc118fFtdLGZ1bmN0aW9uKGUscyl7dmFyIHU9cyh0LG4scik7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB1fHxvfHxhW3VdP28/IShsPXUpOnZvaWQgMDoodC5kYXRhVHlwZXMudW5zaGlmdCh1KSxpKHUpLCExKX0pLGx9dmFyIGE9e30sbz1lPT09d3Q7cmV0dXJuIGkodC5kYXRhVHlwZXNbMF0pfHwhYVsiKiJdJiZpKCIqIil9ZnVuY3Rpb24gUihlLHQpe3ZhciBuLHIsaT1lZS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihuIGluIHQpdm9pZCAwIT09dFtuXSYmKChpW25dP2U6cnx8KHI9e30pKVtuXT10W25dKTtyZXR1cm4gciYmZWUuZXh0ZW5kKCEwLGUsciksZX1mdW5jdGlvbiBGKGUsdCxuKXtmb3IodmFyIHIsaSxhLG8scz1lLmNvbnRlbnRzLGw9ZS5kYXRhVHlwZXM7IioiPT09bFswXTspbC5zaGlmdCgpLHZvaWQgMD09PXImJihyPWUubWltZVR5cGV8fHQuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihyKWZvcihpIGluIHMpaWYoc1tpXSYmc1tpXS50ZXN0KHIpKXtsLnVuc2hpZnQoaSk7YnJlYWt9aWYobFswXWluIG4pYT1sWzBdO2Vsc2V7Zm9yKGkgaW4gbil7aWYoIWxbMF18fGUuY29udmVydGVyc1tpKyIgIitsWzBdXSl7YT1pO2JyZWFrfW98fChvPWkpfWE9YXx8b31yZXR1cm4gYT8oYSE9PWxbMF0mJmwudW5zaGlmdChhKSxuW2FdKTp2b2lkIDB9ZnVuY3Rpb24gVShlLHQsbixyKXt2YXIgaSxhLG8scyxsLHU9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKG8gaW4gZS5jb252ZXJ0ZXJzKXVbby50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbb107Zm9yKGE9Yy5zaGlmdCgpO2E7KWlmKGUucmVzcG9uc2VGaWVsZHNbYV0mJihuW2UucmVzcG9uc2VGaWVsZHNbYV1dPXQpLCFsJiZyJiZlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUpKSxsPWEsYT1jLnNoaWZ0KCkpaWYoIioiPT09YSlhPWw7ZWxzZSBpZigiKiIhPT1sJiZsIT09YSl7aWYobz11W2wrIiAiK2FdfHx1WyIqICIrYV0sIW8pZm9yKGkgaW4gdSlpZihzPWkuc3BsaXQoIiAiKSxzWzFdPT09YSYmKG89dVtsKyIgIitzWzBdXXx8dVsiKiAiK3NbMF1dKSl7bz09PSEwP289dVtpXTp1W2ldIT09ITAmJihhPXNbMF0sYy51bnNoaWZ0KHNbMV0pKTticmVha31pZihvIT09ITApaWYobyYmZVsidGhyb3dzIl0pdD1vKHQpO2Vsc2UgdHJ5e3Q9byh0KX1jYXRjaChwKXtyZXR1cm57c3RhdGU6InBhcnNlcmVycm9yIixlcnJvcjpvP3A6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK2wrIiB0byAiK2F9fX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6dH19ZnVuY3Rpb24gQihlLHQsbixyKXt2YXIgaTtpZihlZS5pc0FycmF5KHQpKWVlLmVhY2godCxmdW5jdGlvbih0LGkpe258fEV0LnRlc3QoZSk/cihlLGkpOkIoZSsiWyIrKCJvYmplY3QiPT10eXBlb2YgaT90OiIiKSsiXSIsaSxuLHIpfSk7ZWxzZSBpZihufHwib2JqZWN0IiE9PWVlLnR5cGUodCkpcihlLHQpO2Vsc2UgZm9yKGkgaW4gdClCKGUrIlsiK2krIl0iLHRbaV0sbixyKX1mdW5jdGlvbiBxKGUpe3JldHVybiBlZS5pc1dpbmRvdyhlKT9lOjk9PT1lLm5vZGVUeXBlJiZlLmRlZmF1bHRWaWV3fXZhciBIPVtdLHo9SC5zbGljZSxWPUguY29uY2F0LFc9SC5wdXNoLEo9SC5pbmRleE9mLFk9e30sSz1ZLnRvU3RyaW5nLFE9WS5oYXNPd25Qcm9wZXJ0eSxYPXt9LEc9dC5kb2N1bWVudCxaPSIyLjEuNCIsZWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGVlLmZuLmluaXQoZSx0KX0sdGU9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLG5lPS9eLW1zLS8scmU9Ly0oW1xkYS16XSkvZ2ksaWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfTtlZS5mbj1lZS5wcm90b3R5cGU9e2pxdWVyeTpaLGNvbnN0cnVjdG9yOmVlLHNlbGVjdG9yOiIiLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gei5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/MD5lP3RoaXNbZSt0aGlzLmxlbmd0aF06dGhpc1tlXTp6LmNhbGwodGhpcyl9LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD1lZS5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHQuY29udGV4dD10aGlzLmNvbnRleHQsdH0sZWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiBlZS5lYWNoKHRoaXMsZSx0KX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhlZS5tYXAodGhpcyxmdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodCxuLHQpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayh6LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49K2UrKDA+ZT90OjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhuPj0wJiZ0Pm4/W3RoaXNbbl1dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpXLHNvcnQ6SC5zb3J0LHNwbGljZTpILnNwbGljZX0sZWUuZXh0ZW5kPWVlLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBlLHQsbixyLGksYSxvPWFyZ3VtZW50c1swXXx8e30scz0xLGw9YXJndW1lbnRzLmxlbmd0aCx1PSExO2ZvcigiYm9vbGVhbiI9PXR5cGVvZiBvJiYodT1vLG89YXJndW1lbnRzW3NdfHx7fSxzKyspLCJvYmplY3QiPT10eXBlb2Ygb3x8ZWUuaXNGdW5jdGlvbihvKXx8KG89e30pLHM9PT1sJiYobz10aGlzLHMtLSk7bD5zO3MrKylpZihudWxsIT0oZT1hcmd1bWVudHNbc10pKWZvcih0IGluIGUpbj1vW3RdLHI9ZVt0XSxvIT09ciYmKHUmJnImJihlZS5pc1BsYWluT2JqZWN0KHIpfHwoaT1lZS5pc0FycmF5KHIpKSk/KGk/KGk9ITEsYT1uJiZlZS5pc0FycmF5KG4pP246W10pOmE9biYmZWUuaXNQbGFpbk9iamVjdChuKT9uOnt9LG9bdF09ZWUuZXh0ZW5kKHUsYSxyKSk6dm9pZCAwIT09ciYmKG9bdF09cikpO3JldHVybiBvfSxlZS5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKForTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoZSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09PWVlLnR5cGUoZSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJheSxpc1dpbmRvdzpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZT09PWUud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oZSl7cmV0dXJuIWVlLmlzQXJyYXkoZSkmJmUtcGFyc2VGbG9hdChlKSsxPj0wfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiIT09ZWUudHlwZShlKXx8ZS5ub2RlVHlwZXx8ZWUuaXNXaW5kb3coZSk/ITE6ZS5jb25zdHJ1Y3RvciYmIVEuY2FsbChlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpPyExOiEwfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LHR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/ZSsiIjoib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlP1lbSy5jYWxsKGUpXXx8Im9iamVjdCI6dHlwZW9mIGU7Cn0sZ2xvYmFsRXZhbDpmdW5jdGlvbihlKXt2YXIgdCxuPWV2YWw7ZT1lZS50cmltKGUpLGUmJigxPT09ZS5pbmRleE9mKCJ1c2Ugc3RyaWN0Iik/KHQ9Ry5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSx0LnRleHQ9ZSxHLmhlYWQuYXBwZW5kQ2hpbGQodCkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSk6bihlKSl9LGNhbWVsQ2FzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKG5lLCJtcy0iKS5yZXBsYWNlKHJlLGllKX0sbm9kZU5hbWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxhPTAsbz1lLmxlbmd0aCxzPXIoZSk7aWYobil7aWYocylmb3IoO28+YSYmKGk9dC5hcHBseShlW2FdLG4pLGkhPT0hMSk7YSsrKTtlbHNlIGZvcihhIGluIGUpaWYoaT10LmFwcGx5KGVbYV0sbiksaT09PSExKWJyZWFrfWVsc2UgaWYocylmb3IoO28+YSYmKGk9dC5jYWxsKGVbYV0sYSxlW2FdKSxpIT09ITEpO2ErKyk7ZWxzZSBmb3IoYSBpbiBlKWlmKGk9dC5jYWxsKGVbYV0sYSxlW2FdKSxpPT09ITEpYnJlYWs7cmV0dXJuIGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6KGUrIiIpLnJlcGxhY2UodGUsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1cm4gbnVsbCE9ZSYmKHIoT2JqZWN0KGUpKT9lZS5tZXJnZShuLCJzdHJpbmciPT10eXBlb2YgZT9bZV06ZSk6Vy5jYWxsKG4sZSkpLG59LGluQXJyYXk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT10Py0xOkouY2FsbCh0LGUsbil9LG1lcmdlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPSt0Lmxlbmd0aCxyPTAsaT1lLmxlbmd0aDtuPnI7cisrKWVbaSsrXT10W3JdO3JldHVybiBlLmxlbmd0aD1pLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcixpPVtdLGE9MCxvPWUubGVuZ3RoLHM9IW47bz5hO2ErKylyPSF0KGVbYV0sYSksciE9PXMmJmkucHVzaChlW2FdKTtyZXR1cm4gaX0sbWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxhPTAsbz1lLmxlbmd0aCxzPXIoZSksbD1bXTtpZihzKWZvcig7bz5hO2ErKylpPXQoZVthXSxhLG4pLG51bGwhPWkmJmwucHVzaChpKTtlbHNlIGZvcihhIGluIGUpaT10KGVbYV0sYSxuKSxudWxsIT1pJiZsLnB1c2goaSk7cmV0dXJuIFYuYXBwbHkoW10sbCl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1lLGU9biksZWUuaXNGdW5jdGlvbihlKT8ocj16LmNhbGwoYXJndW1lbnRzLDIpLGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KHouY2FsbChhcmd1bWVudHMpKSl9LGkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHxlZS5ndWlkKyssaSk6dm9pZCAwfSxub3c6RGF0ZS5ub3csc3VwcG9ydDpYfSksZWUuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe1lbIltvYmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSk7dmFyIGFlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0LG4scil7dmFyIGksYSxvLHMsbCx1LHAsaCxkLG07aWYoKHQ/dC5vd25lckRvY3VtZW50fHx0OlUpIT09RCYmXyh0KSx0PXR8fEQsbj1ufHxbXSxzPXQubm9kZVR5cGUsInN0cmluZyIhPXR5cGVvZiBlfHwhZXx8MSE9PXMmJjkhPT1zJiYxMSE9PXMpcmV0dXJuIG47aWYoIXImJlApe2lmKDExIT09cyYmKGk9dmUuZXhlYyhlKSkpaWYobz1pWzFdKXtpZig5PT09cyl7aWYoYT10LmdldEVsZW1lbnRCeUlkKG8pLCFhfHwhYS5wYXJlbnROb2RlKXJldHVybiBuO2lmKGEuaWQ9PT1vKXJldHVybiBuLnB1c2goYSksbn1lbHNlIGlmKHQub3duZXJEb2N1bWVudCYmKGE9dC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG8pKSYmUih0LGEpJiZhLmlkPT09bylyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZXtpZihpWzJdKXJldHVybiBHLmFwcGx5KG4sdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSksbjtpZigobz1pWzNdKSYmeC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBHLmFwcGx5KG4sdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG8pKSxufWlmKHgucXNhJiYoIU58fCFOLnRlc3QoZSkpKXtpZihoPXA9RixkPXQsbT0xIT09cyYmZSwxPT09cyYmIm9iamVjdCIhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2Zvcih1PUUoZSksKHA9dC5nZXRBdHRyaWJ1dGUoImlkIikpP2g9cC5yZXBsYWNlKHdlLCJcXCQmIik6dC5zZXRBdHRyaWJ1dGUoImlkIixoKSxoPSJbaWQ9JyIraCsiJ10gIixsPXUubGVuZ3RoO2wtLTspdVtsXT1oK2YodVtsXSk7ZD1iZS50ZXN0KGUpJiZjKHQucGFyZW50Tm9kZSl8fHQsbT11LmpvaW4oIiwiKX1pZihtKXRyeXtyZXR1cm4gRy5hcHBseShuLGQucXVlcnlTZWxlY3RvckFsbChtKSksbn1jYXRjaChnKXt9ZmluYWxseXtwfHx0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBPKGUucmVwbGFjZShsZSwiJDEiKSx0LG4scil9ZnVuY3Rpb24gbigpe2Z1bmN0aW9uIGUobixyKXtyZXR1cm4gdC5wdXNoKG4rIiAiKT5TLmNhY2hlTGVuZ3RoJiZkZWxldGUgZVt0LnNoaWZ0KCldLGVbbisiICJdPXJ9dmFyIHQ9W107cmV0dXJuIGV9ZnVuY3Rpb24gcihlKXtyZXR1cm4gZVtGXT0hMCxlfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9RC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKG4pe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsfX1mdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciBuPWUuc3BsaXQoInwiKSxyPWUubGVuZ3RoO3ItLTspUy5hdHRySGFuZGxlW25bcl1dPXR9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPXQmJmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJih+dC5zb3VyY2VJbmRleHx8SiktKH5lLnNvdXJjZUluZGV4fHxKKTtpZihyKXJldHVybiByO2lmKG4pZm9yKDtuPW4ubmV4dFNpYmxpbmc7KWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1uJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBsKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1ufHwiYnV0dG9uIj09PW4pJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiB1KGUpe3JldHVybiByKGZ1bmN0aW9uKHQpe3JldHVybiB0PSt0LHIoZnVuY3Rpb24obixyKXtmb3IodmFyIGksYT1lKFtdLG4ubGVuZ3RoLHQpLG89YS5sZW5ndGg7by0tOyluW2k9YVtvXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGUmJiJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZX1mdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIGYoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO24+dDt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiBoKGUsdCxuKXt2YXIgcj10LmRpcixpPW4mJiJwYXJlbnROb2RlIj09PXIsYT1xKys7cmV0dXJuIHQuZmlyc3Q/ZnVuY3Rpb24odCxuLGEpe2Zvcig7dD10W3JdOylpZigxPT09dC5ub2RlVHlwZXx8aSlyZXR1cm4gZSh0LG4sYSl9OmZ1bmN0aW9uKHQsbixvKXt2YXIgcyxsLHU9W0IsYV07aWYobyl7Zm9yKDt0PXRbcl07KWlmKCgxPT09dC5ub2RlVHlwZXx8aSkmJmUodCxuLG8pKXJldHVybiEwfWVsc2UgZm9yKDt0PXRbcl07KWlmKDE9PT10Lm5vZGVUeXBlfHxpKXtpZihsPXRbRl18fCh0W0ZdPXt9KSwocz1sW3JdKSYmc1swXT09PUImJnNbMV09PT1hKXJldHVybiB1WzJdPXNbMl07aWYobFtyXT11LHVbMl09ZSh0LG4sbykpcmV0dXJuITB9fX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLmxlbmd0aD4xP2Z1bmN0aW9uKHQsbixyKXtmb3IodmFyIGk9ZS5sZW5ndGg7aS0tOylpZighZVtpXSh0LG4scikpcmV0dXJuITE7cmV0dXJuITB9OmVbMF19ZnVuY3Rpb24gbShlLG4scil7Zm9yKHZhciBpPTAsYT1uLmxlbmd0aDthPmk7aSsrKXQoZSxuW2ldLHIpO3JldHVybiByfWZ1bmN0aW9uIGcoZSx0LG4scixpKXtmb3IodmFyIGEsbz1bXSxzPTAsbD1lLmxlbmd0aCx1PW51bGwhPXQ7bD5zO3MrKykoYT1lW3NdKSYmKCFufHxuKGEscixpKSkmJihvLnB1c2goYSksdSYmdC5wdXNoKHMpKTtyZXR1cm4gb31mdW5jdGlvbiB5KGUsdCxuLGksYSxvKXtyZXR1cm4gaSYmIWlbRl0mJihpPXkoaSkpLGEmJiFhW0ZdJiYoYT15KGEsbykpLHIoZnVuY3Rpb24ocixvLHMsbCl7dmFyIHUsYyxwLGY9W10saD1bXSxkPW8ubGVuZ3RoLHk9cnx8bSh0fHwiKiIscy5ub2RlVHlwZT9bc106cyxbXSksdj0hZXx8IXImJnQ/eTpnKHksZixlLHMsbCksYj1uP2F8fChyP2U6ZHx8aSk/W106bzp2O2lmKG4mJm4odixiLHMsbCksaSlmb3IodT1nKGIsaCksaSh1LFtdLHMsbCksYz11Lmxlbmd0aDtjLS07KShwPXVbY10pJiYoYltoW2NdXT0hKHZbaFtjXV09cCkpO2lmKHIpe2lmKGF8fGUpe2lmKGEpe2Zvcih1PVtdLGM9Yi5sZW5ndGg7Yy0tOykocD1iW2NdKSYmdS5wdXNoKHZbY109cCk7YShudWxsLGI9W10sdSxsKX1mb3IoYz1iLmxlbmd0aDtjLS07KShwPWJbY10pJiYodT1hP2VlKHIscCk6ZltjXSk+LTEmJihyW3VdPSEob1t1XT1wKSl9fWVsc2UgYj1nKGI9PT1vP2Iuc3BsaWNlKGQsYi5sZW5ndGgpOmIpLGE/YShudWxsLG8sYixsKTpHLmFwcGx5KG8sYil9KX1mdW5jdGlvbiB2KGUpe2Zvcih2YXIgdCxuLHIsaT1lLmxlbmd0aCxhPVMucmVsYXRpdmVbZVswXS50eXBlXSxvPWF8fFMucmVsYXRpdmVbIiAiXSxzPWE/MTowLGw9aChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXR9LG8sITApLHU9aChmdW5jdGlvbihlKXtyZXR1cm4gZWUodCxlKT4tMX0sbywhMCksYz1bZnVuY3Rpb24oZSxuLHIpe3ZhciBpPSFhJiYocnx8biE9PWopfHwoKHQ9bikubm9kZVR5cGU/bChlLG4scik6dShlLG4scikpO3JldHVybiB0PW51bGwsaX1dO2k+cztzKyspaWYobj1TLnJlbGF0aXZlW2Vbc10udHlwZV0pYz1baChkKGMpLG4pXTtlbHNle2lmKG49Uy5maWx0ZXJbZVtzXS50eXBlXS5hcHBseShudWxsLGVbc10ubWF0Y2hlcyksbltGXSl7Zm9yKHI9KytzO2k+ciYmIVMucmVsYXRpdmVbZVtyXS50eXBlXTtyKyspO3JldHVybiB5KHM+MSYmZChjKSxzPjEmJmYoZS5zbGljZSgwLHMtMSkuY29uY2F0KHt2YWx1ZToiICI9PT1lW3MtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZShsZSwiJDEiKSxuLHI+cyYmdihlLnNsaWNlKHMscikpLGk+ciYmdihlPWUuc2xpY2UocikpLGk+ciYmZihlKSl9Yy5wdXNoKG4pfXJldHVybiBkKGMpfWZ1bmN0aW9uIGIoZSxuKXt2YXIgaT1uLmxlbmd0aD4wLGE9ZS5sZW5ndGg+MCxvPWZ1bmN0aW9uKHIsbyxzLGwsdSl7dmFyIGMscCxmLGg9MCxkPSIwIixtPXImJltdLHk9W10sdj1qLGI9cnx8YSYmUy5maW5kLlRBRygiKiIsdSksdz1CKz1udWxsPT12PzE6TWF0aC5yYW5kb20oKXx8LjEseD1iLmxlbmd0aDtmb3IodSYmKGo9byE9PUQmJm8pO2QhPT14JiZudWxsIT0oYz1iW2RdKTtkKyspe2lmKGEmJmMpe2ZvcihwPTA7Zj1lW3ArK107KWlmKGYoYyxvLHMpKXtsLnB1c2goYyk7YnJlYWt9dSYmKEI9dyl9aSYmKChjPSFmJiZjKSYmaC0tLHImJm0ucHVzaChjKSl9aWYoaCs9ZCxpJiZkIT09aCl7Zm9yKHA9MDtmPW5bcCsrXTspZihtLHksbyxzKTtpZihyKXtpZihoPjApZm9yKDtkLS07KW1bZF18fHlbZF18fCh5W2RdPVEuY2FsbChsKSk7eT1nKHkpfUcuYXBwbHkobCx5KSx1JiYhciYmeS5sZW5ndGg+MCYmaCtuLmxlbmd0aD4xJiZ0LnVuaXF1ZVNvcnQobCl9cmV0dXJuIHUmJihCPXcsaj12KSxtfTtyZXR1cm4gaT9yKG8pOm99dmFyIHcseCxTLEEsQyxFLGssTyxqLFQsSSxfLEQsTCxQLE4sJCxNLFIsRj0ic2l6emxlIisxKm5ldyBEYXRlLFU9ZS5kb2N1bWVudCxCPTAscT0wLEg9bigpLHo9bigpLFY9bigpLFc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQmJihJPSEwKSwwfSxKPTE8PDMxLFk9e30uaGFzT3duUHJvcGVydHksSz1bXSxRPUsucG9wLFg9Sy5wdXNoLEc9Sy5wdXNoLFo9Sy5zbGljZSxlZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7cj5uO24rKylpZihlW25dPT09dClyZXR1cm4gbjtyZXR1cm4tMX0sdGU9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixuZT0iW1xceDIwXFx0XFxyXFxuXFxmXSIscmU9Iig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkrIixpZT1yZS5yZXBsYWNlKCJ3IiwidyMiKSxhZT0iXFxbIituZSsiKigiK3JlKyIpKD86IituZSsiKihbKl4kfCF+XT89KSIrbmUrIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitpZSsiKSl8KSIrbmUrIipcXF0iLG9lPSI6KCIrcmUrIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK2FlKyIpKil8LiopXFwpfCkiLHNlPW5ldyBSZWdFeHAobmUrIisiLCJnIiksbGU9bmV3IFJlZ0V4cCgiXiIrbmUrIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrbmUrIiskIiwiZyIpLHVlPW5ldyBSZWdFeHAoIl4iK25lKyIqLCIrbmUrIioiKSxjZT1uZXcgUmVnRXhwKCJeIituZSsiKihbPit+XXwiK25lKyIpIituZSsiKiIpLHBlPW5ldyBSZWdFeHAoIj0iK25lKyIqKFteXFxdJ1wiXSo/KSIrbmUrIipcXF0iLCJnIiksZmU9bmV3IFJlZ0V4cChvZSksaGU9bmV3IFJlZ0V4cCgiXiIraWUrIiQiKSxkZT17SUQ6bmV3IFJlZ0V4cCgiXiMoIityZSsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIityZSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrcmUucmVwbGFjZSgidyIsIncqIikrIikiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK2FlKSxQU0VVRE86bmV3IFJlZ0V4cCgiXiIrb2UpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrbmUrIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK25lKyIqKD86KFsrLV18KSIrbmUrIiooXFxkKyl8KSkiK25lKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86Iit0ZSsiKSQiLCJpIiksbmVlZHNDb250ZXh0Om5ldyBSZWdFeHAoIl4iK25lKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK25lKyIqKCg/Oi1cXGQpP1xcZCopIituZSsiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sbWU9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxnZT0vXmhcZCQvaSx5ZT0vXltee10rXHtccypcW25hdGl2ZSBcdy8sdmU9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxiZT0vWyt+XS8sd2U9Lyd8XFwvZyx4ZT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK25lKyI/fCgiK25lKyIpfC4pIiwiaWciKSxTZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9IjB4Iit0LTY1NTM2O3JldHVybiByIT09cnx8bj90OjA+cj9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUocj4+MTB8NTUyOTYsMTAyMyZyfDU2MzIwKX0sQWU9ZnVuY3Rpb24oKXtfKCl9O3RyeXtHLmFwcGx5KEs9Wi5jYWxsKFUuY2hpbGROb2RlcyksVS5jaGlsZE5vZGVzKSxLW1UuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKENlKXtHPXthcHBseTpLLmxlbmd0aD9mdW5jdGlvbihlLHQpe1guYXBwbHkoZSxaLmNhbGwodCkpfTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPTA7ZVtuKytdPXRbcisrXTspO2UubGVuZ3RoPW4tMX19fXg9dC5zdXBwb3J0PXt9LEM9dC5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHQ/IkhUTUwiIT09dC5ub2RlTmFtZTohMX0sXz10LnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lP2Uub3duZXJEb2N1bWVudHx8ZTpVO3JldHVybiByIT09RCYmOT09PXIubm9kZVR5cGUmJnIuZG9jdW1lbnRFbGVtZW50PyhEPXIsTD1yLmRvY3VtZW50RWxlbWVudCxuPXIuZGVmYXVsdFZpZXcsbiYmbiE9PW4udG9wJiYobi5hZGRFdmVudExpc3RlbmVyP24uYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixBZSwhMSk6bi5hdHRhY2hFdmVudCYmbi5hdHRhY2hFdmVudCgib251bmxvYWQiLEFlKSksUD0hQyhyKSx4LmF0dHJpYnV0ZXM9aShmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSx4LmdldEVsZW1lbnRzQnlUYWdOYW1lPWkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXBwZW5kQ2hpbGQoci5jcmVhdGVDb21tZW50KCIiKSksIWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KSx4LmdldEVsZW1lbnRzQnlDbGFzc05hbWU9eWUudGVzdChyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLHguZ2V0QnlJZD1pKGZ1bmN0aW9uKGUpe3JldHVybiBMLmFwcGVuZENoaWxkKGUpLmlkPUYsIXIuZ2V0RWxlbWVudHNCeU5hbWV8fCFyLmdldEVsZW1lbnRzQnlOYW1lKEYpLmxlbmd0aH0pLHguZ2V0QnlJZD8oUy5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRCeUlkJiZQKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuJiZuLnBhcmVudE5vZGU/W25dOltdfX0sUy5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHhlLFNlKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJpZCIpPT09dH19KTooZGVsZXRlIFMuZmluZC5JRCxTLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoeGUsU2UpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj0idW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBuJiZuLnZhbHVlPT09dH19KSxTLmZpbmQuVEFHPXguZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24oZSx0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWU/dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTp4LnFzYT90LnF1ZXJ5U2VsZWN0b3JBbGwoZSk6dm9pZCAwfTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT0wLGE9dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTtpZigiKiI9PT1lKXtmb3IoO249YVtpKytdOykxPT09bi5ub2RlVHlwZSYmci5wdXNoKG4pO3JldHVybiByfXJldHVybiBhfSxTLmZpbmQuQ0xBU1M9eC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihlLHQpe3JldHVybiBQP3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKTp2b2lkIDB9LCQ9W10sTj1bXSwoeC5xc2E9eWUudGVzdChyLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGkoZnVuY3Rpb24oZSl7TC5hcHBlbmRDaGlsZChlKS5pbm5lckhUTUw9IjxhIGlkPSciK0YrIic+PC9hPjxzZWxlY3QgaWQ9JyIrRisiLVxmXScgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJk4ucHVzaCgiWypeJF09IituZSsiKig/OicnfFwiXCIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RofHxOLnB1c2goIlxcWyIrbmUrIiooPzp2YWx1ZXwiK3RlKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrRisiLV0iKS5sZW5ndGh8fE4ucHVzaCgifj0iKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxOLnB1c2goIjpjaGVja2VkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJhIyIrRisiKyoiKS5sZW5ndGh8fE4ucHVzaCgiLiMuK1srfl0iKX0pLGkoZnVuY3Rpb24oZSl7dmFyIHQ9ci5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmTi5wdXNoKCJuYW1lIituZSsiKlsqXiR8IX5dPz0iKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxOLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IiksTi5wdXNoKCIsLio6Iil9KSksKHgubWF0Y2hlc1NlbGVjdG9yPXllLnRlc3QoTT1MLm1hdGNoZXN8fEwud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxMLm1vek1hdGNoZXNTZWxlY3Rvcnx8TC5vTWF0Y2hlc1NlbGVjdG9yfHxMLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJmkoZnVuY3Rpb24oZSl7eC5kaXNjb25uZWN0ZWRNYXRjaD1NLmNhbGwoZSwiZGl2IiksTS5jYWxsKGUsIltzIT0nJ106eCIpLCQucHVzaCgiIT0iLG9lKX0pLE49Ti5sZW5ndGgmJm5ldyBSZWdFeHAoTi5qb2luKCJ8IikpLCQ9JC5sZW5ndGgmJm5ldyBSZWdFeHAoJC5qb2luKCJ8IikpLHQ9eWUudGVzdChMLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSxSPXR8fHllLnRlc3QoTC5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KWZvcig7dD10LnBhcmVudE5vZGU7KWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxXPXQ/ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gST0hMCwwO3ZhciBuPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBuP246KG49KGUub3duZXJEb2N1bWVudHx8ZSk9PT0odC5vd25lckRvY3VtZW50fHx0KT9lLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpOjEsMSZufHwheC5zb3J0RGV0YWNoZWQmJnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSk9PT1uP2U9PT1yfHxlLm93bmVyRG9jdW1lbnQ9PT1VJiZSKFUsZSk/LTE6dD09PXJ8fHQub3duZXJEb2N1bWVudD09PVUmJlIoVSx0KT8xOlQ/ZWUoVCxlKS1lZShULHQpOjA6NCZuPy0xOjEpfTpmdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBJPSEwLDA7dmFyIG4saT0wLGE9ZS5wYXJlbnROb2RlLHM9dC5wYXJlbnROb2RlLGw9W2VdLHU9W3RdO2lmKCFhfHwhcylyZXR1cm4gZT09PXI/LTE6dD09PXI/MTphPy0xOnM/MTpUP2VlKFQsZSktZWUoVCx0KTowO2lmKGE9PT1zKXJldHVybiBvKGUsdCk7Zm9yKG49ZTtuPW4ucGFyZW50Tm9kZTspbC51bnNoaWZ0KG4pO2ZvcihuPXQ7bj1uLnBhcmVudE5vZGU7KXUudW5zaGlmdChuKTtmb3IoO2xbaV09PT11W2ldOylpKys7cmV0dXJuIGk/byhsW2ldLHVbaV0pOmxbaV09PT1VPy0xOnVbaV09PT1VPzE6MH0scik6RH0sdC5tYXRjaGVzPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxudWxsLG51bGwsbil9LHQubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsbil7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1EJiZfKGUpLG49bi5yZXBsYWNlKHBlLCI9JyQxJ10iKSx4Lm1hdGNoZXNTZWxlY3RvciYmUCYmKCEkfHwhJC50ZXN0KG4pKSYmKCFOfHwhTi50ZXN0KG4pKSl0cnl7dmFyIHI9TS5jYWxsKGUsbik7aWYocnx8eC5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiByfWNhdGNoKGkpe31yZXR1cm4gdChuLEQsbnVsbCxbZV0pLmxlbmd0aD4wfSx0LmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPT1EJiZfKGUpLFIoZSx0KX0sdC5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPT1EJiZfKGUpO3ZhciBuPVMuYXR0ckhhbmRsZVt0LnRvTG93ZXJDYXNlKCldLHI9biYmWS5jYWxsKFMuYXR0ckhhbmRsZSx0LnRvTG93ZXJDYXNlKCkpP24oZSx0LCFQKTp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PXI/cjp4LmF0dHJpYnV0ZXN8fCFQP2UuZ2V0QXR0cmlidXRlKHQpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0sdC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHQudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLHI9MCxpPTA7aWYoST0heC5kZXRlY3REdXBsaWNhdGVzLFQ9IXguc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoVyksSSl7Zm9yKDt0PWVbaSsrXTspdD09PWVbaV0mJihyPW4ucHVzaChpKSk7Zm9yKDtyLS07KWUuc3BsaWNlKG5bcl0sMSl9cmV0dXJuIFQ9bnVsbCxlfSxBPXQuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGU7aWYoaSl7aWYoMT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9QShlKX1lbHNlIGlmKDM9PT1pfHw0PT09aSlyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyKytdOyluKz1BKHQpO3JldHVybiBufSxTPXQuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86cixtYXRjaDpkZSxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKHhlLFNlKSxlWzNdPShlWzNdfHxlWzRdfHxlWzVdfHwiIikucmVwbGFjZSh4ZSxTZSksIn49Ij09PWVbMl0mJihlWzNdPSIgIitlWzNdKyIgIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1lWzFdLnNsaWNlKDAsMyk/KGVbM118fHQuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooImV2ZW4iPT09ZVszXXx8Im9kZCI9PT1lWzNdKSksZVs1XT0rKGVbN10rZVs4XXx8Im9kZCI9PT1lWzNdKSk6ZVszXSYmdC5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gZGUuQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdP2VbMl09ZVs0XXx8ZVs1XXx8IiI6biYmZmUudGVzdChuKSYmKHQ9RShuLCEwKSkmJih0PW4uaW5kZXhPZigiKSIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoeGUsU2UpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PUhbZSsiICJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKCIoXnwiK25lKyIpIitlKyIoIituZSsifCQpIikpJiZIKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdCgic3RyaW5nIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNzTmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEF0dHJpYnV0ZSYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIGE9dC5hdHRyKGksZSk7cmV0dXJuIG51bGw9PWE/IiE9Ij09PW46bj8oYSs9IiIsIj0iPT09bj9hPT09cjoiIT0iPT09bj9hIT09cjoiXj0iPT09bj9yJiYwPT09YS5pbmRleE9mKHIpOiIqPSI9PT1uP3ImJmEuaW5kZXhPZihyKT4tMToiJD0iPT09bj9yJiZhLnNsaWNlKC1yLmxlbmd0aCk9PT1yOiJ+PSI9PT1uPygiICIrYS5yZXBsYWNlKHNlLCIgIikrIiAiKS5pbmRleE9mKHIpPi0xOiJ8PSI9PT1uP2E9PT1yfHxhLnNsaWNlKDAsci5sZW5ndGgrMSk9PT1yKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBhPSJudGgiIT09ZS5zbGljZSgwLDMpLG89Imxhc3QiIT09ZS5zbGljZSgtNCkscz0ib2YtdHlwZSI9PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbixsKXt2YXIgdSxjLHAsZixoLGQsbT1hIT09bz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLGc9dC5wYXJlbnROb2RlLHk9cyYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHY9IWwmJiFzO2lmKGcpe2lmKGEpe2Zvcig7bTspe2ZvcihwPXQ7cD1wW21dOylpZihzP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpcmV0dXJuITE7ZD1tPSJvbmx5Ij09PWUmJiFkJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKGQ9W28/Zy5maXJzdENoaWxkOmcubGFzdENoaWxkXSxvJiZ2KXtmb3IoYz1nW0ZdfHwoZ1tGXT17fSksdT1jW2VdfHxbXSxoPXVbMF09PT1CJiZ1WzFdLGY9dVswXT09PUImJnVbMl0scD1oJiZnLmNoaWxkTm9kZXNbaF07cD0rK2gmJnAmJnBbbV18fChmPWg9MCl8fGQucG9wKCk7KWlmKDE9PT1wLm5vZGVUeXBlJiYrK2YmJnA9PT10KXtjW2VdPVtCLGgsZl07YnJlYWt9fWVsc2UgaWYodiYmKHU9KHRbRl18fCh0W0ZdPXt9KSlbZV0pJiZ1WzBdPT09QilmPXVbMV07ZWxzZSBmb3IoOyhwPSsraCYmcCYmcFttXXx8KGY9aD0wKXx8ZC5wb3AoKSkmJigocz9wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT15OjEhPT1wLm5vZGVUeXBlKXx8ISsrZnx8KHYmJigocFtGXXx8KHBbRl09e30pKVtlXT1bQixmXSkscCE9PXQpKTspO3JldHVybiBmLT1pLGY9PT1yfHxmJXI9PT0wJiZmL3I+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKGUsbil7dmFyIGksYT1TLnBzZXVkb3NbZV18fFMuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHx0LmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrZSk7cmV0dXJuIGFbRl0/YShuKTphLmxlbmd0aD4xPyhpPVtlLGUsIiIsbl0sUy5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/cihmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixpPWEoZSxuKSxvPWkubGVuZ3RoO28tLTspcj1lZShlLGlbb10pLGVbcl09ISh0W3JdPWlbb10pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSwwLGkpfSk6YX19LHBzZXVkb3M6e25vdDpyKGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10saT1rKGUucmVwbGFjZShsZSwiJDEiKSk7cmV0dXJuIGlbRl0/cihmdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGEsbz1pKGUsbnVsbCxyLFtdKSxzPWUubGVuZ3RoO3MtLTspKGE9b1tzXSkmJihlW3NdPSEodFtzXT1hKSl9KTpmdW5jdGlvbihlLHIsYSl7cmV0dXJuIHRbMF09ZSxpKHQsbnVsbCxhLG4pLHRbMF09bnVsbCwhbi5wb3AoKX19KSxoYXM6cihmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKS5sZW5ndGg+MH19KSxjb250YWluczpyKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSh4ZSxTZSksZnVuY3Rpb24odCl7cmV0dXJuKHQudGV4dENvbnRlbnR8fHQuaW5uZXJUZXh0fHxBKHQpKS5pbmRleE9mKGUpPi0xfX0pLGxhbmc6cihmdW5jdGlvbihlKXtyZXR1cm4gaGUudGVzdChlfHwiIil8fHQuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrZSksZT1lLnJlcGxhY2UoeGUsU2UpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG47ZG8gaWYobj1QP3QubGFuZzp0LmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8dC5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gbj1uLnRvTG93ZXJDYXNlKCksbj09PWV8fDA9PT1uLmluZGV4T2YoZSsiLSIpO3doaWxlKCh0PXQucGFyZW50Tm9kZSkmJjE9PT10Lm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5sb2NhdGlvbiYmZS5sb2NhdGlvbi5oYXNoO3JldHVybiBuJiZuLnNsaWNlKDEpPT09dC5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PUx9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09RC5hY3RpdmVFbGVtZW50JiYoIUQuaGFzRm9jdXN8fEQuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsZS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIVMucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBnZS50ZXN0KGUubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gbWUudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmImJ1dHRvbiI9PT1lLnR5cGV8fCJidXR0b24iPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1lLnR5cGUmJihudWxsPT0odD1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09dC50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6dShmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6dShmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6dShmdW5jdGlvbihlLHQsbil7cmV0dXJuWzA+bj9uK3Q6bl19KSxldmVuOnUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDt0Pm47bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxvZGQ6dShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO3Q+bjtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0wPm4/bit0Om47LS1yPj0wOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDp1KGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MD5uP24rdDpuOysrcjx0OyllLnB1c2gocik7cmV0dXJuIGV9KX19LFMucHNldWRvcy5udGg9Uy5wc2V1ZG9zLmVxO2Zvcih3IGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KVMucHNldWRvc1t3XT1zKHcpO2Zvcih3IGlue3N1Ym1pdDohMCxyZXNldDohMH0pUy5wc2V1ZG9zW3ddPWwodyk7cmV0dXJuIHAucHJvdG90eXBlPVMuZmlsdGVycz1TLnBzZXVkb3MsUy5zZXRGaWx0ZXJzPW5ldyBwLEU9dC50b2tlbml6ZT1mdW5jdGlvbihlLG4pe3ZhciByLGksYSxvLHMsbCx1LGM9eltlKyIgIl07aWYoYylyZXR1cm4gbj8wOmMuc2xpY2UoMCk7Zm9yKHM9ZSxsPVtdLHU9Uy5wcmVGaWx0ZXI7czspeyghcnx8KGk9dWUuZXhlYyhzKSkpJiYoaSYmKHM9cy5zbGljZShpWzBdLmxlbmd0aCl8fHMpLGwucHVzaChhPVtdKSkscj0hMSwoaT1jZS5leGVjKHMpKSYmKHI9aS5zaGlmdCgpLGEucHVzaCh7dmFsdWU6cix0eXBlOmlbMF0ucmVwbGFjZShsZSwiICIpfSkscz1zLnNsaWNlKHIubGVuZ3RoKSk7Zm9yKG8gaW4gUy5maWx0ZXIpIShpPWRlW29dLmV4ZWMocykpfHx1W29dJiYhKGk9dVtvXShpKSl8fChyPWkuc2hpZnQoKSxhLnB1c2goe3ZhbHVlOnIsdHlwZTpvLG1hdGNoZXM6aX0pLHM9cy5zbGljZShyLmxlbmd0aCkpO2lmKCFyKWJyZWFrfXJldHVybiBuP3MubGVuZ3RoOnM/dC5lcnJvcihlKTp6KGUsbCkuc2xpY2UoMCl9LGs9dC5jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPVtdLGE9VltlKyIgIl07aWYoIWEpe2Zvcih0fHwodD1FKGUpKSxuPXQubGVuZ3RoO24tLTspYT12KHRbbl0pLGFbRl0/ci5wdXNoKGEpOmkucHVzaChhKTthPVYoZSxiKGkscikpLGEuc2VsZWN0b3I9ZX1yZXR1cm4gYX0sTz10LnNlbGVjdD1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhLG8scyxsLHU9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUscD0hciYmRShlPXUuc2VsZWN0b3J8fGUpO2lmKG49bnx8W10sMT09PXAubGVuZ3RoKXtpZihhPXBbMF09cFswXS5zbGljZSgwKSxhLmxlbmd0aD4yJiYiSUQiPT09KG89YVswXSkudHlwZSYmeC5nZXRCeUlkJiY5PT09dC5ub2RlVHlwZSYmUCYmUy5yZWxhdGl2ZVthWzFdLnR5cGVdKXtpZih0PShTLmZpbmQuSUQoby5tYXRjaGVzWzBdLnJlcGxhY2UoeGUsU2UpLHQpfHxbXSlbMF0sIXQpcmV0dXJuIG47dSYmKHQ9dC5wYXJlbnROb2RlKSxlPWUuc2xpY2UoYS5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9Zm9yKGk9ZGUubmVlZHNDb250ZXh0LnRlc3QoZSk/MDphLmxlbmd0aDtpLS0mJihvPWFbaV0sIVMucmVsYXRpdmVbcz1vLnR5cGVdKTspaWYoKGw9Uy5maW5kW3NdKSYmKHI9bChvLm1hdGNoZXNbMF0ucmVwbGFjZSh4ZSxTZSksYmUudGVzdChhWzBdLnR5cGUpJiZjKHQucGFyZW50Tm9kZSl8fHQpKSl7aWYoYS5zcGxpY2UoaSwxKSxlPXIubGVuZ3RoJiZmKGEpLCFlKXJldHVybiBHLmFwcGx5KG4sciksbjticmVha319cmV0dXJuKHV8fGsoZSxwKSkocix0LCFQLG4sYmUudGVzdChlKSYmYyh0LnBhcmVudE5vZGUpfHx0KSxufSx4LnNvcnRTdGFibGU9Ri5zcGxpdCgiIikuc29ydChXKS5qb2luKCIiKT09PUYseC5kZXRlY3REdXBsaWNhdGVzPSEhSSxfKCkseC5zb3J0RGV0YWNoZWQ9aShmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKEQuY3JlYXRlRWxlbWVudCgiZGl2IikpfSksaShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxhKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIG4/dm9pZCAwOmUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSx4LmF0dHJpYnV0ZXMmJmkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8aW5wdXQvPiIsZS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8YSgidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnx8ImlucHV0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT92b2lkIDA6ZS5kZWZhdWx0VmFsdWV9KSxpKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxhKHRlLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4gbj92b2lkIDA6ZVt0XT09PSEwP3QudG9Mb3dlckNhc2UoKToocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9KSx0fSh0KTtlZS5maW5kPWFlLGVlLmV4cHI9YWUuc2VsZWN0b3JzLGVlLmV4cHJbIjoiXT1lZS5leHByLnBzZXVkb3MsZWUudW5pcXVlPWFlLnVuaXF1ZVNvcnQsZWUudGV4dD1hZS5nZXRUZXh0LGVlLmlzWE1MRG9jPWFlLmlzWE1MLGVlLmNvbnRhaW5zPWFlLmNvbnRhaW5zO3ZhciBvZT1lZS5leHByLm1hdGNoLm5lZWRzQ29udGV4dCxzZT0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT58KSQvLGxlPS9eLlteOiNcW1wuLF0qJC87ZWUuZmlsdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP2VlLmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3JdOltdOmVlLmZpbmQubWF0Y2hlcyhlLGVlLmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGVlLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMubGVuZ3RoLHI9W10saT10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2soZWUoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDtuPnQ7dCsrKWlmKGVlLmNvbnRhaW5zKGlbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKHQ9MDtuPnQ7dCsrKWVlLmZpbmQoZSxpW3RdLHIpO3JldHVybiByPXRoaXMucHVzaFN0YWNrKG4+MT9lZS51bmlxdWUocik6ciksci5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2U6ZSxyfSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGkodGhpcyxlfHxbXSwhMSkpfSxub3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGkodGhpcyxlfHxbXSwhMCkpfSxpczpmdW5jdGlvbihlKXtyZXR1cm4hIWkodGhpcywic3RyaW5nIj09dHlwZW9mIGUmJm9lLnRlc3QoZSk/ZWUoZSk6ZXx8W10sITEpLmxlbmd0aH19KTt2YXIgdWUsY2U9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0qKSkkLyxwZT1lZS5mbi5pbml0PWZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZighZSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKG49IjwiPT09ZVswXSYmIj4iPT09ZVtlLmxlbmd0aC0xXSYmZS5sZW5ndGg+PTM/W251bGwsZSxudWxsXTpjZS5leGVjKGUpLCFufHwhblsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fHVlKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IodCkuZmluZChlKTtpZihuWzFdKXtpZih0PXQgaW5zdGFuY2VvZiBlZT90WzBdOnQsZWUubWVyZ2UodGhpcyxlZS5wYXJzZUhUTUwoblsxXSx0JiZ0Lm5vZGVUeXBlP3Qub3duZXJEb2N1bWVudHx8dDpHLCEwKSksc2UudGVzdChuWzFdKSYmZWUuaXNQbGFpbk9iamVjdCh0KSlmb3IobiBpbiB0KWVlLmlzRnVuY3Rpb24odGhpc1tuXSk/dGhpc1tuXSh0W25dKTp0aGlzLmF0dHIobix0W25dKTtyZXR1cm4gdGhpc31yZXR1cm4gcj1HLmdldEVsZW1lbnRCeUlkKG5bMl0pLHImJnIucGFyZW50Tm9kZSYmKHRoaXMubGVuZ3RoPTEsdGhpc1swXT1yKSx0aGlzLmNvbnRleHQ9Ryx0aGlzLnNlbGVjdG9yPWUsdGhpc31yZXR1cm4gZS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOmVlLmlzRnVuY3Rpb24oZSk/InVuZGVmaW5lZCIhPXR5cGVvZiB1ZS5yZWFkeT91ZS5yZWFkeShlKTplKGVlKToodm9pZCAwIT09ZS5zZWxlY3RvciYmKHRoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9ZS5jb250ZXh0KSxlZS5tYWtlQXJyYXkoZSx0aGlzKSl9O3BlLnByb3RvdHlwZT1lZS5mbix1ZT1lZShHKTt2YXIgZmU9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8saGU9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07ZWUuZXh0ZW5kKHtkaXI6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1bXSxpPXZvaWQgMCE9PW47KGU9ZVt0XSkmJjkhPT1lLm5vZGVUeXBlOylpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmZWUoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxzaWJsaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufX0pLGVlLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PWVlKGUsdGhpcyksbj10Lmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtuPmU7ZSsrKWlmKGVlLmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxhPVtdLG89b2UudGVzdChlKXx8InN0cmluZyIhPXR5cGVvZiBlP2VlKGUsdHx8dGhpcy5jb250ZXh0KTowO2k+cjtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYobz9vLmluZGV4KG4pPi0xOjE9PT1uLm5vZGVUeXBlJiZlZS5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7YS5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhhLmxlbmd0aD4xP2VlLnVuaXF1ZShhKTphKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP0ouY2FsbChlZShlKSx0aGlzWzBdKTpKLmNhbGwodGhpcyxlLmpxdWVyeT9lWzBdOmUpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGVlLnVuaXF1ZShlZS5tZXJnZSh0aGlzLmdldCgpLGVlKGUsdCkpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pLGVlLmVhY2goe3BhcmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJjExIT09dC5ub2RlVHlwZT90Om51bGx9LHBhcmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGVlLmRpcihlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVlLmRpcihlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gYShlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBhKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBlZS5kaXIoZSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihlKXtyZXR1cm4gZWUuZGlyKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlZS5kaXIoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlZS5kaXIoZSwicHJldmlvdXNTaWJsaW5nIixuKX0sc2libGluZ3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGVlLnNpYmxpbmcoKGUucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsZSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGUpe3JldHVybiBlZS5zaWJsaW5nKGUuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnRlbnREb2N1bWVudHx8ZWUubWVyZ2UoW10sZS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGUsdCl7ZWUuZm5bZV09ZnVuY3Rpb24obixyKXt2YXIgaT1lZS5tYXAodGhpcyx0LG4pO3JldHVybiJVbnRpbCIhPT1lLnNsaWNlKC01KSYmKHI9biksciYmInN0cmluZyI9PXR5cGVvZiByJiYoaT1lZS5maWx0ZXIocixpKSksdGhpcy5sZW5ndGg+MSYmKGhlW2VdfHxlZS51bmlxdWUoaSksZmUudGVzdChlKSYmaS5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKGkpfX0pO3ZhciBkZT0vXFMrL2csbWU9e307ZWUuQ2FsbGJhY2tzPWZ1bmN0aW9uKGUpe2U9InN0cmluZyI9PXR5cGVvZiBlP21lW2VdfHxvKGUpOmVlLmV4dGVuZCh7fSxlKTt2YXIgdCxuLHIsaSxhLHMsbD1bXSx1PSFlLm9uY2UmJltdLGM9ZnVuY3Rpb24obyl7Zm9yKHQ9ZS5tZW1vcnkmJm8sbj0hMCxzPWl8fDAsaT0wLGE9bC5sZW5ndGgscj0hMDtsJiZhPnM7cysrKWlmKGxbc10uYXBwbHkob1swXSxvWzFdKT09PSExJiZlLnN0b3BPbkZhbHNlKXt0PSExO2JyZWFrfXI9ITEsbCYmKHU/dS5sZW5ndGgmJmModS5zaGlmdCgpKTp0P2w9W106cC5kaXNhYmxlKCkpfSxwPXthZGQ6ZnVuY3Rpb24oKXtpZihsKXt2YXIgbj1sLmxlbmd0aDshZnVuY3Rpb24gbyh0KXtlZS5lYWNoKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1lZS50eXBlKG4pOyJmdW5jdGlvbiI9PT1yP2UudW5pcXVlJiZwLmhhcyhuKXx8bC5wdXNoKG4pOm4mJm4ubGVuZ3RoJiYic3RyaW5nIiE9PXImJm8obil9KX0oYXJndW1lbnRzKSxyP2E9bC5sZW5ndGg6dCYmKGk9bixjKHQpKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIGwmJmVlLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuOyhuPWVlLmluQXJyYXkodCxsLG4pKT4tMTspbC5zcGxpY2UobiwxKSxyJiYoYT49biYmYS0tLHM+PW4mJnMtLSl9KSx0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZWUuaW5BcnJheShlLGwpPi0xOiEoIWx8fCFsLmxlbmd0aCl9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGw9W10sYT0wLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gbD11PXQ9dm9pZCAwLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWx9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdT12b2lkIDAsdHx8cC5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIXV9LGZpcmVXaXRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIWx8fG4mJiF1fHwodD10fHxbXSx0PVtlLHQuc2xpY2U/dC5zbGljZSgpOnRdLHI/dS5wdXNoKHQpOmModCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gcC5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW59fTtyZXR1cm4gcH0sZWUuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgdD1bWyJyZXNvbHZlIiwiZG9uZSIsZWUuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsZWUuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLGVlLkNhbGxiYWNrcygibWVtb3J5IildXSxuPSJwZW5kaW5nIixyPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBufSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIGVlLkRlZmVycmVkKGZ1bmN0aW9uKG4pe2VlLmVhY2godCxmdW5jdGlvbih0LGEpe3ZhciBvPWVlLmlzRnVuY3Rpb24oZVt0XSkmJmVbdF07aVthWzFdXShmdW5jdGlvbigpe3ZhciBlPW8mJm8uYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJmVlLmlzRnVuY3Rpb24oZS5wcm9taXNlKT9lLnByb21pc2UoKS5kb25lKG4ucmVzb2x2ZSkuZmFpbChuLnJlamVjdCkucHJvZ3Jlc3Mobi5ub3RpZnkpOm5bYVswXSsiV2l0aCJdKHRoaXM9PT1yP24ucHJvbWlzZSgpOnRoaXMsbz9bZV06YXJndW1lbnRzKX0pfSksZT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP2VlLmV4dGVuZChlLHIpOnJ9fSxpPXt9O3JldHVybiByLnBpcGU9ci50aGVuLGVlLmVhY2godCxmdW5jdGlvbihlLGEpe3ZhciBvPWFbMl0scz1hWzNdO3JbYVsxXV09by5hZGQscyYmby5hZGQoZnVuY3Rpb24oKXtuPXN9LHRbMV5lXVsyXS5kaXNhYmxlLHRbMl1bMl0ubG9jayksaVthWzBdXT1mdW5jdGlvbigpe3JldHVybiBpW2FbMF0rIldpdGgiXSh0aGlzPT09aT9yOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxpW2FbMF0rIldpdGgiXT1vLmZpcmVXaXRofSksci5wcm9taXNlKGkpLGUmJmUuY2FsbChpLGkpLGl9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9MCxhPXouY2FsbChhcmd1bWVudHMpLG89YS5sZW5ndGgscz0xIT09b3x8ZSYmZWUuaXNGdW5jdGlvbihlLnByb21pc2UpP286MCxsPTE9PT1zP2U6ZWUuRGVmZXJyZWQoKSx1PWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZnVuY3Rpb24oaSl7bltlXT10aGlzLHJbZV09YXJndW1lbnRzLmxlbmd0aD4xP3ouY2FsbChhcmd1bWVudHMpOmkscj09PXQ/bC5ub3RpZnlXaXRoKG4scik6LS1zfHxsLnJlc29sdmVXaXRoKG4scil9fTtpZihvPjEpZm9yKHQ9bmV3IEFycmF5KG8pLG49bmV3IEFycmF5KG8pLHI9bmV3IEFycmF5KG8pO28+aTtpKyspYVtpXSYmZWUuaXNGdW5jdGlvbihhW2ldLnByb21pc2UpP2FbaV0ucHJvbWlzZSgpLmRvbmUodShpLHIsYSkpLmZhaWwobC5yZWplY3QpLnByb2dyZXNzKHUoaSxuLHQpKTotLXM7cmV0dXJuIHN8fGwucmVzb2x2ZVdpdGgocixhKSxsLnByb21pc2UoKX19KTt2YXIgZ2U7ZWUuZm4ucmVhZHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGVlLnJlYWR5LnByb21pc2UoKS5kb25lKGUpLHRoaXN9LGVlLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oZSl7ZT9lZS5yZWFkeVdhaXQrKzplZS5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGUpeyhlPT09ITA/LS1lZS5yZWFkeVdhaXQ6ZWUuaXNSZWFkeSl8fChlZS5pc1JlYWR5PSEwLGUhPT0hMCYmLS1lZS5yZWFkeVdhaXQ+MHx8KGdlLnJlc29sdmVXaXRoKEcsW2VlXSksZWUuZm4udHJpZ2dlckhhbmRsZXImJihlZShHKS50cmlnZ2VySGFuZGxlcigicmVhZHkiKSxlZShHKS5vZmYoInJlYWR5IikpKSl9fSksZWUucmVhZHkucHJvbWlzZT1mdW5jdGlvbihlKXtyZXR1cm4gZ2V8fChnZT1lZS5EZWZlcnJlZCgpLCJjb21wbGV0ZSI9PT1HLnJlYWR5U3RhdGU/c2V0VGltZW91dChlZS5yZWFkeSk6KEcuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIscywhMSksdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixzLCExKSkpLGdlLnByb21pc2UoZSl9LGVlLnJlYWR5LnByb21pc2UoKTt2YXIgeWU9ZWUuYWNjZXNzPWZ1bmN0aW9uKGUsdCxuLHIsaSxhLG8pe3ZhciBzPTAsbD1lLmxlbmd0aCx1PW51bGw9PW47aWYoIm9iamVjdCI9PT1lZS50eXBlKG4pKXtpPSEwO2ZvcihzIGluIG4pZWUuYWNjZXNzKGUsdCxzLG5bc10sITAsYSxvKX1lbHNlIGlmKHZvaWQgMCE9PXImJihpPSEwLGVlLmlzRnVuY3Rpb24ocil8fChvPSEwKSx1JiYobz8odC5jYWxsKGUsciksdD1udWxsKToodT10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB1LmNhbGwoZWUoZSksbil9KSksdCkpZm9yKDtsPnM7cysrKXQoZVtzXSxuLG8/cjpyLmNhbGwoZVtzXSxzLHQoZVtzXSxuKSkpO3JldHVybiBpP2U6dT90LmNhbGwoZSk6bD90KGVbMF0sbik6YX07ZWUuYWNjZXB0RGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV8fDk9PT1lLm5vZGVUeXBlfHwhK2Uubm9kZVR5cGV9LGwudWlkPTEsbC5hY2NlcHRzPWVlLmFjY2VwdERhdGEsbC5wcm90b3R5cGU9e2tleTpmdW5jdGlvbihlKXtpZighbC5hY2NlcHRzKGUpKXJldHVybiAwO3ZhciB0PXt9LG49ZVt0aGlzLmV4cGFuZG9dO2lmKCFuKXtuPWwudWlkKys7dHJ5e3RbdGhpcy5leHBhbmRvXT17dmFsdWU6bn0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx0KX1jYXRjaChyKXt0W3RoaXMuZXhwYW5kb109bixlZS5leHRlbmQoZSx0KX19cmV0dXJuIHRoaXMuY2FjaGVbbl18fCh0aGlzLmNhY2hlW25dPXt9KSxufSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcy5rZXkoZSksYT10aGlzLmNhY2hlW2ldO2lmKCJzdHJpbmciPT10eXBlb2YgdClhW3RdPW47ZWxzZSBpZihlZS5pc0VtcHR5T2JqZWN0KGEpKWVlLmV4dGVuZCh0aGlzLmNhY2hlW2ldLHQpO2Vsc2UgZm9yKHIgaW4gdClhW3JdPXRbcl07cmV0dXJuIGF9LGdldDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY2FjaGVbdGhpcy5rZXkoZSldO3JldHVybiB2b2lkIDA9PT10P246blt0XX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4gdm9pZCAwPT09dHx8dCYmInN0cmluZyI9PXR5cGVvZiB0JiZ2b2lkIDA9PT1uPyhyPXRoaXMuZ2V0KGUsdCksdm9pZCAwIT09cj9yOnRoaXMuZ2V0KGUsZWUuY2FtZWxDYXNlKHQpKSk6KHRoaXMuc2V0KGUsdCxuKSx2b2lkIDAhPT1uP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxhPXRoaXMua2V5KGUpLG89dGhpcy5jYWNoZVthXTtpZih2b2lkIDA9PT10KXRoaXMuY2FjaGVbYV09e307ZWxzZXtlZS5pc0FycmF5KHQpP3I9dC5jb25jYXQodC5tYXAoZWUuY2FtZWxDYXNlKSk6KGk9ZWUuY2FtZWxDYXNlKHQpLHQgaW4gbz9yPVt0LGldOihyPWkscj1yIGluIG8/W3JdOnIubWF0Y2goZGUpfHxbXSkpLG49ci5sZW5ndGg7Zm9yKDtuLS07KWRlbGV0ZSBvW3Jbbl1dfX0saGFzRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4hZWUuaXNFbXB0eU9iamVjdCh0aGlzLmNhY2hlW2VbdGhpcy5leHBhbmRvXV18fHt9KX0sZGlzY2FyZDpmdW5jdGlvbihlKXtlW3RoaXMuZXhwYW5kb10mJmRlbGV0ZSB0aGlzLmNhY2hlW2VbdGhpcy5leHBhbmRvXV19fTt2YXIgdmU9bmV3IGwsYmU9bmV3IGwsd2U9L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyx4ZT0vKFtBLVpdKS9nO2VlLmV4dGVuZCh7aGFzRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gYmUuaGFzRGF0YShlKXx8dmUuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGJlLmFjY2VzcyhlLHQsbil9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtiZS5yZW1vdmUoZSx0KX0sX2RhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2ZS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe3ZlLnJlbW92ZShlLHQpfX0pLGVlLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxhPXRoaXNbMF0sbz1hJiZhLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09ZSl7aWYodGhpcy5sZW5ndGgmJihpPWJlLmdldChhKSwxPT09YS5ub2RlVHlwZSYmIXZlLmdldChhLCJoYXNEYXRhQXR0cnMiKSkpe2ZvcihuPW8ubGVuZ3RoO24tLTspb1tuXSYmKHI9b1tuXS5uYW1lLDA9PT1yLmluZGV4T2YoImRhdGEtIikmJihyPWVlLmNhbWVsQ2FzZShyLnNsaWNlKDUpKSx1KGEscixpW3JdKSkpO3ZlLnNldChhLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gaX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7YmUuc2V0KHRoaXMsZSl9KTp5ZSh0aGlzLGZ1bmN0aW9uKHQpe3ZhciBuLHI9ZWUuY2FtZWxDYXNlKGUpO2lmKGEmJnZvaWQgMD09PXQpe2lmKG49YmUuZ2V0KGEsZSksdm9pZCAwIT09bilyZXR1cm4gbjtpZihuPWJlLmdldChhLHIpLHZvaWQgMCE9PW4pcmV0dXJuIG47aWYobj11KGEscix2b2lkIDApLHZvaWQgMCE9PW4pcmV0dXJuIG59ZWxzZSB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1iZS5nZXQodGhpcyxyKTtiZS5zZXQodGhpcyxyLHQpLC0xIT09ZS5pbmRleE9mKCItIikmJnZvaWQgMCE9PW4mJmJlLnNldCh0aGlzLGUsdCl9KX0sbnVsbCx0LGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7YmUucmVtb3ZlKHRoaXMsZSl9KX19KSxlZS5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4gZT8odD0odHx8ImZ4IikrInF1ZXVlIixyPXZlLmdldChlLHQpLG4mJighcnx8ZWUuaXNBcnJheShuKT9yPXZlLmFjY2VzcyhlLHQsZWUubWFrZUFycmF5KG4pKTpyLnB1c2gobikpLHJ8fFtdKTp2b2lkIDB9LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49ZWUucXVldWUoZSx0KSxyPW4ubGVuZ3RoLGk9bi5zaGlmdCgpLGE9ZWUuX3F1ZXVlSG9va3MoZSx0KSxvPWZ1bmN0aW9uKCl7ZWUuZGVxdWV1ZShlLHQpfTsiaW5wcm9ncmVzcyI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBhLnN0b3AsaS5jYWxsKGUsbyxhKSksIXImJmEmJmEuZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihlLHQpe3ZhciBuPXQrInF1ZXVlSG9va3MiO3JldHVybiB2ZS5nZXQoZSxuKXx8dmUuYWNjZXNzKGUsbix7ZW1wdHk6ZWUuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe3ZlLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSxlZS5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iZngiLG4tLSksYXJndW1lbnRzLmxlbmd0aDxuP2VlLnF1ZXVlKHRoaXNbMF0sZSk6dm9pZCAwPT09dD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPWVlLnF1ZXVlKHRoaXMsZSx0KTtlZS5fcXVldWVIb29rcyh0aGlzLGUpLCJmeCI9PT1lJiYiaW5wcm9ncmVzcyIhPT1uWzBdJiZlZS5kZXF1ZXVlKHRoaXMsZSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZWUuZGVxdWV1ZSh0aGlzLGUpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucXVldWUoZXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTEsaT1lZS5EZWZlcnJlZCgpLGE9dGhpcyxvPXRoaXMubGVuZ3RoLHM9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgoYSxbYV0pfTtmb3IoInN0cmluZyIhPXR5cGVvZiBlJiYodD1lLGU9dm9pZCAwKSxlPWV8fCJmeCI7by0tOyluPXZlLmdldChhW29dLGUrInF1ZXVlSG9va3MiKSxuJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLGkucHJvbWlzZSh0KX19KTt2YXIgU2U9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsQWU9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxDZT1mdW5jdGlvbihlLHQpe3JldHVybiBlPXR8fGUsIm5vbmUiPT09ZWUuY3NzKGUsImRpc3BsYXkiKXx8IWVlLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKX0sRWU9L14oPzpjaGVja2JveHxyYWRpbykkL2k7IWZ1bmN0aW9uKCl7dmFyIGU9Ry5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksdD1lLmFwcGVuZENoaWxkKEcuY3JlYXRlRWxlbWVudCgiZGl2IikpLG49Ry5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO24uc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSxuLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxuLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSx0LmFwcGVuZENoaWxkKG4pLFguY2hlY2tDbG9uZT10LmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCx0LmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIsWC5ub0Nsb25lQ2hlY2tlZD0hIXQuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlfSgpO3ZhciBrZT0idW5kZWZpbmVkIjtYLmZvY3VzaW5CdWJibGVzPSJvbmZvY3VzaW4iaW4gdDt2YXIgT2U9L15rZXkvLGplPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudSl8Y2xpY2svLFRlPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxJZT0vXihbXi5dKikoPzpcLiguKyl8KSQvO2VlLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIGEsbyxzLGwsdSxjLHAsZixoLGQsbSxnPXZlLmdldChlKTtpZihnKWZvcihuLmhhbmRsZXImJihhPW4sbj1hLmhhbmRsZXIsaT1hLnNlbGVjdG9yKSxuLmd1aWR8fChuLmd1aWQ9ZWUuZ3VpZCsrKSwobD1nLmV2ZW50cyl8fChsPWcuZXZlbnRzPXt9KSwobz1nLmhhbmRsZSl8fChvPWcuaGFuZGxlPWZ1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgZWUhPT1rZSYmZWUuZXZlbnQudHJpZ2dlcmVkIT09dC50eXBlP2VlLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGUsYXJndW1lbnRzKTp2b2lkIDB9KSx0PSh0fHwiIikubWF0Y2goZGUpfHxbIiJdLHU9dC5sZW5ndGg7dS0tOylzPUllLmV4ZWModFt1XSl8fFtdLGg9bT1zWzFdLGQ9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxoJiYocD1lZS5ldmVudC5zcGVjaWFsW2hdfHx7fSwKaD0oaT9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8aCxwPWVlLmV2ZW50LnNwZWNpYWxbaF18fHt9LGM9ZWUuZXh0ZW5kKHt0eXBlOmgsb3JpZ1R5cGU6bSxkYXRhOnIsaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOmksbmVlZHNDb250ZXh0OmkmJmVlLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoaSksbmFtZXNwYWNlOmQuam9pbigiLiIpfSxhKSwoZj1sW2hdKXx8KGY9bFtoXT1bXSxmLmRlbGVnYXRlQ291bnQ9MCxwLnNldHVwJiZwLnNldHVwLmNhbGwoZSxyLGQsbykhPT0hMXx8ZS5hZGRFdmVudExpc3RlbmVyJiZlLmFkZEV2ZW50TGlzdGVuZXIoaCxvLCExKSkscC5hZGQmJihwLmFkZC5jYWxsKGUsYyksYy5oYW5kbGVyLmd1aWR8fChjLmhhbmRsZXIuZ3VpZD1uLmd1aWQpKSxpP2Yuc3BsaWNlKGYuZGVsZWdhdGVDb3VudCsrLDAsYyk6Zi5wdXNoKGMpLGVlLmV2ZW50Lmdsb2JhbFtoXT0hMCl9LHJlbW92ZTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBhLG8scyxsLHUsYyxwLGYsaCxkLG0sZz12ZS5oYXNEYXRhKGUpJiZ2ZS5nZXQoZSk7aWYoZyYmKGw9Zy5ldmVudHMpKXtmb3IodD0odHx8IiIpLm1hdGNoKGRlKXx8WyIiXSx1PXQubGVuZ3RoO3UtLTspaWYocz1JZS5leGVjKHRbdV0pfHxbXSxoPW09c1sxXSxkPShzWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksaCl7Zm9yKHA9ZWUuZXZlbnQuc3BlY2lhbFtoXXx8e30saD0ocj9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8aCxmPWxbaF18fFtdLHM9c1syXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIrZC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxvPWE9Zi5sZW5ndGg7YS0tOyljPWZbYV0sIWkmJm0hPT1jLm9yaWdUeXBlfHxuJiZuLmd1aWQhPT1jLmd1aWR8fHMmJiFzLnRlc3QoYy5uYW1lc3BhY2UpfHxyJiZyIT09Yy5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYy5zZWxlY3Rvcil8fChmLnNwbGljZShhLDEpLGMuc2VsZWN0b3ImJmYuZGVsZWdhdGVDb3VudC0tLHAucmVtb3ZlJiZwLnJlbW92ZS5jYWxsKGUsYykpO28mJiFmLmxlbmd0aCYmKHAudGVhcmRvd24mJnAudGVhcmRvd24uY2FsbChlLGQsZy5oYW5kbGUpIT09ITF8fGVlLnJlbW92ZUV2ZW50KGUsaCxnLmhhbmRsZSksZGVsZXRlIGxbaF0pfWVsc2UgZm9yKGggaW4gbCllZS5ldmVudC5yZW1vdmUoZSxoK3RbdV0sbixyLCEwKTtlZS5pc0VtcHR5T2JqZWN0KGwpJiYoZGVsZXRlIGcuaGFuZGxlLHZlLnJlbW92ZShlLCJldmVudHMiKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKGUsbixyLGkpe3ZhciBhLG8scyxsLHUsYyxwLGY9W3J8fEddLGg9US5jYWxsKGUsInR5cGUiKT9lLnR5cGU6ZSxkPVEuY2FsbChlLCJuYW1lc3BhY2UiKT9lLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKG89cz1yPXJ8fEcsMyE9PXIubm9kZVR5cGUmJjghPT1yLm5vZGVUeXBlJiYhVGUudGVzdChoK2VlLmV2ZW50LnRyaWdnZXJlZCkmJihoLmluZGV4T2YoIi4iKT49MCYmKGQ9aC5zcGxpdCgiLiIpLGg9ZC5zaGlmdCgpLGQuc29ydCgpKSx1PWguaW5kZXhPZigiOiIpPDAmJiJvbiIraCxlPWVbZWUuZXhwYW5kb10/ZTpuZXcgZWUuRXZlbnQoaCwib2JqZWN0Ij09dHlwZW9mIGUmJmUpLGUuaXNUcmlnZ2VyPWk/MjozLGUubmFtZXNwYWNlPWQuam9pbigiLiIpLGUubmFtZXNwYWNlX3JlPWUubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2Quam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxlLnJlc3VsdD12b2lkIDAsZS50YXJnZXR8fChlLnRhcmdldD1yKSxuPW51bGw9PW4/W2VdOmVlLm1ha2VBcnJheShuLFtlXSkscD1lZS5ldmVudC5zcGVjaWFsW2hdfHx7fSxpfHwhcC50cmlnZ2VyfHxwLnRyaWdnZXIuYXBwbHkocixuKSE9PSExKSl7aWYoIWkmJiFwLm5vQnViYmxlJiYhZWUuaXNXaW5kb3cocikpe2ZvcihsPXAuZGVsZWdhdGVUeXBlfHxoLFRlLnRlc3QobCtoKXx8KG89by5wYXJlbnROb2RlKTtvO289by5wYXJlbnROb2RlKWYucHVzaChvKSxzPW87cz09PShyLm93bmVyRG9jdW1lbnR8fEcpJiZmLnB1c2gocy5kZWZhdWx0Vmlld3x8cy5wYXJlbnRXaW5kb3d8fHQpfWZvcihhPTA7KG89ZlthKytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspZS50eXBlPWE+MT9sOnAuYmluZFR5cGV8fGgsYz0odmUuZ2V0KG8sImV2ZW50cyIpfHx7fSlbZS50eXBlXSYmdmUuZ2V0KG8sImhhbmRsZSIpLGMmJmMuYXBwbHkobyxuKSxjPXUmJm9bdV0sYyYmYy5hcHBseSYmZWUuYWNjZXB0RGF0YShvKSYmKGUucmVzdWx0PWMuYXBwbHkobyxuKSxlLnJlc3VsdD09PSExJiZlLnByZXZlbnREZWZhdWx0KCkpO3JldHVybiBlLnR5cGU9aCxpfHxlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxwLl9kZWZhdWx0JiZwLl9kZWZhdWx0LmFwcGx5KGYucG9wKCksbikhPT0hMXx8IWVlLmFjY2VwdERhdGEocil8fHUmJmVlLmlzRnVuY3Rpb24ocltoXSkmJiFlZS5pc1dpbmRvdyhyKSYmKHM9clt1XSxzJiYoclt1XT1udWxsKSxlZS5ldmVudC50cmlnZ2VyZWQ9aCxyW2hdKCksZWUuZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxzJiYoclt1XT1zKSksZS5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXtlPWVlLmV2ZW50LmZpeChlKTt2YXIgdCxuLHIsaSxhLG89W10scz16LmNhbGwoYXJndW1lbnRzKSxsPSh2ZS5nZXQodGhpcywiZXZlbnRzIil8fHt9KVtlLnR5cGVdfHxbXSx1PWVlLmV2ZW50LnNwZWNpYWxbZS50eXBlXXx8e307aWYoc1swXT1lLGUuZGVsZWdhdGVUYXJnZXQ9dGhpcywhdS5wcmVEaXNwYXRjaHx8dS5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsZSkhPT0hMSl7Zm9yKG89ZWUuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLGUsbCksdD0wOyhpPW9bdCsrXSkmJiFlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7KWZvcihlLmN1cnJlbnRUYXJnZXQ9aS5lbGVtLG49MDsoYT1pLmhhbmRsZXJzW24rK10pJiYhZS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpOykoIWUubmFtZXNwYWNlX3JlfHxlLm5hbWVzcGFjZV9yZS50ZXN0KGEubmFtZXNwYWNlKSkmJihlLmhhbmRsZU9iaj1hLGUuZGF0YT1hLmRhdGEscj0oKGVlLmV2ZW50LnNwZWNpYWxbYS5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGEuaGFuZGxlcikuYXBwbHkoaS5lbGVtLHMpLHZvaWQgMCE9PXImJihlLnJlc3VsdD1yKT09PSExJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpKTtyZXR1cm4gdS5wb3N0RGlzcGF0Y2gmJnUucG9zdERpc3BhdGNoLmNhbGwodGhpcyxlKSxlLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLGEsbz1bXSxzPXQuZGVsZWdhdGVDb3VudCxsPWUudGFyZ2V0O2lmKHMmJmwubm9kZVR5cGUmJighZS5idXR0b258fCJjbGljayIhPT1lLnR5cGUpKWZvcig7bCE9PXRoaXM7bD1sLnBhcmVudE5vZGV8fHRoaXMpaWYobC5kaXNhYmxlZCE9PSEwfHwiY2xpY2siIT09ZS50eXBlKXtmb3Iocj1bXSxuPTA7cz5uO24rKylhPXRbbl0saT1hLnNlbGVjdG9yKyIgIix2b2lkIDA9PT1yW2ldJiYocltpXT1hLm5lZWRzQ29udGV4dD9lZShpLHRoaXMpLmluZGV4KGwpPj0wOmVlLmZpbmQoaSx0aGlzLG51bGwsW2xdKS5sZW5ndGgpLHJbaV0mJnIucHVzaChhKTtyLmxlbmd0aCYmby5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6cn0pfXJldHVybiBzPHQubGVuZ3RoJiZvLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczp0LnNsaWNlKHMpfSksb30scHJvcHM6ImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWUud2hpY2gmJihlLndoaWNoPW51bGwhPXQuY2hhckNvZGU/dC5jaGFyQ29kZTp0LmtleUNvZGUpLGV9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxhPXQuYnV0dG9uO3JldHVybiBudWxsPT1lLnBhZ2VYJiZudWxsIT10LmNsaWVudFgmJihuPWUudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fEcscj1uLmRvY3VtZW50RWxlbWVudCxpPW4uYm9keSxlLnBhZ2VYPXQuY2xpZW50WCsociYmci5zY3JvbGxMZWZ0fHxpJiZpLnNjcm9sbExlZnR8fDApLShyJiZyLmNsaWVudExlZnR8fGkmJmkuY2xpZW50TGVmdHx8MCksZS5wYWdlWT10LmNsaWVudFkrKHImJnIuc2Nyb2xsVG9wfHxpJiZpLnNjcm9sbFRvcHx8MCktKHImJnIuY2xpZW50VG9wfHxpJiZpLmNsaWVudFRvcHx8MCkpLGUud2hpY2h8fHZvaWQgMD09PWF8fChlLndoaWNoPTEmYT8xOjImYT8zOjQmYT8yOjApLGV9fSxmaXg6ZnVuY3Rpb24oZSl7aWYoZVtlZS5leHBhbmRvXSlyZXR1cm4gZTt2YXIgdCxuLHIsaT1lLnR5cGUsYT1lLG89dGhpcy5maXhIb29rc1tpXTtmb3Iob3x8KHRoaXMuZml4SG9va3NbaV09bz1qZS50ZXN0KGkpP3RoaXMubW91c2VIb29rczpPZS50ZXN0KGkpP3RoaXMua2V5SG9va3M6e30pLHI9by5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChvLnByb3BzKTp0aGlzLnByb3BzLGU9bmV3IGVlLkV2ZW50KGEpLHQ9ci5sZW5ndGg7dC0tOyluPXJbdF0sZVtuXT1hW25dO3JldHVybiBlLnRhcmdldHx8KGUudGFyZ2V0PUcpLDM9PT1lLnRhcmdldC5ub2RlVHlwZSYmKGUudGFyZ2V0PWUudGFyZ2V0LnBhcmVudE5vZGUpLG8uZmlsdGVyP28uZmlsdGVyKGUsYSk6ZX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMhPT1mKCkmJnRoaXMuZm9jdXM/KHRoaXMuZm9jdXMoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1mKCkmJnRoaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmZWUubm9kZU5hbWUodGhpcywiaW5wdXQiKT8odGhpcy5jbGljaygpLCExKTp2b2lkIDB9LF9kZWZhdWx0OmZ1bmN0aW9uKGUpe3JldHVybiBlZS5ub2RlTmFtZShlLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVudCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZWUuZXh0ZW5kKG5ldyBlZS5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO3I/ZWUuZXZlbnQudHJpZ2dlcihpLG51bGwsdCk6ZWUuZXZlbnQuZGlzcGF0Y2guY2FsbCh0LGkpLGkuaXNEZWZhdWx0UHJldmVudGVkKCkmJm4ucHJldmVudERlZmF1bHQoKX19LGVlLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITEpfSxlZS5FdmVudD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZWUuRXZlbnQ/KGUmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fHZvaWQgMD09PWUuZGVmYXVsdFByZXZlbnRlZCYmZS5yZXR1cm5WYWx1ZT09PSExP2M6cCk6dGhpcy50eXBlPWUsdCYmZWUuZXh0ZW5kKHRoaXMsdCksdGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fGVlLm5vdygpLHZvaWQodGhpc1tlZS5leHBhbmRvXT0hMCkpOm5ldyBlZS5FdmVudChlLHQpfSxlZS5FdmVudC5wcm90b3R5cGU9e2lzRGVmYXVsdFByZXZlbnRlZDpwLGlzUHJvcGFnYXRpb25TdG9wcGVkOnAsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6cCxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1jLGUmJmUucHJldmVudERlZmF1bHQmJmUucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9YyxlJiZlLnN0b3BQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9YyxlJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sZWUuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oZSx0KXtlZS5ldmVudC5zcGVjaWFsW2VdPXtkZWxlZ2F0ZVR5cGU6dCxiaW5kVHlwZTp0LGhhbmRsZTpmdW5jdGlvbihlKXt2YXIgbixyPXRoaXMsaT1lLnJlbGF0ZWRUYXJnZXQsYT1lLmhhbmRsZU9iajtyZXR1cm4oIWl8fGkhPT1yJiYhZWUuY29udGFpbnMocixpKSkmJihlLnR5cGU9YS5vcmlnVHlwZSxuPWEuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQpLG59fX0pLFguZm9jdXNpbkJ1YmJsZXN8fGVlLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7ZWUuZXZlbnQuc2ltdWxhdGUodCxlLnRhcmdldCxlZS5ldmVudC5maXgoZSksITApfTtlZS5ldmVudC5zcGVjaWFsW3RdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciByPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxpPXZlLmFjY2VzcyhyLHQpO2l8fHIuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITApLHZlLmFjY2VzcyhyLHQsKGl8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciByPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxpPXZlLmFjY2VzcyhyLHQpLTE7aT92ZS5hY2Nlc3Mocix0LGkpOihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuLCEwKSx2ZS5yZW1vdmUocix0KSl9fX0pLGVlLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgYSxvO2lmKCJvYmplY3QiPT10eXBlb2YgZSl7InN0cmluZyIhPXR5cGVvZiB0JiYobj1ufHx0LHQ9dm9pZCAwKTtmb3IobyBpbiBlKXRoaXMub24obyx0LG4sZVtvXSxpKTtyZXR1cm4gdGhpc31pZihudWxsPT1uJiZudWxsPT1yPyhyPXQsbj10PXZvaWQgMCk6bnVsbD09ciYmKCJzdHJpbmciPT10eXBlb2YgdD8ocj1uLG49dm9pZCAwKToocj1uLG49dCx0PXZvaWQgMCkpLHI9PT0hMSlyPXA7ZWxzZSBpZighcilyZXR1cm4gdGhpcztyZXR1cm4gMT09PWkmJihhPXIscj1mdW5jdGlvbihlKXtyZXR1cm4gZWUoKS5vZmYoZSksYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHIuZ3VpZD1hLmd1aWR8fChhLmd1aWQ9ZWUuZ3VpZCsrKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZWUuZXZlbnQuYWRkKHRoaXMsZSxyLG4sdCl9KX0sb25lOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKGUsdCxuLHIsMSl9LG9mZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRsZU9iailyZXR1cm4gcj1lLmhhbmRsZU9iaixlZShlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsiLiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0aGlzfXJldHVybih0PT09ITF8fCJmdW5jdGlvbiI9PXR5cGVvZiB0KSYmKG49dCx0PXZvaWQgMCksbj09PSExJiYobj1wKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtlZS5ldmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX0sdHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtlZS5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXNbMF07cmV0dXJuIG4/ZWUuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCk6dm9pZCAwfX0pO3ZhciBfZT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLERlPS88KFtcdzpdKykvLExlPS88fCYjP1x3KzsvLFBlPS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksTmU9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksJGU9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLE1lPS9edHJ1ZVwvKC4qKS8sUmU9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLEZlPXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07RmUub3B0Z3JvdXA9RmUub3B0aW9uLEZlLnRib2R5PUZlLnRmb290PUZlLmNvbGdyb3VwPUZlLmNhcHRpb249RmUudGhlYWQsRmUudGg9RmUudGQsZWUuZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxhLG8scz1lLmNsb25lTm9kZSghMCksbD1lZS5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSk7aWYoIShYLm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHxlZS5pc1hNTERvYyhlKSkpZm9yKG89dihzKSxhPXYoZSkscj0wLGk9YS5sZW5ndGg7aT5yO3IrKyliKGFbcl0sb1tyXSk7aWYodClpZihuKWZvcihhPWF8fHYoZSksbz1vfHx2KHMpLHI9MCxpPWEubGVuZ3RoO2k+cjtyKyspeShhW3JdLG9bcl0pO2Vsc2UgeShlLHMpO3JldHVybiBvPXYocywic2NyaXB0Iiksby5sZW5ndGg+MCYmZyhvLCFsJiZ2KGUsInNjcmlwdCIpKSxzfSxidWlsZEZyYWdtZW50OmZ1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgaSxhLG8scyxsLHUsYz10LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxwPVtdLGY9MCxoPWUubGVuZ3RoO2g+ZjtmKyspaWYoaT1lW2ZdLGl8fDA9PT1pKWlmKCJvYmplY3QiPT09ZWUudHlwZShpKSllZS5tZXJnZShwLGkubm9kZVR5cGU/W2ldOmkpO2Vsc2UgaWYoTGUudGVzdChpKSl7Zm9yKGE9YXx8Yy5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxvPShEZS5leGVjKGkpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLHM9RmVbb118fEZlLl9kZWZhdWx0LGEuaW5uZXJIVE1MPXNbMV0raS5yZXBsYWNlKF9lLCI8JDE+PC8kMj4iKStzWzJdLHU9c1swXTt1LS07KWE9YS5sYXN0Q2hpbGQ7ZWUubWVyZ2UocCxhLmNoaWxkTm9kZXMpLGE9Yy5maXJzdENoaWxkLGEudGV4dENvbnRlbnQ9IiJ9ZWxzZSBwLnB1c2godC5jcmVhdGVUZXh0Tm9kZShpKSk7Zm9yKGMudGV4dENvbnRlbnQ9IiIsZj0wO2k9cFtmKytdOylpZigoIXJ8fC0xPT09ZWUuaW5BcnJheShpLHIpKSYmKGw9ZWUuY29udGFpbnMoaS5vd25lckRvY3VtZW50LGkpLGE9dihjLmFwcGVuZENoaWxkKGkpLCJzY3JpcHQiKSxsJiZnKGEpLG4pKWZvcih1PTA7aT1hW3UrK107KSRlLnRlc3QoaS50eXBlfHwiIikmJm4ucHVzaChpKTtyZXR1cm4gY30sY2xlYW5EYXRhOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaSxhPWVlLmV2ZW50LnNwZWNpYWwsbz0wO3ZvaWQgMCE9PShuPWVbb10pO28rKyl7aWYoZWUuYWNjZXB0RGF0YShuKSYmKGk9blt2ZS5leHBhbmRvXSxpJiYodD12ZS5jYWNoZVtpXSkpKXtpZih0LmV2ZW50cylmb3IociBpbiB0LmV2ZW50cylhW3JdP2VlLmV2ZW50LnJlbW92ZShuLHIpOmVlLnJlbW92ZUV2ZW50KG4scix0LmhhbmRsZSk7dmUuY2FjaGVbaV0mJmRlbGV0ZSB2ZS5jYWNoZVtpXX1kZWxldGUgYmUuY2FjaGVbbltiZS5leHBhbmRvXV19fX0pLGVlLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihlKXtyZXR1cm4geWUodGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9lZS50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7KDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKSYmKHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PWgodGhpcyxlKTt0LmFwcGVuZENoaWxkKGUpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1oKHRoaXMsZSk7dC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHI9ZT9lZS5maWx0ZXIoZSx0aGlzKTp0aGlzLGk9MDtudWxsIT0obj1yW2ldKTtpKyspdHx8MSE9PW4ubm9kZVR5cGV8fGVlLmNsZWFuRGF0YSh2KG4pKSxuLnBhcmVudE5vZGUmJih0JiZlZS5jb250YWlucyhuLm93bmVyRG9jdW1lbnQsbikmJmcodihuLCJzY3JpcHQiKSksbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD0wO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKGVlLmNsZWFuRGF0YSh2KGUsITEpKSxlLnRleHRDb250ZW50PSIiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsPT1lPyExOmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBlZS5jbG9uZSh0aGlzLGUsdCl9KX0saHRtbDpmdW5jdGlvbihlKXtyZXR1cm4geWUodGhpcyxmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdfHx7fSxuPTAscj10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1lJiYxPT09dC5ub2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYhUGUudGVzdChlKSYmIUZlWyhEZS5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1lLnJlcGxhY2UoX2UsIjwkMT48LyQyPiIpO3RyeXtmb3IoO3I+bjtuKyspdD10aGlzW25dfHx7fSwxPT09dC5ub2RlVHlwZSYmKGVlLmNsZWFuRGF0YSh2KHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goaSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbih0KXtlPXRoaXMucGFyZW50Tm9kZSxlZS5jbGVhbkRhdGEodih0aGlzKSksZSYmZS5yZXBsYWNlQ2hpbGQodCx0aGlzKX0pLGUmJihlLmxlbmd0aHx8ZS5ub2RlVHlwZSk/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVtb3ZlKGUsITApfSxkb21NYW5pcDpmdW5jdGlvbihlLHQpe2U9Vi5hcHBseShbXSxlKTt2YXIgbixyLGksYSxvLHMsbD0wLHU9dGhpcy5sZW5ndGgsYz10aGlzLHA9dS0xLGY9ZVswXSxoPWVlLmlzRnVuY3Rpb24oZik7aWYoaHx8dT4xJiYic3RyaW5nIj09dHlwZW9mIGYmJiFYLmNoZWNrQ2xvbmUmJk5lLnRlc3QoZikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXt2YXIgcj1jLmVxKG4pO2gmJihlWzBdPWYuY2FsbCh0aGlzLG4sci5odG1sKCkpKSxyLmRvbU1hbmlwKGUsdCl9KTtpZih1JiYobj1lZS5idWlsZEZyYWdtZW50KGUsdGhpc1swXS5vd25lckRvY3VtZW50LCExLHRoaXMpLHI9bi5maXJzdENoaWxkLDE9PT1uLmNoaWxkTm9kZXMubGVuZ3RoJiYobj1yKSxyKSl7Zm9yKGk9ZWUubWFwKHYobiwic2NyaXB0IiksZCksYT1pLmxlbmd0aDt1Pmw7bCsrKW89bixsIT09cCYmKG89ZWUuY2xvbmUobywhMCwhMCksYSYmZWUubWVyZ2UoaSx2KG8sInNjcmlwdCIpKSksdC5jYWxsKHRoaXNbbF0sbyxsKTtpZihhKWZvcihzPWlbaS5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxlZS5tYXAoaSxtKSxsPTA7YT5sO2wrKylvPWlbbF0sJGUudGVzdChvLnR5cGV8fCIiKSYmIXZlLmFjY2VzcyhvLCJnbG9iYWxFdmFsIikmJmVlLmNvbnRhaW5zKHMsbykmJihvLnNyYz9lZS5fZXZhbFVybCYmZWUuX2V2YWxVcmwoby5zcmMpOmVlLmdsb2JhbEV2YWwoby50ZXh0Q29udGVudC5yZXBsYWNlKFJlLCIiKSkpfXJldHVybiB0aGlzfX0pLGVlLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLHQpe2VlLmZuW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbixyPVtdLGk9ZWUoZSksYT1pLmxlbmd0aC0xLG89MDthPj1vO28rKyluPW89PT1hP3RoaXM6dGhpcy5jbG9uZSghMCksZWUoaVtvXSlbdF0obiksVy5hcHBseShyLG4uZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhyKX19KTt2YXIgVWUsQmU9e30scWU9L15tYXJnaW4vLEhlPW5ldyBSZWdFeHAoIl4oIitTZSsiKSg/IXB4KVthLXolXSskIiwiaSIpLHplPWZ1bmN0aW9uKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcub3BlbmVyP2Uub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCk6dC5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCl9OyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtvLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MSU7dG9wOjElO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NHB4O3Bvc2l0aW9uOmFic29sdXRlIixvLmlubmVySFRNTD0iIixpLmFwcGVuZENoaWxkKGEpO3ZhciBlPXQuZ2V0Q29tcHV0ZWRTdHlsZShvLG51bGwpO249IjElIiE9PWUudG9wLHI9IjRweCI9PT1lLndpZHRoLGkucmVtb3ZlQ2hpbGQoYSl9dmFyIG4scixpPUcuZG9jdW1lbnRFbGVtZW50LGE9Ry5jcmVhdGVFbGVtZW50KCJkaXYiKSxvPUcuY3JlYXRlRWxlbWVudCgiZGl2Iik7by5zdHlsZSYmKG8uc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixvLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsWC5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PW8uc3R5bGUuYmFja2dyb3VuZENsaXAsYS5zdHlsZS5jc3NUZXh0PSJib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweDttYXJnaW4tdG9wOjFweDtwb3NpdGlvbjphYnNvbHV0ZSIsYS5hcHBlbmRDaGlsZChvKSx0LmdldENvbXB1dGVkU3R5bGUmJmVlLmV4dGVuZChYLHtwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxufSxib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1yJiZlKCkscn0scmVsaWFibGVNYXJnaW5SaWdodDpmdW5jdGlvbigpe3ZhciBlLG49by5hcHBlbmRDaGlsZChHLmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtyZXR1cm4gbi5zdHlsZS5jc3NUZXh0PW8uc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowIixuLnN0eWxlLm1hcmdpblJpZ2h0PW4uc3R5bGUud2lkdGg9IjAiLG8uc3R5bGUud2lkdGg9IjFweCIsaS5hcHBlbmRDaGlsZChhKSxlPSFwYXJzZUZsb2F0KHQuZ2V0Q29tcHV0ZWRTdHlsZShuLG51bGwpLm1hcmdpblJpZ2h0KSxpLnJlbW92ZUNoaWxkKGEpLG8ucmVtb3ZlQ2hpbGQobiksZX19KSl9KCksZWUuc3dhcD1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxhLG89e307Zm9yKGEgaW4gdClvW2FdPWUuc3R5bGVbYV0sZS5zdHlsZVthXT10W2FdO2k9bi5hcHBseShlLHJ8fFtdKTtmb3IoYSBpbiB0KWUuc3R5bGVbYV09b1thXTtyZXR1cm4gaX07dmFyIFZlPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxXZT1uZXcgUmVnRXhwKCJeKCIrU2UrIikoLiopJCIsImkiKSxKZT1uZXcgUmVnRXhwKCJeKFsrLV0pPSgiK1NlKyIpIiwiaSIpLFllPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxLZT17bGV0dGVyU3BhY2luZzoiMCIsZm9udFdlaWdodDoiNDAwIn0sUWU9WyJXZWJraXQiLCJPIiwiTW96IiwibXMiXTtlZS5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj1TKGUsIm9wYWNpdHkiKTtyZXR1cm4iIj09PW4/IjEiOm59fX19LGNzc051bWJlcjp7Y29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6ImNzc0Zsb2F0In0sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxhLG8scz1lZS5jYW1lbENhc2UodCksbD1lLnN0eWxlO3JldHVybiB0PWVlLmNzc1Byb3BzW3NdfHwoZWUuY3NzUHJvcHNbc109QyhsLHMpKSxvPWVlLmNzc0hvb2tzW3RdfHxlZS5jc3NIb29rc1tzXSx2b2lkIDA9PT1uP28mJiJnZXQiaW4gbyYmdm9pZCAwIT09KGk9by5nZXQoZSwhMSxyKSk/aTpsW3RdOihhPXR5cGVvZiBuLCJzdHJpbmciPT09YSYmKGk9SmUuZXhlYyhuKSkmJihuPShpWzFdKzEpKmlbMl0rcGFyc2VGbG9hdChlZS5jc3MoZSx0KSksYT0ibnVtYmVyIiksbnVsbCE9biYmbj09PW4mJigibnVtYmVyIiE9PWF8fGVlLmNzc051bWJlcltzXXx8KG4rPSJweCIpLFguY2xlYXJDbG9uZVN0eWxlfHwiIiE9PW58fDAhPT10LmluZGV4T2YoImJhY2tncm91bmQiKXx8KGxbdF09ImluaGVyaXQiKSxvJiYic2V0ImluIG8mJnZvaWQgMD09PShuPW8uc2V0KGUsbixyKSl8fChsW3RdPW4pKSx2b2lkIDApfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLGEsbyxzPWVlLmNhbWVsQ2FzZSh0KTtyZXR1cm4gdD1lZS5jc3NQcm9wc1tzXXx8KGVlLmNzc1Byb3BzW3NdPUMoZS5zdHlsZSxzKSksbz1lZS5jc3NIb29rc1t0XXx8ZWUuY3NzSG9va3Nbc10sbyYmImdldCJpbiBvJiYoaT1vLmdldChlLCEwLG4pKSx2b2lkIDA9PT1pJiYoaT1TKGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIEtlJiYoaT1LZVt0XSksIiI9PT1ufHxuPyhhPXBhcnNlRmxvYXQoaSksbj09PSEwfHxlZS5pc051bWVyaWMoYSk/YXx8MDppKTppfX0pLGVlLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGUsdCl7ZWUuY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7cmV0dXJuIG4/VmUudGVzdChlZS5jc3MoZSwiZGlzcGxheSIpKSYmMD09PWUub2Zmc2V0V2lkdGg/ZWUuc3dhcChlLFllLGZ1bmN0aW9uKCl7cmV0dXJuIE8oZSx0LHIpfSk6TyhlLHQscik6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPXImJnplKGUpO3JldHVybiBFKGUsbixyP2soZSx0LHIsImJvcmRlci1ib3giPT09ZWUuY3NzKGUsImJveFNpemluZyIsITEsaSksaSk6MCl9fX0pLGVlLmNzc0hvb2tzLm1hcmdpblJpZ2h0PUEoWC5yZWxpYWJsZU1hcmdpblJpZ2h0LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZWUuc3dhcChlLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxTLFtlLCJtYXJnaW5SaWdodCJdKTp2b2lkIDB9KSxlZS5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oZSx0KXtlZS5jc3NIb29rc1tlK3RdPXtleHBhbmQ6ZnVuY3Rpb24obil7Zm9yKHZhciByPTAsaT17fSxhPSJzdHJpbmciPT10eXBlb2Ygbj9uLnNwbGl0KCIgIik6W25dOzQ+cjtyKyspaVtlK0FlW3JdK3RdPWFbcl18fGFbci0yXXx8YVswXTtyZXR1cm4gaX19LHFlLnRlc3QoZSl8fChlZS5jc3NIb29rc1tlK3RdLnNldD1FKX0pLGVlLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHllKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksYT17fSxvPTA7aWYoZWUuaXNBcnJheSh0KSl7Zm9yKHI9emUoZSksaT10Lmxlbmd0aDtpPm87bysrKWFbdFtvXV09ZWUuY3NzKGUsdFtvXSwhMSxyKTtyZXR1cm4gYX1yZXR1cm4gdm9pZCAwIT09bj9lZS5zdHlsZShlLHQsbik6ZWUuY3NzKGUsdCl9LGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gaih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtDZSh0aGlzKT9lZSh0aGlzKS5zaG93KCk6ZWUodGhpcykuaGlkZSgpfSl9fSksZWUuVHdlZW49VCxULnByb3RvdHlwZT17Y29uc3RydWN0b3I6VCxpbml0OmZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHwic3dpbmciLHRoaXMub3B0aW9ucz10LHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1yLHRoaXMudW5pdD1hfHwoZWUuY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1ULnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlzKTpULnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPVQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMub3B0aW9ucy5kdXJhdGlvbj90aGlzLnBvcz10PWVlLmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6VC5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSxULnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1ULnByb3RvdHlwZSxULnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09ZS5lbGVtW2UucHJvcF18fGUuZWxlbS5zdHlsZSYmbnVsbCE9ZS5lbGVtLnN0eWxlW2UucHJvcF0/KHQ9ZWUuY3NzKGUuZWxlbSxlLnByb3AsIiIpLHQmJiJhdXRvIiE9PXQ/dDowKTplLmVsZW1bZS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGUpe2VlLmZ4LnN0ZXBbZS5wcm9wXT9lZS5meC5zdGVwW2UucHJvcF0oZSk6ZS5lbGVtLnN0eWxlJiYobnVsbCE9ZS5lbGVtLnN0eWxlW2VlLmNzc1Byb3BzW2UucHJvcF1dfHxlZS5jc3NIb29rc1tlLnByb3BdKT9lZS5zdHlsZShlLmVsZW0sZS5wcm9wLGUubm93K2UudW5pdCk6ZS5lbGVtW2UucHJvcF09ZS5ub3d9fX0sVC5wcm9wSG9va3Muc2Nyb2xsVG9wPVQucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0sZWUuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn19LGVlLmZ4PVQucHJvdG90eXBlLmluaXQsZWUuZnguc3RlcD17fTt2YXIgWGUsR2UsWmU9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGV0PW5ldyBSZWdFeHAoIl4oPzooWystXSk9fCkoIitTZSsiKShbYS16JV0qKSQiLCJpIiksdHQ9L3F1ZXVlSG9va3MkLyxudD1bTF0scnQ9eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCkscj1uLmN1cigpLGk9ZXQuZXhlYyh0KSxhPWkmJmlbM118fChlZS5jc3NOdW1iZXJbZV0/IiI6InB4Iiksbz0oZWUuY3NzTnVtYmVyW2VdfHwicHgiIT09YSYmK3IpJiZldC5leGVjKGVlLmNzcyhuLmVsZW0sZSkpLHM9MSxsPTIwO2lmKG8mJm9bM10hPT1hKXthPWF8fG9bM10saT1pfHxbXSxvPStyfHwxO2RvIHM9c3x8Ii41IixvLz1zLGVlLnN0eWxlKG4uZWxlbSxlLG8rYSk7d2hpbGUocyE9PShzPW4uY3VyKCkvcikmJjEhPT1zJiYtLWwpfXJldHVybiBpJiYobz1uLnN0YXJ0PStvfHwrcnx8MCxuLnVuaXQ9YSxuLmVuZD1pWzFdP28rKGlbMV0rMSkqaVsyXToraVsyXSksbn1dfTtlZS5BbmltYXRpb249ZWUuZXh0ZW5kKE4se3R3ZWVuZXI6ZnVuY3Rpb24oZSx0KXtlZS5pc0Z1bmN0aW9uKGUpPyh0PWUsZT1bIioiXSk6ZT1lLnNwbGl0KCIgIik7Zm9yKHZhciBuLHI9MCxpPWUubGVuZ3RoO2k+cjtyKyspbj1lW3JdLHJ0W25dPXJ0W25dfHxbXSxydFtuXS51bnNoaWZ0KHQpfSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P250LnVuc2hpZnQoZSk6bnQucHVzaChlKX19KSxlZS5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP2VlLmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fGVlLmlzRnVuY3Rpb24oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIWVlLmlzRnVuY3Rpb24odCkmJnR9O3JldHVybiByLmR1cmF0aW9uPWVlLmZ4Lm9mZj8wOiJudW1iZXIiPT10eXBlb2Ygci5kdXJhdGlvbj9yLmR1cmF0aW9uOnIuZHVyYXRpb24gaW4gZWUuZnguc3BlZWRzP2VlLmZ4LnNwZWVkc1tyLmR1cmF0aW9uXTplZS5meC5zcGVlZHMuX2RlZmF1bHQsKG51bGw9PXIucXVldWV8fHIucXVldWU9PT0hMCkmJihyLnF1ZXVlPSJmeCIpLHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0ZT1mdW5jdGlvbigpe2VlLmlzRnVuY3Rpb24oci5vbGQpJiZyLm9sZC5jYWxsKHRoaXMpLHIucXVldWUmJmVlLmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0sZWUuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKENlKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1lZS5pc0VtcHR5T2JqZWN0KGUpLGE9ZWUuc3BlZWQodCxuLHIpLG89ZnVuY3Rpb24oKXt2YXIgdD1OKHRoaXMsZWUuZXh0ZW5kKHt9LGUpLGEpOyhpfHx2ZS5nZXQodGhpcywiZmluaXNoIikpJiZ0LnN0b3AoITApfTtyZXR1cm4gby5maW5pc2g9byxpfHxhLnF1ZXVlPT09ITE/dGhpcy5lYWNoKG8pOnRoaXMucXVldWUoYS5xdWV1ZSxvKX0sc3RvcDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChuKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYobj10LHQ9ZSxlPXZvaWQgMCksdCYmZSE9PSExJiZ0aGlzLnF1ZXVlKGV8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PSEwLGk9bnVsbCE9ZSYmZSsicXVldWVIb29rcyIsYT1lZS50aW1lcnMsbz12ZS5nZXQodGhpcyk7aWYoaSlvW2ldJiZvW2ldLnN0b3AmJnIob1tpXSk7ZWxzZSBmb3IoaSBpbiBvKW9baV0mJm9baV0uc3RvcCYmdHQudGVzdChpKSYmcihvW2ldKTtmb3IoaT1hLmxlbmd0aDtpLS07KWFbaV0uZWxlbSE9PXRoaXN8fG51bGwhPWUmJmFbaV0ucXVldWUhPT1lfHwoYVtpXS5hbmltLnN0b3AobiksdD0hMSxhLnNwbGljZShpLDEpKTsodHx8IW4pJiZlZS5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiBlIT09ITEmJihlPWV8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LG49dmUuZ2V0KHRoaXMpLHI9bltlKyJxdWV1ZSJdLGk9bltlKyJxdWV1ZUhvb2tzIl0sYT1lZS50aW1lcnMsbz1yP3IubGVuZ3RoOjA7Zm9yKG4uZmluaXNoPSEwLGVlLnF1ZXVlKHRoaXMsZSxbXSksaSYmaS5zdG9wJiZpLnN0b3AuY2FsbCh0aGlzLCEwKSx0PWEubGVuZ3RoO3QtLTspYVt0XS5lbGVtPT09dGhpcyYmYVt0XS5xdWV1ZT09PWUmJihhW3RdLmFuaW0uc3RvcCghMCksYS5zcGxpY2UodCwxKSk7Zm9yKHQ9MDtvPnQ7dCsrKXJbdF0mJnJbdF0uZmluaXNoJiZyW3RdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBuLmZpbmlzaH0pfX0pLGVlLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZWUuZm5bdF07ZWUuZm5bdF09ZnVuY3Rpb24oZSxyLGkpe3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PXR5cGVvZiBlP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShfKHQsITApLGUscixpKX19KSxlZS5lYWNoKHtzbGlkZURvd246Xygic2hvdyIpLHNsaWRlVXA6XygiaGlkZSIpLHNsaWRlVG9nZ2xlOl8oInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oZSx0KXtlZS5mbltlXT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixyKX19KSxlZS50aW1lcnM9W10sZWUuZngudGljaz1mdW5jdGlvbigpe3ZhciBlLHQ9MCxuPWVlLnRpbWVycztmb3IoWGU9ZWUubm93KCk7dDxuLmxlbmd0aDt0KyspZT1uW3RdLGUoKXx8blt0XSE9PWV8fG4uc3BsaWNlKHQtLSwxKTtuLmxlbmd0aHx8ZWUuZnguc3RvcCgpLFhlPXZvaWQgMH0sZWUuZngudGltZXI9ZnVuY3Rpb24oZSl7ZWUudGltZXJzLnB1c2goZSksZSgpP2VlLmZ4LnN0YXJ0KCk6ZWUudGltZXJzLnBvcCgpfSxlZS5meC5pbnRlcnZhbD0xMyxlZS5meC5zdGFydD1mdW5jdGlvbigpe0dlfHwoR2U9c2V0SW50ZXJ2YWwoZWUuZngudGljayxlZS5meC5pbnRlcnZhbCkpfSxlZS5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChHZSksR2U9bnVsbH0sZWUuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LGVlLmZuLmRlbGF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9ZWUuZng/ZWUuZnguc3BlZWRzW2VdfHxlOmUsdD10fHwiZngiLHRoaXMucXVldWUodCxmdW5jdGlvbih0LG4pe3ZhciByPXNldFRpbWVvdXQodCxlKTtuLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocil9fSl9LGZ1bmN0aW9uKCl7dmFyIGU9Ry5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHQ9Ry5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxuPXQuYXBwZW5kQ2hpbGQoRy5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7ZS50eXBlPSJjaGVja2JveCIsWC5jaGVja09uPSIiIT09ZS52YWx1ZSxYLm9wdFNlbGVjdGVkPW4uc2VsZWN0ZWQsdC5kaXNhYmxlZD0hMCxYLm9wdERpc2FibGVkPSFuLmRpc2FibGVkLGU9Ry5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGUudmFsdWU9InQiLGUudHlwZT0icmFkaW8iLFgucmFkaW9WYWx1ZT0idCI9PT1lLnZhbHVlfSgpO3ZhciBpdCxhdCxvdD1lZS5leHByLmF0dHJIYW5kbGU7ZWUuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHllKHRoaXMsZWUuYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZWUucmVtb3ZlQXR0cih0aGlzLGUpfSl9fSksZWUuZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLGE9ZS5ub2RlVHlwZTtpZihlJiYzIT09YSYmOCE9PWEmJjIhPT1hKXJldHVybiB0eXBlb2YgZS5nZXRBdHRyaWJ1dGU9PT1rZT9lZS5wcm9wKGUsdCxuKTooMT09PWEmJmVlLmlzWE1MRG9jKGUpfHwodD10LnRvTG93ZXJDYXNlKCkscj1lZS5hdHRySG9va3NbdF18fChlZS5leHByLm1hdGNoLmJvb2wudGVzdCh0KT9hdDppdCkpLHZvaWQgMD09PW4/ciYmImdldCJpbiByJiZudWxsIT09KGk9ci5nZXQoZSx0KSk/aTooaT1lZS5maW5kLmF0dHIoZSx0KSxudWxsPT1pP3ZvaWQgMDppKTpudWxsIT09bj9yJiYic2V0ImluIHImJnZvaWQgMCE9PShpPXIuc2V0KGUsbix0KSk/aTooZS5zZXRBdHRyaWJ1dGUodCxuKyIiKSxuKTp2b2lkIGVlLnJlbW92ZUF0dHIoZSx0KSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9MCxhPXQmJnQubWF0Y2goZGUpO2lmKGEmJjE9PT1lLm5vZGVUeXBlKWZvcig7bj1hW2krK107KXI9ZWUucHJvcEZpeFtuXXx8bixlZS5leHByLm1hdGNoLmJvb2wudGVzdChuKSYmKGVbcl09ITEpLGUucmVtb3ZlQXR0cmlidXRlKG4pfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihlLHQpe2lmKCFYLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT10JiZlZS5ub2RlTmFtZShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX19KSxhdD17c2V0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD09PSExP2VlLnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSxlZS5lYWNoKGVlLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLHQpe3ZhciBuPW90W3RdfHxlZS5maW5kLmF0dHI7b3RbdF09ZnVuY3Rpb24oZSx0LHIpe3ZhciBpLGE7cmV0dXJuIHJ8fChhPW90W3RdLG90W3RdPWksaT1udWxsIT1uKGUsdCxyKT90LnRvTG93ZXJDYXNlKCk6bnVsbCxvdFt0XT1hKSxpfX0pO3ZhciBzdD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pO2VlLmZuLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiB5ZSh0aGlzLGVlLnByb3AsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VlLnByb3BGaXhbZV18fGVdfSl9fSksZWUuZXh0ZW5kKHtwcm9wRml4OnsiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIn0scHJvcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxhLG89ZS5ub2RlVHlwZTtpZihlJiYzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiBhPTEhPT1vfHwhZWUuaXNYTUxEb2MoZSksYSYmKHQ9ZWUucHJvcEZpeFt0XXx8dCxpPWVlLnByb3BIb29rc1t0XSksdm9pZCAwIT09bj9pJiYic2V0ImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjplW3RdPW46aSYmImdldCJpbiBpJiZudWxsIT09KHI9aS5nZXQoZSx0KSk/cjplW3RdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHxzdC50ZXN0KGUubm9kZU5hbWUpfHxlLmhyZWY/ZS50YWJJbmRleDotMX19fX0pLFgub3B0U2VsZWN0ZWR8fChlZS5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH19KSxlZS5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtlZS5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pO3ZhciBsdD0vW1x0XHJcblxmXS9nO2VlLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksYSxvLHM9InN0cmluZyI9PXR5cGVvZiBlJiZlLGw9MCx1PXRoaXMubGVuZ3RoO2lmKGVlLmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlZSh0aGlzKS5hZGRDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZihzKWZvcih0PShlfHwiIikubWF0Y2goZGUpfHxbXTt1Pmw7bCsrKWlmKG49dGhpc1tsXSxyPTE9PT1uLm5vZGVUeXBlJiYobi5jbGFzc05hbWU/KCIgIituLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobHQsIiAiKToiICIpKXtmb3IoYT0wO2k9dFthKytdOylyLmluZGV4T2YoIiAiK2krIiAiKTwwJiYocis9aSsiICIpO289ZWUudHJpbShyKSxuLmNsYXNzTmFtZSE9PW8mJihuLmNsYXNzTmFtZT1vKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksYSxvLHM9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciPT10eXBlb2YgZSYmZSxsPTAsdT10aGlzLmxlbmd0aDtpZihlZS5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7ZWUodGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNsYXNzTmFtZSkpfSk7aWYocylmb3IodD0oZXx8IiIpLm1hdGNoKGRlKXx8W107dT5sO2wrKylpZihuPXRoaXNbbF0scj0xPT09bi5ub2RlVHlwZSYmKG4uY2xhc3NOYW1lPygiICIrbi5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKGx0LCIgIik6IiIpKXtmb3IoYT0wO2k9dFthKytdOylmb3IoO3IuaW5kZXhPZigiICIraSsiICIpPj0wOylyPXIucmVwbGFjZSgiICIraSsiICIsIiAiKTtvPWU/ZWUudHJpbShyKToiIixuLmNsYXNzTmFtZSE9PW8mJihuLmNsYXNzTmFtZT1vKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0JiYic3RyaW5nIj09PW4/dD90aGlzLmFkZENsYXNzKGUpOnRoaXMucmVtb3ZlQ2xhc3MoZSk6ZWUuaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24obil7ZWUodGhpcykudG9nZ2xlQ2xhc3MoZS5jYWxsKHRoaXMsbix0aGlzLmNsYXNzTmFtZSx0KSx0KX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe2lmKCJzdHJpbmciPT09bilmb3IodmFyIHQscj0wLGk9ZWUodGhpcyksYT1lLm1hdGNoKGRlKXx8W107dD1hW3IrK107KWkuaGFzQ2xhc3ModCk/aS5yZW1vdmVDbGFzcyh0KTppLmFkZENsYXNzKHQpO2Vsc2Uobj09PWtlfHwiYm9vbGVhbiI9PT1uKSYmKHRoaXMuY2xhc3NOYW1lJiZ2ZS5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxlPT09ITE/IiI6dmUuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iICIrZSsiICIsbj0wLHI9dGhpcy5sZW5ndGg7cj5uO24rKylpZigxPT09dGhpc1tuXS5ub2RlVHlwZSYmKCIgIit0aGlzW25dLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobHQsIiAiKS5pbmRleE9mKHQpPj0wKXJldHVybiEwO3JldHVybiExfX0pO3ZhciB1dD0vXHIvZztlZS5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiByPWVlLmlzRnVuY3Rpb24oZSksdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3ZhciBpOzE9PT10aGlzLm5vZGVUeXBlJiYoaT1yP2UuY2FsbCh0aGlzLG4sZWUodGhpcykudmFsKCkpOmUsbnVsbD09aT9pPSIiOiJudW1iZXIiPT10eXBlb2YgaT9pKz0iIjplZS5pc0FycmF5KGkpJiYoaT1lZS5tYXAoaSxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjplKyIifSkpLHQ9ZWUudmFsSG9va3NbdGhpcy50eXBlXXx8ZWUudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx0JiYic2V0ImluIHQmJnZvaWQgMCE9PXQuc2V0KHRoaXMsaSwidmFsdWUiKXx8KHRoaXMudmFsdWU9aSkpfSk7aWYoaSlyZXR1cm4gdD1lZS52YWxIb29rc1tpLnR5cGVdfHxlZS52YWxIb29rc1tpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLHQmJiJnZXQiaW4gdCYmdm9pZCAwIT09KG49dC5nZXQoaSwidmFsdWUiKSk/bjoobj1pLnZhbHVlLCJzdHJpbmciPT10eXBlb2Ygbj9uLnJlcGxhY2UodXQsIiIpOm51bGw9PW4/IiI6bil9fX0pLGVlLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWVlLmZpbmQuYXR0cihlLCJ2YWx1ZSIpO3JldHVybiBudWxsIT10P3Q6ZWUudHJpbShlZS50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9ZS5vcHRpb25zLGk9ZS5zZWxlY3RlZEluZGV4LGE9InNlbGVjdC1vbmUiPT09ZS50eXBlfHwwPmksbz1hP251bGw6W10scz1hP2krMTpyLmxlbmd0aCxsPTA+aT9zOmE/aTowO3M+bDtsKyspaWYobj1yW2xdLChuLnNlbGVjdGVkfHxsPT09aSkmJihYLm9wdERpc2FibGVkPyFuLmRpc2FibGVkOm51bGw9PT1uLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSkmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhZWUubm9kZU5hbWUobi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYodD1lZShuKS52YWwoKSxhKXJldHVybiB0O28ucHVzaCh0KX1yZXR1cm4gb30sc2V0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIsaT1lLm9wdGlvbnMsYT1lZS5tYWtlQXJyYXkodCksbz1pLmxlbmd0aDtvLS07KXI9aVtvXSwoci5zZWxlY3RlZD1lZS5pbkFycmF5KHIudmFsdWUsYSk+PTApJiYobj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLGF9fX19KSxlZS5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7ZWUudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe3JldHVybiBlZS5pc0FycmF5KHQpP2UuY2hlY2tlZD1lZS5pbkFycmF5KGVlKGUpLnZhbCgpLHQpPj0wOnZvaWQgMH19LFguY2hlY2tPbnx8KGVlLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWUuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6ZS52YWx1ZX0pfSksZWUuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe2VlLmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0KX19KSxlZS5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfSxiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX19KTt2YXIgY3Q9ZWUubm93KCkscHQ9L1w/LztlZS5wYXJzZUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04ucGFyc2UoZSsiIil9LGVlLnBhcnNlWE1MPWZ1bmN0aW9uKGUpe3ZhciB0LG47aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7bj1uZXcgRE9NUGFyc2VyLHQ9bi5wYXJzZUZyb21TdHJpbmcoZSwidGV4dC94bWwiKX1jYXRjaChyKXt0PXZvaWQgMH1yZXR1cm4oIXR8fHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmZWUuZXJyb3IoIkludmFsaWQgWE1MOiAiK2UpLHR9O3ZhciBmdD0vIy4qJC8saHQ9LyhbPyZdKV89W14mXSovLGR0PS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKSQvZ20sbXQ9L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sZ3Q9L14oPzpHRVR8SEVBRCkkLyx5dD0vXlwvXC8vLHZ0PS9eKFtcdy4rLV0rOikoPzpcL1wvKD86W15cLz8jXSpAfCkoW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLGJ0PXt9LHd0PXt9LHh0PSIqLyIuY29uY2F0KCIqIiksU3Q9dC5sb2NhdGlvbi5ocmVmLEF0PXZ0LmV4ZWMoU3QudG9Mb3dlckNhc2UoKSl8fFtdO2VlLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6U3QsdHlwZToiR0VUIixpc0xvY2FsOm10LnRlc3QoQXRbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6eHQsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjplZS5wYXJzZUpTT04sInRleHQgeG1sIjplZS5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/UihSKGUsZWUuYWpheFNldHRpbmdzKSx0KTpSKGVlLmFqYXhTZXR0aW5ncyxlKX0sYWpheFByZWZpbHRlcjokKGJ0KSxhamF4VHJhbnNwb3J0OiQod3QpLGFqYXg6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCxuLG8pe3ZhciBsLGMseSx2LHcsUz10OzIhPT1iJiYoYj0yLHMmJmNsZWFyVGltZW91dChzKSxyPXZvaWQgMCxhPW98fCIiLHgucmVhZHlTdGF0ZT1lPjA/NDowLGw9ZT49MjAwJiYzMDA+ZXx8MzA0PT09ZSxuJiYodj1GKHAseCxuKSksdj1VKHAsdix4LGwpLGw/KHAuaWZNb2RpZmllZCYmKHc9eC5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLHcmJihlZS5sYXN0TW9kaWZpZWRbaV09dyksdz14LmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKGVlLmV0YWdbaV09dykpLDIwND09PWV8fCJIRUFEIj09PXAudHlwZT9TPSJub2NvbnRlbnQiOjMwND09PWU/Uz0ibm90bW9kaWZpZWQiOihTPXYuc3RhdGUsYz12LmRhdGEseT12LmVycm9yLGw9IXkpKTooeT1TLChlfHwhUykmJihTPSJlcnJvciIsMD5lJiYoZT0wKSkpLHguc3RhdHVzPWUseC5zdGF0dXNUZXh0PSh0fHxTKSsiIixsP2QucmVzb2x2ZVdpdGgoZixbYyxTLHhdKTpkLnJlamVjdFdpdGgoZixbeCxTLHldKSx4LnN0YXR1c0NvZGUoZyksZz12b2lkIDAsdSYmaC50cmlnZ2VyKGw/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbeCxwLGw/Yzp5XSksbS5maXJlV2l0aChmLFt4LFNdKSx1JiYoaC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt4LHBdKSwtLWVlLmFjdGl2ZXx8ZWUuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfSJvYmplY3QiPT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksdD10fHx7fTt2YXIgcixpLGEsbyxzLGwsdSxjLHA9ZWUuYWpheFNldHVwKHt9LHQpLGY9cC5jb250ZXh0fHxwLGg9cC5jb250ZXh0JiYoZi5ub2RlVHlwZXx8Zi5qcXVlcnkpP2VlKGYpOmVlLmV2ZW50LGQ9ZWUuRGVmZXJyZWQoKSxtPWVlLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxnPXAuc3RhdHVzQ29kZXx8e30seT17fSx2PXt9LGI9MCx3PSJjYW5jZWxlZCIseD17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKDI9PT1iKXtpZighbylmb3Iobz17fTt0PWR0LmV4ZWMoYSk7KW9bdFsxXS50b0xvd2VyQ2FzZSgpXT10WzJdO3Q9b1tlLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT10P251bGw6dH0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT1iP2E6bnVsbH0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihlLHQpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYnx8KGU9dltuXT12W25dfHxlLHlbZV09dCksdGhpc30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gYnx8KHAubWltZVR5cGU9ZSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihlKXt2YXIgdDtpZihlKWlmKDI+Yilmb3IodCBpbiBlKWdbdF09W2dbdF0sZVt0XV07ZWxzZSB4LmFsd2F5cyhlW3guc3RhdHVzXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWV8fHc7cmV0dXJuIHImJnIuYWJvcnQodCksbigwLHQpLHRoaXN9fTtpZihkLnByb21pc2UoeCkuY29tcGxldGU9bS5hZGQseC5zdWNjZXNzPXguZG9uZSx4LmVycm9yPXguZmFpbCxwLnVybD0oKGV8fHAudXJsfHxTdCkrIiIpLnJlcGxhY2UoZnQsIiIpLnJlcGxhY2UoeXQsQXRbMV0rIi8vIikscC50eXBlPXQubWV0aG9kfHx0LnR5cGV8fHAubWV0aG9kfHxwLnR5cGUscC5kYXRhVHlwZXM9ZWUudHJpbShwLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkubWF0Y2goZGUpfHxbIiJdLG51bGw9PXAuY3Jvc3NEb21haW4mJihsPXZ0LmV4ZWMocC51cmwudG9Mb3dlckNhc2UoKSkscC5jcm9zc0RvbWFpbj0hKCFsfHxsWzFdPT09QXRbMV0mJmxbMl09PT1BdFsyXSYmKGxbM118fCgiaHR0cDoiPT09bFsxXT8iODAiOiI0NDMiKSk9PT0oQXRbM118fCgiaHR0cDoiPT09QXRbMV0/IjgwIjoiNDQzIikpKSkscC5kYXRhJiZwLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIHAuZGF0YSYmKHAuZGF0YT1lZS5wYXJhbShwLmRhdGEscC50cmFkaXRpb25hbCkpLE0oYnQscCx0LHgpLDI9PT1iKXJldHVybiB4O3U9ZWUuZXZlbnQmJnAuZ2xvYmFsLHUmJjA9PT1lZS5hY3RpdmUrKyYmZWUuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0IikscC50eXBlPXAudHlwZS50b1VwcGVyQ2FzZSgpLHAuaGFzQ29udGVudD0hZ3QudGVzdChwLnR5cGUpLGk9cC51cmwscC5oYXNDb250ZW50fHwocC5kYXRhJiYoaT1wLnVybCs9KHB0LnRlc3QoaSk/IiYiOiI/IikrcC5kYXRhLGRlbGV0ZSBwLmRhdGEpLHAuY2FjaGU9PT0hMSYmKHAudXJsPWh0LnRlc3QoaSk/aS5yZXBsYWNlKGh0LCIkMV89IitjdCsrKTppKyhwdC50ZXN0KGkpPyImIjoiPyIpKyJfPSIrY3QrKykpLHAuaWZNb2RpZmllZCYmKGVlLmxhc3RNb2RpZmllZFtpXSYmeC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsZWUubGFzdE1vZGlmaWVkW2ldKSxlZS5ldGFnW2ldJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLGVlLmV0YWdbaV0pKSwocC5kYXRhJiZwLmhhc0NvbnRlbnQmJnAuY29udGVudFR5cGUhPT0hMXx8dC5jb250ZW50VHlwZSkmJnguc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixwLmNvbnRlbnRUeXBlKSx4LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIscC5kYXRhVHlwZXNbMF0mJnAuYWNjZXB0c1twLmRhdGFUeXBlc1swXV0/cC5hY2NlcHRzW3AuZGF0YVR5cGVzWzBdXSsoIioiIT09cC5kYXRhVHlwZXNbMF0/IiwgIit4dCsiOyBxPTAuMDEiOiIiKTpwLmFjY2VwdHNbIioiXSk7CmZvcihjIGluIHAuaGVhZGVycyl4LnNldFJlcXVlc3RIZWFkZXIoYyxwLmhlYWRlcnNbY10pO2lmKHAuYmVmb3JlU2VuZCYmKHAuYmVmb3JlU2VuZC5jYWxsKGYseCxwKT09PSExfHwyPT09YikpcmV0dXJuIHguYWJvcnQoKTt3PSJhYm9ydCI7Zm9yKGMgaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0peFtjXShwW2NdKTtpZihyPU0od3QscCx0LHgpKXt4LnJlYWR5U3RhdGU9MSx1JiZoLnRyaWdnZXIoImFqYXhTZW5kIixbeCxwXSkscC5hc3luYyYmcC50aW1lb3V0PjAmJihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt4LmFib3J0KCJ0aW1lb3V0Iil9LHAudGltZW91dCkpO3RyeXtiPTEsci5zZW5kKHksbil9Y2F0Y2goUyl7aWYoISgyPmIpKXRocm93IFM7bigtMSxTKX19ZWxzZSBuKC0xLCJObyBUcmFuc3BvcnQiKTtyZXR1cm4geH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVlLmdldChlLHQsbiwianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZWUuZ2V0KGUsdm9pZCAwLHQsInNjcmlwdCIpfX0pLGVlLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSx0KXtlZVt0XT1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4gZWUuaXNGdW5jdGlvbihuKSYmKGk9aXx8cixyPW4sbj12b2lkIDApLGVlLmFqYXgoe3VybDplLHR5cGU6dCxkYXRhVHlwZTppLGRhdGE6bixzdWNjZXNzOnJ9KX19KSxlZS5fZXZhbFVybD1mdW5jdGlvbihlKXtyZXR1cm4gZWUuYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX0sZWUuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBlZS5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXtlZSh0aGlzKS53cmFwQWxsKGUuY2FsbCh0aGlzLHQpKX0pOih0aGlzWzBdJiYodD1lZShlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmdC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcztlLmZpcnN0RWxlbWVudENoaWxkOyllPWUuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcykpLHRoaXMpfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVlLmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe2VlKHRoaXMpLndyYXBJbm5lcihlLmNhbGwodGhpcyx0KSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lZSh0aGlzKSxuPXQuY29udGVudHMoKTtuLmxlbmd0aD9uLndyYXBBbGwoZSk6dC5hcHBlbmQoZSl9KX0sd3JhcDpmdW5jdGlvbihlKXt2YXIgdD1lZS5pc0Z1bmN0aW9uKGUpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24obil7ZWUodGhpcykud3JhcEFsbCh0P2UuY2FsbCh0aGlzLG4pOmUpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtlZS5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fGVlKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KSxlZS5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGUpe3JldHVybiBlLm9mZnNldFdpZHRoPD0wJiZlLm9mZnNldEhlaWdodDw9MH0sZWUuZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuIWVlLmV4cHIuZmlsdGVycy5oaWRkZW4oZSl9O3ZhciBDdD0vJTIwL2csRXQ9L1xbXF0kLyxrdD0vXHI/XG4vZyxPdD0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksanQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2VlLnBhcmFtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPWZ1bmN0aW9uKGUsdCl7dD1lZS5pc0Z1bmN0aW9uKHQpP3QoKTpudWxsPT10PyIiOnQscltyLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpKyI9IitlbmNvZGVVUklDb21wb25lbnQodCl9O2lmKHZvaWQgMD09PXQmJih0PWVlLmFqYXhTZXR0aW5ncyYmZWUuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxlZS5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIWVlLmlzUGxhaW5PYmplY3QoZSkpZWUuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpQihuLGVbbl0sdCxpKTtyZXR1cm4gci5qb2luKCImIikucmVwbGFjZShDdCwiKyIpfSxlZS5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBlZS5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPWVlLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT9lZS5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhZWUodGhpcykuaXMoIjpkaXNhYmxlZCIpJiZqdC50ZXN0KHRoaXMubm9kZU5hbWUpJiYhT3QudGVzdChlKSYmKHRoaXMuY2hlY2tlZHx8IUVlLnRlc3QoZSkpfSkubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZWUodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDplZS5pc0FycmF5KG4pP2VlLm1hcChuLGZ1bmN0aW9uKGUpe3JldHVybntuYW1lOnQubmFtZSx2YWx1ZTplLnJlcGxhY2Uoa3QsIlxyXG4iKX19KTp7bmFtZTp0Lm5hbWUsdmFsdWU6bi5yZXBsYWNlKGt0LCJcclxuIil9fSkuZ2V0KCl9fSksZWUuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fWNhdGNoKGUpe319O3ZhciBUdD0wLEl0PXt9LF90PXswOjIwMCwxMjIzOjIwNH0sRHQ9ZWUuYWpheFNldHRpbmdzLnhocigpO3QuYXR0YWNoRXZlbnQmJnQuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiBJdClJdFtlXSgpfSksWC5jb3JzPSEhRHQmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gRHQsWC5hamF4PUR0PSEhRHQsZWUuYWpheFRyYW5zcG9ydChmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gWC5jb3JzfHxEdCYmIWUuY3Jvc3NEb21haW4/e3NlbmQ6ZnVuY3Rpb24obixyKXt2YXIgaSxhPWUueGhyKCksbz0rK1R0O2lmKGEub3BlbihlLnR5cGUsZS51cmwsZS5hc3luYyxlLnVzZXJuYW1lLGUucGFzc3dvcmQpLGUueGhyRmllbGRzKWZvcihpIGluIGUueGhyRmllbGRzKWFbaV09ZS54aHJGaWVsZHNbaV07ZS5taW1lVHlwZSYmYS5vdmVycmlkZU1pbWVUeXBlJiZhLm92ZXJyaWRlTWltZVR5cGUoZS5taW1lVHlwZSksZS5jcm9zc0RvbWFpbnx8blsiWC1SZXF1ZXN0ZWQtV2l0aCJdfHwoblsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO2ZvcihpIGluIG4pYS5zZXRSZXF1ZXN0SGVhZGVyKGksbltpXSk7dD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt0JiYoZGVsZXRlIEl0W29dLHQ9YS5vbmxvYWQ9YS5vbmVycm9yPW51bGwsImFib3J0Ij09PWU/YS5hYm9ydCgpOiJlcnJvciI9PT1lP3IoYS5zdGF0dXMsYS5zdGF0dXNUZXh0KTpyKF90W2Euc3RhdHVzXXx8YS5zdGF0dXMsYS5zdGF0dXNUZXh0LCJzdHJpbmciPT10eXBlb2YgYS5yZXNwb25zZVRleHQ/e3RleHQ6YS5yZXNwb25zZVRleHR9OnZvaWQgMCxhLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSl9fSxhLm9ubG9hZD10KCksYS5vbmVycm9yPXQoImVycm9yIiksdD1JdFtvXT10KCJhYm9ydCIpO3RyeXthLnNlbmQoZS5oYXNDb250ZW50JiZlLmRhdGF8fG51bGwpfWNhdGNoKHMpe2lmKHQpdGhyb3cgc319LGFib3J0OmZ1bmN0aW9uKCl7dCYmdCgpfX06dm9pZCAwfSksZWUuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovKD86amF2YXxlY21hKXNjcmlwdC99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVlLmdsb2JhbEV2YWwoZSksZX19fSksZWUuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxlZS5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2lmKGUuY3Jvc3NEb21haW4pe3ZhciB0LG47cmV0dXJue3NlbmQ6ZnVuY3Rpb24ocixpKXt0PWVlKCI8c2NyaXB0PiIpLnByb3Aoe2FzeW5jOiEwLGNoYXJzZXQ6ZS5zY3JpcHRDaGFyc2V0LHNyYzplLnVybH0pLm9uKCJsb2FkIGVycm9yIixuPWZ1bmN0aW9uKGUpe3QucmVtb3ZlKCksbj1udWxsLGUmJmkoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxHLmhlYWQuYXBwZW5kQ2hpbGQodFswXSl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19fSk7dmFyIEx0PVtdLFB0PS8oPSlcPyg/PSZ8JCl8XD9cPy87ZWUuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgZT1MdC5wb3AoKXx8ZWUuZXhwYW5kbysiXyIrY3QrKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLGVlLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKGUsbixyKXt2YXIgaSxhLG8scz1lLmpzb25wIT09ITEmJihQdC50ZXN0KGUudXJsKT8idXJsIjoic3RyaW5nIj09dHlwZW9mIGUuZGF0YSYmIShlLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJlB0LnRlc3QoZS5kYXRhKSYmImRhdGEiKTtyZXR1cm4gc3x8Impzb25wIj09PWUuZGF0YVR5cGVzWzBdPyhpPWUuanNvbnBDYWxsYmFjaz1lZS5pc0Z1bmN0aW9uKGUuanNvbnBDYWxsYmFjayk/ZS5qc29ucENhbGxiYWNrKCk6ZS5qc29ucENhbGxiYWNrLHM/ZVtzXT1lW3NdLnJlcGxhY2UoUHQsIiQxIitpKTplLmpzb25wIT09ITEmJihlLnVybCs9KHB0LnRlc3QoZS51cmwpPyImIjoiPyIpK2UuanNvbnArIj0iK2kpLGUuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBvfHxlZS5lcnJvcihpKyIgd2FzIG5vdCBjYWxsZWQiKSxvWzBdfSxlLmRhdGFUeXBlc1swXT0ianNvbiIsYT10W2ldLHRbaV09ZnVuY3Rpb24oKXtvPWFyZ3VtZW50c30sci5hbHdheXMoZnVuY3Rpb24oKXt0W2ldPWEsZVtpXSYmKGUuanNvbnBDYWxsYmFjaz1uLmpzb25wQ2FsbGJhY2ssTHQucHVzaChpKSksbyYmZWUuaXNGdW5jdGlvbihhKSYmYShvWzBdKSxvPWE9dm9pZCAwfSksInNjcmlwdCIpOnZvaWQgMH0pLGVlLnBhcnNlSFRNTD1mdW5jdGlvbihlLHQsbil7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDsiYm9vbGVhbiI9PXR5cGVvZiB0JiYobj10LHQ9ITEpLHQ9dHx8Rzt2YXIgcj1zZS5leGVjKGUpLGk9IW4mJltdO3JldHVybiByP1t0LmNyZWF0ZUVsZW1lbnQoclsxXSldOihyPWVlLmJ1aWxkRnJhZ21lbnQoW2VdLHQsaSksaSYmaS5sZW5ndGgmJmVlKGkpLnJlbW92ZSgpLGVlLm1lcmdlKFtdLHIuY2hpbGROb2RlcykpfTt2YXIgTnQ9ZWUuZm4ubG9hZDtlZS5mbi5sb2FkPWZ1bmN0aW9uKGUsdCxuKXtpZigic3RyaW5nIiE9dHlwZW9mIGUmJk50KXJldHVybiBOdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHIsaSxhLG89dGhpcyxzPWUuaW5kZXhPZigiICIpO3JldHVybiBzPj0wJiYocj1lZS50cmltKGUuc2xpY2UocykpLGU9ZS5zbGljZSgwLHMpKSxlZS5pc0Z1bmN0aW9uKHQpPyhuPXQsdD12b2lkIDApOnQmJiJvYmplY3QiPT10eXBlb2YgdCYmKGk9IlBPU1QiKSxvLmxlbmd0aD4wJiZlZS5hamF4KHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7YT1hcmd1bWVudHMsby5odG1sKHI/ZWUoIjxkaXY+IikuYXBwZW5kKGVlLnBhcnNlSFRNTChlKSkuZmluZChyKTplKX0pLmNvbXBsZXRlKG4mJmZ1bmN0aW9uKGUsdCl7by5lYWNoKG4sYXx8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSksdGhpc30sZWUuZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7ZWUuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSxlZS5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGVlLmdyZXAoZWUudGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofTt2YXIgJHQ9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZWUub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksYSxvLHMsbCx1LGM9ZWUuY3NzKGUsInBvc2l0aW9uIikscD1lZShlKSxmPXt9OyJzdGF0aWMiPT09YyYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIikscz1wLm9mZnNldCgpLGE9ZWUuY3NzKGUsInRvcCIpLGw9ZWUuY3NzKGUsImxlZnQiKSx1PSgiYWJzb2x1dGUiPT09Y3x8ImZpeGVkIj09PWMpJiYoYStsKS5pbmRleE9mKCJhdXRvIik+LTEsdT8ocj1wLnBvc2l0aW9uKCksbz1yLnRvcCxpPXIubGVmdCk6KG89cGFyc2VGbG9hdChhKXx8MCxpPXBhcnNlRmxvYXQobCl8fDApLGVlLmlzRnVuY3Rpb24odCkmJih0PXQuY2FsbChlLG4scykpLG51bGwhPXQudG9wJiYoZi50b3A9dC50b3Atcy50b3ArbyksbnVsbCE9dC5sZWZ0JiYoZi5sZWZ0PXQubGVmdC1zLmxlZnQraSksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUsZik6cC5jc3MoZil9fSxlZS5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihlKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1lP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe2VlLm9mZnNldC5zZXRPZmZzZXQodGhpcyxlLHQpfSk7dmFyIHQsbixyPXRoaXNbMF0saT17dG9wOjAsbGVmdDowfSxhPXImJnIub3duZXJEb2N1bWVudDtpZihhKXJldHVybiB0PWEuZG9jdW1lbnRFbGVtZW50LGVlLmNvbnRhaW5zKHQscik/KHR5cGVvZiByLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9PWtlJiYoaT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxuPXEoYSkse3RvcDppLnRvcCtuLnBhZ2VZT2Zmc2V0LXQuY2xpZW50VG9wLGxlZnQ6aS5sZWZ0K24ucGFnZVhPZmZzZXQtdC5jbGllbnRMZWZ0fSk6aX0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG49dGhpc1swXSxyPXt0b3A6MCxsZWZ0OjB9O3JldHVybiJmaXhlZCI9PT1lZS5jc3MobiwicG9zaXRpb24iKT90PW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGU9dGhpcy5vZmZzZXRQYXJlbnQoKSx0PXRoaXMub2Zmc2V0KCksZWUubm9kZU5hbWUoZVswXSwiaHRtbCIpfHwocj1lLm9mZnNldCgpKSxyLnRvcCs9ZWUuY3NzKGVbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksci5sZWZ0Kz1lZS5jc3MoZVswXSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpLHt0b3A6dC50b3Atci50b3AtZWUuY3NzKG4sIm1hcmdpblRvcCIsITApLGxlZnQ6dC5sZWZ0LXIubGVmdC1lZS5jc3MobiwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLm9mZnNldFBhcmVudHx8JHQ7ZSYmIWVlLm5vZGVOYW1lKGUsImh0bWwiKSYmInN0YXRpYyI9PT1lZS5jc3MoZSwicG9zaXRpb24iKTspZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8JHR9KX19KSxlZS5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKGUsbil7dmFyIHI9InBhZ2VZT2Zmc2V0Ij09PW47ZWUuZm5bZV09ZnVuY3Rpb24oaSl7cmV0dXJuIHllKHRoaXMsZnVuY3Rpb24oZSxpLGEpe3ZhciBvPXEoZSk7cmV0dXJuIHZvaWQgMD09PWE/bz9vW25dOmVbaV06dm9pZChvP28uc2Nyb2xsVG8ocj90LnBhZ2VYT2Zmc2V0OmEscj9hOnQucGFnZVlPZmZzZXQpOmVbaV09YSl9LGUsaSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pLGVlLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSx0KXtlZS5jc3NIb29rc1t0XT1BKFgucGl4ZWxQb3NpdGlvbixmdW5jdGlvbihlLG4pe3JldHVybiBuPyhuPVMoZSx0KSxIZS50ZXN0KG4pP2VlKGUpLnBvc2l0aW9uKClbdF0rInB4IjpuKTp2b2lkIDB9KX0pLGVlLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihlLHQpe2VlLmVhY2goe3BhZGRpbmc6ImlubmVyIitlLGNvbnRlbnQ6dCwiIjoib3V0ZXIiK2V9LGZ1bmN0aW9uKG4scil7ZWUuZm5bcl09ZnVuY3Rpb24ocixpKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoJiYobnx8ImJvb2xlYW4iIT10eXBlb2Ygciksbz1ufHwocj09PSEwfHxpPT09ITA/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiB5ZSh0aGlzLGZ1bmN0aW9uKHQsbixyKXt2YXIgaTtyZXR1cm4gZWUuaXNXaW5kb3codCk/dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrZV06OT09PXQubm9kZVR5cGU/KGk9dC5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgodC5ib2R5WyJzY3JvbGwiK2VdLGlbInNjcm9sbCIrZV0sdC5ib2R5WyJvZmZzZXQiK2VdLGlbIm9mZnNldCIrZV0saVsiY2xpZW50IitlXSkpOnZvaWQgMD09PXI/ZWUuY3NzKHQsbixvKTplZS5zdHlsZSh0LG4scixvKX0sdCxhP3I6dm9pZCAwLGEsbnVsbCl9fSl9KSxlZS5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxlZS5mbi5hbmRTZWxmPWVlLmZuLmFkZEJhY2ssImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuYW1kJiZlKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIGVlfSk7dmFyIE10PXQualF1ZXJ5LFJ0PXQuJDtyZXR1cm4gZWUubm9Db25mbGljdD1mdW5jdGlvbihlKXtyZXR1cm4gdC4kPT09ZWUmJih0LiQ9UnQpLGUmJnQualF1ZXJ5PT09ZWUmJih0LmpRdWVyeT1NdCksZWV9LHR5cGVvZiBuPT09a2UmJih0LmpRdWVyeT10LiQ9ZWUpLGVlfSl9LHt9XSwyMTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2xpYi9qcy15YW1sLmpzIik7dC5leHBvcnRzPXJ9LHsiLi9saWIvanMteWFtbC5qcyI6MjJ9XSwyMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRnVuY3Rpb24gIitlKyIgaXMgZGVwcmVjYXRlZCBhbmQgY2Fubm90IGJlIHVzZWQuIil9fXZhciBpPWUoIi4vanMteWFtbC9sb2FkZXIiKSxhPWUoIi4vanMteWFtbC9kdW1wZXIiKTt0LmV4cG9ydHMuVHlwZT1lKCIuL2pzLXlhbWwvdHlwZSIpLHQuZXhwb3J0cy5TY2hlbWE9ZSgiLi9qcy15YW1sL3NjaGVtYSIpLHQuZXhwb3J0cy5GQUlMU0FGRV9TQ0hFTUE9ZSgiLi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZSIpLHQuZXhwb3J0cy5KU09OX1NDSEVNQT1lKCIuL2pzLXlhbWwvc2NoZW1hL2pzb24iKSx0LmV4cG9ydHMuQ09SRV9TQ0hFTUE9ZSgiLi9qcy15YW1sL3NjaGVtYS9jb3JlIiksdC5leHBvcnRzLkRFRkFVTFRfU0FGRV9TQ0hFTUE9ZSgiLi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X3NhZmUiKSx0LmV4cG9ydHMuREVGQVVMVF9GVUxMX1NDSEVNQT1lKCIuL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfZnVsbCIpLHQuZXhwb3J0cy5sb2FkPWkubG9hZCx0LmV4cG9ydHMubG9hZEFsbD1pLmxvYWRBbGwsdC5leHBvcnRzLnNhZmVMb2FkPWkuc2FmZUxvYWQsdC5leHBvcnRzLnNhZmVMb2FkQWxsPWkuc2FmZUxvYWRBbGwsdC5leHBvcnRzLmR1bXA9YS5kdW1wLHQuZXhwb3J0cy5zYWZlRHVtcD1hLnNhZmVEdW1wLHQuZXhwb3J0cy5ZQU1MRXhjZXB0aW9uPWUoIi4vanMteWFtbC9leGNlcHRpb24iKSx0LmV4cG9ydHMuTUlOSU1BTF9TQ0hFTUE9ZSgiLi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZSIpLHQuZXhwb3J0cy5TQUZFX1NDSEVNQT1lKCIuL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfc2FmZSIpLHQuZXhwb3J0cy5ERUZBVUxUX1NDSEVNQT1lKCIuL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfZnVsbCIpLHQuZXhwb3J0cy5zY2FuPXIoInNjYW4iKSx0LmV4cG9ydHMucGFyc2U9cigicGFyc2UiKSx0LmV4cG9ydHMuY29tcG9zZT1yKCJjb21wb3NlIiksdC5leHBvcnRzLmFkZENvbnN0cnVjdG9yPXIoImFkZENvbnN0cnVjdG9yIil9LHsiLi9qcy15YW1sL2R1bXBlciI6MjQsIi4vanMteWFtbC9leGNlcHRpb24iOjI1LCIuL2pzLXlhbWwvbG9hZGVyIjoyNiwiLi9qcy15YW1sL3NjaGVtYSI6MjgsIi4vanMteWFtbC9zY2hlbWEvY29yZSI6MjksIi4vanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsIjozMCwiLi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X3NhZmUiOjMxLCIuL2pzLXlhbWwvc2NoZW1hL2ZhaWxzYWZlIjozMiwiLi9qcy15YW1sL3NjaGVtYS9qc29uIjozMywiLi9qcy15YW1sL3R5cGUiOjM0fV0sMjM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGV8fG51bGw9PT1lfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZX1mdW5jdGlvbiBhKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6cihlKT9bXTpbZV19ZnVuY3Rpb24gbyhlLHQpe3ZhciBuLHIsaSxhO2lmKHQpZm9yKGE9T2JqZWN0LmtleXModCksbj0wLHI9YS5sZW5ndGg7cj5uO24rPTEpaT1hW25dLGVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBzKGUsdCl7dmFyIG4scj0iIjtmb3Iobj0wO3Q+bjtuKz0xKXIrPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gbChlKXtyZXR1cm4gMD09PWUmJk51bWJlci5ORUdBVElWRV9JTkZJTklUWT09PTEvZX10LmV4cG9ydHMuaXNOb3RoaW5nPXIsdC5leHBvcnRzLmlzT2JqZWN0PWksdC5leHBvcnRzLnRvQXJyYXk9YSx0LmV4cG9ydHMucmVwZWF0PXMsdC5leHBvcnRzLmlzTmVnYXRpdmVaZXJvPWwsdC5leHBvcnRzLmV4dGVuZD1vfSx7fV0sMjQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuLHIsaSxhLG8scyxsO2lmKG51bGw9PT10KXJldHVybnt9O2ZvcihuPXt9LHI9T2JqZWN0LmtleXModCksaT0wLGE9ci5sZW5ndGg7YT5pO2krPTEpbz1yW2ldLHM9U3RyaW5nKHRbb10pLCIhISI9PT1vLnNsaWNlKDAsMikmJihvPSJ0YWc6eWFtbC5vcmcsMjAwMjoiK28uc2xpY2UoMikpLGw9ZS5jb21waWxlZFR5cGVNYXBbb10sbCYmSS5jYWxsKGwuc3R5bGVBbGlhc2VzLHMpJiYocz1sLnN0eWxlQWxpYXNlc1tzXSksbltvXT1zO3JldHVybiBufWZ1bmN0aW9uIGkoZSl7dmFyIHQsbixyO2lmKHQ9ZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSwyNTU+PWUpbj0ieCIscj0yO2Vsc2UgaWYoNjU1MzU+PWUpbj0idSIscj00O2Vsc2V7aWYoISg0Mjk0OTY3Mjk1Pj1lKSl0aHJvdyBuZXcgaygiY29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRiIpO249IlUiLHI9OH1yZXR1cm4iXFwiK24rRS5yZXBlYXQoIjAiLHItdC5sZW5ndGgpK3R9ZnVuY3Rpb24gYShlKXt0aGlzLnNjaGVtYT1lLnNjaGVtYXx8Tyx0aGlzLmluZGVudD1NYXRoLm1heCgxLGUuaW5kZW50fHwyKSx0aGlzLnNraXBJbnZhbGlkPWUuc2tpcEludmFsaWR8fCExLHRoaXMuZmxvd0xldmVsPUUuaXNOb3RoaW5nKGUuZmxvd0xldmVsKT8tMTplLmZsb3dMZXZlbCx0aGlzLnN0eWxlTWFwPXIodGhpcy5zY2hlbWEsZS5zdHlsZXN8fG51bGwpLHRoaXMuc29ydEtleXM9ZS5zb3J0S2V5c3x8ITEsdGhpcy5pbXBsaWNpdFR5cGVzPXRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQsdGhpcy5leHBsaWNpdFR5cGVzPXRoaXMuc2NoZW1hLmNvbXBpbGVkRXhwbGljaXQsdGhpcy50YWc9bnVsbCx0aGlzLnJlc3VsdD0iIix0aGlzLmR1cGxpY2F0ZXM9W10sdGhpcy51c2VkRHVwbGljYXRlcz1udWxsfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG4scj1FLnJlcGVhdCgiICIsdCksaT0wLGE9LTEsbz0iIixzPWUubGVuZ3RoO3M+aTspYT1lLmluZGV4T2YoIlxuIixpKSwtMT09PWE/KG49ZS5zbGljZShpKSxpPXMpOihuPWUuc2xpY2UoaSxhKzEpLGk9YSsxKSxuLmxlbmd0aCYmIlxuIiE9PW4mJihvKz1yKSxvKz1uO3JldHVybiBvfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4iXG4iK0UucmVwZWF0KCIgIixlLmluZGVudCp0KX1mdW5jdGlvbiBsKGUsdCl7dmFyIG4scixpO2ZvcihuPTAscj1lLmltcGxpY2l0VHlwZXMubGVuZ3RoO3I+bjtuKz0xKWlmKGk9ZS5pbXBsaWNpdFR5cGVzW25dLGkucmVzb2x2ZSh0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB1KGUpe3RoaXMuc291cmNlPWUsdGhpcy5yZXN1bHQ9IiIsdGhpcy5jaGVja3BvaW50PTB9ZnVuY3Rpb24gYyhlLHQsbil7dmFyIHIsaSxhLHMsYyxmLG0sZyx5LHYsYix3LHgsUyxBLEMsRSxrLE8saixUO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdm9pZChlLmR1bXA9IicnIik7aWYoLTEhPT10ZS5pbmRleE9mKHQpKXJldHVybiB2b2lkKGUuZHVtcD0iJyIrdCsiJyIpO2ZvcihyPSEwLGk9dC5sZW5ndGg/dC5jaGFyQ29kZUF0KDApOjAsYT1QPT09aXx8UD09PXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKSwoSD09PWl8fFc9PT1pfHxKPT09aXx8UT09PWkpJiYocj0hMSksYT8ocj0hMSxzPSExLGM9ITEpOihzPSEwLGM9ITApLGY9ITAsbT1uZXcgdSh0KSxnPSExLHk9MCx2PTAsYj1lLmluZGVudCpuLHc9ODAsNDA+Yj93LT1iOnc9NDAsUz0wO1M8dC5sZW5ndGg7UysrKXtpZih4PXQuY2hhckNvZGVBdChTKSxyKXtpZihoKHgpKWNvbnRpbnVlO3I9ITF9ZiYmeD09PVUmJihmPSExKSxBPWVlW3hdLEM9ZCh4KSwoQXx8QykmJih4IT09RCYmeCE9PSQmJnghPT1VPyhzPSExLGM9ITEpOng9PT1EJiYoZz0hMCxmPSExLFM+MCYmKEU9dC5jaGFyQ29kZUF0KFMtMSksRT09PVAmJihjPSExLHM9ITEpKSxzJiYoaz1TLXkseT1TLGs+diYmKHY9aykpKSx4IT09JCYmKGY9ITEpLG0udGFrZVVwVG8oUyksbS5lc2NhcGVDaGFyKCkpfWlmKHImJmwoZSx0KSYmKHI9ITEpLE89IiIsKHN8fGMpJiYoaj0wLHQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKT09PUQmJihqKz0xLHQuY2hhckNvZGVBdCh0Lmxlbmd0aC0yKT09PUQmJihqKz0xKSksMD09PWo/Tz0iLSI6Mj09PWomJihPPSIrIikpLGMmJnc+diYmKHM9ITEpLGd8fChjPSExKSxyKWUuZHVtcD10O2Vsc2UgaWYoZillLmR1bXA9IiciK3QrIiciO2Vsc2UgaWYocylUPXAodCx3KSxlLmR1bXA9Ij4iK08rIlxuIitvKFQsYik7ZWxzZSBpZihjKU98fCh0PXQucmVwbGFjZSgvXG4kLywiIikpLGUuZHVtcD0ifCIrTysiXG4iK28odCxiKTtlbHNle2lmKCFtKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIGR1bXAgc2NhbGFyIHZhbHVlIik7bS5maW5pc2goKSxlLmR1bXA9JyInK20ucmVzdWx0KyciJ319ZnVuY3Rpb24gcChlLHQpe3ZhciBuLHI9IiIsaT0wLGE9ZS5sZW5ndGgsbz0vXG4rJC8uZXhlYyhlKTtmb3IobyYmKGE9by5pbmRleCsxKTthPmk7KW49ZS5pbmRleE9mKCJcbiIsaSksbj5hfHwtMT09PW4/KHImJihyKz0iXG5cbiIpLHIrPWYoZS5zbGljZShpLGEpLHQpLGk9YSk6KHImJihyKz0iXG5cbiIpLHIrPWYoZS5zbGljZShpLG4pLHQpLGk9bisxKTtyZXR1cm4gbyYmIlxuIiE9PW9bMF0mJihyKz1vWzBdKSxyfWZ1bmN0aW9uIGYoZSx0KXtpZigiIj09PWUpcmV0dXJuIGU7Zm9yKHZhciBuLHIsaSxhPS9bXlxzXSBbXlxzXS9nLG89IiIscz0wLGw9MCx1PWEuZXhlYyhlKTt1OyluPXUuaW5kZXgsbi1sPnQmJihyPXMhPT1sP3M6bixvJiYobys9IlxuIiksaT1lLnNsaWNlKGwsciksbys9aSxsPXIrMSkscz1uKzEsdT1hLmV4ZWMoZSk7cmV0dXJuIG8mJihvKz0iXG4iKSxvKz1sIT09cyYmZS5sZW5ndGgtbD50P2Uuc2xpY2UobCxzKSsiXG4iK2Uuc2xpY2UocysxKTplLnNsaWNlKGwpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIF8hPT1lJiZEIT09ZSYmTCE9PWUmJnEhPT1lJiZZIT09ZSYmSyE9PWUmJlghPT1lJiZaIT09ZSYmTSE9PWUmJkYhPT1lJiZCIT09ZSYmTiE9PWUmJkchPT1lJiZWIT09ZSYmVSE9PWUmJiQhPT1lJiZSIT09ZSYmeiE9PWUmJiFlZVtlXSYmIWQoZSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4hKGU+PTMyJiYxMjY+PWV8fDEzMz09PWV8fGU+PTE2MCYmNTUyOTU+PWV8fGU+PTU3MzQ0JiY2NTUzMz49ZXx8ZT49NjU1MzYmJjExMTQxMTE+PWUpfWZ1bmN0aW9uIG0oZSx0LG4pe3ZhciByLGksYT0iIixvPWUudGFnO2ZvcihyPTAsaT1uLmxlbmd0aDtpPnI7cis9MSl3KGUsdCxuW3JdLCExLCExKSYmKDAhPT1yJiYoYSs9IiwgIiksYSs9ZS5kdW1wKTtlLnRhZz1vLGUuZHVtcD0iWyIrYSsiXSJ9ZnVuY3Rpb24gZyhlLHQsbixyKXt2YXIgaSxhLG89IiIsbD1lLnRhZztmb3IoaT0wLGE9bi5sZW5ndGg7YT5pO2krPTEpdyhlLHQrMSxuW2ldLCEwLCEwKSYmKHImJjA9PT1pfHwobys9cyhlLHQpKSxvKz0iLSAiK2UuZHVtcCk7ZS50YWc9bCxlLmR1bXA9b3x8IltdIn1mdW5jdGlvbiB5KGUsdCxuKXt2YXIgcixpLGEsbyxzLGw9IiIsdT1lLnRhZyxjPU9iamVjdC5rZXlzKG4pO2ZvcihyPTAsaT1jLmxlbmd0aDtpPnI7cis9MSlzPSIiLDAhPT1yJiYocys9IiwgIiksYT1jW3JdLG89blthXSx3KGUsdCxhLCExLCExKSYmKGUuZHVtcC5sZW5ndGg+MTAyNCYmKHMrPSI/ICIpLHMrPWUuZHVtcCsiOiAiLHcoZSx0LG8sITEsITEpJiYocys9ZS5kdW1wLGwrPXMpKTtlLnRhZz11LGUuZHVtcD0ieyIrbCsifSJ9ZnVuY3Rpb24gdihlLHQsbixyKXt2YXIgaSxhLG8sbCx1LGMscD0iIixmPWUudGFnLGg9T2JqZWN0LmtleXMobik7aWYoZS5zb3J0S2V5cz09PSEwKWguc29ydCgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuc29ydEtleXMpaC5zb3J0KGUuc29ydEtleXMpO2Vsc2UgaWYoZS5zb3J0S2V5cyl0aHJvdyBuZXcgaygic29ydEtleXMgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBmdW5jdGlvbiIpO2ZvcihpPTAsYT1oLmxlbmd0aDthPmk7aSs9MSljPSIiLHImJjA9PT1pfHwoYys9cyhlLHQpKSxvPWhbaV0sbD1uW29dLHcoZSx0KzEsbywhMCwhMCkmJih1PW51bGwhPT1lLnRhZyYmIj8iIT09ZS50YWd8fGUuZHVtcCYmZS5kdW1wLmxlbmd0aD4xMDI0LHUmJihjKz1lLmR1bXAmJkQ9PT1lLmR1bXAuY2hhckNvZGVBdCgwKT8iPyI6Ij8gIiksYys9ZS5kdW1wLHUmJihjKz1zKGUsdCkpLHcoZSx0KzEsbCwhMCx1KSYmKGMrPWUuZHVtcCYmRD09PWUuZHVtcC5jaGFyQ29kZUF0KDApPyI6IjoiOiAiLGMrPWUuZHVtcCxwKz1jKSk7ZS50YWc9ZixlLmR1bXA9cHx8Int9In1mdW5jdGlvbiBiKGUsdCxuKXt2YXIgcixpLGEsbyxzLGw7Zm9yKGk9bj9lLmV4cGxpY2l0VHlwZXM6ZS5pbXBsaWNpdFR5cGVzLGE9MCxvPWkubGVuZ3RoO28+YTthKz0xKWlmKHM9aVthXSwocy5pbnN0YW5jZU9mfHxzLnByZWRpY2F0ZSkmJighcy5pbnN0YW5jZU9mfHwib2JqZWN0Ij09dHlwZW9mIHQmJnQgaW5zdGFuY2VvZiBzLmluc3RhbmNlT2YpJiYoIXMucHJlZGljYXRlfHxzLnByZWRpY2F0ZSh0KSkpe2lmKGUudGFnPW4/cy50YWc6Ij8iLHMucmVwcmVzZW50KXtpZihsPWUuc3R5bGVNYXBbcy50YWddfHxzLmRlZmF1bHRTdHlsZSwiW29iamVjdCBGdW5jdGlvbl0iPT09VC5jYWxsKHMucmVwcmVzZW50KSlyPXMucmVwcmVzZW50KHQsbCk7ZWxzZXtpZighSS5jYWxsKHMucmVwcmVzZW50LGwpKXRocm93IG5ldyBrKCIhPCIrcy50YWcrJz4gdGFnIHJlc29sdmVyIGFjY2VwdHMgbm90ICInK2wrJyIgc3R5bGUnKTtyPXMucmVwcmVzZW50W2xdKHQsbCl9ZS5kdW1wPXJ9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdyhlLHQsbixyLGkpe2UudGFnPW51bGwsZS5kdW1wPW4sYihlLG4sITEpfHxiKGUsbiwhMCk7dmFyIGE9VC5jYWxsKGUuZHVtcCk7ciYmKHI9MD5lLmZsb3dMZXZlbHx8ZS5mbG93TGV2ZWw+dCksKG51bGwhPT1lLnRhZyYmIj8iIT09ZS50YWd8fDIhPT1lLmluZGVudCYmdD4wKSYmKGk9ITEpO3ZhciBvLHMsbD0iW29iamVjdCBPYmplY3RdIj09PWF8fCJbb2JqZWN0IEFycmF5XSI9PT1hO2lmKGwmJihvPWUuZHVwbGljYXRlcy5pbmRleE9mKG4pLHM9LTEhPT1vKSxzJiZlLnVzZWREdXBsaWNhdGVzW29dKWUuZHVtcD0iKnJlZl8iK287ZWxzZXtpZihsJiZzJiYhZS51c2VkRHVwbGljYXRlc1tvXSYmKGUudXNlZER1cGxpY2F0ZXNbb109ITApLCJbb2JqZWN0IE9iamVjdF0iPT09YSlyJiYwIT09T2JqZWN0LmtleXMoZS5kdW1wKS5sZW5ndGg/KHYoZSx0LGUuZHVtcCxpKSxzJiYoZS5kdW1wPSImcmVmXyIrbysoMD09PXQ/IlxuIjoiIikrZS5kdW1wKSk6KHkoZSx0LGUuZHVtcCkscyYmKGUuZHVtcD0iJnJlZl8iK28rIiAiK2UuZHVtcCkpO2Vsc2UgaWYoIltvYmplY3QgQXJyYXldIj09PWEpciYmMCE9PWUuZHVtcC5sZW5ndGg/KGcoZSx0LGUuZHVtcCxpKSxzJiYoZS5kdW1wPSImcmVmXyIrbysoMD09PXQ/IlxuIjoiIikrZS5kdW1wKSk6KG0oZSx0LGUuZHVtcCkscyYmKGUuZHVtcD0iJnJlZl8iK28rIiAiK2UuZHVtcCkpO2Vsc2V7aWYoIltvYmplY3QgU3RyaW5nXSIhPT1hKXtpZihlLnNraXBJbnZhbGlkKXJldHVybiExO3Rocm93IG5ldyBrKCJ1bmFjY2VwdGFibGUga2luZCBvZiBhbiBvYmplY3QgdG8gZHVtcCAiK2EpfSI/IiE9PWUudGFnJiZjKGUsZS5kdW1wLHQpfW51bGwhPT1lLnRhZyYmIj8iIT09ZS50YWcmJihlLmR1bXA9IiE8IitlLnRhZysiPiAiK2UuZHVtcCl9cmV0dXJuITB9ZnVuY3Rpb24geChlLHQpe3ZhciBuLHIsaT1bXSxhPVtdO2ZvcihTKGUsaSxhKSxuPTAscj1hLmxlbmd0aDtyPm47bis9MSl0LmR1cGxpY2F0ZXMucHVzaChpW2Fbbl1dKTt0LnVzZWREdXBsaWNhdGVzPW5ldyBBcnJheShyKX1mdW5jdGlvbiBTKGUsdCxuKXt2YXIgcixpLGE7VC5jYWxsKGUpO2lmKG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpaWYoaT10LmluZGV4T2YoZSksLTEhPT1pKS0xPT09bi5pbmRleE9mKGkpJiZuLnB1c2goaSk7ZWxzZSBpZih0LnB1c2goZSksQXJyYXkuaXNBcnJheShlKSlmb3IoaT0wLGE9ZS5sZW5ndGg7YT5pO2krPTEpUyhlW2ldLHQsbik7ZWxzZSBmb3Iocj1PYmplY3Qua2V5cyhlKSxpPTAsYT1yLmxlbmd0aDthPmk7aSs9MSlTKGVbcltpXV0sdCxuKX1mdW5jdGlvbiBBKGUsdCl7dD10fHx7fTt2YXIgbj1uZXcgYSh0KTtyZXR1cm4geChlLG4pLHcobiwwLGUsITAsITApP24uZHVtcCsiXG4iOiIifWZ1bmN0aW9uIEMoZSx0KXtyZXR1cm4gQShlLEUuZXh0ZW5kKHtzY2hlbWE6an0sdCkpfXZhciBFPWUoIi4vY29tbW9uIiksaz1lKCIuL2V4Y2VwdGlvbiIpLE89ZSgiLi9zY2hlbWEvZGVmYXVsdF9mdWxsIiksaj1lKCIuL3NjaGVtYS9kZWZhdWx0X3NhZmUiKSxUPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsST1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LF89OSxEPTEwLEw9MTMsUD0zMixOPTMzLCQ9MzQsTT0zNSxSPTM3LEY9MzgsVT0zOSxCPTQyLHE9NDQsSD00NSx6PTU4LFY9NjIsVz02MyxKPTY0LFk9OTEsSz05MyxRPTk2LFg9MTIzLEc9MTI0LFo9MTI1LGVlPXt9O2VlWzBdPSJcXDAiLGVlWzddPSJcXGEiLGVlWzhdPSJcXGIiLGVlWzldPSJcXHQiLGVlWzEwXT0iXFxuIixlZVsxMV09IlxcdiIsZWVbMTJdPSJcXGYiLGVlWzEzXT0iXFxyIixlZVsyN109IlxcZSIsZWVbMzRdPSdcXCInLGVlWzkyXT0iXFxcXCIsZWVbMTMzXT0iXFxOIixlZVsxNjBdPSJcXF8iLGVlWzgyMzJdPSJcXEwiLGVlWzgyMzNdPSJcXFAiO3ZhciB0ZT1bInkiLCJZIiwieWVzIiwiWWVzIiwiWUVTIiwib24iLCJPbiIsIk9OIiwibiIsIk4iLCJubyIsIk5vIiwiTk8iLCJvZmYiLCJPZmYiLCJPRkYiXTt1LnByb3RvdHlwZS50YWtlVXBUbz1mdW5jdGlvbihlKXt2YXIgdDtpZihlPHRoaXMuY2hlY2twb2ludCl0aHJvdyB0PW5ldyBFcnJvcigicG9zaXRpb24gc2hvdWxkIGJlID4gY2hlY2twb2ludCIpLHQucG9zaXRpb249ZSx0LmNoZWNrcG9pbnQ9dGhpcy5jaGVja3BvaW50LHQ7cmV0dXJuIHRoaXMucmVzdWx0Kz10aGlzLnNvdXJjZS5zbGljZSh0aGlzLmNoZWNrcG9pbnQsZSksdGhpcy5jaGVja3BvaW50PWUsdGhpc30sdS5wcm90b3R5cGUuZXNjYXBlQ2hhcj1mdW5jdGlvbigpe3ZhciBlLHQ7cmV0dXJuIGU9dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmNoZWNrcG9pbnQpLHQ9ZWVbZV18fGkoZSksdGhpcy5yZXN1bHQrPXQsdGhpcy5jaGVja3BvaW50Kz0xLHRoaXN9LHUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuc291cmNlLmxlbmd0aD50aGlzLmNoZWNrcG9pbnQmJnRoaXMudGFrZVVwVG8odGhpcy5zb3VyY2UubGVuZ3RoKX0sdC5leHBvcnRzLmR1bXA9QSx0LmV4cG9ydHMuc2FmZUR1bXA9Q30seyIuL2NvbW1vbiI6MjMsIi4vZXhjZXB0aW9uIjoyNSwiLi9zY2hlbWEvZGVmYXVsdF9mdWxsIjozMCwiLi9zY2hlbWEvZGVmYXVsdF9zYWZlIjozMX1dLDI1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt0aGlzLm5hbWU9IllBTUxFeGNlcHRpb24iLHRoaXMucmVhc29uPWUsdGhpcy5tYXJrPXQsdGhpcy5tZXNzYWdlPXRoaXMudG9TdHJpbmcoITEpfXIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0PSJKUy1ZQU1MOiAiKyh0aGlzLnJlYXNvbnx8Iih1bmtub3duIHJlYXNvbikiKSwhZSYmdGhpcy5tYXJrJiYodCs9IiAiK3RoaXMubWFyay50b1N0cmluZygpKSx0fSx0LmV4cG9ydHM9cn0se31dLDI2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIDEwPT09ZXx8MTM9PT1lfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIDk9PT1lfHwzMj09PWV9ZnVuY3Rpb24gYShlKXtyZXR1cm4gOT09PWV8fDMyPT09ZXx8MTA9PT1lfHwxMz09PWV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gNDQ9PT1lfHw5MT09PWV8fDkzPT09ZXx8MTIzPT09ZXx8MTI1PT09ZX1mdW5jdGlvbiBzKGUpe3ZhciB0O3JldHVybiBlPj00OCYmNTc+PWU/ZS00ODoodD0zMnxlLHQ+PTk3JiYxMDI+PXQ/dC05NysxMDotMSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gMTIwPT09ZT8yOjExNz09PWU/NDo4NT09PWU/ODowfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGU+PTQ4JiY1Nz49ZT9lLTQ4Oi0xfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIDQ4PT09ZT8iXHgwMCI6OTc9PT1lPyIHIjo5OD09PWU/IlxiIjoxMTY9PT1lPyIJIjo5PT09ZT8iCSI6MTEwPT09ZT8iXG4iOjExOD09PWU/IgsiOjEwMj09PWU/IlxmIjoxMTQ9PT1lPyJcciI6MTAxPT09ZT8iGyI6MzI9PT1lPyIgIjozND09PWU/JyInOjQ3PT09ZT8iLyI6OTI9PT1lPyJcXCI6Nzg9PT1lPyLChSI6OTU9PT1lPyLCoCI6NzY9PT1lPyJcdTIwMjgiOjgwPT09ZT8iXHUyMDI5IjoiIn1mdW5jdGlvbiBwKGUpe3JldHVybiA2NTUzNT49ZT9TdHJpbmcuZnJvbUNoYXJDb2RlKGUpOlN0cmluZy5mcm9tQ2hhckNvZGUoKGUtNjU1MzY+PjEwKSs1NTI5NiwoZS02NTUzNiYxMDIzKSs1NjMyMCl9ZnVuY3Rpb24gZihlLHQpe3RoaXMuaW5wdXQ9ZSx0aGlzLmZpbGVuYW1lPXQuZmlsZW5hbWV8fG51bGwsdGhpcy5zY2hlbWE9dC5zY2hlbWF8fHosdGhpcy5vbldhcm5pbmc9dC5vbldhcm5pbmd8fG51bGwsdGhpcy5sZWdhY3k9dC5sZWdhY3l8fCExLHRoaXMuaW1wbGljaXRUeXBlcz10aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0LHRoaXMudHlwZU1hcD10aGlzLnNjaGVtYS5jb21waWxlZFR5cGVNYXAsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5wb3NpdGlvbj0wLHRoaXMubGluZT0wLHRoaXMubGluZVN0YXJ0PTAsdGhpcy5saW5lSW5kZW50PTAsdGhpcy5kb2N1bWVudHM9W119ZnVuY3Rpb24gaChlLHQpe3JldHVybiBuZXcgQih0LG5ldyBxKGUuZmlsZW5hbWUsZS5pbnB1dCxlLnBvc2l0aW9uLGUubGluZSxlLnBvc2l0aW9uLWUubGluZVN0YXJ0KSl9ZnVuY3Rpb24gZChlLHQpe3Rocm93IGgoZSx0KX1mdW5jdGlvbiBtKGUsdCl7dmFyIG49aChlLHQpO2lmKCFlLm9uV2FybmluZyl0aHJvdyBuO2Uub25XYXJuaW5nLmNhbGwobnVsbCxuKX1mdW5jdGlvbiBnKGUsdCxuLHIpe3ZhciBpLGEsbyxzO2lmKG4+dCl7aWYocz1lLmlucHV0LnNsaWNlKHQsbikscilmb3IoaT0wLGE9cy5sZW5ndGg7YT5pO2krPTEpbz1zLmNoYXJDb2RlQXQoaSksOT09PW98fG8+PTMyJiYxMTE0MTExPj1vfHxkKGUsImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyIik7ZS5yZXN1bHQrPXN9fWZ1bmN0aW9uIHkoZSx0LG4pe3ZhciByLGksYSxvO2ZvcihVLmlzT2JqZWN0KG4pfHxkKGUsImNhbm5vdCBtZXJnZSBtYXBwaW5nczsgdGhlIHByb3ZpZGVkIHNvdXJjZSBvYmplY3QgaXMgdW5hY2NlcHRhYmxlIikscj1PYmplY3Qua2V5cyhuKSxhPTAsbz1yLmxlbmd0aDtvPmE7YSs9MSlpPXJbYV0sVi5jYWxsKHQsaSl8fCh0W2ldPW5baV0pfWZ1bmN0aW9uIHYoZSx0LG4scixpKXt2YXIgYSxvO2lmKHI9U3RyaW5nKHIpLG51bGw9PT10JiYodD17fSksInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIj09PW4paWYoQXJyYXkuaXNBcnJheShpKSlmb3IoYT0wLG89aS5sZW5ndGg7bz5hO2ErPTEpeShlLHQsaVthXSk7ZWxzZSB5KGUsdCxpKTtlbHNlIHRbcl09aTtyZXR1cm4gdH1mdW5jdGlvbiBiKGUpe3ZhciB0O3Q9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLDEwPT09dD9lLnBvc2l0aW9uKys6MTM9PT10PyhlLnBvc2l0aW9uKyssMTA9PT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikmJmUucG9zaXRpb24rKyk6ZChlLCJhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQiKSxlLmxpbmUrPTEsZS5saW5lU3RhcnQ9ZS5wb3NpdGlvbn1mdW5jdGlvbiB3KGUsdCxuKXtmb3IodmFyIGE9MCxvPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTswIT09bzspe2Zvcig7aShvKTspbz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtpZih0JiYzNT09PW8pZG8gbz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTt3aGlsZSgxMCE9PW8mJjEzIT09byYmMCE9PW8pO2lmKCFyKG8pKWJyZWFrO2ZvcihiKGUpLG89ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLGErKyxlLmxpbmVJbmRlbnQ9MDszMj09PW87KWUubGluZUluZGVudCsrLG89ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbil9cmV0dXJuLTEhPT1uJiYwIT09YSYmZS5saW5lSW5kZW50PG4mJm0oZSwiZGVmaWNpZW50IGluZGVudGF0aW9uIiksYX1mdW5jdGlvbiB4KGUpe3ZhciB0LG49ZS5wb3NpdGlvbjtyZXR1cm4gdD1lLmlucHV0LmNoYXJDb2RlQXQobiksNDUhPT10JiY0NiE9PXR8fGUuaW5wdXQuY2hhckNvZGVBdChuKzEpIT09dHx8ZS5pbnB1dC5jaGFyQ29kZUF0KG4rMikhPT10fHwobis9Myx0PWUuaW5wdXQuY2hhckNvZGVBdChuKSwwIT09dCYmIWEodCkpPyExOiEwfWZ1bmN0aW9uIFMoZSx0KXsxPT09dD9lLnJlc3VsdCs9IiAiOnQ+MSYmKGUucmVzdWx0Kz1VLnJlcGVhdCgiXG4iLHQtMSkpfWZ1bmN0aW9uIEEoZSx0LG4pe3ZhciBzLGwsdSxjLHAsZixoLGQsbSx5PWUua2luZCx2PWUucmVzdWx0O2lmKG09ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLGEobSl8fG8obSl8fDM1PT09bXx8Mzg9PT1tfHw0Mj09PW18fDMzPT09bXx8MTI0PT09bXx8NjI9PT1tfHwzOT09PW18fDM0PT09bXx8Mzc9PT1tfHw2ND09PW18fDk2PT09bSlyZXR1cm4hMTtpZigoNjM9PT1tfHw0NT09PW0pJiYobD1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbisxKSxhKGwpfHxuJiZvKGwpKSlyZXR1cm4hMTtmb3IoZS5raW5kPSJzY2FsYXIiLGUucmVzdWx0PSIiLHU9Yz1lLnBvc2l0aW9uLHA9ITE7MCE9PW07KXtpZig1OD09PW0pe2lmKGw9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24rMSksYShsKXx8biYmbyhsKSlicmVha31lbHNlIGlmKDM1PT09bSl7aWYocz1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbi0xKSxhKHMpKWJyZWFrfWVsc2V7aWYoZS5wb3NpdGlvbj09PWUubGluZVN0YXJ0JiZ4KGUpfHxuJiZvKG0pKWJyZWFrO2lmKHIobSkpe2lmKGY9ZS5saW5lLGg9ZS5saW5lU3RhcnQsZD1lLmxpbmVJbmRlbnQsdyhlLCExLC0xKSxlLmxpbmVJbmRlbnQ+PXQpe3A9ITAsbT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbik7Y29udGludWV9ZS5wb3NpdGlvbj1jLGUubGluZT1mLGUubGluZVN0YXJ0PWgsZS5saW5lSW5kZW50PWQ7YnJlYWt9fXAmJihnKGUsdSxjLCExKSxTKGUsZS5saW5lLWYpLHU9Yz1lLnBvc2l0aW9uLHA9ITEpLGkobSl8fChjPWUucG9zaXRpb24rMSksbT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKX1yZXR1cm4gZyhlLHUsYywhMSksZS5yZXN1bHQ/ITA6KGUua2luZD15LGUucmVzdWx0PXYsITEpfWZ1bmN0aW9uIEMoZSx0KXt2YXIgbixpLGE7aWYobj1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbiksMzkhPT1uKXJldHVybiExO2ZvcihlLmtpbmQ9InNjYWxhciIsZS5yZXN1bHQ9IiIsZS5wb3NpdGlvbisrLGk9YT1lLnBvc2l0aW9uOzAhPT0obj1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikpOylpZigzOT09PW4pe2lmKGcoZSxpLGUucG9zaXRpb24sITApLG49ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbiksMzkhPT1uKXJldHVybiEwO2k9YT1lLnBvc2l0aW9uLGUucG9zaXRpb24rK31lbHNlIHIobik/KGcoZSxpLGEsITApLFMoZSx3KGUsITEsdCkpLGk9YT1lLnBvc2l0aW9uKTplLnBvc2l0aW9uPT09ZS5saW5lU3RhcnQmJngoZSk/ZChlLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKTooZS5wb3NpdGlvbisrLGE9ZS5wb3NpdGlvbik7ZChlLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIil9ZnVuY3Rpb24gRShlLHQpe3ZhciBuLGksYSxvLHUsYztpZihjPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSwzNCE9PWMpcmV0dXJuITE7Zm9yKGUua2luZD0ic2NhbGFyIixlLnJlc3VsdD0iIixlLnBvc2l0aW9uKyssbj1pPWUucG9zaXRpb247MCE9PShjPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSk7KXtpZigzND09PWMpcmV0dXJuIGcoZSxuLGUucG9zaXRpb24sITApLGUucG9zaXRpb24rKywhMDtpZig5Mj09PWMpe2lmKGcoZSxuLGUucG9zaXRpb24sITApLGM9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbikscihjKSl3KGUsITEsdCk7ZWxzZSBpZigyNTY+YyYmaWVbY10pZS5yZXN1bHQrPWFlW2NdLGUucG9zaXRpb24rKztlbHNlIGlmKCh1PWwoYykpPjApe2ZvcihhPXUsbz0wO2E+MDthLS0pYz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSwodT1zKGMpKT49MD9vPShvPDw0KSt1OmQoZSwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIik7ZS5yZXN1bHQrPXAobyksZS5wb3NpdGlvbisrfWVsc2UgZChlLCJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZSIpO249aT1lLnBvc2l0aW9ufWVsc2UgcihjKT8oZyhlLG4saSwhMCksUyhlLHcoZSwhMSx0KSksbj1pPWUucG9zaXRpb24pOmUucG9zaXRpb249PT1lLmxpbmVTdGFydCYmeChlKT9kKGUsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpOihlLnBvc2l0aW9uKyssaT1lLnBvc2l0aW9uKX1kKGUsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBrKGUsdCl7dmFyIG4scixpLG8scyxsLHUsYyxwLGYsaCxtPSEwLGc9ZS50YWcseT1lLmFuY2hvcjtpZihoPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSw5MT09PWgpbz05Myx1PSExLHI9W107ZWxzZXtpZigxMjMhPT1oKXJldHVybiExO289MTI1LHU9ITAscj17fX1mb3IobnVsbCE9PWUuYW5jaG9yJiYoZS5hbmNob3JNYXBbZS5hbmNob3JdPXIpLGg9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7MCE9PWg7KXtpZih3KGUsITAsdCksaD1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbiksaD09PW8pcmV0dXJuIGUucG9zaXRpb24rKyxlLnRhZz1nLGUuYW5jaG9yPXksZS5raW5kPXU/Im1hcHBpbmciOiJzZXF1ZW5jZSIsZS5yZXN1bHQ9ciwhMDttfHxkKGUsIm1pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzIikscD1jPWY9bnVsbCxzPWw9ITEsNjM9PT1oJiYoaT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbisxKSxhKGkpJiYocz1sPSEwLGUucG9zaXRpb24rKyx3KGUsITAsdCkpKSxuPWUubGluZSxMKGUsdCxXLCExLCEwKSxwPWUudGFnLGM9ZS5yZXN1bHQsdyhlLCEwLHQpLGg9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLCFsJiZlLmxpbmUhPT1ufHw1OCE9PWh8fChzPSEwLGg9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbiksdyhlLCEwLHQpLEwoZSx0LFcsITEsITApLGY9ZS5yZXN1bHQpLHU/dihlLHIscCxjLGYpOnM/ci5wdXNoKHYoZSxudWxsLHAsYyxmKSk6ci5wdXNoKGMpLHcoZSwhMCx0KSxoPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSw0ND09PWg/KG09ITAsaD1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSk6bT0hMX1kKGUsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZmxvdyBjb2xsZWN0aW9uIil9ZnVuY3Rpb24gTyhlLHQpe3ZhciBuLGEsbyxzLGw9USxjPSExLHA9dCxmPTAsaD0hMTtpZihzPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSwxMjQ9PT1zKWE9ITE7ZWxzZXtpZig2MiE9PXMpcmV0dXJuITE7YT0hMH1mb3IoZS5raW5kPSJzY2FsYXIiLGUucmVzdWx0PSIiOzAhPT1zOylpZihzPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pLDQzPT09c3x8NDU9PT1zKVE9PT1sP2w9NDM9PT1zP0c6WDpkKGUsInJlcGVhdCBvZiBhIGNob21waW5nIG1vZGUgaWRlbnRpZmllciIpO2Vsc2V7aWYoISgobz11KHMpKT49MCkpYnJlYWs7MD09PW8/ZChlLCJiYWQgZXhwbGljaXQgaW5kZW50YXRpb24gd2lkdGggb2YgYSBibG9jayBzY2FsYXI7IGl0IGNhbm5vdCBiZSBsZXNzIHRoYW4gb25lIik6Yz9kKGUsInJlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyIik6KHA9dCtvLTEsYz0hMCl9aWYoaShzKSl7ZG8gcz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTt3aGlsZShpKHMpKTtpZigzNT09PXMpZG8gcz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTt3aGlsZSghcihzKSYmMCE9PXMpfWZvcig7MCE9PXM7KXtmb3IoYihlKSxlLmxpbmVJbmRlbnQ9MCxzPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTsoIWN8fGUubGluZUluZGVudDxwKSYmMzI9PT1zOyllLmxpbmVJbmRlbnQrKyxzPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2lmKCFjJiZlLmxpbmVJbmRlbnQ+cCYmKHA9ZS5saW5lSW5kZW50KSxyKHMpKWYrKztlbHNle2lmKGUubGluZUluZGVudDxwKXtsPT09Rz9lLnJlc3VsdCs9VS5yZXBlYXQoIlxuIixmKTpsPT09USYmYyYmKGUucmVzdWx0Kz0iXG4iKTticmVha31mb3IoYT9pKHMpPyhoPSEwLGUucmVzdWx0Kz1VLnJlcGVhdCgiXG4iLGYrMSkpOmg/KGg9ITEsZS5yZXN1bHQrPVUucmVwZWF0KCJcbiIsZisxKSk6MD09PWY/YyYmKGUucmVzdWx0Kz0iICIpOmUucmVzdWx0Kz1VLnJlcGVhdCgiXG4iLGYpOmMmJihlLnJlc3VsdCs9VS5yZXBlYXQoIlxuIixmKzEpKSxjPSEwLGY9MCxuPWUucG9zaXRpb247IXIocykmJjAhPT1zOylzPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2coZSxuLGUucG9zaXRpb24sITEpfX1yZXR1cm4hMH1mdW5jdGlvbiBqKGUsdCl7dmFyIG4scixpLG89ZS50YWcscz1lLmFuY2hvcixsPVtdLHU9ITE7Zm9yKG51bGwhPT1lLmFuY2hvciYmKGUuYW5jaG9yTWFwW2UuYW5jaG9yXT1sKSxpPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTswIT09aSYmNDU9PT1pJiYocj1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbisxKSxhKHIpKTspaWYodT0hMCxlLnBvc2l0aW9uKyssdyhlLCEwLC0xKSYmZS5saW5lSW5kZW50PD10KWwucHVzaChudWxsKSxpPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTtlbHNlIGlmKG49ZS5saW5lLEwoZSx0LFksITEsITApLGwucHVzaChlLnJlc3VsdCksdyhlLCEwLC0xKSxpPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSwoZS5saW5lPT09bnx8ZS5saW5lSW5kZW50PnQpJiYwIT09aSlkKGUsImJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5Iik7ZWxzZSBpZihlLmxpbmVJbmRlbnQ8dClicmVhaztyZXR1cm4gdT8oZS50YWc9byxlLmFuY2hvcj1zLGUua2luZD0ic2VxdWVuY2UiLGUucmVzdWx0PWwsITApOiExfWZ1bmN0aW9uIFQoZSx0LG4pe3ZhciByLG8scyxsLHU9ZS50YWcsYz1lLmFuY2hvcixwPXt9LGY9bnVsbCxoPW51bGwsbT1udWxsLGc9ITEseT0hMTtmb3IobnVsbCE9PWUuYW5jaG9yJiYoZS5hbmNob3JNYXBbZS5hbmNob3JdPXApLGw9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pOzAhPT1sOyl7aWYocj1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbisxKSxzPWUubGluZSw2MyE9PWwmJjU4IT09bHx8IWEocikpe2lmKCFMKGUsbixKLCExLCEwKSlicmVhaztpZihlLmxpbmU9PT1zKXtmb3IobD1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbik7aShsKTspbD1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtpZig1OD09PWwpbD1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSxhKGwpfHxkKGUsImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZyIpLGcmJih2KGUscCxmLGgsbnVsbCksZj1oPW09bnVsbCkseT0hMCxnPSExLG89ITEsZj1lLnRhZyxoPWUucmVzdWx0O2Vsc2V7aWYoIXkpcmV0dXJuIGUudGFnPXUsZS5hbmNob3I9YywhMDtkKGUsImNhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkIil9fWVsc2V7aWYoIXkpcmV0dXJuIGUudGFnPXUsZS5hbmNob3I9YywhMDtkKGUsImNhbiBub3QgcmVhZCBhIGJsb2NrIG1hcHBpbmcgZW50cnk7IGEgbXVsdGlsaW5lIGtleSBtYXkgbm90IGJlIGFuIGltcGxpY2l0IGtleSIpfX1lbHNlIDYzPT09bD8oZyYmKHYoZSxwLGYsaCxudWxsKSxmPWg9bT1udWxsKSx5PSEwLGc9ITAsbz0hMCk6Zz8oZz0hMSxvPSEwKTpkKGUsImluY29tcGxldGUgZXhwbGljaXQgbWFwcGluZyBwYWlyOyBhIGtleSBub2RlIGlzIG1pc3NlZCIpLGUucG9zaXRpb24rPTEsbD1yO2lmKChlLmxpbmU9PT1zfHxlLmxpbmVJbmRlbnQ+dCkmJihMKGUsdCxLLCEwLG8pJiYoZz9oPWUucmVzdWx0Om09ZS5yZXN1bHQpLGd8fCh2KGUscCxmLGgsbSksZj1oPW09bnVsbCksdyhlLCEwLC0xKSxsPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSksZS5saW5lSW5kZW50PnQmJjAhPT1sKWQoZSwiYmFkIGluZGVudGF0aW9uIG9mIGEgbWFwcGluZyBlbnRyeSIpO2Vsc2UgaWYoZS5saW5lSW5kZW50PHQpYnJlYWt9cmV0dXJuIGcmJnYoZSxwLGYsaCxudWxsKSx5JiYoZS50YWc9dSxlLmFuY2hvcj1jLGUua2luZD0ibWFwcGluZyIsZS5yZXN1bHQ9cCkseX1mdW5jdGlvbiBJKGUpe3ZhciB0LG4scixpLG89ITEscz0hMTtpZihpPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSwzMyE9PWkpcmV0dXJuITE7aWYobnVsbCE9PWUudGFnJiZkKGUsImR1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5IiksaT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSw2MD09PWk/KG89ITAsaT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSk6MzM9PT1pPyhzPSEwLG49IiEhIixpPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pKTpuPSIhIix0PWUucG9zaXRpb24sbyl7ZG8gaT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTt3aGlsZSgwIT09aSYmNjIhPT1pKTtlLnBvc2l0aW9uPGUubGVuZ3RoPyhyPWUuaW5wdXQuc2xpY2UodCxlLnBvc2l0aW9uKSxpPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pKTpkKGUsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgdmVyYmF0aW0gdGFnIil9ZWxzZXtmb3IoOzAhPT1pJiYhYShpKTspMzM9PT1pJiYocz9kKGUsInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MiKToobj1lLmlucHV0LnNsaWNlKHQtMSxlLnBvc2l0aW9uKzEpLG5lLnRlc3Qobil8fGQoZSwibmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMiKSxzPSEwLHQ9ZS5wb3NpdGlvbisxKSksaT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtyPWUuaW5wdXQuc2xpY2UodCxlLnBvc2l0aW9uKSx0ZS50ZXN0KHIpJiZkKGUsInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVycyIpfXJldHVybiByJiYhcmUudGVzdChyKSYmZChlLCJ0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICIrciksbz9lLnRhZz1yOlYuY2FsbChlLnRhZ01hcCxuKT9lLnRhZz1lLnRhZ01hcFtuXStyOiIhIj09PW4/ZS50YWc9IiEiK3I6IiEhIj09PW4/ZS50YWc9InRhZzp5YW1sLm9yZywyMDAyOiIrcjpkKGUsJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSAiJytuKyciJyksITB9ZnVuY3Rpb24gXyhlKXt2YXIgdCxuO2lmKG49ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLDM4IT09bilyZXR1cm4hMTtmb3IobnVsbCE9PWUuYW5jaG9yJiZkKGUsImR1cGxpY2F0aW9uIG9mIGFuIGFuY2hvciBwcm9wZXJ0eSIpLG49ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbiksdD1lLnBvc2l0aW9uOzAhPT1uJiYhYShuKSYmIW8obik7KW49ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7cmV0dXJuIGUucG9zaXRpb249PT10JiZkKGUsIm5hbWUgb2YgYW4gYW5jaG9yIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSxlLmFuY2hvcj1lLmlucHV0LnNsaWNlKHQsZS5wb3NpdGlvbiksITB9ZnVuY3Rpb24gRChlKXt2YXIgdCxuLHI7ZS5sZW5ndGgsZS5pbnB1dDtpZihyPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSw0MiE9PXIpcmV0dXJuITE7Zm9yKHI9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbiksdD1lLnBvc2l0aW9uOzAhPT1yJiYhYShyKSYmIW8ocik7KXI9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7cmV0dXJuIGUucG9zaXRpb249PT10JiZkKGUsIm5hbWUgb2YgYW4gYWxpYXMgbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpLG49ZS5pbnB1dC5zbGljZSh0LGUucG9zaXRpb24pLGUuYW5jaG9yTWFwLmhhc093blByb3BlcnR5KG4pfHxkKGUsJ3VuaWRlbnRpZmllZCBhbGlhcyAiJytuKyciJyksZS5yZXN1bHQ9ZS5hbmNob3JNYXBbbl0sdyhlLCEwLC0xKSwhMH1mdW5jdGlvbiBMKGUsdCxuLHIsaSl7dmFyIGEsbyxzLGwsdSxjLHAsZixoPTEsZz0hMSx5PSExO2lmKGUudGFnPW51bGwsZS5hbmNob3I9bnVsbCxlLmtpbmQ9bnVsbCxlLnJlc3VsdD1udWxsLGE9bz1zPUs9PT1ufHxZPT09bixyJiZ3KGUsITAsLTEpJiYoZz0hMCxlLmxpbmVJbmRlbnQ+dD9oPTE6ZS5saW5lSW5kZW50PT09dD9oPTA6ZS5saW5lSW5kZW50PHQmJihoPS0xKSksMT09PWgpZm9yKDtJKGUpfHxfKGUpOyl3KGUsITAsLTEpPyhnPSEwLHM9YSxlLmxpbmVJbmRlbnQ+dD9oPTE6ZS5saW5lSW5kZW50PT09dD9oPTA6ZS5saW5lSW5kZW50PHQmJihoPS0xKSk6cz0hMTtpZihzJiYocz1nfHxpKSwoMT09PWh8fEs9PT1uKSYmKHA9Vz09PW58fEo9PT1uP3Q6dCsxLGY9ZS5wb3NpdGlvbi1lLmxpbmVTdGFydCwxPT09aD9zJiYoaihlLGYpfHxUKGUsZixwKSl8fGsoZSxwKT95PSEwOihvJiZPKGUscCl8fEMoZSxwKXx8RShlLHApP3k9ITA6RChlKT8oeT0hMCwobnVsbCE9PWUudGFnfHxudWxsIT09ZS5hbmNob3IpJiZkKGUsImFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzIikpOkEoZSxwLFc9PT1uKSYmKHk9ITAsbnVsbD09PWUudGFnJiYoZS50YWc9Ij8iKSksbnVsbCE9PWUuYW5jaG9yJiYoZS5hbmNob3JNYXBbZS5hbmNob3JdPWUucmVzdWx0KSk6MD09PWgmJih5PXMmJmooZSxmKSkpLG51bGwhPT1lLnRhZyYmIiEiIT09ZS50YWcpaWYoIj8iPT09ZS50YWcpe2ZvcihsPTAsdT1lLmltcGxpY2l0VHlwZXMubGVuZ3RoO3U+bDtsKz0xKWlmKGM9ZS5pbXBsaWNpdFR5cGVzW2xdLGMucmVzb2x2ZShlLnJlc3VsdCkpe2UucmVzdWx0PWMuY29uc3RydWN0KGUucmVzdWx0KSxlLnRhZz1jLnRhZyxudWxsIT09ZS5hbmNob3ImJihlLmFuY2hvck1hcFtlLmFuY2hvcl09ZS5yZXN1bHQpO2JyZWFrfX1lbHNlIFYuY2FsbChlLnR5cGVNYXAsZS50YWcpPyhjPWUudHlwZU1hcFtlLnRhZ10sbnVsbCE9PWUucmVzdWx0JiZjLmtpbmQhPT1lLmtpbmQmJmQoZSwidW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITwiK2UudGFnKyc+IHRhZzsgaXQgc2hvdWxkIGJlICInK2Mua2luZCsnIiwgbm90ICInK2Uua2luZCsnIicpLGMucmVzb2x2ZShlLnJlc3VsdCk/KGUucmVzdWx0PWMuY29uc3RydWN0KGUucmVzdWx0KSxudWxsIT09ZS5hbmNob3ImJihlLmFuY2hvck1hcFtlLmFuY2hvcl09ZS5yZXN1bHQpKTpkKGUsImNhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8IitlLnRhZysiPiBleHBsaWNpdCB0YWciKSk6bShlLCJ1bmtub3duIHRhZyAhPCIrZS50YWcrIj4iKTtyZXR1cm4gbnVsbCE9PWUudGFnfHxudWxsIT09ZS5hbmNob3J8fHl9ZnVuY3Rpb24gUChlKXt2YXIgdCxuLG8scyxsPWUucG9zaXRpb24sdT0hMTtmb3IoZS52ZXJzaW9uPW51bGwsZS5jaGVja0xpbmVCcmVha3M9ZS5sZWdhY3ksZS50YWdNYXA9e30sZS5hbmNob3JNYXA9e307MCE9PShzPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSkmJih3KGUsITAsLTEpLHM9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLCEoZS5saW5lSW5kZW50PjB8fDM3IT09cykpOyl7Zm9yKHU9ITAscz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSx0PWUucG9zaXRpb247MCE9PXMmJiFhKHMpOylzPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2ZvcihuPWUuaW5wdXQuc2xpY2UodCxlLnBvc2l0aW9uKSxvPVtdLG4ubGVuZ3RoPDEmJmQoZSwiZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoIik7MCE9PXM7KXtmb3IoO2kocyk7KXM9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7aWYoMzU9PT1zKXtkbyBzPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO3doaWxlKDAhPT1zJiYhcihzKSk7YnJlYWt9aWYocihzKSlicmVhaztmb3IodD1lLnBvc2l0aW9uOzAhPT1zJiYhYShzKTspcz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtvLnB1c2goZS5pbnB1dC5zbGljZSh0LGUucG9zaXRpb24pKX0wIT09cyYmYihlKSxWLmNhbGwoc2Usbik/c2Vbbl0oZSxuLG8pOm0oZSwndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgIicrbisnIicpfXJldHVybiB3KGUsITAsLTEpLDA9PT1lLmxpbmVJbmRlbnQmJjQ1PT09ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pJiY0NT09PWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKzEpJiY0NT09PWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKzIpPyhlLnBvc2l0aW9uKz0zLHcoZSwhMCwtMSkpOnUmJmQoZSwiZGlyZWN0aXZlcyBlbmQgbWFyayBpcyBleHBlY3RlZCIpLEwoZSxlLmxpbmVJbmRlbnQtMSxLLCExLCEwKSx3KGUsITAsLTEpLGUuY2hlY2tMaW5lQnJlYWtzJiZlZS50ZXN0KGUuaW5wdXQuc2xpY2UobCxlLnBvc2l0aW9uKSkmJm0oZSwibm9uLUFTQ0lJIGxpbmUgYnJlYWtzIGFyZSBpbnRlcnByZXRlZCBhcyBjb250ZW50IiksZS5kb2N1bWVudHMucHVzaChlLnJlc3VsdCksZS5wb3NpdGlvbj09PWUubGluZVN0YXJ0JiZ4KGUpP3ZvaWQoNDY9PT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbikmJihlLnBvc2l0aW9uKz0zLAp3KGUsITAsLTEpKSk6dm9pZChlLnBvc2l0aW9uPGUubGVuZ3RoLTEmJmQoZSwiZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQiKSl9ZnVuY3Rpb24gTihlLHQpe2U9U3RyaW5nKGUpLHQ9dHx8e30sMCE9PWUubGVuZ3RoJiYoMTAhPT1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSkmJjEzIT09ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpJiYoZSs9IlxuIiksNjUyNzk9PT1lLmNoYXJDb2RlQXQoMCkmJihlPWUuc2xpY2UoMSkpKTt2YXIgbj1uZXcgZihlLHQpO2ZvcihaLnRlc3Qobi5pbnB1dCkmJmQobiwidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMiKSxuLmlucHV0Kz0iXHgwMCI7MzI9PT1uLmlucHV0LmNoYXJDb2RlQXQobi5wb3NpdGlvbik7KW4ubGluZUluZGVudCs9MSxuLnBvc2l0aW9uKz0xO2Zvcig7bi5wb3NpdGlvbjxuLmxlbmd0aC0xOylQKG4pO3JldHVybiBuLmRvY3VtZW50c31mdW5jdGlvbiAkKGUsdCxuKXt2YXIgcixpLGE9TihlLG4pO2ZvcihyPTAsaT1hLmxlbmd0aDtpPnI7cis9MSl0KGFbcl0pfWZ1bmN0aW9uIE0oZSx0KXt2YXIgbj1OKGUsdCk7aWYoMD09PW4ubGVuZ3RoKXJldHVybiB2b2lkIDA7aWYoMT09PW4ubGVuZ3RoKXJldHVybiBuWzBdO3Rocm93IG5ldyBCKCJleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtLCBidXQgZm91bmQgbW9yZSIpfWZ1bmN0aW9uIFIoZSx0LG4peyQoZSx0LFUuZXh0ZW5kKHtzY2hlbWE6SH0sbikpfWZ1bmN0aW9uIEYoZSx0KXtyZXR1cm4gTShlLFUuZXh0ZW5kKHtzY2hlbWE6SH0sdCkpfWZvcih2YXIgVT1lKCIuL2NvbW1vbiIpLEI9ZSgiLi9leGNlcHRpb24iKSxxPWUoIi4vbWFyayIpLEg9ZSgiLi9zY2hlbWEvZGVmYXVsdF9zYWZlIiksej1lKCIuL3NjaGVtYS9kZWZhdWx0X2Z1bGwiKSxWPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksVz0xLEo9MixZPTMsSz00LFE9MSxYPTIsRz0zLFo9L1tceDAwLVx4MDhceDBCXHgwQ1x4MEUtXHgxRlx4N0YtXHg4NFx4ODYtXHg5Rlx1RkZGRVx1RkZGRl18W1x1RDgwMC1cdURCRkZdKD8hW1x1REMwMC1cdURGRkZdKXwoPzpbXlx1RDgwMC1cdURCRkZdfF4pW1x1REMwMC1cdURGRkZdLyxlZT0vW1x4ODVcdTIwMjhcdTIwMjldLyx0ZT0vWyxcW1xdXHtcfV0vLG5lPS9eKD86IXwhIXwhW2EtelwtXSshKSQvaSxyZT0vXig/OiF8W14sXFtcXVx7XH1dKSg/OiVbMC05YS1mXXsyfXxbMC05YS16XC0jO1wvXD86QCY9XCtcJCxfXC4hflwqJ1woXClcW1xdXSkqJC9pLGllPW5ldyBBcnJheSgyNTYpLGFlPW5ldyBBcnJheSgyNTYpLG9lPTA7MjU2Pm9lO29lKyspaWVbb2VdPWMob2UpPzE6MCxhZVtvZV09YyhvZSk7dmFyIHNlPXtZQU1MOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLGE7bnVsbCE9PWUudmVyc2lvbiYmZChlLCJkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmUiKSwxIT09bi5sZW5ndGgmJmQoZSwiWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudCIpLHI9L14oWzAtOV0rKVwuKFswLTldKykkLy5leGVjKG5bMF0pLG51bGw9PT1yJiZkKGUsImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlIiksaT1wYXJzZUludChyWzFdLDEwKSxhPXBhcnNlSW50KHJbMl0sMTApLDEhPT1pJiZkKGUsInVuYWNjZXB0YWJsZSBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50IiksZS52ZXJzaW9uPW5bMF0sZS5jaGVja0xpbmVCcmVha3M9Mj5hLDEhPT1hJiYyIT09YSYmbShlLCJ1bnN1cHBvcnRlZCBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Iil9LFRBRzpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTsyIT09bi5sZW5ndGgmJmQoZSwiVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cyIpLHI9blswXSxpPW5bMV0sbmUudGVzdChyKXx8ZChlLCJpbGwtZm9ybWVkIHRhZyBoYW5kbGUgKGZpcnN0IGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpLFYuY2FsbChlLnRhZ01hcCxyKSYmZChlLCd0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciAiJytyKyciIHRhZyBoYW5kbGUnKSxyZS50ZXN0KGkpfHxkKGUsImlsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpLGUudGFnTWFwW3JdPWl9fTt0LmV4cG9ydHMubG9hZEFsbD0kLHQuZXhwb3J0cy5sb2FkPU0sdC5leHBvcnRzLnNhZmVMb2FkQWxsPVIsdC5leHBvcnRzLnNhZmVMb2FkPUZ9LHsiLi9jb21tb24iOjIzLCIuL2V4Y2VwdGlvbiI6MjUsIi4vbWFyayI6MjcsIi4vc2NoZW1hL2RlZmF1bHRfZnVsbCI6MzAsIi4vc2NoZW1hL2RlZmF1bHRfc2FmZSI6MzF9XSwyNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsaSl7dGhpcy5uYW1lPWUsdGhpcy5idWZmZXI9dCx0aGlzLnBvc2l0aW9uPW4sdGhpcy5saW5lPXIsdGhpcy5jb2x1bW49aX12YXIgaT1lKCIuL2NvbW1vbiIpO3IucHJvdG90eXBlLmdldFNuaXBwZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGEsbyxzO2lmKCF0aGlzLmJ1ZmZlcilyZXR1cm4gbnVsbDtmb3IoZT1lfHw0LHQ9dHx8NzUsbj0iIixyPXRoaXMucG9zaXRpb247cj4wJiYtMT09PSJceDAwXHJcbsKFXHUyMDI4XHUyMDI5Ii5pbmRleE9mKHRoaXMuYnVmZmVyLmNoYXJBdChyLTEpKTspaWYoci09MSx0aGlzLnBvc2l0aW9uLXI+dC8yLTEpe249IiAuLi4gIixyKz01O2JyZWFrfWZvcihhPSIiLG89dGhpcy5wb3NpdGlvbjtvPHRoaXMuYnVmZmVyLmxlbmd0aCYmLTE9PT0iXHgwMFxyXG7ChVx1MjAyOFx1MjAyOSIuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQobykpOylpZihvKz0xLG8tdGhpcy5wb3NpdGlvbj50LzItMSl7YT0iIC4uLiAiLG8tPTU7YnJlYWt9cmV0dXJuIHM9dGhpcy5idWZmZXIuc2xpY2UocixvKSxpLnJlcGVhdCgiICIsZSkrbitzK2ErIlxuIitpLnJlcGVhdCgiICIsZSt0aGlzLnBvc2l0aW9uLXIrbi5sZW5ndGgpKyJeIn0sci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIjtyZXR1cm4gdGhpcy5uYW1lJiYobis9J2luICInK3RoaXMubmFtZSsnIiAnKSxuKz0iYXQgbGluZSAiKyh0aGlzLmxpbmUrMSkrIiwgY29sdW1uICIrKHRoaXMuY29sdW1uKzEpLGV8fCh0PXRoaXMuZ2V0U25pcHBldCgpLHQmJihuKz0iOlxuIit0KSksbn0sdC5leHBvcnRzPXJ9LHsiLi9jb21tb24iOjIzfV0sMjg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIGk9W107cmV0dXJuIGUuaW5jbHVkZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe249cihlLHQsbil9KSxlW3RdLmZvckVhY2goZnVuY3Rpb24oZSl7bi5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dC50YWc9PT1lLnRhZyYmaS5wdXNoKG4pfSksbi5wdXNoKGUpfSksbi5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4tMT09PWkuaW5kZXhPZih0KX0pfWZ1bmN0aW9uIGkoKXtmdW5jdGlvbiBlKGUpe3JbZS50YWddPWV9dmFyIHQsbixyPXt9O2Zvcih0PTAsbj1hcmd1bWVudHMubGVuZ3RoO24+dDt0Kz0xKWFyZ3VtZW50c1t0XS5mb3JFYWNoKGUpO3JldHVybiByfWZ1bmN0aW9uIGEoZSl7dGhpcy5pbmNsdWRlPWUuaW5jbHVkZXx8W10sdGhpcy5pbXBsaWNpdD1lLmltcGxpY2l0fHxbXSx0aGlzLmV4cGxpY2l0PWUuZXhwbGljaXR8fFtdLHRoaXMuaW1wbGljaXQuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmxvYWRLaW5kJiYic2NhbGFyIiE9PWUubG9hZEtpbmQpdGhyb3cgbmV3IHMoIlRoZXJlIGlzIGEgbm9uLXNjYWxhciB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBJbXBsaWNpdCByZXNvbHZpbmcgb2Ygc3VjaCB0eXBlcyBpcyBub3Qgc3VwcG9ydGVkLiIpfSksdGhpcy5jb21waWxlZEltcGxpY2l0PXIodGhpcywiaW1wbGljaXQiLFtdKSx0aGlzLmNvbXBpbGVkRXhwbGljaXQ9cih0aGlzLCJleHBsaWNpdCIsW10pLHRoaXMuY29tcGlsZWRUeXBlTWFwPWkodGhpcy5jb21waWxlZEltcGxpY2l0LHRoaXMuY29tcGlsZWRFeHBsaWNpdCl9dmFyIG89ZSgiLi9jb21tb24iKSxzPWUoIi4vZXhjZXB0aW9uIiksbD1lKCIuL3R5cGUiKTthLkRFRkFVTFQ9bnVsbCxhLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciBlLHQ7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTplPWEuREVGQVVMVCx0PWFyZ3VtZW50c1swXTticmVhaztjYXNlIDI6ZT1hcmd1bWVudHNbMF0sdD1hcmd1bWVudHNbMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgcygiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgU2NoZW1hLmNyZWF0ZSBmdW5jdGlvbiIpfWlmKGU9by50b0FycmF5KGUpLHQ9by50b0FycmF5KHQpLCFlLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgYX0pKXRocm93IG5ldyBzKCJTcGVjaWZpZWQgbGlzdCBvZiBzdXBlciBzY2hlbWFzIChvciBhIHNpbmdsZSBTY2hlbWEgb2JqZWN0KSBjb250YWlucyBhIG5vbi1TY2hlbWEgb2JqZWN0LiIpO2lmKCF0LmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgbH0pKXRocm93IG5ldyBzKCJTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuIik7cmV0dXJuIG5ldyBhKHtpbmNsdWRlOmUsZXhwbGljaXQ6dH0pfSx0LmV4cG9ydHM9YX0seyIuL2NvbW1vbiI6MjMsIi4vZXhjZXB0aW9uIjoyNSwiLi90eXBlIjozNH1dLDI5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uL3NjaGVtYSIpO3QuZXhwb3J0cz1uZXcgcih7aW5jbHVkZTpbZSgiLi9qc29uIildfSl9LHsiLi4vc2NoZW1hIjoyOCwiLi9qc29uIjozM31dLDMwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uL3NjaGVtYSIpO3QuZXhwb3J0cz1yLkRFRkFVTFQ9bmV3IHIoe2luY2x1ZGU6W2UoIi4vZGVmYXVsdF9zYWZlIildLGV4cGxpY2l0OltlKCIuLi90eXBlL2pzL3VuZGVmaW5lZCIpLGUoIi4uL3R5cGUvanMvcmVnZXhwIiksZSgiLi4vdHlwZS9qcy9mdW5jdGlvbiIpXX0pfSx7Ii4uL3NjaGVtYSI6MjgsIi4uL3R5cGUvanMvZnVuY3Rpb24iOjM5LCIuLi90eXBlL2pzL3JlZ2V4cCI6NDAsIi4uL3R5cGUvanMvdW5kZWZpbmVkIjo0MSwiLi9kZWZhdWx0X3NhZmUiOjMxfV0sMzE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi4vc2NoZW1hIik7dC5leHBvcnRzPW5ldyByKHtpbmNsdWRlOltlKCIuL2NvcmUiKV0saW1wbGljaXQ6W2UoIi4uL3R5cGUvdGltZXN0YW1wIiksZSgiLi4vdHlwZS9tZXJnZSIpXSxleHBsaWNpdDpbZSgiLi4vdHlwZS9iaW5hcnkiKSxlKCIuLi90eXBlL29tYXAiKSxlKCIuLi90eXBlL3BhaXJzIiksZSgiLi4vdHlwZS9zZXQiKV19KX0seyIuLi9zY2hlbWEiOjI4LCIuLi90eXBlL2JpbmFyeSI6MzUsIi4uL3R5cGUvbWVyZ2UiOjQzLCIuLi90eXBlL29tYXAiOjQ1LCIuLi90eXBlL3BhaXJzIjo0NiwiLi4vdHlwZS9zZXQiOjQ4LCIuLi90eXBlL3RpbWVzdGFtcCI6NTAsIi4vY29yZSI6Mjl9XSwzMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9zY2hlbWEiKTt0LmV4cG9ydHM9bmV3IHIoe2V4cGxpY2l0OltlKCIuLi90eXBlL3N0ciIpLGUoIi4uL3R5cGUvc2VxIiksZSgiLi4vdHlwZS9tYXAiKV19KX0seyIuLi9zY2hlbWEiOjI4LCIuLi90eXBlL21hcCI6NDIsIi4uL3R5cGUvc2VxIjo0NywiLi4vdHlwZS9zdHIiOjQ5fV0sMzM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi4vc2NoZW1hIik7dC5leHBvcnRzPW5ldyByKHtpbmNsdWRlOltlKCIuL2ZhaWxzYWZlIildLGltcGxpY2l0OltlKCIuLi90eXBlL251bGwiKSxlKCIuLi90eXBlL2Jvb2wiKSxlKCIuLi90eXBlL2ludCIpLGUoIi4uL3R5cGUvZmxvYXQiKV19KX0seyIuLi9zY2hlbWEiOjI4LCIuLi90eXBlL2Jvb2wiOjM2LCIuLi90eXBlL2Zsb2F0IjozNywiLi4vdHlwZS9pbnQiOjM4LCIuLi90eXBlL251bGwiOjQ0LCIuL2ZhaWxzYWZlIjozMn1dLDM0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9e307cmV0dXJuIG51bGwhPT1lJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Vbbl0uZm9yRWFjaChmdW5jdGlvbihlKXt0W1N0cmluZyhlKV09bn0pfSksdH1mdW5jdGlvbiBpKGUsdCl7aWYodD10fHx7fSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKC0xPT09by5pbmRleE9mKHQpKXRocm93IG5ldyBhKCdVbmtub3duIG9wdGlvbiAiJyt0KyciIGlzIG1ldCBpbiBkZWZpbml0aW9uIG9mICInK2UrJyIgWUFNTCB0eXBlLicpfSksdGhpcy50YWc9ZSx0aGlzLmtpbmQ9dC5raW5kfHxudWxsLHRoaXMucmVzb2x2ZT10LnJlc29sdmV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LHRoaXMuY29uc3RydWN0PXQuY29uc3RydWN0fHxmdW5jdGlvbihlKXtyZXR1cm4gZX0sdGhpcy5pbnN0YW5jZU9mPXQuaW5zdGFuY2VPZnx8bnVsbCx0aGlzLnByZWRpY2F0ZT10LnByZWRpY2F0ZXx8bnVsbCx0aGlzLnJlcHJlc2VudD10LnJlcHJlc2VudHx8bnVsbCx0aGlzLmRlZmF1bHRTdHlsZT10LmRlZmF1bHRTdHlsZXx8bnVsbCx0aGlzLnN0eWxlQWxpYXNlcz1yKHQuc3R5bGVBbGlhc2VzfHxudWxsKSwtMT09PXMuaW5kZXhPZih0aGlzLmtpbmQpKXRocm93IG5ldyBhKCdVbmtub3duIGtpbmQgIicrdGhpcy5raW5kKyciIGlzIHNwZWNpZmllZCBmb3IgIicrZSsnIiBZQU1MIHR5cGUuJyl9dmFyIGE9ZSgiLi9leGNlcHRpb24iKSxvPVsia2luZCIsInJlc29sdmUiLCJjb25zdHJ1Y3QiLCJpbnN0YW5jZU9mIiwicHJlZGljYXRlIiwicmVwcmVzZW50IiwiZGVmYXVsdFN0eWxlIiwic3R5bGVBbGlhc2VzIl0scz1bInNjYWxhciIsInNlcXVlbmNlIiwibWFwcGluZyJdO3QuZXhwb3J0cz1pfSx7Ii4vZXhjZXB0aW9uIjoyNX1dLDM1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITE7dmFyIHQsbixyPTAsaT1lLmxlbmd0aCxhPXU7Zm9yKG49MDtpPm47bisrKWlmKHQ9YS5pbmRleE9mKGUuY2hhckF0KG4pKSwhKHQ+NjQpKXtpZigwPnQpcmV0dXJuITE7cis9Nn1yZXR1cm4gciU4PT09MH1mdW5jdGlvbiBpKGUpe3ZhciB0LG4scj1lLnJlcGxhY2UoL1tcclxuPV0vZywiIiksaT1yLmxlbmd0aCxhPXUsbz0wLGw9W107Zm9yKHQ9MDtpPnQ7dCsrKXQlND09PTAmJnQmJihsLnB1c2gobz4+MTYmMjU1KSxsLnB1c2gobz4+OCYyNTUpLGwucHVzaCgyNTUmbykpLG89bzw8NnxhLmluZGV4T2Yoci5jaGFyQXQodCkpO3JldHVybiBuPWklNCo2LDA9PT1uPyhsLnB1c2gobz4+MTYmMjU1KSxsLnB1c2gobz4+OCYyNTUpLGwucHVzaCgyNTUmbykpOjE4PT09bj8obC5wdXNoKG8+PjEwJjI1NSksbC5wdXNoKG8+PjImMjU1KSk6MTI9PT1uJiZsLnB1c2gobz4+NCYyNTUpLHM/bmV3IHMobCk6bH1mdW5jdGlvbiBhKGUpe3ZhciB0LG4scj0iIixpPTAsYT1lLmxlbmd0aCxvPXU7Zm9yKHQ9MDthPnQ7dCsrKXQlMz09PTAmJnQmJihyKz1vW2k+PjE4JjYzXSxyKz1vW2k+PjEyJjYzXSxyKz1vW2k+PjYmNjNdLHIrPW9bNjMmaV0pLGk9KGk8PDgpK2VbdF07cmV0dXJuIG49YSUzLDA9PT1uPyhyKz1vW2k+PjE4JjYzXSxyKz1vW2k+PjEyJjYzXSxyKz1vW2k+PjYmNjNdLHIrPW9bNjMmaV0pOjI9PT1uPyhyKz1vW2k+PjEwJjYzXSxyKz1vW2k+PjQmNjNdLHIrPW9baTw8MiY2M10scis9b1s2NF0pOjE9PT1uJiYocis9b1tpPj4yJjYzXSxyKz1vW2k8PDQmNjNdLHIrPW9bNjRdLHIrPW9bNjRdKSxyfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIHMmJnMuaXNCdWZmZXIoZSl9dmFyIHM9ZSgiYnVmZmVyIikuQnVmZmVyLGw9ZSgiLi4vdHlwZSIpLHU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XG5cciI7dC5leHBvcnRzPW5ldyBsKCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnkiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cixjb25zdHJ1Y3Q6aSxwcmVkaWNhdGU6byxyZXByZXNlbnQ6YX0pfSx7Ii4uL3R5cGUiOjM0LGJ1ZmZlcjoxMn1dLDM2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITE7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIDQ9PT10JiYoInRydWUiPT09ZXx8IlRydWUiPT09ZXx8IlRSVUUiPT09ZSl8fDU9PT10JiYoImZhbHNlIj09PWV8fCJGYWxzZSI9PT1lfHwiRkFMU0UiPT09ZSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4idHJ1ZSI9PT1lfHwiVHJ1ZSI9PT1lfHwiVFJVRSI9PT1lfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIltvYmplY3QgQm9vbGVhbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfXZhciBvPWUoIi4uL3R5cGUiKTt0LmV4cG9ydHM9bmV3IG8oInRhZzp5YW1sLm9yZywyMDAyOmJvb2wiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cixjb25zdHJ1Y3Q6aSxwcmVkaWNhdGU6YSxyZXByZXNlbnQ6e2xvd2VyY2FzZTpmdW5jdGlvbihlKXtyZXR1cm4gZT8idHJ1ZSI6ImZhbHNlIn0sdXBwZXJjYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlPyJUUlVFIjoiRkFMU0UifSxjYW1lbGNhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/IlRydWUiOiJGYWxzZSJ9fSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KX0seyIuLi90eXBlIjozNH1dLDM3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITE7cmV0dXJuIHUudGVzdChlKT8hMDohMX1mdW5jdGlvbiBpKGUpe3ZhciB0LG4scixpO3JldHVybiB0PWUucmVwbGFjZSgvXy9nLCIiKS50b0xvd2VyQ2FzZSgpLG49Ii0iPT09dFswXT8tMToxLGk9W10sMDw9IistIi5pbmRleE9mKHRbMF0pJiYodD10LnNsaWNlKDEpKSwiLmluZiI9PT10PzE9PT1uP051bWJlci5QT1NJVElWRV9JTkZJTklUWTpOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk6Ii5uYW4iPT09dD9OYU46MDw9dC5pbmRleE9mKCI6Iik/KHQuc3BsaXQoIjoiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2kudW5zaGlmdChwYXJzZUZsb2F0KGUsMTApKX0pLHQ9MCxyPTEsaS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPWUqcixyKj02MH0pLG4qdCk6bipwYXJzZUZsb2F0KHQsMTApfWZ1bmN0aW9uIGEoZSx0KXtpZihpc05hTihlKSlzd2l0Y2godCl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiIubmFuIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi5OQU4iO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLk5hTiJ9ZWxzZSBpZihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk9PT1lKXN3aXRjaCh0KXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5pbmYiO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuSW5mIn1lbHNlIGlmKE51bWJlci5ORUdBVElWRV9JTkZJTklUWT09PWUpc3dpdGNoKHQpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLS5pbmYiO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLS5JTkYiO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLS5JbmYifWVsc2UgaWYocy5pc05lZ2F0aXZlWmVybyhlKSlyZXR1cm4iLTAuMCI7cmV0dXJuIGUudG9TdHJpbmcoMTApfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkmJigwIT09ZSUxfHxzLmlzTmVnYXRpdmVaZXJvKGUpKX12YXIgcz1lKCIuLi9jb21tb24iKSxsPWUoIi4uL3R5cGUiKSx1PW5ldyBSZWdFeHAoIl4oPzpbLStdPyg/OlswLTldWzAtOV9dKilcXC5bMC05X10qKD86W2VFXVstK11bMC05XSspP3xcXC5bMC05X10rKD86W2VFXVstK11bMC05XSspP3xbLStdP1swLTldWzAtOV9dKig/OjpbMC01XT9bMC05XSkrXFwuWzAtOV9dKnxbLStdP1xcLig/OmluZnxJbmZ8SU5GKXxcXC4oPzpuYW58TmFOfE5BTikpJCIpO3QuZXhwb3J0cz1uZXcgbCgidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cixjb25zdHJ1Y3Q6aSxwcmVkaWNhdGU6byxyZXByZXNlbnQ6YSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KX0seyIuLi9jb21tb24iOjIzLCIuLi90eXBlIjozNH1dLDM4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGU+PTQ4JiY1Nz49ZXx8ZT49NjUmJjcwPj1lfHxlPj05NyYmMTAyPj1lfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGU+PTQ4JiY1NT49ZX1mdW5jdGlvbiBhKGUpe3JldHVybiBlPj00OCYmNTc+PWV9ZnVuY3Rpb24gbyhlKXtpZihudWxsPT09ZSlyZXR1cm4hMTt2YXIgdCxuPWUubGVuZ3RoLG89MCxzPSExO2lmKCFuKXJldHVybiExO2lmKHQ9ZVtvXSwoIi0iPT09dHx8IisiPT09dCkmJih0PWVbKytvXSksIjAiPT09dCl7aWYobysxPT09bilyZXR1cm4hMDtpZih0PWVbKytvXSwiYiI9PT10KXtmb3IobysrO24+bztvKyspaWYodD1lW29dLCJfIiE9PXQpe2lmKCIwIiE9PXQmJiIxIiE9PXQpcmV0dXJuITE7cz0hMH1yZXR1cm4gc31pZigieCI9PT10KXtmb3IobysrO24+bztvKyspaWYodD1lW29dLCJfIiE9PXQpe2lmKCFyKGUuY2hhckNvZGVBdChvKSkpcmV0dXJuITE7cz0hMH1yZXR1cm4gc31mb3IoO24+bztvKyspaWYodD1lW29dLCJfIiE9PXQpe2lmKCFpKGUuY2hhckNvZGVBdChvKSkpcmV0dXJuITE7cz0hMH1yZXR1cm4gc31mb3IoO24+bztvKyspaWYodD1lW29dLCJfIiE9PXQpe2lmKCI6Ij09PXQpYnJlYWs7aWYoIWEoZS5jaGFyQ29kZUF0KG8pKSlyZXR1cm4hMTtzPSEwfXJldHVybiBzPyI6IiE9PXQ/ITA6L14oOlswLTVdP1swLTldKSskLy50ZXN0KGUuc2xpY2UobykpOiExfWZ1bmN0aW9uIHMoZSl7dmFyIHQsbixyPWUsaT0xLGE9W107cmV0dXJuLTEhPT1yLmluZGV4T2YoIl8iKSYmKHI9ci5yZXBsYWNlKC9fL2csIiIpKSx0PXJbMF0sKCItIj09PXR8fCIrIj09PXQpJiYoIi0iPT09dCYmKGk9LTEpLHI9ci5zbGljZSgxKSx0PXJbMF0pLCIwIj09PXI/MDoiMCI9PT10PyJiIj09PXJbMV0/aSpwYXJzZUludChyLnNsaWNlKDIpLDIpOiJ4Ij09PXJbMV0/aSpwYXJzZUludChyLDE2KTppKnBhcnNlSW50KHIsOCk6LTEhPT1yLmluZGV4T2YoIjoiKT8oci5zcGxpdCgiOiIpLmZvckVhY2goZnVuY3Rpb24oZSl7YS51bnNoaWZ0KHBhcnNlSW50KGUsMTApKX0pLHI9MCxuPTEsYS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IrPWUqbixuKj02MH0pLGkqcik6aSpwYXJzZUludChyLDEwKX1mdW5jdGlvbiBsKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpJiYwPT09ZSUxJiYhdS5pc05lZ2F0aXZlWmVybyhlKX12YXIgdT1lKCIuLi9jb21tb24iKSxjPWUoIi4uL3R5cGUiKTt0LmV4cG9ydHM9bmV3IGMoInRhZzp5YW1sLm9yZywyMDAyOmludCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpvLGNvbnN0cnVjdDpzLHByZWRpY2F0ZTpsLHJlcHJlc2VudDp7YmluYXJ5OmZ1bmN0aW9uKGUpe3JldHVybiIwYiIrZS50b1N0cmluZygyKX0sb2N0YWw6ZnVuY3Rpb24oZSl7cmV0dXJuIjAiK2UudG9TdHJpbmcoOCl9LGRlY2ltYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoMTApfSxoZXhhZGVjaW1hbDpmdW5jdGlvbihlKXtyZXR1cm4iMHgiK2UudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9fSxkZWZhdWx0U3R5bGU6ImRlY2ltYWwiLHN0eWxlQWxpYXNlczp7YmluYXJ5OlsyLCJiaW4iXSxvY3RhbDpbOCwib2N0Il0sZGVjaW1hbDpbMTAsImRlYyJdLGhleGFkZWNpbWFsOlsxNiwiaGV4Il19fSl9LHsiLi4vY29tbW9uIjoyMywiLi4vdHlwZSI6MzR9XSwzOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lKXJldHVybiExO3RyeXt2YXIgdD0iKCIrZSsiKSIsbj1zLnBhcnNlKHQse3JhbmdlOiEwfSk7cmV0dXJuIlByb2dyYW0iIT09bi50eXBlfHwxIT09bi5ib2R5Lmxlbmd0aHx8IkV4cHJlc3Npb25TdGF0ZW1lbnQiIT09bi5ib2R5WzBdLnR5cGV8fCJGdW5jdGlvbkV4cHJlc3Npb24iIT09bi5ib2R5WzBdLmV4cHJlc3Npb24udHlwZT8hMTohMH1jYXRjaChyKXtyZXR1cm4hMX19ZnVuY3Rpb24gaShlKXt2YXIgdCxuPSIoIitlKyIpIixyPXMucGFyc2Uobix7cmFuZ2U6ITB9KSxpPVtdO2lmKCJQcm9ncmFtIiE9PXIudHlwZXx8MSE9PXIuYm9keS5sZW5ndGh8fCJFeHByZXNzaW9uU3RhdGVtZW50IiE9PXIuYm9keVswXS50eXBlfHwiRnVuY3Rpb25FeHByZXNzaW9uIiE9PXIuYm9keVswXS5leHByZXNzaW9uLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gcmVzb2x2ZSBmdW5jdGlvbiIpO3JldHVybiByLmJvZHlbMF0uZXhwcmVzc2lvbi5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihlKXtpLnB1c2goZS5uYW1lKX0pLHQ9ci5ib2R5WzBdLmV4cHJlc3Npb24uYm9keS5yYW5nZSxuZXcgRnVuY3Rpb24oaSxuLnNsaWNlKHRbMF0rMSx0WzFdLTEpKX1mdW5jdGlvbiBhKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfXZhciBzO3RyeXtzPWUoImVzcHJpbWEiKX1jYXRjaChsKXsidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHM9d2luZG93LmVzcHJpbWEpfXZhciB1PWUoIi4uLy4uL3R5cGUiKTt0LmV4cG9ydHM9bmV3IHUoInRhZzp5YW1sLm9yZywyMDAyOmpzL2Z1bmN0aW9uIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnIsY29uc3RydWN0OmkscHJlZGljYXRlOm8scmVwcmVzZW50OmF9KX0seyIuLi8uLi90eXBlIjozNCxlc3ByaW1hOjUxfV0sNDA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihudWxsPT09ZSlyZXR1cm4hMTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuITE7dmFyIHQ9ZSxuPS9cLyhbZ2ltXSopJC8uZXhlYyhlKSxyPSIiO2lmKCIvIj09PXRbMF0pe2lmKG4mJihyPW5bMV0pLHIubGVuZ3RoPjMpcmV0dXJuITE7aWYoIi8iIT09dFt0Lmxlbmd0aC1yLmxlbmd0aC0xXSlyZXR1cm4hMTt0PXQuc2xpY2UoMSx0Lmxlbmd0aC1yLmxlbmd0aC0xKX10cnl7bmV3IFJlZ0V4cCh0LHIpO3JldHVybiEwfWNhdGNoKGkpe3JldHVybiExfX1mdW5jdGlvbiBpKGUpe3ZhciB0PWUsbj0vXC8oW2dpbV0qKSQvLmV4ZWMoZSkscj0iIjtyZXR1cm4iLyI9PT10WzBdJiYobiYmKHI9blsxXSksdD10LnNsaWNlKDEsdC5sZW5ndGgtci5sZW5ndGgtMSkpLG5ldyBSZWdFeHAodCxyKX1mdW5jdGlvbiBhKGUpe3ZhciB0PSIvIitlLnNvdXJjZSsiLyI7cmV0dXJuIGUuZ2xvYmFsJiYodCs9ImciKSxlLm11bHRpbGluZSYmKHQrPSJtIiksZS5pZ25vcmVDYXNlJiYodCs9ImkiKSx0fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9dmFyIHM9ZSgiLi4vLi4vdHlwZSIpO3QuZXhwb3J0cz1uZXcgcygidGFnOnlhbWwub3JnLDIwMDI6anMvcmVnZXhwIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnIsY29uc3RydWN0OmkscHJlZGljYXRlOm8scmVwcmVzZW50OmF9KX0seyIuLi8uLi90eXBlIjozNH1dLDQxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4hMH1mdW5jdGlvbiBpKCl7cmV0dXJuIHZvaWQgMH1mdW5jdGlvbiBhKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gbyhlKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGV9dmFyIHM9ZSgiLi4vLi4vdHlwZSIpO3QuZXhwb3J0cz1uZXcgcygidGFnOnlhbWwub3JnLDIwMDI6anMvdW5kZWZpbmVkIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnIsY29uc3RydWN0OmkscHJlZGljYXRlOm8scmVwcmVzZW50OmF9KX0seyIuLi8uLi90eXBlIjozNH1dLDQyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uL3R5cGUiKTt0LmV4cG9ydHM9bmV3IHIoInRhZzp5YW1sLm9yZywyMDAyOm1hcCIse2tpbmQ6Im1hcHBpbmciLGNvbnN0cnVjdDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWU/ZTp7fX19KX0seyIuLi90eXBlIjozNH1dLDQzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIjw8Ij09PWV8fG51bGw9PT1lfXZhciBpPWUoIi4uL3R5cGUiKTt0LmV4cG9ydHM9bmV3IGkoInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnJ9KX0seyIuLi90eXBlIjozNH1dLDQ0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITA7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIDE9PT10JiYifiI9PT1lfHw0PT09dCYmKCJudWxsIj09PWV8fCJOdWxsIj09PWV8fCJOVUxMIj09PWUpfWZ1bmN0aW9uIGkoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBhKGUpe3JldHVybiBudWxsPT09ZX12YXIgbz1lKCIuLi90eXBlIik7dC5leHBvcnRzPW5ldyBvKCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnIsY29uc3RydWN0OmkscHJlZGljYXRlOmEscmVwcmVzZW50OntjYW5vbmljYWw6ZnVuY3Rpb24oKXtyZXR1cm4ifiJ9LGxvd2VyY2FzZTpmdW5jdGlvbigpe3JldHVybiJudWxsIn0sdXBwZXJjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIk5VTEwifSxjYW1lbGNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4iTnVsbCJ9fSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KX0seyIuLi90eXBlIjozNH1dLDQ1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUpcmV0dXJuITA7dmFyIHQsbixyLGksYSxsPVtdLHU9ZTtmb3IodD0wLG49dS5sZW5ndGg7bj50O3QrPTEpe2lmKHI9dVt0XSxhPSExLCJbb2JqZWN0IE9iamVjdF0iIT09cy5jYWxsKHIpKXJldHVybiExO2ZvcihpIGluIHIpaWYoby5jYWxsKHIsaSkpe2lmKGEpcmV0dXJuITE7YT0hMH1pZighYSlyZXR1cm4hMTtpZigtMSE9PWwuaW5kZXhPZihpKSlyZXR1cm4hMTtsLnB1c2goaSl9cmV0dXJuITB9ZnVuY3Rpb24gaShlKXtyZXR1cm4gbnVsbCE9PWU/ZTpbXX12YXIgYT1lKCIuLi90eXBlIiksbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt0LmV4cG9ydHM9bmV3IGEoInRhZzp5YW1sLm9yZywyMDAyOm9tYXAiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTpyLGNvbnN0cnVjdDppfSl9LHsiLi4vdHlwZSI6MzR9XSw0NjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lKXJldHVybiEwO3ZhciB0LG4scixpLGEscz1lO2ZvcihhPW5ldyBBcnJheShzLmxlbmd0aCksdD0wLG49cy5sZW5ndGg7bj50O3QrPTEpe2lmKHI9c1t0XSwiW29iamVjdCBPYmplY3RdIiE9PW8uY2FsbChyKSlyZXR1cm4hMTtpZihpPU9iamVjdC5rZXlzKHIpLDEhPT1pLmxlbmd0aClyZXR1cm4hMTthW3RdPVtpWzBdLHJbaVswXV1dfXJldHVybiEwfWZ1bmN0aW9uIGkoZSl7aWYobnVsbD09PWUpcmV0dXJuW107dmFyIHQsbixyLGksYSxvPWU7Zm9yKGE9bmV3IEFycmF5KG8ubGVuZ3RoKSx0PTAsbj1vLmxlbmd0aDtuPnQ7dCs9MSlyPW9bdF0saT1PYmplY3Qua2V5cyhyKSxhW3RdPVtpWzBdLHJbaVswXV1dO3JldHVybiBhfXZhciBhPWUoIi4uL3R5cGUiKSxvPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dC5leHBvcnRzPW5ldyBhKCJ0YWc6eWFtbC5vcmcsMjAwMjpwYWlycyIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOnIsY29uc3RydWN0Oml9KX0seyIuLi90eXBlIjozNH1dLDQ3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uL3R5cGUiKTt0LmV4cG9ydHM9bmV3IHIoInRhZzp5YW1sLm9yZywyMDAyOnNlcSIse2tpbmQ6InNlcXVlbmNlIixjb25zdHJ1Y3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lP2U6W119fSl9LHsiLi4vdHlwZSI6MzR9XSw0ODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lKXJldHVybiEwO3ZhciB0LG49ZTtmb3IodCBpbiBuKWlmKG8uY2FsbChuLHQpJiZudWxsIT09blt0XSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBpKGUpe3JldHVybiBudWxsIT09ZT9lOnt9fXZhciBhPWUoIi4uL3R5cGUiKSxvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPW5ldyBhKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXQiLHtraW5kOiJtYXBwaW5nIixyZXNvbHZlOnIsY29uc3RydWN0Oml9KX0seyIuLi90eXBlIjozNH1dLDQ5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uL3R5cGUiKTt0LmV4cG9ydHM9bmV3IHIoInRhZzp5YW1sLm9yZywyMDAyOnN0ciIse2tpbmQ6InNjYWxhciIsY29uc3RydWN0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZT9lOiIifX0pfSx7Ii4uL3R5cGUiOjM0fV0sNTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihudWxsPT09ZSlyZXR1cm4hMTt2YXIgdDtyZXR1cm4gdD1zLmV4ZWMoZSksbnVsbD09PXQ/ITE6ITB9ZnVuY3Rpb24gaShlKXt2YXIgdCxuLHIsaSxhLG8sbCx1LGMscCxmPTAsaD1udWxsO2lmKHQ9cy5leGVjKGUpLG51bGw9PT10KXRocm93IG5ldyBFcnJvcigiRGF0ZSByZXNvbHZlIGVycm9yIik7aWYobj0rdFsxXSxyPSt0WzJdLTEsaT0rdFszXSwhdFs0XSlyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMobixyLGkpKTtpZihhPSt0WzRdLG89K3RbNV0sbD0rdFs2XSx0WzddKXtmb3IoZj10WzddLnNsaWNlKDAsMyk7Zi5sZW5ndGg8MzspZis9IjAiO2Y9K2Z9cmV0dXJuIHRbOV0mJih1PSt0WzEwXSxjPSsodFsxMV18fDApLGg9NmU0Kig2MCp1K2MpLCItIj09PXRbOV0mJihoPS1oKSkscD1uZXcgRGF0ZShEYXRlLlVUQyhuLHIsaSxhLG8sbCxmKSksaCYmcC5zZXRUaW1lKHAuZ2V0VGltZSgpLWgpLHB9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS50b0lTT1N0cmluZygpfXZhciBvPWUoIi4uL3R5cGUiKSxzPW5ldyBSZWdFeHAoIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldPyktKFswLTldWzAtOV0/KSg/Oig/OltUdF18WyBcXHRdKykoWzAtOV1bMC05XT8pOihbMC05XVswLTldKTooWzAtOV1bMC05XSkoPzpcXC4oWzAtOV0qKSk/KD86WyBcXHRdKihafChbLStdKShbMC05XVswLTldPykoPzo6KFswLTldWzAtOV0pKT8pKT8pPyQiKTt0LmV4cG9ydHM9bmV3IG8oInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpyLGNvbnN0cnVjdDppLGluc3RhbmNlT2Y6RGF0ZSxyZXByZXNlbnQ6YX0pfSx7Ii4uL3R5cGUiOjM0fV0sNTE6W2Z1bmN0aW9uKHQsbixyKXshZnVuY3Rpb24odCxuKXsidXNlIHN0cmljdCI7ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuYW1kP2UoWyJleHBvcnRzIl0sbik6bigidW5kZWZpbmVkIiE9dHlwZW9mIHI/cjp0LmVzcHJpbWE9e30pfSh0aGlzLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJBU1NFUlQ6ICIrdCl9ZnVuY3Rpb24gbihlKXtyZXR1cm4gZT49NDgmJjU3Pj1lfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIjAxMjM0NTY3ODlhYmNkZWZBQkNERUYiLmluZGV4T2YoZSk+PTB9ZnVuY3Rpb24gaShlKXtyZXR1cm4iMDEyMzQ1NjciLmluZGV4T2YoZSk+PTB9ZnVuY3Rpb24gYShlKXt2YXIgdD0iMCIhPT1lLG49IjAxMjM0NTY3Ii5pbmRleE9mKGUpO3JldHVybiBkbj5ubiYmaShadFtubl0pJiYodD0hMCxuPTgqbisiMDEyMzQ1NjciLmluZGV4T2YoWnRbbm4rK10pLCIwMTIzIi5pbmRleE9mKGUpPj0wJiZkbj5ubiYmaShadFtubl0pJiYobj04Km4rIjAxMjM0NTY3Ii5pbmRleE9mKFp0W25uKytdKSkpLHtjb2RlOm4sb2N0YWw6dH19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTE9PT1lfHwxMj09PWV8fDE2MD09PWV8fGU+PTU3NjAmJls1NzYwLDYxNTgsODE5Miw4MTkzLDgxOTQsODE5NSw4MTk2LDgxOTcsODE5OCw4MTk5LDgyMDAsODIwMSw4MjAyLDgyMzksODI4NywxMjI4OCw2NTI3OV0uaW5kZXhPZihlKT49MH1mdW5jdGlvbiBzKGUpe3JldHVybiAxMD09PWV8fDEzPT09ZXx8ODIzMj09PWV8fDgyMzM9PT1lfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIDM2PT09ZXx8OTU9PT1lfHxlPj02NSYmOTA+PWV8fGU+PTk3JiYxMjI+PWV8fDkyPT09ZXx8ZT49MTI4JiZHdC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIDM2PT09ZXx8OTU9PT1lfHxlPj02NSYmOTA+PWV8fGU+PTk3JiYxMjI+PWV8fGU+PTQ4JiY1Nz49ZXx8OTI9PT1lfHxlPj0xMjgmJkd0Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKX1mdW5jdGlvbiBjKGUpe3N3aXRjaChlKXtjYXNlImVudW0iOmNhc2UiZXhwb3J0IjpjYXNlImltcG9ydCI6Y2FzZSJzdXBlciI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gcChlKXtzd2l0Y2goZSl7Y2FzZSJpbXBsZW1lbnRzIjpjYXNlImludGVyZmFjZSI6Y2FzZSJwYWNrYWdlIjpjYXNlInByaXZhdGUiOmNhc2UicHJvdGVjdGVkIjpjYXNlInB1YmxpYyI6Y2FzZSJzdGF0aWMiOmNhc2UieWllbGQiOmNhc2UibGV0IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBmKGUpe3JldHVybiJldmFsIj09PWV8fCJhcmd1bWVudHMiPT09ZX1mdW5jdGlvbiBoKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAyOnJldHVybiJpZiI9PT1lfHwiaW4iPT09ZXx8ImRvIj09PWU7Y2FzZSAzOnJldHVybiJ2YXIiPT09ZXx8ImZvciI9PT1lfHwibmV3Ij09PWV8fCJ0cnkiPT09ZXx8ImxldCI9PT1lO2Nhc2UgNDpyZXR1cm4idGhpcyI9PT1lfHwiZWxzZSI9PT1lfHwiY2FzZSI9PT1lfHwidm9pZCI9PT1lfHwid2l0aCI9PT1lfHwiZW51bSI9PT1lO2Nhc2UgNTpyZXR1cm4id2hpbGUiPT09ZXx8ImJyZWFrIj09PWV8fCJjYXRjaCI9PT1lfHwidGhyb3ciPT09ZXx8ImNvbnN0Ij09PWV8fCJ5aWVsZCI9PT1lfHwiY2xhc3MiPT09ZXx8InN1cGVyIj09PWU7Y2FzZSA2OnJldHVybiJyZXR1cm4iPT09ZXx8InR5cGVvZiI9PT1lfHwiZGVsZXRlIj09PWV8fCJzd2l0Y2giPT09ZXx8ImV4cG9ydCI9PT1lfHwiaW1wb3J0Ij09PWU7Y2FzZSA3OnJldHVybiJkZWZhdWx0Ij09PWV8fCJmaW5hbGx5Ij09PWV8fCJleHRlbmRzIj09PWU7Y2FzZSA4OnJldHVybiJmdW5jdGlvbiI9PT1lfHwiY29udGludWUiPT09ZXx8ImRlYnVnZ2VyIj09PWU7Y2FzZSAxMDpyZXR1cm4iaW5zdGFuY2VvZiI9PT1lO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIGQoZSxuLHIsaSxhKXt2YXIgbzt0KCJudW1iZXIiPT10eXBlb2YgciwiQ29tbWVudCBtdXN0IGhhdmUgdmFsaWQgcG9zaXRpb24iKSxnbi5sYXN0Q29tbWVudFN0YXJ0PXIsbz17dHlwZTplLHZhbHVlOm59LHluLnJhbmdlJiYoby5yYW5nZT1bcixpXSkseW4ubG9jJiYoby5sb2M9YSkseW4uY29tbWVudHMucHVzaChvKSx5bi5hdHRhY2hDb21tZW50JiYoeW4ubGVhZGluZ0NvbW1lbnRzLnB1c2gobykseW4udHJhaWxpbmdDb21tZW50cy5wdXNoKG8pKX1mdW5jdGlvbiBtKGUpe3ZhciB0LG4scixpO2Zvcih0PW5uLWUsbj17c3RhcnQ6e2xpbmU6cm4sY29sdW1uOm5uLWFuLWV9fTtkbj5ubjspaWYocj1adC5jaGFyQ29kZUF0KG5uKSwrK25uLHMocikpcmV0dXJuIG9uPSEwLHluLmNvbW1lbnRzJiYoaT1adC5zbGljZSh0K2Usbm4tMSksbi5lbmQ9e2xpbmU6cm4sY29sdW1uOm5uLWFuLTF9LGQoIkxpbmUiLGksdCxubi0xLG4pKSwxMz09PXImJjEwPT09WnQuY2hhckNvZGVBdChubikmJisrbm4sKytybix2b2lkKGFuPW5uKTt5bi5jb21tZW50cyYmKGk9WnQuc2xpY2UodCtlLG5uKSxuLmVuZD17bGluZTpybixjb2x1bW46bm4tYW59LGQoIkxpbmUiLGksdCxubixuKSl9ZnVuY3Rpb24gZygpe3ZhciBlLHQsbixyO2Zvcih5bi5jb21tZW50cyYmKGU9bm4tMix0PXtzdGFydDp7bGluZTpybixjb2x1bW46bm4tYW4tMn19KTtkbj5ubjspaWYobj1adC5jaGFyQ29kZUF0KG5uKSxzKG4pKTEzPT09biYmMTA9PT1adC5jaGFyQ29kZUF0KG5uKzEpJiYrK25uLG9uPSEwLCsrcm4sKytubixhbj1ubjtlbHNlIGlmKDQyPT09bil7aWYoNDc9PT1adC5jaGFyQ29kZUF0KG5uKzEpKXJldHVybisrbm4sKytubix2b2lkKHluLmNvbW1lbnRzJiYocj1adC5zbGljZShlKzIsbm4tMiksdC5lbmQ9e2xpbmU6cm4sY29sdW1uOm5uLWFufSxkKCJCbG9jayIscixlLG5uLHQpKSk7Kytubn1lbHNlKytubjt5bi5jb21tZW50cyYmKHQuZW5kPXtsaW5lOnJuLGNvbHVtbjpubi1hbn0scj1adC5zbGljZShlKzIsbm4pLGQoIkJsb2NrIixyLGUsbm4sdCkpLFooKX1mdW5jdGlvbiB5KCl7dmFyIGUsdDtmb3Iob249ITEsdD0wPT09bm47ZG4+bm47KWlmKGU9WnQuY2hhckNvZGVBdChubiksbyhlKSkrK25uO2Vsc2UgaWYocyhlKSlvbj0hMCwrK25uLDEzPT09ZSYmMTA9PT1adC5jaGFyQ29kZUF0KG5uKSYmKytubiwrK3JuLGFuPW5uLHQ9ITA7ZWxzZSBpZig0Nz09PWUpaWYoZT1adC5jaGFyQ29kZUF0KG5uKzEpLDQ3PT09ZSkrK25uLCsrbm4sbSgyKSx0PSEwO2Vsc2V7aWYoNDIhPT1lKWJyZWFrOysrbm4sKytubixnKCl9ZWxzZSBpZih0JiY0NT09PWUpe2lmKDQ1IT09WnQuY2hhckNvZGVBdChubisxKXx8NjIhPT1adC5jaGFyQ29kZUF0KG5uKzIpKWJyZWFrO25uKz0zLG0oMyl9ZWxzZXtpZig2MCE9PWUpYnJlYWs7aWYoIiEtLSIhPT1adC5zbGljZShubisxLG5uKzQpKWJyZWFrOysrbm4sKytubiwrK25uLCsrbm4sbSg0KX19ZnVuY3Rpb24gdihlKXt2YXIgdCxuLGksYT0wO2ZvcihuPSJ1Ij09PWU/NDoyLHQ9MDtuPnQ7Kyt0KXtpZighKGRuPm5uJiZyKFp0W25uXSkpKXJldHVybiIiO2k9WnRbbm4rK10sYT0xNiphKyIwMTIzNDU2Nzg5YWJjZGVmIi5pbmRleE9mKGkudG9Mb3dlckNhc2UoKSl9cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYSl9ZnVuY3Rpb24gYigpe3ZhciBlLHQsbixpO2ZvcihlPVp0W25uXSx0PTAsIn0iPT09ZSYmRygpO2RuPm5uJiYoZT1adFtubisrXSxyKGUpKTspdD0xNip0KyIwMTIzNDU2Nzg5YWJjZGVmIi5pbmRleE9mKGUudG9Mb3dlckNhc2UoKSk7cmV0dXJuKHQ+MTExNDExMXx8In0iIT09ZSkmJkcoKSw2NTUzNT49dD9TdHJpbmcuZnJvbUNoYXJDb2RlKHQpOihuPSh0LTY1NTM2Pj4xMCkrNTUyOTYsaT0odC02NTUzNiYxMDIzKSs1NjMyMCxTdHJpbmcuZnJvbUNoYXJDb2RlKG4saSkpfWZ1bmN0aW9uIHcoKXt2YXIgZSx0O2ZvcihlPVp0LmNoYXJDb2RlQXQobm4rKyksdD1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpLDkyPT09ZSYmKDExNyE9PVp0LmNoYXJDb2RlQXQobm4pJiZHKCksKytubixlPXYoInUiKSxlJiYiXFwiIT09ZSYmbChlLmNoYXJDb2RlQXQoMCkpfHxHKCksdD1lKTtkbj5ubiYmKGU9WnQuY2hhckNvZGVBdChubiksdShlKSk7KSsrbm4sdCs9U3RyaW5nLmZyb21DaGFyQ29kZShlKSw5Mj09PWUmJih0PXQuc3Vic3RyKDAsdC5sZW5ndGgtMSksMTE3IT09WnQuY2hhckNvZGVBdChubikmJkcoKSwrK25uLGU9digidSIpLGUmJiJcXCIhPT1lJiZ1KGUuY2hhckNvZGVBdCgwKSl8fEcoKSx0Kz1lKTtyZXR1cm4gdH1mdW5jdGlvbiB4KCl7dmFyIGUsdDtmb3IoZT1ubisrO2RuPm5uOyl7aWYodD1adC5jaGFyQ29kZUF0KG5uKSw5Mj09PXQpcmV0dXJuIG5uPWUsdygpO2lmKCF1KHQpKWJyZWFrOysrbm59cmV0dXJuIFp0LnNsaWNlKGUsbm4pfWZ1bmN0aW9uIFMoKXt2YXIgZSx0LG47cmV0dXJuIGU9bm4sdD05Mj09PVp0LmNoYXJDb2RlQXQobm4pP3coKTp4KCksbj0xPT09dC5sZW5ndGg/V3QuSWRlbnRpZmllcjpoKHQpP1d0LktleXdvcmQ6Im51bGwiPT09dD9XdC5OdWxsTGl0ZXJhbDoidHJ1ZSI9PT10fHwiZmFsc2UiPT09dD9XdC5Cb29sZWFuTGl0ZXJhbDpXdC5JZGVudGlmaWVyLHt0eXBlOm4sdmFsdWU6dCxsaW5lTnVtYmVyOnJuLGxpbmVTdGFydDphbixzdGFydDplLGVuZDpubn19ZnVuY3Rpb24gQSgpe3ZhciBlLHQ7c3dpdGNoKGU9e3R5cGU6V3QuUHVuY3R1YXRvcix2YWx1ZToiIixsaW5lTnVtYmVyOnJuLGxpbmVTdGFydDphbixzdGFydDpubixlbmQ6bm59LHQ9WnRbbm5dKXtjYXNlIigiOnluLnRva2VuaXplJiYoeW4ub3BlblBhcmVuVG9rZW49eW4udG9rZW5zLmxlbmd0aCksKytubjticmVhaztjYXNlInsiOnluLnRva2VuaXplJiYoeW4ub3BlbkN1cmx5VG9rZW49eW4udG9rZW5zLmxlbmd0aCksZ24uY3VybHlTdGFjay5wdXNoKCJ7IiksKytubjticmVhaztjYXNlIi4iOisrbm4sIi4iPT09WnRbbm5dJiYiLiI9PT1adFtubisxXSYmKG5uKz0yLHQ9Ii4uLiIpO2JyZWFrO2Nhc2UifSI6Kytubixnbi5jdXJseVN0YWNrLnBvcCgpO2JyZWFrO2Nhc2UiKSI6Y2FzZSI7IjpjYXNlIiwiOmNhc2UiWyI6Y2FzZSJdIjpjYXNlIjoiOmNhc2UiPyI6Y2FzZSJ+IjorK25uO2JyZWFrO2RlZmF1bHQ6dD1adC5zdWJzdHIobm4sNCksIj4+Pj0iPT09dD9ubis9NDoodD10LnN1YnN0cigwLDMpLCI9PT0iPT09dHx8IiE9PSI9PT10fHwiPj4+Ij09PXR8fCI8PD0iPT09dHx8Ij4+PSI9PT10P25uKz0zOih0PXQuc3Vic3RyKDAsMiksIiYmIj09PXR8fCJ8fCI9PT10fHwiPT0iPT09dHx8IiE9Ij09PXR8fCIrPSI9PT10fHwiLT0iPT09dHx8Iio9Ij09PXR8fCIvPSI9PT10fHwiKysiPT09dHx8Ii0tIj09PXR8fCI8PCI9PT10fHwiPj4iPT09dHx8IiY9Ij09PXR8fCJ8PSI9PT10fHwiXj0iPT09dHx8IiU9Ij09PXR8fCI8PSI9PT10fHwiPj0iPT09dHx8Ij0+Ij09PXQ/bm4rPTI6KHQ9WnRbbm5dLCI8Pj0hKy0qJSZ8Xi8iLmluZGV4T2YodCk+PTAmJisrbm4pKSl9cmV0dXJuIG5uPT09ZS5zdGFydCYmRygpLGUuZW5kPW5uLGUudmFsdWU9dCxlfWZ1bmN0aW9uIEMoZSl7Zm9yKHZhciB0PSIiO2RuPm5uJiZyKFp0W25uXSk7KXQrPVp0W25uKytdO3JldHVybiAwPT09dC5sZW5ndGgmJkcoKSxsKFp0LmNoYXJDb2RlQXQobm4pKSYmRygpLHt0eXBlOld0Lk51bWVyaWNMaXRlcmFsLHZhbHVlOnBhcnNlSW50KCIweCIrdCwxNiksbGluZU51bWJlcjpybixsaW5lU3RhcnQ6YW4sc3RhcnQ6ZSxlbmQ6bm59fWZ1bmN0aW9uIEUoZSl7dmFyIHQscjtmb3Iocj0iIjtkbj5ubiYmKHQ9WnRbbm5dLCIwIj09PXR8fCIxIj09PXQpOylyKz1adFtubisrXTtyZXR1cm4gMD09PXIubGVuZ3RoJiZHKCksZG4+bm4mJih0PVp0LmNoYXJDb2RlQXQobm4pLChsKHQpfHxuKHQpKSYmRygpKSx7dHlwZTpXdC5OdW1lcmljTGl0ZXJhbCx2YWx1ZTpwYXJzZUludChyLDIpLGxpbmVOdW1iZXI6cm4sbGluZVN0YXJ0OmFuLHN0YXJ0OmUsZW5kOm5ufX1mdW5jdGlvbiBrKGUsdCl7dmFyIHIsYTtmb3IoaShlKT8oYT0hMCxyPSIwIitadFtubisrXSk6KGE9ITEsKytubixyPSIiKTtkbj5ubiYmaShadFtubl0pOylyKz1adFtubisrXTtyZXR1cm4gYXx8MCE9PXIubGVuZ3RofHxHKCksKGwoWnQuY2hhckNvZGVBdChubikpfHxuKFp0LmNoYXJDb2RlQXQobm4pKSkmJkcoKSx7dHlwZTpXdC5OdW1lcmljTGl0ZXJhbCx2YWx1ZTpwYXJzZUludChyLDgpLG9jdGFsOmEsbGluZU51bWJlcjpybixsaW5lU3RhcnQ6YW4sc3RhcnQ6dCxlbmQ6bm59fWZ1bmN0aW9uIE8oKXt2YXIgZSx0O2ZvcihlPW5uKzE7ZG4+ZTsrK2Upe2lmKHQ9WnRbZV0sIjgiPT09dHx8IjkiPT09dClyZXR1cm4hMTtpZighaSh0KSlyZXR1cm4hMH1yZXR1cm4hMH1mdW5jdGlvbiBqKCl7dmFyIGUscixhO2lmKGE9WnRbbm5dLHQobihhLmNoYXJDb2RlQXQoMCkpfHwiLiI9PT1hLCJOdW1lcmljIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgZGVjaW1hbCBkaWdpdCBvciBhIGRlY2ltYWwgcG9pbnQiKSxyPW5uLGU9IiIsIi4iIT09YSl7aWYoZT1adFtubisrXSxhPVp0W25uXSwiMCI9PT1lKXtpZigieCI9PT1hfHwiWCI9PT1hKXJldHVybisrbm4sQyhyKTtpZigiYiI9PT1hfHwiQiI9PT1hKXJldHVybisrbm4sRShyKTtpZigibyI9PT1hfHwiTyI9PT1hKXJldHVybiBrKGEscik7aWYoaShhKSYmTygpKXJldHVybiBrKGEscil9Zm9yKDtuKFp0LmNoYXJDb2RlQXQobm4pKTspZSs9WnRbbm4rK107YT1adFtubl19aWYoIi4iPT09YSl7Zm9yKGUrPVp0W25uKytdO24oWnQuY2hhckNvZGVBdChubikpOyllKz1adFtubisrXTthPVp0W25uXX1pZigiZSI9PT1hfHwiRSI9PT1hKWlmKGUrPVp0W25uKytdLGE9WnRbbm5dLCgiKyI9PT1hfHwiLSI9PT1hKSYmKGUrPVp0W25uKytdKSxuKFp0LmNoYXJDb2RlQXQobm4pKSlmb3IoO24oWnQuY2hhckNvZGVBdChubikpOyllKz1adFtubisrXTtlbHNlIEcoKTtyZXR1cm4gbChadC5jaGFyQ29kZUF0KG5uKSkmJkcoKSx7dHlwZTpXdC5OdW1lcmljTGl0ZXJhbCx2YWx1ZTpwYXJzZUZsb2F0KGUpLGxpbmVOdW1iZXI6cm4sbGluZVN0YXJ0OmFuLHN0YXJ0OnIsZW5kOm5ufX1mdW5jdGlvbiBUKCl7dmFyIGUsbixyLG8sbCx1PSIiLGM9ITE7Zm9yKGU9WnRbbm5dLHQoIiciPT09ZXx8JyInPT09ZSwiU3RyaW5nIGxpdGVyYWwgbXVzdCBzdGFydHMgd2l0aCBhIHF1b3RlIiksbj1ubiwrK25uO2RuPm5uOyl7aWYocj1adFtubisrXSxyPT09ZSl7ZT0iIjticmVha31pZigiXFwiPT09cilpZihyPVp0W25uKytdLHImJnMoci5jaGFyQ29kZUF0KDApKSkrK3JuLCJcciI9PT1yJiYiXG4iPT09WnRbbm5dJiYrK25uLGFuPW5uO2Vsc2Ugc3dpdGNoKHIpe2Nhc2UidSI6Y2FzZSJ4IjppZigieyI9PT1adFtubl0pKytubix1Kz1iKCk7ZWxzZXtpZihvPXYociksIW8pdGhyb3cgRygpO3UrPW99YnJlYWs7Y2FzZSJuIjp1Kz0iXG4iO2JyZWFrO2Nhc2UiciI6dSs9IlxyIjticmVhaztjYXNlInQiOnUrPSIJIjticmVhaztjYXNlImIiOnUrPSJcYiI7YnJlYWs7Y2FzZSJmIjp1Kz0iXGYiO2JyZWFrO2Nhc2UidiI6dSs9IgsiO2JyZWFrO2Nhc2UiOCI6Y2FzZSI5Ijp0aHJvdyBHKCk7ZGVmYXVsdDppKHIpPyhsPWEociksYz1sLm9jdGFsfHxjLHUrPVN0cmluZy5mcm9tQ2hhckNvZGUobC5jb2RlKSk6dSs9cn1lbHNle2lmKHMoci5jaGFyQ29kZUF0KDApKSlicmVhazt1Kz1yfX1yZXR1cm4iIiE9PWUmJkcoKSx7dHlwZTpXdC5TdHJpbmdMaXRlcmFsLHZhbHVlOnUsb2N0YWw6YyxsaW5lTnVtYmVyOnBuLGxpbmVTdGFydDpmbixzdGFydDpuLGVuZDpubn19ZnVuY3Rpb24gSSgpe3ZhciBlLHQscixhLG8sbCx1LGMscD0iIjtmb3IoYT0hMSxsPSExLHQ9bm4sbz0iYCI9PT1adFtubl0scj0yLCsrbm47ZG4+bm47KXtpZihlPVp0W25uKytdLCJgIj09PWUpe3I9MSxsPSEwLGE9ITA7YnJlYWt9aWYoIiQiPT09ZSl7aWYoInsiPT09WnRbbm5dKXtnbi5jdXJseVN0YWNrLnB1c2goIiR7IiksKytubixhPSEwO2JyZWFrfXArPWV9ZWxzZSBpZigiXFwiPT09ZSlpZihlPVp0W25uKytdLHMoZS5jaGFyQ29kZUF0KDApKSkrK3JuLCJcciI9PT1lJiYiXG4iPT09WnRbbm5dJiYrK25uLGFuPW5uO2Vsc2Ugc3dpdGNoKGUpe2Nhc2UibiI6cCs9IlxuIjticmVhaztjYXNlInIiOnArPSJcciI7YnJlYWs7Y2FzZSJ0IjpwKz0iCSI7YnJlYWs7Y2FzZSJ1IjpjYXNlIngiOiJ7Ij09PVp0W25uXT8oKytubixwKz1iKCkpOih1PW5uLGM9dihlKSxjP3ArPWM6KG5uPXUscCs9ZSkpO2JyZWFrO2Nhc2UiYiI6cCs9IlxiIjticmVhaztjYXNlImYiOnArPSJcZiI7YnJlYWs7Y2FzZSJ2IjpwKz0iCyI7YnJlYWs7ZGVmYXVsdDoiMCI9PT1lPyhuKFp0LmNoYXJDb2RlQXQobm4pKSYmSyhYdC5UZW1wbGF0ZU9jdGFsTGl0ZXJhbCkscCs9Ilx4MDAiKTppKGUpP0soWHQuVGVtcGxhdGVPY3RhbExpdGVyYWwpOnArPWV9ZWxzZSBzKGUuY2hhckNvZGVBdCgwKSk/KCsrcm4sIlxyIj09PWUmJiJcbiI9PT1adFtubl0mJisrbm4sYW49bm4scCs9IlxuIik6cCs9ZX1yZXR1cm4gYXx8RygpLG98fGduLmN1cmx5U3RhY2sucG9wKCkse3R5cGU6V3QuVGVtcGxhdGUsdmFsdWU6e2Nvb2tlZDpwLHJhdzpadC5zbGljZSh0KzEsbm4tcil9LGhlYWQ6byx0YWlsOmwsbGluZU51bWJlcjpybixsaW5lU3RhcnQ6YW4sc3RhcnQ6dCxlbmQ6bm59fWZ1bmN0aW9uIF8oZSx0KXt2YXIgbj1lO3QuaW5kZXhPZigidSIpPj0wJiYobj1uLnJlcGxhY2UoL1xcdVx7KFswLTlhLWZBLUZdKylcfS9nLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHBhcnNlSW50KHQsMTYpPD0xMTE0MTExPyJ4Ijp2b2lkIEcobnVsbCxYdC5JbnZhbGlkUmVnRXhwKX0pLnJlcGxhY2UoL1xcdShbYS1mQS1GMC05XXs0fSl8W1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csIngiKSk7dHJ5e1JlZ0V4cChuKX1jYXRjaChyKXtHKG51bGwsWHQuSW52YWxpZFJlZ0V4cCl9dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCl9Y2F0Y2goaSl7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEQoKXt2YXIgZSxuLHIsaSxhO2ZvcihlPVp0W25uXSx0KCIvIj09PWUsIlJlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoIiksbj1adFtubisrXSxyPSExLGk9ITE7ZG4+bm47KWlmKGU9WnRbbm4rK10sbis9ZSwiXFwiPT09ZSllPVp0W25uKytdLHMoZS5jaGFyQ29kZUF0KDApKSYmRyhudWxsLFh0LlVudGVybWluYXRlZFJlZ0V4cCksbis9ZTtlbHNlIGlmKHMoZS5jaGFyQ29kZUF0KDApKSlHKG51bGwsWHQuVW50ZXJtaW5hdGVkUmVnRXhwKTtlbHNlIGlmKHIpIl0iPT09ZSYmKHI9ITEpO2Vsc2V7aWYoIi8iPT09ZSl7aT0hMDticmVha30iWyI9PT1lJiYocj0hMCl9cmV0dXJuIGl8fEcobnVsbCxYdC5VbnRlcm1pbmF0ZWRSZWdFeHApLGE9bi5zdWJzdHIoMSxuLmxlbmd0aC0yKSx7dmFsdWU6YSxsaXRlcmFsOm59fWZ1bmN0aW9uIEwoKXt2YXIgZSx0LG4scjtmb3IodD0iIixuPSIiO2RuPm5uJiYoZT1adFtubl0sdShlLmNoYXJDb2RlQXQoMCkpKTspaWYoKytubiwiXFwiPT09ZSYmZG4+bm4paWYoZT1adFtubl0sInUiPT09ZSl7aWYoKytubixyPW5uLGU9digidSIpKWZvcihuKz1lLHQrPSJcXHUiO25uPnI7KytyKXQrPVp0W3JdO2Vsc2Ugbm49cixuKz0idSIsdCs9IlxcdSI7WigpfWVsc2UgdCs9IlxcIixaKCk7ZWxzZSBuKz1lLHQrPWU7cmV0dXJue3ZhbHVlOm4sbGl0ZXJhbDp0fX1mdW5jdGlvbiBQKCl7aG49ITA7dmFyIGUsdCxuLHI7cmV0dXJuIG1uPW51bGwseSgpLGU9bm4sdD1EKCksbj1MKCkscj1fKHQudmFsdWUsbi52YWx1ZSksaG49ITEseW4udG9rZW5pemU/e3R5cGU6V3QuUmVndWxhckV4cHJlc3Npb24sdmFsdWU6cixyZWdleDp7cGF0dGVybjp0LnZhbHVlLGZsYWdzOm4udmFsdWV9LGxpbmVOdW1iZXI6cm4sbGluZVN0YXJ0OmFuLHN0YXJ0OmUsZW5kOm5ufTp7bGl0ZXJhbDp0LmxpdGVyYWwrbi5saXRlcmFsLHZhbHVlOnIscmVnZXg6e3BhdHRlcm46dC52YWx1ZSxmbGFnczpuLnZhbHVlfSxzdGFydDplLGVuZDpubn19ZnVuY3Rpb24gTigpe3ZhciBlLHQsbixyO3JldHVybiB5KCksZT1ubix0PXtzdGFydDp7bGluZTpybixjb2x1bW46bm4tYW59fSxuPVAoKSx0LmVuZD17bGluZTpybixjb2x1bW46bm4tYW59LHluLnRva2VuaXplfHwoeW4udG9rZW5zLmxlbmd0aD4wJiYocj15bi50b2tlbnNbeW4udG9rZW5zLmxlbmd0aC0xXSxyLnJhbmdlWzBdPT09ZSYmIlB1bmN0dWF0b3IiPT09ci50eXBlJiYoIi8iPT09ci52YWx1ZXx8Ii89Ij09PXIudmFsdWUpJiZ5bi50b2tlbnMucG9wKCkpLHluLnRva2Vucy5wdXNoKHt0eXBlOiJSZWd1bGFyRXhwcmVzc2lvbiIsdmFsdWU6bi5saXRlcmFsLHJlZ2V4Om4ucmVnZXgscmFuZ2U6W2Usbm5dLGxvYzp0fSkpLG59ZnVuY3Rpb24gJChlKXtyZXR1cm4gZS50eXBlPT09V3QuSWRlbnRpZmllcnx8ZS50eXBlPT09V3QuS2V5d29yZHx8ZS50eXBlPT09V3QuQm9vbGVhbkxpdGVyYWx8fGUudHlwZT09PVd0Lk51bGxMaXRlcmFsfWZ1bmN0aW9uIE0oKXt2YXIgZSx0O2lmKGU9eW4udG9rZW5zW3luLnRva2Vucy5sZW5ndGgtMV0sIWUpcmV0dXJuIE4oKTtpZigiUHVuY3R1YXRvciI9PT1lLnR5cGUpe2lmKCJdIj09PWUudmFsdWUpcmV0dXJuIEEoKTtpZigiKSI9PT1lLnZhbHVlKXJldHVybiB0PXluLnRva2Vuc1t5bi5vcGVuUGFyZW5Ub2tlbi0xXSwhdHx8IktleXdvcmQiIT09dC50eXBlfHwiaWYiIT09dC52YWx1ZSYmIndoaWxlIiE9PXQudmFsdWUmJiJmb3IiIT09dC52YWx1ZSYmIndpdGgiIT09dC52YWx1ZT9BKCk6TigpO2lmKCJ9Ij09PWUudmFsdWUpe2lmKHluLnRva2Vuc1t5bi5vcGVuQ3VybHlUb2tlbi0zXSYmIktleXdvcmQiPT09eW4udG9rZW5zW3luLm9wZW5DdXJseVRva2VuLTNdLnR5cGUpe2lmKHQ9eW4udG9rZW5zW3luLm9wZW5DdXJseVRva2VuLTRdLCF0KXJldHVybiBBKCl9ZWxzZXtpZigheW4udG9rZW5zW3luLm9wZW5DdXJseVRva2VuLTRdfHwiS2V5d29yZCIhPT15bi50b2tlbnNbeW4ub3BlbkN1cmx5VG9rZW4tNF0udHlwZSlyZXR1cm4gQSgpO2lmKHQ9eW4udG9rZW5zW3luLm9wZW5DdXJseVRva2VuLTVdLCF0KXJldHVybiBOKCl9cmV0dXJuIFl0LmluZGV4T2YodC52YWx1ZSk+PTA/QSgpOk4oKX1yZXR1cm4gTigpfXJldHVybiJLZXl3b3JkIj09PWUudHlwZSYmInRoaXMiIT09ZS52YWx1ZT9OKCk6QSgpfWZ1bmN0aW9uIFIoKXt2YXIgZSx0O3JldHVybiBubj49ZG4/e3R5cGU6V3QuRU9GLGxpbmVOdW1iZXI6cm4sbGluZVN0YXJ0OmFuLHN0YXJ0Om5uLGVuZDpubn06KGU9WnQuY2hhckNvZGVBdChubiksbChlKT8odD1TKCksZW4mJnAodC52YWx1ZSkmJih0LnR5cGU9V3QuS2V5d29yZCksdCk6NDA9PT1lfHw0MT09PWV8fDU5PT09ZT9BKCk6Mzk9PT1lfHwzND09PWU/VCgpOjQ2PT09ZT9uKFp0LmNoYXJDb2RlQXQobm4rMSkpP2ooKTpBKCk6bihlKT9qKCk6eW4udG9rZW5pemUmJjQ3PT09ZT9NKCk6OTY9PT1lfHwxMjU9PT1lJiYiJHsiPT09Z24uY3VybHlTdGFja1tnbi5jdXJseVN0YWNrLmxlbmd0aC0xXT9JKCk6QSgpKX1mdW5jdGlvbiBGKCl7dmFyIGUsdCxuLHI7cmV0dXJuIGU9e3N0YXJ0OntsaW5lOnJuLGNvbHVtbjpubi1hbn19LHQ9UigpLGUuZW5kPXtsaW5lOnJuLGNvbHVtbjpubi1hbn0sdC50eXBlIT09V3QuRU9GJiYobj1adC5zbGljZSh0LnN0YXJ0LHQuZW5kKSxyPXt0eXBlOkp0W3QudHlwZV0sdmFsdWU6bixyYW5nZTpbdC5zdGFydCx0LmVuZF0sbG9jOmV9LHQucmVnZXgmJihyLnJlZ2V4PXtwYXR0ZXJuOnQucmVnZXgucGF0dGVybixmbGFnczp0LnJlZ2V4LmZsYWdzfSkseW4udG9rZW5zLnB1c2gocikpLHR9ZnVuY3Rpb24gVSgpe3ZhciBlO3JldHVybiBobj0hMCxzbj1ubixsbj1ybix1bj1hbix5KCksZT1tbixjbj1ubixwbj1ybixmbj1hbixtbj0idW5kZWZpbmVkIiE9dHlwZW9mIHluLnRva2Vucz9GKCk6UigpLGhuPSExLGV9ZnVuY3Rpb24gQigpe2huPSEwLHkoKSxzbj1ubixsbj1ybix1bj1hbixjbj1ubixwbj1ybixmbj1hbixtbj0idW5kZWZpbmVkIiE9dHlwZW9mIHluLnRva2Vucz9GKCk6UigpLGhuPSExfWZ1bmN0aW9uIHEoKXt0aGlzLmxpbmU9cG4sdGhpcy5jb2x1bW49Y24tZm59ZnVuY3Rpb24gSCgpe3RoaXMuc3RhcnQ9bmV3IHEsdGhpcy5lbmQ9bnVsbH1mdW5jdGlvbiB6KGUpe3RoaXMuc3RhcnQ9e2xpbmU6ZS5saW5lTnVtYmVyLGNvbHVtbjplLnN0YXJ0LWUubGluZVN0YXJ0fSx0aGlzLmVuZD1udWxsfWZ1bmN0aW9uIFYoKXt5bi5yYW5nZSYmKHRoaXMucmFuZ2U9W2NuLDBdKSx5bi5sb2MmJih0aGlzLmxvYz1uZXcgSCl9ZnVuY3Rpb24gVyhlKXt5bi5yYW5nZSYmKHRoaXMucmFuZ2U9W2Uuc3RhcnQsMF0pLHluLmxvYyYmKHRoaXMubG9jPW5ldyB6KGUpKX1mdW5jdGlvbiBKKGUpe3ZhciB0LG47Zm9yKHQ9MDt0PHluLmVycm9ycy5sZW5ndGg7dCsrKWlmKG49eW4uZXJyb3JzW3RdLG4uaW5kZXg9PT1lLmluZGV4JiZuLm1lc3NhZ2U9PT1lLm1lc3NhZ2UpcmV0dXJuO3luLmVycm9ycy5wdXNoKGUpfWZ1bmN0aW9uIFkoZSx0LG4pe3ZhciByPW5ldyBFcnJvcigiTGluZSAiK2UrIjogIituKTtyZXR1cm4gci5pbmRleD10LHIubGluZU51bWJlcj1lLHIuY29sdW1uPXQtKGhuP2FuOnVuKSsxLHIuZGVzY3JpcHRpb249bixyfWZ1bmN0aW9uIEsoZSl7dmFyIG4scjt0aHJvdyBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxyPWUucmVwbGFjZSgvJShcZCkvZyxmdW5jdGlvbihlLHIpe3JldHVybiB0KHI8bi5sZW5ndGgsIk1lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UiKSxuW3JdfSksWShsbixzbixyKX1mdW5jdGlvbiBRKGUpe3ZhciBuLHIsaTtpZihuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxyPWUucmVwbGFjZSgvJShcZCkvZyxmdW5jdGlvbihlLHIpe3JldHVybiB0KHI8bi5sZW5ndGgsIk1lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UiKSxuW3JdfSksaT1ZKHJuLHNuLHIpLCF5bi5lcnJvcnMpdGhyb3cgaTtKKGkpfWZ1bmN0aW9uIFgoZSx0KXt2YXIgbixyPXR8fFh0LlVuZXhwZWN0ZWRUb2tlbjtyZXR1cm4gZT8odHx8KHI9ZS50eXBlPT09V3QuRU9GP1h0LlVuZXhwZWN0ZWRFT1M6ZS50eXBlPT09V3QuSWRlbnRpZmllcj9YdC5VbmV4cGVjdGVkSWRlbnRpZmllcjplLnR5cGU9PT1XdC5OdW1lcmljTGl0ZXJhbD9YdC5VbmV4cGVjdGVkTnVtYmVyOmUudHlwZT09PVd0LlN0cmluZ0xpdGVyYWw/WHQuVW5leHBlY3RlZFN0cmluZzplLnR5cGU9PT1XdC5UZW1wbGF0ZT9YdC5VbmV4cGVjdGVkVGVtcGxhdGU6WHQuVW5leHBlY3RlZFRva2VuLGUudHlwZT09PVd0LktleXdvcmQmJihjKGUudmFsdWUpP3I9WHQuVW5leHBlY3RlZFJlc2VydmVkOmVuJiZwKGUudmFsdWUpJiYocj1YdC5TdHJpY3RSZXNlcnZlZFdvcmQpKSksbj1lLnR5cGU9PT1XdC5UZW1wbGF0ZT9lLnZhbHVlLnJhdzplLnZhbHVlKTpuPSJJTExFR0FMIixyPXIucmVwbGFjZSgiJTAiLG4pLGUmJiJudW1iZXIiPT10eXBlb2YgZS5saW5lTnVtYmVyP1koZS5saW5lTnVtYmVyLGUuc3RhcnQscik6WShobj9ybjpsbixobj9ubjpzbixyKX1mdW5jdGlvbiBHKGUsdCl7dGhyb3cgWChlLHQpfWZ1bmN0aW9uIFooZSx0KXt2YXIgbj1YKGUsdCk7aWYoIXluLmVycm9ycyl0aHJvdyBuO0oobil9ZnVuY3Rpb24gZWUoZSl7dmFyIHQ9VSgpOyh0LnR5cGUhPT1XdC5QdW5jdHVhdG9yfHx0LnZhbHVlIT09ZSkmJkcodCl9ZnVuY3Rpb24gdGUoKXt2YXIgZTt5bi5lcnJvcnM/KGU9bW4sZS50eXBlPT09V3QuUHVuY3R1YXRvciYmIiwiPT09ZS52YWx1ZT9VKCk6ZS50eXBlPT09V3QuUHVuY3R1YXRvciYmIjsiPT09ZS52YWx1ZT8oVSgpLFooZSkpOlooZSxYdC5VbmV4cGVjdGVkVG9rZW4pKTplZSgiLCIpfWZ1bmN0aW9uIG5lKGUpe3ZhciB0PVUoKTsodC50eXBlIT09V3QuS2V5d29yZHx8dC52YWx1ZSE9PWUpJiZHKHQpfWZ1bmN0aW9uIHJlKGUpe3JldHVybiBtbi50eXBlPT09V3QuUHVuY3R1YXRvciYmbW4udmFsdWU9PT1lfWZ1bmN0aW9uIGllKGUpe3JldHVybiBtbi50eXBlPT09V3QuS2V5d29yZCYmbW4udmFsdWU9PT1lfWZ1bmN0aW9uIGFlKGUpe3JldHVybiBtbi50eXBlPT09V3QuSWRlbnRpZmllciYmbW4udmFsdWU9PT1lfWZ1bmN0aW9uIG9lKCl7dmFyIGU7cmV0dXJuIG1uLnR5cGUhPT1XdC5QdW5jdHVhdG9yPyExOihlPW1uLnZhbHVlLCI9Ij09PWV8fCIqPSI9PT1lfHwiLz0iPT09ZXx8IiU9Ij09PWV8fCIrPSI9PT1lfHwiLT0iPT09ZXx8Ijw8PSI9PT1lfHwiPj49Ij09PWV8fCI+Pj49Ij09PWV8fCImPSI9PT1lfHwiXj0iPT09ZXx8Inw9Ij09PWUpfWZ1bmN0aW9uIHNlKCl7cmV0dXJuIDU5PT09WnQuY2hhckNvZGVBdChjbil8fHJlKCI7Iik/dm9pZCBVKCk6dm9pZChvbnx8KHNuPWNuLGxuPXBuLHVuPWZuLG1uLnR5cGU9PT1XdC5FT0Z8fHJlKCJ9Iil8fEcobW4pKSl9ZnVuY3Rpb24gbGUoZSl7dmFyIHQsbj12bixyPWJuLGk9d247cmV0dXJuIHZuPSEwLGJuPSEwLHduPW51bGwsdD1lKCksbnVsbCE9PXduJiZHKHduKSx2bj1uLGJuPXIsd249aSx0fWZ1bmN0aW9uIHVlKGUpe3ZhciB0LG49dm4scj1ibixpPXduOwpyZXR1cm4gdm49ITAsYm49ITAsd249bnVsbCx0PWUoKSx2bj12biYmbixibj1ibiYmcix3bj1pfHx3bix0fWZ1bmN0aW9uIGNlKCl7dmFyIGUsdCxuPW5ldyBWLHI9W107Zm9yKGVlKCJbIik7IXJlKCJdIik7KWlmKHJlKCIsIikpVSgpLHIucHVzaChudWxsKTtlbHNle2lmKHJlKCIuLi4iKSl7dD1uZXcgVixVKCksZT1RZSgpLHIucHVzaCh0LmZpbmlzaFJlc3RFbGVtZW50KGUpKTticmVha31yLnB1c2goZGUoKSkscmUoIl0iKXx8ZWUoIiwiKX1yZXR1cm4gZWUoIl0iKSxuLmZpbmlzaEFycmF5UGF0dGVybihyKX1mdW5jdGlvbiBwZSgpe3ZhciBlLHQsbj1uZXcgVixyPXJlKCJbIik7aWYobW4udHlwZT09PVd0LklkZW50aWZpZXIpe2lmKGU9UWUoKSxyZSgiPSIpKXJldHVybiBVKCksdD1WZSgpLG4uZmluaXNoUHJvcGVydHkoImluaXQiLGUsITEsbmV3IFcoZSkuZmluaXNoQXNzaWdubWVudFBhdHRlcm4oZSx0KSwhMSwhMSk7aWYoIXJlKCI6IikpcmV0dXJuIG4uZmluaXNoUHJvcGVydHkoImluaXQiLGUsITEsZSwhMSwhMCl9ZWxzZSBlPXZlKCk7cmV0dXJuIGVlKCI6IiksdD1kZSgpLG4uZmluaXNoUHJvcGVydHkoImluaXQiLGUscix0LCExLCExKX1mdW5jdGlvbiBmZSgpe3ZhciBlPW5ldyBWLHQ9W107Zm9yKGVlKCJ7Iik7IXJlKCJ9Iik7KXQucHVzaChwZSgpKSxyZSgifSIpfHxlZSgiLCIpO3JldHVybiBVKCksZS5maW5pc2hPYmplY3RQYXR0ZXJuKHQpfWZ1bmN0aW9uIGhlKCl7cmV0dXJuIG1uLnR5cGU9PT1XdC5JZGVudGlmaWVyP1FlKCk6cmUoIlsiKT9jZSgpOnJlKCJ7Iik/ZmUoKTp2b2lkIEcobW4pfWZ1bmN0aW9uIGRlKCl7dmFyIGUsdCxuPW1uO3JldHVybiBlPWhlKCkscmUoIj0iKSYmKFUoKSx0PWxlKFZlKSxlPW5ldyBXKG4pLmZpbmlzaEFzc2lnbm1lbnRQYXR0ZXJuKGUsdCkpLGV9ZnVuY3Rpb24gbWUoKXt2YXIgZSx0PVtdLG49bmV3IFY7Zm9yKGVlKCJbIik7IXJlKCJdIik7KXJlKCIsIik/KFUoKSx0LnB1c2gobnVsbCkpOnJlKCIuLi4iKT8oZT1uZXcgVixVKCksZS5maW5pc2hTcHJlYWRFbGVtZW50KHVlKFZlKSkscmUoIl0iKXx8KGJuPXZuPSExLGVlKCIsIikpLHQucHVzaChlKSk6KHQucHVzaCh1ZShWZSkpLHJlKCJdIil8fGVlKCIsIikpO3JldHVybiBVKCksbi5maW5pc2hBcnJheUV4cHJlc3Npb24odCl9ZnVuY3Rpb24gZ2UoZSx0KXt2YXIgbixyO3JldHVybiBibj12bj0hMSxuPWVuLHI9bGUoeHQpLGVuJiZ0LmZpcnN0UmVzdHJpY3RlZCYmWih0LmZpcnN0UmVzdHJpY3RlZCx0Lm1lc3NhZ2UpLGVuJiZ0LnN0cmljdGVkJiZaKHQuc3RyaWN0ZWQsdC5tZXNzYWdlKSxlbj1uLGUuZmluaXNoRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsdC5wYXJhbXMsdC5kZWZhdWx0cyxyKX1mdW5jdGlvbiB5ZSgpe3ZhciBlLHQsbj1uZXcgVjtyZXR1cm4gZT1DdCgpLHQ9Z2UobixlKX1mdW5jdGlvbiB2ZSgpe3ZhciBlLHQsbj1uZXcgVjtzd2l0Y2goZT1VKCksZS50eXBlKXtjYXNlIFd0LlN0cmluZ0xpdGVyYWw6Y2FzZSBXdC5OdW1lcmljTGl0ZXJhbDpyZXR1cm4gZW4mJmUub2N0YWwmJlooZSxYdC5TdHJpY3RPY3RhbExpdGVyYWwpLG4uZmluaXNoTGl0ZXJhbChlKTtjYXNlIFd0LklkZW50aWZpZXI6Y2FzZSBXdC5Cb29sZWFuTGl0ZXJhbDpjYXNlIFd0Lk51bGxMaXRlcmFsOmNhc2UgV3QuS2V5d29yZDpyZXR1cm4gbi5maW5pc2hJZGVudGlmaWVyKGUudmFsdWUpO2Nhc2UgV3QuUHVuY3R1YXRvcjppZigiWyI9PT1lLnZhbHVlKXJldHVybiB0PWxlKFZlKSxlZSgiXSIpLHR9RyhlKX1mdW5jdGlvbiBiZSgpe3N3aXRjaChtbi50eXBlKXtjYXNlIFd0LklkZW50aWZpZXI6Y2FzZSBXdC5TdHJpbmdMaXRlcmFsOmNhc2UgV3QuQm9vbGVhbkxpdGVyYWw6Y2FzZSBXdC5OdWxsTGl0ZXJhbDpjYXNlIFd0Lk51bWVyaWNMaXRlcmFsOmNhc2UgV3QuS2V5d29yZDpyZXR1cm4hMDtjYXNlIFd0LlB1bmN0dWF0b3I6cmV0dXJuIlsiPT09bW4udmFsdWV9cmV0dXJuITF9ZnVuY3Rpb24gd2UoZSx0LG4scil7dmFyIGksYSxvO2lmKGUudHlwZT09PVd0LklkZW50aWZpZXIpe2lmKCJnZXQiPT09ZS52YWx1ZSYmYmUoKSlyZXR1cm4gbj1yZSgiWyIpLHQ9dmUoKSxvPW5ldyBWLGVlKCIoIiksZWUoIikiKSxpPWdlKG8se3BhcmFtczpbXSxkZWZhdWx0czpbXSxzdHJpY3RlZDpudWxsLGZpcnN0UmVzdHJpY3RlZDpudWxsLG1lc3NhZ2U6bnVsbH0pLHIuZmluaXNoUHJvcGVydHkoImdldCIsdCxuLGksITEsITEpO2lmKCJzZXQiPT09ZS52YWx1ZSYmYmUoKSlyZXR1cm4gbj1yZSgiWyIpLHQ9dmUoKSxvPW5ldyBWLGVlKCIoIiksYT17cGFyYW1zOltdLGRlZmF1bHRDb3VudDowLGRlZmF1bHRzOltdLGZpcnN0UmVzdHJpY3RlZDpudWxsLHBhcmFtU2V0Ont9fSxyZSgiKSIpP1oobW4pOihBdChhKSwwPT09YS5kZWZhdWx0Q291bnQmJihhLmRlZmF1bHRzPVtdKSksZWUoIikiKSxpPWdlKG8sYSksci5maW5pc2hQcm9wZXJ0eSgic2V0Iix0LG4saSwhMSwhMSl9cmV0dXJuIHJlKCIoIik/KGk9eWUoKSxyLmZpbmlzaFByb3BlcnR5KCJpbml0Iix0LG4saSwhMCwhMSkpOm51bGx9ZnVuY3Rpb24geGUoZSx0LG4pe3Q9PT0hMSYmKGUudHlwZT09PUt0LklkZW50aWZpZXImJiJfX3Byb3RvX18iPT09ZS5uYW1lfHxlLnR5cGU9PT1LdC5MaXRlcmFsJiYiX19wcm90b19fIj09PWUudmFsdWUpJiYobi52YWx1ZT9RKFh0LkR1cGxpY2F0ZVByb3RvUHJvcGVydHkpOm4udmFsdWU9ITApfWZ1bmN0aW9uIFNlKGUpe3ZhciB0LG4scixpLGE9bW4sbz1uZXcgVjtyZXR1cm4gdD1yZSgiWyIpLG49dmUoKSwocj13ZShhLG4sdCxvKSk/KHhlKHIua2V5LHIuY29tcHV0ZWQsZSkscik6KHhlKG4sdCxlKSxyZSgiOiIpPyhVKCksaT11ZShWZSksby5maW5pc2hQcm9wZXJ0eSgiaW5pdCIsbix0LGksITEsITEpKTphLnR5cGU9PT1XdC5JZGVudGlmaWVyP3JlKCI9Iik/KHduPW1uLFUoKSxpPWxlKFZlKSxvLmZpbmlzaFByb3BlcnR5KCJpbml0IixuLHQsbmV3IFcoYSkuZmluaXNoQXNzaWdubWVudFBhdHRlcm4obixpKSwhMSwhMCkpOm8uZmluaXNoUHJvcGVydHkoImluaXQiLG4sdCxuLCExLCEwKTp2b2lkIEcobW4pKX1mdW5jdGlvbiBBZSgpe3ZhciBlPVtdLHQ9e3ZhbHVlOiExfSxuPW5ldyBWO2ZvcihlZSgieyIpOyFyZSgifSIpOyllLnB1c2goU2UodCkpLHJlKCJ9Iil8fHRlKCk7cmV0dXJuIGVlKCJ9Iiksbi5maW5pc2hPYmplY3RFeHByZXNzaW9uKGUpfWZ1bmN0aW9uIENlKGUpe3ZhciB0O3N3aXRjaChlLnR5cGUpe2Nhc2UgS3QuSWRlbnRpZmllcjpjYXNlIEt0Lk1lbWJlckV4cHJlc3Npb246Y2FzZSBLdC5SZXN0RWxlbWVudDpjYXNlIEt0LkFzc2lnbm1lbnRQYXR0ZXJuOmJyZWFrO2Nhc2UgS3QuU3ByZWFkRWxlbWVudDplLnR5cGU9S3QuUmVzdEVsZW1lbnQsQ2UoZS5hcmd1bWVudCk7YnJlYWs7Y2FzZSBLdC5BcnJheUV4cHJlc3Npb246Zm9yKGUudHlwZT1LdC5BcnJheVBhdHRlcm4sdD0wO3Q8ZS5lbGVtZW50cy5sZW5ndGg7dCsrKW51bGwhPT1lLmVsZW1lbnRzW3RdJiZDZShlLmVsZW1lbnRzW3RdKTticmVhaztjYXNlIEt0Lk9iamVjdEV4cHJlc3Npb246Zm9yKGUudHlwZT1LdC5PYmplY3RQYXR0ZXJuLHQ9MDt0PGUucHJvcGVydGllcy5sZW5ndGg7dCsrKUNlKGUucHJvcGVydGllc1t0XS52YWx1ZSk7YnJlYWs7Y2FzZSBLdC5Bc3NpZ25tZW50RXhwcmVzc2lvbjplLnR5cGU9S3QuQXNzaWdubWVudFBhdHRlcm4sQ2UoZS5sZWZ0KX19ZnVuY3Rpb24gRWUoZSl7dmFyIHQsbjtyZXR1cm4obW4udHlwZSE9PVd0LlRlbXBsYXRlfHxlLmhlYWQmJiFtbi5oZWFkKSYmRygpLHQ9bmV3IFYsbj1VKCksdC5maW5pc2hUZW1wbGF0ZUVsZW1lbnQoe3JhdzpuLnZhbHVlLnJhdyxjb29rZWQ6bi52YWx1ZS5jb29rZWR9LG4udGFpbCl9ZnVuY3Rpb24ga2UoKXt2YXIgZSx0LG4scj1uZXcgVjtmb3IoZT1FZSh7aGVhZDohMH0pLHQ9W2VdLG49W107IWUudGFpbDspbi5wdXNoKFdlKCkpLGU9RWUoe2hlYWQ6ITF9KSx0LnB1c2goZSk7cmV0dXJuIHIuZmluaXNoVGVtcGxhdGVMaXRlcmFsKHQsbil9ZnVuY3Rpb24gT2UoKXt2YXIgZSx0LG4scjtpZihlZSgiKCIpLHJlKCIpIikpcmV0dXJuIFUoKSxyZSgiPT4iKXx8ZWUoIj0+Iikse3R5cGU6UXQuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcixwYXJhbXM6W119O2lmKG49bW4scmUoIi4uLiIpKXJldHVybiBlPXJ0KCksZWUoIikiKSxyZSgiPT4iKXx8ZWUoIj0+Iikse3R5cGU6UXQuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcixwYXJhbXM6W2VdfTtpZih2bj0hMCxlPXVlKFZlKSxyZSgiLCIpKXtmb3IoYm49ITEsdD1bZV07ZG4+Y24mJnJlKCIsIik7KXtpZihVKCkscmUoIi4uLiIpKXtmb3Iodm58fEcobW4pLHQucHVzaChydCgpKSxlZSgiKSIpLHJlKCI9PiIpfHxlZSgiPT4iKSx2bj0hMSxyPTA7cjx0Lmxlbmd0aDtyKyspQ2UodFtyXSk7cmV0dXJue3R5cGU6UXQuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcixwYXJhbXM6dH19dC5wdXNoKHVlKFZlKSl9ZT1uZXcgVyhuKS5maW5pc2hTZXF1ZW5jZUV4cHJlc3Npb24odCl9aWYoZWUoIikiKSxyZSgiPT4iKSl7aWYodm58fEcobW4pLGUudHlwZT09PUt0LlNlcXVlbmNlRXhwcmVzc2lvbilmb3Iocj0wO3I8ZS5leHByZXNzaW9ucy5sZW5ndGg7cisrKUNlKGUuZXhwcmVzc2lvbnNbcl0pO2Vsc2UgQ2UoZSk7ZT17dHlwZTpRdC5BcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyLHBhcmFtczplLnR5cGU9PT1LdC5TZXF1ZW5jZUV4cHJlc3Npb24/ZS5leHByZXNzaW9uczpbZV19fXJldHVybiB2bj0hMSxlfWZ1bmN0aW9uIGplKCl7dmFyIGUsdCxuLHI7aWYocmUoIigiKSlyZXR1cm4gdm49ITEsdWUoT2UpO2lmKHJlKCJbIikpcmV0dXJuIHVlKG1lKTtpZihyZSgieyIpKXJldHVybiB1ZShBZSk7aWYoZT1tbi50eXBlLHI9bmV3IFYsZT09PVd0LklkZW50aWZpZXIpbj1yLmZpbmlzaElkZW50aWZpZXIoVSgpLnZhbHVlKTtlbHNlIGlmKGU9PT1XdC5TdHJpbmdMaXRlcmFsfHxlPT09V3QuTnVtZXJpY0xpdGVyYWwpYm49dm49ITEsZW4mJm1uLm9jdGFsJiZaKG1uLFh0LlN0cmljdE9jdGFsTGl0ZXJhbCksbj1yLmZpbmlzaExpdGVyYWwoVSgpKTtlbHNlIGlmKGU9PT1XdC5LZXl3b3JkKXtpZihibj12bj0hMSxpZSgiZnVuY3Rpb24iKSlyZXR1cm4ga3QoKTtpZihpZSgidGhpcyIpKXJldHVybiBVKCksci5maW5pc2hUaGlzRXhwcmVzc2lvbigpO2lmKGllKCJjbGFzcyIpKXJldHVybiBUdCgpO0coVSgpKX1lbHNlIGU9PT1XdC5Cb29sZWFuTGl0ZXJhbD8oYm49dm49ITEsdD1VKCksdC52YWx1ZT0idHJ1ZSI9PT10LnZhbHVlLG49ci5maW5pc2hMaXRlcmFsKHQpKTplPT09V3QuTnVsbExpdGVyYWw/KGJuPXZuPSExLHQ9VSgpLHQudmFsdWU9bnVsbCxuPXIuZmluaXNoTGl0ZXJhbCh0KSk6cmUoIi8iKXx8cmUoIi89Iik/KGJuPXZuPSExLG5uPWNuLHQ9InVuZGVmaW5lZCIhPXR5cGVvZiB5bi50b2tlbnM/TigpOlAoKSxVKCksbj1yLmZpbmlzaExpdGVyYWwodCkpOmU9PT1XdC5UZW1wbGF0ZT9uPWtlKCk6RyhVKCkpO3JldHVybiBufWZ1bmN0aW9uIFRlKCl7dmFyIGU9W107aWYoZWUoIigiKSwhcmUoIikiKSlmb3IoO2RuPmNuJiYoZS5wdXNoKGxlKFZlKSksIXJlKCIpIikpOyl0ZSgpO3JldHVybiBlZSgiKSIpLGV9ZnVuY3Rpb24gSWUoKXt2YXIgZSx0PW5ldyBWO3JldHVybiBlPVUoKSwkKGUpfHxHKGUpLHQuZmluaXNoSWRlbnRpZmllcihlLnZhbHVlKX1mdW5jdGlvbiBfZSgpe3JldHVybiBlZSgiLiIpLEllKCl9ZnVuY3Rpb24gRGUoKXt2YXIgZTtyZXR1cm4gZWUoIlsiKSxlPWxlKFdlKSxlZSgiXSIpLGV9ZnVuY3Rpb24gTGUoKXt2YXIgZSx0LG49bmV3IFY7cmV0dXJuIG5lKCJuZXciKSxlPWxlKE5lKSx0PXJlKCIoIik/VGUoKTpbXSxibj12bj0hMSxuLmZpbmlzaE5ld0V4cHJlc3Npb24oZSx0KX1mdW5jdGlvbiBQZSgpe3ZhciBlLHQsbixyLGksYT1nbi5hbGxvd0luO2ZvcihpPW1uLGduLmFsbG93SW49ITAsaWUoInN1cGVyIikmJmduLmluRnVuY3Rpb25Cb2R5Pyh0PW5ldyBWLFUoKSx0PXQuZmluaXNoU3VwZXIoKSxyZSgiKCIpfHxyZSgiLiIpfHxyZSgiWyIpfHxHKG1uKSk6dD11ZShpZSgibmV3Iik/TGU6amUpOzspaWYocmUoIi4iKSl2bj0hMSxibj0hMCxyPV9lKCksdD1uZXcgVyhpKS5maW5pc2hNZW1iZXJFeHByZXNzaW9uKCIuIix0LHIpO2Vsc2UgaWYocmUoIigiKSl2bj0hMSxibj0hMSxuPVRlKCksdD1uZXcgVyhpKS5maW5pc2hDYWxsRXhwcmVzc2lvbih0LG4pO2Vsc2UgaWYocmUoIlsiKSl2bj0hMSxibj0hMCxyPURlKCksdD1uZXcgVyhpKS5maW5pc2hNZW1iZXJFeHByZXNzaW9uKCJbIix0LHIpO2Vsc2V7aWYobW4udHlwZSE9PVd0LlRlbXBsYXRlfHwhbW4uaGVhZClicmVhaztlPWtlKCksdD1uZXcgVyhpKS5maW5pc2hUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24odCxlKX1yZXR1cm4gZ24uYWxsb3dJbj1hLHR9ZnVuY3Rpb24gTmUoKXt2YXIgZSxuLHIsaTtmb3IodChnbi5hbGxvd0luLCJjYWxsZWUgb2YgbmV3IGV4cHJlc3Npb24gYWx3YXlzIGFsbG93IGluIGtleXdvcmQuIiksaT1tbixpZSgic3VwZXIiKSYmZ24uaW5GdW5jdGlvbkJvZHk/KG49bmV3IFYsVSgpLG49bi5maW5pc2hTdXBlcigpLHJlKCJbIil8fHJlKCIuIil8fEcobW4pKTpuPXVlKGllKCJuZXciKT9MZTpqZSk7OylpZihyZSgiWyIpKXZuPSExLGJuPSEwLHI9RGUoKSxuPW5ldyBXKGkpLmZpbmlzaE1lbWJlckV4cHJlc3Npb24oIlsiLG4scik7ZWxzZSBpZihyZSgiLiIpKXZuPSExLGJuPSEwLHI9X2UoKSxuPW5ldyBXKGkpLmZpbmlzaE1lbWJlckV4cHJlc3Npb24oIi4iLG4scik7ZWxzZXtpZihtbi50eXBlIT09V3QuVGVtcGxhdGV8fCFtbi5oZWFkKWJyZWFrO2U9a2UoKSxuPW5ldyBXKGkpLmZpbmlzaFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihuLGUpfXJldHVybiBufWZ1bmN0aW9uICRlKCl7dmFyIGUsdCxuPW1uO3JldHVybiBlPXVlKFBlKSxvbnx8bW4udHlwZSE9PVd0LlB1bmN0dWF0b3J8fChyZSgiKysiKXx8cmUoIi0tIikpJiYoZW4mJmUudHlwZT09PUt0LklkZW50aWZpZXImJmYoZS5uYW1lKSYmUShYdC5TdHJpY3RMSFNQb3N0Zml4KSxibnx8UShYdC5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KSxibj12bj0hMSx0PVUoKSxlPW5ldyBXKG4pLmZpbmlzaFBvc3RmaXhFeHByZXNzaW9uKHQudmFsdWUsZSkpLGV9ZnVuY3Rpb24gTWUoKXt2YXIgZSx0LG47cmV0dXJuIG1uLnR5cGUhPT1XdC5QdW5jdHVhdG9yJiZtbi50eXBlIT09V3QuS2V5d29yZD90PSRlKCk6cmUoIisrIil8fHJlKCItLSIpPyhuPW1uLGU9VSgpLHQ9dWUoTWUpLGVuJiZ0LnR5cGU9PT1LdC5JZGVudGlmaWVyJiZmKHQubmFtZSkmJlEoWHQuU3RyaWN0TEhTUHJlZml4KSxibnx8UShYdC5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KSx0PW5ldyBXKG4pLmZpbmlzaFVuYXJ5RXhwcmVzc2lvbihlLnZhbHVlLHQpLGJuPXZuPSExKTpyZSgiKyIpfHxyZSgiLSIpfHxyZSgifiIpfHxyZSgiISIpPyhuPW1uLGU9VSgpLHQ9dWUoTWUpLHQ9bmV3IFcobikuZmluaXNoVW5hcnlFeHByZXNzaW9uKGUudmFsdWUsdCksYm49dm49ITEpOmllKCJkZWxldGUiKXx8aWUoInZvaWQiKXx8aWUoInR5cGVvZiIpPyhuPW1uLGU9VSgpLHQ9dWUoTWUpLHQ9bmV3IFcobikuZmluaXNoVW5hcnlFeHByZXNzaW9uKGUudmFsdWUsdCksZW4mJiJkZWxldGUiPT09dC5vcGVyYXRvciYmdC5hcmd1bWVudC50eXBlPT09S3QuSWRlbnRpZmllciYmUShYdC5TdHJpY3REZWxldGUpLGJuPXZuPSExKTp0PSRlKCksdH1mdW5jdGlvbiBSZShlLHQpe3ZhciBuPTA7aWYoZS50eXBlIT09V3QuUHVuY3R1YXRvciYmZS50eXBlIT09V3QuS2V5d29yZClyZXR1cm4gMDtzd2l0Y2goZS52YWx1ZSl7Y2FzZSJ8fCI6bj0xO2JyZWFrO2Nhc2UiJiYiOm49MjticmVhaztjYXNlInwiOm49MzticmVhaztjYXNlIl4iOm49NDticmVhaztjYXNlIiYiOm49NTticmVhaztjYXNlIj09IjpjYXNlIiE9IjpjYXNlIj09PSI6Y2FzZSIhPT0iOm49NjticmVhaztjYXNlIjwiOmNhc2UiPiI6Y2FzZSI8PSI6Y2FzZSI+PSI6Y2FzZSJpbnN0YW5jZW9mIjpuPTc7YnJlYWs7Y2FzZSJpbiI6bj10Pzc6MDticmVhaztjYXNlIjw8IjpjYXNlIj4+IjpjYXNlIj4+PiI6bj04O2JyZWFrO2Nhc2UiKyI6Y2FzZSItIjpuPTk7YnJlYWs7Y2FzZSIqIjpjYXNlIi8iOmNhc2UiJSI6bj0xMX1yZXR1cm4gbn1mdW5jdGlvbiBGZSgpe3ZhciBlLHQsbixyLGksYSxvLHMsbCx1O2lmKGU9bW4sbD11ZShNZSkscj1tbixpPVJlKHIsZ24uYWxsb3dJbiksMD09PWkpcmV0dXJuIGw7Zm9yKGJuPXZuPSExLHIucHJlYz1pLFUoKSx0PVtlLG1uXSxvPWxlKE1lKSxhPVtsLHIsb107KGk9UmUobW4sZ24uYWxsb3dJbikpPjA7KXtmb3IoO2EubGVuZ3RoPjImJmk8PWFbYS5sZW5ndGgtMl0ucHJlYzspbz1hLnBvcCgpLHM9YS5wb3AoKS52YWx1ZSxsPWEucG9wKCksdC5wb3AoKSxuPW5ldyBXKHRbdC5sZW5ndGgtMV0pLmZpbmlzaEJpbmFyeUV4cHJlc3Npb24ocyxsLG8pLGEucHVzaChuKTtyPVUoKSxyLnByZWM9aSxhLnB1c2gociksdC5wdXNoKG1uKSxuPWxlKE1lKSxhLnB1c2gobil9Zm9yKHU9YS5sZW5ndGgtMSxuPWFbdV0sdC5wb3AoKTt1PjE7KW49bmV3IFcodC5wb3AoKSkuZmluaXNoQmluYXJ5RXhwcmVzc2lvbihhW3UtMV0udmFsdWUsYVt1LTJdLG4pLHUtPTI7cmV0dXJuIG59ZnVuY3Rpb24gVWUoKXt2YXIgZSx0LG4scixpO3JldHVybiBpPW1uLGU9dWUoRmUpLHJlKCI/IikmJihVKCksdD1nbi5hbGxvd0luLGduLmFsbG93SW49ITAsbj1sZShWZSksZ24uYWxsb3dJbj10LGVlKCI6Iikscj1sZShWZSksZT1uZXcgVyhpKS5maW5pc2hDb25kaXRpb25hbEV4cHJlc3Npb24oZSxuLHIpLGJuPXZuPSExKSxlfWZ1bmN0aW9uIEJlKCl7cmV0dXJuIHJlKCJ7Iik/eHQoKTpsZShWZSl9ZnVuY3Rpb24gcWUoZSxuKXt2YXIgcjtzd2l0Y2gobi50eXBlKXtjYXNlIEt0LklkZW50aWZpZXI6U3QoZSxuLG4ubmFtZSk7YnJlYWs7Y2FzZSBLdC5SZXN0RWxlbWVudDpxZShlLG4uYXJndW1lbnQpO2JyZWFrO2Nhc2UgS3QuQXNzaWdubWVudFBhdHRlcm46cWUoZSxuLmxlZnQpO2JyZWFrO2Nhc2UgS3QuQXJyYXlQYXR0ZXJuOmZvcihyPTA7cjxuLmVsZW1lbnRzLmxlbmd0aDtyKyspbnVsbCE9PW4uZWxlbWVudHNbcl0mJnFlKGUsbi5lbGVtZW50c1tyXSk7YnJlYWs7ZGVmYXVsdDpmb3IodChuLnR5cGU9PT1LdC5PYmplY3RQYXR0ZXJuLCJJbnZhbGlkIHR5cGUiKSxyPTA7cjxuLnByb3BlcnRpZXMubGVuZ3RoO3IrKylxZShlLG4ucHJvcGVydGllc1tyXS52YWx1ZSl9fWZ1bmN0aW9uIEhlKGUpe3ZhciB0LG4scixpLGEsbyxzLGw7c3dpdGNoKGE9W10sbz0wLGk9W2VdLGUudHlwZSl7Y2FzZSBLdC5JZGVudGlmaWVyOmJyZWFrO2Nhc2UgUXQuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcjppPWUucGFyYW1zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9Zm9yKHM9e3BhcmFtU2V0Ont9fSx0PTAsbj1pLmxlbmd0aDtuPnQ7dCs9MSlzd2l0Y2gocj1pW3RdLHIudHlwZSl7Y2FzZSBLdC5Bc3NpZ25tZW50UGF0dGVybjppW3RdPXIubGVmdCxhLnB1c2goci5yaWdodCksKytvLHFlKHMsci5sZWZ0KTticmVhaztkZWZhdWx0OnFlKHMsciksaVt0XT1yLGEucHVzaChudWxsKX1yZXR1cm4gcy5tZXNzYWdlPT09WHQuU3RyaWN0UGFyYW1EdXBlJiYobD1lbj9zLnN0cmljdGVkOnMuZmlyc3RSZXN0cmljdGVkLEcobCxzLm1lc3NhZ2UpKSwwPT09byYmKGE9W10pLHtwYXJhbXM6aSxkZWZhdWx0czphLHN0cmljdGVkOnMuc3RyaWN0ZWQsZmlyc3RSZXN0cmljdGVkOnMuZmlyc3RSZXN0cmljdGVkLG1lc3NhZ2U6cy5tZXNzYWdlfX1mdW5jdGlvbiB6ZShlLHQpe3ZhciBuLHI7cmV0dXJuIG9uJiZaKG1uKSxlZSgiPT4iKSxuPWVuLHI9QmUoKSxlbiYmZS5maXJzdFJlc3RyaWN0ZWQmJkcoZS5maXJzdFJlc3RyaWN0ZWQsZS5tZXNzYWdlKSxlbiYmZS5zdHJpY3RlZCYmWihlLnN0cmljdGVkLGUubWVzc2FnZSksZW49bix0LmZpbmlzaEFycm93RnVuY3Rpb25FeHByZXNzaW9uKGUucGFyYW1zLGUuZGVmYXVsdHMscixyLnR5cGUhPT1LdC5CbG9ja1N0YXRlbWVudCl9ZnVuY3Rpb24gVmUoKXt2YXIgZSx0LG4scixpO3JldHVybiBpPW1uLGU9bW4sdD1VZSgpLHQudHlwZT09PVF0LkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXJ8fHJlKCI9PiIpPyhibj12bj0hMSxyPUhlKHQpLHI/KHduPW51bGwsemUocixuZXcgVyhpKSkpOnQpOihvZSgpJiYoYm58fFEoWHQuSW52YWxpZExIU0luQXNzaWdubWVudCksZW4mJnQudHlwZT09PUt0LklkZW50aWZpZXImJmYodC5uYW1lKSYmWihlLFh0LlN0cmljdExIU0Fzc2lnbm1lbnQpLHJlKCI9Iik/Q2UodCk6Ym49dm49ITEsZT1VKCksbj1sZShWZSksdD1uZXcgVyhpKS5maW5pc2hBc3NpZ25tZW50RXhwcmVzc2lvbihlLnZhbHVlLHQsbiksd249bnVsbCksdCl9ZnVuY3Rpb24gV2UoKXt2YXIgZSx0LG49bW47aWYoZT1sZShWZSkscmUoIiwiKSl7Zm9yKHQ9W2VdO2RuPmNuJiZyZSgiLCIpOylVKCksdC5wdXNoKGxlKFZlKSk7ZT1uZXcgVyhuKS5maW5pc2hTZXF1ZW5jZUV4cHJlc3Npb24odCl9cmV0dXJuIGV9ZnVuY3Rpb24gSmUoKXtpZihtbi50eXBlPT09V3QuS2V5d29yZClzd2l0Y2gobW4udmFsdWUpe2Nhc2UiZXhwb3J0IjpyZXR1cm4ibW9kdWxlIiE9PXRuJiZaKG1uLFh0LklsbGVnYWxFeHBvcnREZWNsYXJhdGlvbiksTnQoKTtjYXNlImltcG9ydCI6cmV0dXJuIm1vZHVsZSIhPT10biYmWihtbixYdC5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pLFV0KCk7Y2FzZSJjb25zdCI6Y2FzZSJsZXQiOnJldHVybiBudCh7aW5Gb3I6ITF9KTtjYXNlImZ1bmN0aW9uIjpyZXR1cm4gRXQobmV3IFYpO2Nhc2UiY2xhc3MiOnJldHVybiBqdCgpfXJldHVybiB3dCgpfWZ1bmN0aW9uIFllKCl7Zm9yKHZhciBlPVtdO2RuPmNuJiYhcmUoIn0iKTspZS5wdXNoKEplKCkpO3JldHVybiBlfWZ1bmN0aW9uIEtlKCl7dmFyIGUsdD1uZXcgVjtyZXR1cm4gZWUoInsiKSxlPVllKCksZWUoIn0iKSx0LmZpbmlzaEJsb2NrU3RhdGVtZW50KGUpfWZ1bmN0aW9uIFFlKCl7dmFyIGUsdD1uZXcgVjtyZXR1cm4gZT1VKCksZS50eXBlIT09V3QuSWRlbnRpZmllciYmKGVuJiZlLnR5cGU9PT1XdC5LZXl3b3JkJiZwKGUudmFsdWUpP1ooZSxYdC5TdHJpY3RSZXNlcnZlZFdvcmQpOkcoZSkpLHQuZmluaXNoSWRlbnRpZmllcihlLnZhbHVlKX1mdW5jdGlvbiBYZSgpe3ZhciBlLHQ9bnVsbCxuPW5ldyBWO3JldHVybiBlPWhlKCksZW4mJmYoZS5uYW1lKSYmUShYdC5TdHJpY3RWYXJOYW1lKSxyZSgiPSIpPyhVKCksdD1sZShWZSkpOmUudHlwZSE9PUt0LklkZW50aWZpZXImJmVlKCI9Iiksbi5maW5pc2hWYXJpYWJsZURlY2xhcmF0b3IoZSx0KX1mdW5jdGlvbiBHZSgpe3ZhciBlPVtdO2Rve2lmKGUucHVzaChYZSgpKSwhcmUoIiwiKSlicmVhaztVKCl9d2hpbGUoZG4+Y24pO3JldHVybiBlfWZ1bmN0aW9uIFplKGUpe3ZhciB0O3JldHVybiBuZSgidmFyIiksdD1HZSgpLHNlKCksZS5maW5pc2hWYXJpYWJsZURlY2xhcmF0aW9uKHQpfWZ1bmN0aW9uIGV0KGUsdCl7dmFyIG4scj1udWxsLGk9bmV3IFY7cmV0dXJuIG49aGUoKSxlbiYmbi50eXBlPT09S3QuSWRlbnRpZmllciYmZihuLm5hbWUpJiZRKFh0LlN0cmljdFZhck5hbWUpLCJjb25zdCI9PT1lP2llKCJpbiIpfHwoZWUoIj0iKSxyPWxlKFZlKSk6KCF0LmluRm9yJiZuLnR5cGUhPT1LdC5JZGVudGlmaWVyfHxyZSgiPSIpKSYmKGVlKCI9Iikscj1sZShWZSkpLGkuZmluaXNoVmFyaWFibGVEZWNsYXJhdG9yKG4scil9ZnVuY3Rpb24gdHQoZSx0KXt2YXIgbj1bXTtkb3tpZihuLnB1c2goZXQoZSx0KSksIXJlKCIsIikpYnJlYWs7VSgpfXdoaWxlKGRuPmNuKTtyZXR1cm4gbn1mdW5jdGlvbiBudChlKXt2YXIgbixyLGk9bmV3IFY7cmV0dXJuIG49VSgpLnZhbHVlLHQoImxldCI9PT1ufHwiY29uc3QiPT09biwiTGV4aWNhbCBkZWNsYXJhdGlvbiBtdXN0IGJlIGVpdGhlciBsZXQgb3IgY29uc3QiKSxyPXR0KG4sZSksc2UoKSxpLmZpbmlzaExleGljYWxEZWNsYXJhdGlvbihyLG4pfWZ1bmN0aW9uIHJ0KCl7dmFyIGUsdD1uZXcgVjtyZXR1cm4gVSgpLHJlKCJ7IikmJksoWHQuT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlciksZT1RZSgpLHJlKCI9IikmJksoWHQuRGVmYXVsdFJlc3RQYXJhbWV0ZXIpLHJlKCIpIil8fEsoWHQuUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyKSx0LmZpbmlzaFJlc3RFbGVtZW50KGUpfWZ1bmN0aW9uIGl0KGUpe3JldHVybiBlZSgiOyIpLGUuZmluaXNoRW1wdHlTdGF0ZW1lbnQoKX1mdW5jdGlvbiBhdChlKXt2YXIgdD1XZSgpO3JldHVybiBzZSgpLGUuZmluaXNoRXhwcmVzc2lvblN0YXRlbWVudCh0KX1mdW5jdGlvbiBvdChlKXt2YXIgdCxuLHI7cmV0dXJuIG5lKCJpZiIpLGVlKCIoIiksdD1XZSgpLGVlKCIpIiksbj13dCgpLGllKCJlbHNlIik/KFUoKSxyPXd0KCkpOnI9bnVsbCxlLmZpbmlzaElmU3RhdGVtZW50KHQsbixyKX1mdW5jdGlvbiBzdChlKXt2YXIgdCxuLHI7cmV0dXJuIG5lKCJkbyIpLHI9Z24uaW5JdGVyYXRpb24sZ24uaW5JdGVyYXRpb249ITAsdD13dCgpLGduLmluSXRlcmF0aW9uPXIsbmUoIndoaWxlIiksZWUoIigiKSxuPVdlKCksZWUoIikiKSxyZSgiOyIpJiZVKCksZS5maW5pc2hEb1doaWxlU3RhdGVtZW50KHQsbil9ZnVuY3Rpb24gbHQoZSl7dmFyIHQsbixyO3JldHVybiBuZSgid2hpbGUiKSxlZSgiKCIpLHQ9V2UoKSxlZSgiKSIpLHI9Z24uaW5JdGVyYXRpb24sZ24uaW5JdGVyYXRpb249ITAsbj13dCgpLGduLmluSXRlcmF0aW9uPXIsZS5maW5pc2hXaGlsZVN0YXRlbWVudCh0LG4pfWZ1bmN0aW9uIHV0KGUpe3ZhciB0LG4scixpLGEsbyxzLGwsdSxjLHAsZj1nbi5hbGxvd0luO2lmKHQ9aT1hPW51bGwsbmUoImZvciIpLGVlKCIoIikscmUoIjsiKSlVKCk7ZWxzZSBpZihpZSgidmFyIikpdD1uZXcgVixVKCksZ24uYWxsb3dJbj0hMSx0PXQuZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbihHZSgpKSxnbi5hbGxvd0luPWYsMT09PXQuZGVjbGFyYXRpb25zLmxlbmd0aCYmaWUoImluIik/KFUoKSxvPXQscz1XZSgpLHQ9bnVsbCk6ZWUoIjsiKTtlbHNlIGlmKGllKCJjb25zdCIpfHxpZSgibGV0IikpdD1uZXcgVixsPVUoKS52YWx1ZSxnbi5hbGxvd0luPSExLHU9dHQobCx7aW5Gb3I6ITB9KSxnbi5hbGxvd0luPWYsMT09PXUubGVuZ3RoJiZudWxsPT09dVswXS5pbml0JiZpZSgiaW4iKT8odD10LmZpbmlzaExleGljYWxEZWNsYXJhdGlvbih1LGwpLFUoKSxvPXQscz1XZSgpLHQ9bnVsbCk6KHNlKCksdD10LmZpbmlzaExleGljYWxEZWNsYXJhdGlvbih1LGwpKTtlbHNlIGlmKHI9bW4sZ24uYWxsb3dJbj0hMSx0PXVlKFZlKSxnbi5hbGxvd0luPWYsaWUoImluIikpYm58fFEoWHQuSW52YWxpZExIU0luRm9ySW4pLFUoKSxDZSh0KSxvPXQscz1XZSgpLHQ9bnVsbDtlbHNle2lmKHJlKCIsIikpe2ZvcihuPVt0XTtyZSgiLCIpOylVKCksbi5wdXNoKGxlKFZlKSk7dD1uZXcgVyhyKS5maW5pc2hTZXF1ZW5jZUV4cHJlc3Npb24obil9ZWUoIjsiKX1yZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIG8mJihyZSgiOyIpfHwoaT1XZSgpKSxlZSgiOyIpLHJlKCIpIil8fChhPVdlKCkpKSxlZSgiKSIpLHA9Z24uaW5JdGVyYXRpb24sZ24uaW5JdGVyYXRpb249ITAsYz1sZSh3dCksZ24uaW5JdGVyYXRpb249cCwidW5kZWZpbmVkIj09dHlwZW9mIG8/ZS5maW5pc2hGb3JTdGF0ZW1lbnQodCxpLGEsYyk6ZS5maW5pc2hGb3JJblN0YXRlbWVudChvLHMsYyl9ZnVuY3Rpb24gY3QoZSl7dmFyIHQsbj1udWxsO3JldHVybiBuZSgiY29udGludWUiKSw1OT09PVp0LmNoYXJDb2RlQXQoY24pPyhVKCksZ24uaW5JdGVyYXRpb258fEsoWHQuSWxsZWdhbENvbnRpbnVlKSxlLmZpbmlzaENvbnRpbnVlU3RhdGVtZW50KG51bGwpKTpvbj8oZ24uaW5JdGVyYXRpb258fEsoWHQuSWxsZWdhbENvbnRpbnVlKSxlLmZpbmlzaENvbnRpbnVlU3RhdGVtZW50KG51bGwpKToobW4udHlwZT09PVd0LklkZW50aWZpZXImJihuPVFlKCksdD0iJCIrbi5uYW1lLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChnbi5sYWJlbFNldCx0KXx8SyhYdC5Vbmtub3duTGFiZWwsbi5uYW1lKSksc2UoKSxudWxsIT09bnx8Z24uaW5JdGVyYXRpb258fEsoWHQuSWxsZWdhbENvbnRpbnVlKSxlLmZpbmlzaENvbnRpbnVlU3RhdGVtZW50KG4pKX1mdW5jdGlvbiBwdChlKXt2YXIgdCxuPW51bGw7cmV0dXJuIG5lKCJicmVhayIpLDU5PT09WnQuY2hhckNvZGVBdChzbik/KFUoKSxnbi5pbkl0ZXJhdGlvbnx8Z24uaW5Td2l0Y2h8fEsoWHQuSWxsZWdhbEJyZWFrKSxlLmZpbmlzaEJyZWFrU3RhdGVtZW50KG51bGwpKTpvbj8oZ24uaW5JdGVyYXRpb258fGduLmluU3dpdGNofHxLKFh0LklsbGVnYWxCcmVhayksZS5maW5pc2hCcmVha1N0YXRlbWVudChudWxsKSk6KG1uLnR5cGU9PT1XdC5JZGVudGlmaWVyJiYobj1RZSgpLHQ9IiQiK24ubmFtZSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZ24ubGFiZWxTZXQsdCl8fEsoWHQuVW5rbm93bkxhYmVsLG4ubmFtZSkpLHNlKCksbnVsbCE9PW58fGduLmluSXRlcmF0aW9ufHxnbi5pblN3aXRjaHx8SyhYdC5JbGxlZ2FsQnJlYWspLGUuZmluaXNoQnJlYWtTdGF0ZW1lbnQobikpfWZ1bmN0aW9uIGZ0KGUpe3ZhciB0PW51bGw7cmV0dXJuIG5lKCJyZXR1cm4iKSxnbi5pbkZ1bmN0aW9uQm9keXx8UShYdC5JbGxlZ2FsUmV0dXJuKSwzMj09PVp0LmNoYXJDb2RlQXQoc24pJiZsKFp0LmNoYXJDb2RlQXQoc24rMSkpPyh0PVdlKCksc2UoKSxlLmZpbmlzaFJldHVyblN0YXRlbWVudCh0KSk6b24/ZS5maW5pc2hSZXR1cm5TdGF0ZW1lbnQobnVsbCk6KHJlKCI7Iil8fHJlKCJ9Iil8fG1uLnR5cGU9PT1XdC5FT0Z8fCh0PVdlKCkpLHNlKCksZS5maW5pc2hSZXR1cm5TdGF0ZW1lbnQodCkpfWZ1bmN0aW9uIGh0KGUpe3ZhciB0LG47cmV0dXJuIGVuJiZRKFh0LlN0cmljdE1vZGVXaXRoKSxuZSgid2l0aCIpLGVlKCIoIiksdD1XZSgpLGVlKCIpIiksbj13dCgpLGUuZmluaXNoV2l0aFN0YXRlbWVudCh0LG4pfWZ1bmN0aW9uIGR0KCl7dmFyIGUsdCxuPVtdLHI9bmV3IFY7Zm9yKGllKCJkZWZhdWx0Iik/KFUoKSxlPW51bGwpOihuZSgiY2FzZSIpLGU9V2UoKSksZWUoIjoiKTtkbj5jbiYmIShyZSgifSIpfHxpZSgiZGVmYXVsdCIpfHxpZSgiY2FzZSIpKTspdD1KZSgpLG4ucHVzaCh0KTtyZXR1cm4gci5maW5pc2hTd2l0Y2hDYXNlKGUsbil9ZnVuY3Rpb24gbXQoZSl7dmFyIHQsbixyLGksYTtpZihuZSgic3dpdGNoIiksZWUoIigiKSx0PVdlKCksZWUoIikiKSxlZSgieyIpLG49W10scmUoIn0iKSlyZXR1cm4gVSgpLGUuZmluaXNoU3dpdGNoU3RhdGVtZW50KHQsbik7Zm9yKGk9Z24uaW5Td2l0Y2gsZ24uaW5Td2l0Y2g9ITAsYT0hMTtkbj5jbiYmIXJlKCJ9Iik7KXI9ZHQoKSxudWxsPT09ci50ZXN0JiYoYSYmSyhYdC5NdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2gpLGE9ITApLG4ucHVzaChyKTtyZXR1cm4gZ24uaW5Td2l0Y2g9aSxlZSgifSIpLGUuZmluaXNoU3dpdGNoU3RhdGVtZW50KHQsbil9ZnVuY3Rpb24gZ3QoZSl7dmFyIHQ7cmV0dXJuIG5lKCJ0aHJvdyIpLG9uJiZLKFh0Lk5ld2xpbmVBZnRlclRocm93KSx0PVdlKCksc2UoKSxlLmZpbmlzaFRocm93U3RhdGVtZW50KHQpfWZ1bmN0aW9uIHl0KCl7dmFyIGUsdCxuPW5ldyBWO3JldHVybiBuZSgiY2F0Y2giKSxlZSgiKCIpLHJlKCIpIikmJkcobW4pLGU9aGUoKSxlbiYmZihlLm5hbWUpJiZRKFh0LlN0cmljdENhdGNoVmFyaWFibGUpLGVlKCIpIiksdD1LZSgpLG4uZmluaXNoQ2F0Y2hDbGF1c2UoZSx0KX1mdW5jdGlvbiB2dChlKXt2YXIgdCxuPW51bGwscj1udWxsO3JldHVybiBuZSgidHJ5IiksdD1LZSgpLGllKCJjYXRjaCIpJiYobj15dCgpKSxpZSgiZmluYWxseSIpJiYoVSgpLHI9S2UoKSksbnx8cnx8SyhYdC5Ob0NhdGNoT3JGaW5hbGx5KSxlLmZpbmlzaFRyeVN0YXRlbWVudCh0LG4scil9ZnVuY3Rpb24gYnQoZSl7cmV0dXJuIG5lKCJkZWJ1Z2dlciIpLHNlKCksZS5maW5pc2hEZWJ1Z2dlclN0YXRlbWVudCgpfWZ1bmN0aW9uIHd0KCl7dmFyIGUsdCxuLHIsaT1tbi50eXBlO2lmKGk9PT1XdC5FT0YmJkcobW4pLGk9PT1XdC5QdW5jdHVhdG9yJiYieyI9PT1tbi52YWx1ZSlyZXR1cm4gS2UoKTtpZihibj12bj0hMCxyPW5ldyBWLGk9PT1XdC5QdW5jdHVhdG9yKXN3aXRjaChtbi52YWx1ZSl7Y2FzZSI7IjpyZXR1cm4gaXQocik7Y2FzZSIoIjpyZXR1cm4gYXQocil9ZWxzZSBpZihpPT09V3QuS2V5d29yZClzd2l0Y2gobW4udmFsdWUpe2Nhc2UiYnJlYWsiOnJldHVybiBwdChyKTtjYXNlImNvbnRpbnVlIjpyZXR1cm4gY3Qocik7Y2FzZSJkZWJ1Z2dlciI6cmV0dXJuIGJ0KHIpO2Nhc2UiZG8iOnJldHVybiBzdChyKTtjYXNlImZvciI6cmV0dXJuIHV0KHIpO2Nhc2UiZnVuY3Rpb24iOnJldHVybiBFdChyKTtjYXNlImlmIjpyZXR1cm4gb3Qocik7Y2FzZSJyZXR1cm4iOnJldHVybiBmdChyKTtjYXNlInN3aXRjaCI6cmV0dXJuIG10KHIpO2Nhc2UidGhyb3ciOnJldHVybiBndChyKTtjYXNlInRyeSI6cmV0dXJuIHZ0KHIpO2Nhc2UidmFyIjpyZXR1cm4gWmUocik7Y2FzZSJ3aGlsZSI6cmV0dXJuIGx0KHIpO2Nhc2Uid2l0aCI6cmV0dXJuIGh0KHIpfXJldHVybiBlPVdlKCksZS50eXBlPT09S3QuSWRlbnRpZmllciYmcmUoIjoiKT8oVSgpLG49IiQiK2UubmFtZSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZ24ubGFiZWxTZXQsbikmJksoWHQuUmVkZWNsYXJhdGlvbiwiTGFiZWwiLGUubmFtZSksZ24ubGFiZWxTZXRbbl09ITAsdD13dCgpLGRlbGV0ZSBnbi5sYWJlbFNldFtuXSxyLmZpbmlzaExhYmVsZWRTdGF0ZW1lbnQoZSx0KSk6KHNlKCksci5maW5pc2hFeHByZXNzaW9uU3RhdGVtZW50KGUpKX1mdW5jdGlvbiB4dCgpe3ZhciBlLHQsbixyLGksYSxvLHMsbCx1PVtdLGM9bmV3IFY7Zm9yKGVlKCJ7Iik7ZG4+Y24mJm1uLnR5cGU9PT1XdC5TdHJpbmdMaXRlcmFsJiYodD1tbixlPUplKCksdS5wdXNoKGUpLGUuZXhwcmVzc2lvbi50eXBlPT09S3QuTGl0ZXJhbCk7KW49WnQuc2xpY2UodC5zdGFydCsxLHQuZW5kLTEpLCJ1c2Ugc3RyaWN0Ij09PW4/KGVuPSEwLHImJloocixYdC5TdHJpY3RPY3RhbExpdGVyYWwpKTohciYmdC5vY3RhbCYmKHI9dCk7Zm9yKGk9Z24ubGFiZWxTZXQsYT1nbi5pbkl0ZXJhdGlvbixvPWduLmluU3dpdGNoLHM9Z24uaW5GdW5jdGlvbkJvZHksbD1nbi5wYXJlbnRoZXNpemVkQ291bnQsZ24ubGFiZWxTZXQ9e30sZ24uaW5JdGVyYXRpb249ITEsZ24uaW5Td2l0Y2g9ITEsZ24uaW5GdW5jdGlvbkJvZHk9ITAsZ24ucGFyZW50aGVzaXplZENvdW50PTA7ZG4+Y24mJiFyZSgifSIpOyl1LnB1c2goSmUoKSk7cmV0dXJuIGVlKCJ9IiksZ24ubGFiZWxTZXQ9aSxnbi5pbkl0ZXJhdGlvbj1hLGduLmluU3dpdGNoPW8sZ24uaW5GdW5jdGlvbkJvZHk9cyxnbi5wYXJlbnRoZXNpemVkQ291bnQ9bCxjLmZpbmlzaEJsb2NrU3RhdGVtZW50KHUpfWZ1bmN0aW9uIFN0KGUsdCxuKXt2YXIgcj0iJCIrbjtlbj8oZihuKSYmKGUuc3RyaWN0ZWQ9dCxlLm1lc3NhZ2U9WHQuU3RyaWN0UGFyYW1OYW1lKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZS5wYXJhbVNldCxyKSYmKGUuc3RyaWN0ZWQ9dCxlLm1lc3NhZ2U9WHQuU3RyaWN0UGFyYW1EdXBlKSk6ZS5maXJzdFJlc3RyaWN0ZWR8fChmKG4pPyhlLmZpcnN0UmVzdHJpY3RlZD10LGUubWVzc2FnZT1YdC5TdHJpY3RQYXJhbU5hbWUpOnAobik/KGUuZmlyc3RSZXN0cmljdGVkPXQsZS5tZXNzYWdlPVh0LlN0cmljdFJlc2VydmVkV29yZCk6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUucGFyYW1TZXQscikmJihlLmZpcnN0UmVzdHJpY3RlZD10LGUubWVzc2FnZT1YdC5TdHJpY3RQYXJhbUR1cGUpKSxlLnBhcmFtU2V0W3JdPSEwfWZ1bmN0aW9uIEF0KGUpe3ZhciB0LG4scjtyZXR1cm4gdD1tbiwiLi4uIj09PXQudmFsdWU/KG49cnQoKSxTdChlLG4uYXJndW1lbnQsbi5hcmd1bWVudC5uYW1lKSxlLnBhcmFtcy5wdXNoKG4pLGUuZGVmYXVsdHMucHVzaChudWxsKSwhMSk6KG49ZGUoKSxTdChlLHQsdC52YWx1ZSksbi50eXBlPT09S3QuQXNzaWdubWVudFBhdHRlcm4mJihyPW4ucmlnaHQsbj1uLmxlZnQsKytlLmRlZmF1bHRDb3VudCksZS5wYXJhbXMucHVzaChuKSxlLmRlZmF1bHRzLnB1c2gociksIXJlKCIpIikpfWZ1bmN0aW9uIEN0KGUpe3ZhciB0O2lmKHQ9e3BhcmFtczpbXSxkZWZhdWx0Q291bnQ6MCxkZWZhdWx0czpbXSxmaXJzdFJlc3RyaWN0ZWQ6ZX0sZWUoIigiKSwhcmUoIikiKSlmb3IodC5wYXJhbVNldD17fTtkbj5jbiYmQXQodCk7KWVlKCIsIik7cmV0dXJuIGVlKCIpIiksMD09PXQuZGVmYXVsdENvdW50JiYodC5kZWZhdWx0cz1bXSkse3BhcmFtczp0LnBhcmFtcyxkZWZhdWx0czp0LmRlZmF1bHRzLHN0cmljdGVkOnQuc3RyaWN0ZWQsZmlyc3RSZXN0cmljdGVkOnQuZmlyc3RSZXN0cmljdGVkLG1lc3NhZ2U6dC5tZXNzYWdlfX1mdW5jdGlvbiBFdChlLHQpe3ZhciBuLHIsaSxhLG8scyxsLHU9bnVsbCxjPVtdLGg9W107cmV0dXJuIG5lKCJmdW5jdGlvbiIpLHQmJnJlKCIoIil8fChyPW1uLHU9UWUoKSxlbj9mKHIudmFsdWUpJiZaKHIsWHQuU3RyaWN0RnVuY3Rpb25OYW1lKTpmKHIudmFsdWUpPyhvPXIscz1YdC5TdHJpY3RGdW5jdGlvbk5hbWUpOnAoci52YWx1ZSkmJihvPXIscz1YdC5TdHJpY3RSZXNlcnZlZFdvcmQpKSxhPUN0KG8pLGM9YS5wYXJhbXMsaD1hLmRlZmF1bHRzLGk9YS5zdHJpY3RlZCxvPWEuZmlyc3RSZXN0cmljdGVkLGEubWVzc2FnZSYmKHM9YS5tZXNzYWdlKSxsPWVuLG49eHQoKSxlbiYmbyYmRyhvLHMpLGVuJiZpJiZaKGkscyksZW49bCxlLmZpbmlzaEZ1bmN0aW9uRGVjbGFyYXRpb24odSxjLGgsbil9ZnVuY3Rpb24ga3QoKXt2YXIgZSx0LG4scixpLGEsbyxzPW51bGwsbD1bXSx1PVtdLGM9bmV3IFY7cmV0dXJuIG5lKCJmdW5jdGlvbiIpLHJlKCIoIil8fChlPW1uLHM9UWUoKSxlbj9mKGUudmFsdWUpJiZaKGUsWHQuU3RyaWN0RnVuY3Rpb25OYW1lKTpmKGUudmFsdWUpPyhuPWUscj1YdC5TdHJpY3RGdW5jdGlvbk5hbWUpOnAoZS52YWx1ZSkmJihuPWUscj1YdC5TdHJpY3RSZXNlcnZlZFdvcmQpKSxpPUN0KG4pLGw9aS5wYXJhbXMsdT1pLmRlZmF1bHRzLHQ9aS5zdHJpY3RlZCxuPWkuZmlyc3RSZXN0cmljdGVkLGkubWVzc2FnZSYmKHI9aS5tZXNzYWdlKSxvPWVuLGE9eHQoKSxlbiYmbiYmRyhuLHIpLGVuJiZ0JiZaKHQsciksZW49byxjLmZpbmlzaEZ1bmN0aW9uRXhwcmVzc2lvbihzLGwsdSxhKX1mdW5jdGlvbiBPdCgpe3ZhciBlLHQsbixyLGksYSxvLHM9ITE7Zm9yKGU9bmV3IFYsZWUoInsiKSxyPVtdOyFyZSgifSIpOylyZSgiOyIpP1UoKTooaT1uZXcgVix0PW1uLG49ITEsYT1yZSgiWyIpLG89dmUoKSwic3RhdGljIj09PW8ubmFtZSYmYmUoKSYmKHQ9bW4sbj0hMCxhPXJlKCJbIiksbz12ZSgpKSxpPXdlKHQsbyxhLGkpLGk/KGlbInN0YXRpYyJdPW4sImluaXQiPT09aS5raW5kJiYoaS5raW5kPSJtZXRob2QiKSxuP2kuY29tcHV0ZWR8fCJwcm90b3R5cGUiIT09KGkua2V5Lm5hbWV8fGkua2V5LnZhbHVlLnRvU3RyaW5nKCkpfHxHKHQsWHQuU3RhdGljUHJvdG90eXBlKTppLmNvbXB1dGVkfHwiY29uc3RydWN0b3IiIT09KGkua2V5Lm5hbWV8fGkua2V5LnZhbHVlLnRvU3RyaW5nKCkpfHwoKCJtZXRob2QiIT09aS5raW5kfHwhaS5tZXRob2R8fGkudmFsdWUuZ2VuZXJhdG9yKSYmRyh0LFh0LkNvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZCkscz9HKHQsWHQuRHVwbGljYXRlQ29uc3RydWN0b3IpOnM9ITAsaS5raW5kPSJjb25zdHJ1Y3RvciIpLGkudHlwZT1LdC5NZXRob2REZWZpbml0aW9uLGRlbGV0ZSBpLm1ldGhvZCxkZWxldGUgaS5zaG9ydGhhbmQsci5wdXNoKGkpKTpHKG1uKSk7cmV0dXJuIFUoKSxlLmZpbmlzaENsYXNzQm9keShyKX1mdW5jdGlvbiBqdChlKXt2YXIgdCxuPW51bGwscj1udWxsLGk9bmV3IFYsYT1lbjtyZXR1cm4gZW49ITAsbmUoImNsYXNzIiksZSYmbW4udHlwZSE9PVd0LklkZW50aWZpZXJ8fChuPVFlKCkpLGllKCJleHRlbmRzIikmJihVKCkscj1sZShQZSkpLHQ9T3QoKSxlbj1hLGkuZmluaXNoQ2xhc3NEZWNsYXJhdGlvbihuLHIsdCl9ZnVuY3Rpb24gVHQoKXt2YXIgZSx0PW51bGwsbj1udWxsLHI9bmV3IFYsaT1lbjtyZXR1cm4gZW49ITAsbmUoImNsYXNzIiksbW4udHlwZT09PVd0LklkZW50aWZpZXImJih0PVFlKCkpLGllKCJleHRlbmRzIikmJihVKCksbj1sZShQZSkpLGU9T3QoKSxlbj1pLHIuZmluaXNoQ2xhc3NFeHByZXNzaW9uKHQsbixlKX1mdW5jdGlvbiBJdCgpe3ZhciBlPW5ldyBWO3JldHVybiBtbi50eXBlIT09V3QuU3RyaW5nTGl0ZXJhbCYmSyhYdC5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKSxlLmZpbmlzaExpdGVyYWwoVSgpKX1mdW5jdGlvbiBfdCgpe3ZhciBlLHQsbixyPW5ldyBWO3JldHVybiBpZSgiZGVmYXVsdCIpPyhuPW5ldyBWLFUoKSx0PW4uZmluaXNoSWRlbnRpZmllcigiZGVmYXVsdCIpKTp0PVFlKCksYWUoImFzIikmJihVKCksZT1JZSgpKSxyLmZpbmlzaEV4cG9ydFNwZWNpZmllcih0LGUpfWZ1bmN0aW9uIER0KGUpe3ZhciB0LG49bnVsbCxyPW51bGwsaT1bXTtpZihtbi50eXBlPT09V3QuS2V5d29yZClzd2l0Y2gobW4udmFsdWUpe2Nhc2UibGV0IjpjYXNlImNvbnN0IjpjYXNlInZhciI6Y2FzZSJjbGFzcyI6Y2FzZSJmdW5jdGlvbiI6cmV0dXJuIG49SmUoKSxlLmZpbmlzaEV4cG9ydE5hbWVkRGVjbGFyYXRpb24obixpLG51bGwpfWlmKGVlKCJ7IiksIXJlKCJ9IikpZG8gdD10fHxpZSgiZGVmYXVsdCIpLGkucHVzaChfdCgpKTt3aGlsZShyZSgiLCIpJiZVKCkpO3JldHVybiBlZSgifSIpLGFlKCJmcm9tIik/KFUoKSxyPUl0KCksc2UoKSk6dD9LKG1uLnZhbHVlP1h0LlVuZXhwZWN0ZWRUb2tlbjpYdC5NaXNzaW5nRnJvbUNsYXVzZSxtbi52YWx1ZSk6c2UoKSxlLmZpbmlzaEV4cG9ydE5hbWVkRGVjbGFyYXRpb24obixpLHIpfWZ1bmN0aW9uIEx0KGUpe3ZhciB0PW51bGwsbj1udWxsO3JldHVybiBuZSgiZGVmYXVsdCIpLGllKCJmdW5jdGlvbiIpPyh0PUV0KG5ldyBWLCEwKSxlLmZpbmlzaEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbih0KSk6aWUoImNsYXNzIik/KHQ9anQoITApLGUuZmluaXNoRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKHQpKTooYWUoImZyb20iKSYmSyhYdC5VbmV4cGVjdGVkVG9rZW4sbW4udmFsdWUpLG49cmUoInsiKT9BZSgpOnJlKCJbIik/bWUoKTpWZSgpLHNlKCksZS5maW5pc2hFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24obikpfWZ1bmN0aW9uIFB0KGUpe3ZhciB0O3JldHVybiBlZSgiKiIpLGFlKCJmcm9tIil8fEsobW4udmFsdWU/WHQuVW5leHBlY3RlZFRva2VuOlh0Lk1pc3NpbmdGcm9tQ2xhdXNlLG1uLnZhbHVlKSxVKCksdD1JdCgpLHNlKCksZS5maW5pc2hFeHBvcnRBbGxEZWNsYXJhdGlvbih0KX1mdW5jdGlvbiBOdCgpe3ZhciBlPW5ldyBWO3JldHVybiBnbi5pbkZ1bmN0aW9uQm9keSYmSyhYdC5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pLG5lKCJleHBvcnQiKSxpZSgiZGVmYXVsdCIpP0x0KGUpOnJlKCIqIik/UHQoZSk6RHQoZSl9ZnVuY3Rpb24gJHQoKXt2YXIgZSx0LG49bmV3IFY7cmV0dXJuIHQ9SWUoKSxhZSgiYXMiKSYmKFUoKSxlPVFlKCkpLG4uZmluaXNoSW1wb3J0U3BlY2lmaWVyKGUsdCl9ZnVuY3Rpb24gTXQoKXt2YXIgZT1bXTtpZihlZSgieyIpLCFyZSgifSIpKWRvIGUucHVzaCgkdCgpKTt3aGlsZShyZSgiLCIpJiZVKCkpO3JldHVybiBlZSgifSIpLGV9ZnVuY3Rpb24gUnQoKXt2YXIgZSx0PW5ldyBWO3JldHVybiBlPUllKCksdC5maW5pc2hJbXBvcnREZWZhdWx0U3BlY2lmaWVyKGUpfWZ1bmN0aW9uIEZ0KCl7dmFyIGUsdD1uZXcgVjtyZXR1cm4gZWUoIioiKSxhZSgiYXMiKXx8SyhYdC5Ob0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2UpLFUoKSxlPUllKCksdC5maW5pc2hJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoZSl9ZnVuY3Rpb24gVXQoKXt2YXIgZSx0LG49bmV3IFY7cmV0dXJuIGduLmluRnVuY3Rpb25Cb2R5JiZLKFh0LklsbGVnYWxJbXBvcnREZWNsYXJhdGlvbiksbmUoImltcG9ydCIpLGU9W10sbW4udHlwZT09PVd0LlN0cmluZ0xpdGVyYWw/KHQ9SXQoKSxzZSgpLG4uZmluaXNoSW1wb3J0RGVjbGFyYXRpb24oZSx0KSk6KCFpZSgiZGVmYXVsdCIpJiYkKG1uKSYmKGUucHVzaChSdCgpKSxyZSgiLCIpJiZVKCkpLHJlKCIqIik/ZS5wdXNoKEZ0KCkpOnJlKCJ7IikmJihlPWUuY29uY2F0KE10KCkpKSxhZSgiZnJvbSIpfHxLKG1uLnZhbHVlP1h0LlVuZXhwZWN0ZWRUb2tlbjpYdC5NaXNzaW5nRnJvbUNsYXVzZSxtbi52YWx1ZSksVSgpLHQ9SXQoKSxzZSgpLG4uZmluaXNoSW1wb3J0RGVjbGFyYXRpb24oZSx0KSl9ZnVuY3Rpb24gQnQoKXtmb3IodmFyIGUsdCxuLHIsaT1bXTtkbj5jbiYmKHQ9bW4sdC50eXBlPT09V3QuU3RyaW5nTGl0ZXJhbCkmJihlPUplKCksaS5wdXNoKGUpLGUuZXhwcmVzc2lvbi50eXBlPT09S3QuTGl0ZXJhbCk7KW49WnQuc2xpY2UodC5zdGFydCsxLHQuZW5kLTEpLCJ1c2Ugc3RyaWN0Ij09PW4/KGVuPSEwLHImJloocixYdC5TdHJpY3RPY3RhbExpdGVyYWwpKTohciYmdC5vY3RhbCYmKHI9dCk7Zm9yKDtkbj5jbiYmKGU9SmUoKSwidW5kZWZpbmVkIiE9dHlwZW9mIGUpOylpLnB1c2goZSk7cmV0dXJuIGl9ZnVuY3Rpb24gcXQoKXt2YXIgZSx0O3JldHVybiBCKCksdD1uZXcgVixlPUJ0KCksdC5maW5pc2hQcm9ncmFtKGUpfWZ1bmN0aW9uIEh0KCl7dmFyIGUsdCxuLHI9W107Zm9yKGU9MDtlPHluLnRva2Vucy5sZW5ndGg7KytlKXQ9eW4udG9rZW5zW2VdLG49e3R5cGU6dC50eXBlLHZhbHVlOnQudmFsdWV9LHQucmVnZXgmJihuLnJlZ2V4PXtwYXR0ZXJuOnQucmVnZXgucGF0dGVybixmbGFnczp0LnJlZ2V4LmZsYWdzfSkseW4ucmFuZ2UmJihuLnJhbmdlPXQucmFuZ2UpLHluLmxvYyYmKG4ubG9jPXQubG9jKSxyLnB1c2gobik7eW4udG9rZW5zPXJ9ZnVuY3Rpb24genQoZSx0KXt2YXIgbixyO249U3RyaW5nLCJzdHJpbmciPT10eXBlb2YgZXx8ZSBpbnN0YW5jZW9mIFN0cmluZ3x8KGU9bihlKSksWnQ9ZSxubj0wLHJuPVp0Lmxlbmd0aD4wPzE6MCxhbj0wLGNuPW5uLHBuPXJuLGZuPWFuLGRuPVp0Lmxlbmd0aCxtbj1udWxsLGduPXthbGxvd0luOiEwLGxhYmVsU2V0Ont9LGluRnVuY3Rpb25Cb2R5OiExLGluSXRlcmF0aW9uOiExLGluU3dpdGNoOiExLGxhc3RDb21tZW50U3RhcnQ6LTEsY3VybHlTdGFjazpbXX0seW49e30sdD10fHx7fSx0LnRva2Vucz0hMCx5bi50b2tlbnM9W10seW4udG9rZW5pemU9ITAseW4ub3BlblBhcmVuVG9rZW49LTEseW4ub3BlbkN1cmx5VG9rZW49LTEseW4ucmFuZ2U9ImJvb2xlYW4iPT10eXBlb2YgdC5yYW5nZSYmdC5yYW5nZSx5bi5sb2M9ImJvb2xlYW4iPT10eXBlb2YgdC5sb2MmJnQubG9jLCJib29sZWFuIj09dHlwZW9mIHQuY29tbWVudCYmdC5jb21tZW50JiYoeW4uY29tbWVudHM9W10pLCJib29sZWFuIj09dHlwZW9mIHQudG9sZXJhbnQmJnQudG9sZXJhbnQmJih5bi5lcnJvcnM9W10pO3RyeXtpZihCKCksbW4udHlwZT09PVd0LkVPRilyZXR1cm4geW4udG9rZW5zO2ZvcihVKCk7bW4udHlwZSE9PVd0LkVPRjspdHJ5e1UoKX1jYXRjaChpKXtpZih5bi5lcnJvcnMpe0ooaSk7YnJlYWt9dGhyb3cgaX1IdCgpLHI9eW4udG9rZW5zLCJ1bmRlZmluZWQiIT10eXBlb2YgeW4uY29tbWVudHMmJihyLmNvbW1lbnRzPXluLmNvbW1lbnRzKSwidW5kZWZpbmVkIiE9dHlwZW9mIHluLmVycm9ycyYmKHIuZXJyb3JzPXluLmVycm9ycyl9Y2F0Y2goYSl7dGhyb3cgYX1maW5hbGx5e3luPXt9fXJldHVybiByfWZ1bmN0aW9uIFZ0KGUsdCl7dmFyIG4scjtyPVN0cmluZywic3RyaW5nIj09dHlwZW9mIGV8fGUgaW5zdGFuY2VvZiBTdHJpbmd8fChlPXIoZSkpLFp0PWUsbm49MCxybj1adC5sZW5ndGg+MD8xOjAsYW49MCxjbj1ubixwbj1ybixmbj1hbixkbj1adC5sZW5ndGgsbW49bnVsbCxnbj17YWxsb3dJbjohMCxsYWJlbFNldDp7fSxpbkZ1bmN0aW9uQm9keTohMSxpbkl0ZXJhdGlvbjohMSxpblN3aXRjaDohMSxsYXN0Q29tbWVudFN0YXJ0Oi0xLGN1cmx5U3RhY2s6W119LHRuPSJzY3JpcHQiLGVuPSExLHluPXt9LCJ1bmRlZmluZWQiIT10eXBlb2YgdCYmKHluLnJhbmdlPSJib29sZWFuIj09dHlwZW9mIHQucmFuZ2UmJnQucmFuZ2UseW4ubG9jPSJib29sZWFuIj09dHlwZW9mIHQubG9jJiZ0LmxvYyx5bi5hdHRhY2hDb21tZW50PSJib29sZWFuIj09dHlwZW9mIHQuYXR0YWNoQ29tbWVudCYmdC5hdHRhY2hDb21tZW50LHluLmxvYyYmbnVsbCE9PXQuc291cmNlJiZ2b2lkIDAhPT10LnNvdXJjZSYmKHluLnNvdXJjZT1yKHQuc291cmNlKSksImJvb2xlYW4iPT10eXBlb2YgdC50b2tlbnMmJnQudG9rZW5zJiYoeW4udG9rZW5zPVtdKSwiYm9vbGVhbiI9PXR5cGVvZiB0LmNvbW1lbnQmJnQuY29tbWVudCYmKHluLmNvbW1lbnRzPVtdKSwiYm9vbGVhbiI9PXR5cGVvZiB0LnRvbGVyYW50JiZ0LnRvbGVyYW50JiYoeW4uZXJyb3JzPVtdKSx5bi5hdHRhY2hDb21tZW50JiYoeW4ucmFuZ2U9ITAseW4uY29tbWVudHM9W10seW4uYm90dG9tUmlnaHRTdGFjaz1bXSx5bi50cmFpbGluZ0NvbW1lbnRzPVtdLHluLmxlYWRpbmdDb21tZW50cz1bXSksIm1vZHVsZSI9PT10LnNvdXJjZVR5cGUmJih0bj10LnNvdXJjZVR5cGUsZW49ITApKTt0cnl7bj1xdCgpLCJ1bmRlZmluZWQiIT10eXBlb2YgeW4uY29tbWVudHMmJihuLmNvbW1lbnRzPXluLmNvbW1lbnRzKSwidW5kZWZpbmVkIiE9dHlwZW9mIHluLnRva2VucyYmKEh0KCksbi50b2tlbnM9eW4udG9rZW5zKSwidW5kZWZpbmVkIiE9dHlwZW9mIHluLmVycm9ycyYmKG4uZXJyb3JzPXluLmVycm9ycyl9Y2F0Y2goaSl7dGhyb3cgaX1maW5hbGx5e3luPXt9fXJldHVybiBufXZhciBXdCxKdCxZdCxLdCxRdCxYdCxHdCxadCxlbix0bixubixybixhbixvbixzbixsbix1bixjbixwbixmbixobixkbixtbixnbix5bix2bixibix3bjtXdD17Qm9vbGVhbkxpdGVyYWw6MSxFT0Y6MixJZGVudGlmaWVyOjMsS2V5d29yZDo0LE51bGxMaXRlcmFsOjUsTnVtZXJpY0xpdGVyYWw6NixQdW5jdHVhdG9yOjcsU3RyaW5nTGl0ZXJhbDo4LFJlZ3VsYXJFeHByZXNzaW9uOjksVGVtcGxhdGU6MTB9LEp0PXt9LEp0W1d0LkJvb2xlYW5MaXRlcmFsXT0iQm9vbGVhbiIsSnRbV3QuRU9GXT0iPGVuZD4iLEp0W1d0LklkZW50aWZpZXJdPSJJZGVudGlmaWVyIixKdFtXdC5LZXl3b3JkXT0iS2V5d29yZCIsSnRbV3QuTnVsbExpdGVyYWxdPSJOdWxsIixKdFtXdC5OdW1lcmljTGl0ZXJhbF09Ik51bWVyaWMiLEp0W1d0LlB1bmN0dWF0b3JdPSJQdW5jdHVhdG9yIixKdFtXdC5TdHJpbmdMaXRlcmFsXT0iU3RyaW5nIixKdFtXdC5SZWd1bGFyRXhwcmVzc2lvbl09IlJlZ3VsYXJFeHByZXNzaW9uIixKdFtXdC5UZW1wbGF0ZV09IlRlbXBsYXRlIixZdD1bIigiLCJ7IiwiWyIsImluIiwidHlwZW9mIiwiaW5zdGFuY2VvZiIsIm5ldyIsInJldHVybiIsImNhc2UiLCJkZWxldGUiLCJ0aHJvdyIsInZvaWQiLCI9IiwiKz0iLCItPSIsIio9IiwiLz0iLCIlPSIsIjw8PSIsIj4+PSIsIj4+Pj0iLCImPSIsInw9IiwiXj0iLCIsIiwiKyIsIi0iLCIqIiwiLyIsIiUiLCIrKyIsIi0tIiwiPDwiLCI+PiIsIj4+PiIsIiYiLCJ8IiwiXiIsIiEiLCJ+IiwiJiYiLCJ8fCIsIj8iLCI6IiwiPT09IiwiPT0iLCI+PSIsIjw9IiwiPCIsIj4iLCIhPSIsIiE9PSJdLEt0PXtBc3NpZ25tZW50RXhwcmVzc2lvbjoiQXNzaWdubWVudEV4cHJlc3Npb24iLEFzc2lnbm1lbnRQYXR0ZXJuOiJBc3NpZ25tZW50UGF0dGVybiIsQXJyYXlFeHByZXNzaW9uOiJBcnJheUV4cHJlc3Npb24iLEFycmF5UGF0dGVybjoiQXJyYXlQYXR0ZXJuIixBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjoiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iLEJsb2NrU3RhdGVtZW50OiJCbG9ja1N0YXRlbWVudCIsQmluYXJ5RXhwcmVzc2lvbjoiQmluYXJ5RXhwcmVzc2lvbiIsQnJlYWtTdGF0ZW1lbnQ6IkJyZWFrU3RhdGVtZW50IixDYWxsRXhwcmVzc2lvbjoiQ2FsbEV4cHJlc3Npb24iLENhdGNoQ2xhdXNlOiJDYXRjaENsYXVzZSIsQ2xhc3NCb2R5OiJDbGFzc0JvZHkiLENsYXNzRGVjbGFyYXRpb246IkNsYXNzRGVjbGFyYXRpb24iLENsYXNzRXhwcmVzc2lvbjoiQ2xhc3NFeHByZXNzaW9uIixDb25kaXRpb25hbEV4cHJlc3Npb246IkNvbmRpdGlvbmFsRXhwcmVzc2lvbiIsQ29udGludWVTdGF0ZW1lbnQ6IkNvbnRpbnVlU3RhdGVtZW50IixEb1doaWxlU3RhdGVtZW50OiJEb1doaWxlU3RhdGVtZW50IixEZWJ1Z2dlclN0YXRlbWVudDoiRGVidWdnZXJTdGF0ZW1lbnQiLEVtcHR5U3RhdGVtZW50OiJFbXB0eVN0YXRlbWVudCIsRXhwb3J0QWxsRGVjbGFyYXRpb246IkV4cG9ydEFsbERlY2xhcmF0aW9uIixFeHBvcnREZWZhdWx0RGVjbGFyYXRpb246IkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiIsRXhwb3J0TmFtZWREZWNsYXJhdGlvbjoiRXhwb3J0TmFtZWREZWNsYXJhdGlvbiIsRXhwb3J0U3BlY2lmaWVyOiJFeHBvcnRTcGVjaWZpZXIiLEV4cHJlc3Npb25TdGF0ZW1lbnQ6IkV4cHJlc3Npb25TdGF0ZW1lbnQiLEZvclN0YXRlbWVudDoiRm9yU3RhdGVtZW50IixGb3JJblN0YXRlbWVudDoiRm9ySW5TdGF0ZW1lbnQiLEZ1bmN0aW9uRGVjbGFyYXRpb246IkZ1bmN0aW9uRGVjbGFyYXRpb24iLEZ1bmN0aW9uRXhwcmVzc2lvbjoiRnVuY3Rpb25FeHByZXNzaW9uIixJZGVudGlmaWVyOiJJZGVudGlmaWVyIixJZlN0YXRlbWVudDoiSWZTdGF0ZW1lbnQiLEltcG9ydERlY2xhcmF0aW9uOiJJbXBvcnREZWNsYXJhdGlvbiIsSW1wb3J0RGVmYXVsdFNwZWNpZmllcjoiSW1wb3J0RGVmYXVsdFNwZWNpZmllciIsSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIiLEltcG9ydFNwZWNpZmllcjoiSW1wb3J0U3BlY2lmaWVyIixMaXRlcmFsOiJMaXRlcmFsIixMYWJlbGVkU3RhdGVtZW50OiJMYWJlbGVkU3RhdGVtZW50IixMb2dpY2FsRXhwcmVzc2lvbjoiTG9naWNhbEV4cHJlc3Npb24iLE1lbWJlckV4cHJlc3Npb246Ik1lbWJlckV4cHJlc3Npb24iLE1ldGhvZERlZmluaXRpb246Ik1ldGhvZERlZmluaXRpb24iLE5ld0V4cHJlc3Npb246Ik5ld0V4cHJlc3Npb24iLE9iamVjdEV4cHJlc3Npb246Ik9iamVjdEV4cHJlc3Npb24iLE9iamVjdFBhdHRlcm46Ik9iamVjdFBhdHRlcm4iLFByb2dyYW06IlByb2dyYW0iLFByb3BlcnR5OiJQcm9wZXJ0eSIsUmVzdEVsZW1lbnQ6IlJlc3RFbGVtZW50IixSZXR1cm5TdGF0ZW1lbnQ6IlJldHVyblN0YXRlbWVudCIsU2VxdWVuY2VFeHByZXNzaW9uOiJTZXF1ZW5jZUV4cHJlc3Npb24iLFNwcmVhZEVsZW1lbnQ6IlNwcmVhZEVsZW1lbnQiLFN1cGVyOiJTdXBlciIsU3dpdGNoQ2FzZToiU3dpdGNoQ2FzZSIsU3dpdGNoU3RhdGVtZW50OiJTd2l0Y2hTdGF0ZW1lbnQiLFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjoiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uIixUZW1wbGF0ZUVsZW1lbnQ6IlRlbXBsYXRlRWxlbWVudCIsVGVtcGxhdGVMaXRlcmFsOiJUZW1wbGF0ZUxpdGVyYWwiLFRoaXNFeHByZXNzaW9uOiJUaGlzRXhwcmVzc2lvbiIsVGhyb3dTdGF0ZW1lbnQ6IlRocm93U3RhdGVtZW50IixUcnlTdGF0ZW1lbnQ6IlRyeVN0YXRlbWVudCIsVW5hcnlFeHByZXNzaW9uOiJVbmFyeUV4cHJlc3Npb24iLFVwZGF0ZUV4cHJlc3Npb246IlVwZGF0ZUV4cHJlc3Npb24iLFZhcmlhYmxlRGVjbGFyYXRpb246IlZhcmlhYmxlRGVjbGFyYXRpb24iLFZhcmlhYmxlRGVjbGFyYXRvcjoiVmFyaWFibGVEZWNsYXJhdG9yIixXaGlsZVN0YXRlbWVudDoiV2hpbGVTdGF0ZW1lbnQiLFdpdGhTdGF0ZW1lbnQ6IldpdGhTdGF0ZW1lbnQifSxRdD17QXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcjoiQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciJ9LFh0PXtVbmV4cGVjdGVkVG9rZW46IlVuZXhwZWN0ZWQgdG9rZW4gJTAiLFVuZXhwZWN0ZWROdW1iZXI6IlVuZXhwZWN0ZWQgbnVtYmVyIixVbmV4cGVjdGVkU3RyaW5nOiJVbmV4cGVjdGVkIHN0cmluZyIsVW5leHBlY3RlZElkZW50aWZpZXI6IlVuZXhwZWN0ZWQgaWRlbnRpZmllciIsVW5leHBlY3RlZFJlc2VydmVkOiJVbmV4cGVjdGVkIHJlc2VydmVkIHdvcmQiLFVuZXhwZWN0ZWRUZW1wbGF0ZToiVW5leHBlY3RlZCBxdWFzaSAlMCIsVW5leHBlY3RlZEVPUzoiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiLE5ld2xpbmVBZnRlclRocm93OiJJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3ciLEludmFsaWRSZWdFeHA6IkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIixVbnRlcm1pbmF0ZWRSZWdFeHA6IkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiBtaXNzaW5nIC8iLEludmFsaWRMSFNJbkFzc2lnbm1lbnQ6IkludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gYXNzaWdubWVudCIsSW52YWxpZExIU0luRm9ySW46IkludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluIixNdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2g6Ik1vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudCIsTm9DYXRjaE9yRmluYWxseToiTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGFmdGVyIHRyeSIsVW5rbm93bkxhYmVsOiJVbmRlZmluZWQgbGFiZWwgJyUwJyIsUmVkZWNsYXJhdGlvbjoiJTAgJyUxJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkIixJbGxlZ2FsQ29udGludWU6IklsbGVnYWwgY29udGludWUgc3RhdGVtZW50IixJbGxlZ2FsQnJlYWs6IklsbGVnYWwgYnJlYWsgc3RhdGVtZW50IixJbGxlZ2FsUmV0dXJuOiJJbGxlZ2FsIHJldHVybiBzdGF0ZW1lbnQiLFN0cmljdE1vZGVXaXRoOiJTdHJpY3QgbW9kZSBjb2RlIG1heSBub3QgaW5jbHVkZSBhIHdpdGggc3RhdGVtZW50IixTdHJpY3RDYXRjaFZhcmlhYmxlOiJDYXRjaCB2YXJpYWJsZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlIixTdHJpY3RWYXJOYW1lOiJWYXJpYWJsZSBuYW1lIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUiLFN0cmljdFBhcmFtTmFtZToiUGFyYW1ldGVyIG5hbWUgZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUiLFN0cmljdFBhcmFtRHVwZToiU3RyaWN0IG1vZGUgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMiLFN0cmljdEZ1bmN0aW9uTmFtZToiRnVuY3Rpb24gbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlIixTdHJpY3RPY3RhbExpdGVyYWw6Ik9jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZS4iLFN0cmljdERlbGV0ZToiRGVsZXRlIG9mIGFuIHVucXVhbGlmaWVkIGlkZW50aWZpZXIgaW4gc3RyaWN0IG1vZGUuIixTdHJpY3RMSFNBc3NpZ25tZW50OiJBc3NpZ25tZW50IHRvIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlIixTdHJpY3RMSFNQb3N0Zml4OiJQb3N0Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUiLFN0cmljdExIU1ByZWZpeDoiUHJlZml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUiLFN0cmljdFJlc2VydmVkV29yZDoiVXNlIG9mIGZ1dHVyZSByZXNlcnZlZCB3b3JkIGluIHN0cmljdCBtb2RlIixUZW1wbGF0ZU9jdGFsTGl0ZXJhbDoiT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHRlbXBsYXRlIHN0cmluZ3MuIixQYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0ZXI6IlJlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBmb3JtYWwgcGFyYW1ldGVyIixEZWZhdWx0UmVzdFBhcmFtZXRlcjoiVW5leHBlY3RlZCB0b2tlbiA9IixPYmplY3RQYXR0ZXJuQXNSZXN0UGFyYW1ldGVyOiJVbmV4cGVjdGVkIHRva2VuIHsiLER1cGxpY2F0ZVByb3RvUHJvcGVydHk6IkR1cGxpY2F0ZSBfX3Byb3RvX18gZmllbGRzIGFyZSBub3QgYWxsb3dlZCBpbiBvYmplY3QgbGl0ZXJhbHMiLENvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZDoiQ2xhc3MgY29uc3RydWN0b3IgbWF5IG5vdCBiZSBhbiBhY2Nlc3NvciIsRHVwbGljYXRlQ29uc3RydWN0b3I6IkEgY2xhc3MgbWF5IG9ubHkgaGF2ZSBvbmUgY29uc3RydWN0b3IiLFN0YXRpY1Byb3RvdHlwZToiQ2xhc3NlcyBtYXkgbm90IGhhdmUgc3RhdGljIHByb3BlcnR5IG5hbWVkIHByb3RvdHlwZSIsTWlzc2luZ0Zyb21DbGF1c2U6IlVuZXhwZWN0ZWQgdG9rZW4iLE5vQXNBZnRlckltcG9ydE5hbWVzcGFjZToiVW5leHBlY3RlZCB0b2tlbiIsSW52YWxpZE1vZHVsZVNwZWNpZmllcjoiVW5leHBlY3RlZCB0b2tlbiIsSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uOiJVbmV4cGVjdGVkIHRva2VuIixJbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb246IlVuZXhwZWN0ZWQgdG9rZW4ifSxHdD17Tm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6bmV3IFJlZ0V4cCgiW8KqwrXCusOALcOWw5gtw7bDuC3LP8uGLcuRy6Aty6TLrMuuzbAtzbTNts23zbotzb3Nv86GzogtzorOjM6OLc6hzqMtz7XPty3SP9KKLdSv1LEt1ZbVmdWhLdaH1z8t16rXsC3XstigLdmK2a7Zr9mxLduT25Xbpdum267br9u6Ldu827/cP9ySLdyv3T8t3qXesd+KLd+q37Tftd+64KCALeCgleCgmuCgpOCgqOChgC3goZjgoqAt4KKy4KSELeCkueCkveClP+ClmC3gpaHgpbEt4KaA4KaFLeCmjOCmP+CmP+Cmky3gpqjgpqot4Kaw4Kay4Ka2LeCmueCmveCnjuCnnOCnP+Cnny3gp6Hgp7Dgp7HgqIUt4KiK4Kg/4Kg/4KiTLeCoqOCoqi3gqLDgqLLgqLPgqLXgqLbgqLjgqLngqZkt4Kmc4Kme4KmyLeCptOCqhS3gqj/gqj8t4KqR4KqTLeCqqOCqqi3gqrDgqrLgqrPgqrUt4Kq54Kq94Ks/4Kug4Kuh4KyFLeCsjOCsP+CsP+Csky3grKjgrKot4Kyw4Kyy4Kyz4Ky1LeCsueCsveCtnOCtP+Ctny3graHgrbHgroPgroUt4K6K4K6OLeCuP+Cuki3grpXgrpngrprgrpzgrp7grp/grqPgrqTgrqgt4K6q4K6uLeCuueCvP+CwhS3gsIzgsI4t4LA/4LCSLeCwqOCwqi3gsLngsL3gsZjgsZngsaDgsaHgsoUt4LKM4LKOLeCyP+Cyki3gsqjgsqot4LKz4LK1LeCyueCyveCznuCzoOCzoeCzseCzsuC0hS3gtIzgtI4t4LQ/4LSSLeC0uuC0veC1juC1oOC1oeC1ui3gtb/gtoUt4LaW4LaaLeC2seC2sy3gtrvgtr3gt4At4LeG4Lg/LeC4sOC4suC4s+C5gC3guYbguj/guoLguoTguofguojguorguj/gupQt4LqX4LqZLeC6n+C6oS3guqPguqXguqfguqrguqvguq0t4Lqw4Lqy4Lqz4Lq94LuALeC7hOC7huC7nC3gu5/gvIDgvYAt4L2H4L2JLeC9rOC+iC3gvozhgIAt4YCq4YC/4T8/LeE/leE/mi3hPz/hP6HhP6XhP6bhP64t4T+w4T+1LeGCP+GCjuGCoC3hg4Xhg4fhgz/hgz8t4YO64YO8LeGJiOGJii3hiT/hiT8t4YmW4YmY4YmaLeGJP+GJoC3hiojhioot4Yo/4Yo/LeGKsOGKsi3hirXhirgt4Yq+4YuA4YuCLeGLheGLiC3hi5bhi5gt4Yw/4YySLeGMleGMmC3hP5rhjoAt4Y4/4Y6gLeE/tOE/Py3hmazhma8t4Zm/4Zo/LeGamuGaoC3hm6rhm64t4Zu44ZyALeGcjOGcji3hnJHhnKAt4Zyx4T+ALeE/keE/oC3hP6zhP64t4T+w4Z6ALeGes+Gfl+GfnOGgoC3hobfhooAt4aKo4aKq4aKwLeGjteGkgC3hpJ7hpT8t4aWt4aWwLeGltOGmgC3hpqvhpz8t4aeH4aiALeGoluGooC3hqZThqqfhrIUt4ayz4a2FLeGti+Gugy3hrqDhrq7hrq/hrrot4a+l4bCALeGwo+GxPy3hsT/hsZot4bG94bOpLeGzrOGzri3hs7Hhs7Xhs7bhtIAt4ba/4biALeG8leG8mC3hvD/hvKAt4b2F4b2ILeG9P+G9Py3hvZfhvZnhvZvhvT/hvZ8t4b294b6ALeG+tOG+ti3hvrzhvr7hv4It4b+E4b+GLeG/jOG/Py3hv5Phv5Yt4b+b4b+gLeG/rOG/si3hv7Thv7Yt4b+84j+x4j+/4oI/LeKCnOKEguKEh+KEii3ihJPihJXihJkt4oQ/4oSk4oSm4oSo4oSqLeKEreKEry3ihLnihLwt4oS/4oWFLeKFieKFjuKFoC3ihojisIAt4rCu4rCwLeKxnuKxoC3is6Tis6st4rOu4rOy4rOz4rSALeK0peK0p+K0reK0sC3itafita/itoAt4raW4ragLeK2puK2qC3itq7itrAt4ra24ra4LeK2vuK3gC3it4bit4gt4reO4rc/LeK3luK3mC3it57iuK/jgIUt44CH44ChLeOAqeOAsS3jgLXjgLgt44C84z8/LeOCluOCPy3jgp/jgqEt44O644O8LeODv+OEhS3jhK3jhLEt44aO44agLeOGuuOHsC3jh7/jP4At5La15LiALem/jOqAgC3qkozqkz8t6pO96pSALeqYjOqYPy3qmJ/qmKrqmKvqmYAt6pmu6pm/LeqaP+qaoC3qm6/qnJct6pyf6pyiLeqeiOqeiy3qno7qnj8t6p6t6p6w6p6x6p+3LeqgP+qggy3qoIXqoIct6qCK6qCMLeqgouqhgC3qobPqooIt6qKz6qOyLeqjt+qju+qkii3qpKXqpLAt6qWG6qWgLeqlvOqmhC3qprLqpz/qp6At6qek6qemLeqnr+qnui3qp77qqIAt6qio6qmALeqpguqphC3qqYvqqaAt6qm26qm66qm+Leqqr+qqseqqteqqtuqquS3qqr3qq4Dqq4Lqq5st6qs/6qugLeqrquqrsi3qq7TqrD8t6qyG6qyJLeqsjuqskS3qrJbqrKAt6qym6qyoLeqsruqssC3qrZrqrZwt6q2f6q2k6q2l6q+ALeqvouqwgC3tnqPtnrAt7Z+G7Z+LLe2fu++kgC3vqa3vqbAt76uZ76yALe+shu+sky3vrJfvrD/vrJ8t76yo76yqLe+stu+suC3vrLzvrL7vrYDvrT/vrYPvrYTvrYYt766x76+TLe+0ve+1Py3vtj/vtpIt77eH77ewLe+3u++5sC3vubTvubYt77u877yhLe+8uu+9Py3vvZrvvaYt776+77+CLe+/h++/ii3vvz/vv5It77+X77+aLe+/nF0iKSxOb25Bc2NpaUlkZW50aWZpZXJQYXJ0Om5ldyBSZWdFeHAoIlvCqsK1wrrDgC3DlsOYLcO2w7gtyz/Lhi3LkcugLcuky6zLrsyALc20zbbNt826Lc29zb/Ohs6ILc6KzozOji3Ooc6jLc+1z7ct0j/Sgy3Sh9KKLdSv1LEt1ZbVmdWhLdaH1pEt1r3Wv9c/14LXhNeF14fXPy3XqtewLdey2D8t2JrYoC3ZqdmuLduT25Ut25zbny3bqNuqLdu827/cPy3dit0/Ld6x34At37XfuuCggC3goK3goYAt4KGb4KKgLeCisuCjpC3gpaPgpaYt4KWv4KWxLeCmg+CmhS3gpozgpj/gpj/gppMt4Kao4KaqLeCmsOCmsuCmti3gprngprwt4KeE4KeH4KeI4KeLLeCnjuCnl+CnnOCnP+Cnny3gp6Pgp6Yt4Kex4Kg/LeCog+CohS3gqIrgqD/gqD/gqJMt4Kio4KiqLeCosOCosuCos+CoteCotuCouOCoueCovOCovi3gqYLgqYfgqYjgqYst4Kk/4KmR4KmZLeCpnOCpnuCppi3gqbXgqj8t4KqD4KqFLeCqP+CqPy3gqpHgqpMt4Kqo4KqqLeCqsOCqsuCqs+CqtS3gqrngqrwt4KuF4KuHLeCrieCriy3gqz/gqz/gq6At4Kuj4KumLeCrr+CsPy3grIPgrIUt4KyM4Kw/4Kw/4KyTLeCsqOCsqi3grLDgrLLgrLPgrLUt4Ky54Ky8LeCthOCth+CtiOCtiy3grT/grZbgrZfgrZzgrT/grZ8t4K2j4K2mLeCtr+CtseCuguCug+CuhS3grorgro4t4K4/4K6SLeCuleCumeCumuCunOCunuCun+Cuo+CupOCuqC3grqrgrq4t4K654K6+LeCvguCvhi3gr4jgr4ot4K8/4K8/4K+X4K+mLeCvr+CwgC3gsIPgsIUt4LCM4LCOLeCwP+Cwki3gsKjgsKot4LC54LC9LeCxhOCxhi3gsYjgsYot4LE/4LGV4LGW4LGY4LGZ4LGgLeCxo+Cxpi3gsa/gsj8t4LKD4LKFLeCyjOCyji3gsj/gspIt4LKo4LKqLeCys+CytS3gsrngsrwt4LOE4LOGLeCziOCzii3gsz/gs5Xgs5bgs57gs6At4LOj4LOmLeCzr+CzseCzsuC0Py3gtIPgtIUt4LSM4LSOLeC0P+C0ki3gtLrgtL0t4LWE4LWGLeC1iOC1ii3gtY7gtZfgtaAt4LWj4LWmLeC1r+C1ui3gtb/gtoLgtoPgtoUt4LaW4LaaLeC2seC2sy3gtrvgtr3gt4At4LeG4LeK4Lc/LeC3lOC3luC3mC3gt5/gt6Yt4Lev4Ley4Lez4Lg/LeC4uuC5gC3guY7guT8t4LmZ4Lo/4LqC4LqE4LqH4LqI4LqK4Lo/4LqULeC6l+C6mS3gup/guqEt4Lqj4Lql4Lqn4Lqq4Lqr4LqtLeC6ueC6uy3gur3gu4At4LuE4LuG4LuILeC7P+C7Py3gu5ngu5wt4Luf4LyA4LyY4LyZ4LygLeC8qeC8teC8t+C8ueC8vi3gvYfgvYkt4L2s4L2xLeC+hOC+hi3gvpfgvpkt4L684L+G4YCALeE/ieE/Py3hgj/hgqAt4YOF4YOH4YM/4YM/LeGDuuGDvC3hiYjhiYot4Yk/4Yk/LeGJluGJmOGJmi3hiT/hiaAt4YqI4YqKLeGKP+GKPy3hirDhirIt4Yq14Yq4LeGKvuGLgOGLgi3hi4Xhi4gt4YuW4YuYLeGMP+GMki3hjJXhjJgt4T+a4T8/LeE/n+GOgC3hjj/hjqAt4T+04T8/LeGZrOGZry3hmb/hmj8t4Zqa4ZqgLeGbquGbri3hm7jhnIAt4ZyM4ZyOLeGclOGcoC3hnLThP4At4T+T4T+gLeE/rOE/ri3hP7DhP7LhP7PhnoAt4Z+T4Z+X4Z+c4Z8/4Z+gLeGfqeGgiy3hoD/hoD8t4aCZ4aCgLeGht+GigC3hoqrhorAt4aO14aSALeGknuGkoC3hpKvhpLAt4aS74aWGLeGlreGlsC3hpbThpoAt4aar4aawLeGnieGnPy3hp5nhqIAt4aib4aigLeGpnuGpoC3hqbzhqb8t4aqJ4ao/LeGqmeGqp+GqsC3hqr3hrIAt4a2L4a0/LeGtmeGtqy3hrbPhroAt4a+z4bCALeGwt+GxgC3hsYnhsT8t4bG94bM/LeGzkuGzlC3hs7bhs7jhs7nhtIAt4be14be8LeG8leG8mC3hvD/hvKAt4b2F4b2ILeG9P+G9Py3hvZfhvZnhvZvhvT/hvZ8t4b294b6ALeG+tOG+ti3hvrzhvr7hv4It4b+E4b+GLeG/jOG/Py3hv5Phv5Yt4b+b4b+gLeG/rOG/si3hv7Thv7Yt4b+84oCM4oA/4oC/4j+A4j+U4j+x4j+/4oI/LeKCnOKDPy3ig5zig6Hig6Ut4oOw4oSC4oSH4oSKLeKEk+KEleKEmS3ihD/ihKTihKbihKjihKot4oSt4oSvLeKEueKEvC3ihL/ihYUt4oWJ4oWO4oWgLeKGiOKwgC3isK7isLAt4rGe4rGgLeKzpOKzqy3is7PitIAt4rSl4rSn4rSt4rSwLeK1p+K1r+K1vy3itpbitqAt4ram4raoLeK2ruK2sC3itrbitrgt4ra+4reALeK3huK3iC3it47itz8t4reW4reYLeK3nuK3oC3it7/iuK/jgIUt44CH44ChLeOAr+OAsS3jgLXjgLgt44C84z8/LeOCluOCmeOCmuOCPy3jgp/jgqEt44O644O8LeODv+OEhS3jhK3jhLEt44aO44agLeOGuuOHsC3jh7/jP4At5La15LiALem/jOqAgC3qkozqkz8t6pO96pSALeqYjOqYPy3qmKvqmYAt6pmv6pm0LeqZveqZvy3qmj/qmp8t6pux6pyXLeqcn+qcoi3qnojqnost6p6O6p4/LeqereqesOqeseqfty3qoKfqoYAt6qGz6qKALeqjhOqjPy3qo5nqo6At6qO36qO76qSALeqkreqksC3qpZPqpaAt6qW86qaALeqngOqnPy3qp5nqp6At6qe+6qiALeqotuqpgC3qqT/qqT8t6qmZ6qmgLeqptuqpui3qq4Lqq5st6qs/6qugLeqrr+qrsi3qq7bqrD8t6qyG6qyJLeqsjuqskS3qrJbqrKAt6qym6qyoLeqsruqssC3qrZrqrZwt6q2f6q2k6q2l6q+ALeqvquqvrOqvreqvsC3qr7nqsIAt7Z6j7Z6wLe2fhu2fiy3tn7vvpIAt76mt76mwLe+rme+sgC3vrIbvrJMt76yX76w/Le+sqO+sqi3vrLbvrLgt76y876y+762A760/762D762E762GLe+use+vky3vtL3vtT8t77Y/77aSLe+3h++3sC3vt7vvuIAt77g/77igLe+4re+4s++4tO+5Py3vuT/vubAt77m077m2Le+7vO+8Py3vvJnvvKEt77y677y/770/Le+9mu+9pi3vvr7vv4It77+H77+KLe+/P++/ki3vv5fvv5ot77+cXSIpCn0sVy5wcm90b3R5cGU9Vi5wcm90b3R5cGU9e3Byb2Nlc3NDb21tZW50OmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxhPXluLmJvdHRvbVJpZ2h0U3RhY2ssbz1hW2EubGVuZ3RoLTFdO2lmKCEodGhpcy50eXBlPT09S3QuUHJvZ3JhbSYmdGhpcy5ib2R5Lmxlbmd0aD4wKSl7aWYoeW4udHJhaWxpbmdDb21tZW50cy5sZW5ndGg+MCl7Zm9yKG49W10scj15bi50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aC0xO3I+PTA7LS1yKWk9eW4udHJhaWxpbmdDb21tZW50c1tyXSxpLnJhbmdlWzBdPj10aGlzLnJhbmdlWzFdJiYobi51bnNoaWZ0KGkpLHluLnRyYWlsaW5nQ29tbWVudHMuc3BsaWNlKHIsMSkpO3luLnRyYWlsaW5nQ29tbWVudHM9W119ZWxzZSBvJiZvLnRyYWlsaW5nQ29tbWVudHMmJm8udHJhaWxpbmdDb21tZW50c1swXS5yYW5nZVswXT49dGhpcy5yYW5nZVsxXSYmKG49by50cmFpbGluZ0NvbW1lbnRzLGRlbGV0ZSBvLnRyYWlsaW5nQ29tbWVudHMpO2lmKG8pZm9yKDtvJiZvLnJhbmdlWzBdPj10aGlzLnJhbmdlWzBdOyllPW8sbz1hLnBvcCgpO2lmKGUpZS5sZWFkaW5nQ29tbWVudHMmJmUubGVhZGluZ0NvbW1lbnRzW2UubGVhZGluZ0NvbW1lbnRzLmxlbmd0aC0xXS5yYW5nZVsxXTw9dGhpcy5yYW5nZVswXSYmKHRoaXMubGVhZGluZ0NvbW1lbnRzPWUubGVhZGluZ0NvbW1lbnRzLGUubGVhZGluZ0NvbW1lbnRzPXZvaWQgMCk7ZWxzZSBpZih5bi5sZWFkaW5nQ29tbWVudHMubGVuZ3RoPjApZm9yKHQ9W10scj15bi5sZWFkaW5nQ29tbWVudHMubGVuZ3RoLTE7cj49MDstLXIpaT15bi5sZWFkaW5nQ29tbWVudHNbcl0saS5yYW5nZVsxXTw9dGhpcy5yYW5nZVswXSYmKHQudW5zaGlmdChpKSx5bi5sZWFkaW5nQ29tbWVudHMuc3BsaWNlKHIsMSkpO3QmJnQubGVuZ3RoPjAmJih0aGlzLmxlYWRpbmdDb21tZW50cz10KSxuJiZuLmxlbmd0aD4wJiYodGhpcy50cmFpbGluZ0NvbW1lbnRzPW4pLGEucHVzaCh0aGlzKX19LGZpbmlzaDpmdW5jdGlvbigpe3luLnJhbmdlJiYodGhpcy5yYW5nZVsxXT1zbikseW4ubG9jJiYodGhpcy5sb2MuZW5kPXtsaW5lOmxuLGNvbHVtbjpzbi11bn0seW4uc291cmNlJiYodGhpcy5sb2Muc291cmNlPXluLnNvdXJjZSkpLHluLmF0dGFjaENvbW1lbnQmJnRoaXMucHJvY2Vzc0NvbW1lbnQoKX0sZmluaXNoQXJyYXlFeHByZXNzaW9uOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnR5cGU9S3QuQXJyYXlFeHByZXNzaW9uLHRoaXMuZWxlbWVudHM9ZSx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaEFycmF5UGF0dGVybjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50eXBlPUt0LkFycmF5UGF0dGVybix0aGlzLmVsZW1lbnRzPWUsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy50eXBlPUt0LkFycm93RnVuY3Rpb25FeHByZXNzaW9uLHRoaXMuaWQ9bnVsbCx0aGlzLnBhcmFtcz1lLHRoaXMuZGVmYXVsdHM9dCx0aGlzLmJvZHk9bix0aGlzLmdlbmVyYXRvcj0hMSx0aGlzLmV4cHJlc3Npb249cix0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaEFzc2lnbm1lbnRFeHByZXNzaW9uOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy50eXBlPUt0LkFzc2lnbm1lbnRFeHByZXNzaW9uLHRoaXMub3BlcmF0b3I9ZSx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PW4sdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hBc3NpZ25tZW50UGF0dGVybjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnR5cGU9S3QuQXNzaWdubWVudFBhdHRlcm4sdGhpcy5sZWZ0PWUsdGhpcy5yaWdodD10LHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoQmluYXJ5RXhwcmVzc2lvbjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMudHlwZT0ifHwiPT09ZXx8IiYmIj09PWU/S3QuTG9naWNhbEV4cHJlc3Npb246S3QuQmluYXJ5RXhwcmVzc2lvbix0aGlzLm9wZXJhdG9yPWUsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1uLHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoQmxvY2tTdGF0ZW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHlwZT1LdC5CbG9ja1N0YXRlbWVudCx0aGlzLmJvZHk9ZSx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaEJyZWFrU3RhdGVtZW50OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnR5cGU9S3QuQnJlYWtTdGF0ZW1lbnQsdGhpcy5sYWJlbD1lLHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoQ2FsbEV4cHJlc3Npb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50eXBlPUt0LkNhbGxFeHByZXNzaW9uLHRoaXMuY2FsbGVlPWUsdGhpcy5hcmd1bWVudHM9dCx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaENhdGNoQ2xhdXNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudHlwZT1LdC5DYXRjaENsYXVzZSx0aGlzLnBhcmFtPWUsdGhpcy5ib2R5PXQsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hDbGFzc0JvZHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHlwZT1LdC5DbGFzc0JvZHksdGhpcy5ib2R5PWUsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hDbGFzc0RlY2xhcmF0aW9uOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy50eXBlPUt0LkNsYXNzRGVjbGFyYXRpb24sdGhpcy5pZD1lLHRoaXMuc3VwZXJDbGFzcz10LHRoaXMuYm9keT1uLHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoQ2xhc3NFeHByZXNzaW9uOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy50eXBlPUt0LkNsYXNzRXhwcmVzc2lvbix0aGlzLmlkPWUsdGhpcy5zdXBlckNsYXNzPXQsdGhpcy5ib2R5PW4sdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hDb25kaXRpb25hbEV4cHJlc3Npb246ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnR5cGU9S3QuQ29uZGl0aW9uYWxFeHByZXNzaW9uLHRoaXMudGVzdD1lLHRoaXMuY29uc2VxdWVudD10LHRoaXMuYWx0ZXJuYXRlPW4sdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hDb250aW51ZVN0YXRlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50eXBlPUt0LkNvbnRpbnVlU3RhdGVtZW50LHRoaXMubGFiZWw9ZSx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaERlYnVnZ2VyU3RhdGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZT1LdC5EZWJ1Z2dlclN0YXRlbWVudCx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaERvV2hpbGVTdGF0ZW1lbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50eXBlPUt0LkRvV2hpbGVTdGF0ZW1lbnQsdGhpcy5ib2R5PWUsdGhpcy50ZXN0PXQsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hFbXB0eVN0YXRlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGU9S3QuRW1wdHlTdGF0ZW1lbnQsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hFeHByZXNzaW9uU3RhdGVtZW50OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnR5cGU9S3QuRXhwcmVzc2lvblN0YXRlbWVudCx0aGlzLmV4cHJlc3Npb249ZSx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaEZvclN0YXRlbWVudDpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy50eXBlPUt0LkZvclN0YXRlbWVudCx0aGlzLmluaXQ9ZSx0aGlzLnRlc3Q9dCx0aGlzLnVwZGF0ZT1uLHRoaXMuYm9keT1yLHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoRm9ySW5TdGF0ZW1lbnQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnR5cGU9S3QuRm9ySW5TdGF0ZW1lbnQsdGhpcy5sZWZ0PWUsdGhpcy5yaWdodD10LHRoaXMuYm9keT1uLHRoaXMuZWFjaD0hMSx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaEZ1bmN0aW9uRGVjbGFyYXRpb246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMudHlwZT1LdC5GdW5jdGlvbkRlY2xhcmF0aW9uLHRoaXMuaWQ9ZSx0aGlzLnBhcmFtcz10LHRoaXMuZGVmYXVsdHM9bix0aGlzLmJvZHk9cix0aGlzLmdlbmVyYXRvcj0hMSx0aGlzLmV4cHJlc3Npb249ITEsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hGdW5jdGlvbkV4cHJlc3Npb246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMudHlwZT1LdC5GdW5jdGlvbkV4cHJlc3Npb24sdGhpcy5pZD1lLHRoaXMucGFyYW1zPXQsdGhpcy5kZWZhdWx0cz1uLHRoaXMuYm9keT1yLHRoaXMuZ2VuZXJhdG9yPSExLHRoaXMuZXhwcmVzc2lvbj0hMSx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaElkZW50aWZpZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHlwZT1LdC5JZGVudGlmaWVyLHRoaXMubmFtZT1lLHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoSWZTdGF0ZW1lbnQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnR5cGU9S3QuSWZTdGF0ZW1lbnQsdGhpcy50ZXN0PWUsdGhpcy5jb25zZXF1ZW50PXQsdGhpcy5hbHRlcm5hdGU9bix0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaExhYmVsZWRTdGF0ZW1lbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50eXBlPUt0LkxhYmVsZWRTdGF0ZW1lbnQsdGhpcy5sYWJlbD1lLHRoaXMuYm9keT10LHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoTGl0ZXJhbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50eXBlPUt0LkxpdGVyYWwsdGhpcy52YWx1ZT1lLnZhbHVlLHRoaXMucmF3PVp0LnNsaWNlKGUuc3RhcnQsZS5lbmQpLGUucmVnZXgmJih0aGlzLnJlZ2V4PWUucmVnZXgpLHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoTWVtYmVyRXhwcmVzc2lvbjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMudHlwZT1LdC5NZW1iZXJFeHByZXNzaW9uLHRoaXMuY29tcHV0ZWQ9IlsiPT09ZSx0aGlzLm9iamVjdD10LHRoaXMucHJvcGVydHk9bix0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaE5ld0V4cHJlc3Npb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50eXBlPUt0Lk5ld0V4cHJlc3Npb24sdGhpcy5jYWxsZWU9ZSx0aGlzLmFyZ3VtZW50cz10LHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoT2JqZWN0RXhwcmVzc2lvbjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50eXBlPUt0Lk9iamVjdEV4cHJlc3Npb24sdGhpcy5wcm9wZXJ0aWVzPWUsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hPYmplY3RQYXR0ZXJuOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnR5cGU9S3QuT2JqZWN0UGF0dGVybix0aGlzLnByb3BlcnRpZXM9ZSx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaFBvc3RmaXhFeHByZXNzaW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudHlwZT1LdC5VcGRhdGVFeHByZXNzaW9uLHRoaXMub3BlcmF0b3I9ZSx0aGlzLmFyZ3VtZW50PXQsdGhpcy5wcmVmaXg9ITEsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hQcm9ncmFtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnR5cGU9S3QuUHJvZ3JhbSx0aGlzLmJvZHk9ZSwibW9kdWxlIj09PXRuJiYodGhpcy5zb3VyY2VUeXBlPXRuKSx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaFByb3BlcnR5OmZ1bmN0aW9uKGUsdCxuLHIsaSxhKXtyZXR1cm4gdGhpcy50eXBlPUt0LlByb3BlcnR5LHRoaXMua2V5PXQsdGhpcy5jb21wdXRlZD1uLHRoaXMudmFsdWU9cix0aGlzLmtpbmQ9ZSx0aGlzLm1ldGhvZD1pLHRoaXMuc2hvcnRoYW5kPWEsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hSZXN0RWxlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50eXBlPUt0LlJlc3RFbGVtZW50LHRoaXMuYXJndW1lbnQ9ZSx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaFJldHVyblN0YXRlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50eXBlPUt0LlJldHVyblN0YXRlbWVudCx0aGlzLmFyZ3VtZW50PWUsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hTZXF1ZW5jZUV4cHJlc3Npb246ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHlwZT1LdC5TZXF1ZW5jZUV4cHJlc3Npb24sdGhpcy5leHByZXNzaW9ucz1lLHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoU3ByZWFkRWxlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50eXBlPUt0LlNwcmVhZEVsZW1lbnQsdGhpcy5hcmd1bWVudD1lLHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoU3dpdGNoQ2FzZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnR5cGU9S3QuU3dpdGNoQ2FzZSx0aGlzLnRlc3Q9ZSx0aGlzLmNvbnNlcXVlbnQ9dCx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaFN1cGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZT1LdC5TdXBlcix0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaFN3aXRjaFN0YXRlbWVudDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnR5cGU9S3QuU3dpdGNoU3RhdGVtZW50LHRoaXMuZGlzY3JpbWluYW50PWUsdGhpcy5jYXNlcz10LHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudHlwZT1LdC5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24sdGhpcy50YWc9ZSx0aGlzLnF1YXNpPXQsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hUZW1wbGF0ZUVsZW1lbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50eXBlPUt0LlRlbXBsYXRlRWxlbWVudCx0aGlzLnZhbHVlPWUsdGhpcy50YWlsPXQsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hUZW1wbGF0ZUxpdGVyYWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50eXBlPUt0LlRlbXBsYXRlTGl0ZXJhbCx0aGlzLnF1YXNpcz1lLHRoaXMuZXhwcmVzc2lvbnM9dCx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaFRoaXNFeHByZXNzaW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZT1LdC5UaGlzRXhwcmVzc2lvbix0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaFRocm93U3RhdGVtZW50OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnR5cGU9S3QuVGhyb3dTdGF0ZW1lbnQsdGhpcy5hcmd1bWVudD1lLHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoVHJ5U3RhdGVtZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy50eXBlPUt0LlRyeVN0YXRlbWVudCx0aGlzLmJsb2NrPWUsdGhpcy5ndWFyZGVkSGFuZGxlcnM9W10sdGhpcy5oYW5kbGVycz10P1t0XTpbXSx0aGlzLmhhbmRsZXI9dCx0aGlzLmZpbmFsaXplcj1uLHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoVW5hcnlFeHByZXNzaW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudHlwZT0iKysiPT09ZXx8Ii0tIj09PWU/S3QuVXBkYXRlRXhwcmVzc2lvbjpLdC5VbmFyeUV4cHJlc3Npb24sdGhpcy5vcGVyYXRvcj1lLHRoaXMuYXJndW1lbnQ9dCx0aGlzLnByZWZpeD0hMCx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaFZhcmlhYmxlRGVjbGFyYXRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHlwZT1LdC5WYXJpYWJsZURlY2xhcmF0aW9uLHRoaXMuZGVjbGFyYXRpb25zPWUsdGhpcy5raW5kPSJ2YXIiLHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoTGV4aWNhbERlY2xhcmF0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudHlwZT1LdC5WYXJpYWJsZURlY2xhcmF0aW9uLHRoaXMuZGVjbGFyYXRpb25zPWUsdGhpcy5raW5kPXQsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hWYXJpYWJsZURlY2xhcmF0b3I6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50eXBlPUt0LlZhcmlhYmxlRGVjbGFyYXRvcix0aGlzLmlkPWUsdGhpcy5pbml0PXQsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hXaGlsZVN0YXRlbWVudDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnR5cGU9S3QuV2hpbGVTdGF0ZW1lbnQsdGhpcy50ZXN0PWUsdGhpcy5ib2R5PXQsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hXaXRoU3RhdGVtZW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudHlwZT1LdC5XaXRoU3RhdGVtZW50LHRoaXMub2JqZWN0PWUsdGhpcy5ib2R5PXQsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hFeHBvcnRTcGVjaWZpZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50eXBlPUt0LkV4cG9ydFNwZWNpZmllcix0aGlzLmV4cG9ydGVkPXR8fGUsdGhpcy5sb2NhbD1lLHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoSW1wb3J0RGVmYXVsdFNwZWNpZmllcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50eXBlPUt0LkltcG9ydERlZmF1bHRTcGVjaWZpZXIsdGhpcy5sb2NhbD1lLHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnR5cGU9S3QuSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyLHRoaXMubG9jYWw9ZSx0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaEV4cG9ydE5hbWVkRGVjbGFyYXRpb246ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnR5cGU9S3QuRXhwb3J0TmFtZWREZWNsYXJhdGlvbix0aGlzLmRlY2xhcmF0aW9uPWUsdGhpcy5zcGVjaWZpZXJzPXQsdGhpcy5zb3VyY2U9bix0aGlzLmZpbmlzaCgpLHRoaXN9LGZpbmlzaEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50eXBlPUt0LkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbix0aGlzLmRlY2xhcmF0aW9uPWUsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hFeHBvcnRBbGxEZWNsYXJhdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50eXBlPUt0LkV4cG9ydEFsbERlY2xhcmF0aW9uLHRoaXMuc291cmNlPWUsdGhpcy5maW5pc2goKSx0aGlzfSxmaW5pc2hJbXBvcnRTcGVjaWZpZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50eXBlPUt0LkltcG9ydFNwZWNpZmllcix0aGlzLmxvY2FsPWV8fHQsdGhpcy5pbXBvcnRlZD10LHRoaXMuZmluaXNoKCksdGhpc30sZmluaXNoSW1wb3J0RGVjbGFyYXRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50eXBlPUt0LkltcG9ydERlY2xhcmF0aW9uLHRoaXMuc3BlY2lmaWVycz1lLHRoaXMuc291cmNlPXQsdGhpcy5maW5pc2goKSx0aGlzfX0sZS52ZXJzaW9uPSIyLjIuMCIsZS50b2tlbml6ZT16dCxlLnBhcnNlPVZ0LGUuU3ludGF4PWZ1bmN0aW9uKCl7dmFyIGUsdD17fTsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZSYmKHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7Zm9yKGUgaW4gS3QpS3QuaGFzT3duUHJvcGVydHkoZSkmJih0W2VdPUt0W2VdKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmZyZWV6ZSYmT2JqZWN0LmZyZWV6ZSh0KSx0fSgpfSl9LHt9XSw1MjpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPWU/ZS5sZW5ndGg6MDtpZighcilyZXR1cm4tMTtpZigibnVtYmVyIj09dHlwZW9mIG4pbj0wPm4/byhyK24sMCk6bjtlbHNlIGlmKG4pe3ZhciBzPWEoZSx0KTtyZXR1cm4gcj5zJiYodD09PXQ/dD09PWVbc106ZVtzXSE9PWVbc10pP3M6LTF9cmV0dXJuIGkoZSx0LG58fDApfXZhciBpPWUoIi4uL2ludGVybmFsL2Jhc2VJbmRleE9mIiksYT1lKCIuLi9pbnRlcm5hbC9iaW5hcnlJbmRleCIpLG89TWF0aC5tYXg7dC5leHBvcnRzPXJ9LHsiLi4vaW50ZXJuYWwvYmFzZUluZGV4T2YiOjgxLCIuLi9pbnRlcm5hbC9iaW5hcnlJbmRleCI6OTV9XSw1MzpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZT9lLmxlbmd0aDowO3JldHVybiB0P2VbdC0xXTp2b2lkIDB9dC5leHBvcnRzPXJ9LHt9XSw1NDpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7aWYobChlKSYmIXMoZSkmJiEoZSBpbnN0YW5jZW9mIGkpKXtpZihlIGluc3RhbmNlb2YgYSlyZXR1cm4gZTtpZihwLmNhbGwoZSwiX19jaGFpbl9fIikmJnAuY2FsbChlLCJfX3dyYXBwZWRfXyIpKXJldHVybiB1KGUpfXJldHVybiBuZXcgYShlKX12YXIgaT1lKCIuLi9pbnRlcm5hbC9MYXp5V3JhcHBlciIpLGE9ZSgiLi4vaW50ZXJuYWwvTG9kYXNoV3JhcHBlciIpLG89ZSgiLi4vaW50ZXJuYWwvYmFzZUxvZGFzaCIpLHM9ZSgiLi4vbGFuZy9pc0FycmF5IiksbD1lKCIuLi9pbnRlcm5hbC9pc09iamVjdExpa2UiKSx1PWUoIi4uL2ludGVybmFsL3dyYXBwZXJDbG9uZSIpLGM9T2JqZWN0LnByb3RvdHlwZSxwPWMuaGFzT3duUHJvcGVydHk7ci5wcm90b3R5cGU9by5wcm90b3R5cGUsdC5leHBvcnRzPXJ9LHsiLi4vaW50ZXJuYWwvTGF6eVdyYXBwZXIiOjYzLCIuLi9pbnRlcm5hbC9Mb2Rhc2hXcmFwcGVyIjo2NCwiLi4vaW50ZXJuYWwvYmFzZUxvZGFzaCI6ODUsIi4uL2ludGVybmFsL2lzT2JqZWN0TGlrZSI6MTI5LCIuLi9pbnRlcm5hbC93cmFwcGVyQ2xvbmUiOjE0MCwiLi4vbGFuZy9pc0FycmF5IjoxNDN9XSw1NTpbZnVuY3Rpb24oZSx0LG4pe3QuZXhwb3J0cz1lKCIuL2ZvckVhY2giKX0seyIuL2ZvckVhY2giOjU3fV0sNTY6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCIuLi9pbnRlcm5hbC9iYXNlRWFjaCIpLGk9ZSgiLi4vaW50ZXJuYWwvY3JlYXRlRmluZCIpLGE9aShyKTt0LmV4cG9ydHM9YX0seyIuLi9pbnRlcm5hbC9iYXNlRWFjaCI6NzQsIi4uL2ludGVybmFsL2NyZWF0ZUZpbmQiOjEwNX1dLDU3OltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi4vaW50ZXJuYWwvYXJyYXlFYWNoIiksaT1lKCIuLi9pbnRlcm5hbC9iYXNlRWFjaCIpLGE9ZSgiLi4vaW50ZXJuYWwvY3JlYXRlRm9yRWFjaCIpLG89YShyLGkpO3QuZXhwb3J0cz1vfSx7Ii4uL2ludGVybmFsL2FycmF5RWFjaCI6NjYsIi4uL2ludGVybmFsL2Jhc2VFYWNoIjo3NCwiLi4vaW50ZXJuYWwvY3JlYXRlRm9yRWFjaCI6MTA2fV0sNTg6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuLHIpe3ZhciBmPWU/YShlKTowO3JldHVybiBsKGYpfHwoZT1jKGUpLGY9ZS5sZW5ndGgpLG49Im51bWJlciIhPXR5cGVvZiBufHxyJiZzKHQsbixyKT8wOjA+bj9wKGYrbiwwKTpufHwwLCJzdHJpbmciPT10eXBlb2YgZXx8IW8oZSkmJnUoZSk/Zj49biYmZS5pbmRleE9mKHQsbik+LTE6ISFmJiZpKGUsdCxuKT4tMX12YXIgaT1lKCIuLi9pbnRlcm5hbC9iYXNlSW5kZXhPZiIpLGE9ZSgiLi4vaW50ZXJuYWwvZ2V0TGVuZ3RoIiksbz1lKCIuLi9sYW5nL2lzQXJyYXkiKSxzPWUoIi4uL2ludGVybmFsL2lzSXRlcmF0ZWVDYWxsIiksbD1lKCIuLi9pbnRlcm5hbC9pc0xlbmd0aCIpLHU9ZSgiLi4vbGFuZy9pc1N0cmluZyIpLGM9ZSgiLi4vb2JqZWN0L3ZhbHVlcyIpLHA9TWF0aC5tYXg7dC5leHBvcnRzPXJ9LHsiLi4vaW50ZXJuYWwvYmFzZUluZGV4T2YiOjgxLCIuLi9pbnRlcm5hbC9nZXRMZW5ndGgiOjExNSwiLi4vaW50ZXJuYWwvaXNJdGVyYXRlZUNhbGwiOjEyNSwiLi4vaW50ZXJuYWwvaXNMZW5ndGgiOjEyOCwiLi4vbGFuZy9pc0FycmF5IjoxNDMsIi4uL2xhbmcvaXNTdHJpbmciOjE0OSwiLi4vb2JqZWN0L3ZhbHVlcyI6MTU1fV0sNTk6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1zKGUpP2k6bztyZXR1cm4gdD1hKHQsbiwzKSxyKGUsdCl9dmFyIGk9ZSgiLi4vaW50ZXJuYWwvYXJyYXlNYXAiKSxhPWUoIi4uL2ludGVybmFsL2Jhc2VDYWxsYmFjayIpLG89ZSgiLi4vaW50ZXJuYWwvYmFzZU1hcCIpLHM9ZSgiLi4vbGFuZy9pc0FycmF5Iik7dC5leHBvcnRzPXJ9LHsiLi4vaW50ZXJuYWwvYXJyYXlNYXAiOjY3LCIuLi9pbnRlcm5hbC9iYXNlQ2FsbGJhY2siOjcwLCIuLi9pbnRlcm5hbC9iYXNlTWFwIjo4NiwiLi4vbGFuZy9pc0FycmF5IjoxNDN9XSw2MDpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4uL2ludGVybmFsL2dldE5hdGl2ZSIpLGk9cihEYXRlLCJub3ciKSxhPWl8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3QuZXhwb3J0cz1hfSx7Ii4uL2ludGVybmFsL2dldE5hdGl2ZSI6MTE3fV0sNjE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCIuLi9pbnRlcm5hbC9jcmVhdGVXcmFwcGVyIiksaT1lKCIuLi9pbnRlcm5hbC9yZXBsYWNlSG9sZGVycyIpLGE9ZSgiLi9yZXN0UGFyYW0iKSxvPTEscz0zMixsPWEoZnVuY3Rpb24oZSx0LG4pe3ZhciBhPW87aWYobi5sZW5ndGgpe3ZhciB1PWkobixsLnBsYWNlaG9sZGVyKTthfD1zfXJldHVybiByKGUsYSx0LG4sdSl9KTtsLnBsYWNlaG9sZGVyPXt9LHQuZXhwb3J0cz1sfSx7Ii4uL2ludGVybmFsL2NyZWF0ZVdyYXBwZXIiOjEwOSwiLi4vaW50ZXJuYWwvcmVwbGFjZUhvbGRlcnMiOjEzNSwiLi9yZXN0UGFyYW0iOjYyfV0sNjI6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihpKTtyZXR1cm4gdD1hKHZvaWQgMD09PXQ/ZS5sZW5ndGgtMTordHx8MCwwKSxmdW5jdGlvbigpe2Zvcih2YXIgbj1hcmd1bWVudHMscj0tMSxpPWEobi5sZW5ndGgtdCwwKSxvPUFycmF5KGkpOysrcjxpOylvW3JdPW5bdCtyXTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodGhpcyxvKTtjYXNlIDE6cmV0dXJuIGUuY2FsbCh0aGlzLG5bMF0sbyk7Y2FzZSAyOnJldHVybiBlLmNhbGwodGhpcyxuWzBdLG5bMV0sbyl9dmFyIHM9QXJyYXkodCsxKTtmb3Iocj0tMTsrK3I8dDspc1tyXT1uW3JdO3JldHVybiBzW3RdPW8sZS5hcHBseSh0aGlzLHMpfX12YXIgaT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsYT1NYXRoLm1heDt0LmV4cG9ydHM9cn0se31dLDYzOltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXt0aGlzLl9fd3JhcHBlZF9fPWUsdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fZGlyX189MSx0aGlzLl9fZmlsdGVyZWRfXz0hMSx0aGlzLl9faXRlcmF0ZWVzX189W10sdGhpcy5fX3Rha2VDb3VudF9fPW8sdGhpcy5fX3ZpZXdzX189W119dmFyIGk9ZSgiLi9iYXNlQ3JlYXRlIiksYT1lKCIuL2Jhc2VMb2Rhc2giKSxvPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyLnByb3RvdHlwZT1pKGEucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHQuZXhwb3J0cz1yfSx7Ii4vYmFzZUNyZWF0ZSI6NzMsIi4vYmFzZUxvZGFzaCI6ODV9XSw2NDpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3RoaXMuX193cmFwcGVkX189ZSx0aGlzLl9fYWN0aW9uc19fPW58fFtdLHRoaXMuX19jaGFpbl9fPSEhdH12YXIgaT1lKCIuL2Jhc2VDcmVhdGUiKSxhPWUoIi4vYmFzZUxvZGFzaCIpO3IucHJvdG90eXBlPWkoYS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsdC5leHBvcnRzPXJ9LHsiLi9iYXNlQ3JlYXRlIjo3MywiLi9iYXNlTG9kYXNoIjo4NX1dLDY1OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPS0xLHI9ZS5sZW5ndGg7Zm9yKHR8fCh0PUFycmF5KHIpKTsrK248cjspdFtuXT1lW25dO3JldHVybiB0fXQuZXhwb3J0cz1yfSx7fV0sNjY6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGg7KytuPHImJnQoZVtuXSxuLGUpIT09ITE7KTtyZXR1cm4gZX10LmV4cG9ydHM9cn0se31dLDY3OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoLGk9QXJyYXkocik7KytuPHI7KWlbbl09dChlW25dLG4sZSk7cmV0dXJuIGl9dC5leHBvcnRzPXJ9LHt9XSw2ODpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aDsrK248cjspaWYodChlW25dLG4sZSkpcmV0dXJuITA7cmV0dXJuITF9dC5leHBvcnRzPXJ9LHt9XSw2OTpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gbnVsbD09dD9lOmkodCxhKHQpLGUpfXZhciBpPWUoIi4vYmFzZUNvcHkiKSxhPWUoIi4uL29iamVjdC9rZXlzIik7dC5leHBvcnRzPXJ9LHsiLi4vb2JqZWN0L2tleXMiOjE1MiwiLi9iYXNlQ29weSI6NzJ9XSw3MDpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPXR5cGVvZiBlO3JldHVybiJmdW5jdGlvbiI9PXI/dm9pZCAwPT09dD9lOm8oZSx0LG4pOm51bGw9PWU/czoib2JqZWN0Ij09cj9pKGUpOnZvaWQgMD09PXQ/bChlKTphKGUsdCl9dmFyIGk9ZSgiLi9iYXNlTWF0Y2hlcyIpLGE9ZSgiLi9iYXNlTWF0Y2hlc1Byb3BlcnR5Iiksbz1lKCIuL2JpbmRDYWxsYmFjayIpLHM9ZSgiLi4vdXRpbGl0eS9pZGVudGl0eSIpLGw9ZSgiLi4vdXRpbGl0eS9wcm9wZXJ0eSIpO3QuZXhwb3J0cz1yfSx7Ii4uL3V0aWxpdHkvaWRlbnRpdHkiOjE1NywiLi4vdXRpbGl0eS9wcm9wZXJ0eSI6MTU5LCIuL2Jhc2VNYXRjaGVzIjo4NywiLi9iYXNlTWF0Y2hlc1Byb3BlcnR5Ijo4OCwiLi9iaW5kQ2FsbGJhY2siOjk3fV0sNzE6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuLG0sZyx5LHYpe3ZhciB3O2lmKG4mJih3PWc/bihlLG0sZyk6bihlKSksdm9pZCAwIT09dylyZXR1cm4gdztpZighaChlKSlyZXR1cm4gZTt2YXIgeD1wKGUpO2lmKHgpe2lmKHc9bChlKSwhdClyZXR1cm4gaShlLHcpfWVsc2V7dmFyIEE9Ri5jYWxsKGUpLEM9QT09YjtpZihBIT1TJiZBIT1kJiYoIUN8fGcpKXJldHVybiBNW0FdP3UoZSxBLHQpOmc/ZTp7fTtpZihmKGUpKXJldHVybiBnP2U6e307aWYodz1jKEM/e306ZSksIXQpcmV0dXJuIG8odyxlKX15fHwoeT1bXSksdnx8KHY9W10pO2Zvcih2YXIgRT15Lmxlbmd0aDtFLS07KWlmKHlbRV09PWUpcmV0dXJuIHZbRV07cmV0dXJuIHkucHVzaChlKSx2LnB1c2godyksKHg/YTpzKShlLGZ1bmN0aW9uKGksYSl7d1thXT1yKGksdCxuLGEsZSx5LHYpfSksd312YXIgaT1lKCIuL2FycmF5Q29weSIpLGE9ZSgiLi9hcnJheUVhY2giKSxvPWUoIi4vYmFzZUFzc2lnbiIpLHM9ZSgiLi9iYXNlRm9yT3duIiksbD1lKCIuL2luaXRDbG9uZUFycmF5IiksdT1lKCIuL2luaXRDbG9uZUJ5VGFnIiksYz1lKCIuL2luaXRDbG9uZU9iamVjdCIpLHA9ZSgiLi4vbGFuZy9pc0FycmF5IiksZj1lKCIuL2lzSG9zdE9iamVjdCIpLGg9ZSgiLi4vbGFuZy9pc09iamVjdCIpLGQ9IltvYmplY3QgQXJndW1lbnRzXSIsbT0iW29iamVjdCBBcnJheV0iLGc9IltvYmplY3QgQm9vbGVhbl0iLHk9IltvYmplY3QgRGF0ZV0iLHY9IltvYmplY3QgRXJyb3JdIixiPSJbb2JqZWN0IEZ1bmN0aW9uXSIsdz0iW29iamVjdCBNYXBdIix4PSJbb2JqZWN0IE51bWJlcl0iLFM9IltvYmplY3QgT2JqZWN0XSIsQT0iW29iamVjdCBSZWdFeHBdIixDPSJbb2JqZWN0IFNldF0iLEU9IltvYmplY3QgU3RyaW5nXSIsaz0iW29iamVjdCBXZWFrTWFwXSIsTz0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGo9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsVD0iW29iamVjdCBGbG9hdDY0QXJyYXldIixJPSJbb2JqZWN0IEludDhBcnJheV0iLF89IltvYmplY3QgSW50MTZBcnJheV0iLEQ9IltvYmplY3QgSW50MzJBcnJheV0iLEw9IltvYmplY3QgVWludDhBcnJheV0iLFA9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixOPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsJD0iW29iamVjdCBVaW50MzJBcnJheV0iLE09e307TVtkXT1NW21dPU1bT109TVtnXT1NW3ldPU1bal09TVtUXT1NW0ldPU1bX109TVtEXT1NW3hdPU1bU109TVtBXT1NW0VdPU1bTF09TVtQXT1NW05dPU1bJF09ITAsTVt2XT1NW2JdPU1bd109TVtDXT1NW2tdPSExO3ZhciBSPU9iamVjdC5wcm90b3R5cGUsRj1SLnRvU3RyaW5nO3QuZXhwb3J0cz1yfSx7Ii4uL2xhbmcvaXNBcnJheSI6MTQzLCIuLi9sYW5nL2lzT2JqZWN0IjoxNDcsIi4vYXJyYXlDb3B5Ijo2NSwiLi9hcnJheUVhY2giOjY2LCIuL2Jhc2VBc3NpZ24iOjY5LCIuL2Jhc2VGb3JPd24iOjc5LCIuL2luaXRDbG9uZUFycmF5IjoxMTksIi4vaW5pdENsb25lQnlUYWciOjEyMCwiLi9pbml0Q2xvbmVPYmplY3QiOjEyMSwiLi9pc0hvc3RPYmplY3QiOjEyM31dLDcyOltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7bnx8KG49e30pO2Zvcih2YXIgcj0tMSxpPXQubGVuZ3RoOysrcjxpOyl7dmFyIGE9dFtyXTtuW2FdPWVbYV19cmV0dXJuIG59dC5leHBvcnRzPXJ9LHt9XSw3MzpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4uL2xhbmcvaXNPYmplY3QiKSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZnVuY3Rpb24odCl7aWYocih0KSl7ZS5wcm90b3R5cGU9dDt2YXIgbj1uZXcgZTtlLnByb3RvdHlwZT12b2lkIDB9cmV0dXJuIG58fHt9fX0oKTt0LmV4cG9ydHM9aX0seyIuLi9sYW5nL2lzT2JqZWN0IjoxNDd9XSw3NDpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4vYmFzZUZvck93biIpLGk9ZSgiLi9jcmVhdGVCYXNlRWFjaCIpLGE9aShyKTt0LmV4cG9ydHM9YX0seyIuL2Jhc2VGb3JPd24iOjc5LCIuL2NyZWF0ZUJhc2VFYWNoIjoxMDF9XSw3NTpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4scil7dmFyIGk7cmV0dXJuIG4oZSxmdW5jdGlvbihlLG4sYSl7cmV0dXJuIHQoZSxuLGEpPyhpPXI/bjplLCExKTp2b2lkIDB9KSxpfXQuZXhwb3J0cz1yfSx7fV0sNzY6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXtmb3IodmFyIHI9ZS5sZW5ndGgsaT1uP3I6LTE7bj9pLS06KytpPHI7KWlmKHQoZVtpXSxpLGUpKXJldHVybiBpO3JldHVybi0xfXQuZXhwb3J0cz1yfSx7fV0sNzc6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCIuL2NyZWF0ZUJhc2VGb3IiKSxpPXIoKTt0LmV4cG9ydHM9aX0seyIuL2NyZWF0ZUJhc2VGb3IiOjEwMn1dLDc4OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBpKGUsdCxhKX12YXIgaT1lKCIuL2Jhc2VGb3IiKSxhPWUoIi4uL29iamVjdC9rZXlzSW4iKTt0LmV4cG9ydHM9cn0seyIuLi9vYmplY3Qva2V5c0luIjoxNTMsIi4vYmFzZUZvciI6Nzd9XSw3OTpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gaShlLHQsYSl9dmFyIGk9ZSgiLi9iYXNlRm9yIiksYT1lKCIuLi9vYmplY3Qva2V5cyIpO3QuZXhwb3J0cz1yfSx7Ii4uL29iamVjdC9rZXlzIjoxNTIsIi4vYmFzZUZvciI6Nzd9XSw4MDpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe2lmKG51bGwhPWUpe2U9aShlKSx2b2lkIDAhPT1uJiZuIGluIGUmJih0PVtuXSk7Zm9yKHZhciByPTAsYT10Lmxlbmd0aDtudWxsIT1lJiZhPnI7KWU9aShlKVt0W3IrK11dO3JldHVybiByJiZyPT1hP2U6dm9pZCAwfX12YXIgaT1lKCIuL3RvT2JqZWN0Iik7dC5leHBvcnRzPXJ9LHsiLi90b09iamVjdCI6MTM4fV0sODE6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXtpZih0IT09dClyZXR1cm4gaShlLG4pO2Zvcih2YXIgcj1uLTEsYT1lLmxlbmd0aDsrK3I8YTspaWYoZVtyXT09PXQpcmV0dXJuIHI7cmV0dXJuLTF9dmFyIGk9ZSgiLi9pbmRleE9mTmFOIik7dC5leHBvcnRzPXJ9LHsiLi9pbmRleE9mTmFOIjoxMTh9XSw4MjpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4scyxsLHUpe3JldHVybiBlPT09dD8hMDpudWxsPT1lfHxudWxsPT10fHwhYShlKSYmIW8odCk/ZSE9PWUmJnQhPT10OmkoZSx0LHIsbixzLGwsdSl9dmFyIGk9ZSgiLi9iYXNlSXNFcXVhbERlZXAiKSxhPWUoIi4uL2xhbmcvaXNPYmplY3QiKSxvPWUoIi4vaXNPYmplY3RMaWtlIik7dC5leHBvcnRzPXJ9LHsiLi4vbGFuZy9pc09iamVjdCI6MTQ3LCIuL2Jhc2VJc0VxdWFsRGVlcCI6ODMsIi4vaXNPYmplY3RMaWtlIjoxMjl9XSw4MzpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4scixoLGcseSl7dmFyIHY9cyhlKSxiPXModCksdz1wLHg9cDt2fHwodz1tLmNhbGwoZSksdz09Yz93PWY6dyE9ZiYmKHY9dShlKSkpLGJ8fCh4PW0uY2FsbCh0KSx4PT1jP3g9Zjp4IT1mJiYoYj11KHQpKSk7dmFyIFM9dz09ZiYmIWwoZSksQT14PT1mJiYhbCh0KSxDPXc9PXg7aWYoQyYmIXYmJiFTKXJldHVybiBhKGUsdCx3KTtpZighaCl7dmFyIEU9UyYmZC5jYWxsKGUsIl9fd3JhcHBlZF9fIiksaz1BJiZkLmNhbGwodCwiX193cmFwcGVkX18iKTtpZihFfHxrKXJldHVybiBuKEU/ZS52YWx1ZSgpOmUsaz90LnZhbHVlKCk6dCxyLGgsZyx5KX1pZighQylyZXR1cm4hMTtnfHwoZz1bXSkseXx8KHk9W10pO2Zvcih2YXIgTz1nLmxlbmd0aDtPLS07KWlmKGdbT109PWUpcmV0dXJuIHlbT109PXQ7Zy5wdXNoKGUpLHkucHVzaCh0KTt2YXIgaj0odj9pOm8pKGUsdCxuLHIsaCxnLHkpO3JldHVybiBnLnBvcCgpLHkucG9wKCksan12YXIgaT1lKCIuL2VxdWFsQXJyYXlzIiksYT1lKCIuL2VxdWFsQnlUYWciKSxvPWUoIi4vZXF1YWxPYmplY3RzIikscz1lKCIuLi9sYW5nL2lzQXJyYXkiKSxsPWUoIi4vaXNIb3N0T2JqZWN0IiksdT1lKCIuLi9sYW5nL2lzVHlwZWRBcnJheSIpLGM9IltvYmplY3QgQXJndW1lbnRzXSIscD0iW29iamVjdCBBcnJheV0iLGY9IltvYmplY3QgT2JqZWN0XSIsaD1PYmplY3QucHJvdG90eXBlLGQ9aC5oYXNPd25Qcm9wZXJ0eSxtPWgudG9TdHJpbmc7dC5leHBvcnRzPXJ9LHsiLi4vbGFuZy9pc0FycmF5IjoxNDMsIi4uL2xhbmcvaXNUeXBlZEFycmF5IjoxNTAsIi4vZXF1YWxBcnJheXMiOjExMCwiLi9lcXVhbEJ5VGFnIjoxMTEsIi4vZXF1YWxPYmplY3RzIjoxMTIsIi4vaXNIb3N0T2JqZWN0IjoxMjN9XSw4NDpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPXQubGVuZ3RoLG89cixzPSFuO2lmKG51bGw9PWUpcmV0dXJuIW87Zm9yKGU9YShlKTtyLS07KXt2YXIgbD10W3JdO2lmKHMmJmxbMl0/bFsxXSE9PWVbbFswXV06IShsWzBdaW4gZSkpcmV0dXJuITF9Zm9yKDsrK3I8bzspe2w9dFtyXTt2YXIgdT1sWzBdLGM9ZVt1XSxwPWxbMV07aWYocyYmbFsyXSl7aWYodm9pZCAwPT09YyYmISh1IGluIGUpKXJldHVybiExfWVsc2V7dmFyIGY9bj9uKGMscCx1KTp2b2lkIDA7aWYoISh2b2lkIDA9PT1mP2kocCxjLG4sITApOmYpKXJldHVybiExfX1yZXR1cm4hMH12YXIgaT1lKCIuL2Jhc2VJc0VxdWFsIiksYT1lKCIuL3RvT2JqZWN0Iik7dC5leHBvcnRzPXJ9LHsiLi9iYXNlSXNFcXVhbCI6ODIsIi4vdG9PYmplY3QiOjEzOH1dLDg1OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcigpe310LmV4cG9ydHM9cn0se31dLDg2OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPS0xLHI9YShlKT9BcnJheShlLmxlbmd0aCk6W107cmV0dXJuIGkoZSxmdW5jdGlvbihlLGksYSl7clsrK25dPXQoZSxpLGEpfSkscn12YXIgaT1lKCIuL2Jhc2VFYWNoIiksYT1lKCIuL2lzQXJyYXlMaWtlIik7dC5leHBvcnRzPXJ9LHsiLi9iYXNlRWFjaCI6NzQsIi4vaXNBcnJheUxpa2UiOjEyMn1dLDg3OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXt2YXIgdD1hKGUpO2lmKDE9PXQubGVuZ3RoJiZ0WzBdWzJdKXt2YXIgbj10WzBdWzBdLHI9dFswXVsxXTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/ITE6KGU9byhlKSxlW25dPT09ciYmKHZvaWQgMCE9PXJ8fG4gaW4gZSkpfX1yZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSx0KX19dmFyIGk9ZSgiLi9iYXNlSXNNYXRjaCIpLGE9ZSgiLi9nZXRNYXRjaERhdGEiKSxvPWUoIi4vdG9PYmplY3QiKTt0LmV4cG9ydHM9cn0seyIuL2Jhc2VJc01hdGNoIjo4NCwiLi9nZXRNYXRjaERhdGEiOjExNiwiLi90b09iamVjdCI6MTM4fV0sODg6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7dmFyIG49cyhlKSxyPWwoZSkmJnUodCksaD1lKyIiO3JldHVybiBlPWYoZSksZnVuY3Rpb24ocyl7aWYobnVsbD09cylyZXR1cm4hMTt2YXIgbD1oO2lmKHM9cChzKSwobnx8IXIpJiYhKGwgaW4gcykpe2lmKHM9MT09ZS5sZW5ndGg/czppKHMsbyhlLDAsLTEpKSxudWxsPT1zKXJldHVybiExO2w9YyhlKSxzPXAocyl9cmV0dXJuIHNbbF09PT10P3ZvaWQgMCE9PXR8fGwgaW4gczphKHQsc1tsXSx2b2lkIDAsITApfX12YXIgaT1lKCIuL2Jhc2VHZXQiKSxhPWUoIi4vYmFzZUlzRXF1YWwiKSxvPWUoIi4vYmFzZVNsaWNlIikscz1lKCIuLi9sYW5nL2lzQXJyYXkiKSxsPWUoIi4vaXNLZXkiKSx1PWUoIi4vaXNTdHJpY3RDb21wYXJhYmxlIiksYz1lKCIuLi9hcnJheS9sYXN0IikscD1lKCIuL3RvT2JqZWN0IiksZj1lKCIuL3RvUGF0aCIpO3QuZXhwb3J0cz1yfSx7Ii4uL2FycmF5L2xhc3QiOjUzLCIuLi9sYW5nL2lzQXJyYXkiOjE0MywiLi9iYXNlR2V0Ijo4MCwiLi9iYXNlSXNFcXVhbCI6ODIsIi4vYmFzZVNsaWNlIjo5MiwiLi9pc0tleSI6MTI2LCIuL2lzU3RyaWN0Q29tcGFyYWJsZSI6MTMwLCIuL3RvT2JqZWN0IjoxMzgsIi4vdG9QYXRoIjoxMzl9XSw4OTpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMDppKHQpW2VdfX12YXIgaT1lKCIuL3RvT2JqZWN0Iik7dC5leHBvcnRzPXJ9LHsiLi90b09iamVjdCI6MTM4fV0sOTA6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3ZhciB0PWUrIiI7cmV0dXJuIGU9YShlKSxmdW5jdGlvbihuKXtyZXR1cm4gaShuLGUsdCl9fXZhciBpPWUoIi4vYmFzZUdldCIpLGE9ZSgiLi90b1BhdGgiKTt0LmV4cG9ydHM9cn0seyIuL2Jhc2VHZXQiOjgwLCIuL3RvUGF0aCI6MTM5fV0sOTE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCIuLi91dGlsaXR5L2lkZW50aXR5IiksaT1lKCIuL21ldGFNYXAiKSxhPWk/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5zZXQoZSx0KSxlfTpyO3QuZXhwb3J0cz1hfSx7Ii4uL3V0aWxpdHkvaWRlbnRpdHkiOjE1NywiLi9tZXRhTWFwIjoxMzJ9XSw5MjpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPS0xLGk9ZS5sZW5ndGg7dD1udWxsPT10PzA6K3R8fDAsMD50JiYodD0tdD5pPzA6aSt0KSxuPXZvaWQgMD09PW58fG4+aT9pOitufHwwLDA+biYmKG4rPWkpLGk9dD5uPzA6bi10Pj4+MCx0Pj4+PTA7Zm9yKHZhciBhPUFycmF5KGkpOysrcjxpOylhW3JdPWVbcit0XTtyZXR1cm4gYX10LmV4cG9ydHM9cn0se31dLDkzOltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbnVsbD09ZT8iIjplKyIifXQuZXhwb3J0cz1yfSx7fV0sOTQ6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPS0xLHI9dC5sZW5ndGgsaT1BcnJheShyKTsrK248cjspaVtuXT1lW3Rbbl1dO3JldHVybiBpfXQuZXhwb3J0cz1yfSx7fV0sOTU6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj0wLG89ZT9lLmxlbmd0aDpyO2lmKCJudW1iZXIiPT10eXBlb2YgdCYmdD09PXQmJnM+PW8pe2Zvcig7bz5yOyl7dmFyIGw9citvPj4+MSx1PWVbbF07KG4/dD49dTp0PnUpJiZudWxsIT09dT9yPWwrMTpvPWx9cmV0dXJuIG99cmV0dXJuIGkoZSx0LGEsbil9dmFyIGk9ZSgiLi9iaW5hcnlJbmRleEJ5IiksYT1lKCIuLi91dGlsaXR5L2lkZW50aXR5Iiksbz00Mjk0OTY3Mjk1LHM9bz4+PjE7dC5leHBvcnRzPXJ9LHsiLi4vdXRpbGl0eS9pZGVudGl0eSI6MTU3LCIuL2JpbmFyeUluZGV4QnkiOjk2fV0sOTY6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuLHIpe3Q9bih0KTtmb3IodmFyIG89MCxsPWU/ZS5sZW5ndGg6MCx1PXQhPT10LGM9bnVsbD09PXQscD12b2lkIDA9PT10O2w+bzspe3ZhciBmPWkoKG8rbCkvMiksaD1uKGVbZl0pLGQ9dm9pZCAwIT09aCxtPWg9PT1oO2lmKHUpdmFyIGc9bXx8cjtlbHNlIGc9Yz9tJiZkJiYocnx8bnVsbCE9aCk6cD9tJiYocnx8ZCk6bnVsbD09aD8hMTpyP3Q+PWg6dD5oO2c/bz1mKzE6bD1mfXJldHVybiBhKGwscyl9dmFyIGk9TWF0aC5mbG9vcixhPU1hdGgubWluLG89NDI5NDk2NzI5NSxzPW8tMTt0LmV4cG9ydHM9cn0se31dLDk3OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJuIGk7aWYodm9pZCAwPT09dClyZXR1cm4gZTtzd2l0Y2gobil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZS5jYWxsKHQsbil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixyLGkpe3JldHVybiBlLmNhbGwodCxuLHIsaSl9O2Nhc2UgNDpyZXR1cm4gZnVuY3Rpb24obixyLGksYSl7cmV0dXJuIGUuY2FsbCh0LG4scixpLGEpfTtjYXNlIDU6cmV0dXJuIGZ1bmN0aW9uKG4scixpLGEsbyl7cmV0dXJuIGUuY2FsbCh0LG4scixpLGEsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19dmFyIGk9ZSgiLi4vdXRpbGl0eS9pZGVudGl0eSIpO3QuZXhwb3J0cz1yfSx7Ii4uL3V0aWxpdHkvaWRlbnRpdHkiOjE1N31dLDk4OltmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9bmV3IHIoZS5ieXRlTGVuZ3RoKSxuPW5ldyBpKHQpO3JldHVybiBuLnNldChuZXcgaShlKSksdH12YXIgcj1lLkFycmF5QnVmZmVyLGk9ZS5VaW50OEFycmF5O3QuZXhwb3J0cz1ufSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sOTk6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXtmb3IodmFyIHI9bi5sZW5ndGgsYT0tMSxvPWkoZS5sZW5ndGgtciwwKSxzPS0xLGw9dC5sZW5ndGgsdT1BcnJheShsK28pOysrczxsOyl1W3NdPXRbc107Zm9yKDsrK2E8cjspdVtuW2FdXT1lW2FdO2Zvcig7by0tOyl1W3MrK109ZVthKytdO3JldHVybiB1fXZhciBpPU1hdGgubWF4O3QuZXhwb3J0cz1yfSx7fV0sMTAwOltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7Zm9yKHZhciByPS0xLGE9bi5sZW5ndGgsbz0tMSxzPWkoZS5sZW5ndGgtYSwwKSxsPS0xLHU9dC5sZW5ndGgsYz1BcnJheShzK3UpOysrbzxzOyljW29dPWVbb107Zm9yKHZhciBwPW87KytsPHU7KWNbcCtsXT10W2xdO2Zvcig7KytyPGE7KWNbcCtuW3JdXT1lW28rK107cmV0dXJuIGN9dmFyIGk9TWF0aC5tYXg7dC5leHBvcnRzPXJ9LHt9XSwxMDE6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIHM9bj9pKG4pOjA7aWYoIWEocykpcmV0dXJuIGUobixyKTtmb3IodmFyIGw9dD9zOi0xLHU9byhuKTsodD9sLS06KytsPHMpJiZyKHVbbF0sbCx1KSE9PSExOyk7cmV0dXJuIG59fXZhciBpPWUoIi4vZ2V0TGVuZ3RoIiksYT1lKCIuL2lzTGVuZ3RoIiksbz1lKCIuL3RvT2JqZWN0Iik7dC5leHBvcnRzPXJ9LHsiLi9nZXRMZW5ndGgiOjExNSwiLi9pc0xlbmd0aCI6MTI4LCIuL3RvT2JqZWN0IjoxMzh9XSwxMDI6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7Zm9yKHZhciBhPWkodCksbz1yKHQpLHM9by5sZW5ndGgsbD1lP3M6LTE7ZT9sLS06KytsPHM7KXt2YXIgdT1vW2xdO2lmKG4oYVt1XSx1LGEpPT09ITEpYnJlYWt9cmV0dXJuIHR9fXZhciBpPWUoIi4vdG9PYmplY3QiKTt0LmV4cG9ydHM9cn0seyIuL3RvT2JqZWN0IjoxMzh9XSwxMDM6W2Z1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24obil7ZnVuY3Rpb24gcihlLHQpe2Z1bmN0aW9uIHIoKXt2YXIgaT10aGlzJiZ0aGlzIT09biYmdGhpcyBpbnN0YW5jZW9mIHI/YTplO3JldHVybiBpLmFwcGx5KHQsYXJndW1lbnRzKX12YXIgYT1pKGUpO3JldHVybiByfXZhciBpPWUoIi4vY3JlYXRlQ3RvcldyYXBwZXIiKTt0LmV4cG9ydHM9cn0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2NyZWF0ZUN0b3JXcmFwcGVyIjoxMDR9XSwxMDQ6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IGU7Y2FzZSAxOnJldHVybiBuZXcgZSh0WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBlKHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSk7Y2FzZSA2OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSk7Y2FzZSA3OnJldHVybiBuZXcgZSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSx0WzZdKX12YXIgbj1pKGUucHJvdG90eXBlKSxyPWUuYXBwbHkobix0KTtyZXR1cm4gYShyKT9yOm59fXZhciBpPWUoIi4vYmFzZUNyZWF0ZSIpLGE9ZSgiLi4vbGFuZy9pc09iamVjdCIpO3QuZXhwb3J0cz1yfSx7Ii4uL2xhbmcvaXNPYmplY3QiOjE0NywiLi9iYXNlQ3JlYXRlIjo3M31dLDEwNTpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyLGwpe2lmKHI9aShyLGwsMykscyhuKSl7dmFyIHU9byhuLHIsdCk7cmV0dXJuIHU+LTE/blt1XTp2b2lkIDB9cmV0dXJuIGEobixyLGUpfX12YXIgaT1lKCIuL2Jhc2VDYWxsYmFjayIpLGE9ZSgiLi9iYXNlRmluZCIpLG89ZSgiLi9iYXNlRmluZEluZGV4Iikscz1lKCIuLi9sYW5nL2lzQXJyYXkiKTt0LmV4cG9ydHM9cn0seyIuLi9sYW5nL2lzQXJyYXkiOjE0MywiLi9iYXNlQ2FsbGJhY2siOjcwLCIuL2Jhc2VGaW5kIjo3NSwiLi9iYXNlRmluZEluZGV4Ijo3Nn1dLDEwNjpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyLG8pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByJiZ2b2lkIDA9PT1vJiZhKG4pP2UobixyKTp0KG4saShyLG8sMykpfX12YXIgaT1lKCIuL2JpbmRDYWxsYmFjayIpLGE9ZSgiLi4vbGFuZy9pc0FycmF5Iik7dC5leHBvcnRzPXJ9LHsiLi4vbGFuZy9pc0FycmF5IjoxNDMsIi4vYmluZENhbGxiYWNrIjo5N31dLDEwNzpbZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihuKXtmdW5jdGlvbiByKGUsdCx4LFMsQSxDLEUsayxPLGope2Z1bmN0aW9uIFQoKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxtPWQsZz1BcnJheShkKTttLS07KWdbbV09YXJndW1lbnRzW21dO2lmKFMmJihnPWEoZyxTLEEpKSxDJiYoZz1vKGcsQyxFKSksTHx8Til7dmFyIGI9VC5wbGFjZWhvbGRlcixNPWMoZyxiKTtpZihkLT1NLmxlbmd0aCxqPmQpe3ZhciBSPWs/aShrKTp2b2lkIDAsRj13KGotZCwwKSxVPUw/TTp2b2lkIDAsQj1MP3ZvaWQgMDpNLHE9TD9nOnZvaWQgMCxIPUw/dm9pZCAwOmc7dHw9TD95OnYsdCY9fihMP3Y6eSksUHx8KHQmPX4oZnxoKSk7dmFyIHo9W2UsdCx4LHEsVSxILEIsUixPLEZdLFY9ci5hcHBseSh2b2lkIDAseik7cmV0dXJuIGwoZSkmJnAoVix6KSxWLnBsYWNlaG9sZGVyPWIsVn19dmFyIFc9Xz94OnRoaXMsSj1EP1dbZV06ZTtyZXR1cm4gayYmKGc9dShnLGspKSxJJiZPPGcubGVuZ3RoJiYoZy5sZW5ndGg9TyksdGhpcyYmdGhpcyE9PW4mJnRoaXMgaW5zdGFuY2VvZiBUJiYoSj0kfHxzKGUpKSxKLmFwcGx5KFcsZyl9dmFyIEk9dCZiLF89dCZmLEQ9dCZoLEw9dCZtLFA9dCZkLE49dCZnLCQ9RD92b2lkIDA6cyhlKTtyZXR1cm4gVH12YXIgaT1lKCIuL2FycmF5Q29weSIpLGE9ZSgiLi9jb21wb3NlQXJncyIpLG89ZSgiLi9jb21wb3NlQXJnc1JpZ2h0Iikscz1lKCIuL2NyZWF0ZUN0b3JXcmFwcGVyIiksbD1lKCIuL2lzTGF6aWFibGUiKSx1PWUoIi4vcmVvcmRlciIpLGM9ZSgiLi9yZXBsYWNlSG9sZGVycyIpLHA9ZSgiLi9zZXREYXRhIiksZj0xLGg9MixkPTQsbT04LGc9MTYseT0zMix2PTY0LGI9MTI4LHc9TWF0aC5tYXg7dC5leHBvcnRzPXJ9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9hcnJheUNvcHkiOjY1LCIuL2NvbXBvc2VBcmdzIjo5OSwiLi9jb21wb3NlQXJnc1JpZ2h0IjoxMDAsIi4vY3JlYXRlQ3RvcldyYXBwZXIiOjEwNCwiLi9pc0xhemlhYmxlIjoxMjcsIi4vcmVvcmRlciI6MTM0LCIuL3JlcGxhY2VIb2xkZXJzIjoxMzUsIi4vc2V0RGF0YSI6MTM2fV0sMTA4OltmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHIoZSx0LHIsbyl7ZnVuY3Rpb24gcygpe2Zvcih2YXIgdD0tMSxpPWFyZ3VtZW50cy5sZW5ndGgsYT0tMSxjPW8ubGVuZ3RoLHA9QXJyYXkoYytpKTsrK2E8YzspcFthXT1vW2FdO2Zvcig7aS0tOylwW2ErK109YXJndW1lbnRzWysrdF07dmFyIGY9dGhpcyYmdGhpcyE9PW4mJnRoaXMgaW5zdGFuY2VvZiBzP3U6ZTtyZXR1cm4gZi5hcHBseShsP3I6dGhpcyxwKX12YXIgbD10JmEsdT1pKGUpO3JldHVybiBzfXZhciBpPWUoIi4vY3JlYXRlQ3RvcldyYXBwZXIiKSxhPTE7dC5leHBvcnRzPXJ9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9jcmVhdGVDdG9yV3JhcHBlciI6MTA0fV0sMTA5OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbixyLHksdixiLHcpe3ZhciB4PXQmZjtpZigheCYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihtKTt2YXIgUz1yP3IubGVuZ3RoOjA7aWYoU3x8KHQmPX4oaHxkKSxyPXk9dm9pZCAwKSxTLT15P3kubGVuZ3RoOjAsdCZkKXt2YXIgQT1yLEM9eTtyPXk9dm9pZCAwfXZhciBFPXg/dm9pZCAwOmwoZSksaz1bZSx0LG4scix5LEEsQyx2LGIsd107aWYoRSYmKHUoayxFKSx0PWtbMV0sdz1rWzldKSxrWzldPW51bGw9PXc/eD8wOmUubGVuZ3RoOmcody1TLDApfHwwLHQ9PXApdmFyIE89YShrWzBdLGtbMl0pO2Vsc2UgTz10IT1oJiZ0IT0ocHxoKXx8a1s0XS5sZW5ndGg/by5hcHBseSh2b2lkIDAsayk6cy5hcHBseSh2b2lkIDAsayk7dmFyIGo9RT9pOmM7cmV0dXJuIGooTyxrKX12YXIgaT1lKCIuL2Jhc2VTZXREYXRhIiksYT1lKCIuL2NyZWF0ZUJpbmRXcmFwcGVyIiksbz1lKCIuL2NyZWF0ZUh5YnJpZFdyYXBwZXIiKSxzPWUoIi4vY3JlYXRlUGFydGlhbFdyYXBwZXIiKSxsPWUoIi4vZ2V0RGF0YSIpLHU9ZSgiLi9tZXJnZURhdGEiKSxjPWUoIi4vc2V0RGF0YSIpLHA9MSxmPTIsaD0zMixkPTY0LG09IkV4cGVjdGVkIGEgZnVuY3Rpb24iLGc9TWF0aC5tYXg7dC5leHBvcnRzPXJ9LHsiLi9iYXNlU2V0RGF0YSI6OTEsIi4vY3JlYXRlQmluZFdyYXBwZXIiOjEwMywiLi9jcmVhdGVIeWJyaWRXcmFwcGVyIjoxMDcsIi4vY3JlYXRlUGFydGlhbFdyYXBwZXIiOjEwOCwiLi9nZXREYXRhIjoxMTMsIi4vbWVyZ2VEYXRhIjoxMzEsIi4vc2V0RGF0YSI6MTM2fV0sMTEwOltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbixyLGEsbyxzKXt2YXIgbD0tMSx1PWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYodSE9YyYmIShhJiZjPnUpKXJldHVybiExO2Zvcig7KytsPHU7KXt2YXIgcD1lW2xdLGY9dFtsXSxoPXI/cihhP2Y6cCxhP3A6ZixsKTp2b2lkIDA7aWYodm9pZCAwIT09aCl7aWYoaCljb250aW51ZTtyZXR1cm4hMX1pZihhKXtpZighaSh0LGZ1bmN0aW9uKGUpe3JldHVybiBwPT09ZXx8bihwLGUscixhLG8scyl9KSlyZXR1cm4hMX1lbHNlIGlmKHAhPT1mJiYhbihwLGYscixhLG8scykpcmV0dXJuITF9cmV0dXJuITB9dmFyIGk9ZSgiLi9hcnJheVNvbWUiKTt0LmV4cG9ydHM9cn0seyIuL2FycmF5U29tZSI6Njh9XSwxMTE6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXtzd2l0Y2gobil7Y2FzZSBpOmNhc2UgYTpyZXR1cm4rZT09K3Q7Y2FzZSBvOnJldHVybiBlLm5hbWU9PXQubmFtZSYmZS5tZXNzYWdlPT10Lm1lc3NhZ2U7Y2FzZSBzOnJldHVybiBlIT0rZT90IT0rdDplPT0rdDtjYXNlIGw6Y2FzZSB1OnJldHVybiBlPT10KyIifXJldHVybiExfXZhciBpPSJbb2JqZWN0IEJvb2xlYW5dIixhPSJbb2JqZWN0IERhdGVdIixvPSJbb2JqZWN0IEVycm9yXSIscz0iW29iamVjdCBOdW1iZXJdIixsPSJbb2JqZWN0IFJlZ0V4cF0iLHU9IltvYmplY3QgU3RyaW5nXSI7dC5leHBvcnRzPXJ9LHt9XSwxMTI6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuLHIsYSxzLGwpe3ZhciB1PWkoZSksYz11Lmxlbmd0aCxwPWkodCksZj1wLmxlbmd0aDtpZihjIT1mJiYhYSlyZXR1cm4hMTtmb3IodmFyIGg9YztoLS07KXt2YXIgZD11W2hdO2lmKCEoYT9kIGluIHQ6by5jYWxsKHQsZCkpKXJldHVybiExfWZvcih2YXIgbT1hOysraDxjOyl7ZD11W2hdO3ZhciBnPWVbZF0seT10W2RdLHY9cj9yKGE/eTpnLGE/Zzp5LGQpOnZvaWQgMDtpZighKHZvaWQgMD09PXY/bihnLHkscixhLHMsbCk6dikpcmV0dXJuITE7bXx8KG09ImNvbnN0cnVjdG9yIj09ZCl9aWYoIW0pe3ZhciBiPWUuY29uc3RydWN0b3Isdz10LmNvbnN0cnVjdG9yO2lmKGIhPXcmJiJjb25zdHJ1Y3RvciJpbiBlJiYiY29uc3RydWN0b3IiaW4gdCYmISgiZnVuY3Rpb24iPT10eXBlb2YgYiYmYiBpbnN0YW5jZW9mIGImJiJmdW5jdGlvbiI9PXR5cGVvZiB3JiZ3IGluc3RhbmNlb2YgdykpcmV0dXJuITF9cmV0dXJuITB9dmFyIGk9ZSgiLi4vb2JqZWN0L2tleXMiKSxhPU9iamVjdC5wcm90b3R5cGUsbz1hLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1yfSx7Ii4uL29iamVjdC9rZXlzIjoxNTJ9XSwxMTM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCIuL21ldGFNYXAiKSxpPWUoIi4uL3V0aWxpdHkvbm9vcCIpLGE9cj9mdW5jdGlvbihlKXtyZXR1cm4gci5nZXQoZSl9Omk7dC5leHBvcnRzPWF9LHsiLi4vdXRpbGl0eS9ub29wIjoxNTgsIi4vbWV0YU1hcCI6MTMyfV0sMTE0OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9ZS5uYW1lLG49aVt0XSxyPW4/bi5sZW5ndGg6MDtyLS07KXt2YXIgYT1uW3JdLG89YS5mdW5jO2lmKG51bGw9PW98fG89PWUpcmV0dXJuIGEubmFtZX1yZXR1cm4gdH12YXIgaT1lKCIuL3JlYWxOYW1lcyIpO3QuZXhwb3J0cz1yfSx7Ii4vcmVhbE5hbWVzIjoxMzN9XSwxMTU6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCIuL2Jhc2VQcm9wZXJ0eSIpLGk9cigibGVuZ3RoIik7dC5leHBvcnRzPWl9LHsiLi9iYXNlUHJvcGVydHkiOjg5fV0sMTE2OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9YShlKSxuPXQubGVuZ3RoO24tLTspdFtuXVsyXT1pKHRbbl1bMV0pO3JldHVybiB0fXZhciBpPWUoIi4vaXNTdHJpY3RDb21wYXJhYmxlIiksYT1lKCIuLi9vYmplY3QvcGFpcnMiKTt0LmV4cG9ydHM9cn0seyIuLi9vYmplY3QvcGFpcnMiOjE1NCwiLi9pc1N0cmljdENvbXBhcmFibGUiOjEzMH1dLDExNzpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj1udWxsPT1lP3ZvaWQgMDplW3RdO3JldHVybiBpKG4pP246dm9pZCAwfXZhciBpPWUoIi4uL2xhbmcvaXNOYXRpdmUiKTt0LmV4cG9ydHM9cn0seyIuLi9sYW5nL2lzTmF0aXZlIjoxNDZ9XSwxMTg6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXtmb3IodmFyIHI9ZS5sZW5ndGgsaT10KyhuPzA6LTEpO24/aS0tOisraTxyOyl7dmFyIGE9ZVtpXTtpZihhIT09YSlyZXR1cm4gaX1yZXR1cm4tMX10LmV4cG9ydHM9cn0se31dLDExOTpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5sZW5ndGgsbj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmInN0cmluZyI9PXR5cGVvZiBlWzBdJiZhLmNhbGwoZSwiaW5kZXgiKSYmKG4uaW5kZXg9ZS5pbmRleCxuLmlucHV0PWUuaW5wdXQpLG59dmFyIGk9T2JqZWN0LnByb3RvdHlwZSxhPWkuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPXJ9LHt9XSwxMjA6W2Z1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24obil7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9ZS5jb25zdHJ1Y3Rvcjtzd2l0Y2godCl7Y2FzZSBjOnJldHVybiBpKGUpO2Nhc2UgYTpjYXNlIG86cmV0dXJuIG5ldyByKCtlKTtjYXNlIHA6Y2FzZSBmOmNhc2UgaDpjYXNlIGQ6Y2FzZSBtOmNhc2UgZzpjYXNlIHk6Y2FzZSB2OmNhc2UgYjpyIGluc3RhbmNlb2YgciYmKHI9U1t0XSk7dmFyIHg9ZS5idWZmZXI7cmV0dXJuIG5ldyByKG4/aSh4KTp4LGUuYnl0ZU9mZnNldCxlLmxlbmd0aCk7Y2FzZSBzOmNhc2UgdTpyZXR1cm4gbmV3IHIoZSk7Y2FzZSBsOnZhciBBPW5ldyByKGUuc291cmNlLHcuZXhlYyhlKSk7QS5sYXN0SW5kZXg9ZS5sYXN0SW5kZXh9cmV0dXJuIEF9dmFyIGk9ZSgiLi9idWZmZXJDbG9uZSIpLGE9IltvYmplY3QgQm9vbGVhbl0iLG89IltvYmplY3QgRGF0ZV0iLHM9IltvYmplY3QgTnVtYmVyXSIsbD0iW29iamVjdCBSZWdFeHBdIix1PSJbb2JqZWN0IFN0cmluZ10iLGM9IltvYmplY3QgQXJyYXlCdWZmZXJdIixwPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGY9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsaD0iW29iamVjdCBJbnQ4QXJyYXldIixkPSJbb2JqZWN0IEludDE2QXJyYXldIixtPSJbb2JqZWN0IEludDMyQXJyYXldIixnPSJbb2JqZWN0IFVpbnQ4QXJyYXldIix5PSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsdj0iW29iamVjdCBVaW50MTZBcnJheV0iLGI9IltvYmplY3QgVWludDMyQXJyYXldIix3PS9cdyokLyx4PW4uVWludDhBcnJheSxTPXt9O1NbcF09bi5GbG9hdDMyQXJyYXksU1tmXT1uLkZsb2F0NjRBcnJheSxTW2hdPW4uSW50OEFycmF5LFNbZF09bi5JbnQxNkFycmF5LFNbbV09bi5JbnQzMkFycmF5LFNbZ109eCxTW3ldPW4uVWludDhDbGFtcGVkQXJyYXksU1t2XT1uLlVpbnQxNkFycmF5LFNbYl09bi5VaW50MzJBcnJheSx0LmV4cG9ydHM9cn0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2J1ZmZlckNsb25lIjo5OH1dLDEyMTpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmdCBpbnN0YW5jZW9mIHR8fCh0PU9iamVjdCksbmV3IHR9dC5leHBvcnRzPXJ9LHt9XSwxMjI6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBudWxsIT1lJiZhKGkoZSkpfXZhciBpPWUoIi4vZ2V0TGVuZ3RoIiksYT1lKCIuL2lzTGVuZ3RoIik7dC5leHBvcnRzPXJ9LHsiLi9nZXRMZW5ndGgiOjExNSwiLi9pc0xlbmd0aCI6MTI4fV0sMTIzOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24oKXt0cnl7T2JqZWN0KHt0b1N0cmluZzowfSsiIil9Y2F0Y2goZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITF9fXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZyYmInN0cmluZyI9PXR5cGVvZihlKyIiKX19KCk7dC5leHBvcnRzPXJ9LHt9XSwxMjQ6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGU9Im51bWJlciI9PXR5cGVvZiBlfHxpLnRlc3QoZSk/K2U6LTEsdD1udWxsPT10P2E6dCxlPi0xJiZlJTE9PTAmJnQ+ZX12YXIgaT0vXlxkKyQvLGE9OTAwNzE5OTI1NDc0MDk5MTt0LmV4cG9ydHM9cn0se31dLDEyNTpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe2lmKCFvKG4pKXJldHVybiExO3ZhciByPXR5cGVvZiB0O2lmKCJudW1iZXIiPT1yP2kobikmJmEodCxuLmxlbmd0aCk6InN0cmluZyI9PXImJnQgaW4gbil7dmFyIHM9blt0XTtyZXR1cm4gZT09PWU/ZT09PXM6cyE9PXN9cmV0dXJuITF9dmFyIGk9ZSgiLi9pc0FycmF5TGlrZSIpLGE9ZSgiLi9pc0luZGV4Iiksbz1lKCIuLi9sYW5nL2lzT2JqZWN0Iik7dC5leHBvcnRzPXJ9LHsiLi4vbGFuZy9pc09iamVjdCI6MTQ3LCIuL2lzQXJyYXlMaWtlIjoxMjIsIi4vaXNJbmRleCI6MTI0fV0sMTI2OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXR5cGVvZiBlO2lmKCJzdHJpbmciPT1uJiZzLnRlc3QoZSl8fCJudW1iZXIiPT1uKXJldHVybiEwO2lmKGkoZSkpcmV0dXJuITE7dmFyIHI9IW8udGVzdChlKTtyZXR1cm4gcnx8bnVsbCE9dCYmZSBpbiBhKHQpfXZhciBpPWUoIi4uL2xhbmcvaXNBcnJheSIpLGE9ZSgiLi90b09iamVjdCIpLG89L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxuXFxdfFxcLikqP1wxKVxdLyxzPS9eXHcqJC87dC5leHBvcnRzPXJ9LHsiLi4vbGFuZy9pc0FycmF5IjoxNDMsIi4vdG9PYmplY3QiOjEzOH1dLDEyNzpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7CnZhciB0PW8oZSk7aWYoISh0IGluIGkucHJvdG90eXBlKSlyZXR1cm4hMTt2YXIgbj1zW3RdO2lmKGU9PT1uKXJldHVybiEwO3ZhciByPWEobik7cmV0dXJuISFyJiZlPT09clswXX12YXIgaT1lKCIuL0xhenlXcmFwcGVyIiksYT1lKCIuL2dldERhdGEiKSxvPWUoIi4vZ2V0RnVuY05hbWUiKSxzPWUoIi4uL2NoYWluL2xvZGFzaCIpO3QuZXhwb3J0cz1yfSx7Ii4uL2NoYWluL2xvZGFzaCI6NTQsIi4vTGF6eVdyYXBwZXIiOjYzLCIuL2dldERhdGEiOjExMywiLi9nZXRGdW5jTmFtZSI6MTE0fV0sMTI4OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGUmJmU+LTEmJmUlMT09MCYmaT49ZX12YXIgaT05MDA3MTk5MjU0NzQwOTkxO3QuZXhwb3J0cz1yfSx7fV0sMTI5OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4hIWUmJiJvYmplY3QiPT10eXBlb2YgZX10LmV4cG9ydHM9cn0se31dLDEzMDpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGU9PT1lJiYhaShlKX12YXIgaT1lKCIuLi9sYW5nL2lzT2JqZWN0Iik7dC5leHBvcnRzPXJ9LHsiLi4vbGFuZy9pc09iamVjdCI6MTQ3fV0sMTMxOltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPWVbMV0scj10WzFdLG09bnxyLGc9cD5tLHk9cj09cCYmbj09Y3x8cj09cCYmbj09ZiYmZVs3XS5sZW5ndGg8PXRbOF18fHI9PShwfGYpJiZuPT1jO2lmKCFnJiYheSlyZXR1cm4gZTtyJmwmJihlWzJdPXRbMl0sbXw9biZsPzA6dSk7dmFyIHY9dFszXTtpZih2KXt2YXIgYj1lWzNdO2VbM109Yj9hKGIsdix0WzRdKTppKHYpLGVbNF09Yj9zKGVbM10saCk6aSh0WzRdKX1yZXR1cm4gdj10WzVdLHYmJihiPWVbNV0sZVs1XT1iP28oYix2LHRbNl0pOmkodiksZVs2XT1iP3MoZVs1XSxoKTppKHRbNl0pKSx2PXRbN10sdiYmKGVbN109aSh2KSksciZwJiYoZVs4XT1udWxsPT1lWzhdP3RbOF06ZChlWzhdLHRbOF0pKSxudWxsPT1lWzldJiYoZVs5XT10WzldKSxlWzBdPXRbMF0sZVsxXT1tLGV9dmFyIGk9ZSgiLi9hcnJheUNvcHkiKSxhPWUoIi4vY29tcG9zZUFyZ3MiKSxvPWUoIi4vY29tcG9zZUFyZ3NSaWdodCIpLHM9ZSgiLi9yZXBsYWNlSG9sZGVycyIpLGw9MSx1PTQsYz04LHA9MTI4LGY9MjU2LGg9Il9fbG9kYXNoX3BsYWNlaG9sZGVyX18iLGQ9TWF0aC5taW47dC5leHBvcnRzPXJ9LHsiLi9hcnJheUNvcHkiOjY1LCIuL2NvbXBvc2VBcmdzIjo5OSwiLi9jb21wb3NlQXJnc1JpZ2h0IjoxMDAsIi4vcmVwbGFjZUhvbGRlcnMiOjEzNX1dLDEzMjpbZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihuKXt2YXIgcj1lKCIuL2dldE5hdGl2ZSIpLGk9cihuLCJXZWFrTWFwIiksYT1pJiZuZXcgaTt0LmV4cG9ydHM9YX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2dldE5hdGl2ZSI6MTE3fV0sMTMzOltmdW5jdGlvbihlLHQsbil7dmFyIHI9e307dC5leHBvcnRzPXJ9LHt9XSwxMzQ6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9byh0Lmxlbmd0aCxuKSxzPWkoZSk7ci0tOyl7dmFyIGw9dFtyXTtlW3JdPWEobCxuKT9zW2xdOnZvaWQgMH1yZXR1cm4gZX12YXIgaT1lKCIuL2FycmF5Q29weSIpLGE9ZSgiLi9pc0luZGV4Iiksbz1NYXRoLm1pbjt0LmV4cG9ydHM9cn0seyIuL2FycmF5Q29weSI6NjUsIi4vaXNJbmRleCI6MTI0fV0sMTM1OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoLGE9LTEsbz1bXTsrK248cjspZVtuXT09PXQmJihlW25dPWksb1srK2FdPW4pO3JldHVybiBvfXZhciBpPSJfX2xvZGFzaF9wbGFjZWhvbGRlcl9fIjt0LmV4cG9ydHM9cn0se31dLDEzNjpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4vYmFzZVNldERhdGEiKSxpPWUoIi4uL2RhdGUvbm93IiksYT0xNTAsbz0xNixzPWZ1bmN0aW9uKCl7dmFyIGU9MCx0PTA7cmV0dXJuIGZ1bmN0aW9uKG4scyl7dmFyIGw9aSgpLHU9by0obC10KTtpZih0PWwsdT4wKXtpZigrK2U+PWEpcmV0dXJuIG59ZWxzZSBlPTA7cmV0dXJuIHIobixzKX19KCk7dC5leHBvcnRzPXN9LHsiLi4vZGF0ZS9ub3ciOjYwLCIuL2Jhc2VTZXREYXRhIjo5MX1dLDEzNzpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PXUoZSksbj10Lmxlbmd0aCxyPW4mJmUubGVuZ3RoLGM9ISFyJiZzKHIpJiYoYShlKXx8aShlKXx8bChlKSksZj0tMSxoPVtdOysrZjxuOyl7dmFyIGQ9dFtmXTsoYyYmbyhkLHIpfHxwLmNhbGwoZSxkKSkmJmgucHVzaChkKX1yZXR1cm4gaH12YXIgaT1lKCIuLi9sYW5nL2lzQXJndW1lbnRzIiksYT1lKCIuLi9sYW5nL2lzQXJyYXkiKSxvPWUoIi4vaXNJbmRleCIpLHM9ZSgiLi9pc0xlbmd0aCIpLGw9ZSgiLi4vbGFuZy9pc1N0cmluZyIpLHU9ZSgiLi4vb2JqZWN0L2tleXNJbiIpLGM9T2JqZWN0LnByb3RvdHlwZSxwPWMuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPXJ9LHsiLi4vbGFuZy9pc0FyZ3VtZW50cyI6MTQyLCIuLi9sYW5nL2lzQXJyYXkiOjE0MywiLi4vbGFuZy9pc1N0cmluZyI6MTQ5LCIuLi9vYmplY3Qva2V5c0luIjoxNTMsIi4vaXNJbmRleCI6MTI0LCIuL2lzTGVuZ3RoIjoxMjh9XSwxMzg6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe2lmKG8udW5pbmRleGVkQ2hhcnMmJmEoZSkpe2Zvcih2YXIgdD0tMSxuPWUubGVuZ3RoLHI9T2JqZWN0KGUpOysrdDxuOylyW3RdPWUuY2hhckF0KHQpO3JldHVybiByfXJldHVybiBpKGUpP2U6T2JqZWN0KGUpfXZhciBpPWUoIi4uL2xhbmcvaXNPYmplY3QiKSxhPWUoIi4uL2xhbmcvaXNTdHJpbmciKSxvPWUoIi4uL3N1cHBvcnQiKTt0LmV4cG9ydHM9cn0seyIuLi9sYW5nL2lzT2JqZWN0IjoxNDcsIi4uL2xhbmcvaXNTdHJpbmciOjE0OSwiLi4vc3VwcG9ydCI6MTU2fV0sMTM5OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtpZihhKGUpKXJldHVybiBlO3ZhciB0PVtdO3JldHVybiBpKGUpLnJlcGxhY2UobyxmdW5jdGlvbihlLG4scixpKXt0LnB1c2gocj9pLnJlcGxhY2UocywiJDEiKTpufHxlKX0pLHR9dmFyIGk9ZSgiLi9iYXNlVG9TdHJpbmciKSxhPWUoIi4uL2xhbmcvaXNBcnJheSIpLG89L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXG5cXF18XFwuKSo/KVwyKVxdL2cscz0vXFwoXFwpPy9nO3QuZXhwb3J0cz1yfSx7Ii4uL2xhbmcvaXNBcnJheSI6MTQzLCIuL2Jhc2VUb1N0cmluZyI6OTN9XSwxNDA6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBlIGluc3RhbmNlb2YgaT9lLmNsb25lKCk6bmV3IGEoZS5fX3dyYXBwZWRfXyxlLl9fY2hhaW5fXyxvKGUuX19hY3Rpb25zX18pKX12YXIgaT1lKCIuL0xhenlXcmFwcGVyIiksYT1lKCIuL0xvZGFzaFdyYXBwZXIiKSxvPWUoIi4vYXJyYXlDb3B5Iik7dC5leHBvcnRzPXJ9LHsiLi9MYXp5V3JhcHBlciI6NjMsIi4vTG9kYXNoV3JhcHBlciI6NjQsIi4vYXJyYXlDb3B5Ijo2NX1dLDE0MTpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0LG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P2koZSwhMCxhKHQsbiwxKSk6aShlLCEwKX12YXIgaT1lKCIuLi9pbnRlcm5hbC9iYXNlQ2xvbmUiKSxhPWUoIi4uL2ludGVybmFsL2JpbmRDYWxsYmFjayIpO3QuZXhwb3J0cz1yfSx7Ii4uL2ludGVybmFsL2Jhc2VDbG9uZSI6NzEsIi4uL2ludGVybmFsL2JpbmRDYWxsYmFjayI6OTd9XSwxNDI6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBhKGUpJiZpKGUpJiZzLmNhbGwoZSwiY2FsbGVlIikmJiFsLmNhbGwoZSwiY2FsbGVlIil9dmFyIGk9ZSgiLi4vaW50ZXJuYWwvaXNBcnJheUxpa2UiKSxhPWUoIi4uL2ludGVybmFsL2lzT2JqZWN0TGlrZSIpLG89T2JqZWN0LnByb3RvdHlwZSxzPW8uaGFzT3duUHJvcGVydHksbD1vLnByb3BlcnR5SXNFbnVtZXJhYmxlO3QuZXhwb3J0cz1yfSx7Ii4uL2ludGVybmFsL2lzQXJyYXlMaWtlIjoxMjIsIi4uL2ludGVybmFsL2lzT2JqZWN0TGlrZSI6MTI5fV0sMTQzOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi4vaW50ZXJuYWwvZ2V0TmF0aXZlIiksaT1lKCIuLi9pbnRlcm5hbC9pc0xlbmd0aCIpLGE9ZSgiLi4vaW50ZXJuYWwvaXNPYmplY3RMaWtlIiksbz0iW29iamVjdCBBcnJheV0iLHM9T2JqZWN0LnByb3RvdHlwZSxsPXMudG9TdHJpbmcsdT1yKEFycmF5LCJpc0FycmF5IiksYz11fHxmdW5jdGlvbihlKXtyZXR1cm4gYShlKSYmaShlLmxlbmd0aCkmJmwuY2FsbChlKT09b307dC5leHBvcnRzPWN9LHsiLi4vaW50ZXJuYWwvZ2V0TmF0aXZlIjoxMTcsIi4uL2ludGVybmFsL2lzTGVuZ3RoIjoxMjgsIi4uL2ludGVybmFsL2lzT2JqZWN0TGlrZSI6MTI5fV0sMTQ0OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbnVsbD09ZT8hMDpvKGUpJiYoYShlKXx8dShlKXx8aShlKXx8bChlKSYmcyhlLnNwbGljZSkpPyFlLmxlbmd0aDohYyhlKS5sZW5ndGh9dmFyIGk9ZSgiLi9pc0FyZ3VtZW50cyIpLGE9ZSgiLi9pc0FycmF5Iiksbz1lKCIuLi9pbnRlcm5hbC9pc0FycmF5TGlrZSIpLHM9ZSgiLi9pc0Z1bmN0aW9uIiksbD1lKCIuLi9pbnRlcm5hbC9pc09iamVjdExpa2UiKSx1PWUoIi4vaXNTdHJpbmciKSxjPWUoIi4uL29iamVjdC9rZXlzIik7dC5leHBvcnRzPXJ9LHsiLi4vaW50ZXJuYWwvaXNBcnJheUxpa2UiOjEyMiwiLi4vaW50ZXJuYWwvaXNPYmplY3RMaWtlIjoxMjksIi4uL29iamVjdC9rZXlzIjoxNTIsIi4vaXNBcmd1bWVudHMiOjE0MiwiLi9pc0FycmF5IjoxNDMsIi4vaXNGdW5jdGlvbiI6MTQ1LCIuL2lzU3RyaW5nIjoxNDl9XSwxNDU6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBpKGUpJiZzLmNhbGwoZSk9PWF9dmFyIGk9ZSgiLi9pc09iamVjdCIpLGE9IltvYmplY3QgRnVuY3Rpb25dIixvPU9iamVjdC5wcm90b3R5cGUscz1vLnRvU3RyaW5nO3QuZXhwb3J0cz1yfSx7Ii4vaXNPYmplY3QiOjE0N31dLDE0NjpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG51bGw9PWU/ITE6aShlKT9wLnRlc3QodS5jYWxsKGUpKTpvKGUpJiYoYShlKT9wOnMpLnRlc3QoZSl9dmFyIGk9ZSgiLi9pc0Z1bmN0aW9uIiksYT1lKCIuLi9pbnRlcm5hbC9pc0hvc3RPYmplY3QiKSxvPWUoIi4uL2ludGVybmFsL2lzT2JqZWN0TGlrZSIpLHM9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sbD1PYmplY3QucHJvdG90eXBlLHU9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLGM9bC5oYXNPd25Qcm9wZXJ0eSxwPVJlZ0V4cCgiXiIrdS5jYWxsKGMpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO3QuZXhwb3J0cz1yfSx7Ii4uL2ludGVybmFsL2lzSG9zdE9iamVjdCI6MTIzLCIuLi9pbnRlcm5hbC9pc09iamVjdExpa2UiOjEyOSwiLi9pc0Z1bmN0aW9uIjoxNDV9XSwxNDc6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKCJvYmplY3QiPT10fHwiZnVuY3Rpb24iPT10KX10LmV4cG9ydHM9cn0se31dLDE0ODpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7dmFyIHQ7aWYoIXMoZSl8fGYuY2FsbChlKSE9dXx8byhlKXx8YShlKXx8IXAuY2FsbChlLCJjb25zdHJ1Y3RvciIpJiYodD1lLmNvbnN0cnVjdG9yLCJmdW5jdGlvbiI9PXR5cGVvZiB0JiYhKHQgaW5zdGFuY2VvZiB0KSkpcmV0dXJuITE7dmFyIG47cmV0dXJuIGwub3duTGFzdD8oaShlLGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbj1wLmNhbGwocix0KSwhMX0pLG4hPT0hMSk6KGkoZSxmdW5jdGlvbihlLHQpe249dH0pLHZvaWQgMD09PW58fHAuY2FsbChlLG4pKX12YXIgaT1lKCIuLi9pbnRlcm5hbC9iYXNlRm9ySW4iKSxhPWUoIi4vaXNBcmd1bWVudHMiKSxvPWUoIi4uL2ludGVybmFsL2lzSG9zdE9iamVjdCIpLHM9ZSgiLi4vaW50ZXJuYWwvaXNPYmplY3RMaWtlIiksbD1lKCIuLi9zdXBwb3J0IiksdT0iW29iamVjdCBPYmplY3RdIixjPU9iamVjdC5wcm90b3R5cGUscD1jLmhhc093blByb3BlcnR5LGY9Yy50b1N0cmluZzt0LmV4cG9ydHM9cn0seyIuLi9pbnRlcm5hbC9iYXNlRm9ySW4iOjc4LCIuLi9pbnRlcm5hbC9pc0hvc3RPYmplY3QiOjEyMywiLi4vaW50ZXJuYWwvaXNPYmplY3RMaWtlIjoxMjksIi4uL3N1cHBvcnQiOjE1NiwiLi9pc0FyZ3VtZW50cyI6MTQyfV0sMTQ5OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV8fGkoZSkmJnMuY2FsbChlKT09YX12YXIgaT1lKCIuLi9pbnRlcm5hbC9pc09iamVjdExpa2UiKSxhPSJbb2JqZWN0IFN0cmluZ10iLG89T2JqZWN0LnByb3RvdHlwZSxzPW8udG9TdHJpbmc7dC5leHBvcnRzPXJ9LHsiLi4vaW50ZXJuYWwvaXNPYmplY3RMaWtlIjoxMjl9XSwxNTA6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBhKGUpJiZpKGUubGVuZ3RoKSYmISFUW18uY2FsbChlKV19dmFyIGk9ZSgiLi4vaW50ZXJuYWwvaXNMZW5ndGgiKSxhPWUoIi4uL2ludGVybmFsL2lzT2JqZWN0TGlrZSIpLG89IltvYmplY3QgQXJndW1lbnRzXSIscz0iW29iamVjdCBBcnJheV0iLGw9IltvYmplY3QgQm9vbGVhbl0iLHU9IltvYmplY3QgRGF0ZV0iLGM9IltvYmplY3QgRXJyb3JdIixwPSJbb2JqZWN0IEZ1bmN0aW9uXSIsZj0iW29iamVjdCBNYXBdIixoPSJbb2JqZWN0IE51bWJlcl0iLGQ9IltvYmplY3QgT2JqZWN0XSIsbT0iW29iamVjdCBSZWdFeHBdIixnPSJbb2JqZWN0IFNldF0iLHk9IltvYmplY3QgU3RyaW5nXSIsdj0iW29iamVjdCBXZWFrTWFwXSIsYj0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLHc9IltvYmplY3QgRmxvYXQzMkFycmF5XSIseD0iW29iamVjdCBGbG9hdDY0QXJyYXldIixTPSJbb2JqZWN0IEludDhBcnJheV0iLEE9IltvYmplY3QgSW50MTZBcnJheV0iLEM9IltvYmplY3QgSW50MzJBcnJheV0iLEU9IltvYmplY3QgVWludDhBcnJheV0iLGs9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixPPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsaj0iW29iamVjdCBVaW50MzJBcnJheV0iLFQ9e307VFt3XT1UW3hdPVRbU109VFtBXT1UW0NdPVRbRV09VFtrXT1UW09dPVRbal09ITAsVFtvXT1UW3NdPVRbYl09VFtsXT1UW3VdPVRbY109VFtwXT1UW2ZdPVRbaF09VFtkXT1UW21dPVRbZ109VFt5XT1UW3ZdPSExO3ZhciBJPU9iamVjdC5wcm90b3R5cGUsXz1JLnRvU3RyaW5nO3QuZXhwb3J0cz1yfSx7Ii4uL2ludGVybmFsL2lzTGVuZ3RoIjoxMjgsIi4uL2ludGVybmFsL2lzT2JqZWN0TGlrZSI6MTI5fV0sMTUxOltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdm9pZCAwPT09ZX10LmV4cG9ydHM9cn0se31dLDE1MjpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4uL2ludGVybmFsL2dldE5hdGl2ZSIpLGk9ZSgiLi4vaW50ZXJuYWwvaXNBcnJheUxpa2UiKSxhPWUoIi4uL2xhbmcvaXNPYmplY3QiKSxvPWUoIi4uL2ludGVybmFsL3NoaW1LZXlzIikscz1lKCIuLi9zdXBwb3J0IiksbD1yKE9iamVjdCwia2V5cyIpLHU9bD9mdW5jdGlvbihlKXt2YXIgdD1udWxsPT1lP3ZvaWQgMDplLmNvbnN0cnVjdG9yO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LnByb3RvdHlwZT09PWV8fCgiZnVuY3Rpb24iPT10eXBlb2YgZT9zLmVudW1Qcm90b3R5cGVzOmkoZSkpP28oZSk6YShlKT9sKGUpOltdfTpvO3QuZXhwb3J0cz11fSx7Ii4uL2ludGVybmFsL2dldE5hdGl2ZSI6MTE3LCIuLi9pbnRlcm5hbC9pc0FycmF5TGlrZSI6MTIyLCIuLi9pbnRlcm5hbC9zaGltS2V5cyI6MTM3LCIuLi9sYW5nL2lzT2JqZWN0IjoxNDcsIi4uL3N1cHBvcnQiOjE1Nn1dLDE1MzpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09ZSlyZXR1cm5bXTtjKGUpfHwoZT1PYmplY3QoZSkpO3ZhciB0PWUubGVuZ3RoO3Q9dCYmdSh0KSYmKG8oZSl8fGEoZSl8fHAoZSkpJiZ0fHwwO2Zvcih2YXIgbj1lLmNvbnN0cnVjdG9yLHI9LTEsaT1zKG4pJiZuLnByb3RvdHlwZXx8QyxoPWk9PT1lLGQ9QXJyYXkodCksbT10PjAseT1mLmVudW1FcnJvclByb3BzJiYoZT09PUF8fGUgaW5zdGFuY2VvZiBFcnJvciksdj1mLmVudW1Qcm90b3R5cGVzJiZzKGUpOysrcjx0OylkW3JdPXIrIiI7Zm9yKHZhciB3IGluIGUpdiYmInByb3RvdHlwZSI9PXd8fHkmJigibWVzc2FnZSI9PXd8fCJuYW1lIj09dyl8fG0mJmwodyx0KXx8ImNvbnN0cnVjdG9yIj09dyYmKGh8fCFrLmNhbGwoZSx3KSl8fGQucHVzaCh3KTtpZihmLm5vbkVudW1TaGFkb3dzJiZlIT09Qyl7dmFyIFQ9ZT09PUU/eDplPT09QT9nOk8uY2FsbChlKSxJPWpbVF18fGpbYl07Zm9yKFQ9PWImJihpPUMpLHQ9Uy5sZW5ndGg7dC0tOyl7dz1TW3RdO3ZhciBfPUlbd107aCYmX3x8KF8/IWsuY2FsbChlLHcpOmVbd109PT1pW3ddKXx8ZC5wdXNoKHcpfX1yZXR1cm4gZH12YXIgaT1lKCIuLi9pbnRlcm5hbC9hcnJheUVhY2giKSxhPWUoIi4uL2xhbmcvaXNBcmd1bWVudHMiKSxvPWUoIi4uL2xhbmcvaXNBcnJheSIpLHM9ZSgiLi4vbGFuZy9pc0Z1bmN0aW9uIiksbD1lKCIuLi9pbnRlcm5hbC9pc0luZGV4IiksdT1lKCIuLi9pbnRlcm5hbC9pc0xlbmd0aCIpLGM9ZSgiLi4vbGFuZy9pc09iamVjdCIpLHA9ZSgiLi4vbGFuZy9pc1N0cmluZyIpLGY9ZSgiLi4vc3VwcG9ydCIpLGg9IltvYmplY3QgQXJyYXldIixkPSJbb2JqZWN0IEJvb2xlYW5dIixtPSJbb2JqZWN0IERhdGVdIixnPSJbb2JqZWN0IEVycm9yXSIseT0iW29iamVjdCBGdW5jdGlvbl0iLHY9IltvYmplY3QgTnVtYmVyXSIsYj0iW29iamVjdCBPYmplY3RdIix3PSJbb2JqZWN0IFJlZ0V4cF0iLHg9IltvYmplY3QgU3RyaW5nXSIsUz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdLEE9RXJyb3IucHJvdG90eXBlLEM9T2JqZWN0LnByb3RvdHlwZSxFPVN0cmluZy5wcm90b3R5cGUsaz1DLmhhc093blByb3BlcnR5LE89Qy50b1N0cmluZyxqPXt9O2pbaF09alttXT1qW3ZdPXtjb25zdHJ1Y3RvcjohMCx0b0xvY2FsZVN0cmluZzohMCx0b1N0cmluZzohMCx2YWx1ZU9mOiEwfSxqW2RdPWpbeF09e2NvbnN0cnVjdG9yOiEwLHRvU3RyaW5nOiEwLHZhbHVlT2Y6ITB9LGpbZ109alt5XT1qW3ddPXtjb25zdHJ1Y3RvcjohMCx0b1N0cmluZzohMH0saltiXT17Y29uc3RydWN0b3I6ITB9LGkoUyxmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gailpZihrLmNhbGwoaix0KSl7dmFyIG49alt0XTtuW2VdPWsuY2FsbChuLGUpfX0pLHQuZXhwb3J0cz1yfSx7Ii4uL2ludGVybmFsL2FycmF5RWFjaCI6NjYsIi4uL2ludGVybmFsL2lzSW5kZXgiOjEyNCwiLi4vaW50ZXJuYWwvaXNMZW5ndGgiOjEyOCwiLi4vbGFuZy9pc0FyZ3VtZW50cyI6MTQyLCIuLi9sYW5nL2lzQXJyYXkiOjE0MywiLi4vbGFuZy9pc0Z1bmN0aW9uIjoxNDUsIi4uL2xhbmcvaXNPYmplY3QiOjE0NywiLi4vbGFuZy9pc1N0cmluZyI6MTQ5LCIuLi9zdXBwb3J0IjoxNTZ9XSwxNTQ6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe2U9YShlKTtmb3IodmFyIHQ9LTEsbj1pKGUpLHI9bi5sZW5ndGgsbz1BcnJheShyKTsrK3Q8cjspe3ZhciBzPW5bdF07b1t0XT1bcyxlW3NdXX1yZXR1cm4gb312YXIgaT1lKCIuL2tleXMiKSxhPWUoIi4uL2ludGVybmFsL3RvT2JqZWN0Iik7dC5leHBvcnRzPXJ9LHsiLi4vaW50ZXJuYWwvdG9PYmplY3QiOjEzOCwiLi9rZXlzIjoxNTJ9XSwxNTU6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBpKGUsYShlKSl9dmFyIGk9ZSgiLi4vaW50ZXJuYWwvYmFzZVZhbHVlcyIpLGE9ZSgiLi9rZXlzIik7dC5leHBvcnRzPXJ9LHsiLi4vaW50ZXJuYWwvYmFzZVZhbHVlcyI6OTQsIi4va2V5cyI6MTUyfV0sMTU2OltmdW5jdGlvbihlLHQsbil7dmFyIHI9QXJyYXkucHJvdG90eXBlLGk9RXJyb3IucHJvdG90eXBlLGE9T2JqZWN0LnByb3RvdHlwZSxvPWEucHJvcGVydHlJc0VudW1lcmFibGUscz1yLnNwbGljZSxsPXt9OyFmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe3RoaXMueD1lfSxuPXswOmUsbGVuZ3RoOmV9LHI9W107dC5wcm90b3R5cGU9e3ZhbHVlT2Y6ZSx5OmV9O2Zvcih2YXIgYSBpbiBuZXcgdClyLnB1c2goYSk7bC5lbnVtRXJyb3JQcm9wcz1vLmNhbGwoaSwibWVzc2FnZSIpfHxvLmNhbGwoaSwibmFtZSIpLGwuZW51bVByb3RvdHlwZXM9by5jYWxsKHQsInByb3RvdHlwZSIpLGwubm9uRW51bVNoYWRvd3M9IS92YWx1ZU9mLy50ZXN0KHIpLGwub3duTGFzdD0ieCIhPXJbMF0sbC5zcGxpY2VPYmplY3RzPShzLmNhbGwobiwwLDEpLCFuWzBdKSxsLnVuaW5kZXhlZENoYXJzPSJ4IlswXStPYmplY3QoIngiKVswXSE9Inh4In0oMSwwKSx0LmV4cG9ydHM9bH0se31dLDE1NzpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGV9dC5leHBvcnRzPXJ9LHt9XSwxNTg6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKCl7fXQuZXhwb3J0cz1yfSx7fV0sMTU5OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbyhlKT9pKGUpOmEoZSl9dmFyIGk9ZSgiLi4vaW50ZXJuYWwvYmFzZVByb3BlcnR5IiksYT1lKCIuLi9pbnRlcm5hbC9iYXNlUHJvcGVydHlEZWVwIiksbz1lKCIuLi9pbnRlcm5hbC9pc0tleSIpO3QuZXhwb3J0cz1yfSx7Ii4uL2ludGVybmFsL2Jhc2VQcm9wZXJ0eSI6ODksIi4uL2ludGVybmFsL2Jhc2VQcm9wZXJ0eURlZXAiOjkwLCIuLi9pbnRlcm5hbC9pc0tleSI6MTI2fV0sMTYwOltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcigpe31mdW5jdGlvbiBpKGUpe3ZhciB0PXt9LnRvU3RyaW5nLmNhbGwoZSk7c3dpdGNoKHQpe2Nhc2UiW29iamVjdCBGaWxlXSI6Y2FzZSJbb2JqZWN0IEJsb2JdIjpjYXNlIltvYmplY3QgRm9ybURhdGFdIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBhKGUpe3JldHVybiBlPT09T2JqZWN0KGUpfWZ1bmN0aW9uIG8oZSl7aWYoIWEoZSkpcmV0dXJuIGU7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpbnVsbCE9ZVtuXSYmdC5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChuKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGVbbl0pKTtyZXR1cm4gdC5qb2luKCImIil9ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQsbixyPXt9LGk9ZS5zcGxpdCgiJiIpLGE9MCxvPWkubGVuZ3RoO28+YTsrK2Epbj1pW2FdLHQ9bi5zcGxpdCgiPSIpLHJbZGVjb2RlVVJJQ29tcG9uZW50KHRbMF0pXT1kZWNvZGVVUklDb21wb25lbnQodFsxXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbChlKXt2YXIgdCxuLHIsaSxhPWUuc3BsaXQoL1xyP1xuLyksbz17fTthLnBvcCgpO2Zvcih2YXIgcz0wLGw9YS5sZW5ndGg7bD5zOysrcyluPWFbc10sdD1uLmluZGV4T2YoIjoiKSxyPW4uc2xpY2UoMCx0KS50b0xvd2VyQ2FzZSgpLGk9eShuLnNsaWNlKHQrMSkpLG9bcl09aTtyZXR1cm4gb31mdW5jdGlvbiB1KGUpe3JldHVybiBlLnNwbGl0KC8gKjsgKi8pLnNoaWZ0KCl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gbShlLnNwbGl0KC8gKjsgKi8pLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zcGxpdCgvICo9ICovKSxyPW4uc2hpZnQoKSxpPW4uc2hpZnQoKTtyZXR1cm4gciYmaSYmKGVbcl09aSksZX0se30pfWZ1bmN0aW9uIHAoZSx0KXt0PXR8fHt9LHRoaXMucmVxPWUsdGhpcy54aHI9dGhpcy5yZXEueGhyLHRoaXMudGV4dD0iSEVBRCIhPXRoaXMucmVxLm1ldGhvZCYmKCIiPT09dGhpcy54aHIucmVzcG9uc2VUeXBlfHwidGV4dCI9PT10aGlzLnhoci5yZXNwb25zZVR5cGUpfHwidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMueGhyLnJlc3BvbnNlVHlwZT90aGlzLnhoci5yZXNwb25zZVRleHQ6bnVsbCx0aGlzLnN0YXR1c1RleHQ9dGhpcy5yZXEueGhyLnN0YXR1c1RleHQsdGhpcy5zZXRTdGF0dXNQcm9wZXJ0aWVzKHRoaXMueGhyLnN0YXR1cyksdGhpcy5oZWFkZXI9dGhpcy5oZWFkZXJzPWwodGhpcy54aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHRoaXMuaGVhZGVyWyJjb250ZW50LXR5cGUiXT10aGlzLnhoci5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIiksdGhpcy5zZXRIZWFkZXJQcm9wZXJ0aWVzKHRoaXMuaGVhZGVyKSx0aGlzLmJvZHk9IkhFQUQiIT10aGlzLnJlcS5tZXRob2Q/dGhpcy5wYXJzZUJvZHkodGhpcy50ZXh0P3RoaXMudGV4dDp0aGlzLnhoci5yZXNwb25zZSk6bnVsbH1mdW5jdGlvbiBmKGUsdCl7dmFyIG49dGhpcztkLmNhbGwodGhpcyksdGhpcy5fcXVlcnk9dGhpcy5fcXVlcnl8fFtdLHRoaXMubWV0aG9kPWUsdGhpcy51cmw9dCx0aGlzLmhlYWRlcj17fSx0aGlzLl9oZWFkZXI9e30sdGhpcy5vbigiZW5kIixmdW5jdGlvbigpe3ZhciBlPW51bGwsdD1udWxsO3RyeXt0PW5ldyBwKG4pfWNhdGNoKHIpe3JldHVybiBlPW5ldyBFcnJvcigiUGFyc2VyIGlzIHVuYWJsZSB0byBwYXJzZSB0aGUgcmVzcG9uc2UiKSxlLnBhcnNlPSEwLGUub3JpZ2luYWw9cixuLmNhbGxiYWNrKGUpfWlmKG4uZW1pdCgicmVzcG9uc2UiLHQpLGUpcmV0dXJuIG4uY2FsbGJhY2soZSx0KTtpZih0LnN0YXR1cz49MjAwJiZ0LnN0YXR1czwzMDApcmV0dXJuIG4uY2FsbGJhY2soZSx0KTt2YXIgaT1uZXcgRXJyb3IodC5zdGF0dXNUZXh0fHwiVW5zdWNjZXNzZnVsIEhUVFAgcmVzcG9uc2UiKTtpLm9yaWdpbmFsPWUsaS5yZXNwb25zZT10LGkuc3RhdHVzPXQuc3RhdHVzLG4uY2FsbGJhY2soZXx8aSx0KX0pfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9uZXcgZigiR0VUIixlKS5lbmQodCk6MT09YXJndW1lbnRzLmxlbmd0aD9uZXcgZigiR0VUIixlKTpuZXcgZihlLHQpfXZhciBkPWUoImVtaXR0ZXIiKSxtPWUoInJlZHVjZSIpLGc9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/dGhpc3x8c2VsZjp3aW5kb3c7aC5nZXRYSFI9ZnVuY3Rpb24oKXtpZighKCFnLlhNTEh0dHBSZXF1ZXN0fHxnLmxvY2F0aW9uJiYiZmlsZToiPT1nLmxvY2F0aW9uLnByb3RvY29sJiZnLkFjdGl2ZVhPYmplY3QpKXJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3Q7dHJ5e3JldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKX1jYXRjaChlKXt9dHJ5e3JldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhNTEhUVFAuNi4wIil9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQLjMuMCIpfWNhdGNoKGUpe310cnl7cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIpfWNhdGNoKGUpe31yZXR1cm4hMX07dmFyIHk9IiIudHJpbT9mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyheXHMqfFxzKiQpL2csIiIpfTtoLnNlcmlhbGl6ZU9iamVjdD1vLGgucGFyc2VTdHJpbmc9cyxoLnR5cGVzPXtodG1sOiJ0ZXh0L2h0bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24iLHhtbDoiYXBwbGljYXRpb24veG1sIix1cmxlbmNvZGVkOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLGZvcm06ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsImZvcm0tZGF0YSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9LGguc2VyaWFsaXplPXsiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIjpvLCJhcHBsaWNhdGlvbi9qc29uIjpKU09OLnN0cmluZ2lmeX0saC5wYXJzZT17ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6cywiYXBwbGljYXRpb24vanNvbiI6SlNPTi5wYXJzZX0scC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhlYWRlcltlLnRvTG93ZXJDYXNlKCldfSxwLnByb3RvdHlwZS5zZXRIZWFkZXJQcm9wZXJ0aWVzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGVhZGVyWyJjb250ZW50LXR5cGUiXXx8IiI7dGhpcy50eXBlPXUodCk7dmFyIG49Yyh0KTtmb3IodmFyIHIgaW4gbil0aGlzW3JdPW5bcl19LHAucHJvdG90eXBlLnBhcnNlQm9keT1mdW5jdGlvbihlKXt2YXIgdD1oLnBhcnNlW3RoaXMudHlwZV07cmV0dXJuIHQmJmUmJihlLmxlbmd0aHx8ZSBpbnN0YW5jZW9mIE9iamVjdCk/dChlKTpudWxsfSxwLnByb3RvdHlwZS5zZXRTdGF0dXNQcm9wZXJ0aWVzPWZ1bmN0aW9uKGUpezEyMjM9PT1lJiYoZT0yMDQpO3ZhciB0PWUvMTAwfDA7dGhpcy5zdGF0dXM9ZSx0aGlzLnN0YXR1c1R5cGU9dCx0aGlzLmluZm89MT09dCx0aGlzLm9rPTI9PXQsdGhpcy5jbGllbnRFcnJvcj00PT10LHRoaXMuc2VydmVyRXJyb3I9NT09dCx0aGlzLmVycm9yPTQ9PXR8fDU9PXQ/dGhpcy50b0Vycm9yKCk6ITEsdGhpcy5hY2NlcHRlZD0yMDI9PWUsdGhpcy5ub0NvbnRlbnQ9MjA0PT1lLHRoaXMuYmFkUmVxdWVzdD00MDA9PWUsdGhpcy51bmF1dGhvcml6ZWQ9NDAxPT1lLHRoaXMubm90QWNjZXB0YWJsZT00MDY9PWUsdGhpcy5ub3RGb3VuZD00MDQ9PWUsdGhpcy5mb3JiaWRkZW49NDAzPT1lfSxwLnByb3RvdHlwZS50b0Vycm9yPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZXEsdD1lLm1ldGhvZCxuPWUudXJsLHI9ImNhbm5vdCAiK3QrIiAiK24rIiAoIit0aGlzLnN0YXR1cysiKSIsaT1uZXcgRXJyb3Iocik7cmV0dXJuIGkuc3RhdHVzPXRoaXMuc3RhdHVzLGkubWV0aG9kPXQsaS51cmw9bixpfSxoLlJlc3BvbnNlPXAsZChmLnByb3RvdHlwZSksZi5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGUpe3JldHVybiBlKHRoaXMpLHRoaXN9LGYucHJvdG90eXBlLnRpbWVvdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3RpbWVvdXQ9ZSx0aGlzfSxmLnByb3RvdHlwZS5jbGVhclRpbWVvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGltZW91dD0wLGNsZWFyVGltZW91dCh0aGlzLl90aW1lciksdGhpc30sZi5wcm90b3R5cGUuYWJvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hYm9ydGVkP3ZvaWQgMDoodGhpcy5hYm9ydGVkPSEwLHRoaXMueGhyLmFib3J0KCksdGhpcy5jbGVhclRpbWVvdXQoKSx0aGlzLmVtaXQoImFib3J0IiksdGhpcyl9LGYucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe2lmKGEoZSkpe2Zvcih2YXIgbiBpbiBlKXRoaXMuc2V0KG4sZVtuXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuX2hlYWRlcltlLnRvTG93ZXJDYXNlKCldPXQsdGhpcy5oZWFkZXJbZV09dCx0aGlzfSxmLnByb3RvdHlwZS51bnNldD1mdW5jdGlvbihlKXtyZXR1cm4gZGVsZXRlIHRoaXMuX2hlYWRlcltlLnRvTG93ZXJDYXNlKCldLGRlbGV0ZSB0aGlzLmhlYWRlcltlXSx0aGlzfSxmLnByb3RvdHlwZS5nZXRIZWFkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2hlYWRlcltlLnRvTG93ZXJDYXNlKCldfSxmLnByb3RvdHlwZS50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNldCgiQ29udGVudC1UeXBlIixoLnR5cGVzW2VdfHxlKSx0aGlzfSxmLnByb3RvdHlwZS5hY2NlcHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2V0KCJBY2NlcHQiLGgudHlwZXNbZV18fGUpLHRoaXN9LGYucHJvdG90eXBlLmF1dGg9ZnVuY3Rpb24oZSx0KXt2YXIgbj1idG9hKGUrIjoiK3QpO3JldHVybiB0aGlzLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrbiksdGhpc30sZi5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYoZT1vKGUpKSxlJiZ0aGlzLl9xdWVyeS5wdXNoKGUpLHRoaXN9LGYucHJvdG90eXBlLmZpZWxkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2Zvcm1EYXRhfHwodGhpcy5fZm9ybURhdGE9bmV3IGcuRm9ybURhdGEpLHRoaXMuX2Zvcm1EYXRhLmFwcGVuZChlLHQpLHRoaXN9LGYucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuX2Zvcm1EYXRhfHwodGhpcy5fZm9ybURhdGE9bmV3IGcuRm9ybURhdGEpLHRoaXMuX2Zvcm1EYXRhLmFwcGVuZChlLHQsbiksdGhpc30sZi5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbihlKXt2YXIgdD1hKGUpLG49dGhpcy5nZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIpO2lmKHQmJmEodGhpcy5fZGF0YSkpZm9yKHZhciByIGluIGUpdGhpcy5fZGF0YVtyXT1lW3JdO2Vsc2Uic3RyaW5nIj09dHlwZW9mIGU/KG58fHRoaXMudHlwZSgiZm9ybSIpLG49dGhpcy5nZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIpLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiPT1uP3RoaXMuX2RhdGE9dGhpcy5fZGF0YT90aGlzLl9kYXRhKyImIitlOmU6dGhpcy5fZGF0YT0odGhpcy5fZGF0YXx8IiIpK2UpOnRoaXMuX2RhdGE9ZTtyZXR1cm4hdHx8aShlKT90aGlzOihufHx0aGlzLnR5cGUoImpzb24iKSx0aGlzKX0sZi5wcm90b3R5cGUuY2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9jYWxsYmFjazt0aGlzLmNsZWFyVGltZW91dCgpLG4oZSx0KX0sZi5wcm90b3R5cGUuY3Jvc3NEb21haW5FcnJvcj1mdW5jdGlvbigpe3ZhciBlPW5ldyBFcnJvcigiT3JpZ2luIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiIpO2UuY3Jvc3NEb21haW49ITAsdGhpcy5jYWxsYmFjayhlKX0sZi5wcm90b3R5cGUudGltZW91dEVycm9yPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdGltZW91dCx0PW5ldyBFcnJvcigidGltZW91dCBvZiAiK2UrIm1zIGV4Y2VlZGVkIik7dC50aW1lb3V0PWUsdGhpcy5jYWxsYmFjayh0KX0sZi5wcm90b3R5cGUud2l0aENyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dpdGhDcmVkZW50aWFscz0hMCx0aGlzfSxmLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMueGhyPWguZ2V0WEhSKCksYT10aGlzLl9xdWVyeS5qb2luKCImIiksbz10aGlzLl90aW1lb3V0LHM9dGhpcy5fZm9ybURhdGF8fHRoaXMuX2RhdGE7dGhpcy5fY2FsbGJhY2s9ZXx8cixuLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKDQ9PW4ucmVhZHlTdGF0ZSl7dmFyIGU7dHJ5e2U9bi5zdGF0dXN9Y2F0Y2gocil7ZT0wfWlmKDA9PWUpe2lmKHQudGltZWRvdXQpcmV0dXJuIHQudGltZW91dEVycm9yKCk7aWYodC5hYm9ydGVkKXJldHVybjtyZXR1cm4gdC5jcm9zc0RvbWFpbkVycm9yKCl9dC5lbWl0KCJlbmQiKX19O3ZhciBsPWZ1bmN0aW9uKGUpe2UudG90YWw+MCYmKGUucGVyY2VudD1lLmxvYWRlZC9lLnRvdGFsKjEwMCksdC5lbWl0KCJwcm9ncmVzcyIsZSl9O3RoaXMuaGFzTGlzdGVuZXJzKCJwcm9ncmVzcyIpJiYobi5vbnByb2dyZXNzPWwpO3RyeXtuLnVwbG9hZCYmdGhpcy5oYXNMaXN0ZW5lcnMoInByb2dyZXNzIikmJihuLnVwbG9hZC5vbnByb2dyZXNzPWwpfWNhdGNoKHUpe31pZihvJiYhdGhpcy5fdGltZXImJih0aGlzLl90aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC50aW1lZG91dD0hMCx0LmFib3J0KCl9LG8pKSxhJiYoYT1oLnNlcmlhbGl6ZU9iamVjdChhKSx0aGlzLnVybCs9fnRoaXMudXJsLmluZGV4T2YoIj8iKT8iJiIrYToiPyIrYSksbi5vcGVuKHRoaXMubWV0aG9kLHRoaXMudXJsLCEwKSx0aGlzLl93aXRoQ3JlZGVudGlhbHMmJihuLndpdGhDcmVkZW50aWFscz0hMCksIkdFVCIhPXRoaXMubWV0aG9kJiYiSEVBRCIhPXRoaXMubWV0aG9kJiYic3RyaW5nIiE9dHlwZW9mIHMmJiFpKHMpKXt2YXIgYz1oLnNlcmlhbGl6ZVt0aGlzLmdldEhlYWRlcigiQ29udGVudC1UeXBlIildO2MmJihzPWMocykpfWZvcih2YXIgcCBpbiB0aGlzLmhlYWRlciludWxsIT10aGlzLmhlYWRlcltwXSYmbi5zZXRSZXF1ZXN0SGVhZGVyKHAsdGhpcy5oZWFkZXJbcF0pO3JldHVybiB0aGlzLmVtaXQoInJlcXVlc3QiLHRoaXMpLG4uc2VuZChzKSx0aGlzfSxoLlJlcXVlc3Q9ZixoLmdldD1mdW5jdGlvbihlLHQsbil7dmFyIHI9aCgiR0VUIixlKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmKG49dCx0PW51bGwpLHQmJnIucXVlcnkodCksbiYmci5lbmQobikscn0saC5oZWFkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1oKCJIRUFEIixlKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmKG49dCx0PW51bGwpLHQmJnIuc2VuZCh0KSxuJiZyLmVuZChuKSxyfSxoLmRlbD1mdW5jdGlvbihlLHQpe3ZhciBuPWgoIkRFTEVURSIsZSk7cmV0dXJuIHQmJm4uZW5kKHQpLG59LGgucGF0Y2g9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWgoIlBBVENIIixlKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmKG49dCx0PW51bGwpLHQmJnIuc2VuZCh0KSxuJiZyLmVuZChuKSxyfSxoLnBvc3Q9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWgoIlBPU1QiLGUpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYobj10LHQ9bnVsbCksdCYmci5zZW5kKHQpLG4mJnIuZW5kKG4pLHJ9LGgucHV0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1oKCJQVVQiLGUpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYobj10LHQ9bnVsbCksdCYmci5zZW5kKHQpLG4mJnIuZW5kKG4pLHJ9LHQuZXhwb3J0cz1ofSx7ZW1pdHRlcjoxNjEscmVkdWNlOjE2Mn1dLDE2MTpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGU/aShlKTp2b2lkIDB9ZnVuY3Rpb24gaShlKXtmb3IodmFyIHQgaW4gci5wcm90b3R5cGUpZVt0XT1yLnByb3RvdHlwZVt0XTtyZXR1cm4gZX10LmV4cG9ydHM9cixyLnByb3RvdHlwZS5vbj1yLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9LCh0aGlzLl9jYWxsYmFja3NbZV09dGhpcy5fY2FsbGJhY2tzW2VdfHxbXSkucHVzaCh0KSx0aGlzfSxyLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3Iub2ZmKGUsbiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrc3x8e30sbi5mbj10LHRoaXMub24oZSxuKSx0aGlzfSxyLnByb3RvdHlwZS5vZmY9ci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHx7fSwwPT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9jYWxsYmFja3M9e30sdGhpczt2YXIgbj10aGlzLl9jYWxsYmFja3NbZV07aWYoIW4pcmV0dXJuIHRoaXM7aWYoMT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1tlXSx0aGlzO2Zvcih2YXIgcixpPTA7aTxuLmxlbmd0aDtpKyspaWYocj1uW2ldLHI9PT10fHxyLmZuPT09dCl7bi5zcGxpY2UoaSwxKTticmVha31yZXR1cm4gdGhpc30sci5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHx7fTt2YXIgdD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxuPXRoaXMuX2NhbGxiYWNrc1tlXTtpZihuKXtuPW4uc2xpY2UoMCk7Zm9yKHZhciByPTAsaT1uLmxlbmd0aDtpPnI7KytyKW5bcl0uYXBwbHkodGhpcyx0KX1yZXR1cm4gdGhpc30sci5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHx7fSx0aGlzLl9jYWxsYmFja3NbZV18fFtdfSxyLnByb3RvdHlwZS5oYXNMaXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLmxpc3RlbmVycyhlKS5sZW5ndGh9fSx7fV0sMTYyOltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MCxpPWUubGVuZ3RoLGE9Mz09YXJndW1lbnRzLmxlbmd0aD9uOmVbcisrXTtpPnI7KWE9dC5jYWxsKG51bGwsYSxlW3JdLCsrcixlKTtyZXR1cm4gYX19LHt9XX0se30sWzFdKSgxKX0pLHdpbmRvdy5Td2FnZ2VyVWk9QmFja2JvbmUuUm91dGVyLmV4dGVuZCh7ZG9tX2lkOiJzd2FnZ2VyX3VpIixvcHRpb25zOm51bGwsYXBpOm51bGwsaGVhZGVyVmlldzpudWxsLG1haW5WaWV3Om51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbihlKXtlPWV8fHt9LGUuaGlnaGxpZ2h0U2l6ZVRocmVzaG9sZHx8KGUuaGlnaGxpZ2h0U2l6ZVRocmVzaG9sZD0xZTUpLGUuZG9tX2lkJiYodGhpcy5kb21faWQ9ZS5kb21faWQsZGVsZXRlIGUuZG9tX2lkKSxlLnN1cHBvcnRlZFN1Ym1pdE1ldGhvZHN8fChlLnN1cHBvcnRlZFN1Ym1pdE1ldGhvZHM9WyJnZXQiLCJwdXQiLCJwb3N0IiwiZGVsZXRlIiwiaGVhZCIsIm9wdGlvbnMiLCJwYXRjaCJdKSwic3RyaW5nIj09dHlwZW9mIGUub2F1dGgyUmVkaXJlY3RVcmwmJih3aW5kb3cub0F1dGhSZWRpcmVjdFVybD1lLnJlZGlyZWN0VXJsKSwkKCIjIit0aGlzLmRvbV9pZCkubGVuZ3RofHwkKCJib2R5IikuYXBwZW5kKCc8ZGl2IGlkPSInK3RoaXMuZG9tX2lkKyciPjwvZGl2PicpLHRoaXMub3B0aW9ucz1lLG1hcmtlZC5zZXRPcHRpb25zKHtnZm06ITB9KTt2YXIgdD10aGlzO3RoaXMub3B0aW9ucy5zdWNjZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHQucmVuZGVyKCl9LHRoaXMub3B0aW9ucy5wcm9ncmVzcz1mdW5jdGlvbihlKXtyZXR1cm4gdC5zaG93TWVzc2FnZShlKX0sdGhpcy5vcHRpb25zLmZhaWx1cmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQub25Mb2FkRmFpbHVyZShlKX0sdGhpcy5oZWFkZXJWaWV3PW5ldyBTd2FnZ2VyVWkuVmlld3MuSGVhZGVyVmlldyh7ZWw6JCgiI2hlYWRlciIpfSksdGhpcy5oZWFkZXJWaWV3Lm9uKCJ1cGRhdGUtc3dhZ2dlci11aSIsZnVuY3Rpb24oZSl7cmV0dXJuIHQudXBkYXRlU3dhZ2dlclVpKGUpfSl9LHNldE9wdGlvbjpmdW5jdGlvbihlLHQpe3RoaXMub3B0aW9uc1tlXT10fSxnZXRPcHRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3B0aW9uc1tlXX0sdXBkYXRlU3dhZ2dlclVpOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucy51cmw9ZS51cmwsdGhpcy5sb2FkKCl9LGxvYWQ6ZnVuY3Rpb24oKXt0aGlzLm1haW5WaWV3JiZ0aGlzLm1haW5WaWV3LmNsZWFyKCk7dmFyIGU9dGhpcy5vcHRpb25zLnVybDtlJiYwIT09ZS5pbmRleE9mKCJodHRwIikmJihlPXRoaXMuYnVpbGRVcmwod2luZG93LmxvY2F0aW9uLmhyZWYudG9TdHJpbmcoKSxlKSksdGhpcy5hcGkmJih0aGlzLm9wdGlvbnMuYXV0aG9yaXphdGlvbnM9dGhpcy5hcGkuY2xpZW50QXV0aG9yaXphdGlvbnMuYXV0aHopLHRoaXMub3B0aW9ucy51cmw9ZSx0aGlzLmhlYWRlclZpZXcudXBkYXRlKGUpLHRoaXMuYXBpPW5ldyBTd2FnZ2VyQ2xpZW50KHRoaXMub3B0aW9ucyl9LGNvbGxhcHNlQWxsOmZ1bmN0aW9uKCl7RG9jcy5jb2xsYXBzZUVuZHBvaW50TGlzdEZvclJlc291cmNlKCIiKX0sbGlzdEFsbDpmdW5jdGlvbigpe0RvY3MuY29sbGFwc2VPcGVyYXRpb25zRm9yUmVzb3VyY2UoIiIpfSxleHBhbmRBbGw6ZnVuY3Rpb24oKXtEb2NzLmV4cGFuZE9wZXJhdGlvbnNGb3JSZXNvdXJjZSgiIil9LHJlbmRlcjpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLnNob3dNZXNzYWdlKCJGaW5pc2hlZCBMb2FkaW5nIFJlc291cmNlIEluZm9ybWF0aW9uLiBSZW5kZXJpbmcgU3dhZ2dlciBVSS4uLiIpLHRoaXMubWFpblZpZXc9bmV3IFN3YWdnZXJVaS5WaWV3cy5NYWluVmlldyh7bW9kZWw6dGhpcy5hcGksZWw6JCgiIyIrdGhpcy5kb21faWQpLHN3YWdnZXJPcHRpb25zOnRoaXMub3B0aW9ucyxyb3V0ZXI6dGhpc30pLnJlbmRlcigpLHRoaXMuc2hvd01lc3NhZ2UoKSx0aGlzLm9wdGlvbnMuZG9jRXhwYW5zaW9uKXtjYXNlImZ1bGwiOnRoaXMuZXhwYW5kQWxsKCk7YnJlYWs7Y2FzZSJsaXN0Ijp0aGlzLmxpc3RBbGwoKX10aGlzLnJlbmRlckdGTSgpLHRoaXMub3B0aW9ucy5vbkNvbXBsZXRlJiZ0aGlzLm9wdGlvbnMub25Db21wbGV0ZSh0aGlzLmFwaSx0aGlzKSxzZXRUaW1lb3V0KERvY3Muc2hlYmFuZy5iaW5kKHRoaXMpLDEwMCl9LGJ1aWxkVXJsOmZ1bmN0aW9uKGUsdCl7aWYoMD09PXQuaW5kZXhPZigiLyIpKXt2YXIgbj1lLnNwbGl0KCIvIik7cmV0dXJuIGU9blswXSsiLy8iK25bMl0sZSt0fXZhciByPWUubGVuZ3RoO3JldHVybiBlLmluZGV4T2YoIj8iKT4tMSYmKHI9TWF0aC5taW4ocixlLmluZGV4T2YoIj8iKSkpLGUuaW5kZXhPZigiIyIpPi0xJiYocj1NYXRoLm1pbihyLGUuaW5kZXhPZigiIyIpKSksZT1lLnN1YnN0cmluZygwLHIpLC0xIT09ZS5pbmRleE9mKCIvIixlLmxlbmd0aC0xKT9lK3Q6ZSsiLyIrdH0sc2hvd01lc3NhZ2U6ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9IiIpO3ZhciB0PSQoIiNtZXNzYWdlLWJhciIpO3QucmVtb3ZlQ2xhc3MoIm1lc3NhZ2UtZmFpbCIpLHQuYWRkQ2xhc3MoIm1lc3NhZ2Utc3VjY2VzcyIpLHQuaHRtbChlKSx3aW5kb3cuU3dhZ2dlclRyYW5zbGF0b3ImJndpbmRvdy5Td2FnZ2VyVHJhbnNsYXRvci50cmFuc2xhdGUodCl9LG9uTG9hZEZhaWx1cmU6ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9IiIpLCQoIiNtZXNzYWdlLWJhciIpLnJlbW92ZUNsYXNzKCJtZXNzYWdlLXN1Y2Nlc3MiKSwkKCIjbWVzc2FnZS1iYXIiKS5hZGRDbGFzcygibWVzc2FnZS1mYWlsIik7dmFyIHQ9JCgiI21lc3NhZ2UtYmFyIikudGV4dChlKTtyZXR1cm4gdGhpcy5vcHRpb25zLm9uRmFpbHVyZSYmdGhpcy5vcHRpb25zLm9uRmFpbHVyZShlKSx0fSxyZW5kZXJHRk06ZnVuY3Rpb24oKXskKCIubWFya2Rvd24iKS5lYWNoKGZ1bmN0aW9uKCl7JCh0aGlzKS5odG1sKG1hcmtlZCgkKHRoaXMpLmh0bWwoKSkpfSksJCgiLnByb3BEZXNjIiwiLm1vZGVsLXNpZ25hdHVyZSAuZGVzY3JpcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7JCh0aGlzKS5odG1sKG1hcmtlZCgkKHRoaXMpLmh0bWwoKSkpLmFkZENsYXNzKCJtYXJrZG93biIpfSl9fSksd2luZG93LlN3YWdnZXJVaS5WaWV3cz17fSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7ImNvbnNvbGUiaW4gd2luZG93JiYiZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93LmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKGUpfXdpbmRvdy5hdXRob3JpemF0aW9ucz17YWRkOmZ1bmN0aW9uKCl7aWYoZSgiVXNpbmcgd2luZG93LmF1dGhvcml6YXRpb25zIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgU3dhZ2dlclVpLmFwaS5jbGllbnRBdXRob3JpemF0aW9ucy5hZGQoKS4iKSwidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdy5zd2FnZ2VyVWkpdGhyb3cgbmV3IFR5cGVFcnJvcigid2luZG93LnN3YWdnZXJVaSBpcyBub3QgZGVmaW5lZCIpO3dpbmRvdy5zd2FnZ2VyVWkgaW5zdGFuY2VvZiBTd2FnZ2VyVWkmJndpbmRvdy5zd2FnZ2VyVWkuYXBpLmNsaWVudEF1dGhvcml6YXRpb25zLmFkZC5hcHBseSh3aW5kb3cuc3dhZ2dlclVpLmFwaS5jbGllbnRBdXRob3JpemF0aW9ucyxhcmd1bWVudHMpfX0sd2luZG93LkFwaUtleUF1dGhvcml6YXRpb249ZnVuY3Rpb24oKXtlKCJ3aW5kb3cuQXBpS2V5QXV0aG9yaXphdGlvbiBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFN3YWdnZXJDbGllbnQuQXBpS2V5QXV0aG9yaXphdGlvbi4iKSxTd2FnZ2VyQ2xpZW50LkFwaUtleUF1dGhvcml6YXRpb24uYXBwbHkod2luZG93LGFyZ3VtZW50cyl9LHdpbmRvdy5QYXNzd29yZEF1dGhvcml6YXRpb249ZnVuY3Rpb24oKXtlKCJ3aW5kb3cuUGFzc3dvcmRBdXRob3JpemF0aW9uIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgU3dhZ2dlckNsaWVudC5QYXNzd29yZEF1dGhvcml6YXRpb24uIiksU3dhZ2dlckNsaWVudC5QYXNzd29yZEF1dGhvcml6YXRpb24uYXBwbHkod2luZG93LGFyZ3VtZW50cyl9fSgpLGZ1bmN0aW9uKGUsdCl7ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJiIl0sZnVuY3Rpb24obil7cmV0dXJuIGUuU3dhZ2dlclVpPXQobil9KToib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKCJiIikpOmUuU3dhZ2dlclVpPXQoZS5iKX0odGhpcyxmdW5jdGlvbigpe3JldHVybiBTd2FnZ2VyVWl9KSxTd2FnZ2VyVWkuVmlld3MuQXBpS2V5QnV0dG9uPUJhY2tib25lLlZpZXcuZXh0ZW5kKHtldmVudHM6eyJjbGljayAjYXBpa2V5X2J1dHRvbiI6InRvZ2dsZUFwaUtleUNvbnRhaW5lciIsImNsaWNrICNhcHBseV9hcGlfa2V5IjoiYXBwbHlBcGlLZXkifSxpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucz1lfHx7fSx0aGlzLnJvdXRlcj10aGlzLm9wdGlvbnMucm91dGVyfSxyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRlbXBsYXRlKCk7cmV0dXJuICQodGhpcy5lbCkuaHRtbChlKHRoaXMubW9kZWwpKSx0aGlzfSxhcHBseUFwaUtleTpmdW5jdGlvbigpe3ZhciBlPW5ldyBTd2FnZ2VyQ2xpZW50LkFwaUtleUF1dGhvcml6YXRpb24odGhpcy5tb2RlbC5uYW1lLCQoIiNpbnB1dF9hcGlLZXlfZW50cnkiKS52YWwoKSx0aGlzLm1vZGVsWyJpbiJdKTt0aGlzLnJvdXRlci5hcGkuY2xpZW50QXV0aG9yaXphdGlvbnMuYWRkKHRoaXMubW9kZWwubmFtZSxlKSx0aGlzLnJvdXRlci5sb2FkKCksJCgiI2FwaWtleV9jb250YWluZXIiKS5zaG93KCl9LHRvZ2dsZUFwaUtleUNvbnRhaW5lcjpmdW5jdGlvbigpe2lmKCQoIiNhcGlrZXlfY29udGFpbmVyIikubGVuZ3RoKXt2YXIgZT0kKCIjYXBpa2V5X2NvbnRhaW5lciIpLmZpcnN0KCk7ZS5pcygiOnZpc2libGUiKT9lLmhpZGUoKTooJCgiLmF1dGhfY29udGFpbmVyIikuaGlkZSgpLGUuc2hvdygpKX19LHRlbXBsYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIEhhbmRsZWJhcnMudGVtcGxhdGVzLmFwaWtleV9idXR0b25fdmlld319KSxTd2FnZ2VyVWkuVmlld3MuQmFzaWNBdXRoQnV0dG9uPUJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucz1lfHx7fSx0aGlzLnJvdXRlcj10aGlzLm9wdGlvbnMucm91dGVyfSxyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRlbXBsYXRlKCk7cmV0dXJuICQodGhpcy5lbCkuaHRtbChlKHRoaXMubW9kZWwpKSx0aGlzfSxldmVudHM6eyJjbGljayAjYmFzaWNfYXV0aF9idXR0b24iOiJ0b2dnbGVQYXNzd29yZENvbnRhaW5lciIsImNsaWNrICNhcHBseV9iYXNpY19hdXRoIjoiYXBwbHlQYXNzd29yZCJ9LGFwcGx5UGFzc3dvcmQ6ZnVuY3Rpb24oKXt2YXIgZT0kKCIuaW5wdXRfdXNlcm5hbWUiKS52YWwoKSx0PSQoIi5pbnB1dF9wYXNzd29yZCIpLnZhbCgpLG49bmV3IFN3YWdnZXJDbGllbnQuUGFzc3dvcmRBdXRob3JpemF0aW9uKCJiYXNpYyIsZSx0KTt0aGlzLnJvdXRlci5hcGkuY2xpZW50QXV0aG9yaXphdGlvbnMuYWRkKHRoaXMubW9kZWwudHlwZSxuKSx0aGlzLnJvdXRlci5sb2FkKCksJCgiI2Jhc2ljX2F1dGhfY29udGFpbmVyIikuaGlkZSgpfSx0b2dnbGVQYXNzd29yZENvbnRhaW5lcjpmdW5jdGlvbigpe2lmKCQoIiNiYXNpY19hdXRoX2NvbnRhaW5lciIpLmxlbmd0aCl7dmFyIGU9JCgiI2Jhc2ljX2F1dGhfY29udGFpbmVyIikuc2hvdygpO2UuaXMoIjp2aXNpYmxlIik/ZS5zbGlkZVVwKCk6KCQoIi5hdXRoX2NvbnRhaW5lciIpLmhpZGUoKSxlLnNob3coKSl9fSx0ZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybiBIYW5kbGViYXJzLnRlbXBsYXRlcy5iYXNpY19hdXRoX2J1dHRvbl92aWV3fX0pLFN3YWdnZXJVaS5WaWV3cy5Db250ZW50VHlwZVZpZXc9QmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oKXt9LHJlbmRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsLmNvbnRlbnRUeXBlSWQ9ImN0IitNYXRoLnJhbmRvbSgpLCQodGhpcy5lbCkuaHRtbChIYW5kbGViYXJzLnRlbXBsYXRlcy5jb250ZW50X3R5cGUodGhpcy5tb2RlbCkpLHRoaXN9fSksU3dhZ2dlclVpLlZpZXdzLkhlYWRlclZpZXc9QmFja2JvbmUuVmlldy5leHRlbmQoe2V2ZW50czp7ImNsaWNrICNzaG93LXBldC1zdG9yZS1pY29uIjoic2hvd1BldFN0b3JlIiwiY2xpY2sgI2V4cGxvcmUiOiJzaG93Q3VzdG9tIiwia2V5dXAgI2lucHV0X2Jhc2VVcmwiOiJzaG93Q3VzdG9tT25LZXl1cCIsImtleXVwICNpbnB1dF9hcGlLZXkiOiJzaG93Q3VzdG9tT25LZXl1cCJ9LGluaXRpYWxpemU6ZnVuY3Rpb24oKXt9LHNob3dQZXRTdG9yZTpmdW5jdGlvbigpe3RoaXMudHJpZ2dlcigidXBkYXRlLXN3YWdnZXItdWkiLHt1cmw6Imh0dHA6Ly9wZXRzdG9yZS5zd2FnZ2VyLmlvL3YyL3N3YWdnZXIuanNvbiJ9KX0sc2hvd0N1c3RvbU9uS2V5dXA6ZnVuY3Rpb24oZSl7MTM9PT1lLmtleUNvZGUmJnRoaXMuc2hvd0N1c3RvbSgpfSxzaG93Q3VzdG9tOmZ1bmN0aW9uKGUpe2UmJmUucHJldmVudERlZmF1bHQoKSx0aGlzLnRyaWdnZXIoInVwZGF0ZS1zd2FnZ2VyLXVpIix7dXJsOiQoIiNpbnB1dF9iYXNlVXJsIikudmFsKCksYXBpS2V5OiQoIiNpbnB1dF9hcGlLZXkiKS52YWwoKX0pfSx1cGRhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PW4mJihuPSExKSwkKCIjaW5wdXRfYmFzZVVybCIpLnZhbChlKSxuJiZ0aGlzLnRyaWdnZXIoInVwZGF0ZS1zd2FnZ2VyLXVpIix7dXJsOmV9KX19KSxTd2FnZ2VyVWkuVmlld3MuTWFpblZpZXc9QmFja2JvbmUuVmlldy5leHRlbmQoe2FwaXNTb3J0ZXI6e2FscGhhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubmFtZS5sb2NhbGVDb21wYXJlKHQubmFtZSl9fSxvcGVyYXRpb25zU29ydGVyczp7YWxwaGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wYXRoLmxvY2FsZUNvbXBhcmUodC5wYXRoKX0sbWV0aG9kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWV0aG9kLmxvY2FsZUNvbXBhcmUodC5tZXRob2QpfX0saW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaTtpZihlPWV8fHt9LHRoaXMucm91dGVyPWUucm91dGVyLGUuc3dhZ2dlck9wdGlvbnMuYXBpc1NvcnRlciYmKHQ9ZS5zd2FnZ2VyT3B0aW9ucy5hcGlzU29ydGVyLG49Xy5pc0Z1bmN0aW9uKHQpP3Q6dGhpcy5hcGlzU29ydGVyW3RdLF8uaXNGdW5jdGlvbihuKSYmdGhpcy5tb2RlbC5hcGlzQXJyYXkuc29ydChuKSksZS5zd2FnZ2VyT3B0aW9ucy5vcGVyYXRpb25zU29ydGVyJiYodD1lLnN3YWdnZXJPcHRpb25zLm9wZXJhdGlvbnNTb3J0ZXIsbj1fLmlzRnVuY3Rpb24odCk/dDp0aGlzLm9wZXJhdGlvbnNTb3J0ZXJzW3RdLF8uaXNGdW5jdGlvbihuKSkpZm9yKHIgaW4gdGhpcy5tb2RlbC5hcGlzQXJyYXkpdGhpcy5tb2RlbC5hcGlzQXJyYXlbcl0ub3BlcmF0aW9uc0FycmF5LnNvcnQobik7dGhpcy5tb2RlbC5hdXRocz1bXTtmb3IociBpbiB0aGlzLm1vZGVsLnNlY3VyaXR5RGVmaW5pdGlvbnMpaT10aGlzLm1vZGVsLnNlY3VyaXR5RGVmaW5pdGlvbnNbcl0sdGhpcy5tb2RlbC5hdXRocy5wdXNoKHtuYW1lOnIsdHlwZTppLnR5cGUsdmFsdWU6aX0pOyJ2YWxpZGF0b3JVcmwiaW4gZS5zd2FnZ2VyT3B0aW9ucz90aGlzLm1vZGVsLnZhbGlkYXRvclVybD1lLnN3YWdnZXJPcHRpb25zLnZhbGlkYXRvclVybDp0aGlzLm1vZGVsLnVybC5pbmRleE9mKCJsb2NhbGhvc3QiKT4wP3RoaXMubW9kZWwudmFsaWRhdG9yVXJsPW51bGw6Imh0dHBzOiI9PT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2w/dGhpcy5tb2RlbC52YWxpZGF0b3JVcmw9Imh0dHBzOi8vb25saW5lLnN3YWdnZXIuaW8vdmFsaWRhdG9yIjp0aGlzLm1vZGVsLnZhbGlkYXRvclVybD0iaHR0cDovL29ubGluZS5zd2FnZ2VyLmlvL3ZhbGlkYXRvciJ9LHJlbmRlcjpmdW5jdGlvbigpe2lmKHRoaXMubW9kZWwuc2VjdXJpdHlEZWZpbml0aW9ucylmb3IodmFyIGUgaW4gdGhpcy5tb2RlbC5zZWN1cml0eURlZmluaXRpb25zKXt2YXIgdCxuPXRoaXMubW9kZWwuc2VjdXJpdHlEZWZpbml0aW9uc1tlXTsiYXBpS2V5Ij09PW4udHlwZSYmMD09PSQoIiNhcGlrZXlfYnV0dG9uIikubGVuZ3RoJiYodD1uZXcgU3dhZ2dlclVpLlZpZXdzLkFwaUtleUJ1dHRvbih7bW9kZWw6bixyb3V0ZXI6dGhpcy5yb3V0ZXJ9KS5yZW5kZXIoKS5lbCwkKCIuYXV0aF9tYWluX2NvbnRhaW5lciIpLmFwcGVuZCh0KSksImJhc2ljQXV0aCI9PT1uLnR5cGUmJjA9PT0kKCIjYmFzaWNfYXV0aF9idXR0b24iKS5sZW5ndGgmJih0PW5ldyBTd2FnZ2VyVWkuVmlld3MuQmFzaWNBdXRoQnV0dG9uKHttb2RlbDpuLHJvdXRlcjp0aGlzLnJvdXRlcn0pLnJlbmRlcigpLmVsLCQoIi5hdXRoX21haW5fY29udGFpbmVyIikuYXBwZW5kKHQpKX0kKHRoaXMuZWwpLmh0bWwoSGFuZGxlYmFycy50ZW1wbGF0ZXMubWFpbih0aGlzLm1vZGVsKSk7Zm9yKHZhciByPXt9LGk9MCxhPTA7YTx0aGlzLm1vZGVsLmFwaXNBcnJheS5sZW5ndGg7YSsrKXtmb3IodmFyIG89dGhpcy5tb2RlbC5hcGlzQXJyYXlbYV0scz1vLm5hbWU7InVuZGVmaW5lZCIhPXR5cGVvZiByW3NdOylzPXMrIl8iK2ksaSs9MTtvLmlkPXMscltzXT1vLHRoaXMuYWRkUmVzb3VyY2Uobyx0aGlzLm1vZGVsLmF1dGhzKX1yZXR1cm4gJCgiLnByb3BXcmFwIikuaG92ZXIoZnVuY3Rpb24oKXskKCIub3B0aW9uc1dyYXBwZXIiLCQodGhpcykpLnNob3coKX0sZnVuY3Rpb24oKXskKCIub3B0aW9uc1dyYXBwZXIiLCQodGhpcykpLmhpZGUoKX0pLHRoaXN9LGFkZFJlc291cmNlOmZ1bmN0aW9uKGUsdCl7ZS5pZD1lLmlkLnJlcGxhY2UoL1xzL2csIl8iKTt2YXIgbj1uZXcgU3dhZ2dlclVpLlZpZXdzLlJlc291cmNlVmlldyh7bW9kZWw6ZSxyb3V0ZXI6dGhpcy5yb3V0ZXIsdGFnTmFtZToibGkiLGlkOiJyZXNvdXJjZV8iK2UuaWQsY2xhc3NOYW1lOiJyZXNvdXJjZSIsYXV0aHM6dCxzd2FnZ2VyT3B0aW9uczp0aGlzLm9wdGlvbnMuc3dhZ2dlck9wdGlvbnN9KTskKCIjcmVzb3VyY2VzIix0aGlzLmVsKS5hcHBlbmQobi5yZW5kZXIoKS5lbCl9LGNsZWFyOmZ1bmN0aW9uKCl7JCh0aGlzLmVsKS5odG1sKCIiKX19KSxTd2FnZ2VyVWkuVmlld3MuT3BlcmF0aW9uVmlldz1CYWNrYm9uZS5WaWV3LmV4dGVuZCh7aW52b2NhdGlvblVybDpudWxsLGV2ZW50czp7InN1Ym1pdCAuc2FuZGJveCI6InN1Ym1pdE9wZXJhdGlvbiIsImNsaWNrIC5zdWJtaXQiOiJzdWJtaXRPcGVyYXRpb24iLCJjbGljayAucmVzcG9uc2VfaGlkZXIiOiJoaWRlUmVzcG9uc2UiLCJjbGljayAudG9nZ2xlT3BlcmF0aW9uIjoidG9nZ2xlT3BlcmF0aW9uQ29udGVudCIsIm1vdXNlZW50ZXIgLmFwaS1pYyI6Im1vdXNlRW50ZXIiLCJkYmxjbGljayAuY3VybCI6InNlbGVjdFRleHQifSxpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3JldHVybiBlPWV8fHt9LHRoaXMucm91dGVyPWUucm91dGVyLHRoaXMuYXV0aHM9ZS5hdXRocyx0aGlzLnBhcmVudElkPXRoaXMubW9kZWwucGFyZW50SWQsdGhpcy5uaWNrbmFtZT10aGlzLm1vZGVsLm5pY2tuYW1lLHRoaXMubW9kZWwuZW5jb2RlZFBhcmVudElkPWVuY29kZVVSSUNvbXBvbmVudCh0aGlzLnBhcmVudElkKSx0aGlzfSxzZWxlY3RUZXh0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1kb2N1bWVudCxpPWUudGFyZ2V0LmZpcnN0Q2hpbGQ7ci5ib2R5LmNyZWF0ZVRleHRSYW5nZT8odD1kb2N1bWVudC5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpLHQubW92ZVRvRWxlbWVudFRleHQoaSksdC5zZWxlY3QoKSk6d2luZG93LmdldFNlbGVjdGlvbiYmKG49d2luZG93LmdldFNlbGVjdGlvbigpLHQ9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSx0LnNlbGVjdE5vZGVDb250ZW50cyhpKSxuLnJlbW92ZUFsbFJhbmdlcygpLG4uYWRkUmFuZ2UodCkpfSxtb3VzZUVudGVyOmZ1bmN0aW9uKGUpe3ZhciB0PSQodGhpcy5lbCkuZmluZCgiLmNvbnRlbnQiKSxuPWUucGFnZVgscj1lLnBhZ2VZLGk9JCh3aW5kb3cpLnNjcm9sbExlZnQoKSxhPSQod2luZG93KS5zY3JvbGxUb3AoKSxvPWkrJCh3aW5kb3cpLndpZHRoKCkscz1hKyQod2luZG93KS5oZWlnaHQoKSxsPXQud2lkdGgoKSx1PXQuaGVpZ2h0KCk7bitsPm8mJihuPW8tbCksaT5uJiYobj1pKSxyK3U+cyYmKHI9cy11KSxhPnImJihyPWEpO3ZhciBjPXt9O2MudG9wPXIsYy5sZWZ0PW4sdC5jc3MoYyl9LHJlbmRlcjpmdW5jdGlvbigpe3ZhciBlLHQsbixyLGksYSxvLHMsbCx1LGMscCxmLGgsZCxtLGcseSx2LGIsdyx4LFMsQSxDLEUsayxPLGosVCxJLF8sRCxMLFAsTixNLFI7aWYoYT1qUXVlcnkuaW5BcnJheSh0aGlzLm1vZGVsLm1ldGhvZCx0aGlzLm1vZGVsLnN1cHBvcnRlZFN1Ym1pdE1ldGhvZHMoKSk+PTAsYXx8KHRoaXMubW9kZWwuaXNSZWFkT25seT0hMCksdGhpcy5tb2RlbC5kZXNjcmlwdGlvbj10aGlzLm1vZGVsLmRlc2NyaXB0aW9ufHx0aGlzLm1vZGVsLm5vdGVzLHRoaXMubW9kZWwub2F1dGg9bnVsbCxtPXRoaXMubW9kZWwuYXV0aG9yaXphdGlvbnN8fHRoaXMubW9kZWwuc2VjdXJpdHkpaWYoQXJyYXkuaXNBcnJheShtKSlmb3IobD0wLHU9bS5sZW5ndGg7dT5sO2wrKyl7bj1tW2xdO2ZvcihzIGluIG4pZm9yKGUgaW4gdGhpcy5hdXRocylpZih0PXRoaXMuYXV0aHNbZV0scz09PXQubmFtZSYmIm9hdXRoMiI9PT10LnR5cGUpe3RoaXMubW9kZWwub2F1dGg9e30sdGhpcy5tb2RlbC5vYXV0aC5zY29wZXM9W10sUz10LnZhbHVlLnNjb3Blcztmb3IobyBpbiBTKU09U1tvXSxfPW5bc10uaW5kZXhPZihvKSxfPj0wJiYoeT17c2NvcGU6byxkZXNjcmlwdGlvbjpNfSx0aGlzLm1vZGVsLm9hdXRoLnNjb3Blcy5wdXNoKHkpKX19ZWxzZSBmb3IobyBpbiBtKWlmKE09bVtvXSwib2F1dGgyIj09PW8pZm9yKG51bGw9PT10aGlzLm1vZGVsLm9hdXRoJiYodGhpcy5tb2RlbC5vYXV0aD17fSksdm9pZCAwPT09dGhpcy5tb2RlbC5vYXV0aC5zY29wZXMmJih0aGlzLm1vZGVsLm9hdXRoLnNjb3Blcz1bXSksZD0wLGM9TS5sZW5ndGg7Yz5kO2QrKyl5PU1bZF0sdGhpcy5tb2RlbC5vYXV0aC5zY29wZXMucHVzaCh5KTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHRoaXMubW9kZWwucmVzcG9uc2VzKXt0aGlzLm1vZGVsLnJlc3BvbnNlTWVzc2FnZXM9W10sQT10aGlzLm1vZGVsLnJlc3BvbnNlcztmb3IociBpbiBBKVI9QVtyXSxUPW51bGwsST10aGlzLm1vZGVsLnJlc3BvbnNlc1tyXS5zY2hlbWEsSSYmSS4kcmVmJiYoVD1JLiRyZWYsLTEhPT1ULmluZGV4T2YoIiMvZGVmaW5pdGlvbnMvIikmJihUPVQucmVwbGFjZSgvXi4qI1wvZGVmaW5pdGlvbnNcLy8sIiIpKSksdGhpcy5tb2RlbC5yZXNwb25zZU1lc3NhZ2VzLnB1c2goe2NvZGU6cixtZXNzYWdlOlIuZGVzY3JpcHRpb24scmVzcG9uc2VNb2RlbDpUfSl9aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0aGlzLm1vZGVsLnJlc3BvbnNlTWVzc2FnZXMmJih0aGlzLm1vZGVsLnJlc3BvbnNlTWVzc2FnZXM9W10pLEQ9bnVsbCx0aGlzLm1vZGVsLnN1Y2Nlc3NSZXNwb25zZSl7UD10aGlzLm1vZGVsLnN1Y2Nlc3NSZXNwb25zZTtmb3IocyBpbiBQKVI9UFtzXSx0aGlzLm1vZGVsLnN1Y2Nlc3NDb2RlPXMsIm9iamVjdCI9PXR5cGVvZiBSJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5jcmVhdGVKU09OU2FtcGxlJiYoRD17c2FtcGxlSlNPTjpKU09OLnN0cmluZ2lmeShSLmNyZWF0ZUpTT05TYW1wbGUoKSx2b2lkIDAsMiksaXNQYXJhbTohMSxzaWduYXR1cmU6Ui5nZXRNb2NrU2lnbmF0dXJlKCl9KX1lbHNlIHRoaXMubW9kZWwucmVzcG9uc2VDbGFzc1NpZ25hdHVyZSYmInN0cmluZyIhPT10aGlzLm1vZGVsLnJlc3BvbnNlQ2xhc3NTaWduYXR1cmUmJihEPXtzYW1wbGVKU09OOnRoaXMubW9kZWwucmVzcG9uc2VTYW1wbGVKU09OLGlzUGFyYW06ITEsc2lnbmF0dXJlOnRoaXMubW9kZWwucmVzcG9uc2VDbGFzc1NpZ25hdHVyZX0pO3ZhciBGPXRoaXMub3B0aW9ucy5zd2FnZ2VyT3B0aW9ucztmb3IoRi5zaG93UmVxdWVzdEhlYWRlcnMmJih0aGlzLm1vZGVsLnNob3dSZXF1ZXN0SGVhZGVycz0hMCksJCh0aGlzLmVsKS5odG1sKEhhbmRsZWJhcnMudGVtcGxhdGVzLm9wZXJhdGlvbih0aGlzLm1vZGVsKSksRD8oaj1uZXcgU3dhZ2dlclVpLlZpZXdzLlNpZ25hdHVyZVZpZXcoe21vZGVsOkQsCnJvdXRlcjp0aGlzLnJvdXRlcix0YWdOYW1lOiJkaXYifSksJCgiLm1vZGVsLXNpZ25hdHVyZSIsJCh0aGlzLmVsKSkuYXBwZW5kKGoucmVuZGVyKCkuZWwpKToodGhpcy5tb2RlbC5yZXNwb25zZUNsYXNzU2lnbmF0dXJlPSJzdHJpbmciLCQoIi5tb2RlbC1zaWduYXR1cmUiLCQodGhpcy5lbCkpLmh0bWwodGhpcy5tb2RlbC50eXBlKSksaT17aXNQYXJhbTohMX0saS5jb25zdW1lcz10aGlzLm1vZGVsLmNvbnN1bWVzLGkucHJvZHVjZXM9dGhpcy5tb2RlbC5wcm9kdWNlcyxDPXRoaXMubW9kZWwucGFyYW1ldGVycyxnPTAscD1DLmxlbmd0aDtwPmc7ZysrKWI9Q1tnXSxOPWIudHlwZXx8Yi5kYXRhVHlwZXx8IiIsInVuZGVmaW5lZCI9PXR5cGVvZiBOJiYoVD1iLnNjaGVtYSxUJiZULiRyZWYmJih4PVQuJHJlZixOPTA9PT14LmluZGV4T2YoIiMvZGVmaW5pdGlvbnMvIik/eC5zdWJzdHJpbmcoIiMvZGVmaW5pdGlvbnMvIi5sZW5ndGgpOngpKSxOJiYiZmlsZSI9PT1OLnRvTG93ZXJDYXNlKCkmJihpLmNvbnN1bWVzfHwoaS5jb25zdW1lcz0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpKSxiLnR5cGU9Tjtmb3IoTz1uZXcgU3dhZ2dlclVpLlZpZXdzLlJlc3BvbnNlQ29udGVudFR5cGVWaWV3KHttb2RlbDppLHJvdXRlcjp0aGlzLnJvdXRlcn0pLCQoIi5yZXNwb25zZS1jb250ZW50LXR5cGUiLCQodGhpcy5lbCkpLmFwcGVuZChPLnJlbmRlcigpLmVsKSxFPXRoaXMubW9kZWwucGFyYW1ldGVycyx2PTAsZj1FLmxlbmd0aDtmPnY7disrKWI9RVt2XSx0aGlzLmFkZFBhcmFtZXRlcihiLGkuY29uc3VtZXMpO2ZvcihrPXRoaXMubW9kZWwucmVzcG9uc2VNZXNzYWdlcyx3PTAsaD1rLmxlbmd0aDtoPnc7dysrKUw9a1t3XSx0aGlzLmFkZFN0YXR1c0NvZGUoTCk7cmV0dXJuIHRoaXN9LGFkZFBhcmFtZXRlcjpmdW5jdGlvbihlLHQpe2UuY29uc3VtZXM9dDt2YXIgbj1uZXcgU3dhZ2dlclVpLlZpZXdzLlBhcmFtZXRlclZpZXcoe21vZGVsOmUsdGFnTmFtZToidHIiLHJlYWRPbmx5OnRoaXMubW9kZWwuaXNSZWFkT25seX0pOyQoIi5vcGVyYXRpb24tcGFyYW1zIiwkKHRoaXMuZWwpKS5hcHBlbmQobi5yZW5kZXIoKS5lbCl9LGFkZFN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFN3YWdnZXJVaS5WaWV3cy5TdGF0dXNDb2RlVmlldyh7bW9kZWw6ZSx0YWdOYW1lOiJ0ciIscm91dGVyOnRoaXMucm91dGVyfSk7JCgiLm9wZXJhdGlvbi1zdGF0dXMiLCQodGhpcy5lbCkpLmFwcGVuZCh0LnJlbmRlcigpLmVsKX0sc3VibWl0T3BlcmF0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLGE7aWYobnVsbCE9PWUmJmUucHJldmVudERlZmF1bHQoKSxuPSQoIi5zYW5kYm94IiwkKHRoaXMuZWwpKSx0PSEwLG4uZmluZCgiaW5wdXQucmVxdWlyZWQiKS5lYWNoKGZ1bmN0aW9uKCl7JCh0aGlzKS5yZW1vdmVDbGFzcygiZXJyb3IiKSwiIj09PWpRdWVyeS50cmltKCQodGhpcykudmFsKCkpJiYoJCh0aGlzKS5hZGRDbGFzcygiZXJyb3IiKSwkKHRoaXMpLndpZ2dsZSh7Y2FsbGJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7JChlKS5mb2N1cygpfX0odGhpcyl9KSx0PSExKX0pLG4uZmluZCgidGV4dGFyZWEucmVxdWlyZWQiKS5lYWNoKGZ1bmN0aW9uKCl7JCh0aGlzKS5yZW1vdmVDbGFzcygiZXJyb3IiKSwiIj09PWpRdWVyeS50cmltKCQodGhpcykudmFsKCkpJiYoJCh0aGlzKS5hZGRDbGFzcygiZXJyb3IiKSwkKHRoaXMpLndpZ2dsZSh7Y2FsbGJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuICQoZSkuZm9jdXMoKX19KHRoaXMpfSksdD0hMSl9KSxuLmZpbmQoInNlbGVjdC5yZXF1aXJlZCIpLmVhY2goZnVuY3Rpb24oKXskKHRoaXMpLnJlbW92ZUNsYXNzKCJlcnJvciIpLC0xPT09dGhpcy5zZWxlY3RlZEluZGV4JiYoJCh0aGlzKS5hZGRDbGFzcygiZXJyb3IiKSwkKHRoaXMpLndpZ2dsZSh7Y2FsbGJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7JChlKS5mb2N1cygpfX0odGhpcyl9KSx0PSExKX0pLHQpe2lmKGk9dGhpcy5nZXRJbnB1dE1hcChuKSxyPXRoaXMuaXNGaWxlVXBsb2FkKG4pLGE9e3BhcmVudDp0aGlzfSx0aGlzLm9wdGlvbnMuc3dhZ2dlck9wdGlvbnMpZm9yKHZhciBvIGluIHRoaXMub3B0aW9ucy5zd2FnZ2VyT3B0aW9ucylhW29dPXRoaXMub3B0aW9ucy5zd2FnZ2VyT3B0aW9uc1tvXTtyZXR1cm4gYS5yZXNwb25zZUNvbnRlbnRUeXBlPSQoImRpdiBzZWxlY3RbbmFtZT1yZXNwb25zZUNvbnRlbnRUeXBlXSIsJCh0aGlzLmVsKSkudmFsKCksYS5yZXF1ZXN0Q29udGVudFR5cGU9JCgiZGl2IHNlbGVjdFtuYW1lPXBhcmFtZXRlckNvbnRlbnRUeXBlXSIsJCh0aGlzLmVsKSkudmFsKCksJCgiLnJlc3BvbnNlX3Rocm9iYmVyIiwkKHRoaXMuZWwpKS5zaG93KCkscj8oJCgiLnJlcXVlc3RfdXJsIiwkKHRoaXMuZWwpKS5odG1sKCI8cHJlPjwvcHJlPiIpLCQoIi5yZXF1ZXN0X3VybCBwcmUiLCQodGhpcy5lbCkpLnRleHQodGhpcy5pbnZvY2F0aW9uVXJsKSxhLnVzZUpRdWVyeT0hMCxpLnBhcmFtZXRlckNvbnRlbnRUeXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIix0aGlzLm1vZGVsLmV4ZWN1dGUoaSxhLHRoaXMuc2hvd0NvbXBsZXRlU3RhdHVzLHRoaXMuc2hvd0Vycm9yU3RhdHVzLHRoaXMpKToodGhpcy5tYXA9aSx0aGlzLm1vZGVsLmV4ZWN1dGUoaSxhLHRoaXMuc2hvd0NvbXBsZXRlU3RhdHVzLHRoaXMuc2hvd0Vycm9yU3RhdHVzLHRoaXMpKX19LGdldElucHV0TWFwOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLGEsbyxzLGwsdSxjLHAsZjtmb3IodD17fSxuPWUuZmluZCgiaW5wdXQiKSxyPTAsaT1uLmxlbmd0aDtpPnI7cisrKWE9bltyXSxudWxsIT09YS52YWx1ZSYmalF1ZXJ5LnRyaW0oYS52YWx1ZSkubGVuZ3RoPjAmJih0W2EubmFtZV09YS52YWx1ZSksImZpbGUiPT09YS50eXBlJiYodFthLm5hbWVdPWEuZmlsZXNbMF0pO2ZvcihvPWUuZmluZCgidGV4dGFyZWEiKSxzPTAsbD1vLmxlbmd0aDtsPnM7cysrKWE9b1tzXSx1PXRoaXMuZ2V0VGV4dEFyZWFWYWx1ZShhKSxudWxsIT09dSYmalF1ZXJ5LnRyaW0odSkubGVuZ3RoPjAmJih0W2EubmFtZV09dSk7Zm9yKGM9ZS5maW5kKCJzZWxlY3QiKSxwPTAsZj1jLmxlbmd0aDtmPnA7cCsrKWE9Y1twXSx1PXRoaXMuZ2V0U2VsZWN0ZWRWYWx1ZShhKSxudWxsIT09dSYmalF1ZXJ5LnRyaW0odSkubGVuZ3RoPjAmJih0W2EubmFtZV09dSk7cmV0dXJuIHR9LGlzRmlsZVVwbG9hZDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxhPSExO2Zvcih0PWUuZmluZCgiaW5wdXQiKSxuPTAscj10Lmxlbmd0aDtyPm47bisrKWk9dFtuXSwiZmlsZSI9PT1pLnR5cGUmJihhPSEwKTtyZXR1cm4gYX0sc3VjY2VzczpmdW5jdGlvbihlLHQpe3Quc2hvd0NvbXBsZXRlU3RhdHVzKGUpfSx3cmFwOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLGEsbyxzO2ZvcihyPXt9LG49ZS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKS5zcGxpdCgiXHIiKSxhPTAsbz1uLmxlbmd0aDtvPmE7YSsrKWk9blthXSx0PWkubWF0Y2goL14oW146XSo/KTooLiopJC8pLHR8fCh0PVtdKSx0LnNoaWZ0KCksdm9pZCAwIT09dFswXSYmdm9pZCAwIT09dFsxXSYmKHJbdFswXS50cmltKCldPXRbMV0udHJpbSgpKTtyZXR1cm4gcz17fSxzLmNvbnRlbnQ9e30scy5jb250ZW50LmRhdGE9ZS5yZXNwb25zZVRleHQscy5oZWFkZXJzPXIscy5yZXF1ZXN0PXt9LHMucmVxdWVzdC51cmw9dGhpcy5pbnZvY2F0aW9uVXJsLHMuc3RhdHVzPWUuc3RhdHVzLHN9LGdldFNlbGVjdGVkVmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5tdWx0aXBsZSl7Zm9yKHZhciB0PVtdLG49MCxyPWUub3B0aW9ucy5sZW5ndGg7cj5uO24rKyl7dmFyIGk9ZS5vcHRpb25zW25dO2kuc2VsZWN0ZWQmJnQucHVzaChpLnZhbHVlKX1yZXR1cm4gdC5sZW5ndGg+MD90Om51bGx9cmV0dXJuIGUudmFsdWV9LGhpZGVSZXNwb25zZTpmdW5jdGlvbihlKXtlJiZlLnByZXZlbnREZWZhdWx0KCksJCgiLnJlc3BvbnNlIiwkKHRoaXMuZWwpKS5zbGlkZVVwKCksJCgiLnJlc3BvbnNlX2hpZGVyIiwkKHRoaXMuZWwpKS5mYWRlT3V0KCl9LHNob3dSZXNwb25zZTpmdW5jdGlvbihlKXt2YXIgdD1KU09OLnN0cmluZ2lmeShlLG51bGwsIgkiKS5yZXBsYWNlKC9cbi9nLCI8YnI+Iik7JCgiLnJlc3BvbnNlX2JvZHkiLCQodGhpcy5lbCkpLmh0bWwoXy5lc2NhcGUodCkpfSxzaG93RXJyb3JTdGF0dXM6ZnVuY3Rpb24oZSx0KXt0LnNob3dTdGF0dXMoZSl9LHNob3dDb21wbGV0ZVN0YXR1czpmdW5jdGlvbihlLHQpe3Quc2hvd1N0YXR1cyhlKX0sZm9ybWF0WG1sOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLGEsbyxzLGwsdSxjLHAsZixoO2ZvcihwPS8oPikoPCkoXC8qKS9nLGg9L1sgXSooLiopWyBdK1xuL2csdD0vKDwuKz4pKC4rXG4pL2csZT1lLnJlcGxhY2UocCwiJDFcbiQyJDMiKS5yZXBsYWNlKGgsIiQxXG4iKS5yZXBsYWNlKHQsIiQxXG4kMiIpLGM9MCxyPSIiLGw9ZS5zcGxpdCgiXG4iKSxpPTAsbz0ib3RoZXIiLGY9eyJzaW5nbGUtPnNpbmdsZSI6MCwic2luZ2xlLT5jbG9zaW5nIjotMSwic2luZ2xlLT5vcGVuaW5nIjowLCJzaW5nbGUtPm90aGVyIjowLCJjbG9zaW5nLT5zaW5nbGUiOjAsImNsb3NpbmctPmNsb3NpbmciOi0xLCJjbG9zaW5nLT5vcGVuaW5nIjowLCJjbG9zaW5nLT5vdGhlciI6MCwib3BlbmluZy0+c2luZ2xlIjoxLCJvcGVuaW5nLT5jbG9zaW5nIjowLCJvcGVuaW5nLT5vcGVuaW5nIjoxLCJvcGVuaW5nLT5vdGhlciI6MSwib3RoZXItPnNpbmdsZSI6MCwib3RoZXItPmNsb3NpbmciOi0xLCJvdGhlci0+b3BlbmluZyI6MCwib3RoZXItPm90aGVyIjowfSxuPWZ1bmN0aW9uKGUpe3ZhciB0LG4sYSxzLGwsdSxjO3U9e3NpbmdsZTpCb29sZWFuKGUubWF0Y2goLzwuK1wvPi8pKSxjbG9zaW5nOkJvb2xlYW4oZS5tYXRjaCgvPFwvLis+LykpLG9wZW5pbmc6Qm9vbGVhbihlLm1hdGNoKC88W14hP10uKj4vKSl9LGw9ZnVuY3Rpb24oKXt2YXIgZTtlPVtdO2ZvcihhIGluIHUpYz11W2FdLGMmJmUucHVzaChhKTtyZXR1cm4gZX0oKVswXSxsPXZvaWQgMD09PWw/Im90aGVyIjpsLHQ9bysiLT4iK2wsbz1sLHM9IiIsaSs9Zlt0XSxzPWZ1bmN0aW9uKCl7dmFyIGUsdCxyO2ZvcihyPVtdLG49ZT0wLHQ9aTt0Pj0wP3Q+ZTplPnQ7bj10Pj0wPysrZTotLWUpci5wdXNoKCIgICIpO3JldHVybiByfSgpLmpvaW4oIiIpLCJvcGVuaW5nLT5jbG9zaW5nIj09PXQ/cj1yLnN1YnN0cigwLHIubGVuZ3RoLTEpK2UrIlxuIjpyKz1zK2UrIlxuIn0sYT0wLHM9bC5sZW5ndGg7cz5hO2ErKyl1PWxbYV0sbih1KTtyZXR1cm4gcn0sc2hvd1N0YXR1czpmdW5jdGlvbihlKXt2YXIgdCxuO3ZvaWQgMD09PWUuY29udGVudD8obj1lLmRhdGEsdD1lLnVybCk6KG49ZS5jb250ZW50LmRhdGEsdD1lLnJlcXVlc3QudXJsKTt2YXIgcj1lLmhlYWRlcnM7bj1qUXVlcnkudHJpbShuKTt2YXIgaT1udWxsO3ImJihpPXJbIkNvbnRlbnQtVHlwZSJdfHxyWyJjb250ZW50LXR5cGUiXSxpJiYoaT1pLnNwbGl0KCI7IilbMF0udHJpbSgpKSksJCgiLnJlc3BvbnNlX2JvZHkiLCQodGhpcy5lbCkpLnJlbW92ZUNsYXNzKCJqc29uIiksJCgiLnJlc3BvbnNlX2JvZHkiLCQodGhpcy5lbCkpLnJlbW92ZUNsYXNzKCJ4bWwiKTt2YXIgYSxvLHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYXVkaW8iKTtyZXR1cm4hKCF0LmNhblBsYXlUeXBlfHwhdC5jYW5QbGF5VHlwZShlKS5yZXBsYWNlKC9uby8sIiIpKX07aWYobilpZigiYXBwbGljYXRpb24vanNvbiI9PT1pfHwvXCtqc29uJC8udGVzdChpKSl7dmFyIGw9bnVsbDt0cnl7bD1KU09OLnN0cmluZ2lmeShKU09OLnBhcnNlKG4pLG51bGwsIiAgIil9Y2F0Y2godSl7bD0iY2FuJ3QgcGFyc2UgSlNPTi4gIFJhdyByZXN1bHQ6XG5cbiIrbn1vPSQoIjxjb2RlIC8+IikudGV4dChsKSxhPSQoJzxwcmUgY2xhc3M9Impzb24iIC8+JykuYXBwZW5kKG8pfWVsc2UgaWYoImFwcGxpY2F0aW9uL3htbCI9PT1pfHwvXCt4bWwkLy50ZXN0KGkpKW89JCgiPGNvZGUgLz4iKS50ZXh0KHRoaXMuZm9ybWF0WG1sKG4pKSxhPSQoJzxwcmUgY2xhc3M9InhtbCIgLz4nKS5hcHBlbmQobyk7ZWxzZSBpZigidGV4dC9odG1sIj09PWkpbz0kKCI8Y29kZSAvPiIpLmh0bWwoXy5lc2NhcGUobikpLGE9JCgnPHByZSBjbGFzcz0ieG1sIiAvPicpLmFwcGVuZChvKTtlbHNlIGlmKC90ZXh0XC9wbGFpbi8udGVzdChpKSlvPSQoIjxjb2RlIC8+IikudGV4dChuKSxhPSQoJzxwcmUgY2xhc3M9InBsYWluIiAvPicpLmFwcGVuZChvKTtlbHNlIGlmKC9eaW1hZ2VcLy8udGVzdChpKSlhPSQoIjxpbWc+IikuYXR0cigic3JjIix0KTtlbHNlIGlmKC9eYXVkaW9cLy8udGVzdChpKSYmcyhpKSlhPSQoIjxhdWRpbyBjb250cm9scz4iKS5hcHBlbmQoJCgiPHNvdXJjZT4iKS5hdHRyKCJzcmMiLHQpLmF0dHIoInR5cGUiLGkpKTtlbHNlIGlmKHJbIkNvbnRlbnQtRGlzcG9zaXRpb24iXSYmL2F0dGFjaG1lbnQvLnRlc3QoclsiQ29udGVudC1EaXNwb3NpdGlvbiJdKXx8clsiY29udGVudC1kaXNwb3NpdGlvbiJdJiYvYXR0YWNobWVudC8udGVzdChyWyJjb250ZW50LWRpc3Bvc2l0aW9uIl0pfHxyWyJDb250ZW50LURlc2NyaXB0aW9uIl0mJi9GaWxlIFRyYW5zZmVyLy50ZXN0KHJbIkNvbnRlbnQtRGVzY3JpcHRpb24iXSl8fHJbImNvbnRlbnQtZGVzY3JpcHRpb24iXSYmL0ZpbGUgVHJhbnNmZXIvLnRlc3QoclsiY29udGVudC1kZXNjcmlwdGlvbiJdKSlpZigiQmxvYiJpbiB3aW5kb3cpe3ZhciBjPWl8fCJ0ZXh0L2h0bWwiLHA9bmV3IEJsb2IoW25dLHt0eXBlOmN9KSxmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxoPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHApLGQ9ZS51cmwuc3Vic3RyKGUudXJsLmxhc3RJbmRleE9mKCIvIikrMSksbT1bYyxkLGhdLmpvaW4oIjoiKTtmLnNldEF0dHJpYnV0ZSgiaHJlZiIsaCksZi5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixtKSxmLmlubmVyVGV4dD0iRG93bmxvYWQgIitkLGE9JCgiPGRpdi8+IikuYXBwZW5kKGYpfWVsc2UgYT0kKCc8cHJlIGNsYXNzPSJqc29uIiAvPicpLmFwcGVuZCgiRG93bmxvYWQgaGVhZGVycyBkZXRlY3RlZCBidXQgeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgZG93bmxvYWRpbmcgYmluYXJ5IHZpYSBYSFIgKEJsb2IpLiIpO2Vsc2Ugci5sb2NhdGlvbnx8ci5Mb2NhdGlvbj93aW5kb3cubG9jYXRpb249ZS51cmw6KG89JCgiPGNvZGUgLz4iKS50ZXh0KG4pLGE9JCgnPHByZSBjbGFzcz0ianNvbiIgLz4nKS5hcHBlbmQobykpO2Vsc2Ugbz0kKCI8Y29kZSAvPiIpLnRleHQoIm5vIGNvbnRlbnQiKSxhPSQoJzxwcmUgY2xhc3M9Impzb24iIC8+JykuYXBwZW5kKG8pO3ZhciBnPWE7JCgiLnJlcXVlc3RfdXJsIiwkKHRoaXMuZWwpKS5odG1sKCI8cHJlPjwvcHJlPiIpLCQoIi5yZXF1ZXN0X3VybCBwcmUiLCQodGhpcy5lbCkpLnRleHQodCksJCgiLnJlc3BvbnNlX2NvZGUiLCQodGhpcy5lbCkpLmh0bWwoIjxwcmU+IitlLnN0YXR1cysiPC9wcmU+IiksJCgiLnJlc3BvbnNlX2JvZHkiLCQodGhpcy5lbCkpLmh0bWwoZyksJCgiLnJlc3BvbnNlX2hlYWRlcnMiLCQodGhpcy5lbCkpLmh0bWwoIjxwcmU+IitfLmVzY2FwZShKU09OLnN0cmluZ2lmeShlLmhlYWRlcnMsbnVsbCwiICAiKSkucmVwbGFjZSgvXG4vZywiPGJyPiIpKyI8L3ByZT4iKSwkKCIucmVzcG9uc2UiLCQodGhpcy5lbCkpLnNsaWRlRG93bigpLCQoIi5yZXNwb25zZV9oaWRlciIsJCh0aGlzLmVsKSkuc2hvdygpLCQoIi5yZXNwb25zZV90aHJvYmJlciIsJCh0aGlzLmVsKSkuaGlkZSgpO3ZhciB5PXRoaXMubW9kZWwuYXNDdXJsKHRoaXMubWFwKTt5PXkucmVwbGFjZSgiISIsIiYjMzM7IiksJCgiLmN1cmwiLCQodGhpcy5lbCkpLmh0bWwoIjxwcmU+Iit5KyI8L3ByZT4iKTt2YXIgdj10aGlzLm9wdGlvbnMuc3dhZ2dlck9wdGlvbnM7aWYodi5zaG93UmVxdWVzdEhlYWRlcnMpe3ZhciBiPSQoIi5zYW5kYm94IiwkKHRoaXMuZWwpKSx3PXRoaXMuZ2V0SW5wdXRNYXAoYikseD10aGlzLm1vZGVsLmdldEhlYWRlclBhcmFtcyh3KTtkZWxldGUgeFsiQ29udGVudC1UeXBlIl0sJCgiLnJlcXVlc3RfaGVhZGVycyIsJCh0aGlzLmVsKSkuaHRtbCgiPHByZT4iK18uZXNjYXBlKEpTT04uc3RyaW5naWZ5KHgsbnVsbCwiICAiKSkucmVwbGFjZSgvXG4vZywiPGJyPiIpKyI8L3ByZT4iKX12YXIgUz0kKCIucmVzcG9uc2VfYm9keSIsJCh0aGlzLmVsKSlbMF07cmV0dXJuIHYuaGlnaGxpZ2h0U2l6ZVRocmVzaG9sZCYmInVuZGVmaW5lZCIhPXR5cGVvZiBlLmRhdGEmJmUuZGF0YS5sZW5ndGg+di5oaWdobGlnaHRTaXplVGhyZXNob2xkP1M6aGxqcy5oaWdobGlnaHRCbG9jayhTKX0sdG9nZ2xlT3BlcmF0aW9uQ29udGVudDpmdW5jdGlvbihlKXt2YXIgdD0kKCIjIitEb2NzLmVzY2FwZVJlc291cmNlTmFtZSh0aGlzLnBhcmVudElkKyJfIit0aGlzLm5pY2tuYW1lKyJfY29udGVudCIpKTt0LmlzKCI6dmlzaWJsZSIpPyhlLnByZXZlbnREZWZhdWx0KCksJC5iYnEucHVzaFN0YXRlKCIjLyIsMiksRG9jcy5jb2xsYXBzZU9wZXJhdGlvbih0KSk6KGUucHJldmVudERlZmF1bHQoKSxEb2NzLmV4cGFuZE9wZXJhdGlvbih0KSl9LGdldFRleHRBcmVhVmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk7aWYobnVsbD09PWUudmFsdWV8fDA9PT1qUXVlcnkudHJpbShlLnZhbHVlKS5sZW5ndGgpcmV0dXJuIG51bGw7aWYodD10aGlzLmdldFBhcmFtQnlOYW1lKGUubmFtZSksdCYmdC50eXBlJiYiYXJyYXkiPT09dC50eXBlLnRvTG93ZXJDYXNlKCkpe2ZvcihuPWUudmFsdWUuc3BsaXQoIlxuIikscj1bXSxpPTA7aTxuLmxlbmd0aDtpKyspbnVsbCE9PW5baV0mJmpRdWVyeS50cmltKG5baV0pLmxlbmd0aD4wJiZyLnB1c2gobltpXSk7cmV0dXJuIHIubGVuZ3RoPjA/cjpudWxsfXJldHVybiBlLnZhbHVlfSxnZXRQYXJhbUJ5TmFtZTpmdW5jdGlvbihlKXt2YXIgdDtpZih0aGlzLm1vZGVsLnBhcmFtZXRlcnMpZm9yKHQ9MDt0PHRoaXMubW9kZWwucGFyYW1ldGVycy5sZW5ndGg7dCsrKWlmKHRoaXMubW9kZWwucGFyYW1ldGVyc1t0XS5uYW1lPT09ZSlyZXR1cm4gdGhpcy5tb2RlbC5wYXJhbWV0ZXJzW3RdO3JldHVybiBudWxsfX0pLFN3YWdnZXJVaS5WaWV3cy5QYXJhbWV0ZXJDb250ZW50VHlwZVZpZXc9QmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oKXt9LHJlbmRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsLnBhcmFtZXRlckNvbnRlbnRUeXBlSWQ9InBjdCIrTWF0aC5yYW5kb20oKSwkKHRoaXMuZWwpLmh0bWwoSGFuZGxlYmFycy50ZW1wbGF0ZXMucGFyYW1ldGVyX2NvbnRlbnRfdHlwZSh0aGlzLm1vZGVsKSksdGhpc319KSxTd2FnZ2VyVWkuVmlld3MuUGFyYW1ldGVyVmlldz1CYWNrYm9uZS5WaWV3LmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbigpe0hhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoImlzQXJyYXkiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuImFycmF5Ij09PWUudHlwZS50b0xvd2VyQ2FzZSgpfHxlLmFsbG93TXVsdGlwbGU/dC5mbih0aGlzKTp0LmludmVyc2UodGhpcyl9KX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5tb2RlbC50eXBlfHx0aGlzLm1vZGVsLmRhdGFUeXBlO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgZSl7dmFyIHQ9dGhpcy5tb2RlbC5zY2hlbWE7aWYodCYmdC4kcmVmKXt2YXIgbj10LiRyZWY7ZT0wPT09bi5pbmRleE9mKCIjL2RlZmluaXRpb25zLyIpP24uc3Vic3RyaW5nKCIjL2RlZmluaXRpb25zLyIubGVuZ3RoKTpufX10aGlzLm1vZGVsLnR5cGU9ZSx0aGlzLm1vZGVsLnBhcmFtVHlwZT10aGlzLm1vZGVsWyJpbiJdfHx0aGlzLm1vZGVsLnBhcmFtVHlwZSx0aGlzLm1vZGVsLmlzQm9keT0iYm9keSI9PT10aGlzLm1vZGVsLnBhcmFtVHlwZXx8ImJvZHkiPT09dGhpcy5tb2RlbFsiaW4iXSx0aGlzLm1vZGVsLmlzRmlsZT1lJiYiZmlsZSI9PT1lLnRvTG93ZXJDYXNlKCksInVuZGVmaW5lZCI9PXR5cGVvZiB0aGlzLm1vZGVsWyJkZWZhdWx0Il0mJih0aGlzLm1vZGVsWyJkZWZhdWx0Il09dGhpcy5tb2RlbC5kZWZhdWx0VmFsdWUpLHRoaXMubW9kZWwuaGFzRGVmYXVsdD0idW5kZWZpbmVkIiE9dHlwZW9mIHRoaXMubW9kZWxbImRlZmF1bHQiXSx0aGlzLm1vZGVsLnZhbHVlSWQ9Im0iK3RoaXMubW9kZWwubmFtZStNYXRoLnJhbmRvbSgpLHRoaXMubW9kZWwuYWxsb3dhYmxlVmFsdWVzJiYodGhpcy5tb2RlbC5pc0xpc3Q9ITApO3ZhciByPXRoaXMudGVtcGxhdGUoKTskKHRoaXMuZWwpLmh0bWwocih0aGlzLm1vZGVsKSk7dmFyIGk9e3NhbXBsZUpTT046dGhpcy5tb2RlbC5zYW1wbGVKU09OLGlzUGFyYW06ITAsc2lnbmF0dXJlOnRoaXMubW9kZWwuc2lnbmF0dXJlfTtpZih0aGlzLm1vZGVsLnNhbXBsZUpTT04pe3ZhciBhPW5ldyBTd2FnZ2VyVWkuVmlld3MuU2lnbmF0dXJlVmlldyh7bW9kZWw6aSx0YWdOYW1lOiJkaXYifSk7JCgiLm1vZGVsLXNpZ25hdHVyZSIsJCh0aGlzLmVsKSkuYXBwZW5kKGEucmVuZGVyKCkuZWwpfWVsc2UgJCgiLm1vZGVsLXNpZ25hdHVyZSIsJCh0aGlzLmVsKSkuaHRtbCh0aGlzLm1vZGVsLnNpZ25hdHVyZSk7dmFyIG89ITE7dGhpcy5tb2RlbC5pc0JvZHkmJihvPSEwKTt2YXIgcz17aXNQYXJhbTpvfTtpZihzLmNvbnN1bWVzPXRoaXMubW9kZWwuY29uc3VtZXMsbyl7dmFyIGw9bmV3IFN3YWdnZXJVaS5WaWV3cy5QYXJhbWV0ZXJDb250ZW50VHlwZVZpZXcoe21vZGVsOnN9KTskKCIucGFyYW1ldGVyLWNvbnRlbnQtdHlwZSIsJCh0aGlzLmVsKSkuYXBwZW5kKGwucmVuZGVyKCkuZWwpfWVsc2V7dmFyIHU9bmV3IFN3YWdnZXJVaS5WaWV3cy5SZXNwb25zZUNvbnRlbnRUeXBlVmlldyh7bW9kZWw6c30pOyQoIi5yZXNwb25zZS1jb250ZW50LXR5cGUiLCQodGhpcy5lbCkpLmFwcGVuZCh1LnJlbmRlcigpLmVsKX1yZXR1cm4gdGhpc30sdGVtcGxhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbC5pc0xpc3Q/SGFuZGxlYmFycy50ZW1wbGF0ZXMucGFyYW1fbGlzdDp0aGlzLm9wdGlvbnMucmVhZE9ubHk/dGhpcy5tb2RlbC5yZXF1aXJlZD9IYW5kbGViYXJzLnRlbXBsYXRlcy5wYXJhbV9yZWFkb25seV9yZXF1aXJlZDpIYW5kbGViYXJzLnRlbXBsYXRlcy5wYXJhbV9yZWFkb25seTp0aGlzLm1vZGVsLnJlcXVpcmVkP0hhbmRsZWJhcnMudGVtcGxhdGVzLnBhcmFtX3JlcXVpcmVkOkhhbmRsZWJhcnMudGVtcGxhdGVzLnBhcmFtfX0pLFN3YWdnZXJVaS5WaWV3cy5SZXNvdXJjZVZpZXc9QmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSl7ZT1lfHx7fSx0aGlzLnJvdXRlcj1lLnJvdXRlcix0aGlzLmF1dGhzPWUuYXV0aHMsIiI9PT10aGlzLm1vZGVsLmRlc2NyaXB0aW9uJiYodGhpcy5tb2RlbC5kZXNjcmlwdGlvbj1udWxsKSx0aGlzLm1vZGVsLmRlc2NyaXB0aW9uJiYodGhpcy5tb2RlbC5zdW1tYXJ5PXRoaXMubW9kZWwuZGVzY3JpcHRpb24pfSxyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT17fTskKHRoaXMuZWwpLmh0bWwoSGFuZGxlYmFycy50ZW1wbGF0ZXMucmVzb3VyY2UodGhpcy5tb2RlbCkpO2Zvcih2YXIgdD0wO3Q8dGhpcy5tb2RlbC5vcGVyYXRpb25zQXJyYXkubGVuZ3RoO3QrKyl7Zm9yKHZhciBuPXRoaXMubW9kZWwub3BlcmF0aW9uc0FycmF5W3RdLHI9MCxpPW4ubmlja25hbWU7InVuZGVmaW5lZCIhPXR5cGVvZiBlW2ldOylpPWkrIl8iK3Iscis9MTtlW2ldPW4sbi5uaWNrbmFtZT1pLG4ucGFyZW50SWQ9dGhpcy5tb2RlbC5pZCx0aGlzLmFkZE9wZXJhdGlvbihuKX1yZXR1cm4gJCgiLnRvZ2dsZUVuZHBvaW50TGlzdCIsdGhpcy5lbCkuY2xpY2sodGhpcy5jYWxsRG9jcy5iaW5kKHRoaXMsInRvZ2dsZUVuZHBvaW50TGlzdEZvclJlc291cmNlIikpLCQoIi5jb2xsYXBzZVJlc291cmNlIix0aGlzLmVsKS5jbGljayh0aGlzLmNhbGxEb2NzLmJpbmQodGhpcywiY29sbGFwc2VPcGVyYXRpb25zRm9yUmVzb3VyY2UiKSksJCgiLmV4cGFuZFJlc291cmNlIix0aGlzLmVsKS5jbGljayh0aGlzLmNhbGxEb2NzLmJpbmQodGhpcywiZXhwYW5kT3BlcmF0aW9uc0ZvclJlc291cmNlIikpLHRoaXN9LGFkZE9wZXJhdGlvbjpmdW5jdGlvbihlKXtlLm51bWJlcj10aGlzLm51bWJlcjt2YXIgdD1uZXcgU3dhZ2dlclVpLlZpZXdzLk9wZXJhdGlvblZpZXcoe21vZGVsOmUscm91dGVyOnRoaXMucm91dGVyLHRhZ05hbWU6ImxpIixjbGFzc05hbWU6ImVuZHBvaW50Iixzd2FnZ2VyT3B0aW9uczp0aGlzLm9wdGlvbnMuc3dhZ2dlck9wdGlvbnMsYXV0aHM6dGhpcy5hdXRoc30pOyQoIi5lbmRwb2ludHMiLCQodGhpcy5lbCkpLmFwcGVuZCh0LnJlbmRlcigpLmVsKSx0aGlzLm51bWJlcisrfSxjYWxsRG9jczpmdW5jdGlvbihlLHQpe3QucHJldmVudERlZmF1bHQoKSxEb2NzW2VdKHQuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEtaWQiKSl9fSksU3dhZ2dlclVpLlZpZXdzLlJlc3BvbnNlQ29udGVudFR5cGVWaWV3PUJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKCl7fSxyZW5kZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbC5yZXNwb25zZUNvbnRlbnRUeXBlSWQ9InJjdCIrTWF0aC5yYW5kb20oKSwkKHRoaXMuZWwpLmh0bWwoSGFuZGxlYmFycy50ZW1wbGF0ZXMucmVzcG9uc2VfY29udGVudF90eXBlKHRoaXMubW9kZWwpKSx0aGlzfX0pLFN3YWdnZXJVaS5WaWV3cy5TaWduYXR1cmVWaWV3PUJhY2tib25lLlZpZXcuZXh0ZW5kKHtldmVudHM6eyJjbGljayBhLmRlc2NyaXB0aW9uLWxpbmsiOiJzd2l0Y2hUb0Rlc2NyaXB0aW9uIiwiY2xpY2sgYS5zbmlwcGV0LWxpbmsiOiJzd2l0Y2hUb1NuaXBwZXQiLCJtb3VzZWRvd24gLnNuaXBwZXQiOiJzbmlwcGV0VG9UZXh0QXJlYSJ9LGluaXRpYWxpemU6ZnVuY3Rpb24oKXt9LHJlbmRlcjpmdW5jdGlvbigpe3JldHVybiAkKHRoaXMuZWwpLmh0bWwoSGFuZGxlYmFycy50ZW1wbGF0ZXMuc2lnbmF0dXJlKHRoaXMubW9kZWwpKSx0aGlzLnN3aXRjaFRvU25pcHBldCgpLHRoaXMuaXNQYXJhbT10aGlzLm1vZGVsLmlzUGFyYW0sdGhpcy5pc1BhcmFtJiYkKCIubm90aWNlIiwkKHRoaXMuZWwpKS50ZXh0KCJDbGljayB0byBzZXQgYXMgcGFyYW1ldGVyIHZhbHVlIiksdGhpc30sc3dpdGNoVG9EZXNjcmlwdGlvbjpmdW5jdGlvbihlKXtlJiZlLnByZXZlbnREZWZhdWx0KCksJCgiLnNuaXBwZXQiLCQodGhpcy5lbCkpLmhpZGUoKSwkKCIuZGVzY3JpcHRpb24iLCQodGhpcy5lbCkpLnNob3coKSwkKCIuZGVzY3JpcHRpb24tbGluayIsJCh0aGlzLmVsKSkuYWRkQ2xhc3MoInNlbGVjdGVkIiksJCgiLnNuaXBwZXQtbGluayIsJCh0aGlzLmVsKSkucmVtb3ZlQ2xhc3MoInNlbGVjdGVkIil9LHN3aXRjaFRvU25pcHBldDpmdW5jdGlvbihlKXtlJiZlLnByZXZlbnREZWZhdWx0KCksJCgiLmRlc2NyaXB0aW9uIiwkKHRoaXMuZWwpKS5oaWRlKCksJCgiLnNuaXBwZXQiLCQodGhpcy5lbCkpLnNob3coKSwkKCIuc25pcHBldC1saW5rIiwkKHRoaXMuZWwpKS5hZGRDbGFzcygic2VsZWN0ZWQiKSwkKCIuZGVzY3JpcHRpb24tbGluayIsJCh0aGlzLmVsKSkucmVtb3ZlQ2xhc3MoInNlbGVjdGVkIil9LHNuaXBwZXRUb1RleHRBcmVhOmZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNQYXJhbSl7ZSYmZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB0PSQoInRleHRhcmVhIiwkKHRoaXMuZWwucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUpKTsoIiI9PT0kLnRyaW0odC52YWwoKSl8fHQucHJvcCgicGxhY2Vob2xkZXIiKT09PXQudmFsKCkpJiZ0LnZhbCh0aGlzLm1vZGVsLnNhbXBsZUpTT04pfX19KSxTd2FnZ2VyVWkuVmlld3MuU3RhdHVzQ29kZVZpZXc9QmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPWV8fHt9LHRoaXMucm91dGVyPXRoaXMub3B0aW9ucy5yb3V0ZXJ9LHJlbmRlcjpmdW5jdGlvbigpe2lmKCQodGhpcy5lbCkuaHRtbChIYW5kbGViYXJzLnRlbXBsYXRlcy5zdGF0dXNfY29kZSh0aGlzLm1vZGVsKSksdGhpcy5yb3V0ZXIuYXBpLm1vZGVscy5oYXNPd25Qcm9wZXJ0eSh0aGlzLm1vZGVsLnJlc3BvbnNlTW9kZWwpKXt2YXIgZT17c2FtcGxlSlNPTjpKU09OLnN0cmluZ2lmeSh0aGlzLnJvdXRlci5hcGkubW9kZWxzW3RoaXMubW9kZWwucmVzcG9uc2VNb2RlbF0uY3JlYXRlSlNPTlNhbXBsZSgpLG51bGwsMiksaXNQYXJhbTohMSxzaWduYXR1cmU6dGhpcy5yb3V0ZXIuYXBpLm1vZGVsc1t0aGlzLm1vZGVsLnJlc3BvbnNlTW9kZWxdLmdldE1vY2tTaWduYXR1cmUoKX0sdD1uZXcgU3dhZ2dlclVpLlZpZXdzLlNpZ25hdHVyZVZpZXcoe21vZGVsOmUsdGFnTmFtZToiZGl2In0pOyQoIi5tb2RlbC1zaWduYXR1cmUiLHRoaXMuJGVsKS5hcHBlbmQodC5yZW5kZXIoKS5lbCl9ZWxzZSAkKCIubW9kZWwtc2lnbmF0dXJlIix0aGlzLiRlbCkuaHRtbCgiIik7cmV0dXJuIHRoaXN9fSl9KS5jYWxsKHRoaXMpOwo=