mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-18 09:35:20 +02:00
1 line
3.7 MiB
1 line
3.7 MiB
module.exports = `KGZ1bmN0aW9uKHhBLGIwKXt0eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJnR5cGVvZiBtb2R1bGU8InUiP21vZHVsZS5leHBvcnRzPWIwKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoYjApOih4QT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp4QXx8c2VsZix4QS5tZXJtYWlkPWIwKCkpfSkodGhpcyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4QShpKXtmb3IodmFyIGE9W10sZj0xO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspYVtmLTFdPWFyZ3VtZW50c1tmXTt2YXIgcD1BcnJheS5mcm9tKHR5cGVvZiBpPT0ic3RyaW5nIj9baV06aSk7cFtwLmxlbmd0aC0xXT1wW3AubGVuZ3RoLTFdLnJlcGxhY2UoL1xyP1xuKFtcdCBdKikkLywiIik7dmFyIHc9cC5yZWR1Y2UoZnVuY3Rpb24oRSxfKXt2YXIgQT1fLm1hdGNoKC9cbihbXHQgXSt8KD8hXHMpLikvZyk7cmV0dXJuIEE/RS5jb25jYXQoQS5tYXAoZnVuY3Rpb24oSSl7dmFyIEIsTjtyZXR1cm4oTj0oQj1JLm1hdGNoKC9bXHQgXS9nKSk9PT1udWxsfHxCPT09dm9pZCAwP3ZvaWQgMDpCLmxlbmd0aCkhPT1udWxsJiZOIT09dm9pZCAwP046MH0pKTpFfSxbXSk7aWYody5sZW5ndGgpe3ZhciBtPW5ldyBSZWdFeHAoYApbCSBde2ArTWF0aC5taW4uYXBwbHkoTWF0aCx3KSsifSIsImciKTtwPXAubWFwKGZ1bmN0aW9uKEUpe3JldHVybiBFLnJlcGxhY2UobSxgCmApfSl9cFswXT1wWzBdLnJlcGxhY2UoL15ccj9cbi8sIiIpO3ZhciBiPXBbMF07cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihFLF8pe3ZhciBBPWIubWF0Y2goLyg/Ol58XG4pKCAqKSQvKSxJPUE/QVsxXToiIixCPUU7dHlwZW9mIEU9PSJzdHJpbmciJiZFLmluY2x1ZGVzKGAKYCkmJihCPVN0cmluZyhFKS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihOLFIpe3JldHVybiBSPT09MD9OOiIiK0krTn0pLmpvaW4oYApgKSksYis9QitwW18rMV19KSxifXZhciBiMD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIEc3KGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCJkZWZhdWx0Iik/aS5kZWZhdWx0Oml9dmFyIGpMdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGIwLGZ1bmN0aW9uKCl7dmFyIGY9MWUzLHA9NmU0LHc9MzZlNSxtPSJtaWxsaXNlY29uZCIsYj0ic2Vjb25kIixFPSJtaW51dGUiLF89ImhvdXIiLEE9ImRheSIsST0id2VlayIsQj0ibW9udGgiLE49InF1YXJ0ZXIiLFI9InllYXIiLHo9ImRhdGUiLFc9IkludmFsaWQgRGF0ZSIsZXQ9L14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8sc3Q9L1xbKFteXF1dKyldfFl7MSw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZyxhdD17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpmdW5jdGlvbihudCl7dmFyIEl0PVsidGgiLCJzdCIsIm5kIiwicmQiXSxPdD1udCUxMDA7cmV0dXJuIlsiK250KyhJdFsoT3QtMjApJTEwXXx8SXRbT3RdfHxJdFswXSkrIl0ifX0sYnQ9ZnVuY3Rpb24obnQsSXQsT3Qpe3ZhciBCdD1TdHJpbmcobnQpO3JldHVybiFCdHx8QnQubGVuZ3RoPj1JdD9udDoiIitBcnJheShJdCsxLUJ0Lmxlbmd0aCkuam9pbihPdCkrbnR9LG10PXtzOmJ0LHo6ZnVuY3Rpb24obnQpe3ZhciBJdD0tbnQudXRjT2Zmc2V0KCksT3Q9TWF0aC5hYnMoSXQpLEJ0PU1hdGguZmxvb3IoT3QvNjApLEV0PU90JTYwO3JldHVybihJdDw9MD8iKyI6Ii0iKStidChCdCwyLCIwIikrIjoiK2J0KEV0LDIsIjAiKX0sbTpmdW5jdGlvbiBudChJdCxPdCl7aWYoSXQuZGF0ZSgpPE90LmRhdGUoKSlyZXR1cm4tbnQoT3QsSXQpO3ZhciBCdD0xMiooT3QueWVhcigpLUl0LnllYXIoKSkrKE90Lm1vbnRoKCktSXQubW9udGgoKSksRXQ9SXQuY2xvbmUoKS5hZGQoQnQsQiksWj1PdC1FdDwwLEN0PUl0LmNsb25lKCkuYWRkKEJ0KyhaPy0xOjEpLEIpO3JldHVybisoLShCdCsoT3QtRXQpLyhaP0V0LUN0OkN0LUV0KSl8fDApfSxhOmZ1bmN0aW9uKG50KXtyZXR1cm4gbnQ8MD9NYXRoLmNlaWwobnQpfHwwOk1hdGguZmxvb3IobnQpfSxwOmZ1bmN0aW9uKG50KXtyZXR1cm57TTpCLHk6Uix3OkksZDpBLEQ6eixoOl8sbTpFLHM6YixtczptLFE6Tn1bbnRdfHxTdHJpbmcobnR8fCIiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL3MkLywiIil9LHU6ZnVuY3Rpb24obnQpe3JldHVybiBudD09PXZvaWQgMH19LHl0PSJlbiIsZnQ9e307ZnRbeXRdPWF0O3ZhciB1dD1mdW5jdGlvbihudCl7cmV0dXJuIG50IGluc3RhbmNlb2YgVX0sdnQ9ZnVuY3Rpb24gbnQoSXQsT3QsQnQpe3ZhciBFdDtpZighSXQpcmV0dXJuIHl0O2lmKHR5cGVvZiBJdD09InN0cmluZyIpe3ZhciBaPUl0LnRvTG93ZXJDYXNlKCk7ZnRbWl0mJihFdD1aKSxPdCYmKGZ0W1pdPU90LEV0PVopO3ZhciBDdD1JdC5zcGxpdCgiLSIpO2lmKCFFdCYmQ3QubGVuZ3RoPjEpcmV0dXJuIG50KEN0WzBdKX1lbHNle3ZhciB4dD1JdC5uYW1lO2Z0W3h0XT1JdCxFdD14dH1yZXR1cm4hQnQmJkV0JiYoeXQ9RXQpLEV0fHwhQnQmJnl0fSxYPWZ1bmN0aW9uKG50LEl0KXtpZih1dChudCkpcmV0dXJuIG50LmNsb25lKCk7dmFyIE90PXR5cGVvZiBJdD09Im9iamVjdCI/SXQ6e307cmV0dXJuIE90LmRhdGU9bnQsT3QuYXJncz1hcmd1bWVudHMsbmV3IFUoT3QpfSxwdD1tdDtwdC5sPXZ0LHB0Lmk9dXQscHQudz1mdW5jdGlvbihudCxJdCl7cmV0dXJuIFgobnQse2xvY2FsZTpJdC4kTCx1dGM6SXQuJHUseDpJdC4keCwkb2Zmc2V0Okl0LiRvZmZzZXR9KX07dmFyIFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBudChPdCl7dGhpcy4kTD12dChPdC5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZShPdCl9dmFyIEl0PW50LnByb3RvdHlwZTtyZXR1cm4gSXQucGFyc2U9ZnVuY3Rpb24oT3Qpe3RoaXMuJGQ9ZnVuY3Rpb24oQnQpe3ZhciBFdD1CdC5kYXRlLFo9QnQudXRjO2lmKEV0PT09bnVsbClyZXR1cm4gbmV3IERhdGUoTmFOKTtpZihwdC51KEV0KSlyZXR1cm4gbmV3IERhdGU7aWYoRXQgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShFdCk7aWYodHlwZW9mIEV0PT0ic3RyaW5nIiYmIS9aJC9pLnRlc3QoRXQpKXt2YXIgQ3Q9RXQubWF0Y2goZXQpO2lmKEN0KXt2YXIgeHQ9Q3RbMl0tMXx8MCxIdD0oQ3RbN118fCIwIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIFo/bmV3IERhdGUoRGF0ZS5VVEMoQ3RbMV0seHQsQ3RbM118fDEsQ3RbNF18fDAsQ3RbNV18fDAsQ3RbNl18fDAsSHQpKTpuZXcgRGF0ZShDdFsxXSx4dCxDdFszXXx8MSxDdFs0XXx8MCxDdFs1XXx8MCxDdFs2XXx8MCxIdCl9fXJldHVybiBuZXcgRGF0ZShFdCl9KE90KSx0aGlzLiR4PU90Lnh8fHt9LHRoaXMuaW5pdCgpfSxJdC5pbml0PWZ1bmN0aW9uKCl7dmFyIE90PXRoaXMuJGQ7dGhpcy4keT1PdC5nZXRGdWxsWWVhcigpLHRoaXMuJE09T3QuZ2V0TW9udGgoKSx0aGlzLiREPU90LmdldERhdGUoKSx0aGlzLiRXPU90LmdldERheSgpLHRoaXMuJEg9T3QuZ2V0SG91cnMoKSx0aGlzLiRtPU90LmdldE1pbnV0ZXMoKSx0aGlzLiRzPU90LmdldFNlY29uZHMoKSx0aGlzLiRtcz1PdC5nZXRNaWxsaXNlY29uZHMoKX0sSXQuJHV0aWxzPWZ1bmN0aW9uKCl7cmV0dXJuIHB0fSxJdC5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9TdHJpbmcoKSE9PVd9LEl0LmlzU2FtZT1mdW5jdGlvbihPdCxCdCl7dmFyIEV0PVgoT3QpO3JldHVybiB0aGlzLnN0YXJ0T2YoQnQpPD1FdCYmRXQ8PXRoaXMuZW5kT2YoQnQpfSxJdC5pc0FmdGVyPWZ1bmN0aW9uKE90LEJ0KXtyZXR1cm4gWChPdCk8dGhpcy5zdGFydE9mKEJ0KX0sSXQuaXNCZWZvcmU9ZnVuY3Rpb24oT3QsQnQpe3JldHVybiB0aGlzLmVuZE9mKEJ0KTxYKE90KX0sSXQuJGc9ZnVuY3Rpb24oT3QsQnQsRXQpe3JldHVybiBwdC51KE90KT90aGlzW0J0XTp0aGlzLnNldChFdCxPdCl9LEl0LnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxJdC52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQuZ2V0VGltZSgpfSxJdC5zdGFydE9mPWZ1bmN0aW9uKE90LEJ0KXt2YXIgRXQ9dGhpcyxaPSEhcHQudShCdCl8fEJ0LEN0PXB0LnAoT3QpLHh0PWZ1bmN0aW9uKFllLGNlKXt2YXIga2U9cHQudyhFdC4kdT9EYXRlLlVUQyhFdC4keSxjZSxZZSk6bmV3IERhdGUoRXQuJHksY2UsWWUpLEV0KTtyZXR1cm4gWj9rZTprZS5lbmRPZihBKX0sSHQ9ZnVuY3Rpb24oWWUsY2Upe3JldHVybiBwdC53KEV0LnRvRGF0ZSgpW1llXS5hcHBseShFdC50b0RhdGUoInMiKSwoWj9bMCwwLDAsMF06WzIzLDU5LDU5LDk5OV0pLnNsaWNlKGNlKSksRXQpfSxMZT10aGlzLiRXLEZ0PXRoaXMuJE0sZ249dGhpcy4kRCxTZT0ic2V0IisodGhpcy4kdT8iVVRDIjoiIik7c3dpdGNoKEN0KXtjYXNlIFI6cmV0dXJuIFo/eHQoMSwwKTp4dCgzMSwxMSk7Y2FzZSBCOnJldHVybiBaP3h0KDEsRnQpOnh0KDAsRnQrMSk7Y2FzZSBJOnZhciBtZT10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsVmU9KExlPG1lP0xlKzc6TGUpLW1lO3JldHVybiB4dChaP2duLVZlOmduKyg2LVZlKSxGdCk7Y2FzZSBBOmNhc2UgejpyZXR1cm4gSHQoU2UrIkhvdXJzIiwwKTtjYXNlIF86cmV0dXJuIEh0KFNlKyJNaW51dGVzIiwxKTtjYXNlIEU6cmV0dXJuIEh0KFNlKyJTZWNvbmRzIiwyKTtjYXNlIGI6cmV0dXJuIEh0KFNlKyJNaWxsaXNlY29uZHMiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LEl0LmVuZE9mPWZ1bmN0aW9uKE90KXtyZXR1cm4gdGhpcy5zdGFydE9mKE90LCExKX0sSXQuJHNldD1mdW5jdGlvbihPdCxCdCl7dmFyIEV0LFo9cHQucChPdCksQ3Q9InNldCIrKHRoaXMuJHU/IlVUQyI6IiIpLHh0PShFdD17fSxFdFtBXT1DdCsiRGF0ZSIsRXRbel09Q3QrIkRhdGUiLEV0W0JdPUN0KyJNb250aCIsRXRbUl09Q3QrIkZ1bGxZZWFyIixFdFtfXT1DdCsiSG91cnMiLEV0W0VdPUN0KyJNaW51dGVzIixFdFtiXT1DdCsiU2Vjb25kcyIsRXRbbV09Q3QrIk1pbGxpc2Vjb25kcyIsRXQpW1pdLEh0PVo9PT1BP3RoaXMuJEQrKEJ0LXRoaXMuJFcpOkJ0O2lmKFo9PT1CfHxaPT09Uil7dmFyIExlPXRoaXMuY2xvbmUoKS5zZXQoeiwxKTtMZS4kZFt4dF0oSHQpLExlLmluaXQoKSx0aGlzLiRkPUxlLnNldCh6LE1hdGgubWluKHRoaXMuJEQsTGUuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgeHQmJnRoaXMuJGRbeHRdKEh0KTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sSXQuc2V0PWZ1bmN0aW9uKE90LEJ0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQoT3QsQnQpfSxJdC5nZXQ9ZnVuY3Rpb24oT3Qpe3JldHVybiB0aGlzW3B0LnAoT3QpXSgpfSxJdC5hZGQ9ZnVuY3Rpb24oT3QsQnQpe3ZhciBFdCxaPXRoaXM7T3Q9TnVtYmVyKE90KTt2YXIgQ3Q9cHQucChCdCkseHQ9ZnVuY3Rpb24oRnQpe3ZhciBnbj1YKFopO3JldHVybiBwdC53KGduLmRhdGUoZ24uZGF0ZSgpK01hdGgucm91bmQoRnQqT3QpKSxaKX07aWYoQ3Q9PT1CKXJldHVybiB0aGlzLnNldChCLHRoaXMuJE0rT3QpO2lmKEN0PT09UilyZXR1cm4gdGhpcy5zZXQoUix0aGlzLiR5K090KTtpZihDdD09PUEpcmV0dXJuIHh0KDEpO2lmKEN0PT09SSlyZXR1cm4geHQoNyk7dmFyIEh0PShFdD17fSxFdFtFXT1wLEV0W19dPXcsRXRbYl09ZixFdClbQ3RdfHwxLExlPXRoaXMuJGQuZ2V0VGltZSgpK090Kkh0O3JldHVybiBwdC53KExlLHRoaXMpfSxJdC5zdWJ0cmFjdD1mdW5jdGlvbihPdCxCdCl7cmV0dXJuIHRoaXMuYWRkKC0xKk90LEJ0KX0sSXQuZm9ybWF0PWZ1bmN0aW9uKE90KXt2YXIgQnQ9dGhpcyxFdD10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIEV0LmludmFsaWREYXRlfHxXO3ZhciBaPU90fHwiWVlZWS1NTS1ERFRISDptbTpzc1oiLEN0PXB0LnoodGhpcykseHQ9dGhpcy4kSCxIdD10aGlzLiRtLExlPXRoaXMuJE0sRnQ9RXQud2Vla2RheXMsZ249RXQubW9udGhzLFNlPWZ1bmN0aW9uKGNlLGtlLHp0LHJlKXtyZXR1cm4gY2UmJihjZVtrZV18fGNlKEJ0LFopKXx8enRba2VdLnNsaWNlKDAscmUpfSxtZT1mdW5jdGlvbihjZSl7cmV0dXJuIHB0LnMoeHQlMTJ8fDEyLGNlLCIwIil9LFZlPUV0Lm1lcmlkaWVtfHxmdW5jdGlvbihjZSxrZSx6dCl7dmFyIHJlPWNlPDEyPyJBTSI6IlBNIjtyZXR1cm4genQ/cmUudG9Mb3dlckNhc2UoKTpyZX0sWWU9e1lZOlN0cmluZyh0aGlzLiR5KS5zbGljZSgtMiksWVlZWTp0aGlzLiR5LE06TGUrMSxNTTpwdC5zKExlKzEsMiwiMCIpLE1NTTpTZShFdC5tb250aHNTaG9ydCxMZSxnbiwzKSxNTU1NOlNlKGduLExlKSxEOnRoaXMuJEQsREQ6cHQucyh0aGlzLiRELDIsIjAiKSxkOlN0cmluZyh0aGlzLiRXKSxkZDpTZShFdC53ZWVrZGF5c01pbix0aGlzLiRXLEZ0LDIpLGRkZDpTZShFdC53ZWVrZGF5c1Nob3J0LHRoaXMuJFcsRnQsMyksZGRkZDpGdFt0aGlzLiRXXSxIOlN0cmluZyh4dCksSEg6cHQucyh4dCwyLCIwIiksaDptZSgxKSxoaDptZSgyKSxhOlZlKHh0LEh0LCEwKSxBOlZlKHh0LEh0LCExKSxtOlN0cmluZyhIdCksbW06cHQucyhIdCwyLCIwIiksczpTdHJpbmcodGhpcy4kcyksc3M6cHQucyh0aGlzLiRzLDIsIjAiKSxTU1M6cHQucyh0aGlzLiRtcywzLCIwIiksWjpDdH07cmV0dXJuIFoucmVwbGFjZShzdCxmdW5jdGlvbihjZSxrZSl7cmV0dXJuIGtlfHxZZVtjZV18fEN0LnJlcGxhY2UoIjoiLCIiKX0pfSxJdC51dGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTUqLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX0sSXQuZGlmZj1mdW5jdGlvbihPdCxCdCxFdCl7dmFyIFosQ3Q9cHQucChCdCkseHQ9WChPdCksSHQ9KHh0LnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKnAsTGU9dGhpcy14dCxGdD1wdC5tKHRoaXMseHQpO3JldHVybiBGdD0oWj17fSxaW1JdPUZ0LzEyLFpbQl09RnQsWltOXT1GdC8zLFpbSV09KExlLUh0KS82MDQ4ZTUsWltBXT0oTGUtSHQpLzg2NGU1LFpbX109TGUvdyxaW0VdPUxlL3AsWltiXT1MZS9mLFopW0N0XXx8TGUsRXQ/RnQ6cHQuYShGdCl9LEl0LmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoQikuJER9LEl0LiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnRbdGhpcy4kTF19LEl0LmxvY2FsZT1mdW5jdGlvbihPdCxCdCl7aWYoIU90KXJldHVybiB0aGlzLiRMO3ZhciBFdD10aGlzLmNsb25lKCksWj12dChPdCxCdCwhMCk7cmV0dXJuIFomJihFdC4kTD1aKSxFdH0sSXQuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gcHQudyh0aGlzLiRkLHRoaXMpfSxJdC50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxJdC50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LEl0LnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKX0sSXQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxudH0oKSxUdD1VLnByb3RvdHlwZTtyZXR1cm4gWC5wcm90b3R5cGU9VHQsW1siJG1zIixtXSxbIiRzIixiXSxbIiRtIixFXSxbIiRIIixfXSxbIiRXIixBXSxbIiRNIixCXSxbIiR5IixSXSxbIiREIix6XV0uZm9yRWFjaChmdW5jdGlvbihudCl7VHRbbnRbMV1dPWZ1bmN0aW9uKEl0KXtyZXR1cm4gdGhpcy4kZyhJdCxudFswXSxudFsxXSl9fSksWC5leHRlbmQ9ZnVuY3Rpb24obnQsSXQpe3JldHVybiBudC4kaXx8KG50KEl0LFUsWCksbnQuJGk9ITApLFh9LFgubG9jYWxlPXZ0LFguaXNEYXlqcz11dCxYLnVuaXg9ZnVuY3Rpb24obnQpe3JldHVybiBYKDFlMypudCl9LFguZW49ZnRbeXRdLFguTHM9ZnQsWC5wPXt9LFh9KX0pKGpMdCk7dmFyIG94ZT1qTHQuZXhwb3J0cztjb25zdCB3MD1HNyhveGUpLHA1PXt0cmFjZTowLGRlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LFV0PXt0cmFjZTooLi4uaSk9Pnt9LGRlYnVnOiguLi5pKT0+e30saW5mbzooLi4uaSk9Pnt9LHdhcm46KC4uLmkpPT57fSxlcnJvcjooLi4uaSk9Pnt9LGZhdGFsOiguLi5pKT0+e319LFhmdD1mdW5jdGlvbihpPSJmYXRhbCIpe2xldCBhPXA1LmZhdGFsO3R5cGVvZiBpPT0ic3RyaW5nIj8oaT1pLnRvTG93ZXJDYXNlKCksaSBpbiBwNSYmKGE9cDVbaV0pKTp0eXBlb2YgaT09Im51bWJlciImJihhPWkpLFV0LnRyYWNlPSgpPT57fSxVdC5kZWJ1Zz0oKT0+e30sVXQuaW5mbz0oKT0+e30sVXQud2Fybj0oKT0+e30sVXQuZXJyb3I9KCk9Pnt9LFV0LmZhdGFsPSgpPT57fSxhPD1wNS5mYXRhbCYmKFV0LmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsUTIoIkZBVEFMIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzVtIixRMigiRkFUQUwiKSkpLGE8PXA1LmVycm9yJiYoVXQuZXJyb3I9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxRMigiRVJST1IiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszMW0iLFEyKCJFUlJPUiIpKSksYTw9cDUud2FybiYmKFV0Lndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsUTIoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszM20iLFEyKCJXQVJOIikpKSxhPD1wNS5pbmZvJiYoVXQuaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxRMigiSU5GTyIpLCJjb2xvcjogbGlnaHRibHVlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzM0bSIsUTIoIklORk8iKSkpLGE8PXA1LmRlYnVnJiYoVXQuZGVidWc9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxRMigiREVCVUciKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixRMigiREVCVUciKSkpLGE8PXA1LnRyYWNlJiYoVXQudHJhY2U9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxRMigiVFJBQ0UiKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixRMigiVFJBQ0UiKSkpfSxRMj1pPT5gJWMke3cwKCkuZm9ybWF0KCJzcy5TU1MiKX0gOiAke2l9IDogYDt2YXIgUWZ0PXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShRZnQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpaz1RZnQuc2FuaXRpemVVcmw9dm9pZCAwLGN4ZT0vXihbXlx3XSopKGphdmFzY3JpcHR8ZGF0YXx2YnNjcmlwdCkvaW0sdXhlPS8mIyhcdyspKF5cd3w7KT8vZyxseGU9LyYobmV3bGluZXx0YWIpOy9naSxoeGU9L1tcdTAwMDAtXHUwMDFGXHUwMDdGLVx1MDA5Rlx1MjAwMC1cdTIwMERcdUZFRkZdL2dpbSxmeGU9L14uKyg6fCZjb2xvbjspL2dpbSxkeGU9WyIuIiwiLyJdO2Z1bmN0aW9uIGd4ZShpKXtyZXR1cm4gZHhlLmluZGV4T2YoaVswXSk+LTF9ZnVuY3Rpb24gcHhlKGkpe3JldHVybiBpLnJlcGxhY2UodXhlLGZ1bmN0aW9uKGEsZil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZil9KX1mdW5jdGlvbiBieGUoaSl7dmFyIGE9cHhlKGl8fCIiKS5yZXBsYWNlKGx4ZSwiIikucmVwbGFjZShoeGUsIiIpLnRyaW0oKTtpZighYSlyZXR1cm4iYWJvdXQ6YmxhbmsiO2lmKGd4ZShhKSlyZXR1cm4gYTt2YXIgZj1hLm1hdGNoKGZ4ZSk7aWYoIWYpcmV0dXJuIGE7dmFyIHA9ZlswXTtyZXR1cm4gY3hlLnRlc3QocCk/ImFib3V0OmJsYW5rIjphfWlrPVFmdC5zYW5pdGl6ZVVybD1ieGU7ZnVuY3Rpb24gRVUoaSxhKXtyZXR1cm4gaT09bnVsbHx8YT09bnVsbD9OYU46aTxhPy0xOmk+YT8xOmk+PWE/MDpOYU59ZnVuY3Rpb24gd3hlKGksYSl7cmV0dXJuIGk9PW51bGx8fGE9PW51bGw/TmFOOmE8aT8tMTphPmk/MTphPj1pPzA6TmFOfWZ1bmN0aW9uIFpmdChpKXtsZXQgYSxmLHA7aS5sZW5ndGghPT0yPyhhPUVVLGY9KEUsXyk9PkVVKGkoRSksXykscD0oRSxfKT0+aShFKS1fKTooYT1pPT09RVV8fGk9PT13eGU/aTp2eGUsZj1pLHA9aSk7ZnVuY3Rpb24gdyhFLF8sQT0wLEk9RS5sZW5ndGgpe2lmKEE8SSl7aWYoYShfLF8pIT09MClyZXR1cm4gSTtkb3tjb25zdCBCPUErST4+PjE7ZihFW0JdLF8pPDA/QT1CKzE6ST1CfXdoaWxlKEE8SSl9cmV0dXJuIEF9ZnVuY3Rpb24gbShFLF8sQT0wLEk9RS5sZW5ndGgpe2lmKEE8SSl7aWYoYShfLF8pIT09MClyZXR1cm4gSTtkb3tjb25zdCBCPUErST4+PjE7ZihFW0JdLF8pPD0wP0E9QisxOkk9Qn13aGlsZShBPEkpfXJldHVybiBBfWZ1bmN0aW9uIGIoRSxfLEE9MCxJPUUubGVuZ3RoKXtjb25zdCBCPXcoRSxfLEEsSS0xKTtyZXR1cm4gQj5BJiZwKEVbQi0xXSxfKT4tcChFW0JdLF8pP0ItMTpCfXJldHVybntsZWZ0OncsY2VudGVyOmIscmlnaHQ6bX19ZnVuY3Rpb24gdnhlKCl7cmV0dXJuIDB9ZnVuY3Rpb24gbXhlKGkpe3JldHVybiBpPT09bnVsbD9OYU46K2l9Y29uc3QgeXhlPVpmdChFVSkucmlnaHQ7WmZ0KG14ZSkuY2VudGVyO2NvbnN0IHh4ZT15eGU7Y2xhc3MgJEx0IGV4dGVuZHMgTWFwe2NvbnN0cnVjdG9yKGEsZj1UeGUpe2lmKHN1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7X2ludGVybjp7dmFsdWU6bmV3IE1hcH0sX2tleTp7dmFsdWU6Zn19KSxhIT1udWxsKWZvcihjb25zdFtwLHddb2YgYSl0aGlzLnNldChwLHcpfWdldChhKXtyZXR1cm4gc3VwZXIuZ2V0KHpMdCh0aGlzLGEpKX1oYXMoYSl7cmV0dXJuIHN1cGVyLmhhcyh6THQodGhpcyxhKSl9c2V0KGEsZil7cmV0dXJuIHN1cGVyLnNldChreGUodGhpcyxhKSxmKX1kZWxldGUoYSl7cmV0dXJuIHN1cGVyLmRlbGV0ZShFeGUodGhpcyxhKSl9fWZ1bmN0aW9uIHpMdCh7X2ludGVybjppLF9rZXk6YX0sZil7Y29uc3QgcD1hKGYpO3JldHVybiBpLmhhcyhwKT9pLmdldChwKTpmfWZ1bmN0aW9uIGt4ZSh7X2ludGVybjppLF9rZXk6YX0sZil7Y29uc3QgcD1hKGYpO3JldHVybiBpLmhhcyhwKT9pLmdldChwKTooaS5zZXQocCxmKSxmKX1mdW5jdGlvbiBFeGUoe19pbnRlcm46aSxfa2V5OmF9LGYpe2NvbnN0IHA9YShmKTtyZXR1cm4gaS5oYXMocCkmJihmPWkuZ2V0KHApLGkuZGVsZXRlKHApKSxmfWZ1bmN0aW9uIFR4ZShpKXtyZXR1cm4gaSE9PW51bGwmJnR5cGVvZiBpPT0ib2JqZWN0Ij9pLnZhbHVlT2YoKTppfWNvbnN0IEN4ZT1NYXRoLnNxcnQoNTApLF94ZT1NYXRoLnNxcnQoMTApLFN4ZT1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gVFUoaSxhLGYpe2NvbnN0IHA9KGEtaSkvTWF0aC5tYXgoMCxmKSx3PU1hdGguZmxvb3IoTWF0aC5sb2cxMChwKSksbT1wL01hdGgucG93KDEwLHcpLGI9bT49Q3hlPzEwOm0+PV94ZT81Om0+PVN4ZT8yOjE7bGV0IEUsXyxBO3JldHVybiB3PDA/KEE9TWF0aC5wb3coMTAsLXcpL2IsRT1NYXRoLnJvdW5kKGkqQSksXz1NYXRoLnJvdW5kKGEqQSksRS9BPGkmJisrRSxfL0E+YSYmLS1fLEE9LUEpOihBPU1hdGgucG93KDEwLHcpKmIsRT1NYXRoLnJvdW5kKGkvQSksXz1NYXRoLnJvdW5kKGEvQSksRSpBPGkmJisrRSxfKkE+YSYmLS1fKSxfPEUmJi41PD1mJiZmPDI/VFUoaSxhLGYqMik6W0UsXyxBXX1mdW5jdGlvbiBBeGUoaSxhLGYpe2lmKGE9K2EsaT0raSxmPStmLCEoZj4wKSlyZXR1cm5bXTtpZihpPT09YSlyZXR1cm5baV07Y29uc3QgcD1hPGksW3csbSxiXT1wP1RVKGEsaSxmKTpUVShpLGEsZik7aWYoIShtPj13KSlyZXR1cm5bXTtjb25zdCBFPW0tdysxLF89bmV3IEFycmF5KEUpO2lmKHApaWYoYjwwKWZvcihsZXQgQT0wO0E8RTsrK0EpX1tBXT0obS1BKS8tYjtlbHNlIGZvcihsZXQgQT0wO0E8RTsrK0EpX1tBXT0obS1BKSpiO2Vsc2UgaWYoYjwwKWZvcihsZXQgQT0wO0E8RTsrK0EpX1tBXT0odytBKS8tYjtlbHNlIGZvcihsZXQgQT0wO0E8RTsrK0EpX1tBXT0odytBKSpiO3JldHVybiBffWZ1bmN0aW9uIEpmdChpLGEsZil7cmV0dXJuIGE9K2EsaT0raSxmPStmLFRVKGksYSxmKVsyXX1mdW5jdGlvbiB0MXQoaSxhLGYpe2E9K2EsaT0raSxmPStmO2NvbnN0IHA9YTxpLHc9cD9KZnQoYSxpLGYpOkpmdChpLGEsZik7cmV0dXJuKHA/LTE6MSkqKHc8MD8xLy13OncpfWZ1bmN0aW9uIEx4ZShpLGEpe2xldCBmO2lmKGE9PT12b2lkIDApZm9yKGNvbnN0IHAgb2YgaSlwIT1udWxsJiYoZjxwfHxmPT09dm9pZCAwJiZwPj1wKSYmKGY9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHcgb2YgaSkodz1hKHcsKytwLGkpKSE9bnVsbCYmKGY8d3x8Zj09PXZvaWQgMCYmdz49dykmJihmPXcpfXJldHVybiBmfWZ1bmN0aW9uIE14ZShpLGEpe2xldCBmO2lmKGE9PT12b2lkIDApZm9yKGNvbnN0IHAgb2YgaSlwIT1udWxsJiYoZj5wfHxmPT09dm9pZCAwJiZwPj1wKSYmKGY9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHcgb2YgaSkodz1hKHcsKytwLGkpKSE9bnVsbCYmKGY+d3x8Zj09PXZvaWQgMCYmdz49dykmJihmPXcpfXJldHVybiBmfWZ1bmN0aW9uIER4ZShpLGEsZil7aT0raSxhPSthLGY9KHc9YXJndW1lbnRzLmxlbmd0aCk8Mj8oYT1pLGk9MCwxKTp3PDM/MTorZjtmb3IodmFyIHA9LTEsdz1NYXRoLm1heCgwLE1hdGguY2VpbCgoYS1pKS9mKSl8MCxtPW5ldyBBcnJheSh3KTsrK3A8dzspbVtwXT1pK3AqZjtyZXR1cm4gbX1mdW5jdGlvbiBJeGUoaSl7cmV0dXJuIGl9dmFyIENVPTEsZTF0PTIsbjF0PTMsX1U9NCxxTHQ9MWUtNjtmdW5jdGlvbiBPeGUoaSl7cmV0dXJuInRyYW5zbGF0ZSgiK2krIiwwKSJ9ZnVuY3Rpb24gUHhlKGkpe3JldHVybiJ0cmFuc2xhdGUoMCwiK2krIikifWZ1bmN0aW9uIEZ4ZShpKXtyZXR1cm4gYT0+K2koYSl9ZnVuY3Rpb24gTnhlKGksYSl7cmV0dXJuIGE9TWF0aC5tYXgoMCxpLmJhbmR3aWR0aCgpLWEqMikvMixpLnJvdW5kKCkmJihhPU1hdGgucm91bmQoYSkpLGY9PitpKGYpK2F9ZnVuY3Rpb24gQnhlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIEhMdChpLGEpe3ZhciBmPVtdLHA9bnVsbCx3PW51bGwsbT02LGI9NixFPTMsXz10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmRldmljZVBpeGVsUmF0aW8+MT8wOi41LEE9aT09PUNVfHxpPT09X1U/LTE6MSxJPWk9PT1fVXx8aT09PWUxdD8ieCI6InkiLEI9aT09PUNVfHxpPT09bjF0P094ZTpQeGU7ZnVuY3Rpb24gTihSKXt2YXIgej1wPz8oYS50aWNrcz9hLnRpY2tzLmFwcGx5KGEsZik6YS5kb21haW4oKSksVz13Pz8oYS50aWNrRm9ybWF0P2EudGlja0Zvcm1hdC5hcHBseShhLGYpOkl4ZSksZXQ9TWF0aC5tYXgobSwwKStFLHN0PWEucmFuZ2UoKSxhdD0rc3RbMF0rXyxidD0rc3Rbc3QubGVuZ3RoLTFdK18sbXQ9KGEuYmFuZHdpZHRoP054ZTpGeGUpKGEuY29weSgpLF8pLHl0PVIuc2VsZWN0aW9uP1Iuc2VsZWN0aW9uKCk6UixmdD15dC5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksdXQ9eXQuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoeixhKS5vcmRlcigpLHZ0PXV0LmV4aXQoKSxYPXV0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIikscHQ9dXQuc2VsZWN0KCJsaW5lIiksVT11dC5zZWxlY3QoInRleHQiKTtmdD1mdC5tZXJnZShmdC5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksdXQ9dXQubWVyZ2UoWCkscHQ9cHQubWVyZ2UoWC5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKEkrIjIiLEEqbSkpLFU9VS5tZXJnZShYLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKEksQSpldCkuYXR0cigiZHkiLGk9PT1DVT8iMGVtIjppPT09bjF0PyIwLjcxZW0iOiIwLjMyZW0iKSksUiE9PXl0JiYoZnQ9ZnQudHJhbnNpdGlvbihSKSx1dD11dC50cmFuc2l0aW9uKFIpLHB0PXB0LnRyYW5zaXRpb24oUiksVT1VLnRyYW5zaXRpb24oUiksdnQ9dnQudHJhbnNpdGlvbihSKS5hdHRyKCJvcGFjaXR5IixxTHQpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oVHQpe3JldHVybiBpc0Zpbml0ZShUdD1tdChUdCkpP0IoVHQrXyk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksWC5hdHRyKCJvcGFjaXR5IixxTHQpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oVHQpe3ZhciBudD10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBCKChudCYmaXNGaW5pdGUobnQ9bnQoVHQpKT9udDptdChUdCkpK18pfSkpLHZ0LnJlbW92ZSgpLGZ0LmF0dHIoImQiLGk9PT1fVXx8aT09PWUxdD9iPyJNIitBKmIrIiwiK2F0KyJIIitfKyJWIitidCsiSCIrQSpiOiJNIitfKyIsIithdCsiViIrYnQ6Yj8iTSIrYXQrIiwiK0EqYisiViIrXysiSCIrYnQrIlYiK0EqYjoiTSIrYXQrIiwiK18rIkgiK2J0KSx1dC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKFR0KXtyZXR1cm4gQihtdChUdCkrXyl9KSxwdC5hdHRyKEkrIjIiLEEqbSksVS5hdHRyKEksQSpldCkudGV4dChXKSx5dC5maWx0ZXIoQnhlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIixpPT09ZTF0PyJzdGFydCI6aT09PV9VPyJlbmQiOiJtaWRkbGUiKSx5dC5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9bXR9KX1yZXR1cm4gTi5zY2FsZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1SLE4pOmF9LE4udGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gZj1BcnJheS5mcm9tKGFyZ3VtZW50cyksTn0sTi50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPVI9PW51bGw/W106QXJyYXkuZnJvbShSKSxOKTpmLnNsaWNlKCl9LE4udGlja1ZhbHVlcz1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1SPT1udWxsP251bGw6QXJyYXkuZnJvbShSKSxOKTpwJiZwLnNsaWNlKCl9LE4udGlja0Zvcm1hdD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1SLE4pOnd9LE4udGlja1NpemU9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09Yj0rUixOKTptfSxOLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K1IsTik6bX0sTi50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPStSLE4pOmJ9LE4udGlja1BhZGRpbmc9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9K1IsTik6RX0sTi5vZmZzZXQ9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89K1IsTik6X30sTn1mdW5jdGlvbiBSeGUoaSl7cmV0dXJuIEhMdChDVSxpKX1mdW5jdGlvbiBqeGUoaSl7cmV0dXJuIEhMdChuMXQsaSl9dmFyICR4ZT17dmFsdWU6KCk9Pnt9fTtmdW5jdGlvbiBWTHQoKXtmb3IodmFyIGk9MCxhPWFyZ3VtZW50cy5sZW5ndGgsZj17fSxwO2k8YTsrK2kpe2lmKCEocD1hcmd1bWVudHNbaV0rIiIpfHxwIGluIGZ8fC9bXHMuXS8udGVzdChwKSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIitwKTtmW3BdPVtdfXJldHVybiBuZXcgU1UoZil9ZnVuY3Rpb24gU1UoaSl7dGhpcy5fPWl9ZnVuY3Rpb24genhlKGksYSl7cmV0dXJuIGkudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihmKXt2YXIgcD0iIix3PWYuaW5kZXhPZigiLiIpO2lmKHc+PTAmJihwPWYuc2xpY2UodysxKSxmPWYuc2xpY2UoMCx3KSksZiYmIWEuaGFzT3duUHJvcGVydHkoZikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZik7cmV0dXJue3R5cGU6ZixuYW1lOnB9fSl9U1UucHJvdG90eXBlPVZMdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlNVLG9uOmZ1bmN0aW9uKGksYSl7dmFyIGY9dGhpcy5fLHA9enhlKGkrIiIsZiksdyxtPS0xLGI9cC5sZW5ndGg7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IoOysrbTxiOylpZigodz0oaT1wW21dKS50eXBlKSYmKHc9cXhlKGZbd10saS5uYW1lKSkpcmV0dXJuIHc7cmV0dXJufWlmKGEhPW51bGwmJnR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIithKTtmb3IoOysrbTxiOylpZih3PShpPXBbbV0pLnR5cGUpZlt3XT1HTHQoZlt3XSxpLm5hbWUsYSk7ZWxzZSBpZihhPT1udWxsKWZvcih3IGluIGYpZlt3XT1HTHQoZlt3XSxpLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgaT17fSxhPXRoaXMuXztmb3IodmFyIGYgaW4gYSlpW2ZdPWFbZl0uc2xpY2UoKTtyZXR1cm4gbmV3IFNVKGkpfSxjYWxsOmZ1bmN0aW9uKGksYSl7aWYoKHc9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgZj1uZXcgQXJyYXkodykscD0wLHcsbTtwPHc7KytwKWZbcF09YXJndW1lbnRzW3ArMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShpKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitpKTtmb3IobT10aGlzLl9baV0scD0wLHc9bS5sZW5ndGg7cDx3OysrcCltW3BdLnZhbHVlLmFwcGx5KGEsZil9LGFwcGx5OmZ1bmN0aW9uKGksYSxmKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGkpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2kpO2Zvcih2YXIgcD10aGlzLl9baV0sdz0wLG09cC5sZW5ndGg7dzxtOysrdylwW3ddLnZhbHVlLmFwcGx5KGEsZil9fTtmdW5jdGlvbiBxeGUoaSxhKXtmb3IodmFyIGY9MCxwPWkubGVuZ3RoLHc7ZjxwOysrZilpZigodz1pW2ZdKS5uYW1lPT09YSlyZXR1cm4gdy52YWx1ZX1mdW5jdGlvbiBHTHQoaSxhLGYpe2Zvcih2YXIgcD0wLHc9aS5sZW5ndGg7cDx3OysrcClpZihpW3BdLm5hbWU9PT1hKXtpW3BdPSR4ZSxpPWkuc2xpY2UoMCxwKS5jb25jYXQoaS5zbGljZShwKzEpKTticmVha31yZXR1cm4gZiE9bnVsbCYmaS5wdXNoKHtuYW1lOmEsdmFsdWU6Zn0pLGl9dmFyIHIxdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7Y29uc3QgVUx0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpyMXQseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBBVShpKXt2YXIgYT1pKz0iIixmPWEuaW5kZXhPZigiOiIpO3JldHVybiBmPj0wJiYoYT1pLnNsaWNlKDAsZikpIT09InhtbG5zIiYmKGk9aS5zbGljZShmKzEpKSxVTHQuaGFzT3duUHJvcGVydHkoYSk/e3NwYWNlOlVMdFthXSxsb2NhbDppfTppfWZ1bmN0aW9uIEh4ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLm93bmVyRG9jdW1lbnQsZj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZj09PXIxdCYmYS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09cjF0P2EuY3JlYXRlRWxlbWVudChpKTphLmNyZWF0ZUVsZW1lbnROUyhmLGkpfX1mdW5jdGlvbiBWeGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoaS5zcGFjZSxpLmxvY2FsKX19ZnVuY3Rpb24gV0x0KGkpe3ZhciBhPUFVKGkpO3JldHVybihhLmxvY2FsP1Z4ZTpIeGUpKGEpfWZ1bmN0aW9uIEd4ZSgpe31mdW5jdGlvbiBpMXQoaSl7cmV0dXJuIGk9PW51bGw/R3hlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihpKX19ZnVuY3Rpb24gVXhlKGkpe3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1pMXQoaSkpO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZj1hLmxlbmd0aCxwPW5ldyBBcnJheShmKSx3PTA7dzxmOysrdylmb3IodmFyIG09YVt3XSxiPW0ubGVuZ3RoLEU9cFt3XT1uZXcgQXJyYXkoYiksXyxBLEk9MDtJPGI7KytJKShfPW1bSV0pJiYoQT1pLmNhbGwoXyxfLl9fZGF0YV9fLEksbSkpJiYoIl9fZGF0YV9fImluIF8mJihBLl9fZGF0YV9fPV8uX19kYXRhX18pLEVbSV09QSk7cmV0dXJuIG5ldyBvZyhwLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIFlMdChpKXtyZXR1cm4gaT09bnVsbD9bXTpBcnJheS5pc0FycmF5KGkpP2k6QXJyYXkuZnJvbShpKX1mdW5jdGlvbiBXeGUoKXtyZXR1cm5bXX1mdW5jdGlvbiBLTHQoaSl7cmV0dXJuIGk9PW51bGw/V3hlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChpKX19ZnVuY3Rpb24gWXhlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBZTHQoaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBLeGUoaSl7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1ZeGUoaSk6aT1LTHQoaSk7Zm9yKHZhciBhPXRoaXMuX2dyb3VwcyxmPWEubGVuZ3RoLHA9W10sdz1bXSxtPTA7bTxmOysrbSlmb3IodmFyIGI9YVttXSxFPWIubGVuZ3RoLF8sQT0wO0E8RTsrK0EpKF89YltBXSkmJihwLnB1c2goaS5jYWxsKF8sXy5fX2RhdGFfXyxBLGIpKSx3LnB1c2goXykpO3JldHVybiBuZXcgb2cocCx3KX1mdW5jdGlvbiBYTHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhpKX19ZnVuY3Rpb24gUUx0KGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXRjaGVzKGkpfX12YXIgWHhlPUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIFF4ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gWHhlLmNhbGwodGhpcy5jaGlsZHJlbixpKX19ZnVuY3Rpb24gWnhlKCl7cmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGR9ZnVuY3Rpb24gSnhlKGkpe3JldHVybiB0aGlzLnNlbGVjdChpPT1udWxsP1p4ZTpReGUodHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpRTHQoaSkpKX12YXIgdDZlPUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rpb24gZTZlKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gbjZlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0NmUuY2FsbCh0aGlzLmNoaWxkcmVuLGkpfX1mdW5jdGlvbiByNmUoaSl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKGk9PW51bGw/ZTZlOm42ZSh0eXBlb2YgaT09ImZ1bmN0aW9uIj9pOlFMdChpKSkpfWZ1bmN0aW9uIGk2ZShpKXt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9WEx0KGkpKTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGY9YS5sZW5ndGgscD1uZXcgQXJyYXkoZiksdz0wO3c8ZjsrK3cpZm9yKHZhciBtPWFbd10sYj1tLmxlbmd0aCxFPXBbd109W10sXyxBPTA7QTxiOysrQSkoXz1tW0FdKSYmaS5jYWxsKF8sXy5fX2RhdGFfXyxBLG0pJiZFLnB1c2goXyk7cmV0dXJuIG5ldyBvZyhwLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIFpMdChpKXtyZXR1cm4gbmV3IEFycmF5KGkubGVuZ3RoKX1mdW5jdGlvbiBzNmUoKXtyZXR1cm4gbmV3IG9nKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKFpMdCksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gTFUoaSxhKXt0aGlzLm93bmVyRG9jdW1lbnQ9aS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWkubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9aSx0aGlzLl9fZGF0YV9fPWF9TFUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMVSxhcHBlbmRDaGlsZDpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShpLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oaSxhKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShpLGEpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihpKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoaSl9fTtmdW5jdGlvbiBhNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIG82ZShpLGEsZixwLHcsbSl7Zm9yKHZhciBiPTAsRSxfPWEubGVuZ3RoLEE9bS5sZW5ndGg7YjxBOysrYikoRT1hW2JdKT8oRS5fX2RhdGFfXz1tW2JdLHBbYl09RSk6ZltiXT1uZXcgTFUoaSxtW2JdKTtmb3IoO2I8XzsrK2IpKEU9YVtiXSkmJih3W2JdPUUpfWZ1bmN0aW9uIGM2ZShpLGEsZixwLHcsbSxiKXt2YXIgRSxfLEE9bmV3IE1hcCxJPWEubGVuZ3RoLEI9bS5sZW5ndGgsTj1uZXcgQXJyYXkoSSksUjtmb3IoRT0wO0U8STsrK0UpKF89YVtFXSkmJihOW0VdPVI9Yi5jYWxsKF8sXy5fX2RhdGFfXyxFLGEpKyIiLEEuaGFzKFIpP3dbRV09XzpBLnNldChSLF8pKTtmb3IoRT0wO0U8QjsrK0UpUj1iLmNhbGwoaSxtW0VdLEUsbSkrIiIsKF89QS5nZXQoUikpPyhwW0VdPV8sXy5fX2RhdGFfXz1tW0VdLEEuZGVsZXRlKFIpKTpmW0VdPW5ldyBMVShpLG1bRV0pO2ZvcihFPTA7RTxJOysrRSkoXz1hW0VdKSYmQS5nZXQoTltFXSk9PT1fJiYod1tFXT1fKX1mdW5jdGlvbiB1NmUoaSl7cmV0dXJuIGkuX19kYXRhX199ZnVuY3Rpb24gbDZlKGksYSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEFycmF5LmZyb20odGhpcyx1NmUpO3ZhciBmPWE/YzZlOm82ZSxwPXRoaXMuX3BhcmVudHMsdz10aGlzLl9ncm91cHM7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPWE2ZShpKSk7Zm9yKHZhciBtPXcubGVuZ3RoLGI9bmV3IEFycmF5KG0pLEU9bmV3IEFycmF5KG0pLF89bmV3IEFycmF5KG0pLEE9MDtBPG07KytBKXt2YXIgST1wW0FdLEI9d1tBXSxOPUIubGVuZ3RoLFI9aDZlKGkuY2FsbChJLEkmJkkuX19kYXRhX18sQSxwKSksej1SLmxlbmd0aCxXPUVbQV09bmV3IEFycmF5KHopLGV0PWJbQV09bmV3IEFycmF5KHopLHN0PV9bQV09bmV3IEFycmF5KE4pO2YoSSxCLFcsZXQsc3QsUixhKTtmb3IodmFyIGF0PTAsYnQ9MCxtdCx5dDthdDx6OysrYXQpaWYobXQ9V1thdF0pe2ZvcihhdD49YnQmJihidD1hdCsxKTshKHl0PWV0W2J0XSkmJisrYnQ8ejspO210Ll9uZXh0PXl0fHxudWxsfX1yZXR1cm4gYj1uZXcgb2coYixwKSxiLl9lbnRlcj1FLGIuX2V4aXQ9XyxifWZ1bmN0aW9uIGg2ZShpKXtyZXR1cm4gdHlwZW9mIGk9PSJvYmplY3QiJiYibGVuZ3RoImluIGk/aTpBcnJheS5mcm9tKGkpfWZ1bmN0aW9uIGY2ZSgpe3JldHVybiBuZXcgb2codGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChaTHQpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGQ2ZShpLGEsZil7dmFyIHA9dGhpcy5lbnRlcigpLHc9dGhpcyxtPXRoaXMuZXhpdCgpO3JldHVybiB0eXBlb2YgaT09ImZ1bmN0aW9uIj8ocD1pKHApLHAmJihwPXAuc2VsZWN0aW9uKCkpKTpwPXAuYXBwZW5kKGkrIiIpLGEhPW51bGwmJih3PWEodyksdyYmKHc9dy5zZWxlY3Rpb24oKSkpLGY9PW51bGw/bS5yZW1vdmUoKTpmKG0pLHAmJnc/cC5tZXJnZSh3KS5vcmRlcigpOnd9ZnVuY3Rpb24gZzZlKGkpe2Zvcih2YXIgYT1pLnNlbGVjdGlvbj9pLnNlbGVjdGlvbigpOmksZj10aGlzLl9ncm91cHMscD1hLl9ncm91cHMsdz1mLmxlbmd0aCxtPXAubGVuZ3RoLGI9TWF0aC5taW4odyxtKSxFPW5ldyBBcnJheSh3KSxfPTA7XzxiOysrXylmb3IodmFyIEE9ZltfXSxJPXBbX10sQj1BLmxlbmd0aCxOPUVbX109bmV3IEFycmF5KEIpLFIsej0wO3o8QjsrK3opKFI9QVt6XXx8SVt6XSkmJihOW3pdPVIpO2Zvcig7Xzx3OysrXylFW19dPWZbX107cmV0dXJuIG5ldyBvZyhFLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHA2ZSgpe2Zvcih2YXIgaT10aGlzLl9ncm91cHMsYT0tMSxmPWkubGVuZ3RoOysrYTxmOylmb3IodmFyIHA9aVthXSx3PXAubGVuZ3RoLTEsbT1wW3ddLGI7LS13Pj0wOykoYj1wW3ddKSYmKG0mJmIuY29tcGFyZURvY3VtZW50UG9zaXRpb24obSleNCYmbS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiLG0pLG09Yik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gYjZlKGkpe2l8fChpPXc2ZSk7ZnVuY3Rpb24gYShCLE4pe3JldHVybiBCJiZOP2koQi5fX2RhdGFfXyxOLl9fZGF0YV9fKTohQi0hTn1mb3IodmFyIGY9dGhpcy5fZ3JvdXBzLHA9Zi5sZW5ndGgsdz1uZXcgQXJyYXkocCksbT0wO208cDsrK20pe2Zvcih2YXIgYj1mW21dLEU9Yi5sZW5ndGgsXz13W21dPW5ldyBBcnJheShFKSxBLEk9MDtJPEU7KytJKShBPWJbSV0pJiYoX1tJXT1BKTtfLnNvcnQoYSl9cmV0dXJuIG5ldyBvZyh3LHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9ZnVuY3Rpb24gdzZlKGksYSl7cmV0dXJuIGk8YT8tMTppPmE/MTppPj1hPzA6TmFOfWZ1bmN0aW9uIHY2ZSgpe3ZhciBpPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsaS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc31mdW5jdGlvbiBtNmUoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzKX1mdW5jdGlvbiB5NmUoKXtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLGE9MCxmPWkubGVuZ3RoO2E8ZjsrK2EpZm9yKHZhciBwPWlbYV0sdz0wLG09cC5sZW5ndGg7dzxtOysrdyl7dmFyIGI9cFt3XTtpZihiKXJldHVybiBifXJldHVybiBudWxsfWZ1bmN0aW9uIHg2ZSgpe2xldCBpPTA7Zm9yKGNvbnN0IGEgb2YgdGhpcykrK2k7cmV0dXJuIGl9ZnVuY3Rpb24gazZlKCl7cmV0dXJuIXRoaXMubm9kZSgpfWZ1bmN0aW9uIEU2ZShpKXtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGY9MCxwPWEubGVuZ3RoO2Y8cDsrK2YpZm9yKHZhciB3PWFbZl0sbT0wLGI9dy5sZW5ndGgsRTttPGI7KyttKShFPXdbbV0pJiZpLmNhbGwoRSxFLl9fZGF0YV9fLG0sdyk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gVDZlKGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpfX1mdW5jdGlvbiBDNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpfX1mdW5jdGlvbiBfNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShpLGEpfX1mdW5jdGlvbiBTNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxhKX19ZnVuY3Rpb24gQTZlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShpKTp0aGlzLnNldEF0dHJpYnV0ZShpLGYpfX1mdW5jdGlvbiBMNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxmKX19ZnVuY3Rpb24gTTZlKGksYSl7dmFyIGY9QVUoaSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcD10aGlzLm5vZGUoKTtyZXR1cm4gZi5sb2NhbD9wLmdldEF0dHJpYnV0ZU5TKGYuc3BhY2UsZi5sb2NhbCk6cC5nZXRBdHRyaWJ1dGUoZil9cmV0dXJuIHRoaXMuZWFjaCgoYT09bnVsbD9mLmxvY2FsP0M2ZTpUNmU6dHlwZW9mIGE9PSJmdW5jdGlvbiI/Zi5sb2NhbD9MNmU6QTZlOmYubG9jYWw/UzZlOl82ZSkoZixhKSl9ZnVuY3Rpb24gSkx0KGkpe3JldHVybiBpLm93bmVyRG9jdW1lbnQmJmkub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8aS5kb2N1bWVudCYmaXx8aS5kZWZhdWx0Vmlld31mdW5jdGlvbiBENmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShpKX19ZnVuY3Rpb24gSTZlKGksYSxmKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGksYSxmKX19ZnVuY3Rpb24gTzZlKGksYSxmKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtwPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoaSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShpLHAsZil9fWZ1bmN0aW9uIFA2ZShpLGEsZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKGE9PW51bGw/RDZlOnR5cGVvZiBhPT0iZnVuY3Rpb24iP082ZTpJNmUpKGksYSxmPz8iIikpOmtBKHRoaXMubm9kZSgpLGkpfWZ1bmN0aW9uIGtBKGksYSl7cmV0dXJuIGkuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShhKXx8Skx0KGkpLmdldENvbXB1dGVkU3R5bGUoaSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGEpfWZ1bmN0aW9uIEY2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tpXX19ZnVuY3Rpb24gTjZlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tpXT1hfX1mdW5jdGlvbiBCNmUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmPT1udWxsP2RlbGV0ZSB0aGlzW2ldOnRoaXNbaV09Zn19ZnVuY3Rpb24gUjZlKGksYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKGE9PW51bGw/RjZlOnR5cGVvZiBhPT0iZnVuY3Rpb24iP0I2ZTpONmUpKGksYSkpOnRoaXMubm9kZSgpW2ldfWZ1bmN0aW9uIHRNdChpKXtyZXR1cm4gaS50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gczF0KGkpe3JldHVybiBpLmNsYXNzTGlzdHx8bmV3IGVNdChpKX1mdW5jdGlvbiBlTXQoaSl7dGhpcy5fbm9kZT1pLHRoaXMuX25hbWVzPXRNdChpLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWVNdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihpKXt2YXIgYT10aGlzLl9uYW1lcy5pbmRleE9mKGkpO2E8MCYmKHRoaXMuX25hbWVzLnB1c2goaSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGkpe3ZhciBhPXRoaXMuX25hbWVzLmluZGV4T2YoaSk7YT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShhLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGkpPj0wfX07ZnVuY3Rpb24gbk10KGksYSl7Zm9yKHZhciBmPXMxdChpKSxwPS0xLHc9YS5sZW5ndGg7KytwPHc7KWYuYWRkKGFbcF0pfWZ1bmN0aW9uIHJNdChpLGEpe2Zvcih2YXIgZj1zMXQoaSkscD0tMSx3PWEubGVuZ3RoOysrcDx3OylmLnJlbW92ZShhW3BdKX1mdW5jdGlvbiBqNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7bk10KHRoaXMsaSl9fWZ1bmN0aW9uICQ2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyTXQodGhpcyxpKX19ZnVuY3Rpb24gejZlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGEuYXBwbHkodGhpcyxhcmd1bWVudHMpP25NdDpyTXQpKHRoaXMsaSl9fWZ1bmN0aW9uIHE2ZShpLGEpe3ZhciBmPXRNdChpKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcD1zMXQodGhpcy5ub2RlKCkpLHc9LTEsbT1mLmxlbmd0aDsrK3c8bTspaWYoIXAuY29udGFpbnMoZlt3XSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIGE9PSJmdW5jdGlvbiI/ejZlOmE/ajZlOiQ2ZSkoZixhKSl9ZnVuY3Rpb24gSDZlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBWNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1pfX1mdW5jdGlvbiBHNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1hPz8iIn19ZnVuY3Rpb24gVTZlKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChpPT1udWxsP0g2ZToodHlwZW9mIGk9PSJmdW5jdGlvbiI/RzZlOlY2ZSkoaSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fWZ1bmN0aW9uIFc2ZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIFk2ZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1pfX1mdW5jdGlvbiBLNmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9YT8/IiJ9fWZ1bmN0aW9uIFg2ZShpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goaT09bnVsbD9XNmU6KHR5cGVvZiBpPT0iZnVuY3Rpb24iP0s2ZTpZNmUpKGkpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9ZnVuY3Rpb24gUTZlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIFo2ZSgpe3JldHVybiB0aGlzLmVhY2goUTZlKX1mdW5jdGlvbiBKNmUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiB0a2UoKXtyZXR1cm4gdGhpcy5lYWNoKEo2ZSl9ZnVuY3Rpb24gZWtlKGkpe3ZhciBhPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6V0x0KGkpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfWZ1bmN0aW9uIG5rZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIHJrZShpLGEpe3ZhciBmPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6V0x0KGkpLHA9YT09bnVsbD9ua2U6dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTppMXQoYSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGYuYXBwbHkodGhpcyxhcmd1bWVudHMpLHAuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfWZ1bmN0aW9uIGlrZSgpe3ZhciBpPXRoaXMucGFyZW50Tm9kZTtpJiZpLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIHNrZSgpe3JldHVybiB0aGlzLmVhY2goaWtlKX1mdW5jdGlvbiBha2UoKXt2YXIgaT10aGlzLmNsb25lTm9kZSghMSksYT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGE/YS5pbnNlcnRCZWZvcmUoaSx0aGlzLm5leHRTaWJsaW5nKTppfWZ1bmN0aW9uIG9rZSgpe3ZhciBpPXRoaXMuY2xvbmVOb2RlKCEwKSxhPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gYT9hLmluc2VydEJlZm9yZShpLHRoaXMubmV4dFNpYmxpbmcpOml9ZnVuY3Rpb24gY2tlKGkpe3JldHVybiB0aGlzLnNlbGVjdChpP29rZTpha2UpfWZ1bmN0aW9uIHVrZShpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsaSk6dGhpcy5ub2RlKCkuX19kYXRhX199ZnVuY3Rpb24gbGtlKGkpe3JldHVybiBmdW5jdGlvbihhKXtpLmNhbGwodGhpcyxhLHRoaXMuX19kYXRhX18pfX1mdW5jdGlvbiBoa2UoaSl7cmV0dXJuIGkudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihhKXt2YXIgZj0iIixwPWEuaW5kZXhPZigiLiIpO3JldHVybiBwPj0wJiYoZj1hLnNsaWNlKHArMSksYT1hLnNsaWNlKDAscCkpLHt0eXBlOmEsbmFtZTpmfX0pfWZ1bmN0aW9uIGZrZShpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9fb247aWYoYSl7Zm9yKHZhciBmPTAscD0tMSx3PWEubGVuZ3RoLG07Zjx3OysrZiltPWFbZl0sKCFpLnR5cGV8fG0udHlwZT09PWkudHlwZSkmJm0ubmFtZT09PWkubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobS50eXBlLG0ubGlzdGVuZXIsbS5vcHRpb25zKTphWysrcF09bTsrK3A/YS5sZW5ndGg9cDpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gZGtlKGksYSxmKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcD10aGlzLl9fb24sdyxtPWxrZShhKTtpZihwKXtmb3IodmFyIGI9MCxFPXAubGVuZ3RoO2I8RTsrK2IpaWYoKHc9cFtiXSkudHlwZT09PWkudHlwZSYmdy5uYW1lPT09aS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIody50eXBlLHcubGlzdGVuZXIsdy5vcHRpb25zKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIody50eXBlLHcubGlzdGVuZXI9bSx3Lm9wdGlvbnM9Ziksdy52YWx1ZT1hO3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGkudHlwZSxtLGYpLHc9e3R5cGU6aS50eXBlLG5hbWU6aS5uYW1lLHZhbHVlOmEsbGlzdGVuZXI6bSxvcHRpb25zOmZ9LHA/cC5wdXNoKHcpOnRoaXMuX19vbj1bd119fWZ1bmN0aW9uIGdrZShpLGEsZil7dmFyIHA9aGtlKGkrIiIpLHcsbT1wLmxlbmd0aCxiO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIEU9dGhpcy5ub2RlKCkuX19vbjtpZihFKXtmb3IodmFyIF89MCxBPUUubGVuZ3RoLEk7XzxBOysrXylmb3Iodz0wLEk9RVtfXTt3PG07Kyt3KWlmKChiPXBbd10pLnR5cGU9PT1JLnR5cGUmJmIubmFtZT09PUkubmFtZSlyZXR1cm4gSS52YWx1ZX1yZXR1cm59Zm9yKEU9YT9ka2U6ZmtlLHc9MDt3PG07Kyt3KXRoaXMuZWFjaChFKHBbd10sYSxmKSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gaU10KGksYSxmKXt2YXIgcD1KTHQoaSksdz1wLkN1c3RvbUV2ZW50O3R5cGVvZiB3PT0iZnVuY3Rpb24iP3c9bmV3IHcoYSxmKToodz1wLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGY/KHcuaW5pdEV2ZW50KGEsZi5idWJibGVzLGYuY2FuY2VsYWJsZSksdy5kZXRhaWw9Zi5kZXRhaWwpOncuaW5pdEV2ZW50KGEsITEsITEpKSxpLmRpc3BhdGNoRXZlbnQodyl9ZnVuY3Rpb24gcGtlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGlNdCh0aGlzLGksYSl9fWZ1bmN0aW9uIGJrZShpLGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpTXQodGhpcyxpLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gd2tlKGksYSl7cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIGE9PSJmdW5jdGlvbiI/YmtlOnBrZSkoaSxhKSl9ZnVuY3Rpb24qdmtlKCl7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxhPTAsZj1pLmxlbmd0aDthPGY7KythKWZvcih2YXIgcD1pW2FdLHc9MCxtPXAubGVuZ3RoLGI7dzxtOysrdykoYj1wW3ddKSYmKHlpZWxkIGIpfXZhciBhMXQ9W251bGxdO2Z1bmN0aW9uIG9nKGksYSl7dGhpcy5fZ3JvdXBzPWksdGhpcy5fcGFyZW50cz1hfWZ1bmN0aW9uIENQKCl7cmV0dXJuIG5ldyBvZyhbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLGExdCl9ZnVuY3Rpb24gbWtlKCl7cmV0dXJuIHRoaXN9b2cucHJvdG90eXBlPUNQLnByb3RvdHlwZT17Y29uc3RydWN0b3I6b2csc2VsZWN0OlV4ZSxzZWxlY3RBbGw6S3hlLHNlbGVjdENoaWxkOkp4ZSxzZWxlY3RDaGlsZHJlbjpyNmUsZmlsdGVyOmk2ZSxkYXRhOmw2ZSxlbnRlcjpzNmUsZXhpdDpmNmUsam9pbjpkNmUsbWVyZ2U6ZzZlLHNlbGVjdGlvbjpta2Usb3JkZXI6cDZlLHNvcnQ6YjZlLGNhbGw6djZlLG5vZGVzOm02ZSxub2RlOnk2ZSxzaXplOng2ZSxlbXB0eTprNmUsZWFjaDpFNmUsYXR0cjpNNmUsc3R5bGU6UDZlLHByb3BlcnR5OlI2ZSxjbGFzc2VkOnE2ZSx0ZXh0OlU2ZSxodG1sOlg2ZSxyYWlzZTpaNmUsbG93ZXI6dGtlLGFwcGVuZDpla2UsaW5zZXJ0OnJrZSxyZW1vdmU6c2tlLGNsb25lOmNrZSxkYXR1bTp1a2Usb246Z2tlLGRpc3BhdGNoOndrZSxbU3ltYm9sLml0ZXJhdG9yXTp2a2V9O2Z1bmN0aW9uIHlyKGkpe3JldHVybiB0eXBlb2YgaT09InN0cmluZyI/bmV3IG9nKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgb2coW1tpXV0sYTF0KX1mdW5jdGlvbiBzTXQoaSl7cmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj9uZXcgb2coW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoaSldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgb2coW1lMdChpKV0sYTF0KX1mdW5jdGlvbiBfUChpLGEsZil7aS5wcm90b3R5cGU9YS5wcm90b3R5cGU9ZixmLmNvbnN0cnVjdG9yPWl9ZnVuY3Rpb24gTVUoaSxhKXt2YXIgZj1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIHAgaW4gYSlmW3BdPWFbcF07cmV0dXJuIGZ9ZnVuY3Rpb24gVTcoKXt9dmFyIFNQPS43LERVPTEvU1AsRUE9IlxccyooWystXT9cXGQrKVxccyoiLEFQPSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixjMz0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHlrZT0vXiMoWzAtOWEtZl17Myw4fSkkLyx4a2U9bmV3IFJlZ0V4cChgXnJnYlxcKCR7RUF9LCR7RUF9LCR7RUF9XFwpJGApLGtrZT1uZXcgUmVnRXhwKGBecmdiXFwoJHtjM30sJHtjM30sJHtjM31cXCkkYCksRWtlPW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHtFQX0sJHtFQX0sJHtFQX0sJHtBUH1cXCkkYCksVGtlPW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHtjM30sJHtjM30sJHtjM30sJHtBUH1cXCkkYCksQ2tlPW5ldyBSZWdFeHAoYF5oc2xcXCgke0FQfSwke2MzfSwke2MzfVxcKSRgKSxfa2U9bmV3IFJlZ0V4cChgXmhzbGFcXCgke0FQfSwke2MzfSwke2MzfSwke0FQfVxcKSRgKSxhTXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07X1AoVTcsVzcse2NvcHkoaSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6b010LGZvcm1hdEhleDpvTXQsZm9ybWF0SGV4ODpTa2UsZm9ybWF0SHNsOkFrZSxmb3JtYXRSZ2I6Y010LHRvU3RyaW5nOmNNdH0pO2Z1bmN0aW9uIG9NdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIFNrZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKX1mdW5jdGlvbiBBa2UoKXtyZXR1cm4gZ010KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIGNNdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIFc3KGkpe3ZhciBhLGY7cmV0dXJuIGk9KGkrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChhPXlrZS5leGVjKGkpKT8oZj1hWzFdLmxlbmd0aCxhPXBhcnNlSW50KGFbMV0sMTYpLGY9PT02P3VNdChhKTpmPT09Mz9uZXcgdjAoYT4+OCYxNXxhPj40JjI0MCxhPj40JjE1fGEmMjQwLChhJjE1KTw8NHxhJjE1LDEpOmY9PT04P0lVKGE+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsKGEmMjU1KS8yNTUpOmY9PT00P0lVKGE+PjEyJjE1fGE+PjgmMjQwLGE+PjgmMTV8YT4+NCYyNDAsYT4+NCYxNXxhJjI0MCwoKGEmMTUpPDw0fGEmMTUpLzI1NSk6bnVsbCk6KGE9eGtlLmV4ZWMoaSkpP25ldyB2MChhWzFdLGFbMl0sYVszXSwxKTooYT1ra2UuZXhlYyhpKSk/bmV3IHYwKGFbMV0qMjU1LzEwMCxhWzJdKjI1NS8xMDAsYVszXSoyNTUvMTAwLDEpOihhPUVrZS5leGVjKGkpKT9JVShhWzFdLGFbMl0sYVszXSxhWzRdKTooYT1Ua2UuZXhlYyhpKSk/SVUoYVsxXSoyNTUvMTAwLGFbMl0qMjU1LzEwMCxhWzNdKjI1NS8xMDAsYVs0XSk6KGE9Q2tlLmV4ZWMoaSkpP2RNdChhWzFdLGFbMl0vMTAwLGFbM10vMTAwLDEpOihhPV9rZS5leGVjKGkpKT9kTXQoYVsxXSxhWzJdLzEwMCxhWzNdLzEwMCxhWzRdKTphTXQuaGFzT3duUHJvcGVydHkoaSk/dU10KGFNdFtpXSk6aT09PSJ0cmFuc3BhcmVudCI/bmV3IHYwKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gdU10KGkpe3JldHVybiBuZXcgdjAoaT4+MTYmMjU1LGk+PjgmMjU1LGkmMjU1LDEpfWZ1bmN0aW9uIElVKGksYSxmLHApe3JldHVybiBwPD0wJiYoaT1hPWY9TmFOKSxuZXcgdjAoaSxhLGYscCl9ZnVuY3Rpb24gbE10KGkpe3JldHVybiBpIGluc3RhbmNlb2YgVTd8fChpPVc3KGkpKSxpPyhpPWkucmdiKCksbmV3IHYwKGkucixpLmcsaS5iLGkub3BhY2l0eSkpOm5ldyB2MH1mdW5jdGlvbiBvMXQoaSxhLGYscCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2xNdChpKTpuZXcgdjAoaSxhLGYscD8/MSl9ZnVuY3Rpb24gdjAoaSxhLGYscCl7dGhpcy5yPStpLHRoaXMuZz0rYSx0aGlzLmI9K2YsdGhpcy5vcGFjaXR5PStwfV9QKHYwLG8xdCxNVShVNyx7YnJpZ2h0ZXIoaSl7cmV0dXJuIGk9aT09bnVsbD9EVTpNYXRoLnBvdyhEVSxpKSxuZXcgdjAodGhpcy5yKmksdGhpcy5nKmksdGhpcy5iKmksdGhpcy5vcGFjaXR5KX0sZGFya2VyKGkpe3JldHVybiBpPWk9PW51bGw/U1A6TWF0aC5wb3coU1AsaSksbmV3IHYwKHRoaXMucippLHRoaXMuZyppLHRoaXMuYippLHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiB0aGlzfSxjbGFtcCgpe3JldHVybiBuZXcgdjAoWTcodGhpcy5yKSxZNyh0aGlzLmcpLFk3KHRoaXMuYiksT1UodGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpoTXQsZm9ybWF0SGV4OmhNdCxmb3JtYXRIZXg4OkxrZSxmb3JtYXRSZ2I6Zk10LHRvU3RyaW5nOmZNdH0pKTtmdW5jdGlvbiBoTXQoKXtyZXR1cm5gIyR7SzcodGhpcy5yKX0ke0s3KHRoaXMuZyl9JHtLNyh0aGlzLmIpfWB9ZnVuY3Rpb24gTGtlKCl7cmV0dXJuYCMke0s3KHRoaXMucil9JHtLNyh0aGlzLmcpfSR7SzcodGhpcy5iKX0ke0s3KChpc05hTih0aGlzLm9wYWNpdHkpPzE6dGhpcy5vcGFjaXR5KSoyNTUpfWB9ZnVuY3Rpb24gZk10KCl7Y29uc3QgaT1PVSh0aGlzLm9wYWNpdHkpO3JldHVybmAke2k9PT0xPyJyZ2IoIjoicmdiYSgifSR7WTcodGhpcy5yKX0sICR7WTcodGhpcy5nKX0sICR7WTcodGhpcy5iKX0ke2k9PT0xPyIpIjpgLCAke2l9KWB9YH1mdW5jdGlvbiBPVShpKXtyZXR1cm4gaXNOYU4oaSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsaSkpfWZ1bmN0aW9uIFk3KGkpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGkpfHwwKSl9ZnVuY3Rpb24gSzcoaSl7cmV0dXJuIGk9WTcoaSksKGk8MTY/IjAiOiIiKStpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBkTXQoaSxhLGYscCl7cmV0dXJuIHA8PTA/aT1hPWY9TmFOOmY8PTB8fGY+PTE/aT1hPU5hTjphPD0wJiYoaT1OYU4pLG5ldyBYdihpLGEsZixwKX1mdW5jdGlvbiBnTXQoaSl7aWYoaSBpbnN0YW5jZW9mIFh2KXJldHVybiBuZXcgWHYoaS5oLGkucyxpLmwsaS5vcGFjaXR5KTtpZihpIGluc3RhbmNlb2YgVTd8fChpPVc3KGkpKSwhaSlyZXR1cm4gbmV3IFh2O2lmKGkgaW5zdGFuY2VvZiBYdilyZXR1cm4gaTtpPWkucmdiKCk7dmFyIGE9aS5yLzI1NSxmPWkuZy8yNTUscD1pLmIvMjU1LHc9TWF0aC5taW4oYSxmLHApLG09TWF0aC5tYXgoYSxmLHApLGI9TmFOLEU9bS13LF89KG0rdykvMjtyZXR1cm4gRT8oYT09PW0/Yj0oZi1wKS9FKyhmPHApKjY6Zj09PW0/Yj0ocC1hKS9FKzI6Yj0oYS1mKS9FKzQsRS89XzwuNT9tK3c6Mi1tLXcsYio9NjApOkU9Xz4wJiZfPDE/MDpiLG5ldyBYdihiLEUsXyxpLm9wYWNpdHkpfWZ1bmN0aW9uIE1rZShpLGEsZixwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Z010KGkpOm5ldyBYdihpLGEsZixwPz8xKX1mdW5jdGlvbiBYdihpLGEsZixwKXt0aGlzLmg9K2ksdGhpcy5zPSthLHRoaXMubD0rZix0aGlzLm9wYWNpdHk9K3B9X1AoWHYsTWtlLE1VKFU3LHticmlnaHRlcihpKXtyZXR1cm4gaT1pPT1udWxsP0RVOk1hdGgucG93KERVLGkpLG5ldyBYdih0aGlzLmgsdGhpcy5zLHRoaXMubCppLHRoaXMub3BhY2l0eSl9LGRhcmtlcihpKXtyZXR1cm4gaT1pPT1udWxsP1NQOk1hdGgucG93KFNQLGkpLG5ldyBYdih0aGlzLmgsdGhpcy5zLHRoaXMubCppLHRoaXMub3BhY2l0eSl9LHJnYigpe3ZhciBpPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsYT1pc05hTihpKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxmPXRoaXMubCxwPWYrKGY8LjU/ZjoxLWYpKmEsdz0yKmYtcDtyZXR1cm4gbmV3IHYwKGMxdChpPj0yNDA/aS0yNDA6aSsxMjAsdyxwKSxjMXQoaSx3LHApLGMxdChpPDEyMD9pKzI0MDppLTEyMCx3LHApLHRoaXMub3BhY2l0eSl9LGNsYW1wKCl7cmV0dXJuIG5ldyBYdihwTXQodGhpcy5oKSxQVSh0aGlzLnMpLFBVKHRoaXMubCksT1UodGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2woKXtjb25zdCBpPU9VKHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7aT09PTE/ImhzbCgiOiJoc2xhKCJ9JHtwTXQodGhpcy5oKX0sICR7UFUodGhpcy5zKSoxMDB9JSwgJHtQVSh0aGlzLmwpKjEwMH0lJHtpPT09MT8iKSI6YCwgJHtpfSlgfWB9fSkpO2Z1bmN0aW9uIHBNdChpKXtyZXR1cm4gaT0oaXx8MCklMzYwLGk8MD9pKzM2MDppfWZ1bmN0aW9uIFBVKGkpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsaXx8MCkpfWZ1bmN0aW9uIGMxdChpLGEsZil7cmV0dXJuKGk8NjA/YSsoZi1hKSppLzYwOmk8MTgwP2Y6aTwyNDA/YSsoZi1hKSooMjQwLWkpLzYwOmEpKjI1NX1jb25zdCBEa2U9TWF0aC5QSS8xODAsSWtlPTE4MC9NYXRoLlBJLEZVPTE4LGJNdD0uOTY0MjIsd010PTEsdk10PS44MjUyMSxtTXQ9NC8yOSxUQT02LzI5LHlNdD0zKlRBKlRBLE9rZT1UQSpUQSpUQTtmdW5jdGlvbiB4TXQoaSl7aWYoaSBpbnN0YW5jZW9mIHUzKXJldHVybiBuZXcgdTMoaS5sLGkuYSxpLmIsaS5vcGFjaXR5KTtpZihpIGluc3RhbmNlb2YgYjUpcmV0dXJuIGtNdChpKTtpIGluc3RhbmNlb2YgdjB8fChpPWxNdChpKSk7dmFyIGE9ZjF0KGkuciksZj1mMXQoaS5nKSxwPWYxdChpLmIpLHc9dTF0KCguMjIyNTA0NSphKy43MTY4Nzg2KmYrLjA2MDYxNjkqcCkvd010KSxtLGI7cmV0dXJuIGE9PT1mJiZmPT09cD9tPWI9dzoobT11MXQoKC40MzYwNzQ3KmErLjM4NTA2NDkqZisuMTQzMDgwNCpwKS9iTXQpLGI9dTF0KCguMDEzOTMyMiphKy4wOTcxMDQ1KmYrLjcxNDE3MzMqcCkvdk10KSksbmV3IHUzKDExNip3LTE2LDUwMCoobS13KSwyMDAqKHctYiksaS5vcGFjaXR5KX1mdW5jdGlvbiBQa2UoaSxhLGYscCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3hNdChpKTpuZXcgdTMoaSxhLGYscD8/MSl9ZnVuY3Rpb24gdTMoaSxhLGYscCl7dGhpcy5sPStpLHRoaXMuYT0rYSx0aGlzLmI9K2YsdGhpcy5vcGFjaXR5PStwfV9QKHUzLFBrZSxNVShVNyx7YnJpZ2h0ZXIoaSl7cmV0dXJuIG5ldyB1Myh0aGlzLmwrRlUqKGk/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGkpe3JldHVybiBuZXcgdTModGhpcy5sLUZVKihpPz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYigpe3ZhciBpPSh0aGlzLmwrMTYpLzExNixhPWlzTmFOKHRoaXMuYSk/aTppK3RoaXMuYS81MDAsZj1pc05hTih0aGlzLmIpP2k6aS10aGlzLmIvMjAwO3JldHVybiBhPWJNdCpsMXQoYSksaT13TXQqbDF0KGkpLGY9dk10KmwxdChmKSxuZXcgdjAoaDF0KDMuMTMzODU2MSphLTEuNjE2ODY2NyppLS40OTA2MTQ2KmYpLGgxdCgtLjk3ODc2ODQqYSsxLjkxNjE0MTUqaSsuMDMzNDU0KmYpLGgxdCguMDcxOTQ1MyphLS4yMjg5OTE0KmkrMS40MDUyNDI3KmYpLHRoaXMub3BhY2l0eSl9fSkpO2Z1bmN0aW9uIHUxdChpKXtyZXR1cm4gaT5Pa2U/TWF0aC5wb3coaSwxLzMpOmkveU10K21NdH1mdW5jdGlvbiBsMXQoaSl7cmV0dXJuIGk+VEE/aSppKmk6eU10KihpLW1NdCl9ZnVuY3Rpb24gaDF0KGkpe3JldHVybiAyNTUqKGk8PS4wMDMxMzA4PzEyLjkyKmk6MS4wNTUqTWF0aC5wb3coaSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gZjF0KGkpe3JldHVybihpLz0yNTUpPD0uMDQwNDU/aS8xMi45MjpNYXRoLnBvdygoaSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIEZrZShpKXtpZihpIGluc3RhbmNlb2YgYjUpcmV0dXJuIG5ldyBiNShpLmgsaS5jLGkubCxpLm9wYWNpdHkpO2lmKGkgaW5zdGFuY2VvZiB1M3x8KGk9eE10KGkpKSxpLmE9PT0wJiZpLmI9PT0wKXJldHVybiBuZXcgYjUoTmFOLDA8aS5sJiZpLmw8MTAwPzA6TmFOLGkubCxpLm9wYWNpdHkpO3ZhciBhPU1hdGguYXRhbjIoaS5iLGkuYSkqSWtlO3JldHVybiBuZXcgYjUoYTwwP2ErMzYwOmEsTWF0aC5zcXJ0KGkuYSppLmEraS5iKmkuYiksaS5sLGkub3BhY2l0eSl9ZnVuY3Rpb24gZDF0KGksYSxmLHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9Ga2UoaSk6bmV3IGI1KGksYSxmLHA/PzEpfWZ1bmN0aW9uIGI1KGksYSxmLHApe3RoaXMuaD0raSx0aGlzLmM9K2EsdGhpcy5sPStmLHRoaXMub3BhY2l0eT0rcH1mdW5jdGlvbiBrTXQoaSl7aWYoaXNOYU4oaS5oKSlyZXR1cm4gbmV3IHUzKGkubCwwLDAsaS5vcGFjaXR5KTt2YXIgYT1pLmgqRGtlO3JldHVybiBuZXcgdTMoaS5sLE1hdGguY29zKGEpKmkuYyxNYXRoLnNpbihhKSppLmMsaS5vcGFjaXR5KX1fUChiNSxkMXQsTVUoVTcse2JyaWdodGVyKGkpe3JldHVybiBuZXcgYjUodGhpcy5oLHRoaXMuYyx0aGlzLmwrRlUqKGk/PzEpLHRoaXMub3BhY2l0eSl9LGRhcmtlcihpKXtyZXR1cm4gbmV3IGI1KHRoaXMuaCx0aGlzLmMsdGhpcy5sLUZVKihpPz8xKSx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4ga010KHRoaXMpLnJnYigpfX0pKTtjb25zdCBOVT1pPT4oKT0+aTtmdW5jdGlvbiBFTXQoaSxhKXtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGkrZiphfX1mdW5jdGlvbiBOa2UoaSxhLGYpe3JldHVybiBpPU1hdGgucG93KGksZiksYT1NYXRoLnBvdyhhLGYpLWksZj0xL2YsZnVuY3Rpb24ocCl7cmV0dXJuIE1hdGgucG93KGkrcCphLGYpfX1mdW5jdGlvbiBCa2UoaSxhKXt2YXIgZj1hLWk7cmV0dXJuIGY/RU10KGksZj4xODB8fGY8LTE4MD9mLTM2MCpNYXRoLnJvdW5kKGYvMzYwKTpmKTpOVShpc05hTihpKT9hOmkpfWZ1bmN0aW9uIFJrZShpKXtyZXR1cm4oaT0raSk9PTE/TFA6ZnVuY3Rpb24oYSxmKXtyZXR1cm4gZi1hP05rZShhLGYsaSk6TlUoaXNOYU4oYSk/ZjphKX19ZnVuY3Rpb24gTFAoaSxhKXt2YXIgZj1hLWk7cmV0dXJuIGY/RU10KGksZik6TlUoaXNOYU4oaSk/YTppKX1jb25zdCBCVT1mdW5jdGlvbiBpKGEpe3ZhciBmPVJrZShhKTtmdW5jdGlvbiBwKHcsbSl7dmFyIGI9Zigodz1vMXQodykpLnIsKG09bzF0KG0pKS5yKSxFPWYody5nLG0uZyksXz1mKHcuYixtLmIpLEE9TFAody5vcGFjaXR5LG0ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKEkpe3JldHVybiB3LnI9YihJKSx3Lmc9RShJKSx3LmI9XyhJKSx3Lm9wYWNpdHk9QShJKSx3KyIifX1yZXR1cm4gcC5nYW1tYT1pLHB9KDEpO2Z1bmN0aW9uIGprZShpLGEpe2F8fChhPVtdKTt2YXIgZj1pP01hdGgubWluKGEubGVuZ3RoLGkubGVuZ3RoKTowLHA9YS5zbGljZSgpLHc7cmV0dXJuIGZ1bmN0aW9uKG0pe2Zvcih3PTA7dzxmOysrdylwW3ddPWlbd10qKDEtbSkrYVt3XSptO3JldHVybiBwfX1mdW5jdGlvbiAka2UoaSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhpKSYmIShpIGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIHprZShpLGEpe3ZhciBmPWE/YS5sZW5ndGg6MCxwPWk/TWF0aC5taW4oZixpLmxlbmd0aCk6MCx3PW5ldyBBcnJheShwKSxtPW5ldyBBcnJheShmKSxiO2ZvcihiPTA7YjxwOysrYil3W2JdPWIxdChpW2JdLGFbYl0pO2Zvcig7YjxmOysrYiltW2JdPWFbYl07cmV0dXJuIGZ1bmN0aW9uKEUpe2ZvcihiPTA7YjxwOysrYiltW2JdPXdbYl0oRSk7cmV0dXJuIG19fWZ1bmN0aW9uIHFrZShpLGEpe3ZhciBmPW5ldyBEYXRlO3JldHVybiBpPStpLGE9K2EsZnVuY3Rpb24ocCl7cmV0dXJuIGYuc2V0VGltZShpKigxLXApK2EqcCksZn19ZnVuY3Rpb24gUXYoaSxhKXtyZXR1cm4gaT0raSxhPSthLGZ1bmN0aW9uKGYpe3JldHVybiBpKigxLWYpK2EqZn19ZnVuY3Rpb24gSGtlKGksYSl7dmFyIGY9e30scD17fSx3OyhpPT09bnVsbHx8dHlwZW9mIGkhPSJvYmplY3QiKSYmKGk9e30pLChhPT09bnVsbHx8dHlwZW9mIGEhPSJvYmplY3QiKSYmKGE9e30pO2Zvcih3IGluIGEpdyBpbiBpP2Zbd109YjF0KGlbd10sYVt3XSk6cFt3XT1hW3ddO3JldHVybiBmdW5jdGlvbihtKXtmb3IodyBpbiBmKXBbd109Zlt3XShtKTtyZXR1cm4gcH19dmFyIGcxdD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cscDF0PW5ldyBSZWdFeHAoZzF0LnNvdXJjZSwiZyIpO2Z1bmN0aW9uIFZrZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19ZnVuY3Rpb24gR2tlKGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gaShhKSsiIn19ZnVuY3Rpb24gVE10KGksYSl7dmFyIGY9ZzF0Lmxhc3RJbmRleD1wMXQubGFzdEluZGV4PTAscCx3LG0sYj0tMSxFPVtdLF89W107Zm9yKGk9aSsiIixhPWErIiI7KHA9ZzF0LmV4ZWMoaSkpJiYodz1wMXQuZXhlYyhhKSk7KShtPXcuaW5kZXgpPmYmJihtPWEuc2xpY2UoZixtKSxFW2JdP0VbYl0rPW06RVsrK2JdPW0pLChwPXBbMF0pPT09KHc9d1swXSk/RVtiXT9FW2JdKz13OkVbKytiXT13OihFWysrYl09bnVsbCxfLnB1c2goe2k6Yix4OlF2KHAsdyl9KSksZj1wMXQubGFzdEluZGV4O3JldHVybiBmPGEubGVuZ3RoJiYobT1hLnNsaWNlKGYpLEVbYl0/RVtiXSs9bTpFWysrYl09bSksRS5sZW5ndGg8Mj9fWzBdP0drZShfWzBdLngpOlZrZShhKTooYT1fLmxlbmd0aCxmdW5jdGlvbihBKXtmb3IodmFyIEk9MCxCO0k8YTsrK0kpRVsoQj1fW0ldKS5pXT1CLngoQSk7cmV0dXJuIEUuam9pbigiIil9KX1mdW5jdGlvbiBiMXQoaSxhKXt2YXIgZj10eXBlb2YgYSxwO3JldHVybiBhPT1udWxsfHxmPT09ImJvb2xlYW4iP05VKGEpOihmPT09Im51bWJlciI/UXY6Zj09PSJzdHJpbmciPyhwPVc3KGEpKT8oYT1wLEJVKTpUTXQ6YSBpbnN0YW5jZW9mIFc3P0JVOmEgaW5zdGFuY2VvZiBEYXRlP3FrZToka2UoYSk/amtlOkFycmF5LmlzQXJyYXkoYSk/emtlOnR5cGVvZiBhLnZhbHVlT2YhPSJmdW5jdGlvbiImJnR5cGVvZiBhLnRvU3RyaW5nIT0iZnVuY3Rpb24ifHxpc05hTihhKT9Ia2U6UXYpKGksYSl9ZnVuY3Rpb24gVWtlKGksYSl7cmV0dXJuIGk9K2ksYT0rYSxmdW5jdGlvbihmKXtyZXR1cm4gTWF0aC5yb3VuZChpKigxLWYpK2EqZil9fXZhciBDTXQ9MTgwL01hdGguUEksdzF0PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIF9NdChpLGEsZixwLHcsbSl7dmFyIGIsRSxfO3JldHVybihiPU1hdGguc3FydChpKmkrYSphKSkmJihpLz1iLGEvPWIpLChfPWkqZithKnApJiYoZi09aSpfLHAtPWEqXyksKEU9TWF0aC5zcXJ0KGYqZitwKnApKSYmKGYvPUUscC89RSxfLz1FKSxpKnA8YSpmJiYoaT0taSxhPS1hLF89LV8sYj0tYikse3RyYW5zbGF0ZVg6dyx0cmFuc2xhdGVZOm0scm90YXRlOk1hdGguYXRhbjIoYSxpKSpDTXQsc2tld1g6TWF0aC5hdGFuKF8pKkNNdCxzY2FsZVg6YixzY2FsZVk6RX19dmFyIFJVO2Z1bmN0aW9uIFdrZShpKXtjb25zdCBhPW5ldyh0eXBlb2YgRE9NTWF0cml4PT0iZnVuY3Rpb24iP0RPTU1hdHJpeDpXZWJLaXRDU1NNYXRyaXgpKGkrIiIpO3JldHVybiBhLmlzSWRlbnRpdHk/dzF0Ol9NdChhLmEsYS5iLGEuYyxhLmQsYS5lLGEuZil9ZnVuY3Rpb24gWWtlKGkpe3JldHVybiBpPT1udWxsfHwoUlV8fChSVT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxSVS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsaSksIShpPVJVLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpKT93MXQ6KGk9aS5tYXRyaXgsX010KGkuYSxpLmIsaS5jLGkuZCxpLmUsaS5mKSl9ZnVuY3Rpb24gU010KGksYSxmLHApe2Z1bmN0aW9uIHcoQSl7cmV0dXJuIEEubGVuZ3RoP0EucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG0oQSxJLEIsTixSLHope2lmKEEhPT1CfHxJIT09Til7dmFyIFc9Ui5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGEsbnVsbCxmKTt6LnB1c2goe2k6Vy00LHg6UXYoQSxCKX0se2k6Vy0yLHg6UXYoSSxOKX0pfWVsc2UoQnx8TikmJlIucHVzaCgidHJhbnNsYXRlKCIrQithK04rZil9ZnVuY3Rpb24gYihBLEksQixOKXtBIT09ST8oQS1JPjE4MD9JKz0zNjA6SS1BPjE4MCYmKEErPTM2MCksTi5wdXNoKHtpOkIucHVzaCh3KEIpKyJyb3RhdGUoIixudWxsLHApLTIseDpRdihBLEkpfSkpOkkmJkIucHVzaCh3KEIpKyJyb3RhdGUoIitJK3ApfWZ1bmN0aW9uIEUoQSxJLEIsTil7QSE9PUk/Ti5wdXNoKHtpOkIucHVzaCh3KEIpKyJza2V3WCgiLG51bGwscCktMix4OlF2KEEsSSl9KTpJJiZCLnB1c2godyhCKSsic2tld1goIitJK3ApfWZ1bmN0aW9uIF8oQSxJLEIsTixSLHope2lmKEEhPT1CfHxJIT09Til7dmFyIFc9Ui5wdXNoKHcoUikrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO3oucHVzaCh7aTpXLTQseDpRdihBLEIpfSx7aTpXLTIseDpRdihJLE4pfSl9ZWxzZShCIT09MXx8TiE9PTEpJiZSLnB1c2godyhSKSsic2NhbGUoIitCKyIsIitOKyIpIil9cmV0dXJuIGZ1bmN0aW9uKEEsSSl7dmFyIEI9W10sTj1bXTtyZXR1cm4gQT1pKEEpLEk9aShJKSxtKEEudHJhbnNsYXRlWCxBLnRyYW5zbGF0ZVksSS50cmFuc2xhdGVYLEkudHJhbnNsYXRlWSxCLE4pLGIoQS5yb3RhdGUsSS5yb3RhdGUsQixOKSxFKEEuc2tld1gsSS5za2V3WCxCLE4pLF8oQS5zY2FsZVgsQS5zY2FsZVksSS5zY2FsZVgsSS5zY2FsZVksQixOKSxBPUk9bnVsbCxmdW5jdGlvbihSKXtmb3IodmFyIHo9LTEsVz1OLmxlbmd0aCxldDsrK3o8VzspQlsoZXQ9Tlt6XSkuaV09ZXQueChSKTtyZXR1cm4gQi5qb2luKCIiKX19fXZhciBLa2U9U010KFdrZSwicHgsICIsInB4KSIsImRlZykiKSxYa2U9U010KFlrZSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIFFrZShpKXtyZXR1cm4gZnVuY3Rpb24oYSxmKXt2YXIgcD1pKChhPWQxdChhKSkuaCwoZj1kMXQoZikpLmgpLHc9TFAoYS5jLGYuYyksbT1MUChhLmwsZi5sKSxiPUxQKGEub3BhY2l0eSxmLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihFKXtyZXR1cm4gYS5oPXAoRSksYS5jPXcoRSksYS5sPW0oRSksYS5vcGFjaXR5PWIoRSksYSsiIn19fWNvbnN0IFprZT1Ra2UoQmtlKTt2YXIgQ0E9MCxNUD0wLERQPTAsQU10PTFlMyxqVSxJUCwkVT0wLFg3PTAselU9MCxPUD10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxMTXQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oaSl7c2V0VGltZW91dChpLDE3KX07ZnVuY3Rpb24gdjF0KCl7cmV0dXJuIFg3fHwoTE10KEprZSksWDc9T1Aubm93KCkrelUpfWZ1bmN0aW9uIEprZSgpe1g3PTB9ZnVuY3Rpb24gcVUoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfXFVLnByb3RvdHlwZT1NTXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpxVSxyZXN0YXJ0OmZ1bmN0aW9uKGksYSxmKXtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2Y9KGY9PW51bGw/djF0KCk6K2YpKyhhPT1udWxsPzA6K2EpLCF0aGlzLl9uZXh0JiZJUCE9PXRoaXMmJihJUD9JUC5fbmV4dD10aGlzOmpVPXRoaXMsSVA9dGhpcyksdGhpcy5fY2FsbD1pLHRoaXMuX3RpbWU9ZixtMXQoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsbTF0KCkpfX07ZnVuY3Rpb24gTU10KGksYSxmKXt2YXIgcD1uZXcgcVU7cmV0dXJuIHAucmVzdGFydChpLGEsZikscH1mdW5jdGlvbiB0OGUoKXt2MXQoKSwrK0NBO2Zvcih2YXIgaT1qVSxhO2k7KShhPVg3LWkuX3RpbWUpPj0wJiZpLl9jYWxsLmNhbGwodm9pZCAwLGEpLGk9aS5fbmV4dDstLUNBfWZ1bmN0aW9uIERNdCgpe1g3PSgkVT1PUC5ub3coKSkrelUsQ0E9TVA9MDt0cnl7dDhlKCl9ZmluYWxseXtDQT0wLG44ZSgpLFg3PTB9fWZ1bmN0aW9uIGU4ZSgpe3ZhciBpPU9QLm5vdygpLGE9aS0kVTthPkFNdCYmKHpVLT1hLCRVPWkpfWZ1bmN0aW9uIG44ZSgpe2Zvcih2YXIgaSxhPWpVLGYscD0xLzA7YTspYS5fY2FsbD8ocD5hLl90aW1lJiYocD1hLl90aW1lKSxpPWEsYT1hLl9uZXh0KTooZj1hLl9uZXh0LGEuX25leHQ9bnVsbCxhPWk/aS5fbmV4dD1mOmpVPWYpO0lQPWksbTF0KHApfWZ1bmN0aW9uIG0xdChpKXtpZighQ0Epe01QJiYoTVA9Y2xlYXJUaW1lb3V0KE1QKSk7dmFyIGE9aS1YNzthPjI0PyhpPDEvMCYmKE1QPXNldFRpbWVvdXQoRE10LGktT1Aubm93KCktelUpKSxEUCYmKERQPWNsZWFySW50ZXJ2YWwoRFApKSk6KERQfHwoJFU9T1Aubm93KCksRFA9c2V0SW50ZXJ2YWwoZThlLEFNdCkpLENBPTEsTE10KERNdCkpfX1mdW5jdGlvbiBJTXQoaSxhLGYpe3ZhciBwPW5ldyBxVTtyZXR1cm4gYT1hPT1udWxsPzA6K2EscC5yZXN0YXJ0KHc9PntwLnN0b3AoKSxpKHcrYSl9LGEsZikscH12YXIgcjhlPVZMdCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxpOGU9W10sT010PTAsUE10PTEseTF0PTIsSFU9MyxGTXQ9NCx4MXQ9NSxWVT02O2Z1bmN0aW9uIEdVKGksYSxmLHAsdyxtKXt2YXIgYj1pLl9fdHJhbnNpdGlvbjtpZighYilpLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKGYgaW4gYilyZXR1cm47czhlKGksZix7bmFtZTphLGluZGV4OnAsZ3JvdXA6dyxvbjpyOGUsdHdlZW46aThlLHRpbWU6bS50aW1lLGRlbGF5Om0uZGVsYXksZHVyYXRpb246bS5kdXJhdGlvbixlYXNlOm0uZWFzZSx0aW1lcjpudWxsLHN0YXRlOk9NdH0pfWZ1bmN0aW9uIGsxdChpLGEpe3ZhciBmPVp2KGksYSk7aWYoZi5zdGF0ZT5PTXQpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gZn1mdW5jdGlvbiBsMyhpLGEpe3ZhciBmPVp2KGksYSk7aWYoZi5zdGF0ZT5IVSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gZn1mdW5jdGlvbiBadihpLGEpe3ZhciBmPWkuX190cmFuc2l0aW9uO2lmKCFmfHwhKGY9ZlthXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBmfWZ1bmN0aW9uIHM4ZShpLGEsZil7dmFyIHA9aS5fX3RyYW5zaXRpb24sdztwW2FdPWYsZi50aW1lcj1NTXQobSwwLGYudGltZSk7ZnVuY3Rpb24gbShBKXtmLnN0YXRlPVBNdCxmLnRpbWVyLnJlc3RhcnQoYixmLmRlbGF5LGYudGltZSksZi5kZWxheTw9QSYmYihBLWYuZGVsYXkpfWZ1bmN0aW9uIGIoQSl7dmFyIEksQixOLFI7aWYoZi5zdGF0ZSE9PVBNdClyZXR1cm4gXygpO2ZvcihJIGluIHApaWYoUj1wW0ldLFIubmFtZT09PWYubmFtZSl7aWYoUi5zdGF0ZT09PUhVKXJldHVybiBJTXQoYik7Ui5zdGF0ZT09PUZNdD8oUi5zdGF0ZT1WVSxSLnRpbWVyLnN0b3AoKSxSLm9uLmNhbGwoImludGVycnVwdCIsaSxpLl9fZGF0YV9fLFIuaW5kZXgsUi5ncm91cCksZGVsZXRlIHBbSV0pOitJPGEmJihSLnN0YXRlPVZVLFIudGltZXIuc3RvcCgpLFIub24uY2FsbCgiY2FuY2VsIixpLGkuX19kYXRhX18sUi5pbmRleCxSLmdyb3VwKSxkZWxldGUgcFtJXSl9aWYoSU10KGZ1bmN0aW9uKCl7Zi5zdGF0ZT09PUhVJiYoZi5zdGF0ZT1GTXQsZi50aW1lci5yZXN0YXJ0KEUsZi5kZWxheSxmLnRpbWUpLEUoQSkpfSksZi5zdGF0ZT15MXQsZi5vbi5jYWxsKCJzdGFydCIsaSxpLl9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZi5zdGF0ZT09PXkxdCl7Zm9yKGYuc3RhdGU9SFUsdz1uZXcgQXJyYXkoTj1mLnR3ZWVuLmxlbmd0aCksST0wLEI9LTE7STxOOysrSSkoUj1mLnR3ZWVuW0ldLnZhbHVlLmNhbGwoaSxpLl9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCkpJiYod1srK0JdPVIpO3cubGVuZ3RoPUIrMX19ZnVuY3Rpb24gRShBKXtmb3IodmFyIEk9QTxmLmR1cmF0aW9uP2YuZWFzZS5jYWxsKG51bGwsQS9mLmR1cmF0aW9uKTooZi50aW1lci5yZXN0YXJ0KF8pLGYuc3RhdGU9eDF0LDEpLEI9LTEsTj13Lmxlbmd0aDsrK0I8Tjspd1tCXS5jYWxsKGksSSk7Zi5zdGF0ZT09PXgxdCYmKGYub24uY2FsbCgiZW5kIixpLGkuX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxfKCkpfWZ1bmN0aW9uIF8oKXtmLnN0YXRlPVZVLGYudGltZXIuc3RvcCgpLGRlbGV0ZSBwW2FdO2Zvcih2YXIgQSBpbiBwKXJldHVybjtkZWxldGUgaS5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIGE4ZShpLGEpe3ZhciBmPWkuX190cmFuc2l0aW9uLHAsdyxtPSEwLGI7aWYoZil7YT1hPT1udWxsP251bGw6YSsiIjtmb3IoYiBpbiBmKXtpZigocD1mW2JdKS5uYW1lIT09YSl7bT0hMTtjb250aW51ZX13PXAuc3RhdGU+eTF0JiZwLnN0YXRlPHgxdCxwLnN0YXRlPVZVLHAudGltZXIuc3RvcCgpLHAub24uY2FsbCh3PyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGksaS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBmW2JdfW0mJmRlbGV0ZSBpLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gbzhlKGkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXthOGUodGhpcyxpKX0pfWZ1bmN0aW9uIGM4ZShpLGEpe3ZhciBmLHA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHc9bDModGhpcyxpKSxtPXcudHdlZW47aWYobSE9PWYpe3A9Zj1tO2Zvcih2YXIgYj0wLEU9cC5sZW5ndGg7YjxFOysrYilpZihwW2JdLm5hbWU9PT1hKXtwPXAuc2xpY2UoKSxwLnNwbGljZShiLDEpO2JyZWFrfX13LnR3ZWVuPXB9fWZ1bmN0aW9uIHU4ZShpLGEsZil7dmFyIHAsdztpZih0eXBlb2YgZiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09bDModGhpcyxpKSxiPW0udHdlZW47aWYoYiE9PXApe3c9KHA9Yikuc2xpY2UoKTtmb3IodmFyIEU9e25hbWU6YSx2YWx1ZTpmfSxfPTAsQT13Lmxlbmd0aDtfPEE7KytfKWlmKHdbX10ubmFtZT09PWEpe3dbX109RTticmVha31fPT09QSYmdy5wdXNoKEUpfW0udHdlZW49d319ZnVuY3Rpb24gbDhlKGksYSl7dmFyIGY9dGhpcy5faWQ7aWYoaSs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHA9WnYodGhpcy5ub2RlKCksZikudHdlZW4sdz0wLG09cC5sZW5ndGgsYjt3PG07Kyt3KWlmKChiPXBbd10pLm5hbWU9PT1pKXJldHVybiBiLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKGE9PW51bGw/YzhlOnU4ZSkoZixpLGEpKX1mdW5jdGlvbiBFMXQoaSxhLGYpe3ZhciBwPWkuX2lkO3JldHVybiBpLmVhY2goZnVuY3Rpb24oKXt2YXIgdz1sMyh0aGlzLHApOyh3LnZhbHVlfHwody52YWx1ZT17fSkpW2FdPWYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24odyl7cmV0dXJuIFp2KHcscCkudmFsdWVbYV19fWZ1bmN0aW9uIE5NdChpLGEpe3ZhciBmO3JldHVybih0eXBlb2YgYT09Im51bWJlciI/UXY6YSBpbnN0YW5jZW9mIFc3P0JVOihmPVc3KGEpKT8oYT1mLEJVKTpUTXQpKGksYSl9ZnVuY3Rpb24gaDhlKGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpfX1mdW5jdGlvbiBmOGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpfX1mdW5jdGlvbiBkOGUoaSxhLGYpe3ZhciBwLHc9ZisiIixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0QXR0cmlidXRlKGkpO3JldHVybiBiPT09dz9udWxsOmI9PT1wP206bT1hKHA9YixmKX19ZnVuY3Rpb24gZzhlKGksYSxmKXt2YXIgcCx3PWYrIiIsbTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCk7cmV0dXJuIGI9PT13P251bGw6Yj09PXA/bTptPWEocD1iLGYpfX1mdW5jdGlvbiBwOGUoaSxhLGYpe3ZhciBwLHcsbTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYixFPWYodGhpcyksXztyZXR1cm4gRT09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGkpOihiPXRoaXMuZ2V0QXR0cmlidXRlKGkpLF89RSsiIixiPT09Xz9udWxsOmI9PT1wJiZfPT09dz9tOih3PV8sbT1hKHA9YixFKSkpfX1mdW5jdGlvbiBiOGUoaSxhLGYpe3ZhciBwLHcsbTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYixFPWYodGhpcyksXztyZXR1cm4gRT09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKTooYj10aGlzLmdldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCksXz1FKyIiLGI9PT1fP251bGw6Yj09PXAmJl89PT13P206KHc9XyxtPWEocD1iLEUpKSl9fWZ1bmN0aW9uIHc4ZShpLGEpe3ZhciBmPUFVKGkpLHA9Zj09PSJ0cmFuc2Zvcm0iP1hrZTpOTXQ7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKGksdHlwZW9mIGE9PSJmdW5jdGlvbiI/KGYubG9jYWw/YjhlOnA4ZSkoZixwLEUxdCh0aGlzLCJhdHRyLiIraSxhKSk6YT09bnVsbD8oZi5sb2NhbD9mOGU6aDhlKShmKTooZi5sb2NhbD9nOGU6ZDhlKShmLHAsYSkpfWZ1bmN0aW9uIHY4ZShpLGEpe3JldHVybiBmdW5jdGlvbihmKXt0aGlzLnNldEF0dHJpYnV0ZShpLGEuY2FsbCh0aGlzLGYpKX19ZnVuY3Rpb24gbThlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKGYpe3RoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGEuY2FsbCh0aGlzLGYpKX19ZnVuY3Rpb24geThlKGksYSl7dmFyIGYscDtmdW5jdGlvbiB3KCl7dmFyIG09YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG0hPT1wJiYoZj0ocD1tKSYmbThlKGksbSkpLGZ9cmV0dXJuIHcuX3ZhbHVlPWEsd31mdW5jdGlvbiB4OGUoaSxhKXt2YXIgZixwO2Z1bmN0aW9uIHcoKXt2YXIgbT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbSE9PXAmJihmPShwPW0pJiZ2OGUoaSxtKSksZn1yZXR1cm4gdy5fdmFsdWU9YSx3fWZ1bmN0aW9uIGs4ZShpLGEpe3ZhciBmPSJhdHRyLiIraTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGY9dGhpcy50d2VlbihmKSkmJmYuX3ZhbHVlO2lmKGE9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4oZixudWxsKTtpZih0eXBlb2YgYSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIHA9QVUoaSk7cmV0dXJuIHRoaXMudHdlZW4oZiwocC5sb2NhbD95OGU6eDhlKShwLGEpKX1mdW5jdGlvbiBFOGUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXtrMXQodGhpcyxpKS5kZWxheT0rYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFQ4ZShpLGEpe3JldHVybiBhPSthLGZ1bmN0aW9uKCl7azF0KHRoaXMsaSkuZGVsYXk9YX19ZnVuY3Rpb24gQzhlKGkpe3ZhciBhPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGk9PSJmdW5jdGlvbiI/RThlOlQ4ZSkoYSxpKSk6WnYodGhpcy5ub2RlKCksYSkuZGVsYXl9ZnVuY3Rpb24gXzhlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7bDModGhpcyxpKS5kdXJhdGlvbj0rYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFM4ZShpLGEpe3JldHVybiBhPSthLGZ1bmN0aW9uKCl7bDModGhpcyxpKS5kdXJhdGlvbj1hfX1mdW5jdGlvbiBBOGUoaSl7dmFyIGE9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgaT09ImZ1bmN0aW9uIj9fOGU6UzhlKShhLGkpKTpadih0aGlzLm5vZGUoKSxhKS5kdXJhdGlvbn1mdW5jdGlvbiBMOGUoaSxhKXtpZih0eXBlb2YgYSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7bDModGhpcyxpKS5lYXNlPWF9fWZ1bmN0aW9uIE04ZShpKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goTDhlKGEsaSkpOlp2KHRoaXMubm9kZSgpLGEpLmVhc2V9ZnVuY3Rpb24gRDhlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYodHlwZW9mIGYhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO2wzKHRoaXMsaSkuZWFzZT1mfX1mdW5jdGlvbiBJOGUoaSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goRDhlKHRoaXMuX2lkLGkpKX1mdW5jdGlvbiBPOGUoaSl7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPVhMdChpKSk7Zm9yKHZhciBhPXRoaXMuX2dyb3VwcyxmPWEubGVuZ3RoLHA9bmV3IEFycmF5KGYpLHc9MDt3PGY7Kyt3KWZvcih2YXIgbT1hW3ddLGI9bS5sZW5ndGgsRT1wW3ddPVtdLF8sQT0wO0E8YjsrK0EpKF89bVtBXSkmJmkuY2FsbChfLF8uX19kYXRhX18sQSxtKSYmRS5wdXNoKF8pO3JldHVybiBuZXcgdzUocCx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIFA4ZShpKXtpZihpLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGY9aS5fZ3JvdXBzLHA9YS5sZW5ndGgsdz1mLmxlbmd0aCxtPU1hdGgubWluKHAsdyksYj1uZXcgQXJyYXkocCksRT0wO0U8bTsrK0UpZm9yKHZhciBfPWFbRV0sQT1mW0VdLEk9Xy5sZW5ndGgsQj1iW0VdPW5ldyBBcnJheShJKSxOLFI9MDtSPEk7KytSKShOPV9bUl18fEFbUl0pJiYoQltSXT1OKTtmb3IoO0U8cDsrK0UpYltFXT1hW0VdO3JldHVybiBuZXcgdzUoYix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIEY4ZShpKXtyZXR1cm4oaSsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKGEpe3ZhciBmPWEuaW5kZXhPZigiLiIpO3JldHVybiBmPj0wJiYoYT1hLnNsaWNlKDAsZikpLCFhfHxhPT09InN0YXJ0In0pfWZ1bmN0aW9uIE44ZShpLGEsZil7dmFyIHAsdyxtPUY4ZShhKT9rMXQ6bDM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9bSh0aGlzLGkpLEU9Yi5vbjtFIT09cCYmKHc9KHA9RSkuY29weSgpKS5vbihhLGYpLGIub249d319ZnVuY3Rpb24gQjhlKGksYSl7dmFyIGY9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9adih0aGlzLm5vZGUoKSxmKS5vbi5vbihpKTp0aGlzLmVhY2goTjhlKGYsaSxhKSl9ZnVuY3Rpb24gUjhlKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIGYgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK2YhPT1pKXJldHVybjthJiZhLnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBqOGUoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsUjhlKHRoaXMuX2lkKSl9ZnVuY3Rpb24gJDhlKGkpe3ZhciBhPXRoaXMuX25hbWUsZj10aGlzLl9pZDt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9aTF0KGkpKTtmb3IodmFyIHA9dGhpcy5fZ3JvdXBzLHc9cC5sZW5ndGgsbT1uZXcgQXJyYXkodyksYj0wO2I8dzsrK2IpZm9yKHZhciBFPXBbYl0sXz1FLmxlbmd0aCxBPW1bYl09bmV3IEFycmF5KF8pLEksQixOPTA7TjxfOysrTikoST1FW05dKSYmKEI9aS5jYWxsKEksSS5fX2RhdGFfXyxOLEUpKSYmKCJfX2RhdGFfXyJpbiBJJiYoQi5fX2RhdGFfXz1JLl9fZGF0YV9fKSxBW05dPUIsR1UoQVtOXSxhLGYsTixBLFp2KEksZikpKTtyZXR1cm4gbmV3IHc1KG0sdGhpcy5fcGFyZW50cyxhLGYpfWZ1bmN0aW9uIHo4ZShpKXt2YXIgYT10aGlzLl9uYW1lLGY9dGhpcy5faWQ7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPUtMdChpKSk7Zm9yKHZhciBwPXRoaXMuX2dyb3Vwcyx3PXAubGVuZ3RoLG09W10sYj1bXSxFPTA7RTx3OysrRSlmb3IodmFyIF89cFtFXSxBPV8ubGVuZ3RoLEksQj0wO0I8QTsrK0IpaWYoST1fW0JdKXtmb3IodmFyIE49aS5jYWxsKEksSS5fX2RhdGFfXyxCLF8pLFIsej1adihJLGYpLFc9MCxldD1OLmxlbmd0aDtXPGV0OysrVykoUj1OW1ddKSYmR1UoUixhLGYsVyxOLHopO20ucHVzaChOKSxiLnB1c2goSSl9cmV0dXJuIG5ldyB3NShtLGIsYSxmKX12YXIgcThlPUNQLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBIOGUoKXtyZXR1cm4gbmV3IHE4ZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gVjhlKGksYSl7dmFyIGYscCx3O3JldHVybiBmdW5jdGlvbigpe3ZhciBtPWtBKHRoaXMsaSksYj0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShpKSxrQSh0aGlzLGkpKTtyZXR1cm4gbT09PWI/bnVsbDptPT09ZiYmYj09PXA/dzp3PWEoZj1tLHA9Yil9fWZ1bmN0aW9uIEJNdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpfX1mdW5jdGlvbiBHOGUoaSxhLGYpe3ZhciBwLHc9ZisiIixtO3JldHVybiBmdW5jdGlvbigpe3ZhciBiPWtBKHRoaXMsaSk7cmV0dXJuIGI9PT13P251bGw6Yj09PXA/bTptPWEocD1iLGYpfX1mdW5jdGlvbiBVOGUoaSxhLGYpe3ZhciBwLHcsbTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj1rQSh0aGlzLGkpLEU9Zih0aGlzKSxfPUUrIiI7cmV0dXJuIEU9PW51bGwmJihfPUU9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoaSksa0EodGhpcyxpKSkpLGI9PT1fP251bGw6Yj09PXAmJl89PT13P206KHc9XyxtPWEocD1iLEUpKX19ZnVuY3Rpb24gVzhlKGksYSl7dmFyIGYscCx3LG09InN0eWxlLiIrYSxiPSJlbmQuIittLEU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF89bDModGhpcyxpKSxBPV8ub24sST1fLnZhbHVlW21dPT1udWxsP0V8fChFPUJNdChhKSk6dm9pZCAwOyhBIT09Znx8dyE9PUkpJiYocD0oZj1BKS5jb3B5KCkpLm9uKGIsdz1JKSxfLm9uPXB9fWZ1bmN0aW9uIFk4ZShpLGEsZil7dmFyIHA9KGkrPSIiKT09InRyYW5zZm9ybSI/S2tlOk5NdDtyZXR1cm4gYT09bnVsbD90aGlzLnN0eWxlVHdlZW4oaSxWOGUoaSxwKSkub24oImVuZC5zdHlsZS4iK2ksQk10KGkpKTp0eXBlb2YgYT09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oaSxVOGUoaSxwLEUxdCh0aGlzLCJzdHlsZS4iK2ksYSkpKS5lYWNoKFc4ZSh0aGlzLl9pZCxpKSk6dGhpcy5zdHlsZVR3ZWVuKGksRzhlKGkscCxhKSxmKS5vbigiZW5kLnN0eWxlLiIraSxudWxsKX1mdW5jdGlvbiBLOGUoaSxhLGYpe3JldHVybiBmdW5jdGlvbihwKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGksYS5jYWxsKHRoaXMscCksZil9fWZ1bmN0aW9uIFg4ZShpLGEsZil7dmFyIHAsdztmdW5jdGlvbiBtKCl7dmFyIGI9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGIhPT13JiYocD0odz1iKSYmSzhlKGksYixmKSkscH1yZXR1cm4gbS5fdmFsdWU9YSxtfWZ1bmN0aW9uIFE4ZShpLGEsZil7dmFyIHA9InN0eWxlLiIrKGkrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHA9dGhpcy50d2VlbihwKSkmJnAuX3ZhbHVlO2lmKGE9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocCxudWxsKTtpZih0eXBlb2YgYSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocCxYOGUoaSxhLGY/PyIiKSl9ZnVuY3Rpb24gWjhlKGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9aX19ZnVuY3Rpb24gSjhlKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWkodGhpcyk7dGhpcy50ZXh0Q29udGVudD1hPz8iIn19ZnVuY3Rpb24gdEVlKGkpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2YgaT09ImZ1bmN0aW9uIj9KOGUoRTF0KHRoaXMsInRleHQiLGkpKTpaOGUoaT09bnVsbD8iIjppKyIiKSl9ZnVuY3Rpb24gZUVlKGkpe3JldHVybiBmdW5jdGlvbihhKXt0aGlzLnRleHRDb250ZW50PWkuY2FsbCh0aGlzLGEpfX1mdW5jdGlvbiBuRWUoaSl7dmFyIGEsZjtmdW5jdGlvbiBwKCl7dmFyIHc9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHchPT1mJiYoYT0oZj13KSYmZUVlKHcpKSxhfXJldHVybiBwLl92YWx1ZT1pLHB9ZnVuY3Rpb24gckVlKGkpe3ZhciBhPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGE9dGhpcy50d2VlbihhKSkmJmEuX3ZhbHVlO2lmKGk9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4oYSxudWxsKTtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oYSxuRWUoaSkpfWZ1bmN0aW9uIGlFZSgpe2Zvcih2YXIgaT10aGlzLl9uYW1lLGE9dGhpcy5faWQsZj1STXQoKSxwPXRoaXMuX2dyb3Vwcyx3PXAubGVuZ3RoLG09MDttPHc7KyttKWZvcih2YXIgYj1wW21dLEU9Yi5sZW5ndGgsXyxBPTA7QTxFOysrQSlpZihfPWJbQV0pe3ZhciBJPVp2KF8sYSk7R1UoXyxpLGYsQSxiLHt0aW1lOkkudGltZStJLmRlbGF5K0kuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpJLmR1cmF0aW9uLGVhc2U6SS5lYXNlfSl9cmV0dXJuIG5ldyB3NShwLHRoaXMuX3BhcmVudHMsaSxmKX1mdW5jdGlvbiBzRWUoKXt2YXIgaSxhLGY9dGhpcyxwPWYuX2lkLHc9Zi5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG0sYil7dmFyIEU9e3ZhbHVlOmJ9LF89e3ZhbHVlOmZ1bmN0aW9uKCl7LS13PT09MCYmbSgpfX07Zi5lYWNoKGZ1bmN0aW9uKCl7dmFyIEE9bDModGhpcyxwKSxJPUEub247SSE9PWkmJihhPShpPUkpLmNvcHkoKSxhLl8uY2FuY2VsLnB1c2goRSksYS5fLmludGVycnVwdC5wdXNoKEUpLGEuXy5lbmQucHVzaChfKSksQS5vbj1hfSksdz09PTAmJm0oKX0pfXZhciBhRWU9MDtmdW5jdGlvbiB3NShpLGEsZixwKXt0aGlzLl9ncm91cHM9aSx0aGlzLl9wYXJlbnRzPWEsdGhpcy5fbmFtZT1mLHRoaXMuX2lkPXB9ZnVuY3Rpb24gUk10KCl7cmV0dXJuKythRWV9dmFyIHY1PUNQLnByb3RvdHlwZTt3NS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnc1LHNlbGVjdDokOGUsc2VsZWN0QWxsOno4ZSxzZWxlY3RDaGlsZDp2NS5zZWxlY3RDaGlsZCxzZWxlY3RDaGlsZHJlbjp2NS5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6TzhlLG1lcmdlOlA4ZSxzZWxlY3Rpb246SDhlLHRyYW5zaXRpb246aUVlLGNhbGw6djUuY2FsbCxub2Rlczp2NS5ub2Rlcyxub2RlOnY1Lm5vZGUsc2l6ZTp2NS5zaXplLGVtcHR5OnY1LmVtcHR5LGVhY2g6djUuZWFjaCxvbjpCOGUsYXR0cjp3OGUsYXR0clR3ZWVuOms4ZSxzdHlsZTpZOGUsc3R5bGVUd2VlbjpROGUsdGV4dDp0RWUsdGV4dFR3ZWVuOnJFZSxyZW1vdmU6ajhlLHR3ZWVuOmw4ZSxkZWxheTpDOGUsZHVyYXRpb246QThlLGVhc2U6TThlLGVhc2VWYXJ5aW5nOkk4ZSxlbmQ6c0VlLFtTeW1ib2wuaXRlcmF0b3JdOnY1W1N5bWJvbC5pdGVyYXRvcl19O2Z1bmN0aW9uIG9FZShpKXtyZXR1cm4oKGkqPTIpPD0xP2kqaSppOihpLT0yKSppKmkrMikvMn12YXIgY0VlPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpvRWV9O2Z1bmN0aW9uIHVFZShpLGEpe2Zvcih2YXIgZjshKGY9aS5fX3RyYW5zaXRpb24pfHwhKGY9ZlthXSk7KWlmKCEoaT1pLnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2F9IG5vdCBmb3VuZGApO3JldHVybiBmfWZ1bmN0aW9uIGxFZShpKXt2YXIgYSxmO2kgaW5zdGFuY2VvZiB3NT8oYT1pLl9pZCxpPWkuX25hbWUpOihhPVJNdCgpLChmPWNFZSkudGltZT12MXQoKSxpPWk9PW51bGw/bnVsbDppKyIiKTtmb3IodmFyIHA9dGhpcy5fZ3JvdXBzLHc9cC5sZW5ndGgsbT0wO208dzsrK20pZm9yKHZhciBiPXBbbV0sRT1iLmxlbmd0aCxfLEE9MDtBPEU7KytBKShfPWJbQV0pJiZHVShfLGksYSxBLGIsZnx8dUVlKF8sYSkpO3JldHVybiBuZXcgdzUocCx0aGlzLl9wYXJlbnRzLGksYSl9Q1AucHJvdG90eXBlLmludGVycnVwdD1vOGUsQ1AucHJvdG90eXBlLnRyYW5zaXRpb249bEVlO2NvbnN0IFQxdD1NYXRoLlBJLEMxdD0yKlQxdCxRNz0xZS02LGhFZT1DMXQtUTc7ZnVuY3Rpb24gak10KGkpe3RoaXMuXys9aVswXTtmb3IobGV0IGE9MSxmPWkubGVuZ3RoO2E8ZjsrK2EpdGhpcy5fKz1hcmd1bWVudHNbYV0raVthXX1mdW5jdGlvbiBmRWUoaSl7bGV0IGE9TWF0aC5mbG9vcihpKTtpZighKGE+PTApKXRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7aX1gKTtpZihhPjE1KXJldHVybiBqTXQ7Y29uc3QgZj0xMCoqYTtyZXR1cm4gZnVuY3Rpb24ocCl7dGhpcy5fKz1wWzBdO2ZvcihsZXQgdz0xLG09cC5sZW5ndGg7dzxtOysrdyl0aGlzLl8rPU1hdGgucm91bmQoYXJndW1lbnRzW3ddKmYpL2YrcFt3XX19bGV0IGRFZT1jbGFzc3tjb25zdHJ1Y3RvcihhKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBlbmQ9YT09bnVsbD9qTXQ6ZkVlKGEpfW1vdmVUbyhhLGYpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rYX0sJHt0aGlzLl95MD10aGlzLl95MT0rZn1gfWNsb3NlUGF0aCgpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuX2FwcGVuZGBaYCl9bGluZVRvKGEsZil7dGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPSthfSwke3RoaXMuX3kxPStmfWB9cXVhZHJhdGljQ3VydmVUbyhhLGYscCx3KXt0aGlzLl9hcHBlbmRgUSR7K2F9LCR7K2Z9LCR7dGhpcy5feDE9K3B9LCR7dGhpcy5feTE9K3d9YH1iZXppZXJDdXJ2ZVRvKGEsZixwLHcsbSxiKXt0aGlzLl9hcHBlbmRgQyR7K2F9LCR7K2Z9LCR7K3B9LCR7K3d9LCR7dGhpcy5feDE9K219LCR7dGhpcy5feTE9K2J9YH1hcmNUbyhhLGYscCx3LG0pe2lmKGE9K2EsZj0rZixwPStwLHc9K3csbT0rbSxtPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7bX1gKTtsZXQgYj10aGlzLl94MSxFPXRoaXMuX3kxLF89cC1hLEE9dy1mLEk9Yi1hLEI9RS1mLE49SSpJK0IqQjtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxPWF9LCR7dGhpcy5feTE9Zn1gO2Vsc2UgaWYoTj5RNylpZighKE1hdGguYWJzKEIqXy1BKkkpPlE3KXx8IW0pdGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPWF9LCR7dGhpcy5feTE9Zn1gO2Vsc2V7bGV0IFI9cC1iLHo9dy1FLFc9XypfK0EqQSxldD1SKlIreip6LHN0PU1hdGguc3FydChXKSxhdD1NYXRoLnNxcnQoTiksYnQ9bSpNYXRoLnRhbigoVDF0LU1hdGguYWNvcygoVytOLWV0KS8oMipzdCphdCkpKS8yKSxtdD1idC9hdCx5dD1idC9zdDtNYXRoLmFicyhtdC0xKT5RNyYmdGhpcy5fYXBwZW5kYEwke2ErbXQqSX0sJHtmK210KkJ9YCx0aGlzLl9hcHBlbmRgQSR7bX0sJHttfSwwLDAsJHsrKEIqUj5JKnopfSwke3RoaXMuX3gxPWEreXQqX30sJHt0aGlzLl95MT1mK3l0KkF9YH19YXJjKGEsZixwLHcsbSxiKXtpZihhPSthLGY9K2YscD0rcCxiPSEhYixwPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7cH1gKTtsZXQgRT1wKk1hdGguY29zKHcpLF89cCpNYXRoLnNpbih3KSxBPWErRSxJPWYrXyxCPTFeYixOPWI/dy1tOm0tdzt0aGlzLl94MT09PW51bGw/dGhpcy5fYXBwZW5kYE0ke0F9LCR7SX1gOihNYXRoLmFicyh0aGlzLl94MS1BKT5RN3x8TWF0aC5hYnModGhpcy5feTEtSSk+UTcpJiZ0aGlzLl9hcHBlbmRgTCR7QX0sJHtJfWAscCYmKE48MCYmKE49TiVDMXQrQzF0KSxOPmhFZT90aGlzLl9hcHBlbmRgQSR7cH0sJHtwfSwwLDEsJHtCfSwke2EtRX0sJHtmLV99QSR7cH0sJHtwfSwwLDEsJHtCfSwke3RoaXMuX3gxPUF9LCR7dGhpcy5feTE9SX1gOk4+UTcmJnRoaXMuX2FwcGVuZGBBJHtwfSwke3B9LDAsJHsrKE4+PVQxdCl9LCR7Qn0sJHt0aGlzLl94MT1hK3AqTWF0aC5jb3MobSl9LCR7dGhpcy5feTE9ZitwKk1hdGguc2luKG0pfWApfXJlY3QoYSxmLHAsdyl7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMuX3gxPSthfSwke3RoaXMuX3kwPXRoaXMuX3kxPStmfWgke3A9K3B9diR7K3d9aCR7LXB9WmB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5ffX07ZnVuY3Rpb24gZ0VlKGkpe2lmKCFpLm9rKXRocm93IG5ldyBFcnJvcihpLnN0YXR1cysiICIraS5zdGF0dXNUZXh0KTtyZXR1cm4gaS50ZXh0KCl9ZnVuY3Rpb24gcEVlKGksYSl7cmV0dXJuIGZldGNoKGksYSkudGhlbihnRWUpfWZ1bmN0aW9uIGJFZShpKXtyZXR1cm4oYSxmKT0+cEVlKGEsZikudGhlbihwPT5uZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHAsaSkpfXZhciB3RWU9YkVlKCJpbWFnZS9zdmcreG1sIik7ZnVuY3Rpb24gdkVlKGkpe3JldHVybiBNYXRoLmFicyhpPU1hdGgucm91bmQoaSkpPj0xZTIxP2kudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTppLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBVVShpLGEpe2lmKChmPShpPWE/aS50b0V4cG9uZW50aWFsKGEtMSk6aS50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZixwPWkuc2xpY2UoMCxmKTtyZXR1cm5bcC5sZW5ndGg+MT9wWzBdK3Auc2xpY2UoMik6cCwraS5zbGljZShmKzEpXX1mdW5jdGlvbiBfQShpKXtyZXR1cm4gaT1VVShNYXRoLmFicyhpKSksaT9pWzFdOk5hTn1mdW5jdGlvbiBtRWUoaSxhKXtyZXR1cm4gZnVuY3Rpb24oZixwKXtmb3IodmFyIHc9Zi5sZW5ndGgsbT1bXSxiPTAsRT1pWzBdLF89MDt3PjAmJkU+MCYmKF8rRSsxPnAmJihFPU1hdGgubWF4KDEscC1fKSksbS5wdXNoKGYuc3Vic3RyaW5nKHctPUUsdytFKSksISgoXys9RSsxKT5wKSk7KUU9aVtiPShiKzEpJWkubGVuZ3RoXTtyZXR1cm4gbS5yZXZlcnNlKCkuam9pbihhKX19ZnVuY3Rpb24geUVlKGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGYpe3JldHVybiBpWytmXX0pfX12YXIgeEVlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIFdVKGkpe2lmKCEoYT14RWUuZXhlYyhpKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitpKTt2YXIgYTtyZXR1cm4gbmV3IF8xdCh7ZmlsbDphWzFdLGFsaWduOmFbMl0sc2lnbjphWzNdLHN5bWJvbDphWzRdLHplcm86YVs1XSx3aWR0aDphWzZdLGNvbW1hOmFbN10scHJlY2lzaW9uOmFbOF0mJmFbOF0uc2xpY2UoMSksdHJpbTphWzldLHR5cGU6YVsxMF19KX1XVS5wcm90b3R5cGU9XzF0LnByb3RvdHlwZTtmdW5jdGlvbiBfMXQoaSl7dGhpcy5maWxsPWkuZmlsbD09PXZvaWQgMD8iICI6aS5maWxsKyIiLHRoaXMuYWxpZ249aS5hbGlnbj09PXZvaWQgMD8iPiI6aS5hbGlnbisiIix0aGlzLnNpZ249aS5zaWduPT09dm9pZCAwPyItIjppLnNpZ24rIiIsdGhpcy5zeW1ib2w9aS5zeW1ib2w9PT12b2lkIDA/IiI6aS5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhaS56ZXJvLHRoaXMud2lkdGg9aS53aWR0aD09PXZvaWQgMD92b2lkIDA6K2kud2lkdGgsdGhpcy5jb21tYT0hIWkuY29tbWEsdGhpcy5wcmVjaXNpb249aS5wcmVjaXNpb249PT12b2lkIDA/dm9pZCAwOitpLnByZWNpc2lvbix0aGlzLnRyaW09ISFpLnRyaW0sdGhpcy50eXBlPWkudHlwZT09PXZvaWQgMD8iIjppLnR5cGUrIiJ9XzF0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh0aGlzLndpZHRoPT09dm9pZCAwPyIiOk1hdGgubWF4KDEsdGhpcy53aWR0aHwwKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodGhpcy5wcmVjaXNpb249PT12b2lkIDA/IiI6Ii4iK01hdGgubWF4KDAsdGhpcy5wcmVjaXNpb258MCkpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O2Z1bmN0aW9uIGtFZShpKXt0OmZvcih2YXIgYT1pLmxlbmd0aCxmPTEscD0tMSx3O2Y8YTsrK2Ypc3dpdGNoKGlbZl0pe2Nhc2UiLiI6cD13PWY7YnJlYWs7Y2FzZSIwIjpwPT09MCYmKHA9Ziksdz1mO2JyZWFrO2RlZmF1bHQ6aWYoIStpW2ZdKWJyZWFrIHQ7cD4wJiYocD0wKTticmVha31yZXR1cm4gcD4wP2kuc2xpY2UoMCxwKStpLnNsaWNlKHcrMSk6aX12YXIgJE10O2Z1bmN0aW9uIEVFZShpLGEpe3ZhciBmPVVVKGksYSk7aWYoIWYpcmV0dXJuIGkrIiI7dmFyIHA9ZlswXSx3PWZbMV0sbT13LSgkTXQ9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHcvMykpKSozKSsxLGI9cC5sZW5ndGg7cmV0dXJuIG09PT1iP3A6bT5iP3ArbmV3IEFycmF5KG0tYisxKS5qb2luKCIwIik6bT4wP3Auc2xpY2UoMCxtKSsiLiIrcC5zbGljZShtKToiMC4iK25ldyBBcnJheSgxLW0pLmpvaW4oIjAiKStVVShpLE1hdGgubWF4KDAsYSttLTEpKVswXX1mdW5jdGlvbiB6TXQoaSxhKXt2YXIgZj1VVShpLGEpO2lmKCFmKXJldHVybiBpKyIiO3ZhciBwPWZbMF0sdz1mWzFdO3JldHVybiB3PDA/IjAuIituZXcgQXJyYXkoLXcpLmpvaW4oIjAiKStwOnAubGVuZ3RoPncrMT9wLnNsaWNlKDAsdysxKSsiLiIrcC5zbGljZSh3KzEpOnArbmV3IEFycmF5KHctcC5sZW5ndGgrMikuam9pbigiMCIpfWNvbnN0IHFNdD17IiUiOihpLGEpPT4oaSoxMDApLnRvRml4ZWQoYSksYjppPT5NYXRoLnJvdW5kKGkpLnRvU3RyaW5nKDIpLGM6aT0+aSsiIixkOnZFZSxlOihpLGEpPT5pLnRvRXhwb25lbnRpYWwoYSksZjooaSxhKT0+aS50b0ZpeGVkKGEpLGc6KGksYSk9PmkudG9QcmVjaXNpb24oYSksbzppPT5NYXRoLnJvdW5kKGkpLnRvU3RyaW5nKDgpLHA6KGksYSk9PnpNdChpKjEwMCxhKSxyOnpNdCxzOkVFZSxYOmk9Pk1hdGgucm91bmQoaSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkseDppPT5NYXRoLnJvdW5kKGkpLnRvU3RyaW5nKDE2KX07ZnVuY3Rpb24gSE10KGkpe3JldHVybiBpfXZhciBWTXQ9QXJyYXkucHJvdG90eXBlLm1hcCxHTXQ9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIFRFZShpKXt2YXIgYT1pLmdyb3VwaW5nPT09dm9pZCAwfHxpLnRob3VzYW5kcz09PXZvaWQgMD9ITXQ6bUVlKFZNdC5jYWxsKGkuZ3JvdXBpbmcsTnVtYmVyKSxpLnRob3VzYW5kcysiIiksZj1pLmN1cnJlbmN5PT09dm9pZCAwPyIiOmkuY3VycmVuY3lbMF0rIiIscD1pLmN1cnJlbmN5PT09dm9pZCAwPyIiOmkuY3VycmVuY3lbMV0rIiIsdz1pLmRlY2ltYWw9PT12b2lkIDA/Ii4iOmkuZGVjaW1hbCsiIixtPWkubnVtZXJhbHM9PT12b2lkIDA/SE10OnlFZShWTXQuY2FsbChpLm51bWVyYWxzLFN0cmluZykpLGI9aS5wZXJjZW50PT09dm9pZCAwPyIlIjppLnBlcmNlbnQrIiIsRT1pLm1pbnVzPT09dm9pZCAwPyLiiJIiOmkubWludXMrIiIsXz1pLm5hbj09PXZvaWQgMD8iTmFOIjppLm5hbisiIjtmdW5jdGlvbiBBKEIpe0I9V1UoQik7dmFyIE49Qi5maWxsLFI9Qi5hbGlnbix6PUIuc2lnbixXPUIuc3ltYm9sLGV0PUIuemVybyxzdD1CLndpZHRoLGF0PUIuY29tbWEsYnQ9Qi5wcmVjaXNpb24sbXQ9Qi50cmltLHl0PUIudHlwZTt5dD09PSJuIj8oYXQ9ITAseXQ9ImciKTpxTXRbeXRdfHwoYnQ9PT12b2lkIDAmJihidD0xMiksbXQ9ITAseXQ9ImciKSwoZXR8fE49PT0iMCImJlI9PT0iPSIpJiYoZXQ9ITAsTj0iMCIsUj0iPSIpO3ZhciBmdD1XPT09IiQiP2Y6Vz09PSIjIiYmL1tib3hYXS8udGVzdCh5dCk/IjAiK3l0LnRvTG93ZXJDYXNlKCk6IiIsdXQ9Vz09PSIkIj9wOi9bJXBdLy50ZXN0KHl0KT9iOiIiLHZ0PXFNdFt5dF0sWD0vW2RlZmdwcnMlXS8udGVzdCh5dCk7YnQ9YnQ9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KHl0KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGJ0KSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxidCkpO2Z1bmN0aW9uIHB0KFUpe3ZhciBUdD1mdCxudD11dCxJdCxPdCxCdDtpZih5dD09PSJjIiludD12dChVKStudCxVPSIiO2Vsc2V7VT0rVTt2YXIgRXQ9VTwwfHwxL1U8MDtpZihVPWlzTmFOKFUpP186dnQoTWF0aC5hYnMoVSksYnQpLG10JiYoVT1rRWUoVSkpLEV0JiYrVT09MCYmeiE9PSIrIiYmKEV0PSExKSxUdD0oRXQ/ej09PSIoIj96OkU6ej09PSItInx8ej09PSIoIj8iIjp6KStUdCxudD0oeXQ9PT0icyI/R010WzgrJE10LzNdOiIiKStudCsoRXQmJno9PT0iKCI/IikiOiIiKSxYKXtmb3IoSXQ9LTEsT3Q9VS5sZW5ndGg7KytJdDxPdDspaWYoQnQ9VS5jaGFyQ29kZUF0KEl0KSw0OD5CdHx8QnQ+NTcpe250PShCdD09PTQ2P3crVS5zbGljZShJdCsxKTpVLnNsaWNlKEl0KSkrbnQsVT1VLnNsaWNlKDAsSXQpO2JyZWFrfX19YXQmJiFldCYmKFU9YShVLDEvMCkpO3ZhciBaPVR0Lmxlbmd0aCtVLmxlbmd0aCtudC5sZW5ndGgsQ3Q9WjxzdD9uZXcgQXJyYXkoc3QtWisxKS5qb2luKE4pOiIiO3N3aXRjaChhdCYmZXQmJihVPWEoQ3QrVSxDdC5sZW5ndGg/c3QtbnQubGVuZ3RoOjEvMCksQ3Q9IiIpLFIpe2Nhc2UiPCI6VT1UdCtVK250K0N0O2JyZWFrO2Nhc2UiPSI6VT1UdCtDdCtVK250O2JyZWFrO2Nhc2UiXiI6VT1DdC5zbGljZSgwLFo9Q3QubGVuZ3RoPj4xKStUdCtVK250K0N0LnNsaWNlKFopO2JyZWFrO2RlZmF1bHQ6VT1DdCtUdCtVK250O2JyZWFrfXJldHVybiBtKFUpfXJldHVybiBwdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBCKyIifSxwdH1mdW5jdGlvbiBJKEIsTil7dmFyIFI9QSgoQj1XVShCKSxCLnR5cGU9ImYiLEIpKSx6PU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihfQShOKS8zKSkpKjMsVz1NYXRoLnBvdygxMCwteiksZXQ9R010Wzgrei8zXTtyZXR1cm4gZnVuY3Rpb24oc3Qpe3JldHVybiBSKFcqc3QpK2V0fX1yZXR1cm57Zm9ybWF0OkEsZm9ybWF0UHJlZml4Okl9fXZhciBZVSxVTXQsV010O0NFZSh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTtmdW5jdGlvbiBDRWUoaSl7cmV0dXJuIFlVPVRFZShpKSxVTXQ9WVUuZm9ybWF0LFdNdD1ZVS5mb3JtYXRQcmVmaXgsWVV9ZnVuY3Rpb24gX0VlKGkpe3JldHVybiBNYXRoLm1heCgwLC1fQShNYXRoLmFicyhpKSkpfWZ1bmN0aW9uIFNFZShpLGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihfQShhKS8zKSkpKjMtX0EoTWF0aC5hYnMoaSkpKX1mdW5jdGlvbiBBRWUoaSxhKXtyZXR1cm4gaT1NYXRoLmFicyhpKSxhPU1hdGguYWJzKGEpLWksTWF0aC5tYXgoMCxfQShhKS1fQShpKSkrMX1mdW5jdGlvbiBLVShpLGEpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UoaSk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGEpLmRvbWFpbihpKTticmVha31yZXR1cm4gdGhpc31jb25zdCBZTXQ9U3ltYm9sKCJpbXBsaWNpdCIpO2Z1bmN0aW9uIFhVKCl7dmFyIGk9bmV3ICRMdCxhPVtdLGY9W10scD1ZTXQ7ZnVuY3Rpb24gdyhtKXtsZXQgYj1pLmdldChtKTtpZihiPT09dm9pZCAwKXtpZihwIT09WU10KXJldHVybiBwO2kuc2V0KG0sYj1hLnB1c2gobSktMSl9cmV0dXJuIGZbYiVmLmxlbmd0aF19cmV0dXJuIHcuZG9tYWluPWZ1bmN0aW9uKG0pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhLnNsaWNlKCk7YT1bXSxpPW5ldyAkTHQ7Zm9yKGNvbnN0IGIgb2YgbSlpLmhhcyhiKXx8aS5zZXQoYixhLnB1c2goYiktMSk7cmV0dXJuIHd9LHcucmFuZ2U9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9QXJyYXkuZnJvbShtKSx3KTpmLnNsaWNlKCl9LHcudW5rbm93bj1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1tLHcpOnB9LHcuY29weT1mdW5jdGlvbigpe3JldHVybiBYVShhLGYpLnVua25vd24ocCl9LEtVLmFwcGx5KHcsYXJndW1lbnRzKSx3fWZ1bmN0aW9uIFMxdCgpe3ZhciBpPVhVKCkudW5rbm93bih2b2lkIDApLGE9aS5kb21haW4sZj1pLnJhbmdlLHA9MCx3PTEsbSxiLEU9ITEsXz0wLEE9MCxJPS41O2RlbGV0ZSBpLnVua25vd247ZnVuY3Rpb24gQigpe3ZhciBOPWEoKS5sZW5ndGgsUj13PHAsej1SP3c6cCxXPVI/cDp3O209KFcteikvTWF0aC5tYXgoMSxOLV8rQSoyKSxFJiYobT1NYXRoLmZsb29yKG0pKSx6Kz0oVy16LW0qKE4tXykpKkksYj1tKigxLV8pLEUmJih6PU1hdGgucm91bmQoeiksYj1NYXRoLnJvdW5kKGIpKTt2YXIgZXQ9RHhlKE4pLm1hcChmdW5jdGlvbihzdCl7cmV0dXJuIHorbSpzdH0pO3JldHVybiBmKFI/ZXQucmV2ZXJzZSgpOmV0KX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24oTil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEoTiksQigpKTphKCl9LGkucmFuZ2U9ZnVuY3Rpb24oTil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFtwLHddPU4scD0rcCx3PSt3LEIoKSk6W3Asd119LGkucmFuZ2VSb3VuZD1mdW5jdGlvbihOKXtyZXR1cm5bcCx3XT1OLHA9K3Asdz0rdyxFPSEwLEIoKX0saS5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gYn0saS5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIG19LGkucm91bmQ9ZnVuY3Rpb24oTil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9ISFOLEIoKSk6RX0saS5wYWRkaW5nPWZ1bmN0aW9uKE4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPU1hdGgubWluKDEsQT0rTiksQigpKTpffSxpLnBhZGRpbmdJbm5lcj1mdW5jdGlvbihOKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1NYXRoLm1pbigxLE4pLEIoKSk6X30saS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24oTil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9K04sQigpKTpBfSxpLmFsaWduPWZ1bmN0aW9uKE4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhJPU1hdGgubWF4KDAsTWF0aC5taW4oMSxOKSksQigpKTpJfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUzF0KGEoKSxbcCx3XSkucm91bmQoRSkucGFkZGluZ0lubmVyKF8pLnBhZGRpbmdPdXRlcihBKS5hbGlnbihJKX0sS1UuYXBwbHkoQigpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTEVlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1mdW5jdGlvbiBNRWUoaSl7cmV0dXJuK2l9dmFyIEtNdD1bMCwxXTtmdW5jdGlvbiBTQShpKXtyZXR1cm4gaX1mdW5jdGlvbiBBMXQoaSxhKXtyZXR1cm4oYS09aT0raSk/ZnVuY3Rpb24oZil7cmV0dXJuKGYtaSkvYX06TEVlKGlzTmFOKGEpP05hTjouNSl9ZnVuY3Rpb24gREVlKGksYSl7dmFyIGY7cmV0dXJuIGk+YSYmKGY9aSxpPWEsYT1mKSxmdW5jdGlvbihwKXtyZXR1cm4gTWF0aC5tYXgoaSxNYXRoLm1pbihhLHApKX19ZnVuY3Rpb24gSUVlKGksYSxmKXt2YXIgcD1pWzBdLHc9aVsxXSxtPWFbMF0sYj1hWzFdO3JldHVybiB3PHA/KHA9QTF0KHcscCksbT1mKGIsbSkpOihwPUExdChwLHcpLG09ZihtLGIpKSxmdW5jdGlvbihFKXtyZXR1cm4gbShwKEUpKX19ZnVuY3Rpb24gT0VlKGksYSxmKXt2YXIgcD1NYXRoLm1pbihpLmxlbmd0aCxhLmxlbmd0aCktMSx3PW5ldyBBcnJheShwKSxtPW5ldyBBcnJheShwKSxiPS0xO2ZvcihpW3BdPGlbMF0mJihpPWkuc2xpY2UoKS5yZXZlcnNlKCksYT1hLnNsaWNlKCkucmV2ZXJzZSgpKTsrK2I8cDspd1tiXT1BMXQoaVtiXSxpW2IrMV0pLG1bYl09ZihhW2JdLGFbYisxXSk7cmV0dXJuIGZ1bmN0aW9uKEUpe3ZhciBfPXh4ZShpLEUsMSxwKS0xO3JldHVybiBtW19dKHdbX10oRSkpfX1mdW5jdGlvbiBYTXQoaSxhKXtyZXR1cm4gYS5kb21haW4oaS5kb21haW4oKSkucmFuZ2UoaS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShpLmludGVycG9sYXRlKCkpLmNsYW1wKGkuY2xhbXAoKSkudW5rbm93bihpLnVua25vd24oKSl9ZnVuY3Rpb24gUEVlKCl7dmFyIGk9S010LGE9S010LGY9YjF0LHAsdyxtLGI9U0EsRSxfLEE7ZnVuY3Rpb24gSSgpe3ZhciBOPU1hdGgubWluKGkubGVuZ3RoLGEubGVuZ3RoKTtyZXR1cm4gYiE9PVNBJiYoYj1ERWUoaVswXSxpW04tMV0pKSxFPU4+Mj9PRWU6SUVlLF89QT1udWxsLEJ9ZnVuY3Rpb24gQihOKXtyZXR1cm4gTj09bnVsbHx8aXNOYU4oTj0rTik/bTooX3x8KF89RShpLm1hcChwKSxhLGYpKSkocChiKE4pKSl9cmV0dXJuIEIuaW52ZXJ0PWZ1bmN0aW9uKE4pe3JldHVybiBiKHcoKEF8fChBPUUoYSxpLm1hcChwKSxRdikpKShOKSkpfSxCLmRvbWFpbj1mdW5jdGlvbihOKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1BcnJheS5mcm9tKE4sTUVlKSxJKCkpOmkuc2xpY2UoKX0sQi5yYW5nZT1mdW5jdGlvbihOKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1BcnJheS5mcm9tKE4pLEkoKSk6YS5zbGljZSgpfSxCLnJhbmdlUm91bmQ9ZnVuY3Rpb24oTil7cmV0dXJuIGE9QXJyYXkuZnJvbShOKSxmPVVrZSxJKCl9LEIuY2xhbXA9ZnVuY3Rpb24oTil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9Tj8hMDpTQSxJKCkpOmIhPT1TQX0sQi5pbnRlcnBvbGF0ZT1mdW5jdGlvbihOKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1OLEkoKSk6Zn0sQi51bmtub3duPWZ1bmN0aW9uKE4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPU4sQik6bX0sZnVuY3Rpb24oTixSKXtyZXR1cm4gcD1OLHc9UixJKCl9fWZ1bmN0aW9uIFFNdCgpe3JldHVybiBQRWUoKShTQSxTQSl9ZnVuY3Rpb24gRkVlKGksYSxmLHApe3ZhciB3PXQxdChpLGEsZiksbTtzd2l0Y2gocD1XVShwPz8iLGYiKSxwLnR5cGUpe2Nhc2UicyI6e3ZhciBiPU1hdGgubWF4KE1hdGguYWJzKGkpLE1hdGguYWJzKGEpKTtyZXR1cm4gcC5wcmVjaXNpb249PW51bGwmJiFpc05hTihtPVNFZSh3LGIpKSYmKHAucHJlY2lzaW9uPW0pLFdNdChwLGIpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntwLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG09QUVlKHcsTWF0aC5tYXgoTWF0aC5hYnMoaSksTWF0aC5hYnMoYSkpKSkmJihwLnByZWNpc2lvbj1tLShwLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e3AucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4obT1fRWUodykpJiYocC5wcmVjaXNpb249bS0ocC50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIFVNdChwKX1mdW5jdGlvbiBORWUoaSl7dmFyIGE9aS5kb21haW47cmV0dXJuIGkudGlja3M9ZnVuY3Rpb24oZil7dmFyIHA9YSgpO3JldHVybiBBeGUocFswXSxwW3AubGVuZ3RoLTFdLGY/PzEwKX0saS50aWNrRm9ybWF0PWZ1bmN0aW9uKGYscCl7dmFyIHc9YSgpO3JldHVybiBGRWUod1swXSx3W3cubGVuZ3RoLTFdLGY/PzEwLHApfSxpLm5pY2U9ZnVuY3Rpb24oZil7Zj09bnVsbCYmKGY9MTApO3ZhciBwPWEoKSx3PTAsbT1wLmxlbmd0aC0xLGI9cFt3XSxFPXBbbV0sXyxBLEk9MTA7Zm9yKEU8YiYmKEE9YixiPUUsRT1BLEE9dyx3PW0sbT1BKTtJLS0gPjA7KXtpZihBPUpmdChiLEUsZiksQT09PV8pcmV0dXJuIHBbd109YixwW21dPUUsYShwKTtpZihBPjApYj1NYXRoLmZsb29yKGIvQSkqQSxFPU1hdGguY2VpbChFL0EpKkE7ZWxzZSBpZihBPDApYj1NYXRoLmNlaWwoYipBKS9BLEU9TWF0aC5mbG9vcihFKkEpL0E7ZWxzZSBicmVhaztfPUF9cmV0dXJuIGl9LGl9ZnVuY3Rpb24gQUEoKXt2YXIgaT1RTXQoKTtyZXR1cm4gaS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFhNdChpLEFBKCkpfSxLVS5hcHBseShpLGFyZ3VtZW50cyksTkVlKGkpfWZ1bmN0aW9uIEJFZShpLGEpe2k9aS5zbGljZSgpO3ZhciBmPTAscD1pLmxlbmd0aC0xLHc9aVtmXSxtPWlbcF0sYjtyZXR1cm4gbTx3JiYoYj1mLGY9cCxwPWIsYj13LHc9bSxtPWIpLGlbZl09YS5mbG9vcih3KSxpW3BdPWEuY2VpbChtKSxpfWNvbnN0IEwxdD1uZXcgRGF0ZSxNMXQ9bmV3IERhdGU7ZnVuY3Rpb24gYTEoaSxhLGYscCl7ZnVuY3Rpb24gdyhtKXtyZXR1cm4gaShtPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCttKSksbX1yZXR1cm4gdy5mbG9vcj1tPT4oaShtPW5ldyBEYXRlKCttKSksbSksdy5jZWlsPW09PihpKG09bmV3IERhdGUobS0xKSksYShtLDEpLGkobSksbSksdy5yb3VuZD1tPT57Y29uc3QgYj13KG0pLEU9dy5jZWlsKG0pO3JldHVybiBtLWI8RS1tP2I6RX0sdy5vZmZzZXQ9KG0sYik9PihhKG09bmV3IERhdGUoK20pLGI9PW51bGw/MTpNYXRoLmZsb29yKGIpKSxtKSx3LnJhbmdlPShtLGIsRSk9Pntjb25zdCBfPVtdO2lmKG09dy5jZWlsKG0pLEU9RT09bnVsbD8xOk1hdGguZmxvb3IoRSksIShtPGIpfHwhKEU+MCkpcmV0dXJuIF87bGV0IEE7ZG8gXy5wdXNoKEE9bmV3IERhdGUoK20pKSxhKG0sRSksaShtKTt3aGlsZShBPG0mJm08Yik7cmV0dXJuIF99LHcuZmlsdGVyPW09PmExKGI9PntpZihiPj1iKWZvcig7aShiKSwhbShiKTspYi5zZXRUaW1lKGItMSl9LChiLEUpPT57aWYoYj49YilpZihFPDApZm9yKDsrK0U8PTA7KWZvcig7YShiLC0xKSwhbShiKTspO2Vsc2UgZm9yKDstLUU+PTA7KWZvcig7YShiLDEpLCFtKGIpOyk7fSksZiYmKHcuY291bnQ9KG0sYik9PihMMXQuc2V0VGltZSgrbSksTTF0LnNldFRpbWUoK2IpLGkoTDF0KSxpKE0xdCksTWF0aC5mbG9vcihmKEwxdCxNMXQpKSksdy5ldmVyeT1tPT4obT1NYXRoLmZsb29yKG0pLCFpc0Zpbml0ZShtKXx8IShtPjApP251bGw6bT4xP3cuZmlsdGVyKHA/Yj0+cChiKSVtPT09MDpiPT53LmNvdW50KDAsYiklbT09PTApOncpKSx3fWNvbnN0IExBPWExKCgpPT57fSwoaSxhKT0+e2kuc2V0VGltZSgraSthKX0sKGksYSk9PmEtaSk7TEEuZXZlcnk9aT0+KGk9TWF0aC5mbG9vcihpKSwhaXNGaW5pdGUoaSl8fCEoaT4wKT9udWxsOmk+MT9hMShhPT57YS5zZXRUaW1lKE1hdGguZmxvb3IoYS9pKSppKX0sKGEsZik9PnthLnNldFRpbWUoK2ErZippKX0sKGEsZik9PihmLWEpL2kpOkxBKSxMQS5yYW5nZTtjb25zdCBtNT0xZTMsWjI9bTUqNjAseTU9WjIqNjAseDU9eTUqMjQsRDF0PXg1KjcsWk10PXg1KjMwLEkxdD14NSozNjUsc2s9YTEoaT0+e2kuc2V0VGltZShpLWkuZ2V0TWlsbGlzZWNvbmRzKCkpfSwoaSxhKT0+e2kuc2V0VGltZSgraSthKm01KX0sKGksYSk9PihhLWkpL201LGk9PmkuZ2V0VVRDU2Vjb25kcygpKTtzay5yYW5nZTtjb25zdCBQUD1hMShpPT57aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKS1pLmdldFNlY29uZHMoKSptNSl9LChpLGEpPT57aS5zZXRUaW1lKCtpK2EqWjIpfSwoaSxhKT0+KGEtaSkvWjIsaT0+aS5nZXRNaW51dGVzKCkpO1BQLnJhbmdlLGExKGk9PntpLnNldFVUQ1NlY29uZHMoMCwwKX0sKGksYSk9PntpLnNldFRpbWUoK2krYSpaMil9LChpLGEpPT4oYS1pKS9aMixpPT5pLmdldFVUQ01pbnV0ZXMoKSkucmFuZ2U7Y29uc3QgRlA9YTEoaT0+e2kuc2V0VGltZShpLWkuZ2V0TWlsbGlzZWNvbmRzKCktaS5nZXRTZWNvbmRzKCkqbTUtaS5nZXRNaW51dGVzKCkqWjIpfSwoaSxhKT0+e2kuc2V0VGltZSgraSthKnk1KX0sKGksYSk9PihhLWkpL3k1LGk9PmkuZ2V0SG91cnMoKSk7RlAucmFuZ2UsYTEoaT0+e2kuc2V0VVRDTWludXRlcygwLDAsMCl9LChpLGEpPT57aS5zZXRUaW1lKCtpK2EqeTUpfSwoaSxhKT0+KGEtaSkveTUsaT0+aS5nZXRVVENIb3VycygpKS5yYW5nZTtjb25zdCBaNz1hMShpPT5pLnNldEhvdXJzKDAsMCwwLDApLChpLGEpPT5pLnNldERhdGUoaS5nZXREYXRlKCkrYSksKGksYSk9PihhLWktKGEuZ2V0VGltZXpvbmVPZmZzZXQoKS1pLmdldFRpbWV6b25lT2Zmc2V0KCkpKloyKS94NSxpPT5pLmdldERhdGUoKS0xKTtaNy5yYW5nZTtjb25zdCBPMXQ9YTEoaT0+e2kuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChpLGEpPT57aS5zZXRVVENEYXRlKGkuZ2V0VVRDRGF0ZSgpK2EpfSwoaSxhKT0+KGEtaSkveDUsaT0+aS5nZXRVVENEYXRlKCktMSk7TzF0LnJhbmdlLGExKGk9PntpLnNldFVUQ0hvdXJzKDAsMCwwLDApfSwoaSxhKT0+e2kuc2V0VVRDRGF0ZShpLmdldFVUQ0RhdGUoKSthKX0sKGksYSk9PihhLWkpL3g1LGk9Pk1hdGguZmxvb3IoaS94NSkpLnJhbmdlO2Z1bmN0aW9uIEo3KGkpe3JldHVybiBhMShhPT57YS5zZXREYXRlKGEuZ2V0RGF0ZSgpLShhLmdldERheSgpKzctaSklNyksYS5zZXRIb3VycygwLDAsMCwwKX0sKGEsZik9PnthLnNldERhdGUoYS5nZXREYXRlKCkrZio3KX0sKGEsZik9PihmLWEtKGYuZ2V0VGltZXpvbmVPZmZzZXQoKS1hLmdldFRpbWV6b25lT2Zmc2V0KCkpKloyKS9EMXQpfWNvbnN0IE5QPUo3KDApLEJQPUo3KDEpLEpNdD1KNygyKSx0RHQ9SjcoMyksdFQ9SjcoNCksZUR0PUo3KDUpLG5EdD1KNyg2KTtOUC5yYW5nZSxCUC5yYW5nZSxKTXQucmFuZ2UsdER0LnJhbmdlLHRULnJhbmdlLGVEdC5yYW5nZSxuRHQucmFuZ2U7ZnVuY3Rpb24gZVQoaSl7cmV0dXJuIGExKGE9PnthLnNldFVUQ0RhdGUoYS5nZXRVVENEYXRlKCktKGEuZ2V0VVRDRGF5KCkrNy1pKSU3KSxhLnNldFVUQ0hvdXJzKDAsMCwwLDApfSwoYSxmKT0+e2Euc2V0VVRDRGF0ZShhLmdldFVUQ0RhdGUoKStmKjcpfSwoYSxmKT0+KGYtYSkvRDF0KX1jb25zdCByRHQ9ZVQoMCksUVU9ZVQoMSksUkVlPWVUKDIpLGpFZT1lVCgzKSxNQT1lVCg0KSwkRWU9ZVQoNSksekVlPWVUKDYpO3JEdC5yYW5nZSxRVS5yYW5nZSxSRWUucmFuZ2UsakVlLnJhbmdlLE1BLnJhbmdlLCRFZS5yYW5nZSx6RWUucmFuZ2U7Y29uc3QgUlA9YTEoaT0+e2kuc2V0RGF0ZSgxKSxpLnNldEhvdXJzKDAsMCwwLDApfSwoaSxhKT0+e2kuc2V0TW9udGgoaS5nZXRNb250aCgpK2EpfSwoaSxhKT0+YS5nZXRNb250aCgpLWkuZ2V0TW9udGgoKSsoYS5nZXRGdWxsWWVhcigpLWkuZ2V0RnVsbFllYXIoKSkqMTIsaT0+aS5nZXRNb250aCgpKTtSUC5yYW5nZSxhMShpPT57aS5zZXRVVENEYXRlKDEpLGkuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChpLGEpPT57aS5zZXRVVENNb250aChpLmdldFVUQ01vbnRoKCkrYSl9LChpLGEpPT5hLmdldFVUQ01vbnRoKCktaS5nZXRVVENNb250aCgpKyhhLmdldFVUQ0Z1bGxZZWFyKCktaS5nZXRVVENGdWxsWWVhcigpKSoxMixpPT5pLmdldFVUQ01vbnRoKCkpLnJhbmdlO2NvbnN0IGs1PWExKGk9PntpLnNldE1vbnRoKDAsMSksaS5zZXRIb3VycygwLDAsMCwwKX0sKGksYSk9PntpLnNldEZ1bGxZZWFyKGkuZ2V0RnVsbFllYXIoKSthKX0sKGksYSk9PmEuZ2V0RnVsbFllYXIoKS1pLmdldEZ1bGxZZWFyKCksaT0+aS5nZXRGdWxsWWVhcigpKTtrNS5ldmVyeT1pPT4haXNGaW5pdGUoaT1NYXRoLmZsb29yKGkpKXx8IShpPjApP251bGw6YTEoYT0+e2Euc2V0RnVsbFllYXIoTWF0aC5mbG9vcihhLmdldEZ1bGxZZWFyKCkvaSkqaSksYS5zZXRNb250aCgwLDEpLGEuc2V0SG91cnMoMCwwLDAsMCl9LChhLGYpPT57YS5zZXRGdWxsWWVhcihhLmdldEZ1bGxZZWFyKCkrZippKX0pLGs1LnJhbmdlO2NvbnN0IG5UPWExKGk9PntpLnNldFVUQ01vbnRoKDAsMSksaS5zZXRVVENIb3VycygwLDAsMCwwKX0sKGksYSk9PntpLnNldFVUQ0Z1bGxZZWFyKGkuZ2V0VVRDRnVsbFllYXIoKSthKX0sKGksYSk9PmEuZ2V0VVRDRnVsbFllYXIoKS1pLmdldFVUQ0Z1bGxZZWFyKCksaT0+aS5nZXRVVENGdWxsWWVhcigpKTtuVC5ldmVyeT1pPT4haXNGaW5pdGUoaT1NYXRoLmZsb29yKGkpKXx8IShpPjApP251bGw6YTEoYT0+e2Euc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihhLmdldFVUQ0Z1bGxZZWFyKCkvaSkqaSksYS5zZXRVVENNb250aCgwLDEpLGEuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChhLGYpPT57YS5zZXRVVENGdWxsWWVhcihhLmdldFVUQ0Z1bGxZZWFyKCkrZippKX0pLG5ULnJhbmdlO2Z1bmN0aW9uIHFFZShpLGEsZixwLHcsbSl7Y29uc3QgYj1bW3NrLDEsbTVdLFtzayw1LDUqbTVdLFtzaywxNSwxNSptNV0sW3NrLDMwLDMwKm01XSxbbSwxLFoyXSxbbSw1LDUqWjJdLFttLDE1LDE1KloyXSxbbSwzMCwzMCpaMl0sW3csMSx5NV0sW3csMywzKnk1XSxbdyw2LDYqeTVdLFt3LDEyLDEyKnk1XSxbcCwxLHg1XSxbcCwyLDIqeDVdLFtmLDEsRDF0XSxbYSwxLFpNdF0sW2EsMywzKlpNdF0sW2ksMSxJMXRdXTtmdW5jdGlvbiBFKEEsSSxCKXtjb25zdCBOPUk8QTtOJiYoW0EsSV09W0ksQV0pO2NvbnN0IFI9QiYmdHlwZW9mIEIucmFuZ2U9PSJmdW5jdGlvbiI/QjpfKEEsSSxCKSx6PVI/Ui5yYW5nZShBLCtJKzEpOltdO3JldHVybiBOP3oucmV2ZXJzZSgpOnp9ZnVuY3Rpb24gXyhBLEksQil7Y29uc3QgTj1NYXRoLmFicyhJLUEpL0IsUj1aZnQoKFssLGV0XSk9PmV0KS5yaWdodChiLE4pO2lmKFI9PT1iLmxlbmd0aClyZXR1cm4gaS5ldmVyeSh0MXQoQS9JMXQsSS9JMXQsQikpO2lmKFI9PT0wKXJldHVybiBMQS5ldmVyeShNYXRoLm1heCh0MXQoQSxJLEIpLDEpKTtjb25zdFt6LFddPWJbTi9iW1ItMV1bMl08YltSXVsyXS9OP1ItMTpSXTtyZXR1cm4gei5ldmVyeShXKX1yZXR1cm5bRSxfXX1jb25zdFtIRWUsVkVlXT1xRWUoazUsUlAsTlAsWjcsRlAsUFApO2Z1bmN0aW9uIFAxdChpKXtpZigwPD1pLnkmJmkueTwxMDApe3ZhciBhPW5ldyBEYXRlKC0xLGkubSxpLmQsaS5ILGkuTSxpLlMsaS5MKTtyZXR1cm4gYS5zZXRGdWxsWWVhcihpLnkpLGF9cmV0dXJuIG5ldyBEYXRlKGkueSxpLm0saS5kLGkuSCxpLk0saS5TLGkuTCl9ZnVuY3Rpb24gRjF0KGkpe2lmKDA8PWkueSYmaS55PDEwMCl7dmFyIGE9bmV3IERhdGUoRGF0ZS5VVEMoLTEsaS5tLGkuZCxpLkgsaS5NLGkuUyxpLkwpKTtyZXR1cm4gYS5zZXRVVENGdWxsWWVhcihpLnkpLGF9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGkueSxpLm0saS5kLGkuSCxpLk0saS5TLGkuTCkpfWZ1bmN0aW9uIGpQKGksYSxmKXtyZXR1cm57eTppLG06YSxkOmYsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBHRWUoaSl7dmFyIGE9aS5kYXRlVGltZSxmPWkuZGF0ZSxwPWkudGltZSx3PWkucGVyaW9kcyxtPWkuZGF5cyxiPWkuc2hvcnREYXlzLEU9aS5tb250aHMsXz1pLnNob3J0TW9udGhzLEE9JFAodyksST16UCh3KSxCPSRQKG0pLE49elAobSksUj0kUChiKSx6PXpQKGIpLFc9JFAoRSksZXQ9elAoRSksc3Q9JFAoXyksYXQ9elAoXyksYnQ9e2E6RXQsQTpaLGI6Q3QsQjp4dCxjOm51bGwsZDp1RHQsZTp1RHQsZjpnN2UsZzpUN2UsRzpfN2UsSDpoN2UsSTpmN2UsajpkN2UsTDpsRHQsbTpwN2UsTTpiN2UscDpIdCxxOkxlLFE6YkR0LHM6d0R0LFM6dzdlLHU6djdlLFU6bTdlLFY6eTdlLHc6eDdlLFc6azdlLHg6bnVsbCxYOm51bGwseTpFN2UsWTpDN2UsWjpTN2UsIiUiOnBEdH0sbXQ9e2E6RnQsQTpnbixiOlNlLEI6bWUsYzpudWxsLGQ6ZkR0LGU6ZkR0LGY6RDdlLGc6ejdlLEc6SDdlLEg6QTdlLEk6TDdlLGo6TTdlLEw6ZER0LG06STdlLE06TzdlLHA6VmUscTpZZSxROmJEdCxzOndEdCxTOlA3ZSx1OkY3ZSxVOk43ZSxWOkI3ZSx3OlI3ZSxXOmo3ZSx4Om51bGwsWDpudWxsLHk6JDdlLFk6cTdlLFo6VjdlLCIlIjpwRHR9LHl0PXthOnB0LEE6VSxiOlR0LEI6bnQsYzpJdCxkOm9EdCxlOm9EdCxmOm83ZSxnOmFEdCxHOnNEdCxIOmNEdCxJOmNEdCxqOnI3ZSxMOmE3ZSxtOm43ZSxNOmk3ZSxwOlgscTplN2UsUTp1N2UsczpsN2UsUzpzN2UsdTpYRWUsVTpRRWUsVjpaRWUsdzpLRWUsVzpKRWUseDpPdCxYOkJ0LHk6YUR0LFk6c0R0LFo6dDdlLCIlIjpjN2V9O2J0Lng9ZnQoZixidCksYnQuWD1mdChwLGJ0KSxidC5jPWZ0KGEsYnQpLG10Lng9ZnQoZixtdCksbXQuWD1mdChwLG10KSxtdC5jPWZ0KGEsbXQpO2Z1bmN0aW9uIGZ0KGNlLGtlKXtyZXR1cm4gZnVuY3Rpb24oenQpe3ZhciByZT1bXSxzZT0tMSxQZT0wLHRlPWNlLmxlbmd0aCxNZSxkZSxvbjtmb3IoenQgaW5zdGFuY2VvZiBEYXRlfHwoenQ9bmV3IERhdGUoK3p0KSk7KytzZTx0ZTspY2UuY2hhckNvZGVBdChzZSk9PT0zNyYmKHJlLnB1c2goY2Uuc2xpY2UoUGUsc2UpKSwoZGU9aUR0W01lPWNlLmNoYXJBdCgrK3NlKV0pIT1udWxsP01lPWNlLmNoYXJBdCgrK3NlKTpkZT1NZT09PSJlIj8iICI6IjAiLChvbj1rZVtNZV0pJiYoTWU9b24oenQsZGUpKSxyZS5wdXNoKE1lKSxQZT1zZSsxKTtyZXR1cm4gcmUucHVzaChjZS5zbGljZShQZSxzZSkpLHJlLmpvaW4oIiIpfX1mdW5jdGlvbiB1dChjZSxrZSl7cmV0dXJuIGZ1bmN0aW9uKHp0KXt2YXIgcmU9alAoMTkwMCx2b2lkIDAsMSksc2U9dnQocmUsY2UsenQrPSIiLDApLFBlLHRlO2lmKHNlIT16dC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcmUpcmV0dXJuIG5ldyBEYXRlKHJlLlEpO2lmKCJzImluIHJlKXJldHVybiBuZXcgRGF0ZShyZS5zKjFlMysoIkwiaW4gcmU/cmUuTDowKSk7aWYoa2UmJiEoIloiaW4gcmUpJiYocmUuWj0wKSwicCJpbiByZSYmKHJlLkg9cmUuSCUxMityZS5wKjEyKSxyZS5tPT09dm9pZCAwJiYocmUubT0icSJpbiByZT9yZS5xOjApLCJWImluIHJlKXtpZihyZS5WPDF8fHJlLlY+NTMpcmV0dXJuIG51bGw7InciaW4gcmV8fChyZS53PTEpLCJaImluIHJlPyhQZT1GMXQoalAocmUueSwwLDEpKSx0ZT1QZS5nZXRVVENEYXkoKSxQZT10ZT40fHx0ZT09PTA/UVUuY2VpbChQZSk6UVUoUGUpLFBlPU8xdC5vZmZzZXQoUGUsKHJlLlYtMSkqNykscmUueT1QZS5nZXRVVENGdWxsWWVhcigpLHJlLm09UGUuZ2V0VVRDTW9udGgoKSxyZS5kPVBlLmdldFVUQ0RhdGUoKSsocmUudys2KSU3KTooUGU9UDF0KGpQKHJlLnksMCwxKSksdGU9UGUuZ2V0RGF5KCksUGU9dGU+NHx8dGU9PT0wP0JQLmNlaWwoUGUpOkJQKFBlKSxQZT1aNy5vZmZzZXQoUGUsKHJlLlYtMSkqNykscmUueT1QZS5nZXRGdWxsWWVhcigpLHJlLm09UGUuZ2V0TW9udGgoKSxyZS5kPVBlLmdldERhdGUoKSsocmUudys2KSU3KX1lbHNlKCJXImluIHJlfHwiVSJpbiByZSkmJigidyJpbiByZXx8KHJlLnc9InUiaW4gcmU/cmUudSU3OiJXImluIHJlPzE6MCksdGU9IloiaW4gcmU/RjF0KGpQKHJlLnksMCwxKSkuZ2V0VVRDRGF5KCk6UDF0KGpQKHJlLnksMCwxKSkuZ2V0RGF5KCkscmUubT0wLHJlLmQ9IlciaW4gcmU/KHJlLncrNiklNytyZS5XKjctKHRlKzUpJTc6cmUudytyZS5VKjctKHRlKzYpJTcpO3JldHVybiJaImluIHJlPyhyZS5IKz1yZS5aLzEwMHwwLHJlLk0rPXJlLlolMTAwLEYxdChyZSkpOlAxdChyZSl9fWZ1bmN0aW9uIHZ0KGNlLGtlLHp0LHJlKXtmb3IodmFyIHNlPTAsUGU9a2UubGVuZ3RoLHRlPXp0Lmxlbmd0aCxNZSxkZTtzZTxQZTspe2lmKHJlPj10ZSlyZXR1cm4tMTtpZihNZT1rZS5jaGFyQ29kZUF0KHNlKyspLE1lPT09Mzcpe2lmKE1lPWtlLmNoYXJBdChzZSsrKSxkZT15dFtNZSBpbiBpRHQ/a2UuY2hhckF0KHNlKyspOk1lXSwhZGV8fChyZT1kZShjZSx6dCxyZSkpPDApcmV0dXJuLTF9ZWxzZSBpZihNZSE9enQuY2hhckNvZGVBdChyZSsrKSlyZXR1cm4tMX1yZXR1cm4gcmV9ZnVuY3Rpb24gWChjZSxrZSx6dCl7dmFyIHJlPUEuZXhlYyhrZS5zbGljZSh6dCkpO3JldHVybiByZT8oY2UucD1JLmdldChyZVswXS50b0xvd2VyQ2FzZSgpKSx6dCtyZVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHB0KGNlLGtlLHp0KXt2YXIgcmU9Ui5leGVjKGtlLnNsaWNlKHp0KSk7cmV0dXJuIHJlPyhjZS53PXouZ2V0KHJlWzBdLnRvTG93ZXJDYXNlKCkpLHp0K3JlWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVShjZSxrZSx6dCl7dmFyIHJlPUIuZXhlYyhrZS5zbGljZSh6dCkpO3JldHVybiByZT8oY2Uudz1OLmdldChyZVswXS50b0xvd2VyQ2FzZSgpKSx6dCtyZVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFR0KGNlLGtlLHp0KXt2YXIgcmU9c3QuZXhlYyhrZS5zbGljZSh6dCkpO3JldHVybiByZT8oY2UubT1hdC5nZXQocmVbMF0udG9Mb3dlckNhc2UoKSksenQrcmVbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBudChjZSxrZSx6dCl7dmFyIHJlPVcuZXhlYyhrZS5zbGljZSh6dCkpO3JldHVybiByZT8oY2UubT1ldC5nZXQocmVbMF0udG9Mb3dlckNhc2UoKSksenQrcmVbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJdChjZSxrZSx6dCl7cmV0dXJuIHZ0KGNlLGEsa2UsenQpfWZ1bmN0aW9uIE90KGNlLGtlLHp0KXtyZXR1cm4gdnQoY2UsZixrZSx6dCl9ZnVuY3Rpb24gQnQoY2Usa2UsenQpe3JldHVybiB2dChjZSxwLGtlLHp0KX1mdW5jdGlvbiBFdChjZSl7cmV0dXJuIGJbY2UuZ2V0RGF5KCldfWZ1bmN0aW9uIFooY2Upe3JldHVybiBtW2NlLmdldERheSgpXX1mdW5jdGlvbiBDdChjZSl7cmV0dXJuIF9bY2UuZ2V0TW9udGgoKV19ZnVuY3Rpb24geHQoY2Upe3JldHVybiBFW2NlLmdldE1vbnRoKCldfWZ1bmN0aW9uIEh0KGNlKXtyZXR1cm4gd1srKGNlLmdldEhvdXJzKCk+PTEyKV19ZnVuY3Rpb24gTGUoY2Upe3JldHVybiAxK35+KGNlLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gRnQoY2Upe3JldHVybiBiW2NlLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBnbihjZSl7cmV0dXJuIG1bY2UuZ2V0VVRDRGF5KCldfWZ1bmN0aW9uIFNlKGNlKXtyZXR1cm4gX1tjZS5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBtZShjZSl7cmV0dXJuIEVbY2UuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gVmUoY2Upe3JldHVybiB3WysoY2UuZ2V0VVRDSG91cnMoKT49MTIpXX1mdW5jdGlvbiBZZShjZSl7cmV0dXJuIDErfn4oY2UuZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKGNlKXt2YXIga2U9ZnQoY2UrPSIiLGJ0KTtyZXR1cm4ga2UudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gY2V9LGtlfSxwYXJzZTpmdW5jdGlvbihjZSl7dmFyIGtlPXV0KGNlKz0iIiwhMSk7cmV0dXJuIGtlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGNlfSxrZX0sdXRjRm9ybWF0OmZ1bmN0aW9uKGNlKXt2YXIga2U9ZnQoY2UrPSIiLG10KTtyZXR1cm4ga2UudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gY2V9LGtlfSx1dGNQYXJzZTpmdW5jdGlvbihjZSl7dmFyIGtlPXV0KGNlKz0iIiwhMCk7cmV0dXJuIGtlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGNlfSxrZX19fXZhciBpRHQ9eyItIjoiIixfOiIgIiwwOiIwIn0sWDE9L15ccypcZCsvLFVFZT0vXiUvLFdFZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gSWMoaSxhLGYpe3ZhciBwPWk8MD8iLSI6IiIsdz0ocD8taTppKSsiIixtPXcubGVuZ3RoO3JldHVybiBwKyhtPGY/bmV3IEFycmF5KGYtbSsxKS5qb2luKGEpK3c6dyl9ZnVuY3Rpb24gWUVlKGkpe3JldHVybiBpLnJlcGxhY2UoV0VlLCJcXCQmIil9ZnVuY3Rpb24gJFAoaSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2kubWFwKFlFZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHpQKGkpe3JldHVybiBuZXcgTWFwKGkubWFwKChhLGYpPT5bYS50b0xvd2VyQ2FzZSgpLGZdKSl9ZnVuY3Rpb24gS0VlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzEpKTtyZXR1cm4gcD8oaS53PStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhFZShpLGEsZil7dmFyIHA9WDEuZXhlYyhhLnNsaWNlKGYsZisxKSk7cmV0dXJuIHA/KGkudT0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBRRWUoaSxhLGYpe3ZhciBwPVgxLmV4ZWMoYS5zbGljZShmLGYrMikpO3JldHVybiBwPyhpLlU9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWkVlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5WPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEpFZShpLGEsZil7dmFyIHA9WDEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkuVz0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzRHQoaSxhLGYpe3ZhciBwPVgxLmV4ZWMoYS5zbGljZShmLGYrNCkpO3JldHVybiBwPyhpLnk9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYUR0KGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS55PStwWzBdKygrcFswXT42OD8xOTAwOjJlMyksZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdDdlKGksYSxmKXt2YXIgcD0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhhLnNsaWNlKGYsZis2KSk7cmV0dXJuIHA/KGkuWj1wWzFdPzA6LShwWzJdKyhwWzNdfHwiMDAiKSksZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZTdlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzEpKTtyZXR1cm4gcD8oaS5xPXBbMF0qMy0zLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG43ZShpLGEsZil7dmFyIHA9WDEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkubT1wWzBdLTEsZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb0R0KGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5kPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHI3ZShpLGEsZil7dmFyIHA9WDEuZXhlYyhhLnNsaWNlKGYsZiszKSk7cmV0dXJuIHA/KGkubT0wLGkuZD0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjRHQoaSxhLGYpe3ZhciBwPVgxLmV4ZWMoYS5zbGljZShmLGYrMikpO3JldHVybiBwPyhpLkg9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaTdlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzIpKTtyZXR1cm4gcD8oaS5NPStwWzBdLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHM3ZShpLGEsZil7dmFyIHA9WDEuZXhlYyhhLnNsaWNlKGYsZisyKSk7cmV0dXJuIHA/KGkuUz0rcFswXSxmK3BbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhN2UoaSxhLGYpe3ZhciBwPVgxLmV4ZWMoYS5zbGljZShmLGYrMykpO3JldHVybiBwPyhpLkw9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbzdlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZixmKzYpKTtyZXR1cm4gcD8oaS5MPU1hdGguZmxvb3IocFswXS8xZTMpLGYrcFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGM3ZShpLGEsZil7dmFyIHA9VUVlLmV4ZWMoYS5zbGljZShmLGYrMSkpO3JldHVybiBwP2YrcFswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gdTdlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZikpO3JldHVybiBwPyhpLlE9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbDdlKGksYSxmKXt2YXIgcD1YMS5leGVjKGEuc2xpY2UoZikpO3JldHVybiBwPyhpLnM9K3BbMF0sZitwWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdUR0KGksYSl7cmV0dXJuIEljKGkuZ2V0RGF0ZSgpLGEsMil9ZnVuY3Rpb24gaDdlKGksYSl7cmV0dXJuIEljKGkuZ2V0SG91cnMoKSxhLDIpfWZ1bmN0aW9uIGY3ZShpLGEpe3JldHVybiBJYyhpLmdldEhvdXJzKCklMTJ8fDEyLGEsMil9ZnVuY3Rpb24gZDdlKGksYSl7cmV0dXJuIEljKDErWjcuY291bnQoazUoaSksaSksYSwzKX1mdW5jdGlvbiBsRHQoaSxhKXtyZXR1cm4gSWMoaS5nZXRNaWxsaXNlY29uZHMoKSxhLDMpfWZ1bmN0aW9uIGc3ZShpLGEpe3JldHVybiBsRHQoaSxhKSsiMDAwIn1mdW5jdGlvbiBwN2UoaSxhKXtyZXR1cm4gSWMoaS5nZXRNb250aCgpKzEsYSwyKX1mdW5jdGlvbiBiN2UoaSxhKXtyZXR1cm4gSWMoaS5nZXRNaW51dGVzKCksYSwyKX1mdW5jdGlvbiB3N2UoaSxhKXtyZXR1cm4gSWMoaS5nZXRTZWNvbmRzKCksYSwyKX1mdW5jdGlvbiB2N2UoaSl7dmFyIGE9aS5nZXREYXkoKTtyZXR1cm4gYT09PTA/NzphfWZ1bmN0aW9uIG03ZShpLGEpe3JldHVybiBJYyhOUC5jb3VudChrNShpKS0xLGkpLGEsMil9ZnVuY3Rpb24gaER0KGkpe3ZhciBhPWkuZ2V0RGF5KCk7cmV0dXJuIGE+PTR8fGE9PT0wP3RUKGkpOnRULmNlaWwoaSl9ZnVuY3Rpb24geTdlKGksYSl7cmV0dXJuIGk9aER0KGkpLEljKHRULmNvdW50KGs1KGkpLGkpKyhrNShpKS5nZXREYXkoKT09PTQpLGEsMil9ZnVuY3Rpb24geDdlKGkpe3JldHVybiBpLmdldERheSgpfWZ1bmN0aW9uIGs3ZShpLGEpe3JldHVybiBJYyhCUC5jb3VudChrNShpKS0xLGkpLGEsMil9ZnVuY3Rpb24gRTdlKGksYSl7cmV0dXJuIEljKGkuZ2V0RnVsbFllYXIoKSUxMDAsYSwyKX1mdW5jdGlvbiBUN2UoaSxhKXtyZXR1cm4gaT1oRHQoaSksSWMoaS5nZXRGdWxsWWVhcigpJTEwMCxhLDIpfWZ1bmN0aW9uIEM3ZShpLGEpe3JldHVybiBJYyhpLmdldEZ1bGxZZWFyKCklMWU0LGEsNCl9ZnVuY3Rpb24gXzdlKGksYSl7dmFyIGY9aS5nZXREYXkoKTtyZXR1cm4gaT1mPj00fHxmPT09MD90VChpKTp0VC5jZWlsKGkpLEljKGkuZ2V0RnVsbFllYXIoKSUxZTQsYSw0KX1mdW5jdGlvbiBTN2UoaSl7dmFyIGE9aS5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihhPjA/Ii0iOihhKj0tMSwiKyIpKStJYyhhLzYwfDAsIjAiLDIpK0ljKGElNjAsIjAiLDIpfWZ1bmN0aW9uIGZEdChpLGEpe3JldHVybiBJYyhpLmdldFVUQ0RhdGUoKSxhLDIpfWZ1bmN0aW9uIEE3ZShpLGEpe3JldHVybiBJYyhpLmdldFVUQ0hvdXJzKCksYSwyKX1mdW5jdGlvbiBMN2UoaSxhKXtyZXR1cm4gSWMoaS5nZXRVVENIb3VycygpJTEyfHwxMixhLDIpfWZ1bmN0aW9uIE03ZShpLGEpe3JldHVybiBJYygxK08xdC5jb3VudChuVChpKSxpKSxhLDMpfWZ1bmN0aW9uIGREdChpLGEpe3JldHVybiBJYyhpLmdldFVUQ01pbGxpc2Vjb25kcygpLGEsMyl9ZnVuY3Rpb24gRDdlKGksYSl7cmV0dXJuIGREdChpLGEpKyIwMDAifWZ1bmN0aW9uIEk3ZShpLGEpe3JldHVybiBJYyhpLmdldFVUQ01vbnRoKCkrMSxhLDIpfWZ1bmN0aW9uIE83ZShpLGEpe3JldHVybiBJYyhpLmdldFVUQ01pbnV0ZXMoKSxhLDIpfWZ1bmN0aW9uIFA3ZShpLGEpe3JldHVybiBJYyhpLmdldFVUQ1NlY29uZHMoKSxhLDIpfWZ1bmN0aW9uIEY3ZShpKXt2YXIgYT1pLmdldFVUQ0RheSgpO3JldHVybiBhPT09MD83OmF9ZnVuY3Rpb24gTjdlKGksYSl7cmV0dXJuIEljKHJEdC5jb3VudChuVChpKS0xLGkpLGEsMil9ZnVuY3Rpb24gZ0R0KGkpe3ZhciBhPWkuZ2V0VVRDRGF5KCk7cmV0dXJuIGE+PTR8fGE9PT0wP01BKGkpOk1BLmNlaWwoaSl9ZnVuY3Rpb24gQjdlKGksYSl7cmV0dXJuIGk9Z0R0KGkpLEljKE1BLmNvdW50KG5UKGkpLGkpKyhuVChpKS5nZXRVVENEYXkoKT09PTQpLGEsMil9ZnVuY3Rpb24gUjdlKGkpe3JldHVybiBpLmdldFVUQ0RheSgpfWZ1bmN0aW9uIGo3ZShpLGEpe3JldHVybiBJYyhRVS5jb3VudChuVChpKS0xLGkpLGEsMil9ZnVuY3Rpb24gJDdlKGksYSl7cmV0dXJuIEljKGkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsYSwyKX1mdW5jdGlvbiB6N2UoaSxhKXtyZXR1cm4gaT1nRHQoaSksSWMoaS5nZXRVVENGdWxsWWVhcigpJTEwMCxhLDIpfWZ1bmN0aW9uIHE3ZShpLGEpe3JldHVybiBJYyhpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGEsNCl9ZnVuY3Rpb24gSDdlKGksYSl7dmFyIGY9aS5nZXRVVENEYXkoKTtyZXR1cm4gaT1mPj00fHxmPT09MD9NQShpKTpNQS5jZWlsKGkpLEljKGkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsYSw0KX1mdW5jdGlvbiBWN2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIHBEdCgpe3JldHVybiIlIn1mdW5jdGlvbiBiRHQoaSl7cmV0dXJuK2l9ZnVuY3Rpb24gd0R0KGkpe3JldHVybiBNYXRoLmZsb29yKCtpLzFlMyl9dmFyIERBLFpVO0c3ZSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2Z1bmN0aW9uIEc3ZShpKXtyZXR1cm4gREE9R0VlKGkpLFpVPURBLmZvcm1hdCxEQS5wYXJzZSxEQS51dGNGb3JtYXQsREEudXRjUGFyc2UsREF9ZnVuY3Rpb24gVTdlKGkpe3JldHVybiBuZXcgRGF0ZShpKX1mdW5jdGlvbiBXN2UoaSl7cmV0dXJuIGkgaW5zdGFuY2VvZiBEYXRlPytpOituZXcgRGF0ZSgraSl9ZnVuY3Rpb24gdkR0KGksYSxmLHAsdyxtLGIsRSxfLEEpe3ZhciBJPVFNdCgpLEI9SS5pbnZlcnQsTj1JLmRvbWFpbixSPUEoIi4lTCIpLHo9QSgiOiVTIiksVz1BKCIlSTolTSIpLGV0PUEoIiVJICVwIiksc3Q9QSgiJWEgJWQiKSxhdD1BKCIlYiAlZCIpLGJ0PUEoIiVCIiksbXQ9QSgiJVkiKTtmdW5jdGlvbiB5dChmdCl7cmV0dXJuKF8oZnQpPGZ0P1I6RShmdCk8ZnQ/ejpiKGZ0KTxmdD9XOm0oZnQpPGZ0P2V0OnAoZnQpPGZ0P3coZnQpPGZ0P3N0OmF0OmYoZnQpPGZ0P2J0Om10KShmdCl9cmV0dXJuIEkuaW52ZXJ0PWZ1bmN0aW9uKGZ0KXtyZXR1cm4gbmV3IERhdGUoQihmdCkpfSxJLmRvbWFpbj1mdW5jdGlvbihmdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/TihBcnJheS5mcm9tKGZ0LFc3ZSkpOk4oKS5tYXAoVTdlKX0sSS50aWNrcz1mdW5jdGlvbihmdCl7dmFyIHV0PU4oKTtyZXR1cm4gaSh1dFswXSx1dFt1dC5sZW5ndGgtMV0sZnQ/PzEwKX0sSS50aWNrRm9ybWF0PWZ1bmN0aW9uKGZ0LHV0KXtyZXR1cm4gdXQ9PW51bGw/eXQ6QSh1dCl9LEkubmljZT1mdW5jdGlvbihmdCl7dmFyIHV0PU4oKTtyZXR1cm4oIWZ0fHx0eXBlb2YgZnQucmFuZ2UhPSJmdW5jdGlvbiIpJiYoZnQ9YSh1dFswXSx1dFt1dC5sZW5ndGgtMV0sZnQ/PzEwKSksZnQ/TihCRWUodXQsZnQpKTpJfSxJLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWE10KEksdkR0KGksYSxmLHAsdyxtLGIsRSxfLEEpKX0sSX1mdW5jdGlvbiBZN2UoKXtyZXR1cm4gS1UuYXBwbHkodkR0KEhFZSxWRWUsazUsUlAsTlAsWjcsRlAsUFAsc2ssWlUpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEs3ZShpKXtmb3IodmFyIGE9aS5sZW5ndGgvNnwwLGY9bmV3IEFycmF5KGEpLHA9MDtwPGE7KWZbcF09IiMiK2kuc2xpY2UocCo2LCsrcCo2KTtyZXR1cm4gZn1jb25zdCBYN2U9SzdlKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKTtmdW5jdGlvbiBRaChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19Y29uc3QgbUR0PU1hdGguYWJzLG0wPU1hdGguYXRhbjIsclQ9TWF0aC5jb3MsUTdlPU1hdGgubWF4LE4xdD1NYXRoLm1pbixoMz1NYXRoLnNpbixJQT1NYXRoLnNxcnQseTA9MWUtMTIscVA9TWF0aC5QSSxKVT1xUC8yLHRXPTIqcVA7ZnVuY3Rpb24gWjdlKGkpe3JldHVybiBpPjE/MDppPC0xP3FQOk1hdGguYWNvcyhpKX1mdW5jdGlvbiB5RHQoaSl7cmV0dXJuIGk+PTE/SlU6aTw9LTE/LUpVOk1hdGguYXNpbihpKX1mdW5jdGlvbiB4RHQoaSl7bGV0IGE9MztyZXR1cm4gaS5kaWdpdHM9ZnVuY3Rpb24oZil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGE7aWYoZj09bnVsbClhPW51bGw7ZWxzZXtjb25zdCBwPU1hdGguZmxvb3IoZik7aWYoIShwPj0wKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7Zn1gKTthPXB9cmV0dXJuIGl9LCgpPT5uZXcgZEVlKGEpfWZ1bmN0aW9uIEo3ZShpKXtyZXR1cm4gaS5pbm5lclJhZGl1c31mdW5jdGlvbiB0VGUoaSl7cmV0dXJuIGkub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gZVRlKGkpe3JldHVybiBpLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gblRlKGkpe3JldHVybiBpLmVuZEFuZ2xlfWZ1bmN0aW9uIHJUZShpKXtyZXR1cm4gaSYmaS5wYWRBbmdsZX1mdW5jdGlvbiBpVGUoaSxhLGYscCx3LG0sYixFKXt2YXIgXz1mLWksQT1wLWEsST1iLXcsQj1FLW0sTj1CKl8tSSpBO2lmKCEoTipOPHkwKSlyZXR1cm4gTj0oSSooYS1tKS1CKihpLXcpKS9OLFtpK04qXyxhK04qQV19ZnVuY3Rpb24gZVcoaSxhLGYscCx3LG0sYil7dmFyIEU9aS1mLF89YS1wLEE9KGI/bTotbSkvSUEoRSpFK18qXyksST1BKl8sQj0tQSpFLE49aStJLFI9YStCLHo9ZitJLFc9cCtCLGV0PShOK3opLzIsc3Q9KFIrVykvMixhdD16LU4sYnQ9Vy1SLG10PWF0KmF0K2J0KmJ0LHl0PXctbSxmdD1OKlcteipSLHV0PShidDwwPy0xOjEpKklBKFE3ZSgwLHl0Knl0Km10LWZ0KmZ0KSksdnQ9KGZ0KmJ0LWF0KnV0KS9tdCxYPSgtZnQqYXQtYnQqdXQpL210LHB0PShmdCpidCthdCp1dCkvbXQsVT0oLWZ0KmF0K2J0KnV0KS9tdCxUdD12dC1ldCxudD1YLXN0LEl0PXB0LWV0LE90PVUtc3Q7cmV0dXJuIFR0KlR0K250Km50Pkl0Kkl0K090Kk90JiYodnQ9cHQsWD1VKSx7Y3g6dnQsY3k6WCx4MDE6LUkseTAxOi1CLHgxMTp2dCoody95dC0xKSx5MTE6WCoody95dC0xKX19ZnVuY3Rpb24gT0EoKXt2YXIgaT1KN2UsYT10VGUsZj1RaCgwKSxwPW51bGwsdz1lVGUsbT1uVGUsYj1yVGUsRT1udWxsLF89eER0KEEpO2Z1bmN0aW9uIEEoKXt2YXIgSSxCLE49K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpLFI9K2EuYXBwbHkodGhpcyxhcmd1bWVudHMpLHo9dy5hcHBseSh0aGlzLGFyZ3VtZW50cyktSlUsVz1tLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1KVSxldD1tRHQoVy16KSxzdD1XPno7aWYoRXx8KEU9ST1fKCkpLFI8TiYmKEI9UixSPU4sTj1CKSwhKFI+eTApKUUubW92ZVRvKDAsMCk7ZWxzZSBpZihldD50Vy15MClFLm1vdmVUbyhSKnJUKHopLFIqaDMoeikpLEUuYXJjKDAsMCxSLHosVywhc3QpLE4+eTAmJihFLm1vdmVUbyhOKnJUKFcpLE4qaDMoVykpLEUuYXJjKDAsMCxOLFcseixzdCkpO2Vsc2V7dmFyIGF0PXosYnQ9VyxtdD16LHl0PVcsZnQ9ZXQsdXQ9ZXQsdnQ9Yi5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixYPXZ0PnkwJiYocD8rcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6SUEoTipOK1IqUikpLHB0PU4xdChtRHQoUi1OKS8yLCtmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksVT1wdCxUdD1wdCxudCxJdDtpZihYPnkwKXt2YXIgT3Q9eUR0KFgvTipoMyh2dCkpLEJ0PXlEdChYL1IqaDModnQpKTsoZnQtPU90KjIpPnkwPyhPdCo9c3Q/MTotMSxtdCs9T3QseXQtPU90KTooZnQ9MCxtdD15dD0oeitXKS8yKSwodXQtPUJ0KjIpPnkwPyhCdCo9c3Q/MTotMSxhdCs9QnQsYnQtPUJ0KToodXQ9MCxhdD1idD0oeitXKS8yKX12YXIgRXQ9UipyVChhdCksWj1SKmgzKGF0KSxDdD1OKnJUKHl0KSx4dD1OKmgzKHl0KTtpZihwdD55MCl7dmFyIEh0PVIqclQoYnQpLExlPVIqaDMoYnQpLEZ0PU4qclQobXQpLGduPU4qaDMobXQpLFNlO2lmKGV0PHFQKWlmKFNlPWlUZShFdCxaLEZ0LGduLEh0LExlLEN0LHh0KSl7dmFyIG1lPUV0LVNlWzBdLFZlPVotU2VbMV0sWWU9SHQtU2VbMF0sY2U9TGUtU2VbMV0sa2U9MS9oMyhaN2UoKG1lKlllK1ZlKmNlKS8oSUEobWUqbWUrVmUqVmUpKklBKFllKlllK2NlKmNlKSkpLzIpLHp0PUlBKFNlWzBdKlNlWzBdK1NlWzFdKlNlWzFdKTtVPU4xdChwdCwoTi16dCkvKGtlLTEpKSxUdD1OMXQocHQsKFItenQpLyhrZSsxKSl9ZWxzZSBVPVR0PTB9dXQ+eTA/VHQ+eTA/KG50PWVXKEZ0LGduLEV0LFosUixUdCxzdCksSXQ9ZVcoSHQsTGUsQ3QseHQsUixUdCxzdCksRS5tb3ZlVG8obnQuY3grbnQueDAxLG50LmN5K250LnkwMSksVHQ8cHQ/RS5hcmMobnQuY3gsbnQuY3ksVHQsbTAobnQueTAxLG50LngwMSksbTAoSXQueTAxLEl0LngwMSksIXN0KTooRS5hcmMobnQuY3gsbnQuY3ksVHQsbTAobnQueTAxLG50LngwMSksbTAobnQueTExLG50LngxMSksIXN0KSxFLmFyYygwLDAsUixtMChudC5jeStudC55MTEsbnQuY3grbnQueDExKSxtMChJdC5jeStJdC55MTEsSXQuY3grSXQueDExKSwhc3QpLEUuYXJjKEl0LmN4LEl0LmN5LFR0LG0wKEl0LnkxMSxJdC54MTEpLG0wKEl0LnkwMSxJdC54MDEpLCFzdCkpKTooRS5tb3ZlVG8oRXQsWiksRS5hcmMoMCwwLFIsYXQsYnQsIXN0KSk6RS5tb3ZlVG8oRXQsWiksIShOPnkwKXx8IShmdD55MCk/RS5saW5lVG8oQ3QseHQpOlU+eTA/KG50PWVXKEN0LHh0LEh0LExlLE4sLVUsc3QpLEl0PWVXKEV0LFosRnQsZ24sTiwtVSxzdCksRS5saW5lVG8obnQuY3grbnQueDAxLG50LmN5K250LnkwMSksVTxwdD9FLmFyYyhudC5jeCxudC5jeSxVLG0wKG50LnkwMSxudC54MDEpLG0wKEl0LnkwMSxJdC54MDEpLCFzdCk6KEUuYXJjKG50LmN4LG50LmN5LFUsbTAobnQueTAxLG50LngwMSksbTAobnQueTExLG50LngxMSksIXN0KSxFLmFyYygwLDAsTixtMChudC5jeStudC55MTEsbnQuY3grbnQueDExKSxtMChJdC5jeStJdC55MTEsSXQuY3grSXQueDExKSxzdCksRS5hcmMoSXQuY3gsSXQuY3ksVSxtMChJdC55MTEsSXQueDExKSxtMChJdC55MDEsSXQueDAxKSwhc3QpKSk6RS5hcmMoMCwwLE4seXQsbXQsc3QpfWlmKEUuY2xvc2VQYXRoKCksSSlyZXR1cm4gRT1udWxsLEkrIiJ8fG51bGx9cmV0dXJuIEEuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgST0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsQj0oK3cuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArbS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItcVAvMjtyZXR1cm5bclQoQikqSSxoMyhCKSpJXX0sQS5pbm5lclJhZGl1cz1mdW5jdGlvbihJKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgST09ImZ1bmN0aW9uIj9JOlFoKCtJKSxBKTppfSxBLm91dGVyUmFkaXVzPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBJPT0iZnVuY3Rpb24iP0k6UWgoK0kpLEEpOmF9LEEuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXR5cGVvZiBJPT0iZnVuY3Rpb24iP0k6UWgoK0kpLEEpOmZ9LEEucGFkUmFkaXVzPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPUk9PW51bGw/bnVsbDp0eXBlb2YgST09ImZ1bmN0aW9uIj9JOlFoKCtJKSxBKTpwfSxBLnN0YXJ0QW5nbGU9ZnVuY3Rpb24oSSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dHlwZW9mIEk9PSJmdW5jdGlvbiI/STpRaCgrSSksQSk6d30sQS5lbmRBbmdsZT1mdW5jdGlvbihJKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10eXBlb2YgST09ImZ1bmN0aW9uIj9JOlFoKCtJKSxBKTptfSxBLnBhZEFuZ2xlPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXR5cGVvZiBJPT0iZnVuY3Rpb24iP0k6UWgoK0kpLEEpOmJ9LEEuY29udGV4dD1mdW5jdGlvbihJKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT1JPz9udWxsLEEpOkV9LEF9ZnVuY3Rpb24ga0R0KGkpe3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJiJsZW5ndGgiaW4gaT9pOkFycmF5LmZyb20oaSl9ZnVuY3Rpb24gRUR0KGkpe3RoaXMuX2NvbnRleHQ9aX1FRHQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtzd2l0Y2goaT0raSxhPSthLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGksYSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxhKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKGksYSk7YnJlYWt9fX07ZnVuY3Rpb24gY2coaSl7cmV0dXJuIG5ldyBFRHQoaSl9ZnVuY3Rpb24gc1RlKGkpe3JldHVybiBpWzBdfWZ1bmN0aW9uIGFUZShpKXtyZXR1cm4gaVsxXX1mdW5jdGlvbiBFNShpLGEpe3ZhciBmPVFoKCEwKSxwPW51bGwsdz1jZyxtPW51bGwsYj14RHQoRSk7aT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmk9PT12b2lkIDA/c1RlOlFoKGkpLGE9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTphPT09dm9pZCAwP2FUZTpRaChhKTtmdW5jdGlvbiBFKF8pe3ZhciBBLEk9KF89a0R0KF8pKS5sZW5ndGgsQixOPSExLFI7Zm9yKHA9PW51bGwmJihtPXcoUj1iKCkpKSxBPTA7QTw9STsrK0EpIShBPEkmJmYoQj1fW0FdLEEsXykpPT09TiYmKChOPSFOKT9tLmxpbmVTdGFydCgpOm0ubGluZUVuZCgpKSxOJiZtLnBvaW50KCtpKEIsQSxfKSwrYShCLEEsXykpO2lmKFIpcmV0dXJuIG09bnVsbCxSKyIifHxudWxsfXJldHVybiBFLng9ZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIF89PSJmdW5jdGlvbiI/XzpRaCgrXyksRSk6aX0sRS55PWZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBfPT0iZnVuY3Rpb24iP186UWgoK18pLEUpOmF9LEUuZGVmaW5lZD1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOlFoKCEhXyksRSk6Zn0sRS5jdXJ2ZT1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1fLHAhPW51bGwmJihtPXcocCkpLEUpOnd9LEUuY29udGV4dD1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz09bnVsbD9wPW09bnVsbDptPXcocD1fKSxFKTpwfSxFfWZ1bmN0aW9uIG9UZShpLGEpe3JldHVybiBhPGk/LTE6YT5pPzE6YT49aT8wOk5hTn1mdW5jdGlvbiBjVGUoaSl7cmV0dXJuIGl9ZnVuY3Rpb24gdVRlKCl7dmFyIGk9Y1RlLGE9b1RlLGY9bnVsbCxwPVFoKDApLHc9UWgodFcpLG09UWgoMCk7ZnVuY3Rpb24gYihFKXt2YXIgXyxBPShFPWtEdChFKSkubGVuZ3RoLEksQixOPTAsUj1uZXcgQXJyYXkoQSksej1uZXcgQXJyYXkoQSksVz0rcC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZXQ9TWF0aC5taW4odFcsTWF0aC5tYXgoLXRXLHcuYXBwbHkodGhpcyxhcmd1bWVudHMpLVcpKSxzdCxhdD1NYXRoLm1pbihNYXRoLmFicyhldCkvQSxtLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYnQ9YXQqKGV0PDA/LTE6MSksbXQ7Zm9yKF89MDtfPEE7KytfKShtdD16W1JbX109X109K2koRVtfXSxfLEUpKT4wJiYoTis9bXQpO2ZvcihhIT1udWxsP1Iuc29ydChmdW5jdGlvbih5dCxmdCl7cmV0dXJuIGEoelt5dF0seltmdF0pfSk6ZiE9bnVsbCYmUi5zb3J0KGZ1bmN0aW9uKHl0LGZ0KXtyZXR1cm4gZihFW3l0XSxFW2Z0XSl9KSxfPTAsQj1OPyhldC1BKmJ0KS9OOjA7XzxBOysrXyxXPXN0KUk9UltfXSxtdD16W0ldLHN0PVcrKG10PjA/bXQqQjowKStidCx6W0ldPXtkYXRhOkVbSV0saW5kZXg6Xyx2YWx1ZTptdCxzdGFydEFuZ2xlOlcsZW5kQW5nbGU6c3QscGFkQW5nbGU6YXR9O3JldHVybiB6fXJldHVybiBiLnZhbHVlPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6UWgoK0UpLGIpOml9LGIuc29ydFZhbHVlcz1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1FLGY9bnVsbCxiKTphfSxiLnNvcnQ9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9RSxhPW51bGwsYik6Zn0sYi5zdGFydEFuZ2xlPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6UWgoK0UpLGIpOnB9LGIuZW5kQW5nbGU9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dHlwZW9mIEU9PSJmdW5jdGlvbiI/RTpRaCgrRSksYik6d30sYi5wYWRBbmdsZT1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10eXBlb2YgRT09ImZ1bmN0aW9uIj9FOlFoKCtFKSxiKTptfSxifWNsYXNzIFREdHtjb25zdHJ1Y3RvcihhLGYpe3RoaXMuX2NvbnRleHQ9YSx0aGlzLl94PWZ9YXJlYVN0YXJ0KCl7dGhpcy5fbGluZT0wfWFyZWFFbmQoKXt0aGlzLl9saW5lPU5hTn1saW5lU3RhcnQoKXt0aGlzLl9wb2ludD0wfWxpbmVFbmQoKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9cG9pbnQoYSxmKXtzd2l0Y2goYT0rYSxmPStmLHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhhLGYpOnRoaXMuX2NvbnRleHQubW92ZVRvKGEsZik7YnJlYWt9Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7dGhpcy5feD90aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDA9KHRoaXMuX3gwK2EpLzIsdGhpcy5feTAsdGhpcy5feDAsZixhLGYpOnRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MCx0aGlzLl95MD0odGhpcy5feTArZikvMixhLHRoaXMuX3kwLGEsZik7YnJlYWt9fXRoaXMuX3gwPWEsdGhpcy5feTA9Zn19ZnVuY3Rpb24gbFRlKGkpe3JldHVybiBuZXcgVER0KGksITApfWZ1bmN0aW9uIGhUZShpKXtyZXR1cm4gbmV3IFREdChpLCExKX1mdW5jdGlvbiBhaygpe31mdW5jdGlvbiBuVyhpLGEsZil7aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmkuX3gwK2kuX3gxKS8zLCgyKmkuX3kwK2kuX3kxKS8zLChpLl94MCsyKmkuX3gxKS8zLChpLl95MCsyKmkuX3kxKS8zLChpLl94MCs0KmkuX3gxK2EpLzYsKGkuX3kwKzQqaS5feTErZikvNil9ZnVuY3Rpb24gclcoaSl7dGhpcy5fY29udGV4dD1pfXJXLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6blcodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpOnRoaXMuX2NvbnRleHQubW92ZVRvKGksYSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6blcodGhpcyxpLGEpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9YX19O2Z1bmN0aW9uIEhQKGkpe3JldHVybiBuZXcgclcoaSl9ZnVuY3Rpb24gQ0R0KGkpe3RoaXMuX2NvbnRleHQ9aX1DRHQucHJvdG90eXBlPXthcmVhU3RhcnQ6YWssYXJlYUVuZDphayxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9aSx0aGlzLl95Mj1hO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWksdGhpcy5feTM9YTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1pLHRoaXMuX3k0PWEsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNiwodGhpcy5feTArNCp0aGlzLl95MSthKS82KTticmVhaztkZWZhdWx0Om5XKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWF9fTtmdW5jdGlvbiBmVGUoaSl7cmV0dXJuIG5ldyBDRHQoaSl9ZnVuY3Rpb24gX0R0KGkpe3RoaXMuX2NvbnRleHQ9aX1fRHQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGksYSl7c3dpdGNoKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIGY9KHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNixwPSh0aGlzLl95MCs0KnRoaXMuX3kxK2EpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhmLHApOnRoaXMuX2NvbnRleHQubW92ZVRvKGYscCk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpuVyh0aGlzLGksYSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1hfX07ZnVuY3Rpb24gZFRlKGkpe3JldHVybiBuZXcgX0R0KGkpfWZ1bmN0aW9uIFNEdChpLGEpe3RoaXMuX2Jhc2lzPW5ldyByVyhpKSx0aGlzLl9iZXRhPWF9U0R0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5feCxhPXRoaXMuX3ksZj1pLmxlbmd0aC0xO2lmKGY+MClmb3IodmFyIHA9aVswXSx3PWFbMF0sbT1pW2ZdLXAsYj1hW2ZdLXcsRT0tMSxfOysrRTw9ZjspXz1FL2YsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSppW0VdKygxLXRoaXMuX2JldGEpKihwK18qbSksdGhpcy5fYmV0YSphW0VdKygxLXRoaXMuX2JldGEpKih3K18qYikpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXt0aGlzLl94LnB1c2goK2kpLHRoaXMuX3kucHVzaCgrYSl9fTtjb25zdCBnVGU9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBhPT09MT9uZXcgclcocCk6bmV3IFNEdChwLGEpfXJldHVybiBmLmJldGE9ZnVuY3Rpb24ocCl7cmV0dXJuIGkoK3ApfSxmfSguODUpO2Z1bmN0aW9uIGlXKGksYSxmKXtpLl9jb250ZXh0LmJlemllckN1cnZlVG8oaS5feDEraS5fayooaS5feDItaS5feDApLGkuX3kxK2kuX2sqKGkuX3kyLWkuX3kwKSxpLl94MitpLl9rKihpLl94MS1hKSxpLl95MitpLl9rKihpLl95MS1mKSxpLl94MixpLl95Mil9ZnVuY3Rpb24gQjF0KGksYSl7dGhpcy5fY29udGV4dD1pLHRoaXMuX2s9KDEtYSkvNn1CMXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOmlXKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtzd2l0Y2goaT0raSxhPSthLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGksYSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxhKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT1pLHRoaXMuX3kxPWE7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDppVyh0aGlzLGksYSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1hfX07Y29uc3QgcFRlPWZ1bmN0aW9uIGkoYSl7ZnVuY3Rpb24gZihwKXtyZXR1cm4gbmV3IEIxdChwLGEpfXJldHVybiBmLnRlbnNpb249ZnVuY3Rpb24ocCl7cmV0dXJuIGkoK3ApfSxmfSgwKTtmdW5jdGlvbiBSMXQoaSxhKXt0aGlzLl9jb250ZXh0PWksdGhpcy5faz0oMS1hKS82fVIxdC5wcm90b3R5cGU9e2FyZWFTdGFydDphayxhcmVhRW5kOmFrLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihpLGEpe3N3aXRjaChpPStpLGE9K2EsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWksdGhpcy5feTM9YTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1pLHRoaXMuX3k0PWEpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWksdGhpcy5feTU9YTticmVhaztkZWZhdWx0OmlXKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWF9fTtjb25zdCBiVGU9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBuZXcgUjF0KHAsYSl9cmV0dXJuIGYudGVuc2lvbj1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KDApO2Z1bmN0aW9uIGoxdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9rPSgxLWEpLzZ9ajF0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLGEpe3N3aXRjaChpPStpLGE9K2EsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmlXKHRoaXMsaSxhKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWF9fTtjb25zdCB3VGU9ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBmKHApe3JldHVybiBuZXcgajF0KHAsYSl9cmV0dXJuIGYudGVuc2lvbj1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KDApO2Z1bmN0aW9uICQxdChpLGEsZil7dmFyIHA9aS5feDEsdz1pLl95MSxtPWkuX3gyLGI9aS5feTI7aWYoaS5fbDAxX2E+eTApe3ZhciBFPTIqaS5fbDAxXzJhKzMqaS5fbDAxX2EqaS5fbDEyX2EraS5fbDEyXzJhLF89MyppLl9sMDFfYSooaS5fbDAxX2EraS5fbDEyX2EpO3A9KHAqRS1pLl94MCppLl9sMTJfMmEraS5feDIqaS5fbDAxXzJhKS9fLHc9KHcqRS1pLl95MCppLl9sMTJfMmEraS5feTIqaS5fbDAxXzJhKS9ffWlmKGkuX2wyM19hPnkwKXt2YXIgQT0yKmkuX2wyM18yYSszKmkuX2wyM19hKmkuX2wxMl9hK2kuX2wxMl8yYSxJPTMqaS5fbDIzX2EqKGkuX2wyM19hK2kuX2wxMl9hKTttPShtKkEraS5feDEqaS5fbDIzXzJhLWEqaS5fbDEyXzJhKS9JLGI9KGIqQStpLl95MSppLl9sMjNfMmEtZippLl9sMTJfMmEpL0l9aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHAsdyxtLGIsaS5feDIsaS5feTIpfWZ1bmN0aW9uIEFEdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1hfUFEdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLGEpe2lmKGk9K2ksYT0rYSx0aGlzLl9wb2ludCl7dmFyIGY9dGhpcy5feDItaSxwPXRoaXMuX3kyLWE7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhmKmYrcCpwLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGksYSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxhKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OiQxdCh0aGlzLGksYSk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9YX19O2NvbnN0IHZUZT1mdW5jdGlvbiBpKGEpe2Z1bmN0aW9uIGYocCl7cmV0dXJuIGE/bmV3IEFEdChwLGEpOm5ldyBCMXQocCwwKX1yZXR1cm4gZi5hbHBoYT1mdW5jdGlvbihwKXtyZXR1cm4gaSgrcCl9LGZ9KC41KTtmdW5jdGlvbiBMRHQoaSxhKXt0aGlzLl9jb250ZXh0PWksdGhpcy5fYWxwaGE9YX1MRHQucHJvdG90eXBlPXthcmVhU3RhcnQ6YWssYXJlYUVuZDphayxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtpZihpPStpLGE9K2EsdGhpcy5fcG9pbnQpe3ZhciBmPXRoaXMuX3gyLWkscD10aGlzLl95Mi1hO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZipmK3AqcCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9aSx0aGlzLl95Mz1hO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PWksdGhpcy5feTQ9YSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9aSx0aGlzLl95NT1hO2JyZWFrO2RlZmF1bHQ6JDF0KHRoaXMsaSxhKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1hfX07Y29uc3QgbVRlPWZ1bmN0aW9uIGkoYSl7ZnVuY3Rpb24gZihwKXtyZXR1cm4gYT9uZXcgTER0KHAsYSk6bmV3IFIxdChwLDApfXJldHVybiBmLmFscGhhPWZ1bmN0aW9uKHApe3JldHVybiBpKCtwKX0sZn0oLjUpO2Z1bmN0aW9uIE1EdChpLGEpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1hfU1EdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXtpZihpPStpLGE9K2EsdGhpcy5fcG9pbnQpe3ZhciBmPXRoaXMuX3gyLWkscD10aGlzLl95Mi1hO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZipmK3AqcCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6JDF0KHRoaXMsaSxhKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1hfX07Y29uc3QgeVRlPWZ1bmN0aW9uIGkoYSl7ZnVuY3Rpb24gZihwKXtyZXR1cm4gYT9uZXcgTUR0KHAsYSk6bmV3IGoxdChwLDApfXJldHVybiBmLmFscGhhPWZ1bmN0aW9uKHApe3JldHVybiBpKCtwKX0sZn0oLjUpO2Z1bmN0aW9uIEREdChpKXt0aGlzLl9jb250ZXh0PWl9RER0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmFrLGFyZWFFbmQ6YWssbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihpLGEpe2k9K2ksYT0rYSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGksYSkpfX07ZnVuY3Rpb24geFRlKGkpe3JldHVybiBuZXcgRER0KGkpfWZ1bmN0aW9uIElEdChpKXtyZXR1cm4gaTwwPy0xOjF9ZnVuY3Rpb24gT0R0KGksYSxmKXt2YXIgcD1pLl94MS1pLl94MCx3PWEtaS5feDEsbT0oaS5feTEtaS5feTApLyhwfHx3PDAmJi0wKSxiPShmLWkuX3kxKS8od3x8cDwwJiYtMCksRT0obSp3K2IqcCkvKHArdyk7cmV0dXJuKElEdChtKStJRHQoYikpKk1hdGgubWluKE1hdGguYWJzKG0pLE1hdGguYWJzKGIpLC41Kk1hdGguYWJzKEUpKXx8MH1mdW5jdGlvbiBQRHQoaSxhKXt2YXIgZj1pLl94MS1pLl94MDtyZXR1cm4gZj8oMyooaS5feTEtaS5feTApL2YtYSkvMjphfWZ1bmN0aW9uIHoxdChpLGEsZil7dmFyIHA9aS5feDAsdz1pLl95MCxtPWkuX3gxLGI9aS5feTEsRT0obS1wKS8zO2kuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhwK0UsdytFKmEsbS1FLGItRSpmLG0sYil9ZnVuY3Rpb24gc1coaSl7dGhpcy5fY29udGV4dD1pfXNXLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzp6MXQodGhpcyx0aGlzLl90MCxQRHQodGhpcyx0aGlzLl90MCkpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxhKXt2YXIgZj1OYU47aWYoaT0raSxhPSthLCEoaT09PXRoaXMuX3gxJiZhPT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxhKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLGEpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHoxdCh0aGlzLFBEdCh0aGlzLGY9T0R0KHRoaXMsaSxhKSksZik7YnJlYWs7ZGVmYXVsdDp6MXQodGhpcyx0aGlzLl90MCxmPU9EdCh0aGlzLGksYSkpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9YSx0aGlzLl90MD1mfX19O2Z1bmN0aW9uIEZEdChpKXt0aGlzLl9jb250ZXh0PW5ldyBORHQoaSl9KEZEdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzVy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihpLGEpe3NXLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsYSxpKX07ZnVuY3Rpb24gTkR0KGkpe3RoaXMuX2NvbnRleHQ9aX1ORHQucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhhLGkpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhhLGkpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGksYSxmLHAsdyxtKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oYSxpLHAsZixtLHcpfX07ZnVuY3Rpb24ga1RlKGkpe3JldHVybiBuZXcgc1coaSl9ZnVuY3Rpb24gRVRlKGkpe3JldHVybiBuZXcgRkR0KGkpfWZ1bmN0aW9uIEJEdChpKXt0aGlzLl9jb250ZXh0PWl9QkR0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBpPXRoaXMuX3gsYT10aGlzLl95LGY9aS5sZW5ndGg7aWYoZilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGlbMF0sYVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaVswXSxhWzBdKSxmPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhpWzFdLGFbMV0pO2Vsc2UgZm9yKHZhciBwPVJEdChpKSx3PVJEdChhKSxtPTAsYj0xO2I8ZjsrK20sKytiKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhwWzBdW21dLHdbMF1bbV0scFsxXVttXSx3WzFdW21dLGlbYl0sYVtiXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZmPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGksYSl7dGhpcy5feC5wdXNoKCtpKSx0aGlzLl95LnB1c2goK2EpfX07ZnVuY3Rpb24gUkR0KGkpe3ZhciBhLGY9aS5sZW5ndGgtMSxwLHc9bmV3IEFycmF5KGYpLG09bmV3IEFycmF5KGYpLGI9bmV3IEFycmF5KGYpO2Zvcih3WzBdPTAsbVswXT0yLGJbMF09aVswXSsyKmlbMV0sYT0xO2E8Zi0xOysrYSl3W2FdPTEsbVthXT00LGJbYV09NCppW2FdKzIqaVthKzFdO2Zvcih3W2YtMV09MixtW2YtMV09NyxiW2YtMV09OCppW2YtMV0raVtmXSxhPTE7YTxmOysrYSlwPXdbYV0vbVthLTFdLG1bYV0tPXAsYlthXS09cCpiW2EtMV07Zm9yKHdbZi0xXT1iW2YtMV0vbVtmLTFdLGE9Zi0yO2E+PTA7LS1hKXdbYV09KGJbYV0td1thKzFdKS9tW2FdO2ZvcihtW2YtMV09KGlbZl0rd1tmLTFdKS8yLGE9MDthPGYtMTsrK2EpbVthXT0yKmlbYSsxXS13W2ErMV07cmV0dXJuW3csbV19ZnVuY3Rpb24gVFRlKGkpe3JldHVybiBuZXcgQkR0KGkpfWZ1bmN0aW9uIGFXKGksYSl7dGhpcy5fY29udGV4dD1pLHRoaXMuX3Q9YX1hVy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmdGhpcy5fcG9pbnQ9PT0yJiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbihpLGEpe3N3aXRjaChpPStpLGE9K2EsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxhKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLGEpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6e2lmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxhKSx0aGlzLl9jb250ZXh0LmxpbmVUbyhpLGEpO2Vsc2V7dmFyIGY9dGhpcy5feCooMS10aGlzLl90KStpKnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8oZix0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhmLGEpfWJyZWFrfX10aGlzLl94PWksdGhpcy5feT1hfX07ZnVuY3Rpb24gQ1RlKGkpe3JldHVybiBuZXcgYVcoaSwuNSl9ZnVuY3Rpb24gX1RlKGkpe3JldHVybiBuZXcgYVcoaSwwKX1mdW5jdGlvbiBTVGUoaSl7cmV0dXJuIG5ldyBhVyhpLDEpfWZ1bmN0aW9uIFZQKGksYSxmKXt0aGlzLms9aSx0aGlzLng9YSx0aGlzLnk9Zn1WUC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlZQLHNjYWxlOmZ1bmN0aW9uKGkpe3JldHVybiBpPT09MT90aGlzOm5ldyBWUCh0aGlzLmsqaSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGksYSl7cmV0dXJuIGk9PT0wJmE9PT0wP3RoaXM6bmV3IFZQKHRoaXMuayx0aGlzLngrdGhpcy5rKmksdGhpcy55K3RoaXMuayphKX0sYXBwbHk6ZnVuY3Rpb24oaSl7cmV0dXJuW2lbMF0qdGhpcy5rK3RoaXMueCxpWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oaSl7cmV0dXJuIGkqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGkpe3JldHVybiBpKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihpKXtyZXR1cm5bKGlbMF0tdGhpcy54KS90aGlzLmssKGlbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihpKXtyZXR1cm4gaS5jb3B5KCkuZG9tYWluKGkucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChpLmludmVydCxpKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGkpe3JldHVybiBpLmNvcHkoKS5kb21haW4oaS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGkuaW52ZXJ0LGkpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sVlAucHJvdG90eXBlOy8qISBAbGljZW5zZSBET01QdXJpZnkgMy4wLjUgfCAoYykgQ3VyZTUzIGFuZCBvdGhlciBjb250cmlidXRvcnMgfCBSZWxlYXNlZCB1bmRlciB0aGUgQXBhY2hlIGxpY2Vuc2UgMi4wIGFuZCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDIuMCB8IGdpdGh1Yi5jb20vY3VyZTUzL0RPTVB1cmlmeS9ibG9iLzMuMC41L0xJQ0VOU0UgKi9jb25zdHtlbnRyaWVzOmpEdCxzZXRQcm90b3R5cGVPZjokRHQsaXNGcm96ZW46QVRlLGdldFByb3RvdHlwZU9mOkxUZSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6TVRlfT1PYmplY3Q7bGV0e2ZyZWV6ZTp1ZyxzZWFsOkp2LGNyZWF0ZTpEVGV9PU9iamVjdCx7YXBwbHk6cTF0LGNvbnN0cnVjdDpIMXR9PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdDtxMXR8fChxMXQ9ZnVuY3Rpb24oYSxmLHApe3JldHVybiBhLmFwcGx5KGYscCl9KSx1Z3x8KHVnPWZ1bmN0aW9uKGEpe3JldHVybiBhfSksSnZ8fChKdj1mdW5jdGlvbihhKXtyZXR1cm4gYX0pLEgxdHx8KEgxdD1mdW5jdGlvbihhLGYpe3JldHVybiBuZXcgYSguLi5mKX0pO2NvbnN0IElUZT1KMihBcnJheS5wcm90b3R5cGUuZm9yRWFjaCksekR0PUoyKEFycmF5LnByb3RvdHlwZS5wb3ApLEdQPUoyKEFycmF5LnByb3RvdHlwZS5wdXNoKSxvVz1KMihTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSxWMXQ9SjIoU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyksT1RlPUoyKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLHRtPUoyKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksUFRlPUoyKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiksRlRlPUoyKFN0cmluZy5wcm90b3R5cGUudHJpbSksUGI9SjIoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxVUD1OVGUoVHlwZUVycm9yKTtmdW5jdGlvbiBKMihpKXtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgscD1uZXcgQXJyYXkoZj4xP2YtMTowKSx3PTE7dzxmO3crKylwW3ctMV09YXJndW1lbnRzW3ddO3JldHVybiBxMXQoaSxhLHApfX1mdW5jdGlvbiBOVGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoYSkscD0wO3A8YTtwKyspZltwXT1hcmd1bWVudHNbcF07cmV0dXJuIEgxdChpLGYpfX1mdW5jdGlvbiBtbyhpLGEsZil7dmFyIHA7Zj0ocD1mKSE9PW51bGwmJnAhPT12b2lkIDA/cDpvVywkRHQmJiREdChpLG51bGwpO2xldCB3PWEubGVuZ3RoO2Zvcig7dy0tOyl7bGV0IG09YVt3XTtpZih0eXBlb2YgbT09InN0cmluZyIpe2NvbnN0IGI9ZihtKTtiIT09bSYmKEFUZShhKXx8KGFbd109YiksbT1iKX1pW21dPSEwfXJldHVybiBpfWZ1bmN0aW9uIFBBKGkpe2NvbnN0IGE9RFRlKG51bGwpO2Zvcihjb25zdFtmLHBdb2YgakR0KGkpKWFbZl09cDtyZXR1cm4gYX1mdW5jdGlvbiBjVyhpLGEpe2Zvcig7aSE9PW51bGw7KXtjb25zdCBwPU1UZShpLGEpO2lmKHApe2lmKHAuZ2V0KXJldHVybiBKMihwLmdldCk7aWYodHlwZW9mIHAudmFsdWU9PSJmdW5jdGlvbiIpcmV0dXJuIEoyKHAudmFsdWUpfWk9TFRlKGkpfWZ1bmN0aW9uIGYocCl7cmV0dXJuIGNvbnNvbGUud2FybigiZmFsbGJhY2sgdmFsdWUgZm9yIixwKSxudWxsfXJldHVybiBmfWNvbnN0IHFEdD11ZyhbImEiLCJhYmJyIiwiYWNyb255bSIsImFkZHJlc3MiLCJhcmVhIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYmlnIiwiYmxpbmsiLCJibG9ja3F1b3RlIiwiYm9keSIsImJyIiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNlbnRlciIsImNpdGUiLCJjb2RlIiwiY29sIiwiY29sZ3JvdXAiLCJjb250ZW50IiwiZGF0YSIsImRhdGFsaXN0IiwiZGQiLCJkZWNvcmF0b3IiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImVsZW1lbnQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvbnQiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJtYWluIiwibWFwIiwibWFyayIsIm1hcnF1ZWUiLCJtZW51IiwibWVudWl0ZW0iLCJtZXRlciIsIm5hdiIsIm5vYnIiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwib3V0cHV0IiwicCIsInBpY3R1cmUiLCJwcmUiLCJwcm9ncmVzcyIsInEiLCJycCIsInJ0IiwicnVieSIsInMiLCJzYW1wIiwic2VjdGlvbiIsInNlbGVjdCIsInNoYWRvdyIsInNtYWxsIiwic291cmNlIiwic3BhY2VyIiwic3BhbiIsInN0cmlrZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVsIiwidmFyIiwidmlkZW8iLCJ3YnIiXSksRzF0PXVnKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmltYXRlbW90aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIsImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIsInJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXciLCJ2a2VybiJdKSxVMXQ9dWcoWyJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZURyb3BTaGFkb3ciLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiXSksQlRlPXVnKFsiYW5pbWF0ZSIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxXMXQ9dWcoWyJtYXRoIiwibWVuY2xvc2UiLCJtZXJyb3IiLCJtZmVuY2VkIiwibWZyYWMiLCJtZ2x5cGgiLCJtaSIsIm1sYWJlbGVkdHIiLCJtbXVsdGlzY3JpcHRzIiwibW4iLCJtbyIsIm1vdmVyIiwibXBhZGRlZCIsIm1waGFudG9tIiwibXJvb3QiLCJtcm93IiwibXMiLCJtc3BhY2UiLCJtc3FydCIsIm1zdHlsZSIsIm1zdWIiLCJtc3VwIiwibXN1YnN1cCIsIm10YWJsZSIsIm10ZCIsIm10ZXh0IiwibXRyIiwibXVuZGVyIiwibXVuZGVyb3ZlciIsIm1wcmVzY3JpcHRzIl0pLFJUZT11ZyhbIm1hY3Rpb24iLCJtYWxpZ25ncm91cCIsIm1hbGlnbm1hcmsiLCJtbG9uZ2RpdiIsIm1zY2FycmllcyIsIm1zY2FycnkiLCJtc2dyb3VwIiwibXN0YWNrIiwibXNsaW5lIiwibXNyb3ciLCJzZW1hbnRpY3MiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbi14bWwiLCJtcHJlc2NyaXB0cyIsIm5vbmUiXSksSER0PXVnKFsiI3RleHQiXSksVkR0PXVnKFsiYWNjZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0ZSIsImF1dG9waWN0dXJlaW5waWN0dXJlIiwiYXV0b3BsYXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIsImNhcHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwiY2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIsImNvbnRyb2xzIiwiY29udHJvbHNsaXN0IiwiY29vcmRzIiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5nIiwiZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY3R5cGUiLCJlbnRlcmtleWhpbnQiLCJmYWNlIiwiZm9yIiwiaGVhZGVycyIsImhlaWdodCIsImhpZGRlbiIsImhpZ2giLCJocmVmIiwiaHJlZmxhbmciLCJpZCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJwbGF5c2lubGluZSIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwicmFkaW9ncm91cCIsInJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hlY2siLCJzY29wZSIsInNlbGVjdGVkIiwic2hhcGUiLCJzaXplIiwic2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0aCIsInhtbG5zIiwic2xvdCJdKSxZMXQ9dWcoWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJnbHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9ybSIsImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmluZyIsImluIiwiaW4yIiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtleXBvaW50cyIsImtleXNwbGluZXMiLCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXItc3BhY2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGluZy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXJoZWlnaHQiLCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1bml0cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtZWRpYSIsIm1ldGhvZCIsIm1vZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwib3BhY2l0eSIsIm9yZGVyIiwib3JpZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVyZmxvdyIsInBhaW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRzIiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNlcnZlYWxwaGEiLCJwcmVzZXJ2ZWFzcGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwicngiLCJyeSIsInJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJyZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVuZGVyaW5nIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdpbiIsInRleHQtYW5jaG9yIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0bGVuZ3RoIiwidHlwZSIsInUxIiwidTIiLCJ1bmljb2RlIiwidmFsdWVzIiwidmlld2JveCIsInZpc2liaWxpdHkiLCJ2ZXJzaW9uIiwidmVydC1hZHYteSIsInZlcnQtb3JpZ2luLXgiLCJ2ZXJ0LW9yaWdpbi15Iiwid2lkdGgiLCJ3b3JkLXNwYWNpbmciLCJ3cmFwIiwid3JpdGluZy1tb2RlIiwieGNoYW5uZWxzZWxlY3RvciIsInljaGFubmVsc2VsZWN0b3IiLCJ4IiwieDEiLCJ4MiIsInhtbG5zIiwieSIsInkxIiwieTIiLCJ6Iiwiem9vbWFuZHBhbiJdKSxHRHQ9dWcoWyJhY2NlbnQiLCJhY2NlbnR1bmRlciIsImFsaWduIiwiYmV2ZWxsZWQiLCJjbG9zZSIsImNvbHVtbnNhbGlnbiIsImNvbHVtbmxpbmVzIiwiY29sdW1uc3BhbiIsImRlbm9tYWxpZ24iLCJkZXB0aCIsImRpciIsImRpc3BsYXkiLCJkaXNwbGF5c3R5bGUiLCJlbmNvZGluZyIsImZlbmNlIiwiZnJhbWUiLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJsYXJnZW9wIiwibGVuZ3RoIiwibGluZXRoaWNrbmVzcyIsImxzcGFjZSIsImxxdW90ZSIsIm1hdGhiYWNrZ3JvdW5kIiwibWF0aGNvbG9yIiwibWF0aHNpemUiLCJtYXRodmFyaWFudCIsIm1heHNpemUiLCJtaW5zaXplIiwibW92YWJsZWxpbWl0cyIsIm5vdGF0aW9uIiwibnVtYWxpZ24iLCJvcGVuIiwicm93YWxpZ24iLCJyb3dsaW5lcyIsInJvd3NwYWNpbmciLCJyb3dzcGFuIiwicnNwYWNlIiwicnF1b3RlIiwic2NyaXB0bGV2ZWwiLCJzY3JpcHRtaW5zaXplIiwic2NyaXB0c2l6ZW11bHRpcGxpZXIiLCJzZWxlY3Rpb24iLCJzZXBhcmF0b3IiLCJzZXBhcmF0b3JzIiwic3RyZXRjaHkiLCJzdWJzY3JpcHRzaGlmdCIsInN1cHNjcmlwdHNoaWZ0Iiwic3ltbWV0cmljIiwidm9mZnNldCIsIndpZHRoIiwieG1sbnMiXSksdVc9dWcoWyJ4bGluazpocmVmIiwieG1sOmlkIiwieGxpbms6dGl0bGUiLCJ4bWw6c3BhY2UiLCJ4bWxuczp4bGluayJdKSxqVGU9SnYoL1x7XHtbXHdcV10qfFtcd1xXXSpcfVx9L2dtKSwkVGU9SnYoLzwlW1x3XFddKnxbXHdcV10qJT4vZ20pLHpUZT1KdigvXCR7W1x3XFddKn0vZ20pLHFUZT1KdigvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0vKSxIVGU9SnYoL15hcmlhLVtcLVx3XSskLyksVUR0PUp2KC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfHNtc3xjaWR8eG1wcCk6fFteYS16XXxbYS16Ky5cLV0rKD86W15hLXorLlwtOl18JCkpL2kpLFZUZT1KdigvXig/Olx3K3NjcmlwdHxkYXRhKTovaSksR1RlPUp2KC9bXHUwMDAwLVx1MDAyMFx1MDBBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMjlcdTIwNUZcdTMwMDBdL2cpLFdEdD1KdigvXmh0bWwkL2kpO3ZhciBZRHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsTVVTVEFDSEVfRVhQUjpqVGUsRVJCX0VYUFI6JFRlLFRNUExJVF9FWFBSOnpUZSxEQVRBX0FUVFI6cVRlLEFSSUFfQVRUUjpIVGUsSVNfQUxMT1dFRF9VUkk6VUR0LElTX1NDUklQVF9PUl9EQVRBOlZUZSxBVFRSX1dISVRFU1BBQ0U6R1RlLERPQ1RZUEVfTkFNRTpXRHR9KTtjb25zdCBVVGU9KCk9PnR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LFdUZT1mdW5jdGlvbihhLGYpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Inx8dHlwZW9mIGEuY3JlYXRlUG9saWN5IT0iZnVuY3Rpb24iKXJldHVybiBudWxsO2xldCBwPW51bGw7Y29uc3Qgdz0iZGF0YS10dC1wb2xpY3ktc3VmZml4IjtmJiZmLmhhc0F0dHJpYnV0ZSh3KSYmKHA9Zi5nZXRBdHRyaWJ1dGUodykpO2NvbnN0IG09ImRvbXB1cmlmeSIrKHA/IiMiK3A6IiIpO3RyeXtyZXR1cm4gYS5jcmVhdGVQb2xpY3kobSx7Y3JlYXRlSFRNTChiKXtyZXR1cm4gYn0sY3JlYXRlU2NyaXB0VVJMKGIpe3JldHVybiBifX0pfWNhdGNoe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIittKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19O2Z1bmN0aW9uIEtEdCgpe2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpVVGUoKTtjb25zdCBhPUJpPT5LRHQoQmkpO2lmKGEudmVyc2lvbj0iMy4wLjUiLGEucmVtb3ZlZD1bXSwhaXx8IWkuZG9jdW1lbnR8fGkuZG9jdW1lbnQubm9kZVR5cGUhPT05KXJldHVybiBhLmlzU3VwcG9ydGVkPSExLGE7Y29uc3QgZj1pLmRvY3VtZW50LHA9Zi5jdXJyZW50U2NyaXB0O2xldHtkb2N1bWVudDp3fT1pO2NvbnN0e0RvY3VtZW50RnJhZ21lbnQ6bSxIVE1MVGVtcGxhdGVFbGVtZW50OmIsTm9kZTpFLEVsZW1lbnQ6XyxOb2RlRmlsdGVyOkEsTmFtZWROb2RlTWFwOkk9aS5OYW1lZE5vZGVNYXB8fGkuTW96TmFtZWRBdHRyTWFwLEhUTUxGb3JtRWxlbWVudDpCLERPTVBhcnNlcjpOLHRydXN0ZWRUeXBlczpSfT1pLHo9Xy5wcm90b3R5cGUsVz1jVyh6LCJjbG9uZU5vZGUiKSxldD1jVyh6LCJuZXh0U2libGluZyIpLHN0PWNXKHosImNoaWxkTm9kZXMiKSxhdD1jVyh6LCJwYXJlbnROb2RlIik7aWYodHlwZW9mIGI9PSJmdW5jdGlvbiIpe2NvbnN0IEJpPXcuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtCaS5jb250ZW50JiZCaS5jb250ZW50Lm93bmVyRG9jdW1lbnQmJih3PUJpLmNvbnRlbnQub3duZXJEb2N1bWVudCl9bGV0IGJ0LG10PSIiO2NvbnN0e2ltcGxlbWVudGF0aW9uOnl0LGNyZWF0ZU5vZGVJdGVyYXRvcjpmdCxjcmVhdGVEb2N1bWVudEZyYWdtZW50OnV0LGdldEVsZW1lbnRzQnlUYWdOYW1lOnZ0fT13LHtpbXBvcnROb2RlOlh9PWY7bGV0IHB0PXt9O2EuaXNTdXBwb3J0ZWQ9dHlwZW9mIGpEdD09ImZ1bmN0aW9uIiYmdHlwZW9mIGF0PT0iZnVuY3Rpb24iJiZ5dCYmeXQuY3JlYXRlSFRNTERvY3VtZW50IT09dm9pZCAwO2NvbnN0e01VU1RBQ0hFX0VYUFI6VSxFUkJfRVhQUjpUdCxUTVBMSVRfRVhQUjpudCxEQVRBX0FUVFI6SXQsQVJJQV9BVFRSOk90LElTX1NDUklQVF9PUl9EQVRBOkJ0LEFUVFJfV0hJVEVTUEFDRTpFdH09WUR0O2xldHtJU19BTExPV0VEX1VSSTpafT1ZRHQsQ3Q9bnVsbDtjb25zdCB4dD1tbyh7fSxbLi4ucUR0LC4uLkcxdCwuLi5VMXQsLi4uVzF0LC4uLkhEdF0pO2xldCBIdD1udWxsO2NvbnN0IExlPW1vKHt9LFsuLi5WRHQsLi4uWTF0LC4uLkdEdCwuLi51V10pO2xldCBGdD1PYmplY3Quc2VhbChPYmplY3QuY3JlYXRlKG51bGwse3RhZ05hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxnbj1udWxsLFNlPW51bGwsbWU9ITAsVmU9ITAsWWU9ITEsY2U9ITAsa2U9ITEsenQ9ITEscmU9ITEsc2U9ITEsUGU9ITEsdGU9ITEsTWU9ITEsZGU9ITAsb249ITE7Y29uc3Qgbmk9InVzZXItY29udGVudC0iO2xldCBLcz0hMCx3cz0hMSxmbz17fSxYaT1udWxsO2NvbnN0IEVyPW1vKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxlIiwidmlkZW8iLCJ4bXAiXSk7bGV0IFhuPW51bGw7Y29uc3QgZGk9bW8oe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNlIiwiaW1hZ2UiLCJ0cmFjayJdKTtsZXQgRWU9bnVsbDtjb25zdCBLbj1tbyh7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxlIiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLEhlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixUaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHBuPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtsZXQgRXM9cG4scWE9ITEsTWE9bnVsbDtjb25zdCBHcz1tbyh7fSxbSGUsVGkscG5dLFYxdCk7bGV0IFBvO2NvbnN0IHZzPVsiYXBwbGljYXRpb24veGh0bWwreG1sIiwidGV4dC9odG1sIl0scnU9InRleHQvaHRtbCI7bGV0IHpzLER1PW51bGw7Y29uc3QgcG09dy5jcmVhdGVFbGVtZW50KCJmb3JtIiksdXc9ZnVuY3Rpb24oY24pe3JldHVybiBjbiBpbnN0YW5jZW9mIFJlZ0V4cHx8Y24gaW5zdGFuY2VvZiBGdW5jdGlvbn0sV3U9ZnVuY3Rpb24oY24pe2lmKCEoRHUmJkR1PT09Y24pKXtpZigoIWNufHx0eXBlb2YgY24hPSJvYmplY3QiKSYmKGNuPXt9KSxjbj1QQShjbiksUG89dnMuaW5kZXhPZihjbi5QQVJTRVJfTUVESUFfVFlQRSk9PT0tMT9Qbz1ydTpQbz1jbi5QQVJTRVJfTUVESUFfVFlQRSx6cz1Qbz09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiP1YxdDpvVyxDdD0iQUxMT1dFRF9UQUdTImluIGNuP21vKHt9LGNuLkFMTE9XRURfVEFHUyx6cyk6eHQsSHQ9IkFMTE9XRURfQVRUUiJpbiBjbj9tbyh7fSxjbi5BTExPV0VEX0FUVFIsenMpOkxlLE1hPSJBTExPV0VEX05BTUVTUEFDRVMiaW4gY24/bW8oe30sY24uQUxMT1dFRF9OQU1FU1BBQ0VTLFYxdCk6R3MsRWU9IkFERF9VUklfU0FGRV9BVFRSImluIGNuP21vKFBBKEtuKSxjbi5BRERfVVJJX1NBRkVfQVRUUix6cyk6S24sWG49IkFERF9EQVRBX1VSSV9UQUdTImluIGNuP21vKFBBKGRpKSxjbi5BRERfREFUQV9VUklfVEFHUyx6cyk6ZGksWGk9IkZPUkJJRF9DT05URU5UUyJpbiBjbj9tbyh7fSxjbi5GT1JCSURfQ09OVEVOVFMsenMpOkVyLGduPSJGT1JCSURfVEFHUyJpbiBjbj9tbyh7fSxjbi5GT1JCSURfVEFHUyx6cyk6e30sU2U9IkZPUkJJRF9BVFRSImluIGNuP21vKHt9LGNuLkZPUkJJRF9BVFRSLHpzKTp7fSxmbz0iVVNFX1BST0ZJTEVTImluIGNuP2NuLlVTRV9QUk9GSUxFUzohMSxtZT1jbi5BTExPV19BUklBX0FUVFIhPT0hMSxWZT1jbi5BTExPV19EQVRBX0FUVFIhPT0hMSxZZT1jbi5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEsY2U9Y24uQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSIT09ITEsa2U9Y24uU0FGRV9GT1JfVEVNUExBVEVTfHwhMSx6dD1jbi5XSE9MRV9ET0NVTUVOVHx8ITEsUGU9Y24uUkVUVVJOX0RPTXx8ITEsdGU9Y24uUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsTWU9Y24uUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsc2U9Y24uRk9SQ0VfQk9EWXx8ITEsZGU9Y24uU0FOSVRJWkVfRE9NIT09ITEsb249Y24uU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLEtzPWNuLktFRVBfQ09OVEVOVCE9PSExLHdzPWNuLklOX1BMQUNFfHwhMSxaPWNuLkFMTE9XRURfVVJJX1JFR0VYUHx8VUR0LEVzPWNuLk5BTUVTUEFDRXx8cG4sRnQ9Y24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LGNuLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZ1dyhjbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYoRnQudGFnTmFtZUNoZWNrPWNuLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksY24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJnV3KGNuLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihGdC5hdHRyaWJ1dGVOYW1lQ2hlY2s9Y24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxjbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmdHlwZW9mIGNuLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz09ImJvb2xlYW4iJiYoRnQuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPWNuLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyksa2UmJihWZT0hMSksdGUmJihQZT0hMCksZm8mJihDdD1tbyh7fSxbLi4uSER0XSksSHQ9W10sZm8uaHRtbD09PSEwJiYobW8oQ3QscUR0KSxtbyhIdCxWRHQpKSxmby5zdmc9PT0hMCYmKG1vKEN0LEcxdCksbW8oSHQsWTF0KSxtbyhIdCx1VykpLGZvLnN2Z0ZpbHRlcnM9PT0hMCYmKG1vKEN0LFUxdCksbW8oSHQsWTF0KSxtbyhIdCx1VykpLGZvLm1hdGhNbD09PSEwJiYobW8oQ3QsVzF0KSxtbyhIdCxHRHQpLG1vKEh0LHVXKSkpLGNuLkFERF9UQUdTJiYoQ3Q9PT14dCYmKEN0PVBBKEN0KSksbW8oQ3QsY24uQUREX1RBR1MsenMpKSxjbi5BRERfQVRUUiYmKEh0PT09TGUmJihIdD1QQShIdCkpLG1vKEh0LGNuLkFERF9BVFRSLHpzKSksY24uQUREX1VSSV9TQUZFX0FUVFImJm1vKEVlLGNuLkFERF9VUklfU0FGRV9BVFRSLHpzKSxjbi5GT1JCSURfQ09OVEVOVFMmJihYaT09PUVyJiYoWGk9UEEoWGkpKSxtbyhYaSxjbi5GT1JCSURfQ09OVEVOVFMsenMpKSxLcyYmKEN0WyIjdGV4dCJdPSEwKSx6dCYmbW8oQ3QsWyJodG1sIiwiaGVhZCIsImJvZHkiXSksQ3QudGFibGUmJihtbyhDdCxbInRib2R5Il0pLGRlbGV0ZSBnbi50Ym9keSksY24uVFJVU1RFRF9UWVBFU19QT0xJQ1kpe2lmKHR5cGVvZiBjbi5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MIT0iZnVuY3Rpb24iKXRocm93IFVQKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZih0eXBlb2YgY24uVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMIT0iZnVuY3Rpb24iKXRocm93IFVQKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlU2NyaXB0VVJMIiBob29rLicpO2J0PWNuLlRSVVNURURfVFlQRVNfUE9MSUNZLG10PWJ0LmNyZWF0ZUhUTUwoIiIpfWVsc2UgYnQ9PT12b2lkIDAmJihidD1XVGUoUixwKSksYnQhPT1udWxsJiZ0eXBlb2YgbXQ9PSJzdHJpbmciJiYobXQ9YnQuY3JlYXRlSFRNTCgiIikpO3VnJiZ1ZyhjbiksRHU9Y259fSx0aD1tbyh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSksRmE9bW8oe30sWyJmb3JlaWdub2JqZWN0IiwiZGVzYyIsInRpdGxlIiwiYW5ub3RhdGlvbi14bWwiXSksTWw9bW8oe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSksaGE9bW8oe30sRzF0KTttbyhoYSxVMXQpLG1vKGhhLEJUZSk7Y29uc3QgYmM9bW8oe30sVzF0KTttbyhiYyxSVGUpO2NvbnN0IENjPWZ1bmN0aW9uKGNuKXtsZXQga3I9YXQoY24pOygha3J8fCFrci50YWdOYW1lKSYmKGtyPXtuYW1lc3BhY2VVUkk6RXMsdGFnTmFtZToidGVtcGxhdGUifSk7Y29uc3QgRWk9b1coY24udGFnTmFtZSksSm89b1coa3IudGFnTmFtZSk7cmV0dXJuIE1hW2NuLm5hbWVzcGFjZVVSSV0/Y24ubmFtZXNwYWNlVVJJPT09VGk/a3IubmFtZXNwYWNlVVJJPT09cG4/RWk9PT0ic3ZnIjprci5uYW1lc3BhY2VVUkk9PT1IZT9FaT09PSJzdmciJiYoSm89PT0iYW5ub3RhdGlvbi14bWwifHx0aFtKb10pOiEhaGFbRWldOmNuLm5hbWVzcGFjZVVSST09PUhlP2tyLm5hbWVzcGFjZVVSST09PXBuP0VpPT09Im1hdGgiOmtyLm5hbWVzcGFjZVVSST09PVRpP0VpPT09Im1hdGgiJiZGYVtKb106ISFiY1tFaV06Y24ubmFtZXNwYWNlVVJJPT09cG4/a3IubmFtZXNwYWNlVVJJPT09VGkmJiFGYVtKb118fGtyLm5hbWVzcGFjZVVSST09PUhlJiYhdGhbSm9dPyExOiFiY1tFaV0mJihNbFtFaV18fCFoYVtFaV0pOiEhKFBvPT09ImFwcGxpY2F0aW9uL3hodG1sK3htbCImJk1hW2NuLm5hbWVzcGFjZVVSSV0pOiExfSxwYT1mdW5jdGlvbihjbil7R1AoYS5yZW1vdmVkLHtlbGVtZW50OmNufSk7dHJ5e2NuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY24pfWNhdGNoe2NuLnJlbW92ZSgpfX0sRGE9ZnVuY3Rpb24oY24sa3Ipe3RyeXtHUChhLnJlbW92ZWQse2F0dHJpYnV0ZTprci5nZXRBdHRyaWJ1dGVOb2RlKGNuKSxmcm9tOmtyfSl9Y2F0Y2h7R1AoYS5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOmtyfSl9aWYoa3IucmVtb3ZlQXR0cmlidXRlKGNuKSxjbj09PSJpcyImJiFIdFtjbl0paWYoUGV8fHRlKXRyeXtwYShrcil9Y2F0Y2h7fWVsc2UgdHJ5e2tyLnNldEF0dHJpYnV0ZShjbiwiIil9Y2F0Y2h7fX0sSGE9ZnVuY3Rpb24oY24pe2xldCBrcixFaTtpZihzZSljbj0iPHJlbW92ZT48L3JlbW92ZT4iK2NuO2Vsc2V7Y29uc3QgcmY9T1RlKGNuLC9eW1xyXG5cdCBdKy8pO0VpPXJmJiZyZlswXX1Qbz09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiJiZFcz09PXBuJiYoY249JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytjbisiPC9ib2R5PjwvaHRtbD4iKTtjb25zdCBKbz1idD9idC5jcmVhdGVIVE1MKGNuKTpjbjtpZihFcz09PXBuKXRyeXtrcj1uZXcgTigpLnBhcnNlRnJvbVN0cmluZyhKbyxQbyl9Y2F0Y2h7fWlmKCFrcnx8IWtyLmRvY3VtZW50RWxlbWVudCl7a3I9eXQuY3JlYXRlRG9jdW1lbnQoRXMsInRlbXBsYXRlIixudWxsKTt0cnl7a3IuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTD1xYT9tdDpKb31jYXRjaHt9fWNvbnN0IHdjPWtyLmJvZHl8fGtyLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gY24mJkVpJiZ3Yy5pbnNlcnRCZWZvcmUody5jcmVhdGVUZXh0Tm9kZShFaSksd2MuY2hpbGROb2Rlc1swXXx8bnVsbCksRXM9PT1wbj92dC5jYWxsKGtyLHp0PyJodG1sIjoiYm9keSIpWzBdOnp0P2tyLmRvY3VtZW50RWxlbWVudDp3Y30sRGw9ZnVuY3Rpb24oY24pe3JldHVybiBmdC5jYWxsKGNuLm93bmVyRG9jdW1lbnR8fGNuLGNuLEEuU0hPV19FTEVNRU5UfEEuU0hPV19DT01NRU5UfEEuU0hPV19URVhULG51bGwsITEpfSxfYz1mdW5jdGlvbihjbil7cmV0dXJuIGNuIGluc3RhbmNlb2YgQiYmKHR5cGVvZiBjbi5ub2RlTmFtZSE9InN0cmluZyJ8fHR5cGVvZiBjbi50ZXh0Q29udGVudCE9InN0cmluZyJ8fHR5cGVvZiBjbi5yZW1vdmVDaGlsZCE9ImZ1bmN0aW9uInx8IShjbi5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgSSl8fHR5cGVvZiBjbi5yZW1vdmVBdHRyaWJ1dGUhPSJmdW5jdGlvbiJ8fHR5cGVvZiBjbi5zZXRBdHRyaWJ1dGUhPSJmdW5jdGlvbiJ8fHR5cGVvZiBjbi5uYW1lc3BhY2VVUkkhPSJzdHJpbmcifHx0eXBlb2YgY24uaW5zZXJ0QmVmb3JlIT0iZnVuY3Rpb24ifHx0eXBlb2YgY24uaGFzQ2hpbGROb2RlcyE9ImZ1bmN0aW9uIil9LGx3PWZ1bmN0aW9uKGNuKXtyZXR1cm4gdHlwZW9mIEU9PSJvYmplY3QiP2NuIGluc3RhbmNlb2YgRTpjbiYmdHlwZW9mIGNuPT0ib2JqZWN0IiYmdHlwZW9mIGNuLm5vZGVUeXBlPT0ibnVtYmVyIiYmdHlwZW9mIGNuLm5vZGVOYW1lPT0ic3RyaW5nIn0sZWg9ZnVuY3Rpb24oY24sa3IsRWkpe3B0W2NuXSYmSVRlKHB0W2NuXSxKbz0+e0pvLmNhbGwoYSxrcixFaSxEdSl9KX0sZWQ9ZnVuY3Rpb24oY24pe2xldCBrcjtpZihlaCgiYmVmb3JlU2FuaXRpemVFbGVtZW50cyIsY24sbnVsbCksX2MoY24pKXJldHVybiBwYShjbiksITA7Y29uc3QgRWk9enMoY24ubm9kZU5hbWUpO2lmKGVoKCJ1cG9uU2FuaXRpemVFbGVtZW50Iixjbix7dGFnTmFtZTpFaSxhbGxvd2VkVGFnczpDdH0pLGNuLmhhc0NoaWxkTm9kZXMoKSYmIWx3KGNuLmZpcnN0RWxlbWVudENoaWxkKSYmKCFsdyhjbi5jb250ZW50KXx8IWx3KGNuLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpKSYmUGIoLzxbL1x3XS9nLGNuLmlubmVySFRNTCkmJlBiKC88Wy9cd10vZyxjbi50ZXh0Q29udGVudCkpcmV0dXJuIHBhKGNuKSwhMDtpZighQ3RbRWldfHxnbltFaV0pe2lmKCFnbltFaV0mJm5kKEVpKSYmKEZ0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmUGIoRnQudGFnTmFtZUNoZWNrLEVpKXx8RnQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJkZ0LnRhZ05hbWVDaGVjayhFaSkpKXJldHVybiExO2lmKEtzJiYhWGlbRWldKXtjb25zdCBKbz1hdChjbil8fGNuLnBhcmVudE5vZGUsd2M9c3QoY24pfHxjbi5jaGlsZE5vZGVzO2lmKHdjJiZKbyl7Y29uc3QgcmY9d2MubGVuZ3RoO2ZvcihsZXQgT2M9cmYtMTtPYz49MDstLU9jKUpvLmluc2VydEJlZm9yZShXKHdjW09jXSwhMCksZXQoY24pKX19cmV0dXJuIHBhKGNuKSwhMH1yZXR1cm4gY24gaW5zdGFuY2VvZiBfJiYhQ2MoY24pfHwoRWk9PT0ibm9zY3JpcHQifHxFaT09PSJub2VtYmVkInx8RWk9PT0ibm9mcmFtZXMiKSYmUGIoLzxcL25vKHNjcmlwdHxlbWJlZHxmcmFtZXMpL2ksY24uaW5uZXJIVE1MKT8ocGEoY24pLCEwKTooa2UmJmNuLm5vZGVUeXBlPT09MyYmKGtyPWNuLnRleHRDb250ZW50LGtyPXRtKGtyLFUsIiAiKSxrcj10bShrcixUdCwiICIpLGtyPXRtKGtyLG50LCIgIiksY24udGV4dENvbnRlbnQhPT1rciYmKEdQKGEucmVtb3ZlZCx7ZWxlbWVudDpjbi5jbG9uZU5vZGUoKX0pLGNuLnRleHRDb250ZW50PWtyKSksZWgoImFmdGVyU2FuaXRpemVFbGVtZW50cyIsY24sbnVsbCksITEpfSxqZD1mdW5jdGlvbihjbixrcixFaSl7aWYoZGUmJihrcj09PSJpZCJ8fGtyPT09Im5hbWUiKSYmKEVpIGluIHd8fEVpIGluIHBtKSlyZXR1cm4hMTtpZighKFZlJiYhU2Vba3JdJiZQYihJdCxrcikpKXtpZighKG1lJiZQYihPdCxrcikpKXtpZighSHRba3JdfHxTZVtrcl0pe2lmKCEobmQoY24pJiYoRnQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZQYihGdC50YWdOYW1lQ2hlY2ssY24pfHxGdC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmRnQudGFnTmFtZUNoZWNrKGNuKSkmJihGdC5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJlBiKEZ0LmF0dHJpYnV0ZU5hbWVDaGVjayxrcil8fEZ0LmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZGdC5hdHRyaWJ1dGVOYW1lQ2hlY2soa3IpKXx8a3I9PT0iaXMiJiZGdC5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihGdC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJlBiKEZ0LnRhZ05hbWVDaGVjayxFaSl8fEZ0LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZGdC50YWdOYW1lQ2hlY2soRWkpKSkpcmV0dXJuITF9ZWxzZSBpZighRWVba3JdKXtpZighUGIoWix0bShFaSxFdCwiIikpKXtpZighKChrcj09PSJzcmMifHxrcj09PSJ4bGluazpocmVmInx8a3I9PT0iaHJlZiIpJiZjbiE9PSJzY3JpcHQiJiZQVGUoRWksImRhdGE6Iik9PT0wJiZYbltjbl0pKXtpZighKFllJiYhUGIoQnQsdG0oRWksRXQsIiIpKSkpe2lmKEVpKXJldHVybiExfX19fX19cmV0dXJuITB9LG5kPWZ1bmN0aW9uKGNuKXtyZXR1cm4gY24uaW5kZXhPZigiLSIpPjB9LCRkPWZ1bmN0aW9uKGNuKXtsZXQga3IsRWksSm8sd2M7ZWgoImJlZm9yZVNhbml0aXplQXR0cmlidXRlcyIsY24sbnVsbCk7Y29uc3R7YXR0cmlidXRlczpyZn09Y247aWYoIXJmKXJldHVybjtjb25zdCBPYz17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOkh0fTtmb3Iod2M9cmYubGVuZ3RoO3djLS07KXtrcj1yZlt3Y107Y29uc3R7bmFtZTpzZixuYW1lc3BhY2VVUkk6YWZ9PWtyO2lmKEVpPXNmPT09InZhbHVlIj9rci52YWx1ZTpGVGUoa3IudmFsdWUpLEpvPXpzKHNmKSxPYy5hdHRyTmFtZT1KbyxPYy5hdHRyVmFsdWU9RWksT2Mua2VlcEF0dHI9ITAsT2MuZm9yY2VLZWVwQXR0cj12b2lkIDAsZWgoInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsY24sT2MpLEVpPU9jLmF0dHJWYWx1ZSxPYy5mb3JjZUtlZXBBdHRyfHwoRGEoc2YsY24pLCFPYy5rZWVwQXR0cikpY29udGludWU7aWYoIWNlJiZQYigvXC8+L2ksRWkpKXtEYShzZixjbik7Y29udGludWV9a2UmJihFaT10bShFaSxVLCIgIiksRWk9dG0oRWksVHQsIiAiKSxFaT10bShFaSxudCwiICIpKTtjb25zdCBRaT16cyhjbi5ub2RlTmFtZSk7aWYoamQoUWksSm8sRWkpKXtpZihvbiYmKEpvPT09ImlkInx8Sm89PT0ibmFtZSIpJiYoRGEoc2YsY24pLEVpPW5pK0VpKSxidCYmdHlwZW9mIFI9PSJvYmplY3QiJiZ0eXBlb2YgUi5nZXRBdHRyaWJ1dGVUeXBlPT0iZnVuY3Rpb24iJiYhYWYpc3dpdGNoKFIuZ2V0QXR0cmlidXRlVHlwZShRaSxKbykpe2Nhc2UiVHJ1c3RlZEhUTUwiOntFaT1idC5jcmVhdGVIVE1MKEVpKTticmVha31jYXNlIlRydXN0ZWRTY3JpcHRVUkwiOntFaT1idC5jcmVhdGVTY3JpcHRVUkwoRWkpO2JyZWFrfX10cnl7YWY/Y24uc2V0QXR0cmlidXRlTlMoYWYsc2YsRWkpOmNuLnNldEF0dHJpYnV0ZShzZixFaSksekR0KGEucmVtb3ZlZCl9Y2F0Y2h7fX19ZWgoImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixjbixudWxsKX0sQTA9ZnVuY3Rpb24gQmkoY24pe2xldCBrcjtjb25zdCBFaT1EbChjbik7Zm9yKGVoKCJiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTSIsY24sbnVsbCk7a3I9RWkubmV4dE5vZGUoKTspZWgoInVwb25TYW5pdGl6ZVNoYWRvd05vZGUiLGtyLG51bGwpLCFlZChrcikmJihrci5jb250ZW50IGluc3RhbmNlb2YgbSYmQmkoa3IuY29udGVudCksJGQoa3IpKTtlaCgiYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSIsY24sbnVsbCl9O3JldHVybiBhLnNhbml0aXplPWZ1bmN0aW9uKEJpKXtsZXQgY249YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LGtyLEVpLEpvLHdjO2lmKHFhPSFCaSxxYSYmKEJpPSI8IS0tPiIpLHR5cGVvZiBCaSE9InN0cmluZyImJiFsdyhCaSkpaWYodHlwZW9mIEJpLnRvU3RyaW5nPT0iZnVuY3Rpb24iKXtpZihCaT1CaS50b1N0cmluZygpLHR5cGVvZiBCaSE9InN0cmluZyIpdGhyb3cgVVAoImRpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmciKX1lbHNlIHRocm93IFVQKCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCFhLmlzU3VwcG9ydGVkKXJldHVybiBCaTtpZihyZXx8V3UoY24pLGEucmVtb3ZlZD1bXSx0eXBlb2YgQmk9PSJzdHJpbmciJiYod3M9ITEpLHdzKXtpZihCaS5ub2RlTmFtZSl7Y29uc3Qgc2Y9enMoQmkubm9kZU5hbWUpO2lmKCFDdFtzZl18fGduW3NmXSl0aHJvdyBVUCgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKEJpIGluc3RhbmNlb2YgRSlrcj1IYSgiPCEtLS0tPiIpLEVpPWtyLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShCaSwhMCksRWkubm9kZVR5cGU9PT0xJiZFaS5ub2RlTmFtZT09PSJCT0RZInx8RWkubm9kZU5hbWU9PT0iSFRNTCI/a3I9RWk6a3IuYXBwZW5kQ2hpbGQoRWkpO2Vsc2V7aWYoIVBlJiYha2UmJiF6dCYmQmkuaW5kZXhPZigiPCIpPT09LTEpcmV0dXJuIGJ0JiZNZT9idC5jcmVhdGVIVE1MKEJpKTpCaTtpZihrcj1IYShCaSksIWtyKXJldHVybiBQZT9udWxsOk1lP210OiIifWtyJiZzZSYmcGEoa3IuZmlyc3RDaGlsZCk7Y29uc3QgcmY9RGwod3M/Qmk6a3IpO2Zvcig7Sm89cmYubmV4dE5vZGUoKTspZWQoSm8pfHwoSm8uY29udGVudCBpbnN0YW5jZW9mIG0mJkEwKEpvLmNvbnRlbnQpLCRkKEpvKSk7aWYod3MpcmV0dXJuIEJpO2lmKFBlKXtpZih0ZSlmb3Iod2M9dXQuY2FsbChrci5vd25lckRvY3VtZW50KTtrci5maXJzdENoaWxkOyl3Yy5hcHBlbmRDaGlsZChrci5maXJzdENoaWxkKTtlbHNlIHdjPWtyO3JldHVybihIdC5zaGFkb3dyb290fHxIdC5zaGFkb3dyb290bW9kZSkmJih3Yz1YLmNhbGwoZix3YywhMCkpLHdjfWxldCBPYz16dD9rci5vdXRlckhUTUw6a3IuaW5uZXJIVE1MO3JldHVybiB6dCYmQ3RbIiFkb2N0eXBlIl0mJmtyLm93bmVyRG9jdW1lbnQmJmtyLm93bmVyRG9jdW1lbnQuZG9jdHlwZSYma3Iub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJlBiKFdEdCxrci5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJihPYz0iPCFET0NUWVBFICIra3Iub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrYD4KYCtPYyksa2UmJihPYz10bShPYyxVLCIgIiksT2M9dG0oT2MsVHQsIiAiKSxPYz10bShPYyxudCwiICIpKSxidCYmTWU/YnQuY3JlYXRlSFRNTChPYyk6T2N9LGEuc2V0Q29uZmlnPWZ1bmN0aW9uKEJpKXtXdShCaSkscmU9ITB9LGEuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXtEdT1udWxsLHJlPSExfSxhLmlzVmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24oQmksY24sa3Ipe0R1fHxXdSh7fSk7Y29uc3QgRWk9enMoQmkpLEpvPXpzKGNuKTtyZXR1cm4gamQoRWksSm8sa3IpfSxhLmFkZEhvb2s9ZnVuY3Rpb24oQmksY24pe3R5cGVvZiBjbj09ImZ1bmN0aW9uIiYmKHB0W0JpXT1wdFtCaV18fFtdLEdQKHB0W0JpXSxjbikpfSxhLnJlbW92ZUhvb2s9ZnVuY3Rpb24oQmkpe2lmKHB0W0JpXSlyZXR1cm4gekR0KHB0W0JpXSl9LGEucmVtb3ZlSG9va3M9ZnVuY3Rpb24oQmkpe3B0W0JpXSYmKHB0W0JpXT1bXSl9LGEucmVtb3ZlQWxsSG9va3M9ZnVuY3Rpb24oKXtwdD17fX0sYX12YXIgbFc9S0R0KCk7Y29uc3QgV1A9LzxiclxzKlwvPz4vZ2ksWVRlPWk9Pmk/WkR0KGkpLnJlcGxhY2UoL1xcbi9nLCIjYnIjIikuc3BsaXQoIiNiciMiKTpbIiJdLFhEdD1pPT5sVy5zYW5pdGl6ZShpKSxRRHQ9KGksYSk9Pnt2YXIgZjtpZigoKGY9YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpmLmh0bWxMYWJlbHMpIT09ITEpe2NvbnN0IHA9YS5zZWN1cml0eUxldmVsO3A9PT0iYW50aXNjcmlwdCJ8fHA9PT0ic3RyaWN0Ij9pPVhEdChpKTpwIT09Imxvb3NlIiYmKGk9WkR0KGkpLGk9aS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSxpPWkucmVwbGFjZSgvPS9nLCImZXF1YWxzOyIpLGk9WlRlKGkpKX1yZXR1cm4gaX0sUTE9KGksYSk9PmkmJihhLmRvbXB1cmlmeUNvbmZpZz9pPWxXLnNhbml0aXplKFFEdChpLGEpLGEuZG9tcHVyaWZ5Q29uZmlnKS50b1N0cmluZygpOmk9bFcuc2FuaXRpemUoUUR0KGksYSkse0ZPUkJJRF9UQUdTOlsic3R5bGUiXX0pLnRvU3RyaW5nKCksaSksS1RlPShpLGEpPT50eXBlb2YgaT09InN0cmluZyI/UTEoaSxhKTppLmZsYXQoKS5tYXAoZj0+UTEoZixhKSksWFRlPWk9PldQLnRlc3QoaSksUVRlPWk9Pmkuc3BsaXQoV1ApLFpUZT1pPT5pLnJlcGxhY2UoLyNiciMvZywiPGJyLz4iKSxaRHQ9aT0+aS5yZXBsYWNlKFdQLCIjYnIjIiksSlRlPWk9PntsZXQgYT0iIjtyZXR1cm4gaSYmKGE9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsYT1hLnJlcGxhY2VBbGwoL1woL2csIlxcKCIpLGE9YS5yZXBsYWNlQWxsKC9cKS9nLCJcXCkiKSksYX0sbzE9aT0+IShpPT09ITF8fFsiZmFsc2UiLCJudWxsIiwiMCJdLmluY2x1ZGVzKFN0cmluZyhpKS50cmltKCkudG9Mb3dlckNhc2UoKSkpLHRDZT1mdW5jdGlvbiguLi5pKXtjb25zdCBhPWkuZmlsdGVyKGY9PiFpc05hTihmKSk7cmV0dXJuIE1hdGgubWF4KC4uLmEpfSxlQ2U9ZnVuY3Rpb24oLi4uaSl7Y29uc3QgYT1pLmZpbHRlcihmPT4haXNOYU4oZikpO3JldHVybiBNYXRoLm1pbiguLi5hKX0sWVA9ZnVuY3Rpb24oaSl7Y29uc3QgYT1pLnNwbGl0KC8oLCkvKSxmPVtdO2ZvcihsZXQgcD0wO3A8YS5sZW5ndGg7cCsrKXtsZXQgdz1hW3BdO2lmKHc9PT0iLCImJnA+MCYmcCsxPGEubGVuZ3RoKXtjb25zdCBtPWFbcC0xXSxiPWFbcCsxXTtuQ2UobSxiKSYmKHc9bSsiLCIrYixwKyssZi5wb3AoKSl9Zi5wdXNoKHJDZSh3KSl9cmV0dXJuIGYuam9pbigiIil9LEsxdD0oaSxhKT0+TWF0aC5tYXgoMCxpLnNwbGl0KGEpLmxlbmd0aC0xKSxuQ2U9KGksYSk9Pntjb25zdCBmPUsxdChpLCJ+IikscD1LMXQoYSwifiIpO3JldHVybiBmPT09MSYmcD09PTF9LHJDZT1pPT57Y29uc3QgYT1LMXQoaSwifiIpO2xldCBmPSExO2lmKGE8PTEpcmV0dXJuIGk7YSUyIT09MCYmaS5zdGFydHNXaXRoKCJ+IikmJihpPWkuc3Vic3RyaW5nKDEpLGY9ITApO2NvbnN0IHA9Wy4uLmldO2xldCB3PXAuaW5kZXhPZigifiIpLG09cC5sYXN0SW5kZXhPZigifiIpO2Zvcig7dyE9PS0xJiZtIT09LTEmJnchPT1tOylwW3ddPSI8IixwW21dPSI+Iix3PXAuaW5kZXhPZigifiIpLG09cC5sYXN0SW5kZXhPZigifiIpO3JldHVybiBmJiZwLnVuc2hpZnQoIn4iKSxwLmpvaW4oIiIpfSxLcj17Z2V0Um93czpZVGUsc2FuaXRpemVUZXh0OlExLHNhbml0aXplVGV4dE9yQXJyYXk6S1RlLGhhc0JyZWFrczpYVGUsc3BsaXRCcmVha3M6UVRlLGxpbmVCcmVha1JlZ2V4OldQLHJlbW92ZVNjcmlwdDpYRHQsZ2V0VXJsOkpUZSxldmFsdWF0ZTpvMSxnZXRNYXg6dENlLGdldE1pbjplQ2V9LGhXPXttaW46e3I6MCxnOjAsYjowLHM6MCxsOjAsYTowfSxtYXg6e3I6MjU1LGc6MjU1LGI6MjU1LGg6MzYwLHM6MTAwLGw6MTAwLGE6MX0sY2xhbXA6e3I6aT0+aT49MjU1PzI1NTppPDA/MDppLGc6aT0+aT49MjU1PzI1NTppPDA/MDppLGI6aT0+aT49MjU1PzI1NTppPDA/MDppLGg6aT0+aSUzNjAsczppPT5pPj0xMDA/MTAwOmk8MD8wOmksbDppPT5pPj0xMDA/MTAwOmk8MD8wOmksYTppPT5pPj0xPzE6aTwwPzA6aX0sdG9MaW5lYXI6aT0+e2NvbnN0IGE9aS8yNTU7cmV0dXJuIGk+LjAzOTI4P01hdGgucG93KChhKy4wNTUpLzEuMDU1LDIuNCk6YS8xMi45Mn0saHVlMnJnYjooaSxhLGYpPT4oZjwwJiYoZis9MSksZj4xJiYoZi09MSksZjwxLzY/aSsoYS1pKSo2KmY6ZjwxLzI/YTpmPDIvMz9pKyhhLWkpKigyLzMtZikqNjppKSxoc2wycmdiOih7aDppLHM6YSxsOmZ9LHApPT57aWYoIWEpcmV0dXJuIGYqMi41NTtpLz0zNjAsYS89MTAwLGYvPTEwMDtjb25zdCB3PWY8LjU/ZiooMSthKTpmK2EtZiphLG09MipmLXc7c3dpdGNoKHApe2Nhc2UiciI6cmV0dXJuIGhXLmh1ZTJyZ2IobSx3LGkrMS8zKSoyNTU7Y2FzZSJnIjpyZXR1cm4gaFcuaHVlMnJnYihtLHcsaSkqMjU1O2Nhc2UiYiI6cmV0dXJuIGhXLmh1ZTJyZ2IobSx3LGktMS8zKSoyNTV9fSxyZ2IyaHNsOih7cjppLGc6YSxiOmZ9LHApPT57aS89MjU1LGEvPTI1NSxmLz0yNTU7Y29uc3Qgdz1NYXRoLm1heChpLGEsZiksbT1NYXRoLm1pbihpLGEsZiksYj0odyttKS8yO2lmKHA9PT0ibCIpcmV0dXJuIGIqMTAwO2lmKHc9PT1tKXJldHVybiAwO2NvbnN0IEU9dy1tLF89Yj4uNT9FLygyLXctbSk6RS8odyttKTtpZihwPT09InMiKXJldHVybiBfKjEwMDtzd2l0Y2godyl7Y2FzZSBpOnJldHVybigoYS1mKS9FKyhhPGY/NjowKSkqNjA7Y2FzZSBhOnJldHVybigoZi1pKS9FKzIpKjYwO2Nhc2UgZjpyZXR1cm4oKGktYSkvRSs0KSo2MDtkZWZhdWx0OnJldHVybi0xfX19LGdhPXtjaGFubmVsOmhXLGxhbmc6e2NsYW1wOihpLGEsZik9PmE+Zj9NYXRoLm1pbihhLE1hdGgubWF4KGYsaSkpOk1hdGgubWluKGYsTWF0aC5tYXgoYSxpKSkscm91bmQ6aT0+TWF0aC5yb3VuZChpKjFlMTApLzFlMTB9LHVuaXQ6e2RlYzJoZXg6aT0+e2NvbnN0IGE9TWF0aC5yb3VuZChpKS50b1N0cmluZygxNik7cmV0dXJuIGEubGVuZ3RoPjE/YTpgMCR7YX1gfX19LG9rPXt9O2ZvcihsZXQgaT0wO2k8PTI1NTtpKyspb2tbaV09Z2EudW5pdC5kZWMyaGV4KGkpO2NvbnN0IHgwPXtBTEw6MCxSR0I6MSxIU0w6Mn07Y2xhc3MgaUNle2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPXgwLkFMTH1nZXQoKXtyZXR1cm4gdGhpcy50eXBlfXNldChhKXtpZih0aGlzLnR5cGUmJnRoaXMudHlwZSE9PWEpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZSIpO3RoaXMudHlwZT1hfXJlc2V0KCl7dGhpcy50eXBlPXgwLkFMTH1pcyhhKXtyZXR1cm4gdGhpcy50eXBlPT09YX19Y29uc3Qgc0NlPWlDZTtjbGFzcyBhQ2V7Y29uc3RydWN0b3IoYSxmKXt0aGlzLmNvbG9yPWYsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1hLHRoaXMudHlwZT1uZXcgc0NlfXNldChhLGYpe3JldHVybiB0aGlzLmNvbG9yPWYsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1hLHRoaXMudHlwZS50eXBlPXgwLkFMTCx0aGlzfV9lbnN1cmVIU0woKXtjb25zdCBhPXRoaXMuZGF0YSx7aDpmLHM6cCxsOnd9PWE7Zj09PXZvaWQgMCYmKGEuaD1nYS5jaGFubmVsLnJnYjJoc2woYSwiaCIpKSxwPT09dm9pZCAwJiYoYS5zPWdhLmNoYW5uZWwucmdiMmhzbChhLCJzIikpLHc9PT12b2lkIDAmJihhLmw9Z2EuY2hhbm5lbC5yZ2IyaHNsKGEsImwiKSl9X2Vuc3VyZVJHQigpe2NvbnN0IGE9dGhpcy5kYXRhLHtyOmYsZzpwLGI6d309YTtmPT09dm9pZCAwJiYoYS5yPWdhLmNoYW5uZWwuaHNsMnJnYihhLCJyIikpLHA9PT12b2lkIDAmJihhLmc9Z2EuY2hhbm5lbC5oc2wycmdiKGEsImciKSksdz09PXZvaWQgMCYmKGEuYj1nYS5jaGFubmVsLmhzbDJyZ2IoYSwiYiIpKX1nZXQgcigpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5yO3JldHVybiF0aGlzLnR5cGUuaXMoeDAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxnYS5jaGFubmVsLmhzbDJyZ2IoYSwiciIpKX1nZXQgZygpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5nO3JldHVybiF0aGlzLnR5cGUuaXMoeDAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxnYS5jaGFubmVsLmhzbDJyZ2IoYSwiZyIpKX1nZXQgYigpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5iO3JldHVybiF0aGlzLnR5cGUuaXMoeDAuSFNMKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVIU0woKSxnYS5jaGFubmVsLmhzbDJyZ2IoYSwiYiIpKX1nZXQgaCgpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5oO3JldHVybiF0aGlzLnR5cGUuaXMoeDAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxnYS5jaGFubmVsLnJnYjJoc2woYSwiaCIpKX1nZXQgcygpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5zO3JldHVybiF0aGlzLnR5cGUuaXMoeDAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxnYS5jaGFubmVsLnJnYjJoc2woYSwicyIpKX1nZXQgbCgpe2NvbnN0IGE9dGhpcy5kYXRhLGY9YS5sO3JldHVybiF0aGlzLnR5cGUuaXMoeDAuUkdCKSYmZiE9PXZvaWQgMD9mOih0aGlzLl9lbnN1cmVSR0IoKSxnYS5jaGFubmVsLnJnYjJoc2woYSwibCIpKX1nZXQgYSgpe3JldHVybiB0aGlzLmRhdGEuYX1zZXQgcihhKXt0aGlzLnR5cGUuc2V0KHgwLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPWF9c2V0IGcoYSl7dGhpcy50eXBlLnNldCh4MC5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz1hfXNldCBiKGEpe3RoaXMudHlwZS5zZXQoeDAuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9YX1zZXQgaChhKXt0aGlzLnR5cGUuc2V0KHgwLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPWF9c2V0IHMoYSl7dGhpcy50eXBlLnNldCh4MC5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz1hfXNldCBsKGEpe3RoaXMudHlwZS5zZXQoeDAuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9YX1zZXQgYShhKXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9YX19Y29uc3Qgb0NlPWFDZSxmVz1uZXcgb0NlKHtyOjAsZzowLGI6MCxhOjB9LCJ0cmFuc3BhcmVudCIpLEpEdD17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTppPT57aWYoaS5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuO2NvbnN0IGE9aS5tYXRjaChKRHQucmUpO2lmKCFhKXJldHVybjtjb25zdCBmPWFbMV0scD1wYXJzZUludChmLDE2KSx3PWYubGVuZ3RoLG09dyU0PT09MCxiPXc+NCxFPWI/MToxNyxfPWI/ODo0LEE9bT8wOi0xLEk9Yj8yNTU6MTU7cmV0dXJuIGZXLnNldCh7cjoocD4+XyooQSszKSZJKSpFLGc6KHA+Pl8qKEErMikmSSkqRSxiOihwPj5fKihBKzEpJkkpKkUsYTptPyhwJkkpKkUvMjU1OjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6YSxnOmYsYjpwLGE6d309aTtyZXR1cm4gdzwxP2AjJHtva1tNYXRoLnJvdW5kKGEpXX0ke29rW01hdGgucm91bmQoZildfSR7b2tbTWF0aC5yb3VuZChwKV19JHtva1tNYXRoLnJvdW5kKHcqMjU1KV19YDpgIyR7b2tbTWF0aC5yb3VuZChhKV19JHtva1tNYXRoLnJvdW5kKGYpXX0ke29rW01hdGgucm91bmQocCldfWB9fSxLUD1KRHQsZFc9e3JlOi9eaHNsYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyglKT8pKT9ccyo/XCkkL2ksaHVlUmU6L14oLis/KShkZWd8Z3JhZHxyYWR8dHVybikkL2ksX2h1ZTJkZWc6aT0+e2NvbnN0IGE9aS5tYXRjaChkVy5odWVSZSk7aWYoYSl7Y29uc3RbLGYscF09YTtzd2l0Y2gocCl7Y2FzZSJncmFkIjpyZXR1cm4gZ2EuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQoZikqLjkpO2Nhc2UicmFkIjpyZXR1cm4gZ2EuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQoZikqMTgwL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIGdhLmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KGYpKjM2MCl9fXJldHVybiBnYS5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChpKSl9LHBhcnNlOmk9Pntjb25zdCBhPWkuY2hhckNvZGVBdCgwKTtpZihhIT09MTA0JiZhIT09NzIpcmV0dXJuO2NvbnN0IGY9aS5tYXRjaChkVy5yZSk7aWYoIWYpcmV0dXJuO2NvbnN0WyxwLHcsbSxiLEVdPWY7cmV0dXJuIGZXLnNldCh7aDpkVy5faHVlMmRlZyhwKSxzOmdhLmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHcpKSxsOmdhLmNoYW5uZWwuY2xhbXAubChwYXJzZUZsb2F0KG0pKSxhOmI/Z2EuY2hhbm5lbC5jbGFtcC5hKEU/cGFyc2VGbG9hdChiKS8xMDA6cGFyc2VGbG9hdChiKSk6MX0saSl9LHN0cmluZ2lmeTppPT57Y29uc3R7aDphLHM6ZixsOnAsYTp3fT1pO3JldHVybiB3PDE/YGhzbGEoJHtnYS5sYW5nLnJvdW5kKGEpfSwgJHtnYS5sYW5nLnJvdW5kKGYpfSUsICR7Z2EubGFuZy5yb3VuZChwKX0lLCAke3d9KWA6YGhzbCgke2dhLmxhbmcucm91bmQoYSl9LCAke2dhLmxhbmcucm91bmQoZil9JSwgJHtnYS5sYW5nLnJvdW5kKHApfSUpYH19LGdXPWRXLHBXPXtjb2xvcnM6e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbmFxdWE6IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsdGFuOiIjZDJiNDhjIix0ZWFsOiIjMDA4MDgwIix0aGlzdGxlOiIjZDhiZmQ4Iix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIn0scGFyc2U6aT0+e2k9aS50b0xvd2VyQ2FzZSgpO2NvbnN0IGE9cFcuY29sb3JzW2ldO2lmKGEpcmV0dXJuIEtQLnBhcnNlKGEpfSxzdHJpbmdpZnk6aT0+e2NvbnN0IGE9S1Auc3RyaW5naWZ5KGkpO2Zvcihjb25zdCBmIGluIHBXLmNvbG9ycylpZihwVy5jb2xvcnNbZl09PT1hKXJldHVybiBmfX0sdEl0PXBXLGVJdD17cmU6L15yZ2JhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKT9ccyo/XCkkL2kscGFyc2U6aT0+e2NvbnN0IGE9aS5jaGFyQ29kZUF0KDApO2lmKGEhPT0xMTQmJmEhPT04MilyZXR1cm47Y29uc3QgZj1pLm1hdGNoKGVJdC5yZSk7aWYoIWYpcmV0dXJuO2NvbnN0WyxwLHcsbSxiLEUsXyxBLEldPWY7cmV0dXJuIGZXLnNldCh7cjpnYS5jaGFubmVsLmNsYW1wLnIodz9wYXJzZUZsb2F0KHApKjIuNTU6cGFyc2VGbG9hdChwKSksZzpnYS5jaGFubmVsLmNsYW1wLmcoYj9wYXJzZUZsb2F0KG0pKjIuNTU6cGFyc2VGbG9hdChtKSksYjpnYS5jaGFubmVsLmNsYW1wLmIoXz9wYXJzZUZsb2F0KEUpKjIuNTU6cGFyc2VGbG9hdChFKSksYTpBP2dhLmNoYW5uZWwuY2xhbXAuYShJP3BhcnNlRmxvYXQoQSkvMTAwOnBhcnNlRmxvYXQoQSkpOjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6YSxnOmYsYjpwLGE6d309aTtyZXR1cm4gdzwxP2ByZ2JhKCR7Z2EubGFuZy5yb3VuZChhKX0sICR7Z2EubGFuZy5yb3VuZChmKX0sICR7Z2EubGFuZy5yb3VuZChwKX0sICR7Z2EubGFuZy5yb3VuZCh3KX0pYDpgcmdiKCR7Z2EubGFuZy5yb3VuZChhKX0sICR7Z2EubGFuZy5yb3VuZChmKX0sICR7Z2EubGFuZy5yb3VuZChwKX0pYH19LGJXPWVJdCxlbT17Zm9ybWF0OntrZXl3b3JkOnRJdCxoZXg6S1AscmdiOmJXLHJnYmE6YlcsaHNsOmdXLGhzbGE6Z1d9LHBhcnNlOmk9PntpZih0eXBlb2YgaSE9InN0cmluZyIpcmV0dXJuIGk7Y29uc3QgYT1LUC5wYXJzZShpKXx8YlcucGFyc2UoaSl8fGdXLnBhcnNlKGkpfHx0SXQucGFyc2UoaSk7aWYoYSlyZXR1cm4gYTt0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIiR7aX0iYCl9LHN0cmluZ2lmeTppPT4haS5jaGFuZ2VkJiZpLmNvbG9yP2kuY29sb3I6aS50eXBlLmlzKHgwLkhTTCl8fGkuZGF0YS5yPT09dm9pZCAwP2dXLnN0cmluZ2lmeShpKTppLmE8MXx8IU51bWJlci5pc0ludGVnZXIoaS5yKXx8IU51bWJlci5pc0ludGVnZXIoaS5nKXx8IU51bWJlci5pc0ludGVnZXIoaS5iKT9iVy5zdHJpbmdpZnkoaSk6S1Auc3RyaW5naWZ5KGkpfSxuSXQ9KGksYSk9Pntjb25zdCBmPWVtLnBhcnNlKGkpO2Zvcihjb25zdCBwIGluIGEpZltwXT1nYS5jaGFubmVsLmNsYW1wW3BdKGFbcF0pO3JldHVybiBlbS5zdHJpbmdpZnkoZil9LEZBPShpLGEsZj0wLHA9MSk9PntpZih0eXBlb2YgaSE9Im51bWJlciIpcmV0dXJuIG5JdChpLHthfSk7Y29uc3Qgdz1mVy5zZXQoe3I6Z2EuY2hhbm5lbC5jbGFtcC5yKGkpLGc6Z2EuY2hhbm5lbC5jbGFtcC5nKGEpLGI6Z2EuY2hhbm5lbC5jbGFtcC5iKGYpLGE6Z2EuY2hhbm5lbC5jbGFtcC5hKHApfSk7cmV0dXJuIGVtLnN0cmluZ2lmeSh3KX0sY0NlPShpLGEpPT5nYS5sYW5nLnJvdW5kKGVtLnBhcnNlKGkpW2FdKSx1Q2U9aT0+e2NvbnN0e3I6YSxnOmYsYjpwfT1lbS5wYXJzZShpKSx3PS4yMTI2KmdhLmNoYW5uZWwudG9MaW5lYXIoYSkrLjcxNTIqZ2EuY2hhbm5lbC50b0xpbmVhcihmKSsuMDcyMipnYS5jaGFubmVsLnRvTGluZWFyKHApO3JldHVybiBnYS5sYW5nLnJvdW5kKHcpfSxsQ2U9aT0+dUNlKGkpPj0uNSxpVD1pPT4hbENlKGkpLHJJdD0oaSxhLGYpPT57Y29uc3QgcD1lbS5wYXJzZShpKSx3PXBbYV0sbT1nYS5jaGFubmVsLmNsYW1wW2FdKHcrZik7cmV0dXJuIHchPT1tJiYocFthXT1tKSxlbS5zdHJpbmdpZnkocCl9LGJzPShpLGEpPT5ySXQoaSwibCIsYSksJHM9KGksYSk9PnJJdChpLCJsIiwtYSkseG49KGksYSk9Pntjb25zdCBmPWVtLnBhcnNlKGkpLHA9e307Zm9yKGNvbnN0IHcgaW4gYSlhW3ddJiYocFt3XT1mW3ddK2Fbd10pO3JldHVybiBuSXQoaSxwKX0saENlPShpLGEsZj01MCk9Pntjb25zdHtyOnAsZzp3LGI6bSxhOmJ9PWVtLnBhcnNlKGkpLHtyOkUsZzpfLGI6QSxhOkl9PWVtLnBhcnNlKGEpLEI9Zi8xMDAsTj1CKjItMSxSPWItSSxXPSgoTipSPT09LTE/TjooTitSKS8oMStOKlIpKSsxKS8yLGV0PTEtVyxzdD1wKlcrRSpldCxhdD13KlcrXypldCxidD1tKlcrQSpldCxtdD1iKkIrSSooMS1CKTtyZXR1cm4gRkEoc3QsYXQsYnQsbXQpfSxEaT0oaSxhPTEwMCk9Pntjb25zdCBmPWVtLnBhcnNlKGkpO3JldHVybiBmLnI9MjU1LWYucixmLmc9MjU1LWYuZyxmLmI9MjU1LWYuYixoQ2UoZixpLGEpfSxsZz0oaSxhKT0+YT94bihpLHtzOi00MCxsOjEwfSk6eG4oaSx7czotNDAsbDotMTB9KSx3Vz0iI2ZmZmZmZiIsdlc9IiNmMmYyZjIiO2xldCBmQ2U9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjZmZmNGRkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSIjMzMzIix0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4In11cGRhdGVDb2xvcnMoKXt2YXIgZixwLHcsbSxiLEUsXyxBLEksQixOO2lmKHRoaXMucHJpbWFyeVRleHRDb2xvcj10aGlzLnByaW1hcnlUZXh0Q29sb3J8fCh0aGlzLmRhcmtNb2RlPyIjZWVlIjoiIzMzMyIpLHRoaXMuc2Vjb25kYXJ5Q29sb3I9dGhpcy5zZWNvbmRhcnlDb2xvcnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTEyMH0pLHRoaXMudGVydGlhcnlDb2xvcj10aGlzLnRlcnRpYXJ5Q29sb3J8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE4MCxsOjV9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcnx8bGcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yfHxsZyh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj10aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3J8fGxnKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLm5vdGVCb3JkZXJDb2xvcnx8bGcodGhpcy5ub3RlQmtnQ29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQmtnQ29sb3I9dGhpcy5ub3RlQmtnQ29sb3J8fCIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5ub3RlVGV4dENvbG9yfHwiIzMzMyIsdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3J8fERpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9dGhpcy50ZXJ0aWFyeVRleHRDb2xvcnx8RGkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcnx8RGkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmFycm93aGVhZENvbG9yPXRoaXMuYXJyb3doZWFkQ29sb3J8fERpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmJvcmRlcjI9dGhpcy5ib3JkZXIyfHx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IsdGhpcy5ub2RlQmtnPXRoaXMubm9kZUJrZ3x8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5tYWluQmtnPXRoaXMubWFpbkJrZ3x8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5ub2RlQm9yZGVyPXRoaXMubm9kZUJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5jbHVzdGVyQmtnPXRoaXMuY2x1c3RlckJrZ3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmNsdXN0ZXJCb3JkZXJ8fHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5kZWZhdWx0TGlua0NvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50aXRsZUNvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD10aGlzLmVkZ2VMYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlPyRzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMubm9kZVRleHRDb2xvcj10aGlzLm5vZGVUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYWN0b3JCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYWN0b3JCa2c9dGhpcy5hY3RvckJrZ3x8dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckxpbmVDb2xvcnx8ImdyZXkiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmxhYmVsQm94QmtnQ29sb3J8fHRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnNpZ25hbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnNpZ25hbFRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcnx8dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubGFiZWxUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubG9vcFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcnx8JHModGhpcy5zZWNvbmRhcnlDb2xvciwxMCksdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5hY3RpdmF0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPXRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcnx8RGkodGhpcy5saW5lQ29sb3IpLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5hbHRTZWN0aW9uQmtnQ29sb3J8fCJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPXRoaXMuc2VjdGlvbkJrZ0NvbG9yMnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5leGNsdWRlQmtnQ29sb3I9dGhpcy5leGNsdWRlQmtnQ29sb3J8fCIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YXNrQmtnQ29sb3I9dGhpcy50YXNrQmtnQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcnx8YnModGhpcy5wcmltYXJ5Q29sb3IsMjMpLHRoaXMuZ3JpZENvbG9yPXRoaXMuZ3JpZENvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lVGFza0JrZ0NvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5kb25lVGFza0JvcmRlckNvbG9yfHwiZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9dGhpcy5jcml0Qm9yZGVyQ29sb3J8fCIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRCa2dDb2xvcnx8InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLnRvZGF5TGluZUNvbG9yfHwicmVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRPdXRzaWRlQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRMaWdodENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9dGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfHwiIzAwMzE2MyIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wZXJzb25Cb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMucGVyc29uQmtnfHx0aGlzLm1haW5Ca2csdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoyMTAsbDoxNTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSksdGhpcy5kYXJrTW9kZSlmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbImNTY2FsZSIrUl09JHModGhpc1siY1NjYWxlIitSXSw3NSk7ZWxzZSBmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbImNTY2FsZSIrUl09JHModGhpc1siY1NjYWxlIitSXSwyNSk7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVJbnYiK1JdPXRoaXNbImNTY2FsZUludiIrUl18fERpKHRoaXNbImNTY2FsZSIrUl0pO2ZvcihsZXQgUj0wO1I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtSKyspdGhpcy5kYXJrTW9kZT90aGlzWyJjU2NhbGVQZWVyIitSXT10aGlzWyJjU2NhbGVQZWVyIitSXXx8YnModGhpc1siY1NjYWxlIitSXSwxMCk6dGhpc1siY1NjYWxlUGVlciIrUl09dGhpc1siY1NjYWxlUGVlciIrUl18fCRzKHRoaXNbImNTY2FsZSIrUl0sMTApO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHx0aGlzLmxhYmVsVGV4dENvbG9yO2ZvcihsZXQgUj0wO1I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtSKyspdGhpc1siY1NjYWxlTGFiZWwiK1JdPXRoaXNbImNTY2FsZUxhYmVsIitSXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Y29uc3QgYT10aGlzLmRhcmtNb2RlPy00Oi0xO2ZvcihsZXQgUj0wO1I8NTtSKyspdGhpc1sic3VyZmFjZSIrUl09dGhpc1sic3VyZmFjZSIrUl18fHhuKHRoaXMubWFpbkJrZyx7aDoxODAsczotMTUsbDphKig1K1IqMyl9KSx0aGlzWyJzdXJmYWNlUGVlciIrUl09dGhpc1sic3VyZmFjZVBlZXIiK1JdfHx4bih0aGlzLm1haW5Ca2cse2g6MTgwLHM6LTE1LGw6YSooOCtSKjMpfSk7dGhpcy5jbGFzc1RleHQ9dGhpcy5jbGFzc1RleHR8fHRoaXMudGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMuZmlsbFR5cGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLmZpbGxUeXBlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj10aGlzLmZpbGxUeXBlMnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz10aGlzLmZpbGxUeXBlM3x8eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PXRoaXMuZmlsbFR5cGU0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT10aGlzLmZpbGxUeXBlNXx8eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj10aGlzLmZpbGxUeXBlNnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9dGhpcy5maWxsVHlwZTd8fHhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5waWU0PXRoaXMucGllNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHx4bih0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU3PXRoaXMucGllN3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTIwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGlUKHRoaXMucXVhZHJhbnQxRmlsbCk/YnModGhpcy5xdWFkcmFudDFGaWxsKTokcyh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjooKGY9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Zi5iYWNrZ3JvdW5kQ29sb3IpfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjooKHA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6cC50aXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjooKHc9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dy54QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOigobT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDptLnhBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjooKGI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Yi54QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjooKEU9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6RS54QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjooKEE9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6QS55QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6KChJPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkkueUF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6KChCPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkIueUF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTooKE49dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Ti5wbG90Q29sb3JQYWxldHRlKXx8IiNGRkY0REQsI0ZGRDhCMSwjRkZBMDdBLCNFQ0VGRjEsI0Q2REJERiwjQzNFMEE4LCNGRkI2QTQsI0ZGRDc0RCwjNzM4RkE3LCNGRkZGRjAifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlPyRzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPWJzKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPWJzKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPWJzKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPWJzKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PWJzKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PWJzKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PWJzKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PWJzKHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9JHModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9JHModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9JHModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9JHModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9JHModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9JHModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9JHModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9JHModGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8RGkodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxEaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fERpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8RGkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxEaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fERpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8RGkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxEaSh0aGlzLmdpdDcpLHRoaXMuYnJhbmNoTGFiZWxDb2xvcj10aGlzLmJyYW5jaExhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8d1csdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8dld9Y2FsY3VsYXRlKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgZj1PYmplY3Qua2V5cyhhKTtmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksZi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KX19O2NvbnN0IGRDZT1pPT57Y29uc3QgYT1uZXcgZkNlO3JldHVybiBhLmNhbGN1bGF0ZShpKSxhfTtsZXQgZ0NlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjMzMzIix0aGlzLnByaW1hcnlDb2xvcj0iIzFmMjAyMCIsdGhpcy5zZWNvbmRhcnlDb2xvcj1icyh0aGlzLnByaW1hcnlDb2xvciwxNiksdGhpcy50ZXJ0aWFyeUNvbG9yPXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1EaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9bGcodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9bGcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1EaSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9RGkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1EaSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPURpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9RGkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiMxZjIwMjAiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLm1haW5Db250cmFzdENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZGFya1RleHRDb2xvcj1icyhEaSgiIzMyM0Q0NyIpLDEwKSx0aGlzLmxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ib3JkZXIxPSIjODFCMURCIix0aGlzLmJvcmRlcjI9RkEoMjU1LDI1NSwyNTUsLjI1KSx0aGlzLmFycm93aGVhZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5sYWJlbEJhY2tncm91bmQ9IiMxODE4MTgiLHRoaXMudGV4dENvbG9yPSIjY2NjIix0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9IiNGOUZGRkUiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0iYmxhY2siLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSRzKCIjRUFFOEQ5IiwzMCksdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI0VBRThEOSIsdGhpcy5leGNsdWRlQmtnQ29sb3I9JHModGhpcy5zZWN0aW9uQmtnQ29sb3IsMTApLHRoaXMudGFza0JvcmRlckNvbG9yPUZBKDI1NSwyNTUsMjU1LDcwKSx0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj1GQSgyNTUsMjU1LDI1NSw1MCksdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9IiM4MUIxREIiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNFODM3MzciLHRoaXMuY3JpdEJrZ0NvbG9yPSIjRTgzNzM3Iix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSIjREI1NzU3Iix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVycm9yQmtnQ29sb3I9IiNhNDQxNDEiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiNkZGQifXVwZGF0ZUNvbG9ycygpe3ZhciBhLGYscCx3LG0sYixFLF8sQSxJLEI7dGhpcy5zZWNvbmRCa2c9YnModGhpcy5tYWluQmtnLDE2KSx0aGlzLmxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD1icyh0aGlzLmxhYmVsQmFja2dyb3VuZCwyNSksdGhpcy5hY3RvckJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcix0aGlzLm5vdGVCa2dDb2xvcj10aGlzLnNlY29uZEJrZyx0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYmFja2dyb3VuZCx0aGlzLnRhc2tCa2dDb2xvcj1icyh0aGlzLm1haW5Ca2csMjMpLHRoaXMudGFza1RleHRDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMuZ3JpZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiM1NTUiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjZjRmNGY0Iix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj14bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fCIjMGIwMDAwIix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHwiIzRkMTAzNyIsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8IiMzZjUyNTgiLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fCIjNGYyZjFiIix0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHwiIzZlMGEwYSIsdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8IiMzYjAwNDgiLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fCIjOTk1YTAxIix0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHwiIzE1NDcwNiIsdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8IiMxNjE3MjIiLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8IiMwMDI5NmYiLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8IiMwMTYyOWMiLHRoaXMuY1NjYWxlMTI9dGhpcy5jU2NhbGUxMnx8IiMwMTAwMjkiLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KTtmb3IobGV0IE49MDtOPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7TisrKXRoaXNbImNTY2FsZUludiIrTl09dGhpc1siY1NjYWxlSW52IitOXXx8RGkodGhpc1siY1NjYWxlIitOXSk7Zm9yKGxldCBOPTA7Tjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO04rKyl0aGlzWyJjU2NhbGVQZWVyIitOXT10aGlzWyJjU2NhbGVQZWVyIitOXXx8YnModGhpc1siY1NjYWxlIitOXSwxMCk7Zm9yKGxldCBOPTA7Tjw1O04rKyl0aGlzWyJzdXJmYWNlIitOXT10aGlzWyJzdXJmYWNlIitOXXx8eG4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSgtMTArTio0KX0pLHRoaXNbInN1cmZhY2VQZWVyIitOXT10aGlzWyJzdXJmYWNlUGVlciIrTl18fHhuKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oLTcrTio0KX0pO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHwodGhpcy5kYXJrTW9kZT8iYmxhY2siOnRoaXMubGFiZWxUZXh0Q29sb3IpO2ZvcihsZXQgTj0wO048dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtOKyspdGhpc1siY1NjYWxlTGFiZWwiK05dPXRoaXNbImNTY2FsZUxhYmVsIitOXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Zm9yKGxldCBOPTA7Tjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO04rKyl0aGlzWyJwaWUiK05dPXRoaXNbImNTY2FsZSIrTl07dGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxpVCh0aGlzLnF1YWRyYW50MUZpbGwpP2JzKHRoaXMucXVhZHJhbnQxRmlsbCk6JHModGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6KChhPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmEuYmFja2dyb3VuZENvbG9yKXx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6KChmPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmYudGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6KChwPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnAueEF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjooKHc9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dy54QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6KChtPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOm0ueEF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6KChiPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmIueEF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOigoRT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpFLnlBeGlzVGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNMYWJlbENvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOigoQT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpBLnlBeGlzVGlja0NvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOigoST10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpJLnlBeGlzTGluZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6KChCPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkIucGxvdENvbG9yUGFsZXR0ZSl8fCIjMzQ5OGRiLCMyZWNjNzEsI2U3NGMzYywjZjFjNDBmLCNiZGMzYzcsI2ZmZmZmZiwjMzQ0OTVlLCM5YjU5YjYsIzFhYmM5YywjZTY3ZTIyIn0sdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/JHModGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPWJzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0MT1icyh0aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0Mj1icyh0aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvciwyMCksdGhpcy5naXQzPWJzKHRoaXMucGllNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksMjApLHRoaXMuZ2l0ND1icyh0aGlzLnBpZTV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLDIwKSx0aGlzLmdpdDU9YnModGhpcy5waWU2fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSwxMCksdGhpcy5naXQ2PWJzKHRoaXMucGllN3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSwxMCksdGhpcy5naXQ3PWJzKHRoaXMucGllOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksMjApLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fERpKHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8RGkodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxEaSh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fERpKHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8RGkodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxEaSh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fERpKHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8RGkodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8RGkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fERpKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8YnModGhpcy5iYWNrZ3JvdW5kLDEyKSx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxicyh0aGlzLmJhY2tncm91bmQsMil9Y2FsY3VsYXRlKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgZj1PYmplY3Qua2V5cyhhKTtmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksZi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KX19O2NvbnN0IHBDZT1pPT57Y29uc3QgYT1uZXcgZ0NlO3JldHVybiBhLmNhbGN1bGF0ZShpKSxhfTtsZXQgYkNlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI0VDRUNGRiIsdGhpcy5zZWNvbmRhcnlDb2xvcj14bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLnNlY29uZGFyeUNvbG9yPSIjZmZmZmRlIix0aGlzLnRlcnRpYXJ5Q29sb3I9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPWxnKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9bGcodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9bGcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1EaSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9RGkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1EaSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPURpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9RGkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kQmtnPSIjZmZmZmRlIix0aGlzLmxpbmVDb2xvcj0iIzMzMzMzMyIsdGhpcy5ib3JkZXIxPSIjOTM3MERCIix0aGlzLmJvcmRlcjI9IiNhYWFhMzMiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iI2U4ZThlOCIsdGhpcy50ZXh0Q29sb3I9IiMzMzMiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iZ3JleSIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPUZBKDEwMiwxMDIsMjU1LC40OSksdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNmZmY0MDAiLHRoaXMudGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLnRhc2tCa2dDb2xvcj0iIzhhOTBkZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iI2JmYzdmZiIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiIsdGhpcy51cGRhdGVDb2xvcnMoKX11cGRhdGVDb2xvcnMoKXt2YXIgYSxmLHAsdyxtLGIsRSxfLEEsSSxCO3RoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzWyJjU2NhbGVQZWVyMSJdPXRoaXNbImNTY2FsZVBlZXIxIl18fCRzKHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXNbImNTY2FsZVBlZXIyIl09dGhpc1siY1NjYWxlUGVlcjIiXXx8JHModGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IE49MDtOPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7TisrKXRoaXNbImNTY2FsZSIrTl09JHModGhpc1siY1NjYWxlIitOXSwxMCksdGhpc1siY1NjYWxlUGVlciIrTl09dGhpc1siY1NjYWxlUGVlciIrTl18fCRzKHRoaXNbImNTY2FsZSIrTl0sMjUpO2ZvcihsZXQgTj0wO048dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtOKyspdGhpc1siY1NjYWxlSW52IitOXT10aGlzWyJjU2NhbGVJbnYiK05dfHx4bih0aGlzWyJjU2NhbGUiK05dLHtoOjE4MH0pO2ZvcihsZXQgTj0wO048NTtOKyspdGhpc1sic3VyZmFjZSIrTl09dGhpc1sic3VyZmFjZSIrTl18fHhuKHRoaXMubWFpbkJrZyx7aDozMCxsOi0oNStOKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK05dPXRoaXNbInN1cmZhY2VQZWVyIitOXXx8eG4odGhpcy5tYWluQmtnLHtoOjMwLGw6LSg3K04qNSl9KTtpZih0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvciE9PSJjYWxjdWxhdGVkIiYmdGhpcy5zY2FsZUxhYmVsQ29sb3I/dGhpcy5zY2FsZUxhYmVsQ29sb3I6dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmxhYmVsVGV4dENvbG9yIT09ImNhbGN1bGF0ZWQiKXt0aGlzLmNTY2FsZUxhYmVsMD10aGlzLmNTY2FsZUxhYmVsMHx8RGkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5jU2NhbGVMYWJlbDM9dGhpcy5jU2NhbGVMYWJlbDN8fERpKHRoaXMubGFiZWxUZXh0Q29sb3IpO2ZvcihsZXQgTj0wO048dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtOKyspdGhpc1siY1NjYWxlTGFiZWwiK05dPXRoaXNbImNTY2FsZUxhYmVsIitOXXx8dGhpcy5sYWJlbFRleHRDb2xvcn10aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5hY3RvckJvcmRlcj1icyh0aGlzLmJvcmRlcjEsMjMpLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjZjBmMGYwIix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5ub2RlQm9yZGVyLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj14bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8eG4odGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi00MH0pLHRoaXMucGllND10aGlzLnBpZTR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fHhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8eG4odGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0yMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWU4PXRoaXMucGllOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTQwfSksdGhpcy5waWU5PXRoaXMucGllOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTQwfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi00MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwLGw6LTQwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMzB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHx4bih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fHhuKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGlUKHRoaXMucXVhZHJhbnQxRmlsbCk/YnModGhpcy5xdWFkcmFudDFGaWxsKTokcyh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjooKGE9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6YS5iYWNrZ3JvdW5kQ29sb3IpfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjooKGY9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Zi50aXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjooKHA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6cC54QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOigodz10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp3LnhBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjooKG09dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6bS54QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjooKGI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Yi54QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6KChFPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkUueUF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjooKF89dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Xy55QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6KChBPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkEueUF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6KChJPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkkueUF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTooKEI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Qi5wbG90Q29sb3JQYWxldHRlKXx8IiNFQ0VDRkYsIzg0OTNBNiwjRkZDM0EwLCNEQ0RERTEsI0I4RTk5NCwjRDFBMzZGLCNDM0NERTYsI0ZGQjZDMSwjNDk2MDc4LCNGOEYzRTMifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMubGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPWJzKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPWJzKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPWJzKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPWJzKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PWJzKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PWJzKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PWJzKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PWJzKHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9JHModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9JHModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9JHModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9JHModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9JHModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9JHModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9JHModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9JHModGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8JHMoRGkodGhpcy5naXQwKSwyNSksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8RGkodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxEaSh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fERpKHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8RGkodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxEaSh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fERpKHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8RGkodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8RGkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fERpKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8d1csdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8dld9Y2FsY3VsYXRlKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgZj1PYmplY3Qua2V5cyhhKTtmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksZi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KX19O2NvbnN0IFgxdD1pPT57Y29uc3QgYT1uZXcgYkNlO3JldHVybiBhLmNhbGN1bGF0ZShpKSxhfTtsZXQgd0NlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2NkZTQ5OCIsdGhpcy5zZWNvbmRhcnlDb2xvcj0iI2NkZmZiMiIsdGhpcy5iYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5tYWluQmtnPSIjY2RlNDk4Iix0aGlzLnNlY29uZEJrZz0iI2NkZmZiMiIsdGhpcy5saW5lQ29sb3I9ImdyZWVuIix0aGlzLmJvcmRlcjE9IiMxMzU0MGMiLHRoaXMuYm9yZGVyMj0iIzZlYWE0OSIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iZ3JlZW4iLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLnRlcnRpYXJ5Q29sb3I9YnMoIiNjZGU0OTgiLDEwKSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1sZyh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPWxnKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPWxnKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9RGkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPURpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9RGkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPURpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9RGkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9IiMzMzMiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iI2U4ZThlOCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iYmxhY2siLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImdyZXkiLHRoaXMuc2lnbmFsQ29sb3I9IiMzMzMiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSIjMzMzIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iIzMyNjkzMiIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9IiM2NjYiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSIjZjRmNGY0Iix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0iIzZlYWE0OSIsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiM2ZWFhNDkiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9IiM0ODdlM2EiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXVwZGF0ZUNvbG9ycygpe3ZhciBhLGYscCx3LG0sYixFLF8sQSxJLEI7dGhpcy5hY3RvckJvcmRlcj0kcyh0aGlzLm1haW5Ca2csMjApLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pLHRoaXNbImNTY2FsZVBlZXIxIl09dGhpc1siY1NjYWxlUGVlcjEiXXx8JHModGhpcy5zZWNvbmRhcnlDb2xvciw0NSksdGhpc1siY1NjYWxlUGVlcjIiXT10aGlzWyJjU2NhbGVQZWVyMiJdfHwkcyh0aGlzLnRlcnRpYXJ5Q29sb3IsNDApO2ZvcihsZXQgTj0wO048dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtOKyspdGhpc1siY1NjYWxlIitOXT0kcyh0aGlzWyJjU2NhbGUiK05dLDEwKSx0aGlzWyJjU2NhbGVQZWVyIitOXT10aGlzWyJjU2NhbGVQZWVyIitOXXx8JHModGhpc1siY1NjYWxlIitOXSwyNSk7Zm9yKGxldCBOPTA7Tjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO04rKyl0aGlzWyJjU2NhbGVJbnYiK05dPXRoaXNbImNTY2FsZUludiIrTl18fHhuKHRoaXNbImNTY2FsZSIrTl0se2g6MTgwfSk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3IhPT0iY2FsY3VsYXRlZCImJnRoaXMuc2NhbGVMYWJlbENvbG9yP3RoaXMuc2NhbGVMYWJlbENvbG9yOnRoaXMubGFiZWxUZXh0Q29sb3I7Zm9yKGxldCBOPTA7Tjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO04rKyl0aGlzWyJjU2NhbGVMYWJlbCIrTl09dGhpc1siY1NjYWxlTGFiZWwiK05dfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IE49MDtOPDU7TisrKXRoaXNbInN1cmZhY2UiK05dPXRoaXNbInN1cmZhY2UiK05dfHx4bih0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKDUrTio1KX0pLHRoaXNbInN1cmZhY2VQZWVyIitOXT10aGlzWyJzdXJmYWNlUGVlciIrTl18fHhuKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oOCtOKjUpfSk7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Ca2csdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9eG4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLnBpZTQ9dGhpcy5waWU0fHx4bih0aGlzLnByaW1hcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHx4bih0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fHhuKHRoaXMudGVydGlhcnlDb2xvcix7aDo0MCxsOi00MH0pLHRoaXMucGllNz10aGlzLnBpZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTEwfSksdGhpcy5waWU4PXRoaXMucGllOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotNTB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi01MH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTUwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxpVCh0aGlzLnF1YWRyYW50MUZpbGwpP2JzKHRoaXMucXVhZHJhbnQxRmlsbCk6JHModGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6KChhPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmEuYmFja2dyb3VuZENvbG9yKXx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6KChmPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmYudGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6KChwPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnAueEF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjooKHc9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dy54QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6KChtPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOm0ueEF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6KChiPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmIueEF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOigoRT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpFLnlBeGlzVGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNMYWJlbENvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOigoQT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpBLnlBeGlzVGlja0NvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOigoST10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpJLnlBeGlzTGluZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6KChCPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkIucGxvdENvbG9yUGFsZXR0ZSl8fCIjQ0RFNDk4LCNGRjZCNkIsI0EwRDJEQiwjRDdCREUyLCNGMEYwRjAsI0ZGQzNBMCwjN0ZEOEJFLCNGRjlBOEIsI0ZBRjNFMCwjRkZGMTc2In0sdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQsdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPXRoaXMuZ2l0MHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMuZ2l0MXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5naXQyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMuZ2l0M3x8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMuZ2l0NHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMuZ2l0NXx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMuZ2l0Nnx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5naXQ3fHx4bih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmRhcmtNb2RlPyh0aGlzLmdpdDA9YnModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9YnModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9YnModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9YnModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9YnModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9YnModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9YnModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9YnModGhpcy5naXQ3LDI1KSk6KHRoaXMuZ2l0MD0kcyh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT0kcyh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj0kcyh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz0kcyh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND0kcyh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT0kcyh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj0kcyh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz0kcyh0aGlzLmdpdDcsMjUpKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxEaSh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fERpKHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8RGkodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxEaSh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fERpKHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8RGkodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxEaSh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fERpKHRoaXMuZ2l0NyksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fERpKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPXRoaXMuZ2l0QnJhbmNoTGFiZWwzfHxEaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmdpdEJyYW5jaExhYmVsNXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fHdXLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fHZXfWNhbGN1bGF0ZShhKXtpZih0eXBlb2YgYSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWNvbnN0IGY9T2JqZWN0LmtleXMoYSk7Zi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KSx0aGlzLnVwZGF0ZUNvbG9ycygpLGYuZm9yRWFjaChwPT57dGhpc1twXT1hW3BdfSl9fTtjb25zdCB2Q2U9aT0+e2NvbnN0IGE9bmV3IHdDZTtyZXR1cm4gYS5jYWxjdWxhdGUoaSksYX07Y2xhc3MgbUNle2NvbnN0cnVjdG9yKCl7dGhpcy5wcmltYXJ5Q29sb3I9IiNlZWUiLHRoaXMuY29udHJhc3Q9IiM3MDcwNzAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9YnModGhpcy5jb250cmFzdCw1NSksdGhpcy5iYWNrZ3JvdW5kPSIjZmZmZmZmIix0aGlzLnRlcnRpYXJ5Q29sb3I9eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPWxnKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9bGcodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9bGcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1EaSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9RGkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1EaSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPURpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9RGkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiNlZWUiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLmxpbmVDb2xvcj0iIzY2NiIsdGhpcy5ib3JkZXIxPSIjOTk5Iix0aGlzLmJvcmRlcjI9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZT0iI2ZmYSIsdGhpcy50ZXh0PSIjMzMzIix0aGlzLmNyaXRpY2FsPSIjZDQyIix0aGlzLmRvbmU9IiNiYmIiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0id2hpdGUiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9IiM2NjYiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSIjZjRmNGY0Iix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXVwZGF0ZUNvbG9ycygpe3ZhciBhLGYscCx3LG0sYixFLF8sQSxJLEI7dGhpcy5zZWNvbmRCa2c9YnModGhpcy5jb250cmFzdCw1NSksdGhpcy5ib3JkZXIyPXRoaXMuY29udHJhc3QsdGhpcy5hY3RvckJvcmRlcj1icyh0aGlzLmJvcmRlcjEsMjMpLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5zaWduYWxDb2xvcj10aGlzLnRleHQsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubG9vcFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5ub3RlQm9yZGVyQ29sb3I9IiM5OTkiLHRoaXMubm90ZUJrZ0NvbG9yPSIjNjY2Iix0aGlzLm5vdGVUZXh0Q29sb3I9IiNmZmYiLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fCIjNTU1Iix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHwiI0Y0RjRGNCIsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8IiM1NTUiLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fCIjQkJCIix0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHwiIzc3NyIsdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8IiM5OTkiLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fCIjREREIix0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHwiI0ZGRiIsdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8IiNEREQiLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fCIjQkJCIix0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fCIjOTk5Iix0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fCIjNzc3Ijtmb3IobGV0IE49MDtOPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7TisrKXRoaXNbImNTY2FsZUludiIrTl09dGhpc1siY1NjYWxlSW52IitOXXx8RGkodGhpc1siY1NjYWxlIitOXSk7Zm9yKGxldCBOPTA7Tjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO04rKyl0aGlzLmRhcmtNb2RlP3RoaXNbImNTY2FsZVBlZXIiK05dPXRoaXNbImNTY2FsZVBlZXIiK05dfHxicyh0aGlzWyJjU2NhbGUiK05dLDEwKTp0aGlzWyJjU2NhbGVQZWVyIitOXT10aGlzWyJjU2NhbGVQZWVyIitOXXx8JHModGhpc1siY1NjYWxlIitOXSwxMCk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5jU2NhbGVMYWJlbDA9dGhpcy5jU2NhbGVMYWJlbDB8fHRoaXMuY1NjYWxlMSx0aGlzLmNTY2FsZUxhYmVsMj10aGlzLmNTY2FsZUxhYmVsMnx8dGhpcy5jU2NhbGUxO2ZvcihsZXQgTj0wO048dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtOKyspdGhpc1siY1NjYWxlTGFiZWwiK05dPXRoaXNbImNTY2FsZUxhYmVsIitOXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Zm9yKGxldCBOPTA7Tjw1O04rKyl0aGlzWyJzdXJmYWNlIitOXT10aGlzWyJzdXJmYWNlIitOXXx8eG4odGhpcy5tYWluQmtnLHtsOi0oNStOKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK05dPXRoaXNbInN1cmZhY2VQZWVyIitOXXx8eG4odGhpcy5tYWluQmtnLHtsOi0oOCtOKjUpfSk7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2VjdGlvbkJrZ0NvbG9yPWJzKHRoaXMuY29udHJhc3QsMzApLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj1icyh0aGlzLmNvbnRyYXN0LDMwKSx0aGlzLnRhc2tCb3JkZXJDb2xvcj0kcyh0aGlzLmNvbnRyYXN0LDEwKSx0aGlzLnRhc2tCa2dDb2xvcj10aGlzLmNvbnRyYXN0LHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGV4dCx0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMuZ3JpZENvbG9yPWJzKHRoaXMuYm9yZGVyMSwzMCksdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZSx0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0aWNhbCx0aGlzLmNyaXRCb3JkZXJDb2xvcj0kcyh0aGlzLmNyaXRCa2dDb2xvciwxMCksdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLmNyaXRCa2dDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8IiMwMDAiLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmNGY0ZjQiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5zdGF0ZUJvcmRlcj10aGlzLnN0YXRlQm9yZGVyfHwiIzAwMCIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj0iIzIyMiIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj14bih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND14bih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT14bih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PXhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXhuKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSk7Zm9yKGxldCBOPTA7Tjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO04rKyl0aGlzWyJwaWUiK05dPXRoaXNbImNTY2FsZSIrTl07dGhpcy5waWUxMj10aGlzLnBpZTAsdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHx4bih0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxpVCh0aGlzLnF1YWRyYW50MUZpbGwpP2JzKHRoaXMucXVhZHJhbnQxRmlsbCk6JHModGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6KChhPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmEuYmFja2dyb3VuZENvbG9yKXx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6KChmPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmYudGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6KChwPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnAueEF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjooKHc9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dy54QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6KChtPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOm0ueEF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6KChiPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOmIueEF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOigoRT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpFLnlBeGlzVGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNMYWJlbENvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOigoQT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpBLnlBeGlzVGlja0NvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOigoST10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpJLnlBeGlzTGluZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6KChCPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkIucGxvdENvbG9yUGFsZXR0ZSl8fCIjRUVFLCM2QkI4RTQsIzhBQ0I4OCwjQzdBQ0Q2LCNFOERDQzIsI0ZGQjJBOCwjRkZGMzgwLCM3RThEOTEsI0ZGRDhCMSwjRkFGM0UwIn0sdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQsdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPSRzKHRoaXMucGllMSwyNSl8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLnBpZTR8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLnBpZTV8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLnBpZTZ8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLnBpZTd8fHhuKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMucGllOHx8eG4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8RGkodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxEaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fERpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8RGkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxEaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fERpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8RGkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxEaSh0aGlzLmdpdDcpLHRoaXMuYnJhbmNoTGFiZWxDb2xvcj10aGlzLmJyYW5jaExhYmVsQ29sb3J8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPSJ3aGl0ZSIsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPSJ3aGl0ZSIsdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8d1csdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8dld9Y2FsY3VsYXRlKGEpe2lmKHR5cGVvZiBhIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgZj1PYmplY3Qua2V5cyhhKTtmLmZvckVhY2gocD0+e3RoaXNbcF09YVtwXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksZi5mb3JFYWNoKHA9Pnt0aGlzW3BdPWFbcF19KX19Y29uc3QgVDU9e2Jhc2U6e2dldFRoZW1lVmFyaWFibGVzOmRDZX0sZGFyazp7Z2V0VGhlbWVWYXJpYWJsZXM6cENlfSxkZWZhdWx0OntnZXRUaGVtZVZhcmlhYmxlczpYMXR9LGZvcmVzdDp7Z2V0VGhlbWVWYXJpYWJsZXM6dkNlfSxuZXV0cmFsOntnZXRUaGVtZVZhcmlhYmxlczppPT57Y29uc3QgYT1uZXcgbUNlO3JldHVybiBhLmNhbGN1bGF0ZShpKSxhfX19LEM1PXtmbG93Y2hhcnQ6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjgsaHRtbExhYmVsczohMCxub2RlU3BhY2luZzo1MCxyYW5rU3BhY2luZzo1MCxjdXJ2ZToiYmFzaXMiLHBhZGRpbmc6MTUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIix3cmFwcGluZ1dpZHRoOjIwMH0sc2VxdWVuY2U6e3VzZU1heFdpZHRoOiEwLGhpZGVVbnVzZWRQYXJ0aWNpcGFudHM6ITEsYWN0aXZhdGlvbldpZHRoOjEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGFjdG9yTWFyZ2luOjUwLHdpZHRoOjE1MCxoZWlnaHQ6NjUsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLG1pcnJvckFjdG9yczohMCxmb3JjZU1lbnVzOiExLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHNob3dTZXF1ZW5jZU51bWJlcnM6ITEsYWN0b3JGb250U2l6ZToxNCxhY3RvckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxhY3RvckZvbnRXZWlnaHQ6NDAwLG5vdGVGb250U2l6ZToxNCxub3RlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxub3RlRm9udFdlaWdodDo0MDAsbm90ZUFsaWduOiJjZW50ZXIiLG1lc3NhZ2VGb250U2l6ZToxNixtZXNzYWdlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDo0MDAsd3JhcDohMSx3cmFwUGFkZGluZzoxMCxsYWJlbEJveFdpZHRoOjUwLGxhYmVsQm94SGVpZ2h0OjIwfSxnYW50dDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsYmFySGVpZ2h0OjIwLGJhckdhcDo0LHRvcFBhZGRpbmc6NTAscmlnaHRQYWRkaW5nOjc1LGxlZnRQYWRkaW5nOjc1LGdyaWRMaW5lU3RhcnRQYWRkaW5nOjM1LGZvbnRTaXplOjExLHNlY3Rpb25Gb250U2l6ZToxMSxudW1iZXJTZWN0aW9uU3R5bGVzOjQsYXhpc0Zvcm1hdDoiJVktJW0tJWQiLHRvcEF4aXM6ITEsZGlzcGxheU1vZGU6IiIsd2Vla2RheToic3VuZGF5In0sam91cm5leTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXX0sY2xhc3M6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGFycm93TWFya2VyQWJzb2x1dGU6ITEsZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMCxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIiLGh0bWxMYWJlbHM6ITF9LHN0YXRlOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxkaXZpZGVyTWFyZ2luOjEwLHNpemVVbml0OjUscGFkZGluZzo4LHRleHRIZWlnaHQ6MTAsdGl0bGVTaGlmdDotMTUsbm90ZU1hcmdpbjoxMCxmb3JrV2lkdGg6NzAsZm9ya0hlaWdodDo3LG1pbmlQYWRkaW5nOjIsZm9udFNpemVGYWN0b3I6NS4wMixmb250U2l6ZToyNCxsYWJlbEhlaWdodDoxNixlZGdlTGVuZ3RoRmFjdG9yOiIyMCIsY29tcG9zaXRUaXRsZVNpemU6MzUscmFkaXVzOjUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIn0sZXI6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjIwLGxheW91dERpcmVjdGlvbjoiVEIiLG1pbkVudGl0eVdpZHRoOjEwMCxtaW5FbnRpdHlIZWlnaHQ6NzUsZW50aXR5UGFkZGluZzoxNSxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMn0scGllOnt1c2VNYXhXaWR0aDohMCx0ZXh0UG9zaXRpb246Ljc1fSxxdWFkcmFudENoYXJ0Ont1c2VNYXhXaWR0aDohMCxjaGFydFdpZHRoOjUwMCxjaGFydEhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAscXVhZHJhbnRQYWRkaW5nOjUseEF4aXNMYWJlbFBhZGRpbmc6NSx5QXhpc0xhYmVsUGFkZGluZzo1LHhBeGlzTGFiZWxGb250U2l6ZToxNix5QXhpc0xhYmVsRm9udFNpemU6MTYscXVhZHJhbnRMYWJlbEZvbnRTaXplOjE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6NSxwb2ludFRleHRQYWRkaW5nOjUscG9pbnRMYWJlbEZvbnRTaXplOjEyLHBvaW50UmFkaXVzOjUseEF4aXNQb3NpdGlvbjoidG9wIix5QXhpc1Bvc2l0aW9uOiJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6Mn0seHlDaGFydDp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NzAwLGhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAsc2hvd1RpdGxlOiEwLHhBeGlzOnskcmVmOiIjLyRkZWZzL1hZQ2hhcnRBeGlzQ29uZmlnIixzaG93TGFiZWw6ITAsbGFiZWxGb250U2l6ZToxNCxsYWJlbFBhZGRpbmc6NSxzaG93VGl0bGU6ITAsdGl0bGVGb250U2l6ZToxNix0aXRsZVBhZGRpbmc6NSxzaG93VGljazohMCx0aWNrTGVuZ3RoOjUsdGlja1dpZHRoOjIsc2hvd0F4aXNMaW5lOiEwLGF4aXNMaW5lV2lkdGg6Mn0seUF4aXM6eyRyZWY6IiMvJGRlZnMvWFlDaGFydEF4aXNDb25maWciLHNob3dMYWJlbDohMCxsYWJlbEZvbnRTaXplOjE0LGxhYmVsUGFkZGluZzo1LHNob3dUaXRsZTohMCx0aXRsZUZvbnRTaXplOjE2LHRpdGxlUGFkZGluZzo1LHNob3dUaWNrOiEwLHRpY2tMZW5ndGg6NSx0aWNrV2lkdGg6MixzaG93QXhpc0xpbmU6ITAsYXhpc0xpbmVXaWR0aDoyfSxjaGFydE9yaWVudGF0aW9uOiJ2ZXJ0aWNhbCIscGxvdFJlc2VydmVkU3BhY2VQZXJjZW50OjUwfSxyZXF1aXJlbWVudDp7dXNlTWF4V2lkdGg6ITAscmVjdF9maWxsOiIjZjlmOWY5Iix0ZXh0X2NvbG9yOiIjMzMzIixyZWN0X2JvcmRlcl9zaXplOiIwLjVweCIscmVjdF9ib3JkZXJfY29sb3I6IiNiYmIiLHJlY3RfbWluX3dpZHRoOjIwMCxyZWN0X21pbl9oZWlnaHQ6MjAwLGZvbnRTaXplOjE0LHJlY3RfcGFkZGluZzoxMCxsaW5lX2hlaWdodDoyMH0sbWluZG1hcDp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzoxMCxtYXhOb2RlV2lkdGg6MjAwfSx0aW1lbGluZTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXSxkaXNhYmxlTXVsdGljb2xvcjohMX0sZ2l0R3JhcGg6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjgsbm9kZUxhYmVsOnt3aWR0aDo3NSxoZWlnaHQ6MTAwLHg6LTI1LHk6MH0sbWFpbkJyYW5jaE5hbWU6Im1haW4iLG1haW5CcmFuY2hPcmRlcjowLHNob3dDb21taXRMYWJlbDohMCxzaG93QnJhbmNoZXM6ITAscm90YXRlQ29tbWl0TGFiZWw6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMX0sYzQ6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGM0U2hhcGVNYXJnaW46NTAsYzRTaGFwZVBhZGRpbmc6MjAsd2lkdGg6MjE2LGhlaWdodDo2MCxib3hNYXJnaW46MTAsYzRTaGFwZUluUm93OjQsbmV4dExpbmVQYWRkaW5nWDowLGM0Qm91bmRhcnlJblJvdzoyLHBlcnNvbkZvbnRTaXplOjE0LHBlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxwZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3BlcnNvbkZvbnRTaXplOjE0LGV4dGVybmFsX3BlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbUZvbnRTaXplOjE0LHN5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9kYkZvbnRTaXplOjE0LHN5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9kYkZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LHN5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGJvdW5kYXJ5Rm9udFNpemU6MTQsYm91bmRhcnlGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYm91bmRhcnlGb250V2VpZ2h0OiJub3JtYWwiLG1lc3NhZ2VGb250U2l6ZToxMixtZXNzYWdlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLG1lc3NhZ2VGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lckZvbnRTaXplOjE0LGNvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGNvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGNvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudEZvbnRTaXplOjE0LGNvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9kYkZvbnRTaXplOjE0LGNvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGNvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLHdyYXA6ITAsd3JhcFBhZGRpbmc6MTAscGVyc29uX2JnX2NvbG9yOiIjMDg0MjdCIixwZXJzb25fYm9yZGVyX2NvbG9yOiIjMDczQjZGIixleHRlcm5hbF9wZXJzb25fYmdfY29sb3I6IiM2ODY4NjgiLGV4dGVybmFsX3BlcnNvbl9ib3JkZXJfY29sb3I6IiM4QThBOEEiLHN5c3RlbV9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsc3lzdGVtX2RiX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixzeXN0ZW1fcXVldWVfYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX3N5c3RlbV9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsZXh0ZXJuYWxfc3lzdGVtX2RiX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjOEE4QThBIixleHRlcm5hbF9zeXN0ZW1fcXVldWVfYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGNvbnRhaW5lcl9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixjb250YWluZXJfcXVldWVfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX2NvbnRhaW5lcl9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsZXh0ZXJuYWxfY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjQTZBNkE2IixleHRlcm5hbF9jb250YWluZXJfcXVldWVfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGNvbXBvbmVudF9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4Iixjb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGV4dGVybmFsX2NvbXBvbmVudF9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiI0JGQkZCRiIsZXh0ZXJuYWxfY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiNCRkJGQkYifSxzYW5rZXk6e3VzZU1heFdpZHRoOiEwLHdpZHRoOjYwMCxoZWlnaHQ6NDAwLGxpbmtDb2xvcjoiZ3JhZGllbnQiLG5vZGVBbGlnbm1lbnQ6Imp1c3RpZnkiLHNob3dWYWx1ZXM6ITAscHJlZml4OiIiLHN1ZmZpeDoiIn0sdGhlbWU6ImRlZmF1bHQiLG1heFRleHRTaXplOjVlNCxkYXJrTW9kZTohMSxmb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7Jyxsb2dMZXZlbDo1LHNlY3VyaXR5TGV2ZWw6InN0cmljdCIsc3RhcnRPbkxvYWQ6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxzZWN1cmU6WyJzZWN1cmUiLCJzZWN1cml0eUxldmVsIiwic3RhcnRPbkxvYWQiLCJtYXhUZXh0U2l6ZSJdLGRldGVybWluaXN0aWNJZHM6ITEsZm9udFNpemU6MTZ9LGlJdD17Li4uQzUsZGV0ZXJtaW5pc3RpY0lEU2VlZDp2b2lkIDAsdGhlbWVDU1M6dm9pZCAwLHRoZW1lVmFyaWFibGVzOlQ1LmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoKSxzZXF1ZW5jZTp7Li4uQzUuc2VxdWVuY2UsbWVzc2FnZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LG5vdGVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubm90ZUZvbnRXZWlnaHR9fSxhY3RvckZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmFjdG9yRm9udFdlaWdodH19fSxnYW50dDp7Li4uQzUuZ2FudHQsdGlja0ludGVydmFsOnZvaWQgMCx1c2VXaWR0aDp2b2lkIDB9LGM0OnsuLi5DNS5jNCx1c2VXaWR0aDp2b2lkIDAscGVyc29uRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMucGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnBlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5wZXJzb25Gb250V2VpZ2h0fX0sZXh0ZXJuYWxfcGVyc29uRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0fX0sc3lzdGVtRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1Gb250V2VpZ2h0fX0sZXh0ZXJuYWxfc3lzdGVtRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0fX0sc3lzdGVtX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fZGJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfc3lzdGVtX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0fX0sc3lzdGVtX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sY29udGFpbmVyRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29udGFpbmVyRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0fX0sY29udGFpbmVyX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfZGJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250V2VpZ2h0fX0sY29udGFpbmVyX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sY29tcG9uZW50Rm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudEZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29tcG9uZW50Rm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0fX0sY29tcG9uZW50X2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfZGJGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250V2VpZ2h0fX0sY29tcG9uZW50X3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sYm91bmRhcnlGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ib3VuZGFyeUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5ib3VuZGFyeUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5ib3VuZGFyeUZvbnRXZWlnaHR9fSxtZXNzYWdlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLm1lc3NhZ2VGb250V2VpZ2h0fX19LHBpZTp7Li4uQzUucGllLHVzZVdpZHRoOjk4NH0seHlDaGFydDp7Li4uQzUueHlDaGFydCx1c2VXaWR0aDp2b2lkIDB9LHJlcXVpcmVtZW50OnsuLi5DNS5yZXF1aXJlbWVudCx1c2VXaWR0aDp2b2lkIDB9LGdpdEdyYXBoOnsuLi5DNS5naXRHcmFwaCx1c2VNYXhXaWR0aDohMX0sc2Fua2V5OnsuLi5DNS5zYW5rZXksdXNlTWF4V2lkdGg6ITF9fSxzSXQ9KGksYT0iIik9Pk9iamVjdC5rZXlzKGkpLnJlZHVjZSgoZixwKT0+QXJyYXkuaXNBcnJheShpW3BdKT9mOnR5cGVvZiBpW3BdPT0ib2JqZWN0IiYmaVtwXSE9PW51bGw/Wy4uLmYsYStwLC4uLnNJdChpW3BdLCIiKV06Wy4uLmYsYStwXSxbXSkseUNlPW5ldyBTZXQoc0l0KGlJdCwiIikpLFpoPWlJdCxtVz1pPT57aWYoVXQuZGVidWcoInNhbml0aXplRGlyZWN0aXZlIGNhbGxlZCB3aXRoIixpKSwhKHR5cGVvZiBpIT0ib2JqZWN0Inx8aT09bnVsbCkpe2lmKEFycmF5LmlzQXJyYXkoaSkpe2kuZm9yRWFjaChhPT5tVyhhKSk7cmV0dXJufWZvcihjb25zdCBhIG9mIE9iamVjdC5rZXlzKGkpKXtpZihVdC5kZWJ1ZygiQ2hlY2tpbmcga2V5IixhKSxhLnN0YXJ0c1dpdGgoIl9fIil8fGEuaW5jbHVkZXMoInByb3RvIil8fGEuaW5jbHVkZXMoImNvbnN0ciIpfHwheUNlLmhhcyhhKXx8aVthXT09bnVsbCl7VXQuZGVidWcoInNhbml0aXplIGRlbGV0aW5nIGtleTogIixhKSxkZWxldGUgaVthXTtjb250aW51ZX1pZih0eXBlb2YgaVthXT09Im9iamVjdCIpe1V0LmRlYnVnKCJzYW5pdGl6aW5nIG9iamVjdCIsYSksbVcoaVthXSk7Y29udGludWV9Y29uc3QgZj1bInRoZW1lQ1NTIiwiZm9udEZhbWlseSIsImFsdEZvbnRGYW1pbHkiXTtmb3IoY29uc3QgcCBvZiBmKWEuaW5jbHVkZXMocCkmJihVdC5kZWJ1Zygic2FuaXRpemluZyBjc3Mgb3B0aW9uIixhKSxpW2FdPXhDZShpW2FdKSl9aWYoaS50aGVtZVZhcmlhYmxlcylmb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhpLnRoZW1lVmFyaWFibGVzKSl7Y29uc3QgZj1pLnRoZW1lVmFyaWFibGVzW2FdO2YhPW51bGwmJmYubWF0Y2gmJiFmLm1hdGNoKC9eW1xkICIjJSgpLC47QS1aYS16XSskLykmJihpLnRoZW1lVmFyaWFibGVzW2FdPSIiKX1VdC5kZWJ1ZygiQWZ0ZXIgc2FuaXRpemF0aW9uIixpKX19LHhDZT1pPT57bGV0IGE9MCxmPTA7Zm9yKGNvbnN0IHAgb2YgaSl7aWYoYTxmKXJldHVybiJ7IC8qIEVSUk9SOiBVbmJhbGFuY2VkIENTUyAqLyB9IjtwPT09InsiP2ErKzpwPT09In0iJiZmKyt9cmV0dXJuIGEhPT1mPyJ7IC8qIEVSUk9SOiBVbmJhbGFuY2VkIENTUyAqLyB9IjppfSxhSXQ9L14tezN9XHMqW1xuXHJdKC4qPylbXG5ccl0tezN9XHMqW1xuXHJdKy9zLFhQPS8lezJ9e1xzKig/OihcdyspXHMqOnwoXHcrKSlccyooPzooXHcrKXwoKD86KD8hfSV7Mn0pLnxccj9cbikqKSk/XHMqKD86fSV7Mn0pPy9naSxrQ2U9L1xzKiUlLipcbi9nbTtjbGFzcyBvSXQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihhKXtzdXBlcihhKSx0aGlzLm5hbWU9IlVua25vd25EaWFncmFtRXJyb3IifX1jb25zdCBOQT17fSx5Vz1mdW5jdGlvbihpLGEpe2k9aS5yZXBsYWNlKGFJdCwiIikucmVwbGFjZShYUCwiIikucmVwbGFjZShrQ2UsYApgKTtmb3IoY29uc3RbZix7ZGV0ZWN0b3I6cH1db2YgT2JqZWN0LmVudHJpZXMoTkEpKWlmKHAoaSxhKSlyZXR1cm4gZjt0aHJvdyBuZXcgb0l0KGBObyBkaWFncmFtIHR5cGUgZGV0ZWN0ZWQgbWF0Y2hpbmcgZ2l2ZW4gY29uZmlndXJhdGlvbiBmb3IgdGV4dDogJHtpfWApfSxjSXQ9KC4uLmkpPT57Zm9yKGNvbnN0e2lkOmEsZGV0ZWN0b3I6Zixsb2FkZXI6cH1vZiBpKXVJdChhLGYscCl9LHVJdD0oaSxhLGYpPT57TkFbaV0/VXQuZXJyb3IoYERldGVjdG9yIHdpdGgga2V5ICR7aX0gYWxyZWFkeSBleGlzdHNgKTpOQVtpXT17ZGV0ZWN0b3I6YSxsb2FkZXI6Zn0sVXQuZGVidWcoYERldGVjdG9yIHdpdGgga2V5ICR7aX0gYWRkZWQke2Y/IiB3aXRoIGxvYWRlciI6IiJ9YCl9LEVDZT1pPT5OQVtpXS5sb2FkZXIsUTF0PShpLGEse2RlcHRoOmY9MixjbG9iYmVyOnA9ITF9PXt9KT0+e2NvbnN0IHc9e2RlcHRoOmYsY2xvYmJlcjpwfTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKSYmIUFycmF5LmlzQXJyYXkoaSk/KGEuZm9yRWFjaChtPT5RMXQoaSxtLHcpKSxpKTpBcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGkpPyhhLmZvckVhY2gobT0+e2kuaW5jbHVkZXMobSl8fGkucHVzaChtKX0pLGkpOmk9PT12b2lkIDB8fGY8PTA/aSE9bnVsbCYmdHlwZW9mIGk9PSJvYmplY3QiJiZ0eXBlb2YgYT09Im9iamVjdCI/T2JqZWN0LmFzc2lnbihpLGEpOmE6KGEhPT12b2lkIDAmJnR5cGVvZiBpPT0ib2JqZWN0IiYmdHlwZW9mIGE9PSJvYmplY3QiJiZPYmplY3Qua2V5cyhhKS5mb3JFYWNoKG09Pnt0eXBlb2YgYVttXT09Im9iamVjdCImJihpW21dPT09dm9pZCAwfHx0eXBlb2YgaVttXT09Im9iamVjdCIpPyhpW21dPT09dm9pZCAwJiYoaVttXT1BcnJheS5pc0FycmF5KGFbbV0pP1tdOnt9KSxpW21dPVExdChpW21dLGFbbV0se2RlcHRoOmYtMSxjbG9iYmVyOnB9KSk6KHB8fHR5cGVvZiBpW21dIT0ib2JqZWN0IiYmdHlwZW9mIGFbbV0hPSJvYmplY3QiKSYmKGlbbV09YVttXSl9KSxpKX0sWjE9UTF0O3ZhciBUQ2U9dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsO2NvbnN0IGxJdD1UQ2U7dmFyIENDZT10eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLF9DZT1sSXR8fENDZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTtjb25zdCBubT1fQ2U7dmFyIFNDZT1ubS5TeW1ib2w7Y29uc3QgdHc9U0NlO3ZhciBoSXQ9T2JqZWN0LnByb3RvdHlwZSxBQ2U9aEl0Lmhhc093blByb3BlcnR5LExDZT1oSXQudG9TdHJpbmcsUVA9dHc/dHcudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIE1DZShpKXt2YXIgYT1BQ2UuY2FsbChpLFFQKSxmPWlbUVBdO3RyeXtpW1FQXT12b2lkIDA7dmFyIHA9ITB9Y2F0Y2h7fXZhciB3PUxDZS5jYWxsKGkpO3JldHVybiBwJiYoYT9pW1FQXT1mOmRlbGV0ZSBpW1FQXSksd312YXIgRENlPU9iamVjdC5wcm90b3R5cGUsSUNlPURDZS50b1N0cmluZztmdW5jdGlvbiBPQ2UoaSl7cmV0dXJuIElDZS5jYWxsKGkpfXZhciBQQ2U9IltvYmplY3QgTnVsbF0iLEZDZT0iW29iamVjdCBVbmRlZmluZWRdIixmSXQ9dHc/dHcudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIHNUKGkpe3JldHVybiBpPT1udWxsP2k9PT12b2lkIDA/RkNlOlBDZTpmSXQmJmZJdCBpbiBPYmplY3QoaSk/TUNlKGkpOk9DZShpKX1mdW5jdGlvbiBGYihpKXt2YXIgYT10eXBlb2YgaTtyZXR1cm4gaSE9bnVsbCYmKGE9PSJvYmplY3QifHxhPT0iZnVuY3Rpb24iKX12YXIgTkNlPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixCQ2U9IltvYmplY3QgRnVuY3Rpb25dIixSQ2U9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixqQ2U9IltvYmplY3QgUHJveHldIjtmdW5jdGlvbiBCQShpKXtpZighRmIoaSkpcmV0dXJuITE7dmFyIGE9c1QoaSk7cmV0dXJuIGE9PUJDZXx8YT09UkNlfHxhPT1OQ2V8fGE9PWpDZX12YXIgJENlPW5tWyJfX2NvcmUtanNfc2hhcmVkX18iXTtjb25zdCBaMXQ9JENlO3ZhciBkSXQ9ZnVuY3Rpb24oKXt2YXIgaT0vW14uXSskLy5leGVjKFoxdCYmWjF0LmtleXMmJloxdC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGk/IlN5bWJvbChzcmMpXzEuIitpOiIifSgpO2Z1bmN0aW9uIHpDZShpKXtyZXR1cm4hIWRJdCYmZEl0IGluIGl9dmFyIHFDZT1GdW5jdGlvbi5wcm90b3R5cGUsSENlPXFDZS50b1N0cmluZztmdW5jdGlvbiBhVChpKXtpZihpIT1udWxsKXt0cnl7cmV0dXJuIEhDZS5jYWxsKGkpfWNhdGNoe310cnl7cmV0dXJuIGkrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn12YXIgVkNlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxHQ2U9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sVUNlPUZ1bmN0aW9uLnByb3RvdHlwZSxXQ2U9T2JqZWN0LnByb3RvdHlwZSxZQ2U9VUNlLnRvU3RyaW5nLEtDZT1XQ2UuaGFzT3duUHJvcGVydHksWENlPVJlZ0V4cCgiXiIrWUNlLmNhbGwoS0NlKS5yZXBsYWNlKFZDZSwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtmdW5jdGlvbiBRQ2UoaSl7aWYoIUZiKGkpfHx6Q2UoaSkpcmV0dXJuITE7dmFyIGE9QkEoaSk/WENlOkdDZTtyZXR1cm4gYS50ZXN0KGFUKGkpKX1mdW5jdGlvbiBaQ2UoaSxhKXtyZXR1cm4gaT09bnVsbD92b2lkIDA6aVthXX1mdW5jdGlvbiBvVChpLGEpe3ZhciBmPVpDZShpLGEpO3JldHVybiBRQ2UoZik/Zjp2b2lkIDB9dmFyIEpDZT1vVChPYmplY3QsImNyZWF0ZSIpO2NvbnN0IFpQPUpDZTtmdW5jdGlvbiB0OWUoKXt0aGlzLl9fZGF0YV9fPVpQP1pQKG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIGU5ZShpKXt2YXIgYT10aGlzLmhhcyhpKSYmZGVsZXRlIHRoaXMuX19kYXRhX19baV07cmV0dXJuIHRoaXMuc2l6ZS09YT8xOjAsYX12YXIgbjllPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixyOWU9T2JqZWN0LnByb3RvdHlwZSxpOWU9cjllLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHM5ZShpKXt2YXIgYT10aGlzLl9fZGF0YV9fO2lmKFpQKXt2YXIgZj1hW2ldO3JldHVybiBmPT09bjllP3ZvaWQgMDpmfXJldHVybiBpOWUuY2FsbChhLGkpP2FbaV06dm9pZCAwfXZhciBhOWU9T2JqZWN0LnByb3RvdHlwZSxvOWU9YTllLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGM5ZShpKXt2YXIgYT10aGlzLl9fZGF0YV9fO3JldHVybiBaUD9hW2ldIT09dm9pZCAwOm85ZS5jYWxsKGEsaSl9dmFyIHU5ZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gbDllKGksYSl7dmFyIGY9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhpKT8wOjEsZltpXT1aUCYmYT09PXZvaWQgMD91OWU6YSx0aGlzfWZ1bmN0aW9uIGNUKGkpe3ZhciBhPS0xLGY9aT09bnVsbD8wOmkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KythPGY7KXt2YXIgcD1pW2FdO3RoaXMuc2V0KHBbMF0scFsxXSl9fWNULnByb3RvdHlwZS5jbGVhcj10OWUsY1QucHJvdG90eXBlLmRlbGV0ZT1lOWUsY1QucHJvdG90eXBlLmdldD1zOWUsY1QucHJvdG90eXBlLmhhcz1jOWUsY1QucHJvdG90eXBlLnNldD1sOWU7ZnVuY3Rpb24gaDllKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH1mdW5jdGlvbiBSQShpLGEpe3JldHVybiBpPT09YXx8aSE9PWkmJmEhPT1hfWZ1bmN0aW9uIHhXKGksYSl7Zm9yKHZhciBmPWkubGVuZ3RoO2YtLTspaWYoUkEoaVtmXVswXSxhKSlyZXR1cm4gZjtyZXR1cm4tMX12YXIgZjllPUFycmF5LnByb3RvdHlwZSxkOWU9ZjllLnNwbGljZTtmdW5jdGlvbiBnOWUoaSl7dmFyIGE9dGhpcy5fX2RhdGFfXyxmPXhXKGEsaSk7aWYoZjwwKXJldHVybiExO3ZhciBwPWEubGVuZ3RoLTE7cmV0dXJuIGY9PXA/YS5wb3AoKTpkOWUuY2FsbChhLGYsMSksLS10aGlzLnNpemUsITB9ZnVuY3Rpb24gcDllKGkpe3ZhciBhPXRoaXMuX19kYXRhX18sZj14VyhhLGkpO3JldHVybiBmPDA/dm9pZCAwOmFbZl1bMV19ZnVuY3Rpb24gYjllKGkpe3JldHVybiB4Vyh0aGlzLl9fZGF0YV9fLGkpPi0xfWZ1bmN0aW9uIHc5ZShpLGEpe3ZhciBmPXRoaXMuX19kYXRhX18scD14VyhmLGkpO3JldHVybiBwPDA/KCsrdGhpcy5zaXplLGYucHVzaChbaSxhXSkpOmZbcF1bMV09YSx0aGlzfWZ1bmN0aW9uIF81KGkpe3ZhciBhPS0xLGY9aT09bnVsbD8wOmkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KythPGY7KXt2YXIgcD1pW2FdO3RoaXMuc2V0KHBbMF0scFsxXSl9fV81LnByb3RvdHlwZS5jbGVhcj1oOWUsXzUucHJvdG90eXBlLmRlbGV0ZT1nOWUsXzUucHJvdG90eXBlLmdldD1wOWUsXzUucHJvdG90eXBlLmhhcz1iOWUsXzUucHJvdG90eXBlLnNldD13OWU7dmFyIHY5ZT1vVChubSwiTWFwIik7Y29uc3QgSlA9djllO2Z1bmN0aW9uIG05ZSgpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IGNULG1hcDpuZXcoSlB8fF81KSxzdHJpbmc6bmV3IGNUfX1mdW5jdGlvbiB5OWUoaSl7dmFyIGE9dHlwZW9mIGk7cmV0dXJuIGE9PSJzdHJpbmcifHxhPT0ibnVtYmVyInx8YT09InN5bWJvbCJ8fGE9PSJib29sZWFuIj9pIT09Il9fcHJvdG9fXyI6aT09PW51bGx9ZnVuY3Rpb24ga1coaSxhKXt2YXIgZj1pLl9fZGF0YV9fO3JldHVybiB5OWUoYSk/Zlt0eXBlb2YgYT09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpmLm1hcH1mdW5jdGlvbiB4OWUoaSl7dmFyIGE9a1codGhpcyxpKS5kZWxldGUoaSk7cmV0dXJuIHRoaXMuc2l6ZS09YT8xOjAsYX1mdW5jdGlvbiBrOWUoaSl7cmV0dXJuIGtXKHRoaXMsaSkuZ2V0KGkpfWZ1bmN0aW9uIEU5ZShpKXtyZXR1cm4ga1codGhpcyxpKS5oYXMoaSl9ZnVuY3Rpb24gVDllKGksYSl7dmFyIGY9a1codGhpcyxpKSxwPWYuc2l6ZTtyZXR1cm4gZi5zZXQoaSxhKSx0aGlzLnNpemUrPWYuc2l6ZT09cD8wOjEsdGhpc31mdW5jdGlvbiBTNShpKXt2YXIgYT0tMSxmPWk9PW51bGw/MDppLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYTxmOyl7dmFyIHA9aVthXTt0aGlzLnNldChwWzBdLHBbMV0pfX1TNS5wcm90b3R5cGUuY2xlYXI9bTllLFM1LnByb3RvdHlwZS5kZWxldGU9eDllLFM1LnByb3RvdHlwZS5nZXQ9azllLFM1LnByb3RvdHlwZS5oYXM9RTllLFM1LnByb3RvdHlwZS5zZXQ9VDllO3ZhciBDOWU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO2Z1bmN0aW9uIGpBKGksYSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiJ8fGEhPW51bGwmJnR5cGVvZiBhIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoQzllKTt2YXIgZj1mdW5jdGlvbigpe3ZhciBwPWFyZ3VtZW50cyx3PWE/YS5hcHBseSh0aGlzLHApOnBbMF0sbT1mLmNhY2hlO2lmKG0uaGFzKHcpKXJldHVybiBtLmdldCh3KTt2YXIgYj1pLmFwcGx5KHRoaXMscCk7cmV0dXJuIGYuY2FjaGU9bS5zZXQodyxiKXx8bSxifTtyZXR1cm4gZi5jYWNoZT1uZXcoakEuQ2FjaGV8fFM1KSxmfWpBLkNhY2hlPVM1O2Z1bmN0aW9uIF85ZSgpe3RoaXMuX19kYXRhX189bmV3IF81LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIFM5ZShpKXt2YXIgYT10aGlzLl9fZGF0YV9fLGY9YS5kZWxldGUoaSk7cmV0dXJuIHRoaXMuc2l6ZT1hLnNpemUsZn1mdW5jdGlvbiBBOWUoaSl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGkpfWZ1bmN0aW9uIEw5ZShpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoaSl9dmFyIE05ZT0yMDA7ZnVuY3Rpb24gRDllKGksYSl7dmFyIGY9dGhpcy5fX2RhdGFfXztpZihmIGluc3RhbmNlb2YgXzUpe3ZhciBwPWYuX19kYXRhX187aWYoIUpQfHxwLmxlbmd0aDxNOWUtMSlyZXR1cm4gcC5wdXNoKFtpLGFdKSx0aGlzLnNpemU9KytmLnNpemUsdGhpcztmPXRoaXMuX19kYXRhX189bmV3IFM1KHApfXJldHVybiBmLnNldChpLGEpLHRoaXMuc2l6ZT1mLnNpemUsdGhpc31mdW5jdGlvbiBybShpKXt2YXIgYT10aGlzLl9fZGF0YV9fPW5ldyBfNShpKTt0aGlzLnNpemU9YS5zaXplfXJtLnByb3RvdHlwZS5jbGVhcj1fOWUscm0ucHJvdG90eXBlLmRlbGV0ZT1TOWUscm0ucHJvdG90eXBlLmdldD1BOWUscm0ucHJvdG90eXBlLmhhcz1MOWUscm0ucHJvdG90eXBlLnNldD1EOWU7dmFyIEk5ZT1mdW5jdGlvbigpe3RyeXt2YXIgaT1vVChPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGkoe30sIiIse30pLGl9Y2F0Y2h7fX0oKTtjb25zdCBFVz1JOWU7ZnVuY3Rpb24gVFcoaSxhLGYpe2E9PSJfX3Byb3RvX18iJiZFVz9FVyhpLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmYsd3JpdGFibGU6ITB9KTppW2FdPWZ9ZnVuY3Rpb24gSjF0KGksYSxmKXsoZiE9PXZvaWQgMCYmIVJBKGlbYV0sZil8fGY9PT12b2lkIDAmJiEoYSBpbiBpKSkmJlRXKGksYSxmKX1mdW5jdGlvbiBPOWUoaSl7cmV0dXJuIGZ1bmN0aW9uKGEsZixwKXtmb3IodmFyIHc9LTEsbT1PYmplY3QoYSksYj1wKGEpLEU9Yi5sZW5ndGg7RS0tOyl7dmFyIF89YltpP0U6Kyt3XTtpZihmKG1bX10sXyxtKT09PSExKWJyZWFrfXJldHVybiBhfX12YXIgUDllPU85ZSgpO2NvbnN0IHRkdD1QOWU7dmFyIGdJdD10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLHBJdD1nSXQmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxGOWU9cEl0JiZwSXQuZXhwb3J0cz09PWdJdCxiSXQ9RjllP25tLkJ1ZmZlcjp2b2lkIDAsd0l0PWJJdD9iSXQuYWxsb2NVbnNhZmU6dm9pZCAwO2Z1bmN0aW9uIHZJdChpLGEpe2lmKGEpcmV0dXJuIGkuc2xpY2UoKTt2YXIgZj1pLmxlbmd0aCxwPXdJdD93SXQoZik6bmV3IGkuY29uc3RydWN0b3IoZik7cmV0dXJuIGkuY29weShwKSxwfXZhciBOOWU9bm0uVWludDhBcnJheTtjb25zdCBDVz1OOWU7ZnVuY3Rpb24gZWR0KGkpe3ZhciBhPW5ldyBpLmNvbnN0cnVjdG9yKGkuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBDVyhhKS5zZXQobmV3IENXKGkpKSxhfWZ1bmN0aW9uIG1JdChpLGEpe3ZhciBmPWE/ZWR0KGkuYnVmZmVyKTppLmJ1ZmZlcjtyZXR1cm4gbmV3IGkuY29uc3RydWN0b3IoZixpLmJ5dGVPZmZzZXQsaS5sZW5ndGgpfWZ1bmN0aW9uIHlJdChpLGEpe3ZhciBmPS0xLHA9aS5sZW5ndGg7Zm9yKGF8fChhPUFycmF5KHApKTsrK2Y8cDspYVtmXT1pW2ZdO3JldHVybiBhfXZhciB4SXQ9T2JqZWN0LmNyZWF0ZSxCOWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKCl7fXJldHVybiBmdW5jdGlvbihhKXtpZighRmIoYSkpcmV0dXJue307aWYoeEl0KXJldHVybiB4SXQoYSk7aS5wcm90b3R5cGU9YTt2YXIgZj1uZXcgaTtyZXR1cm4gaS5wcm90b3R5cGU9dm9pZCAwLGZ9fSgpO2NvbnN0IFI5ZT1COWU7ZnVuY3Rpb24ga0l0KGksYSl7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBpKGEoZikpfX12YXIgajllPWtJdChPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTtjb25zdCBuZHQ9ajllO3ZhciAkOWU9T2JqZWN0LnByb3RvdHlwZTtmdW5jdGlvbiBfVyhpKXt2YXIgYT1pJiZpLmNvbnN0cnVjdG9yLGY9dHlwZW9mIGE9PSJmdW5jdGlvbiImJmEucHJvdG90eXBlfHwkOWU7cmV0dXJuIGk9PT1mfWZ1bmN0aW9uIEVJdChpKXtyZXR1cm4gdHlwZW9mIGkuY29uc3RydWN0b3I9PSJmdW5jdGlvbiImJiFfVyhpKT9SOWUobmR0KGkpKTp7fX1mdW5jdGlvbiBmMyhpKXtyZXR1cm4gaSE9bnVsbCYmdHlwZW9mIGk9PSJvYmplY3QifXZhciB6OWU9IltvYmplY3QgQXJndW1lbnRzXSI7ZnVuY3Rpb24gVEl0KGkpe3JldHVybiBmMyhpKSYmc1QoaSk9PXo5ZX12YXIgQ0l0PU9iamVjdC5wcm90b3R5cGUscTllPUNJdC5oYXNPd25Qcm9wZXJ0eSxIOWU9Q0l0LnByb3BlcnR5SXNFbnVtZXJhYmxlLFY5ZT1USXQoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9USXQ6ZnVuY3Rpb24oaSl7cmV0dXJuIGYzKGkpJiZxOWUuY2FsbChpLCJjYWxsZWUiKSYmIUg5ZS5jYWxsKGksImNhbGxlZSIpfTtjb25zdCAkQT1WOWU7dmFyIEc5ZT1BcnJheS5pc0FycmF5O2NvbnN0IElmPUc5ZTt2YXIgVTllPTkwMDcxOTkyNTQ3NDA5OTE7ZnVuY3Rpb24gcmR0KGkpe3JldHVybiB0eXBlb2YgaT09Im51bWJlciImJmk+LTEmJmklMT09MCYmaTw9VTllfWZ1bmN0aW9uIGNrKGkpe3JldHVybiBpIT1udWxsJiZyZHQoaS5sZW5ndGgpJiYhQkEoaSl9ZnVuY3Rpb24gX0l0KGkpe3JldHVybiBmMyhpKSYmY2soaSl9ZnVuY3Rpb24gVzllKCl7cmV0dXJuITF9dmFyIFNJdD10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLEFJdD1TSXQmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxZOWU9QUl0JiZBSXQuZXhwb3J0cz09PVNJdCxMSXQ9WTllP25tLkJ1ZmZlcjp2b2lkIDAsSzllPUxJdD9MSXQuaXNCdWZmZXI6dm9pZCAwLFg5ZT1LOWV8fFc5ZTtjb25zdCB6QT1YOWU7dmFyIFE5ZT0iW29iamVjdCBPYmplY3RdIixaOWU9RnVuY3Rpb24ucHJvdG90eXBlLEo5ZT1PYmplY3QucHJvdG90eXBlLE1JdD1aOWUudG9TdHJpbmcsdF9lPUo5ZS5oYXNPd25Qcm9wZXJ0eSxlX2U9TUl0LmNhbGwoT2JqZWN0KTtmdW5jdGlvbiBESXQoaSl7aWYoIWYzKGkpfHxzVChpKSE9UTllKXJldHVybiExO3ZhciBhPW5kdChpKTtpZihhPT09bnVsbClyZXR1cm4hMDt2YXIgZj10X2UuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiZhLmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgZj09ImZ1bmN0aW9uIiYmZiBpbnN0YW5jZW9mIGYmJk1JdC5jYWxsKGYpPT1lX2V9dmFyIG5fZT0iW29iamVjdCBBcmd1bWVudHNdIixyX2U9IltvYmplY3QgQXJyYXldIixpX2U9IltvYmplY3QgQm9vbGVhbl0iLHNfZT0iW29iamVjdCBEYXRlXSIsYV9lPSJbb2JqZWN0IEVycm9yXSIsb19lPSJbb2JqZWN0IEZ1bmN0aW9uXSIsY19lPSJbb2JqZWN0IE1hcF0iLHVfZT0iW29iamVjdCBOdW1iZXJdIixsX2U9IltvYmplY3QgT2JqZWN0XSIsaF9lPSJbb2JqZWN0IFJlZ0V4cF0iLGZfZT0iW29iamVjdCBTZXRdIixkX2U9IltvYmplY3QgU3RyaW5nXSIsZ19lPSJbb2JqZWN0IFdlYWtNYXBdIixwX2U9IltvYmplY3QgQXJyYXlCdWZmZXJdIixiX2U9IltvYmplY3QgRGF0YVZpZXddIix3X2U9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsdl9lPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLG1fZT0iW29iamVjdCBJbnQ4QXJyYXldIix5X2U9IltvYmplY3QgSW50MTZBcnJheV0iLHhfZT0iW29iamVjdCBJbnQzMkFycmF5XSIsa19lPSJbb2JqZWN0IFVpbnQ4QXJyYXldIixFX2U9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixUX2U9IltvYmplY3QgVWludDE2QXJyYXldIixDX2U9IltvYmplY3QgVWludDMyQXJyYXldIixibD17fTtibFt3X2VdPWJsW3ZfZV09YmxbbV9lXT1ibFt5X2VdPWJsW3hfZV09Ymxba19lXT1ibFtFX2VdPWJsW1RfZV09YmxbQ19lXT0hMCxibFtuX2VdPWJsW3JfZV09YmxbcF9lXT1ibFtpX2VdPWJsW2JfZV09Ymxbc19lXT1ibFthX2VdPWJsW29fZV09YmxbY19lXT1ibFt1X2VdPWJsW2xfZV09YmxbaF9lXT1ibFtmX2VdPWJsW2RfZV09YmxbZ19lXT0hMTtmdW5jdGlvbiBfX2UoaSl7cmV0dXJuIGYzKGkpJiZyZHQoaS5sZW5ndGgpJiYhIWJsW3NUKGkpXX1mdW5jdGlvbiBTVyhpKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGkoYSl9fXZhciBJSXQ9dHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyx0Rj1JSXQmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxTX2U9dEYmJnRGLmV4cG9ydHM9PT1JSXQsaWR0PVNfZSYmbEl0LnByb2Nlc3MsQV9lPWZ1bmN0aW9uKCl7dHJ5e3ZhciBpPXRGJiZ0Ri5yZXF1aXJlJiZ0Ri5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIGl8fGlkdCYmaWR0LmJpbmRpbmcmJmlkdC5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKTtjb25zdCBxQT1BX2U7dmFyIE9JdD1xQSYmcUEuaXNUeXBlZEFycmF5LExfZT1PSXQ/U1coT0l0KTpfX2U7Y29uc3QgQVc9TF9lO2Z1bmN0aW9uIHNkdChpLGEpe2lmKCEoYT09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiBpW2FdPT0iZnVuY3Rpb24iKSYmYSE9Il9fcHJvdG9fXyIpcmV0dXJuIGlbYV19dmFyIE1fZT1PYmplY3QucHJvdG90eXBlLERfZT1NX2UuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gTFcoaSxhLGYpe3ZhciBwPWlbYV07KCEoRF9lLmNhbGwoaSxhKSYmUkEocCxmKSl8fGY9PT12b2lkIDAmJiEoYSBpbiBpKSkmJlRXKGksYSxmKX1mdW5jdGlvbiBlRihpLGEsZixwKXt2YXIgdz0hZjtmfHwoZj17fSk7Zm9yKHZhciBtPS0xLGI9YS5sZW5ndGg7KyttPGI7KXt2YXIgRT1hW21dLF89cD9wKGZbRV0saVtFXSxFLGYsaSk6dm9pZCAwO189PT12b2lkIDAmJihfPWlbRV0pLHc/VFcoZixFLF8pOkxXKGYsRSxfKX1yZXR1cm4gZn1mdW5jdGlvbiBJX2UoaSxhKXtmb3IodmFyIGY9LTEscD1BcnJheShpKTsrK2Y8aTspcFtmXT1hKGYpO3JldHVybiBwfXZhciBPX2U9OTAwNzE5OTI1NDc0MDk5MSxQX2U9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIE1XKGksYSl7dmFyIGY9dHlwZW9mIGk7cmV0dXJuIGE9YT8/T19lLCEhYSYmKGY9PSJudW1iZXIifHxmIT0ic3ltYm9sIiYmUF9lLnRlc3QoaSkpJiZpPi0xJiZpJTE9PTAmJmk8YX12YXIgRl9lPU9iamVjdC5wcm90b3R5cGUsTl9lPUZfZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBQSXQoaSxhKXt2YXIgZj1JZihpKSxwPSFmJiYkQShpKSx3PSFmJiYhcCYmekEoaSksbT0hZiYmIXAmJiF3JiZBVyhpKSxiPWZ8fHB8fHd8fG0sRT1iP0lfZShpLmxlbmd0aCxTdHJpbmcpOltdLF89RS5sZW5ndGg7Zm9yKHZhciBBIGluIGkpKGF8fE5fZS5jYWxsKGksQSkpJiYhKGImJihBPT0ibGVuZ3RoInx8dyYmKEE9PSJvZmZzZXQifHxBPT0icGFyZW50Iil8fG0mJihBPT0iYnVmZmVyInx8QT09ImJ5dGVMZW5ndGgifHxBPT0iYnl0ZU9mZnNldCIpfHxNVyhBLF8pKSkmJkUucHVzaChBKTtyZXR1cm4gRX1mdW5jdGlvbiBCX2UoaSl7dmFyIGE9W107aWYoaSE9bnVsbClmb3IodmFyIGYgaW4gT2JqZWN0KGkpKWEucHVzaChmKTtyZXR1cm4gYX12YXIgUl9lPU9iamVjdC5wcm90b3R5cGUsal9lPVJfZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiAkX2UoaSl7aWYoIUZiKGkpKXJldHVybiBCX2UoaSk7dmFyIGE9X1coaSksZj1bXTtmb3IodmFyIHAgaW4gaSlwPT0iY29uc3RydWN0b3IiJiYoYXx8IWpfZS5jYWxsKGkscCkpfHxmLnB1c2gocCk7cmV0dXJuIGZ9ZnVuY3Rpb24gdVQoaSl7cmV0dXJuIGNrKGkpP1BJdChpLCEwKTokX2UoaSl9ZnVuY3Rpb24gel9lKGkpe3JldHVybiBlRihpLHVUKGkpKX1mdW5jdGlvbiBxX2UoaSxhLGYscCx3LG0sYil7dmFyIEU9c2R0KGksZiksXz1zZHQoYSxmKSxBPWIuZ2V0KF8pO2lmKEEpe0oxdChpLGYsQSk7cmV0dXJufXZhciBJPW0/bShFLF8sZisiIixpLGEsYik6dm9pZCAwLEI9ST09PXZvaWQgMDtpZihCKXt2YXIgTj1JZihfKSxSPSFOJiZ6QShfKSx6PSFOJiYhUiYmQVcoXyk7ST1fLE58fFJ8fHo/SWYoRSk/ST1FOl9JdChFKT9JPXlJdChFKTpSPyhCPSExLEk9dkl0KF8sITApKTp6PyhCPSExLEk9bUl0KF8sITApKTpJPVtdOkRJdChfKXx8JEEoXyk/KEk9RSwkQShFKT9JPXpfZShFKTooIUZiKEUpfHxCQShFKSkmJihJPUVJdChfKSkpOkI9ITF9QiYmKGIuc2V0KF8sSSksdyhJLF8scCxtLGIpLGIuZGVsZXRlKF8pKSxKMXQoaSxmLEkpfWZ1bmN0aW9uIEZJdChpLGEsZixwLHcpe2khPT1hJiZ0ZHQoYSxmdW5jdGlvbihtLGIpe2lmKHd8fCh3PW5ldyBybSksRmIobSkpcV9lKGksYSxiLGYsRkl0LHAsdyk7ZWxzZXt2YXIgRT1wP3Aoc2R0KGksYiksbSxiKyIiLGksYSx3KTp2b2lkIDA7RT09PXZvaWQgMCYmKEU9bSksSjF0KGksYixFKX19LHVUKX1mdW5jdGlvbiBsVChpKXtyZXR1cm4gaX1mdW5jdGlvbiBIX2UoaSxhLGYpe3N3aXRjaChmLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBpLmNhbGwoYSk7Y2FzZSAxOnJldHVybiBpLmNhbGwoYSxmWzBdKTtjYXNlIDI6cmV0dXJuIGkuY2FsbChhLGZbMF0sZlsxXSk7Y2FzZSAzOnJldHVybiBpLmNhbGwoYSxmWzBdLGZbMV0sZlsyXSl9cmV0dXJuIGkuYXBwbHkoYSxmKX12YXIgTkl0PU1hdGgubWF4O2Z1bmN0aW9uIEJJdChpLGEsZil7cmV0dXJuIGE9Tkl0KGE9PT12b2lkIDA/aS5sZW5ndGgtMTphLDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBwPWFyZ3VtZW50cyx3PS0xLG09Tkl0KHAubGVuZ3RoLWEsMCksYj1BcnJheShtKTsrK3c8bTspYlt3XT1wW2Erd107dz0tMTtmb3IodmFyIEU9QXJyYXkoYSsxKTsrK3c8YTspRVt3XT1wW3ddO3JldHVybiBFW2FdPWYoYiksSF9lKGksdGhpcyxFKX19ZnVuY3Rpb24gSEEoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fXZhciBWX2U9RVc/ZnVuY3Rpb24oaSxhKXtyZXR1cm4gRVcoaSwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpIQShhKSx3cml0YWJsZTohMH0pfTpsVDtjb25zdCBHX2U9Vl9lO3ZhciBVX2U9ODAwLFdfZT0xNixZX2U9RGF0ZS5ub3c7ZnVuY3Rpb24gS19lKGkpe3ZhciBhPTAsZj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBwPVlfZSgpLHc9V19lLShwLWYpO2lmKGY9cCx3PjApe2lmKCsrYT49VV9lKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBhPTA7cmV0dXJuIGkuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fXZhciBYX2U9S19lKEdfZSk7Y29uc3QgUkl0PVhfZTtmdW5jdGlvbiBEVyhpLGEpe3JldHVybiBSSXQoQkl0KGksYSxsVCksaSsiIil9ZnVuY3Rpb24gbkYoaSxhLGYpe2lmKCFGYihmKSlyZXR1cm4hMTt2YXIgcD10eXBlb2YgYTtyZXR1cm4ocD09Im51bWJlciI/Y2soZikmJk1XKGEsZi5sZW5ndGgpOnA9PSJzdHJpbmciJiZhIGluIGYpP1JBKGZbYV0saSk6ITF9ZnVuY3Rpb24gUV9lKGkpe3JldHVybiBEVyhmdW5jdGlvbihhLGYpe3ZhciBwPS0xLHc9Zi5sZW5ndGgsbT13PjE/Zlt3LTFdOnZvaWQgMCxiPXc+Mj9mWzJdOnZvaWQgMDtmb3IobT1pLmxlbmd0aD4zJiZ0eXBlb2YgbT09ImZ1bmN0aW9uIj8ody0tLG0pOnZvaWQgMCxiJiZuRihmWzBdLGZbMV0sYikmJihtPXc8Mz92b2lkIDA6bSx3PTEpLGE9T2JqZWN0KGEpOysrcDx3Oyl7dmFyIEU9ZltwXTtFJiZpKGEsRSxwLG0pfXJldHVybiBhfSl9dmFyIFpfZT1RX2UoZnVuY3Rpb24oaSxhLGYpe0ZJdChpLGEsZil9KTtjb25zdCBJVz1aX2Usakl0PSLigIsiLEpfZT17Y3VydmVCYXNpczpIUCxjdXJ2ZUJhc2lzQ2xvc2VkOmZUZSxjdXJ2ZUJhc2lzT3BlbjpkVGUsY3VydmVCdW1wWDpsVGUsY3VydmVCdW1wWTpoVGUsY3VydmVCdW5kbGU6Z1RlLGN1cnZlQ2FyZGluYWxDbG9zZWQ6YlRlLGN1cnZlQ2FyZGluYWxPcGVuOndUZSxjdXJ2ZUNhcmRpbmFsOnBUZSxjdXJ2ZUNhdG11bGxSb21DbG9zZWQ6bVRlLGN1cnZlQ2F0bXVsbFJvbU9wZW46eVRlLGN1cnZlQ2F0bXVsbFJvbTp2VGUsY3VydmVMaW5lYXI6Y2csY3VydmVMaW5lYXJDbG9zZWQ6eFRlLGN1cnZlTW9ub3RvbmVYOmtUZSxjdXJ2ZU1vbm90b25lWTpFVGUsY3VydmVOYXR1cmFsOlRUZSxjdXJ2ZVN0ZXA6Q1RlLGN1cnZlU3RlcEFmdGVyOlNUZSxjdXJ2ZVN0ZXBCZWZvcmU6X1RlfSx0U2U9L1xzKig/OihcdyspKD89Oik6fChcdyspKVxzKig/OihcdyspfCgoPzooPyF9JXsyfSkufFxyP1xuKSopKT9ccyooPzp9JXsyfSk/L2dpLGVTZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9JEl0KGksLyg/OmluaXRcYil8KD86aW5pdGlhbGl6ZVxiKS8pO2xldCBwPXt9O2lmKEFycmF5LmlzQXJyYXkoZikpe2NvbnN0IGI9Zi5tYXAoRT0+RS5hcmdzKTttVyhiKSxwPVoxKHAsWy4uLmJdKX1lbHNlIHA9Zi5hcmdzO2lmKCFwKXJldHVybjtsZXQgdz15VyhpLGEpO2NvbnN0IG09ImNvbmZpZyI7cmV0dXJuIHBbbV0hPT12b2lkIDAmJih3PT09ImZsb3djaGFydC12MiImJih3PSJmbG93Y2hhcnQiKSxwW3ddPXBbbV0sZGVsZXRlIHBbbV0pLHB9LCRJdD1mdW5jdGlvbihpLGE9bnVsbCl7dHJ5e2NvbnN0IGY9bmV3IFJlZ0V4cChgWyVdezJ9KD8hW3tdJHt0U2Uuc291cmNlfSkoPz1bfV1bJV17Mn0pLioKYCwiaWciKTtpPWkudHJpbSgpLnJlcGxhY2UoZiwiIikucmVwbGFjZSgvJy9nbSwnIicpLFV0LmRlYnVnKGBEZXRlY3RpbmcgZGlhZ3JhbSBkaXJlY3RpdmUke2EhPT1udWxsPyIgdHlwZToiK2E6IiJ9IGJhc2VkIG9uIHRoZSB0ZXh0OiR7aX1gKTtsZXQgcDtjb25zdCB3PVtdO2Zvcig7KHA9WFAuZXhlYyhpKSkhPT1udWxsOylpZihwLmluZGV4PT09WFAubGFzdEluZGV4JiZYUC5sYXN0SW5kZXgrKyxwJiYhYXx8YSYmcFsxXSYmcFsxXS5tYXRjaChhKXx8YSYmcFsyXSYmcFsyXS5tYXRjaChhKSl7Y29uc3QgbT1wWzFdP3BbMV06cFsyXSxiPXBbM10/cFszXS50cmltKCk6cFs0XT9KU09OLnBhcnNlKHBbNF0udHJpbSgpKTpudWxsO3cucHVzaCh7dHlwZTptLGFyZ3M6Yn0pfXJldHVybiB3Lmxlbmd0aD09PTA/e3R5cGU6aSxhcmdzOm51bGx9OncubGVuZ3RoPT09MT93WzBdOnd9Y2F0Y2goZil7cmV0dXJuIFV0LmVycm9yKGBFUlJPUjogJHtmLm1lc3NhZ2V9IC0gVW5hYmxlIHRvIHBhcnNlIGRpcmVjdGl2ZSB0eXBlOiAnJHthfScgYmFzZWQgb24gdGhlIHRleHQ6ICcke2l9J2ApLHt0eXBlOnZvaWQgMCxhcmdzOm51bGx9fX0sblNlPWZ1bmN0aW9uKGkpe3JldHVybiBpLnJlcGxhY2UoWFAsIiIpfSxyU2U9ZnVuY3Rpb24oaSxhKXtmb3IoY29uc3RbZixwXW9mIGEuZW50cmllcygpKWlmKHAubWF0Y2goaSkpcmV0dXJuIGY7cmV0dXJuLTF9O2Z1bmN0aW9uIGV3KGksYSl7aWYoIWkpcmV0dXJuIGE7Y29uc3QgZj1gY3VydmUke2kuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkraS5zbGljZSgxKX1gO3JldHVybiBKX2VbZl0/P2F9ZnVuY3Rpb24gaVNlKGksYSl7Y29uc3QgZj1pLnRyaW0oKTtpZihmKXJldHVybiBhLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiP2lrKGYpOmZ9Y29uc3Qgc1NlPShpLC4uLmEpPT57Y29uc3QgZj1pLnNwbGl0KCIuIikscD1mLmxlbmd0aC0xLHc9ZltwXTtsZXQgbT13aW5kb3c7Zm9yKGxldCBiPTA7YjxwO2IrKylpZihtPW1bZltiXV0sIW0pe1V0LmVycm9yKGBGdW5jdGlvbiBuYW1lOiAke2l9IG5vdCBmb3VuZCBpbiB3aW5kb3dgKTtyZXR1cm59bVt3XSguLi5hKX07ZnVuY3Rpb24gekl0KGksYSl7cmV0dXJuIWl8fCFhPzA6TWF0aC5zcXJ0KE1hdGgucG93KGEueC1pLngsMikrTWF0aC5wb3coYS55LWkueSwyKSl9ZnVuY3Rpb24gYVNlKGkpe2xldCBhLGY9MDtpLmZvckVhY2godz0+e2YrPXpJdCh3LGEpLGE9d30pO2NvbnN0IHA9Zi8yO3JldHVybiBhZHQoaSxwKX1mdW5jdGlvbiBvU2UoaSl7cmV0dXJuIGkubGVuZ3RoPT09MT9pWzBdOmFTZShpKX1jb25zdCBxSXQ9KGksYT0yKT0+e2NvbnN0IGY9TWF0aC5wb3coMTAsYSk7cmV0dXJuIE1hdGgucm91bmQoaSpmKS9mfSxhZHQ9KGksYSk9PntsZXQgZixwPWE7Zm9yKGNvbnN0IHcgb2YgaSl7aWYoZil7Y29uc3QgbT16SXQodyxmKTtpZihtPHApcC09bTtlbHNle2NvbnN0IGI9cC9tO2lmKGI8PTApcmV0dXJuIGY7aWYoYj49MSlyZXR1cm57eDp3LngseTp3Lnl9O2lmKGI+MCYmYjwxKXJldHVybnt4OnFJdCgoMS1iKSpmLngrYip3LngsNSkseTpxSXQoKDEtYikqZi55K2Iqdy55LDUpfX19Zj13fXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgYSBzdWl0YWJsZSBwb2ludCBmb3IgdGhlIGdpdmVuIGRpc3RhbmNlIil9LGNTZT0oaSxhLGYpPT57VXQuaW5mbyhgb3VyIHBvaW50cyAke0pTT04uc3RyaW5naWZ5KGEpfWApLGFbMF0hPT1mJiYoYT1hLnJldmVyc2UoKSk7Y29uc3Qgdz1hZHQoYSwyNSksbT1pPzEwOjUsYj1NYXRoLmF0YW4yKGFbMF0ueS13LnksYVswXS54LXcueCksRT17eDowLHk6MH07cmV0dXJuIEUueD1NYXRoLnNpbihiKSptKyhhWzBdLngrdy54KS8yLEUueT0tTWF0aC5jb3MoYikqbSsoYVswXS55K3cueSkvMixFfTtmdW5jdGlvbiB1U2UoaSxhLGYpe2NvbnN0IHA9c3RydWN0dXJlZENsb25lKGYpO1V0LmluZm8oIm91ciBwb2ludHMiLHApLGEhPT0ic3RhcnRfbGVmdCImJmEhPT0ic3RhcnRfcmlnaHQiJiZwLnJldmVyc2UoKTtjb25zdCB3PTI1K2ksbT1hZHQocCx3KSxiPTEwK2kqLjUsRT1NYXRoLmF0YW4yKHBbMF0ueS1tLnkscFswXS54LW0ueCksXz17eDowLHk6MH07cmV0dXJuIGE9PT0ic3RhcnRfbGVmdCI/KF8ueD1NYXRoLnNpbihFK01hdGguUEkpKmIrKHBbMF0ueCttLngpLzIsXy55PS1NYXRoLmNvcyhFK01hdGguUEkpKmIrKHBbMF0ueSttLnkpLzIpOmE9PT0iZW5kX3JpZ2h0Ij8oXy54PU1hdGguc2luKEUtTWF0aC5QSSkqYisocFswXS54K20ueCkvMi01LF8ueT0tTWF0aC5jb3MoRS1NYXRoLlBJKSpiKyhwWzBdLnkrbS55KS8yLTUpOmE9PT0iZW5kX2xlZnQiPyhfLng9TWF0aC5zaW4oRSkqYisocFswXS54K20ueCkvMi01LF8ueT0tTWF0aC5jb3MoRSkqYisocFswXS55K20ueSkvMi01KTooXy54PU1hdGguc2luKEUpKmIrKHBbMF0ueCttLngpLzIsXy55PS1NYXRoLmNvcyhFKSpiKyhwWzBdLnkrbS55KS8yKSxffWZ1bmN0aW9uIGltKGkpe2xldCBhPSIiLGY9IiI7Zm9yKGNvbnN0IHAgb2YgaSlwIT09dm9pZCAwJiYocC5zdGFydHNXaXRoKCJjb2xvcjoiKXx8cC5zdGFydHNXaXRoKCJ0ZXh0LWFsaWduOiIpP2Y9ZitwKyI7IjphPWErcCsiOyIpO3JldHVybntzdHlsZTphLGxhYmVsU3R5bGU6Zn19bGV0IEhJdD0wO2NvbnN0IFZJdD0oKT0+KEhJdCsrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrSEl0KTtmdW5jdGlvbiBsU2UoaSl7bGV0IGE9IiI7Y29uc3QgZj0iMDEyMzQ1Njc4OWFiY2RlZiIscD1mLmxlbmd0aDtmb3IobGV0IHc9MDt3PGk7dysrKWErPWYuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpwKSk7cmV0dXJuIGF9Y29uc3QgR0l0PWk9PmxTZShpLmxlbmd0aCksaFNlPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOiJzdGFydCIsc3R5bGU6IiM2NjYiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdmFsaWduOnZvaWQgMCx0ZXh0OiIifX0sZlNlPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hLnRleHQucmVwbGFjZShLci5saW5lQnJlYWtSZWdleCwiICIpLFsscF09VkEoYS5mb250U2l6ZSksdz1pLmFwcGVuZCgidGV4dCIpO3cuYXR0cigieCIsYS54KSx3LmF0dHIoInkiLGEueSksdy5zdHlsZSgidGV4dC1hbmNob3IiLGEuYW5jaG9yKSx3LnN0eWxlKCJmb250LWZhbWlseSIsYS5mb250RmFtaWx5KSx3LnN0eWxlKCJmb250LXNpemUiLHApLHcuc3R5bGUoImZvbnQtd2VpZ2h0IixhLmZvbnRXZWlnaHQpLHcuYXR0cigiZmlsbCIsYS5maWxsKSxhLmNsYXNzIT09dm9pZCAwJiZ3LmF0dHIoImNsYXNzIixhLmNsYXNzKTtjb25zdCBtPXcuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBtLmF0dHIoIngiLGEueCthLnRleHRNYXJnaW4qMiksbS5hdHRyKCJmaWxsIixhLmZpbGwpLG0udGV4dChmKSx3fSxVSXQ9akEoKGksYSxmKT0+e2lmKCFpfHwoZj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsam9pbldpdGg6Ijxici8+In0sZiksS3IubGluZUJyZWFrUmVnZXgudGVzdChpKSkpcmV0dXJuIGk7Y29uc3QgcD1pLnNwbGl0KCIgIiksdz1bXTtsZXQgbT0iIjtyZXR1cm4gcC5mb3JFYWNoKChiLEUpPT57Y29uc3QgXz1kMyhgJHtifSBgLGYpLEE9ZDMobSxmKTtpZihfPmEpe2NvbnN0e2h5cGhlbmF0ZWRTdHJpbmdzOk4scmVtYWluaW5nV29yZDpSfT1kU2UoYixhLCItIixmKTt3LnB1c2gobSwuLi5OKSxtPVJ9ZWxzZSBBK18+PWE/KHcucHVzaChtKSxtPWIpOm09W20sYl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTtFKzE9PT1wLmxlbmd0aCYmdy5wdXNoKG0pfSksdy5maWx0ZXIoYj0+YiE9PSIiKS5qb2luKGYuam9pbldpdGgpfSwoaSxhLGYpPT5gJHtpfSR7YX0ke2YuZm9udFNpemV9JHtmLmZvbnRXZWlnaHR9JHtmLmZvbnRGYW1pbHl9JHtmLmpvaW5XaXRofWApLGRTZT1qQSgoaSxhLGY9Ii0iLHApPT57cD1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsbWFyZ2luOjB9LHApO2NvbnN0IHc9Wy4uLmldLG09W107bGV0IGI9IiI7cmV0dXJuIHcuZm9yRWFjaCgoRSxfKT0+e2NvbnN0IEE9YCR7Yn0ke0V9YDtpZihkMyhBLHApPj1hKXtjb25zdCBCPV8rMSxOPXcubGVuZ3RoPT09QixSPWAke0F9JHtmfWA7bS5wdXNoKE4/QTpSKSxiPSIifWVsc2UgYj1BfSkse2h5cGhlbmF0ZWRTdHJpbmdzOm0scmVtYWluaW5nV29yZDpifX0sKGksYSxmPSItIixwKT0+YCR7aX0ke2F9JHtmfSR7cC5mb250U2l6ZX0ke3AuZm9udFdlaWdodH0ke3AuZm9udEZhbWlseX1gKTtmdW5jdGlvbiBvZHQoaSxhKXtyZXR1cm4gY2R0KGksYSkuaGVpZ2h0fWZ1bmN0aW9uIGQzKGksYSl7cmV0dXJuIGNkdChpLGEpLndpZHRofWNvbnN0IGNkdD1qQSgoaSxhKT0+e2NvbnN0e2ZvbnRTaXplOmY9MTIsZm9udEZhbWlseTpwPSJBcmlhbCIsZm9udFdlaWdodDp3PTQwMH09YTtpZighaSlyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07Y29uc3RbLG1dPVZBKGYpLGI9WyJzYW5zLXNlcmlmIixwXSxFPWkuc3BsaXQoS3IubGluZUJyZWFrUmVnZXgpLF89W10sQT15cigiYm9keSIpO2lmKCFBLnJlbW92ZSlyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9O2NvbnN0IEk9QS5hcHBlbmQoInN2ZyIpO2Zvcihjb25zdCBOIG9mIGIpe2xldCBSPTA7Y29uc3Qgej17d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9O2Zvcihjb25zdCBXIG9mIEUpe2NvbnN0IGV0PWhTZSgpO2V0LnRleHQ9V3x8akl0O2NvbnN0IHN0PWZTZShJLGV0KS5zdHlsZSgiZm9udC1zaXplIixtKS5zdHlsZSgiZm9udC13ZWlnaHQiLHcpLnN0eWxlKCJmb250LWZhbWlseSIsTiksYXQ9KHN0Ll9ncm91cHN8fHN0KVswXVswXS5nZXRCQm94KCk7aWYoYXQud2lkdGg9PT0wJiZhdC5oZWlnaHQ9PT0wKXRocm93IG5ldyBFcnJvcigic3ZnIGVsZW1lbnQgbm90IGluIHJlbmRlciB0cmVlIik7ei53aWR0aD1NYXRoLnJvdW5kKE1hdGgubWF4KHoud2lkdGgsYXQud2lkdGgpKSxSPU1hdGgucm91bmQoYXQuaGVpZ2h0KSx6LmhlaWdodCs9Uix6LmxpbmVIZWlnaHQ9TWF0aC5yb3VuZChNYXRoLm1heCh6LmxpbmVIZWlnaHQsUikpfV8ucHVzaCh6KX1JLnJlbW92ZSgpO2NvbnN0IEI9aXNOYU4oX1sxXS5oZWlnaHQpfHxpc05hTihfWzFdLndpZHRoKXx8aXNOYU4oX1sxXS5saW5lSGVpZ2h0KXx8X1swXS5oZWlnaHQ+X1sxXS5oZWlnaHQmJl9bMF0ud2lkdGg+X1sxXS53aWR0aCYmX1swXS5saW5lSGVpZ2h0Pl9bMV0ubGluZUhlaWdodD8wOjE7cmV0dXJuIF9bQl19LChpLGEpPT5gJHtpfSR7YS5mb250U2l6ZX0ke2EuZm9udFdlaWdodH0ke2EuZm9udEZhbWlseX1gKTtjbGFzcyBnU2V7Y29uc3RydWN0b3IoYT0hMSxmKXt0aGlzLmNvdW50PTAsdGhpcy5jb3VudD1mP2YubGVuZ3RoOjAsdGhpcy5uZXh0PWE/KCk9PnRoaXMuY291bnQrKzooKT0+RGF0ZS5ub3coKX19bGV0IE9XO2NvbnN0IHBTZT1mdW5jdGlvbihpKXtyZXR1cm4gT1c9T1d8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGk9ZXNjYXBlKGkpLnJlcGxhY2UoLyUyNi9nLCImIikucmVwbGFjZSgvJTIzL2csIiMiKS5yZXBsYWNlKC8lM0IvZywiOyIpLE9XLmlubmVySFRNTD1pLHVuZXNjYXBlKE9XLnRleHRDb250ZW50KX07ZnVuY3Rpb24gV0l0KGkpe3JldHVybiJzdHIiaW4gaX1jb25zdCBiU2U9KGksYSxmLHApPT57dmFyIG07aWYoIXApcmV0dXJuO2NvbnN0IHc9KG09aS5ub2RlKCkpPT1udWxsP3ZvaWQgMDptLmdldEJCb3goKTt3JiZpLmFwcGVuZCgidGV4dCIpLnRleHQocCkuYXR0cigieCIsdy54K3cud2lkdGgvMikuYXR0cigieSIsLWYpLmF0dHIoImNsYXNzIixhKX0sVkE9aT0+e2lmKHR5cGVvZiBpPT0ibnVtYmVyIilyZXR1cm5baSxpKyJweCJdO2NvbnN0IGE9cGFyc2VJbnQoaT8/IiIsMTApO3JldHVybiBOdW1iZXIuaXNOYU4oYSk/W3ZvaWQgMCx2b2lkIDBdOmk9PT1TdHJpbmcoYSk/W2EsaSsicHgiXTpbYSxpXX07ZnVuY3Rpb24gckYoaSxhKXtyZXR1cm4gSVcoe30saSxhKX1jb25zdCAkYT17YXNzaWduV2l0aERlcHRoOloxLHdyYXBMYWJlbDpVSXQsY2FsY3VsYXRlVGV4dEhlaWdodDpvZHQsY2FsY3VsYXRlVGV4dFdpZHRoOmQzLGNhbGN1bGF0ZVRleHREaW1lbnNpb25zOmNkdCxjbGVhbkFuZE1lcmdlOnJGLGRldGVjdEluaXQ6ZVNlLGRldGVjdERpcmVjdGl2ZTokSXQsaXNTdWJzdHJpbmdJbkFycmF5OnJTZSxpbnRlcnBvbGF0ZVRvQ3VydmU6ZXcsY2FsY0xhYmVsUG9zaXRpb246b1NlLGNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uOmNTZSxjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uOnVTZSxmb3JtYXRVcmw6aVNlLGdldFN0eWxlc0Zyb21BcnJheTppbSxnZW5lcmF0ZUlkOlZJdCxyYW5kb206R0l0LHJ1bkZ1bmM6c1NlLGVudGl0eURlY29kZTpwU2UsaW5zZXJ0VGl0bGU6YlNlLHBhcnNlRm9udFNpemU6VkEsSW5pdElER2VuZXJhdG9yOmdTZX07dmFyIFlJdD0iY29tbSIsS0l0PSJydWxlIixYSXQ9ImRlY2wiLHdTZT0iQGltcG9ydCIsdlNlPSJAa2V5ZnJhbWVzIixtU2U9TWF0aC5hYnMsdWR0PVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gUUl0KGkpe3JldHVybiBpLnRyaW0oKX1mdW5jdGlvbiBsZHQoaSxhLGYpe3JldHVybiBpLnJlcGxhY2UoYSxmKX1mdW5jdGlvbiB5U2UoaSxhKXtyZXR1cm4gaS5pbmRleE9mKGEpfWZ1bmN0aW9uIGlGKGksYSl7cmV0dXJuIGkuY2hhckNvZGVBdChhKXwwfWZ1bmN0aW9uIHNGKGksYSxmKXtyZXR1cm4gaS5zbGljZShhLGYpfWZ1bmN0aW9uIHVrKGkpe3JldHVybiBpLmxlbmd0aH1mdW5jdGlvbiBaSXQoaSl7cmV0dXJuIGkubGVuZ3RofWZ1bmN0aW9uIFBXKGksYSl7cmV0dXJuIGEucHVzaChpKSxpfXZhciBGVz0xLEdBPTEsSkl0PTAsbnc9MCxPZj0wLFVBPSIiO2Z1bmN0aW9uIGhkdChpLGEsZixwLHcsbSxiKXtyZXR1cm57dmFsdWU6aSxyb290OmEscGFyZW50OmYsdHlwZTpwLHByb3BzOncsY2hpbGRyZW46bSxsaW5lOkZXLGNvbHVtbjpHQSxsZW5ndGg6YixyZXR1cm46IiJ9fWZ1bmN0aW9uIHhTZSgpe3JldHVybiBPZn1mdW5jdGlvbiBrU2UoKXtyZXR1cm4gT2Y9bnc+MD9pRihVQSwtLW53KTowLEdBLS0sT2Y9PT0xMCYmKEdBPTEsRlctLSksT2Z9ZnVuY3Rpb24gc20oKXtyZXR1cm4gT2Y9bnc8Skl0P2lGKFVBLG53KyspOjAsR0ErKyxPZj09PTEwJiYoR0E9MSxGVysrKSxPZn1mdW5jdGlvbiBoVCgpe3JldHVybiBpRihVQSxudyl9ZnVuY3Rpb24gTlcoKXtyZXR1cm4gbnd9ZnVuY3Rpb24gQlcoaSxhKXtyZXR1cm4gc0YoVUEsaSxhKX1mdW5jdGlvbiBmZHQoaSl7c3dpdGNoKGkpe2Nhc2UgMDpjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIDU7Y2FzZSAzMzpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0NzpjYXNlIDYyOmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA1OTpjYXNlIDEyMzpjYXNlIDEyNTpyZXR1cm4gNDtjYXNlIDU4OnJldHVybiAzO2Nhc2UgMzQ6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgOTE6cmV0dXJuIDI7Y2FzZSA0MTpjYXNlIDkzOnJldHVybiAxfXJldHVybiAwfWZ1bmN0aW9uIEVTZShpKXtyZXR1cm4gRlc9R0E9MSxKSXQ9dWsoVUE9aSksbnc9MCxbXX1mdW5jdGlvbiBUU2UoaSl7cmV0dXJuIFVBPSIiLGl9ZnVuY3Rpb24gZGR0KGkpe3JldHVybiBRSXQoQlcobnctMSxnZHQoaT09PTkxP2krMjppPT09NDA/aSsxOmkpKSl9ZnVuY3Rpb24gQ1NlKGkpe2Zvcig7KE9mPWhUKCkpJiZPZjwzMzspc20oKTtyZXR1cm4gZmR0KGkpPjJ8fGZkdChPZik+Mz8iIjoiICJ9ZnVuY3Rpb24gX1NlKGksYSl7Zm9yKDstLWEmJnNtKCkmJiEoT2Y8NDh8fE9mPjEwMnx8T2Y+NTcmJk9mPDY1fHxPZj43MCYmT2Y8OTcpOyk7cmV0dXJuIEJXKGksTlcoKSsoYTw2JiZoVCgpPT0zMiYmc20oKT09MzIpKX1mdW5jdGlvbiBnZHQoaSl7Zm9yKDtzbSgpOylzd2l0Y2goT2Ype2Nhc2UgaTpyZXR1cm4gbnc7Y2FzZSAzNDpjYXNlIDM5OmkhPT0zNCYmaSE9PTM5JiZnZHQoT2YpO2JyZWFrO2Nhc2UgNDA6aT09PTQxJiZnZHQoaSk7YnJlYWs7Y2FzZSA5MjpzbSgpO2JyZWFrfXJldHVybiBud31mdW5jdGlvbiBTU2UoaSxhKXtmb3IoO3NtKCkmJmkrT2YhPT00NysxMDspaWYoaStPZj09PTQyKzQyJiZoVCgpPT09NDcpYnJlYWs7cmV0dXJuIi8qIitCVyhhLG53LTEpKyIqIit1ZHQoaT09PTQ3P2k6c20oKSl9ZnVuY3Rpb24gQVNlKGkpe2Zvcig7IWZkdChoVCgpKTspc20oKTtyZXR1cm4gQlcoaSxudyl9ZnVuY3Rpb24gTFNlKGkpe3JldHVybiBUU2UoUlcoIiIsbnVsbCxudWxsLG51bGwsWyIiXSxpPUVTZShpKSwwLFswXSxpKSl9ZnVuY3Rpb24gUlcoaSxhLGYscCx3LG0sYixFLF8pe2Zvcih2YXIgQT0wLEk9MCxCPWIsTj0wLFI9MCx6PTAsVz0xLGV0PTEsc3Q9MSxhdD0wLGJ0PSIiLG10PXcseXQ9bSxmdD1wLHV0PWJ0O2V0Oylzd2l0Y2goej1hdCxhdD1zbSgpKXtjYXNlIDQwOmlmKHohPTEwOCYmaUYodXQsQi0xKT09NTgpe3lTZSh1dCs9bGR0KGRkdChhdCksIiYiLCImXGYiKSwiJlxmIikhPS0xJiYoc3Q9LTEpO2JyZWFrfWNhc2UgMzQ6Y2FzZSAzOTpjYXNlIDkxOnV0Kz1kZHQoYXQpO2JyZWFrO2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjp1dCs9Q1NlKHopO2JyZWFrO2Nhc2UgOTI6dXQrPV9TZShOVygpLTEsNyk7Y29udGludWU7Y2FzZSA0Nzpzd2l0Y2goaFQoKSl7Y2FzZSA0MjpjYXNlIDQ3OlBXKE1TZShTU2Uoc20oKSxOVygpKSxhLGYpLF8pO2JyZWFrO2RlZmF1bHQ6dXQrPSIvIn1icmVhaztjYXNlIDEyMypXOkVbQSsrXT11ayh1dCkqc3Q7Y2FzZSAxMjUqVzpjYXNlIDU5OmNhc2UgMDpzd2l0Y2goYXQpe2Nhc2UgMDpjYXNlIDEyNTpldD0wO2Nhc2UgNTkrSTpSPjAmJnVrKHV0KS1CJiZQVyhSPjMyP2VPdCh1dCsiOyIscCxmLEItMSk6ZU90KGxkdCh1dCwiICIsIiIpKyI7IixwLGYsQi0yKSxfKTticmVhaztjYXNlIDU5OnV0Kz0iOyI7ZGVmYXVsdDppZihQVyhmdD10T3QodXQsYSxmLEEsSSx3LEUsYnQsbXQ9W10seXQ9W10sQiksbSksYXQ9PT0xMjMpaWYoST09PTApUlcodXQsYSxmdCxmdCxtdCxtLEIsRSx5dCk7ZWxzZSBzd2l0Y2goTj09PTk5JiZpRih1dCwzKT09PTExMD8xMDA6Til7Y2FzZSAxMDA6Y2FzZSAxMDk6Y2FzZSAxMTU6UlcoaSxmdCxmdCxwJiZQVyh0T3QoaSxmdCxmdCwwLDAsdyxFLGJ0LHcsbXQ9W10sQikseXQpLHcseXQsQixFLHA/bXQ6eXQpO2JyZWFrO2RlZmF1bHQ6UlcodXQsZnQsZnQsZnQsWyIiXSx5dCwwLEUseXQpfX1BPUk9Uj0wLFc9c3Q9MSxidD11dD0iIixCPWI7YnJlYWs7Y2FzZSA1ODpCPTErdWsodXQpLFI9ejtkZWZhdWx0OmlmKFc8MSl7aWYoYXQ9PTEyMyktLVc7ZWxzZSBpZihhdD09MTI1JiZXKys9PTAmJmtTZSgpPT0xMjUpY29udGludWV9c3dpdGNoKHV0Kz11ZHQoYXQpLGF0Klcpe2Nhc2UgMzg6c3Q9ST4wPzE6KHV0Kz0iXGYiLC0xKTticmVhaztjYXNlIDQ0OkVbQSsrXT0odWsodXQpLTEpKnN0LHN0PTE7YnJlYWs7Y2FzZSA2NDpoVCgpPT09NDUmJih1dCs9ZGR0KHNtKCkpKSxOPWhUKCksST1CPXVrKGJ0PXV0Kz1BU2UoTlcoKSkpLGF0Kys7YnJlYWs7Y2FzZSA0NTp6PT09NDUmJnVrKHV0KT09MiYmKFc9MCl9fXJldHVybiBtfWZ1bmN0aW9uIHRPdChpLGEsZixwLHcsbSxiLEUsXyxBLEkpe2Zvcih2YXIgQj13LTEsTj13PT09MD9tOlsiIl0sUj1aSXQoTiksej0wLFc9MCxldD0wO3o8cDsrK3opZm9yKHZhciBzdD0wLGF0PXNGKGksQisxLEI9bVNlKFc9Ylt6XSkpLGJ0PWk7c3Q8UjsrK3N0KShidD1RSXQoVz4wP05bc3RdKyIgIithdDpsZHQoYXQsLyZcZi9nLE5bc3RdKSkpJiYoX1tldCsrXT1idCk7cmV0dXJuIGhkdChpLGEsZix3PT09MD9LSXQ6RSxfLEEsSSl9ZnVuY3Rpb24gTVNlKGksYSxmKXtyZXR1cm4gaGR0KGksYSxmLFlJdCx1ZHQoeFNlKCkpLHNGKGksMiwtMiksMCl9ZnVuY3Rpb24gZU90KGksYSxmLHApe3JldHVybiBoZHQoaSxhLGYsWEl0LHNGKGksMCxwKSxzRihpLHArMSwtMSkscCl9ZnVuY3Rpb24gcGR0KGksYSl7Zm9yKHZhciBmPSIiLHA9Wkl0KGkpLHc9MDt3PHA7dysrKWYrPWEoaVt3XSx3LGksYSl8fCIiO3JldHVybiBmfWZ1bmN0aW9uIERTZShpLGEsZixwKXtzd2l0Y2goaS50eXBlKXtjYXNlIHdTZTpjYXNlIFhJdDpyZXR1cm4gaS5yZXR1cm49aS5yZXR1cm58fGkudmFsdWU7Y2FzZSBZSXQ6cmV0dXJuIiI7Y2FzZSB2U2U6cmV0dXJuIGkucmV0dXJuPWkudmFsdWUrInsiK3BkdChpLmNoaWxkcmVuLHApKyJ9IjtjYXNlIEtJdDppLnZhbHVlPWkucHJvcHMuam9pbigiLCIpfXJldHVybiB1ayhmPXBkdChpLmNoaWxkcmVuLHApKT9pLnJldHVybj1pLnZhbHVlKyJ7IitmKyJ9IjoiIn1jb25zdCBuT3Q9IjEwLjYuMSIsV0E9T2JqZWN0LmZyZWV6ZShaaCk7bGV0IGZwPVoxKHt9LFdBKSxyT3QsWUE9W10sYUY9WjEoe30sV0EpO2NvbnN0IGpXPShpLGEpPT57bGV0IGY9WjEoe30saSkscD17fTtmb3IoY29uc3QgdyBvZiBhKWFPdCh3KSxwPVoxKHAsdyk7aWYoZj1aMShmLHApLHAudGhlbWUmJnAudGhlbWUgaW4gVDUpe2NvbnN0IHc9WjEoe30sck90KSxtPVoxKHcudGhlbWVWYXJpYWJsZXN8fHt9LHAudGhlbWVWYXJpYWJsZXMpO2YudGhlbWUmJmYudGhlbWUgaW4gVDUmJihmLnRoZW1lVmFyaWFibGVzPVQ1W2YudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKG0pKX1yZXR1cm4gYUY9ZixjT3QoYUYpLGFGfSxJU2U9aT0+KGZwPVoxKHt9LFdBKSxmcD1aMShmcCxpKSxpLnRoZW1lJiZUNVtpLnRoZW1lXSYmKGZwLnRoZW1lVmFyaWFibGVzPVQ1W2kudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKGkudGhlbWVWYXJpYWJsZXMpKSxqVyhmcCxZQSksZnApLE9TZT1pPT57ck90PVoxKHt9LGkpfSxQU2U9aT0+KGZwPVoxKGZwLGkpLGpXKGZwLFlBKSxmcCksaU90PSgpPT5aMSh7fSxmcCksc090PWk9PihjT3QoaSksWjEoYUYsaSksRmQoKSksRmQ9KCk9PloxKHt9LGFGKSxhT3Q9aT0+e2kmJihbInNlY3VyZSIsLi4uZnAuc2VjdXJlPz9bXV0uZm9yRWFjaChhPT57T2JqZWN0Lmhhc093bihpLGEpJiYoVXQuZGVidWcoYERlbmllZCBhdHRlbXB0IHRvIG1vZGlmeSBhIHNlY3VyZSBrZXkgJHthfWAsaVthXSksZGVsZXRlIGlbYV0pfSksT2JqZWN0LmtleXMoaSkuZm9yRWFjaChhPT57YS5zdGFydHNXaXRoKCJfXyIpJiZkZWxldGUgaVthXX0pLE9iamVjdC5rZXlzKGkpLmZvckVhY2goYT0+e3R5cGVvZiBpW2FdPT0ic3RyaW5nIiYmKGlbYV0uaW5jbHVkZXMoIjwiKXx8aVthXS5pbmNsdWRlcygiPiIpfHxpW2FdLmluY2x1ZGVzKCJ1cmwoZGF0YToiKSkmJmRlbGV0ZSBpW2FdLHR5cGVvZiBpW2FdPT0ib2JqZWN0IiYmYU90KGlbYV0pfSkpfSxGU2U9aT0+e21XKGkpLGkuZm9udEZhbWlseSYmKCFpLnRoZW1lVmFyaWFibGVzfHwhaS50aGVtZVZhcmlhYmxlcy5mb250RmFtaWx5KSYmKGkudGhlbWVWYXJpYWJsZXM9e2ZvbnRGYW1pbHk6aS5mb250RmFtaWx5fSksWUEucHVzaChpKSxqVyhmcCxZQSl9LCRXPShpPWZwKT0+e1lBPVtdLGpXKGksWUEpfSxOU2U9e0xBWllfTE9BRF9ERVBSRUNBVEVEOiJUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGxhenlMb2FkZWREaWFncmFtcyBhbmQgbG9hZEV4dGVybmFsRGlhZ3JhbXNBdFN0YXJ0dXAgYXJlIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgcmVnaXN0ZXJFeHRlcm5hbERpYWdyYW1zIGluc3RlYWQuIn0sb090PXt9LEJTZT1pPT57b090W2ldfHwoVXQud2FybihOU2VbaV0pLG9PdFtpXT0hMCl9LGNPdD1pPT57aSYmKGkubGF6eUxvYWRlZERpYWdyYW1zfHxpLmxvYWRFeHRlcm5hbERpYWdyYW1zQXRTdGFydHVwKSYmQlNlKCJMQVpZX0xPQURfREVQUkVDQVRFRCIpfSx1T3Q9ImM0IixSU2U9e2lkOnVPdCxkZXRlY3RvcjppPT4vXlxzKkM0Q29udGV4dHxDNENvbnRhaW5lcnxDNENvbXBvbmVudHxDNER5bmFtaWN8QzREZXBsb3ltZW50Ly50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5uSWUpO3JldHVybntpZDp1T3QsZGlhZ3JhbTppfX19LGxPdD0iZmxvd2NoYXJ0IixqU2U9e2lkOmxPdCxkZXRlY3RvcjooaSxhKT0+e3ZhciBmLHA7cmV0dXJuKChmPWE9PW51bGw/dm9pZCAwOmEuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIifHwoKHA9YT09bnVsbD92b2lkIDA6YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpwLmRlZmF1bHRSZW5kZXJlcik9PT0iZWxrIj8hMTovXlxzKmdyYXBoLy50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+Y3plKTtyZXR1cm57aWQ6bE90LGRpYWdyYW06aX19fSxoT3Q9ImZsb3djaGFydC12MiIsJFNlPXtpZDpoT3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZixwLHc7cmV0dXJuKChmPWE9PW51bGw/dm9pZCAwOmEuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLWQzInx8KChwPWE9PW51bGw/dm9pZCAwOmEuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6cC5kZWZhdWx0UmVuZGVyZXIpPT09ImVsayI/ITE6L15ccypncmFwaC8udGVzdChpKSYmKCh3PWE9PW51bGw/dm9pZCAwOmEuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6dy5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiPyEwOi9eXHMqZmxvd2NoYXJ0Ly50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dXplKTtyZXR1cm57aWQ6aE90LGRpYWdyYW06aX19fSxmT3Q9ImVyIix6U2U9e2lkOmZPdCxkZXRlY3RvcjppPT4vXlxzKmVyRGlhZ3JhbS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+RnplKTtyZXR1cm57aWQ6Zk90LGRpYWdyYW06aX19fSxkT3Q9ImdpdEdyYXBoIixxU2U9e2lkOmRPdCxkZXRlY3RvcjppPT4vXlxzKmdpdEdyYXBoLy50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5hcWUpO3JldHVybntpZDpkT3QsZGlhZ3JhbTppfX19LGdPdD0iZ2FudHQiLEhTZT17aWQ6Z090LGRldGVjdG9yOmk9Pi9eXHMqZ2FudHQvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PktxZSk7cmV0dXJue2lkOmdPdCxkaWFncmFtOml9fX0scE90PSJpbmZvIixWU2U9e2lkOnBPdCxkZXRlY3RvcjppPT4vXlxzKmluZm8vLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlFxZSk7cmV0dXJue2lkOnBPdCxkaWFncmFtOml9fX0sYk90PSJwaWUiLEdTZT17aWQ6Yk90LGRldGVjdG9yOmk9Pi9eXHMqcGllLy50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ySGUpO3JldHVybntpZDpiT3QsZGlhZ3JhbTppfX19LHdPdD0icXVhZHJhbnRDaGFydCIsVVNlPXtpZDp3T3QsZGV0ZWN0b3I6aT0+L15ccypxdWFkcmFudENoYXJ0Ly50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5tSGUpO3JldHVybntpZDp3T3QsZGlhZ3JhbTppfX19LHZPdD0ieHljaGFydCIsV1NlPXtpZDp2T3QsZGV0ZWN0b3I6aT0+L15ccyp4eWNoYXJ0LWJldGEvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkhIZSk7cmV0dXJue2lkOnZPdCxkaWFncmFtOml9fX0sbU90PSJyZXF1aXJlbWVudCIsWVNlPXtpZDptT3QsZGV0ZWN0b3I6aT0+L15ccypyZXF1aXJlbWVudChEaWFncmFtKT8vLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkpIZSk7cmV0dXJue2lkOm1PdCxkaWFncmFtOml9fX0seU90PSJzZXF1ZW5jZSIsS1NlPXtpZDp5T3QsZGV0ZWN0b3I6aT0+L15ccypzZXF1ZW5jZURpYWdyYW0vLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmlHZSk7cmV0dXJue2lkOnlPdCxkaWFncmFtOml9fX0seE90PSJjbGFzcyIsWFNlPXtpZDp4T3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZjtyZXR1cm4oKGY9YT09bnVsbD92b2lkIDA6YS5jbGFzcyk9PW51bGw/dm9pZCAwOmYuZGVmYXVsdFJlbmRlcmVyKT09PSJkYWdyZS13cmFwcGVyIj8hMTovXlxzKmNsYXNzRGlhZ3JhbS8udGVzdChpKX0sbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkFHZSk7cmV0dXJue2lkOnhPdCxkaWFncmFtOml9fX0sa090PSJjbGFzc0RpYWdyYW0iLFFTZT17aWQ6a090LGRldGVjdG9yOihpLGEpPT57dmFyIGY7cmV0dXJuL15ccypjbGFzc0RpYWdyYW0vLnRlc3QoaSkmJigoZj1hPT1udWxsP3ZvaWQgMDphLmNsYXNzKT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiPyEwOi9eXHMqY2xhc3NEaWFncmFtLXYyLy50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+UEdlKTtyZXR1cm57aWQ6a090LGRpYWdyYW06aX19fSxFT3Q9InN0YXRlIixaU2U9e2lkOkVPdCxkZXRlY3RvcjooaSxhKT0+e3ZhciBmO3JldHVybigoZj1hPT1udWxsP3ZvaWQgMDphLnN0YXRlKT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiPyExOi9eXHMqc3RhdGVEaWFncmFtLy50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+eFVlKTtyZXR1cm57aWQ6RU90LGRpYWdyYW06aX19fSxUT3Q9InN0YXRlRGlhZ3JhbSIsSlNlPXtpZDpUT3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZjtyZXR1cm4hISgvXlxzKnN0YXRlRGlhZ3JhbS12Mi8udGVzdChpKXx8L15ccypzdGF0ZURpYWdyYW0vLnRlc3QoaSkmJigoZj1hPT1udWxsP3ZvaWQgMDphLnN0YXRlKT09bnVsbD92b2lkIDA6Zi5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiKX0sbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiRVZSk7cmV0dXJue2lkOlRPdCxkaWFncmFtOml9fX0sQ090PSJqb3VybmV5Iix0QWU9e2lkOkNPdCxkZXRlY3RvcjppPT4vXlxzKmpvdXJuZXkvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnNXZSk7cmV0dXJue2lkOkNPdCxkaWFncmFtOml9fX0sZUFlPWZ1bmN0aW9uKGksYSl7Zm9yKGxldCBmIG9mIGEpaS5hdHRyKGZbMF0sZlsxXSl9LG5BZT1mdW5jdGlvbihpLGEsZil7bGV0IHA9bmV3IE1hcDtyZXR1cm4gZj8ocC5zZXQoIndpZHRoIiwiMTAwJSIpLHAuc2V0KCJzdHlsZSIsYG1heC13aWR0aDogJHthfXB4O2ApKToocC5zZXQoImhlaWdodCIsaSkscC5zZXQoIndpZHRoIixhKSkscH0sazA9ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdz1uQWUoYSxmLHApO2VBZShpLHcpfSxmVD1mdW5jdGlvbihpLGEsZixwKXtjb25zdCB3PWEubm9kZSgpLmdldEJCb3goKSxtPXcud2lkdGgsYj13LmhlaWdodDtVdC5pbmZvKGBTVkcgYm91bmRzOiAke219eCR7Yn1gLHcpO2xldCBFPTAsXz0wO1V0LmluZm8oYEdyYXBoIGJvdW5kczogJHtFfXgke199YCxpKSxFPW0rZioyLF89YitmKjIsVXQuaW5mbyhgQ2FsY3VsYXRlZCBib3VuZHM6ICR7RX14JHtffWApLGswKGEsXyxFLHApO2NvbnN0IEE9YCR7dy54LWZ9ICR7dy55LWZ9ICR7dy53aWR0aCsyKmZ9ICR7dy5oZWlnaHQrMipmfWA7YS5hdHRyKCJ2aWV3Qm94IixBKX0selc9e30sckFlPShpLGEsZik9PntsZXQgcD0iIjtyZXR1cm4gaSBpbiB6VyYmeldbaV0/cD16V1tpXShmKTpVdC53YXJuKGBObyB0aGVtZSBmb3VuZCBmb3IgJHtpfWApLGAgJiB7CiAgICBmb250LWZhbWlseTogJHtmLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke2YuZm9udFNpemV9OwogICAgZmlsbDogJHtmLnRleHRDb2xvcn0KICB9CgogIC8qIENsYXNzZXMgY29tbW9uIGZvciBtdWx0aXBsZSBkaWFncmFtcyAqLwoKICAmIC5lcnJvci1pY29uIHsKICAgIGZpbGw6ICR7Zi5lcnJvckJrZ0NvbG9yfTsKICB9CiAgJiAuZXJyb3ItdGV4dCB7CiAgICBmaWxsOiAke2YuZXJyb3JUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiAke2YuZXJyb3JUZXh0Q29sb3J9OwogIH0KCiAgJiAuZWRnZS10aGlja25lc3Mtbm9ybWFsIHsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KICAmIC5lZGdlLXRoaWNrbmVzcy10aGljayB7CiAgICBzdHJva2Utd2lkdGg6IDMuNXB4CiAgfQogICYgLmVkZ2UtcGF0dGVybi1zb2xpZCB7CiAgICBzdHJva2UtZGFzaGFycmF5OiAwOwogIH0KCiAgJiAuZWRnZS1wYXR0ZXJuLWRhc2hlZHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDM7CiAgfQogIC5lZGdlLXBhdHRlcm4tZG90dGVkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQoKICAmIC5tYXJrZXIgewogICAgZmlsbDogJHtmLmxpbmVDb2xvcn07CiAgICBzdHJva2U6ICR7Zi5saW5lQ29sb3J9OwogIH0KICAmIC5tYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke2YubGluZUNvbG9yfTsKICB9CgogICYgc3ZnIHsKICAgIGZvbnQtZmFtaWx5OiAke2YuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7Zi5mb250U2l6ZX07CiAgfQoKICAke3B9CgogICR7YX0KYH0saUFlPShpLGEpPT57YSE9PXZvaWQgMCYmKHpXW2ldPWEpfSxzQWU9ckFlO2xldCBiZHQ9IiIsd2R0PSIiLHZkdD0iIjtjb25zdCBtZHQ9aT0+UTEoaSxGZCgpKSxoZz0oKT0+e2JkdD0iIix2ZHQ9IiIsd2R0PSIifSxFMD1pPT57YmR0PW1kdChpKS5yZXBsYWNlKC9eXHMrL2csIiIpfSxmZz0oKT0+YmR0LGRnPWk9Pnt2ZHQ9bWR0KGkpLnJlcGxhY2UoL1xuXHMrL2csYApgKX0sZ2c9KCk9PnZkdCxOYj1pPT57d2R0PW1kdChpKX0scGc9KCk9PndkdCxfT3Q9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGNsZWFyOmhnLGdldEFjY0Rlc2NyaXB0aW9uOmdnLGdldEFjY1RpdGxlOmZnLGdldERpYWdyYW1UaXRsZTpwZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxzZXRBY2NUaXRsZTpFMCxzZXREaWFncmFtVGl0bGU6TmJ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksYUFlPVV0LG9BZT1YZnQsT2U9RmQsY0FlPXNPdCxTT3Q9V0EsdUFlPWk9PlExKGksT2UoKSksQU90PWZULGxBZT0oKT0+X090LHFXPXt9LEhXPShpLGEsZik9Pnt2YXIgcDtpZihxV1tpXSl0aHJvdyBuZXcgRXJyb3IoYERpYWdyYW0gJHtpfSBhbHJlYWR5IHJlZ2lzdGVyZWQuYCk7cVdbaV09YSxmJiZ1SXQoaSxmKSxpQWUoaSxhLnN0eWxlcyksKHA9YS5pbmplY3RVdGlscyk9PW51bGx8fHAuY2FsbChhLGFBZSxvQWUsT2UsdUFlLEFPdCxsQWUoKSwoKT0+e30pfSx5ZHQ9aT0+e2lmKGkgaW4gcVcpcmV0dXJuIHFXW2ldO3Rocm93IG5ldyBoQWUoaSl9O2NsYXNzIGhBZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGEpe3N1cGVyKGBEaWFncmFtICR7YX0gbm90IGZvdW5kLmApfX1jb25zdCBWVz1pPT57dmFyIHc7Y29uc3R7c2VjdXJpdHlMZXZlbDphfT1PZSgpO2xldCBmPXlyKCJib2R5Iik7aWYoYT09PSJzYW5kYm94Iil7Y29uc3QgYj0oKHc9eXIoYCNpJHtpfWApLm5vZGUoKSk9PW51bGw/dm9pZCAwOncuY29udGVudERvY3VtZW50KT8/ZG9jdW1lbnQ7Zj15cihiLmJvZHkpfXJldHVybiBmLnNlbGVjdChgIyR7aX1gKX0sTE90PXtkcmF3OihpLGEsZik9PntVdC5kZWJ1ZyhgcmVuZXJpbmcgc3ZnIGZvciBzeW50YXggZXJyb3IKYCk7Y29uc3QgcD1WVyhhKTtwLmF0dHIoInZpZXdCb3giLCIwIDAgMjQxMiA1MTIiKSxrMChwLDEwMCw1MTIsITApO2NvbnN0IHc9cC5hcHBlbmQoImciKTt3LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDExLjMxMywxMjMuMzEzYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyLTkuMzc1LDkuMzc1LTIwLjY4OC0yMC42ODhjLTEyLjQ4NC0xMi41LTMyLjc2Ni0xMi41LTQ1LjI1LDBsLTE2LDE2Yy0xLjI2MSwxLjI2MS0yLjMwNCwyLjY0OC0zLjMxLDQuMDUxLTIxLjczOS04LjU2MS00NS4zMjQtMTMuNDI2LTcwLjA2NS0xMy40MjYtMTA1Ljg2NywwLTE5Miw4Ni4xMzMtMTkyLDE5MnM4Ni4xMzMsMTkyIDE5MiwxOTIgMTkyLTg2LjEzMyAxOTItMTkyYzAtMjQuNzQxLTQuODY0LTQ4LjMyNy0xMy40MjYtNzAuMDY1IDEuNDAyLTEuMDA3IDIuNzktMi4wNDkgNC4wNTEtMy4zMWwxNi0xNmMxMi41LTEyLjQ5MiAxMi41LTMyLjc1OCAwLTQ1LjI1bC0yMC42ODgtMjAuNjg4IDkuMzc1LTkuMzc1IDMyLjAwMS0zMS45OTl6bS0yMTkuMzEzLDEwMC42ODdjLTUyLjkzOCwwLTk2LDQzLjA2My05Niw5NiAwLDguODM2LTcuMTY0LDE2LTE2LDE2cy0xNi03LjE2NC0xNi0xNmMwLTcwLjU3OCA1Ny40MjItMTI4IDEyOC0xMjggOC44MzYsMCAxNiw3LjE2NCAxNiwxNnMtNy4xNjQsMTYtMTYsMTZ6Iiksdy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ1OS4wMiwxNDguOThjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTYsMTZjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYuMDAxLTE2eiIpLHcuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6Iiksdy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQwMCw2NGM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2di0zMmMwLTguODM2LTcuMTU2LTE2LTE2LTE2LTguODQ0LDAtMTYsNy4xNjQtMTYsMTZ2MzJjMCw4LjgzNiA3LjE1NiwxNiAxNiwxNnoiKSx3LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDk2LDk2LjU4NmgtMzJjLTguODQ0LDAtMTYsNy4xNjQtMTYsMTYgMCw4LjgzNiA3LjE1NiwxNiAxNiwxNmgzMmM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2IDAtOC44MzYtNy4xNTYtMTYtMTYtMTZ6Iiksdy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6Iiksdy5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxNDQwKS5hdHRyKCJ5IiwyNTApLmF0dHIoImZvbnQtc2l6ZSIsIjE1MHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgiU3ludGF4IGVycm9yIGluIHRleHQiKSx3LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDEyNTApLmF0dHIoInkiLDQwMCkuYXR0cigiZm9udC1zaXplIiwiMTAwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGBtZXJtYWlkIHZlcnNpb24gJHtmfWApfX0sZkFlPUxPdCxkQWU9e2RiOnt9LHJlbmRlcmVyOkxPdCxwYXJzZXI6e3BhcnNlcjp7eXk6e319LHBhcnNlOigpPT57fX19LE1PdD0iZmxvd2NoYXJ0LWVsayIsZ0FlPXtpZDpNT3QsZGV0ZWN0b3I6KGksYSk9Pnt2YXIgZjtyZXR1cm4hISgvXlxzKmZsb3djaGFydC1lbGsvLnRlc3QoaSl8fC9eXHMqZmxvd2NoYXJ0fGdyYXBoLy50ZXN0KGkpJiYoKGY9YT09bnVsbD92b2lkIDA6YS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpmLmRlZmF1bHRSZW5kZXJlcik9PT0iZWxrIil9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT54V2UpO3JldHVybntpZDpNT3QsZGlhZ3JhbTppfX19LERPdD0idGltZWxpbmUiLHBBZT17aWQ6RE90LGRldGVjdG9yOmk9Pi9eXHMqdGltZWxpbmUvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiRXZSk7cmV0dXJue2lkOkRPdCxkaWFncmFtOml9fX0sSU90PSJtaW5kbWFwIixiQWU9e2lkOklPdCxkZXRlY3RvcjppPT4vXlxzKm1pbmRtYXAvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmJZZSk7cmV0dXJue2lkOklPdCxkaWFncmFtOml9fX0sT090PSJzYW5rZXkiLHdBZT17aWQ6T090LGRldGVjdG9yOmk9Pi9eXHMqc2Fua2V5LWJldGEvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlVZZSk7cmV0dXJue2lkOk9PdCxkaWFncmFtOml9fX07bGV0IFBPdD0hMTtjb25zdCB4ZHQ9KCk9PntQT3R8fChQT3Q9ITAsSFcoImVycm9yIixkQWUsaT0+aS50b0xvd2VyQ2FzZSgpLnRyaW0oKT09PSJlcnJvciIpLEhXKCItLS0iLHtkYjp7Y2xlYXI6KCk9Pnt9fSxzdHlsZXM6e30scmVuZGVyZXI6e2RyYXc6KCk9Pnt9fSxwYXJzZXI6e3BhcnNlcjp7eXk6e319LHBhcnNlOigpPT57dGhyb3cgbmV3IEVycm9yKCJEaWFncmFtcyBiZWdpbm5pbmcgd2l0aCAtLS0gYXJlIG5vdCB2YWxpZC4gSWYgeW91IHdlcmUgdHJ5aW5nIHRvIHVzZSBhIFlBTUwgZnJvbnQtbWF0dGVyLCBwbGVhc2UgZW5zdXJlIHRoYXQgeW91J3ZlIGNvcnJlY3RseSBvcGVuZWQgYW5kIGNsb3NlZCB0aGUgWUFNTCBmcm9udC1tYXR0ZXIgd2l0aCB1bi1pbmRlbnRlZCBgLS0tYCBibG9ja3MiKX19LGluaXQ6KCk9Pm51bGx9LGk9PmkudG9Mb3dlckNhc2UoKS50cmltU3RhcnQoKS5zdGFydHNXaXRoKCItLS0iKSksY0l0KFJTZSxRU2UsWFNlLHpTZSxIU2UsVlNlLEdTZSxZU2UsS1NlLGdBZSwkU2UsalNlLGJBZSxwQWUscVNlLEpTZSxaU2UsdEFlLFVTZSx3QWUsV1NlKSl9O2NsYXNzIEZPdHtjb25zdHJ1Y3RvcihhLGY9e30pe3RoaXMudGV4dD1hLHRoaXMubWV0YWRhdGE9Zix0aGlzLnR5cGU9ImdyYXBoIix0aGlzLnRleHQrPWAKYDtjb25zdCBwPUZkKCk7dHJ5e3RoaXMudHlwZT15VyhhLHApfWNhdGNoKG0pe3RoaXMudHlwZT0iZXJyb3IiLHRoaXMuZGV0ZWN0RXJyb3I9bX1jb25zdCB3PXlkdCh0aGlzLnR5cGUpO1V0LmRlYnVnKCJUeXBlICIrdGhpcy50eXBlKSx0aGlzLmRiPXcuZGIsdGhpcy5yZW5kZXJlcj13LnJlbmRlcmVyLHRoaXMucGFyc2VyPXcucGFyc2VyLHRoaXMucGFyc2VyLnBhcnNlci55eT10aGlzLmRiLHRoaXMuaW5pdD13LmluaXQsdGhpcy5wYXJzZSgpfXBhcnNlKCl7dmFyIGYscCx3LG0sYjtpZih0aGlzLmRldGVjdEVycm9yKXRocm93IHRoaXMuZGV0ZWN0RXJyb3I7KHA9KGY9dGhpcy5kYikuY2xlYXIpPT1udWxsfHxwLmNhbGwoZik7Y29uc3QgYT1GZCgpOyh3PXRoaXMuaW5pdCk9PW51bGx8fHcuY2FsbCh0aGlzLGEpLHRoaXMubWV0YWRhdGEudGl0bGUmJigoYj0obT10aGlzLmRiKS5zZXREaWFncmFtVGl0bGUpPT1udWxsfHxiLmNhbGwobSx0aGlzLm1ldGFkYXRhLnRpdGxlKSksdGhpcy5wYXJzZXIucGFyc2UodGhpcy50ZXh0KX1hc3luYyByZW5kZXIoYSxmKXthd2FpdCB0aGlzLnJlbmRlcmVyLmRyYXcodGhpcy50ZXh0LGEsZix0aGlzKX1nZXRQYXJzZXIoKXtyZXR1cm4gdGhpcy5wYXJzZXJ9Z2V0VHlwZSgpe3JldHVybiB0aGlzLnR5cGV9fWNvbnN0IGtkdD1hc3luYyhpLGE9e30pPT57Y29uc3QgZj15VyhpLEZkKCkpO3RyeXt5ZHQoZil9Y2F0Y2h7Y29uc3Qgdz1FQ2UoZik7aWYoIXcpdGhyb3cgbmV3IG9JdChgRGlhZ3JhbSAke2Z9IG5vdCBmb3VuZC5gKTtjb25zdHtpZDptLGRpYWdyYW06Yn09YXdhaXQgdygpO0hXKG0sYil9cmV0dXJuIG5ldyBGT3QoaSxhKX07bGV0IEVkdD1bXTtjb25zdCB2QWU9aT0+e0VkdC5wdXNoKGkpfSxtQWU9KCk9PntFZHQuZm9yRWFjaChpPT57aSgpfSksRWR0PVtdfTt2YXIgeUFlPWtJdChPYmplY3Qua2V5cyxPYmplY3QpO2NvbnN0IHhBZT15QWU7dmFyIGtBZT1PYmplY3QucHJvdG90eXBlLEVBZT1rQWUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gTk90KGkpe2lmKCFfVyhpKSlyZXR1cm4geEFlKGkpO3ZhciBhPVtdO2Zvcih2YXIgZiBpbiBPYmplY3QoaSkpRUFlLmNhbGwoaSxmKSYmZiE9ImNvbnN0cnVjdG9yIiYmYS5wdXNoKGYpO3JldHVybiBhfXZhciBUQWU9b1Qobm0sIkRhdGFWaWV3Iik7Y29uc3QgVGR0PVRBZTt2YXIgQ0FlPW9UKG5tLCJQcm9taXNlIik7Y29uc3QgQ2R0PUNBZTt2YXIgX0FlPW9UKG5tLCJTZXQiKTtjb25zdCBLQT1fQWU7dmFyIFNBZT1vVChubSwiV2Vha01hcCIpO2NvbnN0IF9kdD1TQWU7dmFyIEJPdD0iW29iamVjdCBNYXBdIixBQWU9IltvYmplY3QgT2JqZWN0XSIsUk90PSJbb2JqZWN0IFByb21pc2VdIixqT3Q9IltvYmplY3QgU2V0XSIsJE90PSJbb2JqZWN0IFdlYWtNYXBdIix6T3Q9IltvYmplY3QgRGF0YVZpZXddIixMQWU9YVQoVGR0KSxNQWU9YVQoSlApLERBZT1hVChDZHQpLElBZT1hVChLQSksT0FlPWFUKF9kdCksZFQ9c1Q7KFRkdCYmZFQobmV3IFRkdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9ek90fHxKUCYmZFQobmV3IEpQKSE9Qk90fHxDZHQmJmRUKENkdC5yZXNvbHZlKCkpIT1ST3R8fEtBJiZkVChuZXcgS0EpIT1qT3R8fF9kdCYmZFQobmV3IF9kdCkhPSRPdCkmJihkVD1mdW5jdGlvbihpKXt2YXIgYT1zVChpKSxmPWE9PUFBZT9pLmNvbnN0cnVjdG9yOnZvaWQgMCxwPWY/YVQoZik6IiI7aWYocClzd2l0Y2gocCl7Y2FzZSBMQWU6cmV0dXJuIHpPdDtjYXNlIE1BZTpyZXR1cm4gQk90O2Nhc2UgREFlOnJldHVybiBST3Q7Y2FzZSBJQWU6cmV0dXJuIGpPdDtjYXNlIE9BZTpyZXR1cm4gJE90fXJldHVybiBhfSk7Y29uc3QgWEE9ZFQ7dmFyIFBBZT0iW29iamVjdCBNYXBdIixGQWU9IltvYmplY3QgU2V0XSIsTkFlPU9iamVjdC5wcm90b3R5cGUsQkFlPU5BZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBvRihpKXtpZihpPT1udWxsKXJldHVybiEwO2lmKGNrKGkpJiYoSWYoaSl8fHR5cGVvZiBpPT0ic3RyaW5nInx8dHlwZW9mIGkuc3BsaWNlPT0iZnVuY3Rpb24ifHx6QShpKXx8QVcoaSl8fCRBKGkpKSlyZXR1cm4haS5sZW5ndGg7dmFyIGE9WEEoaSk7aWYoYT09UEFlfHxhPT1GQWUpcmV0dXJuIWkuc2l6ZTtpZihfVyhpKSlyZXR1cm4hTk90KGkpLmxlbmd0aDtmb3IodmFyIGYgaW4gaSlpZihCQWUuY2FsbChpLGYpKXJldHVybiExO3JldHVybiEwfWNvbnN0IFJBZT0iZ3JhcGhpY3MtZG9jdW1lbnQgZG9jdW1lbnQiO2Z1bmN0aW9uIGpBZShpLGEpe2kuYXR0cigicm9sZSIsUkFlKSxhIT09IiImJmkuYXR0cigiYXJpYS1yb2xlZGVzY3JpcHRpb24iLGEpfWZ1bmN0aW9uICRBZShpLGEsZixwKXtpZihpLmluc2VydCE9PXZvaWQgMCl7aWYoZil7Y29uc3Qgdz1gY2hhcnQtZGVzYy0ke3B9YDtpLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLHcpLGkuaW5zZXJ0KCJkZXNjIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiaWQiLHcpLnRleHQoZil9aWYoYSl7Y29uc3Qgdz1gY2hhcnQtdGl0bGUtJHtwfWA7aS5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLHcpLGkuaW5zZXJ0KCJ0aXRsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImlkIix3KS50ZXh0KGEpfX19Y29uc3QgekFlPWk9PmkucmVwbGFjZSgvXlxzKiUlKD8heylbXlxuXStcbj8vZ20sIiIpLnRyaW1TdGFydCgpOy8qISBqcy15YW1sIDQuMS4wIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbCBAbGljZW5zZSBNSVQgKi9mdW5jdGlvbiBxT3QoaSl7cmV0dXJuIHR5cGVvZiBpPiJ1Inx8aT09PW51bGx9ZnVuY3Rpb24gcUFlKGkpe3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJmkhPT1udWxsfWZ1bmN0aW9uIEhBZShpKXtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT9pOnFPdChpKT9bXTpbaV19ZnVuY3Rpb24gVkFlKGksYSl7dmFyIGYscCx3LG07aWYoYSlmb3IobT1PYmplY3Qua2V5cyhhKSxmPTAscD1tLmxlbmd0aDtmPHA7Zis9MSl3PW1bZl0saVt3XT1hW3ddO3JldHVybiBpfWZ1bmN0aW9uIEdBZShpLGEpe3ZhciBmPSIiLHA7Zm9yKHA9MDtwPGE7cCs9MSlmKz1pO3JldHVybiBmfWZ1bmN0aW9uIFVBZShpKXtyZXR1cm4gaT09PTAmJk51bWJlci5ORUdBVElWRV9JTkZJTklUWT09PTEvaX12YXIgV0FlPXFPdCxZQWU9cUFlLEtBZT1IQWUsWEFlPUdBZSxRQWU9VUFlLFpBZT1WQWUsYmc9e2lzTm90aGluZzpXQWUsaXNPYmplY3Q6WUFlLHRvQXJyYXk6S0FlLHJlcGVhdDpYQWUsaXNOZWdhdGl2ZVplcm86UUFlLGV4dGVuZDpaQWV9O2Z1bmN0aW9uIEhPdChpLGEpe3ZhciBmPSIiLHA9aS5yZWFzb258fCIodW5rbm93biByZWFzb24pIjtyZXR1cm4gaS5tYXJrPyhpLm1hcmsubmFtZSYmKGYrPSdpbiAiJytpLm1hcmsubmFtZSsnIiAnKSxmKz0iKCIrKGkubWFyay5saW5lKzEpKyI6IisoaS5tYXJrLmNvbHVtbisxKSsiKSIsIWEmJmkubWFyay5zbmlwcGV0JiYoZis9YAoKYCtpLm1hcmsuc25pcHBldCkscCsiICIrZik6cH1mdW5jdGlvbiBjRihpLGEpe0Vycm9yLmNhbGwodGhpcyksdGhpcy5uYW1lPSJZQU1MRXhjZXB0aW9uIix0aGlzLnJlYXNvbj1pLHRoaXMubWFyaz1hLHRoaXMubWVzc2FnZT1IT3QodGhpcywhMSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrfHwiIn1jRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLGNGLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jRixjRi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubmFtZSsiOiAiK0hPdCh0aGlzLGEpfTt2YXIgQTU9Y0Y7ZnVuY3Rpb24gU2R0KGksYSxmLHAsdyl7dmFyIG09IiIsYj0iIixFPU1hdGguZmxvb3Iody8yKS0xO3JldHVybiBwLWE+RSYmKG09IiAuLi4gIixhPXAtRSttLmxlbmd0aCksZi1wPkUmJihiPSIgLi4uIixmPXArRS1iLmxlbmd0aCkse3N0cjptK2kuc2xpY2UoYSxmKS5yZXBsYWNlKC9cdC9nLCLihpIiKStiLHBvczpwLWErbS5sZW5ndGh9fWZ1bmN0aW9uIEFkdChpLGEpe3JldHVybiBiZy5yZXBlYXQoIiAiLGEtaS5sZW5ndGgpK2l9ZnVuY3Rpb24gSkFlKGksYSl7aWYoYT1PYmplY3QuY3JlYXRlKGF8fG51bGwpLCFpLmJ1ZmZlcilyZXR1cm4gbnVsbDthLm1heExlbmd0aHx8KGEubWF4TGVuZ3RoPTc5KSx0eXBlb2YgYS5pbmRlbnQhPSJudW1iZXIiJiYoYS5pbmRlbnQ9MSksdHlwZW9mIGEubGluZXNCZWZvcmUhPSJudW1iZXIiJiYoYS5saW5lc0JlZm9yZT0zKSx0eXBlb2YgYS5saW5lc0FmdGVyIT0ibnVtYmVyIiYmKGEubGluZXNBZnRlcj0yKTtmb3IodmFyIGY9L1xyP1xufFxyfFwwL2cscD1bMF0sdz1bXSxtLGI9LTE7bT1mLmV4ZWMoaS5idWZmZXIpOyl3LnB1c2gobS5pbmRleCkscC5wdXNoKG0uaW5kZXgrbVswXS5sZW5ndGgpLGkucG9zaXRpb248PW0uaW5kZXgmJmI8MCYmKGI9cC5sZW5ndGgtMik7YjwwJiYoYj1wLmxlbmd0aC0xKTt2YXIgRT0iIixfLEEsST1NYXRoLm1pbihpLmxpbmUrYS5saW5lc0FmdGVyLHcubGVuZ3RoKS50b1N0cmluZygpLmxlbmd0aCxCPWEubWF4TGVuZ3RoLShhLmluZGVudCtJKzMpO2ZvcihfPTE7Xzw9YS5saW5lc0JlZm9yZSYmIShiLV88MCk7XysrKUE9U2R0KGkuYnVmZmVyLHBbYi1fXSx3W2ItX10saS5wb3NpdGlvbi0ocFtiXS1wW2ItX10pLEIpLEU9YmcucmVwZWF0KCIgIixhLmluZGVudCkrQWR0KChpLmxpbmUtXysxKS50b1N0cmluZygpLEkpKyIgfCAiK0Euc3RyK2AKYCtFO2ZvcihBPVNkdChpLmJ1ZmZlcixwW2JdLHdbYl0saS5wb3NpdGlvbixCKSxFKz1iZy5yZXBlYXQoIiAiLGEuaW5kZW50KStBZHQoKGkubGluZSsxKS50b1N0cmluZygpLEkpKyIgfCAiK0Euc3RyK2AKYCxFKz1iZy5yZXBlYXQoIi0iLGEuaW5kZW50K0krMytBLnBvcykrYF4KYCxfPTE7Xzw9YS5saW5lc0FmdGVyJiYhKGIrXz49dy5sZW5ndGgpO18rKylBPVNkdChpLmJ1ZmZlcixwW2IrX10sd1tiK19dLGkucG9zaXRpb24tKHBbYl0tcFtiK19dKSxCKSxFKz1iZy5yZXBlYXQoIiAiLGEuaW5kZW50KStBZHQoKGkubGluZStfKzEpLnRvU3RyaW5nKCksSSkrIiB8ICIrQS5zdHIrYApgO3JldHVybiBFLnJlcGxhY2UoL1xuJC8sIiIpfXZhciB0TGU9SkFlLGVMZT1bImtpbmQiLCJtdWx0aSIsInJlc29sdmUiLCJjb25zdHJ1Y3QiLCJpbnN0YW5jZU9mIiwicHJlZGljYXRlIiwicmVwcmVzZW50IiwicmVwcmVzZW50TmFtZSIsImRlZmF1bHRTdHlsZSIsInN0eWxlQWxpYXNlcyJdLG5MZT1bInNjYWxhciIsInNlcXVlbmNlIiwibWFwcGluZyJdO2Z1bmN0aW9uIHJMZShpKXt2YXIgYT17fTtyZXR1cm4gaSE9PW51bGwmJk9iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oZil7aVtmXS5mb3JFYWNoKGZ1bmN0aW9uKHApe2FbU3RyaW5nKHApXT1mfSl9KSxhfWZ1bmN0aW9uIGlMZShpLGEpe2lmKGE9YXx8e30sT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihmKXtpZihlTGUuaW5kZXhPZihmKT09PS0xKXRocm93IG5ldyBBNSgnVW5rbm93biBvcHRpb24gIicrZisnIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiAiJytpKyciIFlBTUwgdHlwZS4nKX0pLHRoaXMub3B0aW9ucz1hLHRoaXMudGFnPWksdGhpcy5raW5kPWEua2luZHx8bnVsbCx0aGlzLnJlc29sdmU9YS5yZXNvbHZlfHxmdW5jdGlvbigpe3JldHVybiEwfSx0aGlzLmNvbnN0cnVjdD1hLmNvbnN0cnVjdHx8ZnVuY3Rpb24oZil7cmV0dXJuIGZ9LHRoaXMuaW5zdGFuY2VPZj1hLmluc3RhbmNlT2Z8fG51bGwsdGhpcy5wcmVkaWNhdGU9YS5wcmVkaWNhdGV8fG51bGwsdGhpcy5yZXByZXNlbnQ9YS5yZXByZXNlbnR8fG51bGwsdGhpcy5yZXByZXNlbnROYW1lPWEucmVwcmVzZW50TmFtZXx8bnVsbCx0aGlzLmRlZmF1bHRTdHlsZT1hLmRlZmF1bHRTdHlsZXx8bnVsbCx0aGlzLm11bHRpPWEubXVsdGl8fCExLHRoaXMuc3R5bGVBbGlhc2VzPXJMZShhLnN0eWxlQWxpYXNlc3x8bnVsbCksbkxlLmluZGV4T2YodGhpcy5raW5kKT09PS0xKXRocm93IG5ldyBBNSgnVW5rbm93biBraW5kICInK3RoaXMua2luZCsnIiBpcyBzcGVjaWZpZWQgZm9yICInK2krJyIgWUFNTCB0eXBlLicpfXZhciBUMD1pTGU7ZnVuY3Rpb24gVk90KGksYSl7dmFyIGY9W107cmV0dXJuIGlbYV0uZm9yRWFjaChmdW5jdGlvbihwKXt2YXIgdz1mLmxlbmd0aDtmLmZvckVhY2goZnVuY3Rpb24obSxiKXttLnRhZz09PXAudGFnJiZtLmtpbmQ9PT1wLmtpbmQmJm0ubXVsdGk9PT1wLm11bHRpJiYodz1iKX0pLGZbd109cH0pLGZ9ZnVuY3Rpb24gc0xlKCl7dmFyIGk9e3NjYWxhcjp7fSxzZXF1ZW5jZTp7fSxtYXBwaW5nOnt9LGZhbGxiYWNrOnt9LG11bHRpOntzY2FsYXI6W10sc2VxdWVuY2U6W10sbWFwcGluZzpbXSxmYWxsYmFjazpbXX19LGEsZjtmdW5jdGlvbiBwKHcpe3cubXVsdGk/KGkubXVsdGlbdy5raW5kXS5wdXNoKHcpLGkubXVsdGkuZmFsbGJhY2sucHVzaCh3KSk6aVt3LmtpbmRdW3cudGFnXT1pLmZhbGxiYWNrW3cudGFnXT13fWZvcihhPTAsZj1hcmd1bWVudHMubGVuZ3RoO2E8ZjthKz0xKWFyZ3VtZW50c1thXS5mb3JFYWNoKHApO3JldHVybiBpfWZ1bmN0aW9uIExkdChpKXtyZXR1cm4gdGhpcy5leHRlbmQoaSl9TGR0LnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24oYSl7dmFyIGY9W10scD1bXTtpZihhIGluc3RhbmNlb2YgVDApcC5wdXNoKGEpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShhKSlwPXAuY29uY2F0KGEpO2Vsc2UgaWYoYSYmKEFycmF5LmlzQXJyYXkoYS5pbXBsaWNpdCl8fEFycmF5LmlzQXJyYXkoYS5leHBsaWNpdCkpKWEuaW1wbGljaXQmJihmPWYuY29uY2F0KGEuaW1wbGljaXQpKSxhLmV4cGxpY2l0JiYocD1wLmNvbmNhdChhLmV4cGxpY2l0KSk7ZWxzZSB0aHJvdyBuZXcgQTUoIlNjaGVtYS5leHRlbmQgYXJndW1lbnQgc2hvdWxkIGJlIGEgVHlwZSwgWyBUeXBlIF0sIG9yIGEgc2NoZW1hIGRlZmluaXRpb24gKHsgaW1wbGljaXQ6IFsuLi5dLCBleHBsaWNpdDogWy4uLl0gfSkiKTtmLmZvckVhY2goZnVuY3Rpb24obSl7aWYoIShtIGluc3RhbmNlb2YgVDApKXRocm93IG5ldyBBNSgiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LiIpO2lmKG0ubG9hZEtpbmQmJm0ubG9hZEtpbmQhPT0ic2NhbGFyIil0aHJvdyBuZXcgQTUoIlRoZXJlIGlzIGEgbm9uLXNjYWxhciB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBJbXBsaWNpdCByZXNvbHZpbmcgb2Ygc3VjaCB0eXBlcyBpcyBub3Qgc3VwcG9ydGVkLiIpO2lmKG0ubXVsdGkpdGhyb3cgbmV3IEE1KCJUaGVyZSBpcyBhIG11bHRpIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIE11bHRpIHRhZ3MgY2FuIG9ubHkgYmUgbGlzdGVkIGFzIGV4cGxpY2l0LiIpfSkscC5mb3JFYWNoKGZ1bmN0aW9uKG0pe2lmKCEobSBpbnN0YW5jZW9mIFQwKSl0aHJvdyBuZXcgQTUoIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKX0pO3ZhciB3PU9iamVjdC5jcmVhdGUoTGR0LnByb3RvdHlwZSk7cmV0dXJuIHcuaW1wbGljaXQ9KHRoaXMuaW1wbGljaXR8fFtdKS5jb25jYXQoZiksdy5leHBsaWNpdD0odGhpcy5leHBsaWNpdHx8W10pLmNvbmNhdChwKSx3LmNvbXBpbGVkSW1wbGljaXQ9Vk90KHcsImltcGxpY2l0Iiksdy5jb21waWxlZEV4cGxpY2l0PVZPdCh3LCJleHBsaWNpdCIpLHcuY29tcGlsZWRUeXBlTWFwPXNMZSh3LmNvbXBpbGVkSW1wbGljaXQsdy5jb21waWxlZEV4cGxpY2l0KSx3fTt2YXIgYUxlPUxkdCxvTGU9bmV3IFQwKCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHIiLHtraW5kOiJzY2FsYXIiLGNvbnN0cnVjdDpmdW5jdGlvbihpKXtyZXR1cm4gaSE9PW51bGw/aToiIn19KSxjTGU9bmV3IFQwKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXEiLHtraW5kOiJzZXF1ZW5jZSIsY29uc3RydWN0OmZ1bmN0aW9uKGkpe3JldHVybiBpIT09bnVsbD9pOltdfX0pLHVMZT1uZXcgVDAoInRhZzp5YW1sLm9yZywyMDAyOm1hcCIse2tpbmQ6Im1hcHBpbmciLGNvbnN0cnVjdDpmdW5jdGlvbihpKXtyZXR1cm4gaSE9PW51bGw/aTp7fX19KSxsTGU9bmV3IGFMZSh7ZXhwbGljaXQ6W29MZSxjTGUsdUxlXX0pO2Z1bmN0aW9uIGhMZShpKXtpZihpPT09bnVsbClyZXR1cm4hMDt2YXIgYT1pLmxlbmd0aDtyZXR1cm4gYT09PTEmJmk9PT0ifiJ8fGE9PT00JiYoaT09PSJudWxsInx8aT09PSJOdWxsInx8aT09PSJOVUxMIil9ZnVuY3Rpb24gZkxlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gZExlKGkpe3JldHVybiBpPT09bnVsbH12YXIgZ0xlPW5ldyBUMCgidGFnOnlhbWwub3JnLDIwMDI6bnVsbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpoTGUsY29uc3RydWN0OmZMZSxwcmVkaWNhdGU6ZExlLHJlcHJlc2VudDp7Y2Fub25pY2FsOmZ1bmN0aW9uKCl7cmV0dXJuIn4ifSxsb3dlcmNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4ibnVsbCJ9LHVwcGVyY2FzZTpmdW5jdGlvbigpe3JldHVybiJOVUxMIn0sY2FtZWxjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIk51bGwifSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiIifX0sZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSk7ZnVuY3Rpb24gcExlKGkpe2lmKGk9PT1udWxsKXJldHVybiExO3ZhciBhPWkubGVuZ3RoO3JldHVybiBhPT09NCYmKGk9PT0idHJ1ZSJ8fGk9PT0iVHJ1ZSJ8fGk9PT0iVFJVRSIpfHxhPT09NSYmKGk9PT0iZmFsc2UifHxpPT09IkZhbHNlInx8aT09PSJGQUxTRSIpfWZ1bmN0aW9uIGJMZShpKXtyZXR1cm4gaT09PSJ0cnVlInx8aT09PSJUcnVlInx8aT09PSJUUlVFIn1mdW5jdGlvbiB3TGUoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IEJvb2xlYW5dIn12YXIgdkxlPW5ldyBUMCgidGFnOnlhbWwub3JnLDIwMDI6Ym9vbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpwTGUsY29uc3RydWN0OmJMZSxwcmVkaWNhdGU6d0xlLHJlcHJlc2VudDp7bG93ZXJjYXNlOmZ1bmN0aW9uKGkpe3JldHVybiBpPyJ0cnVlIjoiZmFsc2UifSx1cHBlcmNhc2U6ZnVuY3Rpb24oaSl7cmV0dXJuIGk/IlRSVUUiOiJGQUxTRSJ9LGNhbWVsY2FzZTpmdW5jdGlvbihpKXtyZXR1cm4gaT8iVHJ1ZSI6IkZhbHNlIn19LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pO2Z1bmN0aW9uIG1MZShpKXtyZXR1cm4gNDg8PWkmJmk8PTU3fHw2NTw9aSYmaTw9NzB8fDk3PD1pJiZpPD0xMDJ9ZnVuY3Rpb24geUxlKGkpe3JldHVybiA0ODw9aSYmaTw9NTV9ZnVuY3Rpb24geExlKGkpe3JldHVybiA0ODw9aSYmaTw9NTd9ZnVuY3Rpb24ga0xlKGkpe2lmKGk9PT1udWxsKXJldHVybiExO3ZhciBhPWkubGVuZ3RoLGY9MCxwPSExLHc7aWYoIWEpcmV0dXJuITE7aWYodz1pW2ZdLCh3PT09Ii0ifHx3PT09IisiKSYmKHc9aVsrK2ZdKSx3PT09IjAiKXtpZihmKzE9PT1hKXJldHVybiEwO2lmKHc9aVsrK2ZdLHc9PT0iYiIpe2ZvcihmKys7ZjxhO2YrKylpZih3PWlbZl0sdyE9PSJfIil7aWYodyE9PSIwIiYmdyE9PSIxIilyZXR1cm4hMTtwPSEwfXJldHVybiBwJiZ3IT09Il8ifWlmKHc9PT0ieCIpe2ZvcihmKys7ZjxhO2YrKylpZih3PWlbZl0sdyE9PSJfIil7aWYoIW1MZShpLmNoYXJDb2RlQXQoZikpKXJldHVybiExO3A9ITB9cmV0dXJuIHAmJnchPT0iXyJ9aWYodz09PSJvIil7Zm9yKGYrKztmPGE7ZisrKWlmKHc9aVtmXSx3IT09Il8iKXtpZigheUxlKGkuY2hhckNvZGVBdChmKSkpcmV0dXJuITE7cD0hMH1yZXR1cm4gcCYmdyE9PSJfIn19aWYodz09PSJfIilyZXR1cm4hMTtmb3IoO2Y8YTtmKyspaWYodz1pW2ZdLHchPT0iXyIpe2lmKCF4TGUoaS5jaGFyQ29kZUF0KGYpKSlyZXR1cm4hMTtwPSEwfXJldHVybiEoIXB8fHc9PT0iXyIpfWZ1bmN0aW9uIEVMZShpKXt2YXIgYT1pLGY9MSxwO2lmKGEuaW5kZXhPZigiXyIpIT09LTEmJihhPWEucmVwbGFjZSgvXy9nLCIiKSkscD1hWzBdLChwPT09Ii0ifHxwPT09IisiKSYmKHA9PT0iLSImJihmPS0xKSxhPWEuc2xpY2UoMSkscD1hWzBdKSxhPT09IjAiKXJldHVybiAwO2lmKHA9PT0iMCIpe2lmKGFbMV09PT0iYiIpcmV0dXJuIGYqcGFyc2VJbnQoYS5zbGljZSgyKSwyKTtpZihhWzFdPT09IngiKXJldHVybiBmKnBhcnNlSW50KGEuc2xpY2UoMiksMTYpO2lmKGFbMV09PT0ibyIpcmV0dXJuIGYqcGFyc2VJbnQoYS5zbGljZSgyKSw4KX1yZXR1cm4gZipwYXJzZUludChhLDEwKX1mdW5jdGlvbiBUTGUoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IE51bWJlcl0iJiZpJTE9PT0wJiYhYmcuaXNOZWdhdGl2ZVplcm8oaSl9dmFyIENMZT1uZXcgVDAoInRhZzp5YW1sLm9yZywyMDAyOmludCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTprTGUsY29uc3RydWN0OkVMZSxwcmVkaWNhdGU6VExlLHJlcHJlc2VudDp7YmluYXJ5OmZ1bmN0aW9uKGkpe3JldHVybiBpPj0wPyIwYiIraS50b1N0cmluZygyKToiLTBiIitpLnRvU3RyaW5nKDIpLnNsaWNlKDEpfSxvY3RhbDpmdW5jdGlvbihpKXtyZXR1cm4gaT49MD8iMG8iK2kudG9TdHJpbmcoOCk6Ii0wbyIraS50b1N0cmluZyg4KS5zbGljZSgxKX0sZGVjaW1hbDpmdW5jdGlvbihpKXtyZXR1cm4gaS50b1N0cmluZygxMCl9LGhleGFkZWNpbWFsOmZ1bmN0aW9uKGkpe3JldHVybiBpPj0wPyIweCIraS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKToiLTB4IitpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfX0sZGVmYXVsdFN0eWxlOiJkZWNpbWFsIixzdHlsZUFsaWFzZXM6e2JpbmFyeTpbMiwiYmluIl0sb2N0YWw6WzgsIm9jdCJdLGRlY2ltYWw6WzEwLCJkZWMiXSxoZXhhZGVjaW1hbDpbMTYsImhleCJdfX0pLF9MZT1uZXcgUmVnRXhwKCJeKD86Wy0rXT8oPzpbMC05XVswLTlfXSopKD86XFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT98XFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/fFstK10/XFwuKD86aW5mfEluZnxJTkYpfFxcLig/Om5hbnxOYU58TkFOKSkkIik7ZnVuY3Rpb24gU0xlKGkpe3JldHVybiEoaT09PW51bGx8fCFfTGUudGVzdChpKXx8aVtpLmxlbmd0aC0xXT09PSJfIil9ZnVuY3Rpb24gQUxlKGkpe3ZhciBhLGY7cmV0dXJuIGE9aS5yZXBsYWNlKC9fL2csIiIpLnRvTG93ZXJDYXNlKCksZj1hWzBdPT09Ii0iPy0xOjEsIistIi5pbmRleE9mKGFbMF0pPj0wJiYoYT1hLnNsaWNlKDEpKSxhPT09Ii5pbmYiP2Y9PT0xP051bWJlci5QT1NJVElWRV9JTkZJTklUWTpOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk6YT09PSIubmFuIj9OYU46ZipwYXJzZUZsb2F0KGEsMTApfXZhciBMTGU9L15bLStdP1swLTldK2UvO2Z1bmN0aW9uIE1MZShpLGEpe3ZhciBmO2lmKGlzTmFOKGkpKXN3aXRjaChhKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5uYW4iO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLk5BTiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuTmFOIn1lbHNlIGlmKE51bWJlci5QT1NJVElWRV9JTkZJTklUWT09PWkpc3dpdGNoKGEpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5JbmYifWVsc2UgaWYoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09aSlzd2l0Y2goYSl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiItLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiItLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiItLkluZiJ9ZWxzZSBpZihiZy5pc05lZ2F0aXZlWmVybyhpKSlyZXR1cm4iLTAuMCI7cmV0dXJuIGY9aS50b1N0cmluZygxMCksTExlLnRlc3QoZik/Zi5yZXBsYWNlKCJlIiwiLmUiKTpmfWZ1bmN0aW9uIERMZShpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpPT09IltvYmplY3QgTnVtYmVyXSImJihpJTEhPT0wfHxiZy5pc05lZ2F0aXZlWmVybyhpKSl9dmFyIElMZT1uZXcgVDAoInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOlNMZSxjb25zdHJ1Y3Q6QUxlLHByZWRpY2F0ZTpETGUscmVwcmVzZW50Ok1MZSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KSxHT3Q9bExlLmV4dGVuZCh7aW1wbGljaXQ6W2dMZSx2TGUsQ0xlLElMZV19KSxPTGU9R090LFVPdD1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XSktKFswLTldWzAtOV0pJCIpLFdPdD1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XT8pLShbMC05XVswLTldPykoPzpbVHRdfFsgXFx0XSspKFswLTldWzAtOV0/KTooWzAtOV1bMC05XSk6KFswLTldWzAtOV0pKD86XFwuKFswLTldKikpPyg/OlsgXFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pKD86OihbMC05XVswLTldKSk/KSk/JCIpO2Z1bmN0aW9uIFBMZShpKXtyZXR1cm4gaT09PW51bGw/ITE6VU90LmV4ZWMoaSkhPT1udWxsfHxXT3QuZXhlYyhpKSE9PW51bGx9ZnVuY3Rpb24gRkxlKGkpe3ZhciBhLGYscCx3LG0sYixFLF89MCxBPW51bGwsSSxCLE47aWYoYT1VT3QuZXhlYyhpKSxhPT09bnVsbCYmKGE9V090LmV4ZWMoaSkpLGE9PT1udWxsKXRocm93IG5ldyBFcnJvcigiRGF0ZSByZXNvbHZlIGVycm9yIik7aWYoZj0rYVsxXSxwPSthWzJdLTEsdz0rYVszXSwhYVs0XSlyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZixwLHcpKTtpZihtPSthWzRdLGI9K2FbNV0sRT0rYVs2XSxhWzddKXtmb3IoXz1hWzddLnNsaWNlKDAsMyk7Xy5sZW5ndGg8MzspXys9IjAiO189K199cmV0dXJuIGFbOV0mJihJPSthWzEwXSxCPSsoYVsxMV18fDApLEE9KEkqNjArQikqNmU0LGFbOV09PT0iLSImJihBPS1BKSksTj1uZXcgRGF0ZShEYXRlLlVUQyhmLHAsdyxtLGIsRSxfKSksQSYmTi5zZXRUaW1lKE4uZ2V0VGltZSgpLUEpLE59ZnVuY3Rpb24gTkxlKGkpe3JldHVybiBpLnRvSVNPU3RyaW5nKCl9dmFyIEJMZT1uZXcgVDAoInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpQTGUsY29uc3RydWN0OkZMZSxpbnN0YW5jZU9mOkRhdGUscmVwcmVzZW50Ok5MZX0pO2Z1bmN0aW9uIFJMZShpKXtyZXR1cm4gaT09PSI8PCJ8fGk9PT1udWxsfXZhciBqTGU9bmV3IFQwKCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpSTGV9KSxNZHQ9YEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89ClxyYDtmdW5jdGlvbiAkTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuITE7dmFyIGEsZixwPTAsdz1pLmxlbmd0aCxtPU1kdDtmb3IoZj0wO2Y8dztmKyspaWYoYT1tLmluZGV4T2YoaS5jaGFyQXQoZikpLCEoYT42NCkpe2lmKGE8MClyZXR1cm4hMTtwKz02fXJldHVybiBwJTg9PT0wfWZ1bmN0aW9uIHpMZShpKXt2YXIgYSxmLHA9aS5yZXBsYWNlKC9bXHJcbj1dL2csIiIpLHc9cC5sZW5ndGgsbT1NZHQsYj0wLEU9W107Zm9yKGE9MDthPHc7YSsrKWElND09PTAmJmEmJihFLnB1c2goYj4+MTYmMjU1KSxFLnB1c2goYj4+OCYyNTUpLEUucHVzaChiJjI1NSkpLGI9Yjw8NnxtLmluZGV4T2YocC5jaGFyQXQoYSkpO3JldHVybiBmPXclNCo2LGY9PT0wPyhFLnB1c2goYj4+MTYmMjU1KSxFLnB1c2goYj4+OCYyNTUpLEUucHVzaChiJjI1NSkpOmY9PT0xOD8oRS5wdXNoKGI+PjEwJjI1NSksRS5wdXNoKGI+PjImMjU1KSk6Zj09PTEyJiZFLnB1c2goYj4+NCYyNTUpLG5ldyBVaW50OEFycmF5KEUpfWZ1bmN0aW9uIHFMZShpKXt2YXIgYT0iIixmPTAscCx3LG09aS5sZW5ndGgsYj1NZHQ7Zm9yKHA9MDtwPG07cCsrKXAlMz09PTAmJnAmJihhKz1iW2Y+PjE4JjYzXSxhKz1iW2Y+PjEyJjYzXSxhKz1iW2Y+PjYmNjNdLGErPWJbZiY2M10pLGY9KGY8PDgpK2lbcF07cmV0dXJuIHc9bSUzLHc9PT0wPyhhKz1iW2Y+PjE4JjYzXSxhKz1iW2Y+PjEyJjYzXSxhKz1iW2Y+PjYmNjNdLGErPWJbZiY2M10pOnc9PT0yPyhhKz1iW2Y+PjEwJjYzXSxhKz1iW2Y+PjQmNjNdLGErPWJbZjw8MiY2M10sYSs9Yls2NF0pOnc9PT0xJiYoYSs9YltmPj4yJjYzXSxhKz1iW2Y8PDQmNjNdLGErPWJbNjRdLGErPWJbNjRdKSxhfWZ1bmN0aW9uIEhMZShpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpPT09IltvYmplY3QgVWludDhBcnJheV0ifXZhciBWTGU9bmV3IFQwKCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnkiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6JExlLGNvbnN0cnVjdDp6TGUscHJlZGljYXRlOkhMZSxyZXByZXNlbnQ6cUxlfSksR0xlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksVUxlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gV0xlKGkpe2lmKGk9PT1udWxsKXJldHVybiEwO3ZhciBhPVtdLGYscCx3LG0sYixFPWk7Zm9yKGY9MCxwPUUubGVuZ3RoO2Y8cDtmKz0xKXtpZih3PUVbZl0sYj0hMSxVTGUuY2FsbCh3KSE9PSJbb2JqZWN0IE9iamVjdF0iKXJldHVybiExO2ZvcihtIGluIHcpaWYoR0xlLmNhbGwodyxtKSlpZighYiliPSEwO2Vsc2UgcmV0dXJuITE7aWYoIWIpcmV0dXJuITE7aWYoYS5pbmRleE9mKG0pPT09LTEpYS5wdXNoKG0pO2Vsc2UgcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gWUxlKGkpe3JldHVybiBpIT09bnVsbD9pOltdfXZhciBLTGU9bmV3IFQwKCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwIix7a2luZDoic2VxdWVuY2UiLHJlc29sdmU6V0xlLGNvbnN0cnVjdDpZTGV9KSxYTGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBRTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuITA7dmFyIGEsZixwLHcsbSxiPWk7Zm9yKG09bmV3IEFycmF5KGIubGVuZ3RoKSxhPTAsZj1iLmxlbmd0aDthPGY7YSs9MSl7aWYocD1iW2FdLFhMZS5jYWxsKHApIT09IltvYmplY3QgT2JqZWN0XSJ8fCh3PU9iamVjdC5rZXlzKHApLHcubGVuZ3RoIT09MSkpcmV0dXJuITE7bVthXT1bd1swXSxwW3dbMF1dXX1yZXR1cm4hMH1mdW5jdGlvbiBaTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuW107dmFyIGEsZixwLHcsbSxiPWk7Zm9yKG09bmV3IEFycmF5KGIubGVuZ3RoKSxhPTAsZj1iLmxlbmd0aDthPGY7YSs9MSlwPWJbYV0sdz1PYmplY3Qua2V5cyhwKSxtW2FdPVt3WzBdLHBbd1swXV1dO3JldHVybiBtfXZhciBKTGU9bmV3IFQwKCJ0YWc6eWFtbC5vcmcsMjAwMjpwYWlycyIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOlFMZSxjb25zdHJ1Y3Q6WkxlfSksdE1lPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gZU1lKGkpe2lmKGk9PT1udWxsKXJldHVybiEwO3ZhciBhLGY9aTtmb3IoYSBpbiBmKWlmKHRNZS5jYWxsKGYsYSkmJmZbYV0hPT1udWxsKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG5NZShpKXtyZXR1cm4gaSE9PW51bGw/aTp7fX12YXIgck1lPW5ldyBUMCgidGFnOnlhbWwub3JnLDIwMDI6c2V0Iix7a2luZDoibWFwcGluZyIscmVzb2x2ZTplTWUsY29uc3RydWN0Om5NZX0pLGlNZT1PTGUuZXh0ZW5kKHtpbXBsaWNpdDpbQkxlLGpMZV0sZXhwbGljaXQ6W1ZMZSxLTGUsSkxlLHJNZV19KSxsaz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEdXPTEsWU90PTIsS090PTMsVVc9NCxEZHQ9MSxzTWU9MixYT3Q9MyxhTWU9L1tceDAwLVx4MDhceDBCXHgwQ1x4MEUtXHgxRlx4N0YtXHg4NFx4ODYtXHg5Rlx1RkZGRVx1RkZGRl18W1x1RDgwMC1cdURCRkZdKD8hW1x1REMwMC1cdURGRkZdKXwoPzpbXlx1RDgwMC1cdURCRkZdfF4pW1x1REMwMC1cdURGRkZdLyxvTWU9L1tceDg1XHUyMDI4XHUyMDI5XS8sY01lPS9bLFxbXF1ce1x9XS8sUU90PS9eKD86IXwhIXwhW2EtelwtXSshKSQvaSxaT3Q9L14oPzohfFteLFxbXF1ce1x9XSkoPzolWzAtOWEtZl17Mn18WzAtOWEtelwtIztcL1w/OkAmPVwrXCQsX1wuIX5cKidcKFwpXFtcXV0pKiQvaTtmdW5jdGlvbiBKT3QoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKX1mdW5jdGlvbiBnMyhpKXtyZXR1cm4gaT09PTEwfHxpPT09MTN9ZnVuY3Rpb24gZ1QoaSl7cmV0dXJuIGk9PT05fHxpPT09MzJ9ZnVuY3Rpb24gZHAoaSl7cmV0dXJuIGk9PT05fHxpPT09MzJ8fGk9PT0xMHx8aT09PTEzfWZ1bmN0aW9uIFFBKGkpe3JldHVybiBpPT09NDR8fGk9PT05MXx8aT09PTkzfHxpPT09MTIzfHxpPT09MTI1fWZ1bmN0aW9uIHVNZShpKXt2YXIgYTtyZXR1cm4gNDg8PWkmJmk8PTU3P2ktNDg6KGE9aXwzMiw5Nzw9YSYmYTw9MTAyP2EtOTcrMTA6LTEpfWZ1bmN0aW9uIGxNZShpKXtyZXR1cm4gaT09PTEyMD8yOmk9PT0xMTc/NDppPT09ODU/ODowfWZ1bmN0aW9uIGhNZShpKXtyZXR1cm4gNDg8PWkmJmk8PTU3P2ktNDg6LTF9ZnVuY3Rpb24gdFB0KGkpe3JldHVybiBpPT09NDg/IlwwIjppPT09OTc/Ilx4MDciOmk9PT05OD8iXGIiOmk9PT0xMTZ8fGk9PT05PyIJIjppPT09MTEwP2AKYDppPT09MTE4PyJcdiI6aT09PTEwMj8iXGYiOmk9PT0xMTQ/IlxyIjppPT09MTAxPyJceDFCIjppPT09MzI/IiAiOmk9PT0zND8nIic6aT09PTQ3PyIvIjppPT09OTI/IlxcIjppPT09Nzg/IsKFIjppPT09OTU/IsKgIjppPT09NzY/Ilx1MjAyOCI6aT09PTgwPyJcdTIwMjkiOiIifWZ1bmN0aW9uIGZNZShpKXtyZXR1cm4gaTw9NjU1MzU/U3RyaW5nLmZyb21DaGFyQ29kZShpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKChpLTY1NTM2Pj4xMCkrNTUyOTYsKGktNjU1MzYmMTAyMykrNTYzMjApfWZvcih2YXIgZVB0PW5ldyBBcnJheSgyNTYpLG5QdD1uZXcgQXJyYXkoMjU2KSxaQT0wO1pBPDI1NjtaQSsrKWVQdFtaQV09dFB0KFpBKT8xOjAsblB0W1pBXT10UHQoWkEpO2Z1bmN0aW9uIGRNZShpLGEpe3RoaXMuaW5wdXQ9aSx0aGlzLmZpbGVuYW1lPWEuZmlsZW5hbWV8fG51bGwsdGhpcy5zY2hlbWE9YS5zY2hlbWF8fGlNZSx0aGlzLm9uV2FybmluZz1hLm9uV2FybmluZ3x8bnVsbCx0aGlzLmxlZ2FjeT1hLmxlZ2FjeXx8ITEsdGhpcy5qc29uPWEuanNvbnx8ITEsdGhpcy5saXN0ZW5lcj1hLmxpc3RlbmVyfHxudWxsLHRoaXMuaW1wbGljaXRUeXBlcz10aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0LHRoaXMudHlwZU1hcD10aGlzLnNjaGVtYS5jb21waWxlZFR5cGVNYXAsdGhpcy5sZW5ndGg9aS5sZW5ndGgsdGhpcy5wb3NpdGlvbj0wLHRoaXMubGluZT0wLHRoaXMubGluZVN0YXJ0PTAsdGhpcy5saW5lSW5kZW50PTAsdGhpcy5maXJzdFRhYkluTGluZT0tMSx0aGlzLmRvY3VtZW50cz1bXX1mdW5jdGlvbiByUHQoaSxhKXt2YXIgZj17bmFtZTppLmZpbGVuYW1lLGJ1ZmZlcjppLmlucHV0LnNsaWNlKDAsLTEpLHBvc2l0aW9uOmkucG9zaXRpb24sbGluZTppLmxpbmUsY29sdW1uOmkucG9zaXRpb24taS5saW5lU3RhcnR9O3JldHVybiBmLnNuaXBwZXQ9dExlKGYpLG5ldyBBNShhLGYpfWZ1bmN0aW9uIFNzKGksYSl7dGhyb3cgclB0KGksYSl9ZnVuY3Rpb24gV1coaSxhKXtpLm9uV2FybmluZyYmaS5vbldhcm5pbmcuY2FsbChudWxsLHJQdChpLGEpKX12YXIgaVB0PXtZQU1MOmZ1bmN0aW9uKGEsZixwKXt2YXIgdyxtLGI7YS52ZXJzaW9uIT09bnVsbCYmU3MoYSwiZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlIikscC5sZW5ndGghPT0xJiZTcyhhLCJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50Iiksdz0vXihbMC05XSspXC4oWzAtOV0rKSQvLmV4ZWMocFswXSksdz09PW51bGwmJlNzKGEsImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlIiksbT1wYXJzZUludCh3WzFdLDEwKSxiPXBhcnNlSW50KHdbMl0sMTApLG0hPT0xJiZTcyhhLCJ1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpLGEudmVyc2lvbj1wWzBdLGEuY2hlY2tMaW5lQnJlYWtzPWI8MixiIT09MSYmYiE9PTImJldXKGEsInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKX0sVEFHOmZ1bmN0aW9uKGEsZixwKXt2YXIgdyxtO3AubGVuZ3RoIT09MiYmU3MoYSwiVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cyIpLHc9cFswXSxtPXBbMV0sUU90LnRlc3Qodyl8fFNzKGEsImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIiksbGsuY2FsbChhLnRhZ01hcCx3KSYmU3MoYSwndGhlcmUgaXMgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHN1ZmZpeCBmb3IgIicrdysnIiB0YWcgaGFuZGxlJyksWk90LnRlc3QobSl8fFNzKGEsImlsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpO3RyeXttPWRlY29kZVVSSUNvbXBvbmVudChtKX1jYXRjaHtTcyhhLCJ0YWcgcHJlZml4IGlzIG1hbGZvcm1lZDogIittKX1hLnRhZ01hcFt3XT1tfX07ZnVuY3Rpb24gaGsoaSxhLGYscCl7dmFyIHcsbSxiLEU7aWYoYTxmKXtpZihFPWkuaW5wdXQuc2xpY2UoYSxmKSxwKWZvcih3PTAsbT1FLmxlbmd0aDt3PG07dys9MSliPUUuY2hhckNvZGVBdCh3KSxiPT09OXx8MzI8PWImJmI8PTExMTQxMTF8fFNzKGksImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyIik7ZWxzZSBhTWUudGVzdChFKSYmU3MoaSwidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMiKTtpLnJlc3VsdCs9RX19ZnVuY3Rpb24gc1B0KGksYSxmLHApe3ZhciB3LG0sYixFO2ZvcihiZy5pc09iamVjdChmKXx8U3MoaSwiY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUiKSx3PU9iamVjdC5rZXlzKGYpLGI9MCxFPXcubGVuZ3RoO2I8RTtiKz0xKW09d1tiXSxsay5jYWxsKGEsbSl8fChhW21dPWZbbV0scFttXT0hMCl9ZnVuY3Rpb24gSkEoaSxhLGYscCx3LG0sYixFLF8pe3ZhciBBLEk7aWYoQXJyYXkuaXNBcnJheSh3KSlmb3Iodz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh3KSxBPTAsST13Lmxlbmd0aDtBPEk7QSs9MSlBcnJheS5pc0FycmF5KHdbQV0pJiZTcyhpLCJuZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzIiksdHlwZW9mIHc9PSJvYmplY3QiJiZKT3Qod1tBXSk9PT0iW29iamVjdCBPYmplY3RdIiYmKHdbQV09IltvYmplY3QgT2JqZWN0XSIpO2lmKHR5cGVvZiB3PT0ib2JqZWN0IiYmSk90KHcpPT09IltvYmplY3QgT2JqZWN0XSImJih3PSJbb2JqZWN0IE9iamVjdF0iKSx3PVN0cmluZyh3KSxhPT09bnVsbCYmKGE9e30pLHA9PT0idGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiKWlmKEFycmF5LmlzQXJyYXkobSkpZm9yKEE9MCxJPW0ubGVuZ3RoO0E8STtBKz0xKXNQdChpLGEsbVtBXSxmKTtlbHNlIHNQdChpLGEsbSxmKTtlbHNlIWkuanNvbiYmIWxrLmNhbGwoZix3KSYmbGsuY2FsbChhLHcpJiYoaS5saW5lPWJ8fGkubGluZSxpLmxpbmVTdGFydD1FfHxpLmxpbmVTdGFydCxpLnBvc2l0aW9uPV98fGkucG9zaXRpb24sU3MoaSwiZHVwbGljYXRlZCBtYXBwaW5nIGtleSIpKSx3PT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bX0pOmFbd109bSxkZWxldGUgZlt3XTtyZXR1cm4gYX1mdW5jdGlvbiBJZHQoaSl7dmFyIGE7YT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksYT09PTEwP2kucG9zaXRpb24rKzphPT09MTM/KGkucG9zaXRpb24rKyxpLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik9PT0xMCYmaS5wb3NpdGlvbisrKTpTcyhpLCJhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQiKSxpLmxpbmUrPTEsaS5saW5lU3RhcnQ9aS5wb3NpdGlvbixpLmZpcnN0VGFiSW5MaW5lPS0xfWZ1bmN0aW9uIFBmKGksYSxmKXtmb3IodmFyIHA9MCx3PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTt3IT09MDspe2Zvcig7Z1Qodyk7KXc9PT05JiZpLmZpcnN0VGFiSW5MaW5lPT09LTEmJihpLmZpcnN0VGFiSW5MaW5lPWkucG9zaXRpb24pLHc9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7aWYoYSYmdz09PTM1KWRvIHc9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUodyE9PTEwJiZ3IT09MTMmJnchPT0wKTtpZihnMyh3KSlmb3IoSWR0KGkpLHc9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLHArKyxpLmxpbmVJbmRlbnQ9MDt3PT09MzI7KWkubGluZUluZGVudCsrLHc9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7ZWxzZSBicmVha31yZXR1cm4gZiE9PS0xJiZwIT09MCYmaS5saW5lSW5kZW50PGYmJldXKGksImRlZmljaWVudCBpbmRlbnRhdGlvbiIpLHB9ZnVuY3Rpb24gWVcoaSl7dmFyIGE9aS5wb3NpdGlvbixmO3JldHVybiBmPWkuaW5wdXQuY2hhckNvZGVBdChhKSwhISgoZj09PTQ1fHxmPT09NDYpJiZmPT09aS5pbnB1dC5jaGFyQ29kZUF0KGErMSkmJmY9PT1pLmlucHV0LmNoYXJDb2RlQXQoYSsyKSYmKGErPTMsZj1pLmlucHV0LmNoYXJDb2RlQXQoYSksZj09PTB8fGRwKGYpKSl9ZnVuY3Rpb24gT2R0KGksYSl7YT09PTE/aS5yZXN1bHQrPSIgIjphPjEmJihpLnJlc3VsdCs9YmcucmVwZWF0KGAKYCxhLTEpKX1mdW5jdGlvbiBnTWUoaSxhLGYpe3ZhciBwLHcsbSxiLEUsXyxBLEksQj1pLmtpbmQsTj1pLnJlc3VsdCxSO2lmKFI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGRwKFIpfHxRQShSKXx8Uj09PTM1fHxSPT09Mzh8fFI9PT00Mnx8Uj09PTMzfHxSPT09MTI0fHxSPT09NjJ8fFI9PT0zOXx8Uj09PTM0fHxSPT09Mzd8fFI9PT02NHx8Uj09PTk2fHwoUj09PTYzfHxSPT09NDUpJiYodz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKSxkcCh3KXx8ZiYmUUEodykpKXJldHVybiExO2ZvcihpLmtpbmQ9InNjYWxhciIsaS5yZXN1bHQ9IiIsbT1iPWkucG9zaXRpb24sRT0hMTtSIT09MDspe2lmKFI9PT01OCl7aWYodz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKSxkcCh3KXx8ZiYmUUEodykpYnJlYWt9ZWxzZSBpZihSPT09MzUpe2lmKHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24tMSksZHAocCkpYnJlYWt9ZWxzZXtpZihpLnBvc2l0aW9uPT09aS5saW5lU3RhcnQmJllXKGkpfHxmJiZRQShSKSlicmVhaztpZihnMyhSKSlpZihfPWkubGluZSxBPWkubGluZVN0YXJ0LEk9aS5saW5lSW5kZW50LFBmKGksITEsLTEpLGkubGluZUluZGVudD49YSl7RT0hMCxSPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTtjb250aW51ZX1lbHNle2kucG9zaXRpb249YixpLmxpbmU9XyxpLmxpbmVTdGFydD1BLGkubGluZUluZGVudD1JO2JyZWFrfX1FJiYoaGsoaSxtLGIsITEpLE9kdChpLGkubGluZS1fKSxtPWI9aS5wb3NpdGlvbixFPSExKSxnVChSKXx8KGI9aS5wb3NpdGlvbisxKSxSPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pfXJldHVybiBoayhpLG0sYiwhMSksaS5yZXN1bHQ/ITA6KGkua2luZD1CLGkucmVzdWx0PU4sITEpfWZ1bmN0aW9uIHBNZShpLGEpe3ZhciBmLHAsdztpZihmPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxmIT09MzkpcmV0dXJuITE7Zm9yKGkua2luZD0ic2NhbGFyIixpLnJlc3VsdD0iIixpLnBvc2l0aW9uKysscD13PWkucG9zaXRpb247KGY9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pKSE9PTA7KWlmKGY9PT0zOSlpZihoayhpLHAsaS5wb3NpdGlvbiwhMCksZj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxmPT09MzkpcD1pLnBvc2l0aW9uLGkucG9zaXRpb24rKyx3PWkucG9zaXRpb247ZWxzZSByZXR1cm4hMDtlbHNlIGczKGYpPyhoayhpLHAsdywhMCksT2R0KGksUGYoaSwhMSxhKSkscD13PWkucG9zaXRpb24pOmkucG9zaXRpb249PT1pLmxpbmVTdGFydCYmWVcoaSk/U3MoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIik6KGkucG9zaXRpb24rKyx3PWkucG9zaXRpb24pO1NzKGksInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBiTWUoaSxhKXt2YXIgZixwLHcsbSxiLEU7aWYoRT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksRSE9PTM0KXJldHVybiExO2ZvcihpLmtpbmQ9InNjYWxhciIsaS5yZXN1bHQ9IiIsaS5wb3NpdGlvbisrLGY9cD1pLnBvc2l0aW9uOyhFPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSkhPT0wOyl7aWYoRT09PTM0KXJldHVybiBoayhpLGYsaS5wb3NpdGlvbiwhMCksaS5wb3NpdGlvbisrLCEwO2lmKEU9PT05Mil7aWYoaGsoaSxmLGkucG9zaXRpb24sITApLEU9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksZzMoRSkpUGYoaSwhMSxhKTtlbHNlIGlmKEU8MjU2JiZlUHRbRV0paS5yZXN1bHQrPW5QdFtFXSxpLnBvc2l0aW9uKys7ZWxzZSBpZigoYj1sTWUoRSkpPjApe2Zvcih3PWIsbT0wO3c+MDt3LS0pRT1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSwoYj11TWUoRSkpPj0wP209KG08PDQpK2I6U3MoaSwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIik7aS5yZXN1bHQrPWZNZShtKSxpLnBvc2l0aW9uKyt9ZWxzZSBTcyhpLCJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZSIpO2Y9cD1pLnBvc2l0aW9ufWVsc2UgZzMoRSk/KGhrKGksZixwLCEwKSxPZHQoaSxQZihpLCExLGEpKSxmPXA9aS5wb3NpdGlvbik6aS5wb3NpdGlvbj09PWkubGluZVN0YXJ0JiZZVyhpKT9TcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKTooaS5wb3NpdGlvbisrLHA9aS5wb3NpdGlvbil9U3MoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpfWZ1bmN0aW9uIHdNZShpLGEpe3ZhciBmPSEwLHAsdyxtLGI9aS50YWcsRSxfPWkuYW5jaG9yLEEsSSxCLE4sUix6PU9iamVjdC5jcmVhdGUobnVsbCksVyxldCxzdCxhdDtpZihhdD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksYXQ9PT05MSlJPTkzLFI9ITEsRT1bXTtlbHNlIGlmKGF0PT09MTIzKUk9MTI1LFI9ITAsRT17fTtlbHNlIHJldHVybiExO2ZvcihpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09RSksYXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7YXQhPT0wOyl7aWYoUGYoaSwhMCxhKSxhdD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksYXQ9PT1JKXJldHVybiBpLnBvc2l0aW9uKyssaS50YWc9YixpLmFuY2hvcj1fLGkua2luZD1SPyJtYXBwaW5nIjoic2VxdWVuY2UiLGkucmVzdWx0PUUsITA7Zj9hdD09PTQ0JiZTcyhpLCJleHBlY3RlZCB0aGUgbm9kZSBjb250ZW50LCBidXQgZm91bmQgJywnIik6U3MoaSwibWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMiKSxldD1XPXN0PW51bGwsQj1OPSExLGF0PT09NjMmJihBPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpLGRwKEEpJiYoQj1OPSEwLGkucG9zaXRpb24rKyxQZihpLCEwLGEpKSkscD1pLmxpbmUsdz1pLmxpbmVTdGFydCxtPWkucG9zaXRpb24sdEwoaSxhLEdXLCExLCEwKSxldD1pLnRhZyxXPWkucmVzdWx0LFBmKGksITAsYSksYXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLChOfHxpLmxpbmU9PT1wKSYmYXQ9PT01OCYmKEI9ITAsYXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksUGYoaSwhMCxhKSx0TChpLGEsR1csITEsITApLHN0PWkucmVzdWx0KSxSP0pBKGksRSx6LGV0LFcsc3QscCx3LG0pOkI/RS5wdXNoKEpBKGksbnVsbCx6LGV0LFcsc3QscCx3LG0pKTpFLnB1c2goVyksUGYoaSwhMCxhKSxhdD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksYXQ9PT00ND8oZj0hMCxhdD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6Zj0hMX1TcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvbiIpfWZ1bmN0aW9uIHZNZShpLGEpe3ZhciBmLHAsdz1EZHQsbT0hMSxiPSExLEU9YSxfPTAsQT0hMSxJLEI7aWYoQj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksQj09PTEyNClwPSExO2Vsc2UgaWYoQj09PTYyKXA9ITA7ZWxzZSByZXR1cm4hMTtmb3IoaS5raW5kPSJzY2FsYXIiLGkucmVzdWx0PSIiO0IhPT0wOylpZihCPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLEI9PT00M3x8Qj09PTQ1KURkdD09PXc/dz1CPT09NDM/WE90OnNNZTpTcyhpLCJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXIiKTtlbHNlIGlmKChJPWhNZShCKSk+PTApST09PTA/U3MoaSwiYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZSIpOmI/U3MoaSwicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXIiKTooRT1hK0ktMSxiPSEwKTtlbHNlIGJyZWFrO2lmKGdUKEIpKXtkbyBCPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3doaWxlKGdUKEIpKTtpZihCPT09MzUpZG8gQj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZSghZzMoQikmJkIhPT0wKX1mb3IoO0IhPT0wOyl7Zm9yKElkdChpKSxpLmxpbmVJbmRlbnQ9MCxCPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTsoIWJ8fGkubGluZUluZGVudDxFKSYmQj09PTMyOylpLmxpbmVJbmRlbnQrKyxCPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2lmKCFiJiZpLmxpbmVJbmRlbnQ+RSYmKEU9aS5saW5lSW5kZW50KSxnMyhCKSl7XysrO2NvbnRpbnVlfWlmKGkubGluZUluZGVudDxFKXt3PT09WE90P2kucmVzdWx0Kz1iZy5yZXBlYXQoYApgLG0/MStfOl8pOnc9PT1EZHQmJm0mJihpLnJlc3VsdCs9YApgKTticmVha31mb3IocD9nVChCKT8oQT0hMCxpLnJlc3VsdCs9YmcucmVwZWF0KGAKYCxtPzErXzpfKSk6QT8oQT0hMSxpLnJlc3VsdCs9YmcucmVwZWF0KGAKYCxfKzEpKTpfPT09MD9tJiYoaS5yZXN1bHQrPSIgIik6aS5yZXN1bHQrPWJnLnJlcGVhdChgCmAsXyk6aS5yZXN1bHQrPWJnLnJlcGVhdChgCmAsbT8xK186XyksbT0hMCxiPSEwLF89MCxmPWkucG9zaXRpb247IWczKEIpJiZCIT09MDspQj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtoayhpLGYsaS5wb3NpdGlvbiwhMSl9cmV0dXJuITB9ZnVuY3Rpb24gYVB0KGksYSl7dmFyIGYscD1pLnRhZyx3PWkuYW5jaG9yLG09W10sYixFPSExLF87aWYoaS5maXJzdFRhYkluTGluZSE9PS0xKXJldHVybiExO2ZvcihpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09bSksXz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7XyE9PTAmJihpLmZpcnN0VGFiSW5MaW5lIT09LTEmJihpLnBvc2l0aW9uPWkuZmlyc3RUYWJJbkxpbmUsU3MoaSwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbiIpKSwhKF8hPT00NXx8KGI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksIWRwKGIpKSkpOyl7aWYoRT0hMCxpLnBvc2l0aW9uKyssUGYoaSwhMCwtMSkmJmkubGluZUluZGVudDw9YSl7bS5wdXNoKG51bGwpLF89aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO2NvbnRpbnVlfWlmKGY9aS5saW5lLHRMKGksYSxLT3QsITEsITApLG0ucHVzaChpLnJlc3VsdCksUGYoaSwhMCwtMSksXz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksKGkubGluZT09PWZ8fGkubGluZUluZGVudD5hKSYmXyE9PTApU3MoaSwiYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnkiKTtlbHNlIGlmKGkubGluZUluZGVudDxhKWJyZWFrfXJldHVybiBFPyhpLnRhZz1wLGkuYW5jaG9yPXcsaS5raW5kPSJzZXF1ZW5jZSIsaS5yZXN1bHQ9bSwhMCk6ITF9ZnVuY3Rpb24gbU1lKGksYSxmKXt2YXIgcCx3LG0sYixFLF8sQT1pLnRhZyxJPWkuYW5jaG9yLEI9e30sTj1PYmplY3QuY3JlYXRlKG51bGwpLFI9bnVsbCx6PW51bGwsVz1udWxsLGV0PSExLHN0PSExLGF0O2lmKGkuZmlyc3RUYWJJbkxpbmUhPT0tMSlyZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPUIpLGF0PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTthdCE9PTA7KXtpZighZXQmJmkuZmlyc3RUYWJJbkxpbmUhPT0tMSYmKGkucG9zaXRpb249aS5maXJzdFRhYkluTGluZSxTcyhpLCJ0YWIgY2hhcmFjdGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGluZGVudGF0aW9uIikpLHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksbT1pLmxpbmUsKGF0PT09NjN8fGF0PT09NTgpJiZkcChwKSlhdD09PTYzPyhldCYmKEpBKGksQixOLFIseixudWxsLGIsRSxfKSxSPXo9Vz1udWxsKSxzdD0hMCxldD0hMCx3PSEwKTpldD8oZXQ9ITEsdz0hMCk6U3MoaSwiaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZSIpLGkucG9zaXRpb24rPTEsYXQ9cDtlbHNle2lmKGI9aS5saW5lLEU9aS5saW5lU3RhcnQsXz1pLnBvc2l0aW9uLCF0TChpLGYsWU90LCExLCEwKSlicmVhaztpZihpLmxpbmU9PT1tKXtmb3IoYXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO2dUKGF0KTspYXQ9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7aWYoYXQ9PT01OClhdD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxkcChhdCl8fFNzKGksImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZyIpLGV0JiYoSkEoaSxCLE4sUix6LG51bGwsYixFLF8pLFI9ej1XPW51bGwpLHN0PSEwLGV0PSExLHc9ITEsUj1pLnRhZyx6PWkucmVzdWx0O2Vsc2UgaWYoc3QpU3MoaSwiY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQiKTtlbHNlIHJldHVybiBpLnRhZz1BLGkuYW5jaG9yPUksITB9ZWxzZSBpZihzdClTcyhpLCJjYW4gbm90IHJlYWQgYSBibG9jayBtYXBwaW5nIGVudHJ5OyBhIG11bHRpbGluZSBrZXkgbWF5IG5vdCBiZSBhbiBpbXBsaWNpdCBrZXkiKTtlbHNlIHJldHVybiBpLnRhZz1BLGkuYW5jaG9yPUksITB9aWYoKGkubGluZT09PW18fGkubGluZUluZGVudD5hKSYmKGV0JiYoYj1pLmxpbmUsRT1pLmxpbmVTdGFydCxfPWkucG9zaXRpb24pLHRMKGksYSxVVywhMCx3KSYmKGV0P3o9aS5yZXN1bHQ6Vz1pLnJlc3VsdCksZXR8fChKQShpLEIsTixSLHosVyxiLEUsXyksUj16PVc9bnVsbCksUGYoaSwhMCwtMSksYXQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pKSwoaS5saW5lPT09bXx8aS5saW5lSW5kZW50PmEpJiZhdCE9PTApU3MoaSwiYmFkIGluZGVudGF0aW9uIG9mIGEgbWFwcGluZyBlbnRyeSIpO2Vsc2UgaWYoaS5saW5lSW5kZW50PGEpYnJlYWt9cmV0dXJuIGV0JiZKQShpLEIsTixSLHosbnVsbCxiLEUsXyksc3QmJihpLnRhZz1BLGkuYW5jaG9yPUksaS5raW5kPSJtYXBwaW5nIixpLnJlc3VsdD1CKSxzdH1mdW5jdGlvbiB5TWUoaSl7dmFyIGEsZj0hMSxwPSExLHcsbSxiO2lmKGI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGIhPT0zMylyZXR1cm4hMTtpZihpLnRhZyE9PW51bGwmJlNzKGksImR1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5IiksYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxiPT09NjA/KGY9ITAsYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6Yj09PTMzPyhwPSEwLHc9IiEhIixiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pKTp3PSIhIixhPWkucG9zaXRpb24sZil7ZG8gYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZShiIT09MCYmYiE9PTYyKTtpLnBvc2l0aW9uPGkubGVuZ3RoPyhtPWkuaW5wdXQuc2xpY2UoYSxpLnBvc2l0aW9uKSxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pKTpTcyhpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZyIpfWVsc2V7Zm9yKDtiIT09MCYmIWRwKGIpOyliPT09MzMmJihwP1NzKGksInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MiKToodz1pLmlucHV0LnNsaWNlKGEtMSxpLnBvc2l0aW9uKzEpLFFPdC50ZXN0KHcpfHxTcyhpLCJuYW1lZCB0YWcgaGFuZGxlIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVycyIpLHA9ITAsYT1pLnBvc2l0aW9uKzEpKSxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO209aS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pLGNNZS50ZXN0KG0pJiZTcyhpLCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMiKX1tJiYhWk90LnRlc3QobSkmJlNzKGksInRhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogIittKTt0cnl7bT1kZWNvZGVVUklDb21wb25lbnQobSl9Y2F0Y2h7U3MoaSwidGFnIG5hbWUgaXMgbWFsZm9ybWVkOiAiK20pfXJldHVybiBmP2kudGFnPW06bGsuY2FsbChpLnRhZ01hcCx3KT9pLnRhZz1pLnRhZ01hcFt3XSttOnc9PT0iISI/aS50YWc9IiEiK206dz09PSIhISI/aS50YWc9InRhZzp5YW1sLm9yZywyMDAyOiIrbTpTcyhpLCd1bmRlY2xhcmVkIHRhZyBoYW5kbGUgIicrdysnIicpLCEwfWZ1bmN0aW9uIHhNZShpKXt2YXIgYSxmO2lmKGY9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGYhPT0zOClyZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiZTcyhpLCJkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHkiKSxmPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGE9aS5wb3NpdGlvbjtmIT09MCYmIWRwKGYpJiYhUUEoZik7KWY9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7cmV0dXJuIGkucG9zaXRpb249PT1hJiZTcyhpLCJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIiksaS5hbmNob3I9aS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pLCEwfWZ1bmN0aW9uIGtNZShpKXt2YXIgYSxmLHA7aWYocD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbikscCE9PTQyKXJldHVybiExO2ZvcihwPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGE9aS5wb3NpdGlvbjtwIT09MCYmIWRwKHApJiYhUUEocCk7KXA9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7cmV0dXJuIGkucG9zaXRpb249PT1hJiZTcyhpLCJuYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSxmPWkuaW5wdXQuc2xpY2UoYSxpLnBvc2l0aW9uKSxsay5jYWxsKGkuYW5jaG9yTWFwLGYpfHxTcyhpLCd1bmlkZW50aWZpZWQgYWxpYXMgIicrZisnIicpLGkucmVzdWx0PWkuYW5jaG9yTWFwW2ZdLFBmKGksITAsLTEpLCEwfWZ1bmN0aW9uIHRMKGksYSxmLHAsdyl7dmFyIG0sYixFLF89MSxBPSExLEk9ITEsQixOLFIseixXLGV0O2lmKGkubGlzdGVuZXIhPT1udWxsJiZpLmxpc3RlbmVyKCJvcGVuIixpKSxpLnRhZz1udWxsLGkuYW5jaG9yPW51bGwsaS5raW5kPW51bGwsaS5yZXN1bHQ9bnVsbCxtPWI9RT1VVz09PWZ8fEtPdD09PWYscCYmUGYoaSwhMCwtMSkmJihBPSEwLGkubGluZUluZGVudD5hP189MTppLmxpbmVJbmRlbnQ9PT1hP189MDppLmxpbmVJbmRlbnQ8YSYmKF89LTEpKSxfPT09MSlmb3IoO3lNZShpKXx8eE1lKGkpOylQZihpLCEwLC0xKT8oQT0hMCxFPW0saS5saW5lSW5kZW50PmE/Xz0xOmkubGluZUluZGVudD09PWE/Xz0wOmkubGluZUluZGVudDxhJiYoXz0tMSkpOkU9ITE7aWYoRSYmKEU9QXx8dyksKF89PT0xfHxVVz09PWYpJiYoR1c9PT1mfHxZT3Q9PT1mP1c9YTpXPWErMSxldD1pLnBvc2l0aW9uLWkubGluZVN0YXJ0LF89PT0xP0UmJihhUHQoaSxldCl8fG1NZShpLGV0LFcpKXx8d01lKGksVyk/ST0hMDooYiYmdk1lKGksVyl8fHBNZShpLFcpfHxiTWUoaSxXKT9JPSEwOmtNZShpKT8oST0hMCwoaS50YWchPT1udWxsfHxpLmFuY2hvciE9PW51bGwpJiZTcyhpLCJhbGlhcyBub2RlIHNob3VsZCBub3QgaGF2ZSBhbnkgcHJvcGVydGllcyIpKTpnTWUoaSxXLEdXPT09ZikmJihJPSEwLGkudGFnPT09bnVsbCYmKGkudGFnPSI/IikpLGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCkpOl89PT0wJiYoST1FJiZhUHQoaSxldCkpKSxpLnRhZz09PW51bGwpaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPWkucmVzdWx0KTtlbHNlIGlmKGkudGFnPT09Ij8iKXtmb3IoaS5yZXN1bHQhPT1udWxsJiZpLmtpbmQhPT0ic2NhbGFyIiYmU3MoaSwndW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITw/PiB0YWc7IGl0IHNob3VsZCBiZSAic2NhbGFyIiwgbm90ICInK2kua2luZCsnIicpLEI9MCxOPWkuaW1wbGljaXRUeXBlcy5sZW5ndGg7QjxOO0IrPTEpaWYoej1pLmltcGxpY2l0VHlwZXNbQl0sei5yZXNvbHZlKGkucmVzdWx0KSl7aS5yZXN1bHQ9ei5jb25zdHJ1Y3QoaS5yZXN1bHQpLGkudGFnPXoudGFnLGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCk7YnJlYWt9fWVsc2UgaWYoaS50YWchPT0iISIpe2lmKGxrLmNhbGwoaS50eXBlTWFwW2kua2luZHx8ImZhbGxiYWNrIl0saS50YWcpKXo9aS50eXBlTWFwW2kua2luZHx8ImZhbGxiYWNrIl1baS50YWddO2Vsc2UgZm9yKHo9bnVsbCxSPWkudHlwZU1hcC5tdWx0aVtpLmtpbmR8fCJmYWxsYmFjayJdLEI9MCxOPVIubGVuZ3RoO0I8TjtCKz0xKWlmKGkudGFnLnNsaWNlKDAsUltCXS50YWcubGVuZ3RoKT09PVJbQl0udGFnKXt6PVJbQl07YnJlYWt9enx8U3MoaSwidW5rbm93biB0YWcgITwiK2kudGFnKyI+IiksaS5yZXN1bHQhPT1udWxsJiZ6LmtpbmQhPT1pLmtpbmQmJlNzKGksInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8IitpLnRhZysnPiB0YWc7IGl0IHNob3VsZCBiZSAiJyt6LmtpbmQrJyIsIG5vdCAiJytpLmtpbmQrJyInKSx6LnJlc29sdmUoaS5yZXN1bHQsaS50YWcpPyhpLnJlc3VsdD16LmNvbnN0cnVjdChpLnJlc3VsdCxpLnRhZyksaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPWkucmVzdWx0KSk6U3MoaSwiY2Fubm90IHJlc29sdmUgYSBub2RlIHdpdGggITwiK2kudGFnKyI+IGV4cGxpY2l0IHRhZyIpfXJldHVybiBpLmxpc3RlbmVyIT09bnVsbCYmaS5saXN0ZW5lcigiY2xvc2UiLGkpLGkudGFnIT09bnVsbHx8aS5hbmNob3IhPT1udWxsfHxJfWZ1bmN0aW9uIEVNZShpKXt2YXIgYT1pLnBvc2l0aW9uLGYscCx3LG09ITEsYjtmb3IoaS52ZXJzaW9uPW51bGwsaS5jaGVja0xpbmVCcmVha3M9aS5sZWdhY3ksaS50YWdNYXA9T2JqZWN0LmNyZWF0ZShudWxsKSxpLmFuY2hvck1hcD1PYmplY3QuY3JlYXRlKG51bGwpOyhiPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSkhPT0wJiYoUGYoaSwhMCwtMSksYj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksIShpLmxpbmVJbmRlbnQ+MHx8YiE9PTM3KSk7KXtmb3IobT0hMCxiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLGY9aS5wb3NpdGlvbjtiIT09MCYmIWRwKGIpOyliPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2ZvcihwPWkuaW5wdXQuc2xpY2UoZixpLnBvc2l0aW9uKSx3PVtdLHAubGVuZ3RoPDEmJlNzKGksImRpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCIpO2IhPT0wOyl7Zm9yKDtnVChiKTspYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtpZihiPT09MzUpe2RvIGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUoYiE9PTAmJiFnMyhiKSk7YnJlYWt9aWYoZzMoYikpYnJlYWs7Zm9yKGY9aS5wb3NpdGlvbjtiIT09MCYmIWRwKGIpOyliPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3cucHVzaChpLmlucHV0LnNsaWNlKGYsaS5wb3NpdGlvbikpfWIhPT0wJiZJZHQoaSksbGsuY2FsbChpUHQscCk/aVB0W3BdKGkscCx3KTpXVyhpLCd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSAiJytwKyciJyl9aWYoUGYoaSwhMCwtMSksaS5saW5lSW5kZW50PT09MCYmaS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pPT09NDUmJmkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpPT09NDUmJmkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzIpPT09NDU/KGkucG9zaXRpb24rPTMsUGYoaSwhMCwtMSkpOm0mJlNzKGksImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQiKSx0TChpLGkubGluZUluZGVudC0xLFVXLCExLCEwKSxQZihpLCEwLC0xKSxpLmNoZWNrTGluZUJyZWFrcyYmb01lLnRlc3QoaS5pbnB1dC5zbGljZShhLGkucG9zaXRpb24pKSYmV1coaSwibm9uLUFTQ0lJIGxpbmUgYnJlYWtzIGFyZSBpbnRlcnByZXRlZCBhcyBjb250ZW50IiksaS5kb2N1bWVudHMucHVzaChpLnJlc3VsdCksaS5wb3NpdGlvbj09PWkubGluZVN0YXJ0JiZZVyhpKSl7aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pPT09NDYmJihpLnBvc2l0aW9uKz0zLFBmKGksITAsLTEpKTtyZXR1cm59aWYoaS5wb3NpdGlvbjxpLmxlbmd0aC0xKVNzKGksImVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkIik7ZWxzZSByZXR1cm59ZnVuY3Rpb24gb1B0KGksYSl7aT1TdHJpbmcoaSksYT1hfHx7fSxpLmxlbmd0aCE9PTAmJihpLmNoYXJDb2RlQXQoaS5sZW5ndGgtMSkhPT0xMCYmaS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09MTMmJihpKz1gCmApLGkuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoaT1pLnNsaWNlKDEpKSk7dmFyIGY9bmV3IGRNZShpLGEpLHA9aS5pbmRleE9mKCJcMCIpO2ZvcihwIT09LTEmJihmLnBvc2l0aW9uPXAsU3MoZiwibnVsbCBieXRlIGlzIG5vdCBhbGxvd2VkIGluIGlucHV0IikpLGYuaW5wdXQrPSJcMCI7Zi5pbnB1dC5jaGFyQ29kZUF0KGYucG9zaXRpb24pPT09MzI7KWYubGluZUluZGVudCs9MSxmLnBvc2l0aW9uKz0xO2Zvcig7Zi5wb3NpdGlvbjxmLmxlbmd0aC0xOylFTWUoZik7cmV0dXJuIGYuZG9jdW1lbnRzfWZ1bmN0aW9uIFRNZShpLGEsZil7YSE9PW51bGwmJnR5cGVvZiBhPT0ib2JqZWN0IiYmdHlwZW9mIGY+InUiJiYoZj1hLGE9bnVsbCk7dmFyIHA9b1B0KGksZik7aWYodHlwZW9mIGEhPSJmdW5jdGlvbiIpcmV0dXJuIHA7Zm9yKHZhciB3PTAsbT1wLmxlbmd0aDt3PG07dys9MSlhKHBbd10pfWZ1bmN0aW9uIENNZShpLGEpe3ZhciBmPW9QdChpLGEpO2lmKGYubGVuZ3RoIT09MCl7aWYoZi5sZW5ndGg9PT0xKXJldHVybiBmWzBdO3Rocm93IG5ldyBBNSgiZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmUiKX19dmFyIF9NZT1UTWUsU01lPUNNZSxBTWU9e2xvYWRBbGw6X01lLGxvYWQ6U01lfSxMTWU9R090LE1NZT1BTWUubG9hZDtmdW5jdGlvbiBETWUoaSl7Y29uc3QgYT1pLm1hdGNoKGFJdCk7aWYoIWEpcmV0dXJue3RleHQ6aSxtZXRhZGF0YTp7fX07bGV0IGY9TU1lKGFbMV0se3NjaGVtYTpMTWV9KT8/e307Zj10eXBlb2YgZj09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGYpP2Y6e307Y29uc3QgcD17fTtyZXR1cm4gZi5kaXNwbGF5TW9kZSYmKHAuZGlzcGxheU1vZGU9Zi5kaXNwbGF5TW9kZS50b1N0cmluZygpKSxmLnRpdGxlJiYocC50aXRsZT1mLnRpdGxlLnRvU3RyaW5nKCkpLGYuY29uZmlnJiYocC5jb25maWc9Zi5jb25maWcpLHt0ZXh0Omkuc2xpY2UoYVswXS5sZW5ndGgpLG1ldGFkYXRhOnB9fWNvbnN0IElNZT1pPT5pLnJlcGxhY2UoL1xyXG4/L2csYApgKS5yZXBsYWNlKC88KFx3KykoW14+XSopPi9nLChhLGYscCk9PiI8IitmK3AucmVwbGFjZSgvPSIoW14iXSopIi9nLCI9JyQxJyIpKyI+IiksT01lPWk9Pntjb25zdHt0ZXh0OmEsbWV0YWRhdGE6Zn09RE1lKGkpLHtkaXNwbGF5TW9kZTpwLHRpdGxlOncsY29uZmlnOm09e319PWY7cmV0dXJuIHAmJihtLmdhbnR0fHwobS5nYW50dD17fSksbS5nYW50dC5kaXNwbGF5TW9kZT1wKSx7dGl0bGU6dyxjb25maWc6bSx0ZXh0OmF9fSxQTWU9aT0+e2NvbnN0IGE9JGEuZGV0ZWN0SW5pdChpKT8/e30sZj0kYS5kZXRlY3REaXJlY3RpdmUoaSwid3JhcCIpO3JldHVybiBBcnJheS5pc0FycmF5KGYpP2Eud3JhcD1mLnNvbWUoKHt0eXBlOnB9KT0+e30pOihmPT1udWxsP3ZvaWQgMDpmLnR5cGUpPT09IndyYXAiJiYoYS53cmFwPSEwKSx7dGV4dDpuU2UoaSksZGlyZWN0aXZlOmF9fTtmdW5jdGlvbiBGTWUoaSl7Y29uc3QgYT1JTWUoaSksZj1PTWUoYSkscD1QTWUoZi50ZXh0KSx3PXJGKGYuY29uZmlnLHAuZGlyZWN0aXZlKTtyZXR1cm4gaT16QWUocC50ZXh0KSx7Y29kZTppLHRpdGxlOmYudGl0bGUsY29uZmlnOnd9fWNvbnN0IE5NZT01ZTQsQk1lPSJncmFwaCBUQjthW01heGltdW0gdGV4dCBzaXplIGluIGRpYWdyYW0gZXhjZWVkZWRdO3N0eWxlIGEgZmlsbDojZmFhIixSTWU9InNhbmRib3giLGpNZT0ibG9vc2UiLCRNZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHpNZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIscU1lPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixITWU9IjEwMCUiLFZNZT0iMTAwJSIsR01lPSJib3JkZXI6MDttYXJnaW46MDsiLFVNZT0ibWFyZ2luOjAiLFdNZT0iYWxsb3ctdG9wLW5hdmlnYXRpb24tYnktdXNlci1hY3RpdmF0aW9uIGFsbG93LXBvcHVwcyIsWU1lPSdUaGUgImlmcmFtZSIgdGFnIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLicsS01lPVsiZm9yZWlnbm9iamVjdCJdLFhNZT1bImRvbWluYW50LWJhc2VsaW5lIl07ZnVuY3Rpb24gY1B0KGkpe2NvbnN0IGE9Rk1lKGkpO3JldHVybiAkVygpLEZTZShhLmNvbmZpZz8/e30pLGF9YXN5bmMgZnVuY3Rpb24gUU1lKGksYSl7eGR0KCksaT1jUHQoaSkuY29kZTt0cnl7YXdhaXQga2R0KGkpfWNhdGNoKGYpe2lmKGEhPW51bGwmJmEuc3VwcHJlc3NFcnJvcnMpcmV0dXJuITE7dGhyb3cgZn1yZXR1cm4hMH1jb25zdCBaTWU9ZnVuY3Rpb24oaSl7bGV0IGE9aTtyZXR1cm4gYT1hLnJlcGxhY2UoL3N0eWxlLio6XFMqIy4qOy9nLGZ1bmN0aW9uKGYpe3JldHVybiBmLnN1YnN0cmluZygwLGYubGVuZ3RoLTEpfSksYT1hLnJlcGxhY2UoL2NsYXNzRGVmLio6XFMqIy4qOy9nLGZ1bmN0aW9uKGYpe3JldHVybiBmLnN1YnN0cmluZygwLGYubGVuZ3RoLTEpfSksYT1hLnJlcGxhY2UoLyNcdys7L2csZnVuY3Rpb24oZil7Y29uc3QgcD1mLnN1YnN0cmluZygxLGYubGVuZ3RoLTEpO3JldHVybi9eXCs/XGQrJC8udGVzdChwKT8i76yCwrDCsCIrcCsiwrbDnyI6Iu+sgsKwIitwKyLCtsOfIn0pLGF9LHVGPWZ1bmN0aW9uKGkpe3JldHVybiBpLnJlcGxhY2UoL++sgsKwwrAvZywiJiMiKS5yZXBsYWNlKC/vrILCsC9nLCImIikucmVwbGFjZSgvwrbDny9nLCI7Iil9LHVQdD0oaSxhLGY9W10pPT5gCi4ke2l9ICR7YX0geyAke2Yuam9pbigiICFpbXBvcnRhbnQ7ICIpfSAhaW1wb3J0YW50OyB9YCxKTWU9KGksYT17fSk9Pnt2YXIgcDtsZXQgZj0iIjtpZihpLnRoZW1lQ1NTIT09dm9pZCAwJiYoZis9YAoke2kudGhlbWVDU1N9YCksaS5mb250RmFtaWx5IT09dm9pZCAwJiYoZis9YAo6cm9vdCB7IC0tbWVybWFpZC1mb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9fWApLGkuYWx0Rm9udEZhbWlseSE9PXZvaWQgMCYmKGYrPWAKOnJvb3QgeyAtLW1lcm1haWQtYWx0LWZvbnQtZmFtaWx5OiAke2kuYWx0Rm9udEZhbWlseX19YCksIW9GKGEpKXtjb25zdCBFPWkuaHRtbExhYmVsc3x8KChwPWkuZmxvd2NoYXJ0KT09bnVsbD92b2lkIDA6cC5odG1sTGFiZWxzKT9bIj4gKiIsInNwYW4iXTpbInJlY3QiLCJwb2x5Z29uIiwiZWxsaXBzZSIsImNpcmNsZSIsInBhdGgiXTtmb3IoY29uc3QgXyBpbiBhKXtjb25zdCBBPWFbX107b0YoQS5zdHlsZXMpfHxFLmZvckVhY2goST0+e2YrPXVQdChBLmlkLEksQS5zdHlsZXMpfSksb0YoQS50ZXh0U3R5bGVzKXx8KGYrPXVQdChBLmlkLCJ0c3BhbiIsQS50ZXh0U3R5bGVzKSl9fXJldHVybiBmfSx0RGU9KGksYSxmLHApPT57Y29uc3Qgdz1KTWUoaSxmKSxtPXNBZShhLHcsaS50aGVtZVZhcmlhYmxlcyk7cmV0dXJuIHBkdChMU2UoYCR7cH17JHttfX1gKSxEU2UpfSxlRGU9KGk9IiIsYSxmKT0+e2xldCBwPWk7cmV0dXJuIWYmJiFhJiYocD1wLnJlcGxhY2UoL21hcmtlci1lbmQ9InVybFwoW1xkKy4vOj0/QS1aYS16LV0qPyMvZywnbWFya2VyLWVuZD0idXJsKCMnKSkscD11RihwKSxwPXAucmVwbGFjZSgvPGJyPi9nLCI8YnIvPiIpLHB9LG5EZT0oaT0iIixhKT0+e3ZhciB3LG07Y29uc3QgZj0obT0odz1hPT1udWxsP3ZvaWQgMDphLnZpZXdCb3gpPT1udWxsP3ZvaWQgMDp3LmJhc2VWYWwpIT1udWxsJiZtLmhlaWdodD9hLnZpZXdCb3guYmFzZVZhbC5oZWlnaHQrInB4IjpWTWUscD1idG9hKCc8Ym9keSBzdHlsZT0iJytVTWUrJyI+JytpKyI8L2JvZHk+Iik7cmV0dXJuYDxpZnJhbWUgc3R5bGU9IndpZHRoOiR7SE1lfTtoZWlnaHQ6JHtmfTske0dNZX0iIHNyYz0iZGF0YTp0ZXh0L2h0bWw7YmFzZTY0LCR7cH0iIHNhbmRib3g9IiR7V01lfSI+CiAgJHtZTWV9CjwvaWZyYW1lPmB9LGxQdD0oaSxhLGYscCx3KT0+e2NvbnN0IG09aS5hcHBlbmQoImRpdiIpO20uYXR0cigiaWQiLGYpLHAmJm0uYXR0cigic3R5bGUiLHApO2NvbnN0IGI9bS5hcHBlbmQoInN2ZyIpLmF0dHIoImlkIixhKS5hdHRyKCJ3aWR0aCIsIjEwMCUiKS5hdHRyKCJ4bWxucyIsJE1lKTtyZXR1cm4gdyYmYi5hdHRyKCJ4bWxuczp4bGluayIsdyksYi5hcHBlbmQoImciKSxpfTtmdW5jdGlvbiBoUHQoaSxhKXtyZXR1cm4gaS5hcHBlbmQoImlmcmFtZSIpLmF0dHIoImlkIixhKS5hdHRyKCJzdHlsZSIsIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IikuYXR0cigic2FuZGJveCIsIiIpfWNvbnN0IHJEZT0oaSxhLGYscCk9Pnt2YXIgdyxtLGI7KHc9aS5nZXRFbGVtZW50QnlJZChhKSk9PW51bGx8fHcucmVtb3ZlKCksKG09aS5nZXRFbGVtZW50QnlJZChmKSk9PW51bGx8fG0ucmVtb3ZlKCksKGI9aS5nZXRFbGVtZW50QnlJZChwKSk9PW51bGx8fGIucmVtb3ZlKCl9LGlEZT1hc3luYyBmdW5jdGlvbihpLGEsZil7dmFyIG50LEl0LE90LEJ0LEV0LFo7eGR0KCk7Y29uc3QgcD1jUHQoYSk7YT1wLmNvZGU7Y29uc3Qgdz1GZCgpO1V0LmRlYnVnKHcpLGEubGVuZ3RoPigodz09bnVsbD92b2lkIDA6dy5tYXhUZXh0U2l6ZSk/P05NZSkmJihhPUJNZSk7Y29uc3QgbT0iIyIraSxiPSJpIitpLEU9IiMiK2IsXz0iZCIraSxBPSIjIitfO2xldCBJPXlyKCJib2R5Iik7Y29uc3QgQj13LnNlY3VyaXR5TGV2ZWw9PT1STWUsTj13LnNlY3VyaXR5TGV2ZWw9PT1qTWUsUj13LmZvbnRGYW1pbHk7aWYoZiE9PXZvaWQgMCl7aWYoZiYmKGYuaW5uZXJIVE1MPSIiKSxCKXtjb25zdCBDdD1oUHQoeXIoZiksYik7ST15cihDdC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSxJLm5vZGUoKS5zdHlsZS5tYXJnaW49MH1lbHNlIEk9eXIoZik7bFB0KEksaSxfLGBmb250LWZhbWlseTogJHtSfWAsek1lKX1lbHNle2lmKHJEZShkb2N1bWVudCxpLF8sYiksQil7Y29uc3QgQ3Q9aFB0KHlyKCJib2R5IiksYik7ST15cihDdC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSxJLm5vZGUoKS5zdHlsZS5tYXJnaW49MH1lbHNlIEk9eXIoImJvZHkiKTtsUHQoSSxpLF8pfWE9Wk1lKGEpO2xldCB6LFc7dHJ5e3o9YXdhaXQga2R0KGEse3RpdGxlOnAudGl0bGV9KX1jYXRjaChDdCl7ej1uZXcgRk90KCJlcnJvciIpLFc9Q3R9Y29uc3QgZXQ9SS5zZWxlY3QoQSkubm9kZSgpLHN0PXoudHlwZSxhdD1ldC5maXJzdENoaWxkLGJ0PWF0LmZpcnN0Q2hpbGQsbXQ9KEl0PShudD16LnJlbmRlcmVyKS5nZXRDbGFzc2VzKT09bnVsbD92b2lkIDA6SXQuY2FsbChudCxhLHopLHl0PXREZSh3LHN0LG10LG0pLGZ0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZnQuaW5uZXJIVE1MPXl0LGF0Lmluc2VydEJlZm9yZShmdCxidCk7dHJ5e2F3YWl0IHoucmVuZGVyZXIuZHJhdyhhLGksbk90LHopfWNhdGNoKEN0KXt0aHJvdyBmQWUuZHJhdyhhLGksbk90KSxDdH1jb25zdCB1dD1JLnNlbGVjdChgJHtBfSBzdmdgKSx2dD0oQnQ9KE90PXouZGIpLmdldEFjY1RpdGxlKT09bnVsbD92b2lkIDA6QnQuY2FsbChPdCksWD0oWj0oRXQ9ei5kYikuZ2V0QWNjRGVzY3JpcHRpb24pPT1udWxsP3ZvaWQgMDpaLmNhbGwoRXQpO2FEZShzdCx1dCx2dCxYKSxJLnNlbGVjdChgW2lkPSIke2l9Il1gKS5zZWxlY3RBbGwoImZvcmVpZ25vYmplY3QgPiAqIikuYXR0cigieG1sbnMiLHFNZSk7bGV0IHB0PUkuc2VsZWN0KEEpLm5vZGUoKS5pbm5lckhUTUw7aWYoVXQuZGVidWcoImNvbmZpZy5hcnJvd01hcmtlckFic29sdXRlIix3LmFycm93TWFya2VyQWJzb2x1dGUpLHB0PWVEZShwdCxCLG8xKHcuYXJyb3dNYXJrZXJBYnNvbHV0ZSkpLEIpe2NvbnN0IEN0PUkuc2VsZWN0KEErIiBzdmciKS5ub2RlKCk7cHQ9bkRlKHB0LEN0KX1lbHNlIE58fChwdD1sVy5zYW5pdGl6ZShwdCx7QUREX1RBR1M6S01lLEFERF9BVFRSOlhNZX0pKTtpZihtQWUoKSxXKXRocm93IFc7Y29uc3QgVHQ9eXIoQj9FOkEpLm5vZGUoKTtyZXR1cm4gVHQmJiJyZW1vdmUiaW4gVHQmJlR0LnJlbW92ZSgpLHtzdmc6cHQsYmluZEZ1bmN0aW9uczp6LmRiLmJpbmRGdW5jdGlvbnN9fTtmdW5jdGlvbiBzRGUoaT17fSl7dmFyIGY7aSE9bnVsbCYmaS5mb250RmFtaWx5JiYhKChmPWkudGhlbWVWYXJpYWJsZXMpIT1udWxsJiZmLmZvbnRGYW1pbHkpJiYoaS50aGVtZVZhcmlhYmxlc3x8KGkudGhlbWVWYXJpYWJsZXM9e30pLGkudGhlbWVWYXJpYWJsZXMuZm9udEZhbWlseT1pLmZvbnRGYW1pbHkpLE9TZShpKSxpIT1udWxsJiZpLnRoZW1lJiZpLnRoZW1lIGluIFQ1P2kudGhlbWVWYXJpYWJsZXM9VDVbaS50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMoaS50aGVtZVZhcmlhYmxlcyk6aSYmKGkudGhlbWVWYXJpYWJsZXM9VDUuZGVmYXVsdC5nZXRUaGVtZVZhcmlhYmxlcyhpLnRoZW1lVmFyaWFibGVzKSk7Y29uc3QgYT10eXBlb2YgaT09Im9iamVjdCI/SVNlKGkpOmlPdCgpO1hmdChhLmxvZ0xldmVsKSx4ZHQoKX1mdW5jdGlvbiBhRGUoaSxhLGYscCl7akFlKGEsaSksJEFlKGEsZixwLGEuYXR0cigiaWQiKSl9Y29uc3QgcFQ9T2JqZWN0LmZyZWV6ZSh7cmVuZGVyOmlEZSxwYXJzZTpRTWUsZ2V0RGlhZ3JhbUZyb21UZXh0OmtkdCxpbml0aWFsaXplOnNEZSxnZXRDb25maWc6RmQsc2V0Q29uZmlnOnNPdCxnZXRTaXRlQ29uZmlnOmlPdCx1cGRhdGVTaXRlQ29uZmlnOlBTZSxyZXNldDooKT0+eyRXKCl9LGdsb2JhbFJlc2V0OigpPT57JFcoV0EpfSxkZWZhdWx0Q29uZmlnOldBfSk7WGZ0KEZkKCkubG9nTGV2ZWwpLCRXKEZkKCkpO2NvbnN0IG9EZT1hc3luYygpPT57VXQuZGVidWcoIkxvYWRpbmcgcmVnaXN0ZXJlZCBkaWFncmFtcyIpO2NvbnN0IGE9KGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChPYmplY3QuZW50cmllcyhOQSkubWFwKGFzeW5jKFtmLHtkZXRlY3RvcjpwLGxvYWRlcjp3fV0pPT57aWYodyl0cnl7eWR0KGYpfWNhdGNoe3RyeXtjb25zdHtkaWFncmFtOmIsaWQ6RX09YXdhaXQgdygpO0hXKEUsYixwKX1jYXRjaChiKXt0aHJvdyBVdC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZGlhZ3JhbSB3aXRoIGtleSAke2Z9LiBSZW1vdmluZyBmcm9tIGRldGVjdG9ycy5gKSxkZWxldGUgTkFbZl0sYn19fSkpKS5maWx0ZXIoZj0+Zi5zdGF0dXM9PT0icmVqZWN0ZWQiKTtpZihhLmxlbmd0aD4wKXtVdC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHthLmxlbmd0aH0gZXh0ZXJuYWwgZGlhZ3JhbXNgKTtmb3IoY29uc3QgZiBvZiBhKVV0LmVycm9yKGYpO3Rocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgJHthLmxlbmd0aH0gZXh0ZXJuYWwgZGlhZ3JhbXNgKX19LGNEZT0oaSxhLGYpPT57VXQud2FybihpKSxXSXQoaSk/KGYmJmYoaS5zdHIsaS5oYXNoKSxhLnB1c2goey4uLmksbWVzc2FnZTppLnN0cixlcnJvcjppfSkpOihmJiZmKGkpLGkgaW5zdGFuY2VvZiBFcnJvciYmYS5wdXNoKHtzdHI6aS5tZXNzYWdlLG1lc3NhZ2U6aS5tZXNzYWdlLGhhc2g6aS5uYW1lLGVycm9yOml9KSl9LGZQdD1hc3luYyBmdW5jdGlvbihpPXtxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9KXt0cnl7YXdhaXQgdURlKGkpfWNhdGNoKGEpe2lmKFdJdChhKSYmVXQuZXJyb3IoYS5zdHIpLEJiLnBhcnNlRXJyb3ImJkJiLnBhcnNlRXJyb3IoYSksIWkuc3VwcHJlc3NFcnJvcnMpdGhyb3cgVXQuZXJyb3IoIlVzZSB0aGUgc3VwcHJlc3NFcnJvcnMgb3B0aW9uIHRvIHN1cHByZXNzIHRoZXNlIGVycm9ycyIpLGF9fSx1RGU9YXN5bmMgZnVuY3Rpb24oe3Bvc3RSZW5kZXJDYWxsYmFjazppLHF1ZXJ5U2VsZWN0b3I6YSxub2RlczpmfT17cXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifSl7Y29uc3QgcD1wVC5nZXRDb25maWcoKTtVdC5kZWJ1ZyhgJHtpPyIiOiJObyAifUNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kYCk7bGV0IHc7aWYoZil3PWY7ZWxzZSBpZihhKXc9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChhKTtlbHNlIHRocm93IG5ldyBFcnJvcigiTm9kZXMgYW5kIHF1ZXJ5U2VsZWN0b3IgYXJlIGJvdGggdW5kZWZpbmVkIik7VXQuZGVidWcoYEZvdW5kICR7dy5sZW5ndGh9IGRpYWdyYW1zYCksKHA9PW51bGw/dm9pZCAwOnAuc3RhcnRPbkxvYWQpIT09dm9pZCAwJiYoVXQuZGVidWcoIlN0YXJ0IE9uIExvYWQ6ICIrKHA9PW51bGw/dm9pZCAwOnAuc3RhcnRPbkxvYWQpKSxwVC51cGRhdGVTaXRlQ29uZmlnKHtzdGFydE9uTG9hZDpwPT1udWxsP3ZvaWQgMDpwLnN0YXJ0T25Mb2FkfSkpO2NvbnN0IG09bmV3ICRhLkluaXRJREdlbmVyYXRvcihwLmRldGVybWluaXN0aWNJZHMscC5kZXRlcm1pbmlzdGljSURTZWVkKTtsZXQgYjtjb25zdCBFPVtdO2Zvcihjb25zdCBfIG9mIEFycmF5LmZyb20odykpe1V0LmluZm8oIlJlbmRlcmluZyBkaWFncmFtOiAiK18uaWQpOy8qISBDaGVjayBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqL2lmKF8uZ2V0QXR0cmlidXRlKCJkYXRhLXByb2Nlc3NlZCIpKWNvbnRpbnVlO18uc2V0QXR0cmlidXRlKCJkYXRhLXByb2Nlc3NlZCIsInRydWUiKTtjb25zdCBBPWBtZXJtYWlkLSR7bS5uZXh0KCl9YDtiPV8uaW5uZXJIVE1MLGI9eEEoJGEuZW50aXR5RGVjb2RlKGIpKS50cmltKCkucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiPGJyLz4iKTtjb25zdCBJPSRhLmRldGVjdEluaXQoYik7SSYmVXQuZGVidWcoIkRldGVjdGVkIGVhcmx5IHJlaW5pdDogIixJKTt0cnl7Y29uc3R7c3ZnOkIsYmluZEZ1bmN0aW9uczpOfT1hd2FpdCBiUHQoQSxiLF8pO18uaW5uZXJIVE1MPUIsaSYmYXdhaXQgaShBKSxOJiZOKF8pfWNhdGNoKEIpe2NEZShCLEUsQmIucGFyc2VFcnJvcil9fWlmKEUubGVuZ3RoPjApdGhyb3cgRVswXX0sZFB0PWZ1bmN0aW9uKGkpe3BULmluaXRpYWxpemUoaSl9LGxEZT1hc3luYyBmdW5jdGlvbihpLGEsZil7VXQud2FybigibWVybWFpZC5pbml0IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgcnVuIGluc3RlYWQuIiksaSYmZFB0KGkpO2NvbnN0IHA9e3Bvc3RSZW5kZXJDYWxsYmFjazpmLHF1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn07dHlwZW9mIGE9PSJzdHJpbmciP3AucXVlcnlTZWxlY3Rvcj1hOmEmJihhIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ/cC5ub2Rlcz1bYV06cC5ub2Rlcz1hKSxhd2FpdCBmUHQocCl9LGhEZT1hc3luYyhpLHtsYXp5TG9hZDphPSEwfT17fSk9PntjSXQoLi4uaSksYT09PSExJiZhd2FpdCBvRGUoKX0sZ1B0PWZ1bmN0aW9uKCl7aWYoQmIuc3RhcnRPbkxvYWQpe2NvbnN0e3N0YXJ0T25Mb2FkOml9PXBULmdldENvbmZpZygpO2kmJkJiLnJ1bigpLmNhdGNoKGE9PlV0LmVycm9yKCJNZXJtYWlkIGZhaWxlZCB0byBpbml0aWFsaXplIixhKSl9fTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKXsvKiEKICogV2FpdCBmb3IgZG9jdW1lbnQgbG9hZGVkIGJlZm9yZSBzdGFydGluZyB0aGUgZXhlY3V0aW9uCiAqL3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixnUHQsITEpfWNvbnN0IGZEZT1mdW5jdGlvbihpKXtCYi5wYXJzZUVycm9yPWl9LEtXPVtdO2xldCBQZHQ9ITE7Y29uc3QgcFB0PWFzeW5jKCk9PntpZighUGR0KXtmb3IoUGR0PSEwO0tXLmxlbmd0aD4wOyl7Y29uc3QgaT1LVy5zaGlmdCgpO2lmKGkpdHJ5e2F3YWl0IGkoKX1jYXRjaChhKXtVdC5lcnJvcigiRXJyb3IgZXhlY3V0aW5nIHF1ZXVlIixhKX19UGR0PSExfX0sZERlPWFzeW5jKGksYSk9Pm5ldyBQcm9taXNlKChmLHApPT57Y29uc3Qgdz0oKT0+bmV3IFByb21pc2UoKG0sYik9PntwVC5wYXJzZShpLGEpLnRoZW4oRT0+e20oRSksZihFKX0sRT0+e3ZhciBfO1V0LmVycm9yKCJFcnJvciBwYXJzaW5nIixFKSwoXz1CYi5wYXJzZUVycm9yKT09bnVsbHx8Xy5jYWxsKEJiLEUpLGIoRSkscChFKX0pfSk7S1cucHVzaCh3KSxwUHQoKS5jYXRjaChwKX0pLGJQdD0oaSxhLGYpPT5uZXcgUHJvbWlzZSgocCx3KT0+e2NvbnN0IG09KCk9Pm5ldyBQcm9taXNlKChiLEUpPT57cFQucmVuZGVyKGksYSxmKS50aGVuKF89PntiKF8pLHAoXyl9LF89Pnt2YXIgQTtVdC5lcnJvcigiRXJyb3IgcGFyc2luZyIsXyksKEE9QmIucGFyc2VFcnJvcik9PW51bGx8fEEuY2FsbChCYixfKSxFKF8pLHcoXyl9KX0pO0tXLnB1c2gobSkscFB0KCkuY2F0Y2godyl9KSxCYj17c3RhcnRPbkxvYWQ6ITAsbWVybWFpZEFQSTpwVCxwYXJzZTpkRGUscmVuZGVyOmJQdCxpbml0OmxEZSxydW46ZlB0LHJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtczpoRGUsaW5pdGlhbGl6ZTpkUHQscGFyc2VFcnJvcjp2b2lkIDAsY29udGVudExvYWRlZDpnUHQsc2V0UGFyc2VFcnJvckhhbmRsZXI6ZkRlLGRldGVjdFR5cGU6eVd9O3ZhciBYVz1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKFhpLEVyLFhuLGRpKXtmb3IoWG49WG58fHt9LGRpPVhpLmxlbmd0aDtkaS0tO1huW1hpW2RpXV09RXIpO3JldHVybiBYbn0sYT1bMSwyNF0sZj1bMSwyNV0scD1bMSwyNl0sdz1bMSwyN10sbT1bMSwyOF0sYj1bMSw2M10sRT1bMSw2NF0sXz1bMSw2NV0sQT1bMSw2Nl0sST1bMSw2N10sQj1bMSw2OF0sTj1bMSw2OV0sUj1bMSwyOV0sej1bMSwzMF0sVz1bMSwzMV0sZXQ9WzEsMzJdLHN0PVsxLDMzXSxhdD1bMSwzNF0sYnQ9WzEsMzVdLG10PVsxLDM2XSx5dD1bMSwzN10sZnQ9WzEsMzhdLHV0PVsxLDM5XSx2dD1bMSw0MF0sWD1bMSw0MV0scHQ9WzEsNDJdLFU9WzEsNDNdLFR0PVsxLDQ0XSxudD1bMSw0NV0sSXQ9WzEsNDZdLE90PVsxLDQ3XSxCdD1bMSw0OF0sRXQ9WzEsNTBdLFo9WzEsNTFdLEN0PVsxLDUyXSx4dD1bMSw1M10sSHQ9WzEsNTRdLExlPVsxLDU1XSxGdD1bMSw1Nl0sZ249WzEsNTddLFNlPVsxLDU4XSxtZT1bMSw1OV0sVmU9WzEsNjBdLFllPVsxNCw0Ml0sY2U9WzE0LDM0LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSxrZT1bMTIsMTQsMzQsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzRdLHp0PVsxLDgyXSxyZT1bMSw4M10sc2U9WzEsODRdLFBlPVsxLDg1XSx0ZT1bMTIsMTQsNDJdLE1lPVsxMiwxNCwzMyw0Ml0sZGU9WzEyLDE0LDMzLDQyLDc2LDc3LDc5LDgwXSxvbj1bMTIsMzNdLG5pPVszNCwzNiwzNywzOCwzOSw0MCw0MSw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NF0sS3M9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3Rpb246NSxkaXJlY3Rpb25fdGI6NixkaXJlY3Rpb25fYnQ6NyxkaXJlY3Rpb25fcmw6OCxkaXJlY3Rpb25fbHI6OSxncmFwaENvbmZpZzoxMCxDNF9DT05URVhUOjExLE5FV0xJTkU6MTIsc3RhdGVtZW50czoxMyxFT0Y6MTQsQzRfQ09OVEFJTkVSOjE1LEM0X0NPTVBPTkVOVDoxNixDNF9EWU5BTUlDOjE3LEM0X0RFUExPWU1FTlQ6MTgsb3RoZXJTdGF0ZW1lbnRzOjE5LGRpYWdyYW1TdGF0ZW1lbnRzOjIwLG90aGVyU3RhdGVtZW50OjIxLHRpdGxlOjIyLGFjY0Rlc2NyaXB0aW9uOjIzLGFjY190aXRsZToyNCxhY2NfdGl0bGVfdmFsdWU6MjUsYWNjX2Rlc2NyOjI2LGFjY19kZXNjcl92YWx1ZToyNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjI4LGJvdW5kYXJ5U3RhdGVtZW50OjI5LGJvdW5kYXJ5U3RhcnRTdGF0ZW1lbnQ6MzAsYm91bmRhcnlTdG9wU3RhdGVtZW50OjMxLGJvdW5kYXJ5U3RhcnQ6MzIsTEJSQUNFOjMzLEVOVEVSUFJJU0VfQk9VTkRBUlk6MzQsYXR0cmlidXRlczozNSxTWVNURU1fQk9VTkRBUlk6MzYsQk9VTkRBUlk6MzcsQ09OVEFJTkVSX0JPVU5EQVJZOjM4LE5PREU6MzksTk9ERV9MOjQwLE5PREVfUjo0MSxSQlJBQ0U6NDIsZGlhZ3JhbVN0YXRlbWVudDo0MyxQRVJTT046NDQsUEVSU09OX0VYVDo0NSxTWVNURU06NDYsU1lTVEVNX0RCOjQ3LFNZU1RFTV9RVUVVRTo0OCxTWVNURU1fRVhUOjQ5LFNZU1RFTV9FWFRfREI6NTAsU1lTVEVNX0VYVF9RVUVVRTo1MSxDT05UQUlORVI6NTIsQ09OVEFJTkVSX0RCOjUzLENPTlRBSU5FUl9RVUVVRTo1NCxDT05UQUlORVJfRVhUOjU1LENPTlRBSU5FUl9FWFRfREI6NTYsQ09OVEFJTkVSX0VYVF9RVUVVRTo1NyxDT01QT05FTlQ6NTgsQ09NUE9ORU5UX0RCOjU5LENPTVBPTkVOVF9RVUVVRTo2MCxDT01QT05FTlRfRVhUOjYxLENPTVBPTkVOVF9FWFRfREI6NjIsQ09NUE9ORU5UX0VYVF9RVUVVRTo2MyxSRUw6NjQsQklSRUw6NjUsUkVMX1U6NjYsUkVMX0Q6NjcsUkVMX0w6NjgsUkVMX1I6NjksUkVMX0I6NzAsUkVMX0lOREVYOjcxLFVQREFURV9FTF9TVFlMRTo3MixVUERBVEVfUkVMX1NUWUxFOjczLFVQREFURV9MQVlPVVRfQ09ORklHOjc0LGF0dHJpYnV0ZTo3NSxTVFI6NzYsU1RSX0tFWTo3NyxTVFJfVkFMVUU6NzgsQVRUUklCVVRFOjc5LEFUVFJJQlVURV9FTVBUWTo4MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiZGlyZWN0aW9uX3RiIiw3OiJkaXJlY3Rpb25fYnQiLDg6ImRpcmVjdGlvbl9ybCIsOToiZGlyZWN0aW9uX2xyIiwxMToiQzRfQ09OVEVYVCIsMTI6Ik5FV0xJTkUiLDE0OiJFT0YiLDE1OiJDNF9DT05UQUlORVIiLDE2OiJDNF9DT01QT05FTlQiLDE3OiJDNF9EWU5BTUlDIiwxODoiQzRfREVQTE9ZTUVOVCIsMjI6InRpdGxlIiwyMzoiYWNjRGVzY3JpcHRpb24iLDI0OiJhY2NfdGl0bGUiLDI1OiJhY2NfdGl0bGVfdmFsdWUiLDI2OiJhY2NfZGVzY3IiLDI3OiJhY2NfZGVzY3JfdmFsdWUiLDI4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzMzoiTEJSQUNFIiwzNDoiRU5URVJQUklTRV9CT1VOREFSWSIsMzY6IlNZU1RFTV9CT1VOREFSWSIsMzc6IkJPVU5EQVJZIiwzODoiQ09OVEFJTkVSX0JPVU5EQVJZIiwzOToiTk9ERSIsNDA6Ik5PREVfTCIsNDE6Ik5PREVfUiIsNDI6IlJCUkFDRSIsNDQ6IlBFUlNPTiIsNDU6IlBFUlNPTl9FWFQiLDQ2OiJTWVNURU0iLDQ3OiJTWVNURU1fREIiLDQ4OiJTWVNURU1fUVVFVUUiLDQ5OiJTWVNURU1fRVhUIiw1MDoiU1lTVEVNX0VYVF9EQiIsNTE6IlNZU1RFTV9FWFRfUVVFVUUiLDUyOiJDT05UQUlORVIiLDUzOiJDT05UQUlORVJfREIiLDU0OiJDT05UQUlORVJfUVVFVUUiLDU1OiJDT05UQUlORVJfRVhUIiw1NjoiQ09OVEFJTkVSX0VYVF9EQiIsNTc6IkNPTlRBSU5FUl9FWFRfUVVFVUUiLDU4OiJDT01QT05FTlQiLDU5OiJDT01QT05FTlRfREIiLDYwOiJDT01QT05FTlRfUVVFVUUiLDYxOiJDT01QT05FTlRfRVhUIiw2MjoiQ09NUE9ORU5UX0VYVF9EQiIsNjM6IkNPTVBPTkVOVF9FWFRfUVVFVUUiLDY0OiJSRUwiLDY1OiJCSVJFTCIsNjY6IlJFTF9VIiw2NzoiUkVMX0QiLDY4OiJSRUxfTCIsNjk6IlJFTF9SIiw3MDoiUkVMX0IiLDcxOiJSRUxfSU5ERVgiLDcyOiJVUERBVEVfRUxfU1RZTEUiLDczOiJVUERBVEVfUkVMX1NUWUxFIiw3NDoiVVBEQVRFX0xBWU9VVF9DT05GSUciLDc2OiJTVFIiLDc3OiJTVFJfS0VZIiw3ODoiU1RSX1ZBTFVFIiw3OToiQVRUUklCVVRFIiw4MDoiQVRUUklCVVRFX0VNUFRZIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDFdLFs1LDFdLFs1LDFdLFs1LDFdLFs1LDFdLFs0LDFdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEzLDFdLFsxMywxXSxbMTMsMl0sWzE5LDFdLFsxOSwyXSxbMTksM10sWzIxLDFdLFsyMSwxXSxbMjEsMl0sWzIxLDJdLFsyMSwxXSxbMjksM10sWzMwLDNdLFszMCwzXSxbMzAsNF0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMSwxXSxbMjAsMV0sWzIwLDJdLFsyMCwzXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywxXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFszNSwxXSxbMzUsMl0sWzc1LDFdLFs3NSwyXSxbNzUsMV0sWzc1LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEVyLFhuLGRpLEVlLEtuLEhlLFRpKXt2YXIgcG49SGUubGVuZ3RoLTE7c3dpdGNoKEtuKXtjYXNlIDM6RWUuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNDpFZS5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSA1OkVlLnNldERpcmVjdGlvbigiUkwiKTticmVhaztjYXNlIDY6RWUuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTI6RWUuc2V0QzRUeXBlKEhlW3BuLTNdKTticmVhaztjYXNlIDE5OkVlLnNldFRpdGxlKEhlW3BuXS5zdWJzdHJpbmcoNikpLHRoaXMuJD1IZVtwbl0uc3Vic3RyaW5nKDYpO2JyZWFrO2Nhc2UgMjA6RWUuc2V0QWNjRGVzY3JpcHRpb24oSGVbcG5dLnN1YnN0cmluZygxNSkpLHRoaXMuJD1IZVtwbl0uc3Vic3RyaW5nKDE1KTticmVhaztjYXNlIDIxOnRoaXMuJD1IZVtwbl0udHJpbSgpLEVlLnNldFRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnRoaXMuJD1IZVtwbl0udHJpbSgpLEVlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyODpjYXNlIDI5OkhlW3BuXS5zcGxpY2UoMiwwLCJFTlRFUlBSSVNFIiksRWUuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSAzMDpFZS5hZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5KC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDMxOkhlW3BuXS5zcGxpY2UoMiwwLCJDT05UQUlORVIiKSxFZS5hZGRDb250YWluZXJCb3VuZGFyeSguLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSAzMjpFZS5hZGREZXBsb3ltZW50Tm9kZSgibm9kZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgMzM6RWUuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVMIiwuLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSAzNDpFZS5hZGREZXBsb3ltZW50Tm9kZSgibm9kZVIiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDM1OkVlLnBvcEJvdW5kYXJ5UGFyc2VTdGFjaygpO2JyZWFrO2Nhc2UgMzk6RWUuYWRkUGVyc29uT3JTeXN0ZW0oInBlcnNvbiIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDA6RWUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3BlcnNvbiIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDE6RWUuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDI6RWUuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9kYiIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDM6RWUuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9xdWV1ZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDQ6RWUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDU6RWUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9kYiIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDY6RWUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9xdWV1ZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNDc6RWUuYWRkQ29udGFpbmVyKCJjb250YWluZXIiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDQ4OkVlLmFkZENvbnRhaW5lcigiY29udGFpbmVyX2RiIiwuLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSA0OTpFZS5hZGRDb250YWluZXIoImNvbnRhaW5lcl9xdWV1ZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNTA6RWUuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXIiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDUxOkVlLmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyX2RiIiwuLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSA1MjpFZS5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNTM6RWUuYWRkQ29tcG9uZW50KCJjb21wb25lbnQiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDU0OkVlLmFkZENvbXBvbmVudCgiY29tcG9uZW50X2RiIiwuLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSA1NTpFZS5hZGRDb21wb25lbnQoImNvbXBvbmVudF9xdWV1ZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNTY6RWUuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnQiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDU3OkVlLmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50X2RiIiwuLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSA1ODpFZS5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNjA6RWUuYWRkUmVsKCJyZWwiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDYxOkVlLmFkZFJlbCgiYmlyZWwiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDYyOkVlLmFkZFJlbCgicmVsX3UiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDYzOkVlLmFkZFJlbCgicmVsX2QiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDY0OkVlLmFkZFJlbCgicmVsX2wiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDY1OkVlLmFkZFJlbCgicmVsX3IiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDY2OkVlLmFkZFJlbCgicmVsX2IiLC4uLkhlW3BuXSksdGhpcy4kPUhlW3BuXTticmVhaztjYXNlIDY3OkhlW3BuXS5zcGxpY2UoMCwxKSxFZS5hZGRSZWwoInJlbCIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNjg6RWUudXBkYXRlRWxTdHlsZSgidXBkYXRlX2VsX3N0eWxlIiwuLi5IZVtwbl0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSA2OTpFZS51cGRhdGVSZWxTdHlsZSgidXBkYXRlX3JlbF9zdHlsZSIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNzA6RWUudXBkYXRlTGF5b3V0Q29uZmlnKCJ1cGRhdGVfbGF5b3V0X2NvbmZpZyIsLi4uSGVbcG5dKSx0aGlzLiQ9SGVbcG5dO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPVtIZVtwbl1dO2JyZWFrO2Nhc2UgNzI6SGVbcG5dLnVuc2hpZnQoSGVbcG4tMV0pLHRoaXMuJD1IZVtwbl07YnJlYWs7Y2FzZSA3MzpjYXNlIDc1OnRoaXMuJD1IZVtwbl0udHJpbSgpO2JyZWFrO2Nhc2UgNzQ6bGV0IEVzPXt9O0VzW0hlW3BuLTFdLnRyaW0oKV09SGVbcG5dLnRyaW0oKSx0aGlzLiQ9RXM7YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9IiI7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6WzEsNV0sNzpbMSw2XSw4OlsxLDddLDk6WzEsOF0sMTA6NCwxMTpbMSw5XSwxNTpbMSwxMF0sMTY6WzEsMTFdLDE3OlsxLDEyXSwxODpbMSwxM119LHsxOlszXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiw3XX0sezE6WzIsM119LHsxOlsyLDRdfSx7MTpbMiw1XX0sezE6WzIsNl19LHsxMjpbMSwxNF19LHsxMjpbMSwxNV19LHsxMjpbMSwxNl19LHsxMjpbMSwxN119LHsxMjpbMSwxOF19LHsxMzoxOSwxOToyMCwyMDoyMSwyMToyMiwyMjphLDIzOmYsMjQ6cCwyNjp3LDI4Om0sMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjpFLDM3Ol8sMzg6QSwzOTpJLDQwOkIsNDE6Tiw0MzoyMyw0NDpSLDQ1OnosNDY6Vyw0NzpldCw0ODpzdCw0OTphdCw1MDpidCw1MTptdCw1Mjp5dCw1MzpmdCw1NDp1dCw1NTp2dCw1NjpYLDU3OnB0LDU4OlUsNTk6VHQsNjA6bnQsNjE6SXQsNjI6T3QsNjM6QnQsNjQ6RXQsNjU6Wiw2NjpDdCw2Nzp4dCw2ODpIdCw2OTpMZSw3MDpGdCw3MTpnbiw3MjpTZSw3MzptZSw3NDpWZX0sezEzOjcwLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmEsMjM6ZiwyNDpwLDI2OncsMjg6bSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OkUsMzc6XywzODpBLDM5OkksNDA6Qiw0MTpOLDQzOjIzLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0LDUxOm10LDUyOnl0LDUzOmZ0LDU0OnV0LDU1OnZ0LDU2OlgsNTc6cHQsNTg6VSw1OTpUdCw2MDpudCw2MTpJdCw2MjpPdCw2MzpCdCw2NDpFdCw2NTpaLDY2OkN0LDY3Onh0LDY4Okh0LDY5OkxlLDcwOkZ0LDcxOmduLDcyOlNlLDczOm1lLDc0OlZlfSx7MTM6NzEsMTk6MjAsMjA6MjEsMjE6MjIsMjI6YSwyMzpmLDI0OnAsMjY6dywyODptLDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6RSwzNzpfLDM4OkEsMzk6SSw0MDpCLDQxOk4sNDM6MjMsNDQ6Uiw0NTp6LDQ2OlcsNDc6ZXQsNDg6c3QsNDk6YXQsNTA6YnQsNTE6bXQsNTI6eXQsNTM6ZnQsNTQ6dXQsNTU6dnQsNTY6WCw1NzpwdCw1ODpVLDU5OlR0LDYwOm50LDYxOkl0LDYyOk90LDYzOkJ0LDY0OkV0LDY1OlosNjY6Q3QsNjc6eHQsNjg6SHQsNjk6TGUsNzA6RnQsNzE6Z24sNzI6U2UsNzM6bWUsNzQ6VmV9LHsxMzo3MiwxOToyMCwyMDoyMSwyMToyMiwyMjphLDIzOmYsMjQ6cCwyNjp3LDI4Om0sMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjpFLDM3Ol8sMzg6QSwzOTpJLDQwOkIsNDE6Tiw0MzoyMyw0NDpSLDQ1OnosNDY6Vyw0NzpldCw0ODpzdCw0OTphdCw1MDpidCw1MTptdCw1Mjp5dCw1MzpmdCw1NDp1dCw1NTp2dCw1NjpYLDU3OnB0LDU4OlUsNTk6VHQsNjA6bnQsNjE6SXQsNjI6T3QsNjM6QnQsNjQ6RXQsNjU6Wiw2NjpDdCw2Nzp4dCw2ODpIdCw2OTpMZSw3MDpGdCw3MTpnbiw3MjpTZSw3MzptZSw3NDpWZX0sezEzOjczLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmEsMjM6ZiwyNDpwLDI2OncsMjg6bSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OkUsMzc6XywzODpBLDM5OkksNDA6Qiw0MTpOLDQzOjIzLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0LDUxOm10LDUyOnl0LDUzOmZ0LDU0OnV0LDU1OnZ0LDU2OlgsNTc6cHQsNTg6VSw1OTpUdCw2MDpudCw2MTpJdCw2MjpPdCw2MzpCdCw2NDpFdCw2NTpaLDY2OkN0LDY3Onh0LDY4Okh0LDY5OkxlLDcwOkZ0LDcxOmduLDcyOlNlLDczOm1lLDc0OlZlfSx7MTQ6WzEsNzRdfSxpKFllLFsyLDEzXSx7NDM6MjMsMjk6NDksMzA6NjEsMzI6NjIsMjA6NzUsMzQ6YiwzNjpFLDM3Ol8sMzg6QSwzOTpJLDQwOkIsNDE6Tiw0NDpSLDQ1OnosNDY6Vyw0NzpldCw0ODpzdCw0OTphdCw1MDpidCw1MTptdCw1Mjp5dCw1MzpmdCw1NDp1dCw1NTp2dCw1NjpYLDU3OnB0LDU4OlUsNTk6VHQsNjA6bnQsNjE6SXQsNjI6T3QsNjM6QnQsNjQ6RXQsNjU6Wiw2NjpDdCw2Nzp4dCw2ODpIdCw2OTpMZSw3MDpGdCw3MTpnbiw3MjpTZSw3MzptZSw3NDpWZX0pLGkoWWUsWzIsMTRdKSxpKGNlLFsyLDE2XSx7MTI6WzEsNzZdfSksaShZZSxbMiwzNl0sezEyOlsxLDc3XX0pLGkoa2UsWzIsMTldKSxpKGtlLFsyLDIwXSksezI1OlsxLDc4XX0sezI3OlsxLDc5XX0saShrZSxbMiwyM10pLHszNTo4MCw3NTo4MSw3Njp6dCw3NzpyZSw3OTpzZSw4MDpQZX0sezM1Ojg2LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6ODcsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNTo4OCw3NTo4MSw3Njp6dCw3NzpyZSw3OTpzZSw4MDpQZX0sezM1Ojg5LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6OTAsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNTo5MSw3NTo4MSw3Njp6dCw3NzpyZSw3OTpzZSw4MDpQZX0sezM1OjkyLDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6OTMsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNTo5NCw3NTo4MSw3Njp6dCw3NzpyZSw3OTpzZSw4MDpQZX0sezM1Ojk1LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6OTYsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNTo5Nyw3NTo4MSw3Njp6dCw3NzpyZSw3OTpzZSw4MDpQZX0sezM1Ojk4LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6OTksNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMDAsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMDEsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMDIsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMDMsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMDQsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LGkodGUsWzIsNTldKSx7MzU6MTA1LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTA2LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTA3LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTA4LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTA5LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTEwLDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTExLDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTEyLDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTEzLDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTE0LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MzU6MTE1LDc1OjgxLDc2Onp0LDc3OnJlLDc5OnNlLDgwOlBlfSx7MjA6MTE2LDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6RSwzNzpfLDM4OkEsMzk6SSw0MDpCLDQxOk4sNDM6MjMsNDQ6Uiw0NTp6LDQ2OlcsNDc6ZXQsNDg6c3QsNDk6YXQsNTA6YnQsNTE6bXQsNTI6eXQsNTM6ZnQsNTQ6dXQsNTU6dnQsNTY6WCw1NzpwdCw1ODpVLDU5OlR0LDYwOm50LDYxOkl0LDYyOk90LDYzOkJ0LDY0OkV0LDY1OlosNjY6Q3QsNjc6eHQsNjg6SHQsNjk6TGUsNzA6RnQsNzE6Z24sNzI6U2UsNzM6bWUsNzQ6VmV9LHsxMjpbMSwxMThdLDMzOlsxLDExN119LHszNToxMTksNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMjAsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMjEsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMjIsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMjMsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMjQsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHszNToxMjUsNzU6ODEsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9LHsxNDpbMSwxMjZdfSx7MTQ6WzEsMTI3XX0sezE0OlsxLDEyOF19LHsxNDpbMSwxMjldfSx7MTpbMiw4XX0saShZZSxbMiwxNV0pLGkoY2UsWzIsMTddLHsyMToyMiwxOToxMzAsMjI6YSwyMzpmLDI0OnAsMjY6dywyODptfSksaShZZSxbMiwzN10sezE5OjIwLDIwOjIxLDIxOjIyLDQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDEzOjEzMSwyMjphLDIzOmYsMjQ6cCwyNjp3LDI4Om0sMzQ6YiwzNjpFLDM3Ol8sMzg6QSwzOTpJLDQwOkIsNDE6Tiw0NDpSLDQ1OnosNDY6Vyw0NzpldCw0ODpzdCw0OTphdCw1MDpidCw1MTptdCw1Mjp5dCw1MzpmdCw1NDp1dCw1NTp2dCw1NjpYLDU3OnB0LDU4OlUsNTk6VHQsNjA6bnQsNjE6SXQsNjI6T3QsNjM6QnQsNjQ6RXQsNjU6Wiw2NjpDdCw2Nzp4dCw2ODpIdCw2OTpMZSw3MDpGdCw3MTpnbiw3MjpTZSw3MzptZSw3NDpWZX0pLGkoa2UsWzIsMjFdKSxpKGtlLFsyLDIyXSksaSh0ZSxbMiwzOV0pLGkoTWUsWzIsNzFdLHs3NTo4MSwzNToxMzIsNzY6enQsNzc6cmUsNzk6c2UsODA6UGV9KSxpKGRlLFsyLDczXSksezc4OlsxLDEzM119LGkoZGUsWzIsNzVdKSxpKGRlLFsyLDc2XSksaSh0ZSxbMiw0MF0pLGkodGUsWzIsNDFdKSxpKHRlLFsyLDQyXSksaSh0ZSxbMiw0M10pLGkodGUsWzIsNDRdKSxpKHRlLFsyLDQ1XSksaSh0ZSxbMiw0Nl0pLGkodGUsWzIsNDddKSxpKHRlLFsyLDQ4XSksaSh0ZSxbMiw0OV0pLGkodGUsWzIsNTBdKSxpKHRlLFsyLDUxXSksaSh0ZSxbMiw1Ml0pLGkodGUsWzIsNTNdKSxpKHRlLFsyLDU0XSksaSh0ZSxbMiw1NV0pLGkodGUsWzIsNTZdKSxpKHRlLFsyLDU3XSksaSh0ZSxbMiw1OF0pLGkodGUsWzIsNjBdKSxpKHRlLFsyLDYxXSksaSh0ZSxbMiw2Ml0pLGkodGUsWzIsNjNdKSxpKHRlLFsyLDY0XSksaSh0ZSxbMiw2NV0pLGkodGUsWzIsNjZdKSxpKHRlLFsyLDY3XSksaSh0ZSxbMiw2OF0pLGkodGUsWzIsNjldKSxpKHRlLFsyLDcwXSksezMxOjEzNCw0MjpbMSwxMzVdfSx7MTI6WzEsMTM2XX0sezMzOlsxLDEzN119LGkob24sWzIsMjhdKSxpKG9uLFsyLDI5XSksaShvbixbMiwzMF0pLGkob24sWzIsMzFdKSxpKG9uLFsyLDMyXSksaShvbixbMiwzM10pLGkob24sWzIsMzRdKSx7MTpbMiw5XX0sezE6WzIsMTBdfSx7MTpbMiwxMV19LHsxOlsyLDEyXX0saShjZSxbMiwxOF0pLGkoWWUsWzIsMzhdKSxpKE1lLFsyLDcyXSksaShkZSxbMiw3NF0pLGkodGUsWzIsMjRdKSxpKHRlLFsyLDM1XSksaShuaSxbMiwyNV0pLGkobmksWzIsMjZdLHsxMjpbMSwxMzhdfSksaShuaSxbMiwyN10pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSwzOlsyLDJdLDQ6WzIsN10sNTpbMiwzXSw2OlsyLDRdLDc6WzIsNV0sODpbMiw2XSw3NDpbMiw4XSwxMjY6WzIsOV0sMTI3OlsyLDEwXSwxMjg6WzIsMTFdLDEyOTpbMiwxMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oRXIsWG4pe2lmKFhuLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoRXIpO2Vsc2V7dmFyIGRpPW5ldyBFcnJvcihFcik7dGhyb3cgZGkuaGFzaD1YbixkaX19LHBhcnNlOmZ1bmN0aW9uKEVyKXt2YXIgWG49dGhpcyxkaT1bMF0sRWU9W10sS249W251bGxdLEhlPVtdLFRpPXRoaXMudGFibGUscG49IiIsRXM9MCxxYT0wLE1hPTIsR3M9MSxQbz1IZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSx2cz1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHJ1PXt5eTp7fX07Zm9yKHZhciB6cyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHpzKSYmKHJ1Lnl5W3pzXT10aGlzLnl5W3pzXSk7dnMuc2V0SW5wdXQoRXIscnUueXkpLHJ1Lnl5LmxleGVyPXZzLHJ1Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiB2cy55eWxsb2M+InUiJiYodnMueXlsbG9jPXt9KTt2YXIgRHU9dnMueXlsbG9jO0hlLnB1c2goRHUpO3ZhciBwbT12cy5vcHRpb25zJiZ2cy5vcHRpb25zLnJhbmdlczt0eXBlb2YgcnUueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9cnUueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gdXcoKXt2YXIgRGw7cmV0dXJuIERsPUVlLnBvcCgpfHx2cy5sZXgoKXx8R3MsdHlwZW9mIERsIT0ibnVtYmVyIiYmKERsIGluc3RhbmNlb2YgQXJyYXkmJihFZT1EbCxEbD1FZS5wb3AoKSksRGw9WG4uc3ltYm9sc19bRGxdfHxEbCksRGx9Zm9yKHZhciBXdSx0aCxGYSxNbCxoYT17fSxiYyxDYyxwYSxEYTs7KXtpZih0aD1kaVtkaS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t0aF0/RmE9dGhpcy5kZWZhdWx0QWN0aW9uc1t0aF06KChXdT09PW51bGx8fHR5cGVvZiBXdT4idSIpJiYoV3U9dXcoKSksRmE9VGlbdGhdJiZUaVt0aF1bV3VdKSx0eXBlb2YgRmE+InUifHwhRmEubGVuZ3RofHwhRmFbMF0pe3ZhciBIYT0iIjtEYT1bXTtmb3IoYmMgaW4gVGlbdGhdKXRoaXMudGVybWluYWxzX1tiY10mJmJjPk1hJiZEYS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bYmNdKyInIik7dnMuc2hvd1Bvc2l0aW9uP0hhPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEVzKzEpK2A6CmArdnMuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtEYS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1d1XXx8V3UpKyInIjpIYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhFcysxKSsiOiBVbmV4cGVjdGVkICIrKFd1PT1Hcz8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tXdV18fFd1KSsiJyIpLHRoaXMucGFyc2VFcnJvcihIYSx7dGV4dDp2cy5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bV3VdfHxXdSxsaW5lOnZzLnl5bGluZW5vLGxvYzpEdSxleHBlY3RlZDpEYX0pfWlmKEZhWzBdaW5zdGFuY2VvZiBBcnJheSYmRmEubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit0aCsiLCB0b2tlbjogIitXdSk7c3dpdGNoKEZhWzBdKXtjYXNlIDE6ZGkucHVzaChXdSksS24ucHVzaCh2cy55eXRleHQpLEhlLnB1c2godnMueXlsbG9jKSxkaS5wdXNoKEZhWzFdKSxXdT1udWxsLHFhPXZzLnl5bGVuZyxwbj12cy55eXRleHQsRXM9dnMueXlsaW5lbm8sRHU9dnMueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihDYz10aGlzLnByb2R1Y3Rpb25zX1tGYVsxXV1bMV0saGEuJD1LbltLbi5sZW5ndGgtQ2NdLGhhLl8kPXtmaXJzdF9saW5lOkhlW0hlLmxlbmd0aC0oQ2N8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpIZVtIZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpIZVtIZS5sZW5ndGgtKENjfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkhlW0hlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0scG0mJihoYS5fJC5yYW5nZT1bSGVbSGUubGVuZ3RoLShDY3x8MSldLnJhbmdlWzBdLEhlW0hlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLE1sPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShoYSxbcG4scWEsRXMscnUueXksRmFbMV0sS24sSGVdLmNvbmNhdChQbykpLHR5cGVvZiBNbDwidSIpcmV0dXJuIE1sO0NjJiYoZGk9ZGkuc2xpY2UoMCwtMSpDYyoyKSxLbj1Lbi5zbGljZSgwLC0xKkNjKSxIZT1IZS5zbGljZSgwLC0xKkNjKSksZGkucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tGYVsxXV1bMF0pLEtuLnB1c2goaGEuJCksSGUucHVzaChoYS5fJCkscGE9VGlbZGlbZGkubGVuZ3RoLTJdXVtkaVtkaS5sZW5ndGgtMV1dLGRpLnB1c2gocGEpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSx3cz1mdW5jdGlvbigpe3ZhciBYaT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihYbixkaSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihYbixkaSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoWG4pfSxzZXRJbnB1dDpmdW5jdGlvbihFcixYbil7cmV0dXJuIHRoaXMueXk9WG58fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUVyLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBFcj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9RXIsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUVyLHRoaXMubWF0Y2hlZCs9RXI7dmFyIFhuPUVyLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gWG4/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEVyfSx1bnB1dDpmdW5jdGlvbihFcil7dmFyIFhuPUVyLmxlbmd0aCxkaT1Fci5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUVyK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1YbiksdGhpcy5vZmZzZXQtPVhuO3ZhciBFZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxkaS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWRpLmxlbmd0aC0xKTt2YXIgS249dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmRpPyhkaS5sZW5ndGg9PT1FZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0VlW0VlLmxlbmd0aC1kaS5sZW5ndGhdLmxlbmd0aC1kaVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLVhufSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0tuWzBdLEtuWzBdK3RoaXMueXlsZW5nLVhuXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oRXIpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShFcikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRXI9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihFci5sZW5ndGg+MjA/Ii4uLiI6IiIpK0VyLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIEVyPXRoaXMubWF0Y2g7cmV0dXJuIEVyLmxlbmd0aDwyMCYmKEVyKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1Fci5sZW5ndGgpKSwoRXIuc3Vic3RyKDAsMjApKyhFci5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEVyPXRoaXMucGFzdElucHV0KCksWG49bmV3IEFycmF5KEVyLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEVyK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtYbisiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oRXIsWG4pe3ZhciBkaSxFZSxLbjtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoS249e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoS24ueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksRWU9RXJbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEVlJiYodGhpcy55eWxpbmVubys9RWUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46RWU/RWVbRWUubGVuZ3RoLTFdLmxlbmd0aC1FZVtFZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitFclswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1FclswXSx0aGlzLm1hdGNoKz1FclswXSx0aGlzLm1hdGNoZXM9RXIsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoRXJbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUVyWzBdLGRpPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFhuLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGRpKXJldHVybiBkaTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgSGUgaW4gS24pdGhpc1tIZV09S25bSGVdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEVyLFhuLGRpLEVlO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEtuPXRoaXMuX2N1cnJlbnRSdWxlcygpLEhlPTA7SGU8S24ubGVuZ3RoO0hlKyspaWYoZGk9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tLbltIZV1dKSxkaSYmKCFYbnx8ZGlbMF0ubGVuZ3RoPlhuWzBdLmxlbmd0aCkpe2lmKFhuPWRpLEVlPUhlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEVyPXRoaXMudGVzdF9tYXRjaChkaSxLbltIZV0pLEVyIT09ITEpcmV0dXJuIEVyO2lmKHRoaXMuX2JhY2t0cmFjayl7WG49ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gWG4/KEVyPXRoaXMudGVzdF9tYXRjaChYbixLbltFZV0pLEVyIT09ITE/RXI6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBYbj10aGlzLm5leHQoKTtyZXR1cm4gWG58fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKFhuKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goWG4pfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBYbj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBYbj4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKFhuKXtyZXR1cm4gWG49dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhYbnx8MCksWG4+PTA/dGhpcy5jb25kaXRpb25TdGFja1tYbl06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oWG4pe3RoaXMuYmVnaW4oWG4pfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFhuLGRpLEVlLEtuKXtzd2l0Y2goRWUpe2Nhc2UgMDpyZXR1cm4gNjtjYXNlIDE6cmV0dXJuIDc7Y2FzZSAyOnJldHVybiA4O2Nhc2UgMzpyZXR1cm4gOTtjYXNlIDQ6cmV0dXJuIDIyO2Nhc2UgNTpyZXR1cm4gMjM7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyNDtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDI2O2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpjO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIDEyO2Nhc2UgMTY6YnJlYWs7Y2FzZSAxNzpyZXR1cm4gMTE7Y2FzZSAxODpyZXR1cm4gMTU7Y2FzZSAxOTpyZXR1cm4gMTY7Y2FzZSAyMDpyZXR1cm4gMTc7Y2FzZSAyMTpyZXR1cm4gMTg7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigicGVyc29uX2V4dCIpLDQ1O2Nhc2UgMjM6cmV0dXJuIHRoaXMuYmVnaW4oInBlcnNvbiIpLDQ0O2Nhc2UgMjQ6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHRfcXVldWUiKSw1MTtjYXNlIDI1OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0X2RiIiksNTA7Y2FzZSAyNjpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dCIpLDQ5O2Nhc2UgMjc6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9xdWV1ZSIpLDQ4O2Nhc2UgMjg6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9kYiIpLDQ3O2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbSIpLDQ2O2Nhc2UgMzA6cmV0dXJuIHRoaXMuYmVnaW4oImJvdW5kYXJ5IiksMzc7Y2FzZSAzMTpyZXR1cm4gdGhpcy5iZWdpbigiZW50ZXJwcmlzZV9ib3VuZGFyeSIpLDM0O2Nhc2UgMzI6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9ib3VuZGFyeSIpLDM2O2Nhc2UgMzM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHRfcXVldWUiKSw1NztjYXNlIDM0OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0X2RiIiksNTY7Y2FzZSAzNTpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dCIpLDU1O2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9xdWV1ZSIpLDU0O2Nhc2UgMzc6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9kYiIpLDUzO2Nhc2UgMzg6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lciIpLDUyO2Nhc2UgMzk6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9ib3VuZGFyeSIpLDM4O2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHRfcXVldWUiKSw2MztjYXNlIDQxOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0X2RiIiksNjI7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dCIpLDYxO2Nhc2UgNDM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9xdWV1ZSIpLDYwO2Nhc2UgNDQ6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9kYiIpLDU5O2Nhc2UgNDU6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudCIpLDU4O2Nhc2UgNDY6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGUiKSwzOTtjYXNlIDQ3OnJldHVybiB0aGlzLmJlZ2luKCJub2RlIiksMzk7Y2FzZSA0ODpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9sIiksNDA7Y2FzZSA0OTpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9yIiksNDE7Y2FzZSA1MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsIiksNjQ7Y2FzZSA1MTpyZXR1cm4gdGhpcy5iZWdpbigiYmlyZWwiKSw2NTtjYXNlIDUyOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfdSIpLDY2O2Nhc2UgNTM6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF91IiksNjY7Y2FzZSA1NDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2QiKSw2NztjYXNlIDU1OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfZCIpLDY3O2Nhc2UgNTY6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9sIiksNjg7Y2FzZSA1NzpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2wiKSw2ODtjYXNlIDU4OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfciIpLDY5O2Nhc2UgNTk6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9yIiksNjk7Y2FzZSA2MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2IiKSw3MDtjYXNlIDYxOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfaW5kZXgiKSw3MTtjYXNlIDYyOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfZWxfc3R5bGUiKSw3MjtjYXNlIDYzOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfcmVsX3N0eWxlIiksNzM7Y2FzZSA2NDpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX2xheW91dF9jb25maWciKSw3NDtjYXNlIDY1OnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDY2OnJldHVybiB0aGlzLmJlZ2luKCJhdHRyaWJ1dGUiKSwiQVRUUklCVVRFX0VNUFRZIjtjYXNlIDY3OnRoaXMuYmVnaW4oImF0dHJpYnV0ZSIpO2JyZWFrO2Nhc2UgNjg6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY5OnJldHVybiA4MDtjYXNlIDcwOmJyZWFrO2Nhc2UgNzE6cmV0dXJuIDgwO2Nhc2UgNzI6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA3Mzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3NDpyZXR1cm4iU1RSIjtjYXNlIDc1OnRoaXMuYmVnaW4oInN0cmluZ19rdiIpO2JyZWFrO2Nhc2UgNzY6cmV0dXJuIHRoaXMuYmVnaW4oInN0cmluZ19rdl9rZXkiKSwiU1RSX0tFWSI7Y2FzZSA3Nzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigic3RyaW5nX2t2X3ZhbHVlIik7YnJlYWs7Y2FzZSA3ODpyZXR1cm4iU1RSX1ZBTFVFIjtjYXNlIDc5OnRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4MDpyZXR1cm4iU1RSIjtjYXNlIDgxOnJldHVybiJMQlJBQ0UiO2Nhc2UgODI6cmV0dXJuIlJCUkFDRSI7Y2FzZSA4MzpyZXR1cm4iU1BBQ0UiO2Nhc2UgODQ6cmV0dXJuIkVPTCI7Y2FzZSA4NTpyZXR1cm4gMTR9fSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzp0aXRsZVxzW14jXG47XSspLywvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86QzRDb250ZXh0XGIpLywvXig/OkM0Q29udGFpbmVyXGIpLywvXig/OkM0Q29tcG9uZW50XGIpLywvXig/OkM0RHluYW1pY1xiKS8sL14oPzpDNERlcGxveW1lbnRcYikvLC9eKD86UGVyc29uX0V4dFxiKS8sL14oPzpQZXJzb25cYikvLC9eKD86U3lzdGVtUXVldWVfRXh0XGIpLywvXig/OlN5c3RlbURiX0V4dFxiKS8sL14oPzpTeXN0ZW1fRXh0XGIpLywvXig/OlN5c3RlbVF1ZXVlXGIpLywvXig/OlN5c3RlbURiXGIpLywvXig/OlN5c3RlbVxiKS8sL14oPzpCb3VuZGFyeVxiKS8sL14oPzpFbnRlcnByaXNlX0JvdW5kYXJ5XGIpLywvXig/OlN5c3RlbV9Cb3VuZGFyeVxiKS8sL14oPzpDb250YWluZXJRdWV1ZV9FeHRcYikvLC9eKD86Q29udGFpbmVyRGJfRXh0XGIpLywvXig/OkNvbnRhaW5lcl9FeHRcYikvLC9eKD86Q29udGFpbmVyUXVldWVcYikvLC9eKD86Q29udGFpbmVyRGJcYikvLC9eKD86Q29udGFpbmVyXGIpLywvXig/OkNvbnRhaW5lcl9Cb3VuZGFyeVxiKS8sL14oPzpDb21wb25lbnRRdWV1ZV9FeHRcYikvLC9eKD86Q29tcG9uZW50RGJfRXh0XGIpLywvXig/OkNvbXBvbmVudF9FeHRcYikvLC9eKD86Q29tcG9uZW50UXVldWVcYikvLC9eKD86Q29tcG9uZW50RGJcYikvLC9eKD86Q29tcG9uZW50XGIpLywvXig/OkRlcGxveW1lbnRfTm9kZVxiKS8sL14oPzpOb2RlXGIpLywvXig/Ok5vZGVfTFxiKS8sL14oPzpOb2RlX1JcYikvLC9eKD86UmVsXGIpLywvXig/OkJpUmVsXGIpLywvXig/OlJlbF9VcFxiKS8sL14oPzpSZWxfVVxiKS8sL14oPzpSZWxfRG93blxiKS8sL14oPzpSZWxfRFxiKS8sL14oPzpSZWxfTGVmdFxiKS8sL14oPzpSZWxfTFxiKS8sL14oPzpSZWxfUmlnaHRcYikvLC9eKD86UmVsX1JcYikvLC9eKD86UmVsX0JhY2tcYikvLC9eKD86UmVsSW5kZXhcYikvLC9eKD86VXBkYXRlRWxlbWVudFN0eWxlXGIpLywvXig/OlVwZGF0ZVJlbFN0eWxlXGIpLywvXig/OlVwZGF0ZUxheW91dENvbmZpZ1xiKS8sL14oPzokKS8sL14oPzpbKF1bIF0qWyxdKS8sL14oPzpbKF0pLywvXig/OlspXSkvLC9eKD86LCwpLywvXig/OiwpLywvXig/OlsgXSpbIl1bIl0pLywvXig/OlsgXSpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsgXSpbXCRdKS8sL14oPzpbXj1dKikvLC9eKD86Wz1dWyBdKlsiXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86W14sXSspLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86W1xzXSspLywvXig/OltcblxyXSspLywvXig/OiQpL10sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzldLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbN10saW5jbHVzaXZlOiExfSxzdHJpbmdfa3ZfdmFsdWU6e3J1bGVzOls3OCw3OV0saW5jbHVzaXZlOiExfSxzdHJpbmdfa3Zfa2V5OntydWxlczpbNzddLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2OntydWxlczpbNzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNzMsNzRdLGluY2x1c2l2ZTohMX0sYXR0cmlidXRlOntydWxlczpbNjgsNjksNzAsNzEsNzIsNzUsODBdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2xheW91dF9jb25maWc6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSx1cGRhdGVfcmVsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2VsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9sOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2Q6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfdTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9iaTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxyZWw6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX3I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX2w6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0saW5kZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0scmVsX2luZGV4OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dF9xdWV1ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJpcmVsOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2JvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sZW50ZXJwcmlzZV9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX3F1ZXVlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scGVyc29uX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHBlcnNvbjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsODEsODIsODMsODQsODVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gWGl9KCk7S3MubGV4ZXI9d3M7ZnVuY3Rpb24gZm8oKXt0aGlzLnl5PXt9fXJldHVybiBmby5wcm90b3R5cGU9S3MsS3MuUGFyc2VyPWZvLG5ldyBmb30oKTtYVy5wYXJzZXI9WFc7Y29uc3QgZ0RlPVhXO2xldCBhbT1bXSxmaz1bIiJdLHdnPSJnbG9iYWwiLG9tPSIiLHAzPVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSxsRj1bXSxGZHQ9IiIsTmR0PSExLFFXPTQsWlc9Mjt2YXIgd1B0O2NvbnN0IHBEZT1mdW5jdGlvbigpe3JldHVybiB3UHR9LGJEZT1mdW5jdGlvbihpKXt3UHQ9UTEoaSxPZSgpKX0sd0RlPWZ1bmN0aW9uKGksYSxmLHAsdyxtLGIsRSxfKXtpZihpPT1udWxsfHxhPT09dm9pZCAwfHxhPT09bnVsbHx8Zj09PXZvaWQgMHx8Zj09PW51bGx8fHA9PT12b2lkIDB8fHA9PT1udWxsKXJldHVybjtsZXQgQT17fTtjb25zdCBJPWxGLmZpbmQoQj0+Qi5mcm9tPT09YSYmQi50bz09PWYpO2lmKEk/QT1JOmxGLnB1c2goQSksQS50eXBlPWksQS5mcm9tPWEsQS50bz1mLEEubGFiZWw9e3RleHQ6cH0sdz09bnVsbClBLnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiB3PT0ib2JqZWN0Iil7bGV0W0IsTl09T2JqZWN0LmVudHJpZXModylbMF07QVtCXT17dGV4dDpOfX1lbHNlIEEudGVjaG49e3RleHQ6d307aWYobT09bnVsbClBLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBtPT0ib2JqZWN0Iil7bGV0W0IsTl09T2JqZWN0LmVudHJpZXMobSlbMF07QVtCXT17dGV4dDpOfX1lbHNlIEEuZGVzY3I9e3RleHQ6bX07aWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbQixOXT1PYmplY3QuZW50cmllcyhiKVswXTtBW0JdPU59ZWxzZSBBLnNwcml0ZT1iO2lmKHR5cGVvZiBFPT0ib2JqZWN0Iil7bGV0W0IsTl09T2JqZWN0LmVudHJpZXMoRSlbMF07QVtCXT1OfWVsc2UgQS50YWdzPUU7aWYodHlwZW9mIF89PSJvYmplY3QiKXtsZXRbQixOXT1PYmplY3QuZW50cmllcyhfKVswXTtBW0JdPU59ZWxzZSBBLmxpbms9XztBLndyYXA9ZGsoKX0sdkRlPWZ1bmN0aW9uKGksYSxmLHAsdyxtLGIpe2lmKGE9PT1udWxsfHxmPT09bnVsbClyZXR1cm47bGV0IEU9e307Y29uc3QgXz1hbS5maW5kKEE9PkEuYWxpYXM9PT1hKTtpZihfJiZhPT09Xy5hbGlhcz9FPV86KEUuYWxpYXM9YSxhbS5wdXNoKEUpKSxmPT1udWxsP0UubGFiZWw9e3RleHQ6IiJ9OkUubGFiZWw9e3RleHQ6Zn0scD09bnVsbClFLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0EsSV09T2JqZWN0LmVudHJpZXMocClbMF07RVtBXT17dGV4dDpJfX1lbHNlIEUuZGVzY3I9e3RleHQ6cH07aWYodHlwZW9mIHc9PSJvYmplY3QiKXtsZXRbQSxJXT1PYmplY3QuZW50cmllcyh3KVswXTtFW0FdPUl9ZWxzZSBFLnNwcml0ZT13O2lmKHR5cGVvZiBtPT0ib2JqZWN0Iil7bGV0W0EsSV09T2JqZWN0LmVudHJpZXMobSlbMF07RVtBXT1JfWVsc2UgRS50YWdzPW07aWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbQSxJXT1PYmplY3QuZW50cmllcyhiKVswXTtFW0FdPUl9ZWxzZSBFLmxpbms9YjtFLnR5cGVDNFNoYXBlPXt0ZXh0Oml9LEUucGFyZW50Qm91bmRhcnk9d2csRS53cmFwPWRrKCl9LG1EZT1mdW5jdGlvbihpLGEsZixwLHcsbSxiLEUpe2lmKGE9PT1udWxsfHxmPT09bnVsbClyZXR1cm47bGV0IF89e307Y29uc3QgQT1hbS5maW5kKEk9PkkuYWxpYXM9PT1hKTtpZihBJiZhPT09QS5hbGlhcz9fPUE6KF8uYWxpYXM9YSxhbS5wdXNoKF8pKSxmPT1udWxsP18ubGFiZWw9e3RleHQ6IiJ9Ol8ubGFiZWw9e3RleHQ6Zn0scD09bnVsbClfLnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXMocClbMF07X1tJXT17dGV4dDpCfX1lbHNlIF8udGVjaG49e3RleHQ6cH07aWYodz09bnVsbClfLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiB3PT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXModylbMF07X1tJXT17dGV4dDpCfX1lbHNlIF8uZGVzY3I9e3RleHQ6d307aWYodHlwZW9mIG09PSJvYmplY3QiKXtsZXRbSSxCXT1PYmplY3QuZW50cmllcyhtKVswXTtfW0ldPUJ9ZWxzZSBfLnNwcml0ZT1tO2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXMoYilbMF07X1tJXT1CfWVsc2UgXy50YWdzPWI7aWYodHlwZW9mIEU9PSJvYmplY3QiKXtsZXRbSSxCXT1PYmplY3QuZW50cmllcyhFKVswXTtfW0ldPUJ9ZWxzZSBfLmxpbms9RTtfLndyYXA9ZGsoKSxfLnR5cGVDNFNoYXBlPXt0ZXh0Oml9LF8ucGFyZW50Qm91bmRhcnk9d2d9LHlEZT1mdW5jdGlvbihpLGEsZixwLHcsbSxiLEUpe2lmKGE9PT1udWxsfHxmPT09bnVsbClyZXR1cm47bGV0IF89e307Y29uc3QgQT1hbS5maW5kKEk9PkkuYWxpYXM9PT1hKTtpZihBJiZhPT09QS5hbGlhcz9fPUE6KF8uYWxpYXM9YSxhbS5wdXNoKF8pKSxmPT1udWxsP18ubGFiZWw9e3RleHQ6IiJ9Ol8ubGFiZWw9e3RleHQ6Zn0scD09bnVsbClfLnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXMocClbMF07X1tJXT17dGV4dDpCfX1lbHNlIF8udGVjaG49e3RleHQ6cH07aWYodz09bnVsbClfLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiB3PT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXModylbMF07X1tJXT17dGV4dDpCfX1lbHNlIF8uZGVzY3I9e3RleHQ6d307aWYodHlwZW9mIG09PSJvYmplY3QiKXtsZXRbSSxCXT1PYmplY3QuZW50cmllcyhtKVswXTtfW0ldPUJ9ZWxzZSBfLnNwcml0ZT1tO2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXMoYilbMF07X1tJXT1CfWVsc2UgXy50YWdzPWI7aWYodHlwZW9mIEU9PSJvYmplY3QiKXtsZXRbSSxCXT1PYmplY3QuZW50cmllcyhFKVswXTtfW0ldPUJ9ZWxzZSBfLmxpbms9RTtfLndyYXA9ZGsoKSxfLnR5cGVDNFNoYXBlPXt0ZXh0Oml9LF8ucGFyZW50Qm91bmRhcnk9d2d9LHhEZT1mdW5jdGlvbihpLGEsZixwLHcpe2lmKGk9PT1udWxsfHxhPT09bnVsbClyZXR1cm47bGV0IG09e307Y29uc3QgYj1wMy5maW5kKEU9PkUuYWxpYXM9PT1pKTtpZihiJiZpPT09Yi5hbGlhcz9tPWI6KG0uYWxpYXM9aSxwMy5wdXNoKG0pKSxhPT1udWxsP20ubGFiZWw9e3RleHQ6IiJ9Om0ubGFiZWw9e3RleHQ6YX0sZj09bnVsbCltLnR5cGU9e3RleHQ6InN5c3RlbSJ9O2Vsc2UgaWYodHlwZW9mIGY9PSJvYmplY3QiKXtsZXRbRSxfXT1PYmplY3QuZW50cmllcyhmKVswXTttW0VdPXt0ZXh0Ol99fWVsc2UgbS50eXBlPXt0ZXh0OmZ9O2lmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0UsX109T2JqZWN0LmVudHJpZXMocClbMF07bVtFXT1ffWVsc2UgbS50YWdzPXA7aWYodHlwZW9mIHc9PSJvYmplY3QiKXtsZXRbRSxfXT1PYmplY3QuZW50cmllcyh3KVswXTttW0VdPV99ZWxzZSBtLmxpbms9dzttLnBhcmVudEJvdW5kYXJ5PXdnLG0ud3JhcD1kaygpLG9tPXdnLHdnPWksZmsucHVzaChvbSl9LGtEZT1mdW5jdGlvbihpLGEsZixwLHcpe2lmKGk9PT1udWxsfHxhPT09bnVsbClyZXR1cm47bGV0IG09e307Y29uc3QgYj1wMy5maW5kKEU9PkUuYWxpYXM9PT1pKTtpZihiJiZpPT09Yi5hbGlhcz9tPWI6KG0uYWxpYXM9aSxwMy5wdXNoKG0pKSxhPT1udWxsP20ubGFiZWw9e3RleHQ6IiJ9Om0ubGFiZWw9e3RleHQ6YX0sZj09bnVsbCltLnR5cGU9e3RleHQ6ImNvbnRhaW5lciJ9O2Vsc2UgaWYodHlwZW9mIGY9PSJvYmplY3QiKXtsZXRbRSxfXT1PYmplY3QuZW50cmllcyhmKVswXTttW0VdPXt0ZXh0Ol99fWVsc2UgbS50eXBlPXt0ZXh0OmZ9O2lmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0UsX109T2JqZWN0LmVudHJpZXMocClbMF07bVtFXT1ffWVsc2UgbS50YWdzPXA7aWYodHlwZW9mIHc9PSJvYmplY3QiKXtsZXRbRSxfXT1PYmplY3QuZW50cmllcyh3KVswXTttW0VdPV99ZWxzZSBtLmxpbms9dzttLnBhcmVudEJvdW5kYXJ5PXdnLG0ud3JhcD1kaygpLG9tPXdnLHdnPWksZmsucHVzaChvbSl9LEVEZT1mdW5jdGlvbihpLGEsZixwLHcsbSxiLEUpe2lmKGE9PT1udWxsfHxmPT09bnVsbClyZXR1cm47bGV0IF89e307Y29uc3QgQT1wMy5maW5kKEk9PkkuYWxpYXM9PT1hKTtpZihBJiZhPT09QS5hbGlhcz9fPUE6KF8uYWxpYXM9YSxwMy5wdXNoKF8pKSxmPT1udWxsP18ubGFiZWw9e3RleHQ6IiJ9Ol8ubGFiZWw9e3RleHQ6Zn0scD09bnVsbClfLnR5cGU9e3RleHQ6Im5vZGUifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXMocClbMF07X1tJXT17dGV4dDpCfX1lbHNlIF8udHlwZT17dGV4dDpwfTtpZih3PT1udWxsKV8uZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIHc9PSJvYmplY3QiKXtsZXRbSSxCXT1PYmplY3QuZW50cmllcyh3KVswXTtfW0ldPXt0ZXh0OkJ9fWVsc2UgXy5kZXNjcj17dGV4dDp3fTtpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtJLEJdPU9iamVjdC5lbnRyaWVzKGIpWzBdO19bSV09Qn1lbHNlIF8udGFncz1iO2lmKHR5cGVvZiBFPT0ib2JqZWN0Iil7bGV0W0ksQl09T2JqZWN0LmVudHJpZXMoRSlbMF07X1tJXT1CfWVsc2UgXy5saW5rPUU7Xy5ub2RlVHlwZT1pLF8ucGFyZW50Qm91bmRhcnk9d2csXy53cmFwPWRrKCksb209d2csd2c9YSxmay5wdXNoKG9tKX0sVERlPWZ1bmN0aW9uKCl7d2c9b20sZmsucG9wKCksb209ZmsucG9wKCksZmsucHVzaChvbSl9LENEZT1mdW5jdGlvbihpLGEsZixwLHcsbSxiLEUsXyxBLEkpe2xldCBCPWFtLmZpbmQoTj0+Ti5hbGlhcz09PWEpO2lmKCEoQj09PXZvaWQgMCYmKEI9cDMuZmluZChOPT5OLmFsaWFzPT09YSksQj09PXZvaWQgMCkpKXtpZihmIT1udWxsKWlmKHR5cGVvZiBmPT0ib2JqZWN0Iil7bGV0W04sUl09T2JqZWN0LmVudHJpZXMoZilbMF07QltOXT1SfWVsc2UgQi5iZ0NvbG9yPWY7aWYocCE9bnVsbClpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtOLFJdPU9iamVjdC5lbnRyaWVzKHApWzBdO0JbTl09Un1lbHNlIEIuZm9udENvbG9yPXA7aWYodyE9bnVsbClpZih0eXBlb2Ygdz09Im9iamVjdCIpe2xldFtOLFJdPU9iamVjdC5lbnRyaWVzKHcpWzBdO0JbTl09Un1lbHNlIEIuYm9yZGVyQ29sb3I9dztpZihtIT1udWxsKWlmKHR5cGVvZiBtPT0ib2JqZWN0Iil7bGV0W04sUl09T2JqZWN0LmVudHJpZXMobSlbMF07QltOXT1SfWVsc2UgQi5zaGFkb3dpbmc9bTtpZihiIT1udWxsKWlmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W04sUl09T2JqZWN0LmVudHJpZXMoYilbMF07QltOXT1SfWVsc2UgQi5zaGFwZT1iO2lmKEUhPW51bGwpaWYodHlwZW9mIEU9PSJvYmplY3QiKXtsZXRbTixSXT1PYmplY3QuZW50cmllcyhFKVswXTtCW05dPVJ9ZWxzZSBCLnNwcml0ZT1FO2lmKF8hPW51bGwpaWYodHlwZW9mIF89PSJvYmplY3QiKXtsZXRbTixSXT1PYmplY3QuZW50cmllcyhfKVswXTtCW05dPVJ9ZWxzZSBCLnRlY2huPV87aWYoQSE9bnVsbClpZih0eXBlb2YgQT09Im9iamVjdCIpe2xldFtOLFJdPU9iamVjdC5lbnRyaWVzKEEpWzBdO0JbTl09Un1lbHNlIEIubGVnZW5kVGV4dD1BO2lmKEkhPW51bGwpaWYodHlwZW9mIEk9PSJvYmplY3QiKXtsZXRbTixSXT1PYmplY3QuZW50cmllcyhJKVswXTtCW05dPVJ9ZWxzZSBCLmxlZ2VuZFNwcml0ZT1JfX0sX0RlPWZ1bmN0aW9uKGksYSxmLHAsdyxtLGIpe2NvbnN0IEU9bEYuZmluZChfPT5fLmZyb209PT1hJiZfLnRvPT09Zik7aWYoRSE9PXZvaWQgMCl7aWYocCE9bnVsbClpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtfLEFdPU9iamVjdC5lbnRyaWVzKHApWzBdO0VbX109QX1lbHNlIEUudGV4dENvbG9yPXA7aWYodyE9bnVsbClpZih0eXBlb2Ygdz09Im9iamVjdCIpe2xldFtfLEFdPU9iamVjdC5lbnRyaWVzKHcpWzBdO0VbX109QX1lbHNlIEUubGluZUNvbG9yPXc7aWYobSE9bnVsbClpZih0eXBlb2YgbT09Im9iamVjdCIpe2xldFtfLEFdPU9iamVjdC5lbnRyaWVzKG0pWzBdO0VbX109cGFyc2VJbnQoQSl9ZWxzZSBFLm9mZnNldFg9cGFyc2VJbnQobSk7aWYoYiE9bnVsbClpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtfLEFdPU9iamVjdC5lbnRyaWVzKGIpWzBdO0VbX109cGFyc2VJbnQoQSl9ZWxzZSBFLm9mZnNldFk9cGFyc2VJbnQoYil9fSxTRGU9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPVFXLHc9Wlc7aWYodHlwZW9mIGE9PSJvYmplY3QiKXtjb25zdCBtPU9iamVjdC52YWx1ZXMoYSlbMF07cD1wYXJzZUludChtKX1lbHNlIHA9cGFyc2VJbnQoYSk7aWYodHlwZW9mIGY9PSJvYmplY3QiKXtjb25zdCBtPU9iamVjdC52YWx1ZXMoZilbMF07dz1wYXJzZUludChtKX1lbHNlIHc9cGFyc2VJbnQoZik7cD49MSYmKFFXPXApLHc+PTEmJihaVz13KX0sQURlPWZ1bmN0aW9uKCl7cmV0dXJuIFFXfSxMRGU9ZnVuY3Rpb24oKXtyZXR1cm4gWld9LE1EZT1mdW5jdGlvbigpe3JldHVybiB3Z30sRERlPWZ1bmN0aW9uKCl7cmV0dXJuIG9tfSx2UHQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/YW06YW0uZmlsdGVyKGE9PmEucGFyZW50Qm91bmRhcnk9PT1pKX0sSURlPWZ1bmN0aW9uKGkpe3JldHVybiBhbS5maW5kKGE9PmEuYWxpYXM9PT1pKX0sT0RlPWZ1bmN0aW9uKGkpe3JldHVybiBPYmplY3Qua2V5cyh2UHQoaSkpfSxQRGU9ZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/cDM6cDMuZmlsdGVyKGE9PmEucGFyZW50Qm91bmRhcnk9PT1pKX0sRkRlPWZ1bmN0aW9uKCl7cmV0dXJuIGxGfSxORGU9ZnVuY3Rpb24oKXtyZXR1cm4gRmR0fSxCRGU9ZnVuY3Rpb24oaSl7TmR0PWl9LGRrPWZ1bmN0aW9uKCl7cmV0dXJuIE5kdH0sQmR0PXthZGRQZXJzb25PclN5c3RlbTp2RGUsYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeTp4RGUsYWRkQ29udGFpbmVyOm1EZSxhZGRDb250YWluZXJCb3VuZGFyeTprRGUsYWRkQ29tcG9uZW50OnlEZSxhZGREZXBsb3ltZW50Tm9kZTpFRGUscG9wQm91bmRhcnlQYXJzZVN0YWNrOlREZSxhZGRSZWw6d0RlLHVwZGF0ZUVsU3R5bGU6Q0RlLHVwZGF0ZVJlbFN0eWxlOl9EZSx1cGRhdGVMYXlvdXRDb25maWc6U0RlLGF1dG9XcmFwOmRrLHNldFdyYXA6QkRlLGdldEM0U2hhcGVBcnJheTp2UHQsZ2V0QzRTaGFwZTpJRGUsZ2V0QzRTaGFwZUtleXM6T0RlLGdldEJvdW5kYXJ5czpQRGUsZ2V0Q3VycmVudEJvdW5kYXJ5UGFyc2U6TURlLGdldFBhcmVudEJvdW5kYXJ5UGFyc2U6RERlLGdldFJlbHM6RkRlLGdldFRpdGxlOk5EZSxnZXRDNFR5cGU6cERlLGdldEM0U2hhcGVJblJvdzpBRGUsZ2V0QzRCb3VuZGFyeUluUm93OkxEZSxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxnZXRDb25maWc6KCk9Pk9lKCkuYzQsY2xlYXI6ZnVuY3Rpb24oKXthbT1bXSxwMz1be2FsaWFzOiJnbG9iYWwiLGxhYmVsOnt0ZXh0OiJnbG9iYWwifSx0eXBlOnt0ZXh0OiJnbG9iYWwifSx0YWdzOm51bGwsbGluazpudWxsLHBhcmVudEJvdW5kYXJ5OiIifV0sb209IiIsd2c9Imdsb2JhbCIsZms9WyIiXSxsRj1bXSxmaz1bIiJdLEZkdD0iIixOZHQ9ITEsUVc9NCxaVz0yfSxMSU5FVFlQRTp7U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyMyxTT0xJRF9QT0lOVDoyNCxET1RURURfUE9JTlQ6MjV9LEFSUk9XVFlQRTp7RklMTEVEOjAsT1BFTjoxfSxQTEFDRU1FTlQ6e0xFRlRPRjowLFJJR0hUT0Y6MSxPVkVSOjJ9LHNldFRpdGxlOmZ1bmN0aW9uKGkpe0ZkdD1RMShpLE9lKCkpfSxzZXRDNFR5cGU6YkRlfSxKVz0oaSxhKT0+e2NvbnN0IGY9aS5hcHBlbmQoInJlY3QiKTtpZihmLmF0dHIoIngiLGEueCksZi5hdHRyKCJ5IixhLnkpLGYuYXR0cigiZmlsbCIsYS5maWxsKSxmLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLGYuYXR0cigid2lkdGgiLGEud2lkdGgpLGYuYXR0cigiaGVpZ2h0IixhLmhlaWdodCksYS5yeCE9PXZvaWQgMCYmZi5hdHRyKCJyeCIsYS5yeCksYS5yeSE9PXZvaWQgMCYmZi5hdHRyKCJyeSIsYS5yeSksYS5hdHRycyE9PXZvaWQgMClmb3IoY29uc3QgcCBpbiBhLmF0dHJzKWYuYXR0cihwLGEuYXR0cnNbcF0pO3JldHVybiBhLmNsYXNzIT09dm9pZCAwJiZmLmF0dHIoImNsYXNzIixhLmNsYXNzKSxmfSxtUHQ9KGksYSk9Pntjb25zdCBmPXt4OmEuc3RhcnR4LHk6YS5zdGFydHksd2lkdGg6YS5zdG9weC1hLnN0YXJ0eCxoZWlnaHQ6YS5zdG9weS1hLnN0YXJ0eSxmaWxsOmEuZmlsbCxzdHJva2U6YS5zdHJva2UsY2xhc3M6InJlY3QifTtKVyhpLGYpLmxvd2VyKCl9LFJEZT0oaSxhKT0+e2NvbnN0IGY9YS50ZXh0LnJlcGxhY2UoV1AsIiAiKSxwPWkuYXBwZW5kKCJ0ZXh0Iik7cC5hdHRyKCJ4IixhLngpLHAuYXR0cigieSIsYS55KSxwLmF0dHIoImNsYXNzIiwibGVnZW5kIikscC5zdHlsZSgidGV4dC1hbmNob3IiLGEuYW5jaG9yKSxhLmNsYXNzIT09dm9pZCAwJiZwLmF0dHIoImNsYXNzIixhLmNsYXNzKTtjb25zdCB3PXAuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiB3LmF0dHIoIngiLGEueCthLnRleHRNYXJnaW4qMiksdy50ZXh0KGYpLHB9LGpEZT0oaSxhLGYscCk9Pntjb25zdCB3PWkuYXBwZW5kKCJpbWFnZSIpO3cuYXR0cigieCIsYSksdy5hdHRyKCJ5IixmKTtjb25zdCBtPWlrKHApO3cuYXR0cigieGxpbms6aHJlZiIsbSl9LCREZT0oaSxhLGYscCk9Pntjb25zdCB3PWkuYXBwZW5kKCJ1c2UiKTt3LmF0dHIoIngiLGEpLHcuYXR0cigieSIsZik7Y29uc3QgbT1payhwKTt3LmF0dHIoInhsaW5rOmhyZWYiLGAjJHttfWApfSxiVD0oKT0+KHt4OjAseTowLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsYW5jaG9yOiJzdGFydCIscng6MCxyeTowfSksUmR0PSgpPT4oe3g6MCx5OjAsd2lkdGg6MTAwLGhlaWdodDoxMDAsInRleHQtYW5jaG9yIjoic3RhcnQiLHN0eWxlOiIjNjY2Iix0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwfSksamR0PWZ1bmN0aW9uKGksYSl7cmV0dXJuIEpXKGksYSl9LHlQdD1mdW5jdGlvbihpLGEsZixwLHcsbSl7Y29uc3QgYj1pLmFwcGVuZCgiaW1hZ2UiKTtiLmF0dHIoIndpZHRoIixhKSxiLmF0dHIoImhlaWdodCIsZiksYi5hdHRyKCJ4IixwKSxiLmF0dHIoInkiLHcpO2xldCBFPW0uc3RhcnRzV2l0aCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0Iik/bTppayhtKTtiLmF0dHIoInhsaW5rOmhyZWYiLEUpfSx6RGU9KGksYSxmKT0+e2NvbnN0IHA9aS5hcHBlbmQoImciKTtsZXQgdz0wO2ZvcihsZXQgbSBvZiBhKXtsZXQgYj1tLnRleHRDb2xvcj9tLnRleHRDb2xvcjoiIzQ0NDQ0NCIsRT1tLmxpbmVDb2xvcj9tLmxpbmVDb2xvcjoiIzQ0NDQ0NCIsXz1tLm9mZnNldFg/cGFyc2VJbnQobS5vZmZzZXRYKTowLEE9bS5vZmZzZXRZP3BhcnNlSW50KG0ub2Zmc2V0WSk6MCxJPSIiO2lmKHc9PT0wKXtsZXQgTj1wLmFwcGVuZCgibGluZSIpO04uYXR0cigieDEiLG0uc3RhcnRQb2ludC54KSxOLmF0dHIoInkxIixtLnN0YXJ0UG9pbnQueSksTi5hdHRyKCJ4MiIsbS5lbmRQb2ludC54KSxOLmF0dHIoInkyIixtLmVuZFBvaW50LnkpLE4uYXR0cigic3Ryb2tlLXdpZHRoIiwiMSIpLE4uYXR0cigic3Ryb2tlIixFKSxOLnN0eWxlKCJmaWxsIiwibm9uZSIpLG0udHlwZSE9PSJyZWxfYiImJk4uYXR0cigibWFya2VyLWVuZCIsInVybCgiK0krIiNhcnJvd2hlYWQpIiksKG0udHlwZT09PSJiaXJlbCJ8fG0udHlwZT09PSJyZWxfYiIpJiZOLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK0krIiNhcnJvd2VuZCkiKSx3PS0xfWVsc2V7bGV0IE49cC5hcHBlbmQoInBhdGgiKTtOLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMSIpLmF0dHIoInN0cm9rZSIsRSkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5IFFjb250cm9seCxjb250cm9seSBzdG9weCxzdG9weSAiLnJlcGxhY2VBbGwoInN0YXJ0eCIsbS5zdGFydFBvaW50LngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsbS5zdGFydFBvaW50LnkpLnJlcGxhY2VBbGwoImNvbnRyb2x4IixtLnN0YXJ0UG9pbnQueCsobS5lbmRQb2ludC54LW0uc3RhcnRQb2ludC54KS8yLShtLmVuZFBvaW50LngtbS5zdGFydFBvaW50LngpLzQpLnJlcGxhY2VBbGwoImNvbnRyb2x5IixtLnN0YXJ0UG9pbnQueSsobS5lbmRQb2ludC55LW0uc3RhcnRQb2ludC55KS8yKS5yZXBsYWNlQWxsKCJzdG9weCIsbS5lbmRQb2ludC54KS5yZXBsYWNlQWxsKCJzdG9weSIsbS5lbmRQb2ludC55KSksbS50eXBlIT09InJlbF9iIiYmTi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrSSsiI2Fycm93aGVhZCkiKSwobS50eXBlPT09ImJpcmVsInx8bS50eXBlPT09InJlbF9iIikmJk4uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrSSsiI2Fycm93ZW5kKSIpfWxldCBCPWYubWVzc2FnZUZvbnQoKTtMNShmKShtLmxhYmVsLnRleHQscCxNYXRoLm1pbihtLnN0YXJ0UG9pbnQueCxtLmVuZFBvaW50LngpK01hdGguYWJzKG0uZW5kUG9pbnQueC1tLnN0YXJ0UG9pbnQueCkvMitfLE1hdGgubWluKG0uc3RhcnRQb2ludC55LG0uZW5kUG9pbnQueSkrTWF0aC5hYnMobS5lbmRQb2ludC55LW0uc3RhcnRQb2ludC55KS8yK0EsbS5sYWJlbC53aWR0aCxtLmxhYmVsLmhlaWdodCx7ZmlsbDpifSxCKSxtLnRlY2huJiZtLnRlY2huLnRleHQhPT0iIiYmKEI9Zi5tZXNzYWdlRm9udCgpLEw1KGYpKCJbIittLnRlY2huLnRleHQrIl0iLHAsTWF0aC5taW4obS5zdGFydFBvaW50LngsbS5lbmRQb2ludC54KStNYXRoLmFicyhtLmVuZFBvaW50LngtbS5zdGFydFBvaW50LngpLzIrXyxNYXRoLm1pbihtLnN0YXJ0UG9pbnQueSxtLmVuZFBvaW50LnkpK01hdGguYWJzKG0uZW5kUG9pbnQueS1tLnN0YXJ0UG9pbnQueSkvMitmLm1lc3NhZ2VGb250U2l6ZSs1K0EsTWF0aC5tYXgobS5sYWJlbC53aWR0aCxtLnRlY2huLndpZHRoKSxtLnRlY2huLmhlaWdodCx7ZmlsbDpiLCJmb250LXN0eWxlIjoiaXRhbGljIn0sQikpfX0scURlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWkuYXBwZW5kKCJnIik7bGV0IHc9YS5iZ0NvbG9yP2EuYmdDb2xvcjoibm9uZSIsbT1hLmJvcmRlckNvbG9yP2EuYm9yZGVyQ29sb3I6IiM0NDQ0NDQiLGI9YS5mb250Q29sb3I/YS5mb250Q29sb3I6ImJsYWNrIixFPXsic3Ryb2tlLXdpZHRoIjoxLCJzdHJva2UtZGFzaGFycmF5IjoiNy4wLDcuMCJ9O2Eubm9kZVR5cGUmJihFPXsic3Ryb2tlLXdpZHRoIjoxfSk7bGV0IF89e3g6YS54LHk6YS55LGZpbGw6dyxzdHJva2U6bSx3aWR0aDphLndpZHRoLGhlaWdodDphLmhlaWdodCxyeDoyLjUscnk6Mi41LGF0dHJzOkV9O2pkdChwLF8pO2xldCBBPWYuYm91bmRhcnlGb250KCk7QS5mb250V2VpZ2h0PSJib2xkIixBLmZvbnRTaXplPUEuZm9udFNpemUrMixBLmZvbnRDb2xvcj1iLEw1KGYpKGEubGFiZWwudGV4dCxwLGEueCxhLnkrYS5sYWJlbC5ZLGEud2lkdGgsYS5oZWlnaHQse2ZpbGw6IiM0NDQ0NDQifSxBKSxhLnR5cGUmJmEudHlwZS50ZXh0IT09IiImJihBPWYuYm91bmRhcnlGb250KCksQS5mb250Q29sb3I9YixMNShmKShhLnR5cGUudGV4dCxwLGEueCxhLnkrYS50eXBlLlksYS53aWR0aCxhLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LEEpKSxhLmRlc2NyJiZhLmRlc2NyLnRleHQhPT0iIiYmKEE9Zi5ib3VuZGFyeUZvbnQoKSxBLmZvbnRTaXplPUEuZm9udFNpemUtMixBLmZvbnRDb2xvcj1iLEw1KGYpKGEuZGVzY3IudGV4dCxwLGEueCxhLnkrYS5kZXNjci5ZLGEud2lkdGgsYS5oZWlnaHQse2ZpbGw6IiM0NDQ0NDQifSxBKSl9LEhEZT1mdW5jdGlvbihpLGEsZil7dmFyIEI7bGV0IHA9YS5iZ0NvbG9yP2EuYmdDb2xvcjpmW2EudHlwZUM0U2hhcGUudGV4dCsiX2JnX2NvbG9yIl0sdz1hLmJvcmRlckNvbG9yP2EuYm9yZGVyQ29sb3I6ZlthLnR5cGVDNFNoYXBlLnRleHQrIl9ib3JkZXJfY29sb3IiXSxtPWEuZm9udENvbG9yP2EuZm9udENvbG9yOiIjRkZGRkZGIixiPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9Ijtzd2l0Y2goYS50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Yj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQ0QwbEVRVlI0WHUyWW9VNEVNUkNHVCs0ajhBaThBaGFINFFIZ0FValF1Rk1FQ1VnTUlVZ3dKQWdNaGdRc0FZVWlKQ2lRSUJCWStFSVRzamZUZG1lNlYyNHY0Yzh2eUdiYitaak90TjBiTmN2alFYbWtIODNXdllCV3RvNlBMbTZ2N3A3dUgxL3cyZlhEK1BCeWNYMVB2MmwzSWREbS92bjd4K2RYUWlBdWJSem9VUmE3Z1JaV2QwaUdSSWlKYk9uaG5mWUJRWk5Kak5idXlZMmVKRzhma0RFM2JiRzRlcDZNSFVBc2dZeG1FM25WczZWc0JXSlNHY2NzT2xGUG1MSVZpTXpMT0I3cENWTzJBdEhKTW9oSDdGaDZ6cWl0UUs3bTBySnZBVllnR2NFcGUvL1BMZER6NjVzTTRwRjlON0lDY1hES0lCNU52Nmo3dEQwTm9TZE0yUXJVOUdnMGV3RTFMcUJoSFIzQkJkdmoydmFwbmlkakh4RC9xNnZkN1B2aHIzMUF3Y1k4ZVhNVFhBS0VDWlpKRlh1RXEyN2FMZ1FLNXVMTW9oQ2VuR0d1R2V3T3hTakJ2WUJxZUc2QitOcWlibGdnZGpuYytaWER5K0ZORnBGenc3Nk8zVUJBUk91WGg2Rm9pQWNmNWc5ZVR2VWd6eTBuV2c2SThjWEhSVXBnNWJPVkJDbytLRHBGYWpPZjIzR2dQbWU3UlNRK2xhY0lFTlVnSjZnZzFrNkhqZ09scW5McWlwNHRFdWh2MGhORU1YVUQwY2x5WEUzcDZwWkEwUzJubnZUbFh3TEpFWldsYjdjVFFIMStVU2dUTjRWaEFlbm0vd2VhMU9DQU9tcW82ZkUxV0NiOVdTS0JhaCtyYlVXUFdBbUUyUnZrMEFwaUI0NWVPeU5BelU4eGNUdmo4S3ZrS0VvT2FJWWVITkEzWnV5Z0F2Rk1VTzBBQUFBQVNVVk9SSzVDWUlJPSI7YnJlYWs7Y2FzZSJleHRlcm5hbF9wZXJzb24iOmI9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUI2RWxFUVZSNFh1MllMWStFTUJDRzkrZFdyMGFqMFdnMEdvMUdvMCtqOFhkdjJ1VEN2djFncHQwZWJIS1B1aERhZVc0NjA1WjltSnZ4NEFkWFV5VFVkZDA4eit1NmZsbVdaUm5Ic1drYWZrOURwdEF3RFB1K2YwZUFZdHUyUEVhR1d1ajVmQ0lackJBQzJlTEJBblJDc0Vra3htZWFKcDdpREoyUU1EZEhzTGc4U3hLRkVKYUFvOGxBWG5tdU9GSWhUTXB4eEtBVGVibzRVaUZrbnVObzRPbmlTSVhReVJ4RUEzWXNuakdDVkVqVlhEN3lMVUFxeEJHVXlQdi9ZNFcyYmVNZ0d1UzdrVlFJQnljSDBmRCtvaTVwZXpRRVR4ZEhLbVFLR2sxZVFFWWxkSytqdzVHeFBmWjl6N01rMFFuaGYxVzFtM3cvL0VVbjVCRG1TWnNiUjQ0UVFMQkVxckJIcU9ybVNLYVFBeGRuTEFyQ3J4WmNNN0E3WktzNGlvUnE4TEZDK05wQzNXQ0JKc3ZwVnc1ZWRtOWlFWEZ1eU5meFhBZ1N3ZnJGUTFjMGlOZGE4QWRlanZVZ25rdE90SlFReG1jZkZ6R2dsYzVXVkNqN29EZ0ZxVTE4Ym9lRlNzNTJDVWg4TEU4QklWUURUMUFCckIwSHRnU0VZbFg1ZG9KbkN3djlUWG9jS0NhS2Jud2hkREtQcTRsZjNTd1UzSExxNFYvK1dZaEhWTWEvM2I0SWxmeWlrQWR1Q2tjQmM3bVEzL3ovUXEvY1R1aWtoa3pCMTJBZS9tY0pDOVUrVm84RWoxZ1dBdGdiZUdnRnNBTUhyNTBCSVdPTENiZXp2aHBCRlVkWTZFSnVKL1FEVzBYb01YNjB6WjBBQUFBQVNVVk9SSzVDWUlJPSI7YnJlYWt9Y29uc3QgRT1pLmFwcGVuZCgiZyIpO0UuYXR0cigiY2xhc3MiLCJwZXJzb24tbWFuIik7Y29uc3QgXz1iVCgpO3N3aXRjaChhLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6Y2FzZSJzeXN0ZW0iOmNhc2UiZXh0ZXJuYWxfc3lzdGVtIjpjYXNlImNvbnRhaW5lciI6Y2FzZSJleHRlcm5hbF9jb250YWluZXIiOmNhc2UiY29tcG9uZW50IjpjYXNlImV4dGVybmFsX2NvbXBvbmVudCI6Xy54PWEueCxfLnk9YS55LF8uZmlsbD1wLF8ud2lkdGg9YS53aWR0aCxfLmhlaWdodD1hLmhlaWdodCxfLnN0cm9rZT13LF8ucng9Mi41LF8ucnk9Mi41LF8uYXR0cnM9eyJzdHJva2Utd2lkdGgiOi41fSxqZHQoRSxfKTticmVhaztjYXNlInN5c3RlbV9kYiI6Y2FzZSJleHRlcm5hbF9zeXN0ZW1fZGIiOmNhc2UiY29udGFpbmVyX2RiIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lcl9kYiI6Y2FzZSJjb21wb25lbnRfZGIiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50X2RiIjpFLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLHApLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsdykuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5YzAsLTEwIGhhbGYsLTEwIGhhbGYsLTEwYzAsMCBoYWxmLDAgaGFsZiwxMGwwLGhlaWdodGMwLDEwIC1oYWxmLDEwIC1oYWxmLDEwYzAsMCAtaGFsZiwwIC1oYWxmLC0xMGwwLC1oZWlnaHQiLnJlcGxhY2VBbGwoInN0YXJ0eCIsYS54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGEueSkucmVwbGFjZUFsbCgiaGFsZiIsYS53aWR0aC8yKS5yZXBsYWNlQWxsKCJoZWlnaHQiLGEuaGVpZ2h0KSksRS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsdykuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5YzAsMTAgaGFsZiwxMCBoYWxmLDEwYzAsMCBoYWxmLDAgaGFsZiwtMTAiLnJlcGxhY2VBbGwoInN0YXJ0eCIsYS54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGEueSkucmVwbGFjZUFsbCgiaGFsZiIsYS53aWR0aC8yKSk7YnJlYWs7Y2FzZSJzeXN0ZW1fcXVldWUiOmNhc2UiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlIjpjYXNlImNvbnRhaW5lcl9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9jb250YWluZXJfcXVldWUiOmNhc2UiY29tcG9uZW50X3F1ZXVlIjpjYXNlImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZSI6RS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIixwKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLHcpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWx3aWR0aCwwYzUsMCA1LGhhbGYgNSxoYWxmYzAsMCAwLGhhbGYgLTUsaGFsZmwtd2lkdGgsMGMtNSwwIC01LC1oYWxmIC01LC1oYWxmYzAsMCAwLC1oYWxmIDUsLWhhbGYiLnJlcGxhY2VBbGwoInN0YXJ0eCIsYS54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGEueSkucmVwbGFjZUFsbCgid2lkdGgiLGEud2lkdGgpLnJlcGxhY2VBbGwoImhhbGYiLGEuaGVpZ2h0LzIpKSxFLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIix3KS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljLTUsMCAtNSxoYWxmIC01LGhhbGZjMCxoYWxmIDUsaGFsZiA1LGhhbGYiLnJlcGxhY2VBbGwoInN0YXJ0eCIsYS54K2Eud2lkdGgpLnJlcGxhY2VBbGwoInN0YXJ0eSIsYS55KS5yZXBsYWNlQWxsKCJoYWxmIixhLmhlaWdodC8yKSk7YnJlYWt9bGV0IEE9WkRlKGYsYS50eXBlQzRTaGFwZS50ZXh0KTtzd2l0Y2goRS5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIixtKS5hdHRyKCJmb250LWZhbWlseSIsQS5mb250RmFtaWx5KS5hdHRyKCJmb250LXNpemUiLEEuZm9udFNpemUtMikuYXR0cigiZm9udC1zdHlsZSIsIml0YWxpYyIpLmF0dHIoImxlbmd0aEFkanVzdCIsInNwYWNpbmciKS5hdHRyKCJ0ZXh0TGVuZ3RoIixhLnR5cGVDNFNoYXBlLndpZHRoKS5hdHRyKCJ4IixhLngrYS53aWR0aC8yLWEudHlwZUM0U2hhcGUud2lkdGgvMikuYXR0cigieSIsYS55K2EudHlwZUM0U2hhcGUuWSkudGV4dCgiPDwiK2EudHlwZUM0U2hhcGUudGV4dCsiPj4iKSxhLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6eVB0KEUsNDgsNDgsYS54K2Eud2lkdGgvMi0yNCxhLnkrYS5pbWFnZS5ZLGIpO2JyZWFrfWxldCBJPWZbYS50eXBlQzRTaGFwZS50ZXh0KyJGb250Il0oKTtyZXR1cm4gSS5mb250V2VpZ2h0PSJib2xkIixJLmZvbnRTaXplPUkuZm9udFNpemUrMixJLmZvbnRDb2xvcj1tLEw1KGYpKGEubGFiZWwudGV4dCxFLGEueCxhLnkrYS5sYWJlbC5ZLGEud2lkdGgsYS5oZWlnaHQse2ZpbGw6bX0sSSksST1mW2EudHlwZUM0U2hhcGUudGV4dCsiRm9udCJdKCksSS5mb250Q29sb3I9bSxhLnRlY2huJiYoKEI9YS50ZWNobik9PW51bGw/dm9pZCAwOkIudGV4dCkhPT0iIj9MNShmKShhLnRlY2huLnRleHQsRSxhLngsYS55K2EudGVjaG4uWSxhLndpZHRoLGEuaGVpZ2h0LHtmaWxsOm0sImZvbnQtc3R5bGUiOiJpdGFsaWMifSxJKTphLnR5cGUmJmEudHlwZS50ZXh0IT09IiImJkw1KGYpKGEudHlwZS50ZXh0LEUsYS54LGEueSthLnR5cGUuWSxhLndpZHRoLGEuaGVpZ2h0LHtmaWxsOm0sImZvbnQtc3R5bGUiOiJpdGFsaWMifSxJKSxhLmRlc2NyJiZhLmRlc2NyLnRleHQhPT0iIiYmKEk9Zi5wZXJzb25Gb250KCksSS5mb250Q29sb3I9bSxMNShmKShhLmRlc2NyLnRleHQsRSxhLngsYS55K2EuZGVzY3IuWSxhLndpZHRoLGEuaGVpZ2h0LHtmaWxsOm19LEkpKSxhLmhlaWdodH0sVkRlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImRhdGFiYXNlIikuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLmF0dHIoImNsaXAtcnVsZSIsImV2ZW5vZGQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxeiIpfSxHRGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY29tcHV0ZXIiKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTIgMnYxM2gyMHYtMTNoLTIwem0xOCAxMWgtMTZ2LTloMTZ2OXptLTEwLjIyOCA2bC40NjYtMWgzLjUyNGwuNDY3IDFoLTQuNDU3em0xNC4yMjggM2gtMjRsMi02aDIuMTA0bC0xLjMzIDRoMTguNDVsLTEuMjk3LTRoMi4wNzNsMiA2em0tNS0xMGgtMTR2LTdoMTR2N3oiKX0sVURlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNsb2NrIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMiAyYzUuNTE0IDAgMTAgNC40ODYgMTAgMTBzLTQuNDg2IDEwLTEwIDEwLTEwLTQuNDg2LTEwLTEwIDQuNDg2LTEwIDEwLTEwem0wLTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJzNS4zNzMgMTIgMTIgMTIgMTItNS4zNzMgMTItMTItNS4zNzMtMTItMTItMTJ6bTUuODQ4IDEyLjQ1OWMuMjAyLjAzOC4yMDIuMzMzLjAwMS4zNzItMS45MDcuMzYxLTYuMDQ1IDEuMTExLTYuNTQ3IDEuMTExLS43MTkgMC0xLjMwMS0uNTgyLTEuMzAxLTEuMzAxIDAtLjUxMi43Ny01LjQ0NyAxLjEyNS03LjQ0NS4wMzQtLjE5Mi4zMTItLjE4MS4zNDMuMDE0bC45ODUgNi4yMzggNS4zOTQgMS4wMTF6Iil9LFdEZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpfSxZRGU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3dlbmQiKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTAgMCBMIDAgNSBMIDEwIDEwIHoiKX0sS0RlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LFhEZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LFFEZT1mdW5jdGlvbihpKXtjb25zdCBmPWkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsMTYpLmF0dHIoInJlZlkiLDQpO2YuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoImQiLCJNIDksMiBWIDYgTDE2LDQgWiIpLGYuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gMCwxIEwgNiw3IE0gNiwxIEwgMCw3Iil9LFpEZT0oaSxhKT0+KHtmb250RmFtaWx5OmlbYSsiRm9udEZhbWlseSJdLGZvbnRTaXplOmlbYSsiRm9udFNpemUiXSxmb250V2VpZ2h0OmlbYSsiRm9udFdlaWdodCJdfSksTDU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHcsbSxiLEUsXyxBLEkpe2NvbnN0IEI9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiK18vMikuYXR0cigieSIsRStBLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh3KTtwKEIsSSl9ZnVuY3Rpb24gYSh3LG0sYixFLF8sQSxJLEIpe2NvbnN0e2ZvbnRTaXplOk4sZm9udEZhbWlseTpSLGZvbnRXZWlnaHQ6en09QixXPXcuc3BsaXQoS3IubGluZUJyZWFrUmVnZXgpO2ZvcihsZXQgZXQ9MDtldDxXLmxlbmd0aDtldCsrKXtjb25zdCBzdD1ldCpOLU4qKFcubGVuZ3RoLTEpLzIsYXQ9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiK18vMikuYXR0cigieSIsRSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixOKS5zdHlsZSgiZm9udC13ZWlnaHQiLHopLnN0eWxlKCJmb250LWZhbWlseSIsUik7YXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImR5IixzdCkudGV4dChXW2V0XSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWF0aGVtYXRpY2FsIikscChhdCxJKX19ZnVuY3Rpb24gZih3LG0sYixFLF8sQSxJLEIpe2NvbnN0IE49bS5hcHBlbmQoInN3aXRjaCIpLHo9Ti5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIsXykuYXR0cigiaGVpZ2h0IixBKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTt6LmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHcpLGEodyxOLGIsRSxfLEEsSSxCKSxwKHosSSl9ZnVuY3Rpb24gcCh3LG0pe2Zvcihjb25zdCBiIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShiKSYmdy5hdHRyKGIsbVtiXSl9cmV0dXJuIGZ1bmN0aW9uKHcpe3JldHVybiB3LnRleHRQbGFjZW1lbnQ9PT0iZm8iP2Y6dy50ZXh0UGxhY2VtZW50PT09Im9sZCI/aTphfX0oKSxiMz17ZHJhd1JlY3Q6amR0LGRyYXdCb3VuZGFyeTpxRGUsZHJhd0M0U2hhcGU6SERlLGRyYXdSZWxzOnpEZSxkcmF3SW1hZ2U6eVB0LGluc2VydEFycm93SGVhZDpXRGUsaW5zZXJ0QXJyb3dFbmQ6WURlLGluc2VydEFycm93RmlsbGVkSGVhZDpLRGUsaW5zZXJ0RHluYW1pY051bWJlcjpYRGUsaW5zZXJ0QXJyb3dDcm9zc0hlYWQ6UURlLGluc2VydERhdGFiYXNlSWNvbjpWRGUsaW5zZXJ0Q29tcHV0ZXJJY29uOkdEZSxpbnNlcnRDbG9ja0ljb246VURlfTtsZXQgdFk9MCxlWT0wLHhQdD00LCRkdD0yO1hXLnl5PUJkdDtsZXQgZHM9e307Y2xhc3Mga1B0e2NvbnN0cnVjdG9yKGEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9e30sdGhpcy5kYXRhLnN0YXJ0eD12b2lkIDAsdGhpcy5kYXRhLnN0b3B4PXZvaWQgMCx0aGlzLmRhdGEuc3RhcnR5PXZvaWQgMCx0aGlzLmRhdGEuc3RvcHk9dm9pZCAwLHRoaXMuZGF0YS53aWR0aExpbWl0PXZvaWQgMCx0aGlzLm5leHREYXRhPXt9LHRoaXMubmV4dERhdGEuc3RhcnR4PXZvaWQgMCx0aGlzLm5leHREYXRhLnN0b3B4PXZvaWQgMCx0aGlzLm5leHREYXRhLnN0YXJ0eT12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdG9weT12b2lkIDAsdGhpcy5uZXh0RGF0YS5jbnQ9MCx6ZHQoYS5kYi5nZXRDb25maWcoKSl9c2V0RGF0YShhLGYscCx3KXt0aGlzLm5leHREYXRhLnN0YXJ0eD10aGlzLmRhdGEuc3RhcnR4PWEsdGhpcy5uZXh0RGF0YS5zdG9weD10aGlzLmRhdGEuc3RvcHg9Zix0aGlzLm5leHREYXRhLnN0YXJ0eT10aGlzLmRhdGEuc3RhcnR5PXAsdGhpcy5uZXh0RGF0YS5zdG9weT10aGlzLmRhdGEuc3RvcHk9d311cGRhdGVWYWwoYSxmLHAsdyl7YVtmXT09PXZvaWQgMD9hW2ZdPXA6YVtmXT13KHAsYVtmXSl9aW5zZXJ0KGEpe3RoaXMubmV4dERhdGEuY250PXRoaXMubmV4dERhdGEuY250KzE7bGV0IGY9dGhpcy5uZXh0RGF0YS5zdGFydHg9PT10aGlzLm5leHREYXRhLnN0b3B4P3RoaXMubmV4dERhdGEuc3RvcHgrYS5tYXJnaW46dGhpcy5uZXh0RGF0YS5zdG9weCthLm1hcmdpbioyLHA9ZithLndpZHRoLHc9dGhpcy5uZXh0RGF0YS5zdGFydHkrYS5tYXJnaW4qMixtPXcrYS5oZWlnaHQ7KGY+PXRoaXMuZGF0YS53aWR0aExpbWl0fHxwPj10aGlzLmRhdGEud2lkdGhMaW1pdHx8dGhpcy5uZXh0RGF0YS5jbnQ+eFB0KSYmKGY9dGhpcy5uZXh0RGF0YS5zdGFydHgrYS5tYXJnaW4rZHMubmV4dExpbmVQYWRkaW5nWCx3PXRoaXMubmV4dERhdGEuc3RvcHkrYS5tYXJnaW4qMix0aGlzLm5leHREYXRhLnN0b3B4PXA9ZithLndpZHRoLHRoaXMubmV4dERhdGEuc3RhcnR5PXRoaXMubmV4dERhdGEuc3RvcHksdGhpcy5uZXh0RGF0YS5zdG9weT1tPXcrYS5oZWlnaHQsdGhpcy5uZXh0RGF0YS5jbnQ9MSksYS54PWYsYS55PXcsdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdGFydHgiLGYsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RhcnR5Iix3LE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0b3B4IixwLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0b3B5IixtLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdGFydHgiLGYsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0YXJ0eSIsdyxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RvcHgiLHAsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0b3B5IixtLE1hdGgubWF4KX1pbml0KGEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwLHdpZHRoTGltaXQ6dm9pZCAwfSx0aGlzLm5leHREYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMCxjbnQ6MH0semR0KGEuZGIuZ2V0Q29uZmlnKCkpfWJ1bXBMYXN0TWFyZ2luKGEpe3RoaXMuZGF0YS5zdG9weCs9YSx0aGlzLmRhdGEuc3RvcHkrPWF9fWNvbnN0IHpkdD1mdW5jdGlvbihpKXtaMShkcyxpKSxpLmZvbnRGYW1pbHkmJihkcy5wZXJzb25Gb250RmFtaWx5PWRzLnN5c3RlbUZvbnRGYW1pbHk9ZHMubWVzc2FnZUZvbnRGYW1pbHk9aS5mb250RmFtaWx5KSxpLmZvbnRTaXplJiYoZHMucGVyc29uRm9udFNpemU9ZHMuc3lzdGVtRm9udFNpemU9ZHMubWVzc2FnZUZvbnRTaXplPWkuZm9udFNpemUpLGkuZm9udFdlaWdodCYmKGRzLnBlcnNvbkZvbnRXZWlnaHQ9ZHMuc3lzdGVtRm9udFdlaWdodD1kcy5tZXNzYWdlRm9udFdlaWdodD1pLmZvbnRXZWlnaHQpfSxoRj0oaSxhKT0+KHtmb250RmFtaWx5OmlbYSsiRm9udEZhbWlseSJdLGZvbnRTaXplOmlbYSsiRm9udFNpemUiXSxmb250V2VpZ2h0OmlbYSsiRm9udFdlaWdodCJdfSksblk9aT0+KHtmb250RmFtaWx5OmkuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOmkuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OmkuYm91bmRhcnlGb250V2VpZ2h0fSksSkRlPWk9Pih7Zm9udEZhbWlseTppLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOmkubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5tZXNzYWdlRm9udFdlaWdodH0pO2Z1bmN0aW9uIGNtKGksYSxmLHAsdyl7aWYoIWFbaV0ud2lkdGgpaWYoZilhW2ldLnRleHQ9VUl0KGFbaV0udGV4dCx3LHApLGFbaV0udGV4dExpbmVzPWFbaV0udGV4dC5zcGxpdChLci5saW5lQnJlYWtSZWdleCkubGVuZ3RoLGFbaV0ud2lkdGg9dyxhW2ldLmhlaWdodD1vZHQoYVtpXS50ZXh0LHApO2Vsc2V7bGV0IG09YVtpXS50ZXh0LnNwbGl0KEtyLmxpbmVCcmVha1JlZ2V4KTthW2ldLnRleHRMaW5lcz1tLmxlbmd0aDtsZXQgYj0wO2FbaV0uaGVpZ2h0PTAsYVtpXS53aWR0aD0wO2Zvcihjb25zdCBFIG9mIG0pYVtpXS53aWR0aD1NYXRoLm1heChkMyhFLHApLGFbaV0ud2lkdGgpLGI9b2R0KEUscCksYVtpXS5oZWlnaHQ9YVtpXS5oZWlnaHQrYn19Y29uc3QgRVB0PWZ1bmN0aW9uKGksYSxmKXthLng9Zi5kYXRhLnN0YXJ0eCxhLnk9Zi5kYXRhLnN0YXJ0eSxhLndpZHRoPWYuZGF0YS5zdG9weC1mLmRhdGEuc3RhcnR4LGEuaGVpZ2h0PWYuZGF0YS5zdG9weS1mLmRhdGEuc3RhcnR5LGEubGFiZWwueT1kcy5jNFNoYXBlTWFyZ2luLTM1O2xldCBwPWEud3JhcCYmZHMud3JhcCx3PW5ZKGRzKTt3LmZvbnRTaXplPXcuZm9udFNpemUrMix3LmZvbnRXZWlnaHQ9ImJvbGQiO2xldCBtPWQzKGEubGFiZWwudGV4dCx3KTtjbSgibGFiZWwiLGEscCx3LG0pLGIzLmRyYXdCb3VuZGFyeShpLGEsZHMpfSxUUHQ9ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHc9MDtmb3IoY29uc3QgbSBvZiBwKXt3PTA7Y29uc3QgYj1mW21dO2xldCBFPWhGKGRzLGIudHlwZUM0U2hhcGUudGV4dCk7c3dpdGNoKEUuZm9udFNpemU9RS5mb250U2l6ZS0yLGIudHlwZUM0U2hhcGUud2lkdGg9ZDMoIsKrIitiLnR5cGVDNFNoYXBlLnRleHQrIsK7IixFKSxiLnR5cGVDNFNoYXBlLmhlaWdodD1FLmZvbnRTaXplKzIsYi50eXBlQzRTaGFwZS5ZPWRzLmM0U2hhcGVQYWRkaW5nLHc9Yi50eXBlQzRTaGFwZS5ZK2IudHlwZUM0U2hhcGUuaGVpZ2h0LTQsYi5pbWFnZT17d2lkdGg6MCxoZWlnaHQ6MCxZOjB9LGIudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpiLmltYWdlLndpZHRoPTQ4LGIuaW1hZ2UuaGVpZ2h0PTQ4LGIuaW1hZ2UuWT13LHc9Yi5pbWFnZS5ZK2IuaW1hZ2UuaGVpZ2h0O2JyZWFrfWIuc3ByaXRlJiYoYi5pbWFnZS53aWR0aD00OCxiLmltYWdlLmhlaWdodD00OCxiLmltYWdlLlk9dyx3PWIuaW1hZ2UuWStiLmltYWdlLmhlaWdodCk7bGV0IF89Yi53cmFwJiZkcy53cmFwLEE9ZHMud2lkdGgtZHMuYzRTaGFwZVBhZGRpbmcqMixJPWhGKGRzLGIudHlwZUM0U2hhcGUudGV4dCk7aWYoSS5mb250U2l6ZT1JLmZvbnRTaXplKzIsSS5mb250V2VpZ2h0PSJib2xkIixjbSgibGFiZWwiLGIsXyxJLEEpLGIubGFiZWwuWT13Kzgsdz1iLmxhYmVsLlkrYi5sYWJlbC5oZWlnaHQsYi50eXBlJiZiLnR5cGUudGV4dCE9PSIiKXtiLnR5cGUudGV4dD0iWyIrYi50eXBlLnRleHQrIl0iO2xldCBSPWhGKGRzLGIudHlwZUM0U2hhcGUudGV4dCk7Y20oInR5cGUiLGIsXyxSLEEpLGIudHlwZS5ZPXcrNSx3PWIudHlwZS5ZK2IudHlwZS5oZWlnaHR9ZWxzZSBpZihiLnRlY2huJiZiLnRlY2huLnRleHQhPT0iIil7Yi50ZWNobi50ZXh0PSJbIitiLnRlY2huLnRleHQrIl0iO2xldCBSPWhGKGRzLGIudGVjaG4udGV4dCk7Y20oInRlY2huIixiLF8sUixBKSxiLnRlY2huLlk9dys1LHc9Yi50ZWNobi5ZK2IudGVjaG4uaGVpZ2h0fWxldCBCPXcsTj1iLmxhYmVsLndpZHRoO2lmKGIuZGVzY3ImJmIuZGVzY3IudGV4dCE9PSIiKXtsZXQgUj1oRihkcyxiLnR5cGVDNFNoYXBlLnRleHQpO2NtKCJkZXNjciIsYixfLFIsQSksYi5kZXNjci5ZPXcrMjAsdz1iLmRlc2NyLlkrYi5kZXNjci5oZWlnaHQsTj1NYXRoLm1heChiLmxhYmVsLndpZHRoLGIuZGVzY3Iud2lkdGgpLEI9dy1iLmRlc2NyLnRleHRMaW5lcyo1fU49Titkcy5jNFNoYXBlUGFkZGluZyxiLndpZHRoPU1hdGgubWF4KGIud2lkdGh8fGRzLndpZHRoLE4sZHMud2lkdGgpLGIuaGVpZ2h0PU1hdGgubWF4KGIuaGVpZ2h0fHxkcy5oZWlnaHQsQixkcy5oZWlnaHQpLGIubWFyZ2luPWIubWFyZ2lufHxkcy5jNFNoYXBlTWFyZ2luLGkuaW5zZXJ0KGIpLGIzLmRyYXdDNFNoYXBlKGEsYixkcyl9aS5idW1wTGFzdE1hcmdpbihkcy5jNFNoYXBlTWFyZ2luKX07bGV0IHJ3PWNsYXNze2NvbnN0cnVjdG9yKGEsZil7dGhpcy54PWEsdGhpcy55PWZ9fSxDUHQ9ZnVuY3Rpb24oaSxhKXtsZXQgZj1pLngscD1pLnksdz1hLngsbT1hLnksYj1mK2kud2lkdGgvMixFPXAraS5oZWlnaHQvMixfPU1hdGguYWJzKGYtdyksQT1NYXRoLmFicyhwLW0pLEk9QS9fLEI9aS5oZWlnaHQvaS53aWR0aCxOPW51bGw7cmV0dXJuIHA9PW0mJmY8dz9OPW5ldyBydyhmK2kud2lkdGgsRSk6cD09bSYmZj53P049bmV3IHJ3KGYsRSk6Zj09dyYmcDxtP049bmV3IHJ3KGIscCtpLmhlaWdodCk6Zj09dyYmcD5tJiYoTj1uZXcgcncoYixwKSksZj53JiZwPG0/Qj49ST9OPW5ldyBydyhmLEUrSSppLndpZHRoLzIpOk49bmV3IHJ3KGItXy9BKmkuaGVpZ2h0LzIscCtpLmhlaWdodCk6Zjx3JiZwPG0/Qj49ST9OPW5ldyBydyhmK2kud2lkdGgsRStJKmkud2lkdGgvMik6Tj1uZXcgcncoYitfL0EqaS5oZWlnaHQvMixwK2kuaGVpZ2h0KTpmPHcmJnA+bT9CPj1JP049bmV3IHJ3KGYraS53aWR0aCxFLUkqaS53aWR0aC8yKTpOPW5ldyBydyhiK2kuaGVpZ2h0LzIqXy9BLHApOmY+dyYmcD5tJiYoQj49ST9OPW5ldyBydyhmLEUtaS53aWR0aC8yKkkpOk49bmV3IHJ3KGItaS5oZWlnaHQvMipfL0EscCkpLE59LHRJZT1mdW5jdGlvbihpLGEpe2xldCBmPXt4OjAseTowfTtmLng9YS54K2Eud2lkdGgvMixmLnk9YS55K2EuaGVpZ2h0LzI7bGV0IHA9Q1B0KGksZik7Zi54PWkueCtpLndpZHRoLzIsZi55PWkueStpLmhlaWdodC8yO2xldCB3PUNQdChhLGYpO3JldHVybntzdGFydFBvaW50OnAsZW5kUG9pbnQ6d319O2NvbnN0IGVJZT1mdW5jdGlvbihpLGEsZixwKXtsZXQgdz0wO2ZvcihsZXQgbSBvZiBhKXt3PXcrMTtsZXQgYj1tLndyYXAmJmRzLndyYXAsRT1KRGUoZHMpO3AuZGIuZ2V0QzRUeXBlKCk9PT0iQzREeW5hbWljIiYmKG0ubGFiZWwudGV4dD13KyI6ICIrbS5sYWJlbC50ZXh0KTtsZXQgQT1kMyhtLmxhYmVsLnRleHQsRSk7Y20oImxhYmVsIixtLGIsRSxBKSxtLnRlY2huJiZtLnRlY2huLnRleHQhPT0iIiYmKEE9ZDMobS50ZWNobi50ZXh0LEUpLGNtKCJ0ZWNobiIsbSxiLEUsQSkpLG0uZGVzY3ImJm0uZGVzY3IudGV4dCE9PSIiJiYoQT1kMyhtLmRlc2NyLnRleHQsRSksY20oImRlc2NyIixtLGIsRSxBKSk7bGV0IEk9ZihtLmZyb20pLEI9ZihtLnRvKSxOPXRJZShJLEIpO20uc3RhcnRQb2ludD1OLnN0YXJ0UG9pbnQsbS5lbmRQb2ludD1OLmVuZFBvaW50fWIzLmRyYXdSZWxzKGksYSxkcyl9O2Z1bmN0aW9uIF9QdChpLGEsZixwLHcpe2xldCBtPW5ldyBrUHQodyk7bS5kYXRhLndpZHRoTGltaXQ9Zi5kYXRhLndpZHRoTGltaXQvTWF0aC5taW4oJGR0LHAubGVuZ3RoKTtmb3IobGV0W2IsRV1vZiBwLmVudHJpZXMoKSl7bGV0IF89MDtFLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0sRS5zcHJpdGUmJihFLmltYWdlLndpZHRoPTQ4LEUuaW1hZ2UuaGVpZ2h0PTQ4LEUuaW1hZ2UuWT1fLF89RS5pbWFnZS5ZK0UuaW1hZ2UuaGVpZ2h0KTtsZXQgQT1FLndyYXAmJmRzLndyYXAsST1uWShkcyk7aWYoSS5mb250U2l6ZT1JLmZvbnRTaXplKzIsSS5mb250V2VpZ2h0PSJib2xkIixjbSgibGFiZWwiLEUsQSxJLG0uZGF0YS53aWR0aExpbWl0KSxFLmxhYmVsLlk9Xys4LF89RS5sYWJlbC5ZK0UubGFiZWwuaGVpZ2h0LEUudHlwZSYmRS50eXBlLnRleHQhPT0iIil7RS50eXBlLnRleHQ9IlsiK0UudHlwZS50ZXh0KyJdIjtsZXQgej1uWShkcyk7Y20oInR5cGUiLEUsQSx6LG0uZGF0YS53aWR0aExpbWl0KSxFLnR5cGUuWT1fKzUsXz1FLnR5cGUuWStFLnR5cGUuaGVpZ2h0fWlmKEUuZGVzY3ImJkUuZGVzY3IudGV4dCE9PSIiKXtsZXQgej1uWShkcyk7ei5mb250U2l6ZT16LmZvbnRTaXplLTIsY20oImRlc2NyIixFLEEseixtLmRhdGEud2lkdGhMaW1pdCksRS5kZXNjci5ZPV8rMjAsXz1FLmRlc2NyLlkrRS5kZXNjci5oZWlnaHR9aWYoYj09MHx8YiUkZHQ9PT0wKXtsZXQgej1mLmRhdGEuc3RhcnR4K2RzLmRpYWdyYW1NYXJnaW5YLFc9Zi5kYXRhLnN0b3B5K2RzLmRpYWdyYW1NYXJnaW5ZK187bS5zZXREYXRhKHoseixXLFcpfWVsc2V7bGV0IHo9bS5kYXRhLnN0b3B4IT09bS5kYXRhLnN0YXJ0eD9tLmRhdGEuc3RvcHgrZHMuZGlhZ3JhbU1hcmdpblg6bS5kYXRhLnN0YXJ0eCxXPW0uZGF0YS5zdGFydHk7bS5zZXREYXRhKHoseixXLFcpfW0ubmFtZT1FLmFsaWFzO2xldCBCPXcuZGIuZ2V0QzRTaGFwZUFycmF5KEUuYWxpYXMpLE49dy5kYi5nZXRDNFNoYXBlS2V5cyhFLmFsaWFzKTtOLmxlbmd0aD4wJiZUUHQobSxpLEIsTiksYT1FLmFsaWFzO2xldCBSPXcuZGIuZ2V0Qm91bmRhcnlzKGEpO1IubGVuZ3RoPjAmJl9QdChpLGEsbSxSLHcpLEUuYWxpYXMhPT0iZ2xvYmFsIiYmRVB0KGksRSxtKSxmLmRhdGEuc3RvcHk9TWF0aC5tYXgobS5kYXRhLnN0b3B5K2RzLmM0U2hhcGVNYXJnaW4sZi5kYXRhLnN0b3B5KSxmLmRhdGEuc3RvcHg9TWF0aC5tYXgobS5kYXRhLnN0b3B4K2RzLmM0U2hhcGVNYXJnaW4sZi5kYXRhLnN0b3B4KSx0WT1NYXRoLm1heCh0WSxmLmRhdGEuc3RvcHgpLGVZPU1hdGgubWF4KGVZLGYuZGF0YS5zdG9weSl9fWNvbnN0IFNQdD17ZHJhd1BlcnNvbk9yU3lzdGVtQXJyYXk6VFB0LGRyYXdCb3VuZGFyeTpFUHQsc2V0Q29uZjp6ZHQsZHJhdzpmdW5jdGlvbihpLGEsZixwKXtkcz1PZSgpLmM0O2NvbnN0IHc9T2UoKS5zZWN1cml0eUxldmVsO2xldCBtO3c9PT0ic2FuZGJveCImJihtPXlyKCIjaSIrYSkpO2NvbnN0IGI9eXIodz09PSJzYW5kYm94Ij9tLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKTtsZXQgRT1wLmRiO3AuZGIuc2V0V3JhcChkcy53cmFwKSx4UHQ9RS5nZXRDNFNoYXBlSW5Sb3coKSwkZHQ9RS5nZXRDNEJvdW5kYXJ5SW5Sb3coKSxVdC5kZWJ1ZyhgQzoke0pTT04uc3RyaW5naWZ5KGRzLG51bGwsMil9YCk7Y29uc3QgXz13PT09InNhbmRib3giP2Iuc2VsZWN0KGBbaWQ9IiR7YX0iXWApOnlyKGBbaWQ9IiR7YX0iXWApO2IzLmluc2VydENvbXB1dGVySWNvbihfKSxiMy5pbnNlcnREYXRhYmFzZUljb24oXyksYjMuaW5zZXJ0Q2xvY2tJY29uKF8pO2xldCBBPW5ldyBrUHQocCk7QS5zZXREYXRhKGRzLmRpYWdyYW1NYXJnaW5YLGRzLmRpYWdyYW1NYXJnaW5YLGRzLmRpYWdyYW1NYXJnaW5ZLGRzLmRpYWdyYW1NYXJnaW5ZKSxBLmRhdGEud2lkdGhMaW1pdD1zY3JlZW4uYXZhaWxXaWR0aCx0WT1kcy5kaWFncmFtTWFyZ2luWCxlWT1kcy5kaWFncmFtTWFyZ2luWTtjb25zdCBJPXAuZGIuZ2V0VGl0bGUoKTtsZXQgQj1wLmRiLmdldEJvdW5kYXJ5cygiIik7X1B0KF8sIiIsQSxCLHApLGIzLmluc2VydEFycm93SGVhZChfKSxiMy5pbnNlcnRBcnJvd0VuZChfKSxiMy5pbnNlcnRBcnJvd0Nyb3NzSGVhZChfKSxiMy5pbnNlcnRBcnJvd0ZpbGxlZEhlYWQoXyksZUllKF8scC5kYi5nZXRSZWxzKCkscC5kYi5nZXRDNFNoYXBlLHApLEEuZGF0YS5zdG9weD10WSxBLmRhdGEuc3RvcHk9ZVk7Y29uc3QgTj1BLmRhdGE7bGV0IHo9Ti5zdG9weS1OLnN0YXJ0eSsyKmRzLmRpYWdyYW1NYXJnaW5ZO2NvbnN0IGV0PU4uc3RvcHgtTi5zdGFydHgrMipkcy5kaWFncmFtTWFyZ2luWDtJJiZfLmFwcGVuZCgidGV4dCIpLnRleHQoSSkuYXR0cigieCIsKE4uc3RvcHgtTi5zdGFydHgpLzItNCpkcy5kaWFncmFtTWFyZ2luWCkuYXR0cigieSIsTi5zdGFydHkrZHMuZGlhZ3JhbU1hcmdpblkpLGswKF8seixldCxkcy51c2VNYXhXaWR0aCk7Y29uc3Qgc3Q9ST82MDowO18uYXR0cigidmlld0JveCIsTi5zdGFydHgtZHMuZGlhZ3JhbU1hcmdpblgrIiAtIisoZHMuZGlhZ3JhbU1hcmdpblkrc3QpKyIgIitldCsiICIrKHorc3QpKSxVdC5kZWJ1ZygibW9kZWxzOiIsTil9fSxuSWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpnRGUsZGI6QmR0LHJlbmRlcmVyOlNQdCxzdHlsZXM6aT0+YC5wZXJzb24gewogICAgc3Ryb2tlOiAke2kucGVyc29uQm9yZGVyfTsKICAgIGZpbGw6ICR7aS5wZXJzb25Ca2d9OwogIH0KYCxpbml0Oih7YzQ6aSx3cmFwOmF9KT0+e1NQdC5zZXRDb25mKGkpLEJkdC5zZXRXcmFwKGEpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIHFkdD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKGFmLFFpLFRzLGthKXtmb3IoVHM9VHN8fHt9LGthPWFmLmxlbmd0aDtrYS0tO1RzW2FmW2thXV09UWkpO3JldHVybiBUc30sYT1bMSw0XSxmPVsxLDNdLHA9WzEsNV0sdz1bMSw4LDksMTAsMTEsMjcsMzQsMzYsMzgsNDIsNTgsODEsODIsODMsODQsODUsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzLDExOCwxMTksMTIwLDEyMV0sbT1bMiwyXSxiPVsxLDEzXSxFPVsxLDE0XSxfPVsxLDE1XSxBPVsxLDE2XSxJPVsxLDIzXSxCPVsxLDI1XSxOPVsxLDI2XSxSPVsxLDI3XSx6PVsxLDQ5XSxXPVsxLDQ4XSxldD1bMSwyOV0sc3Q9WzEsMzBdLGF0PVsxLDMxXSxidD1bMSwzMl0sbXQ9WzEsMzNdLHl0PVsxLDQ0XSxmdD1bMSw0Nl0sdXQ9WzEsNDJdLHZ0PVsxLDQ3XSxYPVsxLDQzXSxwdD1bMSw1MF0sVT1bMSw0NV0sVHQ9WzEsNTFdLG50PVsxLDUyXSxJdD1bMSwzNF0sT3Q9WzEsMzVdLEJ0PVsxLDM2XSxFdD1bMSwzN10sWj1bMSw1N10sQ3Q9WzEsOCw5LDEwLDExLDI3LDMyLDM0LDM2LDM4LDQyLDU4LDgxLDgyLDgzLDg0LDg1LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExMywxMTgsMTE5LDEyMCwxMjFdLHh0PVsxLDYxXSxIdD1bMSw2MF0sTGU9WzEsNjJdLEZ0PVs4LDksMTEsNzMsNzVdLGduPVsxLDg4XSxTZT1bMSw5M10sbWU9WzEsOTJdLFZlPVsxLDg5XSxZZT1bMSw4NV0sY2U9WzEsOTFdLGtlPVsxLDg3XSx6dD1bMSw5NF0scmU9WzEsOTBdLHNlPVsxLDk1XSxQZT1bMSw4Nl0sdGU9WzgsOSwxMCwxMSw3Myw3NV0sTWU9WzgsOSwxMCwxMSw0NCw3Myw3NV0sZGU9WzgsOSwxMCwxMSwyOSw0Miw0NCw0Niw0OCw1MCw1Miw1NCw1Niw1OCw2MSw2Myw2NSw2Niw2OCw3Myw3NSw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLG9uPVs4LDksMTEsNDIsNTgsNzMsNzUsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzXSxuaT1bNDIsNTgsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzXSxLcz1bMSwxMjFdLHdzPVsxLDEyMF0sZm89WzEsMTI4XSxYaT1bMSwxNDJdLEVyPVsxLDE0M10sWG49WzEsMTQ0XSxkaT1bMSwxNDVdLEVlPVsxLDEzMF0sS249WzEsMTMyXSxIZT1bMSwxMzZdLFRpPVsxLDEzN10scG49WzEsMTM4XSxFcz1bMSwxMzldLHFhPVsxLDE0MF0sTWE9WzEsMTQxXSxHcz1bMSwxNDZdLFBvPVsxLDE0N10sdnM9WzEsMTI2XSxydT1bMSwxMjddLHpzPVsxLDEzNF0sRHU9WzEsMTI5XSxwbT1bMSwxMzNdLHV3PVsxLDEzMV0sV3U9WzgsOSwxMCwxMSwyNywzMiwzNCwzNiwzOCw0Miw1OCw4MSw4Miw4Myw4NCw4NSw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTMsMTE4LDExOSwxMjAsMTIxXSx0aD1bMSwxNDldLEZhPVs4LDksMTFdLE1sPVs4LDksMTAsMTEsMTQsNDIsNTgsODYsMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzXSxoYT1bMSwxNjldLGJjPVsxLDE2NV0sQ2M9WzEsMTY2XSxwYT1bMSwxNzBdLERhPVsxLDE2N10sSGE9WzEsMTY4XSxEbD1bNzUsMTEzLDExNl0sX2M9WzgsOSwxMCwxMSwxMiwxNCwyNywyOSwzMiw0Miw1OCw3Myw4MSw4Miw4Myw4NCw4NSw4Niw4NywxMDIsMTA2LDEwOCwxMTEsMTEyLDExM10sbHc9WzEwLDEwM10sZWg9WzMxLDQ3LDQ5LDUxLDUzLDU1LDYwLDYyLDY0LDY1LDY3LDY5LDExMywxMTQsMTE1XSxlZD1bMSwyMzVdLGpkPVsxLDIzM10sbmQ9WzEsMjM3XSwkZD1bMSwyMzFdLEEwPVsxLDIzMl0sQmk9WzEsMjM0XSxjbj1bMSwyMzZdLGtyPVsxLDIzOF0sRWk9WzEsMjU1XSxKbz1bOCw5LDExLDEwM10sd2M9WzgsOSwxMCwxMSw1OCw4MSwxMDIsMTAzLDEwNiwxMDcsMTA4LDEwOV0scmY9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGdyYXBoQ29uZmlnOjQsZG9jdW1lbnQ6NSxsaW5lOjYsc3RhdGVtZW50OjcsU0VNSTo4LE5FV0xJTkU6OSxTUEFDRToxMCxFT0Y6MTEsR1JBUEg6MTIsTk9ESVI6MTMsRElSOjE0LEZpcnN0U3RtdFNlcGVyYXRvcjoxNSxlbmRpbmc6MTYsZW5kVG9rZW46MTcsc3BhY2VMaXN0OjE4LHNwYWNlTGlzdE5ld2xpbmU6MTksdmVydGljZVN0YXRlbWVudDoyMCxzZXBhcmF0b3I6MjEsc3R5bGVTdGF0ZW1lbnQ6MjIsbGlua1N0eWxlU3RhdGVtZW50OjIzLGNsYXNzRGVmU3RhdGVtZW50OjI0LGNsYXNzU3RhdGVtZW50OjI1LGNsaWNrU3RhdGVtZW50OjI2LHN1YmdyYXBoOjI3LHRleHROb1RhZ3M6MjgsU1FTOjI5LHRleHQ6MzAsU1FFOjMxLGVuZDozMixkaXJlY3Rpb246MzMsYWNjX3RpdGxlOjM0LGFjY190aXRsZV92YWx1ZTozNSxhY2NfZGVzY3I6MzYsYWNjX2Rlc2NyX3ZhbHVlOjM3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzgsbGluazozOSxub2RlOjQwLHN0eWxlZFZlcnRleDo0MSxBTVA6NDIsdmVydGV4OjQzLFNUWUxFX1NFUEFSQVRPUjo0NCxpZFN0cmluZzo0NSxET1VCTEVDSVJDTEVTVEFSVDo0NixET1VCTEVDSVJDTEVFTkQ6NDcsUFM6NDgsUEU6NDksIigtIjo1MCwiLSkiOjUxLFNUQURJVU1TVEFSVDo1MixTVEFESVVNRU5EOjUzLFNVQlJPVVRJTkVTVEFSVDo1NCxTVUJST1VUSU5FRU5EOjU1LFZFUlRFWF9XSVRIX1BST1BTX1NUQVJUOjU2LCJOT0RFX1NUUklOR1tmaWVsZF0iOjU3LENPTE9OOjU4LCJOT0RFX1NUUklOR1t2YWx1ZV0iOjU5LFBJUEU6NjAsQ1lMSU5ERVJTVEFSVDo2MSxDWUxJTkRFUkVORDo2MixESUFNT05EX1NUQVJUOjYzLERJQU1PTkRfU1RPUDo2NCxUQUdFTkQ6NjUsVFJBUFNUQVJUOjY2LFRSQVBFTkQ6NjcsSU5WVFJBUFNUQVJUOjY4LElOVlRSQVBFTkQ6NjksbGlua1N0YXRlbWVudDo3MCxhcnJvd1RleHQ6NzEsVEVTVFNUUjo3MixTVEFSVF9MSU5LOjczLGVkZ2VUZXh0Ojc0LExJTks6NzUsZWRnZVRleHRUb2tlbjo3NixTVFI6NzcsTURfU1RSOjc4LHRleHRUb2tlbjo3OSxrZXl3b3Jkczo4MCxTVFlMRTo4MSxMSU5LU1RZTEU6ODIsQ0xBU1NERUY6ODMsQ0xBU1M6ODQsQ0xJQ0s6ODUsRE9XTjo4NixVUDo4Nyx0ZXh0Tm9UYWdzVG9rZW46ODgsc3R5bGVzT3B0Ojg5LCJpZFN0cmluZ1t2ZXJ0ZXhdIjo5MCwiaWRTdHJpbmdbY2xhc3NdIjo5MSxDQUxMQkFDS05BTUU6OTIsQ0FMTEJBQ0tBUkdTOjkzLEhSRUY6OTQsTElOS19UQVJHRVQ6OTUsIlNUUltsaW5rXSI6OTYsIlNUUlt0b29sdGlwXSI6OTcsYWxwaGFOdW06OTgsREVGQVVMVDo5OSxudW1MaXN0OjEwMCxJTlRFUlBPTEFURToxMDEsTlVNOjEwMixDT01NQToxMDMsc3R5bGU6MTA0LHN0eWxlQ29tcG9uZW50OjEwNSxOT0RFX1NUUklORzoxMDYsVU5JVDoxMDcsQlJLVDoxMDgsUENUOjEwOSxpZFN0cmluZ1Rva2VuOjExMCxNSU5VUzoxMTEsTVVMVDoxMTIsVU5JQ09ERV9URVhUOjExMyxURVhUOjExNCxUQUdTVEFSVDoxMTUsRURHRV9URVhUOjExNixhbHBoYU51bVRva2VuOjExNyxkaXJlY3Rpb25fdGI6MTE4LGRpcmVjdGlvbl9idDoxMTksZGlyZWN0aW9uX3JsOjEyMCxkaXJlY3Rpb25fbHI6MTIxLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw4OiJTRU1JIiw5OiJORVdMSU5FIiwxMDoiU1BBQ0UiLDExOiJFT0YiLDEyOiJHUkFQSCIsMTM6Ik5PRElSIiwxNDoiRElSIiwyNzoic3ViZ3JhcGgiLDI5OiJTUVMiLDMxOiJTUUUiLDMyOiJlbmQiLDM0OiJhY2NfdGl0bGUiLDM1OiJhY2NfdGl0bGVfdmFsdWUiLDM2OiJhY2NfZGVzY3IiLDM3OiJhY2NfZGVzY3JfdmFsdWUiLDM4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiw0MjoiQU1QIiw0NDoiU1RZTEVfU0VQQVJBVE9SIiw0NjoiRE9VQkxFQ0lSQ0xFU1RBUlQiLDQ3OiJET1VCTEVDSVJDTEVFTkQiLDQ4OiJQUyIsNDk6IlBFIiw1MDoiKC0iLDUxOiItKSIsNTI6IlNUQURJVU1TVEFSVCIsNTM6IlNUQURJVU1FTkQiLDU0OiJTVUJST1VUSU5FU1RBUlQiLDU1OiJTVUJST1VUSU5FRU5EIiw1NjoiVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlQiLDU3OiJOT0RFX1NUUklOR1tmaWVsZF0iLDU4OiJDT0xPTiIsNTk6Ik5PREVfU1RSSU5HW3ZhbHVlXSIsNjA6IlBJUEUiLDYxOiJDWUxJTkRFUlNUQVJUIiw2MjoiQ1lMSU5ERVJFTkQiLDYzOiJESUFNT05EX1NUQVJUIiw2NDoiRElBTU9ORF9TVE9QIiw2NToiVEFHRU5EIiw2NjoiVFJBUFNUQVJUIiw2NzoiVFJBUEVORCIsNjg6IklOVlRSQVBTVEFSVCIsNjk6IklOVlRSQVBFTkQiLDcyOiJURVNUU1RSIiw3MzoiU1RBUlRfTElOSyIsNzU6IkxJTksiLDc3OiJTVFIiLDc4OiJNRF9TVFIiLDgxOiJTVFlMRSIsODI6IkxJTktTVFlMRSIsODM6IkNMQVNTREVGIiw4NDoiQ0xBU1MiLDg1OiJDTElDSyIsODY6IkRPV04iLDg3OiJVUCIsOTA6ImlkU3RyaW5nW3ZlcnRleF0iLDkxOiJpZFN0cmluZ1tjbGFzc10iLDkyOiJDQUxMQkFDS05BTUUiLDkzOiJDQUxMQkFDS0FSR1MiLDk0OiJIUkVGIiw5NToiTElOS19UQVJHRVQiLDk2OiJTVFJbbGlua10iLDk3OiJTVFJbdG9vbHRpcF0iLDk5OiJERUZBVUxUIiwxMDE6IklOVEVSUE9MQVRFIiwxMDI6Ik5VTSIsMTAzOiJDT01NQSIsMTA2OiJOT0RFX1NUUklORyIsMTA3OiJVTklUIiwxMDg6IkJSS1QiLDEwOToiUENUIiwxMTE6Ik1JTlVTIiwxMTI6Ik1VTFQiLDExMzoiVU5JQ09ERV9URVhUIiwxMTQ6IlRFWFQiLDExNToiVEFHU1RBUlQiLDExNjoiRURHRV9URVhUIiwxMTg6ImRpcmVjdGlvbl90YiIsMTE5OiJkaXJlY3Rpb25fYnQiLDEyMDoiZGlyZWN0aW9uX3JsIiwxMjE6ImRpcmVjdGlvbl9sciJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbNSwwXSxbNSwyXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwzXSxbMTYsMl0sWzE2LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNSwxXSxbMTUsMV0sWzE1LDJdLFsxOSwyXSxbMTksMl0sWzE5LDFdLFsxOSwxXSxbMTgsMl0sWzE4LDFdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDldLFs3LDZdLFs3LDRdLFs3LDFdLFs3LDJdLFs3LDJdLFs3LDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFsyMCwzXSxbMjAsNF0sWzIwLDJdLFsyMCwxXSxbNDAsMV0sWzQwLDVdLFs0MSwxXSxbNDEsM10sWzQzLDRdLFs0Myw0XSxbNDMsNl0sWzQzLDRdLFs0Myw0XSxbNDMsNF0sWzQzLDhdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0Myw2XSxbNDMsNF0sWzQzLDRdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0MywxXSxbMzksMl0sWzM5LDNdLFszOSwzXSxbMzksMV0sWzM5LDNdLFs3NCwxXSxbNzQsMl0sWzc0LDFdLFs3NCwxXSxbNzAsMV0sWzcxLDNdLFszMCwxXSxbMzAsMl0sWzMwLDFdLFszMCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFsyOCwxXSxbMjgsMl0sWzI4LDFdLFsyOCwxXSxbMjQsNV0sWzI1LDVdLFsyNiwyXSxbMjYsNF0sWzI2LDNdLFsyNiw1XSxbMjYsM10sWzI2LDVdLFsyNiw1XSxbMjYsN10sWzI2LDJdLFsyNiw0XSxbMjYsMl0sWzI2LDRdLFsyNiw0XSxbMjYsNl0sWzIyLDVdLFsyMyw1XSxbMjMsNV0sWzIzLDldLFsyMyw5XSxbMjMsN10sWzIzLDddLFsxMDAsMV0sWzEwMCwzXSxbODksMV0sWzg5LDNdLFsxMDQsMV0sWzEwNCwyXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs3NiwxXSxbNzYsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFs0NSwxXSxbNDUsMl0sWzk4LDFdLFs5OCwyXSxbMzMsMV0sWzMzLDFdLFszMywxXSxbMzMsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oUWksVHMsa2EseGksWWMsQ2UsdnApe3ZhciBCZT1DZS5sZW5ndGgtMTtzd2l0Y2goWWMpe2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOighQXJyYXkuaXNBcnJheShDZVtCZV0pfHxDZVtCZV0ubGVuZ3RoPjApJiZDZVtCZS0xXS5wdXNoKENlW0JlXSksdGhpcy4kPUNlW0JlLTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDE3Njp0aGlzLiQ9Q2VbQmVdO2JyZWFrO2Nhc2UgMTE6eGkuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD0iVEIiO2JyZWFrO2Nhc2UgMTI6eGkuc2V0RGlyZWN0aW9uKENlW0JlLTFdKSx0aGlzLiQ9Q2VbQmUtMV07YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9Q2VbQmUtMV0ubm9kZXM7YnJlYWs7Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzA6Y2FzZSAzMTpjYXNlIDMyOnRoaXMuJD1bXTticmVhaztjYXNlIDMzOnRoaXMuJD14aS5hZGRTdWJHcmFwaChDZVtCZS02XSxDZVtCZS0xXSxDZVtCZS00XSk7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9eGkuYWRkU3ViR3JhcGgoQ2VbQmUtM10sQ2VbQmUtMV0sQ2VbQmUtM10pO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPXhpLmFkZFN1YkdyYXBoKHZvaWQgMCxDZVtCZS0xXSx2b2lkIDApO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPUNlW0JlXS50cmltKCkseGkuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDM4OmNhc2UgMzk6dGhpcy4kPUNlW0JlXS50cmltKCkseGkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDQzOnhpLmFkZExpbmsoQ2VbQmUtMl0uc3RtdCxDZVtCZV0sQ2VbQmUtMV0pLHRoaXMuJD17c3RtdDpDZVtCZV0sbm9kZXM6Q2VbQmVdLmNvbmNhdChDZVtCZS0yXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDQ6eGkuYWRkTGluayhDZVtCZS0zXS5zdG10LENlW0JlLTFdLENlW0JlLTJdKSx0aGlzLiQ9e3N0bXQ6Q2VbQmUtMV0sbm9kZXM6Q2VbQmUtMV0uY29uY2F0KENlW0JlLTNdLm5vZGVzKX07YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9e3N0bXQ6Q2VbQmUtMV0sbm9kZXM6Q2VbQmUtMV19O2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXtzdG10OkNlW0JlXSxub2RlczpDZVtCZV19O2JyZWFrO2Nhc2UgNDc6dGhpcy4kPVtDZVtCZV1dO2JyZWFrO2Nhc2UgNDg6dGhpcy4kPUNlW0JlLTRdLmNvbmNhdChDZVtCZV0pO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPUNlW0JlXTticmVhaztjYXNlIDUwOnRoaXMuJD1DZVtCZS0yXSx4aS5zZXRDbGFzcyhDZVtCZS0yXSxDZVtCZV0pO2JyZWFrO2Nhc2UgNTE6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwic3F1YXJlIik7YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9Q2VbQmUtM10seGkuYWRkVmVydGV4KENlW0JlLTNdLENlW0JlLTFdLCJkb3VibGVjaXJjbGUiKTticmVhaztjYXNlIDUzOnRoaXMuJD1DZVtCZS01XSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtNV0sQ2VbQmUtMl0sImNpcmNsZSIpO2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwiZWxsaXBzZSIpO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwic3RhZGl1bSIpO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwic3Vicm91dGluZSIpO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPUNlW0JlLTddLHhpLmFkZFZlcnRleChDZVtCZS03XSxDZVtCZS0xXSwicmVjdCIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsT2JqZWN0LmZyb21FbnRyaWVzKFtbQ2VbQmUtNV0sQ2VbQmUtM11dXSkpO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwiY3lsaW5kZXIiKTticmVhaztjYXNlIDU5OnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sInJvdW5kIik7YnJlYWs7Y2FzZSA2MDp0aGlzLiQ9Q2VbQmUtM10seGkuYWRkVmVydGV4KENlW0JlLTNdLENlW0JlLTFdLCJkaWFtb25kIik7YnJlYWs7Y2FzZSA2MTp0aGlzLiQ9Q2VbQmUtNV0seGkuYWRkVmVydGV4KENlW0JlLTVdLENlW0JlLTJdLCJoZXhhZ29uIik7YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9Q2VbQmUtM10seGkuYWRkVmVydGV4KENlW0JlLTNdLENlW0JlLTFdLCJvZGQiKTticmVhaztjYXNlIDYzOnRoaXMuJD1DZVtCZS0zXSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtM10sQ2VbQmUtMV0sInRyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwiaW52X3RyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwibGVhbl9yaWdodCIpO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPUNlW0JlLTNdLHhpLmFkZFZlcnRleChDZVtCZS0zXSxDZVtCZS0xXSwibGVhbl9sZWZ0Iik7YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9Q2VbQmVdLHhpLmFkZFZlcnRleChDZVtCZV0pO2JyZWFrO2Nhc2UgNjg6Q2VbQmUtMV0udGV4dD1DZVtCZV0sdGhpcy4kPUNlW0JlLTFdO2JyZWFrO2Nhc2UgNjk6Y2FzZSA3MDpDZVtCZS0yXS50ZXh0PUNlW0JlLTFdLHRoaXMuJD1DZVtCZS0yXTticmVhaztjYXNlIDcxOnRoaXMuJD1DZVtCZV07YnJlYWs7Y2FzZSA3Mjp2YXIgQmY9eGkuZGVzdHJ1Y3RMaW5rKENlW0JlXSxDZVtCZS0yXSk7dGhpcy4kPXt0eXBlOkJmLnR5cGUsc3Ryb2tlOkJmLnN0cm9rZSxsZW5ndGg6QmYubGVuZ3RoLHRleHQ6Q2VbQmUtMV19O2JyZWFrO2Nhc2UgNzM6dGhpcy4kPXt0ZXh0OkNlW0JlXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9e3RleHQ6Q2VbQmUtMV0udGV4dCsiIitDZVtCZV0sdHlwZTpDZVtCZS0xXS50eXBlfTticmVhaztjYXNlIDc1OnRoaXMuJD17dGV4dDpDZVtCZV0sdHlwZToic3RyaW5nIn07YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9e3RleHQ6Q2VbQmVdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSA3Nzp2YXIgQmY9eGkuZGVzdHJ1Y3RMaW5rKENlW0JlXSk7dGhpcy4kPXt0eXBlOkJmLnR5cGUsc3Ryb2tlOkJmLnN0cm9rZSxsZW5ndGg6QmYubGVuZ3RofTticmVhaztjYXNlIDc4OnRoaXMuJD1DZVtCZS0xXTticmVhaztjYXNlIDc5OnRoaXMuJD17dGV4dDpDZVtCZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgODA6dGhpcy4kPXt0ZXh0OkNlW0JlLTFdLnRleHQrIiIrQ2VbQmVdLHR5cGU6Q2VbQmUtMV0udHlwZX07YnJlYWs7Y2FzZSA4MTp0aGlzLiQ9e3RleHQ6Q2VbQmVdLHR5cGU6InN0cmluZyJ9O2JyZWFrO2Nhc2UgODI6Y2FzZSA5Nzp0aGlzLiQ9e3RleHQ6Q2VbQmVdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSA5NDp0aGlzLiQ9e3RleHQ6Q2VbQmVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDk1OnRoaXMuJD17dGV4dDpDZVtCZS0xXS50ZXh0KyIiK0NlW0JlXSx0eXBlOkNlW0JlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgOTY6dGhpcy4kPXt0ZXh0OkNlW0JlXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA5ODp0aGlzLiQ9Q2VbQmUtNF0seGkuYWRkQ2xhc3MoQ2VbQmUtMl0sQ2VbQmVdKTticmVhaztjYXNlIDk5OnRoaXMuJD1DZVtCZS00XSx4aS5zZXRDbGFzcyhDZVtCZS0yXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTAwOmNhc2UgMTA4OnRoaXMuJD1DZVtCZS0xXSx4aS5zZXRDbGlja0V2ZW50KENlW0JlLTFdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMDE6Y2FzZSAxMDk6dGhpcy4kPUNlW0JlLTNdLHhpLnNldENsaWNrRXZlbnQoQ2VbQmUtM10sQ2VbQmUtMl0pLHhpLnNldFRvb2x0aXAoQ2VbQmUtM10sQ2VbQmVdKTticmVhaztjYXNlIDEwMjp0aGlzLiQ9Q2VbQmUtMl0seGkuc2V0Q2xpY2tFdmVudChDZVtCZS0yXSxDZVtCZS0xXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTAzOnRoaXMuJD1DZVtCZS00XSx4aS5zZXRDbGlja0V2ZW50KENlW0JlLTRdLENlW0JlLTNdLENlW0JlLTJdKSx4aS5zZXRUb29sdGlwKENlW0JlLTRdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMDQ6dGhpcy4kPUNlW0JlLTJdLHhpLnNldExpbmsoQ2VbQmUtMl0sQ2VbQmVdKTticmVhaztjYXNlIDEwNTp0aGlzLiQ9Q2VbQmUtNF0seGkuc2V0TGluayhDZVtCZS00XSxDZVtCZS0yXSkseGkuc2V0VG9vbHRpcChDZVtCZS00XSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTA2OnRoaXMuJD1DZVtCZS00XSx4aS5zZXRMaW5rKENlW0JlLTRdLENlW0JlLTJdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMDc6dGhpcy4kPUNlW0JlLTZdLHhpLnNldExpbmsoQ2VbQmUtNl0sQ2VbQmUtNF0sQ2VbQmVdKSx4aS5zZXRUb29sdGlwKENlW0JlLTZdLENlW0JlLTJdKTticmVhaztjYXNlIDExMDp0aGlzLiQ9Q2VbQmUtMV0seGkuc2V0TGluayhDZVtCZS0xXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTExOnRoaXMuJD1DZVtCZS0zXSx4aS5zZXRMaW5rKENlW0JlLTNdLENlW0JlLTJdKSx4aS5zZXRUb29sdGlwKENlW0JlLTNdLENlW0JlXSk7YnJlYWs7Y2FzZSAxMTI6dGhpcy4kPUNlW0JlLTNdLHhpLnNldExpbmsoQ2VbQmUtM10sQ2VbQmUtMl0sQ2VbQmVdKTticmVhaztjYXNlIDExMzp0aGlzLiQ9Q2VbQmUtNV0seGkuc2V0TGluayhDZVtCZS01XSxDZVtCZS00XSxDZVtCZV0pLHhpLnNldFRvb2x0aXAoQ2VbQmUtNV0sQ2VbQmUtMl0pO2JyZWFrO2Nhc2UgMTE0OnRoaXMuJD1DZVtCZS00XSx4aS5hZGRWZXJ0ZXgoQ2VbQmUtMl0sdm9pZCAwLHZvaWQgMCxDZVtCZV0pO2JyZWFrO2Nhc2UgMTE1OnRoaXMuJD1DZVtCZS00XSx4aS51cGRhdGVMaW5rKFtDZVtCZS0yXV0sQ2VbQmVdKTticmVhaztjYXNlIDExNjp0aGlzLiQ9Q2VbQmUtNF0seGkudXBkYXRlTGluayhDZVtCZS0yXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTE3OnRoaXMuJD1DZVtCZS04XSx4aS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW0NlW0JlLTZdXSxDZVtCZS0yXSkseGkudXBkYXRlTGluayhbQ2VbQmUtNl1dLENlW0JlXSk7YnJlYWs7Y2FzZSAxMTg6dGhpcy4kPUNlW0JlLThdLHhpLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShDZVtCZS02XSxDZVtCZS0yXSkseGkudXBkYXRlTGluayhDZVtCZS02XSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTE5OnRoaXMuJD1DZVtCZS02XSx4aS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW0NlW0JlLTRdXSxDZVtCZV0pO2JyZWFrO2Nhc2UgMTIwOnRoaXMuJD1DZVtCZS02XSx4aS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoQ2VbQmUtNF0sQ2VbQmVdKTticmVhaztjYXNlIDEyMTpjYXNlIDEyMzp0aGlzLiQ9W0NlW0JlXV07YnJlYWs7Y2FzZSAxMjI6Y2FzZSAxMjQ6Q2VbQmUtMl0ucHVzaChDZVtCZV0pLHRoaXMuJD1DZVtCZS0yXTticmVhaztjYXNlIDEyNjp0aGlzLiQ9Q2VbQmUtMV0rQ2VbQmVdO2JyZWFrO2Nhc2UgMTc0OnRoaXMuJD1DZVtCZV07YnJlYWs7Y2FzZSAxNzU6dGhpcy4kPUNlW0JlLTFdKyIiK0NlW0JlXTticmVhaztjYXNlIDE3Nzp0aGlzLiQ9Q2VbQmUtMV0rIiIrQ2VbQmVdO2JyZWFrO2Nhc2UgMTc4OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiVEIifTticmVhaztjYXNlIDE3OTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAxODA6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJSTCJ9O2JyZWFrO2Nhc2UgMTgxOnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiTFIifTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw5OmEsMTA6ZiwxMjpwfSx7MTpbM119LGkodyxtLHs1OjZ9KSx7NDo3LDk6YSwxMDpmLDEyOnB9LHs0OjgsOTphLDEwOmYsMTI6cH0sezEzOlsxLDldLDE0OlsxLDEwXX0sezE6WzIsMV0sNjoxMSw3OjEyLDg6Yiw5OkUsMTA6XywxMTpBLDIwOjE3LDIyOjE4LDIzOjE5LDI0OjIwLDI1OjIxLDI2OjIyLDI3OkksMzM6MjQsMzQ6QiwzNjpOLDM4OlIsNDA6MjgsNDE6MzgsNDI6eiw0MzozOSw0NTo0MCw1ODpXLDgxOmV0LDgyOnN0LDgzOmF0LDg0OmJ0LDg1Om10LDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6VHQsMTEzOm50LDExODpJdCwxMTk6T3QsMTIwOkJ0LDEyMTpFdH0saSh3LFsyLDldKSxpKHcsWzIsMTBdKSxpKHcsWzIsMTFdKSx7ODpbMSw1NF0sOTpbMSw1NV0sMTA6WiwxNTo1MywxODo1Nn0saShDdCxbMiwzXSksaShDdCxbMiw0XSksaShDdCxbMiw1XSksaShDdCxbMiw2XSksaShDdCxbMiw3XSksaShDdCxbMiw4XSksezg6eHQsOTpIdCwxMTpMZSwyMTo1OCwzOTo1OSw3MDo2Myw3MzpbMSw2NF0sNzU6WzEsNjVdfSx7ODp4dCw5Okh0LDExOkxlLDIxOjY2fSx7ODp4dCw5Okh0LDExOkxlLDIxOjY3fSx7ODp4dCw5Okh0LDExOkxlLDIxOjY4fSx7ODp4dCw5Okh0LDExOkxlLDIxOjY5fSx7ODp4dCw5Okh0LDExOkxlLDIxOjcwfSx7ODp4dCw5Okh0LDEwOlsxLDcxXSwxMTpMZSwyMTo3Mn0saShDdCxbMiwzNl0pLHszNTpbMSw3M119LHszNzpbMSw3NF19LGkoQ3QsWzIsMzldKSxpKEZ0LFsyLDQ2XSx7MTg6NzUsMTA6Wn0pLHsxMDpbMSw3Nl19LHsxMDpbMSw3N119LHsxMDpbMSw3OF19LHsxMDpbMSw3OV19LHsxNDpnbiw0MjpTZSw1ODptZSw3NzpbMSw4M10sODY6VmUsOTI6WzEsODBdLDk0OlsxLDgxXSw5ODo4MiwxMDI6WWUsMTAzOmNlLDEwNjprZSwxMDg6enQsMTExOnJlLDExMjpzZSwxMTM6UGUsMTE3Ojg0fSxpKEN0LFsyLDE3OF0pLGkoQ3QsWzIsMTc5XSksaShDdCxbMiwxODBdKSxpKEN0LFsyLDE4MV0pLGkodGUsWzIsNDddKSxpKHRlLFsyLDQ5XSx7NDQ6WzEsOTZdfSksaShNZSxbMiw2N10sezExMDoxMDksMjk6WzEsOTddLDQyOnosNDY6WzEsOThdLDQ4OlsxLDk5XSw1MDpbMSwxMDBdLDUyOlsxLDEwMV0sNTQ6WzEsMTAyXSw1NjpbMSwxMDNdLDU4OlcsNjE6WzEsMTA0XSw2MzpbMSwxMDVdLDY1OlsxLDEwNl0sNjY6WzEsMTA3XSw2ODpbMSwxMDhdLDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMTpVLDExMjpUdCwxMTM6bnR9KSxpKGRlLFsyLDE3NF0pLGkoZGUsWzIsMTM1XSksaShkZSxbMiwxMzZdKSxpKGRlLFsyLDEzN10pLGkoZGUsWzIsMTM4XSksaShkZSxbMiwxMzldKSxpKGRlLFsyLDE0MF0pLGkoZGUsWzIsMTQxXSksaShkZSxbMiwxNDJdKSxpKGRlLFsyLDE0M10pLGkoZGUsWzIsMTQ0XSksaShkZSxbMiwxNDVdKSxpKHcsWzIsMTJdKSxpKHcsWzIsMThdKSxpKHcsWzIsMTldKSx7OTpbMSwxMTBdfSxpKG9uLFsyLDI2XSx7MTg6MTExLDEwOlp9KSxpKEN0LFsyLDI3XSksezQwOjExMiw0MTozOCw0Mjp6LDQzOjM5LDQ1OjQwLDU4OlcsODY6eXQsOTk6ZnQsMTAyOnV0LDEwMzp2dCwxMDY6WCwxMDg6cHQsMTEwOjQxLDExMTpVLDExMjpUdCwxMTM6bnR9LGkoQ3QsWzIsNDBdKSxpKEN0LFsyLDQxXSksaShDdCxbMiw0Ml0pLGkobmksWzIsNzFdLHs3MToxMTMsNjA6WzEsMTE1XSw3MjpbMSwxMTRdfSksezc0OjExNiw3NjoxMTcsNzc6WzEsMTE4XSw3ODpbMSwxMTldLDExMzpLcywxMTY6d3N9LGkoWzQyLDU4LDYwLDcyLDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10sWzIsNzddKSxpKEN0LFsyLDI4XSksaShDdCxbMiwyOV0pLGkoQ3QsWzIsMzBdKSxpKEN0LFsyLDMxXSksaShDdCxbMiwzMl0pLHsxMDpmbywxMjpYaSwxNDpFciwyNzpYbiwyODoxMjIsMzI6ZGksNDI6RWUsNTg6S24sNzM6SGUsNzc6WzEsMTI0XSw3ODpbMSwxMjVdLDgwOjEzNSw4MTpUaSw4Mjpwbiw4MzpFcyw4NDpxYSw4NTpNYSw4NjpHcyw4NzpQbyw4ODoxMjMsMTAyOnZzLDEwNjpydSwxMDg6enMsMTExOkR1LDExMjpwbSwxMTM6dXd9LGkoV3UsbSx7NToxNDh9KSxpKEN0LFsyLDM3XSksaShDdCxbMiwzOF0pLGkoRnQsWzIsNDVdLHs0Mjp0aH0pLHs0Mjp6LDQ1OjE1MCw1ODpXLDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6VHQsMTEzOm50fSx7OTk6WzEsMTUxXSwxMDA6MTUyLDEwMjpbMSwxNTNdfSx7NDI6eiw0NToxNTQsNTg6Vyw4Njp5dCw5OTpmdCwxMDI6dXQsMTAzOnZ0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOlR0LDExMzpudH0sezQyOnosNDU6MTU1LDU4OlcsODY6eXQsOTk6ZnQsMTAyOnV0LDEwMzp2dCwxMDY6WCwxMDg6cHQsMTEwOjQxLDExMTpVLDExMjpUdCwxMTM6bnR9LGkoRmEsWzIsMTAwXSx7MTA6WzEsMTU2XSw5MzpbMSwxNTddfSksezc3OlsxLDE1OF19LGkoRmEsWzIsMTA4XSx7MTE3OjE2MCwxMDpbMSwxNTldLDE0OmduLDQyOlNlLDU4Om1lLDg2OlZlLDEwMjpZZSwxMDM6Y2UsMTA2OmtlLDEwODp6dCwxMTE6cmUsMTEyOnNlLDExMzpQZX0pLGkoRmEsWzIsMTEwXSx7MTA6WzEsMTYxXX0pLGkoTWwsWzIsMTc2XSksaShNbCxbMiwxNjNdKSxpKE1sLFsyLDE2NF0pLGkoTWwsWzIsMTY1XSksaShNbCxbMiwxNjZdKSxpKE1sLFsyLDE2N10pLGkoTWwsWzIsMTY4XSksaShNbCxbMiwxNjldKSxpKE1sLFsyLDE3MF0pLGkoTWwsWzIsMTcxXSksaShNbCxbMiwxNzJdKSxpKE1sLFsyLDE3M10pLHs0Mjp6LDQ1OjE2Miw1ODpXLDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6VHQsMTEzOm50fSx7MzA6MTYzLDY1OmhhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezMwOjE3MSw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHszMDoxNzMsNDg6WzEsMTcyXSw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHszMDoxNzQsNjU6aGEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7MzA6MTc1LDY1OmhhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezMwOjE3Niw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHsxMDY6WzEsMTc3XX0sezMwOjE3OCw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHszMDoxNzksNjM6WzEsMTgwXSw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHszMDoxODEsNjU6aGEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7MzA6MTgyLDY1OmhhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezMwOjE4Myw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LGkoZGUsWzIsMTc1XSksaSh3LFsyLDIwXSksaShvbixbMiwyNV0pLGkoRnQsWzIsNDNdLHsxODoxODQsMTA6Wn0pLGkobmksWzIsNjhdLHsxMDpbMSwxODVdfSksezEwOlsxLDE4Nl19LHszMDoxODcsNjU6aGEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7NzU6WzEsMTg4XSw3NjoxODksMTEzOktzLDExNjp3c30saShEbCxbMiw3M10pLGkoRGwsWzIsNzVdKSxpKERsLFsyLDc2XSksaShEbCxbMiwxNjFdKSxpKERsLFsyLDE2Ml0pLHs4Onh0LDk6SHQsMTA6Zm8sMTE6TGUsMTI6WGksMTQ6RXIsMjE6MTkxLDI3OlhuLDI5OlsxLDE5MF0sMzI6ZGksNDI6RWUsNTg6S24sNzM6SGUsODA6MTM1LDgxOlRpLDgyOnBuLDgzOkVzLDg0OnFhLDg1Ok1hLDg2OkdzLDg3OlBvLDg4OjE5MiwxMDI6dnMsMTA2OnJ1LDEwODp6cywxMTE6RHUsMTEyOnBtLDExMzp1d30saShfYyxbMiw5NF0pLGkoX2MsWzIsOTZdKSxpKF9jLFsyLDk3XSksaShfYyxbMiwxNTBdKSxpKF9jLFsyLDE1MV0pLGkoX2MsWzIsMTUyXSksaShfYyxbMiwxNTNdKSxpKF9jLFsyLDE1NF0pLGkoX2MsWzIsMTU1XSksaShfYyxbMiwxNTZdKSxpKF9jLFsyLDE1N10pLGkoX2MsWzIsMTU4XSksaShfYyxbMiwxNTldKSxpKF9jLFsyLDE2MF0pLGkoX2MsWzIsODNdKSxpKF9jLFsyLDg0XSksaShfYyxbMiw4NV0pLGkoX2MsWzIsODZdKSxpKF9jLFsyLDg3XSksaShfYyxbMiw4OF0pLGkoX2MsWzIsODldKSxpKF9jLFsyLDkwXSksaShfYyxbMiw5MV0pLGkoX2MsWzIsOTJdKSxpKF9jLFsyLDkzXSksezY6MTEsNzoxMiw4OmIsOTpFLDEwOl8sMTE6QSwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpJLDMyOlsxLDE5M10sMzM6MjQsMzQ6QiwzNjpOLDM4OlIsNDA6MjgsNDE6MzgsNDI6eiw0MzozOSw0NTo0MCw1ODpXLDgxOmV0LDgyOnN0LDgzOmF0LDg0OmJ0LDg1Om10LDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6VHQsMTEzOm50LDExODpJdCwxMTk6T3QsMTIwOkJ0LDEyMTpFdH0sezEwOlosMTg6MTk0fSx7MTA6WzEsMTk1XSw0Mjp6LDU4OlcsODY6eXQsOTk6ZnQsMTAyOnV0LDEwMzp2dCwxMDY6WCwxMDg6cHQsMTEwOjEwOSwxMTE6VSwxMTI6VHQsMTEzOm50fSx7MTA6WzEsMTk2XX0sezEwOlsxLDE5N10sMTAzOlsxLDE5OF19LGkobHcsWzIsMTIxXSksezEwOlsxLDE5OV0sNDI6eiw1ODpXLDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDoxMDksMTExOlUsMTEyOlR0LDExMzpudH0sezEwOlsxLDIwMF0sNDI6eiw1ODpXLDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDoxMDksMTExOlUsMTEyOlR0LDExMzpudH0sezc3OlsxLDIwMV19LGkoRmEsWzIsMTAyXSx7MTA6WzEsMjAyXX0pLGkoRmEsWzIsMTA0XSx7MTA6WzEsMjAzXX0pLHs3NzpbMSwyMDRdfSxpKE1sLFsyLDE3N10pLHs3NzpbMSwyMDVdLDk1OlsxLDIwNl19LGkodGUsWzIsNTBdLHsxMTA6MTA5LDQyOnosNTg6Vyw4Njp5dCw5OTpmdCwxMDI6dXQsMTAzOnZ0LDEwNjpYLDEwODpwdCwxMTE6VSwxMTI6VHQsMTEzOm50fSksezMxOlsxLDIwN10sNjU6aGEsNzk6MjA4LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSxpKGVoLFsyLDc5XSksaShlaCxbMiw4MV0pLGkoZWgsWzIsODJdKSxpKGVoLFsyLDE0Nl0pLGkoZWgsWzIsMTQ3XSksaShlaCxbMiwxNDhdKSxpKGVoLFsyLDE0OV0pLHs0NzpbMSwyMDldLDY1OmhhLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezMwOjIxMCw2NTpoYSw3NzpiYyw3ODpDYyw3OToxNjQsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHs0OTpbMSwyMTFdLDY1OmhhLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezUxOlsxLDIxMl0sNjU6aGEsNzk6MjA4LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7NTM6WzEsMjEzXSw2NTpoYSw3OToyMDgsMTEzOnBhLDExNDpEYSwxMTU6SGF9LHs1NTpbMSwyMTRdLDY1OmhhLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezU4OlsxLDIxNV19LHs2MjpbMSwyMTZdLDY1OmhhLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezY0OlsxLDIxN10sNjU6aGEsNzk6MjA4LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7MzA6MjE4LDY1OmhhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezMxOlsxLDIxOV0sNjU6aGEsNzk6MjA4LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7NjU6aGEsNjc6WzEsMjIwXSw2OTpbMSwyMjFdLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezY1OmhhLDY3OlsxLDIyM10sNjk6WzEsMjIyXSw3OToyMDgsMTEzOnBhLDExNDpEYSwxMTU6SGF9LGkoRnQsWzIsNDRdLHs0Mjp0aH0pLGkobmksWzIsNzBdKSxpKG5pLFsyLDY5XSksezYwOlsxLDIyNF0sNjU6aGEsNzk6MjA4LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSxpKG5pLFsyLDcyXSksaShEbCxbMiw3NF0pLHszMDoyMjUsNjU6aGEsNzc6YmMsNzg6Q2MsNzk6MTY0LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSxpKFd1LG0sezU6MjI2fSksaShfYyxbMiw5NV0pLGkoQ3QsWzIsMzVdKSx7NDE6MjI3LDQyOnosNDM6MzksNDU6NDAsNTg6Vyw4Njp5dCw5OTpmdCwxMDI6dXQsMTAzOnZ0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOlR0LDExMzpudH0sezEwOmVkLDU4OmpkLDgxOm5kLDg5OjIyOCwxMDI6JGQsMTA0OjIyOSwxMDU6MjMwLDEwNjpBMCwxMDc6QmksMTA4OmNuLDEwOTprcn0sezEwOmVkLDU4OmpkLDgxOm5kLDg5OjIzOSwxMDE6WzEsMjQwXSwxMDI6JGQsMTA0OjIyOSwxMDU6MjMwLDEwNjpBMCwxMDc6QmksMTA4OmNuLDEwOTprcn0sezEwOmVkLDU4OmpkLDgxOm5kLDg5OjI0MSwxMDE6WzEsMjQyXSwxMDI6JGQsMTA0OjIyOSwxMDU6MjMwLDEwNjpBMCwxMDc6QmksMTA4OmNuLDEwOTprcn0sezEwMjpbMSwyNDNdfSx7MTA6ZWQsNTg6amQsODE6bmQsODk6MjQ0LDEwMjokZCwxMDQ6MjI5LDEwNToyMzAsMTA2OkEwLDEwNzpCaSwxMDg6Y24sMTA5OmtyfSx7NDI6eiw0NToyNDUsNTg6Vyw4Njp5dCw5OTpmdCwxMDI6dXQsMTAzOnZ0LDEwNjpYLDEwODpwdCwxMTA6NDEsMTExOlUsMTEyOlR0LDExMzpudH0saShGYSxbMiwxMDFdKSx7Nzc6WzEsMjQ2XX0sezc3OlsxLDI0N10sOTU6WzEsMjQ4XX0saShGYSxbMiwxMDldKSxpKEZhLFsyLDExMV0sezEwOlsxLDI0OV19KSxpKEZhLFsyLDExMl0pLGkoTWUsWzIsNTFdKSxpKGVoLFsyLDgwXSksaShNZSxbMiw1Ml0pLHs0OTpbMSwyNTBdLDY1OmhhLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0saShNZSxbMiw1OV0pLGkoTWUsWzIsNTRdKSxpKE1lLFsyLDU1XSksaShNZSxbMiw1Nl0pLHsxMDY6WzEsMjUxXX0saShNZSxbMiw1OF0pLGkoTWUsWzIsNjBdKSx7NjQ6WzEsMjUyXSw2NTpoYSw3OToyMDgsMTEzOnBhLDExNDpEYSwxMTU6SGF9LGkoTWUsWzIsNjJdKSxpKE1lLFsyLDYzXSksaShNZSxbMiw2NV0pLGkoTWUsWzIsNjRdKSxpKE1lLFsyLDY2XSksaShbMTAsNDIsNTgsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzXSxbMiw3OF0pLHszMTpbMSwyNTNdLDY1OmhhLDc5OjIwOCwxMTM6cGEsMTE0OkRhLDExNTpIYX0sezY6MTEsNzoxMiw4OmIsOTpFLDEwOl8sMTE6QSwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpJLDMyOlsxLDI1NF0sMzM6MjQsMzQ6QiwzNjpOLDM4OlIsNDA6MjgsNDE6MzgsNDI6eiw0MzozOSw0NTo0MCw1ODpXLDgxOmV0LDgyOnN0LDgzOmF0LDg0OmJ0LDg1Om10LDg2Onl0LDk5OmZ0LDEwMjp1dCwxMDM6dnQsMTA2OlgsMTA4OnB0LDExMDo0MSwxMTE6VSwxMTI6VHQsMTEzOm50LDExODpJdCwxMTk6T3QsMTIwOkJ0LDEyMTpFdH0saSh0ZSxbMiw0OF0pLGkoRmEsWzIsMTE0XSx7MTAzOkVpfSksaShKbyxbMiwxMjNdLHsxMDU6MjU2LDEwOmVkLDU4OmpkLDgxOm5kLDEwMjokZCwxMDY6QTAsMTA3OkJpLDEwODpjbiwxMDk6a3J9KSxpKHdjLFsyLDEyNV0pLGkod2MsWzIsMTI3XSksaSh3YyxbMiwxMjhdKSxpKHdjLFsyLDEyOV0pLGkod2MsWzIsMTMwXSksaSh3YyxbMiwxMzFdKSxpKHdjLFsyLDEzMl0pLGkod2MsWzIsMTMzXSksaSh3YyxbMiwxMzRdKSxpKEZhLFsyLDExNV0sezEwMzpFaX0pLHsxMDpbMSwyNTddfSxpKEZhLFsyLDExNl0sezEwMzpFaX0pLHsxMDpbMSwyNThdfSxpKGx3LFsyLDEyMl0pLGkoRmEsWzIsOThdLHsxMDM6RWl9KSxpKEZhLFsyLDk5XSx7MTEwOjEwOSw0Mjp6LDU4OlcsODY6eXQsOTk6ZnQsMTAyOnV0LDEwMzp2dCwxMDY6WCwxMDg6cHQsMTExOlUsMTEyOlR0LDExMzpudH0pLGkoRmEsWzIsMTAzXSksaShGYSxbMiwxMDVdLHsxMDpbMSwyNTldfSksaShGYSxbMiwxMDZdKSx7OTU6WzEsMjYwXX0sezQ5OlsxLDI2MV19LHs2MDpbMSwyNjJdfSx7NjQ6WzEsMjYzXX0sezg6eHQsOTpIdCwxMTpMZSwyMToyNjR9LGkoQ3QsWzIsMzRdKSx7MTA6ZWQsNTg6amQsODE6bmQsMTAyOiRkLDEwNDoyNjUsMTA1OjIzMCwxMDY6QTAsMTA3OkJpLDEwODpjbiwxMDk6a3J9LGkod2MsWzIsMTI2XSksezE0OmduLDQyOlNlLDU4Om1lLDg2OlZlLDk4OjI2NiwxMDI6WWUsMTAzOmNlLDEwNjprZSwxMDg6enQsMTExOnJlLDExMjpzZSwxMTM6UGUsMTE3Ojg0fSx7MTQ6Z24sNDI6U2UsNTg6bWUsODY6VmUsOTg6MjY3LDEwMjpZZSwxMDM6Y2UsMTA2OmtlLDEwODp6dCwxMTE6cmUsMTEyOnNlLDExMzpQZSwxMTc6ODR9LHs5NTpbMSwyNjhdfSxpKEZhLFsyLDExM10pLGkoTWUsWzIsNTNdKSx7MzA6MjY5LDY1OmhhLDc3OmJjLDc4OkNjLDc5OjE2NCwxMTM6cGEsMTE0OkRhLDExNTpIYX0saShNZSxbMiw2MV0pLGkoV3UsbSx7NToyNzB9KSxpKEpvLFsyLDEyNF0sezEwNToyNTYsMTA6ZWQsNTg6amQsODE6bmQsMTAyOiRkLDEwNjpBMCwxMDc6QmksMTA4OmNuLDEwOTprcn0pLGkoRmEsWzIsMTE5XSx7MTE3OjE2MCwxMDpbMSwyNzFdLDE0OmduLDQyOlNlLDU4Om1lLDg2OlZlLDEwMjpZZSwxMDM6Y2UsMTA2OmtlLDEwODp6dCwxMTE6cmUsMTEyOnNlLDExMzpQZX0pLGkoRmEsWzIsMTIwXSx7MTE3OjE2MCwxMDpbMSwyNzJdLDE0OmduLDQyOlNlLDU4Om1lLDg2OlZlLDEwMjpZZSwxMDM6Y2UsMTA2OmtlLDEwODp6dCwxMTE6cmUsMTEyOnNlLDExMzpQZX0pLGkoRmEsWzIsMTA3XSksezMxOlsxLDI3M10sNjU6aGEsNzk6MjA4LDExMzpwYSwxMTQ6RGEsMTE1OkhhfSx7NjoxMSw3OjEyLDg6Yiw5OkUsMTA6XywxMTpBLDIwOjE3LDIyOjE4LDIzOjE5LDI0OjIwLDI1OjIxLDI2OjIyLDI3OkksMzI6WzEsMjc0XSwzMzoyNCwzNDpCLDM2Ok4sMzg6Uiw0MDoyOCw0MTozOCw0Mjp6LDQzOjM5LDQ1OjQwLDU4OlcsODE6ZXQsODI6c3QsODM6YXQsODQ6YnQsODU6bXQsODY6eXQsOTk6ZnQsMTAyOnV0LDEwMzp2dCwxMDY6WCwxMDg6cHQsMTEwOjQxLDExMTpVLDExMjpUdCwxMTM6bnQsMTE4Okl0LDExOTpPdCwxMjA6QnQsMTIxOkV0fSx7MTA6ZWQsNTg6amQsODE6bmQsODk6Mjc1LDEwMjokZCwxMDQ6MjI5LDEwNToyMzAsMTA2OkEwLDEwNzpCaSwxMDg6Y24sMTA5OmtyfSx7MTA6ZWQsNTg6amQsODE6bmQsODk6Mjc2LDEwMjokZCwxMDQ6MjI5LDEwNToyMzAsMTA2OkEwLDEwNzpCaSwxMDg6Y24sMTA5OmtyfSxpKE1lLFsyLDU3XSksaShDdCxbMiwzM10pLGkoRmEsWzIsMTE3XSx7MTAzOkVpfSksaShGYSxbMiwxMThdLHsxMDM6RWl9KV0sZGVmYXVsdEFjdGlvbnM6e30scGFyc2VFcnJvcjpmdW5jdGlvbihRaSxUcyl7aWYoVHMucmVjb3ZlcmFibGUpdGhpcy50cmFjZShRaSk7ZWxzZXt2YXIga2E9bmV3IEVycm9yKFFpKTt0aHJvdyBrYS5oYXNoPVRzLGthfX0scGFyc2U6ZnVuY3Rpb24oUWkpe3ZhciBUcz10aGlzLGthPVswXSx4aT1bXSxZYz1bbnVsbF0sQ2U9W10sdnA9dGhpcy50YWJsZSxCZT0iIixCZj0wLHlnPTAsYm09MixFaz0xLEUzPUNlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLElsPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksTDA9e3l5Ont9fTtmb3IodmFyIGh3IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksaHcpJiYoTDAueXlbaHddPXRoaXMueXlbaHddKTtJbC5zZXRJbnB1dChRaSxMMC55eSksTDAueXkubGV4ZXI9SWwsTDAueXkucGFyc2VyPXRoaXMsdHlwZW9mIElsLnl5bGxvYz4idSImJihJbC55eWxsb2M9e30pO3ZhciBINT1JbC55eWxsb2M7Q2UucHVzaChINSk7dmFyIEhiPUlsLm9wdGlvbnMmJklsLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBMMC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1MMC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBWNSgpe3ZhciB4ZztyZXR1cm4geGc9eGkucG9wKCl8fElsLmxleCgpfHxFayx0eXBlb2YgeGchPSJudW1iZXIiJiYoeGcgaW5zdGFuY2VvZiBBcnJheSYmKHhpPXhnLHhnPXhpLnBvcCgpKSx4Zz1Ucy5zeW1ib2xzX1t4Z118fHhnKSx4Z31mb3IodmFyIGYxLHJkLGlkLEc1LGZ3PXt9LFU1LG1wLFc1LFQzOzspe2lmKHJkPWthW2thLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3JkXT9pZD10aGlzLmRlZmF1bHRBY3Rpb25zW3JkXTooKGYxPT09bnVsbHx8dHlwZW9mIGYxPiJ1IikmJihmMT1WNSgpKSxpZD12cFtyZF0mJnZwW3JkXVtmMV0pLHR5cGVvZiBpZD4idSJ8fCFpZC5sZW5ndGh8fCFpZFswXSl7dmFyIHdtPSIiO1QzPVtdO2ZvcihVNSBpbiB2cFtyZF0pdGhpcy50ZXJtaW5hbHNfW1U1XSYmVTU+Ym0mJlQzLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tVNV0rIiciKTtJbC5zaG93UG9zaXRpb24/d209IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoQmYrMSkrYDoKYCtJbC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1QzLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bZjFdfHxmMSkrIiciOndtPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEJmKzEpKyI6IFVuZXhwZWN0ZWQgIisoZjE9PUVrPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW2YxXXx8ZjEpKyInIiksdGhpcy5wYXJzZUVycm9yKHdtLHt0ZXh0OklsLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tmMV18fGYxLGxpbmU6SWwueXlsaW5lbm8sbG9jOkg1LGV4cGVjdGVkOlQzfSl9aWYoaWRbMF1pbnN0YW5jZW9mIEFycmF5JiZpZC5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3JkKyIsIHRva2VuOiAiK2YxKTtzd2l0Y2goaWRbMF0pe2Nhc2UgMTprYS5wdXNoKGYxKSxZYy5wdXNoKElsLnl5dGV4dCksQ2UucHVzaChJbC55eWxsb2MpLGthLnB1c2goaWRbMV0pLGYxPW51bGwseWc9SWwueXlsZW5nLEJlPUlsLnl5dGV4dCxCZj1JbC55eWxpbmVubyxINT1JbC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKG1wPXRoaXMucHJvZHVjdGlvbnNfW2lkWzFdXVsxXSxmdy4kPVljW1ljLmxlbmd0aC1tcF0sZncuXyQ9e2ZpcnN0X2xpbmU6Q2VbQ2UubGVuZ3RoLShtcHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkNlW0NlLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkNlW0NlLmxlbmd0aC0obXB8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Q2VbQ2UubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxIYiYmKGZ3Ll8kLnJhbmdlPVtDZVtDZS5sZW5ndGgtKG1wfHwxKV0ucmFuZ2VbMF0sQ2VbQ2UubGVuZ3RoLTFdLnJhbmdlWzFdXSksRzU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGZ3LFtCZSx5ZyxCZixMMC55eSxpZFsxXSxZYyxDZV0uY29uY2F0KEUzKSksdHlwZW9mIEc1PCJ1IilyZXR1cm4gRzU7bXAmJihrYT1rYS5zbGljZSgwLC0xKm1wKjIpLFljPVljLnNsaWNlKDAsLTEqbXApLENlPUNlLnNsaWNlKDAsLTEqbXApKSxrYS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2lkWzFdXVswXSksWWMucHVzaChmdy4kKSxDZS5wdXNoKGZ3Ll8kKSxXNT12cFtrYVtrYS5sZW5ndGgtMl1dW2thW2thLmxlbmd0aC0xXV0sa2EucHVzaChXNSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LE9jPWZ1bmN0aW9uKCl7dmFyIGFmPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKFRzLGthKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFRzLGthKTtlbHNlIHRocm93IG5ldyBFcnJvcihUcyl9LHNldElucHV0OmZ1bmN0aW9uKFFpLFRzKXtyZXR1cm4gdGhpcy55eT1Uc3x8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9UWksdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIFFpPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1RaSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9UWksdGhpcy5tYXRjaGVkKz1RaTt2YXIgVHM9UWkubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBUcz8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksUWl9LHVucHV0OmZ1bmN0aW9uKFFpKXt2YXIgVHM9UWkubGVuZ3RoLGthPVFpLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9UWkrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVRzKSx0aGlzLm9mZnNldC09VHM7dmFyIHhpPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGthLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09a2EubGVuZ3RoLTEpO3ZhciBZYz10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46a2E/KGthLmxlbmd0aD09PXhpLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkreGlbeGkubGVuZ3RoLWthLmxlbmd0aF0ubGVuZ3RoLWthWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tVHN9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bWWNbMF0sWWNbMF0rdGhpcy55eWxlbmctVHNdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihRaSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFFpKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBRaT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFFpLmxlbmd0aD4yMD8iLi4uIjoiIikrUWkuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgUWk9dGhpcy5tYXRjaDtyZXR1cm4gUWkubGVuZ3RoPDIwJiYoUWkrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVFpLmxlbmd0aCkpLChRaS5zdWJzdHIoMCwyMCkrKFFpLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgUWk9dGhpcy5wYXN0SW5wdXQoKSxUcz1uZXcgQXJyYXkoUWkubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gUWkrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1RzKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihRaSxUcyl7dmFyIGthLHhpLFljO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihZYz17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihZYy55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSx4aT1RaVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykseGkmJih0aGlzLnl5bGluZW5vKz14aS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjp4aT94aVt4aS5sZW5ndGgtMV0ubGVuZ3RoLXhpW3hpLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1FpWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVFpWzBdLHRoaXMubWF0Y2grPVFpWzBdLHRoaXMubWF0Y2hlcz1RaSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShRaVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9UWlbMF0sa2E9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsVHMsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksa2EpcmV0dXJuIGthO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBDZSBpbiBZYyl0aGlzW0NlXT1ZY1tDZV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgUWksVHMsa2EseGk7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgWWM9dGhpcy5fY3VycmVudFJ1bGVzKCksQ2U9MDtDZTxZYy5sZW5ndGg7Q2UrKylpZihrYT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1ljW0NlXV0pLGthJiYoIVRzfHxrYVswXS5sZW5ndGg+VHNbMF0ubGVuZ3RoKSl7aWYoVHM9a2EseGk9Q2UsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUWk9dGhpcy50ZXN0X21hdGNoKGthLFljW0NlXSksUWkhPT0hMSlyZXR1cm4gUWk7aWYodGhpcy5fYmFja3RyYWNrKXtUcz0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBUcz8oUWk9dGhpcy50ZXN0X21hdGNoKFRzLFljW3hpXSksUWkhPT0hMT9RaTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIFRzPXRoaXMubmV4dCgpO3JldHVybiBUc3x8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oVHMpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChUcyl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFRzPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFRzPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oVHMpe3JldHVybiBUcz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFRzfHwwKSxUcz49MD90aGlzLmNvbmRpdGlvblN0YWNrW1RzXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihUcyl7dGhpcy5iZWdpbihUcyl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVHMsa2EseGksWWMpe3N3aXRjaCh4aSl7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzNDtjYXNlIDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDI6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDM2O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgNDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgNzp0aGlzLmJlZ2luKCJjYWxsYmFja25hbWUiKTticmVhaztjYXNlIDg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgOTp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAxMDpyZXR1cm4gOTI7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4gOTM7Y2FzZSAxMzpyZXR1cm4iTURfU1RSIjtjYXNlIDE0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE1OnRoaXMuYmVnaW4oIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIlNUUiI7Y2FzZSAxNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxODp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAxOTpyZXR1cm4gODE7Y2FzZSAyMDpyZXR1cm4gOTk7Y2FzZSAyMTpyZXR1cm4gODI7Y2FzZSAyMjpyZXR1cm4gMTAxO2Nhc2UgMjM6cmV0dXJuIDgzO2Nhc2UgMjQ6cmV0dXJuIDg0O2Nhc2UgMjU6cmV0dXJuIDk0O2Nhc2UgMjY6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI4OnJldHVybiA4NTtjYXNlIDI5OnJldHVybiBUcy5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjtjYXNlIDMwOnJldHVybiBUcy5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjtjYXNlIDMxOnJldHVybiBUcy5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjtjYXNlIDMyOnJldHVybiAyNztjYXNlIDMzOnJldHVybiAzMjtjYXNlIDM0OnJldHVybiA5NTtjYXNlIDM1OnJldHVybiA5NTtjYXNlIDM2OnJldHVybiA5NTtjYXNlIDM3OnJldHVybiA5NTtjYXNlIDM4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTM7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDk6cmV0dXJuIDExODtjYXNlIDUwOnJldHVybiAxMTk7Y2FzZSA1MTpyZXR1cm4gMTIwO2Nhc2UgNTI6cmV0dXJuIDEyMTtjYXNlIDUzOnJldHVybiAxMDI7Y2FzZSA1NDpyZXR1cm4gMTA4O2Nhc2UgNTU6cmV0dXJuIDQ0O2Nhc2UgNTY6cmV0dXJuIDU4O2Nhc2UgNTc6cmV0dXJuIDQyO2Nhc2UgNTg6cmV0dXJuIDg7Y2FzZSA1OTpyZXR1cm4gMTAzO2Nhc2UgNjA6cmV0dXJuIDExMjtjYXNlIDYxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzU7Y2FzZSA2MjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVkZ2VUZXh0IiksNzM7Y2FzZSA2MzpyZXR1cm4gMTE2O2Nhc2UgNjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw3NTtjYXNlIDY1OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGhpY2tFZGdlVGV4dCIpLDczO2Nhc2UgNjY6cmV0dXJuIDExNjtjYXNlIDY3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzU7Y2FzZSA2ODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRvdHRlZEVkZ2VUZXh0IiksNzM7Y2FzZSA2OTpyZXR1cm4gMTE2O2Nhc2UgNzA6cmV0dXJuIDc1O2Nhc2UgNzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw1MTtjYXNlIDcyOnJldHVybiJURVhUIjtjYXNlIDczOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZWxsaXBzZVRleHQiKSw1MDtjYXNlIDc0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTM7Y2FzZSA3NTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1MjtjYXNlIDc2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTU7Y2FzZSA3NzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1NDtjYXNlIDc4OnJldHVybiA1NjtjYXNlIDc5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDY1O2Nhc2UgODA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2MjtjYXNlIDgxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDYxO2Nhc2UgODI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0NztjYXNlIDgzOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDQ2O2Nhc2UgODQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2NztjYXNlIDg1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjk7Y2FzZSA4NjpyZXR1cm4gMTE0O2Nhc2UgODc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDY2O2Nhc2UgODg6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDY4O2Nhc2UgODk6cmV0dXJuIDExNTtjYXNlIDkwOnJldHVybiA2NTtjYXNlIDkxOnJldHVybiA4NztjYXNlIDkyOnJldHVybiJTRVAiO2Nhc2UgOTM6cmV0dXJuIDg2O2Nhc2UgOTQ6cmV0dXJuIDExMjtjYXNlIDk1OnJldHVybiAxMDg7Y2FzZSA5NjpyZXR1cm4gNDI7Y2FzZSA5NzpyZXR1cm4gMTA2O2Nhc2UgOTg6cmV0dXJuIDExMTtjYXNlIDk5OnJldHVybiAxMTM7Y2FzZSAxMDA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2MDtjYXNlIDEwMTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2MDtjYXNlIDEwMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ5O2Nhc2UgMTAzOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDQ4O2Nhc2UgMTA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzE7Y2FzZSAxMDU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksMjk7Y2FzZSAxMDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2NDtjYXNlIDEwNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2MztjYXNlIDEwODpyZXR1cm4iVEVYVCI7Y2FzZSAxMDk6cmV0dXJuIlFVT1RFIjtjYXNlIDExMDpyZXR1cm4gOTtjYXNlIDExMTpyZXR1cm4gMTA7Y2FzZSAxMTI6cmV0dXJuIDExfX0scnVsZXM6Wy9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OmNhbGxbXHNdKykvLC9eKD86XChbXHNdKlwpKS8sL14oPzpcKCkvLC9eKD86W14oXSopLywvXig/OlwpKS8sL14oPzpbXildKikvLC9eKD86W15gIl0rKS8sL14oPzpbYF1bIl0pLywvXig/OlsiXVtgXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpzdHlsZVxiKS8sL14oPzpkZWZhdWx0XGIpLywvXig/OmxpbmtTdHlsZVxiKS8sL14oPzppbnRlcnBvbGF0ZVxiKS8sL14oPzpjbGFzc0RlZlxiKS8sL14oPzpjbGFzc1xiKS8sL14oPzpocmVmW1xzXSkvLC9eKD86Y2xpY2tbXHNdKykvLC9eKD86W1xzXG5dKS8sL14oPzpbXlxzXG5dKikvLC9eKD86Zmxvd2NoYXJ0LWVsa1xiKS8sL14oPzpncmFwaFxiKS8sL14oPzpmbG93Y2hhcnRcYikvLC9eKD86c3ViZ3JhcGhcYikvLC9eKD86ZW5kXGJccyopLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86KFxyP1xuKSpccypcbikvLC9eKD86XHMqTFJcYikvLC9eKD86XHMqUkxcYikvLC9eKD86XHMqVEJcYikvLC9eKD86XHMqQlRcYikvLC9eKD86XHMqVERcYikvLC9eKD86XHMqQlJcYikvLC9eKD86XHMqPCkvLC9eKD86XHMqPikvLC9eKD86XHMqXF4pLywvXig/OlxzKnZcYikvLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86WzAtOV0rKS8sL14oPzojKS8sL14oPzo6OjopLywvXig/OjopLywvXig/OiYpLywvXig/OjspLywvXig/OiwpLywvXig/OlwqKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0tXHMqKS8sL14oPzpbXi1dfC0oPyEtKSspLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/PT1ccyopLywvXig/OltePV18PSg/ISkpLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqW3hvPF0/LVwuXHMqKS8sL14oPzpbXlwuXXxcLig/ISkpLywvXig/OlxzKn5+W1x+XStccyopLywvXig/OlstL1wpXVtcKV0pLywvXig/OlteXChcKVxbXF1ce1x9XXwhXCkrKS8sL14oPzpcKC0pLywvXig/OlxdXCkpLywvXig/OlwoXFspLywvXig/OlxdXF0pLywvXig/OlxbXFspLywvXig/OlxbXHwpLywvXig/Oj4pLywvXig/OlwpXF0pLywvXig/OlxbXCgpLywvXig/OlwpXClcKSkvLC9eKD86XChcKFwoKS8sL14oPzpbXFwoPz1cXSldW1xdXSkvLC9eKD86XC8oPz1cXSlcXSkvLC9eKD86XC8oPyFcXSl8XFwoPyFcXSl8W15cXFxbXF1cKFwpXHtcfVwvXSspLywvXig/OlxbXC8pLywvXig/OlxbXFwpLywvXig/OjwpLywvXig/Oj4pLywvXig/OlxeKS8sL14oPzpcXFx8KS8sL14oPzp2XGIpLywvXig/OlwqKS8sL14oPzojKS8sL14oPzomKS8sL14oPzooW0EtWmEtejAtOSEiXCMkJSYnKitcLmA/XFxfXC9dfC0oPz1bXlw+XC1cLl0pfCg/ISkpKykvLC9eKD86LSkvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpcfCkvLC9eKD86XHwpLywvXig/OlwpKS8sL14oPzpcKCkvLC9eKD86XF0pLywvXig/OlxbKS8sL14oPzooXH0pKS8sL14oPzpceykvLC9eKD86W15cW1xdXChcKVx7XH1cfFwiXSspLywvXig/OiIpLywvXig/Oihccj9cbikrKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOntjYWxsYmFja2FyZ3M6e3J1bGVzOlsxMSwxMiwxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbOCw5LDEwLDE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGNsaWNrOntydWxlczpbMTUsMTgsMjcsMjgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGRvdHRlZEVkZ2VUZXh0OntydWxlczpbMTUsMTgsNjcsNjksNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHRoaWNrRWRnZVRleHQ6e3J1bGVzOlsxNSwxOCw2NCw2Niw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sZWRnZVRleHQ6e3J1bGVzOlsxNSwxOCw2MSw2Myw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sdHJhcFRleHQ6e3J1bGVzOlsxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4NCw4NSw4Niw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sZWxsaXBzZVRleHQ6e3J1bGVzOlsxNSwxOCw3MCw3MSw3Miw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sdGV4dDp7cnVsZXM6WzE1LDE4LDcwLDczLDc0LDc1LDc2LDc3LDgwLDgxLDgyLDgzLDg3LDg4LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4XSxpbmNsdXNpdmU6ITF9LHZlcnRleDp7cnVsZXM6WzE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxkaXI6e3J1bGVzOlsxNSwxOCwzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzUsNiwxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMywxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMSwxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sbWRfc3RyaW5nOntydWxlczpbMTMsMTQsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzE1LDE2LDE3LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwyLDQsNywxNSwxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNyw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2NCw2NSw2Nyw2OCw3MCw3Myw3NSw3Nyw3OCw3OSw4MSw4Myw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDEsMTAzLDEwNSwxMDcsMTA5LDExMCwxMTEsMTEyXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGFmfSgpO3JmLmxleGVyPU9jO2Z1bmN0aW9uIHNmKCl7dGhpcy55eT17fX1yZXR1cm4gc2YucHJvdG90eXBlPXJmLHJmLlBhcnNlcj1zZixuZXcgc2Z9KCk7cWR0LnBhcnNlcj1xZHQ7Y29uc3QgSGR0PXFkdCxySWU9ImZsb3djaGFydC0iO2xldCBBUHQ9MCxWZHQ9T2UoKSx3bD17fSxnaz1bXSxlTD17fSxNNT1bXSxyWT17fSxpWT17fSxzWT0wLEdkdD0hMCxpdyxhWSxvWT1bXTtjb25zdCBjWT1pPT5Lci5zYW5pdGl6ZVRleHQoaSxWZHQpLGZGPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMod2wpO2Zvcihjb25zdCBmIG9mIGEpaWYod2xbZl0uaWQ9PT1pKXJldHVybiB3bFtmXS5kb21JZDtyZXR1cm4gaX0sTFB0PWZ1bmN0aW9uKGksYSxmLHAsdyxtLGI9e30pe2xldCBFLF89aTtfIT09dm9pZCAwJiZfLnRyaW0oKS5sZW5ndGghPT0wJiYod2xbX109PT12b2lkIDAmJih3bFtfXT17aWQ6XyxsYWJlbFR5cGU6InRleHQiLGRvbUlkOnJJZStfKyItIitBUHQsc3R5bGVzOltdLGNsYXNzZXM6W119KSxBUHQrKyxhIT09dm9pZCAwPyhWZHQ9T2UoKSxFPWNZKGEudGV4dC50cmltKCkpLHdsW19dLmxhYmVsVHlwZT1hLnR5cGUsRVswXT09PSciJyYmRVtFLmxlbmd0aC0xXT09PSciJyYmKEU9RS5zdWJzdHJpbmcoMSxFLmxlbmd0aC0xKSksd2xbX10udGV4dD1FKTp3bFtfXS50ZXh0PT09dm9pZCAwJiYod2xbX10udGV4dD1pKSxmIT09dm9pZCAwJiYod2xbX10udHlwZT1mKSxwIT1udWxsJiZwLmZvckVhY2goZnVuY3Rpb24oQSl7d2xbX10uc3R5bGVzLnB1c2goQSl9KSx3IT1udWxsJiZ3LmZvckVhY2goZnVuY3Rpb24oQSl7d2xbX10uY2xhc3Nlcy5wdXNoKEEpfSksbSE9PXZvaWQgMCYmKHdsW19dLmRpcj1tKSx3bFtfXS5wcm9wcz09PXZvaWQgMD93bFtfXS5wcm9wcz1iOmIhPT12b2lkIDAmJk9iamVjdC5hc3NpZ24od2xbX10ucHJvcHMsYikpfSxNUHQ9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IG09e3N0YXJ0OmksZW5kOmEsdHlwZTp2b2lkIDAsdGV4dDoiIixsYWJlbFR5cGU6InRleHQifTtVdC5pbmZvKCJhYmM3OCBHb3QgZWRnZS4uLiIsbSk7Y29uc3QgYj1mLnRleHQ7aWYoYiE9PXZvaWQgMCYmKG0udGV4dD1jWShiLnRleHQudHJpbSgpKSxtLnRleHRbMF09PT0nIicmJm0udGV4dFttLnRleHQubGVuZ3RoLTFdPT09JyInJiYobS50ZXh0PW0udGV4dC5zdWJzdHJpbmcoMSxtLnRleHQubGVuZ3RoLTEpKSxtLmxhYmVsVHlwZT1iLnR5cGUpLGYhPT12b2lkIDAmJihtLnR5cGU9Zi50eXBlLG0uc3Ryb2tlPWYuc3Ryb2tlLG0ubGVuZ3RoPWYubGVuZ3RoKSwobT09bnVsbD92b2lkIDA6bS5sZW5ndGgpPjEwJiYobS5sZW5ndGg9MTApLGdrLmxlbmd0aDwyODApVXQuaW5mbygiYWJjNzggcHVzaGluZyBlZGdlLi4uIiksZ2sucHVzaChtKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVG9vIG1hbnkgZWRnZXMiKX0sRFB0PWZ1bmN0aW9uKGksYSxmKXtVdC5pbmZvKCJhZGRMaW5rIChhYmM3OCkiLGksYSxmKTtsZXQgcCx3O2ZvcihwPTA7cDxpLmxlbmd0aDtwKyspZm9yKHc9MDt3PGEubGVuZ3RoO3crKylNUHQoaVtwXSxhW3ddLGYpfSxJUHQ9ZnVuY3Rpb24oaSxhKXtpLmZvckVhY2goZnVuY3Rpb24oZil7Zj09PSJkZWZhdWx0Ij9nay5kZWZhdWx0SW50ZXJwb2xhdGU9YTpna1tmXS5pbnRlcnBvbGF0ZT1hfSl9LE9QdD1mdW5jdGlvbihpLGEpe2kuZm9yRWFjaChmdW5jdGlvbihmKXtmPT09ImRlZmF1bHQiP2drLmRlZmF1bHRTdHlsZT1hOigkYS5pc1N1YnN0cmluZ0luQXJyYXkoImZpbGwiLGEpPT09LTEmJmEucHVzaCgiZmlsbDpub25lIiksZ2tbZl0uc3R5bGU9YSl9KX0sUFB0PWZ1bmN0aW9uKGksYSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZil7ZUxbZl09PT12b2lkIDAmJihlTFtmXT17aWQ6ZixzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pLGEhPW51bGwmJmEuZm9yRWFjaChmdW5jdGlvbihwKXtpZihwLm1hdGNoKCJjb2xvciIpKXtjb25zdCB3PXAucmVwbGFjZSgiZmlsbCIsImJnRmlsbCIpLnJlcGxhY2UoImNvbG9yIiwiZmlsbCIpO2VMW2ZdLnRleHRTdHlsZXMucHVzaCh3KX1lTFtmXS5zdHlsZXMucHVzaChwKX0pfSl9LEZQdD1mdW5jdGlvbihpKXtpdz1pLGl3Lm1hdGNoKC8uKjwvKSYmKGl3PSJSTCIpLGl3Lm1hdGNoKC8uKlxeLykmJihpdz0iQlQiKSxpdy5tYXRjaCgvLio+LykmJihpdz0iTFIiKSxpdy5tYXRjaCgvLip2LykmJihpdz0iVEIiKSxpdz09PSJURCImJihpdz0iVEIiKX0sdVk9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXtsZXQgcD1mO3dsW3BdIT09dm9pZCAwJiZ3bFtwXS5jbGFzc2VzLnB1c2goYSkscllbcF0hPT12b2lkIDAmJnJZW3BdLmNsYXNzZXMucHVzaChhKX0pfSxpSWU9ZnVuY3Rpb24oaSxhKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihmKXthIT09dm9pZCAwJiYoaVlbYVk9PT0iZ2VuLTEiP2ZGKGYpOmZdPWNZKGEpKX0pfSxzSWU9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPWZGKGkpO2lmKE9lKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSJ8fGE9PT12b2lkIDApcmV0dXJuO2xldCB3PVtdO2lmKHR5cGVvZiBmPT0ic3RyaW5nIil7dz1mLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgbT0wO208dy5sZW5ndGg7bSsrKXtsZXQgYj13W21dLnRyaW0oKTtiLmNoYXJBdCgwKT09PSciJyYmYi5jaGFyQXQoYi5sZW5ndGgtMSk9PT0nIicmJihiPWIuc3Vic3RyKDEsYi5sZW5ndGgtMikpLHdbbV09Yn19dy5sZW5ndGg9PT0wJiZ3LnB1c2goaSksd2xbaV0hPT12b2lkIDAmJih3bFtpXS5oYXZlQ2FsbGJhY2s9ITAsb1kucHVzaChmdW5jdGlvbigpe2NvbnN0IG09ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke3B9Il1gKTttIT09bnVsbCYmbS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXskYS5ydW5GdW5jKGEsLi4udyl9LCExKX0pKX0sTlB0PWZ1bmN0aW9uKGksYSxmKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihwKXt3bFtwXSE9PXZvaWQgMCYmKHdsW3BdLmxpbms9JGEuZm9ybWF0VXJsKGEsVmR0KSx3bFtwXS5saW5rVGFyZ2V0PWYpfSksdVkoaSwiY2xpY2thYmxlIil9LEJQdD1mdW5jdGlvbihpKXtpZihpWS5oYXNPd25Qcm9wZXJ0eShpKSlyZXR1cm4gaVlbaV19LFJQdD1mdW5jdGlvbihpLGEsZil7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7c0llKHAsYSxmKX0pLHVZKGksImNsaWNrYWJsZSIpfSxqUHQ9ZnVuY3Rpb24oaSl7b1kuZm9yRWFjaChmdW5jdGlvbihhKXthKGkpfSl9LCRQdD1mdW5jdGlvbigpe3JldHVybiBpdy50cmltKCl9LHpQdD1mdW5jdGlvbigpe3JldHVybiB3bH0scVB0PWZ1bmN0aW9uKCl7cmV0dXJuIGdrfSxIUHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZUx9LFZQdD1mdW5jdGlvbihpKXtsZXQgYT15cigiLm1lcm1haWRUb29sdGlwIik7KGEuX2dyb3Vwc3x8YSlbMF1bMF09PT1udWxsJiYoYT15cigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSkseXIoaSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7Y29uc3Qgdz15cih0aGlzKTtpZih3LmF0dHIoInRpdGxlIik9PT1udWxsKXJldHVybjtjb25zdCBiPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksYS50ZXh0KHcuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK2IubGVmdCsoYi5yaWdodC1iLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrYi50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksYS5odG1sKGEuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSx3LmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCkseXIodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pfTtvWS5wdXNoKFZQdCk7Y29uc3QgR1B0PWZ1bmN0aW9uKGk9Imdlbi0xIil7d2w9e30sZUw9e30sZ2s9W10sb1k9W1ZQdF0sTTU9W10sclk9e30sc1k9MCxpWT17fSxHZHQ9ITAsYVk9aSxoZygpfSxVUHQ9aT0+e2FZPWl8fCJnZW4tMiJ9LFdQdD1mdW5jdGlvbigpe3JldHVybiJmaWxsOiNmZmE7c3Ryb2tlOiAjZjY2OyBzdHJva2Utd2lkdGg6IDNweDsgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTtmaWxsOiNmZmE7c3Ryb2tlOiAjNjY2OyJ9LFlQdD1mdW5jdGlvbihpLGEsZil7bGV0IHA9aS50ZXh0LnRyaW0oKSx3PWYudGV4dDtpPT09ZiYmZi50ZXh0Lm1hdGNoKC9ccy8pJiYocD12b2lkIDApO2Z1bmN0aW9uIG0oSSl7Y29uc3QgQj17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxOPVtdO2xldCBSO3JldHVybntub2RlTGlzdDpJLmZpbHRlcihmdW5jdGlvbihXKXtjb25zdCBldD10eXBlb2YgVztyZXR1cm4gVy5zdG10JiZXLnN0bXQ9PT0iZGlyIj8oUj1XLnZhbHVlLCExKTpXLnRyaW0oKT09PSIiPyExOmV0IGluIEI/QltldF0uaGFzT3duUHJvcGVydHkoVyk/ITE6QltldF1bV109ITA6Ti5pbmNsdWRlcyhXKT8hMTpOLnB1c2goVyl9KSxkaXI6Un19bGV0IGI9W107Y29uc3R7bm9kZUxpc3Q6RSxkaXI6X309bShiLmNvbmNhdC5hcHBseShiLGEpKTtpZihiPUUsYVk9PT0iZ2VuLTEiKWZvcihsZXQgST0wO0k8Yi5sZW5ndGg7SSsrKWJbSV09ZkYoYltJXSk7cD1wfHwic3ViR3JhcGgiK3NZLHc9d3x8IiIsdz1jWSh3KSxzWT1zWSsxO2NvbnN0IEE9e2lkOnAsbm9kZXM6Yix0aXRsZTp3LnRyaW0oKSxjbGFzc2VzOltdLGRpcjpfLGxhYmVsVHlwZTpmLnR5cGV9O3JldHVybiBVdC5pbmZvKCJBZGRpbmciLEEuaWQsQS5ub2RlcyxBLmRpciksQS5ub2Rlcz1yRnQoQSxNNSkubm9kZXMsTTUucHVzaChBKSxyWVtwXT1BLHB9LGFJZT1mdW5jdGlvbihpKXtmb3IoY29uc3RbYSxmXW9mIE01LmVudHJpZXMoKSlpZihmLmlkPT09aSlyZXR1cm4gYTtyZXR1cm4tMX07bGV0IGRGPS0xO2NvbnN0IEtQdD1bXSxYUHQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPU01W2FdLm5vZGVzO2lmKGRGPWRGKzEsZEY+MmUzKXJldHVybjtpZihLUHRbZEZdPWEsTTVbYV0uaWQ9PT1pKXJldHVybntyZXN1bHQ6ITAsY291bnQ6MH07bGV0IHA9MCx3PTE7Zm9yKDtwPGYubGVuZ3RoOyl7Y29uc3QgbT1hSWUoZltwXSk7aWYobT49MCl7Y29uc3QgYj1YUHQoaSxtKTtpZihiLnJlc3VsdClyZXR1cm57cmVzdWx0OiEwLGNvdW50OncrYi5jb3VudH07dz13K2IuY291bnR9cD1wKzF9cmV0dXJue3Jlc3VsdDohMSxjb3VudDp3fX0sUVB0PWZ1bmN0aW9uKGkpe3JldHVybiBLUHRbaV19LFpQdD1mdW5jdGlvbigpe2RGPS0xLE01Lmxlbmd0aD4wJiZYUHQoIm5vbmUiLE01Lmxlbmd0aC0xKX0sSlB0PWZ1bmN0aW9uKCl7cmV0dXJuIE01fSx0RnQ9KCk9PkdkdD8oR2R0PSExLCEwKTohMSxvSWU9aT0+e2xldCBhPWkudHJpbSgpLGY9ImFycm93X29wZW4iO3N3aXRjaChhWzBdKXtjYXNlIjwiOmY9ImFycm93X3BvaW50IixhPWEuc2xpY2UoMSk7YnJlYWs7Y2FzZSJ4IjpmPSJhcnJvd19jcm9zcyIsYT1hLnNsaWNlKDEpO2JyZWFrO2Nhc2UibyI6Zj0iYXJyb3dfY2lyY2xlIixhPWEuc2xpY2UoMSk7YnJlYWt9bGV0IHA9Im5vcm1hbCI7cmV0dXJuIGEuaW5jbHVkZXMoIj0iKSYmKHA9InRoaWNrIiksYS5pbmNsdWRlcygiLiIpJiYocD0iZG90dGVkIikse3R5cGU6ZixzdHJva2U6cH19LGNJZT0oaSxhKT0+e2NvbnN0IGY9YS5sZW5ndGg7bGV0IHA9MDtmb3IobGV0IHc9MDt3PGY7Kyt3KWFbd109PT1pJiYrK3A7cmV0dXJuIHB9LHVJZT1pPT57Y29uc3QgYT1pLnRyaW0oKTtsZXQgZj1hLnNsaWNlKDAsLTEpLHA9ImFycm93X29wZW4iO3N3aXRjaChhLnNsaWNlKC0xKSl7Y2FzZSJ4IjpwPSJhcnJvd19jcm9zcyIsYVswXT09PSJ4IiYmKHA9ImRvdWJsZV8iK3AsZj1mLnNsaWNlKDEpKTticmVhaztjYXNlIj4iOnA9ImFycm93X3BvaW50IixhWzBdPT09IjwiJiYocD0iZG91YmxlXyIrcCxmPWYuc2xpY2UoMSkpO2JyZWFrO2Nhc2UibyI6cD0iYXJyb3dfY2lyY2xlIixhWzBdPT09Im8iJiYocD0iZG91YmxlXyIrcCxmPWYuc2xpY2UoMSkpO2JyZWFrfWxldCB3PSJub3JtYWwiLG09Zi5sZW5ndGgtMTtmWzBdPT09Ij0iJiYodz0idGhpY2siKSxmWzBdPT09In4iJiYodz0iaW52aXNpYmxlIik7bGV0IGI9Y0llKCIuIixmKTtyZXR1cm4gYiYmKHc9ImRvdHRlZCIsbT1iKSx7dHlwZTpwLHN0cm9rZTp3LGxlbmd0aDptfX0sZUZ0PShpLGEpPT57Y29uc3QgZj11SWUoaSk7bGV0IHA7aWYoYSl7aWYocD1vSWUoYSkscC5zdHJva2UhPT1mLnN0cm9rZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07aWYocC50eXBlPT09ImFycm93X29wZW4iKXAudHlwZT1mLnR5cGU7ZWxzZXtpZihwLnR5cGUhPT1mLnR5cGUpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O3AudHlwZT0iZG91YmxlXyIrcC50eXBlfXJldHVybiBwLnR5cGU9PT0iZG91YmxlX2Fycm93IiYmKHAudHlwZT0iZG91YmxlX2Fycm93X3BvaW50IikscC5sZW5ndGg9Zi5sZW5ndGgscH1yZXR1cm4gZn0sbkZ0PShpLGEpPT57bGV0IGY9ITE7cmV0dXJuIGkuZm9yRWFjaChwPT57cC5ub2Rlcy5pbmRleE9mKGEpPj0wJiYoZj0hMCl9KSxmfSxyRnQ9KGksYSk9Pntjb25zdCBmPVtdO3JldHVybiBpLm5vZGVzLmZvckVhY2goKHAsdyk9PntuRnQoYSxwKXx8Zi5wdXNoKGkubm9kZXNbd10pfSkse25vZGVzOmZ9fSxpRnQ9e2ZpcnN0R3JhcGg6dEZ0fSx3VD17ZGVmYXVsdENvbmZpZzooKT0+U090LmZsb3djaGFydCxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxhZGRWZXJ0ZXg6TFB0LGxvb2tVcERvbUlkOmZGLGFkZExpbms6RFB0LHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpJUHQsdXBkYXRlTGluazpPUHQsYWRkQ2xhc3M6UFB0LHNldERpcmVjdGlvbjpGUHQsc2V0Q2xhc3M6dVksc2V0VG9vbHRpcDppSWUsZ2V0VG9vbHRpcDpCUHQsc2V0Q2xpY2tFdmVudDpSUHQsc2V0TGluazpOUHQsYmluZEZ1bmN0aW9uczpqUHQsZ2V0RGlyZWN0aW9uOiRQdCxnZXRWZXJ0aWNlczp6UHQsZ2V0RWRnZXM6cVB0LGdldENsYXNzZXM6SFB0LGNsZWFyOkdQdCxzZXRHZW46VVB0LGRlZmF1bHRTdHlsZTpXUHQsYWRkU3ViR3JhcGg6WVB0LGdldERlcHRoRmlyc3RQb3M6UVB0LGluZGV4Tm9kZXM6WlB0LGdldFN1YkdyYXBoczpKUHQsZGVzdHJ1Y3RMaW5rOmVGdCxsZXg6aUZ0LGV4aXN0czpuRnQsbWFrZVVuaXE6ckZ0LHNldERpYWdyYW1UaXRsZTpOYixnZXREaWFncmFtVGl0bGU6cGd9LGxJZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYWRkQ2xhc3M6UFB0LGFkZExpbms6RFB0LGFkZFNpbmdsZUxpbms6TVB0LGFkZFN1YkdyYXBoOllQdCxhZGRWZXJ0ZXg6TFB0LGJpbmRGdW5jdGlvbnM6alB0LGNsZWFyOkdQdCxkZWZhdWx0OndULGRlZmF1bHRTdHlsZTpXUHQsZGVzdHJ1Y3RMaW5rOmVGdCxmaXJzdEdyYXBoOnRGdCxnZXRDbGFzc2VzOkhQdCxnZXREZXB0aEZpcnN0UG9zOlFQdCxnZXREaXJlY3Rpb246JFB0LGdldEVkZ2VzOnFQdCxnZXRTdWJHcmFwaHM6SlB0LGdldFRvb2x0aXA6QlB0LGdldFZlcnRpY2VzOnpQdCxpbmRleE5vZGVzOlpQdCxsZXg6aUZ0LGxvb2tVcERvbUlkOmZGLHNldENsYXNzOnVZLHNldENsaWNrRXZlbnQ6UlB0LHNldERpcmVjdGlvbjpGUHQsc2V0R2VuOlVQdCxzZXRMaW5rOk5QdCx1cGRhdGVMaW5rOk9QdCx1cGRhdGVMaW5rSW50ZXJwb2xhdGU6SVB0fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBoSWU9IltvYmplY3QgU3ltYm9sXSI7ZnVuY3Rpb24gdlQoaSl7cmV0dXJuIHR5cGVvZiBpPT0ic3ltYm9sInx8ZjMoaSkmJnNUKGkpPT1oSWV9ZnVuY3Rpb24gbkwoaSxhKXtmb3IodmFyIGY9LTEscD1pPT1udWxsPzA6aS5sZW5ndGgsdz1BcnJheShwKTsrK2Y8cDspd1tmXT1hKGlbZl0sZixpKTtyZXR1cm4gd312YXIgZkllPTEvMCxzRnQ9dHc/dHcucHJvdG90eXBlOnZvaWQgMCxhRnQ9c0Z0P3NGdC50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gb0Z0KGkpe2lmKHR5cGVvZiBpPT0ic3RyaW5nIilyZXR1cm4gaTtpZihJZihpKSlyZXR1cm4gbkwoaSxvRnQpKyIiO2lmKHZUKGkpKXJldHVybiBhRnQ/YUZ0LmNhbGwoaSk6IiI7dmFyIGE9aSsiIjtyZXR1cm4gYT09IjAiJiYxL2k9PS1mSWU/Ii0wIjphfXZhciBkSWU9L1xzLztmdW5jdGlvbiBnSWUoaSl7Zm9yKHZhciBhPWkubGVuZ3RoO2EtLSYmZEllLnRlc3QoaS5jaGFyQXQoYSkpOyk7cmV0dXJuIGF9dmFyIHBJZT0vXlxzKy87ZnVuY3Rpb24gYkllKGkpe3JldHVybiBpJiZpLnNsaWNlKDAsZ0llKGkpKzEpLnJlcGxhY2UocEllLCIiKX12YXIgY0Z0PTAvMCx3SWU9L15bLStdMHhbMC05YS1mXSskL2ksdkllPS9eMGJbMDFdKyQvaSxtSWU9L14wb1swLTddKyQvaSx5SWU9cGFyc2VJbnQ7ZnVuY3Rpb24geEllKGkpe2lmKHR5cGVvZiBpPT0ibnVtYmVyIilyZXR1cm4gaTtpZih2VChpKSlyZXR1cm4gY0Z0O2lmKEZiKGkpKXt2YXIgYT10eXBlb2YgaS52YWx1ZU9mPT0iZnVuY3Rpb24iP2kudmFsdWVPZigpOmk7aT1GYihhKT9hKyIiOmF9aWYodHlwZW9mIGkhPSJzdHJpbmciKXJldHVybiBpPT09MD9pOitpO2k9YkllKGkpO3ZhciBmPXZJZS50ZXN0KGkpO3JldHVybiBmfHxtSWUudGVzdChpKT95SWUoaS5zbGljZSgyKSxmPzI6OCk6d0llLnRlc3QoaSk/Y0Z0OitpfXZhciB1RnQ9MS8wLGtJZT0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gbFkoaSl7aWYoIWkpcmV0dXJuIGk9PT0wP2k6MDtpZihpPXhJZShpKSxpPT09dUZ0fHxpPT09LXVGdCl7dmFyIGE9aTwwPy0xOjE7cmV0dXJuIGEqa0llfXJldHVybiBpPT09aT9pOjB9ZnVuY3Rpb24gRUllKGkpe3ZhciBhPWxZKGkpLGY9YSUxO3JldHVybiBhPT09YT9mP2EtZjphOjB9ZnVuY3Rpb24gVEllKCl7fWZ1bmN0aW9uIGxGdChpLGEpe2Zvcih2YXIgZj0tMSxwPWk9PW51bGw/MDppLmxlbmd0aDsrK2Y8cCYmYShpW2ZdLGYsaSkhPT0hMTspO3JldHVybiBpfWZ1bmN0aW9uIGhGdChpLGEsZixwKXtmb3IodmFyIHc9aS5sZW5ndGgsbT1mKyhwPzE6LTEpO3A/bS0tOisrbTx3OylpZihhKGlbbV0sbSxpKSlyZXR1cm4gbTtyZXR1cm4tMX1mdW5jdGlvbiBDSWUoaSl7cmV0dXJuIGkhPT1pfWZ1bmN0aW9uIF9JZShpLGEsZil7Zm9yKHZhciBwPWYtMSx3PWkubGVuZ3RoOysrcDx3OylpZihpW3BdPT09YSlyZXR1cm4gcDtyZXR1cm4tMX1mdW5jdGlvbiBTSWUoaSxhLGYpe3JldHVybiBhPT09YT9fSWUoaSxhLGYpOmhGdChpLENJZSxmKX1mdW5jdGlvbiBBSWUoaSxhKXt2YXIgZj1pPT1udWxsPzA6aS5sZW5ndGg7cmV0dXJuISFmJiZTSWUoaSxhLDApPi0xfWZ1bmN0aW9uIFJiKGkpe3JldHVybiBjayhpKT9QSXQoaSk6Tk90KGkpfXZhciBMSWU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sTUllPS9eXHcqJC87ZnVuY3Rpb24gVWR0KGksYSl7aWYoSWYoaSkpcmV0dXJuITE7dmFyIGY9dHlwZW9mIGk7cmV0dXJuIGY9PSJudW1iZXIifHxmPT0ic3ltYm9sInx8Zj09ImJvb2xlYW4ifHxpPT1udWxsfHx2VChpKT8hMDpNSWUudGVzdChpKXx8IUxJZS50ZXN0KGkpfHxhIT1udWxsJiZpIGluIE9iamVjdChhKX12YXIgREllPTUwMDtmdW5jdGlvbiBJSWUoaSl7dmFyIGE9akEoaSxmdW5jdGlvbihwKXtyZXR1cm4gZi5zaXplPT09REllJiZmLmNsZWFyKCkscH0pLGY9YS5jYWNoZTtyZXR1cm4gYX12YXIgT0llPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLFBJZT0vXFwoXFwpPy9nLEZJZT1JSWUoZnVuY3Rpb24oaSl7dmFyIGE9W107cmV0dXJuIGkuY2hhckNvZGVBdCgwKT09PTQ2JiZhLnB1c2goIiIpLGkucmVwbGFjZShPSWUsZnVuY3Rpb24oZixwLHcsbSl7YS5wdXNoKHc/bS5yZXBsYWNlKFBJZSwiJDEiKTpwfHxmKX0pLGF9KTtjb25zdCBOSWU9RkllO2Z1bmN0aW9uIGZGdChpKXtyZXR1cm4gaT09bnVsbD8iIjpvRnQoaSl9ZnVuY3Rpb24gaFkoaSxhKXtyZXR1cm4gSWYoaSk/aTpVZHQoaSxhKT9baV06TkllKGZGdChpKSl9dmFyIEJJZT0xLzA7ZnVuY3Rpb24gZ0YoaSl7aWYodHlwZW9mIGk9PSJzdHJpbmcifHx2VChpKSlyZXR1cm4gaTt2YXIgYT1pKyIiO3JldHVybiBhPT0iMCImJjEvaT09LUJJZT8iLTAiOmF9ZnVuY3Rpb24gZlkoaSxhKXthPWhZKGEsaSk7Zm9yKHZhciBmPTAscD1hLmxlbmd0aDtpIT1udWxsJiZmPHA7KWk9aVtnRihhW2YrK10pXTtyZXR1cm4gZiYmZj09cD9pOnZvaWQgMH1mdW5jdGlvbiBSSWUoaSxhLGYpe3ZhciBwPWk9PW51bGw/dm9pZCAwOmZZKGksYSk7cmV0dXJuIHA9PT12b2lkIDA/ZjpwfWZ1bmN0aW9uIFdkdChpLGEpe2Zvcih2YXIgZj0tMSxwPWEubGVuZ3RoLHc9aS5sZW5ndGg7KytmPHA7KWlbdytmXT1hW2ZdO3JldHVybiBpfXZhciBkRnQ9dHc/dHcuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDtmdW5jdGlvbiBqSWUoaSl7cmV0dXJuIElmKGkpfHwkQShpKXx8ISEoZEZ0JiZpJiZpW2RGdF0pfWZ1bmN0aW9uIGRZKGksYSxmLHAsdyl7dmFyIG09LTEsYj1pLmxlbmd0aDtmb3IoZnx8KGY9akllKSx3fHwodz1bXSk7KyttPGI7KXt2YXIgRT1pW21dO2E+MCYmZihFKT9hPjE/ZFkoRSxhLTEsZixwLHcpOldkdCh3LEUpOnB8fCh3W3cubGVuZ3RoXT1FKX1yZXR1cm4gd31mdW5jdGlvbiByTChpKXt2YXIgYT1pPT1udWxsPzA6aS5sZW5ndGg7cmV0dXJuIGE/ZFkoaSwxKTpbXX1mdW5jdGlvbiAkSWUoaSl7cmV0dXJuIFJJdChCSXQoaSx2b2lkIDAsckwpLGkrIiIpfWZ1bmN0aW9uIHpJZShpLGEsZixwKXt2YXIgdz0tMSxtPWk9PW51bGw/MDppLmxlbmd0aDtmb3IocCYmbSYmKGY9aVsrK3ddKTsrK3c8bTspZj1hKGYsaVt3XSx3LGkpO3JldHVybiBmfWZ1bmN0aW9uIHFJZShpLGEpe3JldHVybiBpJiZlRihhLFJiKGEpLGkpfWZ1bmN0aW9uIEhJZShpLGEpe3JldHVybiBpJiZlRihhLHVUKGEpLGkpfWZ1bmN0aW9uIGdGdChpLGEpe2Zvcih2YXIgZj0tMSxwPWk9PW51bGw/MDppLmxlbmd0aCx3PTAsbT1bXTsrK2Y8cDspe3ZhciBiPWlbZl07YShiLGYsaSkmJihtW3crK109Yil9cmV0dXJuIG19ZnVuY3Rpb24gcEZ0KCl7cmV0dXJuW119dmFyIFZJZT1PYmplY3QucHJvdG90eXBlLEdJZT1WSWUucHJvcGVydHlJc0VudW1lcmFibGUsYkZ0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsVUllPWJGdD9mdW5jdGlvbihpKXtyZXR1cm4gaT09bnVsbD9bXTooaT1PYmplY3QoaSksZ0Z0KGJGdChpKSxmdW5jdGlvbihhKXtyZXR1cm4gR0llLmNhbGwoaSxhKX0pKX06cEZ0O2NvbnN0IFlkdD1VSWU7ZnVuY3Rpb24gV0llKGksYSl7cmV0dXJuIGVGKGksWWR0KGkpLGEpfXZhciBZSWU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxLSWU9WUllP2Z1bmN0aW9uKGkpe2Zvcih2YXIgYT1bXTtpOylXZHQoYSxZZHQoaSkpLGk9bmR0KGkpO3JldHVybiBhfTpwRnQ7Y29uc3Qgd0Z0PUtJZTtmdW5jdGlvbiBYSWUoaSxhKXtyZXR1cm4gZUYoaSx3RnQoaSksYSl9ZnVuY3Rpb24gdkZ0KGksYSxmKXt2YXIgcD1hKGkpO3JldHVybiBJZihpKT9wOldkdChwLGYoaSkpfWZ1bmN0aW9uIEtkdChpKXtyZXR1cm4gdkZ0KGksUmIsWWR0KX1mdW5jdGlvbiBRSWUoaSl7cmV0dXJuIHZGdChpLHVULHdGdCl9dmFyIFpJZT1PYmplY3QucHJvdG90eXBlLEpJZT1aSWUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gdE9lKGkpe3ZhciBhPWkubGVuZ3RoLGY9bmV3IGkuY29uc3RydWN0b3IoYSk7cmV0dXJuIGEmJnR5cGVvZiBpWzBdPT0ic3RyaW5nIiYmSkllLmNhbGwoaSwiaW5kZXgiKSYmKGYuaW5kZXg9aS5pbmRleCxmLmlucHV0PWkuaW5wdXQpLGZ9ZnVuY3Rpb24gZU9lKGksYSl7dmFyIGY9YT9lZHQoaS5idWZmZXIpOmkuYnVmZmVyO3JldHVybiBuZXcgaS5jb25zdHJ1Y3RvcihmLGkuYnl0ZU9mZnNldCxpLmJ5dGVMZW5ndGgpfXZhciBuT2U9L1x3KiQvO2Z1bmN0aW9uIHJPZShpKXt2YXIgYT1uZXcgaS5jb25zdHJ1Y3RvcihpLnNvdXJjZSxuT2UuZXhlYyhpKSk7cmV0dXJuIGEubGFzdEluZGV4PWkubGFzdEluZGV4LGF9dmFyIG1GdD10dz90dy5wcm90b3R5cGU6dm9pZCAwLHlGdD1tRnQ/bUZ0LnZhbHVlT2Y6dm9pZCAwO2Z1bmN0aW9uIGlPZShpKXtyZXR1cm4geUZ0P09iamVjdCh5RnQuY2FsbChpKSk6e319dmFyIHNPZT0iW29iamVjdCBCb29sZWFuXSIsYU9lPSJbb2JqZWN0IERhdGVdIixvT2U9IltvYmplY3QgTWFwXSIsY09lPSJbb2JqZWN0IE51bWJlcl0iLHVPZT0iW29iamVjdCBSZWdFeHBdIixsT2U9IltvYmplY3QgU2V0XSIsaE9lPSJbb2JqZWN0IFN0cmluZ10iLGZPZT0iW29iamVjdCBTeW1ib2xdIixkT2U9IltvYmplY3QgQXJyYXlCdWZmZXJdIixnT2U9IltvYmplY3QgRGF0YVZpZXddIixwT2U9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsYk9lPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLHdPZT0iW29iamVjdCBJbnQ4QXJyYXldIix2T2U9IltvYmplY3QgSW50MTZBcnJheV0iLG1PZT0iW29iamVjdCBJbnQzMkFycmF5XSIseU9lPSJbb2JqZWN0IFVpbnQ4QXJyYXldIix4T2U9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixrT2U9IltvYmplY3QgVWludDE2QXJyYXldIixFT2U9IltvYmplY3QgVWludDMyQXJyYXldIjtmdW5jdGlvbiBUT2UoaSxhLGYpe3ZhciBwPWkuY29uc3RydWN0b3I7c3dpdGNoKGEpe2Nhc2UgZE9lOnJldHVybiBlZHQoaSk7Y2FzZSBzT2U6Y2FzZSBhT2U6cmV0dXJuIG5ldyBwKCtpKTtjYXNlIGdPZTpyZXR1cm4gZU9lKGksZik7Y2FzZSBwT2U6Y2FzZSBiT2U6Y2FzZSB3T2U6Y2FzZSB2T2U6Y2FzZSBtT2U6Y2FzZSB5T2U6Y2FzZSB4T2U6Y2FzZSBrT2U6Y2FzZSBFT2U6cmV0dXJuIG1JdChpLGYpO2Nhc2Ugb09lOnJldHVybiBuZXcgcDtjYXNlIGNPZTpjYXNlIGhPZTpyZXR1cm4gbmV3IHAoaSk7Y2FzZSB1T2U6cmV0dXJuIHJPZShpKTtjYXNlIGxPZTpyZXR1cm4gbmV3IHA7Y2FzZSBmT2U6cmV0dXJuIGlPZShpKX19dmFyIENPZT0iW29iamVjdCBNYXBdIjtmdW5jdGlvbiBfT2UoaSl7cmV0dXJuIGYzKGkpJiZYQShpKT09Q09lfXZhciB4RnQ9cUEmJnFBLmlzTWFwLFNPZT14RnQ/U1coeEZ0KTpfT2U7Y29uc3QgQU9lPVNPZTt2YXIgTE9lPSJbb2JqZWN0IFNldF0iO2Z1bmN0aW9uIE1PZShpKXtyZXR1cm4gZjMoaSkmJlhBKGkpPT1MT2V9dmFyIGtGdD1xQSYmcUEuaXNTZXQsRE9lPWtGdD9TVyhrRnQpOk1PZTtjb25zdCBJT2U9RE9lO3ZhciBPT2U9MSxQT2U9MixGT2U9NCxFRnQ9IltvYmplY3QgQXJndW1lbnRzXSIsTk9lPSJbb2JqZWN0IEFycmF5XSIsQk9lPSJbb2JqZWN0IEJvb2xlYW5dIixST2U9IltvYmplY3QgRGF0ZV0iLGpPZT0iW29iamVjdCBFcnJvcl0iLFRGdD0iW29iamVjdCBGdW5jdGlvbl0iLCRPZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHpPZT0iW29iamVjdCBNYXBdIixxT2U9IltvYmplY3QgTnVtYmVyXSIsQ0Z0PSJbb2JqZWN0IE9iamVjdF0iLEhPZT0iW29iamVjdCBSZWdFeHBdIixWT2U9IltvYmplY3QgU2V0XSIsR09lPSJbb2JqZWN0IFN0cmluZ10iLFVPZT0iW29iamVjdCBTeW1ib2xdIixXT2U9IltvYmplY3QgV2Vha01hcF0iLFlPZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEtPZT0iW29iamVjdCBEYXRhVmlld10iLFhPZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixRT2U9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsWk9lPSJbb2JqZWN0IEludDhBcnJheV0iLEpPZT0iW29iamVjdCBJbnQxNkFycmF5XSIsdFBlPSJbb2JqZWN0IEludDMyQXJyYXldIixlUGU9IltvYmplY3QgVWludDhBcnJheV0iLG5QZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLHJQZT0iW29iamVjdCBVaW50MTZBcnJheV0iLGlQZT0iW29iamVjdCBVaW50MzJBcnJheV0iLHJsPXt9O3JsW0VGdF09cmxbTk9lXT1ybFtZT2VdPXJsW0tPZV09cmxbQk9lXT1ybFtST2VdPXJsW1hPZV09cmxbUU9lXT1ybFtaT2VdPXJsW0pPZV09cmxbdFBlXT1ybFt6T2VdPXJsW3FPZV09cmxbQ0Z0XT1ybFtIT2VdPXJsW1ZPZV09cmxbR09lXT1ybFtVT2VdPXJsW2VQZV09cmxbblBlXT1ybFtyUGVdPXJsW2lQZV09ITAscmxbak9lXT1ybFtURnRdPXJsW1dPZV09ITE7ZnVuY3Rpb24gcEYoaSxhLGYscCx3LG0pe3ZhciBiLEU9YSZPT2UsXz1hJlBPZSxBPWEmRk9lO2lmKGYmJihiPXc/ZihpLHAsdyxtKTpmKGkpKSxiIT09dm9pZCAwKXJldHVybiBiO2lmKCFGYihpKSlyZXR1cm4gaTt2YXIgST1JZihpKTtpZihJKXtpZihiPXRPZShpKSwhRSlyZXR1cm4geUl0KGksYil9ZWxzZXt2YXIgQj1YQShpKSxOPUI9PVRGdHx8Qj09JE9lO2lmKHpBKGkpKXJldHVybiB2SXQoaSxFKTtpZihCPT1DRnR8fEI9PUVGdHx8TiYmIXcpe2lmKGI9X3x8Tj97fTpFSXQoaSksIUUpcmV0dXJuIF8/WEllKGksSEllKGIsaSkpOldJZShpLHFJZShiLGkpKX1lbHNle2lmKCFybFtCXSlyZXR1cm4gdz9pOnt9O2I9VE9lKGksQixFKX19bXx8KG09bmV3IHJtKTt2YXIgUj1tLmdldChpKTtpZihSKXJldHVybiBSO20uc2V0KGksYiksSU9lKGkpP2kuZm9yRWFjaChmdW5jdGlvbihldCl7Yi5hZGQocEYoZXQsYSxmLGV0LGksbSkpfSk6QU9lKGkpJiZpLmZvckVhY2goZnVuY3Rpb24oZXQsc3Qpe2Iuc2V0KHN0LHBGKGV0LGEsZixzdCxpLG0pKX0pO3ZhciB6PUE/Xz9RSWU6S2R0Ol8/dVQ6UmIsVz1JP3ZvaWQgMDp6KGkpO3JldHVybiBsRnQoV3x8aSxmdW5jdGlvbihldCxzdCl7VyYmKHN0PWV0LGV0PWlbc3RdKSxMVyhiLHN0LHBGKGV0LGEsZixzdCxpLG0pKX0pLGJ9dmFyIHNQZT00O2Z1bmN0aW9uIGFQZShpKXtyZXR1cm4gcEYoaSxzUGUpfXZhciBvUGU9MSxjUGU9NDtmdW5jdGlvbiB1UGUoaSl7cmV0dXJuIHBGKGksb1BlfGNQZSl9dmFyIGxQZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gaFBlKGkpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChpLGxQZSksdGhpc31mdW5jdGlvbiBmUGUoaSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGkpfWZ1bmN0aW9uIGJGKGkpe3ZhciBhPS0xLGY9aT09bnVsbD8wOmkubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBTNTsrK2E8ZjspdGhpcy5hZGQoaVthXSl9YkYucHJvdG90eXBlLmFkZD1iRi5wcm90b3R5cGUucHVzaD1oUGUsYkYucHJvdG90eXBlLmhhcz1mUGU7ZnVuY3Rpb24gZFBlKGksYSl7Zm9yKHZhciBmPS0xLHA9aT09bnVsbD8wOmkubGVuZ3RoOysrZjxwOylpZihhKGlbZl0sZixpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBfRnQoaSxhKXtyZXR1cm4gaS5oYXMoYSl9dmFyIGdQZT0xLHBQZT0yO2Z1bmN0aW9uIFNGdChpLGEsZixwLHcsbSl7dmFyIGI9ZiZnUGUsRT1pLmxlbmd0aCxfPWEubGVuZ3RoO2lmKEUhPV8mJiEoYiYmXz5FKSlyZXR1cm4hMTt2YXIgQT1tLmdldChpKSxJPW0uZ2V0KGEpO2lmKEEmJkkpcmV0dXJuIEE9PWEmJkk9PWk7dmFyIEI9LTEsTj0hMCxSPWYmcFBlP25ldyBiRjp2b2lkIDA7Zm9yKG0uc2V0KGksYSksbS5zZXQoYSxpKTsrK0I8RTspe3ZhciB6PWlbQl0sVz1hW0JdO2lmKHApdmFyIGV0PWI/cChXLHosQixhLGksbSk6cCh6LFcsQixpLGEsbSk7aWYoZXQhPT12b2lkIDApe2lmKGV0KWNvbnRpbnVlO049ITE7YnJlYWt9aWYoUil7aWYoIWRQZShhLGZ1bmN0aW9uKHN0LGF0KXtpZighX0Z0KFIsYXQpJiYoej09PXN0fHx3KHosc3QsZixwLG0pKSlyZXR1cm4gUi5wdXNoKGF0KX0pKXtOPSExO2JyZWFrfX1lbHNlIGlmKCEoej09PVd8fHcoeixXLGYscCxtKSkpe049ITE7YnJlYWt9fXJldHVybiBtLmRlbGV0ZShpKSxtLmRlbGV0ZShhKSxOfWZ1bmN0aW9uIGJQZShpKXt2YXIgYT0tMSxmPUFycmF5KGkuc2l6ZSk7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihwLHcpe2ZbKythXT1bdyxwXX0pLGZ9ZnVuY3Rpb24gWGR0KGkpe3ZhciBhPS0xLGY9QXJyYXkoaS5zaXplKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKHApe2ZbKythXT1wfSksZn12YXIgd1BlPTEsdlBlPTIsbVBlPSJbb2JqZWN0IEJvb2xlYW5dIix5UGU9IltvYmplY3QgRGF0ZV0iLHhQZT0iW29iamVjdCBFcnJvcl0iLGtQZT0iW29iamVjdCBNYXBdIixFUGU9IltvYmplY3QgTnVtYmVyXSIsVFBlPSJbb2JqZWN0IFJlZ0V4cF0iLENQZT0iW29iamVjdCBTZXRdIixfUGU9IltvYmplY3QgU3RyaW5nXSIsU1BlPSJbb2JqZWN0IFN5bWJvbF0iLEFQZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLExQZT0iW29iamVjdCBEYXRhVmlld10iLEFGdD10dz90dy5wcm90b3R5cGU6dm9pZCAwLFFkdD1BRnQ/QUZ0LnZhbHVlT2Y6dm9pZCAwO2Z1bmN0aW9uIE1QZShpLGEsZixwLHcsbSxiKXtzd2l0Y2goZil7Y2FzZSBMUGU6aWYoaS5ieXRlTGVuZ3RoIT1hLmJ5dGVMZW5ndGh8fGkuYnl0ZU9mZnNldCE9YS5ieXRlT2Zmc2V0KXJldHVybiExO2k9aS5idWZmZXIsYT1hLmJ1ZmZlcjtjYXNlIEFQZTpyZXR1cm4hKGkuYnl0ZUxlbmd0aCE9YS5ieXRlTGVuZ3RofHwhbShuZXcgQ1coaSksbmV3IENXKGEpKSk7Y2FzZSBtUGU6Y2FzZSB5UGU6Y2FzZSBFUGU6cmV0dXJuIFJBKCtpLCthKTtjYXNlIHhQZTpyZXR1cm4gaS5uYW1lPT1hLm5hbWUmJmkubWVzc2FnZT09YS5tZXNzYWdlO2Nhc2UgVFBlOmNhc2UgX1BlOnJldHVybiBpPT1hKyIiO2Nhc2Uga1BlOnZhciBFPWJQZTtjYXNlIENQZTp2YXIgXz1wJndQZTtpZihFfHwoRT1YZHQpLGkuc2l6ZSE9YS5zaXplJiYhXylyZXR1cm4hMTt2YXIgQT1iLmdldChpKTtpZihBKXJldHVybiBBPT1hO3B8PXZQZSxiLnNldChpLGEpO3ZhciBJPVNGdChFKGkpLEUoYSkscCx3LG0sYik7cmV0dXJuIGIuZGVsZXRlKGkpLEk7Y2FzZSBTUGU6aWYoUWR0KXJldHVybiBRZHQuY2FsbChpKT09UWR0LmNhbGwoYSl9cmV0dXJuITF9dmFyIERQZT0xLElQZT1PYmplY3QucHJvdG90eXBlLE9QZT1JUGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gUFBlKGksYSxmLHAsdyxtKXt2YXIgYj1mJkRQZSxFPUtkdChpKSxfPUUubGVuZ3RoLEE9S2R0KGEpLEk9QS5sZW5ndGg7aWYoXyE9SSYmIWIpcmV0dXJuITE7Zm9yKHZhciBCPV87Qi0tOyl7dmFyIE49RVtCXTtpZighKGI/TiBpbiBhOk9QZS5jYWxsKGEsTikpKXJldHVybiExfXZhciBSPW0uZ2V0KGkpLHo9bS5nZXQoYSk7aWYoUiYmeilyZXR1cm4gUj09YSYmej09aTt2YXIgVz0hMDttLnNldChpLGEpLG0uc2V0KGEsaSk7Zm9yKHZhciBldD1iOysrQjxfOyl7Tj1FW0JdO3ZhciBzdD1pW05dLGF0PWFbTl07aWYocCl2YXIgYnQ9Yj9wKGF0LHN0LE4sYSxpLG0pOnAoc3QsYXQsTixpLGEsbSk7aWYoIShidD09PXZvaWQgMD9zdD09PWF0fHx3KHN0LGF0LGYscCxtKTpidCkpe1c9ITE7YnJlYWt9ZXR8fChldD1OPT0iY29uc3RydWN0b3IiKX1pZihXJiYhZXQpe3ZhciBtdD1pLmNvbnN0cnVjdG9yLHl0PWEuY29uc3RydWN0b3I7bXQhPXl0JiYiY29uc3RydWN0b3IiaW4gaSYmImNvbnN0cnVjdG9yImluIGEmJiEodHlwZW9mIG10PT0iZnVuY3Rpb24iJiZtdCBpbnN0YW5jZW9mIG10JiZ0eXBlb2YgeXQ9PSJmdW5jdGlvbiImJnl0IGluc3RhbmNlb2YgeXQpJiYoVz0hMSl9cmV0dXJuIG0uZGVsZXRlKGkpLG0uZGVsZXRlKGEpLFd9dmFyIEZQZT0xLExGdD0iW29iamVjdCBBcmd1bWVudHNdIixNRnQ9IltvYmplY3QgQXJyYXldIixnWT0iW29iamVjdCBPYmplY3RdIixOUGU9T2JqZWN0LnByb3RvdHlwZSxERnQ9TlBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIEJQZShpLGEsZixwLHcsbSl7dmFyIGI9SWYoaSksRT1JZihhKSxfPWI/TUZ0OlhBKGkpLEE9RT9NRnQ6WEEoYSk7Xz1fPT1MRnQ/Z1k6XyxBPUE9PUxGdD9nWTpBO3ZhciBJPV89PWdZLEI9QT09Z1ksTj1fPT1BO2lmKE4mJnpBKGkpKXtpZighekEoYSkpcmV0dXJuITE7Yj0hMCxJPSExfWlmKE4mJiFJKXJldHVybiBtfHwobT1uZXcgcm0pLGJ8fEFXKGkpP1NGdChpLGEsZixwLHcsbSk6TVBlKGksYSxfLGYscCx3LG0pO2lmKCEoZiZGUGUpKXt2YXIgUj1JJiZERnQuY2FsbChpLCJfX3dyYXBwZWRfXyIpLHo9QiYmREZ0LmNhbGwoYSwiX193cmFwcGVkX18iKTtpZihSfHx6KXt2YXIgVz1SP2kudmFsdWUoKTppLGV0PXo/YS52YWx1ZSgpOmE7cmV0dXJuIG18fChtPW5ldyBybSksdyhXLGV0LGYscCxtKX19cmV0dXJuIE4/KG18fChtPW5ldyBybSksUFBlKGksYSxmLHAsdyxtKSk6ITF9ZnVuY3Rpb24gWmR0KGksYSxmLHAsdyl7cmV0dXJuIGk9PT1hPyEwOmk9PW51bGx8fGE9PW51bGx8fCFmMyhpKSYmIWYzKGEpP2khPT1pJiZhIT09YTpCUGUoaSxhLGYscCxaZHQsdyl9dmFyIFJQZT0xLGpQZT0yO2Z1bmN0aW9uICRQZShpLGEsZixwKXt2YXIgdz1mLmxlbmd0aCxtPXcsYj0hcDtpZihpPT1udWxsKXJldHVybiFtO2ZvcihpPU9iamVjdChpKTt3LS07KXt2YXIgRT1mW3ddO2lmKGImJkVbMl0/RVsxXSE9PWlbRVswXV06IShFWzBdaW4gaSkpcmV0dXJuITF9Zm9yKDsrK3c8bTspe0U9Zlt3XTt2YXIgXz1FWzBdLEE9aVtfXSxJPUVbMV07aWYoYiYmRVsyXSl7aWYoQT09PXZvaWQgMCYmIShfIGluIGkpKXJldHVybiExfWVsc2V7dmFyIEI9bmV3IHJtO2lmKHApdmFyIE49cChBLEksXyxpLGEsQik7aWYoIShOPT09dm9pZCAwP1pkdChJLEEsUlBlfGpQZSxwLEIpOk4pKXJldHVybiExfX1yZXR1cm4hMH1mdW5jdGlvbiBJRnQoaSl7cmV0dXJuIGk9PT1pJiYhRmIoaSl9ZnVuY3Rpb24gelBlKGkpe2Zvcih2YXIgYT1SYihpKSxmPWEubGVuZ3RoO2YtLTspe3ZhciBwPWFbZl0sdz1pW3BdO2FbZl09W3AsdyxJRnQodyldfXJldHVybiBhfWZ1bmN0aW9uIE9GdChpLGEpe3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gZj09bnVsbD8hMTpmW2ldPT09YSYmKGEhPT12b2lkIDB8fGkgaW4gT2JqZWN0KGYpKX19ZnVuY3Rpb24gcVBlKGkpe3ZhciBhPXpQZShpKTtyZXR1cm4gYS5sZW5ndGg9PTEmJmFbMF1bMl0/T0Z0KGFbMF1bMF0sYVswXVsxXSk6ZnVuY3Rpb24oZil7cmV0dXJuIGY9PT1pfHwkUGUoZixpLGEpfX1mdW5jdGlvbiBIUGUoaSxhKXtyZXR1cm4gaSE9bnVsbCYmYSBpbiBPYmplY3QoaSl9ZnVuY3Rpb24gUEZ0KGksYSxmKXthPWhZKGEsaSk7Zm9yKHZhciBwPS0xLHc9YS5sZW5ndGgsbT0hMTsrK3A8dzspe3ZhciBiPWdGKGFbcF0pO2lmKCEobT1pIT1udWxsJiZmKGksYikpKWJyZWFrO2k9aVtiXX1yZXR1cm4gbXx8KytwIT13P206KHc9aT09bnVsbD8wOmkubGVuZ3RoLCEhdyYmcmR0KHcpJiZNVyhiLHcpJiYoSWYoaSl8fCRBKGkpKSl9ZnVuY3Rpb24gRkZ0KGksYSl7cmV0dXJuIGkhPW51bGwmJlBGdChpLGEsSFBlKX12YXIgVlBlPTEsR1BlPTI7ZnVuY3Rpb24gVVBlKGksYSl7cmV0dXJuIFVkdChpKSYmSUZ0KGEpP09GdChnRihpKSxhKTpmdW5jdGlvbihmKXt2YXIgcD1SSWUoZixpKTtyZXR1cm4gcD09PXZvaWQgMCYmcD09PWE/RkZ0KGYsaSk6WmR0KGEscCxWUGV8R1BlKX19ZnVuY3Rpb24gV1BlKGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD92b2lkIDA6YVtpXX19ZnVuY3Rpb24gWVBlKGkpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gZlkoYSxpKX19ZnVuY3Rpb24gS1BlKGkpe3JldHVybiBVZHQoaSk/V1BlKGdGKGkpKTpZUGUoaSl9ZnVuY3Rpb24gcGsoaSl7cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6aT09bnVsbD9sVDp0eXBlb2YgaT09Im9iamVjdCI/SWYoaSk/VVBlKGlbMF0saVsxXSk6cVBlKGkpOktQZShpKX1mdW5jdGlvbiBKZHQoaSxhKXtyZXR1cm4gaSYmdGR0KGksYSxSYil9ZnVuY3Rpb24gWFBlKGksYSl7cmV0dXJuIGZ1bmN0aW9uKGYscCl7aWYoZj09bnVsbClyZXR1cm4gZjtpZighY2soZikpcmV0dXJuIGkoZixwKTtmb3IodmFyIHc9Zi5sZW5ndGgsbT1hP3c6LTEsYj1PYmplY3QoZik7KGE/bS0tOisrbTx3KSYmcChiW21dLG0sYikhPT0hMTspO3JldHVybiBmfX12YXIgUVBlPVhQZShKZHQpO2NvbnN0IHBZPVFQZTt2YXIgWlBlPWZ1bmN0aW9uKCl7cmV0dXJuIG5tLkRhdGUubm93KCl9O2NvbnN0IE5GdD1aUGU7dmFyIEJGdD1PYmplY3QucHJvdG90eXBlLEpQZT1CRnQuaGFzT3duUHJvcGVydHksdEZlPURXKGZ1bmN0aW9uKGksYSl7aT1PYmplY3QoaSk7dmFyIGY9LTEscD1hLmxlbmd0aCx3PXA+Mj9hWzJdOnZvaWQgMDtmb3IodyYmbkYoYVswXSxhWzFdLHcpJiYocD0xKTsrK2Y8cDspZm9yKHZhciBtPWFbZl0sYj11VChtKSxFPS0xLF89Yi5sZW5ndGg7KytFPF87KXt2YXIgQT1iW0VdLEk9aVtBXTsoST09PXZvaWQgMHx8UkEoSSxCRnRbQV0pJiYhSlBlLmNhbGwoaSxBKSkmJihpW0FdPW1bQV0pfXJldHVybiBpfSk7Y29uc3QgaUw9dEZlO2Z1bmN0aW9uIGVGZShpLGEsZil7Zm9yKHZhciBwPS0xLHc9aT09bnVsbD8wOmkubGVuZ3RoOysrcDx3OylpZihmKGEsaVtwXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gYlkoaSl7dmFyIGE9aT09bnVsbD8wOmkubGVuZ3RoO3JldHVybiBhP2lbYS0xXTp2b2lkIDB9ZnVuY3Rpb24gdDB0KGkpe3JldHVybiB0eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmxUfWZ1bmN0aW9uIGNyKGksYSl7dmFyIGY9SWYoaSk/bEZ0OnBZO3JldHVybiBmKGksdDB0KGEpKX1mdW5jdGlvbiBuRmUoaSxhKXt2YXIgZj1bXTtyZXR1cm4gcFkoaSxmdW5jdGlvbihwLHcsbSl7YShwLHcsbSkmJmYucHVzaChwKX0pLGZ9ZnVuY3Rpb24gRDUoaSxhKXt2YXIgZj1JZihpKT9nRnQ6bkZlO3JldHVybiBmKGkscGsoYSkpfWZ1bmN0aW9uIHJGZShpKXtyZXR1cm4gZnVuY3Rpb24oYSxmLHApe3ZhciB3PU9iamVjdChhKTtpZighY2soYSkpe3ZhciBtPXBrKGYpO2E9UmIoYSksZj1mdW5jdGlvbihFKXtyZXR1cm4gbSh3W0VdLEUsdyl9fXZhciBiPWkoYSxmLHApO3JldHVybiBiPi0xP3dbbT9hW2JdOmJdOnZvaWQgMH19dmFyIGlGZT1NYXRoLm1heDtmdW5jdGlvbiBzRmUoaSxhLGYpe3ZhciBwPWk9PW51bGw/MDppLmxlbmd0aDtpZighcClyZXR1cm4tMTt2YXIgdz1mPT1udWxsPzA6RUllKGYpO3JldHVybiB3PDAmJih3PWlGZShwK3csMCkpLGhGdChpLHBrKGEpLHcpfXZhciBhRmU9ckZlKHNGZSk7Y29uc3QgZTB0PWFGZTtmdW5jdGlvbiBSRnQoaSxhKXt2YXIgZj0tMSxwPWNrKGkpP0FycmF5KGkubGVuZ3RoKTpbXTtyZXR1cm4gcFkoaSxmdW5jdGlvbih3LG0sYil7cFsrK2ZdPWEodyxtLGIpfSkscH1mdW5jdGlvbiBGZihpLGEpe3ZhciBmPUlmKGkpP25MOlJGdDtyZXR1cm4gZihpLHBrKGEpKX1mdW5jdGlvbiBvRmUoaSxhKXtyZXR1cm4gaT09bnVsbD9pOnRkdChpLHQwdChhKSx1VCl9ZnVuY3Rpb24gY0ZlKGksYSl7cmV0dXJuIGkmJkpkdChpLHQwdChhKSl9ZnVuY3Rpb24gdUZlKGksYSl7cmV0dXJuIGk+YX12YXIgbEZlPU9iamVjdC5wcm90b3R5cGUsaEZlPWxGZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBmRmUoaSxhKXtyZXR1cm4gaSE9bnVsbCYmaEZlLmNhbGwoaSxhKX1mdW5jdGlvbiB6YShpLGEpe3JldHVybiBpIT1udWxsJiZQRnQoaSxhLGZGZSl9ZnVuY3Rpb24gZEZlKGksYSl7cmV0dXJuIG5MKGEsZnVuY3Rpb24oZil7cmV0dXJuIGlbZl19KX1mdW5jdGlvbiBJNShpKXtyZXR1cm4gaT09bnVsbD9bXTpkRmUoaSxSYihpKSl9ZnVuY3Rpb24gSmgoaSl7cmV0dXJuIGk9PT12b2lkIDB9ZnVuY3Rpb24gakZ0KGksYSl7cmV0dXJuIGk8YX1mdW5jdGlvbiB3WShpLGEpe3ZhciBmPXt9O3JldHVybiBhPXBrKGEpLEpkdChpLGZ1bmN0aW9uKHAsdyxtKXtUVyhmLHcsYShwLHcsbSkpfSksZn1mdW5jdGlvbiBuMHQoaSxhLGYpe2Zvcih2YXIgcD0tMSx3PWkubGVuZ3RoOysrcDx3Oyl7dmFyIG09aVtwXSxiPWEobSk7aWYoYiE9bnVsbCYmKEU9PT12b2lkIDA/Yj09PWImJiF2VChiKTpmKGIsRSkpKXZhciBFPWIsXz1tfXJldHVybiBffWZ1bmN0aW9uIG1UKGkpe3JldHVybiBpJiZpLmxlbmd0aD9uMHQoaSxsVCx1RmUpOnZvaWQgMH1mdW5jdGlvbiB3RihpKXtyZXR1cm4gaSYmaS5sZW5ndGg/bjB0KGksbFQsakZ0KTp2b2lkIDB9ZnVuY3Rpb24gcjB0KGksYSl7cmV0dXJuIGkmJmkubGVuZ3RoP24wdChpLHBrKGEpLGpGdCk6dm9pZCAwfWZ1bmN0aW9uIGdGZShpLGEsZixwKXtpZighRmIoaSkpcmV0dXJuIGk7YT1oWShhLGkpO2Zvcih2YXIgdz0tMSxtPWEubGVuZ3RoLGI9bS0xLEU9aTtFIT1udWxsJiYrK3c8bTspe3ZhciBfPWdGKGFbd10pLEE9ZjtpZihfPT09Il9fcHJvdG9fXyJ8fF89PT0iY29uc3RydWN0b3IifHxfPT09InByb3RvdHlwZSIpcmV0dXJuIGk7aWYodyE9Yil7dmFyIEk9RVtfXTtBPXA/cChJLF8sRSk6dm9pZCAwLEE9PT12b2lkIDAmJihBPUZiKEkpP0k6TVcoYVt3KzFdKT9bXTp7fSl9TFcoRSxfLEEpLEU9RVtfXX1yZXR1cm4gaX1mdW5jdGlvbiBwRmUoaSxhLGYpe2Zvcih2YXIgcD0tMSx3PWEubGVuZ3RoLG09e307KytwPHc7KXt2YXIgYj1hW3BdLEU9ZlkoaSxiKTtmKEUsYikmJmdGZShtLGhZKGIsaSksRSl9cmV0dXJuIG19ZnVuY3Rpb24gYkZlKGksYSl7dmFyIGY9aS5sZW5ndGg7Zm9yKGkuc29ydChhKTtmLS07KWlbZl09aVtmXS52YWx1ZTtyZXR1cm4gaX1mdW5jdGlvbiB3RmUoaSxhKXtpZihpIT09YSl7dmFyIGY9aSE9PXZvaWQgMCxwPWk9PT1udWxsLHc9aT09PWksbT12VChpKSxiPWEhPT12b2lkIDAsRT1hPT09bnVsbCxfPWE9PT1hLEE9dlQoYSk7aWYoIUUmJiFBJiYhbSYmaT5hfHxtJiZiJiZfJiYhRSYmIUF8fHAmJmImJl98fCFmJiZffHwhdylyZXR1cm4gMTtpZighcCYmIW0mJiFBJiZpPGF8fEEmJmYmJncmJiFwJiYhbXx8RSYmZiYmd3x8IWImJnd8fCFfKXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIHZGZShpLGEsZil7Zm9yKHZhciBwPS0xLHc9aS5jcml0ZXJpYSxtPWEuY3JpdGVyaWEsYj13Lmxlbmd0aCxFPWYubGVuZ3RoOysrcDxiOyl7dmFyIF89d0ZlKHdbcF0sbVtwXSk7aWYoXyl7aWYocD49RSlyZXR1cm4gXzt2YXIgQT1mW3BdO3JldHVybiBfKihBPT0iZGVzYyI/LTE6MSl9fXJldHVybiBpLmluZGV4LWEuaW5kZXh9ZnVuY3Rpb24gbUZlKGksYSxmKXthLmxlbmd0aD9hPW5MKGEsZnVuY3Rpb24obSl7cmV0dXJuIElmKG0pP2Z1bmN0aW9uKGIpe3JldHVybiBmWShiLG0ubGVuZ3RoPT09MT9tWzBdOm0pfTptfSk6YT1bbFRdO3ZhciBwPS0xO2E9bkwoYSxTVyhwaykpO3ZhciB3PVJGdChpLGZ1bmN0aW9uKG0sYixFKXt2YXIgXz1uTChhLGZ1bmN0aW9uKEEpe3JldHVybiBBKG0pfSk7cmV0dXJue2NyaXRlcmlhOl8saW5kZXg6KytwLHZhbHVlOm19fSk7cmV0dXJuIGJGZSh3LGZ1bmN0aW9uKG0sYil7cmV0dXJuIHZGZShtLGIsZil9KX1mdW5jdGlvbiB5RmUoaSxhKXtyZXR1cm4gcEZlKGksYSxmdW5jdGlvbihmLHApe3JldHVybiBGRnQoaSxwKX0pfXZhciB4RmU9JEllKGZ1bmN0aW9uKGksYSl7cmV0dXJuIGk9PW51bGw/e306eUZlKGksYSl9KTtjb25zdCB2Rj14RmU7dmFyIGtGZT1NYXRoLmNlaWwsRUZlPU1hdGgubWF4O2Z1bmN0aW9uIFRGZShpLGEsZixwKXtmb3IodmFyIHc9LTEsbT1FRmUoa0ZlKChhLWkpLyhmfHwxKSksMCksYj1BcnJheShtKTttLS07KWJbcD9tOisrd109aSxpKz1mO3JldHVybiBifWZ1bmN0aW9uIENGZShpKXtyZXR1cm4gZnVuY3Rpb24oYSxmLHApe3JldHVybiBwJiZ0eXBlb2YgcCE9Im51bWJlciImJm5GKGEsZixwKSYmKGY9cD12b2lkIDApLGE9bFkoYSksZj09PXZvaWQgMD8oZj1hLGE9MCk6Zj1sWShmKSxwPXA9PT12b2lkIDA/YTxmPzE6LTE6bFkocCksVEZlKGEsZixwLGkpfX12YXIgX0ZlPUNGZSgpO2NvbnN0IHlUPV9GZTtmdW5jdGlvbiBTRmUoaSxhLGYscCx3KXtyZXR1cm4gdyhpLGZ1bmN0aW9uKG0sYixFKXtmPXA/KHA9ITEsbSk6YShmLG0sYixFKX0pLGZ9ZnVuY3Rpb24gbUYoaSxhLGYpe3ZhciBwPUlmKGkpP3pJZTpTRmUsdz1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIHAoaSxwayhhKSxmLHcscFkpfXZhciBBRmU9RFcoZnVuY3Rpb24oaSxhKXtpZihpPT1udWxsKXJldHVybltdO3ZhciBmPWEubGVuZ3RoO3JldHVybiBmPjEmJm5GKGksYVswXSxhWzFdKT9hPVtdOmY+MiYmbkYoYVswXSxhWzFdLGFbMl0pJiYoYT1bYVswXV0pLG1GZShpLGRZKGEsMSksW10pfSk7Y29uc3QgeUY9QUZlO3ZhciBMRmU9MS8wLE1GZT1LQSYmMS9YZHQobmV3IEtBKFssLTBdKSlbMV09PUxGZT9mdW5jdGlvbihpKXtyZXR1cm4gbmV3IEtBKGkpfTpUSWU7Y29uc3QgREZlPU1GZTt2YXIgSUZlPTIwMDtmdW5jdGlvbiBPRmUoaSxhLGYpe3ZhciBwPS0xLHc9QUllLG09aS5sZW5ndGgsYj0hMCxFPVtdLF89RTtpZihmKWI9ITEsdz1lRmU7ZWxzZSBpZihtPj1JRmUpe3ZhciBBPWE/bnVsbDpERmUoaSk7aWYoQSlyZXR1cm4gWGR0KEEpO2I9ITEsdz1fRnQsXz1uZXcgYkZ9ZWxzZSBfPWE/W106RTt0OmZvcig7KytwPG07KXt2YXIgST1pW3BdLEI9YT9hKEkpOkk7aWYoST1mfHxJIT09MD9JOjAsYiYmQj09PUIpe2Zvcih2YXIgTj1fLmxlbmd0aDtOLS07KWlmKF9bTl09PT1CKWNvbnRpbnVlIHQ7YSYmXy5wdXNoKEIpLEUucHVzaChJKX1lbHNlIHcoXyxCLGYpfHwoXyE9PUUmJl8ucHVzaChCKSxFLnB1c2goSSkpfXJldHVybiBFfXZhciBQRmU9RFcoZnVuY3Rpb24oaSl7cmV0dXJuIE9GZShkWShpLDEsX0l0LCEwKSl9KTtjb25zdCBGRmU9UEZlO3ZhciBORmU9MDtmdW5jdGlvbiB2WShpKXt2YXIgYT0rK05GZTtyZXR1cm4gZkZ0KGkpK2F9ZnVuY3Rpb24gQkZlKGksYSxmKXtmb3IodmFyIHA9LTEsdz1pLmxlbmd0aCxtPWEubGVuZ3RoLGI9e307KytwPHc7KXt2YXIgRT1wPG0/YVtwXTp2b2lkIDA7ZihiLGlbcF0sRSl9cmV0dXJuIGJ9ZnVuY3Rpb24gUkZlKGksYSl7cmV0dXJuIEJGZShpfHxbXSxhfHxbXSxMVyl9dmFyIGpGZT0iXDAiLHhUPSJcMCIsJEZ0PSIBIjtjbGFzcyBjMXtjb25zdHJ1Y3RvcihhPXt9KXt0aGlzLl9pc0RpcmVjdGVkPXphKGEsImRpcmVjdGVkIik/YS5kaXJlY3RlZDohMCx0aGlzLl9pc011bHRpZ3JhcGg9emEoYSwibXVsdGlncmFwaCIpP2EubXVsdGlncmFwaDohMSx0aGlzLl9pc0NvbXBvdW5kPXphKGEsImNvbXBvdW5kIik/YS5jb21wb3VuZDohMSx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPUhBKHZvaWQgMCksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPUhBKHZvaWQgMCksdGhpcy5fbm9kZXM9e30sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudD17fSx0aGlzLl9jaGlsZHJlbj17fSx0aGlzLl9jaGlsZHJlblt4VF09e30pLHRoaXMuX2luPXt9LHRoaXMuX3ByZWRzPXt9LHRoaXMuX291dD17fSx0aGlzLl9zdWNzPXt9LHRoaXMuX2VkZ2VPYmpzPXt9LHRoaXMuX2VkZ2VMYWJlbHM9e319aXNEaXJlY3RlZCgpe3JldHVybiB0aGlzLl9pc0RpcmVjdGVkfWlzTXVsdGlncmFwaCgpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9aXNDb21wb3VuZCgpe3JldHVybiB0aGlzLl9pc0NvbXBvdW5kfXNldEdyYXBoKGEpe3JldHVybiB0aGlzLl9sYWJlbD1hLHRoaXN9Z3JhcGgoKXtyZXR1cm4gdGhpcy5fbGFiZWx9c2V0RGVmYXVsdE5vZGVMYWJlbChhKXtyZXR1cm4gQkEoYSl8fChhPUhBKGEpKSx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49YSx0aGlzfW5vZGVDb3VudCgpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9bm9kZXMoKXtyZXR1cm4gUmIodGhpcy5fbm9kZXMpfXNvdXJjZXMoKXt2YXIgYT10aGlzO3JldHVybiBENSh0aGlzLm5vZGVzKCksZnVuY3Rpb24oZil7cmV0dXJuIG9GKGEuX2luW2ZdKX0pfXNpbmtzKCl7dmFyIGE9dGhpcztyZXR1cm4gRDUodGhpcy5ub2RlcygpLGZ1bmN0aW9uKGYpe3JldHVybiBvRihhLl9vdXRbZl0pfSl9c2V0Tm9kZXMoYSxmKXt2YXIgcD1hcmd1bWVudHMsdz10aGlzO3JldHVybiBjcihhLGZ1bmN0aW9uKG0pe3AubGVuZ3RoPjE/dy5zZXROb2RlKG0sZik6dy5zZXROb2RlKG0pfSksdGhpc31zZXROb2RlKGEsZil7cmV0dXJuIHphKHRoaXMuX25vZGVzLGEpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1thXT1mKSx0aGlzKToodGhpcy5fbm9kZXNbYV09YXJndW1lbnRzLmxlbmd0aD4xP2Y6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKGEpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbYV09eFQsdGhpcy5fY2hpbGRyZW5bYV09e30sdGhpcy5fY2hpbGRyZW5beFRdW2FdPSEwKSx0aGlzLl9pblthXT17fSx0aGlzLl9wcmVkc1thXT17fSx0aGlzLl9vdXRbYV09e30sdGhpcy5fc3Vjc1thXT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX1ub2RlKGEpe3JldHVybiB0aGlzLl9ub2Rlc1thXX1oYXNOb2RlKGEpe3JldHVybiB6YSh0aGlzLl9ub2RlcyxhKX1yZW1vdmVOb2RlKGEpe3ZhciBmPXRoaXM7aWYoemEodGhpcy5fbm9kZXMsYSkpe3ZhciBwPWZ1bmN0aW9uKHcpe2YucmVtb3ZlRWRnZShmLl9lZGdlT2Jqc1t3XSl9O2RlbGV0ZSB0aGlzLl9ub2Rlc1thXSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QoYSksZGVsZXRlIHRoaXMuX3BhcmVudFthXSxjcih0aGlzLmNoaWxkcmVuKGEpLGZ1bmN0aW9uKHcpe2Yuc2V0UGFyZW50KHcpfSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuW2FdKSxjcihSYih0aGlzLl9pblthXSkscCksZGVsZXRlIHRoaXMuX2luW2FdLGRlbGV0ZSB0aGlzLl9wcmVkc1thXSxjcihSYih0aGlzLl9vdXRbYV0pLHApLGRlbGV0ZSB0aGlzLl9vdXRbYV0sZGVsZXRlIHRoaXMuX3N1Y3NbYV0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9c2V0UGFyZW50KGEsZil7aWYoIXRoaXMuX2lzQ29tcG91bmQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IHBhcmVudCBpbiBhIG5vbi1jb21wb3VuZCBncmFwaCIpO2lmKEpoKGYpKWY9eFQ7ZWxzZXtmKz0iIjtmb3IodmFyIHA9ZjshSmgocCk7cD10aGlzLnBhcmVudChwKSlpZihwPT09YSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgIitmKyIgYXMgcGFyZW50IG9mICIrYSsiIHdvdWxkIGNyZWF0ZSBhIGN5Y2xlIik7dGhpcy5zZXROb2RlKGYpfXJldHVybiB0aGlzLnNldE5vZGUoYSksdGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QoYSksdGhpcy5fcGFyZW50W2FdPWYsdGhpcy5fY2hpbGRyZW5bZl1bYV09ITAsdGhpc31fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QoYSl7ZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3RoaXMuX3BhcmVudFthXV1bYV19cGFyZW50KGEpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciBmPXRoaXMuX3BhcmVudFthXTtpZihmIT09eFQpcmV0dXJuIGZ9fWNoaWxkcmVuKGEpe2lmKEpoKGEpJiYoYT14VCksdGhpcy5faXNDb21wb3VuZCl7dmFyIGY9dGhpcy5fY2hpbGRyZW5bYV07aWYoZilyZXR1cm4gUmIoZil9ZWxzZXtpZihhPT09eFQpcmV0dXJuIHRoaXMubm9kZXMoKTtpZih0aGlzLmhhc05vZGUoYSkpcmV0dXJuW119fXByZWRlY2Vzc29ycyhhKXt2YXIgZj10aGlzLl9wcmVkc1thXTtpZihmKXJldHVybiBSYihmKX1zdWNjZXNzb3JzKGEpe3ZhciBmPXRoaXMuX3N1Y3NbYV07aWYoZilyZXR1cm4gUmIoZil9bmVpZ2hib3JzKGEpe3ZhciBmPXRoaXMucHJlZGVjZXNzb3JzKGEpO2lmKGYpcmV0dXJuIEZGZShmLHRoaXMuc3VjY2Vzc29ycyhhKSl9aXNMZWFmKGEpe3ZhciBmO3JldHVybiB0aGlzLmlzRGlyZWN0ZWQoKT9mPXRoaXMuc3VjY2Vzc29ycyhhKTpmPXRoaXMubmVpZ2hib3JzKGEpLGYubGVuZ3RoPT09MH1maWx0ZXJOb2RlcyhhKXt2YXIgZj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih7ZGlyZWN0ZWQ6dGhpcy5faXNEaXJlY3RlZCxtdWx0aWdyYXBoOnRoaXMuX2lzTXVsdGlncmFwaCxjb21wb3VuZDp0aGlzLl9pc0NvbXBvdW5kfSk7Zi5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO3ZhciBwPXRoaXM7Y3IodGhpcy5fbm9kZXMsZnVuY3Rpb24oYixFKXthKEUpJiZmLnNldE5vZGUoRSxiKX0pLGNyKHRoaXMuX2VkZ2VPYmpzLGZ1bmN0aW9uKGIpe2YuaGFzTm9kZShiLnYpJiZmLmhhc05vZGUoYi53KSYmZi5zZXRFZGdlKGIscC5lZGdlKGIpKX0pO3ZhciB3PXt9O2Z1bmN0aW9uIG0oYil7dmFyIEU9cC5wYXJlbnQoYik7cmV0dXJuIEU9PT12b2lkIDB8fGYuaGFzTm9kZShFKT8od1tiXT1FLEUpOkUgaW4gdz93W0VdOm0oRSl9cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJmNyKGYubm9kZXMoKSxmdW5jdGlvbihiKXtmLnNldFBhcmVudChiLG0oYikpfSksZn1zZXREZWZhdWx0RWRnZUxhYmVsKGEpe3JldHVybiBCQShhKXx8KGE9SEEoYSkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1hLHRoaXN9ZWRnZUNvdW50KCl7cmV0dXJuIHRoaXMuX2VkZ2VDb3VudH1lZGdlcygpe3JldHVybiBJNSh0aGlzLl9lZGdlT2Jqcyl9c2V0UGF0aChhLGYpe3ZhciBwPXRoaXMsdz1hcmd1bWVudHM7cmV0dXJuIG1GKGEsZnVuY3Rpb24obSxiKXtyZXR1cm4gdy5sZW5ndGg+MT9wLnNldEVkZ2UobSxiLGYpOnAuc2V0RWRnZShtLGIpLGJ9KSx0aGlzfXNldEVkZ2UoKXt2YXIgYSxmLHAsdyxtPSExLGI9YXJndW1lbnRzWzBdO3R5cGVvZiBiPT0ib2JqZWN0IiYmYiE9PW51bGwmJiJ2ImluIGI/KGE9Yi52LGY9Yi53LHA9Yi5uYW1lLGFyZ3VtZW50cy5sZW5ndGg9PT0yJiYodz1hcmd1bWVudHNbMV0sbT0hMCkpOihhPWIsZj1hcmd1bWVudHNbMV0scD1hcmd1bWVudHNbM10sYXJndW1lbnRzLmxlbmd0aD4yJiYodz1hcmd1bWVudHNbMl0sbT0hMCkpLGE9IiIrYSxmPSIiK2YsSmgocCl8fChwPSIiK3ApO3ZhciBFPXhGKHRoaXMuX2lzRGlyZWN0ZWQsYSxmLHApO2lmKHphKHRoaXMuX2VkZ2VMYWJlbHMsRSkpcmV0dXJuIG0mJih0aGlzLl9lZGdlTGFiZWxzW0VdPXcpLHRoaXM7aWYoIUpoKHApJiYhdGhpcy5faXNNdWx0aWdyYXBoKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBhIG5hbWVkIGVkZ2Ugd2hlbiBpc011bHRpZ3JhcGggPSBmYWxzZSIpO3RoaXMuc2V0Tm9kZShhKSx0aGlzLnNldE5vZGUoZiksdGhpcy5fZWRnZUxhYmVsc1tFXT1tP3c6dGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuKGEsZixwKTt2YXIgXz0kRmUodGhpcy5faXNEaXJlY3RlZCxhLGYscCk7cmV0dXJuIGE9Xy52LGY9Xy53LE9iamVjdC5mcmVlemUoXyksdGhpcy5fZWRnZU9ianNbRV09Xyx6RnQodGhpcy5fcHJlZHNbZl0sYSksekZ0KHRoaXMuX3N1Y3NbYV0sZiksdGhpcy5faW5bZl1bRV09Xyx0aGlzLl9vdXRbYV1bRV09Xyx0aGlzLl9lZGdlQ291bnQrKyx0aGlzfWVkZ2UoYSxmLHApe3ZhciB3PWFyZ3VtZW50cy5sZW5ndGg9PT0xP2kwdCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6eEYodGhpcy5faXNEaXJlY3RlZCxhLGYscCk7cmV0dXJuIHRoaXMuX2VkZ2VMYWJlbHNbd119aGFzRWRnZShhLGYscCl7dmFyIHc9YXJndW1lbnRzLmxlbmd0aD09PTE/aTB0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTp4Rih0aGlzLl9pc0RpcmVjdGVkLGEsZixwKTtyZXR1cm4gemEodGhpcy5fZWRnZUxhYmVscyx3KX1yZW1vdmVFZGdlKGEsZixwKXt2YXIgdz1hcmd1bWVudHMubGVuZ3RoPT09MT9pMHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOnhGKHRoaXMuX2lzRGlyZWN0ZWQsYSxmLHApLG09dGhpcy5fZWRnZU9ianNbd107cmV0dXJuIG0mJihhPW0udixmPW0udyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1t3XSxkZWxldGUgdGhpcy5fZWRnZU9ianNbd10scUZ0KHRoaXMuX3ByZWRzW2ZdLGEpLHFGdCh0aGlzLl9zdWNzW2FdLGYpLGRlbGV0ZSB0aGlzLl9pbltmXVt3XSxkZWxldGUgdGhpcy5fb3V0W2FdW3ddLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfWluRWRnZXMoYSxmKXt2YXIgcD10aGlzLl9pblthXTtpZihwKXt2YXIgdz1JNShwKTtyZXR1cm4gZj9ENSh3LGZ1bmN0aW9uKG0pe3JldHVybiBtLnY9PT1mfSk6d319b3V0RWRnZXMoYSxmKXt2YXIgcD10aGlzLl9vdXRbYV07aWYocCl7dmFyIHc9STUocCk7cmV0dXJuIGY/RDUodyxmdW5jdGlvbihtKXtyZXR1cm4gbS53PT09Zn0pOnd9fW5vZGVFZGdlcyhhLGYpe3ZhciBwPXRoaXMuaW5FZGdlcyhhLGYpO2lmKHApcmV0dXJuIHAuY29uY2F0KHRoaXMub3V0RWRnZXMoYSxmKSl9fWMxLnByb3RvdHlwZS5fbm9kZUNvdW50PTAsYzEucHJvdG90eXBlLl9lZGdlQ291bnQ9MDtmdW5jdGlvbiB6RnQoaSxhKXtpW2FdP2lbYV0rKzppW2FdPTF9ZnVuY3Rpb24gcUZ0KGksYSl7LS1pW2FdfHxkZWxldGUgaVthXX1mdW5jdGlvbiB4RihpLGEsZixwKXt2YXIgdz0iIithLG09IiIrZjtpZighaSYmdz5tKXt2YXIgYj13O3c9bSxtPWJ9cmV0dXJuIHcrJEZ0K20rJEZ0KyhKaChwKT9qRmU6cCl9ZnVuY3Rpb24gJEZlKGksYSxmLHApe3ZhciB3PSIiK2EsbT0iIitmO2lmKCFpJiZ3Pm0pe3ZhciBiPXc7dz1tLG09Yn12YXIgRT17djp3LHc6bX07cmV0dXJuIHAmJihFLm5hbWU9cCksRX1mdW5jdGlvbiBpMHQoaSxhKXtyZXR1cm4geEYoaSxhLnYsYS53LGEubmFtZSl9Y2xhc3MgekZle2NvbnN0cnVjdG9yKCl7dmFyIGE9e307YS5fbmV4dD1hLl9wcmV2PWEsdGhpcy5fc2VudGluZWw9YX1kZXF1ZXVlKCl7dmFyIGE9dGhpcy5fc2VudGluZWwsZj1hLl9wcmV2O2lmKGYhPT1hKXJldHVybiBIRnQoZiksZn1lbnF1ZXVlKGEpe3ZhciBmPXRoaXMuX3NlbnRpbmVsO2EuX3ByZXYmJmEuX25leHQmJkhGdChhKSxhLl9uZXh0PWYuX25leHQsZi5fbmV4dC5fcHJldj1hLGYuX25leHQ9YSxhLl9wcmV2PWZ9dG9TdHJpbmcoKXtmb3IodmFyIGE9W10sZj10aGlzLl9zZW50aW5lbCxwPWYuX3ByZXY7cCE9PWY7KWEucHVzaChKU09OLnN0cmluZ2lmeShwLHFGZSkpLHA9cC5fcHJldjtyZXR1cm4iWyIrYS5qb2luKCIsICIpKyJdIn19ZnVuY3Rpb24gSEZ0KGkpe2kuX3ByZXYuX25leHQ9aS5fbmV4dCxpLl9uZXh0Ll9wcmV2PWkuX3ByZXYsZGVsZXRlIGkuX25leHQsZGVsZXRlIGkuX3ByZXZ9ZnVuY3Rpb24gcUZlKGksYSl7aWYoaSE9PSJfbmV4dCImJmkhPT0iX3ByZXYiKXJldHVybiBhfXZhciBIRmU9SEEoMSk7ZnVuY3Rpb24gVkZlKGksYSl7aWYoaS5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgZj1VRmUoaSxhfHxIRmUpLHA9R0ZlKGYuZ3JhcGgsZi5idWNrZXRzLGYuemVyb0lkeCk7cmV0dXJuIHJMKEZmKHAsZnVuY3Rpb24odyl7cmV0dXJuIGkub3V0RWRnZXMody52LHcudyl9KSl9ZnVuY3Rpb24gR0ZlKGksYSxmKXtmb3IodmFyIHA9W10sdz1hW2EubGVuZ3RoLTFdLG09YVswXSxiO2kubm9kZUNvdW50KCk7KXtmb3IoO2I9bS5kZXF1ZXVlKCk7KXMwdChpLGEsZixiKTtmb3IoO2I9dy5kZXF1ZXVlKCk7KXMwdChpLGEsZixiKTtpZihpLm5vZGVDb3VudCgpKXtmb3IodmFyIEU9YS5sZW5ndGgtMjtFPjA7LS1FKWlmKGI9YVtFXS5kZXF1ZXVlKCksYil7cD1wLmNvbmNhdChzMHQoaSxhLGYsYiwhMCkpO2JyZWFrfX19cmV0dXJuIHB9ZnVuY3Rpb24gczB0KGksYSxmLHAsdyl7dmFyIG09dz9bXTp2b2lkIDA7cmV0dXJuIGNyKGkuaW5FZGdlcyhwLnYpLGZ1bmN0aW9uKGIpe3ZhciBFPWkuZWRnZShiKSxfPWkubm9kZShiLnYpO3cmJm0ucHVzaCh7djpiLnYsdzpiLnd9KSxfLm91dC09RSxhMHQoYSxmLF8pfSksY3IoaS5vdXRFZGdlcyhwLnYpLGZ1bmN0aW9uKGIpe3ZhciBFPWkuZWRnZShiKSxfPWIudyxBPWkubm9kZShfKTtBLmluLT1FLGEwdChhLGYsQSl9KSxpLnJlbW92ZU5vZGUocC52KSxtfWZ1bmN0aW9uIFVGZShpLGEpe3ZhciBmPW5ldyBjMSxwPTAsdz0wO2NyKGkubm9kZXMoKSxmdW5jdGlvbihFKXtmLnNldE5vZGUoRSx7djpFLGluOjAsb3V0OjB9KX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihFKXt2YXIgXz1mLmVkZ2UoRS52LEUudyl8fDAsQT1hKEUpLEk9XytBO2Yuc2V0RWRnZShFLnYsRS53LEkpLHc9TWF0aC5tYXgodyxmLm5vZGUoRS52KS5vdXQrPUEpLHA9TWF0aC5tYXgocCxmLm5vZGUoRS53KS5pbis9QSl9KTt2YXIgbT15VCh3K3ArMykubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB6RmV9KSxiPXArMTtyZXR1cm4gY3IoZi5ub2RlcygpLGZ1bmN0aW9uKEUpe2EwdChtLGIsZi5ub2RlKEUpKX0pLHtncmFwaDpmLGJ1Y2tldHM6bSx6ZXJvSWR4OmJ9fWZ1bmN0aW9uIGEwdChpLGEsZil7Zi5vdXQ/Zi5pbj9pW2Yub3V0LWYuaW4rYV0uZW5xdWV1ZShmKTppW2kubGVuZ3RoLTFdLmVucXVldWUoZik6aVswXS5lbnF1ZXVlKGYpfWZ1bmN0aW9uIFdGZShpKXt2YXIgYT1pLmdyYXBoKCkuYWN5Y2xpY2VyPT09ImdyZWVkeSI/VkZlKGksZihpKSk6WUZlKGkpO2NyKGEsZnVuY3Rpb24ocCl7dmFyIHc9aS5lZGdlKHApO2kucmVtb3ZlRWRnZShwKSx3LmZvcndhcmROYW1lPXAubmFtZSx3LnJldmVyc2VkPSEwLGkuc2V0RWRnZShwLncscC52LHcsdlkoInJldiIpKX0pO2Z1bmN0aW9uIGYocCl7cmV0dXJuIGZ1bmN0aW9uKHcpe3JldHVybiBwLmVkZ2Uodykud2VpZ2h0fX19ZnVuY3Rpb24gWUZlKGkpe3ZhciBhPVtdLGY9e30scD17fTtmdW5jdGlvbiB3KG0pe3phKHAsbSl8fChwW21dPSEwLGZbbV09ITAsY3IoaS5vdXRFZGdlcyhtKSxmdW5jdGlvbihiKXt6YShmLGIudyk/YS5wdXNoKGIpOncoYi53KX0pLGRlbGV0ZSBmW21dKX1yZXR1cm4gY3IoaS5ub2RlcygpLHcpLGF9ZnVuY3Rpb24gS0ZlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSk7aWYoZi5yZXZlcnNlZCl7aS5yZW1vdmVFZGdlKGEpO3ZhciBwPWYuZm9yd2FyZE5hbWU7ZGVsZXRlIGYucmV2ZXJzZWQsZGVsZXRlIGYuZm9yd2FyZE5hbWUsaS5zZXRFZGdlKGEudyxhLnYsZixwKX19KX1mdW5jdGlvbiBzTChpLGEsZixwKXt2YXIgdztkbyB3PXZZKHApO3doaWxlKGkuaGFzTm9kZSh3KSk7cmV0dXJuIGYuZHVtbXk9YSxpLnNldE5vZGUodyxmKSx3fWZ1bmN0aW9uIFhGZShpKXt2YXIgYT1uZXcgYzEoKS5zZXRHcmFwaChpLmdyYXBoKCkpO3JldHVybiBjcihpLm5vZGVzKCksZnVuY3Rpb24oZil7YS5zZXROb2RlKGYsaS5ub2RlKGYpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1hLmVkZ2UoZi52LGYudyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0sdz1pLmVkZ2UoZik7YS5zZXRFZGdlKGYudixmLncse3dlaWdodDpwLndlaWdodCt3LndlaWdodCxtaW5sZW46TWF0aC5tYXgocC5taW5sZW4sdy5taW5sZW4pfSl9KSxhfWZ1bmN0aW9uIFZGdChpKXt2YXIgYT1uZXcgYzEoe211bHRpZ3JhcGg6aS5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKGkuZ3JhcGgoKSk7cmV0dXJuIGNyKGkubm9kZXMoKSxmdW5jdGlvbihmKXtpLmNoaWxkcmVuKGYpLmxlbmd0aHx8YS5zZXROb2RlKGYsaS5ub2RlKGYpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihmKXthLnNldEVkZ2UoZixpLmVkZ2UoZikpfSksYX1mdW5jdGlvbiBHRnQoaSxhKXt2YXIgZj1pLngscD1pLnksdz1hLngtZixtPWEueS1wLGI9aS53aWR0aC8yLEU9aS5oZWlnaHQvMjtpZighdyYmIW0pdGhyb3cgbmV3IEVycm9yKCJOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGUiKTt2YXIgXyxBO3JldHVybiBNYXRoLmFicyhtKSpiPk1hdGguYWJzKHcpKkU/KG08MCYmKEU9LUUpLF89RSp3L20sQT1FKToodzwwJiYoYj0tYiksXz1iLEE9YiptL3cpLHt4OmYrXyx5OnArQX19ZnVuY3Rpb24gbVkoaSl7dmFyIGE9RmYoeVQoV0Z0KGkpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gY3IoaS5ub2RlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkubm9kZShmKSx3PXAucmFuaztKaCh3KXx8KGFbd11bcC5vcmRlcl09Zil9KSxhfWZ1bmN0aW9uIFFGZShpKXt2YXIgYT13RihGZihpLm5vZGVzKCksZnVuY3Rpb24oZil7cmV0dXJuIGkubm9kZShmKS5yYW5rfSkpO2NyKGkubm9kZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1pLm5vZGUoZik7emEocCwicmFuayIpJiYocC5yYW5rLT1hKX0pfWZ1bmN0aW9uIFpGZShpKXt2YXIgYT13RihGZihpLm5vZGVzKCksZnVuY3Rpb24obSl7cmV0dXJuIGkubm9kZShtKS5yYW5rfSkpLGY9W107Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKG0pe3ZhciBiPWkubm9kZShtKS5yYW5rLWE7ZltiXXx8KGZbYl09W10pLGZbYl0ucHVzaChtKX0pO3ZhciBwPTAsdz1pLmdyYXBoKCkubm9kZVJhbmtGYWN0b3I7Y3IoZixmdW5jdGlvbihtLGIpe0poKG0pJiZiJXchPT0wPy0tcDpwJiZjcihtLGZ1bmN0aW9uKEUpe2kubm9kZShFKS5yYW5rKz1wfSl9KX1mdW5jdGlvbiBVRnQoaSxhLGYscCl7dmFyIHc9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYody5yYW5rPWYsdy5vcmRlcj1wKSxzTChpLCJib3JkZXIiLHcsYSl9ZnVuY3Rpb24gV0Z0KGkpe3JldHVybiBtVChGZihpLm5vZGVzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpLnJhbms7aWYoIUpoKGYpKXJldHVybiBmfSkpfWZ1bmN0aW9uIEpGZShpLGEpe3ZhciBmPXtsaHM6W10scmhzOltdfTtyZXR1cm4gY3IoaSxmdW5jdGlvbihwKXthKHApP2YubGhzLnB1c2gocCk6Zi5yaHMucHVzaChwKX0pLGZ9ZnVuY3Rpb24gdE5lKGksYSl7dmFyIGY9TkZ0KCk7dHJ5e3JldHVybiBhKCl9ZmluYWxseXtjb25zb2xlLmxvZyhpKyIgdGltZTogIisoTkZ0KCktZikrIm1zIil9fWZ1bmN0aW9uIGVOZShpLGEpe3JldHVybiBhKCl9ZnVuY3Rpb24gbk5lKGkpe2Z1bmN0aW9uIGEoZil7dmFyIHA9aS5jaGlsZHJlbihmKSx3PWkubm9kZShmKTtpZihwLmxlbmd0aCYmY3IocCxhKSx6YSh3LCJtaW5SYW5rIikpe3cuYm9yZGVyTGVmdD1bXSx3LmJvcmRlclJpZ2h0PVtdO2Zvcih2YXIgbT13Lm1pblJhbmssYj13Lm1heFJhbmsrMTttPGI7KyttKVlGdChpLCJib3JkZXJMZWZ0IiwiX2JsIixmLHcsbSksWUZ0KGksImJvcmRlclJpZ2h0IiwiX2JyIixmLHcsbSl9fWNyKGkuY2hpbGRyZW4oKSxhKX1mdW5jdGlvbiBZRnQoaSxhLGYscCx3LG0pe3ZhciBiPXt3aWR0aDowLGhlaWdodDowLHJhbms6bSxib3JkZXJUeXBlOmF9LEU9d1thXVttLTFdLF89c0woaSwiYm9yZGVyIixiLGYpO3dbYV1bbV09XyxpLnNldFBhcmVudChfLHApLEUmJmkuc2V0RWRnZShFLF8se3dlaWdodDoxfSl9ZnVuY3Rpb24gck5lKGkpe3ZhciBhPWkuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KGE9PT0ibHIifHxhPT09InJsIikmJktGdChpKX1mdW5jdGlvbiBpTmUoaSl7dmFyIGE9aS5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsoYT09PSJidCJ8fGE9PT0icmwiKSYmc05lKGkpLChhPT09ImxyInx8YT09PSJybCIpJiYoYU5lKGkpLEtGdChpKSl9ZnVuY3Rpb24gS0Z0KGkpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihhKXtYRnQoaS5ub2RlKGEpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXtYRnQoaS5lZGdlKGEpKX0pfWZ1bmN0aW9uIFhGdChpKXt2YXIgYT1pLndpZHRoO2kud2lkdGg9aS5oZWlnaHQsaS5oZWlnaHQ9YX1mdW5jdGlvbiBzTmUoaSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe28wdChpLm5vZGUoYSkpfSksY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTtjcihmLnBvaW50cyxvMHQpLHphKGYsInkiKSYmbzB0KGYpfSl9ZnVuY3Rpb24gbzB0KGkpe2kueT0taS55fWZ1bmN0aW9uIGFOZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7YzB0KGkubm9kZShhKSl9KSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5lZGdlKGEpO2NyKGYucG9pbnRzLGMwdCksemEoZiwieCIpJiZjMHQoZil9KX1mdW5jdGlvbiBjMHQoaSl7dmFyIGE9aS54O2kueD1pLnksaS55PWF9ZnVuY3Rpb24gb05lKGkpe2kuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7Y05lKGksYSl9KX1mdW5jdGlvbiBjTmUoaSxhKXt2YXIgZj1hLnYscD1pLm5vZGUoZikucmFuayx3PWEudyxtPWkubm9kZSh3KS5yYW5rLGI9YS5uYW1lLEU9aS5lZGdlKGEpLF89RS5sYWJlbFJhbms7aWYobSE9PXArMSl7aS5yZW1vdmVFZGdlKGEpO3ZhciBBLEksQjtmb3IoQj0wLCsrcDtwPG07KytCLCsrcClFLnBvaW50cz1bXSxJPXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpFLGVkZ2VPYmo6YSxyYW5rOnB9LEE9c0woaSwiZWRnZSIsSSwiX2QiKSxwPT09XyYmKEkud2lkdGg9RS53aWR0aCxJLmhlaWdodD1FLmhlaWdodCxJLmR1bW15PSJlZGdlLWxhYmVsIixJLmxhYmVscG9zPUUubGFiZWxwb3MpLGkuc2V0RWRnZShmLEEse3dlaWdodDpFLndlaWdodH0sYiksQj09PTAmJmkuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKEEpLGY9QTtpLnNldEVkZ2UoZix3LHt3ZWlnaHQ6RS53ZWlnaHR9LGIpfX1mdW5jdGlvbiB1TmUoaSl7Y3IoaS5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKSxwPWYuZWRnZUxhYmVsLHc7Zm9yKGkuc2V0RWRnZShmLmVkZ2VPYmoscCk7Zi5kdW1teTspdz1pLnN1Y2Nlc3NvcnMoYSlbMF0saS5yZW1vdmVOb2RlKGEpLHAucG9pbnRzLnB1c2goe3g6Zi54LHk6Zi55fSksZi5kdW1teT09PSJlZGdlLWxhYmVsIiYmKHAueD1mLngscC55PWYueSxwLndpZHRoPWYud2lkdGgscC5oZWlnaHQ9Zi5oZWlnaHQpLGE9dyxmPWkubm9kZShhKX0pfWZ1bmN0aW9uIHUwdChpKXt2YXIgYT17fTtmdW5jdGlvbiBmKHApe3ZhciB3PWkubm9kZShwKTtpZih6YShhLHApKXJldHVybiB3LnJhbms7YVtwXT0hMDt2YXIgbT13RihGZihpLm91dEVkZ2VzKHApLGZ1bmN0aW9uKGIpe3JldHVybiBmKGIudyktaS5lZGdlKGIpLm1pbmxlbn0pKTtyZXR1cm4obT09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWXx8bT09PXZvaWQgMHx8bT09PW51bGwpJiYobT0wKSx3LnJhbms9bX1jcihpLnNvdXJjZXMoKSxmKX1mdW5jdGlvbiBrRihpLGEpe3JldHVybiBpLm5vZGUoYS53KS5yYW5rLWkubm9kZShhLnYpLnJhbmstaS5lZGdlKGEpLm1pbmxlbn1mdW5jdGlvbiBRRnQoaSl7dmFyIGE9bmV3IGMxKHtkaXJlY3RlZDohMX0pLGY9aS5ub2RlcygpWzBdLHA9aS5ub2RlQ291bnQoKTthLnNldE5vZGUoZix7fSk7Zm9yKHZhciB3LG07bE5lKGEsaSk8cDspdz1oTmUoYSxpKSxtPWEuaGFzTm9kZSh3LnYpP2tGKGksdyk6LWtGKGksdyksZk5lKGEsaSxtKTtyZXR1cm4gYX1mdW5jdGlvbiBsTmUoaSxhKXtmdW5jdGlvbiBmKHApe2NyKGEubm9kZUVkZ2VzKHApLGZ1bmN0aW9uKHcpe3ZhciBtPXcudixiPXA9PT1tP3cudzptOyFpLmhhc05vZGUoYikmJiFrRihhLHcpJiYoaS5zZXROb2RlKGIse30pLGkuc2V0RWRnZShwLGIse30pLGYoYikpfSl9cmV0dXJuIGNyKGkubm9kZXMoKSxmKSxpLm5vZGVDb3VudCgpfWZ1bmN0aW9uIGhOZShpLGEpe3JldHVybiByMHQoYS5lZGdlcygpLGZ1bmN0aW9uKGYpe2lmKGkuaGFzTm9kZShmLnYpIT09aS5oYXNOb2RlKGYudykpcmV0dXJuIGtGKGEsZil9KX1mdW5jdGlvbiBmTmUoaSxhLGYpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihwKXthLm5vZGUocCkucmFuays9Zn0pfWZ1bmN0aW9uIGROZSgpe31kTmUucHJvdG90eXBlPW5ldyBFcnJvcjtmdW5jdGlvbiBaRnQoaSxhLGYpe0lmKGEpfHwoYT1bYV0pO3ZhciBwPShpLmlzRGlyZWN0ZWQoKT9pLnN1Y2Nlc3NvcnM6aS5uZWlnaGJvcnMpLmJpbmQoaSksdz1bXSxtPXt9O3JldHVybiBjcihhLGZ1bmN0aW9uKGIpe2lmKCFpLmhhc05vZGUoYikpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrYik7SkZ0KGksYixmPT09InBvc3QiLG0scCx3KX0pLHd9ZnVuY3Rpb24gSkZ0KGksYSxmLHAsdyxtKXt6YShwLGEpfHwocFthXT0hMCxmfHxtLnB1c2goYSksY3IodyhhKSxmdW5jdGlvbihiKXtKRnQoaSxiLGYscCx3LG0pfSksZiYmbS5wdXNoKGEpKX1mdW5jdGlvbiBnTmUoaSxhKXtyZXR1cm4gWkZ0KGksYSwicG9zdCIpfWZ1bmN0aW9uIHBOZShpLGEpe3JldHVybiBaRnQoaSxhLCJwcmUiKX1rVC5pbml0TG93TGltVmFsdWVzPWgwdCxrVC5pbml0Q3V0VmFsdWVzPWwwdCxrVC5jYWxjQ3V0VmFsdWU9dE50LGtULmxlYXZlRWRnZT1uTnQsa1QuZW50ZXJFZGdlPXJOdCxrVC5leGNoYW5nZUVkZ2VzPWlOdDtmdW5jdGlvbiBrVChpKXtpPVhGZShpKSx1MHQoaSk7dmFyIGE9UUZ0KGkpO2gwdChhKSxsMHQoYSxpKTtmb3IodmFyIGYscDtmPW5OdChhKTspcD1yTnQoYSxpLGYpLGlOdChhLGksZixwKX1mdW5jdGlvbiBsMHQoaSxhKXt2YXIgZj1nTmUoaSxpLm5vZGVzKCkpO2Y9Zi5zbGljZSgwLGYubGVuZ3RoLTEpLGNyKGYsZnVuY3Rpb24ocCl7Yk5lKGksYSxwKX0pfWZ1bmN0aW9uIGJOZShpLGEsZil7dmFyIHA9aS5ub2RlKGYpLHc9cC5wYXJlbnQ7aS5lZGdlKGYsdykuY3V0dmFsdWU9dE50KGksYSxmKX1mdW5jdGlvbiB0TnQoaSxhLGYpe3ZhciBwPWkubm9kZShmKSx3PXAucGFyZW50LG09ITAsYj1hLmVkZ2UoZix3KSxFPTA7cmV0dXJuIGJ8fChtPSExLGI9YS5lZGdlKHcsZikpLEU9Yi53ZWlnaHQsY3IoYS5ub2RlRWRnZXMoZiksZnVuY3Rpb24oXyl7dmFyIEE9Xy52PT09ZixJPUE/Xy53Ol8udjtpZihJIT09dyl7dmFyIEI9QT09PW0sTj1hLmVkZ2UoXykud2VpZ2h0O2lmKEUrPUI/TjotTix2TmUoaSxmLEkpKXt2YXIgUj1pLmVkZ2UoZixJKS5jdXR2YWx1ZTtFKz1CPy1SOlJ9fX0pLEV9ZnVuY3Rpb24gaDB0KGksYSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoYT1pLm5vZGVzKClbMF0pLGVOdChpLHt9LDEsYSl9ZnVuY3Rpb24gZU50KGksYSxmLHAsdyl7dmFyIG09ZixiPWkubm9kZShwKTtyZXR1cm4gYVtwXT0hMCxjcihpLm5laWdoYm9ycyhwKSxmdW5jdGlvbihFKXt6YShhLEUpfHwoZj1lTnQoaSxhLGYsRSxwKSl9KSxiLmxvdz1tLGIubGltPWYrKyx3P2IucGFyZW50PXc6ZGVsZXRlIGIucGFyZW50LGZ9ZnVuY3Rpb24gbk50KGkpe3JldHVybiBlMHQoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3JldHVybiBpLmVkZ2UoYSkuY3V0dmFsdWU8MH0pfWZ1bmN0aW9uIHJOdChpLGEsZil7dmFyIHA9Zi52LHc9Zi53O2EuaGFzRWRnZShwLHcpfHwocD1mLncsdz1mLnYpO3ZhciBtPWkubm9kZShwKSxiPWkubm9kZSh3KSxFPW0sXz0hMTttLmxpbT5iLmxpbSYmKEU9YixfPSEwKTt2YXIgQT1ENShhLmVkZ2VzKCksZnVuY3Rpb24oSSl7cmV0dXJuIF89PT1zTnQoaSxpLm5vZGUoSS52KSxFKSYmXyE9PXNOdChpLGkubm9kZShJLncpLEUpfSk7cmV0dXJuIHIwdChBLGZ1bmN0aW9uKEkpe3JldHVybiBrRihhLEkpfSl9ZnVuY3Rpb24gaU50KGksYSxmLHApe3ZhciB3PWYudixtPWYudztpLnJlbW92ZUVkZ2UodyxtKSxpLnNldEVkZ2UocC52LHAudyx7fSksaDB0KGkpLGwwdChpLGEpLHdOZShpLGEpfWZ1bmN0aW9uIHdOZShpLGEpe3ZhciBmPWUwdChpLm5vZGVzKCksZnVuY3Rpb24odyl7cmV0dXJuIWEubm9kZSh3KS5wYXJlbnR9KSxwPXBOZShpLGYpO3A9cC5zbGljZSgxKSxjcihwLGZ1bmN0aW9uKHcpe3ZhciBtPWkubm9kZSh3KS5wYXJlbnQsYj1hLmVkZ2UodyxtKSxFPSExO2J8fChiPWEuZWRnZShtLHcpLEU9ITApLGEubm9kZSh3KS5yYW5rPWEubm9kZShtKS5yYW5rKyhFP2IubWlubGVuOi1iLm1pbmxlbil9KX1mdW5jdGlvbiB2TmUoaSxhLGYpe3JldHVybiBpLmhhc0VkZ2UoYSxmKX1mdW5jdGlvbiBzTnQoaSxhLGYpe3JldHVybiBmLmxvdzw9YS5saW0mJmEubGltPD1mLmxpbX1mdW5jdGlvbiBtTmUoaSl7c3dpdGNoKGkuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjphTnQoaSk7YnJlYWs7Y2FzZSJ0aWdodC10cmVlIjp4TmUoaSk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOnlOZShpKTticmVhaztkZWZhdWx0OmFOdChpKX19dmFyIHlOZT11MHQ7ZnVuY3Rpb24geE5lKGkpe3UwdChpKSxRRnQoaSl9ZnVuY3Rpb24gYU50KGkpe2tUKGkpfWZ1bmN0aW9uIGtOZShpKXt2YXIgYT1zTChpLCJyb290Iix7fSwiX3Jvb3QiKSxmPUVOZShpKSxwPW1UKEk1KGYpKS0xLHc9MipwKzE7aS5ncmFwaCgpLm5lc3RpbmdSb290PWEsY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGIpe2kuZWRnZShiKS5taW5sZW4qPXd9KTt2YXIgbT1UTmUoaSkrMTtjcihpLmNoaWxkcmVuKCksZnVuY3Rpb24oYil7b050KGksYSx3LG0scCxmLGIpfSksaS5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPXd9ZnVuY3Rpb24gb050KGksYSxmLHAsdyxtLGIpe3ZhciBFPWkuY2hpbGRyZW4oYik7aWYoIUUubGVuZ3RoKXtiIT09YSYmaS5zZXRFZGdlKGEsYix7d2VpZ2h0OjAsbWlubGVuOmZ9KTtyZXR1cm59dmFyIF89VUZ0KGksIl9idCIpLEE9VUZ0KGksIl9iYiIpLEk9aS5ub2RlKGIpO2kuc2V0UGFyZW50KF8sYiksSS5ib3JkZXJUb3A9XyxpLnNldFBhcmVudChBLGIpLEkuYm9yZGVyQm90dG9tPUEsY3IoRSxmdW5jdGlvbihCKXtvTnQoaSxhLGYscCx3LG0sQik7dmFyIE49aS5ub2RlKEIpLFI9Ti5ib3JkZXJUb3A/Ti5ib3JkZXJUb3A6Qix6PU4uYm9yZGVyQm90dG9tP04uYm9yZGVyQm90dG9tOkIsVz1OLmJvcmRlclRvcD9wOjIqcCxldD1SIT09ej8xOnctbVtiXSsxO2kuc2V0RWRnZShfLFIse3dlaWdodDpXLG1pbmxlbjpldCxuZXN0aW5nRWRnZTohMH0pLGkuc2V0RWRnZSh6LEEse3dlaWdodDpXLG1pbmxlbjpldCxuZXN0aW5nRWRnZTohMH0pfSksaS5wYXJlbnQoYil8fGkuc2V0RWRnZShhLF8se3dlaWdodDowLG1pbmxlbjp3K21bYl19KX1mdW5jdGlvbiBFTmUoaSl7dmFyIGE9e307ZnVuY3Rpb24gZihwLHcpe3ZhciBtPWkuY2hpbGRyZW4ocCk7bSYmbS5sZW5ndGgmJmNyKG0sZnVuY3Rpb24oYil7ZihiLHcrMSl9KSxhW3BdPXd9cmV0dXJuIGNyKGkuY2hpbGRyZW4oKSxmdW5jdGlvbihwKXtmKHAsMSl9KSxhfWZ1bmN0aW9uIFROZShpKXtyZXR1cm4gbUYoaS5lZGdlcygpLGZ1bmN0aW9uKGEsZil7cmV0dXJuIGEraS5lZGdlKGYpLndlaWdodH0sMCl9ZnVuY3Rpb24gQ05lKGkpe3ZhciBhPWkuZ3JhcGgoKTtpLnJlbW92ZU5vZGUoYS5uZXN0aW5nUm9vdCksZGVsZXRlIGEubmVzdGluZ1Jvb3QsY3IoaS5lZGdlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkuZWRnZShmKTtwLm5lc3RpbmdFZGdlJiZpLnJlbW92ZUVkZ2UoZil9KX1mdW5jdGlvbiBfTmUoaSxhLGYpe3ZhciBwPXt9LHc7Y3IoZixmdW5jdGlvbihtKXtmb3IodmFyIGI9aS5wYXJlbnQobSksRSxfO2I7KXtpZihFPWkucGFyZW50KGIpLEU/KF89cFtFXSxwW0VdPWIpOihfPXcsdz1iKSxfJiZfIT09Yil7YS5zZXRFZGdlKF8sYik7cmV0dXJufWI9RX19KX1mdW5jdGlvbiBTTmUoaSxhLGYpe3ZhciBwPUFOZShpKSx3PW5ldyBjMSh7Y29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cm9vdDpwfSkuc2V0RGVmYXVsdE5vZGVMYWJlbChmdW5jdGlvbihtKXtyZXR1cm4gaS5ub2RlKG0pfSk7cmV0dXJuIGNyKGkubm9kZXMoKSxmdW5jdGlvbihtKXt2YXIgYj1pLm5vZGUobSksRT1pLnBhcmVudChtKTsoYi5yYW5rPT09YXx8Yi5taW5SYW5rPD1hJiZhPD1iLm1heFJhbmspJiYody5zZXROb2RlKG0pLHcuc2V0UGFyZW50KG0sRXx8cCksY3IoaVtmXShtKSxmdW5jdGlvbihfKXt2YXIgQT1fLnY9PT1tP18udzpfLnYsST13LmVkZ2UoQSxtKSxCPUpoKEkpPzA6SS53ZWlnaHQ7dy5zZXRFZGdlKEEsbSx7d2VpZ2h0OmkuZWRnZShfKS53ZWlnaHQrQn0pfSksemEoYiwibWluUmFuayIpJiZ3LnNldE5vZGUobSx7Ym9yZGVyTGVmdDpiLmJvcmRlckxlZnRbYV0sYm9yZGVyUmlnaHQ6Yi5ib3JkZXJSaWdodFthXX0pKX0pLHd9ZnVuY3Rpb24gQU5lKGkpe2Zvcih2YXIgYTtpLmhhc05vZGUoYT12WSgiX3Jvb3QiKSk7KTtyZXR1cm4gYX1mdW5jdGlvbiBMTmUoaSxhKXtmb3IodmFyIGY9MCxwPTE7cDxhLmxlbmd0aDsrK3ApZis9TU5lKGksYVtwLTFdLGFbcF0pO3JldHVybiBmfWZ1bmN0aW9uIE1OZShpLGEsZil7Zm9yKHZhciBwPVJGZShmLEZmKGYsZnVuY3Rpb24oQSxJKXtyZXR1cm4gSX0pKSx3PXJMKEZmKGEsZnVuY3Rpb24oQSl7cmV0dXJuIHlGKEZmKGkub3V0RWRnZXMoQSksZnVuY3Rpb24oSSl7cmV0dXJue3BvczpwW0kud10sd2VpZ2h0OmkuZWRnZShJKS53ZWlnaHR9fSksInBvcyIpfSkpLG09MTttPGYubGVuZ3RoOyltPDw9MTt2YXIgYj0yKm0tMTttLT0xO3ZhciBFPUZmKG5ldyBBcnJheShiKSxmdW5jdGlvbigpe3JldHVybiAwfSksXz0wO3JldHVybiBjcih3LmZvckVhY2goZnVuY3Rpb24oQSl7dmFyIEk9QS5wb3MrbTtFW0ldKz1BLndlaWdodDtmb3IodmFyIEI9MDtJPjA7KUklMiYmKEIrPUVbSSsxXSksST1JLTE+PjEsRVtJXSs9QS53ZWlnaHQ7Xys9QS53ZWlnaHQqQn0pKSxffWZ1bmN0aW9uIEROZShpKXt2YXIgYT17fSxmPUQ1KGkubm9kZXMoKSxmdW5jdGlvbihFKXtyZXR1cm4haS5jaGlsZHJlbihFKS5sZW5ndGh9KSxwPW1UKEZmKGYsZnVuY3Rpb24oRSl7cmV0dXJuIGkubm9kZShFKS5yYW5rfSkpLHc9RmYoeVQocCsxKSxmdW5jdGlvbigpe3JldHVybltdfSk7ZnVuY3Rpb24gbShFKXtpZighemEoYSxFKSl7YVtFXT0hMDt2YXIgXz1pLm5vZGUoRSk7d1tfLnJhbmtdLnB1c2goRSksY3IoaS5zdWNjZXNzb3JzKEUpLG0pfX12YXIgYj15RihmLGZ1bmN0aW9uKEUpe3JldHVybiBpLm5vZGUoRSkucmFua30pO3JldHVybiBjcihiLG0pLHd9ZnVuY3Rpb24gSU5lKGksYSl7cmV0dXJuIEZmKGEsZnVuY3Rpb24oZil7dmFyIHA9aS5pbkVkZ2VzKGYpO2lmKHAubGVuZ3RoKXt2YXIgdz1tRihwLGZ1bmN0aW9uKG0sYil7dmFyIEU9aS5lZGdlKGIpLF89aS5ub2RlKGIudik7cmV0dXJue3N1bTptLnN1bStFLndlaWdodCpfLm9yZGVyLHdlaWdodDptLndlaWdodCtFLndlaWdodH19LHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OmYsYmFyeWNlbnRlcjp3LnN1bS93LndlaWdodCx3ZWlnaHQ6dy53ZWlnaHR9fWVsc2UgcmV0dXJue3Y6Zn19KX1mdW5jdGlvbiBPTmUoaSxhKXt2YXIgZj17fTtjcihpLGZ1bmN0aW9uKHcsbSl7dmFyIGI9Zlt3LnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbdy52XSxpOm19O0poKHcuYmFyeWNlbnRlcil8fChiLmJhcnljZW50ZXI9dy5iYXJ5Y2VudGVyLGIud2VpZ2h0PXcud2VpZ2h0KX0pLGNyKGEuZWRnZXMoKSxmdW5jdGlvbih3KXt2YXIgbT1mW3cudl0sYj1mW3cud107IUpoKG0pJiYhSmgoYikmJihiLmluZGVncmVlKyssbS5vdXQucHVzaChmW3cud10pKX0pO3ZhciBwPUQ1KGYsZnVuY3Rpb24odyl7cmV0dXJuIXcuaW5kZWdyZWV9KTtyZXR1cm4gUE5lKHApfWZ1bmN0aW9uIFBOZShpKXt2YXIgYT1bXTtmdW5jdGlvbiBmKG0pe3JldHVybiBmdW5jdGlvbihiKXtiLm1lcmdlZHx8KEpoKGIuYmFyeWNlbnRlcil8fEpoKG0uYmFyeWNlbnRlcil8fGIuYmFyeWNlbnRlcj49bS5iYXJ5Y2VudGVyKSYmRk5lKG0sYil9fWZ1bmN0aW9uIHAobSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2IuaW4ucHVzaChtKSwtLWIuaW5kZWdyZWU9PT0wJiZpLnB1c2goYil9fWZvcig7aS5sZW5ndGg7KXt2YXIgdz1pLnBvcCgpO2EucHVzaCh3KSxjcih3LmluLnJldmVyc2UoKSxmKHcpKSxjcih3Lm91dCxwKHcpKX1yZXR1cm4gRmYoRDUoYSxmdW5jdGlvbihtKXtyZXR1cm4hbS5tZXJnZWR9KSxmdW5jdGlvbihtKXtyZXR1cm4gdkYobSxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KX1mdW5jdGlvbiBGTmUoaSxhKXt2YXIgZj0wLHA9MDtpLndlaWdodCYmKGYrPWkuYmFyeWNlbnRlcippLndlaWdodCxwKz1pLndlaWdodCksYS53ZWlnaHQmJihmKz1hLmJhcnljZW50ZXIqYS53ZWlnaHQscCs9YS53ZWlnaHQpLGkudnM9YS52cy5jb25jYXQoaS52cyksaS5iYXJ5Y2VudGVyPWYvcCxpLndlaWdodD1wLGkuaT1NYXRoLm1pbihhLmksaS5pKSxhLm1lcmdlZD0hMH1mdW5jdGlvbiBOTmUoaSxhKXt2YXIgZj1KRmUoaSxmdW5jdGlvbihJKXtyZXR1cm4gemEoSSwiYmFyeWNlbnRlciIpfSkscD1mLmxocyx3PXlGKGYucmhzLGZ1bmN0aW9uKEkpe3JldHVybi1JLml9KSxtPVtdLGI9MCxFPTAsXz0wO3Auc29ydChCTmUoISFhKSksXz1jTnQobSx3LF8pLGNyKHAsZnVuY3Rpb24oSSl7Xys9SS52cy5sZW5ndGgsbS5wdXNoKEkudnMpLGIrPUkuYmFyeWNlbnRlcipJLndlaWdodCxFKz1JLndlaWdodCxfPWNOdChtLHcsXyl9KTt2YXIgQT17dnM6ckwobSl9O3JldHVybiBFJiYoQS5iYXJ5Y2VudGVyPWIvRSxBLndlaWdodD1FKSxBfWZ1bmN0aW9uIGNOdChpLGEsZil7Zm9yKHZhciBwO2EubGVuZ3RoJiYocD1iWShhKSkuaTw9ZjspYS5wb3AoKSxpLnB1c2gocC52cyksZisrO3JldHVybiBmfWZ1bmN0aW9uIEJOZShpKXtyZXR1cm4gZnVuY3Rpb24oYSxmKXtyZXR1cm4gYS5iYXJ5Y2VudGVyPGYuYmFyeWNlbnRlcj8tMTphLmJhcnljZW50ZXI+Zi5iYXJ5Y2VudGVyPzE6aT9mLmktYS5pOmEuaS1mLml9fWZ1bmN0aW9uIHVOdChpLGEsZixwKXt2YXIgdz1pLmNoaWxkcmVuKGEpLG09aS5ub2RlKGEpLGI9bT9tLmJvcmRlckxlZnQ6dm9pZCAwLEU9bT9tLmJvcmRlclJpZ2h0OnZvaWQgMCxfPXt9O2ImJih3PUQ1KHcsZnVuY3Rpb24oeil7cmV0dXJuIHohPT1iJiZ6IT09RX0pKTt2YXIgQT1JTmUoaSx3KTtjcihBLGZ1bmN0aW9uKHope2lmKGkuY2hpbGRyZW4oei52KS5sZW5ndGgpe3ZhciBXPXVOdChpLHoudixmLHApO19bei52XT1XLHphKFcsImJhcnljZW50ZXIiKSYmak5lKHosVyl9fSk7dmFyIEk9T05lKEEsZik7Uk5lKEksXyk7dmFyIEI9Tk5lKEkscCk7aWYoYiYmKEIudnM9ckwoW2IsQi52cyxFXSksaS5wcmVkZWNlc3NvcnMoYikubGVuZ3RoKSl7dmFyIE49aS5ub2RlKGkucHJlZGVjZXNzb3JzKGIpWzBdKSxSPWkubm9kZShpLnByZWRlY2Vzc29ycyhFKVswXSk7emEoQiwiYmFyeWNlbnRlciIpfHwoQi5iYXJ5Y2VudGVyPTAsQi53ZWlnaHQ9MCksQi5iYXJ5Y2VudGVyPShCLmJhcnljZW50ZXIqQi53ZWlnaHQrTi5vcmRlcitSLm9yZGVyKS8oQi53ZWlnaHQrMiksQi53ZWlnaHQrPTJ9cmV0dXJuIEJ9ZnVuY3Rpb24gUk5lKGksYSl7Y3IoaSxmdW5jdGlvbihmKXtmLnZzPXJMKGYudnMubWFwKGZ1bmN0aW9uKHApe3JldHVybiBhW3BdP2FbcF0udnM6cH0pKX0pfWZ1bmN0aW9uIGpOZShpLGEpe0poKGkuYmFyeWNlbnRlcik/KGkuYmFyeWNlbnRlcj1hLmJhcnljZW50ZXIsaS53ZWlnaHQ9YS53ZWlnaHQpOihpLmJhcnljZW50ZXI9KGkuYmFyeWNlbnRlcippLndlaWdodCthLmJhcnljZW50ZXIqYS53ZWlnaHQpLyhpLndlaWdodCthLndlaWdodCksaS53ZWlnaHQrPWEud2VpZ2h0KX1mdW5jdGlvbiAkTmUoaSl7dmFyIGE9V0Z0KGkpLGY9bE50KGkseVQoMSxhKzEpLCJpbkVkZ2VzIikscD1sTnQoaSx5VChhLTEsLTEsLTEpLCJvdXRFZGdlcyIpLHc9RE5lKGkpO2hOdChpLHcpO2Zvcih2YXIgbT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYixFPTAsXz0wO188NDsrK0UsKytfKXt6TmUoRSUyP2Y6cCxFJTQ+PTIpLHc9bVkoaSk7dmFyIEE9TE5lKGksdyk7QTxtJiYoXz0wLGI9dVBlKHcpLG09QSl9aE50KGksYil9ZnVuY3Rpb24gbE50KGksYSxmKXtyZXR1cm4gRmYoYSxmdW5jdGlvbihwKXtyZXR1cm4gU05lKGkscCxmKX0pfWZ1bmN0aW9uIHpOZShpLGEpe3ZhciBmPW5ldyBjMTtjcihpLGZ1bmN0aW9uKHApe3ZhciB3PXAuZ3JhcGgoKS5yb290LG09dU50KHAsdyxmLGEpO2NyKG0udnMsZnVuY3Rpb24oYixFKXtwLm5vZGUoYikub3JkZXI9RX0pLF9OZShwLGYsbS52cyl9KX1mdW5jdGlvbiBoTnQoaSxhKXtjcihhLGZ1bmN0aW9uKGYpe2NyKGYsZnVuY3Rpb24ocCx3KXtpLm5vZGUocCkub3JkZXI9d30pfSl9ZnVuY3Rpb24gcU5lKGkpe3ZhciBhPVZOZShpKTtjcihpLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24oZil7Zm9yKHZhciBwPWkubm9kZShmKSx3PXAuZWRnZU9iaixtPUhOZShpLGEsdy52LHcudyksYj1tLnBhdGgsRT1tLmxjYSxfPTAsQT1iW19dLEk9ITA7ZiE9PXcudzspe2lmKHA9aS5ub2RlKGYpLEkpe2Zvcig7KEE9YltfXSkhPT1FJiZpLm5vZGUoQSkubWF4UmFuazxwLnJhbms7KV8rKztBPT09RSYmKEk9ITEpfWlmKCFJKXtmb3IoO188Yi5sZW5ndGgtMSYmaS5ub2RlKEE9YltfKzFdKS5taW5SYW5rPD1wLnJhbms7KV8rKztBPWJbX119aS5zZXRQYXJlbnQoZixBKSxmPWkuc3VjY2Vzc29ycyhmKVswXX19KX1mdW5jdGlvbiBITmUoaSxhLGYscCl7dmFyIHc9W10sbT1bXSxiPU1hdGgubWluKGFbZl0ubG93LGFbcF0ubG93KSxFPU1hdGgubWF4KGFbZl0ubGltLGFbcF0ubGltKSxfLEE7Xz1mO2RvIF89aS5wYXJlbnQoXyksdy5wdXNoKF8pO3doaWxlKF8mJihhW19dLmxvdz5ifHxFPmFbX10ubGltKSk7Zm9yKEE9XyxfPXA7KF89aS5wYXJlbnQoXykpIT09QTspbS5wdXNoKF8pO3JldHVybntwYXRoOncuY29uY2F0KG0ucmV2ZXJzZSgpKSxsY2E6QX19ZnVuY3Rpb24gVk5lKGkpe3ZhciBhPXt9LGY9MDtmdW5jdGlvbiBwKHcpe3ZhciBtPWY7Y3IoaS5jaGlsZHJlbih3KSxwKSxhW3ddPXtsb3c6bSxsaW06ZisrfX1yZXR1cm4gY3IoaS5jaGlsZHJlbigpLHApLGF9ZnVuY3Rpb24gR05lKGksYSl7dmFyIGY9e307ZnVuY3Rpb24gcCh3LG0pe3ZhciBiPTAsRT0wLF89dy5sZW5ndGgsQT1iWShtKTtyZXR1cm4gY3IobSxmdW5jdGlvbihJLEIpe3ZhciBOPVdOZShpLEkpLFI9Tj9pLm5vZGUoTikub3JkZXI6XzsoTnx8ST09PUEpJiYoY3IobS5zbGljZShFLEIrMSksZnVuY3Rpb24oeil7Y3IoaS5wcmVkZWNlc3NvcnMoeiksZnVuY3Rpb24oVyl7dmFyIGV0PWkubm9kZShXKSxzdD1ldC5vcmRlcjsoc3Q8Ynx8UjxzdCkmJiEoZXQuZHVtbXkmJmkubm9kZSh6KS5kdW1teSkmJmZOdChmLFcseil9KX0pLEU9QisxLGI9Uil9KSxtfXJldHVybiBtRihhLHApLGZ9ZnVuY3Rpb24gVU5lKGksYSl7dmFyIGY9e307ZnVuY3Rpb24gcChtLGIsRSxfLEEpe3ZhciBJO2NyKHlUKGIsRSksZnVuY3Rpb24oQil7ST1tW0JdLGkubm9kZShJKS5kdW1teSYmY3IoaS5wcmVkZWNlc3NvcnMoSSksZnVuY3Rpb24oTil7dmFyIFI9aS5ub2RlKE4pO1IuZHVtbXkmJihSLm9yZGVyPF98fFIub3JkZXI+QSkmJmZOdChmLE4sSSl9KX0pfWZ1bmN0aW9uIHcobSxiKXt2YXIgRT0tMSxfLEE9MDtyZXR1cm4gY3IoYixmdW5jdGlvbihJLEIpe2lmKGkubm9kZShJKS5kdW1teT09PSJib3JkZXIiKXt2YXIgTj1pLnByZWRlY2Vzc29ycyhJKTtOLmxlbmd0aCYmKF89aS5ub2RlKE5bMF0pLm9yZGVyLHAoYixBLEIsRSxfKSxBPUIsRT1fKX1wKGIsQSxiLmxlbmd0aCxfLG0ubGVuZ3RoKX0pLGJ9cmV0dXJuIG1GKGEsdyksZn1mdW5jdGlvbiBXTmUoaSxhKXtpZihpLm5vZGUoYSkuZHVtbXkpcmV0dXJuIGUwdChpLnByZWRlY2Vzc29ycyhhKSxmdW5jdGlvbihmKXtyZXR1cm4gaS5ub2RlKGYpLmR1bW15fSl9ZnVuY3Rpb24gZk50KGksYSxmKXtpZihhPmYpe3ZhciBwPWE7YT1mLGY9cH12YXIgdz1pW2FdO3d8fChpW2FdPXc9e30pLHdbZl09ITB9ZnVuY3Rpb24gWU5lKGksYSxmKXtpZihhPmYpe3ZhciBwPWE7YT1mLGY9cH1yZXR1cm4gemEoaVthXSxmKX1mdW5jdGlvbiBLTmUoaSxhLGYscCl7dmFyIHc9e30sbT17fSxiPXt9O3JldHVybiBjcihhLGZ1bmN0aW9uKEUpe2NyKEUsZnVuY3Rpb24oXyxBKXt3W19dPV8sbVtfXT1fLGJbX109QX0pfSksY3IoYSxmdW5jdGlvbihFKXt2YXIgXz0tMTtjcihFLGZ1bmN0aW9uKEEpe3ZhciBJPXAoQSk7aWYoSS5sZW5ndGgpe0k9eUYoSSxmdW5jdGlvbihXKXtyZXR1cm4gYltXXX0pO2Zvcih2YXIgQj0oSS5sZW5ndGgtMSkvMixOPU1hdGguZmxvb3IoQiksUj1NYXRoLmNlaWwoQik7Tjw9UjsrK04pe3ZhciB6PUlbTl07bVtBXT09PUEmJl88Ylt6XSYmIVlOZShmLEEseikmJihtW3pdPUEsbVtBXT13W0FdPXdbel0sXz1iW3pdKX19fSl9KSx7cm9vdDp3LGFsaWduOm19fWZ1bmN0aW9uIFhOZShpLGEsZixwLHcpe3ZhciBtPXt9LGI9UU5lKGksYSxmLHcpLEU9dz8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBfKEIsTil7Zm9yKHZhciBSPWIubm9kZXMoKSx6PVIucG9wKCksVz17fTt6OylXW3pdP0Ioeik6KFdbel09ITAsUi5wdXNoKHopLFI9Ui5jb25jYXQoTih6KSkpLHo9Ui5wb3AoKX1mdW5jdGlvbiBBKEIpe21bQl09Yi5pbkVkZ2VzKEIpLnJlZHVjZShmdW5jdGlvbihOLFIpe3JldHVybiBNYXRoLm1heChOLG1bUi52XStiLmVkZ2UoUikpfSwwKX1mdW5jdGlvbiBJKEIpe3ZhciBOPWIub3V0RWRnZXMoQikucmVkdWNlKGZ1bmN0aW9uKHosVyl7cmV0dXJuIE1hdGgubWluKHosbVtXLnddLWIuZWRnZShXKSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksUj1pLm5vZGUoQik7TiE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmUi5ib3JkZXJUeXBlIT09RSYmKG1bQl09TWF0aC5tYXgobVtCXSxOKSl9cmV0dXJuIF8oQSxiLnByZWRlY2Vzc29ycy5iaW5kKGIpKSxfKEksYi5zdWNjZXNzb3JzLmJpbmQoYikpLGNyKHAsZnVuY3Rpb24oQil7bVtCXT1tW2ZbQl1dfSksbX1mdW5jdGlvbiBRTmUoaSxhLGYscCl7dmFyIHc9bmV3IGMxLG09aS5ncmFwaCgpLGI9bkJlKG0ubm9kZXNlcCxtLmVkZ2VzZXAscCk7cmV0dXJuIGNyKGEsZnVuY3Rpb24oRSl7dmFyIF87Y3IoRSxmdW5jdGlvbihBKXt2YXIgST1mW0FdO2lmKHcuc2V0Tm9kZShJKSxfKXt2YXIgQj1mW19dLE49dy5lZGdlKEIsSSk7dy5zZXRFZGdlKEIsSSxNYXRoLm1heChiKGksQSxfKSxOfHwwKSl9Xz1BfSl9KSx3fWZ1bmN0aW9uIFpOZShpLGEpe3JldHVybiByMHQoSTUoYSksZnVuY3Rpb24oZil7dmFyIHA9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHc9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiBvRmUoZixmdW5jdGlvbihtLGIpe3ZhciBFPXJCZShpLGIpLzI7cD1NYXRoLm1heChtK0UscCksdz1NYXRoLm1pbihtLUUsdyl9KSxwLXd9KX1mdW5jdGlvbiBKTmUoaSxhKXt2YXIgZj1JNShhKSxwPXdGKGYpLHc9bVQoZik7Y3IoWyJ1IiwiZCJdLGZ1bmN0aW9uKG0pe2NyKFsibCIsInIiXSxmdW5jdGlvbihiKXt2YXIgRT1tK2IsXz1pW0VdLEE7aWYoXyE9PWEpe3ZhciBJPUk1KF8pO0E9Yj09PSJsIj9wLXdGKEkpOnctbVQoSSksQSYmKGlbRV09d1koXyxmdW5jdGlvbihCKXtyZXR1cm4gQitBfSkpfX0pfSl9ZnVuY3Rpb24gdEJlKGksYSl7cmV0dXJuIHdZKGkudWwsZnVuY3Rpb24oZixwKXtpZihhKXJldHVybiBpW2EudG9Mb3dlckNhc2UoKV1bcF07dmFyIHc9eUYoRmYoaSxwKSk7cmV0dXJuKHdbMV0rd1syXSkvMn0pfWZ1bmN0aW9uIGVCZShpKXt2YXIgYT1tWShpKSxmPUlXKEdOZShpLGEpLFVOZShpLGEpKSxwPXt9LHc7Y3IoWyJ1IiwiZCJdLGZ1bmN0aW9uKGIpe3c9Yj09PSJ1Ij9hOkk1KGEpLnJldmVyc2UoKSxjcihbImwiLCJyIl0sZnVuY3Rpb24oRSl7RT09PSJyIiYmKHc9RmYodyxmdW5jdGlvbihCKXtyZXR1cm4gSTUoQikucmV2ZXJzZSgpfSkpO3ZhciBfPShiPT09InUiP2kucHJlZGVjZXNzb3JzOmkuc3VjY2Vzc29ycykuYmluZChpKSxBPUtOZShpLHcsZixfKSxJPVhOZShpLHcsQS5yb290LEEuYWxpZ24sRT09PSJyIik7RT09PSJyIiYmKEk9d1koSSxmdW5jdGlvbihCKXtyZXR1cm4tQn0pKSxwW2IrRV09SX0pfSk7dmFyIG09Wk5lKGkscCk7cmV0dXJuIEpOZShwLG0pLHRCZShwLGkuZ3JhcGgoKS5hbGlnbil9ZnVuY3Rpb24gbkJlKGksYSxmKXtyZXR1cm4gZnVuY3Rpb24ocCx3LG0pe3ZhciBiPXAubm9kZSh3KSxFPXAubm9kZShtKSxfPTAsQTtpZihfKz1iLndpZHRoLzIsemEoYiwibGFiZWxwb3MiKSlzd2l0Y2goYi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOkE9LWIud2lkdGgvMjticmVhaztjYXNlInIiOkE9Yi53aWR0aC8yO2JyZWFrfWlmKEEmJihfKz1mP0E6LUEpLEE9MCxfKz0oYi5kdW1teT9hOmkpLzIsXys9KEUuZHVtbXk/YTppKS8yLF8rPUUud2lkdGgvMix6YShFLCJsYWJlbHBvcyIpKXN3aXRjaChFLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6QT1FLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpBPS1FLndpZHRoLzI7YnJlYWt9cmV0dXJuIEEmJihfKz1mP0E6LUEpLEE9MCxffX1mdW5jdGlvbiByQmUoaSxhKXtyZXR1cm4gaS5ub2RlKGEpLndpZHRofWZ1bmN0aW9uIGlCZShpKXtpPVZGdChpKSxzQmUoaSksY0ZlKGVCZShpKSxmdW5jdGlvbihhLGYpe2kubm9kZShmKS54PWF9KX1mdW5jdGlvbiBzQmUoaSl7dmFyIGE9bVkoaSksZj1pLmdyYXBoKCkucmFua3NlcCxwPTA7Y3IoYSxmdW5jdGlvbih3KXt2YXIgbT1tVChGZih3LGZ1bmN0aW9uKGIpe3JldHVybiBpLm5vZGUoYikuaGVpZ2h0fSkpO2NyKHcsZnVuY3Rpb24oYil7aS5ub2RlKGIpLnk9cCttLzJ9KSxwKz1tK2Z9KX1mdW5jdGlvbiBhTChpLGEpe3ZhciBmPWEmJmEuZGVidWdUaW1pbmc/dE5lOmVOZTtmKCJsYXlvdXQiLGZ1bmN0aW9uKCl7dmFyIHA9ZigiICBidWlsZExheW91dEdyYXBoIixmdW5jdGlvbigpe3JldHVybiBiQmUoaSl9KTtmKCIgIHJ1bkxheW91dCIsZnVuY3Rpb24oKXthQmUocCxmKX0pLGYoIiAgdXBkYXRlSW5wdXRHcmFwaCIsZnVuY3Rpb24oKXtvQmUoaSxwKX0pfSl9ZnVuY3Rpb24gYUJlKGksYSl7YSgiICAgIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMiLGZ1bmN0aW9uKCl7d0JlKGkpfSksYSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsZnVuY3Rpb24oKXtfQmUoaSl9KSxhKCIgICAgYWN5Y2xpYyIsZnVuY3Rpb24oKXtXRmUoaSl9KSxhKCIgICAgbmVzdGluZ0dyYXBoLnJ1biIsZnVuY3Rpb24oKXtrTmUoaSl9KSxhKCIgICAgcmFuayIsZnVuY3Rpb24oKXttTmUoVkZ0KGkpKX0pLGEoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIixmdW5jdGlvbigpe3ZCZShpKX0pLGEoIiAgICByZW1vdmVFbXB0eVJhbmtzIixmdW5jdGlvbigpe1pGZShpKX0pLGEoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtDTmUoaSl9KSxhKCIgICAgbm9ybWFsaXplUmFua3MiLGZ1bmN0aW9uKCl7UUZlKGkpfSksYSgiICAgIGFzc2lnblJhbmtNaW5NYXgiLGZ1bmN0aW9uKCl7bUJlKGkpfSksYSgiICAgIHJlbW92ZUVkZ2VMYWJlbFByb3hpZXMiLGZ1bmN0aW9uKCl7eUJlKGkpfSksYSgiICAgIG5vcm1hbGl6ZS5ydW4iLGZ1bmN0aW9uKCl7b05lKGkpfSksYSgiICAgIHBhcmVudER1bW15Q2hhaW5zIixmdW5jdGlvbigpe3FOZShpKX0pLGEoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsZnVuY3Rpb24oKXtuTmUoaSl9KSxhKCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7JE5lKGkpfSksYSgiICAgIGluc2VydFNlbGZFZGdlcyIsZnVuY3Rpb24oKXtTQmUoaSl9KSxhKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtyTmUoaSl9KSxhKCIgICAgcG9zaXRpb24iLGZ1bmN0aW9uKCl7aUJlKGkpfSksYSgiICAgIHBvc2l0aW9uU2VsZkVkZ2VzIixmdW5jdGlvbigpe0FCZShpKX0pLGEoIiAgICByZW1vdmVCb3JkZXJOb2RlcyIsZnVuY3Rpb24oKXtDQmUoaSl9KSxhKCIgICAgbm9ybWFsaXplLnVuZG8iLGZ1bmN0aW9uKCl7dU5lKGkpfSksYSgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIixmdW5jdGlvbigpe0VCZShpKX0pLGEoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtpTmUoaSl9KSxhKCIgICAgdHJhbnNsYXRlR3JhcGgiLGZ1bmN0aW9uKCl7eEJlKGkpfSksYSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIixmdW5jdGlvbigpe2tCZShpKX0pLGEoIiAgICByZXZlcnNlUG9pbnRzIixmdW5jdGlvbigpe1RCZShpKX0pLGEoIiAgICBhY3ljbGljLnVuZG8iLGZ1bmN0aW9uKCl7S0ZlKGkpfSl9ZnVuY3Rpb24gb0JlKGksYSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGYpe3ZhciBwPWkubm9kZShmKSx3PWEubm9kZShmKTtwJiYocC54PXcueCxwLnk9dy55LGEuY2hpbGRyZW4oZikubGVuZ3RoJiYocC53aWR0aD13LndpZHRoLHAuaGVpZ2h0PXcuaGVpZ2h0KSl9KSxjcihpLmVkZ2VzKCksZnVuY3Rpb24oZil7dmFyIHA9aS5lZGdlKGYpLHc9YS5lZGdlKGYpO3AucG9pbnRzPXcucG9pbnRzLHphKHcsIngiKSYmKHAueD13LngscC55PXcueSl9KSxpLmdyYXBoKCkud2lkdGg9YS5ncmFwaCgpLndpZHRoLGkuZ3JhcGgoKS5oZWlnaHQ9YS5ncmFwaCgpLmhlaWdodH12YXIgY0JlPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSx1QmU9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sbEJlPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0saEJlPVsid2lkdGgiLCJoZWlnaHQiXSxmQmU9e3dpZHRoOjAsaGVpZ2h0OjB9LGRCZT1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxnQmU9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxwQmU9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIGJCZShpKXt2YXIgYT1uZXcgYzEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KSxmPWQwdChpLmdyYXBoKCkpO3JldHVybiBhLnNldEdyYXBoKElXKHt9LHVCZSxmMHQoZixjQmUpLHZGKGYsbEJlKSkpLGNyKGkubm9kZXMoKSxmdW5jdGlvbihwKXt2YXIgdz1kMHQoaS5ub2RlKHApKTthLnNldE5vZGUocCxpTChmMHQodyxoQmUpLGZCZSkpLGEuc2V0UGFyZW50KHAsaS5wYXJlbnQocCkpfSksY3IoaS5lZGdlcygpLGZ1bmN0aW9uKHApe3ZhciB3PWQwdChpLmVkZ2UocCkpO2Euc2V0RWRnZShwLElXKHt9LGdCZSxmMHQodyxkQmUpLHZGKHcscEJlKSkpfSksYX1mdW5jdGlvbiB3QmUoaSl7dmFyIGE9aS5ncmFwaCgpO2EucmFua3NlcC89MixjcihpLmVkZ2VzKCksZnVuY3Rpb24oZil7dmFyIHA9aS5lZGdlKGYpO3AubWlubGVuKj0yLHAubGFiZWxwb3MudG9Mb3dlckNhc2UoKSE9PSJjIiYmKGEucmFua2Rpcj09PSJUQiJ8fGEucmFua2Rpcj09PSJCVCI/cC53aWR0aCs9cC5sYWJlbG9mZnNldDpwLmhlaWdodCs9cC5sYWJlbG9mZnNldCl9KX1mdW5jdGlvbiB2QmUoaSl7Y3IoaS5lZGdlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTtpZihmLndpZHRoJiZmLmhlaWdodCl7dmFyIHA9aS5ub2RlKGEudiksdz1pLm5vZGUoYS53KSxtPXtyYW5rOih3LnJhbmstcC5yYW5rKS8yK3AucmFuayxlOmF9O3NMKGksImVkZ2UtcHJveHkiLG0sIl9lcCIpfX0pfWZ1bmN0aW9uIG1CZShpKXt2YXIgYT0wO2NyKGkubm9kZXMoKSxmdW5jdGlvbihmKXt2YXIgcD1pLm5vZGUoZik7cC5ib3JkZXJUb3AmJihwLm1pblJhbms9aS5ub2RlKHAuYm9yZGVyVG9wKS5yYW5rLHAubWF4UmFuaz1pLm5vZGUocC5ib3JkZXJCb3R0b20pLnJhbmssYT1tVChhLHAubWF4UmFuaykpfSksaS5ncmFwaCgpLm1heFJhbms9YX1mdW5jdGlvbiB5QmUoaSl7Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKTtmLmR1bW15PT09ImVkZ2UtcHJveHkiJiYoaS5lZGdlKGYuZSkubGFiZWxSYW5rPWYucmFuayxpLnJlbW92ZU5vZGUoYSkpfSl9ZnVuY3Rpb24geEJlKGkpe3ZhciBhPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxmPTAscD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdz0wLG09aS5ncmFwaCgpLGI9bS5tYXJnaW54fHwwLEU9bS5tYXJnaW55fHwwO2Z1bmN0aW9uIF8oQSl7dmFyIEk9QS54LEI9QS55LE49QS53aWR0aCxSPUEuaGVpZ2h0O2E9TWF0aC5taW4oYSxJLU4vMiksZj1NYXRoLm1heChmLEkrTi8yKSxwPU1hdGgubWluKHAsQi1SLzIpLHc9TWF0aC5tYXgodyxCK1IvMil9Y3IoaS5ub2RlcygpLGZ1bmN0aW9uKEEpe18oaS5ub2RlKEEpKX0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihBKXt2YXIgST1pLmVkZ2UoQSk7emEoSSwieCIpJiZfKEkpfSksYS09YixwLT1FLGNyKGkubm9kZXMoKSxmdW5jdGlvbihBKXt2YXIgST1pLm5vZGUoQSk7SS54LT1hLEkueS09cH0pLGNyKGkuZWRnZXMoKSxmdW5jdGlvbihBKXt2YXIgST1pLmVkZ2UoQSk7Y3IoSS5wb2ludHMsZnVuY3Rpb24oQil7Qi54LT1hLEIueS09cH0pLHphKEksIngiKSYmKEkueC09YSksemEoSSwieSIpJiYoSS55LT1wKX0pLG0ud2lkdGg9Zi1hK2IsbS5oZWlnaHQ9dy1wK0V9ZnVuY3Rpb24ga0JlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSkscD1pLm5vZGUoYS52KSx3PWkubm9kZShhLncpLG0sYjtmLnBvaW50cz8obT1mLnBvaW50c1swXSxiPWYucG9pbnRzW2YucG9pbnRzLmxlbmd0aC0xXSk6KGYucG9pbnRzPVtdLG09dyxiPXApLGYucG9pbnRzLnVuc2hpZnQoR0Z0KHAsbSkpLGYucG9pbnRzLnB1c2goR0Z0KHcsYikpfSl9ZnVuY3Rpb24gRUJlKGkpe2NyKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSk7aWYoemEoZiwieCIpKXN3aXRjaCgoZi5sYWJlbHBvcz09PSJsInx8Zi5sYWJlbHBvcz09PSJyIikmJihmLndpZHRoLT1mLmxhYmVsb2Zmc2V0KSxmLmxhYmVscG9zKXtjYXNlImwiOmYueC09Zi53aWR0aC8yK2YubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpmLngrPWYud2lkdGgvMitmLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIFRCZShpKXtjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5lZGdlKGEpO2YucmV2ZXJzZWQmJmYucG9pbnRzLnJldmVyc2UoKX0pfWZ1bmN0aW9uIENCZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7aWYoaS5jaGlsZHJlbihhKS5sZW5ndGgpe3ZhciBmPWkubm9kZShhKSxwPWkubm9kZShmLmJvcmRlclRvcCksdz1pLm5vZGUoZi5ib3JkZXJCb3R0b20pLG09aS5ub2RlKGJZKGYuYm9yZGVyTGVmdCkpLGI9aS5ub2RlKGJZKGYuYm9yZGVyUmlnaHQpKTtmLndpZHRoPU1hdGguYWJzKGIueC1tLngpLGYuaGVpZ2h0PU1hdGguYWJzKHcueS1wLnkpLGYueD1tLngrZi53aWR0aC8yLGYueT1wLnkrZi5oZWlnaHQvMn19KSxjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7aS5ub2RlKGEpLmR1bW15PT09ImJvcmRlciImJmkucmVtb3ZlTm9kZShhKX0pfWZ1bmN0aW9uIF9CZShpKXtjcihpLmVkZ2VzKCksZnVuY3Rpb24oYSl7aWYoYS52PT09YS53KXt2YXIgZj1pLm5vZGUoYS52KTtmLnNlbGZFZGdlc3x8KGYuc2VsZkVkZ2VzPVtdKSxmLnNlbGZFZGdlcy5wdXNoKHtlOmEsbGFiZWw6aS5lZGdlKGEpfSksaS5yZW1vdmVFZGdlKGEpfX0pfWZ1bmN0aW9uIFNCZShpKXt2YXIgYT1tWShpKTtjcihhLGZ1bmN0aW9uKGYpe3ZhciBwPTA7Y3IoZixmdW5jdGlvbih3LG0pe3ZhciBiPWkubm9kZSh3KTtiLm9yZGVyPW0rcCxjcihiLnNlbGZFZGdlcyxmdW5jdGlvbihFKXtzTChpLCJzZWxmZWRnZSIse3dpZHRoOkUubGFiZWwud2lkdGgsaGVpZ2h0OkUubGFiZWwuaGVpZ2h0LHJhbms6Yi5yYW5rLG9yZGVyOm0rICsrcCxlOkUuZSxsYWJlbDpFLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgYi5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIEFCZShpKXtjcihpLm5vZGVzKCksZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpO2lmKGYuZHVtbXk9PT0ic2VsZmVkZ2UiKXt2YXIgcD1pLm5vZGUoZi5lLnYpLHc9cC54K3Aud2lkdGgvMixtPXAueSxiPWYueC13LEU9cC5oZWlnaHQvMjtpLnNldEVkZ2UoZi5lLGYubGFiZWwpLGkucmVtb3ZlTm9kZShhKSxmLmxhYmVsLnBvaW50cz1be3g6dysyKmIvMyx5Om0tRX0se3g6dys1KmIvNix5Om0tRX0se3g6dytiLHk6bX0se3g6dys1KmIvNix5Om0rRX0se3g6dysyKmIvMyx5Om0rRX1dLGYubGFiZWwueD1mLngsZi5sYWJlbC55PWYueX19KX1mdW5jdGlvbiBmMHQoaSxhKXtyZXR1cm4gd1kodkYoaSxhKSxOdW1iZXIpfWZ1bmN0aW9uIGQwdChpKXt2YXIgYT17fTtyZXR1cm4gY3IoaSxmdW5jdGlvbihmLHApe2FbcC50b0xvd2VyQ2FzZSgpXT1mfSksYX1mdW5jdGlvbiBkTnQoaSxhKXtyZXR1cm4hIWkuY2hpbGRyZW4oYSkubGVuZ3RofWZ1bmN0aW9uIGdOdChpKXtyZXR1cm4gZzB0KGkudikrIjoiK2cwdChpLncpKyI6IitnMHQoaS5uYW1lKX12YXIgTEJlPS86L2c7ZnVuY3Rpb24gZzB0KGkpe3JldHVybiBpP1N0cmluZyhpKS5yZXBsYWNlKExCZSwiXFw6Iik6IiJ9ZnVuY3Rpb24gdzMoaSxhKXthJiZpLmF0dHIoInN0eWxlIixhKX1mdW5jdGlvbiBwTnQoaSxhLGYpe2EmJmkuYXR0cigiY2xhc3MiLGEpLmF0dHIoImNsYXNzIixmKyIgIitpLmF0dHIoImNsYXNzIikpfWZ1bmN0aW9uIHVtKGksYSl7dmFyIGY9YS5ncmFwaCgpO2lmKERJdChmKSl7dmFyIHA9Zi50cmFuc2l0aW9uO2lmKEJBKHApKXJldHVybiBwKGkpfXJldHVybiBpfXZhciBwMHQ9e25vcm1hbDpEQmUsdmVlOklCZSx1bmRpcmVjdGVkOk9CZX07ZnVuY3Rpb24gTUJlKGkpe3AwdD1pfWZ1bmN0aW9uIERCZShpLGEsZixwKXt2YXIgdz1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09dy5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTt3MyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIElCZShpLGEsZixwKXt2YXIgdz1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09dy5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCBMIDQgNSB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTt3MyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIE9CZShpLGEsZixwKXt2YXIgdz1pLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGEpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLG09dy5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCA1Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTt3MyhtLGZbcCsiU3R5bGUiXSksZltwKyJDbGFzcyJdJiZtLmF0dHIoImNsYXNzIixmW3ArIkNsYXNzIl0pfWZ1bmN0aW9uIGIwdChpLGEpe3ZhciBmPWkuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLCIxMDAwMDAiKSxwPWYuYXBwZW5kKCJ4aHRtbDpkaXYiKTtwLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpO3ZhciB3PWEubGFiZWw7c3dpdGNoKHR5cGVvZiB3KXtjYXNlImZ1bmN0aW9uIjpwLmluc2VydCh3KTticmVhaztjYXNlIm9iamVjdCI6cC5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gd30pO2JyZWFrO2RlZmF1bHQ6cC5odG1sKHcpfXczKHAsYS5sYWJlbFN0eWxlKSxwLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIikscC5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKTt2YXIgbT1wLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZi5hdHRyKCJ3aWR0aCIsbS53aWR0aCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCksZn1mdW5jdGlvbiBQQmUoaSxhKXt2YXIgZj1pO3JldHVybiBmLm5vZGUoKS5hcHBlbmRDaGlsZChhLmxhYmVsKSx3MyhmLGEubGFiZWxTdHlsZSksZn1mdW5jdGlvbiBGQmUoaSxhKXtmb3IodmFyIGY9aS5hcHBlbmQoInRleHQiKSxwPU5CZShhLmxhYmVsKS5zcGxpdChgCmApLHc9MDt3PHAubGVuZ3RoO3crKylmLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLmF0dHIoImR5IiwiMWVtIikuYXR0cigieCIsIjEiKS50ZXh0KHBbd10pO3JldHVybiB3MyhmLGEubGFiZWxTdHlsZSksZn1mdW5jdGlvbiBOQmUoaSl7Zm9yKHZhciBhPSIiLGY9ITEscCx3PTA7dzxpLmxlbmd0aDsrK3cpaWYocD1pW3ddLGYpe3N3aXRjaChwKXtjYXNlIm4iOmErPWAKYDticmVhaztkZWZhdWx0OmErPXB9Zj0hMX1lbHNlIHA9PT0iXFwiP2Y9ITA6YSs9cDtyZXR1cm4gYX1mdW5jdGlvbiB3MHQoaSxhLGYpe3ZhciBwPWEubGFiZWwsdz1pLmFwcGVuZCgiZyIpO2EubGFiZWxUeXBlPT09InN2ZyI/UEJlKHcsYSk6dHlwZW9mIHAhPSJzdHJpbmcifHxhLmxhYmVsVHlwZT09PSJodG1sIj9iMHQodyxhKTpGQmUodyxhKTt2YXIgbT13Lm5vZGUoKS5nZXRCQm94KCksYjtzd2l0Y2goZil7Y2FzZSJ0b3AiOmI9LWEuaGVpZ2h0LzI7YnJlYWs7Y2FzZSJib3R0b20iOmI9YS5oZWlnaHQvMi1tLmhlaWdodDticmVhaztkZWZhdWx0OmI9LW0uaGVpZ2h0LzJ9cmV0dXJuIHcuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLW0ud2lkdGgvMisiLCIrYisiKSIpLHd9dmFyIHYwdD1mdW5jdGlvbihpLGEpe3ZhciBmPWEubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24obSl7cmV0dXJuIGROdChhLG0pfSkscD1pLnNlbGVjdEFsbCgiZy5jbHVzdGVyIikuZGF0YShmLGZ1bmN0aW9uKG0pe3JldHVybiBtfSk7dW0ocC5leGl0KCksYSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpO3ZhciB3PXAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIiKS5hdHRyKCJpZCIsZnVuY3Rpb24obSl7dmFyIGI9YS5ub2RlKG0pO3JldHVybiBiLmlkfSkuc3R5bGUoIm9wYWNpdHkiLDApLmVhY2goZnVuY3Rpb24obSl7dmFyIGI9YS5ub2RlKG0pLEU9eXIodGhpcyk7eXIodGhpcykuYXBwZW5kKCJyZWN0Iik7dmFyIF89RS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7dzB0KF8sYixiLmNsdXN0ZXJMYWJlbFBvcyl9KTtyZXR1cm4gcD1wLm1lcmdlKHcpLHA9dW0ocCxhKS5zdHlsZSgib3BhY2l0eSIsMSkscC5zZWxlY3RBbGwoInJlY3QiKS5lYWNoKGZ1bmN0aW9uKG0pe3ZhciBiPWEubm9kZShtKSxFPXlyKHRoaXMpO3czKEUsYi5zdHlsZSl9KSxwfTtmdW5jdGlvbiBCQmUoaSl7djB0PWl9bGV0IG0wdD1mdW5jdGlvbihpLGEpe3ZhciBmPWkuc2VsZWN0QWxsKCJnLmVkZ2VMYWJlbCIpLmRhdGEoYS5lZGdlcygpLGZ1bmN0aW9uKHcpe3JldHVybiBnTnQodyl9KS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtmLmV4aXQoKS5yZW1vdmUoKSxmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZWRnZUxhYmVsIiwhMCkuc3R5bGUoIm9wYWNpdHkiLDApLGY9aS5zZWxlY3RBbGwoImcuZWRnZUxhYmVsIiksZi5lYWNoKGZ1bmN0aW9uKHcpe3ZhciBtPXlyKHRoaXMpO20uc2VsZWN0KCIubGFiZWwiKS5yZW1vdmUoKTt2YXIgYj1hLmVkZ2UodyksRT13MHQobSxhLmVkZ2UodyksMCkuY2xhc3NlZCgibGFiZWwiLCEwKSxfPUUubm9kZSgpLmdldEJCb3goKTtiLmxhYmVsSWQmJkUuYXR0cigiaWQiLGIubGFiZWxJZCksemEoYiwid2lkdGgiKXx8KGIud2lkdGg9Xy53aWR0aCksemEoYiwiaGVpZ2h0Iil8fChiLmhlaWdodD1fLmhlaWdodCl9KTt2YXIgcDtyZXR1cm4gZi5leGl0P3A9Zi5leGl0KCk6cD1mLnNlbGVjdEFsbChudWxsKSx1bShwLGEpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxmfTtmdW5jdGlvbiBSQmUoaSl7bTB0PWl9ZnVuY3Rpb24gYk50KGksYSl7cmV0dXJuIGkuaW50ZXJzZWN0KGEpfXZhciB5MHQ9ZnVuY3Rpb24oaSxhLGYpe3ZhciBwPWkuc2VsZWN0QWxsKCJnLmVkZ2VQYXRoIikuZGF0YShhLmVkZ2VzKCksZnVuY3Rpb24oYil7cmV0dXJuIGdOdChiKX0pLmNsYXNzZWQoInVwZGF0ZSIsITApLHc9SEJlKHAsYSk7VkJlKHAsYSk7dmFyIG09cC5tZXJnZSE9PXZvaWQgMD9wLm1lcmdlKHcpOnA7cmV0dXJuIHVtKG0sYSkuc3R5bGUoIm9wYWNpdHkiLDEpLG0uZWFjaChmdW5jdGlvbihiKXt2YXIgRT15cih0aGlzKSxfPWEuZWRnZShiKTtfLmVsZW09dGhpcyxfLmlkJiZFLmF0dHIoImlkIixfLmlkKSxwTnQoRSxfLmNsYXNzLChFLmNsYXNzZWQoInVwZGF0ZSIpPyJ1cGRhdGUgIjoiIikrImVkZ2VQYXRoIil9KSxtLnNlbGVjdEFsbCgicGF0aC5wYXRoIikuZWFjaChmdW5jdGlvbihiKXt2YXIgRT1hLmVkZ2UoYik7RS5hcnJvd2hlYWRJZD12WSgiYXJyb3doZWFkIik7dmFyIF89eXIodGhpcykuYXR0cigibWFya2VyLWVuZCIsZnVuY3Rpb24oKXtyZXR1cm4idXJsKCIrJEJlKGxvY2F0aW9uLmhyZWYsRS5hcnJvd2hlYWRJZCkrIikifSkuc3R5bGUoImZpbGwiLCJub25lIik7dW0oXyxhKS5hdHRyKCJkIixmdW5jdGlvbihBKXtyZXR1cm4gekJlKGEsQSl9KSx3MyhfLEUuc3R5bGUpfSksbS5zZWxlY3RBbGwoImRlZnMgKiIpLnJlbW92ZSgpLG0uc2VsZWN0QWxsKCJkZWZzIikuZWFjaChmdW5jdGlvbihiKXt2YXIgRT1hLmVkZ2UoYiksXz1mW0UuYXJyb3doZWFkXTtfKHlyKHRoaXMpLEUuYXJyb3doZWFkSWQsRSwiYXJyb3doZWFkIil9KSxtfTtmdW5jdGlvbiBqQmUoaSl7eTB0PWl9ZnVuY3Rpb24gJEJlKGksYSl7dmFyIGY9aS5zcGxpdCgiIyIpWzBdO3JldHVybiBmKyIjIithfWZ1bmN0aW9uIHpCZShpLGEpe3ZhciBmPWkuZWRnZShhKSxwPWkubm9kZShhLnYpLHc9aS5ub2RlKGEudyksbT1mLnBvaW50cy5zbGljZSgxLGYucG9pbnRzLmxlbmd0aC0xKTtyZXR1cm4gbS51bnNoaWZ0KGJOdChwLG1bMF0pKSxtLnB1c2goYk50KHcsbVttLmxlbmd0aC0xXSkpLHdOdChmLG0pfWZ1bmN0aW9uIHdOdChpLGEpe3ZhciBmPShFNXx8d0VlLmxpbmUpKCkueChmdW5jdGlvbihwKXtyZXR1cm4gcC54fSkueShmdW5jdGlvbihwKXtyZXR1cm4gcC55fSk7cmV0dXJuKGYuY3VydmV8fGYuaW50ZXJwb2xhdGUpKGkuY3VydmUpLGYoYSl9ZnVuY3Rpb24gcUJlKGkpe3ZhciBhPWkuZ2V0QkJveCgpLGY9aS5vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpLm11bHRpcGx5KGkuZ2V0U2NyZWVuQ1RNKCkpLnRyYW5zbGF0ZShhLndpZHRoLzIsYS5oZWlnaHQvMik7cmV0dXJue3g6Zi5lLHk6Zi5mfX1mdW5jdGlvbiBIQmUoaSxhKXt2YXIgZj1pLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aCIpLnN0eWxlKCJvcGFjaXR5IiwwKTtyZXR1cm4gZi5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInBhdGgiKS5hdHRyKCJkIixmdW5jdGlvbihwKXt2YXIgdz1hLmVkZ2UocCksbT1hLm5vZGUocC52KS5lbGVtLGI9eVQody5wb2ludHMubGVuZ3RoKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gcUJlKG0pfSk7cmV0dXJuIHdOdCh3LGIpfSksZi5hcHBlbmQoImRlZnMiKSxmfWZ1bmN0aW9uIFZCZShpLGEpe3ZhciBmPWkuZXhpdCgpO3VtKGYsYSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfXZhciB4MHQ9ZnVuY3Rpb24oaSxhLGYpe3ZhciBwPWEubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIWROdChhLGIpfSksdz1pLnNlbGVjdEFsbCgiZy5ub2RlIikuZGF0YShwLGZ1bmN0aW9uKGIpe3JldHVybiBifSkuY2xhc3NlZCgidXBkYXRlIiwhMCk7dy5leGl0KCkucmVtb3ZlKCksdy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSIpLnN0eWxlKCJvcGFjaXR5IiwwKSx3PWkuc2VsZWN0QWxsKCJnLm5vZGUiKSx3LmVhY2goZnVuY3Rpb24oYil7dmFyIEU9YS5ub2RlKGIpLF89eXIodGhpcyk7cE50KF8sRS5jbGFzcywoXy5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJub2RlIiksXy5zZWxlY3QoImcubGFiZWwiKS5yZW1vdmUoKTt2YXIgQT1fLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxJPXcwdChBLEUpLEI9ZltFLnNoYXBlXSxOPXZGKEkubm9kZSgpLmdldEJCb3goKSwid2lkdGgiLCJoZWlnaHQiKTtFLmVsZW09dGhpcyxFLmlkJiZfLmF0dHIoImlkIixFLmlkKSxFLmxhYmVsSWQmJkEuYXR0cigiaWQiLEUubGFiZWxJZCksemEoRSwid2lkdGgiKSYmKE4ud2lkdGg9RS53aWR0aCksemEoRSwiaGVpZ2h0IikmJihOLmhlaWdodD1FLmhlaWdodCksTi53aWR0aCs9RS5wYWRkaW5nTGVmdCtFLnBhZGRpbmdSaWdodCxOLmhlaWdodCs9RS5wYWRkaW5nVG9wK0UucGFkZGluZ0JvdHRvbSxBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhFLnBhZGRpbmdMZWZ0LUUucGFkZGluZ1JpZ2h0KS8yKyIsIisoRS5wYWRkaW5nVG9wLUUucGFkZGluZ0JvdHRvbSkvMisiKSIpO3ZhciBSPXlyKHRoaXMpO1Iuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIikucmVtb3ZlKCk7dmFyIHo9QihSLE4sRSkuY2xhc3NlZCgibGFiZWwtY29udGFpbmVyIiwhMCk7dzMoeixFLnN0eWxlKTt2YXIgVz16Lm5vZGUoKS5nZXRCQm94KCk7RS53aWR0aD1XLndpZHRoLEUuaGVpZ2h0PVcuaGVpZ2h0fSk7dmFyIG07cmV0dXJuIHcuZXhpdD9tPXcuZXhpdCgpOm09dy5zZWxlY3RBbGwobnVsbCksdW0obSxhKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksd307ZnVuY3Rpb24gR0JlKGkpe3gwdD1pfWZ1bmN0aW9uIFVCZShpLGEpe3ZhciBmPWkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIXlyKHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSk7ZnVuY3Rpb24gcCh3KXt2YXIgbT1hLm5vZGUodyk7cmV0dXJuInRyYW5zbGF0ZSgiK20ueCsiLCIrbS55KyIpIn1mLmF0dHIoInRyYW5zZm9ybSIscCksdW0oaSxhKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixwKSx1bShmLnNlbGVjdEFsbCgicmVjdCIpLGEpLmF0dHIoIndpZHRoIixmdW5jdGlvbih3KXtyZXR1cm4gYS5ub2RlKHcpLndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih3KXtyZXR1cm4gYS5ub2RlKHcpLmhlaWdodH0pLmF0dHIoIngiLGZ1bmN0aW9uKHcpe3ZhciBtPWEubm9kZSh3KTtyZXR1cm4tbS53aWR0aC8yfSkuYXR0cigieSIsZnVuY3Rpb24odyl7dmFyIG09YS5ub2RlKHcpO3JldHVybi1tLmhlaWdodC8yfSl9ZnVuY3Rpb24gV0JlKGksYSl7dmFyIGY9aS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4heXIodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KTtmdW5jdGlvbiBwKHcpe3ZhciBtPWEuZWRnZSh3KTtyZXR1cm4gemEobSwieCIpPyJ0cmFuc2xhdGUoIittLngrIiwiK20ueSsiKSI6IiJ9Zi5hdHRyKCJ0cmFuc2Zvcm0iLHApLHVtKGksYSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIscCl9ZnVuY3Rpb24gWUJlKGksYSl7dmFyIGY9aS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4heXIodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KTtmdW5jdGlvbiBwKHcpe3ZhciBtPWEubm9kZSh3KTtyZXR1cm4idHJhbnNsYXRlKCIrbS54KyIsIittLnkrIikifWYuYXR0cigidHJhbnNmb3JtIixwKSx1bShpLGEpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLHApfWZ1bmN0aW9uIHZOdChpLGEsZixwKXt2YXIgdz1pLngsbT1pLnksYj13LXAueCxFPW0tcC55LF89TWF0aC5zcXJ0KGEqYSpFKkUrZipmKmIqYiksQT1NYXRoLmFicyhhKmYqYi9fKTtwLng8dyYmKEE9LUEpO3ZhciBJPU1hdGguYWJzKGEqZipFL18pO3JldHVybiBwLnk8bSYmKEk9LUkpLHt4OncrQSx5Om0rSX19ZnVuY3Rpb24gS0JlKGksYSxmKXtyZXR1cm4gdk50KGksYSxhLGYpfWZ1bmN0aW9uIFhCZShpLGEsZixwKXt2YXIgdyxtLGIsRSxfLEEsSSxCLE4sUix6LFcsZXQsc3QsYXQ7aWYodz1hLnktaS55LGI9aS54LWEueCxfPWEueCppLnktaS54KmEueSxOPXcqZi54K2IqZi55K18sUj13KnAueCtiKnAueStfLCEoTiE9PTAmJlIhPT0wJiZtTnQoTixSKSkmJihtPXAueS1mLnksRT1mLngtcC54LEE9cC54KmYueS1mLngqcC55LEk9bSppLngrRSppLnkrQSxCPW0qYS54K0UqYS55K0EsIShJIT09MCYmQiE9PTAmJm1OdChJLEIpKSYmKHo9dypFLW0qYix6IT09MCkpKXJldHVybiBXPU1hdGguYWJzKHovMiksZXQ9YipBLUUqXyxzdD1ldDwwPyhldC1XKS96OihldCtXKS96LGV0PW0qXy13KkEsYXQ9ZXQ8MD8oZXQtVykvejooZXQrVykveix7eDpzdCx5OmF0fX1mdW5jdGlvbiBtTnQoaSxhKXtyZXR1cm4gaSphPjB9ZnVuY3Rpb24gdjMoaSxhLGYpe3ZhciBwPWkueCx3PWkueSxtPVtdLGI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2EuZm9yRWFjaChmdW5jdGlvbih6KXtiPU1hdGgubWluKGIsei54KSxFPU1hdGgubWluKEUsei55KX0pO2Zvcih2YXIgXz1wLWkud2lkdGgvMi1iLEE9dy1pLmhlaWdodC8yLUUsST0wO0k8YS5sZW5ndGg7SSsrKXt2YXIgQj1hW0ldLE49YVtJPGEubGVuZ3RoLTE/SSsxOjBdLFI9WEJlKGksZix7eDpfK0IueCx5OkErQi55fSx7eDpfK04ueCx5OkErTi55fSk7UiYmbS5wdXNoKFIpfXJldHVybiBtLmxlbmd0aD8obS5sZW5ndGg+MSYmbS5zb3J0KGZ1bmN0aW9uKHosVyl7dmFyIGV0PXoueC1mLngsc3Q9ei55LWYueSxhdD1NYXRoLnNxcnQoZXQqZXQrc3Qqc3QpLGJ0PVcueC1mLngsbXQ9Vy55LWYueSx5dD1NYXRoLnNxcnQoYnQqYnQrbXQqbXQpO3JldHVybiBhdDx5dD8tMTphdD09PXl0PzA6MX0pLG1bMF0pOihjb25zb2xlLmxvZygiTk8gSU5URVJTRUNUSU9OIEZPVU5ELCBSRVRVUk4gTk9ERSBDRU5URVIiLGkpLGkpfWZ1bmN0aW9uIGswdChpLGEpe3ZhciBmPWkueCxwPWkueSx3PWEueC1mLG09YS55LXAsYj1pLndpZHRoLzIsRT1pLmhlaWdodC8yLF8sQTtyZXR1cm4gTWF0aC5hYnMobSkqYj5NYXRoLmFicyh3KSpFPyhtPDAmJihFPS1FKSxfPW09PT0wPzA6RSp3L20sQT1FKToodzwwJiYoYj0tYiksXz1iLEE9dz09PTA/MDpiKm0vdykse3g6ZitfLHk6cCtBfX12YXIgRTB0PXtyZWN0OlpCZSxlbGxpcHNlOkpCZSxjaXJjbGU6dFJlLGRpYW1vbmQ6ZVJlfTtmdW5jdGlvbiBRQmUoaSl7RTB0PWl9ZnVuY3Rpb24gWkJlKGksYSxmKXt2YXIgcD1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixmLnJ4KS5hdHRyKCJyeSIsZi5yeSkuYXR0cigieCIsLWEud2lkdGgvMikuYXR0cigieSIsLWEuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixhLndpZHRoKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24odyl7cmV0dXJuIGswdChmLHcpfSxwfWZ1bmN0aW9uIEpCZShpLGEsZil7dmFyIHA9YS53aWR0aC8yLHc9YS5oZWlnaHQvMixtPWkuaW5zZXJ0KCJlbGxpcHNlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsLWEud2lkdGgvMikuYXR0cigieSIsLWEuaGVpZ2h0LzIpLmF0dHIoInJ4IixwKS5hdHRyKCJyeSIsdyk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiB2TnQoZixwLHcsYil9LG19ZnVuY3Rpb24gdFJlKGksYSxmKXt2YXIgcD1NYXRoLm1heChhLndpZHRoLGEuaGVpZ2h0KS8yLHc9aS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1hLndpZHRoLzIpLmF0dHIoInkiLC1hLmhlaWdodC8yKS5hdHRyKCJyIixwKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIEtCZShmLHAsbSl9LHd9ZnVuY3Rpb24gZVJlKGksYSxmKXt2YXIgcD1hLndpZHRoKk1hdGguU1FSVDIvMix3PWEuaGVpZ2h0Kk1hdGguU1FSVDIvMixtPVt7eDowLHk6LXd9LHt4Oi1wLHk6MH0se3g6MCx5Ond9LHt4OnAseTowfV0sYj1pLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsbS5tYXAoZnVuY3Rpb24oRSl7cmV0dXJuIEUueCsiLCIrRS55fSkuam9pbigiICIpKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIHYzKGYsbSxFKX0sYn1mdW5jdGlvbiBuUmUoKXt2YXIgaT1mdW5jdGlvbihhLGYpe3NSZShmKTt2YXIgcD1FRihhLCJvdXRwdXQiKSx3PUVGKHAsImNsdXN0ZXJzIiksbT1FRihwLCJlZGdlUGF0aHMiKSxiPW0wdChFRihwLCJlZGdlTGFiZWxzIiksZiksRT14MHQoRUYocCwibm9kZXMiKSxmLEUwdCk7YUwoZiksWUJlKEUsZiksV0JlKGIsZikseTB0KG0sZixwMHQpO3ZhciBfPXYwdCh3LGYpO1VCZShfLGYpLGFSZShmKX07cmV0dXJuIGkuY3JlYXRlTm9kZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEdCZShhKSxpKTp4MHR9LGkuY3JlYXRlQ2x1c3RlcnM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEJCZShhKSxpKTp2MHR9LGkuY3JlYXRlRWRnZUxhYmVscz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUkJlKGEpLGkpOm0wdH0saS5jcmVhdGVFZGdlUGF0aHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGpCZShhKSxpKTp5MHR9LGkuc2hhcGVzPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhRQmUoYSksaSk6RTB0fSxpLmFycm93cz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTUJlKGEpLGkpOnAwdH0saX12YXIgclJlPXtwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAscGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHJ4OjAscnk6MCxzaGFwZToicmVjdCJ9LGlSZT17YXJyb3doZWFkOiJub3JtYWwiLGN1cnZlOmNnfTtmdW5jdGlvbiBzUmUoaSl7aS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGY9aS5ub2RlKGEpOyF6YShmLCJsYWJlbCIpJiYhaS5jaGlsZHJlbihhKS5sZW5ndGgmJihmLmxhYmVsPWEpLHphKGYsInBhZGRpbmdYIikmJmlMKGYse3BhZGRpbmdMZWZ0OmYucGFkZGluZ1gscGFkZGluZ1JpZ2h0OmYucGFkZGluZ1h9KSx6YShmLCJwYWRkaW5nWSIpJiZpTChmLHtwYWRkaW5nVG9wOmYucGFkZGluZ1kscGFkZGluZ0JvdHRvbTpmLnBhZGRpbmdZfSksemEoZiwicGFkZGluZyIpJiZpTChmLHtwYWRkaW5nTGVmdDpmLnBhZGRpbmcscGFkZGluZ1JpZ2h0OmYucGFkZGluZyxwYWRkaW5nVG9wOmYucGFkZGluZyxwYWRkaW5nQm90dG9tOmYucGFkZGluZ30pLGlMKGYsclJlKSxjcihbInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxmdW5jdGlvbihwKXtmW3BdPU51bWJlcihmW3BdKX0pLHphKGYsIndpZHRoIikmJihmLl9wcmV2V2lkdGg9Zi53aWR0aCksemEoZiwiaGVpZ2h0IikmJihmLl9wcmV2SGVpZ2h0PWYuaGVpZ2h0KX0pLGkuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBmPWkuZWRnZShhKTt6YShmLCJsYWJlbCIpfHwoZi5sYWJlbD0iIiksaUwoZixpUmUpfSl9ZnVuY3Rpb24gYVJlKGkpe2NyKGkubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLm5vZGUoYSk7emEoZiwiX3ByZXZXaWR0aCIpP2Yud2lkdGg9Zi5fcHJldldpZHRoOmRlbGV0ZSBmLndpZHRoLHphKGYsIl9wcmV2SGVpZ2h0Iik/Zi5oZWlnaHQ9Zi5fcHJldkhlaWdodDpkZWxldGUgZi5oZWlnaHQsZGVsZXRlIGYuX3ByZXZXaWR0aCxkZWxldGUgZi5fcHJldkhlaWdodH0pfWZ1bmN0aW9uIEVGKGksYSl7dmFyIGY9aS5zZWxlY3QoImcuIithKTtyZXR1cm4gZi5lbXB0eSgpJiYoZj1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixhKSksZn1mdW5jdGlvbiB5TnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx3PWEuaGVpZ2h0LG09KHArdykqLjksYj1be3g6bS8yLHk6MH0se3g6bSx5Oi1tLzJ9LHt4Om0vMix5Oi1tfSx7eDowLHk6LW0vMn1dLEU9TzUoaSxtLG0sYik7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiB2MyhmLGIsXyl9LEV9ZnVuY3Rpb24geE50KGksYSxmKXtjb25zdCB3PWEuaGVpZ2h0LG09dy80LGI9YS53aWR0aCsyKm0sRT1be3g6bSx5OjB9LHt4OmItbSx5OjB9LHt4OmIseTotdy8yfSx7eDpiLW0seTotd30se3g6bSx5Oi13fSx7eDowLHk6LXcvMn1dLF89TzUoaSxiLHcsRSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiB2MyhmLEUsQSl9LF99ZnVuY3Rpb24ga050KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdz1hLmhlaWdodCxtPVt7eDotdy8yLHk6MH0se3g6cCx5OjB9LHt4OnAseTotd30se3g6LXcvMix5Oi13fSx7eDowLHk6LXcvMn1dLGI9TzUoaSxwLHcsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiB2MyhmLG0sRSl9LGJ9ZnVuY3Rpb24gRU50KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdz1hLmhlaWdodCxtPVt7eDotMip3LzYseTowfSx7eDpwLXcvNix5OjB9LHt4OnArMip3LzYseTotd30se3g6dy82LHk6LXd9XSxiPU81KGkscCx3LG0pO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gdjMoZixtLEUpfSxifWZ1bmN0aW9uIFROdChpLGEsZil7Y29uc3QgcD1hLndpZHRoLHc9YS5oZWlnaHQsbT1be3g6Mip3LzYseTowfSx7eDpwK3cvNix5OjB9LHt4OnAtMip3LzYseTotd30se3g6LXcvNix5Oi13fV0sYj1PNShpLHAsdyxtKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIHYzKGYsbSxFKX0sYn1mdW5jdGlvbiBDTnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx3PWEuaGVpZ2h0LG09W3t4Oi0yKncvNix5OjB9LHt4OnArMip3LzYseTowfSx7eDpwLXcvNix5Oi13fSx7eDp3LzYseTotd31dLGI9TzUoaSxwLHcsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiB2MyhmLG0sRSl9LGJ9ZnVuY3Rpb24gX050KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdz1hLmhlaWdodCxtPVt7eDp3LzYseTowfSx7eDpwLXcvNix5OjB9LHt4OnArMip3LzYseTotd30se3g6LTIqdy82LHk6LXd9XSxiPU81KGkscCx3LG0pO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gdjMoZixtLEUpfSxifWZ1bmN0aW9uIFNOdChpLGEsZil7Y29uc3QgcD1hLndpZHRoLHc9YS5oZWlnaHQsbT1be3g6MCx5OjB9LHt4OnArdy8yLHk6MH0se3g6cCx5Oi13LzJ9LHt4OnArdy8yLHk6LXd9LHt4OjAseTotd31dLGI9TzUoaSxwLHcsbSk7cmV0dXJuIGYuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiB2MyhmLG0sRSl9LGJ9ZnVuY3Rpb24gQU50KGksYSxmKXtjb25zdCBwPWEuaGVpZ2h0LHc9YS53aWR0aCtwLzQsbT1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixwLzIpLmF0dHIoInJ5IixwLzIpLmF0dHIoIngiLC13LzIpLmF0dHIoInkiLC1wLzIpLmF0dHIoIndpZHRoIix3KS5hdHRyKCJoZWlnaHQiLHApO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gazB0KGYsYil9LG19ZnVuY3Rpb24gTE50KGksYSxmKXtjb25zdCBwPWEud2lkdGgsdz1hLmhlaWdodCxtPVt7eDowLHk6MH0se3g6cCx5OjB9LHt4OnAseTotd30se3g6MCx5Oi13fSx7eDowLHk6MH0se3g6LTgseTowfSx7eDpwKzgseTowfSx7eDpwKzgseTotd30se3g6LTgseTotd30se3g6LTgseTowfV0sYj1PNShpLHAsdyxtKTtyZXR1cm4gZi5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIHYzKGYsbSxFKX0sYn1mdW5jdGlvbiBNTnQoaSxhLGYpe2NvbnN0IHA9YS53aWR0aCx3PXAvMixtPXcvKDIuNStwLzUwKSxiPWEuaGVpZ2h0K20sRT0iTSAwLCIrbSsiIGEgIit3KyIsIittKyIgMCwwLDAgIitwKyIgMCBhICIrdysiLCIrbSsiIDAsMCwwICIrLXArIiAwIGwgMCwiK2IrIiBhICIrdysiLCIrbSsiIDAsMCwwICIrcCsiIDAgbCAwLCIrLWIsXz1pLmF0dHIoImxhYmVsLW9mZnNldC15IixtKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixFKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcC8yKyIsIistKGIvMittKSsiKSIpO3JldHVybiBmLmludGVyc2VjdD1mdW5jdGlvbihBKXtjb25zdCBJPWswdChmLEEpLEI9SS54LWYueDtpZih3IT0wJiYoTWF0aC5hYnMoQik8Zi53aWR0aC8yfHxNYXRoLmFicyhCKT09Zi53aWR0aC8yJiZNYXRoLmFicyhJLnktZi55KT5mLmhlaWdodC8yLW0pKXtsZXQgTj1tKm0qKDEtQipCLyh3KncpKTtOIT0wJiYoTj1NYXRoLnNxcnQoTikpLE49bS1OLEEueS1mLnk+MCYmKE49LU4pLEkueSs9Tn1yZXR1cm4gSX0sX31mdW5jdGlvbiBvUmUoaSl7aS5zaGFwZXMoKS5xdWVzdGlvbj15TnQsaS5zaGFwZXMoKS5oZXhhZ29uPXhOdCxpLnNoYXBlcygpLnN0YWRpdW09QU50LGkuc2hhcGVzKCkuc3Vicm91dGluZT1MTnQsaS5zaGFwZXMoKS5jeWxpbmRlcj1NTnQsaS5zaGFwZXMoKS5yZWN0X2xlZnRfaW52X2Fycm93PWtOdCxpLnNoYXBlcygpLmxlYW5fcmlnaHQ9RU50LGkuc2hhcGVzKCkubGVhbl9sZWZ0PVROdCxpLnNoYXBlcygpLnRyYXBlem9pZD1DTnQsaS5zaGFwZXMoKS5pbnZfdHJhcGV6b2lkPV9OdCxpLnNoYXBlcygpLnJlY3RfcmlnaHRfaW52X2Fycm93PVNOdH1mdW5jdGlvbiBjUmUoaSl7aSh7cXVlc3Rpb246eU50fSksaSh7aGV4YWdvbjp4TnR9KSxpKHtzdGFkaXVtOkFOdH0pLGkoe3N1YnJvdXRpbmU6TE50fSksaSh7Y3lsaW5kZXI6TU50fSksaSh7cmVjdF9sZWZ0X2ludl9hcnJvdzprTnR9KSxpKHtsZWFuX3JpZ2h0OkVOdH0pLGkoe2xlYW5fbGVmdDpUTnR9KSxpKHt0cmFwZXpvaWQ6Q050fSksaSh7aW52X3RyYXBlem9pZDpfTnR9KSxpKHtyZWN0X3JpZ2h0X2ludl9hcnJvdzpTTnR9KX1mdW5jdGlvbiBPNShpLGEsZixwKXtyZXR1cm4gaS5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLHAubWFwKGZ1bmN0aW9uKHcpe3JldHVybiB3LngrIiwiK3cueX0pLmpvaW4oIiAiKSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWEvMisiLCIrZi8yKyIpIil9Y29uc3QgdVJlPXthZGRUb1JlbmRlcjpvUmUsYWRkVG9SZW5kZXJWMjpjUmV9LEROdD17fSxsUmU9ZnVuY3Rpb24oaSl7Y29uc3QgYT1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgZiBvZiBhKUROdFtmXT1pW2ZdfSxJTnQ9ZnVuY3Rpb24oaSxhLGYscCx3LG0pe2NvbnN0IGI9cD9wLnNlbGVjdChgW2lkPSIke2Z9Il1gKTp5cihgW2lkPSIke2Z9Il1gKSxFPXd8fGRvY3VtZW50O09iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oQSl7Y29uc3QgST1pW0FdO2xldCBCPSJkZWZhdWx0IjtJLmNsYXNzZXMubGVuZ3RoPjAmJihCPUkuY2xhc3Nlcy5qb2luKCIgIikpO2NvbnN0IE49aW0oSS5zdHlsZXMpO2xldCBSPUkudGV4dCE9PXZvaWQgMD9JLnRleHQ6SS5pZCx6O2lmKG8xKE9lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBzdD17bGFiZWw6Ui5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2csYXQ9PmA8aSBjbGFzcz0nJHthdC5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfTt6PWIwdChiLHN0KS5ub2RlKCksei5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHopfWVsc2V7Y29uc3Qgc3Q9RS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO3N0LnNldEF0dHJpYnV0ZSgic3R5bGUiLE4ubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtjb25zdCBhdD1SLnNwbGl0KEtyLmxpbmVCcmVha1JlZ2V4KTtmb3IoY29uc3QgYnQgb2YgYXQpe2NvbnN0IG10PUUuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7bXQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksbXQuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLG10LnNldEF0dHJpYnV0ZSgieCIsIjEiKSxtdC50ZXh0Q29udGVudD1idCxzdC5hcHBlbmRDaGlsZChtdCl9ej1zdH1sZXQgVz0wLGV0PSIiO3N3aXRjaChJLnR5cGUpe2Nhc2Uicm91bmQiOlc9NSxldD0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOmV0PSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOmV0PSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjpldD0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOmV0PSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOmV0PSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6ZXQ9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOmV0PSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6ZXQ9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2Uib2RkX3JpZ2h0IjpldD0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOmV0PSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6ZXQ9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6ZXQ9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6ZXQ9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOmV0PSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6ZXQ9InJlY3QiO2JyZWFrO2RlZmF1bHQ6ZXQ9InJlY3QifVV0Lndhcm4oIkFkZGluZyBub2RlIixJLmlkLEkuZG9tSWQpLGEuc2V0Tm9kZShtLmRiLmxvb2tVcERvbUlkKEkuaWQpLHtsYWJlbFR5cGU6InN2ZyIsbGFiZWxTdHlsZTpOLmxhYmVsU3R5bGUsc2hhcGU6ZXQsbGFiZWw6eixyeDpXLHJ5OlcsY2xhc3M6QixzdHlsZTpOLnN0eWxlLGlkOm0uZGIubG9va1VwRG9tSWQoSS5pZCl9KX0pfSxPTnQ9ZnVuY3Rpb24oaSxhLGYpe2xldCBwPTAsdyxtO2lmKGkuZGVmYXVsdFN0eWxlIT09dm9pZCAwKXtjb25zdCBiPWltKGkuZGVmYXVsdFN0eWxlKTt3PWIuc3R5bGUsbT1iLmxhYmVsU3R5bGV9aS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ArKztjb25zdCBFPSJMLSIrYi5zdGFydCsiLSIrYi5lbmQsXz0iTFMtIitiLnN0YXJ0LEE9IkxFLSIrYi5lbmQsST17fTtiLnR5cGU9PT0iYXJyb3dfb3BlbiI/SS5hcnJvd2hlYWQ9Im5vbmUiOkkuYXJyb3doZWFkPSJub3JtYWwiO2xldCBCPSIiLE49IiI7aWYoYi5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgUj1pbShiLnN0eWxlKTtCPVIuc3R5bGUsTj1SLmxhYmVsU3R5bGV9ZWxzZSBzd2l0Y2goYi5zdHJva2Upe2Nhc2Uibm9ybWFsIjpCPSJmaWxsOm5vbmUiLHchPT12b2lkIDAmJihCPXcpLG0hPT12b2lkIDAmJihOPW0pO2JyZWFrO2Nhc2UiZG90dGVkIjpCPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpCPSIgc3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmUiO2JyZWFrfUkuc3R5bGU9QixJLmxhYmVsU3R5bGU9TixiLmludGVycG9sYXRlIT09dm9pZCAwP0kuY3VydmU9ZXcoYi5pbnRlcnBvbGF0ZSxjZyk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/SS5jdXJ2ZT1ldyhpLmRlZmF1bHRJbnRlcnBvbGF0ZSxjZyk6SS5jdXJ2ZT1ldyhETnQuY3VydmUsY2cpLGIudGV4dD09PXZvaWQgMD9iLnN0eWxlIT09dm9pZCAwJiYoSS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihJLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixJLmxhYmVscG9zPSJjIixvMShPZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKT8oSS5sYWJlbFR5cGU9Imh0bWwiLEkubGFiZWw9YDxzcGFuIGlkPSJMLSR7RX0iIGNsYXNzPSJlZGdlTGFiZWwgTC0ke199JyBMLSR7QX0iIHN0eWxlPSIke0kubGFiZWxTdHlsZX0iPiR7Yi50ZXh0LnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxSPT5gPGkgY2xhc3M9JyR7Ui5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfTwvc3Bhbj5gKTooSS5sYWJlbFR5cGU9InRleHQiLEkubGFiZWw9Yi50ZXh0LnJlcGxhY2UoS3IubGluZUJyZWFrUmVnZXgsYApgKSxiLnN0eWxlPT09dm9pZCAwJiYoSS5zdHlsZT1JLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLEkubGFiZWxTdHlsZT1JLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSkpLEkuaWQ9RSxJLmNsYXNzPV8rIiAiK0EsSS5taW5sZW49Yi5sZW5ndGh8fDEsYS5zZXRFZGdlKGYuZGIubG9va1VwRG9tSWQoYi5zdGFydCksZi5kYi5sb29rVXBEb21JZChiLmVuZCksSSxwKX0pfSxoUmU9e3NldENvbmY6bFJlLGFkZFZlcnRpY2VzOklOdCxhZGRFZGdlczpPTnQsZ2V0Q2xhc3NlczpmdW5jdGlvbihpLGEpe3JldHVybiBVdC5pbmZvKCJFeHRyYWN0aW5nIGNsYXNzZXMiKSxhLmRiLmdldENsYXNzZXMoKX0sZHJhdzpmdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpO2NvbnN0e3NlY3VyaXR5TGV2ZWw6dyxmbG93Y2hhcnQ6bX09T2UoKTtsZXQgYjt3PT09InNhbmRib3giJiYoYj15cigiI2kiK2EpKTtjb25zdCBFPXlyKHc9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksXz13PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7bGV0IEE9cC5kYi5nZXREaXJlY3Rpb24oKTtBPT09dm9pZCAwJiYoQT0iVEQiKTtjb25zdCBJPW0ubm9kZVNwYWNpbmd8fDUwLEI9bS5yYW5rU3BhY2luZ3x8NTAsTj1uZXcgYzEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpBLG5vZGVzZXA6SSxyYW5rc2VwOkIsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBSO2NvbnN0IHo9cC5kYi5nZXRTdWJHcmFwaHMoKTtmb3IobGV0IGZ0PXoubGVuZ3RoLTE7ZnQ+PTA7ZnQtLSlSPXpbZnRdLHAuZGIuYWRkVmVydGV4KFIuaWQsUi50aXRsZSwiZ3JvdXAiLHZvaWQgMCxSLmNsYXNzZXMpO2NvbnN0IFc9cC5kYi5nZXRWZXJ0aWNlcygpO1V0Lndhcm4oIkdldCB2ZXJ0aWNlcyIsVyk7Y29uc3QgZXQ9cC5kYi5nZXRFZGdlcygpO2xldCBzdD0wO2ZvcihzdD16Lmxlbmd0aC0xO3N0Pj0wO3N0LS0pe1I9eltzdF0sc010KCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKGxldCBmdD0wO2Z0PFIubm9kZXMubGVuZ3RoO2Z0KyspVXQud2FybigiU2V0dGluZyBzdWJncmFwaCIsUi5ub2Rlc1tmdF0scC5kYi5sb29rVXBEb21JZChSLm5vZGVzW2Z0XSkscC5kYi5sb29rVXBEb21JZChSLmlkKSksTi5zZXRQYXJlbnQocC5kYi5sb29rVXBEb21JZChSLm5vZGVzW2Z0XSkscC5kYi5sb29rVXBEb21JZChSLmlkKSl9SU50KFcsTixhLEUsXyxwKSxPTnQoZXQsTixwKTtjb25zdCBhdD1uZXcgblJlO3VSZS5hZGRUb1JlbmRlcihhdCksYXQuYXJyb3dzKCkubm9uZT1mdW5jdGlvbih1dCx2dCxYLHB0KXtjb25zdCBUdD11dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix2dCkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMCAwIEwgMCAwIHoiKTt3MyhUdCxYW3B0KyJTdHlsZSJdKX0sYXQuYXJyb3dzKCkubm9ybWFsPWZ1bmN0aW9uKHV0LHZ0KXt1dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix2dCkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3doZWFkUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9O2NvbnN0IGJ0PUUuc2VsZWN0KGBbaWQ9IiR7YX0iXWApLG10PUUuc2VsZWN0KCIjIithKyIgZyIpO2ZvcihhdChtdCxOKSxtdC5zZWxlY3RBbGwoImcubm9kZSIpLmF0dHIoInRpdGxlIixmdW5jdGlvbigpe3JldHVybiBwLmRiLmdldFRvb2x0aXAodGhpcy5pZCl9KSxwLmRiLmluZGV4Tm9kZXMoInN1YkdyYXBoIitzdCksc3Q9MDtzdDx6Lmxlbmd0aDtzdCsrKWlmKFI9eltzdF0sUi50aXRsZSE9PSJ1bmRlZmluZWQiKXtjb25zdCBmdD1fLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2ErJyBbaWQ9IicrcC5kYi5sb29rVXBEb21JZChSLmlkKSsnIl0gcmVjdCcpLHV0PV8ucXVlcnlTZWxlY3RvckFsbCgiIyIrYSsnIFtpZD0iJytwLmRiLmxvb2tVcERvbUlkKFIuaWQpKyciXScpLHZ0PWZ0WzBdLnguYmFzZVZhbC52YWx1ZSxYPWZ0WzBdLnkuYmFzZVZhbC52YWx1ZSxwdD1mdFswXS53aWR0aC5iYXNlVmFsLnZhbHVlLFR0PXlyKHV0WzBdKS5zZWxlY3QoIi5sYWJlbCIpO1R0LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3Z0K3B0LzJ9LCAke1grMTR9KWApLFR0LmF0dHIoImlkIixhKyJUZXh0Iik7Zm9yKGxldCBudD0wO250PFIuY2xhc3Nlcy5sZW5ndGg7bnQrKyl1dFswXS5jbGFzc0xpc3QuYWRkKFIuY2xhc3Nlc1tudF0pfWlmKCFtLmh0bWxMYWJlbHMpe2NvbnN0IGZ0PV8ucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2ErJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyk7Zm9yKGNvbnN0IHV0IG9mIGZ0KXtjb25zdCB2dD11dC5nZXRCQm94KCksWD1fLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7WC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxYLnNldEF0dHJpYnV0ZSgicnkiLDApLFguc2V0QXR0cmlidXRlKCJ3aWR0aCIsdnQud2lkdGgpLFguc2V0QXR0cmlidXRlKCJoZWlnaHQiLHZ0LmhlaWdodCksdXQuaW5zZXJ0QmVmb3JlKFgsdXQuZmlyc3RDaGlsZCl9fWZUKE4sYnQsbS5kaWFncmFtUGFkZGluZyxtLnVzZU1heFdpZHRoKSxPYmplY3Qua2V5cyhXKS5mb3JFYWNoKGZ1bmN0aW9uKGZ0KXtjb25zdCB1dD1XW2Z0XTtpZih1dC5saW5rKXtjb25zdCB2dD1FLnNlbGVjdCgiIyIrYSsnIFtpZD0iJytwLmRiLmxvb2tVcERvbUlkKGZ0KSsnIl0nKTtpZih2dCl7Y29uc3QgWD1fLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhIik7WC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjbGFzcyIsdXQuY2xhc3Nlcy5qb2luKCIgIikpLFguc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsdXQubGluayksWC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWwiLCJub29wZW5lciIpLHc9PT0ic2FuZGJveCI/WC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLCJfdG9wIik6dXQubGlua1RhcmdldCYmWC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLHV0LmxpbmtUYXJnZXQpO2NvbnN0IHB0PXZ0Lmluc2VydChmdW5jdGlvbigpe3JldHVybiBYfSwiOmZpcnN0LWNoaWxkIiksVT12dC5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKTtVJiZwdC5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gVS5ub2RlKCl9KTtjb25zdCBUdD12dC5zZWxlY3QoIi5sYWJlbCIpO1R0JiZwdC5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gVHQubm9kZSgpfSl9fX0pfX07ZnVuY3Rpb24gUDUoaSl7dmFyIGE9e29wdGlvbnM6e2RpcmVjdGVkOmkuaXNEaXJlY3RlZCgpLG11bHRpZ3JhcGg6aS5pc011bHRpZ3JhcGgoKSxjb21wb3VuZDppLmlzQ29tcG91bmQoKX0sbm9kZXM6ZlJlKGkpLGVkZ2VzOmRSZShpKX07cmV0dXJuIEpoKGkuZ3JhcGgoKSl8fChhLnZhbHVlPWFQZShpLmdyYXBoKCkpKSxhfWZ1bmN0aW9uIGZSZShpKXtyZXR1cm4gRmYoaS5ub2RlcygpLGZ1bmN0aW9uKGEpe3ZhciBmPWkubm9kZShhKSxwPWkucGFyZW50KGEpLHc9e3Y6YX07cmV0dXJuIEpoKGYpfHwody52YWx1ZT1mKSxKaChwKXx8KHcucGFyZW50PXApLHd9KX1mdW5jdGlvbiBkUmUoaSl7cmV0dXJuIEZmKGkuZWRnZXMoKSxmdW5jdGlvbihhKXt2YXIgZj1pLmVkZ2UoYSkscD17djphLnYsdzphLnd9O3JldHVybiBKaChhLm5hbWUpfHwocC5uYW1lPWEubmFtZSksSmgoZil8fChwLnZhbHVlPWYpLHB9KX1jb25zdCBnUmU9KGksYSxmLHApPT57YS5mb3JFYWNoKHc9PntwUmVbd10oaSxmLHApfSl9LHBSZT17ZXh0ZW5zaW9uOihpLGEsZik9PntVdC50cmFjZSgiTWFraW5nIG1hcmtlcnMgZm9yICIsZiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIithKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrYSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpfSxjb21wb3NpdGlvbjooaSxhLGYpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrYSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWNvbXBvc2l0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIithKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LGFnZ3JlZ2F0aW9uOihpLGEsZik9PntpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGYrIl8iK2ErIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIithKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItYWdncmVnYXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2EpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sZGVwZW5kZW5jeTooaSxhLGYpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZGVwZW5kZW5jeVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2EpLmF0dHIoInJlZlgiLDYpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItZGVwZW5kZW5jeUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIithKS5hdHRyKCJyZWZYIiwxMykuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sbG9sbGlwb3A6KGksYSxmKT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWxvbGxpcG9wU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBsb2xsaXBvcCAiK2EpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWxvbGxpcG9wRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIithKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpfSxwb2ludDooaSxhLGYpPT57aS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItcG9pbnRFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2EpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSxpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGYrIl8iK2ErIi1wb2ludFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIithKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNC41KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGNpcmNsZTooaSxhLGYpPT57aS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY2lyY2xlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIithKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLGkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZisiXyIrYSsiLWNpcmNsZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIithKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjcm9zczooaSxhLGYpPT57aS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2EpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksaS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrYSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sYmFyYjooaSxhLGYpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmKyJfIithKyItYmFyYkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMTQpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX19LFBOdD1nUmU7ZnVuY3Rpb24gYlJlKGksYSl7YSYmaS5hdHRyKCJzdHlsZSIsYSl9ZnVuY3Rpb24gd1JlKGkpe2NvbnN0IGE9eXIoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSksZj1hLmFwcGVuZCgieGh0bWw6ZGl2IikscD1pLmxhYmVsLHc9aS5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCI7cmV0dXJuIGYuaHRtbCgnPHNwYW4gY2xhc3M9IicrdysnIiAnKyhpLmxhYmVsU3R5bGU/J3N0eWxlPSInK2kubGFiZWxTdHlsZSsnIic6IiIpKyI+IitwKyI8L3NwYW4+IiksYlJlKGYsaS5sYWJlbFN0eWxlKSxmLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksZi5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxmLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLGEubm9kZSgpfWNvbnN0IGdwPShpLGEsZixwKT0+e2xldCB3PWl8fCIiO2lmKHR5cGVvZiB3PT0ib2JqZWN0IiYmKHc9d1swXSksbzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3c9dy5yZXBsYWNlKC9cXG58XG4vZywiPGJyIC8+IiksVXQuaW5mbygidmVydGV4VGV4dCIrdyk7Y29uc3QgbT17aXNOb2RlOnAsbGFiZWw6dUYodykucmVwbGFjZSgvZmFbYmxyc10/OmZhLVtcdy1dKy9nLEU9PmA8aSBjbGFzcz0nJHtFLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCksbGFiZWxTdHlsZTphLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiB3UmUobSl9ZWxzZXtjb25zdCBtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7bS5zZXRBdHRyaWJ1dGUoInN0eWxlIixhLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2xldCBiPVtdO3R5cGVvZiB3PT0ic3RyaW5nIj9iPXcuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KHcpP2I9dzpiPVtdO2Zvcihjb25zdCBFIG9mIGIpe2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7Xy5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxfLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxfLnNldEF0dHJpYnV0ZSgieCIsIjAiKSxmP18uc2V0QXR0cmlidXRlKCJjbGFzcyIsInRpdGxlLXJvdyIpOl8uc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLF8udGV4dENvbnRlbnQ9RS50cmltKCksbS5hcHBlbmRDaGlsZChfKX1yZXR1cm4gbX19LHZSZT17fTtmdW5jdGlvbiBtUmUoaSxhKXtjb25zdCBmPWF8fHZSZSxwPXR5cGVvZiBmLmluY2x1ZGVJbWFnZUFsdD09ImJvb2xlYW4iP2YuaW5jbHVkZUltYWdlQWx0OiEwLHc9dHlwZW9mIGYuaW5jbHVkZUh0bWw9PSJib29sZWFuIj9mLmluY2x1ZGVIdG1sOiEwO3JldHVybiBGTnQoaSxwLHcpfWZ1bmN0aW9uIEZOdChpLGEsZil7aWYoeVJlKGkpKXtpZigidmFsdWUiaW4gaSlyZXR1cm4gaS50eXBlPT09Imh0bWwiJiYhZj8iIjppLnZhbHVlO2lmKGEmJiJhbHQiaW4gaSYmaS5hbHQpcmV0dXJuIGkuYWx0O2lmKCJjaGlsZHJlbiJpbiBpKXJldHVybiBOTnQoaS5jaGlsZHJlbixhLGYpfXJldHVybiBBcnJheS5pc0FycmF5KGkpP05OdChpLGEsZik6IiJ9ZnVuY3Rpb24gTk50KGksYSxmKXtjb25zdCBwPVtdO2xldCB3PS0xO2Zvcig7Kyt3PGkubGVuZ3RoOylwW3ddPUZOdChpW3ddLGEsZik7cmV0dXJuIHAuam9pbigiIil9ZnVuY3Rpb24geVJlKGkpe3JldHVybiEhKGkmJnR5cGVvZiBpPT0ib2JqZWN0Iil9ZnVuY3Rpb24gbTMoaSxhLGYscCl7Y29uc3Qgdz1pLmxlbmd0aDtsZXQgbT0wLGI7aWYoYTwwP2E9LWE+dz8wOncrYTphPWE+dz93OmEsZj1mPjA/ZjowLHAubGVuZ3RoPDFlNCliPUFycmF5LmZyb20ocCksYi51bnNoaWZ0KGEsZiksaS5zcGxpY2UoLi4uYik7ZWxzZSBmb3IoZiYmaS5zcGxpY2UoYSxmKTttPHAubGVuZ3RoOyliPXAuc2xpY2UobSxtKzFlNCksYi51bnNoaWZ0KGEsMCksaS5zcGxpY2UoLi4uYiksbSs9MWU0LGErPTFlNH1mdW5jdGlvbiBzdyhpLGEpe3JldHVybiBpLmxlbmd0aD4wPyhtMyhpLGkubGVuZ3RoLDAsYSksaSk6YX1jb25zdCBCTnQ9e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24geFJlKGkpe2NvbnN0IGE9e307bGV0IGY9LTE7Zm9yKDsrK2Y8aS5sZW5ndGg7KWtSZShhLGlbZl0pO3JldHVybiBhfWZ1bmN0aW9uIGtSZShpLGEpe2xldCBmO2ZvcihmIGluIGEpe2NvbnN0IHc9KEJOdC5jYWxsKGksZik/aVtmXTp2b2lkIDApfHwoaVtmXT17fSksbT1hW2ZdO2xldCBiO2lmKG0pZm9yKGIgaW4gbSl7Qk50LmNhbGwodyxiKXx8KHdbYl09W10pO2NvbnN0IEU9bVtiXTtFUmUod1tiXSxBcnJheS5pc0FycmF5KEUpP0U6RT9bRV06W10pfX19ZnVuY3Rpb24gRVJlKGksYSl7bGV0IGY9LTE7Y29uc3QgcD1bXTtmb3IoOysrZjxhLmxlbmd0aDspKGFbZl0uYWRkPT09ImFmdGVyIj9pOnApLnB1c2goYVtmXSk7bTMoaSwwLDAscCl9Y29uc3QgVFJlPS9bIS1cLzotQFxbLWBcey1+XHhBMVx4QTdceEFCXHhCNlx4QjdceEJCXHhCRlx1MDM3RVx1MDM4N1x1MDU1QS1cdTA1NUZcdTA1ODlcdTA1OEFcdTA1QkVcdTA1QzBcdTA1QzNcdTA1QzZcdTA1RjNcdTA1RjRcdTA2MDlcdTA2MEFcdTA2MENcdTA2MERcdTA2MUJcdTA2MUQtXHUwNjFGXHUwNjZBLVx1MDY2RFx1MDZENFx1MDcwMC1cdTA3MERcdTA3RjctXHUwN0Y5XHUwODMwLVx1MDgzRVx1MDg1RVx1MDk2NFx1MDk2NVx1MDk3MFx1MDlGRFx1MEE3Nlx1MEFGMFx1MEM3N1x1MEM4NFx1MERGNFx1MEU0Rlx1MEU1QVx1MEU1Qlx1MEYwNC1cdTBGMTJcdTBGMTRcdTBGM0EtXHUwRjNEXHUwRjg1XHUwRkQwLVx1MEZENFx1MEZEOVx1MEZEQVx1MTA0QS1cdTEwNEZcdTEwRkJcdTEzNjAtXHUxMzY4XHUxNDAwXHUxNjZFXHUxNjlCXHUxNjlDXHUxNkVCLVx1MTZFRFx1MTczNVx1MTczNlx1MTdENC1cdTE3RDZcdTE3RDgtXHUxN0RBXHUxODAwLVx1MTgwQVx1MTk0NFx1MTk0NVx1MUExRVx1MUExRlx1MUFBMC1cdTFBQTZcdTFBQTgtXHUxQUFEXHUxQjVBLVx1MUI2MFx1MUI3RFx1MUI3RVx1MUJGQy1cdTFCRkZcdTFDM0ItXHUxQzNGXHUxQzdFXHUxQzdGXHUxQ0MwLVx1MUNDN1x1MUNEM1x1MjAxMC1cdTIwMjdcdTIwMzAtXHUyMDQzXHUyMDQ1LVx1MjA1MVx1MjA1My1cdTIwNUVcdTIwN0RcdTIwN0VcdTIwOERcdTIwOEVcdTIzMDgtXHUyMzBCXHUyMzI5XHUyMzJBXHUyNzY4LVx1Mjc3NVx1MjdDNVx1MjdDNlx1MjdFNi1cdTI3RUZcdTI5ODMtXHUyOTk4XHUyOUQ4LVx1MjlEQlx1MjlGQ1x1MjlGRFx1MkNGOS1cdTJDRkNcdTJDRkVcdTJDRkZcdTJENzBcdTJFMDAtXHUyRTJFXHUyRTMwLVx1MkU0Rlx1MkU1Mi1cdTJFNURcdTMwMDEtXHUzMDAzXHUzMDA4LVx1MzAxMVx1MzAxNC1cdTMwMUZcdTMwMzBcdTMwM0RcdTMwQTBcdTMwRkJcdUE0RkVcdUE0RkZcdUE2MEQtXHVBNjBGXHVBNjczXHVBNjdFXHVBNkYyLVx1QTZGN1x1QTg3NC1cdUE4NzdcdUE4Q0VcdUE4Q0ZcdUE4RjgtXHVBOEZBXHVBOEZDXHVBOTJFXHVBOTJGXHVBOTVGXHVBOUMxLVx1QTlDRFx1QTlERVx1QTlERlx1QUE1Qy1cdUFBNUZcdUFBREVcdUFBREZcdUFBRjBcdUFBRjFcdUFCRUJcdUZEM0VcdUZEM0ZcdUZFMTAtXHVGRTE5XHVGRTMwLVx1RkU1Mlx1RkU1NC1cdUZFNjFcdUZFNjNcdUZFNjhcdUZFNkFcdUZFNkJcdUZGMDEtXHVGRjAzXHVGRjA1LVx1RkYwQVx1RkYwQy1cdUZGMEZcdUZGMUFcdUZGMUJcdUZGMUZcdUZGMjBcdUZGM0ItXHVGRjNEXHVGRjNGXHVGRjVCXHVGRjVEXHVGRjVGLVx1RkY2NV0vLHkzPWJrKC9bQS1aYS16XS8pLGxtPWJrKC9bXGRBLVphLXpdLyksQ1JlPWJrKC9bIy0nKitcLS05PT9BLVpeLX5dLyk7ZnVuY3Rpb24gVDB0KGkpe3JldHVybiBpIT09bnVsbCYmKGk8MzJ8fGk9PT0xMjcpfWNvbnN0IEMwdD1iaygvXGQvKSxfUmU9YmsoL1tcZEEtRmEtZl0vKSxTUmU9YmsoL1shLS86LUBbLWB7LX5dLyk7ZnVuY3Rpb24geGEoaSl7cmV0dXJuIGkhPT1udWxsJiZpPC0yfWZ1bmN0aW9uIHBwKGkpe3JldHVybiBpIT09bnVsbCYmKGk8MHx8aT09PTMyKX1mdW5jdGlvbiBXYyhpKXtyZXR1cm4gaT09PS0yfHxpPT09LTF8fGk9PT0zMn1jb25zdCBBUmU9YmsoVFJlKSxMUmU9YmsoL1xzLyk7ZnVuY3Rpb24gYmsoaSl7cmV0dXJuIGE7ZnVuY3Rpb24gYShmKXtyZXR1cm4gZiE9PW51bGwmJmkudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGYpKX19ZnVuY3Rpb24gaWwoaSxhLGYscCl7Y29uc3Qgdz1wP3AtMTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IG09MDtyZXR1cm4gYjtmdW5jdGlvbiBiKF8pe3JldHVybiBXYyhfKT8oaS5lbnRlcihmKSxFKF8pKTphKF8pfWZ1bmN0aW9uIEUoXyl7cmV0dXJuIFdjKF8pJiZtKys8dz8oaS5jb25zdW1lKF8pLEUpOihpLmV4aXQoZiksYShfKSl9fWNvbnN0IE1SZT17dG9rZW5pemU6RFJlfTtmdW5jdGlvbiBEUmUoaSl7Y29uc3QgYT1pLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5jb250ZW50SW5pdGlhbCxwLHcpO2xldCBmO3JldHVybiBhO2Z1bmN0aW9uIHAoRSl7aWYoRT09PW51bGwpe2kuY29uc3VtZShFKTtyZXR1cm59cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoRSksaS5leGl0KCJsaW5lRW5kaW5nIiksaWwoaSxhLCJsaW5lUHJlZml4Iil9ZnVuY3Rpb24gdyhFKXtyZXR1cm4gaS5lbnRlcigicGFyYWdyYXBoIiksbShFKX1mdW5jdGlvbiBtKEUpe2NvbnN0IF89aS5lbnRlcigiY2h1bmtUZXh0Iix7Y29udGVudFR5cGU6InRleHQiLHByZXZpb3VzOmZ9KTtyZXR1cm4gZiYmKGYubmV4dD1fKSxmPV8sYihFKX1mdW5jdGlvbiBiKEUpe2lmKEU9PT1udWxsKXtpLmV4aXQoImNodW5rVGV4dCIpLGkuZXhpdCgicGFyYWdyYXBoIiksaS5jb25zdW1lKEUpO3JldHVybn1yZXR1cm4geGEoRSk/KGkuY29uc3VtZShFKSxpLmV4aXQoImNodW5rVGV4dCIpLG0pOihpLmNvbnN1bWUoRSksYil9fWNvbnN0IElSZT17dG9rZW5pemU6T1JlfSxSTnQ9e3Rva2VuaXplOlBSZX07ZnVuY3Rpb24gT1JlKGkpe2NvbnN0IGE9dGhpcyxmPVtdO2xldCBwPTAsdyxtLGI7cmV0dXJuIEU7ZnVuY3Rpb24gRShidCl7aWYocDxmLmxlbmd0aCl7Y29uc3QgbXQ9ZltwXTtyZXR1cm4gYS5jb250YWluZXJTdGF0ZT1tdFsxXSxpLmF0dGVtcHQobXRbMF0uY29udGludWF0aW9uLF8sQSkoYnQpfXJldHVybiBBKGJ0KX1mdW5jdGlvbiBfKGJ0KXtpZihwKyssYS5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93KXthLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3c9dm9pZCAwLHcmJmF0KCk7Y29uc3QgbXQ9YS5ldmVudHMubGVuZ3RoO2xldCB5dD1tdCxmdDtmb3IoO3l0LS07KWlmKGEuZXZlbnRzW3l0XVswXT09PSJleGl0IiYmYS5ldmVudHNbeXRdWzFdLnR5cGU9PT0iY2h1bmtGbG93Iil7ZnQ9YS5ldmVudHNbeXRdWzFdLmVuZDticmVha31zdChwKTtsZXQgdXQ9bXQ7Zm9yKDt1dDxhLmV2ZW50cy5sZW5ndGg7KWEuZXZlbnRzW3V0XVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxmdCksdXQrKztyZXR1cm4gbTMoYS5ldmVudHMseXQrMSwwLGEuZXZlbnRzLnNsaWNlKG10KSksYS5ldmVudHMubGVuZ3RoPXV0LEEoYnQpfXJldHVybiBFKGJ0KX1mdW5jdGlvbiBBKGJ0KXtpZihwPT09Zi5sZW5ndGgpe2lmKCF3KXJldHVybiBOKGJ0KTtpZih3LmN1cnJlbnRDb25zdHJ1Y3QmJncuY3VycmVudENvbnN0cnVjdC5jb25jcmV0ZSlyZXR1cm4geihidCk7YS5pbnRlcnJ1cHQ9ISEody5jdXJyZW50Q29uc3RydWN0JiYhdy5fZ2ZtVGFibGVEeW5hbWljSW50ZXJydXB0SGFjayl9cmV0dXJuIGEuY29udGFpbmVyU3RhdGU9e30saS5jaGVjayhSTnQsSSxCKShidCl9ZnVuY3Rpb24gSShidCl7cmV0dXJuIHcmJmF0KCksc3QocCksTihidCl9ZnVuY3Rpb24gQihidCl7cmV0dXJuIGEucGFyc2VyLmxhenlbYS5ub3coKS5saW5lXT1wIT09Zi5sZW5ndGgsYj1hLm5vdygpLm9mZnNldCx6KGJ0KX1mdW5jdGlvbiBOKGJ0KXtyZXR1cm4gYS5jb250YWluZXJTdGF0ZT17fSxpLmF0dGVtcHQoUk50LFIseikoYnQpfWZ1bmN0aW9uIFIoYnQpe3JldHVybiBwKyssZi5wdXNoKFthLmN1cnJlbnRDb25zdHJ1Y3QsYS5jb250YWluZXJTdGF0ZV0pLE4oYnQpfWZ1bmN0aW9uIHooYnQpe2lmKGJ0PT09bnVsbCl7dyYmYXQoKSxzdCgwKSxpLmNvbnN1bWUoYnQpO3JldHVybn1yZXR1cm4gdz13fHxhLnBhcnNlci5mbG93KGEubm93KCkpLGkuZW50ZXIoImNodW5rRmxvdyIse2NvbnRlbnRUeXBlOiJmbG93IixwcmV2aW91czptLF90b2tlbml6ZXI6d30pLFcoYnQpfWZ1bmN0aW9uIFcoYnQpe2lmKGJ0PT09bnVsbCl7ZXQoaS5leGl0KCJjaHVua0Zsb3ciKSwhMCksc3QoMCksaS5jb25zdW1lKGJ0KTtyZXR1cm59cmV0dXJuIHhhKGJ0KT8oaS5jb25zdW1lKGJ0KSxldChpLmV4aXQoImNodW5rRmxvdyIpKSxwPTAsYS5pbnRlcnJ1cHQ9dm9pZCAwLEUpOihpLmNvbnN1bWUoYnQpLFcpfWZ1bmN0aW9uIGV0KGJ0LG10KXtjb25zdCB5dD1hLnNsaWNlU3RyZWFtKGJ0KTtpZihtdCYmeXQucHVzaChudWxsKSxidC5wcmV2aW91cz1tLG0mJihtLm5leHQ9YnQpLG09YnQsdy5kZWZpbmVTa2lwKGJ0LnN0YXJ0KSx3LndyaXRlKHl0KSxhLnBhcnNlci5sYXp5W2J0LnN0YXJ0LmxpbmVdKXtsZXQgZnQ9dy5ldmVudHMubGVuZ3RoO2Zvcig7ZnQtLTspaWYody5ldmVudHNbZnRdWzFdLnN0YXJ0Lm9mZnNldDxiJiYoIXcuZXZlbnRzW2Z0XVsxXS5lbmR8fHcuZXZlbnRzW2Z0XVsxXS5lbmQub2Zmc2V0PmIpKXJldHVybjtjb25zdCB1dD1hLmV2ZW50cy5sZW5ndGg7bGV0IHZ0PXV0LFgscHQ7Zm9yKDt2dC0tOylpZihhLmV2ZW50c1t2dF1bMF09PT0iZXhpdCImJmEuZXZlbnRzW3Z0XVsxXS50eXBlPT09ImNodW5rRmxvdyIpe2lmKFgpe3B0PWEuZXZlbnRzW3Z0XVsxXS5lbmQ7YnJlYWt9WD0hMH1mb3Ioc3QocCksZnQ9dXQ7ZnQ8YS5ldmVudHMubGVuZ3RoOylhLmV2ZW50c1tmdF1bMV0uZW5kPU9iamVjdC5hc3NpZ24oe30scHQpLGZ0Kys7bTMoYS5ldmVudHMsdnQrMSwwLGEuZXZlbnRzLnNsaWNlKHV0KSksYS5ldmVudHMubGVuZ3RoPWZ0fX1mdW5jdGlvbiBzdChidCl7bGV0IG10PWYubGVuZ3RoO2Zvcig7bXQtLSA+YnQ7KXtjb25zdCB5dD1mW210XTthLmNvbnRhaW5lclN0YXRlPXl0WzFdLHl0WzBdLmV4aXQuY2FsbChhLGkpfWYubGVuZ3RoPWJ0fWZ1bmN0aW9uIGF0KCl7dy53cml0ZShbbnVsbF0pLG09dm9pZCAwLHc9dm9pZCAwLGEuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz12b2lkIDB9fWZ1bmN0aW9uIFBSZShpLGEsZil7cmV0dXJuIGlsKGksaS5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZG9jdW1lbnQsYSxmKSwibGluZVByZWZpeCIsdGhpcy5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KX1mdW5jdGlvbiBqTnQoaSl7aWYoaT09PW51bGx8fHBwKGkpfHxMUmUoaSkpcmV0dXJuIDE7aWYoQVJlKGkpKXJldHVybiAyfWZ1bmN0aW9uIF8wdChpLGEsZil7Y29uc3QgcD1bXTtsZXQgdz0tMTtmb3IoOysrdzxpLmxlbmd0aDspe2NvbnN0IG09aVt3XS5yZXNvbHZlQWxsO20mJiFwLmluY2x1ZGVzKG0pJiYoYT1tKGEsZikscC5wdXNoKG0pKX1yZXR1cm4gYX1jb25zdCBTMHQ9e25hbWU6ImF0dGVudGlvbiIsdG9rZW5pemU6TlJlLHJlc29sdmVBbGw6RlJlfTtmdW5jdGlvbiBGUmUoaSxhKXtsZXQgZj0tMSxwLHcsbSxiLEUsXyxBLEk7Zm9yKDsrK2Y8aS5sZW5ndGg7KWlmKGlbZl1bMF09PT0iZW50ZXIiJiZpW2ZdWzFdLnR5cGU9PT0iYXR0ZW50aW9uU2VxdWVuY2UiJiZpW2ZdWzFdLl9jbG9zZSl7Zm9yKHA9ZjtwLS07KWlmKGlbcF1bMF09PT0iZXhpdCImJmlbcF1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJmlbcF1bMV0uX29wZW4mJmEuc2xpY2VTZXJpYWxpemUoaVtwXVsxXSkuY2hhckNvZGVBdCgwKT09PWEuc2xpY2VTZXJpYWxpemUoaVtmXVsxXSkuY2hhckNvZGVBdCgwKSl7aWYoKGlbcF1bMV0uX2Nsb3NlfHxpW2ZdWzFdLl9vcGVuKSYmKGlbZl1bMV0uZW5kLm9mZnNldC1pW2ZdWzFdLnN0YXJ0Lm9mZnNldCklMyYmISgoaVtwXVsxXS5lbmQub2Zmc2V0LWlbcF1bMV0uc3RhcnQub2Zmc2V0K2lbZl1bMV0uZW5kLm9mZnNldC1pW2ZdWzFdLnN0YXJ0Lm9mZnNldCklMykpY29udGludWU7Xz1pW3BdWzFdLmVuZC5vZmZzZXQtaVtwXVsxXS5zdGFydC5vZmZzZXQ+MSYmaVtmXVsxXS5lbmQub2Zmc2V0LWlbZl1bMV0uc3RhcnQub2Zmc2V0PjE/MjoxO2NvbnN0IEI9T2JqZWN0LmFzc2lnbih7fSxpW3BdWzFdLmVuZCksTj1PYmplY3QuYXNzaWduKHt9LGlbZl1bMV0uc3RhcnQpOyROdChCLC1fKSwkTnQoTixfKSxiPXt0eXBlOl8+MT8ic3Ryb25nU2VxdWVuY2UiOiJlbXBoYXNpc1NlcXVlbmNlIixzdGFydDpCLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbcF1bMV0uZW5kKX0sRT17dHlwZTpfPjE/InN0cm9uZ1NlcXVlbmNlIjoiZW1waGFzaXNTZXF1ZW5jZSIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW2ZdWzFdLnN0YXJ0KSxlbmQ6Tn0sbT17dHlwZTpfPjE/InN0cm9uZ1RleHQiOiJlbXBoYXNpc1RleHQiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVtwXVsxXS5lbmQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbZl1bMV0uc3RhcnQpfSx3PXt0eXBlOl8+MT8ic3Ryb25nIjoiZW1waGFzaXMiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sYi5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30sRS5lbmQpfSxpW3BdWzFdLmVuZD1PYmplY3QuYXNzaWduKHt9LGIuc3RhcnQpLGlbZl1bMV0uc3RhcnQ9T2JqZWN0LmFzc2lnbih7fSxFLmVuZCksQT1bXSxpW3BdWzFdLmVuZC5vZmZzZXQtaVtwXVsxXS5zdGFydC5vZmZzZXQmJihBPXN3KEEsW1siZW50ZXIiLGlbcF1bMV0sYV0sWyJleGl0IixpW3BdWzFdLGFdXSkpLEE9c3coQSxbWyJlbnRlciIsdyxhXSxbImVudGVyIixiLGFdLFsiZXhpdCIsYixhXSxbImVudGVyIixtLGFdXSksQT1zdyhBLF8wdChhLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCxpLnNsaWNlKHArMSxmKSxhKSksQT1zdyhBLFtbImV4aXQiLG0sYV0sWyJlbnRlciIsRSxhXSxbImV4aXQiLEUsYV0sWyJleGl0Iix3LGFdXSksaVtmXVsxXS5lbmQub2Zmc2V0LWlbZl1bMV0uc3RhcnQub2Zmc2V0PyhJPTIsQT1zdyhBLFtbImVudGVyIixpW2ZdWzFdLGFdLFsiZXhpdCIsaVtmXVsxXSxhXV0pKTpJPTAsbTMoaSxwLTEsZi1wKzMsQSksZj1wK0EubGVuZ3RoLUktMjticmVha319Zm9yKGY9LTE7KytmPGkubGVuZ3RoOylpW2ZdWzFdLnR5cGU9PT0iYXR0ZW50aW9uU2VxdWVuY2UiJiYoaVtmXVsxXS50eXBlPSJkYXRhIik7cmV0dXJuIGl9ZnVuY3Rpb24gTlJlKGksYSl7Y29uc3QgZj10aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmF0dGVudGlvbk1hcmtlcnMubnVsbCxwPXRoaXMucHJldmlvdXMsdz1qTnQocCk7bGV0IG07cmV0dXJuIGI7ZnVuY3Rpb24gYihfKXtyZXR1cm4gbT1fLGkuZW50ZXIoImF0dGVudGlvblNlcXVlbmNlIiksRShfKX1mdW5jdGlvbiBFKF8pe2lmKF89PT1tKXJldHVybiBpLmNvbnN1bWUoXyksRTtjb25zdCBBPWkuZXhpdCgiYXR0ZW50aW9uU2VxdWVuY2UiKSxJPWpOdChfKSxCPSFJfHxJPT09MiYmd3x8Zi5pbmNsdWRlcyhfKSxOPSF3fHx3PT09MiYmSXx8Zi5pbmNsdWRlcyhwKTtyZXR1cm4gQS5fb3Blbj0hIShtPT09NDI/QjpCJiYod3x8IU4pKSxBLl9jbG9zZT0hIShtPT09NDI/TjpOJiYoSXx8IUIpKSxhKF8pfX1mdW5jdGlvbiAkTnQoaSxhKXtpLmNvbHVtbis9YSxpLm9mZnNldCs9YSxpLl9idWZmZXJJbmRleCs9YX1jb25zdCBCUmU9e25hbWU6ImF1dG9saW5rIix0b2tlbml6ZTpSUmV9O2Z1bmN0aW9uIFJSZShpLGEsZil7bGV0IHA9MDtyZXR1cm4gdztmdW5jdGlvbiB3KFIpe3JldHVybiBpLmVudGVyKCJhdXRvbGluayIpLGkuZW50ZXIoImF1dG9saW5rTWFya2VyIiksaS5jb25zdW1lKFIpLGkuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKSxpLmVudGVyKCJhdXRvbGlua1Byb3RvY29sIiksbX1mdW5jdGlvbiBtKFIpe3JldHVybiB5MyhSKT8oaS5jb25zdW1lKFIpLGIpOkEoUil9ZnVuY3Rpb24gYihSKXtyZXR1cm4gUj09PTQzfHxSPT09NDV8fFI9PT00Nnx8bG0oUik/KHA9MSxFKFIpKTpBKFIpfWZ1bmN0aW9uIEUoUil7cmV0dXJuIFI9PT01OD8oaS5jb25zdW1lKFIpLHA9MCxfKTooUj09PTQzfHxSPT09NDV8fFI9PT00Nnx8bG0oUikpJiZwKys8MzI/KGkuY29uc3VtZShSKSxFKToocD0wLEEoUikpfWZ1bmN0aW9uIF8oUil7cmV0dXJuIFI9PT02Mj8oaS5leGl0KCJhdXRvbGlua1Byb3RvY29sIiksaS5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKSxpLmNvbnN1bWUoUiksaS5leGl0KCJhdXRvbGlua01hcmtlciIpLGkuZXhpdCgiYXV0b2xpbmsiKSxhKTpSPT09bnVsbHx8Uj09PTMyfHxSPT09NjB8fFQwdChSKT9mKFIpOihpLmNvbnN1bWUoUiksXyl9ZnVuY3Rpb24gQShSKXtyZXR1cm4gUj09PTY0PyhpLmNvbnN1bWUoUiksSSk6Q1JlKFIpPyhpLmNvbnN1bWUoUiksQSk6ZihSKX1mdW5jdGlvbiBJKFIpe3JldHVybiBsbShSKT9CKFIpOmYoUil9ZnVuY3Rpb24gQihSKXtyZXR1cm4gUj09PTQ2PyhpLmNvbnN1bWUoUikscD0wLEkpOlI9PT02Mj8oaS5leGl0KCJhdXRvbGlua1Byb3RvY29sIikudHlwZT0iYXV0b2xpbmtFbWFpbCIsaS5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKSxpLmNvbnN1bWUoUiksaS5leGl0KCJhdXRvbGlua01hcmtlciIpLGkuZXhpdCgiYXV0b2xpbmsiKSxhKTpOKFIpfWZ1bmN0aW9uIE4oUil7aWYoKFI9PT00NXx8bG0oUikpJiZwKys8NjMpe2NvbnN0IHo9Uj09PTQ1P046QjtyZXR1cm4gaS5jb25zdW1lKFIpLHp9cmV0dXJuIGYoUil9fWNvbnN0IHlZPXt0b2tlbml6ZTpqUmUscGFydGlhbDohMH07ZnVuY3Rpb24galJlKGksYSxmKXtyZXR1cm4gcDtmdW5jdGlvbiBwKG0pe3JldHVybiBXYyhtKT9pbChpLHcsImxpbmVQcmVmaXgiKShtKTp3KG0pfWZ1bmN0aW9uIHcobSl7cmV0dXJuIG09PT1udWxsfHx4YShtKT9hKG0pOmYobSl9fWNvbnN0IHpOdD17bmFtZToiYmxvY2tRdW90ZSIsdG9rZW5pemU6JFJlLGNvbnRpbnVhdGlvbjp7dG9rZW5pemU6elJlfSxleGl0OnFSZX07ZnVuY3Rpb24gJFJlKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHc7ZnVuY3Rpb24gdyhiKXtpZihiPT09NjIpe2NvbnN0IEU9cC5jb250YWluZXJTdGF0ZTtyZXR1cm4gRS5vcGVufHwoaS5lbnRlcigiYmxvY2tRdW90ZSIse19jb250YWluZXI6ITB9KSxFLm9wZW49ITApLGkuZW50ZXIoImJsb2NrUXVvdGVQcmVmaXgiKSxpLmVudGVyKCJibG9ja1F1b3RlTWFya2VyIiksaS5jb25zdW1lKGIpLGkuZXhpdCgiYmxvY2tRdW90ZU1hcmtlciIpLG19cmV0dXJuIGYoYil9ZnVuY3Rpb24gbShiKXtyZXR1cm4gV2MoYik/KGkuZW50ZXIoImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIiksaS5jb25zdW1lKGIpLGkuZXhpdCgiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiKSxpLmV4aXQoImJsb2NrUXVvdGVQcmVmaXgiKSxhKTooaS5leGl0KCJibG9ja1F1b3RlUHJlZml4IiksYShiKSl9fWZ1bmN0aW9uIHpSZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiB3O2Z1bmN0aW9uIHcoYil7cmV0dXJuIFdjKGIpP2lsKGksbSwibGluZVByZWZpeCIscC5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KShiKTptKGIpfWZ1bmN0aW9uIG0oYil7cmV0dXJuIGkuYXR0ZW1wdCh6TnQsYSxmKShiKX19ZnVuY3Rpb24gcVJlKGkpe2kuZXhpdCgiYmxvY2tRdW90ZSIpfWNvbnN0IHFOdD17bmFtZToiY2hhcmFjdGVyRXNjYXBlIix0b2tlbml6ZTpIUmV9O2Z1bmN0aW9uIEhSZShpLGEsZil7cmV0dXJuIHA7ZnVuY3Rpb24gcChtKXtyZXR1cm4gaS5lbnRlcigiY2hhcmFjdGVyRXNjYXBlIiksaS5lbnRlcigiZXNjYXBlTWFya2VyIiksaS5jb25zdW1lKG0pLGkuZXhpdCgiZXNjYXBlTWFya2VyIiksd31mdW5jdGlvbiB3KG0pe3JldHVybiBTUmUobSk/KGkuZW50ZXIoImNoYXJhY3RlckVzY2FwZVZhbHVlIiksaS5jb25zdW1lKG0pLGkuZXhpdCgiY2hhcmFjdGVyRXNjYXBlVmFsdWUiKSxpLmV4aXQoImNoYXJhY3RlckVzY2FwZSIpLGEpOmYobSl9fWNvbnN0IEhOdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpIik7ZnVuY3Rpb24gQTB0KGkpe2NvbnN0IGE9IiYiK2krIjsiO0hOdC5pbm5lckhUTUw9YTtjb25zdCBmPUhOdC50ZXh0Q29udGVudDtyZXR1cm4gZi5jaGFyQ29kZUF0KGYubGVuZ3RoLTEpPT09NTkmJmkhPT0ic2VtaSJ8fGY9PT1hPyExOmZ9Y29uc3QgVk50PXtuYW1lOiJjaGFyYWN0ZXJSZWZlcmVuY2UiLHRva2VuaXplOlZSZX07ZnVuY3Rpb24gVlJlKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHc9MCxtLGI7cmV0dXJuIEU7ZnVuY3Rpb24gRShCKXtyZXR1cm4gaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlIiksaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksaS5jb25zdW1lKEIpLGkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIiksX31mdW5jdGlvbiBfKEIpe3JldHVybiBCPT09MzU/KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiKSxpLmNvbnN1bWUoQiksaS5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIiksQSk6KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIiksbT0zMSxiPWxtLEkoQikpfWZ1bmN0aW9uIEEoQil7cmV0dXJuIEI9PT04OHx8Qj09PTEyMD8oaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWwiKSxpLmNvbnN1bWUoQiksaS5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCIpLGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIiksbT02LGI9X1JlLEkpOihpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpLG09NyxiPUMwdCxJKEIpKX1mdW5jdGlvbiBJKEIpe2lmKEI9PT01OSYmdyl7Y29uc3QgTj1pLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIik7cmV0dXJuIGI9PT1sbSYmIUEwdChwLnNsaWNlU2VyaWFsaXplKE4pKT9mKEIpOihpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSxpLmNvbnN1bWUoQiksaS5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZSIpLGEpfXJldHVybiBiKEIpJiZ3Kys8bT8oaS5jb25zdW1lKEIpLEkpOmYoQil9fWNvbnN0IEdOdD17dG9rZW5pemU6VVJlLHBhcnRpYWw6ITB9LFVOdD17bmFtZToiY29kZUZlbmNlZCIsdG9rZW5pemU6R1JlLGNvbmNyZXRlOiEwfTtmdW5jdGlvbiBHUmUoaSxhLGYpe2NvbnN0IHA9dGhpcyx3PXt0b2tlbml6ZTp5dCxwYXJ0aWFsOiEwfTtsZXQgbT0wLGI9MCxFO3JldHVybiBfO2Z1bmN0aW9uIF8oZnQpe3JldHVybiBBKGZ0KX1mdW5jdGlvbiBBKGZ0KXtjb25zdCB1dD1wLmV2ZW50c1twLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIG09dXQmJnV0WzFdLnR5cGU9PT0ibGluZVByZWZpeCI/dXRbMl0uc2xpY2VTZXJpYWxpemUodXRbMV0sITApLmxlbmd0aDowLEU9ZnQsaS5lbnRlcigiY29kZUZlbmNlZCIpLGkuZW50ZXIoImNvZGVGZW5jZWRGZW5jZSIpLGkuZW50ZXIoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksSShmdCl9ZnVuY3Rpb24gSShmdCl7cmV0dXJuIGZ0PT09RT8oYisrLGkuY29uc3VtZShmdCksSSk6YjwzP2YoZnQpOihpLmV4aXQoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksV2MoZnQpP2lsKGksQiwid2hpdGVzcGFjZSIpKGZ0KTpCKGZ0KSl9ZnVuY3Rpb24gQihmdCl7cmV0dXJuIGZ0PT09bnVsbHx8eGEoZnQpPyhpLmV4aXQoImNvZGVGZW5jZWRGZW5jZSIpLHAuaW50ZXJydXB0P2EoZnQpOmkuY2hlY2soR050LFcsbXQpKGZ0KSk6KGkuZW50ZXIoImNvZGVGZW5jZWRGZW5jZUluZm8iKSxpLmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSksTihmdCkpfWZ1bmN0aW9uIE4oZnQpe3JldHVybiBmdD09PW51bGx8fHhhKGZ0KT8oaS5leGl0KCJjaHVua1N0cmluZyIpLGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlSW5mbyIpLEIoZnQpKTpXYyhmdCk/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoImNvZGVGZW5jZWRGZW5jZUluZm8iKSxpbChpLFIsIndoaXRlc3BhY2UiKShmdCkpOmZ0PT09OTYmJmZ0PT09RT9mKGZ0KTooaS5jb25zdW1lKGZ0KSxOKX1mdW5jdGlvbiBSKGZ0KXtyZXR1cm4gZnQ9PT1udWxsfHx4YShmdCk/QihmdCk6KGkuZW50ZXIoImNvZGVGZW5jZWRGZW5jZU1ldGEiKSxpLmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSkseihmdCkpfWZ1bmN0aW9uIHooZnQpe3JldHVybiBmdD09PW51bGx8fHhhKGZ0KT8oaS5leGl0KCJjaHVua1N0cmluZyIpLGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlTWV0YSIpLEIoZnQpKTpmdD09PTk2JiZmdD09PUU/ZihmdCk6KGkuY29uc3VtZShmdCkseil9ZnVuY3Rpb24gVyhmdCl7cmV0dXJuIGkuYXR0ZW1wdCh3LG10LGV0KShmdCl9ZnVuY3Rpb24gZXQoZnQpe3JldHVybiBpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGZ0KSxpLmV4aXQoImxpbmVFbmRpbmciKSxzdH1mdW5jdGlvbiBzdChmdCl7cmV0dXJuIG0+MCYmV2MoZnQpP2lsKGksYXQsImxpbmVQcmVmaXgiLG0rMSkoZnQpOmF0KGZ0KX1mdW5jdGlvbiBhdChmdCl7cmV0dXJuIGZ0PT09bnVsbHx8eGEoZnQpP2kuY2hlY2soR050LFcsbXQpKGZ0KTooaS5lbnRlcigiY29kZUZsb3dWYWx1ZSIpLGJ0KGZ0KSl9ZnVuY3Rpb24gYnQoZnQpe3JldHVybiBmdD09PW51bGx8fHhhKGZ0KT8oaS5leGl0KCJjb2RlRmxvd1ZhbHVlIiksYXQoZnQpKTooaS5jb25zdW1lKGZ0KSxidCl9ZnVuY3Rpb24gbXQoZnQpe3JldHVybiBpLmV4aXQoImNvZGVGZW5jZWQiKSxhKGZ0KX1mdW5jdGlvbiB5dChmdCx1dCx2dCl7bGV0IFg9MDtyZXR1cm4gcHQ7ZnVuY3Rpb24gcHQoT3Qpe3JldHVybiBmdC5lbnRlcigibGluZUVuZGluZyIpLGZ0LmNvbnN1bWUoT3QpLGZ0LmV4aXQoImxpbmVFbmRpbmciKSxVfWZ1bmN0aW9uIFUoT3Qpe3JldHVybiBmdC5lbnRlcigiY29kZUZlbmNlZEZlbmNlIiksV2MoT3QpP2lsKGZ0LFR0LCJsaW5lUHJlZml4IixwLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpKE90KTpUdChPdCl9ZnVuY3Rpb24gVHQoT3Qpe3JldHVybiBPdD09PUU/KGZ0LmVudGVyKCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpLG50KE90KSk6dnQoT3QpfWZ1bmN0aW9uIG50KE90KXtyZXR1cm4gT3Q9PT1FPyhYKyssZnQuY29uc3VtZShPdCksbnQpOlg+PWI/KGZ0LmV4aXQoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksV2MoT3QpP2lsKGZ0LEl0LCJ3aGl0ZXNwYWNlIikoT3QpOkl0KE90KSk6dnQoT3QpfWZ1bmN0aW9uIEl0KE90KXtyZXR1cm4gT3Q9PT1udWxsfHx4YShPdCk/KGZ0LmV4aXQoImNvZGVGZW5jZWRGZW5jZSIpLHV0KE90KSk6dnQoT3QpfX19ZnVuY3Rpb24gVVJlKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHc7ZnVuY3Rpb24gdyhiKXtyZXR1cm4gYj09PW51bGw/ZihiKTooaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShiKSxpLmV4aXQoImxpbmVFbmRpbmciKSxtKX1mdW5jdGlvbiBtKGIpe3JldHVybiBwLnBhcnNlci5sYXp5W3Aubm93KCkubGluZV0/ZihiKTphKGIpfX1jb25zdCBMMHQ9e25hbWU6ImNvZGVJbmRlbnRlZCIsdG9rZW5pemU6WVJlfSxXUmU9e3Rva2VuaXplOktSZSxwYXJ0aWFsOiEwfTtmdW5jdGlvbiBZUmUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdztmdW5jdGlvbiB3KEEpe3JldHVybiBpLmVudGVyKCJjb2RlSW5kZW50ZWQiKSxpbChpLG0sImxpbmVQcmVmaXgiLDQrMSkoQSl9ZnVuY3Rpb24gbShBKXtjb25zdCBJPXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gSSYmSVsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZJWzJdLnNsaWNlU2VyaWFsaXplKElbMV0sITApLmxlbmd0aD49ND9iKEEpOmYoQSl9ZnVuY3Rpb24gYihBKXtyZXR1cm4gQT09PW51bGw/XyhBKTp4YShBKT9pLmF0dGVtcHQoV1JlLGIsXykoQSk6KGkuZW50ZXIoImNvZGVGbG93VmFsdWUiKSxFKEEpKX1mdW5jdGlvbiBFKEEpe3JldHVybiBBPT09bnVsbHx8eGEoQSk/KGkuZXhpdCgiY29kZUZsb3dWYWx1ZSIpLGIoQSkpOihpLmNvbnN1bWUoQSksRSl9ZnVuY3Rpb24gXyhBKXtyZXR1cm4gaS5leGl0KCJjb2RlSW5kZW50ZWQiKSxhKEEpfX1mdW5jdGlvbiBLUmUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdztmdW5jdGlvbiB3KGIpe3JldHVybiBwLnBhcnNlci5sYXp5W3Aubm93KCkubGluZV0/ZihiKTp4YShiKT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShiKSxpLmV4aXQoImxpbmVFbmRpbmciKSx3KTppbChpLG0sImxpbmVQcmVmaXgiLDQrMSkoYil9ZnVuY3Rpb24gbShiKXtjb25zdCBFPXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gRSYmRVsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZFWzJdLnNsaWNlU2VyaWFsaXplKEVbMV0sITApLmxlbmd0aD49ND9hKGIpOnhhKGIpP3coYik6ZihiKX19Y29uc3QgWFJlPXtuYW1lOiJjb2RlVGV4dCIsdG9rZW5pemU6SlJlLHJlc29sdmU6UVJlLHByZXZpb3VzOlpSZX07ZnVuY3Rpb24gUVJlKGkpe2xldCBhPWkubGVuZ3RoLTQsZj0zLHAsdztpZigoaVtmXVsxXS50eXBlPT09ImxpbmVFbmRpbmcifHxpW2ZdWzFdLnR5cGU9PT0ic3BhY2UiKSYmKGlbYV1bMV0udHlwZT09PSJsaW5lRW5kaW5nInx8aVthXVsxXS50eXBlPT09InNwYWNlIikpe2ZvcihwPWY7KytwPGE7KWlmKGlbcF1bMV0udHlwZT09PSJjb2RlVGV4dERhdGEiKXtpW2ZdWzFdLnR5cGU9ImNvZGVUZXh0UGFkZGluZyIsaVthXVsxXS50eXBlPSJjb2RlVGV4dFBhZGRpbmciLGYrPTIsYS09MjticmVha319Zm9yKHA9Zi0xLGErKzsrK3A8PWE7KXc9PT12b2lkIDA/cCE9PWEmJmlbcF1bMV0udHlwZSE9PSJsaW5lRW5kaW5nIiYmKHc9cCk6KHA9PT1hfHxpW3BdWzFdLnR5cGU9PT0ibGluZUVuZGluZyIpJiYoaVt3XVsxXS50eXBlPSJjb2RlVGV4dERhdGEiLHAhPT13KzImJihpW3ddWzFdLmVuZD1pW3AtMV1bMV0uZW5kLGkuc3BsaWNlKHcrMixwLXctMiksYS09cC13LTIscD13KzIpLHc9dm9pZCAwKTtyZXR1cm4gaX1mdW5jdGlvbiBaUmUoaSl7cmV0dXJuIGkhPT05Nnx8dGhpcy5ldmVudHNbdGhpcy5ldmVudHMubGVuZ3RoLTFdWzFdLnR5cGU9PT0iY2hhcmFjdGVyRXNjYXBlIn1mdW5jdGlvbiBKUmUoaSxhLGYpe2xldCBwPTAsdyxtO3JldHVybiBiO2Z1bmN0aW9uIGIoQil7cmV0dXJuIGkuZW50ZXIoImNvZGVUZXh0IiksaS5lbnRlcigiY29kZVRleHRTZXF1ZW5jZSIpLEUoQil9ZnVuY3Rpb24gRShCKXtyZXR1cm4gQj09PTk2PyhpLmNvbnN1bWUoQikscCsrLEUpOihpLmV4aXQoImNvZGVUZXh0U2VxdWVuY2UiKSxfKEIpKX1mdW5jdGlvbiBfKEIpe3JldHVybiBCPT09bnVsbD9mKEIpOkI9PT0zMj8oaS5lbnRlcigic3BhY2UiKSxpLmNvbnN1bWUoQiksaS5leGl0KCJzcGFjZSIpLF8pOkI9PT05Nj8obT1pLmVudGVyKCJjb2RlVGV4dFNlcXVlbmNlIiksdz0wLEkoQikpOnhhKEIpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKEIpLGkuZXhpdCgibGluZUVuZGluZyIpLF8pOihpLmVudGVyKCJjb2RlVGV4dERhdGEiKSxBKEIpKX1mdW5jdGlvbiBBKEIpe3JldHVybiBCPT09bnVsbHx8Qj09PTMyfHxCPT09OTZ8fHhhKEIpPyhpLmV4aXQoImNvZGVUZXh0RGF0YSIpLF8oQikpOihpLmNvbnN1bWUoQiksQSl9ZnVuY3Rpb24gSShCKXtyZXR1cm4gQj09PTk2PyhpLmNvbnN1bWUoQiksdysrLEkpOnc9PT1wPyhpLmV4aXQoImNvZGVUZXh0U2VxdWVuY2UiKSxpLmV4aXQoImNvZGVUZXh0IiksYShCKSk6KG0udHlwZT0iY29kZVRleHREYXRhIixBKEIpKX19ZnVuY3Rpb24gV050KGkpe2NvbnN0IGE9e307bGV0IGY9LTEscCx3LG0sYixFLF8sQTtmb3IoOysrZjxpLmxlbmd0aDspe2Zvcig7ZiBpbiBhOylmPWFbZl07aWYocD1pW2ZdLGYmJnBbMV0udHlwZT09PSJjaHVua0Zsb3ciJiZpW2YtMV1bMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeCImJihfPXBbMV0uX3Rva2VuaXplci5ldmVudHMsbT0wLG08Xy5sZW5ndGgmJl9bbV1bMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiJiYobSs9MiksbTxfLmxlbmd0aCYmX1ttXVsxXS50eXBlPT09ImNvbnRlbnQiKSlmb3IoOysrbTxfLmxlbmd0aCYmX1ttXVsxXS50eXBlIT09ImNvbnRlbnQiOylfW21dWzFdLnR5cGU9PT0iY2h1bmtUZXh0IiYmKF9bbV1bMV0uX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtPSEwLG0rKyk7aWYocFswXT09PSJlbnRlciIpcFsxXS5jb250ZW50VHlwZSYmKE9iamVjdC5hc3NpZ24oYSx0amUoaSxmKSksZj1hW2ZdLEE9ITApO2Vsc2UgaWYocFsxXS5fY29udGFpbmVyKXtmb3IobT1mLHc9dm9pZCAwO20tLSYmKGI9aVttXSxiWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fGJbMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiKTspYlswXT09PSJlbnRlciImJih3JiYoaVt3XVsxXS50eXBlPSJsaW5lRW5kaW5nQmxhbmsiKSxiWzFdLnR5cGU9ImxpbmVFbmRpbmciLHc9bSk7dyYmKHBbMV0uZW5kPU9iamVjdC5hc3NpZ24oe30saVt3XVsxXS5zdGFydCksRT1pLnNsaWNlKHcsZiksRS51bnNoaWZ0KHApLG0zKGksdyxmLXcrMSxFKSl9fXJldHVybiFBfWZ1bmN0aW9uIHRqZShpLGEpe2NvbnN0IGY9aVthXVsxXSxwPWlbYV1bMl07bGV0IHc9YS0xO2NvbnN0IG09W10sYj1mLl90b2tlbml6ZXJ8fHAucGFyc2VyW2YuY29udGVudFR5cGVdKGYuc3RhcnQpLEU9Yi5ldmVudHMsXz1bXSxBPXt9O2xldCBJLEIsTj0tMSxSPWYsej0wLFc9MDtjb25zdCBldD1bV107Zm9yKDtSOyl7Zm9yKDtpWysrd11bMV0hPT1SOyk7bS5wdXNoKHcpLFIuX3Rva2VuaXplcnx8KEk9cC5zbGljZVN0cmVhbShSKSxSLm5leHR8fEkucHVzaChudWxsKSxCJiZiLmRlZmluZVNraXAoUi5zdGFydCksUi5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW0mJihiLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW09ITApLGIud3JpdGUoSSksUi5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW0mJihiLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW09dm9pZCAwKSksQj1SLFI9Ui5uZXh0fWZvcihSPWY7KytOPEUubGVuZ3RoOylFW05dWzBdPT09ImV4aXQiJiZFW04tMV1bMF09PT0iZW50ZXIiJiZFW05dWzFdLnR5cGU9PT1FW04tMV1bMV0udHlwZSYmRVtOXVsxXS5zdGFydC5saW5lIT09RVtOXVsxXS5lbmQubGluZSYmKFc9TisxLGV0LnB1c2goVyksUi5fdG9rZW5pemVyPXZvaWQgMCxSLnByZXZpb3VzPXZvaWQgMCxSPVIubmV4dCk7Zm9yKGIuZXZlbnRzPVtdLFI/KFIuX3Rva2VuaXplcj12b2lkIDAsUi5wcmV2aW91cz12b2lkIDApOmV0LnBvcCgpLE49ZXQubGVuZ3RoO04tLTspe2NvbnN0IHN0PUUuc2xpY2UoZXRbTl0sZXRbTisxXSksYXQ9bS5wb3AoKTtfLnVuc2hpZnQoW2F0LGF0K3N0Lmxlbmd0aC0xXSksbTMoaSxhdCwyLHN0KX1mb3IoTj0tMTsrK048Xy5sZW5ndGg7KUFbeitfW05dWzBdXT16K19bTl1bMV0seis9X1tOXVsxXS1fW05dWzBdLTE7cmV0dXJuIEF9Y29uc3QgZWplPXt0b2tlbml6ZTppamUscmVzb2x2ZTpyamV9LG5qZT17dG9rZW5pemU6c2plLHBhcnRpYWw6ITB9O2Z1bmN0aW9uIHJqZShpKXtyZXR1cm4gV050KGkpLGl9ZnVuY3Rpb24gaWplKGksYSl7bGV0IGY7cmV0dXJuIHA7ZnVuY3Rpb24gcChFKXtyZXR1cm4gaS5lbnRlcigiY29udGVudCIpLGY9aS5lbnRlcigiY2h1bmtDb250ZW50Iix7Y29udGVudFR5cGU6ImNvbnRlbnQifSksdyhFKX1mdW5jdGlvbiB3KEUpe3JldHVybiBFPT09bnVsbD9tKEUpOnhhKEUpP2kuY2hlY2sobmplLGIsbSkoRSk6KGkuY29uc3VtZShFKSx3KX1mdW5jdGlvbiBtKEUpe3JldHVybiBpLmV4aXQoImNodW5rQ29udGVudCIpLGkuZXhpdCgiY29udGVudCIpLGEoRSl9ZnVuY3Rpb24gYihFKXtyZXR1cm4gaS5jb25zdW1lKEUpLGkuZXhpdCgiY2h1bmtDb250ZW50IiksZi5uZXh0PWkuZW50ZXIoImNodW5rQ29udGVudCIse2NvbnRlbnRUeXBlOiJjb250ZW50IixwcmV2aW91czpmfSksZj1mLm5leHQsd319ZnVuY3Rpb24gc2plKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHc7ZnVuY3Rpb24gdyhiKXtyZXR1cm4gaS5leGl0KCJjaHVua0NvbnRlbnQiKSxpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGluZUVuZGluZyIpLGlsKGksbSwibGluZVByZWZpeCIpfWZ1bmN0aW9uIG0oYil7aWYoYj09PW51bGx8fHhhKGIpKXJldHVybiBmKGIpO2NvbnN0IEU9cC5ldmVudHNbcC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiFwLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikmJkUmJkVbMV0udHlwZT09PSJsaW5lUHJlZml4IiYmRVsyXS5zbGljZVNlcmlhbGl6ZShFWzFdLCEwKS5sZW5ndGg+PTQ/YShiKTppLmludGVycnVwdChwLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csZixhKShiKX19ZnVuY3Rpb24gWU50KGksYSxmLHAsdyxtLGIsRSxfKXtjb25zdCBBPV98fE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgST0wO3JldHVybiBCO2Z1bmN0aW9uIEIoc3Qpe3JldHVybiBzdD09PTYwPyhpLmVudGVyKHApLGkuZW50ZXIodyksaS5lbnRlcihtKSxpLmNvbnN1bWUoc3QpLGkuZXhpdChtKSxOKTpzdD09PW51bGx8fHN0PT09MzJ8fHN0PT09NDF8fFQwdChzdCk/ZihzdCk6KGkuZW50ZXIocCksaS5lbnRlcihiKSxpLmVudGVyKEUpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxXKHN0KSl9ZnVuY3Rpb24gTihzdCl7cmV0dXJuIHN0PT09NjI/KGkuZW50ZXIobSksaS5jb25zdW1lKHN0KSxpLmV4aXQobSksaS5leGl0KHcpLGkuZXhpdChwKSxhKTooaS5lbnRlcihFKSxpLmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSksUihzdCkpfWZ1bmN0aW9uIFIoc3Qpe3JldHVybiBzdD09PTYyPyhpLmV4aXQoImNodW5rU3RyaW5nIiksaS5leGl0KEUpLE4oc3QpKTpzdD09PW51bGx8fHN0PT09NjB8fHhhKHN0KT9mKHN0KTooaS5jb25zdW1lKHN0KSxzdD09PTkyP3o6Uil9ZnVuY3Rpb24geihzdCl7cmV0dXJuIHN0PT09NjB8fHN0PT09NjJ8fHN0PT09OTI/KGkuY29uc3VtZShzdCksUik6UihzdCl9ZnVuY3Rpb24gVyhzdCl7cmV0dXJuIUkmJihzdD09PW51bGx8fHN0PT09NDF8fHBwKHN0KSk/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoRSksaS5leGl0KGIpLGkuZXhpdChwKSxhKHN0KSk6STxBJiZzdD09PTQwPyhpLmNvbnN1bWUoc3QpLEkrKyxXKTpzdD09PTQxPyhpLmNvbnN1bWUoc3QpLEktLSxXKTpzdD09PW51bGx8fHN0PT09MzJ8fHN0PT09NDB8fFQwdChzdCk/ZihzdCk6KGkuY29uc3VtZShzdCksc3Q9PT05Mj9ldDpXKX1mdW5jdGlvbiBldChzdCl7cmV0dXJuIHN0PT09NDB8fHN0PT09NDF8fHN0PT09OTI/KGkuY29uc3VtZShzdCksVyk6VyhzdCl9fWZ1bmN0aW9uIEtOdChpLGEsZixwLHcsbSl7Y29uc3QgYj10aGlzO2xldCBFPTAsXztyZXR1cm4gQTtmdW5jdGlvbiBBKFIpe3JldHVybiBpLmVudGVyKHApLGkuZW50ZXIodyksaS5jb25zdW1lKFIpLGkuZXhpdCh3KSxpLmVudGVyKG0pLEl9ZnVuY3Rpb24gSShSKXtyZXR1cm4gRT45OTl8fFI9PT1udWxsfHxSPT09OTF8fFI9PT05MyYmIV98fFI9PT05NCYmIUUmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIGIucGFyc2VyLmNvbnN0cnVjdHM/ZihSKTpSPT09OTM/KGkuZXhpdChtKSxpLmVudGVyKHcpLGkuY29uc3VtZShSKSxpLmV4aXQodyksaS5leGl0KHApLGEpOnhhKFIpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKFIpLGkuZXhpdCgibGluZUVuZGluZyIpLEkpOihpLmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSksQihSKSl9ZnVuY3Rpb24gQihSKXtyZXR1cm4gUj09PW51bGx8fFI9PT05MXx8Uj09PTkzfHx4YShSKXx8RSsrPjk5OT8oaS5leGl0KCJjaHVua1N0cmluZyIpLEkoUikpOihpLmNvbnN1bWUoUiksX3x8KF89IVdjKFIpKSxSPT09OTI/TjpCKX1mdW5jdGlvbiBOKFIpe3JldHVybiBSPT09OTF8fFI9PT05Mnx8Uj09PTkzPyhpLmNvbnN1bWUoUiksRSsrLEIpOkIoUil9fWZ1bmN0aW9uIFhOdChpLGEsZixwLHcsbSl7bGV0IGI7cmV0dXJuIEU7ZnVuY3Rpb24gRShOKXtyZXR1cm4gTj09PTM0fHxOPT09Mzl8fE49PT00MD8oaS5lbnRlcihwKSxpLmVudGVyKHcpLGkuY29uc3VtZShOKSxpLmV4aXQodyksYj1OPT09NDA/NDE6TixfKTpmKE4pfWZ1bmN0aW9uIF8oTil7cmV0dXJuIE49PT1iPyhpLmVudGVyKHcpLGkuY29uc3VtZShOKSxpLmV4aXQodyksaS5leGl0KHApLGEpOihpLmVudGVyKG0pLEEoTikpfWZ1bmN0aW9uIEEoTil7cmV0dXJuIE49PT1iPyhpLmV4aXQobSksXyhiKSk6Tj09PW51bGw/ZihOKTp4YShOKT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShOKSxpLmV4aXQoImxpbmVFbmRpbmciKSxpbChpLEEsImxpbmVQcmVmaXgiKSk6KGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxJKE4pKX1mdW5jdGlvbiBJKE4pe3JldHVybiBOPT09Ynx8Tj09PW51bGx8fHhhKE4pPyhpLmV4aXQoImNodW5rU3RyaW5nIiksQShOKSk6KGkuY29uc3VtZShOKSxOPT09OTI/QjpJKX1mdW5jdGlvbiBCKE4pe3JldHVybiBOPT09Ynx8Tj09PTkyPyhpLmNvbnN1bWUoTiksSSk6SShOKX19ZnVuY3Rpb24gVEYoaSxhKXtsZXQgZjtyZXR1cm4gcDtmdW5jdGlvbiBwKHcpe3JldHVybiB4YSh3KT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZSh3KSxpLmV4aXQoImxpbmVFbmRpbmciKSxmPSEwLHApOldjKHcpP2lsKGkscCxmPyJsaW5lUHJlZml4IjoibGluZVN1ZmZpeCIpKHcpOmEodyl9fWZ1bmN0aW9uIG9MKGkpe3JldHVybiBpLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLnJlcGxhY2UoL14gfCAkL2csIiIpLnRvTG93ZXJDYXNlKCkudG9VcHBlckNhc2UoKX1jb25zdCBhamU9e25hbWU6ImRlZmluaXRpb24iLHRva2VuaXplOmNqZX0sb2plPXt0b2tlbml6ZTp1amUscGFydGlhbDohMH07ZnVuY3Rpb24gY2plKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHc7cmV0dXJuIG07ZnVuY3Rpb24gbShSKXtyZXR1cm4gaS5lbnRlcigiZGVmaW5pdGlvbiIpLGIoUil9ZnVuY3Rpb24gYihSKXtyZXR1cm4gS050LmNhbGwocCxpLEUsZiwiZGVmaW5pdGlvbkxhYmVsIiwiZGVmaW5pdGlvbkxhYmVsTWFya2VyIiwiZGVmaW5pdGlvbkxhYmVsU3RyaW5nIikoUil9ZnVuY3Rpb24gRShSKXtyZXR1cm4gdz1vTChwLnNsaWNlU2VyaWFsaXplKHAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXVsxXSkuc2xpY2UoMSwtMSkpLFI9PT01OD8oaS5lbnRlcigiZGVmaW5pdGlvbk1hcmtlciIpLGkuY29uc3VtZShSKSxpLmV4aXQoImRlZmluaXRpb25NYXJrZXIiKSxfKTpmKFIpfWZ1bmN0aW9uIF8oUil7cmV0dXJuIHBwKFIpP1RGKGksQSkoUik6QShSKX1mdW5jdGlvbiBBKFIpe3JldHVybiBZTnQoaSxJLGYsImRlZmluaXRpb25EZXN0aW5hdGlvbiIsImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWwiLCJkZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsTWFya2VyIiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uUmF3IiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nIikoUil9ZnVuY3Rpb24gSShSKXtyZXR1cm4gaS5hdHRlbXB0KG9qZSxCLEIpKFIpfWZ1bmN0aW9uIEIoUil7cmV0dXJuIFdjKFIpP2lsKGksTiwid2hpdGVzcGFjZSIpKFIpOk4oUil9ZnVuY3Rpb24gTihSKXtyZXR1cm4gUj09PW51bGx8fHhhKFIpPyhpLmV4aXQoImRlZmluaXRpb24iKSxwLnBhcnNlci5kZWZpbmVkLnB1c2godyksYShSKSk6ZihSKX19ZnVuY3Rpb24gdWplKGksYSxmKXtyZXR1cm4gcDtmdW5jdGlvbiBwKEUpe3JldHVybiBwcChFKT9URihpLHcpKEUpOmYoRSl9ZnVuY3Rpb24gdyhFKXtyZXR1cm4gWE50KGksbSxmLCJkZWZpbml0aW9uVGl0bGUiLCJkZWZpbml0aW9uVGl0bGVNYXJrZXIiLCJkZWZpbml0aW9uVGl0bGVTdHJpbmciKShFKX1mdW5jdGlvbiBtKEUpe3JldHVybiBXYyhFKT9pbChpLGIsIndoaXRlc3BhY2UiKShFKTpiKEUpfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIEU9PT1udWxsfHx4YShFKT9hKEUpOmYoRSl9fWNvbnN0IGxqZT17bmFtZToiaGFyZEJyZWFrRXNjYXBlIix0b2tlbml6ZTpoamV9O2Z1bmN0aW9uIGhqZShpLGEsZil7cmV0dXJuIHA7ZnVuY3Rpb24gcChtKXtyZXR1cm4gaS5lbnRlcigiaGFyZEJyZWFrRXNjYXBlIiksaS5jb25zdW1lKG0pLHd9ZnVuY3Rpb24gdyhtKXtyZXR1cm4geGEobSk/KGkuZXhpdCgiaGFyZEJyZWFrRXNjYXBlIiksYShtKSk6ZihtKX19Y29uc3QgZmplPXtuYW1lOiJoZWFkaW5nQXR4Iix0b2tlbml6ZTpnamUscmVzb2x2ZTpkamV9O2Z1bmN0aW9uIGRqZShpLGEpe2xldCBmPWkubGVuZ3RoLTIscD0zLHcsbTtyZXR1cm4gaVtwXVsxXS50eXBlPT09IndoaXRlc3BhY2UiJiYocCs9MiksZi0yPnAmJmlbZl1bMV0udHlwZT09PSJ3aGl0ZXNwYWNlIiYmKGYtPTIpLGlbZl1bMV0udHlwZT09PSJhdHhIZWFkaW5nU2VxdWVuY2UiJiYocD09PWYtMXx8Zi00PnAmJmlbZi0yXVsxXS50eXBlPT09IndoaXRlc3BhY2UiKSYmKGYtPXArMT09PWY/Mjo0KSxmPnAmJih3PXt0eXBlOiJhdHhIZWFkaW5nVGV4dCIsc3RhcnQ6aVtwXVsxXS5zdGFydCxlbmQ6aVtmXVsxXS5lbmR9LG09e3R5cGU6ImNodW5rVGV4dCIsc3RhcnQ6aVtwXVsxXS5zdGFydCxlbmQ6aVtmXVsxXS5lbmQsY29udGVudFR5cGU6InRleHQifSxtMyhpLHAsZi1wKzEsW1siZW50ZXIiLHcsYV0sWyJlbnRlciIsbSxhXSxbImV4aXQiLG0sYV0sWyJleGl0Iix3LGFdXSkpLGl9ZnVuY3Rpb24gZ2plKGksYSxmKXtsZXQgcD0wO3JldHVybiB3O2Z1bmN0aW9uIHcoSSl7cmV0dXJuIGkuZW50ZXIoImF0eEhlYWRpbmciKSxtKEkpfWZ1bmN0aW9uIG0oSSl7cmV0dXJuIGkuZW50ZXIoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLGIoSSl9ZnVuY3Rpb24gYihJKXtyZXR1cm4gST09PTM1JiZwKys8Nj8oaS5jb25zdW1lKEkpLGIpOkk9PT1udWxsfHxwcChJKT8oaS5leGl0KCJhdHhIZWFkaW5nU2VxdWVuY2UiKSxFKEkpKTpmKEkpfWZ1bmN0aW9uIEUoSSl7cmV0dXJuIEk9PT0zNT8oaS5lbnRlcigiYXR4SGVhZGluZ1NlcXVlbmNlIiksXyhJKSk6ST09PW51bGx8fHhhKEkpPyhpLmV4aXQoImF0eEhlYWRpbmciKSxhKEkpKTpXYyhJKT9pbChpLEUsIndoaXRlc3BhY2UiKShJKTooaS5lbnRlcigiYXR4SGVhZGluZ1RleHQiKSxBKEkpKX1mdW5jdGlvbiBfKEkpe3JldHVybiBJPT09MzU/KGkuY29uc3VtZShJKSxfKTooaS5leGl0KCJhdHhIZWFkaW5nU2VxdWVuY2UiKSxFKEkpKX1mdW5jdGlvbiBBKEkpe3JldHVybiBJPT09bnVsbHx8ST09PTM1fHxwcChJKT8oaS5leGl0KCJhdHhIZWFkaW5nVGV4dCIpLEUoSSkpOihpLmNvbnN1bWUoSSksQSl9fWNvbnN0IHBqZT1bImFkZHJlc3MiLCJhcnRpY2xlIiwiYXNpZGUiLCJiYXNlIiwiYmFzZWZvbnQiLCJibG9ja3F1b3RlIiwiYm9keSIsImNhcHRpb24iLCJjZW50ZXIiLCJjb2wiLCJjb2xncm91cCIsImRkIiwiZGV0YWlscyIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb290ZXIiLCJmb3JtIiwiZnJhbWUiLCJmcmFtZXNldCIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJociIsImh0bWwiLCJpZnJhbWUiLCJsZWdlbmQiLCJsaSIsImxpbmsiLCJtYWluIiwibWVudSIsIm1lbnVpdGVtIiwibmF2Iiwibm9mcmFtZXMiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwicCIsInBhcmFtIiwic2VhcmNoIiwic2VjdGlvbiIsInN1bW1hcnkiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aXRsZSIsInRyIiwidHJhY2siLCJ1bCJdLFFOdD1bInByZSIsInNjcmlwdCIsInN0eWxlIiwidGV4dGFyZWEiXSxiamU9e25hbWU6Imh0bWxGbG93Iix0b2tlbml6ZTp5amUscmVzb2x2ZVRvOm1qZSxjb25jcmV0ZTohMH0sd2plPXt0b2tlbml6ZTpramUscGFydGlhbDohMH0sdmplPXt0b2tlbml6ZTp4amUscGFydGlhbDohMH07ZnVuY3Rpb24gbWplKGkpe2xldCBhPWkubGVuZ3RoO2Zvcig7YS0tJiYhKGlbYV1bMF09PT0iZW50ZXIiJiZpW2FdWzFdLnR5cGU9PT0iaHRtbEZsb3ciKTspO3JldHVybiBhPjEmJmlbYS0yXVsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiYoaVthXVsxXS5zdGFydD1pW2EtMl1bMV0uc3RhcnQsaVthKzFdWzFdLnN0YXJ0PWlbYS0yXVsxXS5zdGFydCxpLnNwbGljZShhLTIsMikpLGl9ZnVuY3Rpb24geWplKGksYSxmKXtjb25zdCBwPXRoaXM7bGV0IHcsbSxiLEUsXztyZXR1cm4gQTtmdW5jdGlvbiBBKEZ0KXtyZXR1cm4gSShGdCl9ZnVuY3Rpb24gSShGdCl7cmV0dXJuIGkuZW50ZXIoImh0bWxGbG93IiksaS5lbnRlcigiaHRtbEZsb3dEYXRhIiksaS5jb25zdW1lKEZ0KSxCfWZ1bmN0aW9uIEIoRnQpe3JldHVybiBGdD09PTMzPyhpLmNvbnN1bWUoRnQpLE4pOkZ0PT09NDc/KGkuY29uc3VtZShGdCksbT0hMCxXKTpGdD09PTYzPyhpLmNvbnN1bWUoRnQpLHc9MyxwLmludGVycnVwdD9hOnh0KTp5MyhGdCk/KGkuY29uc3VtZShGdCksYj1TdHJpbmcuZnJvbUNoYXJDb2RlKEZ0KSxldCk6ZihGdCl9ZnVuY3Rpb24gTihGdCl7cmV0dXJuIEZ0PT09NDU/KGkuY29uc3VtZShGdCksdz0yLFIpOkZ0PT09OTE/KGkuY29uc3VtZShGdCksdz01LEU9MCx6KTp5MyhGdCk/KGkuY29uc3VtZShGdCksdz00LHAuaW50ZXJydXB0P2E6eHQpOmYoRnQpfWZ1bmN0aW9uIFIoRnQpe3JldHVybiBGdD09PTQ1PyhpLmNvbnN1bWUoRnQpLHAuaW50ZXJydXB0P2E6eHQpOmYoRnQpfWZ1bmN0aW9uIHooRnQpe2NvbnN0IGduPSJDREFUQVsiO3JldHVybiBGdD09PWduLmNoYXJDb2RlQXQoRSsrKT8oaS5jb25zdW1lKEZ0KSxFPT09Z24ubGVuZ3RoP3AuaW50ZXJydXB0P2E6VHQ6eik6ZihGdCl9ZnVuY3Rpb24gVyhGdCl7cmV0dXJuIHkzKEZ0KT8oaS5jb25zdW1lKEZ0KSxiPVN0cmluZy5mcm9tQ2hhckNvZGUoRnQpLGV0KTpmKEZ0KX1mdW5jdGlvbiBldChGdCl7aWYoRnQ9PT1udWxsfHxGdD09PTQ3fHxGdD09PTYyfHxwcChGdCkpe2NvbnN0IGduPUZ0PT09NDcsU2U9Yi50b0xvd2VyQ2FzZSgpO3JldHVybiFnbiYmIW0mJlFOdC5pbmNsdWRlcyhTZSk/KHc9MSxwLmludGVycnVwdD9hKEZ0KTpUdChGdCkpOnBqZS5pbmNsdWRlcyhiLnRvTG93ZXJDYXNlKCkpPyh3PTYsZ24/KGkuY29uc3VtZShGdCksc3QpOnAuaW50ZXJydXB0P2EoRnQpOlR0KEZ0KSk6KHc9NyxwLmludGVycnVwdCYmIXAucGFyc2VyLmxhenlbcC5ub3coKS5saW5lXT9mKEZ0KTptP2F0KEZ0KTpidChGdCkpfXJldHVybiBGdD09PTQ1fHxsbShGdCk/KGkuY29uc3VtZShGdCksYis9U3RyaW5nLmZyb21DaGFyQ29kZShGdCksZXQpOmYoRnQpfWZ1bmN0aW9uIHN0KEZ0KXtyZXR1cm4gRnQ9PT02Mj8oaS5jb25zdW1lKEZ0KSxwLmludGVycnVwdD9hOlR0KTpmKEZ0KX1mdW5jdGlvbiBhdChGdCl7cmV0dXJuIFdjKEZ0KT8oaS5jb25zdW1lKEZ0KSxhdCk6cHQoRnQpfWZ1bmN0aW9uIGJ0KEZ0KXtyZXR1cm4gRnQ9PT00Nz8oaS5jb25zdW1lKEZ0KSxwdCk6RnQ9PT01OHx8RnQ9PT05NXx8eTMoRnQpPyhpLmNvbnN1bWUoRnQpLG10KTpXYyhGdCk/KGkuY29uc3VtZShGdCksYnQpOnB0KEZ0KX1mdW5jdGlvbiBtdChGdCl7cmV0dXJuIEZ0PT09NDV8fEZ0PT09NDZ8fEZ0PT09NTh8fEZ0PT09OTV8fGxtKEZ0KT8oaS5jb25zdW1lKEZ0KSxtdCk6eXQoRnQpfWZ1bmN0aW9uIHl0KEZ0KXtyZXR1cm4gRnQ9PT02MT8oaS5jb25zdW1lKEZ0KSxmdCk6V2MoRnQpPyhpLmNvbnN1bWUoRnQpLHl0KTpidChGdCl9ZnVuY3Rpb24gZnQoRnQpe3JldHVybiBGdD09PW51bGx8fEZ0PT09NjB8fEZ0PT09NjF8fEZ0PT09NjJ8fEZ0PT09OTY/ZihGdCk6RnQ9PT0zNHx8RnQ9PT0zOT8oaS5jb25zdW1lKEZ0KSxfPUZ0LHV0KTpXYyhGdCk/KGkuY29uc3VtZShGdCksZnQpOnZ0KEZ0KX1mdW5jdGlvbiB1dChGdCl7cmV0dXJuIEZ0PT09Xz8oaS5jb25zdW1lKEZ0KSxfPW51bGwsWCk6RnQ9PT1udWxsfHx4YShGdCk/ZihGdCk6KGkuY29uc3VtZShGdCksdXQpfWZ1bmN0aW9uIHZ0KEZ0KXtyZXR1cm4gRnQ9PT1udWxsfHxGdD09PTM0fHxGdD09PTM5fHxGdD09PTQ3fHxGdD09PTYwfHxGdD09PTYxfHxGdD09PTYyfHxGdD09PTk2fHxwcChGdCk/eXQoRnQpOihpLmNvbnN1bWUoRnQpLHZ0KX1mdW5jdGlvbiBYKEZ0KXtyZXR1cm4gRnQ9PT00N3x8RnQ9PT02Mnx8V2MoRnQpP2J0KEZ0KTpmKEZ0KX1mdW5jdGlvbiBwdChGdCl7cmV0dXJuIEZ0PT09NjI/KGkuY29uc3VtZShGdCksVSk6ZihGdCl9ZnVuY3Rpb24gVShGdCl7cmV0dXJuIEZ0PT09bnVsbHx8eGEoRnQpP1R0KEZ0KTpXYyhGdCk/KGkuY29uc3VtZShGdCksVSk6ZihGdCl9ZnVuY3Rpb24gVHQoRnQpe3JldHVybiBGdD09PTQ1JiZ3PT09Mj8oaS5jb25zdW1lKEZ0KSxCdCk6RnQ9PT02MCYmdz09PTE/KGkuY29uc3VtZShGdCksRXQpOkZ0PT09NjImJnc9PT00PyhpLmNvbnN1bWUoRnQpLEh0KTpGdD09PTYzJiZ3PT09Mz8oaS5jb25zdW1lKEZ0KSx4dCk6RnQ9PT05MyYmdz09PTU/KGkuY29uc3VtZShGdCksQ3QpOnhhKEZ0KSYmKHc9PT02fHx3PT09Nyk/KGkuZXhpdCgiaHRtbEZsb3dEYXRhIiksaS5jaGVjayh3amUsTGUsbnQpKEZ0KSk6RnQ9PT1udWxsfHx4YShGdCk/KGkuZXhpdCgiaHRtbEZsb3dEYXRhIiksbnQoRnQpKTooaS5jb25zdW1lKEZ0KSxUdCl9ZnVuY3Rpb24gbnQoRnQpe3JldHVybiBpLmNoZWNrKHZqZSxJdCxMZSkoRnQpfWZ1bmN0aW9uIEl0KEZ0KXtyZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShGdCksaS5leGl0KCJsaW5lRW5kaW5nIiksT3R9ZnVuY3Rpb24gT3QoRnQpe3JldHVybiBGdD09PW51bGx8fHhhKEZ0KT9udChGdCk6KGkuZW50ZXIoImh0bWxGbG93RGF0YSIpLFR0KEZ0KSl9ZnVuY3Rpb24gQnQoRnQpe3JldHVybiBGdD09PTQ1PyhpLmNvbnN1bWUoRnQpLHh0KTpUdChGdCl9ZnVuY3Rpb24gRXQoRnQpe3JldHVybiBGdD09PTQ3PyhpLmNvbnN1bWUoRnQpLGI9IiIsWik6VHQoRnQpfWZ1bmN0aW9uIFooRnQpe2lmKEZ0PT09NjIpe2NvbnN0IGduPWIudG9Mb3dlckNhc2UoKTtyZXR1cm4gUU50LmluY2x1ZGVzKGduKT8oaS5jb25zdW1lKEZ0KSxIdCk6VHQoRnQpfXJldHVybiB5MyhGdCkmJmIubGVuZ3RoPDg/KGkuY29uc3VtZShGdCksYis9U3RyaW5nLmZyb21DaGFyQ29kZShGdCksWik6VHQoRnQpfWZ1bmN0aW9uIEN0KEZ0KXtyZXR1cm4gRnQ9PT05Mz8oaS5jb25zdW1lKEZ0KSx4dCk6VHQoRnQpfWZ1bmN0aW9uIHh0KEZ0KXtyZXR1cm4gRnQ9PT02Mj8oaS5jb25zdW1lKEZ0KSxIdCk6RnQ9PT00NSYmdz09PTI/KGkuY29uc3VtZShGdCkseHQpOlR0KEZ0KX1mdW5jdGlvbiBIdChGdCl7cmV0dXJuIEZ0PT09bnVsbHx8eGEoRnQpPyhpLmV4aXQoImh0bWxGbG93RGF0YSIpLExlKEZ0KSk6KGkuY29uc3VtZShGdCksSHQpfWZ1bmN0aW9uIExlKEZ0KXtyZXR1cm4gaS5leGl0KCJodG1sRmxvdyIpLGEoRnQpfX1mdW5jdGlvbiB4amUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdztmdW5jdGlvbiB3KGIpe3JldHVybiB4YShiKT8oaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShiKSxpLmV4aXQoImxpbmVFbmRpbmciKSxtKTpmKGIpfWZ1bmN0aW9uIG0oYil7cmV0dXJuIHAucGFyc2VyLmxhenlbcC5ub3coKS5saW5lXT9mKGIpOmEoYil9fWZ1bmN0aW9uIGtqZShpLGEsZil7cmV0dXJuIHA7ZnVuY3Rpb24gcCh3KXtyZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZSh3KSxpLmV4aXQoImxpbmVFbmRpbmciKSxpLmF0dGVtcHQoeVksYSxmKX19Y29uc3QgRWplPXtuYW1lOiJodG1sVGV4dCIsdG9rZW5pemU6VGplfTtmdW5jdGlvbiBUamUoaSxhLGYpe2NvbnN0IHA9dGhpcztsZXQgdyxtLGI7cmV0dXJuIEU7ZnVuY3Rpb24gRSh4dCl7cmV0dXJuIGkuZW50ZXIoImh0bWxUZXh0IiksaS5lbnRlcigiaHRtbFRleHREYXRhIiksaS5jb25zdW1lKHh0KSxffWZ1bmN0aW9uIF8oeHQpe3JldHVybiB4dD09PTMzPyhpLmNvbnN1bWUoeHQpLEEpOnh0PT09NDc/KGkuY29uc3VtZSh4dCkseXQpOnh0PT09NjM/KGkuY29uc3VtZSh4dCksYnQpOnkzKHh0KT8oaS5jb25zdW1lKHh0KSx2dCk6Zih4dCl9ZnVuY3Rpb24gQSh4dCl7cmV0dXJuIHh0PT09NDU/KGkuY29uc3VtZSh4dCksSSk6eHQ9PT05MT8oaS5jb25zdW1lKHh0KSxtPTAseik6eTMoeHQpPyhpLmNvbnN1bWUoeHQpLGF0KTpmKHh0KX1mdW5jdGlvbiBJKHh0KXtyZXR1cm4geHQ9PT00NT8oaS5jb25zdW1lKHh0KSxSKTpmKHh0KX1mdW5jdGlvbiBCKHh0KXtyZXR1cm4geHQ9PT1udWxsP2YoeHQpOnh0PT09NDU/KGkuY29uc3VtZSh4dCksTik6eGEoeHQpPyhiPUIsRXQoeHQpKTooaS5jb25zdW1lKHh0KSxCKX1mdW5jdGlvbiBOKHh0KXtyZXR1cm4geHQ9PT00NT8oaS5jb25zdW1lKHh0KSxSKTpCKHh0KX1mdW5jdGlvbiBSKHh0KXtyZXR1cm4geHQ9PT02Mj9CdCh4dCk6eHQ9PT00NT9OKHh0KTpCKHh0KX1mdW5jdGlvbiB6KHh0KXtjb25zdCBIdD0iQ0RBVEFbIjtyZXR1cm4geHQ9PT1IdC5jaGFyQ29kZUF0KG0rKyk/KGkuY29uc3VtZSh4dCksbT09PUh0Lmxlbmd0aD9XOnopOmYoeHQpfWZ1bmN0aW9uIFcoeHQpe3JldHVybiB4dD09PW51bGw/Zih4dCk6eHQ9PT05Mz8oaS5jb25zdW1lKHh0KSxldCk6eGEoeHQpPyhiPVcsRXQoeHQpKTooaS5jb25zdW1lKHh0KSxXKX1mdW5jdGlvbiBldCh4dCl7cmV0dXJuIHh0PT09OTM/KGkuY29uc3VtZSh4dCksc3QpOlcoeHQpfWZ1bmN0aW9uIHN0KHh0KXtyZXR1cm4geHQ9PT02Mj9CdCh4dCk6eHQ9PT05Mz8oaS5jb25zdW1lKHh0KSxzdCk6Vyh4dCl9ZnVuY3Rpb24gYXQoeHQpe3JldHVybiB4dD09PW51bGx8fHh0PT09NjI/QnQoeHQpOnhhKHh0KT8oYj1hdCxFdCh4dCkpOihpLmNvbnN1bWUoeHQpLGF0KX1mdW5jdGlvbiBidCh4dCl7cmV0dXJuIHh0PT09bnVsbD9mKHh0KTp4dD09PTYzPyhpLmNvbnN1bWUoeHQpLG10KTp4YSh4dCk/KGI9YnQsRXQoeHQpKTooaS5jb25zdW1lKHh0KSxidCl9ZnVuY3Rpb24gbXQoeHQpe3JldHVybiB4dD09PTYyP0J0KHh0KTpidCh4dCl9ZnVuY3Rpb24geXQoeHQpe3JldHVybiB5Myh4dCk/KGkuY29uc3VtZSh4dCksZnQpOmYoeHQpfWZ1bmN0aW9uIGZ0KHh0KXtyZXR1cm4geHQ9PT00NXx8bG0oeHQpPyhpLmNvbnN1bWUoeHQpLGZ0KTp1dCh4dCl9ZnVuY3Rpb24gdXQoeHQpe3JldHVybiB4YSh4dCk/KGI9dXQsRXQoeHQpKTpXYyh4dCk/KGkuY29uc3VtZSh4dCksdXQpOkJ0KHh0KX1mdW5jdGlvbiB2dCh4dCl7cmV0dXJuIHh0PT09NDV8fGxtKHh0KT8oaS5jb25zdW1lKHh0KSx2dCk6eHQ9PT00N3x8eHQ9PT02Mnx8cHAoeHQpP1goeHQpOmYoeHQpfWZ1bmN0aW9uIFgoeHQpe3JldHVybiB4dD09PTQ3PyhpLmNvbnN1bWUoeHQpLEJ0KTp4dD09PTU4fHx4dD09PTk1fHx5Myh4dCk/KGkuY29uc3VtZSh4dCkscHQpOnhhKHh0KT8oYj1YLEV0KHh0KSk6V2MoeHQpPyhpLmNvbnN1bWUoeHQpLFgpOkJ0KHh0KX1mdW5jdGlvbiBwdCh4dCl7cmV0dXJuIHh0PT09NDV8fHh0PT09NDZ8fHh0PT09NTh8fHh0PT09OTV8fGxtKHh0KT8oaS5jb25zdW1lKHh0KSxwdCk6VSh4dCl9ZnVuY3Rpb24gVSh4dCl7cmV0dXJuIHh0PT09NjE/KGkuY29uc3VtZSh4dCksVHQpOnhhKHh0KT8oYj1VLEV0KHh0KSk6V2MoeHQpPyhpLmNvbnN1bWUoeHQpLFUpOlgoeHQpfWZ1bmN0aW9uIFR0KHh0KXtyZXR1cm4geHQ9PT1udWxsfHx4dD09PTYwfHx4dD09PTYxfHx4dD09PTYyfHx4dD09PTk2P2YoeHQpOnh0PT09MzR8fHh0PT09Mzk/KGkuY29uc3VtZSh4dCksdz14dCxudCk6eGEoeHQpPyhiPVR0LEV0KHh0KSk6V2MoeHQpPyhpLmNvbnN1bWUoeHQpLFR0KTooaS5jb25zdW1lKHh0KSxJdCl9ZnVuY3Rpb24gbnQoeHQpe3JldHVybiB4dD09PXc/KGkuY29uc3VtZSh4dCksdz12b2lkIDAsT3QpOnh0PT09bnVsbD9mKHh0KTp4YSh4dCk/KGI9bnQsRXQoeHQpKTooaS5jb25zdW1lKHh0KSxudCl9ZnVuY3Rpb24gSXQoeHQpe3JldHVybiB4dD09PW51bGx8fHh0PT09MzR8fHh0PT09Mzl8fHh0PT09NjB8fHh0PT09NjF8fHh0PT09OTY/Zih4dCk6eHQ9PT00N3x8eHQ9PT02Mnx8cHAoeHQpP1goeHQpOihpLmNvbnN1bWUoeHQpLEl0KX1mdW5jdGlvbiBPdCh4dCl7cmV0dXJuIHh0PT09NDd8fHh0PT09NjJ8fHBwKHh0KT9YKHh0KTpmKHh0KX1mdW5jdGlvbiBCdCh4dCl7cmV0dXJuIHh0PT09NjI/KGkuY29uc3VtZSh4dCksaS5leGl0KCJodG1sVGV4dERhdGEiKSxpLmV4aXQoImh0bWxUZXh0IiksYSk6Zih4dCl9ZnVuY3Rpb24gRXQoeHQpe3JldHVybiBpLmV4aXQoImh0bWxUZXh0RGF0YSIpLGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoeHQpLGkuZXhpdCgibGluZUVuZGluZyIpLFp9ZnVuY3Rpb24gWih4dCl7cmV0dXJuIFdjKHh0KT9pbChpLEN0LCJsaW5lUHJlZml4IixwLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpKHh0KTpDdCh4dCl9ZnVuY3Rpb24gQ3QoeHQpe3JldHVybiBpLmVudGVyKCJodG1sVGV4dERhdGEiKSxiKHh0KX19Y29uc3QgTTB0PXtuYW1lOiJsYWJlbEVuZCIsdG9rZW5pemU6TWplLHJlc29sdmVUbzpMamUscmVzb2x2ZUFsbDpBamV9LENqZT17dG9rZW5pemU6RGplfSxfamU9e3Rva2VuaXplOklqZX0sU2plPXt0b2tlbml6ZTpPamV9O2Z1bmN0aW9uIEFqZShpKXtsZXQgYT0tMTtmb3IoOysrYTxpLmxlbmd0aDspe2NvbnN0IGY9aVthXVsxXTsoZi50eXBlPT09ImxhYmVsSW1hZ2UifHxmLnR5cGU9PT0ibGFiZWxMaW5rInx8Zi50eXBlPT09ImxhYmVsRW5kIikmJihpLnNwbGljZShhKzEsZi50eXBlPT09ImxhYmVsSW1hZ2UiPzQ6MiksZi50eXBlPSJkYXRhIixhKyspfXJldHVybiBpfWZ1bmN0aW9uIExqZShpLGEpe2xldCBmPWkubGVuZ3RoLHA9MCx3LG0sYixFO2Zvcig7Zi0tOylpZih3PWlbZl1bMV0sbSl7aWYody50eXBlPT09ImxpbmsifHx3LnR5cGU9PT0ibGFiZWxMaW5rIiYmdy5faW5hY3RpdmUpYnJlYWs7aVtmXVswXT09PSJlbnRlciImJncudHlwZT09PSJsYWJlbExpbmsiJiYody5faW5hY3RpdmU9ITApfWVsc2UgaWYoYil7aWYoaVtmXVswXT09PSJlbnRlciImJih3LnR5cGU9PT0ibGFiZWxJbWFnZSJ8fHcudHlwZT09PSJsYWJlbExpbmsiKSYmIXcuX2JhbGFuY2VkJiYobT1mLHcudHlwZSE9PSJsYWJlbExpbmsiKSl7cD0yO2JyZWFrfX1lbHNlIHcudHlwZT09PSJsYWJlbEVuZCImJihiPWYpO2NvbnN0IF89e3R5cGU6aVttXVsxXS50eXBlPT09ImxhYmVsTGluayI/ImxpbmsiOiJpbWFnZSIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW21dWzFdLnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxpW2kubGVuZ3RoLTFdWzFdLmVuZCl9LEE9e3R5cGU6ImxhYmVsIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbbV1bMV0uc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbYl1bMV0uZW5kKX0sST17dHlwZToibGFiZWxUZXh0IixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbbStwKzJdWzFdLmVuZCksZW5kOk9iamVjdC5hc3NpZ24oe30saVtiLTJdWzFdLnN0YXJ0KX07cmV0dXJuIEU9W1siZW50ZXIiLF8sYV0sWyJlbnRlciIsQSxhXV0sRT1zdyhFLGkuc2xpY2UobSsxLG0rcCszKSksRT1zdyhFLFtbImVudGVyIixJLGFdXSksRT1zdyhFLF8wdChhLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCxpLnNsaWNlKG0rcCs0LGItMyksYSkpLEU9c3coRSxbWyJleGl0IixJLGFdLGlbYi0yXSxpW2ItMV0sWyJleGl0IixBLGFdXSksRT1zdyhFLGkuc2xpY2UoYisxKSksRT1zdyhFLFtbImV4aXQiLF8sYV1dKSxtMyhpLG0saS5sZW5ndGgsRSksaX1mdW5jdGlvbiBNamUoaSxhLGYpe2NvbnN0IHA9dGhpcztsZXQgdz1wLmV2ZW50cy5sZW5ndGgsbSxiO2Zvcig7dy0tOylpZigocC5ldmVudHNbd11bMV0udHlwZT09PSJsYWJlbEltYWdlInx8cC5ldmVudHNbd11bMV0udHlwZT09PSJsYWJlbExpbmsiKSYmIXAuZXZlbnRzW3ddWzFdLl9iYWxhbmNlZCl7bT1wLmV2ZW50c1t3XVsxXTticmVha31yZXR1cm4gRTtmdW5jdGlvbiBFKE4pe3JldHVybiBtP20uX2luYWN0aXZlP0IoTik6KGI9cC5wYXJzZXIuZGVmaW5lZC5pbmNsdWRlcyhvTChwLnNsaWNlU2VyaWFsaXplKHtzdGFydDptLmVuZCxlbmQ6cC5ub3coKX0pKSksaS5lbnRlcigibGFiZWxFbmQiKSxpLmVudGVyKCJsYWJlbE1hcmtlciIpLGkuY29uc3VtZShOKSxpLmV4aXQoImxhYmVsTWFya2VyIiksaS5leGl0KCJsYWJlbEVuZCIpLF8pOmYoTil9ZnVuY3Rpb24gXyhOKXtyZXR1cm4gTj09PTQwP2kuYXR0ZW1wdChDamUsSSxiP0k6QikoTik6Tj09PTkxP2kuYXR0ZW1wdChfamUsSSxiP0E6QikoTik6Yj9JKE4pOkIoTil9ZnVuY3Rpb24gQShOKXtyZXR1cm4gaS5hdHRlbXB0KFNqZSxJLEIpKE4pfWZ1bmN0aW9uIEkoTil7cmV0dXJuIGEoTil9ZnVuY3Rpb24gQihOKXtyZXR1cm4gbS5fYmFsYW5jZWQ9ITAsZihOKX19ZnVuY3Rpb24gRGplKGksYSxmKXtyZXR1cm4gcDtmdW5jdGlvbiBwKEIpe3JldHVybiBpLmVudGVyKCJyZXNvdXJjZSIpLGkuZW50ZXIoInJlc291cmNlTWFya2VyIiksaS5jb25zdW1lKEIpLGkuZXhpdCgicmVzb3VyY2VNYXJrZXIiKSx3fWZ1bmN0aW9uIHcoQil7cmV0dXJuIHBwKEIpP1RGKGksbSkoQik6bShCKX1mdW5jdGlvbiBtKEIpe3JldHVybiBCPT09NDE/SShCKTpZTnQoaSxiLEUsInJlc291cmNlRGVzdGluYXRpb24iLCJyZXNvdXJjZURlc3RpbmF0aW9uTGl0ZXJhbCIsInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsTWFya2VyIiwicmVzb3VyY2VEZXN0aW5hdGlvblJhdyIsInJlc291cmNlRGVzdGluYXRpb25TdHJpbmciLDMyKShCKX1mdW5jdGlvbiBiKEIpe3JldHVybiBwcChCKT9URihpLF8pKEIpOkkoQil9ZnVuY3Rpb24gRShCKXtyZXR1cm4gZihCKX1mdW5jdGlvbiBfKEIpe3JldHVybiBCPT09MzR8fEI9PT0zOXx8Qj09PTQwP1hOdChpLEEsZiwicmVzb3VyY2VUaXRsZSIsInJlc291cmNlVGl0bGVNYXJrZXIiLCJyZXNvdXJjZVRpdGxlU3RyaW5nIikoQik6SShCKX1mdW5jdGlvbiBBKEIpe3JldHVybiBwcChCKT9URihpLEkpKEIpOkkoQil9ZnVuY3Rpb24gSShCKXtyZXR1cm4gQj09PTQxPyhpLmVudGVyKCJyZXNvdXJjZU1hcmtlciIpLGkuY29uc3VtZShCKSxpLmV4aXQoInJlc291cmNlTWFya2VyIiksaS5leGl0KCJyZXNvdXJjZSIpLGEpOmYoQil9fWZ1bmN0aW9uIElqZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiB3O2Z1bmN0aW9uIHcoRSl7cmV0dXJuIEtOdC5jYWxsKHAsaSxtLGIsInJlZmVyZW5jZSIsInJlZmVyZW5jZU1hcmtlciIsInJlZmVyZW5jZVN0cmluZyIpKEUpfWZ1bmN0aW9uIG0oRSl7cmV0dXJuIHAucGFyc2VyLmRlZmluZWQuaW5jbHVkZXMob0wocC5zbGljZVNlcmlhbGl6ZShwLmV2ZW50c1twLmV2ZW50cy5sZW5ndGgtMV1bMV0pLnNsaWNlKDEsLTEpKSk/YShFKTpmKEUpfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIGYoRSl9fWZ1bmN0aW9uIE9qZShpLGEsZil7cmV0dXJuIHA7ZnVuY3Rpb24gcChtKXtyZXR1cm4gaS5lbnRlcigicmVmZXJlbmNlIiksaS5lbnRlcigicmVmZXJlbmNlTWFya2VyIiksaS5jb25zdW1lKG0pLGkuZXhpdCgicmVmZXJlbmNlTWFya2VyIiksd31mdW5jdGlvbiB3KG0pe3JldHVybiBtPT09OTM/KGkuZW50ZXIoInJlZmVyZW5jZU1hcmtlciIpLGkuY29uc3VtZShtKSxpLmV4aXQoInJlZmVyZW5jZU1hcmtlciIpLGkuZXhpdCgicmVmZXJlbmNlIiksYSk6ZihtKX19Y29uc3QgUGplPXtuYW1lOiJsYWJlbFN0YXJ0SW1hZ2UiLHRva2VuaXplOkZqZSxyZXNvbHZlQWxsOk0wdC5yZXNvbHZlQWxsfTtmdW5jdGlvbiBGamUoaSxhLGYpe2NvbnN0IHA9dGhpcztyZXR1cm4gdztmdW5jdGlvbiB3KEUpe3JldHVybiBpLmVudGVyKCJsYWJlbEltYWdlIiksaS5lbnRlcigibGFiZWxJbWFnZU1hcmtlciIpLGkuY29uc3VtZShFKSxpLmV4aXQoImxhYmVsSW1hZ2VNYXJrZXIiKSxtfWZ1bmN0aW9uIG0oRSl7cmV0dXJuIEU9PT05MT8oaS5lbnRlcigibGFiZWxNYXJrZXIiKSxpLmNvbnN1bWUoRSksaS5leGl0KCJsYWJlbE1hcmtlciIpLGkuZXhpdCgibGFiZWxJbWFnZSIpLGIpOmYoRSl9ZnVuY3Rpb24gYihFKXtyZXR1cm4gRT09PTk0JiYiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCJpbiBwLnBhcnNlci5jb25zdHJ1Y3RzP2YoRSk6YShFKX19Y29uc3QgTmplPXtuYW1lOiJsYWJlbFN0YXJ0TGluayIsdG9rZW5pemU6QmplLHJlc29sdmVBbGw6TTB0LnJlc29sdmVBbGx9O2Z1bmN0aW9uIEJqZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiB3O2Z1bmN0aW9uIHcoYil7cmV0dXJuIGkuZW50ZXIoImxhYmVsTGluayIpLGkuZW50ZXIoImxhYmVsTWFya2VyIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGFiZWxNYXJrZXIiKSxpLmV4aXQoImxhYmVsTGluayIpLG19ZnVuY3Rpb24gbShiKXtyZXR1cm4gYj09PTk0JiYiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCJpbiBwLnBhcnNlci5jb25zdHJ1Y3RzP2YoYik6YShiKX19Y29uc3QgRDB0PXtuYW1lOiJsaW5lRW5kaW5nIix0b2tlbml6ZTpSamV9O2Z1bmN0aW9uIFJqZShpLGEpe3JldHVybiBmO2Z1bmN0aW9uIGYocCl7cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUocCksaS5leGl0KCJsaW5lRW5kaW5nIiksaWwoaSxhLCJsaW5lUHJlZml4Iil9fWNvbnN0IHhZPXtuYW1lOiJ0aGVtYXRpY0JyZWFrIix0b2tlbml6ZTpqamV9O2Z1bmN0aW9uIGpqZShpLGEsZil7bGV0IHA9MCx3O3JldHVybiBtO2Z1bmN0aW9uIG0oQSl7cmV0dXJuIGkuZW50ZXIoInRoZW1hdGljQnJlYWsiKSxiKEEpfWZ1bmN0aW9uIGIoQSl7cmV0dXJuIHc9QSxFKEEpfWZ1bmN0aW9uIEUoQSl7cmV0dXJuIEE9PT13PyhpLmVudGVyKCJ0aGVtYXRpY0JyZWFrU2VxdWVuY2UiKSxfKEEpKTpwPj0zJiYoQT09PW51bGx8fHhhKEEpKT8oaS5leGl0KCJ0aGVtYXRpY0JyZWFrIiksYShBKSk6ZihBKX1mdW5jdGlvbiBfKEEpe3JldHVybiBBPT09dz8oaS5jb25zdW1lKEEpLHArKyxfKTooaS5leGl0KCJ0aGVtYXRpY0JyZWFrU2VxdWVuY2UiKSxXYyhBKT9pbChpLEUsIndoaXRlc3BhY2UiKShBKTpFKEEpKX19Y29uc3QgYnA9e25hbWU6Imxpc3QiLHRva2VuaXplOnFqZSxjb250aW51YXRpb246e3Rva2VuaXplOkhqZX0sZXhpdDpHamV9LCRqZT17dG9rZW5pemU6VWplLHBhcnRpYWw6ITB9LHpqZT17dG9rZW5pemU6VmplLHBhcnRpYWw6ITB9O2Z1bmN0aW9uIHFqZShpLGEsZil7Y29uc3QgcD10aGlzLHc9cC5ldmVudHNbcC5ldmVudHMubGVuZ3RoLTFdO2xldCBtPXcmJndbMV0udHlwZT09PSJsaW5lUHJlZml4Ij93WzJdLnNsaWNlU2VyaWFsaXplKHdbMV0sITApLmxlbmd0aDowLGI9MDtyZXR1cm4gRTtmdW5jdGlvbiBFKFIpe2NvbnN0IHo9cC5jb250YWluZXJTdGF0ZS50eXBlfHwoUj09PTQyfHxSPT09NDN8fFI9PT00NT8ibGlzdFVub3JkZXJlZCI6Imxpc3RPcmRlcmVkIik7aWYoej09PSJsaXN0VW5vcmRlcmVkIj8hcC5jb250YWluZXJTdGF0ZS5tYXJrZXJ8fFI9PT1wLmNvbnRhaW5lclN0YXRlLm1hcmtlcjpDMHQoUikpe2lmKHAuY29udGFpbmVyU3RhdGUudHlwZXx8KHAuY29udGFpbmVyU3RhdGUudHlwZT16LGkuZW50ZXIoeix7X2NvbnRhaW5lcjohMH0pKSx6PT09Imxpc3RVbm9yZGVyZWQiKXJldHVybiBpLmVudGVyKCJsaXN0SXRlbVByZWZpeCIpLFI9PT00Mnx8Uj09PTQ1P2kuY2hlY2soeFksZixBKShSKTpBKFIpO2lmKCFwLmludGVycnVwdHx8Uj09PTQ5KXJldHVybiBpLmVudGVyKCJsaXN0SXRlbVByZWZpeCIpLGkuZW50ZXIoImxpc3RJdGVtVmFsdWUiKSxfKFIpfXJldHVybiBmKFIpfWZ1bmN0aW9uIF8oUil7cmV0dXJuIEMwdChSKSYmKytiPDEwPyhpLmNvbnN1bWUoUiksXyk6KCFwLmludGVycnVwdHx8YjwyKSYmKHAuY29udGFpbmVyU3RhdGUubWFya2VyP1I9PT1wLmNvbnRhaW5lclN0YXRlLm1hcmtlcjpSPT09NDF8fFI9PT00Nik/KGkuZXhpdCgibGlzdEl0ZW1WYWx1ZSIpLEEoUikpOmYoUil9ZnVuY3Rpb24gQShSKXtyZXR1cm4gaS5lbnRlcigibGlzdEl0ZW1NYXJrZXIiKSxpLmNvbnN1bWUoUiksaS5leGl0KCJsaXN0SXRlbU1hcmtlciIpLHAuY29udGFpbmVyU3RhdGUubWFya2VyPXAuY29udGFpbmVyU3RhdGUubWFya2VyfHxSLGkuY2hlY2soeVkscC5pbnRlcnJ1cHQ/ZjpJLGkuYXR0ZW1wdCgkamUsTixCKSl9ZnVuY3Rpb24gSShSKXtyZXR1cm4gcC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPSEwLG0rKyxOKFIpfWZ1bmN0aW9uIEIoUil7cmV0dXJuIFdjKFIpPyhpLmVudGVyKCJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiKSxpLmNvbnN1bWUoUiksaS5leGl0KCJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiKSxOKTpmKFIpfWZ1bmN0aW9uIE4oUil7cmV0dXJuIHAuY29udGFpbmVyU3RhdGUuc2l6ZT1tK3Auc2xpY2VTZXJpYWxpemUoaS5leGl0KCJsaXN0SXRlbVByZWZpeCIpLCEwKS5sZW5ndGgsYShSKX19ZnVuY3Rpb24gSGplKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIHAuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz12b2lkIDAsaS5jaGVjayh5WSx3LG0pO2Z1bmN0aW9uIHcoRSl7cmV0dXJuIHAuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXM9cC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lc3x8cC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lLGlsKGksYSwibGlzdEl0ZW1JbmRlbnQiLHAuY29udGFpbmVyU3RhdGUuc2l6ZSsxKShFKX1mdW5jdGlvbiBtKEUpe3JldHVybiBwLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzfHwhV2MoRSk/KHAuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXM9dm9pZCAwLHAuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZT12b2lkIDAsYihFKSk6KHAuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXM9dm9pZCAwLHAuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZT12b2lkIDAsaS5hdHRlbXB0KHpqZSxhLGIpKEUpKX1mdW5jdGlvbiBiKEUpe3JldHVybiBwLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3c9ITAscC5pbnRlcnJ1cHQ9dm9pZCAwLGlsKGksaS5hdHRlbXB0KGJwLGEsZiksImxpbmVQcmVmaXgiLHAucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCkoRSl9fWZ1bmN0aW9uIFZqZShpLGEsZil7Y29uc3QgcD10aGlzO3JldHVybiBpbChpLHcsImxpc3RJdGVtSW5kZW50IixwLmNvbnRhaW5lclN0YXRlLnNpemUrMSk7ZnVuY3Rpb24gdyhtKXtjb25zdCBiPXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gYiYmYlsxXS50eXBlPT09Imxpc3RJdGVtSW5kZW50IiYmYlsyXS5zbGljZVNlcmlhbGl6ZShiWzFdLCEwKS5sZW5ndGg9PT1wLmNvbnRhaW5lclN0YXRlLnNpemU/YShtKTpmKG0pfX1mdW5jdGlvbiBHamUoaSl7aS5leGl0KHRoaXMuY29udGFpbmVyU3RhdGUudHlwZSl9ZnVuY3Rpb24gVWplKGksYSxmKXtjb25zdCBwPXRoaXM7cmV0dXJuIGlsKGksdywibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIixwLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQrMSk7ZnVuY3Rpb24gdyhtKXtjb25zdCBiPXAuZXZlbnRzW3AuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4hV2MobSkmJmImJmJbMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiP2EobSk6ZihtKX19Y29uc3QgWk50PXtuYW1lOiJzZXRleHRVbmRlcmxpbmUiLHRva2VuaXplOllqZSxyZXNvbHZlVG86V2plfTtmdW5jdGlvbiBXamUoaSxhKXtsZXQgZj1pLmxlbmd0aCxwLHcsbTtmb3IoO2YtLTspaWYoaVtmXVswXT09PSJlbnRlciIpe2lmKGlbZl1bMV0udHlwZT09PSJjb250ZW50Iil7cD1mO2JyZWFrfWlbZl1bMV0udHlwZT09PSJwYXJhZ3JhcGgiJiYodz1mKX1lbHNlIGlbZl1bMV0udHlwZT09PSJjb250ZW50IiYmaS5zcGxpY2UoZiwxKSwhbSYmaVtmXVsxXS50eXBlPT09ImRlZmluaXRpb24iJiYobT1mKTtjb25zdCBiPXt0eXBlOiJzZXRleHRIZWFkaW5nIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbd11bMV0uc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbaS5sZW5ndGgtMV1bMV0uZW5kKX07cmV0dXJuIGlbd11bMV0udHlwZT0ic2V0ZXh0SGVhZGluZ1RleHQiLG0/KGkuc3BsaWNlKHcsMCxbImVudGVyIixiLGFdKSxpLnNwbGljZShtKzEsMCxbImV4aXQiLGlbcF1bMV0sYV0pLGlbcF1bMV0uZW5kPU9iamVjdC5hc3NpZ24oe30saVttXVsxXS5lbmQpKTppW3BdWzFdPWIsaS5wdXNoKFsiZXhpdCIsYixhXSksaX1mdW5jdGlvbiBZamUoaSxhLGYpe2NvbnN0IHA9dGhpcztsZXQgdztyZXR1cm4gbTtmdW5jdGlvbiBtKEEpe2xldCBJPXAuZXZlbnRzLmxlbmd0aCxCO2Zvcig7SS0tOylpZihwLmV2ZW50c1tJXVsxXS50eXBlIT09ImxpbmVFbmRpbmciJiZwLmV2ZW50c1tJXVsxXS50eXBlIT09ImxpbmVQcmVmaXgiJiZwLmV2ZW50c1tJXVsxXS50eXBlIT09ImNvbnRlbnQiKXtCPXAuZXZlbnRzW0ldWzFdLnR5cGU9PT0icGFyYWdyYXBoIjticmVha31yZXR1cm4hcC5wYXJzZXIubGF6eVtwLm5vdygpLmxpbmVdJiYocC5pbnRlcnJ1cHR8fEIpPyhpLmVudGVyKCJzZXRleHRIZWFkaW5nTGluZSIpLHc9QSxiKEEpKTpmKEEpfWZ1bmN0aW9uIGIoQSl7cmV0dXJuIGkuZW50ZXIoInNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2UiKSxFKEEpfWZ1bmN0aW9uIEUoQSl7cmV0dXJuIEE9PT13PyhpLmNvbnN1bWUoQSksRSk6KGkuZXhpdCgic2V0ZXh0SGVhZGluZ0xpbmVTZXF1ZW5jZSIpLFdjKEEpP2lsKGksXywibGluZVN1ZmZpeCIpKEEpOl8oQSkpfWZ1bmN0aW9uIF8oQSl7cmV0dXJuIEE9PT1udWxsfHx4YShBKT8oaS5leGl0KCJzZXRleHRIZWFkaW5nTGluZSIpLGEoQSkpOmYoQSl9fWNvbnN0IEtqZT17dG9rZW5pemU6WGplfTtmdW5jdGlvbiBYamUoaSl7Y29uc3QgYT10aGlzLGY9aS5hdHRlbXB0KHlZLHAsaS5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvd0luaXRpYWwsdyxpbChpLGkuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csdyxpLmF0dGVtcHQoZWplLHcpKSwibGluZVByZWZpeCIpKSk7cmV0dXJuIGY7ZnVuY3Rpb24gcChtKXtpZihtPT09bnVsbCl7aS5jb25zdW1lKG0pO3JldHVybn1yZXR1cm4gaS5lbnRlcigibGluZUVuZGluZ0JsYW5rIiksaS5jb25zdW1lKG0pLGkuZXhpdCgibGluZUVuZGluZ0JsYW5rIiksYS5jdXJyZW50Q29uc3RydWN0PXZvaWQgMCxmfWZ1bmN0aW9uIHcobSl7aWYobT09PW51bGwpe2kuY29uc3VtZShtKTtyZXR1cm59cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUobSksaS5leGl0KCJsaW5lRW5kaW5nIiksYS5jdXJyZW50Q29uc3RydWN0PXZvaWQgMCxmfX1jb25zdCBRamU9e3Jlc29sdmVBbGw6dEJ0KCl9LFpqZT1KTnQoInN0cmluZyIpLEpqZT1KTnQoInRleHQiKTtmdW5jdGlvbiBKTnQoaSl7cmV0dXJue3Rva2VuaXplOmEscmVzb2x2ZUFsbDp0QnQoaT09PSJ0ZXh0Ij90JGU6dm9pZCAwKX07ZnVuY3Rpb24gYShmKXtjb25zdCBwPXRoaXMsdz10aGlzLnBhcnNlci5jb25zdHJ1Y3RzW2ldLG09Zi5hdHRlbXB0KHcsYixFKTtyZXR1cm4gYjtmdW5jdGlvbiBiKEkpe3JldHVybiBBKEkpP20oSSk6RShJKX1mdW5jdGlvbiBFKEkpe2lmKEk9PT1udWxsKXtmLmNvbnN1bWUoSSk7cmV0dXJufXJldHVybiBmLmVudGVyKCJkYXRhIiksZi5jb25zdW1lKEkpLF99ZnVuY3Rpb24gXyhJKXtyZXR1cm4gQShJKT8oZi5leGl0KCJkYXRhIiksbShJKSk6KGYuY29uc3VtZShJKSxfKX1mdW5jdGlvbiBBKEkpe2lmKEk9PT1udWxsKXJldHVybiEwO2NvbnN0IEI9d1tJXTtsZXQgTj0tMTtpZihCKWZvcig7KytOPEIubGVuZ3RoOyl7Y29uc3QgUj1CW05dO2lmKCFSLnByZXZpb3VzfHxSLnByZXZpb3VzLmNhbGwocCxwLnByZXZpb3VzKSlyZXR1cm4hMH1yZXR1cm4hMX19fWZ1bmN0aW9uIHRCdChpKXtyZXR1cm4gYTtmdW5jdGlvbiBhKGYscCl7bGV0IHc9LTEsbTtmb3IoOysrdzw9Zi5sZW5ndGg7KW09PT12b2lkIDA/Zlt3XSYmZlt3XVsxXS50eXBlPT09ImRhdGEiJiYobT13LHcrKyk6KCFmW3ddfHxmW3ddWzFdLnR5cGUhPT0iZGF0YSIpJiYodyE9PW0rMiYmKGZbbV1bMV0uZW5kPWZbdy0xXVsxXS5lbmQsZi5zcGxpY2UobSsyLHctbS0yKSx3PW0rMiksbT12b2lkIDApO3JldHVybiBpP2koZixwKTpmfX1mdW5jdGlvbiB0JGUoaSxhKXtsZXQgZj0wO2Zvcig7KytmPD1pLmxlbmd0aDspaWYoKGY9PT1pLmxlbmd0aHx8aVtmXVsxXS50eXBlPT09ImxpbmVFbmRpbmciKSYmaVtmLTFdWzFdLnR5cGU9PT0iZGF0YSIpe2NvbnN0IHA9aVtmLTFdWzFdLHc9YS5zbGljZVN0cmVhbShwKTtsZXQgbT13Lmxlbmd0aCxiPS0xLEU9MCxfO2Zvcig7bS0tOyl7Y29uc3QgQT13W21dO2lmKHR5cGVvZiBBPT0ic3RyaW5nIil7Zm9yKGI9QS5sZW5ndGg7QS5jaGFyQ29kZUF0KGItMSk9PT0zMjspRSsrLGItLTtpZihiKWJyZWFrO2I9LTF9ZWxzZSBpZihBPT09LTIpXz0hMCxFKys7ZWxzZSBpZihBIT09LTEpe20rKzticmVha319aWYoRSl7Y29uc3QgQT17dHlwZTpmPT09aS5sZW5ndGh8fF98fEU8Mj8ibGluZVN1ZmZpeCI6ImhhcmRCcmVha1RyYWlsaW5nIixzdGFydDp7bGluZTpwLmVuZC5saW5lLGNvbHVtbjpwLmVuZC5jb2x1bW4tRSxvZmZzZXQ6cC5lbmQub2Zmc2V0LUUsX2luZGV4OnAuc3RhcnQuX2luZGV4K20sX2J1ZmZlckluZGV4Om0/YjpwLnN0YXJ0Ll9idWZmZXJJbmRleCtifSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxwLmVuZCl9O3AuZW5kPU9iamVjdC5hc3NpZ24oe30sQS5zdGFydCkscC5zdGFydC5vZmZzZXQ9PT1wLmVuZC5vZmZzZXQ/T2JqZWN0LmFzc2lnbihwLEEpOihpLnNwbGljZShmLDAsWyJlbnRlciIsQSxhXSxbImV4aXQiLEEsYV0pLGYrPTIpfWYrK31yZXR1cm4gaX1mdW5jdGlvbiBlJGUoaSxhLGYpe2xldCBwPU9iamVjdC5hc3NpZ24oZj9PYmplY3QuYXNzaWduKHt9LGYpOntsaW5lOjEsY29sdW1uOjEsb2Zmc2V0OjB9LHtfaW5kZXg6MCxfYnVmZmVySW5kZXg6LTF9KTtjb25zdCB3PXt9LG09W107bGV0IGI9W10sRT1bXTtjb25zdCBfPXtjb25zdW1lOmF0LGVudGVyOmJ0LGV4aXQ6bXQsYXR0ZW1wdDp1dCh5dCksY2hlY2s6dXQoZnQpLGludGVycnVwdDp1dChmdCx7aW50ZXJydXB0OiEwfSl9LEE9e3ByZXZpb3VzOm51bGwsY29kZTpudWxsLGNvbnRhaW5lclN0YXRlOnt9LGV2ZW50czpbXSxwYXJzZXI6aSxzbGljZVN0cmVhbTpSLHNsaWNlU2VyaWFsaXplOk4sbm93OnosZGVmaW5lU2tpcDpXLHdyaXRlOkJ9O2xldCBJPWEudG9rZW5pemUuY2FsbChBLF8pO3JldHVybiBhLnJlc29sdmVBbGwmJm0ucHVzaChhKSxBO2Z1bmN0aW9uIEIoVSl7cmV0dXJuIGI9c3coYixVKSxldCgpLGJbYi5sZW5ndGgtMV0hPT1udWxsP1tdOih2dChhLDApLEEuZXZlbnRzPV8wdChtLEEuZXZlbnRzLEEpLEEuZXZlbnRzKX1mdW5jdGlvbiBOKFUsVHQpe3JldHVybiByJGUoUihVKSxUdCl9ZnVuY3Rpb24gUihVKXtyZXR1cm4gbiRlKGIsVSl9ZnVuY3Rpb24geigpe2NvbnN0e2xpbmU6VSxjb2x1bW46VHQsb2Zmc2V0Om50LF9pbmRleDpJdCxfYnVmZmVySW5kZXg6T3R9PXA7cmV0dXJue2xpbmU6VSxjb2x1bW46VHQsb2Zmc2V0Om50LF9pbmRleDpJdCxfYnVmZmVySW5kZXg6T3R9fWZ1bmN0aW9uIFcoVSl7d1tVLmxpbmVdPVUuY29sdW1uLHB0KCl9ZnVuY3Rpb24gZXQoKXtsZXQgVTtmb3IoO3AuX2luZGV4PGIubGVuZ3RoOyl7Y29uc3QgVHQ9YltwLl9pbmRleF07aWYodHlwZW9mIFR0PT0ic3RyaW5nIilmb3IoVT1wLl9pbmRleCxwLl9idWZmZXJJbmRleDwwJiYocC5fYnVmZmVySW5kZXg9MCk7cC5faW5kZXg9PT1VJiZwLl9idWZmZXJJbmRleDxUdC5sZW5ndGg7KXN0KFR0LmNoYXJDb2RlQXQocC5fYnVmZmVySW5kZXgpKTtlbHNlIHN0KFR0KX19ZnVuY3Rpb24gc3QoVSl7ST1JKFUpfWZ1bmN0aW9uIGF0KFUpe3hhKFUpPyhwLmxpbmUrKyxwLmNvbHVtbj0xLHAub2Zmc2V0Kz1VPT09LTM/MjoxLHB0KCkpOlUhPT0tMSYmKHAuY29sdW1uKysscC5vZmZzZXQrKykscC5fYnVmZmVySW5kZXg8MD9wLl9pbmRleCsrOihwLl9idWZmZXJJbmRleCsrLHAuX2J1ZmZlckluZGV4PT09YltwLl9pbmRleF0ubGVuZ3RoJiYocC5fYnVmZmVySW5kZXg9LTEscC5faW5kZXgrKykpLEEucHJldmlvdXM9VX1mdW5jdGlvbiBidChVLFR0KXtjb25zdCBudD1UdHx8e307cmV0dXJuIG50LnR5cGU9VSxudC5zdGFydD16KCksQS5ldmVudHMucHVzaChbImVudGVyIixudCxBXSksRS5wdXNoKG50KSxudH1mdW5jdGlvbiBtdChVKXtjb25zdCBUdD1FLnBvcCgpO3JldHVybiBUdC5lbmQ9eigpLEEuZXZlbnRzLnB1c2goWyJleGl0IixUdCxBXSksVHR9ZnVuY3Rpb24geXQoVSxUdCl7dnQoVSxUdC5mcm9tKX1mdW5jdGlvbiBmdChVLFR0KXtUdC5yZXN0b3JlKCl9ZnVuY3Rpb24gdXQoVSxUdCl7cmV0dXJuIG50O2Z1bmN0aW9uIG50KEl0LE90LEJ0KXtsZXQgRXQsWixDdCx4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShJdCk/TGUoSXQpOiJ0b2tlbml6ZSJpbiBJdD9MZShbSXRdKTpIdChJdCk7ZnVuY3Rpb24gSHQobWUpe3JldHVybiBWZTtmdW5jdGlvbiBWZShZZSl7Y29uc3QgY2U9WWUhPT1udWxsJiZtZVtZZV0sa2U9WWUhPT1udWxsJiZtZS5udWxsLHp0PVsuLi5BcnJheS5pc0FycmF5KGNlKT9jZTpjZT9bY2VdOltdLC4uLkFycmF5LmlzQXJyYXkoa2UpP2tlOmtlP1trZV06W11dO3JldHVybiBMZSh6dCkoWWUpfX1mdW5jdGlvbiBMZShtZSl7cmV0dXJuIEV0PW1lLFo9MCxtZS5sZW5ndGg9PT0wP0J0OkZ0KG1lW1pdKX1mdW5jdGlvbiBGdChtZSl7cmV0dXJuIFZlO2Z1bmN0aW9uIFZlKFllKXtyZXR1cm4geHQ9WCgpLEN0PW1lLG1lLnBhcnRpYWx8fChBLmN1cnJlbnRDb25zdHJ1Y3Q9bWUpLG1lLm5hbWUmJkEucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKG1lLm5hbWUpP1NlKCk6bWUudG9rZW5pemUuY2FsbChUdD9PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoQSksVHQpOkEsXyxnbixTZSkoWWUpfX1mdW5jdGlvbiBnbihtZSl7cmV0dXJuIFUoQ3QseHQpLE90fWZ1bmN0aW9uIFNlKG1lKXtyZXR1cm4geHQucmVzdG9yZSgpLCsrWjxFdC5sZW5ndGg/RnQoRXRbWl0pOkJ0fX19ZnVuY3Rpb24gdnQoVSxUdCl7VS5yZXNvbHZlQWxsJiYhbS5pbmNsdWRlcyhVKSYmbS5wdXNoKFUpLFUucmVzb2x2ZSYmbTMoQS5ldmVudHMsVHQsQS5ldmVudHMubGVuZ3RoLVR0LFUucmVzb2x2ZShBLmV2ZW50cy5zbGljZShUdCksQSkpLFUucmVzb2x2ZVRvJiYoQS5ldmVudHM9VS5yZXNvbHZlVG8oQS5ldmVudHMsQSkpfWZ1bmN0aW9uIFgoKXtjb25zdCBVPXooKSxUdD1BLnByZXZpb3VzLG50PUEuY3VycmVudENvbnN0cnVjdCxJdD1BLmV2ZW50cy5sZW5ndGgsT3Q9QXJyYXkuZnJvbShFKTtyZXR1cm57cmVzdG9yZTpCdCxmcm9tOkl0fTtmdW5jdGlvbiBCdCgpe3A9VSxBLnByZXZpb3VzPVR0LEEuY3VycmVudENvbnN0cnVjdD1udCxBLmV2ZW50cy5sZW5ndGg9SXQsRT1PdCxwdCgpfX1mdW5jdGlvbiBwdCgpe3AubGluZSBpbiB3JiZwLmNvbHVtbjwyJiYocC5jb2x1bW49d1twLmxpbmVdLHAub2Zmc2V0Kz13W3AubGluZV0tMSl9fWZ1bmN0aW9uIG4kZShpLGEpe2NvbnN0IGY9YS5zdGFydC5faW5kZXgscD1hLnN0YXJ0Ll9idWZmZXJJbmRleCx3PWEuZW5kLl9pbmRleCxtPWEuZW5kLl9idWZmZXJJbmRleDtsZXQgYjtpZihmPT09dyliPVtpW2ZdLnNsaWNlKHAsbSldO2Vsc2V7aWYoYj1pLnNsaWNlKGYsdykscD4tMSl7Y29uc3QgRT1iWzBdO3R5cGVvZiBFPT0ic3RyaW5nIj9iWzBdPUUuc2xpY2UocCk6Yi5zaGlmdCgpfW0+MCYmYi5wdXNoKGlbd10uc2xpY2UoMCxtKSl9cmV0dXJuIGJ9ZnVuY3Rpb24gciRlKGksYSl7bGV0IGY9LTE7Y29uc3QgcD1bXTtsZXQgdztmb3IoOysrZjxpLmxlbmd0aDspe2NvbnN0IG09aVtmXTtsZXQgYjtpZih0eXBlb2YgbT09InN0cmluZyIpYj1tO2Vsc2Ugc3dpdGNoKG0pe2Nhc2UtNTp7Yj0iXHIiO2JyZWFrfWNhc2UtNDp7Yj1gCmA7YnJlYWt9Y2FzZS0zOntiPWBccgpgO2JyZWFrfWNhc2UtMjp7Yj1hPyIgIjoiCSI7YnJlYWt9Y2FzZS0xOntpZighYSYmdyljb250aW51ZTtiPSIgIjticmVha31kZWZhdWx0OmI9U3RyaW5nLmZyb21DaGFyQ29kZShtKX13PW09PT0tMixwLnB1c2goYil9cmV0dXJuIHAuam9pbigiIil9Y29uc3QgaSRlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhdHRlbnRpb25NYXJrZXJzOntudWxsOls0Miw5NV19LGNvbnRlbnRJbml0aWFsOns5MTphamV9LGRpc2FibGU6e251bGw6W119LGRvY3VtZW50Ons0MjpicCw0MzpicCw0NTpicCw0ODpicCw0OTpicCw1MDpicCw1MTpicCw1MjpicCw1MzpicCw1NDpicCw1NTpicCw1NjpicCw1NzpicCw2Mjp6TnR9LGZsb3c6ezM1OmZqZSw0Mjp4WSw0NTpbWk50LHhZXSw2MDpiamUsNjE6Wk50LDk1OnhZLDk2OlVOdCwxMjY6VU50fSxmbG93SW5pdGlhbDp7Wy0yXTpMMHQsWy0xXTpMMHQsMzI6TDB0fSxpbnNpZGVTcGFuOntudWxsOltTMHQsUWplXX0sc3RyaW5nOnszODpWTnQsOTI6cU50fSx0ZXh0OntbLTVdOkQwdCxbLTRdOkQwdCxbLTNdOkQwdCwzMzpQamUsMzg6Vk50LDQyOlMwdCw2MDpbQlJlLEVqZV0sOTE6TmplLDkyOltsamUscU50XSw5MzpNMHQsOTU6UzB0LDk2OlhSZX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7ZnVuY3Rpb24gcyRlKGkpe2NvbnN0IGY9eFJlKFtpJGUsLi4uKGl8fHt9KS5leHRlbnNpb25zfHxbXV0pLHA9e2RlZmluZWQ6W10sbGF6eTp7fSxjb25zdHJ1Y3RzOmYsY29udGVudDp3KE1SZSksZG9jdW1lbnQ6dyhJUmUpLGZsb3c6dyhLamUpLHN0cmluZzp3KFpqZSksdGV4dDp3KEpqZSl9O3JldHVybiBwO2Z1bmN0aW9uIHcobSl7cmV0dXJuIGI7ZnVuY3Rpb24gYihFKXtyZXR1cm4gZSRlKHAsbSxFKX19fWNvbnN0IGVCdD0vW1wwXHRcblxyXS9nO2Z1bmN0aW9uIGEkZSgpe2xldCBpPTEsYT0iIixmPSEwLHA7cmV0dXJuIHc7ZnVuY3Rpb24gdyhtLGIsRSl7Y29uc3QgXz1bXTtsZXQgQSxJLEIsTixSO2ZvcihtPWErbS50b1N0cmluZyhiKSxCPTAsYT0iIixmJiYobS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJkIrKyxmPXZvaWQgMCk7QjxtLmxlbmd0aDspe2lmKGVCdC5sYXN0SW5kZXg9QixBPWVCdC5leGVjKG0pLE49QSYmQS5pbmRleCE9PXZvaWQgMD9BLmluZGV4Om0ubGVuZ3RoLFI9bS5jaGFyQ29kZUF0KE4pLCFBKXthPW0uc2xpY2UoQik7YnJlYWt9aWYoUj09PTEwJiZCPT09TiYmcClfLnB1c2goLTMpLHA9dm9pZCAwO2Vsc2Ugc3dpdGNoKHAmJihfLnB1c2goLTUpLHA9dm9pZCAwKSxCPE4mJihfLnB1c2gobS5zbGljZShCLE4pKSxpKz1OLUIpLFIpe2Nhc2UgMDp7Xy5wdXNoKDY1NTMzKSxpKys7YnJlYWt9Y2FzZSA5Ontmb3IoST1NYXRoLmNlaWwoaS80KSo0LF8ucHVzaCgtMik7aSsrPEk7KV8ucHVzaCgtMSk7YnJlYWt9Y2FzZSAxMDp7Xy5wdXNoKC00KSxpPTE7YnJlYWt9ZGVmYXVsdDpwPSEwLGk9MX1CPU4rMX1yZXR1cm4gRSYmKHAmJl8ucHVzaCgtNSksYSYmXy5wdXNoKGEpLF8ucHVzaChudWxsKSksX319ZnVuY3Rpb24gbyRlKGkpe2Zvcig7IVdOdChpKTspO3JldHVybiBpfWZ1bmN0aW9uIG5CdChpLGEpe2NvbnN0IGY9TnVtYmVyLnBhcnNlSW50KGksYSk7cmV0dXJuIGY8OXx8Zj09PTExfHxmPjEzJiZmPDMyfHxmPjEyNiYmZjwxNjB8fGY+NTUyOTUmJmY8NTczNDR8fGY+NjQ5NzUmJmY8NjUwMDh8fChmJjY1NTM1KT09PTY1NTM1fHwoZiY2NTUzNSk9PT02NTUzNHx8Zj4xMTE0MTExPyLvv70iOlN0cmluZy5mcm9tQ2hhckNvZGUoZil9Y29uc3QgYyRlPS9cXChbIS0vOi1AWy1gey1+XSl8JigjKD86XGR7MSw3fXx4W1xkYS1mXXsxLDZ9KXxbXGRhLXpdezEsMzF9KTsvZ2k7ZnVuY3Rpb24gdSRlKGkpe3JldHVybiBpLnJlcGxhY2UoYyRlLGwkZSl9ZnVuY3Rpb24gbCRlKGksYSxmKXtpZihhKXJldHVybiBhO2lmKGYuY2hhckNvZGVBdCgwKT09PTM1KXtjb25zdCB3PWYuY2hhckNvZGVBdCgxKSxtPXc9PT0xMjB8fHc9PT04ODtyZXR1cm4gbkJ0KGYuc2xpY2UobT8yOjEpLG0/MTY6MTApfXJldHVybiBBMHQoZil8fGl9ZnVuY3Rpb24ga1koaSl7cmV0dXJuIWl8fHR5cGVvZiBpIT0ib2JqZWN0Ij8iIjoicG9zaXRpb24iaW4gaXx8InR5cGUiaW4gaT9yQnQoaS5wb3NpdGlvbik6InN0YXJ0ImluIGl8fCJlbmQiaW4gaT9yQnQoaSk6ImxpbmUiaW4gaXx8ImNvbHVtbiJpbiBpP0kwdChpKToiIn1mdW5jdGlvbiBJMHQoaSl7cmV0dXJuIGlCdChpJiZpLmxpbmUpKyI6IitpQnQoaSYmaS5jb2x1bW4pfWZ1bmN0aW9uIHJCdChpKXtyZXR1cm4gSTB0KGkmJmkuc3RhcnQpKyItIitJMHQoaSYmaS5lbmQpfWZ1bmN0aW9uIGlCdChpKXtyZXR1cm4gaSYmdHlwZW9mIGk9PSJudW1iZXIiP2k6MX1jb25zdCBzQnQ9e30uaGFzT3duUHJvcGVydHksYUJ0PWZ1bmN0aW9uKGksYSxmKXtyZXR1cm4gdHlwZW9mIGEhPSJzdHJpbmciJiYoZj1hLGE9dm9pZCAwKSxoJGUoZikobyRlKHMkZShmKS5kb2N1bWVudCgpLndyaXRlKGEkZSgpKGksYSwhMCkpKSl9O2Z1bmN0aW9uIGgkZShpKXtjb25zdCBhPXt0cmFuc2Zvcm1zOltdLGNhbkNvbnRhaW5Fb2xzOlsiZW1waGFzaXMiLCJmcmFnbWVudCIsImhlYWRpbmciLCJwYXJhZ3JhcGgiLCJzdHJvbmciXSxlbnRlcjp7YXV0b2xpbms6RShLcyksYXV0b2xpbmtQcm90b2NvbDpVLGF1dG9saW5rRW1haWw6VSxhdHhIZWFkaW5nOkUoTWUpLGJsb2NrUXVvdGU6RSh6dCksY2hhcmFjdGVyRXNjYXBlOlUsY2hhcmFjdGVyUmVmZXJlbmNlOlUsY29kZUZlbmNlZDpFKHJlKSxjb2RlRmVuY2VkRmVuY2VJbmZvOl8sY29kZUZlbmNlZEZlbmNlTWV0YTpfLGNvZGVJbmRlbnRlZDpFKHJlLF8pLGNvZGVUZXh0OkUoc2UsXyksY29kZVRleHREYXRhOlUsZGF0YTpVLGNvZGVGbG93VmFsdWU6VSxkZWZpbml0aW9uOkUoUGUpLGRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZzpfLGRlZmluaXRpb25MYWJlbFN0cmluZzpfLGRlZmluaXRpb25UaXRsZVN0cmluZzpfLGVtcGhhc2lzOkUodGUpLGhhcmRCcmVha0VzY2FwZTpFKGRlKSxoYXJkQnJlYWtUcmFpbGluZzpFKGRlKSxodG1sRmxvdzpFKG9uLF8pLGh0bWxGbG93RGF0YTpVLGh0bWxUZXh0OkUob24sXyksaHRtbFRleHREYXRhOlUsaW1hZ2U6RShuaSksbGFiZWw6XyxsaW5rOkUoS3MpLGxpc3RJdGVtOkUoZm8pLGxpc3RJdGVtVmFsdWU6eixsaXN0T3JkZXJlZDpFKHdzLFIpLGxpc3RVbm9yZGVyZWQ6RSh3cykscGFyYWdyYXBoOkUoWGkpLHJlZmVyZW5jZTpTZSxyZWZlcmVuY2VTdHJpbmc6XyxyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOl8scmVzb3VyY2VUaXRsZVN0cmluZzpfLHNldGV4dEhlYWRpbmc6RShNZSksc3Ryb25nOkUoRXIpLHRoZW1hdGljQnJlYWs6RShkaSl9LGV4aXQ6e2F0eEhlYWRpbmc6SSgpLGF0eEhlYWRpbmdTZXF1ZW5jZTp1dCxhdXRvbGluazpJKCksYXV0b2xpbmtFbWFpbDprZSxhdXRvbGlua1Byb3RvY29sOmNlLGJsb2NrUXVvdGU6SSgpLGNoYXJhY3RlckVzY2FwZVZhbHVlOlR0LGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsOlZlLGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWM6VmUsY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWU6WWUsY29kZUZlbmNlZDpJKGF0KSxjb2RlRmVuY2VkRmVuY2U6c3QsY29kZUZlbmNlZEZlbmNlSW5mbzpXLGNvZGVGZW5jZWRGZW5jZU1ldGE6ZXQsY29kZUZsb3dWYWx1ZTpUdCxjb2RlSW5kZW50ZWQ6SShidCksY29kZVRleHQ6SShFdCksY29kZVRleHREYXRhOlR0LGRhdGE6VHQsZGVmaW5pdGlvbjpJKCksZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOmZ0LGRlZmluaXRpb25MYWJlbFN0cmluZzptdCxkZWZpbml0aW9uVGl0bGVTdHJpbmc6eXQsZW1waGFzaXM6SSgpLGhhcmRCcmVha0VzY2FwZTpJKEl0KSxoYXJkQnJlYWtUcmFpbGluZzpJKEl0KSxodG1sRmxvdzpJKE90KSxodG1sRmxvd0RhdGE6VHQsaHRtbFRleHQ6SShCdCksaHRtbFRleHREYXRhOlR0LGltYWdlOkkoQ3QpLGxhYmVsOkh0LGxhYmVsVGV4dDp4dCxsaW5lRW5kaW5nOm50LGxpbms6SShaKSxsaXN0SXRlbTpJKCksbGlzdE9yZGVyZWQ6SSgpLGxpc3RVbm9yZGVyZWQ6SSgpLHBhcmFncmFwaDpJKCkscmVmZXJlbmNlU3RyaW5nOm1lLHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6TGUscmVzb3VyY2VUaXRsZVN0cmluZzpGdCxyZXNvdXJjZTpnbixzZXRleHRIZWFkaW5nOkkocHQpLHNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2U6WCxzZXRleHRIZWFkaW5nVGV4dDp2dCxzdHJvbmc6SSgpLHRoZW1hdGljQnJlYWs6SSgpfX07b0J0KGEsKGl8fHt9KS5tZGFzdEV4dGVuc2lvbnN8fFtdKTtjb25zdCBmPXt9O3JldHVybiBwO2Z1bmN0aW9uIHAoRWUpe2xldCBLbj17dHlwZToicm9vdCIsY2hpbGRyZW46W119O2NvbnN0IEhlPXtzdGFjazpbS25dLHRva2VuU3RhY2s6W10sY29uZmlnOmEsZW50ZXI6QSxleGl0OkIsYnVmZmVyOl8scmVzdW1lOk4sc2V0RGF0YTptLGdldERhdGE6Yn0sVGk9W107bGV0IHBuPS0xO2Zvcig7KytwbjxFZS5sZW5ndGg7KWlmKEVlW3BuXVsxXS50eXBlPT09Imxpc3RPcmRlcmVkInx8RWVbcG5dWzFdLnR5cGU9PT0ibGlzdFVub3JkZXJlZCIpaWYoRWVbcG5dWzBdPT09ImVudGVyIilUaS5wdXNoKHBuKTtlbHNle2NvbnN0IEVzPVRpLnBvcCgpO3BuPXcoRWUsRXMscG4pfWZvcihwbj0tMTsrK3BuPEVlLmxlbmd0aDspe2NvbnN0IEVzPWFbRWVbcG5dWzBdXTtzQnQuY2FsbChFcyxFZVtwbl1bMV0udHlwZSkmJkVzW0VlW3BuXVsxXS50eXBlXS5jYWxsKE9iamVjdC5hc3NpZ24oe3NsaWNlU2VyaWFsaXplOkVlW3BuXVsyXS5zbGljZVNlcmlhbGl6ZX0sSGUpLEVlW3BuXVsxXSl9aWYoSGUudG9rZW5TdGFjay5sZW5ndGg+MCl7Y29uc3QgRXM9SGUudG9rZW5TdGFja1tIZS50b2tlblN0YWNrLmxlbmd0aC0xXTsoRXNbMV18fGNCdCkuY2FsbChIZSx2b2lkIDAsRXNbMF0pfWZvcihLbi5wb3NpdGlvbj17c3RhcnQ6d2soRWUubGVuZ3RoPjA/RWVbMF1bMV0uc3RhcnQ6e2xpbmU6MSxjb2x1bW46MSxvZmZzZXQ6MH0pLGVuZDp3ayhFZS5sZW5ndGg+MD9FZVtFZS5sZW5ndGgtMl1bMV0uZW5kOntsaW5lOjEsY29sdW1uOjEsb2Zmc2V0OjB9KX0scG49LTE7KytwbjxhLnRyYW5zZm9ybXMubGVuZ3RoOylLbj1hLnRyYW5zZm9ybXNbcG5dKEtuKXx8S247cmV0dXJuIEtufWZ1bmN0aW9uIHcoRWUsS24sSGUpe2xldCBUaT1Lbi0xLHBuPS0xLEVzPSExLHFhLE1hLEdzLFBvO2Zvcig7KytUaTw9SGU7KXtjb25zdCB2cz1FZVtUaV07aWYodnNbMV0udHlwZT09PSJsaXN0VW5vcmRlcmVkInx8dnNbMV0udHlwZT09PSJsaXN0T3JkZXJlZCJ8fHZzWzFdLnR5cGU9PT0iYmxvY2tRdW90ZSI/KHZzWzBdPT09ImVudGVyIj9wbisrOnBuLS0sUG89dm9pZCAwKTp2c1sxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayI/dnNbMF09PT0iZW50ZXIiJiYocWEmJiFQbyYmIXBuJiYhR3MmJihHcz1UaSksUG89dm9pZCAwKTp2c1sxXS50eXBlPT09ImxpbmVQcmVmaXgifHx2c1sxXS50eXBlPT09Imxpc3RJdGVtVmFsdWUifHx2c1sxXS50eXBlPT09Imxpc3RJdGVtTWFya2VyInx8dnNbMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeCJ8fHZzWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlInx8KFBvPXZvaWQgMCksIXBuJiZ2c1swXT09PSJlbnRlciImJnZzWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgifHxwbj09PS0xJiZ2c1swXT09PSJleGl0IiYmKHZzWzFdLnR5cGU9PT0ibGlzdFVub3JkZXJlZCJ8fHZzWzFdLnR5cGU9PT0ibGlzdE9yZGVyZWQiKSl7aWYocWEpe2xldCBydT1UaTtmb3IoTWE9dm9pZCAwO3J1LS07KXtjb25zdCB6cz1FZVtydV07aWYoenNbMV0udHlwZT09PSJsaW5lRW5kaW5nInx8enNbMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiKXtpZih6c1swXT09PSJleGl0Iiljb250aW51ZTtNYSYmKEVlW01hXVsxXS50eXBlPSJsaW5lRW5kaW5nQmxhbmsiLEVzPSEwKSx6c1sxXS50eXBlPSJsaW5lRW5kaW5nIixNYT1ydX1lbHNlIGlmKCEoenNbMV0udHlwZT09PSJsaW5lUHJlZml4Inx8enNbMV0udHlwZT09PSJibG9ja1F1b3RlUHJlZml4Inx8enNbMV0udHlwZT09PSJibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZSJ8fHpzWzFdLnR5cGU9PT0iYmxvY2tRdW90ZU1hcmtlciJ8fHpzWzFdLnR5cGU9PT0ibGlzdEl0ZW1JbmRlbnQiKSlicmVha31HcyYmKCFNYXx8R3M8TWEpJiYocWEuX3NwcmVhZD0hMCkscWEuZW5kPU9iamVjdC5hc3NpZ24oe30sTWE/RWVbTWFdWzFdLnN0YXJ0OnZzWzFdLmVuZCksRWUuc3BsaWNlKE1hfHxUaSwwLFsiZXhpdCIscWEsdnNbMl1dKSxUaSsrLEhlKyt9dnNbMV0udHlwZT09PSJsaXN0SXRlbVByZWZpeCImJihxYT17dHlwZToibGlzdEl0ZW0iLF9zcHJlYWQ6ITEsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSx2c1sxXS5zdGFydCl9LEVlLnNwbGljZShUaSwwLFsiZW50ZXIiLHFhLHZzWzJdXSksVGkrKyxIZSsrLEdzPXZvaWQgMCxQbz0hMCl9fXJldHVybiBFZVtLbl1bMV0uX3NwcmVhZD1FcyxIZX1mdW5jdGlvbiBtKEVlLEtuKXtmW0VlXT1Lbn1mdW5jdGlvbiBiKEVlKXtyZXR1cm4gZltFZV19ZnVuY3Rpb24gRShFZSxLbil7cmV0dXJuIEhlO2Z1bmN0aW9uIEhlKFRpKXtBLmNhbGwodGhpcyxFZShUaSksVGkpLEtuJiZLbi5jYWxsKHRoaXMsVGkpfX1mdW5jdGlvbiBfKCl7dGhpcy5zdGFjay5wdXNoKHt0eXBlOiJmcmFnbWVudCIsY2hpbGRyZW46W119KX1mdW5jdGlvbiBBKEVlLEtuLEhlKXtyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXS5jaGlsZHJlbi5wdXNoKEVlKSx0aGlzLnN0YWNrLnB1c2goRWUpLHRoaXMudG9rZW5TdGFjay5wdXNoKFtLbixIZV0pLEVlLnBvc2l0aW9uPXtzdGFydDp3ayhLbi5zdGFydCl9LEVlfWZ1bmN0aW9uIEkoRWUpe3JldHVybiBLbjtmdW5jdGlvbiBLbihIZSl7RWUmJkVlLmNhbGwodGhpcyxIZSksQi5jYWxsKHRoaXMsSGUpfX1mdW5jdGlvbiBCKEVlLEtuKXtjb25zdCBIZT10aGlzLnN0YWNrLnBvcCgpLFRpPXRoaXMudG9rZW5TdGFjay5wb3AoKTtpZihUaSlUaVswXS50eXBlIT09RWUudHlwZSYmKEtuP0tuLmNhbGwodGhpcyxFZSxUaVswXSk6KFRpWzFdfHxjQnQpLmNhbGwodGhpcyxFZSxUaVswXSkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgYCIrRWUudHlwZSsiYCAoIitrWSh7c3RhcnQ6RWUuc3RhcnQsZW5kOkVlLmVuZH0pKyIpOiBpdOKAmXMgbm90IG9wZW4iKTtyZXR1cm4gSGUucG9zaXRpb24uZW5kPXdrKEVlLmVuZCksSGV9ZnVuY3Rpb24gTigpe3JldHVybiBtUmUodGhpcy5zdGFjay5wb3AoKSl9ZnVuY3Rpb24gUigpe20oImV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSIsITApfWZ1bmN0aW9uIHooRWUpe2lmKGIoImV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSIpKXtjb25zdCBLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO0tuLnN0YXJ0PU51bWJlci5wYXJzZUludCh0aGlzLnNsaWNlU2VyaWFsaXplKEVlKSwxMCksbSgiZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlIil9fWZ1bmN0aW9uIFcoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24ubGFuZz1FZX1mdW5jdGlvbiBldCgpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksS249dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtLbi5tZXRhPUVlfWZ1bmN0aW9uIHN0KCl7YigiZmxvd0NvZGVJbnNpZGUiKXx8KHRoaXMuYnVmZmVyKCksbSgiZmxvd0NvZGVJbnNpZGUiLCEwKSl9ZnVuY3Rpb24gYXQoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24udmFsdWU9RWUucmVwbGFjZSgvXihccj9cbnxccil8KFxyP1xufFxyKSQvZywiIiksbSgiZmxvd0NvZGVJbnNpZGUiKX1mdW5jdGlvbiBidCgpe2NvbnN0IEVlPXRoaXMucmVzdW1lKCksS249dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtLbi52YWx1ZT1FZS5yZXBsYWNlKC8oXHI/XG58XHIpJC9nLCIiKX1mdW5jdGlvbiBtdChFZSl7Y29uc3QgS249dGhpcy5yZXN1bWUoKSxIZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0hlLmxhYmVsPUtuLEhlLmlkZW50aWZpZXI9b0wodGhpcy5zbGljZVNlcmlhbGl6ZShFZSkpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24geXQoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24udGl0bGU9RWV9ZnVuY3Rpb24gZnQoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24udXJsPUVlfWZ1bmN0aW9uIHV0KEVlKXtjb25zdCBLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKCFLbi5kZXB0aCl7Y29uc3QgSGU9dGhpcy5zbGljZVNlcmlhbGl6ZShFZSkubGVuZ3RoO0tuLmRlcHRoPUhlfX1mdW5jdGlvbiB2dCgpe20oInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciLCEwKX1mdW5jdGlvbiBYKEVlKXtjb25zdCBLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0tuLmRlcHRoPXRoaXMuc2xpY2VTZXJpYWxpemUoRWUpLmNoYXJDb2RlQXQoMCk9PT02MT8xOjJ9ZnVuY3Rpb24gcHQoKXttKCJzZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nIil9ZnVuY3Rpb24gVShFZSl7Y29uc3QgS249dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtsZXQgSGU9S24uY2hpbGRyZW5bS24uY2hpbGRyZW4ubGVuZ3RoLTFdOyghSGV8fEhlLnR5cGUhPT0idGV4dCIpJiYoSGU9WG4oKSxIZS5wb3NpdGlvbj17c3RhcnQ6d2soRWUuc3RhcnQpfSxLbi5jaGlsZHJlbi5wdXNoKEhlKSksdGhpcy5zdGFjay5wdXNoKEhlKX1mdW5jdGlvbiBUdChFZSl7Y29uc3QgS249dGhpcy5zdGFjay5wb3AoKTtLbi52YWx1ZSs9dGhpcy5zbGljZVNlcmlhbGl6ZShFZSksS24ucG9zaXRpb24uZW5kPXdrKEVlLmVuZCl9ZnVuY3Rpb24gbnQoRWUpe2NvbnN0IEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoYigiYXRIYXJkQnJlYWsiKSl7Y29uc3QgSGU9S24uY2hpbGRyZW5bS24uY2hpbGRyZW4ubGVuZ3RoLTFdO0hlLnBvc2l0aW9uLmVuZD13ayhFZS5lbmQpLG0oImF0SGFyZEJyZWFrIik7cmV0dXJufSFiKCJzZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nIikmJmEuY2FuQ29udGFpbkVvbHMuaW5jbHVkZXMoS24udHlwZSkmJihVLmNhbGwodGhpcyxFZSksVHQuY2FsbCh0aGlzLEVlKSl9ZnVuY3Rpb24gSXQoKXttKCJhdEhhcmRCcmVhayIsITApfWZ1bmN0aW9uIE90KCl7Y29uc3QgRWU9dGhpcy5yZXN1bWUoKSxLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0tuLnZhbHVlPUVlfWZ1bmN0aW9uIEJ0KCl7Y29uc3QgRWU9dGhpcy5yZXN1bWUoKSxLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0tuLnZhbHVlPUVlfWZ1bmN0aW9uIEV0KCl7Y29uc3QgRWU9dGhpcy5yZXN1bWUoKSxLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0tuLnZhbHVlPUVlfWZ1bmN0aW9uIFooKXtjb25zdCBFZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKGIoImluUmVmZXJlbmNlIikpe2NvbnN0IEtuPWIoInJlZmVyZW5jZVR5cGUiKXx8InNob3J0Y3V0IjtFZS50eXBlKz0iUmVmZXJlbmNlIixFZS5yZWZlcmVuY2VUeXBlPUtuLGRlbGV0ZSBFZS51cmwsZGVsZXRlIEVlLnRpdGxlfWVsc2UgZGVsZXRlIEVlLmlkZW50aWZpZXIsZGVsZXRlIEVlLmxhYmVsO20oInJlZmVyZW5jZVR5cGUiKX1mdW5jdGlvbiBDdCgpe2NvbnN0IEVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoYigiaW5SZWZlcmVuY2UiKSl7Y29uc3QgS249YigicmVmZXJlbmNlVHlwZSIpfHwic2hvcnRjdXQiO0VlLnR5cGUrPSJSZWZlcmVuY2UiLEVlLnJlZmVyZW5jZVR5cGU9S24sZGVsZXRlIEVlLnVybCxkZWxldGUgRWUudGl0bGV9ZWxzZSBkZWxldGUgRWUuaWRlbnRpZmllcixkZWxldGUgRWUubGFiZWw7bSgicmVmZXJlbmNlVHlwZSIpfWZ1bmN0aW9uIHh0KEVlKXtjb25zdCBLbj10aGlzLnNsaWNlU2VyaWFsaXplKEVlKSxIZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO0hlLmxhYmVsPXUkZShLbiksSGUuaWRlbnRpZmllcj1vTChLbikudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBIdCgpe2NvbnN0IEVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV0sS249dGhpcy5yZXN1bWUoKSxIZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKG0oImluUmVmZXJlbmNlIiwhMCksSGUudHlwZT09PSJsaW5rIil7Y29uc3QgVGk9RWUuY2hpbGRyZW47SGUuY2hpbGRyZW49VGl9ZWxzZSBIZS5hbHQ9S259ZnVuY3Rpb24gTGUoKXtjb25zdCBFZT10aGlzLnJlc3VtZSgpLEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24udXJsPUVlfWZ1bmN0aW9uIEZ0KCl7Y29uc3QgRWU9dGhpcy5yZXN1bWUoKSxLbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0tuLnRpdGxlPUVlfWZ1bmN0aW9uIGduKCl7bSgiaW5SZWZlcmVuY2UiKX1mdW5jdGlvbiBTZSgpe20oInJlZmVyZW5jZVR5cGUiLCJjb2xsYXBzZWQiKX1mdW5jdGlvbiBtZShFZSl7Y29uc3QgS249dGhpcy5yZXN1bWUoKSxIZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO0hlLmxhYmVsPUtuLEhlLmlkZW50aWZpZXI9b0wodGhpcy5zbGljZVNlcmlhbGl6ZShFZSkpLnRvTG93ZXJDYXNlKCksbSgicmVmZXJlbmNlVHlwZSIsImZ1bGwiKX1mdW5jdGlvbiBWZShFZSl7bSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIsRWUudHlwZSl9ZnVuY3Rpb24gWWUoRWUpe2NvbnN0IEtuPXRoaXMuc2xpY2VTZXJpYWxpemUoRWUpLEhlPWIoImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiKTtsZXQgVGk7SGU/KFRpPW5CdChLbixIZT09PSJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIj8xMDoxNiksbSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpKTpUaT1BMHQoS24pO2NvbnN0IHBuPXRoaXMuc3RhY2sucG9wKCk7cG4udmFsdWUrPVRpLHBuLnBvc2l0aW9uLmVuZD13ayhFZS5lbmQpfWZ1bmN0aW9uIGNlKEVlKXtUdC5jYWxsKHRoaXMsRWUpO2NvbnN0IEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24udXJsPXRoaXMuc2xpY2VTZXJpYWxpemUoRWUpfWZ1bmN0aW9uIGtlKEVlKXtUdC5jYWxsKHRoaXMsRWUpO2NvbnN0IEtuPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07S24udXJsPSJtYWlsdG86Iit0aGlzLnNsaWNlU2VyaWFsaXplKEVlKX1mdW5jdGlvbiB6dCgpe3JldHVybnt0eXBlOiJibG9ja3F1b3RlIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gcmUoKXtyZXR1cm57dHlwZToiY29kZSIsbGFuZzpudWxsLG1ldGE6bnVsbCx2YWx1ZToiIn19ZnVuY3Rpb24gc2UoKXtyZXR1cm57dHlwZToiaW5saW5lQ29kZSIsdmFsdWU6IiJ9fWZ1bmN0aW9uIFBlKCl7cmV0dXJue3R5cGU6ImRlZmluaXRpb24iLGlkZW50aWZpZXI6IiIsbGFiZWw6bnVsbCx0aXRsZTpudWxsLHVybDoiIn19ZnVuY3Rpb24gdGUoKXtyZXR1cm57dHlwZToiZW1waGFzaXMiLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBNZSgpe3JldHVybnt0eXBlOiJoZWFkaW5nIixkZXB0aDp2b2lkIDAsY2hpbGRyZW46W119fWZ1bmN0aW9uIGRlKCl7cmV0dXJue3R5cGU6ImJyZWFrIn19ZnVuY3Rpb24gb24oKXtyZXR1cm57dHlwZToiaHRtbCIsdmFsdWU6IiJ9fWZ1bmN0aW9uIG5pKCl7cmV0dXJue3R5cGU6ImltYWdlIix0aXRsZTpudWxsLHVybDoiIixhbHQ6bnVsbH19ZnVuY3Rpb24gS3MoKXtyZXR1cm57dHlwZToibGluayIsdGl0bGU6bnVsbCx1cmw6IiIsY2hpbGRyZW46W119fWZ1bmN0aW9uIHdzKEVlKXtyZXR1cm57dHlwZToibGlzdCIsb3JkZXJlZDpFZS50eXBlPT09Imxpc3RPcmRlcmVkIixzdGFydDpudWxsLHNwcmVhZDpFZS5fc3ByZWFkLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBmbyhFZSl7cmV0dXJue3R5cGU6Imxpc3RJdGVtIixzcHJlYWQ6RWUuX3NwcmVhZCxjaGVja2VkOm51bGwsY2hpbGRyZW46W119fWZ1bmN0aW9uIFhpKCl7cmV0dXJue3R5cGU6InBhcmFncmFwaCIsY2hpbGRyZW46W119fWZ1bmN0aW9uIEVyKCl7cmV0dXJue3R5cGU6InN0cm9uZyIsY2hpbGRyZW46W119fWZ1bmN0aW9uIFhuKCl7cmV0dXJue3R5cGU6InRleHQiLHZhbHVlOiIifX1mdW5jdGlvbiBkaSgpe3JldHVybnt0eXBlOiJ0aGVtYXRpY0JyZWFrIn19fWZ1bmN0aW9uIHdrKGkpe3JldHVybntsaW5lOmkubGluZSxjb2x1bW46aS5jb2x1bW4sb2Zmc2V0Omkub2Zmc2V0fX1mdW5jdGlvbiBvQnQoaSxhKXtsZXQgZj0tMTtmb3IoOysrZjxhLmxlbmd0aDspe2NvbnN0IHA9YVtmXTtBcnJheS5pc0FycmF5KHApP29CdChpLHApOmYkZShpLHApfX1mdW5jdGlvbiBmJGUoaSxhKXtsZXQgZjtmb3IoZiBpbiBhKWlmKHNCdC5jYWxsKGEsZikpe2lmKGY9PT0iY2FuQ29udGFpbkVvbHMiKXtjb25zdCBwPWFbZl07cCYmaVtmXS5wdXNoKC4uLnApfWVsc2UgaWYoZj09PSJ0cmFuc2Zvcm1zIil7Y29uc3QgcD1hW2ZdO3AmJmlbZl0ucHVzaCguLi5wKX1lbHNlIGlmKGY9PT0iZW50ZXIifHxmPT09ImV4aXQiKXtjb25zdCBwPWFbZl07cCYmT2JqZWN0LmFzc2lnbihpW2ZdLHApfX19ZnVuY3Rpb24gY0J0KGksYSl7dGhyb3cgaT9uZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIitpLnR5cGUrImAgKCIra1koe3N0YXJ0Omkuc3RhcnQsZW5kOmkuZW5kfSkrIik6IGEgZGlmZmVyZW50IHRva2VuIChgIithLnR5cGUrImAsICIra1koe3N0YXJ0OmEuc3RhcnQsZW5kOmEuZW5kfSkrIikgaXMgb3BlbiIpOm5ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGRvY3VtZW50LCBhIHRva2VuIChgIithLnR5cGUrImAsICIra1koe3N0YXJ0OmEuc3RhcnQsZW5kOmEuZW5kfSkrIikgaXMgc3RpbGwgb3BlbiIpfWZ1bmN0aW9uIGQkZShpKXtjb25zdCBhPWkucmVwbGFjZSgvXG57Mix9L2csYApgKTtyZXR1cm4geEEoYSl9ZnVuY3Rpb24gZyRlKGkpe2NvbnN0IGE9ZCRlKGkpLHtjaGlsZHJlbjpmfT1hQnQoYSkscD1bW11dO2xldCB3PTA7ZnVuY3Rpb24gbShiLEU9Im5vcm1hbCIpe2IudHlwZT09PSJ0ZXh0Ij9iLnZhbHVlLnNwbGl0KGAKYCkuZm9yRWFjaCgoQSxJKT0+e0khPT0wJiYodysrLHAucHVzaChbXSkpLEEuc3BsaXQoIiAiKS5mb3JFYWNoKEI9PntCJiZwW3ddLnB1c2goe2NvbnRlbnQ6Qix0eXBlOkV9KX0pfSk6KGIudHlwZT09PSJzdHJvbmcifHxiLnR5cGU9PT0iZW1waGFzaXMiKSYmYi5jaGlsZHJlbi5mb3JFYWNoKF89PnttKF8sYi50eXBlKX0pfXJldHVybiBmLmZvckVhY2goYj0+e2IudHlwZT09PSJwYXJhZ3JhcGgiJiZiLmNoaWxkcmVuLmZvckVhY2goRT0+e20oRSl9KX0pLHB9ZnVuY3Rpb24gcCRlKGkpe2NvbnN0e2NoaWxkcmVuOmF9PWFCdChpKTtmdW5jdGlvbiBmKHApe3JldHVybiBwLnR5cGU9PT0idGV4dCI/cC52YWx1ZS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpOnAudHlwZT09PSJzdHJvbmciP2A8c3Ryb25nPiR7cC5jaGlsZHJlbi5tYXAoZikuam9pbigiIil9PC9zdHJvbmc+YDpwLnR5cGU9PT0iZW1waGFzaXMiP2A8ZW0+JHtwLmNoaWxkcmVuLm1hcChmKS5qb2luKCIiKX08L2VtPmA6cC50eXBlPT09InBhcmFncmFwaCI/YDxwPiR7cC5jaGlsZHJlbi5tYXAoZikuam9pbigiIil9PC9wPmA6YFVuc3VwcG9ydGVkIG1hcmtkb3duOiAke3AudHlwZX1gfXJldHVybiBhLm1hcChmKS5qb2luKCIiKX1mdW5jdGlvbiBiJGUoaSl7cmV0dXJuIEludGwuU2VnbWVudGVyP1suLi5uZXcgSW50bC5TZWdtZW50ZXIoKS5zZWdtZW50KGkpXS5tYXAoYT0+YS5zZWdtZW50KTpbLi4uaV19ZnVuY3Rpb24gdyRlKGksYSl7Y29uc3QgZj1iJGUoYS5jb250ZW50KTtyZXR1cm4gdUJ0KGksW10sZixhLnR5cGUpfWZ1bmN0aW9uIHVCdChpLGEsZixwKXtpZihmLmxlbmd0aD09PTApcmV0dXJuW3tjb250ZW50OmEuam9pbigiIiksdHlwZTpwfSx7Y29udGVudDoiIix0eXBlOnB9XTtjb25zdFt3LC4uLm1dPWYsYj1bLi4uYSx3XTtyZXR1cm4gaShbe2NvbnRlbnQ6Yi5qb2luKCIiKSx0eXBlOnB9XSk/dUJ0KGksYixtLHApOihhLmxlbmd0aD09PTAmJncmJihhLnB1c2godyksZi5zaGlmdCgpKSxbe2NvbnRlbnQ6YS5qb2luKCIiKSx0eXBlOnB9LHtjb250ZW50OmYuam9pbigiIiksdHlwZTpwfV0pfWZ1bmN0aW9uIHYkZShpLGEpe2lmKGkuc29tZSgoe2NvbnRlbnQ6Zn0pPT5mLmluY2x1ZGVzKGAKYCkpKXRocm93IG5ldyBFcnJvcigic3BsaXRMaW5lVG9GaXRXaWR0aCBkb2VzIG5vdCBzdXBwb3J0IG5ld2xpbmVzIGluIHRoZSBsaW5lIik7cmV0dXJuIE8wdChpLGEpfWZ1bmN0aW9uIE8wdChpLGEsZj1bXSxwPVtdKXtpZihpLmxlbmd0aD09PTApcmV0dXJuIHAubGVuZ3RoPjAmJmYucHVzaChwKSxmLmxlbmd0aD4wP2Y6W107bGV0IHc9IiI7aVswXS5jb250ZW50PT09IiAiJiYodz0iICIsaS5zaGlmdCgpKTtjb25zdCBtPWkuc2hpZnQoKT8/e2NvbnRlbnQ6IiAiLHR5cGU6Im5vcm1hbCJ9LGI9Wy4uLnBdO2lmKHchPT0iIiYmYi5wdXNoKHtjb250ZW50OncsdHlwZToibm9ybWFsIn0pLGIucHVzaChtKSxhKGIpKXJldHVybiBPMHQoaSxhLGYsYik7aWYocC5sZW5ndGg+MClmLnB1c2gocCksaS51bnNoaWZ0KG0pO2Vsc2UgaWYobS5jb250ZW50KXtjb25zdFtFLF9dPXckZShhLG0pO2YucHVzaChbRV0pLF8uY29udGVudCYmaS51bnNoaWZ0KF8pfXJldHVybiBPMHQoaSxhLGYpfWZ1bmN0aW9uIG0kZShpLGEpe2EmJmkuYXR0cigic3R5bGUiLGEpfWZ1bmN0aW9uIHkkZShpLGEsZixwLHc9ITEpe2NvbnN0IG09aS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKSxiPW0uYXBwZW5kKCJ4aHRtbDpkaXYiKSxFPWEubGFiZWwsXz1hLmlzTm9kZT8ibm9kZUxhYmVsIjoiZWRnZUxhYmVsIjtiLmh0bWwoYAogICAgPHNwYW4gY2xhc3M9IiR7X30gJHtwfSIgYCsoYS5sYWJlbFN0eWxlPydzdHlsZT0iJythLmxhYmVsU3R5bGUrJyInOiIiKSsiPiIrRSsiPC9zcGFuPiIpLG0kZShiLGEubGFiZWxTdHlsZSksYi5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKSxiLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpLGIuc3R5bGUoIm1heC13aWR0aCIsZisicHgiKSxiLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHcmJmIuYXR0cigiY2xhc3MiLCJsYWJlbEJrZyIpO2xldCBBPWIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBBLndpZHRoPT09ZiYmKGIuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLGIuc3R5bGUoIndoaXRlLXNwYWNlIiwiYnJlYWstc3BhY2VzIiksYi5zdHlsZSgid2lkdGgiLGYrInB4IiksQT1iLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksbS5zdHlsZSgid2lkdGgiLEEud2lkdGgpLG0uc3R5bGUoImhlaWdodCIsQS5oZWlnaHQpLG0ubm9kZSgpfWZ1bmN0aW9uIFAwdChpLGEsZil7cmV0dXJuIGkuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImNsYXNzIiwidGV4dC1vdXRlci10c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLGEqZi0uMSsiZW0iKS5hdHRyKCJkeSIsZisiZW0iKX1mdW5jdGlvbiB4JGUoaSxhLGYpe2NvbnN0IHA9aS5hcHBlbmQoInRleHQiKSx3PVAwdChwLDEsYSk7RjB0KHcsZik7Y29uc3QgbT13Lm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtyZXR1cm4gcC5yZW1vdmUoKSxtfWZ1bmN0aW9uIGskZShpLGEsZil7dmFyIGI7Y29uc3QgcD1pLmFwcGVuZCgidGV4dCIpLHc9UDB0KHAsMSxhKTtGMHQodyxbe2NvbnRlbnQ6Zix0eXBlOiJub3JtYWwifV0pO2NvbnN0IG09KGI9dy5ub2RlKCkpPT1udWxsP3ZvaWQgMDpiLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBtJiZwLnJlbW92ZSgpLG19ZnVuY3Rpb24gRSRlKGksYSxmLHA9ITEpe2NvbnN0IG09YS5hcHBlbmQoImciKSxiPW0uaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIiksRT1tLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLCItMTAuMSIpO2xldCBfPTA7Zm9yKGNvbnN0IEEgb2YgZil7Y29uc3QgST1OPT54JGUobSwxLjEsTik8PWksQj1JKEEpP1tBXTp2JGUoQSxJKTtmb3IoY29uc3QgTiBvZiBCKXtjb25zdCBSPVAwdChFLF8sMS4xKTtGMHQoUixOKSxfKyt9fWlmKHApe2NvbnN0IEE9RS5ub2RlKCkuZ2V0QkJveCgpLEk9MjtyZXR1cm4gYi5hdHRyKCJ4IiwtSSkuYXR0cigieSIsLUkpLmF0dHIoIndpZHRoIixBLndpZHRoKzIqSSkuYXR0cigiaGVpZ2h0IixBLmhlaWdodCsyKkkpLG0ubm9kZSgpfWVsc2UgcmV0dXJuIEUubm9kZSgpfWZ1bmN0aW9uIEYwdChpLGEpe2kudGV4dCgiIiksYS5mb3JFYWNoKChmLHApPT57Y29uc3Qgdz1pLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJmb250LXN0eWxlIixmLnR5cGU9PT0iZW1waGFzaXMiPyJpdGFsaWMiOiJub3JtYWwiKS5hdHRyKCJjbGFzcyIsInRleHQtaW5uZXItdHNwYW4iKS5hdHRyKCJmb250LXdlaWdodCIsZi50eXBlPT09InN0cm9uZyI/ImJvbGQiOiJub3JtYWwiKTtwPT09MD93LnRleHQoZi5jb250ZW50KTp3LnRleHQoIiAiK2YuY29udGVudCl9KX1jb25zdCBFWT0oaSxhPSIiLHtzdHlsZTpmPSIiLGlzVGl0bGU6cD0hMSxjbGFzc2VzOnc9IiIsdXNlSHRtbExhYmVsczptPSEwLGlzTm9kZTpiPSEwLHdpZHRoOkU9MjAwLGFkZFN2Z0JhY2tncm91bmQ6Xz0hMX09e30pPT57aWYoVXQuaW5mbygiY3JlYXRlVGV4dCIsYSxmLHAsdyxtLGIsXyksbSl7Y29uc3QgQT1wJGUoYSksST17aXNOb2RlOmIsbGFiZWw6dUYoQSkucmVwbGFjZSgvZmFbYmxyc10/OmZhLVtcdy1dKy9nLE49PmA8aSBjbGFzcz0nJHtOLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCksbGFiZWxTdHlsZTpmLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiB5JGUoaSxJLEUsdyxfKX1lbHNle2NvbnN0IEE9ZyRlKGEpO3JldHVybiBFJGUoRSxpLEEsXyl9fSxOZD1hc3luYyhpLGEsZixwKT0+e2xldCB3O2NvbnN0IG09YS51c2VIdG1sTGFiZWxzfHxvMShPZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKTtmP3c9Zjp3PSJub2RlIGRlZmF1bHQiO2NvbnN0IGI9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsdykuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLEU9Yi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLGEubGFiZWxTdHlsZSk7bGV0IF87YS5sYWJlbFRleHQ9PT12b2lkIDA/Xz0iIjpfPXR5cGVvZiBhLmxhYmVsVGV4dD09InN0cmluZyI/YS5sYWJlbFRleHQ6YS5sYWJlbFRleHRbMF07Y29uc3QgQT1FLm5vZGUoKTtsZXQgSTthLmxhYmVsVHlwZT09PSJtYXJrZG93biI/ST1FWShFLFExKHVGKF8pLE9lKCkpLHt1c2VIdG1sTGFiZWxzOm0sd2lkdGg6YS53aWR0aHx8T2UoKS5mbG93Y2hhcnQud3JhcHBpbmdXaWR0aCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIn0pOkk9QS5hcHBlbmRDaGlsZChncChRMSh1RihfKSxPZSgpKSxhLmxhYmVsU3R5bGUsITEscCkpO2xldCBCPUkuZ2V0QkJveCgpO2NvbnN0IE49YS5wYWRkaW5nLzI7aWYobzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IFI9SS5jaGlsZHJlblswXSx6PXlyKEkpLFc9Ui5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIik7aWYoVyl7Y29uc3QgZXQ9Xy5yZXBsYWNlKC88aW1nW14+XSo+L2csIiIpLnRyaW0oKT09PSIiO2F3YWl0IFByb21pc2UuYWxsKFsuLi5XXS5tYXAoc3Q9Pm5ldyBQcm9taXNlKGF0PT57ZnVuY3Rpb24gYnQoKXtpZihzdC5zdHlsZS5kaXNwbGF5PSJmbGV4IixzdC5zdHlsZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGV0KXtjb25zdCBtdD1PZSgpLmZvbnRTaXplP09lKCkuZm9udFNpemU6d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUseXQ9NTtzdC5zdHlsZS53aWR0aD1wYXJzZUludChtdCwxMCkqeXQrInB4In1lbHNlIHN0LnN0eWxlLndpZHRoPSIxMDAlIjthdChzdCl9c2V0VGltZW91dCgoKT0+e3N0LmNvbXBsZXRlJiZidCgpfSksc3QuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGJ0KSxzdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixidCl9KSkpfUI9Ui5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx6LmF0dHIoIndpZHRoIixCLndpZHRoKSx6LmF0dHIoImhlaWdodCIsQi5oZWlnaHQpfXJldHVybiBtP0UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLUIud2lkdGgvMisiLCAiKy1CLmhlaWdodC8yKyIpIik6RS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistQi5oZWlnaHQvMisiKSIpLGEuY2VudGVyTGFiZWwmJkUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLUIud2lkdGgvMisiLCAiKy1CLmhlaWdodC8yKyIpIiksRS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6YixiYm94OkIsaGFsZlBhZGRpbmc6TixsYWJlbDpFfX0sdGY9KGksYSk9Pntjb25zdCBmPWEubm9kZSgpLmdldEJCb3goKTtpLndpZHRoPWYud2lkdGgsaS5oZWlnaHQ9Zi5oZWlnaHR9O2Z1bmN0aW9uIEY1KGksYSxmLHApe3JldHVybiBpLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIscC5tYXAoZnVuY3Rpb24odyl7cmV0dXJuIHcueCsiLCIrdy55fSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsImxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1hLzIrIiwiK2YvMisiKSIpfWxldCBIbz17fSxobT17fSxsQnQ9e307Y29uc3QgVCRlPSgpPT57aG09e30sbEJ0PXt9LEhvPXt9fSxUWT0oaSxhKT0+KFV0LnRyYWNlKCJJbiBpc0RlY2VuZGFudCIsYSwiICIsaSwiID0gIixobVthXS5pbmNsdWRlcyhpKSksISFobVthXS5pbmNsdWRlcyhpKSksQyRlPShpLGEpPT4oVXQuaW5mbygiRGVjZW5kYW50cyBvZiAiLGEsIiBpcyAiLGhtW2FdKSxVdC5pbmZvKCJFZGdlIGlzICIsaSksaS52PT09YXx8aS53PT09YT8hMTpobVthXT9obVthXS5pbmNsdWRlcyhpLnYpfHxUWShpLnYsYSl8fFRZKGkudyxhKXx8aG1bYV0uaW5jbHVkZXMoaS53KTooVXQuZGVidWcoIlRpbHQsICIsYSwiLG5vdCBpbiBkZWNlbmRhbnRzIiksITEpKSxoQnQ9KGksYSxmLHApPT57VXQud2FybigiQ29weWluZyBjaGlsZHJlbiBvZiAiLGksInJvb3QiLHAsImRhdGEiLGEubm9kZShpKSxwKTtjb25zdCB3PWEuY2hpbGRyZW4oaSl8fFtdO2khPT1wJiZ3LnB1c2goaSksVXQud2FybigiQ29weWluZyAobm9kZXMpIGNsdXN0ZXJJZCIsaSwibm9kZXMiLHcpLHcuZm9yRWFjaChtPT57aWYoYS5jaGlsZHJlbihtKS5sZW5ndGg+MCloQnQobSxhLGYscCk7ZWxzZXtjb25zdCBiPWEubm9kZShtKTtVdC5pbmZvKCJjcCAiLG0sIiB0byAiLHAsIiB3aXRoIHBhcmVudCAiLGkpLGYuc2V0Tm9kZShtLGIpLHAhPT1hLnBhcmVudChtKSYmKFV0Lndhcm4oIlNldHRpbmcgcGFyZW50IixtLGEucGFyZW50KG0pKSxmLnNldFBhcmVudChtLGEucGFyZW50KG0pKSksaSE9PXAmJm0hPT1pPyhVdC5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLG0saSksZi5zZXRQYXJlbnQobSxpKSk6KFV0LmluZm8oIkluIGNvcHkgIixpLCJyb290IixwLCJkYXRhIixhLm5vZGUoaSkscCksVXQuZGVidWcoIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT0iLG0sImNsdXN0ZXIhPT1yb290SWQiLGkhPT1wLCJub2RlIT09Y2x1c3RlcklkIixtIT09aSkpO2NvbnN0IEU9YS5lZGdlcyhtKTtVdC5kZWJ1ZygiQ29weWluZyBFZGdlcyIsRSksRS5mb3JFYWNoKF89PntVdC5pbmZvKCJFZGdlIixfKTtjb25zdCBBPWEuZWRnZShfLnYsXy53LF8ubmFtZSk7VXQuaW5mbygiRWRnZSBkYXRhIixBLHApO3RyeXtDJGUoXyxwKT8oVXQuaW5mbygiQ29weWluZyBhcyAiLF8udixfLncsQSxfLm5hbWUpLGYuc2V0RWRnZShfLnYsXy53LEEsXy5uYW1lKSxVdC5pbmZvKCJuZXdHcmFwaCBlZGdlcyAiLGYuZWRnZXMoKSxmLmVkZ2UoZi5lZGdlcygpWzBdKSkpOlV0LmluZm8oIlNraXBwaW5nIGNvcHkgb2YgZWRnZSAiLF8udiwiLS0+IixfLncsIiByb290SWQ6ICIscCwiIGNsdXN0ZXJJZDoiLGkpfWNhdGNoKEkpe1V0LmVycm9yKEkpfX0pfVV0LmRlYnVnKCJSZW1vdmluZyBub2RlIixtKSxhLnJlbW92ZU5vZGUobSl9KX0sZkJ0PShpLGEpPT57Y29uc3QgZj1hLmNoaWxkcmVuKGkpO2xldCBwPVsuLi5mXTtmb3IoY29uc3QgdyBvZiBmKWxCdFt3XT1pLHA9Wy4uLnAsLi4uZkJ0KHcsYSldO3JldHVybiBwfSxDRj0oaSxhKT0+e1V0LnRyYWNlKCJTZWFyY2hpbmciLGkpO2NvbnN0IGY9YS5jaGlsZHJlbihpKTtpZihVdC50cmFjZSgiU2VhcmNoaW5nIGNoaWxkcmVuIG9mIGlkICIsaSxmKSxmLmxlbmd0aDwxKXJldHVybiBVdC50cmFjZSgiVGhpcyBpcyBhIHZhbGlkIG5vZGUiLGkpLGk7Zm9yKGNvbnN0IHAgb2YgZil7Y29uc3Qgdz1DRihwLGEpO2lmKHcpcmV0dXJuIFV0LnRyYWNlKCJGb3VuZCByZXBsYWNlbWVudCBmb3IiLGksIiA9PiAiLHcpLHd9fSxDWT1pPT4hSG9baV18fCFIb1tpXS5leHRlcm5hbENvbm5lY3Rpb25zP2k6SG9baV0/SG9baV0uaWQ6aSxfJGU9KGksYSk9PntpZighaXx8YT4xMCl7VXQuZGVidWcoIk9wdGluZyBvdXQsIG5vIGdyYXBoICIpO3JldHVybn1lbHNlIFV0LmRlYnVnKCJPcHRpbmcgaW4sIGdyYXBoICIpO2kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2kuY2hpbGRyZW4oZikubGVuZ3RoPjAmJihVdC53YXJuKCJDbHVzdGVyIGlkZW50aWZpZWQiLGYsIiBSZXBsYWNlbWVudCBpZCBpbiBlZGdlczogIixDRihmLGkpKSxobVtmXT1mQnQoZixpKSxIb1tmXT17aWQ6Q0YoZixpKSxjbHVzdGVyRGF0YTppLm5vZGUoZil9KX0pLGkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2NvbnN0IHA9aS5jaGlsZHJlbihmKSx3PWkuZWRnZXMoKTtwLmxlbmd0aD4wPyhVdC5kZWJ1ZygiQ2x1c3RlciBpZGVudGlmaWVkIixmLGhtKSx3LmZvckVhY2gobT0+e2lmKG0udiE9PWYmJm0udyE9PWYpe2NvbnN0IGI9VFkobS52LGYpLEU9VFkobS53LGYpO2JeRSYmKFV0Lndhcm4oIkVkZ2U6ICIsbSwiIGxlYXZlcyBjbHVzdGVyICIsZiksVXQud2FybigiRGVjZW5kYW50cyBvZiBYWFggIixmLCI6ICIsaG1bZl0pLEhvW2ZdLmV4dGVybmFsQ29ubmVjdGlvbnM9ITApfX0pKTpVdC5kZWJ1ZygiTm90IGEgY2x1c3RlciAiLGYsaG0pfSksaS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZil7Y29uc3QgcD1pLmVkZ2UoZik7VXQud2FybigiRWRnZSAiK2YudisiIC0+ICIrZi53KyI6ICIrSlNPTi5zdHJpbmdpZnkoZikpLFV0Lndhcm4oIkVkZ2UgIitmLnYrIiAtPiAiK2YudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZShmKSkpO2xldCB3PWYudixtPWYudztpZihVdC53YXJuKCJGaXggWFhYIixIbywiaWRzOiIsZi52LGYudywiVHJhbnNsYXRpbmc6ICIsSG9bZi52XSwiIC0tLSAiLEhvW2Yud10pLEhvW2Yudl0mJkhvW2Yud10mJkhvW2Yudl09PT1Ib1tmLnddKXtVdC53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgbGluayB0byBzZWxmIC0gcmVtb3ZpbmcgWFhYIixmLnYsZi53LGYubmFtZSksVXQud2FybigiRml4aW5nIGFuZCB0cml4aW5nIC0gcmVtb3ZpbmcgWFhYIixmLnYsZi53LGYubmFtZSksdz1DWShmLnYpLG09Q1koZi53KSxpLnJlbW92ZUVkZ2UoZi52LGYudyxmLm5hbWUpO2NvbnN0IGI9Zi53KyItLS0iK2YudjtpLnNldE5vZGUoYix7ZG9tSWQ6YixpZDpiLGxhYmVsU3R5bGU6IiIsbGFiZWxUZXh0OnAubGFiZWwscGFkZGluZzowLHNoYXBlOiJsYWJlbFJlY3QiLHN0eWxlOiIifSk7Y29uc3QgRT1zdHJ1Y3R1cmVkQ2xvbmUocCksXz1zdHJ1Y3R1cmVkQ2xvbmUocCk7RS5sYWJlbD0iIixFLmFycm93VHlwZUVuZD0ibm9uZSIsXy5sYWJlbD0iIixFLmZyb21DbHVzdGVyPWYudixfLnRvQ2x1c3Rlcj1mLnYsaS5zZXRFZGdlKHcsYixFLGYubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIiksaS5zZXRFZGdlKGIsbSxfLGYubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIil9ZWxzZShIb1tmLnZdfHxIb1tmLnddKSYmKFV0Lndhcm4oIkZpeGluZyBhbmQgdHJpeGluZyAtIHJlbW92aW5nIFhYWCIsZi52LGYudyxmLm5hbWUpLHc9Q1koZi52KSxtPUNZKGYudyksaS5yZW1vdmVFZGdlKGYudixmLncsZi5uYW1lKSx3IT09Zi52JiYocC5mcm9tQ2x1c3Rlcj1mLnYpLG0hPT1mLncmJihwLnRvQ2x1c3Rlcj1mLncpLFV0Lndhcm4oIkZpeCBSZXBsYWNpbmcgd2l0aCBYWFgiLHcsbSxmLm5hbWUpLGkuc2V0RWRnZSh3LG0scCxmLm5hbWUpKX0pLFV0Lndhcm4oIkFkanVzdGVkIEdyYXBoIixQNShpKSksZEJ0KGksMCksVXQudHJhY2UoSG8pfSxkQnQ9KGksYSk9PntpZihVdC53YXJuKCJleHRyYWN0b3IgLSAiLGEsUDUoaSksaS5jaGlsZHJlbigiRCIpKSxhPjEwKXtVdC5lcnJvcigiQmFpbGluZyBvdXQiKTtyZXR1cm59bGV0IGY9aS5ub2RlcygpLHA9ITE7Zm9yKGNvbnN0IHcgb2YgZil7Y29uc3QgbT1pLmNoaWxkcmVuKHcpO3A9cHx8bS5sZW5ndGg+MH1pZighcCl7VXQuZGVidWcoIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuIixpLm5vZGVzKCkpO3JldHVybn1VdC5kZWJ1ZygiTm9kZXMgPSAiLGYsYSk7Zm9yKGNvbnN0IHcgb2YgZilpZihVdC5kZWJ1ZygiRXh0cmFjdGluZyBub2RlIix3LEhvLEhvW3ddJiYhSG9bd10uZXh0ZXJuYWxDb25uZWN0aW9ucywhaS5wYXJlbnQodyksaS5ub2RlKHcpLGkuY2hpbGRyZW4oIkQiKSwiIERlcHRoICIsYSksIUhvW3ddKVV0LmRlYnVnKCJOb3QgYSBjbHVzdGVyIix3LGEpO2Vsc2UgaWYoIUhvW3ddLmV4dGVybmFsQ29ubmVjdGlvbnMmJmkuY2hpbGRyZW4odykmJmkuY2hpbGRyZW4odykubGVuZ3RoPjApe1V0Lndhcm4oIkNsdXN0ZXIgd2l0aG91dCBleHRlcm5hbCBjb25uZWN0aW9ucywgd2l0aG91dCBhIHBhcmVudCBhbmQgd2l0aCBjaGlsZHJlbiIsdyxhKTtsZXQgYj1pLmdyYXBoKCkucmFua2Rpcj09PSJUQiI/IkxSIjoiVEIiO0hvW3ddJiZIb1t3XS5jbHVzdGVyRGF0YSYmSG9bd10uY2x1c3RlckRhdGEuZGlyJiYoYj1Ib1t3XS5jbHVzdGVyRGF0YS5kaXIsVXQud2FybigiRml4aW5nIGRpciIsSG9bd10uY2x1c3RlckRhdGEuZGlyLGIpKTtjb25zdCBFPW5ldyBjMSh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOmIsbm9kZXNlcDo1MCxyYW5rc2VwOjUwLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KTtVdC53YXJuKCJPbGQgZ3JhcGggYmVmb3JlIGNvcHkiLFA1KGkpKSxoQnQodyxpLEUsdyksaS5zZXROb2RlKHcse2NsdXN0ZXJOb2RlOiEwLGlkOncsY2x1c3RlckRhdGE6SG9bd10uY2x1c3RlckRhdGEsbGFiZWxUZXh0OkhvW3ddLmxhYmVsVGV4dCxncmFwaDpFfSksVXQud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsdywiKSIsUDUoRSkpLFV0LmRlYnVnKCJPbGQgZ3JhcGggYWZ0ZXIgY29weSIsUDUoaSkpfWVsc2UgVXQud2FybigiQ2x1c3RlciAqKiAiLHcsIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczoiLCFIb1t3XS5leHRlcm5hbENvbm5lY3Rpb25zLCIgbm8gcGFyZW50OiAiLCFpLnBhcmVudCh3KSwiIGNoaWxkcmVuICIsaS5jaGlsZHJlbih3KSYmaS5jaGlsZHJlbih3KS5sZW5ndGg+MCxpLmNoaWxkcmVuKCJEIiksYSksVXQuZGVidWcoSG8pO2Y9aS5ub2RlcygpLFV0Lndhcm4oIk5ldyBsaXN0IG9mIG5vZGVzIixmKTtmb3IoY29uc3QgdyBvZiBmKXtjb25zdCBtPWkubm9kZSh3KTtVdC53YXJuKCIgTm93IG5leHQgbGV2ZWwiLHcsbSksbS5jbHVzdGVyTm9kZSYmZEJ0KG0uZ3JhcGgsYSsxKX19LGdCdD0oaSxhKT0+e2lmKGEubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgZj1PYmplY3QuYXNzaWduKGEpO3JldHVybiBhLmZvckVhY2gocD0+e2NvbnN0IHc9aS5jaGlsZHJlbihwKSxtPWdCdChpLHcpO2Y9Wy4uLmYsLi4ubV19KSxmfSxTJGU9aT0+Z0J0KGksaS5jaGlsZHJlbigpKTtmdW5jdGlvbiBBJGUoaSxhKXtyZXR1cm4gaS5pbnRlcnNlY3QoYSl9ZnVuY3Rpb24gcEJ0KGksYSxmLHApe3ZhciB3PWkueCxtPWkueSxiPXctcC54LEU9bS1wLnksXz1NYXRoLnNxcnQoYSphKkUqRStmKmYqYipiKSxBPU1hdGguYWJzKGEqZipiL18pO3AueDx3JiYoQT0tQSk7dmFyIEk9TWF0aC5hYnMoYSpmKkUvXyk7cmV0dXJuIHAueTxtJiYoST0tSSkse3g6dytBLHk6bStJfX1mdW5jdGlvbiBMJGUoaSxhLGYpe3JldHVybiBwQnQoaSxhLGEsZil9ZnVuY3Rpb24gTSRlKGksYSxmLHApe3ZhciB3LG0sYixFLF8sQSxJLEIsTixSLHosVyxldCxzdCxhdDtpZih3PWEueS1pLnksYj1pLngtYS54LF89YS54KmkueS1pLngqYS55LE49dypmLngrYipmLnkrXyxSPXcqcC54K2IqcC55K18sIShOIT09MCYmUiE9PTAmJmJCdChOLFIpKSYmKG09cC55LWYueSxFPWYueC1wLngsQT1wLngqZi55LWYueCpwLnksST1tKmkueCtFKmkueStBLEI9bSphLngrRSphLnkrQSwhKEkhPT0wJiZCIT09MCYmYkJ0KEksQikpJiYoej13KkUtbSpiLHohPT0wKSkpcmV0dXJuIFc9TWF0aC5hYnMoei8yKSxldD1iKkEtRSpfLHN0PWV0PDA/KGV0LVcpL3o6KGV0K1cpL3osZXQ9bSpfLXcqQSxhdD1ldDwwPyhldC1XKS96OihldCtXKS96LHt4OnN0LHk6YXR9fWZ1bmN0aW9uIGJCdChpLGEpe3JldHVybiBpKmE+MH1mdW5jdGlvbiBEJGUoaSxhLGYpe3ZhciBwPWkueCx3PWkueSxtPVtdLGI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3R5cGVvZiBhLmZvckVhY2g9PSJmdW5jdGlvbiI/YS5mb3JFYWNoKGZ1bmN0aW9uKHope2I9TWF0aC5taW4oYix6LngpLEU9TWF0aC5taW4oRSx6LnkpfSk6KGI9TWF0aC5taW4oYixhLngpLEU9TWF0aC5taW4oRSxhLnkpKTtmb3IodmFyIF89cC1pLndpZHRoLzItYixBPXctaS5oZWlnaHQvMi1FLEk9MDtJPGEubGVuZ3RoO0krKyl7dmFyIEI9YVtJXSxOPWFbSTxhLmxlbmd0aC0xP0krMTowXSxSPU0kZShpLGYse3g6XytCLngseTpBK0IueX0se3g6XytOLngseTpBK04ueX0pO1ImJm0ucHVzaChSKX1yZXR1cm4gbS5sZW5ndGg/KG0ubGVuZ3RoPjEmJm0uc29ydChmdW5jdGlvbih6LFcpe3ZhciBldD16LngtZi54LHN0PXoueS1mLnksYXQ9TWF0aC5zcXJ0KGV0KmV0K3N0KnN0KSxidD1XLngtZi54LG10PVcueS1mLnkseXQ9TWF0aC5zcXJ0KGJ0KmJ0K210Km10KTtyZXR1cm4gYXQ8eXQ/LTE6YXQ9PT15dD8wOjF9KSxtWzBdKTppfWNvbnN0IF9GPShpLGEpPT57dmFyIGY9aS54LHA9aS55LHc9YS54LWYsbT1hLnktcCxiPWkud2lkdGgvMixFPWkuaGVpZ2h0LzIsXyxBO3JldHVybiBNYXRoLmFicyhtKSpiPk1hdGguYWJzKHcpKkU/KG08MCYmKEU9LUUpLF89bT09PTA/MDpFKncvbSxBPUUpOih3PDAmJihiPS1iKSxfPWIsQT13PT09MD8wOmIqbS93KSx7eDpmK18seTpwK0F9fSxraD17bm9kZTpBJGUsY2lyY2xlOkwkZSxlbGxpcHNlOnBCdCxwb2x5Z29uOkQkZSxyZWN0Ol9GfSxJJGU9YXN5bmMoaSxhKT0+e2EudXNlSHRtbExhYmVsc3x8T2UoKS5mbG93Y2hhcnQuaHRtbExhYmVsc3x8KGEuY2VudGVyTGFiZWw9ITApO2NvbnN0e3NoYXBlU3ZnOnAsYmJveDp3LGhhbGZQYWRkaW5nOm19PWF3YWl0IE5kKGksYSwibm9kZSAiK2EuY2xhc3NlcywhMCk7VXQuaW5mbygiQ2xhc3NlcyA9ICIsYS5jbGFzc2VzKTtjb25zdCBiPXAuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGIuYXR0cigicngiLGEucngpLmF0dHIoInJ5IixhLnJ5KS5hdHRyKCJ4Iiwtdy53aWR0aC8yLW0pLmF0dHIoInkiLC13LmhlaWdodC8yLW0pLmF0dHIoIndpZHRoIix3LndpZHRoK2EucGFkZGluZykuYXR0cigiaGVpZ2h0Iix3LmhlaWdodCthLnBhZGRpbmcpLHRmKGEsYiksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIGtoLnJlY3QoYSxFKX0scH0sd0J0PWk9Pmk/IiAiK2k6IiIsamI9KGksYSk9PmAke2F8fCJub2RlIGRlZmF1bHQifSR7d0J0KGkuY2xhc3Nlcyl9ICR7d0J0KGkuY2xhc3MpfWAsdkJ0PWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgTmQoaSxhLGpiKGEsdm9pZCAwKSwhMCksdz1wLndpZHRoK2EucGFkZGluZyxtPXAuaGVpZ2h0K2EucGFkZGluZyxiPXcrbSxFPVt7eDpiLzIseTowfSx7eDpiLHk6LWIvMn0se3g6Yi8yLHk6LWJ9LHt4OjAseTotYi8yfV07VXQuaW5mbygiUXVlc3Rpb24gbWFpbiAoQ2lyY2xlKSIpO2NvbnN0IF89RjUoZixiLGIsRSk7cmV0dXJuIF8uYXR0cigic3R5bGUiLGEuc3R5bGUpLHRmKGEsXyksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oQSl7cmV0dXJuIFV0Lndhcm4oIkludGVyc2VjdCBjYWxsZWQiKSxraC5wb2x5Z29uKGEsRSxBKX0sZn0sTyRlPShpLGEpPT57Y29uc3QgZj1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLHA9Mjgsdz1be3g6MCx5OnAvMn0se3g6cC8yLHk6MH0se3g6MCx5Oi1wLzJ9LHt4Oi1wLzIseTowfV07cmV0dXJuIGYuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIix3Lm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi54KyIsIitiLnl9KS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMjgpLmF0dHIoImhlaWdodCIsMjgpLGEud2lkdGg9MjgsYS5oZWlnaHQ9MjgsYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGtoLmNpcmNsZShhLDE0LGIpfSxmfSxQJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PTQsbT1wLmhlaWdodCthLnBhZGRpbmcsYj1tL3csRT1wLndpZHRoKzIqYithLnBhZGRpbmcsXz1be3g6Yix5OjB9LHt4OkUtYix5OjB9LHt4OkUseTotbS8yfSx7eDpFLWIseTotbX0se3g6Yix5Oi1tfSx7eDowLHk6LW0vMn1dLEE9RjUoZixFLG0sXyk7cmV0dXJuIEEuYXR0cigic3R5bGUiLGEuc3R5bGUpLHRmKGEsQSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oSSl7cmV0dXJuIGtoLnBvbHlnb24oYSxfLEkpfSxmfSxGJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Oi1tLzIseTowfSx7eDp3LHk6MH0se3g6dyx5Oi1tfSx7eDotbS8yLHk6LW19LHt4OjAseTotbS8yfV07cmV0dXJuIEY1KGYsdyxtLGIpLmF0dHIoInN0eWxlIixhLnN0eWxlKSxhLndpZHRoPXcrbSxhLmhlaWdodD1tLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiBraC5wb2x5Z29uKGEsYixfKX0sZn0sTiRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgTmQoaSxhLGpiKGEpLCEwKSx3PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Oi0yKm0vNix5OjB9LHt4OnctbS82LHk6MH0se3g6dysyKm0vNix5Oi1tfSx7eDptLzYseTotbX1dLEU9RjUoZix3LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLHRmKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIGtoLnBvbHlnb24oYSxiLF8pfSxmfSxCJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4OjIqbS82LHk6MH0se3g6dyttLzYseTowfSx7eDp3LTIqbS82LHk6LW19LHt4Oi1tLzYseTotbX1dLEU9RjUoZix3LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLHRmKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIGtoLnBvbHlnb24oYSxiLF8pfSxmfSxSJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Oi0yKm0vNix5OjB9LHt4OncrMiptLzYseTowfSx7eDp3LW0vNix5Oi1tfSx7eDptLzYseTotbX1dLEU9RjUoZix3LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLHRmKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIGtoLnBvbHlnb24oYSxiLF8pfSxmfSxqJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4Om0vNix5OjB9LHt4OnctbS82LHk6MH0se3g6dysyKm0vNix5Oi1tfSx7eDotMiptLzYseTotbX1dLEU9RjUoZix3LG0sYik7cmV0dXJuIEUuYXR0cigic3R5bGUiLGEuc3R5bGUpLHRmKGEsRSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIGtoLnBvbHlnb24oYSxiLF8pfSxmfSwkJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PXAud2lkdGgrYS5wYWRkaW5nLG09cC5oZWlnaHQrYS5wYWRkaW5nLGI9W3t4OjAseTowfSx7eDp3K20vMix5OjB9LHt4OncseTotbS8yfSx7eDp3K20vMix5Oi1tfSx7eDowLHk6LW19XSxFPUY1KGYsdyxtLGIpO3JldHVybiBFLmF0dHIoInN0eWxlIixhLnN0eWxlKSx0ZihhLEUpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiBraC5wb2x5Z29uKGEsYixfKX0sZn0seiRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgTmQoaSxhLGpiKGEsdm9pZCAwKSwhMCksdz1wLndpZHRoK2EucGFkZGluZyxtPXcvMixiPW0vKDIuNSt3LzUwKSxFPXAuaGVpZ2h0K2IrYS5wYWRkaW5nLF89Ik0gMCwiK2IrIiBhICIrbSsiLCIrYisiIDAsMCwwICIrdysiIDAgYSAiK20rIiwiK2IrIiAwLDAsMCAiKy13KyIgMCBsIDAsIitFKyIgYSAiK20rIiwiK2IrIiAwLDAsMCAiK3crIiAwIGwgMCwiKy1FLEE9Zi5hdHRyKCJsYWJlbC1vZmZzZXQteSIsYikuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoImQiLF8pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy13LzIrIiwiKy0oRS8yK2IpKyIpIik7cmV0dXJuIHRmKGEsQSksYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oSSl7Y29uc3QgQj1raC5yZWN0KGEsSSksTj1CLngtYS54O2lmKG0hPTAmJihNYXRoLmFicyhOKTxhLndpZHRoLzJ8fE1hdGguYWJzKE4pPT1hLndpZHRoLzImJk1hdGguYWJzKEIueS1hLnkpPmEuaGVpZ2h0LzItYikpe2xldCBSPWIqYiooMS1OKk4vKG0qbSkpO1IhPTAmJihSPU1hdGguc3FydChSKSksUj1iLVIsSS55LWEueT4wJiYoUj0tUiksQi55Kz1SfXJldHVybiBCfSxmfSxxJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwLGhhbGZQYWRkaW5nOnd9PWF3YWl0IE5kKGksYSwibm9kZSAiK2EuY2xhc3NlcysiICIrYS5jbGFzcywhMCksbT1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGI9cC53aWR0aCthLnBhZGRpbmcsRT1wLmhlaWdodCthLnBhZGRpbmc7aWYobS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixhLnN0eWxlKS5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoIngiLC1wLndpZHRoLzItdykuYXR0cigieSIsLXAuaGVpZ2h0LzItdykuYXR0cigid2lkdGgiLGIpLmF0dHIoImhlaWdodCIsRSksYS5wcm9wcyl7Y29uc3QgXz1uZXcgU2V0KE9iamVjdC5rZXlzKGEucHJvcHMpKTthLnByb3BzLmJvcmRlcnMmJihtQnQobSxhLnByb3BzLmJvcmRlcnMsYixFKSxfLmRlbGV0ZSgiYm9yZGVycyIpKSxfLmZvckVhY2goQT0+e1V0Lndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke0F9YCl9KX1yZXR1cm4gdGYoYSxtKSxhLmludGVyc2VjdD1mdW5jdGlvbihfKXtyZXR1cm4ga2gucmVjdChhLF8pfSxmfSxIJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmZ9PWF3YWl0IE5kKGksYSwibGFiZWwiLCEwKTtVdC50cmFjZSgiQ2xhc3NlcyA9ICIsYS5jbGFzcyk7Y29uc3QgcD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHc9MCxtPTA7aWYocC5hdHRyKCJ3aWR0aCIsdykuYXR0cigiaGVpZ2h0IixtKSxmLmF0dHIoImNsYXNzIiwibGFiZWwgZWRnZUxhYmVsIiksYS5wcm9wcyl7Y29uc3QgYj1uZXcgU2V0KE9iamVjdC5rZXlzKGEucHJvcHMpKTthLnByb3BzLmJvcmRlcnMmJihtQnQocCxhLnByb3BzLmJvcmRlcnMsdyxtKSxiLmRlbGV0ZSgiYm9yZGVycyIpKSxiLmZvckVhY2goRT0+e1V0Lndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke0V9YCl9KX1yZXR1cm4gdGYoYSxwKSxhLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4ga2gucmVjdChhLGIpfSxmfTtmdW5jdGlvbiBtQnQoaSxhLGYscCl7Y29uc3Qgdz1bXSxtPUU9Pnt3LnB1c2goRSwwKX0sYj1FPT57dy5wdXNoKDAsRSl9O2EuaW5jbHVkZXMoInQiKT8oVXQuZGVidWcoImFkZCB0b3AgYm9yZGVyIiksbShmKSk6YihmKSxhLmluY2x1ZGVzKCJyIik/KFV0LmRlYnVnKCJhZGQgcmlnaHQgYm9yZGVyIiksbShwKSk6YihwKSxhLmluY2x1ZGVzKCJiIik/KFV0LmRlYnVnKCJhZGQgYm90dG9tIGJvcmRlciIpLG0oZikpOmIoZiksYS5pbmNsdWRlcygibCIpPyhVdC5kZWJ1ZygiYWRkIGxlZnQgYm9yZGVyIiksbShwKSk6YihwKSxpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLHcuam9pbigiICIpKX1jb25zdCBWJGU9KGksYSk9PntsZXQgZjthLmNsYXNzZXM/Zj0ibm9kZSAiK2EuY2xhc3NlczpmPSJub2RlIGRlZmF1bHQiO2NvbnN0IHA9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZikuYXR0cigiaWQiLGEuZG9tSWR8fGEuaWQpLHc9cC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxtPXAuaW5zZXJ0KCJsaW5lIiksYj1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxFPWEubGFiZWxUZXh0LmZsYXQ/YS5sYWJlbFRleHQuZmxhdCgpOmEubGFiZWxUZXh0O2xldCBfPSIiO3R5cGVvZiBFPT0ib2JqZWN0Ij9fPUVbMF06Xz1FLFV0LmluZm8oIkxhYmVsIHRleHQgYWJjNzkiLF8sRSx0eXBlb2YgRT09Im9iamVjdCIpO2NvbnN0IEE9Yi5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3AoXyxhLmxhYmVsU3R5bGUsITAsITApKTtsZXQgST17d2lkdGg6MCxoZWlnaHQ6MH07aWYobzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IFc9QS5jaGlsZHJlblswXSxldD15cihBKTtJPVcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZXQuYXR0cigid2lkdGgiLEkud2lkdGgpLGV0LmF0dHIoImhlaWdodCIsSS5oZWlnaHQpfVV0LmluZm8oIlRleHQgMiIsRSk7Y29uc3QgQj1FLnNsaWNlKDEsRS5sZW5ndGgpO2xldCBOPUEuZ2V0QkJveCgpO2NvbnN0IFI9Yi5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3AoQi5qb2luP0Iuam9pbigiPGJyLz4iKTpCLGEubGFiZWxTdHlsZSwhMCwhMCkpO2lmKG8xKE9lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBXPVIuY2hpbGRyZW5bMF0sZXQ9eXIoUik7ST1XLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGV0LmF0dHIoIndpZHRoIixJLndpZHRoKSxldC5hdHRyKCJoZWlnaHQiLEkuaGVpZ2h0KX1jb25zdCB6PWEucGFkZGluZy8yO3JldHVybiB5cihSKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKEkud2lkdGg+Ti53aWR0aD8wOihOLndpZHRoLUkud2lkdGgpLzIpKyIsICIrKE4uaGVpZ2h0K3orNSkrIikiKSx5cihBKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKEkud2lkdGg8Ti53aWR0aD8wOi0oTi53aWR0aC1JLndpZHRoKS8yKSsiLCAwKSIpLEk9Yi5ub2RlKCkuZ2V0QkJveCgpLGIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLUkud2lkdGgvMisiLCAiKygtSS5oZWlnaHQvMi16KzMpKyIpIiksdy5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigieCIsLUkud2lkdGgvMi16KS5hdHRyKCJ5IiwtSS5oZWlnaHQvMi16KS5hdHRyKCJ3aWR0aCIsSS53aWR0aCthLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsSS5oZWlnaHQrYS5wYWRkaW5nKSxtLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtSS53aWR0aC8yLXopLmF0dHIoIngyIixJLndpZHRoLzIreikuYXR0cigieTEiLC1JLmhlaWdodC8yLXorTi5oZWlnaHQreikuYXR0cigieTIiLC1JLmhlaWdodC8yLXorTi5oZWlnaHQreiksdGYoYSx3KSxhLmludGVyc2VjdD1mdW5jdGlvbihXKXtyZXR1cm4ga2gucmVjdChhLFcpfSxwfSxHJGU9YXN5bmMoaSxhKT0+e2NvbnN0e3NoYXBlU3ZnOmYsYmJveDpwfT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSx3PXAuaGVpZ2h0K2EucGFkZGluZyxtPXAud2lkdGgrdy80K2EucGFkZGluZyxiPWYuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoInJ4Iix3LzIpLmF0dHIoInJ5Iix3LzIpLmF0dHIoIngiLC1tLzIpLmF0dHIoInkiLC13LzIpLmF0dHIoIndpZHRoIixtKS5hdHRyKCJoZWlnaHQiLHcpO3JldHVybiB0ZihhLGIpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBraC5yZWN0KGEsRSl9LGZ9LFUkZT1hc3luYyhpLGEpPT57Y29uc3R7c2hhcGVTdmc6ZixiYm94OnAsaGFsZlBhZGRpbmc6d309YXdhaXQgTmQoaSxhLGpiKGEsdm9pZCAwKSwhMCksbT1mLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG0uYXR0cigic3R5bGUiLGEuc3R5bGUpLmF0dHIoInJ4IixhLnJ4KS5hdHRyKCJyeSIsYS5yeSkuYXR0cigiciIscC53aWR0aC8yK3cpLmF0dHIoIndpZHRoIixwLndpZHRoK2EucGFkZGluZykuYXR0cigiaGVpZ2h0IixwLmhlaWdodCthLnBhZGRpbmcpLFV0LmluZm8oIkNpcmNsZSBtYWluIiksdGYoYSxtKSxhLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gVXQuaW5mbygiQ2lyY2xlIGludGVyc2VjdCIsYSxwLndpZHRoLzIrdyxiKSxraC5jaXJjbGUoYSxwLndpZHRoLzIrdyxiKX0sZn0sVyRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cCxoYWxmUGFkZGluZzp3fT1hd2FpdCBOZChpLGEsamIoYSx2b2lkIDApLCEwKSxtPTUsYj1mLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpLEU9Yi5pbnNlcnQoImNpcmNsZSIpLF89Yi5pbnNlcnQoImNpcmNsZSIpO3JldHVybiBiLmF0dHIoImNsYXNzIixhLmNsYXNzKSxFLmF0dHIoInN0eWxlIixhLnN0eWxlKS5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoInIiLHAud2lkdGgvMit3K20pLmF0dHIoIndpZHRoIixwLndpZHRoK2EucGFkZGluZyttKjIpLmF0dHIoImhlaWdodCIscC5oZWlnaHQrYS5wYWRkaW5nK20qMiksXy5hdHRyKCJzdHlsZSIsYS5zdHlsZSkuYXR0cigicngiLGEucngpLmF0dHIoInJ5IixhLnJ5KS5hdHRyKCJyIixwLndpZHRoLzIrdykuYXR0cigid2lkdGgiLHAud2lkdGgrYS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHAuaGVpZ2h0K2EucGFkZGluZyksVXQuaW5mbygiRG91YmxlQ2lyY2xlIG1haW4iKSx0ZihhLEUpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiBVdC5pbmZvKCJEb3VibGVDaXJjbGUgaW50ZXJzZWN0IixhLHAud2lkdGgvMit3K20sQSksa2guY2lyY2xlKGEscC53aWR0aC8yK3crbSxBKX0sZn0sWSRlPWFzeW5jKGksYSk9Pntjb25zdHtzaGFwZVN2ZzpmLGJib3g6cH09YXdhaXQgTmQoaSxhLGpiKGEsdm9pZCAwKSwhMCksdz1wLndpZHRoK2EucGFkZGluZyxtPXAuaGVpZ2h0K2EucGFkZGluZyxiPVt7eDowLHk6MH0se3g6dyx5OjB9LHt4OncseTotbX0se3g6MCx5Oi1tfSx7eDowLHk6MH0se3g6LTgseTowfSx7eDp3KzgseTowfSx7eDp3KzgseTotbX0se3g6LTgseTotbX0se3g6LTgseTowfV0sRT1GNShmLHcsbSxiKTtyZXR1cm4gRS5hdHRyKCJzdHlsZSIsYS5zdHlsZSksdGYoYSxFKSxhLmludGVyc2VjdD1mdW5jdGlvbihfKXtyZXR1cm4ga2gucG9seWdvbihhLGIsXyl9LGZ9LEskZT0oaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKSxwPWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gcC5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSx0ZihhLHApLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKHcpe3JldHVybiBraC5jaXJjbGUoYSw3LHcpfSxmfSx5QnQ9KGksYSxmKT0+e2NvbnN0IHA9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKTtsZXQgdz03MCxtPTEwO2Y9PT0iTFIiJiYodz0xMCxtPTcwKTtjb25zdCBiPXAuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTEqdy8yKS5hdHRyKCJ5IiwtMSptLzIpLmF0dHIoIndpZHRoIix3KS5hdHRyKCJoZWlnaHQiLG0pLmF0dHIoImNsYXNzIiwiZm9yay1qb2luIik7cmV0dXJuIHRmKGEsYiksYS5oZWlnaHQ9YS5oZWlnaHQrYS5wYWRkaW5nLzIsYS53aWR0aD1hLndpZHRoK2EucGFkZGluZy8yLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBraC5yZWN0KGEsRSl9LHB9LHhCdD17cmhvbWJ1czp2QnQscXVlc3Rpb246dkJ0LHJlY3Q6cSRlLGxhYmVsUmVjdDpIJGUscmVjdFdpdGhUaXRsZTpWJGUsY2hvaWNlOk8kZSxjaXJjbGU6VSRlLGRvdWJsZWNpcmNsZTpXJGUsc3RhZGl1bTpHJGUsaGV4YWdvbjpQJGUscmVjdF9sZWZ0X2ludl9hcnJvdzpGJGUsbGVhbl9yaWdodDpOJGUsbGVhbl9sZWZ0OkIkZSx0cmFwZXpvaWQ6UiRlLGludl90cmFwZXpvaWQ6aiRlLHJlY3RfcmlnaHRfaW52X2Fycm93OiQkZSxjeWxpbmRlcjp6JGUsc3RhcnQ6SyRlLGVuZDooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKSxwPWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSx3PWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdy5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxwLmF0dHIoImNsYXNzIiwic3RhdGUtZW5kIikuYXR0cigiciIsNSkuYXR0cigid2lkdGgiLDEwKS5hdHRyKCJoZWlnaHQiLDEwKSx0ZihhLHcpLGEuaW50ZXJzZWN0PWZ1bmN0aW9uKG0pe3JldHVybiBraC5jaXJjbGUoYSw3LG0pfSxmfSxub3RlOkkkZSxzdWJyb3V0aW5lOlkkZSxmb3JrOnlCdCxqb2luOnlCdCxjbGFzc19ib3g6KGksYSk9Pntjb25zdCBmPWEucGFkZGluZy8yLHA9NCx3PTg7bGV0IG07YS5jbGFzc2VzP209Im5vZGUgIithLmNsYXNzZXM6bT0ibm9kZSBkZWZhdWx0Ijtjb25zdCBiPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG0pLmF0dHIoImlkIixhLmRvbUlkfHxhLmlkKSxFPWIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksXz1iLmluc2VydCgibGluZSIpLEE9Yi5pbnNlcnQoImxpbmUiKTtsZXQgST0wLEI9cDtjb25zdCBOPWIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2xldCBSPTA7Y29uc3Qgej1hLmNsYXNzRGF0YS5hbm5vdGF0aW9ucyYmYS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0sVz1hLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iwqsiK2EuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKyLCuyI6IiIsZXQ9Ti5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3AoVyxhLmxhYmVsU3R5bGUsITAsITApKTtsZXQgc3Q9ZXQuZ2V0QkJveCgpO2lmKG8xKE9lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCB2dD1ldC5jaGlsZHJlblswXSxYPXlyKGV0KTtzdD12dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxYLmF0dHIoIndpZHRoIixzdC53aWR0aCksWC5hdHRyKCJoZWlnaHQiLHN0LmhlaWdodCl9YS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0mJihCKz1zdC5oZWlnaHQrcCxJKz1zdC53aWR0aCk7bGV0IGF0PWEuY2xhc3NEYXRhLmxhYmVsO2EuY2xhc3NEYXRhLnR5cGUhPT12b2lkIDAmJmEuY2xhc3NEYXRhLnR5cGUhPT0iIiYmKE9lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/YXQrPSImbHQ7IithLmNsYXNzRGF0YS50eXBlKyImZ3Q7IjphdCs9IjwiK2EuY2xhc3NEYXRhLnR5cGUrIj4iKTtjb25zdCBidD1OLm5vZGUoKS5hcHBlbmRDaGlsZChncChhdCxhLmxhYmVsU3R5bGUsITAsITApKTt5cihidCkuYXR0cigiY2xhc3MiLCJjbGFzc1RpdGxlIik7bGV0IG10PWJ0LmdldEJCb3goKTtpZihvMShPZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgdnQ9YnQuY2hpbGRyZW5bMF0sWD15cihidCk7bXQ9dnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksWC5hdHRyKCJ3aWR0aCIsbXQud2lkdGgpLFguYXR0cigiaGVpZ2h0IixtdC5oZWlnaHQpfUIrPW10LmhlaWdodCtwLG10LndpZHRoPkkmJihJPW10LndpZHRoKTtjb25zdCB5dD1bXTthLmNsYXNzRGF0YS5tZW1iZXJzLmZvckVhY2godnQ9Pntjb25zdCBYPXZ0LmdldERpc3BsYXlEZXRhaWxzKCk7bGV0IHB0PVguZGlzcGxheVRleHQ7T2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKHB0PXB0LnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpKTtjb25zdCBVPU4ubm9kZSgpLmFwcGVuZENoaWxkKGdwKHB0LFguY3NzU3R5bGU/WC5jc3NTdHlsZTphLmxhYmVsU3R5bGUsITAsITApKTtsZXQgVHQ9VS5nZXRCQm94KCk7aWYobzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IG50PVUuY2hpbGRyZW5bMF0sSXQ9eXIoVSk7VHQ9bnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSXQuYXR0cigid2lkdGgiLFR0LndpZHRoKSxJdC5hdHRyKCJoZWlnaHQiLFR0LmhlaWdodCl9VHQud2lkdGg+SSYmKEk9VHQud2lkdGgpLEIrPVR0LmhlaWdodCtwLHl0LnB1c2goVSl9KSxCKz13O2NvbnN0IGZ0PVtdO2lmKGEuY2xhc3NEYXRhLm1ldGhvZHMuZm9yRWFjaCh2dD0+e2NvbnN0IFg9dnQuZ2V0RGlzcGxheURldGFpbHMoKTtsZXQgcHQ9WC5kaXNwbGF5VGV4dDtPZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYocHQ9cHQucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO2NvbnN0IFU9Ti5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3AocHQsWC5jc3NTdHlsZT9YLmNzc1N0eWxlOmEubGFiZWxTdHlsZSwhMCwhMCkpO2xldCBUdD1VLmdldEJCb3goKTtpZihvMShPZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgbnQ9VS5jaGlsZHJlblswXSxJdD15cihVKTtUdD1udC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxJdC5hdHRyKCJ3aWR0aCIsVHQud2lkdGgpLEl0LmF0dHIoImhlaWdodCIsVHQuaGVpZ2h0KX1UdC53aWR0aD5JJiYoST1UdC53aWR0aCksQis9VHQuaGVpZ2h0K3AsZnQucHVzaChVKX0pLEIrPXcseil7bGV0IHZ0PShJLXN0LndpZHRoKS8yO3lyKGV0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKkkvMit2dCkrIiwgIistMSpCLzIrIikiKSxSPXN0LmhlaWdodCtwfWxldCB1dD0oSS1tdC53aWR0aCkvMjtyZXR1cm4geXIoYnQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqSS8yK3V0KSsiLCAiKygtMSpCLzIrUikrIikiKSxSKz1tdC5oZWlnaHQrcCxfLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtSS8yLWYpLmF0dHIoIngyIixJLzIrZikuYXR0cigieTEiLC1CLzItZit3K1IpLmF0dHIoInkyIiwtQi8yLWYrdytSKSxSKz13LHl0LmZvckVhY2godnQ9Pnt5cih2dCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKy1JLzIrIiwgIisoLTEqQi8yK1Irdy8yKSsiKSIpO2NvbnN0IFg9dnQ9PW51bGw/dm9pZCAwOnZ0LmdldEJCb3goKTtSKz0oKFg9PW51bGw/dm9pZCAwOlguaGVpZ2h0KT8/MCkrcH0pLFIrPXcsQS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLUkvMi1mKS5hdHRyKCJ4MiIsSS8yK2YpLmF0dHIoInkxIiwtQi8yLWYrdytSKS5hdHRyKCJ5MiIsLUIvMi1mK3crUiksUis9dyxmdC5mb3JFYWNoKHZ0PT57eXIodnQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistSS8yKyIsICIrKC0xKkIvMitSKSsiKSIpO2NvbnN0IFg9dnQ9PW51bGw/dm9pZCAwOnZ0LmdldEJCb3goKTtSKz0oKFg9PW51bGw/dm9pZCAwOlguaGVpZ2h0KT8/MCkrcH0pLEUuYXR0cigiY2xhc3MiLCJvdXRlciB0aXRsZS1zdGF0ZSIpLmF0dHIoIngiLC1JLzItZikuYXR0cigieSIsLShCLzIpLWYpLmF0dHIoIndpZHRoIixJK2EucGFkZGluZykuYXR0cigiaGVpZ2h0IixCK2EucGFkZGluZyksdGYoYSxFKSxhLmludGVyc2VjdD1mdW5jdGlvbih2dCl7cmV0dXJuIGtoLnJlY3QoYSx2dCl9LGJ9fTtsZXQgY0w9e307Y29uc3Qga0J0PWFzeW5jKGksYSxmKT0+e2xldCBwLHc7aWYoYS5saW5rKXtsZXQgbTtPZSgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/bT0iX3RvcCI6YS5saW5rVGFyZ2V0JiYobT1hLmxpbmtUYXJnZXR8fCJfYmxhbmsiKSxwPWkuaW5zZXJ0KCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGEubGluaykuYXR0cigidGFyZ2V0IixtKSx3PWF3YWl0IHhCdFthLnNoYXBlXShwLGEsZil9ZWxzZSB3PWF3YWl0IHhCdFthLnNoYXBlXShpLGEsZikscD13O3JldHVybiBhLnRvb2x0aXAmJncuYXR0cigidGl0bGUiLGEudG9vbHRpcCksYS5jbGFzcyYmdy5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCAiK2EuY2xhc3MpLGNMW2EuaWRdPXAsYS5oYXZlQ2FsbGJhY2smJmNMW2EuaWRdLmF0dHIoImNsYXNzIixjTFthLmlkXS5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIikscH0sWCRlPShpLGEpPT57Y0xbYS5pZF09aX0sUSRlPSgpPT57Y0w9e319LEVCdD1pPT57Y29uc3QgYT1jTFtpLmlkXTtVdC50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLGkuZGlmZixpLCJ0cmFuc2xhdGUoIisoaS54LWkud2lkdGgvMi01KSsiLCAiK2kud2lkdGgvMisiKSIpO2NvbnN0IGY9OCxwPWkuZGlmZnx8MDtyZXR1cm4gaS5jbHVzdGVyTm9kZT9hLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhpLngrcC1pLndpZHRoLzIpKyIsICIrKGkueS1pLmhlaWdodC8yLWYpKyIpIik6YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLngrIiwgIitpLnkrIikiKSxwfSxaJGU9e3JlY3Q6KGksYSk9PntVdC5pbmZvKCJDcmVhdGluZyBzdWJncmFwaCByZWN0IGZvciAiLGEuaWQsYSk7Y29uc3QgZj1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIrKGEuY2xhc3M/IiAiK2EuY2xhc3M6IiIpKS5hdHRyKCJpZCIsYS5pZCkscD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHc9bzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscyksbT1mLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLGI9YS5sYWJlbFR5cGU9PT0ibWFya2Rvd24iP0VZKG0sYS5sYWJlbFRleHQse3N0eWxlOmEubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOnd9KTptLm5vZGUoKS5hcHBlbmRDaGlsZChncChhLmxhYmVsVGV4dCxhLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSk7bGV0IEU9Yi5nZXRCQm94KCk7aWYobzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IE49Yi5jaGlsZHJlblswXSxSPXlyKGIpO0U9Ti5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxSLmF0dHIoIndpZHRoIixFLndpZHRoKSxSLmF0dHIoImhlaWdodCIsRS5oZWlnaHQpfWNvbnN0IF89MCphLnBhZGRpbmcsQT1fLzIsST1hLndpZHRoPD1FLndpZHRoK18/RS53aWR0aCtfOmEud2lkdGg7YS53aWR0aDw9RS53aWR0aCtfP2EuZGlmZj0oRS53aWR0aC1hLndpZHRoKS8yLWEucGFkZGluZy8yOmEuZGlmZj0tYS5wYWRkaW5nLzIsVXQudHJhY2UoIkRhdGEgIixhLEpTT04uc3RyaW5naWZ5KGEpKSxwLmF0dHIoInN0eWxlIixhLnN0eWxlKS5hdHRyKCJyeCIsYS5yeCkuYXR0cigicnkiLGEucnkpLmF0dHIoIngiLGEueC1JLzIpLmF0dHIoInkiLGEueS1hLmhlaWdodC8yLUEpLmF0dHIoIndpZHRoIixJKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K18pLHc/bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoYS54LUUud2lkdGgvMikrIiwgIisoYS55LWEuaGVpZ2h0LzIpKyIpIik6bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLngrIiwgIisoYS55LWEuaGVpZ2h0LzIpKyIpIik7Y29uc3QgQj1wLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGEud2lkdGg9Qi53aWR0aCxhLmhlaWdodD1CLmhlaWdodCxhLmludGVyc2VjdD1mdW5jdGlvbihOKXtyZXR1cm4gX0YoYSxOKX0sZn0scm91bmRlZFdpdGhUaXRsZTooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsYS5jbGFzc2VzKS5hdHRyKCJpZCIsYS5pZCkscD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHc9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxtPWYuYXBwZW5kKCJyZWN0IiksYj13Lm5vZGUoKS5hcHBlbmRDaGlsZChncChhLmxhYmVsVGV4dCxhLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSk7bGV0IEU9Yi5nZXRCQm94KCk7aWYobzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IE49Yi5jaGlsZHJlblswXSxSPXlyKGIpO0U9Ti5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxSLmF0dHIoIndpZHRoIixFLndpZHRoKSxSLmF0dHIoImhlaWdodCIsRS5oZWlnaHQpfUU9Yi5nZXRCQm94KCk7Y29uc3QgXz0wKmEucGFkZGluZyxBPV8vMixJPWEud2lkdGg8PUUud2lkdGgrYS5wYWRkaW5nP0Uud2lkdGgrYS5wYWRkaW5nOmEud2lkdGg7YS53aWR0aDw9RS53aWR0aCthLnBhZGRpbmc/YS5kaWZmPShFLndpZHRoK2EucGFkZGluZyowLWEud2lkdGgpLzI6YS5kaWZmPS1hLnBhZGRpbmcvMixwLmF0dHIoImNsYXNzIiwib3V0ZXIiKS5hdHRyKCJ4IixhLngtSS8yLUEpLmF0dHIoInkiLGEueS1hLmhlaWdodC8yLUEpLmF0dHIoIndpZHRoIixJK18pLmF0dHIoImhlaWdodCIsYS5oZWlnaHQrXyksbS5hdHRyKCJjbGFzcyIsImlubmVyIikuYXR0cigieCIsYS54LUkvMi1BKS5hdHRyKCJ5IixhLnktYS5oZWlnaHQvMi1BK0UuaGVpZ2h0LTEpLmF0dHIoIndpZHRoIixJK18pLmF0dHIoImhlaWdodCIsYS5oZWlnaHQrXy1FLmhlaWdodC0zKSx3LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhhLngtRS53aWR0aC8yKSsiLCAiKyhhLnktYS5oZWlnaHQvMi1hLnBhZGRpbmcvMysobzEoT2UoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk/NTozKSkrIikiKTtjb25zdCBCPXAubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gYS5oZWlnaHQ9Qi5oZWlnaHQsYS5pbnRlcnNlY3Q9ZnVuY3Rpb24oTil7cmV0dXJuIF9GKGEsTil9LGZ9LG5vdGVHcm91cDooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vdGUtY2x1c3RlciIpLmF0dHIoImlkIixhLmlkKSxwPWYuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksdz0wKmEucGFkZGluZyxtPXcvMjtwLmF0dHIoInJ4IixhLnJ4KS5hdHRyKCJyeSIsYS5yeSkuYXR0cigieCIsYS54LWEud2lkdGgvMi1tKS5hdHRyKCJ5IixhLnktYS5oZWlnaHQvMi1tKS5hdHRyKCJ3aWR0aCIsYS53aWR0aCt3KS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K3cpLmF0dHIoImZpbGwiLCJub25lIik7Y29uc3QgYj1wLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGEud2lkdGg9Yi53aWR0aCxhLmhlaWdodD1iLmhlaWdodCxhLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gX0YoYSxFKX0sZn0sZGl2aWRlcjooaSxhKT0+e2NvbnN0IGY9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsYS5jbGFzc2VzKS5hdHRyKCJpZCIsYS5pZCkscD1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHc9MCphLnBhZGRpbmcsbT13LzI7cC5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixhLngtYS53aWR0aC8yLW0pLmF0dHIoInkiLGEueS1hLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsYS53aWR0aCt3KS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0K3cpO2NvbnN0IGI9cC5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBhLndpZHRoPWIud2lkdGgsYS5oZWlnaHQ9Yi5oZWlnaHQsYS5kaWZmPS1hLnBhZGRpbmcvMixhLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gX0YoYSxFKX0sZn19O2xldCBUQnQ9e307Y29uc3QgSiRlPShpLGEpPT57VXQudHJhY2UoIkluc2VydGluZyBjbHVzdGVyIik7Y29uc3QgZj1hLnNoYXBlfHwicmVjdCI7VEJ0W2EuaWRdPVokZVtmXShpLGEpfSx0emU9KCk9PntUQnQ9e319LHZrPXthZ2dyZWdhdGlvbjoxOCxleHRlbnNpb246MTgsY29tcG9zaXRpb246MTgsZGVwZW5kZW5jeTo2LGxvbGxpcG9wOjEzLjUsYXJyb3dfcG9pbnQ6NS4zfTtmdW5jdGlvbiBfWShpLGEpe2k9U1koaSksYT1TWShhKTtjb25zdFtmLHBdPVtpLngsaS55XSxbdyxtXT1bYS54LGEueV0sYj13LWYsRT1tLXA7cmV0dXJue2FuZ2xlOk1hdGguYXRhbihFL2IpLGRlbHRhWDpiLGRlbHRhWTpFfX1jb25zdCBTWT1pPT5BcnJheS5pc0FycmF5KGkpP3t4OmlbMF0seTppWzFdfTppLENCdD1pPT4oe3g6ZnVuY3Rpb24oYSxmLHApe2xldCB3PTA7aWYoZj09PTAmJk9iamVjdC5oYXNPd24odmssaS5hcnJvd1R5cGVTdGFydCkpe2NvbnN0e2FuZ2xlOm0sZGVsdGFYOmJ9PV9ZKHBbMF0scFsxXSk7dz12a1tpLmFycm93VHlwZVN0YXJ0XSpNYXRoLmNvcyhtKSooYj49MD8xOi0xKX1lbHNlIGlmKGY9PT1wLmxlbmd0aC0xJiZPYmplY3QuaGFzT3duKHZrLGkuYXJyb3dUeXBlRW5kKSl7Y29uc3R7YW5nbGU6bSxkZWx0YVg6Yn09X1kocFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTJdKTt3PXZrW2kuYXJyb3dUeXBlRW5kXSpNYXRoLmNvcyhtKSooYj49MD8xOi0xKX1yZXR1cm4gU1koYSkueCt3fSx5OmZ1bmN0aW9uKGEsZixwKXtsZXQgdz0wO2lmKGY9PT0wJiZPYmplY3QuaGFzT3duKHZrLGkuYXJyb3dUeXBlU3RhcnQpKXtjb25zdHthbmdsZTptLGRlbHRhWTpifT1fWShwWzBdLHBbMV0pO3c9dmtbaS5hcnJvd1R5cGVTdGFydF0qTWF0aC5hYnMoTWF0aC5zaW4obSkpKihiPj0wPzE6LTEpfWVsc2UgaWYoZj09PXAubGVuZ3RoLTEmJk9iamVjdC5oYXNPd24odmssaS5hcnJvd1R5cGVFbmQpKXtjb25zdHthbmdsZTptLGRlbHRhWTpifT1fWShwW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMl0pO3c9dmtbaS5hcnJvd1R5cGVFbmRdKk1hdGguYWJzKE1hdGguc2luKG0pKSooYj49MD8xOi0xKX1yZXR1cm4gU1koYSkueSt3fX0pO2xldCBBWT17fSxCZD17fTtjb25zdCBlemU9KCk9PntBWT17fSxCZD17fX0sX0J0PShpLGEpPT57Y29uc3QgZj1vMShPZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSxwPWEubGFiZWxUeXBlPT09Im1hcmtkb3duIj9FWShpLGEubGFiZWwse3N0eWxlOmEubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOmYsYWRkU3ZnQmFja2dyb3VuZDohMH0pOmdwKGEubGFiZWwsYS5sYWJlbFN0eWxlKTtVdC5pbmZvKCJhYmM4MiIsYSxhLmxhYmVsVHlwZSk7Y29uc3Qgdz1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIiksbT13Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTttLm5vZGUoKS5hcHBlbmRDaGlsZChwKTtsZXQgYj1wLmdldEJCb3goKTtpZihmKXtjb25zdCBfPXAuY2hpbGRyZW5bMF0sQT15cihwKTtiPV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksQS5hdHRyKCJ3aWR0aCIsYi53aWR0aCksQS5hdHRyKCJoZWlnaHQiLGIuaGVpZ2h0KX1tLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1iLndpZHRoLzIrIiwgIistYi5oZWlnaHQvMisiKSIpLEFZW2EuaWRdPXcsYS53aWR0aD1iLndpZHRoLGEuaGVpZ2h0PWIuaGVpZ2h0O2xldCBFO2lmKGEuc3RhcnRMYWJlbExlZnQpe2NvbnN0IF89Z3AoYS5zdGFydExhYmVsTGVmdCxhLmxhYmVsU3R5bGUpLEE9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxJPUEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO0U9SS5ub2RlKCkuYXBwZW5kQ2hpbGQoXyk7Y29uc3QgQj1fLmdldEJCb3goKTtJLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1CLndpZHRoLzIrIiwgIistQi5oZWlnaHQvMisiKSIpLEJkW2EuaWRdfHwoQmRbYS5pZF09e30pLEJkW2EuaWRdLnN0YXJ0TGVmdD1BLExZKEUsYS5zdGFydExhYmVsTGVmdCl9aWYoYS5zdGFydExhYmVsUmlnaHQpe2NvbnN0IF89Z3AoYS5zdGFydExhYmVsUmlnaHQsYS5sYWJlbFN0eWxlKSxBPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksST1BLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtFPUEubm9kZSgpLmFwcGVuZENoaWxkKF8pLEkubm9kZSgpLmFwcGVuZENoaWxkKF8pO2NvbnN0IEI9Xy5nZXRCQm94KCk7SS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistQi53aWR0aC8yKyIsICIrLUIuaGVpZ2h0LzIrIikiKSxCZFthLmlkXXx8KEJkW2EuaWRdPXt9KSxCZFthLmlkXS5zdGFydFJpZ2h0PUEsTFkoRSxhLnN0YXJ0TGFiZWxSaWdodCl9aWYoYS5lbmRMYWJlbExlZnQpe2NvbnN0IF89Z3AoYS5lbmRMYWJlbExlZnQsYS5sYWJlbFN0eWxlKSxBPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksST1BLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtFPUkubm9kZSgpLmFwcGVuZENoaWxkKF8pO2NvbnN0IEI9Xy5nZXRCQm94KCk7SS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistQi53aWR0aC8yKyIsICIrLUIuaGVpZ2h0LzIrIikiKSxBLm5vZGUoKS5hcHBlbmRDaGlsZChfKSxCZFthLmlkXXx8KEJkW2EuaWRdPXt9KSxCZFthLmlkXS5lbmRMZWZ0PUEsTFkoRSxhLmVuZExhYmVsTGVmdCl9aWYoYS5lbmRMYWJlbFJpZ2h0KXtjb25zdCBfPWdwKGEuZW5kTGFiZWxSaWdodCxhLmxhYmVsU3R5bGUpLEE9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxJPUEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO0U9SS5ub2RlKCkuYXBwZW5kQ2hpbGQoXyk7Y29uc3QgQj1fLmdldEJCb3goKTtJLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1CLndpZHRoLzIrIiwgIistQi5oZWlnaHQvMisiKSIpLEEubm9kZSgpLmFwcGVuZENoaWxkKF8pLEJkW2EuaWRdfHwoQmRbYS5pZF09e30pLEJkW2EuaWRdLmVuZFJpZ2h0PUEsTFkoRSxhLmVuZExhYmVsUmlnaHQpfXJldHVybiBwfTtmdW5jdGlvbiBMWShpLGEpe09lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJmkmJihpLnN0eWxlLndpZHRoPWEubGVuZ3RoKjkrInB4IixpLnN0eWxlLmhlaWdodD0iMTJweCIpfWNvbnN0IG56ZT0oaSxhKT0+e1V0LmluZm8oIk1vdmluZyBsYWJlbCBhYmM3OCAiLGkuaWQsaS5sYWJlbCxBWVtpLmlkXSk7bGV0IGY9YS51cGRhdGVkUGF0aD9hLnVwZGF0ZWRQYXRoOmEub3JpZ2luYWxQYXRoO2lmKGkubGFiZWwpe2NvbnN0IHA9QVlbaS5pZF07bGV0IHc9aS54LG09aS55O2lmKGYpe2NvbnN0IGI9JGEuY2FsY0xhYmVsUG9zaXRpb24oZik7VXQuaW5mbygiTW92aW5nIGxhYmVsICIraS5sYWJlbCsiIGZyb20gKCIsdywiLCIsbSwiKSB0byAoIixiLngsIiwiLGIueSwiKSBhYmM3OCIpLGEudXBkYXRlZFBhdGgmJih3PWIueCxtPWIueSl9cC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit3KyIsICIrbSsiKSIpfWlmKGkuc3RhcnRMYWJlbExlZnQpe2NvbnN0IHA9QmRbaS5pZF0uc3RhcnRMZWZ0O2xldCB3PWkueCxtPWkueTtpZihmKXtjb25zdCBiPSRhLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oaS5hcnJvd1R5cGVTdGFydD8xMDowLCJzdGFydF9sZWZ0IixmKTt3PWIueCxtPWIueX1wLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3crIiwgIittKyIpIil9aWYoaS5zdGFydExhYmVsUmlnaHQpe2NvbnN0IHA9QmRbaS5pZF0uc3RhcnRSaWdodDtsZXQgdz1pLngsbT1pLnk7aWYoZil7Y29uc3QgYj0kYS5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfcmlnaHQiLGYpO3c9Yi54LG09Yi55fXAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdysiLCAiK20rIikiKX1pZihpLmVuZExhYmVsTGVmdCl7Y29uc3QgcD1CZFtpLmlkXS5lbmRMZWZ0O2xldCB3PWkueCxtPWkueTtpZihmKXtjb25zdCBiPSRhLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oaS5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX2xlZnQiLGYpO3c9Yi54LG09Yi55fXAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdysiLCAiK20rIikiKX1pZihpLmVuZExhYmVsUmlnaHQpe2NvbnN0IHA9QmRbaS5pZF0uZW5kUmlnaHQ7bGV0IHc9aS54LG09aS55O2lmKGYpe2NvbnN0IGI9JGEuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihpLmFycm93VHlwZUVuZD8xMDowLCJlbmRfcmlnaHQiLGYpO3c9Yi54LG09Yi55fXAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdysiLCAiK20rIikiKX19LHJ6ZT0oaSxhKT0+e2NvbnN0IGY9aS54LHA9aS55LHc9TWF0aC5hYnMoYS54LWYpLG09TWF0aC5hYnMoYS55LXApLGI9aS53aWR0aC8yLEU9aS5oZWlnaHQvMjtyZXR1cm4gdz49Ynx8bT49RX0saXplPShpLGEsZik9PntVdC53YXJuKGBpbnRlcnNlY3Rpb24gY2FsYyBhYmM4OToKICBvdXRzaWRlUG9pbnQ6ICR7SlNPTi5zdHJpbmdpZnkoYSl9CiAgaW5zaWRlUG9pbnQgOiAke0pTT04uc3RyaW5naWZ5KGYpfQogIG5vZGUgICAgICAgIDogeDoke2kueH0geToke2kueX0gdzoke2kud2lkdGh9IGg6JHtpLmhlaWdodH1gKTtjb25zdCBwPWkueCx3PWkueSxtPU1hdGguYWJzKHAtZi54KSxiPWkud2lkdGgvMjtsZXQgRT1mLng8YS54P2ItbTpiK207Y29uc3QgXz1pLmhlaWdodC8yLEE9TWF0aC5hYnMoYS55LWYueSksST1NYXRoLmFicyhhLngtZi54KTtpZihNYXRoLmFicyh3LWEueSkqYj5NYXRoLmFicyhwLWEueCkqXyl7bGV0IEI9Zi55PGEueT9hLnktXy13OnctXy1hLnk7RT1JKkIvQTtjb25zdCBOPXt4OmYueDxhLng/Zi54K0U6Zi54LUkrRSx5OmYueTxhLnk/Zi55K0EtQjpmLnktQStCfTtyZXR1cm4gRT09PTAmJihOLng9YS54LE4ueT1hLnkpLEk9PT0wJiYoTi54PWEueCksQT09PTAmJihOLnk9YS55KSxVdC53YXJuKGBhYmM4OSB0b3BwL2JvdHQgY2FsYywgUSAke0F9LCBxICR7Qn0sIFIgJHtJfSwgciAke0V9YCxOKSxOfWVsc2V7Zi54PGEueD9FPWEueC1iLXA6RT1wLWItYS54O2xldCBCPUEqRS9JLE49Zi54PGEueD9mLngrSS1FOmYueC1JK0UsUj1mLnk8YS55P2YueStCOmYueS1CO3JldHVybiBVdC53YXJuKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7QX0sIHEgJHtCfSwgUiAke0l9LCByICR7RX1gLHtfeDpOLF95OlJ9KSxFPT09MCYmKE49YS54LFI9YS55KSxJPT09MCYmKE49YS54KSxBPT09MCYmKFI9YS55KSx7eDpOLHk6Un19fSxTQnQ9KGksYSk9PntVdC53YXJuKCJhYmM4OCBjdXRQYXRoQXRJbnRlcnNlY3QiLGksYSk7bGV0IGY9W10scD1pWzBdLHc9ITE7cmV0dXJuIGkuZm9yRWFjaChtPT57aWYoVXQuaW5mbygiYWJjODggY2hlY2tpbmcgcG9pbnQiLG0sYSksIXJ6ZShhLG0pJiYhdyl7Y29uc3QgYj1pemUoYSxwLG0pO1V0Lndhcm4oImFiYzg4IGluc2lkZSIsbSxwLGIpLFV0Lndhcm4oImFiYzg4IGludGVyc2VjdGlvbiIsYik7bGV0IEU9ITE7Zi5mb3JFYWNoKF89PntFPUV8fF8ueD09PWIueCYmXy55PT09Yi55fSksZi5zb21lKF89Pl8ueD09PWIueCYmXy55PT09Yi55KT9VdC53YXJuKCJhYmM4OCBubyBpbnRlcnNlY3QiLGIsZik6Zi5wdXNoKGIpLHc9ITB9ZWxzZSBVdC53YXJuKCJhYmM4OCBvdXRzaWRlIixtLHApLHA9bSx3fHxmLnB1c2gobSl9KSxVdC53YXJuKCJhYmM4OCByZXR1cm5pbmcgcG9pbnRzIixmKSxmfSxzemU9ZnVuY3Rpb24oaSxhLGYscCx3LG0sYil7bGV0IEU9Zi5wb2ludHMsXz0hMTtjb25zdCBBPW0ubm9kZShhLnYpO3ZhciBJPW0ubm9kZShhLncpO1V0LmluZm8oImFiYzg4IEluc2VydEVkZ2U6ICIsZiksSS5pbnRlcnNlY3QmJkEuaW50ZXJzZWN0JiYoRT1FLnNsaWNlKDEsZi5wb2ludHMubGVuZ3RoLTEpLEUudW5zaGlmdChBLmludGVyc2VjdChFWzBdKSksVXQuaW5mbygiTGFzdCBwb2ludCIsRVtFLmxlbmd0aC0xXSxJLEkuaW50ZXJzZWN0KEVbRS5sZW5ndGgtMV0pKSxFLnB1c2goSS5pbnRlcnNlY3QoRVtFLmxlbmd0aC0xXSkpKSxmLnRvQ2x1c3RlciYmKFV0LmluZm8oInRvIGNsdXN0ZXIgYWJjODgiLHBbZi50b0NsdXN0ZXJdKSxFPVNCdChmLnBvaW50cyxwW2YudG9DbHVzdGVyXS5ub2RlKSxfPSEwKSxmLmZyb21DbHVzdGVyJiYoVXQuaW5mbygiZnJvbSBjbHVzdGVyIGFiYzg4IixwW2YuZnJvbUNsdXN0ZXJdKSxFPVNCdChFLnJldmVyc2UoKSxwW2YuZnJvbUNsdXN0ZXJdLm5vZGUpLnJldmVyc2UoKSxfPSEwKTtjb25zdCBCPUUuZmlsdGVyKG10PT4hTnVtYmVyLmlzTmFOKG10LnkpKTtsZXQgTj1IUDtmLmN1cnZlJiYodz09PSJncmFwaCJ8fHc9PT0iZmxvd2NoYXJ0IikmJihOPWYuY3VydmUpO2NvbnN0e3g6Uix5Onp9PUNCdChmKSxXPUU1KCkueChSKS55KHopLmN1cnZlKE4pO2xldCBldDtzd2l0Y2goZi50aGlja25lc3Mpe2Nhc2Uibm9ybWFsIjpldD0iZWRnZS10aGlja25lc3Mtbm9ybWFsIjticmVhaztjYXNlInRoaWNrIjpldD0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2Nhc2UiaW52aXNpYmxlIjpldD0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2RlZmF1bHQ6ZXQ9IiJ9c3dpdGNoKGYucGF0dGVybil7Y2FzZSJzb2xpZCI6ZXQrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6ZXQrPSIgZWRnZS1wYXR0ZXJuLWRvdHRlZCI7YnJlYWs7Y2FzZSJkYXNoZWQiOmV0Kz0iIGVkZ2UtcGF0dGVybi1kYXNoZWQiO2JyZWFrfWNvbnN0IHN0PWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsVyhCKSkuYXR0cigiaWQiLGYuaWQpLmF0dHIoImNsYXNzIiwiICIrZXQrKGYuY2xhc3Nlcz8iICIrZi5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLGYuc3R5bGUpO2xldCBhdD0iIjtzd2l0Y2goKE9lKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fE9lKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihhdD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxhdD1hdC5yZXBsYWNlKC9cKC9nLCJcXCgiKSxhdD1hdC5yZXBsYWNlKC9cKS9nLCJcXCkiKSksVXQuaW5mbygiYXJyb3dUeXBlU3RhcnQiLGYuYXJyb3dUeXBlU3RhcnQpLFV0LmluZm8oImFycm93VHlwZUVuZCIsZi5hcnJvd1R5cGVFbmQpLGYuYXJyb3dUeXBlU3RhcnQpe2Nhc2UiYXJyb3dfY3Jvc3MiOnN0LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2F0KyIjIitiKyJfIit3KyItY3Jvc3NTdGFydCkiKTticmVhaztjYXNlImFycm93X3BvaW50IjpzdC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIithdCsiIyIrYisiXyIrdysiLXBvaW50U3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpzdC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIithdCsiIyIrYisiXyIrdysiLWJhcmJTdGFydCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1jaXJjbGVTdGFydCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjpzdC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIithdCsiIyIrYisiXyIrdysiLWFnZ3JlZ2F0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOnN0LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2F0KyIjIitiKyJfIit3KyItZXh0ZW5zaW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1jb21wb3NpdGlvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1kZXBlbmRlbmN5U3RhcnQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6c3QuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1sb2xsaXBvcFN0YXJ0KSIpO2JyZWFrfXN3aXRjaChmLmFycm93VHlwZUVuZCl7Y2FzZSJhcnJvd19jcm9zcyI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2F0KyIjIitiKyJfIit3KyItY3Jvc3NFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2F0KyIjIitiKyJfIit3KyItcG9pbnRFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpzdC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1iYXJiRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfY2lyY2xlIjpzdC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1jaXJjbGVFbmQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2F0KyIjIitiKyJfIit3KyItYWdncmVnYXRpb25FbmQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOnN0LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIithdCsiIyIrYisiXyIrdysiLWV4dGVuc2lvbkVuZCkiKTticmVhaztjYXNlImNvbXBvc2l0aW9uIjpzdC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrYXQrIiMiK2IrIl8iK3crIi1jb21wb3NpdGlvbkVuZCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOnN0LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIithdCsiIyIrYisiXyIrdysiLWRlcGVuZGVuY3lFbmQpIik7YnJlYWs7Y2FzZSJsb2xsaXBvcCI6c3QuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2F0KyIjIitiKyJfIit3KyItbG9sbGlwb3BFbmQpIik7YnJlYWt9bGV0IGJ0PXt9O3JldHVybiBfJiYoYnQudXBkYXRlZFBhdGg9RSksYnQub3JpZ2luYWxQYXRoPWYucG9pbnRzLGJ0fSxBQnQ9YXN5bmMoaSxhLGYscCx3KT0+e1V0LmluZm8oIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6IFhYWCIsUDUoYSksdyk7Y29uc3QgbT1hLmdyYXBoKCkucmFua2RpcjtVdC50cmFjZSgiRGlyIGluIHJlY3Vyc2l2ZSByZW5kZXIgLSBkaXI6IixtKTtjb25zdCBiPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJyb290Iik7YS5ub2RlcygpP1V0LmluZm8oIlJlY3Vyc2l2ZSByZW5kZXIgWFhYIixhLm5vZGVzKCkpOlV0LmluZm8oIk5vIG5vZGVzIGZvdW5kIGZvciIsYSksYS5lZGdlcygpLmxlbmd0aD4wJiZVdC50cmFjZSgiUmVjdXJzaXZlIGVkZ2VzIixhLmVkZ2UoYS5lZGdlcygpWzBdKSk7Y29uc3QgRT1iLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlcnMiKSxfPWIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aHMiKSxBPWIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIiksST1iLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKTthd2FpdCBQcm9taXNlLmFsbChhLm5vZGVzKCkubWFwKGFzeW5jIGZ1bmN0aW9uKE4pe2NvbnN0IFI9YS5ub2RlKE4pO2lmKHchPT12b2lkIDApe2NvbnN0IHo9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh3LmNsdXN0ZXJEYXRhKSk7VXQuaW5mbygiU2V0dGluZyBkYXRhIGZvciBjbHVzdGVyIFhYWCAoIixOLCIpICIseix3KSxhLnNldE5vZGUody5pZCx6KSxhLnBhcmVudChOKXx8KFV0LnRyYWNlKCJTZXR0aW5nIHBhcmVudCIsTix3LmlkKSxhLnNldFBhcmVudChOLHcuaWQseikpfWlmKFV0LmluZm8oIihJbnNlcnQpIE5vZGUgWFhYIitOKyI6ICIrSlNPTi5zdHJpbmdpZnkoYS5ub2RlKE4pKSksUiYmUi5jbHVzdGVyTm9kZSl7VXQuaW5mbygiQ2x1c3RlciBpZGVudGlmaWVkIixOLFIud2lkdGgsYS5ub2RlKE4pKTtjb25zdCB6PWF3YWl0IEFCdChJLFIuZ3JhcGgsZixwLGEubm9kZShOKSksVz16LmVsZW07dGYoUixXKSxSLmRpZmY9ei5kaWZmfHwwLFV0LmluZm8oIk5vZGUgYm91bmRzIChhYmMxMjMpIixOLFIsUi53aWR0aCxSLngsUi55KSxYJGUoVyxSKSxVdC53YXJuKCJSZWN1cnNpdmUgcmVuZGVyIGNvbXBsZXRlICIsVyxSKX1lbHNlIGEuY2hpbGRyZW4oTikubGVuZ3RoPjA/KFV0LmluZm8oIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhYWCIsTixSLmlkLFIsYSksVXQuaW5mbyhDRihSLmlkLGEpKSxIb1tSLmlkXT17aWQ6Q0YoUi5pZCxhKSxub2RlOlJ9KTooVXQuaW5mbygiTm9kZSAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGgiLE4sUi5pZCxSKSxhd2FpdCBrQnQoSSxhLm5vZGUoTiksbSkpfSkpLGEuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe2NvbnN0IFI9YS5lZGdlKE4udixOLncsTi5uYW1lKTtVdC5pbmZvKCJFZGdlICIrTi52KyIgLT4gIitOLncrIjogIitKU09OLnN0cmluZ2lmeShOKSksVXQuaW5mbygiRWRnZSAiK04udisiIC0+ICIrTi53KyI6ICIsTiwiICIsSlNPTi5zdHJpbmdpZnkoYS5lZGdlKE4pKSksVXQuaW5mbygiRml4IixIbywiaWRzOiIsTi52LE4udywiVHJhbnNsYXRlaW5nOiAiLEhvW04udl0sSG9bTi53XSksX0J0KEEsUil9KSxhLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihOKXtVdC5pbmZvKCJFZGdlICIrTi52KyIgLT4gIitOLncrIjogIitKU09OLnN0cmluZ2lmeShOKSl9KSxVdC5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxVdC5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMiKSxVdC5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxVdC5pbmZvKGEpLGFMKGEpLFV0LmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLFA1KGEpKTtsZXQgQj0wO3JldHVybiBTJGUoYSkuZm9yRWFjaChmdW5jdGlvbihOKXtjb25zdCBSPWEubm9kZShOKTtVdC5pbmZvKCJQb3NpdGlvbiAiK04rIjogIitKU09OLnN0cmluZ2lmeShhLm5vZGUoTikpKSxVdC5pbmZvKCJQb3NpdGlvbiAiK04rIjogKCIrUi54LCIsIitSLnksIikgd2lkdGg6ICIsUi53aWR0aCwiIGhlaWdodDogIixSLmhlaWdodCksUiYmUi5jbHVzdGVyTm9kZT9FQnQoUik6YS5jaGlsZHJlbihOKS5sZW5ndGg+MD8oSiRlKEUsUiksSG9bUi5pZF0ubm9kZT1SKTpFQnQoUil9KSxhLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihOKXtjb25zdCBSPWEuZWRnZShOKTtVdC5pbmZvKCJFZGdlICIrTi52KyIgLT4gIitOLncrIjogIitKU09OLnN0cmluZ2lmeShSKSxSKTtjb25zdCB6PXN6ZShfLE4sUixIbyxmLGEscCk7bnplKFIseil9KSxhLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihOKXtjb25zdCBSPWEubm9kZShOKTtVdC5pbmZvKE4sUi50eXBlLFIuZGlmZiksUi50eXBlPT09Imdyb3VwIiYmKEI9Ui5kaWZmKX0pLHtlbGVtOmIsZGlmZjpCfX0sTjB0PWFzeW5jKGksYSxmLHAsdyk9PntQTnQoaSxmLHAsdyksUSRlKCksZXplKCksdHplKCksVCRlKCksVXQud2FybigiR3JhcGggYXQgZmlyc3Q6IixKU09OLnN0cmluZ2lmeShQNShhKSkpLF8kZShhKSxVdC53YXJuKCJHcmFwaCBhZnRlcjoiLEpTT04uc3RyaW5naWZ5KFA1KGEpKSksYXdhaXQgQUJ0KGksYSxwLHcpfSxMQnQ9e30sYXplPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IGYgb2YgYSlMQnRbZl09aVtmXX0sTUJ0PWZ1bmN0aW9uKGksYSxmLHAsdyxtKXtjb25zdCBiPXAuc2VsZWN0KGBbaWQ9IiR7Zn0iXWApO09iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oXyl7Y29uc3QgQT1pW19dO2xldCBJPSJkZWZhdWx0IjtBLmNsYXNzZXMubGVuZ3RoPjAmJihJPUEuY2xhc3Nlcy5qb2luKCIgIikpLEk9SSsiIGZsb3djaGFydC1sYWJlbCI7Y29uc3QgQj1pbShBLnN0eWxlcyk7bGV0IE49QS50ZXh0IT09dm9pZCAwP0EudGV4dDpBLmlkLFI7aWYoVXQuaW5mbygidmVydGV4IixBLEEubGFiZWxUeXBlKSxBLmxhYmVsVHlwZT09PSJtYXJrZG93biIpVXQuaW5mbygidmVydGV4IixBLEEubGFiZWxUeXBlKTtlbHNlIGlmKG8xKE9lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBldD17bGFiZWw6Ti5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2csc3Q9PmA8aSBjbGFzcz0nJHtzdC5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfTtSPWIwdChiLGV0KS5ub2RlKCksUi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFIpfWVsc2V7Y29uc3QgZXQ9dy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2V0LnNldEF0dHJpYnV0ZSgic3R5bGUiLEIubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtjb25zdCBzdD1OLnNwbGl0KEtyLmxpbmVCcmVha1JlZ2V4KTtmb3IoY29uc3QgYXQgb2Ygc3Qpe2NvbnN0IGJ0PXcuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7YnQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksYnQuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLGJ0LnNldEF0dHJpYnV0ZSgieCIsIjEiKSxidC50ZXh0Q29udGVudD1hdCxldC5hcHBlbmRDaGlsZChidCl9Uj1ldH1sZXQgej0wLFc9IiI7c3dpdGNoKEEudHlwZSl7Y2FzZSJyb3VuZCI6ej01LFc9InJlY3QiO2JyZWFrO2Nhc2Uic3F1YXJlIjpXPSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOlc9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOlc9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjpXPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOlc9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjpXPSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjpXPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6Vz0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJvZGRfcmlnaHQiOlc9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjpXPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6Vz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpXPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOlc9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOlc9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjpXPSJyZWN0IjticmVhaztjYXNlImRvdWJsZWNpcmNsZSI6Vz0iZG91YmxlY2lyY2xlIjticmVhaztkZWZhdWx0Olc9InJlY3QifWEuc2V0Tm9kZShBLmlkLHtsYWJlbFN0eWxlOkIubGFiZWxTdHlsZSxzaGFwZTpXLGxhYmVsVGV4dDpOLGxhYmVsVHlwZTpBLmxhYmVsVHlwZSxyeDp6LHJ5OnosY2xhc3M6SSxzdHlsZTpCLnN0eWxlLGlkOkEuaWQsbGluazpBLmxpbmssbGlua1RhcmdldDpBLmxpbmtUYXJnZXQsdG9vbHRpcDptLmRiLmdldFRvb2x0aXAoQS5pZCl8fCIiLGRvbUlkOm0uZGIubG9va1VwRG9tSWQoQS5pZCksaGF2ZUNhbGxiYWNrOkEuaGF2ZUNhbGxiYWNrLHdpZHRoOkEudHlwZT09PSJncm91cCI/NTAwOnZvaWQgMCxkaXI6QS5kaXIsdHlwZTpBLnR5cGUscHJvcHM6QS5wcm9wcyxwYWRkaW5nOk9lKCkuZmxvd2NoYXJ0LnBhZGRpbmd9KSxVdC5pbmZvKCJzZXROb2RlIix7bGFiZWxTdHlsZTpCLmxhYmVsU3R5bGUsbGFiZWxUeXBlOkEubGFiZWxUeXBlLHNoYXBlOlcsbGFiZWxUZXh0Ok4scng6eixyeTp6LGNsYXNzOkksc3R5bGU6Qi5zdHlsZSxpZDpBLmlkLGRvbUlkOm0uZGIubG9va1VwRG9tSWQoQS5pZCksd2lkdGg6QS50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLHR5cGU6QS50eXBlLGRpcjpBLmRpcixwcm9wczpBLnByb3BzLHBhZGRpbmc6T2UoKS5mbG93Y2hhcnQucGFkZGluZ30pfSl9LERCdD1mdW5jdGlvbihpLGEsZil7VXQuaW5mbygiYWJjNzggZWRnZXMgPSAiLGkpO2xldCBwPTAsdz17fSxtLGI7aWYoaS5kZWZhdWx0U3R5bGUhPT12b2lkIDApe2NvbnN0IEU9aW0oaS5kZWZhdWx0U3R5bGUpO209RS5zdHlsZSxiPUUubGFiZWxTdHlsZX1pLmZvckVhY2goZnVuY3Rpb24oRSl7cCsrO2NvbnN0IF89IkwtIitFLnN0YXJ0KyItIitFLmVuZDt3W19dPT09dm9pZCAwPyh3W19dPTAsVXQuaW5mbygiYWJjNzggbmV3IGVudHJ5IixfLHdbX10pKTood1tfXSsrLFV0LmluZm8oImFiYzc4IG5ldyBlbnRyeSIsXyx3W19dKSk7bGV0IEE9XysiLSIrd1tfXTtVdC5pbmZvKCJhYmM3OCBuZXcgbGluayBpZCB0byBiZSB1c2VkIGlzIixfLEEsd1tfXSk7Y29uc3QgST0iTFMtIitFLnN0YXJ0LEI9IkxFLSIrRS5lbmQsTj17c3R5bGU6IiIsbGFiZWxTdHlsZToiIn07c3dpdGNoKE4ubWlubGVuPUUubGVuZ3RofHwxLEUudHlwZT09PSJhcnJvd19vcGVuIj9OLmFycm93aGVhZD0ibm9uZSI6Ti5hcnJvd2hlYWQ9Im5vcm1hbCIsTi5hcnJvd1R5cGVTdGFydD0iYXJyb3dfb3BlbiIsTi5hcnJvd1R5cGVFbmQ9ImFycm93X29wZW4iLEUudHlwZSl7Y2FzZSJkb3VibGVfYXJyb3dfY3Jvc3MiOk4uYXJyb3dUeXBlU3RhcnQ9ImFycm93X2Nyb3NzIjtjYXNlImFycm93X2Nyb3NzIjpOLmFycm93VHlwZUVuZD0iYXJyb3dfY3Jvc3MiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X3BvaW50IjpOLmFycm93VHlwZVN0YXJ0PSJhcnJvd19wb2ludCI7Y2FzZSJhcnJvd19wb2ludCI6Ti5hcnJvd1R5cGVFbmQ9ImFycm93X3BvaW50IjticmVhaztjYXNlImRvdWJsZV9hcnJvd19jaXJjbGUiOk4uYXJyb3dUeXBlU3RhcnQ9ImFycm93X2NpcmNsZSI7Y2FzZSJhcnJvd19jaXJjbGUiOk4uYXJyb3dUeXBlRW5kPSJhcnJvd19jaXJjbGUiO2JyZWFrfWxldCBSPSIiLHo9IiI7c3dpdGNoKEUuc3Ryb2tlKXtjYXNlIm5vcm1hbCI6Uj0iZmlsbDpub25lOyIsbSE9PXZvaWQgMCYmKFI9bSksYiE9PXZvaWQgMCYmKHo9YiksTi50aGlja25lc3M9Im5vcm1hbCIsTi5wYXR0ZXJuPSJzb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOk4udGhpY2tuZXNzPSJub3JtYWwiLE4ucGF0dGVybj0iZG90dGVkIixOLnN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpOLnRoaWNrbmVzcz0idGhpY2siLE4ucGF0dGVybj0ic29saWQiLE4uc3R5bGU9InN0cm9rZS13aWR0aDogMy41cHg7ZmlsbDpub25lOyI7YnJlYWs7Y2FzZSJpbnZpc2libGUiOk4udGhpY2tuZXNzPSJpbnZpc2libGUiLE4ucGF0dGVybj0ic29saWQiLE4uc3R5bGU9InN0cm9rZS13aWR0aDogMDtmaWxsOm5vbmU7IjticmVha31pZihFLnN0eWxlIT09dm9pZCAwKXtjb25zdCBXPWltKEUuc3R5bGUpO1I9Vy5zdHlsZSx6PVcubGFiZWxTdHlsZX1OLnN0eWxlPU4uc3R5bGUrPVIsTi5sYWJlbFN0eWxlPU4ubGFiZWxTdHlsZSs9eixFLmludGVycG9sYXRlIT09dm9pZCAwP04uY3VydmU9ZXcoRS5pbnRlcnBvbGF0ZSxjZyk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/Ti5jdXJ2ZT1ldyhpLmRlZmF1bHRJbnRlcnBvbGF0ZSxjZyk6Ti5jdXJ2ZT1ldyhMQnQuY3VydmUsY2cpLEUudGV4dD09PXZvaWQgMD9FLnN0eWxlIT09dm9pZCAwJiYoTi5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihOLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixOLmxhYmVscG9zPSJjIiksTi5sYWJlbFR5cGU9RS5sYWJlbFR5cGUsTi5sYWJlbD1FLnRleHQucmVwbGFjZShLci5saW5lQnJlYWtSZWdleCxgCmApLEUuc3R5bGU9PT12b2lkIDAmJihOLnN0eWxlPU4uc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lOyIpLE4ubGFiZWxTdHlsZT1OLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSxOLmlkPUEsTi5jbGFzc2VzPSJmbG93Y2hhcnQtbGluayAiK0krIiAiK0IsYS5zZXRFZGdlKEUuc3RhcnQsRS5lbmQsTixwKX0pfSxCMHQ9e3NldENvbmY6YXplLGFkZFZlcnRpY2VzOk1CdCxhZGRFZGdlczpEQnQsZ2V0Q2xhc3NlczpmdW5jdGlvbihpLGEpe3JldHVybiBhLmRiLmdldENsYXNzZXMoKX0sZHJhdzphc3luYyBmdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpO2xldCB3PXAuZGIuZ2V0RGlyZWN0aW9uKCk7dz09PXZvaWQgMCYmKHc9IlREIik7Y29uc3R7c2VjdXJpdHlMZXZlbDptLGZsb3djaGFydDpifT1PZSgpLEU9Yi5ub2RlU3BhY2luZ3x8NTAsXz1iLnJhbmtTcGFjaW5nfHw1MDtsZXQgQTttPT09InNhbmRib3giJiYoQT15cigiI2kiK2EpKTtjb25zdCBJPXlyKG09PT0ic2FuZGJveCI/QS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksQj1tPT09InNhbmRib3giP0Eubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsTj1uZXcgYzEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2Rpcjp3LG5vZGVzZXA6RSxyYW5rc2VwOl8sbWFyZ2lueDowLG1hcmdpbnk6MH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBSO2NvbnN0IHo9cC5kYi5nZXRTdWJHcmFwaHMoKTtVdC5pbmZvKCJTdWJncmFwaHMgLSAiLHopO2ZvcihsZXQgeXQ9ei5sZW5ndGgtMTt5dD49MDt5dC0tKVI9elt5dF0sVXQuaW5mbygiU3ViZ3JhcGggLSAiLFIpLHAuZGIuYWRkVmVydGV4KFIuaWQse3RleHQ6Ui50aXRsZSx0eXBlOlIubGFiZWxUeXBlfSwiZ3JvdXAiLHZvaWQgMCxSLmNsYXNzZXMsUi5kaXIpO2NvbnN0IFc9cC5kYi5nZXRWZXJ0aWNlcygpLGV0PXAuZGIuZ2V0RWRnZXMoKTtVdC5pbmZvKCJFZGdlcyIsZXQpO2xldCBzdD0wO2ZvcihzdD16Lmxlbmd0aC0xO3N0Pj0wO3N0LS0pe1I9eltzdF0sc010KCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKGxldCB5dD0wO3l0PFIubm9kZXMubGVuZ3RoO3l0KyspVXQuaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLFIubm9kZXNbeXRdLFIuaWQpLE4uc2V0UGFyZW50KFIubm9kZXNbeXRdLFIuaWQpfU1CdChXLE4sYSxJLEIscCksREJ0KGV0LE4pO2NvbnN0IGF0PUkuc2VsZWN0KGBbaWQ9IiR7YX0iXWApLGJ0PUkuc2VsZWN0KCIjIithKyIgZyIpO2lmKGF3YWl0IE4wdChidCxOLFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLCJmbG93Y2hhcnQiLGEpLCRhLmluc2VydFRpdGxlKGF0LCJmbG93Y2hhcnRUaXRsZVRleHQiLGIudGl0bGVUb3BNYXJnaW4scC5kYi5nZXREaWFncmFtVGl0bGUoKSksZlQoTixhdCxiLmRpYWdyYW1QYWRkaW5nLGIudXNlTWF4V2lkdGgpLHAuZGIuaW5kZXhOb2Rlcygic3ViR3JhcGgiK3N0KSwhYi5odG1sTGFiZWxzKXtjb25zdCB5dD1CLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJythKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBmdCBvZiB5dCl7Y29uc3QgdXQ9ZnQuZ2V0QkJveCgpLHZ0PUIuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTt2dC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSx2dC5zZXRBdHRyaWJ1dGUoInJ5IiwwKSx2dC5zZXRBdHRyaWJ1dGUoIndpZHRoIix1dC53aWR0aCksdnQuc2V0QXR0cmlidXRlKCJoZWlnaHQiLHV0LmhlaWdodCksZnQuaW5zZXJ0QmVmb3JlKHZ0LGZ0LmZpcnN0Q2hpbGQpfX1PYmplY3Qua2V5cyhXKS5mb3JFYWNoKGZ1bmN0aW9uKHl0KXtjb25zdCBmdD1XW3l0XTtpZihmdC5saW5rKXtjb25zdCB1dD15cigiIyIrYSsnIFtpZD0iJyt5dCsnIl0nKTtpZih1dCl7Y29uc3QgdnQ9Qi5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO3Z0LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixmdC5jbGFzc2VzLmpvaW4oIiAiKSksdnQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsZnQubGluayksdnQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSxtPT09InNhbmRib3giP3Z0LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsIl90b3AiKTpmdC5saW5rVGFyZ2V0JiZ2dC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLGZ0LmxpbmtUYXJnZXQpO2NvbnN0IFg9dXQuaW5zZXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIHZ0fSwiOmZpcnN0LWNoaWxkIikscHQ9dXQuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7cHQmJlguYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHB0Lm5vZGUoKX0pO2NvbnN0IFU9dXQuc2VsZWN0KCIubGFiZWwiKTtVJiZYLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBVLm5vZGUoKX0pfX19KX19LG96ZT0oaSxhKT0+e2NvbnN0IGY9Y0NlLHA9ZihpLCJyIiksdz1mKGksImciKSxtPWYoaSwiYiIpO3JldHVybiBGQShwLHcsbSxhKX0sSUJ0PWk9PmAubGFiZWwgewogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgc3BhbixwIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCxzcGFuLHAgewogICAgZmlsbDogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAvLyB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgLy8gfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqLwogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke296ZShpLmVkZ2VMYWJlbEJhY2tncm91bmQsLjUpfTsKICAgIC8vIGJhY2tncm91bmQtY29sb3I6IAogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke2kuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7aS5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuLHAgewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYCxjemU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpIZHQsZGI6d1QscmVuZGVyZXI6QjB0LHN0eWxlczpJQnQsaW5pdDppPT57aS5mbG93Y2hhcnR8fChpLmZsb3djaGFydD17fSksaS5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsaFJlLnNldENvbmYoaS5mbG93Y2hhcnQpLHdULmNsZWFyKCksd1Quc2V0R2VuKCJnZW4tMSIpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksdXplPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6SGR0LGRiOndULHJlbmRlcmVyOkIwdCxzdHlsZXM6SUJ0LGluaXQ6aT0+e2kuZmxvd2NoYXJ0fHwoaS5mbG93Y2hhcnQ9e30pLGkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLGNBZSh7Zmxvd2NoYXJ0OnthcnJvd01hcmtlckFic29sdXRlOmkuYXJyb3dNYXJrZXJBYnNvbHV0ZX19KSxCMHQuc2V0Q29uZihpLmZsb3djaGFydCksd1QuY2xlYXIoKSx3VC5zZXRHZW4oImdlbi0yIil9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgUjB0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24odnQsWCxwdCxVKXtmb3IocHQ9cHR8fHt9LFU9dnQubGVuZ3RoO1UtLTtwdFt2dFtVXV09WCk7cmV0dXJuIHB0fSxhPVs2LDgsMTAsMjAsMjIsMjQsMjYsMjcsMjhdLGY9WzEsMTBdLHA9WzEsMTFdLHc9WzEsMTJdLG09WzEsMTNdLGI9WzEsMTRdLEU9WzEsMTVdLF89WzEsMjFdLEE9WzEsMjJdLEk9WzEsMjNdLEI9WzEsMjRdLE49WzEsMjVdLFI9WzYsOCwxMCwxMywxNSwxOCwxOSwyMCwyMiwyNCwyNiwyNywyOCw0MSw0Miw0Myw0NCw0NV0sej1bMSwzNF0sVz1bMjcsMjgsNDYsNDddLGV0PVs0MSw0Miw0Myw0NCw0NV0sc3Q9WzE3LDM0XSxhdD1bMSw1NF0sYnQ9WzEsNTNdLG10PVsxNywzNCwzNiwzOF0seXQ9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLEVSX0RJQUdSQU06NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsZW50aXR5TmFtZToxMSxyZWxTcGVjOjEyLCI6IjoxMyxyb2xlOjE0LEJMT0NLX1NUQVJUOjE1LGF0dHJpYnV0ZXM6MTYsQkxPQ0tfU1RPUDoxNyxTUVM6MTgsU1FFOjE5LHRpdGxlOjIwLHRpdGxlX3ZhbHVlOjIxLGFjY190aXRsZToyMixhY2NfdGl0bGVfdmFsdWU6MjMsYWNjX2Rlc2NyOjI0LGFjY19kZXNjcl92YWx1ZToyNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjI2LEFMUEhBTlVNOjI3LEVOVElUWV9OQU1FOjI4LGF0dHJpYnV0ZToyOSxhdHRyaWJ1dGVUeXBlOjMwLGF0dHJpYnV0ZU5hbWU6MzEsYXR0cmlidXRlS2V5VHlwZUxpc3Q6MzIsYXR0cmlidXRlQ29tbWVudDozMyxBVFRSSUJVVEVfV09SRDozNCxhdHRyaWJ1dGVLZXlUeXBlOjM1LENPTU1BOjM2LEFUVFJJQlVURV9LRVk6MzcsQ09NTUVOVDozOCxjYXJkaW5hbGl0eTozOSxyZWxUeXBlOjQwLFpFUk9fT1JfT05FOjQxLFpFUk9fT1JfTU9SRTo0MixPTkVfT1JfTU9SRTo0MyxPTkxZX09ORTo0NCxNRF9QQVJFTlQ6NDUsTk9OX0lERU5USUZZSU5HOjQ2LElERU5USUZZSU5HOjQ3LFdPUkQ6NDgsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkVSX0RJQUdSQU0iLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMzoiOiIsMTU6IkJMT0NLX1NUQVJUIiwxNzoiQkxPQ0tfU1RPUCIsMTg6IlNRUyIsMTk6IlNRRSIsMjA6InRpdGxlIiwyMToidGl0bGVfdmFsdWUiLDIyOiJhY2NfdGl0bGUiLDIzOiJhY2NfdGl0bGVfdmFsdWUiLDI0OiJhY2NfZGVzY3IiLDI1OiJhY2NfZGVzY3JfdmFsdWUiLDI2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNzoiQUxQSEFOVU0iLDI4OiJFTlRJVFlfTkFNRSIsMzQ6IkFUVFJJQlVURV9XT1JEIiwzNjoiQ09NTUEiLDM3OiJBVFRSSUJVVEVfS0VZIiwzODoiQ09NTUVOVCIsNDE6IlpFUk9fT1JfT05FIiw0MjoiWkVST19PUl9NT1JFIiw0MzoiT05FX09SX01PUkUiLDQ0OiJPTkxZX09ORSIsNDU6Ik1EX1BBUkVOVCIsNDY6Ik5PTl9JREVOVElGWUlORyIsNDc6IklERU5USUZZSU5HIiw0ODoiV09SRCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSw1XSxbOSw0XSxbOSwzXSxbOSwxXSxbOSw3XSxbOSw2XSxbOSw0XSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTEsMV0sWzExLDFdLFsxNiwxXSxbMTYsMl0sWzI5LDJdLFsyOSwzXSxbMjksM10sWzI5LDRdLFszMCwxXSxbMzEsMV0sWzMyLDFdLFszMiwzXSxbMzUsMV0sWzMzLDFdLFsxMiwzXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzM5LDFdLFs0MCwxXSxbNDAsMV0sWzE0LDFdLFsxNCwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oWCxwdCxVLFR0LG50LEl0LE90KXt2YXIgQnQ9SXQubGVuZ3RoLTE7c3dpdGNoKG50KXtjYXNlIDE6YnJlYWs7Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6SXRbQnQtMV0ucHVzaChJdFtCdF0pLHRoaXMuJD1JdFtCdC0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1JdFtCdF07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4OlR0LmFkZEVudGl0eShJdFtCdC00XSksVHQuYWRkRW50aXR5KEl0W0J0LTJdKSxUdC5hZGRSZWxhdGlvbnNoaXAoSXRbQnQtNF0sSXRbQnRdLEl0W0J0LTJdLEl0W0J0LTNdKTticmVhaztjYXNlIDk6VHQuYWRkRW50aXR5KEl0W0J0LTNdKSxUdC5hZGRBdHRyaWJ1dGVzKEl0W0J0LTNdLEl0W0J0LTFdKTticmVhaztjYXNlIDEwOlR0LmFkZEVudGl0eShJdFtCdC0yXSk7YnJlYWs7Y2FzZSAxMTpUdC5hZGRFbnRpdHkoSXRbQnRdKTticmVhaztjYXNlIDEyOlR0LmFkZEVudGl0eShJdFtCdC02XSxJdFtCdC00XSksVHQuYWRkQXR0cmlidXRlcyhJdFtCdC02XSxJdFtCdC0xXSk7YnJlYWs7Y2FzZSAxMzpUdC5hZGRFbnRpdHkoSXRbQnQtNV0sSXRbQnQtM10pO2JyZWFrO2Nhc2UgMTQ6VHQuYWRkRW50aXR5KEl0W0J0LTNdLEl0W0J0LTFdKTticmVhaztjYXNlIDE1OmNhc2UgMTY6dGhpcy4kPUl0W0J0XS50cmltKCksVHQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OmNhc2UgMTg6dGhpcy4kPUl0W0J0XS50cmltKCksVHQuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE5OmNhc2UgNDM6dGhpcy4kPUl0W0J0XTticmVhaztjYXNlIDIwOmNhc2UgNDE6Y2FzZSA0Mjp0aGlzLiQ9SXRbQnRdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAyMTpjYXNlIDI5OnRoaXMuJD1bSXRbQnRdXTticmVhaztjYXNlIDIyOkl0W0J0XS5wdXNoKEl0W0J0LTFdKSx0aGlzLiQ9SXRbQnRdO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOkl0W0J0LTFdLGF0dHJpYnV0ZU5hbWU6SXRbQnRdfTticmVhaztjYXNlIDI0OnRoaXMuJD17YXR0cmlidXRlVHlwZTpJdFtCdC0yXSxhdHRyaWJ1dGVOYW1lOkl0W0J0LTFdLGF0dHJpYnV0ZUtleVR5cGVMaXN0Okl0W0J0XX07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6SXRbQnQtMl0sYXR0cmlidXRlTmFtZTpJdFtCdC0xXSxhdHRyaWJ1dGVDb21tZW50Okl0W0J0XX07YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6SXRbQnQtM10sYXR0cmlidXRlTmFtZTpJdFtCdC0yXSxhdHRyaWJ1dGVLZXlUeXBlTGlzdDpJdFtCdC0xXSxhdHRyaWJ1dGVDb21tZW50Okl0W0J0XX07YnJlYWs7Y2FzZSAyNzpjYXNlIDI4OmNhc2UgMzE6dGhpcy4kPUl0W0J0XTticmVhaztjYXNlIDMwOkl0W0J0LTJdLnB1c2goSXRbQnRdKSx0aGlzLiQ9SXRbQnQtMl07YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9SXRbQnRdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9e2NhcmRBOkl0W0J0XSxyZWxUeXBlOkl0W0J0LTFdLGNhcmRCOkl0W0J0LTJdfTticmVhaztjYXNlIDM0OnRoaXMuJD1UdC5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTticmVhaztjYXNlIDM1OnRoaXMuJD1UdC5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9VHQuQ2FyZGluYWxpdHkuT05FX09SX01PUkU7YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9VHQuQ2FyZGluYWxpdHkuT05MWV9PTkU7YnJlYWs7Y2FzZSAzODp0aGlzLiQ9VHQuQ2FyZGluYWxpdHkuTURfUEFSRU5UO2JyZWFrO2Nhc2UgMzk6dGhpcy4kPVR0LklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORzticmVhaztjYXNlIDQwOnRoaXMuJD1UdC5JZGVudGlmaWNhdGlvbi5JREVOVElGWUlORzticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6OSwyMDpmLDIyOnAsMjQ6dywyNjptLDI3OmIsMjg6RX0saShhLFsyLDddLHsxOlsyLDFdfSksaShhLFsyLDNdKSx7OToxNiwxMTo5LDIwOmYsMjI6cCwyNDp3LDI2Om0sMjc6YiwyODpFfSxpKGEsWzIsNV0pLGkoYSxbMiw2XSksaShhLFsyLDExXSx7MTI6MTcsMzk6MjAsMTU6WzEsMThdLDE4OlsxLDE5XSw0MTpfLDQyOkEsNDM6SSw0NDpCLDQ1Ok59KSx7MjE6WzEsMjZdfSx7MjM6WzEsMjddfSx7MjU6WzEsMjhdfSxpKGEsWzIsMThdKSxpKFIsWzIsMTldKSxpKFIsWzIsMjBdKSxpKGEsWzIsNF0pLHsxMToyOSwyNzpiLDI4OkV9LHsxNjozMCwxNzpbMSwzMV0sMjk6MzIsMzA6MzMsMzQ6en0sezExOjM1LDI3OmIsMjg6RX0sezQwOjM2LDQ2OlsxLDM3XSw0NzpbMSwzOF19LGkoVyxbMiwzNF0pLGkoVyxbMiwzNV0pLGkoVyxbMiwzNl0pLGkoVyxbMiwzN10pLGkoVyxbMiwzOF0pLGkoYSxbMiwxNV0pLGkoYSxbMiwxNl0pLGkoYSxbMiwxN10pLHsxMzpbMSwzOV19LHsxNzpbMSw0MF19LGkoYSxbMiwxMF0pLHsxNjo0MSwxNzpbMiwyMV0sMjk6MzIsMzA6MzMsMzQ6en0sezMxOjQyLDM0OlsxLDQzXX0sezM0OlsyLDI3XX0sezE5OlsxLDQ0XX0sezM5OjQ1LDQxOl8sNDI6QSw0MzpJLDQ0OkIsNDU6Tn0saShldCxbMiwzOV0pLGkoZXQsWzIsNDBdKSx7MTQ6NDYsMjc6WzEsNDldLDI4OlsxLDQ4XSw0ODpbMSw0N119LGkoYSxbMiw5XSksezE3OlsyLDIyXX0saShzdCxbMiwyM10sezMyOjUwLDMzOjUxLDM1OjUyLDM3OmF0LDM4OmJ0fSksaShbMTcsMzQsMzcsMzhdLFsyLDI4XSksaShhLFsyLDE0XSx7MTU6WzEsNTVdfSksaShbMjcsMjhdLFsyLDMzXSksaShhLFsyLDhdKSxpKGEsWzIsNDFdKSxpKGEsWzIsNDJdKSxpKGEsWzIsNDNdKSxpKHN0LFsyLDI0XSx7MzM6NTYsMzY6WzEsNTddLDM4OmJ0fSksaShzdCxbMiwyNV0pLGkobXQsWzIsMjldKSxpKHN0LFsyLDMyXSksaShtdCxbMiwzMV0pLHsxNjo1OCwxNzpbMSw1OV0sMjk6MzIsMzA6MzMsMzQ6en0saShzdCxbMiwyNl0pLHszNTo2MCwzNzphdH0sezE3OlsxLDYxXX0saShhLFsyLDEzXSksaShtdCxbMiwzMF0pLGkoYSxbMiwxMl0pXSxkZWZhdWx0QWN0aW9uczp7MzQ6WzIsMjddLDQxOlsyLDIyXX0scGFyc2VFcnJvcjpmdW5jdGlvbihYLHB0KXtpZihwdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFgpO2Vsc2V7dmFyIFU9bmV3IEVycm9yKFgpO3Rocm93IFUuaGFzaD1wdCxVfX0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIHB0PXRoaXMsVT1bMF0sVHQ9W10sbnQ9W251bGxdLEl0PVtdLE90PXRoaXMudGFibGUsQnQ9IiIsRXQ9MCxaPTAsQ3Q9Mix4dD0xLEh0PUl0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLExlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksRnQ9e3l5Ont9fTtmb3IodmFyIGduIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZ24pJiYoRnQueXlbZ25dPXRoaXMueXlbZ25dKTtMZS5zZXRJbnB1dChYLEZ0Lnl5KSxGdC55eS5sZXhlcj1MZSxGdC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgTGUueXlsbG9jPiJ1IiYmKExlLnl5bGxvYz17fSk7dmFyIFNlPUxlLnl5bGxvYztJdC5wdXNoKFNlKTt2YXIgbWU9TGUub3B0aW9ucyYmTGUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEZ0Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPUZ0Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIFZlKCl7dmFyIG9uO3JldHVybiBvbj1UdC5wb3AoKXx8TGUubGV4KCl8fHh0LHR5cGVvZiBvbiE9Im51bWJlciImJihvbiBpbnN0YW5jZW9mIEFycmF5JiYoVHQ9b24sb249VHQucG9wKCkpLG9uPXB0LnN5bWJvbHNfW29uXXx8b24pLG9ufWZvcih2YXIgWWUsY2Usa2UsenQscmU9e30sc2UsUGUsdGUsTWU7Oyl7aWYoY2U9VVtVLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2NlXT9rZT10aGlzLmRlZmF1bHRBY3Rpb25zW2NlXTooKFllPT09bnVsbHx8dHlwZW9mIFllPiJ1IikmJihZZT1WZSgpKSxrZT1PdFtjZV0mJk90W2NlXVtZZV0pLHR5cGVvZiBrZT4idSJ8fCFrZS5sZW5ndGh8fCFrZVswXSl7dmFyIGRlPSIiO01lPVtdO2ZvcihzZSBpbiBPdFtjZV0pdGhpcy50ZXJtaW5hbHNfW3NlXSYmc2U+Q3QmJk1lLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tzZV0rIiciKTtMZS5zaG93UG9zaXRpb24/ZGU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoRXQrMSkrYDoKYCtMZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK01lLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bWWVdfHxZZSkrIiciOmRlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEV0KzEpKyI6IFVuZXhwZWN0ZWQgIisoWWU9PXh0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW1llXXx8WWUpKyInIiksdGhpcy5wYXJzZUVycm9yKGRlLHt0ZXh0OkxlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tZZV18fFllLGxpbmU6TGUueXlsaW5lbm8sbG9jOlNlLGV4cGVjdGVkOk1lfSl9aWYoa2VbMF1pbnN0YW5jZW9mIEFycmF5JiZrZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2NlKyIsIHRva2VuOiAiK1llKTtzd2l0Y2goa2VbMF0pe2Nhc2UgMTpVLnB1c2goWWUpLG50LnB1c2goTGUueXl0ZXh0KSxJdC5wdXNoKExlLnl5bGxvYyksVS5wdXNoKGtlWzFdKSxZZT1udWxsLFo9TGUueXlsZW5nLEJ0PUxlLnl5dGV4dCxFdD1MZS55eWxpbmVubyxTZT1MZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKFBlPXRoaXMucHJvZHVjdGlvbnNfW2tlWzFdXVsxXSxyZS4kPW50W250Lmxlbmd0aC1QZV0scmUuXyQ9e2ZpcnN0X2xpbmU6SXRbSXQubGVuZ3RoLShQZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkl0W0l0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkl0W0l0Lmxlbmd0aC0oUGV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46SXRbSXQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtZSYmKHJlLl8kLnJhbmdlPVtJdFtJdC5sZW5ndGgtKFBlfHwxKV0ucmFuZ2VbMF0sSXRbSXQubGVuZ3RoLTFdLnJhbmdlWzFdXSksenQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHJlLFtCdCxaLEV0LEZ0Lnl5LGtlWzFdLG50LEl0XS5jb25jYXQoSHQpKSx0eXBlb2YgenQ8InUiKXJldHVybiB6dDtQZSYmKFU9VS5zbGljZSgwLC0xKlBlKjIpLG50PW50LnNsaWNlKDAsLTEqUGUpLEl0PUl0LnNsaWNlKDAsLTEqUGUpKSxVLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba2VbMV1dWzBdKSxudC5wdXNoKHJlLiQpLEl0LnB1c2gocmUuXyQpLHRlPU90W1VbVS5sZW5ndGgtMl1dW1VbVS5sZW5ndGgtMV1dLFUucHVzaCh0ZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGZ0PWZ1bmN0aW9uKCl7dmFyIHZ0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHB0LFUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IocHQsVSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IocHQpfSxzZXRJbnB1dDpmdW5jdGlvbihYLHB0KXtyZXR1cm4gdGhpcy55eT1wdHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9WCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9WCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9WCx0aGlzLm1hdGNoZWQrPVg7dmFyIHB0PVgubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBwdD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksWH0sdW5wdXQ6ZnVuY3Rpb24oWCl7dmFyIHB0PVgubGVuZ3RoLFU9WC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVgrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXB0KSx0aGlzLm9mZnNldC09cHQ7dmFyIFR0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLFUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1VLmxlbmd0aC0xKTt2YXIgbnQ9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlU/KFUubGVuZ3RoPT09VHQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStUdFtUdC5sZW5ndGgtVS5sZW5ndGhdLmxlbmd0aC1VWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tcHR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bbnRbMF0sbnRbMF0rdGhpcy55eWxlbmctcHRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihYKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoWCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFgubGVuZ3RoPjIwPyIuLi4iOiIiKStYLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5tYXRjaDtyZXR1cm4gWC5sZW5ndGg8MjAmJihYKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1YLmxlbmd0aCkpLChYLnN1YnN0cigwLDIwKSsoWC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5wYXN0SW5wdXQoKSxwdD1uZXcgQXJyYXkoWC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBYK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtwdCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oWCxwdCl7dmFyIFUsVHQsbnQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKG50PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKG50Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFR0PVhbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFR0JiYodGhpcy55eWxpbmVubys9VHQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46VHQ/VHRbVHQubGVuZ3RoLTFdLmxlbmd0aC1UdFtUdC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitYWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVhbMF0sdGhpcy5tYXRjaCs9WFswXSx0aGlzLm1hdGNoZXM9WCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShYWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1YWzBdLFU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMscHQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksVSlyZXR1cm4gVTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgSXQgaW4gbnQpdGhpc1tJdF09bnRbSXRdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFgscHQsVSxUdDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBudD10aGlzLl9jdXJyZW50UnVsZXMoKSxJdD0wO0l0PG50Lmxlbmd0aDtJdCsrKWlmKFU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tudFtJdF1dKSxVJiYoIXB0fHxVWzBdLmxlbmd0aD5wdFswXS5sZW5ndGgpKXtpZihwdD1VLFR0PUl0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFg9dGhpcy50ZXN0X21hdGNoKFUsbnRbSXRdKSxYIT09ITEpcmV0dXJuIFg7aWYodGhpcy5fYmFja3RyYWNrKXtwdD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBwdD8oWD10aGlzLnRlc3RfbWF0Y2gocHQsbnRbVHRdKSxYIT09ITE/WDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHB0PXRoaXMubmV4dCgpO3JldHVybiBwdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24ocHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChwdCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIHB0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHB0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24ocHQpe3JldHVybiBwdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHB0fHwwKSxwdD49MD90aGlzLmNvbmRpdGlvblN0YWNrW3B0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihwdCl7dGhpcy5iZWdpbihwdCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24ocHQsVSxUdCxudCl7c3dpdGNoKFR0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDIyO2Nhc2UgMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMjQ7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA3OnJldHVybiAxMDtjYXNlIDg6YnJlYWs7Y2FzZSA5OnJldHVybiA4O2Nhc2UgMTA6cmV0dXJuIDI4O2Nhc2UgMTE6cmV0dXJuIDQ4O2Nhc2UgMTI6cmV0dXJuIDQ7Y2FzZSAxMzpyZXR1cm4gdGhpcy5iZWdpbigiYmxvY2siKSwxNTtjYXNlIDE0OnJldHVybiAzNjtjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIDM3O2Nhc2UgMTc6cmV0dXJuIDM0O2Nhc2UgMTg6cmV0dXJuIDM0O2Nhc2UgMTk6cmV0dXJuIDM4O2Nhc2UgMjA6YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE3O2Nhc2UgMjI6cmV0dXJuIFUueXl0ZXh0WzBdO2Nhc2UgMjM6cmV0dXJuIDE4O2Nhc2UgMjQ6cmV0dXJuIDE5O2Nhc2UgMjU6cmV0dXJuIDQxO2Nhc2UgMjY6cmV0dXJuIDQzO2Nhc2UgMjc6cmV0dXJuIDQzO2Nhc2UgMjg6cmV0dXJuIDQzO2Nhc2UgMjk6cmV0dXJuIDQxO2Nhc2UgMzA6cmV0dXJuIDQxO2Nhc2UgMzE6cmV0dXJuIDQyO2Nhc2UgMzI6cmV0dXJuIDQyO2Nhc2UgMzM6cmV0dXJuIDQyO2Nhc2UgMzQ6cmV0dXJuIDQyO2Nhc2UgMzU6cmV0dXJuIDQyO2Nhc2UgMzY6cmV0dXJuIDQzO2Nhc2UgMzc6cmV0dXJuIDQyO2Nhc2UgMzg6cmV0dXJuIDQzO2Nhc2UgMzk6cmV0dXJuIDQ0O2Nhc2UgNDA6cmV0dXJuIDQ0O2Nhc2UgNDE6cmV0dXJuIDQ0O2Nhc2UgNDI6cmV0dXJuIDQ0O2Nhc2UgNDM6cmV0dXJuIDQxO2Nhc2UgNDQ6cmV0dXJuIDQyO2Nhc2UgNDU6cmV0dXJuIDQzO2Nhc2UgNDY6cmV0dXJuIDQ1O2Nhc2UgNDc6cmV0dXJuIDQ2O2Nhc2UgNDg6cmV0dXJuIDQ3O2Nhc2UgNDk6cmV0dXJuIDQ3O2Nhc2UgNTA6cmV0dXJuIDQ2O2Nhc2UgNTE6cmV0dXJuIDQ2O2Nhc2UgNTI6cmV0dXJuIDQ2O2Nhc2UgNTM6cmV0dXJuIDI3O2Nhc2UgNTQ6cmV0dXJuIFUueXl0ZXh0WzBdO2Nhc2UgNTU6cmV0dXJuIDZ9fSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86W1xzXSspL2ksL14oPzoiW14iJVxyXG5cdlxiXFxdKyIpL2ksL14oPzoiW14iXSoiKS9pLC9eKD86ZXJEaWFncmFtXGIpL2ksL14oPzpceykvaSwvXig/OiwpL2ksL14oPzpccyspL2ksL14oPzpcYigoPzpQSyl8KD86RkspfCg/OlVLKSlcYikvaSwvXig/OiguKj8pW35dKC4qPykqW35dKS9pLC9eKD86W1wqQS1aYS16X11bQS1aYS16MC05XC1fXFtcXVwoXCldKikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzpbXG5dKykvaSwvXig/Olx9KS9pLC9eKD86LikvaSwvXig/OlxbKS9pLC9eKD86XF0pL2ksL14oPzpvbmUgb3IgemVyb1xiKS9pLC9eKD86b25lIG9yIG1vcmVcYikvaSwvXig/Om9uZSBvciBtYW55XGIpL2ksL14oPzoxXCspL2ksL14oPzpcfG9cYikvaSwvXig/Onplcm8gb3Igb25lXGIpL2ksL14oPzp6ZXJvIG9yIG1vcmVcYikvaSwvXig/Onplcm8gb3IgbWFueVxiKS9pLC9eKD86MFwrKS9pLC9eKD86XH1vXGIpL2ksL14oPzptYW55XCgwXCkpL2ksL14oPzptYW55XCgxXCkpL2ksL14oPzptYW55XGIpL2ksL14oPzpcfVx8KS9pLC9eKD86b25lXGIpL2ksL14oPzpvbmx5IG9uZVxiKS9pLC9eKD86MVxiKS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpccyp1XGIpL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzp0b1xiKS9pLC9eKD86b3B0aW9uYWxseSB0b1xiKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel9dW0EtWmEtejAtOVwtX10qKS9pLC9eKD86LikvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHZ0fSgpO3l0LmxleGVyPWZ0O2Z1bmN0aW9uIHV0KCl7dGhpcy55eT17fX1yZXR1cm4gdXQucHJvdG90eXBlPXl0LHl0LlBhcnNlcj11dCxuZXcgdXR9KCk7UjB0LnBhcnNlcj1SMHQ7Y29uc3QgbHplPVIwdDtsZXQgbWs9e30sajB0PVtdO2NvbnN0IGh6ZT17WkVST19PUl9PTkU6IlpFUk9fT1JfT05FIixaRVJPX09SX01PUkU6IlpFUk9fT1JfTU9SRSIsT05FX09SX01PUkU6Ik9ORV9PUl9NT1JFIixPTkxZX09ORToiT05MWV9PTkUiLE1EX1BBUkVOVDoiTURfUEFSRU5UIn0sZnplPXtOT05fSURFTlRJRllJTkc6Ik5PTl9JREVOVElGWUlORyIsSURFTlRJRllJTkc6IklERU5USUZZSU5HIn0sT0J0PWZ1bmN0aW9uKGksYT12b2lkIDApe3JldHVybiBta1tpXT09PXZvaWQgMD8obWtbaV09e2F0dHJpYnV0ZXM6W10sYWxpYXM6YX0sVXQuaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6IixpKSk6bWtbaV0mJiFta1tpXS5hbGlhcyYmYSYmKG1rW2ldLmFsaWFzPWEsVXQuaW5mbyhgQWRkIGFsaWFzICcke2F9JyB0byBlbnRpdHkgJyR7aX0nYCkpLG1rW2ldfSxkemU9e0NhcmRpbmFsaXR5Omh6ZSxJZGVudGlmaWNhdGlvbjpmemUsZ2V0Q29uZmlnOigpPT5PZSgpLmVyLGFkZEVudGl0eTpPQnQsYWRkQXR0cmlidXRlczpmdW5jdGlvbihpLGEpe2xldCBmPU9CdChpKSxwO2ZvcihwPWEubGVuZ3RoLTE7cD49MDtwLS0pZi5hdHRyaWJ1dGVzLnB1c2goYVtwXSksVXQuZGVidWcoIkFkZGVkIGF0dHJpYnV0ZSAiLGFbcF0uYXR0cmlidXRlTmFtZSl9LGdldEVudGl0aWVzOigpPT5tayxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24oaSxhLGYscCl7bGV0IHc9e2VudGl0eUE6aSxyb2xlQTphLGVudGl0eUI6ZixyZWxTcGVjOnB9O2owdC5wdXNoKHcpLFV0LmRlYnVnKCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDoiLHcpfSxnZXRSZWxhdGlvbnNoaXBzOigpPT5qMHQsY2xlYXI6ZnVuY3Rpb24oKXttaz17fSxqMHQ9W10saGcoKX0sc2V0QWNjVGl0bGU6RTAsZ2V0QWNjVGl0bGU6Zmcsc2V0QWNjRGVzY3JpcHRpb246ZGcsZ2V0QWNjRGVzY3JpcHRpb246Z2csc2V0RGlhZ3JhbVRpdGxlOk5iLGdldERpYWdyYW1UaXRsZTpwZ30sZm09e09OTFlfT05FX1NUQVJUOiJPTkxZX09ORV9TVEFSVCIsT05MWV9PTkVfRU5EOiJPTkxZX09ORV9FTkQiLFpFUk9fT1JfT05FX1NUQVJUOiJaRVJPX09SX09ORV9TVEFSVCIsWkVST19PUl9PTkVfRU5EOiJaRVJPX09SX09ORV9FTkQiLE9ORV9PUl9NT1JFX1NUQVJUOiJPTkVfT1JfTU9SRV9TVEFSVCIsT05FX09SX01PUkVfRU5EOiJPTkVfT1JfTU9SRV9FTkQiLFpFUk9fT1JfTU9SRV9TVEFSVDoiWkVST19PUl9NT1JFX1NUQVJUIixaRVJPX09SX01PUkVfRU5EOiJaRVJPX09SX01PUkVfRU5EIixNRF9QQVJFTlRfRU5EOiJNRF9QQVJFTlRfRU5EIixNRF9QQVJFTlRfU1RBUlQ6Ik1EX1BBUkVOVF9TVEFSVCJ9LGRtPXtFUk1hcmtlcnM6Zm0saW5zZXJ0TWFya2VyczpmdW5jdGlvbihpLGEpe2xldCBmO2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZm0uTURfUEFSRU5UX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGZtLk1EX1BBUkVOVF9FTkQpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmbS5PTkxZX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCBNMTUsMCBMMTUsMTgiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGZtLk9OTFlfT05FX0VORCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDAgTDMsMTggTTksMCBMOSwxOCIpLGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmbS5aRVJPX09SX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksZi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4IiwyMSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLGYuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCIpLGY9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixmbS5aRVJPX09SX09ORV9FTkQpLmF0dHIoInJlZlgiLDMwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxmLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsYS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwwIEwyMSwxOCIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZm0uT05FX09SX01PUkVfU1RBUlQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUSAxOCwwIDM2LDE4IFEgMTgsMzYgMCwxOCBNNDIsOSBMNDIsMjciKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGZtLk9ORV9PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMjcpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMyw5IEwzLDI3IE05LDE4IFEyNywwIDQ1LDE4IFEyNywzNiA5LDE4IiksZj1pLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGZtLlpFUk9fT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDQ4KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLGYuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUTE4LDAgMzYsMTggUTE4LDM2IDAsMTgiKSxmPWkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZm0uWkVST19PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMzkpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixhLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksZi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGEuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMTggUTM5LDAgNTcsMTggUTM5LDM2IDIxLDE4Iil9fSxnemU9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Z1bmN0aW9uIHB6ZShpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciJiZnemUudGVzdChpKX1jb25zdCBSZD1bXTtmb3IobGV0IGk9MDtpPDI1NjsrK2kpUmQucHVzaCgoaSsyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24gYnplKGksYT0wKXtyZXR1cm4oUmRbaVthKzBdXStSZFtpW2ErMV1dK1JkW2lbYSsyXV0rUmRbaVthKzNdXSsiLSIrUmRbaVthKzRdXStSZFtpW2ErNV1dKyItIitSZFtpW2ErNl1dK1JkW2lbYSs3XV0rIi0iK1JkW2lbYSs4XV0rUmRbaVthKzldXSsiLSIrUmRbaVthKzEwXV0rUmRbaVthKzExXV0rUmRbaVthKzEyXV0rUmRbaVthKzEzXV0rUmRbaVthKzE0XV0rUmRbaVthKzE1XV0pLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gd3plKGkpe2lmKCFwemUoaSkpdGhyb3cgVHlwZUVycm9yKCJJbnZhbGlkIFVVSUQiKTtsZXQgYTtjb25zdCBmPW5ldyBVaW50OEFycmF5KDE2KTtyZXR1cm4gZlswXT0oYT1wYXJzZUludChpLnNsaWNlKDAsOCksMTYpKT4+PjI0LGZbMV09YT4+PjE2JjI1NSxmWzJdPWE+Pj44JjI1NSxmWzNdPWEmMjU1LGZbNF09KGE9cGFyc2VJbnQoaS5zbGljZSg5LDEzKSwxNikpPj4+OCxmWzVdPWEmMjU1LGZbNl09KGE9cGFyc2VJbnQoaS5zbGljZSgxNCwxOCksMTYpKT4+PjgsZls3XT1hJjI1NSxmWzhdPShhPXBhcnNlSW50KGkuc2xpY2UoMTksMjMpLDE2KSk+Pj44LGZbOV09YSYyNTUsZlsxMF09KGE9cGFyc2VJbnQoaS5zbGljZSgyNCwzNiksMTYpKS8xMDk5NTExNjI3Nzc2JjI1NSxmWzExXT1hLzQyOTQ5NjcyOTYmMjU1LGZbMTJdPWE+Pj4yNCYyNTUsZlsxM109YT4+PjE2JjI1NSxmWzE0XT1hPj4+OCYyNTUsZlsxNV09YSYyNTUsZn1mdW5jdGlvbiB2emUoaSl7aT11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoaSkpO2NvbnN0IGE9W107Zm9yKGxldCBmPTA7ZjxpLmxlbmd0aDsrK2YpYS5wdXNoKGkuY2hhckNvZGVBdChmKSk7cmV0dXJuIGF9Y29uc3QgbXplPSI2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgiLHl6ZT0iNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4IjtmdW5jdGlvbiB4emUoaSxhLGYpe2Z1bmN0aW9uIHAodyxtLGIsRSl7dmFyIF87aWYodHlwZW9mIHc9PSJzdHJpbmciJiYodz12emUodykpLHR5cGVvZiBtPT0ic3RyaW5nIiYmKG09d3plKG0pKSwoKF89bSk9PT1udWxsfHxfPT09dm9pZCAwP3ZvaWQgMDpfLmxlbmd0aCkhPT0xNil0aHJvdyBUeXBlRXJyb3IoIk5hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSkiKTtsZXQgQT1uZXcgVWludDhBcnJheSgxNit3Lmxlbmd0aCk7aWYoQS5zZXQobSksQS5zZXQodyxtLmxlbmd0aCksQT1mKEEpLEFbNl09QVs2XSYxNXxhLEFbOF09QVs4XSY2M3wxMjgsYil7RT1FfHwwO2ZvcihsZXQgST0wO0k8MTY7KytJKWJbRStJXT1BW0ldO3JldHVybiBifXJldHVybiBiemUoQSl9dHJ5e3AubmFtZT1pfWNhdGNoe31yZXR1cm4gcC5ETlM9bXplLHAuVVJMPXl6ZSxwfWZ1bmN0aW9uIGt6ZShpLGEsZixwKXtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBhJmZefmEmcDtjYXNlIDE6cmV0dXJuIGFeZl5wO2Nhc2UgMjpyZXR1cm4gYSZmXmEmcF5mJnA7Y2FzZSAzOnJldHVybiBhXmZecH19ZnVuY3Rpb24gJDB0KGksYSl7cmV0dXJuIGk8PGF8aT4+PjMyLWF9ZnVuY3Rpb24gRXplKGkpe2NvbnN0IGE9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdLGY9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXTtpZih0eXBlb2YgaT09InN0cmluZyIpe2NvbnN0IGI9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGkpKTtpPVtdO2ZvcihsZXQgRT0wO0U8Yi5sZW5ndGg7KytFKWkucHVzaChiLmNoYXJDb2RlQXQoRSkpfWVsc2UgQXJyYXkuaXNBcnJheShpKXx8KGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSkpO2kucHVzaCgxMjgpO2NvbnN0IHA9aS5sZW5ndGgvNCsyLHc9TWF0aC5jZWlsKHAvMTYpLG09bmV3IEFycmF5KHcpO2ZvcihsZXQgYj0wO2I8dzsrK2Ipe2NvbnN0IEU9bmV3IFVpbnQzMkFycmF5KDE2KTtmb3IobGV0IF89MDtfPDE2OysrXylFW19dPWlbYio2NCtfKjRdPDwyNHxpW2IqNjQrXyo0KzFdPDwxNnxpW2IqNjQrXyo0KzJdPDw4fGlbYio2NCtfKjQrM107bVtiXT1FfW1bdy0xXVsxNF09KGkubGVuZ3RoLTEpKjgvTWF0aC5wb3coMiwzMiksbVt3LTFdWzE0XT1NYXRoLmZsb29yKG1bdy0xXVsxNF0pLG1bdy0xXVsxNV09KGkubGVuZ3RoLTEpKjgmNDI5NDk2NzI5NTtmb3IobGV0IGI9MDtiPHc7KytiKXtjb25zdCBFPW5ldyBVaW50MzJBcnJheSg4MCk7Zm9yKGxldCBSPTA7UjwxNjsrK1IpRVtSXT1tW2JdW1JdO2ZvcihsZXQgUj0xNjtSPDgwOysrUilFW1JdPSQwdChFW1ItM11eRVtSLThdXkVbUi0xNF1eRVtSLTE2XSwxKTtsZXQgXz1mWzBdLEE9ZlsxXSxJPWZbMl0sQj1mWzNdLE49Zls0XTtmb3IobGV0IFI9MDtSPDgwOysrUil7Y29uc3Qgej1NYXRoLmZsb29yKFIvMjApLFc9JDB0KF8sNSkra3plKHosQSxJLEIpK04rYVt6XStFW1JdPj4+MDtOPUIsQj1JLEk9JDB0KEEsMzApPj4+MCxBPV8sXz1XfWZbMF09ZlswXStfPj4+MCxmWzFdPWZbMV0rQT4+PjAsZlsyXT1mWzJdK0k+Pj4wLGZbM109ZlszXStCPj4+MCxmWzRdPWZbNF0rTj4+PjB9cmV0dXJuW2ZbMF0+PjI0JjI1NSxmWzBdPj4xNiYyNTUsZlswXT4+OCYyNTUsZlswXSYyNTUsZlsxXT4+MjQmMjU1LGZbMV0+PjE2JjI1NSxmWzFdPj44JjI1NSxmWzFdJjI1NSxmWzJdPj4yNCYyNTUsZlsyXT4+MTYmMjU1LGZbMl0+PjgmMjU1LGZbMl0mMjU1LGZbM10+PjI0JjI1NSxmWzNdPj4xNiYyNTUsZlszXT4+OCYyNTUsZlszXSYyNTUsZls0XT4+MjQmMjU1LGZbNF0+PjE2JjI1NSxmWzRdPj44JjI1NSxmWzRdJjI1NV19Y29uc3QgVHplPXh6ZSgidjUiLDgwLEV6ZSksQ3plPS9bXlxkQS1aYS16XShcVykqL2c7bGV0IHUxPXt9LFNGPW5ldyBNYXA7Y29uc3QgX3plPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IGYgb2YgYSl1MVtmXT1pW2ZdfSxTemU9KGksYSxmKT0+e2NvbnN0IHA9dTEuZW50aXR5UGFkZGluZy8zLHc9dTEuZW50aXR5UGFkZGluZy8zLG09dTEuZm9udFNpemUqLjg1LGI9YS5ub2RlKCkuZ2V0QkJveCgpLEU9W107bGV0IF89ITEsQT0hMSxJPTAsQj0wLE49MCxSPTAsej1iLmhlaWdodCtwKjIsVz0xO2YuZm9yRWFjaChidD0+e2J0LmF0dHJpYnV0ZUtleVR5cGVMaXN0IT09dm9pZCAwJiZidC5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5sZW5ndGg+MCYmKF89ITApLGJ0LmF0dHJpYnV0ZUNvbW1lbnQhPT12b2lkIDAmJihBPSEwKX0pLGYuZm9yRWFjaChidD0+e2NvbnN0IG10PWAke2Eubm9kZSgpLmlkfS1hdHRyLSR7V31gO2xldCB5dD0wO2NvbnN0IGZ0PVlQKGJ0LmF0dHJpYnV0ZVR5cGUpLHV0PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7bXR9LXR5cGVgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixPZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLG0rInB4IikudGV4dChmdCksdnQ9aS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHttdH0tbmFtZWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLE9lKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsbSsicHgiKS50ZXh0KGJ0LmF0dHJpYnV0ZU5hbWUpLFg9e307WC50bj11dCxYLm5uPXZ0O2NvbnN0IHB0PXV0Lm5vZGUoKS5nZXRCQm94KCksVT12dC5ub2RlKCkuZ2V0QkJveCgpO2lmKEk9TWF0aC5tYXgoSSxwdC53aWR0aCksQj1NYXRoLm1heChCLFUud2lkdGgpLHl0PU1hdGgubWF4KHB0LmhlaWdodCxVLmhlaWdodCksXyl7Y29uc3QgVHQ9YnQuYXR0cmlidXRlS2V5VHlwZUxpc3QhPT12b2lkIDA/YnQuYXR0cmlidXRlS2V5VHlwZUxpc3Quam9pbigiLCIpOiIiLG50PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7bXR9LWtleWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLE9lKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsbSsicHgiKS50ZXh0KFR0KTtYLmtuPW50O2NvbnN0IEl0PW50Lm5vZGUoKS5nZXRCQm94KCk7Tj1NYXRoLm1heChOLEl0LndpZHRoKSx5dD1NYXRoLm1heCh5dCxJdC5oZWlnaHQpfWlmKEEpe2NvbnN0IFR0PWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7bXR9LWNvbW1lbnRgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixPZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLG0rInB4IikudGV4dChidC5hdHRyaWJ1dGVDb21tZW50fHwiIik7WC5jbj1UdDtjb25zdCBudD1UdC5ub2RlKCkuZ2V0QkJveCgpO1I9TWF0aC5tYXgoUixudC53aWR0aCkseXQ9TWF0aC5tYXgoeXQsbnQuaGVpZ2h0KX1YLmhlaWdodD15dCxFLnB1c2goWCkseis9eXQrcCoyLFcrPTF9KTtsZXQgZXQ9NDtfJiYoZXQrPTIpLEEmJihldCs9Mik7Y29uc3Qgc3Q9SStCK04rUixhdD17d2lkdGg6TWF0aC5tYXgodTEubWluRW50aXR5V2lkdGgsTWF0aC5tYXgoYi53aWR0aCt1MS5lbnRpdHlQYWRkaW5nKjIsc3QrdypldCkpLGhlaWdodDpmLmxlbmd0aD4wP3o6TWF0aC5tYXgodTEubWluRW50aXR5SGVpZ2h0LGIuaGVpZ2h0K3UxLmVudGl0eVBhZGRpbmcqMil9O2lmKGYubGVuZ3RoPjApe2NvbnN0IGJ0PU1hdGgubWF4KDAsKGF0LndpZHRoLXN0LXcqZXQpLyhldC8yKSk7YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithdC53aWR0aC8yKyIsIisocCtiLmhlaWdodC8yKSsiKSIpO2xldCBtdD1iLmhlaWdodCtwKjIseXQ9ImF0dHJpYnV0ZUJveE9kZCI7RS5mb3JFYWNoKGZ0PT57Y29uc3QgdXQ9bXQrcCtmdC5oZWlnaHQvMjtmdC50bi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit3KyIsIit1dCsiKSIpO2NvbnN0IHZ0PWkuaW5zZXJ0KCJyZWN0IiwiIyIrZnQudG4ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke3l0fWAsITApLmF0dHIoIngiLDApLmF0dHIoInkiLG10KS5hdHRyKCJ3aWR0aCIsSSt3KjIrYnQpLmF0dHIoImhlaWdodCIsZnQuaGVpZ2h0K3AqMiksWD1wYXJzZUZsb2F0KHZ0LmF0dHIoIngiKSkrcGFyc2VGbG9hdCh2dC5hdHRyKCJ3aWR0aCIpKTtmdC5ubi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoWCt3KSsiLCIrdXQrIikiKTtjb25zdCBwdD1pLmluc2VydCgicmVjdCIsIiMiK2Z0Lm5uLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHt5dH1gLCEwKS5hdHRyKCJ4IixYKS5hdHRyKCJ5IixtdCkuYXR0cigid2lkdGgiLEIrdyoyK2J0KS5hdHRyKCJoZWlnaHQiLGZ0LmhlaWdodCtwKjIpO2xldCBVPXBhcnNlRmxvYXQocHQuYXR0cigieCIpKStwYXJzZUZsb2F0KHB0LmF0dHIoIndpZHRoIikpO2lmKF8pe2Z0LmtuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhVK3cpKyIsIit1dCsiKSIpO2NvbnN0IFR0PWkuaW5zZXJ0KCJyZWN0IiwiIyIrZnQua24ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke3l0fWAsITApLmF0dHIoIngiLFUpLmF0dHIoInkiLG10KS5hdHRyKCJ3aWR0aCIsTit3KjIrYnQpLmF0dHIoImhlaWdodCIsZnQuaGVpZ2h0K3AqMik7VT1wYXJzZUZsb2F0KFR0LmF0dHIoIngiKSkrcGFyc2VGbG9hdChUdC5hdHRyKCJ3aWR0aCIpKX1BJiYoZnQuY24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKFUrdykrIiwiK3V0KyIpIiksaS5pbnNlcnQoInJlY3QiLCIjIitmdC5jbi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7eXR9YCwidHJ1ZSIpLmF0dHIoIngiLFUpLmF0dHIoInkiLG10KS5hdHRyKCJ3aWR0aCIsUit3KjIrYnQpLmF0dHIoImhlaWdodCIsZnQuaGVpZ2h0K3AqMikpLG10Kz1mdC5oZWlnaHQrcCoyLHl0PXl0PT09ImF0dHJpYnV0ZUJveE9kZCI/ImF0dHJpYnV0ZUJveEV2ZW4iOiJhdHRyaWJ1dGVCb3hPZGQifSl9ZWxzZSBhdC5oZWlnaHQ9TWF0aC5tYXgodTEubWluRW50aXR5SGVpZ2h0LHopLGEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYXQud2lkdGgvMisiLCIrYXQuaGVpZ2h0LzIrIikiKTtyZXR1cm4gYXR9LEF6ZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1PYmplY3Qua2V5cyhhKTtsZXQgdztyZXR1cm4gcC5mb3JFYWNoKGZ1bmN0aW9uKG0pe2NvbnN0IGI9UHplKG0sImVudGl0eSIpO1NGLnNldChtLGIpO2NvbnN0IEU9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIsYik7dz13PT09dm9pZCAwP2I6dztjb25zdCBfPSJ0ZXh0LSIrYixBPUUuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsXykuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtZmFtaWx5IixPZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLHUxLmZvbnRTaXplKyJweCIpLnRleHQoYVttXS5hbGlhcz8/bSkse3dpZHRoOkksaGVpZ2h0OkJ9PVN6ZShFLEEsYVttXS5hdHRyaWJ1dGVzKSxSPUUuaW5zZXJ0KCJyZWN0IiwiIyIrXykuY2xhc3NlZCgiZXIgZW50aXR5Qm94IiwhMCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLEkpLmF0dHIoImhlaWdodCIsQikubm9kZSgpLmdldEJCb3goKTtmLnNldE5vZGUoYix7d2lkdGg6Ui53aWR0aCxoZWlnaHQ6Ui5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOmJ9KX0pLHd9LEx6ZT1mdW5jdGlvbihpLGEpe2Eubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2YhPT12b2lkIDAmJmEubm9kZShmKSE9PXZvaWQgMCYmaS5zZWxlY3QoIiMiK2YpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhhLm5vZGUoZikueC1hLm5vZGUoZikud2lkdGgvMikrIiwiKyhhLm5vZGUoZikueS1hLm5vZGUoZikuaGVpZ2h0LzIpKyIgKSIpfSl9LFBCdD1mdW5jdGlvbihpKXtyZXR1cm4oaS5lbnRpdHlBK2kucm9sZUEraS5lbnRpdHlCKS5yZXBsYWNlKC9ccy9nLCIiKX0sTXplPWZ1bmN0aW9uKGksYSl7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihmKXthLnNldEVkZ2UoU0YuZ2V0KGYuZW50aXR5QSksU0YuZ2V0KGYuZW50aXR5Qikse3JlbGF0aW9uc2hpcDpmfSxQQnQoZikpfSksaX07bGV0IEZCdD0wO2NvbnN0IER6ZT1mdW5jdGlvbihpLGEsZixwLHcpe0ZCdCsrO2NvbnN0IG09Zi5lZGdlKFNGLmdldChhLmVudGl0eUEpLFNGLmdldChhLmVudGl0eUIpLFBCdChhKSksYj1FNSgpLngoZnVuY3Rpb24oeil7cmV0dXJuIHoueH0pLnkoZnVuY3Rpb24oeil7cmV0dXJuIHoueX0pLmN1cnZlKEhQKSxFPWkuaW5zZXJ0KCJwYXRoIiwiIyIrcCkuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGluZSIsITApLmF0dHIoImQiLGIobS5wb2ludHMpKS5zdHlsZSgic3Ryb2tlIix1MS5zdHJva2UpLnN0eWxlKCJmaWxsIiwibm9uZSIpO2EucmVsU3BlYy5yZWxUeXBlPT09dy5kYi5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkcmJkUuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjgsOCIpO2xldCBfPSIiO3N3aXRjaCh1MS5hcnJvd01hcmtlckFic29sdXRlJiYoXz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxfPV8ucmVwbGFjZSgvXCgvZywiXFwoIiksXz1fLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxhLnJlbFNwZWMuY2FyZEEpe2Nhc2Ugdy5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitfKyIjIitkbS5FUk1hcmtlcnMuWkVST19PUl9PTkVfRU5EKyIpIik7YnJlYWs7Y2FzZSB3LmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitfKyIjIitkbS5FUk1hcmtlcnMuWkVST19PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2Ugdy5kYi5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitfKyIjIitkbS5FUk1hcmtlcnMuT05FX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSB3LmRiLkNhcmRpbmFsaXR5Lk9OTFlfT05FOkUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK18rIiMiK2RtLkVSTWFya2Vycy5PTkxZX09ORV9FTkQrIikiKTticmVhaztjYXNlIHcuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOkUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK18rIiMiK2RtLkVSTWFya2Vycy5NRF9QQVJFTlRfRU5EKyIpIik7YnJlYWt9c3dpdGNoKGEucmVsU3BlYy5jYXJkQil7Y2FzZSB3LmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrXysiIyIrZG0uRVJNYXJrZXJzLlpFUk9fT1JfT05FX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSB3LmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpFLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK18rIiMiK2RtLkVSTWFya2Vycy5aRVJPX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHcuZGIuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitfKyIjIitkbS5FUk1hcmtlcnMuT05FX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHcuZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitfKyIjIitkbS5FUk1hcmtlcnMuT05MWV9PTkVfU1RBUlQrIikiKTticmVhaztjYXNlIHcuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrXysiIyIrZG0uRVJNYXJrZXJzLk1EX1BBUkVOVF9TVEFSVCsiKSIpO2JyZWFrfWNvbnN0IEE9RS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxJPUUubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoQSouNSksQj0icmVsIitGQnQsUj1pLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIHJlbGF0aW9uc2hpcExhYmVsIiwhMCkuYXR0cigiaWQiLEIpLmF0dHIoIngiLEkueCkuYXR0cigieSIsSS55KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1mYW1pbHkiLE9lKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsdTEuZm9udFNpemUrInB4IikudGV4dChhLnJvbGVBKS5ub2RlKCkuZ2V0QkJveCgpO2kuaW5zZXJ0KCJyZWN0IiwiIyIrQikuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGFiZWxCb3giLCEwKS5hdHRyKCJ4IixJLngtUi53aWR0aC8yKS5hdHRyKCJ5IixJLnktUi5oZWlnaHQvMikuYXR0cigid2lkdGgiLFIud2lkdGgpLmF0dHIoImhlaWdodCIsUi5oZWlnaHQpfSxJemU9ZnVuY3Rpb24oaSxhLGYscCl7dTE9T2UoKS5lcixVdC5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKTtjb25zdCB3PU9lKCkuc2VjdXJpdHlMZXZlbDtsZXQgbTt3PT09InNhbmRib3giJiYobT15cigiI2kiK2EpKTtjb25zdCBFPXlyKHc9PT0ic2FuZGJveCI/bS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KGBbaWQ9JyR7YX0nXWApO2RtLmluc2VydE1hcmtlcnMoRSx1MSk7bGV0IF87Xz1uZXcgYzEoe211bHRpZ3JhcGg6ITAsZGlyZWN0ZWQ6ITAsY29tcG91bmQ6ITF9KS5zZXRHcmFwaCh7cmFua2Rpcjp1MS5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7Y29uc3QgQT1BemUoRSxwLmRiLmdldEVudGl0aWVzKCksXyksST1NemUocC5kYi5nZXRSZWxhdGlvbnNoaXBzKCksXyk7YUwoXyksTHplKEUsXyksSS5mb3JFYWNoKGZ1bmN0aW9uKFcpe0R6ZShFLFcsXyxBLHApfSk7Y29uc3QgQj11MS5kaWFncmFtUGFkZGluZzskYS5pbnNlcnRUaXRsZShFLCJlbnRpdHlUaXRsZVRleHQiLHUxLnRpdGxlVG9wTWFyZ2luLHAuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO2NvbnN0IE49RS5ub2RlKCkuZ2V0QkJveCgpLFI9Ti53aWR0aCtCKjIsej1OLmhlaWdodCtCKjI7azAoRSx6LFIsdTEudXNlTWF4V2lkdGgpLEUuYXR0cigidmlld0JveCIsYCR7Ti54LUJ9ICR7Ti55LUJ9ICR7Un0gJHt6fWApfSxPemU9IjI4ZTlmOWRiLTNjOGQtNWFhNS05ZmFmLTQ0Mjg2YWU1OTM3YyI7ZnVuY3Rpb24gUHplKGk9IiIsYT0iIil7Y29uc3QgZj1pLnJlcGxhY2UoQ3plLCIiKTtyZXR1cm5gJHtOQnQoYSl9JHtOQnQoZil9JHtUemUoaSxPemUpfWB9ZnVuY3Rpb24gTkJ0KGk9IiIpe3JldHVybiBpLmxlbmd0aD4wP2Ake2l9LWA6IiJ9Y29uc3QgRnplPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6bHplLGRiOmR6ZSxyZW5kZXJlcjp7c2V0Q29uZjpfemUsZHJhdzpJemV9LHN0eWxlczppPT5gCiAgLmVudGl0eUJveCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hPZGQgewogICAgZmlsbDogJHtpLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZH07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hFdmVuIHsKICAgIGZpbGw6ICAke2kuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbn07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5yZWxhdGlvbnNoaXBMYWJlbEJveCB7CiAgICBmaWxsOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBvcGFjaXR5OiAwLjc7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kudGVydGlhcnlDb2xvcn07CiAgICAgIHJlY3QgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogIH0KCiAgICAucmVsYXRpb25zaGlwTGluZSB7CiAgICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICB9CgogIC5lbnRpdHlUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0gICAgCiAgI01EX1BBUkVOVF9TVEFSVCB7CiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogICNNRF9QQVJFTlRfRU5EIHsKICAgIGZpbGw6ICNmNWY1ZjUgIWltcG9ydGFudDsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICAgIHN0cm9rZS13aWR0aDogMTsKICB9CiAgCmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciB6MHQ9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbih5dCxmdCx1dCx2dCl7Zm9yKHV0PXV0fHx7fSx2dD15dC5sZW5ndGg7dnQtLTt1dFt5dFt2dF1dPWZ0KTtyZXR1cm4gdXR9LGE9WzEsM10sZj1bMSw2XSxwPVsxLDRdLHc9WzEsNV0sbT1bMiw1XSxiPVsxLDEyXSxFPVs1LDcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzYsMzksNDZdLF89WzcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzYsMzldLEE9WzcsMTIsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzYsMzldLEk9WzcsMTMsNDZdLEI9WzEsNDJdLE49WzEsNDFdLFI9WzcsMTMsMjksMzIsMzQsMzcsNDZdLHo9WzEsNTVdLFc9WzEsNTZdLGV0PVsxLDU3XSxzdD1bNywxMywzMiwzNCw0MSw0Nl0sYXQ9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LEdHOjUsZG9jdW1lbnQ6NixFT0Y6NywiOiI6OCxESVI6OSxvcHRpb25zOjEwLGJvZHk6MTEsT1BUOjEyLE5MOjEzLGxpbmU6MTQsc3RhdGVtZW50OjE1LGNvbW1pdFN0YXRlbWVudDoxNixtZXJnZVN0YXRlbWVudDoxNyxjaGVycnlQaWNrU3RhdGVtZW50OjE4LGFjY190aXRsZToxOSxhY2NfdGl0bGVfdmFsdWU6MjAsYWNjX2Rlc2NyOjIxLGFjY19kZXNjcl92YWx1ZToyMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjIzLHNlY3Rpb246MjQsYnJhbmNoU3RhdGVtZW50OjI1LENIRUNLT1VUOjI2LHJlZjoyNyxCUkFOQ0g6MjgsT1JERVI6MjksTlVNOjMwLENIRVJSWV9QSUNLOjMxLENPTU1JVF9JRDozMixTVFI6MzMsQ09NTUlUX1RBRzozNCxFTVBUWVNUUjozNSxNRVJHRTozNixDT01NSVRfVFlQRTozNyxjb21taXRUeXBlOjM4LENPTU1JVDozOSxjb21taXRfYXJnOjQwLENPTU1JVF9NU0c6NDEsTk9STUFMOjQyLFJFVkVSU0U6NDMsSElHSExJR0hUOjQ0LElEOjQ1LCI7Ijo0NiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiR0ciLDc6IkVPRiIsODoiOiIsOToiRElSIiwxMjoiT1BUIiwxMzoiTkwiLDE5OiJhY2NfdGl0bGUiLDIwOiJhY2NfdGl0bGVfdmFsdWUiLDIxOiJhY2NfZGVzY3IiLDIyOiJhY2NfZGVzY3JfdmFsdWUiLDIzOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNDoic2VjdGlvbiIsMjY6IkNIRUNLT1VUIiwyODoiQlJBTkNIIiwyOToiT1JERVIiLDMwOiJOVU0iLDMxOiJDSEVSUllfUElDSyIsMzI6IkNPTU1JVF9JRCIsMzM6IlNUUiIsMzQ6IkNPTU1JVF9UQUciLDM1OiJFTVBUWVNUUiIsMzY6Ik1FUkdFIiwzNzoiQ09NTUlUX1RZUEUiLDM5OiJDT01NSVQiLDQxOiJDT01NSVRfTVNHIiw0MjoiTk9STUFMIiw0MzoiUkVWRVJTRSIsNDQ6IkhJR0hMSUdIVCIsNDU6IklEIiw0NjoiOyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywzXSxbMyw0XSxbMyw1XSxbNiwwXSxbNiwyXSxbMTAsMl0sWzEwLDFdLFsxMSwwXSxbMTEsMl0sWzE0LDJdLFsxNCwxXSxbMTUsMV0sWzE1LDFdLFsxNSwxXSxbMTUsMl0sWzE1LDJdLFsxNSwxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMjUsMl0sWzI1LDRdLFsxOCwzXSxbMTgsNV0sWzE4LDVdLFsxOCw1XSxbMTgsNV0sWzE3LDJdLFsxNyw0XSxbMTcsNF0sWzE3LDRdLFsxNyw2XSxbMTcsNl0sWzE3LDZdLFsxNyw2XSxbMTcsNl0sWzE3LDZdLFsxNyw4XSxbMTcsOF0sWzE3LDhdLFsxNyw4XSxbMTcsOF0sWzE3LDhdLFsxNiwyXSxbMTYsM10sWzE2LDNdLFsxNiw1XSxbMTYsNV0sWzE2LDNdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsM10sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzQwLDBdLFs0MCwxXSxbMzgsMV0sWzM4LDFdLFszOCwxXSxbMjcsMV0sWzI3LDFdLFs0LDFdLFs0LDFdLFs0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGZ0LHV0LHZ0LFgscHQsVSxUdCl7dmFyIG50PVUubGVuZ3RoLTE7c3dpdGNoKHB0KXtjYXNlIDI6cmV0dXJuIFVbbnRdO2Nhc2UgMzpyZXR1cm4gVVtudC0xXTtjYXNlIDQ6cmV0dXJuIFguc2V0RGlyZWN0aW9uKFVbbnQtM10pLFVbbnQtMV07Y2FzZSA2Olguc2V0T3B0aW9ucyhVW250LTFdKSx0aGlzLiQ9VVtudF07YnJlYWs7Y2FzZSA3OlVbbnQtMV0rPVVbbnRdLHRoaXMuJD1VW250LTFdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMDpVW250LTFdLnB1c2goVVtudF0pLHRoaXMuJD1VW250LTFdO2JyZWFrO2Nhc2UgMTE6dGhpcy4kPVVbbnQtMV07YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9VVtudF0udHJpbSgpLFguc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OmNhc2UgMTg6dGhpcy4kPVVbbnRdLnRyaW0oKSxYLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTpYLmFkZFNlY3Rpb24oVVtudF0uc3Vic3RyKDgpKSx0aGlzLiQ9VVtudF0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMjE6WC5jaGVja291dChVW250XSk7YnJlYWs7Y2FzZSAyMjpYLmJyYW5jaChVW250XSk7YnJlYWs7Y2FzZSAyMzpYLmJyYW5jaChVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDI0OlguY2hlcnJ5UGljayhVW250XSwiIix2b2lkIDApO2JyZWFrO2Nhc2UgMjU6WC5jaGVycnlQaWNrKFVbbnQtMl0sIiIsVVtudF0pO2JyZWFrO2Nhc2UgMjY6Y2FzZSAyODpYLmNoZXJyeVBpY2soVVtudC0yXSwiIiwiIik7YnJlYWs7Y2FzZSAyNzpYLmNoZXJyeVBpY2soVVtudF0sIiIsVVtudC0yXSk7YnJlYWs7Y2FzZSAyOTpYLm1lcmdlKFVbbnRdLCIiLCIiLCIiKTticmVhaztjYXNlIDMwOlgubWVyZ2UoVVtudC0yXSxVW250XSwiIiwiIik7YnJlYWs7Y2FzZSAzMTpYLm1lcmdlKFVbbnQtMl0sIiIsVVtudF0sIiIpO2JyZWFrO2Nhc2UgMzI6WC5tZXJnZShVW250LTJdLCIiLCIiLFVbbnRdKTticmVhaztjYXNlIDMzOlgubWVyZ2UoVVtudC00XSxVW250XSwiIixVW250LTJdKTticmVhaztjYXNlIDM0OlgubWVyZ2UoVVtudC00XSwiIixVW250XSxVW250LTJdKTticmVhaztjYXNlIDM1OlgubWVyZ2UoVVtudC00XSwiIixVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDM2OlgubWVyZ2UoVVtudC00XSxVW250LTJdLFVbbnRdLCIiKTticmVhaztjYXNlIDM3OlgubWVyZ2UoVVtudC00XSxVW250LTJdLCIiLFVbbnRdKTticmVhaztjYXNlIDM4OlgubWVyZ2UoVVtudC00XSxVW250XSxVW250LTJdLCIiKTticmVhaztjYXNlIDM5OlgubWVyZ2UoVVtudC02XSxVW250LTRdLFVbbnQtMl0sVVtudF0pO2JyZWFrO2Nhc2UgNDA6WC5tZXJnZShVW250LTZdLFVbbnRdLFVbbnQtNF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA0MTpYLm1lcmdlKFVbbnQtNl0sVVtudC00XSxVW250XSxVW250LTJdKTticmVhaztjYXNlIDQyOlgubWVyZ2UoVVtudC02XSxVW250LTJdLFVbbnQtNF0sVVtudF0pO2JyZWFrO2Nhc2UgNDM6WC5tZXJnZShVW250LTZdLFVbbnRdLFVbbnQtMl0sVVtudC00XSk7YnJlYWs7Y2FzZSA0NDpYLm1lcmdlKFVbbnQtNl0sVVtudC0yXSxVW250XSxVW250LTRdKTticmVhaztjYXNlIDQ1OlguY29tbWl0KFVbbnRdKTticmVhaztjYXNlIDQ2OlguY29tbWl0KCIiLCIiLFguY29tbWl0VHlwZS5OT1JNQUwsVVtudF0pO2JyZWFrO2Nhc2UgNDc6WC5jb21taXQoIiIsIiIsVVtudF0sIiIpO2JyZWFrO2Nhc2UgNDg6WC5jb21taXQoIiIsIiIsVVtudF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA0OTpYLmNvbW1pdCgiIiwiIixVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDUwOlguY29tbWl0KCIiLFVbbnRdLFguY29tbWl0VHlwZS5OT1JNQUwsIiIpO2JyZWFrO2Nhc2UgNTE6WC5jb21taXQoIiIsVVtudC0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDUyOlguY29tbWl0KCIiLFVbbnRdLFguY29tbWl0VHlwZS5OT1JNQUwsVVtudC0yXSk7YnJlYWs7Y2FzZSA1MzpYLmNvbW1pdCgiIixVW250LTJdLFVbbnRdLCIiKTticmVhaztjYXNlIDU0OlguY29tbWl0KCIiLFVbbnRdLFVbbnQtMl0sIiIpO2JyZWFrO2Nhc2UgNTU6WC5jb21taXQoIiIsVVtudC00XSxVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDU2OlguY29tbWl0KCIiLFVbbnQtNF0sVVtudF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA1NzpYLmNvbW1pdCgiIixVW250LTJdLFVbbnQtNF0sVVtudF0pO2JyZWFrO2Nhc2UgNTg6WC5jb21taXQoIiIsVVtudF0sVVtudC00XSxVW250LTJdKTticmVhaztjYXNlIDU5OlguY29tbWl0KCIiLFVbbnRdLFVbbnQtMl0sVVtudC00XSk7YnJlYWs7Y2FzZSA2MDpYLmNvbW1pdCgiIixVW250LTJdLFVbbnRdLFVbbnQtNF0pO2JyZWFrO2Nhc2UgNjE6WC5jb21taXQoVVtudF0sIiIsWC5jb21taXRUeXBlLk5PUk1BTCwiIik7YnJlYWs7Y2FzZSA2MjpYLmNvbW1pdChVW250XSwiIixYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnQtMl0pO2JyZWFrO2Nhc2UgNjM6WC5jb21taXQoVVtudC0yXSwiIixYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDY0OlguY29tbWl0KFVbbnQtMl0sIiIsVVtudF0sIiIpO2JyZWFrO2Nhc2UgNjU6WC5jb21taXQoVVtudF0sIiIsVVtudC0yXSwiIik7YnJlYWs7Y2FzZSA2NjpYLmNvbW1pdChVW250XSxVW250LTJdLFguY29tbWl0VHlwZS5OT1JNQUwsIiIpO2JyZWFrO2Nhc2UgNjc6WC5jb21taXQoVVtudC0yXSxVW250XSxYLmNvbW1pdFR5cGUuTk9STUFMLCIiKTticmVhaztjYXNlIDY4OlguY29tbWl0KFVbbnQtNF0sIiIsVVtudC0yXSxVW250XSk7YnJlYWs7Y2FzZSA2OTpYLmNvbW1pdChVW250LTRdLCIiLFVbbnRdLFVbbnQtMl0pO2JyZWFrO2Nhc2UgNzA6WC5jb21taXQoVVtudC0yXSwiIixVW250LTRdLFVbbnRdKTticmVhaztjYXNlIDcxOlguY29tbWl0KFVbbnRdLCIiLFVbbnQtNF0sVVtudC0yXSk7YnJlYWs7Y2FzZSA3MjpYLmNvbW1pdChVW250XSwiIixVW250LTJdLFVbbnQtNF0pO2JyZWFrO2Nhc2UgNzM6WC5jb21taXQoVVtudC0yXSwiIixVW250XSxVW250LTRdKTticmVhaztjYXNlIDc0OlguY29tbWl0KFVbbnQtNF0sVVtudF0sVVtudC0yXSwiIik7YnJlYWs7Y2FzZSA3NTpYLmNvbW1pdChVW250LTRdLFVbbnQtMl0sVVtudF0sIiIpO2JyZWFrO2Nhc2UgNzY6WC5jb21taXQoVVtudC0yXSxVW250XSxVW250LTRdLCIiKTticmVhaztjYXNlIDc3OlguY29tbWl0KFVbbnRdLFVbbnQtMl0sVVtudC00XSwiIik7YnJlYWs7Y2FzZSA3ODpYLmNvbW1pdChVW250XSxVW250LTRdLFVbbnQtMl0sIiIpO2JyZWFrO2Nhc2UgNzk6WC5jb21taXQoVVtudC0yXSxVW250LTRdLFVbbnRdLCIiKTticmVhaztjYXNlIDgwOlguY29tbWl0KFVbbnQtNF0sVVtudF0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTJdKTticmVhaztjYXNlIDgxOlguY29tbWl0KFVbbnQtNF0sVVtudC0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDgyOlguY29tbWl0KFVbbnQtMl0sVVtudF0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTRdKTticmVhaztjYXNlIDgzOlguY29tbWl0KFVbbnRdLFVbbnQtMl0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTRdKTticmVhaztjYXNlIDg0OlguY29tbWl0KFVbbnRdLFVbbnQtNF0sWC5jb21taXRUeXBlLk5PUk1BTCxVW250LTJdKTticmVhaztjYXNlIDg1OlguY29tbWl0KFVbbnQtMl0sVVtudC00XSxYLmNvbW1pdFR5cGUuTk9STUFMLFVbbnRdKTticmVhaztjYXNlIDg2OlguY29tbWl0KFVbbnQtNl0sVVtudC00XSxVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDg3OlguY29tbWl0KFVbbnQtNl0sVVtudC00XSxVW250XSxVW250LTJdKTticmVhaztjYXNlIDg4OlguY29tbWl0KFVbbnQtNl0sVVtudC0yXSxVW250LTRdLFVbbnRdKTticmVhaztjYXNlIDg5OlguY29tbWl0KFVbbnQtNl0sVVtudF0sVVtudC00XSxVW250LTJdKTticmVhaztjYXNlIDkwOlguY29tbWl0KFVbbnQtNl0sVVtudC0yXSxVW250XSxVW250LTRdKTticmVhaztjYXNlIDkxOlguY29tbWl0KFVbbnQtNl0sVVtudF0sVVtudC0yXSxVW250LTRdKTticmVhaztjYXNlIDkyOlguY29tbWl0KFVbbnQtNF0sVVtudC02XSxVW250LTJdLFVbbnRdKTticmVhaztjYXNlIDkzOlguY29tbWl0KFVbbnQtNF0sVVtudC02XSxVW250XSxVW250LTJdKTticmVhaztjYXNlIDk0OlguY29tbWl0KFVbbnQtMl0sVVtudC02XSxVW250LTRdLFVbbnRdKTticmVhaztjYXNlIDk1OlguY29tbWl0KFVbbnRdLFVbbnQtNl0sVVtudC00XSxVW250LTJdKTticmVhaztjYXNlIDk2OlguY29tbWl0KFVbbnQtMl0sVVtudC02XSxVW250XSxVW250LTRdKTticmVhaztjYXNlIDk3OlguY29tbWl0KFVbbnRdLFVbbnQtNl0sVVtudC0yXSxVW250LTRdKTticmVhaztjYXNlIDk4OlguY29tbWl0KFVbbnRdLFVbbnQtNF0sVVtudC0yXSxVW250LTZdKTticmVhaztjYXNlIDk5OlguY29tbWl0KFVbbnQtMl0sVVtudC00XSxVW250XSxVW250LTZdKTticmVhaztjYXNlIDEwMDpYLmNvbW1pdChVW250XSxVW250LTJdLFVbbnQtNF0sVVtudC02XSk7YnJlYWs7Y2FzZSAxMDE6WC5jb21taXQoVVtudC0yXSxVW250XSxVW250LTRdLFVbbnQtNl0pO2JyZWFrO2Nhc2UgMTAyOlguY29tbWl0KFVbbnQtNF0sVVtudC0yXSxVW250XSxVW250LTZdKTticmVhaztjYXNlIDEwMzpYLmNvbW1pdChVW250LTRdLFVbbnRdLFVbbnQtMl0sVVtudC02XSk7YnJlYWs7Y2FzZSAxMDQ6WC5jb21taXQoVVtudC0yXSxVW250LTRdLFVbbnQtNl0sVVtudF0pO2JyZWFrO2Nhc2UgMTA1OlguY29tbWl0KFVbbnRdLFVbbnQtNF0sVVtudC02XSxVW250LTJdKTticmVhaztjYXNlIDEwNjpYLmNvbW1pdChVW250LTJdLFVbbnRdLFVbbnQtNl0sVVtudC00XSk7YnJlYWs7Y2FzZSAxMDc6WC5jb21taXQoVVtudF0sVVtudC0yXSxVW250LTZdLFVbbnQtNF0pO2JyZWFrO2Nhc2UgMTA4OlguY29tbWl0KFVbbnQtNF0sVVtudC0yXSxVW250LTZdLFVbbnRdKTticmVhaztjYXNlIDEwOTpYLmNvbW1pdChVW250LTRdLFVbbnRdLFVbbnQtNl0sVVtudC0yXSk7YnJlYWs7Y2FzZSAxMTA6dGhpcy4kPSIiO2JyZWFrO2Nhc2UgMTExOnRoaXMuJD1VW250XTticmVhaztjYXNlIDExMjp0aGlzLiQ9WC5jb21taXRUeXBlLk5PUk1BTDticmVhaztjYXNlIDExMzp0aGlzLiQ9WC5jb21taXRUeXBlLlJFVkVSU0U7YnJlYWs7Y2FzZSAxMTQ6dGhpcy4kPVguY29tbWl0VHlwZS5ISUdITElHSFQ7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTphLDc6ZiwxMzpwLDQ2Ond9LHsxOlszXX0sezM6Nyw0OjIsNTphLDc6ZiwxMzpwLDQ2Ond9LHs2OjgsNzptLDg6WzEsOV0sOTpbMSwxMF0sMTA6MTEsMTM6Yn0saShFLFsyLDExN10pLGkoRSxbMiwxMThdKSxpKEUsWzIsMTE5XSksezE6WzIsMV19LHs3OlsxLDEzXX0sezY6MTQsNzptLDEwOjExLDEzOmJ9LHs4OlsxLDE1XX0saShfLFsyLDldLHsxMToxNiwxMjpbMSwxN119KSxpKEEsWzIsOF0pLHsxOlsyLDJdfSx7NzpbMSwxOF19LHs2OjE5LDc6bSwxMDoxMSwxMzpifSx7NzpbMiw2XSwxMzpbMSwyMl0sMTQ6MjAsMTU6MjEsMTY6MjMsMTc6MjQsMTg6MjUsMTk6WzEsMjZdLDIxOlsxLDI3XSwyMzpbMSwyOF0sMjQ6WzEsMjldLDI1OjMwLDI2OlsxLDMxXSwyODpbMSwzNV0sMzE6WzEsMzRdLDM2OlsxLDMzXSwzOTpbMSwzMl19LGkoQSxbMiw3XSksezE6WzIsM119LHs3OlsxLDM2XX0saShfLFsyLDEwXSksezQ6MzcsNzpmLDEzOnAsNDY6d30saShfLFsyLDEyXSksaShJLFsyLDEzXSksaShJLFsyLDE0XSksaShJLFsyLDE1XSksezIwOlsxLDM4XX0sezIyOlsxLDM5XX0saShJLFsyLDE4XSksaShJLFsyLDE5XSksaShJLFsyLDIwXSksezI3OjQwLDMzOkIsNDU6Tn0saShJLFsyLDExMF0sezQwOjQzLDMyOlsxLDQ2XSwzMzpbMSw0OF0sMzQ6WzEsNDRdLDM3OlsxLDQ1XSw0MTpbMSw0N119KSx7Mjc6NDksMzM6Qiw0NTpOfSx7MzI6WzEsNTBdLDM0OlsxLDUxXX0sezI3OjUyLDMzOkIsNDU6Tn0sezE6WzIsNF19LGkoXyxbMiwxMV0pLGkoSSxbMiwxNl0pLGkoSSxbMiwxN10pLGkoSSxbMiwyMV0pLGkoUixbMiwxMTVdKSxpKFIsWzIsMTE2XSksaShJLFsyLDQ1XSksezMzOlsxLDUzXX0sezM4OjU0LDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDU4XX0sezMzOlsxLDU5XX0saShJLFsyLDExMV0pLGkoSSxbMiwyOV0sezMyOlsxLDYwXSwzNDpbMSw2Ml0sMzc6WzEsNjFdfSksezMzOlsxLDYzXX0sezMzOlsxLDY0XSwzNTpbMSw2NV19LGkoSSxbMiwyMl0sezI5OlsxLDY2XX0pLGkoSSxbMiw0Nl0sezMyOlsxLDY4XSwzNzpbMSw2N10sNDE6WzEsNjldfSksaShJLFsyLDQ3XSx7MzI6WzEsNzFdLDM0OlsxLDcwXSw0MTpbMSw3Ml19KSxpKHN0LFsyLDExMl0pLGkoc3QsWzIsMTEzXSksaShzdCxbMiwxMTRdKSxpKEksWzIsNTBdLHszNDpbMSw3M10sMzc6WzEsNzRdLDQxOlsxLDc1XX0pLGkoSSxbMiw2MV0sezMyOlsxLDc4XSwzNDpbMSw3Nl0sMzc6WzEsNzddfSksezMzOlsxLDc5XX0sezM4OjgwLDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDgxXX0saShJLFsyLDI0XSx7MzQ6WzEsODJdfSksezMyOlsxLDgzXX0sezMyOlsxLDg0XX0sezMwOlsxLDg1XX0sezM4Ojg2LDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDg3XX0sezMzOlsxLDg4XX0sezMzOlsxLDg5XX0sezMzOlsxLDkwXX0sezMzOlsxLDkxXX0sezMzOlsxLDkyXX0sezM4OjkzLDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDk0XX0sezMzOlsxLDk1XX0sezM4Ojk2LDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDk3XX0saShJLFsyLDMwXSx7MzQ6WzEsOTldLDM3OlsxLDk4XX0pLGkoSSxbMiwzMV0sezMyOlsxLDEwMV0sMzQ6WzEsMTAwXX0pLGkoSSxbMiwzMl0sezMyOlsxLDEwMl0sMzc6WzEsMTAzXX0pLHszMzpbMSwxMDRdLDM1OlsxLDEwNV19LHszMzpbMSwxMDZdfSx7MzM6WzEsMTA3XX0saShJLFsyLDIzXSksaShJLFsyLDQ4XSx7MzI6WzEsMTA4XSw0MTpbMSwxMDldfSksaShJLFsyLDUyXSx7Mzc6WzEsMTEwXSw0MTpbMSwxMTFdfSksaShJLFsyLDYyXSx7MzI6WzEsMTEzXSwzNzpbMSwxMTJdfSksaShJLFsyLDQ5XSx7MzI6WzEsMTE0XSw0MTpbMSwxMTVdfSksaShJLFsyLDU0XSx7MzQ6WzEsMTE2XSw0MTpbMSwxMTddfSksaShJLFsyLDY1XSx7MzI6WzEsMTE5XSwzNDpbMSwxMThdfSksaShJLFsyLDUxXSx7Mzc6WzEsMTIwXSw0MTpbMSwxMjFdfSksaShJLFsyLDUzXSx7MzQ6WzEsMTIyXSw0MTpbMSwxMjNdfSksaShJLFsyLDY2XSx7MzQ6WzEsMTI1XSwzNzpbMSwxMjRdfSksaShJLFsyLDYzXSx7MzI6WzEsMTI3XSwzNzpbMSwxMjZdfSksaShJLFsyLDY0XSx7MzI6WzEsMTI5XSwzNDpbMSwxMjhdfSksaShJLFsyLDY3XSx7MzQ6WzEsMTMxXSwzNzpbMSwxMzBdfSksezM4OjEzMiw0Mjp6LDQzOlcsNDQ6ZXR9LHszMzpbMSwxMzNdfSx7MzM6WzEsMTM0XX0sezMzOlsxLDEzNV19LHszMzpbMSwxMzZdfSx7Mzg6MTM3LDQyOnosNDM6Vyw0NDpldH0saShJLFsyLDI1XSksaShJLFsyLDI2XSksaShJLFsyLDI3XSksaShJLFsyLDI4XSksezMzOlsxLDEzOF19LHszMzpbMSwxMzldfSx7Mzg6MTQwLDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDE0MV19LHszODoxNDIsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMTQzXX0sezMzOlsxLDE0NF19LHszMzpbMSwxNDVdfSx7MzM6WzEsMTQ2XX0sezMzOlsxLDE0N119LHszMzpbMSwxNDhdfSx7MzM6WzEsMTQ5XX0sezM4OjE1MCw0Mjp6LDQzOlcsNDQ6ZXR9LHszMzpbMSwxNTFdfSx7MzM6WzEsMTUyXX0sezMzOlsxLDE1M119LHszODoxNTQsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMTU1XX0sezM4OjE1Niw0Mjp6LDQzOlcsNDQ6ZXR9LHszMzpbMSwxNTddfSx7MzM6WzEsMTU4XX0sezMzOlsxLDE1OV19LHszODoxNjAsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMTYxXX0saShJLFsyLDM2XSx7MzQ6WzEsMTYyXX0pLGkoSSxbMiwzN10sezM3OlsxLDE2M119KSxpKEksWzIsMzVdLHszMjpbMSwxNjRdfSksaShJLFsyLDM4XSx7MzQ6WzEsMTY1XX0pLGkoSSxbMiwzM10sezM3OlsxLDE2Nl19KSxpKEksWzIsMzRdLHszMjpbMSwxNjddfSksaShJLFsyLDU5XSx7NDE6WzEsMTY4XX0pLGkoSSxbMiw3Ml0sezMyOlsxLDE2OV19KSxpKEksWzIsNjBdLHs0MTpbMSwxNzBdfSksaShJLFsyLDgzXSx7Mzc6WzEsMTcxXX0pLGkoSSxbMiw3M10sezMyOlsxLDE3Ml19KSxpKEksWzIsODJdLHszNzpbMSwxNzNdfSksaShJLFsyLDU4XSx7NDE6WzEsMTc0XX0pLGkoSSxbMiw3MV0sezMyOlsxLDE3NV19KSxpKEksWzIsNTddLHs0MTpbMSwxNzZdfSksaShJLFsyLDc3XSx7MzQ6WzEsMTc3XX0pLGkoSSxbMiw3MF0sezMyOlsxLDE3OF19KSxpKEksWzIsNzZdLHszNDpbMSwxNzldfSksaShJLFsyLDU2XSx7NDE6WzEsMTgwXX0pLGkoSSxbMiw4NF0sezM3OlsxLDE4MV19KSxpKEksWzIsNTVdLHs0MTpbMSwxODJdfSksaShJLFsyLDc4XSx7MzQ6WzEsMTgzXX0pLGkoSSxbMiw3OV0sezM0OlsxLDE4NF19KSxpKEksWzIsODVdLHszNzpbMSwxODVdfSksaShJLFsyLDY5XSx7MzI6WzEsMTg2XX0pLGkoSSxbMiw4MF0sezM3OlsxLDE4N119KSxpKEksWzIsNjhdLHszMjpbMSwxODhdfSksaShJLFsyLDc0XSx7MzQ6WzEsMTg5XX0pLGkoSSxbMiw3NV0sezM0OlsxLDE5MF19KSxpKEksWzIsODFdLHszNzpbMSwxOTFdfSksezMzOlsxLDE5Ml19LHszODoxOTMsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMTk0XX0sezMzOlsxLDE5NV19LHszODoxOTYsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMTk3XX0sezMzOlsxLDE5OF19LHszMzpbMSwxOTldfSx7MzM6WzEsMjAwXX0sezM4OjIwMSw0Mjp6LDQzOlcsNDQ6ZXR9LHszMzpbMSwyMDJdfSx7Mzg6MjAzLDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDIwNF19LHszMzpbMSwyMDVdfSx7MzM6WzEsMjA2XX0sezMzOlsxLDIwN119LHszMzpbMSwyMDhdfSx7MzM6WzEsMjA5XX0sezMzOlsxLDIxMF19LHszODoyMTEsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMjEyXX0sezMzOlsxLDIxM119LHszMzpbMSwyMTRdfSx7Mzg6MjE1LDQyOnosNDM6Vyw0NDpldH0sezMzOlsxLDIxNl19LHszODoyMTcsNDI6eiw0MzpXLDQ0OmV0fSx7MzM6WzEsMjE4XX0sezMzOlsxLDIxOV19LHszMzpbMSwyMjBdfSx7Mzg6MjIxLDQyOnosNDM6Vyw0NDpldH0saShJLFsyLDM5XSksaShJLFsyLDQxXSksaShJLFsyLDQwXSksaShJLFsyLDQyXSksaShJLFsyLDQ0XSksaShJLFsyLDQzXSksaShJLFsyLDEwMF0pLGkoSSxbMiwxMDFdKSxpKEksWzIsOThdKSxpKEksWzIsOTldKSxpKEksWzIsMTAzXSksaShJLFsyLDEwMl0pLGkoSSxbMiwxMDddKSxpKEksWzIsMTA2XSksaShJLFsyLDEwNV0pLGkoSSxbMiwxMDRdKSxpKEksWzIsMTA5XSksaShJLFsyLDEwOF0pLGkoSSxbMiw5N10pLGkoSSxbMiw5Nl0pLGkoSSxbMiw5NV0pLGkoSSxbMiw5NF0pLGkoSSxbMiw5Ml0pLGkoSSxbMiw5M10pLGkoSSxbMiw5MV0pLGkoSSxbMiw5MF0pLGkoSSxbMiw4OV0pLGkoSSxbMiw4OF0pLGkoSSxbMiw4Nl0pLGkoSSxbMiw4N10pXSxkZWZhdWx0QWN0aW9uczp7NzpbMiwxXSwxMzpbMiwyXSwxODpbMiwzXSwzNjpbMiw0XX0scGFyc2VFcnJvcjpmdW5jdGlvbihmdCx1dCl7aWYodXQucmVjb3ZlcmFibGUpdGhpcy50cmFjZShmdCk7ZWxzZXt2YXIgdnQ9bmV3IEVycm9yKGZ0KTt0aHJvdyB2dC5oYXNoPXV0LHZ0fX0scGFyc2U6ZnVuY3Rpb24oZnQpe3ZhciB1dD10aGlzLHZ0PVswXSxYPVtdLHB0PVtudWxsXSxVPVtdLFR0PXRoaXMudGFibGUsbnQ9IiIsSXQ9MCxPdD0wLEJ0PTIsRXQ9MSxaPVUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksQ3Q9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx4dD17eXk6e319O2Zvcih2YXIgSHQgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxIdCkmJih4dC55eVtIdF09dGhpcy55eVtIdF0pO0N0LnNldElucHV0KGZ0LHh0Lnl5KSx4dC55eS5sZXhlcj1DdCx4dC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgQ3QueXlsbG9jPiJ1IiYmKEN0Lnl5bGxvYz17fSk7dmFyIExlPUN0Lnl5bGxvYztVLnB1c2goTGUpO3ZhciBGdD1DdC5vcHRpb25zJiZDdC5vcHRpb25zLnJhbmdlczt0eXBlb2YgeHQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9eHQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gZ24oKXt2YXIgdGU7cmV0dXJuIHRlPVgucG9wKCl8fEN0LmxleCgpfHxFdCx0eXBlb2YgdGUhPSJudW1iZXIiJiYodGUgaW5zdGFuY2VvZiBBcnJheSYmKFg9dGUsdGU9WC5wb3AoKSksdGU9dXQuc3ltYm9sc19bdGVdfHx0ZSksdGV9Zm9yKHZhciBTZSxtZSxWZSxZZSxjZT17fSxrZSx6dCxyZSxzZTs7KXtpZihtZT12dFt2dC5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1ttZV0/VmU9dGhpcy5kZWZhdWx0QWN0aW9uc1ttZV06KChTZT09PW51bGx8fHR5cGVvZiBTZT4idSIpJiYoU2U9Z24oKSksVmU9VHRbbWVdJiZUdFttZV1bU2VdKSx0eXBlb2YgVmU+InUifHwhVmUubGVuZ3RofHwhVmVbMF0pe3ZhciBQZT0iIjtzZT1bXTtmb3Ioa2UgaW4gVHRbbWVdKXRoaXMudGVybWluYWxzX1trZV0mJmtlPkJ0JiZzZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19ba2VdKyInIik7Q3Quc2hvd1Bvc2l0aW9uP1BlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEl0KzEpK2A6CmArQ3Quc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtzZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1NlXXx8U2UpKyInIjpQZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhJdCsxKSsiOiBVbmV4cGVjdGVkICIrKFNlPT1FdD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tTZV18fFNlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihQZSx7dGV4dDpDdC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bU2VdfHxTZSxsaW5lOkN0Lnl5bGluZW5vLGxvYzpMZSxleHBlY3RlZDpzZX0pfWlmKFZlWzBdaW5zdGFuY2VvZiBBcnJheSYmVmUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIittZSsiLCB0b2tlbjogIitTZSk7c3dpdGNoKFZlWzBdKXtjYXNlIDE6dnQucHVzaChTZSkscHQucHVzaChDdC55eXRleHQpLFUucHVzaChDdC55eWxsb2MpLHZ0LnB1c2goVmVbMV0pLFNlPW51bGwsT3Q9Q3QueXlsZW5nLG50PUN0Lnl5dGV4dCxJdD1DdC55eWxpbmVubyxMZT1DdC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKHp0PXRoaXMucHJvZHVjdGlvbnNfW1ZlWzFdXVsxXSxjZS4kPXB0W3B0Lmxlbmd0aC16dF0sY2UuXyQ9e2ZpcnN0X2xpbmU6VVtVLmxlbmd0aC0oenR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpVW1UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46VVtVLmxlbmd0aC0oenR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46VVtVLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sRnQmJihjZS5fJC5yYW5nZT1bVVtVLmxlbmd0aC0oenR8fDEpXS5yYW5nZVswXSxVW1UubGVuZ3RoLTFdLnJhbmdlWzFdXSksWWU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGNlLFtudCxPdCxJdCx4dC55eSxWZVsxXSxwdCxVXS5jb25jYXQoWikpLHR5cGVvZiBZZTwidSIpcmV0dXJuIFllO3p0JiYodnQ9dnQuc2xpY2UoMCwtMSp6dCoyKSxwdD1wdC5zbGljZSgwLC0xKnp0KSxVPVUuc2xpY2UoMCwtMSp6dCkpLHZ0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bVmVbMV1dWzBdKSxwdC5wdXNoKGNlLiQpLFUucHVzaChjZS5fJCkscmU9VHRbdnRbdnQubGVuZ3RoLTJdXVt2dFt2dC5sZW5ndGgtMV1dLHZ0LnB1c2gocmUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxidD1mdW5jdGlvbigpe3ZhciB5dD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih1dCx2dCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih1dCx2dCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IodXQpfSxzZXRJbnB1dDpmdW5jdGlvbihmdCx1dCl7cmV0dXJuIHRoaXMueXk9dXR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWZ0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBmdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9ZnQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWZ0LHRoaXMubWF0Y2hlZCs9ZnQ7dmFyIHV0PWZ0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gdXQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGZ0fSx1bnB1dDpmdW5jdGlvbihmdCl7dmFyIHV0PWZ0Lmxlbmd0aCx2dD1mdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWZ0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC11dCksdGhpcy5vZmZzZXQtPXV0O3ZhciBYPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLHZ0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09dnQubGVuZ3RoLTEpO3ZhciBwdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dnQ/KHZ0Lmxlbmd0aD09PVgubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStYW1gubGVuZ3RoLXZ0Lmxlbmd0aF0ubGVuZ3RoLXZ0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tdXR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcHRbMF0scHRbMF0rdGhpcy55eWxlbmctdXRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihmdCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGZ0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBmdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGZ0Lmxlbmd0aD4yMD8iLi4uIjoiIikrZnQuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgZnQ9dGhpcy5tYXRjaDtyZXR1cm4gZnQubGVuZ3RoPDIwJiYoZnQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWZ0Lmxlbmd0aCkpLChmdC5zdWJzdHIoMCwyMCkrKGZ0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgZnQ9dGhpcy5wYXN0SW5wdXQoKSx1dD1uZXcgQXJyYXkoZnQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gZnQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK3V0KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihmdCx1dCl7dmFyIHZ0LFgscHQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHB0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHB0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFg9ZnRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFgmJih0aGlzLnl5bGluZW5vKz1YLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlg/WFtYLmxlbmd0aC0xXS5sZW5ndGgtWFtYLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2Z0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWZ0WzBdLHRoaXMubWF0Y2grPWZ0WzBdLHRoaXMubWF0Y2hlcz1mdCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShmdFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9ZnRbMF0sdnQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsdXQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksdnQpcmV0dXJuIHZ0O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBVIGluIHB0KXRoaXNbVV09cHRbVV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgZnQsdXQsdnQsWDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBwdD10aGlzLl9jdXJyZW50UnVsZXMoKSxVPTA7VTxwdC5sZW5ndGg7VSsrKWlmKHZ0PXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcHRbVV1dKSx2dCYmKCF1dHx8dnRbMF0ubGVuZ3RoPnV0WzBdLmxlbmd0aCkpe2lmKHV0PXZ0LFg9VSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihmdD10aGlzLnRlc3RfbWF0Y2godnQscHRbVV0pLGZ0IT09ITEpcmV0dXJuIGZ0O2lmKHRoaXMuX2JhY2t0cmFjayl7dXQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gdXQ/KGZ0PXRoaXMudGVzdF9tYXRjaCh1dCxwdFtYXSksZnQhPT0hMT9mdDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHV0PXRoaXMubmV4dCgpO3JldHVybiB1dHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odXQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh1dCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIHV0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHV0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odXQpe3JldHVybiB1dD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHV0fHwwKSx1dD49MD90aGlzLmNvbmRpdGlvblN0YWNrW3V0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih1dCl7dGhpcy5iZWdpbih1dCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odXQsdnQsWCxwdCl7c3dpdGNoKFgpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTk7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyMTtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIDEzO2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpyZXR1cm4gNTtjYXNlIDExOnJldHVybiAzOTtjYXNlIDEyOnJldHVybiAzMjtjYXNlIDEzOnJldHVybiAzNztjYXNlIDE0OnJldHVybiA0MTtjYXNlIDE1OnJldHVybiA0MjtjYXNlIDE2OnJldHVybiA0MztjYXNlIDE3OnJldHVybiA0NDtjYXNlIDE4OnJldHVybiAzNDtjYXNlIDE5OnJldHVybiAyODtjYXNlIDIwOnJldHVybiAyOTtjYXNlIDIxOnJldHVybiAzNjtjYXNlIDIyOnJldHVybiAzMTtjYXNlIDIzOnJldHVybiAyNjtjYXNlIDI0OnJldHVybiA5O2Nhc2UgMjU6cmV0dXJuIDk7Y2FzZSAyNjpyZXR1cm4gODtjYXNlIDI3OnJldHVybiJDQVJFVCI7Y2FzZSAyODp0aGlzLmJlZ2luKCJvcHRpb25zIik7YnJlYWs7Y2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gMTI7Y2FzZSAzMTpyZXR1cm4gMzU7Y2FzZSAzMjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDMzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM0OnJldHVybiAzMztjYXNlIDM1OnJldHVybiAzMDtjYXNlIDM2OnJldHVybiA0NTtjYXNlIDM3OnJldHVybiA3fX0scnVsZXM6Wy9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzooXHI/XG4pKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86Z2l0R3JhcGhcYikvaSwvXig/OmNvbW1pdCg/PVxzfCQpKS9pLC9eKD86aWQ6KS9pLC9eKD86dHlwZTopL2ksL14oPzptc2c6KS9pLC9eKD86Tk9STUFMXGIpL2ksL14oPzpSRVZFUlNFXGIpL2ksL14oPzpISUdITElHSFRcYikvaSwvXig/OnRhZzopL2ksL14oPzpicmFuY2goPz1cc3wkKSkvaSwvXig/Om9yZGVyOikvaSwvXig/Om1lcmdlKD89XHN8JCkpL2ksL14oPzpjaGVycnktcGljayg/PVxzfCQpKS9pLC9eKD86Y2hlY2tvdXQoPz1cc3wkKSkvaSwvXig/OkxSXGIpL2ksL14oPzpUQlxiKS9pLC9eKD86OikvaSwvXig/OlxeKS9pLC9eKD86b3B0aW9uc1xyP1xuKS9pLC9eKD86WyBcclxuXHRdK2VuZFxiKS9pLC9eKD86W1xzXFNdKyg/PVsgXHJcblx0XStlbmQpKS9pLC9eKD86WyJdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbMC05XSsoPz1cc3wkKSkvaSwvXig/Olx3KFstXC4vXHddKlstXHddKT8pL2ksL14oPzokKS9pLC9eKD86XHMrKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNSw2XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxvcHRpb25zOntydWxlczpbMjksMzBdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMzMsMzRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMxLDMyLDM1LDM2LDM3LDM4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHl0fSgpO2F0LmxleGVyPWJ0O2Z1bmN0aW9uIG10KCl7dGhpcy55eT17fX1yZXR1cm4gbXQucHJvdG90eXBlPWF0LGF0LlBhcnNlcj1tdCxuZXcgbXR9KCk7ejB0LnBhcnNlcj16MHQ7Y29uc3QgTnplPXowdDtsZXQgTVk9T2UoKS5naXRHcmFwaC5tYWluQnJhbmNoTmFtZSxCemU9T2UoKS5naXRHcmFwaC5tYWluQnJhbmNoT3JkZXIsbDE9e30sdmc9bnVsbCxBRj17fTtBRltNWV09e25hbWU6TVksb3JkZXI6QnplfTtsZXQgTmY9e307TmZbTVldPXZnO2xldCBKMT1NWSxCQnQ9IkxSIixFVD0wO2Z1bmN0aW9uIHEwdCgpe3JldHVybiBHSXQoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gUnplKGksYSl7Y29uc3QgZj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpLnJlZHVjZSgocCx3KT0+e2NvbnN0IG09YSh3KTtyZXR1cm4gZlttXXx8KGZbbV09ITAscC5wdXNoKHcpKSxwfSxbXSl9Y29uc3QganplPWZ1bmN0aW9uKGkpe0JCdD1pfTtsZXQgUkJ0PXt9O2NvbnN0ICR6ZT1mdW5jdGlvbihpKXtVdC5kZWJ1Zygib3B0aW9ucyBzdHIiLGkpLGk9aSYmaS50cmltKCksaT1pfHwie30iO3RyeXtSQnQ9SlNPTi5wYXJzZShpKX1jYXRjaChhKXtVdC5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zIixhLm1lc3NhZ2UpfX0senplPWZ1bmN0aW9uKCl7cmV0dXJuIFJCdH0scXplPWZ1bmN0aW9uKGksYSxmLHApe1V0LmRlYnVnKCJFbnRlcmluZyBjb21taXQ6IixpLGEsZixwKSxhPUtyLnNhbml0aXplVGV4dChhLE9lKCkpLGk9S3Iuc2FuaXRpemVUZXh0KGksT2UoKSkscD1Lci5zYW5pdGl6ZVRleHQocCxPZSgpKTtjb25zdCB3PXtpZDphfHxFVCsiLSIrcTB0KCksbWVzc2FnZTppLHNlcTpFVCsrLHR5cGU6Znx8TEYuTk9STUFMLHRhZzpwfHwiIixwYXJlbnRzOnZnPT1udWxsP1tdOlt2Zy5pZF0sYnJhbmNoOkoxfTt2Zz13LGwxW3cuaWRdPXcsTmZbSjFdPXcuaWQsVXQuZGVidWcoImluIHB1c2hDb21taXQgIit3LmlkKX0sSHplPWZ1bmN0aW9uKGksYSl7aWYoaT1Lci5zYW5pdGl6ZVRleHQoaSxPZSgpKSxOZltpXT09PXZvaWQgMClOZltpXT12ZyE9bnVsbD92Zy5pZDpudWxsLEFGW2ldPXtuYW1lOmksb3JkZXI6YT9wYXJzZUludChhLDEwKTpudWxsfSxqQnQoaSksVXQuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpO2Vsc2V7bGV0IGY9bmV3IEVycm9yKCdUcnlpbmcgdG8gY3JlYXRlIGFuIGV4aXN0aW5nIGJyYW5jaC4gKEhlbHA6IEVpdGhlciB1c2UgYSBuZXcgbmFtZSBpZiB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgYnJhbmNoIG9yIHRyeSB1c2luZyAiY2hlY2tvdXQgJytpKyciKScpO3Rocm93IGYuaGFzaD17dGV4dDoiYnJhbmNoICIraSx0b2tlbjoiYnJhbmNoICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjaGVja291dCAnK2krJyInXX0sZn19LFZ6ZT1mdW5jdGlvbihpLGEsZixwKXtpPUtyLnNhbml0aXplVGV4dChpLE9lKCkpLGE9S3Iuc2FuaXRpemVUZXh0KGEsT2UoKSk7Y29uc3Qgdz1sMVtOZltKMV1dLG09bDFbTmZbaV1dO2lmKEoxPT09aSl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ2Fubm90IG1lcmdlIGEgYnJhbmNoIHRvIGl0c2VsZicpO3Rocm93IEUuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LEV9ZWxzZSBpZih3PT09dm9pZCAwfHwhdyl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ3VycmVudCBicmFuY2ggKCcrSjErIiloYXMgbm8gY29tbWl0cyIpO3Rocm93IEUuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjb21taXQiXX0sRX1lbHNlIGlmKE5mW2ldPT09dm9pZCAwKXtsZXQgRT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCcmFuY2ggdG8gYmUgbWVyZ2VkICgnK2krIikgZG9lcyBub3QgZXhpc3QiKTt0aHJvdyBFLmhhc2g9e3RleHQ6Im1lcmdlICIraSx0b2tlbjoibWVyZ2UgIitpLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiYnJhbmNoICIraV19LEV9ZWxzZSBpZihtPT09dm9pZCAwfHwhbSl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJytpKyIpIGhhcyBubyBjb21taXRzIik7dGhyb3cgRS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2ksdG9rZW46Im1lcmdlICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjb21taXQiJ119LEV9ZWxzZSBpZih3PT09bSl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQm90aCBicmFuY2hlcyBoYXZlIHNhbWUgaGVhZCcpO3Rocm93IEUuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LEV9ZWxzZSBpZihhJiZsMVthXSE9PXZvaWQgMCl7bGV0IEU9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ29tbWl0IHdpdGggaWQ6JythKyIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIElkIik7dGhyb3cgRS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2krYStmK3AsdG9rZW46Im1lcmdlICIraSthK2YrcCxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIm1lcmdlICIraSsiICIrYSsiX1VOSVFVRSAiK2YrIiAiK3BdfSxFfWNvbnN0IGI9e2lkOmF8fEVUKyItIitxMHQoKSxtZXNzYWdlOiJtZXJnZWQgYnJhbmNoICIraSsiIGludG8gIitKMSxzZXE6RVQrKyxwYXJlbnRzOlt2Zz09bnVsbD9udWxsOnZnLmlkLE5mW2ldXSxicmFuY2g6SjEsdHlwZTpMRi5NRVJHRSxjdXN0b21UeXBlOmYsY3VzdG9tSWQ6ISFhLHRhZzpwfHwiIn07dmc9YixsMVtiLmlkXT1iLE5mW0oxXT1iLmlkLFV0LmRlYnVnKE5mKSxVdC5kZWJ1ZygiaW4gbWVyZ2VCcmFuY2giKX0sR3plPWZ1bmN0aW9uKGksYSxmKXtpZihVdC5kZWJ1ZygiRW50ZXJpbmcgY2hlcnJ5UGljazoiLGksYSxmKSxpPUtyLnNhbml0aXplVGV4dChpLE9lKCkpLGE9S3Iuc2FuaXRpemVUZXh0KGEsT2UoKSksZj1Lci5zYW5pdGl6ZVRleHQoZixPZSgpKSwhaXx8bDFbaV09PT12b2lkIDApe2xldCBtPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBpZCBzaG91bGQgZXhpc3QgYW5kIHByb3ZpZGVkJyk7dGhyb3cgbS5oYXNoPXt0ZXh0OiJjaGVycnlQaWNrICIraSsiICIrYSx0b2tlbjoiY2hlcnJ5UGljayAiK2krIiAiK2EsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sbX1sZXQgcD1sMVtpXSx3PXAuYnJhbmNoO2lmKHAudHlwZT09PUxGLk1FUkdFKXtsZXQgbT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5UGljayIuIFNvdXJjZSBjb21taXQgc2hvdWxkIG5vdCBiZSBhIG1lcmdlIGNvbW1pdCcpO3Rocm93IG0uaGFzaD17dGV4dDoiY2hlcnJ5UGljayAiK2krIiAiK2EsdG9rZW46ImNoZXJyeVBpY2sgIitpKyIgIithLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LG19aWYoIWF8fGwxW2FdPT09dm9pZCAwKXtpZih3PT09SjEpe2xldCBFPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBpcyBhbHJlYWR5IG9uIGN1cnJlbnQgYnJhbmNoJyk7dGhyb3cgRS5oYXNoPXt0ZXh0OiJjaGVycnlQaWNrICIraSsiICIrYSx0b2tlbjoiY2hlcnJ5UGljayAiK2krIiAiK2EsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sRX1jb25zdCBtPWwxW05mW0oxXV07aWYobT09PXZvaWQgMHx8IW0pe2xldCBFPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnktcGljayIuIEN1cnJlbnQgYnJhbmNoICgnK0oxKyIpaGFzIG5vIGNvbW1pdHMiKTt0aHJvdyBFLmhhc2g9e3RleHQ6ImNoZXJyeVBpY2sgIitpKyIgIithLHRva2VuOiJjaGVycnlQaWNrICIraSsiICIrYSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxFfWNvbnN0IGI9e2lkOkVUKyItIitxMHQoKSxtZXNzYWdlOiJjaGVycnktcGlja2VkICIrcCsiIGludG8gIitKMSxzZXE6RVQrKyxwYXJlbnRzOlt2Zz09bnVsbD9udWxsOnZnLmlkLHAuaWRdLGJyYW5jaDpKMSx0eXBlOkxGLkNIRVJSWV9QSUNLLHRhZzpmPz8iY2hlcnJ5LXBpY2s6IitwLmlkfTt2Zz1iLGwxW2IuaWRdPWIsTmZbSjFdPWIuaWQsVXQuZGVidWcoTmYpLFV0LmRlYnVnKCJpbiBjaGVycnlQaWNrIil9fSxqQnQ9ZnVuY3Rpb24oaSl7aWYoaT1Lci5zYW5pdGl6ZVRleHQoaSxPZSgpKSxOZltpXT09PXZvaWQgMCl7bGV0IGE9bmV3IEVycm9yKCdUcnlpbmcgdG8gY2hlY2tvdXQgYnJhbmNoIHdoaWNoIGlzIG5vdCB5ZXQgY3JlYXRlZC4gKEhlbHAgdHJ5IHVzaW5nICJicmFuY2ggJytpKyciKScpO3Rocm93IGEuaGFzaD17dGV4dDoiY2hlY2tvdXQgIitpLHRva2VuOiJjaGVja291dCAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyciYnJhbmNoICcraSsnIiddfSxhfWVsc2V7SjE9aTtjb25zdCBhPU5mW0oxXTt2Zz1sMVthXX19O2Z1bmN0aW9uICRCdChpLGEsZil7Y29uc3QgcD1pLmluZGV4T2YoYSk7cD09PS0xP2kucHVzaChmKTppLnNwbGljZShwLDEsZil9ZnVuY3Rpb24gekJ0KGkpe2NvbnN0IGE9aS5yZWR1Y2UoKHcsbSk9Pncuc2VxPm0uc2VxP3c6bSxpWzBdKTtsZXQgZj0iIjtpLmZvckVhY2goZnVuY3Rpb24odyl7dz09PWE/Zis9IgkqIjpmKz0iCXwifSk7Y29uc3QgcD1bZixhLmlkLGEuc2VxXTtmb3IobGV0IHcgaW4gTmYpTmZbd109PT1hLmlkJiZwLnB1c2godyk7aWYoVXQuZGVidWcocC5qb2luKCIgIikpLGEucGFyZW50cyYmYS5wYXJlbnRzLmxlbmd0aD09Mil7Y29uc3Qgdz1sMVthLnBhcmVudHNbMF1dOyRCdChpLGEsdyksaS5wdXNoKGwxW2EucGFyZW50c1sxXV0pfWVsc2V7aWYoYS5wYXJlbnRzLmxlbmd0aD09MClyZXR1cm47e2NvbnN0IHc9bDFbYS5wYXJlbnRzXTskQnQoaSxhLHcpfX1pPVJ6ZShpLHc9PncuaWQpLHpCdChpKX1jb25zdCBVemU9ZnVuY3Rpb24oKXtVdC5kZWJ1ZyhsMSk7Y29uc3QgaT1xQnQoKVswXTt6QnQoW2ldKX0sV3plPWZ1bmN0aW9uKCl7bDE9e30sdmc9bnVsbDtsZXQgaT1PZSgpLmdpdEdyYXBoLm1haW5CcmFuY2hOYW1lLGE9T2UoKS5naXRHcmFwaC5tYWluQnJhbmNoT3JkZXI7TmY9e30sTmZbaV09bnVsbCxBRj17fSxBRltpXT17bmFtZTppLG9yZGVyOmF9LEoxPWksRVQ9MCxoZygpfSxZemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyhBRikubWFwKChhLGYpPT5hLm9yZGVyIT09bnVsbD9hOnsuLi5hLG9yZGVyOnBhcnNlRmxvYXQoYDAuJHtmfWAsMTApfSkuc29ydCgoYSxmKT0+YS5vcmRlci1mLm9yZGVyKS5tYXAoKHtuYW1lOmF9KT0+KHtuYW1lOmF9KSl9LEt6ZT1mdW5jdGlvbigpe3JldHVybiBOZn0sWHplPWZ1bmN0aW9uKCl7cmV0dXJuIGwxfSxxQnQ9ZnVuY3Rpb24oKXtjb25zdCBpPU9iamVjdC5rZXlzKGwxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGwxW2FdfSk7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihhKXtVdC5kZWJ1ZyhhLmlkKX0pLGkuc29ydCgoYSxmKT0+YS5zZXEtZi5zZXEpLGl9LFF6ZT1mdW5jdGlvbigpe3JldHVybiBKMX0sWnplPWZ1bmN0aW9uKCl7cmV0dXJuIEJCdH0sSnplPWZ1bmN0aW9uKCl7cmV0dXJuIHZnfSxMRj17Tk9STUFMOjAsUkVWRVJTRToxLEhJR0hMSUdIVDoyLE1FUkdFOjMsQ0hFUlJZX1BJQ0s6NH0sdHFlPXtnZXRDb25maWc6KCk9Pk9lKCkuZ2l0R3JhcGgsc2V0RGlyZWN0aW9uOmp6ZSxzZXRPcHRpb25zOiR6ZSxnZXRPcHRpb25zOnp6ZSxjb21taXQ6cXplLGJyYW5jaDpIemUsbWVyZ2U6VnplLGNoZXJyeVBpY2s6R3plLGNoZWNrb3V0OmpCdCxwcmV0dHlQcmludDpVemUsY2xlYXI6V3plLGdldEJyYW5jaGVzQXNPYmpBcnJheTpZemUsZ2V0QnJhbmNoZXM6S3plLGdldENvbW1pdHM6WHplLGdldENvbW1pdHNBcnJheTpxQnQsZ2V0Q3VycmVudEJyYW5jaDpRemUsZ2V0RGlyZWN0aW9uOlp6ZSxnZXRIZWFkOkp6ZSxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxzZXREaWFncmFtVGl0bGU6TmIsZ2V0RGlhZ3JhbVRpdGxlOnBnLGNvbW1pdFR5cGU6TEZ9O2xldCBNRj17fTtjb25zdCAkYj17Tk9STUFMOjAsUkVWRVJTRToxLEhJR0hMSUdIVDoyLE1FUkdFOjMsQ0hFUlJZX1BJQ0s6NH0sVFQ9ODtsZXQgdGQ9e30sREY9e30sRFk9W10sSUY9MCxDMD0iTFIiO2NvbnN0IGVxZT0oKT0+e3RkPXt9LERGPXt9LE1GPXt9LElGPTAsRFk9W10sQzA9IkxSIn0sSEJ0PWk9Pntjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7bGV0IGY9W107dHlwZW9mIGk9PSJzdHJpbmciP2Y9aS5zcGxpdCgvXFxufFxufDxiclxzKlwvPz4vZ2kpOkFycmF5LmlzQXJyYXkoaSk/Zj1pOmY9W107Zm9yKGNvbnN0IHAgb2YgZil7Y29uc3Qgdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTt3LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHcuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHcuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHcuc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLHcudGV4dENvbnRlbnQ9cC50cmltKCksYS5hcHBlbmRDaGlsZCh3KX1yZXR1cm4gYX0sVkJ0PShpLGEsZik9Pntjb25zdCBwPU9lKCkuZ2l0R3JhcGgsdz1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWJ1bGxldHMiKSxtPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWxzIik7bGV0IGI9MDtDMD09PSJUQiImJihiPTMwKSxPYmplY3Qua2V5cyhhKS5zb3J0KChBLEkpPT5hW0FdLnNlcS1hW0ldLnNlcSkuZm9yRWFjaChBPT57Y29uc3QgST1hW0FdLEI9QzA9PT0iVEIiP2IrMTA6dGRbSS5icmFuY2hdLnBvcyxOPUMwPT09IlRCIj90ZFtJLmJyYW5jaF0ucG9zOmIrMTA7aWYoZil7bGV0IFIsej1JLmN1c3RvbVR5cGUhPT12b2lkIDAmJkkuY3VzdG9tVHlwZSE9PSIiP0kuY3VzdG9tVHlwZTpJLnR5cGU7c3dpdGNoKHope2Nhc2UgJGIuTk9STUFMOlI9ImNvbW1pdC1ub3JtYWwiO2JyZWFrO2Nhc2UgJGIuUkVWRVJTRTpSPSJjb21taXQtcmV2ZXJzZSI7YnJlYWs7Y2FzZSAkYi5ISUdITElHSFQ6Uj0iY29tbWl0LWhpZ2hsaWdodCI7YnJlYWs7Y2FzZSAkYi5NRVJHRTpSPSJjb21taXQtbWVyZ2UiO2JyZWFrO2Nhc2UgJGIuQ0hFUlJZX1BJQ0s6Uj0iY29tbWl0LWNoZXJyeS1waWNrIjticmVhaztkZWZhdWx0OlI9ImNvbW1pdC1ub3JtYWwifWlmKHo9PT0kYi5ISUdITElHSFQpe2NvbnN0IFc9dy5hcHBlbmQoInJlY3QiKTtXLmF0dHIoIngiLE4tMTApLFcuYXR0cigieSIsQi0xMCksVy5hdHRyKCJoZWlnaHQiLDIwKSxXLmF0dHIoIndpZHRoIiwyMCksVy5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0kuaWR9IGNvbW1pdC1oaWdobGlnaHQke3RkW0kuYnJhbmNoXS5pbmRleCVUVH0gJHtSfS1vdXRlcmApLHcuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsTi02KS5hdHRyKCJ5IixCLTYpLmF0dHIoImhlaWdodCIsMTIpLmF0dHIoIndpZHRoIiwxMikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtJLmlkfSBjb21taXQke3RkW0kuYnJhbmNoXS5pbmRleCVUVH0gJHtSfS1pbm5lcmApfWVsc2UgaWYoej09PSRiLkNIRVJSWV9QSUNLKXcuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsTikuYXR0cigiY3kiLEIpLmF0dHIoInIiLDEwKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0kuaWR9ICR7Un1gKSx3LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLE4tMykuYXR0cigiY3kiLEIrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0kuaWR9ICR7Un1gKSx3LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLE4rMykuYXR0cigiY3kiLEIrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0kuaWR9ICR7Un1gKSx3LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixOKzMpLmF0dHIoInkxIixCKzEpLmF0dHIoIngyIixOKS5hdHRyKCJ5MiIsQi01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtJLmlkfSAke1J9YCksdy5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsTi0zKS5hdHRyKCJ5MSIsQisxKS5hdHRyKCJ4MiIsTikuYXR0cigieTIiLEItNSkuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoImNsYXNzIixgY29tbWl0ICR7SS5pZH0gJHtSfWApO2Vsc2V7Y29uc3QgVz13LmFwcGVuZCgiY2lyY2xlIik7aWYoVy5hdHRyKCJjeCIsTiksVy5hdHRyKCJjeSIsQiksVy5hdHRyKCJyIixJLnR5cGU9PT0kYi5NRVJHRT85OjEwKSxXLmF0dHIoImNsYXNzIixgY29tbWl0ICR7SS5pZH0gY29tbWl0JHt0ZFtJLmJyYW5jaF0uaW5kZXglVFR9YCksej09PSRiLk1FUkdFKXtjb25zdCBldD13LmFwcGVuZCgiY2lyY2xlIik7ZXQuYXR0cigiY3giLE4pLGV0LmF0dHIoImN5IixCKSxldC5hdHRyKCJyIiw2KSxldC5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke1J9ICR7SS5pZH0gY29tbWl0JHt0ZFtJLmJyYW5jaF0uaW5kZXglVFR9YCl9ej09PSRiLlJFVkVSU0UmJncuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gJHtOLTV9LCR7Qi01fUwke04rNX0sJHtCKzV9TSR7Ti01fSwke0IrNX1MJHtOKzV9LCR7Qi01fWApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Un0gJHtJLmlkfSBjb21taXQke3RkW0kuYnJhbmNoXS5pbmRleCVUVH1gKX19aWYoQzA9PT0iVEIiP0RGW0kuaWRdPXt4Ok4seTpiKzEwfTpERltJLmlkXT17eDpiKzEwLHk6Qn0sZil7aWYoSS50eXBlIT09JGIuQ0hFUlJZX1BJQ0smJihJLmN1c3RvbUlkJiZJLnR5cGU9PT0kYi5NRVJHRXx8SS50eXBlIT09JGIuTUVSR0UpJiZwLnNob3dDb21taXRMYWJlbCl7Y29uc3QgVz1tLmFwcGVuZCgiZyIpLGV0PVcuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWwtYmtnIiksc3Q9Vy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixCKzI1KS5hdHRyKCJjbGFzcyIsImNvbW1pdC1sYWJlbCIpLnRleHQoSS5pZCk7bGV0IGF0PXN0Lm5vZGUoKS5nZXRCQm94KCk7aWYoZXQuYXR0cigieCIsYisxMC1hdC53aWR0aC8yLTIpLmF0dHIoInkiLEIrMTMuNSkuYXR0cigid2lkdGgiLGF0LndpZHRoKzIqMikuYXR0cigiaGVpZ2h0IixhdC5oZWlnaHQrMioyKSxDMD09PSJUQiImJihldC5hdHRyKCJ4IixOLShhdC53aWR0aCs0KjQrNSkpLmF0dHIoInkiLEItMTIpLHN0LmF0dHIoIngiLE4tKGF0LndpZHRoKzQqNCkpLmF0dHIoInkiLEIrYXQuaGVpZ2h0LTEyKSksQzAhPT0iVEIiJiZzdC5hdHRyKCJ4IixiKzEwLWF0LndpZHRoLzIpLHAucm90YXRlQ29tbWl0TGFiZWwpaWYoQzA9PT0iVEIiKXN0LmF0dHIoInRyYW5zZm9ybSIsInJvdGF0ZSgtNDUsICIrTisiLCAiK0IrIikiKSxldC5hdHRyKCJ0cmFuc2Zvcm0iLCJyb3RhdGUoLTQ1LCAiK04rIiwgIitCKyIpIik7ZWxzZXtsZXQgYnQ9LTcuNS0oYXQud2lkdGgrMTApLzI1KjkuNSxtdD0xMCthdC53aWR0aC8yNSo4LjU7Vy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitidCsiLCAiK210KyIpIHJvdGF0ZSgtNDUsICIrYisiLCAiK0IrIikiKX19aWYoSS50YWcpe2NvbnN0IFc9bS5pbnNlcnQoInBvbHlnb24iKSxldD1tLmFwcGVuZCgiY2lyY2xlIiksc3Q9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixCLTE2KS5hdHRyKCJjbGFzcyIsInRhZy1sYWJlbCIpLnRleHQoSS50YWcpO2xldCBhdD1zdC5ub2RlKCkuZ2V0QkJveCgpO3N0LmF0dHIoIngiLGIrMTAtYXQud2lkdGgvMik7Y29uc3QgYnQ9YXQuaGVpZ2h0LzIsbXQ9Qi0xOS4yO1cuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwtYmtnIikuYXR0cigicG9pbnRzIixgCiAgICAgICAgICAke2ItYXQud2lkdGgvMi00LzJ9LCR7bXQrMn0KICAgICAgICAgICR7Yi1hdC53aWR0aC8yLTQvMn0sJHttdC0yfQogICAgICAgICAgJHtiKzEwLWF0LndpZHRoLzItNH0sJHttdC1idC0yfQogICAgICAgICAgJHtiKzEwK2F0LndpZHRoLzIrNH0sJHttdC1idC0yfQogICAgICAgICAgJHtiKzEwK2F0LndpZHRoLzIrNH0sJHttdCtidCsyfQogICAgICAgICAgJHtiKzEwLWF0LndpZHRoLzItNH0sJHttdCtidCsyfWApLGV0LmF0dHIoImN4IixiLWF0LndpZHRoLzIrNC8yKS5hdHRyKCJjeSIsbXQpLmF0dHIoInIiLDEuNSkuYXR0cigiY2xhc3MiLCJ0YWctaG9sZSIpLEMwPT09IlRCIiYmKFcuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwtYmtnIikuYXR0cigicG9pbnRzIixgCiAgICAgICAgICAgICR7Tn0sJHtiKzJ9CiAgICAgICAgICAgICR7Tn0sJHtiLTJ9CiAgICAgICAgICAgICR7TisxMH0sJHtiLWJ0LTJ9CiAgICAgICAgICAgICR7TisxMCthdC53aWR0aCs0fSwke2ItYnQtMn0KICAgICAgICAgICAgJHtOKzEwK2F0LndpZHRoKzR9LCR7YitidCsyfQogICAgICAgICAgICAke04rMTB9LCR7YitidCsyfWApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK04rIiwiK2IrIikiKSxldC5hdHRyKCJjeCIsTis0LzIpLmF0dHIoImN5IixiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTIsMTIpIHJvdGF0ZSg0NSwgIitOKyIsIitiKyIpIiksc3QuYXR0cigieCIsTis1KS5hdHRyKCJ5IixiKzMpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxNCwxNCkgcm90YXRlKDQ1LCAiK04rIiwiK2IrIikiKSl9fWIrPTUwLGI+SUYmJihJRj1iKX0pfSxucWU9KGksYSxmKT0+T2JqZWN0LmtleXMoZikuZmlsdGVyKG09PmZbbV0uYnJhbmNoPT09YS5icmFuY2gmJmZbbV0uc2VxPmkuc2VxJiZmW21dLnNlcTxhLnNlcSkubGVuZ3RoPjAsT0Y9KGksYSxmPTApPT57Y29uc3QgcD1pK01hdGguYWJzKGktYSkvMjtpZihmPjUpcmV0dXJuIHA7aWYoRFkuZXZlcnkoYj0+TWF0aC5hYnMoYi1wKT49MTApKXJldHVybiBEWS5wdXNoKHApLHA7Y29uc3QgbT1NYXRoLmFicyhpLWEpO3JldHVybiBPRihpLGEtbS81LGYrMSl9LHJxZT0oaSxhLGYscCk9Pntjb25zdCB3PURGW2EuaWRdLG09REZbZi5pZF0sYj1ucWUoYSxmLHApO2xldCBFPSIiLF89IiIsQT0wLEk9MCxCPXRkW2YuYnJhbmNoXS5pbmRleCxOO2lmKGIpe0U9IkEgMTAgMTAsIDAsIDAsIDAsIixfPSJBIDEwIDEwLCAwLCAwLCAxLCIsQT0xMCxJPTEwLEI9dGRbZi5icmFuY2hdLmluZGV4O2NvbnN0IFI9dy55PG0ueT9PRih3LnksbS55KTpPRihtLnksdy55KSx6PXcueDxtLng/T0Yody54LG0ueCk6T0YobS54LHcueCk7QzA9PT0iVEIiP3cueDxtLng/Tj1gTSAke3cueH0gJHt3Lnl9IEwgJHt6LUF9ICR7dy55fSAke199ICR7en0gJHt3LnkrSX0gTCAke3p9ICR7bS55LUF9ICR7RX0gJHt6K0l9ICR7bS55fSBMICR7bS54fSAke20ueX1gOk49YE0gJHt3Lnh9ICR7dy55fSBMICR7eitBfSAke3cueX0gJHtFfSAke3p9ICR7dy55K0l9IEwgJHt6fSAke20ueS1BfSAke199ICR7ei1JfSAke20ueX0gTCAke20ueH0gJHttLnl9YDp3Lnk8bS55P049YE0gJHt3Lnh9ICR7dy55fSBMICR7dy54fSAke1ItQX0gJHtFfSAke3cueCtJfSAke1J9IEwgJHttLngtQX0gJHtSfSAke199ICR7bS54fSAke1IrSX0gTCAke20ueH0gJHttLnl9YDpOPWBNICR7dy54fSAke3cueX0gTCAke3cueH0gJHtSK0F9ICR7X30gJHt3LngrSX0gJHtSfSBMICR7bS54LUF9ICR7Un0gJHtFfSAke20ueH0gJHtSLUl9IEwgJHttLnh9ICR7bS55fWB9ZWxzZSBDMD09PSJUQiI/KHcueDxtLngmJihFPSJBIDIwIDIwLCAwLCAwLCAwLCIsXz0iQSAyMCAyMCwgMCwgMCwgMSwiLEE9MjAsST0yMCxCPXRkW2YuYnJhbmNoXS5pbmRleCxOPWBNICR7dy54fSAke3cueX0gTCAke20ueC1BfSAke3cueX0gJHtffSAke20ueH0gJHt3LnkrSX0gTCAke20ueH0gJHttLnl9YCksdy54Pm0ueCYmKEU9IkEgMjAgMjAsIDAsIDAsIDAsIixfPSJBIDIwIDIwLCAwLCAwLCAxLCIsQT0yMCxJPTIwLEI9dGRbYS5icmFuY2hdLmluZGV4LE49YE0gJHt3Lnh9ICR7dy55fSBMICR7dy54fSAke20ueS1BfSAke199ICR7dy54LUl9ICR7bS55fSBMICR7bS54fSAke20ueX1gKSx3Lng9PT1tLngmJihCPXRkW2EuYnJhbmNoXS5pbmRleCxOPWBNICR7dy54fSAke3cueX0gTCAke3cueCtBfSAke3cueX0gJHtFfSAke3cueCtJfSAke20ueStBfSBMICR7bS54fSAke20ueX1gKSk6KHcueTxtLnkmJihFPSJBIDIwIDIwLCAwLCAwLCAwLCIsQT0yMCxJPTIwLEI9dGRbZi5icmFuY2hdLmluZGV4LE49YE0gJHt3Lnh9ICR7dy55fSBMICR7dy54fSAke20ueS1BfSAke0V9ICR7dy54K0l9ICR7bS55fSBMICR7bS54fSAke20ueX1gKSx3Lnk+bS55JiYoRT0iQSAyMCAyMCwgMCwgMCwgMCwiLEE9MjAsST0yMCxCPXRkW2EuYnJhbmNoXS5pbmRleCxOPWBNICR7dy54fSAke3cueX0gTCAke20ueC1BfSAke3cueX0gJHtFfSAke20ueH0gJHt3LnktSX0gTCAke20ueH0gJHttLnl9YCksdy55PT09bS55JiYoQj10ZFthLmJyYW5jaF0uaW5kZXgsTj1gTSAke3cueH0gJHt3Lnl9IEwgJHt3Lnh9ICR7bS55LUF9ICR7RX0gJHt3LngrSX0gJHttLnl9IEwgJHttLnh9ICR7bS55fWApKTtpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLE4pLmF0dHIoImNsYXNzIiwiYXJyb3cgYXJyb3ciK0IlVFQpfSxpcWU9KGksYSk9Pntjb25zdCBmPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtYXJyb3dzIik7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChwPT57Y29uc3Qgdz1hW3BdO3cucGFyZW50cyYmdy5wYXJlbnRzLmxlbmd0aD4wJiZ3LnBhcmVudHMuZm9yRWFjaChtPT57cnFlKGYsYVttXSx3LGEpfSl9KX0sc3FlPShpLGEpPT57Y29uc3QgZj1PZSgpLmdpdEdyYXBoLHA9aS5hcHBlbmQoImciKTthLmZvckVhY2goKHcsbSk9Pntjb25zdCBiPW0lVFQsRT10ZFt3Lm5hbWVdLnBvcyxfPXAuYXBwZW5kKCJsaW5lIik7Xy5hdHRyKCJ4MSIsMCksXy5hdHRyKCJ5MSIsRSksXy5hdHRyKCJ4MiIsSUYpLF8uYXR0cigieTIiLEUpLF8uYXR0cigiY2xhc3MiLCJicmFuY2ggYnJhbmNoIitiKSxDMD09PSJUQiImJihfLmF0dHIoInkxIiwzMCksXy5hdHRyKCJ4MSIsRSksXy5hdHRyKCJ5MiIsSUYpLF8uYXR0cigieDIiLEUpKSxEWS5wdXNoKEUpO2xldCBBPXcubmFtZTtjb25zdCBJPUhCdChBKSxCPXAuaW5zZXJ0KCJyZWN0IiksUj1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWwiKS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIrYik7Ui5ub2RlKCkuYXBwZW5kQ2hpbGQoSSk7bGV0IHo9SS5nZXRCQm94KCk7Qi5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsQmtnIGxhYmVsIitiKS5hdHRyKCJyeCIsNCkuYXR0cigicnkiLDQpLmF0dHIoIngiLC16LndpZHRoLTQtKGYucm90YXRlQ29tbWl0TGFiZWw9PT0hMD8zMDowKSkuYXR0cigieSIsLXouaGVpZ2h0LzIrOCkuYXR0cigid2lkdGgiLHoud2lkdGgrMTgpLmF0dHIoImhlaWdodCIsei5oZWlnaHQrNCksUi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoLXoud2lkdGgtMTQtKGYucm90YXRlQ29tbWl0TGFiZWw9PT0hMD8zMDowKSkrIiwgIisoRS16LmhlaWdodC8yLTEpKyIpIiksQzA9PT0iVEIiJiYoQi5hdHRyKCJ4IixFLXoud2lkdGgvMi0xMCkuYXR0cigieSIsMCksUi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoRS16LndpZHRoLzItNSkrIiwgMCkiKSksQzAhPT0iVEIiJiZCLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtMTksICIrKEUtei5oZWlnaHQvMikrIikiKX0pfSxhcWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpOemUsZGI6dHFlLHJlbmRlcmVyOntkcmF3OmZ1bmN0aW9uKGksYSxmLHApe2VxZSgpO2NvbnN0IHc9T2UoKSxtPXcuZ2l0R3JhcGg7VXQuZGVidWcoImluIGdpdGdyYXBoIHJlbmRlcmVyIixpK2AKYCwiaWQ6IixhLGYpLE1GPXAuZGIuZ2V0Q29tbWl0cygpO2NvbnN0IGI9cC5kYi5nZXRCcmFuY2hlc0FzT2JqQXJyYXkoKTtDMD1wLmRiLmdldERpcmVjdGlvbigpO2NvbnN0IEU9eXIoYFtpZD0iJHthfSJdYCk7bGV0IF89MDtiLmZvckVhY2goKEEsSSk9Pntjb25zdCBCPUhCdChBLm5hbWUpLE49RS5hcHBlbmQoImciKSxSPU4uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJicmFuY2hMYWJlbCIpLHo9Ui5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIpO3oubm9kZSgpLmFwcGVuZENoaWxkKEIpO2xldCBXPUIuZ2V0QkJveCgpO3RkW0EubmFtZV09e3BvczpfLGluZGV4Okl9LF8rPTUwKyhtLnJvdGF0ZUNvbW1pdExhYmVsPzQwOjApKyhDMD09PSJUQiI/Vy53aWR0aC8yOjApLHoucmVtb3ZlKCksUi5yZW1vdmUoKSxOLnJlbW92ZSgpfSksVkJ0KEUsTUYsITEpLG0uc2hvd0JyYW5jaGVzJiZzcWUoRSxiKSxpcWUoRSxNRiksVkJ0KEUsTUYsITApLCRhLmluc2VydFRpdGxlKEUsImdpdFRpdGxlVGV4dCIsbS50aXRsZVRvcE1hcmdpbixwLmRiLmdldERpYWdyYW1UaXRsZSgpKSxBT3Qodm9pZCAwLEUsbS5kaWFncmFtUGFkZGluZyxtLnVzZU1heFdpZHRoPz93LnVzZU1heFdpZHRoKX19LHN0eWxlczppPT5gCiAgLmNvbW1pdC1pZCwKICAuY29tbWl0LW1zZywKICAuYnJhbmNoLWxhYmVsIHsKICAgIGZpbGw6IGxpZ2h0Z3JleTsKICAgIGNvbG9yOiBsaWdodGdyZXk7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KICAke1swLDEsMiwzLDQsNSw2LDddLm1hcChhPT5gCiAgICAgICAgLmJyYW5jaC1sYWJlbCR7YX0geyBmaWxsOiAke2lbImdpdEJyYW5jaExhYmVsIithXX07IH0KICAgICAgICAuY29tbWl0JHthfSB7IHN0cm9rZTogJHtpWyJnaXQiK2FdfTsgZmlsbDogJHtpWyJnaXQiK2FdfTsgfQogICAgICAgIC5jb21taXQtaGlnaGxpZ2h0JHthfSB7IHN0cm9rZTogJHtpWyJnaXRJbnYiK2FdfTsgZmlsbDogJHtpWyJnaXRJbnYiK2FdfTsgfQogICAgICAgIC5sYWJlbCR7YX0gIHsgZmlsbDogJHtpWyJnaXQiK2FdfTsgfQogICAgICAgIC5hcnJvdyR7YX0geyBzdHJva2U6ICR7aVsiZ2l0IithXX07IH0KICAgICAgICBgKS5qb2luKGAKYCl9CgogIC5icmFuY2ggewogICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQogIC5jb21taXQtbGFiZWwgeyBmb250LXNpemU6ICR7aS5jb21taXRMYWJlbEZvbnRTaXplfTsgZmlsbDogJHtpLmNvbW1pdExhYmVsQ29sb3J9O30KICAuY29tbWl0LWxhYmVsLWJrZyB7IGZvbnQtc2l6ZTogJHtpLmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke2kuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfTsgb3BhY2l0eTogMC41OyB9CiAgLnRhZy1sYWJlbCB7IGZvbnQtc2l6ZTogJHtpLnRhZ0xhYmVsRm9udFNpemV9OyBmaWxsOiAke2kudGFnTGFiZWxDb2xvcn07fQogIC50YWctbGFiZWwtYmtnIHsgZmlsbDogJHtpLnRhZ0xhYmVsQmFja2dyb3VuZH07IHN0cm9rZTogJHtpLnRhZ0xhYmVsQm9yZGVyfTsgfQogIC50YWctaG9sZSB7IGZpbGw6ICR7aS50ZXh0Q29sb3J9OyB9CgogIC5jb21taXQtbWVyZ2UgewogICAgc3Ryb2tlOiAke2kucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7aS5wcmltYXJ5Q29sb3J9OwogIH0KICAuY29tbWl0LXJldmVyc2UgewogICAgc3Ryb2tlOiAke2kucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7aS5wcmltYXJ5Q29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAuY29tbWl0LWhpZ2hsaWdodC1vdXRlciB7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LWlubmVyIHsKICAgIHN0cm9rZTogJHtpLnByaW1hcnlDb2xvcn07CiAgICBmaWxsOiAke2kucHJpbWFyeUNvbG9yfTsKICB9CgogIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfQogIC5naXRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYH19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIEgwdD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKFUsVHQsbnQsSXQpe2ZvcihudD1udHx8e30sSXQ9VS5sZW5ndGg7SXQtLTtudFtVW0l0XV09VHQpO3JldHVybiBudH0sYT1bNiw4LDEwLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMwLDMyLDMzLDM1LDM3XSxmPVsxLDI1XSxwPVsxLDI2XSx3PVsxLDI3XSxtPVsxLDI4XSxiPVsxLDI5XSxFPVsxLDMwXSxfPVsxLDMxXSxBPVsxLDldLEk9WzEsMTBdLEI9WzEsMTFdLE49WzEsMTJdLFI9WzEsMTNdLHo9WzEsMTRdLFc9WzEsMTVdLGV0PVsxLDE2XSxzdD1bMSwxOF0sYXQ9WzEsMTldLGJ0PVsxLDIwXSxtdD1bMSwyMV0seXQ9WzEsMjJdLGZ0PVsxLDI0XSx1dD1bMSwzMl0sdnQ9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGdhbnR0OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxOTDoxMCx3ZWVrZGF5OjExLHdlZWtkYXlfbW9uZGF5OjEyLHdlZWtkYXlfdHVlc2RheToxMyx3ZWVrZGF5X3dlZG5lc2RheToxNCx3ZWVrZGF5X3RodXJzZGF5OjE1LHdlZWtkYXlfZnJpZGF5OjE2LHdlZWtkYXlfc2F0dXJkYXk6MTcsd2Vla2RheV9zdW5kYXk6MTgsZGF0ZUZvcm1hdDoxOSxpbmNsdXNpdmVFbmREYXRlczoyMCx0b3BBeGlzOjIxLGF4aXNGb3JtYXQ6MjIsdGlja0ludGVydmFsOjIzLGV4Y2x1ZGVzOjI0LGluY2x1ZGVzOjI1LHRvZGF5TWFya2VyOjI2LHRpdGxlOjI3LGFjY190aXRsZToyOCxhY2NfdGl0bGVfdmFsdWU6MjksYWNjX2Rlc2NyOjMwLGFjY19kZXNjcl92YWx1ZTozMSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjMyLHNlY3Rpb246MzMsY2xpY2tTdGF0ZW1lbnQ6MzQsdGFza1R4dDozNSx0YXNrRGF0YTozNixjbGljazozNyxjYWxsYmFja25hbWU6MzgsY2FsbGJhY2thcmdzOjM5LGhyZWY6NDAsY2xpY2tTdGF0ZW1lbnREZWJ1Zzo0MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiZ2FudHQiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJOTCIsMTI6IndlZWtkYXlfbW9uZGF5IiwxMzoid2Vla2RheV90dWVzZGF5IiwxNDoid2Vla2RheV93ZWRuZXNkYXkiLDE1OiJ3ZWVrZGF5X3RodXJzZGF5IiwxNjoid2Vla2RheV9mcmlkYXkiLDE3OiJ3ZWVrZGF5X3NhdHVyZGF5IiwxODoid2Vla2RheV9zdW5kYXkiLDE5OiJkYXRlRm9ybWF0IiwyMDoiaW5jbHVzaXZlRW5kRGF0ZXMiLDIxOiJ0b3BBeGlzIiwyMjoiYXhpc0Zvcm1hdCIsMjM6InRpY2tJbnRlcnZhbCIsMjQ6ImV4Y2x1ZGVzIiwyNToiaW5jbHVkZXMiLDI2OiJ0b2RheU1hcmtlciIsMjc6InRpdGxlIiwyODoiYWNjX3RpdGxlIiwyOToiYWNjX3RpdGxlX3ZhbHVlIiwzMDoiYWNjX2Rlc2NyIiwzMToiYWNjX2Rlc2NyX3ZhbHVlIiwzMjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6InNlY3Rpb24iLDM1OiJ0YXNrVHh0IiwzNjoidGFza0RhdGEiLDM3OiJjbGljayIsMzg6ImNhbGxiYWNrbmFtZSIsMzk6ImNhbGxiYWNrYXJncyIsNDA6ImhyZWYifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFszNCwyXSxbMzQsM10sWzM0LDNdLFszNCw0XSxbMzQsM10sWzM0LDRdLFszNCwyXSxbNDEsMl0sWzQxLDNdLFs0MSwzXSxbNDEsNF0sWzQxLDNdLFs0MSw0XSxbNDEsMl1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVHQsbnQsSXQsT3QsQnQsRXQsWil7dmFyIEN0PUV0Lmxlbmd0aC0xO3N3aXRjaChCdCl7Y2FzZSAxOnJldHVybiBFdFtDdC0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzpFdFtDdC0xXS5wdXNoKEV0W0N0XSksdGhpcy4kPUV0W0N0LTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPUV0W0N0XTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6T3Quc2V0V2Vla2RheSgibW9uZGF5Iik7YnJlYWs7Y2FzZSA5Ok90LnNldFdlZWtkYXkoInR1ZXNkYXkiKTticmVhaztjYXNlIDEwOk90LnNldFdlZWtkYXkoIndlZG5lc2RheSIpO2JyZWFrO2Nhc2UgMTE6T3Quc2V0V2Vla2RheSgidGh1cnNkYXkiKTticmVhaztjYXNlIDEyOk90LnNldFdlZWtkYXkoImZyaWRheSIpO2JyZWFrO2Nhc2UgMTM6T3Quc2V0V2Vla2RheSgic2F0dXJkYXkiKTticmVhaztjYXNlIDE0Ok90LnNldFdlZWtkYXkoInN1bmRheSIpO2JyZWFrO2Nhc2UgMTU6T3Quc2V0RGF0ZUZvcm1hdChFdFtDdF0uc3Vic3RyKDExKSksdGhpcy4kPUV0W0N0XS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTY6T3QuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9RXRbQ3RdLnN1YnN0cigxOCk7YnJlYWs7Y2FzZSAxNzpPdC5Ub3BBeGlzKCksdGhpcy4kPUV0W0N0XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxODpPdC5zZXRBeGlzRm9ybWF0KEV0W0N0XS5zdWJzdHIoMTEpKSx0aGlzLiQ9RXRbQ3RdLnN1YnN0cigxMSk7YnJlYWs7Y2FzZSAxOTpPdC5zZXRUaWNrSW50ZXJ2YWwoRXRbQ3RdLnN1YnN0cigxMykpLHRoaXMuJD1FdFtDdF0uc3Vic3RyKDEzKTticmVhaztjYXNlIDIwOk90LnNldEV4Y2x1ZGVzKEV0W0N0XS5zdWJzdHIoOSkpLHRoaXMuJD1FdFtDdF0uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMjE6T3Quc2V0SW5jbHVkZXMoRXRbQ3RdLnN1YnN0cig5KSksdGhpcy4kPUV0W0N0XS5zdWJzdHIoOSk7YnJlYWs7Y2FzZSAyMjpPdC5zZXRUb2RheU1hcmtlcihFdFtDdF0uc3Vic3RyKDEyKSksdGhpcy4kPUV0W0N0XS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMjQ6T3Quc2V0RGlhZ3JhbVRpdGxlKEV0W0N0XS5zdWJzdHIoNikpLHRoaXMuJD1FdFtDdF0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPUV0W0N0XS50cmltKCksT3Quc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDI2OmNhc2UgMjc6dGhpcy4kPUV0W0N0XS50cmltKCksT3Quc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDI4Ok90LmFkZFNlY3Rpb24oRXRbQ3RdLnN1YnN0cig4KSksdGhpcy4kPUV0W0N0XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAzMDpPdC5hZGRUYXNrKEV0W0N0LTFdLEV0W0N0XSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDMxOnRoaXMuJD1FdFtDdC0xXSxPdC5zZXRDbGlja0V2ZW50KEV0W0N0LTFdLEV0W0N0XSxudWxsKTticmVhaztjYXNlIDMyOnRoaXMuJD1FdFtDdC0yXSxPdC5zZXRDbGlja0V2ZW50KEV0W0N0LTJdLEV0W0N0LTFdLEV0W0N0XSk7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9RXRbQ3QtMl0sT3Quc2V0Q2xpY2tFdmVudChFdFtDdC0yXSxFdFtDdC0xXSxudWxsKSxPdC5zZXRMaW5rKEV0W0N0LTJdLEV0W0N0XSk7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9RXRbQ3QtM10sT3Quc2V0Q2xpY2tFdmVudChFdFtDdC0zXSxFdFtDdC0yXSxFdFtDdC0xXSksT3Quc2V0TGluayhFdFtDdC0zXSxFdFtDdF0pO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPUV0W0N0LTJdLE90LnNldENsaWNrRXZlbnQoRXRbQ3QtMl0sRXRbQ3RdLG51bGwpLE90LnNldExpbmsoRXRbQ3QtMl0sRXRbQ3QtMV0pO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPUV0W0N0LTNdLE90LnNldENsaWNrRXZlbnQoRXRbQ3QtM10sRXRbQ3QtMV0sRXRbQ3RdKSxPdC5zZXRMaW5rKEV0W0N0LTNdLEV0W0N0LTJdKTticmVhaztjYXNlIDM3OnRoaXMuJD1FdFtDdC0xXSxPdC5zZXRMaW5rKEV0W0N0LTFdLEV0W0N0XSk7YnJlYWs7Y2FzZSAzODpjYXNlIDQ0OnRoaXMuJD1FdFtDdC0xXSsiICIrRXRbQ3RdO2JyZWFrO2Nhc2UgMzk6Y2FzZSA0MDpjYXNlIDQyOnRoaXMuJD1FdFtDdC0yXSsiICIrRXRbQ3QtMV0rIiAiK0V0W0N0XTticmVhaztjYXNlIDQxOmNhc2UgNDM6dGhpcy4kPUV0W0N0LTNdKyIgIitFdFtDdC0yXSsiICIrRXRbQ3QtMV0rIiAiK0V0W0N0XTticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6MTcsMTI6ZiwxMzpwLDE0OncsMTU6bSwxNjpiLDE3OkUsMTg6XywxOTpBLDIwOkksMjE6QiwyMjpOLDIzOlIsMjQ6eiwyNTpXLDI2OmV0LDI3OnN0LDI4OmF0LDMwOmJ0LDMyOm10LDMzOnl0LDM0OjIzLDM1OmZ0LDM3OnV0fSxpKGEsWzIsN10sezE6WzIsMV19KSxpKGEsWzIsM10pLHs5OjMzLDExOjE3LDEyOmYsMTM6cCwxNDp3LDE1Om0sMTY6YiwxNzpFLDE4Ol8sMTk6QSwyMDpJLDIxOkIsMjI6TiwyMzpSLDI0OnosMjU6VywyNjpldCwyNzpzdCwyODphdCwzMDpidCwzMjptdCwzMzp5dCwzNDoyMywzNTpmdCwzNzp1dH0saShhLFsyLDVdKSxpKGEsWzIsNl0pLGkoYSxbMiwxNV0pLGkoYSxbMiwxNl0pLGkoYSxbMiwxN10pLGkoYSxbMiwxOF0pLGkoYSxbMiwxOV0pLGkoYSxbMiwyMF0pLGkoYSxbMiwyMV0pLGkoYSxbMiwyMl0pLGkoYSxbMiwyM10pLGkoYSxbMiwyNF0pLHsyOTpbMSwzNF19LHszMTpbMSwzNV19LGkoYSxbMiwyN10pLGkoYSxbMiwyOF0pLGkoYSxbMiwyOV0pLHszNjpbMSwzNl19LGkoYSxbMiw4XSksaShhLFsyLDldKSxpKGEsWzIsMTBdKSxpKGEsWzIsMTFdKSxpKGEsWzIsMTJdKSxpKGEsWzIsMTNdKSxpKGEsWzIsMTRdKSx7Mzg6WzEsMzddLDQwOlsxLDM4XX0saShhLFsyLDRdKSxpKGEsWzIsMjVdKSxpKGEsWzIsMjZdKSxpKGEsWzIsMzBdKSxpKGEsWzIsMzFdLHszOTpbMSwzOV0sNDA6WzEsNDBdfSksaShhLFsyLDM3XSx7Mzg6WzEsNDFdfSksaShhLFsyLDMyXSx7NDA6WzEsNDJdfSksaShhLFsyLDMzXSksaShhLFsyLDM1XSx7Mzk6WzEsNDNdfSksaShhLFsyLDM0XSksaShhLFsyLDM2XSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oVHQsbnQpe2lmKG50LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoVHQpO2Vsc2V7dmFyIEl0PW5ldyBFcnJvcihUdCk7dGhyb3cgSXQuaGFzaD1udCxJdH19LHBhcnNlOmZ1bmN0aW9uKFR0KXt2YXIgbnQ9dGhpcyxJdD1bMF0sT3Q9W10sQnQ9W251bGxdLEV0PVtdLFo9dGhpcy50YWJsZSxDdD0iIix4dD0wLEh0PTAsTGU9MixGdD0xLGduPUV0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFNlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksbWU9e3l5Ont9fTtmb3IodmFyIFZlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksVmUpJiYobWUueXlbVmVdPXRoaXMueXlbVmVdKTtTZS5zZXRJbnB1dChUdCxtZS55eSksbWUueXkubGV4ZXI9U2UsbWUueXkucGFyc2VyPXRoaXMsdHlwZW9mIFNlLnl5bGxvYz4idSImJihTZS55eWxsb2M9e30pO3ZhciBZZT1TZS55eWxsb2M7RXQucHVzaChZZSk7dmFyIGNlPVNlLm9wdGlvbnMmJlNlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBtZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1tZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBrZSgpe3ZhciB3cztyZXR1cm4gd3M9T3QucG9wKCl8fFNlLmxleCgpfHxGdCx0eXBlb2Ygd3MhPSJudW1iZXIiJiYod3MgaW5zdGFuY2VvZiBBcnJheSYmKE90PXdzLHdzPU90LnBvcCgpKSx3cz1udC5zeW1ib2xzX1t3c118fHdzKSx3c31mb3IodmFyIHp0LHJlLHNlLFBlLHRlPXt9LE1lLGRlLG9uLG5pOzspe2lmKHJlPUl0W0l0Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3JlXT9zZT10aGlzLmRlZmF1bHRBY3Rpb25zW3JlXTooKHp0PT09bnVsbHx8dHlwZW9mIHp0PiJ1IikmJih6dD1rZSgpKSxzZT1aW3JlXSYmWltyZV1benRdKSx0eXBlb2Ygc2U+InUifHwhc2UubGVuZ3RofHwhc2VbMF0pe3ZhciBLcz0iIjtuaT1bXTtmb3IoTWUgaW4gWltyZV0pdGhpcy50ZXJtaW5hbHNfW01lXSYmTWU+TGUmJm5pLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tNZV0rIiciKTtTZS5zaG93UG9zaXRpb24/S3M9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoeHQrMSkrYDoKYCtTZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK25pLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19benRdfHx6dCkrIiciOktzPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHh0KzEpKyI6IFVuZXhwZWN0ZWQgIisoenQ9PUZ0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3p0XXx8enQpKyInIiksdGhpcy5wYXJzZUVycm9yKEtzLHt0ZXh0OlNlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t6dF18fHp0LGxpbmU6U2UueXlsaW5lbm8sbG9jOlllLGV4cGVjdGVkOm5pfSl9aWYoc2VbMF1pbnN0YW5jZW9mIEFycmF5JiZzZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3JlKyIsIHRva2VuOiAiK3p0KTtzd2l0Y2goc2VbMF0pe2Nhc2UgMTpJdC5wdXNoKHp0KSxCdC5wdXNoKFNlLnl5dGV4dCksRXQucHVzaChTZS55eWxsb2MpLEl0LnB1c2goc2VbMV0pLHp0PW51bGwsSHQ9U2UueXlsZW5nLEN0PVNlLnl5dGV4dCx4dD1TZS55eWxpbmVubyxZZT1TZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKGRlPXRoaXMucHJvZHVjdGlvbnNfW3NlWzFdXVsxXSx0ZS4kPUJ0W0J0Lmxlbmd0aC1kZV0sdGUuXyQ9e2ZpcnN0X2xpbmU6RXRbRXQubGVuZ3RoLShkZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkV0W0V0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkV0W0V0Lmxlbmd0aC0oZGV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46RXRbRXQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxjZSYmKHRlLl8kLnJhbmdlPVtFdFtFdC5sZW5ndGgtKGRlfHwxKV0ucmFuZ2VbMF0sRXRbRXQubGVuZ3RoLTFdLnJhbmdlWzFdXSksUGU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHRlLFtDdCxIdCx4dCxtZS55eSxzZVsxXSxCdCxFdF0uY29uY2F0KGduKSksdHlwZW9mIFBlPCJ1IilyZXR1cm4gUGU7ZGUmJihJdD1JdC5zbGljZSgwLC0xKmRlKjIpLEJ0PUJ0LnNsaWNlKDAsLTEqZGUpLEV0PUV0LnNsaWNlKDAsLTEqZGUpKSxJdC5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3NlWzFdXVswXSksQnQucHVzaCh0ZS4kKSxFdC5wdXNoKHRlLl8kKSxvbj1aW0l0W0l0Lmxlbmd0aC0yXV1bSXRbSXQubGVuZ3RoLTFdXSxJdC5wdXNoKG9uKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sWD1mdW5jdGlvbigpe3ZhciBVPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKG50LEl0KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKG50LEl0KTtlbHNlIHRocm93IG5ldyBFcnJvcihudCl9LHNldElucHV0OmZ1bmN0aW9uKFR0LG50KXtyZXR1cm4gdGhpcy55eT1udHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9VHQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIFR0PXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1UdCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9VHQsdGhpcy5tYXRjaGVkKz1UdDt2YXIgbnQ9VHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBudD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksVHR9LHVucHV0OmZ1bmN0aW9uKFR0KXt2YXIgbnQ9VHQubGVuZ3RoLEl0PVR0LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9VHQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLW50KSx0aGlzLm9mZnNldC09bnQ7dmFyIE90PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEl0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09SXQubGVuZ3RoLTEpO3ZhciBCdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46SXQ/KEl0Lmxlbmd0aD09PU90Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrT3RbT3QubGVuZ3RoLUl0Lmxlbmd0aF0ubGVuZ3RoLUl0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tbnR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bQnRbMF0sQnRbMF0rdGhpcy55eWxlbmctbnRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihUdCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFR0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBUdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFR0Lmxlbmd0aD4yMD8iLi4uIjoiIikrVHQuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgVHQ9dGhpcy5tYXRjaDtyZXR1cm4gVHQubGVuZ3RoPDIwJiYoVHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVR0Lmxlbmd0aCkpLChUdC5zdWJzdHIoMCwyMCkrKFR0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgVHQ9dGhpcy5wYXN0SW5wdXQoKSxudD1uZXcgQXJyYXkoVHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gVHQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK250KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihUdCxudCl7dmFyIEl0LE90LEJ0O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihCdD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihCdC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxPdD1UdFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksT3QmJih0aGlzLnl5bGluZW5vKz1PdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpPdD9PdFtPdC5sZW5ndGgtMV0ubGVuZ3RoLU90W090Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1R0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVR0WzBdLHRoaXMubWF0Y2grPVR0WzBdLHRoaXMubWF0Y2hlcz1UdCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShUdFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9VHRbMF0sSXQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsbnQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksSXQpcmV0dXJuIEl0O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBFdCBpbiBCdCl0aGlzW0V0XT1CdFtFdF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgVHQsbnQsSXQsT3Q7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgQnQ9dGhpcy5fY3VycmVudFJ1bGVzKCksRXQ9MDtFdDxCdC5sZW5ndGg7RXQrKylpZihJdD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0J0W0V0XV0pLEl0JiYoIW50fHxJdFswXS5sZW5ndGg+bnRbMF0ubGVuZ3RoKSl7aWYobnQ9SXQsT3Q9RXQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoVHQ9dGhpcy50ZXN0X21hdGNoKEl0LEJ0W0V0XSksVHQhPT0hMSlyZXR1cm4gVHQ7aWYodGhpcy5fYmFja3RyYWNrKXtudD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBudD8oVHQ9dGhpcy50ZXN0X21hdGNoKG50LEJ0W090XSksVHQhPT0hMT9UdDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIG50PXRoaXMubmV4dCgpO3JldHVybiBudHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24obnQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChudCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIG50PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIG50PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24obnQpe3JldHVybiBudD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKG50fHwwKSxudD49MD90aGlzLmNvbmRpdGlvblN0YWNrW250XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihudCl7dGhpcy5iZWdpbihudCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24obnQsSXQsT3QsQnQpe3N3aXRjaChPdCl7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLCJvcGVuX2RpcmVjdGl2ZSI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyODtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDM6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMwO2Nhc2UgNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgNTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOnJldHVybiAxMDtjYXNlIDEyOmJyZWFrO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpicmVhaztjYXNlIDE1OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDE2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE3OnJldHVybiA0MDtjYXNlIDE4OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMTk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIDM4O2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDM5O2Nhc2UgMjQ6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI2OnJldHVybiAzNztjYXNlIDI3OnJldHVybiA0O2Nhc2UgMjg6cmV0dXJuIDE5O2Nhc2UgMjk6cmV0dXJuIDIwO2Nhc2UgMzA6cmV0dXJuIDIxO2Nhc2UgMzE6cmV0dXJuIDIyO2Nhc2UgMzI6cmV0dXJuIDIzO2Nhc2UgMzM6cmV0dXJuIDI1O2Nhc2UgMzQ6cmV0dXJuIDI0O2Nhc2UgMzU6cmV0dXJuIDI2O2Nhc2UgMzY6cmV0dXJuIDEyO2Nhc2UgMzc6cmV0dXJuIDEzO2Nhc2UgMzg6cmV0dXJuIDE0O2Nhc2UgMzk6cmV0dXJuIDE1O2Nhc2UgNDA6cmV0dXJuIDE2O2Nhc2UgNDE6cmV0dXJuIDE3O2Nhc2UgNDI6cmV0dXJuIDE4O2Nhc2UgNDM6cmV0dXJuImRhdGUiO2Nhc2UgNDQ6cmV0dXJuIDI3O2Nhc2UgNDU6cmV0dXJuImFjY0Rlc2NyaXB0aW9uIjtjYXNlIDQ2OnJldHVybiAzMztjYXNlIDQ3OnJldHVybiAzNTtjYXNlIDQ4OnJldHVybiAzNjtjYXNlIDQ5OnJldHVybiI6IjtjYXNlIDUwOnJldHVybiA2O2Nhc2UgNTE6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86JSUoPyFceykqW15cbl0qKS9pLC9eKD86W15cfV0lJSpbXlxuXSopL2ksL14oPzolJSpbXlxuXSpbXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpocmVmW1xzXStbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OmNhbGxbXHNdKykvaSwvXig/OlwoW1xzXSpcKSkvaSwvXig/OlwoKS9pLC9eKD86W14oXSopL2ksL14oPzpcKSkvaSwvXig/OlteKV0qKS9pLC9eKD86Y2xpY2tbXHNdKykvaSwvXig/Oltcc1xuXSkvaSwvXig/OlteXHNcbl0qKS9pLC9eKD86Z2FudHRcYikvaSwvXig/OmRhdGVGb3JtYXRcc1teI1xuO10rKS9pLC9eKD86aW5jbHVzaXZlRW5kRGF0ZXNcYikvaSwvXig/OnRvcEF4aXNcYikvaSwvXig/OmF4aXNGb3JtYXRcc1teI1xuO10rKS9pLC9eKD86dGlja0ludGVydmFsXHNbXiNcbjtdKykvaSwvXig/OmluY2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OmV4Y2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OnRvZGF5TWFya2VyXHNbXlxuO10rKS9pLC9eKD86d2Vla2RheVxzK21vbmRheVxiKS9pLC9eKD86d2Vla2RheVxzK3R1ZXNkYXlcYikvaSwvXig/OndlZWtkYXlccyt3ZWRuZXNkYXlcYikvaSwvXig/OndlZWtkYXlccyt0aHVyc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK2ZyaWRheVxiKS9pLC9eKD86d2Vla2RheVxzK3NhdHVyZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrc3VuZGF5XGIpL2ksL14oPzpcZFxkXGRcZC1cZFxkLVxkXGRcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvaSwvXig/OnNlY3Rpb25cc1teIzpcbjtdKykvaSwvXig/OlteIzpcbjtdKykvaSwvXig/OjpbXiNcbjtdKykvaSwvXig/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzJdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2thcmdzOntydWxlczpbMjIsMjNdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbMTksMjAsMjFdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzE2LDE3XSxpbmNsdXNpdmU6ITF9LGNsaWNrOntydWxlczpbMjUsMjZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE4LDI0LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFV9KCk7dnQubGV4ZXI9WDtmdW5jdGlvbiBwdCgpe3RoaXMueXk9e319cmV0dXJuIHB0LnByb3RvdHlwZT12dCx2dC5QYXJzZXI9cHQsbmV3IHB0fSgpO0gwdC5wYXJzZXI9SDB0O2NvbnN0IG9xZT1IMHQ7dmFyIEdCdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGIwLGZ1bmN0aW9uKCl7dmFyIGY9ImRheSI7cmV0dXJuIGZ1bmN0aW9uKHAsdyxtKXt2YXIgYj1mdW5jdGlvbihBKXtyZXR1cm4gQS5hZGQoNC1BLmlzb1dlZWtkYXkoKSxmKX0sRT13LnByb3RvdHlwZTtFLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGIodGhpcykueWVhcigpfSxFLmlzb1dlZWs9ZnVuY3Rpb24oQSl7aWYoIXRoaXMuJHV0aWxzKCkudShBKSlyZXR1cm4gdGhpcy5hZGQoNyooQS10aGlzLmlzb1dlZWsoKSksZik7dmFyIEksQixOLFIsej1iKHRoaXMpLFc9KEk9dGhpcy5pc29XZWVrWWVhcigpLEI9dGhpcy4kdSxOPShCP20udXRjOm0pKCkueWVhcihJKS5zdGFydE9mKCJ5ZWFyIiksUj00LU4uaXNvV2Vla2RheSgpLE4uaXNvV2Vla2RheSgpPjQmJihSKz03KSxOLmFkZChSLGYpKTtyZXR1cm4gei5kaWZmKFcsIndlZWsiKSsxfSxFLmlzb1dlZWtkYXk9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuJHV0aWxzKCkudShBKT90aGlzLmRheSgpfHw3OnRoaXMuZGF5KHRoaXMuZGF5KCklNz9BOkEtNyl9O3ZhciBfPUUuc3RhcnRPZjtFLnN0YXJ0T2Y9ZnVuY3Rpb24oQSxJKXt2YXIgQj10aGlzLiR1dGlscygpLE49ISFCLnUoSSl8fEk7cmV0dXJuIEIucChBKT09PSJpc293ZWVrIj9OP3RoaXMuZGF0ZSh0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpLnN0YXJ0T2YoImRheSIpOnRoaXMuZGF0ZSh0aGlzLmRhdGUoKS0xLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS5lbmRPZigiZGF5Iik6Xy5iaW5kKHRoaXMpKEEsSSl9fX0pfSkoR0J0KTt2YXIgY3FlPUdCdC5leHBvcnRzO2NvbnN0IHVxZT1HNyhjcWUpO3ZhciBVQnQ9e2V4cG9ydHM6e319OyhmdW5jdGlvbihpLGEpeyhmdW5jdGlvbihmLHApe2kuZXhwb3J0cz1wKCl9KShiMCxmdW5jdGlvbigpe3ZhciBmPXtMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0scD0vKFxbW15bXSpcXSl8KFstXzovLiwoKVxzXSspfChBfGF8WVlZWXxZWT98TU0/TT9NP3xEb3xERD98aGg/fEhIP3xtbT98c3M/fFN7MSwzfXx6fFpaPykvZyx3PS9cZFxkLyxtPS9cZFxkPy8sYj0vXGQqW14tXzovLCgpXHNcZF0rLyxFPXt9LF89ZnVuY3Rpb24oVyl7cmV0dXJuKFc9K1cpKyhXPjY4PzE5MDA6MmUzKX0sQT1mdW5jdGlvbihXKXtyZXR1cm4gZnVuY3Rpb24oZXQpe3RoaXNbV109K2V0fX0sST1bL1srLV1cZFxkOj8oXGRcZCk/fFovLGZ1bmN0aW9uKFcpeyh0aGlzLnpvbmV8fCh0aGlzLnpvbmU9e30pKS5vZmZzZXQ9ZnVuY3Rpb24oZXQpe2lmKCFldHx8ZXQ9PT0iWiIpcmV0dXJuIDA7dmFyIHN0PWV0Lm1hdGNoKC8oWystXXxcZFxkKS9nKSxhdD02MCpzdFsxXSsoK3N0WzJdfHwwKTtyZXR1cm4gYXQ9PT0wPzA6c3RbMF09PT0iKyI/LWF0OmF0fShXKX1dLEI9ZnVuY3Rpb24oVyl7dmFyIGV0PUVbV107cmV0dXJuIGV0JiYoZXQuaW5kZXhPZj9ldDpldC5zLmNvbmNhdChldC5mKSl9LE49ZnVuY3Rpb24oVyxldCl7dmFyIHN0LGF0PUUubWVyaWRpZW07aWYoYXQpe2Zvcih2YXIgYnQ9MTtidDw9MjQ7YnQrPTEpaWYoVy5pbmRleE9mKGF0KGJ0LDAsZXQpKT4tMSl7c3Q9YnQ+MTI7YnJlYWt9fWVsc2Ugc3Q9Vz09PShldD8icG0iOiJQTSIpO3JldHVybiBzdH0sUj17QTpbYixmdW5jdGlvbihXKXt0aGlzLmFmdGVybm9vbj1OKFcsITEpfV0sYTpbYixmdW5jdGlvbihXKXt0aGlzLmFmdGVybm9vbj1OKFcsITApfV0sUzpbL1xkLyxmdW5jdGlvbihXKXt0aGlzLm1pbGxpc2Vjb25kcz0xMDAqK1d9XSxTUzpbdyxmdW5jdGlvbihXKXt0aGlzLm1pbGxpc2Vjb25kcz0xMCorV31dLFNTUzpbL1xkezN9LyxmdW5jdGlvbihXKXt0aGlzLm1pbGxpc2Vjb25kcz0rV31dLHM6W20sQSgic2Vjb25kcyIpXSxzczpbbSxBKCJzZWNvbmRzIildLG06W20sQSgibWludXRlcyIpXSxtbTpbbSxBKCJtaW51dGVzIildLEg6W20sQSgiaG91cnMiKV0saDpbbSxBKCJob3VycyIpXSxISDpbbSxBKCJob3VycyIpXSxoaDpbbSxBKCJob3VycyIpXSxEOlttLEEoImRheSIpXSxERDpbdyxBKCJkYXkiKV0sRG86W2IsZnVuY3Rpb24oVyl7dmFyIGV0PUUub3JkaW5hbCxzdD1XLm1hdGNoKC9cZCsvKTtpZih0aGlzLmRheT1zdFswXSxldClmb3IodmFyIGF0PTE7YXQ8PTMxO2F0Kz0xKWV0KGF0KS5yZXBsYWNlKC9cW3xcXS9nLCIiKT09PVcmJih0aGlzLmRheT1hdCl9XSxNOlttLEEoIm1vbnRoIildLE1NOlt3LEEoIm1vbnRoIildLE1NTTpbYixmdW5jdGlvbihXKXt2YXIgZXQ9QigibW9udGhzIiksc3Q9KEIoIm1vbnRoc1Nob3J0Iil8fGV0Lm1hcChmdW5jdGlvbihhdCl7cmV0dXJuIGF0LnNsaWNlKDAsMyl9KSkuaW5kZXhPZihXKSsxO2lmKHN0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9c3QlMTJ8fHN0fV0sTU1NTTpbYixmdW5jdGlvbihXKXt2YXIgZXQ9QigibW9udGhzIikuaW5kZXhPZihXKSsxO2lmKGV0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9ZXQlMTJ8fGV0fV0sWTpbL1srLV0/XGQrLyxBKCJ5ZWFyIildLFlZOlt3LGZ1bmN0aW9uKFcpe3RoaXMueWVhcj1fKFcpfV0sWVlZWTpbL1xkezR9LyxBKCJ5ZWFyIildLFo6SSxaWjpJfTtmdW5jdGlvbiB6KFcpe3ZhciBldCxzdDtldD1XLHN0PUUmJkUuZm9ybWF0cztmb3IodmFyIGF0PShXPWV0LnJlcGxhY2UoLyhcW1teXF1dK10pfChMVFM/fGx7MSw0fXxMezEsNH0pL2csZnVuY3Rpb24oWCxwdCxVKXt2YXIgVHQ9VSYmVS50b1VwcGVyQ2FzZSgpO3JldHVybiBwdHx8c3RbVV18fGZbVV18fHN0W1R0XS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTU1NTXxNTXxERHxkZGRkKS9nLGZ1bmN0aW9uKG50LEl0LE90KXtyZXR1cm4gSXR8fE90LnNsaWNlKDEpfSl9KSkubWF0Y2gocCksYnQ9YXQubGVuZ3RoLG10PTA7bXQ8YnQ7bXQrPTEpe3ZhciB5dD1hdFttdF0sZnQ9Ult5dF0sdXQ9ZnQmJmZ0WzBdLHZ0PWZ0JiZmdFsxXTthdFttdF09dnQ/e3JlZ2V4OnV0LHBhcnNlcjp2dH06eXQucmVwbGFjZSgvXlxbfFxdJC9nLCIiKX1yZXR1cm4gZnVuY3Rpb24oWCl7Zm9yKHZhciBwdD17fSxVPTAsVHQ9MDtVPGJ0O1UrPTEpe3ZhciBudD1hdFtVXTtpZih0eXBlb2YgbnQ9PSJzdHJpbmciKVR0Kz1udC5sZW5ndGg7ZWxzZXt2YXIgSXQ9bnQucmVnZXgsT3Q9bnQucGFyc2VyLEJ0PVguc2xpY2UoVHQpLEV0PUl0LmV4ZWMoQnQpWzBdO090LmNhbGwocHQsRXQpLFg9WC5yZXBsYWNlKEV0LCIiKX19cmV0dXJuIGZ1bmN0aW9uKFope3ZhciBDdD1aLmFmdGVybm9vbjtpZihDdCE9PXZvaWQgMCl7dmFyIHh0PVouaG91cnM7Q3Q/eHQ8MTImJihaLmhvdXJzKz0xMik6eHQ9PT0xMiYmKFouaG91cnM9MCksZGVsZXRlIFouYWZ0ZXJub29ufX0ocHQpLHB0fX1yZXR1cm4gZnVuY3Rpb24oVyxldCxzdCl7c3QucC5jdXN0b21QYXJzZUZvcm1hdD0hMCxXJiZXLnBhcnNlVHdvRGlnaXRZZWFyJiYoXz1XLnBhcnNlVHdvRGlnaXRZZWFyKTt2YXIgYXQ9ZXQucHJvdG90eXBlLGJ0PWF0LnBhcnNlO2F0LnBhcnNlPWZ1bmN0aW9uKG10KXt2YXIgeXQ9bXQuZGF0ZSxmdD1tdC51dGMsdXQ9bXQuYXJnczt0aGlzLiR1PWZ0O3ZhciB2dD11dFsxXTtpZih0eXBlb2YgdnQ9PSJzdHJpbmciKXt2YXIgWD11dFsyXT09PSEwLHB0PXV0WzNdPT09ITAsVT1YfHxwdCxUdD11dFsyXTtwdCYmKFR0PXV0WzJdKSxFPXRoaXMuJGxvY2FsZSgpLCFYJiZUdCYmKEU9c3QuTHNbVHRdKSx0aGlzLiRkPWZ1bmN0aW9uKEJ0LEV0LFope3RyeXtpZihbIngiLCJYIl0uaW5kZXhPZihFdCk+LTEpcmV0dXJuIG5ldyBEYXRlKChFdD09PSJYIj8xZTM6MSkqQnQpO3ZhciBDdD16KEV0KShCdCkseHQ9Q3QueWVhcixIdD1DdC5tb250aCxMZT1DdC5kYXksRnQ9Q3QuaG91cnMsZ249Q3QubWludXRlcyxTZT1DdC5zZWNvbmRzLG1lPUN0Lm1pbGxpc2Vjb25kcyxWZT1DdC56b25lLFllPW5ldyBEYXRlLGNlPUxlfHwoeHR8fEh0PzE6WWUuZ2V0RGF0ZSgpKSxrZT14dHx8WWUuZ2V0RnVsbFllYXIoKSx6dD0wO3h0JiYhSHR8fCh6dD1IdD4wP0h0LTE6WWUuZ2V0TW9udGgoKSk7dmFyIHJlPUZ0fHwwLHNlPWdufHwwLFBlPVNlfHwwLHRlPW1lfHwwO3JldHVybiBWZT9uZXcgRGF0ZShEYXRlLlVUQyhrZSx6dCxjZSxyZSxzZSxQZSx0ZSs2MCpWZS5vZmZzZXQqMWUzKSk6Wj9uZXcgRGF0ZShEYXRlLlVUQyhrZSx6dCxjZSxyZSxzZSxQZSx0ZSkpOm5ldyBEYXRlKGtlLHp0LGNlLHJlLHNlLFBlLHRlKX1jYXRjaHtyZXR1cm4gbmV3IERhdGUoIiIpfX0oeXQsdnQsZnQpLHRoaXMuaW5pdCgpLFR0JiZUdCE9PSEwJiYodGhpcy4kTD10aGlzLmxvY2FsZShUdCkuJEwpLFUmJnl0IT10aGlzLmZvcm1hdCh2dCkmJih0aGlzLiRkPW5ldyBEYXRlKCIiKSksRT17fX1lbHNlIGlmKHZ0IGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBudD12dC5sZW5ndGgsSXQ9MTtJdDw9bnQ7SXQrPTEpe3V0WzFdPXZ0W0l0LTFdO3ZhciBPdD1zdC5hcHBseSh0aGlzLHV0KTtpZihPdC5pc1ZhbGlkKCkpe3RoaXMuJGQ9T3QuJGQsdGhpcy4kTD1PdC4kTCx0aGlzLmluaXQoKTticmVha31JdD09PW50JiYodGhpcy4kZD1uZXcgRGF0ZSgiIikpfWVsc2UgYnQuY2FsbCh0aGlzLG10KX19fSl9KShVQnQpO3ZhciBscWU9VUJ0LmV4cG9ydHM7Y29uc3QgaHFlPUc3KGxxZSk7dmFyIFdCdD17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGksYSl7KGZ1bmN0aW9uKGYscCl7aS5leHBvcnRzPXAoKX0pKGIwLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGYscCl7dmFyIHc9cC5wcm90b3R5cGUsbT13LmZvcm1hdDt3LmZvcm1hdD1mdW5jdGlvbihiKXt2YXIgRT10aGlzLF89dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBtLmJpbmQodGhpcykoYik7dmFyIEE9dGhpcy4kdXRpbHMoKSxJPShifHwiWVlZWS1NTS1ERFRISDptbTpzc1oiKS5yZXBsYWNlKC9cWyhbXlxdXSspXXxRfHdvfHd3fHd8V1d8V3x6enp8enxnZ2dnfEdHR0d8RG98WHx4fGt7MSwyfXxTL2csZnVuY3Rpb24oQil7c3dpdGNoKEIpe2Nhc2UiUSI6cmV0dXJuIE1hdGguY2VpbCgoRS4kTSsxKS8zKTtjYXNlIkRvIjpyZXR1cm4gXy5vcmRpbmFsKEUuJEQpO2Nhc2UiZ2dnZyI6cmV0dXJuIEUud2Vla1llYXIoKTtjYXNlIkdHR0ciOnJldHVybiBFLmlzb1dlZWtZZWFyKCk7Y2FzZSJ3byI6cmV0dXJuIF8ub3JkaW5hbChFLndlZWsoKSwiVyIpO2Nhc2UidyI6Y2FzZSJ3dyI6cmV0dXJuIEEucyhFLndlZWsoKSxCPT09InciPzE6MiwiMCIpO2Nhc2UiVyI6Y2FzZSJXVyI6cmV0dXJuIEEucyhFLmlzb1dlZWsoKSxCPT09IlciPzE6MiwiMCIpO2Nhc2UiayI6Y2FzZSJrayI6cmV0dXJuIEEucyhTdHJpbmcoRS4kSD09PTA/MjQ6RS4kSCksQj09PSJrIj8xOjIsIjAiKTtjYXNlIlgiOnJldHVybiBNYXRoLmZsb29yKEUuJGQuZ2V0VGltZSgpLzFlMyk7Y2FzZSJ4IjpyZXR1cm4gRS4kZC5nZXRUaW1lKCk7Y2FzZSJ6IjpyZXR1cm4iWyIrRS5vZmZzZXROYW1lKCkrIl0iO2Nhc2Uienp6IjpyZXR1cm4iWyIrRS5vZmZzZXROYW1lKCJsb25nIikrIl0iO2RlZmF1bHQ6cmV0dXJuIEJ9fSk7cmV0dXJuIG0uYmluZCh0aGlzKShJKX19fSl9KShXQnQpO3ZhciBmcWU9V0J0LmV4cG9ydHM7Y29uc3QgZHFlPUc3KGZxZSk7dzAuZXh0ZW5kKHVxZSksdzAuZXh0ZW5kKGhxZSksdzAuZXh0ZW5kKGRxZSk7bGV0IHgzPSIiLFYwdD0iIixHMHQsVTB0PSIiLFBGPVtdLEZGPVtdLFcwdD17fSxZMHQ9W10sSVk9W10sdUw9IiIsSzB0PSIiO2NvbnN0IFlCdD1bImFjdGl2ZSIsImRvbmUiLCJjcml0IiwibWlsZXN0b25lIl07bGV0IFgwdD1bXSxORj0hMSxRMHQ9ITEsWjB0PSJzdW5kYXkiLEowdD0wO2NvbnN0IGdxZT1mdW5jdGlvbigpe1kwdD1bXSxJWT1bXSx1TD0iIixYMHQ9W10sT1k9MCxlZ3Q9dm9pZCAwLFBZPXZvaWQgMCxoMT1bXSx4Mz0iIixWMHQ9IiIsSzB0PSIiLEcwdD12b2lkIDAsVTB0PSIiLFBGPVtdLEZGPVtdLE5GPSExLFEwdD0hMSxKMHQ9MCxXMHQ9e30saGcoKSxaMHQ9InN1bmRheSJ9LHBxZT1mdW5jdGlvbihpKXtWMHQ9aX0sYnFlPWZ1bmN0aW9uKCl7cmV0dXJuIFYwdH0sd3FlPWZ1bmN0aW9uKGkpe0cwdD1pfSx2cWU9ZnVuY3Rpb24oKXtyZXR1cm4gRzB0fSxtcWU9ZnVuY3Rpb24oaSl7VTB0PWl9LHlxZT1mdW5jdGlvbigpe3JldHVybiBVMHR9LHhxZT1mdW5jdGlvbihpKXt4Mz1pfSxrcWU9ZnVuY3Rpb24oKXtORj0hMH0sRXFlPWZ1bmN0aW9uKCl7cmV0dXJuIE5GfSxUcWU9ZnVuY3Rpb24oKXtRMHQ9ITB9LENxZT1mdW5jdGlvbigpe3JldHVybiBRMHR9LF9xZT1mdW5jdGlvbihpKXtLMHQ9aX0sU3FlPWZ1bmN0aW9uKCl7cmV0dXJuIEswdH0sQXFlPWZ1bmN0aW9uKCl7cmV0dXJuIHgzfSxMcWU9ZnVuY3Rpb24oaSl7UEY9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sTXFlPWZ1bmN0aW9uKCl7cmV0dXJuIFBGfSxEcWU9ZnVuY3Rpb24oaSl7RkY9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sSXFlPWZ1bmN0aW9uKCl7cmV0dXJuIEZGfSxPcWU9ZnVuY3Rpb24oKXtyZXR1cm4gVzB0fSxQcWU9ZnVuY3Rpb24oaSl7dUw9aSxZMHQucHVzaChpKX0sRnFlPWZ1bmN0aW9uKCl7cmV0dXJuIFkwdH0sTnFlPWZ1bmN0aW9uKCl7bGV0IGk9dFJ0KCk7Y29uc3QgYT0xMDtsZXQgZj0wO2Zvcig7IWkmJmY8YTspaT10UnQoKSxmKys7cmV0dXJuIElZPWgxLElZfSxLQnQ9ZnVuY3Rpb24oaSxhLGYscCl7cmV0dXJuIHAuaW5jbHVkZXMoaS5mb3JtYXQoYS50cmltKCkpKT8hMTppLmlzb1dlZWtkYXkoKT49NiYmZi5pbmNsdWRlcygid2Vla2VuZHMiKXx8Zi5pbmNsdWRlcyhpLmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPyEwOmYuaW5jbHVkZXMoaS5mb3JtYXQoYS50cmltKCkpKX0sQnFlPWZ1bmN0aW9uKGkpe1owdD1pfSxScWU9ZnVuY3Rpb24oKXtyZXR1cm4gWjB0fSxYQnQ9ZnVuY3Rpb24oaSxhLGYscCl7aWYoIWYubGVuZ3RofHxpLm1hbnVhbEVuZFRpbWUpcmV0dXJuO2xldCB3O2kuc3RhcnRUaW1lIGluc3RhbmNlb2YgRGF0ZT93PXcwKGkuc3RhcnRUaW1lKTp3PXcwKGkuc3RhcnRUaW1lLGEsITApLHc9dy5hZGQoMSwiZCIpO2xldCBtO2kuZW5kVGltZSBpbnN0YW5jZW9mIERhdGU/bT13MChpLmVuZFRpbWUpOm09dzAoaS5lbmRUaW1lLGEsITApO2NvbnN0W2IsRV09anFlKHcsbSxhLGYscCk7aS5lbmRUaW1lPWIudG9EYXRlKCksaS5yZW5kZXJFbmRUaW1lPUV9LGpxZT1mdW5jdGlvbihpLGEsZixwLHcpe2xldCBtPSExLGI9bnVsbDtmb3IoO2k8PWE7KW18fChiPWEudG9EYXRlKCkpLG09S0J0KGksZixwLHcpLG0mJihhPWEuYWRkKDEsImQiKSksaT1pLmFkZCgxLCJkIik7cmV0dXJuW2EsYl19LHRndD1mdW5jdGlvbihpLGEsZil7Zj1mLnRyaW0oKTtjb25zdCB3PS9eYWZ0ZXJccysoW1xkXHctIF0rKS8uZXhlYyhmLnRyaW0oKSk7aWYodyE9PW51bGwpe2xldCBiPW51bGw7aWYod1sxXS5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oRSl7bGV0IF89aEwoRSk7XyE9PXZvaWQgMCYmKGI/Xy5lbmRUaW1lPmIuZW5kVGltZSYmKGI9Xyk6Yj1fKX0pLGIpcmV0dXJuIGIuZW5kVGltZTt7Y29uc3QgRT1uZXcgRGF0ZTtyZXR1cm4gRS5zZXRIb3VycygwLDAsMCwwKSxFfX1sZXQgbT13MChmLGEudHJpbSgpLCEwKTtpZihtLmlzVmFsaWQoKSlyZXR1cm4gbS50b0RhdGUoKTt7VXQuZGVidWcoIkludmFsaWQgZGF0ZToiK2YpLFV0LmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrYS50cmltKCkpO2NvbnN0IGI9bmV3IERhdGUoZik7aWYoYj09PXZvaWQgMHx8aXNOYU4oYi5nZXRUaW1lKCkpfHxiLmdldEZ1bGxZZWFyKCk8LTFlNHx8Yi5nZXRGdWxsWWVhcigpPjFlNCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0ZToiK2YpO3JldHVybiBifX0sUUJ0PWZ1bmN0aW9uKGkpe2NvbnN0IGE9L14oXGQrKD86XC5cZCspPykoW01kaG1zd3ldfG1zKSQvLmV4ZWMoaS50cmltKCkpO3JldHVybiBhIT09bnVsbD9bTnVtYmVyLnBhcnNlRmxvYXQoYVsxXSksYVsyXV06W05hTiwibXMiXX0sWkJ0PWZ1bmN0aW9uKGksYSxmLHA9ITEpe2Y9Zi50cmltKCk7bGV0IHc9dzAoZixhLnRyaW0oKSwhMCk7aWYody5pc1ZhbGlkKCkpcmV0dXJuIHAmJih3PXcuYWRkKDEsImQiKSksdy50b0RhdGUoKTtsZXQgbT13MChpKTtjb25zdFtiLEVdPVFCdChmKTtpZighTnVtYmVyLmlzTmFOKGIpKXtjb25zdCBfPW0uYWRkKGIsRSk7Xy5pc1ZhbGlkKCkmJihtPV8pfXJldHVybiBtLnRvRGF0ZSgpfTtsZXQgT1k9MDtjb25zdCBsTD1mdW5jdGlvbihpKXtyZXR1cm4gaT09PXZvaWQgMD8oT1k9T1krMSwidGFzayIrT1kpOml9LCRxZT1mdW5jdGlvbihpLGEpe2xldCBmO2Euc3Vic3RyKDAsMSk9PT0iOiI/Zj1hLnN1YnN0cigxLGEubGVuZ3RoKTpmPWE7Y29uc3QgcD1mLnNwbGl0KCIsIiksdz17fTtyUnQocCx3LFlCdCk7Zm9yKGxldCBiPTA7YjxwLmxlbmd0aDtiKyspcFtiXT1wW2JdLnRyaW0oKTtsZXQgbT0iIjtzd2l0Y2gocC5sZW5ndGgpe2Nhc2UgMTp3LmlkPWxMKCksdy5zdGFydFRpbWU9aS5lbmRUaW1lLG09cFswXTticmVhaztjYXNlIDI6dy5pZD1sTCgpLHcuc3RhcnRUaW1lPXRndCh2b2lkIDAseDMscFswXSksbT1wWzFdO2JyZWFrO2Nhc2UgMzp3LmlkPWxMKHBbMF0pLHcuc3RhcnRUaW1lPXRndCh2b2lkIDAseDMscFsxXSksbT1wWzJdO2JyZWFrfXJldHVybiBtJiYody5lbmRUaW1lPVpCdCh3LnN0YXJ0VGltZSx4MyxtLE5GKSx3Lm1hbnVhbEVuZFRpbWU9dzAobSwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSxYQnQodyx4MyxGRixQRikpLHd9LHpxZT1mdW5jdGlvbihpLGEpe2xldCBmO2Euc3Vic3RyKDAsMSk9PT0iOiI/Zj1hLnN1YnN0cigxLGEubGVuZ3RoKTpmPWE7Y29uc3QgcD1mLnNwbGl0KCIsIiksdz17fTtyUnQocCx3LFlCdCk7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKyspcFttXT1wW21dLnRyaW0oKTtzd2l0Y2gocC5sZW5ndGgpe2Nhc2UgMTp3LmlkPWxMKCksdy5zdGFydFRpbWU9e3R5cGU6InByZXZUYXNrRW5kIixpZDppfSx3LmVuZFRpbWU9e2RhdGE6cFswXX07YnJlYWs7Y2FzZSAyOncuaWQ9bEwoKSx3LnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6cFswXX0sdy5lbmRUaW1lPXtkYXRhOnBbMV19O2JyZWFrO2Nhc2UgMzp3LmlkPWxMKHBbMF0pLHcuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpwWzFdfSx3LmVuZFRpbWU9e2RhdGE6cFsyXX07YnJlYWt9cmV0dXJuIHd9O2xldCBlZ3QsUFksaDE9W107Y29uc3QgSkJ0PXt9LHFxZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9e3NlY3Rpb246dUwsdHlwZTp1TCxwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOmF9LHRhc2s6aSxjbGFzc2VzOltdfSxwPXpxZShQWSxhKTtmLnJhdy5zdGFydFRpbWU9cC5zdGFydFRpbWUsZi5yYXcuZW5kVGltZT1wLmVuZFRpbWUsZi5pZD1wLmlkLGYucHJldlRhc2tJZD1QWSxmLmFjdGl2ZT1wLmFjdGl2ZSxmLmRvbmU9cC5kb25lLGYuY3JpdD1wLmNyaXQsZi5taWxlc3RvbmU9cC5taWxlc3RvbmUsZi5vcmRlcj1KMHQsSjB0Kys7Y29uc3Qgdz1oMS5wdXNoKGYpO1BZPWYuaWQsSkJ0W2YuaWRdPXctMX0saEw9ZnVuY3Rpb24oaSl7Y29uc3QgYT1KQnRbaV07cmV0dXJuIGgxW2FdfSxIcWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPXtzZWN0aW9uOnVMLHR5cGU6dUwsZGVzY3JpcHRpb246aSx0YXNrOmksY2xhc3NlczpbXX0scD0kcWUoZWd0LGEpO2Yuc3RhcnRUaW1lPXAuc3RhcnRUaW1lLGYuZW5kVGltZT1wLmVuZFRpbWUsZi5pZD1wLmlkLGYuYWN0aXZlPXAuYWN0aXZlLGYuZG9uZT1wLmRvbmUsZi5jcml0PXAuY3JpdCxmLm1pbGVzdG9uZT1wLm1pbGVzdG9uZSxlZ3Q9ZixJWS5wdXNoKGYpfSx0UnQ9ZnVuY3Rpb24oKXtjb25zdCBpPWZ1bmN0aW9uKGYpe2NvbnN0IHA9aDFbZl07bGV0IHc9IiI7c3dpdGNoKGgxW2ZdLnJhdy5zdGFydFRpbWUudHlwZSl7Y2FzZSJwcmV2VGFza0VuZCI6e2NvbnN0IG09aEwocC5wcmV2VGFza0lkKTtwLnN0YXJ0VGltZT1tLmVuZFRpbWU7YnJlYWt9Y2FzZSJnZXRTdGFydERhdGUiOnc9dGd0KHZvaWQgMCx4MyxoMVtmXS5yYXcuc3RhcnRUaW1lLnN0YXJ0RGF0YSksdyYmKGgxW2ZdLnN0YXJ0VGltZT13KTticmVha31yZXR1cm4gaDFbZl0uc3RhcnRUaW1lJiYoaDFbZl0uZW5kVGltZT1aQnQoaDFbZl0uc3RhcnRUaW1lLHgzLGgxW2ZdLnJhdy5lbmRUaW1lLmRhdGEsTkYpLGgxW2ZdLmVuZFRpbWUmJihoMVtmXS5wcm9jZXNzZWQ9ITAsaDFbZl0ubWFudWFsRW5kVGltZT13MChoMVtmXS5yYXcuZW5kVGltZS5kYXRhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLFhCdChoMVtmXSx4MyxGRixQRikpKSxoMVtmXS5wcm9jZXNzZWR9O2xldCBhPSEwO2Zvcihjb25zdFtmLHBdb2YgaDEuZW50cmllcygpKWkoZiksYT1hJiZwLnByb2Nlc3NlZDtyZXR1cm4gYX0sVnFlPWZ1bmN0aW9uKGksYSl7bGV0IGY9YTtPZSgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiJiYoZj1payhhKSksaS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7aEwocCkhPT12b2lkIDAmJihuUnQocCwoKT0+e3dpbmRvdy5vcGVuKGYsIl9zZWxmIil9KSxXMHRbcF09Zil9KSxlUnQoaSwiY2xpY2thYmxlIil9LGVSdD1mdW5jdGlvbihpLGEpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2xldCBwPWhMKGYpO3AhPT12b2lkIDAmJnAuY2xhc3Nlcy5wdXNoKGEpfSl9LEdxZT1mdW5jdGlvbihpLGEsZil7aWYoT2UoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8YT09PXZvaWQgMClyZXR1cm47bGV0IHA9W107aWYodHlwZW9mIGY9PSJzdHJpbmciKXtwPWYuc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKyspe2xldCBiPXBbbV0udHJpbSgpO2IuY2hhckF0KDApPT09JyInJiZiLmNoYXJBdChiLmxlbmd0aC0xKT09PSciJyYmKGI9Yi5zdWJzdHIoMSxiLmxlbmd0aC0yKSkscFttXT1ifX1wLmxlbmd0aD09PTAmJnAucHVzaChpKSxoTChpKSE9PXZvaWQgMCYmblJ0KGksKCk9PnskYS5ydW5GdW5jKGEsLi4ucCl9KX0sblJ0PWZ1bmN0aW9uKGksYSl7WDB0LnB1c2goZnVuY3Rpb24oKXtjb25zdCBmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtpfSJdYCk7ZiE9PW51bGwmJmYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7YSgpfSl9LGZ1bmN0aW9uKCl7Y29uc3QgZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7aX0tdGV4dCJdYCk7ZiE9PW51bGwmJmYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7YSgpfSl9KX0sVXFlPXtnZXRDb25maWc6KCk9Pk9lKCkuZ2FudHQsY2xlYXI6Z3FlLHNldERhdGVGb3JtYXQ6eHFlLGdldERhdGVGb3JtYXQ6QXFlLGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOmtxZSxlbmREYXRlc0FyZUluY2x1c2l2ZTpFcWUsZW5hYmxlVG9wQXhpczpUcWUsdG9wQXhpc0VuYWJsZWQ6Q3FlLHNldEF4aXNGb3JtYXQ6cHFlLGdldEF4aXNGb3JtYXQ6YnFlLHNldFRpY2tJbnRlcnZhbDp3cWUsZ2V0VGlja0ludGVydmFsOnZxZSxzZXRUb2RheU1hcmtlcjptcWUsZ2V0VG9kYXlNYXJrZXI6eXFlLHNldEFjY1RpdGxlOkUwLGdldEFjY1RpdGxlOmZnLHNldERpYWdyYW1UaXRsZTpOYixnZXREaWFncmFtVGl0bGU6cGcsc2V0RGlzcGxheU1vZGU6X3FlLGdldERpc3BsYXlNb2RlOlNxZSxzZXRBY2NEZXNjcmlwdGlvbjpkZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxhZGRTZWN0aW9uOlBxZSxnZXRTZWN0aW9uczpGcWUsZ2V0VGFza3M6TnFlLGFkZFRhc2s6cXFlLGZpbmRUYXNrQnlJZDpoTCxhZGRUYXNrT3JnOkhxZSxzZXRJbmNsdWRlczpMcWUsZ2V0SW5jbHVkZXM6TXFlLHNldEV4Y2x1ZGVzOkRxZSxnZXRFeGNsdWRlczpJcWUsc2V0Q2xpY2tFdmVudDpmdW5jdGlvbihpLGEsZil7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocCl7R3FlKHAsYSxmKX0pLGVSdChpLCJjbGlja2FibGUiKX0sc2V0TGluazpWcWUsZ2V0TGlua3M6T3FlLGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24oaSl7WDB0LmZvckVhY2goZnVuY3Rpb24oYSl7YShpKX0pfSxwYXJzZUR1cmF0aW9uOlFCdCxpc0ludmFsaWREYXRlOktCdCxzZXRXZWVrZGF5OkJxZSxnZXRXZWVrZGF5OlJxZX07ZnVuY3Rpb24gclJ0KGksYSxmKXtsZXQgcD0hMDtmb3IoO3A7KXA9ITEsZi5mb3JFYWNoKGZ1bmN0aW9uKHcpe2NvbnN0IG09Il5cXHMqIit3KyJcXHMqJCIsYj1uZXcgUmVnRXhwKG0pO2lbMF0ubWF0Y2goYikmJihhW3ddPSEwLGkuc2hpZnQoMSkscD0hMCl9KX1jb25zdCBXcWU9ZnVuY3Rpb24oKXtVdC5kZWJ1ZygiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbCIpfSxpUnQ9e21vbmRheTpCUCx0dWVzZGF5OkpNdCx3ZWRuZXNkYXk6dER0LHRodXJzZGF5OnRULGZyaWRheTplRHQsc2F0dXJkYXk6bkR0LHN1bmRheTpOUH0sWXFlPShpLGEpPT57bGV0IGY9Wy4uLmldLm1hcCgoKT0+LTEvMCkscD1bLi4uaV0uc29ydCgobSxiKT0+bS5zdGFydFRpbWUtYi5zdGFydFRpbWV8fG0ub3JkZXItYi5vcmRlciksdz0wO2Zvcihjb25zdCBtIG9mIHApZm9yKGxldCBiPTA7YjxmLmxlbmd0aDtiKyspaWYobS5zdGFydFRpbWU+PWZbYl0pe2ZbYl09bS5lbmRUaW1lLG0ub3JkZXI9YithLGI+dyYmKHc9Yik7YnJlYWt9cmV0dXJuIHd9O2xldCBONTtjb25zdCBLcWU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpvcWUsZGI6VXFlLHJlbmRlcmVyOntzZXRDb25mOldxZSxkcmF3OmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHc9T2UoKS5nYW50dCxtPU9lKCkuc2VjdXJpdHlMZXZlbDtsZXQgYjttPT09InNhbmRib3giJiYoYj15cigiI2kiK2EpKTtjb25zdCBFPXlyKG09PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksXz1tPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsQT1fLmdldEVsZW1lbnRCeUlkKGEpO041PUEucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCxONT09PXZvaWQgMCYmKE41PTEyMDApLHcudXNlV2lkdGghPT12b2lkIDAmJihONT13LnVzZVdpZHRoKTtjb25zdCBJPXAuZGIuZ2V0VGFza3MoKTtsZXQgQj1bXTtmb3IoY29uc3QgdnQgb2YgSSlCLnB1c2godnQudHlwZSk7Qj11dChCKTtjb25zdCBOPXt9O2xldCBSPTIqdy50b3BQYWRkaW5nO2lmKHAuZGIuZ2V0RGlzcGxheU1vZGUoKT09PSJjb21wYWN0Inx8dy5kaXNwbGF5TW9kZT09PSJjb21wYWN0Iil7Y29uc3QgdnQ9e307Zm9yKGNvbnN0IHB0IG9mIEkpdnRbcHQuc2VjdGlvbl09PT12b2lkIDA/dnRbcHQuc2VjdGlvbl09W3B0XTp2dFtwdC5zZWN0aW9uXS5wdXNoKHB0KTtsZXQgWD0wO2Zvcihjb25zdCBwdCBvZiBPYmplY3Qua2V5cyh2dCkpe2NvbnN0IFU9WXFlKHZ0W3B0XSxYKSsxO1grPVUsUis9VSoody5iYXJIZWlnaHQrdy5iYXJHYXApLE5bcHRdPVV9fWVsc2V7Uis9SS5sZW5ndGgqKHcuYmFySGVpZ2h0K3cuYmFyR2FwKTtmb3IoY29uc3QgdnQgb2YgQilOW3Z0XT1JLmZpbHRlcihYPT5YLnR5cGU9PT12dCkubGVuZ3RofUEuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrTjUrIiAiK1IpO2NvbnN0IHo9RS5zZWxlY3QoYFtpZD0iJHthfSJdYCksVz1ZN2UoKS5kb21haW4oW014ZShJLGZ1bmN0aW9uKHZ0KXtyZXR1cm4gdnQuc3RhcnRUaW1lfSksTHhlKEksZnVuY3Rpb24odnQpe3JldHVybiB2dC5lbmRUaW1lfSldKS5yYW5nZVJvdW5kKFswLE41LXcubGVmdFBhZGRpbmctdy5yaWdodFBhZGRpbmddKTtmdW5jdGlvbiBldCh2dCxYKXtjb25zdCBwdD12dC5zdGFydFRpbWUsVT1YLnN0YXJ0VGltZTtsZXQgVHQ9MDtyZXR1cm4gcHQ+VT9UdD0xOnB0PFUmJihUdD0tMSksVHR9SS5zb3J0KGV0KSxzdChJLE41LFIpLGswKHosUixONSx3LnVzZU1heFdpZHRoKSx6LmFwcGVuZCgidGV4dCIpLnRleHQocC5kYi5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsTjUvMikuYXR0cigieSIsdy50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKTtmdW5jdGlvbiBzdCh2dCxYLHB0KXtjb25zdCBVPXcuYmFySGVpZ2h0LFR0PVUrdy5iYXJHYXAsbnQ9dy50b3BQYWRkaW5nLEl0PXcubGVmdFBhZGRpbmcsT3Q9QUEoKS5kb21haW4oWzAsQi5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKFprZSk7YnQoVHQsbnQsSXQsWCxwdCx2dCxwLmRiLmdldEV4Y2x1ZGVzKCkscC5kYi5nZXRJbmNsdWRlcygpKSxtdChJdCxudCxYLHB0KSxhdCh2dCxUdCxudCxJdCxVLE90LFgpLHl0KFR0LG50KSxmdChJdCxudCxYLHB0KX1mdW5jdGlvbiBhdCh2dCxYLHB0LFUsVHQsbnQsSXQpe2NvbnN0IEJ0PVsuLi5uZXcgU2V0KHZ0Lm1hcCh4dD0+eHQub3JkZXIpKV0ubWFwKHh0PT52dC5maW5kKEh0PT5IdC5vcmRlcj09PXh0KSk7ei5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKEJ0KS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLGZ1bmN0aW9uKHh0LEh0KXtyZXR1cm4gSHQ9eHQub3JkZXIsSHQqWCtwdC0yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKCl7cmV0dXJuIEl0LXcucmlnaHRQYWRkaW5nLzJ9KS5hdHRyKCJoZWlnaHQiLFgpLmF0dHIoImNsYXNzIixmdW5jdGlvbih4dCl7Zm9yKGNvbnN0W0h0LExlXW9mIEIuZW50cmllcygpKWlmKHh0LnR5cGU9PT1MZSlyZXR1cm4ic2VjdGlvbiBzZWN0aW9uIitIdCV3Lm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb24gc2VjdGlvbjAifSk7Y29uc3QgRXQ9ei5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHZ0KS5lbnRlcigpLFo9cC5kYi5nZXRMaW5rcygpO2lmKEV0LmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbih4dCl7cmV0dXJuIHh0LmlkfSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IixmdW5jdGlvbih4dCl7cmV0dXJuIHh0Lm1pbGVzdG9uZT9XKHh0LnN0YXJ0VGltZSkrVSsuNSooVyh4dC5lbmRUaW1lKS1XKHh0LnN0YXJ0VGltZSkpLS41KlR0OlcoeHQuc3RhcnRUaW1lKStVfSkuYXR0cigieSIsZnVuY3Rpb24oeHQsSHQpe3JldHVybiBIdD14dC5vcmRlcixIdCpYK3B0fSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHh0KXtyZXR1cm4geHQubWlsZXN0b25lP1R0OlcoeHQucmVuZGVyRW5kVGltZXx8eHQuZW5kVGltZSktVyh4dC5zdGFydFRpbWUpfSkuYXR0cigiaGVpZ2h0IixUdCkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsZnVuY3Rpb24oeHQsSHQpe3JldHVybiBIdD14dC5vcmRlciwoVyh4dC5zdGFydFRpbWUpK1UrLjUqKFcoeHQuZW5kVGltZSktVyh4dC5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisoSHQqWCtwdCsuNSpUdCkudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHh0KXtjb25zdCBIdD0idGFzayI7bGV0IExlPSIiO3h0LmNsYXNzZXMubGVuZ3RoPjAmJihMZT14dC5jbGFzc2VzLmpvaW4oIiAiKSk7bGV0IEZ0PTA7Zm9yKGNvbnN0W1NlLG1lXW9mIEIuZW50cmllcygpKXh0LnR5cGU9PT1tZSYmKEZ0PVNlJXcubnVtYmVyU2VjdGlvblN0eWxlcyk7bGV0IGduPSIiO3JldHVybiB4dC5hY3RpdmU/eHQuY3JpdD9nbis9IiBhY3RpdmVDcml0Ijpnbj0iIGFjdGl2ZSI6eHQuZG9uZT94dC5jcml0P2duPSIgZG9uZUNyaXQiOmduPSIgZG9uZSI6eHQuY3JpdCYmKGduKz0iIGNyaXQiKSxnbi5sZW5ndGg9PT0wJiYoZ249IiB0YXNrIikseHQubWlsZXN0b25lJiYoZ249IiBtaWxlc3RvbmUgIitnbiksZ24rPUZ0LGduKz0iICIrTGUsSHQrZ259KSxFdC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsZnVuY3Rpb24oeHQpe3JldHVybiB4dC5pZCsiLXRleHQifSkudGV4dChmdW5jdGlvbih4dCl7cmV0dXJuIHh0LnRhc2t9KS5hdHRyKCJmb250LXNpemUiLHcuZm9udFNpemUpLmF0dHIoIngiLGZ1bmN0aW9uKHh0KXtsZXQgSHQ9Vyh4dC5zdGFydFRpbWUpLExlPVcoeHQucmVuZGVyRW5kVGltZXx8eHQuZW5kVGltZSk7eHQubWlsZXN0b25lJiYoSHQrPS41KihXKHh0LmVuZFRpbWUpLVcoeHQuc3RhcnRUaW1lKSktLjUqVHQpLHh0Lm1pbGVzdG9uZSYmKExlPUh0K1R0KTtjb25zdCBGdD10aGlzLmdldEJCb3goKS53aWR0aDtyZXR1cm4gRnQ+TGUtSHQ/TGUrRnQrMS41KncubGVmdFBhZGRpbmc+SXQ/SHQrVS01OkxlK1UrNTooTGUtSHQpLzIrSHQrVX0pLmF0dHIoInkiLGZ1bmN0aW9uKHh0LEh0KXtyZXR1cm4gSHQ9eHQub3JkZXIsSHQqWCt3LmJhckhlaWdodC8yKyh3LmZvbnRTaXplLzItMikrcHR9KS5hdHRyKCJ0ZXh0LWhlaWdodCIsVHQpLmF0dHIoImNsYXNzIixmdW5jdGlvbih4dCl7Y29uc3QgSHQ9Vyh4dC5zdGFydFRpbWUpO2xldCBMZT1XKHh0LmVuZFRpbWUpO3h0Lm1pbGVzdG9uZSYmKExlPUh0K1R0KTtjb25zdCBGdD10aGlzLmdldEJCb3goKS53aWR0aDtsZXQgZ249IiI7eHQuY2xhc3Nlcy5sZW5ndGg+MCYmKGduPXh0LmNsYXNzZXMuam9pbigiICIpKTtsZXQgU2U9MDtmb3IoY29uc3RbVmUsWWVdb2YgQi5lbnRyaWVzKCkpeHQudHlwZT09PVllJiYoU2U9VmUldy5udW1iZXJTZWN0aW9uU3R5bGVzKTtsZXQgbWU9IiI7cmV0dXJuIHh0LmFjdGl2ZSYmKHh0LmNyaXQ/bWU9ImFjdGl2ZUNyaXRUZXh0IitTZTptZT0iYWN0aXZlVGV4dCIrU2UpLHh0LmRvbmU/eHQuY3JpdD9tZT1tZSsiIGRvbmVDcml0VGV4dCIrU2U6bWU9bWUrIiBkb25lVGV4dCIrU2U6eHQuY3JpdCYmKG1lPW1lKyIgY3JpdFRleHQiK1NlKSx4dC5taWxlc3RvbmUmJihtZSs9IiBtaWxlc3RvbmVUZXh0IiksRnQ+TGUtSHQ/TGUrRnQrMS41KncubGVmdFBhZGRpbmc+SXQ/Z24rIiB0YXNrVGV4dE91dHNpZGVMZWZ0IHRhc2tUZXh0T3V0c2lkZSIrU2UrIiAiK21lOmduKyIgdGFza1RleHRPdXRzaWRlUmlnaHQgdGFza1RleHRPdXRzaWRlIitTZSsiICIrbWUrIiB3aWR0aC0iK0Z0OmduKyIgdGFza1RleHQgdGFza1RleHQiK1NlKyIgIittZSsiIHdpZHRoLSIrRnR9KSxPZSgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCIpe2xldCB4dDt4dD15cigiI2kiK2EpO2NvbnN0IEh0PXh0Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O0V0LmZpbHRlcihmdW5jdGlvbihMZSl7cmV0dXJuIFpbTGUuaWRdIT09dm9pZCAwfSkuZWFjaChmdW5jdGlvbihMZSl7dmFyIEZ0PUh0LnF1ZXJ5U2VsZWN0b3IoIiMiK0xlLmlkKSxnbj1IdC5xdWVyeVNlbGVjdG9yKCIjIitMZS5pZCsiLXRleHQiKTtjb25zdCBTZT1GdC5wYXJlbnROb2RlO3ZhciBtZT1IdC5jcmVhdGVFbGVtZW50KCJhIik7bWUuc2V0QXR0cmlidXRlKCJ4bGluazpocmVmIixaW0xlLmlkXSksbWUuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLCJfdG9wIiksU2UuYXBwZW5kQ2hpbGQobWUpLG1lLmFwcGVuZENoaWxkKEZ0KSxtZS5hcHBlbmRDaGlsZChnbil9KX19ZnVuY3Rpb24gYnQodnQsWCxwdCxVLFR0LG50LEl0LE90KXtpZihJdC5sZW5ndGg9PT0wJiZPdC5sZW5ndGg9PT0wKXJldHVybjtsZXQgQnQsRXQ7Zm9yKGNvbnN0e3N0YXJ0VGltZTpGdCxlbmRUaW1lOmdufW9mIG50KShCdD09PXZvaWQgMHx8RnQ8QnQpJiYoQnQ9RnQpLChFdD09PXZvaWQgMHx8Z24+RXQpJiYoRXQ9Z24pO2lmKCFCdHx8IUV0KXJldHVybjtpZih3MChFdCkuZGlmZih3MChCdCksInllYXIiKT41KXtVdC53YXJuKCJUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCB0aW1lIGlzIG1vcmUgdGhhbiA1IHllYXJzLiBUaGlzIHdpbGwgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzLiBTa2lwcGluZyBkcmF3aW5nIGV4Y2x1ZGUgZGF5cy4iKTtyZXR1cm59Y29uc3QgWj1wLmRiLmdldERhdGVGb3JtYXQoKSxDdD1bXTtsZXQgeHQ9bnVsbCxIdD13MChCdCk7Zm9yKDtIdC52YWx1ZU9mKCk8PUV0OylwLmRiLmlzSW52YWxpZERhdGUoSHQsWixJdCxPdCk/eHQ/eHQuZW5kPUh0Onh0PXtzdGFydDpIdCxlbmQ6SHR9Onh0JiYoQ3QucHVzaCh4dCkseHQ9bnVsbCksSHQ9SHQuYWRkKDEsImQiKTt6LmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoQ3QpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLGZ1bmN0aW9uKEZ0KXtyZXR1cm4iZXhjbHVkZS0iK0Z0LnN0YXJ0LmZvcm1hdCgiWVlZWS1NTS1ERCIpfSkuYXR0cigieCIsZnVuY3Rpb24oRnQpe3JldHVybiBXKEZ0LnN0YXJ0KStwdH0pLmF0dHIoInkiLHcuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoIndpZHRoIixmdW5jdGlvbihGdCl7Y29uc3QgZ249RnQuZW5kLmFkZCgxLCJkYXkiKTtyZXR1cm4gVyhnbiktVyhGdC5zdGFydCl9KS5hdHRyKCJoZWlnaHQiLFR0LVgtdy5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsZnVuY3Rpb24oRnQsZ24pe3JldHVybihXKEZ0LnN0YXJ0KStwdCsuNSooVyhGdC5lbmQpLVcoRnQuc3RhcnQpKSkudG9TdHJpbmcoKSsicHggIisoZ24qdnQrLjUqVHQpLnRvU3RyaW5nKCkrInB4In0pLmF0dHIoImNsYXNzIiwiZXhjbHVkZS1yYW5nZSIpfWZ1bmN0aW9uIG10KHZ0LFgscHQsVSl7bGV0IFR0PWp4ZShXKS50aWNrU2l6ZSgtVStYK3cuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoWlUocC5kYi5nZXRBeGlzRm9ybWF0KCl8fHcuYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO2NvbnN0IEl0PS9eKFsxLTldXGQqKShtaWxsaXNlY29uZHxzZWNvbmR8bWludXRlfGhvdXJ8ZGF5fHdlZWt8bW9udGgpJC8uZXhlYyhwLmRiLmdldFRpY2tJbnRlcnZhbCgpfHx3LnRpY2tJbnRlcnZhbCk7aWYoSXQhPT1udWxsKXtjb25zdCBPdD1JdFsxXSxCdD1JdFsyXSxFdD1wLmRiLmdldFdlZWtkYXkoKXx8dy53ZWVrZGF5O3N3aXRjaChCdCl7Y2FzZSJtaWxsaXNlY29uZCI6VHQudGlja3MoTEEuZXZlcnkoT3QpKTticmVhaztjYXNlInNlY29uZCI6VHQudGlja3Moc2suZXZlcnkoT3QpKTticmVhaztjYXNlIm1pbnV0ZSI6VHQudGlja3MoUFAuZXZlcnkoT3QpKTticmVhaztjYXNlImhvdXIiOlR0LnRpY2tzKEZQLmV2ZXJ5KE90KSk7YnJlYWs7Y2FzZSJkYXkiOlR0LnRpY2tzKFo3LmV2ZXJ5KE90KSk7YnJlYWs7Y2FzZSJ3ZWVrIjpUdC50aWNrcyhpUnRbRXRdLmV2ZXJ5KE90KSk7YnJlYWs7Y2FzZSJtb250aCI6VHQudGlja3MoUlAuZXZlcnkoT3QpKTticmVha319aWYoei5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2dCsiLCAiKyhVLTUwKSsiKSIpLmNhbGwoVHQpLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImR5IiwiMWVtIikscC5kYi50b3BBeGlzRW5hYmxlZCgpfHx3LnRvcEF4aXMpe2xldCBPdD1SeGUoVykudGlja1NpemUoLVUrWCt3LmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KFpVKHAuZGIuZ2V0QXhpc0Zvcm1hdCgpfHx3LmF4aXNGb3JtYXR8fCIlWS0lbS0lZCIpKTtpZihJdCE9PW51bGwpe2NvbnN0IEJ0PUl0WzFdLEV0PUl0WzJdLFo9cC5kYi5nZXRXZWVrZGF5KCl8fHcud2Vla2RheTtzd2l0Y2goRXQpe2Nhc2UibWlsbGlzZWNvbmQiOk90LnRpY2tzKExBLmV2ZXJ5KEJ0KSk7YnJlYWs7Y2FzZSJzZWNvbmQiOk90LnRpY2tzKHNrLmV2ZXJ5KEJ0KSk7YnJlYWs7Y2FzZSJtaW51dGUiOk90LnRpY2tzKFBQLmV2ZXJ5KEJ0KSk7YnJlYWs7Y2FzZSJob3VyIjpPdC50aWNrcyhGUC5ldmVyeShCdCkpO2JyZWFrO2Nhc2UiZGF5IjpPdC50aWNrcyhaNy5ldmVyeShCdCkpO2JyZWFrO2Nhc2Uid2VlayI6T3QudGlja3MoaVJ0W1pdLmV2ZXJ5KEJ0KSk7YnJlYWs7Y2FzZSJtb250aCI6T3QudGlja3MoUlAuZXZlcnkoQnQpKTticmVha319ei5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2dCsiLCAiK1grIikiKS5jYWxsKE90KS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKX19ZnVuY3Rpb24geXQodnQsWCl7bGV0IHB0PTA7Y29uc3QgVT1PYmplY3Qua2V5cyhOKS5tYXAoVHQ9PltUdCxOW1R0XV0pO3ouYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShVKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbihUdCl7Y29uc3QgbnQ9VHRbMF0uc3BsaXQoS3IubGluZUJyZWFrUmVnZXgpLEl0PS0obnQubGVuZ3RoLTEpLzIsT3Q9Xy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO090LnNldEF0dHJpYnV0ZSgiZHkiLEl0KyJlbSIpO2Zvcihjb25zdFtCdCxFdF1vZiBudC5lbnRyaWVzKCkpe2NvbnN0IFo9Xy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtaLnNldEF0dHJpYnV0ZSgiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLFouc2V0QXR0cmlidXRlKCJ4IiwiMTAiKSxCdD4wJiZaLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxaLnRleHRDb250ZW50PUV0LE90LmFwcGVuZENoaWxkKFopfXJldHVybiBPdH0pLmF0dHIoIngiLDEwKS5hdHRyKCJ5IixmdW5jdGlvbihUdCxudCl7aWYobnQ+MClmb3IobGV0IEl0PTA7SXQ8bnQ7SXQrKylyZXR1cm4gcHQrPVVbbnQtMV1bMV0sVHRbMV0qdnQvMitwdCp2dCtYO2Vsc2UgcmV0dXJuIFR0WzFdKnZ0LzIrWH0pLmF0dHIoImZvbnQtc2l6ZSIsdy5zZWN0aW9uRm9udFNpemUpLmF0dHIoImNsYXNzIixmdW5jdGlvbihUdCl7Zm9yKGNvbnN0W250LEl0XW9mIEIuZW50cmllcygpKWlmKFR0WzBdPT09SXQpcmV0dXJuInNlY3Rpb25UaXRsZSBzZWN0aW9uVGl0bGUiK250JXcubnVtYmVyU2VjdGlvblN0eWxlcztyZXR1cm4ic2VjdGlvblRpdGxlIn0pfWZ1bmN0aW9uIGZ0KHZ0LFgscHQsVSl7Y29uc3QgVHQ9cC5kYi5nZXRUb2RheU1hcmtlcigpO2lmKFR0PT09Im9mZiIpcmV0dXJuO2NvbnN0IG50PXouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLEl0PW5ldyBEYXRlLE90PW50LmFwcGVuZCgibGluZSIpO090LmF0dHIoIngxIixXKEl0KSt2dCkuYXR0cigieDIiLFcoSXQpK3Z0KS5hdHRyKCJ5MSIsdy50aXRsZVRvcE1hcmdpbikuYXR0cigieTIiLFUtdy50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLFR0IT09IiImJk90LmF0dHIoInN0eWxlIixUdC5yZXBsYWNlKC8sL2csIjsiKSl9ZnVuY3Rpb24gdXQodnQpe2NvbnN0IFg9e30scHQ9W107Zm9yKGxldCBVPTAsVHQ9dnQubGVuZ3RoO1U8VHQ7KytVKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChYLHZ0W1VdKXx8KFhbdnRbVV1dPSEwLHB0LnB1c2godnRbVV0pKTtyZXR1cm4gcHR9fX0sc3R5bGVzOmk9PmAKICAubWVybWFpZC1tYWluLWZvbnQgewogICAgZm9udC1mYW1pbHk6ICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKICB9CiAgLmV4Y2x1ZGUtcmFuZ2UgewogICAgZmlsbDogJHtpLmV4Y2x1ZGVCa2dDb2xvcn07CiAgfQoKICAuc2VjdGlvbiB7CiAgICBzdHJva2U6IG5vbmU7CiAgICBvcGFjaXR5OiAwLjI7CiAgfQoKICAuc2VjdGlvbjAgewogICAgZmlsbDogJHtpLnNlY3Rpb25Ca2dDb2xvcn07CiAgfQoKICAuc2VjdGlvbjIgewogICAgZmlsbDogJHtpLnNlY3Rpb25Ca2dDb2xvcjJ9OwogIH0KCiAgLnNlY3Rpb24xLAogIC5zZWN0aW9uMyB7CiAgICBmaWxsOiAke2kuYWx0U2VjdGlvbkJrZ0NvbG9yfTsKICAgIG9wYWNpdHk6IDAuMjsKICB9CgogIC5zZWN0aW9uVGl0bGUwIHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUxIHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUyIHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUzIHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUgewogICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogICAgLy8gZm9udC1zaXplOiAke2kuZ2FudHRGb250U2l6ZX07CiAgICAvLyB0ZXh0LWhlaWdodDogMTRweDsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CgogIH0KCgogIC8qIEdyaWQgYW5kIGF4aXMgKi8KCiAgLmdyaWQgLnRpY2sgewogICAgc3Ryb2tlOiAke2kuZ3JpZENvbG9yfTsKICAgIG9wYWNpdHk6IDAuODsKICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICAgIHRleHQgewogICAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgICBmaWxsOiAke2kudGV4dENvbG9yfTsKICAgIH0KICB9CgogIC5ncmlkIHBhdGggewogICAgc3Ryb2tlLXdpZHRoOiAwOwogIH0KCgogIC8qIFRvZGF5IGxpbmUgKi8KCiAgLnRvZGF5IHsKICAgIGZpbGw6IG5vbmU7CiAgICBzdHJva2U6ICR7aS50b2RheUxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDJweDsKICB9CgoKICAvKiBUYXNrIHN0eWxpbmcgKi8KCiAgLyogRGVmYXVsdCB0YXNrICovCgogIC50YXNrIHsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC50YXNrVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKICB9CgogIC8vIC50YXNrVGV4dDpub3QoW2ZvbnQtc2l6ZV0pIHsKICAvLyAgIGZvbnQtc2l6ZTogJHtpLmdhbnR0Rm9udFNpemV9OwogIC8vIH0KCiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0IHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dERhcmtDb2xvcn07CiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAvLyBmb250LXNpemU6ICR7aS5nYW50dEZvbnRTaXplfTsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CgogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZUxlZnQgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfTsKICAgIHRleHQtYW5jaG9yOiBlbmQ7CiAgICAvLyBmb250LXNpemU6ICR7aS5nYW50dEZvbnRTaXplfTsKICB9CgogIC8qIFNwZWNpYWwgY2FzZSBjbGlja2FibGUgKi8KICAudGFzay5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KICAudGFza1RleHQuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZpbGw6ICR7aS50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgfQoKICAudGFza1RleHRPdXRzaWRlTGVmdC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHtpLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgogIC50YXNrVGV4dE91dHNpZGVSaWdodC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHtpLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgogIC8qIFNwZWNpZmljIHRhc2sgc2V0dGluZ3MgZm9yIHRoZSBzZWN0aW9ucyovCgogIC50YXNrVGV4dDAsCiAgLnRhc2tUZXh0MSwKICAudGFza1RleHQyLAogIC50YXNrVGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0Q29sb3J9OwogIH0KCiAgLnRhc2swLAogIC50YXNrMSwKICAudGFzazIsCiAgLnRhc2szIHsKICAgIGZpbGw6ICR7aS50YXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke2kudGFza0JvcmRlckNvbG9yfTsKICB9CgogIC50YXNrVGV4dE91dHNpZGUwLAogIC50YXNrVGV4dE91dHNpZGUyCiAgewogICAgZmlsbDogJHtpLnRhc2tUZXh0T3V0c2lkZUNvbG9yfTsKICB9CgogIC50YXNrVGV4dE91dHNpZGUxLAogIC50YXNrVGV4dE91dHNpZGUzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dE91dHNpZGVDb2xvcn07CiAgfQoKCiAgLyogQWN0aXZlIHRhc2sgKi8KCiAgLmFjdGl2ZTAsCiAgLmFjdGl2ZTEsCiAgLmFjdGl2ZTIsCiAgLmFjdGl2ZTMgewogICAgZmlsbDogJHtpLmFjdGl2ZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2U6ICR7aS5hY3RpdmVUYXNrQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdGl2ZVRleHQwLAogIC5hY3RpdmVUZXh0MSwKICAuYWN0aXZlVGV4dDIsCiAgLmFjdGl2ZVRleHQzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgoKICAvKiBDb21wbGV0ZWQgdGFzayAqLwoKICAuZG9uZTAsCiAgLmRvbmUxLAogIC5kb25lMiwKICAuZG9uZTMgewogICAgc3Ryb2tlOiAke2kuZG9uZVRhc2tCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kuZG9uZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuZG9uZVRleHQwLAogIC5kb25lVGV4dDEsCiAgLmRvbmVUZXh0MiwKICAuZG9uZVRleHQzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgoKICAvKiBUYXNrcyBvbiB0aGUgY3JpdGljYWwgbGluZSAqLwoKICAuY3JpdDAsCiAgLmNyaXQxLAogIC5jcml0MiwKICAuY3JpdDMgewogICAgc3Ryb2tlOiAke2kuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5jcml0QmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmFjdGl2ZUNyaXQwLAogIC5hY3RpdmVDcml0MSwKICAuYWN0aXZlQ3JpdDIsCiAgLmFjdGl2ZUNyaXQzIHsKICAgIHN0cm9rZTogJHtpLmNyaXRCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kuYWN0aXZlVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5kb25lQ3JpdDAsCiAgLmRvbmVDcml0MSwKICAuZG9uZUNyaXQyLAogIC5kb25lQ3JpdDMgewogICAgc3Ryb2tlOiAke2kuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5kb25lVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICB9CgogIC5taWxlc3RvbmUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpIHNjYWxlKDAuOCwwLjgpOwogIH0KCiAgLm1pbGVzdG9uZVRleHQgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KICAuZG9uZUNyaXRUZXh0MCwKICAuZG9uZUNyaXRUZXh0MSwKICAuZG9uZUNyaXRUZXh0MiwKICAuZG9uZUNyaXRUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKICAuYWN0aXZlQ3JpdFRleHQwLAogIC5hY3RpdmVDcml0VGV4dDEsCiAgLmFjdGl2ZUNyaXRUZXh0MiwKICAuYWN0aXZlQ3JpdFRleHQzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgogIC50aXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9ICAgIDsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgfQpgfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgbmd0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24obSxiLEUsXyl7Zm9yKEU9RXx8e30sXz1tLmxlbmd0aDtfLS07RVttW19dXT1iKTtyZXR1cm4gRX0sYT1bNiw5LDEwXSxmPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxpbmZvOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsc3RhdGVtZW50OjgsTkw6OSxzaG93SW5mbzoxMCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiaW5mbyIsNjoiRU9GIiw5OiJOTCIsMTA6InNob3dJbmZvIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDFdLFs3LDFdLFs4LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGIsRSxfLEEsSSxCLE4pe3N3aXRjaChCLmxlbmd0aC0xLEkpe2Nhc2UgMTpyZXR1cm4gQTtjYXNlIDQ6YnJlYWs7Y2FzZSA2OkEuc2V0SW5mbyghMCk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkoYSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6Niw5OlsxLDddLDEwOlsxLDhdfSx7MTpbMiwxXX0saShhLFsyLDNdKSxpKGEsWzIsNF0pLGkoYSxbMiw1XSksaShhLFsyLDZdKV0sZGVmYXVsdEFjdGlvbnM6ezQ6WzIsMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oYixFKXtpZihFLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoYik7ZWxzZXt2YXIgXz1uZXcgRXJyb3IoYik7dGhyb3cgXy5oYXNoPUUsX319LHBhcnNlOmZ1bmN0aW9uKGIpe3ZhciBFPXRoaXMsXz1bMF0sQT1bXSxJPVtudWxsXSxCPVtdLE49dGhpcy50YWJsZSxSPSIiLHo9MCxXPTAsZXQ9MixzdD0xLGF0PUIuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksYnQ9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxtdD17eXk6e319O2Zvcih2YXIgeXQgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx5dCkmJihtdC55eVt5dF09dGhpcy55eVt5dF0pO2J0LnNldElucHV0KGIsbXQueXkpLG10Lnl5LmxleGVyPWJ0LG10Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiBidC55eWxsb2M+InUiJiYoYnQueXlsbG9jPXt9KTt2YXIgZnQ9YnQueXlsbG9jO0IucHVzaChmdCk7dmFyIHV0PWJ0Lm9wdGlvbnMmJmJ0Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBtdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1tdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiB2dCgpe3ZhciBDdDtyZXR1cm4gQ3Q9QS5wb3AoKXx8YnQubGV4KCl8fHN0LHR5cGVvZiBDdCE9Im51bWJlciImJihDdCBpbnN0YW5jZW9mIEFycmF5JiYoQT1DdCxDdD1BLnBvcCgpKSxDdD1FLnN5bWJvbHNfW0N0XXx8Q3QpLEN0fWZvcih2YXIgWCxwdCxVLFR0LG50PXt9LEl0LE90LEJ0LEV0Ozspe2lmKHB0PV9bXy5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1twdF0/VT10aGlzLmRlZmF1bHRBY3Rpb25zW3B0XTooKFg9PT1udWxsfHx0eXBlb2YgWD4idSIpJiYoWD12dCgpKSxVPU5bcHRdJiZOW3B0XVtYXSksdHlwZW9mIFU+InUifHwhVS5sZW5ndGh8fCFVWzBdKXt2YXIgWj0iIjtFdD1bXTtmb3IoSXQgaW4gTltwdF0pdGhpcy50ZXJtaW5hbHNfW0l0XSYmSXQ+ZXQmJkV0LnB1c2goIiciK3RoaXMudGVybWluYWxzX1tJdF0rIiciKTtidC5zaG93UG9zaXRpb24/Wj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh6KzEpK2A6CmArYnQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtFdC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1hdfHxYKSsiJyI6Wj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh6KzEpKyI6IFVuZXhwZWN0ZWQgIisoWD09c3Q/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bWF18fFgpKyInIiksdGhpcy5wYXJzZUVycm9yKFose3RleHQ6YnQubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1hdfHxYLGxpbmU6YnQueXlsaW5lbm8sbG9jOmZ0LGV4cGVjdGVkOkV0fSl9aWYoVVswXWluc3RhbmNlb2YgQXJyYXkmJlUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitwdCsiLCB0b2tlbjogIitYKTtzd2l0Y2goVVswXSl7Y2FzZSAxOl8ucHVzaChYKSxJLnB1c2goYnQueXl0ZXh0KSxCLnB1c2goYnQueXlsbG9jKSxfLnB1c2goVVsxXSksWD1udWxsLFc9YnQueXlsZW5nLFI9YnQueXl0ZXh0LHo9YnQueXlsaW5lbm8sZnQ9YnQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihPdD10aGlzLnByb2R1Y3Rpb25zX1tVWzFdXVsxXSxudC4kPUlbSS5sZW5ndGgtT3RdLG50Ll8kPXtmaXJzdF9saW5lOkJbQi5sZW5ndGgtKE90fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6QltCLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkJbQi5sZW5ndGgtKE90fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkJbQi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHV0JiYobnQuXyQucmFuZ2U9W0JbQi5sZW5ndGgtKE90fHwxKV0ucmFuZ2VbMF0sQltCLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFR0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShudCxbUixXLHosbXQueXksVVsxXSxJLEJdLmNvbmNhdChhdCkpLHR5cGVvZiBUdDwidSIpcmV0dXJuIFR0O090JiYoXz1fLnNsaWNlKDAsLTEqT3QqMiksST1JLnNsaWNlKDAsLTEqT3QpLEI9Qi5zbGljZSgwLC0xKk90KSksXy5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1VbMV1dWzBdKSxJLnB1c2gobnQuJCksQi5wdXNoKG50Ll8kKSxCdD1OW19bXy5sZW5ndGgtMl1dW19bXy5sZW5ndGgtMV1dLF8ucHVzaChCdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LHA9ZnVuY3Rpb24oKXt2YXIgbT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihFLF8pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRSxfKTtlbHNlIHRocm93IG5ldyBFcnJvcihFKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oYixFKXtyZXR1cm4gdGhpcy55eT1FfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1iLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1iLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1iLHRoaXMubWF0Y2hlZCs9Yjt2YXIgRT1iLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksYn0sdW5wdXQ6ZnVuY3Rpb24oYil7dmFyIEU9Yi5sZW5ndGgsXz1iLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Yit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRSksdGhpcy5vZmZzZXQtPUU7dmFyIEE9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksXy5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPV8ubGVuZ3RoLTEpO3ZhciBJPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpfPyhfLmxlbmd0aD09PUEubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStBW0EubGVuZ3RoLV8ubGVuZ3RoXS5sZW5ndGgtX1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bSVswXSxJWzBdK3RoaXMueXlsZW5nLUVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihiKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoYikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGIubGVuZ3RoPjIwPyIuLi4iOiIiKStiLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5tYXRjaDtyZXR1cm4gYi5sZW5ndGg8MjAmJihiKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1iLmxlbmd0aCkpLChiLnN1YnN0cigwLDIwKSsoYi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wYXN0SW5wdXQoKSxFPW5ldyBBcnJheShiLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGIrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKGIsRSl7dmFyIF8sQSxJO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihJPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQT1iWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxBJiYodGhpcy55eWxpbmVubys9QS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpBP0FbQS5sZW5ndGgtMV0ubGVuZ3RoLUFbQS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitiWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWJbMF0sdGhpcy5tYXRjaCs9YlswXSx0aGlzLm1hdGNoZXM9Yix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShiWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1iWzBdLF89dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsRSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxfKXJldHVybiBfO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBCIGluIEkpdGhpc1tCXT1JW0JdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGIsRSxfLEE7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgST10aGlzLl9jdXJyZW50UnVsZXMoKSxCPTA7QjxJLmxlbmd0aDtCKyspaWYoXz10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0lbQl1dKSxfJiYoIUV8fF9bMF0ubGVuZ3RoPkVbMF0ubGVuZ3RoKSl7aWYoRT1fLEE9Qix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihiPXRoaXMudGVzdF9tYXRjaChfLElbQl0pLGIhPT0hMSlyZXR1cm4gYjtpZih0aGlzLl9iYWNrdHJhY2spe0U9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gRT8oYj10aGlzLnRlc3RfbWF0Y2goRSxJW0FdKSxiIT09ITE/YjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5uZXh0KCk7cmV0dXJuIEV8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKEUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChFKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgRT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBFPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oRSl7cmV0dXJuIEU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhFfHwwKSxFPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbRV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oRSl7dGhpcy5iZWdpbihFKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihFLF8sQSxJKXtzd2l0Y2goQSl7Y2FzZSAwOnJldHVybiA0O2Nhc2UgMTpyZXR1cm4gOTtjYXNlIDI6cmV0dXJuInNwYWNlIjtjYXNlIDM6cmV0dXJuIDEwO2Nhc2UgNDpyZXR1cm4gNjtjYXNlIDU6cmV0dXJuIlRYVCJ9fSxydWxlczpbL14oPzppbmZvXGIpL2ksL14oPzpbXHNcblxyXSspL2ksL14oPzpbXHNdKykvaSwvXig/OnNob3dJbmZvXGIpL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7SU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIG19KCk7Zi5sZXhlcj1wO2Z1bmN0aW9uIHcoKXt0aGlzLnl5PXt9fXJldHVybiB3LnByb3RvdHlwZT1mLGYuUGFyc2VyPXcsbmV3IHd9KCk7bmd0LnBhcnNlcj1uZ3Q7Y29uc3QgWHFlPW5ndCxzUnQ9e2luZm86ITF9O2xldCByZ3Q9c1J0LmluZm87Y29uc3QgUXFlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6WHFlLGRiOntjbGVhcjooKT0+e3JndD1zUnQuaW5mb30sc2V0SW5mbzppPT57cmd0PWl9LGdldEluZm86KCk9PnJndH0scmVuZGVyZXI6e2RyYXc6KGksYSxmKT0+e1V0LmRlYnVnKGByZW5kZXJpbmcgaW5mbyBkaWFncmFtCmAraSk7Y29uc3QgcD1WVyhhKTtrMChwLDEwMCw0MDAsITApLHAuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwzMikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChgdiR7Zn1gKX19fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgaWd0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oYnQsbXQseXQsZnQpe2Zvcih5dD15dHx8e30sZnQ9YnQubGVuZ3RoO2Z0LS07eXRbYnRbZnRdXT1tdCk7cmV0dXJuIHl0fSxhPVsxLDNdLGY9WzEsNF0scD1bMSw1XSx3PVsxLDZdLG09WzEsMTAsMTIsMTQsMTYsMTgsMTksMjAsMjEsMjJdLGI9WzIsNF0sRT1bMSw1LDEwLDEyLDE0LDE2LDE4LDE5LDIwLDIxLDIyXSxfPVsyMCwyMSwyMl0sQT1bMiw3XSxJPVsxLDEyXSxCPVsxLDEzXSxOPVsxLDE0XSxSPVsxLDE1XSx6PVsxLDE2XSxXPVsxLDE3XSxldD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZW9sOjQsUElFOjUsZG9jdW1lbnQ6NixzaG93RGF0YTo3LGxpbmU6OCxzdGF0ZW1lbnQ6OSx0eHQ6MTAsdmFsdWU6MTEsdGl0bGU6MTIsdGl0bGVfdmFsdWU6MTMsYWNjX3RpdGxlOjE0LGFjY190aXRsZV92YWx1ZToxNSxhY2NfZGVzY3I6MTYsYWNjX2Rlc2NyX3ZhbHVlOjE3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTgsc2VjdGlvbjoxOSxORVdMSU5FOjIwLCI7IjoyMSxFT0Y6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6IlBJRSIsNzoic2hvd0RhdGEiLDEwOiJ0eHQiLDExOiJ2YWx1ZSIsMTI6InRpdGxlIiwxMzoidGl0bGVfdmFsdWUiLDE0OiJhY2NfdGl0bGUiLDE1OiJhY2NfdGl0bGVfdmFsdWUiLDE2OiJhY2NfZGVzY3IiLDE3OiJhY2NfZGVzY3JfdmFsdWUiLDE4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxOToic2VjdGlvbiIsMjA6Ik5FV0xJTkUiLDIxOiI7IiwyMjoiRU9GIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDNdLFs2LDBdLFs2LDJdLFs4LDJdLFs5LDBdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs0LDFdLFs0LDFdLFs0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKG10LHl0LGZ0LHV0LHZ0LFgscHQpe3ZhciBVPVgubGVuZ3RoLTE7c3dpdGNoKHZ0KXtjYXNlIDM6dXQuc2V0U2hvd0RhdGEoITApO2JyZWFrO2Nhc2UgNjp0aGlzLiQ9WFtVLTFdO2JyZWFrO2Nhc2UgODp1dC5hZGRTZWN0aW9uKFhbVS0xXSx1dC5jbGVhbnVwVmFsdWUoWFtVXSkpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9WFtVXS50cmltKCksdXQuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9WFtVXS50cmltKCksdXQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDExOmNhc2UgMTI6dGhpcy4kPVhbVV0udHJpbSgpLHV0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMzp1dC5hZGRTZWN0aW9uKFhbVV0uc3Vic3RyKDgpKSx0aGlzLiQ9WFtVXS5zdWJzdHIoOCk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTphLDIwOmYsMjE6cCwyMjp3fSx7MTpbM119LHszOjcsNDoyLDU6YSwyMDpmLDIxOnAsMjI6d30saShtLGIsezY6OCw3OlsxLDldfSksaShFLFsyLDE0XSksaShFLFsyLDE1XSksaShFLFsyLDE2XSksezE6WzIsMV19LGkoXyxBLHs4OjEwLDk6MTEsMTpbMiwyXSwxMDpJLDEyOkIsMTQ6TiwxNjpSLDE4OnosMTk6V30pLGkobSxiLHs2OjE4fSksaShtLFsyLDVdKSx7NDoxOSwyMDpmLDIxOnAsMjI6d30sezExOlsxLDIwXX0sezEzOlsxLDIxXX0sezE1OlsxLDIyXX0sezE3OlsxLDIzXX0saShfLFsyLDEyXSksaShfLFsyLDEzXSksaShfLEEsezg6MTAsOToxMSwxOlsyLDNdLDEwOkksMTI6QiwxNDpOLDE2OlIsMTg6eiwxOTpXfSksaShtLFsyLDZdKSxpKF8sWzIsOF0pLGkoXyxbMiw5XSksaShfLFsyLDEwXSksaShfLFsyLDExXSldLGRlZmF1bHRBY3Rpb25zOns3OlsyLDFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKG10LHl0KXtpZih5dC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKG10KTtlbHNle3ZhciBmdD1uZXcgRXJyb3IobXQpO3Rocm93IGZ0Lmhhc2g9eXQsZnR9fSxwYXJzZTpmdW5jdGlvbihtdCl7dmFyIHl0PXRoaXMsZnQ9WzBdLHV0PVtdLHZ0PVtudWxsXSxYPVtdLHB0PXRoaXMudGFibGUsVT0iIixUdD0wLG50PTAsSXQ9MixPdD0xLEJ0PVguc2xpY2UuY2FsbChhcmd1bWVudHMsMSksRXQ9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxaPXt5eTp7fX07Zm9yKHZhciBDdCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LEN0KSYmKFoueXlbQ3RdPXRoaXMueXlbQ3RdKTtFdC5zZXRJbnB1dChtdCxaLnl5KSxaLnl5LmxleGVyPUV0LFoueXkucGFyc2VyPXRoaXMsdHlwZW9mIEV0Lnl5bGxvYz4idSImJihFdC55eWxsb2M9e30pO3ZhciB4dD1FdC55eWxsb2M7WC5wdXNoKHh0KTt2YXIgSHQ9RXQub3B0aW9ucyYmRXQub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFoueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Wi55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBMZSgpe3ZhciBzZTtyZXR1cm4gc2U9dXQucG9wKCl8fEV0LmxleCgpfHxPdCx0eXBlb2Ygc2UhPSJudW1iZXIiJiYoc2UgaW5zdGFuY2VvZiBBcnJheSYmKHV0PXNlLHNlPXV0LnBvcCgpKSxzZT15dC5zeW1ib2xzX1tzZV18fHNlKSxzZX1mb3IodmFyIEZ0LGduLFNlLG1lLFZlPXt9LFllLGNlLGtlLHp0Ozspe2lmKGduPWZ0W2Z0Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2duXT9TZT10aGlzLmRlZmF1bHRBY3Rpb25zW2duXTooKEZ0PT09bnVsbHx8dHlwZW9mIEZ0PiJ1IikmJihGdD1MZSgpKSxTZT1wdFtnbl0mJnB0W2duXVtGdF0pLHR5cGVvZiBTZT4idSJ8fCFTZS5sZW5ndGh8fCFTZVswXSl7dmFyIHJlPSIiO3p0PVtdO2ZvcihZZSBpbiBwdFtnbl0pdGhpcy50ZXJtaW5hbHNfW1llXSYmWWU+SXQmJnp0LnB1c2goIiciK3RoaXMudGVybWluYWxzX1tZZV0rIiciKTtFdC5zaG93UG9zaXRpb24/cmU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoVHQrMSkrYDoKYCtFdC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3p0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bRnRdfHxGdCkrIiciOnJlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFR0KzEpKyI6IFVuZXhwZWN0ZWQgIisoRnQ9PU90PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0Z0XXx8RnQpKyInIiksdGhpcy5wYXJzZUVycm9yKHJlLHt0ZXh0OkV0Lm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tGdF18fEZ0LGxpbmU6RXQueXlsaW5lbm8sbG9jOnh0LGV4cGVjdGVkOnp0fSl9aWYoU2VbMF1pbnN0YW5jZW9mIEFycmF5JiZTZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2duKyIsIHRva2VuOiAiK0Z0KTtzd2l0Y2goU2VbMF0pe2Nhc2UgMTpmdC5wdXNoKEZ0KSx2dC5wdXNoKEV0Lnl5dGV4dCksWC5wdXNoKEV0Lnl5bGxvYyksZnQucHVzaChTZVsxXSksRnQ9bnVsbCxudD1FdC55eWxlbmcsVT1FdC55eXRleHQsVHQ9RXQueXlsaW5lbm8seHQ9RXQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihjZT10aGlzLnByb2R1Y3Rpb25zX1tTZVsxXV1bMV0sVmUuJD12dFt2dC5sZW5ndGgtY2VdLFZlLl8kPXtmaXJzdF9saW5lOlhbWC5sZW5ndGgtKGNlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6WFtYLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlhbWC5sZW5ndGgtKGNlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlhbWC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEh0JiYoVmUuXyQucmFuZ2U9W1hbWC5sZW5ndGgtKGNlfHwxKV0ucmFuZ2VbMF0sWFtYLmxlbmd0aC0xXS5yYW5nZVsxXV0pLG1lPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShWZSxbVSxudCxUdCxaLnl5LFNlWzFdLHZ0LFhdLmNvbmNhdChCdCkpLHR5cGVvZiBtZTwidSIpcmV0dXJuIG1lO2NlJiYoZnQ9ZnQuc2xpY2UoMCwtMSpjZSoyKSx2dD12dC5zbGljZSgwLC0xKmNlKSxYPVguc2xpY2UoMCwtMSpjZSkpLGZ0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bU2VbMV1dWzBdKSx2dC5wdXNoKFZlLiQpLFgucHVzaChWZS5fJCksa2U9cHRbZnRbZnQubGVuZ3RoLTJdXVtmdFtmdC5sZW5ndGgtMV1dLGZ0LnB1c2goa2UpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxzdD1mdW5jdGlvbigpe3ZhciBidD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih5dCxmdCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih5dCxmdCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoeXQpfSxzZXRJbnB1dDpmdW5jdGlvbihtdCx5dCl7cmV0dXJuIHRoaXMueXk9eXR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PW10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBtdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9bXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPW10LHRoaXMubWF0Y2hlZCs9bXQ7dmFyIHl0PW10Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4geXQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLG10fSx1bnB1dDpmdW5jdGlvbihtdCl7dmFyIHl0PW10Lmxlbmd0aCxmdD1tdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PW10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC15dCksdGhpcy5vZmZzZXQtPXl0O3ZhciB1dD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxmdC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWZ0Lmxlbmd0aC0xKTt2YXIgdnQ9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmZ0PyhmdC5sZW5ndGg9PT11dC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3V0W3V0Lmxlbmd0aC1mdC5sZW5ndGhdLmxlbmd0aC1mdFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXl0fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3Z0WzBdLHZ0WzBdK3RoaXMueXlsZW5nLXl0XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24obXQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShtdCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgbXQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihtdC5sZW5ndGg+MjA/Ii4uLiI6IiIpK210LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIG10PXRoaXMubWF0Y2g7cmV0dXJuIG10Lmxlbmd0aDwyMCYmKG10Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1tdC5sZW5ndGgpKSwobXQuc3Vic3RyKDAsMjApKyhtdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIG10PXRoaXMucGFzdElucHV0KCkseXQ9bmV3IEFycmF5KG10Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIG10K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCt5dCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24obXQseXQpe3ZhciBmdCx1dCx2dDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYodnQ9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodnQueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksdXQ9bXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHV0JiYodGhpcy55eWxpbmVubys9dXQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46dXQ/dXRbdXQubGVuZ3RoLTFdLmxlbmd0aC11dFt1dC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbittdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1tdFswXSx0aGlzLm1hdGNoKz1tdFswXSx0aGlzLm1hdGNoZXM9bXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UobXRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPW10WzBdLGZ0PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHl0LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGZ0KXJldHVybiBmdDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgWCBpbiB2dCl0aGlzW1hdPXZ0W1hdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIG10LHl0LGZ0LHV0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHZ0PXRoaXMuX2N1cnJlbnRSdWxlcygpLFg9MDtYPHZ0Lmxlbmd0aDtYKyspaWYoZnQ9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t2dFtYXV0pLGZ0JiYoIXl0fHxmdFswXS5sZW5ndGg+eXRbMF0ubGVuZ3RoKSl7aWYoeXQ9ZnQsdXQ9WCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihtdD10aGlzLnRlc3RfbWF0Y2goZnQsdnRbWF0pLG10IT09ITEpcmV0dXJuIG10O2lmKHRoaXMuX2JhY2t0cmFjayl7eXQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4geXQ/KG10PXRoaXMudGVzdF9tYXRjaCh5dCx2dFt1dF0pLG10IT09ITE/bXQ6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB5dD10aGlzLm5leHQoKTtyZXR1cm4geXR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHl0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goeXQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciB5dD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiB5dD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHl0KXtyZXR1cm4geXQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh5dHx8MCkseXQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1t5dF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oeXQpe3RoaXMuYmVnaW4oeXQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHl0LGZ0LHV0LHZ0KXtzd2l0Y2godXQpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiAyMDtjYXNlIDM6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMjtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTQ7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNjtjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxMTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE2OnJldHVybiJ0eHQiO2Nhc2UgMTc6cmV0dXJuIDU7Y2FzZSAxODpyZXR1cm4gNztjYXNlIDE5OnJldHVybiJ2YWx1ZSI7Y2FzZSAyMDpyZXR1cm4gMjJ9fSxydWxlczpbL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5ccl0rKS9pLC9eKD86JSVbXlxuXSopL2ksL14oPzpbXHNdKykvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86cGllXGIpL2ksL14oPzpzaG93RGF0YVxiKS9pLC9eKD86Oltcc10qW1xkXSsoPzpcLltcZF0rKT8pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSx0aXRsZTp7cnVsZXM6WzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMTUsMTZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDcsOSwxMSwxNCwxNywxOCwxOSwyMF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBidH0oKTtldC5sZXhlcj1zdDtmdW5jdGlvbiBhdCgpe3RoaXMueXk9e319cmV0dXJuIGF0LnByb3RvdHlwZT1ldCxldC5QYXJzZXI9YXQsbmV3IGF0fSgpO2lndC5wYXJzZXI9aWd0O2NvbnN0IFpxZT1pZ3QsYVJ0PVpoLnBpZSxGWT17c2VjdGlvbnM6e30sc2hvd0RhdGE6ITEsY29uZmlnOmFSdH07bGV0IE5ZPUZZLnNlY3Rpb25zLHNndD1GWS5zaG93RGF0YTtjb25zdCBKcWU9c3RydWN0dXJlZENsb25lKGFSdCksdEhlPXtnZXRDb25maWc6KCk9PnN0cnVjdHVyZWRDbG9uZShKcWUpLGNsZWFyOigpPT57Tlk9c3RydWN0dXJlZENsb25lKEZZLnNlY3Rpb25zKSxzZ3Q9Rlkuc2hvd0RhdGEsaGcoKX0sc2V0RGlhZ3JhbVRpdGxlOk5iLGdldERpYWdyYW1UaXRsZTpwZyxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxhZGRTZWN0aW9uOihpLGEpPT57aT1RMShpLE9lKCkpLE5ZW2ldPT09dm9pZCAwJiYoTllbaV09YSxVdC5kZWJ1ZyhgYWRkZWQgbmV3IHNlY3Rpb246ICR7aX0sIHdpdGggdmFsdWU6ICR7YX1gKSl9LGdldFNlY3Rpb25zOigpPT5OWSxjbGVhbnVwVmFsdWU6aT0+KGkuc3Vic3RyaW5nKDAsMSk9PT0iOiImJihpPWkuc3Vic3RyaW5nKDEpLnRyaW0oKSksTnVtYmVyKGkudHJpbSgpKSksc2V0U2hvd0RhdGE6aT0+e3NndD1pfSxnZXRTaG93RGF0YTooKT0+c2d0fSxlSGU9aT0+YAogIC5waWVDaXJjbGV7CiAgICBzdHJva2U6ICR7aS5waWVTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGggOiAke2kucGllU3Ryb2tlV2lkdGh9OwogICAgb3BhY2l0eSA6ICR7aS5waWVPcGFjaXR5fTsKICB9CiAgLnBpZU91dGVyQ2lyY2xlewogICAgc3Ryb2tlOiAke2kucGllT3V0ZXJTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7aS5waWVPdXRlclN0cm9rZVdpZHRofTsKICAgIGZpbGw6IG5vbmU7CiAgfQogIC5waWVUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogJHtpLnBpZVRpdGxlVGV4dFNpemV9OwogICAgZmlsbDogJHtpLnBpZVRpdGxlVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgfQogIC5zbGljZSB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZmlsbDogJHtpLnBpZVNlY3Rpb25UZXh0Q29sb3J9OwogICAgZm9udC1zaXplOiR7aS5waWVTZWN0aW9uVGV4dFNpemV9OwogICAgLy8gZmlsbDogd2hpdGU7CiAgfQogIC5sZWdlbmQgdGV4dCB7CiAgICBmaWxsOiAke2kucGllTGVnZW5kVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7aS5waWVMZWdlbmRUZXh0U2l6ZX07CiAgfQpgLG5IZT1pPT57Y29uc3QgYT1PYmplY3QuZW50cmllcyhpKS5tYXAocD0+KHtsYWJlbDpwWzBdLHZhbHVlOnBbMV19KSkuc29ydCgocCx3KT0+dy52YWx1ZS1wLnZhbHVlKTtyZXR1cm4gdVRlKCkudmFsdWUocD0+cC52YWx1ZSkoYSl9LHJIZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOlpxZSxkYjp0SGUscmVuZGVyZXI6e2RyYXc6KGksYSxmLHApPT57dmFyIHB0LFU7VXQuZGVidWcoYHJlbmRlcmluZyBwaWUgY2hhcnQKYCtpKTtjb25zdCB3PXAuZGIsbT1PZSgpLGI9ckYody5nZXRDb25maWcoKSxtLnBpZSksRT00NTAsXz0oKFU9KHB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKT09bnVsbD92b2lkIDA6cHQucGFyZW50RWxlbWVudCk9PW51bGw/dm9pZCAwOlUub2Zmc2V0V2lkdGgpPz9iLnVzZVdpZHRoLEE9VlcoYSk7QS5hdHRyKCJ2aWV3Qm94IixgMCAwICR7X30gJHtFfWApLGswKEEsRSxfLGIudXNlTWF4V2lkdGgpO2NvbnN0IEk9NDAsQj0xOCxOPTQsUj1BLmFwcGVuZCgiZyIpO1IuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXy8yKyIsIitFLzIrIikiKTtjb25zdHt0aGVtZVZhcmlhYmxlczp6fT1tO2xldFtXXT1WQSh6LnBpZU91dGVyU3Ryb2tlV2lkdGgpO1c/PyhXPTIpO2NvbnN0IGV0PWIudGV4dFBvc2l0aW9uLHN0PU1hdGgubWluKF8sRSkvMi1JLGF0PU9BKCkuaW5uZXJSYWRpdXMoMCkub3V0ZXJSYWRpdXMoc3QpLGJ0PU9BKCkuaW5uZXJSYWRpdXMoc3QqZXQpLm91dGVyUmFkaXVzKHN0KmV0KTtSLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLDApLmF0dHIoImN5IiwwKS5hdHRyKCJyIixzdCtXLzIpLmF0dHIoImNsYXNzIiwicGllT3V0ZXJDaXJjbGUiKTtjb25zdCBtdD13LmdldFNlY3Rpb25zKCkseXQ9bkhlKG10KSxmdD1bei5waWUxLHoucGllMix6LnBpZTMsei5waWU0LHoucGllNSx6LnBpZTYsei5waWU3LHoucGllOCx6LnBpZTksei5waWUxMCx6LnBpZTExLHoucGllMTJdLHV0PVhVKGZ0KTtSLnNlbGVjdEFsbCgibXlTbGljZXMiKS5kYXRhKHl0KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGF0KS5hdHRyKCJmaWxsIixUdD0+dXQoVHQuZGF0YS5sYWJlbCkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIik7bGV0IHZ0PTA7T2JqZWN0LmtleXMobXQpLmZvckVhY2goVHQ9Pnt2dCs9bXRbVHRdfSksUi5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YSh5dCkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS50ZXh0KFR0PT4oVHQuZGF0YS52YWx1ZS92dCoxMDApLnRvRml4ZWQoMCkrIiUiKS5hdHRyKCJ0cmFuc2Zvcm0iLFR0PT4idHJhbnNsYXRlKCIrYnQuY2VudHJvaWQoVHQpKyIpIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzbGljZSIpLFIuYXBwZW5kKCJ0ZXh0IikudGV4dCh3LmdldERpYWdyYW1UaXRsZSgpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtKEUtNTApLzIpLmF0dHIoImNsYXNzIiwicGllVGl0bGVUZXh0Iik7Y29uc3QgWD1SLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLmRhdGEodXQuZG9tYWluKCkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsZWdlbmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLChUdCxudCk9Pntjb25zdCBJdD1CK04sT3Q9SXQqdXQuZG9tYWluKCkubGVuZ3RoLzIsQnQ9MTIqQixFdD1udCpJdC1PdDtyZXR1cm4idHJhbnNsYXRlKCIrQnQrIiwiK0V0KyIpIn0pO1guYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLEIpLmF0dHIoImhlaWdodCIsQikuc3R5bGUoImZpbGwiLHV0KS5zdHlsZSgic3Ryb2tlIix1dCksWC5kYXRhKHl0KS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixCK04pLmF0dHIoInkiLEItTikudGV4dChUdD0+e2NvbnN0e2xhYmVsOm50LHZhbHVlOkl0fT1UdC5kYXRhO3JldHVybiB3LmdldFNob3dEYXRhKCk/YCR7bnR9IFske0l0fV1gOm50fSl9fSxzdHlsZXM6ZUhlfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgYWd0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oU2UsbWUsVmUsWWUpe2ZvcihWZT1WZXx8e30sWWU9U2UubGVuZ3RoO1llLS07VmVbU2VbWWVdXT1tZSk7cmV0dXJuIFZlfSxhPVsxLDNdLGY9WzEsNF0scD1bMSw1XSx3PVsxLDZdLG09WzEsN10sYj1bMSw1LDEzLDE1LDE3LDE5LDIwLDI1LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM3LDM4LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwXSxFPVsxLDUsNiwxMywxNSwxNywxOSwyMCwyNSwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNywzOCw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0sXz1bMzIsMzMsMzRdLEE9WzIsN10sST1bMSwxM10sQj1bMSwxN10sTj1bMSwxOF0sUj1bMSwxOV0sej1bMSwyMF0sVz1bMSwyMV0sZXQ9WzEsMjJdLHN0PVsxLDIzXSxhdD1bMSwyNF0sYnQ9WzEsMjVdLG10PVsxLDI2XSx5dD1bMSwyN10sZnQ9WzEsMzBdLHV0PVsxLDMxXSx2dD1bMSwzMl0sWD1bMSwzM10scHQ9WzEsMzRdLFU9WzEsMzVdLFR0PVsxLDM2XSxudD1bMSwzN10sSXQ9WzEsMzhdLE90PVsxLDM5XSxCdD1bMSw0MF0sRXQ9WzEsNDFdLFo9WzEsNDJdLEN0PVsxLDU3XSx4dD1bMSw1OF0sSHQ9WzUsMjIsMjYsMzIsMzMsMzQsNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTFdLExlPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxTUEFDRTo1LFFVQURSQU5UOjYsZG9jdW1lbnQ6NyxsaW5lOjgsc3RhdGVtZW50OjksYXhpc0RldGFpbHM6MTAscXVhZHJhbnREZXRhaWxzOjExLHBvaW50czoxMix0aXRsZToxMyx0aXRsZV92YWx1ZToxNCxhY2NfdGl0bGU6MTUsYWNjX3RpdGxlX3ZhbHVlOjE2LGFjY19kZXNjcjoxNyxhY2NfZGVzY3JfdmFsdWU6MTgsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxOSxzZWN0aW9uOjIwLHRleHQ6MjEscG9pbnRfc3RhcnQ6MjIscG9pbnRfeDoyMyxwb2ludF95OjI0LCJYLUFYSVMiOjI1LCJBWElTLVRFWFQtREVMSU1JVEVSIjoyNiwiWS1BWElTIjoyNyxRVUFEUkFOVF8xOjI4LFFVQURSQU5UXzI6MjksUVVBRFJBTlRfMzozMCxRVUFEUkFOVF80OjMxLE5FV0xJTkU6MzIsU0VNSTozMyxFT0Y6MzQsYWxwaGFOdW1Ub2tlbjozNSx0ZXh0Tm9UYWdzVG9rZW46MzYsU1RSOjM3LE1EX1NUUjozOCxhbHBoYU51bTozOSxQVU5DVFVBVElPTjo0MCxBTVA6NDEsTlVNOjQyLEFMUEhBOjQzLENPTU1BOjQ0LFBMVVM6NDUsRVFVQUxTOjQ2LE1VTFQ6NDcsRE9UOjQ4LEJSS1Q6NDksVU5ERVJTQ09SRTo1MCxNSU5VUzo1MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiU1BBQ0UiLDY6IlFVQURSQU5UIiwxMzoidGl0bGUiLDE0OiJ0aXRsZV92YWx1ZSIsMTU6ImFjY190aXRsZSIsMTY6ImFjY190aXRsZV92YWx1ZSIsMTc6ImFjY19kZXNjciIsMTg6ImFjY19kZXNjcl92YWx1ZSIsMTk6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDIwOiJzZWN0aW9uIiwyMjoicG9pbnRfc3RhcnQiLDIzOiJwb2ludF94IiwyNDoicG9pbnRfeSIsMjU6IlgtQVhJUyIsMjY6IkFYSVMtVEVYVC1ERUxJTUlURVIiLDI3OiJZLUFYSVMiLDI4OiJRVUFEUkFOVF8xIiwyOToiUVVBRFJBTlRfMiIsMzA6IlFVQURSQU5UXzMiLDMxOiJRVUFEUkFOVF80IiwzMjoiTkVXTElORSIsMzM6IlNFTUkiLDM0OiJFT0YiLDM3OiJTVFIiLDM4OiJNRF9TVFIiLDQwOiJQVU5DVFVBVElPTiIsNDE6IkFNUCIsNDI6Ik5VTSIsNDM6IkFMUEhBIiw0NDoiQ09NTUEiLDQ1OiJQTFVTIiw0NjoiRVFVQUxTIiw0NzoiTVVMVCIsNDg6IkRPVCIsNDk6IkJSS1QiLDUwOiJVTkRFUlNDT1JFIiw1MToiTUlOVVMifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzcsMF0sWzcsMl0sWzgsMl0sWzksMF0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzEyLDRdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMSwyXSxbMTEsMl0sWzExLDJdLFsxMSwyXSxbNCwxXSxbNCwxXSxbNCwxXSxbMjEsMV0sWzIxLDJdLFsyMSwxXSxbMjEsMV0sWzM5LDFdLFszOSwyXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNiwxXSxbMzYsMV0sWzM2LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKG1lLFZlLFllLGNlLGtlLHp0LHJlKXt2YXIgc2U9enQubGVuZ3RoLTE7c3dpdGNoKGtlKXtjYXNlIDEyOnRoaXMuJD16dFtzZV0udHJpbSgpLGNlLnNldERpYWdyYW1UaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTM6dGhpcy4kPXp0W3NlXS50cmltKCksY2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE0OmNhc2UgMTU6dGhpcy4kPXp0W3NlXS50cmltKCksY2Uuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE2OmNlLmFkZFNlY3Rpb24oenRbc2VdLnN1YnN0cig4KSksdGhpcy4kPXp0W3NlXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxNzpjZS5hZGRQb2ludCh6dFtzZS0zXSx6dFtzZS0xXSx6dFtzZV0pO2JyZWFrO2Nhc2UgMTg6Y2Uuc2V0WEF4aXNMZWZ0VGV4dCh6dFtzZS0yXSksY2Uuc2V0WEF4aXNSaWdodFRleHQoenRbc2VdKTticmVhaztjYXNlIDE5Onp0W3NlLTFdLnRleHQrPSIg4p+2ICIsY2Uuc2V0WEF4aXNMZWZ0VGV4dCh6dFtzZS0xXSk7YnJlYWs7Y2FzZSAyMDpjZS5zZXRYQXhpc0xlZnRUZXh0KHp0W3NlXSk7YnJlYWs7Y2FzZSAyMTpjZS5zZXRZQXhpc0JvdHRvbVRleHQoenRbc2UtMl0pLGNlLnNldFlBeGlzVG9wVGV4dCh6dFtzZV0pO2JyZWFrO2Nhc2UgMjI6enRbc2UtMV0udGV4dCs9IiDin7YgIixjZS5zZXRZQXhpc0JvdHRvbVRleHQoenRbc2UtMV0pO2JyZWFrO2Nhc2UgMjM6Y2Uuc2V0WUF4aXNCb3R0b21UZXh0KHp0W3NlXSk7YnJlYWs7Y2FzZSAyNDpjZS5zZXRRdWFkcmFudDFUZXh0KHp0W3NlXSk7YnJlYWs7Y2FzZSAyNTpjZS5zZXRRdWFkcmFudDJUZXh0KHp0W3NlXSk7YnJlYWs7Y2FzZSAyNjpjZS5zZXRRdWFkcmFudDNUZXh0KHp0W3NlXSk7YnJlYWs7Y2FzZSAyNzpjZS5zZXRRdWFkcmFudDRUZXh0KHp0W3NlXSk7YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9e3RleHQ6enRbc2VdLHR5cGU6InRleHQifTticmVhaztjYXNlIDMyOnRoaXMuJD17dGV4dDp6dFtzZS0xXS50ZXh0KyIiK3p0W3NlXSx0eXBlOnp0W3NlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXt0ZXh0Onp0W3NlXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9e3RleHQ6enRbc2VdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9enRbc2VdO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPXp0W3NlLTFdKyIiK3p0W3NlXTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OmEsNjpmLDMyOnAsMzM6dywzNDptfSx7MTpbM119LHszOjgsNDoyLDU6YSw2OmYsMzI6cCwzMzp3LDM0Om19LHszOjksNDoyLDU6YSw2OmYsMzI6cCwzMzp3LDM0Om19LGkoYixbMiw0XSx7NzoxMH0pLGkoRSxbMiwyOF0pLGkoRSxbMiwyOV0pLGkoRSxbMiwzMF0pLHsxOlsyLDFdfSx7MTpbMiwyXX0saShfLEEsezg6MTEsOToxMiwxMDoxNCwxMToxNSwxMjoxNiwyMToyOCwzNToyOSwxOlsyLDNdLDU6SSwxMzpCLDE1Ok4sMTc6UiwxOTp6LDIwOlcsMjU6ZXQsMjc6c3QsMjg6YXQsMjk6YnQsMzA6bXQsMzE6eXQsMzc6ZnQsMzg6dXQsNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlp9KSxpKGIsWzIsNV0pLHs0OjQzLDMyOnAsMzM6dywzNDptfSxpKF8sQSx7MTA6MTQsMTE6MTUsMTI6MTYsMjE6MjgsMzU6MjksOTo0NCw1OkksMTM6QiwxNTpOLDE3OlIsMTk6eiwyMDpXLDI1OmV0LDI3OnN0LDI4OmF0LDI5OmJ0LDMwOm10LDMxOnl0LDM3OmZ0LDM4OnV0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpafSksaShfLFsyLDldKSxpKF8sWzIsMTBdKSxpKF8sWzIsMTFdKSx7MTQ6WzEsNDVdfSx7MTY6WzEsNDZdfSx7MTg6WzEsNDddfSxpKF8sWzIsMTVdKSxpKF8sWzIsMTZdKSx7MjE6NDgsMzU6MjksMzc6ZnQsMzg6dXQsNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlp9LHsyMTo0OSwzNToyOSwzNzpmdCwzODp1dCw0MDp2dCw0MTpYLDQyOnB0LDQzOlUsNDQ6VHQsNDU6bnQsNDY6SXQsNDc6T3QsNDg6QnQsNDk6RXQsNTA6Wn0sezIxOjUwLDM1OjI5LDM3OmZ0LDM4OnV0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpafSx7MjE6NTEsMzU6MjksMzc6ZnQsMzg6dXQsNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlp9LHsyMTo1MiwzNToyOSwzNzpmdCwzODp1dCw0MDp2dCw0MTpYLDQyOnB0LDQzOlUsNDQ6VHQsNDU6bnQsNDY6SXQsNDc6T3QsNDg6QnQsNDk6RXQsNTA6Wn0sezIxOjUzLDM1OjI5LDM3OmZ0LDM4OnV0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpafSx7NTpDdCwyMjpbMSw1NF0sMzU6NTYsMzY6NTUsNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlosNTE6eHR9LGkoSHQsWzIsMzFdKSxpKEh0LFsyLDMzXSksaShIdCxbMiwzNF0pLGkoSHQsWzIsMzddKSxpKEh0LFsyLDM4XSksaShIdCxbMiwzOV0pLGkoSHQsWzIsNDBdKSxpKEh0LFsyLDQxXSksaShIdCxbMiw0Ml0pLGkoSHQsWzIsNDNdKSxpKEh0LFsyLDQ0XSksaShIdCxbMiw0NV0pLGkoSHQsWzIsNDZdKSxpKEh0LFsyLDQ3XSksaShiLFsyLDZdKSxpKF8sWzIsOF0pLGkoXyxbMiwxMl0pLGkoXyxbMiwxM10pLGkoXyxbMiwxNF0pLGkoXyxbMiwyMF0sezM2OjU1LDM1OjU2LDU6Q3QsMjY6WzEsNTldLDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpaLDUxOnh0fSksaShfLFsyLDIzXSx7MzY6NTUsMzU6NTYsNTpDdCwyNjpbMSw2MF0sNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlosNTE6eHR9KSxpKF8sWzIsMjRdLHszNjo1NSwzNTo1Niw1OkN0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpaLDUxOnh0fSksaShfLFsyLDI1XSx7MzY6NTUsMzU6NTYsNTpDdCw0MDp2dCw0MTpYLDQyOnB0LDQzOlUsNDQ6VHQsNDU6bnQsNDY6SXQsNDc6T3QsNDg6QnQsNDk6RXQsNTA6Wiw1MTp4dH0pLGkoXyxbMiwyNl0sezM2OjU1LDM1OjU2LDU6Q3QsNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlosNTE6eHR9KSxpKF8sWzIsMjddLHszNjo1NSwzNTo1Niw1OkN0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpaLDUxOnh0fSksezIzOlsxLDYxXX0saShIdCxbMiwzMl0pLGkoSHQsWzIsNDhdKSxpKEh0LFsyLDQ5XSksaShIdCxbMiw1MF0pLGkoXyxbMiwxOV0sezM1OjI5LDIxOjYyLDM3OmZ0LDM4OnV0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpafSksaShfLFsyLDIyXSx7MzU6MjksMjE6NjMsMzc6ZnQsMzg6dXQsNDA6dnQsNDE6WCw0MjpwdCw0MzpVLDQ0OlR0LDQ1Om50LDQ2Okl0LDQ3Ok90LDQ4OkJ0LDQ5OkV0LDUwOlp9KSx7MjQ6WzEsNjRdfSxpKF8sWzIsMThdLHszNjo1NSwzNTo1Niw1OkN0LDQwOnZ0LDQxOlgsNDI6cHQsNDM6VSw0NDpUdCw0NTpudCw0NjpJdCw0NzpPdCw0ODpCdCw0OTpFdCw1MDpaLDUxOnh0fSksaShfLFsyLDIxXSx7MzY6NTUsMzU6NTYsNTpDdCw0MDp2dCw0MTpYLDQyOnB0LDQzOlUsNDQ6VHQsNDU6bnQsNDY6SXQsNDc6T3QsNDg6QnQsNDk6RXQsNTA6Wiw1MTp4dH0pLGkoXyxbMiwxN10pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwxXSw5OlsyLDJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKG1lLFZlKXtpZihWZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKG1lKTtlbHNle3ZhciBZZT1uZXcgRXJyb3IobWUpO3Rocm93IFllLmhhc2g9VmUsWWV9fSxwYXJzZTpmdW5jdGlvbihtZSl7dmFyIFZlPXRoaXMsWWU9WzBdLGNlPVtdLGtlPVtudWxsXSx6dD1bXSxyZT10aGlzLnRhYmxlLHNlPSIiLFBlPTAsdGU9MCxNZT0yLGRlPTEsb249enQuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksbmk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxLcz17eXk6e319O2Zvcih2YXIgd3MgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx3cykmJihLcy55eVt3c109dGhpcy55eVt3c10pO25pLnNldElucHV0KG1lLEtzLnl5KSxLcy55eS5sZXhlcj1uaSxLcy55eS5wYXJzZXI9dGhpcyx0eXBlb2YgbmkueXlsbG9jPiJ1IiYmKG5pLnl5bGxvYz17fSk7dmFyIGZvPW5pLnl5bGxvYzt6dC5wdXNoKGZvKTt2YXIgWGk9bmkub3B0aW9ucyYmbmkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEtzLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPUtzLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEVyKCl7dmFyIEdzO3JldHVybiBHcz1jZS5wb3AoKXx8bmkubGV4KCl8fGRlLHR5cGVvZiBHcyE9Im51bWJlciImJihHcyBpbnN0YW5jZW9mIEFycmF5JiYoY2U9R3MsR3M9Y2UucG9wKCkpLEdzPVZlLnN5bWJvbHNfW0dzXXx8R3MpLEdzfWZvcih2YXIgWG4sZGksRWUsS24sSGU9e30sVGkscG4sRXMscWE7Oyl7aWYoZGk9WWVbWWUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbZGldP0VlPXRoaXMuZGVmYXVsdEFjdGlvbnNbZGldOigoWG49PT1udWxsfHx0eXBlb2YgWG4+InUiKSYmKFhuPUVyKCkpLEVlPXJlW2RpXSYmcmVbZGldW1huXSksdHlwZW9mIEVlPiJ1Inx8IUVlLmxlbmd0aHx8IUVlWzBdKXt2YXIgTWE9IiI7cWE9W107Zm9yKFRpIGluIHJlW2RpXSl0aGlzLnRlcm1pbmFsc19bVGldJiZUaT5NZSYmcWEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RpXSsiJyIpO25pLnNob3dQb3NpdGlvbj9NYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhQZSsxKStgOgpgK25pLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcWEuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tYbl18fFhuKSsiJyI6TWE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoUGUrMSkrIjogVW5leHBlY3RlZCAiKyhYbj09ZGU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bWG5dfHxYbikrIiciKSx0aGlzLnBhcnNlRXJyb3IoTWEse3RleHQ6bmkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1huXXx8WG4sbGluZTpuaS55eWxpbmVubyxsb2M6Zm8sZXhwZWN0ZWQ6cWF9KX1pZihFZVswXWluc3RhbmNlb2YgQXJyYXkmJkVlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrZGkrIiwgdG9rZW46ICIrWG4pO3N3aXRjaChFZVswXSl7Y2FzZSAxOlllLnB1c2goWG4pLGtlLnB1c2gobmkueXl0ZXh0KSx6dC5wdXNoKG5pLnl5bGxvYyksWWUucHVzaChFZVsxXSksWG49bnVsbCx0ZT1uaS55eWxlbmcsc2U9bmkueXl0ZXh0LFBlPW5pLnl5bGluZW5vLGZvPW5pLnl5bGxvYzticmVhaztjYXNlIDI6aWYocG49dGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzFdLEhlLiQ9a2Vba2UubGVuZ3RoLXBuXSxIZS5fJD17Zmlyc3RfbGluZTp6dFt6dC5sZW5ndGgtKHBufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6enRbenQubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46enRbenQubGVuZ3RoLShwbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp6dFt6dC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFhpJiYoSGUuXyQucmFuZ2U9W3p0W3p0Lmxlbmd0aC0ocG58fDEpXS5yYW5nZVswXSx6dFt6dC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxLbj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoSGUsW3NlLHRlLFBlLEtzLnl5LEVlWzFdLGtlLHp0XS5jb25jYXQob24pKSx0eXBlb2YgS248InUiKXJldHVybiBLbjtwbiYmKFllPVllLnNsaWNlKDAsLTEqcG4qMiksa2U9a2Uuc2xpY2UoMCwtMSpwbiksenQ9enQuc2xpY2UoMCwtMSpwbikpLFllLnB1c2godGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzBdKSxrZS5wdXNoKEhlLiQpLHp0LnB1c2goSGUuXyQpLEVzPXJlW1llW1llLmxlbmd0aC0yXV1bWWVbWWUubGVuZ3RoLTFdXSxZZS5wdXNoKEVzKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sRnQ9ZnVuY3Rpb24oKXt2YXIgU2U9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oVmUsWWUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoVmUsWWUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFZlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24obWUsVmUpe3JldHVybiB0aGlzLnl5PVZlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1tZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgbWU9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPW1lLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1tZSx0aGlzLm1hdGNoZWQrPW1lO3ZhciBWZT1tZS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIFZlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxtZX0sdW5wdXQ6ZnVuY3Rpb24obWUpe3ZhciBWZT1tZS5sZW5ndGgsWWU9bWUuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1tZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtVmUpLHRoaXMub2Zmc2V0LT1WZTt2YXIgY2U9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksWWUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1ZZS5sZW5ndGgtMSk7dmFyIGtlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpZZT8oWWUubGVuZ3RoPT09Y2UubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStjZVtjZS5sZW5ndGgtWWUubGVuZ3RoXS5sZW5ndGgtWWVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1WZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtrZVswXSxrZVswXSt0aGlzLnl5bGVuZy1WZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKG1lKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobWUpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIG1lPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4obWUubGVuZ3RoPjIwPyIuLi4iOiIiKSttZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBtZT10aGlzLm1hdGNoO3JldHVybiBtZS5sZW5ndGg8MjAmJihtZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtbWUubGVuZ3RoKSksKG1lLnN1YnN0cigwLDIwKSsobWUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBtZT10aGlzLnBhc3RJbnB1dCgpLFZlPW5ldyBBcnJheShtZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBtZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArVmUrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKG1lLFZlKXt2YXIgWWUsY2Usa2U7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGtlPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGtlLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLGNlPW1lWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxjZSYmKHRoaXMueXlsaW5lbm8rPWNlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmNlP2NlW2NlLmxlbmd0aC0xXS5sZW5ndGgtY2VbY2UubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rbWVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9bWVbMF0sdGhpcy5tYXRjaCs9bWVbMF0sdGhpcy5tYXRjaGVzPW1lLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKG1lWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1tZVswXSxZZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxWZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxZZSlyZXR1cm4gWWU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHp0IGluIGtlKXRoaXNbenRdPWtlW3p0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBtZSxWZSxZZSxjZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBrZT10aGlzLl9jdXJyZW50UnVsZXMoKSx6dD0wO3p0PGtlLmxlbmd0aDt6dCsrKWlmKFllPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNba2VbenRdXSksWWUmJighVmV8fFllWzBdLmxlbmd0aD5WZVswXS5sZW5ndGgpKXtpZihWZT1ZZSxjZT16dCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihtZT10aGlzLnRlc3RfbWF0Y2goWWUsa2VbenRdKSxtZSE9PSExKXJldHVybiBtZTtpZih0aGlzLl9iYWNrdHJhY2spe1ZlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIFZlPyhtZT10aGlzLnRlc3RfbWF0Y2goVmUsa2VbY2VdKSxtZSE9PSExP21lOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgVmU9dGhpcy5uZXh0KCk7cmV0dXJuIFZlfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihWZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKFZlKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgVmU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gVmU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihWZSl7cmV0dXJuIFZlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoVmV8fDApLFZlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbVmVdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKFZlKXt0aGlzLmJlZ2luKFZlKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihWZSxZZSxjZSxrZSl7c3dpdGNoKGNlKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMzI7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMztjYXNlIDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTU7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiAyNTtjYXNlIDE0OnJldHVybiAyNztjYXNlIDE1OnJldHVybiAyNjtjYXNlIDE2OnJldHVybiAyODtjYXNlIDE3OnJldHVybiAyOTtjYXNlIDE4OnJldHVybiAzMDtjYXNlIDE5OnJldHVybiAzMTtjYXNlIDIwOnRoaXMuYmVnaW4oIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIk1EX1NUUiI7Y2FzZSAyMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnJldHVybiJTVFIiO2Nhc2UgMjY6cmV0dXJuIHRoaXMuYmVnaW4oInBvaW50X3N0YXJ0IiksMjI7Y2FzZSAyNzpyZXR1cm4gdGhpcy5iZWdpbigicG9pbnRfeCIpLDIzO2Nhc2UgMjg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInBvaW50X3kiKTticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjQ7Y2FzZSAzMTpyZXR1cm4gNjtjYXNlIDMyOnJldHVybiA0MztjYXNlIDMzOnJldHVybiJDT0xPTiI7Y2FzZSAzNDpyZXR1cm4gNDU7Y2FzZSAzNTpyZXR1cm4gNDQ7Y2FzZSAzNjpyZXR1cm4gNDY7Y2FzZSAzNzpyZXR1cm4gNDY7Y2FzZSAzODpyZXR1cm4gNDc7Y2FzZSAzOTpyZXR1cm4gNDk7Y2FzZSA0MDpyZXR1cm4gNTA7Y2FzZSA0MTpyZXR1cm4gNDg7Y2FzZSA0MjpyZXR1cm4gNDE7Y2FzZSA0MzpyZXR1cm4gNTE7Y2FzZSA0NDpyZXR1cm4gNDI7Y2FzZSA0NTpyZXR1cm4gNTtjYXNlIDQ2OnJldHVybiAzMztjYXNlIDQ3OnJldHVybiA0MDtjYXNlIDQ4OnJldHVybiAzNH19LHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OiAqeC1heGlzICopL2ksL14oPzogKnktYXhpcyAqKS9pLC9eKD86ICotLSs+ICopL2ksL14oPzogKnF1YWRyYW50LTEgKikvaSwvXig/OiAqcXVhZHJhbnQtMiAqKS9pLC9eKD86ICpxdWFkcmFudC0zICopL2ksL14oPzogKnF1YWRyYW50LTQgKikvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86XHMqOlxzKlxbXHMqKS9pLC9eKD86KDEpfCgwKC5cZCspPykpL2ksL14oPzpccypcXSAqKS9pLC9eKD86XHMqLFxzKikvaSwvXig/OigxKXwoMCguXGQrKT8pKS9pLC9eKD86ICpxdWFkcmFudENoYXJ0ICopL2ksL14oPzpbQS1aYS16XSspL2ksL14oPzo6KS9pLC9eKD86XCspL2ksL14oPzosKS9pLC9eKD86PSkvaSwvXig/Oj0pL2ksL14oPzpcKikvaSwvXig/OiMpL2ksL14oPzpbXF9dKS9pLC9eKD86XC4pL2ksL14oPzomKS9pLC9eKD86LSkvaSwvXig/OlswLTldKykvaSwvXig/OlxzKS9pLC9eKD86OykvaSwvXig/OlshIiMkJSYnKissLS5gP1xcXy9dKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7cG9pbnRfeTp7cnVsZXM6WzMwXSxpbmNsdXNpdmU6ITF9LHBvaW50X3g6e3J1bGVzOlsyOV0saW5jbHVzaXZlOiExfSxwb2ludF9zdGFydDp7cnVsZXM6WzI3LDI4XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI0LDI1XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIzLDI2LDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFNlfSgpO0xlLmxleGVyPUZ0O2Z1bmN0aW9uIGduKCl7dGhpcy55eT17fX1yZXR1cm4gZ24ucHJvdG90eXBlPUxlLExlLlBhcnNlcj1nbixuZXcgZ259KCk7YWd0LnBhcnNlcj1hZ3Q7Y29uc3QgaUhlPWFndCxtZz1YMXQoKTtjbGFzcyBzSGV7Y29uc3RydWN0b3IoKXt0aGlzLmNvbmZpZz10aGlzLmdldERlZmF1bHRDb25maWcoKSx0aGlzLnRoZW1lQ29uZmlnPXRoaXMuZ2V0RGVmYXVsdFRoZW1lQ29uZmlnKCksdGhpcy5kYXRhPXRoaXMuZ2V0RGVmYXVsdERhdGEoKX1nZXREZWZhdWx0RGF0YSgpe3JldHVybnt0aXRsZVRleHQ6IiIscXVhZHJhbnQxVGV4dDoiIixxdWFkcmFudDJUZXh0OiIiLHF1YWRyYW50M1RleHQ6IiIscXVhZHJhbnQ0VGV4dDoiIix4QXhpc0xlZnRUZXh0OiIiLHhBeGlzUmlnaHRUZXh0OiIiLHlBeGlzQm90dG9tVGV4dDoiIix5QXhpc1RvcFRleHQ6IiIscG9pbnRzOltdfX1nZXREZWZhdWx0Q29uZmlnKCl7dmFyIGEsZixwLHcsbSxiLEUsXyxBLEksQixOLFIseixXLGV0LHN0LGF0O3JldHVybntzaG93WEF4aXM6ITAsc2hvd1lBeGlzOiEwLHNob3dUaXRsZTohMCxjaGFydEhlaWdodDooKGE9WmgucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOmEuY2hhcnRXaWR0aCl8fDUwMCxjaGFydFdpZHRoOigoZj1aaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Zi5jaGFydEhlaWdodCl8fDUwMCx0aXRsZVBhZGRpbmc6KChwPVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnRpdGxlUGFkZGluZyl8fDEwLHRpdGxlRm9udFNpemU6KCh3PVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp3LnRpdGxlRm9udFNpemUpfHwyMCxxdWFkcmFudFBhZGRpbmc6KChtPVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDptLnF1YWRyYW50UGFkZGluZyl8fDUseEF4aXNMYWJlbFBhZGRpbmc6KChiPVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzTGFiZWxQYWRkaW5nKXx8NSx5QXhpc0xhYmVsUGFkZGluZzooKEU9WmgucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOkUueUF4aXNMYWJlbFBhZGRpbmcpfHw1LHhBeGlzTGFiZWxGb250U2l6ZTooKF89WmgucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOl8ueEF4aXNMYWJlbEZvbnRTaXplKXx8MTYseUF4aXNMYWJlbEZvbnRTaXplOigoQT1aaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6QS55QXhpc0xhYmVsRm9udFNpemUpfHwxNixxdWFkcmFudExhYmVsRm9udFNpemU6KChJPVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpJLnF1YWRyYW50TGFiZWxGb250U2l6ZSl8fDE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6KChCPVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpCLnF1YWRyYW50VGV4dFRvcFBhZGRpbmcpfHw1LHBvaW50VGV4dFBhZGRpbmc6KChOPVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpOLnBvaW50VGV4dFBhZGRpbmcpfHw1LHBvaW50TGFiZWxGb250U2l6ZTooKFI9WmgucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOlIucG9pbnRMYWJlbEZvbnRTaXplKXx8MTIscG9pbnRSYWRpdXM6KCh6PVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp6LnBvaW50UmFkaXVzKXx8NSx4QXhpc1Bvc2l0aW9uOigoVz1aaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Vy54QXhpc1Bvc2l0aW9uKXx8InRvcCIseUF4aXNQb3NpdGlvbjooKGV0PVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpldC55QXhpc1Bvc2l0aW9uKXx8ImxlZnQiLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKHN0PVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpzdC5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwxLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKGF0PVpoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDphdC5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwyfX1nZXREZWZhdWx0VGhlbWVDb25maWcoKXtyZXR1cm57cXVhZHJhbnQxRmlsbDptZy5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6bWcucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOm1nLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDptZy5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOm1nLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOm1nLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOm1nLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOm1nLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOm1nLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDptZy5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOm1nLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6bWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50VGl0bGVGaWxsOm1nLnF1YWRyYW50VGl0bGVGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOm1nLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOm1nLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfX1jbGVhcigpe3RoaXMuY29uZmlnPXRoaXMuZ2V0RGVmYXVsdENvbmZpZygpLHRoaXMudGhlbWVDb25maWc9dGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKSx0aGlzLmRhdGE9dGhpcy5nZXREZWZhdWx0RGF0YSgpLFV0LmluZm8oImNsZWFyIGNhbGxlZCIpfXNldERhdGEoYSl7dGhpcy5kYXRhPXsuLi50aGlzLmRhdGEsLi4uYX19YWRkUG9pbnRzKGEpe3RoaXMuZGF0YS5wb2ludHM9Wy4uLmEsLi4udGhpcy5kYXRhLnBvaW50c119c2V0Q29uZmlnKGEpe1V0LnRyYWNlKCJzZXRDb25maWcgY2FsbGVkIHdpdGg6ICIsYSksdGhpcy5jb25maWc9ey4uLnRoaXMuY29uZmlnLC4uLmF9fXNldFRoZW1lQ29uZmlnKGEpe1V0LnRyYWNlKCJzZXRUaGVtZUNvbmZpZyBjYWxsZWQgd2l0aDogIixhKSx0aGlzLnRoZW1lQ29uZmlnPXsuLi50aGlzLnRoZW1lQ29uZmlnLC4uLmF9fWNhbGN1bGF0ZVNwYWNlKGEsZixwLHcpe2NvbnN0IG09dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUsYj17dG9wOmE9PT0idG9wIiYmZj9tOjAsYm90dG9tOmE9PT0iYm90dG9tIiYmZj9tOjB9LEU9dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsXz17bGVmdDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiJiZwP0U6MCxyaWdodDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09InJpZ2h0IiYmcD9FOjB9LEE9dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSt0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcqMixJPXt0b3A6dz9BOjB9LEI9dGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nK18ubGVmdCxOPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZytiLnRvcCtJLnRvcCxSPXRoaXMuY29uZmlnLmNoYXJ0V2lkdGgtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItXy5sZWZ0LV8ucmlnaHQsej10aGlzLmNvbmZpZy5jaGFydEhlaWdodC10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcqMi1iLnRvcC1iLmJvdHRvbS1JLnRvcCxXPVIvMixldD16LzI7cmV0dXJue3hBeGlzU3BhY2U6Yix5QXhpc1NwYWNlOl8sdGl0bGVTcGFjZTpJLHF1YWRyYW50U3BhY2U6e3F1YWRyYW50TGVmdDpCLHF1YWRyYW50VG9wOk4scXVhZHJhbnRXaWR0aDpSLHF1YWRyYW50SGFsZldpZHRoOlcscXVhZHJhbnRIZWlnaHQ6eixxdWFkcmFudEhhbGZIZWlnaHQ6ZXR9fX1nZXRBeGlzTGFiZWxzKGEsZixwLHcpe2NvbnN0e3F1YWRyYW50U3BhY2U6bSx0aXRsZVNwYWNlOmJ9PXcse3F1YWRyYW50SGFsZkhlaWdodDpFLHF1YWRyYW50SGVpZ2h0Ol8scXVhZHJhbnRMZWZ0OkEscXVhZHJhbnRIYWxmV2lkdGg6SSxxdWFkcmFudFRvcDpCLHF1YWRyYW50V2lkdGg6Tn09bSxSPSEhdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0LHo9ISF0aGlzLmRhdGEueUF4aXNUb3BUZXh0LFc9W107cmV0dXJuIHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0JiZmJiZXLnB1c2goe3RleHQ6dGhpcy5kYXRhLnhBeGlzTGVmdFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCx4OkErKFI/SS8yOjApLHk6YT09PSJ0b3AiP3RoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK2IudG9wOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK0IrXyt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcsZm9udFNpemU6dGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOlI/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246MH0pLHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCYmZiYmVy5wdXNoKHt0ZXh0OnRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRYQXhpc1RleHRGaWxsLHg6QStJKyhSP0kvMjowKSx5OmE9PT0idG9wIj90aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytiLnRvcDp0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytCK18rdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLGZvbnRTaXplOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpSPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOjB9KSx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0JiZwJiZXLnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytBK04rdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6QitfLSh6P0UvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ej8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSx0aGlzLmRhdGEueUF4aXNUb3BUZXh0JiZwJiZXLnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzVG9wVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytBK04rdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6QitFLSh6P0UvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ej8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSxXfWdldFF1YWRyYW50cyhhKXtjb25zdHtxdWFkcmFudFNwYWNlOmZ9PWEse3F1YWRyYW50SGFsZkhlaWdodDpwLHF1YWRyYW50TGVmdDp3LHF1YWRyYW50SGFsZldpZHRoOm0scXVhZHJhbnRUb3A6Yn09ZixFPVt7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQxVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OncrbSx5OmIsd2lkdGg6bSxoZWlnaHQ6cCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50MlRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MlRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDp3LHk6Yix3aWR0aDptLGhlaWdodDpwLGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJGaWxsfSx7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQzVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OncseTpiK3Asd2lkdGg6bSxoZWlnaHQ6cCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50NFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NFRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDp3K20seTpiK3Asd2lkdGg6bSxoZWlnaHQ6cCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQ0RmlsbH1dO2Zvcihjb25zdCBfIG9mIEUpXy50ZXh0Lng9Xy54K18ud2lkdGgvMix0aGlzLmRhdGEucG9pbnRzLmxlbmd0aD09PTA/KF8udGV4dC55PV8ueStfLmhlaWdodC8yLF8udGV4dC5ob3Jpem9udGFsUG9zPSJtaWRkbGUiKTooXy50ZXh0Lnk9Xy55K3RoaXMuY29uZmlnLnF1YWRyYW50VGV4dFRvcFBhZGRpbmcsXy50ZXh0Lmhvcml6b250YWxQb3M9InRvcCIpO3JldHVybiBFfWdldFF1YWRyYW50UG9pbnRzKGEpe2NvbnN0e3F1YWRyYW50U3BhY2U6Zn09YSx7cXVhZHJhbnRIZWlnaHQ6cCxxdWFkcmFudExlZnQ6dyxxdWFkcmFudFRvcDptLHF1YWRyYW50V2lkdGg6Yn09ZixFPUFBKCkuZG9tYWluKFswLDFdKS5yYW5nZShbdyxiK3ddKSxfPUFBKCkuZG9tYWluKFswLDFdKS5yYW5nZShbcCttLG1dKTtyZXR1cm4gdGhpcy5kYXRhLnBvaW50cy5tYXAoST0+KHt4OkUoSS54KSx5Ol8oSS55KSxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRQb2ludEZpbGwscmFkaXVzOnRoaXMuY29uZmlnLnBvaW50UmFkaXVzLHRleHQ6e3RleHQ6SS50ZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50VGV4dEZpbGwseDpFKEkueCkseTpfKEkueSkrdGhpcy5jb25maWcucG9pbnRUZXh0UGFkZGluZyx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJ0b3AiLGZvbnRTaXplOnRoaXMuY29uZmlnLnBvaW50TGFiZWxGb250U2l6ZSxyb3RhdGlvbjowfX0pKX1nZXRCb3JkZXJzKGEpe2NvbnN0IGY9dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLzIse3F1YWRyYW50U3BhY2U6cH09YSx7cXVhZHJhbnRIYWxmSGVpZ2h0OncscXVhZHJhbnRIZWlnaHQ6bSxxdWFkcmFudExlZnQ6YixxdWFkcmFudEhhbGZXaWR0aDpFLHF1YWRyYW50VG9wOl8scXVhZHJhbnRXaWR0aDpBfT1wO3JldHVyblt7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiLWYseTE6Xyx4MjpiK0ErZix5MjpffSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiK0EseTE6XytmLHgyOmIrQSx5MjpfK20tZn0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6Yi1mLHkxOl8rbSx4MjpiK0ErZix5MjpfK219LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmIseTE6XytmLHgyOmIseTI6XyttLWZ9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmIrRSx5MTpfK2YseDI6YitFLHkyOl8rbS1mfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiK2YseTE6Xyt3LHgyOmIrQS1mLHkyOl8rd31dfWdldFRpdGxlKGEpe2lmKGEpcmV0dXJue3RleHQ6dGhpcy5kYXRhLnRpdGxlVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRUaXRsZUZpbGwsZm9udFNpemU6dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSxob3Jpem9udGFsUG9zOiJ0b3AiLHZlcnRpY2FsUG9zOiJjZW50ZXIiLHJvdGF0aW9uOjAseTp0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcseDp0aGlzLmNvbmZpZy5jaGFydFdpZHRoLzJ9fWJ1aWxkKCl7Y29uc3QgYT10aGlzLmNvbmZpZy5zaG93WEF4aXMmJiEhKHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0fHx0aGlzLmRhdGEueEF4aXNSaWdodFRleHQpLGY9dGhpcy5jb25maWcuc2hvd1lBeGlzJiYhISh0aGlzLmRhdGEueUF4aXNUb3BUZXh0fHx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0KSxwPXRoaXMuY29uZmlnLnNob3dUaXRsZSYmISF0aGlzLmRhdGEudGl0bGVUZXh0LHc9dGhpcy5kYXRhLnBvaW50cy5sZW5ndGg+MD8iYm90dG9tIjp0aGlzLmNvbmZpZy54QXhpc1Bvc2l0aW9uLG09dGhpcy5jYWxjdWxhdGVTcGFjZSh3LGEsZixwKTtyZXR1cm57cG9pbnRzOnRoaXMuZ2V0UXVhZHJhbnRQb2ludHMobSkscXVhZHJhbnRzOnRoaXMuZ2V0UXVhZHJhbnRzKG0pLGF4aXNMYWJlbHM6dGhpcy5nZXRBeGlzTGFiZWxzKHcsYSxmLG0pLGJvcmRlckxpbmVzOnRoaXMuZ2V0Qm9yZGVycyhtKSx0aXRsZTp0aGlzLmdldFRpdGxlKHApfX19Y29uc3QgYUhlPU9lKCk7ZnVuY3Rpb24gQjUoaSl7cmV0dXJuIFExKGkudHJpbSgpLGFIZSl9Y29uc3QgXzA9bmV3IHNIZTtmdW5jdGlvbiBvSGUoaSl7XzAuc2V0RGF0YSh7cXVhZHJhbnQxVGV4dDpCNShpLnRleHQpfSl9ZnVuY3Rpb24gY0hlKGkpe18wLnNldERhdGEoe3F1YWRyYW50MlRleHQ6QjUoaS50ZXh0KX0pfWZ1bmN0aW9uIHVIZShpKXtfMC5zZXREYXRhKHtxdWFkcmFudDNUZXh0OkI1KGkudGV4dCl9KX1mdW5jdGlvbiBsSGUoaSl7XzAuc2V0RGF0YSh7cXVhZHJhbnQ0VGV4dDpCNShpLnRleHQpfSl9ZnVuY3Rpb24gaEhlKGkpe18wLnNldERhdGEoe3hBeGlzTGVmdFRleHQ6QjUoaS50ZXh0KX0pfWZ1bmN0aW9uIGZIZShpKXtfMC5zZXREYXRhKHt4QXhpc1JpZ2h0VGV4dDpCNShpLnRleHQpfSl9ZnVuY3Rpb24gZEhlKGkpe18wLnNldERhdGEoe3lBeGlzVG9wVGV4dDpCNShpLnRleHQpfSl9ZnVuY3Rpb24gZ0hlKGkpe18wLnNldERhdGEoe3lBeGlzQm90dG9tVGV4dDpCNShpLnRleHQpfSl9ZnVuY3Rpb24gcEhlKGksYSxmKXtfMC5hZGRQb2ludHMoW3t4OmEseTpmLHRleHQ6QjUoaS50ZXh0KX1dKX1mdW5jdGlvbiBiSGUoaSl7XzAuc2V0Q29uZmlnKHtjaGFydFdpZHRoOml9KX1mdW5jdGlvbiB3SGUoaSl7XzAuc2V0Q29uZmlnKHtjaGFydEhlaWdodDppfSl9ZnVuY3Rpb24gdkhlKCl7Y29uc3QgaT1PZSgpLHt0aGVtZVZhcmlhYmxlczphLHF1YWRyYW50Q2hhcnQ6Zn09aTtyZXR1cm4gZiYmXzAuc2V0Q29uZmlnKGYpLF8wLnNldFRoZW1lQ29uZmlnKHtxdWFkcmFudDFGaWxsOmEucXVhZHJhbnQxRmlsbCxxdWFkcmFudDJGaWxsOmEucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOmEucXVhZHJhbnQzRmlsbCxxdWFkcmFudDRGaWxsOmEucXVhZHJhbnQ0RmlsbCxxdWFkcmFudDFUZXh0RmlsbDphLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOmEucXVhZHJhbnQyVGV4dEZpbGwscXVhZHJhbnQzVGV4dEZpbGw6YS5xdWFkcmFudDNUZXh0RmlsbCxxdWFkcmFudDRUZXh0RmlsbDphLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOmEucXVhZHJhbnRQb2ludEZpbGwscXVhZHJhbnRQb2ludFRleHRGaWxsOmEucXVhZHJhbnRQb2ludFRleHRGaWxsLHF1YWRyYW50WEF4aXNUZXh0RmlsbDphLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6YS5xdWFkcmFudFlBeGlzVGV4dEZpbGwscXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw6YS5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbDphLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50VGl0bGVGaWxsOmEucXVhZHJhbnRUaXRsZUZpbGx9KSxfMC5zZXREYXRhKHt0aXRsZVRleHQ6cGcoKX0pLF8wLmJ1aWxkKCl9Y29uc3QgbUhlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6aUhlLGRiOntzZXRXaWR0aDpiSGUsc2V0SGVpZ2h0OndIZSxzZXRRdWFkcmFudDFUZXh0Om9IZSxzZXRRdWFkcmFudDJUZXh0OmNIZSxzZXRRdWFkcmFudDNUZXh0OnVIZSxzZXRRdWFkcmFudDRUZXh0OmxIZSxzZXRYQXhpc0xlZnRUZXh0OmhIZSxzZXRYQXhpc1JpZ2h0VGV4dDpmSGUsc2V0WUF4aXNUb3BUZXh0OmRIZSxzZXRZQXhpc0JvdHRvbVRleHQ6Z0hlLGFkZFBvaW50OnBIZSxnZXRRdWFkcmFudERhdGE6dkhlLGNsZWFyOmZ1bmN0aW9uKCl7XzAuY2xlYXIoKSxoZygpfSxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxzZXREaWFncmFtVGl0bGU6TmIsZ2V0RGlhZ3JhbVRpdGxlOnBnLGdldEFjY0Rlc2NyaXB0aW9uOmdnLHNldEFjY0Rlc2NyaXB0aW9uOmRnfSxyZW5kZXJlcjp7ZHJhdzooaSxhLGYscCk9Pnt2YXIgdnQsWCxwdDtmdW5jdGlvbiB3KFUpe3JldHVybiBVPT09InRvcCI/ImhhbmdpbmciOiJtaWRkbGUifWZ1bmN0aW9uIG0oVSl7cmV0dXJuIFU9PT0ibGVmdCI/InN0YXJ0IjoibWlkZGxlIn1mdW5jdGlvbiBiKFUpe3JldHVybmB0cmFuc2xhdGUoJHtVLnh9LCAke1UueX0pIHJvdGF0ZSgke1Uucm90YXRpb258fDB9KWB9Y29uc3QgRT1PZSgpO1V0LmRlYnVnKGBSZW5kZXJpbmcgcXVhZHJhbnQgY2hhcnQKYCtpKTtjb25zdCBfPUUuc2VjdXJpdHlMZXZlbDtsZXQgQTtfPT09InNhbmRib3giJiYoQT15cigiI2kiK2EpKTtjb25zdCBCPXlyKF89PT0ic2FuZGJveCI/QS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KGBbaWQ9IiR7YX0iXWApLE49Qi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm1haW4iKSxSPSgodnQ9RS5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6dnQuY2hhcnRXaWR0aCl8fDUwMCx6PSgoWD1FLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpYLmNoYXJ0SGVpZ2h0KXx8NTAwO2swKEIseixSLCgocHQ9RS5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6cHQudXNlTWF4V2lkdGgpfHwhMCksQi5hdHRyKCJ2aWV3Qm94IiwiMCAwICIrUisiICIreikscC5kYi5zZXRIZWlnaHQoeikscC5kYi5zZXRXaWR0aChSKTtjb25zdCBXPXAuZGIuZ2V0UXVhZHJhbnREYXRhKCksZXQ9Ti5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50cyIpLHN0PU4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJib3JkZXIiKSxhdD1OLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGF0YS1wb2ludHMiKSxidD1OLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWxzIiksbXQ9Ti5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpdGxlIik7Vy50aXRsZSYmbXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZmlsbCIsVy50aXRsZS5maWxsKS5hdHRyKCJmb250LXNpemUiLFcudGl0bGUuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIix3KFcudGl0bGUuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixtKFcudGl0bGUudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLGIoVy50aXRsZSkpLnRleHQoVy50aXRsZS50ZXh0KSxXLmJvcmRlckxpbmVzJiZzdC5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKFcuYm9yZGVyTGluZXMpLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLFU9PlUueDEpLmF0dHIoInkxIixVPT5VLnkxKS5hdHRyKCJ4MiIsVT0+VS54MikuYXR0cigieTIiLFU9PlUueTIpLnN0eWxlKCJzdHJva2UiLFU9PlUuc3Ryb2tlRmlsbCkuc3R5bGUoInN0cm9rZS13aWR0aCIsVT0+VS5zdHJva2VXaWR0aCk7Y29uc3QgeXQ9ZXQuc2VsZWN0QWxsKCJnLnF1YWRyYW50IikuZGF0YShXLnF1YWRyYW50cykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50Iik7eXQuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsVT0+VS54KS5hdHRyKCJ5IixVPT5VLnkpLmF0dHIoIndpZHRoIixVPT5VLndpZHRoKS5hdHRyKCJoZWlnaHQiLFU9PlUuaGVpZ2h0KS5hdHRyKCJmaWxsIixVPT5VLmZpbGwpLHl0LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLFU9PlUudGV4dC5maWxsKS5hdHRyKCJmb250LXNpemUiLFU9PlUudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFU9PncoVS50ZXh0Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsVT0+bShVLnRleHQudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLFU9PmIoVS50ZXh0KSkudGV4dChVPT5VLnRleHQudGV4dCksYnQuc2VsZWN0QWxsKCJnLmxhYmVsIikuZGF0YShXLmF4aXNMYWJlbHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoVT0+VS50ZXh0KS5hdHRyKCJmaWxsIixVPT5VLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsVT0+VS5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFU9PncoVS5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLFU9Pm0oVS52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsVT0+YihVKSk7Y29uc3QgdXQ9YXQuc2VsZWN0QWxsKCJnLmRhdGEtcG9pbnQiKS5kYXRhKFcucG9pbnRzKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGF0YS1wb2ludCIpO3V0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLFU9PlUueCkuYXR0cigiY3kiLFU9PlUueSkuYXR0cigiciIsVT0+VS5yYWRpdXMpLmF0dHIoImZpbGwiLFU9PlUuZmlsbCksdXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkudGV4dChVPT5VLnRleHQudGV4dCkuYXR0cigiZmlsbCIsVT0+VS50ZXh0LmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsVT0+VS50ZXh0LmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsVT0+dyhVLnRleHQuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixVPT5tKFUudGV4dC52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsVT0+YihVLnRleHQpKX19LHN0eWxlczooKT0+IiJ9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBvZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihPdCxCdCxFdCxaKXtmb3IoRXQ9RXR8fHt9LFo9T3QubGVuZ3RoO1otLTtFdFtPdFtaXV09QnQpO3JldHVybiBFdH0sYT1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyM10sZj1bMiw2XSxwPVsxLDNdLHc9WzEsNV0sbT1bMSw2XSxiPVsxLDddLEU9WzEsNSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywzNCwzNSwzNl0sXz1bMSwyNV0sQT1bMSwyNl0sST1bMSwyOF0sQj1bMSwyOV0sTj1bMSwzMF0sUj1bMSwzMV0sej1bMSwzMl0sVz1bMSwzM10sZXQ9WzEsMzRdLHN0PVsxLDM1XSxhdD1bMSwzNl0sYnQ9WzEsMzddLG10PVsxLDQzXSx5dD1bMSw0Ml0sZnQ9WzEsNDddLHV0PVsxLDUwXSx2dD1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywzNCwzNSwzNl0sWD1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywyNCwyNiwyNywyOCwzNCwzNSwzNl0scHQ9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjMsMjQsMjYsMjcsMjgsMzQsMzUsMzYsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTBdLFU9WzEsNjRdLFR0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxYWUNIQVJUOjUsY2hhcnRDb25maWc6Nixkb2N1bWVudDo3LENIQVJUX09SSUVOVEFUSU9OOjgsc3RhdGVtZW50OjksdGl0bGU6MTAsdGV4dDoxMSxYX0FYSVM6MTIscGFyc2VYQXhpczoxMyxZX0FYSVM6MTQscGFyc2VZQXhpczoxNSxMSU5FOjE2LHBsb3REYXRhOjE3LEJBUjoxOCxhY2NfdGl0bGU6MTksYWNjX3RpdGxlX3ZhbHVlOjIwLGFjY19kZXNjcjoyMSxhY2NfZGVzY3JfdmFsdWU6MjIsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyMyxTUVVBUkVfQlJBQ0VTX1NUQVJUOjI0LGNvbW1hU2VwYXJhdGVkTnVtYmVyczoyNSxTUVVBUkVfQlJBQ0VTX0VORDoyNixOVU1CRVJfV0lUSF9ERUNJTUFMOjI3LENPTU1BOjI4LHhBeGlzRGF0YToyOSxiYW5kRGF0YTozMCxBUlJPV19ERUxJTUlURVI6MzEsY29tbWFTZXBhcmF0ZWRUZXh0czozMix5QXhpc0RhdGE6MzMsTkVXTElORTozNCxTRU1JOjM1LEVPRjozNixhbHBoYU51bTozNyxTVFI6MzgsTURfU1RSOjM5LGFscGhhTnVtVG9rZW46NDAsQU1QOjQxLE5VTTo0MixBTFBIQTo0MyxQTFVTOjQ0LEVRVUFMUzo0NSxNVUxUOjQ2LERPVDo0NyxCUktUOjQ4LE1JTlVTOjQ5LFVOREVSU0NPUkU6NTAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6IlhZQ0hBUlQiLDg6IkNIQVJUX09SSUVOVEFUSU9OIiwxMDoidGl0bGUiLDEyOiJYX0FYSVMiLDE0OiJZX0FYSVMiLDE2OiJMSU5FIiwxODoiQkFSIiwxOToiYWNjX3RpdGxlIiwyMDoiYWNjX3RpdGxlX3ZhbHVlIiwyMToiYWNjX2Rlc2NyIiwyMjoiYWNjX2Rlc2NyX3ZhbHVlIiwyMzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMjQ6IlNRVUFSRV9CUkFDRVNfU1RBUlQiLDI2OiJTUVVBUkVfQlJBQ0VTX0VORCIsMjc6Ik5VTUJFUl9XSVRIX0RFQ0lNQUwiLDI4OiJDT01NQSIsMzE6IkFSUk9XX0RFTElNSVRFUiIsMzQ6Ik5FV0xJTkUiLDM1OiJTRU1JIiwzNjoiRU9GIiwzODoiU1RSIiwzOToiTURfU1RSIiw0MToiQU1QIiw0MjoiTlVNIiw0MzoiQUxQSEEiLDQ0OiJQTFVTIiw0NToiRVFVQUxTIiw0NjoiTVVMVCIsNDc6IkRPVCIsNDg6IkJSS1QiLDQ5OiJNSU5VUyIsNTA6IlVOREVSU0NPUkUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsM10sWzMsMl0sWzMsMV0sWzYsMV0sWzcsMF0sWzcsMl0sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksM10sWzksMl0sWzksM10sWzksMl0sWzksMl0sWzksMV0sWzE3LDNdLFsyNSwzXSxbMjUsMV0sWzEzLDFdLFsxMywyXSxbMTMsMV0sWzI5LDFdLFsyOSwzXSxbMzAsM10sWzMyLDNdLFszMiwxXSxbMTUsMV0sWzE1LDJdLFsxNSwxXSxbMzMsM10sWzQsMV0sWzQsMV0sWzQsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzM3LDFdLFszNywyXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oQnQsRXQsWixDdCx4dCxIdCxMZSl7dmFyIEZ0PUh0Lmxlbmd0aC0xO3N3aXRjaCh4dCl7Y2FzZSA1OkN0LnNldE9yaWVudGF0aW9uKEh0W0Z0XSk7YnJlYWs7Y2FzZSA5OkN0LnNldERpYWdyYW1UaXRsZShIdFtGdF0udGV4dC50cmltKCkpO2JyZWFrO2Nhc2UgMTI6Q3Quc2V0TGluZURhdGEoe3RleHQ6IiIsdHlwZToidGV4dCJ9LEh0W0Z0XSk7YnJlYWs7Y2FzZSAxMzpDdC5zZXRMaW5lRGF0YShIdFtGdC0xXSxIdFtGdF0pO2JyZWFrO2Nhc2UgMTQ6Q3Quc2V0QmFyRGF0YSh7dGV4dDoiIix0eXBlOiJ0ZXh0In0sSHRbRnRdKTticmVhaztjYXNlIDE1OkN0LnNldEJhckRhdGEoSHRbRnQtMV0sSHRbRnRdKTticmVhaztjYXNlIDE2OnRoaXMuJD1IdFtGdF0udHJpbSgpLEN0LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNzpjYXNlIDE4OnRoaXMuJD1IdFtGdF0udHJpbSgpLEN0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9SHRbRnQtMV07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9W051bWJlcihIdFtGdC0yXSksLi4uSHRbRnRdXTticmVhaztjYXNlIDIxOnRoaXMuJD1bTnVtYmVyKEh0W0Z0XSldO2JyZWFrO2Nhc2UgMjI6Q3Quc2V0WEF4aXNUaXRsZShIdFtGdF0pO2JyZWFrO2Nhc2UgMjM6Q3Quc2V0WEF4aXNUaXRsZShIdFtGdC0xXSk7YnJlYWs7Y2FzZSAyNDpDdC5zZXRYQXhpc1RpdGxlKHt0eXBlOiJ0ZXh0Iix0ZXh0OiIifSk7YnJlYWs7Y2FzZSAyNTpDdC5zZXRYQXhpc0JhbmQoSHRbRnRdKTticmVhaztjYXNlIDI2OkN0LnNldFhBeGlzUmFuZ2VEYXRhKE51bWJlcihIdFtGdC0yXSksTnVtYmVyKEh0W0Z0XSkpO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPUh0W0Z0LTFdO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPVtIdFtGdC0yXSwuLi5IdFtGdF1dO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPVtIdFtGdF1dO2JyZWFrO2Nhc2UgMzA6Q3Quc2V0WUF4aXNUaXRsZShIdFtGdF0pO2JyZWFrO2Nhc2UgMzE6Q3Quc2V0WUF4aXNUaXRsZShIdFtGdC0xXSk7YnJlYWs7Y2FzZSAzMjpDdC5zZXRZQXhpc1RpdGxlKHt0eXBlOiJ0ZXh0Iix0ZXh0OiIifSk7YnJlYWs7Y2FzZSAzMzpDdC5zZXRZQXhpc1JhbmdlRGF0YShOdW1iZXIoSHRbRnQtMl0pLE51bWJlcihIdFtGdF0pKTticmVhaztjYXNlIDM3OnRoaXMuJD17dGV4dDpIdFtGdF0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMzg6dGhpcy4kPXt0ZXh0Okh0W0Z0XSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9e3RleHQ6SHRbRnRdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9SHRbRnRdO2JyZWFrO2Nhc2UgNDE6dGhpcy4kPUh0W0Z0LTFdKyIiK0h0W0Z0XTticmVha319LHRhYmxlOltpKGEsZix7MzoxLDQ6Miw3OjQsNTpwLDM0OncsMzU6bSwzNjpifSksezE6WzNdfSxpKGEsZix7NDoyLDc6NCwzOjgsNTpwLDM0OncsMzU6bSwzNjpifSksaShhLGYsezQ6Miw3OjQsNjo5LDM6MTAsNTpwLDg6WzEsMTFdLDM0OncsMzU6bSwzNjpifSksezE6WzIsNF0sOToxMiwxMDpbMSwxM10sMTI6WzEsMTRdLDE0OlsxLDE1XSwxNjpbMSwxNl0sMTg6WzEsMTddLDE5OlsxLDE4XSwyMTpbMSwxOV0sMjM6WzEsMjBdfSxpKEUsWzIsMzRdKSxpKEUsWzIsMzVdKSxpKEUsWzIsMzZdKSx7MTpbMiwxXX0saShhLGYsezQ6Miw3OjQsMzoyMSw1OnAsMzQ6dywzNTptLDM2OmJ9KSx7MTpbMiwzXX0saShFLFsyLDVdKSxpKGEsWzIsN10sezQ6MjIsMzQ6dywzNTptLDM2OmJ9KSx7MTE6MjMsMzc6MjQsMzg6XywzOTpBLDQwOjI3LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSx7MTE6MzksMTM6MzgsMjQ6bXQsMjc6eXQsMjk6NDAsMzA6NDEsMzc6MjQsMzg6XywzOTpBLDQwOjI3LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSx7MTE6NDUsMTU6NDQsMjc6ZnQsMzM6NDYsMzc6MjQsMzg6XywzOTpBLDQwOjI3LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSx7MTE6NDksMTc6NDgsMjQ6dXQsMzc6MjQsMzg6XywzOTpBLDQwOjI3LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSx7MTE6NTIsMTc6NTEsMjQ6dXQsMzc6MjQsMzg6XywzOTpBLDQwOjI3LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSx7MjA6WzEsNTNdfSx7MjI6WzEsNTRdfSxpKHZ0LFsyLDE4XSksezE6WzIsMl19LGkodnQsWzIsOF0pLGkodnQsWzIsOV0pLGkoWCxbMiwzN10sezQwOjU1LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSksaShYLFsyLDM4XSksaShYLFsyLDM5XSksaShwdCxbMiw0MF0pLGkocHQsWzIsNDJdKSxpKHB0LFsyLDQzXSksaShwdCxbMiw0NF0pLGkocHQsWzIsNDVdKSxpKHB0LFsyLDQ2XSksaShwdCxbMiw0N10pLGkocHQsWzIsNDhdKSxpKHB0LFsyLDQ5XSksaShwdCxbMiw1MF0pLGkocHQsWzIsNTFdKSxpKHZ0LFsyLDEwXSksaSh2dCxbMiwyMl0sezMwOjQxLDI5OjU2LDI0Om10LDI3Onl0fSksaSh2dCxbMiwyNF0pLGkodnQsWzIsMjVdKSx7MzE6WzEsNTddfSx7MTE6NTksMzI6NTgsMzc6MjQsMzg6XywzOTpBLDQwOjI3LDQxOkksNDI6Qiw0MzpOLDQ0OlIsNDU6eiw0NjpXLDQ3OmV0LDQ4OnN0LDQ5OmF0LDUwOmJ0fSxpKHZ0LFsyLDExXSksaSh2dCxbMiwzMF0sezMzOjYwLDI3OmZ0fSksaSh2dCxbMiwzMl0pLHszMTpbMSw2MV19LGkodnQsWzIsMTJdKSx7MTc6NjIsMjQ6dXR9LHsyNTo2MywyNzpVfSxpKHZ0LFsyLDE0XSksezE3OjY1LDI0OnV0fSxpKHZ0LFsyLDE2XSksaSh2dCxbMiwxN10pLGkocHQsWzIsNDFdKSxpKHZ0LFsyLDIzXSksezI3OlsxLDY2XX0sezI2OlsxLDY3XX0sezI2OlsyLDI5XSwyODpbMSw2OF19LGkodnQsWzIsMzFdKSx7Mjc6WzEsNjldfSxpKHZ0LFsyLDEzXSksezI2OlsxLDcwXX0sezI2OlsyLDIxXSwyODpbMSw3MV19LGkodnQsWzIsMTVdKSxpKHZ0LFsyLDI2XSksaSh2dCxbMiwyN10pLHsxMTo1OSwzMjo3MiwzNzoyNCwzODpfLDM5OkEsNDA6MjcsNDE6SSw0MjpCLDQzOk4sNDQ6Uiw0NTp6LDQ2OlcsNDc6ZXQsNDg6c3QsNDk6YXQsNTA6YnR9LGkodnQsWzIsMzNdKSxpKHZ0LFsyLDE5XSksezI1OjczLDI3OlV9LHsyNjpbMiwyOF19LHsyNjpbMiwyMF19XSxkZWZhdWx0QWN0aW9uczp7ODpbMiwxXSwxMDpbMiwzXSwyMTpbMiwyXSw3MjpbMiwyOF0sNzM6WzIsMjBdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKEJ0LEV0KXtpZihFdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEJ0KTtlbHNle3ZhciBaPW5ldyBFcnJvcihCdCk7dGhyb3cgWi5oYXNoPUV0LFp9fSxwYXJzZTpmdW5jdGlvbihCdCl7dmFyIEV0PXRoaXMsWj1bMF0sQ3Q9W10seHQ9W251bGxdLEh0PVtdLExlPXRoaXMudGFibGUsRnQ9IiIsZ249MCxTZT0wLG1lPTIsVmU9MSxZZT1IdC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxjZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGtlPXt5eTp7fX07Zm9yKHZhciB6dCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHp0KSYmKGtlLnl5W3p0XT10aGlzLnl5W3p0XSk7Y2Uuc2V0SW5wdXQoQnQsa2UueXkpLGtlLnl5LmxleGVyPWNlLGtlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBjZS55eWxsb2M+InUiJiYoY2UueXlsbG9jPXt9KTt2YXIgcmU9Y2UueXlsbG9jO0h0LnB1c2gocmUpO3ZhciBzZT1jZS5vcHRpb25zJiZjZS5vcHRpb25zLnJhbmdlczt0eXBlb2Yga2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9a2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gUGUoKXt2YXIgWG47cmV0dXJuIFhuPUN0LnBvcCgpfHxjZS5sZXgoKXx8VmUsdHlwZW9mIFhuIT0ibnVtYmVyIiYmKFhuIGluc3RhbmNlb2YgQXJyYXkmJihDdD1YbixYbj1DdC5wb3AoKSksWG49RXQuc3ltYm9sc19bWG5dfHxYbiksWG59Zm9yKHZhciB0ZSxNZSxkZSxvbixuaT17fSxLcyx3cyxmbyxYaTs7KXtpZihNZT1aW1oubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbTWVdP2RlPXRoaXMuZGVmYXVsdEFjdGlvbnNbTWVdOigodGU9PT1udWxsfHx0eXBlb2YgdGU+InUiKSYmKHRlPVBlKCkpLGRlPUxlW01lXSYmTGVbTWVdW3RlXSksdHlwZW9mIGRlPiJ1Inx8IWRlLmxlbmd0aHx8IWRlWzBdKXt2YXIgRXI9IiI7WGk9W107Zm9yKEtzIGluIExlW01lXSl0aGlzLnRlcm1pbmFsc19bS3NdJiZLcz5tZSYmWGkucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0tzXSsiJyIpO2NlLnNob3dQb3NpdGlvbj9Fcj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhnbisxKStgOgpgK2NlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArWGkuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t0ZV18fHRlKSsiJyI6RXI9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoZ24rMSkrIjogVW5leHBlY3RlZCAiKyh0ZT09VmU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bdGVdfHx0ZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoRXIse3RleHQ6Y2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3RlXXx8dGUsbGluZTpjZS55eWxpbmVubyxsb2M6cmUsZXhwZWN0ZWQ6WGl9KX1pZihkZVswXWluc3RhbmNlb2YgQXJyYXkmJmRlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrTWUrIiwgdG9rZW46ICIrdGUpO3N3aXRjaChkZVswXSl7Y2FzZSAxOloucHVzaCh0ZSkseHQucHVzaChjZS55eXRleHQpLEh0LnB1c2goY2UueXlsbG9jKSxaLnB1c2goZGVbMV0pLHRlPW51bGwsU2U9Y2UueXlsZW5nLEZ0PWNlLnl5dGV4dCxnbj1jZS55eWxpbmVubyxyZT1jZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKHdzPXRoaXMucHJvZHVjdGlvbnNfW2RlWzFdXVsxXSxuaS4kPXh0W3h0Lmxlbmd0aC13c10sbmkuXyQ9e2ZpcnN0X2xpbmU6SHRbSHQubGVuZ3RoLSh3c3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkh0W0h0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkh0W0h0Lmxlbmd0aC0od3N8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46SHRbSHQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxzZSYmKG5pLl8kLnJhbmdlPVtIdFtIdC5sZW5ndGgtKHdzfHwxKV0ucmFuZ2VbMF0sSHRbSHQubGVuZ3RoLTFdLnJhbmdlWzFdXSksb249dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KG5pLFtGdCxTZSxnbixrZS55eSxkZVsxXSx4dCxIdF0uY29uY2F0KFllKSksdHlwZW9mIG9uPCJ1IilyZXR1cm4gb247d3MmJihaPVouc2xpY2UoMCwtMSp3cyoyKSx4dD14dC5zbGljZSgwLC0xKndzKSxIdD1IdC5zbGljZSgwLC0xKndzKSksWi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2RlWzFdXVswXSkseHQucHVzaChuaS4kKSxIdC5wdXNoKG5pLl8kKSxmbz1MZVtaW1oubGVuZ3RoLTJdXVtaW1oubGVuZ3RoLTFdXSxaLnB1c2goZm8pO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxudD1mdW5jdGlvbigpe3ZhciBPdD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihFdCxaKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEV0LFopO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEV0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oQnQsRXQpe3JldHVybiB0aGlzLnl5PUV0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1CdCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgQnQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUJ0LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1CdCx0aGlzLm1hdGNoZWQrPUJ0O3ZhciBFdD1CdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEV0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxCdH0sdW5wdXQ6ZnVuY3Rpb24oQnQpe3ZhciBFdD1CdC5sZW5ndGgsWj1CdC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUJ0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1FdCksdGhpcy5vZmZzZXQtPUV0O3ZhciBDdD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxaLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Wi5sZW5ndGgtMSk7dmFyIHh0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpaPyhaLmxlbmd0aD09PUN0Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrQ3RbQ3QubGVuZ3RoLVoubGVuZ3RoXS5sZW5ndGgtWlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUV0fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3h0WzBdLHh0WzBdK3RoaXMueXlsZW5nLUV0XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oQnQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShCdCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgQnQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihCdC5sZW5ndGg+MjA/Ii4uLiI6IiIpK0J0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIEJ0PXRoaXMubWF0Y2g7cmV0dXJuIEJ0Lmxlbmd0aDwyMCYmKEJ0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1CdC5sZW5ndGgpKSwoQnQuc3Vic3RyKDAsMjApKyhCdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEJ0PXRoaXMucGFzdElucHV0KCksRXQ9bmV3IEFycmF5KEJ0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEJ0K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtFdCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oQnQsRXQpe3ZhciBaLEN0LHh0O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJih4dD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih4dC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxDdD1CdFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksQ3QmJih0aGlzLnl5bGluZW5vKz1DdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpDdD9DdFtDdC5sZW5ndGgtMV0ubGVuZ3RoLUN0W0N0Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK0J0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPUJ0WzBdLHRoaXMubWF0Y2grPUJ0WzBdLHRoaXMubWF0Y2hlcz1CdCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShCdFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9QnRbMF0sWj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxFdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxaKXJldHVybiBaO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBIdCBpbiB4dCl0aGlzW0h0XT14dFtIdF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgQnQsRXQsWixDdDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciB4dD10aGlzLl9jdXJyZW50UnVsZXMoKSxIdD0wO0h0PHh0Lmxlbmd0aDtIdCsrKWlmKFo9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t4dFtIdF1dKSxaJiYoIUV0fHxaWzBdLmxlbmd0aD5FdFswXS5sZW5ndGgpKXtpZihFdD1aLEN0PUh0LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEJ0PXRoaXMudGVzdF9tYXRjaChaLHh0W0h0XSksQnQhPT0hMSlyZXR1cm4gQnQ7aWYodGhpcy5fYmFja3RyYWNrKXtFdD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBFdD8oQnQ9dGhpcy50ZXN0X21hdGNoKEV0LHh0W0N0XSksQnQhPT0hMT9CdDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIEV0PXRoaXMubmV4dCgpO3JldHVybiBFdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oRXQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChFdCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIEV0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEV0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oRXQpe3JldHVybiBFdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEV0fHwwKSxFdD49MD90aGlzLmNvbmRpdGlvblN0YWNrW0V0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihFdCl7dGhpcy5iZWdpbihFdCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oRXQsWixDdCx4dCl7c3dpdGNoKEN0KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM0O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM0O2Nhc2UgNDpyZXR1cm4gMzQ7Y2FzZSA1OmJyZWFrO2Nhc2UgNjpyZXR1cm4gMTA7Y2FzZSA3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX3RpdGxlIiksMTk7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX2Rlc2NyIiksMjE7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTE6dGhpcy5wdXNoU3RhdGUoImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiA1O2Nhc2UgMTU6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImF4aXNfZGF0YSIpLCJYX0FYSVMiO2Nhc2UgMTc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJheGlzX2RhdGEiKSwiWV9BWElTIjtjYXNlIDE4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYXhpc19iYW5kX2RhdGEiKSwyNDtjYXNlIDE5OnJldHVybiAzMTtjYXNlIDIwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZGF0YSIpLDE2O2Nhc2UgMjE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkYXRhIiksMTg7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRhdGFfaW5uZXIiKSwyNDtjYXNlIDIzOnJldHVybiAyNztjYXNlIDI0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjY7Y2FzZSAyNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNjp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAyNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyODpyZXR1cm4iU1RSIjtjYXNlIDI5OnJldHVybiAyNDtjYXNlIDMwOnJldHVybiAyNjtjYXNlIDMxOnJldHVybiA0MztjYXNlIDMyOnJldHVybiJDT0xPTiI7Y2FzZSAzMzpyZXR1cm4gNDQ7Y2FzZSAzNDpyZXR1cm4gMjg7Y2FzZSAzNTpyZXR1cm4gNDU7Y2FzZSAzNjpyZXR1cm4gNDY7Y2FzZSAzNzpyZXR1cm4gNDg7Y2FzZSAzODpyZXR1cm4gNTA7Y2FzZSAzOTpyZXR1cm4gNDc7Y2FzZSA0MDpyZXR1cm4gNDE7Y2FzZSA0MTpyZXR1cm4gNDk7Y2FzZSA0MjpyZXR1cm4gNDI7Y2FzZSA0MzpicmVhaztjYXNlIDQ0OnJldHVybiAzNTtjYXNlIDQ1OnJldHVybiAzNn19LHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oihccj9cbikpL2ksL14oPzooXHI/XG4pKS9pLC9eKD86W1xuXHJdKykvaSwvXig/OiUlW15cbl0qKS9pLC9eKD86dGl0bGVcYikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpceykvaSwvXig/OlteXH1dKikvaSwvXig/Onh5Y2hhcnQtYmV0YVxiKS9pLC9eKD86KD86dmVydGljYWx8aG9yaXpvbnRhbCkpL2ksL14oPzp4LWF4aXNcYikvaSwvXig/OnktYXhpc1xiKS9pLC9eKD86XFspL2ksL14oPzotLT4pL2ksL14oPzpsaW5lXGIpL2ksL14oPzpiYXJcYikvaSwvXig/OlxbKS9pLC9eKD86WystXT8oPzpcZCsoPzpcLlxkKyk/fFwuXGQrKSkvaSwvXig/OlxdKS9pLC9eKD86KD86YFwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHsgdGhpc1wucHVzaFN0YXRlXChtZF9zdHJpbmdcKTsgXH1cbjxtZF9zdHJpbmc+XChcPzpcKFw/IWAiXClcLlwpXCsgICAgICAgICAgICAgICAgICBceyByZXR1cm4gTURfU1RSOyBcfVxuPG1kX3N0cmluZz5cKFw/OmApKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpcWykvaSwvXig/OlxdKS9pLC9eKD86W0EtWmEtel0rKS9pLC9eKD86OikvaSwvXig/OlwrKS9pLC9eKD86LCkvaSwvXig/Oj0pL2ksL14oPzpcKikvaSwvXig/OiMpL2ksL14oPzpbXF9dKS9pLC9eKD86XC4pL2ksL14oPzomKS9pLC9eKD86LSkvaSwvXig/OlswLTldKykvaSwvXig/OlxzKykvaSwvXig/OjspL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntkYXRhX2lubmVyOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyMywyNCwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxkYXRhOntydWxlczpbMCwxLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDIwLDIxLDIyLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9LGF4aXNfYmFuZF9kYXRhOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyNCwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxheGlzX2RhdGE6e3J1bGVzOlswLDEsMiw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjMsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sbWRfc3RyaW5nOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI3LDI4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDIwLDIxLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIE90fSgpO1R0LmxleGVyPW50O2Z1bmN0aW9uIEl0KCl7dGhpcy55eT17fX1yZXR1cm4gSXQucHJvdG90eXBlPVR0LFR0LlBhcnNlcj1JdCxuZXcgSXR9KCk7b2d0LnBhcnNlcj1vZ3Q7Y29uc3QgeUhlPW9ndDtmdW5jdGlvbiBvUnQoaSl7cmV0dXJuIGkudHlwZT09PSJiYXIifWZ1bmN0aW9uIGNSdChpKXtyZXR1cm4gaS50eXBlPT09ImJhbmQifWZ1bmN0aW9uIEJGKGkpe3JldHVybiBpLnR5cGU9PT0ibGluZWFyIn1jbGFzcyB1UnR7Y29uc3RydWN0b3IoYSl7dGhpcy5wYXJlbnRHcm91cD1hfWdldE1heERpbWVuc2lvbihhLGYpe2lmKCF0aGlzLnBhcmVudEdyb3VwKXJldHVybnt3aWR0aDphLnJlZHVjZSgobSxiKT0+TWF0aC5tYXgoYi5sZW5ndGgsbSksMCkqZixoZWlnaHQ6Zn07Y29uc3QgcD17d2lkdGg6MCxoZWlnaHQ6MH0sdz10aGlzLnBhcmVudEdyb3VwLmFwcGVuZCgiZyIpLmF0dHIoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5hdHRyKCJmb250LXNpemUiLGYpO2Zvcihjb25zdCBtIG9mIGEpe2NvbnN0IGI9ayRlKHcsMSxtKSxFPWI/Yi53aWR0aDptLmxlbmd0aCpmLF89Yj9iLmhlaWdodDpmO3Aud2lkdGg9TWF0aC5tYXgocC53aWR0aCxFKSxwLmhlaWdodD1NYXRoLm1heChwLmhlaWdodCxfKX1yZXR1cm4gdy5yZW1vdmUoKSxwfX1jb25zdCBsUnQ9LjcsaFJ0PS4yO2NsYXNzIGZSdHtjb25zdHJ1Y3RvcihhLGYscCx3KXt0aGlzLmF4aXNDb25maWc9YSx0aGlzLnRpdGxlPWYsdGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvcj1wLHRoaXMuYXhpc1RoZW1lQ29uZmlnPXcsdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5heGlzUG9zaXRpb249ImxlZnQiLHRoaXMuc2hvd1RpdGxlPSExLHRoaXMuc2hvd0xhYmVsPSExLHRoaXMuc2hvd1RpY2s9ITEsdGhpcy5zaG93QXhpc0xpbmU9ITEsdGhpcy5vdXRlclBhZGRpbmc9MCx0aGlzLnRpdGxlVGV4dEhlaWdodD0wLHRoaXMubGFiZWxUZXh0SGVpZ2h0PTAsdGhpcy5yYW5nZT1bMCwxMF0sdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5heGlzUG9zaXRpb249ImxlZnQifXNldFJhbmdlKGEpe3RoaXMucmFuZ2U9YSx0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0Inx8dGhpcy5heGlzUG9zaXRpb249PT0icmlnaHQiP3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1hWzFdLWFbMF06dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9YVsxXS1hWzBdLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpfWdldFJhbmdlKCl7cmV0dXJuW3RoaXMucmFuZ2VbMF0rdGhpcy5vdXRlclBhZGRpbmcsdGhpcy5yYW5nZVsxXS10aGlzLm91dGVyUGFkZGluZ119c2V0QXhpc1Bvc2l0aW9uKGEpe3RoaXMuYXhpc1Bvc2l0aW9uPWEsdGhpcy5zZXRSYW5nZSh0aGlzLnJhbmdlKX1nZXRUaWNrRGlzdGFuY2UoKXtjb25zdCBhPXRoaXMuZ2V0UmFuZ2UoKTtyZXR1cm4gTWF0aC5hYnMoYVswXS1hWzFdKS90aGlzLmdldFRpY2tWYWx1ZXMoKS5sZW5ndGh9Z2V0QXhpc091dGVyUGFkZGluZygpe3JldHVybiB0aGlzLm91dGVyUGFkZGluZ31nZXRMYWJlbERpbWVuc2lvbigpe3JldHVybiB0aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbih0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAoYT0+YS50b1N0cmluZygpKSx0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSl9cmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKXtsUnQqdGhpcy5nZXRUaWNrRGlzdGFuY2UoKT50aGlzLm91dGVyUGFkZGluZyoyJiYodGhpcy5vdXRlclBhZGRpbmc9TWF0aC5mbG9vcihsUnQqdGhpcy5nZXRUaWNrRGlzdGFuY2UoKS8yKSksdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCl9Y2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KGEpe2xldCBmPWEuaGVpZ2h0O2lmKHRoaXMuYXhpc0NvbmZpZy5zaG93QXhpc0xpbmUmJmY+dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgmJihmLT10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCx0aGlzLnNob3dBeGlzTGluZT0hMCksdGhpcy5heGlzQ29uZmlnLnNob3dMYWJlbCl7Y29uc3QgcD10aGlzLmdldExhYmVsRGltZW5zaW9uKCksdz1oUnQqYS53aWR0aDt0aGlzLm91dGVyUGFkZGluZz1NYXRoLm1pbihwLndpZHRoLzIsdyk7Y29uc3QgbT1wLmhlaWdodCt0aGlzLmF4aXNDb25maWcubGFiZWxQYWRkaW5nKjI7dGhpcy5sYWJlbFRleHRIZWlnaHQ9cC5oZWlnaHQsbTw9ZiYmKGYtPW0sdGhpcy5zaG93TGFiZWw9ITApfWlmKHRoaXMuYXhpc0NvbmZpZy5zaG93VGljayYmZj49dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgmJih0aGlzLnNob3dUaWNrPSEwLGYtPXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoKSx0aGlzLmF4aXNDb25maWcuc2hvd1RpdGxlJiZ0aGlzLnRpdGxlKXtjb25zdCBwPXRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFt0aGlzLnRpdGxlXSx0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSksdz1wLmhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI7dGhpcy50aXRsZVRleHRIZWlnaHQ9cC5oZWlnaHQsdzw9ZiYmKGYtPXcsdGhpcy5zaG93VGl0bGU9ITApfXRoaXMuYm91bmRpbmdSZWN0LndpZHRoPWEud2lkdGgsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PWEuaGVpZ2h0LWZ9Y2FsY3VsYXRlU3BhY2VJZkRyYXduVmVydGljYWwoYSl7bGV0IGY9YS53aWR0aDtpZih0aGlzLmF4aXNDb25maWcuc2hvd0F4aXNMaW5lJiZmPnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoJiYoZi09dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgsdGhpcy5zaG93QXhpc0xpbmU9ITApLHRoaXMuYXhpc0NvbmZpZy5zaG93TGFiZWwpe2NvbnN0IHA9dGhpcy5nZXRMYWJlbERpbWVuc2lvbigpLHc9aFJ0KmEuaGVpZ2h0O3RoaXMub3V0ZXJQYWRkaW5nPU1hdGgubWluKHAuaGVpZ2h0LzIsdyk7Y29uc3QgbT1wLndpZHRoK3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcqMjttPD1mJiYoZi09bSx0aGlzLnNob3dMYWJlbD0hMCl9aWYodGhpcy5heGlzQ29uZmlnLnNob3dUaWNrJiZmPj10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aCYmKHRoaXMuc2hvd1RpY2s9ITAsZi09dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgpLHRoaXMuYXhpc0NvbmZpZy5zaG93VGl0bGUmJnRoaXMudGl0bGUpe2NvbnN0IHA9dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvci5nZXRNYXhEaW1lbnNpb24oW3RoaXMudGl0bGVdLHRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplKSx3PXAuaGVpZ2h0K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcqMjt0aGlzLnRpdGxlVGV4dEhlaWdodD1wLmhlaWdodCx3PD1mJiYoZi09dyx0aGlzLnNob3dUaXRsZT0hMCl9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9YS53aWR0aC1mLHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1hLmhlaWdodH1jYWxjdWxhdGVTcGFjZShhKXtyZXR1cm4gdGhpcy5heGlzUG9zaXRpb249PT0ibGVmdCJ8fHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Ij90aGlzLmNhbGN1bGF0ZVNwYWNlSWZEcmF3blZlcnRpY2FsKGEpOnRoaXMuY2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KGEpLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpLHt3aWR0aDp0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCxoZWlnaHQ6dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0fX1zZXRCb3VuZGluZ0JveFhZKGEpe3RoaXMuYm91bmRpbmdSZWN0Lng9YS54LHRoaXMuYm91bmRpbmdSZWN0Lnk9YS55fWdldERyYXdhYmxlRWxlbWVudHNGb3JMZWZ0QXhpcygpe2NvbnN0IGE9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IGY9dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO2EucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsImF4aXNsLWxpbmUiXSxkYXRhOlt7cGF0aDpgTSAke2Z9LCR7dGhpcy5ib3VuZGluZ1JlY3QueX0gTCAke2Z9LCR7dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9IGAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmYS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsibGVmdC1heGlzIiwibGFiZWwiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChmPT4oe3RleHQ6Zi50b1N0cmluZygpLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC0odGhpcy5zaG93TGFiZWw/dGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZzowKS0odGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKS0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCkseTp0aGlzLmdldFNjYWxlVmFsdWUoZiksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6Im1pZGRsZSIsaG9yaXpvbnRhbFBvczoicmlnaHQifSkpfSksdGhpcy5zaG93VGljayl7Y29uc3QgZj10aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRoLSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKTthLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKHA9Pih7cGF0aDpgTSAke2Z9LCR7dGhpcy5nZXRTY2FsZVZhbHVlKHApfSBMICR7Zi10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aH0sJHt0aGlzLmdldFNjYWxlVmFsdWUocCl9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZhLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJ0aXRsZSJdLGRhdGE6W3t0ZXh0OnRoaXMudGl0bGUseDp0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC8yLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjoyNzAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksYX1nZXREcmF3YWJsZUVsZW1lbnRzRm9yQm90dG9tQXhpcygpe2NvbnN0IGE9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IGY9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO2EucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImJvdHRvbS1heGlzIiwiYXhpcy1saW5lIl0sZGF0YTpbe3BhdGg6YE0gJHt0aGlzLmJvdW5kaW5nUmVjdC54fSwke2Z9IEwgJHt0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRofSwke2Z9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmF4aXNMaW5lQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGh9XX0pfWlmKHRoaXMuc2hvd0xhYmVsJiZhLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsImxhYmVsIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAoZj0+KHt0ZXh0OmYudG9TdHJpbmcoKSx4OnRoaXMuZ2V0U2NhbGVWYWx1ZShmKSx5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZysodGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKSsodGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn0pKX0pLHRoaXMuc2hvd1RpY2spe2NvbnN0IGY9dGhpcy5ib3VuZGluZ1JlY3QueSsodGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCk7YS5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsiYm90dG9tLWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKHA9Pih7cGF0aDpgTSAke3RoaXMuZ2V0U2NhbGVWYWx1ZShwKX0sJHtmfSBMICR7dGhpcy5nZXRTY2FsZVZhbHVlKHApfSwke2YrdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGh9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZhLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsInRpdGxlIl0sZGF0YTpbe3RleHQ6dGhpcy50aXRsZSx4OnRoaXMucmFuZ2VbMF0rKHRoaXMucmFuZ2VbMV0tdGhpcy5yYW5nZVswXSkvMix5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmctdGhpcy50aXRsZVRleHRIZWlnaHQsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksYX1nZXREcmF3YWJsZUVsZW1lbnRzRm9yVG9wQXhpcygpe2NvbnN0IGE9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IGY9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgvMjthLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJ0b3AtYXhpcyIsImF4aXMtbGluZSJdLGRhdGE6W3twYXRoOmBNICR7dGhpcy5ib3VuZGluZ1JlY3QueH0sJHtmfSBMICR7dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHtmfWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmYS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsidG9wLWF4aXMiLCJsYWJlbCJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKGY9Pih7dGV4dDpmLnRvU3RyaW5nKCkseDp0aGlzLmdldFNjYWxlVmFsdWUoZikseTp0aGlzLmJvdW5kaW5nUmVjdC55Kyh0aGlzLnNob3dUaXRsZT90aGlzLnRpdGxlVGV4dEhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI6MCkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmxhYmVsQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifSkpfSksdGhpcy5zaG93VGljayl7Y29uc3QgZj10aGlzLmJvdW5kaW5nUmVjdC55O2EucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwidGlja3MiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChwPT4oe3BhdGg6YE0gJHt0aGlzLmdldFNjYWxlVmFsdWUocCl9LCR7Zit0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApfSBMICR7dGhpcy5nZXRTY2FsZVZhbHVlKHApfSwke2YrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoLSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKX1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy50aWNrV2lkdGh9KSl9KX1yZXR1cm4gdGhpcy5zaG93VGl0bGUmJmEucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwidGl0bGUiXSxkYXRhOlt7dGV4dDp0aGlzLnRpdGxlLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9XX0pLGF9Z2V0RHJhd2FibGVFbGVtZW50cygpe2lmKHRoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQiKXJldHVybiB0aGlzLmdldERyYXdhYmxlRWxlbWVudHNGb3JMZWZ0QXhpcygpO2lmKHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Iil0aHJvdyBFcnJvcigiRHJhd2luZyBvZiByaWdodCBheGlzIGlzIG5vdCBpbXBsZW1lbnRlZCIpO3JldHVybiB0aGlzLmF4aXNQb3NpdGlvbj09PSJib3R0b20iP3RoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvckJvdHRvbUF4aXMoKTp0aGlzLmF4aXNQb3NpdGlvbj09PSJ0b3AiP3RoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvclRvcEF4aXMoKTpbXX19Y2xhc3MgeEhlIGV4dGVuZHMgZlJ0e2NvbnN0cnVjdG9yKGEsZixwLHcsbSl7c3VwZXIoYSx3LG0sZiksdGhpcy5jYXRlZ29yaWVzPXAsdGhpcy5zY2FsZT1TMXQoKS5kb21haW4odGhpcy5jYXRlZ29yaWVzKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfXNldFJhbmdlKGEpe3N1cGVyLnNldFJhbmdlKGEpfXJlY2FsY3VsYXRlU2NhbGUoKXt0aGlzLnNjYWxlPVMxdCgpLmRvbWFpbih0aGlzLmNhdGVnb3JpZXMpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSkucGFkZGluZ0lubmVyKDEpLnBhZGRpbmdPdXRlcigwKS5hbGlnbiguNSksVXQudHJhY2UoIkJhbmRBeGlzIGF4aXMgZmluYWwgY2F0ZWdvcmllcywgcmFuZ2U6ICIsdGhpcy5jYXRlZ29yaWVzLHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLmNhdGVnb3JpZXN9Z2V0U2NhbGVWYWx1ZShhKXtyZXR1cm4gdGhpcy5zY2FsZShhKXx8dGhpcy5nZXRSYW5nZSgpWzBdfX1jbGFzcyBrSGUgZXh0ZW5kcyBmUnR7Y29uc3RydWN0b3IoYSxmLHAsdyxtKXtzdXBlcihhLHcsbSxmKSx0aGlzLmRvbWFpbj1wLHRoaXMuc2NhbGU9QUEoKS5kb21haW4odGhpcy5kb21haW4pLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLnNjYWxlLnRpY2tzKCl9cmVjYWxjdWxhdGVTY2FsZSgpe2NvbnN0IGE9Wy4uLnRoaXMuZG9tYWluXTt0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0IiYmYS5yZXZlcnNlKCksdGhpcy5zY2FsZT1BQSgpLmRvbWFpbihhKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfWdldFNjYWxlVmFsdWUoYSl7cmV0dXJuIHRoaXMuc2NhbGUoYSl9fWZ1bmN0aW9uIGRSdChpLGEsZixwKXtjb25zdCB3PW5ldyB1UnQocCk7cmV0dXJuIGNSdChpKT9uZXcgeEhlKGEsZixpLmNhdGVnb3JpZXMsaS50aXRsZSx3KTpuZXcga0hlKGEsZixbaS5taW4saS5tYXhdLGkudGl0bGUsdyl9Y2xhc3MgRUhle2NvbnN0cnVjdG9yKGEsZixwLHcpe3RoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3I9YSx0aGlzLmNoYXJ0Q29uZmlnPWYsdGhpcy5jaGFydERhdGE9cCx0aGlzLmNoYXJ0VGhlbWVDb25maWc9dyx0aGlzLmJvdW5kaW5nUmVjdD17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSx0aGlzLnNob3dDaGFydFRpdGxlPSExfXNldEJvdW5kaW5nQm94WFkoYSl7dGhpcy5ib3VuZGluZ1JlY3QueD1hLngsdGhpcy5ib3VuZGluZ1JlY3QueT1hLnl9Y2FsY3VsYXRlU3BhY2UoYSl7Y29uc3QgZj10aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbihbdGhpcy5jaGFydERhdGEudGl0bGVdLHRoaXMuY2hhcnRDb25maWcudGl0bGVGb250U2l6ZSkscD1NYXRoLm1heChmLndpZHRoLGEud2lkdGgpLHc9Zi5oZWlnaHQrMip0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlUGFkZGluZztyZXR1cm4gZi53aWR0aDw9cCYmZi5oZWlnaHQ8PXcmJnRoaXMuY2hhcnRDb25maWcuc2hvd1RpdGxlJiZ0aGlzLmNoYXJ0RGF0YS50aXRsZSYmKHRoaXMuYm91bmRpbmdSZWN0LndpZHRoPXAsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PXcsdGhpcy5zaG93Q2hhcnRUaXRsZT0hMCkse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLnNob3dDaGFydFRpdGxlJiZhLnB1c2goe2dyb3VwVGV4dHM6WyJjaGFydC10aXRsZSJdLHR5cGU6InRleHQiLGRhdGE6W3tmb250U2l6ZTp0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlRm9udFNpemUsdGV4dDp0aGlzLmNoYXJ0RGF0YS50aXRsZSx2ZXJ0aWNhbFBvczoibWlkZGxlIixob3Jpem9udGFsUG9zOiJjZW50ZXIiLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQvMixmaWxsOnRoaXMuY2hhcnRUaGVtZUNvbmZpZy50aXRsZUNvbG9yLHJvdGF0aW9uOjB9XX0pLGF9fWZ1bmN0aW9uIFRIZShpLGEsZixwKXtjb25zdCB3PW5ldyB1UnQocCk7cmV0dXJuIG5ldyBFSGUodyxpLGEsZil9Y2xhc3MgQ0hle2NvbnN0cnVjdG9yKGEsZixwLHcsbSl7dGhpcy5wbG90RGF0YT1hLHRoaXMueEF4aXM9Zix0aGlzLnlBeGlzPXAsdGhpcy5vcmllbnRhdGlvbj13LHRoaXMucGxvdEluZGV4PW19Z2V0RHJhd2FibGVFbGVtZW50KCl7Y29uc3QgYT10aGlzLnBsb3REYXRhLmRhdGEubWFwKHA9Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUocFswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKHBbMV0pXSk7bGV0IGY7cmV0dXJuIHRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/Zj1FNSgpLnkocD0+cFswXSkueChwPT5wWzFdKShhKTpmPUU1KCkueChwPT5wWzBdKS55KHA9PnBbMV0pKGEpLGY/W3tncm91cFRleHRzOlsicGxvdCIsYGxpbmUtcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InBhdGgiLGRhdGE6W3twYXRoOmYsc3Ryb2tlRmlsbDp0aGlzLnBsb3REYXRhLnN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5wbG90RGF0YS5zdHJva2VXaWR0aH1dfV06W119fWNsYXNzIF9IZXtjb25zdHJ1Y3RvcihhLGYscCx3LG0sYil7dGhpcy5iYXJEYXRhPWEsdGhpcy5ib3VuZGluZ1JlY3Q9Zix0aGlzLnhBeGlzPXAsdGhpcy55QXhpcz13LHRoaXMub3JpZW50YXRpb249bSx0aGlzLnBsb3RJbmRleD1ifWdldERyYXdhYmxlRWxlbWVudCgpe2NvbnN0IGE9dGhpcy5iYXJEYXRhLmRhdGEubWFwKG09Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUobVswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKG1bMV0pXSksZj0uMDUscD1NYXRoLm1pbih0aGlzLnhBeGlzLmdldEF4aXNPdXRlclBhZGRpbmcoKSoyLHRoaXMueEF4aXMuZ2V0VGlja0Rpc3RhbmNlKCkpKigxLWYpLHc9cC8yO3JldHVybiB0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiP1t7Z3JvdXBUZXh0czpbInBsb3QiLGBiYXItcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InJlY3QiLGRhdGE6YS5tYXAobT0+KHt4OnRoaXMuYm91bmRpbmdSZWN0LngseTptWzBdLXcsaGVpZ2h0OnAsd2lkdGg6bVsxXS10aGlzLmJvdW5kaW5nUmVjdC54LGZpbGw6dGhpcy5iYXJEYXRhLmZpbGwsc3Ryb2tlV2lkdGg6MCxzdHJva2VGaWxsOnRoaXMuYmFyRGF0YS5maWxsfSkpfV06W3tncm91cFRleHRzOlsicGxvdCIsYGJhci1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sdHlwZToicmVjdCIsZGF0YTphLm1hcChtPT4oe3g6bVswXS13LHk6bVsxXSx3aWR0aDpwLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC1tWzFdLGZpbGw6dGhpcy5iYXJEYXRhLmZpbGwsc3Ryb2tlV2lkdGg6MCxzdHJva2VGaWxsOnRoaXMuYmFyRGF0YS5maWxsfSkpfV19fWNsYXNzIFNIZXtjb25zdHJ1Y3RvcihhLGYscCl7dGhpcy5jaGFydENvbmZpZz1hLHRoaXMuY2hhcnREYXRhPWYsdGhpcy5jaGFydFRoZW1lQ29uZmlnPXAsdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19c2V0QXhlcyhhLGYpe3RoaXMueEF4aXM9YSx0aGlzLnlBeGlzPWZ9c2V0Qm91bmRpbmdCb3hYWShhKXt0aGlzLmJvdW5kaW5nUmVjdC54PWEueCx0aGlzLmJvdW5kaW5nUmVjdC55PWEueX1jYWxjdWxhdGVTcGFjZShhKXtyZXR1cm4gdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9YS53aWR0aCx0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9YS5oZWlnaHQse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtpZighKHRoaXMueEF4aXMmJnRoaXMueUF4aXMpKXRocm93IEVycm9yKCJBeGVzIG11c3QgYmUgcGFzc2VkIHRvIHJlbmRlciBQbG90cyIpO2NvbnN0IGE9W107Zm9yKGNvbnN0W2YscF1vZiB0aGlzLmNoYXJ0RGF0YS5wbG90cy5lbnRyaWVzKCkpc3dpdGNoKHAudHlwZSl7Y2FzZSJsaW5lIjp7Y29uc3Qgdz1uZXcgQ0hlKHAsdGhpcy54QXhpcyx0aGlzLnlBeGlzLHRoaXMuY2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbixmKTthLnB1c2goLi4udy5nZXREcmF3YWJsZUVsZW1lbnQoKSl9YnJlYWs7Y2FzZSJiYXIiOntjb25zdCB3PW5ldyBfSGUocCx0aGlzLmJvdW5kaW5nUmVjdCx0aGlzLnhBeGlzLHRoaXMueUF4aXMsdGhpcy5jaGFydENvbmZpZy5jaGFydE9yaWVudGF0aW9uLGYpO2EucHVzaCguLi53LmdldERyYXdhYmxlRWxlbWVudCgpKX1icmVha31yZXR1cm4gYX19ZnVuY3Rpb24gQUhlKGksYSxmKXtyZXR1cm4gbmV3IFNIZShpLGEsZil9Y2xhc3MgTEhle2NvbnN0cnVjdG9yKGEsZixwLHcpe3RoaXMuY2hhcnRDb25maWc9YSx0aGlzLmNoYXJ0RGF0YT1mLHRoaXMuY29tcG9uZW50U3RvcmU9e3RpdGxlOlRIZShhLGYscCx3KSxwbG90OkFIZShhLGYscCkseEF4aXM6ZFJ0KGYueEF4aXMsYS54QXhpcyx7dGl0bGVDb2xvcjpwLnhBeGlzVGl0bGVDb2xvcixsYWJlbENvbG9yOnAueEF4aXNMYWJlbENvbG9yLHRpY2tDb2xvcjpwLnhBeGlzVGlja0NvbG9yLGF4aXNMaW5lQ29sb3I6cC54QXhpc0xpbmVDb2xvcn0sdykseUF4aXM6ZFJ0KGYueUF4aXMsYS55QXhpcyx7dGl0bGVDb2xvcjpwLnlBeGlzVGl0bGVDb2xvcixsYWJlbENvbG9yOnAueUF4aXNMYWJlbENvbG9yLHRpY2tDb2xvcjpwLnlBeGlzVGlja0NvbG9yLGF4aXNMaW5lQ29sb3I6cC55QXhpc0xpbmVDb2xvcn0sdyl9fWNhbGN1bGF0ZVZlcnRpY2FsU3BhY2UoKXtsZXQgYT10aGlzLmNoYXJ0Q29uZmlnLndpZHRoLGY9dGhpcy5jaGFydENvbmZpZy5oZWlnaHQscD0wLHc9MCxtPU1hdGguZmxvb3IoYSp0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLGI9TWF0aC5mbG9vcihmKnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCksRT10aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOm0saGVpZ2h0OmJ9KTthLT1FLndpZHRoLGYtPUUuaGVpZ2h0LEU9dGhpcy5jb21wb25lbnRTdG9yZS50aXRsZS5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6dGhpcy5jaGFydENvbmZpZy53aWR0aCxoZWlnaHQ6Zn0pLHc9RS5oZWlnaHQsZi09RS5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oImJvdHRvbSIpLEU9dGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6YSxoZWlnaHQ6Zn0pLGYtPUUuaGVpZ2h0LHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJsZWZ0IiksRT10aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDphLGhlaWdodDpmfSkscD1FLndpZHRoLGEtPUUud2lkdGgsYT4wJiYobSs9YSxhPTApLGY+MCYmKGIrPWYsZj0wKSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOm0saGVpZ2h0OmJ9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0Qm91bmRpbmdCb3hYWSh7eDpwLHk6d30pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0UmFuZ2UoW3AscCttXSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OnAseTp3K2J9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFt3LHcrYl0pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDowLHk6d30pLHRoaXMuY2hhcnREYXRhLnBsb3RzLnNvbWUoXz0+b1J0KF8pKSYmdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0JhcigpfWNhbGN1bGF0ZUhvcml6b25hdGFsU3BhY2UoKXtsZXQgYT10aGlzLmNoYXJ0Q29uZmlnLndpZHRoLGY9dGhpcy5jaGFydENvbmZpZy5oZWlnaHQscD0wLHc9MCxtPTAsYj1NYXRoLmZsb29yKGEqdGhpcy5jaGFydENvbmZpZy5wbG90UmVzZXJ2ZWRTcGFjZVBlcmNlbnQvMTAwKSxFPU1hdGguZmxvb3IoZip0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLF89dGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpiLGhlaWdodDpFfSk7YS09Xy53aWR0aCxmLT1fLmhlaWdodCxfPXRoaXMuY29tcG9uZW50U3RvcmUudGl0bGUuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnRoaXMuY2hhcnRDb25maWcud2lkdGgsaGVpZ2h0OmZ9KSxwPV8uaGVpZ2h0LGYtPV8uaGVpZ2h0LHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJsZWZ0IiksXz10aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDphLGhlaWdodDpmfSksYS09Xy53aWR0aCx3PV8ud2lkdGgsdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRBeGlzUG9zaXRpb24oInRvcCIpLF89dGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6YSxoZWlnaHQ6Zn0pLGYtPV8uaGVpZ2h0LG09cCtfLmhlaWdodCxhPjAmJihiKz1hLGE9MCksZj4wJiYoRSs9ZixmPTApLHRoaXMuY29tcG9uZW50U3RvcmUucGxvdC5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6YixoZWlnaHQ6RX0pLHRoaXMuY29tcG9uZW50U3RvcmUucGxvdC5zZXRCb3VuZGluZ0JveFhZKHt4OncseTptfSksdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRSYW5nZShbdyx3K2JdKSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEJvdW5kaW5nQm94WFkoe3g6dyx5OnB9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldFJhbmdlKFttLG0rRV0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDowLHk6bX0pLHRoaXMuY2hhcnREYXRhLnBsb3RzLnNvbWUoQT0+b1J0KEEpKSYmdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0JhcigpfWNhbGN1bGF0ZVNwYWNlKCl7dGhpcy5jaGFydENvbmZpZy5jaGFydE9yaWVudGF0aW9uPT09Imhvcml6b250YWwiP3RoaXMuY2FsY3VsYXRlSG9yaXpvbmF0YWxTcGFjZSgpOnRoaXMuY2FsY3VsYXRlVmVydGljYWxTcGFjZSgpfWdldERyYXdhYmxlRWxlbWVudCgpe3RoaXMuY2FsY3VsYXRlU3BhY2UoKTtjb25zdCBhPVtdO3RoaXMuY29tcG9uZW50U3RvcmUucGxvdC5zZXRBeGVzKHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMsdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcyk7Zm9yKGNvbnN0IGYgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudFN0b3JlKSlhLnB1c2goLi4uZi5nZXREcmF3YWJsZUVsZW1lbnRzKCkpO3JldHVybiBhfX1jbGFzcyBNSGV7c3RhdGljIGJ1aWxkKGEsZixwLHcpe3JldHVybiBuZXcgTEhlKGEsZixwLHcpLmdldERyYXdhYmxlRWxlbWVudCgpfX1sZXQgUkY9MCxnUnQsakY9YlJ0KCksJEY9cFJ0KCksZnU9d1J0KCksY2d0PSRGLnBsb3RDb2xvclBhbGV0dGUuc3BsaXQoIiwiKS5tYXAoaT0+aS50cmltKCkpLEJZPSExLHVndD0hMTtmdW5jdGlvbiBwUnQoKXtjb25zdCBpPVgxdCgpLGE9RmQoKTtyZXR1cm4gckYoaS54eUNoYXJ0LGEudGhlbWVWYXJpYWJsZXMueHlDaGFydCl9ZnVuY3Rpb24gYlJ0KCl7Y29uc3QgaT1GZCgpO3JldHVybiByRihaaC54eUNoYXJ0LGkueHlDaGFydCl9ZnVuY3Rpb24gd1J0KCl7cmV0dXJue3lBeGlzOnt0eXBlOiJsaW5lYXIiLHRpdGxlOiIiLG1pbjoxLzAsbWF4Oi0xLzB9LHhBeGlzOnt0eXBlOiJiYW5kIix0aXRsZToiIixjYXRlZ29yaWVzOltdfSx0aXRsZToiIixwbG90czpbXX19ZnVuY3Rpb24gbGd0KGkpe2NvbnN0IGE9RmQoKTtyZXR1cm4gUTEoaS50cmltKCksYSl9ZnVuY3Rpb24gREhlKGkpe2dSdD1pfWZ1bmN0aW9uIElIZShpKXtpPT09Imhvcml6b250YWwiP2pGLmNoYXJ0T3JpZW50YXRpb249Imhvcml6b250YWwiOmpGLmNoYXJ0T3JpZW50YXRpb249InZlcnRpY2FsIn1mdW5jdGlvbiBPSGUoaSl7ZnUueEF4aXMudGl0bGU9bGd0KGkudGV4dCl9ZnVuY3Rpb24gdlJ0KGksYSl7ZnUueEF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6ZnUueEF4aXMudGl0bGUsbWluOmksbWF4OmF9LEJZPSEwfWZ1bmN0aW9uIFBIZShpKXtmdS54QXhpcz17dHlwZToiYmFuZCIsdGl0bGU6ZnUueEF4aXMudGl0bGUsY2F0ZWdvcmllczppLm1hcChhPT5sZ3QoYS50ZXh0KSl9LEJZPSEwfWZ1bmN0aW9uIEZIZShpKXtmdS55QXhpcy50aXRsZT1sZ3QoaS50ZXh0KX1mdW5jdGlvbiBOSGUoaSxhKXtmdS55QXhpcz17dHlwZToibGluZWFyIix0aXRsZTpmdS55QXhpcy50aXRsZSxtaW46aSxtYXg6YX0sdWd0PSEwfWZ1bmN0aW9uIEJIZShpKXtjb25zdCBhPU1hdGgubWluKC4uLmkpLGY9TWF0aC5tYXgoLi4uaSkscD1CRihmdS55QXhpcyk/ZnUueUF4aXMubWluOjEvMCx3PUJGKGZ1LnlBeGlzKT9mdS55QXhpcy5tYXg6LTEvMDtmdS55QXhpcz17dHlwZToibGluZWFyIix0aXRsZTpmdS55QXhpcy50aXRsZSxtaW46TWF0aC5taW4ocCxhKSxtYXg6TWF0aC5tYXgodyxmKX19ZnVuY3Rpb24gbVJ0KGkpe2xldCBhPVtdO2lmKGkubGVuZ3RoPT09MClyZXR1cm4gYTtpZighQlkpe2NvbnN0IGY9QkYoZnUueEF4aXMpP2Z1LnhBeGlzLm1pbjoxLzAscD1CRihmdS54QXhpcyk/ZnUueEF4aXMubWF4Oi0xLzA7dlJ0KE1hdGgubWluKGYsMSksTWF0aC5tYXgocCxpLmxlbmd0aCkpfWlmKHVndHx8QkhlKGkpLGNSdChmdS54QXhpcykmJihhPWZ1LnhBeGlzLmNhdGVnb3JpZXMubWFwKChmLHApPT5bZixpW3BdXSkpLEJGKGZ1LnhBeGlzKSl7Y29uc3QgZj1mdS54QXhpcy5taW4scD1mdS54QXhpcy5tYXgsdz0ocC1mKzEpL2kubGVuZ3RoLG09W107Zm9yKGxldCBiPWY7Yjw9cDtiKz13KW0ucHVzaChgJHtifWApO2E9bS5tYXAoKGIsRSk9PltiLGlbRV1dKX1yZXR1cm4gYX1mdW5jdGlvbiB5UnQoaSl7cmV0dXJuIGNndFtpPT09MD8wOmklY2d0Lmxlbmd0aF19ZnVuY3Rpb24gUkhlKGksYSl7Y29uc3QgZj1tUnQoYSk7ZnUucGxvdHMucHVzaCh7dHlwZToibGluZSIsc3Ryb2tlRmlsbDp5UnQoUkYpLHN0cm9rZVdpZHRoOjIsZGF0YTpmfSksUkYrK31mdW5jdGlvbiBqSGUoaSxhKXtjb25zdCBmPW1SdChhKTtmdS5wbG90cy5wdXNoKHt0eXBlOiJiYXIiLGZpbGw6eVJ0KFJGKSxkYXRhOmZ9KSxSRisrfWZ1bmN0aW9uICRIZSgpe2lmKGZ1LnBsb3RzLmxlbmd0aD09PTApdGhyb3cgRXJyb3IoIk5vIFBsb3QgdG8gcmVuZGVyLCBwbGVhc2UgcHJvdmlkZSBhIHBsb3Qgd2l0aCBzb21lIGRhdGEiKTtyZXR1cm4gZnUudGl0bGU9cGcoKSxNSGUuYnVpbGQoakYsZnUsJEYsZ1J0KX1mdW5jdGlvbiB6SGUoKXtyZXR1cm4gJEZ9ZnVuY3Rpb24gcUhlKCl7cmV0dXJuIGpGfWNvbnN0IEhIZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOnlIZSxkYjp7Z2V0RHJhd2FibGVFbGVtOiRIZSxjbGVhcjpmdW5jdGlvbigpe2hnKCksUkY9MCxqRj1iUnQoKSxmdT13UnQoKSwkRj1wUnQoKSxjZ3Q9JEYucGxvdENvbG9yUGFsZXR0ZS5zcGxpdCgiLCIpLm1hcChpPT5pLnRyaW0oKSksQlk9ITEsdWd0PSExfSxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxzZXREaWFncmFtVGl0bGU6TmIsZ2V0RGlhZ3JhbVRpdGxlOnBnLGdldEFjY0Rlc2NyaXB0aW9uOmdnLHNldEFjY0Rlc2NyaXB0aW9uOmRnLHNldE9yaWVudGF0aW9uOklIZSxzZXRYQXhpc1RpdGxlOk9IZSxzZXRYQXhpc1JhbmdlRGF0YTp2UnQsc2V0WEF4aXNCYW5kOlBIZSxzZXRZQXhpc1RpdGxlOkZIZSxzZXRZQXhpc1JhbmdlRGF0YTpOSGUsc2V0TGluZURhdGE6UkhlLHNldEJhckRhdGE6akhlLHNldFRtcFNWR0c6REhlLGdldENoYXJ0VGhlbWVDb25maWc6ekhlLGdldENoYXJ0Q29uZmlnOnFIZX0scmVuZGVyZXI6e2RyYXc6KGksYSxmLHApPT57Y29uc3Qgdz1wLmRiLG09dy5nZXRDaGFydFRoZW1lQ29uZmlnKCksYj13LmdldENoYXJ0Q29uZmlnKCk7ZnVuY3Rpb24gRShldCl7cmV0dXJuIGV0PT09InRvcCI/InRleHQtYmVmb3JlLWVkZ2UiOiJtaWRkbGUifWZ1bmN0aW9uIF8oZXQpe3JldHVybiBldD09PSJsZWZ0Ij8ic3RhcnQiOmV0PT09InJpZ2h0Ij8iZW5kIjoibWlkZGxlIn1mdW5jdGlvbiBBKGV0KXtyZXR1cm5gdHJhbnNsYXRlKCR7ZXQueH0sICR7ZXQueX0pIHJvdGF0ZSgke2V0LnJvdGF0aW9ufHwwfSlgfVV0LmRlYnVnKGBSZW5kZXJpbmcgeHljaGFydCBjaGFydApgK2kpO2NvbnN0IEk9VlcoYSksQj1JLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWFpbiIpLE49Qi5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIsYi53aWR0aCkuYXR0cigiaGVpZ2h0IixiLmhlaWdodCkuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIik7azAoSSxiLmhlaWdodCxiLndpZHRoLCEwKSxJLmF0dHIoInZpZXdCb3giLGAwIDAgJHtiLndpZHRofSAke2IuaGVpZ2h0fWApLE4uYXR0cigiZmlsbCIsbS5iYWNrZ3JvdW5kQ29sb3IpLHcuc2V0VG1wU1ZHRyhJLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWVybWFpZC10bXAtZ3JvdXAiKSk7Y29uc3QgUj13LmdldERyYXdhYmxlRWxlbSgpLHo9e307ZnVuY3Rpb24gVyhldCl7bGV0IHN0PUIsYXQ9IiI7Zm9yKGNvbnN0W2J0XW9mIGV0LmVudHJpZXMoKSl7bGV0IG10PUI7YnQ+MCYmelthdF0mJihtdD16W2F0XSksYXQrPWV0W2J0XSxzdD16W2F0XSxzdHx8KHN0PXpbYXRdPW10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixldFtidF0pKX1yZXR1cm4gc3R9Zm9yKGNvbnN0IGV0IG9mIFIpe2lmKGV0LmRhdGEubGVuZ3RoPT09MCljb250aW51ZTtjb25zdCBzdD1XKGV0Lmdyb3VwVGV4dHMpO3N3aXRjaChldC50eXBlKXtjYXNlInJlY3QiOnN0LnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoZXQuZGF0YSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixhdD0+YXQueCkuYXR0cigieSIsYXQ9PmF0LnkpLmF0dHIoIndpZHRoIixhdD0+YXQud2lkdGgpLmF0dHIoImhlaWdodCIsYXQ9PmF0LmhlaWdodCkuYXR0cigiZmlsbCIsYXQ9PmF0LmZpbGwpLmF0dHIoInN0cm9rZSIsYXQ9PmF0LnN0cm9rZUZpbGwpLmF0dHIoInN0cm9rZS13aWR0aCIsYXQ9PmF0LnN0cm9rZVdpZHRoKTticmVhaztjYXNlInRleHQiOnN0LnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoZXQuZGF0YSkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJmaWxsIixhdD0+YXQuZmlsbCkuYXR0cigiZm9udC1zaXplIixhdD0+YXQuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixhdD0+RShhdC52ZXJ0aWNhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixhdD0+XyhhdC5ob3Jpem9udGFsUG9zKSkuYXR0cigidHJhbnNmb3JtIixhdD0+QShhdCkpLnRleHQoYXQ9PmF0LnRleHQpO2JyZWFrO2Nhc2UicGF0aCI6c3Quc2VsZWN0QWxsKCJwYXRoIikuZGF0YShldC5kYXRhKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGF0PT5hdC5wYXRoKS5hdHRyKCJmaWxsIixhdD0+YXQuZmlsbD9hdC5maWxsOiJub25lIikuYXR0cigic3Ryb2tlIixhdD0+YXQuc3Ryb2tlRmlsbCkuYXR0cigic3Ryb2tlLXdpZHRoIixhdD0+YXQuc3Ryb2tlV2lkdGgpO2JyZWFrfX19fX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIGhndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKFNlLG1lLFZlLFllKXtmb3IoVmU9VmV8fHt9LFllPVNlLmxlbmd0aDtZZS0tO1ZlW1NlW1llXV09bWUpO3JldHVybiBWZX0sYT1bMSwzXSxmPVsxLDRdLHA9WzEsNV0sdz1bMSw2XSxtPVs1LDYsOCw5LDExLDEzLDMxLDMyLDMzLDM0LDM1LDM2LDQ0LDYyLDYzXSxiPVsxLDE4XSxFPVsyLDddLF89WzEsMjJdLEE9WzEsMjNdLEk9WzEsMjRdLEI9WzEsMjVdLE49WzEsMjZdLFI9WzEsMjddLHo9WzEsMjBdLFc9WzEsMjhdLGV0PVsxLDI5XSxzdD1bNjIsNjNdLGF0PVs1LDgsOSwxMSwxMywzMSwzMiwzMywzNCwzNSwzNiw0NCw1MSw1Myw2Miw2M10sYnQ9WzEsNDddLG10PVsxLDQ4XSx5dD1bMSw0OV0sZnQ9WzEsNTBdLHV0PVsxLDUxXSx2dD1bMSw1Ml0sWD1bMSw1M10scHQ9WzUzLDU0XSxVPVsxLDY0XSxUdD1bMSw2MF0sbnQ9WzEsNjFdLEl0PVsxLDYyXSxPdD1bMSw2M10sQnQ9WzEsNjVdLEV0PVsxLDY5XSxaPVsxLDcwXSxDdD1bMSw2N10seHQ9WzEsNjhdLEh0PVs1LDgsOSwxMSwxMywzMSwzMiwzMywzNCwzNSwzNiw0NCw2Miw2M10sTGU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LE5FV0xJTkU6NSxSRDo2LGRpYWdyYW06NyxFT0Y6OCxhY2NfdGl0bGU6OSxhY2NfdGl0bGVfdmFsdWU6MTAsYWNjX2Rlc2NyOjExLGFjY19kZXNjcl92YWx1ZToxMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjEzLHJlcXVpcmVtZW50RGVmOjE0LGVsZW1lbnREZWY6MTUscmVsYXRpb25zaGlwRGVmOjE2LHJlcXVpcmVtZW50VHlwZToxNyxyZXF1aXJlbWVudE5hbWU6MTgsU1RSVUNUX1NUQVJUOjE5LHJlcXVpcmVtZW50Qm9keToyMCxJRDoyMSxDT0xPTlNFUDoyMixpZDoyMyxURVhUOjI0LHRleHQ6MjUsUklTSzoyNixyaXNrTGV2ZWw6MjcsVkVSSUZZTVRIRDoyOCx2ZXJpZnlUeXBlOjI5LFNUUlVDVF9TVE9QOjMwLFJFUVVJUkVNRU5UOjMxLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6MzIsSU5URVJGQUNFX1JFUVVJUkVNRU5UOjMzLFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOjM0LFBIWVNJQ0FMX1JFUVVJUkVNRU5UOjM1LERFU0lHTl9DT05TVFJBSU5UOjM2LExPV19SSVNLOjM3LE1FRF9SSVNLOjM4LEhJR0hfUklTSzozOSxWRVJJRllfQU5BTFlTSVM6NDAsVkVSSUZZX0RFTU9OU1RSQVRJT046NDEsVkVSSUZZX0lOU1BFQ1RJT046NDIsVkVSSUZZX1RFU1Q6NDMsRUxFTUVOVDo0NCxlbGVtZW50TmFtZTo0NSxlbGVtZW50Qm9keTo0NixUWVBFOjQ3LHR5cGU6NDgsRE9DUkVGOjQ5LHJlZjo1MCxFTkRfQVJST1dfTDo1MSxyZWxhdGlvbnNoaXA6NTIsTElORTo1MyxFTkRfQVJST1dfUjo1NCxDT05UQUlOUzo1NSxDT1BJRVM6NTYsREVSSVZFUzo1NyxTQVRJU0ZJRVM6NTgsVkVSSUZJRVM6NTksUkVGSU5FUzo2MCxUUkFDRVM6NjEsdW5xU3RyaW5nOjYyLHFTdHJpbmc6NjMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6Ik5FV0xJTkUiLDY6IlJEIiw4OiJFT0YiLDk6ImFjY190aXRsZSIsMTA6ImFjY190aXRsZV92YWx1ZSIsMTE6ImFjY19kZXNjciIsMTI6ImFjY19kZXNjcl92YWx1ZSIsMTM6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDE5OiJTVFJVQ1RfU1RBUlQiLDIxOiJJRCIsMjI6IkNPTE9OU0VQIiwyNDoiVEVYVCIsMjY6IlJJU0siLDI4OiJWRVJJRllNVEhEIiwzMDoiU1RSVUNUX1NUT1AiLDMxOiJSRVFVSVJFTUVOVCIsMzI6IkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQiLDMzOiJJTlRFUkZBQ0VfUkVRVUlSRU1FTlQiLDM0OiJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVCIsMzU6IlBIWVNJQ0FMX1JFUVVJUkVNRU5UIiwzNjoiREVTSUdOX0NPTlNUUkFJTlQiLDM3OiJMT1dfUklTSyIsMzg6Ik1FRF9SSVNLIiwzOToiSElHSF9SSVNLIiw0MDoiVkVSSUZZX0FOQUxZU0lTIiw0MToiVkVSSUZZX0RFTU9OU1RSQVRJT04iLDQyOiJWRVJJRllfSU5TUEVDVElPTiIsNDM6IlZFUklGWV9URVNUIiw0NDoiRUxFTUVOVCIsNDc6IlRZUEUiLDQ5OiJET0NSRUYiLDUxOiJFTkRfQVJST1dfTCIsNTM6IkxJTkUiLDU0OiJFTkRfQVJST1dfUiIsNTU6IkNPTlRBSU5TIiw1NjoiQ09QSUVTIiw1NzoiREVSSVZFUyIsNTg6IlNBVElTRklFUyIsNTk6IlZFUklGSUVTIiw2MDoiUkVGSU5FUyIsNjE6IlRSQUNFUyIsNjI6InVucVN0cmluZyIsNjM6InFTdHJpbmcifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzMsNF0sWzQsMl0sWzQsMl0sWzQsMV0sWzcsMF0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzE0LDVdLFsyMCw1XSxbMjAsNV0sWzIwLDVdLFsyMCw1XSxbMjAsMl0sWzIwLDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsyNywxXSxbMjcsMV0sWzI3LDFdLFsyOSwxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMTUsNV0sWzQ2LDVdLFs0Niw1XSxbNDYsMl0sWzQ2LDFdLFsxNiw1XSxbMTYsNV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFsxOCwxXSxbMTgsMV0sWzIzLDFdLFsyMywxXSxbMjUsMV0sWzI1LDFdLFs0NSwxXSxbNDUsMV0sWzQ4LDFdLFs0OCwxXSxbNTAsMV0sWzUwLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKG1lLFZlLFllLGNlLGtlLHp0LHJlKXt2YXIgc2U9enQubGVuZ3RoLTE7c3dpdGNoKGtlKXtjYXNlIDQ6dGhpcy4kPXp0W3NlXS50cmltKCksY2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD16dFtzZV0udHJpbSgpLGNlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDEzOmNlLmFkZFJlcXVpcmVtZW50KHp0W3NlLTNdLHp0W3NlLTRdKTticmVhaztjYXNlIDE0OmNlLnNldE5ld1JlcUlkKHp0W3NlLTJdKTticmVhaztjYXNlIDE1OmNlLnNldE5ld1JlcVRleHQoenRbc2UtMl0pO2JyZWFrO2Nhc2UgMTY6Y2Uuc2V0TmV3UmVxUmlzayh6dFtzZS0yXSk7YnJlYWs7Y2FzZSAxNzpjZS5zZXROZXdSZXFWZXJpZnlNZXRob2QoenRbc2UtMl0pO2JyZWFrO2Nhc2UgMjA6dGhpcy4kPWNlLlJlcXVpcmVtZW50VHlwZS5SRVFVSVJFTUVOVDticmVhaztjYXNlIDIxOnRoaXMuJD1jZS5SZXF1aXJlbWVudFR5cGUuRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDticmVhaztjYXNlIDIyOnRoaXMuJD1jZS5SZXF1aXJlbWVudFR5cGUuSU5URVJGQUNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPWNlLlJlcXVpcmVtZW50VHlwZS5QRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI0OnRoaXMuJD1jZS5SZXF1aXJlbWVudFR5cGUuUEhZU0lDQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9Y2UuUmVxdWlyZW1lbnRUeXBlLkRFU0lHTl9DT05TVFJBSU5UO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPWNlLlJpc2tMZXZlbC5MT1dfUklTSzticmVhaztjYXNlIDI3OnRoaXMuJD1jZS5SaXNrTGV2ZWwuTUVEX1JJU0s7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9Y2UuUmlza0xldmVsLkhJR0hfUklTSzticmVhaztjYXNlIDI5OnRoaXMuJD1jZS5WZXJpZnlUeXBlLlZFUklGWV9BTkFMWVNJUzticmVhaztjYXNlIDMwOnRoaXMuJD1jZS5WZXJpZnlUeXBlLlZFUklGWV9ERU1PTlNUUkFUSU9OO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPWNlLlZlcmlmeVR5cGUuVkVSSUZZX0lOU1BFQ1RJT047YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9Y2UuVmVyaWZ5VHlwZS5WRVJJRllfVEVTVDticmVhaztjYXNlIDMzOmNlLmFkZEVsZW1lbnQoenRbc2UtM10pO2JyZWFrO2Nhc2UgMzQ6Y2Uuc2V0TmV3RWxlbWVudFR5cGUoenRbc2UtMl0pO2JyZWFrO2Nhc2UgMzU6Y2Uuc2V0TmV3RWxlbWVudERvY1JlZih6dFtzZS0yXSk7YnJlYWs7Y2FzZSAzODpjZS5hZGRSZWxhdGlvbnNoaXAoenRbc2UtMl0senRbc2VdLHp0W3NlLTRdKTticmVhaztjYXNlIDM5OmNlLmFkZFJlbGF0aW9uc2hpcCh6dFtzZS0yXSx6dFtzZS00XSx6dFtzZV0pO2JyZWFrO2Nhc2UgNDA6dGhpcy4kPWNlLlJlbGF0aW9uc2hpcHMuQ09OVEFJTlM7YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9Y2UuUmVsYXRpb25zaGlwcy5DT1BJRVM7YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9Y2UuUmVsYXRpb25zaGlwcy5ERVJJVkVTO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPWNlLlJlbGF0aW9uc2hpcHMuU0FUSVNGSUVTO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPWNlLlJlbGF0aW9uc2hpcHMuVkVSSUZJRVM7YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9Y2UuUmVsYXRpb25zaGlwcy5SRUZJTkVTO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPWNlLlJlbGF0aW9uc2hpcHMuVFJBQ0VTO2JyZWFrfX0sdGFibGU6W3szOjEsNDoyLDY6YSw5OmYsMTE6cCwxMzp3fSx7MTpbM119LHszOjgsNDoyLDU6WzEsN10sNjphLDk6ZiwxMTpwLDEzOnd9LHs1OlsxLDldfSx7MTA6WzEsMTBdfSx7MTI6WzEsMTFdfSxpKG0sWzIsNl0pLHszOjEyLDQ6Miw2OmEsOTpmLDExOnAsMTM6d30sezE6WzIsMl19LHs0OjE3LDU6Yiw3OjEzLDg6RSw5OmYsMTE6cCwxMzp3LDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOl8sMzI6QSwzMzpJLDM0OkIsMzU6TiwzNjpSLDQ0OnosNjI6Vyw2MzpldH0saShtLFsyLDRdKSxpKG0sWzIsNV0pLHsxOlsyLDFdfSx7ODpbMSwzMF19LHs0OjE3LDU6Yiw3OjMxLDg6RSw5OmYsMTE6cCwxMzp3LDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOl8sMzI6QSwzMzpJLDM0OkIsMzU6TiwzNjpSLDQ0OnosNjI6Vyw2MzpldH0sezQ6MTcsNTpiLDc6MzIsODpFLDk6ZiwxMTpwLDEzOncsMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6XywzMjpBLDMzOkksMzQ6QiwzNTpOLDM2OlIsNDQ6eiw2MjpXLDYzOmV0fSx7NDoxNyw1OmIsNzozMyw4OkUsOTpmLDExOnAsMTM6dywxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpfLDMyOkEsMzM6SSwzNDpCLDM1Ok4sMzY6Uiw0NDp6LDYyOlcsNjM6ZXR9LHs0OjE3LDU6Yiw3OjM0LDg6RSw5OmYsMTE6cCwxMzp3LDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOl8sMzI6QSwzMzpJLDM0OkIsMzU6TiwzNjpSLDQ0OnosNjI6Vyw2MzpldH0sezQ6MTcsNTpiLDc6MzUsODpFLDk6ZiwxMTpwLDEzOncsMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6XywzMjpBLDMzOkksMzQ6QiwzNTpOLDM2OlIsNDQ6eiw2MjpXLDYzOmV0fSx7MTg6MzYsNjI6WzEsMzddLDYzOlsxLDM4XX0sezQ1OjM5LDYyOlsxLDQwXSw2MzpbMSw0MV19LHs1MTpbMSw0Ml0sNTM6WzEsNDNdfSxpKHN0LFsyLDIwXSksaShzdCxbMiwyMV0pLGkoc3QsWzIsMjJdKSxpKHN0LFsyLDIzXSksaShzdCxbMiwyNF0pLGkoc3QsWzIsMjVdKSxpKGF0LFsyLDQ5XSksaShhdCxbMiw1MF0pLHsxOlsyLDNdfSx7ODpbMiw4XX0sezg6WzIsOV19LHs4OlsyLDEwXX0sezg6WzIsMTFdfSx7ODpbMiwxMl19LHsxOTpbMSw0NF19LHsxOTpbMiw0N119LHsxOTpbMiw0OF19LHsxOTpbMSw0NV19LHsxOTpbMiw1M119LHsxOTpbMiw1NF19LHs1Mjo0Niw1NTpidCw1NjptdCw1Nzp5dCw1ODpmdCw1OTp1dCw2MDp2dCw2MTpYfSx7NTI6NTQsNTU6YnQsNTY6bXQsNTc6eXQsNTg6ZnQsNTk6dXQsNjA6dnQsNjE6WH0sezU6WzEsNTVdfSx7NTpbMSw1Nl19LHs1MzpbMSw1N119LGkocHQsWzIsNDBdKSxpKHB0LFsyLDQxXSksaShwdCxbMiw0Ml0pLGkocHQsWzIsNDNdKSxpKHB0LFsyLDQ0XSksaShwdCxbMiw0NV0pLGkocHQsWzIsNDZdKSx7NTQ6WzEsNThdfSx7NTpVLDIwOjU5LDIxOlR0LDI0Om50LDI2Okl0LDI4Ok90LDMwOkJ0fSx7NTpFdCwzMDpaLDQ2OjY2LDQ3OkN0LDQ5Onh0fSx7MjM6NzEsNjI6Vyw2MzpldH0sezIzOjcyLDYyOlcsNjM6ZXR9LGkoSHQsWzIsMTNdKSx7MjI6WzEsNzNdfSx7MjI6WzEsNzRdfSx7MjI6WzEsNzVdfSx7MjI6WzEsNzZdfSx7NTpVLDIwOjc3LDIxOlR0LDI0Om50LDI2Okl0LDI4Ok90LDMwOkJ0fSxpKEh0LFsyLDE5XSksaShIdCxbMiwzM10pLHsyMjpbMSw3OF19LHsyMjpbMSw3OV19LHs1OkV0LDMwOlosNDY6ODAsNDc6Q3QsNDk6eHR9LGkoSHQsWzIsMzddKSxpKEh0LFsyLDM4XSksaShIdCxbMiwzOV0pLHsyMzo4MSw2MjpXLDYzOmV0fSx7MjU6ODIsNjI6WzEsODNdLDYzOlsxLDg0XX0sezI3Ojg1LDM3OlsxLDg2XSwzODpbMSw4N10sMzk6WzEsODhdfSx7Mjk6ODksNDA6WzEsOTBdLDQxOlsxLDkxXSw0MjpbMSw5Ml0sNDM6WzEsOTNdfSxpKEh0LFsyLDE4XSksezQ4Ojk0LDYyOlsxLDk1XSw2MzpbMSw5Nl19LHs1MDo5Nyw2MjpbMSw5OF0sNjM6WzEsOTldfSxpKEh0LFsyLDM2XSksezU6WzEsMTAwXX0sezU6WzEsMTAxXX0sezU6WzIsNTFdfSx7NTpbMiw1Ml19LHs1OlsxLDEwMl19LHs1OlsyLDI2XX0sezU6WzIsMjddfSx7NTpbMiwyOF19LHs1OlsxLDEwM119LHs1OlsyLDI5XX0sezU6WzIsMzBdfSx7NTpbMiwzMV19LHs1OlsyLDMyXX0sezU6WzEsMTA0XX0sezU6WzIsNTVdfSx7NTpbMiw1Nl19LHs1OlsxLDEwNV19LHs1OlsyLDU3XX0sezU6WzIsNThdfSx7NTpVLDIwOjEwNiwyMTpUdCwyNDpudCwyNjpJdCwyODpPdCwzMDpCdH0sezU6VSwyMDoxMDcsMjE6VHQsMjQ6bnQsMjY6SXQsMjg6T3QsMzA6QnR9LHs1OlUsMjA6MTA4LDIxOlR0LDI0Om50LDI2Okl0LDI4Ok90LDMwOkJ0fSx7NTpVLDIwOjEwOSwyMTpUdCwyNDpudCwyNjpJdCwyODpPdCwzMDpCdH0sezU6RXQsMzA6Wiw0NjoxMTAsNDc6Q3QsNDk6eHR9LHs1OkV0LDMwOlosNDY6MTExLDQ3OkN0LDQ5Onh0fSxpKEh0LFsyLDE0XSksaShIdCxbMiwxNV0pLGkoSHQsWzIsMTZdKSxpKEh0LFsyLDE3XSksaShIdCxbMiwzNF0pLGkoSHQsWzIsMzVdKV0sZGVmYXVsdEFjdGlvbnM6ezg6WzIsMl0sMTI6WzIsMV0sMzA6WzIsM10sMzE6WzIsOF0sMzI6WzIsOV0sMzM6WzIsMTBdLDM0OlsyLDExXSwzNTpbMiwxMl0sMzc6WzIsNDddLDM4OlsyLDQ4XSw0MDpbMiw1M10sNDE6WzIsNTRdLDgzOlsyLDUxXSw4NDpbMiw1Ml0sODY6WzIsMjZdLDg3OlsyLDI3XSw4ODpbMiwyOF0sOTA6WzIsMjldLDkxOlsyLDMwXSw5MjpbMiwzMV0sOTM6WzIsMzJdLDk1OlsyLDU1XSw5NjpbMiw1Nl0sOTg6WzIsNTddLDk5OlsyLDU4XX0scGFyc2VFcnJvcjpmdW5jdGlvbihtZSxWZSl7aWYoVmUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShtZSk7ZWxzZXt2YXIgWWU9bmV3IEVycm9yKG1lKTt0aHJvdyBZZS5oYXNoPVZlLFllfX0scGFyc2U6ZnVuY3Rpb24obWUpe3ZhciBWZT10aGlzLFllPVswXSxjZT1bXSxrZT1bbnVsbF0senQ9W10scmU9dGhpcy50YWJsZSxzZT0iIixQZT0wLHRlPTAsTWU9MixkZT0xLG9uPXp0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLG5pPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksS3M9e3l5Ont9fTtmb3IodmFyIHdzIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksd3MpJiYoS3MueXlbd3NdPXRoaXMueXlbd3NdKTtuaS5zZXRJbnB1dChtZSxLcy55eSksS3MueXkubGV4ZXI9bmksS3MueXkucGFyc2VyPXRoaXMsdHlwZW9mIG5pLnl5bGxvYz4idSImJihuaS55eWxsb2M9e30pO3ZhciBmbz1uaS55eWxsb2M7enQucHVzaChmbyk7dmFyIFhpPW5pLm9wdGlvbnMmJm5pLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBLcy55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1Lcy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBFcigpe3ZhciBHcztyZXR1cm4gR3M9Y2UucG9wKCl8fG5pLmxleCgpfHxkZSx0eXBlb2YgR3MhPSJudW1iZXIiJiYoR3MgaW5zdGFuY2VvZiBBcnJheSYmKGNlPUdzLEdzPWNlLnBvcCgpKSxHcz1WZS5zeW1ib2xzX1tHc118fEdzKSxHc31mb3IodmFyIFhuLGRpLEVlLEtuLEhlPXt9LFRpLHBuLEVzLHFhOzspe2lmKGRpPVllW1llLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2RpXT9FZT10aGlzLmRlZmF1bHRBY3Rpb25zW2RpXTooKFhuPT09bnVsbHx8dHlwZW9mIFhuPiJ1IikmJihYbj1FcigpKSxFZT1yZVtkaV0mJnJlW2RpXVtYbl0pLHR5cGVvZiBFZT4idSJ8fCFFZS5sZW5ndGh8fCFFZVswXSl7dmFyIE1hPSIiO3FhPVtdO2ZvcihUaSBpbiByZVtkaV0pdGhpcy50ZXJtaW5hbHNfW1RpXSYmVGk+TWUmJnFhLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUaV0rIiciKTtuaS5zaG93UG9zaXRpb24/TWE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoUGUrMSkrYDoKYCtuaS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3FhLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bWG5dfHxYbikrIiciOk1hPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFBlKzEpKyI6IFVuZXhwZWN0ZWQgIisoWG49PWRlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW1huXXx8WG4pKyInIiksdGhpcy5wYXJzZUVycm9yKE1hLHt0ZXh0Om5pLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tYbl18fFhuLGxpbmU6bmkueXlsaW5lbm8sbG9jOmZvLGV4cGVjdGVkOnFhfSl9aWYoRWVbMF1pbnN0YW5jZW9mIEFycmF5JiZFZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2RpKyIsIHRva2VuOiAiK1huKTtzd2l0Y2goRWVbMF0pe2Nhc2UgMTpZZS5wdXNoKFhuKSxrZS5wdXNoKG5pLnl5dGV4dCksenQucHVzaChuaS55eWxsb2MpLFllLnB1c2goRWVbMV0pLFhuPW51bGwsdGU9bmkueXlsZW5nLHNlPW5pLnl5dGV4dCxQZT1uaS55eWxpbmVubyxmbz1uaS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKHBuPXRoaXMucHJvZHVjdGlvbnNfW0VlWzFdXVsxXSxIZS4kPWtlW2tlLmxlbmd0aC1wbl0sSGUuXyQ9e2ZpcnN0X2xpbmU6enRbenQubGVuZ3RoLShwbnx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnp0W3p0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnp0W3p0Lmxlbmd0aC0ocG58fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46enRbenQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxYaSYmKEhlLl8kLnJhbmdlPVt6dFt6dC5sZW5ndGgtKHBufHwxKV0ucmFuZ2VbMF0senRbenQubGVuZ3RoLTFdLnJhbmdlWzFdXSksS249dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KEhlLFtzZSx0ZSxQZSxLcy55eSxFZVsxXSxrZSx6dF0uY29uY2F0KG9uKSksdHlwZW9mIEtuPCJ1IilyZXR1cm4gS247cG4mJihZZT1ZZS5zbGljZSgwLC0xKnBuKjIpLGtlPWtlLnNsaWNlKDAsLTEqcG4pLHp0PXp0LnNsaWNlKDAsLTEqcG4pKSxZZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0VlWzFdXVswXSksa2UucHVzaChIZS4kKSx6dC5wdXNoKEhlLl8kKSxFcz1yZVtZZVtZZS5sZW5ndGgtMl1dW1llW1llLmxlbmd0aC0xXV0sWWUucHVzaChFcyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEZ0PWZ1bmN0aW9uKCl7dmFyIFNlPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKFZlLFllKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFZlLFllKTtlbHNlIHRocm93IG5ldyBFcnJvcihWZSl9LHNldElucHV0OmZ1bmN0aW9uKG1lLFZlKXtyZXR1cm4gdGhpcy55eT1WZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9bWUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIG1lPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1tZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9bWUsdGhpcy5tYXRjaGVkKz1tZTt2YXIgVmU9bWUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBWZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksbWV9LHVucHV0OmZ1bmN0aW9uKG1lKXt2YXIgVmU9bWUubGVuZ3RoLFllPW1lLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9bWUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVZlKSx0aGlzLm9mZnNldC09VmU7dmFyIGNlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLFllLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09WWUubGVuZ3RoLTEpO3ZhciBrZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46WWU/KFllLmxlbmd0aD09PWNlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrY2VbY2UubGVuZ3RoLVllLmxlbmd0aF0ubGVuZ3RoLVllWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tVmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1ba2VbMF0sa2VbMF0rdGhpcy55eWxlbmctVmVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihtZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG1lKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBtZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKG1lLmxlbmd0aD4yMD8iLi4uIjoiIikrbWUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgbWU9dGhpcy5tYXRjaDtyZXR1cm4gbWUubGVuZ3RoPDIwJiYobWUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLW1lLmxlbmd0aCkpLChtZS5zdWJzdHIoMCwyMCkrKG1lLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgbWU9dGhpcy5wYXN0SW5wdXQoKSxWZT1uZXcgQXJyYXkobWUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gbWUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1ZlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihtZSxWZSl7dmFyIFllLGNlLGtlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihrZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihrZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxjZT1tZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksY2UmJih0aGlzLnl5bGluZW5vKz1jZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpjZT9jZVtjZS5sZW5ndGgtMV0ubGVuZ3RoLWNlW2NlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK21lWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPW1lWzBdLHRoaXMubWF0Y2grPW1lWzBdLHRoaXMubWF0Y2hlcz1tZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShtZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9bWVbMF0sWWU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsVmUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksWWUpcmV0dXJuIFllO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB6dCBpbiBrZSl0aGlzW3p0XT1rZVt6dF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgbWUsVmUsWWUsY2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIga2U9dGhpcy5fY3VycmVudFJ1bGVzKCksenQ9MDt6dDxrZS5sZW5ndGg7enQrKylpZihZZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2tlW3p0XV0pLFllJiYoIVZlfHxZZVswXS5sZW5ndGg+VmVbMF0ubGVuZ3RoKSl7aWYoVmU9WWUsY2U9enQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYobWU9dGhpcy50ZXN0X21hdGNoKFllLGtlW3p0XSksbWUhPT0hMSlyZXR1cm4gbWU7aWYodGhpcy5fYmFja3RyYWNrKXtWZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBWZT8obWU9dGhpcy50ZXN0X21hdGNoKFZlLGtlW2NlXSksbWUhPT0hMT9tZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIFZlPXRoaXMubmV4dCgpO3JldHVybiBWZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oVmUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChWZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFZlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFZlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oVmUpe3JldHVybiBWZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFZlfHwwKSxWZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW1ZlXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihWZSl7dGhpcy5iZWdpbihWZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVmUsWWUsY2Usa2Upe3N3aXRjaChjZSl7Y2FzZSAwOnJldHVybiJ0aXRsZSI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSw5O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTE7Y2FzZSA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA1OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA4OnJldHVybiA1O2Nhc2UgOTpicmVhaztjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6YnJlYWs7Y2FzZSAxMjpyZXR1cm4gODtjYXNlIDEzOnJldHVybiA2O2Nhc2UgMTQ6cmV0dXJuIDE5O2Nhc2UgMTU6cmV0dXJuIDMwO2Nhc2UgMTY6cmV0dXJuIDIyO2Nhc2UgMTc6cmV0dXJuIDIxO2Nhc2UgMTg6cmV0dXJuIDI0O2Nhc2UgMTk6cmV0dXJuIDI2O2Nhc2UgMjA6cmV0dXJuIDI4O2Nhc2UgMjE6cmV0dXJuIDMxO2Nhc2UgMjI6cmV0dXJuIDMyO2Nhc2UgMjM6cmV0dXJuIDMzO2Nhc2UgMjQ6cmV0dXJuIDM0O2Nhc2UgMjU6cmV0dXJuIDM1O2Nhc2UgMjY6cmV0dXJuIDM2O2Nhc2UgMjc6cmV0dXJuIDM3O2Nhc2UgMjg6cmV0dXJuIDM4O2Nhc2UgMjk6cmV0dXJuIDM5O2Nhc2UgMzA6cmV0dXJuIDQwO2Nhc2UgMzE6cmV0dXJuIDQxO2Nhc2UgMzI6cmV0dXJuIDQyO2Nhc2UgMzM6cmV0dXJuIDQzO2Nhc2UgMzQ6cmV0dXJuIDQ0O2Nhc2UgMzU6cmV0dXJuIDU1O2Nhc2UgMzY6cmV0dXJuIDU2O2Nhc2UgMzc6cmV0dXJuIDU3O2Nhc2UgMzg6cmV0dXJuIDU4O2Nhc2UgMzk6cmV0dXJuIDU5O2Nhc2UgNDA6cmV0dXJuIDYwO2Nhc2UgNDE6cmV0dXJuIDYxO2Nhc2UgNDI6cmV0dXJuIDQ3O2Nhc2UgNDM6cmV0dXJuIDQ5O2Nhc2UgNDQ6cmV0dXJuIDUxO2Nhc2UgNDU6cmV0dXJuIDU0O2Nhc2UgNDY6cmV0dXJuIDUzO2Nhc2UgNDc6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA0ODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0OTpyZXR1cm4icVN0cmluZyI7Y2FzZSA1MDpyZXR1cm4gWWUueXl0ZXh0PVllLnl5dGV4dC50cmltKCksNjJ9fSxydWxlczpbL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oihccj9cbikrKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzokKS9pLC9eKD86cmVxdWlyZW1lbnREaWFncmFtXGIpL2ksL14oPzpceykvaSwvXig/Olx9KS9pLC9eKD86OikvaSwvXig/OmlkXGIpL2ksL14oPzp0ZXh0XGIpL2ksL14oPzpyaXNrXGIpL2ksL14oPzp2ZXJpZnlNZXRob2RcYikvaSwvXig/OnJlcXVpcmVtZW50XGIpL2ksL14oPzpmdW5jdGlvbmFsUmVxdWlyZW1lbnRcYikvaSwvXig/OmludGVyZmFjZVJlcXVpcmVtZW50XGIpL2ksL14oPzpwZXJmb3JtYW5jZVJlcXVpcmVtZW50XGIpL2ksL14oPzpwaHlzaWNhbFJlcXVpcmVtZW50XGIpL2ksL14oPzpkZXNpZ25Db25zdHJhaW50XGIpL2ksL14oPzpsb3dcYikvaSwvXig/Om1lZGl1bVxiKS9pLC9eKD86aGlnaFxiKS9pLC9eKD86YW5hbHlzaXNcYikvaSwvXig/OmRlbW9uc3RyYXRpb25cYikvaSwvXig/Omluc3BlY3Rpb25cYikvaSwvXig/OnRlc3RcYikvaSwvXig/OmVsZW1lbnRcYikvaSwvXig/OmNvbnRhaW5zXGIpL2ksL14oPzpjb3BpZXNcYikvaSwvXig/OmRlcml2ZXNcYikvaSwvXig/OnNhdGlzZmllc1xiKS9pLC9eKD86dmVyaWZpZXNcYikvaSwvXig/OnJlZmluZXNcYikvaSwvXig/OnRyYWNlc1xiKS9pLC9eKD86dHlwZVxiKS9pLC9eKD86ZG9jcmVmXGIpL2ksL14oPzo8LSkvaSwvXig/Oi0+KS9pLC9eKD86LSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W1x3XVteXHJcblx7XDxcPlwtXD1dKikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzJdLGluY2x1c2l2ZTohMX0sdW5xU3RyaW5nOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHRva2VuOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzQ4LDQ5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMyw1LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw1MF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBTZX0oKTtMZS5sZXhlcj1GdDtmdW5jdGlvbiBnbigpe3RoaXMueXk9e319cmV0dXJuIGduLnByb3RvdHlwZT1MZSxMZS5QYXJzZXI9Z24sbmV3IGdufSgpO2hndC5wYXJzZXI9aGd0O2NvbnN0IFZIZT1oZ3Q7bGV0IGZndD1bXSx3cD17fSx6Rj17fSx5az17fSxxRj17fTtjb25zdCBHSGU9e1JlcXVpcmVtZW50VHlwZTp7UkVRVUlSRU1FTlQ6IlJlcXVpcmVtZW50IixGVU5DVElPTkFMX1JFUVVJUkVNRU5UOiJGdW5jdGlvbmFsIFJlcXVpcmVtZW50IixJTlRFUkZBQ0VfUkVRVUlSRU1FTlQ6IkludGVyZmFjZSBSZXF1aXJlbWVudCIsUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ6IlBlcmZvcm1hbmNlIFJlcXVpcmVtZW50IixQSFlTSUNBTF9SRVFVSVJFTUVOVDoiUGh5c2ljYWwgUmVxdWlyZW1lbnQiLERFU0lHTl9DT05TVFJBSU5UOiJEZXNpZ24gQ29uc3RyYWludCJ9LFJpc2tMZXZlbDp7TE9XX1JJU0s6IkxvdyIsTUVEX1JJU0s6Ik1lZGl1bSIsSElHSF9SSVNLOiJIaWdoIn0sVmVyaWZ5VHlwZTp7VkVSSUZZX0FOQUxZU0lTOiJBbmFseXNpcyIsVkVSSUZZX0RFTU9OU1RSQVRJT046IkRlbW9uc3RyYXRpb24iLFZFUklGWV9JTlNQRUNUSU9OOiJJbnNwZWN0aW9uIixWRVJJRllfVEVTVDoiVGVzdCJ9LFJlbGF0aW9uc2hpcHM6e0NPTlRBSU5TOiJjb250YWlucyIsQ09QSUVTOiJjb3BpZXMiLERFUklWRVM6ImRlcml2ZXMiLFNBVElTRklFUzoic2F0aXNmaWVzIixWRVJJRklFUzoidmVyaWZpZXMiLFJFRklORVM6InJlZmluZXMiLFRSQUNFUzoidHJhY2VzIn0sZ2V0Q29uZmlnOigpPT5PZSgpLnJlcSxhZGRSZXF1aXJlbWVudDooaSxhKT0+KHpGW2ldPT09dm9pZCAwJiYoekZbaV09e25hbWU6aSx0eXBlOmEsaWQ6d3AuaWQsdGV4dDp3cC50ZXh0LHJpc2s6d3Aucmlzayx2ZXJpZnlNZXRob2Q6d3AudmVyaWZ5TWV0aG9kfSksd3A9e30sekZbaV0pLGdldFJlcXVpcmVtZW50czooKT0+ekYsc2V0TmV3UmVxSWQ6aT0+e3dwIT09dm9pZCAwJiYod3AuaWQ9aSl9LHNldE5ld1JlcVRleHQ6aT0+e3dwIT09dm9pZCAwJiYod3AudGV4dD1pKX0sc2V0TmV3UmVxUmlzazppPT57d3AhPT12b2lkIDAmJih3cC5yaXNrPWkpfSxzZXROZXdSZXFWZXJpZnlNZXRob2Q6aT0+e3dwIT09dm9pZCAwJiYod3AudmVyaWZ5TWV0aG9kPWkpfSxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxhZGRFbGVtZW50Omk9PihxRltpXT09PXZvaWQgMCYmKHFGW2ldPXtuYW1lOmksdHlwZTp5ay50eXBlLGRvY1JlZjp5ay5kb2NSZWZ9LFV0LmluZm8oIkFkZGVkIG5ldyByZXF1aXJlbWVudDogIixpKSkseWs9e30scUZbaV0pLGdldEVsZW1lbnRzOigpPT5xRixzZXROZXdFbGVtZW50VHlwZTppPT57eWshPT12b2lkIDAmJih5ay50eXBlPWkpfSxzZXROZXdFbGVtZW50RG9jUmVmOmk9Pnt5ayE9PXZvaWQgMCYmKHlrLmRvY1JlZj1pKX0sYWRkUmVsYXRpb25zaGlwOihpLGEsZik9PntmZ3QucHVzaCh7dHlwZTppLHNyYzphLGRzdDpmfSl9LGdldFJlbGF0aW9uc2hpcHM6KCk9PmZndCxjbGVhcjooKT0+e2ZndD1bXSx3cD17fSx6Rj17fSx5az17fSxxRj17fSxoZygpfX0sVUhlPWk9PmAKCiAgbWFya2VyIHsKICAgIGZpbGw6ICR7aS5yZWxhdGlvbkNvbG9yfTsKICAgIHN0cm9rZTogJHtpLnJlbGF0aW9uQ29sb3J9OwogIH0KCiAgbWFya2VyLmNyb3NzIHsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgfQoKICBzdmcgewogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtpLmZvbnRTaXplfTsKICB9CgogIC5yZXFCb3ggewogICAgZmlsbDogJHtpLnJlcXVpcmVtZW50QmFja2dyb3VuZH07CiAgICBmaWxsLW9wYWNpdHk6IDEuMDsKICAgIHN0cm9rZTogJHtpLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke2kucmVxdWlyZW1lbnRCb3JkZXJTaXplfTsKICB9CiAgCiAgLnJlcVRpdGxlLCAucmVxTGFiZWx7CiAgICBmaWxsOiAgJHtpLnJlcXVpcmVtZW50VGV4dENvbG9yfTsKICB9CiAgLnJlcUxhYmVsQm94IHsKICAgIGZpbGw6ICR7aS5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZH07CiAgICBmaWxsLW9wYWNpdHk6IDEuMDsKICB9CgogIC5yZXEtdGl0bGUtbGluZSB7CiAgICBzdHJva2U6ICR7aS5yZXF1aXJlbWVudEJvcmRlckNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHtpLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZX07CiAgfQogIC5yZWxhdGlvbnNoaXBMaW5lIHsKICAgIHN0cm9rZTogJHtpLnJlbGF0aW9uQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAxOwogIH0KICAucmVsYXRpb25zaGlwTGFiZWwgewogICAgZmlsbDogJHtpLnJlbGF0aW9uTGFiZWxDb2xvcn07CiAgfQoKYCxkZ3Q9e0NPTlRBSU5TOiJjb250YWlucyIsQVJST1c6ImFycm93In0seFJ0PXtSZXFNYXJrZXJzOmRndCxpbnNlcnRMaW5lRW5kaW5nczooaSxhKT0+e2xldCBmPWkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZGd0LkNPTlRBSU5TKyJfbGluZV9lbmRpbmciKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIixhLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIm1hcmtlcldpZHRoIixhLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJIZWlnaHQiLGEubGluZV9oZWlnaHQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImciKTtmLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEubGluZV9oZWlnaHQvMikuYXR0cigiY3kiLGEubGluZV9oZWlnaHQvMikuYXR0cigiciIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJmaWxsIiwibm9uZSIpLGYuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIixhLmxpbmVfaGVpZ2h0KS5hdHRyKCJ5MSIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJ5MiIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpLGYuYXBwZW5kKCJsaW5lIikuYXR0cigieTEiLDApLmF0dHIoInkyIixhLmxpbmVfaGVpZ2h0KS5hdHRyKCJ4MSIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJ4MiIsYS5saW5lX2hlaWdodC8yKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZGd0LkFSUk9XKyJfbGluZV9lbmRpbmciKS5hdHRyKCJyZWZYIixhLmxpbmVfaGVpZ2h0KS5hdHRyKCJyZWZZIiwuNSphLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJXaWR0aCIsYS5saW5lX2hlaWdodCkuYXR0cigibWFya2VySGVpZ2h0IixhLmxpbmVfaGVpZ2h0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0wLDAKICAgICAgTCR7YS5saW5lX2hlaWdodH0sJHthLmxpbmVfaGVpZ2h0LzJ9CiAgICAgIE0ke2EubGluZV9oZWlnaHR9LCR7YS5saW5lX2hlaWdodC8yfQogICAgICBMMCwke2EubGluZV9oZWlnaHR9YCkuYXR0cigic3Ryb2tlLXdpZHRoIiwxKX19O2xldCBFaD17fSxrUnQ9MDtjb25zdCBFUnQ9KGksYSk9PmkuaW5zZXJ0KCJyZWN0IiwiIyIrYSkuYXR0cigiY2xhc3MiLCJyZXEgcmVxQm94IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLEVoLnJlY3RfbWluX3dpZHRoKyJweCIpLmF0dHIoImhlaWdodCIsRWgucmVjdF9taW5faGVpZ2h0KyJweCIpLFRSdD0oaSxhLGYpPT57bGV0IHA9RWgucmVjdF9taW5fd2lkdGgvMix3PWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWwgcmVxVGl0bGUiKS5hdHRyKCJpZCIsYSkuYXR0cigieCIscCkuYXR0cigieSIsRWgucmVjdF9wYWRkaW5nKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImhhbmdpbmciKSxtPTA7Zi5mb3JFYWNoKEE9PnttPT0wP3cuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsRWgucmVjdF9taW5fd2lkdGgvMikuYXR0cigiZHkiLDApLnRleHQoQSk6dy5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixFaC5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsRWgubGluZV9oZWlnaHQqLjc1KS50ZXh0KEEpLG0rK30pO2xldCBiPTEuNSpFaC5yZWN0X3BhZGRpbmcsRT1tKkVoLmxpbmVfaGVpZ2h0Ki43NSxfPWIrRTtyZXR1cm4gaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsInJlcS10aXRsZS1saW5lIikuYXR0cigieDEiLCIwIikuYXR0cigieDIiLEVoLnJlY3RfbWluX3dpZHRoKS5hdHRyKCJ5MSIsXykuYXR0cigieTIiLF8pLHt0aXRsZU5vZGU6dyx5Ol99fSxDUnQ9KGksYSxmLHApPT57bGV0IHc9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCIpLmF0dHIoImlkIixhKS5hdHRyKCJ4IixFaC5yZWN0X3BhZGRpbmcpLmF0dHIoInkiLHApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLG09MDtjb25zdCBiPTMwO2xldCBFPVtdO3JldHVybiBmLmZvckVhY2goXz0+e2xldCBBPV8ubGVuZ3RoO2Zvcig7QT5iJiZtPDM7KXtsZXQgST1fLnN1YnN0cmluZygwLGIpO189Xy5zdWJzdHJpbmcoYixfLmxlbmd0aCksQT1fLmxlbmd0aCxFW0UubGVuZ3RoXT1JLG0rK31pZihtPT0zKXtsZXQgST1FW0UubGVuZ3RoLTFdO0VbRS5sZW5ndGgtMV09SS5zdWJzdHJpbmcoMCxJLmxlbmd0aC00KSsiLi4uIn1lbHNlIEVbRS5sZW5ndGhdPV87bT0wfSksRS5mb3JFYWNoKF89Pnt3LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixFaC5yZWN0X3BhZGRpbmcpLmF0dHIoImR5IixFaC5saW5lX2hlaWdodCkudGV4dChfKX0pLHd9LFdIZT0oaSxhLGYscCk9Pntjb25zdCB3PWEubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCksbT1hLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKHcqLjUpLGI9InJlbCIra1J0O2tSdCsrO2NvbnN0IF89aS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZWxhdGlvbnNoaXBMYWJlbCIpLmF0dHIoImlkIixiKS5hdHRyKCJ4IixtLngpLmF0dHIoInkiLG0ueSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnRleHQocCkubm9kZSgpLmdldEJCb3goKTtpLmluc2VydCgicmVjdCIsIiMiK2IpLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsQm94IikuYXR0cigieCIsbS54LV8ud2lkdGgvMikuYXR0cigieSIsbS55LV8uaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixfLndpZHRoKS5hdHRyKCJoZWlnaHQiLF8uaGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCI4NSUiKX0sWUhlPWZ1bmN0aW9uKGksYSxmLHAsdyl7Y29uc3QgbT1mLmVkZ2UoZkwoYS5zcmMpLGZMKGEuZHN0KSksYj1FNSgpLngoZnVuY3Rpb24oXyl7cmV0dXJuIF8ueH0pLnkoZnVuY3Rpb24oXyl7cmV0dXJuIF8ueX0pLEU9aS5pbnNlcnQoInBhdGgiLCIjIitwKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExpbmUiKS5hdHRyKCJkIixiKG0ucG9pbnRzKSkuYXR0cigiZmlsbCIsIm5vbmUiKTthLnR5cGU9PXcuZGIuUmVsYXRpb25zaGlwcy5DT05UQUlOUz9FLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK0tyLmdldFVybChFaC5hcnJvd01hcmtlckFic29sdXRlKSsiIyIrYS50eXBlKyJfbGluZV9lbmRpbmcpIik6KEUuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjEwLDciKSxFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitLci5nZXRVcmwoRWguYXJyb3dNYXJrZXJBYnNvbHV0ZSkrIiMiK3hSdC5SZXFNYXJrZXJzLkFSUk9XKyJfbGluZV9lbmRpbmcpIikpLFdIZShpLEUsRWgsYDw8JHthLnR5cGV9Pj5gKX0sS0hlPShpLGEsZik9PntPYmplY3Qua2V5cyhpKS5mb3JFYWNoKHA9PntsZXQgdz1pW3BdO3A9ZkwocCksVXQuaW5mbygiQWRkZWQgbmV3IHJlcXVpcmVtZW50OiAiLHApO2NvbnN0IG09Zi5hcHBlbmQoImciKS5hdHRyKCJpZCIscCksYj0icmVxLSIrcCxFPUVSdChtLGIpO2xldCBfPVRSdChtLHArIl90aXRsZSIsW2A8PCR7dy50eXBlfT4+YCxgJHt3Lm5hbWV9YF0pO0NSdChtLHArIl9ib2R5IixbYElkOiAke3cuaWR9YCxgVGV4dDogJHt3LnRleHR9YCxgUmlzazogJHt3LnJpc2t9YCxgVmVyaWZpY2F0aW9uOiAke3cudmVyaWZ5TWV0aG9kfWBdLF8ueSk7Y29uc3QgQT1FLm5vZGUoKS5nZXRCQm94KCk7YS5zZXROb2RlKHAse3dpZHRoOkEud2lkdGgsaGVpZ2h0OkEuaGVpZ2h0LHNoYXBlOiJyZWN0IixpZDpwfSl9KX0sWEhlPShpLGEsZik9PntPYmplY3Qua2V5cyhpKS5mb3JFYWNoKHA9PntsZXQgdz1pW3BdO2NvbnN0IG09ZkwocCksYj1mLmFwcGVuZCgiZyIpLmF0dHIoImlkIixtKSxFPSJlbGVtZW50LSIrbSxfPUVSdChiLEUpO2xldCBBPVRSdChiLEUrIl90aXRsZSIsWyI8PEVsZW1lbnQ+PiIsYCR7cH1gXSk7Q1J0KGIsRSsiX2JvZHkiLFtgVHlwZTogJHt3LnR5cGV8fCJOb3QgU3BlY2lmaWVkIn1gLGBEb2MgUmVmOiAke3cuZG9jUmVmfHwiTm9uZSJ9YF0sQS55KTtjb25zdCBJPV8ubm9kZSgpLmdldEJCb3goKTthLnNldE5vZGUobSx7d2lkdGg6SS53aWR0aCxoZWlnaHQ6SS5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOm19KX0pfSxRSGU9KGksYSk9PihpLmZvckVhY2goZnVuY3Rpb24oZil7bGV0IHA9ZkwoZi5zcmMpLHc9ZkwoZi5kc3QpO2Euc2V0RWRnZShwLHcse3JlbGF0aW9uc2hpcDpmfSl9KSxpKSxaSGU9ZnVuY3Rpb24oaSxhKXthLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihmKXtmIT09dm9pZCAwJiZhLm5vZGUoZikhPT12b2lkIDAmJihpLnNlbGVjdCgiIyIrZiksaS5zZWxlY3QoIiMiK2YpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhhLm5vZGUoZikueC1hLm5vZGUoZikud2lkdGgvMikrIiwiKyhhLm5vZGUoZikueS1hLm5vZGUoZikuaGVpZ2h0LzIpKyIgKSIpKX0pfSxmTD1pPT5pLnJlcGxhY2UoL1xzL2csIiIpLnJlcGxhY2UoL1wuL2csIl8iKSxKSGU9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpWSGUsZGI6R0hlLHJlbmRlcmVyOntkcmF3OihpLGEsZixwKT0+e0VoPU9lKCkucmVxdWlyZW1lbnQ7Y29uc3Qgdz1FaC5zZWN1cml0eUxldmVsO2xldCBtO3c9PT0ic2FuZGJveCImJihtPXlyKCIjaSIrYSkpO2NvbnN0IEU9eXIodz09PSJzYW5kYm94Ij9tLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKS5zZWxlY3QoYFtpZD0nJHthfSddYCk7eFJ0Lmluc2VydExpbmVFbmRpbmdzKEUsRWgpO2NvbnN0IF89bmV3IGMxKHttdWx0aWdyYXBoOiExLGNvbXBvdW5kOiExLGRpcmVjdGVkOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6RWgubGF5b3V0RGlyZWN0aW9uLG1hcmdpbng6MjAsbWFyZ2lueToyMCxub2Rlc2VwOjEwMCxlZGdlc2VwOjEwMCxyYW5rc2VwOjEwMH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBBPXAuZGIuZ2V0UmVxdWlyZW1lbnRzKCksST1wLmRiLmdldEVsZW1lbnRzKCksQj1wLmRiLmdldFJlbGF0aW9uc2hpcHMoKTtLSGUoQSxfLEUpLFhIZShJLF8sRSksUUhlKEIsXyksYUwoXyksWkhlKEUsXyksQi5mb3JFYWNoKGZ1bmN0aW9uKGV0KXtZSGUoRSxldCxfLGEscCl9KTtjb25zdCBOPUVoLnJlY3RfcGFkZGluZyxSPUUubm9kZSgpLmdldEJCb3goKSx6PVIud2lkdGgrTioyLFc9Ui5oZWlnaHQrTioyO2swKEUsVyx6LEVoLnVzZU1heFdpZHRoKSxFLmF0dHIoInZpZXdCb3giLGAke1IueC1OfSAke1IueS1OfSAke3p9ICR7V31gKX19LHN0eWxlczpVSGV9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBnZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihjZSxrZSx6dCxyZSl7Zm9yKHp0PXp0fHx7fSxyZT1jZS5sZW5ndGg7cmUtLTt6dFtjZVtyZV1dPWtlKTtyZXR1cm4genR9LGE9WzEsMl0sZj1bMSwzXSxwPVsxLDRdLHc9WzIsNF0sbT1bMSw5XSxiPVsxLDExXSxFPVsxLDEzXSxfPVsxLDE0XSxBPVsxLDE2XSxJPVsxLDE3XSxCPVsxLDE4XSxOPVsxLDI0XSxSPVsxLDI1XSx6PVsxLDI2XSxXPVsxLDI3XSxldD1bMSwyOF0sc3Q9WzEsMjldLGF0PVsxLDMwXSxidD1bMSwzMV0sbXQ9WzEsMzJdLHl0PVsxLDMzXSxmdD1bMSwzNF0sdXQ9WzEsMzVdLHZ0PVsxLDM2XSxYPVsxLDM3XSxwdD1bMSwzOF0sVT1bMSwzOV0sVHQ9WzEsNDFdLG50PVsxLDQyXSxJdD1bMSw0M10sT3Q9WzEsNDRdLEJ0PVsxLDQ1XSxFdD1bMSw0Nl0sWj1bMSw0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDcsNDgsNDksNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLEN0PVs0LDUsMTYsNTAsNTIsNTNdLHh0PVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLEh0PVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDksNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLExlPVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDgsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLEZ0PVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDcsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLGduPVs2OCw2OSw3MF0sU2U9WzEsMTIwXSxtZT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxORVdMSU5FOjUsU0Q6Nixkb2N1bWVudDo3LGxpbmU6OCxzdGF0ZW1lbnQ6OSxib3hfc2VjdGlvbjoxMCxib3hfbGluZToxMSxwYXJ0aWNpcGFudF9zdGF0ZW1lbnQ6MTIsY3JlYXRlOjEzLGJveDoxNCxyZXN0T2ZMaW5lOjE1LGVuZDoxNixzaWduYWw6MTcsYXV0b251bWJlcjoxOCxOVU06MTksb2ZmOjIwLGFjdGl2YXRlOjIxLGFjdG9yOjIyLGRlYWN0aXZhdGU6MjMsbm90ZV9zdGF0ZW1lbnQ6MjQsbGlua3Nfc3RhdGVtZW50OjI1LGxpbmtfc3RhdGVtZW50OjI2LHByb3BlcnRpZXNfc3RhdGVtZW50OjI3LGRldGFpbHNfc3RhdGVtZW50OjI4LHRpdGxlOjI5LGxlZ2FjeV90aXRsZTozMCxhY2NfdGl0bGU6MzEsYWNjX3RpdGxlX3ZhbHVlOjMyLGFjY19kZXNjcjozMyxhY2NfZGVzY3JfdmFsdWU6MzQsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTozNSxsb29wOjM2LHJlY3Q6Mzcsb3B0OjM4LGFsdDozOSxlbHNlX3NlY3Rpb25zOjQwLHBhcjo0MSxwYXJfc2VjdGlvbnM6NDIscGFyX292ZXI6NDMsY3JpdGljYWw6NDQsb3B0aW9uX3NlY3Rpb25zOjQ1LGJyZWFrOjQ2LG9wdGlvbjo0NyxhbmQ6NDgsZWxzZTo0OSxwYXJ0aWNpcGFudDo1MCxBUzo1MSxwYXJ0aWNpcGFudF9hY3Rvcjo1MixkZXN0cm95OjUzLG5vdGU6NTQscGxhY2VtZW50OjU1LHRleHQyOjU2LG92ZXI6NTcsYWN0b3JfcGFpcjo1OCxsaW5rczo1OSxsaW5rOjYwLHByb3BlcnRpZXM6NjEsZGV0YWlsczo2MixzcGFjZUxpc3Q6NjMsIiwiOjY0LGxlZnRfb2Y6NjUscmlnaHRfb2Y6NjYsc2lnbmFsdHlwZTo2NywiKyI6NjgsIi0iOjY5LEFDVE9SOjcwLFNPTElEX09QRU5fQVJST1c6NzEsRE9UVEVEX09QRU5fQVJST1c6NzIsU09MSURfQVJST1c6NzMsRE9UVEVEX0FSUk9XOjc0LFNPTElEX0NST1NTOjc1LERPVFRFRF9DUk9TUzo3NixTT0xJRF9QT0lOVDo3NyxET1RURURfUE9JTlQ6NzgsVFhUOjc5LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTUEFDRSIsNToiTkVXTElORSIsNjoiU0QiLDEzOiJjcmVhdGUiLDE0OiJib3giLDE1OiJyZXN0T2ZMaW5lIiwxNjoiZW5kIiwxODoiYXV0b251bWJlciIsMTk6Ik5VTSIsMjA6Im9mZiIsMjE6ImFjdGl2YXRlIiwyMzoiZGVhY3RpdmF0ZSIsMjk6InRpdGxlIiwzMDoibGVnYWN5X3RpdGxlIiwzMToiYWNjX3RpdGxlIiwzMjoiYWNjX3RpdGxlX3ZhbHVlIiwzMzoiYWNjX2Rlc2NyIiwzNDoiYWNjX2Rlc2NyX3ZhbHVlIiwzNToiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzY6Imxvb3AiLDM3OiJyZWN0IiwzODoib3B0IiwzOToiYWx0Iiw0MToicGFyIiw0MzoicGFyX292ZXIiLDQ0OiJjcml0aWNhbCIsNDY6ImJyZWFrIiw0Nzoib3B0aW9uIiw0ODoiYW5kIiw0OToiZWxzZSIsNTA6InBhcnRpY2lwYW50Iiw1MToiQVMiLDUyOiJwYXJ0aWNpcGFudF9hY3RvciIsNTM6ImRlc3Ryb3kiLDU0OiJub3RlIiw1Nzoib3ZlciIsNTk6ImxpbmtzIiw2MDoibGluayIsNjE6InByb3BlcnRpZXMiLDYyOiJkZXRhaWxzIiw2NDoiLCIsNjU6ImxlZnRfb2YiLDY2OiJyaWdodF9vZiIsNjg6IisiLDY5OiItIiw3MDoiQUNUT1IiLDcxOiJTT0xJRF9PUEVOX0FSUk9XIiw3MjoiRE9UVEVEX09QRU5fQVJST1ciLDczOiJTT0xJRF9BUlJPVyIsNzQ6IkRPVFRFRF9BUlJPVyIsNzU6IlNPTElEX0NST1NTIiw3NjoiRE9UVEVEX0NST1NTIiw3NzoiU09MSURfUE9JTlQiLDc4OiJET1RURURfUE9JTlQiLDc5OiJUWFQifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzcsMF0sWzcsMl0sWzgsMl0sWzgsMV0sWzgsMV0sWzEwLDBdLFsxMCwyXSxbMTEsMl0sWzExLDFdLFsxMSwxXSxbOSwxXSxbOSwyXSxbOSw0XSxbOSwyXSxbOSw0XSxbOSwzXSxbOSwzXSxbOSwyXSxbOSwzXSxbOSwzXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbNDUsMV0sWzQ1LDRdLFs0MiwxXSxbNDIsNF0sWzQwLDFdLFs0MCw0XSxbMTIsNV0sWzEyLDNdLFsxMiw1XSxbMTIsM10sWzEyLDNdLFsyNCw0XSxbMjQsNF0sWzI1LDNdLFsyNiwzXSxbMjcsM10sWzI4LDNdLFs2MywyXSxbNjMsMV0sWzU4LDNdLFs1OCwxXSxbNTUsMV0sWzU1LDFdLFsxNyw1XSxbMTcsNV0sWzE3LDRdLFsyMiwxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs1NiwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihrZSx6dCxyZSxzZSxQZSx0ZSxNZSl7dmFyIGRlPXRlLmxlbmd0aC0xO3N3aXRjaChQZSl7Y2FzZSAzOnJldHVybiBzZS5hcHBseSh0ZVtkZV0pLHRlW2RlXTtjYXNlIDQ6Y2FzZSA5OnRoaXMuJD1bXTticmVhaztjYXNlIDU6Y2FzZSAxMDp0ZVtkZS0xXS5wdXNoKHRlW2RlXSksdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6Y2FzZSAxMTpjYXNlIDEyOnRoaXMuJD10ZVtkZV07YnJlYWs7Y2FzZSA4OmNhc2UgMTM6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTU6dGVbZGVdLnR5cGU9ImNyZWF0ZVBhcnRpY2lwYW50Iix0aGlzLiQ9dGVbZGVdO2JyZWFrO2Nhc2UgMTY6dGVbZGUtMV0udW5zaGlmdCh7dHlwZToiYm94U3RhcnQiLGJveERhdGE6c2UucGFyc2VCb3hEYXRhKHRlW2RlLTJdKX0pLHRlW2RlLTFdLnB1c2goe3R5cGU6ImJveEVuZCIsYm94VGV4dDp0ZVtkZS0yXX0pLHRoaXMuJD10ZVtkZS0xXTticmVhaztjYXNlIDE4OnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VJbmRleDpOdW1iZXIodGVbZGUtMl0pLHNlcXVlbmNlSW5kZXhTdGVwOk51bWJlcih0ZVtkZS0xXSksc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlSW5kZXg6TnVtYmVyKHRlW2RlLTFdKSxzZXF1ZW5jZUluZGV4U3RlcDoxLHNlcXVlbmNlVmlzaWJsZTohMCxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjA6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZVZpc2libGU6ITEsc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIxOnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9e3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3Rvcjp0ZVtkZS0xXX07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOnRlW2RlLTFdfTticmVhaztjYXNlIDI5OnNlLnNldERpYWdyYW1UaXRsZSh0ZVtkZV0uc3Vic3RyaW5nKDYpKSx0aGlzLiQ9dGVbZGVdLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDMwOnNlLnNldERpYWdyYW1UaXRsZSh0ZVtkZV0uc3Vic3RyaW5nKDcpKSx0aGlzLiQ9dGVbZGVdLnN1YnN0cmluZyg3KTticmVhaztjYXNlIDMxOnRoaXMuJD10ZVtkZV0udHJpbSgpLHNlLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMjpjYXNlIDMzOnRoaXMuJD10ZVtkZV0udHJpbSgpLHNlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzNDp0ZVtkZS0xXS51bnNoaWZ0KHt0eXBlOiJsb29wU3RhcnQiLGxvb3BUZXh0OnNlLnBhcnNlTWVzc2FnZSh0ZVtkZS0yXSksc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5MT09QX1NUQVJUfSksdGVbZGUtMV0ucHVzaCh7dHlwZToibG9vcEVuZCIsbG9vcFRleHQ6dGVbZGUtMl0sc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5MT09QX0VORH0pLHRoaXMuJD10ZVtkZS0xXTticmVhaztjYXNlIDM1OnRlW2RlLTFdLnVuc2hpZnQoe3R5cGU6InJlY3RTdGFydCIsY29sb3I6c2UucGFyc2VNZXNzYWdlKHRlW2RlLTJdKSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLlJFQ1RfU1RBUlR9KSx0ZVtkZS0xXS5wdXNoKHt0eXBlOiJyZWN0RW5kIixjb2xvcjpzZS5wYXJzZU1lc3NhZ2UodGVbZGUtMl0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuUkVDVF9FTkR9KSx0aGlzLiQ9dGVbZGUtMV07YnJlYWs7Y2FzZSAzNjp0ZVtkZS0xXS51bnNoaWZ0KHt0eXBlOiJvcHRTdGFydCIsb3B0VGV4dDpzZS5wYXJzZU1lc3NhZ2UodGVbZGUtMl0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuT1BUX1NUQVJUfSksdGVbZGUtMV0ucHVzaCh7dHlwZToib3B0RW5kIixvcHRUZXh0OnNlLnBhcnNlTWVzc2FnZSh0ZVtkZS0yXSksc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5PUFRfRU5EfSksdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgMzc6dGVbZGUtMV0udW5zaGlmdCh7dHlwZToiYWx0U3RhcnQiLGFsdFRleHQ6c2UucGFyc2VNZXNzYWdlKHRlW2RlLTJdKSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkFMVF9TVEFSVH0pLHRlW2RlLTFdLnB1c2goe3R5cGU6ImFsdEVuZCIsc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5BTFRfRU5EfSksdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgMzg6dGVbZGUtMV0udW5zaGlmdCh7dHlwZToicGFyU3RhcnQiLHBhclRleHQ6c2UucGFyc2VNZXNzYWdlKHRlW2RlLTJdKSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLlBBUl9TVEFSVH0pLHRlW2RlLTFdLnB1c2goe3R5cGU6InBhckVuZCIsc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5QQVJfRU5EfSksdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgMzk6dGVbZGUtMV0udW5zaGlmdCh7dHlwZToicGFyU3RhcnQiLHBhclRleHQ6c2UucGFyc2VNZXNzYWdlKHRlW2RlLTJdKSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUfSksdGVbZGUtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOnNlLkxJTkVUWVBFLlBBUl9FTkR9KSx0aGlzLiQ9dGVbZGUtMV07YnJlYWs7Y2FzZSA0MDp0ZVtkZS0xXS51bnNoaWZ0KHt0eXBlOiJjcml0aWNhbFN0YXJ0Iixjcml0aWNhbFRleHQ6c2UucGFyc2VNZXNzYWdlKHRlW2RlLTJdKSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkNSSVRJQ0FMX1NUQVJUfSksdGVbZGUtMV0ucHVzaCh7dHlwZToiY3JpdGljYWxFbmQiLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQ1JJVElDQUxfRU5EfSksdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgNDE6dGVbZGUtMV0udW5zaGlmdCh7dHlwZToiYnJlYWtTdGFydCIsYnJlYWtUZXh0OnNlLnBhcnNlTWVzc2FnZSh0ZVtkZS0yXSksc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5CUkVBS19TVEFSVH0pLHRlW2RlLTFdLnB1c2goe3R5cGU6ImJyZWFrRW5kIixvcHRUZXh0OnNlLnBhcnNlTWVzc2FnZSh0ZVtkZS0yXSksc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5CUkVBS19FTkR9KSx0aGlzLiQ9dGVbZGUtMV07YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9dGVbZGUtM10uY29uY2F0KFt7dHlwZToib3B0aW9uIixvcHRpb25UZXh0OnNlLnBhcnNlTWVzc2FnZSh0ZVtkZS0xXSksc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT059LHRlW2RlXV0pO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXRlW2RlLTNdLmNvbmNhdChbe3R5cGU6ImFuZCIscGFyVGV4dDpzZS5wYXJzZU1lc3NhZ2UodGVbZGUtMV0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuUEFSX0FORH0sdGVbZGVdXSk7YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9dGVbZGUtM10uY29uY2F0KFt7dHlwZToiZWxzZSIsYWx0VGV4dDpzZS5wYXJzZU1lc3NhZ2UodGVbZGUtMV0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQUxUX0VMU0V9LHRlW2RlXV0pO2JyZWFrO2Nhc2UgNDg6dGVbZGUtM10uZHJhdz0icGFydGljaXBhbnQiLHRlW2RlLTNdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0ZVtkZS0zXS5kZXNjcmlwdGlvbj1zZS5wYXJzZU1lc3NhZ2UodGVbZGUtMV0pLHRoaXMuJD10ZVtkZS0zXTticmVhaztjYXNlIDQ5OnRlW2RlLTFdLmRyYXc9InBhcnRpY2lwYW50Iix0ZVtkZS0xXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgNTA6dGVbZGUtM10uZHJhdz0iYWN0b3IiLHRlW2RlLTNdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0ZVtkZS0zXS5kZXNjcmlwdGlvbj1zZS5wYXJzZU1lc3NhZ2UodGVbZGUtMV0pLHRoaXMuJD10ZVtkZS0zXTticmVhaztjYXNlIDUxOnRlW2RlLTFdLmRyYXc9ImFjdG9yIix0ZVtkZS0xXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsdGhpcy4kPXRlW2RlLTFdO2JyZWFrO2Nhc2UgNTI6dGVbZGUtMV0udHlwZT0iZGVzdHJveVBhcnRpY2lwYW50Iix0aGlzLiQ9dGVbZGUtMV07YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9W3RlW2RlLTFdLHt0eXBlOiJhZGROb3RlIixwbGFjZW1lbnQ6dGVbZGUtMl0sYWN0b3I6dGVbZGUtMV0uYWN0b3IsdGV4dDp0ZVtkZV19XTticmVhaztjYXNlIDU0OnRlW2RlLTJdPVtdLmNvbmNhdCh0ZVtkZS0xXSx0ZVtkZS0xXSkuc2xpY2UoMCwyKSx0ZVtkZS0yXVswXT10ZVtkZS0yXVswXS5hY3Rvcix0ZVtkZS0yXVsxXT10ZVtkZS0yXVsxXS5hY3Rvcix0aGlzLiQ9W3RlW2RlLTFdLHt0eXBlOiJhZGROb3RlIixwbGFjZW1lbnQ6c2UuUExBQ0VNRU5ULk9WRVIsYWN0b3I6dGVbZGUtMl0uc2xpY2UoMCwyKSx0ZXh0OnRlW2RlXX1dO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPVt0ZVtkZS0xXSx7dHlwZToiYWRkTGlua3MiLGFjdG9yOnRlW2RlLTFdLmFjdG9yLHRleHQ6dGVbZGVdfV07YnJlYWs7Y2FzZSA1Njp0aGlzLiQ9W3RlW2RlLTFdLHt0eXBlOiJhZGRBTGluayIsYWN0b3I6dGVbZGUtMV0uYWN0b3IsdGV4dDp0ZVtkZV19XTticmVhaztjYXNlIDU3OnRoaXMuJD1bdGVbZGUtMV0se3R5cGU6ImFkZFByb3BlcnRpZXMiLGFjdG9yOnRlW2RlLTFdLmFjdG9yLHRleHQ6dGVbZGVdfV07YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9W3RlW2RlLTFdLHt0eXBlOiJhZGREZXRhaWxzIixhY3Rvcjp0ZVtkZS0xXS5hY3Rvcix0ZXh0OnRlW2RlXX1dO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPVt0ZVtkZS0yXSx0ZVtkZV1dO2JyZWFrO2Nhc2UgNjI6dGhpcy4kPXRlW2RlXTticmVhaztjYXNlIDYzOnRoaXMuJD1zZS5QTEFDRU1FTlQuTEVGVE9GO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPXNlLlBMQUNFTUVOVC5SSUdIVE9GO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPVt0ZVtkZS00XSx0ZVtkZS0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTp0ZVtkZS00XS5hY3Rvcix0bzp0ZVtkZS0xXS5hY3RvcixzaWduYWxUeXBlOnRlW2RlLTNdLG1zZzp0ZVtkZV0sYWN0aXZhdGU6ITB9LHt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQsYWN0b3I6dGVbZGUtMV19XTticmVhaztjYXNlIDY2OnRoaXMuJD1bdGVbZGUtNF0sdGVbZGUtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206dGVbZGUtNF0uYWN0b3IsdG86dGVbZGUtMV0uYWN0b3Isc2lnbmFsVHlwZTp0ZVtkZS0zXSxtc2c6dGVbZGVdfSx7dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6dGVbZGUtNF19XTticmVhaztjYXNlIDY3OnRoaXMuJD1bdGVbZGUtM10sdGVbZGUtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206dGVbZGUtM10uYWN0b3IsdG86dGVbZGUtMV0uYWN0b3Isc2lnbmFsVHlwZTp0ZVtkZS0yXSxtc2c6dGVbZGVdfV07YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9e3R5cGU6ImFkZFBhcnRpY2lwYW50IixhY3Rvcjp0ZVtkZV19O2JyZWFrO2Nhc2UgNjk6dGhpcy4kPXNlLkxJTkVUWVBFLlNPTElEX09QRU47YnJlYWs7Y2FzZSA3MDp0aGlzLiQ9c2UuTElORVRZUEUuRE9UVEVEX09QRU47YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9c2UuTElORVRZUEUuU09MSUQ7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9c2UuTElORVRZUEUuRE9UVEVEO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPXNlLkxJTkVUWVBFLlNPTElEX0NST1NTO2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPXNlLkxJTkVUWVBFLkRPVFRFRF9DUk9TUzticmVhaztjYXNlIDc1OnRoaXMuJD1zZS5MSU5FVFlQRS5TT0xJRF9QT0lOVDticmVhaztjYXNlIDc2OnRoaXMuJD1zZS5MSU5FVFlQRS5ET1RURURfUE9JTlQ7YnJlYWs7Y2FzZSA3Nzp0aGlzLiQ9c2UucGFyc2VNZXNzYWdlKHRlW2RlXS50cmltKCkuc3Vic3RyaW5nKDEpKTticmVha319LHRhYmxlOlt7MzoxLDQ6YSw1OmYsNjpwfSx7MTpbM119LHszOjUsNDphLDU6Ziw2OnB9LHszOjYsNDphLDU6Ziw2OnB9LGkoWzEsNCw1LDEzLDE0LDE4LDIxLDIzLDI5LDMwLDMxLDMzLDM1LDM2LDM3LDM4LDM5LDQxLDQzLDQ0LDQ2LDUwLDUyLDUzLDU0LDU5LDYwLDYxLDYyLDcwXSx3LHs3Ojd9KSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdLDQ6bSw1OmIsODo4LDk6MTAsMTI6MTIsMTM6RSwxNDpfLDE3OjE1LDE4OkEsMjE6SSwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5Ok4sMzA6UiwzMTp6LDMzOlcsMzU6ZXQsMzY6c3QsMzc6YXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZnQsNDQ6dXQsNDY6dnQsNTA6WCw1MjpwdCw1MzpVLDU0OlR0LDU5Om50LDYwOkl0LDYxOk90LDYyOkJ0LDcwOkV0fSxpKFosWzIsNV0pLHs5OjQ3LDEyOjEyLDEzOkUsMTQ6XywxNzoxNSwxODpBLDIxOkksMjI6NDAsMjM6QiwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpOLDMwOlIsMzE6eiwzMzpXLDM1OmV0LDM2OnN0LDM3OmF0LDM4OmJ0LDM5Om10LDQxOnl0LDQzOmZ0LDQ0OnV0LDQ2OnZ0LDUwOlgsNTI6cHQsNTM6VSw1NDpUdCw1OTpudCw2MDpJdCw2MTpPdCw2MjpCdCw3MDpFdH0saShaLFsyLDddKSxpKFosWzIsOF0pLGkoWixbMiwxNF0pLHsxMjo0OCw1MDpYLDUyOnB0LDUzOlV9LHsxNTpbMSw0OV19LHs1OlsxLDUwXX0sezU6WzEsNTNdLDE5OlsxLDUxXSwyMDpbMSw1Ml19LHsyMjo1NCw3MDpFdH0sezIyOjU1LDcwOkV0fSx7NTpbMSw1Nl19LHs1OlsxLDU3XX0sezU6WzEsNThdfSx7NTpbMSw1OV19LHs1OlsxLDYwXX0saShaLFsyLDI5XSksaShaLFsyLDMwXSksezMyOlsxLDYxXX0sezM0OlsxLDYyXX0saShaLFsyLDMzXSksezE1OlsxLDYzXX0sezE1OlsxLDY0XX0sezE1OlsxLDY1XX0sezE1OlsxLDY2XX0sezE1OlsxLDY3XX0sezE1OlsxLDY4XX0sezE1OlsxLDY5XX0sezE1OlsxLDcwXX0sezIyOjcxLDcwOkV0fSx7MjI6NzIsNzA6RXR9LHsyMjo3Myw3MDpFdH0sezY3Ojc0LDcxOlsxLDc1XSw3MjpbMSw3Nl0sNzM6WzEsNzddLDc0OlsxLDc4XSw3NTpbMSw3OV0sNzY6WzEsODBdLDc3OlsxLDgxXSw3ODpbMSw4Ml19LHs1NTo4Myw1NzpbMSw4NF0sNjU6WzEsODVdLDY2OlsxLDg2XX0sezIyOjg3LDcwOkV0fSx7MjI6ODgsNzA6RXR9LHsyMjo4OSw3MDpFdH0sezIyOjkwLDcwOkV0fSxpKFs1LDUxLDY0LDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5XSxbMiw2OF0pLGkoWixbMiw2XSksaShaLFsyLDE1XSksaShDdCxbMiw5XSx7MTA6OTF9KSxpKFosWzIsMTddKSx7NTpbMSw5M10sMTk6WzEsOTJdfSx7NTpbMSw5NF19LGkoWixbMiwyMV0pLHs1OlsxLDk1XX0sezU6WzEsOTZdfSxpKFosWzIsMjRdKSxpKFosWzIsMjVdKSxpKFosWzIsMjZdKSxpKFosWzIsMjddKSxpKFosWzIsMjhdKSxpKFosWzIsMzFdKSxpKFosWzIsMzJdKSxpKHh0LHcsezc6OTd9KSxpKHh0LHcsezc6OTh9KSxpKHh0LHcsezc6OTl9KSxpKEh0LHcsezQwOjEwMCw3OjEwMX0pLGkoTGUsdyx7NDI6MTAyLDc6MTAzfSksaShMZSx3LHs3OjEwMyw0MjoxMDR9KSxpKEZ0LHcsezQ1OjEwNSw3OjEwNn0pLGkoeHQsdyx7NzoxMDd9KSx7NTpbMSwxMDldLDUxOlsxLDEwOF19LHs1OlsxLDExMV0sNTE6WzEsMTEwXX0sezU6WzEsMTEyXX0sezIyOjExNSw2ODpbMSwxMTNdLDY5OlsxLDExNF0sNzA6RXR9LGkoZ24sWzIsNjldKSxpKGduLFsyLDcwXSksaShnbixbMiw3MV0pLGkoZ24sWzIsNzJdKSxpKGduLFsyLDczXSksaShnbixbMiw3NF0pLGkoZ24sWzIsNzVdKSxpKGduLFsyLDc2XSksezIyOjExNiw3MDpFdH0sezIyOjExOCw1ODoxMTcsNzA6RXR9LHs3MDpbMiw2M119LHs3MDpbMiw2NF19LHs1NjoxMTksNzk6U2V9LHs1NjoxMjEsNzk6U2V9LHs1NjoxMjIsNzk6U2V9LHs1NjoxMjMsNzk6U2V9LHs0OlsxLDEyNl0sNTpbMSwxMjhdLDExOjEyNSwxMjoxMjcsMTY6WzEsMTI0XSw1MDpYLDUyOnB0LDUzOlV9LHs1OlsxLDEyOV19LGkoWixbMiwxOV0pLGkoWixbMiwyMF0pLGkoWixbMiwyMl0pLGkoWixbMiwyM10pLHs0Om0sNTpiLDg6OCw5OjEwLDEyOjEyLDEzOkUsMTQ6XywxNjpbMSwxMzBdLDE3OjE1LDE4OkEsMjE6SSwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5Ok4sMzA6UiwzMTp6LDMzOlcsMzU6ZXQsMzY6c3QsMzc6YXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZnQsNDQ6dXQsNDY6dnQsNTA6WCw1MjpwdCw1MzpVLDU0OlR0LDU5Om50LDYwOkl0LDYxOk90LDYyOkJ0LDcwOkV0fSx7NDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTY6WzEsMTMxXSwxNzoxNSwxODpBLDIxOkksMjI6NDAsMjM6QiwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpOLDMwOlIsMzE6eiwzMzpXLDM1OmV0LDM2OnN0LDM3OmF0LDM4OmJ0LDM5Om10LDQxOnl0LDQzOmZ0LDQ0OnV0LDQ2OnZ0LDUwOlgsNTI6cHQsNTM6VSw1NDpUdCw1OTpudCw2MDpJdCw2MTpPdCw2MjpCdCw3MDpFdH0sezQ6bSw1OmIsODo4LDk6MTAsMTI6MTIsMTM6RSwxNDpfLDE2OlsxLDEzMl0sMTc6MTUsMTg6QSwyMTpJLDIyOjQwLDIzOkIsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6TiwzMDpSLDMxOnosMzM6VywzNTpldCwzNjpzdCwzNzphdCwzODpidCwzOTptdCw0MTp5dCw0MzpmdCw0NDp1dCw0Njp2dCw1MDpYLDUyOnB0LDUzOlUsNTQ6VHQsNTk6bnQsNjA6SXQsNjE6T3QsNjI6QnQsNzA6RXR9LHsxNjpbMSwxMzNdfSx7NDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTY6WzIsNDZdLDE3OjE1LDE4OkEsMjE6SSwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5Ok4sMzA6UiwzMTp6LDMzOlcsMzU6ZXQsMzY6c3QsMzc6YXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZnQsNDQ6dXQsNDY6dnQsNDk6WzEsMTM0XSw1MDpYLDUyOnB0LDUzOlUsNTQ6VHQsNTk6bnQsNjA6SXQsNjE6T3QsNjI6QnQsNzA6RXR9LHsxNjpbMSwxMzVdfSx7NDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTY6WzIsNDRdLDE3OjE1LDE4OkEsMjE6SSwyMjo0MCwyMzpCLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5Ok4sMzA6UiwzMTp6LDMzOlcsMzU6ZXQsMzY6c3QsMzc6YXQsMzg6YnQsMzk6bXQsNDE6eXQsNDM6ZnQsNDQ6dXQsNDY6dnQsNDg6WzEsMTM2XSw1MDpYLDUyOnB0LDUzOlUsNTQ6VHQsNTk6bnQsNjA6SXQsNjE6T3QsNjI6QnQsNzA6RXR9LHsxNjpbMSwxMzddfSx7MTY6WzEsMTM4XX0sezQ6bSw1OmIsODo4LDk6MTAsMTI6MTIsMTM6RSwxNDpfLDE2OlsyLDQyXSwxNzoxNSwxODpBLDIxOkksMjI6NDAsMjM6QiwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpOLDMwOlIsMzE6eiwzMzpXLDM1OmV0LDM2OnN0LDM3OmF0LDM4OmJ0LDM5Om10LDQxOnl0LDQzOmZ0LDQ0OnV0LDQ2OnZ0LDQ3OlsxLDEzOV0sNTA6WCw1MjpwdCw1MzpVLDU0OlR0LDU5Om50LDYwOkl0LDYxOk90LDYyOkJ0LDcwOkV0fSx7NDptLDU6Yiw4OjgsOToxMCwxMjoxMiwxMzpFLDE0Ol8sMTY6WzEsMTQwXSwxNzoxNSwxODpBLDIxOkksMjI6NDAsMjM6QiwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpOLDMwOlIsMzE6eiwzMzpXLDM1OmV0LDM2OnN0LDM3OmF0LDM4OmJ0LDM5Om10LDQxOnl0LDQzOmZ0LDQ0OnV0LDQ2OnZ0LDUwOlgsNTI6cHQsNTM6VSw1NDpUdCw1OTpudCw2MDpJdCw2MTpPdCw2MjpCdCw3MDpFdH0sezE1OlsxLDE0MV19LGkoWixbMiw0OV0pLHsxNTpbMSwxNDJdfSxpKFosWzIsNTFdKSxpKFosWzIsNTJdKSx7MjI6MTQzLDcwOkV0fSx7MjI6MTQ0LDcwOkV0fSx7NTY6MTQ1LDc5OlNlfSx7NTY6MTQ2LDc5OlNlfSx7NTY6MTQ3LDc5OlNlfSx7NjQ6WzEsMTQ4XSw3OTpbMiw2Ml19LHs1OlsyLDU1XX0sezU6WzIsNzddfSx7NTpbMiw1Nl19LHs1OlsyLDU3XX0sezU6WzIsNThdfSxpKFosWzIsMTZdKSxpKEN0LFsyLDEwXSksezEyOjE0OSw1MDpYLDUyOnB0LDUzOlV9LGkoQ3QsWzIsMTJdKSxpKEN0LFsyLDEzXSksaShaLFsyLDE4XSksaShaLFsyLDM0XSksaShaLFsyLDM1XSksaShaLFsyLDM2XSksaShaLFsyLDM3XSksezE1OlsxLDE1MF19LGkoWixbMiwzOF0pLHsxNTpbMSwxNTFdfSxpKFosWzIsMzldKSxpKFosWzIsNDBdKSx7MTU6WzEsMTUyXX0saShaLFsyLDQxXSksezU6WzEsMTUzXX0sezU6WzEsMTU0XX0sezU2OjE1NSw3OTpTZX0sezU2OjE1Niw3OTpTZX0sezU6WzIsNjddfSx7NTpbMiw1M119LHs1OlsyLDU0XX0sezIyOjE1Nyw3MDpFdH0saShDdCxbMiwxMV0pLGkoSHQsdyx7NzoxMDEsNDA6MTU4fSksaShMZSx3LHs3OjEwMyw0MjoxNTl9KSxpKEZ0LHcsezc6MTA2LDQ1OjE2MH0pLGkoWixbMiw0OF0pLGkoWixbMiw1MF0pLHs1OlsyLDY1XX0sezU6WzIsNjZdfSx7Nzk6WzIsNjFdfSx7MTY6WzIsNDddfSx7MTY6WzIsNDVdfSx7MTY6WzIsNDNdfV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMV0sNjpbMiwyXSw4NTpbMiw2M10sODY6WzIsNjRdLDExOTpbMiw1NV0sMTIwOlsyLDc3XSwxMjE6WzIsNTZdLDEyMjpbMiw1N10sMTIzOlsyLDU4XSwxNDU6WzIsNjddLDE0NjpbMiw1M10sMTQ3OlsyLDU0XSwxNTU6WzIsNjVdLDE1NjpbMiw2Nl0sMTU3OlsyLDYxXSwxNTg6WzIsNDddLDE1OTpbMiw0NV0sMTYwOlsyLDQzXX0scGFyc2VFcnJvcjpmdW5jdGlvbihrZSx6dCl7aWYoenQucmVjb3ZlcmFibGUpdGhpcy50cmFjZShrZSk7ZWxzZXt2YXIgcmU9bmV3IEVycm9yKGtlKTt0aHJvdyByZS5oYXNoPXp0LHJlfX0scGFyc2U6ZnVuY3Rpb24oa2Upe3ZhciB6dD10aGlzLHJlPVswXSxzZT1bXSxQZT1bbnVsbF0sdGU9W10sTWU9dGhpcy50YWJsZSxkZT0iIixvbj0wLG5pPTAsS3M9Mix3cz0xLGZvPXRlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFhpPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksRXI9e3l5Ont9fTtmb3IodmFyIFhuIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksWG4pJiYoRXIueXlbWG5dPXRoaXMueXlbWG5dKTtYaS5zZXRJbnB1dChrZSxFci55eSksRXIueXkubGV4ZXI9WGksRXIueXkucGFyc2VyPXRoaXMsdHlwZW9mIFhpLnl5bGxvYz4idSImJihYaS55eWxsb2M9e30pO3ZhciBkaT1YaS55eWxsb2M7dGUucHVzaChkaSk7dmFyIEVlPVhpLm9wdGlvbnMmJlhpLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBFci55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1Fci55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBLbigpe3ZhciB6cztyZXR1cm4genM9c2UucG9wKCl8fFhpLmxleCgpfHx3cyx0eXBlb2YgenMhPSJudW1iZXIiJiYoenMgaW5zdGFuY2VvZiBBcnJheSYmKHNlPXpzLHpzPXNlLnBvcCgpKSx6cz16dC5zeW1ib2xzX1t6c118fHpzKSx6c31mb3IodmFyIEhlLFRpLHBuLEVzLHFhPXt9LE1hLEdzLFBvLHZzOzspe2lmKFRpPXJlW3JlLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW1RpXT9wbj10aGlzLmRlZmF1bHRBY3Rpb25zW1RpXTooKEhlPT09bnVsbHx8dHlwZW9mIEhlPiJ1IikmJihIZT1LbigpKSxwbj1NZVtUaV0mJk1lW1RpXVtIZV0pLHR5cGVvZiBwbj4idSJ8fCFwbi5sZW5ndGh8fCFwblswXSl7dmFyIHJ1PSIiO3ZzPVtdO2ZvcihNYSBpbiBNZVtUaV0pdGhpcy50ZXJtaW5hbHNfW01hXSYmTWE+S3MmJnZzLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tNYV0rIiciKTtYaS5zaG93UG9zaXRpb24/cnU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisob24rMSkrYDoKYCtYaS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3ZzLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bSGVdfHxIZSkrIiciOnJ1PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG9uKzEpKyI6IFVuZXhwZWN0ZWQgIisoSGU9PXdzPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0hlXXx8SGUpKyInIiksdGhpcy5wYXJzZUVycm9yKHJ1LHt0ZXh0OlhpLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tIZV18fEhlLGxpbmU6WGkueXlsaW5lbm8sbG9jOmRpLGV4cGVjdGVkOnZzfSl9aWYocG5bMF1pbnN0YW5jZW9mIEFycmF5JiZwbi5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK1RpKyIsIHRva2VuOiAiK0hlKTtzd2l0Y2gocG5bMF0pe2Nhc2UgMTpyZS5wdXNoKEhlKSxQZS5wdXNoKFhpLnl5dGV4dCksdGUucHVzaChYaS55eWxsb2MpLHJlLnB1c2gocG5bMV0pLEhlPW51bGwsbmk9WGkueXlsZW5nLGRlPVhpLnl5dGV4dCxvbj1YaS55eWxpbmVubyxkaT1YaS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKEdzPXRoaXMucHJvZHVjdGlvbnNfW3BuWzFdXVsxXSxxYS4kPVBlW1BlLmxlbmd0aC1Hc10scWEuXyQ9e2ZpcnN0X2xpbmU6dGVbdGUubGVuZ3RoLShHc3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRlW3RlLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRlW3RlLmxlbmd0aC0oR3N8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGVbdGUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxFZSYmKHFhLl8kLnJhbmdlPVt0ZVt0ZS5sZW5ndGgtKEdzfHwxKV0ucmFuZ2VbMF0sdGVbdGUubGVuZ3RoLTFdLnJhbmdlWzFdXSksRXM9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHFhLFtkZSxuaSxvbixFci55eSxwblsxXSxQZSx0ZV0uY29uY2F0KGZvKSksdHlwZW9mIEVzPCJ1IilyZXR1cm4gRXM7R3MmJihyZT1yZS5zbGljZSgwLC0xKkdzKjIpLFBlPVBlLnNsaWNlKDAsLTEqR3MpLHRlPXRlLnNsaWNlKDAsLTEqR3MpKSxyZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3BuWzFdXVswXSksUGUucHVzaChxYS4kKSx0ZS5wdXNoKHFhLl8kKSxQbz1NZVtyZVtyZS5sZW5ndGgtMl1dW3JlW3JlLmxlbmd0aC0xXV0scmUucHVzaChQbyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LFZlPWZ1bmN0aW9uKCl7dmFyIGNlPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHp0LHJlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHp0LHJlKTtlbHNlIHRocm93IG5ldyBFcnJvcih6dCl9LHNldElucHV0OmZ1bmN0aW9uKGtlLHp0KXtyZXR1cm4gdGhpcy55eT16dHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9a2UsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIGtlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1rZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9a2UsdGhpcy5tYXRjaGVkKz1rZTt2YXIgenQ9a2UubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiB6dD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksa2V9LHVucHV0OmZ1bmN0aW9uKGtlKXt2YXIgenQ9a2UubGVuZ3RoLHJlPWtlLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9a2UrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXp0KSx0aGlzLm9mZnNldC09enQ7dmFyIHNlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLHJlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09cmUubGVuZ3RoLTEpO3ZhciBQZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46cmU/KHJlLmxlbmd0aD09PXNlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrc2Vbc2UubGVuZ3RoLXJlLmxlbmd0aF0ubGVuZ3RoLXJlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tenR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bUGVbMF0sUGVbMF0rdGhpcy55eWxlbmctenRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihrZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGtlKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBrZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGtlLmxlbmd0aD4yMD8iLi4uIjoiIikra2Uuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIga2U9dGhpcy5tYXRjaDtyZXR1cm4ga2UubGVuZ3RoPDIwJiYoa2UrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWtlLmxlbmd0aCkpLChrZS5zdWJzdHIoMCwyMCkrKGtlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIga2U9dGhpcy5wYXN0SW5wdXQoKSx6dD1uZXcgQXJyYXkoa2UubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4ga2UrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK3p0KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihrZSx6dCl7dmFyIHJlLHNlLFBlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihQZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihQZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxzZT1rZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksc2UmJih0aGlzLnl5bGluZW5vKz1zZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpzZT9zZVtzZS5sZW5ndGgtMV0ubGVuZ3RoLXNlW3NlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2tlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWtlWzBdLHRoaXMubWF0Y2grPWtlWzBdLHRoaXMubWF0Y2hlcz1rZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShrZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9a2VbMF0scmU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsenQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSkscmUpcmV0dXJuIHJlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB0ZSBpbiBQZSl0aGlzW3RlXT1QZVt0ZV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIga2UsenQscmUsc2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgUGU9dGhpcy5fY3VycmVudFJ1bGVzKCksdGU9MDt0ZTxQZS5sZW5ndGg7dGUrKylpZihyZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1BlW3RlXV0pLHJlJiYoIXp0fHxyZVswXS5sZW5ndGg+enRbMF0ubGVuZ3RoKSl7aWYoenQ9cmUsc2U9dGUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoa2U9dGhpcy50ZXN0X21hdGNoKHJlLFBlW3RlXSksa2UhPT0hMSlyZXR1cm4ga2U7aWYodGhpcy5fYmFja3RyYWNrKXt6dD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiB6dD8oa2U9dGhpcy50ZXN0X21hdGNoKHp0LFBlW3NlXSksa2UhPT0hMT9rZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHp0PXRoaXMubmV4dCgpO3JldHVybiB6dHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oenQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh6dCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIHp0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHp0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oenQpe3JldHVybiB6dD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHp0fHwwKSx6dD49MD90aGlzLmNvbmRpdGlvblN0YWNrW3p0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih6dCl7dGhpcy5iZWdpbih6dCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oenQscmUsc2UsUGUpe3N3aXRjaChzZSl7Y2FzZSAwOnJldHVybiA1O2Nhc2UgMTpicmVhaztjYXNlIDI6YnJlYWs7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiAxOTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwxNDtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTA7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDUyO2Nhc2UgMTA6cmV0dXJuIDEzO2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTM7Y2FzZSAxMjpyZXR1cm4gcmUueXl0ZXh0PXJlLnl5dGV4dC50cmltKCksdGhpcy5iZWdpbigiQUxJQVMiKSw3MDtjYXNlIDEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oIkxJTkUiKSw1MTtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM2O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNztjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzg7Y2FzZSAxODpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM5O2Nhc2UgMTk6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0OTtjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDE7Y2FzZSAyMTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQzO2Nhc2UgMjI6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0ODtjYXNlIDIzOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDQ7Y2FzZSAyNDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ3O2Nhc2UgMjU6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0NjtjYXNlIDI2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTU7Y2FzZSAyNzpyZXR1cm4gMTY7Y2FzZSAyODpyZXR1cm4gNjU7Y2FzZSAyOTpyZXR1cm4gNjY7Y2FzZSAzMDpyZXR1cm4gNTk7Y2FzZSAzMTpyZXR1cm4gNjA7Y2FzZSAzMjpyZXR1cm4gNjE7Y2FzZSAzMzpyZXR1cm4gNjI7Y2FzZSAzNDpyZXR1cm4gNTc7Y2FzZSAzNTpyZXR1cm4gNTQ7Y2FzZSAzNjpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyMTtjYXNlIDM3OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIzO2Nhc2UgMzg6cmV0dXJuIDI5O2Nhc2UgMzk6cmV0dXJuIDMwO2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMxO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzMztjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0NDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA0NTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA0NzpyZXR1cm4gNjtjYXNlIDQ4OnJldHVybiAxODtjYXNlIDQ5OnJldHVybiAyMDtjYXNlIDUwOnJldHVybiA2NDtjYXNlIDUxOnJldHVybiA1O2Nhc2UgNTI6cmV0dXJuIHJlLnl5dGV4dD1yZS55eXRleHQudHJpbSgpLDcwO2Nhc2UgNTM6cmV0dXJuIDczO2Nhc2UgNTQ6cmV0dXJuIDc0O2Nhc2UgNTU6cmV0dXJuIDcxO2Nhc2UgNTY6cmV0dXJuIDcyO2Nhc2UgNTc6cmV0dXJuIDc1O2Nhc2UgNTg6cmV0dXJuIDc2O2Nhc2UgNTk6cmV0dXJuIDc3O2Nhc2UgNjA6cmV0dXJuIDc4O2Nhc2UgNjE6cmV0dXJuIDc5O2Nhc2UgNjI6cmV0dXJuIDY4O2Nhc2UgNjM6cmV0dXJuIDY5O2Nhc2UgNjQ6cmV0dXJuIDU7Y2FzZSA2NTpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86WzAtOV0rKD89WyBcbl0rKSkvaSwvXig/OmJveFxiKS9pLC9eKD86cGFydGljaXBhbnRcYikvaSwvXig/OmFjdG9yXGIpL2ksL14oPzpjcmVhdGVcYikvaSwvXig/OmRlc3Ryb3lcYikvaSwvXig/OlteXC0+OlxuLDtdKz8oW1wtXSpbXlwtPjpcbiw7XSs/KSo/KD89KCg/IVxuKVxzKSthcyg/IVxuKVxzfFsjXG47XXwkKSkvaSwvXig/OmFzXGIpL2ksL14oPzooPzopKS9pLC9eKD86bG9vcFxiKS9pLC9eKD86cmVjdFxiKS9pLC9eKD86b3B0XGIpL2ksL14oPzphbHRcYikvaSwvXig/OmVsc2VcYikvaSwvXig/OnBhclxiKS9pLC9eKD86cGFyX292ZXJcYikvaSwvXig/OmFuZFxiKS9pLC9eKD86Y3JpdGljYWxcYikvaSwvXig/Om9wdGlvblxiKS9pLC9eKD86YnJlYWtcYikvaSwvXig/Oig/Ols6XT8oPzpubyk/d3JhcCk/W14jXG47XSopL2ksL14oPzplbmRcYikvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzpsaW5rc1xiKS9pLC9eKD86bGlua1xiKS9pLC9eKD86cHJvcGVydGllc1xiKS9pLC9eKD86ZGV0YWlsc1xiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OnRpdGxlOlxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlcXVlbmNlRGlhZ3JhbVxiKS9pLC9eKD86YXV0b251bWJlclxiKS9pLC9eKD86b2ZmXGIpL2ksL14oPzosKS9pLC9eKD86OykvaSwvXig/OlteXCtcLT46XG4sO10rKCg/ISgteHwtLXh8LVwpfC0tXCkpKVtcLV0qW15cK1wtPjpcbiw7XSspKikvaSwvXig/Oi0+PikvaSwvXig/Oi0tPj4pL2ksL14oPzotPikvaSwvXig/Oi0tPikvaSwvXig/Oi1beF0pL2ksL14oPzotLVt4XSkvaSwvXig/Oi1bXCldKS9pLC9eKD86LS1bXCldKS9pLC9eKD86Oig/Oig/Om5vKT93cmFwKT9bXiNcbjtdKykvaSwvXig/OlwrKS9pLC9eKD86LSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNDUsNDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNDNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNDFdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOlsyLDMsMTJdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOlsyLDMsMTMsMTRdLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzIsMywyNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNCw1LDYsNyw4LDksMTAsMTEsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDIsNDQsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gY2V9KCk7bWUubGV4ZXI9VmU7ZnVuY3Rpb24gWWUoKXt0aGlzLnl5PXt9fXJldHVybiBZZS5wcm90b3R5cGU9bWUsbWUuUGFyc2VyPVllLG5ldyBZZX0oKTtnZ3QucGFyc2VyPWdndDtjb25zdCB0VmU9Z2d0O2xldCBIRixSNT17fSxwZ3Q9e30sYmd0PXt9LGRMPVtdLHpiPVtdLFJZPSExLHdndCxqNSxWRixnTDtjb25zdCBlVmU9ZnVuY3Rpb24oaSl7ZEwucHVzaCh7bmFtZTppLnRleHQsd3JhcDppLndyYXA9PT12b2lkIDAmJkNUKCl8fCEhaS53cmFwLGZpbGw6aS5jb2xvcixhY3RvcktleXM6W119KSxqNT1kTC5zbGljZSgtMSlbMF19LHZndD1mdW5jdGlvbihpLGEsZixwKXtsZXQgdz1qNTtjb25zdCBtPVI1W2ldO2lmKG0pe2lmKGo1JiZtLmJveCYmajUhPT1tLmJveCl0aHJvdyBuZXcgRXJyb3IoIkEgc2FtZSBwYXJ0aWNpcGFudCBzaG91bGQgb25seSBiZSBkZWZpbmVkIGluIG9uZSBCb3g6ICIrbS5uYW1lKyIgY2FuJ3QgYmUgaW4gJyIrbS5ib3gubmFtZSsiJyBhbmQgaW4gJyIrajUubmFtZSsiJyBhdCB0aGUgc2FtZSB0aW1lLiIpO2lmKHc9bS5ib3g/bS5ib3g6ajUsbS5ib3g9dyxtJiZhPT09bS5uYW1lJiZmPT1udWxsKXJldHVybn0oZj09bnVsbHx8Zi50ZXh0PT1udWxsKSYmKGY9e3RleHQ6YSx3cmFwOm51bGwsdHlwZTpwfSksKHA9PW51bGx8fGYudGV4dD09bnVsbCkmJihmPXt0ZXh0OmEsd3JhcDpudWxsLHR5cGU6cH0pLFI1W2ldPXtib3g6dyxuYW1lOmEsZGVzY3JpcHRpb246Zi50ZXh0LHdyYXA6Zi53cmFwPT09dm9pZCAwJiZDVCgpfHwhIWYud3JhcCxwcmV2QWN0b3I6SEYsbGlua3M6e30scHJvcGVydGllczp7fSxhY3RvckNudDpudWxsLHJlY3REYXRhOm51bGwsdHlwZTpwfHwicGFydGljaXBhbnQifSxIRiYmUjVbSEZdJiYoUjVbSEZdLm5leHRBY3Rvcj1pKSxqNSYmajUuYWN0b3JLZXlzLnB1c2goaSksSEY9aX0sblZlPWk9PntsZXQgYSxmPTA7Zm9yKGE9MDthPHpiLmxlbmd0aDthKyspemJbYV0udHlwZT09PVVGLkFDVElWRV9TVEFSVCYmemJbYV0uZnJvbS5hY3Rvcj09PWkmJmYrKyx6YlthXS50eXBlPT09VUYuQUNUSVZFX0VORCYmemJbYV0uZnJvbS5hY3Rvcj09PWkmJmYtLTtyZXR1cm4gZn0sclZlPWZ1bmN0aW9uKGksYSxmLHApe3piLnB1c2goe2Zyb206aSx0bzphLG1lc3NhZ2U6Zi50ZXh0LHdyYXA6Zi53cmFwPT09dm9pZCAwJiZDVCgpfHwhIWYud3JhcCxhbnN3ZXI6cH0pfSxlZj1mdW5jdGlvbihpLGEsZj17dGV4dDp2b2lkIDAsd3JhcDp2b2lkIDB9LHAsdz0hMSl7aWYocD09PVVGLkFDVElWRV9FTkQmJm5WZShpLmFjdG9yKTwxKXtsZXQgYj1uZXcgRXJyb3IoIlRyeWluZyB0byBpbmFjdGl2YXRlIGFuIGluYWN0aXZlIHBhcnRpY2lwYW50ICgiK2kuYWN0b3IrIikiKTt0aHJvdyBiLmhhc2g9e3RleHQ6Ii0+Pi0iLHRva2VuOiItPj4tIixsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIidBQ1RJVkVfUEFSVElDSVBBTlQnIl19LGJ9cmV0dXJuIHpiLnB1c2goe2Zyb206aSx0bzphLG1lc3NhZ2U6Zi50ZXh0LHdyYXA6Zi53cmFwPT09dm9pZCAwJiZDVCgpfHwhIWYud3JhcCx0eXBlOnAsYWN0aXZhdGU6d30pLCEwfSxpVmU9ZnVuY3Rpb24oKXtyZXR1cm4gZEwubGVuZ3RoPjB9LHNWZT1mdW5jdGlvbigpe3JldHVybiBkTC5zb21lKGk9PmkubmFtZSl9LGFWZT1mdW5jdGlvbigpe3JldHVybiB6Yn0sb1ZlPWZ1bmN0aW9uKCl7cmV0dXJuIGRMfSxjVmU9ZnVuY3Rpb24oKXtyZXR1cm4gUjV9LHVWZT1mdW5jdGlvbigpe3JldHVybiBwZ3R9LGxWZT1mdW5jdGlvbigpe3JldHVybiBiZ3R9LEdGPWZ1bmN0aW9uKGkpe3JldHVybiBSNVtpXX0saFZlPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKFI1KX0sZlZlPWZ1bmN0aW9uKCl7Ulk9ITB9LGRWZT1mdW5jdGlvbigpe1JZPSExfSxnVmU9KCk9PlJZLHBWZT1mdW5jdGlvbihpKXt3Z3Q9aX0sQ1Q9KCk9PndndCE9PXZvaWQgMD93Z3Q6T2UoKS5zZXF1ZW5jZS53cmFwLGJWZT1mdW5jdGlvbigpe1I1PXt9LHBndD17fSxiZ3Q9e30sZEw9W10semI9W10sUlk9ITEsaGcoKX0sd1ZlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9aS50cmltKCksZj17dGV4dDphLnJlcGxhY2UoL146Pyg/Om5vKT93cmFwOi8sIiIpLnRyaW0oKSx3cmFwOmEubWF0Y2goL146P3dyYXA6LykhPT1udWxsPyEwOmEubWF0Y2goL146P25vd3JhcDovKSE9PW51bGw/ITE6dm9pZCAwfTtyZXR1cm4gVXQuZGVidWcoInBhcnNlTWVzc2FnZToiLGYpLGZ9LHZWZT1mdW5jdGlvbihpKXtjb25zdCBhPWkubWF0Y2goL14oKD86cmdiYT98aHNsYT8pXHMqXCguKlwpfFx3KikoLiopJC8pO2xldCBmPWEhPW51bGwmJmFbMV0/YVsxXS50cmltKCk6InRyYW5zcGFyZW50IixwPWEhPW51bGwmJmFbMl0/YVsyXS50cmltKCk6dm9pZCAwO2lmKHdpbmRvdyYmd2luZG93LkNTUyl3aW5kb3cuQ1NTLnN1cHBvcnRzKCJjb2xvciIsZil8fChmPSJ0cmFuc3BhcmVudCIscD1pLnRyaW0oKSk7ZWxzZXtjb25zdCBtPW5ldyBPcHRpb24oKS5zdHlsZTttLmNvbG9yPWYsbS5jb2xvciE9PWYmJihmPSJ0cmFuc3BhcmVudCIscD1pLnRyaW0oKSl9cmV0dXJue2NvbG9yOmYsdGV4dDpwIT09dm9pZCAwP1ExKHAucmVwbGFjZSgvXjo/KD86bm8pP3dyYXA6LywiIiksT2UoKSk6dm9pZCAwLHdyYXA6cCE9PXZvaWQgMD9wLm1hdGNoKC9eOj93cmFwOi8pIT09bnVsbD8hMDpwLm1hdGNoKC9eOj9ub3dyYXA6LykhPT1udWxsPyExOnZvaWQgMDp2b2lkIDB9fSxVRj17U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyMyxTT0xJRF9QT0lOVDoyNCxET1RURURfUE9JTlQ6MjUsQVVUT05VTUJFUjoyNixDUklUSUNBTF9TVEFSVDoyNyxDUklUSUNBTF9PUFRJT046MjgsQ1JJVElDQUxfRU5EOjI5LEJSRUFLX1NUQVJUOjMwLEJSRUFLX0VORDozMSxQQVJfT1ZFUl9TVEFSVDozMn0sbVZlPXtGSUxMRUQ6MCxPUEVOOjF9LHlWZT17TEVGVE9GOjAsUklHSFRPRjoxLE9WRVI6Mn0sX1J0PWZ1bmN0aW9uKGksYSxmKXtmLnRleHQsZi53cmFwPT09dm9pZCAwJiZDVCgpfHxmLndyYXA7Y29uc3QgcD1bXS5jb25jYXQoaSxpKTt6Yi5wdXNoKHtmcm9tOnBbMF0sdG86cFsxXSxtZXNzYWdlOmYudGV4dCx3cmFwOmYud3JhcD09PXZvaWQgMCYmQ1QoKXx8ISFmLndyYXAsdHlwZTpVRi5OT1RFLHBsYWNlbWVudDphfSl9LFNSdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9R0YoaSk7dHJ5e2xldCBwPVExKGEudGV4dCxPZSgpKTtwPXAucmVwbGFjZSgvJmFtcDsvZywiJiIpLHA9cC5yZXBsYWNlKC8mZXF1YWxzOy9nLCI9Iik7Y29uc3Qgdz1KU09OLnBhcnNlKHApO21ndChmLHcpfWNhdGNoKHApe1V0LmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGxpbmsgdGV4dCIscCl9fSx4VmU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPUdGKGkpO3RyeXtjb25zdCBiPXt9O2xldCBFPVExKGEudGV4dCxPZSgpKTt2YXIgcD1FLmluZGV4T2YoIkAiKTtFPUUucmVwbGFjZSgvJmFtcDsvZywiJiIpLEU9RS5yZXBsYWNlKC8mZXF1YWxzOy9nLCI9Iik7dmFyIHc9RS5zbGljZSgwLHAtMSkudHJpbSgpLG09RS5zbGljZShwKzEpLnRyaW0oKTtiW3ddPW0sbWd0KGYsYil9Y2F0Y2goYil7VXQuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0IixiKX19O2Z1bmN0aW9uIG1ndChpLGEpe2lmKGkubGlua3M9PW51bGwpaS5saW5rcz1hO2Vsc2UgZm9yKGxldCBmIGluIGEpaS5saW5rc1tmXT1hW2ZdfWNvbnN0IEFSdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9R0YoaSk7dHJ5e2xldCBwPVExKGEudGV4dCxPZSgpKTtjb25zdCB3PUpTT04ucGFyc2UocCk7TFJ0KGYsdyl9Y2F0Y2gocCl7VXQuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgcHJvcGVydGllcyB0ZXh0IixwKX19O2Z1bmN0aW9uIExSdChpLGEpe2lmKGkucHJvcGVydGllcz09bnVsbClpLnByb3BlcnRpZXM9YTtlbHNlIGZvcihsZXQgZiBpbiBhKWkucHJvcGVydGllc1tmXT1hW2ZdfWZ1bmN0aW9uIGtWZSgpe2o1PXZvaWQgMH1jb25zdCBNUnQ9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPUdGKGkpLHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYS50ZXh0KTt0cnl7Y29uc3Qgdz1wLmlubmVySFRNTCxtPUpTT04ucGFyc2Uodyk7bS5wcm9wZXJ0aWVzJiZMUnQoZixtLnByb3BlcnRpZXMpLG0ubGlua3MmJm1ndChmLG0ubGlua3MpfWNhdGNoKHcpe1V0LmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGRldGFpbHMgdGV4dCIsdyl9fSxFVmU9ZnVuY3Rpb24oaSxhKXtpZihpIT09dm9pZCAwJiZpLnByb3BlcnRpZXMhPT12b2lkIDApcmV0dXJuIGkucHJvcGVydGllc1thXX0sRFJ0PWZ1bmN0aW9uKGkpe2lmKEFycmF5LmlzQXJyYXkoaSkpaS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RSdChhKX0pO2Vsc2Ugc3dpdGNoKGkudHlwZSl7Y2FzZSJzZXF1ZW5jZUluZGV4Ijp6Yi5wdXNoKHtmcm9tOnZvaWQgMCx0bzp2b2lkIDAsbWVzc2FnZTp7c3RhcnQ6aS5zZXF1ZW5jZUluZGV4LHN0ZXA6aS5zZXF1ZW5jZUluZGV4U3RlcCx2aXNpYmxlOmkuc2VxdWVuY2VWaXNpYmxlfSx3cmFwOiExLHR5cGU6aS5zaWduYWxUeXBlfSk7YnJlYWs7Y2FzZSJhZGRQYXJ0aWNpcGFudCI6dmd0KGkuYWN0b3IsaS5hY3RvcixpLmRlc2NyaXB0aW9uLGkuZHJhdyk7YnJlYWs7Y2FzZSJjcmVhdGVQYXJ0aWNpcGFudCI6aWYoUjVbaS5hY3Rvcl0pdGhyb3cgbmV3IEVycm9yKCJJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBhY3RvcnMgd2l0aCB0aGUgc2FtZSBpZCwgZXZlbiBpZiBvbmUgaXMgZGVzdHJveWVkIGJlZm9yZSB0aGUgbmV4dCBpcyBjcmVhdGVkLiBVc2UgJ0FTJyBhbGlhc2VzIHRvIHNpbXVsYXRlIHRoZSBiZWhhdmlvciIpO1ZGPWkuYWN0b3Isdmd0KGkuYWN0b3IsaS5hY3RvcixpLmRlc2NyaXB0aW9uLGkuZHJhdykscGd0W2kuYWN0b3JdPXpiLmxlbmd0aDticmVhaztjYXNlImRlc3Ryb3lQYXJ0aWNpcGFudCI6Z0w9aS5hY3RvcixiZ3RbaS5hY3Rvcl09emIubGVuZ3RoO2JyZWFrO2Nhc2UiYWN0aXZlU3RhcnQiOmVmKGkuYWN0b3Isdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWN0aXZlRW5kIjplZihpLmFjdG9yLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFkZE5vdGUiOl9SdChpLmFjdG9yLGkucGxhY2VtZW50LGkudGV4dCk7YnJlYWs7Y2FzZSJhZGRMaW5rcyI6U1J0KGkuYWN0b3IsaS50ZXh0KTticmVhaztjYXNlImFkZEFMaW5rIjp4VmUoaS5hY3RvcixpLnRleHQpO2JyZWFrO2Nhc2UiYWRkUHJvcGVydGllcyI6QVJ0KGkuYWN0b3IsaS50ZXh0KTticmVhaztjYXNlImFkZERldGFpbHMiOk1SdChpLmFjdG9yLGkudGV4dCk7YnJlYWs7Y2FzZSJhZGRNZXNzYWdlIjppZihWRil7aWYoaS50byE9PVZGKXRocm93IG5ldyBFcnJvcigiVGhlIGNyZWF0ZWQgcGFydGljaXBhbnQgIitWRisiIGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBjcmVhdGluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLiIpO1ZGPXZvaWQgMH1lbHNlIGlmKGdMKXtpZihpLnRvIT09Z0wmJmkuZnJvbSE9PWdMKXRocm93IG5ldyBFcnJvcigiVGhlIGRlc3Ryb3llZCBwYXJ0aWNpcGFudCAiK2dMKyIgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGRlc3Ryb3lpbmcgbWVzc2FnZSBhZnRlciBpdHMgZGVjbGFyYXRpb24uIFBsZWFzZSBjaGVjayB0aGUgc2VxdWVuY2UgZGlhZ3JhbS4iKTtnTD12b2lkIDB9ZWYoaS5mcm9tLGkudG8saS5tc2csaS5zaWduYWxUeXBlLGkuYWN0aXZhdGUpO2JyZWFrO2Nhc2UiYm94U3RhcnQiOmVWZShpLmJveERhdGEpO2JyZWFrO2Nhc2UiYm94RW5kIjprVmUoKTticmVhaztjYXNlImxvb3BTdGFydCI6ZWYodm9pZCAwLHZvaWQgMCxpLmxvb3BUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wRW5kIjplZih2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdFN0YXJ0IjplZih2b2lkIDAsdm9pZCAwLGkuY29sb3IsaS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RFbmQiOmVmKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6ZWYodm9pZCAwLHZvaWQgMCxpLm9wdFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdEVuZCI6ZWYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0IjplZih2b2lkIDAsdm9pZCAwLGkuYWx0VGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiZWxzZSI6ZWYodm9pZCAwLHZvaWQgMCxpLmFsdFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdEVuZCI6ZWYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlInNldEFjY1RpdGxlIjpFMChpLnRleHQpO2JyZWFrO2Nhc2UicGFyU3RhcnQiOmVmKHZvaWQgMCx2b2lkIDAsaS5wYXJUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbmQiOmVmKHZvaWQgMCx2b2lkIDAsaS5wYXJUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJwYXJFbmQiOmVmKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbFN0YXJ0IjplZih2b2lkIDAsdm9pZCAwLGkuY3JpdGljYWxUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRpb24iOmVmKHZvaWQgMCx2b2lkIDAsaS5vcHRpb25UZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbEVuZCI6ZWYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrU3RhcnQiOmVmKHZvaWQgMCx2b2lkIDAsaS5icmVha1RleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrRW5kIjplZih2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrfX0sSVJ0PXthZGRBY3Rvcjp2Z3QsYWRkTWVzc2FnZTpyVmUsYWRkU2lnbmFsOmVmLGFkZExpbmtzOlNSdCxhZGREZXRhaWxzOk1SdCxhZGRQcm9wZXJ0aWVzOkFSdCxhdXRvV3JhcDpDVCxzZXRXcmFwOnBWZSxlbmFibGVTZXF1ZW5jZU51bWJlcnM6ZlZlLGRpc2FibGVTZXF1ZW5jZU51bWJlcnM6ZFZlLHNob3dTZXF1ZW5jZU51bWJlcnM6Z1ZlLGdldE1lc3NhZ2VzOmFWZSxnZXRBY3RvcnM6Y1ZlLGdldENyZWF0ZWRBY3RvcnM6dVZlLGdldERlc3Ryb3llZEFjdG9yczpsVmUsZ2V0QWN0b3I6R0YsZ2V0QWN0b3JLZXlzOmhWZSxnZXRBY3RvclByb3BlcnR5OkVWZSxnZXRBY2NUaXRsZTpmZyxnZXRCb3hlczpvVmUsZ2V0RGlhZ3JhbVRpdGxlOnBnLHNldERpYWdyYW1UaXRsZTpOYixnZXRDb25maWc6KCk9Pk9lKCkuc2VxdWVuY2UsY2xlYXI6YlZlLHBhcnNlTWVzc2FnZTp3VmUscGFyc2VCb3hEYXRhOnZWZSxMSU5FVFlQRTpVRixBUlJPV1RZUEU6bVZlLFBMQUNFTUVOVDp5VmUsYWRkTm90ZTpfUnQsc2V0QWNjVGl0bGU6RTAsYXBwbHk6RFJ0LHNldEFjY0Rlc2NyaXB0aW9uOmRnLGdldEFjY0Rlc2NyaXB0aW9uOmdnLGhhc0F0TGVhc3RPbmVCb3g6aVZlLGhhc0F0TGVhc3RPbmVCb3hXaXRoVGl0bGU6c1ZlfSxUVmU9aT0+YC5hY3RvciB7CiAgICBzdHJva2U6ICR7aS5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke2kuYWN0b3JCa2d9OwogIH0KCiAgdGV4dC5hY3RvciA+IHRzcGFuIHsKICAgIGZpbGw6ICR7aS5hY3RvclRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0b3ItbGluZSB7CiAgICBzdHJva2U6ICR7aS5hY3RvckxpbmVDb2xvcn07CiAgfQoKICAubWVzc2FnZUxpbmUwIHsKICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsKICAgIHN0cm9rZTogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTEgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke2kuc2lnbmFsQ29sb3J9OwogIH0KCiAgI2Fycm93aGVhZCBwYXRoIHsKICAgIGZpbGw6ICR7aS5zaWduYWxDb2xvcn07CiAgICBzdHJva2U6ICR7aS5zaWduYWxDb2xvcn07CiAgfQoKICAuc2VxdWVuY2VOdW1iZXIgewogICAgZmlsbDogJHtpLnNlcXVlbmNlTnVtYmVyQ29sb3J9OwogIH0KCiAgI3NlcXVlbmNlbnVtYmVyIHsKICAgIGZpbGw6ICR7aS5zaWduYWxDb2xvcn07CiAgfQoKICAjY3Jvc3NoZWFkIHBhdGggewogICAgZmlsbDogJHtpLnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlVGV4dCB7CiAgICBmaWxsOiAke2kuc2lnbmFsVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sYWJlbEJveCB7CiAgICBzdHJva2U6ICR7aS5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5sYWJlbEJveEJrZ0NvbG9yfTsKICB9CgogIC5sYWJlbFRleHQsIC5sYWJlbFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke2kubGFiZWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke2kubG9vcFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcExpbmUgewogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke2kubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgfQoKICAubm90ZSB7CiAgICAvL3N0cm9rZTogI2RlY2M5MzsKICAgIHN0cm9rZTogJHtpLm5vdGVCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kubm90ZUJrZ0NvbG9yfTsKICB9CgogIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4gewogICAgZmlsbDogJHtpLm5vdGVUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmFjdGl2YXRpb24wIHsKICAgIGZpbGw6ICR7aS5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMSB7CiAgICBmaWxsOiAke2kuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZhdGlvbjIgewogICAgZmlsbDogJHtpLmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7aS5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdG9yUG9wdXBNZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB9CgogIC5hY3RvclBvcHVwTWVudVBhbmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGZpbGw6ICR7aS5hY3RvckJrZ307CiAgICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4yKTsKICAgIGZpbHRlcjogZHJvcC1zaGFkb3coM3B4IDVweCAycHggcmdiKDAgMCAwIC8gMC40KSk7Cn0KICAuYWN0b3ItbWFuIGxpbmUgewogICAgc3Ryb2tlOiAke2kuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHtpLmFjdG9yQmtnfTsKICB9CiAgLmFjdG9yLW1hbiBjaXJjbGUsIGxpbmUgewogICAgc3Ryb2tlOiAke2kuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHtpLmFjdG9yQmtnfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KYCxfVD0xOCoyLHlndD1mdW5jdGlvbihpLGEpe3JldHVybiBKVyhpLGEpfSxPUnQ9KGksYSk9Pnt2QWUoKCk9Pntjb25zdCBmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoaSk7Zi5sZW5ndGghPT0wJiYoZlswXS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7QVZlKCJhY3RvciIrYSsiX3BvcHVwIil9KSxmWzBdLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixmdW5jdGlvbigpe0xWZSgiYWN0b3IiK2ErIl9wb3B1cCIpfSkpfSl9LENWZT1mdW5jdGlvbihpLGEsZixwLHcpe2lmKGEubGlua3M9PT12b2lkIDB8fGEubGlua3M9PT1udWxsfHxPYmplY3Qua2V5cyhhLmxpbmtzKS5sZW5ndGg9PT0wKXJldHVybntoZWlnaHQ6MCx3aWR0aDowfTtjb25zdCBtPWEubGlua3MsYj1hLmFjdG9yQ250LEU9YS5yZWN0RGF0YTt2YXIgXz0ibm9uZSI7dyYmKF89ImJsb2NrICFpbXBvcnRhbnQiKTtjb25zdCBBPWkuYXBwZW5kKCJnIik7QS5hdHRyKCJpZCIsImFjdG9yIitiKyJfcG9wdXAiKSxBLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnUiKSxBLmF0dHIoImRpc3BsYXkiLF8pLE9SdCgiI2FjdG9yIitiKyJfcG9wdXAiLGIpO3ZhciBJPSIiO0UuY2xhc3MhPT12b2lkIDAmJihJPSIgIitFLmNsYXNzKTtsZXQgQj1FLndpZHRoPmY/RS53aWR0aDpmO2NvbnN0IE49QS5hcHBlbmQoInJlY3QiKTtpZihOLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnVQYW5lbCIrSSksTi5hdHRyKCJ4IixFLngpLE4uYXR0cigieSIsRS5oZWlnaHQpLE4uYXR0cigiZmlsbCIsRS5maWxsKSxOLmF0dHIoInN0cm9rZSIsRS5zdHJva2UpLE4uYXR0cigid2lkdGgiLEIpLE4uYXR0cigiaGVpZ2h0IixFLmhlaWdodCksTi5hdHRyKCJyeCIsRS5yeCksTi5hdHRyKCJyeSIsRS5yeSksbSE9bnVsbCl7dmFyIFI9MjA7Zm9yKGxldCBldCBpbiBtKXt2YXIgej1BLmFwcGVuZCgiYSIpLFc9aWsobVtldF0pO3ouYXR0cigieGxpbms6aHJlZiIsVyksei5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKSxHVmUocCkoZXQseixFLngrMTAsRS5oZWlnaHQrUixCLDIwLHtjbGFzczoiYWN0b3IifSxwKSxSKz0zMH19cmV0dXJuIE4uYXR0cigiaGVpZ2h0IixSKSx7aGVpZ2h0OkUuaGVpZ2h0K1Isd2lkdGg6Qn19LF9WZT1mdW5jdGlvbihpKXtyZXR1cm4idmFyIHB1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIraSsiJyk7IGlmIChwdSAhPSBudWxsKSB7IHB1LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOyB9In0sU1ZlPWZ1bmN0aW9uKGkpe3JldHVybiJ2YXIgcHUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIitpKyInKTsgaWYgKHB1ICE9IG51bGwpIHsgcHUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfSJ9LEFWZT1mdW5jdGlvbihpKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTthIT1udWxsJiYoYS5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSxMVmU9ZnVuY3Rpb24oaSl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaSk7YSE9bnVsbCYmKGEuc3R5bGUuZGlzcGxheT0ibm9uZSIpfSxwTD1mdW5jdGlvbihpLGEpe2xldCBmPTAscD0wO2NvbnN0IHc9YS50ZXh0LnNwbGl0KEtyLmxpbmVCcmVha1JlZ2V4KSxbbSxiXT1WQShhLmZvbnRTaXplKTtsZXQgRT1bXSxfPTAsQT0oKT0+YS55O2lmKGEudmFsaWduIT09dm9pZCAwJiZhLnRleHRNYXJnaW4hPT12b2lkIDAmJmEudGV4dE1hcmdpbj4wKXN3aXRjaChhLnZhbGlnbil7Y2FzZSJ0b3AiOmNhc2Uic3RhcnQiOkE9KCk9Pk1hdGgucm91bmQoYS55K2EudGV4dE1hcmdpbik7YnJlYWs7Y2FzZSJtaWRkbGUiOmNhc2UiY2VudGVyIjpBPSgpPT5NYXRoLnJvdW5kKGEueSsoZitwK2EudGV4dE1hcmdpbikvMik7YnJlYWs7Y2FzZSJib3R0b20iOmNhc2UiZW5kIjpBPSgpPT5NYXRoLnJvdW5kKGEueSsoZitwKzIqYS50ZXh0TWFyZ2luKS1hLnRleHRNYXJnaW4pO2JyZWFrfWlmKGEuYW5jaG9yIT09dm9pZCAwJiZhLnRleHRNYXJnaW4hPT12b2lkIDAmJmEud2lkdGghPT12b2lkIDApc3dpdGNoKGEuYW5jaG9yKXtjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmEueD1NYXRoLnJvdW5kKGEueCthLnRleHRNYXJnaW4pLGEuYW5jaG9yPSJzdGFydCIsYS5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLGEuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJtaWRkbGUiOmNhc2UiY2VudGVyIjphLng9TWF0aC5yb3VuZChhLngrYS53aWR0aC8yKSxhLmFuY2hvcj0ibWlkZGxlIixhLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsYS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6YS54PU1hdGgucm91bmQoYS54K2Eud2lkdGgtYS50ZXh0TWFyZ2luKSxhLmFuY2hvcj0iZW5kIixhLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsYS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVha31mb3IobGV0W0ksQl1vZiB3LmVudHJpZXMoKSl7YS50ZXh0TWFyZ2luIT09dm9pZCAwJiZhLnRleHRNYXJnaW49PT0wJiZtIT09dm9pZCAwJiYoXz1JKm0pO2NvbnN0IE49aS5hcHBlbmQoInRleHQiKTtOLmF0dHIoIngiLGEueCksTi5hdHRyKCJ5IixBKCkpLGEuYW5jaG9yIT09dm9pZCAwJiZOLmF0dHIoInRleHQtYW5jaG9yIixhLmFuY2hvcikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGEuZG9taW5hbnRCYXNlbGluZSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIixhLmFsaWdubWVudEJhc2VsaW5lKSxhLmZvbnRGYW1pbHkhPT12b2lkIDAmJk4uc3R5bGUoImZvbnQtZmFtaWx5IixhLmZvbnRGYW1pbHkpLGIhPT12b2lkIDAmJk4uc3R5bGUoImZvbnQtc2l6ZSIsYiksYS5mb250V2VpZ2h0IT09dm9pZCAwJiZOLnN0eWxlKCJmb250LXdlaWdodCIsYS5mb250V2VpZ2h0KSxhLmZpbGwhPT12b2lkIDAmJk4uYXR0cigiZmlsbCIsYS5maWxsKSxhLmNsYXNzIT09dm9pZCAwJiZOLmF0dHIoImNsYXNzIixhLmNsYXNzKSxhLmR5IT09dm9pZCAwP04uYXR0cigiZHkiLGEuZHkpOl8hPT0wJiZOLmF0dHIoImR5IixfKTtjb25zdCBSPUJ8fGpJdDtpZihhLnRzcGFuKXtjb25zdCB6PU4uYXBwZW5kKCJ0c3BhbiIpO3ouYXR0cigieCIsYS54KSxhLmZpbGwhPT12b2lkIDAmJnouYXR0cigiZmlsbCIsYS5maWxsKSx6LnRleHQoUil9ZWxzZSBOLnRleHQoUik7YS52YWxpZ24hPT12b2lkIDAmJmEudGV4dE1hcmdpbiE9PXZvaWQgMCYmYS50ZXh0TWFyZ2luPjAmJihwKz0oTi5fZ3JvdXBzfHxOKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0LGY9cCksRS5wdXNoKE4pfXJldHVybiBFfSxQUnQ9ZnVuY3Rpb24oaSxhKXtmdW5jdGlvbiBmKHcsbSxiLEUsXyl7cmV0dXJuIHcrIiwiK20rIiAiKyh3K2IpKyIsIittKyIgIisodytiKSsiLCIrKG0rRS1fKSsiICIrKHcrYi1fKjEuMikrIiwiKyhtK0UpKyIgIit3KyIsIisobStFKX1jb25zdCBwPWkuYXBwZW5kKCJwb2x5Z29uIik7cmV0dXJuIHAuYXR0cigicG9pbnRzIixmKGEueCxhLnksYS53aWR0aCxhLmhlaWdodCw3KSkscC5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksYS55PWEueSthLmhlaWdodC8yLHBMKGksYSkscH07bGV0IGdtPS0xO2NvbnN0IEZSdD0oaSxhLGYscCk9PntpLnNlbGVjdCYmZi5mb3JFYWNoKHc9Pntjb25zdCBtPWFbd10sYj1pLnNlbGVjdCgiI2FjdG9yIittLmFjdG9yQ250KTshcC5taXJyb3JBY3RvcnMmJm0uc3RvcHk/Yi5hdHRyKCJ5MiIsbS5zdG9weSttLmhlaWdodC8yKTpwLm1pcnJvckFjdG9ycyYmYi5hdHRyKCJ5MiIsbS5zdG9weSl9KX0sTVZlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHc9cD9hLnN0b3B5OmEuc3RhcnR5LG09YS54K2Eud2lkdGgvMixiPXcrNSxFPWkuYXBwZW5kKCJnIikubG93ZXIoKTt2YXIgXz1FO3B8fChnbSsrLF8uYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrZ20pLmF0dHIoIngxIixtKS5hdHRyKCJ5MSIsYikuYXR0cigieDIiLG0pLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSIpLmF0dHIoImNsYXNzIiwiMjAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IiksXz1FLmFwcGVuZCgiZyIpLGEuYWN0b3JDbnQ9Z20sYS5saW5rcyE9bnVsbCYmKF8uYXR0cigiaWQiLCJyb290LSIrZ20pLE9SdCgiI3Jvb3QtIitnbSxnbSkpKTtjb25zdCBBPWJUKCk7dmFyIEk9ImFjdG9yIjthLnByb3BlcnRpZXMhPW51bGwmJmEucHJvcGVydGllcy5jbGFzcz9JPWEucHJvcGVydGllcy5jbGFzczpBLmZpbGw9IiNlYWVhZWEiLEEueD1hLngsQS55PXcsQS53aWR0aD1hLndpZHRoLEEuaGVpZ2h0PWEuaGVpZ2h0LEEuY2xhc3M9SSxBLnJ4PTMsQS5yeT0zO2NvbnN0IEI9eWd0KF8sQSk7aWYoYS5yZWN0RGF0YT1BLGEucHJvcGVydGllcyE9bnVsbCYmYS5wcm9wZXJ0aWVzLmljb24pe2NvbnN0IFI9YS5wcm9wZXJ0aWVzLmljb24udHJpbSgpO1IuY2hhckF0KDApPT09IkAiPyREZShfLEEueCtBLndpZHRoLTIwLEEueSsxMCxSLnN1YnN0cigxKSk6akRlKF8sQS54K0Eud2lkdGgtMjAsQS55KzEwLFIpfXhndChmKShhLmRlc2NyaXB0aW9uLF8sQS54LEEueSxBLndpZHRoLEEuaGVpZ2h0LHtjbGFzczoiYWN0b3IifSxmKTtsZXQgTj1hLmhlaWdodDtpZihCLm5vZGUpe2NvbnN0IFI9Qi5ub2RlKCkuZ2V0QkJveCgpO2EuaGVpZ2h0PVIuaGVpZ2h0LE49Ui5oZWlnaHR9cmV0dXJuIE59LERWZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdCB3PXA/YS5zdG9weTphLnN0YXJ0eSxtPWEueCthLndpZHRoLzIsYj13KzgwO2kubG93ZXIoKSxwfHwoZ20rKyxpLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3IiK2dtKS5hdHRyKCJ4MSIsbSkuYXR0cigieTEiLGIpLmF0dHIoIngyIixtKS5hdHRyKCJ5MiIsMmUzKS5hdHRyKCJjbGFzcyIsImFjdG9yLWxpbmUiKS5hdHRyKCJjbGFzcyIsIjIwMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNXB4IikuYXR0cigic3Ryb2tlIiwiIzk5OSIpLGEuYWN0b3JDbnQ9Z20pO2NvbnN0IEU9aS5hcHBlbmQoImciKTtFLmF0dHIoImNsYXNzIiwiYWN0b3ItbWFuIik7Y29uc3QgXz1iVCgpO18ueD1hLngsXy55PXcsXy5maWxsPSIjZWFlYWVhIixfLndpZHRoPWEud2lkdGgsXy5oZWlnaHQ9YS5oZWlnaHQsXy5jbGFzcz0iYWN0b3IiLF8ucng9MyxfLnJ5PTMsRS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yLW1hbi10b3JzbyIrZ20pLmF0dHIoIngxIixtKS5hdHRyKCJ5MSIsdysyNSkuYXR0cigieDIiLG0pLmF0dHIoInkyIix3KzQ1KSxFLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLWFybXMiK2dtKS5hdHRyKCJ4MSIsbS1fVC8yKS5hdHRyKCJ5MSIsdyszMykuYXR0cigieDIiLG0rX1QvMikuYXR0cigieTIiLHcrMzMpLEUuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLG0tX1QvMikuYXR0cigieTEiLHcrNjApLmF0dHIoIngyIixtKS5hdHRyKCJ5MiIsdys0NSksRS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsbSkuYXR0cigieTEiLHcrNDUpLmF0dHIoIngyIixtK19ULzItMikuYXR0cigieTIiLHcrNjApO2NvbnN0IEE9RS5hcHBlbmQoImNpcmNsZSIpO0EuYXR0cigiY3giLGEueCthLndpZHRoLzIpLEEuYXR0cigiY3kiLHcrMTApLEEuYXR0cigiciIsMTUpLEEuYXR0cigid2lkdGgiLGEud2lkdGgpLEEuYXR0cigiaGVpZ2h0IixhLmhlaWdodCk7Y29uc3QgST1FLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGEuaGVpZ2h0PUkuaGVpZ2h0LHhndChmKShhLmRlc2NyaXB0aW9uLEUsXy54LF8ueSszNSxfLndpZHRoLF8uaGVpZ2h0LHtjbGFzczoiYWN0b3IifSxmKSxhLmhlaWdodH0sSVZlPWZ1bmN0aW9uKGksYSxmLHApe3N3aXRjaChhLnR5cGUpe2Nhc2UiYWN0b3IiOnJldHVybiBEVmUoaSxhLGYscCk7Y2FzZSJwYXJ0aWNpcGFudCI6cmV0dXJuIE1WZShpLGEsZixwKX19LE9WZT1mdW5jdGlvbihpLGEsZil7Y29uc3Qgdz1pLmFwcGVuZCgiZyIpO05SdCh3LGEpLGEubmFtZSYmeGd0KGYpKGEubmFtZSx3LGEueCxhLnkrKGEudGV4dE1heEhlaWdodHx8MCkvMixhLndpZHRoLDAse2NsYXNzOiJ0ZXh0In0sZiksdy5sb3dlcigpfSxQVmU9ZnVuY3Rpb24oaSl7cmV0dXJuIGkuYXBwZW5kKCJnIil9LEZWZT1mdW5jdGlvbihpLGEsZixwLHcpe2NvbnN0IG09YlQoKSxiPWEuYW5jaG9yZWQ7bS54PWEuc3RhcnR4LG0ueT1hLnN0YXJ0eSxtLmNsYXNzPSJhY3RpdmF0aW9uIit3JTMsbS53aWR0aD1hLnN0b3B4LWEuc3RhcnR4LG0uaGVpZ2h0PWYtYS5zdGFydHkseWd0KGIsbSl9LE5WZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdHtib3hNYXJnaW46dyxib3hUZXh0TWFyZ2luOm0sbGFiZWxCb3hIZWlnaHQ6YixsYWJlbEJveFdpZHRoOkUsbWVzc2FnZUZvbnRGYW1pbHk6XyxtZXNzYWdlRm9udFNpemU6QSxtZXNzYWdlRm9udFdlaWdodDpJfT1wLEI9aS5hcHBlbmQoImciKSxOPWZ1bmN0aW9uKFcsZXQsc3QsYXQpe3JldHVybiBCLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixXKS5hdHRyKCJ5MSIsZXQpLmF0dHIoIngyIixzdCkuYXR0cigieTIiLGF0KS5hdHRyKCJjbGFzcyIsImxvb3BMaW5lIil9O04oYS5zdGFydHgsYS5zdGFydHksYS5zdG9weCxhLnN0YXJ0eSksTihhLnN0b3B4LGEuc3RhcnR5LGEuc3RvcHgsYS5zdG9weSksTihhLnN0YXJ0eCxhLnN0b3B5LGEuc3RvcHgsYS5zdG9weSksTihhLnN0YXJ0eCxhLnN0YXJ0eSxhLnN0YXJ0eCxhLnN0b3B5KSxhLnNlY3Rpb25zIT09dm9pZCAwJiZhLnNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oVyl7TihhLnN0YXJ0eCxXLnksYS5zdG9weCxXLnkpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpfSk7bGV0IFI9UmR0KCk7Ui50ZXh0PWYsUi54PWEuc3RhcnR4LFIueT1hLnN0YXJ0eSxSLmZvbnRGYW1pbHk9XyxSLmZvbnRTaXplPUEsUi5mb250V2VpZ2h0PUksUi5hbmNob3I9Im1pZGRsZSIsUi52YWxpZ249Im1pZGRsZSIsUi50c3Bhbj0hMSxSLndpZHRoPUV8fDUwLFIuaGVpZ2h0PWJ8fDIwLFIudGV4dE1hcmdpbj1tLFIuY2xhc3M9ImxhYmVsVGV4dCIsUFJ0KEIsUiksUj1CUnQoKSxSLnRleHQ9YS50aXRsZSxSLng9YS5zdGFydHgrRS8yKyhhLnN0b3B4LWEuc3RhcnR4KS8yLFIueT1hLnN0YXJ0eSt3K20sUi5hbmNob3I9Im1pZGRsZSIsUi52YWxpZ249Im1pZGRsZSIsUi50ZXh0TWFyZ2luPW0sUi5jbGFzcz0ibG9vcFRleHQiLFIuZm9udEZhbWlseT1fLFIuZm9udFNpemU9QSxSLmZvbnRXZWlnaHQ9SSxSLndyYXA9ITA7bGV0IHo9cEwoQixSKTtyZXR1cm4gYS5zZWN0aW9uVGl0bGVzIT09dm9pZCAwJiZhLnNlY3Rpb25UaXRsZXMuZm9yRWFjaChmdW5jdGlvbihXLGV0KXtpZihXLm1lc3NhZ2Upe1IudGV4dD1XLm1lc3NhZ2UsUi54PWEuc3RhcnR4KyhhLnN0b3B4LWEuc3RhcnR4KS8yLFIueT1hLnNlY3Rpb25zW2V0XS55K3crbSxSLmNsYXNzPSJsb29wVGV4dCIsUi5hbmNob3I9Im1pZGRsZSIsUi52YWxpZ249Im1pZGRsZSIsUi50c3Bhbj0hMSxSLmZvbnRGYW1pbHk9XyxSLmZvbnRTaXplPUEsUi5mb250V2VpZ2h0PUksUi53cmFwPWEud3JhcCx6PXBMKEIsUik7bGV0IHN0PU1hdGgucm91bmQoei5tYXAoYXQ9PihhdC5fZ3JvdXBzfHxhdClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCkucmVkdWNlKChhdCxidCk9PmF0K2J0KSk7YS5zZWN0aW9uc1tldF0uaGVpZ2h0Kz1zdC0odyttKX19KSxhLmhlaWdodD1NYXRoLnJvdW5kKGEuc3RvcHktYS5zdGFydHkpLEJ9LE5SdD1mdW5jdGlvbihpLGEpe21QdChpLGEpfSxCVmU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiZGF0YWJhc2UiKS5hdHRyKCJmaWxsLXJ1bGUiLCJldmVub2RkIikuYXR0cigiY2xpcC1ydWxlIiwiZXZlbm9kZCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6Iil9LFJWZT1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSxqVmU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY2xvY2siKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXoiKX0sJFZlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDcuOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKX0selZlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTUuNSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0scVZlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0sSFZlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsNCkuYXR0cigicmVmWSIsNC41KS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHQiKS5hdHRyKCJkIiwiTSAxLDIgTCA2LDcgTSA2LDIgTCAxLDciKX0sQlJ0PWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOnZvaWQgMCxzdHlsZToiIzY2NiIsd2lkdGg6dm9pZCAwLGhlaWdodDp2b2lkIDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMCx2YWxpZ246dm9pZCAwfX0sVlZlPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSx4Z3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHcsbSxiLEUsXyxBLEkpe2NvbnN0IEI9bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiK18vMikuYXR0cigieSIsRStBLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh3KTtwKEIsSSl9ZnVuY3Rpb24gYSh3LG0sYixFLF8sQSxJLEIpe2NvbnN0e2FjdG9yRm9udFNpemU6TixhY3RvckZvbnRGYW1pbHk6UixhY3RvckZvbnRXZWlnaHQ6en09QixbVyxldF09VkEoTiksc3Q9dy5zcGxpdChLci5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCBhdD0wO2F0PHN0Lmxlbmd0aDthdCsrKXtjb25zdCBidD1hdCpXLVcqKHN0Lmxlbmd0aC0xKS8yLG10PW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitfLzIpLmF0dHIoInkiLEUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLGV0KS5zdHlsZSgiZm9udC13ZWlnaHQiLHopLnN0eWxlKCJmb250LWZhbWlseSIsUik7bXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLGIrXy8yKS5hdHRyKCJkeSIsYnQpLnRleHQoc3RbYXRdKSxtdC5hdHRyKCJ5IixFK0EvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHAobXQsSSl9fWZ1bmN0aW9uIGYodyxtLGIsRSxfLEEsSSxCKXtjb25zdCBOPW0uYXBwZW5kKCJzd2l0Y2giKSx6PU4uYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuYXR0cigid2lkdGgiLF8pLmF0dHIoImhlaWdodCIsQSkuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7ei5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh3KSxhKHcsTixiLEUsXyxBLEksQikscCh6LEkpfWZ1bmN0aW9uIHAodyxtKXtmb3IoY29uc3QgYiBpbiBtKW0uaGFzT3duUHJvcGVydHkoYikmJncuYXR0cihiLG1bYl0pfXJldHVybiBmdW5jdGlvbih3KXtyZXR1cm4gdy50ZXh0UGxhY2VtZW50PT09ImZvIj9mOncudGV4dFBsYWNlbWVudD09PSJvbGQiP2k6YX19KCksR1ZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh3LG0sYixFLF8sQSxJKXtjb25zdCBCPW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS50ZXh0KHcpO3AoQixJKX1mdW5jdGlvbiBhKHcsbSxiLEUsXyxBLEksQil7Y29uc3R7YWN0b3JGb250U2l6ZTpOLGFjdG9yRm9udEZhbWlseTpSLGFjdG9yRm9udFdlaWdodDp6fT1CLFc9dy5zcGxpdChLci5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCBldD0wO2V0PFcubGVuZ3RoO2V0Kyspe2NvbnN0IHN0PWV0Kk4tTiooVy5sZW5ndGgtMSkvMixhdD1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLEUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0Iikuc3R5bGUoImZvbnQtc2l6ZSIsTikuc3R5bGUoImZvbnQtd2VpZ2h0Iix6KS5zdHlsZSgiZm9udC1mYW1pbHkiLFIpO2F0LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiKS5hdHRyKCJkeSIsc3QpLnRleHQoV1tldF0pLGF0LmF0dHIoInkiLEUrQS8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscChhdCxJKX19ZnVuY3Rpb24gZih3LG0sYixFLF8sQSxJLEIpe2NvbnN0IE49bS5hcHBlbmQoInN3aXRjaCIpLHo9Ti5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIsXykuYXR0cigiaGVpZ2h0IixBKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTt6LmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHcpLGEodyxOLGIsRSxfLEEsSSxCKSxwKHosSSl9ZnVuY3Rpb24gcCh3LG0pe2Zvcihjb25zdCBiIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShiKSYmdy5hdHRyKGIsbVtiXSl9cmV0dXJuIGZ1bmN0aW9uKHcpe3JldHVybiB3LnRleHRQbGFjZW1lbnQ9PT0iZm8iP2Y6dy50ZXh0UGxhY2VtZW50PT09Im9sZCI/aTphfX0oKSxuZj17ZHJhd1JlY3Q6eWd0LGRyYXdUZXh0OnBMLGRyYXdMYWJlbDpQUnQsZHJhd0FjdG9yOklWZSxkcmF3Qm94Ok9WZSxkcmF3UG9wdXA6Q1ZlLGFuY2hvckVsZW1lbnQ6UFZlLGRyYXdBY3RpdmF0aW9uOkZWZSxkcmF3TG9vcDpOVmUsZHJhd0JhY2tncm91bmRSZWN0Ok5SdCxpbnNlcnRBcnJvd0hlYWQ6JFZlLGluc2VydEFycm93RmlsbGVkSGVhZDp6VmUsaW5zZXJ0U2VxdWVuY2VOdW1iZXI6cVZlLGluc2VydEFycm93Q3Jvc3NIZWFkOkhWZSxpbnNlcnREYXRhYmFzZUljb246QlZlLGluc2VydENvbXB1dGVySWNvbjpSVmUsaW5zZXJ0Q2xvY2tJY29uOmpWZSxnZXRUZXh0T2JqOkJSdCxnZXROb3RlUmVjdDpWVmUscG9wdXBNZW51Ol9WZSxwb3Bkb3duTWVudTpTVmUsZml4TGlmZUxpbmVIZWlnaHRzOkZSdCxzYW5pdGl6ZVVybDppa307bGV0IGZuPXt9O2NvbnN0IEZyPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGFjdGl2YXRpb25zOltdLG1vZGVsczp7Z2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsdGhpcy5hY3RvcnMubGVuZ3RoPT09MD9bMF06dGhpcy5hY3RvcnMubWFwKGk9PmkuaGVpZ2h0fHwwKSkrKHRoaXMubG9vcHMubGVuZ3RoPT09MD8wOnRoaXMubG9vcHMubWFwKGk9PmkuaGVpZ2h0fHwwKS5yZWR1Y2UoKGksYSk9PmkrYSkpKyh0aGlzLm1lc3NhZ2VzLmxlbmd0aD09PTA/MDp0aGlzLm1lc3NhZ2VzLm1hcChpPT5pLmhlaWdodHx8MCkucmVkdWNlKChpLGEpPT5pK2EpKSsodGhpcy5ub3Rlcy5sZW5ndGg9PT0wPzA6dGhpcy5ub3Rlcy5tYXAoaT0+aS5oZWlnaHR8fDApLnJlZHVjZSgoaSxhKT0+aSthKSl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5hY3RvcnM9W10sdGhpcy5ib3hlcz1bXSx0aGlzLmxvb3BzPVtdLHRoaXMubWVzc2FnZXM9W10sdGhpcy5ub3Rlcz1bXX0sYWRkQm94OmZ1bmN0aW9uKGkpe3RoaXMuYm94ZXMucHVzaChpKX0sYWRkQWN0b3I6ZnVuY3Rpb24oaSl7dGhpcy5hY3RvcnMucHVzaChpKX0sYWRkTG9vcDpmdW5jdGlvbihpKXt0aGlzLmxvb3BzLnB1c2goaSl9LGFkZE1lc3NhZ2U6ZnVuY3Rpb24oaSl7dGhpcy5tZXNzYWdlcy5wdXNoKGkpfSxhZGROb3RlOmZ1bmN0aW9uKGkpe3RoaXMubm90ZXMucHVzaChpKX0sbGFzdEFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuYWN0b3JzLmxlbmd0aC0xXX0sbGFzdExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aC0xXX0sbGFzdE1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlc1t0aGlzLm1lc3NhZ2VzLmxlbmd0aC0xXX0sbGFzdE5vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Rlc1t0aGlzLm5vdGVzLmxlbmd0aC0xXX0sYWN0b3JzOltdLGJveGVzOltdLGxvb3BzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuYWN0aXZhdGlvbnM9W10sdGhpcy5tb2RlbHMuY2xlYXIoKSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTAsalJ0KE9lKCkpfSx1cGRhdGVWYWw6ZnVuY3Rpb24oaSxhLGYscCl7aVthXT09PXZvaWQgMD9pW2FdPWY6aVthXT1wKGYsaVthXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbihpLGEsZixwKXtjb25zdCB3PXRoaXM7bGV0IG09MDtmdW5jdGlvbiBiKEUpe3JldHVybiBmdW5jdGlvbihBKXttKys7Y29uc3QgST13LnNlcXVlbmNlSXRlbXMubGVuZ3RoLW0rMTt3LnVwZGF0ZVZhbChBLCJzdGFydHkiLGEtSSpmbi5ib3hNYXJnaW4sTWF0aC5taW4pLHcudXBkYXRlVmFsKEEsInN0b3B5IixwK0kqZm4uYm94TWFyZ2luLE1hdGgubWF4KSx3LnVwZGF0ZVZhbChGci5kYXRhLCJzdGFydHgiLGktSSpmbi5ib3hNYXJnaW4sTWF0aC5taW4pLHcudXBkYXRlVmFsKEZyLmRhdGEsInN0b3B4IixmK0kqZm4uYm94TWFyZ2luLE1hdGgubWF4KSxFIT09ImFjdGl2YXRpb24iJiYody51cGRhdGVWYWwoQSwic3RhcnR4IixpLUkqZm4uYm94TWFyZ2luLE1hdGgubWluKSx3LnVwZGF0ZVZhbChBLCJzdG9weCIsZitJKmZuLmJveE1hcmdpbixNYXRoLm1heCksdy51cGRhdGVWYWwoRnIuZGF0YSwic3RhcnR5IixhLUkqZm4uYm94TWFyZ2luLE1hdGgubWluKSx3LnVwZGF0ZVZhbChGci5kYXRhLCJzdG9weSIscCtJKmZuLmJveE1hcmdpbixNYXRoLm1heCkpfX10aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaChiKCkpLHRoaXMuYWN0aXZhdGlvbnMuZm9yRWFjaChiKCJhY3RpdmF0aW9uIikpfSxpbnNlcnQ6ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdz1Lci5nZXRNaW4oaSxmKSxtPUtyLmdldE1heChpLGYpLGI9S3IuZ2V0TWluKGEscCksRT1Lci5nZXRNYXgoYSxwKTt0aGlzLnVwZGF0ZVZhbChGci5kYXRhLCJzdGFydHgiLHcsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKEZyLmRhdGEsInN0YXJ0eSIsYixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoRnIuZGF0YSwic3RvcHgiLG0sTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKEZyLmRhdGEsInN0b3B5IixFLE1hdGgubWF4KSx0aGlzLnVwZGF0ZUJvdW5kcyh3LGIsbSxFKX0sbmV3QWN0aXZhdGlvbjpmdW5jdGlvbihpLGEsZil7Y29uc3QgcD1mW2kuZnJvbS5hY3Rvcl0sdz1qWShpLmZyb20uYWN0b3IpLmxlbmd0aHx8MCxtPXAueCtwLndpZHRoLzIrKHctMSkqZm4uYWN0aXZhdGlvbldpZHRoLzI7dGhpcy5hY3RpdmF0aW9ucy5wdXNoKHtzdGFydHg6bSxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcysyLHN0b3B4Om0rZm4uYWN0aXZhdGlvbldpZHRoLHN0b3B5OnZvaWQgMCxhY3RvcjppLmZyb20uYWN0b3IsYW5jaG9yZWQ6bmYuYW5jaG9yRWxlbWVudChhKX0pfSxlbmRBY3RpdmF0aW9uOmZ1bmN0aW9uKGkpe2NvbnN0IGE9dGhpcy5hY3RpdmF0aW9ucy5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIGYuYWN0b3J9KS5sYXN0SW5kZXhPZihpLmZyb20uYWN0b3IpO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShhLDEpWzBdfSxjcmVhdGVMb29wOmZ1bmN0aW9uKGk9e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxhKXtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOmkubWVzc2FnZSx3cmFwOmkud3JhcCx3aWR0aDppLndpZHRoLGhlaWdodDowLGZpbGw6YX19LG5ld0xvb3A6ZnVuY3Rpb24oaT17bWVzc2FnZTp2b2lkIDAsd3JhcDohMSx3aWR0aDp2b2lkIDB9LGEpe3RoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcChpLGEpKX0sZW5kTG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LGlzTG9vcE92ZXJsYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aD90aGlzLnNlcXVlbmNlSXRlbXNbdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC0xXS5vdmVybGFwOiExfSxhZGRTZWN0aW9uVG9Mb29wOmZ1bmN0aW9uKGkpe2NvbnN0IGE9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO2Euc2VjdGlvbnM9YS5zZWN0aW9uc3x8W10sYS5zZWN0aW9uVGl0bGVzPWEuc2VjdGlvblRpdGxlc3x8W10sYS5zZWN0aW9ucy5wdXNoKHt5OkZyLmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxhLnNlY3Rpb25UaXRsZXMucHVzaChpKSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChhKX0sc2F2ZVZlcnRpY2FsUG9zOmZ1bmN0aW9uKCl7dGhpcy5pc0xvb3BPdmVybGFwKCkmJih0aGlzLnNhdmVkVmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyl9LHJlc2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXt0aGlzLmlzTG9vcE92ZXJsYXAoKSYmKHRoaXMudmVydGljYWxQb3M9dGhpcy5zYXZlZFZlcnRpY2FsUG9zKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKGkpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcytpLHRoaXMuZGF0YS5zdG9weT1Lci5nZXRNYXgodGhpcy5kYXRhLnN0b3B5LHRoaXMudmVydGljYWxQb3MpfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fX0sVVZlPWZ1bmN0aW9uKGksYSl7RnIuYnVtcFZlcnRpY2FsUG9zKGZuLmJveE1hcmdpbiksYS5oZWlnaHQ9Zm4uYm94TWFyZ2luLGEuc3RhcnR5PUZyLmdldFZlcnRpY2FsUG9zKCk7Y29uc3QgZj1iVCgpO2YueD1hLnN0YXJ0eCxmLnk9YS5zdGFydHksZi53aWR0aD1hLndpZHRofHxmbi53aWR0aCxmLmNsYXNzPSJub3RlIjtjb25zdCBwPWkuYXBwZW5kKCJnIiksdz1uZi5kcmF3UmVjdChwLGYpLG09UmR0KCk7bS54PWEuc3RhcnR4LG0ueT1hLnN0YXJ0eSxtLndpZHRoPWYud2lkdGgsbS5keT0iMWVtIixtLnRleHQ9YS5tZXNzYWdlLG0uY2xhc3M9Im5vdGVUZXh0IixtLmZvbnRGYW1pbHk9Zm4ubm90ZUZvbnRGYW1pbHksbS5mb250U2l6ZT1mbi5ub3RlRm9udFNpemUsbS5mb250V2VpZ2h0PWZuLm5vdGVGb250V2VpZ2h0LG0uYW5jaG9yPWZuLm5vdGVBbGlnbixtLnRleHRNYXJnaW49Zm4ubm90ZU1hcmdpbixtLnZhbGlnbj0iY2VudGVyIjtjb25zdCBiPXBMKHAsbSksRT1NYXRoLnJvdW5kKGIubWFwKF89PihfLl9ncm91cHN8fF8pWzBdWzBdLmdldEJCb3goKS5oZWlnaHQpLnJlZHVjZSgoXyxBKT0+XytBKSk7dy5hdHRyKCJoZWlnaHQiLEUrMipmbi5ub3RlTWFyZ2luKSxhLmhlaWdodCs9RSsyKmZuLm5vdGVNYXJnaW4sRnIuYnVtcFZlcnRpY2FsUG9zKEUrMipmbi5ub3RlTWFyZ2luKSxhLnN0b3B5PWEuc3RhcnR5K0UrMipmbi5ub3RlTWFyZ2luLGEuc3RvcHg9YS5zdGFydHgrZi53aWR0aCxGci5pbnNlcnQoYS5zdGFydHgsYS5zdGFydHksYS5zdG9weCxhLnN0b3B5KSxGci5tb2RlbHMuYWRkTm90ZShhKX0sU1Q9aT0+KHtmb250RmFtaWx5OmkubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6aS5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDppLm1lc3NhZ2VGb250V2VpZ2h0fSksYkw9aT0+KHtmb250RmFtaWx5Omkubm90ZUZvbnRGYW1pbHksZm9udFNpemU6aS5ub3RlRm9udFNpemUsZm9udFdlaWdodDppLm5vdGVGb250V2VpZ2h0fSksa2d0PWk9Pih7Zm9udEZhbWlseTppLmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTppLmFjdG9yRm9udFNpemUsZm9udFdlaWdodDppLmFjdG9yRm9udFdlaWdodH0pO2Z1bmN0aW9uIFdWZShpLGEpe0ZyLmJ1bXBWZXJ0aWNhbFBvcygxMCk7Y29uc3R7c3RhcnR4OmYsc3RvcHg6cCxtZXNzYWdlOnd9PWEsbT1Lci5zcGxpdEJyZWFrcyh3KS5sZW5ndGgsYj0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh3LFNUKGZuKSksRT1iLmhlaWdodC9tO2EuaGVpZ2h0Kz1FLEZyLmJ1bXBWZXJ0aWNhbFBvcyhFKTtsZXQgXyxBPWIuaGVpZ2h0LTEwO2NvbnN0IEk9Yi53aWR0aDtpZihmPT09cCl7Xz1Gci5nZXRWZXJ0aWNhbFBvcygpK0EsZm4ucmlnaHRBbmdsZXN8fChBKz1mbi5ib3hNYXJnaW4sXz1Gci5nZXRWZXJ0aWNhbFBvcygpK0EpLEErPTMwO2NvbnN0IEI9S3IuZ2V0TWF4KEkvMixmbi53aWR0aC8yKTtGci5pbnNlcnQoZi1CLEZyLmdldFZlcnRpY2FsUG9zKCktMTArQSxwK0IsRnIuZ2V0VmVydGljYWxQb3MoKSszMCtBKX1lbHNlIEErPWZuLmJveE1hcmdpbixfPUZyLmdldFZlcnRpY2FsUG9zKCkrQSxGci5pbnNlcnQoZixfLTEwLHAsXyk7cmV0dXJuIEZyLmJ1bXBWZXJ0aWNhbFBvcyhBKSxhLmhlaWdodCs9QSxhLnN0b3B5PWEuc3RhcnR5K2EuaGVpZ2h0LEZyLmluc2VydChhLmZyb21Cb3VuZHMsYS5zdGFydHksYS50b0JvdW5kcyxhLnN0b3B5KSxffWNvbnN0IFlWZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdHtzdGFydHg6dyxzdG9weDptLHN0YXJ0eTpiLG1lc3NhZ2U6RSx0eXBlOl8sc2VxdWVuY2VJbmRleDpBLHNlcXVlbmNlVmlzaWJsZTpJfT1hLEI9JGEuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoRSxTVChmbikpLE49UmR0KCk7Ti54PXcsTi55PWIrMTAsTi53aWR0aD1tLXcsTi5jbGFzcz0ibWVzc2FnZVRleHQiLE4uZHk9IjFlbSIsTi50ZXh0PUUsTi5mb250RmFtaWx5PWZuLm1lc3NhZ2VGb250RmFtaWx5LE4uZm9udFNpemU9Zm4ubWVzc2FnZUZvbnRTaXplLE4uZm9udFdlaWdodD1mbi5tZXNzYWdlRm9udFdlaWdodCxOLmFuY2hvcj1mbi5tZXNzYWdlQWxpZ24sTi52YWxpZ249ImNlbnRlciIsTi50ZXh0TWFyZ2luPWZuLndyYXBQYWRkaW5nLE4udHNwYW49ITEscEwoaSxOKTtjb25zdCBSPUIud2lkdGg7bGV0IHo7dz09PW0/Zm4ucmlnaHRBbmdsZXM/ej1pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGBNICAke3d9LCR7Zn0gSCAke3crS3IuZ2V0TWF4KGZuLndpZHRoLzIsUi8yKX0gViAke2YrMjV9IEggJHt3fWApOno9aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAiK3crIiwiK2YrIiBDICIrKHcrNjApKyIsIisoZi0xMCkrIiAiKyh3KzYwKSsiLCIrKGYrMzApKyIgIit3KyIsIisoZisyMCkpOih6PWkuYXBwZW5kKCJsaW5lIiksei5hdHRyKCJ4MSIsdyksei5hdHRyKCJ5MSIsZiksei5hdHRyKCJ4MiIsbSksei5hdHRyKCJ5MiIsZikpLF89PT1wLmRiLkxJTkVUWVBFLkRPVFRFRHx8Xz09PXAuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTfHxfPT09cC5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlR8fF89PT1wLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOPyh6LnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpLHouYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTEiKSk6ei5hdHRyKCJjbGFzcyIsIm1lc3NhZ2VMaW5lMCIpO2xldCBXPSIiO2ZuLmFycm93TWFya2VyQWJzb2x1dGUmJihXPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLFc9Vy5yZXBsYWNlKC9cKC9nLCJcXCgiKSxXPVcucmVwbGFjZSgvXCkvZywiXFwpIikpLHouYXR0cigic3Ryb2tlLXdpZHRoIiwyKSx6LmF0dHIoInN0cm9rZSIsIm5vbmUiKSx6LnN0eWxlKCJmaWxsIiwibm9uZSIpLChfPT09cC5kYi5MSU5FVFlQRS5TT0xJRHx8Xz09PXAuZGIuTElORVRZUEUuRE9UVEVEKSYmei5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrVysiI2Fycm93aGVhZCkiKSwoXz09PXAuZGIuTElORVRZUEUuU09MSURfUE9JTlR8fF89PT1wLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVCkmJnouYXR0cigibWFya2VyLWVuZCIsInVybCgiK1crIiNmaWxsZWQtaGVhZCkiKSwoXz09PXAuZGIuTElORVRZUEUuU09MSURfQ1JPU1N8fF89PT1wLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUykmJnouYXR0cigibWFya2VyLWVuZCIsInVybCgiK1crIiNjcm9zc2hlYWQpIiksKEl8fGZuLnNob3dTZXF1ZW5jZU51bWJlcnMpJiYoei5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitXKyIjc2VxdWVuY2VudW1iZXIpIiksaS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4Iix3KS5hdHRyKCJ5IixmKzQpLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoImZvbnQtc2l6ZSIsIjEycHgiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2VxdWVuY2VOdW1iZXIiKS50ZXh0KEEpKX0sS1ZlPWZ1bmN0aW9uKGksYSxmLHAsdyxtLGIpe2xldCBFPTAsXz0wLEEsST0wO2Zvcihjb25zdCBCIG9mIHApe2NvbnN0IE49YVtCXSxSPU4uYm94O0EmJkEhPVImJihifHxGci5tb2RlbHMuYWRkQm94KEEpLF8rPWZuLmJveE1hcmdpbitBLm1hcmdpbiksUiYmUiE9QSYmKGJ8fChSLng9RStfLFIueT13KSxfKz1SLm1hcmdpbiksTi53aWR0aD1OLndpZHRofHxmbi53aWR0aCxOLmhlaWdodD1Lci5nZXRNYXgoTi5oZWlnaHR8fGZuLmhlaWdodCxmbi5oZWlnaHQpLE4ubWFyZ2luPU4ubWFyZ2lufHxmbi5hY3Rvck1hcmdpbixJPUtyLmdldE1heChJLE4uaGVpZ2h0KSxmW04ubmFtZV0mJihfKz1OLndpZHRoLzIpLE4ueD1FK18sTi5zdGFydHk9RnIuZ2V0VmVydGljYWxQb3MoKSxGci5pbnNlcnQoTi54LHcsTi54K04ud2lkdGgsTi5oZWlnaHQpLEUrPU4ud2lkdGgrXyxOLmJveCYmKE4uYm94LndpZHRoPUUrUi5tYXJnaW4tTi5ib3gueCksXz1OLm1hcmdpbixBPU4uYm94LEZyLm1vZGVscy5hZGRBY3RvcihOKX1BJiYhYiYmRnIubW9kZWxzLmFkZEJveChBKSxGci5idW1wVmVydGljYWxQb3MoSSl9LEVndD1mdW5jdGlvbihpLGEsZixwKXtpZihwKXtsZXQgdz0wO0ZyLmJ1bXBWZXJ0aWNhbFBvcyhmbi5ib3hNYXJnaW4qMik7Zm9yKGNvbnN0IG0gb2YgZil7Y29uc3QgYj1hW21dO2Iuc3RvcHl8fChiLnN0b3B5PUZyLmdldFZlcnRpY2FsUG9zKCkpO2NvbnN0IEU9bmYuZHJhd0FjdG9yKGksYixmbiwhMCk7dz1Lci5nZXRNYXgodyxFKX1Gci5idW1wVmVydGljYWxQb3Modytmbi5ib3hNYXJnaW4pfWVsc2UgZm9yKGNvbnN0IHcgb2YgZil7Y29uc3QgbT1hW3ddO25mLmRyYXdBY3RvcihpLG0sZm4sITEpfX0sUlJ0PWZ1bmN0aW9uKGksYSxmLHApe2xldCB3PTAsbT0wO2Zvcihjb25zdCBiIG9mIGYpe2NvbnN0IEU9YVtiXSxfPUpWZShFKSxBPW5mLmRyYXdQb3B1cChpLEUsXyxmbixmbi5mb3JjZU1lbnVzLHApO0EuaGVpZ2h0PncmJih3PUEuaGVpZ2h0KSxBLndpZHRoK0UueD5tJiYobT1BLndpZHRoK0UueCl9cmV0dXJue21heEhlaWdodDp3LG1heFdpZHRoOm19fSxqUnQ9ZnVuY3Rpb24oaSl7WjEoZm4saSksaS5mb250RmFtaWx5JiYoZm4uYWN0b3JGb250RmFtaWx5PWZuLm5vdGVGb250RmFtaWx5PWZuLm1lc3NhZ2VGb250RmFtaWx5PWkuZm9udEZhbWlseSksaS5mb250U2l6ZSYmKGZuLmFjdG9yRm9udFNpemU9Zm4ubm90ZUZvbnRTaXplPWZuLm1lc3NhZ2VGb250U2l6ZT1pLmZvbnRTaXplKSxpLmZvbnRXZWlnaHQmJihmbi5hY3RvckZvbnRXZWlnaHQ9Zm4ubm90ZUZvbnRXZWlnaHQ9Zm4ubWVzc2FnZUZvbnRXZWlnaHQ9aS5mb250V2VpZ2h0KX0salk9ZnVuY3Rpb24oaSl7cmV0dXJuIEZyLmFjdGl2YXRpb25zLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5hY3Rvcj09PWl9KX0sJFJ0PWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hW2ldLHA9alkoaSksdz1wLnJlZHVjZShmdW5jdGlvbihiLEUpe3JldHVybiBLci5nZXRNaW4oYixFLnN0YXJ0eCl9LGYueCtmLndpZHRoLzItMSksbT1wLnJlZHVjZShmdW5jdGlvbihiLEUpe3JldHVybiBLci5nZXRNYXgoYixFLnN0b3B4KX0sZi54K2Yud2lkdGgvMisxKTtyZXR1cm5bdyxtXX07ZnVuY3Rpb24gazMoaSxhLGYscCx3KXtGci5idW1wVmVydGljYWxQb3MoZik7bGV0IG09cDtpZihhLmlkJiZhLm1lc3NhZ2UmJmlbYS5pZF0pe2NvbnN0IGI9aVthLmlkXS53aWR0aCxFPVNUKGZuKTthLm1lc3NhZ2U9JGEud3JhcExhYmVsKGBbJHthLm1lc3NhZ2V9XWAsYi0yKmZuLndyYXBQYWRkaW5nLEUpLGEud2lkdGg9YixhLndyYXA9ITA7Y29uc3QgXz0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhhLm1lc3NhZ2UsRSksQT1Lci5nZXRNYXgoXy5oZWlnaHQsZm4ubGFiZWxCb3hIZWlnaHQpO209cCtBLFV0LmRlYnVnKGAke0F9IC0gJHthLm1lc3NhZ2V9YCl9dyhhKSxGci5idW1wVmVydGljYWxQb3MobSl9ZnVuY3Rpb24gWFZlKGksYSxmLHAsdyxtLGIpe2Z1bmN0aW9uIEUoQSxJKXtBLng8d1tpLmZyb21dLng/KEZyLmluc2VydChhLnN0b3B4LUksYS5zdGFydHksYS5zdGFydHgsYS5zdG9weStBLmhlaWdodC8yK2ZuLm5vdGVNYXJnaW4pLGEuc3RvcHg9YS5zdG9weCtJKTooRnIuaW5zZXJ0KGEuc3RhcnR4LGEuc3RhcnR5LGEuc3RvcHgrSSxhLnN0b3B5K0EuaGVpZ2h0LzIrZm4ubm90ZU1hcmdpbiksYS5zdG9weD1hLnN0b3B4LUkpfWZ1bmN0aW9uIF8oQSxJKXtBLng8d1tpLnRvXS54PyhGci5pbnNlcnQoYS5zdGFydHgtSSxhLnN0YXJ0eSxhLnN0b3B4LGEuc3RvcHkrQS5oZWlnaHQvMitmbi5ub3RlTWFyZ2luKSxhLnN0YXJ0eD1hLnN0YXJ0eCtJKTooRnIuaW5zZXJ0KGEuc3RvcHgsYS5zdGFydHksYS5zdGFydHgrSSxhLnN0b3B5K0EuaGVpZ2h0LzIrZm4ubm90ZU1hcmdpbiksYS5zdGFydHg9YS5zdGFydHgtSSl9aWYobVtpLnRvXT09cCl7Y29uc3QgQT13W2kudG9dLEk9QS50eXBlPT0iYWN0b3IiP19ULzIrMzpBLndpZHRoLzIrMztFKEEsSSksQS5zdGFydHk9Zi1BLmhlaWdodC8yLEZyLmJ1bXBWZXJ0aWNhbFBvcyhBLmhlaWdodC8yKX1lbHNlIGlmKGJbaS5mcm9tXT09cCl7Y29uc3QgQT13W2kuZnJvbV07aWYoZm4ubWlycm9yQWN0b3JzKXtjb25zdCBJPUEudHlwZT09ImFjdG9yIj9fVC8yOkEud2lkdGgvMjtfKEEsSSl9QS5zdG9weT1mLUEuaGVpZ2h0LzIsRnIuYnVtcFZlcnRpY2FsUG9zKEEuaGVpZ2h0LzIpfWVsc2UgaWYoYltpLnRvXT09cCl7Y29uc3QgQT13W2kudG9dO2lmKGZuLm1pcnJvckFjdG9ycyl7Y29uc3QgST1BLnR5cGU9PSJhY3RvciI/X1QvMiszOkEud2lkdGgvMiszO0UoQSxJKX1BLnN0b3B5PWYtQS5oZWlnaHQvMixGci5idW1wVmVydGljYWxQb3MoQS5oZWlnaHQvMil9fWNvbnN0IFFWZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdHtzZWN1cml0eUxldmVsOncsc2VxdWVuY2U6bX09T2UoKTtmbj1tO2xldCBiO3c9PT0ic2FuZGJveCImJihiPXlyKCIjaSIrYSkpO2NvbnN0IEU9eXIodz09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKSxfPXc9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudDtGci5pbml0KCksVXQuZGVidWcocC5kYik7Y29uc3QgQT13PT09InNhbmRib3giP0Uuc2VsZWN0KGBbaWQ9IiR7YX0iXWApOnlyKGBbaWQ9IiR7YX0iXWApLEk9cC5kYi5nZXRBY3RvcnMoKSxCPXAuZGIuZ2V0Q3JlYXRlZEFjdG9ycygpLE49cC5kYi5nZXREZXN0cm95ZWRBY3RvcnMoKSxSPXAuZGIuZ2V0Qm94ZXMoKTtsZXQgej1wLmRiLmdldEFjdG9yS2V5cygpO2NvbnN0IFc9cC5kYi5nZXRNZXNzYWdlcygpLGV0PXAuZGIuZ2V0RGlhZ3JhbVRpdGxlKCksc3Q9cC5kYi5oYXNBdExlYXN0T25lQm94KCksYXQ9cC5kYi5oYXNBdExlYXN0T25lQm94V2l0aFRpdGxlKCksYnQ9WlZlKEksVyxwKTtpZihmbi5oZWlnaHQ9dEdlKEksYnQsUiksbmYuaW5zZXJ0Q29tcHV0ZXJJY29uKEEpLG5mLmluc2VydERhdGFiYXNlSWNvbihBKSxuZi5pbnNlcnRDbG9ja0ljb24oQSksc3QmJihGci5idW1wVmVydGljYWxQb3MoZm4uYm94TWFyZ2luKSxhdCYmRnIuYnVtcFZlcnRpY2FsUG9zKFJbMF0udGV4dE1heEhlaWdodCkpLGZuLmhpZGVVbnVzZWRQYXJ0aWNpcGFudHM9PT0hMCl7Y29uc3QgRXQ9bmV3IFNldDtXLmZvckVhY2goWj0+e0V0LmFkZChaLmZyb20pLEV0LmFkZChaLnRvKX0pLHo9ei5maWx0ZXIoWj0+RXQuaGFzKFopKX1LVmUoQSxJLEIseiwwLFcsITEpO2NvbnN0IG10PXJHZShXLEksYnQscCk7bmYuaW5zZXJ0QXJyb3dIZWFkKEEpLG5mLmluc2VydEFycm93Q3Jvc3NIZWFkKEEpLG5mLmluc2VydEFycm93RmlsbGVkSGVhZChBKSxuZi5pbnNlcnRTZXF1ZW5jZU51bWJlcihBKTtmdW5jdGlvbiB5dChFdCxaKXtjb25zdCBDdD1Gci5lbmRBY3RpdmF0aW9uKEV0KTtDdC5zdGFydHkrMTg+WiYmKEN0LnN0YXJ0eT1aLTYsWis9MTIpLG5mLmRyYXdBY3RpdmF0aW9uKEEsQ3QsWixmbixqWShFdC5mcm9tLmFjdG9yKS5sZW5ndGgpLEZyLmluc2VydChDdC5zdGFydHgsWi0xMCxDdC5zdG9weCxaKX1sZXQgZnQ9MSx1dD0xO2NvbnN0IHZ0PVtdLFg9W107Vy5mb3JFYWNoKGZ1bmN0aW9uKEV0LFope2xldCBDdCx4dCxIdDtzd2l0Y2goRXQudHlwZSl7Y2FzZSBwLmRiLkxJTkVUWVBFLk5PVEU6RnIucmVzZXRWZXJ0aWNhbFBvcygpLHh0PUV0Lm5vdGVNb2RlbCxVVmUoQSx4dCk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDpGci5uZXdBY3RpdmF0aW9uKEV0LEEsSSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6eXQoRXQsRnIuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6azMobXQsRXQsZm4uYm94TWFyZ2luLGZuLmJveE1hcmdpbitmbi5ib3hUZXh0TWFyZ2luLExlPT5Gci5uZXdMb29wKExlKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkxPT1BfRU5EOkN0PUZyLmVuZExvb3AoKSxuZi5kcmF3TG9vcChBLEN0LCJsb29wIixmbiksRnIuYnVtcFZlcnRpY2FsUG9zKEN0LnN0b3B5LUZyLmdldFZlcnRpY2FsUG9zKCkpLEZyLm1vZGVscy5hZGRMb29wKEN0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUkVDVF9TVEFSVDprMyhtdCxFdCxmbi5ib3hNYXJnaW4sZm4uYm94TWFyZ2luLExlPT5Gci5uZXdMb29wKHZvaWQgMCxMZS5tZXNzYWdlKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLlJFQ1RfRU5EOkN0PUZyLmVuZExvb3AoKSxYLnB1c2goQ3QpLEZyLm1vZGVscy5hZGRMb29wKEN0KSxGci5idW1wVmVydGljYWxQb3MoQ3Quc3RvcHktRnIuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDprMyhtdCxFdCxmbi5ib3hNYXJnaW4sZm4uYm94TWFyZ2luK2ZuLmJveFRleHRNYXJnaW4sTGU9PkZyLm5ld0xvb3AoTGUpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuT1BUX0VORDpDdD1Gci5lbmRMb29wKCksbmYuZHJhd0xvb3AoQSxDdCwib3B0IixmbiksRnIuYnVtcFZlcnRpY2FsUG9zKEN0LnN0b3B5LUZyLmdldFZlcnRpY2FsUG9zKCkpLEZyLm1vZGVscy5hZGRMb29wKEN0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQUxUX1NUQVJUOmszKG10LEV0LGZuLmJveE1hcmdpbixmbi5ib3hNYXJnaW4rZm4uYm94VGV4dE1hcmdpbixMZT0+RnIubmV3TG9vcChMZSkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BTFRfRUxTRTprMyhtdCxFdCxmbi5ib3hNYXJnaW4rZm4uYm94VGV4dE1hcmdpbixmbi5ib3hNYXJnaW4sTGU9PkZyLmFkZFNlY3Rpb25Ub0xvb3AoTGUpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQUxUX0VORDpDdD1Gci5lbmRMb29wKCksbmYuZHJhd0xvb3AoQSxDdCwiYWx0IixmbiksRnIuYnVtcFZlcnRpY2FsUG9zKEN0LnN0b3B5LUZyLmdldFZlcnRpY2FsUG9zKCkpLEZyLm1vZGVscy5hZGRMb29wKEN0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUEFSX1NUQVJUOmNhc2UgcC5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDprMyhtdCxFdCxmbi5ib3hNYXJnaW4sZm4uYm94TWFyZ2luK2ZuLmJveFRleHRNYXJnaW4sTGU9PkZyLm5ld0xvb3AoTGUpKSxGci5zYXZlVmVydGljYWxQb3MoKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUEFSX0FORDprMyhtdCxFdCxmbi5ib3hNYXJnaW4rZm4uYm94VGV4dE1hcmdpbixmbi5ib3hNYXJnaW4sTGU9PkZyLmFkZFNlY3Rpb25Ub0xvb3AoTGUpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuUEFSX0VORDpDdD1Gci5lbmRMb29wKCksbmYuZHJhd0xvb3AoQSxDdCwicGFyIixmbiksRnIuYnVtcFZlcnRpY2FsUG9zKEN0LnN0b3B5LUZyLmdldFZlcnRpY2FsUG9zKCkpLEZyLm1vZGVscy5hZGRMb29wKEN0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQVVUT05VTUJFUjpmdD1FdC5tZXNzYWdlLnN0YXJ0fHxmdCx1dD1FdC5tZXNzYWdlLnN0ZXB8fHV0LEV0Lm1lc3NhZ2UudmlzaWJsZT9wLmRiLmVuYWJsZVNlcXVlbmNlTnVtYmVycygpOnAuZGIuZGlzYWJsZVNlcXVlbmNlTnVtYmVycygpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDprMyhtdCxFdCxmbi5ib3hNYXJnaW4sZm4uYm94TWFyZ2luK2ZuLmJveFRleHRNYXJnaW4sTGU9PkZyLm5ld0xvb3AoTGUpKTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OOmszKG10LEV0LGZuLmJveE1hcmdpbitmbi5ib3hUZXh0TWFyZ2luLGZuLmJveE1hcmdpbixMZT0+RnIuYWRkU2VjdGlvblRvTG9vcChMZSkpO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6Q3Q9RnIuZW5kTG9vcCgpLG5mLmRyYXdMb29wKEEsQ3QsImNyaXRpY2FsIixmbiksRnIuYnVtcFZlcnRpY2FsUG9zKEN0LnN0b3B5LUZyLmdldFZlcnRpY2FsUG9zKCkpLEZyLm1vZGVscy5hZGRMb29wKEN0KTticmVhaztjYXNlIHAuZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6azMobXQsRXQsZm4uYm94TWFyZ2luLGZuLmJveE1hcmdpbitmbi5ib3hUZXh0TWFyZ2luLExlPT5Gci5uZXdMb29wKExlKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkJSRUFLX0VORDpDdD1Gci5lbmRMb29wKCksbmYuZHJhd0xvb3AoQSxDdCwiYnJlYWsiLGZuKSxGci5idW1wVmVydGljYWxQb3MoQ3Quc3RvcHktRnIuZ2V0VmVydGljYWxQb3MoKSksRnIubW9kZWxzLmFkZExvb3AoQ3QpO2JyZWFrO2RlZmF1bHQ6dHJ5e0h0PUV0Lm1zZ01vZGVsLEh0LnN0YXJ0eT1Gci5nZXRWZXJ0aWNhbFBvcygpLEh0LnNlcXVlbmNlSW5kZXg9ZnQsSHQuc2VxdWVuY2VWaXNpYmxlPXAuZGIuc2hvd1NlcXVlbmNlTnVtYmVycygpO2NvbnN0IExlPVdWZShBLEh0KTtYVmUoRXQsSHQsTGUsWixJLEIsTiksdnQucHVzaCh7bWVzc2FnZU1vZGVsOkh0LGxpbmVTdGFydFk6TGV9KSxGci5tb2RlbHMuYWRkTWVzc2FnZShIdCl9Y2F0Y2goTGUpe1V0LmVycm9yKCJlcnJvciB3aGlsZSBkcmF3aW5nIG1lc3NhZ2UiLExlKX19W3AuZGIuTElORVRZUEUuU09MSURfT1BFTixwLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOLHAuZGIuTElORVRZUEUuU09MSUQscC5kYi5MSU5FVFlQRS5ET1RURUQscC5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TUyxwLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUyxwLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5ULHAuZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UXS5pbmNsdWRlcyhFdC50eXBlKSYmKGZ0PWZ0K3V0KX0pLFV0LmRlYnVnKCJjcmVhdGVkQWN0b3JzIixCKSxVdC5kZWJ1ZygiZGVzdHJveWVkQWN0b3JzIixOKSxFZ3QoQSxJLHosITEpLHZ0LmZvckVhY2goRXQ9PllWZShBLEV0Lm1lc3NhZ2VNb2RlbCxFdC5saW5lU3RhcnRZLHApKSxmbi5taXJyb3JBY3RvcnMmJkVndChBLEkseiwhMCksWC5mb3JFYWNoKEV0PT5uZi5kcmF3QmFja2dyb3VuZFJlY3QoQSxFdCkpLEZSdChBLEkseixmbiksRnIubW9kZWxzLmJveGVzLmZvckVhY2goZnVuY3Rpb24oRXQpe0V0LmhlaWdodD1Gci5nZXRWZXJ0aWNhbFBvcygpLUV0LnksRnIuaW5zZXJ0KEV0LngsRXQueSxFdC54K0V0LndpZHRoLEV0LmhlaWdodCksRXQuc3RhcnR4PUV0LngsRXQuc3RhcnR5PUV0LnksRXQuc3RvcHg9RXQuc3RhcnR4K0V0LndpZHRoLEV0LnN0b3B5PUV0LnN0YXJ0eStFdC5oZWlnaHQsRXQuc3Ryb2tlPSJyZ2IoMCwwLDAsIDAuNSkiLG5mLmRyYXdCb3goQSxFdCxmbil9KSxzdCYmRnIuYnVtcFZlcnRpY2FsUG9zKGZuLmJveE1hcmdpbik7Y29uc3QgcHQ9UlJ0KEEsSSx6LF8pLHtib3VuZHM6VX09RnIuZ2V0Qm91bmRzKCk7bGV0IFR0PVUuc3RvcHktVS5zdGFydHk7VHQ8cHQubWF4SGVpZ2h0JiYoVHQ9cHQubWF4SGVpZ2h0KTtsZXQgbnQ9VHQrMipmbi5kaWFncmFtTWFyZ2luWTtmbi5taXJyb3JBY3RvcnMmJihudD1udC1mbi5ib3hNYXJnaW4rZm4uYm90dG9tTWFyZ2luQWRqKTtsZXQgSXQ9VS5zdG9weC1VLnN0YXJ0eDtJdDxwdC5tYXhXaWR0aCYmKEl0PXB0Lm1heFdpZHRoKTtjb25zdCBPdD1JdCsyKmZuLmRpYWdyYW1NYXJnaW5YO2V0JiZBLmFwcGVuZCgidGV4dCIpLnRleHQoZXQpLmF0dHIoIngiLChVLnN0b3B4LVUuc3RhcnR4KS8yLTIqZm4uZGlhZ3JhbU1hcmdpblgpLmF0dHIoInkiLC0yNSksazAoQSxudCxPdCxmbi51c2VNYXhXaWR0aCk7Y29uc3QgQnQ9ZXQ/NDA6MDtBLmF0dHIoInZpZXdCb3giLFUuc3RhcnR4LWZuLmRpYWdyYW1NYXJnaW5YKyIgLSIrKGZuLmRpYWdyYW1NYXJnaW5ZK0J0KSsiICIrT3QrIiAiKyhudCtCdCkpLFV0LmRlYnVnKCJtb2RlbHM6IixGci5tb2RlbHMpfTtmdW5jdGlvbiBaVmUoaSxhLGYpe2NvbnN0IHA9e307cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbih3KXtpZihpW3cudG9dJiZpW3cuZnJvbV0pe2NvbnN0IG09aVt3LnRvXTtpZih3LnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULkxFRlRPRiYmIW0ucHJldkFjdG9yfHx3LnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULlJJR0hUT0YmJiFtLm5leHRBY3RvcilyZXR1cm47Y29uc3QgYj13LnBsYWNlbWVudCE9PXZvaWQgMCxFPSFiLF89Yj9iTChmbik6U1QoZm4pLEE9dy53cmFwPyRhLndyYXBMYWJlbCh3Lm1lc3NhZ2UsZm4ud2lkdGgtMipmbi53cmFwUGFkZGluZyxfKTp3Lm1lc3NhZ2UsQj0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhBLF8pLndpZHRoKzIqZm4ud3JhcFBhZGRpbmc7RSYmdy5mcm9tPT09bS5uZXh0QWN0b3I/cFt3LnRvXT1Lci5nZXRNYXgocFt3LnRvXXx8MCxCKTpFJiZ3LmZyb209PT1tLnByZXZBY3Rvcj9wW3cuZnJvbV09S3IuZ2V0TWF4KHBbdy5mcm9tXXx8MCxCKTpFJiZ3LmZyb209PT13LnRvPyhwW3cuZnJvbV09S3IuZ2V0TWF4KHBbdy5mcm9tXXx8MCxCLzIpLHBbdy50b109S3IuZ2V0TWF4KHBbdy50b118fDAsQi8yKSk6dy5wbGFjZW1lbnQ9PT1mLmRiLlBMQUNFTUVOVC5SSUdIVE9GP3Bbdy5mcm9tXT1Lci5nZXRNYXgocFt3LmZyb21dfHwwLEIpOncucGxhY2VtZW50PT09Zi5kYi5QTEFDRU1FTlQuTEVGVE9GP3BbbS5wcmV2QWN0b3JdPUtyLmdldE1heChwW20ucHJldkFjdG9yXXx8MCxCKTp3LnBsYWNlbWVudD09PWYuZGIuUExBQ0VNRU5ULk9WRVImJihtLnByZXZBY3RvciYmKHBbbS5wcmV2QWN0b3JdPUtyLmdldE1heChwW20ucHJldkFjdG9yXXx8MCxCLzIpKSxtLm5leHRBY3RvciYmKHBbdy5mcm9tXT1Lci5nZXRNYXgocFt3LmZyb21dfHwwLEIvMikpKX19KSxVdC5kZWJ1ZygibWF4TWVzc2FnZVdpZHRoUGVyQWN0b3I6IixwKSxwfWNvbnN0IEpWZT1mdW5jdGlvbihpKXtsZXQgYT0wO2NvbnN0IGY9a2d0KGZuKTtmb3IoY29uc3QgcCBpbiBpLmxpbmtzKXtjb25zdCBtPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHAsZikud2lkdGgrMipmbi53cmFwUGFkZGluZysyKmZuLmJveE1hcmdpbjthPG0mJihhPW0pfXJldHVybiBhfTtmdW5jdGlvbiB0R2UoaSxhLGYpe2xldCBwPTA7T2JqZWN0LmtleXMoaSkuZm9yRWFjaChtPT57Y29uc3QgYj1pW21dO2Iud3JhcCYmKGIuZGVzY3JpcHRpb249JGEud3JhcExhYmVsKGIuZGVzY3JpcHRpb24sZm4ud2lkdGgtMipmbi53cmFwUGFkZGluZyxrZ3QoZm4pKSk7Y29uc3QgRT0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhiLmRlc2NyaXB0aW9uLGtndChmbikpO2Iud2lkdGg9Yi53cmFwP2ZuLndpZHRoOktyLmdldE1heChmbi53aWR0aCxFLndpZHRoKzIqZm4ud3JhcFBhZGRpbmcpLGIuaGVpZ2h0PWIud3JhcD9Lci5nZXRNYXgoRS5oZWlnaHQsZm4uaGVpZ2h0KTpmbi5oZWlnaHQscD1Lci5nZXRNYXgocCxiLmhlaWdodCl9KTtmb3IoY29uc3QgbSBpbiBhKXtjb25zdCBiPWlbbV07aWYoIWIpY29udGludWU7Y29uc3QgRT1pW2IubmV4dEFjdG9yXTtpZighRSl7Y29uc3QgQj1hW21dK2ZuLmFjdG9yTWFyZ2luLWIud2lkdGgvMjtiLm1hcmdpbj1Lci5nZXRNYXgoQixmbi5hY3Rvck1hcmdpbik7Y29udGludWV9Y29uc3QgQT1hW21dK2ZuLmFjdG9yTWFyZ2luLWIud2lkdGgvMi1FLndpZHRoLzI7Yi5tYXJnaW49S3IuZ2V0TWF4KEEsZm4uYWN0b3JNYXJnaW4pfWxldCB3PTA7cmV0dXJuIGYuZm9yRWFjaChtPT57Y29uc3QgYj1TVChmbik7bGV0IEU9bS5hY3RvcktleXMucmVkdWNlKChJLEIpPT5JKz1pW0JdLndpZHRoKyhpW0JdLm1hcmdpbnx8MCksMCk7RS09Mipmbi5ib3hUZXh0TWFyZ2luLG0ud3JhcCYmKG0ubmFtZT0kYS53cmFwTGFiZWwobS5uYW1lLEUtMipmbi53cmFwUGFkZGluZyxiKSk7Y29uc3QgXz0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhtLm5hbWUsYik7dz1Lci5nZXRNYXgoXy5oZWlnaHQsdyk7Y29uc3QgQT1Lci5nZXRNYXgoRSxfLndpZHRoKzIqZm4ud3JhcFBhZGRpbmcpO2lmKG0ubWFyZ2luPWZuLmJveFRleHRNYXJnaW4sRTxBKXtjb25zdCBJPShBLUUpLzI7bS5tYXJnaW4rPUl9fSksZi5mb3JFYWNoKG09Pm0udGV4dE1heEhlaWdodD13KSxLci5nZXRNYXgocCxmbi5oZWlnaHQpfWNvbnN0IGVHZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1hW2kuZnJvbV0ueCx3PWFbaS50b10ueCxtPWkud3JhcCYmaS5tZXNzYWdlO2xldCBiPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKG0/JGEud3JhcExhYmVsKGkubWVzc2FnZSxmbi53aWR0aCxiTChmbikpOmkubWVzc2FnZSxiTChmbikpO2NvbnN0IEU9e3dpZHRoOm0/Zm4ud2lkdGg6S3IuZ2V0TWF4KGZuLndpZHRoLGIud2lkdGgrMipmbi5ub3RlTWFyZ2luKSxoZWlnaHQ6MCxzdGFydHg6YVtpLmZyb21dLngsc3RvcHg6MCxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6aS5tZXNzYWdlfTtyZXR1cm4gaS5wbGFjZW1lbnQ9PT1mLmRiLlBMQUNFTUVOVC5SSUdIVE9GPyhFLndpZHRoPW0/S3IuZ2V0TWF4KGZuLndpZHRoLGIud2lkdGgpOktyLmdldE1heChhW2kuZnJvbV0ud2lkdGgvMithW2kudG9dLndpZHRoLzIsYi53aWR0aCsyKmZuLm5vdGVNYXJnaW4pLEUuc3RhcnR4PXArKGFbaS5mcm9tXS53aWR0aCtmbi5hY3Rvck1hcmdpbikvMik6aS5wbGFjZW1lbnQ9PT1mLmRiLlBMQUNFTUVOVC5MRUZUT0Y/KEUud2lkdGg9bT9Lci5nZXRNYXgoZm4ud2lkdGgsYi53aWR0aCsyKmZuLm5vdGVNYXJnaW4pOktyLmdldE1heChhW2kuZnJvbV0ud2lkdGgvMithW2kudG9dLndpZHRoLzIsYi53aWR0aCsyKmZuLm5vdGVNYXJnaW4pLEUuc3RhcnR4PXAtRS53aWR0aCsoYVtpLmZyb21dLndpZHRoLWZuLmFjdG9yTWFyZ2luKS8yKTppLnRvPT09aS5mcm9tPyhiPSRhLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKG0/JGEud3JhcExhYmVsKGkubWVzc2FnZSxLci5nZXRNYXgoZm4ud2lkdGgsYVtpLmZyb21dLndpZHRoKSxiTChmbikpOmkubWVzc2FnZSxiTChmbikpLEUud2lkdGg9bT9Lci5nZXRNYXgoZm4ud2lkdGgsYVtpLmZyb21dLndpZHRoKTpLci5nZXRNYXgoYVtpLmZyb21dLndpZHRoLGZuLndpZHRoLGIud2lkdGgrMipmbi5ub3RlTWFyZ2luKSxFLnN0YXJ0eD1wKyhhW2kuZnJvbV0ud2lkdGgtRS53aWR0aCkvMik6KEUud2lkdGg9TWF0aC5hYnMocCthW2kuZnJvbV0ud2lkdGgvMi0odythW2kudG9dLndpZHRoLzIpKStmbi5hY3Rvck1hcmdpbixFLnN0YXJ0eD1wPHc/cCthW2kuZnJvbV0ud2lkdGgvMi1mbi5hY3Rvck1hcmdpbi8yOncrYVtpLnRvXS53aWR0aC8yLWZuLmFjdG9yTWFyZ2luLzIpLG0mJihFLm1lc3NhZ2U9JGEud3JhcExhYmVsKGkubWVzc2FnZSxFLndpZHRoLTIqZm4ud3JhcFBhZGRpbmcsYkwoZm4pKSksVXQuZGVidWcoYE5NOlske0Uuc3RhcnR4fSwke0Uuc3RvcHh9LCR7RS5zdGFydHl9LCR7RS5zdG9weX06JHtFLndpZHRofSwke0UuaGVpZ2h0fT0ke2kubWVzc2FnZX1dYCksRX0sbkdlPWZ1bmN0aW9uKGksYSxmKXtpZighW2YuZGIuTElORVRZUEUuU09MSURfT1BFTixmLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOLGYuZGIuTElORVRZUEUuU09MSUQsZi5kYi5MSU5FVFlQRS5ET1RURUQsZi5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TUyxmLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUyxmLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5ULGYuZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UXS5pbmNsdWRlcyhpLnR5cGUpKXJldHVybnt9O2NvbnN0W3Asd109JFJ0KGkuZnJvbSxhKSxbbSxiXT0kUnQoaS50byxhKSxFPXA8PW0sXz1FP3c6cDtsZXQgQT1FP206Yjtjb25zdCBJPU1hdGguYWJzKG0tYik+MixCPVc9PkU/LVc6VztpLmZyb209PT1pLnRvP0E9XzooaS5hY3RpdmF0ZSYmIUkmJihBKz1CKGZuLmFjdGl2YXRpb25XaWR0aC8yLTEpKSxbZi5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLGYuZGIuTElORVRZUEUuRE9UVEVEX09QRU5dLmluY2x1ZGVzKGkudHlwZSl8fChBKz1CKDMpKSk7Y29uc3QgTj1bcCx3LG0sYl0sUj1NYXRoLmFicyhfLUEpO2kud3JhcCYmaS5tZXNzYWdlJiYoaS5tZXNzYWdlPSRhLndyYXBMYWJlbChpLm1lc3NhZ2UsS3IuZ2V0TWF4KFIrMipmbi53cmFwUGFkZGluZyxmbi53aWR0aCksU1QoZm4pKSk7Y29uc3Qgej0kYS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhpLm1lc3NhZ2UsU1QoZm4pKTtyZXR1cm57d2lkdGg6S3IuZ2V0TWF4KGkud3JhcD8wOnoud2lkdGgrMipmbi53cmFwUGFkZGluZyxSKzIqZm4ud3JhcFBhZGRpbmcsZm4ud2lkdGgpLGhlaWdodDowLHN0YXJ0eDpfLHN0b3B4OkEsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOmkubWVzc2FnZSx0eXBlOmkudHlwZSx3cmFwOmkud3JhcCxmcm9tQm91bmRzOk1hdGgubWluLmFwcGx5KG51bGwsTiksdG9Cb3VuZHM6TWF0aC5tYXguYXBwbHkobnVsbCxOKX19LHJHZT1mdW5jdGlvbihpLGEsZixwKXtjb25zdCB3PXt9LG09W107bGV0IGIsRSxfO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oQSl7c3dpdGNoKEEuaWQ9JGEucmFuZG9tKHtsZW5ndGg6MTB9KSxBLnR5cGUpe2Nhc2UgcC5kYi5MSU5FVFlQRS5MT09QX1NUQVJUOmNhc2UgcC5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6Y2FzZSBwLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDpjYXNlIHAuZGIuTElORVRZUEUuUEFSX1NUQVJUOmNhc2UgcC5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDpjYXNlIHAuZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6Y2FzZSBwLmRiLkxJTkVUWVBFLkJSRUFLX1NUQVJUOm0ucHVzaCh7aWQ6QS5pZCxtc2c6QS5tZXNzYWdlLGZyb206TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdG86TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsd2lkdGg6MH0pO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BTFRfRUxTRTpjYXNlIHAuZGIuTElORVRZUEUuUEFSX0FORDpjYXNlIHAuZGIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OOkEubWVzc2FnZSYmKGI9bS5wb3AoKSx3W2IuaWRdPWIsd1tBLmlkXT1iLG0ucHVzaChiKSk7YnJlYWs7Y2FzZSBwLmRiLkxJTkVUWVBFLkxPT1BfRU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5BTFRfRU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5PUFRfRU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5QQVJfRU5EOmNhc2UgcC5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6Y2FzZSBwLmRiLkxJTkVUWVBFLkJSRUFLX0VORDpiPW0ucG9wKCksd1tiLmlkXT1iO2JyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6e2NvbnN0IEI9YVtBLmZyb20/QS5mcm9tLmFjdG9yOkEudG8uYWN0b3JdLE49alkoQS5mcm9tP0EuZnJvbS5hY3RvcjpBLnRvLmFjdG9yKS5sZW5ndGgsUj1CLngrQi53aWR0aC8yKyhOLTEpKmZuLmFjdGl2YXRpb25XaWR0aC8yLHo9e3N0YXJ0eDpSLHN0b3B4OlIrZm4uYWN0aXZhdGlvbldpZHRoLGFjdG9yOkEuZnJvbS5hY3RvcixlbmFibGVkOiEwfTtGci5hY3RpdmF0aW9ucy5wdXNoKHopfWJyZWFrO2Nhc2UgcC5kYi5MSU5FVFlQRS5BQ1RJVkVfRU5EOntjb25zdCBCPUZyLmFjdGl2YXRpb25zLm1hcChOPT5OLmFjdG9yKS5sYXN0SW5kZXhPZihBLmZyb20uYWN0b3IpO2RlbGV0ZSBGci5hY3RpdmF0aW9ucy5zcGxpY2UoQiwxKVswXX1icmVha31BLnBsYWNlbWVudCE9PXZvaWQgMD8oRT1lR2UoQSxhLHApLEEubm90ZU1vZGVsPUUsbS5mb3JFYWNoKEI9PntiPUIsYi5mcm9tPUtyLmdldE1pbihiLmZyb20sRS5zdGFydHgpLGIudG89S3IuZ2V0TWF4KGIudG8sRS5zdGFydHgrRS53aWR0aCksYi53aWR0aD1Lci5nZXRNYXgoYi53aWR0aCxNYXRoLmFicyhiLmZyb20tYi50bykpLWZuLmxhYmVsQm94V2lkdGh9KSk6KF89bkdlKEEsYSxwKSxBLm1zZ01vZGVsPV8sXy5zdGFydHgmJl8uc3RvcHgmJm0ubGVuZ3RoPjAmJm0uZm9yRWFjaChCPT57aWYoYj1CLF8uc3RhcnR4PT09Xy5zdG9weCl7Y29uc3QgTj1hW0EuZnJvbV0sUj1hW0EudG9dO2IuZnJvbT1Lci5nZXRNaW4oTi54LV8ud2lkdGgvMixOLngtTi53aWR0aC8yLGIuZnJvbSksYi50bz1Lci5nZXRNYXgoUi54K18ud2lkdGgvMixSLngrTi53aWR0aC8yLGIudG8pLGIud2lkdGg9S3IuZ2V0TWF4KGIud2lkdGgsTWF0aC5hYnMoYi50by1iLmZyb20pKS1mbi5sYWJlbEJveFdpZHRofWVsc2UgYi5mcm9tPUtyLmdldE1pbihfLnN0YXJ0eCxiLmZyb20pLGIudG89S3IuZ2V0TWF4KF8uc3RvcHgsYi50byksYi53aWR0aD1Lci5nZXRNYXgoYi53aWR0aCxfLndpZHRoKS1mbi5sYWJlbEJveFdpZHRofSkpfSksRnIuYWN0aXZhdGlvbnM9W10sVXQuZGVidWcoIkxvb3AgdHlwZSB3aWR0aHM6Iix3KSx3fSxpR2U9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjp0VmUsZGI6SVJ0LHJlbmRlcmVyOntib3VuZHM6RnIsZHJhd0FjdG9yczpFZ3QsZHJhd0FjdG9yc1BvcHVwOlJSdCxzZXRDb25mOmpSdCxkcmF3OlFWZX0sc3R5bGVzOlRWZSxpbml0Oih7d3JhcDppfSk9PntJUnQuc2V0V3JhcChpKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBUZ3Q9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihrZSx6dCxyZSxzZSl7Zm9yKHJlPXJlfHx7fSxzZT1rZS5sZW5ndGg7c2UtLTtyZVtrZVtzZV1dPXp0KTtyZXR1cm4gcmV9LGE9WzEsMTZdLGY9WzEsMTddLHA9WzEsMThdLHc9WzEsMzddLG09WzEsMzhdLGI9WzEsMjRdLEU9WzEsMjJdLF89WzEsMjNdLEE9WzEsMjldLEk9WzEsMzBdLEI9WzEsMzFdLE49WzEsMzJdLFI9WzEsMzNdLHo9WzEsMzRdLFc9WzEsMjVdLGV0PVsxLDI2XSxzdD1bMSwyN10sYXQ9WzEsMjhdLGJ0PVsxLDQyXSxtdD1bMSwzOV0seXQ9WzEsNDBdLGZ0PVsxLDQxXSx1dD1bMSw0M10sdnQ9WzEsOV0sWD1bMSw4LDldLHB0PVsxLDU0XSxVPVsxLDU1XSxUdD1bMSw1Nl0sbnQ9WzEsNTddLEl0PVsxLDU4XSxPdD1bMSw1OV0sQnQ9WzEsNjBdLEV0PVsxLDgsOSwzOF0sWj1bMSw3MV0sQ3Q9WzEsOCw5LDEyLDEzLDIxLDM2LDM4LDQxLDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY5LDcxXSx4dD1bMSw4LDksMTIsMTMsMTksMjEsMzYsMzgsNDEsNDUsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjksNzEsODQsODYsODcsODgsODldLEh0PVsxMyw4NCw4Niw4Nyw4OCw4OV0sTGU9WzEzLDYzLDY0LDg0LDg2LDg3LDg4LDg5XSxGdD1bMTMsNTgsNTksNjAsNjEsNjIsODQsODYsODcsODgsODldLGduPVsxLDkwXSxTZT1bMSw4LDksMzYsMzgsNDFdLG1lPVsxLDgsOSwyMV0sVmU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxzdGF0ZW1lbnRzOjUsZ3JhcGhDb25maWc6NixDTEFTU19ESUFHUkFNOjcsTkVXTElORTo4LEVPRjo5LHN0YXRlbWVudDoxMCxjbGFzc0xhYmVsOjExLFNRUzoxMixTVFI6MTMsU1FFOjE0LG5hbWVzcGFjZU5hbWU6MTUsYWxwaGFOdW1Ub2tlbjoxNixjbGFzc05hbWU6MTcsY2xhc3NMaXRlcmFsTmFtZToxOCxHRU5FUklDVFlQRToxOSxyZWxhdGlvblN0YXRlbWVudDoyMCxMQUJFTDoyMSxuYW1lc3BhY2VTdGF0ZW1lbnQ6MjIsY2xhc3NTdGF0ZW1lbnQ6MjMsbWVtYmVyU3RhdGVtZW50OjI0LGFubm90YXRpb25TdGF0ZW1lbnQ6MjUsY2xpY2tTdGF0ZW1lbnQ6MjYsY3NzQ2xhc3NTdGF0ZW1lbnQ6Mjcsbm90ZVN0YXRlbWVudDoyOCxkaXJlY3Rpb246MjksYWNjX3RpdGxlOjMwLGFjY190aXRsZV92YWx1ZTozMSxhY2NfZGVzY3I6MzIsYWNjX2Rlc2NyX3ZhbHVlOjMzLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzQsbmFtZXNwYWNlSWRlbnRpZmllcjozNSxTVFJVQ1RfU1RBUlQ6MzYsY2xhc3NTdGF0ZW1lbnRzOjM3LFNUUlVDVF9TVE9QOjM4LE5BTUVTUEFDRTozOSxjbGFzc0lkZW50aWZpZXI6NDAsU1RZTEVfU0VQQVJBVE9SOjQxLG1lbWJlcnM6NDIsQ0xBU1M6NDMsQU5OT1RBVElPTl9TVEFSVDo0NCxBTk5PVEFUSU9OX0VORDo0NSxNRU1CRVI6NDYsU0VQQVJBVE9SOjQ3LHJlbGF0aW9uOjQ4LE5PVEVfRk9SOjQ5LG5vdGVUZXh0OjUwLE5PVEU6NTEsZGlyZWN0aW9uX3RiOjUyLGRpcmVjdGlvbl9idDo1MyxkaXJlY3Rpb25fcmw6NTQsZGlyZWN0aW9uX2xyOjU1LHJlbGF0aW9uVHlwZTo1NixsaW5lVHlwZTo1NyxBR0dSRUdBVElPTjo1OCxFWFRFTlNJT046NTksQ09NUE9TSVRJT046NjAsREVQRU5ERU5DWTo2MSxMT0xMSVBPUDo2MixMSU5FOjYzLERPVFRFRF9MSU5FOjY0LENBTExCQUNLOjY1LExJTks6NjYsTElOS19UQVJHRVQ6NjcsQ0xJQ0s6NjgsQ0FMTEJBQ0tfTkFNRTo2OSxDQUxMQkFDS19BUkdTOjcwLEhSRUY6NzEsQ1NTQ0xBU1M6NzIsY29tbWVudFRva2VuOjczLHRleHRUb2tlbjo3NCxncmFwaENvZGVUb2tlbnM6NzUsdGV4dE5vVGFnc1Rva2VuOjc2LFRBR1NUQVJUOjc3LFRBR0VORDo3OCwiPT0iOjc5LCItLSI6ODAsUENUOjgxLERFRkFVTFQ6ODIsU1BBQ0U6ODMsTUlOVVM6ODQsa2V5d29yZHM6ODUsVU5JQ09ERV9URVhUOjg2LE5VTTo4NyxBTFBIQTo4OCxCUVVPVEVfU1RSOjg5LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw3OiJDTEFTU19ESUFHUkFNIiw4OiJORVdMSU5FIiw5OiJFT0YiLDEyOiJTUVMiLDEzOiJTVFIiLDE0OiJTUUUiLDE5OiJHRU5FUklDVFlQRSIsMjE6IkxBQkVMIiwzMDoiYWNjX3RpdGxlIiwzMToiYWNjX3RpdGxlX3ZhbHVlIiwzMjoiYWNjX2Rlc2NyIiwzMzoiYWNjX2Rlc2NyX3ZhbHVlIiwzNDoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzY6IlNUUlVDVF9TVEFSVCIsMzg6IlNUUlVDVF9TVE9QIiwzOToiTkFNRVNQQUNFIiw0MToiU1RZTEVfU0VQQVJBVE9SIiw0MzoiQ0xBU1MiLDQ0OiJBTk5PVEFUSU9OX1NUQVJUIiw0NToiQU5OT1RBVElPTl9FTkQiLDQ2OiJNRU1CRVIiLDQ3OiJTRVBBUkFUT1IiLDQ5OiJOT1RFX0ZPUiIsNTE6Ik5PVEUiLDUyOiJkaXJlY3Rpb25fdGIiLDUzOiJkaXJlY3Rpb25fYnQiLDU0OiJkaXJlY3Rpb25fcmwiLDU1OiJkaXJlY3Rpb25fbHIiLDU4OiJBR0dSRUdBVElPTiIsNTk6IkVYVEVOU0lPTiIsNjA6IkNPTVBPU0lUSU9OIiw2MToiREVQRU5ERU5DWSIsNjI6IkxPTExJUE9QIiw2MzoiTElORSIsNjQ6IkRPVFRFRF9MSU5FIiw2NToiQ0FMTEJBQ0siLDY2OiJMSU5LIiw2NzoiTElOS19UQVJHRVQiLDY4OiJDTElDSyIsNjk6IkNBTExCQUNLX05BTUUiLDcwOiJDQUxMQkFDS19BUkdTIiw3MToiSFJFRiIsNzI6IkNTU0NMQVNTIiw3NToiZ3JhcGhDb2RlVG9rZW5zIiw3NzoiVEFHU1RBUlQiLDc4OiJUQUdFTkQiLDc5OiI9PSIsODA6Ii0tIiw4MToiUENUIiw4MjoiREVGQVVMVCIsODM6IlNQQUNFIiw4NDoiTUlOVVMiLDg1OiJrZXl3b3JkcyIsODY6IlVOSUNPREVfVEVYVCIsODc6Ik5VTSIsODg6IkFMUEhBIiw4OToiQlFVT1RFX1NUUiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbNCwxXSxbNiw0XSxbNSwxXSxbNSwyXSxbNSwzXSxbMTEsM10sWzE1LDFdLFsxNSwyXSxbMTcsMV0sWzE3LDFdLFsxNywyXSxbMTcsMl0sWzE3LDJdLFsxMCwxXSxbMTAsMl0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFsxMCwxXSxbMjIsNF0sWzIyLDVdLFszNSwyXSxbMzcsMV0sWzM3LDJdLFszNywzXSxbMjMsMV0sWzIzLDNdLFsyMyw0XSxbMjMsNl0sWzQwLDJdLFs0MCwzXSxbMjUsNF0sWzQyLDFdLFs0MiwyXSxbMjQsMV0sWzI0LDJdLFsyNCwxXSxbMjQsMV0sWzIwLDNdLFsyMCw0XSxbMjAsNF0sWzIwLDVdLFsyOCwzXSxbMjgsMl0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzI5LDFdLFs0OCwzXSxbNDgsMl0sWzQ4LDJdLFs0OCwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NywxXSxbNTcsMV0sWzI2LDNdLFsyNiw0XSxbMjYsM10sWzI2LDRdLFsyNiw0XSxbMjYsNV0sWzI2LDNdLFsyNiw0XSxbMjYsNF0sWzI2LDVdLFsyNiw0XSxbMjYsNV0sWzI2LDVdLFsyNiw2XSxbMjcsM10sWzczLDFdLFs3MywxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzQsMV0sWzc2LDFdLFs3NiwxXSxbNzYsMV0sWzc2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTgsMV0sWzUwLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHp0LHJlLHNlLFBlLHRlLE1lLGRlKXt2YXIgb249TWUubGVuZ3RoLTE7c3dpdGNoKHRlKXtjYXNlIDg6dGhpcy4kPU1lW29uLTFdO2JyZWFrO2Nhc2UgOTpjYXNlIDExOmNhc2UgMTI6dGhpcy4kPU1lW29uXTticmVhaztjYXNlIDEwOmNhc2UgMTM6dGhpcy4kPU1lW29uLTFdK01lW29uXTticmVhaztjYXNlIDE0OmNhc2UgMTU6dGhpcy4kPU1lW29uLTFdKyJ+IitNZVtvbl0rIn4iO2JyZWFrO2Nhc2UgMTY6UGUuYWRkUmVsYXRpb24oTWVbb25dKTticmVhaztjYXNlIDE3Ok1lW29uLTFdLnRpdGxlPVBlLmNsZWFudXBMYWJlbChNZVtvbl0pLFBlLmFkZFJlbGF0aW9uKE1lW29uLTFdKTticmVhaztjYXNlIDI2OnRoaXMuJD1NZVtvbl0udHJpbSgpLFBlLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyNzpjYXNlIDI4OnRoaXMuJD1NZVtvbl0udHJpbSgpLFBlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyOTpQZS5hZGRDbGFzc2VzVG9OYW1lc3BhY2UoTWVbb24tM10sTWVbb24tMV0pO2JyZWFrO2Nhc2UgMzA6UGUuYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlKE1lW29uLTRdLE1lW29uLTFdKTticmVhaztjYXNlIDMxOnRoaXMuJD1NZVtvbl0sUGUuYWRkTmFtZXNwYWNlKE1lW29uXSk7YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9W01lW29uXV07YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9W01lW29uLTFdXTticmVhaztjYXNlIDM0Ok1lW29uXS51bnNoaWZ0KE1lW29uLTJdKSx0aGlzLiQ9TWVbb25dO2JyZWFrO2Nhc2UgMzY6UGUuc2V0Q3NzQ2xhc3MoTWVbb24tMl0sTWVbb25dKTticmVhaztjYXNlIDM3OlBlLmFkZE1lbWJlcnMoTWVbb24tM10sTWVbb24tMV0pO2JyZWFrO2Nhc2UgMzg6UGUuc2V0Q3NzQ2xhc3MoTWVbb24tNV0sTWVbb24tM10pLFBlLmFkZE1lbWJlcnMoTWVbb24tNV0sTWVbb24tMV0pO2JyZWFrO2Nhc2UgMzk6dGhpcy4kPU1lW29uXSxQZS5hZGRDbGFzcyhNZVtvbl0pO2JyZWFrO2Nhc2UgNDA6dGhpcy4kPU1lW29uLTFdLFBlLmFkZENsYXNzKE1lW29uLTFdKSxQZS5zZXRDbGFzc0xhYmVsKE1lW29uLTFdLE1lW29uXSk7YnJlYWs7Y2FzZSA0MTpQZS5hZGRBbm5vdGF0aW9uKE1lW29uXSxNZVtvbi0yXSk7YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9W01lW29uXV07YnJlYWs7Y2FzZSA0MzpNZVtvbl0ucHVzaChNZVtvbi0xXSksdGhpcy4kPU1lW29uXTticmVhaztjYXNlIDQ0OmJyZWFrO2Nhc2UgNDU6UGUuYWRkTWVtYmVyKE1lW29uLTFdLFBlLmNsZWFudXBMYWJlbChNZVtvbl0pKTticmVhaztjYXNlIDQ2OmJyZWFrO2Nhc2UgNDc6YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9e2lkMTpNZVtvbi0yXSxpZDI6TWVbb25dLHJlbGF0aW9uOk1lW29uLTFdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXtpZDE6TWVbb24tM10saWQyOk1lW29uXSxyZWxhdGlvbjpNZVtvbi0xXSxyZWxhdGlvblRpdGxlMTpNZVtvbi0yXSxyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXtpZDE6TWVbb24tM10saWQyOk1lW29uXSxyZWxhdGlvbjpNZVtvbi0yXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6TWVbb24tMV19O2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXtpZDE6TWVbb24tNF0saWQyOk1lW29uXSxyZWxhdGlvbjpNZVtvbi0yXSxyZWxhdGlvblRpdGxlMTpNZVtvbi0zXSxyZWxhdGlvblRpdGxlMjpNZVtvbi0xXX07YnJlYWs7Y2FzZSA1MjpQZS5hZGROb3RlKE1lW29uXSxNZVtvbi0xXSk7YnJlYWs7Y2FzZSA1MzpQZS5hZGROb3RlKE1lW29uXSk7YnJlYWs7Y2FzZSA1NDpQZS5zZXREaXJlY3Rpb24oIlRCIik7YnJlYWs7Y2FzZSA1NTpQZS5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSA1NjpQZS5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA1NzpQZS5zZXREaXJlY3Rpb24oIkxSIik7YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9e3R5cGUxOk1lW29uLTJdLHR5cGUyOk1lW29uXSxsaW5lVHlwZTpNZVtvbi0xXX07YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjpNZVtvbl0sbGluZVR5cGU6TWVbb24tMV19O2JyZWFrO2Nhc2UgNjA6dGhpcy4kPXt0eXBlMTpNZVtvbi0xXSx0eXBlMjoibm9uZSIsbGluZVR5cGU6TWVbb25dfTticmVhaztjYXNlIDYxOnRoaXMuJD17dHlwZTE6Im5vbmUiLHR5cGUyOiJub25lIixsaW5lVHlwZTpNZVtvbl19O2JyZWFrO2Nhc2UgNjI6dGhpcy4kPVBlLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjticmVhaztjYXNlIDYzOnRoaXMuJD1QZS5yZWxhdGlvblR5cGUuRVhURU5TSU9OO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPVBlLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjticmVhaztjYXNlIDY1OnRoaXMuJD1QZS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTticmVhaztjYXNlIDY2OnRoaXMuJD1QZS5yZWxhdGlvblR5cGUuTE9MTElQT1A7YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9UGUubGluZVR5cGUuTElORTticmVhaztjYXNlIDY4OnRoaXMuJD1QZS5saW5lVHlwZS5ET1RURURfTElORTticmVhaztjYXNlIDY5OmNhc2UgNzU6dGhpcy4kPU1lW29uLTJdLFBlLnNldENsaWNrRXZlbnQoTWVbb24tMV0sTWVbb25dKTticmVhaztjYXNlIDcwOmNhc2UgNzY6dGhpcy4kPU1lW29uLTNdLFBlLnNldENsaWNrRXZlbnQoTWVbb24tMl0sTWVbb24tMV0pLFBlLnNldFRvb2x0aXAoTWVbb24tMl0sTWVbb25dKTticmVhaztjYXNlIDcxOnRoaXMuJD1NZVtvbi0yXSxQZS5zZXRMaW5rKE1lW29uLTFdLE1lW29uXSk7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9TWVbb24tM10sUGUuc2V0TGluayhNZVtvbi0yXSxNZVtvbi0xXSxNZVtvbl0pO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPU1lW29uLTNdLFBlLnNldExpbmsoTWVbb24tMl0sTWVbb24tMV0pLFBlLnNldFRvb2x0aXAoTWVbb24tMl0sTWVbb25dKTticmVhaztjYXNlIDc0OnRoaXMuJD1NZVtvbi00XSxQZS5zZXRMaW5rKE1lW29uLTNdLE1lW29uLTJdLE1lW29uXSksUGUuc2V0VG9vbHRpcChNZVtvbi0zXSxNZVtvbi0xXSk7YnJlYWs7Y2FzZSA3Nzp0aGlzLiQ9TWVbb24tM10sUGUuc2V0Q2xpY2tFdmVudChNZVtvbi0yXSxNZVtvbi0xXSxNZVtvbl0pO2JyZWFrO2Nhc2UgNzg6dGhpcy4kPU1lW29uLTRdLFBlLnNldENsaWNrRXZlbnQoTWVbb24tM10sTWVbb24tMl0sTWVbb24tMV0pLFBlLnNldFRvb2x0aXAoTWVbb24tM10sTWVbb25dKTticmVhaztjYXNlIDc5OnRoaXMuJD1NZVtvbi0zXSxQZS5zZXRMaW5rKE1lW29uLTJdLE1lW29uXSk7YnJlYWs7Y2FzZSA4MDp0aGlzLiQ9TWVbb24tNF0sUGUuc2V0TGluayhNZVtvbi0zXSxNZVtvbi0xXSxNZVtvbl0pO2JyZWFrO2Nhc2UgODE6dGhpcy4kPU1lW29uLTRdLFBlLnNldExpbmsoTWVbb24tM10sTWVbb24tMV0pLFBlLnNldFRvb2x0aXAoTWVbb24tM10sTWVbb25dKTticmVhaztjYXNlIDgyOnRoaXMuJD1NZVtvbi01XSxQZS5zZXRMaW5rKE1lW29uLTRdLE1lW29uLTJdLE1lW29uXSksUGUuc2V0VG9vbHRpcChNZVtvbi00XSxNZVtvbi0xXSk7YnJlYWs7Y2FzZSA4MzpQZS5zZXRDc3NDbGFzcyhNZVtvbi0xXSxNZVtvbl0pO2JyZWFrfX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjQsNzpbMSw2XSwxMDo1LDE2OjM1LDE3OjE5LDE4OjM2LDIwOjcsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI3OjEzLDI4OjE0LDI5OjE1LDMwOmEsMzI6ZiwzNDpwLDM1OjIwLDM5OncsNDA6MjEsNDM6bSw0NDpiLDQ2OkUsNDc6Xyw0OTpBLDUxOkksNTI6Qiw1MzpOLDU0OlIsNTU6eiw2NTpXLDY2OmV0LDY4OnN0LDcyOmF0LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0LDg5OnV0fSx7MTpbM119LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM119LGkodnQsWzIsNV0sezg6WzEsNDRdfSksezg6WzEsNDVdfSxpKFgsWzIsMTZdLHsyMTpbMSw0Nl19KSxpKFgsWzIsMThdKSxpKFgsWzIsMTldKSxpKFgsWzIsMjBdKSxpKFgsWzIsMjFdKSxpKFgsWzIsMjJdKSxpKFgsWzIsMjNdKSxpKFgsWzIsMjRdKSxpKFgsWzIsMjVdKSx7MzE6WzEsNDddfSx7MzM6WzEsNDhdfSxpKFgsWzIsMjhdKSxpKFgsWzIsNDRdLHs0ODo0OSw1Njo1Miw1Nzo1MywxMzpbMSw1MF0sMjE6WzEsNTFdLDU4OnB0LDU5OlUsNjA6VHQsNjE6bnQsNjI6SXQsNjM6T3QsNjQ6QnR9KSx7MzY6WzEsNjFdfSxpKEV0LFsyLDM1XSx7MzY6WzEsNjNdLDQxOlsxLDYyXX0pLGkoWCxbMiw0Nl0pLGkoWCxbMiw0N10pLHsxNjo2NCw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdH0sezE2OjM1LDE3OjY1LDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0LDg5OnV0fSx7MTY6MzUsMTc6NjYsMTg6MzYsODQ6YnQsODY6bXQsODc6eXQsODg6ZnQsODk6dXR9LHsxNjozNSwxNzo2NywxODozNiw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0sezEzOlsxLDY4XX0sezE2OjM1LDE3OjY5LDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0LDg5OnV0fSx7MTM6Wiw1MDo3MH0saShYLFsyLDU0XSksaShYLFsyLDU1XSksaShYLFsyLDU2XSksaShYLFsyLDU3XSksaShDdCxbMiwxMV0sezE2OjM1LDE4OjM2LDE3OjcyLDE5OlsxLDczXSw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0pLGkoQ3QsWzIsMTJdLHsxOTpbMSw3NF19KSx7MTU6NzUsMTY6NzYsODQ6YnQsODY6bXQsODc6eXQsODg6ZnR9LHsxNjozNSwxNzo3NywxODozNiw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0saSh4dCxbMiw5N10pLGkoeHQsWzIsOThdKSxpKHh0LFsyLDk5XSksaSh4dCxbMiwxMDBdKSxpKFsxLDgsOSwxMiwxMywxOSwyMSwzNiwzOCw0MSw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2OSw3MV0sWzIsMTAxXSksaSh2dCxbMiw2XSx7MTA6NSwyMDo3LDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyNzoxMywyODoxNCwyOToxNSwxNzoxOSwzNToyMCw0MDoyMSwxNjozNSwxODozNiw1Ojc4LDMwOmEsMzI6ZiwzNDpwLDM5OncsNDM6bSw0NDpiLDQ2OkUsNDc6Xyw0OTpBLDUxOkksNTI6Qiw1MzpOLDU0OlIsNTU6eiw2NTpXLDY2OmV0LDY4OnN0LDcyOmF0LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0LDg5OnV0fSksezU6NzksMTA6NSwxNjozNSwxNzoxOSwxODozNiwyMDo3LDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyNzoxMywyODoxNCwyOToxNSwzMDphLDMyOmYsMzQ6cCwzNToyMCwzOTp3LDQwOjIxLDQzOm0sNDQ6Yiw0NjpFLDQ3Ol8sNDk6QSw1MTpJLDUyOkIsNTM6Tiw1NDpSLDU1OnosNjU6Vyw2NjpldCw2ODpzdCw3MjphdCw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0saShYLFsyLDE3XSksaShYLFsyLDI2XSksaShYLFsyLDI3XSksezEzOlsxLDgxXSwxNjozNSwxNzo4MCwxODozNiw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0sezQ4OjgyLDU2OjUyLDU3OjUzLDU4OnB0LDU5OlUsNjA6VHQsNjE6bnQsNjI6SXQsNjM6T3QsNjQ6QnR9LGkoWCxbMiw0NV0pLHs1Nzo4Myw2MzpPdCw2NDpCdH0saShIdCxbMiw2MV0sezU2Ojg0LDU4OnB0LDU5OlUsNjA6VHQsNjE6bnQsNjI6SXR9KSxpKExlLFsyLDYyXSksaShMZSxbMiw2M10pLGkoTGUsWzIsNjRdKSxpKExlLFsyLDY1XSksaShMZSxbMiw2Nl0pLGkoRnQsWzIsNjddKSxpKEZ0LFsyLDY4XSksezg6WzEsODZdLDIzOjg3LDM3Ojg1LDQwOjIxLDQzOm19LHsxNjo4OCw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdH0sezQyOjg5LDQ2OmdufSx7NDU6WzEsOTFdfSx7MTM6WzEsOTJdfSx7MTM6WzEsOTNdfSx7Njk6WzEsOTRdLDcxOlsxLDk1XX0sezE2Ojk2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0fSx7MTM6Wiw1MDo5N30saShYLFsyLDUzXSksaShYLFsyLDEwMl0pLGkoQ3QsWzIsMTNdKSxpKEN0LFsyLDE0XSksaShDdCxbMiwxNV0pLHszNjpbMiwzMV19LHsxNTo5OCwxNjo3NiwzNjpbMiw5XSw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdH0saShTZSxbMiwzOV0sezExOjk5LDEyOlsxLDEwMF19KSxpKHZ0LFsyLDddKSx7OTpbMSwxMDFdfSxpKG1lLFsyLDQ4XSksezE2OjM1LDE3OjEwMiwxODozNiw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0sezEzOlsxLDEwNF0sMTY6MzUsMTc6MTAzLDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0LDg5OnV0fSxpKEh0LFsyLDYwXSx7NTY6MTA1LDU4OnB0LDU5OlUsNjA6VHQsNjE6bnQsNjI6SXR9KSxpKEh0LFsyLDU5XSksezM4OlsxLDEwNl19LHsyMzo4NywzNzoxMDcsNDA6MjEsNDM6bX0sezg6WzEsMTA4XSwzODpbMiwzMl19LGkoRXQsWzIsMzZdLHszNjpbMSwxMDldfSksezM4OlsxLDExMF19LHszODpbMiw0Ml0sNDI6MTExLDQ2OmdufSx7MTY6MzUsMTc6MTEyLDE4OjM2LDg0OmJ0LDg2Om10LDg3Onl0LDg4OmZ0LDg5OnV0fSxpKFgsWzIsNjldLHsxMzpbMSwxMTNdfSksaShYLFsyLDcxXSx7MTM6WzEsMTE1XSw2NzpbMSwxMTRdfSksaShYLFsyLDc1XSx7MTM6WzEsMTE2XSw3MDpbMSwxMTddfSksezEzOlsxLDExOF19LGkoWCxbMiw4M10pLGkoWCxbMiw1Ml0pLHszNjpbMiwxMF19LGkoU2UsWzIsNDBdKSx7MTM6WzEsMTE5XX0sezE6WzIsNF19LGkobWUsWzIsNTBdKSxpKG1lLFsyLDQ5XSksezE2OjM1LDE3OjEyMCwxODozNiw4NDpidCw4NjptdCw4Nzp5dCw4ODpmdCw4OTp1dH0saShIdCxbMiw1OF0pLGkoWCxbMiwyOV0pLHszODpbMSwxMjFdfSx7MjM6ODcsMzc6MTIyLDM4OlsyLDMzXSw0MDoyMSw0MzptfSx7NDI6MTIzLDQ2OmdufSxpKEV0LFsyLDM3XSksezM4OlsyLDQzXX0saShYLFsyLDQxXSksaShYLFsyLDcwXSksaShYLFsyLDcyXSksaShYLFsyLDczXSx7Njc6WzEsMTI0XX0pLGkoWCxbMiw3Nl0pLGkoWCxbMiw3N10sezEzOlsxLDEyNV19KSxpKFgsWzIsNzldLHsxMzpbMSwxMjddLDY3OlsxLDEyNl19KSx7MTQ6WzEsMTI4XX0saShtZSxbMiw1MV0pLGkoWCxbMiwzMF0pLHszODpbMiwzNF19LHszODpbMSwxMjldfSxpKFgsWzIsNzRdKSxpKFgsWzIsNzhdKSxpKFgsWzIsODBdKSxpKFgsWzIsODFdLHs2NzpbMSwxMzBdfSksaShTZSxbMiw4XSksaShFdCxbMiwzOF0pLGkoWCxbMiw4Ml0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSwzOlsyLDJdLDQ6WzIsM10sNzU6WzIsMzFdLDk4OlsyLDEwXSwxMDE6WzIsNF0sMTExOlsyLDQzXSwxMjI6WzIsMzRdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHp0LHJlKXtpZihyZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKHp0KTtlbHNle3ZhciBzZT1uZXcgRXJyb3IoenQpO3Rocm93IHNlLmhhc2g9cmUsc2V9fSxwYXJzZTpmdW5jdGlvbih6dCl7dmFyIHJlPXRoaXMsc2U9WzBdLFBlPVtdLHRlPVtudWxsXSxNZT1bXSxkZT10aGlzLnRhYmxlLG9uPSIiLG5pPTAsS3M9MCx3cz0yLGZvPTEsWGk9TWUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksRXI9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxYbj17eXk6e319O2Zvcih2YXIgZGkgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxkaSkmJihYbi55eVtkaV09dGhpcy55eVtkaV0pO0VyLnNldElucHV0KHp0LFhuLnl5KSxYbi55eS5sZXhlcj1FcixYbi55eS5wYXJzZXI9dGhpcyx0eXBlb2YgRXIueXlsbG9jPiJ1IiYmKEVyLnl5bGxvYz17fSk7dmFyIEVlPUVyLnl5bGxvYztNZS5wdXNoKEVlKTt2YXIgS249RXIub3B0aW9ucyYmRXIub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFhuLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPVhuLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEhlKCl7dmFyIER1O3JldHVybiBEdT1QZS5wb3AoKXx8RXIubGV4KCl8fGZvLHR5cGVvZiBEdSE9Im51bWJlciImJihEdSBpbnN0YW5jZW9mIEFycmF5JiYoUGU9RHUsRHU9UGUucG9wKCkpLER1PXJlLnN5bWJvbHNfW0R1XXx8RHUpLER1fWZvcih2YXIgVGkscG4sRXMscWEsTWE9e30sR3MsUG8sdnMscnU7Oyl7aWYocG49c2Vbc2UubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbcG5dP0VzPXRoaXMuZGVmYXVsdEFjdGlvbnNbcG5dOigoVGk9PT1udWxsfHx0eXBlb2YgVGk+InUiKSYmKFRpPUhlKCkpLEVzPWRlW3BuXSYmZGVbcG5dW1RpXSksdHlwZW9mIEVzPiJ1Inx8IUVzLmxlbmd0aHx8IUVzWzBdKXt2YXIgenM9IiI7cnU9W107Zm9yKEdzIGluIGRlW3BuXSl0aGlzLnRlcm1pbmFsc19bR3NdJiZHcz53cyYmcnUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0dzXSsiJyIpO0VyLnNob3dQb3NpdGlvbj96cz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhuaSsxKStgOgpgK0VyLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcnUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tUaV18fFRpKSsiJyI6enM9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisobmkrMSkrIjogVW5leHBlY3RlZCAiKyhUaT09Zm8/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bVGldfHxUaSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoenMse3RleHQ6RXIubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1RpXXx8VGksbGluZTpFci55eWxpbmVubyxsb2M6RWUsZXhwZWN0ZWQ6cnV9KX1pZihFc1swXWluc3RhbmNlb2YgQXJyYXkmJkVzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrcG4rIiwgdG9rZW46ICIrVGkpO3N3aXRjaChFc1swXSl7Y2FzZSAxOnNlLnB1c2goVGkpLHRlLnB1c2goRXIueXl0ZXh0KSxNZS5wdXNoKEVyLnl5bGxvYyksc2UucHVzaChFc1sxXSksVGk9bnVsbCxLcz1Fci55eWxlbmcsb249RXIueXl0ZXh0LG5pPUVyLnl5bGluZW5vLEVlPUVyLnl5bGxvYzticmVhaztjYXNlIDI6aWYoUG89dGhpcy5wcm9kdWN0aW9uc19bRXNbMV1dWzFdLE1hLiQ9dGVbdGUubGVuZ3RoLVBvXSxNYS5fJD17Zmlyc3RfbGluZTpNZVtNZS5sZW5ndGgtKFBvfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6TWVbTWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46TWVbTWUubGVuZ3RoLShQb3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpNZVtNZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEtuJiYoTWEuXyQucmFuZ2U9W01lW01lLmxlbmd0aC0oUG98fDEpXS5yYW5nZVswXSxNZVtNZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxxYT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTWEsW29uLEtzLG5pLFhuLnl5LEVzWzFdLHRlLE1lXS5jb25jYXQoWGkpKSx0eXBlb2YgcWE8InUiKXJldHVybiBxYTtQbyYmKHNlPXNlLnNsaWNlKDAsLTEqUG8qMiksdGU9dGUuc2xpY2UoMCwtMSpQbyksTWU9TWUuc2xpY2UoMCwtMSpQbykpLHNlLnB1c2godGhpcy5wcm9kdWN0aW9uc19bRXNbMV1dWzBdKSx0ZS5wdXNoKE1hLiQpLE1lLnB1c2goTWEuXyQpLHZzPWRlW3NlW3NlLmxlbmd0aC0yXV1bc2Vbc2UubGVuZ3RoLTFdXSxzZS5wdXNoKHZzKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sWWU9ZnVuY3Rpb24oKXt2YXIga2U9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24ocmUsc2Upe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IocmUsc2UpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHJlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oenQscmUpe3JldHVybiB0aGlzLnl5PXJlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD16dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgenQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXp0LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz16dCx0aGlzLm1hdGNoZWQrPXp0O3ZhciByZT16dC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIHJlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx6dH0sdW5wdXQ6ZnVuY3Rpb24oenQpe3ZhciByZT16dC5sZW5ndGgsc2U9enQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD16dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtcmUpLHRoaXMub2Zmc2V0LT1yZTt2YXIgUGU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksc2UubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1zZS5sZW5ndGgtMSk7dmFyIHRlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpzZT8oc2UubGVuZ3RoPT09UGUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStQZVtQZS5sZW5ndGgtc2UubGVuZ3RoXS5sZW5ndGgtc2VbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1yZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0ZVswXSx0ZVswXSt0aGlzLnl5bGVuZy1yZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKHp0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoenQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHp0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oenQubGVuZ3RoPjIwPyIuLi4iOiIiKSt6dC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB6dD10aGlzLm1hdGNoO3JldHVybiB6dC5sZW5ndGg8MjAmJih6dCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtenQubGVuZ3RoKSksKHp0LnN1YnN0cigwLDIwKSsoenQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB6dD10aGlzLnBhc3RJbnB1dCgpLHJlPW5ldyBBcnJheSh6dC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB6dCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArcmUrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHp0LHJlKXt2YXIgc2UsUGUsdGU7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHRlPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRlLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFBlPXp0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxQZSYmKHRoaXMueXlsaW5lbm8rPVBlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlBlP1BlW1BlLmxlbmd0aC0xXS5sZW5ndGgtUGVbUGUubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4renRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9enRbMF0sdGhpcy5tYXRjaCs9enRbMF0sdGhpcy5tYXRjaGVzPXp0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHp0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz16dFswXSxzZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxyZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxzZSlyZXR1cm4gc2U7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIE1lIGluIHRlKXRoaXNbTWVdPXRlW01lXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciB6dCxyZSxzZSxQZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciB0ZT10aGlzLl9jdXJyZW50UnVsZXMoKSxNZT0wO01lPHRlLmxlbmd0aDtNZSsrKWlmKHNlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbdGVbTWVdXSksc2UmJighcmV8fHNlWzBdLmxlbmd0aD5yZVswXS5sZW5ndGgpKXtpZihyZT1zZSxQZT1NZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZih6dD10aGlzLnRlc3RfbWF0Y2goc2UsdGVbTWVdKSx6dCE9PSExKXJldHVybiB6dDtpZih0aGlzLl9iYWNrdHJhY2spe3JlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIHJlPyh6dD10aGlzLnRlc3RfbWF0Y2gocmUsdGVbUGVdKSx6dCE9PSExP3p0OiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgcmU9dGhpcy5uZXh0KCk7cmV0dXJuIHJlfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihyZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHJlKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgcmU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gcmU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihyZSl7cmV0dXJuIHJlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMocmV8fDApLHJlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbcmVdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHJlKXt0aGlzLmJlZ2luKHJlKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihyZSxzZSxQZSx0ZSl7c3dpdGNoKFBlKXtjYXNlIDA6cmV0dXJuIDUyO2Nhc2UgMTpyZXR1cm4gNTM7Y2FzZSAyOnJldHVybiA1NDtjYXNlIDM6cmV0dXJuIDU1O2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzMDtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMyO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6cmV0dXJuIDg7Y2FzZSAxNDpicmVhaztjYXNlIDE1OnJldHVybiA3O2Nhc2UgMTY6cmV0dXJuIDc7Y2FzZSAxNzpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSAxODp0aGlzLmJlZ2luKCJjYWxsYmFja19uYW1lIik7YnJlYWs7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2tfYXJncyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIDY5O2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDcwO2Nhc2UgMjQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIlNUUiI7Y2FzZSAyNjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI3OnJldHVybiB0aGlzLmJlZ2luKCJuYW1lc3BhY2UiKSwzOTtjYXNlIDI4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksODtjYXNlIDI5OmJyZWFrO2Nhc2UgMzA6cmV0dXJuIHRoaXMuYmVnaW4oIm5hbWVzcGFjZS1ib2R5IiksMzY7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM4O2Nhc2UgMzI6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMzM6cmV0dXJuIDg7Y2FzZSAzNDpicmVhaztjYXNlIDM1OnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDM2OnJldHVybiB0aGlzLmJlZ2luKCJjbGFzcyIpLDQzO2Nhc2UgMzc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw4O2Nhc2UgMzg6YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwzODtjYXNlIDQwOnJldHVybiB0aGlzLmJlZ2luKCJjbGFzcy1ib2R5IiksMzY7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM4O2Nhc2UgNDI6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgNDM6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgNDQ6cmV0dXJuIk9QRU5fSU5fU1RSVUNUIjtjYXNlIDQ1OmJyZWFrO2Nhc2UgNDY6cmV0dXJuIk1FTUJFUiI7Y2FzZSA0NzpyZXR1cm4gNzI7Y2FzZSA0ODpyZXR1cm4gNjU7Y2FzZSA0OTpyZXR1cm4gNjY7Y2FzZSA1MDpyZXR1cm4gNjg7Y2FzZSA1MTpyZXR1cm4gNDk7Y2FzZSA1MjpyZXR1cm4gNTE7Y2FzZSA1MzpyZXR1cm4gNDQ7Y2FzZSA1NDpyZXR1cm4gNDU7Y2FzZSA1NTpyZXR1cm4gNzE7Y2FzZSA1Njp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1NzpyZXR1cm4iR0VORVJJQ1RZUEUiO2Nhc2UgNTg6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgNTk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIkJRVU9URV9TVFIiO2Nhc2UgNjE6dGhpcy5iZWdpbigiYnFzdHJpbmciKTticmVhaztjYXNlIDYyOnJldHVybiA2NztjYXNlIDYzOnJldHVybiA2NztjYXNlIDY0OnJldHVybiA2NztjYXNlIDY1OnJldHVybiA2NztjYXNlIDY2OnJldHVybiA1OTtjYXNlIDY3OnJldHVybiA1OTtjYXNlIDY4OnJldHVybiA2MTtjYXNlIDY5OnJldHVybiA2MTtjYXNlIDcwOnJldHVybiA2MDtjYXNlIDcxOnJldHVybiA1ODtjYXNlIDcyOnJldHVybiA2MjtjYXNlIDczOnJldHVybiA2MztjYXNlIDc0OnJldHVybiA2NDtjYXNlIDc1OnJldHVybiAyMTtjYXNlIDc2OnJldHVybiA0MTtjYXNlIDc3OnJldHVybiA4NDtjYXNlIDc4OnJldHVybiJET1QiO2Nhc2UgNzk6cmV0dXJuIlBMVVMiO2Nhc2UgODA6cmV0dXJuIDgxO2Nhc2UgODE6cmV0dXJuIkVRVUFMUyI7Y2FzZSA4MjpyZXR1cm4iRVFVQUxTIjtjYXNlIDgzOnJldHVybiA4ODtjYXNlIDg0OnJldHVybiAxMjtjYXNlIDg1OnJldHVybiAxNDtjYXNlIDg2OnJldHVybiJQVU5DVFVBVElPTiI7Y2FzZSA4NzpyZXR1cm4gODc7Y2FzZSA4ODpyZXR1cm4gODY7Y2FzZSA4OTpyZXR1cm4gODM7Y2FzZSA5MDpyZXR1cm4gOX19LHJ1bGVzOlsvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OmNsYXNzRGlhZ3JhbS12MlxiKS8sL14oPzpjbGFzc0RpYWdyYW1cYikvLC9eKD86XFtcKlxdKS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsiXSkvLC9eKD86bmFtZXNwYWNlXGIpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzokKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpcW1wqXF0pLywvXig/OmNsYXNzXGIpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/Olt9XSkvLC9eKD86W3tdKS8sL14oPzpbfV0pLywvXig/OiQpLywvXig/OlxbXCpcXSkvLC9eKD86W3tdKS8sL14oPzpbXG5dKS8sL14oPzpbXnt9XG5dKikvLC9eKD86Y3NzQ2xhc3NcYikvLC9eKD86Y2FsbGJhY2tcYikvLC9eKD86bGlua1xiKS8sL14oPzpjbGlja1xiKS8sL14oPzpub3RlIGZvclxiKS8sL14oPzpub3RlXGIpLywvXig/Ojw8KS8sL14oPzo+PikvLC9eKD86aHJlZlxiKS8sL14oPzpbfl0pLywvXig/Oltefl0qKS8sL14oPzp+KS8sL14oPzpbYF0pLywvXig/OlteYF0rKS8sL14oPzpbYF0pLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86XHMqPFx8KS8sL14oPzpccypcfD4pLywvXig/OlxzKj4pLywvXig/OlxzKjwpLywvXig/OlxzKlwqKS8sL14oPzpccypvXGIpLywvXig/OlxzKlwoXCkpLywvXig/Oi0tKS8sL14oPzpcLlwuKS8sL14oPzo6ezF9W146XG47XSspLywvXig/Ojp7M30pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpcKykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86XHcrKS8sL14oPzpcWykvLC9eKD86XF0pLywvXig/OlshIiMkJSYnKissLS5gP1xcL10pLywvXig/OlswLTldKykvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOnsibmFtZXNwYWNlLWJvZHkiOntydWxlczpbMjYsMzEsMzIsMzMsMzQsMzUsMzYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sbmFtZXNwYWNlOntydWxlczpbMjYsMjcsMjgsMjksMzAsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sImNsYXNzLWJvZHkiOntydWxlczpbMjYsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sY2xhc3M6e3J1bGVzOlsyNiwzNywzOCwzOSw0MCw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTEsMTIsMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbOSwyNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls3LDI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX2FyZ3M6e3J1bGVzOlsyMiwyMywyNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxjYWxsYmFja19uYW1lOntydWxlczpbMTksMjAsMjEsMjYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LGdlbmVyaWM6e3J1bGVzOlsyNiw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saW5jbHVzaXZlOiExfSxicXN0cmluZzp7cnVsZXM6WzI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI0LDI1LDI2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU4LDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMjYsMjcsMzYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTgsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4ga2V9KCk7VmUubGV4ZXI9WWU7ZnVuY3Rpb24gY2UoKXt0aGlzLnl5PXt9fXJldHVybiBjZS5wcm90b3R5cGU9VmUsVmUuUGFyc2VyPWNlLG5ldyBjZX0oKTtUZ3QucGFyc2VyPVRndDtjb25zdCB6UnQ9VGd0LHFSdD1bIiMiLCIrIiwifiIsIi0iLCIiXTtjbGFzcyBIUnR7Y29uc3RydWN0b3IoYSxmKXt0aGlzLm1lbWJlclR5cGU9Zix0aGlzLnZpc2liaWxpdHk9IiIsdGhpcy5jbGFzc2lmaWVyPSIiO2NvbnN0IHA9UTEoYSxPZSgpKTt0aGlzLnBhcnNlTWVtYmVyKHApfWdldERpc3BsYXlEZXRhaWxzKCl7bGV0IGE9dGhpcy52aXNpYmlsaXR5K1lQKHRoaXMuaWQpO3RoaXMubWVtYmVyVHlwZT09PSJtZXRob2QiJiYoYSs9YCgke1lQKHRoaXMucGFyYW1ldGVycy50cmltKCkpfSlgLHRoaXMucmV0dXJuVHlwZSYmKGErPSIgOiAiK1lQKHRoaXMucmV0dXJuVHlwZSkpKSxhPWEudHJpbSgpO2NvbnN0IGY9dGhpcy5wYXJzZUNsYXNzaWZpZXIoKTtyZXR1cm57ZGlzcGxheVRleHQ6YSxjc3NTdHlsZTpmfX1wYXJzZU1lbWJlcihhKXtsZXQgZj0iIjtpZih0aGlzLm1lbWJlclR5cGU9PT0ibWV0aG9kIil7Y29uc3QgcD0vKFsjK34tXSk/KC4rKVwoKC4qKVwpKFtccyQqXSk/KC4qKShbJCpdKT8vLHc9YS5tYXRjaChwKTtpZih3KXtjb25zdCBtPXdbMV0/d1sxXS50cmltKCk6IiI7aWYocVJ0LmluY2x1ZGVzKG0pJiYodGhpcy52aXNpYmlsaXR5PW0pLHRoaXMuaWQ9d1syXS50cmltKCksdGhpcy5wYXJhbWV0ZXJzPXdbM10/d1szXS50cmltKCk6IiIsZj13WzRdP3dbNF0udHJpbSgpOiIiLHRoaXMucmV0dXJuVHlwZT13WzVdP3dbNV0udHJpbSgpOiIiLGY9PT0iIil7Y29uc3QgYj10aGlzLnJldHVyblR5cGUuc3Vic3RyaW5nKHRoaXMucmV0dXJuVHlwZS5sZW5ndGgtMSk7Yi5tYXRjaCgvWyQqXS8pJiYoZj1iLHRoaXMucmV0dXJuVHlwZT10aGlzLnJldHVyblR5cGUuc3Vic3RyaW5nKDAsdGhpcy5yZXR1cm5UeXBlLmxlbmd0aC0xKSl9fX1lbHNle2NvbnN0IHA9YS5sZW5ndGgsdz1hLnN1YnN0cmluZygwLDEpLG09YS5zdWJzdHJpbmcocC0xKTtxUnQuaW5jbHVkZXModykmJih0aGlzLnZpc2liaWxpdHk9dyksbS5tYXRjaCgvWyo/XS8pJiYoZj1tKSx0aGlzLmlkPWEuc3Vic3RyaW5nKHRoaXMudmlzaWJpbGl0eT09PSIiPzA6MSxmPT09IiI/cDpwLTEpfXRoaXMuY2xhc3NpZmllcj1mfXBhcnNlQ2xhc3NpZmllcigpe3N3aXRjaCh0aGlzLmNsYXNzaWZpZXIpe2Nhc2UiKiI6cmV0dXJuImZvbnQtc3R5bGU6aXRhbGljOyI7Y2FzZSIkIjpyZXR1cm4idGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsiO2RlZmF1bHQ6cmV0dXJuIiJ9fX1jb25zdCAkWT0iY2xhc3NJZC0iO2xldCBDZ3Q9W10sSmw9e30selk9W10sVlJ0PTAseGs9e30sX2d0PTAsV0Y9W107Y29uc3QgQVQ9aT0+S3Iuc2FuaXRpemVUZXh0KGksT2UoKSksd0w9ZnVuY3Rpb24oaSl7Y29uc3QgYT1Lci5zYW5pdGl6ZVRleHQoaSxPZSgpKTtsZXQgZj0iIixwPWE7aWYoYS5pbmRleE9mKCJ+Iik+MCl7Y29uc3Qgdz1hLnNwbGl0KCJ+Iik7cD1BVCh3WzBdKSxmPUFUKHdbMV0pfXJldHVybntjbGFzc05hbWU6cCx0eXBlOmZ9fSxzR2U9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPUtyLnNhbml0aXplVGV4dChpLE9lKCkpO2EmJihhPUFUKGEpKTtjb25zdHtjbGFzc05hbWU6cH09d0woZik7SmxbcF0ubGFiZWw9YX0scVk9ZnVuY3Rpb24oaSl7Y29uc3QgYT1Lci5zYW5pdGl6ZVRleHQoaSxPZSgpKSx7Y2xhc3NOYW1lOmYsdHlwZTpwfT13TChhKTtpZihPYmplY3QuaGFzT3duKEpsLGYpKXJldHVybjtjb25zdCB3PUtyLnNhbml0aXplVGV4dChmLE9lKCkpO0psW3ddPXtpZDp3LHR5cGU6cCxsYWJlbDp3LGNzc0NsYXNzZXM6W10sbWV0aG9kczpbXSxtZW1iZXJzOltdLGFubm90YXRpb25zOltdLGRvbUlkOiRZK3crIi0iK1ZSdH0sVlJ0Kyt9LEdSdD1mdW5jdGlvbihpKXtjb25zdCBhPUtyLnNhbml0aXplVGV4dChpLE9lKCkpO2lmKGEgaW4gSmwpcmV0dXJuIEpsW2FdLmRvbUlkO3Rocm93IG5ldyBFcnJvcigiQ2xhc3Mgbm90IGZvdW5kOiAiK2EpfSxhR2U9ZnVuY3Rpb24oKXtDZ3Q9W10sSmw9e30selk9W10sV0Y9W10sV0YucHVzaChXUnQpLHhrPXt9LF9ndD0wLGhnKCl9LG9HZT1mdW5jdGlvbihpKXtyZXR1cm4gSmxbaV19LGNHZT1mdW5jdGlvbigpe3JldHVybiBKbH0sdUdlPWZ1bmN0aW9uKCl7cmV0dXJuIENndH0sbEdlPWZ1bmN0aW9uKCl7cmV0dXJuIHpZfSxoR2U9ZnVuY3Rpb24oaSl7VXQuZGVidWcoIkFkZGluZyByZWxhdGlvbjogIitKU09OLnN0cmluZ2lmeShpKSkscVkoaS5pZDEpLHFZKGkuaWQyKSxpLmlkMT13TChpLmlkMSkuY2xhc3NOYW1lLGkuaWQyPXdMKGkuaWQyKS5jbGFzc05hbWUsaS5yZWxhdGlvblRpdGxlMT1Lci5zYW5pdGl6ZVRleHQoaS5yZWxhdGlvblRpdGxlMS50cmltKCksT2UoKSksaS5yZWxhdGlvblRpdGxlMj1Lci5zYW5pdGl6ZVRleHQoaS5yZWxhdGlvblRpdGxlMi50cmltKCksT2UoKSksQ2d0LnB1c2goaSl9LGZHZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9d0woaSkuY2xhc3NOYW1lO0psW2ZdLmFubm90YXRpb25zLnB1c2goYSl9LFVSdD1mdW5jdGlvbihpLGEpe3FZKGkpO2NvbnN0IGY9d0woaSkuY2xhc3NOYW1lLHA9SmxbZl07aWYodHlwZW9mIGE9PSJzdHJpbmciKXtjb25zdCB3PWEudHJpbSgpO3cuc3RhcnRzV2l0aCgiPDwiKSYmdy5lbmRzV2l0aCgiPj4iKT9wLmFubm90YXRpb25zLnB1c2goQVQody5zdWJzdHJpbmcoMix3Lmxlbmd0aC0yKSkpOncuaW5kZXhPZigiKSIpPjA/cC5tZXRob2RzLnB1c2gobmV3IEhSdCh3LCJtZXRob2QiKSk6dyYmcC5tZW1iZXJzLnB1c2gobmV3IEhSdCh3LCJhdHRyaWJ1dGUiKSl9fSxkR2U9ZnVuY3Rpb24oaSxhKXtBcnJheS5pc0FycmF5KGEpJiYoYS5yZXZlcnNlKCksYS5mb3JFYWNoKGY9PlVSdChpLGYpKSl9LGdHZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9e2lkOmBub3RlJHt6WS5sZW5ndGh9YCxjbGFzczphLHRleHQ6aX07elkucHVzaChmKX0scEdlPWZ1bmN0aW9uKGkpe3JldHVybiBpLnN0YXJ0c1dpdGgoIjoiKSYmKGk9aS5zdWJzdHJpbmcoMSkpLEFUKGkudHJpbSgpKX0sU2d0PWZ1bmN0aW9uKGksYSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZil7bGV0IHA9ZjtmWzBdLm1hdGNoKC9cZC8pJiYocD0kWStwKSxKbFtwXSE9PXZvaWQgMCYmSmxbcF0uY3NzQ2xhc3Nlcy5wdXNoKGEpfSl9LGJHZT1mdW5jdGlvbihpLGEpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2EhPT12b2lkIDAmJihKbFtmXS50b29sdGlwPUFUKGEpKX0pfSx3R2U9ZnVuY3Rpb24oaSxhKXtyZXR1cm4gYT94a1thXS5jbGFzc2VzW2ldLnRvb2x0aXA6SmxbaV0udG9vbHRpcH0sdkdlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPU9lKCk7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odyl7bGV0IG09dzt3WzBdLm1hdGNoKC9cZC8pJiYobT0kWSttKSxKbFttXSE9PXZvaWQgMCYmKEpsW21dLmxpbms9JGEuZm9ybWF0VXJsKGEscCkscC5zZWN1cml0eUxldmVsPT09InNhbmRib3giP0psW21dLmxpbmtUYXJnZXQ9Il90b3AiOnR5cGVvZiBmPT0ic3RyaW5nIj9KbFttXS5saW5rVGFyZ2V0PUFUKGYpOkpsW21dLmxpbmtUYXJnZXQ9Il9ibGFuayIpfSksU2d0KGksImNsaWNrYWJsZSIpfSxtR2U9ZnVuY3Rpb24oaSxhLGYpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHApe3lHZShwLGEsZiksSmxbcF0uaGF2ZUNhbGxiYWNrPSEwfSksU2d0KGksImNsaWNrYWJsZSIpfSx5R2U9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9S3Iuc2FuaXRpemVUZXh0KGksT2UoKSk7aWYoT2UoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8YT09PXZvaWQgMClyZXR1cm47Y29uc3QgbT1wO2lmKEpsW21dIT09dm9pZCAwKXtjb25zdCBiPUdSdChtKTtsZXQgRT1bXTtpZih0eXBlb2YgZj09InN0cmluZyIpe0U9Zi5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IobGV0IF89MDtfPEUubGVuZ3RoO18rKyl7bGV0IEE9RVtfXS50cmltKCk7QS5jaGFyQXQoMCk9PT0nIicmJkEuY2hhckF0KEEubGVuZ3RoLTEpPT09JyInJiYoQT1BLnN1YnN0cigxLEEubGVuZ3RoLTIpKSxFW19dPUF9fUUubGVuZ3RoPT09MCYmRS5wdXNoKGIpLFdGLnB1c2goZnVuY3Rpb24oKXtjb25zdCBfPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtifSJdYCk7XyE9PW51bGwmJl8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7JGEucnVuRnVuYyhhLC4uLkUpfSwhMSl9KX19LHhHZT1mdW5jdGlvbihpKXtXRi5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EoaSl9KX0sa0dlPXtMSU5FOjAsRE9UVEVEX0xJTkU6MX0sRUdlPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozLExPTExJUE9QOjR9LFdSdD1mdW5jdGlvbihpKXtsZXQgYT15cigiLm1lcm1haWRUb29sdGlwIik7KGEuX2dyb3Vwc3x8YSlbMF1bMF09PT1udWxsJiYoYT15cigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSkseXIoaSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7Y29uc3Qgdz15cih0aGlzKTtpZih3LmF0dHIoInRpdGxlIik9PT1udWxsKXJldHVybjtjb25zdCBiPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksYS50ZXh0KHcuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK2IubGVmdCsoYi5yaWdodC1iLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrYi50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksYS5odG1sKGEuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSx3LmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCkseXIodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pfTtXRi5wdXNoKFdSdCk7bGV0IFlSdD0iVEIiO2NvbnN0IEhZPXtzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxnZXRDb25maWc6KCk9Pk9lKCkuY2xhc3MsYWRkQ2xhc3M6cVksYmluZEZ1bmN0aW9uczp4R2UsY2xlYXI6YUdlLGdldENsYXNzOm9HZSxnZXRDbGFzc2VzOmNHZSxnZXROb3RlczpsR2UsYWRkQW5ub3RhdGlvbjpmR2UsYWRkTm90ZTpnR2UsZ2V0UmVsYXRpb25zOnVHZSxhZGRSZWxhdGlvbjpoR2UsZ2V0RGlyZWN0aW9uOigpPT5ZUnQsc2V0RGlyZWN0aW9uOmk9PntZUnQ9aX0sYWRkTWVtYmVyOlVSdCxhZGRNZW1iZXJzOmRHZSxjbGVhbnVwTGFiZWw6cEdlLGxpbmVUeXBlOmtHZSxyZWxhdGlvblR5cGU6RUdlLHNldENsaWNrRXZlbnQ6bUdlLHNldENzc0NsYXNzOlNndCxzZXRMaW5rOnZHZSxnZXRUb29sdGlwOndHZSxzZXRUb29sdGlwOmJHZSxsb29rVXBEb21JZDpHUnQsc2V0RGlhZ3JhbVRpdGxlOk5iLGdldERpYWdyYW1UaXRsZTpwZyxzZXRDbGFzc0xhYmVsOnNHZSxhZGROYW1lc3BhY2U6ZnVuY3Rpb24oaSl7eGtbaV09PT12b2lkIDAmJih4a1tpXT17aWQ6aSxjbGFzc2VzOnt9LGNoaWxkcmVuOnt9LGRvbUlkOiRZK2krIi0iK19ndH0sX2d0KyspfSxhZGRDbGFzc2VzVG9OYW1lc3BhY2U6ZnVuY3Rpb24oaSxhKXt4a1tpXSE9PXZvaWQgMCYmYS5tYXAoZj0+e0psW2ZdLnBhcmVudD1pLHhrW2ldLmNsYXNzZXNbZl09SmxbZl19KX0sZ2V0TmFtZXNwYWNlOmZ1bmN0aW9uKGkpe3JldHVybiB4a1tpXX0sZ2V0TmFtZXNwYWNlczpmdW5jdGlvbigpe3JldHVybiB4a319LEtSdD1pPT5gZy5jbGFzc0dyb3VwIHRleHQgewogIGZpbGw6ICR7aS5ub2RlQm9yZGVyfHxpLmNsYXNzVGV4dH07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgZm9udC1zaXplOiAxMHB4OwoKICAudGl0bGUgewogICAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICB9Cgp9Cgoubm9kZUxhYmVsLCAuZWRnZUxhYmVsIHsKICBjb2xvcjogJHtpLmNsYXNzVGV4dH07Cn0KLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9Owp9Ci5sYWJlbCB0ZXh0IHsKICBmaWxsOiAke2kuY2xhc3NUZXh0fTsKfQouZWRnZUxhYmVsIC5sYWJlbCBzcGFuIHsKICBiYWNrZ3JvdW5kOiAke2kubWFpbkJrZ307Cn0KCi5jbGFzc1RpdGxlIHsKICBmb250LXdlaWdodDogYm9sZGVyOwp9Ci5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKCi5kaXZpZGVyIHsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCmcuY2xpY2thYmxlIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCmcuY2xhc3NHcm91cCByZWN0IHsKICBmaWxsOiAke2kubWFpbkJrZ307CiAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07Cn0KCmcuY2xhc3NHcm91cCBsaW5lIHsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5jbGFzc0xhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmNsYXNzTGFiZWwgLmxhYmVsIHsKICBmaWxsOiAke2kubm9kZUJvcmRlcn07CiAgZm9udC1zaXplOiAxMHB4Owp9CgoucmVsYXRpb24gewogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwogIGZpbGw6IG5vbmU7Cn0KCi5kYXNoZWQtbGluZXsKICBzdHJva2UtZGFzaGFycmF5OiAzOwp9CgouZG90dGVkLWxpbmV7CiAgc3Ryb2tlLWRhc2hhcnJheTogMSAyOwp9CgojY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2FnZ3JlZ2F0aW9uRW5kLCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wU3RhcnQsIC5sb2xsaXBvcCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wRW5kLCAubG9sbGlwb3AgewogIGZpbGw6ICR7aS5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5lZGdlVGVybWluYWxzIHsKICBmb250LXNpemU6IDExcHg7Cn0KCi5jbGFzc1RpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07Cn0KYDtsZXQgWFJ0PTA7Y29uc3QgVEdlPWZ1bmN0aW9uKGksYSxmLHAsdyl7Y29uc3QgbT1mdW5jdGlvbihhdCl7c3dpdGNoKGF0KXtjYXNlIHcuZGIucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSB3LmRiLnJlbGF0aW9uVHlwZS5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSB3LmRiLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2Ugdy5kYi5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSI7Y2FzZSB3LmRiLnJlbGF0aW9uVHlwZS5MT0xMSVBPUDpyZXR1cm4ibG9sbGlwb3AifX07YS5wb2ludHM9YS5wb2ludHMuZmlsdGVyKGF0PT4hTnVtYmVyLmlzTmFOKGF0LnkpKTtjb25zdCBiPWEucG9pbnRzLEU9RTUoKS54KGZ1bmN0aW9uKGF0KXtyZXR1cm4gYXQueH0pLnkoZnVuY3Rpb24oYXQpe3JldHVybiBhdC55fSkuY3VydmUoSFApLF89aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixFKGIpKS5hdHRyKCJpZCIsImVkZ2UiK1hSdCkuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiIpO2xldCBBPSIiO3AuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKEE9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsQT1BLnJlcGxhY2UoL1woL2csIlxcKCIpLEE9QS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZi5yZWxhdGlvbi5saW5lVHlwZT09MSYmXy5hdHRyKCJjbGFzcyIsInJlbGF0aW9uIGRhc2hlZC1saW5lIiksZi5yZWxhdGlvbi5saW5lVHlwZT09MTAmJl8uYXR0cigiY2xhc3MiLCJyZWxhdGlvbiBkb3R0ZWQtbGluZSIpLGYucmVsYXRpb24udHlwZTEhPT0ibm9uZSImJl8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrQSsiIyIrbShmLnJlbGF0aW9uLnR5cGUxKSsiU3RhcnQpIiksZi5yZWxhdGlvbi50eXBlMiE9PSJub25lIiYmXy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrQSsiIyIrbShmLnJlbGF0aW9uLnR5cGUyKSsiRW5kKSIpO2xldCBJLEI7Y29uc3QgTj1hLnBvaW50cy5sZW5ndGg7bGV0IFI9JGEuY2FsY0xhYmVsUG9zaXRpb24oYS5wb2ludHMpO0k9Ui54LEI9Ui55O2xldCB6LFcsZXQsc3Q7aWYoTiUyIT09MCYmTj4xKXtsZXQgYXQ9JGEuY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24oZi5yZWxhdGlvbi50eXBlMSE9PSJub25lIixhLnBvaW50cyxhLnBvaW50c1swXSksYnQ9JGEuY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24oZi5yZWxhdGlvbi50eXBlMiE9PSJub25lIixhLnBvaW50cyxhLnBvaW50c1tOLTFdKTtVdC5kZWJ1ZygiY2FyZGluYWxpdHlfMV9wb2ludCAiK0pTT04uc3RyaW5naWZ5KGF0KSksVXQuZGVidWcoImNhcmRpbmFsaXR5XzJfcG9pbnQgIitKU09OLnN0cmluZ2lmeShidCkpLHo9YXQueCxXPWF0LnksZXQ9YnQueCxzdD1idC55fWlmKGYudGl0bGUhPT12b2lkIDApe2NvbnN0IGF0PWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjbGFzc0xhYmVsIiksYnQ9YXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoIngiLEkpLmF0dHIoInkiLEIpLmF0dHIoImZpbGwiLCJyZWQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoZi50aXRsZSk7d2luZG93LmxhYmVsPWJ0O2NvbnN0IG10PWJ0Lm5vZGUoKS5nZXRCQm94KCk7YXQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4IixtdC54LXAucGFkZGluZy8yKS5hdHRyKCJ5IixtdC55LXAucGFkZGluZy8yKS5hdHRyKCJ3aWR0aCIsbXQud2lkdGgrcC5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLG10LmhlaWdodCtwLnBhZGRpbmcpfVV0LmluZm8oIlJlbmRlcmluZyByZWxhdGlvbiAiK0pTT04uc3RyaW5naWZ5KGYpKSxmLnJlbGF0aW9uVGl0bGUxIT09dm9pZCAwJiZmLnJlbGF0aW9uVGl0bGUxIT09Im5vbmUiJiZpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2FyZGluYWxpdHkiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInR5cGUxIikuYXR0cigieCIseikuYXR0cigieSIsVykuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQoZi5yZWxhdGlvblRpdGxlMSksZi5yZWxhdGlvblRpdGxlMiE9PXZvaWQgMCYmZi5yZWxhdGlvblRpdGxlMiE9PSJub25lIiYmaS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMiIpLmF0dHIoIngiLGV0KS5hdHRyKCJ5IixzdCkuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQoZi5yZWxhdGlvblRpdGxlMiksWFJ0Kyt9LENHZT1mdW5jdGlvbihpLGEsZixwKXtVdC5kZWJ1ZygiUmVuZGVyaW5nIGNsYXNzICIsYSxmKTtjb25zdCB3PWEuaWQsbT17aWQ6dyxsYWJlbDphLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LGI9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIscC5kYi5sb29rVXBEb21JZCh3KSkuYXR0cigiY2xhc3MiLCJjbGFzc0dyb3VwIik7bGV0IEU7YS5saW5rP0U9Yi5hcHBlbmQoInN2ZzphIikuYXR0cigieGxpbms6aHJlZiIsYS5saW5rKS5hdHRyKCJ0YXJnZXQiLGEubGlua1RhcmdldCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsZi50ZXh0SGVpZ2h0K2YucGFkZGluZykuYXR0cigieCIsMCk6RT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLGYudGV4dEhlaWdodCtmLnBhZGRpbmcpLmF0dHIoIngiLDApO2xldCBfPSEwO2EuYW5ub3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihidCl7Y29uc3QgbXQ9RS5hcHBlbmQoInRzcGFuIikudGV4dCgiwqsiK2J0KyLCuyIpO198fG10LmF0dHIoImR5IixmLnRleHRIZWlnaHQpLF89ITF9KTtsZXQgQT1RUnQoYSk7Y29uc3QgST1FLmFwcGVuZCgidHNwYW4iKS50ZXh0KEEpLmF0dHIoImNsYXNzIiwidGl0bGUiKTtffHxJLmF0dHIoImR5IixmLnRleHRIZWlnaHQpO2NvbnN0IEI9RS5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodDtsZXQgTixSLHo7aWYoYS5tZW1iZXJzLmxlbmd0aD4wKXtOPWIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIixmLnBhZGRpbmcrQitmLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLGYucGFkZGluZytCK2YuZGl2aWRlck1hcmdpbi8yKTtjb25zdCBidD1iLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGYucGFkZGluZykuYXR0cigieSIsQitmLmRpdmlkZXJNYXJnaW4rZi50ZXh0SGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjbGFzcyIsImNsYXNzVGV4dCIpO189ITAsYS5tZW1iZXJzLmZvckVhY2goZnVuY3Rpb24obXQpe1pSdChidCxtdCxfLGYpLF89ITF9KSxSPWJ0Lm5vZGUoKS5nZXRCQm94KCl9aWYoYS5tZXRob2RzLmxlbmd0aD4wKXt6PWIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIixmLnBhZGRpbmcrQitmLmRpdmlkZXJNYXJnaW4rUi5oZWlnaHQpLmF0dHIoInkyIixmLnBhZGRpbmcrQitmLmRpdmlkZXJNYXJnaW4rUi5oZWlnaHQpO2NvbnN0IGJ0PWIuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsZi5wYWRkaW5nKS5hdHRyKCJ5IixCKzIqZi5kaXZpZGVyTWFyZ2luK1IuaGVpZ2h0K2YudGV4dEhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY2xhc3MiLCJjbGFzc1RleHQiKTtfPSEwLGEubWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uKG10KXtaUnQoYnQsbXQsXyxmKSxfPSExfSl9Y29uc3QgVz1iLm5vZGUoKS5nZXRCQm94KCk7dmFyIGV0PSIgIjthLmNzc0NsYXNzZXMubGVuZ3RoPjAmJihldD1ldCthLmNzc0NsYXNzZXMuam9pbigiICIpKTtjb25zdCBhdD1iLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixXLndpZHRoKzIqZi5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLFcuaGVpZ2h0K2YucGFkZGluZysuNSpmLmRpdmlkZXJNYXJnaW4pLmF0dHIoImNsYXNzIixldCkubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4gRS5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGJ0KXtidC5zZXRBdHRyaWJ1dGUoIngiLChhdC1idC5nZXRCQm94KCkud2lkdGgpLzIpfSksYS50b29sdGlwJiZFLmluc2VydCgidGl0bGUiKS50ZXh0KGEudG9vbHRpcCksTiYmTi5hdHRyKCJ4MiIsYXQpLHomJnouYXR0cigieDIiLGF0KSxtLndpZHRoPWF0LG0uaGVpZ2h0PVcuaGVpZ2h0K2YucGFkZGluZysuNSpmLmRpdmlkZXJNYXJnaW4sbX0sUVJ0PWZ1bmN0aW9uKGkpe2xldCBhPWkuaWQ7cmV0dXJuIGkudHlwZSYmKGErPSI8IitZUChpLnR5cGUpKyI+IiksYX0sX0dlPWZ1bmN0aW9uKGksYSxmLHApe1V0LmRlYnVnKCJSZW5kZXJpbmcgbm90ZSAiLGEsZik7Y29uc3Qgdz1hLmlkLG09e2lkOncsdGV4dDphLnRleHQsd2lkdGg6MCxoZWlnaHQ6MH0sYj1pLmFwcGVuZCgiZyIpLmF0dHIoImlkIix3KS5hdHRyKCJjbGFzcyIsImNsYXNzR3JvdXAiKTtsZXQgRT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLGYudGV4dEhlaWdodCtmLnBhZGRpbmcpLmF0dHIoIngiLDApO2NvbnN0IF89SlNPTi5wYXJzZShgIiR7YS50ZXh0fSJgKS5zcGxpdChgCmApO18uZm9yRWFjaChmdW5jdGlvbihOKXtVdC5kZWJ1ZyhgQWRkaW5nIGxpbmU6ICR7Tn1gKSxFLmFwcGVuZCgidHNwYW4iKS50ZXh0KE4pLmF0dHIoImNsYXNzIiwidGl0bGUiKS5hdHRyKCJkeSIsZi50ZXh0SGVpZ2h0KX0pO2NvbnN0IEE9Yi5ub2RlKCkuZ2V0QkJveCgpLEI9Yi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsQS53aWR0aCsyKmYucGFkZGluZykuYXR0cigiaGVpZ2h0IixBLmhlaWdodCtfLmxlbmd0aCpmLnRleHRIZWlnaHQrZi5wYWRkaW5nKy41KmYuZGl2aWRlck1hcmdpbikubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4gRS5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKE4pe04uc2V0QXR0cmlidXRlKCJ4IiwoQi1OLmdldEJCb3goKS53aWR0aCkvMil9KSxtLndpZHRoPUIsbS5oZWlnaHQ9QS5oZWlnaHQrXy5sZW5ndGgqZi50ZXh0SGVpZ2h0K2YucGFkZGluZysuNSpmLmRpdmlkZXJNYXJnaW4sbX0sWlJ0PWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0e2Rpc3BsYXlUZXh0OncsY3NzU3R5bGU6bX09YS5nZXREaXNwbGF5RGV0YWlscygpLGI9aS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIscC5wYWRkaW5nKS50ZXh0KHcpO20hPT0iIiYmYi5hdHRyKCJzdHlsZSIsYS5jc3NTdHlsZSksZnx8Yi5hdHRyKCJkeSIscC50ZXh0SGVpZ2h0KX0sQWd0PXtnZXRDbGFzc1RpdGxlU3RyaW5nOlFSdCxkcmF3Q2xhc3M6Q0dlLGRyYXdFZGdlOlRHZSxkcmF3Tm90ZTpfR2V9O2xldCBWWT17fTtjb25zdCBHWT0yMCxZRj1mdW5jdGlvbihpKXtjb25zdCBhPU9iamVjdC5lbnRyaWVzKFZZKS5maW5kKGY9PmZbMV0ubGFiZWw9PT1pKTtpZihhKXJldHVybiBhWzBdfSxTR2U9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxBR2U9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjp6UnQsZGI6SFkscmVuZGVyZXI6e2RyYXc6ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdz1PZSgpLmNsYXNzO1ZZPXt9LFV0LmluZm8oIlJlbmRlcmluZyBkaWFncmFtICIraSk7Y29uc3QgbT1PZSgpLnNlY3VyaXR5TGV2ZWw7bGV0IGI7bT09PSJzYW5kYm94IiYmKGI9eXIoIiNpIithKSk7Y29uc3QgRT15cihtPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLF89RS5zZWxlY3QoYFtpZD0nJHthfSddYCk7U0dlKF8pO2NvbnN0IEE9bmV3IGMxKHttdWx0aWdyYXBoOiEwfSk7QS5zZXRHcmFwaCh7aXNNdWx0aUdyYXBoOiEwfSksQS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KTtjb25zdCBJPXAuZGIuZ2V0Q2xhc3NlcygpLEI9T2JqZWN0LmtleXMoSSk7Zm9yKGNvbnN0IGF0IG9mIEIpe2NvbnN0IGJ0PUlbYXRdLG10PUFndC5kcmF3Q2xhc3MoXyxidCx3LHApO1ZZW210LmlkXT1tdCxBLnNldE5vZGUobXQuaWQsbXQpLFV0LmluZm8oIk9yZyBoZWlnaHQ6ICIrbXQuaGVpZ2h0KX1wLmRiLmdldFJlbGF0aW9ucygpLmZvckVhY2goZnVuY3Rpb24oYXQpe1V0LmluZm8oInRqb2hvIitZRihhdC5pZDEpK1lGKGF0LmlkMikrSlNPTi5zdHJpbmdpZnkoYXQpKSxBLnNldEVkZ2UoWUYoYXQuaWQxKSxZRihhdC5pZDIpLHtyZWxhdGlvbjphdH0sYXQudGl0bGV8fCJERUZBVUxUIil9KSxwLmRiLmdldE5vdGVzKCkuZm9yRWFjaChmdW5jdGlvbihhdCl7VXQuZGVidWcoYEFkZGluZyBub3RlOiAke0pTT04uc3RyaW5naWZ5KGF0KX1gKTtjb25zdCBidD1BZ3QuZHJhd05vdGUoXyxhdCx3LHApO1ZZW2J0LmlkXT1idCxBLnNldE5vZGUoYnQuaWQsYnQpLGF0LmNsYXNzJiZhdC5jbGFzcyBpbiBJJiZBLnNldEVkZ2UoYXQuaWQsWUYoYXQuY2xhc3MpLHtyZWxhdGlvbjp7aWQxOmF0LmlkLGlkMjphdC5jbGFzcyxyZWxhdGlvbjp7dHlwZTE6Im5vbmUiLHR5cGUyOiJub25lIixsaW5lVHlwZToxMH19fSwiREVGQVVMVCIpfSksYUwoQSksQS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYXQpe2F0IT09dm9pZCAwJiZBLm5vZGUoYXQpIT09dm9pZCAwJiYoVXQuZGVidWcoIk5vZGUgIithdCsiOiAiK0pTT04uc3RyaW5naWZ5KEEubm9kZShhdCkpKSxFLnNlbGVjdCgiIyIrKHAuZGIubG9va1VwRG9tSWQoYXQpfHxhdCkpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhBLm5vZGUoYXQpLngtQS5ub2RlKGF0KS53aWR0aC8yKSsiLCIrKEEubm9kZShhdCkueS1BLm5vZGUoYXQpLmhlaWdodC8yKSsiICkiKSl9KSxBLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihhdCl7YXQhPT12b2lkIDAmJkEuZWRnZShhdCkhPT12b2lkIDAmJihVdC5kZWJ1ZygiRWRnZSAiK2F0LnYrIiAtPiAiK2F0LncrIjogIitKU09OLnN0cmluZ2lmeShBLmVkZ2UoYXQpKSksQWd0LmRyYXdFZGdlKF8sQS5lZGdlKGF0KSxBLmVkZ2UoYXQpLnJlbGF0aW9uLHcscCkpfSk7Y29uc3Qgej1fLm5vZGUoKS5nZXRCQm94KCksVz16LndpZHRoK0dZKjIsZXQ9ei5oZWlnaHQrR1kqMjtrMChfLGV0LFcsdy51c2VNYXhXaWR0aCk7Y29uc3Qgc3Q9YCR7ei54LUdZfSAke3oueS1HWX0gJHtXfSAke2V0fWA7VXQuZGVidWcoYHZpZXdCb3ggJHtzdH1gKSxfLmF0dHIoInZpZXdCb3giLHN0KX19LHN0eWxlczpLUnQsaW5pdDppPT57aS5jbGFzc3x8KGkuY2xhc3M9e30pLGkuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsSFkuY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLExndD1pPT5Lci5zYW5pdGl6ZVRleHQoaSxPZSgpKTtsZXQgTWd0PXtkaXZpZGVyTWFyZ2luOjEwLHBhZGRpbmc6NSx0ZXh0SGVpZ2h0OjEwLGN1cnZlOnZvaWQgMH07Y29uc3QgTEdlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHc9T2JqZWN0LmtleXMoaSk7VXQuaW5mbygia2V5czoiLHcpLFV0LmluZm8oaSksdy5mb3JFYWNoKGZ1bmN0aW9uKG0pe3ZhciBBLEk7Y29uc3QgYj1pW21dLF89e3NoYXBlOiJyZWN0IixpZDpiLmlkLGRvbUlkOmIuZG9tSWQsbGFiZWxUZXh0OkxndChiLmlkKSxsYWJlbFN0eWxlOiIiLHN0eWxlOiJmaWxsOiBub25lOyBzdHJva2U6IGJsYWNrIixwYWRkaW5nOigoQT1PZSgpLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOkEucGFkZGluZyk/PygoST1PZSgpLmNsYXNzKT09bnVsbD92b2lkIDA6SS5wYWRkaW5nKX07YS5zZXROb2RlKGIuaWQsXyksSlJ0KGIuY2xhc3NlcyxhLGYscCxiLmlkKSxVdC5pbmZvKCJzZXROb2RlIixfKX0pfSxKUnQ9ZnVuY3Rpb24oaSxhLGYscCx3KXtjb25zdCBtPU9iamVjdC5rZXlzKGkpO1V0LmluZm8oImtleXM6IixtKSxVdC5pbmZvKGkpLG0uZmlsdGVyKGI9PmlbYl0ucGFyZW50PT13KS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciB6LFc7Y29uc3QgRT1pW2JdLF89RS5jc3NDbGFzc2VzLmpvaW4oIiAiKSxBPXtsYWJlbFN0eWxlOiIiLHN0eWxlOiIifSxJPUUubGFiZWw/P0UuaWQsQj0wLE49ImNsYXNzX2JveCIsUj17bGFiZWxTdHlsZTpBLmxhYmVsU3R5bGUsc2hhcGU6TixsYWJlbFRleHQ6TGd0KEkpLGNsYXNzRGF0YTpFLHJ4OkIscnk6QixjbGFzczpfLHN0eWxlOkEuc3R5bGUsaWQ6RS5pZCxkb21JZDpFLmRvbUlkLHRvb2x0aXA6cC5kYi5nZXRUb29sdGlwKEUuaWQsdyl8fCIiLGhhdmVDYWxsYmFjazpFLmhhdmVDYWxsYmFjayxsaW5rOkUubGluayx3aWR0aDpFLnR5cGU9PT0iZ3JvdXAiPzUwMDp2b2lkIDAsdHlwZTpFLnR5cGUscGFkZGluZzooKHo9T2UoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDp6LnBhZGRpbmcpPz8oKFc9T2UoKS5jbGFzcyk9PW51bGw/dm9pZCAwOlcucGFkZGluZyl9O2Euc2V0Tm9kZShFLmlkLFIpLHcmJmEuc2V0UGFyZW50KEUuaWQsdyksVXQuaW5mbygic2V0Tm9kZSIsUil9KX0sTUdlPWZ1bmN0aW9uKGksYSxmLHApe1V0LmluZm8oaSksaS5mb3JFYWNoKGZ1bmN0aW9uKHcsbSl7dmFyIFcsZXQ7Y29uc3QgYj13LEU9IiIsXz17bGFiZWxTdHlsZToiIixzdHlsZToiIn0sQT1iLnRleHQsST0wLEI9Im5vdGUiLE49e2xhYmVsU3R5bGU6Xy5sYWJlbFN0eWxlLHNoYXBlOkIsbGFiZWxUZXh0OkxndChBKSxub3RlRGF0YTpiLHJ4Okkscnk6SSxjbGFzczpFLHN0eWxlOl8uc3R5bGUsaWQ6Yi5pZCxkb21JZDpiLmlkLHRvb2x0aXA6IiIsdHlwZToibm90ZSIscGFkZGluZzooKFc9T2UoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpXLnBhZGRpbmcpPz8oKGV0PU9lKCkuY2xhc3MpPT1udWxsP3ZvaWQgMDpldC5wYWRkaW5nKX07aWYoYS5zZXROb2RlKGIuaWQsTiksVXQuaW5mbygic2V0Tm9kZSIsTiksIWIuY2xhc3N8fCEoYi5jbGFzcyBpbiBwKSlyZXR1cm47Y29uc3QgUj1mK20sej17aWQ6YGVkZ2VOb3RlJHtSfWAsY2xhc3NlczoicmVsYXRpb24iLHBhdHRlcm46ImRvdHRlZCIsYXJyb3doZWFkOiJub25lIixzdGFydExhYmVsUmlnaHQ6IiIsZW5kTGFiZWxMZWZ0OiIiLGFycm93VHlwZVN0YXJ0OiJub25lIixhcnJvd1R5cGVFbmQ6Im5vbmUiLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY3VydmU6ZXcoTWd0LmN1cnZlLGNnKX07YS5zZXRFZGdlKGIuaWQsYi5jbGFzcyx6LFIpfSl9LERHZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9T2UoKS5mbG93Y2hhcnQ7bGV0IHA9MDtpLmZvckVhY2goZnVuY3Rpb24odyl7dmFyIGI7cCsrO2NvbnN0IG09e2NsYXNzZXM6InJlbGF0aW9uIixwYXR0ZXJuOncucmVsYXRpb24ubGluZVR5cGU9PTE/ImRhc2hlZCI6InNvbGlkIixpZDoiaWQiK3AsYXJyb3doZWFkOncudHlwZT09PSJhcnJvd19vcGVuIj8ibm9uZSI6Im5vcm1hbCIsc3RhcnRMYWJlbFJpZ2h0OncucmVsYXRpb25UaXRsZTE9PT0ibm9uZSI/IiI6dy5yZWxhdGlvblRpdGxlMSxlbmRMYWJlbExlZnQ6dy5yZWxhdGlvblRpdGxlMj09PSJub25lIj8iIjp3LnJlbGF0aW9uVGl0bGUyLGFycm93VHlwZVN0YXJ0OnRqdCh3LnJlbGF0aW9uLnR5cGUxKSxhcnJvd1R5cGVFbmQ6dGp0KHcucmVsYXRpb24udHlwZTIpLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY3VydmU6ZXcoZj09bnVsbD92b2lkIDA6Zi5jdXJ2ZSxjZyl9O2lmKFV0LmluZm8obSx3KSx3LnN0eWxlIT09dm9pZCAwKXtjb25zdCBFPWltKHcuc3R5bGUpO20uc3R5bGU9RS5zdHlsZSxtLmxhYmVsU3R5bGU9RS5sYWJlbFN0eWxlfXcudGV4dD13LnRpdGxlLHcudGV4dD09PXZvaWQgMD93LnN0eWxlIT09dm9pZCAwJiYobS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihtLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixtLmxhYmVscG9zPSJjIiwoKGI9T2UoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpiLmh0bWxMYWJlbHMpPz9PZSgpLmh0bWxMYWJlbHM/KG0ubGFiZWxUeXBlPSJodG1sIixtLmxhYmVsPSc8c3BhbiBjbGFzcz0iZWRnZUxhYmVsIj4nK3cudGV4dCsiPC9zcGFuPiIpOihtLmxhYmVsVHlwZT0idGV4dCIsbS5sYWJlbD13LnRleHQucmVwbGFjZShLci5saW5lQnJlYWtSZWdleCxgCmApLHcuc3R5bGU9PT12b2lkIDAmJihtLnN0eWxlPW0uc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksbS5sYWJlbFN0eWxlPW0ubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksYS5zZXRFZGdlKHcuaWQxLHcuaWQyLG0scCl9KX0sSUdlPWZ1bmN0aW9uKGkpe01ndD17Li4uTWd0LC4uLml9fSxPR2U9YXN5bmMgZnVuY3Rpb24oaSxhLGYscCl7VXQuaW5mbygiRHJhd2luZyBjbGFzcyAtICIsYSk7Y29uc3Qgdz1PZSgpLmZsb3djaGFydD8/T2UoKS5jbGFzcyxtPU9lKCkuc2VjdXJpdHlMZXZlbDtVdC5pbmZvKCJjb25maWc6Iix3KTtjb25zdCBiPSh3PT1udWxsP3ZvaWQgMDp3Lm5vZGVTcGFjaW5nKT8/NTAsRT0odz09bnVsbD92b2lkIDA6dy5yYW5rU3BhY2luZyk/PzUwLF89bmV3IGMxKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cC5kYi5nZXREaXJlY3Rpb24oKSxub2Rlc2VwOmIscmFua3NlcDpFLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxBPXAuZGIuZ2V0TmFtZXNwYWNlcygpLEk9cC5kYi5nZXRDbGFzc2VzKCksQj1wLmRiLmdldFJlbGF0aW9ucygpLE49cC5kYi5nZXROb3RlcygpO1V0LmluZm8oQiksTEdlKEEsXyxhLHApLEpSdChJLF8sYSxwKSxER2UoQixfKSxNR2UoTixfLEIubGVuZ3RoKzEsSSk7bGV0IFI7bT09PSJzYW5kYm94IiYmKFI9eXIoIiNpIithKSk7Y29uc3Qgej15cihtPT09InNhbmRib3giP1Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLFc9ei5zZWxlY3QoYFtpZD0iJHthfSJdYCksZXQ9ei5zZWxlY3QoIiMiK2ErIiBnIik7aWYoYXdhaXQgTjB0KGV0LF8sWyJhZ2dyZWdhdGlvbiIsImV4dGVuc2lvbiIsImNvbXBvc2l0aW9uIiwiZGVwZW5kZW5jeSIsImxvbGxpcG9wIl0sImNsYXNzRGlhZ3JhbSIsYSksJGEuaW5zZXJ0VGl0bGUoVywiY2xhc3NUaXRsZVRleHQiLCh3PT1udWxsP3ZvaWQgMDp3LnRpdGxlVG9wTWFyZ2luKT8/NSxwLmRiLmdldERpYWdyYW1UaXRsZSgpKSxmVChfLFcsdz09bnVsbD92b2lkIDA6dy5kaWFncmFtUGFkZGluZyx3PT1udWxsP3ZvaWQgMDp3LnVzZU1heFdpZHRoKSwhKHchPW51bGwmJncuaHRtbExhYmVscykpe2NvbnN0IHN0PW09PT0ic2FuZGJveCI/Ui5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudCxhdD1zdC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrYSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKTtmb3IoY29uc3QgYnQgb2YgYXQpe2NvbnN0IG10PWJ0LmdldEJCb3goKSx5dD1zdC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO3l0LnNldEF0dHJpYnV0ZSgicngiLDApLHl0LnNldEF0dHJpYnV0ZSgicnkiLDApLHl0LnNldEF0dHJpYnV0ZSgid2lkdGgiLG10LndpZHRoKSx5dC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsbXQuaGVpZ2h0KSxidC5pbnNlcnRCZWZvcmUoeXQsYnQuZmlyc3RDaGlsZCl9fX07ZnVuY3Rpb24gdGp0KGkpe2xldCBhO3N3aXRjaChpKXtjYXNlIDA6YT0iYWdncmVnYXRpb24iO2JyZWFrO2Nhc2UgMTphPSJleHRlbnNpb24iO2JyZWFrO2Nhc2UgMjphPSJjb21wb3NpdGlvbiI7YnJlYWs7Y2FzZSAzOmE9ImRlcGVuZGVuY3kiO2JyZWFrO2Nhc2UgNDphPSJsb2xsaXBvcCI7YnJlYWs7ZGVmYXVsdDphPSJub25lIn1yZXR1cm4gYX1jb25zdCBQR2U9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjp6UnQsZGI6SFkscmVuZGVyZXI6e3NldENvbmY6SUdlLGRyYXc6T0dlfSxzdHlsZXM6S1J0LGluaXQ6aT0+e2kuY2xhc3N8fChpLmNsYXNzPXt9KSxpLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLEhZLmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgRGd0PWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oRXQsWixDdCx4dCl7Zm9yKEN0PUN0fHx7fSx4dD1FdC5sZW5ndGg7eHQtLTtDdFtFdFt4dF1dPVopO3JldHVybiBDdH0sYT1bMSwyXSxmPVsxLDNdLHA9WzEsNF0sdz1bMiw0XSxtPVsxLDldLGI9WzEsMTFdLEU9WzEsMTVdLF89WzEsMTZdLEE9WzEsMTddLEk9WzEsMThdLEI9WzEsMzBdLE49WzEsMTldLFI9WzEsMjBdLHo9WzEsMjFdLFc9WzEsMjJdLGV0PVsxLDIzXSxzdD1bMSwyNV0sYXQ9WzEsMjZdLGJ0PVsxLDI3XSxtdD1bMSwyOF0seXQ9WzEsMjldLGZ0PVsxLDMyXSx1dD1bMSwzM10sdnQ9WzEsMzRdLFg9WzEsMzVdLHB0PVsxLDMxXSxVPVsxLDQsNSwxNSwxNiwxOCwyMCwyMSwyMywyNCwyNSwyNiwyNywyOCwzMiwzNCwzNiwzNyw0MSw0NCw0NSw0Niw0Nyw1MF0sVHQ9WzEsNCw1LDEzLDE0LDE1LDE2LDE4LDIwLDIxLDIzLDI0LDI1LDI2LDI3LDI4LDMyLDM0LDM2LDM3LDQxLDQ0LDQ1LDQ2LDQ3LDUwXSxudD1bNCw1LDE1LDE2LDE4LDIwLDIxLDIzLDI0LDI1LDI2LDI3LDI4LDMyLDM0LDM2LDM3LDQxLDQ0LDQ1LDQ2LDQ3LDUwXSxJdD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxOTDo1LFNEOjYsZG9jdW1lbnQ6NyxsaW5lOjgsc3RhdGVtZW50OjksY2xhc3NEZWZTdGF0ZW1lbnQ6MTAsY3NzQ2xhc3NTdGF0ZW1lbnQ6MTEsaWRTdGF0ZW1lbnQ6MTIsREVTQ1I6MTMsIi0tPiI6MTQsSElERV9FTVBUWToxNSxzY2FsZToxNixXSURUSDoxNyxDT01QT1NJVF9TVEFURToxOCxTVFJVQ1RfU1RBUlQ6MTksU1RSVUNUX1NUT1A6MjAsU1RBVEVfREVTQ1I6MjEsQVM6MjIsSUQ6MjMsRk9SSzoyNCxKT0lOOjI1LENIT0lDRToyNixDT05DVVJSRU5UOjI3LG5vdGU6Mjgsbm90ZVBvc2l0aW9uOjI5LE5PVEVfVEVYVDozMCxkaXJlY3Rpb246MzEsYWNjX3RpdGxlOjMyLGFjY190aXRsZV92YWx1ZTozMyxhY2NfZGVzY3I6MzQsYWNjX2Rlc2NyX3ZhbHVlOjM1LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzYsY2xhc3NEZWY6MzcsQ0xBU1NERUZfSUQ6MzgsQ0xBU1NERUZfU1RZTEVPUFRTOjM5LERFRkFVTFQ6NDAsY2xhc3M6NDEsQ0xBU1NFTlRJVFlfSURTOjQyLFNUWUxFQ0xBU1M6NDMsZGlyZWN0aW9uX3RiOjQ0LGRpcmVjdGlvbl9idDo0NSxkaXJlY3Rpb25fcmw6NDYsZGlyZWN0aW9uX2xyOjQ3LGVvbDo0OCwiOyI6NDksRURHRV9TVEFURTo1MCxTVFlMRV9TRVBBUkFUT1I6NTEsbGVmdF9vZjo1MixyaWdodF9vZjo1MywkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5MIiw2OiJTRCIsMTM6IkRFU0NSIiwxNDoiLS0+IiwxNToiSElERV9FTVBUWSIsMTY6InNjYWxlIiwxNzoiV0lEVEgiLDE4OiJDT01QT1NJVF9TVEFURSIsMTk6IlNUUlVDVF9TVEFSVCIsMjA6IlNUUlVDVF9TVE9QIiwyMToiU1RBVEVfREVTQ1IiLDIyOiJBUyIsMjM6IklEIiwyNDoiRk9SSyIsMjU6IkpPSU4iLDI2OiJDSE9JQ0UiLDI3OiJDT05DVVJSRU5UIiwyODoibm90ZSIsMzA6Ik5PVEVfVEVYVCIsMzI6ImFjY190aXRsZSIsMzM6ImFjY190aXRsZV92YWx1ZSIsMzQ6ImFjY19kZXNjciIsMzU6ImFjY19kZXNjcl92YWx1ZSIsMzY6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDM3OiJjbGFzc0RlZiIsMzg6IkNMQVNTREVGX0lEIiwzOToiQ0xBU1NERUZfU1RZTEVPUFRTIiw0MDoiREVGQVVMVCIsNDE6ImNsYXNzIiw0MjoiQ0xBU1NFTlRJVFlfSURTIiw0MzoiU1RZTEVDTEFTUyIsNDQ6ImRpcmVjdGlvbl90YiIsNDU6ImRpcmVjdGlvbl9idCIsNDY6ImRpcmVjdGlvbl9ybCIsNDc6ImRpcmVjdGlvbl9sciIsNDk6IjsiLDUwOiJFREdFX1NUQVRFIiw1MToiU1RZTEVfU0VQQVJBVE9SIiw1MjoibGVmdF9vZiIsNTM6InJpZ2h0X29mIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFs3LDBdLFs3LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDNdLFs5LDRdLFs5LDFdLFs5LDJdLFs5LDFdLFs5LDRdLFs5LDNdLFs5LDZdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDRdLFs5LDRdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFsxMCwzXSxbMTAsM10sWzExLDNdLFszMSwxXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbNDgsMV0sWzQ4LDFdLFsxMiwxXSxbMTIsMV0sWzEyLDNdLFsxMiwzXSxbMjksMV0sWzI5LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFosQ3QseHQsSHQsTGUsRnQsZ24pe3ZhciBTZT1GdC5sZW5ndGgtMTtzd2l0Y2goTGUpe2Nhc2UgMzpyZXR1cm4gSHQuc2V0Um9vdERvYyhGdFtTZV0pLEZ0W1NlXTtjYXNlIDQ6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNTpGdFtTZV0hPSJubCImJihGdFtTZS0xXS5wdXNoKEZ0W1NlXSksdGhpcy4kPUZ0W1NlLTFdKTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1GdFtTZV07YnJlYWs7Y2FzZSA4OnRoaXMuJD0ibmwiO2JyZWFrO2Nhc2UgMTE6dGhpcy4kPUZ0W1NlXTticmVhaztjYXNlIDEyOmNvbnN0IGNlPUZ0W1NlLTFdO2NlLmRlc2NyaXB0aW9uPUh0LnRyaW1Db2xvbihGdFtTZV0pLHRoaXMuJD1jZTticmVhaztjYXNlIDEzOnRoaXMuJD17c3RtdDoicmVsYXRpb24iLHN0YXRlMTpGdFtTZS0yXSxzdGF0ZTI6RnRbU2VdfTticmVhaztjYXNlIDE0OmNvbnN0IGtlPUh0LnRyaW1Db2xvbihGdFtTZV0pO3RoaXMuJD17c3RtdDoicmVsYXRpb24iLHN0YXRlMTpGdFtTZS0zXSxzdGF0ZTI6RnRbU2UtMV0sZGVzY3JpcHRpb246a2V9O2JyZWFrO2Nhc2UgMTg6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6RnRbU2UtM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiIsZG9jOkZ0W1NlLTFdfTticmVhaztjYXNlIDE5OnZhciBtZT1GdFtTZV0sVmU9RnRbU2UtMl0udHJpbSgpO2lmKEZ0W1NlXS5tYXRjaCgiOiIpKXt2YXIgWWU9RnRbU2VdLnNwbGl0KCI6Iik7bWU9WWVbMF0sVmU9W1ZlLFllWzFdXX10aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDptZSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjpWZX07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpGdFtTZS0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjpGdFtTZS01XSxkb2M6RnRbU2UtMV19O2JyZWFrO2Nhc2UgMjE6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6RnRbU2VdLHR5cGU6ImZvcmsifTticmVhaztjYXNlIDIyOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOkZ0W1NlXSx0eXBlOiJqb2luIn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpGdFtTZV0sdHlwZToiY2hvaWNlIn07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpIdC5nZXREaXZpZGVySWQoKSx0eXBlOiJkaXZpZGVyIn07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpGdFtTZS0xXS50cmltKCksbm90ZTp7cG9zaXRpb246RnRbU2UtMl0udHJpbSgpLHRleHQ6RnRbU2VdLnRyaW0oKX19O2JyZWFrO2Nhc2UgMjg6dGhpcy4kPUZ0W1NlXS50cmltKCksSHQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDI5OmNhc2UgMzA6dGhpcy4kPUZ0W1NlXS50cmltKCksSHQuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDMxOmNhc2UgMzI6dGhpcy4kPXtzdG10OiJjbGFzc0RlZiIsaWQ6RnRbU2UtMV0udHJpbSgpLGNsYXNzZXM6RnRbU2VdLnRyaW0oKX07YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9e3N0bXQ6ImFwcGx5Q2xhc3MiLGlkOkZ0W1NlLTFdLnRyaW0oKSxzdHlsZUNsYXNzOkZ0W1NlXS50cmltKCl9O2JyZWFrO2Nhc2UgMzQ6SHQuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiVEIifTticmVhaztjYXNlIDM1Okh0LnNldERpcmVjdGlvbigiQlQiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAzNjpIdC5zZXREaXJlY3Rpb24oIlJMIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJSTCJ9O2JyZWFrO2Nhc2UgMzc6SHQuc2V0RGlyZWN0aW9uKCJMUiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiTFIifTticmVhaztjYXNlIDQwOmNhc2UgNDE6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6RnRbU2VdLnRyaW0oKSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpGdFtTZS0yXS50cmltKCksY2xhc3NlczpbRnRbU2VdLnRyaW0oKV0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9O2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6RnRbU2UtMl0udHJpbSgpLGNsYXNzZXM6W0Z0W1NlXS50cmltKCldLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVha319LHRhYmxlOlt7MzoxLDQ6YSw1OmYsNjpwfSx7MTpbM119LHszOjUsNDphLDU6Ziw2OnB9LHszOjYsNDphLDU6Ziw2OnB9LGkoWzEsNCw1LDE1LDE2LDE4LDIxLDIzLDI0LDI1LDI2LDI3LDI4LDMyLDM0LDM2LDM3LDQxLDQ0LDQ1LDQ2LDQ3LDUwXSx3LHs3Ojd9KSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdLDQ6bSw1OmIsODo4LDk6MTAsMTA6MTIsMTE6MTMsMTI6MTQsMTU6RSwxNjpfLDE4OkEsMjE6SSwyMzpCLDI0Ok4sMjU6UiwyNjp6LDI3OlcsMjg6ZXQsMzE6MjQsMzI6c3QsMzQ6YXQsMzY6YnQsMzc6bXQsNDE6eXQsNDQ6ZnQsNDU6dXQsNDY6dnQsNDc6WCw1MDpwdH0saShVLFsyLDVdKSx7OTozNiwxMDoxMiwxMToxMywxMjoxNCwxNTpFLDE2Ol8sMTg6QSwyMTpJLDIzOkIsMjQ6TiwyNTpSLDI2OnosMjc6VywyODpldCwzMToyNCwzMjpzdCwzNDphdCwzNjpidCwzNzptdCw0MTp5dCw0NDpmdCw0NTp1dCw0Njp2dCw0NzpYLDUwOnB0fSxpKFUsWzIsN10pLGkoVSxbMiw4XSksaShVLFsyLDldKSxpKFUsWzIsMTBdKSxpKFUsWzIsMTFdLHsxMzpbMSwzN10sMTQ6WzEsMzhdfSksaShVLFsyLDE1XSksezE3OlsxLDM5XX0saShVLFsyLDE3XSx7MTk6WzEsNDBdfSksezIyOlsxLDQxXX0saShVLFsyLDIxXSksaShVLFsyLDIyXSksaShVLFsyLDIzXSksaShVLFsyLDI0XSksezI5OjQyLDMwOlsxLDQzXSw1MjpbMSw0NF0sNTM6WzEsNDVdfSxpKFUsWzIsMjddKSx7MzM6WzEsNDZdfSx7MzU6WzEsNDddfSxpKFUsWzIsMzBdKSx7Mzg6WzEsNDhdLDQwOlsxLDQ5XX0sezQyOlsxLDUwXX0saShUdCxbMiw0MF0sezUxOlsxLDUxXX0pLGkoVHQsWzIsNDFdLHs1MTpbMSw1Ml19KSxpKFUsWzIsMzRdKSxpKFUsWzIsMzVdKSxpKFUsWzIsMzZdKSxpKFUsWzIsMzddKSxpKFUsWzIsNl0pLGkoVSxbMiwxMl0pLHsxMjo1MywyMzpCLDUwOnB0fSxpKFUsWzIsMTZdKSxpKG50LHcsezc6NTR9KSx7MjM6WzEsNTVdfSx7MjM6WzEsNTZdfSx7MjI6WzEsNTddfSx7MjM6WzIsNDRdfSx7MjM6WzIsNDVdfSxpKFUsWzIsMjhdKSxpKFUsWzIsMjldKSx7Mzk6WzEsNThdfSx7Mzk6WzEsNTldfSx7NDM6WzEsNjBdfSx7MjM6WzEsNjFdfSx7MjM6WzEsNjJdfSxpKFUsWzIsMTNdLHsxMzpbMSw2M119KSx7NDptLDU6Yiw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxNTpFLDE2Ol8sMTg6QSwyMDpbMSw2NF0sMjE6SSwyMzpCLDI0Ok4sMjU6UiwyNjp6LDI3OlcsMjg6ZXQsMzE6MjQsMzI6c3QsMzQ6YXQsMzY6YnQsMzc6bXQsNDE6eXQsNDQ6ZnQsNDU6dXQsNDY6dnQsNDc6WCw1MDpwdH0saShVLFsyLDE5XSx7MTk6WzEsNjVdfSksezMwOlsxLDY2XX0sezIzOlsxLDY3XX0saShVLFsyLDMxXSksaShVLFsyLDMyXSksaShVLFsyLDMzXSksaShUdCxbMiw0Ml0pLGkoVHQsWzIsNDNdKSxpKFUsWzIsMTRdKSxpKFUsWzIsMThdKSxpKG50LHcsezc6Njh9KSxpKFUsWzIsMjVdKSxpKFUsWzIsMjZdKSx7NDptLDU6Yiw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxNTpFLDE2Ol8sMTg6QSwyMDpbMSw2OV0sMjE6SSwyMzpCLDI0Ok4sMjU6UiwyNjp6LDI3OlcsMjg6ZXQsMzE6MjQsMzI6c3QsMzQ6YXQsMzY6YnQsMzc6bXQsNDE6eXQsNDQ6ZnQsNDU6dXQsNDY6dnQsNDc6WCw1MDpwdH0saShVLFsyLDIwXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDFdLDY6WzIsMl0sNDQ6WzIsNDRdLDQ1OlsyLDQ1XX0scGFyc2VFcnJvcjpmdW5jdGlvbihaLEN0KXtpZihDdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFopO2Vsc2V7dmFyIHh0PW5ldyBFcnJvcihaKTt0aHJvdyB4dC5oYXNoPUN0LHh0fX0scGFyc2U6ZnVuY3Rpb24oWil7dmFyIEN0PXRoaXMseHQ9WzBdLEh0PVtdLExlPVtudWxsXSxGdD1bXSxnbj10aGlzLnRhYmxlLFNlPSIiLG1lPTAsVmU9MCxZZT0yLGNlPTEsa2U9RnQuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksenQ9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxyZT17eXk6e319O2Zvcih2YXIgc2UgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxzZSkmJihyZS55eVtzZV09dGhpcy55eVtzZV0pO3p0LnNldElucHV0KFoscmUueXkpLHJlLnl5LmxleGVyPXp0LHJlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiB6dC55eWxsb2M+InUiJiYoenQueXlsbG9jPXt9KTt2YXIgUGU9enQueXlsbG9jO0Z0LnB1c2goUGUpO3ZhciB0ZT16dC5vcHRpb25zJiZ6dC5vcHRpb25zLnJhbmdlczt0eXBlb2YgcmUueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9cmUueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gTWUoKXt2YXIgRWU7cmV0dXJuIEVlPUh0LnBvcCgpfHx6dC5sZXgoKXx8Y2UsdHlwZW9mIEVlIT0ibnVtYmVyIiYmKEVlIGluc3RhbmNlb2YgQXJyYXkmJihIdD1FZSxFZT1IdC5wb3AoKSksRWU9Q3Quc3ltYm9sc19bRWVdfHxFZSksRWV9Zm9yKHZhciBkZSxvbixuaSxLcyx3cz17fSxmbyxYaSxFcixYbjs7KXtpZihvbj14dFt4dC5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tvbl0/bmk9dGhpcy5kZWZhdWx0QWN0aW9uc1tvbl06KChkZT09PW51bGx8fHR5cGVvZiBkZT4idSIpJiYoZGU9TWUoKSksbmk9Z25bb25dJiZnbltvbl1bZGVdKSx0eXBlb2Ygbmk+InUifHwhbmkubGVuZ3RofHwhbmlbMF0pe3ZhciBkaT0iIjtYbj1bXTtmb3IoZm8gaW4gZ25bb25dKXRoaXMudGVybWluYWxzX1tmb10mJmZvPlllJiZYbi5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bZm9dKyInIik7enQuc2hvd1Bvc2l0aW9uP2RpPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG1lKzEpK2A6CmArenQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtYbi5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2RlXXx8ZGUpKyInIjpkaT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhtZSsxKSsiOiBVbmV4cGVjdGVkICIrKGRlPT1jZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tkZV18fGRlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihkaSx7dGV4dDp6dC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bZGVdfHxkZSxsaW5lOnp0Lnl5bGluZW5vLGxvYzpQZSxleHBlY3RlZDpYbn0pfWlmKG5pWzBdaW5zdGFuY2VvZiBBcnJheSYmbmkubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitvbisiLCB0b2tlbjogIitkZSk7c3dpdGNoKG5pWzBdKXtjYXNlIDE6eHQucHVzaChkZSksTGUucHVzaCh6dC55eXRleHQpLEZ0LnB1c2goenQueXlsbG9jKSx4dC5wdXNoKG5pWzFdKSxkZT1udWxsLFZlPXp0Lnl5bGVuZyxTZT16dC55eXRleHQsbWU9enQueXlsaW5lbm8sUGU9enQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihYaT10aGlzLnByb2R1Y3Rpb25zX1tuaVsxXV1bMV0sd3MuJD1MZVtMZS5sZW5ndGgtWGldLHdzLl8kPXtmaXJzdF9saW5lOkZ0W0Z0Lmxlbmd0aC0oWGl8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpGdFtGdC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpGdFtGdC5sZW5ndGgtKFhpfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkZ0W0Z0Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdGUmJih3cy5fJC5yYW5nZT1bRnRbRnQubGVuZ3RoLShYaXx8MSldLnJhbmdlWzBdLEZ0W0Z0Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLEtzPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh3cyxbU2UsVmUsbWUscmUueXksbmlbMV0sTGUsRnRdLmNvbmNhdChrZSkpLHR5cGVvZiBLczwidSIpcmV0dXJuIEtzO1hpJiYoeHQ9eHQuc2xpY2UoMCwtMSpYaSoyKSxMZT1MZS5zbGljZSgwLC0xKlhpKSxGdD1GdC5zbGljZSgwLC0xKlhpKSkseHQucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tuaVsxXV1bMF0pLExlLnB1c2god3MuJCksRnQucHVzaCh3cy5fJCksRXI9Z25beHRbeHQubGVuZ3RoLTJdXVt4dFt4dC5sZW5ndGgtMV1dLHh0LnB1c2goRXIpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxPdD1mdW5jdGlvbigpe3ZhciBFdD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihDdCx4dCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihDdCx4dCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoQ3QpfSxzZXRJbnB1dDpmdW5jdGlvbihaLEN0KXtyZXR1cm4gdGhpcy55eT1DdHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Wix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Wix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Wix0aGlzLm1hdGNoZWQrPVo7dmFyIEN0PVoubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBDdD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksWn0sdW5wdXQ6ZnVuY3Rpb24oWil7dmFyIEN0PVoubGVuZ3RoLHh0PVouc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1aK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1DdCksdGhpcy5vZmZzZXQtPUN0O3ZhciBIdD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSx4dC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXh0Lmxlbmd0aC0xKTt2YXIgTGU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnh0Pyh4dC5sZW5ndGg9PT1IdC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0h0W0h0Lmxlbmd0aC14dC5sZW5ndGhdLmxlbmd0aC14dFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUN0fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0xlWzBdLExlWzBdK3RoaXMueXlsZW5nLUN0XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oWil7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFopKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIFo9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihaLmxlbmd0aD4yMD8iLi4uIjoiIikrWi5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBaPXRoaXMubWF0Y2g7cmV0dXJuIFoubGVuZ3RoPDIwJiYoWis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtWi5sZW5ndGgpKSwoWi5zdWJzdHIoMCwyMCkrKFoubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBaPXRoaXMucGFzdElucHV0KCksQ3Q9bmV3IEFycmF5KFoubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gWit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArQ3QrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKFosQ3Qpe3ZhciB4dCxIdCxMZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoTGU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoTGUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksSHQ9WlswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksSHQmJih0aGlzLnl5bGluZW5vKz1IdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpIdD9IdFtIdC5sZW5ndGgtMV0ubGVuZ3RoLUh0W0h0Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1pbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9WlswXSx0aGlzLm1hdGNoKz1aWzBdLHRoaXMubWF0Y2hlcz1aLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFpbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVpbMF0seHQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsQ3QsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSkseHQpcmV0dXJuIHh0O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBGdCBpbiBMZSl0aGlzW0Z0XT1MZVtGdF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgWixDdCx4dCxIdDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBMZT10aGlzLl9jdXJyZW50UnVsZXMoKSxGdD0wO0Z0PExlLmxlbmd0aDtGdCsrKWlmKHh0PXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbTGVbRnRdXSkseHQmJighQ3R8fHh0WzBdLmxlbmd0aD5DdFswXS5sZW5ndGgpKXtpZihDdD14dCxIdD1GdCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihaPXRoaXMudGVzdF9tYXRjaCh4dCxMZVtGdF0pLFohPT0hMSlyZXR1cm4gWjtpZih0aGlzLl9iYWNrdHJhY2spe0N0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEN0PyhaPXRoaXMudGVzdF9tYXRjaChDdCxMZVtIdF0pLFohPT0hMT9aOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgQ3Q9dGhpcy5uZXh0KCk7cmV0dXJuIEN0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihDdCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEN0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgQ3Q9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gQ3Q+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihDdCl7cmV0dXJuIEN0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoQ3R8fDApLEN0Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbQ3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEN0KXt0aGlzLmJlZ2luKEN0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihDdCx4dCxIdCxMZSl7c3dpdGNoKEh0KXtjYXNlIDA6cmV0dXJuIDQwO2Nhc2UgMTpyZXR1cm4gNDQ7Y2FzZSAyOnJldHVybiA0NTtjYXNlIDM6cmV0dXJuIDQ2O2Nhc2UgNDpyZXR1cm4gNDc7Y2FzZSA1OmJyZWFrO2Nhc2UgNjpicmVhaztjYXNlIDc6cmV0dXJuIDU7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpicmVhaztjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6YnJlYWs7Y2FzZSAxMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNDQUxFIiksMTY7Y2FzZSAxMzpyZXR1cm4gMTc7Y2FzZSAxNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzI7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMTc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDM0O2Nhc2UgMTg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDE5OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDIwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIxOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDIyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUYiKSwzNztjYXNlIDIzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGSUQiKSwiREVGQVVMVF9DTEFTU0RFRl9JRCI7Y2FzZSAyNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksMzg7Y2FzZSAyNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM5O2Nhc2UgMjY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJDTEFTUyIpLDQxO2Nhc2UgMjc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NfU1RZTEUiKSw0MjtjYXNlIDI4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDM7Y2FzZSAyOTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNDQUxFIiksMTY7Y2FzZSAzMDpyZXR1cm4gMTc7Y2FzZSAzMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzMjp0aGlzLnB1c2hTdGF0ZSgiU1RBVEUiKTticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCkseHQueXl0ZXh0PXh0Lnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjQ7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHh0Lnl5dGV4dD14dC55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI1O2Nhc2UgMzU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx4dC55eXRleHQ9eHQueXl0ZXh0LnNsaWNlKDAsLTEwKS50cmltKCksMjY7Y2FzZSAzNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHh0Lnl5dGV4dD14dC55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMzc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx4dC55eXRleHQ9eHQueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNTtjYXNlIDM4OnJldHVybiB0aGlzLnBvcFN0YXRlKCkseHQueXl0ZXh0PXh0Lnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI2O2Nhc2UgMzk6cmV0dXJuIDQ0O2Nhc2UgNDA6cmV0dXJuIDQ1O2Nhc2UgNDE6cmV0dXJuIDQ2O2Nhc2UgNDI6cmV0dXJuIDQ3O2Nhc2UgNDM6dGhpcy5wdXNoU3RhdGUoIlNUQVRFX1NUUklORyIpO2JyZWFrO2Nhc2UgNDQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTVEFURV9JRCIpLCJBUyI7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSA0Njp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NzpyZXR1cm4iU1RBVEVfREVTQ1IiO2Nhc2UgNDg6cmV0dXJuIDE4O2Nhc2UgNDk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgic3RydWN0IiksMTk7Y2FzZSA1MTpicmVhaztjYXNlIDUyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjA7Y2FzZSA1MzpicmVhaztjYXNlIDU0OnJldHVybiB0aGlzLmJlZ2luKCJOT1RFIiksMjg7Y2FzZSA1NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX0lEIiksNTI7Y2FzZSA1NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX0lEIiksNTM7Y2FzZSA1Nzp0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkZMT0FUSU5HX05PVEUiKTticmVhaztjYXNlIDU4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkZMT0FUSU5HX05PVEVfSUQiKSwiQVMiO2Nhc2UgNTk6YnJlYWs7Y2FzZSA2MDpyZXR1cm4iTk9URV9URVhUIjtjYXNlIDYxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksIklEIjtjYXNlIDYyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIk5PVEVfVEVYVCIpLDIzO2Nhc2UgNjM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx4dC55eXRleHQ9eHQueXl0ZXh0LnN1YnN0cigyKS50cmltKCksMzA7Y2FzZSA2NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHh0Lnl5dGV4dD14dC55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDMwO2Nhc2UgNjU6cmV0dXJuIDY7Y2FzZSA2NjpyZXR1cm4gNjtjYXNlIDY3OnJldHVybiAxNTtjYXNlIDY4OnJldHVybiA1MDtjYXNlIDY5OnJldHVybiAyMztjYXNlIDcwOnJldHVybiB4dC55eXRleHQ9eHQueXl0ZXh0LnRyaW0oKSwxMztjYXNlIDcxOnJldHVybiAxNDtjYXNlIDcyOnJldHVybiAyNztjYXNlIDczOnJldHVybiA1MTtjYXNlIDc0OnJldHVybiA1O2Nhc2UgNzU6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86ZGVmYXVsdFxiKS9pLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvaSwvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86W1xzXSspL2ksL14oPzooKD8hXG4pXHMpKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86c2NhbGVccyspL2ksL14oPzpcZCspL2ksL14oPzpccyt3aWR0aFxiKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpjbGFzc0RlZlxzKykvaSwvXig/OkRFRkFVTFRccyspL2ksL14oPzpcdytccyspL2ksL14oPzpbXlxuXSopL2ksL14oPzpjbGFzc1xzKykvaSwvXig/OihcdyspKygoLFxzKlx3KykqKSkvaSwvXig/OlteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OnN0YXRlXHMrKS9pLC9eKD86Lio8PGZvcms+PikvaSwvXig/Oi4qPDxqb2luPj4pL2ksL14oPzouKjw8Y2hvaWNlPj4pL2ksL14oPzouKlxbXFtmb3JrXF1cXSkvaSwvXig/Oi4qXFtcW2pvaW5cXVxdKS9pLC9eKD86LipcW1xbY2hvaWNlXF1cXSkvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzpbIl0pL2ksL14oPzpccyphc1xzKykvaSwvXig/OlteXG5ce10qKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXHNce10rKS9pLC9eKD86XG4pL2ksL14oPzpceykvaSwvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86XH0pL2ksL14oPzpbXG5dKS9pLC9eKD86bm90ZVxzKykvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzoiKS9pLC9eKD86XHMqYXNccyopL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlteXG5dKikvaSwvXig/OlxzKlteOlxuXHNcLV0rKS9pLC9eKD86XHMqOlteOlxuO10rKS9pLC9eKD86W1xzXFNdKj9lbmQgbm90ZVxiKS9pLC9eKD86c3RhdGVEaWFncmFtXHMrKS9pLC9eKD86c3RhdGVEaWFncmFtLXYyXHMrKS9pLC9eKD86aGlkZSBlbXB0eSBkZXNjcmlwdGlvblxiKS9pLC9eKD86XFtcKlxdKS9pLC9eKD86W146XG5cc1wtXHtdKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oi0tPikvaSwvXig/Oi0tKS9pLC9eKD86Ojo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e0xJTkU6e3J1bGVzOls5LDEwXSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzksMTAsMjIsMjYsMzIsMzksNDAsNDEsNDIsNTEsNTIsNTMsNTQsNjgsNjksNzAsNzEsNzJdLGluY2x1c2l2ZTohMX0sRkxPQVRJTkdfTk9URV9JRDp7cnVsZXM6WzYxXSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEU6e3J1bGVzOls1OCw1OSw2MF0saW5jbHVzaXZlOiExfSxOT1RFX1RFWFQ6e3J1bGVzOls2Myw2NF0saW5jbHVzaXZlOiExfSxOT1RFX0lEOntydWxlczpbNjJdLGluY2x1c2l2ZTohMX0sTk9URTp7cnVsZXM6WzU1LDU2LDU3XSxpbmNsdXNpdmU6ITF9LENMQVNTX1NUWUxFOntydWxlczpbMjhdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOlsyN10saW5jbHVzaXZlOiExfSxDTEFTU0RFRklEOntydWxlczpbMjVdLGluY2x1c2l2ZTohMX0sQ0xBU1NERUY6e3J1bGVzOlsyMywyNF0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMjAsMjFdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMThdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMTZdLGluY2x1c2l2ZTohMX0sU0NBTEU6e3J1bGVzOlsxMywxNCwzMCwzMV0saW5jbHVzaXZlOiExfSxBTElBUzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURV9JRDp7cnVsZXM6WzQ1XSxpbmNsdXNpdmU6ITF9LFNUQVRFX1NUUklORzp7cnVsZXM6WzQ2LDQ3XSxpbmNsdXNpdmU6ITF9LEZPUktfU1RBVEU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEU6e3J1bGVzOls5LDEwLDMzLDM0LDM1LDM2LDM3LDM4LDQzLDQ0LDQ4LDQ5LDUwXSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDgsMTAsMTEsMTIsMTUsMTcsMTksMjIsMjYsMjksMzIsNTAsNTQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzMsNzQsNzVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gRXR9KCk7SXQubGV4ZXI9T3Q7ZnVuY3Rpb24gQnQoKXt0aGlzLnl5PXt9fXJldHVybiBCdC5wcm90b3R5cGU9SXQsSXQuUGFyc2VyPUJ0LG5ldyBCdH0oKTtEZ3QucGFyc2VyPURndDtjb25zdCBlanQ9RGd0LEZHZT0iTFIiLE5HZT0iVEIiLFVZPSJzdGF0ZSIsSWd0PSJyZWxhdGlvbiIsQkdlPSJjbGFzc0RlZiIsUkdlPSJhcHBseUNsYXNzIixLRj0iZGVmYXVsdCIsbmp0PSJkaXZpZGVyIixPZ3Q9IlsqXSIscmp0PSJzdGFydCIsaWp0PU9ndCxzanQ9ImVuZCIsYWp0PSJjb2xvciIsb2p0PSJmaWxsIixqR2U9ImJnRmlsbCIsJEdlPSIsIjtmdW5jdGlvbiBjanQoKXtyZXR1cm57fX1sZXQgdWp0PUZHZSxXWT1bXSxYRj1janQoKTtjb25zdCBsanQ9KCk9Pih7cmVsYXRpb25zOltdLHN0YXRlczp7fSxkb2N1bWVudHM6e319KTtsZXQgWVk9e3Jvb3Q6bGp0KCl9LFMwPVlZLnJvb3QsUUY9MCxoanQ9MDtjb25zdCB6R2U9e0xJTkU6MCxET1RURURfTElORToxfSxxR2U9e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjN9LEtZPWk9PkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaSkpLEhHZT1pPT57VXQuaW5mbygiU2V0dGluZyByb290IGRvYyIsaSksV1k9aX0sVkdlPSgpPT5XWSxYWT0oaSxhLGYpPT57aWYoYS5zdG10PT09SWd0KVhZKGksYS5zdGF0ZTEsITApLFhZKGksYS5zdGF0ZTIsITEpO2Vsc2UgaWYoYS5zdG10PT09VVkmJihhLmlkPT09IlsqXSI/KGEuaWQ9Zj9pLmlkKyJfc3RhcnQiOmkuaWQrIl9lbmQiLGEuc3RhcnQ9Zik6YS5pZD1hLmlkLnRyaW0oKSksYS5kb2Mpe2NvbnN0IHA9W107bGV0IHc9W10sbTtmb3IobT0wO208YS5kb2MubGVuZ3RoO20rKylpZihhLmRvY1ttXS50eXBlPT09bmp0KXtjb25zdCBiPUtZKGEuZG9jW21dKTtiLmRvYz1LWSh3KSxwLnB1c2goYiksdz1bXX1lbHNlIHcucHVzaChhLmRvY1ttXSk7aWYocC5sZW5ndGg+MCYmdy5sZW5ndGg+MCl7Y29uc3QgYj17c3RtdDpVWSxpZDpWSXQoKSx0eXBlOiJkaXZpZGVyIixkb2M6S1kodyl9O3AucHVzaChLWShiKSksYS5kb2M9cH1hLmRvYy5mb3JFYWNoKGI9PlhZKGEsYiwhMCkpfX0sR0dlPSgpPT4oWFkoe2lkOiJyb290In0se2lkOiJyb290Iixkb2M6V1l9LCEwKSx7aWQ6InJvb3QiLGRvYzpXWX0pLFVHZT1pPT57bGV0IGE7aS5kb2M/YT1pLmRvYzphPWksVXQuaW5mbyhhKSxmanQoITApLFV0LmluZm8oIkV4dHJhY3QiLGEpLGEuZm9yRWFjaChmPT57c3dpdGNoKGYuc3RtdCl7Y2FzZSBVWTpMVChmLmlkLnRyaW0oKSxmLnR5cGUsZi5kb2MsZi5kZXNjcmlwdGlvbixmLm5vdGUsZi5jbGFzc2VzLGYuc3R5bGVzLGYudGV4dFN0eWxlcyk7YnJlYWs7Y2FzZSBJZ3Q6ZGp0KGYuc3RhdGUxLGYuc3RhdGUyLGYuZGVzY3JpcHRpb24pO2JyZWFrO2Nhc2UgQkdlOmdqdChmLmlkLnRyaW0oKSxmLmNsYXNzZXMpO2JyZWFrO2Nhc2UgUkdlOkJndChmLmlkLnRyaW0oKSxmLnN0eWxlQ2xhc3MpO2JyZWFrfX0pfSxMVD1mdW5jdGlvbihpLGE9S0YsZj1udWxsLHA9bnVsbCx3PW51bGwsbT1udWxsLGI9bnVsbCxFPW51bGwpe2NvbnN0IF89aT09bnVsbD92b2lkIDA6aS50cmltKCk7UzAuc3RhdGVzW19dPT09dm9pZCAwPyhVdC5pbmZvKCJBZGRpbmcgc3RhdGUgIixfLHApLFMwLnN0YXRlc1tfXT17aWQ6XyxkZXNjcmlwdGlvbnM6W10sdHlwZTphLGRvYzpmLG5vdGU6dyxjbGFzc2VzOltdLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSk6KFMwLnN0YXRlc1tfXS5kb2N8fChTMC5zdGF0ZXNbX10uZG9jPWYpLFMwLnN0YXRlc1tfXS50eXBlfHwoUzAuc3RhdGVzW19dLnR5cGU9YSkpLHAmJihVdC5pbmZvKCJTZXR0aW5nIHN0YXRlIGRlc2NyaXB0aW9uIixfLHApLHR5cGVvZiBwPT0ic3RyaW5nIiYmTmd0KF8scC50cmltKCkpLHR5cGVvZiBwPT0ib2JqZWN0IiYmcC5mb3JFYWNoKEE9Pk5ndChfLEEudHJpbSgpKSkpLHcmJihTMC5zdGF0ZXNbX10ubm90ZT13LFMwLnN0YXRlc1tfXS5ub3RlLnRleHQ9S3Iuc2FuaXRpemVUZXh0KFMwLnN0YXRlc1tfXS5ub3RlLnRleHQsT2UoKSkpLG0mJihVdC5pbmZvKCJTZXR0aW5nIHN0YXRlIGNsYXNzZXMiLF8sbSksKHR5cGVvZiBtPT0ic3RyaW5nIj9bbV06bSkuZm9yRWFjaChJPT5CZ3QoXyxJLnRyaW0oKSkpKSxiJiYoVXQuaW5mbygiU2V0dGluZyBzdGF0ZSBzdHlsZXMiLF8sYiksKHR5cGVvZiBiPT0ic3RyaW5nIj9bYl06YikuZm9yRWFjaChJPT5uVWUoXyxJLnRyaW0oKSkpKSxFJiYoVXQuaW5mbygiU2V0dGluZyBzdGF0ZSBzdHlsZXMiLF8sYiksKHR5cGVvZiBFPT0ic3RyaW5nIj9bRV06RSkuZm9yRWFjaChJPT5yVWUoXyxJLnRyaW0oKSkpKX0sZmp0PWZ1bmN0aW9uKGkpe1lZPXtyb290OmxqdCgpfSxTMD1ZWS5yb290LFFGPTAsWEY9Y2p0KCksaXx8aGcoKX0sWkY9ZnVuY3Rpb24oaSl7cmV0dXJuIFMwLnN0YXRlc1tpXX0sV0dlPWZ1bmN0aW9uKCl7cmV0dXJuIFMwLnN0YXRlc30sWUdlPWZ1bmN0aW9uKCl7VXQuaW5mbygiRG9jdW1lbnRzID0gIixZWSl9LEtHZT1mdW5jdGlvbigpe3JldHVybiBTMC5yZWxhdGlvbnN9O2Z1bmN0aW9uIFBndChpPSIiKXtsZXQgYT1pO3JldHVybiBpPT09T2d0JiYoUUYrKyxhPWAke3JqdH0ke1FGfWApLGF9ZnVuY3Rpb24gRmd0KGk9IiIsYT1LRil7cmV0dXJuIGk9PT1PZ3Q/cmp0OmF9ZnVuY3Rpb24gWEdlKGk9IiIpe2xldCBhPWk7cmV0dXJuIGk9PT1panQmJihRRisrLGE9YCR7c2p0fSR7UUZ9YCksYX1mdW5jdGlvbiBRR2UoaT0iIixhPUtGKXtyZXR1cm4gaT09PWlqdD9zanQ6YX1mdW5jdGlvbiBaR2UoaSxhLGYpe2xldCBwPVBndChpLmlkLnRyaW0oKSksdz1GZ3QoaS5pZC50cmltKCksaS50eXBlKSxtPVBndChhLmlkLnRyaW0oKSksYj1GZ3QoYS5pZC50cmltKCksYS50eXBlKTtMVChwLHcsaS5kb2MsaS5kZXNjcmlwdGlvbixpLm5vdGUsaS5jbGFzc2VzLGkuc3R5bGVzLGkudGV4dFN0eWxlcyksTFQobSxiLGEuZG9jLGEuZGVzY3JpcHRpb24sYS5ub3RlLGEuY2xhc3NlcyxhLnN0eWxlcyxhLnRleHRTdHlsZXMpLFMwLnJlbGF0aW9ucy5wdXNoKHtpZDE6cCxpZDI6bSxyZWxhdGlvblRpdGxlOktyLnNhbml0aXplVGV4dChmLE9lKCkpfSl9Y29uc3QgZGp0PWZ1bmN0aW9uKGksYSxmKXtpZih0eXBlb2YgaT09Im9iamVjdCIpWkdlKGksYSxmKTtlbHNle2NvbnN0IHA9UGd0KGkudHJpbSgpKSx3PUZndChpKSxtPVhHZShhLnRyaW0oKSksYj1RR2UoYSk7TFQocCx3KSxMVChtLGIpLFMwLnJlbGF0aW9ucy5wdXNoKHtpZDE6cCxpZDI6bSx0aXRsZTpLci5zYW5pdGl6ZVRleHQoZixPZSgpKX0pfX0sTmd0PWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1TMC5zdGF0ZXNbaV0scD1hLnN0YXJ0c1dpdGgoIjoiKT9hLnJlcGxhY2UoIjoiLCIiKS50cmltKCk6YTtmLmRlc2NyaXB0aW9ucy5wdXNoKEtyLnNhbml0aXplVGV4dChwLE9lKCkpKX0sSkdlPWZ1bmN0aW9uKGkpe3JldHVybiBpLnN1YnN0cmluZygwLDEpPT09IjoiP2kuc3Vic3RyKDIpLnRyaW0oKTppLnRyaW0oKX0sdFVlPSgpPT4oaGp0KyssImRpdmlkZXItaWQtIitoanQpLGdqdD1mdW5jdGlvbihpLGE9IiIpe1hGW2ldPT09dm9pZCAwJiYoWEZbaV09e2lkOmksc3R5bGVzOltdLHRleHRTdHlsZXM6W119KTtjb25zdCBmPVhGW2ldO2EhPW51bGwmJmEuc3BsaXQoJEdlKS5mb3JFYWNoKHA9Pntjb25zdCB3PXAucmVwbGFjZSgvKFteO10qKTsvLCIkMSIpLnRyaW0oKTtpZihwLm1hdGNoKGFqdCkpe2NvbnN0IGI9dy5yZXBsYWNlKG9qdCxqR2UpLnJlcGxhY2UoYWp0LG9qdCk7Zi50ZXh0U3R5bGVzLnB1c2goYil9Zi5zdHlsZXMucHVzaCh3KX0pfSxlVWU9ZnVuY3Rpb24oKXtyZXR1cm4gWEZ9LEJndD1mdW5jdGlvbihpLGEpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2xldCBwPVpGKGYpO2lmKHA9PT12b2lkIDApe2NvbnN0IHc9Zi50cmltKCk7TFQodykscD1aRih3KX1wLmNsYXNzZXMucHVzaChhKX0pfSxuVWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPVpGKGkpO2YhPT12b2lkIDAmJmYudGV4dFN0eWxlcy5wdXNoKGEpfSxyVWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPVpGKGkpO2YhPT12b2lkIDAmJmYudGV4dFN0eWxlcy5wdXNoKGEpfSwkNT17Z2V0Q29uZmlnOigpPT5PZSgpLnN0YXRlLGFkZFN0YXRlOkxULGNsZWFyOmZqdCxnZXRTdGF0ZTpaRixnZXRTdGF0ZXM6V0dlLGdldFJlbGF0aW9uczpLR2UsZ2V0Q2xhc3NlczplVWUsZ2V0RGlyZWN0aW9uOigpPT51anQsYWRkUmVsYXRpb246ZGp0LGdldERpdmlkZXJJZDp0VWUsc2V0RGlyZWN0aW9uOmk9Pnt1anQ9aX0sY2xlYW51cExhYmVsOkpHZSxsaW5lVHlwZTp6R2UscmVsYXRpb25UeXBlOnFHZSxsb2dEb2N1bWVudHM6WUdlLGdldFJvb3REb2M6VkdlLHNldFJvb3REb2M6SEdlLGdldFJvb3REb2NWMjpHR2UsZXh0cmFjdDpVR2UsdHJpbUNvbG9uOmk9PmkmJmlbMF09PT0iOiI/aS5zdWJzdHIoMSkudHJpbSgpOmkudHJpbSgpLGdldEFjY1RpdGxlOmZnLHNldEFjY1RpdGxlOkUwLGdldEFjY0Rlc2NyaXB0aW9uOmdnLHNldEFjY0Rlc2NyaXB0aW9uOmRnLGFkZFN0eWxlQ2xhc3M6Z2p0LHNldENzc0NsYXNzOkJndCxhZGREZXNjcmlwdGlvbjpOZ3Qsc2V0RGlhZ3JhbVRpdGxlOk5iLGdldERpYWdyYW1UaXRsZTpwZ30scGp0PWk9PmAKZGVmcyAjc3RhdGVkaWFncmFtLWJhcmJFbmQgewogICAgZmlsbDogJHtpLnRyYW5zaXRpb25Db2xvcn07CiAgICBzdHJva2U6ICR7aS50cmFuc2l0aW9uQ29sb3J9OwogIH0KZy5zdGF0ZUdyb3VwIHRleHQgewogIGZpbGw6ICR7aS5ub2RlQm9yZGVyfTsKICBzdHJva2U6IG5vbmU7CiAgZm9udC1zaXplOiAxMHB4Owp9Cmcuc3RhdGVHcm91cCB0ZXh0IHsKICBmaWxsOiAke2kudGV4dENvbG9yfTsKICBzdHJva2U6IG5vbmU7CiAgZm9udC1zaXplOiAxMHB4OwoKfQpnLnN0YXRlR3JvdXAgLnN0YXRlLXRpdGxlIHsKICBmb250LXdlaWdodDogYm9sZGVyOwogIGZpbGw6ICR7aS5zdGF0ZUxhYmVsQ29sb3J9Owp9CgpnLnN0YXRlR3JvdXAgcmVjdCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9Owp9CgpnLnN0YXRlR3JvdXAgbGluZSB7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi50cmFuc2l0aW9uIHsKICBzdHJva2U6ICR7aS50cmFuc2l0aW9uQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKICBmaWxsOiBub25lOwp9Cgouc3RhdGVHcm91cCAuY29tcG9zaXQgewogIGZpbGw6ICR7aS5iYWNrZ3JvdW5kfTsKICBib3JkZXItYm90dG9tOiAxcHgKfQoKLnN0YXRlR3JvdXAgLmFsdC1jb21wb3NpdCB7CiAgZmlsbDogI2UwZTBlMDsKICBib3JkZXItYm90dG9tOiAxcHgKfQoKLnN0YXRlLW5vdGUgewogIHN0cm9rZTogJHtpLm5vdGVCb3JkZXJDb2xvcn07CiAgZmlsbDogJHtpLm5vdGVCa2dDb2xvcn07CgogIHRleHQgewogICAgZmlsbDogJHtpLm5vdGVUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogICAgZm9udC1zaXplOiAxMHB4OwogIH0KfQoKLnN0YXRlTGFiZWwgLmJveCB7CiAgc3Ryb2tlOiBub25lOwogIHN0cm9rZS13aWR0aDogMDsKICBmaWxsOiAke2kubWFpbkJrZ307CiAgb3BhY2l0eTogMC41Owp9CgouZWRnZUxhYmVsIC5sYWJlbCByZWN0IHsKICBmaWxsOiAke2kubGFiZWxCYWNrZ3JvdW5kQ29sb3J9OwogIG9wYWNpdHk6IDAuNTsKfQouZWRnZUxhYmVsIC5sYWJlbCB0ZXh0IHsKICBmaWxsOiAke2kudHJhbnNpdGlvbkxhYmVsQ29sb3J8fGkudGVydGlhcnlUZXh0Q29sb3J9Owp9Ci5sYWJlbCBkaXYgLmVkZ2VMYWJlbCB7CiAgY29sb3I6ICR7aS50cmFuc2l0aW9uTGFiZWxDb2xvcnx8aS50ZXJ0aWFyeVRleHRDb2xvcn07Cn0KCi5zdGF0ZUxhYmVsIHRleHQgewogIGZpbGw6ICR7aS5zdGF0ZUxhYmVsQ29sb3J9OwogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLm5vZGUgY2lyY2xlLnN0YXRlLXN0YXJ0IHsKICBmaWxsOiAke2kuc3BlY2lhbFN0YXRlQ29sb3J9OwogIHN0cm9rZTogJHtpLnNwZWNpYWxTdGF0ZUNvbG9yfTsKfQoKLm5vZGUgLmZvcmstam9pbiB7CiAgZmlsbDogJHtpLnNwZWNpYWxTdGF0ZUNvbG9yfTsKICBzdHJva2U6ICR7aS5zcGVjaWFsU3RhdGVDb2xvcn07Cn0KCi5ub2RlIGNpcmNsZS5zdGF0ZS1lbmQgewogIGZpbGw6ICR7aS5pbm5lckVuZEJhY2tncm91bmR9OwogIHN0cm9rZTogJHtpLmJhY2tncm91bmR9OwogIHN0cm9rZS13aWR0aDogMS41Cn0KLmVuZC1zdGF0ZS1pbm5lciB7CiAgZmlsbDogJHtpLmNvbXBvc2l0ZUJhY2tncm91bmR8fGkuYmFja2dyb3VuZH07CiAgLy8gc3Ryb2tlOiAke2kuYmFja2dyb3VuZH07CiAgc3Ryb2tlLXdpZHRoOiAxLjUKfQoKLm5vZGUgcmVjdCB7CiAgZmlsbDogJHtpLnN0YXRlQmtnfHxpLm1haW5Ca2d9OwogIHN0cm9rZTogJHtpLnN0YXRlQm9yZGVyfHxpLm5vZGVCb3JkZXJ9OwogIHN0cm9rZS13aWR0aDogMXB4Owp9Ci5ub2RlIHBvbHlnb24gewogIGZpbGw6ICR7aS5tYWluQmtnfTsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTs7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHsKICBmaWxsOiAke2kubGluZUNvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3QgewogIGZpbGw6ICR7aS5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR9OwogIHN0cm9rZTogJHtpLnN0YXRlQm9yZGVyfHxpLm5vZGVCb3JkZXJ9OwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgouY2x1c3Rlci1sYWJlbCwgLm5vZGVMYWJlbCB7CiAgY29sb3I6ICR7aS5zdGF0ZUxhYmVsQ29sb3J9Owp9Cgouc3RhdGVkaWFncmFtLWNsdXN0ZXIgcmVjdC5vdXRlciB7CiAgcng6IDVweDsKICByeTogNXB4Owp9Ci5zdGF0ZWRpYWdyYW0tc3RhdGUgLmRpdmlkZXIgewogIHN0cm9rZTogJHtpLnN0YXRlQm9yZGVyfHxpLm5vZGVCb3JkZXJ9Owp9Cgouc3RhdGVkaWFncmFtLXN0YXRlIC50aXRsZS1zdGF0ZSB7CiAgcng6IDVweDsKICByeTogNXB4Owp9Ci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIgewogIGZpbGw6ICR7aS5jb21wb3NpdGVCYWNrZ3JvdW5kfHxpLmJhY2tncm91bmR9Owp9Ci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci1hbHQgLmlubmVyIHsKICBmaWxsOiAke2kuYWx0QmFja2dyb3VuZD9pLmFsdEJhY2tncm91bmQ6IiNlZmVmZWYifTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7CiAgcng6MDsKICByeTowOwp9Cgouc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuYmFzaWMgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuZGl2aWRlciB7CiAgc3Ryb2tlLWRhc2hhcnJheTogMTAsMTA7CiAgZmlsbDogJHtpLmFsdEJhY2tncm91bmQ/aS5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIn07Cn0KCi5ub3RlLWVkZ2UgewogIHN0cm9rZS1kYXNoYXJyYXk6IDU7Cn0KCi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHsKICBmaWxsOiAke2kubm90ZUJrZ0NvbG9yfTsKICBzdHJva2U6ICR7aS5ub3RlQm9yZGVyQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMXB4OwogIHJ4OiAwOwogIHJ5OiAwOwp9Ci5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHsKICBmaWxsOiAke2kubm90ZUJrZ0NvbG9yfTsKICBzdHJva2U6ICR7aS5ub3RlQm9yZGVyQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMXB4OwogIHJ4OiAwOwogIHJ5OiAwOwp9Cgouc3RhdGVkaWFncmFtLW5vdGUgdGV4dCB7CiAgZmlsbDogJHtpLm5vdGVUZXh0Q29sb3J9Owp9Cgouc3RhdGVkaWFncmFtLW5vdGUgLm5vZGVMYWJlbCB7CiAgY29sb3I6ICR7aS5ub3RlVGV4dENvbG9yfTsKfQouc3RhdGVkaWFncmFtIC5lZGdlTGFiZWwgewogIGNvbG9yOiByZWQ7IC8vICR7aS5ub3RlVGV4dENvbG9yfTsKfQoKI2RlcGVuZGVuY3lTdGFydCwgI2RlcGVuZGVuY3lFbmQgewogIGZpbGw6ICR7aS5saW5lQ29sb3J9OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9Cgouc3RhdGVkaWFncmFtVGl0bGVUZXh0IHsKICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIGZvbnQtc2l6ZTogMThweDsKICBmaWxsOiAke2kudGV4dENvbG9yfTsKfQpgLFJndD17fSxpVWU9KGksYSk9PntSZ3RbaV09YX0sc1VlPWk9PlJndFtpXSxianQ9KCk9Pk9iamVjdC5rZXlzKFJndCksYVVlPXtnZXQ6c1VlLHNldDppVWUsa2V5czpianQsc2l6ZTooKT0+Ymp0KCkubGVuZ3RofSxvVWU9aT0+aS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwic3RhcnQtc3RhdGUiKS5hdHRyKCJyIixPZSgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeCIsT2UoKS5zdGF0ZS5wYWRkaW5nK09lKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN5IixPZSgpLnN0YXRlLnBhZGRpbmcrT2UoKS5zdGF0ZS5zaXplVW5pdCksY1VlPWk9PmkuYXBwZW5kKCJsaW5lIikuc3R5bGUoInN0cm9rZSIsImdyZXkiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMiKS5hdHRyKCJ4MSIsT2UoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MiIsT2UoKS5zdGF0ZS50ZXh0SGVpZ2h0KjIpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksdVVlPShpLGEpPT57Y29uc3QgZj1pLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIqT2UoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixPZSgpLnN0YXRlLnRleHRIZWlnaHQrMipPZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIsT2UoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoYS5pZCkscD1mLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsT2UoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixPZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixwLndpZHRoKzIqT2UoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHAuaGVpZ2h0KzIqT2UoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIsT2UoKS5zdGF0ZS5yYWRpdXMpLGZ9LGxVZT0oaSxhKT0+e2NvbnN0IGY9ZnVuY3Rpb24oTixSLHope2NvbnN0IFc9Ti5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsMipPZSgpLnN0YXRlLnBhZGRpbmcpLnRleHQoUik7enx8Vy5hdHRyKCJkeSIsT2UoKS5zdGF0ZS50ZXh0SGVpZ2h0KX0sdz1pLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIqT2UoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixPZSgpLnN0YXRlLnRleHRIZWlnaHQrMS4zKk9lKCkuc3RhdGUucGFkZGluZykuYXR0cigiZm9udC1zaXplIixPZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChhLmRlc2NyaXB0aW9uc1swXSkubm9kZSgpLmdldEJCb3goKSxtPXcuaGVpZ2h0LGI9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixPZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLG0rT2UoKS5zdGF0ZS5wYWRkaW5nKi40K09lKCkuc3RhdGUuZGl2aWRlck1hcmdpbitPZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoImNsYXNzIiwic3RhdGUtZGVzY3JpcHRpb24iKTtsZXQgRT0hMCxfPSEwO2EuZGVzY3JpcHRpb25zLmZvckVhY2goZnVuY3Rpb24oTil7RXx8KGYoYixOLF8pLF89ITEpLEU9ITF9KTtjb25zdCBBPWkuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLE9lKCkuc3RhdGUucGFkZGluZykuYXR0cigieTEiLE9lKCkuc3RhdGUucGFkZGluZyttK09lKCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsT2UoKS5zdGF0ZS5wYWRkaW5nK20rT2UoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoImNsYXNzIiwiZGVzY3ItZGl2aWRlciIpLEk9Yi5ub2RlKCkuZ2V0QkJveCgpLEI9TWF0aC5tYXgoSS53aWR0aCx3LndpZHRoKTtyZXR1cm4gQS5hdHRyKCJ4MiIsQiszKk9lKCkuc3RhdGUucGFkZGluZyksaS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixPZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLE9lKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLEIrMipPZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsSS5oZWlnaHQrbSsyKk9lKCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLE9lKCkuc3RhdGUucmFkaXVzKSxpfSxoVWU9KGksYSxmKT0+e2NvbnN0IHA9T2UoKS5zdGF0ZS5wYWRkaW5nLHc9MipPZSgpLnN0YXRlLnBhZGRpbmcsbT1pLm5vZGUoKS5nZXRCQm94KCksYj1tLndpZHRoLEU9bS54LF89aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixPZSgpLnN0YXRlLnRpdGxlU2hpZnQpLmF0dHIoImZvbnQtc2l6ZSIsT2UoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoYS5pZCksST1fLm5vZGUoKS5nZXRCQm94KCkud2lkdGgrdztsZXQgQj1NYXRoLm1heChJLGIpO0I9PT1iJiYoQj1CK3cpO2xldCBOO2NvbnN0IFI9aS5ub2RlKCkuZ2V0QkJveCgpO2EuZG9jLE49RS1wLEk+YiYmKE49KGItQikvMitwKSxNYXRoLmFicyhFLVIueCk8cCYmST5iJiYoTj1FLShJLWIpLzIpO2NvbnN0IHo9MS1PZSgpLnN0YXRlLnRleHRIZWlnaHQ7cmV0dXJuIGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsTikuYXR0cigieSIseikuYXR0cigiY2xhc3MiLGY/ImFsdC1jb21wb3NpdCI6ImNvbXBvc2l0IikuYXR0cigid2lkdGgiLEIpLmF0dHIoImhlaWdodCIsUi5oZWlnaHQrT2UoKS5zdGF0ZS50ZXh0SGVpZ2h0K09lKCkuc3RhdGUudGl0bGVTaGlmdCsxKS5hdHRyKCJyeCIsIjAiKSxfLmF0dHIoIngiLE4rcCksSTw9YiYmXy5hdHRyKCJ4IixFKyhCLXcpLzItSS8yK3ApLGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsTikuYXR0cigieSIsT2UoKS5zdGF0ZS50aXRsZVNoaWZ0LU9lKCkuc3RhdGUudGV4dEhlaWdodC1PZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixCKS5hdHRyKCJoZWlnaHQiLE9lKCkuc3RhdGUudGV4dEhlaWdodCozKS5hdHRyKCJyeCIsT2UoKS5zdGF0ZS5yYWRpdXMpLGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsTikuYXR0cigieSIsT2UoKS5zdGF0ZS50aXRsZVNoaWZ0LU9lKCkuc3RhdGUudGV4dEhlaWdodC1PZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixCKS5hdHRyKCJoZWlnaHQiLFIuaGVpZ2h0KzMrMipPZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInJ4IixPZSgpLnN0YXRlLnJhZGl1cyksaX0sZlVlPWk9PihpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJlbmQtc3RhdGUtb3V0ZXIiKS5hdHRyKCJyIixPZSgpLnN0YXRlLnNpemVVbml0K09lKCkuc3RhdGUubWluaVBhZGRpbmcpLmF0dHIoImN4IixPZSgpLnN0YXRlLnBhZGRpbmcrT2UoKS5zdGF0ZS5zaXplVW5pdCtPZSgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeSIsT2UoKS5zdGF0ZS5wYWRkaW5nK09lKCkuc3RhdGUuc2l6ZVVuaXQrT2UoKS5zdGF0ZS5taW5pUGFkZGluZyksaS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLWlubmVyIikuYXR0cigiciIsT2UoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLE9lKCkuc3RhdGUucGFkZGluZytPZSgpLnN0YXRlLnNpemVVbml0KzIpLmF0dHIoImN5IixPZSgpLnN0YXRlLnBhZGRpbmcrT2UoKS5zdGF0ZS5zaXplVW5pdCsyKSksZFVlPShpLGEpPT57bGV0IGY9T2UoKS5zdGF0ZS5mb3JrV2lkdGgscD1PZSgpLnN0YXRlLmZvcmtIZWlnaHQ7aWYoYS5wYXJlbnRJZCl7bGV0IHc9ZjtmPXAscD13fXJldHVybiBpLmFwcGVuZCgicmVjdCIpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJ3aWR0aCIsZikuYXR0cigiaGVpZ2h0IixwKS5hdHRyKCJ4IixPZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLE9lKCkuc3RhdGUucGFkZGluZyl9LGdVZT0oaSxhLGYscCk9PntsZXQgdz0wO2NvbnN0IG09cC5hcHBlbmQoInRleHQiKTttLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksbS5hdHRyKCJjbGFzcyIsIm5vdGVUZXh0Iik7bGV0IGI9aS5yZXBsYWNlKC9cclxuL2csIjxici8+Iik7Yj1iLnJlcGxhY2UoL1xuL2csIjxici8+Iik7Y29uc3QgRT1iLnNwbGl0KEtyLmxpbmVCcmVha1JlZ2V4KTtsZXQgXz0xLjI1Kk9lKCkuc3RhdGUubm90ZU1hcmdpbjtmb3IoY29uc3QgQSBvZiBFKXtjb25zdCBJPUEudHJpbSgpO2lmKEkubGVuZ3RoPjApe2NvbnN0IEI9bS5hcHBlbmQoInRzcGFuIik7aWYoQi50ZXh0KEkpLF89PT0wKXtjb25zdCBOPUIubm9kZSgpLmdldEJCb3goKTtfKz1OLmhlaWdodH13Kz1fLEIuYXR0cigieCIsYStPZSgpLnN0YXRlLm5vdGVNYXJnaW4pLEIuYXR0cigieSIsZit3KzEuMjUqT2UoKS5zdGF0ZS5ub3RlTWFyZ2luKX19cmV0dXJue3RleHRXaWR0aDptLm5vZGUoKS5nZXRCQm94KCkud2lkdGgsdGV4dEhlaWdodDp3fX0scFVlPShpLGEpPT57YS5hdHRyKCJjbGFzcyIsInN0YXRlLW5vdGUiKTtjb25zdCBmPWEuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsT2UoKS5zdGF0ZS5wYWRkaW5nKSxwPWEuYXBwZW5kKCJnIikse3RleHRXaWR0aDp3LHRleHRIZWlnaHQ6bX09Z1VlKGksMCwwLHApO3JldHVybiBmLmF0dHIoImhlaWdodCIsbSsyKk9lKCkuc3RhdGUubm90ZU1hcmdpbiksZi5hdHRyKCJ3aWR0aCIsdytPZSgpLnN0YXRlLm5vdGVNYXJnaW4qMiksZn0sd2p0PWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hLmlkLHA9e2lkOmYsbGFiZWw6YS5pZCx3aWR0aDowLGhlaWdodDowfSx3PWkuYXBwZW5kKCJnIikuYXR0cigiaWQiLGYpLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpO2EudHlwZT09PSJzdGFydCImJm9VZSh3KSxhLnR5cGU9PT0iZW5kIiYmZlVlKHcpLChhLnR5cGU9PT0iZm9yayJ8fGEudHlwZT09PSJqb2luIikmJmRVZSh3LGEpLGEudHlwZT09PSJub3RlIiYmcFVlKGEubm90ZS50ZXh0LHcpLGEudHlwZT09PSJkaXZpZGVyIiYmY1VlKHcpLGEudHlwZT09PSJkZWZhdWx0IiYmYS5kZXNjcmlwdGlvbnMubGVuZ3RoPT09MCYmdVVlKHcsYSksYS50eXBlPT09ImRlZmF1bHQiJiZhLmRlc2NyaXB0aW9ucy5sZW5ndGg+MCYmbFVlKHcsYSk7Y29uc3QgbT13Lm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIHAud2lkdGg9bS53aWR0aCsyKk9lKCkuc3RhdGUucGFkZGluZyxwLmhlaWdodD1tLmhlaWdodCsyKk9lKCkuc3RhdGUucGFkZGluZyxhVWUuc2V0KGYscCkscH07bGV0IHZqdD0wO2NvbnN0IGJVZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1mdW5jdGlvbihfKXtzd2l0Y2goXyl7Y2FzZSAkNS5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT046cmV0dXJuImFnZ3JlZ2F0aW9uIjtjYXNlICQ1LnJlbGF0aW9uVHlwZS5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSAkNS5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT046cmV0dXJuImNvbXBvc2l0aW9uIjtjYXNlICQ1LnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZOnJldHVybiJkZXBlbmRlbmN5In19O2EucG9pbnRzPWEucG9pbnRzLmZpbHRlcihfPT4hTnVtYmVyLmlzTmFOKF8ueSkpO2NvbnN0IHc9YS5wb2ludHMsbT1FNSgpLngoZnVuY3Rpb24oXyl7cmV0dXJuIF8ueH0pLnkoZnVuY3Rpb24oXyl7cmV0dXJuIF8ueX0pLmN1cnZlKEhQKSxiPWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsbSh3KSkuYXR0cigiaWQiLCJlZGdlIit2anQpLmF0dHIoImNsYXNzIiwidHJhbnNpdGlvbiIpO2xldCBFPSIiO2lmKE9lKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKEU9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsRT1FLnJlcGxhY2UoL1woL2csIlxcKCIpLEU9RS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksYi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrRSsiIyIrcCgkNS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWSkrIkVuZCkiKSxmLnRpdGxlIT09dm9pZCAwKXtjb25zdCBfPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzdGF0ZUxhYmVsIikse3g6QSx5Okl9PSRhLmNhbGNMYWJlbFBvc2l0aW9uKGEucG9pbnRzKSxCPUtyLmdldFJvd3MoZi50aXRsZSk7bGV0IE49MDtjb25zdCBSPVtdO2xldCB6PTAsVz0wO2ZvcihsZXQgYXQ9MDthdDw9Qi5sZW5ndGg7YXQrKyl7Y29uc3QgYnQ9Xy5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoQlthdF0pLmF0dHIoIngiLEEpLmF0dHIoInkiLEkrTiksbXQ9YnQubm9kZSgpLmdldEJCb3goKTt6PU1hdGgubWF4KHosbXQud2lkdGgpLFc9TWF0aC5taW4oVyxtdC54KSxVdC5pbmZvKG10LngsQSxJK04pLE49PT0wJiYoTj1idC5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxVdC5pbmZvKCJUaXRsZSBoZWlnaHQiLE4sSSkpLFIucHVzaChidCl9bGV0IGV0PU4qQi5sZW5ndGg7aWYoQi5sZW5ndGg+MSl7Y29uc3QgYXQ9KEIubGVuZ3RoLTEpKk4qLjU7Ui5mb3JFYWNoKChidCxtdCk9PmJ0LmF0dHIoInkiLEkrbXQqTi1hdCkpLGV0PU4qQi5sZW5ndGh9Y29uc3Qgc3Q9Xy5ub2RlKCkuZ2V0QkJveCgpO18uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4IixBLXovMi1PZSgpLnN0YXRlLnBhZGRpbmcvMikuYXR0cigieSIsSS1ldC8yLU9lKCkuc3RhdGUucGFkZGluZy8yLTMuNSkuYXR0cigid2lkdGgiLHorT2UoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGV0K09lKCkuc3RhdGUucGFkZGluZyksVXQuaW5mbyhzdCl9dmp0Kyt9O2xldCBxYjtjb25zdCBqZ3Q9e30sd1VlPWZ1bmN0aW9uKCl7fSx2VWU9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxtVWU9ZnVuY3Rpb24oaSxhLGYscCl7cWI9T2UoKS5zdGF0ZTtjb25zdCB3PU9lKCkuc2VjdXJpdHlMZXZlbDtsZXQgbTt3PT09InNhbmRib3giJiYobT15cigiI2kiK2EpKTtjb25zdCBiPXlyKHc9PT0ic2FuZGJveCI/bS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksRT13PT09InNhbmRib3giP20ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7VXQuZGVidWcoIlJlbmRlcmluZyBkaWFncmFtICIraSk7Y29uc3QgXz1iLnNlbGVjdChgW2lkPScke2F9J11gKTt2VWUoXyk7Y29uc3QgQT1wLmRiLmdldFJvb3REb2MoKTttanQoQSxfLHZvaWQgMCwhMSxiLEUscCk7Y29uc3QgST1xYi5wYWRkaW5nLEI9Xy5ub2RlKCkuZ2V0QkJveCgpLE49Qi53aWR0aCtJKjIsUj1CLmhlaWdodCtJKjIsej1OKjEuNzU7azAoXyxSLHoscWIudXNlTWF4V2lkdGgpLF8uYXR0cigidmlld0JveCIsYCR7Qi54LXFiLnBhZGRpbmd9ICAke0IueS1xYi5wYWRkaW5nfSBgK04rIiAiK1IpfSx5VWU9aT0+aT9pLmxlbmd0aCpxYi5mb250U2l6ZUZhY3RvcjoxLG1qdD0oaSxhLGYscCx3LG0sYik9Pntjb25zdCBFPW5ldyBjMSh7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pO2xldCBfLEE9ITA7Zm9yKF89MDtfPGkubGVuZ3RoO18rKylpZihpW19dLnN0bXQ9PT0icmVsYXRpb24iKXtBPSExO2JyZWFrfWY/RS5zZXRHcmFwaCh7cmFua2RpcjoiTFIiLG11bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITAscmFua2VyOiJ0aWdodC10cmVlIixyYW5rc2VwOkE/MTpxYi5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6QT8xOjUwLGlzTXVsdGlHcmFwaDohMH0pOkUuc2V0R3JhcGgoe3JhbmtkaXI6IlRCIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtzZXA6QT8xOnFiLmVkZ2VMZW5ndGhGYWN0b3Isbm9kZVNlcDpBPzE6NTAscmFua2VyOiJ0aWdodC10cmVlIixpc011bHRpR3JhcGg6ITB9KSxFLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pLGIuZGIuZXh0cmFjdChpKTtjb25zdCBJPWIuZGIuZ2V0U3RhdGVzKCksQj1iLmRiLmdldFJlbGF0aW9ucygpLE49T2JqZWN0LmtleXMoSSk7Zm9yKGNvbnN0IHN0IG9mIE4pe2NvbnN0IGF0PUlbc3RdO2YmJihhdC5wYXJlbnRJZD1mKTtsZXQgYnQ7aWYoYXQuZG9jKXtsZXQgbXQ9YS5hcHBlbmQoImciKS5hdHRyKCJpZCIsYXQuaWQpLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpO2J0PW1qdChhdC5kb2MsbXQsYXQuaWQsIXAsdyxtLGIpO3ttdD1oVWUobXQsYXQscCk7bGV0IHl0PW10Lm5vZGUoKS5nZXRCQm94KCk7YnQud2lkdGg9eXQud2lkdGgsYnQuaGVpZ2h0PXl0LmhlaWdodCtxYi5wYWRkaW5nLzIsamd0W2F0LmlkXT17eTpxYi5jb21wb3NpdFRpdGxlU2l6ZX19fWVsc2UgYnQ9d2p0KGEsYXQpO2lmKGF0Lm5vdGUpe2NvbnN0IG10PXtkZXNjcmlwdGlvbnM6W10saWQ6YXQuaWQrIi1ub3RlIixub3RlOmF0Lm5vdGUsdHlwZToibm90ZSJ9LHl0PXdqdChhLG10KTthdC5ub3RlLnBvc2l0aW9uPT09ImxlZnQgb2YiPyhFLnNldE5vZGUoYnQuaWQrIi1ub3RlIix5dCksRS5zZXROb2RlKGJ0LmlkLGJ0KSk6KEUuc2V0Tm9kZShidC5pZCxidCksRS5zZXROb2RlKGJ0LmlkKyItbm90ZSIseXQpKSxFLnNldFBhcmVudChidC5pZCxidC5pZCsiLWdyb3VwIiksRS5zZXRQYXJlbnQoYnQuaWQrIi1ub3RlIixidC5pZCsiLWdyb3VwIil9ZWxzZSBFLnNldE5vZGUoYnQuaWQsYnQpfVV0LmRlYnVnKCJDb3VudD0iLEUubm9kZUNvdW50KCksRSk7bGV0IFI9MDtCLmZvckVhY2goZnVuY3Rpb24oc3Qpe1IrKyxVdC5kZWJ1ZygiU2V0dGluZyBlZGdlIixzdCksRS5zZXRFZGdlKHN0LmlkMSxzdC5pZDIse3JlbGF0aW9uOnN0LHdpZHRoOnlVZShzdC50aXRsZSksaGVpZ2h0OnFiLmxhYmVsSGVpZ2h0KktyLmdldFJvd3Moc3QudGl0bGUpLmxlbmd0aCxsYWJlbHBvczoiYyJ9LCJpZCIrUil9KSxhTChFKSxVdC5kZWJ1ZygiR3JhcGggYWZ0ZXIgbGF5b3V0IixFLm5vZGVzKCkpO2NvbnN0IHo9YS5ub2RlKCk7RS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oc3Qpe3N0IT09dm9pZCAwJiZFLm5vZGUoc3QpIT09dm9pZCAwPyhVdC53YXJuKCJOb2RlICIrc3QrIjogIitKU09OLnN0cmluZ2lmeShFLm5vZGUoc3QpKSksdy5zZWxlY3QoIiMiK3ouaWQrIiAjIitzdCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKEUubm9kZShzdCkueC1FLm5vZGUoc3QpLndpZHRoLzIpKyIsIisoRS5ub2RlKHN0KS55KyhqZ3Rbc3RdP2pndFtzdF0ueTowKS1FLm5vZGUoc3QpLmhlaWdodC8yKSsiICkiKSx3LnNlbGVjdCgiIyIrei5pZCsiICMiK3N0KS5hdHRyKCJkYXRhLXgtc2hpZnQiLEUubm9kZShzdCkueC1FLm5vZGUoc3QpLndpZHRoLzIpLG0ucXVlcnlTZWxlY3RvckFsbCgiIyIrei5pZCsiICMiK3N0KyIgLmRpdmlkZXIiKS5mb3JFYWNoKGJ0PT57Y29uc3QgbXQ9YnQucGFyZW50RWxlbWVudDtsZXQgeXQ9MCxmdD0wO210JiYobXQucGFyZW50RWxlbWVudCYmKHl0PW10LnBhcmVudEVsZW1lbnQuZ2V0QkJveCgpLndpZHRoKSxmdD1wYXJzZUludChtdC5nZXRBdHRyaWJ1dGUoImRhdGEteC1zaGlmdCIpLDEwKSxOdW1iZXIuaXNOYU4oZnQpJiYoZnQ9MCkpLGJ0LnNldEF0dHJpYnV0ZSgieDEiLDAtZnQrOCksYnQuc2V0QXR0cmlidXRlKCJ4MiIseXQtZnQtOCl9KSk6VXQuZGVidWcoIk5vIE5vZGUgIitzdCsiOiAiK0pTT04uc3RyaW5naWZ5KEUubm9kZShzdCkpKX0pO2xldCBXPXouZ2V0QkJveCgpO0UuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHN0KXtzdCE9PXZvaWQgMCYmRS5lZGdlKHN0KSE9PXZvaWQgMCYmKFV0LmRlYnVnKCJFZGdlICIrc3QudisiIC0+ICIrc3QudysiOiAiK0pTT04uc3RyaW5naWZ5KEUuZWRnZShzdCkpKSxiVWUoYSxFLmVkZ2Uoc3QpLEUuZWRnZShzdCkucmVsYXRpb24pKX0pLFc9ei5nZXRCQm94KCk7Y29uc3QgZXQ9e2lkOmZ8fCJyb290IixsYWJlbDpmfHwicm9vdCIsd2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIGV0LndpZHRoPVcud2lkdGgrMipxYi5wYWRkaW5nLGV0LmhlaWdodD1XLmhlaWdodCsyKnFiLnBhZGRpbmcsVXQuZGVidWcoIkRvYyByZW5kZXJlZCIsZXQsRSksZXR9LHhVZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOmVqdCxkYjokNSxyZW5kZXJlcjp7c2V0Q29uZjp3VWUsZHJhdzptVWV9LHN0eWxlczpwanQsaW5pdDppPT57aS5zdGF0ZXx8KGkuc3RhdGU9e30pLGkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsJDUuY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFFZPSJyZWN0IiwkZ3Q9InJlY3RXaXRoVGl0bGUiLGtVZT0ic3RhcnQiLEVVZT0iZW5kIixUVWU9ImRpdmlkZXIiLENVZT0icm91bmRlZFdpdGhUaXRsZSIsX1VlPSJub3RlIixTVWU9Im5vdGVHcm91cCIsdkw9InN0YXRlZGlhZ3JhbSIsQVVlPWAke3ZMfS1zdGF0ZWAseWp0PSJ0cmFuc2l0aW9uIixMVWU9Im5vdGUiLE1VZT1gJHt5anR9IG5vdGUtZWRnZWAsRFVlPWAke3ZMfS0ke0xVZX1gLElVZT1gJHt2TH0tY2x1c3RlcmAsT1VlPWAke3ZMfS1jbHVzdGVyLWFsdGAseGp0PSJwYXJlbnQiLGtqdD0ibm90ZSIsUFVlPSJzdGF0ZSIsemd0PSItLS0tIixGVWU9YCR7emd0fSR7a2p0fWAsRWp0PWAke3pndH0ke3hqdH1gLFRqdD0iZmlsbDpub25lIixDanQ9ImZpbGw6ICMzMzMiLF9qdD0iYyIsU2p0PSJ0ZXh0IixBanQ9Im5vcm1hbCI7bGV0IFpZPXt9LGtrPTA7Y29uc3QgTlVlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IGYgb2YgYSlpW2ZdfSxCVWU9ZnVuY3Rpb24oaSxhKXtyZXR1cm4gYS5kYi5leHRyYWN0KGEuZGIuZ2V0Um9vdERvY1YyKCkpLGEuZGIuZ2V0Q2xhc3NlcygpfTtmdW5jdGlvbiBSVWUoaSl7cmV0dXJuIGk9PW51bGw/IiI6aS5jbGFzc2VzP2kuY2xhc3Nlcy5qb2luKCIgIik6IiJ9ZnVuY3Rpb24gcWd0KGk9IiIsYT0wLGY9IiIscD16Z3Qpe2NvbnN0IHc9ZiE9PW51bGwmJmYubGVuZ3RoPjA/YCR7cH0ke2Z9YDoiIjtyZXR1cm5gJHtQVWV9LSR7aX0ke3d9LSR7YX1gfWNvbnN0IEpGPShpLGEsZixwLHcsbSk9Pntjb25zdCBiPWYuaWQsRT1SVWUocFtiXSk7aWYoYiE9PSJyb290Iil7bGV0IF89UVk7Zi5zdGFydD09PSEwJiYoXz1rVWUpLGYuc3RhcnQ9PT0hMSYmKF89RVVlKSxmLnR5cGUhPT1LRiYmKF89Zi50eXBlKSxaWVtiXXx8KFpZW2JdPXtpZDpiLHNoYXBlOl8sZGVzY3JpcHRpb246S3Iuc2FuaXRpemVUZXh0KGIsT2UoKSksY2xhc3NlczpgJHtFfSAke0FVZX1gfSk7Y29uc3QgQT1aWVtiXTtmLmRlc2NyaXB0aW9uJiYoQXJyYXkuaXNBcnJheShBLmRlc2NyaXB0aW9uKT8oQS5zaGFwZT0kZ3QsQS5kZXNjcmlwdGlvbi5wdXNoKGYuZGVzY3JpcHRpb24pKTpBLmRlc2NyaXB0aW9uLmxlbmd0aD4wPyhBLnNoYXBlPSRndCxBLmRlc2NyaXB0aW9uPT09Yj9BLmRlc2NyaXB0aW9uPVtmLmRlc2NyaXB0aW9uXTpBLmRlc2NyaXB0aW9uPVtBLmRlc2NyaXB0aW9uLGYuZGVzY3JpcHRpb25dKTooQS5zaGFwZT1RWSxBLmRlc2NyaXB0aW9uPWYuZGVzY3JpcHRpb24pLEEuZGVzY3JpcHRpb249S3Iuc2FuaXRpemVUZXh0T3JBcnJheShBLmRlc2NyaXB0aW9uLE9lKCkpKSxBLmRlc2NyaXB0aW9uLmxlbmd0aD09PTEmJkEuc2hhcGU9PT0kZ3QmJihBLnNoYXBlPVFZKSwhQS50eXBlJiZmLmRvYyYmKFV0LmluZm8oIlNldHRpbmcgY2x1c3RlciBmb3IgIixiLEhndChmKSksQS50eXBlPSJncm91cCIsQS5kaXI9SGd0KGYpLEEuc2hhcGU9Zi50eXBlPT09bmp0P1RVZTpDVWUsQS5jbGFzc2VzPUEuY2xhc3NlcysiICIrSVVlKyIgIisobT9PVWU6IiIpKTtjb25zdCBJPXtsYWJlbFN0eWxlOiIiLHNoYXBlOkEuc2hhcGUsbGFiZWxUZXh0OkEuZGVzY3JpcHRpb24sY2xhc3NlczpBLmNsYXNzZXMsc3R5bGU6IiIsaWQ6YixkaXI6QS5kaXIsZG9tSWQ6cWd0KGIsa2spLHR5cGU6QS50eXBlLHBhZGRpbmc6MTV9O2lmKEkuY2VudGVyTGFiZWw9ITAsZi5ub3RlKXtjb25zdCBCPXtsYWJlbFN0eWxlOiIiLHNoYXBlOl9VZSxsYWJlbFRleHQ6Zi5ub3RlLnRleHQsY2xhc3NlczpEVWUsc3R5bGU6IiIsaWQ6YitGVWUrIi0iK2trLGRvbUlkOnFndChiLGtrLGtqdCksdHlwZTpBLnR5cGUscGFkZGluZzoxNX0sTj17bGFiZWxTdHlsZToiIixzaGFwZTpTVWUsbGFiZWxUZXh0OmYubm90ZS50ZXh0LGNsYXNzZXM6QS5jbGFzc2VzLHN0eWxlOiIiLGlkOmIrRWp0LGRvbUlkOnFndChiLGtrLHhqdCksdHlwZToiZ3JvdXAiLHBhZGRpbmc6MH07a2srKztjb25zdCBSPWIrRWp0O2kuc2V0Tm9kZShSLE4pLGkuc2V0Tm9kZShCLmlkLEIpLGkuc2V0Tm9kZShiLEkpLGkuc2V0UGFyZW50KGIsUiksaS5zZXRQYXJlbnQoQi5pZCxSKTtsZXQgej1iLFc9Qi5pZDtmLm5vdGUucG9zaXRpb249PT0ibGVmdCBvZiImJih6PUIuaWQsVz1iKSxpLnNldEVkZ2UoeixXLHthcnJvd2hlYWQ6Im5vbmUiLGFycm93VHlwZToiIixzdHlsZTpUanQsbGFiZWxTdHlsZToiIixjbGFzc2VzOk1VZSxhcnJvd2hlYWRTdHlsZTpDanQsbGFiZWxwb3M6X2p0LGxhYmVsVHlwZTpTanQsdGhpY2tuZXNzOkFqdH0pfWVsc2UgaS5zZXROb2RlKGIsSSl9YSYmYS5pZCE9PSJyb290IiYmKFV0LnRyYWNlKCJTZXR0aW5nIG5vZGUgIixiLCIgdG8gYmUgY2hpbGQgb2YgaXRzIHBhcmVudCAiLGEuaWQpLGkuc2V0UGFyZW50KGIsYS5pZCkpLGYuZG9jJiYoVXQudHJhY2UoIkFkZGluZyBub2RlcyBjaGlsZHJlbiAiKSxqVWUoaSxmLGYuZG9jLHAsdywhbSkpfSxqVWU9KGksYSxmLHAsdyxtKT0+e1V0LnRyYWNlKCJpdGVtcyIsZiksZi5mb3JFYWNoKGI9Pntzd2l0Y2goYi5zdG10KXtjYXNlIFVZOkpGKGksYSxiLHAsdyxtKTticmVhaztjYXNlIEtGOkpGKGksYSxiLHAsdyxtKTticmVhaztjYXNlIElndDp7SkYoaSxhLGIuc3RhdGUxLHAsdyxtKSxKRihpLGEsYi5zdGF0ZTIscCx3LG0pO2NvbnN0IEU9e2lkOiJlZGdlIitrayxhcnJvd2hlYWQ6Im5vcm1hbCIsYXJyb3dUeXBlRW5kOiJhcnJvd19iYXJiIixzdHlsZTpUanQsbGFiZWxTdHlsZToiIixsYWJlbDpLci5zYW5pdGl6ZVRleHQoYi5kZXNjcmlwdGlvbixPZSgpKSxhcnJvd2hlYWRTdHlsZTpDanQsbGFiZWxwb3M6X2p0LGxhYmVsVHlwZTpTanQsdGhpY2tuZXNzOkFqdCxjbGFzc2VzOnlqdH07aS5zZXRFZGdlKGIuc3RhdGUxLmlkLGIuc3RhdGUyLmlkLEUsa2spLGtrKyt9YnJlYWt9fSl9LEhndD0oaSxhPU5HZSk9PntsZXQgZj1hO2lmKGkuZG9jKWZvcihsZXQgcD0wO3A8aS5kb2MubGVuZ3RoO3ArKyl7Y29uc3Qgdz1pLmRvY1twXTt3LnN0bXQ9PT0iZGlyIiYmKGY9dy52YWx1ZSl9cmV0dXJuIGZ9LCRVZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOmVqdCxkYjokNSxyZW5kZXJlcjp7c2V0Q29uZjpOVWUsZ2V0Q2xhc3NlczpCVWUsZHJhdzphc3luYyBmdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKCJEcmF3aW5nIHN0YXRlIGRpYWdyYW0gKHYyKSIsYSksWlk9e30scC5kYi5nZXREaXJlY3Rpb24oKTtjb25zdHtzZWN1cml0eUxldmVsOncsc3RhdGU6bX09T2UoKSxiPW0ubm9kZVNwYWNpbmd8fDUwLEU9bS5yYW5rU3BhY2luZ3x8NTA7VXQuaW5mbyhwLmRiLmdldFJvb3REb2NWMigpKSxwLmRiLmV4dHJhY3QocC5kYi5nZXRSb290RG9jVjIoKSksVXQuaW5mbyhwLmRiLmdldFJvb3REb2NWMigpKTtjb25zdCBfPXAuZGIuZ2V0U3RhdGVzKCksQT1uZXcgYzEoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpIZ3QocC5kYi5nZXRSb290RG9jVjIoKSksbm9kZXNlcDpiLHJhbmtzZXA6RSxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7SkYoQSx2b2lkIDAscC5kYi5nZXRSb290RG9jVjIoKSxfLHAuZGIsITApO2xldCBJO3c9PT0ic2FuZGJveCImJihJPXlyKCIjaSIrYSkpO2NvbnN0IEI9eXIodz09PSJzYW5kYm94Ij9JLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKSxOPUIuc2VsZWN0KGBbaWQ9IiR7YX0iXWApLFI9Qi5zZWxlY3QoIiMiK2ErIiBnIik7YXdhaXQgTjB0KFIsQSxbImJhcmIiXSx2TCxhKTtjb25zdCB6PTg7JGEuaW5zZXJ0VGl0bGUoTiwic3RhdGVkaWFncmFtVGl0bGVUZXh0IixtLnRpdGxlVG9wTWFyZ2luLHAuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO2NvbnN0IFc9Ti5ub2RlKCkuZ2V0QkJveCgpLGV0PVcud2lkdGgreioyLHN0PVcuaGVpZ2h0K3oqMjtOLmF0dHIoImNsYXNzIix2TCk7Y29uc3QgYXQ9Ti5ub2RlKCkuZ2V0QkJveCgpO2swKE4sc3QsZXQsbS51c2VNYXhXaWR0aCk7Y29uc3QgYnQ9YCR7YXQueC16fSAke2F0Lnkten0gJHtldH0gJHtzdH1gO1V0LmRlYnVnKGB2aWV3Qm94ICR7YnR9YCksTi5hdHRyKCJ2aWV3Qm94IixidCk7Y29uc3QgbXQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2ErJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyk7Zm9yKGNvbnN0IHl0IG9mIG10KXtjb25zdCBmdD15dC5nZXRCQm94KCksdXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsUVkpO3V0LnNldEF0dHJpYnV0ZSgicngiLDApLHV0LnNldEF0dHJpYnV0ZSgicnkiLDApLHV0LnNldEF0dHJpYnV0ZSgid2lkdGgiLGZ0LndpZHRoKSx1dC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsZnQuaGVpZ2h0KSx5dC5pbnNlcnRCZWZvcmUodXQseXQuZmlyc3RDaGlsZCl9fX0sc3R5bGVzOnBqdCxpbml0Omk9PntpLnN0YXRlfHwoaS5zdGF0ZT17fSksaS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlPWkuYXJyb3dNYXJrZXJBYnNvbHV0ZSwkNS5jbGVhcigpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFZndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKEIsTixSLHope2ZvcihSPVJ8fHt9LHo9Qi5sZW5ndGg7ei0tO1JbQlt6XV09Tik7cmV0dXJuIFJ9LGE9WzYsOCwxMCwxMSwxMiwxNCwxNiwxNywxOF0sZj1bMSw5XSxwPVsxLDEwXSx3PVsxLDExXSxtPVsxLDEyXSxiPVsxLDEzXSxFPVsxLDE0XSxfPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxqb3VybmV5OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxORVdMSU5FOjEwLHRpdGxlOjExLGFjY190aXRsZToxMixhY2NfdGl0bGVfdmFsdWU6MTMsYWNjX2Rlc2NyOjE0LGFjY19kZXNjcl92YWx1ZToxNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjE2LHNlY3Rpb246MTcsdGFza05hbWU6MTgsdGFza0RhdGE6MTksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6ImpvdXJuZXkiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMToidGl0bGUiLDEyOiJhY2NfdGl0bGUiLDEzOiJhY2NfdGl0bGVfdmFsdWUiLDE0OiJhY2NfZGVzY3IiLDE1OiJhY2NfZGVzY3JfdmFsdWUiLDE2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxNzoic2VjdGlvbiIsMTg6InRhc2tOYW1lIiwxOToidGFza0RhdGEifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMl1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oTixSLHosVyxldCxzdCxhdCl7dmFyIGJ0PXN0Lmxlbmd0aC0xO3N3aXRjaChldCl7Y2FzZSAxOnJldHVybiBzdFtidC0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzpzdFtidC0xXS5wdXNoKHN0W2J0XSksdGhpcy4kPXN0W2J0LTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPXN0W2J0XTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6Vy5zZXREaWFncmFtVGl0bGUoc3RbYnRdLnN1YnN0cig2KSksdGhpcy4kPXN0W2J0XS5zdWJzdHIoNik7YnJlYWs7Y2FzZSA5OnRoaXMuJD1zdFtidF0udHJpbSgpLFcuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDEwOmNhc2UgMTE6dGhpcy4kPXN0W2J0XS50cmltKCksVy5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMTI6Vy5hZGRTZWN0aW9uKHN0W2J0XS5zdWJzdHIoOCkpLHRoaXMuJD1zdFtidF0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTM6Vy5hZGRUYXNrKHN0W2J0LTFdLHN0W2J0XSksdGhpcy4kPSJ0YXNrIjticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6ZiwxMjpwLDE0OncsMTY6bSwxNzpiLDE4OkV9LGkoYSxbMiw3XSx7MTpbMiwxXX0pLGkoYSxbMiwzXSksezk6MTUsMTE6ZiwxMjpwLDE0OncsMTY6bSwxNzpiLDE4OkV9LGkoYSxbMiw1XSksaShhLFsyLDZdKSxpKGEsWzIsOF0pLHsxMzpbMSwxNl19LHsxNTpbMSwxN119LGkoYSxbMiwxMV0pLGkoYSxbMiwxMl0pLHsxOTpbMSwxOF19LGkoYSxbMiw0XSksaShhLFsyLDldKSxpKGEsWzIsMTBdKSxpKGEsWzIsMTNdKV0sZGVmYXVsdEFjdGlvbnM6e30scGFyc2VFcnJvcjpmdW5jdGlvbihOLFIpe2lmKFIucmVjb3ZlcmFibGUpdGhpcy50cmFjZShOKTtlbHNle3ZhciB6PW5ldyBFcnJvcihOKTt0aHJvdyB6Lmhhc2g9Uix6fX0scGFyc2U6ZnVuY3Rpb24oTil7dmFyIFI9dGhpcyx6PVswXSxXPVtdLGV0PVtudWxsXSxzdD1bXSxhdD10aGlzLnRhYmxlLGJ0PSIiLG10PTAseXQ9MCxmdD0yLHV0PTEsdnQ9c3Quc2xpY2UuY2FsbChhcmd1bWVudHMsMSksWD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHB0PXt5eTp7fX07Zm9yKHZhciBVIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksVSkmJihwdC55eVtVXT10aGlzLnl5W1VdKTtYLnNldElucHV0KE4scHQueXkpLHB0Lnl5LmxleGVyPVgscHQueXkucGFyc2VyPXRoaXMsdHlwZW9mIFgueXlsbG9jPiJ1IiYmKFgueXlsbG9jPXt9KTt2YXIgVHQ9WC55eWxsb2M7c3QucHVzaChUdCk7dmFyIG50PVgub3B0aW9ucyYmWC5vcHRpb25zLnJhbmdlczt0eXBlb2YgcHQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9cHQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gSXQoKXt2YXIgU2U7cmV0dXJuIFNlPVcucG9wKCl8fFgubGV4KCl8fHV0LHR5cGVvZiBTZSE9Im51bWJlciImJihTZSBpbnN0YW5jZW9mIEFycmF5JiYoVz1TZSxTZT1XLnBvcCgpKSxTZT1SLnN5bWJvbHNfW1NlXXx8U2UpLFNlfWZvcih2YXIgT3QsQnQsRXQsWixDdD17fSx4dCxIdCxMZSxGdDs7KXtpZihCdD16W3oubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbQnRdP0V0PXRoaXMuZGVmYXVsdEFjdGlvbnNbQnRdOigoT3Q9PT1udWxsfHx0eXBlb2YgT3Q+InUiKSYmKE90PUl0KCkpLEV0PWF0W0J0XSYmYXRbQnRdW090XSksdHlwZW9mIEV0PiJ1Inx8IUV0Lmxlbmd0aHx8IUV0WzBdKXt2YXIgZ249IiI7RnQ9W107Zm9yKHh0IGluIGF0W0J0XSl0aGlzLnRlcm1pbmFsc19beHRdJiZ4dD5mdCYmRnQucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3h0XSsiJyIpO1guc2hvd1Bvc2l0aW9uP2duPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG10KzEpK2A6CmArWC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0Z0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bT3RdfHxPdCkrIiciOmduPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG10KzEpKyI6IFVuZXhwZWN0ZWQgIisoT3Q9PXV0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW090XXx8T3QpKyInIiksdGhpcy5wYXJzZUVycm9yKGduLHt0ZXh0OlgubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW090XXx8T3QsbGluZTpYLnl5bGluZW5vLGxvYzpUdCxleHBlY3RlZDpGdH0pfWlmKEV0WzBdaW5zdGFuY2VvZiBBcnJheSYmRXQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitCdCsiLCB0b2tlbjogIitPdCk7c3dpdGNoKEV0WzBdKXtjYXNlIDE6ei5wdXNoKE90KSxldC5wdXNoKFgueXl0ZXh0KSxzdC5wdXNoKFgueXlsbG9jKSx6LnB1c2goRXRbMV0pLE90PW51bGwseXQ9WC55eWxlbmcsYnQ9WC55eXRleHQsbXQ9WC55eWxpbmVubyxUdD1YLnl5bGxvYzticmVhaztjYXNlIDI6aWYoSHQ9dGhpcy5wcm9kdWN0aW9uc19bRXRbMV1dWzFdLEN0LiQ9ZXRbZXQubGVuZ3RoLUh0XSxDdC5fJD17Zmlyc3RfbGluZTpzdFtzdC5sZW5ndGgtKEh0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6c3Rbc3QubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46c3Rbc3QubGVuZ3RoLShIdHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpzdFtzdC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG50JiYoQ3QuXyQucmFuZ2U9W3N0W3N0Lmxlbmd0aC0oSHR8fDEpXS5yYW5nZVswXSxzdFtzdC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxaPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShDdCxbYnQseXQsbXQscHQueXksRXRbMV0sZXQsc3RdLmNvbmNhdCh2dCkpLHR5cGVvZiBaPCJ1IilyZXR1cm4gWjtIdCYmKHo9ei5zbGljZSgwLC0xKkh0KjIpLGV0PWV0LnNsaWNlKDAsLTEqSHQpLHN0PXN0LnNsaWNlKDAsLTEqSHQpKSx6LnB1c2godGhpcy5wcm9kdWN0aW9uc19bRXRbMV1dWzBdKSxldC5wdXNoKEN0LiQpLHN0LnB1c2goQ3QuXyQpLExlPWF0W3pbei5sZW5ndGgtMl1dW3pbei5sZW5ndGgtMV1dLHoucHVzaChMZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEE9ZnVuY3Rpb24oKXt2YXIgQj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihSLHope2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoUix6KTtlbHNlIHRocm93IG5ldyBFcnJvcihSKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oTixSKXtyZXR1cm4gdGhpcy55eT1SfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1OLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBOPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1OLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1OLHRoaXMubWF0Y2hlZCs9Tjt2YXIgUj1OLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gUj8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksTn0sdW5wdXQ6ZnVuY3Rpb24oTil7dmFyIFI9Ti5sZW5ndGgsej1OLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Tit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtUiksdGhpcy5vZmZzZXQtPVI7dmFyIFc9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksei5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXoubGVuZ3RoLTEpO3ZhciBldD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46ej8oei5sZW5ndGg9PT1XLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrV1tXLmxlbmd0aC16Lmxlbmd0aF0ubGVuZ3RoLXpbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1SfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2V0WzBdLGV0WzBdK3RoaXMueXlsZW5nLVJdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihOKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoTikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgTj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKE4ubGVuZ3RoPjIwPyIuLi4iOiIiKStOLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIE49dGhpcy5tYXRjaDtyZXR1cm4gTi5sZW5ndGg8MjAmJihOKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1OLmxlbmd0aCkpLChOLnN1YnN0cigwLDIwKSsoTi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIE49dGhpcy5wYXN0SW5wdXQoKSxSPW5ldyBBcnJheShOLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIE4rdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1IrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKE4sUil7dmFyIHosVyxldDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZXQ9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZXQueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksVz1OWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxXJiYodGhpcy55eWxpbmVubys9Vy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpXP1dbVy5sZW5ndGgtMV0ubGVuZ3RoLVdbVy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitOWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPU5bMF0sdGhpcy5tYXRjaCs9TlswXSx0aGlzLm1hdGNoZXM9Tix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShOWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1OWzBdLHo9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsUix0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSx6KXJldHVybiB6O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBzdCBpbiBldCl0aGlzW3N0XT1ldFtzdF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgTixSLHosVzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBldD10aGlzLl9jdXJyZW50UnVsZXMoKSxzdD0wO3N0PGV0Lmxlbmd0aDtzdCsrKWlmKHo9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tldFtzdF1dKSx6JiYoIVJ8fHpbMF0ubGVuZ3RoPlJbMF0ubGVuZ3RoKSl7aWYoUj16LFc9c3QsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoTj10aGlzLnRlc3RfbWF0Y2goeixldFtzdF0pLE4hPT0hMSlyZXR1cm4gTjtpZih0aGlzLl9iYWNrdHJhY2spe1I9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gUj8oTj10aGlzLnRlc3RfbWF0Y2goUixldFtXXSksTiE9PSExP046ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBSPXRoaXMubmV4dCgpO3JldHVybiBSfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihSKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goUil9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gUj4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKFIpe3JldHVybiBSPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoUnx8MCksUj49MD90aGlzLmNvbmRpdGlvblN0YWNrW1JdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKFIpe3RoaXMuYmVnaW4oUil9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oUix6LFcsZXQpe3N3aXRjaChXKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMTA7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6cmV0dXJuIDQ7Y2FzZSA2OnJldHVybiAxMTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDEyO2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgOTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTQ7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTE6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTM6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTQ6cmV0dXJuIDE3O2Nhc2UgMTU6cmV0dXJuIDE4O2Nhc2UgMTY6cmV0dXJuIDE5O2Nhc2UgMTc6cmV0dXJuIjoiO2Nhc2UgMTg6cmV0dXJuIDY7Y2FzZSAxOTpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OmpvdXJuZXlcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c2VjdGlvblxzW14jOlxuO10rKS9pLC9eKD86W14jOlxuO10rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMTgsMTldLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gQn0oKTtfLmxleGVyPUE7ZnVuY3Rpb24gSSgpe3RoaXMueXk9e319cmV0dXJuIEkucHJvdG90eXBlPV8sXy5QYXJzZXI9SSxuZXcgSX0oKTtWZ3QucGFyc2VyPVZndDtjb25zdCB6VWU9Vmd0O2xldCBtTD0iIjtjb25zdCBHZ3Q9W10sdE49W10sZU49W10scVVlPWZ1bmN0aW9uKCl7R2d0Lmxlbmd0aD0wLHROLmxlbmd0aD0wLG1MPSIiLGVOLmxlbmd0aD0wLGhnKCl9LEhVZT1mdW5jdGlvbihpKXttTD1pLEdndC5wdXNoKGkpfSxWVWU9ZnVuY3Rpb24oKXtyZXR1cm4gR2d0fSxHVWU9ZnVuY3Rpb24oKXtsZXQgaT1ManQoKTtjb25zdCBhPTEwMDtsZXQgZj0wO2Zvcig7IWkmJmY8YTspaT1ManQoKSxmKys7cmV0dXJuIHROLnB1c2goLi4uZU4pLHROfSxVVWU9ZnVuY3Rpb24oKXtjb25zdCBpPVtdO3JldHVybiB0Ti5mb3JFYWNoKGY9PntmLnBlb3BsZSYmaS5wdXNoKC4uLmYucGVvcGxlKX0pLFsuLi5uZXcgU2V0KGkpXS5zb3J0KCl9LFdVZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9YS5zdWJzdHIoMSkuc3BsaXQoIjoiKTtsZXQgcD0wLHc9W107Zi5sZW5ndGg9PT0xPyhwPU51bWJlcihmWzBdKSx3PVtdKToocD1OdW1iZXIoZlswXSksdz1mWzFdLnNwbGl0KCIsIikpO2NvbnN0IG09dy5tYXAoRT0+RS50cmltKCkpLGI9e3NlY3Rpb246bUwsdHlwZTptTCxwZW9wbGU6bSx0YXNrOmksc2NvcmU6cH07ZU4ucHVzaChiKX0sWVVlPWZ1bmN0aW9uKGkpe2NvbnN0IGE9e3NlY3Rpb246bUwsdHlwZTptTCxkZXNjcmlwdGlvbjppLHRhc2s6aSxjbGFzc2VzOltdfTt0Ti5wdXNoKGEpfSxManQ9ZnVuY3Rpb24oKXtjb25zdCBpPWZ1bmN0aW9uKGYpe3JldHVybiBlTltmXS5wcm9jZXNzZWR9O2xldCBhPSEwO2Zvcihjb25zdFtmLHBdb2YgZU4uZW50cmllcygpKWkoZiksYT1hJiZwLnByb2Nlc3NlZDtyZXR1cm4gYX0sTWp0PXtnZXRDb25maWc6KCk9Pk9lKCkuam91cm5leSxjbGVhcjpxVWUsc2V0RGlhZ3JhbVRpdGxlOk5iLGdldERpYWdyYW1UaXRsZTpwZyxzZXRBY2NUaXRsZTpFMCxnZXRBY2NUaXRsZTpmZyxzZXRBY2NEZXNjcmlwdGlvbjpkZyxnZXRBY2NEZXNjcmlwdGlvbjpnZyxhZGRTZWN0aW9uOkhVZSxnZXRTZWN0aW9uczpWVWUsZ2V0VGFza3M6R1VlLGFkZFRhc2s6V1VlLGFkZFRhc2tPcmc6WVVlLGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiBVVWUoKX19LEtVZT1pPT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgICBjb2xvcjogJHtpLnRleHRDb2xvcn07CiAgfQogIC5tb3V0aCB7CiAgICBzdHJva2U6ICM2NjY7CiAgfQoKICBsaW5lIHsKICAgIHN0cm9rZTogJHtpLnRleHRDb2xvcn0KICB9CgogIC5sZWdlbmQgewogICAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCB7CiAgICBmaWxsOiAjMzMzOwogIH0KICAubGFiZWwgewogICAgY29sb3I6ICR7aS50ZXh0Q29sb3J9CiAgfQoKICAuZmFjZSB7CiAgICAke2kuZmFjZUNvbG9yP2BmaWxsOiAke2kuZmFjZUNvbG9yfWA6ImZpbGw6ICNGRkY4REMifTsKICAgIHN0cm9rZTogIzk5OTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgIH0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CgogIC5jbHVzdGVyIHJlY3QgewogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC50YXNrLXR5cGUtMCwgLnNlY3Rpb24tdHlwZS0wICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGUwfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTEsIC5zZWN0aW9uLXR5cGUtMSAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlMX1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0yLCAuc2VjdGlvbi10eXBlLTIgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTJ9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMywgLnNlY3Rpb24tdHlwZS0zICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGUzfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTQsIC5zZWN0aW9uLXR5cGUtNCAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlNH1gOiIifTsKICB9CiAgLnRhc2stdHlwZS01LCAuc2VjdGlvbi10eXBlLTUgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTV9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNiwgLnNlY3Rpb24tdHlwZS02ICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGU2fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTcsIC5zZWN0aW9uLXR5cGUtNyAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlN31gOiIifTsKICB9CgogIC5hY3Rvci0wIHsKICAgICR7aS5hY3RvcjA/YGZpbGw6ICR7aS5hY3RvcjB9YDoiIn07CiAgfQogIC5hY3Rvci0xIHsKICAgICR7aS5hY3RvcjE/YGZpbGw6ICR7aS5hY3RvcjF9YDoiIn07CiAgfQogIC5hY3Rvci0yIHsKICAgICR7aS5hY3RvcjI/YGZpbGw6ICR7aS5hY3RvcjJ9YDoiIn07CiAgfQogIC5hY3Rvci0zIHsKICAgICR7aS5hY3RvcjM/YGZpbGw6ICR7aS5hY3RvcjN9YDoiIn07CiAgfQogIC5hY3Rvci00IHsKICAgICR7aS5hY3RvcjQ/YGZpbGw6ICR7aS5hY3RvcjR9YDoiIn07CiAgfQogIC5hY3Rvci01IHsKICAgICR7aS5hY3RvcjU/YGZpbGw6ICR7aS5hY3RvcjV9YDoiIn07CiAgfQpgLFVndD1mdW5jdGlvbihpLGEpe3JldHVybiBKVyhpLGEpfSxYVWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBwPWkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsYS5jeCkuYXR0cigiY3kiLGEuY3kpLmF0dHIoImNsYXNzIiwiZmFjZSIpLmF0dHIoInIiLDE1KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLHc9aS5hcHBlbmQoImciKTt3LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3gtMTUvMykuYXR0cigiY3kiLGEuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLHcuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsYS5jeCsxNS8zKS5hdHRyKCJjeSIsYS5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iik7ZnVuY3Rpb24gbShfKXtjb25zdCBBPU9BKCkuc3RhcnRBbmdsZShNYXRoLlBJLzIpLmVuZEFuZ2xlKDMqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtfLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixBKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLmN4KyIsIisoYS5jeSsyKSsiKSIpfWZ1bmN0aW9uIGIoXyl7Y29uc3QgQT1PQSgpLnN0YXJ0QW5nbGUoMypNYXRoLlBJLzIpLmVuZEFuZ2xlKDUqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtfLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixBKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLmN4KyIsIisoYS5jeSs3KSsiKSIpfWZ1bmN0aW9uIEUoXyl7Xy5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIsYS5jeC01KS5hdHRyKCJ5MSIsYS5jeSs3KS5hdHRyKCJ4MiIsYS5jeCs1KS5hdHRyKCJ5MiIsYS5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfXJldHVybiBhLnNjb3JlPjM/bSh3KTphLnNjb3JlPDM/Yih3KTpFKHcpLHB9LERqdD1mdW5jdGlvbihpLGEpe2NvbnN0IGY9aS5hcHBlbmQoImNpcmNsZSIpO3JldHVybiBmLmF0dHIoImN4IixhLmN4KSxmLmF0dHIoImN5IixhLmN5KSxmLmF0dHIoImNsYXNzIiwiYWN0b3ItIithLnBvcyksZi5hdHRyKCJmaWxsIixhLmZpbGwpLGYuYXR0cigic3Ryb2tlIixhLnN0cm9rZSksZi5hdHRyKCJyIixhLnIpLGYuY2xhc3MhPT12b2lkIDAmJmYuYXR0cigiY2xhc3MiLGYuY2xhc3MpLGEudGl0bGUhPT12b2lkIDAmJmYuYXBwZW5kKCJ0aXRsZSIpLnRleHQoYS50aXRsZSksZn0sSWp0PWZ1bmN0aW9uKGksYSl7cmV0dXJuIFJEZShpLGEpfSxRVWU9ZnVuY3Rpb24oaSxhKXtmdW5jdGlvbiBmKHcsbSxiLEUsXyl7cmV0dXJuIHcrIiwiK20rIiAiKyh3K2IpKyIsIittKyIgIisodytiKSsiLCIrKG0rRS1fKSsiICIrKHcrYi1fKjEuMikrIiwiKyhtK0UpKyIgIit3KyIsIisobStFKX1jb25zdCBwPWkuYXBwZW5kKCJwb2x5Z29uIik7cC5hdHRyKCJwb2ludHMiLGYoYS54LGEueSw1MCwyMCw3KSkscC5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksYS55PWEueSthLmxhYmVsTWFyZ2luLGEueD1hLngrLjUqYS5sYWJlbE1hcmdpbixJanQoaSxhKX0sWlVlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWkuYXBwZW5kKCJnIiksdz1iVCgpO3cueD1hLngsdy55PWEueSx3LmZpbGw9YS5maWxsLHcud2lkdGg9Zi53aWR0aCphLnRhc2tDb3VudCtmLmRpYWdyYW1NYXJnaW5YKihhLnRhc2tDb3VudC0xKSx3LmhlaWdodD1mLmhlaWdodCx3LmNsYXNzPSJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrYS5udW0sdy5yeD0zLHcucnk9MyxVZ3QocCx3KSxQanQoZikoYS50ZXh0LHAsdy54LHcueSx3LndpZHRoLHcuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2EubnVtfSxmLGEuY29sb3VyKX07bGV0IE9qdD0tMTtjb25zdCBKVWU9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9YS54K2Yud2lkdGgvMix3PWkuYXBwZW5kKCJnIik7T2p0Kys7Y29uc3QgbT0zMDArNSozMDt3LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwidGFzayIrT2p0KS5hdHRyKCJ4MSIscCkuYXR0cigieTEiLGEueSkuYXR0cigieDIiLHApLmF0dHIoInkyIixtKS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksWFVlKHcse2N4OnAsY3k6MzAwKyg1LWEuc2NvcmUpKjMwLHNjb3JlOmEuc2NvcmV9KTtjb25zdCBiPWJUKCk7Yi54PWEueCxiLnk9YS55LGIuZmlsbD1hLmZpbGwsYi53aWR0aD1mLndpZHRoLGIuaGVpZ2h0PWYuaGVpZ2h0LGIuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrYS5udW0sYi5yeD0zLGIucnk9MyxVZ3QodyxiKTtsZXQgRT1hLngrMTQ7YS5wZW9wbGUuZm9yRWFjaChfPT57Y29uc3QgQT1hLmFjdG9yc1tfXS5jb2xvcixJPXtjeDpFLGN5OmEueSxyOjcsZmlsbDpBLHN0cm9rZToiIzAwMCIsdGl0bGU6Xyxwb3M6YS5hY3RvcnNbX10ucG9zaXRpb259O0RqdCh3LEkpLEUrPTEwfSksUGp0KGYpKGEudGFzayx3LGIueCxiLnksYi53aWR0aCxiLmhlaWdodCx7Y2xhc3M6InRhc2sifSxmLGEuY29sb3VyKX0sdFdlPWZ1bmN0aW9uKGksYSl7bVB0KGksYSl9LFBqdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGkodyxtLGIsRSxfLEEsSSxCKXtjb25zdCBOPW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitfLzIpLmF0dHIoInkiLEUrQS8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixCKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHcpO3AoTixJKX1mdW5jdGlvbiBhKHcsbSxiLEUsXyxBLEksQixOKXtjb25zdHt0YXNrRm9udFNpemU6Uix0YXNrRm9udEZhbWlseTp6fT1CLFc9dy5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCBldD0wO2V0PFcubGVuZ3RoO2V0Kyspe2NvbnN0IHN0PWV0KlItUiooVy5sZW5ndGgtMSkvMixhdD1tLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrXy8yKS5hdHRyKCJ5IixFKS5hdHRyKCJmaWxsIixOKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixSKS5zdHlsZSgiZm9udC1mYW1pbHkiLHopO2F0LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiK18vMikuYXR0cigiZHkiLHN0KS50ZXh0KFdbZXRdKSxhdC5hdHRyKCJ5IixFK0EvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHAoYXQsSSl9fWZ1bmN0aW9uIGYodyxtLGIsRSxfLEEsSSxCKXtjb25zdCBOPW0uYXBwZW5kKCJzd2l0Y2giKSx6PU4uYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIsRSkuYXR0cigid2lkdGgiLF8pLmF0dHIoImhlaWdodCIsQSkuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO3ouYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHcpLGEodyxOLGIsRSxfLEEsSSxCKSxwKHosSSl9ZnVuY3Rpb24gcCh3LG0pe2Zvcihjb25zdCBiIGluIG0pYiBpbiBtJiZ3LmF0dHIoYixtW2JdKX1yZXR1cm4gZnVuY3Rpb24odyl7cmV0dXJuIHcudGV4dFBsYWNlbWVudD09PSJmbyI/Zjp3LnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOmF9fSgpLG5OPXtkcmF3UmVjdDpVZ3QsZHJhd0NpcmNsZTpEanQsZHJhd1NlY3Rpb246WlVlLGRyYXdUZXh0OklqdCxkcmF3TGFiZWw6UVVlLGRyYXdUYXNrOkpVZSxkcmF3QmFja2dyb3VuZFJlY3Q6dFdlLGluaXRHcmFwaGljczpmdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX19LGVXZT1mdW5jdGlvbihpKXtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe0pZW2ZdPWlbZl19KX0sejU9e307ZnVuY3Rpb24gbldlKGkpe2NvbnN0IGE9T2UoKS5qb3VybmV5O2xldCBmPTYwO09iamVjdC5rZXlzKHo1KS5mb3JFYWNoKHA9Pntjb25zdCB3PXo1W3BdLmNvbG9yLG09e2N4OjIwLGN5OmYscjo3LGZpbGw6dyxzdHJva2U6IiMwMDAiLHBvczp6NVtwXS5wb3NpdGlvbn07bk4uZHJhd0NpcmNsZShpLG0pO2NvbnN0IGI9e3g6NDAseTpmKzcsZmlsbDoiIzY2NiIsdGV4dDpwLHRleHRNYXJnaW46YS5ib3hUZXh0TWFyZ2lufDV9O25OLmRyYXdUZXh0KGksYiksZis9MjB9KX1jb25zdCBKWT1PZSgpLmpvdXJuZXksTVQ9SlkubGVmdE1hcmdpbixyV2U9ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdz1PZSgpLmpvdXJuZXksbT1PZSgpLnNlY3VyaXR5TGV2ZWw7bGV0IGI7bT09PSJzYW5kYm94IiYmKGI9eXIoIiNpIithKSk7Y29uc3QgRT15cihtPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpO2F3LmluaXQoKTtjb25zdCBfPUUuc2VsZWN0KCIjIithKTtuTi5pbml0R3JhcGhpY3MoXyk7Y29uc3QgQT1wLmRiLmdldFRhc2tzKCksST1wLmRiLmdldERpYWdyYW1UaXRsZSgpLEI9cC5kYi5nZXRBY3RvcnMoKTtmb3IoY29uc3Qgc3QgaW4gejUpZGVsZXRlIHo1W3N0XTtsZXQgTj0wO0IuZm9yRWFjaChzdD0+e3o1W3N0XT17Y29sb3I6dy5hY3RvckNvbG91cnNbTiV3LmFjdG9yQ29sb3Vycy5sZW5ndGhdLHBvc2l0aW9uOk59LE4rK30pLG5XZShfKSxhdy5pbnNlcnQoMCwwLE1ULE9iamVjdC5rZXlzKHo1KS5sZW5ndGgqNTApLGlXZShfLEEsMCk7Y29uc3QgUj1hdy5nZXRCb3VuZHMoKTtJJiZfLmFwcGVuZCgidGV4dCIpLnRleHQoSSkuYXR0cigieCIsTVQpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KTtjb25zdCB6PVIuc3RvcHktUi5zdGFydHkrMip3LmRpYWdyYW1NYXJnaW5ZLFc9TVQrUi5zdG9weCsyKncuZGlhZ3JhbU1hcmdpblg7azAoXyx6LFcsdy51c2VNYXhXaWR0aCksXy5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsTVQpLmF0dHIoInkxIix3LmhlaWdodCo0KS5hdHRyKCJ4MiIsVy1NVC00KS5hdHRyKCJ5MiIsdy5oZWlnaHQqNCkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKTtjb25zdCBldD1JPzcwOjA7Xy5hdHRyKCJ2aWV3Qm94IixgJHtSLnN0YXJ0eH0gLTI1ICR7V30gJHt6K2V0fWApLF8uYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSxfLmF0dHIoImhlaWdodCIseitldCsyNSl9LGF3PXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSx1cGRhdGVWYWw6ZnVuY3Rpb24oaSxhLGYscCl7aVthXT09PXZvaWQgMD9pW2FdPWY6aVthXT1wKGYsaVthXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbihpLGEsZixwKXtjb25zdCB3PU9lKCkuam91cm5leSxtPXRoaXM7bGV0IGI9MDtmdW5jdGlvbiBFKF8pe3JldHVybiBmdW5jdGlvbihJKXtiKys7Y29uc3QgQj1tLnNlcXVlbmNlSXRlbXMubGVuZ3RoLWIrMTttLnVwZGF0ZVZhbChJLCJzdGFydHkiLGEtQip3LmJveE1hcmdpbixNYXRoLm1pbiksbS51cGRhdGVWYWwoSSwic3RvcHkiLHArQip3LmJveE1hcmdpbixNYXRoLm1heCksbS51cGRhdGVWYWwoYXcuZGF0YSwic3RhcnR4IixpLUIqdy5ib3hNYXJnaW4sTWF0aC5taW4pLG0udXBkYXRlVmFsKGF3LmRhdGEsInN0b3B4IixmK0Iqdy5ib3hNYXJnaW4sTWF0aC5tYXgpLF8hPT0iYWN0aXZhdGlvbiImJihtLnVwZGF0ZVZhbChJLCJzdGFydHgiLGktQip3LmJveE1hcmdpbixNYXRoLm1pbiksbS51cGRhdGVWYWwoSSwic3RvcHgiLGYrQip3LmJveE1hcmdpbixNYXRoLm1heCksbS51cGRhdGVWYWwoYXcuZGF0YSwic3RhcnR5IixhLUIqdy5ib3hNYXJnaW4sTWF0aC5taW4pLG0udXBkYXRlVmFsKGF3LmRhdGEsInN0b3B5IixwK0Iqdy5ib3hNYXJnaW4sTWF0aC5tYXgpKX19dGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2goRSgpKX0saW5zZXJ0OmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHc9TWF0aC5taW4oaSxmKSxtPU1hdGgubWF4KGksZiksYj1NYXRoLm1pbihhLHApLEU9TWF0aC5tYXgoYSxwKTt0aGlzLnVwZGF0ZVZhbChhdy5kYXRhLCJzdGFydHgiLHcsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKGF3LmRhdGEsInN0YXJ0eSIsYixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoYXcuZGF0YSwic3RvcHgiLG0sTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKGF3LmRhdGEsInN0b3B5IixFLE1hdGgubWF4KSx0aGlzLnVwZGF0ZUJvdW5kcyh3LGIsbSxFKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKGkpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcytpLHRoaXMuZGF0YS5zdG9weT10aGlzLnZlcnRpY2FsUG9zfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sV2d0PUpZLnNlY3Rpb25GaWxscyxGanQ9Slkuc2VjdGlvbkNvbG91cnMsaVdlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPU9lKCkuam91cm5leTtsZXQgdz0iIjtjb25zdCBtPXAuaGVpZ2h0KjIrcC5kaWFncmFtTWFyZ2luWSxiPWYrbTtsZXQgRT0wLF89IiNDQ0MiLEE9ImJsYWNrIixJPTA7Zm9yKGNvbnN0W0IsTl1vZiBhLmVudHJpZXMoKSl7aWYodyE9PU4uc2VjdGlvbil7Xz1XZ3RbRSVXZ3QubGVuZ3RoXSxJPUUlV2d0Lmxlbmd0aCxBPUZqdFtFJUZqdC5sZW5ndGhdO2xldCB6PTA7Y29uc3QgVz1OLnNlY3Rpb247Zm9yKGxldCBzdD1CO3N0PGEubGVuZ3RoJiZhW3N0XS5zZWN0aW9uPT1XO3N0Kyspej16KzE7Y29uc3QgZXQ9e3g6QipwLnRhc2tNYXJnaW4rQipwLndpZHRoK01ULHk6NTAsdGV4dDpOLnNlY3Rpb24sZmlsbDpfLG51bTpJLGNvbG91cjpBLHRhc2tDb3VudDp6fTtuTi5kcmF3U2VjdGlvbihpLGV0LHApLHc9Ti5zZWN0aW9uLEUrK31jb25zdCBSPU4ucGVvcGxlLnJlZHVjZSgoeixXKT0+KHo1W1ddJiYoeltXXT16NVtXXSkseikse30pO04ueD1CKnAudGFza01hcmdpbitCKnAud2lkdGgrTVQsTi55PWIsTi53aWR0aD1wLmRpYWdyYW1NYXJnaW5YLE4uaGVpZ2h0PXAuZGlhZ3JhbU1hcmdpblksTi5jb2xvdXI9QSxOLmZpbGw9XyxOLm51bT1JLE4uYWN0b3JzPVIsbk4uZHJhd1Rhc2soaSxOLHApLGF3Lmluc2VydChOLngsTi55LE4ueCtOLndpZHRoK3AudGFza01hcmdpbiwzMDArNSozMCl9fSxOanQ9e3NldENvbmY6ZVdlLGRyYXc6cldlfSxzV2U9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjp6VWUsZGI6TWp0LHJlbmRlcmVyOk5qdCxzdHlsZXM6S1VlLGluaXQ6aT0+e05qdC5zZXRDb25mKGkuam91cm5leSksTWp0LmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxhV2U9KGksYSxmKT0+e2NvbnN0e3BhcmVudEJ5SWQ6cH09Zix3PW5ldyBTZXQ7bGV0IG09aTtmb3IoO207KXtpZih3LmFkZChtKSxtPT09YSlyZXR1cm4gbTttPXBbbV19Zm9yKG09YTttOyl7aWYody5oYXMobSkpcmV0dXJuIG07bT1wW21dfXJldHVybiJyb290In07ZnVuY3Rpb24gdEsoaSl7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZHluYW1pY2FsbHkgcmVxdWlyZSAiJytpKyciLiBQbGVhc2UgY29uZmlndXJlIHRoZSBkeW5hbWljUmVxdWlyZVRhcmdldHMgb3IvYW5kIGlnbm9yZUR5bmFtaWNSZXF1aXJlcyBvcHRpb24gb2YgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMgYXBwcm9wcmlhdGVseSBmb3IgdGhpcyByZXF1aXJlIGNhbGwgdG8gd29yay4nKX12YXIgQmp0PXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxhKXsoZnVuY3Rpb24oZil7aS5leHBvcnRzPWYoKX0pKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZihwLHcsbSl7ZnVuY3Rpb24gYihBLEkpe2lmKCF3W0FdKXtpZighcFtBXSl7dmFyIEI9dHlwZW9mIHRLPT0iZnVuY3Rpb24iJiZ0SztpZighSSYmQilyZXR1cm4gQihBLCEwKTtpZihFKXJldHVybiBFKEEsITApO3ZhciBOPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK0ErIiciKTt0aHJvdyBOLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLE59dmFyIFI9d1tBXT17ZXhwb3J0czp7fX07cFtBXVswXS5jYWxsKFIuZXhwb3J0cyxmdW5jdGlvbih6KXt2YXIgVz1wW0FdWzFdW3pdO3JldHVybiBiKFd8fHopfSxSLFIuZXhwb3J0cyxmLHAsdyxtKX1yZXR1cm4gd1tBXS5leHBvcnRzfWZvcih2YXIgRT10eXBlb2YgdEs9PSJmdW5jdGlvbiImJnRLLF89MDtfPG0ubGVuZ3RoO18rKyliKG1bX10pO3JldHVybiBifXJldHVybiBmfSgpKHsxOltmdW5jdGlvbihmLHAsdyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQShJLEIpe2Zvcih2YXIgTj0wO048Qi5sZW5ndGg7TisrKXt2YXIgUj1CW05dO1IuZW51bWVyYWJsZT1SLmVudW1lcmFibGV8fCExLFIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBSJiYoUi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksUi5rZXksUil9fXJldHVybiBmdW5jdGlvbihJLEIsTil7cmV0dXJuIEImJkEoSS5wcm90b3R5cGUsQiksTiYmQShJLE4pLEl9fSgpO2Z1bmN0aW9uIGIoQSxJKXtpZighKEEgaW5zdGFuY2VvZiBJKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgRT1mdW5jdGlvbigpe2Z1bmN0aW9uIEEoKXt2YXIgST10aGlzLEI9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9LE49Qi5kZWZhdWx0TGF5b3V0T3B0aW9ucyxSPU49PT12b2lkIDA/e306Tix6PUIuYWxnb3JpdGhtcyxXPXo9PT12b2lkIDA/WyJsYXllcmVkIiwic3RyZXNzIiwibXJ0cmVlIiwicmFkaWFsIiwiZm9yY2UiLCJkaXNjbyIsInNwb3JlT3ZlcmxhcCIsInNwb3JlQ29tcGFjdGlvbiIsInJlY3RwYWNraW5nIl06eixldD1CLndvcmtlckZhY3Rvcnksc3Q9Qi53b3JrZXJVcmw7aWYoYih0aGlzLEEpLHRoaXMuZGVmYXVsdExheW91dE9wdGlvbnM9Uix0aGlzLmluaXRpYWxpemVkPSExLHR5cGVvZiBzdD4idSImJnR5cGVvZiBldD4idSIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29uc3RydWN0IGFuIEVMSyB3aXRob3V0IGJvdGggJ3dvcmtlclVybCcgYW5kICd3b3JrZXJGYWN0b3J5Jy4iKTt2YXIgYXQ9ZXQ7dHlwZW9mIHN0PCJ1IiYmdHlwZW9mIGV0PiJ1IiYmKGF0PWZ1bmN0aW9uKHl0KXtyZXR1cm4gbmV3IFdvcmtlcih5dCl9KTt2YXIgYnQ9YXQoc3QpO2lmKHR5cGVvZiBidC5wb3N0TWVzc2FnZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJDcmVhdGVkIHdvcmtlciBkb2VzIG5vdCBwcm92aWRlIHRoZSByZXF1aXJlZCAncG9zdE1lc3NhZ2UnIGZ1bmN0aW9uLiIpO3RoaXMud29ya2VyPW5ldyBfKGJ0KSx0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJyZWdpc3RlciIsYWxnb3JpdGhtczpXfSkudGhlbihmdW5jdGlvbihtdCl7cmV0dXJuIEkuaW5pdGlhbGl6ZWQ9ITB9KS5jYXRjaChjb25zb2xlLmVycil9cmV0dXJuIG0oQSxbe2tleToibGF5b3V0Iix2YWx1ZTpmdW5jdGlvbihCKXt2YXIgTj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sUj1OLmxheW91dE9wdGlvbnMsej1SPT09dm9pZCAwP3RoaXMuZGVmYXVsdExheW91dE9wdGlvbnM6UixXPU4ubG9nZ2luZyxldD1XPT09dm9pZCAwPyExOlcsc3Q9Ti5tZWFzdXJlRXhlY3V0aW9uVGltZSxhdD1zdD09PXZvaWQgMD8hMTpzdDtyZXR1cm4gQj90aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJsYXlvdXQiLGdyYXBoOkIsbGF5b3V0T3B0aW9uczp6LG9wdGlvbnM6e2xvZ2dpbmc6ZXQsbWVhc3VyZUV4ZWN1dGlvblRpbWU6YXR9fSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIG1hbmRhdG9yeSBwYXJhbWV0ZXIgJ2dyYXBoJy4iKSl9fSx7a2V5OiJrbm93bkxheW91dEFsZ29yaXRobXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6ImFsZ29yaXRobXMifSl9fSx7a2V5OiJrbm93bkxheW91dE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6Im9wdGlvbnMifSl9fSx7a2V5OiJrbm93bkxheW91dENhdGVnb3JpZXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6ImNhdGVnb3JpZXMifSl9fSx7a2V5OiJ0ZXJtaW5hdGVXb3JrZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy53b3JrZXIudGVybWluYXRlKCl9fV0pLEF9KCk7dy5kZWZhdWx0PUU7dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBBKEkpe3ZhciBCPXRoaXM7aWYoYih0aGlzLEEpLEk9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIG1hbmRhdG9yeSBwYXJhbWV0ZXIgJ3dvcmtlcicuIik7dGhpcy5yZXNvbHZlcnM9e30sdGhpcy53b3JrZXI9SSx0aGlzLndvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oTil7c2V0VGltZW91dChmdW5jdGlvbigpe0IucmVjZWl2ZShCLE4pfSwwKX19cmV0dXJuIG0oQSxbe2tleToicG9zdE1lc3NhZ2UiLHZhbHVlOmZ1bmN0aW9uKEIpe3ZhciBOPXRoaXMuaWR8fDA7dGhpcy5pZD1OKzEsQi5pZD1OO3ZhciBSPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHosVyl7Ui5yZXNvbHZlcnNbTl09ZnVuY3Rpb24oZXQsc3Qpe2V0PyhSLmNvbnZlcnRHd3RTdHlsZUVycm9yKGV0KSxXKGV0KSk6eihzdCl9LFIud29ya2VyLnBvc3RNZXNzYWdlKEIpfSl9fSx7a2V5OiJyZWNlaXZlIix2YWx1ZTpmdW5jdGlvbihCLE4pe3ZhciBSPU4uZGF0YSx6PUIucmVzb2x2ZXJzW1IuaWRdO3omJihkZWxldGUgQi5yZXNvbHZlcnNbUi5pZF0sUi5lcnJvcj96KFIuZXJyb3IpOnoobnVsbCxSLmRhdGEpKX19LHtrZXk6InRlcm1pbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLndvcmtlci50ZXJtaW5hdGUmJnRoaXMud29ya2VyLnRlcm1pbmF0ZSgpfX0se2tleToiY29udmVydEd3dFN0eWxlRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKEIpe2lmKEIpe3ZhciBOPUIuX19qYXZhJGV4Y2VwdGlvbjtOJiYoTi5jYXVzZSYmTi5jYXVzZS5iYWNraW5nSnNPYmplY3QmJihCLmNhdXNlPU4uY2F1c2UuYmFja2luZ0pzT2JqZWN0LHRoaXMuY29udmVydEd3dFN0eWxlRXJyb3IoQi5jYXVzZSkpLGRlbGV0ZSBCLl9famF2YSRleGNlcHRpb24pfX19XSksQX0oKX0se31dLDI6W2Z1bmN0aW9uKGYscCx3KXsoZnVuY3Rpb24obSl7KGZ1bmN0aW9uKCl7dmFyIGI7dHlwZW9mIHdpbmRvdzwidSI/Yj13aW5kb3c6dHlwZW9mIG08InUiP2I9bTp0eXBlb2Ygc2VsZjwidSImJihiPXNlbGYpO3ZhciBFO2Z1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gQSgpe31mdW5jdGlvbiBJKCl7fWZ1bmN0aW9uIEIoKXt9ZnVuY3Rpb24gTigpe31mdW5jdGlvbiBSKCl7fWZ1bmN0aW9uIHooKXt9ZnVuY3Rpb24gVygpe31mdW5jdGlvbiBldCgpe31mdW5jdGlvbiBzdCgpe31mdW5jdGlvbiBhdCgpe31mdW5jdGlvbiBidCgpe31mdW5jdGlvbiBtdCgpe31mdW5jdGlvbiB5dCgpe31mdW5jdGlvbiBmdCgpe31mdW5jdGlvbiB1dCgpe31mdW5jdGlvbiB2dCgpe31mdW5jdGlvbiBYKCl7fWZ1bmN0aW9uIHB0KCl7fWZ1bmN0aW9uIFUoKXt9ZnVuY3Rpb24gVHQoKXt9ZnVuY3Rpb24gbnQoKXt9ZnVuY3Rpb24gSXQoKXt9ZnVuY3Rpb24gT3QoKXt9ZnVuY3Rpb24gQnQoKXt9ZnVuY3Rpb24gRXQoKXt9ZnVuY3Rpb24gWigpe31mdW5jdGlvbiBDdCgpe31mdW5jdGlvbiB4dCgpe31mdW5jdGlvbiBIdCgpe31mdW5jdGlvbiBMZSgpe31mdW5jdGlvbiBGdCgpe31mdW5jdGlvbiBnbigpe31mdW5jdGlvbiBTZSgpe31mdW5jdGlvbiBtZSgpe31mdW5jdGlvbiBWZSgpe31mdW5jdGlvbiBZZSgpe31mdW5jdGlvbiBjZSgpe31mdW5jdGlvbiBrZSgpe31mdW5jdGlvbiB6dCgpe31mdW5jdGlvbiByZSgpe31mdW5jdGlvbiBzZSgpe31mdW5jdGlvbiBQZSgpe31mdW5jdGlvbiB0ZSgpe31mdW5jdGlvbiBNZSgpe31mdW5jdGlvbiBkZSgpe31mdW5jdGlvbiBvbigpe31mdW5jdGlvbiBuaSgpe31mdW5jdGlvbiBLcygpe31mdW5jdGlvbiB3cygpe31mdW5jdGlvbiBmbygpe31mdW5jdGlvbiBYaSgpe31mdW5jdGlvbiBFcigpe31mdW5jdGlvbiBYbigpe31mdW5jdGlvbiBkaSgpe31mdW5jdGlvbiBFZSgpe31mdW5jdGlvbiBLbigpe31mdW5jdGlvbiBIZSgpe31mdW5jdGlvbiBUaSgpe31mdW5jdGlvbiBwbigpe31mdW5jdGlvbiBFcygpe31mdW5jdGlvbiBxYSgpe31mdW5jdGlvbiBNYSgpe31mdW5jdGlvbiBHcygpe31mdW5jdGlvbiBQbygpe31mdW5jdGlvbiB2cygpe31mdW5jdGlvbiBydSgpe31mdW5jdGlvbiB6cygpe31mdW5jdGlvbiBEdSgpe31mdW5jdGlvbiBwbSgpe31mdW5jdGlvbiB1dygpe31mdW5jdGlvbiBXdSgpe31mdW5jdGlvbiB0aCgpe31mdW5jdGlvbiBGYSgpe31mdW5jdGlvbiBNbCgpe31mdW5jdGlvbiBoYSgpe31mdW5jdGlvbiBiYygpe31mdW5jdGlvbiBDYygpe31mdW5jdGlvbiBwYSgpe31mdW5jdGlvbiBEYSgpe31mdW5jdGlvbiBIYSgpe31mdW5jdGlvbiBEbCgpe31mdW5jdGlvbiBfYygpe31mdW5jdGlvbiBsdygpe31mdW5jdGlvbiBlaCgpe31mdW5jdGlvbiBlZCgpe31mdW5jdGlvbiBqZCgpe31mdW5jdGlvbiBuZCgpe31mdW5jdGlvbiAkZCgpe31mdW5jdGlvbiBBMCgpe31mdW5jdGlvbiBCaSgpe31mdW5jdGlvbiBjbigpe31mdW5jdGlvbiBrcigpe31mdW5jdGlvbiBFaSgpe31mdW5jdGlvbiBKbygpe31mdW5jdGlvbiB3Yygpe31mdW5jdGlvbiByZigpe31mdW5jdGlvbiBPYygpe31mdW5jdGlvbiBzZigpe31mdW5jdGlvbiBhZigpe31mdW5jdGlvbiBRaSgpe31mdW5jdGlvbiBUcygpe31mdW5jdGlvbiBrYSgpe31mdW5jdGlvbiB4aSgpe31mdW5jdGlvbiBZYygpe31mdW5jdGlvbiBDZSgpe31mdW5jdGlvbiB2cCgpe31mdW5jdGlvbiBCZSgpe31mdW5jdGlvbiBCZigpe31mdW5jdGlvbiB5Zygpe31mdW5jdGlvbiBibSgpe31mdW5jdGlvbiBFaygpe31mdW5jdGlvbiBFMygpe31mdW5jdGlvbiBJbCgpe31mdW5jdGlvbiBMMCgpe31mdW5jdGlvbiBodygpe31mdW5jdGlvbiBINSgpe31mdW5jdGlvbiBIYigpe31mdW5jdGlvbiBWNSgpe31mdW5jdGlvbiBmMSgpe31mdW5jdGlvbiByZCgpe31mdW5jdGlvbiBpZCgpe31mdW5jdGlvbiBHNSgpe31mdW5jdGlvbiBmdygpe31mdW5jdGlvbiBVNSgpe31mdW5jdGlvbiBtcCgpe31mdW5jdGlvbiBXNSgpe31mdW5jdGlvbiBUMygpe31mdW5jdGlvbiB3bSgpe31mdW5jdGlvbiB4Zygpe31mdW5jdGlvbiBFTCgpe31mdW5jdGlvbiB2bCgpe31mdW5jdGlvbiBpTigpe31mdW5jdGlvbiBTYygpe31mdW5jdGlvbiBjSygpe31mdW5jdGlvbiBWYigpe31mdW5jdGlvbiB1Sygpe31mdW5jdGlvbiBQVCgpe31mdW5jdGlvbiBsSygpe31mdW5jdGlvbiBzTigpe31mdW5jdGlvbiBSZigpe31mdW5jdGlvbiB2bSgpe31mdW5jdGlvbiBUTCgpe31mdW5jdGlvbiBhTigpe31mdW5jdGlvbiB5cCgpe31mdW5jdGlvbiBtbSgpe31mdW5jdGlvbiBoSygpe31mdW5jdGlvbiBHYigpe31mdW5jdGlvbiBmSygpe31mdW5jdGlvbiBkSygpe31mdW5jdGlvbiBZNSgpe31mdW5jdGlvbiBGVCgpe31mdW5jdGlvbiBvTigpe31mdW5jdGlvbiBUaygpe31mdW5jdGlvbiBnSygpe31mdW5jdGlvbiBDaygpe31mdW5jdGlvbiBwSygpe31mdW5jdGlvbiBiSygpe31mdW5jdGlvbiB3Sygpe31mdW5jdGlvbiB2Sygpe31mdW5jdGlvbiBtSygpe31mdW5jdGlvbiB5Sygpe31mdW5jdGlvbiB4Sygpe31mdW5jdGlvbiBrSygpe31mdW5jdGlvbiBFSygpe31mdW5jdGlvbiBUSygpe31mdW5jdGlvbiBDSygpe31mdW5jdGlvbiBDTCgpe31mdW5jdGlvbiBfSygpe31mdW5jdGlvbiBTSygpe31mdW5jdGlvbiBOVCgpe31mdW5jdGlvbiBjTigpe31mdW5jdGlvbiBLNSgpe31mdW5jdGlvbiBBSygpe31mdW5jdGlvbiBMSygpe31mdW5jdGlvbiBNSygpe31mdW5jdGlvbiBESygpe31mdW5jdGlvbiBJSygpe31mdW5jdGlvbiBCVCgpe31mdW5jdGlvbiBfTCgpe31mdW5jdGlvbiB1Tigpe31mdW5jdGlvbiBDMygpe31mdW5jdGlvbiBfMygpe31mdW5jdGlvbiBPSygpe31mdW5jdGlvbiBvZigpe31mdW5jdGlvbiBYNSgpe31mdW5jdGlvbiBQSygpe31mdW5jdGlvbiBfaygpe31mdW5jdGlvbiB6ZCgpe31mdW5jdGlvbiBGSygpe31mdW5jdGlvbiBOSygpe31mdW5jdGlvbiBCSygpe31mdW5jdGlvbiBSSygpe31mdW5jdGlvbiBSVCgpe31mdW5jdGlvbiBTTCgpe31mdW5jdGlvbiBsTigpe31mdW5jdGlvbiBBTCgpe31mdW5jdGlvbiBRNSgpe31mdW5jdGlvbiBqSygpe31mdW5jdGlvbiBoTigpe31mdW5jdGlvbiBmTigpe31mdW5jdGlvbiAkSygpe31mdW5jdGlvbiB6Sygpe31mdW5jdGlvbiBxSygpe31mdW5jdGlvbiBISygpe31mdW5jdGlvbiBWSygpe31mdW5jdGlvbiBHSygpe31mdW5jdGlvbiBxZCgpe31mdW5jdGlvbiBkdygpe31mdW5jdGlvbiBVSygpe31mdW5jdGlvbiBkTigpe31mdW5jdGlvbiBnTigpe31mdW5jdGlvbiBXSygpe31mdW5jdGlvbiBTMygpe31mdW5jdGlvbiBTaygpe31mdW5jdGlvbiBMTCgpe31mdW5jdGlvbiB5bSgpe31mdW5jdGlvbiBBaygpe31mdW5jdGlvbiBZSygpe31mdW5jdGlvbiBqVCgpe31mdW5jdGlvbiBzZCgpe31mdW5jdGlvbiBwTigpe31mdW5jdGlvbiBNTCgpe31mdW5jdGlvbiBMaygpe31mdW5jdGlvbiBETCgpe31mdW5jdGlvbiBiTigpe31mdW5jdGlvbiBLSygpe31mdW5jdGlvbiBJTCgpe31mdW5jdGlvbiBYSygpe31mdW5jdGlvbiBRSygpe31mdW5jdGlvbiB3Tigpe31mdW5jdGlvbiBaNSgpe31mdW5jdGlvbiB2Tigpe31mdW5jdGlvbiBKNSgpe31mdW5jdGlvbiBaSygpe31mdW5jdGlvbiBPTCgpe31mdW5jdGlvbiBKSygpe31mdW5jdGlvbiB0WCgpe31mdW5jdGlvbiBlWCgpe31mdW5jdGlvbiBuWCgpe31mdW5jdGlvbiBtTigpe31mdW5jdGlvbiByWCgpe31mdW5jdGlvbiBpWCgpe31mdW5jdGlvbiBzWCgpe31mdW5jdGlvbiB5Tigpe31mdW5jdGlvbiBhWCgpe31mdW5jdGlvbiBvWCgpe31mdW5jdGlvbiBjWCgpe31mdW5jdGlvbiB4Tigpe31mdW5jdGlvbiB1WCgpe31mdW5jdGlvbiBsWCgpe31mdW5jdGlvbiBrTigpe31mdW5jdGlvbiBFTigpe31mdW5jdGlvbiBUTigpe31mdW5jdGlvbiBoWCgpe31mdW5jdGlvbiBmWCgpe31mdW5jdGlvbiBNaygpe31mdW5jdGlvbiB0eCgpe31mdW5jdGlvbiAkVCgpe31mdW5jdGlvbiBkWCgpe31mdW5jdGlvbiBQTCgpe31mdW5jdGlvbiB6VCgpe31mdW5jdGlvbiBGTCgpe31mdW5jdGlvbiBDTigpe31mdW5jdGlvbiBfTigpe31mdW5jdGlvbiBnWCgpe31mdW5jdGlvbiBwWCgpe31mdW5jdGlvbiBiWCgpe31mdW5jdGlvbiBTTigpe31mdW5jdGlvbiBBTigpe31mdW5jdGlvbiB3WCgpe31mdW5jdGlvbiB2WCgpe31mdW5jdGlvbiBtWCgpe31mdW5jdGlvbiB5WCgpe31mdW5jdGlvbiB4WCgpe31mdW5jdGlvbiBMTigpe31mdW5jdGlvbiBrWCgpe31mdW5jdGlvbiBFWCgpe31mdW5jdGlvbiBUWCgpe31mdW5jdGlvbiBDWCgpe31mdW5jdGlvbiBNTigpe31mdW5jdGlvbiBxVCgpe31mdW5jdGlvbiBfWCgpe31mdW5jdGlvbiBTWCgpe31mdW5jdGlvbiBETigpe31mdW5jdGlvbiBBWCgpe31mdW5jdGlvbiBMWCgpe31mdW5jdGlvbiBNWCgpe31mdW5jdGlvbiBEWCgpe31mdW5jdGlvbiBJWCgpe31mdW5jdGlvbiBPWCgpe31mdW5jdGlvbiBJTigpe31mdW5jdGlvbiBQWCgpe31mdW5jdGlvbiBPTigpe31mdW5jdGlvbiBGWCgpe31mdW5jdGlvbiBOWCgpe31mdW5jdGlvbiBCWCgpe31mdW5jdGlvbiBIVCgpe31mdW5jdGlvbiBSWCgpe31mdW5jdGlvbiBWVCgpe31mdW5jdGlvbiBqWCgpe31mdW5jdGlvbiBQTigpe31mdW5jdGlvbiBGTigpe31mdW5jdGlvbiBOTigpe31mdW5jdGlvbiBCTigpe31mdW5jdGlvbiBndygpe31mdW5jdGlvbiBSTigpe31mdW5jdGlvbiBqTigpe31mdW5jdGlvbiAkTigpe31mdW5jdGlvbiB6Tigpe31mdW5jdGlvbiAkWCgpe31mdW5jdGlvbiBleCgpe31mdW5jdGlvbiBHVCgpe31mdW5jdGlvbiBBMygpe31mdW5jdGlvbiB6WCgpe31mdW5jdGlvbiBxWCgpe31mdW5jdGlvbiBVVCgpe31mdW5jdGlvbiBIWCgpe31mdW5jdGlvbiBWWCgpe31mdW5jdGlvbiBHWCgpe31mdW5jdGlvbiBVWCgpe31mdW5jdGlvbiBXWCgpe31mdW5jdGlvbiBZWCgpe31mdW5jdGlvbiBLWCgpe31mdW5jdGlvbiBYWCgpe31mdW5jdGlvbiBRWCgpe31mdW5jdGlvbiBaWCgpe31mdW5jdGlvbiBKWCgpe31mdW5jdGlvbiBOTCgpe31mdW5jdGlvbiBxTigpe31mdW5jdGlvbiB0USgpe31mdW5jdGlvbiBlUSgpe31mdW5jdGlvbiBuUSgpe31mdW5jdGlvbiBITigpe31mdW5jdGlvbiByUSgpe31mdW5jdGlvbiBpUSgpe31mdW5jdGlvbiBzUSgpe31mdW5jdGlvbiBhUSgpe31mdW5jdGlvbiBvUSgpe31mdW5jdGlvbiBjUSgpe31mdW5jdGlvbiBWTigpe31mdW5jdGlvbiBHTigpe31mdW5jdGlvbiB1USgpe31mdW5jdGlvbiBVTigpe31mdW5jdGlvbiBXTigpe31mdW5jdGlvbiBsUSgpe31mdW5jdGlvbiBoUSgpe31mdW5jdGlvbiBmUSgpe31mdW5jdGlvbiBCTCgpe31mdW5jdGlvbiBkUSgpe31mdW5jdGlvbiBEaygpe31mdW5jdGlvbiBnUSgpe31mdW5jdGlvbiBwUSgpe31mdW5jdGlvbiBiUSgpe31mdW5jdGlvbiBZTigpe31mdW5jdGlvbiB3USgpe31mdW5jdGlvbiB2USgpe31mdW5jdGlvbiBtUSgpe31mdW5jdGlvbiB5USgpe31mdW5jdGlvbiB4USgpe31mdW5jdGlvbiBrUSgpe31mdW5jdGlvbiBFUSgpe31mdW5jdGlvbiBUUSgpe31mdW5jdGlvbiBDUSgpe31mdW5jdGlvbiBfUSgpe31mdW5jdGlvbiBTUSgpe31mdW5jdGlvbiBBUSgpe31mdW5jdGlvbiBueCgpe31mdW5jdGlvbiBLTigpe31mdW5jdGlvbiBMUSgpe31mdW5jdGlvbiBNUSgpe31mdW5jdGlvbiBEUSgpe31mdW5jdGlvbiBYTigpe31mdW5jdGlvbiBJUSgpe31mdW5jdGlvbiBXVCgpe31mdW5jdGlvbiBPUSgpe31mdW5jdGlvbiBQUSgpe31mdW5jdGlvbiBGUSgpe31mdW5jdGlvbiBOUSgpe31mdW5jdGlvbiBCUSgpe31mdW5jdGlvbiBSUSgpe31mdW5jdGlvbiBqUSgpe31mdW5jdGlvbiAkUSgpe31mdW5jdGlvbiB6USgpe31mdW5jdGlvbiBxUSgpe31mdW5jdGlvbiByeCgpe31mdW5jdGlvbiBIUSgpe31mdW5jdGlvbiBWUSgpe31mdW5jdGlvbiBHUSgpe31mdW5jdGlvbiBVUSgpe31mdW5jdGlvbiBXUSgpe31mdW5jdGlvbiBZUSgpe31mdW5jdGlvbiBLUSgpe31mdW5jdGlvbiBYUSgpe31mdW5jdGlvbiBZVCgpe31mdW5jdGlvbiBRUSgpe31mdW5jdGlvbiBaUSgpe31mdW5jdGlvbiBKUSgpe31mdW5jdGlvbiB0Wigpe31mdW5jdGlvbiBlWigpe31mdW5jdGlvbiBuWigpe31mdW5jdGlvbiByWigpe31mdW5jdGlvbiBpWigpe31mdW5jdGlvbiBpeCgpe31mdW5jdGlvbiBRTigpe31mdW5jdGlvbiBzWigpe31mdW5jdGlvbiBSTCgpe31mdW5jdGlvbiBhWigpe31mdW5jdGlvbiBvWigpe31mdW5jdGlvbiBjWigpe31mdW5jdGlvbiB1Wigpe31mdW5jdGlvbiBsWigpe31mdW5jdGlvbiBoWigpe31mdW5jdGlvbiBmWigpe31mdW5jdGlvbiBaTigpe31mdW5jdGlvbiBkWigpe31mdW5jdGlvbiBKTigpe31mdW5jdGlvbiBnWigpe31mdW5jdGlvbiB0Qigpe31mdW5jdGlvbiBlQigpe31mdW5jdGlvbiBuQigpe31mdW5jdGlvbiBwWigpe31mdW5jdGlvbiBiWigpe31mdW5jdGlvbiBLVCgpe31mdW5jdGlvbiBqTCgpe31mdW5jdGlvbiBYVCgpe31mdW5jdGlvbiB3Wigpe31mdW5jdGlvbiB2Wigpe31mdW5jdGlvbiAkTCgpe31mdW5jdGlvbiBtWigpe31mdW5jdGlvbiB5Wigpe31mdW5jdGlvbiByQigpe31mdW5jdGlvbiB4Wigpe31mdW5jdGlvbiBrWigpe31mdW5jdGlvbiBFWigpe31mdW5jdGlvbiBUWigpe31mdW5jdGlvbiBDWigpe31mdW5jdGlvbiBfWigpe31mdW5jdGlvbiBTWigpe31mdW5jdGlvbiBBWigpe31mdW5jdGlvbiBMWigpe31mdW5jdGlvbiBNWigpe31mdW5jdGlvbiBrZygpe31mdW5jdGlvbiBEWigpe31mdW5jdGlvbiB4bSgpe31mdW5jdGlvbiBpQigpe31mdW5jdGlvbiBJWigpe31mdW5jdGlvbiBPWigpe31mdW5jdGlvbiBQWigpe31mdW5jdGlvbiBGWigpe31mdW5jdGlvbiBOWigpe31mdW5jdGlvbiBCWigpe31mdW5jdGlvbiBSWigpe31mdW5jdGlvbiBqWigpe31mdW5jdGlvbiAkWigpe31mdW5jdGlvbiBBYygpe31mdW5jdGlvbiB6Wigpe31mdW5jdGlvbiBRVCgpe31mdW5jdGlvbiB0Yygpe31mdW5jdGlvbiBLYygpe31mdW5jdGlvbiB6aSgpe31mdW5jdGlvbiB6TCgpe31mdW5jdGlvbiBxWigpe31mdW5jdGlvbiBIWigpe31mdW5jdGlvbiBWWigpe31mdW5jdGlvbiBzeCgpe31mdW5jdGlvbiBrbSgpe31mdW5jdGlvbiBVZSgpe31mdW5jdGlvbiBHWigpe31mdW5jdGlvbiBVWigpe31mdW5jdGlvbiBXWigpe31mdW5jdGlvbiBZWigpe31mdW5jdGlvbiBLWigpe31mdW5jdGlvbiBzQigpe31mdW5jdGlvbiBYWigpe31mdW5jdGlvbiBRWigpe31mdW5jdGlvbiBxTCgpe31mdW5jdGlvbiBaWigpe31mdW5jdGlvbiBZdSgpe31mdW5jdGlvbiBJdSgpe31mdW5jdGlvbiBKWigpe31mdW5jdGlvbiB0Sigpe31mdW5jdGlvbiBlSigpe31mdW5jdGlvbiBFbSgpe31mdW5jdGlvbiBwdygpe31mdW5jdGlvbiB4cCgpe31mdW5jdGlvbiBhZCgpe31mdW5jdGlvbiBheCgpe31mdW5jdGlvbiBaVCgpe31mdW5jdGlvbiBJaygpe31mdW5jdGlvbiBhQigpe31mdW5jdGlvbiBuSigpe31mdW5jdGlvbiBPaygpe31mdW5jdGlvbiBvQigpe31mdW5jdGlvbiBySigpe31mdW5jdGlvbiBKVCgpe31mdW5jdGlvbiBveCgpe31mdW5jdGlvbiBjeCgpe31mdW5jdGlvbiBrcCgpe31mdW5jdGlvbiBjQigpe31mdW5jdGlvbiBQaygpe31mdW5jdGlvbiB1Qigpe31mdW5jdGlvbiBsQigpe31mdW5jdGlvbiB1eCgpe31mdW5jdGlvbiBVYigpe31mdW5jdGlvbiBNMCgpe31mdW5jdGlvbiBFcCgpe31mdW5jdGlvbiBMMygpe31mdW5jdGlvbiBGaygpe31mdW5jdGlvbiB0Qygpe31mdW5jdGlvbiBoQigpe31mdW5jdGlvbiBpSigpe31mdW5jdGlvbiBmQigpe31mdW5jdGlvbiBkQigpe31mdW5jdGlvbiBnQigpe31mdW5jdGlvbiBOaygpe31mdW5jdGlvbiBwQigpe31mdW5jdGlvbiBiQigpe31mdW5jdGlvbiBzSigpe31mdW5jdGlvbiBCaygpe31mdW5jdGlvbiBSaygpe31mdW5jdGlvbiBUbSgpe31mdW5jdGlvbiBITCgpe31mdW5jdGlvbiBhSigpe31mdW5jdGlvbiBvSigpe31mdW5jdGlvbiBjSigpe31mdW5jdGlvbiB1Sigpe31mdW5jdGlvbiBsSigpe31mdW5jdGlvbiBoSigpe31mdW5jdGlvbiBmSigpe31mdW5jdGlvbiBkSigpe31mdW5jdGlvbiB3Qigpe31mdW5jdGlvbiBnSigpe31mdW5jdGlvbiBwSigpe31mdW5jdGlvbiBiSigpe31mdW5jdGlvbiB2Qigpe31mdW5jdGlvbiBqaygpe31mdW5jdGlvbiBlQygpe31mdW5jdGlvbiBtQigpe31mdW5jdGlvbiB3Sigpe31mdW5jdGlvbiB5Qigpe31mdW5jdGlvbiB4Qigpe31mdW5jdGlvbiB2Sigpe31mdW5jdGlvbiBuQygpe31mdW5jdGlvbiBDbSgpe31mdW5jdGlvbiBrQigpe31mdW5jdGlvbiBFQigpe31mdW5jdGlvbiBtSigpe31mdW5jdGlvbiB5Sigpe31mdW5jdGlvbiByQygpe31mdW5jdGlvbiBUQigpe31mdW5jdGlvbiBDQigpe31mdW5jdGlvbiB1Yygpe31mdW5jdGlvbiB4Sigpe31mdW5jdGlvbiBfQigpe31mdW5jdGlvbiBpQygpe31mdW5jdGlvbiBrSigpe31mdW5jdGlvbiBFSigpe31mdW5jdGlvbiBzQygpe31mdW5jdGlvbiBTQigpe31mdW5jdGlvbiBhQygpe31mdW5jdGlvbiBvQygpe31mdW5jdGlvbiBqZigpe31mdW5jdGlvbiBWTCgpe31mdW5jdGlvbiBHTCgpe31mdW5jdGlvbiBseCgpe31mdW5jdGlvbiBUSigpe31mdW5jdGlvbiBDSigpe31mdW5jdGlvbiBfSigpe31mdW5jdGlvbiBTSigpe31mdW5jdGlvbiBfbSgpe31mdW5jdGlvbiBBQigpe31mdW5jdGlvbiBoeCgpe31mdW5jdGlvbiBkMSgpe31mdW5jdGlvbiBMQigpe31mdW5jdGlvbiBNQigpe31mdW5jdGlvbiBEQigpe31mdW5jdGlvbiBJQigpe31mdW5jdGlvbiBPQigpe31mdW5jdGlvbiBQQigpe31mdW5jdGlvbiAkZigpe31mdW5jdGlvbiBkdSgpe31mdW5jdGlvbiBBSigpe31mdW5jdGlvbiBMSigpe31mdW5jdGlvbiBNSigpe31mdW5jdGlvbiBndSgpe31mdW5jdGlvbiBjQygpe31mdW5jdGlvbiBGQigpe31mdW5jdGlvbiBOQigpe31mdW5jdGlvbiBmeCgpe31mdW5jdGlvbiBESigpe31mdW5jdGlvbiAkaygpe31mdW5jdGlvbiBJSigpe31mdW5jdGlvbiBCQigpe31mdW5jdGlvbiBPSigpe31mdW5jdGlvbiBQSigpe31mdW5jdGlvbiB1Qygpe31mdW5jdGlvbiBSQigpe31mdW5jdGlvbiBVTCgpe31mdW5jdGlvbiBsQygpe31mdW5jdGlvbiBGSigpe31mdW5jdGlvbiBOSigpe31mdW5jdGlvbiBXTCgpe31mdW5jdGlvbiBoQygpe31mdW5jdGlvbiBnMSgpe31mdW5jdGlvbiB6aygpe31mdW5jdGlvbiBCSigpe31mdW5jdGlvbiBxaygpe31mdW5jdGlvbiBZTCgpe31mdW5jdGlvbiBXYigpe31mdW5jdGlvbiBmQygpe31mdW5jdGlvbiBLTCgpe31mdW5jdGlvbiB6Zigpe31mdW5jdGlvbiBkQygpe31mdW5jdGlvbiBwMSgpe31mdW5jdGlvbiBiMSgpe31mdW5jdGlvbiBSSigpe31mdW5jdGlvbiBqSigpe31mdW5jdGlvbiBNMygpe31mdW5jdGlvbiBIaygpe31mdW5jdGlvbiBWaygpe31mdW5jdGlvbiBnQygpe31mdW5jdGlvbiAkSigpe31mdW5jdGlvbiBkeCgpe31mdW5jdGlvbiBYTCgpe31mdW5jdGlvbiBqQigpe31mdW5jdGlvbiB6Sigpe31mdW5jdGlvbiBwQygpe1BDKCl9ZnVuY3Rpb24gcUooKXtSaXQoKX1mdW5jdGlvbiAkQigpe29fKCl9ZnVuY3Rpb24gUUwoKXtzcSgpfWZ1bmN0aW9uIEhKKCl7cTR0KCl9ZnVuY3Rpb24gYkMoKXtKZigpfWZ1bmN0aW9uIFZKKCl7SjN0KCl9ZnVuY3Rpb24gR0ooKXtpSSgpfWZ1bmN0aW9uIFVKKCl7RU0oKX1mdW5jdGlvbiBXSigpe2tNKCl9ZnVuY3Rpb24gWUooKXtLTSgpfWZ1bmN0aW9uIHpCKCl7QlZ0KCl9ZnVuY3Rpb24gS0ooKXtyNigpfWZ1bmN0aW9uIFhKKCl7JFIoKX1mdW5jdGlvbiBRSigpe1lKdCgpfWZ1bmN0aW9uIHFCKCl7b25lKCl9ZnVuY3Rpb24gWkooKXtfdGUoKX1mdW5jdGlvbiBKSigpe0hRdCgpfWZ1bmN0aW9uIHdDKCl7b0UoKX1mdW5jdGlvbiB0dHQoKXtuYigpfWZ1bmN0aW9uIGV0dCgpe2NuZSgpfWZ1bmN0aW9uIG50dCgpe05adCgpfWZ1bmN0aW9uIHJ0dCgpe0Z4dCgpfWZ1bmN0aW9uIGl0dCgpe0tzZSgpfWZ1bmN0aW9uIHN0dCgpe1ZRdCgpfWZ1bmN0aW9uIEhCKCl7VGUoKX1mdW5jdGlvbiBhdHQoKXtxUXQoKX1mdW5jdGlvbiBWQigpe3VuZSgpfWZ1bmN0aW9uIG90dCgpe2ZyZSgpfWZ1bmN0aW9uIFpMKCl7VVF0KCl9ZnVuY3Rpb24gY3R0KCl7RHRlKCl9ZnVuY3Rpb24gR0IoKXtSVnQoKX1mdW5jdGlvbiB1dHQoKXtFNXQoKX1mdW5jdGlvbiBVQigpe3V5KCl9ZnVuY3Rpb24gbHR0KCl7Tm5lKCl9ZnVuY3Rpb24gV0IoKXtjSSgpfWZ1bmN0aW9uIFlCKCl7ZGF0KCl9ZnVuY3Rpb24gS0IoKXt5c3QoKX1mdW5jdGlvbiBKTCgpe2d2KCl9ZnVuY3Rpb24gRDMoKXtteXQoKX1mdW5jdGlvbiB2Qygpe0dRdCgpfWZ1bmN0aW9uIG9kKCl7cmxlKCl9ZnVuY3Rpb24gWEIoKXt5NXQoKX1mdW5jdGlvbiBHaygpe3NhdCgpfWZ1bmN0aW9uIHRNKCl7ViQoKX1mdW5jdGlvbiBodHQoKXtmcSgpfWZ1bmN0aW9uIFRwKCl7dWkoKX1mdW5jdGlvbiBRQigpe1N6KCl9ZnVuY3Rpb24gWkIoKXtTM3QoKX1mdW5jdGlvbiBKQigpe0RxKCl9ZnVuY3Rpb24gbmgoKXtJWXQoKX1mdW5jdGlvbiBlTSgpe2tpdCgpfWZ1bmN0aW9uIHRSKCl7b3h0KCl9ZnVuY3Rpb24gVWsodCl7T24odCl9ZnVuY3Rpb24gbUModCl7dGhpcy5hPXR9ZnVuY3Rpb24gV2sodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZVIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZ3godCl7dGhpcy5hPXR9ZnVuY3Rpb24gYncodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWWsodCl7dGhpcy5hPXR9ZnVuY3Rpb24gblIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZnR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG5NKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEkzKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHJNKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHlDKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGR0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB4Qyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBrQyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBweCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBpTSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBzTSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBndHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcHR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGJ0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiByUih0KXt0aGlzLmI9dH1mdW5jdGlvbiB3dHQodCl7dGhpcy5jPXR9ZnVuY3Rpb24gdnR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG10dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB5dHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geHR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGt0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBFdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVHR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEN0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBieCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBfdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gS2sodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVGgodCl7dGhpcy5hPXR9ZnVuY3Rpb24gU3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHd4KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFhrKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEVDKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFFrKHQpe3RoaXMuYT10fWZ1bmN0aW9uIEVnKCl7dGhpcy5hPVtdfWZ1bmN0aW9uIEF0dCh0LGUpe3QuYT1lfWZ1bmN0aW9uIGNwdCh0LGUpe3QuYT1lfWZ1bmN0aW9uIHVwdCh0LGUpe3QuYj1lfWZ1bmN0aW9uIGxwdCh0LGUpe3QuYj1lfWZ1bmN0aW9uIGhwdCh0LGUpe3QuYj1lfWZ1bmN0aW9uIGFNKHQsZSl7dC5qPWV9ZnVuY3Rpb24gZnB0KHQsZSl7dC5nPWV9ZnVuY3Rpb24gZHB0KHQsZSl7dC5pPWV9ZnVuY3Rpb24gTHR0KHQsZSl7dC5jPWV9ZnVuY3Rpb24gdzEodCxlKXt0LmQ9ZX1mdW5jdGlvbiBNdHQodCxlKXt0LmQ9ZX1mdW5jdGlvbiBncHQodCxlKXt0LmM9ZX1mdW5jdGlvbiBEMCh0LGUpe3Quaz1lfWZ1bmN0aW9uIER0dCh0LGUpe3QuYz1lfWZ1bmN0aW9uIGlSKHQsZSl7dC5jPWV9ZnVuY3Rpb24gc1IodCxlKXt0LmE9ZX1mdW5jdGlvbiBJdHQodCxlKXt0LmE9ZX1mdW5jdGlvbiBwcHQodCxlKXt0LmY9ZX1mdW5jdGlvbiBicHQodCxlKXt0LmE9ZX1mdW5jdGlvbiB3dyh0LGUpe3QuYj1lfWZ1bmN0aW9uIG9NKHQsZSl7dC5kPWV9ZnVuY3Rpb24gVEModCxlKXt0Lmk9ZX1mdW5jdGlvbiBhUih0LGUpe3Qubz1lfWZ1bmN0aW9uIHdwdCh0LGUpe3Qucj1lfWZ1bmN0aW9uIHZwdCh0LGUpe3QuYT1lfWZ1bmN0aW9uIG9SKHQsZSl7dC5iPWV9ZnVuY3Rpb24gdncodCxlKXt0LmU9ZX1mdW5jdGlvbiBPdHQodCxlKXt0LmY9ZX1mdW5jdGlvbiBDQyh0LGUpe3QuZz1lfWZ1bmN0aW9uIHZ4KHQsZSl7dC5lPWV9ZnVuY3Rpb24gbXB0KHQsZSl7dC5mPWV9ZnVuY3Rpb24gWmsodCxlKXt0LmY9ZX1mdW5jdGlvbiBQdHQodCxlKXt0Lm49ZX1mdW5jdGlvbiBUZyh0LGUpe3QuYT1lfWZ1bmN0aW9uIHlwdCh0LGUpe3QuYT1lfWZ1bmN0aW9uIE8zKHQsZSl7dC5jPWV9ZnVuY3Rpb24gRnR0KHQsZSl7dC5jPWV9ZnVuY3Rpb24gTnR0KHQsZSl7dC5kPWV9ZnVuY3Rpb24gY1IodCxlKXt0LmU9ZX1mdW5jdGlvbiB1Uih0LGUpe3QuZz1lfWZ1bmN0aW9uIEJ0dCh0LGUpe3QuYT1lfWZ1bmN0aW9uIEprKHQsZSl7dC5jPWV9ZnVuY3Rpb24gX0ModCxlKXt0LmQ9ZX1mdW5jdGlvbiB4cHQodCxlKXt0LmU9ZX1mdW5jdGlvbiBSdHQodCxlKXt0LmY9ZX1mdW5jdGlvbiBqdHQodCxlKXt0Lmo9ZX1mdW5jdGlvbiAkdHQodCxlKXt0LmE9ZX1mdW5jdGlvbiBrcHQodCxlKXt0LmI9ZX1mdW5jdGlvbiB2Yyh0LGUpe3QuYT1lfWZ1bmN0aW9uIGxSKHQpe3QuYj10LmF9ZnVuY3Rpb24genR0KHQpe3QuYz10LmQuZH1mdW5jdGlvbiBteCh0KXt0aGlzLmQ9dH1mdW5jdGlvbiBDZyh0KXt0aGlzLmE9dH1mdW5jdGlvbiBTbSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBjTSh0KXt0aGlzLmE9dH1mdW5jdGlvbiB2MSh0KXt0aGlzLmE9dH1mdW5jdGlvbiB5eCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBxdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaFIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUDModCl7dGhpcy5hPXR9ZnVuY3Rpb24gdU0odCl7dGhpcy5hPXR9ZnVuY3Rpb24gQW0odCl7dGhpcy5hPXR9ZnVuY3Rpb24gZlIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbTEodCl7dGhpcy5hPXR9ZnVuY3Rpb24geSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBnKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHgodCl7dGhpcy5iPXR9ZnVuY3Rpb24gVCh0KXt0aGlzLmI9dH1mdW5jdGlvbiBMKHQpe3RoaXMuYj10fWZ1bmN0aW9uIE8odCl7dGhpcy5hPXR9ZnVuY3Rpb24gUCh0KXt0aGlzLmE9dH1mdW5jdGlvbiAkKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHEodCl7dGhpcy5jPXR9ZnVuY3Rpb24gUyh0KXt0aGlzLmM9dH1mdW5jdGlvbiBWKHQpe3RoaXMuYz10fWZ1bmN0aW9uIFkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcnQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gb3QodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24ga3QodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWnQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWXQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcXQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbmUodCl7dGhpcy5hPXR9ZnVuY3Rpb24gR3QodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZ2UodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYmUodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaWUodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRmUodCl7dGhpcy5hPXR9ZnVuY3Rpb24gd2UodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYm4odCl7dGhpcy5hPXR9ZnVuY3Rpb24gemUodCl7dGhpcy5hPXR9ZnVuY3Rpb24gR2UodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRW4odCl7dGhpcy5hPXR9ZnVuY3Rpb24gSW4odCl7dGhpcy5hPXR9ZnVuY3Rpb24gWW4odCl7dGhpcy5hPXR9ZnVuY3Rpb24gU24odCl7dGhpcy5hPXR9ZnVuY3Rpb24gV24odCl7dGhpcy5hPXR9ZnVuY3Rpb24gcnIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gd3IodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdXIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZXIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdm4odCl7dGhpcy5hPXR9ZnVuY3Rpb24gZ3IodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZnIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSnIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdmkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWHModCl7dGhpcy5hPXR9ZnVuY3Rpb24gRWEodCl7dGhpcy5hPXR9ZnVuY3Rpb24gQ2kodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaGkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZ3ModCl7dGhpcy5hPXR9ZnVuY3Rpb24gcWkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gU2kodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVWkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVmEodCl7dGhpcy5lPXR9ZnVuY3Rpb24gUXModCl7dGhpcy5hPXR9ZnVuY3Rpb24gcXModCl7dGhpcy5hPXR9ZnVuY3Rpb24gVHIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUXQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gam4odCl7dGhpcy5hPXR9ZnVuY3Rpb24gU3IodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaXIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gc3IodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSWEodCl7dGhpcy5hPXR9ZnVuY3Rpb24gJHIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWWkodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRm8odCl7dGhpcy5hPXR9ZnVuY3Rpb24gUGModCl7dGhpcy5hPXR9ZnVuY3Rpb24gWmEodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbWModCl7dGhpcy5hPXR9ZnVuY3Rpb24gVGEodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSmEodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbWwodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcWYodCl7dGhpcy5hPXR9ZnVuY3Rpb24gQ3AodCl7dGhpcy5hPXR9ZnVuY3Rpb24gX3AodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSGYodCl7dGhpcy5hPXR9ZnVuY3Rpb24gX2codCl7dGhpcy5hPXR9ZnVuY3Rpb24gY2QodCl7dGhpcy5hPXR9ZnVuY3Rpb24gbXcodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTG0odCl7dGhpcy5hPXR9ZnVuY3Rpb24geHgodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRjModCl7dGhpcy5hPXR9ZnVuY3Rpb24ga3godCl7dGhpcy5hPXR9ZnVuY3Rpb24gU0ModCl7dGhpcy5hPXR9ZnVuY3Rpb24gTjModCl7dGhpcy5hPXR9ZnVuY3Rpb24gSGQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geTEodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVmQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gQUModCl7dGhpcy5hPXR9ZnVuY3Rpb24gWWIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZFIodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSHR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFZ0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBHdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVXR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFd0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBZdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gS3R0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHQ4KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGxNKHQpe3RoaXMuYT10fWZ1bmN0aW9uIExDKHQpe3RoaXMuYT10fWZ1bmN0aW9uIGdSKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHBSKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFh0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBTcCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBoTSh0KXt0aGlzLmE9dH1mdW5jdGlvbiBiUih0KXt0aGlzLmE9dH1mdW5jdGlvbiBlOCh0KXt0aGlzLmM9dH1mdW5jdGlvbiBBcCh0KXt0aGlzLmI9dH1mdW5jdGlvbiBRdHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEEkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBMJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEQkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBJJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFAkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBGJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEIkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBSJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gaiR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uICQkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB6JHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEgkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBWJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gRyR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFUkdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBXJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gWSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEskdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBMcCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBFeCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBYJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gUSR0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFokdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBKJHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGV6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBuenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcnp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGl6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBzenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gYXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG96dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBjenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGx6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBoenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gd1IodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZnp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGR6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBnenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gcHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGJ6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB3enQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gdnp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG16dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiB5enQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIGt6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBFenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEN6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBfenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gU3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEF6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBMenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIER6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBJenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gT3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFB6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBGenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gTnp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEJ6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBSenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24ganp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIEVwdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBWaSh0KXt0aGlzLmI9dH1mdW5jdGlvbiAkenQodCl7dGhpcy5mPXR9ZnVuY3Rpb24gVHB0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIHp6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBxenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSHp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFZ6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBHenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gVXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFd6dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBZenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gZk0odCl7dGhpcy5hPXR9ZnVuY3Rpb24gS3p0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIFh6dCh0KXt0aGlzLmI9dH1mdW5jdGlvbiBDcHQodCl7dGhpcy5jPXR9ZnVuY3Rpb24gdlIodCl7dGhpcy5lPXR9ZnVuY3Rpb24gUXp0KHQpe3RoaXMuYT10fWZ1bmN0aW9uIG1SKHQpe3RoaXMuYT10fWZ1bmN0aW9uIHlSKHQpe3RoaXMuYT10fWZ1bmN0aW9uIFp0dCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBaenQodCl7dGhpcy5hPXR9ZnVuY3Rpb24gSnp0KHQpe3RoaXMuZD10fWZ1bmN0aW9uIF9wdCh0KXt0aGlzLmE9dH1mdW5jdGlvbiBTcHQodCl7dGhpcy5hPXR9ZnVuY3Rpb24geXcodCl7dGhpcy5lPXR9ZnVuY3Rpb24gV1llKCl7dGhpcy5hPTB9ZnVuY3Rpb24gQjMoKXtJVXQodGhpcyl9ZnVuY3Rpb24gaGUoKXthbnQodGhpcyl9ZnVuY3Rpb24gX3IoKXtYdSh0aGlzKX1mdW5jdGlvbiBKdHQoKXtOWHQodGhpcyl9ZnVuY3Rpb24gdHF0KCl7fWZ1bmN0aW9uIHh3KCl7dGhpcy5jPW9MdH1mdW5jdGlvbiBZWWUodCxlKXtlLldiKHQpfWZ1bmN0aW9uIGVxdCh0LGUpe3QuYis9ZX1mdW5jdGlvbiBucXQodCl7dC5iPW5ldyB3ZXR9ZnVuY3Rpb24gaXQodCl7cmV0dXJuIHQuZX1mdW5jdGlvbiBLWWUodCl7cmV0dXJuIHQuYX1mdW5jdGlvbiBYWWUodCl7cmV0dXJuIHQuYX1mdW5jdGlvbiBRWWUodCl7cmV0dXJuIHQuYX1mdW5jdGlvbiBaWWUodCl7cmV0dXJuIHQuYX1mdW5jdGlvbiBKWWUodCl7cmV0dXJuIHQuYX1mdW5jdGlvbiB0S2UoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBlS2UoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBuS2UoKXtkYnQoKSxkeG4oKX1mdW5jdGlvbiByS2UodCl7dC5iLnRmKHQuZSl9ZnVuY3Rpb24gTUModCxlKXt0LmI9ZS10LmJ9ZnVuY3Rpb24gREModCxlKXt0LmE9ZS10LmF9ZnVuY3Rpb24gcnF0KHQsZSl7ZS5hZCh0LmEpfWZ1bmN0aW9uIGlLZSh0LGUpe0JzKGUsdCl9ZnVuY3Rpb24gc0tlKHQsZSxuKXt0Lk9kKG4sZSl9ZnVuY3Rpb24gZE0odCxlKXt0LmU9ZSxlLmI9dH1mdW5jdGlvbiBBcHQodCl7Z2QoKSx0aGlzLmE9dH1mdW5jdGlvbiBpcXQodCl7Z2QoKSx0aGlzLmE9dH1mdW5jdGlvbiBzcXQodCl7Z2QoKSx0aGlzLmE9dH1mdW5jdGlvbiBMcHQodCl7V20oKSx0aGlzLmE9dH1mdW5jdGlvbiBhcXQodCl7STgoKSxPdXQuYmUodCl9ZnVuY3Rpb24gS2IoKXtwV3QuY2FsbCh0aGlzKX1mdW5jdGlvbiBNcHQoKXtwV3QuY2FsbCh0aGlzKX1mdW5jdGlvbiBEcHQoKXtLYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIHRldCgpe0tiLmNhbGwodGhpcyl9ZnVuY3Rpb24gb3F0KCl7S2IuY2FsbCh0aGlzKX1mdW5jdGlvbiBnTSgpe0tiLmNhbGwodGhpcyl9ZnVuY3Rpb24gT3UoKXtLYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIElDKCl7S2IuY2FsbCh0aGlzKX1mdW5jdGlvbiBPcigpe0tiLmNhbGwodGhpcyl9ZnVuY3Rpb24gcmgoKXtLYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIGNxdCgpe0tiLmNhbGwodGhpcyl9ZnVuY3Rpb24gbGMoKXtLYi5jYWxsKHRoaXMpfWZ1bmN0aW9uIHVxdCgpe0tiLmNhbGwodGhpcyl9ZnVuY3Rpb24gbHF0KCl7dGhpcy5hPXRoaXN9ZnVuY3Rpb24geFIoKXt0aGlzLkJifD0yNTZ9ZnVuY3Rpb24gaHF0KCl7dGhpcy5iPW5ldyBkVXR9ZnVuY3Rpb24gSXB0KCl7SXB0PVosbmV3IF9yfWZ1bmN0aW9uIE9wdCgpe0RwdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIGZxdCh0LGUpe3QubGVuZ3RoPWV9ZnVuY3Rpb24ga1IodCxlKXtsZSh0LmEsZSl9ZnVuY3Rpb24gYUtlKHQsZSl7VjR0KHQuYyxlKX1mdW5jdGlvbiBvS2UodCxlKXtGcyh0LmIsZSl9ZnVuY3Rpb24gY0tlKHQsZSl7SnoodC5hLGUpfWZ1bmN0aW9uIHVLZSh0LGUpe1dpdCh0LmEsZSl9ZnVuY3Rpb24gbjgodCxlKXttaSh0LmUsZSl9ZnVuY3Rpb24gVHgodCl7cHEodC5jLHQuYil9ZnVuY3Rpb24gbEtlKHQsZSl7dC5rYygpLk5iKGUpfWZ1bmN0aW9uIFBwdCh0KXt0aGlzLmE9Y2huKHQpfWZ1bmN0aW9uIEhzKCl7dGhpcy5hPW5ldyBfcn1mdW5jdGlvbiBkcXQoKXt0aGlzLmE9bmV3IF9yfWZ1bmN0aW9uIEVSKCl7dGhpcy5hPW5ldyBoZX1mdW5jdGlvbiBlZXQoKXt0aGlzLmE9bmV3IGhlfWZ1bmN0aW9uIEZwdCgpe3RoaXMuYT1uZXcgaGV9ZnVuY3Rpb24gQ2goKXt0aGlzLmE9bmV3IHV3fWZ1bmN0aW9uIFhiKCl7dGhpcy5hPW5ldyBWSnR9ZnVuY3Rpb24gTnB0KCl7dGhpcy5hPW5ldyBINX1mdW5jdGlvbiBCcHQoKXt0aGlzLmE9bmV3IExWdH1mdW5jdGlvbiBncXQoKXt0aGlzLmE9bmV3IHdadH1mdW5jdGlvbiBScHQoKXt0aGlzLmE9bmV3IE9RdH1mdW5jdGlvbiBqcHQoKXt0aGlzLmE9bmV3IHJZdH1mdW5jdGlvbiBwcXQoKXt0aGlzLmE9bmV3IGhlfWZ1bmN0aW9uICRwdCgpe3RoaXMuYT1uZXcgaGV9ZnVuY3Rpb24gYnF0KCl7dGhpcy5hPW5ldyBoZX1mdW5jdGlvbiB3cXQoKXt0aGlzLmE9bmV3IGhlfWZ1bmN0aW9uIHZxdCgpe3RoaXMuZD1uZXcgaGV9ZnVuY3Rpb24gbXF0KCl7dGhpcy5hPW5ldyBIc31mdW5jdGlvbiB5cXQoKXt0aGlzLmE9bmV3IF9yfWZ1bmN0aW9uIHhxdCgpe3RoaXMuYj1uZXcgX3J9ZnVuY3Rpb24ga3F0KCl7dGhpcy5iPW5ldyBoZX1mdW5jdGlvbiB6cHQoKXt0aGlzLmU9bmV3IGhlfWZ1bmN0aW9uIEVxdCgpe3RoaXMuZD1uZXcgaGV9ZnVuY3Rpb24gVHF0KCl7dGhpcy5hPW5ldyB0dHR9ZnVuY3Rpb24gQ3F0KCl7aGUuY2FsbCh0aGlzKX1mdW5jdGlvbiBxcHQoKXtFUi5jYWxsKHRoaXMpfWZ1bmN0aW9uIF9xdCgpe0lqLmNhbGwodGhpcyl9ZnVuY3Rpb24gU3F0KCl7JHB0LmNhbGwodGhpcyl9ZnVuY3Rpb24gbmV0KCl7T0MuY2FsbCh0aGlzKX1mdW5jdGlvbiBPQygpe3RxdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIEN4KCl7dHF0LmNhbGwodGhpcyl9ZnVuY3Rpb24gSHB0KCl7Q3guY2FsbCh0aGlzKX1mdW5jdGlvbiBBcXQoKXtsUXQuY2FsbCh0aGlzKX1mdW5jdGlvbiBMcXQoKXtsUXQuY2FsbCh0aGlzKX1mdW5jdGlvbiBNcXQoKXtYcHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBEcXQoKXtYcHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBJcXQoKXtYcHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBPcXQoKXtRcHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBQdSgpe1ppLmNhbGwodGhpcyl9ZnVuY3Rpb24gVnB0KCl7RW0uY2FsbCh0aGlzKX1mdW5jdGlvbiBHcHQoKXtFbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFBxdCgpe1hxdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIEZxdCgpe1hxdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIE5xdCgpe19yLmNhbGwodGhpcyl9ZnVuY3Rpb24gQnF0KCl7X3IuY2FsbCh0aGlzKX1mdW5jdGlvbiBScXQoKXtfci5jYWxsKHRoaXMpfWZ1bmN0aW9uIGpxdCgpe0hzLmNhbGwodGhpcyl9ZnVuY3Rpb24gcmV0KCl7aW5lLmNhbGwodGhpcyl9ZnVuY3Rpb24gJHF0KCl7eFIuY2FsbCh0aGlzKX1mdW5jdGlvbiBpZXQoKXt4MnQuY2FsbCh0aGlzKX1mdW5jdGlvbiBzZXQoKXt4MnQuY2FsbCh0aGlzKX1mdW5jdGlvbiBVcHQoKXtfci5jYWxsKHRoaXMpfWZ1bmN0aW9uIGFldCgpe19yLmNhbGwodGhpcyl9ZnVuY3Rpb24genF0KCl7X3IuY2FsbCh0aGlzKX1mdW5jdGlvbiBXcHQoKXtQay5jYWxsKHRoaXMpfWZ1bmN0aW9uIHFxdCgpe1BrLmNhbGwodGhpcyl9ZnVuY3Rpb24gSHF0KCl7V3B0LmNhbGwodGhpcyl9ZnVuY3Rpb24gVnF0KCl7WEwuY2FsbCh0aGlzKX1mdW5jdGlvbiBHcXQodCl7TGVlLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBVcXQodCl7TGVlLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBZcHQodCl7bk0uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEtwdCh0KXttVnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGhLZSh0KXtLcHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGZLZSh0KXttVnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHI4KCl7dGhpcy5hPW5ldyBaaX1mdW5jdGlvbiBYcHQoKXt0aGlzLmE9bmV3IEhzfWZ1bmN0aW9uIFFwdCgpe3RoaXMuYT1uZXcgX3J9ZnVuY3Rpb24gV3F0KCl7dGhpcy5hPW5ldyBoZX1mdW5jdGlvbiBZcXQoKXt0aGlzLmo9bmV3IGhlfWZ1bmN0aW9uIFpwdCgpe3RoaXMuYT1uZXcgbkJ9ZnVuY3Rpb24gS3F0KCl7dGhpcy5hPW5ldyBWSHR9ZnVuY3Rpb24gWHF0KCl7dGhpcy5hPW5ldyBjQn1mdW5jdGlvbiBvZXQoKXtvZXQ9WixTdXQ9bmV3IGdIdH1mdW5jdGlvbiBjZXQoKXtjZXQ9WixfdXQ9bmV3IGRIdH1mdW5jdGlvbiBQQygpe1BDPVosQ3V0PW5ldyBBfWZ1bmN0aW9uIFRSKCl7VFI9WixNdXQ9bmV3IGRXdH1mdW5jdGlvbiBkS2UodCl7S3B0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBnS2UodCl7S3B0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBRcXQodCl7JHJ0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBacXQodCl7JHJ0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiBKcXQodCl7Q1l0LmNhbGwodGhpcyx0KX1mdW5jdGlvbiB1ZXQodCl7UGduLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBrdyh0KXtPbS5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gRkModCl7TlIuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEpwdCh0KXtOUi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gdEh0KHQpe05SLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBWbyh0KXtqS3QuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGVIdCh0KXtWby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gX3goKXtRay5jYWxsKHRoaXMse30pfWZ1bmN0aW9uIENSKHQpe3c4KCksdGhpcy5hPXR9ZnVuY3Rpb24gTkModCl7dC5iPW51bGwsdC5jPTB9ZnVuY3Rpb24gcEtlKHQsZSl7dC5lPWUsbnVlKHQsZSl9ZnVuY3Rpb24gYktlKHQsZSl7dC5hPWUseXBuKHQpfWZ1bmN0aW9uIGhldCh0LGUsbil7dC5hW2UuZ109bn1mdW5jdGlvbiB3S2UodCxlLG4pe05kbihuLHQsZSl9ZnVuY3Rpb24gdktlKHQsZSl7SFplKGUuaSx0Lm4pfWZ1bmN0aW9uIG5IdCh0LGUpe1Z1bih0KS50ZChlKX1mdW5jdGlvbiBtS2UodCxlKXtyZXR1cm4gdCp0L2V9ZnVuY3Rpb24gckh0KHQsZSl7cmV0dXJuIHQuZy1lLmd9ZnVuY3Rpb24geUtlKHQpe3JldHVybiBuZXcgRUModCl9ZnVuY3Rpb24geEtlKHQpe3JldHVybiBuZXcgVW0odCl9ZnVuY3Rpb24gX1IodCl7Vm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHlvKHQpe1ZvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBpSHQodCl7Vm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGZldCh0KXtqS3QuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGRldCh0KXt3eXQoKSx0aGlzLmE9dH1mdW5jdGlvbiBzSHQodCl7RFl0KCksdGhpcy5hPXR9ZnVuY3Rpb24gTW0odCl7Vm50KCksdGhpcy5mPXR9ZnVuY3Rpb24gZ2V0KHQpe1ZudCgpLHRoaXMuZj10fWZ1bmN0aW9uIGk4KHQpe1ZvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBGbih0KXtWby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gTm8odCl7Vm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGFIdCh0KXtWby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gU3godCl7Vm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGplKHQpe3JldHVybiBPbih0KSx0fWZ1bmN0aW9uIFh0KHQpe3JldHVybiBPbih0KSx0fWZ1bmN0aW9uIHBNKHQpe3JldHVybiBPbih0KSx0fWZ1bmN0aW9uIHRidCh0KXtyZXR1cm4gT24odCksdH1mdW5jdGlvbiBrS2UodCl7cmV0dXJuIE9uKHQpLHR9ZnVuY3Rpb24gQkModCl7cmV0dXJuIHQuYj09dC5jfWZ1bmN0aW9uIERtKHQpe3JldHVybiEhdCYmdC5ifWZ1bmN0aW9uIEVLZSh0KXtyZXR1cm4hIXQmJnQua31mdW5jdGlvbiBUS2UodCl7cmV0dXJuISF0JiZ0Lmp9ZnVuY3Rpb24geWwodCl7T24odCksdGhpcy5hPXR9ZnVuY3Rpb24gZWJ0KHQpe3JldHVybiBnMih0KSx0fWZ1bmN0aW9uIFJDKHQpe2R2dCh0LHQubGVuZ3RoKX1mdW5jdGlvbiBTZyh0KXtWby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gdWQodCl7Vm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIHBldCh0KXtWby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gUjModCl7Vm8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGpDKHQpe1ZvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBOcih0KXtWby5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gYmV0KHQpe2oydC5jYWxsKHRoaXMsdCwwKX1mdW5jdGlvbiB3ZXQoKXtXdnQuY2FsbCh0aGlzLDEyLDMpfWZ1bmN0aW9uIG5idCgpe25idD1aLHJFdD1uZXcgcHR9ZnVuY3Rpb24gb0h0KCl7b0h0PVosbkV0PW5ldyBffWZ1bmN0aW9uIFNSKCl7U1I9WixjUz1uZXcgbXR9ZnVuY3Rpb24gY0h0KCl7Y0h0PVosQmdlPW5ldyBmdH1mdW5jdGlvbiB1SHQoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIHJidCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gbEh0KCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiBDS2UoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIF9LZSgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gU0tlKCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiB2ZXQoKXt0aGlzLmE9QnIoTHIoWWEpKX1mdW5jdGlvbiBBeCh0KXtnZCgpLHRoaXMuYT1Mcih0KX1mdW5jdGlvbiBoSHQodCxlKXt0LlRkKGUpLGUuU2QodCl9ZnVuY3Rpb24gQUtlKHQsZSl7dC5hLmVjKCkuTWMoZSl9ZnVuY3Rpb24gTEtlKHQsZSxuKXt0LmMubGYoZSxuKX1mdW5jdGlvbiBpYnQodCl7eW8uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGxkKHQpe0ZuLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBBZygpe3l4LmNhbGwodGhpcywiIil9ZnVuY3Rpb24gJEMoKXt5eC5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIE1wKCl7eXguY2FsbCh0aGlzLCIiKX1mdW5jdGlvbiBJbSgpe3l4LmNhbGwodGhpcywiIil9ZnVuY3Rpb24gc2J0KHQpe3lvLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBzOCh0KXtULmNhbGwodGhpcyx0KX1mdW5jdGlvbiBtZXQodCl7RWouY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGZIdCh0KXtzOC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gZEh0KCl7eEMuY2FsbCh0aGlzLG51bGwpfWZ1bmN0aW9uIGdIdCgpe3hDLmNhbGwodGhpcyxudWxsKX1mdW5jdGlvbiBBUigpe0FSPVosSTgoKX1mdW5jdGlvbiBwSHQoKXtwSHQ9WixXZ2U9dTBuKCl9ZnVuY3Rpb24gYkh0KHQpe3JldHVybiB0LmE/dC5iOjB9ZnVuY3Rpb24gTUtlKHQpe3JldHVybiB0LmE/dC5iOjB9ZnVuY3Rpb24gREtlKHQsZSl7cmV0dXJuIHQuYS1lLmF9ZnVuY3Rpb24gSUtlKHQsZSl7cmV0dXJuIHQuYS1lLmF9ZnVuY3Rpb24gT0tlKHQsZSl7cmV0dXJuIHQuYS1lLmF9ZnVuY3Rpb24gTFIodCxlKXtyZXR1cm4gQm10KHQsZSl9ZnVuY3Rpb24gY3QodCxlKXtyZXR1cm4gTlF0KHQsZSl9ZnVuY3Rpb24gUEtlKHQsZSl7cmV0dXJuIGUgaW4gdC5hfWZ1bmN0aW9uIHdIdCh0LGUpe3JldHVybiB0LmY9ZSx0fWZ1bmN0aW9uIEZLZSh0LGUpe3JldHVybiB0LmI9ZSx0fWZ1bmN0aW9uIHZIdCh0LGUpe3JldHVybiB0LmM9ZSx0fWZ1bmN0aW9uIE5LZSh0LGUpe3JldHVybiB0Lmc9ZSx0fWZ1bmN0aW9uIGFidCh0LGUpe3JldHVybiB0LmE9ZSx0fWZ1bmN0aW9uIG9idCh0LGUpe3JldHVybiB0LmY9ZSx0fWZ1bmN0aW9uIEJLZSh0LGUpe3JldHVybiB0Lms9ZSx0fWZ1bmN0aW9uIGNidCh0LGUpe3JldHVybiB0LmE9ZSx0fWZ1bmN0aW9uIFJLZSh0LGUpe3JldHVybiB0LmU9ZSx0fWZ1bmN0aW9uIHVidCh0LGUpe3JldHVybiB0LmU9ZSx0fWZ1bmN0aW9uIGpLZSh0LGUpe3JldHVybiB0LmY9ZSx0fWZ1bmN0aW9uICRLZSh0LGUpe3QuYj0hMCx0LmQ9ZX1mdW5jdGlvbiB6S2UodCxlKXt0LmI9bmV3IHhvKGUpfWZ1bmN0aW9uIHFLZSh0LGUsbil7ZS50ZCh0LmFbbl0pfWZ1bmN0aW9uIEhLZSh0LGUsbil7ZS53ZSh0LmFbbl0pfWZ1bmN0aW9uIFZLZSh0LGUpe3JldHVybiB0LmItZS5ifWZ1bmN0aW9uIEdLZSh0LGUpe3JldHVybiB0LmctZS5nfWZ1bmN0aW9uIFVLZSh0LGUpe3JldHVybiB0LnMtZS5zfWZ1bmN0aW9uIFdLZSh0LGUpe3JldHVybiB0PzA6ZS0xfWZ1bmN0aW9uIG1IdCh0LGUpe3JldHVybiB0PzA6ZS0xfWZ1bmN0aW9uIFlLZSh0LGUpe3JldHVybiB0P2UtMTowfWZ1bmN0aW9uIEtLZSh0LGUpe3JldHVybiBlLllmKHQpfWZ1bmN0aW9uIEV3KHQsZSl7cmV0dXJuIHQuYj1lLHR9ZnVuY3Rpb24gTVIodCxlKXtyZXR1cm4gdC5hPWUsdH1mdW5jdGlvbiBUdyh0LGUpe3JldHVybiB0LmM9ZSx0fWZ1bmN0aW9uIEN3KHQsZSl7cmV0dXJuIHQuZD1lLHR9ZnVuY3Rpb24gX3codCxlKXtyZXR1cm4gdC5lPWUsdH1mdW5jdGlvbiBsYnQodCxlKXtyZXR1cm4gdC5mPWUsdH1mdW5jdGlvbiB6Qyh0LGUpe3JldHVybiB0LmE9ZSx0fWZ1bmN0aW9uIGE4KHQsZSl7cmV0dXJuIHQuYj1lLHR9ZnVuY3Rpb24gbzgodCxlKXtyZXR1cm4gdC5jPWUsdH1mdW5jdGlvbiBaZSh0LGUpe3JldHVybiB0LmM9ZSx0fWZ1bmN0aW9uIGtuKHQsZSl7cmV0dXJuIHQuYj1lLHR9ZnVuY3Rpb24gSmUodCxlKXtyZXR1cm4gdC5kPWUsdH1mdW5jdGlvbiB0bih0LGUpe3JldHVybiB0LmU9ZSx0fWZ1bmN0aW9uIFhLZSh0LGUpe3JldHVybiB0LmY9ZSx0fWZ1bmN0aW9uIGVuKHQsZSl7cmV0dXJuIHQuZz1lLHR9ZnVuY3Rpb24gbm4odCxlKXtyZXR1cm4gdC5hPWUsdH1mdW5jdGlvbiBybih0LGUpe3JldHVybiB0Lmk9ZSx0fWZ1bmN0aW9uIHNuKHQsZSl7cmV0dXJuIHQuaj1lLHR9ZnVuY3Rpb24geUh0KHQsZSl7cmV0dXJuIHQuaz1lLHR9ZnVuY3Rpb24gUUtlKHQsZSl7cmV0dXJuIHQuaj1lLHR9ZnVuY3Rpb24gWktlKHQsZSl7bmIoKSxVbyhlLHQpfWZ1bmN0aW9uIEpLZSh0LGUsbil7V2VuKHQuYSxlLG4pfWZ1bmN0aW9uIHhIdCh0KXtSWHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIGhidCh0KXtSWHQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIERSKHQpe1NudC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24ga0h0KHQpe2Jobi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gRHAodCl7UXcuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEVIdCh0KXtwcnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFRIdCh0KXtwcnQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIENIdCgpe2IydC5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIENhKCl7dGhpcy5hPTAsdGhpcy5iPTB9ZnVuY3Rpb24gX0h0KCl7dGhpcy5iPTAsdGhpcy5hPTB9ZnVuY3Rpb24gU0h0KHQsZSl7dC5iPTAscnkodCxlKX1mdW5jdGlvbiB0WGUodCxlKXt0LmM9ZSx0LmI9ITB9ZnVuY3Rpb24gQUh0KHQsZSl7cmV0dXJuIHQuYy5fYihlKX1mdW5jdGlvbiBWZih0KXtyZXR1cm4gdC5lJiZ0LmUoKX1mdW5jdGlvbiB5ZXQodCl7cmV0dXJuIHQ/dC5kOm51bGx9ZnVuY3Rpb24gTEh0KHQsZSl7cmV0dXJuIGVpZSh0LmIsZSl9ZnVuY3Rpb24gZVhlKHQpe3JldHVybiB0P3QuZzpudWxsfWZ1bmN0aW9uIG5YZSh0KXtyZXR1cm4gdD90Lmk6bnVsbH1mdW5jdGlvbiBJcCh0KXtyZXR1cm4gUDAodCksdC5vfWZ1bmN0aW9uIFN3KCl7U3c9WixHNGU9eWRuKCl9ZnVuY3Rpb24gTUh0KCl7TUh0PVosbmE9STBuKCl9ZnVuY3Rpb24gYzgoKXtjOD1aLGFMdD1rZG4oKX1mdW5jdGlvbiBESHQoKXtESHQ9WixMNWU9eGRuKCl9ZnVuY3Rpb24gZmJ0KCl7ZmJ0PVoscGM9d3BuKCl9ZnVuY3Rpb24gZGJ0KCl7ZGJ0PVosQWI9SzgoKX1mdW5jdGlvbiBJSHQoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIE9IdCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gUEh0KCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiBGSHQoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIE5IdCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gQkh0KCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiBJUih0KXt0aGlzLmE9bmV3IEx4KHQpfWZ1bmN0aW9uIGdidCh0KXtJaGUoKSxfeG4odGhpcyx0KX1mdW5jdGlvbiBPcCh0KXt0aGlzLmE9bmV3IFludCh0KX1mdW5jdGlvbiBqMyh0LGUpe2Zvcig7dC55ZShlKTspO31mdW5jdGlvbiBwYnQodCxlKXtmb3IoO3Quc2QoZSk7KTt9ZnVuY3Rpb24gJDModCxlKXtyZXR1cm4gdC5hKz1lLHR9ZnVuY3Rpb24geGV0KHQsZSl7cmV0dXJuIHQuYSs9ZSx0fWZ1bmN0aW9uIExnKHQsZSl7cmV0dXJuIHQuYSs9ZSx0fWZ1bmN0aW9uIEF3KHQsZSl7cmV0dXJuIHQuYSs9ZSx0fWZ1bmN0aW9uIHFDKHQpe3JldHVybiBWcCh0KSx0LmF9ZnVuY3Rpb24gT1IodCl7cmV0dXJuIHQuYiE9dC5kLmN9ZnVuY3Rpb24gUkh0KHQpe3JldHVybiB0Lmx8dC5tPDwyMn1mdW5jdGlvbiBiYnQodCxlKXtyZXR1cm4gdC5kW2UucF19ZnVuY3Rpb24gakh0KHQsZSl7cmV0dXJuIGF2bih0LGUpfWZ1bmN0aW9uIHdidCh0LGUsbil7dC5zcGxpY2UoZSxuKX1mdW5jdGlvbiAkSHQodCl7dC5jP0V1ZSh0KTpUdWUodCl9ZnVuY3Rpb24gUFIodCl7dGhpcy5hPTAsdGhpcy5iPXR9ZnVuY3Rpb24gekh0KCl7dGhpcy5hPW5ldyB2SShtX3QpfWZ1bmN0aW9uIHFIdCgpe3RoaXMuYj1uZXcgdkkoc190KX1mdW5jdGlvbiBISHQoKXt0aGlzLmI9bmV3IHZJKFpodCl9ZnVuY3Rpb24gVkh0KCl7dGhpcy5iPW5ldyB2SShaaHQpfWZ1bmN0aW9uIEdIdCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gVUh0KCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiBXSHQoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIFlIdCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gS0h0KCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiBYSHQoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIFFIdCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gWkh0KCl7dGhyb3cgaXQobmV3IE9yKX1mdW5jdGlvbiBKSHQoKXt0aHJvdyBpdChuZXcgT3IpfWZ1bmN0aW9uIHRWdCgpe3Rocm93IGl0KG5ldyBPcil9ZnVuY3Rpb24gclhlKCl7dGhyb3cgaXQobmV3IGxjKX1mdW5jdGlvbiBpWGUoKXt0aHJvdyBpdChuZXcgbGMpfWZ1bmN0aW9uIGJNKHQpe3RoaXMuYT1uZXcgZVZ0KHQpfWZ1bmN0aW9uIGVWdCh0KXtwY24odGhpcyx0LHAwbigpKX1mdW5jdGlvbiB3TSh0KXtyZXR1cm4hdHx8a1h0KHQpfWZ1bmN0aW9uIHZNKHQpe3JldHVybiBZMVt0XSE9LTF9ZnVuY3Rpb24gc1hlKCl7WkghPTAmJihaSD0wKSxKSD0tMX1mdW5jdGlvbiBuVnQoKXtUdXQ9PW51bGwmJihUdXQ9W10pfWZ1bmN0aW9uIGFYZSh0LGUpe3RhdChXdCh0LmEpLGUpfWZ1bmN0aW9uIG9YZSh0LGUpe3RhdChXdCh0LmEpLGUpfWZ1bmN0aW9uIG1NKHQsZSl7SzMuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gdTgodCxlKXttTS5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiB2YnQodCxlKXt0aGlzLmI9dCx0aGlzLmM9ZX1mdW5jdGlvbiByVnQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBpVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBzVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBhVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBvVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBjVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiB1VnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBsVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBoVnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBmVnQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBkVnQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBnVnQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBwVnQodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZX1mdW5jdGlvbiBWcih0LGUpe3RoaXMuZj10LHRoaXMuZz1lfWZ1bmN0aW9uIGw4KHQsZSl7dGhpcy5lPXQsdGhpcy5kPWV9ZnVuY3Rpb24gTHcodCxlKXt0aGlzLmc9dCx0aGlzLmk9ZX1mdW5jdGlvbiBrZXQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBiVnQodCxlKXt0aGlzLmE9dCx0aGlzLmY9ZX1mdW5jdGlvbiB3VnQodCxlKXt0aGlzLmI9dCx0aGlzLmM9ZX1mdW5jdGlvbiBjWGUodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiB2VnQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBFZXQodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBtVnQodCl7QTJ0KHQuZGMoKSksdGhpcy5jPXR9ZnVuY3Rpb24gRlIodCl7dGhpcy5iPXUoTHIodCksODMpfWZ1bmN0aW9uIHlWdCh0KXt0aGlzLmE9dShMcih0KSw4Myl9ZnVuY3Rpb24gT20odCl7dGhpcy5hPXUoTHIodCksMTUpfWZ1bmN0aW9uIHhWdCh0KXt0aGlzLmE9dShMcih0KSwxNSl9ZnVuY3Rpb24gTlIodCl7dGhpcy5iPXUoTHIodCksNDcpfWZ1bmN0aW9uIEJSKCl7dGhpcy5xPW5ldyBiLkRhdGV9ZnVuY3Rpb24gR2QoKXtHZD1aLHZFdD1uZXcgQ3R9ZnVuY3Rpb24gaDgoKXtoOD1aLGE3PW5ldyBPdH1mdW5jdGlvbiBIQyh0KXtyZXR1cm4gdC5mLmMrdC5nLmN9ZnVuY3Rpb24geU0odCxlKXtyZXR1cm4gdC5iLkhjKGUpfWZ1bmN0aW9uIGtWdCh0LGUpe3JldHVybiB0LmIuSWMoZSl9ZnVuY3Rpb24gRVZ0KHQsZSl7cmV0dXJuIHQuYi5RYyhlKX1mdW5jdGlvbiBUVnQodCxlKXtyZXR1cm4gdC5iLkhjKGUpfWZ1bmN0aW9uIENWdCh0LGUpe3JldHVybiB0LmMudWMoZSl9ZnVuY3Rpb24gSTAodCxlKXtyZXR1cm4gdC5hLl9iKGUpfWZ1bmN0aW9uIF9WdCh0LGUpe3JldHVybiB5aSh0LmMsZSl9ZnVuY3Rpb24gU1Z0KHQsZSl7cmV0dXJuIFRsKHQuYixlKX1mdW5jdGlvbiBBVnQodCxlKXtyZXR1cm4gdD5lJiZlPERffWZ1bmN0aW9uIHVYZSh0LGUpe3JldHVybiB0LkdjKGUpLHR9ZnVuY3Rpb24gbFhlKHQsZSl7cmV0dXJuIFVhKHQsZSksdH1mdW5jdGlvbiBoWGUodCl7cmV0dXJuIHdYdCgpLHQ/TmdlOkZnZX1mdW5jdGlvbiBMeCh0KXtkcmUuY2FsbCh0aGlzLHQsMCl9ZnVuY3Rpb24gTFZ0KCl7WW50LmNhbGwodGhpcyxudWxsKX1mdW5jdGlvbiBtYnQoKXtYcnQuY2FsbCh0aGlzLG51bGwpfWZ1bmN0aW9uIE14KHQpe3RoaXMuYz10LGNlZSh0aGlzKX1mdW5jdGlvbiBaaSgpeyRVdCh0aGlzKSxBaCh0aGlzKX1mdW5jdGlvbiBscyh0LGUpe1ZwKHQpLHQuYS5OYihlKX1mdW5jdGlvbiBNVnQodCxlKXtyZXR1cm4gdC5HYyhlKSx0fWZ1bmN0aW9uIGZYZSh0LGUpe3JldHVybiB0LmEuZj1lLHR9ZnVuY3Rpb24gRFZ0KHQsZSl7cmV0dXJuIHQuYS5kPWUsdH1mdW5jdGlvbiBJVnQodCxlKXtyZXR1cm4gdC5hLmc9ZSx0fWZ1bmN0aW9uIE9WdCh0LGUpe3JldHVybiB0LmEuaj1lLHR9ZnVuY3Rpb24gY2YodCxlKXtyZXR1cm4gdC5hLmE9ZSx0fWZ1bmN0aW9uIHVmKHQsZSl7cmV0dXJuIHQuYS5kPWUsdH1mdW5jdGlvbiBsZih0LGUpe3JldHVybiB0LmEuZT1lLHR9ZnVuY3Rpb24gaGYodCxlKXtyZXR1cm4gdC5hLmc9ZSx0fWZ1bmN0aW9uIHhNKHQsZSl7cmV0dXJuIHQuYS5mPWUsdH1mdW5jdGlvbiBkWGUodCl7cmV0dXJuIHQuYj0hMSx0fWZ1bmN0aW9uIGY4KCl7Zjg9WixNRXQ9bmV3IGdVdH1mdW5jdGlvbiBSUigpe1JSPVosS2dlPW5ldyBwVXR9ZnVuY3Rpb24gZDgoKXtkOD1aLE5FdD1uZXcgUGV9ZnVuY3Rpb24gUFZ0KCl7UFZ0PVosS2JlPW5ldyB2bX1mdW5jdGlvbiBqUigpe2pSPVosS3V0PW5ldyBfV3R9ZnVuY3Rpb24gUWIoKXtRYj1aLG83PW5ldyBwbn1mdW5jdGlvbiBWQygpe1ZDPVosUWJlPW5ldyBUTH1mdW5jdGlvbiBGVnQoKXtGVnQ9WixzcGU9bmV3IFBvfWZ1bmN0aW9uIHlidCgpe3lidD1aLFJiZT1uZXcgZnd9ZnVuY3Rpb24ga00oKXtrTT1aLHQyZT1uZXcgQ2F9ZnVuY3Rpb24gTlZ0KCl7TlZ0PVosamJlPW5ldyBFTH1mdW5jdGlvbiB4YnQoKXt4YnQ9WiwkYmU9bmV3IERLdH1mdW5jdGlvbiBrYnQoKXtrYnQ9WixPN3Q9bmV3IHdtfWZ1bmN0aW9uIEVNKCl7RU09WixlMmU9bmV3IE5UfWZ1bmN0aW9uIEJWdCgpe0JWdD1aLHMyZT1uZXcgZHd9ZnVuY3Rpb24gR0MoKXtHQz1aLGgyZT1uZXcgUlh9ZnVuY3Rpb24gJFIoKXskUj1aLEg0PW5ldyBLWH1mdW5jdGlvbiBSVnQoKXtSVnQ9WixPeWU9bmV3IFZzfWZ1bmN0aW9uIHpSKCl7elI9WixKaHQ9bmV3ICRWdH1mdW5jdGlvbiBxUigpe3FSPVosdGZ0PW5ldyAkV3R9ZnVuY3Rpb24gVUMoKXtVQz1aLFZPPW5ldyBNWHR9ZnVuY3Rpb24gSFIoKXtIUj1aLGVtZT1uZXcgUVp9ZnVuY3Rpb24galZ0KCl7YW5lKCksdGhpcy5jPW5ldyB3ZXR9ZnVuY3Rpb24gJFZ0KCl7VnIuY2FsbCh0aGlzLEExZSwwKX1mdW5jdGlvbiBNdyh0LGUpe20yKHQuYy5iLGUuYyxlKX1mdW5jdGlvbiBXQyh0LGUpe20yKHQuYy5jLGUuYixlKX1mdW5jdGlvbiBnWGUodCxlLG4pe2tvKHQuZCxlLmYsbil9ZnVuY3Rpb24gcFhlKHQsZSxuLHIpe0dmbih0LHIsZSxuKX1mdW5jdGlvbiBiWGUodCxlLG4scil7ZHduKHIsdCxlLG4pfWZ1bmN0aW9uIHdYZSh0LGUsbixyKXtNNW4ocix0LGUsbil9ZnVuY3Rpb24gVlIodCxlKXtyZXR1cm4gdC5hPWUuZyx0fWZ1bmN0aW9uIHpWdCh0LGUpe3JldHVybiB0ZG4odC5hLGUpfWZ1bmN0aW9uIHZYZSh0KXtyZXR1cm4gdC5iP3QuYjp0LmF9ZnVuY3Rpb24gbVhlKHQpe3JldHVybih0LmMrdC5hKS8yfWZ1bmN0aW9uIFBtKCl7UG09WixINGU9bmV3IGVKfWZ1bmN0aW9uIHFWdCgpe3FWdD1aLFE0ZT1uZXcgbkp9ZnVuY3Rpb24gSFZ0KCl7SFZ0PVosbDVlPW5ldyBCcXR9ZnVuY3Rpb24gVlZ0KCl7VlZ0PVosaDVlPW5ldyBScXR9ZnVuY3Rpb24gUHAoKXtQcD1aLFloPW5ldyBVcHR9ZnVuY3Rpb24gRWJ0KCl7RWJ0PVosc0x0PW5ldyB6cXR9ZnVuY3Rpb24gWUMoKXtZQz1aLFJmdD1uZXcgVVV0fWZ1bmN0aW9uIE1nKCl7TWc9WixiUD1uZXcgV1V0fWZ1bmN0aW9uIFRldCgpe1RldD1aLEM1ZT1uZXcgX0p9ZnVuY3Rpb24gdG8oKXt0bz1aLFM1ZT1uZXcgU0p9ZnVuY3Rpb24gR1IoKXtHUj1aLGRVPW5ldyBfcn1mdW5jdGlvbiBUYnQoKXtUYnQ9WixiTHQ9bmV3IGhlfWZ1bmN0aW9uIEZwKCl7RnA9WixJYj1uZXcgekp9ZnVuY3Rpb24geVhlKHQpe2IuY2xlYXJUaW1lb3V0KHQpfWZ1bmN0aW9uIENidCh0KXt0aGlzLmE9dShMcih0KSwyMjQpfWZ1bmN0aW9uIFVSKHQpe3JldHVybiB1KHQsNDIpLmNkKCl9ZnVuY3Rpb24gVE0odCl7cmV0dXJuIHQuYjx0LmQuZ2MoKX1mdW5jdGlvbiBHVnQodCxlKXtyZXR1cm4gem50KHQuYSxlKX1mdW5jdGlvbiBVVnQodCxlKXtyZXR1cm4geWModCxlKT4wfWZ1bmN0aW9uIENldCh0LGUpe3JldHVybiB5Yyh0LGUpPDB9ZnVuY3Rpb24gS0ModCxlKXtyZXR1cm4gdC5hLmdldChlKX1mdW5jdGlvbiB4WGUodCxlKXtyZXR1cm4gZS5zcGxpdCh0KX1mdW5jdGlvbiBXVnQodCxlKXtyZXR1cm4gVGwodC5lLGUpfWZ1bmN0aW9uIF9idCh0KXtyZXR1cm4gT24odCksITF9ZnVuY3Rpb24gV1IodCl7X24uY2FsbCh0aGlzLHQsMjEpfWZ1bmN0aW9uIGtYZSh0LGUpe1RRdC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBZUih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIF9ldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFNidCh0KXtvcnQoKSxDWXQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEFidCh0LGUpe0FLdCh0LHQubGVuZ3RoLGUpfWZ1bmN0aW9uIENNKHQsZSl7clh0KHQsdC5sZW5ndGgsZSl9ZnVuY3Rpb24gRVhlKHQsZSxuKXtlLnVkKHQuYS5HZShuKSl9ZnVuY3Rpb24gVFhlKHQsZSxuKXtlLndlKHQuYS5GZShuKSl9ZnVuY3Rpb24gQ1hlKHQsZSxuKXtlLnRkKHQuYS5LYihuKSl9ZnVuY3Rpb24gX1hlKHQsZSxuKXt0Lk1iKG4pJiZlLnRkKG4pfWZ1bmN0aW9uIFhDKHQsZSxuKXt0LnNwbGljZShlLDAsbil9ZnVuY3Rpb24gU1hlKHQsZSl7cmV0dXJuIE51KHQuZSxlKX1mdW5jdGlvbiBLUih0LGUpe3RoaXMuZD10LHRoaXMuZT1lfWZ1bmN0aW9uIFlWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIEtWdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIExidCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIFhWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFFWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFpWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIEpWdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIER4KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gTWJ0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gRGJ0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gWFIodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBRUih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIElidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIE9idCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHozKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQWV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTGV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTWV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gWlIodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBQYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBEZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBfTSh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEpSKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gSWV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gUUModCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBGYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBtcyh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHRqKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gdEd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZUd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gbkd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gckd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gaUd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gc0d0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gYUd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gb0d0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gY0d0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gTmJ0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gdUd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gbEd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gaEd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gZzgodCxlKXt0aGlzLmM9dCx0aGlzLmQ9ZX1mdW5jdGlvbiBmR3QodCxlKXt0aGlzLmU9dCx0aGlzLmQ9ZX1mdW5jdGlvbiBkR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBnR3QodCxlKXt0aGlzLmI9ZSx0aGlzLmM9dH1mdW5jdGlvbiBlaih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFNNKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gT2V0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gWkModCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBCYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBQZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBGZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBBTSh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFJidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIE5ldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEpDKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gamJ0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gdDkodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBlOSh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEZtKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gQmV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gUmV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gJGJ0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gbjkodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBqZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBuaih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIExNKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTU0odCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBJeCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uICRldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHpidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHpldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHFldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHFidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEhldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFZldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEdldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFVldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEhidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHBHdCh0LGUpe3RoaXMuYj10LHRoaXMuYT1lfWZ1bmN0aW9uIGJHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHdHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHZHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIG1HdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFZidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEdidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHlHdCh0LGUpe3RoaXMuYj10LHRoaXMuZD1lfWZ1bmN0aW9uIFVidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFdidCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHhHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIGtHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHJqKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gcjkodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBZYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBLYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBYYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBXZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBRYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBZZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBpaih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEtldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFhldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIERNKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gUWV0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gWmJ0KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gSU0odCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBKYnQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBBWGUodCxlKXtyZXR1cm4gTnUodC5jLGUpfWZ1bmN0aW9uIExYZSh0LGUpe3JldHVybiBOdShlLmIsdCl9ZnVuY3Rpb24gTVhlKHQsZSl7cmV0dXJuLXQuYi5KZShlKX1mdW5jdGlvbiB0MnQodCxlKXtyZXR1cm4gTnUodC5nLGUpfWZ1bmN0aW9uIE9NKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gT3godCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBFR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBUR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiAkZSh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIGk5KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gczkodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBQTSh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFpldCh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHNqKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gYTkodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBKZXQodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBhaih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHEzKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRk0odCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBvOSh0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGM5KHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTk0odCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBvaih0LGUpe1ZyLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIEgzKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gY2oodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBDR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBfR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBTR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBBR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBMR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBNR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBmYSh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIHVqKHQsZSl7VnIuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gREd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gSUd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gT0d0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gUEd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gRkd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gTkd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gQkd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gUkd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gakd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gJEd0KHQsZSl7dGhpcy5iPXQsdGhpcy5hPWV9ZnVuY3Rpb24gekd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gcUd0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gRFhlKHQsZSl7b3duKHQuYSx1KGUsNTYpKX1mdW5jdGlvbiBIR3QodCxlKXttb24odC5hLHUoZSwxMSkpfWZ1bmN0aW9uIElYZSh0LGUpe3JldHVybiBrOCgpLGUhPXR9ZnVuY3Rpb24gVkd0KCl7cmV0dXJuIHBIdCgpLG5ldyBXZ2V9ZnVuY3Rpb24gR0d0KCl7X3J0KCksdGhpcy5iPW5ldyBIc31mdW5jdGlvbiBVR3QoKXtrcSgpLHRoaXMuYT1uZXcgSHN9ZnVuY3Rpb24gV0d0KCl7VXZ0KCksZXZ0LmNhbGwodGhpcyl9ZnVuY3Rpb24gUHgodCxlKXtWci5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBZR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBLR3QodCxlKXt0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBsaih0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFhHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFFHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFpHdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIEpHdCh0LGUpe3RoaXMuZD10LHRoaXMuYj1lfWZ1bmN0aW9uIGUydCh0LGUpe3RoaXMuZD10LHRoaXMuZT1lfWZ1bmN0aW9uIHRVdCh0LGUpe3RoaXMuZj10LHRoaXMuYz1lfWZ1bmN0aW9uIEJNKHQsZSl7dGhpcy5iPXQsdGhpcy5jPWV9ZnVuY3Rpb24gbjJ0KHQsZSl7dGhpcy5pPXQsdGhpcy5nPWV9ZnVuY3Rpb24gZVV0KHQsZSl7dGhpcy5lPXQsdGhpcy5hPWV9ZnVuY3Rpb24gblV0KHQsZSl7dGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gcjJ0KHQsZSl7dC5pPW51bGwsZnoodCxlKX1mdW5jdGlvbiBPWGUodCxlKXt0JiZraShkUCx0LGUpfWZ1bmN0aW9uIHJVdCh0LGUpe3JldHVybiBpc3QodC5hLGUpfWZ1bmN0aW9uIGhqKHQpe3JldHVybiBYRCh0LmMsdC5iKX1mdW5jdGlvbiBlYyh0KXtyZXR1cm4gdD90LmRkKCk6bnVsbH1mdW5jdGlvbiBWdCh0KXtyZXR1cm4gdD8/bnVsbH1mdW5jdGlvbiBObSh0KXtyZXR1cm4gdHlwZW9mIHQ9PT1iNn1mdW5jdGlvbiBCbSh0KXtyZXR1cm4gdHlwZW9mIHQ9PT1OeHR9ZnVuY3Rpb24gcmEodCl7cmV0dXJuIHR5cGVvZiB0PT09VmF0fWZ1bmN0aW9uIE5wKHQsZSl7cmV0dXJuIHQuSGQoKS5YYihlKX1mdW5jdGlvbiBmaih0LGUpe3JldHVybiBLY24odC5LYygpLGUpfWZ1bmN0aW9uIER3KHQsZSl7cmV0dXJuIHljKHQsZSk9PTB9ZnVuY3Rpb24gUFhlKHQsZSl7cmV0dXJuIHljKHQsZSk+PTB9ZnVuY3Rpb24gdTkodCxlKXtyZXR1cm4geWModCxlKSE9MH1mdW5jdGlvbiBGWGUodCl7cmV0dXJuIiIrKE9uKHQpLHQpfWZ1bmN0aW9uIFJNKHQsZSl7cmV0dXJuIHQuc3Vic3RyKGUpfWZ1bmN0aW9uIGlVdCh0KXtyZXR1cm4gY2wodCksdC5kLmdjKCl9ZnVuY3Rpb24gdG50KHQpe3JldHVybiBEYm4odCx0LmMpLHR9ZnVuY3Rpb24gZGoodCl7cmV0dXJuIGs5KHQ9PW51bGwpLHR9ZnVuY3Rpb24gbDkodCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gZ28odCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gaDkodCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gaGModCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gR3IodCxlKXtyZXR1cm4gdC5hKz0iIitlLHR9ZnVuY3Rpb24gaTJ0KHQsZSl7cmV0dXJuIHQuYSs9IiIrZSx0fWZ1bmN0aW9uIHNVdCh0LGUpe2ZzKHQsZSx0LmEsdC5hLmEpfWZ1bmN0aW9uIFpiKHQsZSl7ZnModCxlLHQuYy5iLHQuYyl9ZnVuY3Rpb24gTlhlKHQsZSxuKXtnYWUoZSxXc3QodCxuKSl9ZnVuY3Rpb24gQlhlKHQsZSxuKXtnYWUoZSxXc3QodCxuKSl9ZnVuY3Rpb24gUlhlKHQsZSl7TW9uKG5ldyBucih0KSxlKX1mdW5jdGlvbiBhVXQodCxlKXt0LnEuc2V0VGltZShZdyhlKSl9ZnVuY3Rpb24gb1V0KHQsZSl7bHZ0LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGNVdCh0LGUpe2x2dC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBlbnQodCxlKXtsdnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gdVV0KHQpe1h1KHRoaXMpLFk5KHRoaXMsdCl9ZnVuY3Rpb24gczJ0KHQpe3JldHVybiBBbih0LDApLG51bGx9ZnVuY3Rpb24gR2YodCl7cmV0dXJuIHQuYT0wLHQuYj0wLHR9ZnVuY3Rpb24gbFV0KHQsZSl7cmV0dXJuIHQuYT1lLmcrMSx0fWZ1bmN0aW9uIGpYZSh0LGUpe3JldHVybiB0LmpbZS5wXT09Mn1mdW5jdGlvbiBhMnQodCl7cmV0dXJuIHhubih1KHQsNzkpKX1mdW5jdGlvbiBoVXQoKXtoVXQ9Wix6cGU9V3IobHN0KCkpfWZ1bmN0aW9uIGZVdCgpe2ZVdD1aLGkyZT1XcihZY2UoKSl9ZnVuY3Rpb24gZFV0KCl7dGhpcy5iPW5ldyBMeCh0eSgxMikpfWZ1bmN0aW9uIGdVdCgpe3RoaXMuYj0wLHRoaXMuYT0hMX1mdW5jdGlvbiBwVXQoKXt0aGlzLmI9MCx0aGlzLmE9ITF9ZnVuY3Rpb24gZjkodCl7dGhpcy5hPXQscEMuY2FsbCh0aGlzKX1mdW5jdGlvbiBiVXQodCl7dGhpcy5hPXQscEMuY2FsbCh0aGlzKX1mdW5jdGlvbiBtbih0LGUpe1BzLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIG5udCh0LGUpe3FtLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFYzKHQsZSl7bjJ0LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHJudCh0LGUpe3RFLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIHdVdCh0LGUpe2pNLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGlpKHQsZSl7R1IoKSxraShkVSx0LGUpfWZ1bmN0aW9uIGludCh0LGUpe3JldHVybiBQbCh0LmEsMCxlKX1mdW5jdGlvbiB2VXQodCxlKXtyZXR1cm4gdC5hLmEuYS5jYyhlKX1mdW5jdGlvbiBtVXQodCxlKXtyZXR1cm4gVnQodCk9PT1WdChlKX1mdW5jdGlvbiAkWGUodCxlKXtyZXR1cm4gTXModC5hLGUuYSl9ZnVuY3Rpb24gelhlKHQsZSl7cmV0dXJuIHB1KHQuYSxlLmEpfWZ1bmN0aW9uIHFYZSh0LGUpe3JldHVybiB0WHQodC5hLGUuYSl9ZnVuY3Rpb24gaGQodCxlKXtyZXR1cm4gdC5pbmRleE9mKGUpfWZ1bmN0aW9uIEl3KHQsZSl7cmV0dXJuIHQ9PWU/MDp0PzE6LTF9ZnVuY3Rpb24gZ2oodCl7cmV0dXJuIHQ8MTA/IjAiK3Q6IiIrdH1mdW5jdGlvbiBIWGUodCl7cmV0dXJuIExyKHQpLG5ldyBmOSh0KX1mdW5jdGlvbiB5VXQodCl7cmV0dXJuIGl1KHQubCx0Lm0sdC5oKX1mdW5jdGlvbiBwOCh0KXtyZXR1cm4gcHMoKE9uKHQpLHQpKX1mdW5jdGlvbiBWWGUodCl7cmV0dXJuIHBzKChPbih0KSx0KSl9ZnVuY3Rpb24geFV0KHQsZSl7cmV0dXJuIHB1KHQuZyxlLmcpfWZ1bmN0aW9uIEJvKHQpe3JldHVybiB0eXBlb2YgdD09PU54dH1mdW5jdGlvbiBHWGUodCl7cmV0dXJuIHQ9PUx2fHx0PT1GeX1mdW5jdGlvbiBVWGUodCl7cmV0dXJuIHQ9PUx2fHx0PT1QeX1mdW5jdGlvbiBvMnQodCl7cmV0dXJuIFJvKHQuYi5iLHQsMCl9ZnVuY3Rpb24ga1V0KHQpe3RoaXMuYT1WR3QoKSx0aGlzLmI9dH1mdW5jdGlvbiBFVXQodCl7dGhpcy5hPVZHdCgpLHRoaXMuYj10fWZ1bmN0aW9uIFdYZSh0LGUpe3JldHVybiBsZSh0LmEsZSksZX1mdW5jdGlvbiBZWGUodCxlKXtyZXR1cm4gbGUodC5jLGUpLHR9ZnVuY3Rpb24gVFV0KHQsZSl7cmV0dXJuICRsKHQuYSxlKSx0fWZ1bmN0aW9uIEtYZSh0LGUpe3JldHVybiBkZigpLGUuYSs9dH1mdW5jdGlvbiBYWGUodCxlKXtyZXR1cm4gZGYoKSxlLmErPXR9ZnVuY3Rpb24gUVhlKHQsZSl7cmV0dXJuIGRmKCksZS5jKz10fWZ1bmN0aW9uIGMydCh0LGUpeyQ4KHQsMCx0Lmxlbmd0aCxlKX1mdW5jdGlvbiBPMCgpe2t0LmNhbGwodGhpcyxuZXcgYTIpfWZ1bmN0aW9uIENVdCgpe1dqLmNhbGwodGhpcywwLDAsMCwwKX1mdW5jdGlvbiBGeCgpe2FoLmNhbGwodGhpcywwLDAsMCwwKX1mdW5jdGlvbiB4byh0KXt0aGlzLmE9dC5hLHRoaXMuYj10LmJ9ZnVuY3Rpb24gQnAodCl7cmV0dXJuIHQ9PXpofHx0PT1DZn1mdW5jdGlvbiBiOCh0KXtyZXR1cm4gdD09cmd8fHQ9PW5nfWZ1bmN0aW9uIF9VdCh0KXtyZXR1cm4gdD09bjV8fHQ9PWU1fWZ1bmN0aW9uIEczKHQpe3JldHVybiB0IT1HMSYmdCE9VGJ9ZnVuY3Rpb24geGwodCl7cmV0dXJuIHQuTGcoKSYmdC5NZygpfWZ1bmN0aW9uIFNVdCh0KXtyZXR1cm4gdSQodSh0LDExOCkpfWZ1bmN0aW9uIHBqKHQpe3JldHVybiAkbChuZXcgVnMsdCl9ZnVuY3Rpb24gQVV0KHQsZSl7cmV0dXJuIG5ldyB0RShlLHQpfWZ1bmN0aW9uIFpYZSh0LGUpe3JldHVybiBuZXcgdEUoZSx0KX1mdW5jdGlvbiB1MnQodCxlLG4pe2l6KHQsZSksc3oodCxuKX1mdW5jdGlvbiBiaih0LGUsbil7dHYodCxlKSxKdyh0LG4pfWZ1bmN0aW9uIHgxKHQsZSxuKXtrdSh0LGUpLEV1KHQsbil9ZnVuY3Rpb24gd2oodCxlLG4pe1Y4KHQsZSksVTgodCxuKX1mdW5jdGlvbiB2aih0LGUsbil7RzgodCxlKSxXOCh0LG4pfWZ1bmN0aW9uIHNudCh0LGUpe2FFKHQsZSksWTgodCx0LkQpfWZ1bmN0aW9uIGwydCh0KXt0VXQuY2FsbCh0aGlzLHQsITApfWZ1bmN0aW9uIExVdCh0LGUsbil7SjJ0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gUnAodCl7cmIoKSxKY24uY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIE1VdCgpe1lSLmNhbGwodGhpcywiSGVhZCIsMSl9ZnVuY3Rpb24gRFV0KCl7WVIuY2FsbCh0aGlzLCJUYWlsIiwzKX1mdW5jdGlvbiBhbnQodCl7dC5jPU50KFFuLERlLDEsMCw1LDEpfWZ1bmN0aW9uIElVdCh0KXt0LmE9TnQoUW4sRGUsMSw4LDUsMSl9ZnVuY3Rpb24gT1V0KHQpe3h1KHQueGYoKSxuZXcgdXIodCkpfWZ1bmN0aW9uIFUzKHQpe3JldHVybiB0IT1udWxsP0hpKHQpOjB9ZnVuY3Rpb24gSlhlKHQsZSl7cmV0dXJuIGV5KGUsVDEodCkpfWZ1bmN0aW9uIHRRZSh0LGUpe3JldHVybiBleShlLFQxKHQpKX1mdW5jdGlvbiBlUWUodCxlKXtyZXR1cm4gdFt0Lmxlbmd0aF09ZX1mdW5jdGlvbiBuUWUodCxlKXtyZXR1cm4gdFt0Lmxlbmd0aF09ZX1mdW5jdGlvbiBoMnQodCl7cmV0dXJuIGVlbih0LmIuS2MoKSx0LmEpfWZ1bmN0aW9uIHJRZSh0LGUpe3JldHVybiBoeihzcnQodC5kKSxlKX1mdW5jdGlvbiBpUWUodCxlKXtyZXR1cm4gaHooc3J0KHQuZyksZSl9ZnVuY3Rpb24gc1FlKHQsZSl7cmV0dXJuIGh6KHNydCh0LmopLGUpfWZ1bmN0aW9uIGVvKHQsZSl7UHMuY2FsbCh0aGlzLHQuYixlKX1mdW5jdGlvbiBPdyh0KXtXai5jYWxsKHRoaXMsdCx0LHQsdCl9ZnVuY3Rpb24gZjJ0KHQpe3JldHVybiB0LmImJlNhdCh0KSx0LmF9ZnVuY3Rpb24gZDJ0KHQpe3JldHVybiB0LmImJlNhdCh0KSx0LmN9ZnVuY3Rpb24gYVFlKHQsZSl7JDF8fCh0LmI9ZSl9ZnVuY3Rpb24gb250KHQsZSxuKXtyZXR1cm4gdHModCxlLG4pLG59ZnVuY3Rpb24gUFV0KHQsZSxuKXt0cyh0LmNbZS5nXSxlLmcsbil9ZnVuY3Rpb24gb1FlKHQsZSxuKXt1KHQuYyw2OSkuWGgoZSxuKX1mdW5jdGlvbiBjUWUodCxlLG4pe3gxKG4sbi5pK3Qsbi5qK2UpfWZ1bmN0aW9uIHVRZSh0LGUpe0RyKExjKHQuYSksWVF0KGUpKX1mdW5jdGlvbiBsUWUodCxlKXtEcihhbCh0LmEpLEtRdChlKSl9ZnVuY3Rpb24gZDkodCl7Z2koKSx5dy5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gaFFlKHQpe3JldHVybiB0PT1udWxsPzA6SGkodCl9ZnVuY3Rpb24gRlV0KCl7RlV0PVosRGh0PW5ldyBpXyhfZnQpfWZ1bmN0aW9uIFByKCl7UHI9WixuZXcgTlV0LG5ldyBoZX1mdW5jdGlvbiBOVXQoKXtuZXcgX3IsbmV3IF9yLG5ldyBfcn1mdW5jdGlvbiBnMnQoKXtnMnQ9WixJcHQoKSxpRXQ9bmV3IF9yfWZ1bmN0aW9uIGsxKCl7azE9WixiLk1hdGgubG9nKDIpfWZ1bmN0aW9uIGloKCl7aWg9WixwMD0ocVZ0KCksUTRlKX1mdW5jdGlvbiBmUWUoKXt0aHJvdyBpdChuZXcgU2coa2dlKSl9ZnVuY3Rpb24gZFFlKCl7dGhyb3cgaXQobmV3IFNnKGtnZSkpfWZ1bmN0aW9uIGdRZSgpe3Rocm93IGl0KG5ldyBTZyhFZ2UpKX1mdW5jdGlvbiBwUWUoKXt0aHJvdyBpdChuZXcgU2coRWdlKSl9ZnVuY3Rpb24gQlV0KHQpe3RoaXMuYT10LEl3dC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gY250KHQpe3RoaXMuYT10LEZSLmNhbGwodGhpcyx0KX1mdW5jdGlvbiB1bnQodCl7dGhpcy5hPXQsRlIuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIFpzKHQsZSl7JG50KHQuYyx0LmMubGVuZ3RoLGUpfWZ1bmN0aW9uIEdvKHQpe3JldHVybiB0LmE8dC5jLmMubGVuZ3RofWZ1bmN0aW9uIHAydCh0KXtyZXR1cm4gdC5hPHQuYy5hLmxlbmd0aH1mdW5jdGlvbiBSVXQodCxlKXtyZXR1cm4gdC5hP3QuYjplLkRlKCl9ZnVuY3Rpb24gcHUodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24galV0KHQsZSl7cmV0dXJuIHljKHQsZSk+MD90OmV9ZnVuY3Rpb24gaXUodCxlLG4pe3JldHVybntsOnQsbTplLGg6bn19ZnVuY3Rpb24gYlFlKHQsZSl7dC5hIT1udWxsJiZIR3QoZSx0LmEpfWZ1bmN0aW9uICRVdCh0KXt0LmE9bmV3IHh0LHQuYz1uZXcgeHR9ZnVuY3Rpb24gbWoodCl7dGhpcy5iPXQsdGhpcy5hPW5ldyBoZX1mdW5jdGlvbiB6VXQodCl7dGhpcy5iPW5ldyBDZSx0aGlzLmE9dH1mdW5jdGlvbiBiMnQodCl7Y3d0LmNhbGwodGhpcyksdGhpcy5hPXR9ZnVuY3Rpb24gcVV0KCl7WVIuY2FsbCh0aGlzLCJSYW5nZSIsMil9ZnVuY3Rpb24gSFV0KCl7bDR0KCksdGhpcy5hPW5ldyB2SShJN3QpfWZ1bmN0aW9uIHdRZSh0LGUpe0xyKGUpLFEzKHQpLkpjKG5ldyBzdCl9ZnVuY3Rpb24gdlFlKHQsZSl7cmV0dXJuIEZsKCksZS5uLmIrPXR9ZnVuY3Rpb24gbVFlKHQsZSxuKXtyZXR1cm4ga2kodC5nLG4sZSl9ZnVuY3Rpb24geVFlKHQsZSxuKXtyZXR1cm4ga2kodC5rLG4sZSl9ZnVuY3Rpb24geFFlKHQsZSl7cmV0dXJuIGtpKHQuYSxlLmEsZSl9ZnVuY3Rpb24gVzModCxlLG4pe3JldHVybiBNM3QoZSxuLHQuYyl9ZnVuY3Rpb24gdzJ0KHQpe3JldHVybiBuZXcgJGUodC5jLHQuZCl9ZnVuY3Rpb24ga1FlKHQpe3JldHVybiBuZXcgJGUodC5jLHQuZCl9ZnVuY3Rpb24gbmModCl7cmV0dXJuIG5ldyAkZSh0LmEsdC5iKX1mdW5jdGlvbiBWVXQodCxlKXtyZXR1cm4gRzRuKHQuYSxlLG51bGwpfWZ1bmN0aW9uIEVRZSh0KXtPYSh0LG51bGwpLG9hKHQsbnVsbCl9ZnVuY3Rpb24gR1V0KHQpe0FydCh0LG51bGwpLExydCh0LG51bGwpfWZ1bmN0aW9uIFVVdCgpe2pNLmNhbGwodGhpcyxudWxsLG51bGwpfWZ1bmN0aW9uIFdVdCgpe1NqLmNhbGwodGhpcyxudWxsLG51bGwpfWZ1bmN0aW9uIHYydCh0KXt0aGlzLmE9dCxfci5jYWxsKHRoaXMpfWZ1bmN0aW9uIFRRZSh0KXt0aGlzLmI9KHduKCksbmV3IHEodCkpfWZ1bmN0aW9uIHlqKHQpe3Quaj1OdCh3RXQsZWUsMzEwLDAsMCwxKX1mdW5jdGlvbiBDUWUodCxlLG4pe3QuYy5WYyhlLHUobiwxMzMpKX1mdW5jdGlvbiBfUWUodCxlLG4pe3QuYy5qaShlLHUobiwxMzMpKX1mdW5jdGlvbiBZVXQodCxlKXt4cih0KSx0LkdjKHUoZSwxNSkpfWZ1bmN0aW9uIGc5KHQsZSl7cmV0dXJuIG80bih0LmMsdC5iLGUpfWZ1bmN0aW9uIFNRZSh0LGUpe3JldHVybiBuZXcgYld0KHQuS2MoKSxlKX1mdW5jdGlvbiBsbnQodCxlKXtyZXR1cm4gX3VuKHQuS2MoKSxlKSE9LTF9ZnVuY3Rpb24gbTJ0KHQsZSl7cmV0dXJuIHQuYS5CYyhlKSE9bnVsbH1mdW5jdGlvbiB4aih0KXtyZXR1cm4gdC5PYigpP3QuUGIoKTpudWxsfWZ1bmN0aW9uIEtVdCh0KXtyZXR1cm4gTWgodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiBfdCh0LGUpe3JldHVybiB0IT1udWxsJiZnc3QodCxlKX1mdW5jdGlvbiBBUWUodCxlKXt0LnEuc2V0SG91cnMoZSksRV8odCxlKX1mdW5jdGlvbiBYVXQodCxlKXt0LmMmJihId3QoZSksa1F0KGUpKX1mdW5jdGlvbiBMUWUodCxlLG4pe3UodC5LYihuKSwxNjQpLk5iKGUpfWZ1bmN0aW9uIE1RZSh0LGUsbil7cmV0dXJuIFI0bih0LGUsbiksbn1mdW5jdGlvbiBRVXQodCxlLG4pe3QuYT1lXjE1MDIsdC5iPW5eRW90fWZ1bmN0aW9uIGhudCh0LGUsbil7cmV0dXJuIHQuYVtlLmddW24uZ119ZnVuY3Rpb24gRTEodCxlKXtyZXR1cm4gdC5hW2UuYy5wXVtlLnBdfWZ1bmN0aW9uIERRZSh0LGUpe3JldHVybiB0LmVbZS5jLnBdW2UucF19ZnVuY3Rpb24gSVFlKHQsZSl7cmV0dXJuIHQuY1tlLmMucF1bZS5wXX1mdW5jdGlvbiBPUWUodCxlKXtyZXR1cm4gdC5qW2UucF09cTJuKGUpfWZ1bmN0aW9uIFBRZSh0LGUpe3JldHVybiBrbXQodC5mLGUudGcoKSl9ZnVuY3Rpb24gRlFlKHQsZSl7cmV0dXJuIGttdCh0LmIsZS50ZygpKX1mdW5jdGlvbiBOUWUodCxlKXtyZXR1cm4gdC5hPG13dChlKT8tMToxfWZ1bmN0aW9uIEJRZSh0LGUsbil7cmV0dXJuIG4/ZSE9MDplIT10LTF9ZnVuY3Rpb24gUlFlKHQsZSxuKXtyZXR1cm4gdC5hPWUsdC5iPW4sdH1mdW5jdGlvbiBmZCh0LGUpe3JldHVybiB0LmEqPWUsdC5iKj1lLHR9ZnVuY3Rpb24gcDkodCxlLG4pe3JldHVybiB0cyh0LmcsZSxuKSxufWZ1bmN0aW9uIGpRZSh0LGUsbixyKXt0cyh0LmFbZS5nXSxuLmcscil9ZnVuY3Rpb24gJFFlKHQsZSl7am0oZSx0LmEuYS5hLHQuYS5hLmIpfWZ1bmN0aW9uIFpVdCh0KXt0LmE9dShEbih0LmIuYSw0KSwxMjYpfWZ1bmN0aW9uIEpVdCh0KXt0LmE9dShEbih0LmIuYSw0KSwxMjYpfWZ1bmN0aW9uIHpRZSh0KXtzRCh0LFhkZSksb2F0KHQscTVuKHQpKX1mdW5jdGlvbiB3OCgpe3c4PVosaVY9bmV3IENSKG51bGwpfWZ1bmN0aW9uIHkydCgpe3kydD1aLHkydCgpLFhnZT1uZXcgc2V9ZnVuY3Rpb24geDJ0KCl7dGhpcy5CYnw9MjU2LHRoaXMuQmJ8PTUxMn1mdW5jdGlvbiBucih0KXt0aGlzLmk9dCx0aGlzLmY9dGhpcy5pLmp9ZnVuY3Rpb24gQXModCxlLG4pe1pNLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24ga2oodCxlLG4pe0FzLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gRnUodCxlLG4pe0FzLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gdFd0KHQsZSxuKXtrai5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIGsydCh0LGUsbil7Wk0uY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBZMyh0LGUsbil7Wk0uY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBFMnQodCxlLG4pe1JqLmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gZVd0KHQsZSxuKXtSai5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIG5XdCh0LGUsbil7RTJ0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gcld0KHQsZSxuKXtrMnQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBLMyh0LGUpe3RoaXMuYT10LEZSLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBpV3QodCxlKXt0aGlzLmE9dCxiZXQuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIHNXdCh0LGUpe3RoaXMuYT10LGJldC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gYVd0KHQsZSl7dGhpcy5hPXQsYmV0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBUMnQodCl7dGhpcy5hPXQsd3R0LmNhbGwodGhpcyx0LmQpfWZ1bmN0aW9uIGpwKHQpe3RoaXMuYz10LHRoaXMuYT10aGlzLmMuYX1mdW5jdGlvbiBDMnQodCxlKXt0aGlzLmE9ZSxiZXQuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIG9XdCh0LGUpe3RoaXMuYT1lLCRydC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gY1d0KHQsZSl7dGhpcy5hPXQsJHJ0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBxUWUodCxlKXtyZXR1cm4gY3Z0KEdudCh0LmMpKS5YYihlKX1mdW5jdGlvbiBfMnQodCxlKXtyZXR1cm4gcmhuKHQsbmV3IE1wLGUpLmF9ZnVuY3Rpb24gbHIodCxlKXtyZXR1cm4gTHIoZSksbmV3IHVXdCh0LGUpfWZ1bmN0aW9uIHVXdCh0LGUpe3RoaXMuYT1lLE5SLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBTMnQodCl7dGhpcy5iPXQsdGhpcy5hPXRoaXMuYi5hLmV9ZnVuY3Rpb24gbFd0KHQpe3QuYi5RYigpLC0tdC5kLmYuZCxLaih0LmQpfWZ1bmN0aW9uIGhXdCh0KXt4Qy5jYWxsKHRoaXMsdShMcih0KSwzNSkpfWZ1bmN0aW9uIGZXdCh0KXt4Qy5jYWxsKHRoaXMsdShMcih0KSwzNSkpfWZ1bmN0aW9uIGRXdCgpe1ZyLmNhbGwodGhpcywiSU5TVEFOQ0UiLDApfWZ1bmN0aW9uIEEydCh0KXtpZighdCl0aHJvdyBpdChuZXcgZ00pfWZ1bmN0aW9uIEwydCh0KXtpZighdCl0aHJvdyBpdChuZXcgT3UpfWZ1bmN0aW9uIE0ydCh0KXtpZighdCl0aHJvdyBpdChuZXcgbGMpfWZ1bmN0aW9uIGdXdCgpe2dXdD1aLFRldCgpLF81ZT1uZXcgdFJ9ZnVuY3Rpb24gTm4oKXtObj1aLEYyPSExLHI3PSEwfWZ1bmN0aW9uIF9oKHQpe3l4LmNhbGwodGhpcywoT24odCksdCkpfWZ1bmN0aW9uIE9sKHQpe3l4LmNhbGwodGhpcywoT24odCksdCkpfWZ1bmN0aW9uIEVqKHQpe1QuY2FsbCh0aGlzLHQpLHRoaXMuYT10fWZ1bmN0aW9uIEQydCh0KXtMLmNhbGwodGhpcyx0KSx0aGlzLmE9dH1mdW5jdGlvbiBJMnQodCl7czguY2FsbCh0aGlzLHQpLHRoaXMuYT10fWZ1bmN0aW9uIHBXdCgpe3lqKHRoaXMpLGQkKHRoaXMpLHRoaXMuX2QoKX1mdW5jdGlvbiBiV3QodCxlKXt0aGlzLmE9ZSxOUi5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gd1d0KHQsZSl7cmV0dXJuIG5ldyBob2UodC5hLHQuYixlKX1mdW5jdGlvbiBUaih0LGUpe3JldHVybiB0Lmxhc3RJbmRleE9mKGUpfWZ1bmN0aW9uIE8ydCh0LGUsbil7cmV0dXJuIHQuaW5kZXhPZihlLG4pfWZ1bmN0aW9uIGI5KHQpe3JldHVybiB0PT1udWxsP191OiRvKHQpfWZ1bmN0aW9uIEhRZSh0KXtyZXR1cm4gdD09bnVsbD9udWxsOnQubmFtZX1mdW5jdGlvbiBQMnQodCl7cmV0dXJuIHQuYSE9bnVsbD90LmE6bnVsbH1mdW5jdGlvbiBWUWUodCl7cmV0dXJuIE9SKHQuYSk/SlF0KHQpOm51bGx9ZnVuY3Rpb24gZm50KHQsZSl7cmV0dXJuIFA5KHQuYSxlKSE9bnVsbH1mdW5jdGlvbiBOdSh0LGUpe3JldHVybiEhZSYmdC5iW2UuZ109PWV9ZnVuY3Rpb24gUHcodCl7cmV0dXJuIHQuJEh8fCh0LiRIPSsrcjZuKX1mdW5jdGlvbiBHUWUodCl7cmV0dXJuIHQubCt0Lm0qbTYrdC5oKkMyfWZ1bmN0aW9uIHZXdCh0LGUpe3JldHVybiBsZShlLmEsdC5hKSx0LmF9ZnVuY3Rpb24gbVd0KHQsZSl7cmV0dXJuIGxlKGUuYix0LmEpLHQuYX1mdW5jdGlvbiBGdyh0LGUpe3JldHVybiBsZShlLmEsdC5hKSx0LmF9ZnVuY3Rpb24gTncodCl7cmV0dXJuIFpuKHQuYSE9bnVsbCksdC5hfWZ1bmN0aW9uIGRudCh0KXtrdC5jYWxsKHRoaXMsbmV3IE1tdCh0KSl9ZnVuY3Rpb24gRjJ0KHQsZSl7TjN0LmNhbGwodGhpcyx0LGUsbnVsbCl9ZnVuY3Rpb24gdzkodCl7dGhpcy5hPXQseC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gQ2ooKXtDaj1aLHVWPW5ldyBQcyhYZmUsMCl9ZnVuY3Rpb24gX2oodCxlKXtyZXR1cm4rK3QuYixsZSh0LmEsZSl9ZnVuY3Rpb24gTjJ0KHQsZSl7cmV0dXJuKyt0LmIsbXUodC5hLGUpfWZ1bmN0aW9uIFVRZSh0LGUpe3JldHVybiBNcyh0Lm4uYSxlLm4uYSl9ZnVuY3Rpb24gV1FlKHQsZSl7cmV0dXJuIE1zKHQuYy5kLGUuYy5kKX1mdW5jdGlvbiBZUWUodCxlKXtyZXR1cm4gTXModC5jLmMsZS5jLmMpfWZ1bmN0aW9uIGJ1KHQsZSl7cmV0dXJuIHUoQWkodC5iLGUpLDE1KX1mdW5jdGlvbiBLUWUodCxlKXtyZXR1cm4gdC5uLmI9KE9uKGUpLGUpfWZ1bmN0aW9uIFhRZSh0LGUpe3JldHVybiB0Lm4uYj0oT24oZSksZSl9ZnVuY3Rpb24gdjkodCl7cmV0dXJuIEdvKHQuYSl8fEdvKHQuYil9ZnVuY3Rpb24gUVFlKHQsZSxuKXtyZXR1cm4gVVp0KHQsZSxuLHQuYil9ZnVuY3Rpb24gQjJ0KHQsZSxuKXtyZXR1cm4gVVp0KHQsZSxuLHQuYyl9ZnVuY3Rpb24gUjJ0KHQsZSxuKXt1KEVEKHQsZSksMjEpLkZjKG4pfWZ1bmN0aW9uIFpRZSh0LGUsbil7V2l0KHQuYSxuKSxKeih0LmEsZSl9ZnVuY3Rpb24gak0odCxlKXtZQygpLHRoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFNqKHQsZSl7TWcoKSx0aGlzLmI9dCx0aGlzLmM9ZX1mdW5jdGlvbiBnbnQodCxlKXtWbnQoKSx0aGlzLmY9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBqMnQodCxlKXtFbXQoZSx0KSx0aGlzLmQ9dCx0aGlzLmM9ZX1mdW5jdGlvbiBEZyh0KXt2YXIgZTtlPXQuYSx0LmE9dC5iLHQuYj1lfWZ1bmN0aW9uIEpRZSh0KXtyZXR1cm4gZGYoKSwhIXQmJiF0LmRjKCl9ZnVuY3Rpb24gdFplKHQpe3JldHVybiBuZXcgWG0oMyx0KX1mdW5jdGlvbiAkMnQodCxlKXtyZXR1cm4gbmV3IGJZdCh0LHQuZ2MoKSxlKX1mdW5jdGlvbiBlWmUodCl7cmV0dXJuIFRSKCksVXIoKHpRdCgpLERnZSksdCl9ZnVuY3Rpb24gTngodCl7dGhpcy5kPXQsbnIuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEJ4KHQpe3RoaXMuYz10LG5yLmNhbGwodGhpcyx0KX1mdW5jdGlvbiAkTSh0KXt0aGlzLmM9dCxOeC5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24geVd0KCl7R0MoKSx0aGlzLmI9bmV3IHkxKHRoaXMpfWZ1bmN0aW9uIFVkKHQpe3JldHVybiBqbCh0LGt5KSxuZXcgWGModCl9ZnVuY3Rpb24geFd0KHQpe3JldHVybiBJOCgpLHBhcnNlSW50KHQpfHwtMX1mdW5jdGlvbiBQbCh0LGUsbil7cmV0dXJuIHQuc3Vic3RyKGUsbi1lKX1mdW5jdGlvbiB2OCh0LGUsbil7cmV0dXJuIE8ydCh0LEN1KGUpLG4pfWZ1bmN0aW9uIHBudCh0KXtyZXR1cm4geXZ0KHQuYyx0LmMubGVuZ3RoKX1mdW5jdGlvbiBuWmUodCl7cmV0dXJuIHQuZiE9bnVsbD90LmY6IiIrdC5nfWZ1bmN0aW9uIGJudCh0KXtyZXR1cm4gdC5mIT1udWxsP3QuZjoiIit0Lmd9ZnVuY3Rpb24gd250KHQpe3JldHVybiBabih0LmIhPTApLHQuYS5hLmN9ZnVuY3Rpb24gQWoodCl7cmV0dXJuIFpuKHQuYiE9MCksdC5jLmIuY31mdW5jdGlvbiB6TSh0KXtfdCh0LDE1MCkmJnUodCwxNTApLkdoKCl9ZnVuY3Rpb24gTGoodCl7cmV0dXJuIHQuYj11KFpYdCh0LmEpLDQyKX1mdW5jdGlvbiB6MnQodCl7ZjgoKSx0aGlzLmI9dCx0aGlzLmE9ITB9ZnVuY3Rpb24ga1d0KHQpe1JSKCksdGhpcy5iPXQsdGhpcy5hPSEwfWZ1bmN0aW9uIEVXdCh0KXt0LmQ9bmV3IENXdCh0KSx0LmU9bmV3IF9yfWZ1bmN0aW9uIFRXdCh0KXtpZighdCl0aHJvdyBpdChuZXcgcmgpfWZ1bmN0aW9uIHEydCh0KXtpZighdCl0aHJvdyBpdChuZXcgZ00pfWZ1bmN0aW9uIFJtKHQpe2lmKCF0KXRocm93IGl0KG5ldyBPdSl9ZnVuY3Rpb24gclplKHQpe2lmKCF0KXRocm93IGl0KG5ldyB0ZXQpfWZ1bmN0aW9uIFpuKHQpe2lmKCF0KXRocm93IGl0KG5ldyBsYyl9ZnVuY3Rpb24gQ1d0KHQpe093dC5jYWxsKHRoaXMsdCxudWxsLG51bGwpfWZ1bmN0aW9uIF9XdCgpe1ZyLmNhbGwodGhpcywiUE9MWU9NSU5PIiwwKX1mdW5jdGlvbiBTV3QodCxlLG4scil7b3Z0LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBpWmUodCxlKXtyZXR1cm4gbmIoKSxsbih0LGUuZSxlKX1mdW5jdGlvbiBzWmUodCxlLG4pe3JldHVybiBIUigpLG4ucWcodCxlKX1mdW5jdGlvbiBVcyh0LGUpe3JldHVybiEhdC5xJiZUbCh0LnEsZSl9ZnVuY3Rpb24gYVplKHQsZSl7cmV0dXJuIHQ+MD9lKmUvdDplKmUqMTAwfWZ1bmN0aW9uIG9aZSh0LGUpe3JldHVybiB0PjA/ZS8odCp0KTplKjEwMH1mdW5jdGlvbiBjWmUodCxlLG4pe3JldHVybiBsZShlLHlpZSh0LG4pKX1mdW5jdGlvbiB1WmUodCxlLG4pe1YkKCksdC5YZShlKSYmbi50ZCh0KX1mdW5jdGlvbiBtOCh0LGUsbil7dmFyIHI7cj10LlpjKGUpLHIuUmIobil9ZnVuY3Rpb24gam0odCxlLG4pe3JldHVybiB0LmErPWUsdC5iKz1uLHR9ZnVuY3Rpb24gbFplKHQsZSxuKXtyZXR1cm4gdC5hKj1lLHQuYio9bix0fWZ1bmN0aW9uIHFNKHQsZSxuKXtyZXR1cm4gdC5hLT1lLHQuYi09bix0fWZ1bmN0aW9uIEgydCh0LGUpe3JldHVybiB0LmE9ZS5hLHQuYj1lLmIsdH1mdW5jdGlvbiBNaih0KXtyZXR1cm4gdC5hPS10LmEsdC5iPS10LmIsdH1mdW5jdGlvbiBBV3QodCl7dGhpcy5jPXQsdGhpcy5hPTEsdGhpcy5iPTF9ZnVuY3Rpb24gTFd0KHQpe3RoaXMuYz10LGt1KHQsMCksRXUodCwwKX1mdW5jdGlvbiBNV3QodCl7WmkuY2FsbCh0aGlzKSxWOSh0aGlzLHQpfWZ1bmN0aW9uIERXdCh0KXtxYXQoKSxucXQodGhpcyksdGhpcy5tZih0KX1mdW5jdGlvbiBJV3QodCxlKXtZQygpLGpNLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIFYydCh0LGUpe01nKCksU2ouY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gT1d0KHQsZSl7TWcoKSxTai5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBQV3QodCxlKXtNZygpLFYydC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBrbCh0LGUsbil7X2wuY2FsbCh0aGlzLHQsZSxuLDIpfWZ1bmN0aW9uIHZudCh0LGUpe2loKCksVWouY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRld0KHQsZSl7aWgoKSx2bnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gRzJ0KHQsZSl7aWgoKSx2bnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gTld0KHQsZSl7aWgoKSxHMnQuY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24gVTJ0KHQsZSl7aWgoKSxVai5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBCV3QodCxlKXtpaCgpLFUydC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBSV3QodCxlKXtpaCgpLFVqLmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIGhaZSh0LGUpe3JldHVybiB0LmMuRmModShlLDEzMykpfWZ1bmN0aW9uIFcydCh0LGUsbil7cmV0dXJuIFBxKFREKHQsZSksbil9ZnVuY3Rpb24gZlplKHQsZSxuKXtyZXR1cm4gZS5Rayh0LmUsdC5jLG4pfWZ1bmN0aW9uIGRaZSh0LGUsbil7cmV0dXJuIGUuUmsodC5lLHQuYyxuKX1mdW5jdGlvbiBtbnQodCxlKXtyZXR1cm4gWnAodC5lLHUoZSw0OSkpfWZ1bmN0aW9uIGdaZSh0LGUsbil7bl8oYWwodC5hKSxlLEtRdChuKSl9ZnVuY3Rpb24gcFplKHQsZSxuKXtuXyhMYyh0LmEpLGUsWVF0KG4pKX1mdW5jdGlvbiBZMnQodCxlKXtlLiRtb2RDb3VudD10LiRtb2RDb3VudH1mdW5jdGlvbiBtOSgpe205PVosSFM9bmV3IFZpKCJyb290Iil9ZnVuY3Rpb24geTgoKXt5OD1aLHBQPW5ldyBQcXQsbmV3IEZxdH1mdW5jdGlvbiBqV3QoKXt0aGlzLmE9bmV3IFV3LHRoaXMuYj1uZXcgVXd9ZnVuY3Rpb24gSzJ0KCl7aW5lLmNhbGwodGhpcyksdGhpcy5CYnw9S2F9ZnVuY3Rpb24gJFd0KCl7VnIuY2FsbCh0aGlzLCJHUk9XX1RSRUUiLDApfWZ1bmN0aW9uIGJaZSh0KXtyZXR1cm4gdD09bnVsbD9udWxsOlA1bih0KX1mdW5jdGlvbiB3WmUodCl7cmV0dXJuIHQ9PW51bGw/bnVsbDpxZ24odCl9ZnVuY3Rpb24gdlplKHQpe3JldHVybiB0PT1udWxsP251bGw6JG8odCl9ZnVuY3Rpb24gbVplKHQpe3JldHVybiB0PT1udWxsP251bGw6JG8odCl9ZnVuY3Rpb24gUDAodCl7dC5vPT1udWxsJiZiMm4odCl9ZnVuY3Rpb24gUmUodCl7cmV0dXJuIGs5KHQ9PW51bGx8fE5tKHQpKSx0fWZ1bmN0aW9uIHllKHQpe3JldHVybiBrOSh0PT1udWxsfHxCbSh0KSksdH1mdW5jdGlvbiBCcih0KXtyZXR1cm4gazkodD09bnVsbHx8cmEodCkpLHR9ZnVuY3Rpb24gWDJ0KHQpe3RoaXMucT1uZXcgYi5EYXRlKFl3KHQpKX1mdW5jdGlvbiBITSh0LGUpe3RoaXMuYz10LGw4LmNhbGwodGhpcyx0LGUpfWZ1bmN0aW9uIERqKHQsZSl7dGhpcy5hPXQsSE0uY2FsbCh0aGlzLHQsZSl9ZnVuY3Rpb24geVplKHQsZSl7dGhpcy5kPXQsenR0KHRoaXMpLHRoaXMuYj1lfWZ1bmN0aW9uIFEydCh0LGUpe1hydC5jYWxsKHRoaXMsdCksdGhpcy5hPWV9ZnVuY3Rpb24gWjJ0KHQsZSl7WHJ0LmNhbGwodGhpcyx0KSx0aGlzLmE9ZX1mdW5jdGlvbiB4WmUodCl7QzN0LmNhbGwodGhpcywwLDApLHRoaXMuZj10fWZ1bmN0aW9uIEoydCh0LGUsbil7cSQuY2FsbCh0aGlzLHQsZSxuLG51bGwpfWZ1bmN0aW9uIHpXdCh0LGUsbil7cSQuY2FsbCh0aGlzLHQsZSxuLG51bGwpfWZ1bmN0aW9uIGtaZSh0LGUsbil7cmV0dXJuIHQudWUoZSxuKTw9MD9uOmV9ZnVuY3Rpb24gRVplKHQsZSxuKXtyZXR1cm4gdC51ZShlLG4pPD0wP2U6bn1mdW5jdGlvbiBUWmUodCxlKXtyZXR1cm4gdShYdyh0LmIsZSksMTQ5KX1mdW5jdGlvbiBDWmUodCxlKXtyZXR1cm4gdShYdyh0LmMsZSksMjI5KX1mdW5jdGlvbiB5bnQodCl7cmV0dXJuIHUoTmUodC5hLHQuYiksMjg3KX1mdW5jdGlvbiBxV3QodCl7cmV0dXJuIG5ldyAkZSh0LmMsdC5kK3QuYSl9ZnVuY3Rpb24gSFd0KHQpe3JldHVybiBGbCgpLF9VdCh1KHQsMTk3KSl9ZnVuY3Rpb24gJG0oKXskbT1aLG83dD11bigoQWwoKSxLMikpfWZ1bmN0aW9uIF9aZSh0LGUpe2UuYT9odm4odCxlKTpmbnQodC5hLGUuYil9ZnVuY3Rpb24gVld0KHQsZSl7JDF8fGxlKHQuYSxlKX1mdW5jdGlvbiBTWmUodCxlKXtyZXR1cm4ga00oKSxKOChlLmQuaSx0KX1mdW5jdGlvbiBBWmUodCxlKXtyZXR1cm4gcjYoKSxuZXcgVXVlKGUsdCl9ZnVuY3Rpb24gZGQodCxlKXtyZXR1cm4gc0QoZSxuNnQpLHQuZj1lLHR9ZnVuY3Rpb24gdHd0KHQsZSxuKXtyZXR1cm4gbj1IbCh0LGUsMyxuKSxufWZ1bmN0aW9uIGV3dCh0LGUsbil7cmV0dXJuIG49SGwodCxlLDYsbiksbn1mdW5jdGlvbiBud3QodCxlLG4pe3JldHVybiBuPUhsKHQsZSw5LG4pLG59ZnVuY3Rpb24gVk0odCxlLG4peysrdC5qLHQuS2koKSxZcnQodCxlLG4pfWZ1bmN0aW9uIEdXdCh0LGUsbil7Kyt0LmosdC5IaShlLHQub2koZSxuKSl9ZnVuY3Rpb24gVVd0KHQsZSxuKXt2YXIgcjtyPXQuWmMoZSksci5SYihuKX1mdW5jdGlvbiBXV3QodCxlLG4pe3JldHVybiBieHQodC5jLHQuYixlLG4pfWZ1bmN0aW9uIHJ3dCh0LGUpe3JldHVybihlJndpKSV0LmQubGVuZ3RofWZ1bmN0aW9uIFBzKHQsZSl7VmkuY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIGl3dCh0LGUpe0NwdC5jYWxsKHRoaXMsdCksdGhpcy5hPWV9ZnVuY3Rpb24geG50KHQsZSl7Q3B0LmNhbGwodGhpcyx0KSx0aGlzLmE9ZX1mdW5jdGlvbiBZV3QodCxlKXt0aGlzLmM9dCxRdy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gS1d0KHQsZSl7dGhpcy5hPXQsWHp0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBHTSh0LGUpe3RoaXMuYT10LFh6dC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gWFd0KHQpe3RoaXMuYT0oamwodCxreSksbmV3IFhjKHQpKX1mdW5jdGlvbiBRV3QodCl7dGhpcy5hPShqbCh0LGt5KSxuZXcgWGModCkpfWZ1bmN0aW9uIFVNKHQpe3JldHVybiF0LmEmJih0LmE9bmV3IGF0KSx0LmF9ZnVuY3Rpb24gWld0KHQpe3JldHVybiB0Pjg/MDp0KzF9ZnVuY3Rpb24gTFplKHQsZSl7cmV0dXJuIE5uKCksdD09ZT8wOnQ/MTotMX1mdW5jdGlvbiBzd3QodCxlLG4pe3JldHVybiB6eCh0LHUoZSwyMiksbil9ZnVuY3Rpb24gTVplKHQsZSxuKXtyZXR1cm4gdC5hcHBseShlLG4pfWZ1bmN0aW9uIEpXdCh0LGUsbil7cmV0dXJuIHQuYSs9TWgoZSwwLG4pLHR9ZnVuY3Rpb24gYXd0KHQsZSl7dmFyIG47cmV0dXJuIG49dC5lLHQuZT1lLG59ZnVuY3Rpb24gRFplKHQsZSl7dmFyIG47bj10W2tvdF0sbi5jYWxsKHQsZSl9ZnVuY3Rpb24gSVplKHQsZSl7dmFyIG47bj10W2tvdF0sbi5jYWxsKHQsZSl9ZnVuY3Rpb24gem0odCxlKXt0LmEuVmModC5iLGUpLCsrdC5iLHQuYz0tMX1mdW5jdGlvbiB0WXQodCl7WHUodC5lKSx0LmQuYj10LmQsdC5kLmE9dC5kfWZ1bmN0aW9uIFdNKHQpe3QuYj9XTSh0LmIpOnQuZi5jLnpjKHQuZSx0LmQpfWZ1bmN0aW9uIE9aZSh0LGUsbil7UWIoKSxBdHQodCxlLkNlKHQuYSxuKSl9ZnVuY3Rpb24gUFplKHQsZSl7cmV0dXJuIHlldChOaWUodC5hLGUsITApKX1mdW5jdGlvbiBGWmUodCxlKXtyZXR1cm4geWV0KEJpZSh0LmEsZSwhMCkpfWZ1bmN0aW9uIGZmKHQsZSl7cmV0dXJuIExSKG5ldyBBcnJheShlKSx0KX1mdW5jdGlvbiBrbnQodCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9ZnVuY3Rpb24gTlplKHQpe3JldHVybiB0PT1udWxsP251bGw6dC5tZXNzYWdlfWZ1bmN0aW9uIGVZdCgpe3RoaXMuYT1uZXcgaGUsdGhpcy5iPW5ldyBoZX1mdW5jdGlvbiBuWXQoKXt0aGlzLmE9bmV3IEg1LHRoaXMuYj1uZXcgaHF0fWZ1bmN0aW9uIHJZdCgpe3RoaXMuYj1uZXcgQ2EsdGhpcy5jPW5ldyBoZX1mdW5jdGlvbiBvd3QoKXt0aGlzLmQ9bmV3IENhLHRoaXMuZT1uZXcgQ2F9ZnVuY3Rpb24gY3d0KCl7dGhpcy5uPW5ldyBDYSx0aGlzLm89bmV3IENhfWZ1bmN0aW9uIElqKCl7dGhpcy5uPW5ldyBDeCx0aGlzLmk9bmV3IEZ4fWZ1bmN0aW9uIGlZdCgpe3RoaXMuYT1uZXcgWEosdGhpcy5iPW5ldyBaWH1mdW5jdGlvbiBzWXQoKXt0aGlzLmE9bmV3IGhlLHRoaXMuZD1uZXcgaGV9ZnVuY3Rpb24gYVl0KCl7dGhpcy5iPW5ldyBIcyx0aGlzLmE9bmV3IEhzfWZ1bmN0aW9uIG9ZdCgpe3RoaXMuYj1uZXcgX3IsdGhpcy5hPW5ldyBfcn1mdW5jdGlvbiBjWXQoKXt0aGlzLmI9bmV3IHFIdCx0aGlzLmE9bmV3IEdRfWZ1bmN0aW9uIHVZdCgpe0lqLmNhbGwodGhpcyksdGhpcy5hPW5ldyBDYX1mdW5jdGlvbiB5OSh0KXtvdW4uY2FsbCh0aGlzLHQsKFUkKCksanV0KSl9ZnVuY3Rpb24gdXd0KHQsZSxuLHIpe1dqLmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBCWmUodCxlLG4pe24hPW51bGwmJnV6KGUsQ3N0KHQsbikpfWZ1bmN0aW9uIFJaZSh0LGUsbil7biE9bnVsbCYmbHooZSxDc3QodCxuKSl9ZnVuY3Rpb24gbHd0KHQsZSxuKXtyZXR1cm4gbj1IbCh0LGUsMTEsbiksbn1mdW5jdGlvbiBMaSh0LGUpe3JldHVybiB0LmErPWUuYSx0LmIrPWUuYix0fWZ1bmN0aW9uIGlhKHQsZSl7cmV0dXJuIHQuYS09ZS5hLHQuYi09ZS5iLHR9ZnVuY3Rpb24galplKHQsZSl7cmV0dXJuIHQubi5hPShPbihlKSxlKzEwKX1mdW5jdGlvbiAkWmUodCxlKXtyZXR1cm4gdC5uLmE9KE9uKGUpLGUrMTApfWZ1bmN0aW9uIHpaZSh0LGUpe3JldHVybiBlPT10fHx5RShtcShlKSx0KX1mdW5jdGlvbiBsWXQodCxlKXtyZXR1cm4ga2kodC5hLGUsIiIpPT1udWxsfWZ1bmN0aW9uIHFaZSh0LGUpe3JldHVybiBrTSgpLCFKOChlLmQuaSx0KX1mdW5jdGlvbiBIWmUodCxlKXtCcCh0LmYpP2Eybih0LGUpOlYwbih0LGUpfWZ1bmN0aW9uIFZaZSh0LGUpe3ZhciBuO3JldHVybiBuPWUuSGgodC5hKSxufWZ1bmN0aW9uIHFtKHQsZSl7eW8uY2FsbCh0aGlzLEpfK3QrRDIrZSl9ZnVuY3Rpb24gUngodCxlLG4scil7ZmUuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIGh3dCh0LGUsbixyKXtmZS5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gaFl0KHQsZSxuLHIpe2h3dC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gZll0KHQsZSxuLHIpe3IkLmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBFbnQodCxlLG4scil7ciQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIGZ3dCh0LGUsbixyKXtyJC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gZFl0KHQsZSxuLHIpe0VudC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gZHd0KHQsZSxuLHIpe0VudC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gQ24odCxlLG4scil7Znd0LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBnWXQodCxlLG4scil7ZHd0LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBwWXQodCxlLG4scil7aHZ0LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBiWXQodCxlLG4pe3RoaXMuYT10LGoydC5jYWxsKHRoaXMsZSxuKX1mdW5jdGlvbiB3WXQodCxlLG4pe3RoaXMuYz1lLHRoaXMuYj1uLHRoaXMuYT10fWZ1bmN0aW9uIEdaZSh0LGUsbil7cmV0dXJuIHQuZD11KGUuS2IobiksMTY0KX1mdW5jdGlvbiBnd3QodCxlKXtyZXR1cm4gdC5BaigpLk5oKCkuS2godCxlKX1mdW5jdGlvbiBwd3QodCxlKXtyZXR1cm4gdC5BaigpLk5oKCkuSWgodCxlKX1mdW5jdGlvbiB2WXQodCxlKXtyZXR1cm4gT24odCksVnQodCk9PT1WdChlKX1mdW5jdGlvbiBobih0LGUpe3JldHVybiBPbih0KSxWdCh0KT09PVZ0KGUpfWZ1bmN0aW9uIFRudCh0LGUpe3JldHVybiB5ZXQoTmllKHQuYSxlLCExKSl9ZnVuY3Rpb24gQ250KHQsZSl7cmV0dXJuIHlldChCaWUodC5hLGUsITEpKX1mdW5jdGlvbiBVWmUodCxlKXtyZXR1cm4gdC5iLnNkKG5ldyBRVnQodCxlKSl9ZnVuY3Rpb24gV1plKHQsZSl7cmV0dXJuIHQuYi5zZChuZXcgWlZ0KHQsZSkpfWZ1bmN0aW9uIG1ZdCh0LGUpe3JldHVybiB0LmIuc2QobmV3IEpWdCh0LGUpKX1mdW5jdGlvbiBid3QodCxlLG4pe3JldHVybiB0Lmxhc3RJbmRleE9mKGUsbil9ZnVuY3Rpb24gWVplKHQsZSxuKXtyZXR1cm4gTXModFtlLmJdLHRbbi5iXSl9ZnVuY3Rpb24gS1plKHQsZSl7cmV0dXJuIEp0KGUsKFRlKCksRE8pLHQpfWZ1bmN0aW9uIFhaZSh0LGUpe3JldHVybiBwdShlLmEuZC5wLHQuYS5kLnApfWZ1bmN0aW9uIFFaZSh0LGUpe3JldHVybiBwdSh0LmEuZC5wLGUuYS5kLnApfWZ1bmN0aW9uIFpaZSh0LGUpe3JldHVybiBNcyh0LmMtdC5zLGUuYy1lLnMpfWZ1bmN0aW9uIHlZdCh0KXtyZXR1cm4gdC5jP1JvKHQuYy5hLHQsMCk6LTF9ZnVuY3Rpb24gSlplKHQpe3JldHVybiB0PDEwMD9udWxsOm5ldyBEcCh0KX1mdW5jdGlvbiBqeCh0KXtyZXR1cm4gdD09WTJ8fHQ9PWcwfHx0PT1HY31mdW5jdGlvbiB4WXQodCxlKXtyZXR1cm4gX3QoZSwxNSkmJlN1ZSh0LmMsZSl9ZnVuY3Rpb24gdEplKHQsZSl7JDF8fGUmJih0LmQ9ZSl9ZnVuY3Rpb24gX250KHQsZSl7dmFyIG47cmV0dXJuIG49ZSwhIWp5dCh0LG4pfWZ1bmN0aW9uIHd3dCh0LGUpe3RoaXMuYz10LEpudC5jYWxsKHRoaXMsdCxlKX1mdW5jdGlvbiBrWXQodCl7dGhpcy5jPXQsZW50LmNhbGwodGhpcyxxcSwwKX1mdW5jdGlvbiBFWXQodCxlKXtzZW4uY2FsbCh0aGlzLHQsdC5sZW5ndGgsZSl9ZnVuY3Rpb24gZUplKHQsZSxuKXtyZXR1cm4gdSh0LmMsNjkpLmxrKGUsbil9ZnVuY3Rpb24gT2oodCxlLG4pe3JldHVybiB1KHQuYyw2OSkubWsoZSxuKX1mdW5jdGlvbiBuSmUodCxlLG4pe3JldHVybiBmWmUodCx1KGUsMzMyKSxuKX1mdW5jdGlvbiB2d3QodCxlLG4pe3JldHVybiBkWmUodCx1KGUsMzMyKSxuKX1mdW5jdGlvbiBySmUodCxlLG4pe3JldHVybiB4YWUodCx1KGUsMzMyKSxuKX1mdW5jdGlvbiBUWXQodCxlLG4pe3JldHVybiBlZ24odCx1KGUsMzMyKSxuKX1mdW5jdGlvbiB4OSh0LGUpe3JldHVybiBlPT1udWxsP251bGw6c3kodC5iLGUpfWZ1bmN0aW9uIG13dCh0KXtyZXR1cm4gQm0odCk/KE9uKHQpLHQpOnQua2UoKX1mdW5jdGlvbiBQaih0KXtyZXR1cm4haXNOYU4odCkmJiFpc0Zpbml0ZSh0KX1mdW5jdGlvbiBDWXQodCl7Z2QoKSx0aGlzLmE9KHduKCksbmV3IHM4KHQpKX1mdW5jdGlvbiBZTSh0KXtrOCgpLHRoaXMuZD10LHRoaXMuYT1uZXcgQjN9ZnVuY3Rpb24gc2godCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIF9ZdCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gU1l0KHQsZSxuKXt0aGlzLmQ9dCx0aGlzLmI9bix0aGlzLmE9ZX1mdW5jdGlvbiBTbnQodCl7JFV0KHRoaXMpLEFoKHRoaXMpLFVhKHRoaXMsdCl9ZnVuY3Rpb24gQnUodCl7YW50KHRoaXMpLFB3dCh0aGlzLmMsMCx0LlBjKCkpfWZ1bmN0aW9uIEFZdCh0KXtDbCh0LmEpLEN0ZSh0LmMsdC5iKSx0LmI9bnVsbH1mdW5jdGlvbiBMWXQodCl7dGhpcy5hPXQsR2QoKSxUdShEYXRlLm5vdygpKX1mdW5jdGlvbiBNWXQoKXtNWXQ9WixSRXQ9bmV3IF8sYVY9bmV3IF99ZnVuY3Rpb24gQW50KCl7QW50PVosTEV0PW5ldyBIdCxZZ2U9bmV3IExlfWZ1bmN0aW9uIERZdCgpe0RZdD1aLG41ZT1OdChRbixEZSwxLDAsNSwxKX1mdW5jdGlvbiBJWXQoKXtJWXQ9Wix5NWU9TnQoUW4sRGUsMSwwLDUsMSl9ZnVuY3Rpb24geXd0KCl7eXd0PVoseDVlPU50KFFuLERlLDEsMCw1LDEpfWZ1bmN0aW9uIGdkKCl7Z2Q9WixuZXcgQXB0KCh3bigpLHduKCksaW8pKX1mdW5jdGlvbiBpSmUodCl7cmV0dXJuIFUkKCksVXIoKE50ZSgpLFFnZSksdCl9ZnVuY3Rpb24gc0plKHQpe3JldHVybiBPMSgpLFVyKChldGUoKSxycGUpLHQpfWZ1bmN0aW9uIGFKZSh0KXtyZXR1cm4gR3ooKSxVcigoY0p0KCksdXBlKSx0KX1mdW5jdGlvbiBvSmUodCl7cmV0dXJuIFEkKCksVXIoKHVKdCgpLGxwZSksdCl9ZnVuY3Rpb24gY0plKHQpe3JldHVybiBDcSgpLFVyKChLbmUoKSxocGUpLHQpfWZ1bmN0aW9uIHVKZSh0KXtyZXR1cm4gS2YoKSxVcigoWkp0KCksZ3BlKSx0KX1mdW5jdGlvbiBsSmUodCl7cmV0dXJuIFF1KCksVXIoKEpKdCgpLGJwZSksdCl9ZnVuY3Rpb24gaEplKHQpe3JldHVybiB5dSgpLFVyKCh0dGUoKSx2cGUpLHQpfWZ1bmN0aW9uIGZKZSh0KXtyZXR1cm4gJHEoKSxVcigoaFV0KCksenBlKSx0KX1mdW5jdGlvbiBkSmUodCl7cmV0dXJuIHJ2KCksVXIoKFJ0ZSgpLEhwZSksdCl9ZnVuY3Rpb24gZ0plKHQpe3JldHVybiB1NigpLFVyKChqdGUoKSxHcGUpLHQpfWZ1bmN0aW9uIHBKZSh0KXtyZXR1cm4gY18oKSxVcigoJHRlKCksWXBlKSx0KX1mdW5jdGlvbiBiSmUodCl7cmV0dXJuIGpSKCksVXIoKCRadCgpLEtwZSksdCl9ZnVuY3Rpb24gd0plKHQpe3JldHVybiBaJCgpLFVyKChsSnQoKSxmYmUpLHQpfWZ1bmN0aW9uIHZKZSh0KXtyZXR1cm4gcTkoKSxVcigobnRlKCksT2JlKSx0KX1mdW5jdGlvbiBtSmUodCl7cmV0dXJuIFdhKCksVXIoKGJlZSgpLEJiZSksdCl9ZnVuY3Rpb24geUplKHQpe3JldHVybiBuRSgpLFVyKChCdGUoKSxxYmUpLHQpfWZ1bmN0aW9uIHhKZSh0KXtyZXR1cm4gaXYoKSxVcigocnRlKCksWWJlKSx0KX1mdW5jdGlvbiB4d3QodCxlKXtpZighdCl0aHJvdyBpdChuZXcgRm4oZSkpfWZ1bmN0aW9uIGtKZSh0KXtyZXR1cm4gVm4oKSxVcigoQmVlKCksWmJlKSx0KX1mdW5jdGlvbiBrd3QodCl7V2ouY2FsbCh0aGlzLHQuZCx0LmMsdC5hLHQuYil9ZnVuY3Rpb24gTG50KHQpe1dqLmNhbGwodGhpcyx0LmQsdC5jLHQuYSx0LmIpfWZ1bmN0aW9uIEV3dCh0LGUsbil7dGhpcy5iPXQsdGhpcy5jPWUsdGhpcy5hPW59ZnVuY3Rpb24gRmoodCxlLG4pe3RoaXMuYj10LHRoaXMuYT1lLHRoaXMuYz1ufWZ1bmN0aW9uIE9ZdCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gVHd0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiBQWXQodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIEN3dCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gRll0KHQsZSxuKXt0aGlzLmI9dCx0aGlzLmE9ZSx0aGlzLmM9bn1mdW5jdGlvbiBOaih0LGUsbil7dGhpcy5lPWUsdGhpcy5iPXQsdGhpcy5kPW59ZnVuY3Rpb24gRUplKHQsZSxuKXtyZXR1cm4gUWIoKSx0LmEuT2QoZSxuKSxlfWZ1bmN0aW9uIE1udCh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgV3UsZS5lPXQsZX1mdW5jdGlvbiBfd3QodCl7dmFyIGU7cmV0dXJuIGU9bmV3IHZxdCxlLmI9dCxlfWZ1bmN0aW9uIEtNKCl7S009WixtVj1uZXcgQksseVY9bmV3IFJLfWZ1bmN0aW9uIGRmKCl7ZGY9WixmMmU9bmV3IFNYLGQyZT1uZXcgRE59ZnVuY3Rpb24gVEplKHQpe3JldHVybiBUeigpLFVyKChxdGUoKSxvMmUpLHQpfWZ1bmN0aW9uIENKZSh0KXtyZXR1cm4gSTEoKSxVcigoVnRlKCksYjJlKSx0KX1mdW5jdGlvbiBfSmUodCl7cmV0dXJuIEVxKCksVXIoKFJuZSgpLFQyZSksdCl9ZnVuY3Rpb24gU0plKHQpe3JldHVybiBoNigpLFVyKCgkZWUoKSxDMmUpLHQpfWZ1bmN0aW9uIEFKZSh0KXtyZXR1cm4gSCQoKSxVcigoYkp0KCksXzJlKSx0KX1mdW5jdGlvbiBMSmUodCl7cmV0dXJuIG42KCksVXIoKGl0ZSgpLFMyZSksdCl9ZnVuY3Rpb24gTUplKHQpe3JldHVybiBiNCgpLFVyKChoZWUoKSx2MmUpLHQpfWZ1bmN0aW9uIERKZSh0KXtyZXR1cm4gbnYoKSxVcigob3RlKCksRTJlKSx0KX1mdW5jdGlvbiBJSmUodCl7cmV0dXJuIG96KCksVXIoKHN0ZSgpLEEyZSksdCl9ZnVuY3Rpb24gT0plKHQpe3JldHVybiB4MigpLFVyKCh1ZWUoKSxMMmUpLHQpfWZ1bmN0aW9uIFBKZSh0KXtyZXR1cm4gTEQoKSxVcigoZkp0KCksTTJlKSx0KX1mdW5jdGlvbiBGSmUodCl7cmV0dXJuIGQyKCksVXIoKGF0ZSgpLEkyZSksdCl9ZnVuY3Rpb24gTkplKHQpe3JldHVybiBkcSgpLFVyKChWZWUoKSxPMmUpLHQpfWZ1bmN0aW9uIEJKZSh0KXtyZXR1cm4geEQoKSxVcigoZEp0KCksUDJlKSx0KX1mdW5jdGlvbiBSSmUodCl7cmV0dXJuIG9JKCksVXIoKHFlZSgpLEYyZSksdCl9ZnVuY3Rpb24gakplKHQpe3JldHVybiBrRSgpLFVyKCh6ZWUoKSxOMmUpLHQpfWZ1bmN0aW9uICRKZSh0KXtyZXR1cm4gb28oKSxVcigobHJlKCksQjJlKSx0KX1mdW5jdGlvbiB6SmUodCl7cmV0dXJuIGVFKCksVXIoKHV0ZSgpLFIyZSksdCl9ZnVuY3Rpb24gcUplKHQpe3JldHVybiBxMCgpLFVyKChjdGUoKSwkMmUpLHQpfWZ1bmN0aW9uIEhKZSh0KXtyZXR1cm4gSSQoKSxVcigod0p0KCksejJlKSx0KX1mdW5jdGlvbiBWSmUodCl7cmV0dXJuIGRoKCksVXIoKGZlZSgpLHEyZSksdCl9ZnVuY3Rpb24gR0plKHQpe3JldHVybiB1cSgpLFVyKChIZWUoKSxybWUpLHQpfWZ1bmN0aW9uIFVKZSh0KXtyZXR1cm4gWjkoKSxVcigobHRlKCksaW1lKSx0KX1mdW5jdGlvbiBXSmUodCl7cmV0dXJuIGN5KCksVXIoKEd0ZSgpLHNtZSksdCl9ZnVuY3Rpb24gWUplKHQpe3JldHVybiBzbygpLFVyKChkdGUoKSxobWUpLHQpfWZ1bmN0aW9uIEtKZSh0KXtyZXR1cm4geTQoKSxVcigoQm5lKCksb21lKSx0KX1mdW5jdGlvbiBYSmUodCl7cmV0dXJuIFYwKCksVXIoKGZ0ZSgpLGNtZSksdCl9ZnVuY3Rpb24gUUplKHQpe3JldHVybiBDRCgpLFVyKChwSnQoKSx1bWUpLHQpfWZ1bmN0aW9uIFpKZSh0KXtyZXR1cm4geXooKSxVcigoaHRlKCksZm1lKSx0KX1mdW5jdGlvbiBKSmUodCl7cmV0dXJuIHVfKCksVXIoKGxlZSgpLGFtZSksdCl9ZnVuY3Rpb24gdHRuKHQpe3JldHVybiBwRCgpLFVyKChnSnQoKSxkbWUpLHQpfWZ1bmN0aW9uIGV0bih0KXtyZXR1cm4gY0UoKSxVcigocHRlKCksZ21lKSx0KX1mdW5jdGlvbiBudG4odCl7cmV0dXJuIHZ6KCksVXIoKGJ0ZSgpLHBtZSksdCl9ZnVuY3Rpb24gcnRuKHQpe3JldHVybiBDeigpLFVyKChndGUoKSxibWUpLHQpfWZ1bmN0aW9uIGl0bih0KXtyZXR1cm4gZXYoKSxVcigod3RlKCksTG1lKSx0KX1mdW5jdGlvbiBzdG4odCl7cmV0dXJuICQ5KCksVXIoKG1KdCgpLFBtZSksdCl9ZnVuY3Rpb24gYXRuKHQpe3JldHVybiBiZCgpLFVyKCh5SnQoKSx6bWUpLHQpfWZ1bmN0aW9uIG90bih0KXtyZXR1cm4gQzEoKSxVcigoeEp0KCksSG1lKSx0KX1mdW5jdGlvbiBjdG4odCl7cmV0dXJuIFVmKCksVXIoKHZKdCgpLGl5ZSksdCl9ZnVuY3Rpb24gdXRuKHQpe3JldHVybiBHdygpLFVyKChrSnQoKSxoeWUpLHQpfWZ1bmN0aW9uIGx0bih0KXtyZXR1cm4gd0UoKSxVcigoenRlKCksZnllKSx0KX1mdW5jdGlvbiBodG4odCl7cmV0dXJuIHBfKCksVXIoKEdlZSgpLGd5ZSksdCl9ZnVuY3Rpb24gZnRuKHQpe3JldHVybiBUJCgpLFVyKChDSnQoKSxBeWUpLHQpfWZ1bmN0aW9uIGR0bih0KXtyZXR1cm4gcHooKSxVcigoVEp0KCksUHllKSx0KX1mdW5jdGlvbiBndG4odCl7cmV0dXJuIEEkKCksVXIoKEVKdCgpLEx5ZSksdCl9ZnVuY3Rpb24gcHRuKHQpe3JldHVybiBOeigpLFVyKCh2dGUoKSxOeWUpLHQpfWZ1bmN0aW9uIGJ0bih0KXtyZXR1cm4gRyQoKSxVcigoX0p0KCksQnllKSx0KX1mdW5jdGlvbiB3dG4odCl7cmV0dXJuIEhEKCksVXIoKG10ZSgpLFJ5ZSksdCl9ZnVuY3Rpb24gdnRuKHQpe3JldHVybiBlcSgpLFVyKChIdGUoKSxKeWUpLHQpfWZ1bmN0aW9uIG10bih0KXtyZXR1cm4gbXooKSxVcigoeHRlKCksdDNlKSx0KX1mdW5jdGlvbiB5dG4odCl7cmV0dXJuIEZ6KCksVXIoKHl0ZSgpLGUzZSksdCl9ZnVuY3Rpb24geHRuKHQpe3JldHVybiBBRSgpLFVyKChwZWUoKSx4M2UpLHQpfWZ1bmN0aW9uIGt0bih0KXtyZXR1cm4gS0QoKSxVcigoa3RlKCksazNlKSx0KX1mdW5jdGlvbiBFdG4odCl7cmV0dXJuIHpSKCksVXIoKFJadCgpLEUzZSksdCl9ZnVuY3Rpb24gVHRuKHQpe3JldHVybiBxUigpLFVyKChCWnQoKSxDM2UpLHQpfWZ1bmN0aW9uIEN0bih0KXtyZXR1cm4gYkQoKSxVcigoQUp0KCksXzNlKSx0KX1mdW5jdGlvbiBfdG4odCl7cmV0dXJuIHVJKCksVXIoKGRlZSgpLFMzZSksdCl9ZnVuY3Rpb24gU3RuKHQpe3JldHVybiBVQygpLFVyKChqWnQoKSxIM2UpLHQpfWZ1bmN0aW9uIEF0bih0KXtyZXR1cm4gakQoKSxVcigoU0p0KCksVjNlKSx0KX1mdW5jdGlvbiBMdG4odCl7cmV0dXJuIFFmKCksVXIoKGdlZSgpLFgzZSksdCl9ZnVuY3Rpb24gTXRuKHQpe3JldHVybiBVZygpLFVyKChqbmUoKSxaM2UpLHQpfWZ1bmN0aW9uIER0bih0KXtyZXR1cm4gdDAoKSxVcigoamVlKCksSjNlKSx0KX1mdW5jdGlvbiBJdG4odCl7cmV0dXJuIGh5KCksVXIoKFJlZSgpLHM0ZSksdCl9ZnVuY3Rpb24gT3RuKHQpe3JldHVybiBybygpLFVyKChmVXQoKSxpMmUpLHQpfWZ1bmN0aW9uIFB0bih0KXtyZXR1cm4gWDgoKSxVcigoaEp0KCkscjJlKSx0KX1mdW5jdGlvbiBGdG4odCl7cmV0dXJuIGFvKCksVXIoKHdlZSgpLHk0ZSksdCl9ZnVuY3Rpb24gTnRuKHQpe3JldHVybiBNMSgpLFVyKChUdGUoKSx4NGUpLHQpfWZ1bmN0aW9uIEJ0bih0KXtyZXR1cm4gVzAoKSxVcigoWXRlKCksazRlKSx0KX1mdW5jdGlvbiBSdG4odCl7cmV0dXJuIGhxKCksVXIoKFdlZSgpLEU0ZSksdCl9ZnVuY3Rpb24ganRuKHQpe3JldHVybiBHMCgpLFVyKChFdGUoKSxDNGUpLHQpfWZ1bmN0aW9uICR0bih0KXtyZXR1cm4gemwoKSxVcigoV3RlKCksUzRlKSx0KX1mdW5jdGlvbiB6dG4odCl7cmV0dXJuIHB5KCksVXIoKFluZSgpLEE0ZSksdCl9ZnVuY3Rpb24gcXRuKHQpe3JldHVybiBsNCgpLFVyKCh2ZWUoKSxMNGUpLHQpfWZ1bmN0aW9uIEh0bih0KXtyZXR1cm4gdWEoKSxVcigoT2VlKCksTTRlKSx0KX1mdW5jdGlvbiBWdG4odCl7cmV0dXJuIFp1KCksVXIoKFVlZSgpLEQ0ZSksdCl9ZnVuY3Rpb24gR3RuKHQpe3JldHVybiBBbCgpLFVyKChYdGUoKSxCNGUpLHQpfWZ1bmN0aW9uIFV0bih0KXtyZXR1cm4gbGwoKSxVcigoaHJlKCksUjRlKSx0KX1mdW5jdGlvbiBXdG4odCl7cmV0dXJuIHZlKCksVXIoKG1lZSgpLEk0ZSksdCl9ZnVuY3Rpb24gWXRuKHQpe3JldHVybiBqeigpLFVyKChLdGUoKSxqNGUpLHQpfWZ1bmN0aW9uIEt0bih0KXtyZXR1cm4gU2woKSxVcigoVXRlKCkscTRlKSx0KX1mdW5jdGlvbiBYdG4odCl7cmV0dXJuIENFKCksVXIoKCRuZSgpLGU1ZSksdCl9ZnVuY3Rpb24gUXRuKHQsZSl7cmV0dXJuIE9uKHQpLHQrKE9uKGUpLGUpfWZ1bmN0aW9uIFp0bih0LGUpe3JldHVybiBHZCgpLERyKFd0KHQuYSksZSl9ZnVuY3Rpb24gSnRuKHQsZSl7cmV0dXJuIEdkKCksRHIoV3QodC5hKSxlKX1mdW5jdGlvbiBEbnQodCxlKXt0aGlzLmM9dCx0aGlzLmE9ZSx0aGlzLmI9ZS10fWZ1bmN0aW9uIE5ZdCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gU3d0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiBBd3QodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIEJZdCh0LGUsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW59ZnVuY3Rpb24gUll0KHQsZSxuKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bn1mdW5jdGlvbiBJZyh0LGUsbil7dGhpcy5lPXQsdGhpcy5hPWUsdGhpcy5jPW59ZnVuY3Rpb24gall0KHQsZSxuKXtpaCgpLCR2dC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIEludCh0LGUsbil7aWgoKSxUdnQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBMd3QodCxlLG4pe2loKCksVHZ0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gTXd0KHQsZSxuKXtpaCgpLFR2dC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uICRZdCh0LGUsbil7aWgoKSxJbnQuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBEd3QodCxlLG4pe2loKCksSW50LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gell0KHQsZSxuKXtpaCgpLER3dC5jYWxsKHRoaXMsdCxlLG4pfWZ1bmN0aW9uIHFZdCh0LGUsbil7aWgoKSxMd3QuY2FsbCh0aGlzLHQsZSxuKX1mdW5jdGlvbiBIWXQodCxlLG4pe2loKCksTXd0LmNhbGwodGhpcyx0LGUsbil9ZnVuY3Rpb24gWE0odCxlKXtyZXR1cm4gTHIodCksTHIoZSksbmV3IGxWdCh0LGUpfWZ1bmN0aW9uICR4KHQsZSl7cmV0dXJuIExyKHQpLExyKGUpLG5ldyBuS3QodCxlKX1mdW5jdGlvbiB0ZW4odCxlKXtyZXR1cm4gTHIodCksTHIoZSksbmV3IHJLdCh0LGUpfWZ1bmN0aW9uIGVlbih0LGUpe3JldHVybiBMcih0KSxMcihlKSxuZXcgZlZ0KHQsZSl9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBrOSh0PT1udWxsfHxnc3QodCxlKSksdH1mdW5jdGlvbiB4OCh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgaGUsb2l0KGUsdCksZX1mdW5jdGlvbiBuZW4odCl7dmFyIGU7cmV0dXJuIGU9bmV3IEhzLG9pdChlLHQpLGV9ZnVuY3Rpb24gVll0KHQpe3ZhciBlO3JldHVybiBlPW5ldyBCcHQseGl0KGUsdCksZX1mdW5jdGlvbiBRTSh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgWmkseGl0KGUsdCksZX1mdW5jdGlvbiByZW4odCl7cmV0dXJuIXQuZSYmKHQuZT1uZXcgaGUpLHQuZX1mdW5jdGlvbiBpZW4odCl7cmV0dXJuIXQuYyYmKHQuYz1uZXcgVG0pLHQuY31mdW5jdGlvbiBsZSh0LGUpe3JldHVybiB0LmNbdC5jLmxlbmd0aF09ZSwhMH1mdW5jdGlvbiBHWXQodCxlKXt0aGlzLmM9dCx0aGlzLmI9ZSx0aGlzLmE9ITF9ZnVuY3Rpb24gSXd0KHQpe3RoaXMuZD10LHp0dCh0aGlzKSx0aGlzLmI9WGVuKHQuZCl9ZnVuY3Rpb24gVVl0KCl7dGhpcy5hPSI7LDsiLHRoaXMuYj0iIix0aGlzLmM9IiJ9ZnVuY3Rpb24gc2VuKHQsZSxuKXtXS3QuY2FsbCh0aGlzLGUsbiksdGhpcy5hPXR9ZnVuY3Rpb24gV1l0KHQsZSxuKXt0aGlzLmI9dCxvVXQuY2FsbCh0aGlzLGUsbil9ZnVuY3Rpb24gT3d0KHQsZSxuKXt0aGlzLmM9dCxLUi5jYWxsKHRoaXMsZSxuKX1mdW5jdGlvbiBQd3QodCxlLG4pe241dChuLDAsdCxlLG4ubGVuZ3RoLCExKX1mdW5jdGlvbiBXZCh0LGUsbixyLHMpe3QuYj1lLHQuYz1uLHQuZD1yLHQuYT1zfWZ1bmN0aW9uIGFlbih0LGUpe2UmJih0LmI9ZSx0LmE9KFZwKGUpLGUuYSkpfWZ1bmN0aW9uIEZ3dCh0LGUsbixyLHMpe3QuZD1lLHQuYz1uLHQuYT1yLHQuYj1zfWZ1bmN0aW9uIE53dCh0KXt2YXIgZSxuO2U9dC5iLG49dC5jLHQuYj1uLHQuYz1lfWZ1bmN0aW9uIEJ3dCh0KXt2YXIgZSxuO249dC5kLGU9dC5hLHQuZD1lLHQuYT1ufWZ1bmN0aW9uIFJ3dCh0KXtyZXR1cm4gS3AoZm5uKEJvKHQpP0xoKHQpOnQpKX1mdW5jdGlvbiBvZW4odCxlKXtyZXR1cm4gcHUodUt0KHQuZCksdUt0KGUuZCkpfWZ1bmN0aW9uIGNlbih0LGUpe3JldHVybiBlPT0odmUoKSxCbik/dC5jOnQuZH1mdW5jdGlvbiBrOCgpe2s4PVoscl90PSh2ZSgpLEJuKSxDRz1Ibn1mdW5jdGlvbiBZWXQoKXt0aGlzLmI9WHQoeWUoSWUoKEpmKCksbmx0KSkpKX1mdW5jdGlvbiBLWXQodCl7cmV0dXJuIFFiKCksTnQoUW4sRGUsMSx0LDUsMSl9ZnVuY3Rpb24gdWVuKHQpe3JldHVybiBuZXcgJGUodC5jK3QuYix0LmQrdC5hKX1mdW5jdGlvbiBsZW4odCxlKXtyZXR1cm4gJFIoKSxwdSh0LmQucCxlLmQucCl9ZnVuY3Rpb24gT250KHQpe3JldHVybiBabih0LmIhPTApLGxoKHQsdC5hLmEpfWZ1bmN0aW9uIGhlbih0KXtyZXR1cm4gWm4odC5iIT0wKSxsaCh0LHQuYy5iKX1mdW5jdGlvbiBqd3QodCxlKXtpZighdCl0aHJvdyBpdChuZXcgaUh0KGUpKX1mdW5jdGlvbiBCaih0LGUpe2lmKCF0KXRocm93IGl0KG5ldyBGbihlKSl9ZnVuY3Rpb24gJHd0KHQsZSxuKXtnOC5jYWxsKHRoaXMsdCxlKSx0aGlzLmI9bn1mdW5jdGlvbiBaTSh0LGUsbil7ZTJ0LmNhbGwodGhpcyx0LGUpLHRoaXMuYz1ufWZ1bmN0aW9uIFhZdCh0LGUsbil7U2VlLmNhbGwodGhpcyxlLG4pLHRoaXMuZD10fWZ1bmN0aW9uIHp3dCh0KXt5d3QoKSxQay5jYWxsKHRoaXMpLHRoaXMudGgodCl9ZnVuY3Rpb24gUVl0KHQsZSxuKXt0aGlzLmE9dCxWMy5jYWxsKHRoaXMsZSxuKX1mdW5jdGlvbiBaWXQodCxlLG4pe3RoaXMuYT10LFYzLmNhbGwodGhpcyxlLG4pfWZ1bmN0aW9uIFJqKHQsZSxuKXtlMnQuY2FsbCh0aGlzLHQsZSksdGhpcy5jPW59ZnVuY3Rpb24gSll0KCl7QjgoKSxNbm4uY2FsbCh0aGlzLChQcCgpLFloKSl9ZnVuY3Rpb24gdEt0KHQpe3JldHVybiB0IT1udWxsJiYhdHN0KHQsb0EsY0EpfWZ1bmN0aW9uIGZlbih0LGUpe3JldHVybih1aWUodCk8PDR8dWllKGUpKSZ5c31mdW5jdGlvbiBkZW4odCxlKXtyZXR1cm4gYyQoKSxrc3QodCxlKSxuZXcgU1h0KHQsZSl9ZnVuY3Rpb24gSmIodCxlKXt2YXIgbjt0Lm4mJihuPWUsbGUodC5mLG4pKX1mdW5jdGlvbiBFOCh0LGUsbil7dmFyIHI7cj1uZXcgVW0obiksWWYodCxlLHIpfWZ1bmN0aW9uIGdlbih0LGUpe3ZhciBuO3JldHVybiBuPXQuYyxzeXQodCxlKSxufWZ1bmN0aW9uIHF3dCh0LGUpe3JldHVybiBlPDA/dC5nPS0xOnQuZz1lLHR9ZnVuY3Rpb24gamoodCxlKXtyZXR1cm4gWm9uKHQpLHQuYSo9ZSx0LmIqPWUsdH1mdW5jdGlvbiBlS3QodCxlLG4scixzKXt0LmM9ZSx0LmQ9bix0LmI9cix0LmE9c31mdW5jdGlvbiByaSh0LGUpe3JldHVybiBmcyh0LGUsdC5jLmIsdC5jKSwhMH1mdW5jdGlvbiBId3QodCl7dC5hLmI9dC5iLHQuYi5hPXQuYSx0LmE9dC5iPW51bGx9ZnVuY3Rpb24gUG50KHQpe3RoaXMuYj10LHRoaXMuYT1Sdyh0aGlzLmIuYSkuRWQoKX1mdW5jdGlvbiBuS3QodCxlKXt0aGlzLmI9dCx0aGlzLmE9ZSxwQy5jYWxsKHRoaXMpfWZ1bmN0aW9uIHJLdCh0LGUpe3RoaXMuYT10LHRoaXMuYj1lLHBDLmNhbGwodGhpcyl9ZnVuY3Rpb24gaUt0KHQsZSl7V0t0LmNhbGwodGhpcyxlLDEwNDApLHRoaXMuYT10fWZ1bmN0aW9uIEpNKHQpe3JldHVybiB0PT0wfHxpc05hTih0KT90OnQ8MD8tMToxfWZ1bmN0aW9uIHBlbih0KXtyZXR1cm4gVXgoKSxlMCh0KT09ZXModGIodCkpfWZ1bmN0aW9uIGJlbih0KXtyZXR1cm4gVXgoKSx0Yih0KT09ZXMoZTAodCkpfWZ1bmN0aW9uIEJ3KHQsZSl7cmV0dXJuIGRfKHQsbmV3IGc4KGUuYSxlLmIpKX1mdW5jdGlvbiB3ZW4odCl7cmV0dXJuIUdhKHQpJiZ0LmMuaS5jPT10LmQuaS5jfWZ1bmN0aW9uICRqKHQpe3ZhciBlO3JldHVybiBlPXQubix0LmEuYitlLmQrZS5hfWZ1bmN0aW9uIHNLdCh0KXt2YXIgZTtyZXR1cm4gZT10Lm4sdC5lLmIrZS5kK2UuYX1mdW5jdGlvbiBWd3QodCl7dmFyIGU7cmV0dXJuIGU9dC5uLHQuZS5hK2UuYitlLmN9ZnVuY3Rpb24gYUt0KHQpe3JldHVybiBnaSgpLG5ldyBZZCgwLHQpfWZ1bmN0aW9uIHZlbih0KXtyZXR1cm4gdC5hP3QuYTpncnQodCl9ZnVuY3Rpb24gazkodCl7aWYoIXQpdGhyb3cgaXQobmV3IGk4KG51bGwpKX1mdW5jdGlvbiBvS3QoKXtvS3Q9WiwkZnQ9KHduKCksbmV3IE8ocHV0KSl9ZnVuY3Rpb24gemooKXt6aj1aLG5ldyB6M3QoKG9ldCgpLFN1dCksKGNldCgpLF91dCkpfWZ1bmN0aW9uIGNLdCgpe2NLdD1aLGZFdD1OdChqYSxlZSwxOSwyNTYsMCwxKX1mdW5jdGlvbiBGbnQodCxlLG4scil7YjN0LmNhbGwodGhpcyx0LGUsbixyLDAsMCl9ZnVuY3Rpb24gbWVuKHQsZSxuKXtyZXR1cm4ga2kodC5iLHUobi5iLDE3KSxlKX1mdW5jdGlvbiB5ZW4odCxlLG4pe3JldHVybiBraSh0LmIsdShuLmIsMTcpLGUpfWZ1bmN0aW9uIHhlbih0LGUpe3JldHVybiBsZSh0LG5ldyAkZShlLmEsZS5iKSl9ZnVuY3Rpb24ga2VuKHQsZSl7cmV0dXJuIHQuYzxlLmM/LTE6dC5jPT1lLmM/MDoxfWZ1bmN0aW9uIE5udCh0KXtyZXR1cm4gdC5lLmMubGVuZ3RoK3QuZy5jLmxlbmd0aH1mdW5jdGlvbiB1S3QodCl7cmV0dXJuIHQuZS5jLmxlbmd0aC10LmcuYy5sZW5ndGh9ZnVuY3Rpb24gbEt0KHQpe3JldHVybiB0LmIuYy5sZW5ndGgtdC5lLmMubGVuZ3RofWZ1bmN0aW9uIEVlbih0KXtyZXR1cm4gRmwoKSwodmUoKSxsdSkuSGModC5qKX1mdW5jdGlvbiBoS3QodCl7eXd0KCksend0LmNhbGwodGhpcyx0KSx0aGlzLmE9LTF9ZnVuY3Rpb24gcWoodCxlKXtCTS5jYWxsKHRoaXMsdCxlKSx0aGlzLmE9dGhpc31mdW5jdGlvbiBLaSh0LGUpe3ZhciBuO3JldHVybiBuPXJydCh0LGUpLG4uaT0yLG59ZnVuY3Rpb24gSGoodCxlKXt2YXIgbjtyZXR1cm4rK3QuaixuPXQuVGkoZSksbn1mdW5jdGlvbiBiaSh0LGUsbil7cmV0dXJuIHQuYT0tMSxSMnQodCxlLmcsbiksdH1mdW5jdGlvbiBUZW4odCxlLG4pe3A1bih0LmEsdC5iLHQuYyx1KGUsMjAyKSxuKX1mdW5jdGlvbiBDZW4odCxlKXtveXQodCxlPT1udWxsP251bGw6KE9uKGUpLGUpKX1mdW5jdGlvbiBfZW4odCxlKXtpeXQodCxlPT1udWxsP251bGw6KE9uKGUpLGUpKX1mdW5jdGlvbiBTZW4odCxlKXtpeXQodCxlPT1udWxsP251bGw6KE9uKGUpLGUpKX1mdW5jdGlvbiBCbnQodCxlLG4pe3JldHVybiBuZXcgd1l0KERubih0KS5JZSgpLG4sZSl9ZnVuY3Rpb24gdDIodCxlLG4scixzLG8pe3JldHVybiBwYWUodCxlLG4scixzLDAsbyl9ZnVuY3Rpb24gZkt0KCl7Zkt0PVosdUV0PU50KE02LGVlLDIxNywyNTYsMCwxKX1mdW5jdGlvbiBkS3QoKXtkS3Q9WixkRXQ9TnQoU3YsZWUsMTYyLDI1NiwwLDEpfWZ1bmN0aW9uIGdLdCgpe2dLdD1aLGJFdD1OdChBdixlZSwxODQsMjU2LDAsMSl9ZnVuY3Rpb24gcEt0KCl7cEt0PVosaEV0PU50KHVTLGVlLDE3MiwxMjgsMCwxKX1mdW5jdGlvbiBHd3QoKXtXZCh0aGlzLCExLCExLCExLCExKX1mdW5jdGlvbiBSbnQodCl7V20oKSx0aGlzLmE9KHduKCksbmV3IE8oTHIodCkpKX1mdW5jdGlvbiBWaih0KXtmb3IoTHIodCk7dC5PYigpOyl0LlBiKCksdC5RYigpfWZ1bmN0aW9uIEFlbih0KXt0LmEuY2QoKSx1KHQuYS5kZCgpLDE0KS5nYygpLHJidCgpfWZ1bmN0aW9uIFV3dCh0KXt0aGlzLmM9dCx0aGlzLmI9dGhpcy5jLmQudmMoKS5LYygpfWZ1bmN0aW9uIGJLdCh0KXt0aGlzLmM9dCx0aGlzLmE9bmV3IE14KHRoaXMuYy5hKX1mdW5jdGlvbiBFOSh0KXt0aGlzLmE9bmV3IEx4KHQuZ2MoKSksVWEodGhpcyx0KX1mdW5jdGlvbiBXd3QodCl7a3QuY2FsbCh0aGlzLG5ldyBhMiksVWEodGhpcyx0KX1mdW5jdGlvbiB3S3QodCxlKXtyZXR1cm4gdC5hKz1NaChlLDAsZS5sZW5ndGgpLHR9ZnVuY3Rpb24gTmUodCxlKXtyZXR1cm4gQW4oZSx0LmMubGVuZ3RoKSx0LmNbZV19ZnVuY3Rpb24gdkt0KHQsZSl7cmV0dXJuIEFuKGUsdC5hLmxlbmd0aCksdC5hW2VdfWZ1bmN0aW9uIFRuKHQsZSl7UWIoKSxYcnQuY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIExlbih0LGUpe3JldHVybiB2MihQYSh2Mih0LmEpLmEsZS5hKSl9ZnVuY3Rpb24gTWVuKHQsZSl7cmV0dXJuIE9uKHQpLElEKHQsKE9uKGUpLGUpKX1mdW5jdGlvbiBEZW4odCxlKXtyZXR1cm4gT24oZSksSUQoZSwoT24odCksdCkpfWZ1bmN0aW9uIEllbih0LGUpe3JldHVybiB0cyhlLDAsWXd0KGVbMF0sdjIoMSkpKX1mdW5jdGlvbiBZd3QodCxlKXtyZXR1cm4gTGVuKHUodCwxNjIpLHUoZSwxNjIpKX1mdW5jdGlvbiBtS3QodCl7cmV0dXJuIHQuYy11KE5lKHQuYSx0LmIpLDI4NykuYn1mdW5jdGlvbiB5S3QodCl7cmV0dXJuIHQucT90LnE6KHduKCksd24oKSx1MCl9ZnVuY3Rpb24geEt0KHQpe3JldHVybiB0LmUuSGQoKS5nYygpKnQuYy5IZCgpLmdjKCl9ZnVuY3Rpb24gT2VuKHQsZSxuKXtyZXR1cm4gcHUoZS5kW3QuZ10sbi5kW3QuZ10pfWZ1bmN0aW9uIFBlbih0LGUsbil7cmV0dXJuIHB1KHQuZFtlLnBdLHQuZFtuLnBdKX1mdW5jdGlvbiBGZW4odCxlLG4pe3JldHVybiBwdSh0LmRbZS5wXSx0LmRbbi5wXSl9ZnVuY3Rpb24gTmVuKHQsZSxuKXtyZXR1cm4gcHUodC5kW2UucF0sdC5kW24ucF0pfWZ1bmN0aW9uIEJlbih0LGUsbil7cmV0dXJuIHB1KHQuZFtlLnBdLHQuZFtuLnBdKX1mdW5jdGlvbiBLd3QodCxlLG4pe3JldHVybiBiLk1hdGgubWluKG4vdCwxL2UpfWZ1bmN0aW9uIGtLdCh0LGUpe3JldHVybiB0PzA6Yi5NYXRoLm1heCgwLGUtMSl9ZnVuY3Rpb24gUmVuKHQsZSl7dmFyIG47Zm9yKG49MDtuPGU7KytuKXRbbl09LTF9ZnVuY3Rpb24gRUt0KHQpe3ZhciBlO3JldHVybiBlPXdhZSh0KSxlP0VLdChlKTp0fWZ1bmN0aW9uIGplbih0LGUpe3JldHVybiB0LmE9PW51bGwmJkl1ZSh0KSx0LmFbZV19ZnVuY3Rpb24gRWwodCl7cmV0dXJuIHQuYz90LmMuZjp0LmUuYn1mdW5jdGlvbiBSdSh0KXtyZXR1cm4gdC5jP3QuYy5nOnQuZS5hfWZ1bmN0aW9uIEdqKHQpe1F3LmNhbGwodGhpcyx0LmdjKCkpLGlzKHRoaXMsdCl9ZnVuY3Rpb24gVWoodCxlKXtpaCgpLHZSLmNhbGwodGhpcyxlKSx0aGlzLmE9dH1mdW5jdGlvbiBUOSh0LGUsbil7dGhpcy5hPXQsQXMuY2FsbCh0aGlzLGUsbiwyKX1mdW5jdGlvbiBXaih0LGUsbixyKXtGd3QodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBZZCh0LGUpe2dpKCkseXcuY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIFRLdCh0KXt0aGlzLmI9bmV3IFppLHRoaXMuYT10LHRoaXMuYz0tMX1mdW5jdGlvbiBDS3QoKXt0aGlzLmQ9bmV3ICRlKDAsMCksdGhpcy5lPW5ldyBIc31mdW5jdGlvbiBfS3QodCl7ajJ0LmNhbGwodGhpcywwLDApLHRoaXMuYT10LHRoaXMuYj0wfWZ1bmN0aW9uIFNLdCh0KXt0aGlzLmE9dCx0aGlzLmM9bmV3IF9yLE11bih0aGlzKX1mdW5jdGlvbiBYd3QodCl7aWYodC5lLmMhPXQuYil0aHJvdyBpdChuZXcgcmgpfWZ1bmN0aW9uIFF3dCh0KXtpZih0LmMuZSE9dC5hKXRocm93IGl0KG5ldyByaCl9ZnVuY3Rpb24gQXIodCl7cmV0dXJuIEJvKHQpP3R8MDpSSHQodCl9ZnVuY3Rpb24gWWoodCxlKXtyZXR1cm4gZ2koKSxuZXcgbXZ0KHQsZSl9ZnVuY3Rpb24gam50KHQsZSl7cmV0dXJuIHQ9PW51bGw/ZT09bnVsbDpobih0LGUpfWZ1bmN0aW9uICRlbih0LGUpe3JldHVybiB0PT1udWxsP2U9PW51bGw6VnoodCxlKX1mdW5jdGlvbiB6eCh0LGUsbil7cmV0dXJuIHZmKHQuYSxlKSxwdnQodCxlLmcsbil9ZnVuY3Rpb24gJG50KHQsZSxuKXtCcmUoMCxlLHQubGVuZ3RoKSwkOCh0LDAsZSxuKX1mdW5jdGlvbiBIbSh0LGUsbil7S20oZSx0LmMubGVuZ3RoKSxYQyh0LmMsZSxuKX1mdW5jdGlvbiBBS3QodCxlLG4pe3ZhciByO2ZvcihyPTA7cjxlOysrcil0W3JdPW59ZnVuY3Rpb24gamkodCxlKXt2YXIgbjtyZXR1cm4gbj11bih0KSxPeXQobixlKSxufWZ1bmN0aW9uIHplbih0LGUpe3JldHVybiF0JiYodD1bXSksdFt0Lmxlbmd0aF09ZSx0fWZ1bmN0aW9uIHFlbih0LGUpe3JldHVybiB0LmEuZ2V0KGUpIT09dm9pZCAwfWZ1bmN0aW9uIExLdCh0LGUpe3JldHVybiBiY24obmV3IGZvLG5ldyBZdCh0KSxlKX1mdW5jdGlvbiBIZW4odCl7cmV0dXJuIHQ9PW51bGw/aVY6bmV3IENSKE9uKHQpKX1mdW5jdGlvbiB6bnQodCxlKXtyZXR1cm4gX3QoZSwyMikmJk51KHQsdShlLDIyKSl9ZnVuY3Rpb24gTUt0KHQsZSl7cmV0dXJuIF90KGUsMjIpJiZVb24odCx1KGUsMjIpKX1mdW5jdGlvbiBad3QodCl7cmV0dXJuIHVsKHQsMjYpKklfK3VsKHQsMjcpKk9ffWZ1bmN0aW9uIEp3dCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5pbT09PUV0fWZ1bmN0aW9uIEtqKHQpe3QuYj9Laih0LmIpOnQuZC5kYygpJiZ0LmYuYy5CYyh0LmUpfWZ1bmN0aW9uIHFudCh0LGUpe0xpKHQuYyxlKSx0LmIuYys9ZS5hLHQuYi5kKz1lLmJ9ZnVuY3Rpb24gVmVuKHQsZSl7cW50KHQsaWEobmV3ICRlKGUuYSxlLmIpLHQuYykpfWZ1bmN0aW9uIEhudCh0LGUpe3RoaXMuYj1uZXcgWmksdGhpcy5hPXQsdGhpcy5jPWV9ZnVuY3Rpb24gREt0KCl7dGhpcy5iPW5ldyBTYyx0aGlzLmM9bmV3IGNRdCh0aGlzKX1mdW5jdGlvbiB0dnQoKXt0aGlzLmQ9bmV3IER1LHRoaXMuZT1uZXcgb1F0KHRoaXMpfWZ1bmN0aW9uIGV2dCgpe1V2dCgpLHRoaXMuZj1uZXcgWmksdGhpcy5lPW5ldyBaaX1mdW5jdGlvbiBJS3QoKXtGbCgpLHRoaXMuaz1uZXcgX3IsdGhpcy5kPW5ldyBIc31mdW5jdGlvbiBWbnQoKXtWbnQ9WixWNGU9bmV3IGVvKCh1aSgpLGRsKSwwKX1mdW5jdGlvbiBPS3QoKXtPS3Q9WixMZ2U9bmV3IF9LdChOdChRbixEZSwxLDAsNSwxKSl9ZnVuY3Rpb24gR2VuKHQsZSxuKXtDY2Uobix0LDEpLGxlKGUsbmV3IHJHdChuLHQpKX1mdW5jdGlvbiBVZW4odCxlLG4pe2hfKG4sdCwxKSxsZShlLG5ldyBsR3Qobix0KSl9ZnVuY3Rpb24gV2VuKHQsZSxuKXtyZXR1cm4gRnModCxuZXcgRHgoZS5hLG4uYSkpfWZ1bmN0aW9uIFllbih0LGUsbil7cmV0dXJuLXB1KHQuZltlLnBdLHQuZltuLnBdKX1mdW5jdGlvbiBYaih0LGUsbil7dmFyIHI7dCYmKHI9dC5pLHIuYz1lLHIuYj1uKX1mdW5jdGlvbiBRaih0LGUsbil7dmFyIHI7dCYmKHI9dC5pLHIuZD1lLHIuYT1uKX1mdW5jdGlvbiBLdSh0LGUsbil7cmV0dXJuIHQuYT0tMSxSMnQodCxlLmcrMSxuKSx0fWZ1bmN0aW9uIG52dCh0LGUsbil7cmV0dXJuIG49SGwodCx1KGUsNDkpLDcsbiksbn1mdW5jdGlvbiBydnQodCxlLG4pe3JldHVybiBuPUhsKHQsdShlLDQ5KSwzLG4pLG59ZnVuY3Rpb24gUEt0KHQsZSxuKXt0aGlzLmE9dCxrai5jYWxsKHRoaXMsZSxuLDIyKX1mdW5jdGlvbiBGS3QodCxlLG4pe3RoaXMuYT10LGtqLmNhbGwodGhpcyxlLG4sMTQpfWZ1bmN0aW9uIE5LdCh0LGUsbixyKXtpaCgpLGJadC5jYWxsKHRoaXMsdCxlLG4scil9ZnVuY3Rpb24gQkt0KHQsZSxuLHIpe2loKCksYlp0LmNhbGwodGhpcyx0LGUsbixyKX1mdW5jdGlvbiBLZW4odCxlKXtlLkJiJmRjJiYhdC5hLm8mJih0LmEubz1lKX1mdW5jdGlvbiBSS3QodCl7cmV0dXJuIHQhPW51bGwmJlpudCh0KSYmdC5pbSE9PUV0fWZ1bmN0aW9uIGl2dCh0KXtyZXR1cm4hQXJyYXkuaXNBcnJheSh0KSYmdC5pbT09PUV0fWZ1bmN0aW9uIFhlbih0KXtyZXR1cm4gX3QodCwxNSk/dSh0LDE1KS5ZYygpOnQuS2MoKX1mdW5jdGlvbiBzdnQodCl7cmV0dXJuIHQuUWMoTnQoUW4sRGUsMSx0LmdjKCksNSwxKSl9ZnVuY3Rpb24gQzkodCxlKXtyZXR1cm4gbGZuKFREKHQsZSkpP2UuUWgoKTpudWxsfWZ1bmN0aW9uIGF2dCh0KXt0P1gzdCh0LChHZCgpLHZFdCkpOkdkKCl9ZnVuY3Rpb24gYXIodCl7dGhpcy5hPShPS3QoKSxMZ2UpLHRoaXMuZD11KExyKHQpLDQ3KX1mdW5jdGlvbiBvdnQodCxlLG4scil7dGhpcy5hPXQscSQuY2FsbCh0aGlzLHQsZSxuLHIpfWZ1bmN0aW9uIGUyKHQpe0ZwKCksdGhpcy5hPTAsdGhpcy5iPXQtMSx0aGlzLmM9MX1mdW5jdGlvbiBqS3QodCl7eWoodGhpcyksdGhpcy5nPXQsZCQodGhpcyksdGhpcy5fZCgpfWZ1bmN0aW9uIFJ3KHQpe3JldHVybiB0LmM/dC5jOnQuYz10LklkKCl9ZnVuY3Rpb24gR250KHQpe3JldHVybiB0LmQ/dC5kOnQuZD10LkpkKCl9ZnVuY3Rpb24gY3Z0KHQpe3ZhciBlO3JldHVybiBlPXQuYyxlfHwodC5jPXQuRGQoKSl9ZnVuY3Rpb24gJEt0KHQpe3ZhciBlO3JldHVybiBlPXQuZixlfHwodC5mPXQuRGMoKSl9ZnVuY3Rpb24gcXgodCl7dmFyIGU7cmV0dXJuIGU9dC5pLGV8fCh0Lmk9dC5iYygpKX1mdW5jdGlvbiB6S3QodCl7cmV0dXJuIGdpKCksbmV3IGtydCgxMCx0LDApfWZ1bmN0aW9uIF85KHQpe3JldHVybiBCbyh0KT8iIit0Ol91ZSh0KX1mdW5jdGlvbiBaaih0KXtpZih0LmUuaiE9dC5kKXRocm93IGl0KG5ldyByaCl9ZnVuY3Rpb24gRjAodCxlKXtyZXR1cm4gS3AoV2FlKEJvKHQpP0xoKHQpOnQsZSkpfWZ1bmN0aW9uICRwKHQsZSl7cmV0dXJuIEtwKHY1dChCbyh0KT9MaCh0KTp0LGUpKX1mdW5jdGlvbiBWbSh0LGUpe3JldHVybiBLcChaZ24oQm8odCk/TGgodCk6dCxlKSl9ZnVuY3Rpb24gUWVuKHQsZSl7cmV0dXJuIExaZSgoT24odCksdCksKE9uKGUpLGUpKX1mdW5jdGlvbiBVbnQodCxlKXtyZXR1cm4gTXMoKE9uKHQpLHQpLChPbihlKSxlKSl9ZnVuY3Rpb24gcUt0KHQsZSl7cmV0dXJuIExyKGUpLHQuYS5BZChlKSYmIXQuYi5BZChlKX1mdW5jdGlvbiBaZW4odCxlKXtyZXR1cm4gaXUodC5sJmUubCx0Lm0mZS5tLHQuaCZlLmgpfWZ1bmN0aW9uIEplbih0LGUpe3JldHVybiBpdSh0Lmx8ZS5sLHQubXxlLm0sdC5ofGUuaCl9ZnVuY3Rpb24gdG5uKHQsZSl7cmV0dXJuIGl1KHQubF5lLmwsdC5tXmUubSx0LmheZS5oKX1mdW5jdGlvbiBKaih0LGUpe3JldHVybiBXRCh0LChPbihlKSxuZXcgUHQoZSkpKX1mdW5jdGlvbiB0JCh0LGUpe3JldHVybiBXRCh0LChPbihlKSxuZXcgJHQoZSkpKX1mdW5jdGlvbiBIS3QodCl7cmV0dXJuIGp1KCksdSh0LDExKS5lLmMubGVuZ3RoIT0wfWZ1bmN0aW9uIFZLdCh0KXtyZXR1cm4ganUoKSx1KHQsMTEpLmcuYy5sZW5ndGghPTB9ZnVuY3Rpb24gZW5uKHQsZSl7cmV0dXJuIHI2KCksTXMoZS5hLm8uYSx0LmEuby5hKX1mdW5jdGlvbiBHS3QodCxlLG4pe3JldHVybiBSNW4odCx1KGUsMTEpLHUobiwxMSkpfWZ1bmN0aW9uIG5ubih0KXtyZXR1cm4gdC5lP0NtdCh0LmUpOm51bGx9ZnVuY3Rpb24gdXZ0KHQpe3QuZHx8KHQuZD10LmIuS2MoKSx0LmM9dC5iLmdjKCkpfWZ1bmN0aW9uIHJubih0LGUsbil7dC5hLk1iKG4pJiYodC5iPSEwLGUudGQobikpfWZ1bmN0aW9uIFQ4KHQsZSl7aWYodDwwfHx0Pj1lKXRocm93IGl0KG5ldyBPcHQpfWZ1bmN0aW9uIGlubih0LGUsbil7cmV0dXJuIHRzKGUsMCxZd3QoZVswXSxuWzBdKSksZX1mdW5jdGlvbiBzbm4odCxlLG4pe2UuWWUobixYdCh5ZSh0cih0LmIsbikpKSp0LmEpfWZ1bmN0aW9uIFVLdCh0LGUsbil7cmV0dXJuIGs0KCksUTgodCxlKSYmUTgodCxuKX1mdW5jdGlvbiBTOSh0KXtyZXR1cm4gWnUoKSwhdC5IYyhzZykmJiF0LkhjKENiKX1mdW5jdGlvbiBlJCh0KXtyZXR1cm4gbmV3ICRlKHQuYyt0LmIvMix0LmQrdC5hLzIpfWZ1bmN0aW9uIFdudCh0LGUpe3JldHVybiBlLmtoKCk/WnAodC5iLHUoZSw0OSkpOmV9ZnVuY3Rpb24gbHZ0KHQsZSl7dGhpcy5lPXQsdGhpcy5kPWUmNjQ/ZXxtZDplfWZ1bmN0aW9uIFdLdCh0LGUpe3RoaXMuYz0wLHRoaXMuZD10LHRoaXMuYj1lfDY0fG1kfWZ1bmN0aW9uIG4kKHQpe3RoaXMuYj1uZXcgWGMoMTEpLHRoaXMuYT0oWjMoKSx0KX1mdW5jdGlvbiBZbnQodCl7dGhpcy5iPW51bGwsdGhpcy5hPShaMygpLHR8fF9FdCl9ZnVuY3Rpb24gWUt0KHQpe3RoaXMuYT13c2UodC5hKSx0aGlzLmI9bmV3IEJ1KHQuYil9ZnVuY3Rpb24gS0t0KHQpe3RoaXMuYj10LE54LmNhbGwodGhpcyx0KSxaVXQodGhpcyl9ZnVuY3Rpb24gWEt0KHQpe3RoaXMuYj10LCRNLmNhbGwodGhpcyx0KSxKVXQodGhpcyl9ZnVuY3Rpb24gR20odCxlLG4pe3RoaXMuYT10LFJ4LmNhbGwodGhpcyxlLG4sNSw2KX1mdW5jdGlvbiBodnQodCxlLG4scil7dGhpcy5iPXQsQXMuY2FsbCh0aGlzLGUsbixyKX1mdW5jdGlvbiBKcyh0LGUsbixyLHMpe0pydC5jYWxsKHRoaXMsdCxlLG4scixzLC0xKX1mdW5jdGlvbiBBOSh0LGUsbixyLHMpe21ELmNhbGwodGhpcyx0LGUsbixyLHMsLTEpfWZ1bmN0aW9uIGZlKHQsZSxuLHIpe0FzLmNhbGwodGhpcyx0LGUsbiksdGhpcy5iPXJ9ZnVuY3Rpb24gciQodCxlLG4scil7Wk0uY2FsbCh0aGlzLHQsZSxuKSx0aGlzLmI9cn1mdW5jdGlvbiBRS3QodCl7dFV0LmNhbGwodGhpcyx0LCExKSx0aGlzLmE9ITF9ZnVuY3Rpb24gWkt0KHQsZSl7dGhpcy5iPXQsd3R0LmNhbGwodGhpcyx0LmIpLHRoaXMuYT1lfWZ1bmN0aW9uIEpLdCh0LGUpe1dtKCksY1hlLmNhbGwodGhpcyx0LER6KG5ldyB5bChlKSkpfWZ1bmN0aW9uIGkkKHQsZSl7cmV0dXJuIGdpKCksbmV3IEN2dCh0LGUsMCl9ZnVuY3Rpb24gS250KHQsZSl7cmV0dXJuIGdpKCksbmV3IEN2dCg2LHQsZSl9ZnVuY3Rpb24gYW5uKHQsZSl7cmV0dXJuIGhuKHQuc3Vic3RyKDAsZS5sZW5ndGgpLGUpfWZ1bmN0aW9uIFRsKHQsZSl7cmV0dXJuIHJhKGUpP3dydCh0LGUpOiEhTG8odC5mLGUpfWZ1bmN0aW9uIGJhKHQsZSl7Zm9yKE9uKGUpO3QuT2IoKTspZS50ZCh0LlBiKCkpfWZ1bmN0aW9uIFgzKHQsZSxuKXtyYigpLHRoaXMuZT10LHRoaXMuZD1lLHRoaXMuYT1ufWZ1bmN0aW9uIE9nKHQsZSxuLHIpe3ZhciBzO3M9dC5pLHMuaT1lLHMuYT1uLHMuYj1yfWZ1bmN0aW9uIGZ2dCh0KXt2YXIgZTtmb3IoZT10O2UuZjspZT1lLmY7cmV0dXJuIGV9ZnVuY3Rpb24gSHgodCl7dmFyIGU7cmV0dXJuIGU9UTkodCksWm4oZSE9bnVsbCksZX1mdW5jdGlvbiBvbm4odCl7dmFyIGU7cmV0dXJuIGU9VWxuKHQpLFpuKGUhPW51bGwpLGV9ZnVuY3Rpb24gQzgodCxlKXt2YXIgbjtyZXR1cm4gbj10LmEuZ2MoKSxFbXQoZSxuKSxuLWV9ZnVuY3Rpb24gZHZ0KHQsZSl7dmFyIG47Zm9yKG49MDtuPGU7KytuKXRbbl09ITF9ZnVuY3Rpb24gY25uKHQsZSxuLHIpe3ZhciBzO2ZvcihzPWU7czxuOysrcyl0W3NdPXJ9ZnVuY3Rpb24ganQodCxlLG4scil7QnJlKGUsbix0Lmxlbmd0aCksY25uKHQsZSxuLHIpfWZ1bmN0aW9uIHVubih0LGUsbil7VDgobix0LmEuYy5sZW5ndGgpLGNoKHQuYSxuLGUpfWZ1bmN0aW9uIGd2dCh0LGUsbil7dGhpcy5jPXQsdGhpcy5hPWUsd24oKSx0aGlzLmI9bn1mdW5jdGlvbiBwdnQodCxlLG4pe3ZhciByO3JldHVybiByPXQuYltlXSx0LmJbZV09bixyfWZ1bmN0aW9uIEZzKHQsZSl7dmFyIG47cmV0dXJuIG49dC5hLnpjKGUsdCksbj09bnVsbH1mdW5jdGlvbiBsbm4odCl7aWYoIXQpdGhyb3cgaXQobmV3IGxjKTtyZXR1cm4gdC5kfWZ1bmN0aW9uIGJ2dCh0LGUpe2lmKHQ9PW51bGwpdGhyb3cgaXQobmV3IFN4KGUpKX1mdW5jdGlvbiB3dnQodCxlKXtyZXR1cm4gZT9VYSh0LGUpOiExfWZ1bmN0aW9uIEtkKHQsZSxuKXtyZXR1cm4gaWxuKHQsZS5nLG4pLHZmKHQuYyxlKSx0fWZ1bmN0aW9uIGhubih0KXtyZXR1cm4gXzQodCwoYW8oKSx6aCkpLHQuZD0hMCx0fWZ1bmN0aW9uIFhudCh0KXtyZXR1cm4hdC5qJiZqdHQodCxNbW4odC5nLHQuYikpLHQuan1mdW5jdGlvbiBMOSh0KXtSbSh0LmIhPS0xKSxGZyh0LmMsdC5hPXQuYiksdC5iPS0xfWZ1bmN0aW9uIFh1KHQpe3QuZj1uZXcga1V0KHQpLHQuZz1uZXcgRVV0KHQpLHckKHQpfWZ1bmN0aW9uIFFudCh0KXtyZXR1cm4gbmV3IFRuKG51bGwsYm5uKHQsdC5sZW5ndGgpKX1mdW5jdGlvbiB6cCh0KXtyZXR1cm4gbmV3IGFyKG5ldyBDMnQodC5hLmxlbmd0aCx0LmEpKX1mdW5jdGlvbiBmbm4odCl7cmV0dXJuIGl1KH50LmwmaGwsfnQubSZobCx+dC5oJlowKX1mdW5jdGlvbiBabnQodCl7cmV0dXJuIHR5cGVvZiB0PT09TUl8fHR5cGVvZiB0PT09R2F0fWZ1bmN0aW9uIGRubih0KXtyZXR1cm4gdD09YXM/b086dD09Q3M/Ii1JTkYiOiIiK3R9ZnVuY3Rpb24gZ25uKHQpe3JldHVybiB0PT1hcz9vTzp0PT1Dcz8iLUlORiI6IiIrdH1mdW5jdGlvbiBwbm4odCxlKXtyZXR1cm4gdD4wP2IuTWF0aC5sb2codC9lKTotMTAwfWZ1bmN0aW9uIHRYdCh0LGUpe3JldHVybiB5Yyh0LGUpPDA/LTE6eWModCxlKT4wPzE6MH1mdW5jdGlvbiB2dnQodCxlLG4pe3JldHVybiBHbGUodCx1KGUsNDYpLHUobiwxNjcpKX1mdW5jdGlvbiBlWHQodCxlKXtyZXR1cm4gdShjdnQoUncodC5hKSkuWGIoZSksNDIpLmNkKCl9ZnVuY3Rpb24gYm5uKHQsZSl7cmV0dXJuIGpvbihlLHQubGVuZ3RoKSxuZXcgaUt0KHQsZSl9ZnVuY3Rpb24gSm50KHQsZSl7dGhpcy5kPXQsbnIuY2FsbCh0aGlzLHQpLHRoaXMuZT1lfWZ1bmN0aW9uIGp3KHQpe3RoaXMuZD0oT24odCksdCksdGhpcy5hPTAsdGhpcy5jPXFxfWZ1bmN0aW9uIG12dCh0LGUpe3l3LmNhbGwodGhpcywxKSx0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBuWHQodCxlKXtyZXR1cm4gdC5jP25YdCh0LmMsZSk6bGUodC5iLGUpLHR9ZnVuY3Rpb24gd25uKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1KbSh0LGUpLEJydCh0LGUsbikscn1mdW5jdGlvbiB5dnQodCxlKXt2YXIgbjtyZXR1cm4gbj10LnNsaWNlKDAsZSksQm10KG4sdCl9ZnVuY3Rpb24gclh0KHQsZSxuKXt2YXIgcjtmb3Iocj0wO3I8ZTsrK3IpdHModCxyLG4pfWZ1bmN0aW9uIGlYdCh0LGUsbixyLHMpe2Zvcig7ZTxuOylyW3MrK109d2EodCxlKyspfWZ1bmN0aW9uIHZubih0LGUpe3JldHVybiBNcyh0LmMuYyt0LmMuYixlLmMuYytlLmMuYil9ZnVuY3Rpb24gdEQodCxlKXtyZXR1cm4gX3oodC5hLGUsKE5uKCksRjIpKT09bnVsbH1mdW5jdGlvbiBlRCh0LGUpe2ZzKHQuZCxlLHQuYi5iLHQuYiksKyt0LmEsdC5jPW51bGx9ZnVuY3Rpb24gbkQodCxlKXtZVXQodCxfdChlLDE1Myk/ZTp1KGUsMTkzNykuZ2woKSl9ZnVuY3Rpb24gJHcodCxlKXtscyh3dSh0Lk9jKCksbmV3IFVUKSxuZXcgV3R0KGUpKX1mdW5jdGlvbiBfOCh0LGUsbixyLHMpe05zdCh0LHUoQWkoZS5rLG4pLDE1KSxuLHIscyl9ZnVuY3Rpb24gcyQodCl7dC5zPU5hTix0LmM9TmFOLGhjZSh0LHQuZSksaGNlKHQsdC5qKX1mdW5jdGlvbiBzWHQodCl7dC5hPW51bGwsdC5lPW51bGwsWHUodC5iKSx0LmQ9MCwrK3QuY31mdW5jdGlvbiB0cnQodCl7cmV0dXJuIGIuTWF0aC5hYnModC5kLmUtdC5lLmUpLXQuYX1mdW5jdGlvbiBtbm4odCxlLG4pe3JldHVybiB1KHQuYy5fYyhlLHUobiwxMzMpKSw0Mil9ZnVuY3Rpb24geW5uKCl7cmV0dXJuIFRSKCksbHQoY3QoTWdlLDEpLG9lLDUzOCwwLFtNdXRdKX1mdW5jdGlvbiB4bm4odCl7cmV0dXJuIFV4KCksZXMoZTAodCkpPT1lcyh0Yih0KSl9ZnVuY3Rpb24gYVh0KHQpe293dC5jYWxsKHRoaXMpLHRoaXMuYT10LGxlKHQuYSx0aGlzKX1mdW5jdGlvbiBlcnQodCxlKXt0aGlzLmQ9V2xuKHQpLHRoaXMuYz1lLHRoaXMuYT0uNSplfWZ1bmN0aW9uIG9YdCgpe2EyLmNhbGwodGhpcyksdGhpcy5hPSEwLHRoaXMuYj0hMH1mdW5jdGlvbiBKbih0KXtyZXR1cm4odC5pPT1udWxsJiZ2ZCh0KSx0LmkpLmxlbmd0aH1mdW5jdGlvbiBjWHQodCl7cmV0dXJuIF90KHQsOTkpJiYodSh0LDE4KS5CYiZkYykhPTB9ZnVuY3Rpb24ga25uKHQsZSl7Kyt0LmosUnN0KHQsdC5pLGUpLGxibih0LHUoZSwzMzIpKX1mdW5jdGlvbiBucnQodCxlKXtyZXR1cm4gZT10Lm5rKG51bGwsZSksTGFlKHQsbnVsbCxlKX1mdW5jdGlvbiBpcyh0LGUpe3JldHVybiB0LmhpKCkmJihlPURRdCh0LGUpKSx0LldoKGUpfWZ1bmN0aW9uIEYodCxlLG4pe3ZhciByO3JldHVybiByPXJydCh0LGUpLFFlZShuLHIpLHJ9ZnVuY3Rpb24gcnJ0KHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IEx5dCxuLmo9dCxuLmQ9ZSxufWZ1bmN0aW9uIExyKHQpe2lmKHQ9PW51bGwpdGhyb3cgaXQobmV3IElDKTtyZXR1cm4gdH1mdW5jdGlvbiBpcnQodCl7dmFyIGU7cmV0dXJuIGU9dC5qLGV8fCh0Lmo9bmV3IHh0dCh0KSl9ZnVuY3Rpb24gdVh0KHQpe3ZhciBlO3JldHVybiBlPXQuZixlfHwodC5mPW5ldyBUMnQodCkpfWZ1bmN0aW9uIHh2dCh0KXt2YXIgZTtyZXR1cm4gZT10LmssZXx8KHQuaz1uZXcgSTModCkpfWZ1bmN0aW9uIGEkKHQpe3ZhciBlO3JldHVybiBlPXQuayxlfHwodC5rPW5ldyBJMyh0KSl9ZnVuY3Rpb24gTTkodCl7dmFyIGU7cmV0dXJuIGU9dC5nLGV8fCh0Lmc9bmV3IG5NKHQpKX1mdW5jdGlvbiBFbm4odCl7dmFyIGU7cmV0dXJuIGU9dC5pLGV8fCh0Lmk9bmV3IGR0dCh0KSl9ZnVuY3Rpb24gc3J0KHQpe3ZhciBlO3JldHVybiBlPXQuZCxlfHwodC5kPW5ldyBweCh0KSl9ZnVuY3Rpb24gbFh0KHQpe3JldHVybiBMcih0KSxfdCh0LDQ3NSk/dSh0LDQ3NSk6JG8odCl9ZnVuY3Rpb24ga3Z0KHQpe3JldHVybiBfdCh0LDYwNyk/dDpuZXcgbVF0KHQpfWZ1bmN0aW9uIGhYdCh0LGUpe3JldHVybiBmRChlLHQuYy5iLmMuZ2MoKSksbmV3IHVWdCh0LGUpfWZ1bmN0aW9uIGZYdCh0LGUsbil7cmV0dXJuIGdpKCksbmV3IG9adCh0LGUsbil9ZnVuY3Rpb24gdHModCxlLG4pe3JldHVybiByWmUobj09bnVsbHx8ZnluKHQsbikpLHRbZV09bn1mdW5jdGlvbiBFdnQodCxlKXt2YXIgbjtyZXR1cm4gbj10LmEuZ2MoKSxmRChlLG4pLG4tMS1lfWZ1bmN0aW9uIFM4KHQsZSl7cmV0dXJuIHQuYSs9U3RyaW5nLmZyb21DaGFyQ29kZShlKSx0fWZ1bmN0aW9uIHFwKHQsZSl7cmV0dXJuIHQuYSs9U3RyaW5nLmZyb21DaGFyQ29kZShlKSx0fWZ1bmN0aW9uIGFydCh0LGUpe2ZvcihPbihlKTt0LmM8dC5kOyl0LnplKGUsdC5jKyspfWZ1bmN0aW9uIHRyKHQsZSl7cmV0dXJuIHJhKGUpP05jKHQsZSk6ZWMoTG8odC5mLGUpKX1mdW5jdGlvbiBUbm4odCxlKXtyZXR1cm4gVXgoKSx0PT1lMChlKT90YihlKTplMChlKX1mdW5jdGlvbiBDbm4odCxlKXtWeCh0LG5ldyBVbShlLmYhPW51bGw/ZS5mOiIiK2UuZykpfWZ1bmN0aW9uIF9ubih0LGUpe1Z4KHQsbmV3IFVtKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSl9ZnVuY3Rpb24gZFh0KHQpe3RoaXMuYj1uZXcgaGUsdGhpcy5hPW5ldyBoZSx0aGlzLmM9dH1mdW5jdGlvbiBTaCh0KXt0aGlzLmM9bmV3IENhLHRoaXMuYT1uZXcgaGUsdGhpcy5iPXR9ZnVuY3Rpb24gZ1h0KHQpe293dC5jYWxsKHRoaXMpLHRoaXMuYT1uZXcgQ2EsdGhpcy5jPXR9ZnVuY3Rpb24gVW0odCl7aWYodD09bnVsbCl0aHJvdyBpdChuZXcgSUMpO3RoaXMuYT10fWZ1bmN0aW9uIHBYdCh0KXtJcHQoKSx0aGlzLmI9bmV3IGhlLHRoaXMuYT10LEU0bih0aGlzLHQpfWZ1bmN0aW9uIGJYdCh0KXt0aGlzLmM9dCx0aGlzLmE9bmV3IFppLHRoaXMuYj1uZXcgWml9ZnVuY3Rpb24gd1h0KCl7d1h0PVosRmdlPW5ldyBYayghMSksTmdlPW5ldyBYayghMCl9ZnVuY3Rpb24gV20oKXtXbT1aLGdkKCksQXV0PW5ldyB2cnQoKHduKCksd24oKSxpbykpfWZ1bmN0aW9uIG9ydCgpe29ydD1aLGdkKCksZUV0PW5ldyBTYnQoKHduKCksd24oKSxyVikpfWZ1bmN0aW9uIEhwKCl7SHA9WixMbj11Ym4oKSxkbigpLHIzJiZiZG4oKX1mdW5jdGlvbiBTbm4odCxlKXtyZXR1cm4gcjYoKSx1KHBvKHQsZS5kKSwxNSkuRmMoZSl9ZnVuY3Rpb24gQW5uKHQsZSxuLHIpe3JldHVybiBuPT0wfHwobi1yKS9uPHQuZXx8ZT49dC5nfWZ1bmN0aW9uIGNydCh0LGUsbil7dmFyIHI7cmV0dXJuIHI9bWl0KHQsZSxuKSxZNXQodCxyKX1mdW5jdGlvbiBWeCh0LGUpe3ZhciBuO249dC5hLmxlbmd0aCxKbSh0LG4pLEJydCh0LG4sZSl9ZnVuY3Rpb24gdlh0KHQsZSl7dmFyIG47bj1jb25zb2xlW3RdLG4uY2FsbChjb25zb2xlLGUpfWZ1bmN0aW9uIG1YdCh0LGUpe3ZhciBuOysrdC5qLG49dC5WaSgpLHQuSWkodC5vaShuLGUpKX1mdW5jdGlvbiBMbm4odCxlLG4pe3UoZS5iLDY1KSx4dShlLmEsbmV3IFN3dCh0LG4sZSkpfWZ1bmN0aW9uIFR2dCh0LGUsbil7dlIuY2FsbCh0aGlzLGUpLHRoaXMuYT10LHRoaXMuYj1ufWZ1bmN0aW9uIEN2dCh0LGUsbil7eXcuY2FsbCh0aGlzLHQpLHRoaXMuYT1lLHRoaXMuYj1ufWZ1bmN0aW9uIF92dCh0LGUsbil7dGhpcy5hPXQsQ3B0LmNhbGwodGhpcyxlKSx0aGlzLmI9bn1mdW5jdGlvbiB5WHQodCxlLG4pe3RoaXMuYT10LG5tdC5jYWxsKHRoaXMsOCxlLG51bGwsbil9ZnVuY3Rpb24gTW5uKHQpe3RoaXMuYT0oT24oWXIpLFlyKSx0aGlzLmI9dCxuZXcgVXB0fWZ1bmN0aW9uIHhYdCh0KXt0aGlzLmM9dCx0aGlzLmI9dGhpcy5jLmEsdGhpcy5hPXRoaXMuYy5lfWZ1bmN0aW9uIFN2dCh0KXt0aGlzLmM9dCx0aGlzLmI9dC5hLmQuYSxZMnQodC5hLmUsdGhpcyl9ZnVuY3Rpb24gQ2wodCl7Um0odC5jIT0tMSksdC5kLiRjKHQuYyksdC5iPXQuYyx0LmM9LTF9ZnVuY3Rpb24gRDkodCl7cmV0dXJuIGIuTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYil9ZnVuY3Rpb24gencodCxlKXtyZXR1cm4gVDgoZSx0LmEuYy5sZW5ndGgpLE5lKHQuYSxlKX1mdW5jdGlvbiBwZCh0LGUpe3JldHVybiBWdCh0KT09PVZ0KGUpfHx0IT1udWxsJiZ5aSh0LGUpfWZ1bmN0aW9uIERubih0KXtyZXR1cm4gMD49dD9uZXcgbWJ0Ondjbih0LTEpfWZ1bmN0aW9uIElubih0KXtyZXR1cm4gczM/d3J0KHMzLHQpOiExfWZ1bmN0aW9uIGtYdCh0KXtyZXR1cm4gdD90LmRjKCk6IXQuS2MoKS5PYigpfWZ1bmN0aW9uIE5hKHQpe3JldHVybiF0LmEmJnQuYz90LmMuYjp0LmF9ZnVuY3Rpb24gT25uKHQpe3JldHVybiF0LmEmJih0LmE9bmV3IEFzKF9iLHQsNCkpLHQuYX1mdW5jdGlvbiBxdyh0KXtyZXR1cm4hdC5kJiYodC5kPW5ldyBBcyhobyx0LDEpKSx0LmR9ZnVuY3Rpb24gT24odCl7aWYodD09bnVsbCl0aHJvdyBpdChuZXcgSUMpO3JldHVybiB0fWZ1bmN0aW9uIEk5KHQpe3QuYz90LmMuSGUoKToodC5kPSEwLFJ3bih0KSl9ZnVuY3Rpb24gVnAodCl7dC5jP1ZwKHQuYyk6KHcyKHQpLHQuZD0hMCl9ZnVuY3Rpb24gRVh0KHQpe0R2dCh0LmEpLHQuYj1OdChRbixEZSwxLHQuYi5sZW5ndGgsNSwxKX1mdW5jdGlvbiBQbm4odCxlKXtyZXR1cm4gcHUoZS5qLmMubGVuZ3RoLHQuai5jLmxlbmd0aCl9ZnVuY3Rpb24gRm5uKHQsZSl7dC5jPDB8fHQuYi5iPHQuYz9aYih0LmIsZSk6dC5hLl9lKGUpfWZ1bmN0aW9uIE5ubih0LGUpe3ZhciBuO249dC5ZZyhlKSxuPj0wP3QuQmgobik6aTV0KHQsZSl9ZnVuY3Rpb24gVFh0KHQpe3ZhciBlLG47cmV0dXJuIGU9dC5jLmkuYyxuPXQuZC5pLmMsZT09bn1mdW5jdGlvbiBCbm4odCl7aWYodC5wIT00KXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIHQuZX1mdW5jdGlvbiBSbm4odCl7aWYodC5wIT0zKXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIHQuZX1mdW5jdGlvbiBqbm4odCl7aWYodC5wIT02KXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIHQuZn1mdW5jdGlvbiAkbm4odCl7aWYodC5wIT02KXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIHQua31mdW5jdGlvbiB6bm4odCl7aWYodC5wIT0zKXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIHQuan1mdW5jdGlvbiBxbm4odCl7aWYodC5wIT00KXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIHQuan1mdW5jdGlvbiBBdnQodCl7cmV0dXJuIXQuYiYmKHQuYj1uZXcgbVIobmV3IGFldCkpLHQuYn1mdW5jdGlvbiBIdyh0KXtyZXR1cm4gdC5jPT0tMiYmSmsodCxhZ24odC5nLHQuYikpLHQuY31mdW5jdGlvbiBBOCh0LGUpe3ZhciBuO3JldHVybiBuPXJydCgiIix0KSxuLm49ZSxuLmk9MSxufWZ1bmN0aW9uIEhubih0LGUpe3FudCh1KGUuYiw2NSksdCkseHUoZS5hLG5ldyBKcih0KSl9ZnVuY3Rpb24gVm5uKHQsZSl7RHIoKCF0LmEmJih0LmE9bmV3IEdNKHQsdCkpLHQuYSksZSl9ZnVuY3Rpb24gQ1h0KHQsZSl7dGhpcy5iPXQsSm50LmNhbGwodGhpcyx0LGUpLFpVdCh0aGlzKX1mdW5jdGlvbiBfWHQodCxlKXt0aGlzLmI9dCx3d3QuY2FsbCh0aGlzLHQsZSksSlV0KHRoaXMpfWZ1bmN0aW9uIEx2dCh0LGUsbixyKXtMdy5jYWxsKHRoaXMsdCxlKSx0aGlzLmQ9bix0aGlzLmE9cn1mdW5jdGlvbiBvJCh0LGUsbixyKXtMdy5jYWxsKHRoaXMsdCxuKSx0aGlzLmE9ZSx0aGlzLmY9cn1mdW5jdGlvbiBTWHQodCxlKXtUUWUuY2FsbCh0aGlzLHZjbihMcih0KSxMcihlKSkpLHRoaXMuYT1lfWZ1bmN0aW9uIEFYdCgpe040dC5jYWxsKHRoaXMsTzIsKERIdCgpLEw1ZSkpLGY0bih0aGlzKX1mdW5jdGlvbiBMWHQoKXtONHQuY2FsbCh0aGlzLEJoLChjOCgpLGFMdCkpLHgzbih0aGlzKX1mdW5jdGlvbiBNWHQoKXtWci5jYWxsKHRoaXMsIkRFTEFVTkFZX1RSSUFOR1VMQVRJT04iLDApfWZ1bmN0aW9uIEdubih0KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQpfWZ1bmN0aW9uIGtpKHQsZSxuKXtyZXR1cm4gcmEoZSk/a28odCxlLG4pOmF1KHQuZixlLG4pfWZ1bmN0aW9uIE12dCh0KXtyZXR1cm4gd24oKSx0P3QudmUoKTooWjMoKSxaMygpLEFFdCl9ZnVuY3Rpb24gVW5uKHQsZSxuKXtyZXR1cm4gaTYoKSxuLnBnKHQsdShlLmNkKCksMTQ2KSl9ZnVuY3Rpb24gRFh0KHQsZSl7cmV0dXJuIHpqKCksbmV3IHozdChuZXcgZld0KHQpLG5ldyBoV3QoZSkpfWZ1bmN0aW9uIFdubih0KXtyZXR1cm4gamwodCxZYXQpLEokKFBhKFBhKDUsdCksdC8xMHwwKSl9ZnVuY3Rpb24gYyQoKXtjJD1aLEFnZT1uZXcgdWV0KGx0KGN0KFAyLDEpLEhxLDQyLDAsW10pKX1mdW5jdGlvbiBJWHQodCl7cmV0dXJuIXQuZCYmKHQuZD1uZXcgVCh0LmMuQ2MoKSkpLHQuZH1mdW5jdGlvbiBMOCh0KXtyZXR1cm4hdC5hJiYodC5hPW5ldyBmSHQodC5jLnZjKCkpKSx0LmF9ZnVuY3Rpb24gT1h0KHQpe3JldHVybiF0LmImJih0LmI9bmV3IHM4KHQuYy5lYygpKSksdC5ifWZ1bmN0aW9uIFhkKHQsZSl7Zm9yKDtlLS0gPjA7KXQ9dDw8MXwodDwwPzE6MCk7cmV0dXJuIHR9ZnVuY3Rpb24gRmModCxlKXtyZXR1cm4gVnQodCk9PT1WdChlKXx8dCE9bnVsbCYmeWkodCxlKX1mdW5jdGlvbiBZbm4odCxlKXtyZXR1cm4gTm4oKSx1KGUuYiwxOSkuYTx0fWZ1bmN0aW9uIEtubih0LGUpe3JldHVybiBObigpLHUoZS5hLDE5KS5hPHR9ZnVuY3Rpb24gcG8odCxlKXtyZXR1cm4gem50KHQuYSxlKT90LmJbdShlLDIyKS5nXTpudWxsfWZ1bmN0aW9uIFhubih0LGUsbixyKXt0LmE9UGwodC5hLDAsZSkrKCIiK3IpK1JNKHQuYSxuKX1mdW5jdGlvbiBQWHQodCxlKXt0LnUuSGMoKFp1KCksc2cpKSYmdGJuKHQsZSksTmFuKHQsZSl9ZnVuY3Rpb24gd2EodCxlKXtyZXR1cm4gUnIoZSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUpfWZ1bmN0aW9uIEZYdCgpe1ZvLmNhbGwodGhpcywiVGhlcmUgaXMgbm8gbW9yZSBlbGVtZW50LiIpfWZ1bmN0aW9uIE85KHQpe3RoaXMuZD10LHRoaXMuYT10aGlzLmQuYix0aGlzLmI9dGhpcy5kLmN9ZnVuY3Rpb24gTlh0KHQpe3QuYj0hMSx0LmM9ITEsdC5kPSExLHQuYT0hMX1mdW5jdGlvbiBhaSh0LGUsbixyKXtyZXR1cm4gRm5lKHQsZSxuLCExKSxJeih0LHIpLHR9ZnVuY3Rpb24gUW5uKHQpe3JldHVybiB0LmouYz1OdChRbixEZSwxLDAsNSwxKSx0LmE9LTEsdH1mdW5jdGlvbiBabm4odCl7cmV0dXJuIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmN9ZnVuY3Rpb24gSm5uKHQpe3JldHVybiF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5ifWZ1bmN0aW9uIHUkKHQpe3JldHVybiF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSksdC5ufWZ1bmN0aW9uIHVydCh0KXtyZXR1cm4hdC5jJiYodC5jPW5ldyBmZShnbCx0LDksOSkpLHQuY31mdW5jdGlvbiBNOCh0KXtyZXR1cm4gdC5lPT10NyYmeHB0KHQsd2ZuKHQuZyx0LmIpKSx0LmV9ZnVuY3Rpb24gckQodCl7cmV0dXJuIHQuZj09dDcmJlJ0dCh0LGlkbih0LmcsdC5iKSksdC5mfWZ1bmN0aW9uIFEzKHQpe3ZhciBlO3JldHVybiBlPXQuYiwhZSYmKHQuYj1lPW5ldyByTSh0KSksZX1mdW5jdGlvbiBEdnQodCl7dmFyIGU7Zm9yKGU9dC5LYygpO2UuT2IoKTspZS5QYigpLGUuUWIoKX1mdW5jdGlvbiBEOCh0KXtpZihjbCh0LmQpLHQuZC5kIT10LmMpdGhyb3cgaXQobmV3IHJoKX1mdW5jdGlvbiBJdnQodCxlKXt0aGlzLmI9dCx0aGlzLmM9ZSx0aGlzLmE9bmV3IE14KHRoaXMuYil9ZnVuY3Rpb24gbHJ0KHQsZSxuKXt0aGlzLmE9enh0LHRoaXMuZD10LHRoaXMuYj1lLHRoaXMuYz1ufWZ1bmN0aW9uIEJYdCh0LGUpe3RoaXMuZD0oT24odCksdCksdGhpcy5hPTE2NDQ5LHRoaXMuYz1lfWZ1bmN0aW9uIHRybih0LGUpe3BpZSh0LFh0KEgwKGUsIngiKSksWHQoSDAoZSwieSIpKSl9ZnVuY3Rpb24gZXJuKHQsZSl7cGllKHQsWHQoSDAoZSwieCIpKSxYdChIMChlLCJ5IikpKX1mdW5jdGlvbiBSaSh0LGUpe3JldHVybiB3Mih0KSxuZXcgVG4odCxuZXcgTm10KGUsdC5hKSl9ZnVuY3Rpb24gd3UodCxlKXtyZXR1cm4gdzIodCksbmV3IFRuKHQsbmV3IFRtdChlLHQuYSkpfWZ1bmN0aW9uIGwkKHQsZSl7cmV0dXJuIHcyKHQpLG5ldyBRMnQodCxuZXcgVUp0KGUsdC5hKSl9ZnVuY3Rpb24gaCQodCxlKXtyZXR1cm4gdzIodCksbmV3IFoydCh0LG5ldyBXSnQoZSx0LmEpKX1mdW5jdGlvbiBucm4odCxlKXtyZXR1cm4gbmV3IGhRdCh1KExyKHQpLDYyKSx1KExyKGUpLDYyKSl9ZnVuY3Rpb24gcnJuKHQsZSl7cmV0dXJuIGtidCgpLE1zKChPbih0KSx0KSwoT24oZSksZSkpfWZ1bmN0aW9uIGlybigpe3JldHVybiBqUigpLGx0KGN0KGw3dCwxKSxvZSw0ODEsMCxbS3V0XSl9ZnVuY3Rpb24gc3JuKCl7cmV0dXJuIHpSKCksbHQoY3QoZVN0LDEpLG9lLDQ4MiwwLFtKaHRdKX1mdW5jdGlvbiBhcm4oKXtyZXR1cm4gcVIoKSxsdChjdChUM2UsMSksb2UsNTUxLDAsW3RmdF0pfWZ1bmN0aW9uIG9ybigpe3JldHVybiBVQygpLGx0KGN0KGtTdCwxKSxvZSw1MzAsMCxbVk9dKX1mdW5jdGlvbiBSWHQodCl7dGhpcy5hPW5ldyBoZSx0aGlzLmU9TnQoQ3IsZWUsNDgsdCwwLDIpfWZ1bmN0aW9uIGhydCh0LGUsbixyKXt0aGlzLmE9dCx0aGlzLmU9ZSx0aGlzLmQ9bix0aGlzLmM9cn1mdW5jdGlvbiBmJCh0LGUsbixyKXt0aGlzLmE9dCx0aGlzLmM9ZSx0aGlzLmI9bix0aGlzLmQ9cn1mdW5jdGlvbiBPdnQodCxlLG4scil7dGhpcy5jPXQsdGhpcy5iPWUsdGhpcy5hPW4sdGhpcy5kPXJ9ZnVuY3Rpb24galh0KHQsZSxuLHIpe3RoaXMuYz10LHRoaXMuYj1lLHRoaXMuZD1uLHRoaXMuYT1yfWZ1bmN0aW9uIGFoKHQsZSxuLHIpe3RoaXMuYz10LHRoaXMuZD1lLHRoaXMuYj1uLHRoaXMuYT1yfWZ1bmN0aW9uICRYdCh0LGUsbixyKXt0aGlzLmE9dCx0aGlzLmQ9ZSx0aGlzLmM9bix0aGlzLmI9cn1mdW5jdGlvbiBHeCh0LGUsbixyKXtWci5jYWxsKHRoaXMsdCxlKSx0aGlzLmE9bix0aGlzLmI9cn1mdW5jdGlvbiB6WHQodCxlLG4scil7dGhpcy5hPXQsdGhpcy5jPWUsdGhpcy5kPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gY3JuKHQsZSxuKXt2M24odC5hLG4pLHB1bihuKSxHYm4odC5iLG4pLE4zbihlLG4pfWZ1bmN0aW9uIGZydCh0LGUsbil7dmFyIHIscztyZXR1cm4gcj1NeHQodCkscz1lLktoKG4sciksc31mdW5jdGlvbiBxWHQodCxlKXt2YXIgbixyO3JldHVybiBuPXQvZSxyPXBzKG4pLG4+ciYmKytyLHJ9ZnVuY3Rpb24gTjAodCl7dmFyIGUsbjtyZXR1cm4gbj0oZT1uZXcgeHcsZSksSDgobix0KSxufWZ1bmN0aW9uIGRydCh0KXt2YXIgZSxuO3JldHVybiBuPShlPW5ldyB4dyxlKSxqNHQobix0KSxufWZ1bmN0aW9uIHVybih0LGUpe3ZhciBuO3JldHVybiBuPXRyKHQuZixlKSxieXQoZSxuKSxudWxsfWZ1bmN0aW9uIGdydCh0KXt2YXIgZTtyZXR1cm4gZT15Y24odCksZXx8bnVsbH1mdW5jdGlvbiBIWHQodCl7cmV0dXJuIXQuYiYmKHQuYj1uZXcgZmUoWXMsdCwxMiwzKSksdC5ifWZ1bmN0aW9uIGxybih0KXtyZXR1cm4gdCE9bnVsbCYmeU0oZ1UsdC50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBocm4odCxlKXtyZXR1cm4gTXMoUnUodCkqRWwodCksUnUoZSkqRWwoZSkpfWZ1bmN0aW9uIGZybih0LGUpe3JldHVybiBNcyhSdSh0KSpFbCh0KSxSdShlKSpFbChlKSl9ZnVuY3Rpb24gZHJuKHQsZSl7cmV0dXJuIE1zKHQuZC5jK3QuZC5iLzIsZS5kLmMrZS5kLmIvMil9ZnVuY3Rpb24gZ3JuKHQsZSl7cmV0dXJuIE1zKHQuZy5jK3QuZy5iLzIsZS5nLmMrZS5nLmIvMil9ZnVuY3Rpb24gVlh0KHQsZSxuKXtuLmE/RXUodCxlLmItdC5mLzIpOmt1KHQsZS5hLXQuZy8yKX1mdW5jdGlvbiBHWHQodCxlLG4scil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW4sdGhpcy5kPXJ9ZnVuY3Rpb24gVVh0KHQsZSxuLHIpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1uLHRoaXMuZD1yfWZ1bmN0aW9uIG4yKHQsZSxuLHIpe3RoaXMuZT10LHRoaXMuYT1lLHRoaXMuYz1uLHRoaXMuZD1yfWZ1bmN0aW9uIFdYdCh0LGUsbixyKXt0aGlzLmE9dCx0aGlzLmM9ZSx0aGlzLmQ9bix0aGlzLmI9cn1mdW5jdGlvbiBZWHQodCxlLG4scil7aWgoKSwkSnQuY2FsbCh0aGlzLGUsbixyKSx0aGlzLmE9dH1mdW5jdGlvbiBLWHQodCxlLG4scil7aWgoKSwkSnQuY2FsbCh0aGlzLGUsbixyKSx0aGlzLmE9dH1mdW5jdGlvbiBYWHQodCxlKXt0aGlzLmE9dCx5WmUuY2FsbCh0aGlzLHQsdSh0LmQsMTUpLlpjKGUpKX1mdW5jdGlvbiBwcnQodCl7dGhpcy5mPXQsdGhpcy5jPXRoaXMuZi5lLHQuZj4wJiZjYWUodGhpcyl9ZnVuY3Rpb24gUVh0KHQsZSxuLHIpe3RoaXMuYj10LHRoaXMuYz1yLGVudC5jYWxsKHRoaXMsZSxuKX1mdW5jdGlvbiBaWHQodCl7cmV0dXJuIFpuKHQuYjx0LmQuZ2MoKSksdC5kLlhiKHQuYz10LmIrKyl9ZnVuY3Rpb24gQWgodCl7dC5hLmE9dC5jLHQuYy5iPXQuYSx0LmEuYj10LmMuYT1udWxsLHQuYj0wfWZ1bmN0aW9uIFB2dCh0LGUpe3JldHVybiB0LmI9ZS5iLHQuYz1lLmMsdC5kPWUuZCx0LmE9ZS5hLHR9ZnVuY3Rpb24gZCQodCl7cmV0dXJuIHQubiYmKHQuZSE9PXZmZSYmdC5fZCgpLHQuaj1udWxsKSx0fWZ1bmN0aW9uIEpYdCh0KXtyZXR1cm4gazkodD09bnVsbHx8Wm50KHQpJiZ0LmltIT09RXQpLHR9ZnVuY3Rpb24gdFF0KHQpe3RoaXMuYj1uZXcgaGUsTHModGhpcy5iLHRoaXMuYiksdGhpcy5hPXR9ZnVuY3Rpb24gVXgoKXtVeD1aLGRWPW5ldyBoZSxKdXQ9bmV3IF9yLFp1dD1uZXcgaGV9ZnVuY3Rpb24gd24oKXt3bj1aLGlvPW5ldyBJdCx1MD1uZXcgQnQsclY9bmV3IG50fWZ1bmN0aW9uIFozKCl7WjM9WixfRXQ9bmV3IFNlLFNFdD1uZXcgU2UsQUV0PW5ldyBtZX1mdW5jdGlvbiBGdnQoKXtGdnQ9WixhcGU9bmV3IHZzLGNwZT1uZXcgdHZ0LG9wZT1uZXcgcnV9ZnVuY3Rpb24gcHJuKCl7akV0PT0yNTYmJihSRXQ9YVYsYVY9bmV3IF8sakV0PTApLCsrakV0fWZ1bmN0aW9uIFd4KHQpe3ZhciBlO3JldHVybiBlPXQuZixlfHwodC5mPW5ldyBsOCh0LHQuYykpfWZ1bmN0aW9uIGJybih0KXtyZXR1cm4gZnYodCkmJmplKFJlKHFlKHQsKFRlKCksajIpKSkpfWZ1bmN0aW9uIHdybih0LGUpe3JldHVybiBsbih0LHUoUShlLChUZSgpLFQ3KSksMTkpLGUpfWZ1bmN0aW9uIGVRdCh0LGUpe3JldHVybiBjNCh0LmosZS5zLGUuYykrYzQoZS5lLHQucyx0LmMpfWZ1bmN0aW9uIG5RdCh0LGUpe3QuZSYmIXQuZS5hJiYoZXF0KHQuZSxlKSxuUXQodC5lLGUpKX1mdW5jdGlvbiByUXQodCxlKXt0LmQmJiF0LmQuYSYmKGVxdCh0LmQsZSksclF0KHQuZCxlKSl9ZnVuY3Rpb24gdnJuKHQsZSl7cmV0dXJuLU1zKFJ1KHQpKkVsKHQpLFJ1KGUpKkVsKGUpKX1mdW5jdGlvbiBtcm4odCl7cmV0dXJuIHUodC5jZCgpLDE0NikudGcoKSsiOiIrJG8odC5kZCgpKX1mdW5jdGlvbiB5cm4odCl7ZGYoKTt2YXIgZTtlPXUodC5nLDEwKSxlLm4uYT10LmQuYytlLmQuYn1mdW5jdGlvbiB4cm4odCxlLG4pe3JldHVybiBHQygpLGZobih1KHRyKHQuZSxlKSw1MjIpLG4pfWZ1bmN0aW9uIGtybih0LGUpe3JldHVybiBvbCh0KSxvbChlKSxySHQodSh0LDIyKSx1KGUsMjIpKX1mdW5jdGlvbiBFcm4odCxlLG4pe3QuaT0wLHQuZT0wLGUhPW4mJlRyZSh0LGUsbil9ZnVuY3Rpb24gVHJuKHQsZSxuKXt0Lmk9MCx0LmU9MCxlIT1uJiZDcmUodCxlLG4pfWZ1bmN0aW9uIHIyKHQsZSxuKXt2YXIgcixzO3I9bXd0KG4pLHM9bmV3IEVDKHIpLFlmKHQsZSxzKX1mdW5jdGlvbiBicnQodCxlLG4scixzLG8pe21ELmNhbGwodGhpcyx0LGUsbixyLHMsbz8tMjotMSl9ZnVuY3Rpb24gaVF0KHQsZSxuLHIpe2UydC5jYWxsKHRoaXMsZSxuKSx0aGlzLmI9dCx0aGlzLmE9cn1mdW5jdGlvbiBOdnQodCxlKXtuZXcgWmksdGhpcy5hPW5ldyBQdSx0aGlzLmI9dCx0aGlzLmM9ZX1mdW5jdGlvbiBDcm4odCxlKXtyZXR1cm4gdShRKHQsKGFlKCksUjYpKSwxNSkuRmMoZSksZX1mdW5jdGlvbiBnJCh0LGUpe2lmKHQ9PW51bGwpdGhyb3cgaXQobmV3IFN4KGUpKTtyZXR1cm4gdH1mdW5jdGlvbiBNaSh0KXtyZXR1cm4hdC5xJiYodC5xPW5ldyBmZShXaCx0LDExLDEwKSksdC5xfWZ1bmN0aW9uIFd0KHQpe3JldHVybiF0LnMmJih0LnM9bmV3IGZlKE11LHQsMjEsMTcpKSx0LnN9ZnVuY3Rpb24gcCQodCl7cmV0dXJuIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYX1mdW5jdGlvbiBiJCh0KXtyZXR1cm4gX3QodCwxNCk/bmV3IEU5KHUodCwxNCkpOm5lbih0LktjKCkpfWZ1bmN0aW9uIF9ybih0KXtyZXR1cm4gbmV3IGlXdCh0LHQuZS5IZCgpLmdjKCkqdC5jLkhkKCkuZ2MoKSl9ZnVuY3Rpb24gU3JuKHQpe3JldHVybiBuZXcgc1d0KHQsdC5lLkhkKCkuZ2MoKSp0LmMuSGQoKS5nYygpKX1mdW5jdGlvbiBCdnQodCl7cmV0dXJuIHQmJnQuaGFzaENvZGU/dC5oYXNoQ29kZSgpOlB3KHQpfWZ1bmN0aW9uIHdydCh0LGUpe3JldHVybiBlPT1udWxsPyEhTG8odC5mLG51bGwpOnFlbih0LmcsZSl9ZnVuY3Rpb24gQXJuKHQpe3JldHVybiBMcih0KSxfc2UobmV3IGFyKGxyKHQuYS5LYygpLG5ldyB6KSkpfWZ1bmN0aW9uIGlEKHQpe3JldHVybiB3bigpLF90KHQsNTQpP25ldyBtZXQodCk6bmV3IEVqKHQpfWZ1bmN0aW9uIHNRdCh0LGUsbil7cmV0dXJuIHQuZj90LmYuTmUoZSxuKTohMX1mdW5jdGlvbiBMcm4odCxlKXtyZXR1cm4gdC5hPVBsKHQuYSwwLGUpKyIiK1JNKHQuYSxlKzEpLHR9ZnVuY3Rpb24gTXJuKHQsZSl7dmFyIG47cmV0dXJuIG49bTJ0KHQuYSxlKSxuJiYoZS5kPW51bGwpLG59ZnVuY3Rpb24gdyQodCl7dmFyIGUsbjtuPXQsZT1uLiRtb2RDb3VudHwwLG4uJG1vZENvdW50PWUrMX1mdW5jdGlvbiBSdnQodCl7dGhpcy5iPXQsdGhpcy5jPXQsdC5lPW51bGwsdC5jPW51bGwsdGhpcy5hPTF9ZnVuY3Rpb24gYVF0KHQpe3RoaXMuYj10LHRoaXMuYT1uZXcgT3AodShMcihuZXcgWWMpLDYyKSl9ZnVuY3Rpb24gb1F0KHQpe3RoaXMuYz10LHRoaXMuYj1uZXcgT3AodShMcihuZXcgenMpLDYyKSl9ZnVuY3Rpb24gY1F0KHQpe3RoaXMuYz10LHRoaXMuYj1uZXcgT3AodShMcihuZXcgaU4pLDYyKSl9ZnVuY3Rpb24gdVF0KCl7dGhpcy5hPW5ldyAkcHQsdGhpcy5iPW5ldyBTcXQsdGhpcy5kPW5ldyBzTn1mdW5jdGlvbiBWdygpe3RoaXMuYT1uZXcgUHUsdGhpcy5iPShqbCgzLGt5KSxuZXcgWGMoMykpfWZ1bmN0aW9uIGxRdCgpe3RoaXMuYj1uZXcgSHMsdGhpcy5kPW5ldyBaaSx0aGlzLmU9bmV3IHFwdH1mdW5jdGlvbiB2JCh0KXt0aGlzLmM9dC5jLHRoaXMuZD10LmQsdGhpcy5iPXQuYix0aGlzLmE9dC5hfWZ1bmN0aW9uIGhRdCh0LGUpe2hLZS5jYWxsKHRoaXMsbmV3IFludCh0KSksdGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gZlF0KCl7SHN0KHRoaXMsbmV3IEpCKSx0aGlzLndiPShIcCgpLExuKSxjOCgpfWZ1bmN0aW9uIERybih0KXt2cih0LCJObyBjcm9zc2luZyBtaW5pbWl6YXRpb24iLDEpLG9yKHQpfWZ1bmN0aW9uIElybih0KXtBUigpLGIuc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IHR9LDApfWZ1bmN0aW9uIEFvKHQpe3JldHVybiB0LnV8fChzbCh0KSx0LnU9bmV3IEtXdCh0LHQpKSx0LnV9ZnVuY3Rpb24gdnUodCl7dmFyIGU7cmV0dXJuIGU9dShEbih0LDE2KSwyNiksZXx8dC56aCgpfWZ1bmN0aW9uIGRRdCh0LGUpe3JldHVybiBfdChlLDE0NikmJmhuKHQuYix1KGUsMTQ2KS50ZygpKX1mdW5jdGlvbiBPcm4odCxlKXtyZXR1cm4gdC5hP2UuV2coKS5LYygpOnUoZS5XZygpLDY5KS5aaCgpfWZ1bmN0aW9uIFBybih0KXtyZXR1cm4gdC5rPT0oVm4oKSxPcykmJlVzKHQsKGFlKCksa1MpKX1mdW5jdGlvbiB2cnQodCl7dGhpcy5hPSh3bigpLF90KHQsNTQpP25ldyBtZXQodCk6bmV3IEVqKHQpKX1mdW5jdGlvbiBJOCgpe0k4PVo7dmFyIHQsZTtlPSFlZm4oKSx0PW5ldyBidCxPdXQ9ZT9uZXcgVTp0fWZ1bmN0aW9uIG1ydCh0LGUpe3ZhciBuO3JldHVybiBuPUlwKHQuZ20pLGU9PW51bGw/bjpuKyI6ICIrZX1mdW5jdGlvbiBnUXQodCxlKXt2YXIgbjtyZXR1cm4gbj10LmIuUWMoZSksc0p0KG4sdC5iLmdjKCkpLG59ZnVuY3Rpb24gc0QodCxlKXtpZih0PT1udWxsKXRocm93IGl0KG5ldyBTeChlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gTG8odCxlKXtyZXR1cm4ganJlKHQsZSxiaW4odCxlPT1udWxsPzA6dC5iLnNlKGUpKSl9ZnVuY3Rpb24gRnJuKHQsZSxuKXtyZXR1cm4gbj49MCYmaG4odC5zdWJzdHIobixlLmxlbmd0aCksZSl9ZnVuY3Rpb24gR3AodCxlLG4scixzLG8saCl7cmV0dXJuIG5ldyBqcnQodC5lLGUsbixyLHMsbyxoKX1mdW5jdGlvbiBwUXQodCxlLG4scixzLG8pe3RoaXMuYT10LGZpdC5jYWxsKHRoaXMsZSxuLHIscyxvKX1mdW5jdGlvbiBiUXQodCxlLG4scixzLG8pe3RoaXMuYT10LGZpdC5jYWxsKHRoaXMsZSxuLHIscyxvKX1mdW5jdGlvbiB3UXQodCxlKXt0aGlzLmc9dCx0aGlzLmQ9bHQoY3QobDAsMSksWWcsMTAsMCxbZV0pfWZ1bmN0aW9uIFBnKHQsZSl7dGhpcy5lPXQsdGhpcy5hPVFuLHRoaXMuYj0kdWUoZSksdGhpcy5jPWV9ZnVuY3Rpb24gdlF0KHQsZSl7SWouY2FsbCh0aGlzKSxHbXQodGhpcyksdGhpcy5hPXQsdGhpcy5jPWV9ZnVuY3Rpb24gYUQodCxlLG4scil7dHModC5jW2UuZ10sbi5nLHIpLHRzKHQuY1tuLmddLGUuZyxyKX1mdW5jdGlvbiB5cnQodCxlLG4scil7dHModC5jW2UuZ10sZS5nLG4pLHRzKHQuYltlLmddLGUuZyxyKX1mdW5jdGlvbiBOcm4oKXtyZXR1cm4gcEQoKSxsdChjdChZOXQsMSksb2UsMzc2LDAsW1NodCxCT10pfWZ1bmN0aW9uIEJybigpe3JldHVybiB4RCgpLGx0KGN0KCRUdCwxKSxvZSw0NzksMCxbalR0LFdWXSl9ZnVuY3Rpb24gUnJuKCl7cmV0dXJuIExEKCksbHQoY3QoQlR0LDEpLG9lLDQxOSwwLFtHVixOVHRdKX1mdW5jdGlvbiBqcm4oKXtyZXR1cm4gSCQoKSxsdChjdChMVHQsMSksb2UsNDIyLDAsW0FUdCxBbHRdKX1mdW5jdGlvbiAkcm4oKXtyZXR1cm4gSSQoKSxsdChjdChKVHQsMSksb2UsNDIwLDAsW0hsdCxaVHRdKX1mdW5jdGlvbiB6cm4oKXtyZXR1cm4gQ0QoKSxsdChjdChWOXQsMSksb2UsNDIxLDAsW1RodCxDaHRdKX1mdW5jdGlvbiBxcm4oKXtyZXR1cm4gJDkoKSxsdChjdChPbWUsMSksb2UsNTIzLDAsW0JTLE5TXSl9ZnVuY3Rpb24gSHJuKCl7cmV0dXJuIFVmKCksbHQoY3QocnllLDEpLG9lLDUyMCwwLFtLeSxtYl0pfWZ1bmN0aW9uIFZybigpe3JldHVybiBiZCgpLGx0KGN0KCRtZSwxKSxvZSw1MTYsMCxbenYsZXBdKX1mdW5jdGlvbiBHcm4oKXtyZXR1cm4gQzEoKSxsdChjdChxbWUsMSksb2UsNTE1LDAsW0gyLEgxXSl9ZnVuY3Rpb24gVXJuKCl7cmV0dXJuIEd3KCksbHQoY3QobHllLDEpLG9lLDQ1NSwwLFt5YixyNV0pfWZ1bmN0aW9uIFdybigpe3JldHVybiBBJCgpLGx0KGN0KHZfdCwxKSxvZSw0MjUsMCxbcWh0LHdfdF0pfWZ1bmN0aW9uIFlybigpe3JldHVybiBUJCgpLGx0KGN0KGJfdCwxKSxvZSw0ODAsMCxbemh0LHBfdF0pfWZ1bmN0aW9uIEtybigpe3JldHVybiBweigpLGx0KGN0KG1fdCwxKSxvZSw0OTUsMCxbRkcsRDddKX1mdW5jdGlvbiBYcm4oKXtyZXR1cm4gRyQoKSxsdChjdCh4X3QsMSksb2UsNDI2LDAsW3lfdCxVaHRdKX1mdW5jdGlvbiBRcm4oKXtyZXR1cm4gakQoKSxsdChjdChUU3QsMSksb2UsNDI5LDAsW1ZHLEVTdF0pfWZ1bmN0aW9uIFpybigpe3JldHVybiBiRCgpLGx0KGN0KG5TdCwxKSxvZSw0MzAsMCxbZWZ0LHFHXSl9ZnVuY3Rpb24gSnJuKCl7cmV0dXJuIEd6KCksbHQoY3QoekV0LDEpLG9lLDQyOCwwLFtxdXQsJEV0XSl9ZnVuY3Rpb24gdGluKCl7cmV0dXJuIFEkKCksbHQoY3QoSEV0LDEpLG9lLDQyNywwLFtxRXQsSHV0XSl9ZnVuY3Rpb24gZWluKCl7cmV0dXJuIFokKCksbHQoY3Qodzd0LDEpLG9lLDQyNCwwLFt0bHQsZ1ZdKX1mdW5jdGlvbiBuaW4oKXtyZXR1cm4gWDgoKSxsdChjdChuMmUsMSksb2UsNTExLDAsW3lPLGRsdF0pfWZ1bmN0aW9uIG0kKHQsZSxuLHIpe3JldHVybiBuPj0wP3QuamgoZSxuLHIpOnQuU2cobnVsbCxuLHIpfWZ1bmN0aW9uIHhydCh0KXtyZXR1cm4gdC5iLmI9PTA/dC5hLiRlKCk6T250KHQuYil9ZnVuY3Rpb24gcmluKHQpe2lmKHQucCE9NSl0aHJvdyBpdChuZXcgT3UpO3JldHVybiBBcih0LmYpfWZ1bmN0aW9uIGlpbih0KXtpZih0LnAhPTUpdGhyb3cgaXQobmV3IE91KTtyZXR1cm4gQXIodC5rKX1mdW5jdGlvbiBqdnQodCl7cmV0dXJuIFZ0KHQuYSk9PT1WdCgoa2l0KCksQmZ0KSkmJnM0bih0KSx0LmF9ZnVuY3Rpb24gbVF0KHQpe3RoaXMuYT11KExyKHQpLDI3MSksdGhpcy5iPSh3bigpLG5ldyBJMnQodCkpfWZ1bmN0aW9uIHlRdCh0LGUpe3ZwdCh0aGlzLG5ldyAkZSh0LmEsdC5iKSksb1IodGhpcyxRTShlKSl9ZnVuY3Rpb24gR3coKXtHdz1aLHliPW5ldyBXYnQoeTYsMCkscjU9bmV3IFdidCh4NiwxKX1mdW5jdGlvbiBiZCgpe2JkPVosenY9bmV3IEdidCh4NiwwKSxlcD1uZXcgR2J0KHk2LDEpfWZ1bmN0aW9uIFV3KCl7Z0tlLmNhbGwodGhpcyxuZXcgTHgodHkoMTIpKSksQTJ0KCEwKSx0aGlzLmE9Mn1mdW5jdGlvbiBrcnQodCxlLG4pe2dpKCkseXcuY2FsbCh0aGlzLHQpLHRoaXMuYj1lLHRoaXMuYT1ufWZ1bmN0aW9uICR2dCh0LGUsbil7aWgoKSx2Ui5jYWxsKHRoaXMsZSksdGhpcy5hPXQsdGhpcy5iPW59ZnVuY3Rpb24geFF0KHQpe0lqLmNhbGwodGhpcyksR210KHRoaXMpLHRoaXMuYT10LHRoaXMuYz0hMH1mdW5jdGlvbiBrUXQodCl7dmFyIGU7ZT10LmMuZC5iLHQuYj1lLHQuYT10LmMuZCxlLmE9dC5jLmQuYj10fWZ1bmN0aW9uIHkkKHQpe3ZhciBlO2hjbih0LmEpLE9VdCh0LmEpLGU9bmV3IGVyKHQuYSkscDN0KGUpfWZ1bmN0aW9uIHNpbih0LGUpe0R1ZSh0LCEwKSx4dSh0LmUud2YoKSxuZXcgRXd0KHQsITAsZSkpfWZ1bmN0aW9uIHgkKHQsZSl7cmV0dXJuIGVKdChlKSxjY24odCxOdChDcixYciwyNSxlLDE1LDEpLGUpfWZ1bmN0aW9uIGFpbih0LGUpe3JldHVybiBVeCgpLHQ9PWVzKGUwKGUpKXx8dD09ZXModGIoZSkpfWZ1bmN0aW9uIE5jKHQsZSl7cmV0dXJuIGU9PW51bGw/ZWMoTG8odC5mLG51bGwpKTpLQyh0LmcsZSl9ZnVuY3Rpb24gb2luKHQpe3JldHVybiB0LmI9PTA/bnVsbDooWm4odC5iIT0wKSxsaCh0LHQuYS5hKSl9ZnVuY3Rpb24gcHModCl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHQsd2kpLC0yMTQ3NDgzNjQ4KXwwfWZ1bmN0aW9uIGNpbih0LGUpe3ZhciBuPUl1dFt0LmNoYXJDb2RlQXQoMCldO3JldHVybiBuPz90fWZ1bmN0aW9uIGskKHQsZSl7cmV0dXJuIGckKHQsInNldDEiKSxnJChlLCJzZXQyIiksbmV3IHZWdCh0LGUpfWZ1bmN0aW9uIHVpbih0LGUpe3ZhciBuO3JldHVybiBuPXJjbih0LmYsZSksTGkoTWoobiksdC5mLmQpfWZ1bmN0aW9uIFA5KHQsZSl7dmFyIG4scjtyZXR1cm4gbj1lLHI9bmV3IHp0LG1oZSh0LG4sciksci5kfWZ1bmN0aW9uIEVydCh0LGUsbixyKXt2YXIgcztzPW5ldyB1WXQsZS5hW24uZ109cyx6eCh0LmIscixzKX1mdW5jdGlvbiB6dnQodCxlLG4pe3ZhciByO3I9dC5ZZyhlKSxyPj0wP3Quc2gocixuKTpNNXQodCxlLG4pfWZ1bmN0aW9uIEozKHQsZSxuKXtDJCgpLHQmJmtpKFBmdCx0LGUpLHQmJmtpKGRQLHQsbil9ZnVuY3Rpb24gRVF0KHQsZSxuKXt0aGlzLmk9bmV3IGhlLHRoaXMuYj10LHRoaXMuZz1lLHRoaXMuYT1ufWZ1bmN0aW9uIEUkKHQsZSxuKXt0aGlzLmM9bmV3IGhlLHRoaXMuZT10LHRoaXMuZj1lLHRoaXMuYj1ufWZ1bmN0aW9uIHF2dCh0LGUsbil7dGhpcy5hPW5ldyBoZSx0aGlzLmU9dCx0aGlzLmY9ZSx0aGlzLmM9bn1mdW5jdGlvbiBUUXQodCxlKXt5aih0aGlzKSx0aGlzLmY9ZSx0aGlzLmc9dCxkJCh0aGlzKSx0aGlzLl9kKCl9ZnVuY3Rpb24gb0QodCxlKXt2YXIgbjtuPXQucS5nZXRIb3VycygpLHQucS5zZXREYXRlKGUpLEVfKHQsbil9ZnVuY3Rpb24gQ1F0KHQsZSl7dmFyIG47Zm9yKExyKGUpLG49dC5hO247bj1uLmMpZS5PZChuLmcsbi5pKX1mdW5jdGlvbiBfUXQodCl7dmFyIGU7cmV0dXJuIGU9bmV3IElSKHR5KHQubGVuZ3RoKSksT3l0KGUsdCksZX1mdW5jdGlvbiBsaW4odCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGU9dHx8e30sbmV3IGV9ZnVuY3Rpb24gaGluKHQsZSl7cmV0dXJuIGVyZSh0LGUpPyhKZWUodCksITApOiExfWZ1bmN0aW9uIEIwKHQsZSl7aWYoZT09bnVsbCl0aHJvdyBpdChuZXcgSUMpO3JldHVybiBjZm4odCxlKX1mdW5jdGlvbiBmaW4odCl7aWYodC5xZSgpKXJldHVybiBudWxsO3ZhciBlPXQubjtyZXR1cm4gUUhbZV19ZnVuY3Rpb24gY0QodCl7cmV0dXJuIHQuRGI+PjE2IT0zP251bGw6dSh0LkNiLDMzKX1mdW5jdGlvbiBUMSh0KXtyZXR1cm4gdC5EYj4+MTYhPTk/bnVsbDp1KHQuQ2IsMzMpfWZ1bmN0aW9uIFNRdCh0KXtyZXR1cm4gdC5EYj4+MTYhPTY/bnVsbDp1KHQuQ2IsNzkpfWZ1bmN0aW9uIEFRdCh0KXtyZXR1cm4gdC5EYj4+MTYhPTc/bnVsbDp1KHQuQ2IsMjM1KX1mdW5jdGlvbiBMUXQodCl7cmV0dXJuIHQuRGI+PjE2IT03P251bGw6dSh0LkNiLDE2MCl9ZnVuY3Rpb24gZXModCl7cmV0dXJuIHQuRGI+PjE2IT0xMT9udWxsOnUodC5DYiwzMyl9ZnVuY3Rpb24gTVF0KHQsZSl7dmFyIG47cmV0dXJuIG49dC5ZZyhlKSxuPj0wP3QubGgobik6WnN0KHQsZSl9ZnVuY3Rpb24gRFF0KHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IFd3dChlKSxJYWUobix0KSxuZXcgQnUobil9ZnVuY3Rpb24gSHZ0KHQpe3ZhciBlO3JldHVybiBlPXQuZCxlPXQuc2kodC5mKSxEcih0LGUpLGUuT2IoKX1mdW5jdGlvbiBJUXQodCxlKXtyZXR1cm4gdC5iKz1lLmIsdC5jKz1lLmMsdC5kKz1lLmQsdC5hKz1lLmEsdH1mdW5jdGlvbiBUcnQodCxlKXtyZXR1cm4gYi5NYXRoLmFicyh0KTxiLk1hdGguYWJzKGUpP3Q6ZX1mdW5jdGlvbiBkaW4odCl7cmV0dXJuIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYS5pPjB9ZnVuY3Rpb24gT1F0KCl7dGhpcy5hPW5ldyBPMCx0aGlzLmU9bmV3IEhzLHRoaXMuZz0wLHRoaXMuaT0wfWZ1bmN0aW9uIFBRdCh0KXt0aGlzLmE9dCx0aGlzLmI9TnQoTW1lLGVlLDE5NDQsdC5lLmxlbmd0aCwwLDIpfWZ1bmN0aW9uIENydCh0LGUsbil7dmFyIHI7cj14cmUodCxlLG4pLHQuYj1uZXcgZ3ooci5jLmxlbmd0aCl9ZnVuY3Rpb24gQzEoKXtDMT1aLEgyPW5ldyBWYnQoRG90LDApLEgxPW5ldyBWYnQoIlVQIiwxKX1mdW5jdGlvbiBUJCgpe1QkPVosemh0PW5ldyBZYnQoWTFlLDApLHBfdD1uZXcgWWJ0KCJGQU4iLDEpfWZ1bmN0aW9uIEMkKCl7QyQ9WixQZnQ9bmV3IF9yLGRQPW5ldyBfcixPWGUoVWdlLG5ldyBKVCl9ZnVuY3Rpb24gZ2luKHQpe2lmKHQucCE9MCl0aHJvdyBpdChuZXcgT3UpO3JldHVybiB1OSh0LmYsMCl9ZnVuY3Rpb24gcGluKHQpe2lmKHQucCE9MCl0aHJvdyBpdChuZXcgT3UpO3JldHVybiB1OSh0LmssMCl9ZnVuY3Rpb24gRlF0KHQpe3JldHVybiB0LkRiPj4xNiE9Mz9udWxsOnUodC5DYiwxNDcpfWZ1bmN0aW9uIE84KHQpe3JldHVybiB0LkRiPj4xNiE9Nj9udWxsOnUodC5DYiwyMzUpfWZ1bmN0aW9uIFltKHQpe3JldHVybiB0LkRiPj4xNiE9MTc/bnVsbDp1KHQuQ2IsMjYpfWZ1bmN0aW9uIE5RdCh0LGUpe3ZhciBuPXQuYT10LmF8fFtdO3JldHVybiBuW2VdfHwobltlXT10LmxlKGUpKX1mdW5jdGlvbiBiaW4odCxlKXt2YXIgbjtyZXR1cm4gbj10LmEuZ2V0KGUpLG4/P25ldyBBcnJheX1mdW5jdGlvbiB3aW4odCxlKXt2YXIgbjtuPXQucS5nZXRIb3VycygpLHQucS5zZXRNb250aChlKSxFXyh0LG4pfWZ1bmN0aW9uIGtvKHQsZSxuKXtyZXR1cm4gZT09bnVsbD9hdSh0LmYsbnVsbCxuKTpzdih0LmcsZSxuKX1mdW5jdGlvbiBGOSh0LGUsbixyLHMsbyl7cmV0dXJuIG5ldyB6MCh0LmUsZSx0LmFqKCksbixyLHMsbyl9ZnVuY3Rpb24gdUQodCxlLG4pe3JldHVybiB0LmE9UGwodC5hLDAsZSkrKCIiK24pK1JNKHQuYSxlKSx0fWZ1bmN0aW9uIHZpbih0LGUsbil7cmV0dXJuIGxlKHQuYSwoYyQoKSxrc3QoZSxuKSxuZXcgTHcoZSxuKSkpLHR9ZnVuY3Rpb24gVnZ0KHQpe3JldHVybiBNMnQodC5jKSx0LmU9dC5hPXQuYyx0LmM9dC5jLmMsKyt0LmQsdC5hLmZ9ZnVuY3Rpb24gQlF0KHQpe3JldHVybiBNMnQodC5lKSx0LmM9dC5hPXQuZSx0LmU9dC5lLmUsLS10LmQsdC5hLmZ9ZnVuY3Rpb24gb2EodCxlKXt0LmQmJm11KHQuZC5lLHQpLHQuZD1lLHQuZCYmbGUodC5kLmUsdCl9ZnVuY3Rpb24gT2EodCxlKXt0LmMmJm11KHQuYy5nLHQpLHQuYz1lLHQuYyYmbGUodC5jLmcsdCl9ZnVuY3Rpb24gRW8odCxlKXt0LmMmJm11KHQuYy5hLHQpLHQuYz1lLHQuYyYmbGUodC5jLmEsdCl9ZnVuY3Rpb24gVW8odCxlKXt0LmkmJm11KHQuaS5qLHQpLHQuaT1lLHQuaSYmbGUodC5pLmosdCl9ZnVuY3Rpb24gUlF0KHQsZSxuKXt0aGlzLmE9ZSx0aGlzLmM9dCx0aGlzLmI9KExyKG4pLG5ldyBCdShuKSl9ZnVuY3Rpb24galF0KHQsZSxuKXt0aGlzLmE9ZSx0aGlzLmM9dCx0aGlzLmI9KExyKG4pLG5ldyBCdShuKSl9ZnVuY3Rpb24gJFF0KHQsZSl7dGhpcy5hPXQsdGhpcy5jPW5jKHRoaXMuYSksdGhpcy5iPW5ldyB2JChlKX1mdW5jdGlvbiBtaW4odCl7dmFyIGU7cmV0dXJuIHcyKHQpLGU9bmV3IEhzLFJpKHQsbmV3IEdlKGUpKX1mdW5jdGlvbiBLbSh0LGUpe2lmKHQ8MHx8dD5lKXRocm93IGl0KG5ldyB5byhLeHQrdCtYeHQrZSkpfWZ1bmN0aW9uIEd2dCh0LGUpe3JldHVybiBNS3QodC5hLGUpP3B2dCh0LHUoZSwyMikuZyxudWxsKTpudWxsfWZ1bmN0aW9uIHlpbih0KXtyZXR1cm4gcWl0KCksTm4oKSx1KHQuYSw4MSkuZC5lIT0wfWZ1bmN0aW9uIHpRdCgpe3pRdD1aLERnZT1XcigoVFIoKSxsdChjdChNZ2UsMSksb2UsNTM4LDAsW011dF0pKSl9ZnVuY3Rpb24gcVF0KCl7cVF0PVosd21lPUt1KG5ldyBWcywoV2EoKSxJbyksKHJvKCkseE8pKX1mdW5jdGlvbiBVdnQoKXtVdnQ9Wix2bWU9S3UobmV3IFZzLChXYSgpLElvKSwocm8oKSx4TykpfWZ1bmN0aW9uIEhRdCgpe0hRdD1aLHltZT1LdShuZXcgVnMsKFdhKCksSW8pLChybygpLHhPKSl9ZnVuY3Rpb24gVlF0KCl7VlF0PVosRm1lPWJpKG5ldyBWcywoV2EoKSxJbyksKHJvKCkscFMpKX1mdW5jdGlvbiBGbCgpe0ZsPVosUm1lPWJpKG5ldyBWcywoV2EoKSxJbyksKHJvKCkscFMpKX1mdW5jdGlvbiBHUXQoKXtHUXQ9WixqbWU9YmkobmV3IFZzLChXYSgpLElvKSwocm8oKSxwUykpfWZ1bmN0aW9uIF9ydCgpe19ydD1aLFZtZT1iaShuZXcgVnMsKFdhKCksSW8pLChybygpLHBTKSl9ZnVuY3Rpb24gVVF0KCl7VVF0PVosTXllPUt1KG5ldyBWcywod0UoKSxqUyksKHBfKCksSWh0KSl9ZnVuY3Rpb24gaTIodCxlLG4scil7dGhpcy5jPXQsdGhpcy5kPXIsQXJ0KHRoaXMsZSksTHJ0KHRoaXMsbil9ZnVuY3Rpb24gWXgodCl7dGhpcy5jPW5ldyBaaSx0aGlzLmI9dC5iLHRoaXMuZD10LmMsdGhpcy5hPXQuYX1mdW5jdGlvbiBTcnQodCl7dGhpcy5hPWIuTWF0aC5jb3ModCksdGhpcy5iPWIuTWF0aC5zaW4odCl9ZnVuY3Rpb24gQXJ0KHQsZSl7dC5hJiZtdSh0LmEuayx0KSx0LmE9ZSx0LmEmJmxlKHQuYS5rLHQpfWZ1bmN0aW9uIExydCh0LGUpe3QuYiYmbXUodC5iLmYsdCksdC5iPWUsdC5iJiZsZSh0LmIuZix0KX1mdW5jdGlvbiBXUXQodCxlKXtMbm4odCx0LmIsdC5jKSx1KHQuYi5iLDY1KSxlJiZ1KGUuYiw2NSkuYn1mdW5jdGlvbiB4aW4odCxlKXtjM3QodCxlKSxfdCh0LkNiLDg4KSYmZ3koc2wodSh0LkNiLDg4KSksMil9ZnVuY3Rpb24gTXJ0KHQsZSl7X3QodC5DYiw4OCkmJmd5KHNsKHUodC5DYiw4OCkpLDQpLFFjKHQsZSl9ZnVuY3Rpb24gXyQodCxlKXtfdCh0LkNiLDE3OSkmJih1KHQuQ2IsMTc5KS50Yj1udWxsKSxRYyh0LGUpfWZ1bmN0aW9uIEJjKHQsZSl7cmV0dXJuIHRvKCksYWl0KGUpP25ldyBxaihlLHQpOm5ldyBCTShlLHQpfWZ1bmN0aW9uIGtpbih0LGUpe3ZhciBuLHI7bj1lLmMscj1uIT1udWxsLHImJlZ4KHQsbmV3IFVtKGUuYykpfWZ1bmN0aW9uIFlRdCh0KXt2YXIgZSxuO3JldHVybiBuPShjOCgpLGU9bmV3IHh3LGUpLEg4KG4sdCksbn1mdW5jdGlvbiBLUXQodCl7dmFyIGUsbjtyZXR1cm4gbj0oYzgoKSxlPW5ldyB4dyxlKSxIOChuLHQpLG59ZnVuY3Rpb24gWFF0KHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IFNoKHQpLGUuY1tlLmMubGVuZ3RoXT1uLG59ZnVuY3Rpb24gUVF0KHQsZSl7dmFyIG47cmV0dXJuIG49dShzeShXeCh0LmEpLGUpLDE0KSxuP24uZ2MoKTowfWZ1bmN0aW9uIFpRdCh0KXt2YXIgZTtyZXR1cm4gdzIodCksZT0oWjMoKSxaMygpLFNFdCksZXoodCxlKX1mdW5jdGlvbiBKUXQodCl7Zm9yKHZhciBlOzspaWYoZT10LlBiKCksIXQuT2IoKSlyZXR1cm4gZX1mdW5jdGlvbiBXdnQodCxlKXtmS2UuY2FsbCh0aGlzLG5ldyBMeCh0eSh0KSkpLGpsKGUsZmZlKSx0aGlzLmE9ZX1mdW5jdGlvbiBRZCh0LGUsbil7YWllKGUsbix0LmdjKCkpLHRoaXMuYz10LHRoaXMuYT1lLHRoaXMuYj1uLWV9ZnVuY3Rpb24gdFp0KHQsZSxuKXt2YXIgcjthaWUoZSxuLHQuYy5sZW5ndGgpLHI9bi1lLHdidCh0LmMsZSxyKX1mdW5jdGlvbiBFaW4odCxlKXtRVXQodCxBcihOcygkcChlLDI0KSxVcSkpLEFyKE5zKGUsVXEpKSl9ZnVuY3Rpb24gQW4odCxlKXtpZih0PDB8fHQ+PWUpdGhyb3cgaXQobmV3IHlvKEt4dCt0K1h4dCtlKSl9ZnVuY3Rpb24gUnIodCxlKXtpZih0PDB8fHQ+PWUpdGhyb3cgaXQobmV3IHNidChLeHQrdCtYeHQrZSkpfWZ1bmN0aW9uIF9uKHQsZSl7dGhpcy5iPShPbih0KSx0KSx0aGlzLmE9ZSZFeT9lOmV8NjR8bWR9ZnVuY3Rpb24gZVp0KHQpe0lVdCh0aGlzKSxmcXQodGhpcy5hLER5dChiLk1hdGgubWF4KDgsdCkpPDwxKX1mdW5jdGlvbiBfMSh0KXtyZXR1cm4gWW8obHQoY3QoV3MsMSksZWUsOCwwLFt0Lmkubix0Lm4sdC5hXSkpfWZ1bmN0aW9uIFRpbigpe3JldHVybiBPMSgpLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFtCRXQsVWwsSXldKX1mdW5jdGlvbiBDaW4oKXtyZXR1cm4gS2YoKSxsdChjdChPeSwxKSxvZSwyMzIsMCxbc2MsZXUsYWNdKX1mdW5jdGlvbiBfaW4oKXtyZXR1cm4gUXUoKSxsdChjdChwcGUsMSksb2UsNDYxLDAsW01kLGZiLGtmXSl9ZnVuY3Rpb24gU2luKCl7cmV0dXJuIHl1KCksbHQoY3Qod3BlLDEpLG9lLDQ2MiwwLFtuMSxkYixFZl0pfWZ1bmN0aW9uIEFpbigpe3JldHVybiBpdigpLGx0KGN0KEY3dCwxKSxvZSw0MjMsMCxbcTQsUDd0LGxsdF0pfWZ1bmN0aW9uIExpbigpe3JldHVybiBxOSgpLGx0KGN0KEQ3dCwxKSxvZSwzNzksMCxbaWx0LHJsdCxzbHRdKX1mdW5jdGlvbiBNaW4oKXtyZXR1cm4gWjkoKSxsdChjdChQOXQsMSksb2UsMzc4LDAsW3ZodCxPOXQseUddKX1mdW5jdGlvbiBEaW4oKXtyZXR1cm4gbjYoKSxsdChjdChEVHQsMSksb2UsMzE0LDAsW1A2LEVPLE1UdF0pfWZ1bmN0aW9uIElpbigpe3JldHVybiBveigpLGx0KGN0KE9UdCwxKSxvZSwzMzcsMCxbSVR0LFZWLExsdF0pfWZ1bmN0aW9uIE9pbigpe3JldHVybiBkMigpLGx0KGN0KEQyZSwxKSxvZSw0NTAsMCxbSWx0LHc3LFU0XSl9ZnVuY3Rpb24gUGluKCl7cmV0dXJuIG52KCksbHQoY3QobWx0LDEpLG9lLDM2MSwwLFtEdixwYixNdl0pfWZ1bmN0aW9uIEZpbigpe3JldHVybiBxMCgpLGx0KGN0KGoyZSwxKSxvZSwzMDMsMCxbQ08sWTQsRjZdKX1mdW5jdGlvbiBOaW4oKXtyZXR1cm4gZUUoKSxsdChjdChxbHQsMSksb2UsMjkyLDAsWyRsdCx6bHQsVE9dKX1mdW5jdGlvbiBCaW4oKXtyZXR1cm4gc28oKSxsdChjdChsbWUsMSksb2UsNDUyLDAsW09TLHRsLG51XSl9ZnVuY3Rpb24gUmluKCl7cmV0dXJuIFYwKCksbHQoY3QoSDl0LDEpLG9lLDMzOSwwLFt2YixxOXQsRWh0XSl9ZnVuY3Rpb24gamluKCl7cmV0dXJuIHl6KCksbHQoY3QoVzl0LDEpLG9lLDM3NSwwLFtHOXQsX2h0LFU5dF0pfWZ1bmN0aW9uICRpbigpe3JldHVybiBDeigpLGx0KGN0KHRfdCwxKSxvZSwzNzcsMCxbTWh0LEw3LFl5XSl9ZnVuY3Rpb24gemluKCl7cmV0dXJuIGNFKCksbHQoY3QoWDl0LDEpLG9lLDMzNiwwLFtBaHQsSzl0LFBTXSl9ZnVuY3Rpb24gcWluKCl7cmV0dXJuIHZ6KCksbHQoY3QoSjl0LDEpLG9lLDMzOCwwLFtaOXQsTGh0LFE5dF0pfWZ1bmN0aW9uIEhpbigpe3JldHVybiBldigpLGx0KGN0KEFtZSwxKSxvZSw0NTQsMCxbUk8sRlMsVEddKX1mdW5jdGlvbiBWaW4oKXtyZXR1cm4gTnooKSxsdChjdChGeWUsMSksb2UsNDQyLDAsW0dodCxIaHQsVmh0XSl9ZnVuY3Rpb24gR2luKCl7cmV0dXJuIEhEKCksbHQoY3QoVF90LDEpLG9lLDM4MCwwLFtORyxrX3QsRV90XSl9ZnVuY3Rpb24gVWluKCl7cmV0dXJuIEZ6KCksbHQoY3QocV90LDEpLG9lLDM4MSwwLFt6X3QsUWh0LCRfdF0pfWZ1bmN0aW9uIFdpbigpe3JldHVybiBteigpLGx0KGN0KFJfdCwxKSxvZSwyOTMsMCxbWGh0LEJfdCxOX3RdKX1mdW5jdGlvbiBZaW4oKXtyZXR1cm4gS0QoKSxsdChjdChaaHQsMSksb2UsNDM3LDAsW2pHLCRHLHpHXSl9ZnVuY3Rpb24gS2luKCl7cmV0dXJuIEcwKCksbHQoY3QoREF0LDEpLG9lLDMzNCwwLFt0VSxzcCxaU10pfWZ1bmN0aW9uIFhpbigpe3JldHVybiBNMSgpLGx0KGN0KG1BdCwxKSxvZSwyNzIsMCxbUDcsWnksRjddKX1mdW5jdGlvbiBRaW4odCxlKXtyZXR1cm4gdjJuKHQsZSxfdChlLDk5KSYmKHUoZSwxOCkuQmImS2EpIT0wKX1mdW5jdGlvbiBaaW4odCxlLG4pe3ZhciByO3JldHVybiByPV9fKHQsZSwhMSksci5iPD1lJiZyLmE8PW59ZnVuY3Rpb24gblp0KHQsZSxuKXt2YXIgcjtyPW5ldyBOUSxyLmI9ZSxyLmE9biwrK2UuYixsZSh0LmQscil9ZnVuY3Rpb24gSmluKHQsZSl7dmFyIG47cmV0dXJuIG49KE9uKHQpLHQpLmcscTJ0KCEhbiksT24oZSksbihlKX1mdW5jdGlvbiBZdnQodCxlKXt2YXIgbixyO3JldHVybiByPUM4KHQsZSksbj10LmEuWmMociksbmV3IHdWdCh0LG4pfWZ1bmN0aW9uIHRzbih0KXtyZXR1cm4gdC5EYj4+MTYhPTY/bnVsbDp1KGVhdCh0KSwyMzUpfWZ1bmN0aW9uIGVzbih0KXtpZih0LnAhPTIpdGhyb3cgaXQobmV3IE91KTtyZXR1cm4gQXIodC5mKSZ5c31mdW5jdGlvbiBuc24odCl7aWYodC5wIT0yKXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIEFyKHQuaykmeXN9ZnVuY3Rpb24gcnNuKHQpe3JldHVybiB0LmE9PShCOCgpLHZVKSYmQnR0KHQsUDJuKHQuZyx0LmIpKSx0LmF9ZnVuY3Rpb24gS3godCl7cmV0dXJuIHQuZD09KEI4KCksdlUpJiZfQyh0LFNtbih0LmcsdC5iKSksdC5kfWZ1bmN0aW9uIEoodCl7cmV0dXJuIFpuKHQuYTx0LmMuYy5sZW5ndGgpLHQuYj10LmErKyx0LmMuY1t0LmJdfWZ1bmN0aW9uIGlzbih0LGUpe3QuYj10LmJ8ZS5iLHQuYz10LmN8ZS5jLHQuZD10LmR8ZS5kLHQuYT10LmF8ZS5hfWZ1bmN0aW9uIE5zKHQsZSl7cmV0dXJuIEtwKFplbihCbyh0KT9MaCh0KTp0LEJvKGUpP0xoKGUpOmUpKX1mdW5jdGlvbiBTMSh0LGUpe3JldHVybiBLcChKZW4oQm8odCk/TGgodCk6dCxCbyhlKT9MaChlKTplKSl9ZnVuY3Rpb24gRHJ0KHQsZSl7cmV0dXJuIEtwKHRubihCbyh0KT9MaCh0KTp0LEJvKGUpP0xoKGUpOmUpKX1mdW5jdGlvbiBzc24odCl7cmV0dXJuIFBhKEYwKFR1KHVsKHQsMzIpKSwzMiksVHUodWwodCwzMikpKX1mdW5jdGlvbiBXdyh0KXtyZXR1cm4gTHIodCksX3QodCwxNCk/bmV3IEJ1KHUodCwxNCkpOng4KHQuS2MoKSl9ZnVuY3Rpb24gYXNuKHQsZSl7cmV0dXJuIEg5KCksdC5jPT1lLmM/TXMoZS5kLHQuZCk6TXModC5jLGUuYyl9ZnVuY3Rpb24gb3NuKHQsZSl7cmV0dXJuIEg5KCksdC5jPT1lLmM/TXModC5kLGUuZCk6TXModC5jLGUuYyl9ZnVuY3Rpb24gY3NuKHQsZSl7cmV0dXJuIEg5KCksdC5jPT1lLmM/TXModC5kLGUuZCk6TXMoZS5jLHQuYyl9ZnVuY3Rpb24gdXNuKHQsZSl7cmV0dXJuIEg5KCksdC5jPT1lLmM/TXMoZS5kLHQuZCk6TXMoZS5jLHQuYyl9ZnVuY3Rpb24gbHNuKHQsZSl7dmFyIG47bj1YdCh5ZSh0LmEuV2UoKHVpKCksSkcpKSkpLFZoZSh0LGUsbil9ZnVuY3Rpb24gaHNuKHQsZSl7dmFyIG47bj11KHRyKHQuZyxlKSw1NykseHUoZS5kLG5ldyBhR3QodCxuKSl9ZnVuY3Rpb24gZnNuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1xc2UodCkscj1xc2UoZSksbjxyPy0xOm4+cj8xOjB9ZnVuY3Rpb24gclp0KHQsZSl7dmFyIG4scjtyZXR1cm4gbj1laXQoZSkscj1uLHUodHIodC5jLHIpLDE5KS5hfWZ1bmN0aW9uIGladCh0LGUpe3ZhciBuO2ZvcihuPXQrIiI7bi5sZW5ndGg8ZTspbj0iMCIrbjtyZXR1cm4gbn1mdW5jdGlvbiBTJCh0KXtyZXR1cm4gdC5jPT1udWxsfHx0LmMubGVuZ3RoPT0wPyJuXyIrdC5nOiJuXyIrdC5jfWZ1bmN0aW9uIEt2dCh0KXtyZXR1cm4gdC5jPT1udWxsfHx0LmMubGVuZ3RoPT0wPyJuXyIrdC5iOiJuXyIrdC5jfWZ1bmN0aW9uIFh2dCh0LGUpe3JldHVybiB0JiZ0LmVxdWFscz90LmVxdWFscyhlKTpWdCh0KT09PVZ0KGUpfWZ1bmN0aW9uIFF2dCh0LGUpe3JldHVybiBlPT0wPyEhdC5vJiZ0Lm8uZiE9MDpmc3QodCxlKX1mdW5jdGlvbiBnZih0LGUsbil7dmFyIHI7dC5uJiZlJiZuJiYocj1uZXcgSlosbGUodC5lLHIpKX1mdW5jdGlvbiBJcnQodCxlLG4pe3ZhciByO3I9dC5kW2UucF0sdC5kW2UucF09dC5kW24ucF0sdC5kW24ucF09cn1mdW5jdGlvbiBzWnQodCxlLG4pe3RoaXMuZD10LHRoaXMuaj1lLHRoaXMuZT1uLHRoaXMubz0tMSx0aGlzLnA9M31mdW5jdGlvbiBhWnQodCxlLG4pe3RoaXMuZD10LHRoaXMuaz1lLHRoaXMuZj1uLHRoaXMubz0tMSx0aGlzLnA9NX1mdW5jdGlvbiBvWnQodCxlLG4pe3l3LmNhbGwodGhpcywyNSksdGhpcy5iPXQsdGhpcy5hPWUsdGhpcy5jPW59ZnVuY3Rpb24gTmwodCl7Z2koKSx5dy5jYWxsKHRoaXMsdCksdGhpcy5jPSExLHRoaXMuYT0hMX1mdW5jdGlvbiBjWnQodCxlLG4scixzLG8pe1ltdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiB1WnQodCxlLG4scixzLG8pe0ttdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBsWnQodCxlLG4scixzLG8pe21tdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBoWnQodCxlLG4scixzLG8pe1ptdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBmWnQodCxlLG4scixzLG8pe3ltdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBkWnQodCxlLG4scixzLG8pe1htdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBnWnQodCxlLG4scixzLG8pe1FtdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBwWnQodCxlLG4scixzLG8pe3htdC5jYWxsKHRoaXMsdCxlLG4scixzKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBiWnQodCxlLG4scil7dlIuY2FsbCh0aGlzLG4pLHRoaXMuYj10LHRoaXMuYz1lLHRoaXMuZD1yfWZ1bmN0aW9uIFp2dCh0LGUpe3RoaXMuYT1uZXcgaGUsdGhpcy5kPW5ldyBoZSx0aGlzLmY9dCx0aGlzLmM9ZX1mdW5jdGlvbiB3WnQoKXt0aGlzLmM9bmV3IEhVdCx0aGlzLmE9bmV3IHVRdCx0aGlzLmI9bmV3IHhxdCxQVnQoKX1mdW5jdGlvbiB2WnQoKXtpNigpLHRoaXMuYj1uZXcgX3IsdGhpcy5hPW5ldyBfcix0aGlzLmM9bmV3IGhlfWZ1bmN0aW9uIG1adCh0LGUpe3RoaXMuZz10LHRoaXMuZD0oQjgoKSx2VSksdGhpcy5hPXZVLHRoaXMuYj1lfWZ1bmN0aW9uIHladCh0LGUpe3RoaXMuZj10LHRoaXMuYT0oQjgoKSx3VSksdGhpcy5jPXdVLHRoaXMuYj1lfWZ1bmN0aW9uIEp2dCh0LGUpeyF0LmMmJih0LmM9bmV3IHNzKHQsMCkpLE9xKHQuYywoSWkoKSxsQSksZSl9ZnVuY3Rpb24gQSQoKXtBJD1aLHFodD1uZXcgS2J0KCJERlMiLDApLHdfdD1uZXcgS2J0KCJCRlMiLDEpfWZ1bmN0aW9uIGRzbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9dSh0LlpiKCkueGMoZSksMTQpLCEhciYmci5IYyhuKX1mdW5jdGlvbiB4WnQodCxlLG4pe3ZhciByO3JldHVybiByPXUodC5aYigpLnhjKGUpLDE0KSwhIXImJnIuTWMobil9ZnVuY3Rpb24ga1p0KHQsZSxuLHIpe3JldHVybiB0LmErPSIiK1BsKGU9PW51bGw/X3U6JG8oZSksbixyKSx0fWZ1bmN0aW9uIHJjKHQsZSxuLHIscyxvKXtyZXR1cm4gRm5lKHQsZSxuLG8pLHIzdCh0LHIpLGkzdCh0LHMpLHR9ZnVuY3Rpb24gT3J0KHQpe3JldHVybiBabih0LmIuYiE9dC5kLmEpLHQuYz10LmI9dC5iLmIsLS10LmEsdC5jLmN9ZnVuY3Rpb24gTjkodCl7Zm9yKDt0LmQ+MCYmdC5hWy0tdC5kXT09MDspO3QuYVt0LmQrK109PTAmJih0LmU9MCl9ZnVuY3Rpb24gRVp0KHQpe3JldHVybiB0LmE/dC5lLmxlbmd0aD09MD90LmEuYTp0LmEuYSsoIiIrdC5lKTp0LmN9ZnVuY3Rpb24gZ3NuKHQpe3JldHVybiEhdC5hJiZhbCh0LmEuYSkuaSE9MCYmISh0LmImJm1zdCh0LmIpKX1mdW5jdGlvbiBwc24odCl7cmV0dXJuISF0LnUmJkxjKHQudS5hKS5pIT0wJiYhKHQubiYmdnN0KHQubikpfWZ1bmN0aW9uIFRadCh0KXtyZXR1cm4gQm50KHQuZS5IZCgpLmdjKCkqdC5jLkhkKCkuZ2MoKSwxNixuZXcgZ3godCkpfWZ1bmN0aW9uIGJzbih0LGUpe3JldHVybiB0WHQoVHUodC5xLmdldFRpbWUoKSksVHUoZS5xLmdldFRpbWUoKSkpfWZ1bmN0aW9uIHdkKHQpe3JldHVybiB1KFAxKHQsTnQoaGx0LFdvdCwxNyx0LmMubGVuZ3RoLDAsMSkpLDQ3NCl9ZnVuY3Rpb24gbEQodCl7cmV0dXJuIHUoUDEodCxOdChsMCxZZywxMCx0LmMubGVuZ3RoLDAsMSkpLDE5Myl9ZnVuY3Rpb24gd3NuKHQpe3JldHVybiBGbCgpLCFHYSh0KSYmISghR2EodCkmJnQuYy5pLmM9PXQuZC5pLmMpfWZ1bmN0aW9uIENadCh0LGUsbil7dmFyIHI7cj0oTHIodCksbmV3IEJ1KHQpKSxXMW4obmV3IFJRdChyLGUsbikpfWZ1bmN0aW9uIGhEKHQsZSxuKXt2YXIgcjtyPShMcih0KSxuZXcgQnUodCkpLFkxbihuZXcgalF0KHIsZSxuKSl9ZnVuY3Rpb24gX1p0KHQsZSl7dmFyIG47cmV0dXJuIG49MS1lLHQuYVtuXT1keih0LmFbbl0sbiksZHoodCxlKX1mdW5jdGlvbiBTWnQodCxlKXt2YXIgbjt0LmU9bmV3IFpwdCxuPXd5KGUpLFpzKG4sdC5jKSx5dWUodCxuLDApfWZ1bmN0aW9uIGNhKHQsZSxuLHIpe3ZhciBzO3M9bmV3IGlCLHMuYT1lLHMuYj1uLHMuYz1yLHJpKHQuYSxzKX1mdW5jdGlvbiB4ZSh0LGUsbixyKXt2YXIgcztzPW5ldyBpQixzLmE9ZSxzLmI9bixzLmM9cixyaSh0LmIscyl9ZnVuY3Rpb24gcGYodCl7dmFyIGUsbixyO3JldHVybiBlPW5ldyBvWHQsbj15YXQoZSx0KSxuNW4oZSkscj1uLHJ9ZnVuY3Rpb24gdG10KCl7dmFyIHQsZSxuO3JldHVybiBlPShuPSh0PW5ldyB4dyx0KSxuKSxsZShiTHQsZSksZX1mdW5jdGlvbiBMJCh0KXtyZXR1cm4gdC5qLmM9TnQoUW4sRGUsMSwwLDUsMSksRHZ0KHQuYyksUW5uKHQuYSksdH1mdW5jdGlvbiB0NCh0KXtyZXR1cm4gR0MoKSxfdCh0LmcsMTApP3UodC5nLDEwKTpudWxsfWZ1bmN0aW9uIHZzbih0KXtyZXR1cm4gUTModCkuZGMoKT8hMTood1FlKHQsbmV3IHV0KSwhMCl9ZnVuY3Rpb24gbXNuKHQpe2lmKCEoInN0YWNrImluIHQpKXRyeXt0aHJvdyB0fWNhdGNoe31yZXR1cm4gdH1mdW5jdGlvbiBmRCh0LGUpe2lmKHQ8MHx8dD49ZSl0aHJvdyBpdChuZXcgeW8oSXBuKHQsZSkpKTtyZXR1cm4gdH1mdW5jdGlvbiBBWnQodCxlLG4pe2lmKHQ8MHx8ZTx0fHxlPm4pdGhyb3cgaXQobmV3IHlvKHJwbih0LGUsbikpKX1mdW5jdGlvbiBQcnQodCxlKXtpZihGcyh0LmEsZSksZS5kKXRocm93IGl0KG5ldyBWbyhQZmUpKTtlLmQ9dH1mdW5jdGlvbiBGcnQodCxlKXtpZihlLiRtb2RDb3VudCE9dC4kbW9kQ291bnQpdGhyb3cgaXQobmV3IHJoKX1mdW5jdGlvbiBMWnQodCxlKXtyZXR1cm4gX3QoZSw0Mik/VHN0KHQuYSx1KGUsNDIpKTohMX1mdW5jdGlvbiBNWnQodCxlKXtyZXR1cm4gX3QoZSw0Mik/VHN0KHQuYSx1KGUsNDIpKTohMX1mdW5jdGlvbiBEWnQodCxlKXtyZXR1cm4gX3QoZSw0Mik/VHN0KHQuYSx1KGUsNDIpKTohMX1mdW5jdGlvbiB5c24odCxlKXtyZXR1cm4gdC5hPD10LmI/KGUudWQodC5hKyspLCEwKTohMX1mdW5jdGlvbiBZdyh0KXt2YXIgZTtyZXR1cm4gQm8odCk/KGU9dCxlPT0tMD8wOmUpOkxvbih0KX1mdW5jdGlvbiBNJCh0KXt2YXIgZTtyZXR1cm4gVnAodCksZT1uZXcgWWUsajModC5hLG5ldyBibihlKSksZX1mdW5jdGlvbiBJWnQodCl7dmFyIGU7cmV0dXJuIFZwKHQpLGU9bmV3IFZlLGozKHQuYSxuZXcgd2UoZSkpLGV9ZnVuY3Rpb24gZGEodCxlKXt0aGlzLmE9dCxteC5jYWxsKHRoaXMsdCksS20oZSx0LmdjKCkpLHRoaXMuYj1lfWZ1bmN0aW9uIGVtdCh0KXt0aGlzLmU9dCx0aGlzLmI9dGhpcy5lLmEuZW50cmllcygpLHRoaXMuYT1uZXcgQXJyYXl9ZnVuY3Rpb24geHNuKHQpe3JldHVybiBCbnQodC5lLkhkKCkuZ2MoKSp0LmMuSGQoKS5nYygpLDI3MyxuZXcgZVIodCkpfWZ1bmN0aW9uIEQkKHQpe3JldHVybiBuZXcgWGMoKGpsKHQsWWF0KSxKJChQYShQYSg1LHQpLHQvMTB8MCkpKSl9ZnVuY3Rpb24gT1p0KHQpe3JldHVybiB1KFAxKHQsTnQoSmJlLGgxZSwxMSx0LmMubGVuZ3RoLDAsMSkpLDE5NDMpfWZ1bmN0aW9uIGtzbih0LGUsbil7cmV0dXJuIG4uZi5jLmxlbmd0aD4wP3Z2dCh0LmEsZSxuKTp2dnQodC5iLGUsbil9ZnVuY3Rpb24gRXNuKHQsZSxuKXt0LmQmJm11KHQuZC5lLHQpLHQuZD1lLHQuZCYmSG0odC5kLmUsbix0KX1mdW5jdGlvbiBOcnQodCxlKXtieG4oZSx0KSxCd3QodC5kKSxCd3QodShRKHQsKFRlKCksZEcpKSwyMDcpKX1mdW5jdGlvbiBCOSh0LGUpe3B4bihlLHQpLE53dCh0LmQpLE53dCh1KFEodCwoVGUoKSxkRykpLDIwNykpfWZ1bmN0aW9uIEt3KHQsZSl7dmFyIG4scjtyZXR1cm4gbj1CMCh0LGUpLHI9bnVsbCxuJiYocj1uLmZlKCkpLHJ9ZnVuY3Rpb24gUDgodCxlKXt2YXIgbixyO3JldHVybiBuPUptKHQsZSkscj1udWxsLG4mJihyPW4uaWUoKSkscn1mdW5jdGlvbiBSOSh0LGUpe3ZhciBuLHI7cmV0dXJuIG49QjAodCxlKSxyPW51bGwsbiYmKHI9bi5pZSgpKSxyfWZ1bmN0aW9uIFIwKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1CMCh0LGUpLHI9bnVsbCxuJiYocj1VNHQobikpLHJ9ZnVuY3Rpb24gVHNuKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1wRShuKSxBcSh0LmcscixlKSxBcSh0LmksZSxuKSxlfWZ1bmN0aW9uIENzbih0LGUsbil7dmFyIHI7cj1KaG4oKTt0cnl7cmV0dXJuIE1aZSh0LGUsbil9ZmluYWxseXtOc24ocil9fWZ1bmN0aW9uIFBadCh0KXt2YXIgZTtlPXQuV2coKSx0aGlzLmE9X3QoZSw2OSk/dShlLDY5KS5aaCgpOmUuS2MoKX1mdW5jdGlvbiBWcygpe1lxdC5jYWxsKHRoaXMpLHRoaXMuai5jPU50KFFuLERlLDEsMCw1LDEpLHRoaXMuYT0tMX1mdW5jdGlvbiBubXQodCxlLG4scil7dGhpcy5kPXQsdGhpcy5uPWUsdGhpcy5nPW4sdGhpcy5vPXIsdGhpcy5wPS0xfWZ1bmN0aW9uIEZadCh0LGUsbixyKXt0aGlzLmU9cix0aGlzLmQ9bnVsbCx0aGlzLmM9dCx0aGlzLmE9ZSx0aGlzLmI9bn1mdW5jdGlvbiBybXQodCxlLG4pe3RoaXMuZD1uZXcgYlIodGhpcyksdGhpcy5lPXQsdGhpcy5pPWUsdGhpcy5mPW59ZnVuY3Rpb24gSSQoKXtJJD1aLEhsdD1uZXcgJGJ0KHFFLDApLFpUdD1uZXcgJGJ0KCJUT1BfTEVGVCIsMSl9ZnVuY3Rpb24gTlp0KCl7Tlp0PVosbl90PURYdChwZSgxKSxwZSg0KSksZV90PURYdChwZSgxKSxwZSgyKSl9ZnVuY3Rpb24gQlp0KCl7Qlp0PVosQzNlPVdyKChxUigpLGx0KGN0KFQzZSwxKSxvZSw1NTEsMCxbdGZ0XSkpKX1mdW5jdGlvbiBSWnQoKXtSWnQ9WixFM2U9V3IoKHpSKCksbHQoY3QoZVN0LDEpLG9lLDQ4MiwwLFtKaHRdKSkpfWZ1bmN0aW9uIGpadCgpe2padD1aLEgzZT1XcigoVUMoKSxsdChjdChrU3QsMSksb2UsNTMwLDAsW1ZPXSkpKX1mdW5jdGlvbiAkWnQoKXskWnQ9WixLcGU9V3IoKGpSKCksbHQoY3QobDd0LDEpLG9lLDQ4MSwwLFtLdXRdKSkpfWZ1bmN0aW9uIF9zbigpe3JldHVybiBydigpLGx0KGN0KHFwZSwxKSxvZSw0MDYsMCxbaE8sbE8sV3V0LFl1dF0pfWZ1bmN0aW9uIFNzbigpe3JldHVybiBVJCgpLGx0KGN0KHNWLDEpLG9lLDI5NywwLFtqdXQsT0V0LFBFdCxGRXRdKX1mdW5jdGlvbiBBc24oKXtyZXR1cm4gY18oKSxsdChjdChXcGUsMSksb2UsMzk0LDAsW2JPLGxWLGhWLHdPXSl9ZnVuY3Rpb24gTHNuKCl7cmV0dXJuIHU2KCksbHQoY3QoVnBlLDEpLG9lLDMyMywwLFtkTyxmTyxnTyxwT10pfWZ1bmN0aW9uIE1zbigpe3JldHVybiBuRSgpLGx0KGN0KHpiZSwxKSxvZSw0MDUsMCxbTHYsRnksUHksejRdKX1mdW5jdGlvbiBEc24oKXtyZXR1cm4gVHooKSxsdChjdChhMmUsMSksb2UsMzYwLDAsW3dsdCxCVixSVixrT10pfWZ1bmN0aW9uIHpadCh0LGUsbixyKXtyZXR1cm4gX3Qobiw1NCk/bmV3IFNXdCh0LGUsbixyKTpuZXcgb3Z0KHQsZSxuLHIpfWZ1bmN0aW9uIElzbigpe3JldHVybiBJMSgpLGx0KGN0KHAyZSwxKSxvZSw0MTEsMCxbTzYsZjcsZDcsdmx0XSl9ZnVuY3Rpb24gT3NuKHQpe3ZhciBlO3JldHVybiB0Lmo9PSh2ZSgpLG1yKSYmKGU9dWNlKHQpLE51KGUsSG4pKX1mdW5jdGlvbiBQc24odCxlKXt2YXIgbjtuPWUuYSxPYShuLGUuYy5kKSxvYShuLGUuZC5kKSxueShuLmEsdC5uKX1mdW5jdGlvbiBxWnQodCxlKXtyZXR1cm4gdShOdyhKaih1KEFpKHQuayxlKSwxNSkuT2MoKSxINCkpLDExMyl9ZnVuY3Rpb24gSFp0KHQsZSl7cmV0dXJuIHUoTncodCQodShBaSh0LmssZSksMTUpLk9jKCksSDQpKSwxMTMpfWZ1bmN0aW9uIEZzbih0KXtyZXR1cm4gbmV3IF9uKEljbih1KHQuYS5kZCgpLDE0KS5nYygpLHQuYS5jZCgpKSwxNil9ZnVuY3Rpb24gRjgodCl7cmV0dXJuIF90KHQsMTQpP3UodCwxNCkuZGMoKTohdC5LYygpLk9iKCl9ZnVuY3Rpb24gWHgodCl7cmV0dXJuIEdDKCksX3QodC5nLDE0NSk/dSh0LmcsMTQ1KTpudWxsfWZ1bmN0aW9uIFZadCh0KXtpZih0LmUuZyE9dC5iKXRocm93IGl0KG5ldyByaCk7cmV0dXJuISF0LmMmJnQuZD4wfWZ1bmN0aW9uIHRpKHQpe3JldHVybiBabih0LmIhPXQuZC5jKSx0LmM9dC5iLHQuYj10LmIuYSwrK3QuYSx0LmMuY31mdW5jdGlvbiBpbXQodCxlKXtPbihlKSx0cyh0LmEsdC5jLGUpLHQuYz10LmMrMSZ0LmEubGVuZ3RoLTEsR3NlKHQpfWZ1bmN0aW9uIFVwKHQsZSl7T24oZSksdC5iPXQuYi0xJnQuYS5sZW5ndGgtMSx0cyh0LmEsdC5iLGUpLEdzZSh0KX1mdW5jdGlvbiBHWnQodCxlKXt2YXIgbjtmb3Iobj10LmouYy5sZW5ndGg7bjxlO24rKylsZSh0LmosdC5yZygpKX1mdW5jdGlvbiBVWnQodCxlLG4scil7dmFyIHM7cmV0dXJuIHM9cltlLmddW24uZ10sWHQoeWUoUSh0LmEscykpKX1mdW5jdGlvbiBzbXQodCxlLG4scixzKXt0aGlzLmk9dCx0aGlzLmE9ZSx0aGlzLmU9bix0aGlzLmo9cix0aGlzLmY9c31mdW5jdGlvbiBXWnQodCxlLG4scixzKXt0aGlzLmE9dCx0aGlzLmU9ZSx0aGlzLmY9bix0aGlzLmI9cix0aGlzLmc9c31mdW5jdGlvbiBOc24odCl7dCYmSW9uKChuYnQoKSxyRXQpKSwtLVpILHQmJkpIIT0tMSYmKHlYZShKSCksSkg9LTEpfWZ1bmN0aW9uIEJzbigpe3JldHVybiBjeSgpLGx0KGN0KHlodCwxKSxvZSwxOTcsMCxbeEcsbWh0LG41LGU1XSl9ZnVuY3Rpb24gUnNuKCl7cmV0dXJuIHdFKCksbHQoY3Qoc190LDEpLG9lLDM5MywwLFtBRyxSUywkTyxqU10pfWZ1bmN0aW9uIGpzbigpe3JldHVybiBlcSgpLGx0KGN0KEZfdCwxKSxvZSwzNDAsMCxbS2h0LE9fdCxQX3QsSV90XSl9ZnVuY3Rpb24gJHNuKCl7cmV0dXJuIEFsKCksbHQoY3QockEsMSksb2UsMzc0LDAsW29QLEsyLGFQLEp5XSl9ZnVuY3Rpb24genNuKCl7cmV0dXJuIHpsKCksbHQoY3QoXzRlLDEpLG9lLDI4NSwwLFtyUCxmMCxrYixuUF0pfWZ1bmN0aW9uIHFzbigpe3JldHVybiBXMCgpLGx0KGN0KF9mdCwxKSxvZSwyMTgsMCxbQ2Z0LGVQLE43LFg2XSl9ZnVuY3Rpb24gSHNuKCl7cmV0dXJuIGp6KCksbHQoY3QoJEF0LDEpLG9lLDMxMSwwLFtMZnQsQkF0LGpBdCxSQXRdKX1mdW5jdGlvbiBWc24oKXtyZXR1cm4gU2woKSxsdChjdCh6NGUsMSksb2UsMzk2LDAsW1FsLHFBdCx6QXQsSEF0XSl9ZnVuY3Rpb24gR3NuKHQpe3JldHVybiBDJCgpLFRsKFBmdCx0KT91KHRyKFBmdCx0KSwzMzEpLnVnKCk6bnVsbH1mdW5jdGlvbiBvaCh0LGUsbil7cmV0dXJuIGU8MD9ac3QodCxuKTp1KG4sNjYpLk5qKCkuU2oodCx0LnloKCksZSl9ZnVuY3Rpb24gVXNuKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1wRShuKSxBcSh0LmQscixlKSxraSh0LmUsZSxuKSxlfWZ1bmN0aW9uIFdzbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9cEUobiksQXEodC5qLHIsZSksa2kodC5rLGUsbiksZX1mdW5jdGlvbiBZWnQodCl7dmFyIGUsbjtyZXR1cm4gZT0oU3coKSxuPW5ldyBwdyxuKSx0JiZvYXQoZSx0KSxlfWZ1bmN0aW9uIGFtdCh0KXt2YXIgZTtyZXR1cm4gZT10LnJpKHQuaSksdC5pPjAmJkRjKHQuZywwLGUsMCx0LmkpLGV9ZnVuY3Rpb24gS1p0KHQsZSl7R1IoKTt2YXIgbjtyZXR1cm4gbj11KHRyKGRVLHQpLDU1KSwhbnx8bi53aihlKX1mdW5jdGlvbiBZc24odCl7aWYodC5wIT0xKXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIEFyKHQuZik8PDI0Pj4yNH1mdW5jdGlvbiBLc24odCl7aWYodC5wIT0xKXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIEFyKHQuayk8PDI0Pj4yNH1mdW5jdGlvbiBYc24odCl7aWYodC5wIT03KXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIEFyKHQuayk8PDE2Pj4xNn1mdW5jdGlvbiBRc24odCl7aWYodC5wIT03KXRocm93IGl0KG5ldyBPdSk7cmV0dXJuIEFyKHQuZik8PDE2Pj4xNn1mdW5jdGlvbiBqMCh0KXt2YXIgZTtmb3IoZT0wO3QuT2IoKTspdC5QYigpLGU9UGEoZSwxKTtyZXR1cm4gSiQoZSl9ZnVuY3Rpb24gWFp0KHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IEltLHQueGQobiksbi5hKz0iLi4iLGUueWQobiksbi5hfWZ1bmN0aW9uIFpzbih0LGUsbil7dmFyIHI7cj11KHRyKHQuZyxuKSw1NyksbGUodC5hLmMsbmV3IGZhKGUscikpfWZ1bmN0aW9uIEpzbih0LGUsbil7cmV0dXJuIFVudCh5ZShlYyhMbyh0LmYsZSkpKSx5ZShlYyhMbyh0LmYsbikpKSl9ZnVuY3Rpb24gTyQodCxlLG4pe3JldHVybiBNcSh0LGUsbixfdChlLDk5KSYmKHUoZSwxOCkuQmImS2EpIT0wKX1mdW5jdGlvbiB0YW4odCxlLG4pe3JldHVybiBERSh0LGUsbixfdChlLDk5KSYmKHUoZSwxOCkuQmImS2EpIT0wKX1mdW5jdGlvbiBlYW4odCxlLG4pe3JldHVybiBUMm4odCxlLG4sX3QoZSw5OSkmJih1KGUsMTgpLkJiJkthKSE9MCl9ZnVuY3Rpb24gb210KHQsZSl7cmV0dXJuIHQ9PShWbigpLE9zKSYmZT09T3M/NDp0PT1Pc3x8ZT09T3M/ODozMn1mdW5jdGlvbiBRWnQodCxlKXtyZXR1cm4gVnQoZSk9PT1WdCh0KT8iKHRoaXMgTWFwKSI6ZT09bnVsbD9fdTokbyhlKX1mdW5jdGlvbiBuYW4odCxlKXtyZXR1cm4gdShlPT1udWxsP2VjKExvKHQuZixudWxsKSk6S0ModC5nLGUpLDI4MSl9ZnVuY3Rpb24gWlp0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj1wRShuKSxraSh0LmIscixlKSxraSh0LmMsZSxuKSxlfWZ1bmN0aW9uIEpadCh0LGUpe3ZhciBuO2ZvcihuPWU7bjspam0odCxuLmksbi5qKSxuPWVzKG4pO3JldHVybiB0fWZ1bmN0aW9uIGNtdCh0LGUpe3ZhciBuO3JldHVybiBuPWlEKHg4KG5ldyBuaXQodCxlKSkpLFZqKG5ldyBuaXQodCxlKSksbn1mdW5jdGlvbiBaZCh0LGUpe3RvKCk7dmFyIG47cmV0dXJuIG49dSh0LDY2KS5NaigpLE5nbihuLGUpLG4uT2soZSl9ZnVuY3Rpb24gcmFuKHQsZSxuLHIscyl7dmFyIG87bz1MMm4ocyxuLHIpLGxlKGUsU3BuKHMsbykpLHZnbih0LHMsZSl9ZnVuY3Rpb24gdEp0KHQsZSxuKXt0Lmk9MCx0LmU9MCxlIT1uJiYoQ3JlKHQsZSxuKSxUcmUodCxlLG4pKX1mdW5jdGlvbiB1bXQodCxlKXt2YXIgbjtuPXQucS5nZXRIb3VycygpLHQucS5zZXRGdWxsWWVhcihlK2FiKSxFXyh0LG4pfWZ1bmN0aW9uIGlhbih0LGUsbil7aWYobil7dmFyIHI9bi5lZSgpO3QuYVtlXT1yKG4pfWVsc2UgZGVsZXRlIHQuYVtlXX1mdW5jdGlvbiBCcnQodCxlLG4pe2lmKG4pe3ZhciByPW4uZWUoKTtuPXIobil9ZWxzZSBuPXZvaWQgMDt0LmFbZV09bn1mdW5jdGlvbiBlSnQodCl7aWYodDwwKXRocm93IGl0KG5ldyBhSHQoIk5lZ2F0aXZlIGFycmF5IHNpemU6ICIrdCkpfWZ1bmN0aW9uIExjKHQpe3JldHVybiB0Lm58fChzbCh0KSx0Lm49bmV3IFBLdCh0LGhvLHQpLEFvKHQpKSx0Lm59ZnVuY3Rpb24gajkodCl7cmV0dXJuIFpuKHQuYTx0LmMuYS5sZW5ndGgpLHQuYj10LmEsY2VlKHQpLHQuYy5iW3QuYl19ZnVuY3Rpb24gbG10KHQpe3QuYiE9dC5jJiYodC5hPU50KFFuLERlLDEsOCw1LDEpLHQuYj0wLHQuYz0wKX1mdW5jdGlvbiBuSnQodCl7dGhpcy5iPW5ldyBfcix0aGlzLmM9bmV3IF9yLHRoaXMuZD1uZXcgX3IsdGhpcy5hPXR9ZnVuY3Rpb24gWG0odCxlKXtnaSgpLHl3LmNhbGwodGhpcyx0KSx0aGlzLmE9ZSx0aGlzLmM9LTEsdGhpcy5iPS0xfWZ1bmN0aW9uIFFtKHQsZSxuLHIpe3NadC5jYWxsKHRoaXMsMSxuLHIpLHRoaXMuYz10LHRoaXMuYj1lfWZ1bmN0aW9uIFJydCh0LGUsbixyKXthWnQuY2FsbCh0aGlzLDEsbixyKSx0aGlzLmM9dCx0aGlzLmI9ZX1mdW5jdGlvbiBqcnQodCxlLG4scixzLG8saCl7Zml0LmNhbGwodGhpcyxlLHIscyxvLGgpLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIHMyKHQsZSxuKXt0aGlzLmU9dCx0aGlzLmE9UW4sdGhpcy5iPSR1ZShlKSx0aGlzLmM9ZSx0aGlzLmQ9bn1mdW5jdGlvbiAkcnQodCl7dGhpcy5lPXQsdGhpcy5jPXRoaXMuZS5hLHRoaXMuYj10aGlzLmUuZyx0aGlzLmQ9dGhpcy5lLml9ZnVuY3Rpb24gckp0KHQpe3RoaXMuYz10LHRoaXMuYT11KERoKHQpLDE0OCksdGhpcy5iPXRoaXMuYS5BaigpLk5oKCl9ZnVuY3Rpb24gaG10KHQpe3RoaXMuZD10LHRoaXMuYj10aGlzLmQuYS5lbnRyaWVzKCksdGhpcy5hPXRoaXMuYi5uZXh0KCl9ZnVuY3Rpb24gYTIoKXtfci5jYWxsKHRoaXMpLEVXdCh0aGlzKSx0aGlzLmQuYj10aGlzLmQsdGhpcy5kLmE9dGhpcy5kfWZ1bmN0aW9uIGlKdCh0LGUpe293dC5jYWxsKHRoaXMpLHRoaXMuYT10LHRoaXMuYj1lLGxlKHRoaXMuYS5iLHRoaXMpfWZ1bmN0aW9uIHNhbih0LGUpe3ZhciBuO3JldHVybiBuPWUhPW51bGw/TmModCxlKTplYyhMbyh0LmYsZSkpLGRqKG4pfWZ1bmN0aW9uIGFhbih0LGUpe3ZhciBuO3JldHVybiBuPWUhPW51bGw/TmModCxlKTplYyhMbyh0LmYsZSkpLGRqKG4pfWZ1bmN0aW9uIHNKdCh0LGUpe3ZhciBuO2ZvcihuPTA7bjxlOysrbil0cyh0LG4sbmV3ICQodSh0W25dLDQyKSkpfWZ1bmN0aW9uIG9hbih0LGUpe3ZhciBuO2ZvcihuPXQuZC0xO24+PTAmJnQuYVtuXT09PWVbbl07bi0tKTtyZXR1cm4gbjwwfWZ1bmN0aW9uIGFKdCh0LGUpe29FKCk7dmFyIG47cmV0dXJuIG49dC5qLmctZS5qLmcsbiE9MD9uOjB9ZnVuY3Rpb24gb0p0KHQsZSl7cmV0dXJuIE9uKGUpLHQuYSE9bnVsbD9IZW4oZS5LYih0LmEpKTppVn1mdW5jdGlvbiBQJCh0KXt2YXIgZTtyZXR1cm4gdD9uZXcgV3d0KHQpOihlPW5ldyBPMCx4aXQoZSx0KSxlKX1mdW5jdGlvbiBCbCh0LGUpe3ZhciBuO3JldHVybiBlLmIuS2IoSnRlKHQsZS5jLkVlKCksKG49bmV3IEluKGUpLG4pKSl9ZnVuY3Rpb24gRiQodCl7TTR0KCksUVV0KHRoaXMsQXIoTnMoJHAodCwyNCksVXEpKSxBcihOcyh0LFVxKSkpfWZ1bmN0aW9uIGNKdCgpe2NKdD1aLHVwZT1XcigoR3ooKSxsdChjdCh6RXQsMSksb2UsNDI4LDAsW3F1dCwkRXRdKSkpfWZ1bmN0aW9uIHVKdCgpe3VKdD1aLGxwZT1XcigoUSQoKSxsdChjdChIRXQsMSksb2UsNDI3LDAsW3FFdCxIdXRdKSkpfWZ1bmN0aW9uIGxKdCgpe2xKdD1aLGZiZT1XcigoWiQoKSxsdChjdCh3N3QsMSksb2UsNDI0LDAsW3RsdCxnVl0pKSl9ZnVuY3Rpb24gaEp0KCl7aEp0PVoscjJlPVdyKChYOCgpLGx0KGN0KG4yZSwxKSxvZSw1MTEsMCxbeU8sZGx0XSkpKX1mdW5jdGlvbiBmSnQoKXtmSnQ9WixNMmU9V3IoKExEKCksbHQoY3QoQlR0LDEpLG9lLDQxOSwwLFtHVixOVHRdKSkpfWZ1bmN0aW9uIGRKdCgpe2RKdD1aLFAyZT1XcigoeEQoKSxsdChjdCgkVHQsMSksb2UsNDc5LDAsW2pUdCxXVl0pKSl9ZnVuY3Rpb24gZ0p0KCl7Z0p0PVosZG1lPVdyKChwRCgpLGx0KGN0KFk5dCwxKSxvZSwzNzYsMCxbU2h0LEJPXSkpKX1mdW5jdGlvbiBwSnQoKXtwSnQ9Wix1bWU9V3IoKENEKCksbHQoY3QoVjl0LDEpLG9lLDQyMSwwLFtUaHQsQ2h0XSkpKX1mdW5jdGlvbiBiSnQoKXtiSnQ9WixfMmU9V3IoKEgkKCksbHQoY3QoTFR0LDEpLG9lLDQyMiwwLFtBVHQsQWx0XSkpKX1mdW5jdGlvbiB3SnQoKXt3SnQ9Wix6MmU9V3IoKEkkKCksbHQoY3QoSlR0LDEpLG9lLDQyMCwwLFtIbHQsWlR0XSkpKX1mdW5jdGlvbiB2SnQoKXt2SnQ9WixpeWU9V3IoKFVmKCksbHQoY3QocnllLDEpLG9lLDUyMCwwLFtLeSxtYl0pKSl9ZnVuY3Rpb24gbUp0KCl7bUp0PVosUG1lPVdyKCgkOSgpLGx0KGN0KE9tZSwxKSxvZSw1MjMsMCxbQlMsTlNdKSkpfWZ1bmN0aW9uIHlKdCgpe3lKdD1aLHptZT1XcigoYmQoKSxsdChjdCgkbWUsMSksb2UsNTE2LDAsW3p2LGVwXSkpKX1mdW5jdGlvbiB4SnQoKXt4SnQ9WixIbWU9V3IoKEMxKCksbHQoY3QocW1lLDEpLG9lLDUxNSwwLFtIMixIMV0pKSl9ZnVuY3Rpb24ga0p0KCl7a0p0PVosaHllPVdyKChHdygpLGx0KGN0KGx5ZSwxKSxvZSw0NTUsMCxbeWIscjVdKSkpfWZ1bmN0aW9uIEVKdCgpe0VKdD1aLEx5ZT1XcigoQSQoKSxsdChjdCh2X3QsMSksb2UsNDI1LDAsW3FodCx3X3RdKSkpfWZ1bmN0aW9uIFRKdCgpe1RKdD1aLFB5ZT1XcigocHooKSxsdChjdChtX3QsMSksb2UsNDk1LDAsW0ZHLEQ3XSkpKX1mdW5jdGlvbiBDSnQoKXtDSnQ9WixBeWU9V3IoKFQkKCksbHQoY3QoYl90LDEpLG9lLDQ4MCwwLFt6aHQscF90XSkpKX1mdW5jdGlvbiBfSnQoKXtfSnQ9WixCeWU9V3IoKEckKCksbHQoY3QoeF90LDEpLG9lLDQyNiwwLFt5X3QsVWh0XSkpKX1mdW5jdGlvbiBTSnQoKXtTSnQ9WixWM2U9V3IoKGpEKCksbHQoY3QoVFN0LDEpLG9lLDQyOSwwLFtWRyxFU3RdKSkpfWZ1bmN0aW9uIEFKdCgpe0FKdD1aLF8zZT1XcigoYkQoKSxsdChjdChuU3QsMSksb2UsNDMwLDAsW2VmdCxxR10pKSl9ZnVuY3Rpb24gJDkoKXskOT1aLEJTPW5ldyBIYnQoIlVQUEVSIiwwKSxOUz1uZXcgSGJ0KCJMT1dFUiIsMSl9ZnVuY3Rpb24gY2FuKHQsZSl7dmFyIG47bj1uZXcgX3gscjIobiwieCIsZS5hKSxyMihuLCJ5IixlLmIpLFZ4KHQsbil9ZnVuY3Rpb24gdWFuKHQsZSl7dmFyIG47bj1uZXcgX3gscjIobiwieCIsZS5hKSxyMihuLCJ5IixlLmIpLFZ4KHQsbil9ZnVuY3Rpb24gbGFuKHQsZSl7dmFyIG4scjtyPSExO2RvIG49YnJlKHQsZSkscj1yfG47d2hpbGUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gZm10KHQsZSl7dmFyIG4scjtmb3Iobj1lLHI9MDtuPjA7KXIrPXQuYVtuXSxuLT1uJi1uO3JldHVybiByfWZ1bmN0aW9uIExKdCh0LGUpe3ZhciBuO2ZvcihuPWU7bjspam0odCwtbi5pLC1uLmopLG49ZXMobik7cmV0dXJuIHR9ZnVuY3Rpb24gdmEodCxlKXt2YXIgbixyO2ZvcihPbihlKSxyPXQuS2MoKTtyLk9iKCk7KW49ci5QYigpLGUudGQobil9ZnVuY3Rpb24gTUp0KHQsZSl7dmFyIG47cmV0dXJuIG49ZS5jZCgpLG5ldyBMdyhuLHQuZS5wYyhuLHUoZS5kZCgpLDE0KSkpfWZ1bmN0aW9uIGZzKHQsZSxuLHIpe3ZhciBzO3M9bmV3IHh0LHMuYz1lLHMuYj1uLHMuYT1yLHIuYj1uLmE9cywrK3QuYn1mdW5jdGlvbiBjaCh0LGUsbil7dmFyIHI7cmV0dXJuIHI9KEFuKGUsdC5jLmxlbmd0aCksdC5jW2VdKSx0LmNbZV09bixyfWZ1bmN0aW9uIGhhbih0LGUsbil7cmV0dXJuIHUoZT09bnVsbD9hdSh0LmYsbnVsbCxuKTpzdih0LmcsZSxuKSwyODEpfWZ1bmN0aW9uIHpydCh0KXtyZXR1cm4gdC5jJiZ0LmQ/S3Z0KHQuYykrIi0+IitLdnQodC5kKToiZV8iK1B3KHQpfWZ1bmN0aW9uIE44KHQsZSl7cmV0dXJuKHcyKHQpLHFDKG5ldyBUbih0LG5ldyBObXQoZSx0LmEpKSkpLnNkKG83KX1mdW5jdGlvbiBmYW4oKXtyZXR1cm4gV2EoKSxsdChjdChJN3QsMSksb2UsMzU2LDAsW0RkLGdiLGN1LHFjLElvXSl9ZnVuY3Rpb24gZGFuKCl7cmV0dXJuIHZlKCksbHQoY3QoWGEsMSkseGMsNjEsMCxbWm8sUG4sSG4sbXIsQm5dKX1mdW5jdGlvbiBnYW4odCl7cmV0dXJuIEFSKCksZnVuY3Rpb24oKXtyZXR1cm4gQ3NuKHQsdGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBwYW4oKXtyZXR1cm4gRGF0ZS5ub3c/RGF0ZS5ub3coKTpuZXcgRGF0ZSgpLmdldFRpbWUoKX1mdW5jdGlvbiBHYSh0KXtyZXR1cm4hdC5jfHwhdC5kPyExOiEhdC5jLmkmJnQuYy5pPT10LmQuaX1mdW5jdGlvbiBESnQodCl7aWYoIXQuYy5TYigpKXRocm93IGl0KG5ldyBsYyk7cmV0dXJuIHQuYT0hMCx0LmMuVWIoKX1mdW5jdGlvbiBkRCh0KXt0Lmk9MCxDTSh0LmIsbnVsbCksQ00odC5jLG51bGwpLHQuYT1udWxsLHQuZT1udWxsLCsrdC5nfWZ1bmN0aW9uIGRtdCh0KXtrWGUuY2FsbCh0aGlzLHQ9PW51bGw/X3U6JG8odCksX3QodCw3OCk/dSh0LDc4KTpudWxsKX1mdW5jdGlvbiBJSnQodCl7cmZlKCksbnF0KHRoaXMpLHRoaXMuYT1uZXcgWmksJHl0KHRoaXMsdCkscmkodGhpcy5hLHQpfWZ1bmN0aW9uIE9KdCgpe2FudCh0aGlzKSx0aGlzLmI9bmV3ICRlKGFzLGFzKSx0aGlzLmE9bmV3ICRlKENzLENzKX1mdW5jdGlvbiBQSnQodCxlKXt0aGlzLmM9MCx0aGlzLmI9ZSxjVXQuY2FsbCh0aGlzLHQsMTc0OTMpLHRoaXMuYT10aGlzLmN9ZnVuY3Rpb24gcXJ0KHQpe04kKCksISQxJiYodGhpcy5jPXQsdGhpcy5lPSEwLHRoaXMuYT1uZXcgaGUpfWZ1bmN0aW9uIE4kKCl7TiQ9WiwkMT0hMCxKZ2U9ITEsdHBlPSExLG5wZT0hMSxlcGU9ITF9ZnVuY3Rpb24gZ210KHQsZSl7cmV0dXJuIF90KGUsMTQ5KT9obih0LmMsdShlLDE0OSkuYyk6ITF9ZnVuY3Rpb24gcG10KHQsZSl7dmFyIG47cmV0dXJuIG49MCx0JiYobis9dC5mLmEvMiksZSYmKG4rPWUuZi5hLzIpLG59ZnVuY3Rpb24gSHJ0KHQsZSl7dmFyIG47cmV0dXJuIG49dShYdyh0LmQsZSksMjMpLG58fHUoWHcodC5lLGUpLDIzKX1mdW5jdGlvbiBGSnQodCl7dGhpcy5iPXQsbnIuY2FsbCh0aGlzLHQpLHRoaXMuYT11KERuKHRoaXMuYi5hLDQpLDEyNil9ZnVuY3Rpb24gTkp0KHQpe3RoaXMuYj10LEJ4LmNhbGwodGhpcyx0KSx0aGlzLmE9dShEbih0aGlzLmIuYSw0KSwxMjYpfWZ1bmN0aW9uIHNsKHQpe3JldHVybiB0LnR8fCh0LnQ9bmV3IFV6dCh0KSxuXyhuZXcgc0h0KHQpLDAsdC50KSksdC50fWZ1bmN0aW9uIGJhbigpe3JldHVybiBhbygpLGx0KGN0KFhTLDEpLG9lLDEwMywwLFtoMCxDZix6aCxuZyxyZ10pfWZ1bmN0aW9uIHdhbigpe3JldHVybiBsNCgpLGx0KGN0KHRBLDEpLG9lLDI0OSwwLFtFYixpUCxJQXQsSlMsT0F0XSl9ZnVuY3Rpb24gdmFuKCl7cmV0dXJuIFFmKCksbHQoY3QoaXAsMSksb2UsMTc1LDAsW3FuLGVhLFBkLFYyLHJwXSl9ZnVuY3Rpb24gbWFuKCl7cmV0dXJuIHVJKCksbHQoY3QoYVN0LDEpLG9lLDMxNiwwLFtyU3QsbmZ0LHNTdCxyZnQsaVN0XSl9ZnVuY3Rpb24geWFuKCl7cmV0dXJuIHVfKCksbHQoY3QoTjl0LDEpLG9lLDMxNSwwLFtGOXQseGh0LGtodCxEUyxJU10pfWZ1bmN0aW9uIHhhbigpe3JldHVybiB4MigpLGx0KGN0KEZUdCwxKSxvZSwzMzUsMCxbTWx0LFBUdCxEbHQsdlMsd1NdKX1mdW5jdGlvbiBrYW4oKXtyZXR1cm4gQUUoKSxsdChjdCh5M2UsMSksb2UsMzU1LDAsW2k1LEc2LEdTLFZTLFVTXSl9ZnVuY3Rpb24gRWFuKCl7cmV0dXJuIGI0KCksbHQoY3QodzJlLDEpLG9lLDM2MywwLFskVixxVixIVix6VixqVl0pfWZ1bmN0aW9uIFRhbigpe3JldHVybiBkaCgpLGx0KGN0KGZDdCwxKSxvZSwxNjMsMCxbTU8sRVMsYmIsVFMsanldKX1mdW5jdGlvbiBCOCgpe0I4PVo7dmFyIHQsZTt3VT0oYzgoKSxlPW5ldyB4UixlKSx2VT0odD1uZXcgcmV0LHQpfWZ1bmN0aW9uIEJKdCh0KXt2YXIgZTtyZXR1cm4gdC5jfHwoZT10LnIsX3QoZSw4OCkmJih0LmM9dShlLDI2KSkpLHQuY31mdW5jdGlvbiBDYW4odCl7cmV0dXJuIHQuZT0zLHQuZD10LlliKCksdC5lIT0yPyh0LmU9MCwhMCk6ITF9ZnVuY3Rpb24gVnJ0KHQpe3ZhciBlLG4scjtyZXR1cm4gZT10JmhsLG49dD4+MjImaGwscj10PDA/WjA6MCxpdShlLG4scil9ZnVuY3Rpb24gX2FuKHQpe3ZhciBlLG4scixzO2ZvcihuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sSTkoZSl9ZnVuY3Rpb24gU2FuKHQsZSl7dmFyIG4scjtuPXUoRWxuKHQuYyxlKSwxNCksbiYmKHI9bi5nYygpLG4uJGIoKSx0LmQtPXIpfWZ1bmN0aW9uIFJKdCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49ZS5jZCgpLHI9anl0KHQsbiksISFyJiZGYyhyLmUsZS5kZCgpKX1mdW5jdGlvbiBReCh0LGUpe3JldHVybiBlPT0wfHx0LmU9PTA/dDplPjA/RmllKHQsZSk6cnVlKHQsLWUpfWZ1bmN0aW9uIGJtdCh0LGUpe3JldHVybiBlPT0wfHx0LmU9PTA/dDplPjA/cnVlKHQsZSk6RmllKHQsLWUpfWZ1bmN0aW9uIE1yKHQpe2lmKHpyKHQpKXJldHVybiB0LmM9dC5hLHQuYS5QYigpO3Rocm93IGl0KG5ldyBsYyl9ZnVuY3Rpb24gakp0KHQpe3ZhciBlLG47cmV0dXJuIGU9dC5jLmksbj10LmQuaSxlLms9PShWbigpLGtzKSYmbi5rPT1rc31mdW5jdGlvbiBHcnQodCl7dmFyIGU7cmV0dXJuIGU9bmV3IFZ3LE1vKGUsdCksSnQoZSwoVGUoKSxTbyksbnVsbCksZX1mdW5jdGlvbiBVcnQodCxlLG4pe3ZhciByO3JldHVybiByPXQuWWcoZSkscj49MD90Ll9nKHIsbiwhMCk6ZHYodCxlLG4pfWZ1bmN0aW9uIHdtdCh0LGUsbixyKXt2YXIgcztmb3Iocz0wO3M8R3V0O3MrKylRaih0LmFbZS5nXVtzXSxuLHJbZS5nXSl9ZnVuY3Rpb24gdm10KHQsZSxuLHIpe3ZhciBzO2ZvcihzPTA7czxjVjtzKyspWGoodC5hW3NdW2UuZ10sbixyW2UuZ10pfWZ1bmN0aW9uIG1tdCh0LGUsbixyLHMpe3NadC5jYWxsKHRoaXMsZSxyLHMpLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIHltdCh0LGUsbixyLHMpe2FadC5jYWxsKHRoaXMsZSxyLHMpLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIHhtdCh0LGUsbixyLHMpe3pKdC5jYWxsKHRoaXMsZSxyLHMpLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIGJmKHQsZSxuLHIscyl7ekp0LmNhbGwodGhpcyxlLHIscyksdGhpcy5jPXQsdGhpcy5iPW59ZnVuY3Rpb24gJEp0KHQsZSxuKXt2Ui5jYWxsKHRoaXMsbiksdGhpcy5iPXQsdGhpcy5jPWUsdGhpcy5kPShyc3QoKSxqZnQpfWZ1bmN0aW9uIHpKdCh0LGUsbil7dGhpcy5kPXQsdGhpcy5rPWU/MTowLHRoaXMuZj1uPzE6MCx0aGlzLm89LTEsdGhpcy5wPTB9ZnVuY3Rpb24gcUp0KHQsZSxuKXt2YXIgcjtyPW5ldyB2MnQodC5hKSxZOShyLHQuYS5hKSxhdShyLmYsZSxuKSx0LmEuYT1yfWZ1bmN0aW9uIGdEKHQsZSl7dC5xaSh0LmkrMSkscDkodCx0LmksdC5vaSh0LmksZSkpLHQuYmkodC5pKyssZSksdC5jaSgpfWZ1bmN0aW9uIHo5KHQpe3ZhciBlLG47Kyt0LmosZT10Lmcsbj10LmksdC5nPW51bGwsdC5pPTAsdC5kaShuLGUpLHQuY2koKX1mdW5jdGlvbiBBMSh0KXt2YXIgZSxuO3JldHVybiBMcih0KSxlPVdubih0Lmxlbmd0aCksbj1uZXcgWGMoZSksT3l0KG4sdCksbn1mdW5jdGlvbiBaeCh0KXt2YXIgZTtyZXR1cm4gZT0oTHIodCksdD9uZXcgQnUodCk6eDgodC5LYygpKSksWXN0KGUpLER6KGUpfWZ1bmN0aW9uIEZnKHQsZSl7dmFyIG47cmV0dXJuIG49KEFuKGUsdC5jLmxlbmd0aCksdC5jW2VdKSx3YnQodC5jLGUsMSksbn1mdW5jdGlvbiBBaSh0LGUpe3ZhciBuO3JldHVybiBuPXUodC5jLnhjKGUpLDE0KSwhbiYmKG49dC5pYyhlKSksdC5wYyhlLG4pfWZ1bmN0aW9uIGttdCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49KE9uKHQpLHQpLHI9KE9uKGUpLGUpLG49PXI/MDpuPHI/LTE6MX1mdW5jdGlvbiBISnQodCl7dmFyIGU7cmV0dXJuIGU9dC5lK3QuZixpc05hTihlKSYmUGoodC5kKT90LmQ6ZX1mdW5jdGlvbiAkMCh0LGUpe3JldHVybiB0LmE/R3IodC5hLHQuYik6dC5hPW5ldyBPbCh0LmQpLGg5KHQuYSxlKSx0fWZ1bmN0aW9uIEVtdCh0LGUpe2lmKHQ8MHx8dD5lKXRocm93IGl0KG5ldyB5byhKNHQodCxlLCJpbmRleCIpKSk7cmV0dXJuIHR9ZnVuY3Rpb24gV3J0KHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPU50KENyLFhyLDI1LGUsMTUsMSksajBuKHMsdCxlLG4sciksc31mdW5jdGlvbiBBYW4odCxlKXt2YXIgbjtuPXQucS5nZXRIb3VycygpKyhlLzYwfDApLHQucS5zZXRNaW51dGVzKGUpLEVfKHQsbil9ZnVuY3Rpb24gTGFuKHQsZSl7cmV0dXJuIGIuTWF0aC5taW4oV3AoZS5hLHQuZC5kLmMpLFdwKGUuYix0LmQuZC5jKSl9ZnVuY3Rpb24gSngodCxlKXtyZXR1cm4gcmEoZSk/ZT09bnVsbD9iNXQodC5mLG51bGwpOlpuZSh0LmcsZSk6YjV0KHQuZixlKX1mdW5jdGlvbiBMMSh0KXt0aGlzLmM9dCx0aGlzLmE9bmV3IFModGhpcy5jLmEpLHRoaXMuYj1uZXcgUyh0aGlzLmMuYil9ZnVuY3Rpb24gQiQoKXt0aGlzLmU9bmV3IGhlLHRoaXMuYz1uZXcgaGUsdGhpcy5kPW5ldyBoZSx0aGlzLmI9bmV3IGhlfWZ1bmN0aW9uIFZKdCgpe3RoaXMuZz1uZXcgRnB0LHRoaXMuYj1uZXcgRnB0LHRoaXMuYT1uZXcgaGUsdGhpcy5rPW5ldyBoZX1mdW5jdGlvbiBHSnQodCxlLG4pe3RoaXMuYT10LHRoaXMuYz1lLHRoaXMuZD1uLGxlKGUuZSx0aGlzKSxsZShuLmIsdGhpcyl9ZnVuY3Rpb24gVUp0KHQsZSl7b1V0LmNhbGwodGhpcyxlLnJkKCksZS5xZCgpJi02KSxPbih0KSx0aGlzLmE9dCx0aGlzLmI9ZX1mdW5jdGlvbiBXSnQodCxlKXtjVXQuY2FsbCh0aGlzLGUucmQoKSxlLnFkKCkmLTYpLE9uKHQpLHRoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIFRtdCh0LGUpe2VudC5jYWxsKHRoaXMsZS5yZCgpLGUucWQoKSYtNiksT24odCksdGhpcy5hPXQsdGhpcy5iPWV9ZnVuY3Rpb24gUiQodCxlLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1uLGxlKHQudCx0aGlzKSxsZShlLmksdGhpcyl9ZnVuY3Rpb24gaiQoKXt0aGlzLmI9bmV3IFppLHRoaXMuYT1uZXcgWmksdGhpcy5iPW5ldyBaaSx0aGlzLmE9bmV3IFppfWZ1bmN0aW9uICQkKCl7JCQ9WixXUz1uZXcgVmkoIm9yZy5lY2xpcHNlLmVsay5sYWJlbHMubGFiZWxNYW5hZ2VyIil9ZnVuY3Rpb24gWUp0KCl7WUp0PVosRVR0PW5ldyBQcygic2VwYXJhdGVMYXllckNvbm5lY3Rpb25zIiwoVHooKSx3bHQpKX1mdW5jdGlvbiBVZigpe1VmPVosS3k9bmV3IFVidCgiUkVHVUxBUiIsMCksbWI9bmV3IFVidCgiQ1JJVElDQUwiLDEpfWZ1bmN0aW9uIHBEKCl7cEQ9WixTaHQ9bmV3IHFidCgiU1RBQ0tFRCIsMCksQk89bmV3IHFidCgiU0VRVUVOQ0VEIiwxKX1mdW5jdGlvbiBiRCgpe2JEPVosZWZ0PW5ldyBaYnQoIkZJWEVEIiwwKSxxRz1uZXcgWmJ0KCJDRU5URVJfTk9ERSIsMSl9ZnVuY3Rpb24gTWFuKHQsZSl7dmFyIG47cmV0dXJuIG49UDRuKHQsZSksdC5iPW5ldyBneihuLmMubGVuZ3RoKSxVM24odCxuKX1mdW5jdGlvbiBEYW4odCxlLG4pe3ZhciByO3JldHVybisrdC5lLC0tdC5mLHI9dSh0LmRbZV0uJGMobiksMTMzKSxyLmRkKCl9ZnVuY3Rpb24gS0p0KHQpe3ZhciBlO3JldHVybiB0LmF8fChlPXQucixfdChlLDE0OCkmJih0LmE9dShlLDE0OCkpKSx0LmF9ZnVuY3Rpb24gQ210KHQpe2lmKHQuYSl7aWYodC5lKXJldHVybiBDbXQodC5lKX1lbHNlIHJldHVybiB0O3JldHVybiBudWxsfWZ1bmN0aW9uIElhbih0LGUpe3JldHVybiB0LnA8ZS5wPzE6dC5wPmUucD8tMTowfWZ1bmN0aW9uIHokKHQsZSl7cmV0dXJuIE9uKGUpLHQuYzx0LmQ/KHQuemUoZSx0LmMrKyksITApOiExfWZ1bmN0aW9uIFhKdCh0LGUpe3JldHVybiBUbCh0LmEsZSk/KEp4KHQuYSxlKSwhMCk6ITF9ZnVuY3Rpb24gT2FuKHQpe3ZhciBlLG47cmV0dXJuIGU9dC5jZCgpLG49dSh0LmRkKCksMTQpLFhNKG4uTmMoKSxuZXcgZnR0KGUpKX1mdW5jdGlvbiBQYW4odCl7dmFyIGU7cmV0dXJuIGU9dSh5dnQodC5iLHQuYi5sZW5ndGgpLDkpLG5ldyBzaCh0LmEsZSx0LmMpfWZ1bmN0aW9uIEZhbih0KXt2YXIgZTtyZXR1cm4gdzIodCksZT1uZXcgV1l0KHQsdC5hLmUsdC5hLmR8NCksbmV3IFEydCh0LGUpfWZ1bmN0aW9uIFFKdCh0KXt2YXIgZTtmb3IoVnAodCksZT0wO3QuYS5zZChuZXcgRXMpOyllPVBhKGUsMSk7cmV0dXJuIGV9ZnVuY3Rpb24gX210KHQsZSxuKXt2YXIgcixzO2ZvcihyPTAscz0wO3M8ZS5sZW5ndGg7cysrKXIrPXQuJGYoZVtzXSxyLG4pfWZ1bmN0aW9uIE5hbih0LGUpe3ZhciBuO3QuQyYmKG49dShwbyh0LmIsZSksMTI0KS5uLG4uZD10LkMuZCxuLmE9dC5DLmEpfWZ1bmN0aW9uIHQ2KHQsZSxuKXtyZXR1cm4gZkQoZSx0LmUuSGQoKS5nYygpKSxmRChuLHQuYy5IZCgpLmdjKCkpLHQuYVtlXVtuXX1mdW5jdGlvbiBOZyh0LGUpe3JiKCksdGhpcy5lPXQsdGhpcy5kPTEsdGhpcy5hPWx0KGN0KENyLDEpLFhyLDI1LDE1LFtlXSl9ZnVuY3Rpb24gcSQodCxlLG4scil7dGhpcy5mPXQsdGhpcy5lPWUsdGhpcy5kPW4sdGhpcy5iPXIsdGhpcy5jPXI/ci5kOm51bGx9ZnVuY3Rpb24gU210KHQpe3ZhciBlLG4scixzO3M9dC5kLGU9dC5hLG49dC5iLHI9dC5jLHQuZD1uLHQuYT1yLHQuYj1zLHQuYz1lfWZ1bmN0aW9uIEJhbih0LGUsbixyKXtFbGUodCxlLG4sREUodCxlLHIsX3QoZSw5OSkmJih1KGUsMTgpLkJiJkthKSE9MCkpfWZ1bmN0aW9uIFJhbih0LGUpe3ZyKGUsIkxhYmVsIG1hbmFnZW1lbnQiLDEpLGRqKFEodCwoJCQoKSxXUykpKSxvcihlKX1mdW5jdGlvbiBYYyh0KXthbnQodGhpcyksQmoodD49MCwiSW5pdGlhbCBjYXBhY2l0eSBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpfWZ1bmN0aW9uIFpKdCgpe1pKdD1aLGdwZT1XcigoS2YoKSxsdChjdChPeSwxKSxvZSwyMzIsMCxbc2MsZXUsYWNdKSkpfWZ1bmN0aW9uIEpKdCgpe0pKdD1aLGJwZT1XcigoUXUoKSxsdChjdChwcGUsMSksb2UsNDYxLDAsW01kLGZiLGtmXSkpKX1mdW5jdGlvbiB0dGUoKXt0dGU9Wix2cGU9V3IoKHl1KCksbHQoY3Qod3BlLDEpLG9lLDQ2MiwwLFtuMSxkYixFZl0pKSl9ZnVuY3Rpb24gZXRlKCl7ZXRlPVoscnBlPVdyKChPMSgpLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFtCRXQsVWwsSXldKSkpfWZ1bmN0aW9uIG50ZSgpe250ZT1aLE9iZT1XcigocTkoKSxsdChjdChEN3QsMSksb2UsMzc5LDAsW2lsdCxybHQsc2x0XSkpKX1mdW5jdGlvbiBydGUoKXtydGU9WixZYmU9V3IoKGl2KCksbHQoY3QoRjd0LDEpLG9lLDQyMywwLFtxNCxQN3QsbGx0XSkpKX1mdW5jdGlvbiBpdGUoKXtpdGU9WixTMmU9V3IoKG42KCksbHQoY3QoRFR0LDEpLG9lLDMxNCwwLFtQNixFTyxNVHRdKSkpfWZ1bmN0aW9uIHN0ZSgpe3N0ZT1aLEEyZT1Xcigob3ooKSxsdChjdChPVHQsMSksb2UsMzM3LDAsW0lUdCxWVixMbHRdKSkpfWZ1bmN0aW9uIGF0ZSgpe2F0ZT1aLEkyZT1XcigoZDIoKSxsdChjdChEMmUsMSksb2UsNDUwLDAsW0lsdCx3NyxVNF0pKSl9ZnVuY3Rpb24gb3RlKCl7b3RlPVosRTJlPVdyKChudigpLGx0KGN0KG1sdCwxKSxvZSwzNjEsMCxbRHYscGIsTXZdKSkpfWZ1bmN0aW9uIGN0ZSgpe2N0ZT1aLCQyZT1XcigocTAoKSxsdChjdChqMmUsMSksb2UsMzAzLDAsW0NPLFk0LEY2XSkpKX1mdW5jdGlvbiB1dGUoKXt1dGU9WixSMmU9V3IoKGVFKCksbHQoY3QocWx0LDEpLG9lLDI5MiwwLFskbHQsemx0LFRPXSkpKX1mdW5jdGlvbiBsdGUoKXtsdGU9WixpbWU9V3IoKFo5KCksbHQoY3QoUDl0LDEpLG9lLDM3OCwwLFt2aHQsTzl0LHlHXSkpKX1mdW5jdGlvbiBodGUoKXtodGU9WixmbWU9V3IoKHl6KCksbHQoY3QoVzl0LDEpLG9lLDM3NSwwLFtHOXQsX2h0LFU5dF0pKSl9ZnVuY3Rpb24gZnRlKCl7ZnRlPVosY21lPVdyKChWMCgpLGx0KGN0KEg5dCwxKSxvZSwzMzksMCxbdmIscTl0LEVodF0pKSl9ZnVuY3Rpb24gZHRlKCl7ZHRlPVosaG1lPVdyKChzbygpLGx0KGN0KGxtZSwxKSxvZSw0NTIsMCxbT1MsdGwsbnVdKSkpfWZ1bmN0aW9uIGd0ZSgpe2d0ZT1aLGJtZT1XcigoQ3ooKSxsdChjdCh0X3QsMSksb2UsMzc3LDAsW01odCxMNyxZeV0pKSl9ZnVuY3Rpb24gcHRlKCl7cHRlPVosZ21lPVdyKChjRSgpLGx0KGN0KFg5dCwxKSxvZSwzMzYsMCxbQWh0LEs5dCxQU10pKSl9ZnVuY3Rpb24gYnRlKCl7YnRlPVoscG1lPVdyKCh2eigpLGx0KGN0KEo5dCwxKSxvZSwzMzgsMCxbWjl0LExodCxROXRdKSkpfWZ1bmN0aW9uIHd0ZSgpe3d0ZT1aLExtZT1XcigoZXYoKSxsdChjdChBbWUsMSksb2UsNDU0LDAsW1JPLEZTLFRHXSkpKX1mdW5jdGlvbiB2dGUoKXt2dGU9WixOeWU9V3IoKE56KCksbHQoY3QoRnllLDEpLG9lLDQ0MiwwLFtHaHQsSGh0LFZodF0pKSl9ZnVuY3Rpb24gbXRlKCl7bXRlPVosUnllPVdyKChIRCgpLGx0KGN0KFRfdCwxKSxvZSwzODAsMCxbTkcsa190LEVfdF0pKSl9ZnVuY3Rpb24geXRlKCl7eXRlPVosZTNlPVdyKChGeigpLGx0KGN0KHFfdCwxKSxvZSwzODEsMCxbel90LFFodCwkX3RdKSkpfWZ1bmN0aW9uIHh0ZSgpe3h0ZT1aLHQzZT1XcigobXooKSxsdChjdChSX3QsMSksb2UsMjkzLDAsW1hodCxCX3QsTl90XSkpKX1mdW5jdGlvbiBrdGUoKXtrdGU9WixrM2U9V3IoKEtEKCksbHQoY3QoWmh0LDEpLG9lLDQzNywwLFtqRywkRyx6R10pKSl9ZnVuY3Rpb24gRXRlKCl7RXRlPVosQzRlPVdyKChHMCgpLGx0KGN0KERBdCwxKSxvZSwzMzQsMCxbdFUsc3AsWlNdKSkpfWZ1bmN0aW9uIFR0ZSgpe1R0ZT1aLHg0ZT1XcigoTTEoKSxsdChjdChtQXQsMSksb2UsMjcyLDAsW1A3LFp5LEY3XSkpKX1mdW5jdGlvbiBqYW4oKXtyZXR1cm4gdWEoKSxsdChjdChQQXQsMSksb2UsOTgsMCxbVGIsRzEsQjcsWTIsZzAsR2NdKX1mdW5jdGlvbiBvMih0LGUpe3JldHVybiF0Lm8mJih0Lm89bmV3IF9sKChKYygpLFNiKSxIdix0LDApKSxpc3QodC5vLGUpfWZ1bmN0aW9uICRhbih0KXtyZXR1cm4hdC5nJiYodC5nPW5ldyBJayksIXQuZy5kJiYodC5nLmQ9bmV3IEh6dCh0KSksdC5nLmR9ZnVuY3Rpb24gemFuKHQpe3JldHVybiF0LmcmJih0Lmc9bmV3IElrKSwhdC5nLmEmJih0LmcuYT1uZXcgVnp0KHQpKSx0LmcuYX1mdW5jdGlvbiBxYW4odCl7cmV0dXJuIXQuZyYmKHQuZz1uZXcgSWspLCF0LmcuYiYmKHQuZy5iPW5ldyBxenQodCkpLHQuZy5ifWZ1bmN0aW9uIHdEKHQpe3JldHVybiF0LmcmJih0Lmc9bmV3IElrKSwhdC5nLmMmJih0LmcuYz1uZXcgR3p0KHQpKSx0LmcuY31mdW5jdGlvbiBIYW4odCxlLG4pe3ZhciByLHM7Zm9yKHM9bmV3IHRFKGUsdCkscj0wO3I8bjsrK3IpUXoocyk7cmV0dXJuIHN9ZnVuY3Rpb24gWXJ0KHQsZSxuKXt2YXIgcixzO2lmKG4hPW51bGwpZm9yKHI9MDtyPGU7KytyKXM9bltyXSx0LmZpKHIscyl9ZnVuY3Rpb24gS3J0KHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPU50KENyLFhyLDI1LGUrMSwxNSwxKSxDeW4ocyx0LGUsbixyKSxzfWZ1bmN0aW9uIE50KHQsZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD1Oc2UocyxyKSxzIT0xMCYmbHQoY3QodCxvKSxlLG4scyxoKSxofWZ1bmN0aW9uIFZhbih0LGUsbixyKXtyZXR1cm4gbiYmKHI9bi5naChlLEdpKG4uVGcoKSx0LmMuTGooKSksbnVsbCxyKSkscn1mdW5jdGlvbiBHYW4odCxlLG4scil7cmV0dXJuIG4mJihyPW4uaWgoZSxHaShuLlRnKCksdC5jLkxqKCkpLG51bGwscikpLHJ9ZnVuY3Rpb24gQW10KHQsZSxuKXt1KHQuYiw2NSksdSh0LmIsNjUpLHUodC5iLDY1KSx4dSh0LmEsbmV3IE9ZdChuLGUsdCkpfWZ1bmN0aW9uIExtdCh0LGUsbil7aWYodDwwfHxlPm58fGU8dCl0aHJvdyBpdChuZXcgc2J0KFdxK3QrWXh0K2UrVXh0K24pKX1mdW5jdGlvbiBSOCh0KXtpZighdCl0aHJvdyBpdChuZXcgTm8oIlVuYWJsZSB0byBhZGQgZWxlbWVudCB0byBxdWV1ZSIpKX1mdW5jdGlvbiBYcnQodCl7dD8odGhpcy5jPXQsdGhpcy5iPW51bGwpOih0aGlzLmM9bnVsbCx0aGlzLmI9bmV3IGhlKX1mdW5jdGlvbiBRcnQodCxlKXtLUi5jYWxsKHRoaXMsdCxlKSx0aGlzLmE9TnQodDZuLEhxLDQzNiwyLDAsMSksdGhpcy5iPSEwfWZ1bmN0aW9uIE1tdCh0KXtkcmUuY2FsbCh0aGlzLHQsMCksRVd0KHRoaXMpLHRoaXMuZC5iPXRoaXMuZCx0aGlzLmQuYT10aGlzLmR9ZnVuY3Rpb24gWnJ0KHQpe3ZhciBlO3JldHVybiBlPXQuYixlLmI9PTA/bnVsbDp1KFpmKGUsMCksMTg4KS5ifWZ1bmN0aW9uIEN0ZSh0LGUpe3ZhciBuO3JldHVybiBuPW5ldyB6dCxuLmM9ITAsbi5kPWUuZGQoKSxtaGUodCxlLmNkKCksbil9ZnVuY3Rpb24gVWFuKHQsZSl7dmFyIG47bj10LnEuZ2V0SG91cnMoKSsoZS8zNjAwfDApLHQucS5zZXRTZWNvbmRzKGUpLEVfKHQsbil9ZnVuY3Rpb24gRG10KHQsZSxuKXt2YXIgcjtyPXQuYltuLmMucF1bbi5wXSxyLmIrPWUuYixyLmMrPWUuYyxyLmErPWUuYSwrK3IuYX1mdW5jdGlvbiBXcCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC5hLWUuYSxyPXQuYi1lLmIsYi5NYXRoLnNxcnQobipuK3Iqcil9ZnVuY3Rpb24gSCQoKXtIJD1aLEFUdD1uZXcgQmJ0KCJRVUFEUkFUSUMiLDApLEFsdD1uZXcgQmJ0KCJTQ0FOTElORSIsMSl9ZnVuY3Rpb24gX3RlKCl7X3RlPVosbW1lPUt1KGJpKG5ldyBWcywoV2EoKSxEZCksKHJvKCksZ2x0KSksSW8seE8pfWZ1bmN0aW9uIFdhbigpe3JldHVybiBoeSgpLGx0KGN0KGRmdCwxKSxvZSwyOTEsMCxbZmZ0LFhPLEtPLGhmdCxXTyxZT10pfWZ1bmN0aW9uIFlhbigpe3JldHVybiB0MCgpLGx0KGN0KExTdCwxKSxvZSwyNDgsMCxbdWZ0LEdPLFVPLFdHLEdHLFVHXSl9ZnVuY3Rpb24gS2FuKCl7cmV0dXJuIGg2KCksbHQoY3QoYjcsMSksb2UsMjI3LDAsW3A3LGJTLGc3LE55LEc0LFY0XSl9ZnVuY3Rpb24gWGFuKCl7cmV0dXJuIGtFKCksbHQoY3QoUVR0LDEpLG9lLDI3NSwwLFttUyxXVHQsWFR0LEtUdCxZVHQsVVR0XSl9ZnVuY3Rpb24gUWFuKCl7cmV0dXJuIG9JKCksbHQoY3QoR1R0LDEpLG9lLDI3NCwwLFtZVixxVHQsVlR0LHpUdCxIVHQsUmx0XSl9ZnVuY3Rpb24gWmFuKCl7cmV0dXJuIHVxKCksbHQoY3QoSTl0LDEpLG9lLDMxMywwLFt3aHQsTTl0LGJodCxMOXQsRDl0LG1HXSl9ZnVuY3Rpb24gSmFuKCl7cmV0dXJuIGRxKCksbHQoY3QoUlR0LDEpLG9lLDI3NiwwLFtQbHQsT2x0LE5sdCxGbHQsQmx0LFVWXSl9ZnVuY3Rpb24gdG9uKCl7cmV0dXJuIHBfKCksbHQoY3QoZHllLDEpLG9lLDMyNywwLFtMRyxPaHQsRmh0LFBodCxOaHQsSWh0XSl9ZnVuY3Rpb24gZW9uKCl7cmV0dXJuIFp1KCksbHQoY3QoZVUsMSksb2UsMjczLDAsW0NiLHNnLHNQLG5BLGVBLFE2XSl9ZnVuY3Rpb24gbm9uKCl7cmV0dXJuIGhxKCksbHQoY3QoQ0F0LDEpLG9lLDMxMiwwLFtTZnQsa0F0LFRBdCx5QXQsRUF0LHhBdF0pfWZ1bmN0aW9uIHJvbigpe3JldHVybiBWbigpLGx0KGN0KGZsdCwxKSxvZSwyNjcsMCxbT3MsdGEsa3MsSGMsTGwsejFdKX1mdW5jdGlvbiBTdGUodCl7Um0oISF0LmMpLEZydCh0LmUsdCksdC5jLlFiKCksdC5jPW51bGwsdC5iPXh5dCh0KSxZMnQodC5lLHQpfWZ1bmN0aW9uIEF0ZSh0KXtyZXR1cm4gRnJ0KHQuYy5hLmUsdCksWm4odC5iIT10LmMuYS5kKSx0LmE9dC5iLHQuYj10LmIuYSx0LmF9ZnVuY3Rpb24gSW10KHQpe3ZhciBlO3JldHVybiF0LmEmJnQuYiE9LTEmJihlPXQuYy5UZygpLHQuYT15bihlLHQuYikpLHQuYX1mdW5jdGlvbiBEcih0LGUpe3JldHVybiB0LmhpKCkmJnQuSGMoZSk/ITE6KHQuWWgoZSksITApfWZ1bmN0aW9uIFdmKHQsZSl7cmV0dXJuIHNEKGUsIkhvcml6b250YWwgYWxpZ25tZW50IGNhbm5vdCBiZSBudWxsIiksdC5iPWUsdH1mdW5jdGlvbiBMdGUodCxlLG4pe2dpKCk7dmFyIHI7cmV0dXJuIHI9aWIodCxlKSxuJiZyJiZJbm4odCkmJihyPW51bGwpLHJ9ZnVuY3Rpb24gQmcodCxlLG4pe3ZhciByLHM7Zm9yKHM9dC5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwzNykseF8ocixlLG4pfWZ1bmN0aW9uIE9tdCh0LGUpe3ZhciBuLHI7Zm9yKHI9ZS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwzNyksUXVlKHQsbiwwLDApfWZ1bmN0aW9uIFBtdCh0LGUsbil7dmFyIHI7dC5kW2UuZ109bixyPXQuZy5jLHJbZS5nXT1iLk1hdGgubWF4KHJbZS5nXSxuKzEpfWZ1bmN0aW9uIHZEKHQsZSl7dmFyIG4scixzO3JldHVybiBzPXQucixyPXQuZCxuPV9fKHQsZSwhMCksbi5iIT1zfHxuLmEhPXJ9ZnVuY3Rpb24gTXRlKHQsZSl7cmV0dXJuIFdWdCh0LmUsZSl8fG0yKHQuZSxlLG5ldyBvc2UoZSkpLHUoWHcodC5lLGUpLDExMyl9ZnVuY3Rpb24gYzIodCxlLG4scil7cmV0dXJuIE9uKHQpLE9uKGUpLE9uKG4pLE9uKHIpLG5ldyBndnQodCxlLG5ldyByZSl9ZnVuY3Rpb24gX2wodCxlLG4scil7dGhpcy5yaigpLHRoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1uZXcgaHZ0KHRoaXMsZSxuLHIpfWZ1bmN0aW9uIEpydCh0LGUsbixyLHMsbyl7bm10LmNhbGwodGhpcyxlLHIscyxvKSx0aGlzLmM9dCx0aGlzLmI9bn1mdW5jdGlvbiBtRCh0LGUsbixyLHMsbyl7bm10LmNhbGwodGhpcyxlLHIscyxvKSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBpb24odCxlLG4pe3ZhciByLHMsbztyPUIwKHQsbikscz1udWxsLHImJihzPVU0dChyKSksbz1zLGlzZShlLG4sbyl9ZnVuY3Rpb24gc29uKHQsZSxuKXt2YXIgcixzLG87cj1CMCh0LG4pLHM9bnVsbCxyJiYocz1VNHQocikpLG89cyxpc2UoZSxuLG8pfWZ1bmN0aW9uIHlEKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPShyPV9FKHQuYixlKSxyKSxzP1BxKFREKHQscyksbik6bnVsbH1mdW5jdGlvbiBqOCh0LGUpe3ZhciBuO3JldHVybiBuPXQuWWcoZSksbj49MD90Ll9nKG4sITAsITApOmR2KHQsZSwhMCl9ZnVuY3Rpb24gYW9uKHQsZSl7cmV0dXJuIE1zKFh0KHllKFEodCwoYWUoKSxGdikpKSksWHQoeWUoUShlLEZ2KSkpKX1mdW5jdGlvbiBEdGUoKXtEdGU9WixEeWU9dXYodXYoVlIobmV3IFZzLCh3RSgpLFJTKSksKHBfKCksTEcpKSxPaHQpfWZ1bmN0aW9uIG9vbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9eHJlKHQsZSxuKSx0LmI9bmV3IGd6KHIuYy5sZW5ndGgpLHo1dCh0LHIpfWZ1bmN0aW9uIGNvbih0KXtpZih0LmI8PTApdGhyb3cgaXQobmV3IGxjKTtyZXR1cm4tLXQuYix0LmEtPXQuYy5jLHBlKHQuYSl9ZnVuY3Rpb24gdW9uKHQpe3ZhciBlO2lmKCF0LmEpdGhyb3cgaXQobmV3IEZYdCk7cmV0dXJuIGU9dC5hLHQuYT1lcyh0LmEpLGV9ZnVuY3Rpb24gbG9uKHQpe2Zvcig7IXQuYTspaWYoIW1ZdCh0LmMsbmV3IHplKHQpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBlNih0KXt2YXIgZTtyZXR1cm4gTHIodCksX3QodCwxOTgpPyhlPXUodCwxOTgpLGUpOm5ldyBidHQodCl9ZnVuY3Rpb24gaG9uKHQpe1YkKCksdSh0LldlKCh1aSgpLFF5KSksMTc0KS5GYygoWnUoKSxzUCkpLHQuWWUoa2Z0LG51bGwpfWZ1bmN0aW9uIFYkKCl7ViQ9WixXM2U9bmV3IExaLEszZT1uZXcgTVosWTNlPUt1bigodWkoKSxrZnQpLFczZSx4YixLM2UpfWZ1bmN0aW9uIEckKCl7RyQ9Wix5X3Q9bmV3IFFidCgiTEVBRl9OVU1CRVIiLDApLFVodD1uZXcgUWJ0KCJOT0RFX1NJWkUiLDEpfWZ1bmN0aW9uIGZvbih0LGUsbil7dC5hPWUsdC5jPW4sdC5iLmEuJGIoKSxBaCh0LmQpLHQuZS5hLmM9TnQoUW4sRGUsMSwwLDUsMSl9ZnVuY3Rpb24gdGl0KHQpe3QuYT1OdChDcixYciwyNSx0LmIrMSwxNSwxKSx0LmM9TnQoQ3IsWHIsMjUsdC5iLDE1LDEpLHQuZD0wfWZ1bmN0aW9uIGRvbih0LGUpe3QuYS51ZShlLmQsdC5iKT4wJiYobGUodC5jLG5ldyAkd3QoZS5jLGUuZCx0LmQpKSx0LmI9ZS5kKX1mdW5jdGlvbiBGbXQodCxlKXtpZih0Lmc9PW51bGx8fGU+PXQuaSl0aHJvdyBpdChuZXcgbm50KGUsdC5pKSk7cmV0dXJuIHQuZ1tlXX1mdW5jdGlvbiBJdGUodCxlLG4pe2lmKHNFKHQsbiksbiE9bnVsbCYmIXQud2oobikpdGhyb3cgaXQobmV3IHRldCk7cmV0dXJuIG59ZnVuY3Rpb24gT3RlKHQpe3ZhciBlO2lmKHQuRWsoKSlmb3IoZT10LmktMTtlPj0wOy0tZSlBdCh0LGUpO3JldHVybiBhbXQodCl9ZnVuY3Rpb24gZ29uKHQpe3ZhciBlLG47aWYoIXQuYilyZXR1cm4gbnVsbDtmb3Iobj10LmI7ZT1uLmFbMF07KW49ZTtyZXR1cm4gbn1mdW5jdGlvbiBwb24odCxlKXt2YXIgbixyO3JldHVybiBlSnQoZSksbj0ocj10LnNsaWNlKDAsZSksQm10KHIsdCkpLG4ubGVuZ3RoPWUsbn1mdW5jdGlvbiAkOCh0LGUsbixyKXt2YXIgcztyPShaMygpLHJ8fF9FdCkscz10LnNsaWNlKGUsbiksdDV0KHMsdCxlLG4sLWUscil9ZnVuY3Rpb24gdWgodCxlLG4scixzKXtyZXR1cm4gZTwwP2R2KHQsbixyKTp1KG4sNjYpLk5qKCkuUGoodCx0LnloKCksZSxyLHMpfWZ1bmN0aW9uIGJvbih0KXtyZXR1cm4gX3QodCwxNzIpPyIiK3UodCwxNzIpLmE6dD09bnVsbD9udWxsOiRvKHQpfWZ1bmN0aW9uIHdvbih0KXtyZXR1cm4gX3QodCwxNzIpPyIiK3UodCwxNzIpLmE6dD09bnVsbD9udWxsOiRvKHQpfWZ1bmN0aW9uIFB0ZSh0LGUpe2lmKGUuYSl0aHJvdyBpdChuZXcgVm8oUGZlKSk7RnModC5hLGUpLGUuYT10LCF0LmomJih0Lmo9ZSl9ZnVuY3Rpb24gTm10KHQsZSl7ZW50LmNhbGwodGhpcyxlLnJkKCksZS5xZCgpJi0xNjQ0OSksT24odCksdGhpcy5hPXQsdGhpcy5jPWV9ZnVuY3Rpb24gRnRlKHQsZSl7dmFyIG4scjtyZXR1cm4gcj1lL3QuYy5IZCgpLmdjKCl8MCxuPWUldC5jLkhkKCkuZ2MoKSx0Nih0LHIsbil9ZnVuY3Rpb24gUXUoKXtRdT1aLE1kPW5ldyBMZXQoeTYsMCksZmI9bmV3IExldChxRSwxKSxrZj1uZXcgTGV0KHg2LDIpfWZ1bmN0aW9uIFUkKCl7VSQ9WixqdXQ9bmV3IFlSKCJBbGwiLDApLE9FdD1uZXcgTVV0LFBFdD1uZXcgcVV0LEZFdD1uZXcgRFV0fWZ1bmN0aW9uIE50ZSgpe050ZT1aLFFnZT1XcigoVSQoKSxsdChjdChzViwxKSxvZSwyOTcsMCxbanV0LE9FdCxQRXQsRkV0XSkpKX1mdW5jdGlvbiBCdGUoKXtCdGU9WixxYmU9V3IoKG5FKCksbHQoY3QoemJlLDEpLG9lLDQwNSwwLFtMdixGeSxQeSx6NF0pKSl9ZnVuY3Rpb24gUnRlKCl7UnRlPVosSHBlPVdyKChydigpLGx0KGN0KHFwZSwxKSxvZSw0MDYsMCxbaE8sbE8sV3V0LFl1dF0pKSl9ZnVuY3Rpb24ganRlKCl7anRlPVosR3BlPVdyKCh1NigpLGx0KGN0KFZwZSwxKSxvZSwzMjMsMCxbZE8sZk8sZ08scE9dKSkpfWZ1bmN0aW9uICR0ZSgpeyR0ZT1aLFlwZT1XcigoY18oKSxsdChjdChXcGUsMSksb2UsMzk0LDAsW2JPLGxWLGhWLHdPXSkpKX1mdW5jdGlvbiB6dGUoKXt6dGU9WixmeWU9V3IoKHdFKCksbHQoY3Qoc190LDEpLG9lLDM5MywwLFtBRyxSUywkTyxqU10pKSl9ZnVuY3Rpb24gcXRlKCl7cXRlPVosbzJlPVdyKChUeigpLGx0KGN0KGEyZSwxKSxvZSwzNjAsMCxbd2x0LEJWLFJWLGtPXSkpKX1mdW5jdGlvbiBIdGUoKXtIdGU9WixKeWU9V3IoKGVxKCksbHQoY3QoRl90LDEpLG9lLDM0MCwwLFtLaHQsT190LFBfdCxJX3RdKSkpfWZ1bmN0aW9uIFZ0ZSgpe1Z0ZT1aLGIyZT1XcigoSTEoKSxsdChjdChwMmUsMSksb2UsNDExLDAsW082LGY3LGQ3LHZsdF0pKSl9ZnVuY3Rpb24gR3RlKCl7R3RlPVosc21lPVdyKChjeSgpLGx0KGN0KHlodCwxKSxvZSwxOTcsMCxbeEcsbWh0LG41LGU1XSkpKX1mdW5jdGlvbiBVdGUoKXtVdGU9WixxNGU9V3IoKFNsKCksbHQoY3QoejRlLDEpLG9lLDM5NiwwLFtRbCxxQXQsekF0LEhBdF0pKSl9ZnVuY3Rpb24gV3RlKCl7V3RlPVosUzRlPVdyKCh6bCgpLGx0KGN0KF80ZSwxKSxvZSwyODUsMCxbclAsZjAsa2IsblBdKSkpfWZ1bmN0aW9uIFl0ZSgpe1l0ZT1aLGs0ZT1XcigoVzAoKSxsdChjdChfZnQsMSksb2UsMjE4LDAsW0NmdCxlUCxONyxYNl0pKSl9ZnVuY3Rpb24gS3RlKCl7S3RlPVosajRlPVdyKChqeigpLGx0KGN0KCRBdCwxKSxvZSwzMTEsMCxbTGZ0LEJBdCxqQXQsUkF0XSkpKX1mdW5jdGlvbiBYdGUoKXtYdGU9WixCNGU9V3IoKEFsKCksbHQoY3QockEsMSksb2UsMzc0LDAsW29QLEsyLGFQLEp5XSkpKX1mdW5jdGlvbiBRdGUoKXtRdGU9WixEcSgpLFRMdD1hcyxWNWU9Q3MsQ0x0PW5ldyBQMyhhcyksRzVlPW5ldyBQMyhDcyl9ZnVuY3Rpb24geEQoKXt4RD1aLGpUdD1uZXcgamJ0KEowLDApLFdWPW5ldyBqYnQoIklNUFJPVkVfU1RSQUlHSFRORVNTIiwxKX1mdW5jdGlvbiB2b24odCxlKXtyZXR1cm4gazgoKSxsZSh0LG5ldyBmYShlLHBlKGUuZS5jLmxlbmd0aCtlLmcuYy5sZW5ndGgpKSl9ZnVuY3Rpb24gbW9uKHQsZSl7cmV0dXJuIGs4KCksbGUodCxuZXcgZmEoZSxwZShlLmUuYy5sZW5ndGgrZS5nLmMubGVuZ3RoKSkpfWZ1bmN0aW9uIEJtdCh0LGUpe3JldHVybiBfRChlKSE9MTAmJmx0KG9sKGUpLGUuaG0sZS5fX2VsZW1lbnRUeXBlSWQkLF9EKGUpLHQpLHR9ZnVuY3Rpb24gbXUodCxlKXt2YXIgbjtyZXR1cm4gbj1Sbyh0LGUsMCksbj09LTE/ITE6KEZnKHQsbiksITApfWZ1bmN0aW9uIFp0ZSh0LGUpe3ZhciBuO3JldHVybiBuPXUoSngodC5lLGUpLDM4Nyksbj8oSHd0KG4pLG4uZSk6bnVsbH1mdW5jdGlvbiB6OCh0KXt2YXIgZTtyZXR1cm4gQm8odCkmJihlPTAtdCwhaXNOYU4oZSkpP2U6S3AockUodCkpfWZ1bmN0aW9uIFJvKHQsZSxuKXtmb3IoO248dC5jLmxlbmd0aDsrK24paWYoRmMoZSx0LmNbbl0pKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEp0ZSh0LGUsbil7dmFyIHI7cmV0dXJuIFZwKHQpLHI9bmV3IFRpLHIuYT1lLHQuYS5OYihuZXcgS1Z0KHIsbikpLHIuYX1mdW5jdGlvbiB5b24odCl7dmFyIGU7cmV0dXJuIFZwKHQpLGU9TnQoYWEsdm8sMjUsMCwxNSwxKSxqMyh0LmEsbmV3IEZlKGUpKSxlfWZ1bmN0aW9uIGVpdCh0KXt2YXIgZSxuO3JldHVybiBuPXUoTmUodC5qLDApLDExKSxlPXUoUShuLChhZSgpLF9pKSksMTEpLGV9ZnVuY3Rpb24gUm10KHQpe3ZhciBlO2lmKCFiaXQodCkpdGhyb3cgaXQobmV3IGxjKTtyZXR1cm4gdC5lPTEsZT10LmQsdC5kPW51bGwsZX1mdW5jdGlvbiBuaXQodCxlKXt2YXIgbjt0aGlzLmY9dCx0aGlzLmI9ZSxuPXUodHIodC5iLGUpLDI4MyksdGhpcy5jPW4/bi5iOm51bGx9ZnVuY3Rpb24gdGVlKCl7ZGYoKSx0aGlzLmI9bmV3IF9yLHRoaXMuZj1uZXcgX3IsdGhpcy5nPW5ldyBfcix0aGlzLmU9bmV3IF9yfWZ1bmN0aW9uIGVlZSh0LGUpe3RoaXMuYT1OdChsMCxZZywxMCx0LmEuYy5sZW5ndGgsMCwxKSxQMSh0LmEsdGhpcy5hKSx0aGlzLmI9ZX1mdW5jdGlvbiBrRCh0KXt2YXIgZTtmb3IoZT10LnArMTtlPHQuYy5hLmMubGVuZ3RoOysrZSktLXUoTmUodC5jLmEsZSksMTApLnB9ZnVuY3Rpb24gcml0KHQpe3ZhciBlO2U9dC5BaSgpLGUhPW51bGwmJnQuZCE9LTEmJnUoZSw5MikuTmcodCksdC5pJiZ0LmkuRmkoKX1mdW5jdGlvbiBXJCh0KXt5aih0aGlzKSx0aGlzLmc9dD9tcnQodCx0LiRkKCkpOm51bGwsdGhpcy5mPXQsZCQodGhpcyksdGhpcy5fZCgpfWZ1bmN0aW9uIHowKHQsZSxuLHIscyxvLGgpe2ZpdC5jYWxsKHRoaXMsZSxyLHMsbyxoKSx0aGlzLmM9dCx0aGlzLmI9bn1mdW5jdGlvbiBabSh0LGUsbixyLHMpe3JldHVybiBPbih0KSxPbihlKSxPbihuKSxPbihyKSxPbihzKSxuZXcgZ3Z0KHQsZSxyKX1mdW5jdGlvbiBFRCh0LGUpe2lmKGU8MCl0aHJvdyBpdChuZXcgeW8oc2RlK2UpKTtyZXR1cm4gR1p0KHQsZSsxKSxOZSh0LmosZSl9ZnVuY3Rpb24gbmVlKHQsZSxuLHIpe2lmKCF0KXRocm93IGl0KG5ldyBGbih5XyhlLGx0KGN0KFFuLDEpLERlLDEsNSxbbixyXSkpKSl9ZnVuY3Rpb24gWSQodCxlKXtyZXR1cm4gRmMoZSxOZSh0LmYsMCkpfHxGYyhlLE5lKHQuZiwxKSl8fEZjKGUsTmUodC5mLDIpKX1mdW5jdGlvbiB4b24odCxlKXtqeCh1KHUodC5mLDMzKS5XZSgodWkoKSxLUykpLDk4KSkmJnhobih1cnQodSh0LmYsMzMpKSxlKX1mdW5jdGlvbiBURCh0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShlLDY3NSkscj1uLk9oKCksIXImJm4uUmgocj1uZXcgZVV0KHQsZSkpLHJ9ZnVuY3Rpb24gVG8odCxlKXt2YXIgbixyO3JldHVybiBuPXUoZSw2NzcpLHI9bi5waygpLCFyJiZuLnRrKHI9bmV3IG1adCh0LGUpKSxyfWZ1bmN0aW9uIGFsKHQpe3JldHVybiB0LmJ8fCh0LmI9bmV3IEZLdCh0LGhvLHQpLCF0LmEmJih0LmE9bmV3IEdNKHQsdCkpKSx0LmJ9ZnVuY3Rpb24gcTkoKXtxOT1aLGlsdD1uZXcgRGV0KCJYWSIsMCkscmx0PW5ldyBEZXQoIlgiLDEpLHNsdD1uZXcgRGV0KCJZIiwyKX1mdW5jdGlvbiB5dSgpe3l1PVosbjE9bmV3IE1ldCgiVE9QIiwwKSxkYj1uZXcgTWV0KHFFLDEpLEVmPW5ldyBNZXQocjZ0LDIpfWZ1bmN0aW9uIHEwKCl7cTA9WixDTz1uZXcgUmV0KEowLDApLFk0PW5ldyBSZXQoIlRPUCIsMSksRjY9bmV3IFJldChyNnQsMil9ZnVuY3Rpb24gQ0QoKXtDRD1aLFRodD1uZXcgemJ0KCJJTlBVVF9PUkRFUiIsMCksQ2h0PW5ldyB6YnQoIlBPUlRfREVHUkVFIiwxKX1mdW5jdGlvbiBxOCgpe3E4PVosc0V0PWl1KGhsLGhsLDUyNDI4NyksUmdlPWl1KDAsMCxOSSksYUV0PVZydCgxKSxWcnQoMiksb0V0PVZydCgwKX1mdW5jdGlvbiBqbXQodCxlLG4pe3QuYS5jPU50KFFuLERlLDEsMCw1LDEpLGg0bih0LGUsbiksdC5hLmMubGVuZ3RoPT0wfHxIbW4odCxlKX1mdW5jdGlvbiBLJCh0KXt2YXIgZSxuO3JldHVybiBuPXQubGVuZ3RoLGU9TnQoeGgseWQsMjUsbiwxNSwxKSxpWHQodCwwLG4sZSwwKSxlfWZ1bmN0aW9uICRtdCh0KXt2YXIgZTtyZXR1cm4gdC5kaCgpfHwoZT1Kbih0LlRnKCkpLXQuQWgoKSx0LnBoKCkuYmsoZSkpLHQuUGcoKX1mdW5jdGlvbiB6bXQodCl7dmFyIGU7cmV0dXJuIGU9dTIoRG4odCwzMikpLGU9PW51bGwmJihzdSh0KSxlPXUyKERuKHQsMzIpKSksZX1mdW5jdGlvbiBpaXQodCxlKXt2YXIgbjtyZXR1cm4gbj1HaSh0LmQsZSksbj49MD9Yeih0LG4sITAsITApOmR2KHQsZSwhMCl9ZnVuY3Rpb24gcW10KHQsZSl7R0MoKTt2YXIgbixyO3JldHVybiBuPVh4KHQpLHI9WHgoZSksISFuJiYhIXImJiFnc2Uobi5rLHIuayl9ZnVuY3Rpb24ga29uKHQsZSl7a3UodCxlPT1udWxsfHxQaigoT24oZSksZSkpfHxpc05hTigoT24oZSksZSkpPzA6KE9uKGUpLGUpKX1mdW5jdGlvbiBFb24odCxlKXtFdSh0LGU9PW51bGx8fFBqKChPbihlKSxlKSl8fGlzTmFOKChPbihlKSxlKSk/MDooT24oZSksZSkpfWZ1bmN0aW9uIFRvbih0LGUpe3R2KHQsZT09bnVsbHx8UGooKE9uKGUpLGUpKXx8aXNOYU4oKE9uKGUpLGUpKT8wOihPbihlKSxlKSl9ZnVuY3Rpb24gQ29uKHQsZSl7SncodCxlPT1udWxsfHxQaigoT24oZSksZSkpfHxpc05hTigoT24oZSksZSkpPzA6KE9uKGUpLGUpKX1mdW5jdGlvbiByZWUodCl7KHRoaXMucT90aGlzLnE6KHduKCksd24oKSx1MCkpLkFjKHQucT90LnE6KHduKCksd24oKSx1MCkpfWZ1bmN0aW9uIF9vbih0LGUpe3JldHVybiBfdChlLDk5KSYmdShlLDE4KS5CYiZLYT9uZXcgcm50KGUsdCk6bmV3IHRFKGUsdCl9ZnVuY3Rpb24gU29uKHQsZSl7cmV0dXJuIF90KGUsOTkpJiZ1KGUsMTgpLkJiJkthP25ldyBybnQoZSx0KTpuZXcgdEUoZSx0KX1mdW5jdGlvbiBpZWUodCxlKXtjN3Q9bmV3IHZwLFVwZT1lLGhTPXQsdShoUy5iLDY1KSxBbXQoaFMsYzd0LG51bGwpLFFsZShoUyl9ZnVuY3Rpb24gc2l0KHQsZSxuKXt2YXIgcjtyZXR1cm4gcj10LmdbZV0scDkodCxlLHQub2koZSxuKSksdC5naShlLG4sciksdC5jaSgpLHJ9ZnVuY3Rpb24gWCQodCxlKXt2YXIgbjtyZXR1cm4gbj10LlhjKGUpLG4+PTA/KHQuJGMobiksITApOiExfWZ1bmN0aW9uIGFpdCh0KXt2YXIgZTtyZXR1cm4gdC5kIT10LnImJihlPURoKHQpLHQuZT0hIWUmJmUuQ2ooKT09ajBlLHQuZD1lKSx0LmV9ZnVuY3Rpb24gb2l0KHQsZSl7dmFyIG47Zm9yKExyKHQpLExyKGUpLG49ITE7ZS5PYigpOyluPW58dC5GYyhlLlBiKCkpO3JldHVybiBufWZ1bmN0aW9uIFh3KHQsZSl7dmFyIG47cmV0dXJuIG49dSh0cih0LmUsZSksMzg3KSxuPyhYVXQodCxuKSxuLmUpOm51bGx9ZnVuY3Rpb24gc2VlKHQpe3ZhciBlLG47cmV0dXJuIGU9dC82MHwwLG49dCU2MCxuPT0wPyIiK2U6IiIrZSsiOiIrKCIiK24pfWZ1bmN0aW9uIFdvKHQsZSl7dmFyIG4scjtyZXR1cm4gdzIodCkscj1uZXcgVG10KGUsdC5hKSxuPW5ldyBrWXQociksbmV3IFRuKHQsbil9ZnVuY3Rpb24gSm0odCxlKXt2YXIgbj10LmFbZV0scj0oX2l0KCksUHV0KVt0eXBlb2Ygbl07cmV0dXJuIHI/cihuKTpVeXQodHlwZW9mIG4pfWZ1bmN0aW9uIEFvbih0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIHdpO2Nhc2UgMTpyZXR1cm4tMTtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBMb24odCl7cmV0dXJuIHU0dCh0LChxOCgpLG9FdCkpPDA/LUdRZShyRSh0KSk6dC5sK3QubSptNit0LmgqQzJ9ZnVuY3Rpb24gX0QodCl7cmV0dXJuIHQuX19lbGVtZW50VHlwZUNhdGVnb3J5JD09bnVsbD8xMDp0Ll9fZWxlbWVudFR5cGVDYXRlZ29yeSR9ZnVuY3Rpb24gY2l0KHQpe3ZhciBlO3JldHVybiBlPXQuYi5jLmxlbmd0aD09MD9udWxsOk5lKHQuYiwwKSxlIT1udWxsJiZ2aXQodCwwKSxlfWZ1bmN0aW9uIGFlZSh0LGUpe2Zvcig7ZVswXTx0Lmxlbmd0aCYmaGQoYCAJXHIKYCxDdSh3YSh0LGVbMF0pKSk+PTA7KSsrZVswXX1mdW5jdGlvbiBTRCh0LGUpe3RoaXMuZT1lLHRoaXMuYT1KbmUodCksdGhpcy5hPDU0P3RoaXMuZj1Zdyh0KTp0aGlzLmM9SkQodCl9ZnVuY3Rpb24gb2VlKHQsZSxuLHIpe2dpKCkseXcuY2FsbCh0aGlzLDI2KSx0aGlzLmM9dCx0aGlzLmE9ZSx0aGlzLmQ9bix0aGlzLmI9cn1mdW5jdGlvbiBKZCh0LGUsbil7dmFyIHIscztmb3Iocj0xMCxzPTA7czxuLTE7cysrKWU8ciYmKHQuYSs9IjAiKSxyKj0xMDt0LmErPWV9ZnVuY3Rpb24gTW9uKHQsZSl7dmFyIG47Zm9yKG49MDt0LmUhPXQuaS5nYygpOylUZW4oZSxkcih0KSxwZShuKSksbiE9d2kmJisrbn1mdW5jdGlvbiBIbXQodCxlKXt2YXIgbjtmb3IoKyt0LmQsKyt0LmNbZV0sbj1lKzE7bjx0LmEubGVuZ3RoOykrK3QuYVtuXSxuKz1uJi1ufWZ1bmN0aW9uIERvbih0LGUpe3ZhciBuLHIscztzPWUuYy5pLG49dSh0cih0LmYscyksNTcpLHI9bi5kLmMtbi5lLmMsZHl0KGUuYSxyLDApfWZ1bmN0aW9uIEFEKHQpe3ZhciBlLG47cmV0dXJuIGU9dCsxMjgsbj0oZkt0KCksdUV0KVtlXSwhbiYmKG49dUV0W2VdPW5ldyBxdHQodCkpLG59ZnVuY3Rpb24gVXIodCxlKXt2YXIgbjtyZXR1cm4gT24oZSksbj10WyI6IitlXSxOb24oISFuLGx0KGN0KFFuLDEpLERlLDEsNSxbZV0pKSxufWZ1bmN0aW9uIElvbih0KXt2YXIgZSxuO2lmKHQuYil7bj1udWxsO2RvIGU9dC5iLHQuYj1udWxsLG49aW9lKGUsbik7d2hpbGUodC5iKTt0LmI9bn19ZnVuY3Rpb24gT29uKHQpe3ZhciBlLG47aWYodC5hKXtuPW51bGw7ZG8gZT10LmEsdC5hPW51bGwsbj1pb2UoZSxuKTt3aGlsZSh0LmEpO3QuYT1ufX1mdW5jdGlvbiBjZWUodCl7dmFyIGU7Zm9yKCsrdC5hLGU9dC5jLmEubGVuZ3RoO3QuYTxlOysrdC5hKWlmKHQuYy5iW3QuYV0pcmV0dXJufWZ1bmN0aW9uIFBvbih0LGUpe3ZhciBuLHI7Zm9yKHI9ZS5jLG49cisxO248PWUuZjtuKyspdC5hW25dPnQuYVtyXSYmKHI9bik7cmV0dXJuIHJ9ZnVuY3Rpb24gRm9uKHQsZSl7dmFyIG47cmV0dXJuIG49YXYodC5lLmMsZS5lLmMpLG49PTA/TXModC5lLmQsZS5lLmQpOm59ZnVuY3Rpb24gZTQodCxlKXtyZXR1cm4gZS5lPT0wfHx0LmU9PTA/czc6KFRFKCksdWF0KHQsZSkpfWZ1bmN0aW9uIE5vbih0LGUpe2lmKCF0KXRocm93IGl0KG5ldyBGbihqd24oIkVudW0gY29uc3RhbnQgdW5kZWZpbmVkOiAlcyIsZSkpKX1mdW5jdGlvbiBIOSgpe0g5PVosR2JlPW5ldyB4ZyxVYmU9bmV3IFQzLEhiZT1uZXcgY0ssVmJlPW5ldyBWYixXYmU9bmV3IHVLfWZ1bmN0aW9uIFEkKCl7USQ9WixxRXQ9bmV3IE9idCgiQllfU0laRSIsMCksSHV0PW5ldyBPYnQoIkJZX1NJWkVfQU5EX1NIQVBFIiwxKX1mdW5jdGlvbiBaJCgpe1okPVosdGx0PW5ldyBQYnQoIkVBREVTIiwwKSxnVj1uZXcgUGJ0KCJGUlVDSFRFUk1BTl9SRUlOR09MRCIsMSl9ZnVuY3Rpb24gTEQoKXtMRD1aLEdWPW5ldyBSYnQoIlJFQURJTkdfRElSRUNUSU9OIiwwKSxOVHQ9bmV3IFJidCgiUk9UQVRJT04iLDEpfWZ1bmN0aW9uIHVlZSgpe3VlZT1aLEwyZT1XcigoeDIoKSxsdChjdChGVHQsMSksb2UsMzM1LDAsW01sdCxQVHQsRGx0LHZTLHdTXSkpKX1mdW5jdGlvbiBsZWUoKXtsZWU9WixhbWU9V3IoKHVfKCksbHQoY3QoTjl0LDEpLG9lLDMxNSwwLFtGOXQseGh0LGtodCxEUyxJU10pKSl9ZnVuY3Rpb24gaGVlKCl7aGVlPVosdjJlPVdyKChiNCgpLGx0KGN0KHcyZSwxKSxvZSwzNjMsMCxbJFYscVYsSFYselYsalZdKSkpfWZ1bmN0aW9uIGZlZSgpe2ZlZT1aLHEyZT1XcigoZGgoKSxsdChjdChmQ3QsMSksb2UsMTYzLDAsW01PLEVTLGJiLFRTLGp5XSkpKX1mdW5jdGlvbiBkZWUoKXtkZWU9WixTM2U9V3IoKHVJKCksbHQoY3QoYVN0LDEpLG9lLDMxNiwwLFtyU3QsbmZ0LHNTdCxyZnQsaVN0XSkpKX1mdW5jdGlvbiBnZWUoKXtnZWU9WixYM2U9V3IoKFFmKCksbHQoY3QoaXAsMSksb2UsMTc1LDAsW3FuLGVhLFBkLFYyLHJwXSkpKX1mdW5jdGlvbiBwZWUoKXtwZWU9Wix4M2U9V3IoKEFFKCksbHQoY3QoeTNlLDEpLG9lLDM1NSwwLFtpNSxHNixHUyxWUyxVU10pKSl9ZnVuY3Rpb24gYmVlKCl7YmVlPVosQmJlPVdyKChXYSgpLGx0KGN0KEk3dCwxKSxvZSwzNTYsMCxbRGQsZ2IsY3UscWMsSW9dKSkpfWZ1bmN0aW9uIHdlZSgpe3dlZT1aLHk0ZT1XcigoYW8oKSxsdChjdChYUywxKSxvZSwxMDMsMCxbaDAsQ2YsemgsbmcscmddKSkpfWZ1bmN0aW9uIHZlZSgpe3ZlZT1aLEw0ZT1XcigobDQoKSxsdChjdCh0QSwxKSxvZSwyNDksMCxbRWIsaVAsSUF0LEpTLE9BdF0pKSl9ZnVuY3Rpb24gbWVlKCl7bWVlPVosSTRlPVdyKCh2ZSgpLGx0KGN0KFhhLDEpLHhjLDYxLDAsW1pvLFBuLEhuLG1yLEJuXSkpKX1mdW5jdGlvbiB1aXQodCxlKXt2YXIgbjtyZXR1cm4gbj11KHRyKHQuYSxlKSwxMzQpLG58fChuPW5ldyBrYSxraSh0LmEsZSxuKSksbn1mdW5jdGlvbiB5ZWUodCl7dmFyIGU7cmV0dXJuIGU9dShRKHQsKGFlKCksSXYpKSwzMDUpLGU/ZS5hPT10OiExfWZ1bmN0aW9uIHhlZSh0KXt2YXIgZTtyZXR1cm4gZT11KFEodCwoYWUoKSxJdikpLDMwNSksZT9lLmk9PXQ6ITF9ZnVuY3Rpb24ga2VlKHQsZSl7cmV0dXJuIE9uKGUpLHV2dCh0KSx0LmQuT2IoKT8oZS50ZCh0LmQuUGIoKSksITApOiExfWZ1bmN0aW9uIEokKHQpe3JldHVybiB5Yyh0LHdpKT4wP3dpOnljKHQsU2EpPDA/U2E6QXIodCl9ZnVuY3Rpb24gdHkodCl7cmV0dXJuIHQ8Mz8oamwodCxiZmUpLHQrMSk6dDxEXz9wcyh0Ly43NSsxKTp3aX1mdW5jdGlvbiB5bih0LGUpe3ZhciBuO3JldHVybiBuPSh0Lmk9PW51bGwmJnZkKHQpLHQuaSksZT49MCYmZTxuLmxlbmd0aD9uW2VdOm51bGx9ZnVuY3Rpb24gWWYodCxlLG4pe3ZhciByO2lmKGU9PW51bGwpdGhyb3cgaXQobmV3IElDKTtyZXR1cm4gcj1CMCh0LGUpLGlhbih0LGUsbikscn1mdW5jdGlvbiBFZWUodCl7cmV0dXJuIHQuYT49LS4wMSYmdC5hPD1CMSYmKHQuYT0wKSx0LmI+PS0uMDEmJnQuYjw9QjEmJih0LmI9MCksdH1mdW5jdGlvbiBUZWUodCxlKXtyZXR1cm4gZT09KEFudCgpLEFudCgpLFlnZSk/dC50b0xvY2FsZUxvd2VyQ2FzZSgpOnQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBWbXQodCl7cmV0dXJuKHQuaSYyPyJpbnRlcmZhY2UgIjp0LmkmMT8iIjoiY2xhc3MgIikrKFAwKHQpLHQubyl9ZnVuY3Rpb24gQ28odCl7dmFyIGUsbjtuPShlPW5ldyBpZXQsZSksRHIoKCF0LnEmJih0LnE9bmV3IGZlKFdoLHQsMTEsMTApKSx0LnEpLG4pfWZ1bmN0aW9uIEJvbih0LGUpe3ZhciBuO3JldHVybiBuPWU+MD9lLTE6ZSx5SHQoUUtlKEtlZShxd3QobmV3IHI4LG4pLHQubiksdC5qKSx0LmspfWZ1bmN0aW9uIFJvbih0LGUsbixyKXt2YXIgczt0Lmo9LTEsZDV0KHQsVzR0KHQsZSxuKSwodG8oKSxzPXUoZSw2NikuTWooKSxzLk9rKHIpKSl9ZnVuY3Rpb24gQ2VlKHQpe3RoaXMuZz10LHRoaXMuZj1uZXcgaGUsdGhpcy5hPWIuTWF0aC5taW4odGhpcy5nLmMuYyx0aGlzLmcuZC5jKX1mdW5jdGlvbiBfZWUodCl7dGhpcy5iPW5ldyBoZSx0aGlzLmE9bmV3IGhlLHRoaXMuYz1uZXcgaGUsdGhpcy5kPW5ldyBoZSx0aGlzLmU9dH1mdW5jdGlvbiBTZWUodCxlKXt0aGlzLmE9bmV3IF9yLHRoaXMuZT1uZXcgX3IsdGhpcy5iPShaOSgpLHlHKSx0aGlzLmM9dCx0aGlzLmI9ZX1mdW5jdGlvbiBBZWUodCxlLG4pe0lqLmNhbGwodGhpcyksR210KHRoaXMpLHRoaXMuYT10LHRoaXMuYz1uLHRoaXMuYj1lLmQsdGhpcy5mPWUuZX1mdW5jdGlvbiBMZWUodCl7dGhpcy5kPXQsdGhpcy5jPXQuYy52YygpLktjKCksdGhpcy5iPW51bGwsdGhpcy5hPW51bGwsdGhpcy5lPShUUigpLE11dCl9ZnVuY3Rpb24gUXcodCl7aWYodDwwKXRocm93IGl0KG5ldyBGbigiSWxsZWdhbCBDYXBhY2l0eTogIit0KSk7dGhpcy5nPXRoaXMucmkodCl9ZnVuY3Rpb24gam9uKHQsZSl7aWYoMD50fHx0PmUpdGhyb3cgaXQobmV3IGlidCgiZnJvbUluZGV4OiAwLCB0b0luZGV4OiAiK3QrVXh0K2UpKX1mdW5jdGlvbiAkb24odCl7dmFyIGU7aWYodC5hPT10LmIuYSl0aHJvdyBpdChuZXcgbGMpO3JldHVybiBlPXQuYSx0LmM9ZSx0LmE9dC5hLmUsZX1mdW5jdGlvbiB0eih0KXt2YXIgZTtSbSghIXQuYyksZT10LmMuYSxsaCh0LmQsdC5jKSx0LmI9PXQuYz90LmI9ZTotLXQuYSx0LmM9bnVsbH1mdW5jdGlvbiBleih0LGUpe3ZhciBuO3JldHVybiB3Mih0KSxuPW5ldyBRWHQodCx0LmEucmQoKSx0LmEucWQoKXw0LGUpLG5ldyBUbih0LG4pfWZ1bmN0aW9uIHpvbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShzeSh0LmQsZSksMTQpLG4/KHI9ZSx0LmUucGMocixuKSk6bnVsbH1mdW5jdGlvbiBueih0LGUpe3ZhciBuLHI7Zm9yKHI9dC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw3MCksSnQobiwoYWUoKSxqNiksZSl9ZnVuY3Rpb24gcW9uKHQpe3ZhciBlO3JldHVybiBlPVh0KHllKFEodCwoVGUoKSxKZykpKSksZTwwJiYoZT0wLEp0KHQsSmcsZSkpLGV9ZnVuY3Rpb24gSG9uKHQsZSxuKXt2YXIgcjtyPWIuTWF0aC5tYXgoMCx0LmIvMi0uNSksaF8obixyLDEpLGxlKGUsbmV3IGVHdChuLHIpKX1mdW5jdGlvbiBWb24odCxlLG4pe3ZhciByO3JldHVybiByPXQuYS5lW3UoZS5hLDEwKS5wXS10LmEuZVt1KG4uYSwxMCkucF0scHMoSk0ocikpfWZ1bmN0aW9uIE1lZSh0LGUsbixyLHMsbyl7dmFyIGg7aD1HcnQociksT2EoaCxzKSxvYShoLG8pLGxuKHQuYSxyLG5ldyBGaihoLGUsbi5mKSl9ZnVuY3Rpb24gRGVlKHQsZSl7dmFyIG47aWYobj1tSSh0LlRnKCksZSksIW4pdGhyb3cgaXQobmV3IEZuKGxiK2UrV2N0KSk7cmV0dXJuIG59ZnVuY3Rpb24gZXkodCxlKXt2YXIgbjtmb3Iobj10O2VzKG4pOylpZihuPWVzKG4pLG49PWUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gR29uKHQsZSl7dmFyIG4scixzO2ZvcihyPWUuYS5jZCgpLG49dShlLmEuZGQoKSwxNCkuZ2MoKSxzPTA7czxuO3MrKyl0LnRkKHIpfWZ1bmN0aW9uIHh1KHQsZSl7dmFyIG4scixzLG87Zm9yKE9uKGUpLHI9dC5jLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGUudGQobil9ZnVuY3Rpb24gbGgodCxlKXt2YXIgbjtyZXR1cm4gbj1lLmMsZS5hLmI9ZS5iLGUuYi5hPWUuYSxlLmE9ZS5iPW51bGwsZS5jPW51bGwsLS10LmIsbn1mdW5jdGlvbiBVb24odCxlKXtyZXR1cm4gZSYmdC5iW2UuZ109PWU/KHRzKHQuYixlLmcsbnVsbCksLS10LmMsITApOiExfWZ1bmN0aW9uIEllZSh0LGUpe3JldHVybiEhVzkodCxlLEFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpKX1mdW5jdGlvbiBXb24odCxlKXtqeCh1KFEodSh0LmUsMTApLChUZSgpLGNzKSksOTgpKSYmKHduKCksWnModSh0LmUsMTApLmosZSkpfWZ1bmN0aW9uIEdtdCh0KXt0LmI9KFF1KCksZmIpLHQuZj0oeXUoKSxkYiksdC5kPShqbCgyLGt5KSxuZXcgWGMoMikpLHQuZT1uZXcgQ2F9ZnVuY3Rpb24gS2YoKXtLZj1aLHNjPW5ldyBBZXQoIkJFR0lOIiwwKSxldT1uZXcgQWV0KHFFLDEpLGFjPW5ldyBBZXQoIkVORCIsMil9ZnVuY3Rpb24gTTEoKXtNMT1aLFA3PW5ldyBaZXQocUUsMCksWnk9bmV3IFpldCgiSEVBRCIsMSksRjc9bmV3IFpldCgiVEFJTCIsMil9ZnVuY3Rpb24gWW9uKCl7cmV0dXJuIENFKCksbHQoY3QoZlUsMSksb2UsMjM3LDAsW09mdCxsVSxoVSx1VSxJZnQsY1Usb1UsRGZ0XSl9ZnVuY3Rpb24gS29uKCl7cmV0dXJuIFVnKCksbHQoY3QoUTNlLDEpLG9lLDI3NywwLFtfU3QsTGEsZ2MsSTcsT28sdXMsVTYsVjFdKX1mdW5jdGlvbiBYb24oKXtyZXR1cm4gRXEoKSxsdChjdChTVHQsMSksb2UsMjcwLDAsW3hsdCxUbHQseWx0LFNsdCxFbHQsa2x0LF9sdCxDbHRdKX1mdW5jdGlvbiBRb24oKXtyZXR1cm4geTQoKSxsdChjdCh6OXQsMSksb2UsMjYwLDAsW2tHLEZPLE5PLFI5dCxqOXQsQjl0LCQ5dCxFR10pfWZ1bmN0aW9uIE9lZSgpe09lZT1aLE00ZT1XcigodWEoKSxsdChjdChQQXQsMSksb2UsOTgsMCxbVGIsRzEsQjcsWTIsZzAsR2NdKSkpfWZ1bmN0aW9uIFBlZSgpe1BlZT1aLGNWPShLZigpLGx0KGN0KE95LDEpLG9lLDIzMiwwLFtzYyxldSxhY10pKS5sZW5ndGgsR3V0PWNWfWZ1bmN0aW9uIHJ6KHQpe3RoaXMuYj0oTHIodCksbmV3IEJ1KHQpKSx0aGlzLmE9bmV3IGhlLHRoaXMuZD1uZXcgaGUsdGhpcy5lPW5ldyBDYX1mdW5jdGlvbiBab24odCl7dmFyIGU7cmV0dXJuIGU9Yi5NYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSxlPjAmJih0LmEvPWUsdC5iLz1lKSx0fWZ1bmN0aW9uIFJsKHQpe3ZhciBlO3JldHVybiB0Lnc/dC53OihlPXRzbih0KSxlJiYhZS5raCgpJiYodC53PWUpLGUpfWZ1bmN0aW9uIEpvbih0KXt2YXIgZTtyZXR1cm4gdD09bnVsbD9udWxsOihlPXUodCwxOTApLHRnbihlLGUubGVuZ3RoKSl9ZnVuY3Rpb24gQXQodCxlKXtpZih0Lmc9PW51bGx8fGU+PXQuaSl0aHJvdyBpdChuZXcgbm50KGUsdC5pKSk7cmV0dXJuIHQubGkoZSx0LmdbZV0pfWZ1bmN0aW9uIHRjbih0KXt2YXIgZSxuO2ZvcihlPXQuYS5kLmosbj10LmMuZC5qO2UhPW47KXZmKHQuYixlKSxlPU96KGUpO3ZmKHQuYixlKX1mdW5jdGlvbiBlY24odCl7dmFyIGU7Zm9yKGU9MDtlPHQuYy5sZW5ndGg7ZSsrKShBbihlLHQuYy5sZW5ndGgpLHUodC5jW2VdLDExKSkucD1lfWZ1bmN0aW9uIG5jbih0LGUsbil7dmFyIHIscyxvO2ZvcihzPWVbbl0scj0wO3I8cy5sZW5ndGg7cisrKW89c1tyXSx0LmVbby5jLnBdW28ucF09cn1mdW5jdGlvbiBsaXQodCxlKXt2YXIgbixyLHMsbztmb3Iocj10LmQscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sRTEodC5nLG4pLmE9ZX1mdW5jdGlvbiBueSh0LGUpe3ZhciBuLHI7Zm9yKHI9ZWkodCwwKTtyLmIhPXIuZC5jOyluPXUodGkociksOCksTGkobixlKTtyZXR1cm4gdH1mdW5jdGlvbiByY24odCxlKXt2YXIgbjtyZXR1cm4gbj1pYShuYyh1KHRyKHQuZyxlKSw4KSksdzJ0KHUodHIodC5mLGUpLDQ2MCkuYikpLG59ZnVuY3Rpb24gWncodCl7dmFyIGU7cmV0dXJuIEZydCh0LmUsdCksWm4odC5iKSx0LmM9dC5hLGU9dSh0LmEuUGIoKSw0MiksdC5iPXh5dCh0KSxlfWZ1bmN0aW9uIHUyKHQpe3ZhciBlO3JldHVybiBrOSh0PT1udWxsfHxBcnJheS5pc0FycmF5KHQpJiYoZT1fRCh0KSwhKGU+PTE0JiZlPD0xNikpKSx0fWZ1bmN0aW9uIEZlZSh0LGUsbil7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShyLGFyZ3VtZW50cyl9O3JldHVybiBlLmFwcGx5KHIsbikscn1mdW5jdGlvbiBOZWUodCxlLG4pe3ZhciByLHM7cj1lO2RvIHM9WHQodC5wW3IucF0pK24sdC5wW3IucF09cyxyPXQuYVtyLnBdO3doaWxlKHIhPWUpfWZ1bmN0aW9uIEg4KHQsZSl7dmFyIG4scjtyPXQuYSxuPUZsbih0LGUsbnVsbCksciE9ZSYmIXQuZSYmKG49UEUodCxlLG4pKSxuJiZuLkZpKCl9ZnVuY3Rpb24gVW10KHQsZSl7cmV0dXJuIGsxKCksd2Yoc2IpLGIuTWF0aC5hYnModC1lKTw9c2J8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKX1mdW5jdGlvbiBXbXQodCxlKXtyZXR1cm4gazEoKSx3ZihzYiksYi5NYXRoLmFicyh0LWUpPD1zYnx8dD09ZXx8aXNOYU4odCkmJmlzTmFOKGUpfWZ1bmN0aW9uIGljbih0LGUpe3JldHVybiBuYigpLHB1KHQuYi5jLmxlbmd0aC10LmUuYy5sZW5ndGgsZS5iLmMubGVuZ3RoLWUuZS5jLmxlbmd0aCl9ZnVuY3Rpb24gbjQodCxlKXtyZXR1cm4gblhlKFU5KHQsZSxBcihfYShpMCxYZChBcihfYShlPT1udWxsPzA6SGkoZSksczApKSwxNSkpKSkpfWZ1bmN0aW9uIEJlZSgpe0JlZT1aLFpiZT1XcigoVm4oKSxsdChjdChmbHQsMSksb2UsMjY3LDAsW09zLHRhLGtzLEhjLExsLHoxXSkpKX1mdW5jdGlvbiBSZWUoKXtSZWU9WixzNGU9V3IoKGh5KCksbHQoY3QoZGZ0LDEpLG9lLDI5MSwwLFtmZnQsWE8sS08saGZ0LFdPLFlPXSkpKX1mdW5jdGlvbiBqZWUoKXtqZWU9WixKM2U9V3IoKHQwKCksbHQoY3QoTFN0LDEpLG9lLDI0OCwwLFt1ZnQsR08sVU8sV0csR0csVUddKSkpfWZ1bmN0aW9uICRlZSgpeyRlZT1aLEMyZT1XcigoaDYoKSxsdChjdChiNywxKSxvZSwyMjcsMCxbcDcsYlMsZzcsTnksRzQsVjRdKSkpfWZ1bmN0aW9uIHplZSgpe3plZT1aLE4yZT1Xcigoa0UoKSxsdChjdChRVHQsMSksb2UsMjc1LDAsW21TLFdUdCxYVHQsS1R0LFlUdCxVVHRdKSkpfWZ1bmN0aW9uIHFlZSgpe3FlZT1aLEYyZT1Xcigob0koKSxsdChjdChHVHQsMSksb2UsMjc0LDAsW1lWLHFUdCxWVHQselR0LEhUdCxSbHRdKSkpfWZ1bmN0aW9uIEhlZSgpe0hlZT1aLHJtZT1XcigodXEoKSxsdChjdChJOXQsMSksb2UsMzEzLDAsW3dodCxNOXQsYmh0LEw5dCxEOXQsbUddKSkpfWZ1bmN0aW9uIFZlZSgpe1ZlZT1aLE8yZT1XcigoZHEoKSxsdChjdChSVHQsMSksb2UsMjc2LDAsW1BsdCxPbHQsTmx0LEZsdCxCbHQsVVZdKSkpfWZ1bmN0aW9uIEdlZSgpe0dlZT1aLGd5ZT1XcigocF8oKSxsdChjdChkeWUsMSksb2UsMzI3LDAsW0xHLE9odCxGaHQsUGh0LE5odCxJaHRdKSkpfWZ1bmN0aW9uIFVlZSgpe1VlZT1aLEQ0ZT1XcigoWnUoKSxsdChjdChlVSwxKSxvZSwyNzMsMCxbQ2Isc2csc1AsbkEsZUEsUTZdKSkpfWZ1bmN0aW9uIFdlZSgpe1dlZT1aLEU0ZT1XcigoaHEoKSxsdChjdChDQXQsMSksb2UsMzEyLDAsW1NmdCxrQXQsVEF0LHlBdCxFQXQseEF0XSkpKX1mdW5jdGlvbiBzY24oKXtyZXR1cm4gcHkoKSxsdChjdChsbywxKSxvZSw5MywwLFtfZixpZyxTZixMZixkMCxIaCxZbCxBZixxaF0pfWZ1bmN0aW9uIGl6KHQsZSl7dmFyIG47bj10LmEsdC5hPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsMCxuLHQuYSkpfWZ1bmN0aW9uIHN6KHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsMSxuLHQuYikpfWZ1bmN0aW9uIFY4KHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsMyxuLHQuYikpfWZ1bmN0aW9uIEp3KHQsZSl7dmFyIG47bj10LmYsdC5mPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsMyxuLHQuZikpfWZ1bmN0aW9uIHR2KHQsZSl7dmFyIG47bj10LmcsdC5nPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsNCxuLHQuZykpfWZ1bmN0aW9uIGt1KHQsZSl7dmFyIG47bj10LmksdC5pPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsNSxuLHQuaSkpfWZ1bmN0aW9uIEV1KHQsZSl7dmFyIG47bj10LmosdC5qPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsNixuLHQuaikpfWZ1bmN0aW9uIEc4KHQsZSl7dmFyIG47bj10LmosdC5qPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsMSxuLHQuaikpfWZ1bmN0aW9uIFU4KHQsZSl7dmFyIG47bj10LmMsdC5jPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsNCxuLHQuYykpfWZ1bmN0aW9uIFc4KHQsZSl7dmFyIG47bj10LmssdC5rPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFFtKHQsMixuLHQuaykpfWZ1bmN0aW9uIGhpdCh0LGUpe3ZhciBuO249dC5kLHQuZD1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBScnQodCwyLG4sdC5kKSl9ZnVuY3Rpb24gUmcodCxlKXt2YXIgbjtuPXQucyx0LnM9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgUnJ0KHQsNCxuLHQucykpfWZ1bmN0aW9uIHJ5KHQsZSl7dmFyIG47bj10LnQsdC50PWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IFJydCh0LDUsbix0LnQpKX1mdW5jdGlvbiBZOCh0LGUpe3ZhciBuO249dC5GLHQuRj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsNSxuLGUpKX1mdW5jdGlvbiBNRCh0LGUpe3ZhciBuO3JldHVybiBuPXUodHIoKEdSKCksZFUpLHQpLDU1KSxuP24ueGooZSk6TnQoUW4sRGUsMSxlLDUsMSl9ZnVuY3Rpb24gSDAodCxlKXt2YXIgbixyO3JldHVybiBuPWUgaW4gdC5hLG4mJihyPUIwKHQsZSkuaGUoKSxyKT9yLmE6bnVsbH1mdW5jdGlvbiBhY24odCxlKXt2YXIgbixyLHM7cmV0dXJuIG49KHI9KFN3KCkscz1uZXcgWlQscyksZSYmRjV0KHIsZSksciksbnl0KG4sdCksbn1mdW5jdGlvbiBZZWUodCxlLG4pe2lmKHNFKHQsbiksIXQuQmsoKSYmbiE9bnVsbCYmIXQud2oobikpdGhyb3cgaXQobmV3IHRldCk7cmV0dXJuIG59ZnVuY3Rpb24gS2VlKHQsZSl7cmV0dXJuIHQubj1lLHQubj8odC5mPW5ldyBoZSx0LmU9bmV3IGhlKToodC5mPW51bGwsdC5lPW51bGwpLHR9ZnVuY3Rpb24ganIodCxlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPXJydCh0LGUpLFFlZShuLGgpLGguaT1zPzg6MCxoLmY9cixoLmU9cyxoLmc9byxofWZ1bmN0aW9uIFltdCh0LGUsbixyLHMpe3RoaXMuZD1lLHRoaXMuaz1yLHRoaXMuZj1zLHRoaXMubz0tMSx0aGlzLnA9MSx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBLbXQodCxlLG4scixzKXt0aGlzLmQ9ZSx0aGlzLms9cix0aGlzLmY9cyx0aGlzLm89LTEsdGhpcy5wPTIsdGhpcy5jPXQsdGhpcy5hPW59ZnVuY3Rpb24gWG10KHQsZSxuLHIscyl7dGhpcy5kPWUsdGhpcy5rPXIsdGhpcy5mPXMsdGhpcy5vPS0xLHRoaXMucD02LHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIFFtdCh0LGUsbixyLHMpe3RoaXMuZD1lLHRoaXMuaz1yLHRoaXMuZj1zLHRoaXMubz0tMSx0aGlzLnA9Nyx0aGlzLmM9dCx0aGlzLmE9bn1mdW5jdGlvbiBabXQodCxlLG4scixzKXt0aGlzLmQ9ZSx0aGlzLmo9cix0aGlzLmU9cyx0aGlzLm89LTEsdGhpcy5wPTQsdGhpcy5jPXQsdGhpcy5hPW59ZnVuY3Rpb24gWGVlKHQsZSl7dmFyIG4scixzLG87Zm9yKHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxQdGUodC5hLG4pO3JldHVybiB0fWZ1bmN0aW9uIEQxKHQpe3ZhciBlLG4scixzO2ZvcihuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sTHIoZSk7cmV0dXJuIG5ldyBiVXQodCl9ZnVuY3Rpb24gb2NuKHQpe3ZhciBlPS9mdW5jdGlvbig/OlxzKyhbXHckXSspKT9ccypcKC8sbj1lLmV4ZWModCk7cmV0dXJuIG4mJm5bMV18fEthdH1mdW5jdGlvbiBRZWUodCxlKXtpZih0KXtlLm49dDt2YXIgbj1maW4oZSk7aWYoIW4pe1FIW3RdPVtlXTtyZXR1cm59bi5nbT1lfX1mdW5jdGlvbiBjY24odCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5sZW5ndGgscj1iLk1hdGgubWluKG4scyksbjV0KHQsMCxlLDAsciwhMCksZX1mdW5jdGlvbiBaZWUodCxlLG4pe3ZhciByLHM7Zm9yKHM9ZS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw3OSksRnModCx1KG4uS2IociksMzMpKX1mdW5jdGlvbiB1Y24oKXtuVnQoKTtmb3IodmFyIHQ9VHV0LGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQucHVzaChhcmd1bWVudHNbZV0pfWZ1bmN0aW9uIFY5KHQsZSl7dmFyIG4scixzLG87Zm9yKHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxmcyh0LG4sdC5jLmIsdC5jKX1mdW5jdGlvbiBheih0LGUpe3QuYj1iLk1hdGgubWF4KHQuYixlLmQpLHQuZSs9ZS5yKyh0LmEuYy5sZW5ndGg9PTA/MDp0LmMpLGxlKHQuYSxlKX1mdW5jdGlvbiBKZWUodCl7Um0odC5jPj0wKSxhZm4odC5kLHQuYyk8MCYmKHQuYT10LmEtMSZ0LmQuYS5sZW5ndGgtMSx0LmI9dC5kLmMpLHQuYz0tMX1mdW5jdGlvbiBKbXQodCl7cmV0dXJuIHQuYTw1ND90LmY8MD8tMTp0LmY+MD8xOjA6KCF0LmMmJih0LmM9VkQodC5mKSksdC5jKS5lfWZ1bmN0aW9uIHdmKHQpe2lmKCEodD49MCkpdGhyb3cgaXQobmV3IEZuKCJ0b2xlcmFuY2UgKCIrdCsiKSBtdXN0IGJlID49IDAiKSk7cmV0dXJuIHR9ZnVuY3Rpb24gSzgoKXtyZXR1cm4gb2Z0fHwob2Z0PW5ldyBqdWUsbzQob2Z0LGx0KGN0KCQ0LDEpLERlLDEzMCwwLFtuZXcgVHBdKSkpLG9mdH1mdW5jdGlvbiBzbygpe3NvPVosT1M9bmV3IHpldChOXywwKSx0bD1uZXcgemV0KCJJTlBVVCIsMSksbnU9bmV3IHpldCgiT1VUUFVUIiwyKX1mdW5jdGlvbiBveigpe296PVosSVR0PW5ldyBGZXQoIkFSRCIsMCksVlY9bmV3IEZldCgiTVNEIiwxKSxMbHQ9bmV3IEZldCgiTUFOVUFMIiwyKX1mdW5jdGlvbiBldigpe2V2PVosUk89bmV3IFVldCgiQkFSWUNFTlRFUiIsMCksRlM9bmV3IFVldChFMWUsMSksVEc9bmV3IFVldChUMWUsMil9ZnVuY3Rpb24gREQodCxlKXt2YXIgbjtpZihuPXQuZ2MoKSxlPDB8fGU+bil0aHJvdyBpdChuZXcgcW0oZSxuKSk7cmV0dXJuIG5ldyB3d3QodCxlKX1mdW5jdGlvbiB0bmUodCxlKXt2YXIgbjtyZXR1cm4gX3QoZSw0Mik/dC5jLk1jKGUpOihuPWlzdCh0LGUpLHF6KHQsZSksbil9ZnVuY3Rpb24gYm8odCxlLG4pe3JldHVybiBiMih0LGUpLFFjKHQsbiksUmcodCwwKSxyeSh0LDEpLHFnKHQsITApLHpnKHQsITApLHR9ZnVuY3Rpb24gamwodCxlKXtpZih0PDApdGhyb3cgaXQobmV3IEZuKGUrIiBjYW5ub3QgYmUgbmVnYXRpdmUgYnV0IHdhczogIit0KSk7cmV0dXJuIHR9ZnVuY3Rpb24gZW5lKHQsZSl7dmFyIG4scjtmb3Iobj0wLHI9dC5nYygpO248cjsrK24paWYoRmMoZSx0LlhiKG4pKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBjeih0KXt2YXIgZSxuO2ZvcihuPXQuYy5DYygpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDE0KSxlLiRiKCk7dC5jLiRiKCksdC5kPTB9ZnVuY3Rpb24gbGNuKHQpe3ZhciBlLG4scixzO2ZvcihuPXQuYSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxyWHQoZSxlLmxlbmd0aCxudWxsKX1mdW5jdGlvbiB0eXQodCl7dmFyIGUsbjtpZih0PT0wKXJldHVybiAzMjtmb3Iobj0wLGU9MTshKGUmdCk7ZTw8PTEpKytuO3JldHVybiBufWZ1bmN0aW9uIGhjbih0KXt2YXIgZSxuO2ZvcihuPW5ldyBTKHpzZSh0KSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNjgwKSxlLkdmKCl9ZnVuY3Rpb24gbm5lKHQpe3lidCgpLHRoaXMuZz1uZXcgX3IsdGhpcy5mPW5ldyBfcix0aGlzLmI9bmV3IF9yLHRoaXMuYz1uZXcgVXcsdGhpcy5pPXR9ZnVuY3Rpb24gZXl0KCl7dGhpcy5mPW5ldyBDYSx0aGlzLmQ9bmV3IEhwdCx0aGlzLmM9bmV3IENhLHRoaXMuYT1uZXcgaGUsdGhpcy5iPW5ldyBoZX1mdW5jdGlvbiBybmUodCxlLG4scil7dGhpcy5yaigpLHRoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1udWxsLHRoaXMuYz1uZXcgcFl0KHRoaXMsZSxuLHIpfWZ1bmN0aW9uIGZpdCh0LGUsbixyLHMpe3RoaXMuZD10LHRoaXMubj1lLHRoaXMuZz1uLHRoaXMubz1yLHRoaXMucD0tMSxzfHwodGhpcy5vPS0yLXItMSl9ZnVuY3Rpb24gaW5lKCl7eDJ0LmNhbGwodGhpcyksdGhpcy5uPS0xLHRoaXMuZz1udWxsLHRoaXMuaT1udWxsLHRoaXMuaj1udWxsLHRoaXMuQmJ8PXhmfWZ1bmN0aW9uIGZjbigpe3JldHVybiBsbCgpLGx0KGN0KE5BdCwxKSxvZSwyNTksMCxbUjcsdVAsblUsaUEsclUsc1UsaVUsQWZ0LGNQXSl9ZnVuY3Rpb24gZGNuKCl7cmV0dXJuIENxKCksbHQoY3Qoczd0LDEpLG9lLDI1MCwwLFtpN3QsdDd0LGU3dCxKRXQsVnV0LHI3dCxuN3QsWkV0LFFFdF0pfWZ1bmN0aW9uIHNuZSgpe3NuZT1aLGpnZT1sdChjdChDciwxKSxYciwyNSwxNSxbMCw4LDQsMTIsMiwxMCw2LDE0LDEsOSw1LDEzLDMsMTEsNywxNV0pfWZ1bmN0aW9uIGFuZSgpe2FuZT1aLHhtZT1iaShiaShiaShuZXcgVnMsKFdhKCksRGQpLChybygpLGdTKSksZ2IsaDcpLGN1LGw3KX1mdW5jdGlvbiBvbmUoKXtvbmU9WixrbWU9YmkoYmkoYmkobmV3IFZzLChXYSgpLERkKSwocm8oKSxnUykpLGdiLGg3KSxjdSxsNyl9ZnVuY3Rpb24gY25lKCl7Y25lPVosRW1lPWJpKGJpKGJpKG5ldyBWcywoV2EoKSxEZCksKHJvKCksZ1MpKSxnYixoNyksY3UsbDcpfWZ1bmN0aW9uIHVuZSgpe3VuZT1aLF9tZT1LdShiaShiaShuZXcgVnMsKFdhKCksY3UpLChybygpLExWKSkscWMsVFYpLElvLEFWKX1mdW5jdGlvbiBuNigpe242PVosUDY9bmV3IFBldCgiTEFZRVJfU1dFRVAiLDApLEVPPW5ldyBQZXQoWG90LDEpLE1UdD1uZXcgUGV0KEowLDIpfWZ1bmN0aW9uIGdjbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC5jLHI9ZS5lW3QucF0scj4wP3UoTmUobi5hLHItMSksMTApOm51bGx9ZnVuY3Rpb24gRzkodCxlKXt2YXIgbjtuPXQuayx0Lms9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDIsbix0LmspKX1mdW5jdGlvbiB1eih0LGUpe3ZhciBuO249dC5mLHQuZj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsOCxuLHQuZikpfWZ1bmN0aW9uIGx6KHQsZSl7dmFyIG47bj10LmksdC5pPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSw3LG4sdC5pKSl9ZnVuY3Rpb24gbnl0KHQsZSl7dmFyIG47bj10LmEsdC5hPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSw4LG4sdC5hKSl9ZnVuY3Rpb24gcnl0KHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwwLG4sdC5iKSl9ZnVuY3Rpb24gaXl0KHQsZSl7dmFyIG47bj10LmIsdC5iPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwwLG4sdC5iKSl9ZnVuY3Rpb24gc3l0KHQsZSl7dmFyIG47bj10LmMsdC5jPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxLG4sdC5jKSl9ZnVuY3Rpb24gYXl0KHQsZSl7dmFyIG47bj10LmMsdC5jPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxLG4sdC5jKSl9ZnVuY3Rpb24gZGl0KHQsZSl7dmFyIG47bj10LmMsdC5jPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSw0LG4sdC5jKSl9ZnVuY3Rpb24gb3l0KHQsZSl7dmFyIG47bj10LmQsdC5kPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxLG4sdC5kKSl9ZnVuY3Rpb24gZ2l0KHQsZSl7dmFyIG47bj10LkQsdC5EPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwyLG4sdC5EKSl9ZnVuY3Rpb24gcGl0KHQsZSl7dC5yPjAmJnQuYzx0LnImJih0LmMrPWUsdC5pJiZ0LmkuZD4wJiZ0LmchPTAmJnBpdCh0LmksZS90LnIqdC5pLmQpKX1mdW5jdGlvbiBwY24odCxlLG4pe3ZhciByO3QuYj1lLHQuYT1uLHI9KHQuYSY1MTIpPT01MTI/bmV3IFZxdDpuZXcgWEwsdC5jPUR2bihyLHQuYix0LmEpfWZ1bmN0aW9uIGxuZSh0LGUpe3JldHVybiBYMCh0LmUsZSk/KHRvKCksYWl0KGUpP25ldyBxaihlLHQpOm5ldyBCTShlLHQpKTpuZXcgblV0KGUsdCl9ZnVuY3Rpb24gaHoodCxlKXtyZXR1cm4gZVhlKFc5KHQuYSxlLEFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpKSl9ZnVuY3Rpb24gYmNuKHQsZSxuKXtyZXR1cm4gWm0odCxuZXcgZ2UoZSksbmV3IEtuLG5ldyBiZShuKSxsdChjdChmbCwxKSxvZSwxMzIsMCxbXSkpfWZ1bmN0aW9uIHdjbih0KXt2YXIgZSxuO3JldHVybiAwPnQ/bmV3IG1idDooZT10KzEsbj1uZXcgUEp0KGUsdCksbmV3IFoydChudWxsLG4pKX1mdW5jdGlvbiB2Y24odCxlKXt3bigpO3ZhciBuO3JldHVybiBuPW5ldyBMeCgxKSxyYSh0KT9rbyhuLHQsZSk6YXUobi5mLHQsZSksbmV3IHEobil9ZnVuY3Rpb24gbWNuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj10Lm8rdC5wLHI9ZS5vK2UucCxuPHI/LTE6bj09cj8wOjF9ZnVuY3Rpb24geWNuKHQpe3ZhciBlO3JldHVybiBlPVEodCwoYWUoKSxfaSkpLF90KGUsMTYwKT9FaWUodShlLDE2MCkpOm51bGx9ZnVuY3Rpb24gaG5lKHQpe3ZhciBlO3JldHVybiB0PWIuTWF0aC5tYXgodCwyKSxlPUR5dCh0KSx0PmU/KGU8PD0xLGU+MD9lOkRfKTplfWZ1bmN0aW9uIGJpdCh0KXtzd2l0Y2goTDJ0KHQuZSE9MyksdC5lKXtjYXNlIDI6cmV0dXJuITE7Y2FzZSAwOnJldHVybiEwfXJldHVybiBDYW4odCl9ZnVuY3Rpb24gZm5lKHQsZSl7dmFyIG47cmV0dXJuIF90KGUsOCk/KG49dShlLDgpLHQuYT09bi5hJiZ0LmI9PW4uYik6ITF9ZnVuY3Rpb24gd2l0KHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIG89ZT4+NSxzPWUmMzEscj1OcyhWbSh0Lm5bbl1bb10sQXIoRjAocywxKSkpLDMpLHJ9ZnVuY3Rpb24geGNuKHQsZSl7dmFyIG4scjtmb3Iocj1lLnZjKCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksNDIpLGFxKHQsbi5jZCgpLG4uZGQoKSl9ZnVuY3Rpb24ga2NuKHQsZSl7dmFyIG47bj1uZXcgdnAsdShlLmIsNjUpLHUoZS5iLDY1KSx1KGUuYiw2NSkseHUoZS5hLG5ldyBBd3QodCxuLGUpKX1mdW5jdGlvbiBjeXQodCxlKXt2YXIgbjtuPXQuYix0LmI9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDIxLG4sdC5iKSl9ZnVuY3Rpb24gdXl0KHQsZSl7dmFyIG47bj10LmQsdC5kPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxMSxuLHQuZCkpfWZ1bmN0aW9uIGZ6KHQsZSl7dmFyIG47bj10LmosdC5qPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxMyxuLHQuaikpfWZ1bmN0aW9uIGRuZSh0LGUsbil7dmFyIHIscyxvO2ZvcihvPXQuYS5sZW5ndGgtMSxzPXQuYixyPTA7cjxuO3M9cysxJm8sKytyKXRzKGUscix0LmFbc10pfWZ1bmN0aW9uIHZmKHQsZSl7dmFyIG47cmV0dXJuIE9uKGUpLG49ZS5nLHQuYltuXT8hMToodHModC5iLG4sZSksKyt0LmMsITApfWZ1bmN0aW9uIGduZSh0LGUpe3ZhciBuO3JldHVybiBuPWU9PW51bGw/LTE6Um8odC5iLGUsMCksbjwwPyExOih2aXQodCxuKSwhMCl9ZnVuY3Rpb24gdml0KHQsZSl7dmFyIG47bj1GZyh0LmIsdC5iLmMubGVuZ3RoLTEpLGU8dC5iLmMubGVuZ3RoJiYoY2godC5iLGUsbiksQW9lKHQsZSkpfWZ1bmN0aW9uIEVjbih0LGUpeyhOJCgpLCQxP251bGw6ZS5jKS5sZW5ndGg9PTAmJlZXdChlLG5ldyB0ZSksa28odC5hLCQxP251bGw6ZS5jLGUpfWZ1bmN0aW9uIFRjbih0LGUpe3ZyKGUsIkhpZXJhcmNoaWNhbCBwb3J0IGNvbnN0cmFpbnQgcHJvY2Vzc2luZyIsMSksSWZuKHQpLE94bih0KSxvcihlKX1mdW5jdGlvbiBDY24odCxlKXt2YXIgbixyO2ZvcihyPWUuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMjY2KSx0LmI9ITAsRnModC5lLG4pLG4uYj10fWZ1bmN0aW9uIGR6KHQsZSl7dmFyIG4scjtyZXR1cm4gbj0xLWUscj10LmFbbl0sdC5hW25dPXIuYVtlXSxyLmFbZV09dCx0LmI9ITAsci5iPSExLHJ9ZnVuY3Rpb24gX2NuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KFEodCwoVGUoKSxVeSkpLDgpLHI9dShRKGUsVXkpLDgpLE1zKG4uYixyLmIpfWZ1bmN0aW9uIHBuZSh0KXt0dnQuY2FsbCh0aGlzKSx0aGlzLmI9WHQoeWUoUSh0LChUZSgpLFRmKSkpKSx0aGlzLmE9dShRKHQsZWcpLDIxOCl9ZnVuY3Rpb24gYm5lKHQsZSxuKXtybXQuY2FsbCh0aGlzLHQsZSxuKSx0aGlzLmE9bmV3IF9yLHRoaXMuYj1uZXcgX3IsdGhpcy5kPW5ldyBEJHQodGhpcyl9ZnVuY3Rpb24gd25lKHQpe3RoaXMuZT10LHRoaXMuZD1uZXcgSVIodHkocXgodGhpcy5lKS5nYygpKSksdGhpcy5jPXRoaXMuZS5hLHRoaXMuYj10aGlzLmUuY31mdW5jdGlvbiBneih0KXt0aGlzLmI9dCx0aGlzLmE9TnQoQ3IsWHIsMjUsdCsxLDE1LDEpLHRoaXMuYz1OdChDcixYciwyNSx0LDE1LDEpLHRoaXMuZD0wfWZ1bmN0aW9uIG1pdCh0LGUsbil7dmFyIHI7cmV0dXJuIHI9bmV3IGhlLFI1dCh0LGUscixuLCEwLCEwKSx0LmI9bmV3IGd6KHIuYy5sZW5ndGgpLHJ9ZnVuY3Rpb24gdm5lKHQsZSl7dmFyIG47cmV0dXJuIG49dSh0cih0LmMsZSksNDU4KSxufHwobj1uZXcgRXF0LG4uYz1lLGtpKHQuYyxuLmMsbikpLG59ZnVuY3Rpb24geWl0KHQsZSl7dmFyIG49dC5hLHI9MDtmb3IodmFyIHMgaW4gbiluLmhhc093blByb3BlcnR5KHMpJiYoZVtyKytdPXMpO3JldHVybiBlfWZ1bmN0aW9uIGx5dCh0KXt2YXIgZTtyZXR1cm4gdC5iPT1udWxsPyhNZygpLE1nKCksYlApOihlPXQuTGsoKT90LktrKCk6dC5KaygpLGUpfWZ1bmN0aW9uIG1uZSh0KXt2YXIgZSxuO2ZvcihuPW5ldyBucih0KTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMzMpLGt1KGUsMCksRXUoZSwwKX1mdW5jdGlvbiBZcCgpe1lwPVosSTY9bmV3IFZpKHc2dCksd1Y9bmV3IFZpKGkxZSksZFM9bmV3IFZpKHMxZSksdk89bmV3IFZpKGExZSl9ZnVuY3Rpb24gWDgoKXtYOD1aLHlPPW5ldyBGYnQoIlRPX0lOVEVSTkFMX0xUUiIsMCksZGx0PW5ldyBGYnQoIlRPX0lOUFVUX0RJUkVDVElPTiIsMSl9ZnVuY3Rpb24gcHooKXtwej1aLEZHPW5ldyBYYnQoIlAxX05PREVfUExBQ0VNRU5UIiwwKSxENz1uZXcgWGJ0KCJQMl9FREdFX1JPVVRJTkciLDEpfWZ1bmN0aW9uIG52KCl7bnY9WixEdj1uZXcgT2V0KCJTVEFSVCIsMCkscGI9bmV3IE9ldCgiTUlERExFIiwxKSxNdj1uZXcgT2V0KCJFTkQiLDIpfWZ1bmN0aW9uIHI2KCl7cjY9WixibHQ9bmV3IFBzKCJlZGdlbGFiZWxjZW50ZXJlZG5lc3NhbmFseXNpcy5pbmNsdWRlbGFiZWwiLChObigpLEYyKSl9ZnVuY3Rpb24gU2NuKHQsZSl7bHMoUmkobmV3IFRuKG51bGwsbmV3IF9uKG5ldyBTbSh0LmIpLDEpKSxuZXcgQ0d0KHQsZSkpLG5ldyBTR3QodCxlKSl9ZnVuY3Rpb24geW5lKCl7dGhpcy5jPW5ldyBQUigwKSx0aGlzLmI9bmV3IFBSKFUxZSksdGhpcy5kPW5ldyBQUihHMWUpLHRoaXMuYT1uZXcgUFIoem90KX1mdW5jdGlvbiBoeXQodCl7dmFyIGUsbjtmb3Iobj10LmMuYS5lYygpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDIxNCkscHB0KGUsbmV3IHFhZShlLmUpKX1mdW5jdGlvbiB4bmUodCl7dmFyIGUsbjtmb3Iobj10LmMuYS5lYygpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDIxNCksSXR0KGUsbmV3IFlLdChlLmYpKX1mdW5jdGlvbiBRYyh0LGUpe3ZhciBuO249dC56Yix0LnpiPWUsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxLG4sdC56YikpfWZ1bmN0aW9uIGJ6KHQsZSl7dmFyIG47bj10LnhiLHQueGI9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDMsbix0LnhiKSl9ZnVuY3Rpb24gd3oodCxlKXt2YXIgbjtuPXQueWIsdC55Yj1lLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsMixuLHQueWIpKX1mdW5jdGlvbiBucyh0LGUpe3ZhciBuLHI7bj0ocj1uZXcgcmV0LHIpLG4ubj1lLERyKCghdC5zJiYodC5zPW5ldyBmZShNdSx0LDIxLDE3KSksdC5zKSxuKX1mdW5jdGlvbiBGaSh0LGUpe3ZhciBuLHI7cj0obj1uZXcgSzJ0LG4pLHIubj1lLERyKCghdC5zJiYodC5zPW5ldyBmZShNdSx0LDIxLDE3KSksdC5zKSxyKX1mdW5jdGlvbiByNCh0LGUpe3ZhciBuLHI7Zm9yKG49dC5QYygpLCQ4KG4sMCxuLmxlbmd0aCxlKSxyPTA7cjxuLmxlbmd0aDtyKyspdC5fYyhyLG5bcl0pfWZ1bmN0aW9uIFVhKHQsZSl7dmFyIG4scixzO2ZvcihPbihlKSxuPSExLHM9ZS5LYygpO3MuT2IoKTspcj1zLlBiKCksbj1ufHQuRmMocik7cmV0dXJuIG59ZnVuY3Rpb24ga25lKHQpe3ZhciBlLG4scjtmb3IoZT0wLHI9dC5LYygpO3IuT2IoKTspbj1yLlBiKCksZSs9biE9bnVsbD9IaShuKTowLGU9fn5lO3JldHVybiBlfWZ1bmN0aW9uIEVuZSh0KXt2YXIgZTtyZXR1cm4gdD09MD8iVVRDIjoodDwwPyh0PS10LGU9IlVUQysiKTplPSJVVEMtIixlK3NlZSh0KSl9ZnVuY3Rpb24geGl0KHQsZSl7dmFyIG47cmV0dXJuIF90KGUsMTQpPyhuPXUoZSwxNCksdC5HYyhuKSk6b2l0KHQsdShMcihlKSwyMCkuS2MoKSl9ZnVuY3Rpb24gVG5lKHQsZSxuKXtTZWUuY2FsbCh0aGlzLGUsbiksdGhpcy5kPU50KGwwLFlnLDEwLHQuYS5jLmxlbmd0aCwwLDEpLFAxKHQuYSx0aGlzLmQpfWZ1bmN0aW9uIEFjbih0KXt0LmE9bnVsbCx0LmU9bnVsbCx0LmIuYz1OdChRbixEZSwxLDAsNSwxKSx0LmYuYz1OdChRbixEZSwxLDAsNSwxKSx0LmM9bnVsbH1mdW5jdGlvbiBDbmUodCxlKXtlP3QuQj09bnVsbCYmKHQuQj10LkQsdC5EPW51bGwpOnQuQiE9bnVsbCYmKHQuRD10LkIsdC5CPW51bGwpfWZ1bmN0aW9uIF9uZSh0LGUpe3JldHVybiBYdCh5ZShOdyhXRCh3dShuZXcgVG4obnVsbCxuZXcgX24odC5jLmIsMTYpKSxuZXcgZ1IodCkpLGUpKSkpfWZ1bmN0aW9uIGZ5dCh0LGUpe3JldHVybiBYdCh5ZShOdyhXRCh3dShuZXcgVG4obnVsbCxuZXcgX24odC5jLmIsMTYpKSxuZXcgTEModCkpLGUpKSkpfWZ1bmN0aW9uIExjbih0LGUpe3ZyKGUsazFlLDEpLGxzKFdvKG5ldyBUbihudWxsLG5ldyBfbih0LmIsMTYpKSxuZXcgcEspLG5ldyBiSyksb3IoZSl9ZnVuY3Rpb24gTWNuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KHFlKHQsKHV5KCksQkcpKSwxOSkscj11KHFlKGUsQkcpLDE5KSxwdShuLmEsci5hKX1mdW5jdGlvbiBkeXQodCxlLG4pe3ZhciByLHM7Zm9yKHM9ZWkodCwwKTtzLmIhPXMuZC5jOylyPXUodGkocyksOCksci5hKz1lLHIuYis9bjtyZXR1cm4gdH1mdW5jdGlvbiBVOSh0LGUsbil7dmFyIHI7Zm9yKHI9dC5iW24mdC5mXTtyO3I9ci5iKWlmKG49PXIuYSYmcGQoZSxyLmcpKXJldHVybiByO3JldHVybiBudWxsfWZ1bmN0aW9uIFc5KHQsZSxuKXt2YXIgcjtmb3Iocj10LmNbbiZ0LmZdO3I7cj1yLmQpaWYobj09ci5mJiZwZChlLHIuaSkpcmV0dXJuIHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gRGNuKHQsZSxuKXt2YXIgcixzLG87Zm9yKHI9MCxzPTA7czxuO3MrKylvPWVbc10sdFtzXT1vPDwxfHIscj1vPj4+MzE7ciE9MCYmKHRbbl09cil9ZnVuY3Rpb24gSWNuKHQsZSl7d24oKTt2YXIgbixyO2ZvcihyPW5ldyBoZSxuPTA7bjx0OysrbilyLmNbci5jLmxlbmd0aF09ZTtyZXR1cm4gbmV3IG1ldChyKX1mdW5jdGlvbiBTbmUodCl7dmFyIGU7cmV0dXJuIGU9SVp0KHQpLER3KGUuYSwwKT8oZjgoKSxmOCgpLE1FdCk6KGY4KCksbmV3IHoydChlLmIpKX1mdW5jdGlvbiBBbmUodCl7dmFyIGU7cmV0dXJuIGU9SVp0KHQpLER3KGUuYSwwKT8oZjgoKSxmOCgpLE1FdCk6KGY4KCksbmV3IHoydChlLmMpKX1mdW5jdGlvbiBPY24odCl7dmFyIGU7cmV0dXJuIGU9TSQodCksRHcoZS5hLDApPyhSUigpLFJSKCksS2dlKTooUlIoKSxuZXcga1d0KGUuYikpfWZ1bmN0aW9uIFBjbih0KXtyZXR1cm4gdC5iLmMuaS5rPT0oVm4oKSxrcyk/dShRKHQuYi5jLmksKGFlKCksX2kpKSwxMSk6dC5iLmN9ZnVuY3Rpb24gTG5lKHQpe3JldHVybiB0LmIuZC5pLms9PShWbigpLGtzKT91KFEodC5iLmQuaSwoYWUoKSxfaSkpLDExKTp0LmIuZH1mdW5jdGlvbiBocyh0LGUsbixyLHMsbyxoLGQsdixrLEMsTSxqKXtyZXR1cm4geG9lKHQsZSxuLHIscyxvLGgsZCx2LGssQyxNLGopLEtpdCh0LCExKSx0fWZ1bmN0aW9uIGhoKHQsZSxuLHIscyxvLGgpe1ZyLmNhbGwodGhpcyx0LGUpLHRoaXMuZD1uLHRoaXMuZT1yLHRoaXMuYz1zLHRoaXMuYj1vLHRoaXMuYT1BMShoKX1mdW5jdGlvbiBGY24odCxlKXt0eXBlb2Ygd2luZG93PT09TUkmJnR5cGVvZiB3aW5kb3cuJGd3dD09PU1JJiYod2luZG93LiRnd3RbdF09ZSl9ZnVuY3Rpb24gTmNuKHQsZSl7cmV0dXJuIG5FKCksdD09THYmJmU9PUZ5fHx0PT1GeSYmZT09THZ8fHQ9PXo0JiZlPT1QeXx8dD09UHkmJmU9PXo0fWZ1bmN0aW9uIEJjbih0LGUpe3JldHVybiBuRSgpLHQ9PUx2JiZlPT1QeXx8dD09THYmJmU9PXo0fHx0PT1GeSYmZT09ejR8fHQ9PUZ5JiZlPT1QeX1mdW5jdGlvbiBNbmUodCxlKXtyZXR1cm4gazEoKSx3ZihCMSksYi5NYXRoLmFicygwLWUpPD1CMXx8ZT09MHx8aXNOYU4oMCkmJmlzTmFOKGUpPzA6dC9lfWZ1bmN0aW9uIFJjbigpe3JldHVybiBvbygpLGx0KGN0KGpsdCwxKSxvZSwyNTYsMCxbS1YsdmgseVMsWFYseTcsVzQseFMsdjcsbTcsUVZdKX1mdW5jdGlvbiBraXQoKXtraXQ9Wix1QT1uZXcganF0LEJmdD1sdChjdChNdSwxKSxCNCwxNzAsMCxbXSksazVlPWx0KGN0KFdoLDEpLCQ4dCw1OSwwLFtdKX1mdW5jdGlvbiB2eigpe3Z6PVosWjl0PW5ldyBWZXQoIk5PIiwwKSxMaHQ9bmV3IFZldCgiR1JFRURZIiwxKSxROXQ9bmV3IFZldCgiTE9PS19CQUNLIiwyKX1mdW5jdGlvbiBqdSgpe2p1PVosejd0PW5ldyBtbSxqN3Q9bmV3IHlwLCQ3dD1uZXcgaEssUjd0PW5ldyBHYixxN3Q9bmV3IGZLLEg3dD1uZXcgZEt9ZnVuY3Rpb24gamNuKHQpe3ZhciBlLG4scjtmb3Iocj0wLG49bmV3IFModC5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwyOSksZS5wPXIsKytyfWZ1bmN0aW9uICRjbih0LGUpe3ZhciBuO3JldHVybiBuPUk0dCh0KSxvNXQobmV3ICRlKG4uYyxuLmQpLG5ldyAkZShuLmIsbi5hKSx0LnJmKCksZSx0LkhmKCkpfWZ1bmN0aW9uIFJjKHQsZSl7dmFyIG47cmV0dXJuIHQuYj9udWxsOihuPUJvbih0LHQuZykscmkodC5hLG4pLG4uaT10LHQuZD1lLG4pfWZ1bmN0aW9uIHpjbih0LGUsbil7dnIobiwiREZTIFRyZWVpZnlpbmcgcGhhc2UiLDEpLFhobih0LGUpLFV3bih0LGUpLHQuYT1udWxsLHQuYj1udWxsLG9yKG4pfWZ1bmN0aW9uIERuZSh0LGUsbil7dGhpcy5nPXQsdGhpcy5kPWUsdGhpcy5lPW4sdGhpcy5hPW5ldyBoZSxqcG4odGhpcyksd24oKSxacyh0aGlzLmEsbnVsbCl9ZnVuY3Rpb24gZ3l0KHQpe3RoaXMuaT10LmdjKCksdGhpcy5pPjAmJih0aGlzLmc9dGhpcy5yaSh0aGlzLmkrKHRoaXMuaS84fDApKzEpLHQuUWModGhpcy5nKSl9ZnVuY3Rpb24gc3ModCxlKXtSai5jYWxsKHRoaXMsRTVlLHQsZSksdGhpcy5iPXRoaXMsdGhpcy5hPW91KHQuVGcoKSx5bih0aGlzLmUuVGcoKSx0aGlzLmMpKX1mdW5jdGlvbiBZOSh0LGUpe3ZhciBuLHI7Zm9yKE9uKGUpLHI9ZS52YygpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDQyKSx0LnpjKG4uY2QoKSxuLmRkKCkpfWZ1bmN0aW9uIHFjbih0LGUsbil7dmFyIHI7Zm9yKHI9bi5LYygpO3IuT2IoKTspaWYoIU8kKHQsZSxyLlBiKCkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEhjbih0LGUsbixyLHMpe3ZhciBvO3JldHVybiBuJiYobz1HaShlLlRnKCksdC5jKSxzPW4uZ2goZSwtMS0obz09LTE/cjpvKSxudWxsLHMpKSxzfWZ1bmN0aW9uIFZjbih0LGUsbixyLHMpe3ZhciBvO3JldHVybiBuJiYobz1HaShlLlRnKCksdC5jKSxzPW4uaWgoZSwtMS0obz09LTE/cjpvKSxudWxsLHMpKSxzfWZ1bmN0aW9uIEluZSh0KXt2YXIgZTtpZih0LmI9PS0yKXtpZih0LmU9PTApZT0tMTtlbHNlIGZvcihlPTA7dC5hW2VdPT0wO2UrKyk7dC5iPWV9cmV0dXJuIHQuYn1mdW5jdGlvbiBPbmUodCl7c3dpdGNoKHQuZyl7Y2FzZSAyOnJldHVybiB2ZSgpLEJuO2Nhc2UgNDpyZXR1cm4gdmUoKSxIbjtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiBQbmUodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiB2ZSgpLG1yO2Nhc2UgMzpyZXR1cm4gdmUoKSxQbjtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiBHY24odCl7dmFyIGUsbixyO3JldHVybiB0Lmo9PSh2ZSgpLFBuKSYmKGU9dWNlKHQpLG49TnUoZSxIbikscj1OdShlLEJuKSxyfHxyJiZuKX1mdW5jdGlvbiBVY24odCl7dmFyIGUsbjtyZXR1cm4gZT11KHQuZSYmdC5lKCksOSksbj11KHl2dChlLGUubGVuZ3RoKSw5KSxuZXcgc2goZSxuLGUubGVuZ3RoKX1mdW5jdGlvbiBXY24odCxlKXt2cihlLGsxZSwxKSxwM3QoZFhlKG5ldyBlcigoVkMoKSxuZXcgaHJ0KHQsITEsITEsbmV3IGFOKSkpKSksb3IoZSl9ZnVuY3Rpb24gSUQodCxlKXtyZXR1cm4gTm4oKSxyYSh0KT9rbXQodCxCcihlKSk6Qm0odCk/VW50KHQseWUoZSkpOk5tKHQpP1Flbih0LFJlKGUpKTp0LndkKGUpfWZ1bmN0aW9uIHB5dCh0LGUpe2UucT10LHQuZD1iLk1hdGgubWF4KHQuZCxlLnIpLHQuYis9ZS5kKyh0LmEuYy5sZW5ndGg9PTA/MDp0LmMpLGxlKHQuYSxlKX1mdW5jdGlvbiBROCh0LGUpe3ZhciBuLHIscyxvO3JldHVybiBzPXQuYyxuPXQuYyt0LmIsbz10LmQscj10LmQrdC5hLGUuYT5zJiZlLmE8biYmZS5iPm8mJmUuYjxyfWZ1bmN0aW9uIEZuZSh0LGUsbixyKXtfdCh0LkNiLDE3OSkmJih1KHQuQ2IsMTc5KS50Yj1udWxsKSxRYyh0LG4pLGUmJm9ibih0LGUpLHImJnQueGsoITApfWZ1bmN0aW9uIGJ5dCh0LGUpe3ZhciBuO249dShlLDE4MykscjIobiwieCIsdC5pKSxyMihuLCJ5Iix0LmopLHIyKG4sWmN0LHQuZykscjIobixRY3QsdC5mKX1mdW5jdGlvbiB3eXQoKXt3eXQ9WixTbWU9dXYobFV0KGJpKGJpKG5ldyBWcywoV2EoKSxjdSksKHJvKCksTFYpKSxxYyxUViksSW8pLEFWKX1mdW5jdGlvbiBObmUoKXtObmU9WixEbWU9dXYobFV0KGJpKGJpKG5ldyBWcywoV2EoKSxjdSksKHJvKCksTFYpKSxxYyxUViksSW8pLEFWKX1mdW5jdGlvbiBteigpe216PVosWGh0PW5ldyBLZXQoSjAsMCksQl90PW5ldyBLZXQoIlBPTEFSX0NPT1JESU5BVEUiLDEpLE5fdD1uZXcgS2V0KCJJRCIsMil9ZnVuY3Rpb24geXooKXt5ej1aLEc5dD1uZXcgcWV0KCJFUVVBTExZIiwwKSxfaHQ9bmV3IHFldChLcSwxKSxVOXQ9bmV3IHFldCgiTk9SVEhfU09VVEgiLDIpfWZ1bmN0aW9uIEJuZSgpe0JuZT1aLG9tZT1XcigoeTQoKSxsdChjdCh6OXQsMSksb2UsMjYwLDAsW2tHLEZPLE5PLFI5dCxqOXQsQjl0LCQ5dCxFR10pKSl9ZnVuY3Rpb24gUm5lKCl7Um5lPVosVDJlPVdyKChFcSgpLGx0KGN0KFNUdCwxKSxvZSwyNzAsMCxbeGx0LFRsdCx5bHQsU2x0LEVsdCxrbHQsX2x0LENsdF0pKSl9ZnVuY3Rpb24gam5lKCl7am5lPVosWjNlPVdyKChVZygpLGx0KGN0KFEzZSwxKSxvZSwyNzcsMCxbX1N0LExhLGdjLEk3LE9vLHVzLFU2LFYxXSkpKX1mdW5jdGlvbiAkbmUoKXskbmU9WixlNWU9V3IoKENFKCksbHQoY3QoZlUsMSksb2UsMjM3LDAsW09mdCxsVSxoVSx1VSxJZnQsY1Usb1UsRGZ0XSkpKX1mdW5jdGlvbiBaOCgpe1o4PVosZlM9bmV3IFBzKCJkZWJ1Z1NWRyIsKE5uKCksITEpKSx1N3Q9bmV3IFBzKCJvdmVybGFwc0V4aXN0ZWQiLCEwKX1mdW5jdGlvbiB6bmUodCxlKXtyZXR1cm4gWm0obmV3IHF0KHQpLG5ldyBuZShlKSxuZXcgR3QoZSksbmV3IFhpLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFtdKSl9ZnVuY3Rpb24gWWNuKCl7dmFyIHQ7cmV0dXJuICR1dHx8KCR1dD1uZXcgZHF0LHQ9bmV3IHFydCgiIiksYVFlKHQsKGQ4KCksTkV0KSksRWNuKCR1dCx0KSksJHV0fWZ1bmN0aW9uIEtjbih0LGUpe3ZhciBuO2ZvcihMcihlKTt0Lk9iKCk7KWlmKG49dC5QYigpLCF5eXQodShuLDEwKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gcW5lKHQsZSl7dmFyIG47cmV0dXJuIG49YmF0KEs4KCksdCksbj8od28oZSwodWkoKSxPNyksbiksITApOiExfWZ1bmN0aW9uICRsKHQsZSl7dmFyIG47Zm9yKG49MDtuPGUuai5jLmxlbmd0aDtuKyspdShFRCh0LG4pLDIxKS5HYyh1KEVEKGUsbiksMTQpKTtyZXR1cm4gdH1mdW5jdGlvbiBYY24odCxlKXt2YXIgbixyO2ZvcihyPW5ldyBTKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjkpLHQuYVtuLnBdPXlnbihuKX1mdW5jdGlvbiBLOSh0LGUpe3ZhciBuLHI7Zm9yKE9uKGUpLHI9dC52YygpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDQyKSxlLk9kKG4uY2QoKSxuLmRkKCkpfWZ1bmN0aW9uIHh6KHQsZSl7dmFyIG47X3QoZSw4Myk/KHUodC5jLDc2KS5YaigpLG49dShlLDgzKSx4Y24odCxuKSk6dSh0LmMsNzYpLldiKGUpfWZ1bmN0aW9uIGwyKHQpe3JldHVybiBfdCh0LDE1Mik/WngodSh0LDE1MikpOl90KHQsMTMxKT91KHQsMTMxKS5hOl90KHQsNTQpP25ldyBrdyh0KTpuZXcgT20odCl9ZnVuY3Rpb24gUWNuKHQsZSl7cmV0dXJuIGU8dC5iLmdjKCk/dSh0LmIuWGIoZSksMTApOmU9PXQuYi5nYygpP3QuYTp1KE5lKHQuZSxlLXQuYi5nYygpLTEpLDEwKX1mdW5jdGlvbiBIbmUodCxlKXt0LmE9UGEodC5hLDEpLHQuYz1iLk1hdGgubWluKHQuYyxlKSx0LmI9Yi5NYXRoLm1heCh0LmIsZSksdC5kPVBhKHQuZCxlKX1mdW5jdGlvbiBaY24odCxlKXt2YXIgbjt2cihlLCJFZGdlIGFuZCBsYXllciBjb25zdHJhaW50IGVkZ2UgcmV2ZXJzYWwiLDEpLG49ZW1uKHQpLHc1bihuKSxvcihlKX1mdW5jdGlvbiBWbmUodCl7dmFyIGU7dC5kPT1udWxsPygrK3QuZSx0LmY9MCxKcmUobnVsbCkpOigrK3QuZSxlPXQuZCx0LmQ9bnVsbCx0LmY9MCxKcmUoZSkpfWZ1bmN0aW9uIEtwKHQpe3ZhciBlO3JldHVybiBlPXQuaCxlPT0wP3QubCt0Lm0qbTY6ZT09WjA/dC5sK3QubSptNi1DMjp0fWZ1bmN0aW9uIEduZSh0KXtyZXR1cm4gJG0oKSx0LkEuSGMoKEFsKCksSnkpKSYmIXQuQi5IYygobGwoKSx1UCkpP1NpZSh0KTpudWxsfWZ1bmN0aW9uIEpjbih0KXtpZihPbih0KSx0Lmxlbmd0aD09MCl0aHJvdyBpdChuZXcgbGQoIlplcm8gbGVuZ3RoIEJpZ0ludGVnZXIiKSk7Zm1uKHRoaXMsdCl9ZnVuY3Rpb24gaTQodCl7aWYoIXQpdGhyb3cgaXQobmV3IE5vKCJubyBjYWxscyB0byBuZXh0KCkgc2luY2UgdGhlIGxhc3QgY2FsbCB0byByZW1vdmUoKSIpKX1mdW5jdGlvbiBUdSh0KXtyZXR1cm4gQkk8dCYmdDxDMj90PDA/Yi5NYXRoLmNlaWwodCk6Yi5NYXRoLmZsb29yKHQpOktwKG13bih0KSl9ZnVuY3Rpb24gdHVuKHQsZSl7dmFyIG4scixzO2ZvcihuPXQuYy5FZSgpLHM9ZS5LYygpO3MuT2IoKTspcj1zLlBiKCksdC5hLk9kKG4scik7cmV0dXJuIHQuYi5LYihuKX1mdW5jdGlvbiBtaSh0LGUpe3ZhciBuLHIscztpZihuPXQuSmcoKSxuIT1udWxsJiZ0Lk1nKCkpZm9yKHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpbltyXS51aShlKX1mdW5jdGlvbiBKOCh0LGUpe3ZhciBuLHI7Zm9yKG49dCxyPU5hKG4pLmU7cjspe2lmKG49cixuPT1lKXJldHVybiEwO3I9TmEobikuZX1yZXR1cm4hMX1mdW5jdGlvbiBldW4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9dC5hLmZbZS5wXSxzPXQuYS5mW24ucF0scjxzPy0xOnI9PXM/MDoxfWZ1bmN0aW9uIGgyKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXUoeDkodC5kLGUpLDE5KSxyPXUoeDkodC5iLG4pLDE5KSwhc3x8IXI/bnVsbDp0Nih0LHMuYSxyLmEpfWZ1bmN0aW9uIG51bih0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IG5yKHQpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwzMykseDEobixuLmkrZS5iLG4uaitlLmQpfWZ1bmN0aW9uIHJ1bih0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNzApLGxlKHQuZCxuKSxkZ24odCxuKX1mdW5jdGlvbiBpdW4odCxlKXt2YXIgbixyO3I9bmV3IGhlLG49ZTtkbyByLmNbci5jLmxlbmd0aF09bixuPXUodHIodC5rLG4pLDE3KTt3aGlsZShuKTtyZXR1cm4gcn1mdW5jdGlvbiBEbih0LGUpe3ZhciBuO3JldHVybiB0LkRiJmU/KG49U3N0KHQsZSksbj09LTE/dC5FYjp1Mih0LkViKVtuXSk6bnVsbH1mdW5jdGlvbiBpYyh0LGUpe3ZhciBuLHI7cmV0dXJuIG49KHI9bmV3IGVNLHIpLG4uRz1lLCF0LnJiJiYodC5yYj1uZXcgR20odCxzMSx0KSksRHIodC5yYixuKSxufWZ1bmN0aW9uIG9pKHQsZSl7dmFyIG4scjtyZXR1cm4gbj0ocj1uZXcgeFIsciksbi5HPWUsIXQucmImJih0LnJiPW5ldyBHbSh0LHMxLHQpKSxEcih0LnJiLG4pLG59ZnVuY3Rpb24gdnl0KHQsZSl7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4hIXQubiYmdC5uLmkhPTA7Y2FzZSAyOnJldHVybiB0LmshPW51bGx9cmV0dXJuIFF2dCh0LGUpfWZ1bmN0aW9uIFVuZSh0KXtzd2l0Y2godC5hLmcpe2Nhc2UgMTpyZXR1cm4gbmV3IFVHdDtjYXNlIDM6cmV0dXJuIG5ldyBWc2U7ZGVmYXVsdDpyZXR1cm4gbmV3IG9kfX1mdW5jdGlvbiBreih0KXt2YXIgZTtpZih0Lmc+MXx8dC5PYigpKXJldHVybisrdC5hLHQuZz0wLGU9dC5pLHQuT2IoKSxlO3Rocm93IGl0KG5ldyBsYyl9ZnVuY3Rpb24gc3VuKHQpe0ZVdCgpO3ZhciBlO3JldHVybiBHVnQoRGh0LHQpfHwoZT1uZXcgUlEsZS5hPXQsc3d0KERodCx0LGUpKSx1KHBvKERodCx0KSw2MzUpfWZ1bmN0aW9uIExoKHQpe3ZhciBlLG4scixzO3JldHVybiBzPXQscj0wLHM8MCYmKHMrPUMyLHI9WjApLG49cHMocy9tNiksZT1wcyhzLW4qbTYpLGl1KGUsbixyKX1mdW5jdGlvbiBPRCh0KXt2YXIgZSxuLHI7Zm9yKHI9MCxuPW5ldyBNeCh0LmEpO24uYTxuLmMuYS5sZW5ndGg7KWU9ajkobiksdC5iLkhjKGUpJiYrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gYXVuKHQpe3ZhciBlLG4scjtmb3IoZT0xLHI9dC5LYygpO3IuT2IoKTspbj1yLlBiKCksZT0zMSplKyhuPT1udWxsPzA6SGkobikpLGU9fn5lO3JldHVybiBlfWZ1bmN0aW9uIG91bih0LGUpe3ZhciBuO3RoaXMuYz10LG49bmV3IGhlLFkzdCh0LG4sZSx0LmIsbnVsbCwhMSxudWxsLCExKSx0aGlzLmE9bmV3IGRhKG4sMCl9ZnVuY3Rpb24gdEUodCxlKXt0aGlzLmI9dCx0aGlzLmU9ZSx0aGlzLmQ9ZS5qLHRoaXMuZj0odG8oKSx1KHQsNjYpLk9qKCkpLHRoaXMuaz1vdShlLmUuVGcoKSx0KX1mdW5jdGlvbiBmMih0LGUsbil7dGhpcy5iPShPbih0KSx0KSx0aGlzLmQ9KE9uKGUpLGUpLHRoaXMuZT0oT24obiksbiksdGhpcy5jPXRoaXMuZCsoIiIrdGhpcy5lKX1mdW5jdGlvbiBXbmUoKXt0aGlzLmE9dShJZSgoSmYoKSxwVikpLDE5KS5hLHRoaXMuYz1YdCh5ZShJZShiVikpKSx0aGlzLmI9WHQoeWUoSWUoZWx0KSkpfWZ1bmN0aW9uIFluZSgpe1luZT1aLEE0ZT1XcigocHkoKSxsdChjdChsbywxKSxvZSw5MywwLFtfZixpZyxTZixMZixkMCxIaCxZbCxBZixxaF0pKSl9ZnVuY3Rpb24gS25lKCl7S25lPVosaHBlPVdyKChDcSgpLGx0KGN0KHM3dCwxKSxvZSwyNTAsMCxbaTd0LHQ3dCxlN3QsSkV0LFZ1dCxyN3Qsbjd0LFpFdCxRRXRdKSkpfWZ1bmN0aW9uIHJ2KCl7cnY9WixoTz1uZXcgWlIoIlVQIiwwKSxsTz1uZXcgWlIoRG90LDEpLFd1dD1uZXcgWlIoeTYsMiksWXV0PW5ldyBaUih4NiwzKX1mdW5jdGlvbiBteXQoKXtteXQ9Wix1X3Q9KFQkKCksemh0KSx2eWU9bmV3IG1uKEhrdCx1X3QpLGNfdD0oQSQoKSxxaHQpLHd5ZT1uZXcgbW4oVmt0LGNfdCl9ZnVuY3Rpb24gZUUoKXtlRT1aLCRsdD1uZXcgQmV0KCJPTkVfU0lERUQiLDApLHpsdD1uZXcgQmV0KCJUV09fU0lERUQiLDEpLFRPPW5ldyBCZXQoIk9GRiIsMil9ZnVuY3Rpb24gWG5lKHQpe3Qucj1uZXcgSHMsdC53PW5ldyBIcyx0LnQ9bmV3IGhlLHQuaT1uZXcgaGUsdC5kPW5ldyBIcyx0LmE9bmV3IEZ4LHQuYz1uZXcgX3J9ZnVuY3Rpb24gUEQodCl7dGhpcy5uPW5ldyBoZSx0aGlzLmU9bmV3IFppLHRoaXMuaj1uZXcgWmksdGhpcy5rPW5ldyBoZSx0aGlzLmY9bmV3IGhlLHRoaXMucD10fWZ1bmN0aW9uIFFuZSh0LGUpe3QuYyYmKHRsZSh0LGUsITApLGxzKG5ldyBUbihudWxsLG5ldyBfbihlLDE2KSksbmV3IFF0dCh0KSkpLHRsZSh0LGUsITEpfWZ1bmN0aW9uIGN1bih0LGUsbil7cmV0dXJuIHQ9PShldigpLFRHKT9uZXcgaFE6dWwoZSwxKSE9MD9uZXcgaGJ0KG4ubGVuZ3RoKTpuZXcgeEh0KG4ubGVuZ3RoKX1mdW5jdGlvbiBNbyh0LGUpe3ZhciBuO3JldHVybiBlJiYobj1lLlZlKCksbi5kYygpfHwodC5xP1k5KHQucSxuKTp0LnE9bmV3IHVVdChuKSkpLHR9ZnVuY3Rpb24gWm5lKHQsZSl7dmFyIG47cmV0dXJuIG49dC5hLmdldChlKSxuPT09dm9pZCAwPysrdC5kOihJWmUodC5hLGUpLC0tdC5jLHckKHQuYikpLG59ZnVuY3Rpb24gdXVuKHQsZSl7dmFyIG4scixzO3JldHVybiBuPWUucC10LnAsbj09MD8ocj10LmYuYSp0LmYuYixzPWUuZi5hKmUuZi5iLE1zKHIscykpOm59ZnVuY3Rpb24gbHVuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj10LmYuYy5sZW5ndGgscj1lLmYuYy5sZW5ndGgsbjxyPy0xOm49PXI/MDoxfWZ1bmN0aW9uIGh1bih0KXtyZXR1cm4gdC5iLmMubGVuZ3RoIT0wJiZ1KE5lKHQuYiwwKSw3MCkuYT91KE5lKHQuYiwwKSw3MCkuYTpncnQodCl9ZnVuY3Rpb24gZnVuKHQpe3ZhciBlO2lmKHQpe2lmKGU9dCxlLmRjKCkpdGhyb3cgaXQobmV3IGxjKTtyZXR1cm4gZS5YYihlLmdjKCktMSl9cmV0dXJuIEpRdCh0LktjKCkpfWZ1bmN0aW9uIEpuZSh0KXt2YXIgZTtyZXR1cm4geWModCwwKTwwJiYodD1Sd3QodCkpLGU9QXIoJHAodCwzMikpLDY0LShlIT0wP3BJKGUpOnBJKEFyKHQpKSszMil9ZnVuY3Rpb24geXl0KHQpe3ZhciBlO3JldHVybiBlPXUoUSh0LChhZSgpLG9jKSksNjEpLHQuaz09KFZuKCksa3MpJiYoZT09KHZlKCksQm4pfHxlPT1Ibil9ZnVuY3Rpb24gZHVuKHQsZSxuKXt2YXIgcixzO3M9dShRKHQsKFRlKCksU28pKSw3NCkscyYmKHI9bmV3IFB1LGppdChyLDAscyksbnkocixuKSxVYShlLHIpKX1mdW5jdGlvbiBFeih0LGUsbil7dmFyIHIscyxvLGg7aD1OYSh0KSxyPWguZCxzPWguYyxvPXQubixlJiYoby5hPW8uYS1yLmItcy5hKSxuJiYoby5iPW8uYi1yLmQtcy5iKX1mdW5jdGlvbiBndW4odCxlKXt2YXIgbixyO3JldHVybiBuPXQuaixyPWUuaixuIT1yP24uZy1yLmc6dC5wPT1lLnA/MDpuPT0odmUoKSxQbik/dC5wLWUucDplLnAtdC5wfWZ1bmN0aW9uIHB1bih0KXt2YXIgZSxuO2ZvcigkNW4odCksbj1uZXcgUyh0LmQpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEwMSksZS5pJiZLZ24oZSl9ZnVuY3Rpb24gWDkodCxlLG4scixzKXt0cyh0LmNbZS5nXSxuLmcsciksdHModC5jW24uZ10sZS5nLHIpLHRzKHQuYltlLmddLG4uZyxzKSx0cyh0LmJbbi5nXSxlLmcscyl9ZnVuY3Rpb24gYnVuKHQsZSxuLHIpe3Uobi5iLDY1KSx1KG4uYiw2NSksdShyLmIsNjUpLHUoci5iLDY1KSx1KHIuYiw2NSkseHUoci5hLG5ldyBTd3QodCxlLHIpKX1mdW5jdGlvbiB3dW4odCxlKXt0LmQ9PShhbygpLHpoKXx8dC5kPT1yZz91KGUuYSw1NykuYy5GYyh1KGUuYiw1NykpOnUoZS5iLDU3KS5jLkZjKHUoZS5hLDU3KSl9ZnVuY3Rpb24gRWl0KHQsZSxuLHIpe3JldHVybiBuPT0xPyghdC5uJiYodC5uPW5ldyBmZShxbyx0LDEsNykpLEJhKHQubixlLHIpKTokNHQodCxlLG4scil9ZnVuY3Rpb24gRkQodCxlKXt2YXIgbixyO3JldHVybiByPShuPW5ldyBITCxuKSxRYyhyLGUpLERyKCghdC5BJiYodC5BPW5ldyBGdShodSx0LDcpKSx0LkEpLHIpLHJ9ZnVuY3Rpb24gdnVuKHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gbz1udWxsLGg9ZSxzPUt3KGgsZXV0KSxyPW5ldyBER3QodCxuKSxvPShCZG4oci5hLHIuYixzKSxzKSxvfWZ1bmN0aW9uIFRpdCh0KXt2YXIgZTtyZXR1cm4oIXQuYXx8ISh0LkJiJjEpJiZ0LmEua2goKSkmJihlPURoKHQpLF90KGUsMTQ4KSYmKHQuYT11KGUsMTQ4KSkpLHQuYX1mdW5jdGlvbiBORCh0LGUpe3ZhciBuLHI7Zm9yKE9uKGUpLHI9ZS5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksIXQuSGMobikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbXVuKHQsZSl7dmFyIG4scixzO3JldHVybiBuPXQubCtlLmwscj10Lm0rZS5tKyhuPj4yMikscz10LmgrZS5oKyhyPj4yMiksaXUobiZobCxyJmhsLHMmWjApfWZ1bmN0aW9uIHRyZSh0LGUpe3ZhciBuLHIscztyZXR1cm4gbj10LmwtZS5sLHI9dC5tLWUubSsobj4+MjIpLHM9dC5oLWUuaCsocj4+MjIpLGl1KG4maGwsciZobCxzJlowKX1mdW5jdGlvbiBCRCh0KXt2YXIgZTtyZXR1cm4gdDwxMjg/KGU9KHBLdCgpLGhFdClbdF0sIWUmJihlPWhFdFt0XT1uZXcgaFIodCkpLGUpOm5ldyBoUih0KX1mdW5jdGlvbiBXaSh0KXt2YXIgZTtyZXR1cm4gX3QodCw3OCk/dDooZT10JiZ0Ll9famF2YSRleGNlcHRpb24sZXx8KGU9bmV3IEhyZSh0KSxhcXQoZSkpLGUpfWZ1bmN0aW9uIFJEKHQpe2lmKF90KHQsMTg2KSlyZXR1cm4gdSh0LDExOCk7aWYodClyZXR1cm4gbnVsbDt0aHJvdyBpdChuZXcgU3goS2RlKSl9ZnVuY3Rpb24gZXJlKHQsZSl7aWYoZT09bnVsbClyZXR1cm4hMTtmb3IoO3QuYSE9dC5iOylpZih5aShlLE16KHQpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB4eXQodCl7cmV0dXJuIHQuYS5PYigpPyEwOnQuYSE9dC5kPyExOih0LmE9bmV3IGVtdCh0LmUuZiksdC5hLk9iKCkpfWZ1bmN0aW9uIExzKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1lLlBjKCkscj1uLmxlbmd0aCxyPT0wPyExOihQd3QodC5jLHQuYy5sZW5ndGgsbiksITApfWZ1bmN0aW9uIHl1bih0LGUsbil7dmFyIHIscztmb3Iocz1lLnZjKCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksNDIpLHQueWMoci5jZCgpLHIuZGQoKSxuKTtyZXR1cm4gdH1mdW5jdGlvbiBucmUodCxlKXt2YXIgbixyO2ZvcihyPW5ldyBTKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNzApLEp0KG4sKGFlKCksajYpLGUpfWZ1bmN0aW9uIHh1bih0LGUsbil7dmFyIHIscztmb3Iocz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDMzKSx4MShyLHIuaStlLHIuaituKX1mdW5jdGlvbiBycmUodCxlKXtpZighdCl0aHJvdyBpdChuZXcgRm4oeV8oInZhbHVlIGFscmVhZHkgcHJlc2VudDogJXMiLGx0KGN0KFFuLDEpLERlLDEsNSxbZV0pKSkpfWZ1bmN0aW9uIGlyZSh0LGUpe3JldHVybiF0fHwhZXx8dD09ZT8hMTokaWUodC5kLmMsZS5kLmMrZS5kLmIpJiYkaWUoZS5kLmMsdC5kLmMrdC5kLmIpfWZ1bmN0aW9uIGt1bigpe3JldHVybiBOJCgpLCQxP25ldyBxcnQobnVsbCk6b2NlKFljbigpLCJjb20uZ29vZ2xlLmNvbW1vbi5iYXNlLlN0cmluZ3MiKX1mdW5jdGlvbiBzcmUodCxlKXt2YXIgbjtyZXR1cm4gbj1VZChlLmEuZ2MoKSksbHMoZXoobmV3IFRuKG51bGwsbmV3IF9uKGUsMSkpLHQuaSksbmV3IFRHdCh0LG4pKSxufWZ1bmN0aW9uIGFyZSh0KXt2YXIgZSxuO3JldHVybiBuPShlPW5ldyBITCxlKSxRYyhuLCJUIiksRHIoKCF0LmQmJih0LmQ9bmV3IEZ1KGh1LHQsMTEpKSx0LmQpLG4pLG59ZnVuY3Rpb24ga3l0KHQpe3ZhciBlLG4scixzO2ZvcihlPTEsbj0wLHM9dC5nYygpO248czsrK24pcj10LmtpKG4pLGU9MzEqZSsocj09bnVsbD8wOkhpKHIpKTtyZXR1cm4gZX1mdW5jdGlvbiBvcmUodCxlLG4scil7dmFyIHM7cmV0dXJuIGZEKGUsdC5lLkhkKCkuZ2MoKSksZkQobix0LmMuSGQoKS5nYygpKSxzPXQuYVtlXVtuXSx0cyh0LmFbZV0sbixyKSxzfWZ1bmN0aW9uIGx0KHQsZSxuLHIscyl7cmV0dXJuIHMuZ209dCxzLmhtPWUscy5pbT1FdCxzLl9fZWxlbWVudFR5cGVJZCQ9bixzLl9fZWxlbWVudFR5cGVDYXRlZ29yeSQ9cixzfWZ1bmN0aW9uIEV1bih0LGUsbixyLHMpe3JldHVybiBrNCgpLGIuTWF0aC5taW4od2hlKHQsZSxuLHIscyksd2hlKG4scix0LGUsTWoobmV3ICRlKHMuYSxzLmIpKSkpfWZ1bmN0aW9uIFR6KCl7VHo9Wix3bHQ9bmV3IHRqKEowLDApLEJWPW5ldyB0aihDMWUsMSksUlY9bmV3IHRqKF8xZSwyKSxrTz1uZXcgdGooIkJPVEgiLDMpfWZ1bmN0aW9uIEkxKCl7STE9WixPNj1uZXcgZWoocUUsMCksZjc9bmV3IGVqKHk2LDEpLGQ3PW5ldyBlaih4NiwyKSx2bHQ9bmV3IGVqKCJUT1AiLDMpfWZ1bmN0aW9uIG5FKCl7bkU9WixMdj1uZXcgSlIoIlExIiwwKSxGeT1uZXcgSlIoIlE0IiwxKSxQeT1uZXcgSlIoIlEyIiwyKSx6ND1uZXcgSlIoIlEzIiwzKX1mdW5jdGlvbiBDeigpe0N6PVosTWh0PW5ldyBHZXQoIk9GRiIsMCksTDc9bmV3IEdldCgiU0lOR0xFX0VER0UiLDEpLFl5PW5ldyBHZXQoIk1VTFRJX0VER0UiLDIpfWZ1bmN0aW9uIGpEKCl7akQ9WixWRz1uZXcgSmJ0KCJNSU5JTVVNX1NQQU5OSU5HX1RSRUUiLDApLEVTdD1uZXcgSmJ0KCJNQVhJTVVNX1NQQU5OSU5HX1RSRUUiLDEpfWZ1bmN0aW9uIGk2KCl7aTY9WixVM2U9bmV3IFRaLEczZT1uZXcga1p9ZnVuY3Rpb24gRXl0KHQpe3ZhciBlLG4scjtmb3IoZT1uZXcgWmkscj1laSh0LmQsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDE4OCkscmkoZSxuLmMpO3JldHVybiBlfWZ1bmN0aW9uIENpdCh0KXt2YXIgZSxuLHIscztmb3Iocz1uZXcgaGUscj10LktjKCk7ci5PYigpOyluPXUoci5QYigpLDMzKSxlPXd5KG4pLExzKHMsZSk7cmV0dXJuIHN9ZnVuY3Rpb24gVHVuKHQpe3ZhciBlO2J2KHQsITApLGU9V2csVXModCwoVGUoKSxfNykpJiYoZSs9dShRKHQsXzcpLDE5KS5hKSxKdCh0LF83LHBlKGUpKX1mdW5jdGlvbiBjcmUodCxlLG4pe3ZhciByO1h1KHQuYSkseHUobi5pLG5ldyByenQodCkpLHI9bmV3IG1qKHUodHIodC5hLGUuYiksNjUpKSxLaWUodCxyLGUpLG4uZj1yfWZ1bmN0aW9uIEN1bih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dC5jLHI9ZS5lW3QucF0scjxuLmEuYy5sZW5ndGgtMT91KE5lKG4uYSxyKzEpLDEwKTpudWxsfWZ1bmN0aW9uIF91bih0LGUpe3ZhciBuLHI7Zm9yKGckKGUsInByZWRpY2F0ZSIpLHI9MDt0Lk9iKCk7cisrKWlmKG49dC5QYigpLGUuTGIobikpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gczYodCxlKXt2YXIgbixyO2lmKHI9MCx0PDY0JiZ0PD1lKWZvcihlPWU8NjQ/ZTo2MyxuPXQ7bjw9ZTtuKyspcj1TMShyLEYwKDEsbikpO3JldHVybiByfWZ1bmN0aW9uIFR5dCh0KXt3bigpO3ZhciBlLG4scjtmb3Iocj0wLG49dC5LYygpO24uT2IoKTspZT1uLlBiKCkscj1yKyhlIT1udWxsP0hpKGUpOjApLHI9cnwwO3JldHVybiByfWZ1bmN0aW9uIEN5dCh0KXt2YXIgZSxuO3JldHVybiBuPShTdygpLGU9bmV3IGFkLGUpLHQmJkRyKCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSksbiksbn1mdW5jdGlvbiBTdW4odCl7dmFyIGU7cmV0dXJuIGU9bmV3IHl0LGUuYT10LGUuYj1QdW4odCksZS5jPU50KEFlLGVlLDIsMiw2LDEpLGUuY1swXT1FbmUodCksZS5jWzFdPUVuZSh0KSxlfWZ1bmN0aW9uIF95dCh0LGUpe3N3aXRjaChlKXtjYXNlIDA6IXQubyYmKHQubz1uZXcgX2woKEpjKCksU2IpLEh2LHQsMCkpLHQuby5jLiRiKCk7cmV0dXJufUdzdCh0LGUpfWZ1bmN0aW9uICREKHQsZSxuKXtzd2l0Y2gobi5nKXtjYXNlIDI6dC5iPWU7YnJlYWs7Y2FzZSAxOnQuYz1lO2JyZWFrO2Nhc2UgNDp0LmQ9ZTticmVhaztjYXNlIDM6dC5hPWV9fWZ1bmN0aW9uIHVyZSh0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIGtiO2Nhc2UgMjpyZXR1cm4gZjA7Y2FzZSAzOnJldHVybiBuUDtkZWZhdWx0OnJldHVybiByUH19ZnVuY3Rpb24gQXVuKHQpe3N3aXRjaCh1KFEodCwoVGUoKSx1dSkpLDE2MykuZyl7Y2FzZSAyOmNhc2UgNDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBscmUoKXtscmU9WixCMmU9V3IoKG9vKCksbHQoY3Qoamx0LDEpLG9lLDI1NiwwLFtLVix2aCx5UyxYVix5NyxXNCx4Uyx2NyxtNyxRVl0pKSl9ZnVuY3Rpb24gaHJlKCl7aHJlPVosUjRlPVdyKChsbCgpLGx0KGN0KE5BdCwxKSxvZSwyNTksMCxbUjcsdVAsblUsaUEsclUsc1UsaVUsQWZ0LGNQXSkpKX1mdW5jdGlvbiBmcmUoKXtmcmU9WixJeWU9YmkodXYodXYoVlIoYmkobmV3IFZzLCh3RSgpLFJTKSwocF8oKSxMRykpLCRPKSxQaHQpLEZodCksalMsTmh0KX1mdW5jdGlvbiBkMigpe2QyPVosSWx0PW5ldyBOZXQoSjAsMCksdzc9bmV3IE5ldCgiSU5DT01JTkdfT05MWSIsMSksVTQ9bmV3IE5ldCgiT1VUR09JTkdfT05MWSIsMil9ZnVuY3Rpb24gX2l0KCl7X2l0PVosUHV0PXtib29sZWFuOmhYZSxudW1iZXI6eUtlLHN0cmluZzp4S2Usb2JqZWN0OkNvZSxmdW5jdGlvbjpDb2UsdW5kZWZpbmVkOnRLZX19ZnVuY3Rpb24gZHJlKHQsZSl7QmoodD49MCwiTmVnYXRpdmUgaW5pdGlhbCBjYXBhY2l0eSIpLEJqKGU+PTAsIk5vbi1wb3NpdGl2ZSBsb2FkIGZhY3RvciIpLFh1KHRoaXMpfWZ1bmN0aW9uIFNpdCh0LGUsbil7cmV0dXJuIHQ+PTEyOD8hMTp0PDY0P3U5KE5zKEYwKDEsdCksbiksMCk6dTkoTnMoRjAoMSx0LTY0KSxlKSwwKX1mdW5jdGlvbiBMdW4odCxlKXtyZXR1cm4hdHx8IWV8fHQ9PWU/ITE6YXYodC5iLmMsZS5iLmMrZS5iLmIpPDAmJmF2KGUuYi5jLHQuYi5jK3QuYi5iKTwwfWZ1bmN0aW9uIGdyZSh0KXt2YXIgZSxuLHI7cmV0dXJuIG49dC5uLHI9dC5vLGU9dC5kLG5ldyBhaChuLmEtZS5iLG4uYi1lLmQsci5hKyhlLmIrZS5jKSxyLmIrKGUuZCtlLmEpKX1mdW5jdGlvbiBNdW4odCl7dmFyIGUsbixyLHM7Zm9yKG49dC5hLHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLHlyZSh0LGUsKHZlKCksbXIpKSx5cmUodCxlLFBuKX1mdW5jdGlvbiBEdW4odCl7dmFyIGUsbixyLHM7Zm9yKGU9KHQuaj09bnVsbCYmKHQuaj0oSTgoKSxzPU91dC5jZSh0KSxIZG4ocykpKSx0LmopLG49MCxyPWUubGVuZ3RoO248cjsrK24pO31mdW5jdGlvbiByRSh0KXt2YXIgZSxuLHI7cmV0dXJuIGU9fnQubCsxJmhsLG49fnQubSsoZT09MD8xOjApJmhsLHI9fnQuaCsoZT09MCYmbj09MD8xOjApJlowLGl1KGUsbixyKX1mdW5jdGlvbiBJdW4odCxlKXt2YXIgbixyO3JldHVybiBuPXUodSh0cih0LmcsZS5hKSw0NikuYSw2NSkscj11KHUodHIodC5nLGUuYiksNDYpLmEsNjUpLF9sZShuLHIpfWZ1bmN0aW9uIFN5dCh0LGUsbil7dmFyIHI7aWYocj10LmdjKCksZT5yKXRocm93IGl0KG5ldyBxbShlLHIpKTtyZXR1cm4gdC5oaSgpJiYobj1EUXQodCxuKSksdC5WaChlLG4pfWZ1bmN0aW9uIHpEKHQsZSxuKXtyZXR1cm4gbj09bnVsbD8oIXQucSYmKHQucT1uZXcgX3IpLEp4KHQucSxlKSk6KCF0LnEmJih0LnE9bmV3IF9yKSxraSh0LnEsZSxuKSksdH1mdW5jdGlvbiBKdCh0LGUsbil7cmV0dXJuIG49PW51bGw/KCF0LnEmJih0LnE9bmV3IF9yKSxKeCh0LnEsZSkpOighdC5xJiYodC5xPW5ldyBfciksa2kodC5xLGUsbikpLHR9ZnVuY3Rpb24gcHJlKHQpe3ZhciBlLG47cmV0dXJuIG49bmV3IEIkLE1vKG4sdCksSnQobiwoWXAoKSxJNiksdCksZT1uZXcgX3IsUHluKHQsbixlKSxhNW4odCxuLGUpLG59ZnVuY3Rpb24gT3VuKHQpe2s0KCk7dmFyIGUsbixyO2ZvcihuPU50KFdzLGVlLDgsMiwwLDEpLHI9MCxlPTA7ZTwyO2UrKylyKz0uNSxuW2VdPWcxbihyLHQpO3JldHVybiBufWZ1bmN0aW9uIGJyZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihuPSExLHI9dC5hW2VdLmxlbmd0aCxvPTA7bzxyLTE7bysrKXM9bysxLG49bnxRaG4odCxlLG8scyk7cmV0dXJuIG59ZnVuY3Rpb24gaUUodCxlLG4scixzKXt2YXIgbyxoO2ZvcihoPW47aDw9cztoKyspZm9yKG89ZTtvPD1yO28rKylmNCh0LG8saCl8fFNxKHQsbyxoLCEwLCExKX1mdW5jdGlvbiB3cmUodCxlKXt0aGlzLmI9dCxWMy5jYWxsKHRoaXMsKHUoQXQoV3QoKEhwKCksTG4pLm8pLDEwKSwxOCksZS5pKSxlLmcpLHRoaXMuYT0oa2l0KCksQmZ0KX1mdW5jdGlvbiBBeXQodCxlKXt0aGlzLmM9dCx0aGlzLmQ9ZSx0aGlzLmI9dGhpcy5kL3RoaXMuYy5jLkhkKCkuZ2MoKXwwLHRoaXMuYT10aGlzLmQldGhpcy5jLmMuSGQoKS5nYygpfWZ1bmN0aW9uIEx5dCgpe3RoaXMubz1udWxsLHRoaXMuaz1udWxsLHRoaXMuaj1udWxsLHRoaXMuZD1udWxsLHRoaXMuYj1udWxsLHRoaXMubj1udWxsLHRoaXMuYT1udWxsfWZ1bmN0aW9uIE15dCh0LGUsbil7dGhpcy5xPW5ldyBiLkRhdGUsdGhpcy5xLnNldEZ1bGxZZWFyKHQrYWIsZSxuKSx0aGlzLnEuc2V0SG91cnMoMCwwLDAsMCksRV8odGhpcywwKX1mdW5jdGlvbiBWMCgpe1YwPVosdmI9bmV3ICRldChKMCwwKSxxOXQ9bmV3ICRldCgiTk9ERVNfQU5EX0VER0VTIiwxKSxFaHQ9bmV3ICRldCgiUFJFRkVSX0VER0VTIiwyKX1mdW5jdGlvbiBQdW4odCl7dmFyIGU7cmV0dXJuIHQ9PTA/IkV0Yy9HTVQiOih0PDA/KHQ9LXQsZT0iRXRjL0dNVC0iKTplPSJFdGMvR01UKyIsZStzZWUodCkpfWZ1bmN0aW9uIER5dCh0KXt2YXIgZTtpZih0PDApcmV0dXJuIFNhO2lmKHQ9PTApcmV0dXJuIDA7Zm9yKGU9RF87IShlJnQpO2U+Pj0xKTtyZXR1cm4gZX1mdW5jdGlvbiB2cmUodCl7dmFyIGUsbjtyZXR1cm4gbj1wSSh0LmgpLG49PTMyPyhlPXBJKHQubSksZT09MzI/cEkodC5sKSszMjplKzIwLTEwKTpuLTEyfWZ1bmN0aW9uIFE5KHQpe3ZhciBlO3JldHVybiBlPXQuYVt0LmJdLGU9PW51bGw/bnVsbDoodHModC5hLHQuYixudWxsKSx0LmI9dC5iKzEmdC5hLmxlbmd0aC0xLGUpfWZ1bmN0aW9uIG1yZSh0KXt2YXIgZSxuO3JldHVybiBlPXQudC10LmtbdC5vLnBdKnQuZCt0LmpbdC5vLnBdPnQuZixuPXQudSt0LmVbdC5vLnBdKnQuZD50LmYqdC5zKnQuZCxlfHxufWZ1bmN0aW9uIF96KHQsZSxuKXt2YXIgcixzO3JldHVybiByPW5ldyBRcnQoZSxuKSxzPW5ldyB6dCx0LmI9bHVlKHQsdC5iLHIscykscy5ifHwrK3QuYyx0LmIuYj0hMSxzLmR9ZnVuY3Rpb24geXJlKHQsZSxuKXt2YXIgcixzLG8saDtmb3IoaD10XyhlLG4pLG89MCxzPWguS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTEpLGtpKHQuYyxyLHBlKG8rKykpfWZ1bmN0aW9uIFhwKHQpe3ZhciBlLG47Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDgxKSxlLmcuYz0tZS5nLmMtZS5nLmI7eXEodCl9ZnVuY3Rpb24gUXAodCl7dmFyIGUsbjtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNTcpLGUuZC5jPS1lLmQuYy1lLmQuYjtQNXQodCl9ZnVuY3Rpb24gSXl0KHQpe3ZhciBlO3JldHVybighdC5jfHwhKHQuQmImMSkmJnQuYy5EYiY2NCkmJihlPURoKHQpLF90KGUsODgpJiYodC5jPXUoZSwyNikpKSx0LmN9ZnVuY3Rpb24gQWl0KHQpe3ZhciBlLG4scjtlPX50LmwrMSZobCxuPX50Lm0rKGU9PTA/MTowKSZobCxyPX50LmgrKGU9PTAmJm49PTA/MTowKSZaMCx0Lmw9ZSx0Lm09bix0Lmg9cn1mdW5jdGlvbiBZbyh0KXt2YXIgZSxuLHIscyxvO2ZvcihlPW5ldyBDYSxyPXQscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sZS5hKz1uLmEsZS5iKz1uLmI7cmV0dXJuIGV9ZnVuY3Rpb24gT3l0KHQsZSl7d24oKTt2YXIgbixyLHMsbyxoO2ZvcihoPSExLHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxoPWh8dC5GYyhuKTtyZXR1cm4gaH1mdW5jdGlvbiBzNCh0KXtrNCgpO3ZhciBlLG47Zm9yKG49LTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXT5uJiYobj10W2VdKTtyZXR1cm4gbn1mdW5jdGlvbiB4cmUodCxlLG4pe3ZhciByO3JldHVybiByPW5ldyBoZSxSNXQodCxlLHIsKHZlKCksSG4pLCEwLCExKSxSNXQodCxuLHIsQm4sITEsITEpLHJ9ZnVuY3Rpb24gTGl0KHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gbz1udWxsLGg9ZSxzPUt3KGgsImxhYmVscyIpLHI9bmV3IHpHdCh0LG4pLG89KFpibihyLmEsci5iLHMpLHMpLG99ZnVuY3Rpb24gRnVuKHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPUM1dCh0LGUsbixyKSwhcyYmKHM9TmxuKHQsbixyKSxzJiYhQzQodCxlLHMpKT9udWxsOnN9ZnVuY3Rpb24gTnVuKHQsZSxuLHIpe3ZhciBzO3JldHVybiBzPV81dCh0LGUsbixyKSwhcyYmKHM9VWl0KHQsbixyKSxzJiYhQzQodCxlLHMpKT9udWxsOnN9ZnVuY3Rpb24ga3JlKHQsZSl7dmFyIG47Zm9yKG49MDtuPHQuYS5hLmxlbmd0aDtuKyspaWYoIXUodkt0KHQuYSxuKSwxNjkpLkxiKGUpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEJ1bih0LGUsbil7aWYoTHIoZSksbi5PYigpKWZvcihpMnQoZSxsWHQobi5QYigpKSk7bi5PYigpOylpMnQoZSx0LmEpLGkydChlLGxYdChuLlBiKCkpKTtyZXR1cm4gZX1mdW5jdGlvbiBQeXQodCl7d24oKTt2YXIgZSxuLHI7Zm9yKHI9MSxuPXQuS2MoKTtuLk9iKCk7KWU9bi5QYigpLHI9MzEqcisoZSE9bnVsbD9IaShlKTowKSxyPXJ8MDtyZXR1cm4gcn1mdW5jdGlvbiBSdW4odCxlLG4scixzKXt2YXIgbztyZXR1cm4gbz12NXQodCxlKSxuJiZBaXQobykscyYmKHQ9eTFuKHQsZSkscj9oYj1yRSh0KTpoYj1pdSh0LmwsdC5tLHQuaCkpLG99ZnVuY3Rpb24ganVuKHQsZSl7dmFyIG47dHJ5e2UuVmQoKX1jYXRjaChyKXtpZihyPVdpKHIpLF90KHIsNzgpKW49cix0LmNbdC5jLmxlbmd0aF09bjtlbHNlIHRocm93IGl0KHIpfX1mdW5jdGlvbiBFcmUodCxlLG4pe3ZhciByLHM7cmV0dXJuIF90KGUsMTQ0KSYmbj8ocj11KGUsMTQ0KSxzPW4sdC5hW3IuYl1bcy5iXSt0LmFbcy5iXVtyLmJdKTowfWZ1bmN0aW9uIEZ5dCh0LGUpe3N3aXRjaChlKXtjYXNlIDc6cmV0dXJuISF0LmUmJnQuZS5pIT0wO2Nhc2UgODpyZXR1cm4hIXQuZCYmdC5kLmkhPTB9cmV0dXJuIG0zdCh0LGUpfWZ1bmN0aW9uICR1bih0LGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpfdCh0LmIsNjMxKXx8KHQuYj1uZXcgV25lKTticmVhaztjYXNlIDE6X3QodC5iLDYzMil8fCh0LmI9bmV3IFlZdCl9fWZ1bmN0aW9uIHp1bih0LGUpe2Zvcig7dC5nPT1udWxsJiYhdC5jP0h2dCh0KTp0Lmc9PW51bGx8fHQuaSE9MCYmdSh0LmdbdC5pLTFdLDQ3KS5PYigpOylEWGUoZSx3cSh0KSl9ZnVuY3Rpb24gVHJlKHQsZSxuKXt0Lmc9VXN0KHQsZSwodmUoKSxIbiksdC5iKSx0LmQ9VXN0KHQsbixIbix0LmIpLCEodC5nLmM9PTB8fHQuZC5jPT0wKSYmSGFlKHQpfWZ1bmN0aW9uIENyZSh0LGUsbil7dC5nPVVzdCh0LGUsKHZlKCksQm4pLHQuaiksdC5kPVVzdCh0LG4sQm4sdC5qKSwhKHQuZy5jPT0wfHx0LmQuYz09MCkmJkhhZSh0KX1mdW5jdGlvbiBxdW4odCxlLG4pe3JldHVybiFxQyhSaShuZXcgVG4obnVsbCxuZXcgX24odC5jLDE2KSksbmV3IFp0KG5ldyBfR3QoZSxuKSkpKS5zZCgoUWIoKSxvNykpfWZ1bmN0aW9uIE1pdCh0KXt2YXIgZTtyZXR1cm4gVnAodCksZT1uZXcgVGksdC5hLnNkKGUpPyh3OCgpLG5ldyBDUihPbihlLmEpKSk6KHc4KCksdzgoKSxpVil9ZnVuY3Rpb24gTnl0KHQpe3ZhciBlO3JldHVybiB0LmI8PTA/ITE6KGU9aGQoIk1MeWRoSG1zU0RrSyIsQ3Uod2EodC5jLDApKSksZT4xfHxlPj0wJiZ0LmI8Myl9ZnVuY3Rpb24gcUQodCl7dmFyIGUsbixyO2ZvcihlPW5ldyBQdSxyPWVpKHQsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDgpLG04KGUsMCxuZXcgeG8obikpO3JldHVybiBlfWZ1bmN0aW9uIGcyKHQpe3ZhciBlLG47Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDgxKSxlLmYuJGIoKTtiS2UodC5iLHQpLFFjZSh0KX1mdW5jdGlvbiBIaSh0KXtyZXR1cm4gcmEodCk/VmcodCk6Qm0odCk/cDgodCk6Tm0odCk/KE9uKHQpLHQ/MTIzMToxMjM3KTppdnQodCk/dC5IYigpOkp3dCh0KT9Qdyh0KTpCdnQodCl9ZnVuY3Rpb24gb2wodCl7cmV0dXJuIHJhKHQpP0FlOkJtKHQpP2xhOk5tKHQpP1JzOml2dCh0KXx8Snd0KHQpP3QuZ206dC5nbXx8QXJyYXkuaXNBcnJheSh0KSYmY3QoT2dlLDEpfHxPZ2V9ZnVuY3Rpb24gX3JlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHhaO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKF9IKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gU3JlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHlaO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKF9IKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gQnl0KHQsZSxuKXtzd2l0Y2goZSl7Y2FzZSAwOiF0Lm8mJih0Lm89bmV3IF9sKChKYygpLFNiKSxIdix0LDApKSx4eih0Lm8sbik7cmV0dXJufVhzdCh0LGUsbil9ZnVuY3Rpb24gRGl0KHQsZSxuKXt0aGlzLmc9dCx0aGlzLmU9bmV3IENhLHRoaXMuZj1uZXcgQ2EsdGhpcy5kPW5ldyBaaSx0aGlzLmI9bmV3IFppLHRoaXMuYT1lLHRoaXMuYz1ufWZ1bmN0aW9uIElpdCh0LGUsbixyKXt0aGlzLmI9bmV3IGhlLHRoaXMubj1uZXcgaGUsdGhpcy5pPXIsdGhpcy5qPW4sdGhpcy5zPXQsdGhpcy50PWUsdGhpcy5yPTAsdGhpcy5kPTB9ZnVuY3Rpb24gcDIodCl7dGhpcy5lPXQsdGhpcy5kPW5ldyBobXQodGhpcy5lLmcpLHRoaXMuYT10aGlzLmQsdGhpcy5iPXh5dCh0aGlzKSx0aGlzLiRtb2RDb3VudD10LiRtb2RDb3VudH1mdW5jdGlvbiBIdW4odCl7Zm9yKDshdC5kfHwhdC5kLk9iKCk7KWlmKHQuYiYmIUJDKHQuYikpdC5kPXUoSHgodC5iKSw0Nyk7ZWxzZSByZXR1cm4gbnVsbDtyZXR1cm4gdC5kfWZ1bmN0aW9uIFZ1bih0KXtyZXR1cm4gbGUodC5jLChpNigpLFUzZSkpLFdtdCh0LmEsWHQoeWUoSWUoKG5zdCgpLHZHKSkpKSk/bmV3IFdaOm5ldyB1enQodCl9ZnVuY3Rpb24gUnl0KHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gRzFlO2RlZmF1bHQ6Y2FzZSAyOnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gem90O2Nhc2UgNDpyZXR1cm4gVTFlfX1mdW5jdGlvbiBHdW4oKXtnaSgpO3ZhciB0O3JldHVybiBIZnR8fCh0PXRaZShpYigiTSIsITApKSx0PVlqKGliKCJNIiwhMSksdCksSGZ0PXQsSGZ0KX1mdW5jdGlvbiBqeXQodCxlKXt2YXIgbixyLHM7Zm9yKHM9dC5iO3M7KXtpZihuPXQuYS51ZShlLHMuZCksbj09MClyZXR1cm4gcztyPW48MD8wOjEscz1zLmFbcl19cmV0dXJuIG51bGx9ZnVuY3Rpb24gVXVuKHQsZSxuKXt2YXIgcixzO3I9KE5uKCksISFhMnQobikpLHM9dShlLnhjKHIpLDE1KSxzfHwocz1uZXcgaGUsZS56YyhyLHMpKSxzLkZjKG4pfWZ1bmN0aW9uIFd1bih0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShxZSh0LChzYXQoKSxITykpLDE5KS5hLHI9dShxZShlLEhPKSwxOSkuYSxuPT1yfHxuPHI/LTE6bj5yPzE6MH1mdW5jdGlvbiAkeXQodCxlKXtyZXR1cm4gVWNlKHQsZSk/KGxuKHQuYix1KFEoZSwoYWUoKSxCeSkpLDIxKSxlKSxyaSh0LmEsZSksITApOiExfWZ1bmN0aW9uIFl1bih0KXt2YXIgZSxuO2U9dShRKHQsKGFlKCksSnUpKSwxMCksZSYmKG49ZS5jLG11KG4uYSxlKSxuLmEuYy5sZW5ndGg9PTAmJm11KE5hKGUpLmIsbikpfWZ1bmN0aW9uIEFyZSh0KXtyZXR1cm4gJDE/TnQoWmdlLE1mZSw1NzIsMCwwLDEpOnUoUDEodC5hLE50KFpnZSxNZmUsNTcyLHQuYS5jLmxlbmd0aCwwLDEpKSw4NDIpfWZ1bmN0aW9uIEt1bih0LGUsbixyKXtyZXR1cm4gYyQoKSxuZXcgdWV0KGx0KGN0KFAyLDEpLEhxLDQyLDAsWyhrc3QodCxlKSxuZXcgTHcodCxlKSksKGtzdChuLHIpLG5ldyBMdyhuLHIpKV0pKX1mdW5jdGlvbiBhNCh0LGUsbil7dmFyIHIscztyZXR1cm4gcz0ocj1uZXcgaWV0LHIpLGJvKHMsZSxuKSxEcigoIXQucSYmKHQucT1uZXcgZmUoV2gsdCwxMSwxMCkpLHQucSkscyksc31mdW5jdGlvbiBPaXQodCl7dmFyIGUsbixyLHM7Zm9yKHM9eFhlKFo0ZSx0KSxuPXMubGVuZ3RoLHI9TnQoQWUsZWUsMixuLDYsMSksZT0wO2U8bjsrK2UpcltlXT1zW2VdO3JldHVybiByfWZ1bmN0aW9uIG80KHQsZSl7dmFyIG4scixzLG8saDtmb3Iocj1lLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGg9bmV3IGJYdCh0KSxuLlFlKGgpLEp5bihoKTtYdSh0LmYpfWZ1bmN0aW9uIFBpdCh0LGUpe3ZhciBuO3JldHVybiBlPT09dD8hMDpfdChlLDIyNCk/KG49dShlLDIyNCkseWkodC5aYigpLG4uWmIoKSkpOiExfWZ1bmN0aW9uIHp5dCh0LGUpe3ZhciBuO2UqMisxPj10LmIuYy5sZW5ndGh8fCh6eXQodCwyKmUrMSksbj0yKmUrMixuPHQuYi5jLmxlbmd0aCYmenl0KHQsbiksQW9lKHQsZSkpfWZ1bmN0aW9uIExyZSh0LGUsbil7dmFyIHIsczt0aGlzLmc9dCx0aGlzLmM9ZSx0aGlzLmE9dGhpcyx0aGlzLmQ9dGhpcyxzPWhuZShuKSxyPU50KElnZSxQSSwzMzAscywwLDEpLHRoaXMuYj1yfWZ1bmN0aW9uIHF5dCh0LGUsbil7dmFyIHI7Zm9yKHI9bi0xO3I+PTAmJnRbcl09PT1lW3JdO3ItLSk7cmV0dXJuIHI8MD8wOkNldChOcyh0W3JdLGNvKSxOcyhlW3JdLGNvKSk/LTE6MX1mdW5jdGlvbiBYdW4odCxlKXt2YXIgbixyO2ZvcihyPWVpKHQsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDIxNCksbi5lLmxlbmd0aD4wJiYoZS50ZChuKSxuLmkmJlZsbihuKSl9ZnVuY3Rpb24gRml0KHQsZSl7dmFyIG4scjtyZXR1cm4gcj11KERuKHQuYSw0KSwxMjYpLG49TnQoRmZ0LGx1dCw0MTUsZSwwLDEpLHIhPW51bGwmJkRjKHIsMCxuLDAsci5sZW5ndGgpLG59ZnVuY3Rpb24gTXJlKHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IGZhdCgodC5mJjI1NikhPTAsdC5pLHQuYSx0LmQsKHQuZiYxNikhPTAsdC5qLHQuZyxlKSx0LmUhPW51bGx8fChuLmM9dCksbn1mdW5jdGlvbiBRdW4odCxlKXt2YXIgbixyO2ZvcihyPXQuWmIoKS5DYygpLktjKCk7ci5PYigpOylpZihuPXUoci5QYigpLDE0KSxuLkhjKGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE5pdCh0LGUsbixyLHMpe3ZhciBvLGg7Zm9yKGg9bjtoPD1zO2grKylmb3Iobz1lO288PXI7bysrKWlmKGY0KHQsbyxoKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBEcmUodCxlLG4pe3ZhciByLHMsbyxoO2ZvcihPbihuKSxoPSExLG89dC5aYyhlKSxzPW4uS2MoKTtzLk9iKCk7KXI9cy5QYigpLG8uUmIociksaD0hMDtyZXR1cm4gaH1mdW5jdGlvbiBadW4odCxlKXt2YXIgbjtyZXR1cm4gdD09PWU/ITA6X3QoZSw4Myk/KG49dShlLDgzKSxINHQoUncodCksbi52YygpKSk6ITF9ZnVuY3Rpb24gSXJlKHQsZSxuKXt2YXIgcixzO2ZvcihzPW4uS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksNDIpLHQucmUoZSxyLmRkKCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE9yZSh0LGUsbil7cmV0dXJuIHQuZFtlLnBdW24ucF18fChZZm4odCxlLG4pLHQuZFtlLnBdW24ucF09ITAsdC5kW24ucF1bZS5wXT0hMCksdC5hW2UucF1bbi5wXX1mdW5jdGlvbiBzRSh0LGUpe2lmKCF0LmFpKCkmJmU9PW51bGwpdGhyb3cgaXQobmV3IEZuKCJUaGUgJ25vIG51bGwnIGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQiKSk7cmV0dXJuIGV9ZnVuY3Rpb24gYUUodCxlKXt0LkQ9PW51bGwmJnQuQiE9bnVsbCYmKHQuRD10LkIsdC5CPW51bGwpLGdpdCh0LGU9PW51bGw/bnVsbDooT24oZSksZSkpLHQuQyYmdC55ayhudWxsKX1mdW5jdGlvbiBKdW4odCxlKXt2YXIgbjtyZXR1cm4hdHx8dD09ZXx8IVVzKGUsKGFlKCksUHYpKT8hMToobj11KFEoZSwoYWUoKSxQdikpLDEwKSxuIT10KX1mdW5jdGlvbiBCaXQodCl7c3dpdGNoKHQuaSl7Y2FzZSAyOnJldHVybiEwO2Nhc2UgMTpyZXR1cm4hMTtjYXNlLTE6Kyt0LmM7ZGVmYXVsdDpyZXR1cm4gdC5wbCgpfX1mdW5jdGlvbiBQcmUodCl7c3dpdGNoKHQuaSl7Y2FzZS0yOnJldHVybiEwO2Nhc2UtMTpyZXR1cm4hMTtjYXNlIDE6LS10LmM7ZGVmYXVsdDpyZXR1cm4gdC5xbCgpfX1mdW5jdGlvbiBGcmUodCl7VFF0LmNhbGwodGhpcywiVGhlIGdpdmVuIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0IGZvciBpbmRpdmlkdWFsIHNwYWNpbmdzLiIsdCl9ZnVuY3Rpb24gU2woKXtTbD1aLFFsPW5ldyB1aigiRUxLIiwwKSxxQXQ9bmV3IHVqKCJKU09OIiwxKSx6QXQ9bmV3IHVqKCJET1QiLDIpLEhBdD1uZXcgdWooIlNWRyIsMyl9ZnVuY3Rpb24gSEQoKXtIRD1aLE5HPW5ldyBZZXQoSjAsMCksa190PW5ldyBZZXQoIlJBRElBTF9DT01QQUNUSU9OIiwxKSxFX3Q9bmV3IFlldCgiV0VER0VfQ09NUEFDVElPTiIsMil9ZnVuY3Rpb24gTzEoKXtPMT1aLEJFdD1uZXcgX2V0KCJDT05DVVJSRU5UIiwwKSxVbD1uZXcgX2V0KCJJREVOVElUWV9GSU5JU0giLDEpLEl5PW5ldyBfZXQoIlVOT1JERVJFRCIsMil9ZnVuY3Rpb24gUml0KCl7Uml0PVosZjd0PShqUigpLEt1dCksaDd0PW5ldyBtbihvNnQsZjd0KSxYcGU9bmV3IFZpKGM2dCksUXBlPW5ldyBWaSh1NnQpLFpwZT1uZXcgVmkobDZ0KX1mdW5jdGlvbiBvRSgpe29FPVosQ1R0PW5ldyBKNSxfVHQ9bmV3IFpLLGwyZT1uZXcgT0wsdTJlPW5ldyBKSyxjMmU9bmV3IHRYLFRUdD0oT24oYzJlKSxuZXcgZ24pfWZ1bmN0aW9uIGNFKCl7Y0U9WixBaHQ9bmV3IEhldCgiQ09OU0VSVkFUSVZFIiwwKSxLOXQ9bmV3IEhldCgiQ09OU0VSVkFUSVZFX1NPRlQiLDEpLFBTPW5ldyBIZXQoIlNMT1BQWSIsMil9ZnVuY3Rpb24gU3ooKXtTej1aLE1BdD1uZXcgT3coMTUpLFQ0ZT1uZXcgZW8oKHVpKCksVTIpLE1BdCksUVM9WTYsX0F0PW80ZSxTQXQ9RzIsTEF0PWM1LEFBdD1YR31mdW5jdGlvbiBqaXQodCxlLG4pe3ZhciByLHMsbztmb3Iocj1uZXcgWmksbz1laShuLDApO28uYiE9by5kLmM7KXM9dSh0aShvKSw4KSxyaShyLG5ldyB4byhzKSk7RHJlKHQsZSxyKX1mdW5jdGlvbiB0bG4odCl7dmFyIGUsbixyO2ZvcihlPTAscj1OdChXcyxlZSw4LHQuYiwwLDEpLG49ZWkodCwwKTtuLmIhPW4uZC5jOylyW2UrK109dSh0aShuKSw4KTtyZXR1cm4gcn1mdW5jdGlvbiBIeXQodCl7dmFyIGU7cmV0dXJuIGU9KCF0LmEmJih0LmE9bmV3IGZlKGFnLHQsOSw1KSksdC5hKSxlLmkhPTA/dlhlKHUoQXQoZSwwKSw2NzgpKTpudWxsfWZ1bmN0aW9uIGVsbih0LGUpe3ZhciBuO3JldHVybiBuPVBhKHQsZSksQ2V0KERydCh0LGUpLDApfFBYZShEcnQodCxuKSwwKT9uOlBhKHFxLERydChWbShuLDYzKSwxKSl9ZnVuY3Rpb24gbmxuKHQsZSl7dmFyIG47bj1JZSgobnN0KCksdkcpKSE9bnVsbCYmZS53ZygpIT1udWxsP1h0KHllKGUud2coKSkpL1h0KHllKEllKHZHKSkpOjEsa2kodC5iLGUsbil9ZnVuY3Rpb24gcmxuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KHQuZC5CYyhlKSwxNCksbj8ocj10LmUuaGMoKSxyLkdjKG4pLHQuZS5kLT1uLmdjKCksbi4kYigpLHIpOm51bGx9ZnVuY3Rpb24gVnl0KHQsZSl7dmFyIG4scjtpZihyPXQuY1tlXSxyIT0wKWZvcih0LmNbZV09MCx0LmQtPXIsbj1lKzE7bjx0LmEubGVuZ3RoOyl0LmFbbl0tPXIsbis9biYtbn1mdW5jdGlvbiBOcmUodCl7dmFyIGU7aWYoZT10LmEuYy5sZW5ndGgsZT4wKXJldHVybiBUOChlLTEsdC5hLmMubGVuZ3RoKSxGZyh0LmEsZS0xKTt0aHJvdyBpdChuZXcgY3F0KX1mdW5jdGlvbiBpbG4odCxlLG4pe2lmKGU8MCl0aHJvdyBpdChuZXcgeW8oc2RlK2UpKTtlPHQuai5jLmxlbmd0aD9jaCh0LmosZSxuKTooR1p0KHQsZSksbGUodC5qLG4pKX1mdW5jdGlvbiBCcmUodCxlLG4pe2lmKHQ+ZSl0aHJvdyBpdChuZXcgRm4oV3ErdCtEZmUrZSkpO2lmKHQ8MHx8ZT5uKXRocm93IGl0KG5ldyBpYnQoV3ErdCtZeHQrZStVeHQrbikpfWZ1bmN0aW9uIFJyZSh0KXtpZighdC5hfHwhKHQuYS5pJjgpKXRocm93IGl0KG5ldyBObygiRW51bWVyYXRpb24gY2xhc3MgZXhwZWN0ZWQgZm9yIGxheW91dCBvcHRpb24gIit0LmYpKX1mdW5jdGlvbiBpeSh0KXt2YXIgZTsrK3Quaix0Lmk9PTA/dC5nPW51bGw6dC5pPHQuZy5sZW5ndGgmJihlPXQuZyx0Lmc9dC5yaSh0LmkpLERjKGUsMCx0LmcsMCx0LmkpKX1mdW5jdGlvbiBzbG4odCxlKXt2YXIgbixyO2ZvcihuPXQuYS5sZW5ndGgtMSx0LmM9dC5jLTEmbjtlIT10LmM7KXI9ZSsxJm4sdHModC5hLGUsdC5hW3JdKSxlPXI7dHModC5hLHQuYyxudWxsKX1mdW5jdGlvbiBhbG4odCxlKXt2YXIgbixyO2ZvcihuPXQuYS5sZW5ndGgtMTtlIT10LmI7KXI9ZS0xJm4sdHModC5hLGUsdC5hW3JdKSxlPXI7dHModC5hLHQuYixudWxsKSx0LmI9dC5iKzEmbn1mdW5jdGlvbiBHeXQodCxlLG4pe3ZhciByLHM7cmV0dXJuIEttKGUsdC5jLmxlbmd0aCkscj1uLlBjKCkscz1yLmxlbmd0aCxzPT0wPyExOihQd3QodC5jLGUsciksITApfWZ1bmN0aW9uIG9sbih0KXt2YXIgZSxuO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Zm9yKGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspaWYoIXRLdCh0W2VdKSlyZXR1cm4gdFtlXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBqcmUodCxlLG4pe3ZhciByLHMsbyxoO2ZvcihzPW4sbz0wLGg9cy5sZW5ndGg7bzxoOysrbylpZihyPXNbb10sdC5iLnJlKGUsci5jZCgpKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBBeih0KXt2YXIgZSxuLHIscyxvO2ZvcihvPTEsbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG89MzEqbysoZSE9bnVsbD9IaShlKTowKSxvPW98MDtyZXR1cm4gb31mdW5jdGlvbiBXcih0KXt2YXIgZSxuLHIscyxvO2ZvcihlPXt9LHI9dCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxlWyI6Iisobi5mIT1udWxsP24uZjoiIituLmcpXT1uO3JldHVybiBlfWZ1bmN0aW9uIGNsbih0KXt2YXIgZTtmb3IoTHIodCkseHd0KCEwLCJudW1iZXJUb0FkdmFuY2UgbXVzdCBiZSBub25uZWdhdGl2ZSIpLGU9MDtlPDAmJnpyKHQpO2UrKylNcih0KTtyZXR1cm4gZX1mdW5jdGlvbiAkcmUodCl7dmFyIGUsbixyO2ZvcihyPTAsbj1uZXcgYXIobHIodC5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDE3KSxlLmMuaT09ZS5kLml8fCsrcjtyZXR1cm4gcn1mdW5jdGlvbiB6cmUodCxlKXt2YXIgbixyLHM7bj10LHM9MDtkb3tpZihuPT1lKXJldHVybiBzO2lmKHI9bi5lLCFyKXRocm93IGl0KG5ldyBnTSk7bj1OYShyKSwrK3N9d2hpbGUoITApfWZ1bmN0aW9uIHFyZSh0LGUpe3ZhciBuLHIscztmb3Iocz1lLXQuZixyPW5ldyBTKHQuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNDQzKSxQaWUobixuLmUsbi5mK3MpO3QuZj1lfWZ1bmN0aW9uICRpdCh0LGUsbil7cmV0dXJuIGIuTWF0aC5hYnMoZS10KTxrSHx8Yi5NYXRoLmFicyhuLXQpPGtIPyEwOmUtdD5rSD90LW4+a0g6bi10PmtIfWZ1bmN0aW9uIHppdCh0LGUpe3JldHVybiF0fHxlJiYhdC5qfHxfdCh0LDEyNCkmJnUodCwxMjQpLmEuYj09MD8wOnQuUmUoKX1mdW5jdGlvbiBMeih0LGUpe3JldHVybiF0fHxlJiYhdC5rfHxfdCh0LDEyNCkmJnUodCwxMjQpLmEuYT09MD8wOnQuU2UoKX1mdW5jdGlvbiBWRCh0KXtyZXR1cm4gcmIoKSx0PDA/dCE9LTE/bmV3IGozdCgtMSwtdCk6QnV0OnQ8PTEwP0NFdFtwcyh0KV06bmV3IGozdCgxLHQpfWZ1bmN0aW9uIFV5dCh0KXt0aHJvdyBfaXQoKSxpdChuZXcgZUh0KCJVbmV4cGVjdGVkIHR5cGVvZiByZXN1bHQgJyIrdCsiJzsgcGxlYXNlIHJlcG9ydCB0aGlzIGJ1ZyB0byB0aGUgR1dUIHRlYW0iKSl9ZnVuY3Rpb24gSHJlKHQpe29IdCgpLHlqKHRoaXMpLGQkKHRoaXMpLHRoaXMuZT10LG51ZSh0aGlzLHQpLHRoaXMuZz10PT1udWxsP191OiRvKHQpLHRoaXMuYT0iIix0aGlzLmI9dCx0aGlzLmE9IiJ9ZnVuY3Rpb24gV3l0KCl7dGhpcy5hPW5ldyB2Wix0aGlzLmY9bmV3IFgkdCh0aGlzKSx0aGlzLmI9bmV3IFEkdCh0aGlzKSx0aGlzLmk9bmV3IFokdCh0aGlzKSx0aGlzLmU9bmV3IEokdCh0aGlzKX1mdW5jdGlvbiBWcmUoKXtkS2UuY2FsbCh0aGlzLG5ldyBNbXQodHkoMTYpKSksamwoMixmZmUpLHRoaXMuYj0yLHRoaXMuYT1uZXcgTHZ0KG51bGwsbnVsbCwwLG51bGwpLGRNKHRoaXMuYSx0aGlzLmEpfWZ1bmN0aW9uIFo5KCl7Wjk9Wix2aHQ9bmV3IGpldCgiRFVNTVlfTk9ERV9PVkVSIiwwKSxPOXQ9bmV3IGpldCgiRFVNTVlfTk9ERV9VTkRFUiIsMSkseUc9bmV3IGpldCgiRVFVQUwiLDIpfWZ1bmN0aW9uIHFpdCgpe3FpdD1aLG9sdD1fUXQobHQoY3QoWFMsMSksb2UsMTAzLDAsWyhhbygpLHpoKSxDZl0pKSxjbHQ9X1F0KGx0KGN0KFhTLDEpLG9lLDEwMywwLFtyZyxuZ10pKX1mdW5jdGlvbiBIaXQodCl7cmV0dXJuKHZlKCksQXUpLkhjKHQuaik/WHQoeWUoUSh0LChhZSgpLGs3KSkpKTpZbyhsdChjdChXcywxKSxlZSw4LDAsW3QuaS5uLHQubix0LmFdKSkuYn1mdW5jdGlvbiB1bG4odCl7dmFyIGUsbixyLHM7Zm9yKHI9dC5iLmEsbj1yLmEuZWMoKS5LYygpO24uT2IoKTspZT11KG4uUGIoKSw1NjEpLHM9bmV3IE5jZShlLHQuZSx0LmYpLGxlKHQuZyxzKX1mdW5jdGlvbiBiMih0LGUpe3ZhciBuLHIscztyPXQubmsoZSxudWxsKSxzPW51bGwsZSYmKHM9KGM4KCksbj1uZXcgeHcsbiksSDgocyx0LnIpKSxyPUYxKHQscyxyKSxyJiZyLkZpKCl9ZnVuY3Rpb24gbGxuKHQsZSl7dmFyIG4scjtmb3Iocj11bCh0LmQsMSkhPTAsbj0hMDtuOyluPSExLG49ZS5jLlRmKGUuZSxyKSxuPW58eUkodCxlLHIsITEpLHI9IXI7aHl0KHQpfWZ1bmN0aW9uIFl5dCh0LGUpe3ZhciBuLHIscztyZXR1cm4gcj0hMSxuPWUucS5kLGUuZDx0LmImJihzPVdjZShlLnEsdC5iKSxlLnEuZD5zJiYoYmFlKGUucSxzKSxyPW4hPWUucS5kKSkscn1mdW5jdGlvbiBHcmUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO3JldHVybiB2PWUuaSxrPWUuaixyPXQuZixzPXIuaSxvPXIuaixoPXYtcyxkPWstbyxuPWIuTWF0aC5zcXJ0KGgqaCtkKmQpLG59ZnVuY3Rpb24gS3l0KHQsZSl7dmFyIG4scjtyZXR1cm4gcj1Ieih0KSxyfHwobj0oRmF0KCksd29lKGUpKSxyPW5ldyBKenQobiksRHIoci5WaygpLHQpKSxyfWZ1bmN0aW9uIEdEKHQsZSl7dmFyIG4scjtyZXR1cm4gbj11KHQuYy5CYyhlKSwxNCksbj8ocj10LmhjKCksci5HYyhuKSx0LmQtPW4uZ2MoKSxuLiRiKCksdC5tYyhyKSk6dC5qYygpfWZ1bmN0aW9uIFVyZSh0LGUpe3ZhciBuO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYodD09KFJyKG4sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChuKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gV3JlKHQsZSl7dmFyIG47Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZih0PT0oUnIobixlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4pKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBobG4odCl7dmFyIGUsbjtpZih0PT1udWxsKXJldHVybiExO2ZvcihlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKWlmKCF0S3QodFtlXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gWXJlKHQpe3ZhciBlO2lmKHQuYyE9MClyZXR1cm4gdC5jO2ZvcihlPTA7ZTx0LmEubGVuZ3RoO2UrKyl0LmM9dC5jKjMzKyh0LmFbZV0mLTEpO3JldHVybiB0LmM9dC5jKnQuZSx0LmN9ZnVuY3Rpb24gTXoodCl7dmFyIGU7cmV0dXJuIFpuKHQuYSE9dC5iKSxlPXQuZC5hW3QuYV0sVFd0KHQuYj09dC5kLmMmJmUhPW51bGwpLHQuYz10LmEsdC5hPXQuYSsxJnQuZC5hLmxlbmd0aC0xLGV9ZnVuY3Rpb24gZmxuKHQpe3ZhciBlO2lmKCEodC5jLmM8MD90LmE+PXQuYy5iOnQuYTw9dC5jLmIpKXRocm93IGl0KG5ldyBsYyk7cmV0dXJuIGU9dC5hLHQuYSs9dC5jLmMsKyt0LmIscGUoZSl9ZnVuY3Rpb24gZGxuKHQpe3ZhciBlO3JldHVybiBlPW5ldyBDZWUodCksaEQodC5hLFdiZSxuZXcgeWwobHQoY3QobU8sMSksRGUsMzY5LDAsW2VdKSkpLGUuZCYmbGUoZS5mLGUuZCksZS5mfWZ1bmN0aW9uIFZpdCh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgYjJ0KHQuYSksTW8oZSx0KSxKdChlLChhZSgpLF9pKSx0KSxlLm8uYT10LmcsZS5vLmI9dC5mLGUubi5hPXQuaSxlLm4uYj10LmosZX1mdW5jdGlvbiBnbG4odCxlLG4scil7dmFyIHMsbztmb3Iobz10LktjKCk7by5PYigpOylzPXUoby5QYigpLDcwKSxzLm4uYT1lLmErKHIuYS1zLm8uYSkvMixzLm4uYj1lLmIsZS5iKz1zLm8uYitufWZ1bmN0aW9uIHBsbih0LGUsbil7dmFyIHIscztmb3Iocz1lLmEuYS5lYygpLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDU3KSxzUXQodCxyLG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGJsbih0KXt2YXIgZSxuO2ZvcihuPW5ldyBTKHQucik7bi5hPG4uYy5jLmxlbmd0aDspaWYoZT11KEoobiksMTApLHQubltlLnBdPD0wKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIEtyZSh0KXt2YXIgZSxuLHIscztmb3Iocz1uZXcgSHMscj1uZXcgUyh0KTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwzMyksZT1Ddm4obiksVWEocyxlKTtyZXR1cm4gc31mdW5jdGlvbiB3bG4odCl7dmFyIGU7cmV0dXJuIGU9cGooX21lKSx1KFEodCwoYWUoKSxWYykpLDIxKS5IYygob28oKSx5NykpJiZiaShlLChXYSgpLGN1KSwocm8oKSxJVikpLGV9ZnVuY3Rpb24gdmxuKHQsZSxuKXt2YXIgcjtyPW5ldyB0Y2UodCxlKSxsbih0LnIsZS5IZigpLHIpLG4mJiFTOSh0LnUpJiYoci5jPW5ldyB4UXQodC5kKSx4dShlLndmKCksbmV3IHZuKHIpKSl9ZnVuY3Rpb24geWModCxlKXt2YXIgbjtyZXR1cm4gQm8odCkmJkJvKGUpJiYobj10LWUsIWlzTmFOKG4pKT9uOnU0dChCbyh0KT9MaCh0KTp0LEJvKGUpP0xoKGUpOmUpfWZ1bmN0aW9uIG1sbih0LGUpe3JldHVybiBlPHQubGVuZ3RoJiYoUnIoZSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUpIT02MykmJihScihlLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZSkhPTM1KX1mdW5jdGlvbiBYcmUodCxlLG4scil7dmFyIHMsbzt0LmE9ZSxvPXI/MDoxLHQuZj0ocz1uZXcgSmFlKHQuYyx0LmEsbixvKSxuZXcgTXVlKG4sdC5hLHMsdC5lLHQuYix0LmM9PShldigpLEZTKSkpfWZ1bmN0aW9uIFh5dCh0LGUsbil7dmFyIHIscztyZXR1cm4gcz10LmEsdC5hPWUsdC5EYiY0JiYhKHQuRGImMSkmJihyPW5ldyBKcyh0LDEsMSxzLGUpLG4/bi5FaShyKTpuPXIpLG59ZnVuY3Rpb24gUXJlKHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXQuYix0LmI9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHI9bmV3IEpzKHQsMSwzLHMsZSksbj9uLkVpKHIpOm49ciksbn1mdW5jdGlvbiBacmUodCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5mLHQuZj1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgSnModCwxLDAscyxlKSxuP24uRWkocik6bj1yKSxufWZ1bmN0aW9uIFpwKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG89KHM9dD9Ieih0KTpudWxsLEVvZSgocj1lLHMmJnMuWGsoKSxyKSkpLG89PWUmJihuPUh6KHQpLG4mJm4uWGsoKSksb31mdW5jdGlvbiBReXQodCxlKXt2YXIgbixyLHM7Zm9yKHM9MSxuPXQscj1lPj0wP2U6LWU7cj4wOylyJTI9PTA/KG4qPW4scj1yLzJ8MCk6KHMqPW4sci09MSk7cmV0dXJuIGU8MD8xL3M6c31mdW5jdGlvbiB5bG4odCxlKXt2YXIgbixyLHM7Zm9yKHM9MSxuPXQscj1lPj0wP2U6LWU7cj4wOylyJTI9PTA/KG4qPW4scj1yLzJ8MCk6KHMqPW4sci09MSk7cmV0dXJuIGU8MD8xL3M6c31mdW5jdGlvbiBKcmUodCl7dmFyIGUsbjtpZih0IT1udWxsKWZvcihuPTA7bjx0Lmxlbmd0aDsrK24pZT10W25dLGUmJih1KGUuZywzNjcpLGUuaSl9ZnVuY3Rpb24geGxuKHQpe3ZhciBlLG4scjtmb3Iocj0wLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxODcpLHI9Yi5NYXRoLm1heChyLGUuZyk7cmV0dXJuIHJ9ZnVuY3Rpb24ga2xuKHQpe3ZhciBlLG4scjtmb3Iocj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIxNCksZT1uLmMuUmYoKT9uLmY6bi5hLGUmJnozbihlLG4uail9ZnVuY3Rpb24gRzAoKXtHMD1aLHRVPW5ldyBKZXQoIklOSEVSSVQiLDApLHNwPW5ldyBKZXQoIklOQ0xVREVfQ0hJTERSRU4iLDEpLFpTPW5ldyBKZXQoIlNFUEFSQVRFX0NISUxEUkVOIiwyKX1mdW5jdGlvbiBaeXQodCxlKXtzd2l0Y2goZSl7Y2FzZSAxOiF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSkseHIodC5uKTtyZXR1cm47Y2FzZSAyOkc5KHQsbnVsbCk7cmV0dXJufV95dCh0LGUpfWZ1bmN0aW9uIER6KHQpe3ZhciBlO3N3aXRjaCh0LmdjKCkpe2Nhc2UgMDpyZXR1cm4gQXV0O2Nhc2UgMTpyZXR1cm4gbmV3IFJudChMcih0LlhiKDApKSk7ZGVmYXVsdDpyZXR1cm4gZT10LG5ldyB2cnQoZSl9fWZ1bmN0aW9uIHRpZSh0KXtzd2l0Y2goZ2QoKSx0LmdjKCkpe2Nhc2UgMDpyZXR1cm4gb3J0KCksZUV0O2Nhc2UgMTpyZXR1cm4gbmV3IEF4KHQuS2MoKS5QYigpKTtkZWZhdWx0OnJldHVybiBuZXcgU2J0KHQpfX1mdW5jdGlvbiBqZyh0KXtzd2l0Y2goZ2QoKSx0LmMpe2Nhc2UgMDpyZXR1cm4gb3J0KCksZUV0O2Nhc2UgMTpyZXR1cm4gbmV3IEF4KElvZShuZXcgTXgodCkpKTtkZWZhdWx0OnJldHVybiBuZXcgSnF0KHQpfX1mdW5jdGlvbiBzeSh0LGUpe0xyKHQpO3RyeXtyZXR1cm4gdC54YyhlKX1jYXRjaChuKXtpZihuPVdpKG4pLF90KG4sMjA1KXx8X3QobiwxNzMpKXJldHVybiBudWxsO3Rocm93IGl0KG4pfX1mdW5jdGlvbiBFbG4odCxlKXtMcih0KTt0cnl7cmV0dXJuIHQuQmMoZSl9Y2F0Y2gobil7aWYobj1XaShuKSxfdChuLDIwNSl8fF90KG4sMTczKSlyZXR1cm4gbnVsbDt0aHJvdyBpdChuKX19ZnVuY3Rpb24gSnl0KHQsZSl7THIodCk7dHJ5e3JldHVybiB0LkhjKGUpfWNhdGNoKG4pe2lmKG49V2kobiksX3QobiwyMDUpfHxfdChuLDE3MykpcmV0dXJuITE7dGhyb3cgaXQobil9fWZ1bmN0aW9uIFRsbih0LGUpe0xyKHQpO3RyeXtyZXR1cm4gdC5NYyhlKX1jYXRjaChuKXtpZihuPVdpKG4pLF90KG4sMjA1KXx8X3QobiwxNzMpKXJldHVybiExO3Rocm93IGl0KG4pfX1mdW5jdGlvbiBlaWUodCxlKXtMcih0KTt0cnl7cmV0dXJuIHQuX2IoZSl9Y2F0Y2gobil7aWYobj1XaShuKSxfdChuLDIwNSl8fF90KG4sMTczKSlyZXR1cm4hMTt0aHJvdyBpdChuKX19ZnVuY3Rpb24gbmllKHQsZSl7dmFyIG47dC5hLmMubGVuZ3RoPjAmJihuPXUoTmUodC5hLHQuYS5jLmxlbmd0aC0xKSw1NzApLCR5dChuLGUpKXx8bGUodC5hLG5ldyBJSnQoZSkpfWZ1bmN0aW9uIENsbih0KXtkZigpO3ZhciBlLG47ZT10LmQuYy10LmUuYyxuPXUodC5nLDE0NSkseHUobi5iLG5ldyBBQyhlKSkseHUobi5jLG5ldyBZYihlKSksdmEobi5pLG5ldyBkUihlKSl9ZnVuY3Rpb24gcmllKHQpe3ZhciBlO3JldHVybiBlPW5ldyBNcCxlLmErPSJWZXJ0aWNhbFNlZ21lbnQgIixoYyhlLHQuZSksZS5hKz0iICIsR3IoZSxfMnQobmV3IHZldCxuZXcgUyh0LmspKSksZS5hfWZ1bmN0aW9uIF9sbih0KXt2YXIgZTtyZXR1cm4gZT11KFh3KHQuYy5jLCIiKSwyMjkpLGV8fChlPW5ldyBZeChvOChhOChuZXcgeG0sIiIpLCJPdGhlciIpKSxtMih0LmMuYywiIixlKSksZX1mdW5jdGlvbiBKOSh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9tZih0KTooZT1uZXcgX2gobWYodCkpLGUuYSs9IiAobmFtZTogIixnbyhlLHQuemIpLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gdDN0KHQsZSxuKXt2YXIgcixzO3JldHVybiBzPXQuc2IsdC5zYj1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgSnModCwxLDQscyxlKSxuP24uRWkocik6bj1yKSxufWZ1bmN0aW9uIEdpdCh0LGUpe3ZhciBuLHIscztmb3Iobj0wLHM9S28odCxlKS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMSksbis9UShyLChhZSgpLEp1KSkhPW51bGw/MTowO3JldHVybiBufWZ1bmN0aW9uIGM0KHQsZSxuKXt2YXIgcixzLG87Zm9yKHI9MCxvPWVpKHQsMCk7by5iIT1vLmQuYyYmKHM9WHQoeWUodGkobykpKSwhKHM+bikpOylzPj1lJiYrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gU2xuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPW5ldyB6MCh0LmUsMywxMyxudWxsLChzPWUuYyxzfHwoZG4oKSxXMSkpLEhnKHQsZSksITEpLG4/bi5FaShyKTpuPXIsbn1mdW5jdGlvbiBBbG4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9bmV3IHowKHQuZSw0LDEzLChzPWUuYyxzfHwoZG4oKSxXMSkpLG51bGwsSGcodCxlKSwhMSksbj9uLkVpKHIpOm49cixufWZ1bmN0aW9uIGUzdCh0LGUsbil7dmFyIHIscztyZXR1cm4gcz10LnIsdC5yPWUsdC5EYiY0JiYhKHQuRGImMSkmJihyPW5ldyBKcyh0LDEsOCxzLHQuciksbj9uLkVpKHIpOm49ciksbn1mdW5jdGlvbiAkZyh0LGUpe3ZhciBuLHI7cmV0dXJuIG49dShlLDY3Nikscj1uLnZrKCksIXImJm4ud2socj1fdChlLDg4KT9uZXcgSkd0KHQsdShlLDI2KSk6bmV3IHladCh0LHUoZSwxNDgpKSkscn1mdW5jdGlvbiBVRCh0LGUsbil7dmFyIHI7dC5xaSh0LmkrMSkscj10Lm9pKGUsbiksZSE9dC5pJiZEYyh0LmcsZSx0LmcsZSsxLHQuaS1lKSx0cyh0LmcsZSxyKSwrK3QuaSx0LmJpKGUsbiksdC5jaSgpfWZ1bmN0aW9uIExsbih0LGUpe3ZhciBuO3JldHVybiBlLmEmJihuPWUuYS5hLmxlbmd0aCx0LmE/R3IodC5hLHQuYik6dC5hPW5ldyBPbCh0LmQpLGtadCh0LmEsZS5hLGUuZC5sZW5ndGgsbikpLHR9ZnVuY3Rpb24gTWxuKHQsZSl7dmFyIG4scixzLG87aWYoZS52aSh0LmEpLG89dShEbih0LmEsOCksMTkzNiksbyE9bnVsbClmb3Iobj1vLHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpbnVsbC5qbSgpfWZ1bmN0aW9uIFdEKHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IFRpLHQuYS5zZChuKT8odzgoKSxuZXcgQ1IoT24oSnRlKHQsbi5hLGUpKSkpOihWcCh0KSx3OCgpLHc4KCksaVYpfWZ1bmN0aW9uIHRfKHQsZSl7c3dpdGNoKGUuZyl7Y2FzZSAyOmNhc2UgMTpyZXR1cm4gS28odCxlKTtjYXNlIDM6Y2FzZSA0OnJldHVybiBsMihLbyh0LGUpKX1yZXR1cm4gd24oKSx3bigpLGlvfWZ1bmN0aW9uIHlpKHQsZSl7cmV0dXJuIHJhKHQpP2huKHQsZSk6Qm0odCk/dll0KHQsZSk6Tm0odCk/KE9uKHQpLFZ0KHQpPT09VnQoZSkpOml2dCh0KT90LkZiKGUpOkp3dCh0KT9tVXQodCxlKTpYdnQodCxlKX1mdW5jdGlvbiBEbG4odCl7cmV0dXJuIHQ/dC5pJjE/dD09cGw/UnM6dD09Q3I/amE6dD09YTM/aTc6dD09YWE/bGE6dD09T2I/U3Y6dD09ZzU/QXY6dD09R3U/TTY6dVM6dDpudWxsfWZ1bmN0aW9uIElsbih0LGUsbixyLHMpe2U9PTB8fHI9PTB8fChlPT0xP3Nbcl09cTN0KHMsbixyLHRbMF0pOnI9PTE/c1tlXT1xM3Qocyx0LGUsblswXSk6UGJuKHQsbixzLGUscikpfWZ1bmN0aW9uIGlpZSh0LGUpe3ZhciBuO3QuYy5sZW5ndGghPTAmJihuPXUoUDEodCxOdChsMCxZZywxMCx0LmMubGVuZ3RoLDAsMSkpLDE5MyksYzJ0KG4sbmV3IF9rKSxHb2UobixlKSl9ZnVuY3Rpb24gc2llKHQsZSl7dmFyIG47dC5jLmxlbmd0aCE9MCYmKG49dShQMSh0LE50KGwwLFlnLDEwLHQuYy5sZW5ndGgsMCwxKSksMTkzKSxjMnQobixuZXcgemQpLEdvZShuLGUpKX1mdW5jdGlvbiBuM3QodCxlLG4scil7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4hdC5uJiYodC5uPW5ldyBmZShxbyx0LDEsNykpLHQubjtjYXNlIDI6cmV0dXJuIHQua31yZXR1cm4gWjN0KHQsZSxuLHIpfWZ1bmN0aW9uIGFvKCl7YW89WixoMD1uZXcgUE0oTl8sMCksQ2Y9bmV3IFBNKHg2LDEpLHpoPW5ldyBQTSh5NiwyKSxuZz1uZXcgUE0oRG90LDMpLHJnPW5ldyBQTSgiVVAiLDQpfWZ1bmN0aW9uIGl2KCl7aXY9WixxND1uZXcgSWV0KEowLDApLFA3dD1uZXcgSWV0KCJJTlNJREVfUE9SVF9TSURFX0dST1VQUyIsMSksbGx0PW5ldyBJZXQoIkZPUkNFX01PREVMX09SREVSIiwyKX1mdW5jdGlvbiBhaWUodCxlLG4pe2lmKHQ8MHx8ZT5uKXRocm93IGl0KG5ldyB5byhXcSt0K1l4dCtlKyIsIHNpemU6ICIrbikpO2lmKHQ+ZSl0aHJvdyBpdChuZXcgRm4oV3ErdCtEZmUrZSkpfWZ1bmN0aW9uIGZoKHQsZSxuKXtpZihlPDApaTV0KHQsbik7ZWxzZXtpZighbi5JaigpKXRocm93IGl0KG5ldyBGbihsYituLm5lKCkrWF8pKTt1KG4sNjYpLk5qKCkuVmoodCx0LnloKCksZSl9fWZ1bmN0aW9uIE9sbih0LGUsbixyLHMsbyxoLGQpe3ZhciB2O2Zvcih2PW47bzxoOyl2Pj1yfHxlPG4mJmQudWUodFtlXSx0W3ZdKTw9MD90cyhzLG8rKyx0W2UrK10pOnRzKHMsbysrLHRbdisrXSl9ZnVuY3Rpb24gb2llKHQsZSxuLHIscyxvKXt0aGlzLmU9bmV3IGhlLHRoaXMuZj0oc28oKSxPUyksbGUodGhpcy5lLHQpLHRoaXMuZD1lLHRoaXMuYT1uLHRoaXMuYj1yLHRoaXMuZj1zLHRoaXMuYz1vfWZ1bmN0aW9uIGNpZSh0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IG5yKHQpO3IuZSE9ci5pLmdjKCk7KWlmKG49dShkcihyKSwyNiksVnQoZSk9PT1WdChuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBQbG4odCl7JHEoKTt2YXIgZSxuLHIscztmb3Iobj1sc3QoKSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWlmKGU9bltyXSxSbyhlLmEsdCwwKSE9LTEpcmV0dXJuIGU7cmV0dXJuIFV1dH1mdW5jdGlvbiB1aWUodCl7cmV0dXJuIHQ+PTY1JiZ0PD03MD90LTY1KzEwOnQ+PTk3JiZ0PD0xMDI/dC05NysxMDp0Pj00OCYmdDw9NTc/dC00ODowfWZ1bmN0aW9uIGxpZSh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9tZih0KTooZT1uZXcgX2gobWYodCkpLGUuYSs9IiAoc291cmNlOiAiLGdvKGUsdC5kKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIEZsbih0LGUsbil7dmFyIHIscztyZXR1cm4gcz10LmEsdC5hPWUsdC5EYiY0JiYhKHQuRGImMSkmJihyPW5ldyBKcyh0LDEsNSxzLHQuYSksbj9UNHQobixyKTpuPXIpLG59ZnVuY3Rpb24gemcodCxlKXt2YXIgbjtuPSh0LkJiJjI1NikhPTAsZT90LkJifD0yNTY6dC5CYiY9LTI1Nyx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDIsbixlKSl9ZnVuY3Rpb24gcjN0KHQsZSl7dmFyIG47bj0odC5CYiYyNTYpIT0wLGU/dC5CYnw9MjU2OnQuQmImPS0yNTcsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGJmKHQsMSw4LG4sZSkpfWZ1bmN0aW9uIEl6KHQsZSl7dmFyIG47bj0odC5CYiYyNTYpIT0wLGU/dC5CYnw9MjU2OnQuQmImPS0yNTcsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGJmKHQsMSw4LG4sZSkpfWZ1bmN0aW9uIHFnKHQsZSl7dmFyIG47bj0odC5CYiY1MTIpIT0wLGU/dC5CYnw9NTEyOnQuQmImPS01MTMsdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGJmKHQsMSwzLG4sZSkpfWZ1bmN0aW9uIGkzdCh0LGUpe3ZhciBuO249KHQuQmImNTEyKSE9MCxlP3QuQmJ8PTUxMjp0LkJiJj0tNTEzLHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBiZih0LDEsOSxuLGUpKX1mdW5jdGlvbiBlXyh0LGUpe3ZhciBuO3JldHVybiB0LmI9PS0xJiZ0LmEmJihuPXQuYS5HaigpLHQuYj1uP3QuYy5YZyh0LmEuYWooKSxuKTpHaSh0LmMuVGcoKSx0LmEpKSx0LmMuT2codC5iLGUpfWZ1bmN0aW9uIHBlKHQpe3ZhciBlLG47cmV0dXJuIHQ+LTEyOSYmdDwxMjg/KGU9dCsxMjgsbj0oY0t0KCksZkV0KVtlXSwhbiYmKG49ZkV0W2VdPW5ldyB1TSh0KSksbik6bmV3IHVNKHQpfWZ1bmN0aW9uIHVFKHQpe3ZhciBlLG47cmV0dXJuIHQ+LTEyOSYmdDwxMjg/KGU9dCsxMjgsbj0oZ0t0KCksYkV0KVtlXSwhbiYmKG49YkV0W2VdPW5ldyBmUih0KSksbik6bmV3IGZSKHQpfWZ1bmN0aW9uIHMzdCh0KXt2YXIgZSxuO3JldHVybiBlPXQuayxlPT0oVm4oKSxrcyk/KG49dShRKHQsKGFlKCksb2MpKSw2MSksbj09KHZlKCksUG4pfHxuPT1tcik6ITF9ZnVuY3Rpb24gTmxuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIG89KHM9X0UodC5iLGUpLHMpLG8mJihyPXUoUHEoVEQodCxvKSwiIiksMjYpLHIpP0M1dCh0LHIsZSxuKTpudWxsfWZ1bmN0aW9uIFVpdCh0LGUsbil7dmFyIHIscyxvO3JldHVybiBvPShzPV9FKHQuYixlKSxzKSxvJiYocj11KFBxKFREKHQsbyksIiIpLDI2KSxyKT9fNXQodCxyLGUsbik6bnVsbH1mdW5jdGlvbiBoaWUodCxlKXt2YXIgbixyO2ZvcihyPW5ldyBucih0KTtyLmUhPXIuaS5nYygpOylpZihuPXUoZHIociksMTM4KSxWdChlKT09PVZ0KG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIG5fKHQsZSxuKXt2YXIgcjtpZihyPXQuZ2MoKSxlPnIpdGhyb3cgaXQobmV3IHFtKGUscikpO2lmKHQuaGkoKSYmdC5IYyhuKSl0aHJvdyBpdChuZXcgRm4oZU8pKTt0LlhoKGUsbil9ZnVuY3Rpb24gQmxuKHQsZSl7dmFyIG47aWYobj1uNCh0LmksZSksbj09bnVsbCl0aHJvdyBpdChuZXcgdWQoIk5vZGUgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIGJ5dChlLG4pLG51bGx9ZnVuY3Rpb24gUmxuKHQsZSl7dmFyIG47aWYobj1tSSh0LGUpLF90KG4sMzIyKSlyZXR1cm4gdShuLDM0KTt0aHJvdyBpdChuZXcgRm4obGIrZSsiJyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUiKSl9ZnVuY3Rpb24gamxuKHQsZSxuKXt2YXIgcixzO2ZvcihzPV90KGUsOTkpJiZ1KGUsMTgpLkJiJkthP25ldyBybnQoZSx0KTpuZXcgdEUoZSx0KSxyPTA7cjxuOysrcilReihzKTtyZXR1cm4gc31mdW5jdGlvbiAkbG4odCl7dmFyIGUsbixyO2ZvcihyPTAsbj10Lmxlbmd0aCxlPTA7ZTxuO2UrKyl0W2VdPT0zMnx8dFtlXT09MTN8fHRbZV09PTEwfHx0W2VdPT05fHwodFtyKytdPXRbZV0pO3JldHVybiByfWZ1bmN0aW9uIHpsbih0KXt2YXIgZSxuLHI7Zm9yKGU9bmV3IGhlLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw1OTQpLExzKGUsdShuLmpmKCksMTQpKTtyZXR1cm4gZX1mdW5jdGlvbiBxbG4odCl7dmFyIGUsbixyO2ZvcihlPXUoUSh0LChmYygpLGFfdCkpLDE1KSxyPWUuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTg4KSxyaShuLmIuZCxuKSxyaShuLmMuYixuKX1mdW5jdGlvbiBIbG4odCl7c3dpdGNoKHUoUSh0LChhZSgpLEIyKSksMzAzKS5nKXtjYXNlIDE6SnQodCxCMiwocTAoKSxGNikpO2JyZWFrO2Nhc2UgMjpKdCh0LEIyLChxMCgpLFk0KSl9fWZ1bmN0aW9uIFZsbih0KXt2YXIgZTt0LmcmJihlPXQuYy5SZigpP3QuZjp0LmEsajV0KGUuYSx0Lm8sITApLGo1dChlLmEsdC5vLCExKSxKdCh0Lm8sKFRlKCksY3MpLCh1YSgpLFkyKSkpfWZ1bmN0aW9uIEdsbih0KXt2YXIgZTtpZighdC5hKXRocm93IGl0KG5ldyBObygiQ2Fubm90IG9mZnNldCBhbiB1bmFzc2lnbmVkIGN1dC4iKSk7ZT10LmMtdC5iLHQuYis9ZSxyUXQodCxlKSxuUXQodCxlKX1mdW5jdGlvbiBVbG4odCl7dmFyIGU7cmV0dXJuIGU9dC5hW3QuYy0xJnQuYS5sZW5ndGgtMV0sZT09bnVsbD9udWxsOih0LmM9dC5jLTEmdC5hLmxlbmd0aC0xLHRzKHQuYSx0LmMsbnVsbCksZSl9ZnVuY3Rpb24gZmllKHQpe3ZhciBlLG47Zm9yKG49dC5wLmEuZWMoKS5LYygpO24uT2IoKTspaWYoZT11KG4uUGIoKSwyMTMpLGUuZiYmdC5iW2UuY108LTFlLTEwKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIGEzdCh0LGUpe3N3aXRjaCh0LmIuZyl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gZTtjYXNlIDI6Y2FzZSAzOnJldHVybiBuZXcgYWgoZS5kLDAsZS5hLGUuYik7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gZGllKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMjpyZXR1cm4gQ2Y7Y2FzZSAxOnJldHVybiB6aDtjYXNlIDQ6cmV0dXJuIG5nO2Nhc2UgMzpyZXR1cm4gcmc7ZGVmYXVsdDpyZXR1cm4gaDB9fWZ1bmN0aW9uIG8zdCh0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIEJuO2Nhc2UgMjpyZXR1cm4gUG47Y2FzZSAzOnJldHVybiBIbjtjYXNlIDQ6cmV0dXJuIG1yO2RlZmF1bHQ6cmV0dXJuIFpvfX1mdW5jdGlvbiBZRCh0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIG1yO2Nhc2UgMjpyZXR1cm4gQm47Y2FzZSAzOnJldHVybiBQbjtjYXNlIDQ6cmV0dXJuIEhuO2RlZmF1bHQ6cmV0dXJuIFpvfX1mdW5jdGlvbiBPeih0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIEhuO2Nhc2UgMjpyZXR1cm4gbXI7Y2FzZSAzOnJldHVybiBCbjtjYXNlIDQ6cmV0dXJuIFBuO2RlZmF1bHQ6cmV0dXJuIFpvfX1mdW5jdGlvbiBXbG4odCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gbmV3IElxdDtjYXNlIDE6cmV0dXJuIG5ldyBNcXQ7Y2FzZSAyOnJldHVybiBuZXcgRHF0O2RlZmF1bHQ6dGhyb3cgaXQobmV3IGdNKX19ZnVuY3Rpb24gTXModCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ9PWU/dD09MD9NcygxL3QsMS9lKTowOmlzTmFOKHQpP2lzTmFOKGUpPzA6MTotMX1mdW5jdGlvbiBZbG4odCxlKXt2cihlLCJTb3J0IGVuZCBsYWJlbHMiLDEpLGxzKFJpKFdvKG5ldyBUbihudWxsLG5ldyBfbih0LmIsMTYpKSxuZXcgY04pLG5ldyBLNSksbmV3IEFLKSxvcihlKX1mdW5jdGlvbiByXyh0LGUsbil7dmFyIHIscztyZXR1cm4gdC5laigpPyhzPXQuZmooKSxyPUpzdCh0LGUsbiksdC4kaSh0LlppKDcscGUobikscixlLHMpKSxyKTpKc3QodCxlLG4pfWZ1bmN0aW9uIFdpdCh0LGUpe3ZhciBuLHIsczt0LmQ9PW51bGw/KCsrdC5lLC0tdC5mKToocz1lLmNkKCksbj1lLlNoKCkscj0obiZ3aSkldC5kLmxlbmd0aCxEYW4odCxyLExjZSh0LHIsbixzKSkpfWZ1bmN0aW9uIGxFKHQsZSl7dmFyIG47bj0odC5CYiZ4ZikhPTAsZT90LkJifD14Zjp0LkJiJj0tMTAyNSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDEwLG4sZSkpfWZ1bmN0aW9uIGhFKHQsZSl7dmFyIG47bj0odC5CYiZFeSkhPTAsZT90LkJifD1FeTp0LkJiJj0tNDA5Nyx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDEyLG4sZSkpfWZ1bmN0aW9uIGZFKHQsZSl7dmFyIG47bj0odC5CYiZIdSkhPTAsZT90LkJifD1IdTp0LkJiJj0tODE5Myx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDE1LG4sZSkpfWZ1bmN0aW9uIGRFKHQsZSl7dmFyIG47bj0odC5CYiZEeSkhPTAsZT90LkJifD1EeTp0LkJiJj0tMjA0OSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDExLG4sZSkpfWZ1bmN0aW9uIEtsbih0LGUpe3ZhciBuO3JldHVybiBuPU1zKHQuYi5jLGUuYi5jKSxuIT0wfHwobj1Ncyh0LmEuYSxlLmEuYSksbiE9MCk/bjpNcyh0LmEuYixlLmEuYil9ZnVuY3Rpb24gWGxuKHQsZSl7dmFyIG47aWYobj10cih0LmssZSksbj09bnVsbCl0aHJvdyBpdChuZXcgdWQoIlBvcnQgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIGJ5dChlLG4pLG51bGx9ZnVuY3Rpb24gUWxuKHQpe3ZhciBlLG47Zm9yKG49UGNlKFJsKHQpKS5LYygpO24uT2IoKTspaWYoZT1CcihuLlBiKCkpLGtfKHQsZSkpcmV0dXJuIHNhbigoSFZ0KCksbDVlKSxlKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBabG4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihoPW91KHQuZS5UZygpLGUpLG89MCxuPXUodC5nLDExOSkscz0wO3M8dC5pOysrcylyPW5bc10saC5ybChyLmFrKCkpJiYrK287cmV0dXJuIG99ZnVuY3Rpb24gSmxuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPXUoZS5XZSh0LmEpLDM1KSxzPXUobi5XZSh0LmEpLDM1KSxyIT1udWxsJiZzIT1udWxsP0lEKHIscyk6ciE9bnVsbD8tMTpzIT1udWxsPzE6MH1mdW5jdGlvbiBnaWUodCxlLG4pe3ZhciByLHM7aWYodC5jKUY0dCh0LmMsZSxuKTtlbHNlIGZvcihzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTU3KSxnaWUocixlLG4pfWZ1bmN0aW9uIFlpdCh0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNDYpLG11KHQuYi5iLG4uYiksTXJuKHUobi5hLDE4OSksdShuLmIsODEpKX1mdW5jdGlvbiB0aG4odCl7dmFyIGUsbjtmb3Iobj1xcChuZXcgTXAsOTEpLGU9ITA7dC5PYigpOyllfHwobi5hKz1ZYSksZT0hMSxoYyhuLHQuUGIoKSk7cmV0dXJuKG4uYSs9Il0iLG4pLmF9ZnVuY3Rpb24gZ0UodCxlKXt2YXIgbjtuPSh0LkJiJm1kKSE9MCxlP3QuQmJ8PW1kOnQuQmImPS0xNjM4NSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDE2LG4sZSkpfWZ1bmN0aW9uIEtpdCh0LGUpe3ZhciBuO249KHQuQmImZGMpIT0wLGU/dC5CYnw9ZGM6dC5CYiY9LTMyNzY5LHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBiZih0LDEsMTgsbixlKSl9ZnVuY3Rpb24gYzN0KHQsZSl7dmFyIG47bj0odC5CYiZkYykhPTAsZT90LkJifD1kYzp0LkJiJj0tMzI3NjksdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IGJmKHQsMSwxOCxuLGUpKX1mdW5jdGlvbiB1M3QodCxlKXt2YXIgbjtuPSh0LkJiJkthKSE9MCxlP3QuQmJ8PUthOnQuQmImPS02NTUzNyx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgYmYodCwxLDIwLG4sZSkpfWZ1bmN0aW9uIGwzdCh0KXt2YXIgZTtyZXR1cm4gZT1OdCh4aCx5ZCwyNSwyLDE1LDEpLHQtPUthLGVbMF09KHQ+PjEwKStSSSZ5cyxlWzFdPSh0JjEwMjMpKzU2MzIwJnlzLE1oKGUsMCxlLmxlbmd0aCl9ZnVuY3Rpb24gUHoodCl7dmFyIGUsbjtyZXR1cm4gbj11KFEodCwoVGUoKSxXbCkpLDEwMyksbj09KGFvKCksaDApPyhlPVh0KHllKFEodCxyRykpKSxlPj0xP0NmOm5nKTpufWZ1bmN0aW9uIGVobih0KXtzd2l0Y2godShRKHQsKFRlKCksZWcpKSwyMTgpLmcpe2Nhc2UgMTpyZXR1cm4gbmV3IFlYO2Nhc2UgMzpyZXR1cm4gbmV3IEpYO2RlZmF1bHQ6cmV0dXJuIG5ldyBXWH19ZnVuY3Rpb24gdzIodCl7aWYodC5jKXcyKHQuYyk7ZWxzZSBpZih0LmQpdGhyb3cgaXQobmV3IE5vKCJTdHJlYW0gYWxyZWFkeSB0ZXJtaW5hdGVkLCBjYW4ndCBiZSBtb2RpZmllZCBvciB1c2VkIikpfWZ1bmN0aW9uIFhpdCh0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9tZih0KTooZT1uZXcgX2gobWYodCkpLGUuYSs9IiAoaWRlbnRpZmllcjogIixnbyhlLHQuayksZS5hKz0iKSIsZS5hKX1mdW5jdGlvbiBwaWUodCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9KFN3KCkscz1uZXcgeHAscyksaXoocixlKSxzeihyLG4pLHQmJkRyKCghdC5hJiYodC5hPW5ldyBBcyhHaCx0LDUpKSx0LmEpLHIpLHJ9ZnVuY3Rpb24gUWl0KHQsZSxuLHIpe3ZhciBzLG87cmV0dXJuIE9uKHIpLE9uKG4pLHM9dC54YyhlKSxvPXM9PW51bGw/bjpNVnQodShzLDE1KSx1KG4sMTQpKSxvPT1udWxsP3QuQmMoZSk6dC56YyhlLG8pLG99ZnVuY3Rpb24gdW4odCl7dmFyIGUsbixyLHM7cmV0dXJuIG49KGU9dShWZigocj10LmdtLHM9ci5mLHM9PUhyP3I6cykpLDkpLG5ldyBzaChlLHUoZmYoZSxlLmxlbmd0aCksOSksMCkpLHZmKG4sdCksbn1mdW5jdGlvbiBuaG4odCxlLG4pe3ZhciByLHM7Zm9yKHM9dC5hLmVjKCkuS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksMTApLE5EKG4sdShOZShlLHIucCksMTQpKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1mdW5jdGlvbiByaG4odCxlLG4pe3ZhciByO3RyeXtCdW4odCxlLG4pfWNhdGNoKHMpe3Rocm93IHM9V2kocyksX3Qocyw1OTcpPyhyPXMsaXQobmV3IGRtdChyKSkpOml0KHMpfXJldHVybiBlfWZ1bmN0aW9uIEpwKHQsZSl7dmFyIG47cmV0dXJuIEJvKHQpJiZCbyhlKSYmKG49dC1lLEJJPG4mJm48QzIpP246S3AodHJlKEJvKHQpP0xoKHQpOnQsQm8oZSk/TGgoZSk6ZSkpfWZ1bmN0aW9uIFBhKHQsZSl7dmFyIG47cmV0dXJuIEJvKHQpJiZCbyhlKSYmKG49dCtlLEJJPG4mJm48QzIpP246S3AobXVuKEJvKHQpP0xoKHQpOnQsQm8oZSk/TGgoZSk6ZSkpfWZ1bmN0aW9uIF9hKHQsZSl7dmFyIG47cmV0dXJuIEJvKHQpJiZCbyhlKSYmKG49dCplLEJJPG4mJm48QzIpP246S3AoJDNuKEJvKHQpP0xoKHQpOnQsQm8oZSk/TGgoZSk6ZSkpfWZ1bmN0aW9uIEtvKHQsZSl7dmFyIG47cmV0dXJuIHQuaXx8cjV0KHQpLG49dShwbyh0LmcsZSksNDYpLG4/bmV3IFFkKHQuaix1KG4uYSwxOSkuYSx1KG4uYiwxOSkuYSk6KHduKCksd24oKSxpbyl9ZnVuY3Rpb24gc3YodCxlLG4pe3ZhciByO3JldHVybiByPXQuYS5nZXQoZSksdC5hLnNldChlLG49PT12b2lkIDA/bnVsbDpuKSxyPT09dm9pZCAwPygrK3QuYyx3JCh0LmIpKTorK3QuZCxyfWZ1bmN0aW9uIGlobih0LGUsbil7dC5uPXQyKE9iLFtlZSx3b3RdLFszNjQsMjVdLDE0LFtuLHBzKGIuTWF0aC5jZWlsKGUvMzIpKV0sMiksdC5vPWUsdC5wPW4sdC5qPWUtMT4+MSx0Lms9bi0xPj4xfWZ1bmN0aW9uIFppdCgpe000dCgpO3ZhciB0LGUsbjtuPUp4bisrK0RhdGUubm93KCksdD1wcyhiLk1hdGguZmxvb3IobiokSSkpJlVxLGU9cHMobi10Kkd4dCksdGhpcy5hPXReMTUwMix0aGlzLmI9ZV5Fb3R9ZnVuY3Rpb24gVTAodCl7dmFyIGUsbixyO2ZvcihlPW5ldyBoZSxyPW5ldyBTKHQuaik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTEpLGxlKGUsbi5iKTtyZXR1cm4gTHIoZSksbmV3IGY5KGUpfWZ1bmN0aW9uIGpvKHQpe3ZhciBlLG4scjtmb3IoZT1uZXcgaGUscj1uZXcgUyh0LmopO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDExKSxsZShlLG4uZSk7cmV0dXJuIExyKGUpLG5ldyBmOShlKX1mdW5jdGlvbiBEcyh0KXt2YXIgZSxuLHI7Zm9yKGU9bmV3IGhlLHI9bmV3IFModC5qKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMSksbGUoZSxuLmcpO3JldHVybiBMcihlKSxuZXcgZjkoZSl9ZnVuY3Rpb24gc2huKHQpe3ZhciBlLG47Zm9yKG49bjJuKFJsKFltKHQpKSkuS2MoKTtuLk9iKCk7KWlmKGU9QnIobi5QYigpKSxrXyh0LGUpKXJldHVybiBhYW4oKFZWdCgpLGg1ZSksZSk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gYWhuKHQpe3ZhciBlLG4scjtmb3Iobj0wLHI9dC5sZW5ndGg7bjxyO24rKylpZih0W25dPT1udWxsKXRocm93IGl0KG5ldyBTeCgiYXQgaW5kZXggIituKSk7cmV0dXJuIGU9dCxuZXcgeWwoZSl9ZnVuY3Rpb24gb2huKHQsZSl7dmFyIG47aWYobj1tSSh0LlRnKCksZSksX3Qobiw5OSkpcmV0dXJuIHUobiwxOCk7dGhyb3cgaXQobmV3IEZuKGxiK2UrIicgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIikpfWZ1bmN0aW9uIGNobih0KXt2YXIgZTtyZXR1cm4gZT1keSh0KSxlPjM0MDI4MjM0NjYzODUyODg2ZTIyP2FzOmU8LTM0MDI4MjM0NjYzODUyODg2ZTIyP0NzOmV9ZnVuY3Rpb24gYmllKHQpe3JldHVybiB0LT10Pj4xJjE0MzE2NTU3NjUsdD0odD4+MiY4NTg5OTM0NTkpKyh0Jjg1ODk5MzQ1OSksdD0odD4+NCkrdCYyNTI2NDUxMzUsdCs9dD4+OCx0Kz10Pj4xNix0JjYzfWZ1bmN0aW9uIHdpZSh0KXt2YXIgZSxuLHIscztmb3IoZT1uZXcgUVd0KHQuSGQoKS5nYygpKSxzPTAscj1lNih0LkhkKCkuS2MoKSk7ci5PYigpOyluPXIuUGIoKSx2aW4oZSxuLHBlKHMrKykpO3JldHVybiBIZ24oZS5hKX1mdW5jdGlvbiB1aG4odCxlKXt2YXIgbixyLHM7Zm9yKHM9bmV3IF9yLHI9ZS52YygpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDQyKSxraShzLG4uY2QoKSx0dW4odCx1KG4uZGQoKSwxNSkpKTtyZXR1cm4gc31mdW5jdGlvbiBoM3QodCxlKXt0Lm4uYy5sZW5ndGg9PTAmJmxlKHQubixuZXcgRSQodC5zLHQudCx0LmkpKSxsZSh0LmIsZSksVzN0KHUoTmUodC5uLHQubi5jLmxlbmd0aC0xKSwyMTEpLGUpLFNsZSh0LGUpfWZ1bmN0aW9uIHU0KHQpe3JldHVybih0LmMhPXQuYi5ifHx0LmkhPXQuZy5iKSYmKHQuYS5jPU50KFFuLERlLDEsMCw1LDEpLExzKHQuYSx0LmIpLExzKHQuYSx0LmcpLHQuYz10LmIuYix0Lmk9dC5nLmIpLHQuYX1mdW5jdGlvbiBKaXQodCxlKXt2YXIgbixyLHM7Zm9yKHM9MCxyPXUoZS5LYih0KSwyMCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTcpLGplKFJlKFEobiwoYWUoKSxxMSkpKSl8fCsrcztyZXR1cm4gc31mdW5jdGlvbiBsaG4odCxlKXt2YXIgbixyLHM7cj10NChlKSxzPVh0KHllKG95KHIsKFRlKCksVGYpKSkpLG49Yi5NYXRoLm1heCgwLHMvMi0uNSksaF8oZSxuLDEpLGxlKHQsbmV3IHVHdChlLG4pKX1mdW5jdGlvbiBkaCgpe2RoPVosTU89bmV3IE1NKEowLDApLEVTPW5ldyBNTSgiRklSU1QiLDEpLGJiPW5ldyBNTShDMWUsMiksVFM9bmV3IE1NKCJMQVNUIiwzKSxqeT1uZXcgTU0oXzFlLDQpfWZ1bmN0aW9uIFcwKCl7VzA9WixDZnQ9bmV3IHNqKE5fLDApLGVQPW5ldyBzaigiUE9MWUxJTkUiLDEpLE43PW5ldyBzaigiT1JUSE9HT05BTCIsMiksWDY9bmV3IHNqKCJTUExJTkVTIiwzKX1mdW5jdGlvbiBGeigpe0Z6PVosel90PW5ldyBYZXQoIkFTUEVDVF9SQVRJT19EUklWRU4iLDApLFFodD1uZXcgWGV0KCJNQVhfU0NBTEVfRFJJVkVOIiwxKSwkX3Q9bmV3IFhldCgiQVJFQV9EUklWRU4iLDIpfWZ1bmN0aW9uIEtEKCl7S0Q9WixqRz1uZXcgUWV0KCJQMV9TVFJVQ1RVUkUiLDApLCRHPW5ldyBRZXQoIlAyX1BST0NFU1NJTkdfT1JERVIiLDEpLHpHPW5ldyBRZXQoIlAzX0VYRUNVVElPTiIsMil9ZnVuY3Rpb24gTnooKXtOej1aLEdodD1uZXcgV2V0KCJPVkVSTEFQX1JFTU9WQUwiLDApLEhodD1uZXcgV2V0KCJDT01QQUNUSU9OIiwxKSxWaHQ9bmV3IFdldCgiR1JBUEhfU0laRV9DQUxDVUxBVElPTiIsMil9ZnVuY3Rpb24gYXYodCxlKXtyZXR1cm4gazEoKSx3ZihzYiksYi5NYXRoLmFicyh0LWUpPD1zYnx8dD09ZXx8aXNOYU4odCkmJmlzTmFOKGUpPzA6dDxlPy0xOnQ+ZT8xOkl3KGlzTmFOKHQpLGlzTmFOKGUpKX1mdW5jdGlvbiB2aWUodCxlKXt2YXIgbixyO2ZvcihuPWVpKHQsMCk7bi5iIT1uLmQuYzspe2lmKHI9cE0oeWUodGkobikpKSxyPT1lKXJldHVybjtpZihyPmUpe09ydChuKTticmVha319ZUQobixlKX1mdW5jdGlvbiBhbih0LGUpe3ZhciBuLHIscyxvLGg7aWYobj1lLmYsbTIodC5jLmQsbixlKSxlLmchPW51bGwpZm9yKHM9ZS5nLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLG0yKHQuYy5lLHIsZSl9ZnVuY3Rpb24gaGhuKHQsZSxuLHIpe3ZhciBzLG8saDtmb3Iocz1lKzE7czxuOysrcylmb3Iobz1zO28+ZSYmci51ZSh0W28tMV0sdFtvXSk+MDstLW8paD10W29dLHRzKHQsbyx0W28tMV0pLHRzKHQsby0xLGgpfWZ1bmN0aW9uIGdoKHQsZSxuLHIpe2lmKGU8MClNNXQodCxuLHIpO2Vsc2V7aWYoIW4uSWooKSl0aHJvdyBpdChuZXcgRm4obGIrbi5uZSgpK1hfKSk7dShuLDY2KS5OaigpLlRqKHQsdC55aCgpLGUscil9fWZ1bmN0aW9uIEJ6KHQsZSl7aWYoZT09dC5kKXJldHVybiB0LmU7aWYoZT09dC5lKXJldHVybiB0LmQ7dGhyb3cgaXQobmV3IEZuKCJOb2RlICIrZSsiIG5vdCBwYXJ0IG9mIGVkZ2UgIit0KSl9ZnVuY3Rpb24gZmhuKHQsZSl7c3dpdGNoKGUuZyl7Y2FzZSAyOnJldHVybiB0LmI7Y2FzZSAxOnJldHVybiB0LmM7Y2FzZSA0OnJldHVybiB0LmQ7Y2FzZSAzOnJldHVybiB0LmE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gbWllKHQsZSl7c3dpdGNoKGUuZyl7Y2FzZSAyOnJldHVybiB0LmI7Y2FzZSAxOnJldHVybiB0LmM7Y2FzZSA0OnJldHVybiB0LmQ7Y2FzZSAzOnJldHVybiB0LmE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gZjN0KHQsZSxuLHIpe3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuIHQuZjtjYXNlIDQ6cmV0dXJuIHQuZztjYXNlIDU6cmV0dXJuIHQuaTtjYXNlIDY6cmV0dXJuIHQuan1yZXR1cm4gbjN0KHQsZSxuLHIpfWZ1bmN0aW9uIGRobih0KXtyZXR1cm4gdC5rIT0oVm4oKSxPcyk/ITE6TjgobmV3IFRuKG51bGwsbmV3IGp3KG5ldyBhcihscihEcyh0KS5hLktjKCksbmV3IHopKSkpLG5ldyAkTil9ZnVuY3Rpb24gZ2huKHQpe3JldHVybiB0LmU9PW51bGw/dDooIXQuYyYmKHQuYz1uZXcgZmF0KCh0LmYmMjU2KSE9MCx0LmksdC5hLHQuZCwodC5mJjE2KSE9MCx0LmosdC5nLG51bGwpKSx0LmMpfWZ1bmN0aW9uIHBobih0LGUpe3JldHVybiB0Lmg9PU5JJiZ0Lm09PTAmJnQubD09MD8oZSYmKGhiPWl1KDAsMCwwKSkseVV0KChxOCgpLGFFdCkpKTooZSYmKGhiPWl1KHQubCx0Lm0sdC5oKSksaXUoMCwwLDApKX1mdW5jdGlvbiAkbyh0KXt2YXIgZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5pbT09PUV0P0lwKG9sKHQpKSsiQCIrKGU9SGkodCk+Pj4wLGUudG9TdHJpbmcoMTYpKTp0LnRvU3RyaW5nKCl9ZnVuY3Rpb24gaV8odCl7dmFyIGU7dGhpcy5hPShlPXUodC5lJiZ0LmUoKSw5KSxuZXcgc2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSx0aGlzLmI9TnQoUW4sRGUsMSx0aGlzLmEuYS5sZW5ndGgsNSwxKX1mdW5jdGlvbiBiaG4odCl7dmFyIGUsbixyO2Zvcih0aGlzLmE9bmV3IE8wLHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTQpLGU9bmV3IENLdCxDY24oZSxuKSxGcyh0aGlzLmEsZSl9ZnVuY3Rpb24gd2huKHQpeyRtKCk7dmFyIGUsbixyLHM7Zm9yKGU9dC5vLmIscj11KHUoQWkodC5yLCh2ZSgpLG1yKSksMjEpLDg0KS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwxMTEpLHM9bi5lLHMuYis9ZX1mdW5jdGlvbiBjbCh0KXt2YXIgZTtpZih0LmIpe2lmKGNsKHQuYiksdC5iLmQhPXQuYyl0aHJvdyBpdChuZXcgcmgpfWVsc2UgdC5kLmRjKCkmJihlPXUodC5mLmMueGModC5lKSwxNCksZSYmKHQuZD1lKSl9ZnVuY3Rpb24gdmhuKHQpe3ZhciBlO3JldHVybiB0PT1udWxsPyEwOihlPXQubGVuZ3RoLGU+MCYmKFJyKGUtMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGUtMSk9PTU4KSYmIXRzdCh0LG9BLGNBKSl9ZnVuY3Rpb24gdHN0KHQsZSxuKXt2YXIgcixzO2ZvcihyPTAscz10Lmxlbmd0aDtyPHM7cisrKWlmKFNpdCgoUnIocix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHIpKSxlLG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIG1obih0LGUpe3ZhciBuLHI7Zm9yKHI9dC5lLmEuZWMoKS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSwyNjYpLEVnbihlLG4uZCl8fE1wbihlLG4uZCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geWhuKHQsZSl7dmFyIG4scixzO2ZvcihyPXNtbih0LGUpLHM9cltyLmxlbmd0aC0xXS8yLG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dPj1zKXJldHVybiBlLmMrbjtyZXR1cm4gZS5jK2UuYi5nYygpfWZ1bmN0aW9uIHhobih0LGUpe3k4KCk7dmFyIG4scixzLG87Zm9yKHI9T3RlKHQpLHM9ZSwkOChyLDAsci5sZW5ndGgscyksbj0wO248ci5sZW5ndGg7bisrKW89cmRuKHQscltuXSxuKSxuIT1vJiZyXyh0LG4sbyl9ZnVuY3Rpb24gZDN0KHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihyPTAsbj0wLG89ZSxoPTAsZD1vLmxlbmd0aDtoPGQ7KytoKXM9b1toXSxzPjAmJihyKz1zLCsrbik7cmV0dXJuIG4+MSYmKHIrPXQuZCoobi0xKSkscn1mdW5jdGlvbiBnM3QodCl7dmFyIGUsbixyO2ZvcihyPW5ldyBBZyxyLmErPSJbIixlPTAsbj10LmdjKCk7ZTxuOylnbyhyLGI5KHQua2koZSkpKSwrK2U8biYmKHIuYSs9WWEpO3JldHVybiByLmErPSJdIixyLmF9ZnVuY3Rpb24ga2huKHQpe3ZhciBlLG4scixzLG87cmV0dXJuIG89RDR0KHQpLG49d00odC5jKSxyPSFuLHImJihzPW5ldyBFZyxZZihvLCJrbm93bkxheW91dGVycyIscyksZT1uZXcgUnp0KHMpLHZhKHQuYyxlKSksb31mdW5jdGlvbiBFaG4odCxlKXt2YXIgbixyLHM7Zm9yKE9uKGUpLG49ITEscj1uZXcgUyh0KTtyLmE8ci5jLmMubGVuZ3RoOylzPUoociksYXkoZSxzLCExKSYmKEw5KHIpLG49ITApO3JldHVybiBufWZ1bmN0aW9uIHAzdCh0KXt2YXIgZSxuLHI7Zm9yKHI9WHQoeWUodC5hLldlKCh1aSgpLEpHKSkpKSxuPW5ldyBTKHQuYS54ZigpKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw2ODApLFZoZSh0LGUscil9ZnVuY3Rpb24gZXN0KHQsZSl7dmFyIG4scjtmb3Iocj1uZXcgUyhlKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw0NiksbGUodC5iLmIsdShuLmIsODEpKSxQcnQodShuLmEsMTg5KSx1KG4uYiw4MSkpfWZ1bmN0aW9uIFRobih0LGUsbil7dmFyIHIscztmb3Iocz10LmEuYixyPXMuYy5sZW5ndGg7cjxuO3IrKylIbShzLDAsbmV3IFNoKHQuYSkpO0VvKGUsdShOZShzLHMuYy5sZW5ndGgtbiksMjkpKSx0LmJbZS5wXT1ufWZ1bmN0aW9uIENobih0LGUsbil7dmFyIHI7cj1uLCFyJiYocj1xd3QobmV3IHI4LDApKSx2cihyLGMxZSwyKSx5c2UodC5iLGUsUmMociwxKSksYTRuKHQsZSxSYyhyLDEpKSxaNW4oZSxSYyhyLDEpKSxvcihyKX1mdW5jdGlvbiBfaG4odCxlLG4scixzKXtGbCgpLHlmKGxmKHVmKGNmKGhmKG5ldyBDaCwwKSxzLmQuZS10KSxlKSxzLmQpKSx5ZihsZih1ZihjZihoZihuZXcgQ2gsMCksbi1zLmEuZSkscy5hKSxyKSl9ZnVuY3Rpb24gYjN0KHQsZSxuLHIscyxvKXt0aGlzLmE9dCx0aGlzLmM9ZSx0aGlzLmI9bix0aGlzLmY9cix0aGlzLmQ9cyx0aGlzLmU9byx0aGlzLmM+MCYmdGhpcy5iPjAmJkt3dCh0aGlzLmMsdGhpcy5iLHRoaXMuYSl9ZnVuY3Rpb24gdzN0KHQpe25zdCgpLHRoaXMuYz1BMShsdChjdCh3Nm4sMSksRGUsODMxLDAsW2VtZV0pKSx0aGlzLmI9bmV3IF9yLHRoaXMuYT10LGtpKHRoaXMuYix2RywxKSx4dShubWUsbmV3IGN6dCh0aGlzKSl9ZnVuY3Rpb24geWllKHQsZSl7dmFyIG47cmV0dXJuIHQuZD9UbCh0LmIsZSk/dSh0cih0LmIsZSksNTEpOihuPWUuS2YoKSxraSh0LmIsZSxuKSxuKTplLktmKCl9ZnVuY3Rpb24gdjN0KHQsZSl7dmFyIG47cmV0dXJuIFZ0KHQpPT09VnQoZSk/ITA6X3QoZSw5MSk/KG49dShlLDkxKSx0LmU9PW4uZSYmdC5kPT1uLmQmJm9hbih0LG4uYSkpOiExfWZ1bmN0aW9uIGE2KHQpe3N3aXRjaCh2ZSgpLHQuZyl7Y2FzZSA0OnJldHVybiBQbjtjYXNlIDE6cmV0dXJuIEhuO2Nhc2UgMzpyZXR1cm4gbXI7Y2FzZSAyOnJldHVybiBCbjtkZWZhdWx0OnJldHVybiBab319ZnVuY3Rpb24gbTN0KHQsZSl7c3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4gdC5mIT0wO2Nhc2UgNDpyZXR1cm4gdC5nIT0wO2Nhc2UgNTpyZXR1cm4gdC5pIT0wO2Nhc2UgNjpyZXR1cm4gdC5qIT0wfXJldHVybiB2eXQodCxlKX1mdW5jdGlvbiBTaG4odCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgZ1o7Y2FzZSAxOnJldHVybiBuZXcgdEI7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oSWN0Kyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24geGllKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IEpOO2Nhc2UgMTpyZXR1cm4gbmV3IGVCO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKFlvdCsodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIGtpZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyBRcHQ7Y2FzZSAxOnJldHVybiBuZXcgT3F0O2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKF9IKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gQWhuKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gbmV3IHVaO2Nhc2UgMjpyZXR1cm4gbmV3IGpXdDtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihJY3QrKHQuZiE9bnVsbD90LmY6IiIrdC5nKSkpfX1mdW5jdGlvbiBMaG4odCl7dmFyIGUsbjtpZih0LmIpcmV0dXJuIHQuYjtmb3Iobj0kMT9udWxsOnQuZDtuOyl7aWYoZT0kMT9udWxsOm4uYixlKXJldHVybiBlO249JDE/bnVsbDpuLmR9cmV0dXJuIGQ4KCksTkV0fWZ1bmN0aW9uIE1obih0KXt2YXIgZSxuLHI7cmV0dXJuIHQuZT09MD8wOihlPXQuZDw8NSxuPXQuYVt0LmQtMV0sdC5lPDAmJihyPUluZSh0KSxyPT10LmQtMSYmKC0tbixuPW58MCkpLGUtPXBJKG4pLGUpfWZ1bmN0aW9uIERobih0KXt2YXIgZSxuLHI7cmV0dXJuIHQ8blYubGVuZ3RoP25WW3RdOihuPXQ+PjUsZT10JjMxLHI9TnQoQ3IsWHIsMjUsbisxLDE1LDEpLHJbbl09MTw8ZSxuZXcgWDMoMSxuKzEscikpfWZ1bmN0aW9uIEVpZSh0KXt2YXIgZSxuLHI7cmV0dXJuIG49dC56ZygpLG4/KGU9dC5VZygpLF90KGUsMTYwKSYmKHI9RWllKHUoZSwxNjApKSxyIT1udWxsKT9yKyIuIituOm4pOm51bGx9ZnVuY3Rpb24gYXkodCxlLG4pe3ZhciByLHM7Zm9yKHM9dC5LYygpO3MuT2IoKTspaWYocj1zLlBiKCksVnQoZSk9PT1WdChyKXx8ZSE9bnVsbCYmeWkoZSxyKSlyZXR1cm4gbiYmcy5RYigpLCEwO3JldHVybiExfWZ1bmN0aW9uIHkzdCh0LGUsbil7dmFyIHIscztpZigrK3QuaixuLmRjKCkpcmV0dXJuITE7Zm9yKHM9bi5LYygpO3MuT2IoKTspcj1zLlBiKCksdC5IaShlLHQub2koZSxyKSksKytlO3JldHVybiEwfWZ1bmN0aW9uIElobih0LGUsbixyKXt2YXIgcyxvO2lmKG89bi1lLG88Mylmb3IoO288MzspdCo9MTAsKytvO2Vsc2V7Zm9yKHM9MTtvPjM7KXMqPTEwLC0tbzt0PSh0KyhzPj4xKSkvc3wwfXJldHVybiByLmk9dCwhMH1mdW5jdGlvbiBPaG4odCl7cmV0dXJuIHFpdCgpLE5uKCksISEobWllKHUodC5hLDgxKS5qLHUodC5iLDEwMykpfHx1KHQuYSw4MSkuZC5lIT0wJiZtaWUodSh0LmEsODEpLmosdSh0LmIsMTAzKSkpfWZ1bmN0aW9uIFBobih0KXtWJCgpLHUodC5XZSgodWkoKSx4YikpLDE3NCkuSGMoKGxsKCksaVUpKSYmKHUodC5XZShReSksMTc0KS5GYygoWnUoKSxRNikpLHUodC5XZSh4YiksMTc0KS5NYyhpVSkpfWZ1bmN0aW9uIFRpZSh0LGUpe3ZhciBuLHI7aWYoZSl7Zm9yKG49MDtuPHQuaTsrK24paWYocj11KHQuZ1tuXSwzNjYpLHIuRGkoZSkpcmV0dXJuITE7cmV0dXJuIERyKHQsZSl9ZWxzZSByZXR1cm4hMX1mdW5jdGlvbiB4M3QodCl7dmFyIGUsbixyLHM7Zm9yKGU9bmV3IEVnLHM9bmV3IEwodC5iLktjKCkpO3MuYi5PYigpOylyPXUocy5iLlBiKCksNjg2KSxuPVhnbihyKSx3bm4oZSxlLmEubGVuZ3RoLG4pO3JldHVybiBlLmF9ZnVuY3Rpb24gazN0KHQpe3ZhciBlO3JldHVybiF0LmMmJih0LmM9bmV3IGx3KSxacyh0LmQsbmV3IGVkKSxObW4odCksZT1Udm4odCksbHMobmV3IFRuKG51bGwsbmV3IF9uKHQuZCwxNikpLG5ldyBncih0KSksZX1mdW5jdGlvbiBSeih0KXt2YXIgZTtyZXR1cm4gdC5EYiY2ND9KOSh0KTooZT1uZXcgX2goSjkodCkpLGUuYSs9IiAoaW5zdGFuY2VDbGFzc05hbWU6ICIsZ28oZSx0LkQpLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gRmhuKHQsZSl7dmFyIG4scixzLG87ZSYmKHM9SDAoZSwieCIpLG49bmV3IE96dCh0KSxWOChuLmEsKE9uKHMpLHMpKSxvPUgwKGUsInkiKSxyPW5ldyBQenQodCksVTgoci5hLChPbihvKSxvKSkpfWZ1bmN0aW9uIE5obih0LGUpe3ZhciBuLHIscyxvO2UmJihzPUgwKGUsIngiKSxuPW5ldyBMenQodCksRzgobi5hLChPbihzKSxzKSksbz1IMChlLCJ5Iikscj1uZXcgRHp0KHQpLFc4KHIuYSwoT24obyksbykpKX1mdW5jdGlvbiBHaSh0LGUpe3ZhciBuLHIscztpZihuPSh0Lmk9PW51bGwmJnZkKHQpLHQuaSkscj1lLmFqKCksciE9LTEpe2ZvcihzPW4ubGVuZ3RoO3I8czsrK3IpaWYobltyXT09ZSlyZXR1cm4gcn1yZXR1cm4tMX1mdW5jdGlvbiBCaG4odCl7dmFyIGUsbixyLHMsbztmb3Iobj11KHQuZyw2NzQpLHI9dC5pLTE7cj49MDstLXIpZm9yKGU9bltyXSxzPTA7czxyOysrcylpZihvPW5bc10sa2xlKHQsZSxvKSl7bDYodCxyKTticmVha319ZnVuY3Rpb24gUmhuKHQpe3ZhciBlPXQuZTtmdW5jdGlvbiBuKHIpe3JldHVybiFyfHxyLmxlbmd0aD09MD8iIjoiCSIrci5qb2luKGAKCWApfXJldHVybiBlJiYoZS5zdGFja3x8bih0W1hhdF0pKX1mdW5jdGlvbiBFM3QodCl7V20oKTt2YXIgZTtzd2l0Y2goZT10LlBjKCksZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gQXV0O2Nhc2UgMTpyZXR1cm4gbmV3IFJudChMcihlWzBdKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IHZydChhaG4oZSkpfX1mdW5jdGlvbiBvdih0LGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gJHgodC5qLChqdSgpLGo3dCkpO2Nhc2UgMjpyZXR1cm4gJHgodC5qLChqdSgpLHo3dCkpO2RlZmF1bHQ6cmV0dXJuIHduKCksd24oKSxpb319ZnVuY3Rpb24gVDN0KHQsZSl7c3dpdGNoKGUpe2Nhc2UgMzpKdyh0LDApO3JldHVybjtjYXNlIDQ6dHYodCwwKTtyZXR1cm47Y2FzZSA1Omt1KHQsMCk7cmV0dXJuO2Nhc2UgNjpFdSh0LDApO3JldHVybn1aeXQodCxlKX1mdW5jdGlvbiBuc3QoKXtuc3Q9WixIUigpLHZHPShUZSgpLCR2KSxubWU9QTEobHQoY3QoY2Z0LDEpLHprdCwxNDYsMCxbT08sVGYsVjYsanYsV3ksaGh0LFM3LEE3LGZodCxMUyxKNCxxMix0NV0pKX1mdW5jdGlvbiBDaWUodCl7dmFyIGUsbjtlPXQuZD09KGg2KCksZzcpLG49RTR0KHQpLGUmJiFufHwhZSYmbj9KdCh0LmEsKFRlKCksSWQpLCh0MCgpLFVPKSk6SnQodC5hLChUZSgpLElkKSwodDAoKSxHTykpfWZ1bmN0aW9uIGpobih0LGUpe3ZhciBuO3JldHVybiBuPXUoQmwodCxjMihuZXcga2UsbmV3IGNlLG5ldyBYbixsdChjdChmbCwxKSxvZSwxMzIsMCxbKE8xKCksVWwpXSkpKSwxNSksbi5RYyhLWXQobi5nYygpKSl9ZnVuY3Rpb24ganooKXtqej1aLExmdD1uZXcgY2ooIlNJTVBMRSIsMCksQkF0PW5ldyBjaigiR1JPVVBfREVDIiwxKSxqQXQ9bmV3IGNqKCJHUk9VUF9NSVhFRCIsMiksUkF0PW5ldyBjaigiR1JPVVBfSU5DIiwzKX1mdW5jdGlvbiByc3QoKXtyc3Q9WixqZnQ9bmV3IGZCLGNMdD1uZXcgZEIsdUx0PW5ldyBnQixsTHQ9bmV3IE5rLGhMdD1uZXcgcEIsZkx0PW5ldyBiQixkTHQ9bmV3IHNKLGdMdD1uZXcgQmsscEx0PW5ldyBSa31mdW5jdGlvbiBfaWUodCxlLG4pe1BlZSgpLF9xdC5jYWxsKHRoaXMpLHRoaXMuYT10MihkcGUsW2VlLGU2dF0sWzU5NSwyMTJdLDAsW2NWLEd1dF0sMiksdGhpcy5jPW5ldyBGeCx0aGlzLmc9dCx0aGlzLmY9ZSx0aGlzLmQ9bn1mdW5jdGlvbiBDM3QodCxlKXt0aGlzLm49dDIoT2IsW2VlLHdvdF0sWzM2NCwyNV0sMTQsW2UscHMoYi5NYXRoLmNlaWwodC8zMikpXSwyKSx0aGlzLm89dCx0aGlzLnA9ZSx0aGlzLmo9dC0xPj4xLHRoaXMuaz1lLTE+PjF9ZnVuY3Rpb24gJGhuKHQsZSl7dnIoZSwiRW5kIGxhYmVsIHBvc3QtcHJvY2Vzc2luZyIsMSksbHMoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuYiwxNikpLG5ldyBrSyksbmV3IEVLKSxuZXcgVEspLG9yKGUpfWZ1bmN0aW9uIHpobih0LGUsbil7dmFyIHIscztyZXR1cm4gcj1YdCh0LnBbZS5pLnBdKStYdCh0LmRbZS5pLnBdKStlLm4uYitlLmEuYixzPVh0KHQucFtuLmkucF0pK1h0KHQuZFtuLmkucF0pK24ubi5iK24uYS5iLHMtcn1mdW5jdGlvbiBxaG4odCxlLG4pe3ZhciByLHM7Zm9yKHI9TnMobixjbykscz0wO3ljKHIsMCkhPTAmJnM8ZTtzKyspcj1QYShyLE5zKHRbc10sY28pKSx0W3NdPUFyKHIpLHI9JHAociwzMik7cmV0dXJuIEFyKHIpfWZ1bmN0aW9uICR6KHQpe3ZhciBlLG4scixzO2ZvcihzPTAsbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllPShScihuLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobikpLGU8NjQmJihzPVMxKHMsRjAoMSxlKSkpO3JldHVybiBzfWZ1bmN0aW9uIEhobih0KXt2YXIgZTtyZXR1cm4gdD09bnVsbD9udWxsOm5ldyBScCgoZT0kYyh0LCEwKSxlLmxlbmd0aD4wJiYoUnIoMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00Myk/ZS5zdWJzdHIoMSk6ZSkpfWZ1bmN0aW9uIFZobih0KXt2YXIgZTtyZXR1cm4gdD09bnVsbD9udWxsOm5ldyBScCgoZT0kYyh0LCEwKSxlLmxlbmd0aD4wJiYoUnIoMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00Myk/ZS5zdWJzdHIoMSk6ZSkpfWZ1bmN0aW9uIF8zdCh0LGUpe3ZhciBuO3JldHVybiB0Lmk+MCYmKGUubGVuZ3RoPHQuaSYmKG49TUQob2woZSkuYyx0LmkpLGU9biksRGModC5nLDAsZSwwLHQuaSkpLGUubGVuZ3RoPnQuaSYmdHMoZSx0LmksbnVsbCksZX1mdW5jdGlvbiBaYyh0LGUsbil7dmFyIHIscyxvO3JldHVybiB0LmVqKCk/KHI9dC5pLG89dC5maigpLFVEKHQscixlKSxzPXQuWmkoMyxudWxsLGUscixvKSxuP24uRWkocyk6bj1zKTpVRCh0LHQuaSxlKSxufWZ1bmN0aW9uIEdobih0LGUsbil7dmFyIHIscztyZXR1cm4gcj1uZXcgejAodC5lLDQsMTAsKHM9ZS5jLF90KHMsODgpP3UocywyNik6KGRuKCksS2gpKSxudWxsLEhnKHQsZSksITEpLG4/bi5FaShyKTpuPXIsbn1mdW5jdGlvbiBVaG4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9bmV3IHowKHQuZSwzLDEwLG51bGwsKHM9ZS5jLF90KHMsODgpP3UocywyNik6KGRuKCksS2gpKSxIZyh0LGUpLCExKSxuP24uRWkocik6bj1yLG59ZnVuY3Rpb24gU2llKHQpeyRtKCk7dmFyIGU7cmV0dXJuIGU9bmV3IHhvKHUodC5lLldlKCh1aSgpLGM1KSksOCkpLHQuQi5IYygobGwoKSxSNykpJiYoZS5hPD0wJiYoZS5hPTIwKSxlLmI8PTAmJihlLmI9MjApKSxlfWZ1bmN0aW9uIEFpZSh0KXtjeSgpO3ZhciBlO3JldHVybih0LnE/dC5xOih3bigpLHduKCksdTApKS5fYigoVGUoKSxCdikpP2U9dShRKHQsQnYpLDE5Nyk6ZT11KFEoTmEodCksQVMpLDE5NyksZX1mdW5jdGlvbiBveSh0LGUpe3ZhciBuLHI7cmV0dXJuIHI9bnVsbCxVcyh0LChUZSgpLGJHKSkmJihuPXUoUSh0LGJHKSw5NCksbi5YZShlKSYmKHI9bi5XZShlKSkpLHI9PW51bGwmJihyPVEoTmEodCksZSkpLHJ9ZnVuY3Rpb24gTGllKHQsZSl7dmFyIG4scixzO3JldHVybiBfdChlLDQyKT8obj11KGUsNDIpLHI9bi5jZCgpLHM9c3kodC5SYygpLHIpLHBkKHMsbi5kZCgpKSYmKHMhPW51bGx8fHQuUmMoKS5fYihyKSkpOiExfWZ1bmN0aW9uIGlzdCh0LGUpe3ZhciBuLHIscztyZXR1cm4gdC5mPjA/KHQucWooKSxyPWU9PW51bGw/MDpIaShlKSxzPShyJndpKSV0LmQubGVuZ3RoLG49TGNlKHQscyxyLGUpLG4hPS0xKTohMX1mdW5jdGlvbiBYZih0LGUpe3ZhciBuLHIscztyZXR1cm4gdC5mPjAmJih0LnFqKCkscj1lPT1udWxsPzA6SGkoZSkscz0ociZ3aSkldC5kLmxlbmd0aCxuPWw1dCh0LHMscixlKSxuKT9uLmRkKCk6bnVsbH1mdW5jdGlvbiBYRCh0LGUpe3ZhciBuLHIscyxvO2ZvcihvPW91KHQuZS5UZygpLGUpLG49dSh0LmcsMTE5KSxzPTA7czx0Lmk7KytzKWlmKHI9bltzXSxvLnJsKHIuYWsoKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTWllKHQpe2lmKHQuYj09bnVsbCl7Zm9yKDt0LmEuT2IoKTspaWYodC5iPXQuYS5QYigpLCF1KHQuYiw0OSkuWmcoKSlyZXR1cm4hMDtyZXR1cm4gdC5iPW51bGwsITF9ZWxzZSByZXR1cm4hMH1mdW5jdGlvbiBEaWUodCxlKXt0Lm1qKCk7dHJ5e3QuZC5WYyh0LmUrKyxlKSx0LmY9dC5kLmosdC5nPS0xfWNhdGNoKG4pe3Rocm93IG49V2kobiksX3Qobiw3Myk/aXQobmV3IHJoKTppdChuKX19ZnVuY3Rpb24genoodCxlKXtnMnQoKTt2YXIgbixyO3JldHVybiBuPVVNKChTUigpLFNSKCksY1MpKSxyPW51bGwsZT09biYmKHI9dShOYyhpRXQsdCksNjE1KSkscnx8KHI9bmV3IHBYdCh0KSxlPT1uJiZrbyhpRXQsdCxyKSkscn1mdW5jdGlvbiBJaWUodCxlKXt2YXIgbixyO3QuYT1QYSh0LmEsMSksdC5jPWIuTWF0aC5taW4odC5jLGUpLHQuYj1iLk1hdGgubWF4KHQuYixlKSx0LmQrPWUsbj1lLXQuZixyPXQuZStuLHQuZj1yLXQuZS1uLHQuZT1yfWZ1bmN0aW9uIFdobih0LGUpe3ZhciBuO3QuYz1lLHQuYT1NaG4oZSksdC5hPDU0JiYodC5mPShuPWUuZD4xP1MxKEYwKGUuYVsxXSwzMiksTnMoZS5hWzBdLGNvKSk6TnMoZS5hWzBdLGNvKSxZdyhfYShlLmUsbikpKSl9ZnVuY3Rpb24gUUQodCxlKXt2YXIgbjtyZXR1cm4gQm8odCkmJkJvKGUpJiYobj10JWUsQkk8biYmbjxDMik/bjpLcCgoeXh0KEJvKHQpP0xoKHQpOnQsQm8oZSk/TGgoZSk6ZSwhMCksaGIpKX1mdW5jdGlvbiBzXyh0LGUpe3ZhciBuO2Q1bihlKSxuPXUoUSh0LChUZSgpLHVHKSksMjc2KSxuJiZKdCh0LHVHLFUxbihuKSksRGcodC5jKSxEZyh0LmYpLFNtdCh0LmQpLFNtdCh1KFEodCxkRyksMjA3KSl9ZnVuY3Rpb24gT2llKHQpe3RoaXMuZT1OdChDcixYciwyNSx0Lmxlbmd0aCwxNSwxKSx0aGlzLmM9TnQocGwsbzAsMjUsdC5sZW5ndGgsMTYsMSksdGhpcy5iPU50KHBsLG8wLDI1LHQubGVuZ3RoLDE2LDEpLHRoaXMuZj0wfWZ1bmN0aW9uIFlobih0KXt2YXIgZSxuO2Zvcih0Lmo9TnQoYWEsdm8sMjUsdC5wLmMubGVuZ3RoLDE1LDEpLG49bmV3IFModC5wKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMCksdC5qW2UucF09ZS5vLmIvdC5pfWZ1bmN0aW9uIHNzdCh0KXt2YXIgZTt0LmMhPTAmJihlPXUoTmUodC5hLHQuYiksMjg3KSxlLmI9PTE/KCsrdC5iLHQuYjx0LmEuYy5sZW5ndGgmJmxSKHUoTmUodC5hLHQuYiksMjg3KSkpOi0tZS5iLC0tdC5jKX1mdW5jdGlvbiBLaG4odCl7dmFyIGU7ZT10LmE7ZG8gZT11KE1yKG5ldyBhcihscihEcyhlKS5hLktjKCksbmV3IHopKSksMTcpLmQuaSxlLms9PShWbigpLHRhKSYmbGUodC5lLGUpO3doaWxlKGUuaz09KFZuKCksdGEpKX1mdW5jdGlvbiBTM3QoKXtTM3Q9WixGQXQ9bmV3IE93KDE1KSxQNGU9bmV3IGVvKCh1aSgpLFUyKSxGQXQpLE40ZT1uZXcgZW8oVzIsMTUpLEY0ZT1uZXcgZW8oRWZ0LHBlKDApKSxPNGU9bmV3IGVvKFc2LEdFKX1mdW5jdGlvbiBBbCgpe0FsPVosb1A9bmV3IG9qKCJQT1JUUyIsMCksSzI9bmV3IG9qKCJQT1JUX0xBQkVMUyIsMSksYVA9bmV3IG9qKCJOT0RFX0xBQkVMUyIsMiksSnk9bmV3IG9qKCJNSU5JTVVNX1NJWkUiLDMpfWZ1bmN0aW9uIFpEKHQsZSl7dmFyIG4scjtmb3Iocj1lLmxlbmd0aCxuPTA7bjxyO24rPTIpamModCwoUnIobixlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4pKSwoUnIobisxLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobisxKSkpfWZ1bmN0aW9uIFBpZSh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKG89ZS10LmUsaD1uLXQuZixzPW5ldyBTKHQuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTg3KSx0SShyLHIucytvLHIudCtoKTt0LmU9ZSx0LmY9bn1mdW5jdGlvbiBYaG4odCxlKXt2YXIgbixyLHMsbztmb3Iobz1lLmIuYix0LmE9bmV3IFppLHQuYj1OdChDcixYciwyNSxvLDE1LDEpLG49MCxzPWVpKGUuYiwwKTtzLmIhPXMuZC5jOylyPXUodGkocyksODYpLHIuZz1uKyt9ZnVuY3Rpb24gRmllKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG49ZT4+NSxlJj0zMSxzPXQuZCtuKyhlPT0wPzA6MSkscj1OdChDcixYciwyNSxzLDE1LDEpLFcwbihyLHQuYSxuLGUpLG89bmV3IFgzKHQuZSxzLHIpLE45KG8pLG99ZnVuY3Rpb24gQTN0KHQsZSxuKXt2YXIgcixzO3I9dShOYyh6NyxlKSwxMTcpLHM9dShOYyhnQSxlKSwxMTcpLG4/KGtvKHo3LHQsciksa28oZ0EsdCxzKSk6KGtvKGdBLHQsciksa28oejcsdCxzKSl9ZnVuY3Rpb24gTmllKHQsZSxuKXt2YXIgcixzLG87Zm9yKHM9bnVsbCxvPXQuYjtvOyl7aWYocj10LmEudWUoZSxvLmQpLG4mJnI9PTApcmV0dXJuIG87cj49MD9vPW8uYVsxXToocz1vLG89by5hWzBdKX1yZXR1cm4gc31mdW5jdGlvbiBCaWUodCxlLG4pe3ZhciByLHMsbztmb3Iocz1udWxsLG89dC5iO287KXtpZihyPXQuYS51ZShlLG8uZCksbiYmcj09MClyZXR1cm4gbztyPD0wP289by5hWzBdOihzPW8sbz1vLmFbMV0pfXJldHVybiBzfWZ1bmN0aW9uIFFobih0LGUsbixyKXt2YXIgcyxvLGg7cmV0dXJuIHM9ITEsSTRuKHQuZixuLHIpJiYoa2ZuKHQuZix0LmFbZV1bbl0sdC5hW2VdW3JdKSxvPXQuYVtlXSxoPW9bcl0sb1tyXT1vW25dLG9bbl09aCxzPSEwKSxzfWZ1bmN0aW9uIEwzdCh0LGUsbixyLHMpe3ZhciBvLGgsZDtmb3IoaD1zO2UuYiE9ZS5jOylvPXUoSHgoZSksMTApLGQ9dShLbyhvLHIpLlhiKDApLDExKSx0LmRbZC5wXT1oKyssbi5jW24uYy5sZW5ndGhdPWQ7cmV0dXJuIGh9ZnVuY3Rpb24gTTN0KHQsZSxuKXt2YXIgcixzLG8saCxkO3JldHVybiBoPXQuayxkPWUuayxyPW5baC5nXVtkLmddLHM9eWUob3kodCxyKSksbz15ZShveShlLHIpKSxiLk1hdGgubWF4KChPbihzKSxzKSwoT24obyksbykpfWZ1bmN0aW9uIFpobih0LGUsbil7dmFyIHIscyxvLGg7Zm9yKHI9bi90LmMubGVuZ3RoLHM9MCxoPW5ldyBTKHQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDIwMCkscXJlKG8sby5mK3IqcyksRGRuKG8sZSxyKSwrK3N9ZnVuY3Rpb24gUmllKHQsZSxuKXt2YXIgcixzLG8saDtmb3Iocz11KHRyKHQuYixuKSwxNzcpLHI9MCxoPW5ldyBTKGUuaik7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTEzKSxzW28uZC5wXSYmKytyO3JldHVybiByfWZ1bmN0aW9uIGppZSh0KXt2YXIgZSxuO3JldHVybiBlPXUoRG4odC5hLDQpLDEyNiksZSE9bnVsbD8obj1OdChGZnQsbHV0LDQxNSxlLmxlbmd0aCwwLDEpLERjKGUsMCxuLDAsZS5sZW5ndGgpLG4pOm41ZX1mdW5jdGlvbiBKaG4oKXt2YXIgdDtyZXR1cm4gWkghPTAmJih0PXBhbigpLHQtUGdlPjJlMyYmKFBnZT10LEpIPWIuc2V0VGltZW91dChzWGUsMTApKSksWkgrKz09MD8oT29uKChuYnQoKSxyRXQpKSwhMCk6ITF9ZnVuY3Rpb24gdGZuKHQsZSl7dmFyIG4scixzO2ZvcihyPW5ldyBhcihscihEcyh0KS5hLktjKCksbmV3IHopKTt6cihyKTspaWYobj11KE1yKHIpLDE3KSxzPW4uZC5pLHMuYz09ZSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBEM3QodCxlKXt2YXIgbixyO2lmKF90KGUsMjQ1KSl7cj11KGUsMjQ1KTt0cnl7cmV0dXJuIG49dC52ZChyKSxuPT0wfWNhdGNoKHMpe2lmKHM9V2kocyksIV90KHMsMjA1KSl0aHJvdyBpdChzKX19cmV0dXJuITF9ZnVuY3Rpb24gZWZuKCl7cmV0dXJuIEVycm9yLnN0YWNrVHJhY2VMaW1pdD4wPyhiLkVycm9yLnN0YWNrVHJhY2VMaW1pdD1FcnJvci5zdGFja1RyYWNlTGltaXQ9NjQsITApOiJzdGFjayJpbiBuZXcgRXJyb3J9ZnVuY3Rpb24gbmZuKHQsZSl7cmV0dXJuIGsxKCksazEoKSx3ZihzYiksKGIuTWF0aC5hYnModC1lKTw9c2J8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKT8wOnQ8ZT8tMTp0PmU/MTpJdyhpc05hTih0KSxpc05hTihlKSkpPjB9ZnVuY3Rpb24gSTN0KHQsZSl7cmV0dXJuIGsxKCksazEoKSx3ZihzYiksKGIuTWF0aC5hYnModC1lKTw9c2J8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKT8wOnQ8ZT8tMTp0PmU/MTpJdyhpc05hTih0KSxpc05hTihlKSkpPDB9ZnVuY3Rpb24gJGllKHQsZSl7cmV0dXJuIGsxKCksazEoKSx3ZihzYiksKGIuTWF0aC5hYnModC1lKTw9c2J8fHQ9PWV8fGlzTmFOKHQpJiZpc05hTihlKT8wOnQ8ZT8tMTp0PmU/MTpJdyhpc05hTih0KSxpc05hTihlKSkpPD0wfWZ1bmN0aW9uIGFzdCh0LGUpe2Zvcih2YXIgbj0wOyFlW25dfHxlW25dPT0iIjspbisrO2Zvcih2YXIgcj1lW24rK107bjxlLmxlbmd0aDtuKyspIWVbbl18fGVbbl09PSIifHwocis9dCtlW25dKTtyZXR1cm4gcn1mdW5jdGlvbiBNaCh0LGUsbil7dmFyIHIscyxvLGg7Zm9yKG89ZStuLExtdChlLG8sdC5sZW5ndGgpLGg9IiIscz1lO3M8bzspcj1iLk1hdGgubWluKHMrMWU0LG8pLGgrPUdubih0LnNsaWNlKHMscikpLHM9cjtyZXR1cm4gaH1mdW5jdGlvbiB6aWUodCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihvPW5ldyBoZSxuPU9pdCh0KSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxsZShvLCRjKGUsITApKTtyZXR1cm4gb31mdW5jdGlvbiBxaWUodCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihvPW5ldyBoZSxuPU9pdCh0KSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxsZShvLCRjKGUsITApKTtyZXR1cm4gb31mdW5jdGlvbiBIaWUodCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihvPW5ldyBoZSxuPU9pdCh0KSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxsZShvLCRjKGUsITApKTtyZXR1cm4gb31mdW5jdGlvbiBWaWUodCxlKXt2YXIgbixyLHM7aWYodC5jKXR2KHQuYyxlKTtlbHNlIGZvcihuPWUtUnUodCkscz1uZXcgUyh0LmQpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE1NyksVmllKHIsUnUocikrbil9ZnVuY3Rpb24gR2llKHQsZSl7dmFyIG4scixzO2lmKHQuYylKdyh0LmMsZSk7ZWxzZSBmb3Iobj1lLUVsKHQpLHM9bmV3IFModC5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNTcpLEdpZShyLEVsKHIpK24pfWZ1bmN0aW9uIHJmbih0LGUpe3ZhciBuLHIscyxvO2ZvcihzPW5ldyBYYyhlLmdjKCkpLHI9ZS5LYygpO3IuT2IoKTspbj1yLlBiKCksbz15YXQodCx1KG4sNTYpKSxvJiYocy5jW3MuYy5sZW5ndGhdPW8pO3JldHVybiBzfWZ1bmN0aW9uIHF6KHQsZSl7dmFyIG4scixzO3JldHVybiB0LnFqKCkscj1lPT1udWxsPzA6SGkoZSkscz0ociZ3aSkldC5kLmxlbmd0aCxuPWw1dCh0LHMscixlKSxuPyh0bmUodCxuKSxuLmRkKCkpOm51bGx9ZnVuY3Rpb24gY3YodCl7dmFyIGUsbjtmb3Iobj1yb2UodCksZT1udWxsO3QuYz09MjspZmkodCksZXx8KGU9KGdpKCksZ2koKSxuZXcgZDkoMikpLEUyKGUsbiksbj1lKSxuLiRsKHJvZSh0KSk7cmV0dXJuIG59ZnVuY3Rpb24gcEUodCl7dmFyIGUsbixyO2lmKHI9bnVsbCxlPUFkIGluIHQuYSxuPSFlLG4pdGhyb3cgaXQobmV3IHVkKCJFdmVyeSBlbGVtZW50IG11c3QgaGF2ZSBhbiBpZC4iKSk7cmV0dXJuIHI9ZjYoQjAodCxBZCkpLHJ9ZnVuY3Rpb24gSHoodCl7dmFyIGUsbixyO2lmKHI9dC5aZygpLCFyKWZvcihlPTAsbj10LmVoKCk7bjtuPW4uZWgoKSl7aWYoKytlPnZvdClyZXR1cm4gbi5maCgpO2lmKHI9bi5aZygpLHJ8fG49PXQpYnJlYWt9cmV0dXJuIHJ9ZnVuY3Rpb24gTzN0KHQpe3JldHVybiBDJCgpLF90KHQsMTU2KT91KHRyKGRQLFVnZSksMjg4KS52Zyh0KTpUbChkUCxvbCh0KSk/dSh0cihkUCxvbCh0KSksMjg4KS52Zyh0KTpudWxsfWZ1bmN0aW9uIGlmbih0KXtpZihWeihYRSx0KSlyZXR1cm4gTm4oKSxyNztpZihWeihWY3QsdCkpcmV0dXJuIE5uKCksRjI7dGhyb3cgaXQobmV3IEZuKCJFeHBlY3RpbmcgdHJ1ZSBvciBmYWxzZSIpKX1mdW5jdGlvbiBzZm4odCxlKXtpZihlLmM9PXQpcmV0dXJuIGUuZDtpZihlLmQ9PXQpcmV0dXJuIGUuYzt0aHJvdyBpdChuZXcgRm4oIklucHV0IGVkZ2UgaXMgbm90IGNvbm5lY3RlZCB0byB0aGUgaW5wdXQgcG9ydC4iKSl9ZnVuY3Rpb24gVWllKHQsZSl7cmV0dXJuIHQuZT5lLmU/MTp0LmU8ZS5lPy0xOnQuZD5lLmQ/dC5lOnQuZDxlLmQ/LWUuZTp0LmUqcXl0KHQuYSxlLmEsdC5kKX1mdW5jdGlvbiBXaWUodCl7cmV0dXJuIHQ+PTQ4JiZ0PDQ4K2IuTWF0aC5taW4oMTAsMTApP3QtNDg6dD49OTcmJnQ8OTc/dC05NysxMDp0Pj02NSYmdDw2NT90LTY1KzEwOi0xfWZ1bmN0aW9uIFlpZSh0LGUpe3ZhciBuO3JldHVybiBWdChlKT09PVZ0KHQpPyEwOiFfdChlLDIxKXx8KG49dShlLDIxKSxuLmdjKCkhPXQuZ2MoKSk/ITE6dC5JYyhuKX1mdW5jdGlvbiBhZm4odCxlKXt2YXIgbixyLHMsbztyZXR1cm4gcj10LmEubGVuZ3RoLTEsbj1lLXQuYiZyLG89dC5jLWUmcixzPXQuYy10LmImcixUV3QobjxzKSxuPj1vPyhzbG4odCxlKSwtMSk6KGFsbih0LGUpLDEpfWZ1bmN0aW9uIG9mbih0LGUpe3ZhciBuLHI7Zm9yKG49KFJyKGUsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChlKSkscj1lKzE7cjx0Lmxlbmd0aCYmKFJyKHIsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChyKT09bik7KSsrcjtyZXR1cm4gci1lfWZ1bmN0aW9uIFAzdCh0KXtzd2l0Y2godC5nKXtjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgMTk6Y2FzZSAyMDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBjZm4odCxlKXt2YXIgbj10LmEscjtlPVN0cmluZyhlKSxuLmhhc093blByb3BlcnR5KGUpJiYocj1uW2VdKTt2YXIgcz0oX2l0KCksUHV0KVt0eXBlb2Ygcl0sbz1zP3Mocik6VXl0KHR5cGVvZiByKTtyZXR1cm4gb31mdW5jdGlvbiB1dih0LGUpe2lmKHQuYTwwKXRocm93IGl0KG5ldyBObygiRGlkIG5vdCBjYWxsIGJlZm9yZSguLi4pIG9yIGFmdGVyKC4uLikgYmVmb3JlIGNhbGxpbmcgYWRkKC4uLikuIikpO3JldHVybiBSMnQodCx0LmEsZSksdH1mdW5jdGlvbiB1Zm4odCxlLG4scil7dmFyIHMsbztlLmMubGVuZ3RoIT0wJiYocz1XMm4obixyKSxvPVVwbihlKSxscyhleihuZXcgVG4obnVsbCxuZXcgX24obywxKSksbmV3IFFRKSxuZXcgJFh0KHQsbixzLHIpKSl9ZnVuY3Rpb24gbzYodCxlLG4pe3ZhciByO3QuRGImZT9uPT1udWxsP0libih0LGUpOihyPVNzdCh0LGUpLHI9PS0xP3QuRWI9bjp0cyh1Mih0LkViKSxyLG4pKTpuIT1udWxsJiZydm4odCxlLG4pfWZ1bmN0aW9uIHN1KHQpe3ZhciBlLG47cmV0dXJuIHQuRGImMzJ8fChuPShlPXUoRG4odCwxNiksMjYpLEpuKGV8fHQuemgoKSktSm4odC56aCgpKSksbiE9MCYmbzYodCwzMixOdChRbixEZSwxLG4sNSwxKSkpLHR9ZnVuY3Rpb24gbGZuKHQpe3ZhciBlO3JldHVybiB0LmJ8fHRYZSh0LChlPVZaZSh0LmUsdC5hKSwhZXx8IWhuKFZjdCxYZigoIWUuYiYmKGUuYj1uZXcga2woKGRuKCksUWEpLGNjLGUpKSxlLmIpLCJxdWFsaWZpZWQiKSkpKSx0LmN9ZnVuY3Rpb24gaGZuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9dShBdChhbCh0LmEpLGUpLDg3KSxvPShzPXIuYyxzfHwoZG4oKSxXMSkpLChvLmtoKCk/WnAodC5iLHUobyw0OSkpOm8pPT1uP0xxKHIpOkg4KHIsbiksb31mdW5jdGlvbiBmZm4odCxlKXsoIWUmJmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQhPW51bGw/Y29uc29sZS5ncm91cENvbGxhcHNlZDpjb25zb2xlLmdyb3VwPz9jb25zb2xlLmxvZykuY2FsbChjb25zb2xlLHQpfWZ1bmN0aW9uIGRmbih0LGUsbixyKXtyPT10LHUobi5iLDY1KSx1KG4uYiw2NSksdShyLmIsNjUpLHUoci5iLDY1KS5jLmIsQW10KHIsZSx0KX1mdW5jdGlvbiBnZm4odCl7dmFyIGUsbjtmb3IoZT1uZXcgUyh0LmcpO2UuYTxlLmMuYy5sZW5ndGg7KXUoSihlKSw1NjIpO249bmV3IEpjZSh0LmcsWHQodC5hKSx0LmMpLHg1bihuKSx0Lmc9bi5iLHQuZD1uLmF9ZnVuY3Rpb24gRjN0KHQsZSxuKXtlLmI9Yi5NYXRoLm1heChlLmIsLW4uYSksZS5jPWIuTWF0aC5tYXgoZS5jLG4uYS10LmEpLGUuZD1iLk1hdGgubWF4KGUuZCwtbi5iKSxlLmE9Yi5NYXRoLm1heChlLmEsbi5iLXQuYil9ZnVuY3Rpb24gcGZuKHQsZSl7cmV0dXJuIHQuZTxlLmU/LTE6dC5lPmUuZT8xOnQuZjxlLmY/LTE6dC5mPmUuZj8xOkhpKHQpLUhpKGUpfWZ1bmN0aW9uIFZ6KHQsZSl7cmV0dXJuIE9uKHQpLGU9PW51bGw/ITE6aG4odCxlKT8hMDp0Lmxlbmd0aD09ZS5sZW5ndGgmJmhuKHQudG9Mb3dlckNhc2UoKSxlLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIGJmbih0LGUpe3ZhciBuLHIscyxvO2ZvcihyPTAscz1lLmdjKCk7cjxzOysrciluPWUuaWwociksX3Qobiw5OSkmJnUobiwxOCkuQmImZGMmJihvPWUuamwociksbyE9bnVsbCYmeWF0KHQsdShvLDU2KSkpfWZ1bmN0aW9uIEtpZSh0LGUsbil7dmFyIHIscyxvO2ZvcihvPW5ldyBTKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjIxKSxyPW5ldyBtaih1KHRyKHQuYSxzLmIpLDY1KSksbGUoZS5hLHIpLEtpZSh0LHIscyl9ZnVuY3Rpb24gdjIodCl7dmFyIGUsbjtyZXR1cm4geWModCwtMTI5KT4wJiZ5Yyh0LDEyOCk8MD8oZT1Bcih0KSsxMjgsbj0oZEt0KCksZEV0KVtlXSwhbiYmKG49ZEV0W2VdPW5ldyBBbSh0KSksbik6bmV3IEFtKHQpfWZ1bmN0aW9uIFhpZSh0LGUpe3ZhciBuLHI7cmV0dXJuIG49ZS5IaCh0LmEpLG4mJihyPUJyKFhmKCghbi5iJiYobi5iPW5ldyBrbCgoZG4oKSxRYSksY2MsbikpLG4uYiksY2kpKSxyIT1udWxsKT9yOmUubmUoKX1mdW5jdGlvbiB3Zm4odCxlKXt2YXIgbixyO3JldHVybiBuPWUuSGgodC5hKSxuJiYocj1CcihYZigoIW4uYiYmKG4uYj1uZXcga2woKGRuKCksUWEpLGNjLG4pKSxuLmIpLGNpKSksciE9bnVsbCk/cjplLm5lKCl9ZnVuY3Rpb24gdmZuKHQsZSl7X3J0KCk7dmFyIG4scjtmb3Iocj1uZXcgYXIobHIoVTAodCkuYS5LYygpLG5ldyB6KSk7enIocik7KWlmKG49dShNcihyKSwxNyksbi5kLmk9PWV8fG4uYy5pPT1lKXJldHVybiBuO3JldHVybiBudWxsfWZ1bmN0aW9uIE4zdCh0LGUsbil7dGhpcy5jPXQsdGhpcy5mPW5ldyBoZSx0aGlzLmU9bmV3IENhLHRoaXMuaj1uZXcgR3d0LHRoaXMubj1uZXcgR3d0LHRoaXMuYj1lLHRoaXMuZz1uZXcgYWgoZS5jLGUuZCxlLmIsZS5hKSx0aGlzLmE9bn1mdW5jdGlvbiBvc3QodCl7dmFyIGUsbixyLHM7Zm9yKHRoaXMuYT1uZXcgTzAsdGhpcy5kPW5ldyBIcyx0aGlzLmU9MCxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sIXRoaXMuZiYmKHRoaXMuZj1lKSxQcnQodGhpcyxlKX1mdW5jdGlvbiBRaWUodCl7cmIoKSx0Lmxlbmd0aD09MD8odGhpcy5lPTAsdGhpcy5kPTEsdGhpcy5hPWx0KGN0KENyLDEpLFhyLDI1LDE1LFswXSkpOih0aGlzLmU9MSx0aGlzLmQ9dC5sZW5ndGgsdGhpcy5hPXQsTjkodGhpcykpfWZ1bmN0aW9uIGFfKHQsZSxuKXtfcXQuY2FsbCh0aGlzKSx0aGlzLmE9TnQoZHBlLGU2dCwyMTIsKEtmKCksbHQoY3QoT3ksMSksb2UsMjMyLDAsW3NjLGV1LGFjXSkpLmxlbmd0aCwwLDEpLHRoaXMuYj10LHRoaXMuZD1lLHRoaXMuYz1ufWZ1bmN0aW9uIFppZSh0KXt0aGlzLmQ9bmV3IGhlLHRoaXMuZT1uZXcgYTIsdGhpcy5jPU50KENyLFhyLDI1LCh2ZSgpLGx0KGN0KFhhLDEpLHhjLDYxLDAsW1pvLFBuLEhuLG1yLEJuXSkpLmxlbmd0aCwxNSwxKSx0aGlzLmI9dH1mdW5jdGlvbiBtZm4odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihoPXUoUSh0LChhZSgpLF9pKSksMTEpLEp0KGgsazcsdC5pLm4uYiksZT13ZCh0LmUpLHI9ZSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxvYShuLGgpfWZ1bmN0aW9uIHlmbih0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKG49dShRKHQsKGFlKCksX2kpKSwxMSksSnQobixrNyx0Lmkubi5iKSxlPXdkKHQuZykscz1lLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLE9hKHIsbil9ZnVuY3Rpb24geGZuKHQpe3ZhciBlLG47cmV0dXJuIFVzKHQuZC5pLChUZSgpLFQ3KSk/KGU9dShRKHQuYy5pLFQ3KSwxOSksbj11KFEodC5kLmksVDcpLDE5KSxwdShlLmEsbi5hKT4wKTohMX1mdW5jdGlvbiBKaWUodCl7dmFyIGU7VnQocWUodCwodWkoKSxzNSkpKT09PVZ0KChHMCgpLHRVKSkmJihlcyh0KT8oZT11KHFlKGVzKHQpLHM1KSwzMzQpLHdvKHQsczUsZSkpOndvKHQsczUsWlMpKX1mdW5jdGlvbiBrZm4odCxlLG4pe3ZhciByLHM7cXN0KHQuZSxlLG4sKHZlKCksQm4pKSxxc3QodC5pLGUsbixIbiksdC5hJiYocz11KFEoZSwoYWUoKSxfaSkpLDExKSxyPXUoUShuLF9pKSwxMSksSXJ0KHQuZyxzLHIpKX1mdW5jdGlvbiB0c2UodCxlLG4pe3ZhciByLHMsbztyPWUuYy5wLG89ZS5wLHQuYltyXVtvXT1uZXcgd1F0KHQsZSksbiYmKHQuYVtyXVtvXT1uZXcgZTgoZSkscz11KFEoZSwoYWUoKSxQdikpLDEwKSxzJiZsbih0LmQscyxlKSl9ZnVuY3Rpb24gZXNlKHQsZSl7dmFyIG4scixzO2lmKGxlKGRWLHQpLGUuRmModCksbj11KHRyKEp1dCx0KSwyMSksbilmb3Iocz1uLktjKCk7cy5PYigpOylyPXUocy5QYigpLDMzKSxSbyhkVixyLDApIT0tMXx8ZXNlKHIsZSl9ZnVuY3Rpb24gRWZuKHQsZSxuKXt2YXIgcjsoSmdlPyhMaG4odCksITApOnRwZXx8bnBlPyhkOCgpLCEwKTplcGUmJihkOCgpLCExKSkmJihyPW5ldyBMWXQoZSksci5iPW4sX2duKHQscikpfWZ1bmN0aW9uIGNzdCh0LGUpe3ZhciBuO249IXQuQS5IYygoQWwoKSxLMikpfHx0LnE9PSh1YSgpLEdjKSx0LnUuSGMoKFp1KCksc2cpKT9uP0c1bih0LGUpOkRoZSh0LGUpOnQudS5IYyhDYikmJihuP2w1bih0LGUpOkdoZSh0LGUpKX1mdW5jdGlvbiBiRSh0LGUpe3ZhciBuLHI7aWYoKyt0LmosZSE9bnVsbCYmKG49KHI9dC5hLkNiLF90KHIsOTcpP3Uociw5NykuSmcoKTpudWxsKSx2Ym4oZSxuKSkpe282KHQuYSw0LG4pO3JldHVybn1vNih0LmEsNCx1KGUsMTI2KSl9ZnVuY3Rpb24gbnNlKHQsZSxuKXtyZXR1cm4gbmV3IGFoKGIuTWF0aC5taW4odC5hLGUuYSktbi8yLGIuTWF0aC5taW4odC5iLGUuYiktbi8yLGIuTWF0aC5hYnModC5hLWUuYSkrbixiLk1hdGguYWJzKHQuYi1lLmIpK24pfWZ1bmN0aW9uIFRmbih0LGUpe3ZhciBuLHI7cmV0dXJuIG49cHUodC5hLmMucCxlLmEuYy5wKSxuIT0wP246KHI9cHUodC5hLmQuaS5wLGUuYS5kLmkucCksciE9MD9yOnB1KGUuYS5kLnAsdC5hLmQucCkpfWZ1bmN0aW9uIENmbih0LGUsbil7dmFyIHIscyxvLGg7cmV0dXJuIG89ZS5qLGg9bi5qLG8hPWg/by5nLWguZzoocj10LmZbZS5wXSxzPXQuZltuLnBdLHI9PTAmJnM9PTA/MDpyPT0wPy0xOnM9PTA/MTpNcyhyLHMpKX1mdW5jdGlvbiByc2UodCxlLG4pe3ZhciByLHMsbztpZighbltlLmRdKWZvcihuW2UuZF09ITAscz1uZXcgUyh1NChlKSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMjEzKSxvPUJ6KHIsZSkscnNlKHQsbyxuKX1mdW5jdGlvbiBCM3QodCxlLG4pe3ZhciByO3N3aXRjaChyPW5bdC5nXVtlXSx0Lmcpe2Nhc2UgMTpjYXNlIDM6cmV0dXJuIG5ldyAkZSgwLHIpO2Nhc2UgMjpjYXNlIDQ6cmV0dXJuIG5ldyAkZShyLDApO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIF9mbih0LGUsbil7dmFyIHIscztzPXUoeHJ0KGUuZiksMjA5KTt0cnl7cy5aZSh0LG4pLEZubihlLmYscyl9Y2F0Y2gobyl7dGhyb3cgbz1XaShvKSxfdChvLDEwMik/KHI9byxpdChyKSk6aXQobyl9fWZ1bmN0aW9uIGlzZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2O3JldHVybiByPW51bGwsZD1FeHQoSzgoKSxlKSxvPW51bGwsZCYmKHM9bnVsbCx2PXh4dChkLG4pLGg9bnVsbCx2IT1udWxsJiYoaD10LlllKGQsdikpLHM9aCxvPXMpLHI9byxyfWZ1bmN0aW9uIFNmbih0LGUsbixyKXt2YXIgcyxvLGg7cmV0dXJuIHM9bmV3IHowKHQuZSwxLDEzLChoPWUuYyxofHwoZG4oKSxXMSkpLChvPW4uYyxvfHwoZG4oKSxXMSkpLEhnKHQsZSksITEpLHI/ci5FaShzKTpyPXMscn1mdW5jdGlvbiB1c3QodCxlLG4scil7dmFyIHM7aWYocz10Lmxlbmd0aCxlPj1zKXJldHVybiBzO2ZvcihlPWU+MD9lOjA7ZTxzJiYhU2l0KChScihlLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZSkpLG4scik7ZSsrKTtyZXR1cm4gZX1mdW5jdGlvbiBQMSh0LGUpe3ZhciBuLHI7Zm9yKHI9dC5jLmxlbmd0aCxlLmxlbmd0aDxyJiYoZT1MUihuZXcgQXJyYXkociksZSkpLG49MDtuPHI7KytuKXRzKGUsbix0LmNbbl0pO3JldHVybiBlLmxlbmd0aD5yJiZ0cyhlLHIsbnVsbCksZX1mdW5jdGlvbiBzc2UodCxlKXt2YXIgbixyO2ZvcihyPXQuYS5sZW5ndGgsZS5sZW5ndGg8ciYmKGU9TFIobmV3IEFycmF5KHIpLGUpKSxuPTA7bjxyOysrbil0cyhlLG4sdC5hW25dKTtyZXR1cm4gZS5sZW5ndGg+ciYmdHMoZSxyLG51bGwpLGV9ZnVuY3Rpb24gbTIodCxlLG4pe3ZhciByLHMsbztyZXR1cm4gcz11KHRyKHQuZSxlKSwzODcpLHM/KG89YXd0KHMsbiksWFV0KHQscyksbyk6KHI9bmV3IE93dCh0LGUsbiksa2kodC5lLGUsciksa1F0KHIpLG51bGwpfWZ1bmN0aW9uIEFmbih0KXt2YXIgZTtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKGU9azJuKCRjKHQsITApKSxlPT1udWxsKXRocm93IGl0KG5ldyBwZXQoIkludmFsaWQgaGV4QmluYXJ5IHZhbHVlOiAnIit0KyInIikpO3JldHVybiBlfWZ1bmN0aW9uIEpEKHQpe3JldHVybiByYigpLHljKHQsMCk8MD95Yyh0LC0xKSE9MD9uZXcgeDR0KC0xLHo4KHQpKTpCdXQ6eWModCwxMCk8PTA/Q0V0W0FyKHQpXTpuZXcgeDR0KDEsdCl9ZnVuY3Rpb24gbHN0KCl7cmV0dXJuICRxKCksbHQoY3QoJHBlLDEpLG9lLDE1OSwwLFtScGUsQnBlLGpwZSxMcGUsQXBlLE1wZSxPcGUsSXBlLERwZSxOcGUsRnBlLFBwZSxfcGUsQ3BlLFNwZSxFcGUsa3BlLFRwZSx5cGUsbXBlLHhwZSxVdXRdKX1mdW5jdGlvbiBhc2UodCl7dmFyIGU7dGhpcy5kPW5ldyBoZSx0aGlzLmo9bmV3IENhLHRoaXMuZz1uZXcgQ2EsZT10LmcuYix0aGlzLmY9dShRKE5hKGUpLChUZSgpLFdsKSksMTAzKSx0aGlzLmU9WHQoeWUoV3ooZSxXeSkpKX1mdW5jdGlvbiBvc2UodCl7dGhpcy5iPW5ldyBoZSx0aGlzLmU9bmV3IGhlLHRoaXMuZD10LHRoaXMuYT0hcUMoUmkobmV3IFRuKG51bGwsbmV3IGp3KG5ldyBMMSh0LmIpKSksbmV3IFp0KG5ldyB6TikpKS5zZCgoUWIoKSxvNykpfWZ1bmN0aW9uIFFmKCl7UWY9Wixxbj1uZXcgT00oIlBBUkVOVFMiLDApLGVhPW5ldyBPTSgiTk9ERVMiLDEpLFBkPW5ldyBPTSgiRURHRVMiLDIpLFYyPW5ldyBPTSgiUE9SVFMiLDMpLHJwPW5ldyBPTSgiTEFCRUxTIiw0KX1mdW5jdGlvbiBsNCgpe2w0PVosRWI9bmV3IEZNKCJESVNUUklCVVRFRCIsMCksaVA9bmV3IEZNKCJKVVNUSUZJRUQiLDEpLElBdD1uZXcgRk0oIkJFR0lOIiwyKSxKUz1uZXcgRk0ocUUsMyksT0F0PW5ldyBGTSgiRU5EIiw0KX1mdW5jdGlvbiBMZm4odCl7dmFyIGU7c3dpdGNoKGU9dC55aShudWxsKSxlKXtjYXNlIDEwOnJldHVybiAwO2Nhc2UgMTU6cmV0dXJuIDE7Y2FzZSAxNDpyZXR1cm4gMjtjYXNlIDExOnJldHVybiAzO2Nhc2UgMjE6cmV0dXJuIDR9cmV0dXJuLTF9ZnVuY3Rpb24gaHN0KHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gYW8oKSxyZztjYXNlIDQ6cmV0dXJuIGFvKCksemg7Y2FzZSAyOnJldHVybiBhbygpLENmO2Nhc2UgMzpyZXR1cm4gYW8oKSxuZ31yZXR1cm4gYW8oKSxoMH1mdW5jdGlvbiBNZm4odCxlLG4pe3ZhciByO3N3aXRjaChyPW4ucS5nZXRGdWxsWWVhcigpLWFiK2FiLHI8MCYmKHI9LXIpLGUpe2Nhc2UgMTp0LmErPXI7YnJlYWs7Y2FzZSAyOkpkKHQsciUxMDAsMik7YnJlYWs7ZGVmYXVsdDpKZCh0LHIsZSl9fWZ1bmN0aW9uIGVpKHQsZSl7dmFyIG4scjtpZihLbShlLHQuYiksZT49dC5iPj4xKWZvcihyPXQuYyxuPXQuYjtuPmU7LS1uKXI9ci5iO2Vsc2UgZm9yKHI9dC5hLmEsbj0wO248ZTsrK24pcj1yLmE7cmV0dXJuIG5ldyBTWXQodCxlLHIpfWZ1bmN0aW9uIEd6KCl7R3o9WixxdXQ9bmV3IElidCgiTlVNX09GX0VYVEVSTkFMX1NJREVTX1RIQU5fTlVNX09GX0VYVEVOU0lPTlNfTEFTVCIsMCksJEV0PW5ldyBJYnQoIkNPUk5FUl9DQVNFU19USEFOX1NJTkdMRV9TSURFX0xBU1QiLDEpfWZ1bmN0aW9uIERmbih0KXt2YXIgZSxuLHIscztmb3Iocj14cG4odCksWnMocixlMmUpLHM9dC5kLHMuYz1OdChRbixEZSwxLDAsNSwxKSxuPW5ldyBTKHIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDQ1NiksTHMocyxlLmIpfWZ1bmN0aW9uIGNzZSh0KXt2YXIgZSxuLHI7Zm9yKHI9KCF0Lm8mJih0Lm89bmV3IF9sKChKYygpLFNiKSxIdix0LDApKSx0Lm8pLG49ci5jLktjKCk7bi5lIT1uLmkuZ2MoKTspZT11KG4ubmooKSw0MiksZS5kZCgpO3JldHVybiB3RChyKX1mdW5jdGlvbiBJZm4odCl7dmFyIGU7angodShRKHQsKFRlKCksY3MpKSw5OCkpJiYoZT10LmIsV29lKChBbigwLGUuYy5sZW5ndGgpLHUoZS5jWzBdLDI5KSkpLFdvZSh1KE5lKGUsZS5jLmxlbmd0aC0xKSwyOSkpKX1mdW5jdGlvbiB1c2UodCxlKXt2YXIgbixyLHMsbztmb3Iobj0wLHM9bmV3IFMoZS5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMCksbz1yLm8uYStyLmQuYytyLmQuYit0Lmosbj1iLk1hdGgubWF4KG4sbyk7cmV0dXJuIG59ZnVuY3Rpb24gVXoodCl7dmFyIGUsbixyLHM7Zm9yKHM9MCxuPTAscj10Lmxlbmd0aDtuPHI7bisrKWU9KFJyKG4sdC5sZW5ndGgpLHQuY2hhckNvZGVBdChuKSksZT49NjQmJmU8MTI4JiYocz1TMShzLEYwKDEsZS02NCkpKTtyZXR1cm4gc31mdW5jdGlvbiBXeih0LGUpe3ZhciBuLHI7cmV0dXJuIHI9bnVsbCxVcyh0LCh1aSgpLEs2KSkmJihuPXUoUSh0LEs2KSw5NCksbi5YZShlKSYmKHI9bi5XZShlKSkpLHI9PW51bGwmJk5hKHQpJiYocj1RKE5hKHQpLGUpKSxyfWZ1bmN0aW9uIGxzZSh0LGUpe3ZhciBuLHIscztzPWUuZC5pLHI9cy5rLCEocj09KFZuKCksT3MpfHxyPT16MSkmJihuPW5ldyBhcihscihEcyhzKS5hLktjKCksbmV3IHopKSx6cihuKSYma2kodC5rLGUsdShNcihuKSwxNykpKX1mdW5jdGlvbiBmc3QodCxlKXt2YXIgbixyLHM7cmV0dXJuIHI9eW4odC5UZygpLGUpLG49ZS10LkFoKCksbjwwPyhzPXQuWWcocikscz49MD90LmxoKHMpOlpzdCh0LHIpKTpuPDA/WnN0KHQscik6dShyLDY2KS5OaigpLlNqKHQsdC55aCgpLG4pfWZ1bmN0aW9uIEllKHQpe3ZhciBlO2lmKF90KHQuYSw0KSl7aWYoZT1PM3QodC5hKSxlPT1udWxsKXRocm93IGl0KG5ldyBObyhvZGUrdC5iKyInLiAiK2FkZSsoUDAoZ1ApLGdQLmspK2Q4dCkpO3JldHVybiBlfWVsc2UgcmV0dXJuIHQuYX1mdW5jdGlvbiBPZm4odCl7dmFyIGU7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihlPUo1bigkYyh0LCEwKSksZT09bnVsbCl0aHJvdyBpdChuZXcgcGV0KCJJbnZhbGlkIGJhc2U2NEJpbmFyeSB2YWx1ZTogJyIrdCsiJyIpKTtyZXR1cm4gZX1mdW5jdGlvbiBkcih0KXt2YXIgZTt0cnl7cmV0dXJuIGU9dC5pLlhiKHQuZSksdC5taigpLHQuZz10LmUrKyxlfWNhdGNoKG4pe3Rocm93IG49V2kobiksX3Qobiw3Myk/KHQubWooKSxpdChuZXcgbGMpKTppdChuKX19ZnVuY3Rpb24gZHN0KHQpe3ZhciBlO3RyeXtyZXR1cm4gZT10LmMua2kodC5lKSx0Lm1qKCksdC5nPXQuZSsrLGV9Y2F0Y2gobil7dGhyb3cgbj1XaShuKSxfdChuLDczKT8odC5taigpLGl0KG5ldyBsYykpOml0KG4pfX1mdW5jdGlvbiBvXygpe29fPVoscDd0PSh1aSgpLGhBdCksUXV0PUhTdCxKcGU9VzYsZzd0PVUyLHJiZT0oc3EoKSxXRXQpLG5iZT1HRXQsaWJlPUtFdCxlYmU9VkV0LHRiZT0oUml0KCksaDd0KSxYdXQ9WHBlLGQ3dD1RcGUsZlY9WnBlfWZ1bmN0aW9uIFl6KHQpe3N3aXRjaChrYnQoKSx0aGlzLmM9bmV3IGhlLHRoaXMuZD10LHQuZyl7Y2FzZSAwOmNhc2UgMjp0aGlzLmE9TXZ0KE83dCksdGhpcy5iPWFzO2JyZWFrO2Nhc2UgMzpjYXNlIDE6dGhpcy5hPU83dCx0aGlzLmI9Q3N9fWZ1bmN0aW9uIGhzZSh0LGUsbil7dmFyIHIscztpZih0LmMpa3UodC5jLHQuYy5pK2UpLEV1KHQuYyx0LmMuaituKTtlbHNlIGZvcihzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTU3KSxoc2UocixlLG4pfWZ1bmN0aW9uIFBmbih0LGUpe3ZhciBuLHI7aWYodC5qLmxlbmd0aCE9ZS5qLmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wLHI9dC5qLmxlbmd0aDtuPHI7bisrKWlmKCFobih0Lmpbbl0sZS5qW25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBLeih0LGUsbil7dmFyIHI7ZS5hLmxlbmd0aD4wJiYobGUodC5iLG5ldyBHWXQoZS5hLG4pKSxyPWUuYS5sZW5ndGgsMDxyP2UuYT1lLmEuc3Vic3RyKDAsMCk6MD5yJiYoZS5hKz1LVXQoTnQoeGgseWQsMjUsLXIsMTUsMSkpKSl9ZnVuY3Rpb24gZnNlKHQsZSl7dmFyIG4scixzO2ZvcihuPXQubyxzPXUodShBaSh0LnIsZSksMjEpLDg0KS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMTEpLHIuZS5hPU4xbihyLG4uYSksci5lLmI9bi5iKlh0KHllKHIuYi5XZSh1VikpKX1mdW5jdGlvbiBGZm4odCxlKXt2YXIgbixyLHMsbztyZXR1cm4gcz10Lmssbj1YdCh5ZShRKHQsKGFlKCksRnYpKSkpLG89ZS5rLHI9WHQoeWUoUShlLEZ2KSkpLG8hPShWbigpLGtzKT8tMTpzIT1rcz8xOm49PXI/MDpuPHI/LTE6MX1mdW5jdGlvbiBOZm4odCxlKXt2YXIgbixyO3JldHVybiBuPXUodSh0cih0LmcsZS5hKSw0NikuYSw2NSkscj11KHUodHIodC5nLGUuYiksNDYpLmEsNjUpLFdwKGUuYSxlLmIpLVdwKGUuYSx3MnQobi5iKSktV3AoZS5iLHcydChyLmIpKX1mdW5jdGlvbiBCZm4odCxlKXt2YXIgbjtyZXR1cm4gbj11KFEodCwoVGUoKSxTbykpLDc0KSxsbnQoZSxLYmUpP24/QWgobik6KG49bmV3IFB1LEp0KHQsU28sbikpOm4mJkp0KHQsU28sbnVsbCksbn1mdW5jdGlvbiBkc2UodCl7dmFyIGU7cmV0dXJuIGU9bmV3IE1wLGUuYSs9Im4iLHQuayE9KFZuKCksT3MpJiZHcihHcigoZS5hKz0iKCIsZSksYm50KHQuaykudG9Mb3dlckNhc2UoKSksIikiKSxHcigoZS5hKz0iXyIsZSksckkodCkpLGUuYX1mdW5jdGlvbiBSZm4odCxlKXt2cihlLCJTZWxmLUxvb3AgcG9zdC1wcm9jZXNzaW5nIiwxKSxscyhSaShSaShXbyhuZXcgVG4obnVsbCxuZXcgX24odC5iLDE2KSksbmV3IG9YKSxuZXcgY1gpLG5ldyB4TiksbmV3IHVYKSxvcihlKX1mdW5jdGlvbiBjNih0LGUsbixyKXt2YXIgcztyZXR1cm4gbj49MD90LmhoKGUsbixyKToodC5laCgpJiYocj0ocz10LlZnKCkscz49MD90LlFnKHIpOnQuZWgoKS5paCh0LC0xLXMsbnVsbCxyKSkpLHQuU2coZSxuLHIpKX1mdW5jdGlvbiBSM3QodCxlKXtzd2l0Y2goZSl7Y2FzZSA3OiF0LmUmJih0LmU9bmV3IENuKFlzLHQsNyw0KSkseHIodC5lKTtyZXR1cm47Y2FzZSA4OiF0LmQmJih0LmQ9bmV3IENuKFlzLHQsOCw1KSkseHIodC5kKTtyZXR1cm59VDN0KHQsZSl9ZnVuY3Rpb24gWmYodCxlKXt2YXIgbjtuPXQuWmMoZSk7dHJ5e3JldHVybiBuLlBiKCl9Y2F0Y2gocil7dGhyb3cgcj1XaShyKSxfdChyLDEwOSk/aXQobmV3IHlvKCJDYW4ndCBnZXQgZWxlbWVudCAiK2UpKTppdChyKX19ZnVuY3Rpb24gajN0KHQsZSl7dGhpcy5lPXQsZTxtb3Q/KHRoaXMuZD0xLHRoaXMuYT1sdChjdChDciwxKSxYciwyNSwxNSxbZXwwXSkpOih0aGlzLmQ9Mix0aGlzLmE9bHQoY3QoQ3IsMSksWHIsMjUsMTUsW2UlbW90fDAsZS9tb3R8MF0pKX1mdW5jdGlvbiBnc2UodCxlKXt3bigpO3ZhciBuLHIscyxvO2ZvcihuPXQsbz1lLF90KHQsMjEpJiYhX3QoZSwyMSkmJihuPWUsbz10KSxzPW4uS2MoKTtzLk9iKCk7KWlmKHI9cy5QYigpLG8uSGMocikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQmEodCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiByPXQuWGMoZSksciE9LTEmJih0LmVqKCk/KG89dC5maigpLGg9bDYodCxyKSxzPXQuWmkoNCxoLG51bGwscixvKSxuP24uRWkocyk6bj1zKTpsNih0LHIpKSxufWZ1bmN0aW9uIGpmbih0LGUsbil7dmFyIHIscyxvLGg7cmV0dXJuIHI9dC5YYyhlKSxyIT0tMSYmKHQuZWooKT8obz10LmZqKCksaD1Iaih0LHIpLHM9dC5aaSg0LGgsbnVsbCxyLG8pLG4/bi5FaShzKTpuPXMpOkhqKHQscikpLG59ZnVuY3Rpb24gcHNlKHQsZSl7dmFyIG47c3dpdGNoKG49dShwbyh0LmIsZSksMTI0KS5uLGUuZyl7Y2FzZSAxOnQudD49MCYmKG4uZD10LnQpO2JyZWFrO2Nhc2UgMzp0LnQ+PTAmJihuLmE9dC50KX10LkMmJihuLmI9dC5DLmIsbi5jPXQuQy5jKX1mdW5jdGlvbiB1Nigpe3U2PVosZE89bmV3IFFSKEtxLDApLGZPPW5ldyBRUihJb3QsMSksZ089bmV3IFFSKE9vdCwyKSxwTz1uZXcgUVIoUG90LDMpLGRPLmE9ITEsZk8uYT0hMCxnTy5hPSExLHBPLmE9ITB9ZnVuY3Rpb24gY18oKXtjXz1aLGJPPW5ldyBYUihLcSwwKSxsVj1uZXcgWFIoSW90LDEpLGhWPW5ldyBYUihPb3QsMiksd089bmV3IFhSKFBvdCwzKSxiTy5hPSExLGxWLmE9ITAsaFYuYT0hMSx3Ty5hPSEwfWZ1bmN0aW9uICRmbih0KXt2YXIgZTtlPXQuYTtkbyBlPXUoTXIobmV3IGFyKGxyKGpvKGUpLmEuS2MoKSxuZXcgeikpKSwxNykuYy5pLGUuaz09KFZuKCksdGEpJiZ0LmIuRmMoZSk7d2hpbGUoZS5rPT0oVm4oKSx0YSkpO3QuYj1sMih0LmIpfWZ1bmN0aW9uIHpmbih0KXt2YXIgZSxuLHI7Zm9yKHI9dC5jLmEsdC5wPShMcihyKSxuZXcgQnUocikpLG49bmV3IFMocik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTApLGUucD1UcG4oZSkuYTt3bigpLFpzKHQucCxuZXcgZFEpfWZ1bmN0aW9uIGJzZSh0KXt2YXIgZSxuLHIscztpZihyPTAscz13eSh0KSxzLmMubGVuZ3RoPT0wKXJldHVybiAxO2ZvcihuPW5ldyBTKHMpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDMzKSxyKz1ic2UoZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gcWZuKHQsZSl7dmFyIG4scixzO2ZvcihzPTAscj11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTExKSxzKz1uLmQuYituLmIucmYoKS5hK24uZC5jLHIuT2IoKSYmKHMrPXQudyk7cmV0dXJuIHN9ZnVuY3Rpb24gSGZuKHQsZSl7dmFyIG4scixzO2ZvcihzPTAscj11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTExKSxzKz1uLmQuZCtuLmIucmYoKS5iK24uZC5hLHIuT2IoKSYmKHMrPXQudyk7cmV0dXJuIHN9ZnVuY3Rpb24gVmZuKHQsZSxuLHIpe2lmKGUuYTxyLmEpcmV0dXJuITA7aWYoZS5hPT1yLmEpe2lmKGUuYjxyLmIpcmV0dXJuITA7aWYoZS5iPT1yLmImJnQuYj5uLmIpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gZ3N0KHQsZSl7cmV0dXJuIHJhKHQpPyEhU2dlW2VdOnQuaG0/ISF0LmhtW2VdOkJtKHQpPyEhX2dlW2VdOk5tKHQpPyEhQ2dlW2VdOiExfWZ1bmN0aW9uIHdvKHQsZSxuKXtyZXR1cm4gbj09bnVsbD8oIXQubyYmKHQubz1uZXcgX2woKEpjKCksU2IpLEh2LHQsMCkpLHF6KHQubyxlKSk6KCF0Lm8mJih0Lm89bmV3IF9sKChKYygpLFNiKSxIdix0LDApKSxhcSh0Lm8sZSxuKSksdH1mdW5jdGlvbiBHZm4odCxlLG4scil7dmFyIHMsbztvPWUuWGUoKHVpKCksbzUpKT91KGUuV2UobzUpLDIxKTp0Lmoscz1QbG4obykscyE9KCRxKCksVXV0KSYmKG4mJiFQM3Qocyl8fFY0dChFMm4odCxzLHIpLGUpKX1mdW5jdGlvbiBYeih0LGUsbixyKXt2YXIgcyxvLGg7cmV0dXJuIG89eW4odC5UZygpLGUpLHM9ZS10LkFoKCksczwwPyhoPXQuWWcobyksaD49MD90Ll9nKGgsbiwhMCk6ZHYodCxvLG4pKTp1KG8sNjYpLk5qKCkuUGoodCx0LnloKCkscyxuLHIpfWZ1bmN0aW9uIFVmbih0LGUsbixyKXt2YXIgcyxvLGg7bi5taChlKSYmKHRvKCksYWl0KGUpPyhzPXUobi5haChlKSwxNTMpLGJmbih0LHMpKToobz0oaD1lLGg/dShyLDQ5KS54aChoKTpudWxsKSxvJiZZWWUobi5haChlKSxvKSkpfWZ1bmN0aW9uIFdmbih0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIHJ2KCksaE87Y2FzZSAzOnJldHVybiBydigpLGxPO2Nhc2UgMjpyZXR1cm4gcnYoKSxZdXQ7Y2FzZSA0OnJldHVybiBydigpLFd1dDtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiAkM3QodCl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlIFZhdDpyZXR1cm4gVmcodCk7Y2FzZSBOeHQ6cmV0dXJuIHBzKHQpO2Nhc2UgYjY6cmV0dXJuIE5uKCksdD8xMjMxOjEyMzc7ZGVmYXVsdDpyZXR1cm4gdD09bnVsbD8wOlB3KHQpfX1mdW5jdGlvbiBZZm4odCxlLG4pe2lmKHQuZSlzd2l0Y2godC5iKXtjYXNlIDE6RXJuKHQuYyxlLG4pO2JyZWFrO2Nhc2UgMDpUcm4odC5jLGUsbil9ZWxzZSB0SnQodC5jLGUsbik7dC5hW2UucF1bbi5wXT10LmMuaSx0LmFbbi5wXVtlLnBdPXQuYy5lfWZ1bmN0aW9uIHdzZSh0KXt2YXIgZSxuO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Zm9yKG49TnQobDAsZWUsMTkzLHQubGVuZ3RoLDAsMiksZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV09dShwb24odFtlXSx0W2VdLmxlbmd0aCksMTkzKTtyZXR1cm4gbn1mdW5jdGlvbiBReih0KXt2YXIgZTtpZihCaXQodCkpcmV0dXJuIFpqKHQpLHQuTGsoKSYmKGU9Yl8odC5lLHQuYix0LmMsdC5hLHQuaiksdC5qPWUpLHQuZz10LmEsKyt0LmEsKyt0LmMsdC5pPTAsdC5qO3Rocm93IGl0KG5ldyBsYyl9ZnVuY3Rpb24gS2ZuKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG89dC5vLG49dC5wLG88bj9vKj1vOm4qPW4scj1vK24sbz1lLm8sbj1lLnAsbzxuP28qPW86bio9bixzPW8rbixyPHM/LTE6cj09cz8wOjF9ZnVuY3Rpb24gSGcodCxlKXt2YXIgbixyLHM7aWYocz1Yc2UodCxlKSxzPj0wKXJldHVybiBzO2lmKHQuRmsoKSl7Zm9yKHI9MDtyPHQuaTsrK3IpaWYobj10LkdrKHUodC5nW3JdLDU2KSksVnQobik9PT1WdChlKSlyZXR1cm4gcn1yZXR1cm4tMX1mdW5jdGlvbiBoNCh0LGUsbil7dmFyIHIscztpZihzPXQuZ2MoKSxlPj1zKXRocm93IGl0KG5ldyBxbShlLHMpKTtpZih0LmhpKCkmJihyPXQuWGMobikscj49MCYmciE9ZSkpdGhyb3cgaXQobmV3IEZuKGVPKSk7cmV0dXJuIHQubWkoZSxuKX1mdW5jdGlvbiB6M3QodCxlKXtpZih0aGlzLmE9dShMcih0KSwyNDUpLHRoaXMuYj11KExyKGUpLDI0NSksdC52ZChlKT4wfHx0PT0oY2V0KCksX3V0KXx8ZT09KG9ldCgpLFN1dCkpdGhyb3cgaXQobmV3IEZuKCJJbnZhbGlkIHJhbmdlOiAiK1hadCh0LGUpKSl9ZnVuY3Rpb24gdnNlKHQpe3ZhciBlLG47Zm9yKHRoaXMuYj1uZXcgaGUsdGhpcy5jPXQsdGhpcy5hPSExLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMCksdGhpcy5hPXRoaXMuYXxlLms9PShWbigpLE9zKX1mdW5jdGlvbiBYZm4odCxlKXt2YXIgbixyLHM7Zm9yKG49RncobmV3IFhiLHQpLHM9bmV3IFMoZSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTIxKSx5ZihsZih1ZihoZihjZihuZXcgQ2gsMCksMCksbikscikpO3JldHVybiBufWZ1bmN0aW9uIG1zZSh0LGUsbil7dmFyIHIscyxvO2ZvcihzPW5ldyBhcihscigoZT9qbyh0KTpEcyh0KSkuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShNcihzKSwxNyksbz1lP3IuYy5pOnIuZC5pLG8uaz09KFZuKCksTGwpJiZFbyhvLG4pfWZ1bmN0aW9uIGN5KCl7Y3k9Wix4Rz1uZXcgbmooSjAsMCksbWh0PW5ldyBuaigiUE9SVF9QT1NJVElPTiIsMSksbjU9bmV3IG5qKCJOT0RFX1NJWkVfV0hFUkVfU1BBQ0VfUEVSTUlUUyIsMiksZTU9bmV3IG5qKCJOT0RFX1NJWkUiLDMpfWZ1bmN0aW9uIHQwKCl7dDA9Wix1ZnQ9bmV3IGk5KCJBVVRPTUFUSUMiLDApLEdPPW5ldyBpOSh5NiwxKSxVTz1uZXcgaTkoeDYsMiksV0c9bmV3IGk5KCJUT1AiLDMpLEdHPW5ldyBpOShyNnQsNCksVUc9bmV3IGk5KHFFLDUpfWZ1bmN0aW9uIHEzdCh0LGUsbixyKXtURSgpO3ZhciBzLG87Zm9yKHM9MCxvPTA7bzxuO28rKylzPVBhKF9hKE5zKGVbb10sY28pLE5zKHIsY28pKSxOcyhBcihzKSxjbykpLHRbb109QXIocykscz1WbShzLDMyKTtyZXR1cm4gQXIocyl9ZnVuY3Rpb24gSDN0KHQsZSxuKXt2YXIgcixzO2ZvcihzPTAscj0wO3I8R3V0O3IrKylzPWIuTWF0aC5tYXgocyx6aXQodC5hW2UuZ11bcl0sbikpO3JldHVybiBlPT0oS2YoKSxldSkmJnQuYiYmKHM9Yi5NYXRoLm1heChzLHQuYi5iKSksc31mdW5jdGlvbiBaeih0LGUpe3ZhciBuLHI7aWYocTJ0KGU+MCksKGUmLWUpPT1lKXJldHVybiBwcyhlKnVsKHQsMzEpKjQ2NTY2MTI4NzMwNzczOTNlLTI1KTtkbyBuPXVsKHQsMzEpLHI9biVlO3doaWxlKG4tcisoZS0xKTwwKTtyZXR1cm4gcHMocil9ZnVuY3Rpb24gVmcodCl7TVl0KCk7dmFyIGUsbixyO3JldHVybiBuPSI6Iit0LHI9YVZbbl0sciE9bnVsbD9wcygoT24ocikscikpOihyPVJFdFtuXSxlPXI9PW51bGw/JHduKHQpOnBzKChPbihyKSxyKSkscHJuKCksYVZbbl09ZSxlKX1mdW5jdGlvbiB5c2UodCxlLG4pe3ZyKG4sIkNvbXBvdW5kIGdyYXBoIHByZXByb2Nlc3NvciIsMSksdC5hPW5ldyBVdyxfaGUodCxlLG51bGwpLFMzbih0LGUpLHV3bih0KSxKdChlLChhZSgpLHJDdCksdC5hKSx0LmE9bnVsbCxYdSh0LmIpLG9yKG4pfWZ1bmN0aW9uIFFmbih0LGUsbil7c3dpdGNoKG4uZyl7Y2FzZSAxOnQuYT1lLmEvMix0LmI9MDticmVhaztjYXNlIDI6dC5hPWUuYSx0LmI9ZS5iLzI7YnJlYWs7Y2FzZSAzOnQuYT1lLmEvMix0LmI9ZS5iO2JyZWFrO2Nhc2UgNDp0LmE9MCx0LmI9ZS5iLzJ9fWZ1bmN0aW9uIFpmbih0KXt2YXIgZSxuLHI7Zm9yKHI9dShBaSh0LmEsKGI0KCkscVYpKSwxNSkuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMTAxKSxlPXQ0dChuKSxfOCh0LG4sZVswXSwobnYoKSxNdiksMCksXzgodCxuLGVbMV0sRHYsMSl9ZnVuY3Rpb24gSmZuKHQpe3ZhciBlLG4scjtmb3Iocj11KEFpKHQuYSwoYjQoKSxIVikpLDE1KS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwxMDEpLGU9dDR0KG4pLF84KHQsbixlWzBdLChudigpLE12KSwwKSxfOCh0LG4sZVsxXSxEdiwxKX1mdW5jdGlvbiBwc3QodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gbmV3IHluZTtjYXNlIDI6cmV0dXJuIG5ldyBacHQ7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oSWN0Kyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gdEkodCxlLG4pe3ZhciByLHM7Zm9yKHh1bih0LGUtdC5zLG4tdC50KSxzPW5ldyBTKHQubik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMjExKSx2eChyLHIuZStlLXQucyksbXB0KHIsci5mK24tdC50KTt0LnM9ZSx0LnQ9bn1mdW5jdGlvbiB0MW4odCl7dmFyIGUsbixyLHMsbztmb3Iobj0wLHM9bmV3IFModC5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMjEpLHIuZD1uKys7cmV0dXJuIGU9RGduKHQpLG89bnVsbCxlLmMubGVuZ3RoPjEmJihvPVhmbih0LGUpKSxvfWZ1bmN0aW9uIGJzdCh0KXt2YXIgZTtyZXR1cm4gdC5mJiZ0LmYua2goKSYmKGU9dSh0LmYsNDkpLHQuZj11KFpwKHQsZSksODIpLHQuZiE9ZSYmdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsOSw4LGUsdC5mKSkpLHQuZn1mdW5jdGlvbiB3c3QodCl7dmFyIGU7cmV0dXJuIHQuaSYmdC5pLmtoKCkmJihlPXUodC5pLDQ5KSx0Lmk9dShacCh0LGUpLDgyKSx0LmkhPWUmJnQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDksNyxlLHQuaSkpKSx0Lml9ZnVuY3Rpb24gbm8odCl7dmFyIGU7cmV0dXJuIHQuYiYmdC5iLkRiJjY0JiYoZT10LmIsdC5iPXUoWnAodCxlKSwxOCksdC5iIT1lJiZ0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCw5LDIxLGUsdC5iKSkpLHQuYn1mdW5jdGlvbiBKeih0LGUpe3ZhciBuLHIsczt0LmQ9PW51bGw/KCsrdC5lLCsrdC5mKToocj1lLlNoKCksYnduKHQsdC5mKzEpLHM9KHImd2kpJXQuZC5sZW5ndGgsbj10LmRbc10sIW4mJihuPXQuZFtzXT10LnVqKCkpLG4uRmMoZSksKyt0LmYpfWZ1bmN0aW9uIFYzdCh0LGUsbil7dmFyIHI7cmV0dXJuIGUuS2ooKT8hMTplLlpqKCkhPS0yPyhyPWUuemooKSxyPT1udWxsP249PW51bGw6eWkocixuKSk6ZS5IaigpPT10LmUuVGcoKSYmbj09bnVsbH1mdW5jdGlvbiB0cSgpe3ZhciB0O2psKDE2LGJmZSksdD1obmUoMTYpLHRoaXMuYj1OdChMdXQsUEksMzE3LHQsMCwxKSx0aGlzLmM9TnQoTHV0LFBJLDMxNyx0LDAsMSksdGhpcy5hPW51bGwsdGhpcy5lPW51bGwsdGhpcy5pPTAsdGhpcy5mPXQtMSx0aGlzLmc9MH1mdW5jdGlvbiBZMCh0KXtjd3QuY2FsbCh0aGlzKSx0aGlzLms9KFZuKCksT3MpLHRoaXMuaj0oamwoNixreSksbmV3IFhjKDYpKSx0aGlzLmI9KGpsKDIsa3kpLG5ldyBYYygyKSksdGhpcy5kPW5ldyBuZXQsdGhpcy5mPW5ldyBIcHQsdGhpcy5hPXR9ZnVuY3Rpb24gZTFuKHQpe3ZhciBlLG47dC5jLmxlbmd0aDw9MXx8KGU9dnVlKHQsKHZlKCksbXIpKSxhb2UodCx1KGUuYSwxOSkuYSx1KGUuYiwxOSkuYSksbj12dWUodCxCbiksYW9lKHQsdShuLmEsMTkpLmEsdShuLmIsMTkpLmEpKX1mdW5jdGlvbiB1Xygpe3VfPVosRjl0PW5ldyBMTSgiU0lNUExFIiwwKSx4aHQ9bmV3IExNKFhvdCwxKSxraHQ9bmV3IExNKCJMSU5FQVJfU0VHTUVOVFMiLDIpLERTPW5ldyBMTSgiQlJBTkRFU19LT0VQRiIsMyksSVM9bmV3IExNKHExZSw0KX1mdW5jdGlvbiBHM3QodCxlLG4pe2p4KHUoUShlLChUZSgpLGNzKSksOTgpKXx8KGptdCh0LGUsR2coZSxuKSksam10KHQsZSxHZyhlLCh2ZSgpLG1yKSkpLGptdCh0LGUsR2coZSxQbikpLHduKCksWnMoZS5qLG5ldyBoTSh0KSkpfWZ1bmN0aW9uIHhzZSh0LGUsbixyKXt2YXIgcyxvLGg7Zm9yKHM9dShBaShyP3QuYTp0LmIsZSksMjEpLGg9cy5LYygpO2guT2IoKTspaWYobz11KGguUGIoKSwzMyksVHEodCxuLG8pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHZzdCh0KXt2YXIgZSxuO2ZvcihuPW5ldyBucih0KTtuLmUhPW4uaS5nYygpOylpZihlPXUoZHIobiksODcpLGUuZXx8KCFlLmQmJihlLmQ9bmV3IEFzKGhvLGUsMSkpLGUuZCkuaSE9MClyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBtc3QodCl7dmFyIGUsbjtmb3Iobj1uZXcgbnIodCk7bi5lIT1uLmkuZ2MoKTspaWYoZT11KGRyKG4pLDg3KSxlLmV8fCghZS5kJiYoZS5kPW5ldyBBcyhobyxlLDEpKSxlLmQpLmkhPTApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbjFuKHQpe3ZhciBlLG4scjtmb3IoZT0wLHI9bmV3IFModC5jLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEwKSxlKz1qMChuZXcgYXIobHIoRHMobikuYS5LYygpLG5ldyB6KSkpO3JldHVybiBlL3QuYy5hLmMubGVuZ3RofWZ1bmN0aW9uIGtzZSh0KXt2YXIgZSxuO2Zvcih0LmN8fGw0bih0KSxuPW5ldyBQdSxlPW5ldyBTKHQuYSksSihlKTtlLmE8ZS5jLmMubGVuZ3RoOylyaShuLHUoSihlKSw0MDcpLmEpO3JldHVybiBabihuLmIhPTApLGxoKG4sbi5jLmIpLG59ZnVuY3Rpb24geXN0KCl7eXN0PVoseFN0PShkYXQoKSx3U3QpLHlTdD1uZXcgT3coOCksbmV3IGVvKCh1aSgpLFUyKSx5U3QpLG5ldyBlbyhXMiw4KSxxM2U9cFN0LHZTdD1QM2UsbVN0PUYzZSx6M2U9bmV3IGVvKFFPLChObigpLCExKSl9ZnVuY3Rpb24gVTN0KHQsZSxuLHIpe3N3aXRjaChlKXtjYXNlIDc6cmV0dXJuIXQuZSYmKHQuZT1uZXcgQ24oWXMsdCw3LDQpKSx0LmU7Y2FzZSA4OnJldHVybiF0LmQmJih0LmQ9bmV3IENuKFlzLHQsOCw1KSksdC5kfXJldHVybiBmM3QodCxlLG4scil9ZnVuY3Rpb24geHN0KHQpe3ZhciBlO3JldHVybiB0LmEmJnQuYS5raCgpJiYoZT11KHQuYSw0OSksdC5hPXUoWnAodCxlKSwxMzgpLHQuYSE9ZSYmdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsOSw1LGUsdC5hKSkpLHQuYX1mdW5jdGlvbiB5Mih0KXtyZXR1cm4gdDw0OHx8dD4xMDI/LTE6dDw9NTc/dC00ODp0PDY1Py0xOnQ8PTcwP3QtNjUrMTA6dDw5Nz8tMTp0LTk3KzEwfWZ1bmN0aW9uIGtzdCh0LGUpe2lmKHQ9PW51bGwpdGhyb3cgaXQobmV3IFN4KCJudWxsIGtleSBpbiBlbnRyeTogbnVsbD0iK2UpKTtpZihlPT1udWxsKXRocm93IGl0KG5ldyBTeCgibnVsbCB2YWx1ZSBpbiBlbnRyeTogIit0KyI9bnVsbCIpKX1mdW5jdGlvbiByMW4odCxlKXtmb3IodmFyIG4scjt0Lk9iKCk7KWlmKCFlLk9iKCl8fChuPXQuUGIoKSxyPWUuUGIoKSwhKFZ0KG4pPT09VnQocil8fG4hPW51bGwmJnlpKG4scikpKSlyZXR1cm4hMTtyZXR1cm4hZS5PYigpfWZ1bmN0aW9uIEVzZSh0LGUpe3ZhciBuO3JldHVybiBuPWx0KGN0KGFhLDEpLHZvLDI1LDE1LFt6aXQodC5hWzBdLGUpLHppdCh0LmFbMV0sZSkseml0KHQuYVsyXSxlKV0pLHQuZCYmKG5bMF09Yi5NYXRoLm1heChuWzBdLG5bMl0pLG5bMl09blswXSksbn1mdW5jdGlvbiBUc2UodCxlKXt2YXIgbjtyZXR1cm4gbj1sdChjdChhYSwxKSx2bywyNSwxNSxbTHoodC5hWzBdLGUpLEx6KHQuYVsxXSxlKSxMeih0LmFbMl0sZSldKSx0LmQmJihuWzBdPWIuTWF0aC5tYXgoblswXSxuWzJdKSxuWzJdPW5bMF0pLG59ZnVuY3Rpb24geDIoKXt4Mj1aLE1sdD1uZXcgQU0oIkdSRUVEWSIsMCksUFR0PW5ldyBBTShBMWUsMSksRGx0PW5ldyBBTShYb3QsMiksdlM9bmV3IEFNKCJNT0RFTF9PUkRFUiIsMyksd1M9bmV3IEFNKCJHUkVFRFlfTU9ERUxfT1JERVIiLDQpfWZ1bmN0aW9uIENzZSh0LGUpe3ZhciBuLHIscztmb3IodC5iW2UuZ109MSxyPWVpKGUuZCwwKTtyLmIhPXIuZC5jOyluPXUodGkociksMTg4KSxzPW4uYyx0LmJbcy5nXT09MT9yaSh0LmEsbik6dC5iW3MuZ109PTI/dC5iW3MuZ109MTpDc2UodCxzKX1mdW5jdGlvbiBpMW4odCxlKXt2YXIgbixyLHM7Zm9yKHM9bmV3IFhjKGUuZ2MoKSkscj1lLktjKCk7ci5PYigpOyluPXUoci5QYigpLDI4Niksbi5jPT1uLmY/RUUodCxuLG4uYyk6bnBuKHQsbil8fChzLmNbcy5jLmxlbmd0aF09bik7cmV0dXJuIHN9ZnVuY3Rpb24gczFuKHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihkPXQucitlLHQucis9ZSx0LmQrPW4scj1uL3Qubi5jLmxlbmd0aCxzPTAsaD1uZXcgUyh0Lm4pO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDIxMSksZzJuKG8sZCxyLHMpLCsrc31mdW5jdGlvbiBhMW4odCl7dmFyIGUsbixyO2ZvcihOQyh0LmIuYSksdC5hPU50KG9WLERlLDU3LHQuYy5jLmEuYi5jLmxlbmd0aCwwLDEpLGU9MCxyPW5ldyBTKHQuYy5jLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNTcpLG4uZj1lKyt9ZnVuY3Rpb24gbzFuKHQpe3ZhciBlLG4scjtmb3IoTkModC5iLmEpLHQuYT1OdChhbHQsRGUsODEsdC5jLmEuYS5iLmMubGVuZ3RoLDAsMSksZT0wLHI9bmV3IFModC5jLmEuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw4MSksbi5pPWUrK31mdW5jdGlvbiBjMW4odCxlLG4pe3ZhciByO3ZyKG4sIlNocmlua2luZyB0cmVlIGNvbXBhY3Rpb24iLDEpLGplKFJlKFEoZSwoWjgoKSxmUykpKSk/KGtjbih0LGUuZiksaWVlKGUuZiwocj1lLmMscikpKTppZWUoZS5mLGUuYyksb3Iobil9ZnVuY3Rpb24gX3NlKHQpe3ZhciBlO2lmKGU9Y2xuKHQpLCF6cih0KSl0aHJvdyBpdChuZXcgeW8oInBvc2l0aW9uICgwKSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgcmVtYWluZWQgKCIrZSsiKSIpKTtyZXR1cm4gTXIodCl9ZnVuY3Rpb24gU3NlKHQsZSxuKXt2YXIgcjt0cnl7cmV0dXJuIGY0KHQsZSt0Lmosbit0LmspfWNhdGNoKHMpe3Rocm93IHM9V2kocyksX3Qocyw3Myk/KHI9cyxpdChuZXcgeW8oci5nK1FxK2UrWWErbisiKS4iKSkpOml0KHMpfX1mdW5jdGlvbiB1MW4odCxlLG4pe3ZhciByO3RyeXtyZXR1cm4gTXNlKHQsZSt0Lmosbit0LmspfWNhdGNoKHMpe3Rocm93IHM9V2kocyksX3Qocyw3Myk/KHI9cyxpdChuZXcgeW8oci5nK1FxK2UrWWErbisiKS4iKSkpOml0KHMpfX1mdW5jdGlvbiBsMW4odCxlLG4pe3ZhciByO3RyeXtyZXR1cm4gRHNlKHQsZSt0Lmosbit0LmspfWNhdGNoKHMpe3Rocm93IHM9V2kocyksX3Qocyw3Myk/KHI9cyxpdChuZXcgeW8oci5nK1FxK2UrWWErbisiKS4iKSkpOml0KHMpfX1mdW5jdGlvbiBBc2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAxOnJldHVybiB2ZSgpLEJuO2Nhc2UgNDpyZXR1cm4gdmUoKSxQbjtjYXNlIDM6cmV0dXJuIHZlKCksSG47Y2FzZSAyOnJldHVybiB2ZSgpLG1yO2RlZmF1bHQ6cmV0dXJuIHZlKCksWm99fWZ1bmN0aW9uIGgxbih0LGUsbil7ZS5rPT0oVm4oKSxPcykmJm4uaz09dGEmJih0LmQ9R2l0KGUsKHZlKCksbXIpKSx0LmI9R2l0KGUsUG4pKSxuLms9PU9zJiZlLms9PXRhJiYodC5kPUdpdChuLCh2ZSgpLFBuKSksdC5iPUdpdChuLG1yKSl9ZnVuY3Rpb24gRXN0KHQsZSl7dmFyIG4scixzO2ZvcihzPUtvKHQsZSkscj1zLktjKCk7ci5PYigpOylpZihuPXUoci5QYigpLDExKSxRKG4sKGFlKCksSnUpKSE9bnVsbHx8djkobmV3IEwxKG4uYikpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFczdCh0LGUpe3JldHVybiBrdShlLHQuZSt0LmQrKHQuYy5jLmxlbmd0aD09MD8wOnQuYikpLEV1KGUsdC5mKSx0LmE9Yi5NYXRoLm1heCh0LmEsZS5mKSx0LmQrPWUuZysodC5jLmMubGVuZ3RoPT0wPzA6dC5iKSxsZSh0LmMsZSksITB9ZnVuY3Rpb24gZjFuKHQsZSxuKXt2YXIgcixzLG8saDtmb3IoaD0wLHI9bi90LmEuYy5sZW5ndGgsbz1uZXcgUyh0LmEpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDE4NyksdEkocyxzLnMscy50K2gqciksczFuKHMsdC5kLXMucitlLHIpLCsraH1mdW5jdGlvbiBkMW4odCl7dmFyIGUsbixyLHMsbztmb3Iocj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoSihyKSwyOSksZT0wLG89bmV3IFMobi5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMCkscy5wPWUrK31mdW5jdGlvbiBnMW4odCxlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKHM9ZS5sZW5ndGgtMSxoPTAsZD0wLHI9MDtyPD1zO3IrKylvPWVbcl0sbj1PZ24ocyxyKSpReXQoMS10LHMtcikqUXl0KHQsciksaCs9by5hKm4sZCs9by5iKm47cmV0dXJuIG5ldyAkZShoLGQpfWZ1bmN0aW9uIExzZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG49ZS5nYygpLHQucWkodC5pK24pLG89ZS5LYygpLGg9dC5pLHQuaSs9bixyPWg7cjx0Lmk7KytyKXM9by5QYigpLHA5KHQscix0Lm9pKHIscykpLHQuYmkocixzKSx0LmNpKCk7cmV0dXJuIG4hPTB9ZnVuY3Rpb24gcDFuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHQuZWooKT8ocj10LlZpKCksbz10LmZqKCksKyt0LmosdC5IaShyLHQub2kocixlKSkscz10LlppKDMsbnVsbCxlLHIsbyksbj9uLkVpKHMpOm49cyk6R1d0KHQsdC5WaSgpLGUpLG59ZnVuY3Rpb24gYjFuKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9dShBdChMYyh0LmEpLGUpLDg3KSxvPShzPXIuYyxfdChzLDg4KT91KHMsMjYpOihkbigpLEtoKSksKG8uRGImNjQ/WnAodC5iLG8pOm8pPT1uP0xxKHIpOkg4KHIsbiksb31mdW5jdGlvbiBZM3QodCxlLG4scixzLG8saCxkKXt2YXIgdixrO3ImJih2PXIuYVswXSx2JiZZM3QodCxlLG4sdixzLG8saCxkKSxWMW4odCxuLHIuZCxzLG8saCxkKSYmZS5GYyhyKSxrPXIuYVsxXSxrJiZZM3QodCxlLG4sayxzLG8saCxkKSl9ZnVuY3Rpb24gdzFuKHQsZSl7dmFyIG47cmV0dXJuIHQuYXx8KG49TnQoYWEsdm8sMjUsMCwxNSwxKSxqMyh0LmIuYSxuZXcgaWUobikpLG4uc29ydChGZWUoVHQucHJvdG90eXBlLnRlLFR0LFtdKSksdC5hPW5ldyBFWXQobix0LmQpKSx6JCh0LmEsZSl9ZnVuY3Rpb24gZjQodCxlLG4pe3RyeXtyZXR1cm4gRHcod2l0KHQsZSxuKSwxKX1jYXRjaChyKXt0aHJvdyByPVdpKHIpLF90KHIsMzIwKT9pdChuZXcgeW8oRm90K3QubysiKiIrdC5wK05vdCtlK1lhK24rQm90KSk6aXQocil9fWZ1bmN0aW9uIE1zZSh0LGUsbil7dHJ5e3JldHVybiBEdyh3aXQodCxlLG4pLDApfWNhdGNoKHIpe3Rocm93IHI9V2kociksX3QociwzMjApP2l0KG5ldyB5byhGb3QrdC5vKyIqIit0LnArTm90K2UrWWErbitCb3QpKTppdChyKX19ZnVuY3Rpb24gRHNlKHQsZSxuKXt0cnl7cmV0dXJuIER3KHdpdCh0LGUsbiksMil9Y2F0Y2gocil7dGhyb3cgcj1XaShyKSxfdChyLDMyMCk/aXQobmV3IHlvKEZvdCt0Lm8rIioiK3QucCtOb3QrZStZYStuK0JvdCkpOml0KHIpfX1mdW5jdGlvbiBJc2UodCxlKXtpZih0Lmc9PS0xKXRocm93IGl0KG5ldyBPdSk7dC5taigpO3RyeXt0LmQuX2ModC5nLGUpLHQuZj10LmQuan1jYXRjaChuKXt0aHJvdyBuPVdpKG4pLF90KG4sNzMpP2l0KG5ldyByaCk6aXQobil9fWZ1bmN0aW9uIHYxbih0LGUsbil7dnIobiwiTGluZWFyIHNlZ21lbnRzIG5vZGUgcGxhY2VtZW50IiwxKSx0LmI9dShRKGUsKGFlKCksUTQpKSwzMDQpLEl4bih0LGUpLHAzbih0LGUpLEQzbih0LGUpLGh4bih0KSx0LmE9bnVsbCx0LmI9bnVsbCxvcihuKX1mdW5jdGlvbiBlSSh0LGUpe3ZhciBuLHIscyxvO2ZvcihvPXQuZ2MoKSxlLmxlbmd0aDxvJiYoZT1MUihuZXcgQXJyYXkobyksZSkpLHM9ZSxyPXQuS2MoKSxuPTA7bjxvOysrbil0cyhzLG4sci5QYigpKTtyZXR1cm4gZS5sZW5ndGg+byYmdHMoZSxvLG51bGwpLGV9ZnVuY3Rpb24gbTFuKHQsZSl7dmFyIG4scjtpZihyPXQuZ2MoKSxlPT1udWxsKXtmb3Iobj0wO248cjtuKyspaWYodC5YYihuKT09bnVsbClyZXR1cm4gbn1lbHNlIGZvcihuPTA7bjxyO24rKylpZih5aShlLHQuWGIobikpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIFRzdCh0LGUpe3ZhciBuLHIscztyZXR1cm4gbj1lLmNkKCkscz1lLmRkKCkscj10LnhjKG4pLCEoIShWdChzKT09PVZ0KHIpfHxzIT1udWxsJiZ5aShzLHIpKXx8cj09bnVsbCYmIXQuX2IobikpfWZ1bmN0aW9uIHkxbih0LGUpe3ZhciBuLHIscztyZXR1cm4gZTw9MjI/KG49dC5sJigxPDxlKS0xLHI9cz0wKTplPD00ND8obj10Lmwscj10Lm0mKDE8PGUtMjIpLTEscz0wKToobj10Lmwscj10Lm0scz10LmgmKDE8PGUtNDQpLTEpLGl1KG4scixzKX1mdW5jdGlvbiB4MW4odCxlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuIHQuZi5uLmQrdC50O2Nhc2UgMzpyZXR1cm4gdC5mLm4uYSt0LnQ7Y2FzZSAyOnJldHVybiB0LmYubi5jK3QucztjYXNlIDQ6cmV0dXJuIHQuZi5uLmIrdC5zO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIGsxbih0LGUpe3ZhciBuLHI7c3dpdGNoKHI9ZS5jLG49ZS5hLHQuYi5nKXtjYXNlIDA6bi5kPXQuZS1yLmEtci5kO2JyZWFrO2Nhc2UgMTpuLmQrPXQuZTticmVhaztjYXNlIDI6bi5jPXQuZS1yLmEtci5kO2JyZWFrO2Nhc2UgMzpuLmM9dC5lK3IuZH19ZnVuY3Rpb24gSzN0KHQsZSxuLHIpe3ZhciBzLG87dGhpcy5hPWUsdGhpcy5jPXIscz10LmEsbHB0KHRoaXMsbmV3ICRlKC1zLmMsLXMuZCkpLExpKHRoaXMuYixuKSxvPXIvMixlLmE/cU0odGhpcy5iLDAsbyk6cU0odGhpcy5iLG8sMCksbGUodC5jLHRoaXMpfWZ1bmN0aW9uIGVxKCl7ZXE9WixLaHQ9bmV3IGlqKEowLDApLE9fdD1uZXcgaWooTDFlLDEpLFBfdD1uZXcgaWooIkVER0VfTEVOR1RIX0JZX1BPU0lUSU9OIiwyKSxJX3Q9bmV3IGlqKCJDUk9TU0lOR19NSU5JTUlaQVRJT05fQllfUE9TSVRJT04iLDMpfWZ1bmN0aW9uIENzdCh0LGUpe3ZhciBuLHI7aWYobj11KG40KHQuZyxlKSwzMyksbilyZXR1cm4gbjtpZihyPXUobjQodC5qLGUpLDExOCkscilyZXR1cm4gcjt0aHJvdyBpdChuZXcgdWQoIlJlZmVyZW5jZWQgc2hhcGUgZG9lcyBub3QgZXhpc3Q6ICIrZSkpfWZ1bmN0aW9uIEUxbih0LGUpe2lmKHQuYz09ZSlyZXR1cm4gdC5kO2lmKHQuZD09ZSlyZXR1cm4gdC5jO3Rocm93IGl0KG5ldyBGbigiTm9kZSAnb25lJyBtdXN0IGJlIGVpdGhlciBzb3VyY2Ugb3IgdGFyZ2V0IG9mIGVkZ2UgJ2VkZ2UnLiIpKX1mdW5jdGlvbiBUMW4odCxlKXtpZih0LmMuaT09ZSlyZXR1cm4gdC5kLmk7aWYodC5kLmk9PWUpcmV0dXJuIHQuYy5pO3Rocm93IGl0KG5ldyBGbigiTm9kZSAiK2UrIiBpcyBuZWl0aGVyIHNvdXJjZSBub3IgdGFyZ2V0IG9mIGVkZ2UgIit0KSl9ZnVuY3Rpb24gQzFuKHQsZSl7dmFyIG47c3dpdGNoKGUuZyl7Y2FzZSAyOmNhc2UgNDpuPXQuYSx0LmMuZC5uLmI8bi5kLm4uYiYmKG49dC5jKSxPZyh0LGUsKEkxKCksdmx0KSxuKTticmVhaztjYXNlIDE6Y2FzZSAzOk9nKHQsZSwoSTEoKSxPNiksbnVsbCl9fWZ1bmN0aW9uIF9zdCh0LGUsbixyLHMsbyl7dmFyIGgsZCx2LGssQztmb3IoaD1BZG4oZSxuLG8pLGQ9bj09KHZlKCksUG4pfHxuPT1Cbj8tMToxLGs9dFtuLmddLEM9MDtDPGsubGVuZ3RoO0MrKyl2PWtbQ10sdj4wJiYodis9cyksa1tDXT1oLGgrPWQqKHYrcil9ZnVuY3Rpb24gT3NlKHQpe3ZhciBlLG4scjtmb3Iocj10LmYsdC5uPU50KGFhLHZvLDI1LHIsMTUsMSksdC5kPU50KGFhLHZvLDI1LHIsMTUsMSksZT0wO2U8cjtlKyspbj11KE5lKHQuYy5iLGUpLDI5KSx0Lm5bZV09dXNlKHQsbiksdC5kW2VdPVZjZSh0LG4pfWZ1bmN0aW9uIFNzdCh0LGUpe3ZhciBuLHIscztmb3Iocz0wLHI9MjtyPGU7cjw8PTEpdC5EYiZyJiYrK3M7aWYocz09MCl7Zm9yKG49ZTw8PTE7bjw9MTI4O248PD0xKWlmKHQuRGImbilyZXR1cm4gMDtyZXR1cm4tMX1lbHNlIHJldHVybiBzfWZ1bmN0aW9uIFBzZSh0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKGg9b3UodC5lLlRnKCksZSksbz1udWxsLG49dSh0LmcsMTE5KSxzPTA7czx0Lmk7KytzKXI9bltzXSxoLnJsKHIuYWsoKSkmJighbyYmKG89bmV3IG94KSxEcihvLHIpKTtvJiZVaGUodCxvKX1mdW5jdGlvbiBGc2UodCl7dmFyIGUsbixyO2lmKCF0KXJldHVybiBudWxsO2lmKHQuZGMoKSlyZXR1cm4iIjtmb3Iocj1uZXcgQWcsbj10LktjKCk7bi5PYigpOyllPW4uUGIoKSxnbyhyLEJyKGUpKSxyLmErPSIgIjtyZXR1cm4gaW50KHIsci5hLmxlbmd0aC0xKX1mdW5jdGlvbiBYM3QodCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKER1bih0KSxzPSh0Lms9PW51bGwmJih0Lms9TnQoRHV0LGVlLDc4LDAsMCwxKSksdC5rKSxvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSxYM3Qocik7ZD10LmYsZCYmWDN0KGQpfWZ1bmN0aW9uIE5zZSh0LGUpe3ZhciBuPW5ldyBBcnJheShlKSxyO3N3aXRjaCh0KXtjYXNlIDE0OmNhc2UgMTU6cj0wO2JyZWFrO2Nhc2UgMTY6cj0hMTticmVhaztkZWZhdWx0OnJldHVybiBufWZvcih2YXIgcz0wO3M8ZTsrK3MpbltzXT1yO3JldHVybiBufWZ1bmN0aW9uIGx2KHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksNTcpLGUuYy4kYigpO0JwKHQuZCk/cj10LmEuYzpyPXQuYS5kLHh1KHIsbmV3IHdyKHQpKSx0LmMuTWUodCksb3VlKHQpfWZ1bmN0aW9uIEJzZSh0KXt2YXIgZSxuLHIscztmb3Iobj1uZXcgUyh0LmUuYyk7bi5hPG4uYy5jLmxlbmd0aDspe2ZvcihlPXUoSihuKSwyODIpLHM9bmV3IFMoZS5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSw0NDcpLGR4dChyKTtMb2UoZSl9fWZ1bmN0aW9uIG5xKHQpe3ZhciBlLG4scixzLG87Zm9yKHI9MCxvPTAscz0wLG49bmV3IFModC5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxODcpLG89Yi5NYXRoLm1heChvLGUucikscis9ZS5kKyhzPjA/dC5jOjApLCsrczt0LmI9cix0LmQ9b31mdW5jdGlvbiBfMW4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihyPTAscz0wLG49MCxoPW5ldyBTKGUpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDIwMCkscj1iLk1hdGgubWF4KHIsby5lKSxzKz1vLmIrKG4+MD90Lmc6MCksKytuO3QuYz1zLHQuZD1yfWZ1bmN0aW9uIFJzZSh0LGUpe3ZhciBuO3JldHVybiBuPWx0KGN0KGFhLDEpLHZvLDI1LDE1LFtIM3QodCwoS2YoKSxzYyksZSksSDN0KHQsZXUsZSksSDN0KHQsYWMsZSldKSx0LmYmJihuWzBdPWIuTWF0aC5tYXgoblswXSxuWzJdKSxuWzJdPW5bMF0pLG59ZnVuY3Rpb24gUzFuKHQsZSxuKXt2YXIgcjt0cnl7U3EodCxlK3QuaixuK3QuaywhMSwhMCl9Y2F0Y2gocyl7dGhyb3cgcz1XaShzKSxfdChzLDczKT8ocj1zLGl0KG5ldyB5byhyLmcrUXErZStZYStuKyIpLiIpKSk6aXQocyl9fWZ1bmN0aW9uIEExbih0LGUsbil7dmFyIHI7dHJ5e1NxKHQsZSt0Lmosbit0LmssITAsITEpfWNhdGNoKHMpe3Rocm93IHM9V2kocyksX3Qocyw3Myk/KHI9cyxpdChuZXcgeW8oci5nK1FxK2UrWWErbisiKS4iKSkpOml0KHMpfX1mdW5jdGlvbiBqc2UodCl7dmFyIGU7VXModCwoVGUoKSxOdikpJiYoZT11KFEodCxOdiksMjEpLGUuSGMoKHB5KCksX2YpKT8oZS5NYyhfZiksZS5GYyhTZikpOmUuSGMoU2YpJiYoZS5NYyhTZiksZS5GYyhfZikpKX1mdW5jdGlvbiAkc2UodCl7dmFyIGU7VXModCwoVGUoKSxOdikpJiYoZT11KFEodCxOdiksMjEpLGUuSGMoKHB5KCksTGYpKT8oZS5NYyhMZiksZS5GYyhIaCkpOmUuSGMoSGgpJiYoZS5NYyhIaCksZS5GYyhMZikpKX1mdW5jdGlvbiBMMW4odCxlLG4pe3ZyKG4sIlNlbGYtTG9vcCBvcmRlcmluZyIsMSksbHMod3UoUmkoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKGUuYiwxNikpLG5ldyBtTiksbmV3IHJYKSxuZXcgaVgpLG5ldyBzWCksbmV3IExtKHQpKSxvcihuKX1mdW5jdGlvbiBuSSh0LGUsbixyKXt2YXIgcyxvO2ZvcihzPWU7czx0LmMubGVuZ3RoO3MrKylpZihvPShBbihzLHQuYy5sZW5ndGgpLHUodC5jW3NdLDExKSksbi5NYihvKSlyLmNbci5jLmxlbmd0aF09bztlbHNlIHJldHVybiBzO3JldHVybiB0LmMubGVuZ3RofWZ1bmN0aW9uIEFzdCh0LGUsbixyKXt2YXIgcyxvLGgsZDtyZXR1cm4gdC5hPT1udWxsJiZJZ24odCxlKSxoPWUuYi5qLmMubGVuZ3RoLG89bi5kLnAsZD1yLmQucCxzPWQtMSxzPDAmJihzPWgtMSksbzw9cz90LmFbc10tdC5hW29dOnQuYVtoLTFdLXQuYVtvXSt0LmFbc119ZnVuY3Rpb24gTTFuKHQpe3ZhciBlLG47aWYoIXQuYilmb3IodC5iPUQkKHUodC5mLDMzKS5BZygpLmkpLG49bmV3IG5yKHUodC5mLDMzKS5BZygpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMTM3KSxsZSh0LmIsbmV3IGdldChlKSk7cmV0dXJuIHQuYn1mdW5jdGlvbiBEMW4odCl7dmFyIGUsbjtpZighdC5lKWZvcih0LmU9RCQodXJ0KHUodC5mLDMzKSkuaSksbj1uZXcgbnIodXJ0KHUodC5mLDMzKSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwxMTgpLGxlKHQuZSxuZXcgJHp0KGUpKTtyZXR1cm4gdC5lfWZ1bmN0aW9uIHpzZSh0KXt2YXIgZSxuO2lmKCF0LmEpZm9yKHQuYT1EJChwJCh1KHQuZiwzMykpLmkpLG49bmV3IG5yKHAkKHUodC5mLDMzKSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwzMyksbGUodC5hLG5ldyBnbnQodCxlKSk7cmV0dXJuIHQuYX1mdW5jdGlvbiBodih0KXt2YXIgZTtpZighdC5DJiYodC5EIT1udWxsfHx0LkIhPW51bGwpKWlmKGU9WjRuKHQpLGUpdC55ayhlKTtlbHNlIHRyeXt0LnlrKG51bGwpfWNhdGNoKG4pe2lmKG49V2kobiksIV90KG4sNjApKXRocm93IGl0KG4pfXJldHVybiB0LkN9ZnVuY3Rpb24gSTFuKHQpe3N3aXRjaCh0LnEuZyl7Y2FzZSA1OmhhZSh0LCh2ZSgpLFBuKSksaGFlKHQsbXIpO2JyZWFrO2Nhc2UgNDpyaGUodCwodmUoKSxQbikpLHJoZSh0LG1yKTticmVhaztkZWZhdWx0OmZvZSh0LCh2ZSgpLFBuKSksZm9lKHQsbXIpfX1mdW5jdGlvbiBPMW4odCl7c3dpdGNoKHQucS5nKXtjYXNlIDU6ZmFlKHQsKHZlKCksSG4pKSxmYWUodCxCbik7YnJlYWs7Y2FzZSA0OmloZSh0LCh2ZSgpLEhuKSksaWhlKHQsQm4pO2JyZWFrO2RlZmF1bHQ6ZG9lKHQsKHZlKCksSG4pKSxkb2UodCxCbil9fWZ1bmN0aW9uIGQ0KHQsZSl7dmFyIG4scixzO2ZvcihzPW5ldyBDYSxyPXQuS2MoKTtyLk9iKCk7KW49dShyLlBiKCksMzcpLHhfKG4scy5hLDApLHMuYSs9bi5mLmErZSxzLmI9Yi5NYXRoLm1heChzLmIsbi5mLmIpO3JldHVybiBzLmI+MCYmKHMuYis9ZSksc31mdW5jdGlvbiBycSh0LGUpe3ZhciBuLHIscztmb3Iocz1uZXcgQ2Escj10LktjKCk7ci5PYigpOyluPXUoci5QYigpLDM3KSx4XyhuLDAscy5iKSxzLmIrPW4uZi5iK2Uscy5hPWIuTWF0aC5tYXgocy5hLG4uZi5hKTtyZXR1cm4gcy5hPjAmJihzLmErPWUpLHN9ZnVuY3Rpb24gcXNlKHQpe3ZhciBlLG4scjtmb3Iocj13aSxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTApLFVzKGUsKGFlKCksVGMpKSYmKHI9Yi5NYXRoLm1pbihyLHUoUShlLFRjKSwxOSkuYSkpO3JldHVybiByfWZ1bmN0aW9uIEhzZSh0LGUpe3ZhciBuLHI7aWYoZS5sZW5ndGg9PTApcmV0dXJuIDA7Zm9yKG49Y3J0KHQuYSxlWzBdLCh2ZSgpLEJuKSksbis9Y3J0KHQuYSxlW2UubGVuZ3RoLTFdLEhuKSxyPTA7cjxlLmxlbmd0aDtyKyspbis9YmduKHQscixlKTtyZXR1cm4gbn1mdW5jdGlvbiBWc2UoKXttXygpLHRoaXMuYz1uZXcgaGUsdGhpcy5pPW5ldyBoZSx0aGlzLmU9bmV3IE8wLHRoaXMuZj1uZXcgTzAsdGhpcy5nPW5ldyBPMCx0aGlzLmo9bmV3IGhlLHRoaXMuYT1uZXcgaGUsdGhpcy5iPW5ldyBfcix0aGlzLms9bmV3IF9yfWZ1bmN0aW9uIExzdCh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT02P3QuQ2IuaWgodCw1LGkxLGUpOihyPW5vKHUoeW4oKG49dShEbih0LDE2KSwyNiksbnx8dC56aCgpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gUDFuKHQpe0k4KCk7dmFyIGU9dC5lO2lmKGUmJmUuc3RhY2spe3ZhciBuPWUuc3RhY2sscj1lK2AKYDtyZXR1cm4gbi5zdWJzdHJpbmcoMCxyLmxlbmd0aCk9PXImJihuPW4uc3Vic3RyaW5nKHIubGVuZ3RoKSksbi5zcGxpdChgCmApfXJldHVybltdfWZ1bmN0aW9uIEYxbih0KXt2YXIgZTtyZXR1cm4gZT0oc25lKCksamdlKSxlW3Q+Pj4yOF18ZVt0Pj4yNCYxNV08PDR8ZVt0Pj4yMCYxNV08PDh8ZVt0Pj4xNiYxNV08PDEyfGVbdD4+MTImMTVdPDwxNnxlW3Q+PjgmMTVdPDwyMHxlW3Q+PjQmMTVdPDwyNHxlW3QmMTVdPDwyOH1mdW5jdGlvbiBHc2UodCl7dmFyIGUsbixyO3QuYj09dC5jJiYocj10LmEubGVuZ3RoLG49RHl0KGIuTWF0aC5tYXgoOCxyKSk8PDEsdC5iIT0wPyhlPWZmKHQuYSxuKSxkbmUodCxlLHIpLHQuYT1lLHQuYj0wKTpmcXQodC5hLG4pLHQuYz1yKX1mdW5jdGlvbiBOMW4odCxlKXt2YXIgbjtyZXR1cm4gbj10LmIsbi5YZSgodWkoKSxkbCkpP24uSGYoKT09KHZlKCksQm4pPy1uLnJmKCkuYS1YdCh5ZShuLldlKGRsKSkpOmUrWHQoeWUobi5XZShkbCkpKTpuLkhmKCk9PSh2ZSgpLEJuKT8tbi5yZigpLmE6ZX1mdW5jdGlvbiBySSh0KXt2YXIgZTtyZXR1cm4gdC5iLmMubGVuZ3RoIT0wJiZ1KE5lKHQuYiwwKSw3MCkuYT91KE5lKHQuYiwwKSw3MCkuYTooZT1ncnQodCksZT8/IiIrKHQuYz9Sbyh0LmMuYSx0LDApOi0xKSl9ZnVuY3Rpb24gaXEodCl7dmFyIGU7cmV0dXJuIHQuZi5jLmxlbmd0aCE9MCYmdShOZSh0LmYsMCksNzApLmE/dShOZSh0LmYsMCksNzApLmE6KGU9Z3J0KHQpLGU/PyIiKyh0Lmk/Um8odC5pLmosdCwwKTotMSkpfWZ1bmN0aW9uIEIxbih0LGUpe3ZhciBuLHI7aWYoZTwwfHxlPj10LmdjKCkpcmV0dXJuIG51bGw7Zm9yKG49ZTtuPHQuZ2MoKTsrK24paWYocj11KHQuWGIobiksMTI4KSxuPT10LmdjKCktMXx8IXIubylyZXR1cm4gbmV3IGZhKHBlKG4pLHIpO3JldHVybiBudWxsfWZ1bmN0aW9uIFIxbih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobz10LmMsZD1uP2U6dCxyPW4/dDplLHM9ZC5wKzE7czxyLnA7KytzKWlmKGg9dShOZShvLmEscyksMTApLCEoaC5rPT0oVm4oKSx6MSl8fGZkbihoKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUTN0KHQpe3ZhciBlLG4scixzLG87Zm9yKG89MCxzPUNzLHI9MCxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTg3KSxvKz1lLnIrKHI+MD90LmM6MCkscz1iLk1hdGgubWF4KHMsZS5kKSwrK3I7dC5lPW8sdC5iPXN9ZnVuY3Rpb24gajFuKHQpe3ZhciBlLG47aWYoIXQuYilmb3IodC5iPUQkKHUodC5mLDExOCkuQWcoKS5pKSxuPW5ldyBucih1KHQuZiwxMTgpLkFnKCkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwxMzcpLGxlKHQuYixuZXcgZ2V0KGUpKTtyZXR1cm4gdC5ifWZ1bmN0aW9uICQxbih0LGUpe3ZhciBuLHIscztpZihlLmRjKCkpcmV0dXJuIHk4KCkseTgoKSxwUDtmb3Iobj1uZXcgWVd0KHQsZS5nYygpKSxzPW5ldyBucih0KTtzLmUhPXMuaS5nYygpOylyPWRyKHMpLGUuSGMocikmJkRyKG4scik7cmV0dXJuIG59ZnVuY3Rpb24gWjN0KHQsZSxuLHIpe3JldHVybiBlPT0wP3I/KCF0Lm8mJih0Lm89bmV3IF9sKChKYygpLFNiKSxIdix0LDApKSx0Lm8pOighdC5vJiYodC5vPW5ldyBfbCgoSmMoKSxTYiksSHYsdCwwKSksd0QodC5vKSk6WHoodCxlLG4scil9ZnVuY3Rpb24gTXN0KHQpe3ZhciBlLG47aWYodC5yYilmb3IoZT0wLG49dC5yYi5pO2U8bjsrK2Upek0oQXQodC5yYixlKSk7aWYodC52Yilmb3IoZT0wLG49dC52Yi5pO2U8bjsrK2Upek0oQXQodC52YixlKSk7QzkoKCR1KCkseWEpLHQpLHQuQmJ8PTF9ZnVuY3Rpb24gTmkodCxlLG4scixzLG8saCxkLHYsayxDLE0saixIKXtyZXR1cm4geG9lKHQsZSxyLG51bGwscyxvLGgsZCx2LGssaiwhMCxIKSxjM3QodCxDKSxfdCh0LkNiLDg4KSYmZ3koc2wodSh0LkNiLDg4KSksMiksbiYmY3l0KHQsbiksdTN0KHQsTSksdH1mdW5jdGlvbiB6MW4odCl7dmFyIGUsbjtpZih0PT1udWxsKXJldHVybiBudWxsO249MDt0cnl7bj1xbCh0LFNhLHdpKSZ5c31jYXRjaChyKXtpZihyPVdpKHIpLF90KHIsMTI3KSllPUskKHQpLG49ZVswXTtlbHNlIHRocm93IGl0KHIpfXJldHVybiBCRChuKX1mdW5jdGlvbiBxMW4odCl7dmFyIGUsbjtpZih0PT1udWxsKXJldHVybiBudWxsO249MDt0cnl7bj1xbCh0LFNhLHdpKSZ5c31jYXRjaChyKXtpZihyPVdpKHIpLF90KHIsMTI3KSllPUskKHQpLG49ZVswXTtlbHNlIHRocm93IGl0KHIpfXJldHVybiBCRChuKX1mdW5jdGlvbiBIMW4odCxlKXt2YXIgbixyLHM7cmV0dXJuIHM9dC5oLWUuaCxzPDB8fChuPXQubC1lLmwscj10Lm0tZS5tKyhuPj4yMikscys9cj4+MjIsczwwKT8hMToodC5sPW4maGwsdC5tPXImaGwsdC5oPXMmWjAsITApfWZ1bmN0aW9uIFYxbih0LGUsbixyLHMsbyxoKXt2YXIgZCx2O3JldHVybiEoZS5BZSgpJiYodj10LmEudWUobixyKSx2PDB8fCFzJiZ2PT0wKXx8ZS5CZSgpJiYoZD10LmEudWUobixvKSxkPjB8fCFoJiZkPT0wKSl9ZnVuY3Rpb24gRzFuKHQsZSl7b0UoKTt2YXIgbjtpZihuPXQuai5nLWUuai5nLG4hPTApcmV0dXJuIDA7c3dpdGNoKHQuai5nKXtjYXNlIDI6cmV0dXJuIEppdChlLF9UdCktSml0KHQsX1R0KTtjYXNlIDQ6cmV0dXJuIEppdCh0LENUdCktSml0KGUsQ1R0KX1yZXR1cm4gMH1mdW5jdGlvbiBVMW4odCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBPbHQ7Y2FzZSAxOnJldHVybiBQbHQ7Y2FzZSAyOnJldHVybiBGbHQ7Y2FzZSAzOnJldHVybiBObHQ7Y2FzZSA0OnJldHVybiBVVjtjYXNlIDU6cmV0dXJuIEJsdDtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBfbyh0LGUsbil7dmFyIHIscztyZXR1cm4gcj0ocz1uZXcgc2V0LGIyKHMsZSksUWMocyxuKSxEcigoIXQuYyYmKHQuYz1uZXcgZmUoVnYsdCwxMiwxMCkpLHQuYykscykscyksUmcociwwKSxyeShyLDEpLHFnKHIsITApLHpnKHIsITApLHJ9ZnVuY3Rpb24gbDYodCxlKXt2YXIgbixyO2lmKGU+PXQuaSl0aHJvdyBpdChuZXcgbm50KGUsdC5pKSk7cmV0dXJuKyt0Lmosbj10LmdbZV0scj10LmktZS0xLHI+MCYmRGModC5nLGUrMSx0LmcsZSxyKSx0cyh0LmcsLS10LmksbnVsbCksdC5maShlLG4pLHQuY2koKSxufWZ1bmN0aW9uIFVzZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT0xNz90LkNiLmloKHQsMjEsVWgsZSk6KHI9bm8odSh5bigobj11KERuKHQsMTYpLDI2KSxufHx0LnpoKCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBXMW4odCl7dmFyIGUsbixyLHM7Zm9yKHduKCksWnModC5jLHQuYSkscz1uZXcgUyh0LmMpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPUoocyksbj1uZXcgUyh0LmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDY3OSksZS5LZShyKX1mdW5jdGlvbiBZMW4odCl7dmFyIGUsbixyLHM7Zm9yKHduKCksWnModC5jLHQuYSkscz1uZXcgUyh0LmMpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPUoocyksbj1uZXcgUyh0LmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDM2OSksZS5LZShyKX1mdW5jdGlvbiBLMW4odCl7dmFyIGUsbixyLHMsbztmb3Iocz13aSxvPW51bGwscj1uZXcgUyh0LmQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIxMyksbi5kLmpebi5lLmomJihlPW4uZS5lLW4uZC5lLW4uYSxlPHMmJihzPWUsbz1uKSk7cmV0dXJuIG99ZnVuY3Rpb24gSjN0KCl7SjN0PVosX2JlPW5ldyBtbih2NnQsKE5uKCksITEpKSxFYmU9bmV3IG1uKG02dCwxMDApLFQ3dD0ocTkoKSxpbHQpLFRiZT1uZXcgbW4oeTZ0LFQ3dCksQ2JlPW5ldyBtbih4NnQsRWQpLFNiZT1uZXcgbW4oazZ0LHBlKHdpKSl9ZnVuY3Rpb24gV3NlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO2ZvcihrPTAscz10LmFbZV0sbz0wLGg9cy5sZW5ndGg7bzxoOysrbylmb3Iocj1zW29dLEM9dF8ocixuKSx2PUMuS2MoKTt2Lk9iKCk7KWQ9dSh2LlBiKCksMTEpLGtpKHQuZixkLHBlKGsrKykpfWZ1bmN0aW9uIFgxbih0LGUsbil7dmFyIHIscyxvLGg7aWYobilmb3Iocz1uLmEubGVuZ3RoLHI9bmV3IGUyKHMpLGg9KHIuYi1yLmEpKnIuYzwwPyhGcCgpLEliKTpuZXcganAocik7aC5PYigpOylvPXUoaC5QYigpLDE5KSxsbih0LGUsZjYoSm0obixvLmEpKSl9ZnVuY3Rpb24gUTFuKHQsZSxuKXt2YXIgcixzLG8saDtpZihuKWZvcihzPW4uYS5sZW5ndGgscj1uZXcgZTIocyksaD0oci5iLXIuYSkqci5jPDA/KEZwKCksSWIpOm5ldyBqcChyKTtoLk9iKCk7KW89dShoLlBiKCksMTkpLGxuKHQsZSxmNihKbShuLG8uYSkpKX1mdW5jdGlvbiB0NHQodCl7bmIoKTt2YXIgZTtyZXR1cm4gZT11KGVJKHF4KHQuayksTnQoWGEseGMsNjEsMiwwLDEpKSwxMjIpLCQ4KGUsMCxlLmxlbmd0aCxudWxsKSxlWzBdPT0odmUoKSxQbikmJmVbMV09PUJuJiYodHMoZSwwLEJuKSx0cyhlLDEsUG4pKSxlfWZ1bmN0aW9uIFlzZSh0LGUsbil7dmFyIHIscyxvO3JldHVybiBzPU53bih0LGUsbiksbz16NXQodCxzKSx0aXQodC5iKSxJcnQodCxlLG4pLHduKCksWnMocyxuZXcgSSR0KHQpKSxyPXo1dCh0LHMpLHRpdCh0LmIpLElydCh0LG4sZSksbmV3IGZhKHBlKG8pLHBlKHIpKX1mdW5jdGlvbiBLc2UoKXtLc2U9WixObWU9YmkobmV3IFZzLChXYSgpLElvKSwocm8oKSxwUykpLF9HPW5ldyBQcygibGluZWFyU2VnbWVudHMuaW5wdXRQcmlvIixwZSgwKSksU0c9bmV3IFBzKCJsaW5lYXJTZWdtZW50cy5vdXRwdXRQcmlvIixwZSgwKSl9ZnVuY3Rpb24gd0UoKXt3RT1aLEFHPW5ldyByaigiUDFfVFJFRUlGSUNBVElPTiIsMCksUlM9bmV3IHJqKCJQMl9OT0RFX09SREVSSU5HIiwxKSwkTz1uZXcgcmooIlAzX05PREVfUExBQ0VNRU5UIiwyKSxqUz1uZXcgcmooIlA0X0VER0VfUk9VVElORyIsMyl9ZnVuY3Rpb24gdXkoKXt1eT1aLFF5ZT0odWkoKSxZNiksWnllPVcyLFd5ZT1HMixZeWU9YzUsS3llPXhiLFV5ZT1vNSxMX3Q9dFAsWHllPVF5LFdodD0oRTV0KCksanllKSxZaHQ9JHllLE1fdD16eWUsQkc9cXllLFJHPUh5ZSxxTz1WeWUsRF90PUd5ZX1mdW5jdGlvbiB6bCgpe3psPVosclA9bmV3IGFqKCJVTktOT1dOIiwwKSxmMD1uZXcgYWooIkFCT1ZFIiwxKSxrYj1uZXcgYWooIkJFTE9XIiwyKSxuUD1uZXcgYWooIklOTElORSIsMyksbmV3IFBzKCJvcmcuZWNsaXBzZS5lbGsubGFiZWxTaWRlIixyUCl9ZnVuY3Rpb24gWHNlKHQsZSl7dmFyIG47aWYodC5uaSgpJiZlIT1udWxsKXtmb3Iobj0wO248dC5pOysrbilpZih5aShlLHQuZ1tuXSkpcmV0dXJuIG59ZWxzZSBmb3Iobj0wO248dC5pOysrbilpZihWdCh0Lmdbbl0pPT09VnQoZSkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gWjFuKHQsZSxuKXt2YXIgcixzO3JldHVybiBlLmM9PShzbygpLG51KSYmbi5jPT10bD8tMTplLmM9PXRsJiZuLmM9PW51PzE6KHI9enJlKGUuYSx0LmEpLHM9enJlKG4uYSx0LmEpLGUuYz09bnU/cy1yOnItcyl9ZnVuY3Rpb24gbHkodCxlLG4pe2lmKG4mJihlPDB8fGU+bi5hLmMubGVuZ3RoKSl0aHJvdyBpdChuZXcgRm4oImluZGV4IG11c3QgYmUgPj0gMCBhbmQgPD0gbGF5ZXIgbm9kZSBjb3VudCIpKTt0LmMmJm11KHQuYy5hLHQpLHQuYz1uLG4mJkhtKG4uYSxlLHQpfWZ1bmN0aW9uIFFzZSh0LGUpe3ZhciBuLHIscztmb3Iocj1uZXcgYXIobHIoVTAodCkuYS5LYygpLG5ldyB6KSk7enIocik7KXJldHVybiBuPXUoTXIociksMTcpLHM9dShlLktiKG4pLDEwKSxuZXcgV2soTHIocy5uLmIrcy5vLmIvMikpO3JldHVybiBQQygpLFBDKCksQ3V0fWZ1bmN0aW9uIFpzZSh0LGUpe3RoaXMuYz1uZXcgX3IsdGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5kPXUoUSh0LChhZSgpLFE0KSksMzA0KSxWdChRKHQsKFRlKCksaDl0KSkpPT09VnQoKHhEKCksV1YpKT90aGlzLmU9bmV3IExxdDp0aGlzLmU9bmV3IEFxdH1mdW5jdGlvbiBKMW4odCxlKXt2YXIgbixyLHMsbztmb3Iobz0wLHI9bmV3IFModCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMzMpLG8rPWIuTWF0aC5wb3cobi5nKm4uZi1lLDIpO3JldHVybiBzPWIuTWF0aC5zcXJ0KG8vKHQuYy5sZW5ndGgtMSkpLHN9ZnVuY3Rpb24gbF8odCxlKXt2YXIgbixyO3JldHVybiByPW51bGwsdC5YZSgodWkoKSxLNikpJiYobj11KHQuV2UoSzYpLDk0KSxuLlhlKGUpJiYocj1uLldlKGUpKSkscj09bnVsbCYmdC55ZigpJiYocj10LnlmKCkuV2UoZSkpLHI9PW51bGwmJihyPUllKGUpKSxyfWZ1bmN0aW9uIERzdCh0LGUpe3ZhciBuLHI7bj10LlpjKGUpO3RyeXtyZXR1cm4gcj1uLlBiKCksbi5RYigpLHJ9Y2F0Y2gocyl7dGhyb3cgcz1XaShzKSxfdChzLDEwOSk/aXQobmV3IHlvKCJDYW4ndCByZW1vdmUgZWxlbWVudCAiK2UpKTppdChzKX19ZnVuY3Rpb24gdGRuKHQsZSl7dmFyIG4scixzO2lmKHI9bmV3IEJSLHM9bmV3IE15dChyLnEuZ2V0RnVsbFllYXIoKS1hYixyLnEuZ2V0TW9udGgoKSxyLnEuZ2V0RGF0ZSgpKSxuPWUzbih0LGUscyksbj09MHx8bjxlLmxlbmd0aCl0aHJvdyBpdChuZXcgRm4oZSkpO3JldHVybiBzfWZ1bmN0aW9uIGU0dCh0LGUpe3ZhciBuLHIscztmb3IoT24oZSkscTJ0KGUhPXQpLHM9dC5iLmMubGVuZ3RoLHI9ZS5LYygpO3IuT2IoKTspbj1yLlBiKCksbGUodC5iLE9uKG4pKTtyZXR1cm4gcyE9dC5iLmMubGVuZ3RoPyh6eXQodCwwKSwhMCk6ITF9ZnVuY3Rpb24gaUkoKXtpST1aLEE3dD0odWkoKSxLRyksbmV3IGVvKGdmdCwoTm4oKSwhMCkpLExiZT1HMixNYmU9YzUsRGJlPXhiLEFiZT1vNSxNN3Q9dFAsSWJlPVF5LFM3dD0oSjN0KCksX2JlKSxDN3Q9VGJlLF83dD1DYmUsTDd0PVNiZSx2Vj1FYmV9ZnVuY3Rpb24gZWRuKHQsZSl7aWYoZT09dC5jKXJldHVybiB0LmQ7aWYoZT09dC5kKXJldHVybiB0LmM7dGhyb3cgaXQobmV3IEZuKCIncG9ydCcgbXVzdCBiZSBlaXRoZXIgdGhlIHNvdXJjZSBwb3J0IG9yIHRhcmdldCBwb3J0IG9mIHRoZSBlZGdlLiIpKX1mdW5jdGlvbiBuZG4odCxlLG4pe3ZhciByLHM7c3dpdGNoKHM9dC5vLHI9dC5kLGUuZyl7Y2FzZSAxOnJldHVybi1yLmQtbjtjYXNlIDM6cmV0dXJuIHMuYityLmErbjtjYXNlIDI6cmV0dXJuIHMuYStyLmMrbjtjYXNlIDQ6cmV0dXJuLXIuYi1uO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIG40dCh0LGUsbixyKXt2YXIgcyxvLGgsZDtmb3IoRW8oZSx1KHIuWGIoMCksMjkpKSxkPXIuYmQoMSxyLmdjKCkpLG89dShuLktiKGUpLDIwKS5LYygpO28uT2IoKTspcz11KG8uUGIoKSwxNyksaD1zLmMuaT09ZT9zLmQuaTpzLmMuaSxuNHQodCxoLG4sZCl9ZnVuY3Rpb24gSnNlKHQpe3ZhciBlO3JldHVybiBlPW5ldyBfcixVcyh0LChhZSgpLFhsdCkpP3UoUSh0LFhsdCksODMpOihscyhSaShuZXcgVG4obnVsbCxuZXcgX24odC5qLDE2KSksbmV3IHBYKSxuZXcga3goZSkpLEp0KHQsWGx0LGUpLGUpfWZ1bmN0aW9uIHI0dCh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT02P3QuQ2IuaWgodCw2LFlzLGUpOihyPW5vKHUoeW4oKG49dShEbih0LDE2KSwyNiksbnx8KEpjKCksYVUpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gaTR0KHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTc/dC5DYi5paCh0LDEsbFAsZSk6KHI9bm8odSh5bigobj11KERuKHQsMTYpLDI2KSxufHwoSmMoKSxHQXQpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gczR0KHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTk/dC5DYi5paCh0LDkscnMsZSk6KHI9bm8odSh5bigobj11KERuKHQsMTYpLDI2KSxufHwoSmMoKSxXQXQpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gdGFlKHQsZSl7dmFyIG4scjtyZXR1cm4gdC5EYj4+MTY9PTU/dC5DYi5paCh0LDkscFUsZSk6KHI9bm8odSh5bigobj11KERuKHQsMTYpLDI2KSxufHwoZG4oKSxvcCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBhNHQodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09Mz90LkNiLmloKHQsMCxmUCxlKToocj1ubyh1KHluKChuPXUoRG4odCwxNiksMjYpLG58fChkbigpLGFwKSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIGVhZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT03P3QuQ2IuaWgodCw2LGkxLGUpOihyPW5vKHUoeW4oKG49dShEbih0LDE2KSwyNiksbnx8KGRuKCksdXApKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gbmFlKCl7dGhpcy5hPW5ldyBvQix0aGlzLmc9bmV3IHRxLHRoaXMuaj1uZXcgdHEsdGhpcy5iPW5ldyBfcix0aGlzLmQ9bmV3IHRxLHRoaXMuaT1uZXcgdHEsdGhpcy5rPW5ldyBfcix0aGlzLmM9bmV3IF9yLHRoaXMuZT1uZXcgX3IsdGhpcy5mPW5ldyBfcn1mdW5jdGlvbiByZG4odCxlLG4pe3ZhciByLHMsbztmb3IobjwwJiYobj0wKSxvPXQuaSxzPW47czxvO3MrKylpZihyPUF0KHQscyksZT09bnVsbCl7aWYocj09bnVsbClyZXR1cm4gc31lbHNlIGlmKFZ0KGUpPT09VnQocil8fHlpKGUscikpcmV0dXJuIHM7cmV0dXJuLTF9ZnVuY3Rpb24gaWRuKHQsZSl7dmFyIG4scjtyZXR1cm4gbj1lLkhoKHQuYSksbj8ocj1CcihYZigoIW4uYiYmKG4uYj1uZXcga2woKGRuKCksUWEpLGNjLG4pKSxuLmIpLFZIKSksaG4oc08scik/QzkodCxSbChlLkhqKCkpKTpyKTpudWxsfWZ1bmN0aW9uIHZFKHQsZSl7dmFyIG4scjtpZihlKXtpZihlPT10KXJldHVybiEwO2ZvcihuPTAscj11KGUsNDkpLmVoKCk7ciYmciE9ZTtyPXIuZWgoKSl7aWYoKytuPnZvdClyZXR1cm4gdkUodCxyKTtpZihyPT10KXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBzZG4odCl7c3dpdGNoKENqKCksdC5xLmcpe2Nhc2UgNTokb2UodCwodmUoKSxQbikpLCRvZSh0LG1yKTticmVhaztjYXNlIDQ6RmNlKHQsKHZlKCksUG4pKSxGY2UodCxtcik7YnJlYWs7ZGVmYXVsdDpGaGUodCwodmUoKSxQbikpLEZoZSh0LG1yKX19ZnVuY3Rpb24gYWRuKHQpe3N3aXRjaChDaigpLHQucS5nKXtjYXNlIDU6ZWNlKHQsKHZlKCksSG4pKSxlY2UodCxCbik7YnJlYWs7Y2FzZSA0OmZzZSh0LCh2ZSgpLEhuKSksZnNlKHQsQm4pO2JyZWFrO2RlZmF1bHQ6TmhlKHQsKHZlKCksSG4pKSxOaGUodCxCbil9fWZ1bmN0aW9uIG9kbih0KXt2YXIgZSxuO2U9dShRKHQsKEpmKCkseWJlKSksMTkpLGU/KG49ZS5hLG49PTA/SnQodCwoWXAoKSx3ViksbmV3IFppdCk6SnQodCwoWXAoKSx3ViksbmV3IEYkKG4pKSk6SnQodCwoWXAoKSx3ViksbmV3IEYkKDEpKX1mdW5jdGlvbiBjZG4odCxlKXt2YXIgbjtzd2l0Y2gobj10LmksZS5nKXtjYXNlIDE6cmV0dXJuLSh0Lm4uYit0Lm8uYik7Y2FzZSAyOnJldHVybiB0Lm4uYS1uLm8uYTtjYXNlIDM6cmV0dXJuIHQubi5iLW4uby5iO2Nhc2UgNDpyZXR1cm4tKHQubi5hK3Quby5hKX1yZXR1cm4gMH1mdW5jdGlvbiB1ZG4odCxlKXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIGU9PShkaCgpLGJiKT9CVjpSVjtjYXNlIDE6cmV0dXJuIGU9PShkaCgpLGJiKT9CVjprTztjYXNlIDI6cmV0dXJuIGU9PShkaCgpLGJiKT9rTzpSVjtkZWZhdWx0OnJldHVybiBrT319ZnVuY3Rpb24gc0kodCxlKXt2YXIgbixyLHM7Zm9yKG11KHQuYSxlKSx0LmUtPWUucisodC5hLmMubGVuZ3RoPT0wPzA6dC5jKSxzPVVrdCxyPW5ldyBTKHQuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTg3KSxzPWIuTWF0aC5tYXgocyxuLmQpO3QuYj1zfWZ1bmN0aW9uIG80dCh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT0zP3QuQ2IuaWgodCwxMixycyxlKToocj1ubyh1KHluKChuPXUoRG4odCwxNiksMjYpLG58fChKYygpLFZBdCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBjNHQodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09MTE/dC5DYi5paCh0LDEwLHJzLGUpOihyPW5vKHUoeW4oKG49dShEbih0LDE2KSwyNiksbnx8KEpjKCksVUF0KSksdC5EYj4+MTYpLDE4KSksdC5DYi5paCh0LHIubixyLmYsZSkpfWZ1bmN0aW9uIHJhZSh0LGUpe3ZhciBuLHI7cmV0dXJuIHQuRGI+PjE2PT0xMD90LkNiLmloKHQsMTEsVWgsZSk6KHI9bm8odSh5bigobj11KERuKHQsMTYpLDI2KSxufHwoZG4oKSxjcCkpLHQuRGI+PjE2KSwxOCkpLHQuQ2IuaWgodCxyLm4sci5mLGUpKX1mdW5jdGlvbiBpYWUodCxlKXt2YXIgbixyO3JldHVybiB0LkRiPj4xNj09MTA/dC5DYi5paCh0LDEyLFdoLGUpOihyPW5vKHUoeW4oKG49dShEbih0LDE2KSwyNiksbnx8KGRuKCksaTMpKSx0LkRiPj4xNiksMTgpKSx0LkNiLmloKHQsci5uLHIuZixlKSl9ZnVuY3Rpb24gRGgodCl7dmFyIGU7cmV0dXJuISh0LkJiJjEpJiZ0LnImJnQuci5raCgpJiYoZT11KHQuciw0OSksdC5yPXUoWnAodCxlKSwxMzgpLHQuciE9ZSYmdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsOSw4LGUsdC5yKSkpLHQucn1mdW5jdGlvbiBJc3QodCxlLG4pe3ZhciByO3JldHVybiByPWx0KGN0KGFhLDEpLHZvLDI1LDE1LFtPNHQodCwoS2YoKSxzYyksZSxuKSxPNHQodCxldSxlLG4pLE80dCh0LGFjLGUsbildKSx0LmYmJihyWzBdPWIuTWF0aC5tYXgoclswXSxyWzJdKSxyWzJdPXJbMF0pLHJ9ZnVuY3Rpb24gbGRuKHQsZSl7dmFyIG4scixzO2lmKHM9aTFuKHQsZSkscy5jLmxlbmd0aCE9MClmb3IoWnMocyxuZXcgV0spLG49cy5jLmxlbmd0aCxyPTA7cjxuO3IrKylFRSh0LChBbihyLHMuYy5sZW5ndGgpLHUocy5jW3JdLDI4NikpLE12bih0LHMscikpfWZ1bmN0aW9uIGhkbih0KXt2YXIgZSxuLHIscztmb3Iocz11KEFpKHQuYSwoYjQoKSxqVikpLDE1KS5LYygpO3MuT2IoKTspZm9yKHI9dShzLlBiKCksMTAxKSxuPXF4KHIuaykuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksNjEpLF84KHQscixlLChudigpLHBiKSwxKX1mdW5jdGlvbiBmZG4odCl7dmFyIGUsbjtpZih0Lms9PShWbigpLHRhKSl7Zm9yKG49bmV3IGFyKGxyKFUwKHQpLmEuS2MoKSxuZXcgeikpO3pyKG4pOylpZihlPXUoTXIobiksMTcpLCFHYShlKSYmdC5jPT1wNHQoZSx0KS5jKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGRkbih0KXt2YXIgZSxuO2lmKHQuaz09KFZuKCksdGEpKXtmb3Iobj1uZXcgYXIobHIoVTAodCkuYS5LYygpLG5ldyB6KSk7enIobik7KWlmKGU9dShNcihuKSwxNyksIUdhKGUpJiZlLmMuaS5jPT1lLmQuaS5jKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGdkbih0LGUpe3ZhciBuLHIscyxvO2Zvcih2cihlLCJEdWxsIGVkZ2Ugcm91dGluZyIsMSksbz1laSh0LmIsMCk7by5iIT1vLmQuYzspZm9yKHM9dSh0aShvKSw4Nikscj1laShzLmQsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDE4OCksQWgobi5hKX1mdW5jdGlvbiBwZG4odCxlKXt2YXIgbixyLHMsbyxoO2lmKGUpZm9yKHM9ZS5hLmxlbmd0aCxuPW5ldyBlMihzKSxoPShuLmItbi5hKSpuLmM8MD8oRnAoKSxJYik6bmV3IGpwKG4pO2guT2IoKTspbz11KGguUGIoKSwxOSkscj1QOChlLG8uYSksciYmQWNlKHQscil9ZnVuY3Rpb24gYmRuKCl7VGJ0KCk7dmFyIHQsZTtmb3IoRnhuKChIcCgpLExuKSksU3huKExuKSxNc3QoTG4pLG9MdD0oZG4oKSxXMSksZT1uZXcgUyhiTHQpO2UuYTxlLmMuYy5sZW5ndGg7KXQ9dShKKGUpLDI0MSksUEUodCxXMSxudWxsKTtyZXR1cm4hMH1mdW5jdGlvbiB1NHQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO3JldHVybiB2PXQuaD4+MTksaz1lLmg+PjE5LHYhPWs/ay12OihzPXQuaCxkPWUuaCxzIT1kP3MtZDoocj10Lm0saD1lLm0sciE9aD9yLWg6KG49dC5sLG89ZS5sLG4tbykpKX1mdW5jdGlvbiBzcSgpe3NxPVosWEV0PShDcSgpLFZ1dCksS0V0PW5ldyBtbihReHQsWEV0KSxZRXQ9KFEkKCksSHV0KSxXRXQ9bmV3IG1uKFp4dCxZRXQpLFVFdD0oR3ooKSxxdXQpLEdFdD1uZXcgbW4oSnh0LFVFdCksVkV0PW5ldyBtbih0NnQsKE5uKCksITApKX1mdW5jdGlvbiBoXyh0LGUsbil7dmFyIHIscztyPWUqbixfdCh0LmcsMTQ1KT8ocz1YeCh0KSxzLmYuZD9zLmYuYXx8KHQuZC5hKz1yK0IxKToodC5kLmQtPXIrQjEsdC5kLmErPXIrQjEpKTpfdCh0LmcsMTApJiYodC5kLmQtPXIsdC5kLmErPTIqcil9ZnVuY3Rpb24gc2FlKHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihzPXRbbi5nXSxkPW5ldyBTKGUuZCk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTAxKSxvPWguaSxvJiZvLmk9PW4mJihyPWguZFtuLmddLHNbcl09Yi5NYXRoLm1heChzW3JdLG8uai5iKSl9ZnVuY3Rpb24gd2RuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocj0wLHM9MCxuPTAsaD1uZXcgUyhlLmQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDQ0MyksbnEobykscj1iLk1hdGgubWF4KHIsby5iKSxzKz1vLmQrKG4+MD90Lmc6MCksKytuO2UuYj1yLGUuZT1zfWZ1bmN0aW9uIGFhZSh0KXt2YXIgZSxuLHI7aWYocj10LmIsQVZ0KHQuaSxyLmxlbmd0aCkpe2ZvcihuPXIubGVuZ3RoKjIsdC5iPU50KEx1dCxQSSwzMTcsbiwwLDEpLHQuYz1OdChMdXQsUEksMzE3LG4sMCwxKSx0LmY9bi0xLHQuaT0wLGU9dC5hO2U7ZT1lLmMpZkkodCxlLGUpOysrdC5nfX1mdW5jdGlvbiB2ZG4odCxlLG4scil7dmFyIHMsbyxoLGQ7Zm9yKHM9MDtzPGUubztzKyspZm9yKG89cy1lLmorbixoPTA7aDxlLnA7aCsrKWQ9aC1lLmsrcixmNChlLHMsaCk/bDFuKHQsbyxkKXx8UzFuKHQsbyxkKTpEc2UoZSxzLGgpJiYoU3NlKHQsbyxkKXx8QTFuKHQsbyxkKSl9ZnVuY3Rpb24gbWRuKHQsZSxuKXt2YXIgcjtyPWUuYy5pLHIuaz09KFZuKCksdGEpPyhKdCh0LChhZSgpLHIxKSx1KFEocixyMSksMTEpKSxKdCh0LCRoLHUoUShyLCRoKSwxMSkpKTooSnQodCwoYWUoKSxyMSksZS5jKSxKdCh0LCRoLG4uZCkpfWZ1bmN0aW9uIG1FKHQsZSxuKXtrNCgpO3ZhciByLHMsbyxoLGQsdjtyZXR1cm4gaD1lLzIsbz1uLzIscj1iLk1hdGguYWJzKHQuYSkscz1iLk1hdGguYWJzKHQuYiksZD0xLHY9MSxyPmgmJihkPWgvcikscz5vJiYodj1vL3MpLGZkKHQsYi5NYXRoLm1pbihkLHYpKSx0fWZ1bmN0aW9uIHlkbigpe0RxKCk7dmFyIHQsZTt0cnl7aWYoZT11KG00dCgoUHAoKSxZaCksWkUpLDIwMTQpLGUpcmV0dXJuIGV9Y2F0Y2gobil7aWYobj1XaShuKSxfdChuLDEwMikpdD1uLGF2dCgoUHIoKSx0KSk7ZWxzZSB0aHJvdyBpdChuKX1yZXR1cm4gbmV3IGF4fWZ1bmN0aW9uIHhkbigpe1F0ZSgpO3ZhciB0LGU7dHJ5e2lmKGU9dShtNHQoKFBwKCksWWgpLE8yKSwyMDI0KSxlKXJldHVybiBlfWNhdGNoKG4pe2lmKG49V2kobiksX3QobiwxMDIpKXQ9bixhdnQoKFByKCksdCkpO2Vsc2UgdGhyb3cgaXQobil9cmV0dXJuIG5ldyBfbX1mdW5jdGlvbiBrZG4oKXtEcSgpO3ZhciB0LGU7dHJ5e2lmKGU9dShtNHQoKFBwKCksWWgpLEJoKSwxOTQxKSxlKXJldHVybiBlfWNhdGNoKG4pe2lmKG49V2kobiksX3QobiwxMDIpKXQ9bixhdnQoKFByKCksdCkpO2Vsc2UgdGhyb3cgaXQobil9cmV0dXJuIG5ldyBhSn1mdW5jdGlvbiBFZG4odCxlLG4pe3ZhciByLHM7cmV0dXJuIHM9dC5lLHQuZT1lLHQuRGImNCYmISh0LkRiJjEpJiYocj1uZXcgSnModCwxLDQscyxlKSxuP24uRWkocik6bj1yKSxzIT1lJiYoZT9uPVBFKHQsdnEodCxlKSxuKTpuPVBFKHQsdC5hLG4pKSxufWZ1bmN0aW9uIG9hZSgpe0JSLmNhbGwodGhpcyksdGhpcy5lPS0xLHRoaXMuYT0hMSx0aGlzLnA9U2EsdGhpcy5rPS0xLHRoaXMuYz0tMSx0aGlzLmI9LTEsdGhpcy5nPSExLHRoaXMuZj0tMSx0aGlzLmo9LTEsdGhpcy5uPS0xLHRoaXMuaT0tMSx0aGlzLmQ9LTEsdGhpcy5vPVNhfWZ1bmN0aW9uIFRkbih0LGUpe3ZhciBuLHIscztpZihyPXQuYi5kLmQsdC5hfHwocis9dC5iLmQuYSkscz1lLmIuZC5kLGUuYXx8KHMrPWUuYi5kLmEpLG49TXMocixzKSxuPT0wKXtpZighdC5hJiZlLmEpcmV0dXJuLTE7aWYoIWUuYSYmdC5hKXJldHVybiAxfXJldHVybiBufWZ1bmN0aW9uIENkbih0LGUpe3ZhciBuLHIscztpZihyPXQuYi5iLmQsdC5hfHwocis9dC5iLmIuYSkscz1lLmIuYi5kLGUuYXx8KHMrPWUuYi5iLmEpLG49TXMocixzKSxuPT0wKXtpZighdC5hJiZlLmEpcmV0dXJuLTE7aWYoIWUuYSYmdC5hKXJldHVybiAxfXJldHVybiBufWZ1bmN0aW9uIF9kbih0LGUpe3ZhciBuLHIscztpZihyPXQuYi5nLmQsdC5hfHwocis9dC5iLmcuYSkscz1lLmIuZy5kLGUuYXx8KHMrPWUuYi5nLmEpLG49TXMocixzKSxuPT0wKXtpZighdC5hJiZlLmEpcmV0dXJuLTE7aWYoIWUuYSYmdC5hKXJldHVybiAxfXJldHVybiBufWZ1bmN0aW9uIGw0dCgpe2w0dD1aLFBiZT1LdShiaShiaShiaShuZXcgVnMsKFdhKCkscWMpLChybygpLGhUdCkpLHFjLGZUdCksSW8sZFR0KSxJbyx0VHQpLE5iZT1iaShiaShuZXcgVnMscWMsVzd0KSxxYyxlVHQpLEZiZT1LdShuZXcgVnMsSW8sclR0KX1mdW5jdGlvbiBTZG4odCl7dmFyIGUsbixyLHMsbztmb3IoZT11KFEodCwoYWUoKSxrUykpLDgzKSxvPXQubixyPWUuQ2MoKS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwzMDYpLHM9bi5pLHMuYys9by5hLHMuZCs9by5iLG4uYz9FdWUobik6VHVlKG4pO0p0KHQsa1MsbnVsbCl9ZnVuY3Rpb24gQWRuKHQsZSxuKXt2YXIgcixzO3N3aXRjaChzPXQuYixyPXMuZCxlLmcpe2Nhc2UgMTpyZXR1cm4tci5kLW47Y2FzZSAyOnJldHVybiBzLm8uYStyLmMrbjtjYXNlIDM6cmV0dXJuIHMuby5iK3IuYStuO2Nhc2UgNDpyZXR1cm4tci5iLW47ZGVmYXVsdDpyZXR1cm4tMX19ZnVuY3Rpb24gTGRuKHQpe3ZhciBlLG4scixzLG87aWYocj0wLHM9VkUsdC5iKWZvcihlPTA7ZTwzNjA7ZSsrKW49ZSouMDE3NDUzMjkyNTE5OTQzMjk1LHR4dCh0LHQuZCwwLDAsTzQsbiksbz10LmIuaWcodC5kKSxvPHMmJihyPW4scz1vKTt0eHQodCx0LmQsMCwwLE80LHIpfWZ1bmN0aW9uIE1kbih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPW5ldyBfcixlLmU9bnVsbCxlLmY9bnVsbCxyPW5ldyBTKGUuaSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNjUpLHM9dSh0cih0Lmcsbi5hKSw0Niksbi5hPWUkKG4uYiksa2kobyxuLmEscyk7dC5nPW99ZnVuY3Rpb24gRGRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7Zm9yKHM9ZS10LmUsbz1zL3QuZC5jLmxlbmd0aCxoPTAsdj1uZXcgUyh0LmQpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDQ0Mykscj10LmItZC5iK24sUGllKGQsZC5lK2gqbyxkLmYpLGYxbihkLG8sciksKytofWZ1bmN0aW9uIGNhZSh0KXt2YXIgZTtpZih0LmYucWooKSx0LmIhPS0xKXtpZigrK3QuYixlPXQuZi5kW3QuYV0sdC5iPGUuaSlyZXR1cm47Kyt0LmF9Zm9yKDt0LmE8dC5mLmQubGVuZ3RoOysrdC5hKWlmKGU9dC5mLmRbdC5hXSxlJiZlLmkhPTApe3QuYj0wO3JldHVybn10LmI9LTF9ZnVuY3Rpb24gSWRuKHQsZSl7dmFyIG4scixzO2ZvcihzPWUuYy5sZW5ndGgsbj1EcG4odCxzPT0wPyIiOihBbigwLGUuYy5sZW5ndGgpLEJyKGUuY1swXSkpKSxyPTE7cjxzJiZuOysrciluPXUobiw0OSkub2goKEFuKHIsZS5jLmxlbmd0aCksQnIoZS5jW3JdKSkpO3JldHVybiBufWZ1bmN0aW9uIHVhZSh0LGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTApLHQuY1tuLmMucF1bbi5wXS5hPVp3dCh0LmkpLHQuY1tuLmMucF1bbi5wXS5kPVh0KHQuY1tuLmMucF1bbi5wXS5hKSx0LmNbbi5jLnBdW24ucF0uYj0xfWZ1bmN0aW9uIE9kbih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPTAscj1uZXcgUyh0KTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxNTcpLG8rPWIuTWF0aC5wb3coUnUobikqRWwobiktZSwyKTtyZXR1cm4gcz1iLk1hdGguc3FydChvLyh0LmMubGVuZ3RoLTEpKSxzfWZ1bmN0aW9uIGxhZSh0LGUsbixyKXt2YXIgcyxvLGg7cmV0dXJuIG89YW1uKHQsZSxuLHIpLGg9WTV0KHQsbykscXN0KHQsZSxuLHIpLHRpdCh0LmIpLHduKCksWnMobyxuZXcgTyR0KHQpKSxzPVk1dCh0LG8pLHFzdCh0LG4sZSxyKSx0aXQodC5iKSxuZXcgZmEocGUoaCkscGUocykpfWZ1bmN0aW9uIFBkbih0LGUsbil7dmFyIHIscztmb3IodnIobiwiSW50ZXJhY3RpdmUgbm9kZSBwbGFjZW1lbnQiLDEpLHQuYT11KFEoZSwoYWUoKSxRNCkpLDMwNCkscz1uZXcgUyhlLmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDI5KSx2dm4odCxyKTtvcihuKX1mdW5jdGlvbiBGZG4odCxlKXt2YXIgbjt2cihlLCJHZW5lcmFsIENvbXBhY3RvciIsMSksZS5uJiZ0JiZnZihlLHBmKHQpLChTbCgpLFFsKSksbj1BaG4odShxZSh0LCh1eSgpLFlodCkpLDM4MCkpLG4uaGcodCksZS5uJiZ0JiZnZihlLHBmKHQpLChTbCgpLFFsKSl9ZnVuY3Rpb24gTmRuKHQsZSxuKXt2YXIgcixzO2Zvcih2aih0LHQuaitlLHQuaytuKSxzPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgQXMoR2gsdCw1KSksdC5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDQ2OSksdTJ0KHIsci5hK2Usci5iK24pO3dqKHQsdC5iK2UsdC5jK24pfWZ1bmN0aW9uIGg0dCh0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSA3OnJldHVybiF0LmUmJih0LmU9bmV3IENuKFlzLHQsNyw0KSksWmModC5lLGUscik7Y2FzZSA4OnJldHVybiF0LmQmJih0LmQ9bmV3IENuKFlzLHQsOCw1KSksWmModC5kLGUscil9cmV0dXJuIGpzdCh0LGUsbixyKX1mdW5jdGlvbiBmNHQodCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgNzpyZXR1cm4hdC5lJiYodC5lPW5ldyBDbihZcyx0LDcsNCkpLEJhKHQuZSxlLHIpO2Nhc2UgODpyZXR1cm4hdC5kJiYodC5kPW5ldyBDbihZcyx0LDgsNSkpLEJhKHQuZCxlLHIpfXJldHVybiBFaXQodCxlLG4scil9ZnVuY3Rpb24gQmRuKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKG4pZm9yKG89bi5hLmxlbmd0aCxyPW5ldyBlMihvKSxkPShyLmItci5hKSpyLmM8MD8oRnAoKSxJYik6bmV3IGpwKHIpO2QuT2IoKTspaD11KGQuUGIoKSwxOSkscz1QOChuLGguYSkscyYmam9lKHQscyxlKX1mdW5jdGlvbiBhcSh0LGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gdC5xaigpLG89ZT09bnVsbD8wOkhpKGUpLHQuZj4wJiYoaD0obyZ3aSkldC5kLmxlbmd0aCxzPWw1dCh0LGgsbyxlKSxzKT8oZD1zLmVkKG4pLGQpOihyPXQudGoobyxlLG4pLHQuYy5GYyhyKSxudWxsKX1mdW5jdGlvbiBkNHQodCxlKXt2YXIgbixyLHMsbztzd2l0Y2goJGcodCxlKS5faygpKXtjYXNlIDM6Y2FzZSAyOntmb3Iobj1UNChlKSxzPTAsbz1uLmk7czxvOysrcylpZihyPXUoQXQobixzKSwzNCksSHcoVG8odCxyKSk9PTUpcmV0dXJuIHI7YnJlYWt9fXJldHVybiBudWxsfWZ1bmN0aW9uIFJkbih0KXt2YXIgZSxuLHIscyxvO2lmKEFWdCh0LmYsdC5iLmxlbmd0aCkpZm9yKHI9TnQoSWdlLFBJLDMzMCx0LmIubGVuZ3RoKjIsMCwxKSx0LmI9cixzPXIubGVuZ3RoLTEsbj10LmE7biE9dDtuPW4uUmQoKSlvPXUobiwzMzApLGU9by5kJnMsby5hPXJbZV0scltlXT1vfWZ1bmN0aW9uIGhhZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihvPTAscz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxvPWIuTWF0aC5tYXgobyxyLmUuYStyLmIucmYoKS5hKTtuPXUocG8odC5iLGUpLDEyNCksbi5uLmI9MCxuLmEuYT1vfWZ1bmN0aW9uIGZhZSh0LGUpe3ZhciBuLHIscyxvO2ZvcihuPTAsbz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMTExKSxuPWIuTWF0aC5tYXgobixzLmUuYitzLmIucmYoKS5iKTtyPXUocG8odC5iLGUpLDEyNCksci5uLmQ9MCxyLmEuYj1ufWZ1bmN0aW9uIGpkbih0KXt2YXIgZSxuO3JldHVybiBuPXUoUSh0LChhZSgpLFZjKSksMjEpLGU9cGooWm1lKSxuLkhjKChvbygpLFc0KSkmJiRsKGUsZXllKSxuLkhjKHhTKSYmJGwoZSxueWUpLG4uSGModjcpJiYkbChlLEptZSksbi5IYyhtNykmJiRsKGUsdHllKSxlfWZ1bmN0aW9uICRkbih0LGUpe3ZhciBuO3ZyKGUsIkRlbGF1bmF5IHRyaWFuZ3VsYXRpb24iLDEpLG49bmV3IGhlLHh1KHQuaSxuZXcgZXp0KG4pKSxqZShSZShRKHQsKFo4KCksZlMpKSkpLHQuZT9VYSh0LmUsUWhlKG4pKTp0LmU9UWhlKG4pLG9yKGUpfWZ1bmN0aW9uIGc0dCh0KXtpZih0PDApdGhyb3cgaXQobmV3IEZuKCJUaGUgaW5wdXQgbXVzdCBiZSBwb3NpdGl2ZSIpKTtyZXR1cm4gdDxTU3QubGVuZ3RoP1l3KFNTdFt0XSk6Yi5NYXRoLnNxcnQoTzQqdCkqKHlsbih0LHQpL1F5dCgyLjcxODI4MTgyODQ1OTA0NSx0KSl9ZnVuY3Rpb24geUUodCxlKXt2YXIgbjtpZih0Lm5pKCkmJmUhPW51bGwpe2ZvcihuPTA7bjx0Lmk7KytuKWlmKHlpKGUsdC5nW25dKSlyZXR1cm4hMH1lbHNlIGZvcihuPTA7bjx0Lmk7KytuKWlmKFZ0KHQuZ1tuXSk9PT1WdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB6ZG4odCxlKXtpZihlPT1udWxsKXtmb3IoO3QuYS5PYigpOylpZih1KHQuYS5QYigpLDQyKS5kZCgpPT1udWxsKXJldHVybiEwfWVsc2UgZm9yKDt0LmEuT2IoKTspaWYoeWkoZSx1KHQuYS5QYigpLDQyKS5kZCgpKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBxZG4odCxlKXt2YXIgbixyLHM7cmV0dXJuIGU9PT10PyEwOl90KGUsNjY0KT8ocz11KGUsMTk0NyksWWllKChyPXQuZyxyfHwodC5nPW5ldyB5Qyh0KSkpLChuPXMuZyxufHwocy5nPW5ldyB5QyhzKSkpKSk6ITF9ZnVuY3Rpb24gSGRuKHQpe3ZhciBlLG4scixzO2ZvcihlPSJTeiIsbj0iZXoiLHM9Yi5NYXRoLm1pbih0Lmxlbmd0aCw1KSxyPXMtMTtyPj0wO3ItLSlpZihobih0W3JdLmQsZSl8fGhuKHRbcl0uZCxuKSl7dC5sZW5ndGg+PXIrMSYmdC5zcGxpY2UoMCxyKzEpO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGFJKHQsZSl7dmFyIG47cmV0dXJuIEJvKHQpJiZCbyhlKSYmKG49dC9lLEJJPG4mJm48QzIpP248MD9iLk1hdGguY2VpbChuKTpiLk1hdGguZmxvb3Iobik6S3AoeXh0KEJvKHQpP0xoKHQpOnQsQm8oZSk/TGgoZSk6ZSwhMSkpfWZ1bmN0aW9uIHA0dCh0LGUpe2lmKGU9PXQuYy5pKXJldHVybiB0LmQuaTtpZihlPT10LmQuaSlyZXR1cm4gdC5jLmk7dGhyb3cgaXQobmV3IEZuKCInbm9kZScgbXVzdCBlaXRoZXIgYmUgdGhlIHNvdXJjZSBub2RlIG9yIHRhcmdldCBub2RlIG9mIHRoZSBlZGdlLiIpKX1mdW5jdGlvbiBWZG4odCl7dmFyIGUsbixyLHM7aWYocz11KFEodCwoYWUoKSxuQ3QpKSwzNykscyl7Zm9yKHI9bmV3IENhLGU9TmEodC5jLmkpO2UhPXM7KW49ZS5lLGU9TmEobiksam0oTGkoTGkocixuLm4pLGUuYyksZS5kLmIsZS5kLmQpO3JldHVybiByfXJldHVybiB0MmV9ZnVuY3Rpb24gR2RuKHQpe3ZhciBlO2U9dShRKHQsKGFlKCkseDcpKSw0MDMpLGxzKFdvKG5ldyBUbihudWxsLG5ldyBfbihlLmQsMTYpKSxuZXcgbFgpLG5ldyB4eCh0KSksbHMoUmkobmV3IFRuKG51bGwsbmV3IF9uKGUuZCwxNikpLG5ldyBrTiksbmV3IEYzKHQpKX1mdW5jdGlvbiBPc3QodCxlKXt2YXIgbixyLHMsbztmb3Iocz1lP0RzKHQpOmpvKHQpLHI9bmV3IGFyKGxyKHMuYS5LYygpLG5ldyB6KSk7enIocik7KWlmKG49dShNcihyKSwxNyksbz1wNHQobix0KSxvLms9PShWbigpLHRhKSYmby5jIT10LmMpcmV0dXJuIG87cmV0dXJuIG51bGx9ZnVuY3Rpb24gVWRuKHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LnApO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEwKSxlLms9PShWbigpLE9zKSYmKHI9ZS5vLmIsdC5pPWIuTWF0aC5taW4odC5pLHIpLHQuZz1iLk1hdGgubWF4KHQuZyxyKSl9ZnVuY3Rpb24gZGFlKHQsZSxuKXt2YXIgcixzLG87Zm9yKG89bmV3IFMoZSk7by5hPG8uYy5jLmxlbmd0aDspcj11KEoobyksMTApLHQuY1tyLmMucF1bci5wXS5lPSExO2ZvcihzPW5ldyBTKGUpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEwKSxfeHQodCxyLG4pfWZ1bmN0aW9uIFBzdCh0LGUsbil7dmFyIHIscztyPWM0KGUuaixuLnMsbi5jKStjNChuLmUsZS5zLGUuYykscz1jNChuLmosZS5zLGUuYykrYzQoZS5lLG4ucyxuLmMpLHI9PXM/cj4wJiYodC5iKz0yLHQuYSs9cik6KHQuYis9MSx0LmErPWIuTWF0aC5taW4ocixzKSl9ZnVuY3Rpb24gZ2FlKHQsZSl7dmFyIG4scjtpZihyPSExLHJhKGUpJiYocj0hMCxWeCh0LG5ldyBVbShCcihlKSkpKSxyfHxfdChlLDIzNikmJihyPSEwLFZ4KHQsKG49bXd0KHUoZSwyMzYpKSxuZXcgRUMobikpKSksIXIpdGhyb3cgaXQobmV3IGZldChBOHQpKX1mdW5jdGlvbiBXZG4odCxlLG4scil7dmFyIHMsbyxoO3JldHVybiBzPW5ldyB6MCh0LmUsMSwxMCwoaD1lLmMsX3QoaCw4OCk/dShoLDI2KTooZG4oKSxLaCkpLChvPW4uYyxfdChvLDg4KT91KG8sMjYpOihkbigpLEtoKSksSGcodCxlKSwhMSkscj9yLkVpKHMpOnI9cyxyfWZ1bmN0aW9uIGI0dCh0KXt2YXIgZSxuO3N3aXRjaCh1KFEoTmEodCksKFRlKCkscjl0KSksNDIwKS5nKXtjYXNlIDA6cmV0dXJuIGU9dC5uLG49dC5vLG5ldyAkZShlLmErbi5hLzIsZS5iK24uYi8yKTtjYXNlIDE6cmV0dXJuIG5ldyB4byh0Lm4pO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG9JKCl7b0k9WixZVj1uZXcgdDkoSjAsMCkscVR0PW5ldyB0OSgiTEVGVFVQIiwxKSxWVHQ9bmV3IHQ5KCJSSUdIVFVQIiwyKSx6VHQ9bmV3IHQ5KCJMRUZURE9XTiIsMyksSFR0PW5ldyB0OSgiUklHSFRET1dOIiw0KSxSbHQ9bmV3IHQ5KCJCQUxBTkNFRCIsNSl9ZnVuY3Rpb24gWWRuKHQsZSxuKXt2YXIgcixzLG87aWYocj1Ncyh0LmFbZS5wXSx0LmFbbi5wXSkscj09MCl7aWYocz11KFEoZSwoYWUoKSxSNikpLDE1KSxvPXUoUShuLFI2KSwxNSkscy5IYyhuKSlyZXR1cm4tMTtpZihvLkhjKGUpKXJldHVybiAxfXJldHVybiByfWZ1bmN0aW9uIEtkbih0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIG5ldyBoWjtjYXNlIDI6cmV0dXJuIG5ldyBmWjtjYXNlIDM6cmV0dXJuIG5ldyBsWjtjYXNlIDA6cmV0dXJuIG51bGw7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oSWN0Kyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gdzR0KHQsZSxuKXtzd2l0Y2goZSl7Y2FzZSAxOiF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSkseHIodC5uKSwhdC5uJiYodC5uPW5ldyBmZShxbyx0LDEsNykpLGlzKHQubix1KG4sMTQpKTtyZXR1cm47Y2FzZSAyOkc5KHQsQnIobikpO3JldHVybn1CeXQodCxlLG4pfWZ1bmN0aW9uIHY0dCh0LGUsbil7c3dpdGNoKGUpe2Nhc2UgMzpKdyh0LFh0KHllKG4pKSk7cmV0dXJuO2Nhc2UgNDp0dih0LFh0KHllKG4pKSk7cmV0dXJuO2Nhc2UgNTprdSh0LFh0KHllKG4pKSk7cmV0dXJuO2Nhc2UgNjpFdSh0LFh0KHllKG4pKSk7cmV0dXJufXc0dCh0LGUsbil9ZnVuY3Rpb24gb3EodCxlLG4pe3ZhciByLHMsbztvPShyPW5ldyBzZXQscikscz1GMShvLGUsbnVsbCkscyYmcy5GaSgpLFFjKG8sbiksRHIoKCF0LmMmJih0LmM9bmV3IGZlKFZ2LHQsMTIsMTApKSx0LmMpLG8pLFJnKG8sMCkscnkobywxKSxxZyhvLCEwKSx6ZyhvLCEwKX1mdW5jdGlvbiBtNHQodCxlKXt2YXIgbixyLHM7cmV0dXJuIG49S0ModC5nLGUpLF90KG4sMjM1KT8ocz11KG4sMjM1KSxzLlFoKCk9PW51bGwscy5OaCgpKTpfdChuLDQ5OCk/KHI9dShuLDE5MzgpLHM9ci5iLHMpOm51bGx9ZnVuY3Rpb24gWGRuKHQsZSxuLHIpe3ZhciBzLG87cmV0dXJuIExyKGUpLExyKG4pLG89dSh4OSh0LmQsZSksMTkpLG5lZSghIW8sIlJvdyAlcyBub3QgaW4gJXMiLGUsdC5lKSxzPXUoeDkodC5iLG4pLDE5KSxuZWUoISFzLCJDb2x1bW4gJXMgbm90IGluICVzIixuLHQuYyksb3JlKHQsby5hLHMuYSxyKX1mdW5jdGlvbiBwYWUodCxlLG4scixzLG8saCl7dmFyIGQsdixrLEMsTTtpZihDPXNbb10saz1vPT1oLTEsZD1rP3I6MCxNPU5zZShkLEMpLHIhPTEwJiZsdChjdCh0LGgtbyksZVtvXSxuW29dLGQsTSksIWspZm9yKCsrbyx2PTA7djxDOysrdilNW3ZdPXBhZSh0LGUsbixyLHMsbyxoKTtyZXR1cm4gTX1mdW5jdGlvbiBmXyh0KXtpZih0Lmc9PS0xKXRocm93IGl0KG5ldyBPdSk7dC5taigpO3RyeXt0LmkuJGModC5nKSx0LmY9dC5pLmosdC5nPHQuZSYmLS10LmUsdC5nPS0xfWNhdGNoKGUpe3Rocm93IGU9V2koZSksX3QoZSw3Myk/aXQobmV3IHJoKTppdChlKX19ZnVuY3Rpb24gZF8odCxlKXtyZXR1cm4gdC5iLmE9Yi5NYXRoLm1pbih0LmIuYSxlLmMpLHQuYi5iPWIuTWF0aC5taW4odC5iLmIsZS5kKSx0LmEuYT1iLk1hdGgubWF4KHQuYS5hLGUuYyksdC5hLmI9Yi5NYXRoLm1heCh0LmEuYixlLmQpLHQuY1t0LmMubGVuZ3RoXT1lLCEwfWZ1bmN0aW9uIFFkbih0KXt2YXIgZSxuLHIscztmb3Iocz0tMSxyPTAsbj1uZXcgUyh0KTtuLmE8bi5jLmMubGVuZ3RoOyl7aWYoZT11KEoobiksMjQzKSxlLmM9PShzbygpLHRsKSl7cz1yPT0wPzA6ci0xO2JyZWFrfWVsc2Ugcj09dC5jLmxlbmd0aC0xJiYocz1yKTtyKz0xfXJldHVybiBzfWZ1bmN0aW9uIFpkbih0KXt2YXIgZSxuLHIscztmb3Iocz0wLGU9MCxyPW5ldyBTKHQuYyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMzMpLGt1KG4sdC5lK3MpLEV1KG4sdC5mKSxzKz1uLmcrdC5iLGU9Yi5NYXRoLm1heChlLG4uZit0LmIpO3QuZD1zLXQuYix0LmE9ZS10LmJ9ZnVuY3Rpb24gZzQodCl7dmFyIGUsbixyO2ZvcihuPW5ldyBTKHQuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw1Nykscj1lLmQuYyxlLmQuYz1lLmQuZCxlLmQuZD1yLHI9ZS5kLmIsZS5kLmI9ZS5kLmEsZS5kLmE9cixyPWUuYi5hLGUuYi5hPWUuYi5iLGUuYi5iPXI7UDV0KHQpfWZ1bmN0aW9uIHA0KHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksODEpLHI9ZS5nLmMsZS5nLmM9ZS5nLmQsZS5nLmQ9cixyPWUuZy5iLGUuZy5iPWUuZy5hLGUuZy5hPXIscj1lLmUuYSxlLmUuYT1lLmUuYixlLmUuYj1yO3lxKHQpfWZ1bmN0aW9uIEpkbih0KXt2YXIgZSxuLHIscyxvO2ZvcihvPXF4KHQuayksbj0odmUoKSxsdChjdChYYSwxKSx4Yyw2MSwwLFtabyxQbixIbixtcixCbl0pKSxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWlmKGU9bltyXSxlIT1abyYmIW8uSGMoZSkpcmV0dXJuIGU7cmV0dXJuIG51bGx9ZnVuY3Rpb24gRnN0KHQsZSl7dmFyIG4scjtyZXR1cm4gcj11KFAydChNaXQoUmkobmV3IFRuKG51bGwsbmV3IF9uKGUuaiwxNikpLG5ldyBuUSkpKSwxMSksciYmKG49dShOZShyLmUsMCksMTcpLG4pP3UoUShuLChhZSgpLFRjKSksMTkpLmE6QW9uKHQuYil9ZnVuY3Rpb24gdDBuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IFMoZS5hKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMTApLFJDKHQuZCkscj1uZXcgYXIobHIoRHMocykuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSwxNyksbGNlKHQscyxuLmQuaSl9ZnVuY3Rpb24gZTBuKHQsZSl7dmFyIG4scjtmb3IobXUodC5iLGUpLHI9bmV3IFModC5uKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwyMTEpLFJvKG4uYyxlLDApIT0tMSl7bXUobi5jLGUpLFpkbihuKSxuLmMuYy5sZW5ndGg9PTAmJm11KHQubixuKTticmVha31kM24odCl9ZnVuY3Rpb24gYmFlKHQsZSl7dmFyIG4scixzLG8saDtmb3IoaD10LmYscz0wLG89MCxyPW5ldyBTKHQuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTg3KSx0SShuLHQuZSxoKSx2RChuLGUpLG89Yi5NYXRoLm1heChvLG4uciksaCs9bi5kK3QuYyxzPWg7dC5kPW8sdC5iPXN9ZnVuY3Rpb24gd2FlKHQpe3ZhciBlLG47cmV0dXJuIG49d0kodCksRjgobik/bnVsbDooZT0oTHIobiksdShfc2UobmV3IGFyKGxyKG4uYS5LYygpLG5ldyB6KSkpLDc5KSksRG8odShBdCgoIWUuYiYmKGUuYj1uZXcgQ24oYnIsZSw0LDcpKSxlLmIpLDApLDgyKSkpfWZ1bmN0aW9uIGNxKHQpe3ZhciBlO3JldHVybiB0Lm98fChlPXQuTGooKSxlP3Qubz1uZXcgX3Z0KHQsdCxudWxsKTp0LnJrKCk/dC5vPW5ldyBpd3QodCxudWxsKTpIdyhUbygoJHUoKSx5YSksdCkpPT0xP3Qubz1uZXcgckp0KHQpOnQubz1uZXcgeG50KHQsbnVsbCkpLHQub31mdW5jdGlvbiBuMG4odCxlLG4scil7dmFyIHMsbyxoLGQsdjtuLm1oKGUpJiYocz0oaD1lLGg/dShyLDQ5KS54aChoKTpudWxsKSxzJiYodj1uLmFoKGUpLGQ9ZS50LGQ+MXx8ZD09LTE/KG89dSh2LDE1KSxzLldiKHJmbih0LG8pKSk6cy5XYih5YXQodCx1KHYsNTYpKSkpKX1mdW5jdGlvbiByMG4odCxlLG4scil7blZ0KCk7dmFyIHM9VHV0O2Z1bmN0aW9uIG8oKXtmb3IodmFyIGg9MDtoPHMubGVuZ3RoO2grKylzW2hdKCl9aWYodCl0cnl7bnhlKG8pKCl9Y2F0Y2goaCl7dChlLGgpfWVsc2UgbnhlKG8pKCl9ZnVuY3Rpb24gaTBuKHQpe3ZhciBlLG4scixzLG87Zm9yKHI9bmV3IHAyKG5ldyBDZyh0LmIpLmEpO3IuYjspbj1adyhyKSxlPXUobi5jZCgpLDEwKSxvPXUodShuLmRkKCksNDYpLmEsMTApLHM9dSh1KG4uZGQoKSw0NikuYiw4KSxMaShHZihlLm4pLExpKG5jKG8ubikscykpfWZ1bmN0aW9uIHMwbih0KXtzd2l0Y2godShRKHQuYiwoVGUoKSxYQ3QpKSwzNzUpLmcpe2Nhc2UgMTpscyh3dShXbyhuZXcgVG4obnVsbCxuZXcgX24odC5kLDE2KSksbmV3IEJOKSxuZXcgZ3cpLG5ldyBSTik7YnJlYWs7Y2FzZSAyOll2bih0KTticmVhaztjYXNlIDA6THBuKHQpfX1mdW5jdGlvbiBhMG4odCxlLG4pe3ZhciByO3ZyKG4sIlN0cmFpZ2h0IExpbmUgRWRnZSBSb3V0aW5nIiwxKSxuLm4mJmUmJmdmKG4scGYoZSksKFNsKCksUWwpKSxyPXUocWUoZSwobTkoKSxIUykpLDMzKSxIbGUodCxyKSxuLm4mJmUmJmdmKG4scGYoZSksKFNsKCksUWwpKX1mdW5jdGlvbiBoeSgpe2h5PVosZmZ0PW5ldyBzOSgiVl9UT1AiLDApLFhPPW5ldyBzOSgiVl9DRU5URVIiLDEpLEtPPW5ldyBzOSgiVl9CT1RUT00iLDIpLGhmdD1uZXcgczkoIkhfTEVGVCIsMyksV089bmV3IHM5KCJIX0NFTlRFUiIsNCksWU89bmV3IHM5KCJIX1JJR0hUIiw1KX1mdW5jdGlvbiB5NHQodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/UnoodCk6KGU9bmV3IF9oKFJ6KHQpKSxlLmErPSIgKGFic3RyYWN0OiAiLExnKGUsKHQuQmImMjU2KSE9MCksZS5hKz0iLCBpbnRlcmZhY2U6ICIsTGcoZSwodC5CYiY1MTIpIT0wKSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIG8wbih0LGUsbixyKXt2YXIgcyxvLGgsZDtyZXR1cm4geGwodC5lKSYmKHM9ZS5haygpLGQ9ZS5kZCgpLG89bi5kZCgpLGg9R3AodCwxLHMsZCxvLHMuJGooKT9ERSh0LHMsbyxfdChzLDk5KSYmKHUocywxOCkuQmImS2EpIT0wKTotMSwhMCkscj9yLkVpKGgpOnI9aCkscn1mdW5jdGlvbiBjMG4odCl7dmFyIGU7dC5jPT1udWxsJiYoZT1WdCh0LmIpPT09VnQobkV0KT9udWxsOnQuYix0LmQ9ZT09bnVsbD9fdTpSS3QoZSk/SFFlKEpYdChlKSk6cmEoZSk/anh0OklwKG9sKGUpKSx0LmE9dC5hKyI6ICIrKFJLdChlKT9OWmUoSlh0KGUpKTplKyIiKSx0LmM9IigiK3QuZCsiKSAiK3QuYSl9ZnVuY3Rpb24geDR0KHQsZSl7dGhpcy5lPXQsRHcoTnMoZSwtNDI5NDk2NzI5NiksMCk/KHRoaXMuZD0xLHRoaXMuYT1sdChjdChDciwxKSxYciwyNSwxNSxbQXIoZSldKSk6KHRoaXMuZD0yLHRoaXMuYT1sdChjdChDciwxKSxYciwyNSwxNSxbQXIoZSksQXIoJHAoZSwzMikpXSkpfWZ1bmN0aW9uIHUwbigpe2Z1bmN0aW9uIHQoKXt0cnl7cmV0dXJuIG5ldyBNYXAoKS5lbnRyaWVzKCkubmV4dCgpLmRvbmV9Y2F0Y2h7cmV0dXJuITF9fXJldHVybiB0eXBlb2YgTWFwPT09R2F0JiZNYXAucHJvdG90eXBlLmVudHJpZXMmJnQoKT9NYXA6TzVuKCl9ZnVuY3Rpb24gbDBuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IGRhKHQuZSwwKSxuPTA7by5iPG8uZC5nYygpOyl7aWYocj1YdCgoWm4oby5iPG8uZC5nYygpKSx5ZShvLmQuWGIoby5jPW8uYisrKSkpKSxzPXItZSxzPkxjdClyZXR1cm4gbjtzPi0xZS02JiYrK259cmV0dXJuIG59ZnVuY3Rpb24gazR0KHQsZSl7dmFyIG47ZSE9dC5iPyhuPW51bGwsdC5iJiYobj1tJCh0LmIsdCwtNCxuKSksZSYmKG49YzYoZSx0LC00LG4pKSxuPVFyZSh0LGUsbiksbiYmbi5GaSgpKTp0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDMsZSxlKSl9ZnVuY3Rpb24gdmFlKHQsZSl7dmFyIG47ZSE9dC5mPyhuPW51bGwsdC5mJiYobj1tJCh0LmYsdCwtMSxuKSksZSYmKG49YzYoZSx0LC0xLG4pKSxuPVpyZSh0LGUsbiksbiYmbi5GaSgpKTp0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDAsZSxlKSl9ZnVuY3Rpb24gbWFlKHQpe3ZhciBlLG4scjtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKG49dSh0LDE1KSxuLmRjKCkpcmV0dXJuIiI7Zm9yKHI9bmV3IEFnLGU9bi5LYygpO2UuT2IoKTspZ28ociwoSWkoKSxCcihlLlBiKCkpKSksci5hKz0iICI7cmV0dXJuIGludChyLHIuYS5sZW5ndGgtMSl9ZnVuY3Rpb24geWFlKHQpe3ZhciBlLG4scjtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKG49dSh0LDE1KSxuLmRjKCkpcmV0dXJuIiI7Zm9yKHI9bmV3IEFnLGU9bi5LYygpO2UuT2IoKTspZ28ociwoSWkoKSxCcihlLlBiKCkpKSksci5hKz0iICI7cmV0dXJuIGludChyLHIuYS5sZW5ndGgtMSl9ZnVuY3Rpb24gaDBuKHQsZSxuKXt2YXIgcixzO3JldHVybiByPXQuY1tlLmMucF1bZS5wXSxzPXQuY1tuLmMucF1bbi5wXSxyLmEhPW51bGwmJnMuYSE9bnVsbD9VbnQoci5hLHMuYSk6ci5hIT1udWxsPy0xOnMuYSE9bnVsbD8xOjB9ZnVuY3Rpb24gZjBuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKGUpZm9yKG89ZS5hLmxlbmd0aCxuPW5ldyBlMihvKSxkPShuLmItbi5hKSpuLmM8MD8oRnAoKSxJYik6bmV3IGpwKG4pO2QuT2IoKTspaD11KGQuUGIoKSwxOSkscz1QOChlLGguYSkscj1uZXcgeHp0KHQpLGVybihyLmEscyl9ZnVuY3Rpb24gZDBuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKGUpZm9yKG89ZS5hLmxlbmd0aCxuPW5ldyBlMihvKSxkPShuLmItbi5hKSpuLmM8MD8oRnAoKSxJYik6bmV3IGpwKG4pO2QuT2IoKTspaD11KGQuUGIoKSwxOSkscz1QOChlLGguYSkscj1uZXcgZnp0KHQpLHRybihyLmEscyl9ZnVuY3Rpb24gZzBuKHQpe3ZhciBlO2lmKHQhPW51bGwmJnQubGVuZ3RoPjAmJndhKHQsdC5sZW5ndGgtMSk9PTMzKXRyeXtyZXR1cm4gZT13b2UoUGwodCwwLHQubGVuZ3RoLTEpKSxlLmU9PW51bGx9Y2F0Y2gobil7aWYobj1XaShuKSwhX3QobiwzMikpdGhyb3cgaXQobil9cmV0dXJuITF9ZnVuY3Rpb24geGFlKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9ZS5haygpLG89ZS5kZCgpLHM9ci4kaigpP0dwKHQsMyxyLG51bGwsbyxERSh0LHIsbyxfdChyLDk5KSYmKHUociwxOCkuQmImS2EpIT0wKSwhMCk6R3AodCwxLHIsci56aigpLG8sLTEsITApLG4/bi5FaShzKTpuPXMsbn1mdW5jdGlvbiBwMG4oKXt2YXIgdCxlLG47Zm9yKGU9MCx0PTA7dDwxO3QrKyl7aWYobj1nNXQoKFJyKHQsMSksIlgiLmNoYXJDb2RlQXQodCkpKSxuPT0wKXRocm93IGl0KG5ldyBOcigiVW5rbm93biBPcHRpb246ICIrIlgiLnN1YnN0cih0KSkpO2V8PW59cmV0dXJuIGV9ZnVuY3Rpb24gYjBuKHQsZSxuKXt2YXIgcixzLG87c3dpdGNoKHI9TmEoZSkscz1QeihyKSxvPW5ldyBNYyxVbyhvLGUpLG4uZyl7Y2FzZSAxOkJzKG8sWUQoYTYocykpKTticmVhaztjYXNlIDI6QnMobyxhNihzKSl9cmV0dXJuIEp0KG8sKFRlKCksVnkpLHllKFEodCxWeSkpKSxvfWZ1bmN0aW9uIEU0dCh0KXt2YXIgZSxuO3JldHVybiBlPXUoTXIobmV3IGFyKGxyKGpvKHQuYSkuYS5LYygpLG5ldyB6KSkpLDE3KSxuPXUoTXIobmV3IGFyKGxyKERzKHQuYSkuYS5LYygpLG5ldyB6KSkpLDE3KSxqZShSZShRKGUsKGFlKCkscTEpKSkpfHxqZShSZShRKG4scTEpKSl9ZnVuY3Rpb24gYjQoKXtiND1aLCRWPW5ldyBTTSgiT05FX1NJREUiLDApLHFWPW5ldyBTTSgiVFdPX1NJREVTX0NPUk5FUiIsMSksSFY9bmV3IFNNKCJUV09fU0lERVNfT1BQT1NJTkciLDIpLHpWPW5ldyBTTSgiVEhSRUVfU0lERVMiLDMpLGpWPW5ldyBTTSgiRk9VUl9TSURFUyIsNCl9ZnVuY3Rpb24gTnN0KHQsZSxuLHIscyl7dmFyIG8saDtvPXUoQmwoUmkoZS5PYygpLG5ldyBWWCksYzIobmV3IGtlLG5ldyBjZSxuZXcgWG4sbHQoY3QoZmwsMSksb2UsMTMyLDAsWyhPMSgpLFVsKV0pKSksMTUpLGg9dShoMih0LmIsbixyKSwxNSkscz09MD9oLldjKDAsbyk6aC5HYyhvKX1mdW5jdGlvbiB3MG4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihvPW5ldyBTKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDEwKSxyPW5ldyBhcihscihqbyhzKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KE1yKHIpLDE3KSxoPW4uYy5pLnAsdC5uW2hdPXQubltoXS0xfWZ1bmN0aW9uIHYwbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG89bmV3IFMoZS5kKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMTAxKSxoPXUodHIodC5jLHMpLDExMikubyxyPW5ldyBNeChzLmIpO3IuYTxyLmMuYS5sZW5ndGg7KW49dShqOShyKSw2MSksUG10KHMsbixoKX1mdW5jdGlvbiBtMG4odCl7dmFyIGUsbjtmb3Iobj1uZXcgUyh0LmUuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjkpLEs0bih0LGUpO2xzKFJpKFdvKFdvKG5ldyBUbihudWxsLG5ldyBfbih0LmUuYiwxNikpLG5ldyBBUSksbmV3IFhOKSxuZXcgSVEpLG5ldyBXJHQodCkpfWZ1bmN0aW9uIFQ0dCh0LGUpe3JldHVybiBlP3QuRGkoZSk/ITE6dC5pP3QuaS5FaShlKTpfdChlLDE0Myk/KHQuaT11KGUsMTQzKSwhMCk6KHQuaT1uZXcgY3gsdC5pLkVpKGUpKTohMX1mdW5jdGlvbiB5MG4odCl7aWYodD0kYyh0LCEwKSxobihYRSx0KXx8aG4oIjEiLHQpKXJldHVybiBObigpLHI3O2lmKGhuKFZjdCx0KXx8aG4oIjAiLHQpKXJldHVybiBObigpLEYyO3Rocm93IGl0KG5ldyBwZXQoIkludmFsaWQgYm9vbGVhbiB2YWx1ZTogJyIrdCsiJyIpKX1mdW5jdGlvbiBDNHQodCxlLG4pe3ZhciByLHMsbztmb3Iocz10LnZjKCkuS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksNDIpLG89ci5jZCgpLFZ0KGUpPT09VnQobyl8fGUhPW51bGwmJnlpKGUsbykpcmV0dXJuIG4mJihyPW5ldyBLUihyLmNkKCksci5kZCgpKSxzLlFiKCkpLHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24geDBuKHQpeyRtKCk7dmFyIGUsbixyO3QuQi5IYygobGwoKSxuVSkpJiYocj10LmYuaSxlPW5ldyB2JCh0LmEuYyksbj1uZXcgQ3gsbi5iPWUuYy1yLmMsbi5kPWUuZC1yLmQsbi5jPXIuYytyLmItKGUuYytlLmIpLG4uYT1yLmQrci5hLShlLmQrZS5hKSx0LmUuRmYobikpfWZ1bmN0aW9uIGthZSh0LGUsbixyKXt2YXIgcyxvLGg7Zm9yKGg9Yi5NYXRoLm1pbihuLE1sZSh1KHQuYiw2NSksZSxuLHIpKSxvPW5ldyBTKHQuYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjIxKSxzIT1lJiYoaD1iLk1hdGgubWluKGgsa2FlKHMsZSxoLHIpKSk7cmV0dXJuIGh9ZnVuY3Rpb24gXzR0KHQpe3ZhciBlLG4scixzO2ZvcihzPU50KGwwLGVlLDE5Myx0LmIuYy5sZW5ndGgsMCwyKSxyPW5ldyBkYSh0LmIsMCk7ci5iPHIuZC5nYygpOyllPShabihyLmI8ci5kLmdjKCkpLHUoci5kLlhiKHIuYz1yLmIrKyksMjkpKSxuPXIuYi0xLHNbbl09bEQoZS5hKTtyZXR1cm4gc31mdW5jdGlvbiBCc3QodCxlLG4scixzKXt2YXIgbyxoLGQsdjtmb3IoaD1SS2UoY2J0KF93dChXZm4obikpLHIpLG5kbih0LG4scykpLHY9R2codCxuKS5LYygpO3YuT2IoKTspZD11KHYuUGIoKSwxMSksZVtkLnBdJiYobz1lW2QucF0uaSxsZShoLmQsbmV3IEhudChvLGEzdChoLG8pKSkpO2szdChoKX1mdW5jdGlvbiBTNHQodCxlKXt0aGlzLmY9bmV3IF9yLHRoaXMuYj1uZXcgX3IsdGhpcy5qPW5ldyBfcix0aGlzLmE9dCx0aGlzLmM9ZSx0aGlzLmM+MCYmV3NlKHRoaXMsdGhpcy5jLTEsKHZlKCksSG4pKSx0aGlzLmM8dGhpcy5hLmxlbmd0aC0xJiZXc2UodGhpcyx0aGlzLmMrMSwodmUoKSxCbikpfWZ1bmN0aW9uIEE0dCh0KXt0Lmxlbmd0aD4wJiZ0WzBdLmxlbmd0aD4wJiYodGhpcy5jPWplKFJlKFEoTmEodFswXVswXSksKGFlKCksc0N0KSkpKSksdGhpcy5hPU50KFRtZSxlZSwyMDE4LHQubGVuZ3RoLDAsMiksdGhpcy5iPU50KENtZSxlZSwyMDE5LHQubGVuZ3RoLDAsMiksdGhpcy5kPW5ldyBWcmV9ZnVuY3Rpb24gazBuKHQpe3JldHVybiB0LmMubGVuZ3RoPT0wPyExOihBbigwLHQuYy5sZW5ndGgpLHUodC5jWzBdLDE3KSkuYy5pLms9PShWbigpLHRhKT8hMDpOOCh3dShuZXcgVG4obnVsbCxuZXcgX24odCwxNikpLG5ldyBtUSksbmV3IHlRKX1mdW5jdGlvbiBFMG4odCxlLG4pe3JldHVybiB2cihuLCJUcmVlIGxheW91dCIsMSksTCQodC5iKSxLZCh0LmIsKHdFKCksQUcpLEFHKSxLZCh0LmIsUlMsUlMpLEtkKHQuYiwkTywkTyksS2QodC5iLGpTLGpTKSx0LmE9RnEodC5iLGUpLFp3bih0LGUsUmMobiwxKSksb3IobiksZX1mdW5jdGlvbiBFYWUodCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3IoZD13eShlKSxvPWUuZix2PWUuZyxoPWIuTWF0aC5zcXJ0KG8qbyt2KnYpLHM9MCxyPW5ldyBTKGQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDMzKSxzKz1FYWUodCxuKTtyZXR1cm4gYi5NYXRoLm1heChzLGgpfWZ1bmN0aW9uIHVhKCl7dWE9WixUYj1uZXcgbzkoTl8sMCksRzE9bmV3IG85KCJGUkVFIiwxKSxCNz1uZXcgbzkoIkZJWEVEX1NJREUiLDIpLFkyPW5ldyBvOSgiRklYRURfT1JERVIiLDMpLGcwPW5ldyBvOSgiRklYRURfUkFUSU8iLDQpLEdjPW5ldyBvOSgiRklYRURfUE9TIiw1KX1mdW5jdGlvbiBUMG4odCxlKXt2YXIgbixyLHM7aWYobj1lLkhoKHQuYSksbil7Zm9yKHM9QnIoWGYoKCFuLmImJihuLmI9bmV3IGtsKChkbigpLFFhKSxjYyxuKSksbi5iKSxSaCkpLHI9MTtyPCgkdSgpLHlMdCkubGVuZ3RoOysrcilpZihobih5THRbcl0scykpcmV0dXJuIHJ9cmV0dXJuIDB9ZnVuY3Rpb24gQzBuKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gX3U7Zm9yKG89bmV3IGYyKFlhLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSwkMChvLCIiK2UpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gXzBuKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gX3U7Zm9yKG89bmV3IGYyKFlhLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSwkMChvLCIiK2UpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gVGFlKHQpe3ZhciBlLG4scjtmb3Iocj1uZXcgZjIoWWEsInsiLCJ9Iiksbj10LnZjKCkuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksNDIpLCQwKHIsUVp0KHQsZS5jZCgpKSsiPSIrUVp0KHQsZS5kZCgpKSk7cmV0dXJuIHIuYT9yLmUubGVuZ3RoPT0wP3IuYS5hOnIuYS5hKygiIityLmUpOnIuY31mdW5jdGlvbiBTMG4odCl7Zm9yKHZhciBlLG4scixzOyFCQyh0Lm8pOyluPXUoSHgodC5vKSw0Nikscj11KG4uYSwxMjEpLGU9dShuLmIsMjEzKSxzPUJ6KGUsciksZS5lPT1yPyhfaihzLmcsZSksci5lPXMuZStlLmEpOihfaihzLmIsZSksci5lPXMuZS1lLmEpLGxlKHQuZS5hLHIpfWZ1bmN0aW9uIEw0dCh0LGUpe3ZhciBuLHIscztmb3Iobj1udWxsLHM9dShlLktiKHQpLDIwKS5LYygpO3MuT2IoKTspaWYocj11KHMuUGIoKSwxNyksIW4pbj1yLmMuaT09dD9yLmQuaTpyLmMuaTtlbHNlIGlmKChyLmMuaT09dD9yLmQuaTpyLmMuaSkhPW4pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQ2FlKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobj1HY2UodCwhMSxlKSxzPW5ldyBTKG4pO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEyOSksci5kPT0wPyhBcnQocixudWxsKSxMcnQocixudWxsKSk6KG89ci5hLGg9ci5iLEFydChyLGgpLExydChyLG8pKX1mdW5jdGlvbiBBMG4odCl7dmFyIGUsbjtyZXR1cm4gZT1uZXcgVnMsJGwoZSxzeWUpLG49dShRKHQsKGFlKCksVmMpKSwyMSksbi5IYygob28oKSx4UykpJiYkbChlLHV5ZSksbi5IYyh2NykmJiRsKGUsYXllKSxuLkhjKFc0KSYmJGwoZSxjeWUpLG4uSGMobTcpJiYkbChlLG95ZSksZX1mdW5jdGlvbiBMMG4odCl7dmFyIGUsbixyLHM7Zm9yKFEzbih0KSxuPW5ldyBhcihscihVMCh0KS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDE3KSxyPWUuYy5pPT10LHM9cj9lLmQ6ZS5jLHI/b2EoZSxudWxsKTpPYShlLG51bGwpLEp0KGUsKGFlKCksdUN0KSxzKSxSYm4odCxzLmkpfWZ1bmN0aW9uIE0wbih0LGUsbixyKXt2YXIgcyxvO3N3aXRjaChvPWUuaSxzPW5bby5nXVt0LmRbby5nXV0sby5nKXtjYXNlIDE6cy09citlLmouYixlLmcuYj1zO2JyZWFrO2Nhc2UgMzpzKz1yLGUuZy5iPXM7YnJlYWs7Y2FzZSA0OnMtPXIrZS5qLmEsZS5nLmE9czticmVhaztjYXNlIDI6cys9cixlLmcuYT1zfX1mdW5jdGlvbiBEMG4odCl7dmFyIGUsbixyO2ZvcihuPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpO24uZSE9bi5pLmdjKCk7KWlmKGU9dShkcihuKSwzMykscj13SShlKSwhenIobmV3IGFyKGxyKHIuYS5LYygpLG5ldyB6KSkpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIEkwbigpe3ZhciB0O3JldHVybiBKNGU/dShfRSgoUHAoKSxZaCksWkUpLDIwMTYpOih0PXUoX3QoTmMoKFBwKCksWWgpLFpFKSw1NTUpP05jKFloLFpFKTpuZXcgZ2NlLDU1NSksSjRlPSEwLE40bih0KSxWeG4odCksTXN0KHQpLGtvKFloLFpFLHQpLHQpfWZ1bmN0aW9uIFJzdCh0LGUsbil7dmFyIHIscztpZih0Lmo9PTApcmV0dXJuIG47aWYocz11KFllZSh0LGUsbiksNzIpLHI9bi5haygpLCFyLklqKCl8fCF0LmEucmwocikpdGhyb3cgaXQobmV3IFZvKCJJbnZhbGlkIGVudHJ5IGZlYXR1cmUgJyIrci5IaigpLnpiKyIuIityLm5lKCkrIiciKSk7cmV0dXJuIHN9ZnVuY3Rpb24gTzBuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsaztmb3IoZD10LmEsdj0wLGs9ZC5sZW5ndGg7djxrOysrdilmb3IoaD1kW3ZdLHI9aCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKWlmKG49cltzXSxWdChlKT09PVZ0KG4pfHxlIT1udWxsJiZ5aShlLG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFAwbih0KXt2YXIgZSxuLHI7cmV0dXJuIHljKHQsMCk+PTA/KG49YUkodCxHcSkscj1RRCh0LEdxKSk6KGU9Vm0odCwxKSxuPWFJKGUsNWU4KSxyPVFEKGUsNWU4KSxyPVBhKEYwKHIsMSksTnModCwxKSkpLFMxKEYwKHIsMzIpLE5zKG4sY28pKX1mdW5jdGlvbiBfYWUodCxlLG4pe3ZhciByLHM7c3dpdGNoKHI9KFpuKGUuYiE9MCksdShsaChlLGUuYS5hKSw4KSksbi5nKXtjYXNlIDA6ci5iPTA7YnJlYWs7Y2FzZSAyOnIuYj10LmY7YnJlYWs7Y2FzZSAzOnIuYT0wO2JyZWFrO2RlZmF1bHQ6ci5hPXQuZ31yZXR1cm4gcz1laShlLDApLGVEKHMsciksZX1mdW5jdGlvbiBTYWUodCxlLG4scil7dmFyIHMsbyxoLGQsdjtzd2l0Y2godj10LmIsbz1lLmQsaD1vLmosZD1CM3QoaCx2LmRbaC5nXSxuKSxzPUxpKG5jKG8ubiksby5hKSxvLmouZyl7Y2FzZSAxOmNhc2UgMzpkLmErPXMuYTticmVhaztjYXNlIDI6Y2FzZSA0OmQuYis9cy5ifWZzKHIsZCxyLmMuYixyLmMpfWZ1bmN0aW9uIEYwbih0LGUsbil7dmFyIHIscyxvLGg7Zm9yKGg9Um8odC5lLGUsMCksbz1uZXcgenB0LG8uYj1uLHI9bmV3IGRhKHQuZSxoKTtyLmI8ci5kLmdjKCk7KXM9KFpuKHIuYjxyLmQuZ2MoKSksdShyLmQuWGIoci5jPXIuYisrKSwxMCkpLHMucD1uLGxlKG8uZSxzKSxDbChyKTtyZXR1cm4gb31mdW5jdGlvbiBOMG4odCxlLG4scil7dmFyIHMsbyxoLGQsdjtmb3Iocz1udWxsLG89MCxkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDMzKSx2PWguaStoLmcsdDxoLmoraC5mK3ImJihzP24uaS12PG4uaS1vJiYocz1oKTpzPWgsbz1zLmkrcy5nKTtyZXR1cm4gcz9vK3I6MH1mdW5jdGlvbiBCMG4odCxlLG4scil7dmFyIHMsbyxoLGQsdjtmb3Iobz1udWxsLHM9MCxkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDMzKSx2PWguaitoLmYsdDxoLmkraC5nK3ImJihvP24uai12PG4uai1zJiYobz1oKTpvPWgscz1vLmorby5mKTtyZXR1cm4gbz9zK3I6MH1mdW5jdGlvbiBSMG4odCl7dmFyIGUsbixyO2ZvcihlPSExLHI9dC5iLmMubGVuZ3RoLG49MDtuPHI7bisrKU55dCh1KE5lKHQuYixuKSw0MzQpKT8hZSYmbisxPHImJk55dCh1KE5lKHQuYixuKzEpLDQzNCkpJiYoZT0hMCx1KE5lKHQuYixuKSw0MzQpLmE9ITApOmU9ITF9ZnVuY3Rpb24gajBuKHQsZSxuLHIscyl7dmFyIG8saDtmb3Iobz0wLGg9MDtoPHM7aCsrKW89UGEobyxKcChOcyhlW2hdLGNvKSxOcyhyW2hdLGNvKSkpLHRbaF09QXIobyksbz0kcChvLDMyKTtmb3IoO2g8bjtoKyspbz1QYShvLE5zKGVbaF0sY28pKSx0W2hdPUFyKG8pLG89JHAobywzMil9ZnVuY3Rpb24gJDBuKHQsZSl7VEUoKTt2YXIgbixyO2ZvcihyPShyYigpLGVWKSxuPXQ7ZT4xO2U+Pj0xKWUmMSYmKHI9ZTQocixuKSksbi5kPT0xP249ZTQobixuKTpuPW5ldyBRaWUoYWxlKG4uYSxuLmQsTnQoQ3IsWHIsMjUsbi5kPDwxLDE1LDEpKSk7cmV0dXJuIHI9ZTQocixuKSxyfWZ1bmN0aW9uIE00dCgpe000dD1aO3ZhciB0LGUsbixyO2ZvcihERXQ9TnQoYWEsdm8sMjUsMjUsMTUsMSksSUV0PU50KGFhLHZvLDI1LDMzLDE1LDEpLHI9MTUyNTg3ODkwNjI1ZS0xNixlPTMyO2U+PTA7ZS0tKUlFdFtlXT1yLHIqPS41O2ZvcihuPTEsdD0yNDt0Pj0wO3QtLSlERXRbdF09bixuKj0uNX1mdW5jdGlvbiB6MG4odCl7dmFyIGUsbjtpZihqZShSZShxZSh0LChUZSgpLEh5KSkpKSl7Zm9yKG49bmV3IGFyKGxyKEswKHQpLmEuS2MoKSxuZXcgeikpO3pyKG4pOylpZihlPXUoTXIobiksNzkpLGZ2KGUpJiZqZShSZShxZShlLGoyKSkpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEFhZSh0LGUpe3ZhciBuLHIscztGcyh0LmYsZSkmJihlLmI9dCxyPWUuYyxSbyh0LmosciwwKSE9LTF8fGxlKHQuaixyKSxzPWUuZCxSbyh0LmoscywwKSE9LTF8fGxlKHQuaixzKSxuPWUuYS5iLG4uYy5sZW5ndGghPTAmJighdC5pJiYodC5pPW5ldyBhc2UodCkpLHJ1bih0LmksbikpKX1mdW5jdGlvbiBxMG4odCl7dmFyIGUsbixyLHMsbztyZXR1cm4gbj10LmMuZCxyPW4uaixzPXQuZC5kLG89cy5qLHI9PW8/bi5wPHMucD8wOjE6T3oocik9PW8/MDpvM3Qocik9PW8/MTooZT10LmIsTnUoZS5iLE96KHIpKT8wOjEpfWZ1bmN0aW9uIHVxKCl7dXE9Wix3aHQ9bmV3IG45KHExZSwwKSxNOXQ9bmV3IG45KCJMT05HRVNUX1BBVEgiLDEpLGJodD1uZXcgbjkoIkNPRkZNQU5fR1JBSEFNIiwyKSxMOXQ9bmV3IG45KFhvdCwzKSxEOXQ9bmV3IG45KCJTVFJFVENIX1dJRFRIIiw0KSxtRz1uZXcgbjkoIk1JTl9XSURUSCIsNSl9ZnVuY3Rpb24gazIodCl7dmFyIGU7dGhpcy5kPW5ldyBfcix0aGlzLmM9dC5jLHRoaXMuZT10LmQsdGhpcy5iPXQuYix0aGlzLmY9bmV3IFRLdCh0LmUpLHRoaXMuYT10LmEsdC5mP3RoaXMuZz10LmY6dGhpcy5nPShlPXUoVmYoZlUpLDkpLG5ldyBzaChlLHUoZmYoZSxlLmxlbmd0aCksOSksMCkpfWZ1bmN0aW9uIGxxKHQsZSl7dmFyIG4scixzLG8saCxkO3M9dCxoPVI5KHMsImxheW91dE9wdGlvbnMiKSwhaCYmKGg9UjkocywkZGUpKSxoJiYoZD1oLHI9bnVsbCxkJiYocj0obz15aXQoZCxOdChBZSxlZSwyLDAsNiwxKSksbmV3IEVldChkLG8pKSksciYmKG49bmV3IGpHdChkLGUpLHZhKHIsbikpKX1mdW5jdGlvbiBEbyh0KXtpZihfdCh0LDIzOSkpcmV0dXJuIHUodCwzMyk7aWYoX3QodCwxODYpKXJldHVybiBUMSh1KHQsMTE4KSk7dGhyb3cgaXQodD9uZXcgU2coIk9ubHkgc3VwcG9ydCBub2RlcyBhbmQgcG9ydHMuIik6bmV3IFN4KEtkZSkpfWZ1bmN0aW9uIEgwbih0LGUsbixyKXtyZXR1cm4oZT49MCYmaG4odC5zdWJzdHIoZSwzKSwiR01UIil8fGU+PTAmJmhuKHQuc3Vic3RyKGUsMyksIlVUQyIpKSYmKG5bMF09ZSszKSxyeHQodCxuLHIpfWZ1bmN0aW9uIFYwbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG89dC5nLmEsaD10LmcuYixyPW5ldyBTKHQuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNzApLHM9bi5uLHMuYT1vLHQuaT09KHZlKCksUG4pP3MuYj1oK3Quai5iLW4uby5iOnMuYj1oLExpKHMsZSksbys9bi5vLmErdC5lfWZ1bmN0aW9uIHZyKHQsZSxuKXtpZih0LmIpdGhyb3cgaXQobmV3IE5vKCJUaGUgdGFzayBpcyBhbHJlYWR5IGRvbmUuIikpO3JldHVybiB0LnAhPW51bGw/ITE6KHQucD1lLHQucj1uLHQuayYmKHQubz0oR2QoKSxfYShUdShEYXRlLm5vdygpKSxXZykpKSwhMCl9ZnVuY3Rpb24gRDR0KHQpe3ZhciBlLG4scixzLG8saCxkO3JldHVybiBkPW5ldyBfeCxuPXQudGcoKSxzPW4hPW51bGwscyYmRTgoZCxBZCx0LnRnKCkpLHI9dC5uZSgpLG89ciE9bnVsbCxvJiZFOChkLGNpLHQubmUoKSksZT10LnNnKCksaD1lIT1udWxsLGgmJkU4KGQsImRlc2NyaXB0aW9uIix0LnNnKCkpLGR9ZnVuY3Rpb24gTGFlKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIG89dC5xLHQucT1lLHQuRGImNCYmISh0LkRiJjEpJiYocz1uZXcgSnModCwxLDksbyxlKSxuP24uRWkocyk6bj1zKSxlPyhyPWUuYyxyIT10LnImJihuPXQubmsocixuKSkpOnQuciYmKG49dC5uayhudWxsLG4pKSxufWZ1bmN0aW9uIEcwbih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobj0oZD1lLGM2KGQsdC5lLC0xLXQuYyxuKSksaD1BdnQodC5hKSxvPShyPW5ldyBwMihuZXcgQ2coaC5hKS5hKSxuZXcgeVIocikpO28uYS5iOylzPXUoWncoby5hKS5jZCgpLDg3KSxuPVBFKHMsdnEocyx0LmEpLG4pO3JldHVybiBufWZ1bmN0aW9uIFUwbih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iobj0oZD1lLG0kKGQsdC5lLC0xLXQuYyxuKSksaD1BdnQodC5hKSxvPShyPW5ldyBwMihuZXcgQ2coaC5hKS5hKSxuZXcgeVIocikpO28uYS5iOylzPXUoWncoby5hKS5jZCgpLDg3KSxuPVBFKHMsdnEocyx0LmEpLG4pO3JldHVybiBufWZ1bmN0aW9uIFcwbih0LGUsbixyKXt2YXIgcyxvLGg7aWYocj09MClEYyhlLDAsdCxuLHQubGVuZ3RoLW4pO2Vsc2UgZm9yKGg9MzItcix0W3QubGVuZ3RoLTFdPTAsbz10Lmxlbmd0aC0xO28+bjtvLS0pdFtvXXw9ZVtvLW4tMV0+Pj5oLHRbby0xXT1lW28tbi0xXTw8cjtmb3Iocz0wO3M8bjtzKyspdFtzXT0wfWZ1bmN0aW9uIFkwbih0KXt2YXIgZSxuLHIscyxvO2ZvcihlPTAsbj0wLG89dC5LYygpO28uT2IoKTspcj11KG8uUGIoKSwxMTEpLGU9Yi5NYXRoLm1heChlLHIuZC5iKSxuPWIuTWF0aC5tYXgobixyLmQuYyk7Zm9yKHM9dC5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMTEpLHIuZC5iPWUsci5kLmM9bn1mdW5jdGlvbiBLMG4odCl7dmFyIGUsbixyLHMsbztmb3Iobj0wLGU9MCxvPXQuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksMTExKSxuPWIuTWF0aC5tYXgobixyLmQuZCksZT1iLk1hdGgubWF4KGUsci5kLmEpO2ZvcihzPXQuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxyLmQuZD1uLHIuZC5hPWV9ZnVuY3Rpb24gTWFlKHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IGhlLHM9MCxyPWUuS2MoKTtyLk9iKCk7KXtmb3Iobj1wZSh1KHIuUGIoKSwxOSkuYStzKTtuLmE8dC5mJiYhamVuKHQsbi5hKTspbj1wZShuLmErMSksKytzO2lmKG4uYT49dC5mKWJyZWFrO28uY1tvLmMubGVuZ3RoXT1ufXJldHVybiBvfWZ1bmN0aW9uIEk0dCh0KXt2YXIgZSxuLHIscztmb3IoZT1udWxsLHM9bmV3IFModC53ZigpKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxODEpLG49bmV3IGFoKHIucWYoKS5hLHIucWYoKS5iLHIucmYoKS5hLHIucmYoKS5iKSxlP2dfKGUsbik6ZT1uO3JldHVybiFlJiYoZT1uZXcgRngpLGV9ZnVuY3Rpb24ganN0KHQsZSxuLHIpe3ZhciBzLG87cmV0dXJuIG49PTE/KCF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSksWmModC5uLGUscikpOihvPXUoeW4oKHM9dShEbih0LDE2KSwyNiksc3x8dC56aCgpKSxuKSw2Niksby5OaigpLlFqKHQsc3UodCksbi1Kbih0LnpoKCkpLGUscikpfWZ1bmN0aW9uICRzdCh0LGUsbil7dmFyIHIscyxvLGgsZDtmb3Iocj1uLmdjKCksdC5xaSh0LmkrciksZD10LmktZSxkPjAmJkRjKHQuZyxlLHQuZyxlK3IsZCksaD1uLktjKCksdC5pKz1yLHM9MDtzPHI7KytzKW89aC5QYigpLHA5KHQsZSx0Lm9pKGUsbykpLHQuYmkoZSxvKSx0LmNpKCksKytlO3JldHVybiByIT0wfWZ1bmN0aW9uIEYxKHQsZSxuKXt2YXIgcjtyZXR1cm4gZSE9dC5xPyh0LnEmJihuPW0kKHQucSx0LC0xMCxuKSksZSYmKG49YzYoZSx0LC0xMCxuKSksbj1MYWUodCxlLG4pKTp0LkRiJjQmJiEodC5EYiYxKSYmKHI9bmV3IEpzKHQsMSw5LGUsZSksbj9uLkVpKHIpOm49ciksbn1mdW5jdGlvbiB6c3QodCxlLG4scil7cmV0dXJuIHh3dCgobiZtZCk9PTAsImZsYXRNYXAgZG9lcyBub3Qgc3VwcG9ydCBTVUJTSVpFRCBjaGFyYWN0ZXJpc3RpYyIpLHh3dCgobiY0KT09MCwiZmxhdE1hcCBkb2VzIG5vdCBzdXBwb3J0IFNPUlRFRCBjaGFyYWN0ZXJpc3RpYyIpLExyKHQpLExyKGUpLG5ldyBGWnQodCxuLHIsZSl9ZnVuY3Rpb24gWDBuKHQsZSl7YnZ0KGUsIkNhbm5vdCBzdXBwcmVzcyBhIG51bGwgZXhjZXB0aW9uLiIpLEJqKGUhPXQsIkV4Y2VwdGlvbiBjYW4gbm90IHN1cHByZXNzIGl0c2VsZi4iKSwhdC5pJiYodC5rPT1udWxsP3Quaz1sdChjdChEdXQsMSksZWUsNzgsMCxbZV0pOnQua1t0LmsubGVuZ3RoXT1lKX1mdW5jdGlvbiB3NCh0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGs7Zm9yKGg9bi5sZW5ndGgsbz0wLHM9LTEsaz1UZWUodC5zdWJzdHIoZSksKEFudCgpLExFdCkpLGQ9MDtkPGg7KytkKXY9bltkXS5sZW5ndGgsdj5vJiZhbm4oayxUZWUobltkXSxMRXQpKSYmKHM9ZCxvPXYpO3JldHVybiBzPj0wJiYoclswXT1lK28pLHN9ZnVuY3Rpb24gUTBuKHQsZSl7dmFyIG47aWYobj14VXQodC5iLkhmKCksZS5iLkhmKCkpLG4hPTApcmV0dXJuIG47c3dpdGNoKHQuYi5IZigpLmcpe2Nhc2UgMTpjYXNlIDI6cmV0dXJuIHB1KHQuYi5zZigpLGUuYi5zZigpKTtjYXNlIDM6Y2FzZSA0OnJldHVybiBwdShlLmIuc2YoKSx0LmIuc2YoKSl9cmV0dXJuIDB9ZnVuY3Rpb24gWjBuKHQpe3ZhciBlLG4scjtmb3Iocj10LmUuYy5sZW5ndGgsdC5hPXQyKENyLFtlZSxYcl0sWzQ4LDI1XSwxNSxbcixyXSwyKSxuPW5ldyBTKHQuYyk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjgyKSx0LmFbZS5jLmJdW2UuZC5iXSs9dShRKGUsKEpmKCksYzcpKSwxOSkuYX1mdW5jdGlvbiBKMG4odCxlLG4pe3ZyKG4sIkdyb3cgVHJlZSIsMSksdC5iPWUuZixqZShSZShRKGUsKFo4KCksZlMpKSkpPyh0LmM9bmV3IHZwLFdRdCh0LG51bGwpKTp0LmM9bmV3IHZwLHQuYT0hMSxYY2UodCxlLmYpLEp0KGUsdTd0LChObigpLCEhdC5hKSksb3Iobil9ZnVuY3Rpb24gdGduKHQsZSl7dmFyIG4scixzLG8saDtpZih0PT1udWxsKXJldHVybiBudWxsO2ZvcihoPU50KHhoLHlkLDI1LDIqZSwxNSwxKSxyPTAscz0wO3I8ZTsrK3Ipbj10W3JdPj40JjE1LG89dFtyXSYxNSxoW3MrK109WUF0W25dLGhbcysrXT1ZQXRbb107cmV0dXJuIE1oKGgsMCxoLmxlbmd0aCl9ZnVuY3Rpb24gZWduKHQsZSxuKXt2YXIgcixzLG87cmV0dXJuIHI9ZS5haygpLG89ZS5kZCgpLHM9ci4kaigpP0dwKHQsNCxyLG8sbnVsbCxERSh0LHIsbyxfdChyLDk5KSYmKHUociwxOCkuQmImS2EpIT0wKSwhMCk6R3AodCxyLktqKCk/MjoxLHIsbyxyLnpqKCksLTEsITApLG4/bi5FaShzKTpuPXMsbn1mdW5jdGlvbiBDdSh0KXt2YXIgZSxuO3JldHVybiB0Pj1LYT8oZT1SSSsodC1LYT4+MTAmMTAyMykmeXMsbj01NjMyMCsodC1LYSYxMDIzKSZ5cyxTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKygiIitTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKSk6U3RyaW5nLmZyb21DaGFyQ29kZSh0JnlzKX1mdW5jdGlvbiBuZ24odCxlKXskbSgpO3ZhciBuLHIscyxvO3JldHVybiBzPXUodShBaSh0LnIsZSksMjEpLDg0KSxzLmdjKCk+PTI/KHI9dShzLktjKCkuUGIoKSwxMTEpLG49dC51LkhjKChadSgpLG5BKSksbz10LnUuSGMoUTYpLCFyLmEmJiFuJiYocy5nYygpPT0yfHxvKSk6ITF9ZnVuY3Rpb24gRGFlKHQsZSxuLHIscyl7dmFyIG8saCxkO2ZvcihvPWd1ZSh0LGUsbixyLHMpLGQ9ITE7IW87KWJxKHQscywhMCksZD0hMCxvPWd1ZSh0LGUsbixyLHMpO2QmJmJxKHQscywhMSksaD1DaXQocyksaC5jLmxlbmd0aCE9MCYmKHQuZCYmdC5kLmxnKGgpLERhZSh0LHMsbixyLGgpKX1mdW5jdGlvbiBocSgpe2hxPVosU2Z0PW5ldyBhOShKMCwwKSxrQXQ9bmV3IGE5KCJESVJFQ1RFRCIsMSksVEF0PW5ldyBhOSgiVU5ESVJFQ1RFRCIsMikseUF0PW5ldyBhOSgiQVNTT0NJQVRJT04iLDMpLEVBdD1uZXcgYTkoIkdFTkVSQUxJWkFUSU9OIiw0KSx4QXQ9bmV3IGE5KCJERVBFTkRFTkNZIiw1KX1mdW5jdGlvbiByZ24odCxlKXt2YXIgbjtpZighVDEodCkpdGhyb3cgaXQobmV3IE5vKF9kZSkpO3N3aXRjaChuPVQxKHQpLGUuZyl7Y2FzZSAxOnJldHVybi0odC5qK3QuZik7Y2FzZSAyOnJldHVybiB0Lmktbi5nO2Nhc2UgMzpyZXR1cm4gdC5qLW4uZjtjYXNlIDQ6cmV0dXJuLSh0LmkrdC5nKX1yZXR1cm4gMH1mdW5jdGlvbiB4RSh0LGUpe3ZhciBuLHI7Zm9yKE9uKGUpLHI9dC5iLmMubGVuZ3RoLGxlKHQuYixlKTtyPjA7KXtpZihuPXIscj0oci0xKS8yfDAsdC5hLnVlKE5lKHQuYixyKSxlKTw9MClyZXR1cm4gY2godC5iLG4sZSksITA7Y2godC5iLG4sTmUodC5iLHIpKX1yZXR1cm4gY2godC5iLHIsZSksITB9ZnVuY3Rpb24gTzR0KHQsZSxuLHIpe3ZhciBzLG87aWYocz0wLG4pcz1Meih0LmFbbi5nXVtlLmddLHIpO2Vsc2UgZm9yKG89MDtvPGNWO28rKylzPWIuTWF0aC5tYXgocyxMeih0LmFbb11bZS5nXSxyKSk7cmV0dXJuIGU9PShLZigpLGV1KSYmdC5iJiYocz1iLk1hdGgubWF4KHMsdC5iLmEpKSxzfWZ1bmN0aW9uIGlnbih0LGUpe3ZhciBuLHIscyxvLGgsZDtyZXR1cm4gcz10Lmksbz1lLmksIXN8fCFvfHxzLmkhPW8uaXx8cy5pPT0odmUoKSxIbil8fHMuaT09KHZlKCksQm4pPyExOihoPXMuZy5hLG49aCtzLmouYSxkPW8uZy5hLHI9ZCtvLmouYSxoPD1yJiZuPj1kKX1mdW5jdGlvbiBQNHQodCxlLG4scil7dmFyIHM7aWYocz0hMSxyYShyKSYmKHM9ITAsRTgoZSxuLEJyKHIpKSksc3x8Tm0ocikmJihzPSEwLFA0dCh0LGUsbixyKSksc3x8X3QociwyMzYpJiYocz0hMCxyMihlLG4sdShyLDIzNikpKSwhcyl0aHJvdyBpdChuZXcgZmV0KEE4dCkpfWZ1bmN0aW9uIHNnbih0LGUpe3ZhciBuLHIscztpZihuPWUuSGgodC5hKSxuJiYocz1YZigoIW4uYiYmKG4uYj1uZXcga2woKGRuKCksUWEpLGNjLG4pKSxuLmIpLE5oKSxzIT1udWxsKSl7Zm9yKHI9MTtyPCgkdSgpLHZMdCkubGVuZ3RoOysrcilpZihobih2THRbcl0scykpcmV0dXJuIHJ9cmV0dXJuIDB9ZnVuY3Rpb24gYWduKHQsZSl7dmFyIG4scixzO2lmKG49ZS5IaCh0LmEpLG4mJihzPVhmKCghbi5iJiYobi5iPW5ldyBrbCgoZG4oKSxRYSksY2MsbikpLG4uYiksTmgpLHMhPW51bGwpKXtmb3Iocj0xO3I8KCR1KCksbUx0KS5sZW5ndGg7KytyKWlmKGhuKG1MdFtyXSxzKSlyZXR1cm4gcn1yZXR1cm4gMH1mdW5jdGlvbiBJYWUodCxlKXt2YXIgbixyLHMsbztpZihPbihlKSxvPXQuYS5nYygpLG88ZS5nYygpKWZvcihuPXQuYS5lYygpLktjKCk7bi5PYigpOylyPW4uUGIoKSxlLkhjKHIpJiZuLlFiKCk7ZWxzZSBmb3Iocz1lLktjKCk7cy5PYigpOylyPXMuUGIoKSx0LmEuQmMocikhPW51bGw7cmV0dXJuIG8hPXQuYS5nYygpfWZ1bmN0aW9uIE9hZSh0KXt2YXIgZSxuO3N3aXRjaChuPW5jKFlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbdC5pLm4sdC5uLHQuYV0pKSksZT10LmkuZCx0LmouZyl7Y2FzZSAxOm4uYi09ZS5kO2JyZWFrO2Nhc2UgMjpuLmErPWUuYzticmVhaztjYXNlIDM6bi5iKz1lLmE7YnJlYWs7Y2FzZSA0Om4uYS09ZS5ifXJldHVybiBufWZ1bmN0aW9uIG9nbih0KXt2YXIgZTtmb3IoZT0ocjYoKSx1KE1yKG5ldyBhcihscihqbyh0KS5hLktjKCksbmV3IHopKSksMTcpLmMuaSk7ZS5rPT0oVm4oKSx0YSk7KUp0KGUsKGFlKCksQU8pLChObigpLCEwKSksZT11KE1yKG5ldyBhcihscihqbyhlKS5hLktjKCksbmV3IHopKSksMTcpLmMuaX1mdW5jdGlvbiBxc3QodCxlLG4scil7dmFyIHMsbyxoLGQ7Zm9yKGQ9dF8oZSxyKSxoPWQuS2MoKTtoLk9iKCk7KXM9dShoLlBiKCksMTEpLHQuZFtzLnBdPXQuZFtzLnBdK3QuY1tuLnBdO2ZvcihkPXRfKG4sciksbz1kLktjKCk7by5PYigpOylzPXUoby5QYigpLDExKSx0LmRbcy5wXT10LmRbcy5wXS10LmNbZS5wXX1mdW5jdGlvbiBGNHQodCxlLG4pe3ZhciByLHM7Zm9yKHM9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBmZShycyx0LDEwLDExKSksdC5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSx4MShyLHIuaStlLHIuaituKTt2YSgoIXQuYiYmKHQuYj1uZXcgZmUoWXMsdCwxMiwzKSksdC5iKSxuZXcgQUd0KGUsbikpfWZ1bmN0aW9uIGNnbih0LGUsbixyKXt2YXIgcyxvO2ZvcihvPWUscz1vLmQ9PW51bGx8fHQuYS51ZShuLmQsby5kKT4wPzE6MDtvLmFbc10hPW47KW89by5hW3NdLHM9dC5hLnVlKG4uZCxvLmQpPjA/MTowO28uYVtzXT1yLHIuYj1uLmIsci5hWzBdPW4uYVswXSxyLmFbMV09bi5hWzFdLG4uYVswXT1udWxsLG4uYVsxXT1udWxsfWZ1bmN0aW9uIHVnbih0KXtadSgpO3ZhciBlLG47cmV0dXJuIGU9amkoc2csbHQoY3QoZVUsMSksb2UsMjczLDAsW0NiXSkpLCEoT0QoayQoZSx0KSk+MXx8KG49amkobkEsbHQoY3QoZVUsMSksb2UsMjczLDAsW2VBLFE2XSkpLE9EKGskKG4sdCkpPjEpKX1mdW5jdGlvbiBONHQodCxlKXt2YXIgbjtuPU5jKChQcCgpLFloKSx0KSxfdChuLDQ5OCk/a28oWWgsdCxuZXcgUUd0KHRoaXMsZSkpOmtvKFloLHQsdGhpcyksSHN0KHRoaXMsZSksZT09KGM4KCksYUx0KT8odGhpcy53Yj11KHRoaXMsMTkzOSksdShlLDE5NDEpKTp0aGlzLndiPShIcCgpLExuKX1mdW5jdGlvbiBsZ24odCl7dmFyIGUsbixyO2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7Zm9yKGU9bnVsbCxuPTA7bjxhQS5sZW5ndGg7KytuKXRyeXtyZXR1cm4gelZ0KGFBW25dLHQpfWNhdGNoKHMpe2lmKHM9V2kocyksX3QocywzMikpcj1zLGU9cjtlbHNlIHRocm93IGl0KHMpfXRocm93IGl0KG5ldyBXJChlKSl9ZnVuY3Rpb24gUGFlKCl7UGFlPVosVmdlPWx0KGN0KEFlLDEpLGVlLDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKSxHZ2U9bHQoY3QoQWUsMSksZWUsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIix3NiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pfWZ1bmN0aW9uIEZhZSh0KXt2YXIgZSxuLHI7ZT1obih0eXBlb2YgZSxfb3QpP251bGw6bmV3IHFhLGUmJihkOCgpLG49KHI9OTAwLHI+PVdnPyJlcnJvciI6cj49OTAwPyJ3YXJuIjpyPj04MDA/ImluZm8iOiJsb2ciKSx2WHQobix0LmEpLHQuYiYmTjV0KGUsbix0LmIsIkV4Y2VwdGlvbjogIiwhMCkpfWZ1bmN0aW9uIFEodCxlKXt2YXIgbixyO3JldHVybiByPSghdC5xJiYodC5xPW5ldyBfciksdHIodC5xLGUpKSxyPz8obj1lLndnKCksX3Qobiw0KSYmKG49PW51bGw/KCF0LnEmJih0LnE9bmV3IF9yKSxKeCh0LnEsZSkpOighdC5xJiYodC5xPW5ldyBfciksa2kodC5xLGUsbikpKSxuKX1mdW5jdGlvbiBXYSgpe1dhPVosRGQ9bmV3IF9NKCJQMV9DWUNMRV9CUkVBS0lORyIsMCksZ2I9bmV3IF9NKCJQMl9MQVlFUklORyIsMSksY3U9bmV3IF9NKCJQM19OT0RFX09SREVSSU5HIiwyKSxxYz1uZXcgX00oIlA0X05PREVfUExBQ0VNRU5UIiwzKSxJbz1uZXcgX00oIlA1X0VER0VfUk9VVElORyIsNCl9ZnVuY3Rpb24gTmFlKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocz1lPT0xP2NsdDpvbHQscj1zLmEuZWMoKS5LYygpO3IuT2IoKTspZm9yKG49dShyLlBiKCksMTAzKSxoPXUoQWkodC5mLmMsbiksMjEpLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDQ2KSxtdSh0LmIuYixvLmIpLG11KHQuYi5hLHUoby5iLDgxKS5kKX1mdW5jdGlvbiBoZ24odCxlKXtIOSgpO3ZhciBuO2lmKHQuYz09ZS5jKXtpZih0LmI9PWUuYnx8TmNuKHQuYixlLmIpKXtpZihuPUdYZSh0LmIpPzE6LTEsdC5hJiYhZS5hKXJldHVybiBuO2lmKCF0LmEmJmUuYSlyZXR1cm4tbn1yZXR1cm4gcHUodC5iLmcsZS5iLmcpfWVsc2UgcmV0dXJuIE1zKHQuYyxlLmMpfWZ1bmN0aW9uIGZnbih0LGUpe3ZhciBuO3ZyKGUsIkhpZXJhcmNoaWNhbCBwb3J0IHBvc2l0aW9uIHByb2Nlc3NpbmciLDEpLG49dC5iLG4uYy5sZW5ndGg+MCYmZWxlKChBbigwLG4uYy5sZW5ndGgpLHUobi5jWzBdLDI5KSksdCksbi5jLmxlbmd0aD4xJiZlbGUodShOZShuLG4uYy5sZW5ndGgtMSksMjkpLHQpLG9yKGUpfWZ1bmN0aW9uIEJhZSh0LGUpe3ZhciBuLHIscztpZihSNHQodCxlKSlyZXR1cm4hMDtmb3Iocj1uZXcgUyhlKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwzMykscz13YWUobiksVHEodCxuLHMpfHxHcmUodCxuKS10Lmc8PXQuYSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBjSSgpe2NJPVosSEc9KGRhdCgpLHdTdCksYWZ0PSQzZSxzZnQ9ajNlLGxTdD1OM2UsaWZ0PVIzZSx1U3Q9bmV3IE93KDgpLEwzZT1uZXcgZW8oKHVpKCksVTIpLHVTdCksTTNlPW5ldyBlbyhXMiw4KSxEM2U9cFN0LG9TdD1JM2UsY1N0PU8zZSxBM2U9bmV3IGVvKFFPLChObigpLCExKSl9ZnVuY3Rpb24gZnEoKXtmcT1aLFBTdD1uZXcgT3coMTUpLHI0ZT1uZXcgZW8oKHVpKCksVTIpLFBTdCksaTRlPW5ldyBlbyhXMiwxNSksRlN0PW5ldyBlbyhaRyxwZSgwKSksRFN0PUdTdCxlNGU9RzIsbjRlPXhiLE1TdD1uZXcgZW8oVzYsY2RlKSxJU3Q9S0csT1N0PWM1LGxmdD1jNGUsdDRlPVlHfWZ1bmN0aW9uIGUwKHQpe2lmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaSE9MXx8KCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pIT0xKXRocm93IGl0KG5ldyBGbihydXQpKTtyZXR1cm4gRG8odShBdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSl9ZnVuY3Rpb24gUmFlKHQpe2lmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaSE9MXx8KCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pIT0xKXRocm93IGl0KG5ldyBGbihydXQpKTtyZXR1cm4gUkQodShBdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSl9ZnVuY3Rpb24gamFlKHQpe2lmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaSE9MXx8KCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pIT0xKXRocm93IGl0KG5ldyBGbihydXQpKTtyZXR1cm4gUkQodShBdCgoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLDApLDgyKSl9ZnVuY3Rpb24gdGIodCl7aWYoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKS5pIT0xfHwoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLmkhPTEpdGhyb3cgaXQobmV3IEZuKHJ1dCkpO3JldHVybiBEbyh1KEF0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKX1mdW5jdGlvbiBCNHQodCxlLG4pe3ZhciByLHMsbztpZigrK3QuaixzPXQuVmkoKSxlPj1zfHxlPDApdGhyb3cgaXQobmV3IHlvKGl1dCtlK0QyK3MpKTtpZihuPj1zfHxuPDApdGhyb3cgaXQobmV3IHlvKHN1dCtuK0QyK3MpKTtyZXR1cm4gZSE9bj9yPShvPXQuVGkobiksdC5IaShlLG8pLG8pOnI9dC5PaShuKSxyfWZ1bmN0aW9uICRhZSh0KXt2YXIgZSxuLHI7aWYocj10LHQpZm9yKGU9MCxuPXQuVWcoKTtuO249bi5VZygpKXtpZigrK2U+dm90KXJldHVybiAkYWUobik7aWYocj1uLG49PXQpdGhyb3cgaXQobmV3IE5vKCJUaGVyZSBpcyBhIGN5Y2xlIGluIHRoZSBjb250YWlubWVudCBoaWVyYXJjaHkgb2YgIit0KSl9cmV0dXJuIHJ9ZnVuY3Rpb24gZWIodCl7dmFyIGUsbixyO2ZvcihyPW5ldyBmMihZYSwiWyIsIl0iKSxuPXQuS2MoKTtuLk9iKCk7KWU9bi5QYigpLCQwKHIsVnQoZSk9PT1WdCh0KT8iKHRoaXMgQ29sbGVjdGlvbikiOmU9PW51bGw/X3U6JG8oZSkpO3JldHVybiByLmE/ci5lLmxlbmd0aD09MD9yLmEuYTpyLmEuYSsoIiIrci5lKTpyLmN9ZnVuY3Rpb24gUjR0KHQsZSl7dmFyIG4scjtpZihyPSExLGUuZ2MoKTwyKXJldHVybiExO2ZvcihuPTA7bjxlLmdjKCk7bisrKW48ZS5nYygpLTE/cj1yfFRxKHQsdShlLlhiKG4pLDMzKSx1KGUuWGIobisxKSwzMykpOnI9cnxUcSh0LHUoZS5YYihuKSwzMyksdShlLlhiKDApLDMzKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gemFlKHQsZSl7dmFyIG47ZSE9dC5hPyhuPW51bGwsdC5hJiYobj11KHQuYSw0OSkuaWgodCw0LGkxLG4pKSxlJiYobj11KGUsNDkpLmdoKHQsNCxpMSxuKSksbj1YeXQodCxlLG4pLG4mJm4uRmkoKSk6dC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSwxLGUsZSkpfWZ1bmN0aW9uIGo0dCh0LGUpe3ZhciBuO2UhPXQuZT8odC5lJiZYSnQoQXZ0KHQuZSksdCksZSYmKCFlLmImJihlLmI9bmV3IG1SKG5ldyBhZXQpKSxsWXQoZS5iLHQpKSxuPUVkbih0LGUsbnVsbCksbiYmbi5GaSgpKTp0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDQsZSxlKSl9ZnVuY3Rpb24gZnkodCl7dmFyIGUsbixyO2ZvcihuPXQubGVuZ3RoLHI9MDtyPG4mJihScihyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocik8PTMyKTspKytyO2ZvcihlPW47ZT5yJiYoUnIoZS0xLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZS0xKTw9MzIpOyktLWU7cmV0dXJuIHI+MHx8ZTxuP3Quc3Vic3RyKHIsZS1yKTp0fWZ1bmN0aW9uIGRnbih0LGUpe3ZhciBuO249ZS5vLEJwKHQuZik/KHQuai5hPWIuTWF0aC5tYXgodC5qLmEsbi5hKSx0LmouYis9bi5iLHQuZC5jLmxlbmd0aD4xJiYodC5qLmIrPXQuZSkpOih0LmouYSs9bi5hLHQuai5iPWIuTWF0aC5tYXgodC5qLmIsbi5iKSx0LmQuYy5sZW5ndGg+MSYmKHQuai5hKz10LmUpKX1mdW5jdGlvbiBuYigpe25iPVoseTJlPWx0KGN0KFhhLDEpLHhjLDYxLDAsWyh2ZSgpLFBuKSxIbixtcl0pLG0yZT1sdChjdChYYSwxKSx4Yyw2MSwwLFtIbixtcixCbl0pLHgyZT1sdChjdChYYSwxKSx4Yyw2MSwwLFttcixCbixQbl0pLGsyZT1sdChjdChYYSwxKSx4Yyw2MSwwLFtCbixQbixIbl0pfWZ1bmN0aW9uIGdnbih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQztpZihoPXQuYy5kLGQ9dC5kLmQsaC5qIT1kLmopZm9yKEM9dC5iLHM9aC5qLHY9bnVsbDtzIT1kLmo7KXY9ZT09MD9PeihzKTpvM3Qocyksbz1CM3QocyxDLmRbcy5nXSxuKSxrPUIzdCh2LEMuZFt2LmddLG4pLHJpKHIsTGkobyxrKSkscz12fWZ1bmN0aW9uIHBnbih0LGUsbixyKXt2YXIgcyxvLGgsZCx2O3JldHVybiBoPVlzZSh0LmEsZSxuKSxkPXUoaC5hLDE5KS5hLG89dShoLmIsMTkpLmEsciYmKHY9dShRKGUsKGFlKCksSnUpKSwxMCkscz11KFEobixKdSksMTApLHYmJnMmJih0SnQodC5iLHYscyksZCs9dC5iLmksbys9dC5iLmUpKSxkPm99ZnVuY3Rpb24gcWFlKHQpe3ZhciBlLG4scixzLG8saCxkLHYsaztmb3IodGhpcy5hPXdzZSh0KSx0aGlzLmI9bmV3IGhlLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWZvcihlPW5bcl0sbz1uZXcgaGUsbGUodGhpcy5iLG8pLGQ9ZSx2PTAsaz1kLmxlbmd0aDt2PGs7Kyt2KWg9ZFt2XSxsZShvLG5ldyBCdShoLmopKX1mdW5jdGlvbiBiZ24odCxlLG4pe3ZhciByLHMsbztyZXR1cm4gbz0wLHI9bltlXSxlPG4ubGVuZ3RoLTEmJihzPW5bZSsxXSx0LmJbZV0/KG89enhuKHQuZCxyLHMpLG8rPWNydCh0LmEsciwodmUoKSxIbikpLG8rPWNydCh0LmEscyxCbikpOm89b29uKHQuYSxyLHMpKSx0LmNbZV0mJihvKz1NYW4odC5hLHIpKSxvfWZ1bmN0aW9uIHdnbih0LGUsbixyLHMpe3ZhciBvLGgsZCx2O2Zvcih2PW51bGwsZD1uZXcgUyhyKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoSihkKSw0NDEpLGghPW4mJlJvKGguZSxzLDApIT0tMSl7dj1oO2JyZWFrfW89R3J0KHMpLE9hKG8sbi5iKSxvYShvLHYuYiksbG4odC5hLHMsbmV3IEZqKG8sZSxuLmYpKX1mdW5jdGlvbiBIYWUodCl7Zm9yKDt0LmcuYyE9MCYmdC5kLmMhPTA7KXludCh0LmcpLmM+eW50KHQuZCkuYz8odC5pKz10LmcuYyxzc3QodC5kKSk6eW50KHQuZCkuYz55bnQodC5nKS5jPyh0LmUrPXQuZC5jLHNzdCh0LmcpKToodC5pKz1tS3QodC5nKSx0LmUrPW1LdCh0LmQpLHNzdCh0LmcpLHNzdCh0LmQpKX1mdW5jdGlvbiB2Z24odCxlLG4pe3ZhciByLHMsbyxoO2ZvcihvPWUucSxoPWUucixuZXcgaTIoKFVmKCksbWIpLGUsbywxKSxuZXcgaTIobWIsbyxoLDEpLHM9bmV3IFMobik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTEyKSxyIT1vJiZyIT1lJiZyIT1oJiYod3h0KHQuYSxyLGUpLHd4dCh0LmEscixoKSl9ZnVuY3Rpb24gVmFlKHQsZSxuLHIpe3QuYS5kPWIuTWF0aC5taW4oZSxuKSx0LmEuYT1iLk1hdGgubWF4KGUsciktdC5hLmQsZTxuPyh0LmI9LjUqKGUrbiksdC5nPU1jdCp0LmIrLjkqZSx0LmY9TWN0KnQuYisuOSpuKToodC5iPS41KihlK3IpLHQuZz1NY3QqdC5iKy45KnIsdC5mPU1jdCp0LmIrLjkqZSl9ZnVuY3Rpb24gbWduKCl7UUg9e30sIUFycmF5LmlzQXJyYXkmJihBcnJheS5pc0FycmF5PWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT0iW29iamVjdCBBcnJheV0ifSk7ZnVuY3Rpb24gdCgpe3JldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKX0hRGF0ZS5ub3cmJihEYXRlLm5vdz10KX1mdW5jdGlvbiBHYWUodCxlKXt2YXIgbixyO3I9dShRKGUsKFRlKCksY3MpKSw5OCksSnQoZSwoYWUoKSxsQ3QpLHIpLG49ZS5lLG4mJihscyhuZXcgVG4obnVsbCxuZXcgX24obi5hLDE2KSksbmV3IGdzKHQpKSxscyhXbyhuZXcgVG4obnVsbCxuZXcgX24obi5iLDE2KSksbmV3IEc1KSxuZXcgcWkodCkpKX1mdW5jdGlvbiB5Z24odCl7dmFyIGUsbixyLHM7aWYoYjgodShRKHQuYiwoVGUoKSxXbCkpLDEwMykpKXJldHVybiAwO2ZvcihlPTAscj1uZXcgUyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEwKSxuLms9PShWbigpLE9zKSYmKHM9bi5vLmEsZT1iLk1hdGgubWF4KGUscykpO3JldHVybiBlfWZ1bmN0aW9uIHhnbih0KXtzd2l0Y2godShRKHQsKFRlKCksdXUpKSwxNjMpLmcpe2Nhc2UgMTpKdCh0LHV1LChkaCgpLFRTKSk7YnJlYWs7Y2FzZSAyOkp0KHQsdXUsKGRoKCksankpKTticmVhaztjYXNlIDM6SnQodCx1dSwoZGgoKSxFUykpO2JyZWFrO2Nhc2UgNDpKdCh0LHV1LChkaCgpLGJiKSl9fWZ1bmN0aW9uIGtFKCl7a0U9WixtUz1uZXcgZTkoSjAsMCksV1R0PW5ldyBlOSh5NiwxKSxYVHQ9bmV3IGU5KHg2LDIpLEtUdD1uZXcgZTkoIkxFRlRfUklHSFRfQ09OU1RSQUlOVF9MT0NLSU5HIiwzKSxZVHQ9bmV3IGU5KCJMRUZUX1JJR0hUX0NPTk5FQ1RJT05fTE9DS0lORyIsNCksVVR0PW5ldyBlOShMMWUsNSl9ZnVuY3Rpb24gVWFlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsaztkPW4uYS8yLG89bi5iLzIscj1iLk1hdGguYWJzKGUuYS10LmEpLHM9Yi5NYXRoLmFicyhlLmItdC5iKSx2PTEsaz0xLHI+ZCYmKHY9ZC9yKSxzPm8mJihrPW8vcyksaD1iLk1hdGgubWluKHYsayksdC5hKz1oKihlLmEtdC5hKSx0LmIrPWgqKGUuYi10LmIpfWZ1bmN0aW9uIGtnbih0LGUsbixyLHMpe3ZhciBvLGg7Zm9yKGg9ITEsbz11KE5lKG4uYiwwKSwzMyk7QnluKHQsZSxvLHIscykmJihoPSEwLGUwbihuLG8pLG4uYi5jLmxlbmd0aCE9MCk7KW89dShOZShuLmIsMCksMzMpO3JldHVybiBuLmIuYy5sZW5ndGg9PTAmJnNJKG4uaixuKSxoJiZucShlLnEpLGh9ZnVuY3Rpb24gRWduKHQsZSl7azQoKTt2YXIgbixyLHMsbztpZihlLmI8MilyZXR1cm4hMTtmb3Iobz1laShlLDApLG49dSh0aShvKSw4KSxyPW47by5iIT1vLmQuYzspe2lmKHM9dSh0aShvKSw4KSxjYXQodCxyLHMpKXJldHVybiEwO3I9c31yZXR1cm4hIWNhdCh0LHIsbil9ZnVuY3Rpb24gJDR0KHQsZSxuLHIpe3ZhciBzLG87cmV0dXJuIG49PTA/KCF0Lm8mJih0Lm89bmV3IF9sKChKYygpLFNiKSxIdix0LDApKSxPaih0Lm8sZSxyKSk6KG89dSh5bigocz11KERuKHQsMTYpLDI2KSxzfHx0LnpoKCkpLG4pLDY2KSxvLk5qKCkuUmoodCxzdSh0KSxuLUpuKHQuemgoKSksZSxyKSl9ZnVuY3Rpb24gSHN0KHQsZSl7dmFyIG47ZSE9dC5zYj8obj1udWxsLHQuc2ImJihuPXUodC5zYiw0OSkuaWgodCwxLHNBLG4pKSxlJiYobj11KGUsNDkpLmdoKHQsMSxzQSxuKSksbj10M3QodCxlLG4pLG4mJm4uRmkoKSk6dC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSw0LGUsZSkpfWZ1bmN0aW9uIFRnbih0LGUpe3ZhciBuLHIscyxvO2lmKGUpcz1IMChlLCJ4Iiksbj1uZXcgdnp0KHQpLFY4KG4uYSwoT24ocykscykpLG89SDAoZSwieSIpLHI9bmV3IG16dCh0KSxVOChyLmEsKE9uKG8pLG8pKTtlbHNlIHRocm93IGl0KG5ldyB1ZCgiQWxsIGVkZ2Ugc2VjdGlvbnMgbmVlZCBhbiBlbmQgcG9pbnQuIikpfWZ1bmN0aW9uIENnbih0LGUpe3ZhciBuLHIscyxvO2lmKGUpcz1IMChlLCJ4Iiksbj1uZXcgcHp0KHQpLEc4KG4uYSwoT24ocykscykpLG89SDAoZSwieSIpLHI9bmV3IGJ6dCh0KSxXOChyLmEsKE9uKG8pLG8pKTtlbHNlIHRocm93IGl0KG5ldyB1ZCgiQWxsIGVkZ2Ugc2VjdGlvbnMgbmVlZCBhIHN0YXJ0IHBvaW50LiIpKX1mdW5jdGlvbiBfZ24odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iocj1BcmUodCksbz0wLGQ9ci5sZW5ndGg7bzxkOysrbylGYWUoZSk7Zm9yKHY9ISQxJiZ0LmU/JDE/bnVsbDp0LmQ6bnVsbDt2Oyl7Zm9yKG49QXJlKHYpLHM9MCxoPW4ubGVuZ3RoO3M8aDsrK3MpRmFlKGUpO3Y9ISQxJiZ2LmU/JDE/bnVsbDp2LmQ6bnVsbH19ZnVuY3Rpb24gVm4oKXtWbj1aLE9zPW5ldyBRQygiTk9STUFMIiwwKSx0YT1uZXcgUUMoIkxPTkdfRURHRSIsMSksa3M9bmV3IFFDKCJFWFRFUk5BTF9QT1JUIiwyKSxIYz1uZXcgUUMoIk5PUlRIX1NPVVRIX1BPUlQiLDMpLExsPW5ldyBRQygiTEFCRUwiLDQpLHoxPW5ldyBRQygiQlJFQUtJTkdfUE9JTlQiLDUpfWZ1bmN0aW9uIFNnbih0KXt2YXIgZSxuLHIscztpZihlPSExLFVzKHQsKGFlKCksa1MpKSlmb3Iobj11KFEodCxrUyksODMpLHM9bmV3IFModC5qKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMSksTTJuKHIpJiYoZXx8KEdwbihOYSh0KSksZT0hMCksRGZuKHUobi54YyhyKSwzMDYpKSl9ZnVuY3Rpb24gQWduKHQsZSxuKXt2YXIgcjt2cihuLCJTZWxmLUxvb3Agcm91dGluZyIsMSkscj1laG4oZSksZGooUShlLCgkJCgpLFdTKSkpLGxzKHd1KFJpKFJpKFdvKG5ldyBUbihudWxsLG5ldyBfbihlLmIsMTYpKSxuZXcgTWspLG5ldyB0eCksbmV3ICRUKSxuZXcgZFgpLG5ldyB0R3QodCxyKSksb3Iobil9ZnVuY3Rpb24gTGduKHQpe3ZhciBlLG4scixzLG8saCxkLHYsaztyZXR1cm4gaz1ENHQodCksbj10LmUsbz1uIT1udWxsLG8mJkU4KGssTUgsdC5lKSxkPXQuayxoPSEhZCxoJiZFOChrLCJ0eXBlIixibnQodC5rKSkscj13TSh0LmopLHM9IXIscyYmKHY9bmV3IEVnLFlmKGssbnV0LHYpLGU9bmV3IGp6dCh2KSx2YSh0LmosZSkpLGt9ZnVuY3Rpb24gTWduKHQpe3ZhciBlLG4scixzO2ZvcihzPXFwKChqbCh0LmdjKCksInNpemUiKSxuZXcgSW0pLDEyMykscj0hMCxuPVJ3KHQpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDQyKSxyfHwocy5hKz1ZYSkscj0hMSxoYyhxcChoYyhzLGUuY2QoKSksNjEpLGUuZGQoKSk7cmV0dXJuKHMuYSs9In0iLHMpLmF9ZnVuY3Rpb24gV2FlKHQsZSl7dmFyIG4scixzO3JldHVybiBlJj02MyxlPDIyPyhuPXQubDw8ZSxyPXQubTw8ZXx0Lmw+PjIyLWUscz10Lmg8PGV8dC5tPj4yMi1lKTplPDQ0PyhuPTAscj10Lmw8PGUtMjIscz10Lm08PGUtMjJ8dC5sPj40NC1lKToobj0wLHI9MCxzPXQubDw8ZS00NCksaXUobiZobCxyJmhsLHMmWjApfWZ1bmN0aW9uIGR5KHQpe2lmKGNFdD09bnVsbCYmKGNFdD1uZXcgUmVnRXhwKCJeXFxzKlsrLV0/KE5hTnxJbmZpbml0eXwoKFxcZCtcXC4/XFxkKil8KFxcLlxcZCspKShbZUVdWystXT9cXGQrKT9bZERmRl0/KVxccyokIikpLCFjRXQudGVzdCh0KSl0aHJvdyBpdChuZXcgbGQoeXYrdCsnIicpKTtyZXR1cm4gcGFyc2VGbG9hdCh0KX1mdW5jdGlvbiBEZ24odCl7dmFyIGUsbixyLHM7Zm9yKGU9bmV3IGhlLG49TnQocGwsbzAsMjUsdC5hLmMubGVuZ3RoLDE2LDEpLGR2dChuLG4ubGVuZ3RoKSxzPW5ldyBTKHQuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTIxKSxuW3IuZF18fChlLmNbZS5jLmxlbmd0aF09cixyc2UodCxyLG4pKTtyZXR1cm4gZX1mdW5jdGlvbiBJZ24odCxlKXt2YXIgbixyLHMsbztmb3Iobz1lLmIuaix0LmE9TnQoQ3IsWHIsMjUsby5jLmxlbmd0aCwxNSwxKSxzPTAscj0wO3I8by5jLmxlbmd0aDtyKyspbj0oQW4ocixvLmMubGVuZ3RoKSx1KG8uY1tyXSwxMSkpLG4uZS5jLmxlbmd0aD09MCYmbi5nLmMubGVuZ3RoPT0wP3MrPTE6cys9Myx0LmFbcl09c31mdW5jdGlvbiBkcSgpe2RxPVosUGx0PW5ldyBKQygiQUxXQVlTX1VQIiwwKSxPbHQ9bmV3IEpDKCJBTFdBWVNfRE9XTiIsMSksTmx0PW5ldyBKQygiRElSRUNUSU9OX1VQIiwyKSxGbHQ9bmV3IEpDKCJESVJFQ1RJT05fRE9XTiIsMyksQmx0PW5ldyBKQygiU01BUlRfVVAiLDQpLFVWPW5ldyBKQygiU01BUlRfRE9XTiIsNSl9ZnVuY3Rpb24gT2duKHQsZSl7aWYodDwwfHxlPDApdGhyb3cgaXQobmV3IEZuKCJrIGFuZCBuIG11c3QgYmUgcG9zaXRpdmUiKSk7aWYoZT50KXRocm93IGl0KG5ldyBGbigiayBtdXN0IGJlIHNtYWxsZXIgdGhhbiBuIikpO3JldHVybiBlPT0wfHxlPT10PzE6dD09MD8wOmc0dCh0KS8oZzR0KGUpKmc0dCh0LWUpKX1mdW5jdGlvbiB6NHQodCxlKXt2YXIgbixyLHMsbztmb3Iobj1uZXcgbDJ0KHQpO24uZz09bnVsbCYmIW4uYz9IdnQobik6bi5nPT1udWxsfHxuLmkhPTAmJnUobi5nW24uaS0xXSw0NykuT2IoKTspaWYobz11KHdxKG4pLDU2KSxfdChvLDE2MCkpZm9yKHI9dShvLDE2MCkscz0wO3M8ZS5sZW5ndGg7cysrKWVbc10ub2cocil9ZnVuY3Rpb24gVnN0KHQpe3ZhciBlO3JldHVybiB0LkRiJjY0P1hpdCh0KTooZT1uZXcgX2goWGl0KHQpKSxlLmErPSIgKGhlaWdodDogIiwkMyhlLHQuZiksZS5hKz0iLCB3aWR0aDogIiwkMyhlLHQuZyksZS5hKz0iLCB4OiAiLCQzKGUsdC5pKSxlLmErPSIsIHk6ICIsJDMoZSx0LmopLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gUGduKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihlPW5ldyBhMixyPXQscz0wLG89ci5sZW5ndGg7czxvOysrcylpZihuPXJbc10saD1McihuLmNkKCkpLGQ9bTIoZSxoLExyKG4uZGQoKSkpLGQhPW51bGwpdGhyb3cgaXQobmV3IEZuKCJkdXBsaWNhdGUga2V5OiAiK2gpKTt0aGlzLmI9KHduKCksbmV3IHEoZSkpfWZ1bmN0aW9uIEZnbih0KXt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIF91O2ZvcihvPW5ldyBmMihZYSwiWyIsIl0iKSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sJDAobyxTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIHE0dCgpe3E0dD1aLGI3dD0oWiQoKSxnViksYWJlPW5ldyBtbihKcSxiN3QpLHBlKDEpLHNiZT1uZXcgbW4ocDZ0LHBlKDMwMCkpLHBlKDApLHViZT1uZXcgbW4oYjZ0LHBlKDApKSxsYmU9bmV3IG1uKHFvdCxFZCksb2JlPW5ldyBtbihIb3QsNSksaGJlPWdWLGNiZT10bHR9ZnVuY3Rpb24gWWFlKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocz1lPT0xP2NsdDpvbHQscj1zLmEuZWMoKS5LYygpO3IuT2IoKTspZm9yKG49dShyLlBiKCksMTAzKSxoPXUoQWkodC5mLmMsbiksMjEpLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDQ2KSxsZSh0LmIuYix1KG8uYiw4MSkpLGxlKHQuYi5hLHUoby5iLDgxKS5kKX1mdW5jdGlvbiBOZ24odCxlKXt2YXIgbjtpZihlIT1udWxsJiYhdC5jLllqKCkud2ooZSkpdGhyb3cgbj1fdChlLDU2KT91KGUsNTYpLlRnKCkuemI6SXAob2woZSkpLGl0KG5ldyBpOChsYit0LmMubmUoKSsiJ3MgdHlwZSAnIit0LmMuWWooKS5uZSgpKyInIGRvZXMgbm90IHBlcm1pdCBhIHZhbHVlIG9mIHR5cGUgJyIrbisiJyIpKX1mdW5jdGlvbiBCZ24odCxlLG4pe3ZhciByLHM7Zm9yKHM9bmV3IGRhKHQuYiwwKTtzLmI8cy5kLmdjKCk7KXI9KFpuKHMuYjxzLmQuZ2MoKSksdShzLmQuWGIocy5jPXMuYisrKSw3MCkpLFZ0KFEociwoYWUoKSxjQ3QpKSk9PT1WdChlKSYmKFk0dChyLm4sTmEodC5jLmkpLG4pLENsKHMpLGxlKGUuYixyKSl9ZnVuY3Rpb24gUmduKHQsZSl7aWYoZS5hKXN3aXRjaCh1KFEoZS5iLChhZSgpLGxDdCkpLDk4KS5nKXtjYXNlIDA6Y2FzZSAxOnMwbihlKTtjYXNlIDI6bHMobmV3IFRuKG51bGwsbmV3IF9uKGUuZCwxNikpLG5ldyB5TiksamJuKHQuYSxlKX1lbHNlIGxzKG5ldyBUbihudWxsLG5ldyBfbihlLmQsMTYpKSxuZXcgeU4pfWZ1bmN0aW9uIEthZSh0KXt2YXIgZSxuO3JldHVybiBuPWIuTWF0aC5zcXJ0KCh0Lms9PW51bGwmJih0Lms9Znl0KHQsbmV3IHVRKSksWHQodC5rKS8odC5iKih0Lmc9PW51bGwmJih0Lmc9X25lKHQsbmV3IEdOKSksWHQodC5nKSkpKSksZT1BcihUdShiLk1hdGgucm91bmQobikpKSxlPWIuTWF0aC5taW4oZSx0LmYpLGV9ZnVuY3Rpb24gTWMoKXtqdSgpLGN3dC5jYWxsKHRoaXMpLHRoaXMuaj0odmUoKSxabyksdGhpcy5hPW5ldyBDYSxuZXcgbmV0LHRoaXMuZj0oamwoMixreSksbmV3IFhjKDIpKSx0aGlzLmU9KGpsKDQsa3kpLG5ldyBYYyg0KSksdGhpcy5nPShqbCg0LGt5KSxuZXcgWGMoNCkpLHRoaXMuYj1uZXcgY0d0KHRoaXMuZSx0aGlzLmcpfWZ1bmN0aW9uIGpnbih0LGUpe3ZhciBuLHI7cmV0dXJuIShqZShSZShRKGUsKGFlKCkscTEpKSkpfHwocj1lLmMuaSx0PT0oZGgoKSxFUykmJnIuaz09KFZuKCksTGwpKXx8KG49dShRKHIsKFRlKCksdXUpKSwxNjMpLG49PWJiKSl9ZnVuY3Rpb24gJGduKHQsZSl7dmFyIG4scjtyZXR1cm4hKGplKFJlKFEoZSwoYWUoKSxxMSkpKSl8fChyPWUuZC5pLHQ9PShkaCgpLFRTKSYmci5rPT0oVm4oKSxMbCkpfHwobj11KFEociwoVGUoKSx1dSkpLDE2Myksbj09ankpKX1mdW5jdGlvbiB6Z24odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3IoaD10LmQsdj10Lm8sZD1uZXcgYWgoLWguYiwtaC5kLGguYit2LmEraC5jLGguZCt2LmIraC5hKSxyPWUscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sbiYmZ18oZCxuLmkpO2guYj0tZC5jLGguZD0tZC5kLGguYz1kLmItaC5iLXYuYSxoLmE9ZC5hLWguZC12LmJ9ZnVuY3Rpb24gdUkoKXt1ST1aLHJTdD1uZXcgSU0oIkNFTlRFUl9ESVNUQU5DRSIsMCksbmZ0PW5ldyBJTSgiQ0lSQ0xFX1VOREVSTEFQIiwxKSxzU3Q9bmV3IElNKCJSRUNUQU5HTEVfVU5ERVJMQVAiLDIpLHJmdD1uZXcgSU0oIklOVkVSVEVEX09WRVJMQVAiLDMpLGlTdD1uZXcgSU0oIk1JTklNVU1fUk9PVF9ESVNUQU5DRSIsNCl9ZnVuY3Rpb24gcWduKHQpe3E1dCgpO3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gbnVsbDtmb3Iocj10Lmxlbmd0aCxzPXIqMixlPU50KHhoLHlkLDI1LHMsMTUsMSksbj0wO248cjtuKyspbz10W25dLG88MCYmKG8rPTI1NiksZVtuKjJdPXlVW28+PjRdLGVbbioyKzFdPXlVW28mMTVdO3JldHVybiBNaChlLDAsZS5sZW5ndGgpfWZ1bmN0aW9uIEhnbih0KXtjJCgpO3ZhciBlLG4scjtzd2l0Y2gocj10LmMubGVuZ3RoLHIpe2Nhc2UgMDpyZXR1cm4gQWdlO2Nhc2UgMTpyZXR1cm4gZT11KElvZShuZXcgUyh0KSksNDIpLGRlbihlLmNkKCksZS5kZCgpKTtkZWZhdWx0OnJldHVybiBuPXUoUDEodCxOdChQMixIcSw0Mix0LmMubGVuZ3RoLDAsMSkpLDE2NSksbmV3IHVldChuKX19ZnVuY3Rpb24gVmduKHQpe3ZhciBlLG4scixzLG8saDtmb3IoZT1uZXcgQjMsbj1uZXcgQjMsVXAoZSx0KSxVcChuLHQpO24uYiE9bi5jOylmb3Iocz11KEh4KG4pLDM3KSxoPW5ldyBTKHMuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLG8uZSYmKHI9by5lLFVwKGUsciksVXAobixyKSk7cmV0dXJuIGV9ZnVuY3Rpb24gR2codCxlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuICR4KHQuaiwoanUoKSwkN3QpKTtjYXNlIDI6cmV0dXJuICR4KHQuaiwoanUoKSxSN3QpKTtjYXNlIDM6cmV0dXJuICR4KHQuaiwoanUoKSxxN3QpKTtjYXNlIDQ6cmV0dXJuICR4KHQuaiwoanUoKSxIN3QpKTtkZWZhdWx0OnJldHVybiB3bigpLHduKCksaW99fWZ1bmN0aW9uIEdnbih0LGUpe3ZhciBuLHIscztuPWNlbihlLHQuZSkscj11KHRyKHQuZy5mLG4pLDE5KS5hLHM9dC5hLmMubGVuZ3RoLTEsdC5hLmMubGVuZ3RoIT0wJiZ1KE5lKHQuYSxzKSwyODcpLmM9PXI/KCsrdShOZSh0LmEscyksMjg3KS5hLCsrdShOZSh0LmEscyksMjg3KS5iKTpsZSh0LmEsbmV3IEFXdChyKSl9ZnVuY3Rpb24gVWduKHQsZSxuKXt2YXIgcixzO3JldHVybiByPVp2bih0LGUsbiksciE9MD9yOlVzKGUsKGFlKCksVGMpKSYmVXMobixUYyk/KHM9cHUodShRKGUsVGMpLDE5KS5hLHUoUShuLFRjKSwxOSkuYSksczwwP2tJKHQsZSxuKTpzPjAmJmtJKHQsbixlKSxzKTpfYm4odCxlLG4pfWZ1bmN0aW9uIFhhZSh0LGUsbil7dmFyIHIscyxvLGg7aWYoZS5iIT0wKXtmb3Iocj1uZXcgWmksaD1laShlLDApO2guYiE9aC5kLmM7KW89dSh0aShoKSw4NiksVWEocixFeXQobykpLHM9by5lLHMuYT11KFEobywoZmMoKSwkaHQpKSwxOSkuYSxzLmI9dShRKG8sb190KSwxOSkuYTtYYWUodCxyLFJjKG4sci5iL3QuYXwwKSl9fWZ1bmN0aW9uIFFhZSh0LGUpe3ZhciBuLHIscyxvLGg7aWYodC5lPD1lfHxaaW4odCx0LmcsZSkpcmV0dXJuIHQuZztmb3Iobz10LnIscj10LmcsaD10LnIscz0oby1yKS8yK3I7cisxPG87KW49X18odCxzLCExKSxuLmI8PXMmJm4uYTw9ZT8oaD1zLG89cyk6cj1zLHM9KG8tcikvMityO3JldHVybiBofWZ1bmN0aW9uIFdnbih0LGUsbil7dmFyIHI7cj1idWUodCxlLCEwKSx2cihuLCJSZWN1cnNpdmUgR3JhcGggTGF5b3V0IixyKSx6NHQoZSxsdChjdChDU3QsMSksRGUsNTI3LDAsW25ldyB0TV0pKSxvMihlLCh1aSgpLE83KSl8fHo0dChlLGx0KGN0KENTdCwxKSxEZSw1MjcsMCxbbmV3IERaXSkpLER4dCh0LGUsbnVsbCxuKSxvcihuKX1mdW5jdGlvbiBvcih0KXt2YXIgZTtpZih0LnA9PW51bGwpdGhyb3cgaXQobmV3IE5vKCJUaGUgdGFzayBoYXMgbm90IGJlZ3VuIHlldC4iKSk7dC5ifHwodC5rJiYoZT0oR2QoKSxfYShUdShEYXRlLm5vdygpKSxXZykpLHQucT1ZdyhKcChlLHQubykpKjFlLTkpLHQuYzx0LnImJnBpdCh0LHQuci10LmMpLHQuYj0hMCl9ZnVuY3Rpb24gbEkodCl7dmFyIGUsbixyO2ZvcihyPW5ldyBQdSxyaShyLG5ldyAkZSh0LmosdC5rKSksbj1uZXcgbnIoKCF0LmEmJih0LmE9bmV3IEFzKEdoLHQsNSkpLHQuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw0NjkpLHJpKHIsbmV3ICRlKGUuYSxlLmIpKTtyZXR1cm4gcmkocixuZXcgJGUodC5iLHQuYykpLHJ9ZnVuY3Rpb24gWWduKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDO2lmKHMpZm9yKHY9cy5hLmxlbmd0aCxvPW5ldyBlMih2KSxDPShvLmItby5hKSpvLmM8MD8oRnAoKSxJYik6bmV3IGpwKG8pO0MuT2IoKTspaz11KEMuUGIoKSwxOSksZD1QOChzLGsuYSksaD1uZXcgR1h0KHQsZSxuLHIpLGl5bihoLmEsaC5iLGguYyxoLmQsZCl9ZnVuY3Rpb24gSDR0KHQsZSl7dmFyIG47aWYoVnQodCk9PT1WdChlKSlyZXR1cm4hMDtpZihfdChlLDIxKSl7bj11KGUsMjEpO3RyeXtyZXR1cm4gdC5nYygpPT1uLmdjKCkmJnQuSWMobil9Y2F0Y2gocil7aWYocj1XaShyKSxfdChyLDE3Myl8fF90KHIsMjA1KSlyZXR1cm4hMTt0aHJvdyBpdChyKX19cmV0dXJuITF9ZnVuY3Rpb24gVjR0KHQsZSl7dmFyIG47bGUodC5kLGUpLG49ZS5yZigpLHQuYz8odC5lLmE9Yi5NYXRoLm1heCh0LmUuYSxuLmEpLHQuZS5iKz1uLmIsdC5kLmMubGVuZ3RoPjEmJih0LmUuYis9dC5hKSk6KHQuZS5hKz1uLmEsdC5lLmI9Yi5NYXRoLm1heCh0LmUuYixuLmIpLHQuZC5jLmxlbmd0aD4xJiYodC5lLmErPXQuYSkpfWZ1bmN0aW9uIEtnbih0KXt2YXIgZSxuLHIscztzd2l0Y2gocz10LmksZT1zLmIscj1zLmosbj1zLmcscy5hLmcpe2Nhc2UgMDpuLmE9KHQuZy5iLm8uYS1yLmEpLzI7YnJlYWs7Y2FzZSAxOm4uYT1lLmQubi5hK2UuZC5hLmE7YnJlYWs7Y2FzZSAyOm4uYT1lLmQubi5hK2UuZC5hLmEtci5hO2JyZWFrO2Nhc2UgMzpuLmI9ZS5kLm4uYitlLmQuYS5ifX1mdW5jdGlvbiBaYWUodCxlLG4scixzKXtpZihyPGV8fHM8bil0aHJvdyBpdChuZXcgRm4oIlRoZSBoaWdoeCBtdXN0IGJlIGJpZ2dlciB0aGVuIGxvd3ggYW5kIHRoZSBoaWdoeSBtdXN0IGJlIGJpZ2dlciB0aGVuIGxvd3kiKSk7cmV0dXJuIHQuYTxlP3QuYT1lOnQuYT5yJiYodC5hPXIpLHQuYjxuP3QuYj1uOnQuYj5zJiYodC5iPXMpLHR9ZnVuY3Rpb24gWGduKHQpe2lmKF90KHQsMTQ5KSlyZXR1cm4gQ3duKHUodCwxNDkpKTtpZihfdCh0LDIyOSkpcmV0dXJuIGtobih1KHQsMjI5KSk7aWYoX3QodCwyMykpcmV0dXJuIExnbih1KHQsMjMpKTt0aHJvdyBpdChuZXcgRm4oTDh0K2ViKG5ldyB5bChsdChjdChRbiwxKSxEZSwxLDUsW3RdKSkpKSl9ZnVuY3Rpb24gUWduKHQsZSxuLHIscyl7dmFyIG8saCxkO2ZvcihvPSEwLGg9MDtoPHI7aCsrKW89byZuW2hdPT0wO2lmKHM9PTApRGMobixyLHQsMCxlKSxoPWU7ZWxzZXtmb3IoZD0zMi1zLG89byZuW2hdPDxkPT0wLGg9MDtoPGUtMTtoKyspdFtoXT1uW2grcl0+Pj5zfG5baCtyKzFdPDxkO3RbaF09bltoK3JdPj4+cywrK2h9cmV0dXJuIG99ZnVuY3Rpb24gRzR0KHQsZSxuLHIpe3ZhciBzLG8saDtpZihlLms9PShWbigpLHRhKSl7Zm9yKG89bmV3IGFyKGxyKGpvKGUpLmEuS2MoKSxuZXcgeikpO3pyKG8pOylpZihzPXUoTXIobyksMTcpLGg9cy5jLmkuayxoPT10YSYmdC5jLmFbcy5jLmkuYy5wXT09ciYmdC5jLmFbZS5jLnBdPT1uKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFpnbih0LGUpe3ZhciBuLHIscyxvO3JldHVybiBlJj02MyxuPXQuaCZaMCxlPDIyPyhvPW4+Pj5lLHM9dC5tPj5lfG48PDIyLWUscj10Lmw+PmV8dC5tPDwyMi1lKTplPDQ0PyhvPTAscz1uPj4+ZS0yMixyPXQubT4+ZS0yMnx0Lmg8PDQ0LWUpOihvPTAscz0wLHI9bj4+PmUtNDQpLGl1KHImaGwscyZobCxvJlowKX1mdW5jdGlvbiBKYWUodCxlLG4scil7dmFyIHM7dGhpcy5iPXIsdGhpcy5lPXQ9PShldigpLEZTKSxzPWVbbl0sdGhpcy5kPXQyKHBsLFtlZSxvMF0sWzE3NywyNV0sMTYsW3MubGVuZ3RoLHMubGVuZ3RoXSwyKSx0aGlzLmE9dDIoQ3IsW2VlLFhyXSxbNDgsMjVdLDE1LFtzLmxlbmd0aCxzLmxlbmd0aF0sMiksdGhpcy5jPW5ldyBTNHQoZSxuKX1mdW5jdGlvbiBKZ24odCl7dmFyIGUsbixyO2Zvcih0Lms9bmV3IFd2dCgodmUoKSxsdChjdChYYSwxKSx4Yyw2MSwwLFtabyxQbixIbixtcixCbl0pKS5sZW5ndGgsdC5qLmMubGVuZ3RoKSxyPW5ldyBTKHQuaik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTEzKSxlPW4uZC5qLGxuKHQuayxlLG4pO3QuZT1od24ocXgodC5rKSl9ZnVuY3Rpb24gdG9lKHQsZSl7dmFyIG4scixzO0ZzKHQuZCxlKSxuPW5ldyBZVCxraSh0LmMsZSxuKSxuLmY9SGl0KGUuYyksbi5hPUhpdChlLmQpLG4uZD0obV8oKSxzPWUuYy5pLmsscz09KFZuKCksT3MpfHxzPT16MSksbi5lPShyPWUuZC5pLmsscj09T3N8fHI9PXoxKSxuLmI9ZS5jLmo9PSh2ZSgpLEJuKSxuLmM9ZS5kLmo9PUhufWZ1bmN0aW9uIHRwbih0KXt2YXIgZSxuLHIscyxvO2ZvcihvPXdpLHM9d2kscj1uZXcgUyh1NCh0KSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjEzKSxlPW4uZS5lLW4uZC5lLG4uZT09dCYmZTxzP3M9ZTplPG8mJihvPWUpO3JldHVybiBzPT13aSYmKHM9LTEpLG89PXdpJiYobz0tMSksbmV3IGZhKHBlKHMpLHBlKG8pKX1mdW5jdGlvbiBlcG4odCxlKXt2YXIgbixyLHM7cmV0dXJuIHM9VkUscj0oY18oKSxiTykscz1iLk1hdGguYWJzKHQuYiksbj1iLk1hdGguYWJzKGUuZi10LmIpLG48cyYmKHM9bixyPWhWKSxuPWIuTWF0aC5hYnModC5hKSxuPHMmJihzPW4scj13Tyksbj1iLk1hdGguYWJzKGUuZy10LmEpLG48cyYmKHM9bixyPWxWKSxyfWZ1bmN0aW9uIG5wbih0LGUpe3ZhciBuLHIscyxvO2ZvcihuPWUuYS5vLmEsbz1uZXcgUWQoTmEoZS5hKS5iLGUuYyxlLmYrMSkscz1uZXcgbXgobyk7cy5iPHMuZC5nYygpOylpZihyPShabihzLmI8cy5kLmdjKCkpLHUocy5kLlhiKHMuYz1zLmIrKyksMjkpKSxyLmMuYT49bilyZXR1cm4gRUUodCxlLHIucCksITA7cmV0dXJuITF9ZnVuY3Rpb24gZW9lKHQpe3ZhciBlO3JldHVybiB0LkRiJjY0P1ZzdCh0KTooZT1uZXcgT2wodjh0KSwhdC5hfHxHcihHcigoZS5hKz0nICInLGUpLHQuYSksJyInKSxHcihBdyhHcihBdyhHcihBdyhHcihBdygoZS5hKz0iICgiLGUpLHQuaSksIiwiKSx0LmopLCIgfCAiKSx0LmcpLCIsIiksdC5mKSwiKSIpLGUuYSl9ZnVuY3Rpb24gbm9lKHQsZSxuKXt2YXIgcixzLG8saCxkO2ZvcihkPW91KHQuZS5UZygpLGUpLHM9dSh0LmcsMTE5KSxyPTAsaD0wO2g8dC5pOysraClpZihvPXNbaF0sZC5ybChvLmFrKCkpKXtpZihyPT1uKXJldHVybiBieSh0LGgpLHRvKCksdShlLDY2KS5PaigpP286by5kZCgpOysrcn10aHJvdyBpdChuZXcgeW8oSl8rbitEMityKSl9ZnVuY3Rpb24gcm9lKHQpe3ZhciBlLG4scjtpZihlPXQuYyxlPT0yfHxlPT03fHxlPT0xKXJldHVybiBnaSgpLGdpKCkscEE7Zm9yKHI9SXh0KHQpLG49bnVsbDsoZT10LmMpIT0yJiZlIT03JiZlIT0xOylufHwobj0oZ2koKSxnaSgpLG5ldyBkOSgxKSksRTIobixyKSxyPW4pLEUyKG4sSXh0KHQpKTtyZXR1cm4gcn1mdW5jdGlvbiBycG4odCxlLG4pe3JldHVybiB0PDB8fHQ+bj9KNHQodCxuLCJzdGFydCBpbmRleCIpOmU8MHx8ZT5uP0o0dChlLG4sImVuZCBpbmRleCIpOnlfKCJlbmQgaW5kZXggKCVzKSBtdXN0IG5vdCBiZSBsZXNzIHRoYW4gc3RhcnQgaW5kZXggKCVzKSIsbHQoY3QoUW4sMSksRGUsMSw1LFtwZShlKSxwZSh0KV0pKX1mdW5jdGlvbiBpb2UodCxlKXt2YXIgbixyLHMsbztmb3Iocj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bz10W3JdO3RyeXtvWzFdP29bMF0uam0oKSYmKGU9emVuKGUsbykpOm9bMF0uam0oKX1jYXRjaChoKXtpZihoPVdpKGgpLF90KGgsNzgpKW49aCxBUigpLElybihfdChuLDQ3Nyk/dShuLDQ3NykuYWUoKTpuKTtlbHNlIHRocm93IGl0KGgpfX1yZXR1cm4gZX1mdW5jdGlvbiBFRSh0LGUsbil7dmFyIHIscyxvO2ZvcihuIT1lLmMrZS5iLmdjKCkmJmczbihlLmEsUWNuKGUsbi1lLmMpKSxvPWUuYS5jLnAsdC5hW29dPWIuTWF0aC5tYXgodC5hW29dLGUuYS5vLmEpLHM9dShRKGUuYSwoYWUoKSxMTykpLDE1KS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw3MCksSnQocixibHQsKE5uKCksITApKX1mdW5jdGlvbiBpcG4odCxlKXt2YXIgbixyLHM7cz1Pd24oZSksSnQoZSwoYWUoKSxXbHQpLHMpLHMmJihyPXdpLExvKHQuZixzKSYmKHI9dShlYyhMbyh0LmYscykpLDE5KS5hKSxuPXUoTmUoZS5nLDApLDE3KSxqZShSZShRKG4scTEpKSl8fGtpKHQscyxwZShiLk1hdGgubWluKHUoUShuLFRjKSwxOSkuYSxyKSkpKX1mdW5jdGlvbiBzb2UodCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKGUucD0tMSxkPW92KGUsKHNvKCksbnUpKS5LYygpO2QuT2IoKTspZm9yKGg9dShkLlBiKCksMTEpLHM9bmV3IFMoaC5nKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksbz1yLmQuaSxlIT1vJiYoby5wPDA/bi5GYyhyKTpvLnA+MCYmc29lKHQsbyxuKSk7ZS5wPTB9ZnVuY3Rpb24gWGUodCl7dmFyIGU7dGhpcy5jPW5ldyBaaSx0aGlzLmY9dC5lLHRoaXMuZT10LmQsdGhpcy5pPXQuZyx0aGlzLmQ9dC5jLHRoaXMuYj10LmIsdGhpcy5rPXQuaix0aGlzLmE9dC5hLHQuaT90aGlzLmo9dC5pOnRoaXMuaj0oZT11KFZmKGlwKSw5KSxuZXcgc2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSx0aGlzLmc9dC5mfWZ1bmN0aW9uIHNwbih0KXt2YXIgZSxuLHIscztmb3IoZT1xcChHcihuZXcgT2woIlByZWRpY2F0ZXMuIiksImFuZCIpLDQwKSxuPSEwLHM9bmV3IG14KHQpO3MuYjxzLmQuZ2MoKTspcj0oWm4ocy5iPHMuZC5nYygpKSxzLmQuWGIocy5jPXMuYisrKSksbnx8KGUuYSs9IiwiKSxlLmErPSIiK3Isbj0hMTtyZXR1cm4oZS5hKz0iKSIsZSkuYX1mdW5jdGlvbiBhb2UodCxlLG4pe3ZhciByLHMsbztpZighKG48PWUrMikpZm9yKHM9KG4tZSkvMnwwLHI9MDtyPHM7KytyKW89KEFuKGUrcix0LmMubGVuZ3RoKSx1KHQuY1tlK3JdLDExKSksY2godCxlK3IsKEFuKG4tci0xLHQuYy5sZW5ndGgpLHUodC5jW24tci0xXSwxMSkpKSxBbihuLXItMSx0LmMubGVuZ3RoKSx0LmNbbi1yLTFdPW99ZnVuY3Rpb24gYXBuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO289dC5kLnAsZD1vLmUsdj1vLnIsdC5nPW5ldyBZTSh2KSxoPXQuZC5vLmMucCxyPWg+MD9kW2gtMV06TnQobDAsWWcsMTAsMCwwLDEpLHM9ZFtoXSxrPWg8ZC5sZW5ndGgtMT9kW2grMV06TnQobDAsWWcsMTAsMCwwLDEpLEM9ZT09bi0xLEM/Q3J0KHQuZyxzLGspOkNydCh0LmcscixzKX1mdW5jdGlvbiBvb2UodCl7dmFyIGU7dGhpcy5qPW5ldyBoZSx0aGlzLmY9bmV3IEhzLHRoaXMuYj0oZT11KFZmKFhhKSw5KSxuZXcgc2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSx0aGlzLmQ9TnQoQ3IsWHIsMjUsKHZlKCksbHQoY3QoWGEsMSkseGMsNjEsMCxbWm8sUG4sSG4sbXIsQm5dKSkubGVuZ3RoLDE1LDEpLHRoaXMuZz10fWZ1bmN0aW9uIGNvZSh0LGUpe3ZhciBuLHIscztpZihlLmMubGVuZ3RoIT0wKXtmb3Iobj1CYWUodCxlKSxzPSExOyFuOylicSh0LGUsITApLHM9ITAsbj1CYWUodCxlKTtzJiZicSh0LGUsITEpLHI9Q2l0KGUpLHQuYiYmdC5iLmxnKHIpLHQuYT1HcmUodCwoQW4oMCxlLmMubGVuZ3RoKSx1KGUuY1swXSwzMykpKSxjb2UodCxyKX19ZnVuY3Rpb24gR3N0KHQsZSl7dmFyIG4scixzO2lmKHI9eW4odC5UZygpLGUpLG49ZS10LkFoKCksbjwwKWlmKHIpaWYoci5JaigpKXM9dC5ZZyhyKSxzPj0wP3QuQmgocyk6aTV0KHQscik7ZWxzZSB0aHJvdyBpdChuZXcgRm4obGIrci5uZSgpK1hfKSk7ZWxzZSB0aHJvdyBpdChuZXcgRm4oQmRlK2UrUmRlKSk7ZWxzZSBmaCh0LG4scil9ZnVuY3Rpb24gVTR0KHQpe3ZhciBlLG47aWYobj1udWxsLGU9ITEsX3QodCwyMDQpJiYoZT0hMCxuPXUodCwyMDQpLmEpLGV8fF90KHQsMjU4KSYmKGU9ITAsbj0iIit1KHQsMjU4KS5hKSxlfHxfdCh0LDQ4MykmJihlPSEwLG49IiIrdSh0LDQ4MykuYSksIWUpdGhyb3cgaXQobmV3IGZldChBOHQpKTtyZXR1cm4gbn1mdW5jdGlvbiB1b2UodCxlKXt2YXIgbixyO2lmKHQuZil7Zm9yKDtlLk9iKCk7KWlmKG49dShlLlBiKCksNzIpLHI9bi5haygpLF90KHIsOTkpJiZ1KHIsMTgpLkJiJmRjJiYoIXQuZXx8ci5HaigpIT1qN3x8ci5haigpIT0wKSYmbi5kZCgpIT1udWxsKXJldHVybiBlLlViKCksITA7cmV0dXJuITF9ZWxzZSByZXR1cm4gZS5PYigpfWZ1bmN0aW9uIGxvZSh0LGUpe3ZhciBuLHI7aWYodC5mKXtmb3IoO2UuU2IoKTspaWYobj11KGUuVWIoKSw3Mikscj1uLmFrKCksX3Qociw5OSkmJnUociwxOCkuQmImZGMmJighdC5lfHxyLkdqKCkhPWo3fHxyLmFqKCkhPTApJiZuLmRkKCkhPW51bGwpcmV0dXJuIGUuUGIoKSwhMDtyZXR1cm4hMX1lbHNlIHJldHVybiBlLlNiKCl9ZnVuY3Rpb24gVzR0KHQsZSxuKXt2YXIgcixzLG8saCxkLHY7Zm9yKHY9b3UodC5lLlRnKCksZSkscj0wLGQ9dC5pLHM9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKG89c1toXSx2LnJsKG8uYWsoKSkpe2lmKG49PXIpcmV0dXJuIGg7KytyLGQ9aCsxfWlmKG49PXIpcmV0dXJuIGQ7dGhyb3cgaXQobmV3IHlvKEpfK24rRDIrcikpfWZ1bmN0aW9uIG9wbih0LGUpe3ZhciBuLHIscyxvO2lmKHQuZi5jLmxlbmd0aD09MClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgRngscj1uZXcgUyh0LmYpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDcwKSxzPW4ubyxvLmI9Yi5NYXRoLm1heChvLmIscy5hKSxvLmErPXMuYjtyZXR1cm4gby5hKz0odC5mLmMubGVuZ3RoLTEpKmUsb31mdW5jdGlvbiBjcG4odCxlLG4pe3ZhciByLHMsbztmb3Iocz1uZXcgYXIobHIoVTAobikuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShNcihzKSwxNyksIUdhKHIpJiYhKCFHYShyKSYmci5jLmkuYz09ci5kLmkuYykmJihvPUhjZSh0LHIsbixuZXcgQ3F0KSxvLmMubGVuZ3RoPjEmJihlLmNbZS5jLmxlbmd0aF09bykpfWZ1bmN0aW9uIHVwbih0KXt2YXIgZSxuLHIscztmb3Iobj1uZXcgWmksVWEobix0Lm8pLHI9bmV3IHFwdDtuLmIhPTA7KWU9dShuLmI9PTA/bnVsbDooWm4obi5iIT0wKSxsaChuLG4uYS5hKSksNTA4KSxzPUhoZSh0LGUsITApLHMmJmxlKHIuYSxlKTtmb3IoO3IuYS5jLmxlbmd0aCE9MDspZT11KE5yZShyKSw1MDgpLEhoZSh0LGUsITEpfWZ1bmN0aW9uIFVnKCl7VWc9WixfU3Q9bmV3IE94KE5fLDApLExhPW5ldyBPeCgiQk9PTEVBTiIsMSksZ2M9bmV3IE94KCJJTlQiLDIpLEk3PW5ldyBPeCgiU1RSSU5HIiwzKSxPbz1uZXcgT3goIkRPVUJMRSIsNCksdXM9bmV3IE94KCJFTlVNIiw1KSxVNj1uZXcgT3goIkVOVU1TRVQiLDYpLFYxPW5ldyBPeCgiT0JKRUNUIiw3KX1mdW5jdGlvbiBnXyh0LGUpe3ZhciBuLHIscyxvLGg7cj1iLk1hdGgubWluKHQuYyxlLmMpLG89Yi5NYXRoLm1pbih0LmQsZS5kKSxzPWIuTWF0aC5tYXgodC5jK3QuYixlLmMrZS5iKSxoPWIuTWF0aC5tYXgodC5kK3QuYSxlLmQrZS5hKSxzPHImJihuPXIscj1zLHM9biksaDxvJiYobj1vLG89aCxoPW4pLGVLdCh0LHIsbyxzLXIsaC1vKX1mdW5jdGlvbiAkdSgpeyR1PVosbUx0PWx0KGN0KEFlLDEpLGVlLDIsNixbSDh0LGlPLHFILHRnZSxISCxkdXQsTUhdKSx2THQ9bHQoY3QoQWUsMSksZWUsMiw2LFtIOHQsImVtcHR5IixpTyxyTywiZWxlbWVudE9ubHkiXSkseUx0PWx0KGN0KEFlLDEpLGVlLDIsNixbSDh0LCJwcmVzZXJ2ZSIsInJlcGxhY2UiLGUxXSkseWE9bmV3IEpZdH1mdW5jdGlvbiBZNHQodCxlLG4pe3ZhciByLHMsbztpZihlIT1uKXtyPWU7ZG8gTGkodCxyLmMpLHM9ci5lLHMmJihvPXIuZCxqbSh0LG8uYixvLmQpLExpKHQscy5uKSxyPU5hKHMpKTt3aGlsZShzKTtyPW47ZG8gaWEodCxyLmMpLHM9ci5lLHMmJihvPXIuZCxxTSh0LG8uYixvLmQpLGlhKHQscy5uKSxyPU5hKHMpKTt3aGlsZShzKX19ZnVuY3Rpb24gVXN0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7aWYoci5mLmMrci5nLmM9PTApZm9yKGg9dC5hW3QuY10sZD0wLHY9aC5sZW5ndGg7ZDx2OysrZClvPWhbZF0sa2kocixvLG5ldyBEbmUodCxvLG4pKTtyZXR1cm4gcz11KGVjKExvKHIuZixlKSksNjYzKSxzLmI9MCxzLmM9cy5mLHMuYz09MHx8bFIodShOZShzLmEscy5iKSwyODcpKSxzfWZ1bmN0aW9uIGg2KCl7aDY9WixwNz1uZXcgWkMoIk1FRElBTl9MQVlFUiIsMCksYlM9bmV3IFpDKCJUQUlMX0xBWUVSIiwxKSxnNz1uZXcgWkMoIkhFQURfTEFZRVIiLDIpLE55PW5ldyBaQygiU1BBQ0VfRUZGSUNJRU5UX0xBWUVSIiwzKSxHND1uZXcgWkMoIldJREVTVF9MQVlFUiIsNCksVjQ9bmV3IFpDKCJDRU5URVJfTEFZRVIiLDUpfWZ1bmN0aW9uIGxwbih0KXtzd2l0Y2godC5nKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpyZXR1cm4gdmUoKSxQbjtjYXNlIDM6Y2FzZSA0OmNhc2UgNTpyZXR1cm4gdmUoKSxtcjtjYXNlIDY6Y2FzZSA3OmNhc2UgODpyZXR1cm4gdmUoKSxCbjtjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOnJldHVybiB2ZSgpLEhuO2RlZmF1bHQ6cmV0dXJuIHZlKCksWm99fWZ1bmN0aW9uIGhwbih0LGUpe3ZhciBuO3JldHVybiB0LmMubGVuZ3RoPT0wPyExOihuPUFpZSgoQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxNykpLmMuaSksRmwoKSxuPT0oY3koKSxuNSl8fG49PWU1PyEwOk44KHd1KG5ldyBUbihudWxsLG5ldyBfbih0LDE2KSksbmV3IHhRKSxuZXcgJCR0KGUpKSl9ZnVuY3Rpb24gSzR0KHQsZSxuKXt2YXIgcixzLG87aWYoIXQuYltlLmddKXtmb3IodC5iW2UuZ109ITAscj1uLCFyJiYocj1uZXcgaiQpLHJpKHIuYixlKSxvPXQuYVtlLmddLktjKCk7by5PYigpOylzPXUoby5QYigpLDE4OCkscy5iIT1lJiZLNHQodCxzLmIscikscy5jIT1lJiZLNHQodCxzLmMscikscmkoci5hLHMpO3JldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIHBfKCl7cF89WixMRz1uZXcgcjkoIlJPT1RfUFJPQyIsMCksT2h0PW5ldyByOSgiRkFOX1BST0MiLDEpLEZodD1uZXcgcjkoIk5FSUdIQk9SU19QUk9DIiwyKSxQaHQ9bmV3IHI5KCJMRVZFTF9IRUlHSFQiLDMpLE5odD1uZXcgcjkoIk5PREVfUE9TSVRJT05fUFJPQyIsNCksSWh0PW5ldyByOSgiREVUUkVFSUZZSU5HX1BST0MiLDUpfWZ1bmN0aW9uIFdzdCh0LGUpe2lmKF90KGUsMjM5KSlyZXR1cm4gaVFlKHQsdShlLDMzKSk7aWYoX3QoZSwxODYpKXJldHVybiBzUWUodCx1KGUsMTE4KSk7aWYoX3QoZSw0MzkpKXJldHVybiByUWUodCx1KGUsMjAyKSk7dGhyb3cgaXQobmV3IEZuKEw4dCtlYihuZXcgeWwobHQoY3QoUW4sMSksRGUsMSw1LFtlXSkpKSkpfWZ1bmN0aW9uIGhvZSh0LGUsbil7dmFyIHIscztpZih0aGlzLmY9dCxyPXUodHIodC5iLGUpLDI4Mykscz1yP3IuYTowLEVtdChuLHMpLG4+PShzLzJ8MCkpZm9yKHRoaXMuZT1yP3IuYzpudWxsLHRoaXMuZD1zO24rKzxzOylCUXQodGhpcyk7ZWxzZSBmb3IodGhpcy5jPXI/ci5iOm51bGw7bi0tID4wOylWdnQodGhpcyk7dGhpcy5iPWUsdGhpcy5hPW51bGx9ZnVuY3Rpb24gZnBuKHQsZSl7dmFyIG4scjtlLmE/RnduKHQsZSk6KG49dShDbnQodC5iLGUuYiksNTcpLG4mJm49PXQuYVtlLmIuZl0mJm4uYSYmbi5hIT1lLmIuYSYmbi5jLkZjKGUuYikscj11KFRudCh0LmIsZS5iKSw1NyksciYmdC5hW3IuZl09PWUuYiYmci5hJiZyLmEhPWUuYi5hJiZlLmIuYy5GYyhyKSxmbnQodC5iLGUuYikpfWZ1bmN0aW9uIGZvZSh0LGUpe3ZhciBuLHI7aWYobj11KHBvKHQuYixlKSwxMjQpLHUodShBaSh0LnIsZSksMjEpLDg0KS5kYygpKXtuLm4uYj0wLG4ubi5jPTA7cmV0dXJufW4ubi5iPXQuQy5iLG4ubi5jPXQuQy5jLHQuQS5IYygoQWwoKSxLMikpJiZOdWUodCxlKSxyPXFmbih0LGUpLGxhdCh0LGUpPT0obDQoKSxFYikmJihyKz0yKnQudyksbi5hLmE9cn1mdW5jdGlvbiBkb2UodCxlKXt2YXIgbixyO2lmKG49dShwbyh0LmIsZSksMTI0KSx1KHUoQWkodC5yLGUpLDIxKSw4NCkuZGMoKSl7bi5uLmQ9MCxuLm4uYT0wO3JldHVybn1uLm4uZD10LkMuZCxuLm4uYT10LkMuYSx0LkEuSGMoKEFsKCksSzIpKSYmQnVlKHQsZSkscj1IZm4odCxlKSxsYXQodCxlKT09KGw0KCksRWIpJiYocis9Mip0LncpLG4uYS5iPXJ9ZnVuY3Rpb24gZHBuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IGhlLHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNjUpLGxlKG8sbmV3IERidChuLCEwKSksbGUobyxuZXcgRGJ0KG4sITEpKTtzPW5ldyBhUXQodCksTkMocy5hLmEpLENadChvLHQuYixuZXcgeWwobHQoY3QoaXBlLDEpLERlLDY3OSwwLFtzXSkpKX1mdW5jdGlvbiBnb2UodCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O3JldHVybiB2PXQuYSxIPXQuYixrPWUuYSxHPWUuYixDPW4uYSxLPW4uYixNPXIuYSx0dD1yLmIsbz12KkctSCprLGg9Qyp0dC1LKk0scz0odi1rKSooSy10dCktKEgtRykqKEMtTSksZD0obyooQy1NKS1oKih2LWspKS9zLGo9KG8qKEstdHQpLWgqKEgtRykpL3MsbmV3ICRlKGQsail9ZnVuY3Rpb24gWDR0KHQsZSl7dmFyIG4scixzO2lmKCF0LmRbZS5wXSl7Zm9yKHQuZFtlLnBdPSEwLHQuYVtlLnBdPSEwLHI9bmV3IGFyKGxyKERzKGUpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTXIociksMTcpLCFHYShuKSYmKHM9bi5kLmksdC5hW3MucF0/bGUodC5iLG4pOlg0dCh0LHMpKTt0LmFbZS5wXT0hMX19ZnVuY3Rpb24gcG9lKHQsZSxuKXt2YXIgcjtzd2l0Y2gocj0wLHUoUShlLChUZSgpLHV1KSksMTYzKS5nKXtjYXNlIDI6cj0yKi1uK3QuYSwrK3QuYTticmVhaztjYXNlIDE6cj0tbjticmVhaztjYXNlIDM6cj1uO2JyZWFrO2Nhc2UgNDpyPTIqbit0LmIsKyt0LmJ9cmV0dXJuIFVzKGUsKGFlKCksVGMpKSYmKHIrPXUoUShlLFRjKSwxOSkuYSkscn1mdW5jdGlvbiBib2UodCxlLG4pe3ZhciByLHMsbztmb3Iobi56YyhlLHQpLGxlKHQubixlKSxvPXQucC5lZyhlKSxlLmo9PXQucC5mZygpP3ZpZSh0LmUsbyk6dmllKHQuaixvKSxzJCh0KSxzPXpwKEQxKGx0KGN0KGoxLDEpLERlLDIwLDAsW25ldyBRcyhlKSxuZXcgVHIoZSldKSkpO3pyKHMpOylyPXUoTXIocyksMTEpLG4uX2Iocil8fGJvZSh0LHIsbil9ZnVuY3Rpb24gUTR0KHQpe3ZhciBlLG4scjtyZXR1cm4gbj11KHFlKHQsKHVpKCksRzIpKSwyMSksbi5IYygoQWwoKSxKeSkpPyhyPXUocWUodCx4YiksMjEpLGU9bmV3IHhvKHUocWUodCxjNSksOCkpLHIuSGMoKGxsKCksUjcpKSYmKGUuYTw9MCYmKGUuYT0yMCksZS5iPD0wJiYoZS5iPTIwKSksZSk6bmV3IENhfWZ1bmN0aW9uIFo0dCh0KXt2YXIgZSxuLHI7aWYoIXQuYil7Zm9yKHI9bmV3IEZrLG49bmV3IEJ4KENfKHQpKTtuLmUhPW4uaS5nYygpOyllPXUoZHN0KG4pLDE4KSxlLkJiJmRjJiZEcihyLGUpO2l5KHIpLHQuYj1uZXcgVjMoKHUoQXQoV3QoKEhwKCksTG4pLm8pLDgpLDE4KSxyLmkpLHIuZyksc2wodCkuYiY9LTl9cmV0dXJuIHQuYn1mdW5jdGlvbiBncG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO3Y9dShlSShxeChlLmspLE50KFhhLHhjLDYxLDIsMCwxKSksMTIyKSxrPWUuZyxuPUhadChlLHZbMF0pLHM9cVp0KGUsdlsxXSkscj1Bc3QodCxrLG4scyksbz1IWnQoZSx2WzFdKSxkPXFadChlLHZbMF0pLGg9QXN0KHQsayxvLGQpLHI8PWg/KGUuYT1uLGUuYz1zKTooZS5hPW8sZS5jPWQpfWZ1bmN0aW9uIHBwbih0LGUsbil7dmFyIHIscyxvO2Zvcih2cihuLCJQcm9jZXNzb3Igc2V0IG5laWdoYm9ycyIsMSksdC5hPWUuYi5iPT0wPzE6ZS5iLmIscz1udWxsLHI9ZWkoZS5iLDApOyFzJiZyLmIhPXIuZC5jOylvPXUodGkociksODYpLGplKFJlKFEobywoZmMoKSxYeSkpKSkmJihzPW8pO3MmJmt1ZSh0LG5ldyBMcChzKSxuKSxvcihuKX1mdW5jdGlvbiB3b2UodCl7RmF0KCk7dmFyIGUsbixyLHM7cmV0dXJuIHI9aGQodCxDdSgzNSkpLGU9cj09LTE/dDp0LnN1YnN0cigwLHIpLG49cj09LTE/bnVsbDp0LnN1YnN0cihyKzEpLHM9bmFuKGlMdCxlKSxzP24hPW51bGwmJihzPU1yZShzLChPbihuKSxuKSkpOihzPUR4bihlKSxoYW4oaUx0LGUscyksbiE9bnVsbCYmKHM9TXJlKHMsbikpKSxzfWZ1bmN0aW9uIFlzdCh0KXt2YXIgZTt3bigpO3ZhciBuLHIscyxvLGgsZDtpZihfdCh0LDU0KSlmb3Iobz0wLHM9dC5nYygpLTE7bzxzOysrbywtLXMpZT10LlhiKG8pLHQuX2Mobyx0LlhiKHMpKSx0Ll9jKHMsZSk7ZWxzZSBmb3Iobj10LlljKCksaD10LlpjKHQuZ2MoKSk7bi5UYigpPGguVmIoKTspcj1uLlBiKCksZD1oLlViKCksbi5XYihkKSxoLldiKHIpfWZ1bmN0aW9uIGJwbih0LGUpe3ZhciBuLHIsczt2cihlLCJFbmQgbGFiZWwgcHJlLXByb2Nlc3NpbmciLDEpLG49WHQoeWUoUSh0LChUZSgpLFY2KSkpKSxyPVh0KHllKFEodCxXeSkpKSxzPWI4KHUoUSh0LFdsKSwxMDMpKSxscyhXbyhuZXcgVG4obnVsbCxuZXcgX24odC5iLDE2KSksbmV3IENMKSxuZXcgUFl0KG4scixzKSksb3IoZSl9ZnVuY3Rpb24gS3N0KHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihkPTAsbz1uZXcgQjMsVXAobyxlKTtvLmIhPW8uYzspZm9yKGg9dShIeChvKSwyMTQpLGQrPUhzZShoLmQsaC5lKSxzPW5ldyBTKGguYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMzcpLG49dShOZSh0LmIsci5wKSwyMTQpLG4uc3x8KGQrPUtzdCh0LG4pKTtyZXR1cm4gZH1mdW5jdGlvbiB2b2UodCxlLG4pe3ZhciByLHM7WG5lKHRoaXMpLGU9PShHdygpLHliKT9Gcyh0aGlzLnIsdC5jKTpGcyh0aGlzLncsdC5jKSxuPT15Yj9Gcyh0aGlzLnIsdC5kKTpGcyh0aGlzLncsdC5kKSx0b2UodGhpcyx0KSxyPUhpdCh0LmMpLHM9SGl0KHQuZCksVmFlKHRoaXMscixzLHMpLHRoaXMubz0obV8oKSxiLk1hdGguYWJzKHItcyk8LjIpfWZ1bmN0aW9uIG1vZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKGQ9dShEbih0LmEsOCksMTkzNiksZCE9bnVsbClmb3Iocz1kLG89MCxoPXMubGVuZ3RoO288aDsrK28pbnVsbC5qbSgpO3I9bix0LmEuRGImMXx8KHY9bmV3IHlYdCh0LG4sZSksci51aSh2KSksX3Qociw2NzIpP3Uociw2NzIpLndpKHQuYSk6ci50aSgpPT10LmEmJnIudmkobnVsbCl9ZnVuY3Rpb24gd3BuKCl7dmFyIHQ7cmV0dXJuIFU1ZT91KF9FKChQcCgpLFloKSxPMiksMTk0NSk6KEQ1bigpLHQ9dShfdChOYygoUHAoKSxZaCksTzIpLDU4Nik/TmMoWWgsTzIpOm5ldyBBWHQsNTg2KSxVNWU9ITAsZ3huKHQpLHF4bih0KSxraSgoRWJ0KCksc0x0KSx0LG5ldyBoeCksTXN0KHQpLGtvKFloLE8yLHQpLHQpfWZ1bmN0aW9uIHZwbih0LGUsbixyKXt2YXIgcztyZXR1cm4gcz13NCh0LG4sbHQoY3QoQWUsMSksZWUsMiw2LFtjb3QsdW90LGxvdCxob3QsZm90LGRvdCxnb3RdKSxlKSxzPDAmJihzPXc0KHQsbixsdChjdChBZSwxKSxlZSwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSksZSkpLHM8MD8hMTooci5kPXMsITApfWZ1bmN0aW9uIG1wbih0LGUsbixyKXt2YXIgcztyZXR1cm4gcz13NCh0LG4sbHQoY3QoQWUsMSksZWUsMiw2LFtjb3QsdW90LGxvdCxob3QsZm90LGRvdCxnb3RdKSxlKSxzPDAmJihzPXc0KHQsbixsdChjdChBZSwxKSxlZSwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSksZSkpLHM8MD8hMTooci5kPXMsITApfWZ1bmN0aW9uIHlwbih0KXt2YXIgZSxuLHI7Zm9yKF8ybih0KSxyPW5ldyBoZSxuPW5ldyBTKHQuYS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDgxKSxsZShyLG5ldyBOYnQoZSwhMCkpLGxlKHIsbmV3IE5idChlLCExKSk7bzFuKHQuYyksaEQocix0LmIsbmV3IHlsKGx0KGN0KG1PLDEpLERlLDM2OSwwLFt0LmNdKSkpLHpibih0KX1mdW5jdGlvbiB4cG4odCl7dmFyIGUsbixyLHM7Zm9yKG49bmV3IF9yLHM9bmV3IFModC5kKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxODEpLGU9dShyLldlKChhZSgpLEI2KSksMTcpLExvKG4uZixlKXx8a2kobixlLG5ldyB0UXQoZSkpLGxlKHUoZWMoTG8obi5mLGUpKSw0NTYpLmIscik7cmV0dXJuIG5ldyBCdShuZXcgdjEobikpfWZ1bmN0aW9uIGtwbih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHI9bmV3IGVadCh0LmouYy5sZW5ndGgpLG49bnVsbCxvPW5ldyBTKHQuaik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTEpLHMuaiE9biYmKHIuYj09ci5jfHxJY2UocixuLGUpLGxtdChyKSxuPXMuaiksaD1iY2UocyksaCYmaW10KHIsaCk7ci5iPT1yLmN8fEljZShyLG4sZSl9ZnVuY3Rpb24gRXBuKHQsZSl7dmFyIG4scixzO2ZvcihyPW5ldyBkYSh0LmIsMCk7ci5iPHIuZC5nYygpOyluPShabihyLmI8ci5kLmdjKCkpLHUoci5kLlhiKHIuYz1yLmIrKyksNzApKSxzPXUoUShuLChUZSgpLE9kKSksMjcyKSxzPT0oTTEoKSxaeSkmJihDbChyKSxsZShlLmIsbiksVXMobiwoYWUoKSxCNikpfHxKdChuLEI2LHQpKX1mdW5jdGlvbiBUcG4odCl7dmFyIGUsbixyLHMsbztmb3IoZT1qMChuZXcgYXIobHIoRHModCkuYS5LYygpLG5ldyB6KSkpLHM9bmV3IGFyKGxyKGpvKHQpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTXIocyksMTcpLG49ci5jLmksbz1qMChuZXcgYXIobHIoRHMobikuYS5LYygpLG5ldyB6KSkpLGU9Yi5NYXRoLm1heChlLG8pO3JldHVybiBwZShlKX1mdW5jdGlvbiBDcG4odCxlLG4pe3ZhciByLHMsbyxoO2Zvcih2cihuLCJQcm9jZXNzb3IgYXJyYW5nZSBub2RlIiwxKSxzPW51bGwsbz1uZXcgWmkscj1laShlLmIsMCk7IXMmJnIuYiE9ci5kLmM7KWg9dSh0aShyKSw4NiksamUoUmUoUShoLChmYygpLFh5KSkpKSYmKHM9aCk7ZnMobyxzLG8uYy5iLG8uYyksTGhlKHQsbyxSYyhuLDEpKSxvcihuKX1mdW5jdGlvbiB5b2UodCxlLG4pe3ZhciByLHMsbztyPXUocWUodCwodWkoKSxZRykpLDIxKSxzPTAsbz0wLGUuYT5uLmEmJihyLkhjKChoeSgpLFdPKSk/cz0oZS5hLW4uYSkvMjpyLkhjKFlPKSYmKHM9ZS5hLW4uYSkpLGUuYj5uLmImJihyLkhjKChoeSgpLFhPKSk/bz0oZS5iLW4uYikvMjpyLkhjKEtPKSYmKG89ZS5iLW4uYikpLEY0dCh0LHMsbyl9ZnVuY3Rpb24geG9lKHQsZSxuLHIscyxvLGgsZCx2LGssQyxNLGope190KHQuQ2IsODgpJiZneShzbCh1KHQuQ2IsODgpKSw0KSxRYyh0LG4pLHQuZj1oLGhFKHQsZCksZEUodCx2KSxsRSh0LGspLGZFKHQsQykscWcodCxNKSxnRSh0LGopLHpnKHQsITApLFJnKHQscyksdC5vayhvKSxiMih0LGUpLHIhPW51bGwmJih0Lmk9bnVsbCxmeih0LHIpKX1mdW5jdGlvbiBrb2UodCl7dmFyIGUsbjtpZih0LmYpe2Zvcig7dC5uPjA7KXtpZihlPXUodC5rLlhiKHQubi0xKSw3Miksbj1lLmFrKCksX3Qobiw5OSkmJnUobiwxOCkuQmImZGMmJighdC5lfHxuLkdqKCkhPWo3fHxuLmFqKCkhPTApJiZlLmRkKCkhPW51bGwpcmV0dXJuITA7LS10Lm59cmV0dXJuITF9ZWxzZSByZXR1cm4gdC5uPjB9ZnVuY3Rpb24gSjR0KHQsZSxuKXtpZih0PDApcmV0dXJuIHlfKGFmZSxsdChjdChRbiwxKSxEZSwxLDUsW24scGUodCldKSk7aWYoZTwwKXRocm93IGl0KG5ldyBGbihvZmUrZSkpO3JldHVybiB5XygiJXMgKCVzKSBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gc2l6ZSAoJXMpIixsdChjdChRbiwxKSxEZSwxLDUsW24scGUodCkscGUoZSldKSl9ZnVuY3Rpb24gdDV0KHQsZSxuLHIscyxvKXt2YXIgaCxkLHYsaztpZihoPXItbixoPDcpe2hobihlLG4scixvKTtyZXR1cm59aWYodj1uK3MsZD1yK3Msaz12KyhkLXY+PjEpLHQ1dChlLHQsdixrLC1zLG8pLHQ1dChlLHQsayxkLC1zLG8pLG8udWUodFtrLTFdLHRba10pPD0wKXtmb3IoO248cjspdHMoZSxuKyssdFt2KytdKTtyZXR1cm59T2xuKHQsdixrLGQsZSxuLHIsbyl9ZnVuY3Rpb24gaEkodCxlKXt2YXIgbixyLHM7Zm9yKHM9bmV3IGhlLHI9bmV3IFModC5jLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNTcpLGUuTGIobikmJihsZShzLG5ldyBMYnQobiwhMCkpLGxlKHMsbmV3IExidChuLCExKSkpO2Exbih0LmUpLENadChzLHQuZCxuZXcgeWwobHQoY3QoaXBlLDEpLERlLDY3OSwwLFt0LmVdKSkpfWZ1bmN0aW9uIF9wbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2Zvcih2PWUuZCxzPWUuYi5qLGQ9bmV3IFModik7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShKKGQpLDEwMSksbz1OdChwbCxvMCwyNSxzLmMubGVuZ3RoLDE2LDEpLGtpKHQuYixoLG8pLG49aC5hLmQucC0xLHI9aC5jLmQucDtuIT1yOyluPShuKzEpJXMuYy5sZW5ndGgsb1tuXT0hMH1mdW5jdGlvbiBTcG4odCxlKXtmb3IodC5yPW5ldyBQRCh0LnApLHdwdCh0LnIsdCksVWEodC5yLmosdC5qKSxBaCh0LmopLHJpKHQuaixlKSxyaSh0LnIuZSxlKSxzJCh0KSxzJCh0LnIpO3QuZi5jLmxlbmd0aCE9MDspR1V0KHUoTmUodC5mLDApLDEyOSkpO2Zvcig7dC5rLmMubGVuZ3RoIT0wOylHVXQodShOZSh0LmssMCksMTI5KSk7cmV0dXJuIHQucn1mdW5jdGlvbiBYc3QodCxlLG4pe3ZhciByLHMsbztpZihzPXluKHQuVGcoKSxlKSxyPWUtdC5BaCgpLHI8MClpZihzKWlmKHMuSWooKSlvPXQuWWcocyksbz49MD90LnNoKG8sbik6TTV0KHQscyxuKTtlbHNlIHRocm93IGl0KG5ldyBGbihsYitzLm5lKCkrWF8pKTtlbHNlIHRocm93IGl0KG5ldyBGbihCZGUrZStSZGUpKTtlbHNlIGdoKHQscixzLG4pfWZ1bmN0aW9uIEVvZSh0KXt2YXIgZSxuLHIscztpZihuPXUodCw0OSkucWgoKSxuKXRyeXtpZihyPW51bGwsZT1fRSgoUHAoKSxZaCksc2xlKGdobihuKSkpLGUmJihzPWUucmgoKSxzJiYocj1zLldrKGtLZShuLmUpKSkpLHImJnIhPXQpcmV0dXJuIEVvZShyKX1jYXRjaChvKXtpZihvPVdpKG8pLCFfdChvLDYwKSl0aHJvdyBpdChvKX1yZXR1cm4gdH1mdW5jdGlvbiBhdSh0LGUsbil7dmFyIHIscyxvLGg7aWYoaD1lPT1udWxsPzA6dC5iLnNlKGUpLHM9KHI9dC5hLmdldChoKSxyPz9uZXcgQXJyYXkpLHMubGVuZ3RoPT0wKXQuYS5zZXQoaCxzKTtlbHNlIGlmKG89anJlKHQsZSxzKSxvKXJldHVybiBvLmVkKG4pO3JldHVybiB0cyhzLHMubGVuZ3RoLG5ldyBLUihlLG4pKSwrK3QuYyx3JCh0LmIpLG51bGx9ZnVuY3Rpb24gVG9lKHQsZSl7dmFyIG4scjtyZXR1cm4gTCQodC5hKSxLZCh0LmEsKHB6KCksRkcpLEZHKSxLZCh0LmEsRDcsRDcpLHI9bmV3IFZzLGJpKHIsRDcsKE56KCksR2h0KSksVnQocWUoZSwodXkoKSxZaHQpKSkhPT1WdCgoSEQoKSxORykpJiZiaShyLEQ3LEhodCksYmkocixENyxWaHQpLFRVdCh0LmEsciksbj1GcSh0LmEsZSksbn1mdW5jdGlvbiBDb2UodCl7aWYoIXQpcmV0dXJuIGNIdCgpLEJnZTt2YXIgZT10LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDtpZihlIT09dCl7dmFyIG49UHV0W3R5cGVvZiBlXTtyZXR1cm4gbj9uKGUpOlV5dCh0eXBlb2YgZSl9ZWxzZSByZXR1cm4gdCBpbnN0YW5jZW9mIEFycmF5fHx0IGluc3RhbmNlb2YgYi5BcnJheT9uZXcgd3godCk6bmV3IFFrKHQpfWZ1bmN0aW9uIF9vZSh0LGUsbil7dmFyIHIscyxvO3N3aXRjaChvPXQubyxyPXUocG8odC5wLG4pLDI0NCkscz1yLmkscy5iPWdJKHIpLHMuYT1kSShyKSxzLmI9Yi5NYXRoLm1heChzLmIsby5hKSxzLmI+by5hJiYhZSYmKHMuYj1vLmEpLHMuYz0tKHMuYi1vLmEpLzIsbi5nKXtjYXNlIDE6cy5kPS1zLmE7YnJlYWs7Y2FzZSAzOnMuZD1vLmJ9RWF0KHIpLFRhdChyKX1mdW5jdGlvbiBTb2UodCxlLG4pe3ZhciByLHMsbztzd2l0Y2gobz10Lm8scj11KHBvKHQucCxuKSwyNDQpLHM9ci5pLHMuYj1nSShyKSxzLmE9ZEkocikscy5hPWIuTWF0aC5tYXgocy5hLG8uYikscy5hPm8uYiYmIWUmJihzLmE9by5iKSxzLmQ9LShzLmEtby5iKS8yLG4uZyl7Y2FzZSA0OnMuYz0tcy5iO2JyZWFrO2Nhc2UgMjpzLmM9by5hfUVhdChyKSxUYXQocil9ZnVuY3Rpb24gQXBuKHQsZSl7dmFyIG4scixzLG8saDtpZighZS5kYygpKXtpZihzPXUoZS5YYigwKSwxMjgpLGUuZ2MoKT09MSl7dHVlKHQscyxzLDEsMCxlKTtyZXR1cm59Zm9yKG49MTtuPGUuZ2MoKTspKHMuanx8IXMubykmJihvPUIxbihlLG4pLG8mJihyPXUoby5hLDE5KS5hLGg9dShvLmIsMTI4KSx0dWUodCxzLGgsbixyLGUpLG49cisxLHM9aCkpfX1mdW5jdGlvbiBMcG4odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihoPW5ldyBCdSh0LmQpLFpzKGgsbmV3ICRYKSxlPShFcSgpLGx0KGN0KFNUdCwxKSxvZSwyNzAsMCxbeGx0LFRsdCx5bHQsU2x0LEVsdCxrbHQsX2x0LENsdF0pKSxuPTAsbz1uZXcgUyhoKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMDEpLHI9ZVtuJWUubGVuZ3RoXSxDYm4ocyxyKSwrK259ZnVuY3Rpb24gTXBuKHQsZSl7azQoKTt2YXIgbixyLHMsbztpZihlLmI8MilyZXR1cm4hMTtmb3Iobz1laShlLDApLG49dSh0aShvKSw4KSxyPW47by5iIT1vLmQuYzspe2lmKHM9dSh0aShvKSw4KSwhKFE4KHQscikmJlE4KHQscykpKXJldHVybiExO3I9c31yZXR1cm4hIShROCh0LHIpJiZROCh0LG4pKX1mdW5jdGlvbiBlNXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtyZXR1cm4gQz1udWxsLE09dCxoPUgwKE0sIngiKSxuPW5ldyBFenQoZSksa29uKG4uYSxoKSxkPUgwKE0sInkiKSxyPW5ldyBUenQoZSksRW9uKHIuYSxkKSx2PUgwKE0sWmN0KSxzPW5ldyBDenQoZSksVG9uKHMuYSx2KSxrPUgwKE0sUWN0KSxvPW5ldyBfenQoZSksQz0oQ29uKG8uYSxrKSxrKSxDfWZ1bmN0aW9uIGd5KHQsZSl7T3VlKHQsZSksdC5iJjEmJih0LmEuYT1udWxsKSx0LmImMiYmKHQuYS5mPW51bGwpLHQuYiY0JiYodC5hLmc9bnVsbCx0LmEuaT1udWxsKSx0LmImMTYmJih0LmEuZD1udWxsLHQuYS5lPW51bGwpLHQuYiY4JiYodC5hLmI9bnVsbCksdC5iJjMyJiYodC5hLmo9bnVsbCx0LmEuYz1udWxsKX1mdW5jdGlvbiBEcG4odCxlKXt2YXIgbixyLHM7aWYocz0wLGUubGVuZ3RoPjApdHJ5e3M9cWwoZSxTYSx3aSl9Y2F0Y2gobyl7dGhyb3cgbz1XaShvKSxfdChvLDEyNyk/KHI9byxpdChuZXcgVyQocikpKTppdChvKX1yZXR1cm4gbj0oIXQuYSYmKHQuYT1uZXcgWnR0KHQpKSx0LmEpLHM8bi5pJiZzPj0wP3UoQXQobixzKSw1Nik6bnVsbH1mdW5jdGlvbiBJcG4odCxlKXtpZih0PDApcmV0dXJuIHlfKGFmZSxsdChjdChRbiwxKSxEZSwxLDUsWyJpbmRleCIscGUodCldKSk7aWYoZTwwKXRocm93IGl0KG5ldyBGbihvZmUrZSkpO3JldHVybiB5XygiJXMgKCVzKSBtdXN0IGJlIGxlc3MgdGhhbiBzaXplICglcykiLGx0KGN0KFFuLDEpLERlLDEsNSxbImluZGV4IixwZSh0KSxwZShlKV0pKX1mdW5jdGlvbiBPcG4odCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBfdTtmb3Iobz1uZXcgZjIoWWEsIlsiLCJdIiksbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG8uYT9HcihvLmEsby5iKTpvLmE9bmV3IE9sKG8uZCksaDkoby5hLCIiK2UpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gUHBuKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gX3U7Zm9yKG89bmV3IGYyKFlhLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvLmE/R3Ioby5hLG8uYik6by5hPW5ldyBPbChvLmQpLGg5KG8uYSwiIitlKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIEZwbih0KXt2YXIgZSxuLHIscyxvO2lmKHQ9PW51bGwpcmV0dXJuIF91O2ZvcihvPW5ldyBmMihZYSwiWyIsIl0iKSxuPXQscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sby5hP0dyKG8uYSxvLmIpOm8uYT1uZXcgT2woby5kKSxoOShvLmEsIiIrZSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBOcG4odCl7dmFyIGUsbixyLHMsbztpZih0PT1udWxsKXJldHVybiBfdTtmb3Iobz1uZXcgZjIoWWEsIlsiLCJdIiksbj10LHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG8uYT9HcihvLmEsby5iKTpvLmE9bmV3IE9sKG8uZCksaDkoby5hLCIiK2UpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gQW9lKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihuPXQuYi5jLmxlbmd0aCxzPU5lKHQuYixlKTtlKjIrMTxuJiYocj0obz0yKmUrMSxoPW8rMSxkPW8saDxuJiZ0LmEudWUoTmUodC5iLGgpLE5lKHQuYixvKSk8MCYmKGQ9aCksZCksISh0LmEudWUocyxOZSh0LmIscikpPDApKTspY2godC5iLGUsTmUodC5iLHIpKSxlPXI7Y2godC5iLGUscyl9ZnVuY3Rpb24gbjV0KHQsZSxuLHIscyxvKXt2YXIgaCxkLHYsayxDO2ZvcihWdCh0KT09PVZ0KG4pJiYodD10LnNsaWNlKGUsZStzKSxlPTApLHY9bixkPWUsaz1lK3M7ZDxrOyloPWIuTWF0aC5taW4oZCsxZTQsaykscz1oLWQsQz10LnNsaWNlKGQsaCksQy5zcGxpY2UoMCwwLHIsbz9zOjApLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkodixDKSxkPWgscis9c31mdW5jdGlvbiBRc3QodCxlLG4pe3ZhciByLHM7cmV0dXJuIHI9bi5kLHM9bi5lLHQuZ1tyLmRdPD10LmlbZS5kXSYmdC5pW2UuZF08PXQuaVtyLmRdJiZ0Lmdbcy5kXTw9dC5pW2UuZF0mJnQuaVtlLmRdPD10Lmlbcy5kXT8hKHQuaVtyLmRdPHQuaVtzLmRdKTp0Lmlbci5kXTx0Lmlbcy5kXX1mdW5jdGlvbiBMb2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYocj10LmEuYy5sZW5ndGgscj4wKWZvcihoPXQuYy5kLGQ9dC5kLmQscz1mZChpYShuZXcgJGUoZC5hLGQuYiksaCksMS8ocisxKSksbz1uZXcgJGUoaC5hLGguYiksbj1uZXcgUyh0LmEpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDU1OSksZS5kLmE9by5hLGUuZC5iPW8uYixMaShvLHMpfWZ1bmN0aW9uIE1vZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2O2Zvcih2PWFzLG89bmV3IFMocWNlKHQuYikpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwxNjgpLGQ9bmV3IFMocWNlKGUuYikpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDE2OCkscj1FdW4ocy5hLHMuYixoLmEsaC5iLG4pLHY9Yi5NYXRoLm1pbih2LHIpO3JldHVybiB2fWZ1bmN0aW9uIEJzKHQsZSl7aWYoIWUpdGhyb3cgaXQobmV3IElDKTtpZih0Lmo9ZSwhdC5kKXN3aXRjaCh0LmouZyl7Y2FzZSAxOnQuYS5hPXQuby5hLzIsdC5hLmI9MDticmVhaztjYXNlIDI6dC5hLmE9dC5vLmEsdC5hLmI9dC5vLmIvMjticmVhaztjYXNlIDM6dC5hLmE9dC5vLmEvMix0LmEuYj10Lm8uYjticmVhaztjYXNlIDQ6dC5hLmE9MCx0LmEuYj10Lm8uYi8yfX1mdW5jdGlvbiBCcG4odCxlKXt2YXIgbixyLHM7cmV0dXJuIF90KGUuZywxMCkmJnUoZS5nLDEwKS5rPT0oVm4oKSxrcyk/YXM6KHM9WHgoZSkscz9iLk1hdGgubWF4KDAsdC5iLzItLjUpOihuPXQ0KGUpLG4/KHI9WHQoeWUob3kobiwoVGUoKSwkdikpKSksYi5NYXRoLm1heCgwLHIvMi0uNSkpOmFzKSl9ZnVuY3Rpb24gUnBuKHQsZSl7dmFyIG4scixzO3JldHVybiBfdChlLmcsMTApJiZ1KGUuZywxMCkuaz09KFZuKCksa3MpP2FzOihzPVh4KGUpLHM/Yi5NYXRoLm1heCgwLHQuYi8yLS41KToobj10NChlKSxuPyhyPVh0KHllKG95KG4sKFRlKCksJHYpKSkpLGIuTWF0aC5tYXgoMCxyLzItLjUpKTphcykpfWZ1bmN0aW9uIGpwbih0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKGg9dF8odC5kLHQuZSksbz1oLktjKCk7by5PYigpOylmb3Iocz11KG8uUGIoKSwxMSkscj10LmU9PSh2ZSgpLEJuKT9zLmU6cy5nLG49bmV3IFMocik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTcpLCFHYShlKSYmZS5jLmkuYyE9ZS5kLmkuYyYmKEdnbih0LGUpLCsrdC5mLCsrdC5jKX1mdW5jdGlvbiBEb2UodCxlKXt2YXIgbixyO2lmKGUuZGMoKSlyZXR1cm4gd24oKSx3bigpLGlvO2ZvcihyPW5ldyBoZSxsZShyLHBlKFNhKSksbj0xO248dC5mOysrbil0LmE9PW51bGwmJkl1ZSh0KSx0LmFbbl0mJmxlKHIscGUobikpO3JldHVybiByLmMubGVuZ3RoPT0xPyh3bigpLHduKCksaW8pOihsZShyLHBlKHdpKSksJHluKGUscikpfWZ1bmN0aW9uICRwbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2g9ZS5jLmkuayE9KFZuKCksT3MpLHY9aD9lLmQ6ZS5jLG49ZWRuKGUsdikuaSxzPXUodHIodC5rLHYpLDEyMSkscj10Lmlbbi5wXS5hLHlZdCh2LmkpPChuLmM/Um8obi5jLmEsbiwwKTotMSk/KG89cyxkPXIpOihvPXIsZD1zKSx5ZihsZih1ZihoZihjZihuZXcgQ2gsMCksNCksbyksZCkpfWZ1bmN0aW9uIHpwbih0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKG4pZm9yKHM9bi5hLmxlbmd0aCxyPW5ldyBlMihzKSxkPShyLmItci5hKSpyLmM8MD8oRnAoKSxJYik6bmV3IGpwKHIpO2QuT2IoKTspaD11KGQuUGIoKSwxOSksdj1Dc3QodCxmNihKbShuLGguYSkpKSx2JiYobz0oIWUuYiYmKGUuYj1uZXcgQ24oYnIsZSw0LDcpKSxlLmIpLERyKG8sdikpfWZ1bmN0aW9uIHFwbih0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKG4pZm9yKHM9bi5hLmxlbmd0aCxyPW5ldyBlMihzKSxkPShyLmItci5hKSpyLmM8MD8oRnAoKSxJYik6bmV3IGpwKHIpO2QuT2IoKTspaD11KGQuUGIoKSwxOSksdj1Dc3QodCxmNihKbShuLGguYSkpKSx2JiYobz0oIWUuYyYmKGUuYz1uZXcgQ24oYnIsZSw1LDgpKSxlLmMpLERyKG8sdikpfWZ1bmN0aW9uIGZJKHQsZSxuKXt2YXIgcixzO3I9ZS5hJnQuZixlLmI9dC5iW3JdLHQuYltyXT1lLHM9ZS5mJnQuZixlLmQ9dC5jW3NdLHQuY1tzXT1lLG4/KGUuZT1uLmUsZS5lP2UuZS5jPWU6dC5hPWUsZS5jPW4uYyxlLmM/ZS5jLmU9ZTp0LmU9ZSk6KGUuZT10LmUsZS5jPW51bGwsdC5lP3QuZS5jPWU6dC5hPWUsdC5lPWUpLCsrdC5pLCsrdC5nfWZ1bmN0aW9uIElvZSh0KXt2YXIgZSxuLHI7aWYoZT10LlBiKCksIXQuT2IoKSlyZXR1cm4gZTtmb3Iocj1oYyhHcihuZXcgTXAsImV4cGVjdGVkIG9uZSBlbGVtZW50IGJ1dCB3YXM6IDwiKSxlKSxuPTA7bjw0JiZ0Lk9iKCk7bisrKWhjKChyLmErPVlhLHIpLHQuUGIoKSk7dGhyb3cgdC5PYigpJiYoci5hKz0iLCAuLi4iKSxyLmErPSI+IixpdChuZXcgRm4oci5hKSl9ZnVuY3Rpb24gSHBuKHQsZSl7dmFyIG47ZS5kP2UuZC5iPWUuYjp0LmE9ZS5iLGUuYj9lLmIuZD1lLmQ6dC5lPWUuZCwhZS5lJiYhZS5jPyhuPXUoSngodC5iLGUuYSksMjgzKSxuLmE9MCwrK3QuYyk6KG49dSh0cih0LmIsZS5hKSwyODMpLC0tbi5hLGUuZT9lLmUuYz1lLmM6bi5iPWUuYyxlLmM/ZS5jLmU9ZS5lOm4uYz1lLmUpLC0tdC5kfWZ1bmN0aW9uIFZwbih0KXt2YXIgZSxuO3JldHVybiBuPS10LmEsZT1sdChjdCh4aCwxKSx5ZCwyNSwxNSxbNDMsNDgsNDgsNDgsNDhdKSxuPDAmJihlWzBdPTQ1LG49LW4pLGVbMV09ZVsxXSsoKG4vNjB8MCkvMTB8MCkmeXMsZVsyXT1lWzJdKyhuLzYwfDApJTEwJnlzLGVbM109ZVszXSsobiU2MC8xMHwwKSZ5cyxlWzRdPWVbNF0rbiUxMCZ5cyxNaChlLDAsZS5sZW5ndGgpfWZ1bmN0aW9uIE9vZSh0LGUsbil7dmFyIHIscztmb3Iocj1lLmQscz1uLmQ7ci5hLXMuYT09MCYmci5iLXMuYj09MDspci5hKz11bCh0LDI2KSpJXyt1bCh0LDI3KSpPXy0uNSxyLmIrPXVsKHQsMjYpKklfK3VsKHQsMjcpKk9fLS41LHMuYSs9dWwodCwyNikqSV8rdWwodCwyNykqT18tLjUscy5iKz11bCh0LDI2KSpJXyt1bCh0LDI3KSpPXy0uNX1mdW5jdGlvbiByNXQodCl7dmFyIGUsbixyLHM7Zm9yKHQuZz1uZXcgaV8odShMcihYYSksMjkwKSkscj0wLG49KHZlKCksUG4pLGU9MDtlPHQuai5jLmxlbmd0aDtlKyspcz11KE5lKHQuaixlKSwxMSkscy5qIT1uJiYociE9ZSYmengodC5nLG4sbmV3IGZhKHBlKHIpLHBlKGUpKSksbj1zLmoscj1lKTt6eCh0LmcsbixuZXcgZmEocGUocikscGUoZSkpKX1mdW5jdGlvbiBHcG4odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKHI9MCxuPW5ldyBTKHQuYik7bi5hPG4uYy5jLmxlbmd0aDspZm9yKGU9dShKKG4pLDI5KSxvPW5ldyBTKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKHM9dShKKG8pLDEwKSxzLnA9cisrLGQ9bmV3IFMocy5qKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMSksaC5wPXIrK31mdW5jdGlvbiBQb2UodCxlLG4scixzKXt2YXIgbyxoLGQsdixrO2lmKGUpZm9yKGQ9ZS5LYygpO2QuT2IoKTspZm9yKGg9dShkLlBiKCksMTApLGs9VTV0KGgsKHNvKCksbnUpLG4pLktjKCk7ay5PYigpOyl2PXUoay5QYigpLDExKSxvPXUoZWMoTG8ocy5mLHYpKSwxMTIpLG98fChvPW5ldyBQRCh0LmQpLHIuY1tyLmMubGVuZ3RoXT1vLGJvZShvLHYscykpfWZ1bmN0aW9uIGk1dCh0LGUpe3ZhciBuLHIscztpZihzPUM0KCgkdSgpLHlhKSx0LlRnKCksZSkscyl0bygpLHUocyw2NikuT2ooKXx8KHM9S3goVG8oeWEscykpKSxyPShuPXQuWWcocyksdShuPj0wP3QuX2cobiwhMCwhMCk6ZHYodCxzLCEwKSwxNTMpKSx1KHIsMjE1KS5vbChlKTtlbHNlIHRocm93IGl0KG5ldyBGbihsYitlLm5lKCkrWF8pKX1mdW5jdGlvbiBzNXQodCl7dmFyIGUsbjtyZXR1cm4gdD4tMHg4MDAwMDAwMDAwMDAmJnQ8MHg4MDAwMDAwMDAwMDA/dD09MD8wOihlPXQ8MCxlJiYodD0tdCksbj1wcyhiLk1hdGguZmxvb3IoYi5NYXRoLmxvZyh0KS8uNjkzMTQ3MTgwNTU5OTQ1MykpLCghZXx8dCE9Yi5NYXRoLnBvdygyLG4pKSYmKytuLG4pOkpuZShUdSh0KSl9ZnVuY3Rpb24gVXBuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihvPW5ldyBPMCxuPW5ldyBTKHQpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEyOSksaD1lLmEsZD1lLmIsIShvLmEuX2IoaCl8fG8uYS5fYihkKSkmJihzPWgscj1kLGguZS5iK2guai5iPjImJmQuZS5iK2Quai5iPD0yJiYocz1kLHI9aCksby5hLnpjKHMsbykscy5xPXIpO3JldHVybiBvfWZ1bmN0aW9uIEZvZSh0LGUpe3ZhciBuLHIscztyZXR1cm4gcj1uZXcgWTAodCksTW8ocixlKSxKdChyLChhZSgpLGVHKSxlKSxKdChyLChUZSgpLGNzKSwodWEoKSxHYykpLEp0KHIsSWQsKHQwKCksVUcpKSxEMChyLChWbigpLGtzKSksbj1uZXcgTWMsVW8obixyKSxCcyhuLCh2ZSgpLEJuKSkscz1uZXcgTWMsVW8ocyxyKSxCcyhzLEhuKSxyfWZ1bmN0aW9uIE5vZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyBkZXQoKGV2KCksUk8pKTtjYXNlIDE6cmV0dXJuIG5ldyBWQjtjYXNlIDI6cmV0dXJuIG5ldyBsdHQ7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGNyb3NzaW5nIG1pbmltaXplciAiKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24gQm9lKHQsZSl7dmFyIG4scixzLG8saDtmb3IodC5jW2UucF09ITAsbGUodC5hLGUpLGg9bmV3IFMoZS5qKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMTEpLHI9bmV3IEwxKG8uYik7R28oci5hKXx8R28oci5iKTspbj11KEdvKHIuYSk/SihyLmEpOkooci5iKSwxNykscz1zZm4obyxuKS5pLHQuY1tzLnBdfHxCb2UodCxzKX1mdW5jdGlvbiBSb2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGg9MCxuPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSwzMyksZD1lLmcscz1lLmYscj1iLk1hdGguc3FydChkKmQrcypzKSxoPWIuTWF0aC5tYXgocixoKSxvPVJvZShlKSxoPWIuTWF0aC5tYXgobyxoKTtyZXR1cm4gaH1mdW5jdGlvbiBadSgpe1p1PVosQ2I9bmV3IGM5KCJPVVRTSURFIiwwKSxzZz1uZXcgYzkoIklOU0lERSIsMSksc1A9bmV3IGM5KCJORVhUX1RPX1BPUlRfSUZfUE9TU0lCTEUiLDIpLG5BPW5ldyBjOSgiQUxXQVlTX1NBTUVfU0lERSIsMyksZUE9bmV3IGM5KCJBTFdBWVNfT1RIRVJfU0FNRV9TSURFIiw0KSxRNj1uZXcgYzkoIlNQQUNFX0VGRklDSUVOVCIsNSl9ZnVuY3Rpb24gam9lKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7cmV0dXJuIHI9VHNuKHQsKHM9KFN3KCksbz1uZXcgVnB0LG8pLG4mJkk1dChzLG4pLHMpLGUpLEc5KHIsUjAoZSxBZCkpLGxxKGUsciksdTJuKGUsciksZTV0KGUsciksaD1lLGQ9S3coaCwicG9ydHMiKSx2PW5ldyBxR3QodCxyKSxLMm4odi5hLHYuYixkKSxMaXQodCxlLHIpLHZ1bih0LGUscikscn1mdW5jdGlvbiBXcG4odCl7dmFyIGUsbjtyZXR1cm4gbj0tdC5hLGU9bHQoY3QoeGgsMSkseWQsMjUsMTUsWzQzLDQ4LDQ4LDU4LDQ4LDQ4XSksbjwwJiYoZVswXT00NSxuPS1uKSxlWzFdPWVbMV0rKChuLzYwfDApLzEwfDApJnlzLGVbMl09ZVsyXSsobi82MHwwKSUxMCZ5cyxlWzRdPWVbNF0rKG4lNjAvMTB8MCkmeXMsZVs1XT1lWzVdK24lMTAmeXMsTWgoZSwwLGUubGVuZ3RoKX1mdW5jdGlvbiBZcG4odCl7dmFyIGU7cmV0dXJuIGU9bHQoY3QoeGgsMSkseWQsMjUsMTUsWzcxLDc3LDg0LDQ1LDQ4LDQ4LDU4LDQ4LDQ4XSksdDw9MCYmKGVbM109NDMsdD0tdCksZVs0XT1lWzRdKygodC82MHwwKS8xMHwwKSZ5cyxlWzVdPWVbNV0rKHQvNjB8MCklMTAmeXMsZVs3XT1lWzddKyh0JTYwLzEwfDApJnlzLGVbOF09ZVs4XSt0JTEwJnlzLE1oKGUsMCxlLmxlbmd0aCl9ZnVuY3Rpb24gS3BuKHQpe3ZhciBlLG4scixzLG87aWYodD09bnVsbClyZXR1cm4gX3U7Zm9yKG89bmV3IGYyKFlhLCJbIiwiXSIpLG49dCxyPTAscz1uLmxlbmd0aDtyPHM7KytyKWU9bltyXSxvLmE/R3Ioby5hLG8uYik6by5hPW5ldyBPbChvLmQpLGg5KG8uYSwiIitfOShlKSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBhNXQodCxlKXt2YXIgbixyLHM7Zm9yKHM9d2kscj1uZXcgUyh1NChlKSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjEzKSxuLmYmJiF0LmNbbi5jXSYmKHQuY1tuLmNdPSEwLHM9Yi5NYXRoLm1pbihzLGE1dCh0LEJ6KG4sZSkpKSk7cmV0dXJuIHQuaVtlLmRdPXQuaix0LmdbZS5kXT1iLk1hdGgubWluKHMsdC5qKyspLHQuZ1tlLmRdfWZ1bmN0aW9uICRvZSh0LGUpe3ZhciBuLHIscztmb3Iocz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTExKSxyLmUuYj0obj1yLmIsbi5YZSgodWkoKSxkbCkpP24uSGYoKT09KHZlKCksUG4pPy1uLnJmKCkuYi1YdCh5ZShuLldlKGRsKSkpOlh0KHllKG4uV2UoZGwpKSk6bi5IZigpPT0odmUoKSxQbik/LW4ucmYoKS5iOjApfWZ1bmN0aW9uIFhwbih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobj1kMnQodC5lKSxvPWZkKHFNKG5jKGYydCh0LmUpKSx0LmQqdC5hLHQuYyp0LmIpLC0uNSksZT1uLmEtby5hLHM9bi5iLW8uYixkPTA7ZDx0LmM7ZCsrKXtmb3Iocj1lLGg9MDtoPHQuZDtoKyspbWhuKHQuZSxuZXcgYWgocixzLHQuYSx0LmIpKSYmU3EodCxoLGQsITEsITApLHIrPXQuYTtzKz10LmJ9fWZ1bmN0aW9uIFFwbih0KXt2YXIgZSxuLHI7aWYoamUoUmUocWUodCwodWkoKSxaTykpKSkpe2ZvcihyPW5ldyBoZSxuPW5ldyBhcihscihLMCh0KS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDc5KSxmdihlKSYmamUoUmUocWUoZSxiZnQpKSkmJihyLmNbci5jLmxlbmd0aF09ZSk7cmV0dXJuIHJ9ZWxzZSByZXR1cm4gd24oKSx3bigpLGlvfWZ1bmN0aW9uIGY2KHQpe3ZhciBlLG47aWYobj0hMSxfdCh0LDIwNCkpcmV0dXJuIG49ITAsdSh0LDIwNCkuYTtpZighbiYmX3QodCwyNTgpJiYoZT11KHQsMjU4KS5hJTE9PTAsZSkpcmV0dXJuIG49ITAscGUoVlhlKHUodCwyNTgpLmEpKTt0aHJvdyBpdChuZXcgdWQoIklkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gaW50ZWdlcjogJyIrdCsiJy4iKSl9ZnVuY3Rpb24gWnBuKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihvPW51bGwscz1uZXcgUUt0KCghdC5hJiYodC5hPW5ldyBadHQodCkpLHQuYSkpO2g1dChzKTspaWYobj11KHdxKHMpLDU2KSxyPShoPW4uVGcoKSxkPShUNChoKSxoLm8pLCFkfHwhbi5taChkKT9udWxsOnB3dChUaXQoZCksbi5haChkKSkpLHIhPW51bGwmJmhuKHIsZSkpe289bjticmVha31yZXR1cm4gb31mdW5jdGlvbiB6b2UodCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYoamwobiwib2NjdXJyZW5jZXMiKSxuPT0wKXJldHVybiBkPXUoc3koV3godC5hKSxlKSwxNCksZD9kLmdjKCk6MDtpZihoPXUoc3koV3godC5hKSxlKSwxNCksIWgpcmV0dXJuIDA7aWYobz1oLmdjKCksbj49byloLiRiKCk7ZWxzZSBmb3Iocz1oLktjKCkscj0wO3I8bjtyKyspcy5QYigpLHMuUWIoKTtyZXR1cm4gb31mdW5jdGlvbiBKcG4odCxlLG4pe3ZhciByLHMsbyxoO3JldHVybiBqbChuLCJvbGRDb3VudCIpLGpsKDAsIm5ld0NvdW50Iikscj11KHN5KFd4KHQuYSksZSksMTQpLChyP3IuZ2MoKTowKT09bj8oamwoMCwiY291bnQiKSxzPShvPXUoc3koV3godC5hKSxlKSwxNCksbz9vLmdjKCk6MCksaD0tcyxoPjA/cmJ0KCk6aDwwJiZ6b2UodCxlLC1oKSwhMCk6ITF9ZnVuY3Rpb24gZEkodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoZD0wLHQuYj09MCl7Zm9yKGg9RXNlKHQsITApLGU9MCxyPWgscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sbj4wJiYoZCs9biwrK2UpO2U+MSYmKGQrPXQuYyooZS0xKSl9ZWxzZSBkPWJIdChTbmUobCQoUmkoUW50KHQuYSksbmV3IE1sKSxuZXcgaGEpKSk7cmV0dXJuIGQ+MD9kK3Qubi5kK3Qubi5hOjB9ZnVuY3Rpb24gZ0kodCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoZD0wLHQuYj09MClkPWJIdChTbmUobCQoUmkoUW50KHQuYSksbmV3IHRoKSxuZXcgRmEpKSk7ZWxzZXtmb3IoaD1Uc2UodCwhMCksZT0wLHI9aCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxuPjAmJihkKz1uLCsrZSk7ZT4xJiYoZCs9dC5jKihlLTEpKX1yZXR1cm4gZD4wP2QrdC5uLmIrdC5uLmM6MH1mdW5jdGlvbiB0Ym4odCxlKXt2YXIgbixyLHMsbztmb3Iobz11KHBvKHQuYixlKSwxMjQpLG49by5hLHM9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7cy5PYigpOylyPXUocy5QYigpLDExMSksci5jJiYobi5hPWIuTWF0aC5tYXgobi5hLFZ3dChyLmMpKSk7aWYobi5hPjApc3dpdGNoKGUuZyl7Y2FzZSAyOm8ubi5jPXQuczticmVhaztjYXNlIDQ6by5uLmI9dC5zfX1mdW5jdGlvbiBlYm4odCxlKXt2YXIgbixyLHM7cmV0dXJuIG49dShRKGUsKEpmKCksYzcpKSwxOSkuYS11KFEodCxjNyksMTkpLmEsbj09MD8ocj1pYShuYyh1KFEodCwoWXAoKSx2TykpLDgpKSx1KFEodCxkUyksOCkpLHM9aWEobmModShRKGUsdk8pLDgpKSx1KFEoZSxkUyksOCkpLE1zKHIuYSpyLmIscy5hKnMuYikpOm59ZnVuY3Rpb24gbmJuKHQsZSl7dmFyIG4scixzO3JldHVybiBuPXUoUShlLChndigpLFBHKSksMTkpLmEtdShRKHQsUEcpLDE5KS5hLG49PTA/KHI9aWEobmModShRKHQsKGZjKCksek8pKSw4KSksdShRKHQsJFMpLDgpKSxzPWlhKG5jKHUoUShlLHpPKSw4KSksdShRKGUsJFMpLDgpKSxNcyhyLmEqci5iLHMuYSpzLmIpKTpufWZ1bmN0aW9uIHFvZSh0KXt2YXIgZSxuO3JldHVybiBuPW5ldyBNcCxuLmErPSJlXyIsZT1odW4odCksZSE9bnVsbCYmKG4uYSs9IiIrZSksdC5jJiZ0LmQmJihHcigobi5hKz0iICIsbiksaXEodC5jKSksR3IoaGMoKG4uYSs9IlsiLG4pLHQuYy5pKSwiXSIpLEdyKChuLmErPVVvdCxuKSxpcSh0LmQpKSxHcihoYygobi5hKz0iWyIsbiksdC5kLmkpLCJdIikpLG4uYX1mdW5jdGlvbiBIb2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgWkw7Y2FzZSAxOnJldHVybiBuZXcgY3R0O2Nhc2UgMjpyZXR1cm4gbmV3IG90dDtjYXNlIDM6cmV0dXJuIG5ldyBHQjtkZWZhdWx0OnRocm93IGl0KG5ldyBGbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IHBoYXNlICIrKHQuZiE9bnVsbD90LmY6IiIrdC5nKSkpfX1mdW5jdGlvbiBvNXQodCxlLG4scixzKXt2YXIgbztzd2l0Y2gobz0wLHMuZyl7Y2FzZSAxOm89Yi5NYXRoLm1heCgwLGUuYit0LmItKG4uYityKSk7YnJlYWs7Y2FzZSAzOm89Yi5NYXRoLm1heCgwLC10LmItcik7YnJlYWs7Y2FzZSAyOm89Yi5NYXRoLm1heCgwLC10LmEtcik7YnJlYWs7Y2FzZSA0Om89Yi5NYXRoLm1heCgwLGUuYSt0LmEtKG4uYStyKSl9cmV0dXJuIG99ZnVuY3Rpb24gcmJuKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKG4pZm9yKHM9bi5hLmxlbmd0aCxyPW5ldyBlMihzKSxkPShyLmItci5hKSpyLmM8MD8oRnAoKSxJYik6bmV3IGpwKHIpO2QuT2IoKTspaD11KGQuUGIoKSwxOSksbz1QOChuLGguYSksazh0IGluIG8uYXx8bnV0IGluIG8uYT9nbW4odCxvLGUpOnl4bih0LG8sZSkselFlKHUodHIodC5iLHBFKG8pKSw3OSkpfWZ1bmN0aW9uIGM1dCh0KXt2YXIgZSxuO3N3aXRjaCh0LmIpe2Nhc2UtMTpyZXR1cm4hMDtjYXNlIDA6cmV0dXJuIG49dC50LG4+MXx8bj09LTE/KHQuYj0tMSwhMCk6KGU9RGgodCksZSYmKHRvKCksZS5DaigpPT1qMGUpPyh0LmI9LTEsITApOih0LmI9MSwhMSkpO2RlZmF1bHQ6Y2FzZSAxOnJldHVybiExfX1mdW5jdGlvbiBpYm4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihyPSghZS5zJiYoZS5zPW5ldyBmZShNdSxlLDIxLDE3KSksZS5zKSxvPW51bGwscz0wLGg9ci5pO3M8aDsrK3Mpc3dpdGNoKG49dShBdChyLHMpLDE3MCksSHcoVG8odCxuKSkpe2Nhc2UgMjpjYXNlIDM6IW8mJihvPW5ldyBoZSksby5jW28uYy5sZW5ndGhdPW59cmV0dXJuIG98fCh3bigpLHduKCksaW8pfWZ1bmN0aW9uIHU1dCh0LGUpe3ZhciBuLHIscyxvO2lmKGZpKHQpLHQuYyE9MHx8dC5hIT0xMjMpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLG8wZSkpKSk7aWYobz1lPT0xMTIscj10LmQsbj12OCh0LmksMTI1LHIpLG48MCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYzBlKSkpKTtyZXR1cm4gcz1QbCh0LmkscixuKSx0LmQ9bisxLEx0ZShzLG8sKHQuZSY1MTIpPT01MTIpfWZ1bmN0aW9uIHNibih0KXt2YXIgZTtpZihlPXUoUSh0LChUZSgpLF9TKSksMzE0KSxlPT0objYoKSxQNikpdGhyb3cgaXQobmV3IGpDKCJUaGUgaGllcmFyY2h5IGF3YXJlIHByb2Nlc3NvciAiK2UrIiBpbiBjaGlsZCBub2RlICIrdCsiIGlzIG9ubHkgYWxsb3dlZCBpZiB0aGUgcm9vdCBub2RlIHNwZWNpZmllcyB0aGUgc2FtZSBoaWVyYXJjaGljYWwgcHJvY2Vzc29yLiIpKX1mdW5jdGlvbiBhYm4odCxlKXtkZigpO3ZhciBuLHIscyxvLGgsZDtmb3Iobj1udWxsLGg9ZS5LYygpO2guT2IoKTspbz11KGguUGIoKSwxMjgpLCFvLm8mJihyPWtRZShvLmEpLHM9dWVuKG8uYSksZD1uZXcgVF8ocixzLG51bGwsdShvLmQuYS5lYygpLktjKCkuUGIoKSwxNykpLGxlKGQuYyxvLmEpLHQuY1t0LmMubGVuZ3RoXT1kLG4mJmxlKG4uZCxkKSxuPWQpfWZ1bmN0aW9uIG9ibih0LGUpe3ZhciBuLHIscztpZighZSlnaXQodCxudWxsKSxZOCh0LG51bGwpO2Vsc2UgaWYoZS5pJjQpZm9yKHI9IltdIixuPWUuYzs7bj1uLmMpe2lmKCEobi5pJjQpKXtzPXRidCgoUDAobiksbi5vK3IpKSxnaXQodCxzKSxZOCh0LHMpO2JyZWFrfXIrPSJbXSJ9ZWxzZSBzPXRidCgoUDAoZSksZS5vKSksZ2l0KHQscyksWTgodCxzKTt0LnlrKGUpfWZ1bmN0aW9uIGJfKHQsZSxuLHIscyl7dmFyIG8saCxkLHY7cmV0dXJuIHY9bW50KHQsdShzLDU2KSksVnQodikhPT1WdChzKT8oZD11KHQuZ1tuXSw3Miksbz1aZChlLHYpLHA5KHQsbixSc3QodCxuLG8pKSx4bCh0LmUpJiYoaD1HcCh0LDksby5haygpLHMsdixyLCExKSxUNHQoaCxuZXcgejAodC5lLDksdC5jLGQsbyxyLCExKSkscml0KGgpKSx2KTpzfWZ1bmN0aW9uIGNibih0LGUsbil7dmFyIHIscyxvLGgsZCx2O2ZvcihyPXUoQWkodC5jLGUpLDE1KSxzPXUoQWkodC5jLG4pLDE1KSxvPXIuWmMoci5nYygpKSxoPXMuWmMocy5nYygpKTtvLlNiKCkmJmguU2IoKTspaWYoZD11KG8uVWIoKSwxOSksdj11KGguVWIoKSwxOSksZCE9dilyZXR1cm4gcHUoZC5hLHYuYSk7cmV0dXJuIW8uT2IoKSYmIWguT2IoKT8wOm8uT2IoKT8xOi0xfWZ1bmN0aW9uIFZvZSh0LGUpe3ZhciBuLHIsczt0cnl7cmV0dXJuIHM9SmluKHQuYSxlKSxzfWNhdGNoKG8pe2lmKG89V2kobyksX3QobywzMikpe3RyeXtpZihyPXFsKGUsU2Esd2kpLG49VmYodC5hKSxyPj0wJiZyPG4ubGVuZ3RoKXJldHVybiBuW3JdfWNhdGNoKGgpe2lmKGg9V2koaCksIV90KGgsMTI3KSl0aHJvdyBpdChoKX1yZXR1cm4gbnVsbH1lbHNlIHRocm93IGl0KG8pfX1mdW5jdGlvbiBac3QodCxlKXt2YXIgbixyLHM7aWYocz1DNCgoJHUoKSx5YSksdC5UZygpLGUpLHMpcmV0dXJuIHRvKCksdShzLDY2KS5PaigpfHwocz1LeChUbyh5YSxzKSkpLHI9KG49dC5ZZyhzKSx1KG4+PTA/dC5fZyhuLCEwLCEwKTpkdih0LHMsITApLDE1MykpLHUociwyMTUpLmxsKGUpO3Rocm93IGl0KG5ldyBGbihsYitlLm5lKCkrV2N0KSl9ZnVuY3Rpb24gdWJuKCl7VGJ0KCk7dmFyIHQ7cmV0dXJuIFQ1ZT91KF9FKChQcCgpLFloKSxCaCksMTkzOSk6KGlpKFAyLG5ldyBqZiksVjRuKCksdD11KF90KE5jKChQcCgpLFloKSxCaCksNTQ3KT9OYyhZaCxCaCk6bmV3IExYdCw1NDcpLFQ1ZT0hMCwkeG4odCksR3huKHQpLGtpKChFYnQoKSxzTHQpLHQsbmV3IG9KKSxrbyhZaCxCaCx0KSx0KX1mdW5jdGlvbiBsYm4odCxlKXt2YXIgbixyLHMsbzt0Lmo9LTEseGwodC5lKT8obj10Lmksbz10LmkhPTAsZ0QodCxlKSxyPW5ldyB6MCh0LmUsMyx0LmMsbnVsbCxlLG4sbykscz1lLlFrKHQuZSx0LmMsbnVsbCkscz14YWUodCxlLHMpLHM/KHMuRWkocikscy5GaSgpKTptaSh0LmUscikpOihnRCh0LGUpLHM9ZS5Rayh0LmUsdC5jLG51bGwpLHMmJnMuRmkoKSl9ZnVuY3Rpb24gZ3EodCxlKXt2YXIgbixyLHM7aWYocz0wLHI9ZVswXSxyPj10Lmxlbmd0aClyZXR1cm4tMTtmb3Iobj0oUnIocix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHIpKTtuPj00OCYmbjw9NTcmJihzPXMqMTArKG4tNDgpLCsrciwhKHI+PXQubGVuZ3RoKSk7KW49KFJyKHIsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChyKSk7cmV0dXJuIHI+ZVswXT9lWzBdPXI6cz0tMSxzfWZ1bmN0aW9uIGhibih0KXt2YXIgZSxuLHIscyxvO3JldHVybiBzPXUodC5hLDE5KS5hLG89dSh0LmIsMTkpLmEsbj1zLHI9byxlPWIuTWF0aC5tYXgoYi5NYXRoLmFicyhzKSxiLk1hdGguYWJzKG8pKSxzPD0wJiZzPT1vPyhuPTAscj1vLTEpOnM9PS1lJiZvIT1lPyhuPW8scj1zLG8+PTAmJisrbik6KG49LW8scj1zKSxuZXcgZmEocGUobikscGUocikpfWZ1bmN0aW9uIGZibih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGs7Zm9yKHM9MDtzPGUubztzKyspZm9yKG89cy1lLmorbixoPTA7aDxlLnA7aCsrKWlmKGQ9aC1lLmsrcix2PW8saz1kLHYrPXQuaixrKz10Lmssdj49MCYmaz49MCYmdjx0Lm8mJms8dC5wJiYoIU1zZShlLHMsaCkmJlNzZSh0LG8sZCl8fGY0KGUscyxoKSYmIXUxbih0LG8sZCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGRibih0LGUsbil7dmFyIHIscyxvLGgsZDtoPXQuYyxkPXQuZCxvPVlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbaC5pLm4saC5uLGguYV0pKS5iLHM9KG8rWW8obHQoY3QoV3MsMSksZWUsOCwwLFtkLmkubixkLm4sZC5hXSkpLmIpLzIscj1udWxsLGguaj09KHZlKCksSG4pP3I9bmV3ICRlKGUraC5pLmMuYy5hK24scyk6cj1uZXcgJGUoZS1uLHMpLG04KHQuYSwwLHIpfWZ1bmN0aW9uIGZ2KHQpe3ZhciBlLG4scixzO2ZvcihlPW51bGwscj16cChEMShsdChjdChqMSwxKSxEZSwyMCwwLFsoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyldKSkpO3pyKHIpOylpZihuPXUoTXIociksODIpLHM9RG8obiksIWUpZT1zO2Vsc2UgaWYoZSE9cylyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBKc3QodCxlLG4pe3ZhciByO2lmKCsrdC5qLGU+PXQuaSl0aHJvdyBpdChuZXcgeW8oaXV0K2UrRDIrdC5pKSk7aWYobj49dC5pKXRocm93IGl0KG5ldyB5byhzdXQrbitEMit0LmkpKTtyZXR1cm4gcj10Lmdbbl0sZSE9biYmKGU8bj9EYyh0LmcsZSx0LmcsZSsxLG4tZSk6RGModC5nLG4rMSx0LmcsbixlLW4pLHRzKHQuZyxlLHIpLHQuZWkoZSxyLG4pLHQuY2koKSkscn1mdW5jdGlvbiBsbih0LGUsbil7dmFyIHI7aWYocj11KHQuYy54YyhlKSwxNCkscilyZXR1cm4gci5GYyhuKT8oKyt0LmQsITApOiExO2lmKHI9dC5pYyhlKSxyLkZjKG4pKXJldHVybisrdC5kLHQuYy56YyhlLHIpLCEwO3Rocm93IGl0KG5ldyBkbXQoIk5ldyBDb2xsZWN0aW9uIHZpb2xhdGVkIHRoZSBDb2xsZWN0aW9uIHNwZWMiKSl9ZnVuY3Rpb24gcEkodCl7dmFyIGUsbixyO3JldHVybiB0PDA/MDp0PT0wPzMyOihyPS0odD4+MTYpLGU9cj4+MTYmMTYsbj0xNi1lLHQ9dD4+ZSxyPXQtMjU2LGU9cj4+MTYmOCxuKz1lLHQ8PD1lLHI9dC1FeSxlPXI+PjE2JjQsbis9ZSx0PDw9ZSxyPXQtbWQsZT1yPj4xNiYyLG4rPWUsdDw8PWUscj10Pj4xNCxlPXImfihyPj4xKSxuKzItZSl9ZnVuY3Rpb24gZ2JuKHQpe1V4KCk7dmFyIGUsbixyLHM7Zm9yKGRWPW5ldyBoZSxKdXQ9bmV3IF9yLFp1dD1uZXcgaGUsZT0oIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSksVTVuKGUpLHM9bmV3IG5yKGUpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwzMyksUm8oZFYsciwwKT09LTEmJihuPW5ldyBoZSxsZShadXQsbiksZXNlKHIsbikpO3JldHVybiBadXR9ZnVuY3Rpb24gcGJuKHQsZSxuKXt2YXIgcixzLG8saDt0LmE9bi5iLmQsX3QoZSwzNTIpPyhzPXg0KHUoZSw3OSksITEsITEpLG89bEkocykscj1uZXcgRWEodCksdmEobyxyKSxDSShvLHMpLGUuV2UoKHVpKCksYTUpKSE9bnVsbCYmdmEodShlLldlKGE1KSw3NCkscikpOihoPXUoZSw0NzApLGguSGcoaC5EZygpK3QuYS5hKSxoLklnKGguRWcoKSt0LmEuYikpfWZ1bmN0aW9uIEdvZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGs7Zm9yKGs9WHQoeWUoUShlLChUZSgpLExTKSkpKSx2PXRbMF0ubi5hK3RbMF0uby5hK3RbMF0uZC5jK2ssZD0xO2Q8dC5sZW5ndGg7ZCsrKXI9dFtkXS5uLHM9dFtkXS5vLG49dFtkXS5kLG89ci5hLW4uYi12LG88MCYmKHIuYS09byksaD1lLmYsaC5hPWIuTWF0aC5tYXgoaC5hLHIuYStzLmEpLHY9ci5hK3MuYStuLmMra31mdW5jdGlvbiBiYm4odCxlKXt2YXIgbixyLHMsbyxoLGQ7cmV0dXJuIHI9dSh1KHRyKHQuZyxlLmEpLDQ2KS5hLDY1KSxzPXUodSh0cih0LmcsZS5iKSw0NikuYSw2NSksbz1yLmIsaD1zLmIsbj1QM24obyxoKSxuPj0wP246KGQ9RDkoaWEobmV3ICRlKGguYytoLmIvMixoLmQraC5hLzIpLG5ldyAkZShvLmMrby5iLzIsby5kK28uYS8yKSkpLC0oZGxlKG8saCktMSkqZCl9ZnVuY3Rpb24gd2JuKHQsZSxuKXt2YXIgcjtscyhuZXcgVG4obnVsbCwoIW4uYSYmKG4uYT1uZXcgZmUoSmksbiw2LDYpKSxuZXcgX24obi5hLDE2KSkpLG5ldyBMR3QodCxlKSksbHMobmV3IFRuKG51bGwsKCFuLm4mJihuLm49bmV3IGZlKHFvLG4sMSw3KSksbmV3IF9uKG4ubiwxNikpKSxuZXcgTUd0KHQsZSkpLHI9dShxZShuLCh1aSgpLGE1KSksNzQpLHImJmR5dChyLHQsZSl9ZnVuY3Rpb24gZHYodCxlLG4pe3ZhciByLHMsbztpZihvPUM0KCgkdSgpLHlhKSx0LlRnKCksZSksbylyZXR1cm4gdG8oKSx1KG8sNjYpLk9qKCl8fChvPUt4KFRvKHlhLG8pKSkscz0ocj10LllnKG8pLHUocj49MD90Ll9nKHIsITAsITApOmR2KHQsbywhMCksMTUzKSksdShzLDIxNSkuaGwoZSxuKTt0aHJvdyBpdChuZXcgRm4obGIrZS5uZSgpK1djdCkpfWZ1bmN0aW9uIGw1dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx2O2lmKHM9dC5kW2VdLHMpe2lmKG89cy5nLHY9cy5pLHIhPW51bGwpe2ZvcihkPTA7ZDx2OysrZClpZihoPXUob1tkXSwxMzMpLGguU2goKT09biYmeWkocixoLmNkKCkpKXJldHVybiBofWVsc2UgZm9yKGQ9MDtkPHY7KytkKWlmKGg9dShvW2RdLDEzMyksVnQoaC5jZCgpKT09PVZ0KHIpKXJldHVybiBofXJldHVybiBudWxsfWZ1bmN0aW9uIGJJKHQsZSl7dmFyIG47aWYoZTwwKXRocm93IGl0KG5ldyBfUigiTmVnYXRpdmUgZXhwb25lbnQiKSk7aWYoZT09MClyZXR1cm4gZVY7aWYoZT09MXx8djN0KHQsZVYpfHx2M3QodCxzNykpcmV0dXJuIHQ7aWYoIXBjZSh0LDApKXtmb3Iobj0xOyFwY2UodCxuKTspKytuO3JldHVybiBlNChEaG4obiplKSxiSShibXQodCxuKSxlKSl9cmV0dXJuICQwbih0LGUpfWZ1bmN0aW9uIHZibih0LGUpe3ZhciBuLHIscztpZihWdCh0KT09PVZ0KGUpKXJldHVybiEwO2lmKHQ9PW51bGx8fGU9PW51bGx8fHQubGVuZ3RoIT1lLmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKWlmKHI9dFtuXSxzPWVbbl0sIShWdChyKT09PVZ0KHMpfHxyIT1udWxsJiZ5aShyLHMpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBVb2UodCl7eGJ0KCk7dmFyIGUsbixyO2Zvcih0aGlzLmI9JGJlLHRoaXMuYz0oYW8oKSxoMCksdGhpcy5mPShOVnQoKSxqYmUpLHRoaXMuYT10LHVidCh0aGlzLG5ldyB2bCkseXEodGhpcykscj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDgxKSxuLmR8fChlPW5ldyBvc3QobHQoY3QoYWx0LDEpLERlLDgxLDAsW25dKSksbGUodC5hLGUpKX1mdW5jdGlvbiBtYm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdjtpZighdHx8dC5jLmxlbmd0aD09MClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgdlF0KGUsIW4pLHM9bmV3IFModCk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksNzApLFY0dChvLChWQygpLG5ldyBWYShyKSkpO3JldHVybiBoPW8uaSxoLmE9KHY9by5uLG8uZS5iK3YuZCt2LmEpLGguYj0oZD1vLm4sby5lLmErZC5iK2QuYyksb31mdW5jdGlvbiBXb2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGQ9bEQodC5hKSxjMnQoZCxuZXcgb2YpLG49bnVsbCxzPWQsbz0wLGg9cy5sZW5ndGg7bzxoJiYocj1zW29dLHIuaz09KFZuKCksa3MpKTsrK28pZT11KFEociwoYWUoKSxvYykpLDYxKSwhKGUhPSh2ZSgpLEJuKSYmZSE9SG4pJiYobiYmdShRKG4sUjYpLDE1KS5GYyhyKSxuPXIpfWZ1bmN0aW9uIHlibih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGs7dj0oQW4oZSx0LmMubGVuZ3RoKSx1KHQuY1tlXSwzMjkpKSxGZyh0LGUpLHYuYi8yPj1uJiYocj1lLGs9KHYuYyt2LmEpLzIsaD1rLW4sdi5jPD1rLW4mJihzPW5ldyBEbnQodi5jLGgpLEhtKHQscisrLHMpKSxkPWsrbixkPD12LmEmJihvPW5ldyBEbnQoZCx2LmEpLEttKHIsdC5jLmxlbmd0aCksWEModC5jLHIsbykpKX1mdW5jdGlvbiBoNXQodCl7dmFyIGU7aWYoIXQuYyYmdC5nPT1udWxsKXQuZD10LnNpKHQuZiksRHIodCx0LmQpLGU9dC5kO2Vsc2V7aWYodC5nPT1udWxsKXJldHVybiEwO2lmKHQuaT09MClyZXR1cm4hMTtlPXUodC5nW3QuaS0xXSw0Nyl9cmV0dXJuIGU9PXQuYiYmbnVsbC5rbT49bnVsbC5qbSgpPyh3cSh0KSxoNXQodCkpOmUuT2IoKX1mdW5jdGlvbiB4Ym4odCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYoZD1uLCFkJiYoZD1xd3QobmV3IHI4LDApKSx2cihkLGMxZSwxKSxkaGUodC5jLGUpLGg9RjRuKHQuYSxlKSxoLmdjKCk9PTEpS2xlKHUoaC5YYigwKSwzNyksZCk7ZWxzZSBmb3Iobz0xL2guZ2MoKSxzPWguS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMzcpLEtsZShyLFJjKGQsbykpO0xLZSh0LmEsaCxlKSxGdm4oZSksb3IoZCl9ZnVuY3Rpb24gWW9lKHQpe2lmKHRoaXMuYT10LHQuYy5pLms9PShWbigpLGtzKSl0aGlzLmM9dC5jLHRoaXMuZD11KFEodC5jLmksKGFlKCksb2MpKSw2MSk7ZWxzZSBpZih0LmQuaS5rPT1rcyl0aGlzLmM9dC5kLHRoaXMuZD11KFEodC5kLmksKGFlKCksb2MpKSw2MSk7ZWxzZSB0aHJvdyBpdChuZXcgRm4oIkVkZ2UgIit0KyIgaXMgbm90IGFuIGV4dGVybmFsIGVkZ2UuIikpfWZ1bmN0aW9uIEtvZSh0LGUpe3ZhciBuLHIscztzPXQuYix0LmI9ZSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDMscyx0LmIpKSxlP2UhPXQmJihRYyh0LGUuemIpLGhpdCh0LGUuZCksbj0ocj1lLmMscj8/ZS56YiksZGl0KHQsbj09bnVsbHx8aG4obixlLnpiKT9udWxsOm4pKTooUWModCxudWxsKSxoaXQodCwwKSxkaXQodCxudWxsKSl9ZnVuY3Rpb24gWG9lKHQpe3ZhciBlLG47aWYodC5mKXtmb3IoO3Qubjx0Lm87KXtpZihlPXUodC5qP3Quai5waSh0Lm4pOnQuay5YYih0Lm4pLDcyKSxuPWUuYWsoKSxfdChuLDk5KSYmdShuLDE4KS5CYiZkYyYmKCF0LmV8fG4uR2ooKSE9ajd8fG4uYWooKSE9MCkmJmUuZGQoKSE9bnVsbClyZXR1cm4hMDsrK3Qubn1yZXR1cm4hMX1lbHNlIHJldHVybiB0Lm48dC5vfWZ1bmN0aW9uIFFvZSh0LGUpe3ZhciBuO3RoaXMuZT0oV20oKSxMcih0KSxXbSgpLEUzdCh0KSksdGhpcy5jPShMcihlKSxFM3QoZSkpLEEydCh0aGlzLmUuSGQoKS5kYygpPT10aGlzLmMuSGQoKS5kYygpKSx0aGlzLmQ9d2llKHRoaXMuZSksdGhpcy5iPXdpZSh0aGlzLmMpLG49dDIoUW4sW2VlLERlXSxbNSwxXSw1LFt0aGlzLmUuSGQoKS5nYygpLHRoaXMuYy5IZCgpLmdjKCldLDIpLHRoaXMuYT1uLGxjbih0aGlzKX1mdW5jdGlvbiBab2UodCl7IUl1dCYmKEl1dD1leG4oKSk7dmFyIGU9dC5yZXBsYWNlKC9bXHgwMC1ceDFmXHhhZFx1MDYwMC1cdTA2MDNcdTA2ZGRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGItXHUyMDBmXHUyMDI4LVx1MjAyZVx1MjA2MC1cdTIwNjRcdTIwNmEtXHUyMDZmXHVmZWZmXHVmZmY5LVx1ZmZmYiJcXF0vZyxmdW5jdGlvbihuKXtyZXR1cm4gY2luKG4pfSk7cmV0dXJuJyInK2UrJyInfWZ1bmN0aW9uIEpvZSh0KXtGdnQoKTt2YXIgZSxuO2Zvcih0aGlzLmI9YXBlLHRoaXMuYz1jcGUsdGhpcy5nPShGVnQoKSxzcGUpLHRoaXMuZD0oYW8oKSxoMCksdGhpcy5hPXQsUDV0KHRoaXMpLG49bmV3IFModC5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw1NyksIWUuYSYmdld0KFhlZShuZXcgUnB0LGx0KGN0KG9WLDEpLERlLDU3LDAsW2VdKSksdCksZS5lPW5ldyB2JChlLmQpfWZ1bmN0aW9uIGtibih0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKHM9dC5lLmMubGVuZ3RoLHI9TnQod2gsVHksMTUscywwLDEpLGg9bmV3IFModC5lKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNDQpLHJbby5iXT1uZXcgWmk7Zm9yKG49bmV3IFModC5jKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwyODIpLHJbZS5jLmJdLkZjKGUpLHJbZS5kLmJdLkZjKGUpO3JldHVybiByfWZ1bmN0aW9uIEVibih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZD1VZCh0LmMubGVuZ3RoKSxzPW5ldyBTKHQpO3MuYTxzLmMuYy5sZW5ndGg7KXtmb3Iocj11KEoocyksMTApLGg9bmV3IEhzLG89RHMociksbj1uZXcgYXIobHIoby5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDE3KSxlLmMuaT09ZS5kLml8fEZzKGgsZS5kLmkpO2QuY1tkLmMubGVuZ3RoXT1ofXJldHVybiBkfWZ1bmN0aW9uIFRibih0LGUpe3ZhciBuLHIscyxvLGg7aWYobj11KERuKHQuYSw0KSwxMjYpLGg9bj09bnVsbD8wOm4ubGVuZ3RoLGU+PWgpdGhyb3cgaXQobmV3IHFtKGUsaCkpO3JldHVybiBzPW5bZV0saD09MT9yPW51bGw6KHI9TnQoRmZ0LGx1dCw0MTUsaC0xLDAsMSksRGMobiwwLHIsMCxlKSxvPWgtZS0xLG8+MCYmRGMobixlKzEscixlLG8pKSxiRSh0LHIpLG1vZSh0LGUscyksc31mdW5jdGlvbiBkNigpe2Q2PVosdGs9dShBdChXdCgoZmJ0KCkscGMpLnFiKSw2KSwzNCksSjY9dShBdChXdChwYy5xYiksMyksMzQpLHpmdD11KEF0KFd0KHBjLnFiKSw0KSwzNCkscWZ0PXUoQXQoV3QocGMucWIpLDUpLDE4KSxjcSh0ayksY3EoSjYpLGNxKHpmdCksY3EocWZ0KSxBNWU9bmV3IHlsKGx0KGN0KE11LDEpLEI0LDE3MCwwLFt0ayxKNl0pKX1mdW5jdGlvbiB0Y2UodCxlKXt2YXIgbjt0aGlzLmQ9bmV3IE9DLHRoaXMuYj1lLHRoaXMuZT1uZXcgeG8oZS5xZigpKSxuPXQudS5IYygoWnUoKSxzUCkpLHQudS5IYyhzZyk/dC5EP3RoaXMuYT1uJiYhZS5JZigpOnRoaXMuYT0hMDp0LnUuSGMoQ2IpP24/dGhpcy5hPSEoZS56ZigpLktjKCkuT2IoKXx8ZS5CZigpLktjKCkuT2IoKSk6dGhpcy5hPSExOnRoaXMuYT0hMX1mdW5jdGlvbiBlY2UodCxlKXt2YXIgbixyLHMsbztmb3Iobj10Lm8uYSxvPXUodShBaSh0LnIsZSksMjEpLDg0KS5LYygpO28uT2IoKTspcz11KG8uUGIoKSwxMTEpLHMuZS5hPShyPXMuYixyLlhlKCh1aSgpLGRsKSk/ci5IZigpPT0odmUoKSxCbik/LXIucmYoKS5hLVh0KHllKHIuV2UoZGwpKSk6bitYdCh5ZShyLldlKGRsKSkpOnIuSGYoKT09KHZlKCksQm4pPy1yLnJmKCkuYTpuKX1mdW5jdGlvbiBuY2UodCxlKXt2YXIgbixyLHMsbztuPXUoUSh0LChUZSgpLFdsKSksMTAzKSxvPXUocWUoZSxDNyksNjEpLHM9dShRKHQsY3MpLDk4KSxzIT0odWEoKSxHMSkmJnMhPVRiP289PSh2ZSgpLFpvKSYmKG89dXh0KGUsbiksbz09Wm8mJihvPWE2KG4pKSk6KHI9WWxlKGUpLHI+MD9vPWE2KG4pOm89WUQoYTYobikpKSx3byhlLEM3LG8pfWZ1bmN0aW9uIENibih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKGg9dC5qLGUuYSE9ZS5iJiZacyhoLG5ldyBleCkscz1oLmMubGVuZ3RoLzJ8MCxyPTA7cjxzO3IrKylvPShBbihyLGguYy5sZW5ndGgpLHUoaC5jW3JdLDExMykpLG8uYyYmQnMoby5kLGUuYSk7Zm9yKG49cztuPGguYy5sZW5ndGg7bisrKW89KEFuKG4saC5jLmxlbmd0aCksdShoLmNbbl0sMTEzKSksby5jJiZCcyhvLmQsZS5iKX1mdW5jdGlvbiBfYm4odCxlLG4pe3ZhciByLHMsbztyZXR1cm4gcj10LmNbZS5jLnBdW2UucF0scz10LmNbbi5jLnBdW24ucF0sci5hIT1udWxsJiZzLmEhPW51bGw/KG89VW50KHIuYSxzLmEpLG88MD9rSSh0LGUsbik6bz4wJiZrSSh0LG4sZSksbyk6ci5hIT1udWxsPyhrSSh0LGUsbiksLTEpOnMuYSE9bnVsbD8oa0kodCxuLGUpLDEpOjB9ZnVuY3Rpb24gcmNlKHQsZSl7dmFyIG4scixzLG87dC5laigpPyhuPXQuVmkoKSxvPXQuZmooKSwrK3Quaix0LkhpKG4sdC5vaShuLGUpKSxyPXQuWmkoMyxudWxsLGUsbixvKSx0LmJqKCk/KHM9dC5jaihlLG51bGwpLHM/KHMuRWkocikscy5GaSgpKTp0LiRpKHIpKTp0LiRpKHIpKToobVh0KHQsZSksdC5iaigpJiYocz10LmNqKGUsbnVsbCkscyYmcy5GaSgpKSl9ZnVuY3Rpb24gcHEodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihoPW91KHQuZS5UZygpLGUpLHM9bmV3IG94LG49dSh0LmcsMTE5KSxvPXQuaTstLW8+PTA7KXI9bltvXSxoLnJsKHIuYWsoKSkmJkRyKHMscik7IVVoZSh0LHMpJiZ4bCh0LmUpJiZuOCh0LGUuJGooKT9HcCh0LDYsZSwod24oKSxpbyksbnVsbCwtMSwhMSk6R3AodCxlLktqKCk/MjoxLGUsbnVsbCxudWxsLC0xLCExKSl9ZnVuY3Rpb24gVEUoKXtURT1aO3ZhciB0LGU7Zm9yKEQ2PU50KGo0LGVlLDkxLDMyLDAsMSksbFM9TnQoajQsZWUsOTEsMzIsMCwxKSx0PTEsZT0wO2U8PTE4O2UrKylENltlXT1KRCh0KSxsU1tlXT1KRChGMCh0LGUpKSx0PV9hKHQsNSk7Zm9yKDtlPGxTLmxlbmd0aDtlKyspRDZbZV09ZTQoRDZbZS0xXSxENlsxXSksbFNbZV09ZTQobFNbZS0xXSwocmIoKSxSdXQpKX1mdW5jdGlvbiBTYm4odCxlKXt2YXIgbixyLHMsbyxoO3JldHVybiB0LmE9PShrRSgpLG1TKT8hMDoobz1lLmEuYyxuPWUuYS5jK2UuYS5iLCEoZS5qJiYocj1lLkEsaD1yLmMuYy5hLXIuby5hLzIscz1vLShyLm4uYStyLm8uYSkscz5oKXx8ZS5xJiYocj1lLkMsaD1yLmMuYy5hLXIuby5hLzIscz1yLm4uYS1uLHM+aCkpKX1mdW5jdGlvbiBBYm4odCxlKXt2YXIgbjt2cihlLCJQYXJ0aXRpb24gcHJlcHJvY2Vzc2luZyIsMSksbj11KEJsKFJpKFdvKFJpKG5ldyBUbihudWxsLG5ldyBfbih0LmEsMTYpKSxuZXcgUUspLG5ldyB3TiksbmV3IFo1KSxjMihuZXcga2UsbmV3IGNlLG5ldyBYbixsdChjdChmbCwxKSxvZSwxMzIsMCxbKE8xKCksVWwpXSkpKSwxNSksbHMobi5PYygpLG5ldyB2Tiksb3IoZSl9ZnVuY3Rpb24gaWNlKHQpe19ydCgpO3ZhciBlLG4scixzLG8saCxkO2ZvcihuPW5ldyBhMixzPW5ldyBTKHQuZS5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMjkpLGg9bmV3IFMoci5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMCksZD10Lmdbby5wXSxlPXUoWHcobixkKSwxNSksZXx8KGU9bmV3IGhlLG0yKG4sZCxlKSksZS5GYyhvKTtyZXR1cm4gbn1mdW5jdGlvbiBMYm4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihzPWUuYi5iLHQuYT1OdCh3aCxUeSwxNSxzLDAsMSksdC5iPU50KHBsLG8wLDI1LHMsMTYsMSksaD1laShlLmIsMCk7aC5iIT1oLmQuYzspbz11KHRpKGgpLDg2KSx0LmFbby5nXT1uZXcgWmk7Zm9yKHI9ZWkoZS5hLDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSwxODgpLHQuYVtuLmIuZ10uRmMobiksdC5hW24uYy5nXS5GYyhuKX1mdW5jdGlvbiBzY2UodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/bWYodCk6KGU9bmV3IF9oKG1mKHQpKSxlLmErPSIgKHN0YXJ0WDogIiwkMyhlLHQuaiksZS5hKz0iLCBzdGFydFk6ICIsJDMoZSx0LmspLGUuYSs9IiwgZW5kWDogIiwkMyhlLHQuYiksZS5hKz0iLCBlbmRZOiAiLCQzKGUsdC5jKSxlLmErPSIsIGlkZW50aWZpZXI6ICIsZ28oZSx0LmQpLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gZjV0KHQpe3ZhciBlO3JldHVybiB0LkRiJjY0P0o5KHQpOihlPW5ldyBfaChKOSh0KSksZS5hKz0iIChvcmRlcmVkOiAiLExnKGUsKHQuQmImMjU2KSE9MCksZS5hKz0iLCB1bmlxdWU6ICIsTGcoZSwodC5CYiY1MTIpIT0wKSxlLmErPSIsIGxvd2VyQm91bmQ6ICIseGV0KGUsdC5zKSxlLmErPSIsIHVwcGVyQm91bmQ6ICIseGV0KGUsdC50KSxlLmErPSIpIixlLmEpfWZ1bmN0aW9uIGFjZSh0LGUsbixyLHMsbyxoLGQpe3ZhciB2O3JldHVybiBfdCh0LkNiLDg4KSYmZ3koc2wodSh0LkNiLDg4KSksNCksUWModCxuKSx0LmY9cixoRSh0LHMpLGRFKHQsbyksbEUodCxoKSxmRSh0LCExKSxxZyh0LCEwKSxnRSh0LGQpLHpnKHQsITApLFJnKHQsMCksdC5iPTAscnkodCwxKSx2PUYxKHQsZSxudWxsKSx2JiZ2LkZpKCksS2l0KHQsITEpLHR9ZnVuY3Rpb24gb2NlKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIG49dShOYyh0LmEsZSksNTEyKSxufHwocj1uZXcgcXJ0KGUpLHM9KE4kKCksJDE/bnVsbDpyLmMpLG89UGwocywwLGIuTWF0aC5tYXgoMCxUaihzLEN1KDQ2KSkpKSx0SmUocixvY2UodCxvKSksKCQxP251bGw6ci5jKS5sZW5ndGg9PTAmJlZXdChyLG5ldyB0ZSksa28odC5hLCQxP251bGw6ci5jLHIpLHIpfWZ1bmN0aW9uIE1ibih0LGUpe3ZhciBuO3QuYj1lLHQuZz1uZXcgaGUsbj1GYm4odC5iKSx0LmU9bix0LmY9bix0LmM9amUoUmUoUSh0LmIsKHNxKCksVkV0KSkpKSx0LmE9eWUoUSh0LmIsKHVpKCksVzYpKSksdC5hPT1udWxsJiYodC5hPTEpLFh0KHQuYSk+MT90LmUqPVh0KHQuYSk6dC5mLz1YdCh0LmEpLHVsbih0KSxnZm4odCksWHZuKHQpLEp0KHQuYiwob18oKSxmViksdC5nKX1mdW5jdGlvbiBjY2UodCxlLG4pe3ZhciByLHMsbyxoLGQsdjtmb3Iocj0wLHY9bixlfHwocj1uKih0LmMubGVuZ3RoLTEpLHYqPS0xKSxvPW5ldyBTKHQpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMTApLEp0KHMsKFRlKCksSWQpLCh0MCgpLFVHKSkscy5vLmE9cixkPUdnKHMsKHZlKCksSG4pKS5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwxMSksaC5uLmE9cjtyKz12fX1mdW5jdGlvbiBkNXQodCxlLG4pe3ZhciByLHMsbzt0LmVqKCk/KG89dC5maigpLFVEKHQsZSxuKSxyPXQuWmkoMyxudWxsLG4sZSxvKSx0LmJqKCk/KHM9dC5jaihuLG51bGwpLHQuaWooKSYmKHM9dC5qaihuLHMpKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSk6dC4kaShyKSk6KFVEKHQsZSxuKSx0LmJqKCkmJihzPXQuY2oobixudWxsKSxzJiZzLkZpKCkpKX1mdW5jdGlvbiBnNih0LGUsbil7dmFyIHIscyxvLGgsZCx2O3JldHVybiBkPXQuR2sobiksZCE9bj8oaD10LmdbZV0sdj1kLHA5KHQsZSx0Lm9pKGUsdikpLG89aCx0LmdpKGUsdixvKSx0LnJrKCkmJihyPW4scz10LmRqKHIsbnVsbCksIXUoZCw0OSkuZWgoKSYmKHM9dC5jaih2LHMpKSxzJiZzLkZpKCkpLHhsKHQuZSkmJm44KHQsdC5aaSg5LG4sZCxlLCExKSksZCk6bn1mdW5jdGlvbiBEYm4odCxlKXt2YXIgbixyLHMsbztmb3Iocj1uZXcgUyh0LmEuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTg5KSxuLmc9ITA7Zm9yKG89bmV3IFModC5hLmIpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDgxKSxzLms9amUoUmUodC5lLktiKG5ldyBmYShzLGUpKSkpLHMuZC5nPXMuZC5nJmplKFJlKHQuZS5LYihuZXcgZmEocyxlKSkpKTtyZXR1cm4gdH1mdW5jdGlvbiB1Y2UodCl7dmFyIGUsbixyLHMsbztpZihuPShlPXUoVmYoWGEpLDkpLG5ldyBzaChlLHUoZmYoZSxlLmxlbmd0aCksOSksMCkpLG89dShRKHQsKGFlKCksSnUpKSwxMCksbylmb3Iocz1uZXcgUyhvLmopO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDExKSxWdChRKHIsX2kpKT09PVZ0KHQpJiZ2OShuZXcgTDEoci5iKSkmJnZmKG4sci5qKTtyZXR1cm4gbn1mdW5jdGlvbiBsY2UodCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYoIXQuZFtuLnBdKXtmb3Iocz1uZXcgYXIobHIoRHMobikuYS5LYygpLG5ldyB6KSk7enIocyk7KXtmb3Iocj11KE1yKHMpLDE3KSxkPXIuZC5pLGg9bmV3IGFyKGxyKGpvKGQpLmEuS2MoKSxuZXcgeikpO3pyKGgpOylvPXUoTXIoaCksMTcpLG8uYy5pPT1lJiYodC5hW28ucF09ITApO2xjZSh0LGUsZCl9dC5kW24ucF09ITB9fWZ1bmN0aW9uIElibih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2lmKHI9YmllKHQuRGImMjU0KSxyPT0xKXQuRWI9bnVsbDtlbHNlIGlmKG89dTIodC5FYikscj09MilzPVNzdCh0LGUpLHQuRWI9b1tzPT0wPzE6MF07ZWxzZXtmb3IoaD1OdChRbixEZSwxLHItMSw1LDEpLG49MixkPTAsdj0wO248PTEyODtuPDw9MSluPT1lPysrZDp0LkRiJm4mJihoW3YrK109b1tkKytdKTt0LkViPWh9dC5EYiY9fmV9ZnVuY3Rpb24gT2JuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iocj0oIWUucyYmKGUucz1uZXcgZmUoTXUsZSwyMSwxNykpLGUucyksbz1udWxsLHM9MCxoPXIuaTtzPGg7KytzKXN3aXRjaChuPXUoQXQocixzKSwxNzApLEh3KFRvKHQsbikpKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNjp7IW8mJihvPW5ldyBoZSksby5jW28uYy5sZW5ndGhdPW47YnJlYWt9fXJldHVybiBvfHwod24oKSx3bigpLGlvKX1mdW5jdGlvbiBnNXQodCl7dmFyIGU7c3dpdGNoKGU9MCx0KXtjYXNlIDEwNTplPTI7YnJlYWs7Y2FzZSAxMDk6ZT04O2JyZWFrO2Nhc2UgMTE1OmU9NDticmVhaztjYXNlIDEyMDplPTE2O2JyZWFrO2Nhc2UgMTE3OmU9MzI7YnJlYWs7Y2FzZSAxMTk6ZT02NDticmVhaztjYXNlIDcwOmU9MjU2O2JyZWFrO2Nhc2UgNzI6ZT0xMjg7YnJlYWs7Y2FzZSA4ODplPTUxMjticmVhaztjYXNlIDQ0OmU9eGZ9cmV0dXJuIGV9ZnVuY3Rpb24gUGJuKHQsZSxuLHIscyl7dmFyIG8saCxkLHY7aWYoVnQodCk9PT1WdChlKSYmcj09cyl7YWxlKHQscixuKTtyZXR1cm59Zm9yKGQ9MDtkPHI7ZCsrKXtmb3IoaD0wLG89dFtkXSx2PTA7djxzO3YrKyloPVBhKFBhKF9hKE5zKG8sY28pLE5zKGVbdl0sY28pKSxOcyhuW2Qrdl0sY28pKSxOcyhBcihoKSxjbykpLG5bZCt2XT1BcihoKSxoPVZtKGgsMzIpO25bZCtzXT1BcihoKX19ZnVuY3Rpb24gRmJuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE07Zm9yKEM9MCxrPTAscz10LmEsZD1zLmEuZ2MoKSxyPXMuYS5lYygpLktjKCk7ci5PYigpOyluPXUoci5QYigpLDU2MSksZT0obi5iJiZTYXQobiksbi5hKSxNPWUuYSxoPWUuYixDKz1NK2gsays9TSpoO3JldHVybiB2PWIuTWF0aC5zcXJ0KDQwMCpkKmstNCprK0MqQykrQyxvPTIqKDEwMCpkLTEpLG89PTA/djp2L299ZnVuY3Rpb24gaGNlKHQsZSl7ZS5iIT0wJiYoaXNOYU4odC5zKT90LnM9WHQoKFpuKGUuYiE9MCkseWUoZS5hLmEuYykpKTp0LnM9Yi5NYXRoLm1pbih0LnMsWHQoKFpuKGUuYiE9MCkseWUoZS5hLmEuYykpKSksaXNOYU4odC5jKT90LmM9WHQoKFpuKGUuYiE9MCkseWUoZS5jLmIuYykpKTp0LmM9Yi5NYXRoLm1heCh0LmMsWHQoKFpuKGUuYiE9MCkseWUoZS5jLmIuYykpKSkpfWZ1bmN0aW9uIHdfKHQpe3ZhciBlLG4scixzO2ZvcihlPW51bGwscj16cChEMShsdChjdChqMSwxKSxEZSwyMCwwLFsoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyldKSkpO3pyKHIpOylpZihuPXUoTXIociksODIpLHM9RG8obiksIWUpZT1lcyhzKTtlbHNlIGlmKGUhPWVzKHMpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHRhdCh0LGUpe3ZhciBuLHIscyxvO3QuZWooKT8obj10Lmksbz10LmZqKCksZ0QodCxlKSxyPXQuWmkoMyxudWxsLGUsbixvKSx0LmJqKCk/KHM9dC5jaihlLG51bGwpLHQuaWooKSYmKHM9dC5qaihlLHMpKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSk6dC4kaShyKSk6KGdEKHQsZSksdC5iaigpJiYocz10LmNqKGUsbnVsbCkscyYmcy5GaSgpKSl9ZnVuY3Rpb24gZmNlKHQsZSxuKXt2YXIgcixzLG87dC5laigpPyhvPXQuZmooKSwrK3Quaix0LkhpKGUsdC5vaShlLG4pKSxyPXQuWmkoMyxudWxsLG4sZSxvKSx0LmJqKCk/KHM9dC5jaihuLG51bGwpLHM/KHMuRWkocikscy5GaSgpKTp0LiRpKHIpKTp0LiRpKHIpKTooKyt0LmosdC5IaShlLHQub2koZSxuKSksdC5iaigpJiYocz10LmNqKG4sbnVsbCkscyYmcy5GaSgpKSl9ZnVuY3Rpb24gTmJuKHQpe3ZhciBlLG4scixzO2ZvcihzPXQubGVuZ3RoLGU9bnVsbCxyPTA7cjxzO3IrKyluPShScihyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocikpLGhkKCIuKis/e1soKXxcXF4kIixDdShuKSk+PTA/KGV8fChlPW5ldyAkQyxyPjAmJmdvKGUsdC5zdWJzdHIoMCxyKSkpLGUuYSs9IlxcIixTOChlLG4meXMpKTplJiZTOChlLG4meXMpO3JldHVybiBlP2UuYTp0fWZ1bmN0aW9uIEJibih0KXt2YXIgZTtpZighdC5hKXRocm93IGl0KG5ldyBObygiSURhdGFUeXBlIGNsYXNzIGV4cGVjdGVkIGZvciBsYXlvdXQgb3B0aW9uICIrdC5mKSk7aWYoZT1Hc24odC5hKSxlPT1udWxsKXRocm93IGl0KG5ldyBObygiQ291bGRuJ3QgY3JlYXRlIG5ldyBpbnN0YW5jZSBvZiBwcm9wZXJ0eSAnIit0LmYrIicuICIrYWRlKyhQMChnUCksZ1AuaykrZDh0KSk7cmV0dXJuIHUoZSw0MTQpfWZ1bmN0aW9uIGVhdCh0KXt2YXIgZSxuLHIscyxvO3JldHVybiBvPXQuZWgoKSxvJiZvLmtoKCkmJihzPVpwKHQsbykscyE9byk/KG49dC5WZygpLHI9KGU9dC5WZygpLGU+PTA/dC5RZyhudWxsKTp0LmVoKCkuaWgodCwtMS1lLG51bGwsbnVsbCkpLHQuUmcodShzLDQ5KSxuKSxyJiZyLkZpKCksdC5MZygpJiZ0Lk1nKCkmJm4+LTEmJm1pKHQsbmV3IEpzKHQsOSxuLG8scykpLHMpOm99ZnVuY3Rpb24gZGNlKHQpe3ZhciBlLG4scixzLG8saCxkLHY7Zm9yKGg9MCxvPXQuZi5lLHI9MDtyPG8uYy5sZW5ndGg7KytyKWZvcihkPShBbihyLG8uYy5sZW5ndGgpLHUoby5jW3JdLDE0NCkpLHM9cisxO3M8by5jLmxlbmd0aDsrK3Mpdj0oQW4ocyxvLmMubGVuZ3RoKSx1KG8uY1tzXSwxNDQpKSxuPVdwKGQuZCx2LmQpLGU9bi10LmFbZC5iXVt2LmJdLGgrPXQuaVtkLmJdW3YuYl0qZSplO3JldHVybiBofWZ1bmN0aW9uIFJibih0LGUpe3ZhciBuO2lmKCFVcyhlLChUZSgpLHV1KSkmJihuPXVkbih1KFEoZSxFVHQpLDM2MCksdShRKHQsdXUpLDE2MykpLEp0KGUsRVR0LG4pLCF6cihuZXcgYXIobHIoVTAoZSkuYS5LYygpLG5ldyB6KSkpKSlzd2l0Y2gobi5nKXtjYXNlIDE6SnQoZSx1dSwoZGgoKSxFUykpO2JyZWFrO2Nhc2UgMjpKdChlLHV1LChkaCgpLFRTKSl9fWZ1bmN0aW9uIGpibih0LGUpe3ZhciBuO0t2bih0KSx0LmE9KG49bmV3IHdldCxscyhuZXcgVG4obnVsbCxuZXcgX24oZS5kLDE2KSksbmV3IFl0dChuKSksbiksc3ZuKHQsdShRKGUuYiwoVGUoKSxpaHQpKSwzNzYpKSxaZm4odCksVmJuKHQpLGhkbih0KSxKZm4odCksWTNuKHQsZSksbHMoV28obmV3IFRuKG51bGwsVFp0KEVubih0LmIpLmEpKSxuZXcgQTMpLG5ldyB6WCksZS5hPSExLHQuYT1udWxsfWZ1bmN0aW9uIGdjZSgpe040dC5jYWxsKHRoaXMsWkUsKFN3KCksRzRlKSksdGhpcy5wPW51bGwsdGhpcy5hPW51bGwsdGhpcy5mPW51bGwsdGhpcy5uPW51bGwsdGhpcy5nPW51bGwsdGhpcy5jPW51bGwsdGhpcy5pPW51bGwsdGhpcy5qPW51bGwsdGhpcy5kPW51bGwsdGhpcy5iPW51bGwsdGhpcy5lPW51bGwsdGhpcy5rPW51bGwsdGhpcy5vPW51bGwsdGhpcy5zPW51bGwsdGhpcy5xPSExLHRoaXMucj0hMX1mdW5jdGlvbiBDRSgpe0NFPVosT2Z0PW5ldyBQeChNMWUsMCksbFU9bmV3IFB4KCJJTlNJREVfU0VMRl9MT09QUyIsMSksaFU9bmV3IFB4KCJNVUxUSV9FREdFUyIsMiksdVU9bmV3IFB4KCJFREdFX0xBQkVMUyIsMyksSWZ0PW5ldyBQeCgiUE9SVFMiLDQpLGNVPW5ldyBQeCgiQ09NUE9VTkQiLDUpLG9VPW5ldyBQeCgiQ0xVU1RFUlMiLDYpLERmdD1uZXcgUHgoIkRJU0NPTk5FQ1RFRCIsNyl9ZnVuY3Rpb24gcGNlKHQsZSl7dmFyIG4scixzO2lmKGU9PTApcmV0dXJuKHQuYVswXSYxKSE9MDtpZihlPDApdGhyb3cgaXQobmV3IF9SKCJOZWdhdGl2ZSBiaXQgYWRkcmVzcyIpKTtpZihzPWU+PjUscz49dC5kKXJldHVybiB0LmU8MDtpZihuPXQuYVtzXSxlPTE8PChlJjMxKSx0LmU8MCl7aWYocj1JbmUodCksczxyKXJldHVybiExO3I9PXM/bj0tbjpuPX5ufXJldHVybihuJmUpIT0wfWZ1bmN0aW9uICRibih0LGUsbixyKXt2YXIgczt1KG4uYiw2NSksdShuLmIsNjUpLHUoci5iLDY1KSx1KHIuYiw2NSkscz1pYShuYyh1KG4uYiw2NSkuYyksdShyLmIsNjUpLmMpLGpqKHMsTW9lKHUobi5iLDY1KSx1KHIuYiw2NSkscykpLHUoci5iLDY1KSx1KHIuYiw2NSksdShyLmIsNjUpLmMuYStzLmEsdShyLmIsNjUpLmMuYitzLmIsdShyLmIsNjUpLHh1KHIuYSxuZXcgQXd0KHQsZSxyKSl9ZnVuY3Rpb24gcDV0KHQsZSl7dmFyIG4scixzLG8saCxkLHY7aWYobz1lLmUsbyl7Zm9yKG49ZWF0KG8pLHI9dSh0LmcsNjc0KSxoPTA7aDx0Lmk7KytoKWlmKHY9cltoXSx4c3Qodik9PW4mJihzPSghdi5kJiYodi5kPW5ldyBBcyhobyx2LDEpKSx2LmQpLGQ9dShuLmFoKHdhdChvLG8uQ2Isby5EYj4+MTYpKSwxNSkuWGMobyksZDxzLmkpKXJldHVybiBwNXQodCx1KEF0KHMsZCksODcpKX1yZXR1cm4gZX1mdW5jdGlvbiBEKHQsZSxuKXt2YXIgcj1RSCxzLG89clt0XSxoPW8gaW5zdGFuY2VvZiBBcnJheT9vWzBdOm51bGw7byYmIWg/bD1vOihsPShzPWUmJmUucHJvdG90eXBlLCFzJiYocz1RSFtlXSksbGluKHMpKSxsLmhtPW4sIWUmJihsLmltPUV0KSxyW3RdPWwpO2Zvcih2YXIgZD0zO2Q8YXJndW1lbnRzLmxlbmd0aDsrK2QpYXJndW1lbnRzW2RdLnByb3RvdHlwZT1sO2gmJihsLmdtPWgpfWZ1bmN0aW9uIHpyKHQpe2Zvcih2YXIgZTshdShMcih0LmEpLDQ3KS5PYigpOyl7aWYodC5kPUh1bih0KSwhdC5kKXJldHVybiExO2lmKHQuYT11KHQuZC5QYigpLDQ3KSxfdCh0LmEsMzkpKXtpZihlPXUodC5hLDM5KSx0LmE9ZS5hLCF0LmImJih0LmI9bmV3IEIzKSxVcCh0LmIsdC5kKSxlLmIpZm9yKDshQkMoZS5iKTspVXAodC5iLHUob25uKGUuYiksNDcpKTt0LmQ9ZS5kfX1yZXR1cm4hMH1mdW5jdGlvbiBiNXQodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihvPWU9PW51bGw/MDp0LmIuc2UoZSkscj0obj10LmEuZ2V0KG8pLG4/P25ldyBBcnJheSksaD0wO2g8ci5sZW5ndGg7aCsrKWlmKHM9cltoXSx0LmIucmUoZSxzLmNkKCkpKXJldHVybiByLmxlbmd0aD09MT8oci5sZW5ndGg9MCxEWmUodC5hLG8pKTpyLnNwbGljZShoLDEpLC0tdC5jLHckKHQuYikscy5kZCgpO3JldHVybiBudWxsfWZ1bmN0aW9uIHc1dCh0LGUpe3ZhciBuLHIscyxvO2ZvcihzPTEsZS5qPSEwLG89bnVsbCxyPW5ldyBTKHU0KGUpKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMTMpLHQuY1tuLmNdfHwodC5jW24uY109ITAsbz1CeihuLGUpLG4uZj9zKz13NXQodCxvKTohby5qJiZuLmE9PW4uZS5lLW4uZC5lJiYobi5mPSEwLEZzKHQucCxuKSxzKz13NXQodCxvKSkpO3JldHVybiBzfWZ1bmN0aW9uIHpibih0KXt2YXIgZSxuLHI7Zm9yKG49bmV3IFModC5hLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksODEpLHI9KE9uKDApLDApLHI+MCYmKCEoQnAodC5hLmMpJiZlLm4uZCkmJiEoYjgodC5hLmMpJiZlLm4uYikmJihlLmcuZCs9Yi5NYXRoLm1heCgwLHIvMi0uNSkpLCEoQnAodC5hLmMpJiZlLm4uYSkmJiEoYjgodC5hLmMpJiZlLm4uYykmJihlLmcuYS09ci0xKSl9ZnVuY3Rpb24gYmNlKHQpe3ZhciBlLG4scixzLG87aWYocz1uZXcgaGUsbz11bGUodCxzKSxlPXUoUSh0LChhZSgpLEp1KSksMTApLGUpZm9yKHI9bmV3IFMoZS5qKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMSksVnQoUShuLF9pKSk9PT1WdCh0KSYmKG89Yi5NYXRoLm1heChvLHVsZShuLHMpKSk7cmV0dXJuIHMuYy5sZW5ndGg9PTB8fEp0KHQsSzQsbyksbyE9LTE/czpudWxsfWZ1bmN0aW9uIHdjZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2O289dShOZShlLmUsMCksMTcpLmMscj1vLmkscz1yLmssdj11KE5lKG4uZywwKSwxNykuZCxoPXYuaSxkPWguayxzPT0oVm4oKSx0YSk/SnQodCwoYWUoKSxyMSksdShRKHIscjEpLDExKSk6SnQodCwoYWUoKSxyMSksbyksZD09dGE/SnQodCwoYWUoKSwkaCksdShRKGgsJGgpLDExKSk6SnQodCwoYWUoKSwkaCksdil9ZnVuY3Rpb24gdmNlKHQsZSl7dmFyIG4scixzLG87Zm9yKG89QXIoX2EoaTAsWGQoQXIoX2EoZT09bnVsbD8wOkhpKGUpLHMwKSksMTUpKSksbj1vJnQuYi5sZW5ndGgtMSxzPW51bGwscj10LmJbbl07cjtzPXIscj1yLmEpaWYoci5kPT1vJiZwZChyLmksZSkpcmV0dXJuIHM/cy5hPXIuYTp0LmJbbl09ci5hLGhIdChyLmMsci5mKSxkTShyLmIsci5lKSwtLXQuZiwrK3QuZSwhMDtyZXR1cm4hMX1mdW5jdGlvbiB2NXQodCxlKXt2YXIgbixyLHMsbyxoO3JldHVybiBlJj02MyxuPXQuaCxyPShuJk5JKSE9MCxyJiYobnw9LTEwNDg1NzYpLGU8MjI/KGg9bj4+ZSxvPXQubT4+ZXxuPDwyMi1lLHM9dC5sPj5lfHQubTw8MjItZSk6ZTw0ND8oaD1yP1owOjAsbz1uPj5lLTIyLHM9dC5tPj5lLTIyfG48PDQ0LWUpOihoPXI/WjA6MCxvPXI/aGw6MCxzPW4+PmUtNDQpLGl1KHMmaGwsbyZobCxoJlowKX1mdW5jdGlvbiBuYXQodCl7dmFyIGUsbixyLHMsbyxoO2Zvcih0aGlzLmM9bmV3IGhlLHRoaXMuZD10LHI9YXMscz1hcyxlPUNzLG49Q3MsaD1laSh0LDApO2guYiE9aC5kLmM7KW89dSh0aShoKSw4KSxyPWIuTWF0aC5taW4ocixvLmEpLHM9Yi5NYXRoLm1pbihzLG8uYiksZT1iLk1hdGgubWF4KGUsby5hKSxuPWIuTWF0aC5tYXgobixvLmIpO3RoaXMuYT1uZXcgYWgocixzLGUtcixuLXMpfWZ1bmN0aW9uIG1jZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iobz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwyOSksZD1uZXcgUyhzLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihoPXUoSihkKSwxMCksaC5rPT0oVm4oKSxMbCkmJnA2KGgsZSkscj1uZXcgYXIobHIoRHMoaCkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSwxNyksbnJlKG4sZSl9ZnVuY3Rpb24gbTV0KHQpe3ZhciBlLG4scjt0aGlzLmM9dCxyPXUoUSh0LChUZSgpLFdsKSksMTAzKSxlPVh0KHllKFEodCxyRykpKSxuPVh0KHllKFEodCxrOXQpKSkscj09KGFvKCksemgpfHxyPT1DZnx8cj09aDA/dGhpcy5iPWUqbjp0aGlzLmI9MS8oZSpuKSx0aGlzLmo9WHQoeWUoUSh0LHQ1KSkpLHRoaXMuZT1YdCh5ZShRKHQsJHYpKSksdGhpcy5mPXQuYi5jLmxlbmd0aH1mdW5jdGlvbiBxYm4odCl7dmFyIGUsbjtmb3IodC5lPU50KENyLFhyLDI1LHQucC5jLmxlbmd0aCwxNSwxKSx0Lms9TnQoQ3IsWHIsMjUsdC5wLmMubGVuZ3RoLDE1LDEpLG49bmV3IFModC5wKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMCksdC5lW2UucF09ajAobmV3IGFyKGxyKGpvKGUpLmEuS2MoKSxuZXcgeikpKSx0LmtbZS5wXT1qMChuZXcgYXIobHIoRHMoZSkuYS5LYygpLG5ldyB6KSkpfWZ1bmN0aW9uIEhibih0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKHM9MCx0LnE9bmV3IGhlLGU9bmV3IEhzLGg9bmV3IFModC5wKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKG89dShKKGgpLDEwKSxvLnA9cyxyPW5ldyBhcihscihEcyhvKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KE1yKHIpLDE3KSxGcyhlLG4uZC5pKTtlLmEuQmMobykhPW51bGwsbGUodC5xLG5ldyBFOShlKSksZS5hLiRiKCksKytzfX1mdW5jdGlvbiBndigpe2d2PVosZl90PW5ldyBPdygyMCksVHllPW5ldyBlbygodWkoKSxVMiksZl90KSxnX3Q9bmV3IGVvKFcyLDIwKSxteWU9bmV3IGVvKFc2LEdFKSxQRz1uZXcgZW8oWkcscGUoMSkpLF95ZT1uZXcgZW8oVGZ0LChObigpLCEwKSksbF90PVFPLHh5ZT1HMixreWU9YzUsRXllPXhiLHl5ZT1vNSxoX3Q9dFAsQ3llPVF5LFN5ZT0obXl0KCksdnllKSxkX3Q9d3llfWZ1bmN0aW9uIHljZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZih0LmEuZj4wJiZfdChlLDQyKSYmKHQuYS5xaigpLGs9dShlLDQyKSx2PWsuY2QoKSxvPXY9PW51bGw/MDpIaSh2KSxoPXJ3dCh0LmEsbyksbj10LmEuZFtoXSxuKSl7Zm9yKHI9dShuLmcsMzY3KSxDPW4uaSxkPTA7ZDxDOysrZClpZihzPXJbZF0scy5TaCgpPT1vJiZzLkZiKGspKXJldHVybiB5Y2UodCxrKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBWYm4odCl7dmFyIGUsbixyLHM7Zm9yKHM9dShBaSh0LmEsKGI0KCkselYpKSwxNSkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTAxKSxuPShlPXF4KHIuayksZS5IYygodmUoKSxQbikpP2UuSGMoSG4pP2UuSGMobXIpP2UuSGMoQm4pP251bGw6eTJlOmsyZTp4MmU6bTJlKSxfOCh0LHIsblswXSwobnYoKSxNdiksMCksXzgodCxyLG5bMV0scGIsMSksXzgodCxyLG5bMl0sRHYsMSl9ZnVuY3Rpb24gR2JuKHQsZSl7dmFyIG4scjtuPW1tbihlKSx3dm4odCxlLG4pLENhZSh0LmEsdShRKE5hKGUuYiksKGFlKCksJDYpKSwyMzApKSxWbW4odCksdjBuKHQsZSkscj1OdChDcixYciwyNSxlLmIuai5jLmxlbmd0aCwxNSwxKSxSYXQodCxlLCh2ZSgpLFBuKSxyLG4pLFJhdCh0LGUsSG4scixuKSxSYXQodCxlLG1yLHIsbiksUmF0KHQsZSxCbixyLG4pLHQuYT1udWxsLHQuYz1udWxsLHQuYj1udWxsfWZ1bmN0aW9uIHk1dCgpe3k1dD1aLEhfdD0oRnooKSxRaHQpLG8zZT1uZXcgbW4odDh0LEhfdCksczNlPW5ldyBtbihlOHQsKE5uKCksITApKSxwZSgtMSksbjNlPW5ldyBtbihuOHQscGUoLTEpKSxwZSgtMSkscjNlPW5ldyBtbihyOHQscGUoLTEpKSxhM2U9bmV3IG1uKGk4dCwhMSksYzNlPW5ldyBtbihzOHQsITApLGkzZT1uZXcgbW4oTmN0LCExKSx1M2U9bmV3IG1uKGE4dCwtMSl9ZnVuY3Rpb24geDV0KHQsZSxuKXtzd2l0Y2goZSl7Y2FzZSA3OiF0LmUmJih0LmU9bmV3IENuKFlzLHQsNyw0KSkseHIodC5lKSwhdC5lJiYodC5lPW5ldyBDbihZcyx0LDcsNCkpLGlzKHQuZSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA4OiF0LmQmJih0LmQ9bmV3IENuKFlzLHQsOCw1KSkseHIodC5kKSwhdC5kJiYodC5kPW5ldyBDbihZcyx0LDgsNSkpLGlzKHQuZCx1KG4sMTQpKTtyZXR1cm59djR0KHQsZSxuKX1mdW5jdGlvbiBrNXQodCxlKXt2YXIgbixyLHMsbyxoO2lmKFZ0KGUpPT09VnQodCkpcmV0dXJuITA7aWYoIV90KGUsMTUpfHwoaD11KGUsMTUpLHQuZ2MoKSE9aC5nYygpKSlyZXR1cm4hMTtmb3Iobz1oLktjKCkscj10LktjKCk7ci5PYigpOylpZihuPXIuUGIoKSxzPW8uUGIoKSwhKFZ0KG4pPT09VnQocyl8fG4hPW51bGwmJnlpKG4scykpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFVibih0LGUpe3ZhciBuLHIscyxvO2ZvcihvPXUoQmwoV28oV28obmV3IFRuKG51bGwsbmV3IF9uKGUuYiwxNikpLG5ldyBTTCksbmV3IGxOKSxjMihuZXcga2UsbmV3IGNlLG5ldyBYbixsdChjdChmbCwxKSxvZSwxMzIsMCxbKE8xKCksVWwpXSkpKSwxNSksby5KYyhuZXcgQUwpLG49MCxzPW8uS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTEpLHIucD09LTEmJlQ1dCh0LHIsbisrKX1mdW5jdGlvbiB4Y2UodCl7c3dpdGNoKHQuZyl7Y2FzZSAwOnJldHVybiBuZXcgdkM7Y2FzZSAxOnJldHVybiBuZXcgc3R0O2Nhc2UgMjpyZXR1cm4gbmV3IGl0dDtjYXNlIDM6cmV0dXJuIG5ldyBHR3Q7Y2FzZSA0OnJldHVybiBuZXcgSUt0O2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKCJObyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSBub2RlIHBsYWNlciAiKyh0LmYhPW51bGw/dC5mOiIiK3QuZykpKX19ZnVuY3Rpb24ga2NlKHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMDpyZXR1cm4gbmV3IGV2dDtjYXNlIDE6cmV0dXJuIG5ldyBhdHQ7Y2FzZSAyOnJldHVybiBuZXcgWko7Y2FzZSAzOnJldHVybiBuZXcgSko7Y2FzZSA0OnJldHVybiBuZXcgV0d0O2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKCJObyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSBjeWNsZSBicmVha2VyICIrKHQuZiE9bnVsbD90LmY6IiIrdC5nKSkpfX1mdW5jdGlvbiBFNXQoKXtFNXQ9WixxeWU9bmV3IG1uKFlrdCxwZSgwKSksSHllPW5ldyBtbihLa3QsMCksQ190PShIRCgpLE5HKSwkeWU9bmV3IG1uKE9jdCxDX3QpLHBlKDApLGp5ZT1uZXcgbW4oUGN0LHBlKDEpKSxTX3Q9KG16KCksWGh0KSxWeWU9bmV3IG1uKFhrdCxTX3QpLEFfdD0oRyQoKSxVaHQpLEd5ZT1uZXcgbW4oUWt0LEFfdCksX190PShlcSgpLEtodCksenllPW5ldyBtbihaa3QsX190KX1mdW5jdGlvbiBXYm4odCxlLG4pe3ZhciByO3I9bnVsbCxlJiYocj1lLmQpLGRfKHQsbmV3IGc4KGUubi5hLXIuYituLmEsZS5uLmItci5kK24uYikpLGRfKHQsbmV3IGc4KGUubi5hLXIuYituLmEsZS5uLmIrZS5vLmIrci5hK24uYikpLGRfKHQsbmV3IGc4KGUubi5hK2Uuby5hK3IuYytuLmEsZS5uLmItci5kK24uYikpLGRfKHQsbmV3IGc4KGUubi5hK2Uuby5hK3IuYytuLmEsZS5uLmIrZS5vLmIrci5hK24uYikpfWZ1bmN0aW9uIFQ1dCh0LGUsbil7dmFyIHIscyxvO2ZvcihlLnA9bixvPXpwKEQxKGx0KGN0KGoxLDEpLERlLDIwLDAsW25ldyBRcyhlKSxuZXcgVHIoZSldKSkpO3pyKG8pOylyPXUoTXIobyksMTEpLHIucD09LTEmJlQ1dCh0LHIsbik7aWYoZS5pLms9PShWbigpLHRhKSlmb3Iocz1uZXcgUyhlLmkuaik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTEpLHIhPWUmJnIucD09LTEmJlQ1dCh0LHIsbil9ZnVuY3Rpb24gRWNlKHQpe3ZhciBlLG4scixzLG87aWYocz11KEJsKG1pbihaUXQodCkpLGMyKG5ldyBrZSxuZXcgY2UsbmV3IFhuLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFsoTzEoKSxVbCldKSkpLDE1KSxyPVZFLHMuZ2MoKT49Milmb3Iobj1zLktjKCksZT15ZShuLlBiKCkpO24uT2IoKTspbz1lLGU9eWUobi5QYigpKSxyPWIuTWF0aC5taW4ociwoT24oZSksZS0oT24obyksbykpKTtyZXR1cm4gcn1mdW5jdGlvbiBZYm4odCxlKXt2YXIgbixyLHMsbyxoO3I9bmV3IFppLGZzKHIsZSxyLmMuYixyLmMpO2RvIGZvcihuPShabihyLmIhPTApLHUobGgocixyLmEuYSksODYpKSx0LmJbbi5nXT0xLG89ZWkobi5kLDApO28uYiE9by5kLmM7KXM9dSh0aShvKSwxODgpLGg9cy5jLHQuYltoLmddPT0xP3JpKHQuYSxzKTp0LmJbaC5nXT09Mj90LmJbaC5nXT0xOmZzKHIsaCxyLmMuYixyLmMpO3doaWxlKHIuYiE9MCl9ZnVuY3Rpb24gS2JuKHQsZSl7dmFyIG4scixzO2lmKFZ0KGUpPT09VnQoTHIodCkpKXJldHVybiEwO2lmKCFfdChlLDE1KXx8KHI9dShlLDE1KSxzPXQuZ2MoKSxzIT1yLmdjKCkpKXJldHVybiExO2lmKF90KHIsNTQpKXtmb3Iobj0wO248cztuKyspaWYoIXBkKHQuWGIobiksci5YYihuKSkpcmV0dXJuITE7cmV0dXJuITB9ZWxzZSByZXR1cm4gcjFuKHQuS2MoKSxyLktjKCkpfWZ1bmN0aW9uIFRjZSh0LGUpe3ZhciBuLHI7aWYodC5jLmxlbmd0aCE9MCl7aWYodC5jLmxlbmd0aD09MilwNigoQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxMCkpLCh6bCgpLGYwKSkscDYoKEFuKDEsdC5jLmxlbmd0aCksdSh0LmNbMV0sMTApKSxrYik7ZWxzZSBmb3Iocj1uZXcgUyh0KTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMCkscDYobixlKTt0LmM9TnQoUW4sRGUsMSwwLDUsMSl9fWZ1bmN0aW9uIFhibih0KXt2YXIgZSxuO2lmKHQuYy5sZW5ndGghPTIpdGhyb3cgaXQobmV3IE5vKCJPcmRlciBvbmx5IGFsbG93ZWQgZm9yIHR3byBwYXRocy4iKSk7ZT0oQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxNykpLG49KEFuKDEsdC5jLmxlbmd0aCksdSh0LmNbMV0sMTcpKSxlLmQuaSE9bi5jLmkmJih0LmM9TnQoUW4sRGUsMSwwLDUsMSksdC5jW3QuYy5sZW5ndGhdPW4sdC5jW3QuYy5sZW5ndGhdPWUpfWZ1bmN0aW9uIFFibih0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iocj1uZXcgYTIsaD1QJChuZXcgeWwodC5nKSksbz1oLmEuZWMoKS5LYygpO28uT2IoKTspe2lmKHM9dShvLlBiKCksMTApLCFzKXtKYihlLCJUaGVyZSBhcmUgbm8gY2xhc3NlcyBpbiBhIGJhbGFuY2VkIGxheW91dC4iKTticmVha31kPXQualtzLnBdLG49dShYdyhyLGQpLDE1KSxufHwobj1uZXcgaGUsbTIocixkLG4pKSxuLkZjKHMpfXJldHVybiByfWZ1bmN0aW9uIFpibih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGs7aWYobilmb3Iobz1uLmEubGVuZ3RoLHI9bmV3IGUyKG8pLGQ9KHIuYi1yLmEpKnIuYzwwPyhGcCgpLEliKTpuZXcganAocik7ZC5PYigpOyloPXUoZC5QYigpLDE5KSx2PVA4KG4saC5hKSx2JiYoaz1hY24oUjAodix0dXQpLGUpLGtpKHQuZixrLHYpLHM9QWQgaW4gdi5hLHMmJkc5KGssUjAodixBZCkpLGxxKHYsayksZTV0KHYsaykpfWZ1bmN0aW9uIEpibih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHZyKGUsIlBvcnQgc2lkZSBwcm9jZXNzaW5nIiwxKSxoPW5ldyBTKHQuYSk7aC5hPGguYy5jLmxlbmd0aDspcz11KEooaCksMTApLE9sZShzKTtmb3Iocj1uZXcgUyh0LmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoSihyKSwyOSksbz1uZXcgUyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEwKSxPbGUocyk7b3IoZSl9ZnVuY3Rpb24gQ2NlKHQsZSxuKXt2YXIgcixzLG8saCxkO2lmKHM9dC5mLCFzJiYocz11KHQuYS5hLmVjKCkuS2MoKS5QYigpLDU3KSksaF8ocyxlLG4pLHQuYS5hLmdjKCkhPTEpZm9yKHI9ZSpuLGg9dC5hLmEuZWMoKS5LYygpO2guT2IoKTspbz11KGguUGIoKSw1NyksbyE9cyYmKGQ9WHgobyksZC5mLmQ/KG8uZC5kKz1yK0IxLG8uZC5hLT1yK0IxKTpkLmYuYSYmKG8uZC5hLT1yK0IxKSl9ZnVuY3Rpb24gcmF0KHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixIO3JldHVybiBoPW4tdCxkPXItZSxvPWIuTWF0aC5hdGFuMihoLGQpLHY9byt6b3Qsaz1vLXpvdCxDPXMqYi5NYXRoLnNpbih2KSt0LGo9cypiLk1hdGguY29zKHYpK2UsTT1zKmIuTWF0aC5zaW4oaykrdCxIPXMqYi5NYXRoLmNvcyhrKStlLEExKGx0KGN0KFdzLDEpLGVlLDgsMCxbbmV3ICRlKEMsaiksbmV3ICRlKE0sSCldKSl9ZnVuY3Rpb24gdDJuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE07cz1uLEM9ZSxvPUM7ZG8gbz10LmFbby5wXSxkPShNPXQuZ1tvLnBdLFh0KHQucFtNLnBdKStYdCh0LmRbby5wXSktby5kLmQpLHY9Z2NuKG8sciksdiYmKGg9KGs9dC5nW3YucF0sWHQodC5wW2sucF0pK1h0KHQuZFt2LnBdKSt2Lm8uYit2LmQuYSkscz1iLk1hdGgubWluKHMsZC0oaCtXMyh0Lmssbyx2KSkpKTt3aGlsZShDIT1vKTtyZXR1cm4gc31mdW5jdGlvbiBlMm4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTTtzPW4sQz1lLG89QztkbyBvPXQuYVtvLnBdLGg9KE09dC5nW28ucF0sWHQodC5wW00ucF0pK1h0KHQuZFtvLnBdKStvLm8uYitvLmQuYSksdj1DdW4obyxyKSx2JiYoZD0oaz10Lmdbdi5wXSxYdCh0LnBbay5wXSkrWHQodC5kW3YucF0pLXYuZC5kKSxzPWIuTWF0aC5taW4ocyxkLShoK1czKHQuayxvLHYpKSkpO3doaWxlKEMhPW8pO3JldHVybiBzfWZ1bmN0aW9uIHFlKHQsZSl7dmFyIG4scjtyZXR1cm4gcj0oIXQubyYmKHQubz1uZXcgX2woKEpjKCksU2IpLEh2LHQsMCkpLFhmKHQubyxlKSkscj8/KG49ZS53ZygpLF90KG4sNCkmJihuPT1udWxsPyghdC5vJiYodC5vPW5ldyBfbCgoSmMoKSxTYiksSHYsdCwwKSkscXoodC5vLGUpKTooIXQubyYmKHQubz1uZXcgX2woKEpjKCksU2IpLEh2LHQsMCkpLGFxKHQubyxlLG4pKSksbil9ZnVuY3Rpb24gcHkoKXtweT1aLF9mPW5ldyBxMygiSF9MRUZUIiwwKSxpZz1uZXcgcTMoIkhfQ0VOVEVSIiwxKSxTZj1uZXcgcTMoIkhfUklHSFQiLDIpLExmPW5ldyBxMygiVl9UT1AiLDMpLGQwPW5ldyBxMygiVl9DRU5URVIiLDQpLEhoPW5ldyBxMygiVl9CT1RUT00iLDUpLFlsPW5ldyBxMygiSU5TSURFIiw2KSxBZj1uZXcgcTMoIk9VVFNJREUiLDcpLHFoPW5ldyBxMygiSF9QUklPUklUWSIsOCl9ZnVuY3Rpb24gbjJuKHQpe3ZhciBlLG4scixzLG8saCxkO2lmKGU9dC5IaChCaCksZSYmKGQ9QnIoWGYoKCFlLmImJihlLmI9bmV3IGtsKChkbigpLFFhKSxjYyxlKSksZS5iKSwic2V0dGluZ0RlbGVnYXRlcyIpKSxkIT1udWxsKSl7Zm9yKG49bmV3IGhlLHM9dnkoZCwiXFx3KyIpLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLG4uY1tuLmMubGVuZ3RoXT1yO3JldHVybiBufXJldHVybiB3bigpLHduKCksaW99ZnVuY3Rpb24gcjJuKHQsZSl7dmFyIG4scixzLG8saCxkLHY7aWYoIWUuZil0aHJvdyBpdChuZXcgRm4oIlRoZSBpbnB1dCBlZGdlIGlzIG5vdCBhIHRyZWUgZWRnZS4iKSk7Zm9yKG89bnVsbCxzPXdpLHI9bmV3IFModC5kKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMTMpLGQ9bi5kLHY9bi5lLFFzdCh0LGQsZSkmJiFRc3QodCx2LGUpJiYoaD12LmUtZC5lLW4uYSxoPHMmJihzPWgsbz1uKSk7cmV0dXJuIG99ZnVuY3Rpb24gaTJuKHQpe3ZhciBlLG4scixzLG8saDtpZighKHQuZi5lLmMubGVuZ3RoPD0xKSl7ZT0wLHM9ZGNlKHQpLG49YXM7ZG97Zm9yKGU+MCYmKHM9biksaD1uZXcgUyh0LmYuZSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTQ0KSwhamUoUmUoUShvLChpSSgpLFM3dCkpKSkmJihyPWR5bih0LG8pLExpKEdmKG8uZCkscikpO249ZGNlKHQpfXdoaWxlKCFBbm4odCxlKysscyxuKSl9fWZ1bmN0aW9uIHMybih0LGUpe3ZhciBuLHIscztmb3IodnIoZSwiTGF5ZXIgY29uc3RyYWludCBwcmVwcm9jZXNzaW5nIiwxKSxuPW5ldyBoZSxzPW5ldyBkYSh0LmEsMCk7cy5iPHMuZC5nYygpOylyPShabihzLmI8cy5kLmdjKCkpLHUocy5kLlhiKHMuYz1zLmIrKyksMTApKSxBdW4ocikmJihMMG4ociksbi5jW24uYy5sZW5ndGhdPXIsQ2wocykpO24uYy5sZW5ndGg9PTB8fEp0KHQsKGFlKCksR2x0KSxuKSxvcihlKX1mdW5jdGlvbiBhMm4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihvPXQuZy5hLGg9dC5nLmIscj1uZXcgUyh0LmQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDcwKSxzPW4ubix0LmE9PShJMSgpLGY3KXx8dC5pPT0odmUoKSxIbik/cy5hPW86dC5hPT1kN3x8dC5pPT0odmUoKSxCbik/cy5hPW8rdC5qLmEtbi5vLmE6cy5hPW8rKHQuai5hLW4uby5hKS8yLHMuYj1oLExpKHMsZSksaCs9bi5vLmIrdC5lfWZ1bmN0aW9uIG8ybih0LGUsbil7dmFyIHIscyxvLGg7Zm9yKHZyKG4sIlByb2Nlc3NvciBzZXQgY29vcmRpbmF0ZXMiLDEpLHQuYT1lLmIuYj09MD8xOmUuYi5iLG89bnVsbCxyPWVpKGUuYiwwKTshbyYmci5iIT1yLmQuYzspaD11KHRpKHIpLDg2KSxqZShSZShRKGgsKGZjKCksWHkpKSkpJiYobz1oLHM9aC5lLHMuYT11KFEoaCwkaHQpLDE5KS5hLHMuYj0wKTtYYWUodCxFeXQobyksUmMobiwxKSksb3Iobil9ZnVuY3Rpb24gYzJuKHQsZSxuKXt2YXIgcixzLG87Zm9yKHZyKG4sIlByb2Nlc3NvciBkZXRlcm1pbmUgdGhlIGhlaWdodCBmb3IgZWFjaCBsZXZlbCIsMSksdC5hPWUuYi5iPT0wPzE6ZS5iLmIscz1udWxsLHI9ZWkoZS5iLDApOyFzJiZyLmIhPXIuZC5jOylvPXUodGkociksODYpLGplKFJlKFEobywoZmMoKSxYeSkpKSkmJihzPW8pO3MmJmR1ZSh0LEExKGx0KGN0KHA2biwxKSxoNnQsODYsMCxbc10pKSxuKSxvcihuKX1mdW5jdGlvbiB1Mm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtrPXQsdj1SOShrLCJpbmRpdmlkdWFsU3BhY2luZ3MiKSx2JiYocj1vMihlLCh1aSgpLEs2KSksaD0hcixoJiYocz1uZXcgWXUsd28oZSxLNixzKSksZD11KHFlKGUsSzYpLDM3MyksTT12LG89bnVsbCxNJiYobz0oQz15aXQoTSxOdChBZSxlZSwyLDAsNiwxKSksbmV3IEVldChNLEMpKSksbyYmKG49bmV3ICRHdChNLGQpLHZhKG8sbikpKX1mdW5jdGlvbiBsMm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqO3JldHVybiB2PW51bGwsTT10LEM9bnVsbCwoV2RlIGluIE0uYXx8WWRlIGluIE0uYXx8TEggaW4gTS5hKSYmKGs9bnVsbCxqPUN5dChlKSxoPVI5KE0sV2RlKSxuPW5ldyBrenQoaiksTmhuKG4uYSxoKSxkPVI5KE0sWWRlKSxyPW5ldyBJenQoaiksRmhuKHIuYSxkKSxvPUt3KE0sTEgpLHM9bmV3IEZ6dChqKSxrPShkMG4ocy5hLG8pLG8pLEM9ayksdj1DLHZ9ZnVuY3Rpb24gaDJuKHQsZSl7dmFyIG4scixzO2lmKGU9PT10KXJldHVybiEwO2lmKF90KGUsNTQzKSl7aWYocz11KGUsODM1KSx0LmEuZCE9cy5hLmR8fFEzKHQpLmdjKCkhPVEzKHMpLmdjKCkpcmV0dXJuITE7Zm9yKHI9UTMocykuS2MoKTtyLk9iKCk7KWlmKG49dShyLlBiKCksNDE2KSxRUXQodCxuLmEuY2QoKSkhPXUobi5hLmRkKCksMTQpLmdjKCkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gZjJuKHQpe3ZhciBlLG4scixzO3JldHVybiByPXUodC5hLDE5KS5hLHM9dSh0LmIsMTkpLmEsZT1yLG49cyxyPT0wJiZzPT0wP24tPTE6cj09LTEmJnM8PTA/KGU9MCxuLT0yKTpyPD0wJiZzPjA/KGUtPTEsbi09MSk6cj49MCYmczwwPyhlKz0xLG4rPTEpOnI+MCYmcz49MD8oZS09MSxuKz0xKTooZSs9MSxuLT0xKSxuZXcgZmEocGUoZSkscGUobikpfWZ1bmN0aW9uIGQybih0LGUpe3JldHVybiB0LmM8ZS5jPy0xOnQuYz5lLmM/MTp0LmI8ZS5iPy0xOnQuYj5lLmI/MTp0LmEhPWUuYT9IaSh0LmEpLUhpKGUuYSk6dC5kPT0oJDkoKSxCUykmJmUuZD09TlM/LTE6dC5kPT1OUyYmZS5kPT1CUz8xOjB9ZnVuY3Rpb24gX2NlKHQsZSl7dmFyIG4scixzLG8saDtyZXR1cm4gbz1lLmEsby5jLmk9PWUuYj9oPW8uZDpoPW8uYyxvLmMuaT09ZS5iP3I9by5jOnI9by5kLHM9emhuKHQuYSxoLHIpLHM+MCYmczxWRT8obj10Mm4odC5hLHIuaSxzLHQuYyksTmVlKHQuYSxyLmksLW4pLG4+MCk6czwwJiYtczxWRT8obj1lMm4odC5hLHIuaSwtcyx0LmMpLE5lZSh0LmEsci5pLG4pLG4+MCk6ITF9ZnVuY3Rpb24gZzJuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE07Zm9yKHM9KGUtdC5kKS90LmMuYy5sZW5ndGgsbz0wLHQuYSs9bix0LmQ9ZSxNPW5ldyBTKHQuYyk7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMzMpLGs9Qy5nLHY9Qy5mLGt1KEMsQy5pK28qcyksRXUoQyxDLmorcipuKSx0dihDLEMuZytzKSxKdyhDLHQuYSksKytvLGQ9Qy5nLGg9Qy5mLHlvZShDLG5ldyAkZShkLGgpLG5ldyAkZShrLHYpKX1mdW5jdGlvbiBwMm4odCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYodD09bnVsbClyZXR1cm4gbnVsbDtmb3IoZD10Lmxlbmd0aCxzPShkKzEpLzJ8MCxoPU50KEd1LE40LDI1LHMsMTUsMSksZCUyIT0wJiYoaFstLXNdPUc1dCgoUnIoZC0xLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZC0xKSkpKSxuPTAscj0wO248czsrK24pZT1HNXQod2EodCxyKyspKSxvPUc1dCh3YSh0LHIrKykpLGhbbl09KGU8PDR8byk8PDI0Pj4yNDtyZXR1cm4gaH1mdW5jdGlvbiBiMm4odCl7aWYodC5wZSgpKXt2YXIgZT10LmM7ZS5xZSgpP3Qubz0iWyIrZS5uOmUucGUoKT90Lm89IlsiK2UubmUoKTp0Lm89IltMIitlLm5lKCkrIjsiLHQuYj1lLm1lKCkrIltdIix0Lms9ZS5vZSgpKyJbXSI7cmV0dXJufXZhciBuPXQuaixyPXQuZDtyPXIuc3BsaXQoIi8iKSx0Lm89YXN0KCIuIixbbixhc3QoIiQiLHIpXSksdC5iPWFzdCgiLiIsW24sYXN0KCIuIixyKV0pLHQuaz1yW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIHcybih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKGg9bnVsbCxvPW5ldyBTKHQuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylpZihzPXUoSihvKSwxMjEpLHMuYi5hLmMubGVuZ3RoPT1zLmcuYS5jLmxlbmd0aCl7Zm9yKHI9cy5lLGg9dHBuKHMpLG49cy5lLXUoaC5hLDE5KS5hKzE7bjxzLmUrdShoLmIsMTkpLmE7bisrKWVbbl08ZVtyXSYmKHI9bik7ZVtyXTxlW3MuZV0mJigtLWVbcy5lXSwrK2Vbcl0scy5lPXIpfX1mdW5jdGlvbiBpYXQodCl7dmFyIGUsbixyLHMsbyxoLGQsdjtmb3Iocz1hcyxyPUNzLG49bmV3IFModC5lLmIpO24uYTxuLmMuYy5sZW5ndGg7KWZvcihlPXUoSihuKSwyOSksaD1uZXcgUyhlLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEwKSx2PVh0KHQucFtvLnBdKSxkPXYrWHQodC5iW3QuZ1tvLnBdLnBdKSxzPWIuTWF0aC5taW4ocyx2KSxyPWIuTWF0aC5tYXgocixkKTtyZXR1cm4gci1zfWZ1bmN0aW9uIEM1dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx2O2ZvcihzPVo1dCh0LGUpLGQ9MCx2PXMuZ2MoKTtkPHY7KytkKWlmKG89dShzLlhiKGQpLDE3MCksaG4ocixNOChUbyh0LG8pKSkpe2lmKGg9ckQoVG8odCxvKSksbj09bnVsbCl7aWYoaD09bnVsbClyZXR1cm4gb31lbHNlIGlmKGhuKG4saCkpcmV0dXJuIG99cmV0dXJuIG51bGx9ZnVuY3Rpb24gXzV0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7Zm9yKHM9dmF0KHQsZSksZD0wLHY9cy5nYygpO2Q8djsrK2QpaWYobz11KHMuWGIoZCksMTcwKSxobihyLE04KFRvKHQsbykpKSl7aWYoaD1yRChUbyh0LG8pKSxuPT1udWxsKXtpZihoPT1udWxsKXJldHVybiBvfWVsc2UgaWYoaG4obixoKSlyZXR1cm4gb31yZXR1cm4gbnVsbH1mdW5jdGlvbiB2Mm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdjtpZihoPW5ldyBveCxkPW91KHQuZS5UZygpLGUpLHI9dSh0LmcsMTE5KSx0bygpLHUoZSw2NikuT2ooKSlmb3Iobz0wO288dC5pOysrbylzPXJbb10sZC5ybChzLmFrKCkpJiZEcihoLHMpO2Vsc2UgZm9yKG89MDtvPHQuaTsrK28pcz1yW29dLGQucmwocy5haygpKSYmKHY9cy5kZCgpLERyKGgsbj9iXyh0LGUsbyxoLmksdik6dikpO3JldHVybiBhbXQoaCl9ZnVuY3Rpb24gbTJuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobj1uZXcgaV8oYjcpLHM9KGg2KCksbHQoY3QoYjcsMSksb2UsMjI3LDAsW3A3LGJTLGc3LE55LEc0LFY0XSkpLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLHN3dChuLHIsbmV3IGhlKTtyZXR1cm4gbHMod3UoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuYiwxNikpLG5ldyBkTiksbmV3IGdOKSxuZXcgX2coZSkpLG5ldyBjZChuKSksbn1mdW5jdGlvbiBicSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKG89ZS5LYygpO28uT2IoKTspcz11KG8uUGIoKSwzMyksQz1zLmkrcy5nLzIsaj1zLmorcy5mLzIsdj10LmYsaD12Lmkrdi5nLzIsZD12Lmordi5mLzIsaz1DLWgsTT1qLWQscj1iLk1hdGguc3FydChrKmsrTSpNKSxrKj10LmUvcixNKj10LmUvcixuPyhDLT1rLGotPU0pOihDKz1rLGorPU0pLGt1KHMsQy1zLmcvMiksRXUocyxqLXMuZi8yKX1mdW5jdGlvbiB2NCh0KXt2YXIgZSxuLHI7aWYoIXQuYyYmdC5iIT1udWxsKXtmb3IoZT10LmIubGVuZ3RoLTQ7ZT49MDtlLT0yKWZvcihuPTA7bjw9ZTtuKz0yKSh0LmJbbl0+dC5iW24rMl18fHQuYltuXT09PXQuYltuKzJdJiZ0LmJbbisxXT50LmJbbiszXSkmJihyPXQuYltuKzJdLHQuYltuKzJdPXQuYltuXSx0LmJbbl09cixyPXQuYltuKzNdLHQuYltuKzNdPXQuYltuKzFdLHQuYltuKzFdPXIpO3QuYz0hMH19ZnVuY3Rpb24gU2NlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsaztmb3IoaD1lPT0xP2NsdDpvbHQsbz1oLmEuZWMoKS5LYygpO28uT2IoKTspZm9yKHM9dShvLlBiKCksMTAzKSx2PXUoQWkodC5mLmMscyksMjEpLktjKCk7di5PYigpOylzd2l0Y2goZD11KHYuUGIoKSw0Nikscj11KGQuYiw4MSksaz11KGQuYSwxODkpLG49ay5jLHMuZyl7Y2FzZSAyOmNhc2UgMTpyLmcuZCs9bjticmVhaztjYXNlIDQ6Y2FzZSAzOnIuZy5jKz1ufX1mdW5jdGlvbiB5Mm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7Zm9yKGs9LTEsQz0wLGg9dCxkPTAsdj1oLmxlbmd0aDtkPHY7KytkKXtmb3Iobz1oW2RdLG49bmV3IFhZdChrPT0tMT90WzBdOnRba10sZSwoWjkoKSx5RykpLHI9MDtyPG8ubGVuZ3RoO3IrKylmb3Iocz1yKzE7czxvLmxlbmd0aDtzKyspVXMob1tyXSwoYWUoKSxUYykpJiZVcyhvW3NdLFRjKSYmWWhlKG4sb1tyXSxvW3NdKT4wJiYrK0M7KytrfXJldHVybiBDfWZ1bmN0aW9uIG1mKHQpe3ZhciBlLG47cmV0dXJuIG49bmV3IE9sKElwKHQuZ20pKSxuLmErPSJAIixHcihuLChlPUhpKHQpPj4+MCxlLnRvU3RyaW5nKDE2KSkpLHQua2goKT8obi5hKz0iIChlUHJveHlVUkk6ICIsaGMobix0LnFoKCkpLHQuJGcoKSYmKG4uYSs9IiBlQ2xhc3M6ICIsaGMobix0LiRnKCkpKSxuLmErPSIpIik6dC4kZygpJiYobi5hKz0iIChlQ2xhc3M6ICIsaGMobix0LiRnKCkpLG4uYSs9IikiKSxuLmF9ZnVuY3Rpb24gdl8odCl7dmFyIGUsbixyLHM7aWYodC5lKXRocm93IGl0KG5ldyBObygoUDAoenV0KSxTb3QrenV0LmsrQW90KSkpO2Zvcih0LmQ9PShhbygpLGgwKSYmQnEodCx6aCksbj1uZXcgUyh0LmEuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMzA3KSxlLmc9ZS5pO2ZvcihzPW5ldyBTKHQuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSw1Nyksci5pPUNzO3JldHVybiB0LmIuTGUodCksdH1mdW5jdGlvbiB4Mm4odCxlKXt2YXIgbixyLHMsbyxoO2lmKGU8Mip0LmIpdGhyb3cgaXQobmV3IEZuKCJUaGUga25vdCB2ZWN0b3IgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byB0aW1lIHRoZSBkaW1lbnNpb24gZWxlbWVudHMuIikpO2Zvcih0LmY9MSxzPTA7czx0LmI7cysrKWxlKHQuZSwwKTtmb3IoaD1lKzEtMip0LmIsbj1oLG89MTtvPGg7bysrKWxlKHQuZSxvL24pO2lmKHQuZClmb3Iocj0wO3I8dC5iO3IrKylsZSh0LmUsMSl9ZnVuY3Rpb24gQWNlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2lmKGs9ZSxDPXUoaHooc3J0KHQuaSksayksMzMpLCFDKXRocm93IHM9UjAoayxBZCksZD0iVW5hYmxlIHRvIGZpbmQgZWxrIG5vZGUgZm9yIGpzb24gb2JqZWN0ICciK3Msdj1kKyInIFBhbmljISIsaXQobmV3IHVkKHYpKTtvPUt3KGssImVkZ2VzIiksbj1uZXcgSUd0KHQsQykscmJuKG4uYSxuLmIsbyksaD1LdyhrLGV1dCkscj1uZXcgZ3p0KHQpLHBkbihyLmEsaCl9ZnVuY3Rpb24gTGNlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7aWYociE9bnVsbCl7aWYocz10LmRbZV0scyl7Zm9yKG89cy5nLHY9cy5pLGQ9MDtkPHY7KytkKWlmKGg9dShvW2RdLDEzMyksaC5TaCgpPT1uJiZ5aShyLGguY2QoKSkpcmV0dXJuIGR9fWVsc2UgaWYocz10LmRbZV0scyl7Zm9yKG89cy5nLHY9cy5pLGQ9MDtkPHY7KytkKWlmKGg9dShvW2RdLDEzMyksVnQoaC5jZCgpKT09PVZ0KHIpKXJldHVybiBkfXJldHVybi0xfWZ1bmN0aW9uIF9FKHQsZSl7dmFyIG4scixzO3JldHVybiBuPWU9PW51bGw/ZWMoTG8odC5mLG51bGwpKTpLQyh0LmcsZSksX3QobiwyMzUpPyhzPXUobiwyMzUpLHMuUWgoKT09bnVsbCxzKTpfdChuLDQ5OCk/KHI9dShuLDE5MzgpLHM9ci5hLHMmJihzLnliPT1udWxsfHwoZT09bnVsbD9hdSh0LmYsbnVsbCxzKTpzdih0LmcsZSxzKSkpLHMpOm51bGx9ZnVuY3Rpb24gazJuKHQpe3E1dCgpO3ZhciBlLG4scixzLG8saCxkO2lmKHQ9PW51bGx8fChzPXQubGVuZ3RoLHMlMiE9MCkpcmV0dXJuIG51bGw7Zm9yKGU9SyQodCksbz1zLzJ8MCxuPU50KEd1LE40LDI1LG8sMTUsMSkscj0wO3I8bztyKyspe2lmKGg9ZEFbZVtyKjJdXSxoPT0tMXx8KGQ9ZEFbZVtyKjIrMV1dLGQ9PS0xKSlyZXR1cm4gbnVsbDtuW3JdPShoPDw0fGQpPDwyND4+MjR9cmV0dXJuIG59ZnVuY3Rpb24gRTJuKHQsZSxuKXt2YXIgcixzLG87aWYocz11KHBvKHQuaSxlKSwzMDYpLCFzKWlmKHM9bmV3IEFlZSh0LmQsZSxuKSx6eCh0LmksZSxzKSxQM3QoZSkpalFlKHQuYSxlLmMsZS5iLHMpO2Vsc2Ugc3dpdGNoKG89bHBuKGUpLHI9dShwbyh0LnAsbyksMjQ0KSxvLmcpe2Nhc2UgMTpjYXNlIDM6cy5qPSEwLGhldChyLGUuYixzKTticmVhaztjYXNlIDQ6Y2FzZSAyOnMuaz0hMCxoZXQocixlLmMscyl9cmV0dXJuIHN9ZnVuY3Rpb24gVDJuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsaztpZihkPW5ldyBveCx2PW91KHQuZS5UZygpLGUpLHM9dSh0LmcsMTE5KSx0bygpLHUoZSw2NikuT2ooKSlmb3IoaD0wO2g8dC5pOysraClvPXNbaF0sdi5ybChvLmFrKCkpJiZEcihkLG8pO2Vsc2UgZm9yKGg9MDtoPHQuaTsrK2gpbz1zW2hdLHYucmwoby5haygpKSYmKGs9by5kZCgpLERyKGQscj9iXyh0LGUsaCxkLmksayk6aykpO3JldHVybiBfM3QoZCxuKX1mdW5jdGlvbiBNY2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO2lmKHM9dC5iW2UucF0scz49MClyZXR1cm4gcztmb3Iobz0xLGQ9bmV3IFMoZS5qKTtkLmE8ZC5jLmMubGVuZ3RoOylmb3IoaD11KEooZCksMTEpLHI9bmV3IFMoaC5nKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxNyksaz1uLmQuaSxlIT1rJiYodj1NY2UodCxrKSxvPWIuTWF0aC5tYXgobyx2KzEpKTtyZXR1cm4gVGhuKHQsZSxvKSxvfWZ1bmN0aW9uIERjZSh0LGUsbil7dmFyIHIscyxvO2ZvcihyPTE7cjx0LmMubGVuZ3RoO3IrKyl7Zm9yKG89KEFuKHIsdC5jLmxlbmd0aCksdSh0LmNbcl0sMTApKSxzPXI7cz4wJiZlLnVlKChBbihzLTEsdC5jLmxlbmd0aCksdSh0LmNbcy0xXSwxMCkpLG8pPjA7KWNoKHQscywoQW4ocy0xLHQuYy5sZW5ndGgpLHUodC5jW3MtMV0sMTApKSksLS1zO0FuKHMsdC5jLmxlbmd0aCksdC5jW3NdPW99bi5hPW5ldyBfcixuLmI9bmV3IF9yfWZ1bmN0aW9uIEMybih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztmb3IoQz0ocj11KGUuZSYmZS5lKCksOSksbmV3IHNoKHIsdShmZihyLHIubGVuZ3RoKSw5KSwwKSksdj12eShuLCJbXFxbXFxdXFxzLF0rIiksbz12LGg9MCxkPW8ubGVuZ3RoO2g8ZDsrK2gpaWYocz1vW2hdLGZ5KHMpLmxlbmd0aCE9MCl7aWYoaz1Wb2UodCxzKSxrPT1udWxsKXJldHVybiBudWxsO3ZmKEMsdShrLDIyKSl9cmV0dXJuIEN9ZnVuY3Rpb24gXzJuKHQpe3ZhciBlLG4scjtmb3Iobj1uZXcgUyh0LmEuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw4MSkscj0oT24oMCksMCkscj4wJiYoIShCcCh0LmEuYykmJmUubi5kKSYmIShiOCh0LmEuYykmJmUubi5iKSYmKGUuZy5kLT1iLk1hdGgubWF4KDAsci8yLS41KSksIShCcCh0LmEuYykmJmUubi5hKSYmIShiOCh0LmEuYykmJmUubi5jKSYmKGUuZy5hKz1iLk1hdGgubWF4KDAsci0xKSkpfWZ1bmN0aW9uIEljZSh0LGUsbil7dmFyIHIscztpZigodC5jLXQuYiZ0LmEubGVuZ3RoLTEpPT0yKWU9PSh2ZSgpLFBuKXx8ZT09SG4/KG56KHUoUTkodCksMTUpLCh6bCgpLGYwKSksbnoodShROSh0KSwxNSksa2IpKToobnoodShROSh0KSwxNSksKHpsKCksa2IpKSxueih1KFE5KHQpLDE1KSxmMCkpO2Vsc2UgZm9yKHM9bmV3IE85KHQpO3MuYSE9cy5iOylyPXUoTXoocyksMTUpLG56KHIsbil9ZnVuY3Rpb24gUzJuKHQsZSl7dmFyIG4scixzLG8saCxkLHY7Zm9yKHM9eDgobmV3IFRwdCh0KSksZD1uZXcgZGEocyxzLmMubGVuZ3RoKSxvPXg4KG5ldyBUcHQoZSkpLHY9bmV3IGRhKG8sby5jLmxlbmd0aCksaD1udWxsO2QuYj4wJiZ2LmI+MCYmKG49KFpuKGQuYj4wKSx1KGQuYS5YYihkLmM9LS1kLmIpLDMzKSkscj0oWm4odi5iPjApLHUodi5hLlhiKHYuYz0tLXYuYiksMzMpKSxuPT1yKTspaD1uO3JldHVybiBofWZ1bmN0aW9uIHVsKHQsZSl7dmFyIG4scixzLG8saCxkO3JldHVybiBvPXQuYSpFb3QrdC5iKjE1MDIsZD10LmIqRW90KzExLG49Yi5NYXRoLmZsb29yKGQqJEkpLG8rPW4sZC09bipHeHQsbyU9R3h0LHQuYT1vLHQuYj1kLGU8PTI0P2IuTWF0aC5mbG9vcih0LmEqREV0W2VdKToocz10LmEqKDE8PGUtMjQpLGg9Yi5NYXRoLmZsb29yKHQuYipJRXRbZV0pLHI9cytoLHI+PTIxNDc0ODM2NDgmJihyLT1tb3QpLHIpfWZ1bmN0aW9uIE9jZSh0LGUsbil7dmFyIHIscyxvLGg7clp0KHQsZSk+clp0KHQsbik/KHI9S28obiwodmUoKSxIbikpLHQuZD1yLmRjKCk/MDpObnQodShyLlhiKDApLDExKSksaD1LbyhlLEJuKSx0LmI9aC5kYygpPzA6Tm50KHUoaC5YYigwKSwxMSkpKToocz1LbyhuLCh2ZSgpLEJuKSksdC5kPXMuZGMoKT8wOk5udCh1KHMuWGIoMCksMTEpKSxvPUtvKGUsSG4pLHQuYj1vLmRjKCk/MDpObnQodShvLlhiKDApLDExKSkpfWZ1bmN0aW9uIFBjZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtpZih0JiYoZT10LkhoKEJoKSxlJiYoaD1CcihYZigoIWUuYiYmKGUuYj1uZXcga2woKGRuKCksUWEpLGNjLGUpKSxlLmIpLCJjb252ZXJzaW9uRGVsZWdhdGVzIikpLGghPW51bGwpKSl7Zm9yKGQ9bmV3IGhlLHI9dnkoaCwiXFx3KyIpLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGQuY1tkLmMubGVuZ3RoXT1uO3JldHVybiBkfXJldHVybiB3bigpLHduKCksaW99ZnVuY3Rpb24gRmNlKHQsZSl7dmFyIG4scixzLG87Zm9yKG49dC5vLmEsbz11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMTExKSxzLmUuYT1uKlh0KHllKHMuYi5XZSh1VikpKSxzLmUuYj0ocj1zLmIsci5YZSgodWkoKSxkbCkpP3IuSGYoKT09KHZlKCksUG4pPy1yLnJmKCkuYi1YdCh5ZShyLldlKGRsKSkpOlh0KHllKHIuV2UoZGwpKSk6ci5IZigpPT0odmUoKSxQbik/LXIucmYoKS5iOjApfWZ1bmN0aW9uIEEybih0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2U9ITAscz1udWxsLG89bnVsbDt0OmZvcih2PW5ldyBTKHQuYSk7di5hPHYuYy5jLmxlbmd0aDspZm9yKGQ9dShKKHYpLDEwKSxyPW5ldyBhcihscihqbyhkKS5hLktjKCksbmV3IHopKTt6cihyKTspe2lmKG49dShNcihyKSwxNykscyYmcyE9ZCl7ZT0hMTticmVhayB0fWlmKHM9ZCxoPW4uYy5pLG8mJm8hPWgpe2U9ITE7YnJlYWsgdH1vPWh9cmV0dXJuIGV9ZnVuY3Rpb24gTDJuKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7Zm9yKG89LTEsZD0tMSxoPTA7aDxlLmMubGVuZ3RoJiYocz0oQW4oaCxlLmMubGVuZ3RoKSx1KGUuY1toXSwzMjkpKSwhKHMuYz50LmMpKTtoKyspcy5hPj10LnMmJihvPDAmJihvPWgpLGQ9aCk7cmV0dXJuIHY9KHQucyt0LmMpLzIsbz49MCYmKHI9bG1uKHQsZSxvLGQpLHY9bVhlKChBbihyLGUuYy5sZW5ndGgpLHUoZS5jW3JdLDMyOSkpKSx5Ym4oZSxyLG4pKSx2fWZ1bmN0aW9uIHNhdCgpe3NhdD1aLGwzZT1uZXcgZW8oKHVpKCksVzYpLDEuMyksR190PUdTdCxaX3Q9bmV3IE93KDE1KSx3M2U9bmV3IGVvKFUyLFpfdCksbTNlPW5ldyBlbyhXMiwxNSksaDNlPVlHLGczZT1HMixwM2U9YzUsYjNlPXhiLGQzZT1vNSxLX3Q9dFAsdjNlPVF5LFFfdD0oeTV0KCksbzNlKSxZX3Q9czNlLFhfdD1hM2UsSl90PWMzZSxVX3Q9aTNlLFdfdD1LRyxmM2U9V1N0LEhPPXIzZSxWX3Q9bjNlLHRTdD11M2V9ZnVuY3Rpb24gSXIodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrO2ZvcihoPShvPW5ldyBsQixvKSxveXQoaCwoT24oZSksZSkpLGs9KCFoLmImJihoLmI9bmV3IGtsKChkbigpLFFhKSxjYyxoKSksaC5iKSx2PTE7djxuLmxlbmd0aDt2Kz0yKWFxKGssblt2LTFdLG5bdl0pO2ZvcihyPSghdC5BYiYmKHQuQWI9bmV3IGZlKFpyLHQsMCwzKSksdC5BYiksZD0wO2Q8MDsrK2Qpcz1Pbm4odShBdChyLHIuaS0xKSw1OTApKSxyPXM7RHIocixoKX1mdW5jdGlvbiBOY2UodCxlLG4pe3ZhciByLHMsbztmb3IoeFplLmNhbGwodGhpcyxuZXcgaGUpLHRoaXMuYT1lLHRoaXMuYj1uLHRoaXMuZT10LHI9KHQuYiYmU2F0KHQpLHQuYSksdGhpcy5kPXFYdChyLmEsdGhpcy5hKSx0aGlzLmM9cVh0KHIuYix0aGlzLmIpLGlobih0aGlzLHRoaXMuZCx0aGlzLmMpLFhwbih0aGlzKSxvPXRoaXMuZS5lLmEuZWMoKS5LYygpO28uT2IoKTspcz11KG8uUGIoKSwyNjYpLHMuYy5jLmxlbmd0aD4wJiZyNG4odGhpcyxzKX1mdW5jdGlvbiBTNXQodCxlLG4scixzLG8pe3ZhciBoLGQsdjtpZighc1tlLmJdKXtmb3Ioc1tlLmJdPSEwLGg9ciwhaCYmKGg9bmV3IEIkKSxsZShoLmUsZSksdj1vW2UuYl0uS2MoKTt2Lk9iKCk7KWQ9dSh2LlBiKCksMjgyKSwhKGQuZD09bnx8ZC5jPT1uKSYmKGQuYyE9ZSYmUzV0KHQsZC5jLGUsaCxzLG8pLGQuZCE9ZSYmUzV0KHQsZC5kLGUsaCxzLG8pLGxlKGguYyxkKSxMcyhoLmQsZC5iKSk7cmV0dXJuIGh9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTTJuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihlPTAscz1uZXcgUyh0LmUpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE3KSxuPU44KG5ldyBUbihudWxsLG5ldyBfbihyLmIsMTYpKSxuZXcgTEspLG4mJisrZTtmb3IoaD1uZXcgUyh0LmcpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE3KSxkPU44KG5ldyBUbihudWxsLG5ldyBfbihvLmIsMTYpKSxuZXcgTUspLGQmJisrZTtyZXR1cm4gZT49Mn1mdW5jdGlvbiBEMm4odCxlKXt2YXIgbixyLHMsbztmb3IodnIoZSwiU2VsZi1Mb29wIHByZS1wcm9jZXNzaW5nIiwxKSxyPW5ldyBTKHQuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTApLGRobihuKSYmKHM9KG89bmV3IFppZShuKSxKdChuLChhZSgpLHg3KSxvKSxLbW4obyksbyksbHMod3UoV28obmV3IFRuKG51bGwsbmV3IF9uKHMuZCwxNikpLG5ldyBUTiksbmV3IGhYKSxuZXcgZlgpLFZ3bihzKSk7b3IoZSl9ZnVuY3Rpb24gSTJuKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDO2ZvcihvPXQuYy5kLmosaD11KFpmKG4sMCksOCksQz0xO0M8bi5iO0MrKylrPXUoWmYobixDKSw4KSxmcyhyLGgsci5jLmIsci5jKSxkPWZkKExpKG5ldyB4byhoKSxrKSwuNSksdj1mZChuZXcgU3J0KFJ5dChvKSkscyksTGkoZCx2KSxmcyhyLGQsci5jLmIsci5jKSxoPWssbz1lPT0wP096KG8pOm8zdChvKTtyaShyLChabihuLmIhPTApLHUobi5jLmIuYyw4KSkpfWZ1bmN0aW9uIE8ybih0KXtweSgpO3ZhciBlLG4scjtyZXR1cm4gbj1qaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtBZl0pKSwhKE9EKGskKG4sdCkpPjF8fChlPWppKF9mLGx0KGN0KGxvLDEpLG9lLDkzLDAsW2lnLFNmXSkpLE9EKGskKGUsdCkpPjEpfHwocj1qaShMZixsdChjdChsbywxKSxvZSw5MywwLFtkMCxIaF0pKSxPRChrJChyLHQpKT4xKSl9ZnVuY3Rpb24gUDJuKHQsZSl7dmFyIG4scixzO3JldHVybiBuPWUuSGgodC5hKSxuJiYocz1CcihYZigoIW4uYiYmKG4uYj1uZXcga2woKGRuKCksUWEpLGNjLG4pKSxuLmIpLCJhZmZpbGlhdGlvbiIpKSxzIT1udWxsKT8ocj1UaihzLEN1KDM1KSkscj09LTE/VWl0KHQsQzkodCxSbChlLkhqKCkpKSxzKTpyPT0wP1VpdCh0LG51bGwscy5zdWJzdHIoMSkpOlVpdCh0LHMuc3Vic3RyKDAscikscy5zdWJzdHIocisxKSkpOm51bGx9ZnVuY3Rpb24gRjJuKHQpe3ZhciBlLG4scjt0cnl7cmV0dXJuIHQ9PW51bGw/X3U6JG8odCl9Y2F0Y2gocyl7aWYocz1XaShzKSxfdChzLDEwMikpcmV0dXJuIGU9cyxyPUlwKG9sKHQpKSsiQCIrKG49KEdkKCksJDN0KHQpPj4+MCksbi50b1N0cmluZygxNikpLEVmbihrdW4oKSwoZDgoKSwiRXhjZXB0aW9uIGR1cmluZyBsZW5pZW50Rm9ybWF0IGZvciAiK3IpLGUpLCI8IityKyIgdGhyZXcgIitJcChlLmdtKSsiPiI7dGhyb3cgaXQocyl9fWZ1bmN0aW9uIEJjZSh0KXtzd2l0Y2godC5nKXtjYXNlIDA6cmV0dXJuIG5ldyBldHQ7Y2FzZSAxOnJldHVybiBuZXcgcUI7Y2FzZSAyOnJldHVybiBuZXcgalZ0O2Nhc2UgMzpyZXR1cm4gbmV3IEJMO2Nhc2UgNDpyZXR1cm4gbmV3IGFZdDtjYXNlIDU6cmV0dXJuIG5ldyBudHQ7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheWVyZXIgIisodC5mIT1udWxsP3QuZjoiIit0LmcpKSl9fWZ1bmN0aW9uIEE1dCh0LGUsbil7dmFyIHIscyxvO2ZvcihvPW5ldyBTKHQudCk7by5hPG8uYy5jLmxlbmd0aDspcj11KEoobyksMjY4KSxyLmIuczwwJiZyLmM+MCYmKHIuYi5uLT1yLmMsci5iLm48PTAmJnIuYi51PjAmJnJpKGUsci5iKSk7Zm9yKHM9bmV3IFModC5pKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwyNjgpLHIuYS5zPDAmJnIuYz4wJiYoci5hLnUtPXIuYyxyLmEudTw9MCYmci5hLm4+MCYmcmkobixyLmEpKX1mdW5jdGlvbiB3cSh0KXt2YXIgZSxuLHIscyxvO2lmKHQuZz09bnVsbCYmKHQuZD10LnNpKHQuZiksRHIodCx0LmQpLHQuYykpcmV0dXJuIG89dC5mLG87aWYoZT11KHQuZ1t0LmktMV0sNDcpLHM9ZS5QYigpLHQuZT1lLG49dC5zaShzKSxuLk9iKCkpdC5kPW4sRHIodCxuKTtlbHNlIGZvcih0LmQ9bnVsbDshZS5PYigpJiYodHModC5nLC0tdC5pLG51bGwpLHQuaSE9MCk7KXI9dSh0LmdbdC5pLTFdLDQ3KSxlPXI7cmV0dXJuIHN9ZnVuY3Rpb24gTjJuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKHI9ZSxzPXIuYWsoKSxYMCh0LmUscykpe2lmKHMuaGkoKSYmTyQodCxzLHIuZGQoKSkpcmV0dXJuITF9ZWxzZSBmb3IoZD1vdSh0LmUuVGcoKSxzKSxuPXUodC5nLDExOSksbz0wO288dC5pOysrbylpZihoPW5bb10sZC5ybChoLmFrKCkpKXJldHVybiB5aShoLHIpPyExOih1KGg0KHQsbyxlKSw3MiksITApO3JldHVybiBEcih0LGUpfWZ1bmN0aW9uIEIybih0LGUsbixyKXt2YXIgcyxvLGgsZDtmb3Iocz1uZXcgWTAodCksRDAocywoVm4oKSxMbCkpLEp0KHMsKGFlKCksX2kpLGUpLEp0KHMsTE8sciksSnQocywoVGUoKSxjcyksKHVhKCksR2MpKSxKdChzLHIxLGUuYyksSnQocywkaCxlLmQpLHV1ZShlLHMpLGQ9Yi5NYXRoLmZsb29yKG4vMiksaD1uZXcgUyhzLmopO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDExKSxvLm4uYj1kO3JldHVybiBzfWZ1bmN0aW9uIFIybih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3Iodj1VZCh0LmMtdC5iJnQuYS5sZW5ndGgtMSksaz1udWxsLEM9bnVsbCxvPW5ldyBPOSh0KTtvLmEhPW8uYjspcz11KE16KG8pLDEwKSxuPShkPXUoUShzLChhZSgpLHIxKSksMTEpLGQ/ZC5pOm51bGwpLHI9KGg9dShRKHMsJGgpLDExKSxoP2guaTpudWxsKSwoayE9bnx8QyE9cikmJihUY2UodixlKSxrPW4sQz1yKSx2LmNbdi5jLmxlbmd0aF09cztUY2UodixlKX1mdW5jdGlvbiBSY2UodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGU9MCxyPW5ldyBTKHQuYSk7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49dShKKHIpLDEwKSxvPW5ldyBhcihscihEcyhuKS5hLktjKCksbmV3IHopKTt6cihvKTspcz11KE1yKG8pLDE3KSx0PT1zLmQuaS5jJiZzLmMuaj09KHZlKCksQm4pJiYoaD1fMShzLmMpLmIsZD1fMShzLmQpLmIsZT1iLk1hdGgubWF4KGUsYi5NYXRoLmFicyhkLWgpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gajJuKHQsZSxuKXt2YXIgcixzLG87dnIobiwiUmVtb3ZlIG92ZXJsYXBzIiwxKSxuLm4mJmUmJmdmKG4scGYoZSksKFNsKCksUWwpKSxyPXUocWUoZSwobTkoKSxIUykpLDMzKSx0LmY9cix0LmE9cHN0KHUocWUoZSwodXkoKSxxTykpLDI5MykpLHM9eWUocWUoZSwodWkoKSxXMikpKSxDQyh0LChPbihzKSxzKSksbz13eShyKSxBaGUodCxlLG8sbiksbi5uJiZlJiZnZihuLHBmKGUpLChTbCgpLFFsKSl9ZnVuY3Rpb24gTDV0KHQsZSxuKXtzd2l0Y2gobi5nKXtjYXNlIDE6cmV0dXJuIG5ldyAkZShlLmEsYi5NYXRoLm1pbih0LmQuYixlLmIpKTtjYXNlIDI6cmV0dXJuIG5ldyAkZShiLk1hdGgubWF4KHQuYy5hLGUuYSksZS5iKTtjYXNlIDM6cmV0dXJuIG5ldyAkZShlLmEsYi5NYXRoLm1heCh0LmMuYixlLmIpKTtjYXNlIDQ6cmV0dXJuIG5ldyAkZShiLk1hdGgubWluKGUuYSx0LmQuYSksZS5iKX1yZXR1cm4gbmV3ICRlKGUuYSxlLmIpfWZ1bmN0aW9uICQybih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGo7Zm9yKE09cj8odmUoKSxCbik6KHZlKCksSG4pLHM9ITEsdj1lW25dLGs9MCxDPXYubGVuZ3RoO2s8QzsrK2spZD12W2tdLCFqeCh1KFEoZCwoVGUoKSxjcykpLDk4KSkmJihoPWQuZSxqPSFLbyhkLE0pLmRjKCkmJiEhaCxqJiYobz1fNHQoaCksdC5iPW5ldyBTNHQobyxyPzA6by5sZW5ndGgtMSkpLHM9c3xSbW4odCxkLE0saikpO3JldHVybiBzfWZ1bmN0aW9uIHdJKHQpe3ZhciBlLG4scjtmb3IoZT1VZCgxKyghdC5jJiYodC5jPW5ldyBmZShnbCx0LDksOSkpLHQuYykuaSksbGUoZSwoIXQuZCYmKHQuZD1uZXcgQ24oWXMsdCw4LDUpKSx0LmQpKSxyPW5ldyBucigoIXQuYyYmKHQuYz1uZXcgZmUoZ2wsdCw5LDkpKSx0LmMpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksMTE4KSxsZShlLCghbi5kJiYobi5kPW5ldyBDbihZcyxuLDgsNSkpLG4uZCkpO3JldHVybiBMcihlKSxuZXcgZjkoZSl9ZnVuY3Rpb24gSzAodCl7dmFyIGUsbixyO2ZvcihlPVVkKDErKCF0LmMmJih0LmM9bmV3IGZlKGdsLHQsOSw5KSksdC5jKS5pKSxsZShlLCghdC5lJiYodC5lPW5ldyBDbihZcyx0LDcsNCkpLHQuZSkpLHI9bmV3IG5yKCghdC5jJiYodC5jPW5ldyBmZShnbCx0LDksOSkpLHQuYykpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwxMTgpLGxlKGUsKCFuLmUmJihuLmU9bmV3IENuKFlzLG4sNyw0KSksbi5lKSk7cmV0dXJuIExyKGUpLG5ldyBmOShlKX1mdW5jdGlvbiB6Mm4odCl7dmFyIGUsbixyLHM7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihyPSRjKHQsITApLHM9b08ubGVuZ3RoLGhuKHIuc3Vic3RyKHIubGVuZ3RoLXMscyksb08pKXtpZihuPXIubGVuZ3RoLG49PTQpe2lmKGU9KFJyKDAsci5sZW5ndGgpLHIuY2hhckNvZGVBdCgwKSksZT09NDMpcmV0dXJuIFRMdDtpZihlPT00NSlyZXR1cm4gVjVlfWVsc2UgaWYobj09MylyZXR1cm4gVEx0fXJldHVybiBkeShyKX1mdW5jdGlvbiBxMm4odCl7dmFyIGUsbixyLHM7Zm9yKGU9MCxuPTAscz1uZXcgUyh0LmopO3MuYTxzLmMuYy5sZW5ndGg7KWlmKHI9dShKKHMpLDExKSxlPUFyKFBhKGUsUUp0KFJpKG5ldyBUbihudWxsLG5ldyBfbihyLmUsMTYpKSxuZXcgTVEpKSkpLG49QXIoUGEobixRSnQoUmkobmV3IFRuKG51bGwsbmV3IF9uKHIuZywxNikpLG5ldyBEUSkpKSksZT4xfHxuPjEpcmV0dXJuIDI7cmV0dXJuIGUrbj09MT8yOjB9ZnVuY3Rpb24gamNlKHQsZSxuKXt2YXIgcixzLG8saCxkO2Zvcih2cihuLCJFTEsgRm9yY2UiLDEpLGplKFJlKHFlKGUsKEpmKCkseTd0KSkpKXx8eSQoKHI9bmV3IHJyKChQbSgpLG5ldyBNbShlKSkpLHIpKSxkPXByZShlKSxvZG4oZCksJHVuKHQsdShRKGQsbTd0KSw0MjQpKSxoPUFsZSh0LmEsZCksbz1oLktjKCk7by5PYigpOylzPXUoby5QYigpLDIzMSksa21uKHQuYixzLFJjKG4sMS9oLmdjKCkpKTtkPXpoZShoKSxSaGUoZCksb3Iobil9ZnVuY3Rpb24gSDJuKHQsZSl7dmFyIG4scixzLG8saDtpZih2cihlLCJCcmVha2luZyBQb2ludCBQcm9jZXNzb3IiLDEpLHU1bih0KSxqZShSZShRKHQsKFRlKCksUzl0KSkpKSl7Zm9yKHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMjkpLG49MCxoPW5ldyBTKHIuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLG8ucD1uKys7aDNuKHQpLGN1ZSh0LCEwKSxjdWUodCwhMSl9b3IoZSl9ZnVuY3Rpb24gVjJuKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7Zm9yKGQ9dC5jLGg9KG4ucT9uLnE6KHduKCksd24oKSx1MCkpLnZjKCkuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksNDIpLHI9IXFDKFJpKG5ldyBUbihudWxsLG5ldyBfbihkLDE2KSksbmV3IFp0KG5ldyBFR3QoZSxvKSkpKS5zZCgoUWIoKSxvNykpLHImJih2PW8uZGQoKSxfdCh2LDQpJiYocz1PM3QodikscyE9bnVsbCYmKHY9cykpLGUuWWUodShvLmNkKCksMTQ2KSx2KSl9ZnVuY3Rpb24gdnEodCxlKXt2YXIgbixyLHMsbyxoO2lmKGUpe2ZvcihvPV90KHQuQ2IsODgpfHxfdCh0LkNiLDk5KSxoPSFvJiZfdCh0LkNiLDMyMikscj1uZXcgbnIoKCFlLmEmJihlLmE9bmV3IFQ5KGUsaG8sZSkpLGUuYSkpO3IuZSE9ci5pLmdjKCk7KWlmKG49dShkcihyKSw4Nykscz1McShuKSxvP190KHMsODgpOmg/X3QocywxNDgpOnMpcmV0dXJuIHM7cmV0dXJuIG8/KGRuKCksS2gpOihkbigpLFcxKX1lbHNlIHJldHVybiBudWxsfWZ1bmN0aW9uIEcybih0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3IodnIoZSwiQ29uc3RyYWludHMgUG9zdHByb2Nlc3NvciIsMSksaD0wLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDI5KSxkPTAscj1uZXcgUyhzLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEwKSxuLms9PShWbigpLE9zKSYmKEp0KG4sKFRlKCksaEcpLHBlKGgpKSxKdChuLG9HLHBlKGQpKSwrK2QpOysraH1vcihlKX1mdW5jdGlvbiBVMm4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEM7Zm9yKHY9bmV3ICRlKG4sciksaWEodix1KFEoZSwoZmMoKSwkUykpLDgpKSxDPWVpKGUuYiwwKTtDLmIhPUMuZC5jOylrPXUodGkoQyksODYpLExpKGsuZSx2KSxyaSh0LmIsayk7Zm9yKGQ9ZWkoZS5hLDApO2QuYiE9ZC5kLmM7KXtmb3IoaD11KHRpKGQpLDE4OCksbz1laShoLmEsMCk7by5iIT1vLmQuYzspcz11KHRpKG8pLDgpLExpKHMsdik7cmkodC5hLGgpfX1mdW5jdGlvbiBNNXQodCxlLG4pe3ZhciByLHMsbztpZihvPUM0KCgkdSgpLHlhKSx0LlRnKCksZSksbyl7aWYodG8oKSwhdShvLDY2KS5PaigpJiYobz1LeChUbyh5YSxvKSksIW8pKXRocm93IGl0KG5ldyBGbihsYitlLm5lKCkrWF8pKTtzPShyPXQuWWcobyksdShyPj0wP3QuX2cociwhMCwhMCk6ZHYodCxvLCEwKSwxNTMpKSx1KHMsMjE1KS5tbChlLG4pfWVsc2UgdGhyb3cgaXQobmV3IEZuKGxiK2UubmUoKStYXykpfWZ1bmN0aW9uIFcybih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKG49bmV3IGhlLHM9V28obmV3IFRuKG51bGwsbmV3IF9uKHQsMTYpKSxuZXcgWlEpLG89V28obmV3IFRuKG51bGwsbmV3IF9uKHQsMTYpKSxuZXcgSlEpLGg9eW9uKEZhbihsJChfd24obHQoY3QobjZuLDEpLERlLDgzMywwLFtzLG9dKSksbmV3IHRaKSkpLHI9MTtyPGgubGVuZ3RoO3IrKyloW3JdLWhbci0xXT49MiplJiZsZShuLG5ldyBEbnQoaFtyLTFdK2UsaFtyXS1lKSk7cmV0dXJuIG59ZnVuY3Rpb24gWTJuKHQsZSxuKXt2cihuLCJFYWRlcyByYWRpYWwiLDEpLG4ubiYmZSYmZ2YobixwZihlKSwoU2woKSxRbCkpLHQuZD11KHFlKGUsKG05KCksSFMpKSwzMyksdC5jPVh0KHllKHFlKGUsKHV5KCksUkcpKSkpLHQuZT1wc3QodShxZShlLHFPKSwyOTMpKSx0LmE9U2huKHUocWUoZSxEX3QpLDQyNikpLHQuYj1LZG4odShxZShlLE1fdCksMzQwKSksTGRuKHQpLG4ubiYmZSYmZ2YobixwZihlKSwoU2woKSxRbCkpfWZ1bmN0aW9uIEsybih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztpZihuKWZvcihvPW4uYS5sZW5ndGgscj1uZXcgZTIobyksZD0oci5iLXIuYSkqci5jPDA/KEZwKCksSWIpOm5ldyBqcChyKTtkLk9iKCk7KWg9dShkLlBiKCksMTkpLHM9UDgobixoLmEpLHMmJih2PVdzbih0LChrPShTdygpLEM9bmV3IEdwdCxDKSxlJiZENXQoayxlKSxrKSxzKSxHOSh2LFIwKHMsQWQpKSxscShzLHYpLGU1dChzLHYpLExpdCh0LHMsdikpfWZ1bmN0aW9uIG1xKHQpe3ZhciBlLG4scixzLG8saDtpZighdC5qKXtpZihoPW5ldyB0QyxlPXVBLG89ZS5hLnpjKHQsZSksbz09bnVsbCl7Zm9yKHI9bmV3IG5yKEFvKHQpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksMjYpLHM9bXEobiksaXMoaCxzKSxEcihoLG4pO2UuYS5CYyh0KSE9bnVsbH1peShoKSx0Lmo9bmV3IFYzKCh1KEF0KFd0KChIcCgpLExuKS5vKSwxMSksMTgpLGguaSksaC5nKSxzbCh0KS5iJj0tMzN9cmV0dXJuIHQuan1mdW5jdGlvbiBYMm4odCl7dmFyIGUsbixyLHM7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZihyPSRjKHQsITApLHM9b08ubGVuZ3RoLGhuKHIuc3Vic3RyKHIubGVuZ3RoLXMscyksb08pKXtpZihuPXIubGVuZ3RoLG49PTQpe2lmKGU9KFJyKDAsci5sZW5ndGgpLHIuY2hhckNvZGVBdCgwKSksZT09NDMpcmV0dXJuIENMdDtpZihlPT00NSlyZXR1cm4gRzVlfWVsc2UgaWYobj09MylyZXR1cm4gQ0x0fXJldHVybiBuZXcgUHB0KHIpfWZ1bmN0aW9uIFEybih0KXt2YXIgZSxuLHI7cmV0dXJuIG49dC5sLG4mbi0xfHwocj10Lm0sciZyLTEpfHwoZT10LmgsZSZlLTEpfHxlPT0wJiZyPT0wJiZuPT0wPy0xOmU9PTAmJnI9PTAmJm4hPTA/dHl0KG4pOmU9PTAmJnIhPTAmJm49PTA/dHl0KHIpKzIyOmUhPTAmJnI9PTAmJm49PTA/dHl0KGUpKzQ0Oi0xfWZ1bmN0aW9uIFoybih0LGUpe3ZhciBuLHIscyxvLGg7Zm9yKHZyKGUsIkVkZ2Ugam9pbmluZyIsMSksbj1qZShSZShRKHQsKFRlKCksZGh0KSkpKSxzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxoPW5ldyBkYShyLmEsMCk7aC5iPGguZC5nYygpOylvPShabihoLmI8aC5kLmdjKCkpLHUoaC5kLlhiKGguYz1oLmIrKyksMTApKSxvLms9PShWbigpLHRhKSYmKEJhdChvLG4pLENsKGgpKTtvcihlKX1mdW5jdGlvbiBKMm4odCxlLG4pe3ZhciByLHM7aWYoTCQodC5iKSxLZCh0LmIsKEtEKCksakcpLChVQygpLFZPKSksS2QodC5iLCRHLGUuZyksS2QodC5iLHpHLGUuYSksdC5hPUZxKHQuYixlKSx2cihuLCJDb21wYWN0aW9uIGJ5IHNocmlua2luZyBhIHRyZWUiLHQuYS5jLmxlbmd0aCksZS5pLmMubGVuZ3RoPjEpZm9yKHM9bmV3IFModC5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSw1MSksci5wZihlLFJjKG4sMSkpO29yKG4pfWZ1bmN0aW9uIG00KHQsZSl7dmFyIG4scixzLG8saDtmb3Iocz1lLmEmdC5mLG89bnVsbCxyPXQuYltzXTs7cj1yLmIpe2lmKHI9PWUpe28/by5iPWUuYjp0LmJbc109ZS5iO2JyZWFrfW89cn1mb3IoaD1lLmYmdC5mLG89bnVsbCxuPXQuY1toXTs7bj1uLmQpe2lmKG49PWUpe28/by5kPWUuZDp0LmNbaF09ZS5kO2JyZWFrfW89bn1lLmU/ZS5lLmM9ZS5jOnQuYT1lLmMsZS5jP2UuYy5lPWUuZTp0LmU9ZS5lLC0tdC5pLCsrdC5nfWZ1bmN0aW9uIHR3bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQztmb3Iobj10Lm8sZT10LnAsaD13aSxzPVNhLGQ9d2ksbz1TYSxrPTA7azxuOysraylmb3IoQz0wO0M8ZTsrK0MpZjQodCxrLEMpJiYoaD1iLk1hdGgubWluKGgsaykscz1iLk1hdGgubWF4KHMsayksZD1iLk1hdGgubWluKGQsQyksbz1iLk1hdGgubWF4KG8sQykpO3JldHVybiB2PXMtaCsxLHI9by1kKzEsbmV3IHpYdChwZShoKSxwZShkKSxwZSh2KSxwZShyKSl9ZnVuY3Rpb24gYWF0KHQsZSl7dmFyIG4scixzLG87Zm9yKG89bmV3IGRhKHQsMCksbj0oWm4oby5iPG8uZC5nYygpKSx1KG8uZC5YYihvLmM9by5iKyspLDE0MCkpO28uYjxvLmQuZ2MoKTspcj0oWm4oby5iPG8uZC5nYygpKSx1KG8uZC5YYihvLmM9by5iKyspLDE0MCkpLHM9bmV3ICR3dChyLmMsbi5kLGUpLFpuKG8uYj4wKSxvLmEuWGIoby5jPS0tby5iKSx6bShvLHMpLFpuKG8uYjxvLmQuZ2MoKSksby5kLlhiKG8uYz1vLmIrKykscy5hPSExLG49cn1mdW5jdGlvbiAkY2UodCl7dmFyIGUsbixyLHMsbyxoO2ZvcihzPXUoUSh0LChhZSgpLFpWKSksMTEpLGg9bmV3IFModC5qKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKG89dShKKGgpLDExKSxyPW5ldyBTKG8uZyk7ci5hPHIuYy5jLmxlbmd0aDspcmV0dXJuIGU9dShKKHIpLDE3KSxvYShlLHMpLG87Zm9yKG49bmV3IFMoby5lKTtuLmE8bi5jLmMubGVuZ3RoOylyZXR1cm4gZT11KEoobiksMTcpLE9hKGUscyksb31yZXR1cm4gbnVsbH1mdW5jdGlvbiBld24odCxlLG4pe3ZhciByLHM7cj1UdShuLnEuZ2V0VGltZSgpKSx5YyhyLDApPDA/KHM9V2ctQXIoUUQoejgociksV2cpKSxzPT1XZyYmKHM9MCkpOnM9QXIoUUQocixXZykpLGU9PTE/KHM9Yi5NYXRoLm1pbigocys1MCkvMTAwfDAsOSkscXAodCw0OCtzJnlzKSk6ZT09Mj8ocz1iLk1hdGgubWluKChzKzUpLzEwfDAsOTkpLEpkKHQscywyKSk6KEpkKHQscywzKSxlPjMmJkpkKHQsMCxlLTMpKX1mdW5jdGlvbiBud24odCl7dmFyIGUsbixyLHM7cmV0dXJuIFZ0KFEodCwoVGUoKSxxeSkpKT09PVZ0KChHMCgpLHNwKSk/IXQuZSYmVnQoUSh0LERPKSkhPT1WdCgoZUUoKSxUTykpOihyPXUoUSh0LGVodCksMjkyKSxzPWplKFJlKFEodCxuaHQpKSl8fFZ0KFEodCxfUykpPT09VnQoKG42KCksRU8pKSxlPXUoUSh0LFZDdCksMTkpLmEsbj10LmEuYy5sZW5ndGgsIXMmJnIhPShlRSgpLFRPKSYmKGU9PTB8fGU+bikpfWZ1bmN0aW9uIHJ3bih0KXt2YXIgZSxuO2ZvcihuPTA7bjx0LmMubGVuZ3RoJiYhKGxLdCgoQW4obix0LmMubGVuZ3RoKSx1KHQuY1tuXSwxMTMpKSk+MCk7bisrKTtpZihuPjAmJm48dC5jLmxlbmd0aC0xKXJldHVybiBuO2ZvcihlPTA7ZTx0LmMubGVuZ3RoJiYhKGxLdCgoQW4oZSx0LmMubGVuZ3RoKSx1KHQuY1tlXSwxMTMpKSk+MCk7ZSsrKTtyZXR1cm4gZT4wJiZuPHQuYy5sZW5ndGgtMT9lOnQuYy5sZW5ndGgvMnwwfWZ1bmN0aW9uIHpjZSh0LGUpe3ZhciBuLHI7aWYoZSE9dC5DYnx8dC5EYj4+MTYhPTYmJmUpe2lmKHZFKHQsZSkpdGhyb3cgaXQobmV3IEZuKFFfK3NjZSh0KSkpO3I9bnVsbCx0LkNiJiYocj0obj10LkRiPj4xNixuPj0wP3I0dCh0LHIpOnQuQ2IuaWgodCwtMS1uLG51bGwscikpKSxlJiYocj1jNihlLHQsNixyKSkscj1ld3QodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsNixlLGUpKX1mdW5jdGlvbiBENXQodCxlKXt2YXIgbixyO2lmKGUhPXQuQ2J8fHQuRGI+PjE2IT05JiZlKXtpZih2RSh0LGUpKXRocm93IGl0KG5ldyBGbihRXyt6dWUodCkpKTtyPW51bGwsdC5DYiYmKHI9KG49dC5EYj4+MTYsbj49MD9zNHQodCxyKTp0LkNiLmloKHQsLTEtbixudWxsLHIpKSksZSYmKHI9YzYoZSx0LDkscikpLHI9bnd0KHQsZSxyKSxyJiZyLkZpKCl9ZWxzZSB0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDksZSxlKSl9ZnVuY3Rpb24gb2F0KHQsZSl7dmFyIG4scjtpZihlIT10LkNifHx0LkRiPj4xNiE9MyYmZSl7aWYodkUodCxlKSl0aHJvdyBpdChuZXcgRm4oUV8rJGxlKHQpKSk7cj1udWxsLHQuQ2ImJihyPShuPXQuRGI+PjE2LG4+PTA/bzR0KHQscik6dC5DYi5paCh0LC0xLW4sbnVsbCxyKSkpLGUmJihyPWM2KGUsdCwxMixyKSkscj10d3QodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsMyxlLGUpKX1mdW5jdGlvbiBTRSh0KXt2YXIgZSxuLHIscyxvO2lmKHI9RGgodCksbz10Lmosbz09bnVsbCYmcilyZXR1cm4gdC4kaigpP251bGw6ci56aigpO2lmKF90KHIsMTQ4KSl7aWYobj1yLkFqKCksbiYmKHM9bi5OaCgpLHMhPXQuaSkpe2lmKGU9dShyLDE0OCksZS5FaigpKXRyeXt0Lmc9cy5LaChlLG8pfWNhdGNoKGgpe2lmKGg9V2koaCksX3QoaCw3OCkpdC5nPW51bGw7ZWxzZSB0aHJvdyBpdChoKX10Lmk9c31yZXR1cm4gdC5nfXJldHVybiBudWxsfWZ1bmN0aW9uIHFjZSh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgaGUsbGUoZSxuZXcgRHgobmV3ICRlKHQuYyx0LmQpLG5ldyAkZSh0LmMrdC5iLHQuZCkpKSxsZShlLG5ldyBEeChuZXcgJGUodC5jLHQuZCksbmV3ICRlKHQuYyx0LmQrdC5hKSkpLGxlKGUsbmV3IER4KG5ldyAkZSh0LmMrdC5iLHQuZCt0LmEpLG5ldyAkZSh0LmMrdC5iLHQuZCkpKSxsZShlLG5ldyBEeChuZXcgJGUodC5jK3QuYix0LmQrdC5hKSxuZXcgJGUodC5jLHQuZCt0LmEpKSksZX1mdW5jdGlvbiBIY2UodCxlLG4scil7dmFyIHMsbyxoO2lmKGg9cDR0KGUsbiksci5jW3IuYy5sZW5ndGhdPWUsdC5qW2gucF09PS0xfHx0LmpbaC5wXT09Mnx8dC5hW2UucF0pcmV0dXJuIHI7Zm9yKHQualtoLnBdPS0xLG89bmV3IGFyKGxyKFUwKGgpLmEuS2MoKSxuZXcgeikpO3pyKG8pOylpZihzPXUoTXIobyksMTcpLCEoISghR2EocykmJiEoIUdhKHMpJiZzLmMuaS5jPT1zLmQuaS5jKSl8fHM9PWUpKXJldHVybiBIY2UodCxzLGgscik7cmV0dXJuIHJ9ZnVuY3Rpb24gaXduKHQsZSxuKXt2YXIgcixzLG87Zm9yKG89ZS5hLmVjKCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksNzkpLHI9dSh0cih0LmIscyksMjY2KSwhciYmKGVzKGUwKHMpKT09ZXModGIocykpP212bih0LHMsbik6ZTAocyk9PWVzKHRiKHMpKT90cih0LmMscyk9PW51bGwmJnRyKHQuYix0YihzKSkhPW51bGwmJmtoZSh0LHMsbiwhMSk6dHIodC5kLHMpPT1udWxsJiZ0cih0LmIsZTAocykpIT1udWxsJiZraGUodCxzLG4sITApKX1mdW5jdGlvbiBzd24odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iocz10LktjKCk7cy5PYigpOylmb3Iocj11KHMuUGIoKSwxMCksZD1uZXcgTWMsVW8oZCxyKSxCcyhkLCh2ZSgpLEhuKSksSnQoZCwoYWUoKSxuRyksKE5uKCksITApKSxoPWUuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksMTApLHY9bmV3IE1jLFVvKHYsbyksQnModixCbiksSnQodixuRywhMCksbj1uZXcgVncsSnQobixuRywhMCksT2EobixkKSxvYShuLHYpfWZ1bmN0aW9uIGF3bih0LGUsbixyKXt2YXIgcyxvLGgsZDtzPVJpZSh0LGUsbiksbz1SaWUodCxuLGUpLGg9dSh0cih0LmMsZSksMTEyKSxkPXUodHIodC5jLG4pLDExMiksczxvP25ldyBpMigoVWYoKSxLeSksaCxkLG8tcyk6bzxzP25ldyBpMigoVWYoKSxLeSksZCxoLHMtbyk6KHMhPTB8fCEoIWUuaXx8IW4uaSkmJnJbZS5pLmNdW24uaS5jXSkmJihuZXcgaTIoKFVmKCksS3kpLGgsZCwwKSxuZXcgaTIoS3ksZCxoLDApKX1mdW5jdGlvbiBWY2UodCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iocz0wLGg9bmV3IFMoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMTApLHMrPW8uby5iK28uZC5hK28uZC5kK3QuZSxyPW5ldyBhcihscihqbyhvKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KE1yKHIpLDE3KSxuLmMuaS5rPT0oVm4oKSxIYykmJih2PW4uYy5pLGQ9dShRKHYsKGFlKCksX2kpKSwxMCkscys9ZC5vLmIrZC5kLmErZC5kLmQpO3JldHVybiBzfWZ1bmN0aW9uIEdjZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGs7Zm9yKG89bmV3IGhlLGs9bmV3IFppLGg9bmV3IFppLEt5bih0LGssaCxlKSxzNW4odCxrLGgsZSxuKSx2PW5ldyBTKHQpO3YuYTx2LmMuYy5sZW5ndGg7KWZvcihkPXUoSih2KSwxMTIpLHM9bmV3IFMoZC5rKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMjkpLCghZXx8ci5jPT0oVWYoKSxtYikpJiZkLmc+ci5iLmcmJihvLmNbby5jLmxlbmd0aF09cik7cmV0dXJuIG99ZnVuY3Rpb24gQUUoKXtBRT1aLGk1PW5ldyBETSgiQ0FORElEQVRFX1BPU0lUSU9OX0xBU1RfUExBQ0VEX1JJR0hUIiwwKSxHNj1uZXcgRE0oIkNBTkRJREFURV9QT1NJVElPTl9MQVNUX1BMQUNFRF9CRUxPVyIsMSksR1M9bmV3IERNKCJDQU5ESURBVEVfUE9TSVRJT05fV0hPTEVfRFJBV0lOR19SSUdIVCIsMiksVlM9bmV3IERNKCJDQU5ESURBVEVfUE9TSVRJT05fV0hPTEVfRFJBV0lOR19CRUxPVyIsMyksVVM9bmV3IERNKCJXSE9MRV9EUkFXSU5HIiw0KX1mdW5jdGlvbiBvd24odCxlKXtpZihfdChlLDIzOSkpcmV0dXJuIEJsbih0LHUoZSwzMykpO2lmKF90KGUsMTg2KSlyZXR1cm4gWGxuKHQsdShlLDExOCkpO2lmKF90KGUsMzU0KSlyZXR1cm4gdXJuKHQsdShlLDEzNykpO2lmKF90KGUsMzUyKSlyZXR1cm4gT3luKHQsdShlLDc5KSk7aWYoZSlyZXR1cm4gbnVsbDt0aHJvdyBpdChuZXcgRm4oTDh0K2ViKG5ldyB5bChsdChjdChRbiwxKSxEZSwxLDUsW2VdKSkpKSl9ZnVuY3Rpb24gY3duKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihvPW5ldyBaaSxzPW5ldyBTKHQuZC5hKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxMjEpLHIuYi5hLmMubGVuZ3RoPT0wJiZmcyhvLHIsby5jLmIsby5jKTtpZihvLmI+MSlmb3IoZT1Gdygobj1uZXcgWGIsKyt0LmIsbiksdC5kKSxkPWVpKG8sMCk7ZC5iIT1kLmQuYzspaD11KHRpKGQpLDEyMSkseWYobGYodWYoaGYoY2YobmV3IENoLDEpLDApLGUpLGgpKX1mdW5jdGlvbiBJNXQodCxlKXt2YXIgbixyO2lmKGUhPXQuQ2J8fHQuRGI+PjE2IT0xMSYmZSl7aWYodkUodCxlKSl0aHJvdyBpdChuZXcgRm4oUV8rWDV0KHQpKSk7cj1udWxsLHQuQ2ImJihyPShuPXQuRGI+PjE2LG4+PTA/YzR0KHQscik6dC5DYi5paCh0LC0xLW4sbnVsbCxyKSkpLGUmJihyPWM2KGUsdCwxMCxyKSkscj1sd3QodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsMTEsZSxlKSl9ZnVuY3Rpb24gdXduKHQpe3ZhciBlLG4scixzO2ZvcihyPW5ldyBwMihuZXcgQ2codC5iKS5hKTtyLmI7KW49Wncocikscz11KG4uY2QoKSwxMSksZT11KG4uZGQoKSwxMCksSnQoZSwoYWUoKSxfaSkscyksSnQocyxKdSxlKSxKdChzLFNPLChObigpLCEwKSksQnMocyx1KFEoZSxvYyksNjEpKSxRKGUsb2MpLEp0KHMuaSwoVGUoKSxjcyksKHVhKCksQjcpKSx1KFEoTmEocy5pKSxWYyksMjEpLkZjKChvbygpLHk3KSl9ZnVuY3Rpb24gbHduKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7aWYobz0wLGg9MCx0LmMpZm9yKHY9bmV3IFModC5kLmkuaik7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTEpLG8rPWQuZS5jLmxlbmd0aDtlbHNlIG89MTtpZih0LmQpZm9yKHY9bmV3IFModC5jLmkuaik7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTEpLGgrPWQuZy5jLmxlbmd0aDtlbHNlIGg9MTtyZXR1cm4gcz1wcyhKTShoLW8pKSxyPShuK2UpLzIrKG4tZSkqKC40KnMpLHJ9ZnVuY3Rpb24gaHduKHQpe2I0KCk7dmFyIGUsbjtpZih0LkhjKCh2ZSgpLFpvKSkpdGhyb3cgaXQobmV3IEZuKCJQb3J0IHNpZGVzIG11c3Qgbm90IGNvbnRhaW4gVU5ERUZJTkVEIikpO3N3aXRjaCh0LmdjKCkpe2Nhc2UgMTpyZXR1cm4gJFY7Y2FzZSAyOnJldHVybiBlPXQuSGMoSG4pJiZ0LkhjKEJuKSxuPXQuSGMoUG4pJiZ0LkhjKG1yKSxlfHxuP0hWOnFWO2Nhc2UgMzpyZXR1cm4gelY7Y2FzZSA0OnJldHVybiBqVjtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBmd24odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKHZyKG4sIkJyZWFraW5nIFBvaW50IFJlbW92aW5nIiwxKSx0LmE9dShRKGUsKFRlKCksZWcpKSwyMTgpLG89bmV3IFMoZS5iKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMjkpLGQ9bmV3IFMoV3cocy5hKSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTApLHllZShoKSYmKHI9dShRKGgsKGFlKCksSXYpKSwzMDUpLCFyLmQmJnFoZSh0LHIpKTtvcihuKX1mdW5jdGlvbiBjYXQodCxlLG4pe3JldHVybiBrNCgpLFE4KHQsZSkmJlE4KHQsbik/ITE6amF0KG5ldyAkZSh0LmMsdC5kKSxuZXcgJGUodC5jK3QuYix0LmQpLGUsbil8fGphdChuZXcgJGUodC5jK3QuYix0LmQpLG5ldyAkZSh0LmMrdC5iLHQuZCt0LmEpLGUsbil8fGphdChuZXcgJGUodC5jK3QuYix0LmQrdC5hKSxuZXcgJGUodC5jLHQuZCt0LmEpLGUsbil8fGphdChuZXcgJGUodC5jLHQuZCt0LmEpLG5ldyAkZSh0LmMsdC5kKSxlLG4pfWZ1bmN0aW9uIE81dCh0LGUpe3ZhciBuLHIscyxvO2lmKCF0LmRjKCkpe2ZvcihuPTAscj10LmdjKCk7bjxyOysrbilpZihvPUJyKHQuWGIobikpLG89PW51bGw/ZT09bnVsbDpobihvLnN1YnN0cigwLDMpLCIhIyMiKT9lIT1udWxsJiYocz1lLmxlbmd0aCwhaG4oby5zdWJzdHIoby5sZW5ndGgtcyxzKSxlKXx8by5sZW5ndGghPWUubGVuZ3RoKzMpJiYhaG4oTzIsZSk6aG4obyxwdXQpJiYhaG4oTzIsZSl8fGhuKG8sZSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gZHduKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsaztmb3IoaD10LmouYy5sZW5ndGgsdj1OdChzNm4sZTZ0LDMwNixoLDAsMSksZD0wO2Q8aDtkKyspbz11KE5lKHQuaixkKSwxMSksby5wPWQsdltkXT1tYm4oYmNlKG8pLG4scik7Zm9yKEJ3bih0LHYsbixlLHIpLGs9bmV3IF9yLHM9MDtzPHYubGVuZ3RoO3MrKyl2W3NdJiZraShrLHUoTmUodC5qLHMpLDExKSx2W3NdKTtrLmYuYytrLmcuYyE9MCYmKEp0KHQsKGFlKCksa1MpLGspLHpnbih0LHYpKX1mdW5jdGlvbiBnd24odCxlLG4pe3ZhciByLHMsbztmb3Iocz1uZXcgUyh0LmEuYik7cy5hPHMuYy5jLmxlbmd0aDspaWYocj11KEoocyksNTcpLG89dDQociksbyYmby5rPT0oVm4oKSxrcykpc3dpdGNoKHUoUShvLChhZSgpLG9jKSksNjEpLmcpe2Nhc2UgNDpvLm4uYT1lLmE7YnJlYWs7Y2FzZSAyOm8ubi5hPW4uYS0oby5vLmErby5kLmMpO2JyZWFrO2Nhc2UgMTpvLm4uYj1lLmI7YnJlYWs7Y2FzZSAzOm8ubi5iPW4uYi0oby5vLmIrby5kLmEpfX1mdW5jdGlvbiB5NCgpe3k0PVosa0c9bmV3IEl4KEowLDApLEZPPW5ldyBJeCgiTklLT0xPViIsMSksTk89bmV3IEl4KCJOSUtPTE9WX1BJWEVMIiwyKSxSOXQ9bmV3IEl4KCJOSUtPTE9WX0lNUFJPVkVEIiwzKSxqOXQ9bmV3IEl4KCJOSUtPTE9WX0lNUFJPVkVEX1BJWEVMIiw0KSxCOXQ9bmV3IEl4KCJEVU1NWU5PREVfUEVSQ0VOVEFHRSIsNSksJDl0PW5ldyBJeCgiTk9ERUNPVU5UX1BFUkNFTlRBR0UiLDYpLEVHPW5ldyBJeCgiTk9fQk9VTkRBUlkiLDcpfWZ1bmN0aW9uIHB3bih0LGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gcz11KHFlKGUsKGZxKCksRlN0KSksMTkpLCFzJiYocz1wZSgwKSksbz11KHFlKG4sRlN0KSwxOSksIW8mJihvPXBlKDApKSxzLmE+by5hPy0xOnMuYTxvLmE/MTp0LmEmJihyPU1zKGUuaixuLmopLHIhPTB8fChyPU1zKGUuaSxuLmkpLHIhPTApKT9yOihoPWUuZyplLmYsZD1uLmcqbi5mLE1zKGgsZCkpfWZ1bmN0aW9uIGJ3bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2lmKCsrdC5lLHY9dC5kPT1udWxsPzA6dC5kLmxlbmd0aCxlPnYpe2ZvcihDPXQuZCx0LmQ9TnQoWEF0LFI4dCw2MywyKnYrNCwwLDEpLG89MDtvPHY7KytvKWlmKGs9Q1tvXSxrKWZvcihyPWsuZyxNPWsuaSxkPTA7ZDxNOysrZClzPXUocltkXSwxMzMpLGg9cnd0KHQscy5TaCgpKSxuPXQuZFtoXSwhbiYmKG49dC5kW2hdPXQudWooKSksbi5GYyhzKTtyZXR1cm4hMH1lbHNlIHJldHVybiExfWZ1bmN0aW9uIHd3bih0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKHM9bixvPXMuYWsoKSxYMCh0LmUsbykpe2lmKG8uaGkoKSl7Zm9yKHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKGQ9cltoXSx5aShkLHMpJiZoIT1lKXRocm93IGl0KG5ldyBGbihlTykpfX1lbHNlIGZvcih2PW91KHQuZS5UZygpLG8pLHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKGQ9cltoXSx2LnJsKGQuYWsoKSkpdGhyb3cgaXQobmV3IEZuKGFPKSk7bl8odCxlLG4pfWZ1bmN0aW9uIFVjZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iobj11KFEoZSwoYWUoKSxCeSkpLDIxKSxoPXUoQWkoKHFhdCgpLFBpKSxuKSwyMSksZD11KEFpKFFyLG4pLDIxKSxvPWguS2MoKTtvLk9iKCk7KWlmKHI9dShvLlBiKCksMjEpLCF1KEFpKHQuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtmb3Iocz1kLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDIxKSwhdShBaSh0LmIsciksMTUpLmRjKCkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdnduKHQsZSl7dmFyIG4scixzLG8saCxkO2Zvcih2cihlLCJQYXJ0aXRpb24gcG9zdHByb2Nlc3NpbmciLDEpLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KEoociksMjkpLG89bmV3IFMobi5hKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMTApLGQ9bmV3IFMocy5qKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMSksamUoUmUoUShoLChhZSgpLG5HKSkpKSYmTDkoZCk7b3IoZSl9ZnVuY3Rpb24gV2NlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2lmKHQuYS5jLmxlbmd0aD09MSlyZXR1cm4gUWFlKHUoTmUodC5hLDApLDE4NyksZSk7Zm9yKGg9eGxuKHQpLHY9MCxrPXQuZCxvPWgsQz10LmQsZD0oay1vKS8yK287bysxPGs7KXtmb3Iodj0wLHI9bmV3IFModC5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxODcpLHYrPShzPV9fKG4sZCwhMSkscy5hKTt2PGU/KEM9ZCxrPWQpOm89ZCxkPShrLW8pLzIrb31yZXR1cm4gQ31mdW5jdGlvbiBtd24odCl7dmFyIGUsbixyLHMsbztyZXR1cm4gaXNOYU4odCk/KHE4KCksb0V0KTp0PC05MjIzMzcyMDM2ODU0Nzc2ZTM/KHE4KCksUmdlKTp0Pj05MjIzMzcyMDM2ODU0Nzc2ZTM/KHE4KCksc0V0KToocz0hMSx0PDAmJihzPSEwLHQ9LXQpLHI9MCx0Pj1DMiYmKHI9cHModC9DMiksdC09cipDMiksbj0wLHQ+PW02JiYobj1wcyh0L202KSx0LT1uKm02KSxlPXBzKHQpLG89aXUoZSxuLHIpLHMmJkFpdChvKSxvKX1mdW5jdGlvbiB5d24odCxlKXt2YXIgbixyLHMsbztmb3Iobj0hZXx8IXQudS5IYygoWnUoKSxzZykpLG89MCxzPW5ldyBTKHQuZS5DZigpKTtzLmE8cy5jLmMubGVuZ3RoOyl7aWYocj11KEoocyksODM4KSxyLkhmKCk9PSh2ZSgpLFpvKSl0aHJvdyBpdChuZXcgRm4oIkxhYmVsIGFuZCBub2RlIHNpemUgY2FsY3VsYXRvciBjYW4gb25seSBiZSB1c2VkIHdpdGggcG9ydHMgdGhhdCBoYXZlIHBvcnQgc2lkZXMgYXNzaWduZWQuIikpO3IudmYobysrKSx2bG4odCxyLG4pfX1mdW5jdGlvbiB4d24odCxlKXt2YXIgbixyLHMsbyxoO3JldHVybiBzPWUuSGgodC5hKSxzJiYocj0oIXMuYiYmKHMuYj1uZXcga2woKGRuKCksUWEpLGNjLHMpKSxzLmIpLG49QnIoWGYocixBYSkpLG4hPW51bGwmJihvPW4ubGFzdEluZGV4T2YoIiMiKSxoPW89PS0xP1cydCh0LGUuQWooKSxuKTpvPT0wP3lEKHQsbnVsbCxuLnN1YnN0cigxKSk6eUQodCxuLnN1YnN0cigwLG8pLG4uc3Vic3RyKG8rMSkpLF90KGgsMTQ4KSkpP3UoaCwxNDgpOm51bGx9ZnVuY3Rpb24ga3duKHQsZSl7dmFyIG4scixzLG8saDtyZXR1cm4gcj1lLkhoKHQuYSksciYmKG49KCFyLmImJihyLmI9bmV3IGtsKChkbigpLFFhKSxjYyxyKSksci5iKSxvPUJyKFhmKG4sZ3V0KSksbyE9bnVsbCYmKHM9by5sYXN0SW5kZXhPZigiIyIpLGg9cz09LTE/VzJ0KHQsZS5BaigpLG8pOnM9PTA/eUQodCxudWxsLG8uc3Vic3RyKDEpKTp5RCh0LG8uc3Vic3RyKDAscyksby5zdWJzdHIocysxKSksX3QoaCwxNDgpKSk/dShoLDE0OCk6bnVsbH1mdW5jdGlvbiBQNXQodCl7dmFyIGUsbixyLHMsbztmb3Iobj1uZXcgUyh0LmEuYSk7bi5hPG4uYy5jLmxlbmd0aDspe2ZvcihlPXUoSihuKSwzMDcpLGUuaj1udWxsLG89ZS5hLmEuZWMoKS5LYygpO28uT2IoKTspcj11KG8uUGIoKSw1NyksR2Yoci5iKSwoIWUuanx8ci5kLmM8ZS5qLmQuYykmJihlLmo9cik7Zm9yKHM9ZS5hLmEuZWMoKS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw1Nyksci5iLmE9ci5kLmMtZS5qLmQuYyxyLmIuYj1yLmQuZC1lLmouZC5kfXJldHVybiB0fWZ1bmN0aW9uIHlxKHQpe3ZhciBlLG4scixzLG87Zm9yKG49bmV3IFModC5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IoZT11KEoobiksMTg5KSxlLmY9bnVsbCxvPWUuYS5hLmVjKCkuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksODEpLEdmKHIuZSksKCFlLmZ8fHIuZy5jPGUuZi5nLmMpJiYoZS5mPXIpO2ZvcihzPWUuYS5hLmVjKCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksODEpLHIuZS5hPXIuZy5jLWUuZi5nLmMsci5lLmI9ci5nLmQtZS5mLmcuZH1yZXR1cm4gdH1mdW5jdGlvbiBFd24odCl7dmFyIGUsbixyO3JldHVybiBuPXUodC5hLDE5KS5hLHI9dSh0LmIsMTkpLmEsZT1iLk1hdGgubWF4KGIuTWF0aC5hYnMobiksYi5NYXRoLmFicyhyKSksbjxlJiZyPT0tZT9uZXcgZmEocGUobisxKSxwZShyKSk6bj09ZSYmcjxlP25ldyBmYShwZShuKSxwZShyKzEpKTpuPj0tZSYmcj09ZT9uZXcgZmEocGUobi0xKSxwZShyKSk6bmV3IGZhKHBlKG4pLHBlKHItMSkpfWZ1bmN0aW9uIFljZSgpe3JldHVybiBybygpLGx0KGN0KGw2biwxKSxvZSw3NywwLFtKN3QsWDd0LGdTLGdsdCx2VHQsQ1YsRlYsaDcsYlR0LG9UdCxnVHQsbDcsd1R0LGlUdCxtVHQsVjd0LExWLHBsdCxFVixJVix4VHQsRFYsRzd0LHBUdCxrVHQsT1YseVR0LFRWLGVUdCxmVHQsaFR0LE5WLFk3dCxrVixTVixXN3QsdTcsdVR0LHNUdCxkVHQscFMsUTd0LEs3dCxsVHQsYVR0LEFWLFBWLFU3dCxNVixjVHQsX1YsblR0LHRUdCx4Tyx4VixyVHQsWjd0XSl9ZnVuY3Rpb24gVHduKHQsZSxuKXt0LmQ9MCx0LmI9MCxlLms9PShWbigpLEhjKSYmbi5rPT1IYyYmdShRKGUsKGFlKCksX2kpKSwxMCk9PXUoUShuLF9pKSwxMCkmJihlaXQoZSkuaj09KHZlKCksUG4pP09jZSh0LGUsbik6T2NlKHQsbixlKSksZS5rPT1IYyYmbi5rPT10YT9laXQoZSkuaj09KHZlKCksUG4pP3QuZD0xOnQuYj0xOm4uaz09SGMmJmUuaz09dGEmJihlaXQobikuaj09KHZlKCksUG4pP3QuYj0xOnQuZD0xKSxoMW4odCxlLG4pfWZ1bmN0aW9uIEN3bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNO3JldHVybiBNPUQ0dCh0KSxlPXQuYSx2PWUhPW51bGwsdiYmRTgoTSwiY2F0ZWdvcnkiLHQuYSkscz13TShuZXcgU20odC5kKSksaD0hcyxoJiYoaz1uZXcgRWcsWWYoTSwia25vd25PcHRpb25zIixrKSxuPW5ldyBOenQoayksdmEobmV3IFNtKHQuZCksbikpLG89d00odC5nKSxkPSFvLGQmJihDPW5ldyBFZyxZZihNLCJzdXBwb3J0ZWRGZWF0dXJlcyIsQykscj1uZXcgQnp0KEMpLHZhKHQuZyxyKSksTX1mdW5jdGlvbiBfd24odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrO2ZvcihyPSExLGU9MzM2LG49MCxvPW5ldyBYV3QodC5sZW5ndGgpLGQ9dCx2PTAsaz1kLmxlbmd0aDt2PGs7Kyt2KWg9ZFt2XSxyPXJ8KHcyKGgpLCExKSxzPShWcChoKSxoLmEpLGxlKG8uYSxMcihzKSksZSY9cy5xZCgpLG49ZWxuKG4scy5yZCgpKTtyZXR1cm4gdSh1KG5YdChuZXcgVG4obnVsbCx6c3QobmV3IF9uKChXbSgpLEUzdChvLmEpKSwxNiksbmV3IFgsZSxuKSksbmV3IFN0dCh0KSksNjcwKSw4MzMpfWZ1bmN0aW9uIFN3bih0LGUpe3ZhciBuO3QuZCYmKGUuYyE9dC5lLmN8fEJjbih0LmUuYixlLmIpKSYmKGxlKHQuZix0LmQpLHQuYT10LmQuYyt0LmQuYix0LmQ9bnVsbCx0LmU9bnVsbCksVVhlKGUuYik/dC5jPWU6dC5iPWUsKGUuYj09KG5FKCksTHYpJiYhZS5hfHxlLmI9PVB5JiZlLmF8fGUuYj09ejQmJmUuYXx8ZS5iPT1GeSYmIWUuYSkmJnQuYyYmdC5iJiYobj1uZXcgYWgodC5hLHQuYy5kLGUuYy10LmEsdC5iLmQtdC5jLmQpLHQuZD1uLHQuZT1lKX1mdW5jdGlvbiB2SSh0KXt2YXIgZTtpZihZcXQuY2FsbCh0aGlzKSx0aGlzLmk9bmV3IEFaLHRoaXMuZz10LHRoaXMuZj11KHQuZSYmdC5lKCksOSkubGVuZ3RoLHRoaXMuZj09MCl0aHJvdyBpdChuZXcgRm4oIlRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIHBoYXNlIGluIHRoZSBwaGFzZSBlbnVtZXJhdGlvbi4iKSk7dGhpcy5jPShlPXUoVmYodGhpcy5nKSw5KSxuZXcgc2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSx0aGlzLmE9bmV3IFZzLHRoaXMuYj1uZXcgX3J9ZnVuY3Rpb24gRjV0KHQsZSl7dmFyIG4scjtpZihlIT10LkNifHx0LkRiPj4xNiE9NyYmZSl7aWYodkUodCxlKSl0aHJvdyBpdChuZXcgRm4oUV8rZW9lKHQpKSk7cj1udWxsLHQuQ2ImJihyPShuPXQuRGI+PjE2LG4+PTA/aTR0KHQscik6dC5DYi5paCh0LC0xLW4sbnVsbCxyKSkpLGUmJihyPXUoZSw0OSkuZ2godCwxLGxQLHIpKSxyPW52dCh0LGUsciksciYmci5GaSgpfWVsc2UgdC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsMSw3LGUsZSkpfWZ1bmN0aW9uIEtjZSh0LGUpe3ZhciBuLHI7aWYoZSE9dC5DYnx8dC5EYj4+MTYhPTMmJmUpe2lmKHZFKHQsZSkpdGhyb3cgaXQobmV3IEZuKFFfK2xpZSh0KSkpO3I9bnVsbCx0LkNiJiYocj0obj10LkRiPj4xNixuPj0wP2E0dCh0LHIpOnQuQ2IuaWgodCwtMS1uLG51bGwscikpKSxlJiYocj11KGUsNDkpLmdoKHQsMCxmUCxyKSkscj1ydnQodCxlLHIpLHImJnIuRmkoKX1lbHNlIHQuRGImNCYmISh0LkRiJjEpJiZtaSh0LG5ldyBKcyh0LDEsMyxlLGUpKX1mdW5jdGlvbiB1YXQodCxlKXtURSgpO3ZhciBuLHIscyxvLGgsZCx2LGssQztyZXR1cm4gZS5kPnQuZCYmKGQ9dCx0PWUsZT1kKSxlLmQ8NjM/YnZuKHQsZSk6KGg9KHQuZCYtMik8PDQsaz1ibXQodCxoKSxDPWJtdChlLGgpLHI9Q2F0KHQsUXgoayxoKSkscz1DYXQoZSxReChDLGgpKSx2PXVhdChrLEMpLG49dWF0KHIscyksbz11YXQoQ2F0KGssciksQ2F0KHMsQykpLG89T2F0KE9hdChvLHYpLG4pLG89UXgobyxoKSx2PVF4KHYsaDw8MSksT2F0KE9hdCh2LG8pLG4pKX1mdW5jdGlvbiBBd24odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKGg9dF8odCxuKSxkPU50KGwwLFlnLDEwLGUubGVuZ3RoLDAsMSkscj0wLG89aC5LYygpO28uT2IoKTspcz11KG8uUGIoKSwxMSksamUoUmUoUShzLChhZSgpLFNPKSkpKSYmKGRbcisrXT11KFEocyxKdSksMTApKTtpZihyPGUubGVuZ3RoKXRocm93IGl0KG5ldyBObygiRXhwZWN0ZWQgIitlLmxlbmd0aCsiIGhpZXJhcmNoaWNhbCBwb3J0cywgYnV0IGZvdW5kIG9ubHkgIityKyIuIikpO3JldHVybiBkfWZ1bmN0aW9uIEx3bih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZighdC50Yil7Zm9yKG89KCF0LnJiJiYodC5yYj1uZXcgR20odCxzMSx0KSksdC5yYiksZD1uZXcgTHgoby5pKSxzPW5ldyBucihvKTtzLmUhPXMuaS5nYygpOylyPXUoZHIocyksMTM4KSxoPXIubmUoKSxuPXUoaD09bnVsbD9hdShkLmYsbnVsbCxyKTpzdihkLmcsaCxyKSwxMzgpLG4mJihoPT1udWxsP2F1KGQuZixudWxsLG4pOnN2KGQuZyxoLG4pKTt0LnRiPWR9cmV0dXJuIHUoTmModC50YixlKSwxMzgpfWZ1bmN0aW9uIG1JKHQsZSl7dmFyIG4scixzLG8saDtpZigodC5pPT1udWxsJiZ2ZCh0KSx0LmkpLmxlbmd0aCwhdC5wKXtmb3IoaD1uZXcgTHgoKDMqdC5nLmkvMnwwKSsxKSxzPW5ldyBCeCh0LmcpO3MuZSE9cy5pLmdjKCk7KXI9dShkc3QocyksMTcwKSxvPXIubmUoKSxuPXUobz09bnVsbD9hdShoLmYsbnVsbCxyKTpzdihoLmcsbyxyKSwxNzApLG4mJihvPT1udWxsP2F1KGguZixudWxsLG4pOnN2KGguZyxvLG4pKTt0LnA9aH1yZXR1cm4gdShOYyh0LnAsZSksMTcwKX1mdW5jdGlvbiBONXQodCxlLG4scixzKXt2YXIgbyxoLGQsdixrO2ZvcihmZm4ocittcnQobixuLiRkKCkpLHMpLHZYdChlLFJobihuKSksbz1uLmYsbyYmTjV0KHQsZSxvLCJDYXVzZWQgYnk6ICIsITEpLGQ9KG4uaz09bnVsbCYmKG4uaz1OdChEdXQsZWUsNzgsMCwwLDEpKSxuLmspLHY9MCxrPWQubGVuZ3RoO3Y8azsrK3YpaD1kW3ZdLE41dCh0LGUsaCwiU3VwcHJlc3NlZDogIiwhMSk7Y29uc29sZS5ncm91cEVuZCE9bnVsbCYmY29uc29sZS5ncm91cEVuZC5jYWxsKGNvbnNvbGUpfWZ1bmN0aW9uIHlJKHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7Zm9yKHY9ZS5lLGQ9di5sZW5ndGgsaD1lLnEuX2YodixuPzA6ZC0xLG4pLHM9dltuPzA6ZC0xXSxoPWh8UHVlKHQscyxuLHIpLG89bj8xOmQtMjtuP288ZDpvPj0wO28rPW4/MTotMSloPWh8ZS5jLlNmKHYsbyxuLHImJiFqZShSZShRKGUuaiwoYWUoKSxPdikpKSkmJiFqZShSZShRKGUuaiwoYWUoKSxYNCkpKSkpLGg9aHxlLnEuX2YodixvLG4pLGg9aHxQdWUodCx2W29dLG4scik7cmV0dXJuIEZzKHQuYyxlKSxofWZ1bmN0aW9uIHhxKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtmb3IoQz1PWnQodC5qKSxNPTAsaj1DLmxlbmd0aDtNPGo7KytNKXtpZihrPUNbTV0sbj09KHNvKCksdGwpfHxuPT1PUylmb3Iodj13ZChrLmcpLHM9dixvPTAsaD1zLmxlbmd0aDtvPGg7KytvKXI9c1tvXSwkZ24oZSxyKSYmYnYociwhMCk7aWYobj09bnV8fG49PU9TKWZvcihkPXdkKGsuZSkscz1kLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLGpnbihlLHIpJiZidihyLCEwKX19ZnVuY3Rpb24gTXduKHQpe3ZhciBlLG47c3dpdGNoKGU9bnVsbCxuPW51bGwsSmRuKHQpLmcpe2Nhc2UgMTplPSh2ZSgpLEhuKSxuPUJuO2JyZWFrO2Nhc2UgMjplPSh2ZSgpLG1yKSxuPVBuO2JyZWFrO2Nhc2UgMzplPSh2ZSgpLEJuKSxuPUhuO2JyZWFrO2Nhc2UgNDplPSh2ZSgpLFBuKSxuPW1yfXNSKHQsdShOdyh0JCh1KEFpKHQuayxlKSwxNSkuT2MoKSxINCkpLDExMykpLGlSKHQsdShOdyhKaih1KEFpKHQuayxuKSwxNSkuT2MoKSxINCkpLDExMykpfWZ1bmN0aW9uIER3bih0KXt2YXIgZSxuLHIscyxvLGg7aWYocz11KE5lKHQuaiwwKSwxMSkscy5lLmMubGVuZ3RoK3MuZy5jLmxlbmd0aD09MCl0Lm4uYT0wO2Vsc2V7Zm9yKGg9MCxyPXpwKEQxKGx0KGN0KGoxLDEpLERlLDIwLDAsW25ldyBRcyhzKSxuZXcgVHIocyldKSkpO3pyKHIpOyluPXUoTXIociksMTEpLGgrPW4uaS5uLmErbi5uLmErbi5hLmE7ZT11KFEodCwoVGUoKSxSdikpLDgpLG89ZT9lLmE6MCx0Lm4uYT1oLyhzLmUuYy5sZW5ndGgrcy5nLmMubGVuZ3RoKS1vfX1mdW5jdGlvbiBYY2UodCxlKXt2YXIgbixyLHM7Zm9yKHI9bmV3IFMoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMjEpLHFudCh1KG4uYiw2NSksaWEobmModShlLmIsNjUpLmMpLHUoZS5iLDY1KS5hKSkscz1kbGUodShlLmIsNjUpLmIsdShuLmIsNjUpLmIpLHM+MSYmKHQuYT0hMCksVmVuKHUobi5iLDY1KSxMaShuYyh1KGUuYiw2NSkuYyksZmQoaWEobmModShuLmIsNjUpLmEpLHUoZS5iLDY1KS5hKSxzKSkpLFdRdCh0LGUpLFhjZSh0LG4pfWZ1bmN0aW9uIFFjZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobz1uZXcgUyh0LmEuYSk7by5hPG8uYy5jLmxlbmd0aDspcj11KEoobyksMTg5KSxyLmU9MCxyLmQuYS4kYigpO2ZvcihzPW5ldyBTKHQuYS5hKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMTg5KSxuPXIuYS5hLmVjKCkuS2MoKTtuLk9iKCk7KWZvcihlPXUobi5QYigpLDgxKSxkPWUuZi5LYygpO2QuT2IoKTspaD11KGQuUGIoKSw4MSksaC5kIT1yJiYoRnMoci5kLGgpLCsraC5kLmUpfWZ1bmN0aW9uIEl3bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2Zvcih2PXQuai5jLmxlbmd0aCxuPTAsZT12LHM9Mip2LGQ9bmV3IFModC5qKTtkLmE8ZC5jLmMubGVuZ3RoOylzd2l0Y2goaD11KEooZCksMTEpLGguai5nKXtjYXNlIDI6Y2FzZSA0OmgucD0tMTticmVhaztjYXNlIDE6Y2FzZSAzOnI9aC5lLmMubGVuZ3RoLG89aC5nLmMubGVuZ3RoLHI+MCYmbz4wP2gucD1lKys6cj4wP2gucD1uKys6bz4wP2gucD1zKys6aC5wPW4rK313bigpLFpzKHQuaixuZXcgREwpfWZ1bmN0aW9uIE93bih0KXt2YXIgZSxuO249bnVsbCxlPXUoTmUodC5nLDApLDE3KTtkb3tpZihuPWUuZC5pLFVzKG4sKGFlKCksJGgpKSlyZXR1cm4gdShRKG4sJGgpLDExKS5pO2lmKG4uayE9KFZuKCksT3MpJiZ6cihuZXcgYXIobHIoRHMobikuYS5LYygpLG5ldyB6KSkpKWU9dShNcihuZXcgYXIobHIoRHMobikuYS5LYygpLG5ldyB6KSkpLDE3KTtlbHNlIGlmKG4uayE9T3MpcmV0dXJuIG51bGx9d2hpbGUobiYmbi5rIT0oVm4oKSxPcykpO3JldHVybiBufWZ1bmN0aW9uIFB3bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3IoZD1lLmosaD1lLmcsdj11KE5lKGQsZC5jLmxlbmd0aC0xKSwxMTMpLEM9KEFuKDAsZC5jLmxlbmd0aCksdShkLmNbMF0sMTEzKSksaz1Bc3QodCxoLHYsQyksbz0xO288ZC5jLmxlbmd0aDtvKyspbj0oQW4oby0xLGQuYy5sZW5ndGgpLHUoZC5jW28tMV0sMTEzKSkscz0oQW4obyxkLmMubGVuZ3RoKSx1KGQuY1tvXSwxMTMpKSxyPUFzdCh0LGgsbixzKSxyPmsmJih2PW4sQz1zLGs9cik7ZS5hPUMsZS5jPXZ9ZnVuY3Rpb24gRnduKHQsZSl7dmFyIG4scjtpZihyPXREKHQuYixlLmIpLCFyKXRocm93IGl0KG5ldyBObygiSW52YWxpZCBoaXRib3hlcyBmb3Igc2NhbmxpbmUgY29uc3RyYWludCBjYWxjdWxhdGlvbi4iKSk7KGlyZShlLmIsdShGWmUodC5iLGUuYiksNTcpKXx8aXJlKGUuYix1KFBaZSh0LmIsZS5iKSw1NykpKSYmKEdkKCksZS5iKyIiKSx0LmFbZS5iLmZdPXUoQ250KHQuYixlLmIpLDU3KSxuPXUoVG50KHQuYixlLmIpLDU3KSxuJiYodC5hW24uZl09ZS5iKX1mdW5jdGlvbiB5Zih0KXtpZighdC5hLmR8fCF0LmEuZSl0aHJvdyBpdChuZXcgTm8oKFAwKGZwZSksZnBlLmsrIiBtdXN0IGhhdmUgYSBzb3VyY2UgYW5kIHRhcmdldCAiKyhQMChhN3QpLGE3dC5rKSsiIHNwZWNpZmllZC4iKSkpO2lmKHQuYS5kPT10LmEuZSl0aHJvdyBpdChuZXcgTm8oIk5ldHdvcmsgc2ltcGxleCBkb2VzIG5vdCBzdXBwb3J0IHNlbGYtbG9vcHM6ICIrdC5hKyIgIit0LmEuZCsiICIrdC5hLmUpKTtyZXR1cm4gX2oodC5hLmQuZyx0LmEpLF9qKHQuYS5lLmIsdC5hKSx0LmF9ZnVuY3Rpb24gTnduKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsaztmb3Ioaz1uZXcgT3AobmV3IEYkdCh0KSksaD1sdChjdChKYmUsMSksaDFlLDExLDAsW2Usbl0pLGQ9MCx2PWgubGVuZ3RoO2Q8djsrK2QpZm9yKG89aFtkXSxfeihrLmEsbywoTm4oKSxGMikpPT1udWxsLHM9bmV3IEwxKG8uYik7R28ocy5hKXx8R28ocy5iKTspcj11KEdvKHMuYSk/SihzLmEpOkoocy5iKSwxNyksci5jPT1yLmR8fHREKGssbz09ci5jP3IuZDpyLmMpO3JldHVybiBMcihrKSxuZXcgQnUoayl9ZnVuY3Rpb24gWmNlKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7aWYocj0wLGUuYiE9MCYmbi5iIT0wKXtvPWVpKGUsMCksaD1laShuLDApLGQ9WHQoeWUodGkobykpKSx2PVh0KHllKHRpKGgpKSkscz0hMDtkb3tpZihkPnYtdC5iJiZkPHYrdC5iKXJldHVybi0xO2Q+di10LmEmJmQ8dit0LmEmJisrcixkPD12JiZvLmIhPW8uZC5jP2Q9WHQoeWUodGkobykpKTp2PD1kJiZoLmIhPWguZC5jP3Y9WHQoeWUodGkoaCkpKTpzPSExfXdoaWxlKHMpfXJldHVybiByfWZ1bmN0aW9uIEJ3bih0LGUsbixyLHMpe3ZhciBvLGgsZCx2O2Zvcih2PShvPXUoVmYoWGEpLDkpLG5ldyBzaChvLHUoZmYobyxvLmxlbmd0aCksOSksMCkpLGQ9bmV3IFModC5qKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMSksZVtoLnBdJiYoWDVuKGgsZVtoLnBdLHIpLHZmKHYsaC5qKSk7cz8oQnN0KHQsZSwodmUoKSxIbiksMipuLHIpLEJzdCh0LGUsQm4sMipuLHIpKTooQnN0KHQsZSwodmUoKSxQbiksMipuLHIpLEJzdCh0LGUsbXIsMipuLHIpKX1mdW5jdGlvbiBSd24odCl7dmFyIGUsbixyLHMsbztpZihvPW5ldyBoZSx4dSh0LmIsbmV3IFluKG8pKSx0LmIuYz1OdChRbixEZSwxLDAsNSwxKSxvLmMubGVuZ3RoIT0wKXtmb3IoZT0oQW4oMCxvLmMubGVuZ3RoKSx1KG8uY1swXSw3OCkpLG49MSxyPW8uYy5sZW5ndGg7bjxyOysrbilzPShBbihuLG8uYy5sZW5ndGgpLHUoby5jW25dLDc4KSkscyE9ZSYmWDBuKGUscyk7aWYoX3QoZSw2MCkpdGhyb3cgaXQodShlLDYwKSk7aWYoX3QoZSwyODkpKXRocm93IGl0KHUoZSwyODkpKX19ZnVuY3Rpb24ganduKHQsZSl7dmFyIG4scixzLG87Zm9yKHQ9dD09bnVsbD9fdTooT24odCksdCksbj1uZXcgSW0sbz0wLHI9MDtyPGUubGVuZ3RoJiYocz10LmluZGV4T2YoIiVzIixvKSxzIT0tMSk7KUdyKG4sdC5zdWJzdHIobyxzLW8pKSxoYyhuLGVbcisrXSksbz1zKzI7aWYoR3Iobix0LnN1YnN0cihvKSkscjxlLmxlbmd0aCl7Zm9yKG4uYSs9IiBbIixoYyhuLGVbcisrXSk7cjxlLmxlbmd0aDspbi5hKz1ZYSxoYyhuLGVbcisrXSk7bi5hKz0iXSJ9cmV0dXJuIG4uYX1mdW5jdGlvbiAkd24odCl7dmFyIGUsbixyLHM7Zm9yKGU9MCxyPXQubGVuZ3RoLHM9ci00LG49MDtuPHM7KWU9KFJyKG4rMyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG4rMykrKFJyKG4rMix0Lmxlbmd0aCksMzEqKHQuY2hhckNvZGVBdChuKzIpKyhScihuKzEsdC5sZW5ndGgpLDMxKih0LmNoYXJDb2RlQXQobisxKSsoUnIobix0Lmxlbmd0aCksMzEqKHQuY2hhckNvZGVBdChuKSszMSplKSkpKSkpKSxlPWV8MCxuKz00O2Zvcig7bjxyOyllPWUqMzErd2EodCxuKyspO3JldHVybiBlPWV8MCxlfWZ1bmN0aW9uIHp3bih0KXt2YXIgZSxuO2ZvcihuPW5ldyBhcihscihEcyh0KS5hLktjKCksbmV3IHopKTt6cihuKTspaWYoZT11KE1yKG4pLDE3KSxlLmQuaS5rIT0oVm4oKSxMbCkpdGhyb3cgaXQobmV3IFIzKEtvdCtySSh0KSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIExBU1QsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIG91dGdvaW5nIGVkZ2UgdGhhdCAgZG9lcyBub3QgZ28gdG8gYSBMQVNUX1NFUEFSQVRFIG5vZGUuIFRoYXQgbXVzdCBub3QgaGFwcGVuLiIpKX1mdW5jdGlvbiBxd24odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqO2Zvcih2PTAsQz1uZXcgUyh0LmEpO0MuYTxDLmMuYy5sZW5ndGg7KXtmb3Ioaz11KEooQyksMTApLGQ9MCxvPW5ldyBhcihscihqbyhrKS5hLktjKCksbmV3IHopKTt6cihvKTspcz11KE1yKG8pLDE3KSxNPV8xKHMuYykuYixqPV8xKHMuZCkuYixkPWIuTWF0aC5tYXgoZCxiLk1hdGguYWJzKGotTSkpO3Y9Yi5NYXRoLm1heCh2LGQpfXJldHVybiBoPXIqYi5NYXRoLm1pbigxLGUvbikqdixofWZ1bmN0aW9uIEI1dCh0KXt2YXIgZTtyZXR1cm4gZT1uZXcgJEMsdCYyNTYmJihlLmErPSJGIiksdCYxMjgmJihlLmErPSJIIiksdCY1MTImJihlLmErPSJYIiksdCYyJiYoZS5hKz0iaSIpLHQmOCYmKGUuYSs9Im0iKSx0JjQmJihlLmErPSJzIiksdCYzMiYmKGUuYSs9InUiKSx0JjY0JiYoZS5hKz0idyIpLHQmMTYmJihlLmErPSJ4IiksdCZ4ZiYmKGUuYSs9IiwiKSx0YnQoZS5hKX1mdW5jdGlvbiBId24odCxlKXt2YXIgbixyLHMsbztmb3IodnIoZSwiUmVzaXplIGNoaWxkIGdyYXBoIHRvIGZpdCBwYXJlbnQuIiwxKSxyPW5ldyBTKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjkpLExzKHQuYSxuLmEpLG4uYS5jPU50KFFuLERlLDEsMCw1LDEpO2ZvcihvPW5ldyBTKHQuYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTApLEVvKHMsbnVsbCk7dC5iLmM9TnQoUW4sRGUsMSwwLDUsMSksZnZuKHQpLHQuZSYmWm1uKHQuZSx0KSxvcihlKX1mdW5jdGlvbiBWd24odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrO2lmKHI9dC5iLG89ci5lLGg9angodShRKHIsKFRlKCksY3MpKSw5OCkpLG49ISFvJiZ1KFEobywoYWUoKSxWYykpLDIxKS5IYygob28oKSx2aCkpLCEoaHx8bikpZm9yKGs9KGQ9bmV3IHYxKHQuZSkuYS52YygpLktjKCksbmV3IG0xKGQpKTtrLmEuT2IoKTspdj0oZT11KGsuYS5QYigpLDQyKSx1KGUuZGQoKSwxMTMpKSx2LmEmJihzPXYuZCxVbyhzLG51bGwpLHYuYz0hMCx0LmE9ITApfWZ1bmN0aW9uIEd3bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSDtmb3Ioaj0tMSxIPTAsaz10LEM9MCxNPWsubGVuZ3RoO0M8TTsrK0Mpe2Zvcih2PWtbQ10sbz12LGg9MCxkPW8ubGVuZ3RoO2g8ZDsrK2gpZm9yKHM9b1toXSxlPW5ldyBkR3Qoaj09LTE/dFswXTp0W2pdLEpzZShzKSksbj0wO248cy5qLmMubGVuZ3RoO24rKylmb3Iocj1uKzE7cjxzLmouYy5sZW5ndGg7cisrKUdLdChlLHUoTmUocy5qLG4pLDExKSx1KE5lKHMuaixyKSwxMSkpPjAmJisrSDsrK2p9cmV0dXJuIEh9ZnVuY3Rpb24gVXduKHQsZSl7dmFyIG4scixzLG8saDtmb3IoaD11KFEoZSwoZ3YoKSxkX3QpKSw0MjUpLG89ZWkoZS5iLDApO28uYiE9by5kLmM7KWlmKHM9dSh0aShvKSw4NiksdC5iW3MuZ109PTApe3N3aXRjaChoLmcpe2Nhc2UgMDpDc2UodCxzKTticmVhaztjYXNlIDE6WWJuKHQscyl9dC5iW3MuZ109Mn1mb3Iocj1laSh0LmEsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDE4OCksYXkobi5iLmQsbiwhMCksYXkobi5jLmIsbiwhMCk7SnQoZSwoZmMoKSxhX3QpLHQuYSl9ZnVuY3Rpb24gb3UodCxlKXt0bygpO3ZhciBuLHIscyxvO3JldHVybiBlP2U9PShJaSgpLEg1ZSl8fChlPT1ENWV8fGU9PVgyfHxlPT1NNWUpJiZ0IT1FTHQ/bmV3IEF4dCh0LGUpOihyPXUoZSw2NzcpLG49ci5waygpLG58fChNOChUbygoJHUoKSx5YSksZSkpLG49ci5waygpKSxvPSghbi5pJiYobi5pPW5ldyBfciksbi5pKSxzPXUoZWMoTG8oby5mLHQpKSwxOTQyKSwhcyYma2kobyx0LHM9bmV3IEF4dCh0LGUpKSxzKTpTNWV9ZnVuY3Rpb24gV3duKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2Zvcih2PXUoUSh0LChhZSgpLF9pKSksMTEpLGs9WW8obHQoY3QoV3MsMSksZWUsOCwwLFt2Lmkubix2Lm4sdi5hXSkpLmEsQz10Lmkubi5iLG49d2QodC5lKSxzPW4sbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sb2Eocix2KSxaYihyLmEsbmV3ICRlKGssQykpLGUmJihkPXUoUShyLChUZSgpLFNvKSksNzQpLGR8fChkPW5ldyBQdSxKdChyLFNvLGQpKSxyaShkLG5ldyAkZShrLEMpKSl9ZnVuY3Rpb24gWXduKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2ZvcihzPXUoUSh0LChhZSgpLF9pKSksMTEpLGs9WW8obHQoY3QoV3MsMSksZWUsOCwwLFtzLmkubixzLm4scy5hXSkpLmEsQz10Lmkubi5iLG49d2QodC5nKSxoPW4sZD0wLHY9aC5sZW5ndGg7ZDx2OysrZClvPWhbZF0sT2EobyxzKSxzVXQoby5hLG5ldyAkZShrLEMpKSxlJiYocj11KFEobywoVGUoKSxTbykpLDc0KSxyfHwocj1uZXcgUHUsSnQobyxTbyxyKSkscmkocixuZXcgJGUoayxDKSkpfWZ1bmN0aW9uIEt3bih0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3IodC5iPW5ldyBoZSx0LmQ9dShRKGUsKGFlKCksJDYpKSwyMzApLHQuZT1zc24odC5kKSxvPW5ldyBaaSxzPUExKGx0KGN0KFhiZSwxKSx1MWUsMzcsMCxbZV0pKSxoPTA7aDxzLmMubGVuZ3RoOylyPShBbihoLHMuYy5sZW5ndGgpLHUocy5jW2hdLDM3KSksci5wPWgrKyxuPW5ldyBoaGUocix0LmEsdC5iKSxMcyhzLG4uYiksbGUodC5iLG4pLG4ucyYmKGQ9ZWkobywwKSxlRChkLG4pKTtyZXR1cm4gdC5jPW5ldyBIcyxvfWZ1bmN0aW9uIFh3bih0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3IoaD11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksMTExKSxuPW8uYz9Wd3Qoby5jKTowLG4+MD9vLmE/KGQ9by5iLnJmKCkuYSxuPmQmJihzPShuLWQpLzIsby5kLmI9cyxvLmQuYz1zKSk6by5kLmM9dC5zK246UzkodC51KSYmKHI9STR0KG8uYiksci5jPDAmJihvLmQuYj0tci5jKSxyLmMrci5iPm8uYi5yZigpLmEmJihvLmQuYz1yLmMrci5iLW8uYi5yZigpLmEpKX1mdW5jdGlvbiBRd24odCxlKXt2YXIgbixyLHMsbztmb3IodnIoZSwiU2VtaS1JbnRlcmFjdGl2ZSBDcm9zc2luZyBNaW5pbWl6YXRpb24gUHJvY2Vzc29yIiwxKSxuPSExLHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwyOSksbz1XRChleihSaShSaShuZXcgVG4obnVsbCxuZXcgX24oci5hLDE2KSksbmV3IHpUKSxuZXcgRkwpLG5ldyBDTiksbmV3IF9OKSxuPW58by5hIT1udWxsO24mJkp0KHQsKGFlKCksc0N0KSwoTm4oKSwhMCkpLG9yKGUpfWZ1bmN0aW9uIFp3bih0LGUsbil7dmFyIHIscyxvLGgsZDtpZihzPW4sIXMmJihzPW5ldyByOCksdnIocywiTGF5b3V0Iix0LmEuYy5sZW5ndGgpLGplKFJlKFEoZSwoZ3YoKSxsX3QpKSkpKWZvcihHZCgpLHI9MDtyPHQuYS5jLmxlbmd0aDtyKyspZD0ocjwxMD8iMCI6IiIpK3IrKywiIitkK0lwKG9sKHUoTmUodC5hLHIpLDUxKSkpO2ZvcihoPW5ldyBTKHQuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksNTEpLG8ucGYoZSxSYyhzLDEpKTtvcihzKX1mdW5jdGlvbiBKd24odCl7dmFyIGUsbjtpZihlPXUodC5hLDE5KS5hLG49dSh0LmIsMTkpLmEsZT49MCl7aWYoZT09bilyZXR1cm4gbmV3IGZhKHBlKC1lLTEpLHBlKC1lLTEpKTtpZihlPT0tbilyZXR1cm4gbmV3IGZhKHBlKC1lKSxwZShuKzEpKX1yZXR1cm4gYi5NYXRoLmFicyhlKT5iLk1hdGguYWJzKG4pP2U8MD9uZXcgZmEocGUoLWUpLHBlKG4pKTpuZXcgZmEocGUoLWUpLHBlKG4rMSkpOm5ldyBmYShwZShlKzEpLHBlKG4pKX1mdW5jdGlvbiB0dm4odCl7dmFyIGUsbjtuPXUoUSh0LChUZSgpLHV1KSksMTYzKSxlPXUoUSh0LChhZSgpLEIyKSksMzAzKSxuPT0oZGgoKSxiYik/KEp0KHQsdXUsTU8pLEp0KHQsQjIsKHEwKCksWTQpKSk6bj09ank/KEp0KHQsdXUsTU8pLEp0KHQsQjIsKHEwKCksRjYpKSk6ZT09KHEwKCksWTQpPyhKdCh0LHV1LGJiKSxKdCh0LEIyLENPKSk6ZT09RjYmJihKdCh0LHV1LGp5KSxKdCh0LEIyLENPKSl9ZnVuY3Rpb24ga3EoKXtrcT1aLGpPPW5ldyBqUSxabWU9YmkobmV3IFZzLChXYSgpLGN1KSwocm8oKSxFVikpLGV5ZT1LdShiaShuZXcgVnMsY3UsRFYpLElvLE1WKSxueWU9dXYodXYoVlIoS3UoYmkobmV3IFZzLERkLEZWKSxJbyxQVikscWMpLE9WKSxOViksSm1lPUt1KGJpKGJpKGJpKG5ldyBWcyxnYixDVikscWMsU1YpLHFjLHU3KSxJbyxfViksdHllPUt1KGJpKGJpKG5ldyBWcyxxYyx1NykscWMsa1YpLElvLHhWKX1mdW5jdGlvbiBtXygpe21fPVosc3llPWJpKEt1KG5ldyBWcywoV2EoKSxJbyksKHJvKCksblR0KSksY3UsRVYpLHV5ZT11dih1dihWUihLdShiaShuZXcgVnMsRGQsRlYpLElvLFBWKSxxYyksT1YpLE5WKSxheWU9S3UoYmkoYmkoYmkobmV3IFZzLGdiLENWKSxxYyxTVikscWMsdTcpLElvLF9WKSxjeWU9YmkoYmkobmV3IFZzLGN1LERWKSxJbyxNViksb3llPUt1KGJpKGJpKG5ldyBWcyxxYyx1NykscWMsa1YpLElvLHhWKX1mdW5jdGlvbiBldm4odCxlLG4scixzKXt2YXIgbyxoOyghR2EoZSkmJmUuYy5pLmM9PWUuZC5pLmN8fCFmbmUoWW8obHQoY3QoV3MsMSksZWUsOCwwLFtzLmkubixzLm4scy5hXSkpLG4pKSYmIUdhKGUpJiYoZS5jPT1zP204KGUuYSwwLG5ldyB4byhuKSk6cmkoZS5hLG5ldyB4byhuKSksciYmIUkwKHQuYSxuKSYmKGg9dShRKGUsKFRlKCksU28pKSw3NCksaHx8KGg9bmV3IFB1LEp0KGUsU28saCkpLG89bmV3IHhvKG4pLGZzKGgsbyxoLmMuYixoLmMpLEZzKHQuYSxvKSkpfWZ1bmN0aW9uIG52bih0KXt2YXIgZSxuO2ZvcihuPW5ldyBhcihscihqbyh0KS5hLktjKCksbmV3IHopKTt6cihuKTspaWYoZT11KE1yKG4pLDE3KSxlLmMuaS5rIT0oVm4oKSxMbCkpdGhyb3cgaXQobmV3IFIzKEtvdCtySSh0KSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIEZJUlNULCBidXQgaGFzIGF0IGxlYXN0IG9uZSBpbmNvbWluZyBlZGdlIHRoYXQgIGRvZXMgbm90IGNvbWUgZnJvbSBhIEZJUlNUX1NFUEFSQVRFIG5vZGUuIFRoYXQgbXVzdCBub3QgaGFwcGVuLiIpKX1mdW5jdGlvbiBydm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrO2lmKHM9YmllKHQuRGImMjU0KSxzPT0wKXQuRWI9bjtlbHNle2lmKHM9PTEpZD1OdChRbixEZSwxLDIsNSwxKSxvPVNzdCh0LGUpLG89PTA/KGRbMF09bixkWzFdPXQuRWIpOihkWzBdPXQuRWIsZFsxXT1uKTtlbHNlIGZvcihkPU50KFFuLERlLDEscysxLDUsMSksaD11Mih0LkViKSxyPTIsdj0wLGs9MDtyPD0xMjg7cjw8PTEpcj09ZT9kW2srK109bjp0LkRiJnImJihkW2srK109aFt2KytdKTt0LkViPWR9dC5EYnw9ZX1mdW5jdGlvbiBKY2UodCxlLG4pe3ZhciByLHMsbyxoO2Zvcih0aGlzLmI9bmV3IGhlLHM9MCxyPTAsaD1uZXcgUyh0KTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNjcpLG4mJm4zbihvKSxsZSh0aGlzLmIsbykscys9by5vLHIrPW8ucDt0aGlzLmIuYy5sZW5ndGg+MCYmKG89dShOZSh0aGlzLmIsMCksMTY3KSxzKz1vLm8scis9by5wKSxzKj0yLHIqPTIsZT4xP3M9cHMoYi5NYXRoLmNlaWwocyplKSk6cj1wcyhiLk1hdGguY2VpbChyL2UpKSx0aGlzLmE9bmV3IEMzdChzLHIpfWZ1bmN0aW9uIHR1ZSh0LGUsbixyLHMsbyl7dmFyIGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7Zm9yKEM9cixlLmomJmUubz8oSD11KHRyKHQuZixlLkEpLDU3KSxLPUguZC5jK0guZC5iLC0tQyk6Sz1lLmEuYytlLmEuYixNPXMsbi5xJiZuLm8/KEg9dSh0cih0LmYsbi5DKSw1Nyksaz1ILmQuYywrK00pOms9bi5hLmMsdHQ9ay1LLHY9Yi5NYXRoLm1heCgyLE0tQyksZD10dC92LEc9SytkLGo9QztqPE07KytqKWg9dShvLlhiKGopLDEyOCksZ3Q9aC5hLmIsaC5hLmM9Ry1ndC8yLEcrPWR9ZnVuY3Rpb24gUjV0KHQsZSxuLHIscyxvKXt2YXIgaCxkLHYsayxDLE07Zm9yKGs9bi5jLmxlbmd0aCxvJiYodC5jPU50KENyLFhyLDI1LGUubGVuZ3RoLDE1LDEpKSxoPXM/MDplLmxlbmd0aC0xO3M/aDxlLmxlbmd0aDpoPj0wO2grPXM/MTotMSl7Zm9yKGQ9ZVtoXSx2PXI9PSh2ZSgpLEhuKT9zP0tvKGQscik6bDIoS28oZCxyKSk6cz9sMihLbyhkLHIpKTpLbyhkLHIpLG8mJih0LmNbZC5wXT12LmdjKCkpLE09di5LYygpO00uT2IoKTspQz11KE0uUGIoKSwxMSksdC5kW0MucF09aysrO0xzKG4sdil9fWZ1bmN0aW9uIGV1ZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztmb3Iobz1YdCh5ZSh0LmIuS2MoKS5QYigpKSksaz1YdCh5ZShmdW4oZS5iKSkpLHI9ZmQobmModC5hKSxrLW4pLHM9ZmQobmMoZS5hKSxuLW8pLEM9TGkocixzKSxmZChDLDEvKGstbykpLHRoaXMuYT1DLHRoaXMuYj1uZXcgaGUsZD0hMCxoPXQuYi5LYygpLGguUGIoKTtoLk9iKCk7KXY9WHQoeWUoaC5QYigpKSksZCYmdi1uPkxjdCYmKHRoaXMuYi5GYyhuKSxkPSExKSx0aGlzLmIuRmModik7ZCYmdGhpcy5iLkZjKG4pfWZ1bmN0aW9uIGl2bih0KXt2YXIgZSxuLHIscztpZihwbW4odCx0Lm4pLHQuZC5jLmxlbmd0aD4wKXtmb3IoUkModC5jKTt3NXQodCx1KEoobmV3IFModC5lLmEpKSwxMjEpKTx0LmUuYS5jLmxlbmd0aDspe2ZvcihlPUsxbih0KSxzPWUuZS5lLWUuZC5lLWUuYSxlLmUuaiYmKHM9LXMpLHI9bmV3IFModC5lLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDEyMSksbi5qJiYobi5lKz1zKTtSQyh0LmMpfVJDKHQuYyksYTV0KHQsdShKKG5ldyBTKHQuZS5hKSksMTIxKSksY2hlKHQpfX1mdW5jdGlvbiBzdm4odCxlKXt2YXIgbixyLHMsbyxoO2ZvcihzPXUoQWkodC5hLChiNCgpLCRWKSksMTUpLktjKCk7cy5PYigpOylzd2l0Y2gocj11KHMuUGIoKSwxMDEpLG49dShOZShyLmosMCksMTEzKS5kLmosbz1uZXcgQnUoci5qKSxacyhvLG5ldyBIWCksZS5nKXtjYXNlIDE6TnN0KHQsbyxuLChudigpLHBiKSwxKTticmVhaztjYXNlIDA6aD1yd24obyksTnN0KHQsbmV3IFFkKG8sMCxoKSxuLChudigpLHBiKSwwKSxOc3QodCxuZXcgUWQobyxoLG8uYy5sZW5ndGgpLG4scGIsMSl9fWZ1bmN0aW9uIGF2bih0LGUpe2k2KCk7dmFyIG4scjtpZihuPUhydChLOCgpLGUudGcoKSksbil7aWYocj1uLmosX3QodCwyMzkpKXJldHVybiBkaW4odSh0LDMzKSk/TnUociwoUWYoKSxlYSkpfHxOdShyLHFuKTpOdShyLChRZigpLGVhKSk7aWYoX3QodCwzNTIpKXJldHVybiBOdShyLChRZigpLFBkKSk7aWYoX3QodCwxODYpKXJldHVybiBOdShyLChRZigpLFYyKSk7aWYoX3QodCwzNTQpKXJldHVybiBOdShyLChRZigpLHJwKSl9cmV0dXJuITB9ZnVuY3Rpb24gb3ZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHY7aWYocz1uLG89cy5haygpLFgwKHQuZSxvKSl7aWYoby5oaSgpKXtmb3Iocj11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYoZD1yW2hdLHlpKGQscykmJmghPWUpdGhyb3cgaXQobmV3IEZuKGVPKSl9fWVsc2UgZm9yKHY9b3UodC5lLlRnKCksbykscj11KHQuZywxMTkpLGg9MDtoPHQuaTsrK2gpaWYoZD1yW2hdLHYucmwoZC5haygpKSYmaCE9ZSl0aHJvdyBpdChuZXcgRm4oYU8pKTtyZXR1cm4gdShoNCh0LGUsbiksNzIpfWZ1bmN0aW9uIG51ZSh0LGUpe2lmKGUgaW5zdGFuY2VvZiBPYmplY3QpdHJ5e2lmKGUuX19qYXZhJGV4Y2VwdGlvbj10LG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJtc2llIikhPS0xJiYkZG9jLmRvY3VtZW50TW9kZTw5KXJldHVybjt2YXIgbj10O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse2NhdXNlOntnZXQ6ZnVuY3Rpb24oKXt2YXIgcj1uLlpkKCk7cmV0dXJuIHImJnIuWGQoKX19LHN1cHByZXNzZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBuLllkKCl9fX0pfWNhdGNoe319ZnVuY3Rpb24gcnVlKHQsZSl7dmFyIG4scixzLG8saDtpZihyPWU+PjUsZSY9MzEscj49dC5kKXJldHVybiB0LmU8MD8ocmIoKSxCdXQpOihyYigpLHM3KTtpZihvPXQuZC1yLHM9TnQoQ3IsWHIsMjUsbysxLDE1LDEpLFFnbihzLG8sdC5hLHIsZSksdC5lPDApe2ZvcihuPTA7bjxyJiZ0LmFbbl09PTA7bisrKTtpZihuPHJ8fGU+MCYmdC5hW25dPDwzMi1lKXtmb3Iobj0wO248byYmc1tuXT09LTE7bisrKXNbbl09MDtuPT1vJiYrK28sKytzW25dfX1yZXR1cm4gaD1uZXcgWDModC5lLG8scyksTjkoaCksaH1mdW5jdGlvbiBpdWUodCl7dmFyIGUsbixyLHM7cmV0dXJuIHM9VDEodCksbj1uZXcgdmkocykscj1uZXcgWHMocyksZT1uZXcgaGUsTHMoZSwoIXQuZCYmKHQuZD1uZXcgQ24oWXMsdCw4LDUpKSx0LmQpKSxMcyhlLCghdC5lJiYodC5lPW5ldyBDbihZcyx0LDcsNCkpLHQuZSkpLHUoQmwod3UoUmkobmV3IFRuKG51bGwsbmV3IF9uKGUsMTYpKSxuKSxyKSxabShuZXcgb24sbmV3IG5pLG5ldyBkaSxuZXcgRWUsbHQoY3QoZmwsMSksb2UsMTMyLDAsWyhPMSgpLEl5KSxVbF0pKSksMjEpfWZ1bmN0aW9uIHN1ZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2O2lmKGQ9KHRvKCksdShlLDY2KS5PaigpKSxYMCh0LmUsZSkpe2lmKGUuaGkoKSYmTXEodCxlLHIsX3QoZSw5OSkmJih1KGUsMTgpLkJiJkthKSE9MCkpdGhyb3cgaXQobmV3IEZuKGVPKSl9ZWxzZSBmb3Iodj1vdSh0LmUuVGcoKSxlKSxzPXUodC5nLDExOSksaD0wO2g8dC5pOysraClpZihvPXNbaF0sdi5ybChvLmFrKCkpKXRocm93IGl0KG5ldyBGbihhTykpO25fKHQsVzR0KHQsZSxuKSxkP3Uociw3Mik6WmQoZSxyKSl9ZnVuY3Rpb24gWDAodCxlKXt0bygpO3ZhciBuLHIscztyZXR1cm4gZS4kaigpPyEwOmUuWmooKT09LTI/ZT09KGQ2KCksdGspfHxlPT1KNnx8ZT09emZ0fHxlPT1xZnQ/ITA6KHM9dC5UZygpLEdpKHMsZSk+PTA/ITE6KG49QzQoKCR1KCkseWEpLHMsZSksbj8ocj1uLlpqKCksKHI+MXx8cj09LTEpJiZIdyhUbyh5YSxuKSkhPTMpOiEwKSk6ITF9ZnVuY3Rpb24gY3ZuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7cmV0dXJuIGQ9RG8odShBdCgoIWUuYiYmKGUuYj1uZXcgQ24oYnIsZSw0LDcpKSxlLmIpLDApLDgyKSksdj1Ebyh1KEF0KCghZS5jJiYoZS5jPW5ldyBDbihicixlLDUsOCkpLGUuYyksMCksODIpKSxlcyhkKT09ZXModil8fGV5KHYsZCk/bnVsbDooaD1jRChlKSxoPT1uP3I6KG89dSh0cih0LmEsaCksMTApLG8mJihzPW8uZSxzKT9zOm51bGwpKX1mdW5jdGlvbiB1dm4odCxlKXt2YXIgbjtzd2l0Y2gobj11KFEodCwoVGUoKSx1RykpLDI3NiksdnIoZSwiTGFiZWwgc2lkZSBzZWxlY3Rpb24gKCIrbisiKSIsMSksbi5nKXtjYXNlIDA6bWNlKHQsKHpsKCksZjApKTticmVhaztjYXNlIDE6bWNlKHQsKHpsKCksa2IpKTticmVhaztjYXNlIDI6UGxlKHQsKHpsKCksZjApKTticmVhaztjYXNlIDM6UGxlKHQsKHpsKCksa2IpKTticmVhaztjYXNlIDQ6cHVlKHQsKHpsKCksZjApKTticmVhaztjYXNlIDU6cHVlKHQsKHpsKCksa2IpKX1vcihlKX1mdW5jdGlvbiBqNXQodCxlLG4pe3ZhciByLHMsbyxoLGQsdjtpZihyPVlLZShuLHQubGVuZ3RoKSxoPXRbcl0saFswXS5rPT0oVm4oKSxrcykpZm9yKG89bUh0KG4saC5sZW5ndGgpLHY9ZS5qLHM9MDtzPHYuYy5sZW5ndGg7cysrKWQ9KEFuKHMsdi5jLmxlbmd0aCksdSh2LmNbc10sMTEpKSwobj9kLmo9PSh2ZSgpLEhuKTpkLmo9PSh2ZSgpLEJuKSkmJmplKFJlKFEoZCwoYWUoKSxTTykpKSkmJihjaCh2LHMsdShRKGhbb10sKGFlKCksX2kpKSwxMSkpLG8rPW4/MTotMSl9ZnVuY3Rpb24gbHZuKHQsZSl7dmFyIG4scixzLG8saDtoPW5ldyBoZSxuPWU7ZG8gbz11KHRyKHQuYixuKSwxMjgpLG8uQj1uLmMsby5EPW4uZCxoLmNbaC5jLmxlbmd0aF09byxuPXUodHIodC5rLG4pLDE3KTt3aGlsZShuKTtyZXR1cm4gcj0oQW4oMCxoLmMubGVuZ3RoKSx1KGguY1swXSwxMjgpKSxyLmo9ITAsci5BPXUoci5kLmEuZWMoKS5LYygpLlBiKCksMTcpLmMuaSxzPXUoTmUoaCxoLmMubGVuZ3RoLTEpLDEyOCkscy5xPSEwLHMuQz11KHMuZC5hLmVjKCkuS2MoKS5QYigpLDE3KS5kLmksaH1mdW5jdGlvbiBhdWUodCl7aWYodC5nPT1udWxsKXN3aXRjaCh0LnApe2Nhc2UgMDp0Lmc9Z2luKHQpPyhObigpLHI3KTooTm4oKSxGMik7YnJlYWs7Y2FzZSAxOnQuZz1BRChZc24odCkpO2JyZWFrO2Nhc2UgMjp0Lmc9QkQoZXNuKHQpKTticmVhaztjYXNlIDM6dC5nPVJubih0KTticmVhaztjYXNlIDQ6dC5nPW5ldyBQMyhCbm4odCkpO2JyZWFrO2Nhc2UgNjp0Lmc9djIoam5uKHQpKTticmVhaztjYXNlIDU6dC5nPXBlKHJpbih0KSk7YnJlYWs7Y2FzZSA3OnQuZz11RShRc24odCkpfXJldHVybiB0Lmd9ZnVuY3Rpb24gJDV0KHQpe2lmKHQubj09bnVsbClzd2l0Y2godC5wKXtjYXNlIDA6dC5uPXBpbih0KT8oTm4oKSxyNyk6KE5uKCksRjIpO2JyZWFrO2Nhc2UgMTp0Lm49QUQoS3NuKHQpKTticmVhaztjYXNlIDI6dC5uPUJEKG5zbih0KSk7YnJlYWs7Y2FzZSAzOnQubj16bm4odCk7YnJlYWs7Y2FzZSA0OnQubj1uZXcgUDMocW5uKHQpKTticmVhaztjYXNlIDY6dC5uPXYyKCRubih0KSk7YnJlYWs7Y2FzZSA1OnQubj1wZShpaW4odCkpO2JyZWFrO2Nhc2UgNzp0Lm49dUUoWHNuKHQpKX1yZXR1cm4gdC5ufWZ1bmN0aW9uIG91ZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobz1uZXcgUyh0LmEuYSk7by5hPG8uYy5jLmxlbmd0aDspcj11KEoobyksMzA3KSxyLmc9MCxyLmk9MCxyLmUuYS4kYigpO2ZvcihzPW5ldyBTKHQuYS5hKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMzA3KSxuPXIuYS5hLmVjKCkuS2MoKTtuLk9iKCk7KWZvcihlPXUobi5QYigpLDU3KSxkPWUuYy5LYygpO2QuT2IoKTspaD11KGQuUGIoKSw1NyksaC5hIT1yJiYoRnMoci5lLGgpLCsraC5hLmcsKytoLmEuaSl9ZnVuY3Rpb24gaHZuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKGQ9dEQodC5hLGUuYiksIWQpdGhyb3cgaXQobmV3IE5vKCJJbnZhbGlkIGhpdGJveGVzIGZvciBzY2FubGluZSBvdmVybGFwIGNhbGN1bGF0aW9uLiIpKTtmb3IoaD0hMSxvPShyPW5ldyB5OShuZXcgdzkobmV3IHkodC5hLmEpLmEpLmIpLG5ldyBnKHIpKTtUTShvLmEuYSk7KWlmKHM9KG49TGooby5hKSx1KG4uY2QoKSw2NSkpLEx1bihlLmIscykpSktlKHQuYi5hLGUuYixzKSxoPSEwO2Vsc2UgaWYoaClicmVha31mdW5jdGlvbiBmdm4odCl7dmFyIGUsbixyLHMsbztzPXUoUSh0LChUZSgpLCQyKSksMjEpLG89dShRKHQscEcpLDIxKSxuPW5ldyAkZSh0LmYuYSt0LmQuYit0LmQuYyx0LmYuYit0LmQuZCt0LmQuYSksZT1uZXcgeG8obikscy5IYygoQWwoKSxKeSkpJiYocj11KFEodCxFNyksOCksby5IYygobGwoKSxSNykpJiYoci5hPD0wJiYoci5hPTIwKSxyLmI8PTAmJihyLmI9MjApKSxlLmE9Yi5NYXRoLm1heChuLmEsci5hKSxlLmI9Yi5NYXRoLm1heChuLmIsci5iKSksczNuKHQsbixlKX1mdW5jdGlvbiBjdWUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqO3M9ZT9uZXcgc1E6bmV3IGFRLG89ITE7ZG8gZm9yKG89ITEsaz1lP2wyKHQuYik6dC5iLHY9ay5LYygpO3YuT2IoKTspZm9yKGQ9dSh2LlBiKCksMjkpLGo9V3coZC5hKSxlfHxuZXcga3coaiksTT1uZXcgUyhqKTtNLmE8TS5jLmMubGVuZ3RoOylDPXUoSihNKSwxMCkscy5NYihDKSYmKHI9QyxuPXUoUShDLChhZSgpLEl2KSksMzA1KSxoPWU/bi5iOm4uayxvPUx1ZShyLGgsZSwhMSkpO3doaWxlKG8pfWZ1bmN0aW9uIGR2bih0LGUsbil7dmFyIHIscyxvLGgsZDtmb3IodnIobiwiTG9uZ2VzdCBwYXRoIGxheWVyaW5nIiwxKSx0LmE9ZSxkPXQuYS5hLHQuYj1OdChDcixYciwyNSxkLmMubGVuZ3RoLDE1LDEpLHI9MCxoPW5ldyBTKGQpO2guYTxoLmMuYy5sZW5ndGg7KXM9dShKKGgpLDEwKSxzLnA9cix0LmJbcl09LTEsKytyO2ZvcihvPW5ldyBTKGQpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEwKSxNY2UodCxzKTtkLmM9TnQoUW4sRGUsMSwwLDUsMSksdC5hPW51bGwsdC5iPW51bGwsb3Iobil9ZnVuY3Rpb24gZ3ZuKHQsZSl7dmFyIG4scixzO2UuYT8odEQodC5iLGUuYiksdC5hW2UuYi5pXT11KENudCh0LmIsZS5iKSw4MSksbj11KFRudCh0LmIsZS5iKSw4MSksbiYmKHQuYVtuLmldPWUuYikpOihyPXUoQ250KHQuYixlLmIpLDgxKSxyJiZyPT10LmFbZS5iLmldJiZyLmQmJnIuZCE9ZS5iLmQmJnIuZi5GYyhlLmIpLHM9dShUbnQodC5iLGUuYiksODEpLHMmJnQuYVtzLmldPT1lLmImJnMuZCYmcy5kIT1lLmIuZCYmZS5iLmYuRmMocyksZm50KHQuYixlLmIpKX1mdW5jdGlvbiB1dWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7cmV0dXJuIG89dC5kLGQ9WHQoeWUoUSh0LChUZSgpLEpnKSkpKSxkPDAmJihkPTAsSnQodCxKZyxkKSksZS5vLmI9ZCxoPWIuTWF0aC5mbG9vcihkLzIpLHI9bmV3IE1jLEJzKHIsKHZlKCksQm4pKSxVbyhyLGUpLHIubi5iPWgscz1uZXcgTWMsQnMocyxIbiksVW8ocyxlKSxzLm4uYj1oLG9hKHQsciksbj1uZXcgVncsTW8obix0KSxKdChuLFNvLG51bGwpLE9hKG4scyksb2EobixvKSx5eW4oZSx0LG4pLEVwbih0LG4pLG59ZnVuY3Rpb24gcHZuKHQpe3ZhciBlLG47cmV0dXJuIG49dShRKHQsKGFlKCksVmMpKSwyMSksZT1uZXcgVnMsbi5IYygob28oKSx5UykpJiYoJGwoZSxZbWUpLCRsKGUsaV90KSksKG4uSGMoeTcpfHxqZShSZShRKHQsKFRlKCksYWh0KSkpKSkmJigkbChlLGlfdCksbi5IYyhXNCkmJiRsKGUsWG1lKSksbi5IYyh2aCkmJiRsKGUsV21lKSxuLkhjKHhTKSYmJGwoZSxRbWUpLG4uSGMoWFYpJiYkbChlLEttZSksbi5IYyh2NykmJiRsKGUsR21lKSxuLkhjKG03KSYmJGwoZSxVbWUpLGV9ZnVuY3Rpb24gYnZuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtyZXR1cm4gcj10LmQsbz1lLmQsZD1yK28sdj10LmUhPWUuZT8tMToxLGQ9PTI/KEM9X2EoTnModC5hWzBdLGNvKSxOcyhlLmFbMF0sY28pKSxqPUFyKEMpLE09QXIoVm0oQywzMikpLE09PTA/bmV3IE5nKHYsaik6bmV3IFgzKHYsMixsdChjdChDciwxKSxYciwyNSwxNSxbaixNXSkpKToobj10LmEscz1lLmEsaD1OdChDcixYciwyNSxkLDE1LDEpLElsbihuLHIscyxvLGgpLGs9bmV3IFgzKHYsZCxoKSxOOShrKSxrKX1mdW5jdGlvbiBsdWUodCxlLG4scil7dmFyIHMsbztpZihlKXtpZihzPXQuYS51ZShuLmQsZS5kKSxzPT0wKXJldHVybiByLmQ9YXd0KGUsbi5lKSxyLmI9ITAsZTtvPXM8MD8wOjEsZS5hW29dPWx1ZSh0LGUuYVtvXSxuLHIpLERtKGUuYVtvXSkmJihEbShlLmFbMS1vXSk/KGUuYj0hMCxlLmFbMF0uYj0hMSxlLmFbMV0uYj0hMSk6RG0oZS5hW29dLmFbb10pP2U9ZHooZSwxLW8pOkRtKGUuYVtvXS5hWzEtb10pJiYoZT1fWnQoZSwxLW8pKSl9ZWxzZSByZXR1cm4gbjtyZXR1cm4gZX1mdW5jdGlvbiBodWUodCxlLG4pe3ZhciByLHMsbyxoO3M9dC5pLHI9dC5uLHZtdCh0LChLZigpLHNjKSxzLmMrci5iLG4pLHZtdCh0LGFjLHMuYytzLmItci5jLW5bMl0sbiksaD1zLmItci5iLXIuYyxuWzBdPjAmJihuWzBdKz10LmQsaC09blswXSksblsyXT4wJiYoblsyXSs9dC5kLGgtPW5bMl0pLG89Yi5NYXRoLm1heCgwLGgpLG5bMV09Yi5NYXRoLm1heChuWzFdLGgpLHZtdCh0LGV1LHMuYytyLmIrblswXS0oblsxXS1oKS8yLG4pLGU9PWV1JiYodC5jLmI9byx0LmMuYz1zLmMrci5iKyhvLWgpLzIpfWZ1bmN0aW9uIGZ1ZSgpe3RoaXMuYz1OdChhYSx2bywyNSwodmUoKSxsdChjdChYYSwxKSx4Yyw2MSwwLFtabyxQbixIbixtcixCbl0pKS5sZW5ndGgsMTUsMSksdGhpcy5iPU50KGFhLHZvLDI1LGx0KGN0KFhhLDEpLHhjLDYxLDAsW1pvLFBuLEhuLG1yLEJuXSkubGVuZ3RoLDE1LDEpLHRoaXMuYT1OdChhYSx2bywyNSxsdChjdChYYSwxKSx4Yyw2MSwwLFtabyxQbixIbixtcixCbl0pLmxlbmd0aCwxNSwxKSxBYnQodGhpcy5jLGFzKSxBYnQodGhpcy5iLENzKSxBYnQodGhpcy5hLENzKX1mdW5jdGlvbiBqYyh0LGUsbil7dmFyIHIscyxvLGg7aWYoZTw9bj8ocz1lLG89bik6KHM9bixvPWUpLHI9MCx0LmI9PW51bGwpdC5iPU50KENyLFhyLDI1LDIsMTUsMSksdC5iWzBdPXMsdC5iWzFdPW8sdC5jPSEwO2Vsc2V7aWYocj10LmIubGVuZ3RoLHQuYltyLTFdKzE9PXMpe3QuYltyLTFdPW87cmV0dXJufWg9TnQoQ3IsWHIsMjUscisyLDE1LDEpLERjKHQuYiwwLGgsMCxyKSx0LmI9aCx0LmJbci0xXT49cyYmKHQuYz0hMSx0LmE9ITEpLHQuYltyKytdPXMsdC5iW3JdPW8sdC5jfHx2NCh0KX19ZnVuY3Rpb24gd3ZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsaztmb3Ioaz1lLmQsdC5hPW5ldyBYYyhrLmMubGVuZ3RoKSx0LmM9bmV3IF9yLGQ9bmV3IFMoayk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTAxKSxvPW5ldyBQRChudWxsKSxsZSh0LmEsbyksa2kodC5jLGgsbyk7Zm9yKHQuYj1uZXcgX3IsX3BuKHQsZSkscj0wO3I8ay5jLmxlbmd0aC0xO3IrKylmb3Iodj11KE5lKGUuZCxyKSwxMDEpLHM9cisxO3M8ay5jLmxlbmd0aDtzKyspYXduKHQsdix1KE5lKGUuZCxzKSwxMDEpLG4pfWZ1bmN0aW9uIGR1ZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKCFGOChlKSl7Zm9yKHY9UmMobiwoX3QoZSwxNCk/dShlLDE0KS5nYygpOmowKGUuS2MoKSkpL3QuYXwwKSx2cih2LFcxZSwxKSxkPW5ldyBpWixoPTAsbz1lLktjKCk7by5PYigpOylyPXUoby5QYigpLDg2KSxkPUQxKGx0KGN0KGoxLDEpLERlLDIwLDAsW2QsbmV3IExwKHIpXSkpLGg8ci5mLmImJihoPXIuZi5iKTtmb3Iocz1lLktjKCk7cy5PYigpOylyPXUocy5QYigpLDg2KSxKdChyLChmYygpLElHKSxoKTtvcih2KSxkdWUodCxkLG4pfX1mdW5jdGlvbiB2dm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iobj1DcyxkPShWbigpLE9zKSxzPW5ldyBTKGUuYSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTApLG89ci5rLG8hPU9zJiYoaD15ZShRKHIsKGFlKCksb0N0KSkpLGg9PW51bGw/KG49Yi5NYXRoLm1heChuLDApLHIubi5iPW4rQjJ0KHQuYSxvLGQpKTpyLm4uYj0oT24oaCksaCkpLHY9QjJ0KHQuYSxvLGQpLHIubi5iPG4rdityLmQuZCYmKHIubi5iPW4rdityLmQuZCksbj1yLm4uYityLm8uYityLmQuYSxkPW99ZnVuY3Rpb24gbXZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE07Zm9yKG89eDQoZSwhMSwhMSksaz1sSShvKSxNPVh0KHllKHFlKGUsKG9fKCksUXV0KSkpKSxzPWVmZShrLE0rdC5hKSxDPW5ldyBuYXQocyksTW8oQyxlKSxraSh0LmIsZSxDKSxuLmNbbi5jLmxlbmd0aF09Qyx2PSghZS5uJiYoZS5uPW5ldyBmZShxbyxlLDEsNykpLGUubiksZD1uZXcgbnIodik7ZC5lIT1kLmkuZ2MoKTspaD11KGRyKGQpLDEzNykscj14SSh0LGgsITAsMCwwKSxuLmNbbi5jLmxlbmd0aF09cjtyZXR1cm4gQ31mdW5jdGlvbiBndWUodCxlLG4scixzKXt2YXIgbyxoLGQsdixrLEM7aWYodC5kJiZ0LmQubGcocyksbz11KHMuWGIoMCksMzMpLHhzZSh0LG4sbywhMSl8fChoPXUocy5YYihzLmdjKCktMSksMzMpLHhzZSh0LHIsaCwhMCkpfHxSNHQodCxzKSlyZXR1cm4hMDtmb3IoQz1zLktjKCk7Qy5PYigpOylmb3Ioaz11KEMuUGIoKSwzMyksdj1lLktjKCk7di5PYigpOylpZihkPXUodi5QYigpLDMzKSxUcSh0LGssZCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geXZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtqPWUuYy5sZW5ndGgsTT0oaz10LllnKG4pLHUoaz49MD90Ll9nKGssITEsITApOmR2KHQsbiwhMSksNTgpKTt0OmZvcihvPU0uS2MoKTtvLk9iKCk7KXtmb3Iocz11KG8uUGIoKSw1NiksQz0wO0M8ajsrK0MpaWYoaD0oQW4oQyxlLmMubGVuZ3RoKSx1KGUuY1tDXSw3MikpLHY9aC5kZCgpLGQ9aC5haygpLHI9cy5iaChkLCExKSx2PT1udWxsP3IhPW51bGw6IXlpKHYscikpY29udGludWUgdDtyZXR1cm4gc31yZXR1cm4gbnVsbH1mdW5jdGlvbiB4dm4odCxlLG4scil7dmFyIHMsbyxoLGQ7Zm9yKHM9dShHZyhlLCh2ZSgpLEJuKSkuS2MoKS5QYigpLDExKSxvPXUoR2coZSxIbikuS2MoKS5QYigpLDExKSxkPW5ldyBTKHQuaik7ZC5hPGQuYy5jLmxlbmd0aDspe2ZvcihoPXUoSihkKSwxMSk7aC5lLmMubGVuZ3RoIT0wOylvYSh1KE5lKGguZSwwKSwxNykscyk7Zm9yKDtoLmcuYy5sZW5ndGghPTA7KU9hKHUoTmUoaC5nLDApLDE3KSxvKX1ufHxKdChlLChhZSgpLHIxKSxudWxsKSxyfHxKdChlLChhZSgpLCRoKSxudWxsKX1mdW5jdGlvbiB4NCh0LGUsbil7dmFyIHIscztpZigoIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpLmk9PTApcmV0dXJuIEN5dCh0KTtpZihyPXUoQXQoKCF0LmEmJih0LmE9bmV3IGZlKEppLHQsNiw2KSksdC5hKSwwKSwyMDIpLGUmJih4cigoIXIuYSYmKHIuYT1uZXcgQXMoR2gsciw1KSksci5hKSksRzgociwwKSxXOChyLDApLFY4KHIsMCksVTgociwwKSksbilmb3Iocz0oIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpO3MuaT4xOylieShzLHMuaS0xKTtyZXR1cm4gcn1mdW5jdGlvbiBrdm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3IodnIoZSwiQ29tbWVudCBwb3N0LXByb2Nlc3NpbmciLDEpLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDI5KSxyPW5ldyBoZSxkPW5ldyBTKHMuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTApLHY9dShRKGgsKGFlKCksejYpKSwxNSksbj11KFEoaCxONiksMTUpLCh2fHxuKSYmKEU1bihoLHYsbiksdiYmTHMocix2KSxuJiZMcyhyLG4pKTtMcyhzLmEscil9b3IoZSl9ZnVuY3Rpb24gcHVlKHQsZSl7dmFyIG4scixzLG8saCxkLHY7Zm9yKG49bmV3IEIzLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDI5KSx2PSEwLHI9MCxkPW5ldyBTKHMuYSk7ZC5hPGQuYy5jLmxlbmd0aDspc3dpdGNoKGg9dShKKGQpLDEwKSxoLmsuZyl7Y2FzZSA0OisrcjtjYXNlIDE6aW10KG4saCk7YnJlYWs7Y2FzZSAwOmtwbihoLGUpO2RlZmF1bHQ6bi5iPT1uLmN8fGlsZShuLHIsdiwhMSxlKSx2PSExLHI9MH1uLmI9PW4uY3x8aWxlKG4scix2LCEwLGUpfX1mdW5jdGlvbiBFdm4odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iocz1uZXcgaGUsbj0wO248PXQuaTtuKyspcj1uZXcgU2goZSksci5wPXQuaS1uLHMuY1tzLmMubGVuZ3RoXT1yO2ZvcihkPW5ldyBTKHQubyk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTApLEVvKGgsdShOZShzLHQuaS10LmZbaC5wXSksMjkpKTtmb3Iobz1uZXcgUyhzKTtvLmE8by5jLmMubGVuZ3RoOyl2PXUoSihvKSwyOSksdi5hLmMubGVuZ3RoPT0wJiZMOShvKTtlLmIuYz1OdChRbixEZSwxLDAsNSwxKSxMcyhlLmIscyl9ZnVuY3Rpb24gejV0KHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihuPTAsZD1uZXcgUyhlKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKGQpLDExKSxWeXQodC5iLHQuZFtoLnBdKSxzPW5ldyBMMShoLmIpO0dvKHMuYSl8fEdvKHMuYik7KXI9dShHbyhzLmEpP0oocy5hKTpKKHMuYiksMTcpLG89YmJ0KHQsaD09ci5jP3IuZDpyLmMpLG8+dC5kW2gucF0mJihuKz1mbXQodC5iLG8pLFVwKHQuYSxwZShvKSkpO2Zvcig7IUJDKHQuYSk7KUhtdCh0LmIsdShIeCh0LmEpLDE5KS5hKX1yZXR1cm4gbn1mdW5jdGlvbiBidWUodCxlLG4pe3ZhciByLHMsbyxoO2ZvcihvPSghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKS5pLHM9bmV3IG5yKCghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSwoIXIuYSYmKHIuYT1uZXcgZmUocnMsciwxMCwxMSkpLHIuYSkuaT09MHx8KG8rPWJ1ZSh0LHIsITEpKTtpZihuKWZvcihoPWVzKGUpO2g7KW8rPSghaC5hJiYoaC5hPW5ldyBmZShycyxoLDEwLDExKSksaC5hKS5pLGg9ZXMoaCk7cmV0dXJuIG99ZnVuY3Rpb24gYnkodCxlKXt2YXIgbixyLHMsbztyZXR1cm4gdC5laigpPyhyPW51bGwscz10LmZqKCksdC5paigpJiYocj10LmtqKHQucGkoZSksbnVsbCkpLG49dC5aaSg0LG89bDYodCxlKSxudWxsLGUscyksdC5iaigpJiZvIT1udWxsJiYocj10LmRqKG8scikpLHI/KHIuRWkobiksci5GaSgpKTp0LiRpKG4pLG8pOihvPWw2KHQsZSksdC5iaigpJiZvIT1udWxsJiYocj10LmRqKG8sbnVsbCksciYmci5GaSgpKSxvKX1mdW5jdGlvbiBUdm4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEM7Zm9yKGs9dC5hLGU9bmV3IEhzLHY9MCxyPW5ldyBTKHQuZCk7ci5hPHIuYy5jLmxlbmd0aDspe2ZvcihuPXUoSihyKSwyMjIpLEM9MCxyNChuLmIsbmV3IERsKSxoPWVpKG4uYiwwKTtoLmIhPWguZC5jOylvPXUodGkoaCksMjIyKSxlLmEuX2IobykmJihzPW4uYyxkPW8uYyxDPGQuZCtkLmErayYmQytzLmEraz5kLmQmJihDPWQuZCtkLmEraykpO24uYy5kPUMsZS5hLnpjKG4sZSksdj1iLk1hdGgubWF4KHYsbi5jLmQrbi5jLmEpfXJldHVybiB2fWZ1bmN0aW9uIG9vKCl7b289WixLVj1uZXcgRm0oIkNPTU1FTlRTIiwwKSx2aD1uZXcgRm0oIkVYVEVSTkFMX1BPUlRTIiwxKSx5Uz1uZXcgRm0oIkhZUEVSRURHRVMiLDIpLFhWPW5ldyBGbSgiSFlQRVJOT0RFUyIsMykseTc9bmV3IEZtKCJOT05fRlJFRV9QT1JUUyIsNCksVzQ9bmV3IEZtKCJOT1JUSF9TT1VUSF9QT1JUUyIsNSkseFM9bmV3IEZtKE0xZSw2KSx2Nz1uZXcgRm0oIkNFTlRFUl9MQUJFTFMiLDcpLG03PW5ldyBGbSgiRU5EX0xBQkVMUyIsOCksUVY9bmV3IEZtKCJQQVJUSVRJT05TIiw5KX1mdW5jdGlvbiB3eSh0KXt2YXIgZSxuLHIscyxvO2ZvcihzPW5ldyBoZSxlPW5ldyBFOSgoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpLHI9bmV3IGFyKGxyKEswKHQpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTXIociksNzkpLF90KEF0KCghbi5iJiYobi5iPW5ldyBDbihicixuLDQsNykpLG4uYiksMCksMTg2KXx8KG89RG8odShBdCgoIW4uYyYmKG4uYz1uZXcgQ24oYnIsbiw1LDgpKSxuLmMpLDApLDgyKSksZS5hLl9iKG8pfHwocy5jW3MuYy5sZW5ndGhdPW8pKTtyZXR1cm4gc31mdW5jdGlvbiBDdm4odCl7dmFyIGUsbixyLHMsbyxoO2ZvcihvPW5ldyBIcyxlPW5ldyBFOSgoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpLHM9bmV3IGFyKGxyKEswKHQpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTXIocyksNzkpLF90KEF0KCghci5iJiYoci5iPW5ldyBDbihicixyLDQsNykpLHIuYiksMCksMTg2KXx8KGg9RG8odShBdCgoIXIuYyYmKHIuYz1uZXcgQ24oYnIsciw1LDgpKSxyLmMpLDApLDgyKSksZS5hLl9iKGgpfHwobj1vLmEuemMoaCxvKSxuPT1udWxsKSk7cmV0dXJuIG99ZnVuY3Rpb24gX3ZuKHQsZSxuLHIscyl7cmV0dXJuIHI8MD8ocj13NCh0LHMsbHQoY3QoQWUsMSksZWUsMiw2LFtRYXQsWmF0LEphdCx0b3QsdzYsZW90LG5vdCxyb3QsaW90LHNvdCxhb3Qsb290XSksZSkscjwwJiYocj13NCh0LHMsbHQoY3QoQWUsMSksZWUsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIix3NiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pLGUpKSxyPDA/ITE6KG4uaz1yLCEwKSk6cj4wPyhuLms9ci0xLCEwKTohMX1mdW5jdGlvbiBTdm4odCxlLG4scixzKXtyZXR1cm4gcjwwPyhyPXc0KHQscyxsdChjdChBZSwxKSxlZSwyLDYsW1FhdCxaYXQsSmF0LHRvdCx3Nixlb3Qsbm90LHJvdCxpb3Qsc290LGFvdCxvb3RdKSxlKSxyPDAmJihyPXc0KHQscyxsdChjdChBZSwxKSxlZSwyLDYsWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLHc2LCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSksZSkpLHI8MD8hMToobi5rPXIsITApKTpyPjA/KG4uaz1yLTEsITApOiExfWZ1bmN0aW9uIEF2bih0LGUsbixyLHMsbyl7dmFyIGgsZCx2LGs7aWYoZD0zMixyPDApe2lmKGVbMF0+PXQubGVuZ3RofHwoZD13YSh0LGVbMF0pLGQhPTQzJiZkIT00NSl8fCgrK2VbMF0scj1ncSh0LGUpLHI8MCkpcmV0dXJuITE7ZD09NDUmJihyPS1yKX1yZXR1cm4gZD09MzImJmVbMF0tbj09MiYmcy5iPT0yJiYodj1uZXcgQlIsaz12LnEuZ2V0RnVsbFllYXIoKS1hYithYi04MCxoPWslMTAwLG8uYT1yPT1oLHIrPShrLzEwMHwwKSoxMDArKHI8aD8xMDA6MCkpLG8ucD1yLCEwfWZ1bmN0aW9uIHd1ZSh0LGUpe3ZhciBuLHIscyxvLGg7ZXModCkmJihoPXUoUShlLChUZSgpLCQyKSksMTc0KSxWdChxZSh0LGNzKSk9PT1WdCgodWEoKSxUYikpJiZ3byh0LGNzLEcxKSxyPShQbSgpLG5ldyBNbShlcyh0KSkpLG89bmV3IGdudChlcyh0KT9uZXcgTW0oZXModCkpOm51bGwsdCkscz1TaGUocixvLCExLCEwKSx2ZihoLChBbCgpLEp5KSksbj11KFEoZSxFNyksOCksbi5hPWIuTWF0aC5tYXgocy5hLG4uYSksbi5iPWIuTWF0aC5tYXgocy5iLG4uYikpfWZ1bmN0aW9uIEx2bih0LGUsbil7dmFyIHIscyxvLGgsZCx2O2ZvcihoPXUoUSh0LChhZSgpLEdsdCkpLDE1KS5LYygpO2guT2IoKTspe3N3aXRjaChvPXUoaC5QYigpLDEwKSx1KFEobywoVGUoKSx1dSkpLDE2MykuZyl7Y2FzZSAyOkVvKG8sZSk7YnJlYWs7Y2FzZSA0OkVvKG8sbil9Zm9yKHM9bmV3IGFyKGxyKFUwKG8pLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTXIocyksMTcpLCEoci5jJiZyLmQpJiYoZD0hci5kLHY9dShRKHIsdUN0KSwxMSksZD9vYShyLHYpOk9hKHIsdikpfX1mdW5jdGlvbiBFcSgpe0VxPVoseGx0PW5ldyBHeChLcSwwLCh2ZSgpLFBuKSxQbiksVGx0PW5ldyBHeChPb3QsMSxtcixtcikseWx0PW5ldyBHeChJb3QsMixIbixIbiksU2x0PW5ldyBHeChQb3QsMyxCbixCbiksRWx0PW5ldyBHeCgiTk9SVEhfV0VTVF9DT1JORVIiLDQsQm4sUG4pLGtsdD1uZXcgR3goIk5PUlRIX0VBU1RfQ09STkVSIiw1LFBuLEhuKSxfbHQ9bmV3IEd4KCJTT1VUSF9XRVNUX0NPUk5FUiIsNixtcixCbiksQ2x0PW5ldyBHeCgiU09VVEhfRUFTVF9DT1JORVIiLDcsSG4sbXIpfWZ1bmN0aW9uIGs0KCl7azQ9WixTU3Q9bHQoY3QoT2IsMSksd290LDI1LDE0LFsxLDEsMiw2LDI0LDEyMCw3MjAsNTA0MCw0MDMyMCwzNjI4ODAsMzYyODgwMCwzOTkxNjgwMCw0NzkwMDE2MDAsNjIyNzAyMDgwMCw4NzE3ODI5MTIwMCwxMzA3Njc0MzY4ZTMse2w6MzUwNjE3NixtOjc5NDA3NyxoOjF9LHtsOjg4NDczNixtOjkxNjQxMSxoOjIwfSx7bDozMzQyMzM2LG06MzkxMjQ4OSxoOjM2M30se2w6NTg5ODI0LG06MzAzNDEzOCxoOjY5MTR9LHtsOjM0MDc4NzIsbToxOTYyNTA2LGg6MTM4Mjk0fV0pLGIuTWF0aC5wb3coMiwtNjUpfWZ1bmN0aW9uIHZ1ZSh0LGUpe3ZhciBuLHIscyxvLGg7aWYodC5jLmxlbmd0aD09MClyZXR1cm4gbmV3IGZhKHBlKDApLHBlKDApKTtmb3Iobj0oQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxMSkpLmosaD0wLG89ZS5nLHI9ZS5nKzE7aDx0LmMubGVuZ3RoLTEmJm4uZzxvOykrK2gsbj0oQW4oaCx0LmMubGVuZ3RoKSx1KHQuY1toXSwxMSkpLmo7Zm9yKHM9aDtzPHQuYy5sZW5ndGgtMSYmbi5nPHI7KSsrcyxuPShBbihoLHQuYy5sZW5ndGgpLHUodC5jW2hdLDExKSkuajtyZXR1cm4gbmV3IGZhKHBlKGgpLHBlKHMpKX1mdW5jdGlvbiBNdm4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqO2ZvcihvPWUuYy5sZW5ndGgsaD0oQW4obixlLmMubGVuZ3RoKSx1KGUuY1tuXSwyODYpKSxkPWguYS5vLmEsTT1oLmMsaj0wLGs9aC5jO2s8PWguZjtrKyspe2lmKGQ8PXQuYVtrXSlyZXR1cm4gaztmb3IoQz10LmFba10sdj1udWxsLHM9bisxO3M8bztzKyspcj0oQW4ocyxlLmMubGVuZ3RoKSx1KGUuY1tzXSwyODYpKSxyLmM8PWsmJnIuZj49ayYmKHY9cik7diYmKEM9Yi5NYXRoLm1heChDLHYuYS5vLmEpKSxDPmomJihNPWssaj1DKX1yZXR1cm4gTX1mdW5jdGlvbiBEdm4odCxlLG4pe3ZhciByLHMsbztpZih0LmU9bix0LmQ9MCx0LmI9MCx0LmY9MSx0Lmk9ZSwodC5lJjE2KT09MTYmJih0Lmk9d21uKHQuaSkpLHQuaj10LmkubGVuZ3RoLGZpKHQpLG89Y3YodCksdC5kIT10LmopdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFpkZSkpKSk7aWYodC5nKXtmb3Iocj0wO3I8dC5nLmEuYy5sZW5ndGg7cisrKWlmKHM9dSh6dyh0LmcsciksNTg0KSx0LmY8PXMuYSl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksSmRlKSkpKTt0LmcuYS5jPU50KFFuLERlLDEsMCw1LDEpfXJldHVybiBvfWZ1bmN0aW9uIEl2bih0LGUpe3ZhciBuLHIscztpZihlPT1udWxsKXtmb3Iocj0oIXQuYSYmKHQuYT1uZXcgZmUoYWcsdCw5LDUpKSxuZXcgbnIodC5hKSk7ci5lIT1yLmkuZ2MoKTspaWYobj11KGRyKHIpLDY3OCkscz1uLmMsKHM/P24uemIpPT1udWxsKXJldHVybiBufWVsc2UgZm9yKHI9KCF0LmEmJih0LmE9bmV3IGZlKGFnLHQsOSw1KSksbmV3IG5yKHQuYSkpO3IuZSE9ci5pLmdjKCk7KWlmKG49dShkcihyKSw2NzgpLGhuKGUsKHM9bi5jLHM/P24uemIpKSlyZXR1cm4gbjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBsYXQodCxlKXt2YXIgbjtzd2l0Y2gobj1udWxsLGUuZyl7Y2FzZSAxOnQuZS5YZSgodWkoKSx2ZnQpKSYmKG49dSh0LmUuV2UodmZ0KSwyNDkpKTticmVhaztjYXNlIDM6dC5lLlhlKCh1aSgpLG1mdCkpJiYobj11KHQuZS5XZShtZnQpLDI0OSkpO2JyZWFrO2Nhc2UgMjp0LmUuWGUoKHVpKCksd2Z0KSkmJihuPXUodC5lLldlKHdmdCksMjQ5KSk7YnJlYWs7Y2FzZSA0OnQuZS5YZSgodWkoKSx5ZnQpKSYmKG49dSh0LmUuV2UoeWZ0KSwyNDkpKX1yZXR1cm4hbiYmKG49dSh0LmUuV2UoKHVpKCksaUF0KSksMjQ5KSksbn1mdW5jdGlvbiBtdWUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTTtmb3IoZS5wPTEsbz1lLmMsTT1vdihlLChzbygpLG51KSkuS2MoKTtNLk9iKCk7KWZvcihDPXUoTS5QYigpLDExKSxzPW5ldyBTKEMuZyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLGs9ci5kLmksZSE9ayYmKGg9ay5jLGgucDw9by5wJiYoZD1vLnArMSxkPT1uLmIuYy5sZW5ndGg/KHY9bmV3IFNoKG4pLHYucD1kLGxlKG4uYix2KSxFbyhrLHYpKToodj11KE5lKG4uYixkKSwyOSksRW8oayx2KSksbXVlKHQsayxuKSkpfWZ1bmN0aW9uIHl1ZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2O2ZvcihzPW4sbz0wLGQ9bmV3IFMoZSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMzMpLHdvKGgsKHV5KCksQkcpLHBlKHMrKykpLHY9d3koaCkscj1iLk1hdGguYXRhbjIoaC5qK2guZi8yLGguaStoLmcvMikscis9cjwwP080OjAscjwuNzg1Mzk4MTYzMzk3NDQ4M3x8cj5KMWU/WnModix0LmIpOnI8PUoxZSYmcj50ZGU/WnModix0LmQpOnI8PXRkZSYmcj5lZGU/WnModix0LmMpOnI8PWVkZSYmWnModix0LmEpLG89eXVlKHQsdixvKTtyZXR1cm4gc31mdW5jdGlvbiByYigpe3JiPVo7dmFyIHQ7Zm9yKGVWPW5ldyBOZygxLDEpLFJ1dD1uZXcgTmcoMSwxMCksczc9bmV3IE5nKDAsMCksQnV0PW5ldyBOZygtMSwxKSxDRXQ9bHQoY3QoajQsMSksZWUsOTEsMCxbczcsZVYsbmV3IE5nKDEsMiksbmV3IE5nKDEsMyksbmV3IE5nKDEsNCksbmV3IE5nKDEsNSksbmV3IE5nKDEsNiksbmV3IE5nKDEsNyksbmV3IE5nKDEsOCksbmV3IE5nKDEsOSksUnV0XSksblY9TnQoajQsZWUsOTEsMzIsMCwxKSx0PTA7dDxuVi5sZW5ndGg7dCsrKW5WW3RdPUpEKEYwKDEsdCkpfWZ1bmN0aW9uIE92bih0LGUsbixyLHMsbyl7dmFyIGgsZCx2LGs7Zm9yKGQ9IXFDKFJpKHQuT2MoKSxuZXcgWnQobmV3IFVLKSkpLnNkKChRYigpLG83KSksaD10LG89PShhbygpLHJnKSYmKGg9X3QoaCwxNTIpP1p4KHUoaCwxNTIpKTpfdChoLDEzMSk/dShoLDEzMSkuYTpfdChoLDU0KT9uZXcga3coaCk6bmV3IE9tKGgpKSxrPWguS2MoKTtrLk9iKCk7KXY9dShrLlBiKCksNzApLHYubi5hPWUuYSxkP3Yubi5iPWUuYisoci5iLXYuby5iKS8yOnM/di5uLmI9ZS5iOnYubi5iPWUuYityLmItdi5vLmIsZS5hKz12Lm8uYStufWZ1bmN0aW9uIHh1ZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGs7Zm9yKHM9KHIuYytyLmEpLzIsQWgoZS5qKSxyaShlLmoscyksQWgobi5lKSxyaShuLmUscyksaz1uZXcgX0h0LGQ9bmV3IFModC5mKTtkLmE8ZC5jLmMubGVuZ3RoOylvPXUoSihkKSwxMjkpLHY9by5hLFBzdChrLGUsdiksUHN0KGssbix2KTtmb3IoaD1uZXcgUyh0LmspO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEyOSksdj1vLmIsUHN0KGssZSx2KSxQc3QoayxuLHYpO3JldHVybiBrLmIrPTIsay5hKz1lUXQoZSx0LnEpLGsuYSs9ZVF0KHQucSxuKSxrfWZ1bmN0aW9uIGt1ZSh0LGUsbil7dmFyIHIscyxvLGgsZDtpZighRjgoZSkpe2ZvcihkPVJjKG4sKF90KGUsMTQpP3UoZSwxNCkuZ2MoKTpqMChlLktjKCkpKS90LmF8MCksdnIoZCxXMWUsMSksaD1uZXcgUU4sbz1udWxsLHM9ZS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw4NiksaD1EMShsdChjdChqMSwxKSxEZSwyMCwwLFtoLG5ldyBMcChyKV0pKSxvJiYoSnQobywoZmMoKSxieWUpLHIpLEp0KHIsUmh0LG8pLFpydChyKT09WnJ0KG8pJiYoSnQobyxqaHQsciksSnQocixERyxvKSkpLG89cjtvcihkKSxrdWUodCxoLG4pfX1mdW5jdGlvbiBFdWUodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKG49dC5pLGU9dC5uLGQ9bi5kLHQuZj09KHl1KCksZGIpP2QrPShuLmEtdC5lLmIpLzI6dC5mPT1FZiYmKGQrPW4uYS10LmUuYikscz1uZXcgUyh0LmQpO3MuYTxzLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj11KEoocyksMTgxKSxoPXIucmYoKSxvPW5ldyBDYSxvLmI9ZCxkKz1oLmIrdC5hLHQuYi5nKXtjYXNlIDA6by5hPW4uYytlLmI7YnJlYWs7Y2FzZSAxOm8uYT1uLmMrZS5iKyhuLmItaC5hKS8yO2JyZWFrO2Nhc2UgMjpvLmE9bi5jK24uYi1lLmMtaC5hfXIudGYobyl9fWZ1bmN0aW9uIFR1ZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iobj10LmksZT10Lm4sZD1uLmMsdC5iPT0oUXUoKSxmYik/ZCs9KG4uYi10LmUuYSkvMjp0LmI9PWtmJiYoZCs9bi5iLXQuZS5hKSxzPW5ldyBTKHQuZCk7cy5hPHMuYy5jLmxlbmd0aDspe3N3aXRjaChyPXUoSihzKSwxODEpLGg9ci5yZigpLG89bmV3IENhLG8uYT1kLGQrPWguYSt0LmEsdC5mLmcpe2Nhc2UgMDpvLmI9bi5kK2UuZDticmVhaztjYXNlIDE6by5iPW4uZCtlLmQrKG4uYS1oLmIpLzI7YnJlYWs7Y2FzZSAyOm8uYj1uLmQrbi5hLWUuYS1oLmJ9ci50ZihvKX19ZnVuY3Rpb24gUHZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEc7Qz1uLmEuYyxoPW4uYS5jK24uYS5iLG89dSh0cihuLmMsZSksNDU5KSxIPW8uZixHPW8uYSx2PW5ldyAkZShDLEgpLE09bmV3ICRlKGgsRykscz1DLG4ucHx8KHMrPXQuYykscys9bi5GK24udip0LmIsaz1uZXcgJGUocyxIKSxqPW5ldyAkZShzLEcpLFY5KGUuYSxsdChjdChXcywxKSxlZSw4LDAsW3Ysa10pKSxkPW4uZC5hLmdjKCk+MSxkJiYocj1uZXcgJGUocyxuLmIpLHJpKGUuYSxyKSksVjkoZS5hLGx0KGN0KFdzLDEpLGVlLDgsMCxbaixNXSkpfWZ1bmN0aW9uIEN1ZSh0KXtNdyh0LG5ldyBrMihfdyhFdyhDdyhUdyhuZXcga2csQUgpLCJFTEsgUmFuZG9taXplciIpLCdEaXN0cmlidXRlcyB0aGUgbm9kZXMgcmFuZG9tbHkgb24gdGhlIHBsYW5lLCBsZWFkaW5nIHRvIHZlcnkgb2JmdXNjYXRpbmcgbGF5b3V0cy4gQ2FuIGJlIHVzZWZ1bCB0byBkZW1vbnN0cmF0ZSB0aGUgcG93ZXIgb2YgInJlYWwiIGxheW91dCBhbGdvcml0aG1zLicpLG5ldyBaWikpKSx4ZSh0LEFILHh2LEZBdCkseGUodCxBSCxDeSwxNSkseGUodCxBSCx0SCxwZSgwKSkseGUodCxBSCxFNixHRSl9ZnVuY3Rpb24gcTV0KCl7cTV0PVo7dmFyIHQsZSxuLHIscyxvO2ZvcihkQT1OdChHdSxONCwyNSwyNTUsMTUsMSkseVU9TnQoeGgseWQsMjUsMTYsMTUsMSksZT0wO2U8MjU1O2UrKylkQVtlXT0tMTtmb3Iobj01NztuPj00ODtuLS0pZEFbbl09bi00ODw8MjQ+PjI0O2ZvcihyPTcwO3I+PTY1O3ItLSlkQVtyXT1yLTY1KzEwPDwyND4+MjQ7Zm9yKHM9MTAyO3M+PTk3O3MtLSlkQVtzXT1zLTk3KzEwPDwyND4+MjQ7Zm9yKG89MDtvPDEwO28rKyl5VVtvXT00OCtvJnlzO2Zvcih0PTEwO3Q8PTE1O3QrKyl5VVt0XT02NSt0LTEwJnlzfWZ1bmN0aW9uIFRxKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO3JldHVybiBkPWUuaS10LmcvMix2PW4uaS10LmcvMixrPWUuai10LmcvMixDPW4uai10LmcvMixvPWUuZyt0LmcvMixoPW4uZyt0LmcvMixyPWUuZit0LmcvMixzPW4uZit0LmcvMixkPHYraCYmdjxkJiZrPEMrcyYmQzxrfHx2PGQrbyYmZDx2JiZDPGsrciYmazxDfHxkPHYraCYmdjxkJiZrPEMmJkM8aytyPyEwOnY8ZCtvJiZkPHYmJms8QytzJiZDPGt9ZnVuY3Rpb24gRnZuKHQpe3ZhciBlLG4scixzLG87cz11KFEodCwoVGUoKSwkMikpLDIxKSxvPXUoUSh0LHBHKSwyMSksbj1uZXcgJGUodC5mLmErdC5kLmIrdC5kLmMsdC5mLmIrdC5kLmQrdC5kLmEpLGU9bmV3IHhvKG4pLHMuSGMoKEFsKCksSnkpKSYmKHI9dShRKHQsRTcpLDgpLG8uSGMoKGxsKCksUjcpKSYmKHIuYTw9MCYmKHIuYT0yMCksci5iPD0wJiYoci5iPTIwKSksZS5hPWIuTWF0aC5tYXgobi5hLHIuYSksZS5iPWIuTWF0aC5tYXgobi5iLHIuYikpLGplKFJlKFEodCx1aHQpKSl8fGkzbih0LG4sZSl9ZnVuY3Rpb24gTnZuKHQsZSl7dmFyIG4scixzLG87Zm9yKG89S28oZSwodmUoKSxtcikpLktjKCk7by5PYigpOylyPXUoby5QYigpLDExKSxuPXUoUShyLChhZSgpLEp1KSksMTApLG4mJnlmKGxmKHVmKGhmKGNmKG5ldyBDaCwwKSwuMSksdC5pW2UucF0uZCksdC5pW24ucF0uYSkpO2ZvcihzPUtvKGUsUG4pLktjKCk7cy5PYigpOylyPXUocy5QYigpLDExKSxuPXUoUShyLChhZSgpLEp1KSksMTApLG4mJnlmKGxmKHVmKGhmKGNmKG5ldyBDaCwwKSwuMSksdC5pW24ucF0uZCksdC5pW2UucF0uYSkpfWZ1bmN0aW9uIGhhdCh0KXt2YXIgZSxuLHIscyxvLGg7aWYoIXQuYyl7aWYoaD1uZXcgdXgsZT11QSxvPWUuYS56Yyh0LGUpLG89PW51bGwpe2ZvcihyPW5ldyBucihMYyh0KSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDg3KSxzPUxxKG4pLF90KHMsODgpJiZpcyhoLGhhdCh1KHMsMjYpKSksRHIoaCxuKTtlLmEuQmModCkhPW51bGwsZS5hLmdjKCk9PTB9QmhuKGgpLGl5KGgpLHQuYz1uZXcgVjMoKHUoQXQoV3QoKEhwKCksTG4pLm8pLDE1KSwxOCksaC5pKSxoLmcpLHNsKHQpLmImPS0zM31yZXR1cm4gdC5jfWZ1bmN0aW9uIEg1dCh0KXt2YXIgZTtpZih0LmMhPTEwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxPSCkpKSk7c3dpdGNoKGU9dC5hLGUpe2Nhc2UgMTEwOmU9MTA7YnJlYWs7Y2FzZSAxMTQ6ZT0xMzticmVhaztjYXNlIDExNjplPTk7YnJlYWs7Y2FzZSA5MjpjYXNlIDEyNDpjYXNlIDQ2OmNhc2UgOTQ6Y2FzZSA0NTpjYXNlIDYzOmNhc2UgNDI6Y2FzZSA0MzpjYXNlIDEyMzpjYXNlIDEyNTpjYXNlIDQwOmNhc2UgNDE6Y2FzZSA5MTpjYXNlIDkzOmJyZWFrO2RlZmF1bHQ6dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX1yZXR1cm4gZX1mdW5jdGlvbiBfdWUodCl7dmFyIGUsbixyLHMsbztpZih0Lmw9PTAmJnQubT09MCYmdC5oPT0wKXJldHVybiIwIjtpZih0Lmg9PU5JJiZ0Lm09PTAmJnQubD09MClyZXR1cm4iLTkyMjMzNzIwMzY4NTQ3NzU4MDgiO2lmKHQuaD4+MTkpcmV0dXJuIi0iK191ZShyRSh0KSk7Zm9yKG49dCxyPSIiOyEobi5sPT0wJiZuLm09PTAmJm4uaD09MCk7KXtpZihzPVZydChHcSksbj15eHQobixzLCEwKSxlPSIiK1JIdChoYiksIShuLmw9PTAmJm4ubT09MCYmbi5oPT0wKSlmb3Iobz05LWUubGVuZ3RoO28+MDtvLS0pZT0iMCIrZTtyPWUrcn1yZXR1cm4gcn1mdW5jdGlvbiBCdm4oKXtpZighT2JqZWN0LmNyZWF0ZXx8IU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKXJldHVybiExO3ZhciB0PSJfX3Byb3RvX18iLGU9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlW3RdIT09dm9pZCAwKXJldHVybiExO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpO3JldHVybiEobi5sZW5ndGghPTB8fChlW3RdPTQyLGVbdF0hPT00Mil8fE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLmxlbmd0aD09MCl9ZnVuY3Rpb24gUnZuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihlPSExLG49MCxzPW5ldyBTKHQuZC5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksMjkpLHIucD1uKyssaD1uZXcgUyhyLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEwKSwhZSYmIUY4KFUwKG8pKSYmKGU9ITApO2Q9amkoKGFvKCksaDApLGx0KGN0KFhTLDEpLG9lLDEwMywwLFt6aCxDZl0pKSxlfHwodmYoZCxyZyksdmYoZCxuZykpLHQuYT1uZXcgX2VlKGQpLFh1KHQuZiksWHUodC5iKSxYdSh0LmUpLFh1KHQuZyl9ZnVuY3Rpb24ganZuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE07Zm9yKHI9bi5jLHM9bi5kLGQ9XzEoZS5jKSx2PV8xKGUuZCkscj09ZS5jPyhkPUw1dCh0LGQscyksdj1PYWUoZS5kKSk6KGQ9T2FlKGUuYyksdj1MNXQodCx2LHMpKSxrPW5ldyBEUihlLmEpLGZzKGssZCxrLmEsay5hLmEpLGZzKGssdixrLmMuYixrLmMpLGg9ZS5jPT1yLE09bmV3IHdxdCxvPTA7bzxrLmItMTsrK28pQz1uZXcgZmEodShaZihrLG8pLDgpLHUoWmYoayxvKzEpLDgpKSxoJiZvPT0wfHwhaCYmbz09ay5iLTI/TS5iPUM6bGUoTS5hLEMpO3JldHVybiBNfWZ1bmN0aW9uICR2bih0LGUpe3ZhciBuLHIscyxvO2lmKG89dC5qLmctZS5qLmcsbyE9MClyZXR1cm4gbztpZihuPXUoUSh0LChUZSgpLHRwKSksMTkpLHI9dShRKGUsdHApLDE5KSxuJiZyJiYocz1uLmEtci5hLHMhPTApKXJldHVybiBzO3N3aXRjaCh0LmouZyl7Y2FzZSAxOnJldHVybiBNcyh0Lm4uYSxlLm4uYSk7Y2FzZSAyOnJldHVybiBNcyh0Lm4uYixlLm4uYik7Y2FzZSAzOnJldHVybiBNcyhlLm4uYSx0Lm4uYSk7Y2FzZSA0OnJldHVybiBNcyhlLm4uYix0Lm4uYik7ZGVmYXVsdDp0aHJvdyBpdChuZXcgTm8oRTZ0KSl9fWZ1bmN0aW9uIFY1dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx2O2lmKGowKChLTSgpLG5ldyBhcihscihVMChlKS5hLktjKCksbmV3IHopKSkpPj10LmF8fCFMNHQoZSxuKSlyZXR1cm4tMTtpZihGOCh1KHIuS2IoZSksMjApKSlyZXR1cm4gMTtmb3Iocz0wLGg9dShyLktiKGUpLDIwKS5LYygpO2guT2IoKTspaWYobz11KGguUGIoKSwxNyksdj1vLmMuaT09ZT9vLmQuaTpvLmMuaSxkPVY1dCh0LHYsbixyKSxkPT0tMXx8KHM9Yi5NYXRoLm1heChzLGQpLHM+dC5jLTEpKXJldHVybi0xO3JldHVybiBzKzF9ZnVuY3Rpb24gU3VlKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKFZ0KGUpPT09VnQodCkpcmV0dXJuITA7aWYoIV90KGUsMTUpfHwocj11KGUsMTUpLGQ9dC5nYygpLHIuZ2MoKSE9ZCkpcmV0dXJuITE7aWYoaD1yLktjKCksdC5uaSgpKXtmb3Iobj0wO248ZDsrK24paWYocz10LmtpKG4pLG89aC5QYigpLHM9PW51bGw/byE9bnVsbDoheWkocyxvKSlyZXR1cm4hMX1lbHNlIGZvcihuPTA7bjxkOysrbilpZihzPXQua2kobiksbz1oLlBiKCksVnQocykhPT1WdChvKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBBdWUodCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYodC5mPjApe2lmKHQucWooKSxlIT1udWxsKXtmb3Iobz0wO288dC5kLmxlbmd0aDsrK28paWYobj10LmRbb10sbil7Zm9yKHI9dShuLmcsMzY3KSxkPW4uaSxoPTA7aDxkOysraClpZihzPXJbaF0seWkoZSxzLmRkKCkpKXJldHVybiEwfX1lbHNlIGZvcihvPTA7bzx0LmQubGVuZ3RoOysrbylpZihuPXQuZFtvXSxuKXtmb3Iocj11KG4uZywzNjcpLGQ9bi5pLGg9MDtoPGQ7KytoKWlmKHM9cltoXSxWdChlKT09PVZ0KHMuZGQoKSkpcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIHp2bih0LGUsbil7dmFyIHIscyxvLGg7dnIobiwiT3J0aG9nb25hbGx5IHJvdXRpbmcgaGllcmFyY2hpY2FsIHBvcnQgZWRnZXMiLDEpLHQuYT0wLHI9TDNuKGUpLE80bihlLHIpLGc0bih0LGUsciksSTVuKGUpLHM9dShRKGUsKFRlKCksY3MpKSw5OCksbz1lLmIsQ2hlKChBbigwLG8uYy5sZW5ndGgpLHUoby5jWzBdLDI5KSkscyxlKSxDaGUodShOZShvLG8uYy5sZW5ndGgtMSksMjkpLHMsZSksaD1lLmIsQmxlKChBbigwLGguYy5sZW5ndGgpLHUoaC5jWzBdLDI5KSkpLEJsZSh1KE5lKGgsaC5jLmxlbmd0aC0xKSwyOSkpLG9yKG4pfWZ1bmN0aW9uIEc1dCh0KXtzd2l0Y2godCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gdC00ODw8MjQ+PjI0O2Nhc2UgOTc6Y2FzZSA5ODpjYXNlIDk5OmNhc2UgMTAwOmNhc2UgMTAxOmNhc2UgMTAyOnJldHVybiB0LTk3KzEwPDwyND4+MjQ7Y2FzZSA2NTpjYXNlIDY2OmNhc2UgNjc6Y2FzZSA2ODpjYXNlIDY5OmNhc2UgNzA6cmV0dXJuIHQtNjUrMTA8PDI0Pj4yNDtkZWZhdWx0OnRocm93IGl0KG5ldyBsZCgiSW52YWxpZCBoZXhhZGVjaW1hbCIpKX19ZnVuY3Rpb24gcXZuKHQsZSxuKXt2YXIgcixzLG8saDtmb3IodnIobiwiUHJvY2Vzc29yIG9yZGVyIG5vZGVzIiwyKSx0LmE9WHQoeWUoUShlLChndigpLGdfdCkpKSkscz1uZXcgWmksaD1laShlLmIsMCk7aC5iIT1oLmQuYzspbz11KHRpKGgpLDg2KSxqZShSZShRKG8sKGZjKCksWHkpKSkpJiZmcyhzLG8scy5jLmIscy5jKTtyPShabihzLmIhPTApLHUocy5hLmEuYyw4NikpLFdsZSh0LHIpLCFuLmImJnBpdChuLDEpLEs1dCh0LHIsMC1YdCh5ZShRKHIsKGZjKCksSUcpKSkpLzIsMCksIW4uYiYmcGl0KG4sMSksb3Iobil9ZnVuY3Rpb24gQ3EoKXtDcT1aLGk3dD1uZXcgejMoIlNQSVJBTCIsMCksdDd0PW5ldyB6MygiTElORV9CWV9MSU5FIiwxKSxlN3Q9bmV3IHozKCJNQU5IQVRUQU4iLDIpLEpFdD1uZXcgejMoIkpJVFRFUiIsMyksVnV0PW5ldyB6MygiUVVBRFJBTlRTX0xJTkVfQllfTElORSIsNCkscjd0PW5ldyB6MygiUVVBRFJBTlRTX01BTkhBVFRBTiIsNSksbjd0PW5ldyB6MygiUVVBRFJBTlRTX0pJVFRFUiIsNiksWkV0PW5ldyB6MygiQ09NQklORV9MSU5FX0JZX0xJTkVfTUFOSEFUVEFOIiw3KSxRRXQ9bmV3IHozKCJDT01CSU5FX0pJVFRFUl9NQU5IQVRUQU4iLDgpfWZ1bmN0aW9uIEx1ZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGs7Zm9yKHY9T3N0KHQsbiksaz1Pc3QoZSxuKSxzPSExO3YmJmsmJihyfHxSMW4odixrLG4pKTspaD1Pc3QodixuKSxkPU9zdChrLG4pLGtEKGUpLGtEKHQpLG89di5jLEJhdCh2LCExKSxCYXQoaywhMSksbj8obHkoZSxrLnAsbyksZS5wPWsucCxseSh0LHYucCsxLG8pLHQucD12LnApOihseSh0LHYucCxvKSx0LnA9di5wLGx5KGUsay5wKzEsbyksZS5wPWsucCksRW8odixudWxsKSxFbyhrLG51bGwpLHY9aCxrPWQscz0hMDtyZXR1cm4gc31mdW5jdGlvbiBIdm4odCxlLG4scil7dmFyIHMsbyxoLGQsdjtmb3Iocz0hMSxvPSExLGQ9bmV3IFMoci5qKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMSksVnQoUShoLChhZSgpLF9pKSkpPT09VnQobikmJihoLmcuYy5sZW5ndGg9PTA/aC5lLmMubGVuZ3RoPT0wfHwocz0hMCk6bz0hMCk7cmV0dXJuIHY9MCxzJiZzXm8/dj1uLmo9PSh2ZSgpLFBuKT8tdC5lW3IuYy5wXVtyLnBdOmUtdC5lW3IuYy5wXVtyLnBdOm8mJnNebz92PXQuZVtyLmMucF1bci5wXSsxOnMmJm8mJih2PW4uaj09KHZlKCksUG4pPzA6ZS8yKSx2fWZ1bmN0aW9uIGZhdCh0LGUsbixyLHMsbyxoLGQpe3ZhciB2LGssQztmb3Iodj0wLGUhPW51bGwmJih2Xj1WZyhlLnRvTG93ZXJDYXNlKCkpKSxuIT1udWxsJiYodl49VmcobikpLHIhPW51bGwmJih2Xj1WZyhyKSksaCE9bnVsbCYmKHZePVZnKGgpKSxkIT1udWxsJiYodl49VmcoZCkpLGs9MCxDPW8ubGVuZ3RoO2s8QztrKyspdl49Vmcob1trXSk7dD92fD0yNTY6diY9LTI1NyxzP3Z8PTE2OnYmPS0xNyx0aGlzLmY9dix0aGlzLmk9ZT09bnVsbD9udWxsOihPbihlKSxlKSx0aGlzLmE9bix0aGlzLmQ9cix0aGlzLmo9byx0aGlzLmc9aCx0aGlzLmU9ZH1mdW5jdGlvbiBVNXQodCxlLG4pe3ZhciByLHM7c3dpdGNoKHM9bnVsbCxlLmcpe2Nhc2UgMTpzPShqdSgpLGo3dCk7YnJlYWs7Y2FzZSAyOnM9KGp1KCksejd0KX1zd2l0Y2gocj1udWxsLG4uZyl7Y2FzZSAxOnI9KGp1KCksJDd0KTticmVhaztjYXNlIDI6cj0oanUoKSxSN3QpO2JyZWFrO2Nhc2UgMzpyPShqdSgpLHE3dCk7YnJlYWs7Y2FzZSA0OnI9KGp1KCksSDd0KX1yZXR1cm4gcyYmcj8keCh0LmosbmV3IG1DKG5ldyB5bChsdChjdChZeG4sMSksRGUsMTY5LDAsW3UoTHIocyksMTY5KSx1KExyKHIpLDE2OSldKSkpKTood24oKSx3bigpLGlvKX1mdW5jdGlvbiBWdm4odCl7dmFyIGUsbixyO3N3aXRjaChlPXUoUSh0LChUZSgpLEU3KSksOCksSnQodCxFNyxuZXcgJGUoZS5iLGUuYSkpLHUoUSh0LElkKSwyNDgpLmcpe2Nhc2UgMTpKdCh0LElkLCh0MCgpLFdHKSk7YnJlYWs7Y2FzZSAyOkp0KHQsSWQsKHQwKCksR0cpKTticmVhaztjYXNlIDM6SnQodCxJZCwodDAoKSxHTykpO2JyZWFrO2Nhc2UgNDpKdCh0LElkLCh0MCgpLFVPKSl9KHQucT90LnE6KHduKCksd24oKSx1MCkpLl9iKFV5KSYmKG49dShRKHQsVXkpLDgpLHI9bi5hLG4uYT1uLmIsbi5iPXIpfWZ1bmN0aW9uIE11ZSh0LGUsbixyLHMsbyl7aWYodGhpcy5iPW4sdGhpcy5kPXMsdD49ZS5sZW5ndGgpdGhyb3cgaXQobmV3IHlvKCJHcmVlZHkgU3dpdGNoRGVjaWRlcjogRnJlZSBsYXllciBub3QgaW4gZ3JhcGguIikpO3RoaXMuYz1lW3RdLHRoaXMuZT1uZXcgWU0ociksbWl0KHRoaXMuZSx0aGlzLmMsKHZlKCksQm4pKSx0aGlzLmk9bmV3IFlNKHIpLG1pdCh0aGlzLmksdGhpcy5jLEhuKSx0aGlzLmY9bmV3IFNLdCh0aGlzLmMpLHRoaXMuYT0hbyYmcy5pJiYhcy5zJiZ0aGlzLmNbMF0uaz09KFZuKCksa3MpLHRoaXMuYSYmYXBuKHRoaXMsdCxlLmxlbmd0aCl9ZnVuY3Rpb24gRHVlKHQsZSl7dmFyIG4scixzLG8saCxkO289IXQuQi5IYygobGwoKSxjUCkpLGg9dC5CLkhjKEFmdCksdC5hPW5ldyBfaWUoaCxvLHQuYyksdC5uJiZQdnQodC5hLm4sdC5uKSxoZXQodC5nLChLZigpLGV1KSx0LmEpLGV8fChyPW5ldyBhXygxLG8sdC5jKSxyLm4uYT10LmssengodC5wLCh2ZSgpLFBuKSxyKSxzPW5ldyBhXygxLG8sdC5jKSxzLm4uZD10LmssengodC5wLG1yLHMpLGQ9bmV3IGFfKDAsbyx0LmMpLGQubi5jPXQuayx6eCh0LnAsQm4sZCksbj1uZXcgYV8oMCxvLHQuYyksbi5uLmI9dC5rLHp4KHQucCxIbixuKSl9ZnVuY3Rpb24gR3ZuKHQpe3ZhciBlLG4scjtzd2l0Y2goZT11KFEodC5kLChUZSgpLGVnKSksMjE4KSxlLmcpe2Nhc2UgMjpuPXh4bih0KTticmVhaztjYXNlIDM6bj0ocj1uZXcgaGUsbHMoUmkod3UoV28oV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZC5iLDE2KSksbmV3IE5YKSxuZXcgQlgpLG5ldyBIVCksbmV3IF9YKSxuZXcgVXR0KHIpKSxyKTticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyBObygiQ29tcGFjdGlvbiBub3Qgc3VwcG9ydGVkIGZvciAiK2UrIiBlZGdlcy4iKSl9SDNuKHQsbiksdmEobmV3IFNtKHQuZyksbmV3IFZ0dCh0KSl9ZnVuY3Rpb24gVXZuKHQsZSl7dmFyIG47cmV0dXJuIG49bmV3IGthLGUmJk1vKG4sdSh0cih0LmEsbFApLDk0KSksX3QoZSw0NzApJiZNbyhuLHUodHIodC5hLGhQKSw5NCkpLF90KGUsMzU0KT8oTW8obix1KHRyKHQuYSxxbyksOTQpKSxuKTooX3QoZSw4MikmJk1vKG4sdSh0cih0LmEsYnIpLDk0KSksX3QoZSwyMzkpPyhNbyhuLHUodHIodC5hLHJzKSw5NCkpLG4pOl90KGUsMTg2KT8oTW8obix1KHRyKHQuYSxnbCksOTQpKSxuKTooX3QoZSwzNTIpJiZNbyhuLHUodHIodC5hLFlzKSw5NCkpLG4pKX1mdW5jdGlvbiBKZigpe0pmPVosYzc9bmV3IGVvKCh1aSgpLFpHKSxwZSgxKSksYlY9bmV3IGVvKFcyLDgwKSxrYmU9bmV3IGVvKGZBdCw1KSxkYmU9bmV3IGVvKFc2LEdFKSx5YmU9bmV3IGVvKEVmdCxwZSgxKSkseGJlPW5ldyBlbyhUZnQsKE5uKCksITApKSx4N3Q9bmV3IE93KDUwKSx2YmU9bmV3IGVvKFUyLHg3dCksdjd0PUtHLGs3dD1LUyxnYmU9bmV3IGVvKGdmdCwhMSkseTd0PXRQLHdiZT14YixiYmU9RzIscGJlPW81LG1iZT1ReSxtN3Q9KHE0dCgpLGFiZSksbmx0PWxiZSxwVj1zYmUsZWx0PW9iZSxFN3Q9dWJlfWZ1bmN0aW9uIFd2bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2Zvcih2PW5ldyBPSnQsZD1uZXcgUyh0LmEpO2QuYTxkLmMuYy5sZW5ndGg7KWlmKGg9dShKKGQpLDEwKSxoLmshPShWbigpLGtzKSl7Zm9yKFdibih2LGgsbmV3IENhKSxvPW5ldyBhcihscihEcyhoKS5hLktjKCksbmV3IHopKTt6cihvKTspaWYocz11KE1yKG8pLDE3KSwhKHMuYy5pLms9PWtzfHxzLmQuaS5rPT1rcykpZm9yKHI9ZWkocy5hLDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSw4KSxlPW4sZF8odixuZXcgZzgoZS5hLGUuYikpfXJldHVybiB2fWZ1bmN0aW9uIGRhdCgpe2RhdD1aLHdTdD1uZXcgVmkoQmN0KSxiU3Q9KFVDKCksVk8pLHBTdD1uZXcgbW4oJGN0LGJTdCksZ1N0PShqRCgpLFZHKSwkM2U9bmV3IG1uKG84dCxnU3QpLGRTdD0odUkoKSxuZnQpLGozZT1uZXcgbW4oYzh0LGRTdCksTjNlPW5ldyBtbihSY3QsbnVsbCksZlN0PShiRCgpLHFHKSxSM2U9bmV3IG1uKGpjdCxmU3QpLGhTdD0oelIoKSxKaHQpLEkzZT1uZXcgbW4odTh0LGhTdCksTzNlPW5ldyBtbihsOHQsKE5uKCksITEpKSxQM2U9bmV3IG1uKGg4dCxwZSg2NCkpLEYzZT1uZXcgbW4oZjh0LCEwKSxCM2U9ZWZ0fWZ1bmN0aW9uIEl1ZSh0KXt2YXIgZSxuLHIscyxvLGg7aWYodC5hPT1udWxsKWlmKHQuYT1OdChwbCxvMCwyNSx0LmMuYi5jLmxlbmd0aCwxNiwxKSx0LmFbMF09ITEsVXModC5jLChUZSgpLHBodCkpKWZvcihyPXUoUSh0LmMscGh0KSwxNSksbj1yLktjKCk7bi5PYigpOyllPXUobi5QYigpLDE5KS5hLGU+MCYmZTx0LmEubGVuZ3RoJiYodC5hW2VdPSExKTtlbHNlIGZvcihoPW5ldyBTKHQuYy5iKSxoLmE8aC5jLmMubGVuZ3RoJiZKKGgpLHM9MTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwyOSksdC5hW3MrK109QTJuKG8pfWZ1bmN0aW9uIE91ZSh0LGUpe3ZhciBuLHIscyxvO3N3aXRjaChzPXQuYixlKXtjYXNlIDE6e3QuYnw9MSx0LmJ8PTQsdC5ifD04O2JyZWFrfWNhc2UgMjp7dC5ifD0yLHQuYnw9NCx0LmJ8PTg7YnJlYWt9Y2FzZSA0Ont0LmJ8PTEsdC5ifD0yLHQuYnw9NCx0LmJ8PTg7YnJlYWt9Y2FzZSAzOnt0LmJ8PTE2LHQuYnw9ODticmVha31jYXNlIDA6e3QuYnw9MzIsdC5ifD0xNix0LmJ8PTgsdC5ifD0xLHQuYnw9Mix0LmJ8PTQ7YnJlYWt9fWlmKHQuYiE9cyYmdC5jKWZvcihyPW5ldyBucih0LmMpO3IuZSE9ci5pLmdjKCk7KW89dShkcihyKSw0NzMpLG49c2wobyksZ3kobixlKX1mdW5jdGlvbiBQdWUodCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRztmb3Iocz0hMSxoPWUsZD0wLHY9aC5sZW5ndGg7ZDx2OysrZClvPWhbZF0samUoKE5uKCksISFvLmUpKSYmIXUoTmUodC5iLG8uZS5wKSwyMTQpLnMmJihzPXN8KGs9by5lLEM9dShOZSh0LmIsay5wKSwyMTQpLE09Qy5lLGo9bUh0KG4sTS5sZW5ndGgpLEg9TVtqXVswXSxILms9PShWbigpLGtzKT9NW2pdPUF3bihvLE1bal0sbj8odmUoKSxCbik6KHZlKCksSG4pKTpDLmMuVGYoTSxuKSxHPXlJKHQsQyxuLHIpLGo1dChDLmUsQy5vLG4pLEcpKTtyZXR1cm4gc31mdW5jdGlvbiBGdWUodCxlKXt2YXIgbixyLHMsbyxoO2ZvcihvPSghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKS5pLHM9bmV3IG5yKCghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSxWdChxZShyLCh1aSgpLHM1KSkpIT09VnQoKEcwKCksWlMpKSYmKGg9dShxZShlLE83KSwxNDkpLG49dShxZShyLE83KSwxNDkpLChoPT1ufHxoJiZnbXQoaCxuKSkmJighci5hJiYoci5hPW5ldyBmZShycyxyLDEwLDExKSksci5hKS5pIT0wJiYobys9RnVlKHQscikpKTtyZXR1cm4gb31mdW5jdGlvbiBZdm4odCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKHI9MCxkPTAsaD1uZXcgUyh0LmQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEwMSkscz11KEJsKFJpKG5ldyBUbihudWxsLG5ldyBfbihvLmosMTYpKSxuZXcgR1QpLGMyKG5ldyBrZSxuZXcgY2UsbmV3IFhuLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFsoTzEoKSxVbCldKSkpLDE1KSxuPW51bGwscjw9ZD8obj0odmUoKSxQbikscis9cy5nYygpKTpkPHImJihuPSh2ZSgpLG1yKSxkKz1zLmdjKCkpLGU9bixscyh3dShzLk9jKCksbmV3IGpOKSxuZXcgS3R0KGUpKX1mdW5jdGlvbiBLdm4odCl7dmFyIGUsbixyLHMsbyxoLGQsdjtmb3IodC5iPW5ldyBRb2UobmV3IHlsKCh2ZSgpLGx0KGN0KFhhLDEpLHhjLDYxLDAsW1pvLFBuLEhuLG1yLEJuXSkpKSxuZXcgeWwoKG52KCksbHQoY3QobWx0LDEpLG9lLDM2MSwwLFtEdixwYixNdl0pKSkpLGg9bHQoY3QoWGEsMSkseGMsNjEsMCxbWm8sUG4sSG4sbXIsQm5dKSxkPTAsdj1oLmxlbmd0aDtkPHY7KytkKWZvcihvPWhbZF0sbj1sdChjdChtbHQsMSksb2UsMzYxLDAsW0R2LHBiLE12XSkscj0wLHM9bi5sZW5ndGg7cjxzOysrcillPW5bcl0sWGRuKHQuYixvLGUsbmV3IGhlKX1mdW5jdGlvbiBOdWUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtpZihoPXUodShBaSh0LnIsZSksMjEpLDg0KSxkPXQudS5IYygoWnUoKSxDYikpLG49dC51LkhjKG5BKSxyPXQudS5IYyhlQSksaz10LnUuSGMoUTYpLE09dC5CLkhjKChsbCgpLHNVKSksQz0hbiYmIXImJihrfHxoLmdjKCk9PTIpLFh3bih0LGUpLHM9bnVsbCx2PW51bGwsZCl7Zm9yKG89aC5LYygpLHM9dShvLlBiKCksMTExKSx2PXM7by5PYigpOyl2PXUoby5QYigpLDExMSk7cy5kLmI9MCx2LmQuYz0wLEMmJiFzLmEmJihzLmQuYz0wKX1NJiYoWTBuKGgpLGQmJihzLmQuYj0wLHYuZC5jPTApKX1mdW5jdGlvbiBCdWUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtpZihoPXUodShBaSh0LnIsZSksMjEpLDg0KSxkPXQudS5IYygoWnUoKSxDYikpLG49dC51LkhjKG5BKSxyPXQudS5IYyhlQSksdj10LnUuSGMoUTYpLE09dC5CLkhjKChsbCgpLHNVKSksaz0hbiYmIXImJih2fHxoLmdjKCk9PTIpLGh5bih0LGUpLEM9bnVsbCxzPW51bGwsZCl7Zm9yKG89aC5LYygpLEM9dShvLlBiKCksMTExKSxzPUM7by5PYigpOylzPXUoby5QYigpLDExMSk7Qy5kLmQ9MCxzLmQuYT0wLGsmJiFDLmEmJihDLmQuYT0wKX1NJiYoSzBuKGgpLGQmJihDLmQuZD0wLHMuZC5hPTApKX1mdW5jdGlvbiBSdWUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEM7aWYocz1lLmssZS5wPj0wKXJldHVybiExO2lmKGUucD1uLmIsbGUobi5lLGUpLHM9PShWbigpLHRhKXx8cz09SGMpe2ZvcihoPW5ldyBTKGUuaik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDExKSxDPShyPW5ldyBTKG5ldyBUcihvKS5hLmcpLG5ldyBRdChyKSk7R28oQy5hKTspaWYoaz11KEooQy5hKSwxNykuZCxkPWsuaSx2PWQuayxlLmMhPWQuYyYmKHY9PXRhfHx2PT1IYykmJlJ1ZSh0LGQsbikpcmV0dXJuITB9cmV0dXJuITB9ZnVuY3Rpb24gX3EodCl7dmFyIGU7cmV0dXJuIHQuRGImNjQ/ZjV0KHQpOihlPW5ldyBfaChmNXQodCkpLGUuYSs9IiAoY2hhbmdlYWJsZTogIixMZyhlLCh0LkJiJnhmKSE9MCksZS5hKz0iLCB2b2xhdGlsZTogIixMZyhlLCh0LkJiJkR5KSE9MCksZS5hKz0iLCB0cmFuc2llbnQ6ICIsTGcoZSwodC5CYiZFeSkhPTApLGUuYSs9IiwgZGVmYXVsdFZhbHVlTGl0ZXJhbDogIixnbyhlLHQuaiksZS5hKz0iLCB1bnNldHRhYmxlOiAiLExnKGUsKHQuQmImSHUpIT0wKSxlLmErPSIsIGRlcml2ZWQ6ICIsTGcoZSwodC5CYiZtZCkhPTApLGUuYSs9IikiLGUuYSl9ZnVuY3Rpb24gWHZuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0sajtmb3Iocz10d24odC5kKSxoPXUoUSh0LmIsKG9fKCksZzd0KSksMTE2KSxkPWguYitoLmMsdj1oLmQraC5hLEM9cy5kLmEqdC5lK2Qsaz1zLmIuYSp0LmYrdixocHQodC5iLG5ldyAkZShDLGspKSxqPW5ldyBTKHQuZyk7ai5hPGouYy5jLmxlbmd0aDspTT11KEooaiksNTYyKSxlPU0uZy1zLmEuYSxuPU0uaS1zLmMuYSxyPUxpKGxaZShuZXcgJGUoZSxuKSxNLmEsTS5iKSxmZChxTShuYyhmMnQoTS5lKSksTS5kKk0uYSxNLmMqTS5iKSwtLjUpKSxvPWQydChNLmUpLCRLZShNLmUsaWEocixvKSl9ZnVuY3Rpb24gUXZuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7Zm9yKHY9TnQoYWEsZWUsMTA0LCh2ZSgpLGx0KGN0KFhhLDEpLHhjLDYxLDAsW1pvLFBuLEhuLG1yLEJuXSkpLmxlbmd0aCwwLDIpLG89bHQoY3QoWGEsMSkseGMsNjEsMCxbWm8sUG4sSG4sbXIsQm5dKSxoPTAsZD1vLmxlbmd0aDtoPGQ7KytoKXM9b1toXSx2W3MuZ109TnQoYWEsdm8sMjUsdC5jW3MuZ10sMTUsMSk7cmV0dXJuIHNhZSh2LHQsUG4pLHNhZSh2LHQsbXIpLF9zdCh2LHQsUG4sZSxuLHIpLF9zdCh2LHQsSG4sZSxuLHIpLF9zdCh2LHQsbXIsZSxuLHIpLF9zdCh2LHQsQm4sZSxuLHIpLHZ9ZnVuY3Rpb24gWnZuKHQsZSxuKXtpZihUbCh0LmEsZSkpe2lmKEkwKHUodHIodC5hLGUpLDUzKSxuKSlyZXR1cm4gMX1lbHNlIGtpKHQuYSxlLG5ldyBIcyk7aWYoVGwodC5hLG4pKXtpZihJMCh1KHRyKHQuYSxuKSw1MyksZSkpcmV0dXJuLTF9ZWxzZSBraSh0LmEsbixuZXcgSHMpO2lmKFRsKHQuYixlKSl7aWYoSTAodSh0cih0LmIsZSksNTMpLG4pKXJldHVybi0xfWVsc2Uga2kodC5iLGUsbmV3IEhzKTtpZihUbCh0LmIsbikpe2lmKEkwKHUodHIodC5iLG4pLDUzKSxlKSlyZXR1cm4gMX1lbHNlIGtpKHQuYixuLG5ldyBIcyk7cmV0dXJuIDB9ZnVuY3Rpb24gVzV0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsaztpZihuPT1udWxsKXtmb3Iocz11KHQuZywxMTkpLGQ9MDtkPHQuaTsrK2QpaWYoaD1zW2RdLGguYWsoKT09ZSlyZXR1cm4gQmEodCxoLHIpfXJldHVybiBvPSh0bygpLHUoZSw2NikuT2ooKT91KG4sNzIpOlpkKGUsbikpLHhsKHQuZSk/KGs9IVhEKHQsZSkscj1aYyh0LG8sciksdj1lLiRqKCk/R3AodCwzLGUsbnVsbCxuLERFKHQsZSxuLF90KGUsOTkpJiYodShlLDE4KS5CYiZLYSkhPTApLGspOkdwKHQsMSxlLGUuemooKSxuLC0xLGspLHI/ci5FaSh2KTpyPXYpOnI9WmModCxvLHIpLHJ9ZnVuY3Rpb24gSnZuKHQpe3ZhciBlLG4scixzLG8saDt0LnE9PSh1YSgpLGcwKXx8dC5xPT1HY3x8KHM9dC5mLm4uZCskaih1KHBvKHQuYiwodmUoKSxQbikpLDEyNCkpK3QuYyxlPXQuZi5uLmErJGoodShwbyh0LmIsbXIpLDEyNCkpK3QuYyxyPXUocG8odC5iLEhuKSwxMjQpLGg9dShwbyh0LmIsQm4pLDEyNCksbz1iLk1hdGgubWF4KDAsci5uLmQtcyksbz1iLk1hdGgubWF4KG8saC5uLmQtcyksbj1iLk1hdGgubWF4KDAsci5uLmEtZSksbj1iLk1hdGgubWF4KG4saC5uLmEtZSksci5uLmQ9byxoLm4uZD1vLHIubi5hPW4saC5uLmE9bil9ZnVuY3Rpb24gdG1uKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtmb3IodnIoZSwiUmVzdG9yaW5nIHJldmVyc2VkIGVkZ2VzIiwxKSx2PW5ldyBTKHQuYik7di5hPHYuYy5jLmxlbmd0aDspZm9yKGQ9dShKKHYpLDI5KSxDPW5ldyBTKGQuYSk7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDEwKSxqPW5ldyBTKGsuaik7ai5hPGouYy5jLmxlbmd0aDspZm9yKE09dShKKGopLDExKSxoPXdkKE0uZykscj1oLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGplKFJlKFEobiwoYWUoKSxxMSkpKSkmJmJ2KG4sITEpO29yKGUpfWZ1bmN0aW9uIGp1ZSgpe3RoaXMuYj1uZXcgYTIsdGhpcy5kPW5ldyBhMix0aGlzLmU9bmV3IGEyLHRoaXMuYz1uZXcgYTIsdGhpcy5hPW5ldyBfcix0aGlzLmY9bmV3IF9yLEozKFdzLG5ldyBJWixuZXcgT1opLEozKEFTdCxuZXcgdGMsbmV3IEtjKSxKMyhON3QsbmV3IHppLG5ldyB6TCksSjMoQjd0LG5ldyBIWixuZXcgVlopLEozKCQ0ZSxuZXcgc3gsbmV3IGttKSxKMyhLeG4sbmV3IFBaLG5ldyBGWiksSjMoWnhuLG5ldyBOWixuZXcgQlopLEozKFh4bixuZXcgUlosbmV3IGpaKSxKMyhReG4sbmV3ICRaLG5ldyBBYyksSjMoZTZuLG5ldyB6WixuZXcgUVQpfWZ1bmN0aW9uICR1ZSh0KXt2YXIgZSxuLHIscyxvLGg7cmV0dXJuIG89MCxlPURoKHQpLGUuQmooKSYmKG98PTQpLHQuQmImSHUmJihvfD0yKSxfdCh0LDk5KT8obj11KHQsMTgpLHM9bm8obiksbi5CYiZkYyYmKG98PTMyKSxzJiYoSm4oWW0ocykpLG98PTgsaD1zLnQsKGg+MXx8aD09LTEpJiYob3w9MTYpLHMuQmImZGMmJihvfD02NCkpLG4uQmImS2EmJihvfD1EeSksb3w9eGYpOl90KGUsNDU3KT9vfD01MTI6KHI9ZS5CaigpLHImJnIuaSYxJiYob3w9MjU2KSksdC5CYiY1MTImJihvfD0xMjgpLG99ZnVuY3Rpb24geV8odCxlKXt2YXIgbixyLHMsbyxoO2Zvcih0PXQ9PW51bGw/X3U6KE9uKHQpLHQpLHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdPUYybihlW3NdKTtmb3Iobj1uZXcgSW0saD0wLHI9MDtyPGUubGVuZ3RoJiYobz10LmluZGV4T2YoIiVzIixoKSxvIT0tMSk7KW4uYSs9IiIrUGwodD09bnVsbD9fdTooT24odCksdCksaCxvKSxoYyhuLGVbcisrXSksaD1vKzI7aWYoa1p0KG4sdCxoLHQubGVuZ3RoKSxyPGUubGVuZ3RoKXtmb3Iobi5hKz0iIFsiLGhjKG4sZVtyKytdKTtyPGUubGVuZ3RoOyluLmErPVlhLGhjKG4sZVtyKytdKTtuLmErPSJdIn1yZXR1cm4gbi5hfWZ1bmN0aW9uIGVtbih0KXt2YXIgZSxuLHIscyxvO2ZvcihvPW5ldyBYYyh0LmEuYy5sZW5ndGgpLHM9bmV3IFModC5hKTtzLmE8cy5jLmMubGVuZ3RoOyl7c3dpdGNoKHI9dShKKHMpLDEwKSxuPXUoUShyLChUZSgpLHV1KSksMTYzKSxlPW51bGwsbi5nKXtjYXNlIDE6Y2FzZSAyOmU9KGQyKCksVTQpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6ZT0oZDIoKSx3Nyl9ZT8oSnQociwoYWUoKSx0RyksKGQyKCksVTQpKSxlPT13Nz94cShyLG4sKHNvKCksdGwpKTplPT1VNCYmeHEocixuLChzbygpLG51KSkpOm8uY1tvLmMubGVuZ3RoXT1yfXJldHVybiBvfWZ1bmN0aW9uIFk1dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2ZvcihuPTAsdj1uZXcgUyhlKTt2LmE8di5jLmMubGVuZ3RoOyl7Zm9yKGQ9dShKKHYpLDExKSxWeXQodC5iLHQuZFtkLnBdKSxoPTAscz1uZXcgTDEoZC5iKTtHbyhzLmEpfHxHbyhzLmIpOylyPXUoR28ocy5hKT9KKHMuYSk6SihzLmIpLDE3KSxUWHQocik/KG89YmJ0KHQsZD09ci5jP3IuZDpyLmMpLG8+dC5kW2QucF0mJihuKz1mbXQodC5iLG8pLFVwKHQuYSxwZShvKSkpKTorK2g7Zm9yKG4rPXQuYi5kKmg7IUJDKHQuYSk7KUhtdCh0LmIsdShIeCh0LmEpLDE5KS5hKX1yZXR1cm4gbn1mdW5jdGlvbiBubW4odCxlKXt2YXIgbjtyZXR1cm4gdC5mPT0kZnQ/KG49SHcoVG8oKCR1KCkseWEpLGUpKSx0LmU/bj09NCYmZSE9KGQ2KCksdGspJiZlIT0oZDYoKSxKNikmJmUhPShkNigpLHpmdCkmJmUhPShkNigpLHFmdCk6bj09Mik6dC5kJiYodC5kLkhjKGUpfHx0LmQuSGMoS3goVG8oKCR1KCkseWEpLGUpKSl8fHQuZC5IYyhDNCgoJHUoKSx5YSksdC5iLGUpKSk/ITA6dC5mJiZPNXQoKCR1KCksdC5mKSxyRChUbyh5YSxlKSkpPyhuPUh3KFRvKHlhLGUpKSx0LmU/bj09NDpuPT0yKTohMX1mdW5jdGlvbiBybW4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTTtyZXR1cm4gaD11KHFlKG4sKHVpKCksWTYpKSw4KSx2PWguYSxDPWguYit0LHM9Yi5NYXRoLmF0YW4yKEMsdiksczwwJiYocys9TzQpLHMrPWUscz5PNCYmKHMtPU80KSxkPXUocWUocixZNiksOCksaz1kLmEsTT1kLmIrdCxvPWIuTWF0aC5hdGFuMihNLGspLG88MCYmKG8rPU80KSxvKz1lLG8+TzQmJihvLT1PNCksazEoKSx3ZigxZS0xMCksYi5NYXRoLmFicyhzLW8pPD0xZS0xMHx8cz09b3x8aXNOYU4ocykmJmlzTmFOKG8pPzA6czxvPy0xOnM+bz8xOkl3KGlzTmFOKHMpLGlzTmFOKG8pKX1mdW5jdGlvbiBnYXQodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGQ9bmV3IF9yLHI9bmV3IFModC5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWU9dShKKHIpLDU3KSxraShkLGUsbmV3IGhlKTtmb3Iocz1uZXcgUyh0LmEuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKGU9dShKKHMpLDU3KSxlLmk9Q3MsaD1lLmMuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksNTcpLHUoZWMoTG8oZC5mLG8pKSwxNSkuRmMoZSk7Zm9yKG49bmV3IFModC5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDU3KSxlLmMuJGIoKSxlLmM9dShlYyhMbyhkLmYsZSkpLDE1KTtvdWUodCl9ZnVuY3Rpb24gcGF0KHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihkPW5ldyBfcixyPW5ldyBTKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyllPXUoSihyKSw4MSksa2koZCxlLG5ldyBoZSk7Zm9yKHM9bmV3IFModC5hLmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihlPXUoSihzKSw4MSksZS5vPUNzLGg9ZS5mLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDgxKSx1KGVjKExvKGQuZixvKSksMTUpLkZjKGUpO2ZvcihuPW5ldyBTKHQuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSw4MSksZS5mLiRiKCksZS5mPXUoZWMoTG8oZC5mLGUpKSwxNSk7UWNlKHQpfWZ1bmN0aW9uIGltbih0LGUsbixyKXt2YXIgcyxvO2Zvcih2ZG4odCxlLG4sciksZnB0KGUsdC5qLWUuaituKSxkcHQoZSx0LmstZS5rK3IpLG89bmV3IFMoZS5mKTtvLmE8by5jLmMubGVuZ3RoOylzd2l0Y2gocz11KEoobyksMzI0KSxzLmEuZyl7Y2FzZSAwOmlFKHQsZS5nK3MuYi5hLDAsZS5nK3MuYy5hLGUuaS0xKTticmVhaztjYXNlIDE6aUUodCxlLmcrZS5vLGUuaStzLmIuYSx0Lm8tMSxlLmkrcy5jLmEpO2JyZWFrO2Nhc2UgMjppRSh0LGUuZytzLmIuYSxlLmkrZS5wLGUuZytzLmMuYSx0LnAtMSk7YnJlYWs7ZGVmYXVsdDppRSh0LDAsZS5pK3MuYi5hLGUuZy0xLGUuaStzLmMuYSl9fWZ1bmN0aW9uIFNxKHQsZSxuLHIscyl7dmFyIG8saCxkO3RyeXtpZihlPj10Lm8pdGhyb3cgaXQobmV3IE9wdCk7ZD1lPj41LGg9ZSYzMSxvPUYwKDEsQXIoRjAoaCwxKSkpLHM/dC5uW25dW2RdPVMxKHQubltuXVtkXSxvKTp0Lm5bbl1bZF09TnModC5uW25dW2RdLFJ3dChvKSksbz1GMChvLDEpLHI/dC5uW25dW2RdPVMxKHQubltuXVtkXSxvKTp0Lm5bbl1bZF09TnModC5uW25dW2RdLFJ3dChvKSl9Y2F0Y2godil7dGhyb3cgdj1XaSh2KSxfdCh2LDMyMCk/aXQobmV3IHlvKEZvdCt0Lm8rIioiK3QucCtOb3QrZStZYStuK0JvdCkpOml0KHYpfX1mdW5jdGlvbiBLNXQodCxlLG4scil7dmFyIHMsbyxoO2UmJihvPVh0KHllKFEoZSwoZmMoKSxucCkpKSkrcixoPW4rWHQoeWUoUShlLElHKSkpLzIsSnQoZSwkaHQscGUoQXIoVHUoYi5NYXRoLnJvdW5kKG8pKSkpKSxKdChlLG9fdCxwZShBcihUdShiLk1hdGgucm91bmQoaCkpKSkpLGUuZC5iPT0wfHxLNXQodCx1KHhqKChzPWVpKG5ldyBMcChlKS5hLmQsMCksbmV3IEV4KHMpKSksODYpLG4rWHQoeWUoUShlLElHKSkpK3QuYSxyK1h0KHllKFEoZSxNNykpKSksUShlLGpodCkhPW51bGwmJks1dCh0LHUoUShlLGpodCksODYpLG4scikpfWZ1bmN0aW9uIHNtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKHY9TmEoZS5hKSxzPVh0KHllKFEodiwoVGUoKSxxMikpKSkqMixDPVh0KHllKFEodix0NSkpKSxrPWIuTWF0aC5tYXgocyxDKSxvPU50KGFhLHZvLDI1LGUuZi1lLmMrMSwxNSwxKSxyPS1rLG49MCxkPWUuYi5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwxMCkscis9dC5hW2guYy5wXStrLG9bbisrXT1yO2ZvcihyKz10LmFbZS5hLmMucF0rayxvW24rK109cixqPW5ldyBTKGUuZSk7ai5hPGouYy5jLmxlbmd0aDspTT11KEooaiksMTApLHIrPXQuYVtNLmMucF0rayxvW24rK109cjtyZXR1cm4gb31mdW5jdGlvbiBhbW4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqO2ZvcihqPW5ldyBPcChuZXcgUCR0KHQpKSxkPWx0KGN0KGwwLDEpLFlnLDEwLDAsW2Usbl0pLHY9MCxrPWQubGVuZ3RoO3Y8azsrK3YpZm9yKGg9ZFt2XSxNPXRfKGgscikuS2MoKTtNLk9iKCk7KWZvcihDPXUoTS5QYigpLDExKSxvPW5ldyBMMShDLmIpO0dvKG8uYSl8fEdvKG8uYik7KXM9dShHbyhvLmEpP0ooby5hKTpKKG8uYiksMTcpLEdhKHMpfHwoX3ooai5hLEMsKE5uKCksRjIpKT09bnVsbCxUWHQocykmJnREKGosQz09cy5jP3MuZDpzLmMpKTtyZXR1cm4gTHIoaiksbmV3IEJ1KGopfWZ1bmN0aW9uIG9tbih0LGUpe3ZhciBuLHIscyxvO2lmKG89dShxZSh0LCh1aSgpLHU1KSksNjEpLmctdShxZShlLHU1KSw2MSkuZyxvIT0wKXJldHVybiBvO2lmKG49dShxZSh0LHhmdCksMTkpLHI9dShxZShlLHhmdCksMTkpLG4mJnImJihzPW4uYS1yLmEscyE9MCkpcmV0dXJuIHM7c3dpdGNoKHUocWUodCx1NSksNjEpLmcpe2Nhc2UgMTpyZXR1cm4gTXModC5pLGUuaSk7Y2FzZSAyOnJldHVybiBNcyh0LmosZS5qKTtjYXNlIDM6cmV0dXJuIE1zKGUuaSx0LmkpO2Nhc2UgNDpyZXR1cm4gTXMoZS5qLHQuaik7ZGVmYXVsdDp0aHJvdyBpdChuZXcgTm8oRTZ0KSl9fWZ1bmN0aW9uIFg1dCh0KXt2YXIgZSxuLHI7cmV0dXJuIHQuRGImNjQ/VnN0KHQpOihlPW5ldyBPbChtOHQpLG49dC5rLG4/R3IoR3IoKGUuYSs9JyAiJyxlKSxuKSwnIicpOighdC5uJiYodC5uPW5ldyBmZShxbyx0LDEsNykpLHQubi5pPjAmJihyPSghdC5uJiYodC5uPW5ldyBmZShxbyx0LDEsNykpLHUoQXQodC5uLDApLDEzNykpLmEsIXJ8fEdyKEdyKChlLmErPScgIicsZSksciksJyInKSkpLEdyKEF3KEdyKEF3KEdyKEF3KEdyKEF3KChlLmErPSIgKCIsZSksdC5pKSwiLCIpLHQuaiksIiB8ICIpLHQuZyksIiwiKSx0LmYpLCIpIiksZS5hKX1mdW5jdGlvbiB6dWUodCl7dmFyIGUsbixyO3JldHVybiB0LkRiJjY0P1ZzdCh0KTooZT1uZXcgT2woeTh0KSxuPXQuayxuP0dyKEdyKChlLmErPScgIicsZSksbiksJyInKTooIXQubiYmKHQubj1uZXcgZmUocW8sdCwxLDcpKSx0Lm4uaT4wJiYocj0oIXQubiYmKHQubj1uZXcgZmUocW8sdCwxLDcpKSx1KEF0KHQubiwwKSwxMzcpKS5hLCFyfHxHcihHcigoZS5hKz0nICInLGUpLHIpLCciJykpKSxHcihBdyhHcihBdyhHcihBdyhHcihBdygoZS5hKz0iICgiLGUpLHQuaSksIiwiKSx0LmopLCIgfCAiKSx0LmcpLCIsIiksdC5mKSwiKSIpLGUuYSl9ZnVuY3Rpb24gYmF0KHQsZSl7dmFyIG4scixzLG8saCxkLHY7aWYoZT09bnVsbHx8ZS5sZW5ndGg9PTApcmV0dXJuIG51bGw7aWYocz11KE5jKHQuYSxlKSwxNDkpLCFzKXtmb3Iocj0oZD1uZXcgdjEodC5iKS5hLnZjKCkuS2MoKSxuZXcgbTEoZCkpO3IuYS5PYigpOylpZihuPShvPXUoci5hLlBiKCksNDIpLHUoby5kZCgpLDE0OSkpLGg9bi5jLHY9ZS5sZW5ndGgsaG4oaC5zdWJzdHIoaC5sZW5ndGgtdix2KSxlKSYmKGUubGVuZ3RoPT1oLmxlbmd0aHx8d2EoaCxoLmxlbmd0aC1lLmxlbmd0aC0xKT09NDYpKXtpZihzKXJldHVybiBudWxsO3M9bn1zJiZrbyh0LmEsZSxzKX1yZXR1cm4gc31mdW5jdGlvbiBjbW4odCxlKXt2YXIgbixyLHMsbztyZXR1cm4gbj1uZXcgZWgscj11KEJsKHd1KG5ldyBUbihudWxsLG5ldyBfbih0LmYsMTYpKSxuKSxabShuZXcgb24sbmV3IG5pLG5ldyBkaSxuZXcgRWUsbHQoY3QoZmwsMSksb2UsMTMyLDAsWyhPMSgpLEl5KSxVbF0pKSksMjEpLHM9ci5nYygpLHI9dShCbCh3dShuZXcgVG4obnVsbCxuZXcgX24oZS5mLDE2KSksbiksWm0obmV3IG9uLG5ldyBuaSxuZXcgZGksbmV3IEVlLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFtJeSxVbF0pKSksMjEpLG89ci5nYygpLHM8bz8tMTpzPT1vPzA6MX1mdW5jdGlvbiBxdWUodCl7dmFyIGUsbixyO1VzKHQsKFRlKCksTnYpKSYmKHI9dShRKHQsTnYpLDIxKSwhci5kYygpJiYobj0oZT11KFZmKGxvKSw5KSxuZXcgc2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSxyLkhjKChweSgpLFlsKSk/dmYobixZbCk6dmYobixBZiksci5IYyhxaCl8fHZmKG4scWgpLHIuSGMoX2YpP3ZmKG4sTGYpOnIuSGMoaWcpP3ZmKG4sZDApOnIuSGMoU2YpJiZ2ZihuLEhoKSxyLkhjKExmKT92ZihuLF9mKTpyLkhjKGQwKT92ZihuLGlnKTpyLkhjKEhoKSYmdmYobixTZiksSnQodCxOdixuKSkpfWZ1bmN0aW9uIHVtbih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3Iocz11KFEodCwoYWUoKSxQdikpLDEwKSxyPXQuaixuPShBbigwLHIuYy5sZW5ndGgpLHUoci5jWzBdLDExKSksaD1uZXcgUyhzLmopO2guYTxoLmMuYy5sZW5ndGg7KWlmKG89dShKKGgpLDExKSxWdChvKT09PVZ0KFEobixfaSkpKXtvLmo9PSh2ZSgpLFBuKSYmdC5wPnMucD8oQnMobyxtciksby5kJiYoZD1vLm8uYixlPW8uYS5iLG8uYS5iPWQtZSkpOm8uaj09bXImJnMucD50LnAmJihCcyhvLFBuKSxvLmQmJihkPW8uby5iLGU9by5hLmIsby5hLmI9LShkLWUpKSk7YnJlYWt9cmV0dXJuIHN9ZnVuY3Rpb24gbG1uKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixILEc7aWYobz1uLG48cilmb3Ioaj0oSD1uZXcgUEQodC5wKSxHPW5ldyBQRCh0LnApLFVhKEguZSx0LmUpLEgucT10LnEsSC5yPUcscyQoSCksVWEoRy5qLHQuaiksRy5yPUgscyQoRyksbmV3IGZhKEgsRykpLE09dShqLmEsMTEyKSxDPXUoai5iLDExMikscz0oQW4obyxlLmMubGVuZ3RoKSx1KGUuY1tvXSwzMjkpKSxoPXh1ZSh0LE0sQyxzKSxrPW4rMTtrPD1yO2srKylkPShBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDMyOSkpLHY9eHVlKHQsTSxDLGQpLFZmbihkLHYscyxoKSYmKHM9ZCxoPXYpO3JldHVybiBvfWZ1bmN0aW9uIHhJKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE07aWYoIShfdChlLDIzOSl8fF90KGUsMzU0KXx8X3QoZSwxODYpKSl0aHJvdyBpdChuZXcgRm4oIk1ldGhvZCBvbmx5IHdvcmtzIGZvciBFbGtOb2RlLSwgRWxrTGFiZWwgYW5kIEVsa1BvcnQtb2JqZWN0cy4iKSk7cmV0dXJuIGg9dC5hLzIsdj1lLmkrci1oLEM9ZS5qK3MtaCxrPXYrZS5nK3QuYSxNPUMrZS5mK3QuYSxvPW5ldyBQdSxyaShvLG5ldyAkZSh2LEMpKSxyaShvLG5ldyAkZSh2LE0pKSxyaShvLG5ldyAkZShrLE0pKSxyaShvLG5ldyAkZShrLEMpKSxkPW5ldyBuYXQobyksTW8oZCxlKSxuJiZraSh0LmIsZSxkKSxkfWZ1bmN0aW9uIHhfKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtmb3Iobz1uZXcgJGUoZSxuKSxDPW5ldyBTKHQuYSk7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDEwKSxMaShrLm4sbyksaj1uZXcgUyhrLmopO2ouYTxqLmMuYy5sZW5ndGg7KWZvcihNPXUoSihqKSwxMSkscz1uZXcgUyhNLmcpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwxNyksbnkoci5hLG8pLGg9dShRKHIsKFRlKCksU28pKSw3NCksaCYmbnkoaCxvKSx2PW5ldyBTKHIuYik7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksNzApLExpKGQubixvKX1mdW5jdGlvbiBobW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqO2ZvcihvPW5ldyAkZShlLG4pLEM9bmV3IFModC5hKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTApLExpKGsubixvKSxqPW5ldyBTKGsuaik7ai5hPGouYy5jLmxlbmd0aDspZm9yKE09dShKKGopLDExKSxzPW5ldyBTKE0uZyk7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDE3KSxueShyLmEsbyksaD11KFEociwoVGUoKSxTbykpLDc0KSxoJiZueShoLG8pLHY9bmV3IFMoci5iKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSw3MCksTGkoZC5uLG8pfWZ1bmN0aW9uIEh1ZSh0KXtpZigoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLmk9PTApdGhyb3cgaXQobmV3IGpDKCJFZGdlcyBtdXN0IGhhdmUgYSBzb3VyY2UuIikpO2lmKCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYykuaT09MCl0aHJvdyBpdChuZXcgakMoIkVkZ2VzIG11c3QgaGF2ZSBhIHRhcmdldC4iKSk7aWYoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSwhKHQuYi5pPD0xJiYoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMuaTw9MSkpKXRocm93IGl0KG5ldyBqQygiSHlwZXJlZGdlcyBhcmUgbm90IHN1cHBvcnRlZC4iKSl9ZnVuY3Rpb24gVnVlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE07Zm9yKE09MCxvPW5ldyBCMyxVcChvLGUpO28uYiE9by5jOylmb3Iodj11KEh4KG8pLDIxNCksaz0wLEM9dShRKGUuaiwoVGUoKSx3YikpLDMzOSksaD1YdCh5ZShRKGUuaixhRykpKSxkPVh0KHllKFEoZS5qLHFDdCkpKSxDIT0oVjAoKSx2YikmJihrKz1oKnkybih2LmUsQyksays9ZCpHd24odi5lKSksTSs9SHNlKHYuZCx2LmUpK2sscz1uZXcgUyh2LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDM3KSxuPXUoTmUodC5iLHIucCksMjE0KSxuLnN8fChNKz1Lc3QodCxuKSk7cmV0dXJuIE19ZnVuY3Rpb24gZm1uKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3IoSD1lLmxlbmd0aCx2PUgsUnIoMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00NT8oTT0tMSxqPTEsLS1IKTooTT0xLGo9MCksbz0oTGF0KCksSGdlKVsxMF0scz1IL298MCx0dD1IJW8sdHQhPTAmJisrcyxkPU50KENyLFhyLDI1LHMsMTUsMSksbj1xZ2VbOF0saD0wLEc9aisodHQ9PTA/bzp0dCksSz1qO0s8djtLPUcsRz1LK28pcj1xbChlLnN1YnN0cihLLEctSyksU2Esd2kpLGs9KFRFKCkscTN0KGQsZCxoLG4pKSxrKz1xaG4oZCxoLHIpLGRbaCsrXT1rO0M9aCx0LmU9TSx0LmQ9Qyx0LmE9ZCxOOSh0KX1mdW5jdGlvbiBHdWUodCxlLG4scixzLG8saCl7aWYodC5jPXIucWYoKS5hLHQuZD1yLnFmKCkuYixzJiYodC5jKz1zLnFmKCkuYSx0LmQrPXMucWYoKS5iKSx0LmI9ZS5yZigpLmEsdC5hPWUucmYoKS5iLCFzKW4/dC5jLT1oK2UucmYoKS5hOnQuYys9ci5yZigpLmEraDtlbHNlIHN3aXRjaChzLkhmKCkuZyl7Y2FzZSAwOmNhc2UgMjp0LmMrPXMucmYoKS5hK2grby5hK2g7YnJlYWs7Y2FzZSA0OnQuYy09aCtvLmEraCtlLnJmKCkuYTticmVhaztjYXNlIDE6dC5jKz1zLnJmKCkuYStoLHQuZC09aCtvLmIraCtlLnJmKCkuYjticmVhaztjYXNlIDM6dC5jKz1zLnJmKCkuYStoLHQuZCs9cy5yZigpLmIraCtvLmIraH19ZnVuY3Rpb24gVXVlKHQsZSl7dmFyIG4scjtmb3IodGhpcy5iPW5ldyBoZSx0aGlzLmU9bmV3IGhlLHRoaXMuYT10LHRoaXMuZD1lLCRmbih0aGlzKSxLaG4odGhpcyksdGhpcy5iLmRjKCk/dGhpcy5jPXQuYy5wOnRoaXMuYz11KHRoaXMuYi5YYigwKSwxMCkuYy5wLHRoaXMuZS5jLmxlbmd0aD09MD90aGlzLmY9dC5jLnA6dGhpcy5mPXUoTmUodGhpcy5lLHRoaXMuZS5jLmxlbmd0aC0xKSwxMCkuYy5wLHI9dShRKHQsKGFlKCksTE8pKSwxNSkuS2MoKTtyLk9iKCk7KWlmKG49dShyLlBiKCksNzApLFVzKG4sKFRlKCksY0cpKSl7dGhpcy5kPXUoUShuLGNHKSwyMjcpO2JyZWFrfX1mdW5jdGlvbiBMRSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztmb3Iocj11KHRyKHQuYSxlKSw1Myksbz11KHRyKHQuYSxuKSw1Mykscz11KHRyKHQuZSxlKSw1MyksaD11KHRyKHQuZSxuKSw1Myksci5hLnpjKG4sciksaC5hLnpjKGUsaCksQz1vLmEuZWMoKS5LYygpO0MuT2IoKTspaz11KEMuUGIoKSwxMCksci5hLnpjKGssciksRnModSh0cih0LmUsayksNTMpLGUpLFVhKHUodHIodC5lLGspLDUzKSxzKTtmb3Iodj1zLmEuZWMoKS5LYygpO3YuT2IoKTspZD11KHYuUGIoKSwxMCksaC5hLnpjKGQsaCksRnModSh0cih0LmEsZCksNTMpLG4pLFVhKHUodHIodC5hLGQpLDUzKSxvKX1mdW5jdGlvbiBrSSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztmb3Iocj11KHRyKHQuYSxlKSw1Myksbz11KHRyKHQuYSxuKSw1Mykscz11KHRyKHQuYixlKSw1MyksaD11KHRyKHQuYixuKSw1Myksci5hLnpjKG4sciksaC5hLnpjKGUsaCksQz1vLmEuZWMoKS5LYygpO0MuT2IoKTspaz11KEMuUGIoKSwxMCksci5hLnpjKGssciksRnModSh0cih0LmIsayksNTMpLGUpLFVhKHUodHIodC5iLGspLDUzKSxzKTtmb3Iodj1zLmEuZWMoKS5LYygpO3YuT2IoKTspZD11KHYuUGIoKSwxMCksaC5hLnpjKGQsaCksRnModSh0cih0LmEsZCksNTMpLG4pLFVhKHUodHIodC5hLGQpLDUzKSxvKX1mdW5jdGlvbiBkbW4odCxlKXt2YXIgbixyLHM7c3dpdGNoKHZyKGUsIkJyZWFraW5nIFBvaW50IEluc2VydGlvbiIsMSkscj1uZXcgbTV0KHQpLHUoUSh0LChUZSgpLGdodCkpLDMzNykuZyl7Y2FzZSAyOnM9bmV3IFVOO2Nhc2UgMDpzPW5ldyBITjticmVhaztkZWZhdWx0OnM9bmV3IFdOfWlmKG49cy5WZih0LHIpLGplKFJlKFEodCxfOXQpKSkmJihuPWk0bih0LG4pKSwhcy5XZigpJiZVcyh0LHdHKSlzd2l0Y2godShRKHQsd0cpLDMzOCkuZyl7Y2FzZSAyOm49RG9lKHIsbik7YnJlYWs7Y2FzZSAxOm49TWFlKHIsbil9aWYobi5kYygpKXtvcihlKTtyZXR1cm59aXhuKHQsbiksb3IoZSl9ZnVuY3Rpb24gZ21uKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtpZihDPW51bGwsaj1lLE09Wlp0KHQsWVp0KG4pLGopLEc5KE0sUjAoaixBZCkpLGg9S3coaixrOHQpLHI9bmV3IE9HdCh0LE0pLHpwbihyLmEsci5iLGgpLGQ9S3coaixudXQpLHM9bmV3IFBHdCh0LE0pLHFwbihzLmEscy5iLGQpLCghTS5iJiYoTS5iPW5ldyBDbihicixNLDQsNykpLE0uYikuaT09MHx8KCFNLmMmJihNLmM9bmV3IENuKGJyLE0sNSw4KSksTS5jKS5pPT0wKXRocm93IG89UjAoaixBZCksdj1WZGUrbyxrPXYrSkUsaXQobmV3IHVkKGspKTtyZXR1cm4gbHEoaixNKSxseG4odCxqLE0pLEM9TGl0KHQsaixNKSxDfWZ1bmN0aW9uIHBtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2ZvcihzPU50KENyLFhyLDI1LHQuZS5hLmMubGVuZ3RoLDE1LDEpLGg9bmV3IFModC5lLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEyMSksc1tvLmRdKz1vLmIuYS5jLmxlbmd0aDtmb3IoZD1RTShlKTtkLmIhPTA7KWZvcihvPXUoZC5iPT0wP251bGw6KFpuKGQuYiE9MCksbGgoZCxkLmEuYSkpLDEyMSkscj1lNihuZXcgUyhvLmcuYSkpO3IuT2IoKTspbj11KHIuUGIoKSwyMTMpLHY9bi5lLHYuZT1iLk1hdGgubWF4KHYuZSxvLmUrbi5hKSwtLXNbdi5kXSxzW3YuZF09PTAmJmZzKGQsdixkLmMuYixkLmMpfWZ1bmN0aW9uIFd1ZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNO2ZvcihuPVNhLHM9d2ksZD1uZXcgUyh0LmUuYSk7ZC5hPGQuYy5jLmxlbmd0aDspbz11KEooZCksMTIxKSxzPWIuTWF0aC5taW4ocyxvLmUpLG49Yi5NYXRoLm1heChuLG8uZSk7Zm9yKGU9TnQoQ3IsWHIsMjUsbi1zKzEsMTUsMSksaD1uZXcgUyh0LmUuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTIxKSxvLmUtPXMsKytlW28uZV07aWYocj0wLHQuayE9bnVsbClmb3Ioaz10LmssQz0wLE09ay5sZW5ndGg7QzxNJiYodj1rW0NdLGVbcisrXSs9dixlLmxlbmd0aCE9cik7KytDKTtyZXR1cm4gZX1mdW5jdGlvbiBZdWUodCl7c3dpdGNoKHQuZCl7Y2FzZSA5OmNhc2UgODpyZXR1cm4hMDtjYXNlIDM6Y2FzZSA1OmNhc2UgNDpjYXNlIDY6cmV0dXJuITE7Y2FzZSA3OnJldHVybiB1KCQ1dCh0KSwxOSkuYT09dC5vO2Nhc2UgMTpjYXNlIDI6e2lmKHQubz09LTIpcmV0dXJuITE7c3dpdGNoKHQucCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6Y2FzZSA2OmNhc2UgNTpjYXNlIDc6cmV0dXJuIER3KHQuayx0LmYpO2Nhc2UgMzpjYXNlIDQ6cmV0dXJuIHQuaj09dC5lO2RlZmF1bHQ6cmV0dXJuIHQubj09bnVsbD90Lmc9PW51bGw6eWkodC5uLHQuZyl9fWRlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEt1ZSh0KXtNdyh0LG5ldyBrMihfdyhFdyhDdyhUdyhuZXcga2csWV8pLCJFTEsgRml4ZWQiKSwiS2VlcHMgdGhlIGN1cnJlbnQgbGF5b3V0IGFzIGl0IGlzLCB3aXRob3V0IGFueSBhdXRvbWF0aWMgbW9kaWZpY2F0aW9uLiBPcHRpb25hbCBjb29yZGluYXRlcyBjYW4gYmUgZ2l2ZW4gZm9yIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzLiIpLG5ldyBxTCkpKSx4ZSh0LFlfLHh2LE1BdCkseGUodCxZXyx5SCxJZShRUykpLHhlKHQsWV8scDh0LEllKF9BdCkpLHhlKHQsWV8sRDQsSWUoU0F0KSkseGUodCxZXyxDNixJZShMQXQpKSx4ZSh0LFlfLEVjdCxJZShBQXQpKX1mdW5jdGlvbiBBcSh0LGUsbil7dmFyIHIscyxvLGgsZDtpZihyPUFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpLGQ9QXIoX2EoaTAsWGQoQXIoX2Eobj09bnVsbD8wOkhpKG4pLHMwKSksMTUpKSksbz1VOSh0LGUsciksbyYmZD09by5mJiZwZChuLG8uaSkpcmV0dXJuIG47aWYoaD1XOSh0LG4sZCksaCl0aHJvdyBpdChuZXcgRm4oInZhbHVlIGFscmVhZHkgcHJlc2VudDogIituKSk7cmV0dXJuIHM9bmV3IG8kKGUscixuLGQpLG8/KG00KHQsbyksZkkodCxzLG8pLG8uZT1udWxsLG8uYz1udWxsLG8uaSk6KGZJKHQscyxudWxsKSxhYWUodCksbnVsbCl9ZnVuY3Rpb24gYm1uKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEc7Qz1uLmEuYyxoPW4uYS5jK24uYS5iLG89dSh0cihuLmMsZSksNDU5KSxIPW8uZixHPW8uYSxvLmI/dj1uZXcgJGUoaCxIKTp2PW5ldyAkZShDLEgpLG8uYz9NPW5ldyAkZShDLEcpOk09bmV3ICRlKGgsRykscz1DLG4ucHx8KHMrPXQuYykscys9bi5GK24udip0LmIsaz1uZXcgJGUocyxIKSxqPW5ldyAkZShzLEcpLFY5KGUuYSxsdChjdChXcywxKSxlZSw4LDAsW3Ysa10pKSxkPW4uZC5hLmdjKCk+MSxkJiYocj1uZXcgJGUocyxuLmIpLHJpKGUuYSxyKSksVjkoZS5hLGx0KGN0KFdzLDEpLGVlLDgsMCxbaixNXSkpfWZ1bmN0aW9uIHdhdCh0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKGUpaWYobjw9LTEpe2lmKHI9eW4oZS5UZygpLC0xLW4pLF90KHIsOTkpKXJldHVybiB1KHIsMTgpO2ZvcihoPXUoZS5haChyKSwxNTMpLGQ9MCx2PWguZ2MoKTtkPHY7KytkKWlmKFZ0KGguamwoZCkpPT09VnQodCkmJihzPWguaWwoZCksX3Qocyw5OSkmJihvPXUocywxOCksby5CYiZkYykpKXJldHVybiBvO3Rocm93IGl0KG5ldyBObygiVGhlIGNvbnRhaW5tZW50IGZlYXR1cmUgY291bGQgbm90IGJlIGxvY2F0ZWQiKSl9ZWxzZSByZXR1cm4gbm8odSh5bih0LlRnKCksbiksMTgpKTtlbHNlIHJldHVybiBudWxsfWZ1bmN0aW9uIHdtbih0KXt2YXIgZSxuLHIscyxvO2ZvcihyPXQubGVuZ3RoLGU9bmV3ICRDLG89MDtvPHI7KWlmKG49d2EodCxvKyspLCEobj09OXx8bj09MTB8fG49PTEyfHxuPT0xM3x8bj09MzIpKXtpZihuPT0zNSl7Zm9yKDtvPHImJihuPXdhKHQsbysrKSwhKG49PTEzfHxuPT0xMCkpOyk7Y29udGludWV9bj09OTImJm88cj8ocz0oUnIobyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG8pKSk9PTM1fHxzPT05fHxzPT0xMHx8cz09MTJ8fHM9PTEzfHxzPT0zMj8oUzgoZSxzJnlzKSwrK28pOihlLmErPSJcXCIsUzgoZSxzJnlzKSwrK28pOlM4KGUsbiZ5cyl9cmV0dXJuIGUuYX1mdW5jdGlvbiB2bW4odCxlKXt2YXIgbixyLHM7Zm9yKHI9bmV3IFMoZSk7ci5hPHIuYy5jLmxlbmd0aDspaWYobj11KEoociksMzMpLGxuKHQuYSxuLG4pLGxuKHQuYixuLG4pLHM9d3kobikscy5jLmxlbmd0aCE9MClmb3IodC5kJiZ0LmQubGcocyksbG4odC5hLG4sKEFuKDAscy5jLmxlbmd0aCksdShzLmNbMF0sMzMpKSksbG4odC5iLG4sdShOZShzLHMuYy5sZW5ndGgtMSksMzMpKTtDaXQocykuYy5sZW5ndGghPTA7KXM9Q2l0KHMpLHQuZCYmdC5kLmxnKHMpLGxuKHQuYSxuLChBbigwLHMuYy5sZW5ndGgpLHUocy5jWzBdLDMzKSkpLGxuKHQuYixuLHUoTmUocyxzLmMubGVuZ3RoLTEpLDMzKSl9ZnVuY3Rpb24gbW1uKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDO2ZvcihuPTAsZD1uZXcgUyh0LmQpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDEwMSksaC5pJiYoaC5pLmM9bisrKTtmb3IoZT10MihwbCxbZWUsbzBdLFsxNzcsMjVdLDE2LFtuLG5dLDIpLEM9dC5kLHM9MDtzPEMuYy5sZW5ndGg7cysrKWlmKHY9KEFuKHMsQy5jLmxlbmd0aCksdShDLmNbc10sMTAxKSksdi5pKWZvcihvPXMrMTtvPEMuYy5sZW5ndGg7bysrKWs9KEFuKG8sQy5jLmxlbmd0aCksdShDLmNbb10sMTAxKSksay5pJiYocj1pZ24odixrKSxlW3YuaS5jXVtrLmkuY109cixlW2suaS5jXVt2LmkuY109cik7cmV0dXJuIGV9ZnVuY3Rpb24gUTV0KHQsZSxuLHIpe3ZhciBzLG8saDtyZXR1cm4gaD1uZXcgYlZ0KGUsbiksdC5hP3I/KHM9dSh0cih0LmIsZSksMjgzKSwrK3MuYSxoLmQ9ci5kLGguZT1yLmUsaC5iPXIsaC5jPXIsci5lP3IuZS5jPWg6dSh0cih0LmIsZSksMjgzKS5iPWgsci5kP3IuZC5iPWg6dC5hPWgsci5kPWgsci5lPWgpOih0LmUuYj1oLGguZD10LmUsdC5lPWgscz11KHRyKHQuYixlKSwyODMpLHM/KCsrcy5hLG89cy5jLG8uYz1oLGguZT1vLHMuYz1oKTooa2kodC5iLGUscz1uZXcgUnZ0KGgpKSwrK3QuYykpOih0LmE9dC5lPWgsa2kodC5iLGUsbmV3IFJ2dChoKSksKyt0LmMpLCsrdC5kLGh9ZnVuY3Rpb24gdnkodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO2ZvcihuPW5ldyBSZWdFeHAoZSwiZyIpLHY9TnQoQWUsZWUsMiwwLDYsMSkscj0wLGs9dCxvPW51bGw7OylpZihkPW4uZXhlYyhrKSxkPT1udWxsfHxrPT0iIil7dltyXT1rO2JyZWFrfWVsc2UgaD1kLmluZGV4LHZbcl09ay5zdWJzdHIoMCxoKSxrPVBsKGssaCtkWzBdLmxlbmd0aCxrLmxlbmd0aCksbi5sYXN0SW5kZXg9MCxvPT1rJiYodltyXT1rLnN1YnN0cigwLDEpLGs9ay5zdWJzdHIoMSkpLG89aywrK3I7aWYodC5sZW5ndGg+MCl7Zm9yKHM9di5sZW5ndGg7cz4wJiZ2W3MtMV09PSIiOyktLXM7czx2Lmxlbmd0aCYmKHYubGVuZ3RoPXMpfXJldHVybiB2fWZ1bmN0aW9uIFo1dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2ZvcihNPUFvKGUpLGs9bnVsbCxzPSExLGQ9MCxDPUxjKE0uYSkuaTtkPEM7KytkKWg9dShBSShNLGQsKG89dShBdChMYyhNLmEpLGQpLDg3KSx2PW8uYyxfdCh2LDg4KT91KHYsMjYpOihkbigpLEtoKSkpLDI2KSxuPVo1dCh0LGgpLG4uZGMoKXx8KGs/KHN8fChzPSEwLGs9bmV3IEdqKGspKSxrLkdjKG4pKTprPW4pO3JldHVybiByPWlibih0LGUpLHIuZGMoKT9rfHwod24oKSx3bigpLGlvKTprPyhzfHwoaz1uZXcgR2ooaykpLGsuR2Mociksayk6cn1mdW5jdGlvbiB2YXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtmb3IoTT1BbyhlKSxrPW51bGwscj0hMSxkPTAsQz1MYyhNLmEpLmk7ZDxDOysrZClvPXUoQUkoTSxkLChzPXUoQXQoTGMoTS5hKSxkKSw4Nyksdj1zLmMsX3Qodiw4OCk/dSh2LDI2KTooZG4oKSxLaCkpKSwyNiksbj12YXQodCxvKSxuLmRjKCl8fChrPyhyfHwocj0hMCxrPW5ldyBHaihrKSksay5HYyhuKSk6az1uKTtyZXR1cm4gaD1PYm4odCxlKSxoLmRjKCk/a3x8KHduKCksd24oKSxpbyk6az8ocnx8KGs9bmV3IEdqKGspKSxrLkdjKGgpLGspOmh9ZnVuY3Rpb24gRUkodCxlLG4pe3ZhciByLHMsbyxoLGQsdjtpZihfdChlLDcyKSlyZXR1cm4gQmEodCxlLG4pO2ZvcihkPW51bGwsbz1udWxsLHI9dSh0LmcsMTE5KSxoPTA7aDx0Lmk7KytoKWlmKHM9cltoXSx5aShlLHMuZGQoKSkmJihvPXMuYWsoKSxfdChvLDk5KSYmdShvLDE4KS5CYiZkYykpe2Q9czticmVha31yZXR1cm4gZCYmKHhsKHQuZSkmJih2PW8uJGooKT9HcCh0LDQsbyxlLG51bGwsREUodCxvLGUsX3Qobyw5OSkmJih1KG8sMTgpLkJiJkthKSE9MCksITApOkdwKHQsby5LaigpPzI6MSxvLGUsby56aigpLC0xLCEwKSxuP24uRWkodik6bj12KSxuPUVJKHQsZCxuKSksbn1mdW5jdGlvbiB5bW4odCl7dmFyIGUsbixyLHM7cj10Lm8sJG0oKSx0LkEuZGMoKXx8eWkodC5BLG83dCk/cz1yLmE6KHM9Z0kodC5mKSx0LkEuSGMoKEFsKCksYVApKSYmIXQuQi5IYygobGwoKSxpQSkpJiYocz1iLk1hdGgubWF4KHMsZ0kodShwbyh0LnAsKHZlKCksUG4pKSwyNDQpKSkscz1iLk1hdGgubWF4KHMsZ0kodShwbyh0LnAsbXIpLDI0NCkpKSksZT1HbmUodCksZSYmKHM9Yi5NYXRoLm1heChzLGUuYSkpKSxqZShSZSh0LmUueWYoKS5XZSgodWkoKSxYRykpKSk/ci5hPWIuTWF0aC5tYXgoci5hLHMpOnIuYT1zLG49dC5mLmksbi5jPTAsbi5iPXMsRWF0KHQuZil9ZnVuY3Rpb24geG1uKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2lmKG49ZS5IaCh0LmEpLG4mJih2PUJyKFhmKCghbi5iJiYobi5iPW5ldyBrbCgoZG4oKSxRYSksY2MsbikpLG4uYiksIm1lbWJlclR5cGVzIikpLHYhPW51bGwpKXtmb3Ioaz1uZXcgaGUsbz12eSh2LCJcXHciKSxoPTAsZD1vLmxlbmd0aDtoPGQ7KytoKXM9b1toXSxyPXMubGFzdEluZGV4T2YoIiMiKSxDPXI9PS0xP1cydCh0LGUuQWooKSxzKTpyPT0wP3lEKHQsbnVsbCxzLnN1YnN0cigxKSk6eUQodCxzLnN1YnN0cigwLHIpLHMuc3Vic3RyKHIrMSkpLF90KEMsMTQ4KSYmbGUoayx1KEMsMTQ4KSk7cmV0dXJuIGt9cmV0dXJuIHduKCksd24oKSxpb31mdW5jdGlvbiBrbW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEM7Zm9yKHZyKG4scjFlLDEpLHQuYmYoZSksbz0wO3QuZGYobyk7KXtmb3IoQz1uZXcgUyhlLmUpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcih2PXUoSihDKSwxNDQpLGQ9enAoRDEobHQoY3QoajEsMSksRGUsMjAsMCxbZS5lLGUuZCxlLmJdKSkpO3pyKGQpOyloPXUoTXIoZCksMzU3KSxoIT12JiYocz10LmFmKGgsdikscyYmTGkodi5hLHMpKTtmb3Ioaz1uZXcgUyhlLmUpO2suYTxrLmMuYy5sZW5ndGg7KXY9dShKKGspLDE0NCkscj12LmEsWmFlKHIsLXQuZCwtdC5kLHQuZCx0LmQpLExpKHYuZCxyKSxHZihyKTt0LmNmKCksKytvfW9yKG4pfWZ1bmN0aW9uIEVtbih0LGUsbil7dmFyIHIscyxvLGg7aWYoaD1vdSh0LmUuVGcoKSxlKSxyPXUodC5nLDExOSksdG8oKSx1KGUsNjYpLk9qKCkpe2ZvcihvPTA7bzx0Lmk7KytvKWlmKHM9cltvXSxoLnJsKHMuYWsoKSkmJnlpKHMsbikpcmV0dXJuIGJ5KHQsbyksITB9ZWxzZSBpZihuIT1udWxsKXtmb3Iobz0wO288dC5pOysrbylpZihzPXJbb10saC5ybChzLmFrKCkpJiZ5aShuLHMuZGQoKSkpcmV0dXJuIGJ5KHQsbyksITB9ZWxzZSBmb3Iobz0wO288dC5pOysrbylpZihzPXJbb10saC5ybChzLmFrKCkpJiZzLmRkKCk9PW51bGwpcmV0dXJuIGJ5KHQsbyksITA7cmV0dXJuITF9ZnVuY3Rpb24gVG1uKHQsZSl7dmFyIG4scixzLG8saDtmb3IodC5jPT1udWxsfHx0LmMubGVuZ3RoPGUuYy5sZW5ndGg/dC5jPU50KHBsLG8wLDI1LGUuYy5sZW5ndGgsMTYsMSk6UkModC5jKSx0LmE9bmV3IGhlLHI9MCxoPW5ldyBTKGUpO2guYTxoLmMuYy5sZW5ndGg7KXM9dShKKGgpLDEwKSxzLnA9cisrO2ZvcihuPW5ldyBaaSxvPW5ldyBTKGUpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEwKSx0LmNbcy5wXXx8KEJvZSh0LHMpLG4uYj09MHx8KFpuKG4uYiE9MCksdShuLmEuYS5jLDE1KSkuZ2MoKTx0LmEuYy5sZW5ndGg/c1V0KG4sdC5hKTpaYihuLHQuYSksdC5hPW5ldyBoZSk7cmV0dXJuIG59ZnVuY3Rpb24gQ21uKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixILEc7Zm9yKGg9dShBdChlLDApLDMzKSxrdShoLDApLEV1KGgsMCksaj1uZXcgaGUsai5jW2ouYy5sZW5ndGhdPWgsZD1oLG89bmV3IEZudCh0LmEsaC5nLGguZiwoQUUoKSxVUykpLEg9MTtIPGUuaTtIKyspRz11KEF0KGUsSCksMzMpLHY9QWF0KHQsaTUsRyxkLG8saixuKSxrPUFhdCh0LEc2LEcsZCxvLGosbiksQz1BYXQodCxHUyxHLGQsbyxqLG4pLE09QWF0KHQsVlMsRyxkLG8saixuKSxzPVIzbih0LHYsayxDLE0sRyxkLHIpLGt1KEcscy5kKSxFdShHLHMuZSksWmsocyxVUyksbz1zLGQ9RyxqLmNbai5jLmxlbmd0aF09RztyZXR1cm4gb31mdW5jdGlvbiBYdWUodCl7TXcodCxuZXcgazIoX3coRXcoQ3coVHcobmV3IGtnLFlFKSwiRUxLIFNQT3JFIE92ZXJsYXAgUmVtb3ZhbCIpLCdBIG5vZGUgb3ZlcmxhcCByZW1vdmFsIGFsZ29yaXRobSBwcm9wb3NlZCBieSBOYWNobWFuc29uIGV0IGFsLiBpbiAiTm9kZSBvdmVybGFwIHJlbW92YWwgYnkgZ3Jvd2luZyBhIHRyZWUiLicpLG5ldyBtWikpKSx4ZSh0LFlFLEJjdCxJZSh4U3QpKSx4ZSh0LFlFLHh2LHlTdCkseGUodCxZRSxDeSw4KSx4ZSh0LFlFLCRjdCxJZShxM2UpKSx4ZSh0LFlFLGg4dCxJZSh2U3QpKSx4ZSh0LFlFLGY4dCxJZShtU3QpKSx4ZSh0LFlFLEpJLChObigpLCExKSl9ZnVuY3Rpb24gUXVlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixIO2ZvcihoPWptKGUuYyxuLHIpLE09bmV3IFMoZS5hKTtNLmE8TS5jLmMubGVuZ3RoOyl7Zm9yKEM9dShKKE0pLDEwKSxMaShDLm4saCksSD1uZXcgUyhDLmopO0guYTxILmMuYy5sZW5ndGg7KWZvcihqPXUoSihIKSwxMSksbz1uZXcgUyhqLmcpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwxNyksbnkocy5hLGgpLGQ9dShRKHMsKFRlKCksU28pKSw3NCksZCYmbnkoZCxoKSxrPW5ldyBTKHMuYik7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksNzApLExpKHYubixoKTtsZSh0LmEsQyksQy5hPXR9fWZ1bmN0aW9uIF9tbih0LGUpe3ZhciBuLHIscyxvLGg7aWYodnIoZSwiTm9kZSBhbmQgUG9ydCBMYWJlbCBQbGFjZW1lbnQgYW5kIE5vZGUgU2l6aW5nIiwxKSxPVXQoKFZDKCksbmV3IGhydCh0LCEwLCEwLG5ldyBHSykpKSx1KFEodCwoYWUoKSxWYykpLDIxKS5IYygob28oKSx2aCkpKWZvcihvPXUoUSh0LChUZSgpLEd5KSksMjEpLHM9by5IYygoWnUoKSxzUCkpLGg9amUoUmUoUSh0LHc5dCkpKSxyPW5ldyBTKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjkpLGxzKFJpKG5ldyBUbihudWxsLG5ldyBfbihuLmEsMTYpKSxuZXcgcWQpLG5ldyBGWXQobyxzLGgpKTtvcihlKX1mdW5jdGlvbiBTbW4odCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYobj1lLkhoKHQuYSksbiYmKGQ9QnIoWGYoKCFuLmImJihuLmI9bmV3IGtsKChkbigpLFFhKSxjYyxuKSksbi5iKSxNSCkpLGQhPW51bGwpKXN3aXRjaChzPVRqKGQsQ3UoMzUpKSxyPWUuSGooKSxzPT0tMT8oaD1DOSh0LFJsKHIpKSxvPWQpOnM9PTA/KGg9bnVsbCxvPWQuc3Vic3RyKDEpKTooaD1kLnN1YnN0cigwLHMpLG89ZC5zdWJzdHIocysxKSksSHcoVG8odCxlKSkpe2Nhc2UgMjpjYXNlIDM6cmV0dXJuIEZ1bih0LHIsaCxvKTtjYXNlIDA6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6cmV0dXJuIE51bih0LHIsaCxvKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBKNXQodCxlLG4pe3ZhciByLHMsbyxoLGQ7aWYoaD0odG8oKSx1KGUsNjYpLk9qKCkpLFgwKHQuZSxlKSl7aWYoZS5oaSgpJiZNcSh0LGUsbixfdChlLDk5KSYmKHUoZSwxOCkuQmImS2EpIT0wKSlyZXR1cm4hMX1lbHNlIGZvcihkPW91KHQuZS5UZygpLGUpLHI9dSh0LmcsMTE5KSxvPTA7bzx0Lmk7KytvKWlmKHM9cltvXSxkLnJsKHMuYWsoKSkpcmV0dXJuKGg/eWkocyxuKTpuPT1udWxsP3MuZGQoKT09bnVsbDp5aShuLHMuZGQoKSkpPyExOih1KGg0KHQsbyxoP3Uobiw3Mik6WmQoZSxuKSksNzIpLCEwKTtyZXR1cm4gRHIodCxoP3Uobiw3Mik6WmQoZSxuKSl9ZnVuY3Rpb24gVEkodCl7dmFyIGUsbixyLHMsbyxoLGQsdjtpZih0LmQpdGhyb3cgaXQobmV3IE5vKChQMCh1bHQpLFNvdCt1bHQuaytBb3QpKSk7Zm9yKHQuYz09KGFvKCksaDApJiZfNCh0LHpoKSxuPW5ldyBTKHQuYS5hKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxODkpLGUuZT0wO2ZvcihoPW5ldyBTKHQuYS5iKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksODEpLG8ubz1DcyxzPW8uZi5LYygpO3MuT2IoKTspcj11KHMuUGIoKSw4MSksKytyLmQuZTtmb3IoeTVuKHQpLHY9bmV3IFModC5hLmIpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDgxKSxkLms9ITA7cmV0dXJuIHR9ZnVuY3Rpb24gQW1uKHQsZSl7dmFyIG4scixzLG8saCxkLHYsaztmb3IoZD1uZXcgb29lKHQpLG49bmV3IFppLGZzKG4sZSxuLmMuYixuLmMpO24uYiE9MDspe2ZvcihyPXUobi5iPT0wP251bGw6KFpuKG4uYiE9MCksbGgobixuLmEuYSkpLDExMyksci5kLnA9MSxoPW5ldyBTKHIuZSk7aC5hPGguYy5jLmxlbmd0aDspcz11KEooaCksNDA5KSxBYWUoZCxzKSxrPXMuZCxrLmQucD09MCYmZnMobixrLG4uYy5iLG4uYyk7Zm9yKG89bmV3IFMoci5iKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSw0MDkpLEFhZShkLHMpLHY9cy5jLHYuZC5wPT0wJiZmcyhuLHYsbi5jLmIsbi5jKX1yZXR1cm4gZH1mdW5jdGlvbiBadWUodCl7dmFyIGUsbixyLHMsbztpZihyPVh0KHllKHFlKHQsKHVpKCksZzRlKSkpKSxyIT0xKWZvcihiaih0LHIqdC5nLHIqdC5mKSxuPUhYZSh0ZW4oKCF0LmMmJih0LmM9bmV3IGZlKGdsLHQsOSw5KSksdC5jKSxuZXcgR1opKSxvPXpwKEQxKGx0KGN0KGoxLDEpLERlLDIwLDAsWyghdC5uJiYodC5uPW5ldyBmZShxbyx0LDEsNykpLHQubiksKCF0LmMmJih0LmM9bmV3IGZlKGdsLHQsOSw5KSksdC5jKSxuXSkpKTt6cihvKTspcz11KE1yKG8pLDQ3MCkscy5HZyhyKnMuRGcoKSxyKnMuRWcoKSkscy5GZyhyKnMuQ2coKSxyKnMuQmcoKSksZT11KHMuV2UoYUF0KSw4KSxlJiYoZS5hKj1yLGUuYio9cil9ZnVuY3Rpb24gTG1uKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0sajtmb3IoaD1uZXcgUyh0LmIpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSwyOSksaj1sRChvLmEpLGs9aixDPTAsTT1rLmxlbmd0aDtDPE07KytDKXN3aXRjaCh2PWtbQ10sdShRKHYsKFRlKCksdXUpKSwxNjMpLmcpe2Nhc2UgMTpudm4odiksRW8odixlKSxtc2UodiwhMCxyKTticmVhaztjYXNlIDM6enduKHYpLEVvKHYsbiksbXNlKHYsITEscyl9Zm9yKGQ9bmV3IGRhKHQuYiwwKTtkLmI8ZC5kLmdjKCk7KShabihkLmI8ZC5kLmdjKCkpLHUoZC5kLlhiKGQuYz1kLmIrKyksMjkpKS5hLmMubGVuZ3RoPT0wJiZDbChkKX1mdW5jdGlvbiBNbW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtpZihuPWUuSGgodC5hKSxuJiYodj1CcihYZigoIW4uYiYmKG4uYj1uZXcga2woKGRuKCksUWEpLGNjLG4pKSxuLmIpLFY4dCkpLHYhPW51bGwpKXtmb3Iocj1uZXcgaGUsbz12eSh2LCJcXHciKSxoPTAsZD1vLmxlbmd0aDtoPGQ7KytoKXM9b1toXSxobihzLCIjI290aGVyIik/bGUociwiISMjIitDOSh0LFJsKGUuSGooKSkpKTpobihzLCIjI2xvY2FsIik/ci5jW3IuYy5sZW5ndGhdPW51bGw6aG4ocyxzTyk/bGUocixDOSh0LFJsKGUuSGooKSkpKTpyLmNbci5jLmxlbmd0aF09cztyZXR1cm4gcn1yZXR1cm4gd24oKSx3bigpLGlvfWZ1bmN0aW9uIERtbih0LGUpe3ZhciBuLHIscyxvO3JldHVybiBuPW5ldyByZixyPXUoQmwod3UobmV3IFRuKG51bGwsbmV3IF9uKHQuZiwxNikpLG4pLFptKG5ldyBvbixuZXcgbmksbmV3IGRpLG5ldyBFZSxsdChjdChmbCwxKSxvZSwxMzIsMCxbKE8xKCksSXkpLFVsXSkpKSwyMSkscz1yLmdjKCkscj11KEJsKHd1KG5ldyBUbihudWxsLG5ldyBfbihlLmYsMTYpKSxuKSxabShuZXcgb24sbmV3IG5pLG5ldyBkaSxuZXcgRWUsbHQoY3QoZmwsMSksb2UsMTMyLDAsW0l5LFVsXSkpKSwyMSksbz1yLmdjKCkscz1zPT0xPzE6MCxvPW89PTE/MTowLHM8bz8tMTpzPT1vPzA6MX1mdW5jdGlvbiBJbW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqO2ZvcihkPXQuaSxzPWplKFJlKFEoZCwoVGUoKSxIeSkpKSksQz0wLHI9MCxrPW5ldyBTKHQuZyk7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMTcpLGg9R2Eodiksbz1oJiZzJiZqZShSZShRKHYsajIpKSksaj12LmQuaSxoJiZvPysrcjpoJiYhbz8rK0M6TmEoaikuZT09ZD8rK3I6KytDO2ZvcihuPW5ldyBTKHQuZSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTcpLGg9R2EoZSksbz1oJiZzJiZqZShSZShRKGUsajIpKSksTT1lLmMuaSxoJiZvPysrQzpoJiYhbz8rK3I6TmEoTSkuZT09ZD8rK0M6KytyO3JldHVybiBDLXJ9ZnVuY3Rpb24gRTQodCxlLG4scil7dGhpcy5lPXQsdGhpcy5rPXUoUSh0LChhZSgpLFE0KSksMzA0KSx0aGlzLmc9TnQobDAsWWcsMTAsZSwwLDEpLHRoaXMuYj1OdChsYSxlZSwzMzMsZSw3LDEpLHRoaXMuYT1OdChsMCxZZywxMCxlLDAsMSksdGhpcy5kPU50KGxhLGVlLDMzMyxlLDcsMSksdGhpcy5qPU50KGwwLFlnLDEwLGUsMCwxKSx0aGlzLmk9TnQobGEsZWUsMzMzLGUsNywxKSx0aGlzLnA9TnQobGEsZWUsMzMzLGUsNywxKSx0aGlzLm49TnQoUnMsZWUsNDc2LGUsOCwxKSxDTSh0aGlzLm4sKE5uKCksITEpKSx0aGlzLmY9TnQoUnMsZWUsNDc2LGUsOCwxKSxDTSh0aGlzLmYsITApLHRoaXMubz1uLHRoaXMuYz1yfWZ1bmN0aW9uIEp1ZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtpZighZS5kYygpKWlmKHUoZS5YYigwKSwyODYpLmQ9PShoNigpLE55KSlsZG4odCxlKTtlbHNlIGZvcihyPWUuS2MoKTtyLk9iKCk7KXtzd2l0Y2gobj11KHIuUGIoKSwyODYpLG4uZC5nKXtjYXNlIDU6RUUodCxuLHlobih0LG4pKTticmVhaztjYXNlIDA6RUUodCxuLChoPW4uZi1uLmMrMSxkPShoLTEpLzJ8MCxuLmMrZCkpO2JyZWFrO2Nhc2UgNDpFRSh0LG4sUG9uKHQsbikpO2JyZWFrO2Nhc2UgMjpDaWUobiksRUUodCxuLChvPUU0dChuKSxvP24uYzpuLmYpKTticmVhaztjYXNlIDE6Q2llKG4pLEVFKHQsbiwocz1FNHQobikscz9uLmY6bi5jKSl9b2duKG4uYSl9fWZ1bmN0aW9uIE9tbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2lmKCFlLmUpe2ZvcihlLmU9ITAscj1lLmQuYS5lYygpLktjKCk7ci5PYigpOyl7aWYobj11KHIuUGIoKSwxNyksZS5vJiZlLmQuYS5nYygpPD0xKXtoPWUuYS5jLGQ9ZS5hLmMrZS5hLmIsdj1uZXcgJGUoaCsoZC1oKS8yLGUuYikscmkodShlLmQuYS5lYygpLktjKCkuUGIoKSwxNykuYSx2KTtjb250aW51ZX1pZihzPXUodHIoZS5jLG4pLDQ1OSkscy5ifHxzLmMpe2Jtbih0LG4sZSk7Y29udGludWV9bz10LmQ9PShjRSgpLFBTKSYmKHMuZHx8cy5lKSYmU2JuKHQsZSkmJmUuZC5hLmdjKCk8PTEsbz9KNG4obixlKTpQdm4odCxuLGUpfWUuayYmdmEoZS5kLG5ldyBDMyl9fWZ1bmN0aW9uIHR4dCh0LGUsbixyLHMsbyl7dmFyIGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3Q7Zm9yKGo9byxkPShyK3MpLzIraix0dD1uKmIuTWF0aC5jb3MoZCksZ3Q9bipiLk1hdGguc2luKGQpLE10PXR0LWUuZy8yLFN0PWd0LWUuZi8yLGt1KGUsTXQpLEV1KGUsU3QpLE09dC5hLmpnKGUpLEs9MipiLk1hdGguYWNvcyhuL24rdC5jKSxLPHMtcj8oSD1LL00saD0ocitzLUspLzIpOihIPShzLXIpL00saD1yKSxHPXd5KGUpLHQuZSYmKHQuZS5rZyh0LmQpLHQuZS5sZyhHKSksaz1uZXcgUyhHKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSwzMyksQz10LmEuamcodiksdHh0KHQsdixuK3QuYyxoLGgrSCpDLG8pLGgrPUgqQ31mdW5jdGlvbiBQbW4odCxlLG4pe3ZhciByO3N3aXRjaChyPW4ucS5nZXRNb250aCgpLGUpe2Nhc2UgNTpHcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdKVtyXSk7YnJlYWs7Y2FzZSA0OkdyKHQsbHQoY3QoQWUsMSksZWUsMiw2LFtRYXQsWmF0LEphdCx0b3QsdzYsZW90LG5vdCxyb3QsaW90LHNvdCxhb3Qsb290XSlbcl0pO2JyZWFrO2Nhc2UgMzpHcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsdzYsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdKVtyXSk7YnJlYWs7ZGVmYXVsdDpKZCh0LHIrMSxlKX19ZnVuY3Rpb24gbWF0KHQsZSl7dmFyIG4scixzLG8saDtpZih2cihlLCJOZXR3b3JrIHNpbXBsZXgiLDEpLHQuZS5hLmMubGVuZ3RoPDEpe29yKGUpO3JldHVybn1mb3Iobz1uZXcgUyh0LmUuYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTIxKSxzLmU9MDtmb3IoaD10LmUuYS5jLmxlbmd0aD49NDAsaCYmeHluKHQpLEMzbih0KSxpdm4odCksbj1maWUodCkscj0wO24mJnI8dC5mOylCbW4odCxuLHIybih0LG4pKSxuPWZpZSh0KSwrK3I7aCYmUzBuKHQpLHQuYT93Mm4odCxXdWUodCkpOld1ZSh0KSx0LmI9bnVsbCx0LmQ9bnVsbCx0LnA9bnVsbCx0LmM9bnVsbCx0Lmc9bnVsbCx0Lmk9bnVsbCx0Lm49bnVsbCx0Lm89bnVsbCxvcihlKX1mdW5jdGlvbiBGbW4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqO2Zvcih2PW5ldyAkZShuLHIpLGlhKHYsdShRKGUsKFlwKCksZFMpKSw4KSksaj1uZXcgUyhlLmUpO2ouYTxqLmMuYy5sZW5ndGg7KU09dShKKGopLDE0NCksTGkoTS5kLHYpLGxlKHQuZSxNKTtmb3IoZD1uZXcgUyhlLmMpO2QuYTxkLmMuYy5sZW5ndGg7KXtmb3IoaD11KEooZCksMjgyKSxvPW5ldyBTKGguYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksNTU5KSxMaShzLmQsdik7bGUodC5jLGgpfWZvcihDPW5ldyBTKGUuZCk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksNDQ3KSxMaShrLmQsdiksbGUodC5kLGspfWZ1bmN0aW9uIGV4dCh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGs7Zm9yKHY9bmV3IFMoZS5qKTt2LmE8di5jLmMubGVuZ3RoOylmb3IoZD11KEoodiksMTEpLHM9bmV3IEwxKGQuYik7R28ocy5hKXx8R28ocy5iKTspcj11KEdvKHMuYSk/SihzLmEpOkoocy5iKSwxNyksbj1yLmM9PWQ/ci5kOnIuYyxvPW4uaSxlIT1vJiYoaz11KFEociwoVGUoKSxfNykpLDE5KS5hLGs8MCYmKGs9MCksaD1vLnAsdC5iW2hdPT0wJiYoci5kPT1uPyh0LmFbaF0tPWsrMSx0LmFbaF08PTAmJnQuY1toXT4wJiZyaSh0LmYsbykpOih0LmNbaF0tPWsrMSx0LmNbaF08PTAmJnQuYVtoXT4wJiZyaSh0LmUsbykpKSl9ZnVuY3Rpb24gTm1uKHQpe3ZhciBlLG4scixzLG8saCxkLHYsaztmb3IoZD1uZXcgT3AodShMcihuZXcgamQpLDYyKSksaz1DcyxuPW5ldyBTKHQuZCk7bi5hPG4uYy5jLmxlbmd0aDspe2ZvcihlPXUoSihuKSwyMjIpLGs9ZS5jLmM7ZC5hLmMhPTAmJih2PXUobG5uKGdvbihkLmEpKSwyMjIpLHYuYy5jK3YuYy5iPGspOylQOShkLmEsdikhPW51bGw7Zm9yKGg9KHM9bmV3IHk5KG5ldyB3OShuZXcgeShkLmEpLmEpLmIpLG5ldyBnKHMpKTtUTShoLmEuYSk7KW89KHI9TGooaC5hKSx1KHIuY2QoKSwyMjIpKSxyaShvLmIsZSkscmkoZS5iLG8pO196KGQuYSxlLChObigpLEYyKSk9PW51bGx9fWZ1bmN0aW9uIHRsZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNO2ZvcihvPW5ldyBYYyhlLmMubGVuZ3RoKSxrPW5ldyBTKGUpO2suYTxrLmMuYy5sZW5ndGg7KWg9dShKKGspLDEwKSxsZShvLHQuYltoLmMucF1baC5wXSk7Zm9yKEczbih0LG8sbiksTT1udWxsO009VTRuKG8pOylOeW4odCx1KE0uYSwyMzMpLHUoTS5iLDIzMyksbyk7Zm9yKGUuYz1OdChRbixEZSwxLDAsNSwxKSxzPW5ldyBTKG8pO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyMzMpLGQ9ci5kLHY9MCxDPWQubGVuZ3RoO3Y8QzsrK3YpaD1kW3ZdLGUuY1tlLmMubGVuZ3RoXT1oLHQuYVtoLmMucF1baC5wXS5hPUUxKHIuZyxyLmRbMF0pLmF9ZnVuY3Rpb24gbnh0KHQsZSl7dmFyIG4scixzLG87aWYoMDwoX3QodCwxNCk/dSh0LDE0KS5nYygpOmowKHQuS2MoKSkpKXtpZihzPWUsMTxzKXtmb3IoLS1zLG89bmV3IFdRLHI9dC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw4Niksbz1EMShsdChjdChqMSwxKSxEZSwyMCwwLFtvLG5ldyBMcChuKV0pKTtyZXR1cm4gbnh0KG8scyl9aWYoczwwKXtmb3Iobz1uZXcgWVEscj10LktjKCk7ci5PYigpOyluPXUoci5QYigpLDg2KSxvPUQxKGx0KGN0KGoxLDEpLERlLDIwLDAsW28sbmV3IExwKG4pXSkpO2lmKDA8KF90KG8sMTQpP3UobywxNCkuZ2MoKTpqMChvLktjKCkpKSlyZXR1cm4gbnh0KG8scyl9fXJldHVybiB1KHhqKHQuS2MoKSksODYpfWZ1bmN0aW9uIGxsKCl7bGw9WixSNz1uZXcgSDMoIkRFRkFVTFRfTUlOSU1VTV9TSVpFIiwwKSx1UD1uZXcgSDMoIk1JTklNVU1fU0laRV9BQ0NPVU5UU19GT1JfUEFERElORyIsMSksblU9bmV3IEgzKCJDT01QVVRFX1BBRERJTkciLDIpLGlBPW5ldyBIMygiT1VUU0lERV9OT0RFX0xBQkVMU19PVkVSSEFORyIsMyksclU9bmV3IEgzKCJQT1JUU19PVkVSSEFORyIsNCksc1U9bmV3IEgzKCJVTklGT1JNX1BPUlRfU1BBQ0lORyIsNSksaVU9bmV3IEgzKCJTUEFDRV9FRkZJQ0lFTlRfUE9SVF9MQUJFTFMiLDYpLEFmdD1uZXcgSDMoIkZPUkNFX1RBQlVMQVJfTk9ERV9MQUJFTFMiLDcpLGNQPW5ldyBIMygiQVNZTU1FVFJJQ0FMIiw4KX1mdW5jdGlvbiB5YXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO2lmKGUpe2lmKG49KG89ZS5UZygpLG8/UmwobykuTmgoKS5KaChvKTpudWxsKSxuKXtmb3IobTIodCxlLG4pLHM9ZS5UZygpLHY9MCxrPShzLmk9PW51bGwmJnZkKHMpLHMuaSkubGVuZ3RoO3Y8azsrK3YpZD0ocj0ocy5pPT1udWxsJiZ2ZChzKSxzLmkpLHY+PTAmJnY8ci5sZW5ndGg/clt2XTpudWxsKSxkLklqKCkmJiFkLkpqKCkmJihfdChkLDMyMik/VWZuKHQsdShkLDM0KSxlLG4pOihoPXUoZCwxOCksaC5CYiZkYyYmbjBuKHQsaCxlLG4pKSk7ZS5raCgpJiZ1KG4sNDkpLnZoKHUoZSw0OSkucWgoKSl9cmV0dXJuIG59ZWxzZSByZXR1cm4gbnVsbH1mdW5jdGlvbiBCbW4odCxlLG4pe3ZhciByLHMsbztpZighZS5mKXRocm93IGl0KG5ldyBGbigiR2l2ZW4gbGVhdmUgZWRnZSBpcyBubyB0cmVlIGVkZ2UuIikpO2lmKG4uZil0aHJvdyBpdChuZXcgRm4oIkdpdmVuIGVudGVyIGVkZ2UgaXMgYSB0cmVlIGVkZ2UgYWxyZWFkeS4iKSk7Zm9yKGUuZj0hMSxtMnQodC5wLGUpLG4uZj0hMCxGcyh0LnAsbikscj1uLmUuZS1uLmQuZS1uLmEsUXN0KHQsbi5lLGUpfHwocj0tciksbz1uZXcgUyh0LmUuYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTIxKSxRc3QodCxzLGUpfHwocy5lKz1yKTt0Lmo9MSxSQyh0LmMpLGE1dCh0LHUoSihuZXcgUyh0LmUuYSkpLDEyMSkpLGNoZSh0KX1mdW5jdGlvbiBlbGUodCxlKXt2YXIgbixyLHMsbyxoLGQ7aWYoZD11KFEoZSwoVGUoKSxjcykpLDk4KSxkPT0odWEoKSxnMCl8fGQ9PUdjKWZvcihzPW5ldyAkZShlLmYuYStlLmQuYitlLmQuYyxlLmYuYitlLmQuZCtlLmQuYSkuYixoPW5ldyBTKHQuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTApLG8uaz09KFZuKCksa3MpJiYobj11KFEobywoYWUoKSxvYykpLDYxKSwhKG4hPSh2ZSgpLEhuKSYmbiE9Qm4pJiYocj1YdCh5ZShRKG8sRnYpKSksZD09ZzAmJihyKj1zKSxvLm4uYj1yLXUoUShvLFJ2KSw4KS5iLEV6KG8sITEsITApKSl9ZnVuY3Rpb24gbmxlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixIO2lmKG5jbih0LGUsbiksbz1lW25dLEg9cj8odmUoKSxCbik6KHZlKCksSG4pLEJRZShlLmxlbmd0aCxuLHIpKXtmb3Iocz1lW3I/bi0xOm4rMV0sX210KHQscyxyPyhzbygpLG51KTooc28oKSx0bCkpLHY9byxDPTAsaj12Lmxlbmd0aDtDPGo7KytDKWg9dltDXSxHM3QodCxoLEgpO2ZvcihfbXQodCxvLHI/KHNvKCksdGwpOihzbygpLG51KSksZD1zLGs9MCxNPWQubGVuZ3RoO2s8TTsrK2spaD1kW2tdLGguZXx8RzN0KHQsaCxZRChIKSl9ZWxzZSBmb3IoZD1vLGs9MCxNPWQubGVuZ3RoO2s8TTsrK2spaD1kW2tdLEczdCh0LGgsSCk7cmV0dXJuITF9ZnVuY3Rpb24gUm1uKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDO3Y9S28oZSxuKSwobj09KHZlKCksbXIpfHxuPT1CbikmJih2PV90KHYsMTUyKT9aeCh1KHYsMTUyKSk6X3QodiwxMzEpP3UodiwxMzEpLmE6X3Qodiw1NCk/bmV3IGt3KHYpOm5ldyBPbSh2KSksaD0hMTtkbyBmb3Iocz0hMSxvPTA7bzx2LmdjKCktMTtvKyspaz11KHYuWGIobyksMTEpLGQ9dSh2LlhiKG8rMSksMTEpLHBnbih0LGssZCxyKSYmKGg9ITAsSXJ0KHQuYSx1KHYuWGIobyksMTEpLHUodi5YYihvKzEpLDExKSksQz11KHYuWGIobysxKSwxMSksdi5fYyhvKzEsdSh2LlhiKG8pLDExKSksdi5fYyhvLEMpLHM9ITApO3doaWxlKHMpO3JldHVybiBofWZ1bmN0aW9uIGptbih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2lmKHhsKHQuZSkpe2lmKGUhPW4mJihzPXUodC5nLDExOSksSD1zW25dLGg9SC5haygpLFgwKHQuZSxoKSkpe2ZvcihHPW91KHQuZS5UZygpLGgpLHY9LTEsZD0tMSxyPTAsaz0wLE09ZT5uP2U6bjtrPD1NOysraylrPT1uP2Q9cisrOihvPXNba10sQz1HLnJsKG8uYWsoKSksaz09ZSYmKHY9az09TSYmIUM/ci0xOnIpLEMmJisrcik7cmV0dXJuIGo9dShyXyh0LGUsbiksNzIpLGQhPXYmJm44KHQsbmV3IG1EKHQuZSw3LGgscGUoZCksSC5kZCgpLHYpKSxqfX1lbHNlIHJldHVybiB1KEpzdCh0LGUsbiksNzIpO3JldHVybiB1KHJfKHQsZSxuKSw3Mil9ZnVuY3Rpb24gJG1uKHQsZSl7dmFyIG4scixzLG8saCxkLHY7Zm9yKHZyKGUsIlBvcnQgb3JkZXIgcHJvY2Vzc2luZyIsMSksdj11KFEodCwoVGUoKSx2OXQpKSw0MjEpLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj11KEoociksMjkpLG89bmV3IFMobi5hKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMCksaD11KFEocyxjcyksOTgpLGQ9cy5qLGg9PSh1YSgpLFkyKXx8aD09ZzB8fGg9PUdjPyh3bigpLFpzKGQsVFR0KSk6aCE9RzEmJmghPVRiJiYod24oKSxacyhkLGwyZSksZTFuKGQpLHY9PShDRCgpLENodCkmJlpzKGQsdTJlKSkscy5pPSEwLHI1dChzKTtvcihlKX1mdW5jdGlvbiB6bW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdjtmb3Iodj1uZXcgX3IsZT1uZXcgZWV0LGg9dC5LYygpO2guT2IoKTspcz11KGguUGIoKSwxMCksZD1Gdyh4TShuZXcgWGIscyksZSksYXUodi5mLHMsZCk7Zm9yKG89dC5LYygpO28uT2IoKTspZm9yKHM9dShvLlBiKCksMTApLHI9bmV3IGFyKGxyKERzKHMpLmEuS2MoKSxuZXcgeikpO3pyKHIpOyluPXUoTXIociksMTcpLCFHYShuKSYmeWYobGYodWYoY2YoaGYobmV3IENoLGIuTWF0aC5tYXgoMSx1KFEobiwoVGUoKSxtOXQpKSwxOSkuYSkpLDEpLHUodHIodixuLmMuaSksMTIxKSksdSh0cih2LG4uZC5pKSwxMjEpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gcmxlKCl7cmxlPVosWW1lPWJpKG5ldyBWcywoV2EoKSxxYyksKHJvKCksdVR0KSksaV90PWJpKG5ldyBWcyxjdSxFViksWG1lPUt1KGJpKG5ldyBWcyxjdSxEViksSW8sTVYpLFdtZT1LdShiaShiaShuZXcgVnMsY3UsaVR0KSxxYyxzVHQpLElvLGFUdCksUW1lPXV2KHV2KFZSKEt1KGJpKG5ldyBWcyxEZCxGViksSW8sUFYpLHFjKSxPViksTlYpLEttZT1LdShuZXcgVnMsSW8sbFR0KSxHbWU9S3UoYmkoYmkoYmkobmV3IFZzLGdiLENWKSxxYyxTVikscWMsdTcpLElvLF9WKSxVbWU9S3UoYmkoYmkobmV3IFZzLHFjLHU3KSxxYyxrViksSW8seFYpfWZ1bmN0aW9uIHFtbih0LGUsbixyLHMsbyl7dmFyIGgsZCx2LGssQyxNLGo7Zm9yKGs9dnJlKGUpLXZyZSh0KSxoPVdhZShlLGspLHY9aXUoMCwwLDApO2s+PTAmJihkPUgxbih0LGgpLCEoZCYmKGs8MjI/di5sfD0xPDxrOms8NDQ/di5tfD0xPDxrLTIyOnYuaHw9MTw8ay00NCx0Lmw9PTAmJnQubT09MCYmdC5oPT0wKSkpOylDPWgubSxNPWguaCxqPWgubCxoLmg9TT4+PjEsaC5tPUM+Pj4xfChNJjEpPDwyMSxoLmw9aj4+PjF8KEMmMSk8PDIxLC0taztyZXR1cm4gbiYmQWl0KHYpLG8mJihyPyhoYj1yRSh0KSxzJiYoaGI9dHJlKGhiLChxOCgpLGFFdCkpKSk6aGI9aXUodC5sLHQubSx0LmgpKSx2fWZ1bmN0aW9uIEhtbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2ZvcihrPXQuZVtlLmMucF1bZS5wXSsxLHY9ZS5jLmEuYy5sZW5ndGgrMSxkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspe2ZvcihoPXUoSihkKSwxMSksTT0wLG89MCxzPXpwKEQxKGx0KGN0KGoxLDEpLERlLDIwLDAsW25ldyBRcyhoKSxuZXcgVHIoaCldKSkpO3pyKHMpOylyPXUoTXIocyksMTEpLHIuaS5jPT1lLmMmJihNKz1EUWUodCxyLmkpKzEsKytvKTtuPU0vbyxDPWguaixDPT0odmUoKSxIbik/bjxrP3QuZltoLnBdPXQuYy1uOnQuZltoLnBdPXQuYisodi1uKTpDPT1CbiYmKG48az90LmZbaC5wXT10LmIrbjp0LmZbaC5wXT10LmMtKHYtbikpfX1mdW5jdGlvbiBxbCh0LGUsbil7dmFyIHIscyxvLGgsZDtpZih0PT1udWxsKXRocm93IGl0KG5ldyBsZChfdSkpO2ZvcihvPXQubGVuZ3RoLGg9bz4wJiYoUnIoMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApPT00NXx8KFJyKDAsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCgwKT09NDMpKT8xOjAscj1oO3I8bztyKyspaWYoV2llKChScihyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocikpKT09LTEpdGhyb3cgaXQobmV3IGxkKHl2K3QrJyInKSk7aWYoZD1wYXJzZUludCh0LDEwKSxzPWQ8ZSxpc05hTihkKSl0aHJvdyBpdChuZXcgbGQoeXYrdCsnIicpKTtpZihzfHxkPm4pdGhyb3cgaXQobmV3IGxkKHl2K3QrJyInKSk7cmV0dXJuIGR9ZnVuY3Rpb24gVm1uKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihoPW5ldyBaaSxvPW5ldyBTKHQuYSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTEyKSxvTShzLHMuZi5jLmxlbmd0aCksVEMocyxzLmsuYy5sZW5ndGgpLHMuaT09MCYmKHMubz0wLGZzKGgscyxoLmMuYixoLmMpKTtmb3IoO2guYiE9MDspZm9yKHM9dShoLmI9PTA/bnVsbDooWm4oaC5iIT0wKSxsaChoLGguYS5hKSksMTEyKSxyPXMubysxLG49bmV3IFMocy5mKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMjkpLGQ9ZS5hLGFSKGQsYi5NYXRoLm1heChkLm8scikpLFRDKGQsZC5pLTEpLGQuaT09MCYmZnMoaCxkLGguYy5iLGguYyl9ZnVuY3Rpb24gR21uKHQpe3ZhciBlLG4scixzLG8saCxkLHY7Zm9yKGg9bmV3IFModCk7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoSihoKSw3OSkscj1Ebyh1KEF0KCghby5iJiYoby5iPW5ldyBDbihicixvLDQsNykpLG8uYiksMCksODIpKSxkPXIuaSx2PXIuaixzPXUoQXQoKCFvLmEmJihvLmE9bmV3IGZlKEppLG8sNiw2KSksby5hKSwwKSwyMDIpLHZqKHMscy5qK2Qscy5rK3YpLHdqKHMscy5iK2Qscy5jK3YpLG49bmV3IG5yKCghcy5hJiYocy5hPW5ldyBBcyhHaCxzLDUpKSxzLmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksNDY5KSx1MnQoZSxlLmErZCxlLmIrdik7ZHl0KHUocWUobywodWkoKSxhNSkpLDc0KSxkLHYpfX1mdW5jdGlvbiBNRSh0KXt2YXIgZTtzd2l0Y2godCl7Y2FzZSAxMDA6cmV0dXJuIFM0KG9TLCEwKTtjYXNlIDY4OnJldHVybiBTNChvUywhMSk7Y2FzZSAxMTk6cmV0dXJuIFM0KHZ1dCwhMCk7Y2FzZSA4NzpyZXR1cm4gUzQodnV0LCExKTtjYXNlIDExNTpyZXR1cm4gUzQobXV0LCEwKTtjYXNlIDgzOnJldHVybiBTNChtdXQsITEpO2Nhc2UgOTk6cmV0dXJuIFM0KHl1dCwhMCk7Y2FzZSA2NzpyZXR1cm4gUzQoeXV0LCExKTtjYXNlIDEwNTpyZXR1cm4gUzQoeHV0LCEwKTtjYXNlIDczOnJldHVybiBTNCh4dXQsITEpO2RlZmF1bHQ6dGhyb3cgaXQobmV3IFZvKChlPXQsd2dlK2UudG9TdHJpbmcoMTYpKSkpfX1mdW5jdGlvbiBVbW4odCl7dmFyIGUsbixyLHMsbztzd2l0Y2gocz11KE5lKHQuYSwwKSwxMCksZT1uZXcgWTAodCksbGUodC5hLGUpLGUuby5hPWIuTWF0aC5tYXgoMSxzLm8uYSksZS5vLmI9Yi5NYXRoLm1heCgxLHMuby5iKSxlLm4uYT1zLm4uYSxlLm4uYj1zLm4uYix1KFEocywoYWUoKSxvYykpLDYxKS5nKXtjYXNlIDQ6ZS5uLmErPTI7YnJlYWs7Y2FzZSAxOmUubi5iKz0yO2JyZWFrO2Nhc2UgMjplLm4uYS09MjticmVhaztjYXNlIDM6ZS5uLmItPTJ9cmV0dXJuIHI9bmV3IE1jLFVvKHIsZSksbj1uZXcgVncsbz11KE5lKHMuaiwwKSwxMSksT2EobixvKSxvYShuLHIpLExpKEdmKHIubiksby5uKSxMaShHZihyLmEpLG8uYSksZX1mdW5jdGlvbiBpbGUodCxlLG4scixzKXtuJiYoIXJ8fCh0LmMtdC5iJnQuYS5sZW5ndGgtMSk+MSkmJmU9PTEmJnUodC5hW3QuYl0sMTApLms9PShWbigpLExsKT9wNih1KHQuYVt0LmJdLDEwKSwoemwoKSxmMCkpOnImJighbnx8KHQuYy10LmImdC5hLmxlbmd0aC0xKT4xKSYmZT09MSYmdSh0LmFbdC5jLTEmdC5hLmxlbmd0aC0xXSwxMCkuaz09KFZuKCksTGwpP3A2KHUodC5hW3QuYy0xJnQuYS5sZW5ndGgtMV0sMTApLCh6bCgpLGtiKSk6KHQuYy10LmImdC5hLmxlbmd0aC0xKT09Mj8ocDYodShROSh0KSwxMCksKHpsKCksZjApKSxwNih1KFE5KHQpLDEwKSxrYikpOlIybih0LHMpLGxtdCh0KX1mdW5jdGlvbiBXbW4odCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKG89MCxzPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwzMyksaD0iIiwoIXIubiYmKHIubj1uZXcgZmUocW8sciwxLDcpKSxyLm4pLmk9PTB8fChoPXUoQXQoKCFyLm4mJihyLm49bmV3IGZlKHFvLHIsMSw3KSksci5uKSwwKSwxMzcpLmEpLGQ9bmV3IERpdChvKyssZSxoKSxNbyhkLHIpLEp0KGQsKGZjKCkscVMpLHIpLGQuZS5iPXIuaityLmYvMixkLmYuYT1iLk1hdGgubWF4KHIuZywxKSxkLmUuYT1yLmkrci5nLzIsZC5mLmI9Yi5NYXRoLm1heChyLmYsMSkscmkoZS5iLGQpLGF1KG4uZixyLGQpfWZ1bmN0aW9uIFltbih0KXt2YXIgZSxuLHIscyxvO3I9dShRKHQsKGFlKCksX2kpKSwzMyksbz11KHFlKHIsKFRlKCksJDIpKSwxNzQpLkhjKChBbCgpLEsyKSksdC5lfHwocz11KFEodCxWYyksMjEpLGU9bmV3ICRlKHQuZi5hK3QuZC5iK3QuZC5jLHQuZi5iK3QuZC5kK3QuZC5hKSxzLkhjKChvbygpLHZoKSk/KHdvKHIsY3MsKHVhKCksR2MpKSx3dihyLGUuYSxlLmIsITEsITApKTpqZShSZShxZShyLHVodCkpKXx8d3YocixlLmEsZS5iLCEwLCEwKSksbz93byhyLCQyLHVuKEsyKSk6d28ociwkMiwobj11KFZmKHJBKSw5KSxuZXcgc2gobix1KGZmKG4sbi5sZW5ndGgpLDkpLDApKSl9ZnVuY3Rpb24gcnh0KHQsZSxuKXt2YXIgcixzLG8saDtpZihlWzBdPj10Lmxlbmd0aClyZXR1cm4gbi5vPTAsITA7c3dpdGNoKHdhKHQsZVswXSkpe2Nhc2UgNDM6cz0xO2JyZWFrO2Nhc2UgNDU6cz0tMTticmVhaztkZWZhdWx0OnJldHVybiBuLm89MCwhMH1pZigrK2VbMF0sbz1lWzBdLGg9Z3EodCxlKSxoPT0wJiZlWzBdPT1vKXJldHVybiExO2lmKGVbMF08dC5sZW5ndGgmJndhKHQsZVswXSk9PTU4KXtpZihyPWgqNjAsKytlWzBdLG89ZVswXSxoPWdxKHQsZSksaD09MCYmZVswXT09bylyZXR1cm4hMTtyKz1ofWVsc2Ugcj1oLHI8MjQmJmVbMF0tbzw9Mj9yKj02MDpyPXIlMTAwKyhyLzEwMHwwKSo2MDtyZXR1cm4gcio9cyxuLm89LXIsITB9ZnVuY3Rpb24gS21uKHQpe3ZhciBlLG4scixzLG8saCxkLHYsaztmb3IoaD1uZXcgaGUscj1uZXcgYXIobHIoRHModC5iKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KE1yKHIpLDE3KSxHYShuKSYmbGUoaCxuZXcgR0p0KG4sTXRlKHQsbi5jKSxNdGUodCxuLmQpKSk7Zm9yKGs9KG89bmV3IHYxKHQuZSkuYS52YygpLktjKCksbmV3IG0xKG8pKTtrLmEuT2IoKTspZD0oZT11KGsuYS5QYigpLDQyKSx1KGUuZGQoKSwxMTMpKSxkLmQucD0wO2Zvcih2PShzPW5ldyB2MSh0LmUpLmEudmMoKS5LYygpLG5ldyBtMShzKSk7di5hLk9iKCk7KWQ9KGU9dSh2LmEuUGIoKSw0MiksdShlLmRkKCksMTEzKSksZC5kLnA9PTAmJmxlKHQuZCxBbW4odCxkKSl9ZnVuY3Rpb24gWG1uKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihvPVQxKHQpLHM9bmV3IG5yKCghdC5lJiYodC5lPW5ldyBDbihZcyx0LDcsNCkpLHQuZSkpO3MuZSE9cy5pLmdjKCk7KWlmKHI9dShkcihzKSw3OSksZD1Ebyh1KEF0KCghci5jJiYoci5jPW5ldyBDbihicixyLDUsOCkpLHIuYyksMCksODIpKSwhZXkoZCxvKSlyZXR1cm4hMDtmb3Iobj1uZXcgbnIoKCF0LmQmJih0LmQ9bmV3IENuKFlzLHQsOCw1KSksdC5kKSk7bi5lIT1uLmkuZ2MoKTspaWYoZT11KGRyKG4pLDc5KSxoPURvKHUoQXQoKCFlLmImJihlLmI9bmV3IENuKGJyLGUsNCw3KSksZS5iKSwwKSw4MikpLCFleShoLG8pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFFtbih0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2Zvcih2PW5ldyBQdSxlPWVpKHQsMCksZD1udWxsLG49dSh0aShlKSw4KSxzPXUodGkoZSksOCk7ZS5iIT1lLmQuYzspZD1uLG49cyxzPXUodGkoZSksOCksbz1FZWUoaWEobmV3ICRlKGQuYSxkLmIpLG4pKSxoPUVlZShpYShuZXcgJGUocy5hLHMuYiksbikpLHI9MTAscj1iLk1hdGgubWluKHIsYi5NYXRoLmFicyhvLmErby5iKS8yKSxyPWIuTWF0aC5taW4ocixiLk1hdGguYWJzKGguYStoLmIpLzIpLG8uYT1KTShvLmEpKnIsby5iPUpNKG8uYikqcixoLmE9Sk0oaC5hKSpyLGguYj1KTShoLmIpKnIscmkodixMaShvLG4pKSxyaSh2LExpKGgsbikpO3JldHVybiB2fWZ1bmN0aW9uIEhsKHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7cmV0dXJuIGg9dC5laCgpLHY9dC5aZygpLHM9bnVsbCx2P2UmJiEod2F0KHQsZSxuKS5CYiZLYSk/KHI9QmEodi5WaygpLHQsciksdC51aChudWxsKSxzPWUuZmgoKSk6dj1udWxsOihoJiYodj1oLmZoKCkpLGUmJihzPWUuZmgoKSkpLHYhPXMmJnYmJnYuWmsodCksZD10LlZnKCksdC5SZyhlLG4pLHYhPXMmJnMmJnMuWWsodCksdC5MZygpJiZ0Lk1nKCkmJihoJiZkPj0wJiZkIT1uJiYobz1uZXcgSnModCwxLGQsaCxudWxsKSxyP3IuRWkobyk6cj1vKSxuPj0wJiYobz1uZXcgSnModCwxLG4sZD09bj9oOm51bGwsZSkscj9yLkVpKG8pOnI9bykpLHJ9ZnVuY3Rpb24gc2xlKHQpe3ZhciBlLG4scjtpZih0LmI9PW51bGwpe2lmKHI9bmV3IEFnLHQuaSE9bnVsbCYmKGdvKHIsdC5pKSxyLmErPSI6IiksdC5mJjI1Nil7Zm9yKHQuZiYyNTYmJnQuYSE9bnVsbCYmKGxybih0LmkpfHwoci5hKz0iLy8iKSxnbyhyLHQuYSkpLHQuZCE9bnVsbCYmKHIuYSs9Ii8iLGdvKHIsdC5kKSksdC5mJjE2JiYoci5hKz0iLyIpLGU9MCxuPXQuai5sZW5ndGg7ZTxuO2UrKyllIT0wJiYoci5hKz0iLyIpLGdvKHIsdC5qW2VdKTt0LmchPW51bGwmJihyLmErPSI/IixnbyhyLHQuZykpfWVsc2UgZ28ocix0LmEpO3QuZSE9bnVsbCYmKHIuYSs9IiMiLGdvKHIsdC5lKSksdC5iPXIuYX1yZXR1cm4gdC5ifWZ1bmN0aW9uIFptbih0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3Iocz1uZXcgUyhlLmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEwKSxvPVEociwoYWUoKSxfaSkpLF90KG8sMTEpJiYoaD11KG8sMTEpLGQ9VGxlKGUscixoLm8uYSxoLm8uYiksaC5uLmE9ZC5hLGgubi5iPWQuYixCcyhoLHUoUShyLG9jKSw2MSkpKTtuPW5ldyAkZShlLmYuYStlLmQuYitlLmQuYyxlLmYuYitlLmQuZCtlLmQuYSksdShRKGUsKGFlKCksVmMpKSwyMSkuSGMoKG9vKCksdmgpKT8oSnQodCwoVGUoKSxjcyksKHVhKCksR2MpKSx1KFEoTmEodCksVmMpLDIxKS5GYyh5Nyksb2hlKHQsbiwhMSkpOm9oZSh0LG4sITApfWZ1bmN0aW9uIEptbih0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKHZyKG4sIk1pbmltaXplIENyb3NzaW5ncyAiK3QuYSwxKSxyPWUuYi5jLmxlbmd0aD09MHx8IXFDKFJpKG5ldyBUbihudWxsLG5ldyBfbihlLmIsMTYpKSxuZXcgWnQobmV3IERrKSkpLnNkKChRYigpLG83KSksdj1lLmIuYy5sZW5ndGg9PTEmJnUoTmUoZS5iLDApLDI5KS5hLmMubGVuZ3RoPT0xLG89VnQoUShlLChUZSgpLHF5KSkpPT09VnQoKEcwKCksc3ApKSxyfHx2JiYhbyl7b3Iobik7cmV0dXJufXM9S3duKHQsZSksaD0oZD11KFpmKHMsMCksMjE0KSxkLmMuUmYoKT9kLmMuTGYoKT9uZXcgTCR0KHQpOm5ldyBNJHQodCk6bmV3IEEkdCh0KSksWHVuKHMsaCksa2xuKHQpLG9yKG4pfWZ1bmN0aW9uIHR5bih0LGUsbixyKXt2YXIgcyxvLGgsZCx2O2lmKHY9QXIoX2EoaTAsWGQoQXIoX2EoZT09bnVsbD8wOkhpKGUpLHMwKSksMTUpKSkscz1BcihfYShpMCxYZChBcihfYShuPT1udWxsPzA6SGkobiksczApKSwxNSkpKSxkPVc5KHQsZSx2KSxoPVU5KHQsbixzKSxkJiZzPT1kLmEmJnBkKG4sZC5nKSlyZXR1cm4gbjtpZihoJiYhcil0aHJvdyBpdChuZXcgRm4oImtleSBhbHJlYWR5IHByZXNlbnQ6ICIrbikpO3JldHVybiBkJiZtNCh0LGQpLGgmJm00KHQsaCksbz1uZXcgbyQobixzLGUsdiksZkkodCxvLGgpLGgmJihoLmU9bnVsbCxoLmM9bnVsbCksZCYmKGQuZT1udWxsLGQuYz1udWxsKSxhYWUodCksZD9kLmc6bnVsbH1mdW5jdGlvbiBhbGUodCxlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKG89MDtvPGU7bysrKXtmb3Iocj0wLGQ9bysxO2Q8ZTtkKyspcj1QYShQYShfYShOcyh0W29dLGNvKSxOcyh0W2RdLGNvKSksTnMobltvK2RdLGNvKSksTnMoQXIociksY28pKSxuW28rZF09QXIocikscj1WbShyLDMyKTtuW28rZV09QXIocil9Zm9yKERjbihuLG4sZTw8MSkscj0wLHM9MCxoPTA7czxlOysrcyxoKyspcj1QYShQYShfYShOcyh0W3NdLGNvKSxOcyh0W3NdLGNvKSksTnMobltoXSxjbykpLE5zKEFyKHIpLGNvKSksbltoXT1BcihyKSxyPVZtKHIsMzIpLCsraCxyPVBhKHIsTnMobltoXSxjbykpLG5baF09QXIocikscj1WbShyLDMyKTtyZXR1cm4gbn1mdW5jdGlvbiBvbGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEM7aWYoIUY4KGUpKXtmb3Iodj1YdCh5ZShveShuLmMsKFRlKCksTFMpKSkpLGs9dShveShuLmMsUE8pLDE0MiksIWsmJihrPW5ldyBPQykscj1uLmEscz1udWxsLGQ9ZS5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwxMSksQz0wLHM/KEM9dixDKz1zLm8uYik6Qz1rLmQsbz1Gdyh4TShuZXcgWGIsaCksdC5mKSxraSh0LmssaCxvKSx5ZihsZih1ZihjZihoZihuZXcgQ2gsMCkscHMoYi5NYXRoLmNlaWwoQykpKSxyKSxvKSkscz1oLHI9bzt5ZihsZih1ZihjZihoZihuZXcgQ2gsMCkscHMoYi5NYXRoLmNlaWwoay5hK3Muby5iKSkpLHIpLG4uZCkpfX1mdW5jdGlvbiBleW4odCxlLG4scixzLG8saCxkKXt2YXIgdixrLEMsTSxqLEg7cmV0dXJuIEg9ITEsaj1vLW4ucyxDPW4udC1lLmYrKGs9X18obixqLCExKSxrLmEpLHIuZytkPmo/ITE6KE09KHY9X18ocixqLCExKSx2LmEpLEMrZCtNPD1lLmImJih2RChuLG8tbi5zKSxuLmM9ITAsdkQocixvLW4ucyksdEkocixuLnMsbi50K24uZCtkKSxyLms9ITAscHl0KG4ucSxyKSxIPSEwLHMmJihheihlLHIpLHIuaj1lLHQuYy5sZW5ndGg+aCYmKHNJKChBbihoLHQuYy5sZW5ndGgpLHUodC5jW2hdLDIwMCkpLHIpLChBbihoLHQuYy5sZW5ndGgpLHUodC5jW2hdLDIwMCkpLmEuYy5sZW5ndGg9PTAmJkZnKHQsaCkpKSksSCl9ZnVuY3Rpb24gbnluKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKHZyKGUsIlBhcnRpdGlvbiBtaWRwcm9jZXNzaW5nIiwxKSxzPW5ldyBVdyxscyhSaShuZXcgVG4obnVsbCxuZXcgX24odC5hLDE2KSksbmV3IEtLKSxuZXcgbXcocykpLHMuZCE9MCl7Zm9yKGQ9dShCbChaUXQoKG89cy5pLG5ldyBUbihudWxsLChvfHwocy5pPW5ldyBLMyhzLHMuYykpKS5OYygpKSkpLGMyKG5ldyBrZSxuZXcgY2UsbmV3IFhuLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFsoTzEoKSxVbCldKSkpLDE1KSxyPWQuS2MoKSxuPXUoci5QYigpLDE5KTtyLk9iKCk7KWg9dShyLlBiKCksMTkpLHN3bih1KEFpKHMsbiksMjEpLHUoQWkocyxoKSwyMSkpLG49aDtvcihlKX19ZnVuY3Rpb24gY2xlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO2lmKGUucD09MCl7Zm9yKGUucD0xLGg9bixofHwocz1uZXcgaGUsbz0ocj11KFZmKFhhKSw5KSxuZXcgc2gocix1KGZmKHIsci5sZW5ndGgpLDkpLDApKSxoPW5ldyBmYShzLG8pKSx1KGguYSwxNSkuRmMoZSksZS5rPT0oVm4oKSxrcykmJnUoaC5iLDIxKS5GYyh1KFEoZSwoYWUoKSxvYykpLDYxKSksdj1uZXcgUyhlLmopO3YuYTx2LmMuYy5sZW5ndGg7KWZvcihkPXUoSih2KSwxMSksQz16cChEMShsdChjdChqMSwxKSxEZSwyMCwwLFtuZXcgUXMoZCksbmV3IFRyKGQpXSkpKTt6cihDKTspaz11KE1yKEMpLDExKSxjbGUodCxrLmksaCk7cmV0dXJuIGh9cmV0dXJuIG51bGx9ZnVuY3Rpb24ga18odCxlKXt2YXIgbixyLHMsbyxoO2lmKHQuQWIpe2lmKHQuQWIpe2lmKGg9dC5BYi5pLGg+MCl7aWYocz11KHQuQWIuZywxOTM0KSxlPT1udWxsKXtmb3Iobz0wO288aDsrK28paWYobj1zW29dLG4uZD09bnVsbClyZXR1cm4gbn1lbHNlIGZvcihvPTA7bzxoOysrbylpZihuPXNbb10saG4oZSxuLmQpKXJldHVybiBufX1lbHNlIGlmKGU9PW51bGwpe2ZvcihyPW5ldyBucih0LkFiKTtyLmUhPXIuaS5nYygpOylpZihuPXUoZHIociksNTkwKSxuLmQ9PW51bGwpcmV0dXJuIG59ZWxzZSBmb3Iocj1uZXcgbnIodC5BYik7ci5lIT1yLmkuZ2MoKTspaWYobj11KGRyKHIpLDU5MCksaG4oZSxuLmQpKXJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIHJ5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGs7aWYoaz1SZShRKGUsKGd2KCksX3llKSkpLGs9PW51bGx8fChPbihrKSxrKSl7Zm9yKExibih0LGUpLHM9bmV3IGhlLHY9ZWkoZS5iLDApO3YuYiE9di5kLmM7KWg9dSh0aSh2KSw4Niksbj1LNHQodCxoLG51bGwpLG4mJihNbyhuLGUpLHMuY1tzLmMubGVuZ3RoXT1uKTtpZih0LmE9bnVsbCx0LmI9bnVsbCxzLmMubGVuZ3RoPjEpZm9yKHI9bmV3IFMocyk7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49dShKKHIpLDEzNSksbz0wLGQ9ZWkobi5iLDApO2QuYiE9ZC5kLmM7KWg9dSh0aShkKSw4NiksaC5nPW8rKztyZXR1cm4gc31yZXR1cm4gQTEobHQoY3QoZzZuLDEpLGg2dCwxMzUsMCxbZV0pKX1mdW5jdGlvbiBpeW4odCxlLG4scixzKXt2YXIgbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0O0g9VXNuKHQsQ3l0KGUpLHMpLHV5dChILFIwKHMsQWQpKSxFPW51bGwsRz1zLEs9UjkoRyxIZGUpLHR0PW5ldyBkenQoSCksQ2duKHR0LmEsSyksZ3Q9UjkoRywiZW5kUG9pbnQiKSxNdD1uZXcgd3p0KEgpLFRnbihNdC5hLGd0KSxTdD1LdyhHLExIKSxSdD1uZXcgeXp0KEgpLGYwbihSdC5hLFN0KSxNPVIwKHMsQzh0KSxvPW5ldyBGR3QodCxIKSxCWmUoby5hLG8uYixNKSxqPVIwKHMsVDh0KSxoPW5ldyBOR3QodCxIKSxSWmUoaC5hLGguYixqKSxrPUt3KHMsUzh0KSxkPW5ldyBCR3QobixIKSxYMW4oZC5iLGQuYSxrKSxDPUt3KHMsXzh0KSx2PW5ldyBSR3QocixIKSxRMW4odi5iLHYuYSxDKX1mdW5jdGlvbiBpeHQodCxlLG4pe3ZhciByLHMsbyxoLGQ7c3dpdGNoKGQ9bnVsbCxlLmcpe2Nhc2UgMTpmb3Iocz1uZXcgUyh0LmopO3MuYTxzLmMuYy5sZW5ndGg7KWlmKHI9dShKKHMpLDExKSxqZShSZShRKHIsKGFlKCksVWx0KSkpKSlyZXR1cm4gcjtkPW5ldyBNYyxKdChkLChhZSgpLFVsdCksKE5uKCksITApKTticmVhaztjYXNlIDI6Zm9yKGg9bmV3IFModC5qKTtoLmE8aC5jLmMubGVuZ3RoOylpZihvPXUoSihoKSwxMSksamUoUmUoUShvLChhZSgpLFlsdCkpKSkpcmV0dXJuIG87ZD1uZXcgTWMsSnQoZCwoYWUoKSxZbHQpLChObigpLCEwKSl9cmV0dXJuIGQmJihVbyhkLHQpLEJzKGQsbiksUWZuKGQubix0Lm8sbikpLGR9ZnVuY3Rpb24gdWxlKHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihkPS0xLGg9bmV3IFppLHI9bmV3IEwxKHQuYik7R28oci5hKXx8R28oci5iKTspe2ZvcihuPXUoR28oci5hKT9KKHIuYSk6SihyLmIpLDE3KSxkPWIuTWF0aC5tYXgoZCxYdCh5ZShRKG4sKFRlKCksSmcpKSkpKSxuLmM9PXQ/bHMoUmkobmV3IFRuKG51bGwsbmV3IF9uKG4uYiwxNikpLG5ldyBfSyksbmV3IFBjKGgpKTpscyhSaShuZXcgVG4obnVsbCxuZXcgX24obi5iLDE2KSksbmV3IFNLKSxuZXcgWmEoaCkpLG89ZWkoaCwwKTtvLmIhPW8uZC5jOylzPXUodGkobyksNzApLFVzKHMsKGFlKCksQjYpKXx8SnQocyxCNixuKTtMcyhlLGgpLEFoKGgpfXJldHVybiBkfWZ1bmN0aW9uIHN5bih0LGUsbixyLHMpe3ZhciBvLGgsZCx2O289bmV3IFkwKHQpLEQwKG8sKFZuKCksSGMpKSxKdChvLChUZSgpLGNzKSwodWEoKSxHYykpLEp0KG8sKGFlKCksX2kpLGUuYy5pKSxoPW5ldyBNYyxKdChoLF9pLGUuYyksQnMoaCxzKSxVbyhoLG8pLEp0KGUuYyxKdSxvKSxkPW5ldyBZMCh0KSxEMChkLEhjKSxKdChkLGNzLEdjKSxKdChkLF9pLGUuZC5pKSx2PW5ldyBNYyxKdCh2LF9pLGUuZCksQnModixzKSxVbyh2LGQpLEp0KGUuZCxKdSxkKSxPYShlLGgpLG9hKGUsdiksS20oMCxuLmMubGVuZ3RoKSxYQyhuLmMsMCxvKSxyLmNbci5jLmxlbmd0aF09ZCxKdChvLEpWLHBlKDEpKSxKdChkLEpWLHBlKDEpKX1mdW5jdGlvbiBwdih0LGUsbixyLHMpe3ZhciBvLGgsZCx2LGs7ZD1zP3IuYjpyLmEsIUkwKHQuYSxyKSYmKGs9ZD5uLnMmJmQ8bi5jLHY9ITEsbi5lLmIhPTAmJm4uai5iIT0wJiYodj12fChiLk1hdGguYWJzKGQtWHQoeWUod250KG4uZSkpKSk8RWQmJmIuTWF0aC5hYnMoZC1YdCh5ZSh3bnQobi5qKSkpKTxFZCksdj12fChiLk1hdGguYWJzKGQtWHQoeWUoQWoobi5lKSkpKTxFZCYmYi5NYXRoLmFicyhkLVh0KHllKEFqKG4uaikpKSk8RWQpKSwoa3x8dikmJihoPXUoUShlLChUZSgpLFNvKSksNzQpLGh8fChoPW5ldyBQdSxKdChlLFNvLGgpKSxvPW5ldyB4byhyKSxmcyhoLG8saC5jLmIsaC5jKSxGcyh0LmEsbykpKX1mdW5jdGlvbiBheW4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEM7aWYoZmJuKHQsZSxuLHIpKXJldHVybiEwO2ZvcihoPW5ldyBTKGUuZik7aC5hPGguYy5jLmxlbmd0aDspe3N3aXRjaChvPXUoSihoKSwzMjQpLGQ9ITEsdj10LmotZS5qK24saz12K2UubyxDPXQuay1lLmsrcixzPUMrZS5wLG8uYS5nKXtjYXNlIDA6ZD1OaXQodCx2K28uYi5hLDAsditvLmMuYSxDLTEpO2JyZWFrO2Nhc2UgMTpkPU5pdCh0LGssQytvLmIuYSx0Lm8tMSxDK28uYy5hKTticmVhaztjYXNlIDI6ZD1OaXQodCx2K28uYi5hLHMsditvLmMuYSx0LnAtMSk7YnJlYWs7ZGVmYXVsdDpkPU5pdCh0LDAsQytvLmIuYSx2LTEsQytvLmMuYSl9aWYoZClyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBveW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7Zm9yKGg9bmV3IFMoZS5iKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMjkpLGs9bmV3IFMoby5hKTtrLmE8ay5jLmMubGVuZ3RoOyl7Zm9yKHY9dShKKGspLDEwKSxDPW5ldyBoZSxkPTAscj1uZXcgYXIobHIoam8odikuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSwxNyksIShHYShuKXx8IUdhKG4pJiZuLmMuaS5jPT1uLmQuaS5jKSYmKHM9dShRKG4sKFRlKCksSDYpKSwxOSkuYSxzPmQmJihkPXMsQy5jPU50KFFuLERlLDEsMCw1LDEpKSxzPT1kJiZsZShDLG5ldyBmYShuLmMuaSxuKSkpO3duKCksWnMoQyx0LmMpLEhtKHQuYix2LnAsQyl9fWZ1bmN0aW9uIGN5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3IoaD1uZXcgUyhlLmIpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSwyOSksaz1uZXcgUyhvLmEpO2suYTxrLmMuYy5sZW5ndGg7KXtmb3Iodj11KEooayksMTApLEM9bmV3IGhlLGQ9MCxyPW5ldyBhcihscihEcyh2KS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KE1yKHIpLDE3KSwhKEdhKG4pfHwhR2EobikmJm4uYy5pLmM9PW4uZC5pLmMpJiYocz11KFEobiwoVGUoKSxINikpLDE5KS5hLHM+ZCYmKGQ9cyxDLmM9TnQoUW4sRGUsMSwwLDUsMSkpLHM9PWQmJmxlKEMsbmV3IGZhKG4uZC5pLG4pKSk7d24oKSxacyhDLHQuYyksSG0odC5mLHYucCxDKX19ZnVuY3Rpb24gbGxlKHQpe013KHQsbmV3IGsyKF93KEV3KEN3KFR3KG5ldyBrZyxUdiksIkVMSyBCb3giKSwiQWxnb3JpdGhtIGZvciBwYWNraW5nIG9mIHVuY29ubmVjdGVkIGJveGVzLCBpLmUuIGdyYXBocyB3aXRob3V0IGVkZ2VzLiIpLG5ldyBxWikpKSx4ZSh0LFR2LHh2LFBTdCkseGUodCxUdixDeSwxNSkseGUodCxUdixWSSxwZSgwKSkseGUodCxUdixDSCxJZShEU3QpKSx4ZSh0LFR2LEQ0LEllKGU0ZSkpLHhlKHQsVHYsVDYsSWUobjRlKSkseGUodCxUdixFNixjZGUpLHhlKHQsVHYsR0ksSWUoSVN0KSkseGUodCxUdixDNixJZShPU3QpKSx4ZSh0LFR2LGc4dCxJZShsZnQpKSx4ZSh0LFR2LG1ILEllKHQ0ZSkpfWZ1bmN0aW9uIGhsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZihzPXQuaSxoPXMuby5hLG89cy5vLmIsaDw9MCYmbzw9MClyZXR1cm4gdmUoKSxabztzd2l0Y2goaz10Lm4uYSxDPXQubi5iLGQ9dC5vLmEsbj10Lm8uYixlLmcpe2Nhc2UgMjpjYXNlIDE6aWYoazwwKXJldHVybiB2ZSgpLEJuO2lmKGsrZD5oKXJldHVybiB2ZSgpLEhuO2JyZWFrO2Nhc2UgNDpjYXNlIDM6aWYoQzwwKXJldHVybiB2ZSgpLFBuO2lmKEMrbj5vKXJldHVybiB2ZSgpLG1yfXJldHVybiB2PShrK2QvMikvaCxyPShDK24vMikvbyx2K3I8PTEmJnYtcjw9MD8odmUoKSxCbik6dityPj0xJiZ2LXI+PTA/KHZlKCksSG4pOnI8LjU/KHZlKCksUG4pOih2ZSgpLG1yKX1mdW5jdGlvbiB1eW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2ZvcihuPSExLEM9WHQoeWUoUShlLChUZSgpLCR2KSkpKSxHPXNiKkMscz1uZXcgUyhlLmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyOSksaz1uZXcgUyhyLmEpLG89dShKKGspLDEwKSxNPWZ2dCh0LmFbby5wXSk7ay5hPGsuYy5jLmxlbmd0aDspZD11KEooayksMTApLGo9ZnZ0KHQuYVtkLnBdKSxNIT1qJiYoSD1XMyh0LmIsbyxkKSxoPW8ubi5iK28uby5iK28uZC5hK00uYStILHY9ZC5uLmItZC5kLmQrai5hLGg+ditHJiYoSz1NLmcrai5nLGouYT0oai5nKmouYStNLmcqTS5hKS9LLGouZz1LLE0uZj1qLG49ITApKSxvPWQsTT1qO3JldHVybiBufWZ1bmN0aW9uIGZsZSh0LGUsbixyLHMsbyxoKXt2YXIgZCx2LGssQyxNLGo7Zm9yKGo9bmV3IEZ4LGs9ZS5LYygpO2suT2IoKTspZm9yKGQ9dShrLlBiKCksODM5KSxNPW5ldyBTKGQud2YoKSk7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTgxKSxWdChDLldlKCh1aSgpLHBmdCkpKT09PVZ0KChNMSgpLEY3KSkmJihHdWUoaixDLCExLHIscyxvLGgpLGdfKHQsaikpO2Zvcih2PW4uS2MoKTt2Lk9iKCk7KWZvcihkPXUodi5QYigpLDgzOSksTT1uZXcgUyhkLndmKCkpO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDE4MSksVnQoQy5XZSgodWkoKSxwZnQpKSk9PT1WdCgoTTEoKSxaeSkpJiYoR3VlKGosQywhMCxyLHMsbyxoKSxnXyh0LGopKX1mdW5jdGlvbiBseW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrO2ZvcihoPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpO2guZSE9aC5pLmdjKCk7KWZvcihvPXUoZHIoaCksMzMpLHM9bmV3IGFyKGxyKEswKG8pLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTXIocyksNzkpLCF3XyhyKSYmIXdfKHIpJiYhZnYocikmJih2PXUoZWMoTG8obi5mLG8pKSw4Niksaz11KHRyKG4sRG8odShBdCgoIXIuYyYmKHIuYz1uZXcgQ24oYnIsciw1LDgpKSxyLmMpLDApLDgyKSkpLDg2KSx2JiZrJiYoZD1uZXcgTnZ0KHYsayksSnQoZCwoZmMoKSxxUyksciksTW8oZCxyKSxyaSh2LmQsZCkscmkoay5iLGQpLHJpKGUuYSxkKSkpfWZ1bmN0aW9uIGh5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGs7Zm9yKHY9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7di5PYigpOylkPXUodi5QYigpLDExMSkscz1kLmM/c0t0KGQuYyk6MCxzPjA/ZC5hPyhrPWQuYi5yZigpLmIscz5rJiYodC52fHxkLmMuZC5jLmxlbmd0aD09MT8oaD0ocy1rKS8yLGQuZC5kPWgsZC5kLmE9aCk6KG49dShOZShkLmMuZCwwKSwxODEpLnJmKCkuYixyPShuLWspLzIsZC5kLmQ9Yi5NYXRoLm1heCgwLHIpLGQuZC5hPXMtci1rKSkpOmQuZC5hPXQudCtzOlM5KHQudSkmJihvPUk0dChkLmIpLG8uZDwwJiYoZC5kLmQ9LW8uZCksby5kK28uYT5kLmIucmYoKS5iJiYoZC5kLmE9by5kK28uYS1kLmIucmYoKS5iKSl9ZnVuY3Rpb24gZnluKHQsZSl7dmFyIG47c3dpdGNoKF9EKHQpKXtjYXNlIDY6cmV0dXJuIHJhKGUpO2Nhc2UgNzpyZXR1cm4gQm0oZSk7Y2FzZSA4OnJldHVybiBObShlKTtjYXNlIDM6cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJihuPV9EKGUpLCEobj49MTQmJm48PTE2KSk7Y2FzZSAxMTpyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGU9PT1HYXQ7Y2FzZSAxMjpyZXR1cm4gZSE9bnVsbCYmKHR5cGVvZiBlPT09TUl8fHR5cGVvZiBlPT1HYXQpO2Nhc2UgMDpyZXR1cm4gZ3N0KGUsdC5fX2VsZW1lbnRUeXBlSWQkKTtjYXNlIDI6cmV0dXJuIFpudChlKSYmZS5pbSE9PUV0O2Nhc2UgMTpyZXR1cm4gWm50KGUpJiZlLmltIT09RXR8fGdzdChlLHQuX19lbGVtZW50VHlwZUlkJCk7ZGVmYXVsdDpyZXR1cm4hMH19ZnVuY3Rpb24gZGxlKHQsZSl7dmFyIG4scixzLG87cmV0dXJuIHI9Yi5NYXRoLm1pbihiLk1hdGguYWJzKHQuYy0oZS5jK2UuYikpLGIuTWF0aC5hYnModC5jK3QuYi1lLmMpKSxvPWIuTWF0aC5taW4oYi5NYXRoLmFicyh0LmQtKGUuZCtlLmEpKSxiLk1hdGguYWJzKHQuZCt0LmEtZS5kKSksbj1iLk1hdGguYWJzKHQuYyt0LmIvMi0oZS5jK2UuYi8yKSksbj50LmIvMitlLmIvMnx8KHM9Yi5NYXRoLmFicyh0LmQrdC5hLzItKGUuZCtlLmEvMikpLHM+dC5hLzIrZS5hLzIpPzE6bj09MCYmcz09MD8wOm49PTA/by9zKzE6cz09MD9yL24rMTpiLk1hdGgubWluKHIvbixvL3MpKzF9ZnVuY3Rpb24gZ2xlKHQsZSl7dmFyIG4scixzLG8saCxkO3JldHVybiBzPUptdCh0KSxkPUptdChlKSxzPT1kP3QuZT09ZS5lJiZ0LmE8NTQmJmUuYTw1ND90LmY8ZS5mPy0xOnQuZj5lLmY/MTowOihyPXQuZS1lLmUsbj0odC5kPjA/dC5kOmIuTWF0aC5mbG9vcigodC5hLTEpKkNmZSkrMSktKGUuZD4wP2UuZDpiLk1hdGguZmxvb3IoKGUuYS0xKSpDZmUpKzEpLG4+cisxP3M6bjxyLTE/LXM6KG89KCF0LmMmJih0LmM9VkQodC5mKSksdC5jKSxoPSghZS5jJiYoZS5jPVZEKGUuZikpLGUuYykscjwwP289ZTQobyxObGUoLXIpKTpyPjAmJihoPWU0KGgsTmxlKHIpKSksVWllKG8saCkpKTpzPGQ/LTE6MX1mdW5jdGlvbiBkeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iobz0wLGQ9MCx2PTAscz1uZXcgUyh0LmYuZSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTQ0KSxlIT1yJiYoaD10LmlbZS5iXVtyLmJdLG8rPWgsbj1XcChlLmQsci5kKSxuPjAmJnQuZCE9KHE5KCksc2x0KSYmKGQrPWgqKHIuZC5hK3QuYVtlLmJdW3IuYl0qKGUuZC5hLXIuZC5hKS9uKSksbj4wJiZ0LmQhPShxOSgpLHJsdCkmJih2Kz1oKihyLmQuYit0LmFbZS5iXVtyLmJdKihlLmQuYi1yLmQuYikvbikpKTtzd2l0Y2godC5kLmcpe2Nhc2UgMTpyZXR1cm4gbmV3ICRlKGQvbyxlLmQuYik7Y2FzZSAyOnJldHVybiBuZXcgJGUoZS5kLmEsdi9vKTtkZWZhdWx0OnJldHVybiBuZXcgJGUoZC9vLHYvbyl9fWZ1bmN0aW9uIHBsZSh0LGUpe29FKCk7dmFyIG4scixzLG8saDtpZihoPXUoUSh0LmksKFRlKCksY3MpKSw5OCksbz10LmouZy1lLmouZyxvIT0wfHwhKGg9PSh1YSgpLFkyKXx8aD09ZzB8fGg9PUdjKSlyZXR1cm4gMDtpZihoPT0odWEoKSxZMikmJihuPXUoUSh0LHRwKSwxOSkscj11KFEoZSx0cCksMTkpLG4mJnImJihzPW4uYS1yLmEscyE9MCkpKXJldHVybiBzO3N3aXRjaCh0LmouZyl7Y2FzZSAxOnJldHVybiBNcyh0Lm4uYSxlLm4uYSk7Y2FzZSAyOnJldHVybiBNcyh0Lm4uYixlLm4uYik7Y2FzZSAzOnJldHVybiBNcyhlLm4uYSx0Lm4uYSk7Y2FzZSA0OnJldHVybiBNcyhlLm4uYix0Lm4uYik7ZGVmYXVsdDp0aHJvdyBpdChuZXcgTm8oRTZ0KSl9fWZ1bmN0aW9uIGJsZSh0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKG49KCF0LmEmJih0LmE9bmV3IEFzKEdoLHQsNSkpLHQuYSkuaSsyLGg9bmV3IFhjKG4pLGxlKGgsbmV3ICRlKHQuaix0LmspKSxscyhuZXcgVG4obnVsbCwoIXQuYSYmKHQuYT1uZXcgQXMoR2gsdCw1KSksbmV3IF9uKHQuYSwxNikpKSxuZXcgbHp0KGgpKSxsZShoLG5ldyAkZSh0LmIsdC5jKSksZT0xO2U8aC5jLmxlbmd0aC0xOylyPShBbihlLTEsaC5jLmxlbmd0aCksdShoLmNbZS0xXSw4KSkscz0oQW4oZSxoLmMubGVuZ3RoKSx1KGguY1tlXSw4KSksbz0oQW4oZSsxLGguYy5sZW5ndGgpLHUoaC5jW2UrMV0sOCkpLHIuYT09cy5hJiZzLmE9PW8uYXx8ci5iPT1zLmImJnMuYj09by5iP0ZnKGgsZSk6KytlO3JldHVybiBofWZ1bmN0aW9uIHdsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2ZvcihuPW1XdChPVnQoRFZ0KElWdChuZXcganB0LGUpLG5ldyB2JChlLmUpKSxkMmUpLHQuYSksZS5qLmMubGVuZ3RoPT0wfHxQdGUodShOZShlLmosMCksNTcpLmEsbiksdj1uZXcgSnR0LGtpKHQuZSxuLHYpLGg9bmV3IEhzLGQ9bmV3IEhzLG89bmV3IFMoZS5rKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxNyksRnMoaCxzLmMpLEZzKGQscy5kKTtyPWguYS5nYygpLWQuYS5nYygpLHI8MD8oJEQodiwhMCwoYW8oKSx6aCkpLCREKHYsITEsQ2YpKTpyPjAmJigkRCh2LCExLChhbygpLHpoKSksJEQodiwhMCxDZikpLHh1KGUuZyxuZXcgb0d0KHQsbikpLGtpKHQuZyxlLG4pfWZ1bmN0aW9uIHZsZSgpe3ZsZT1aO3ZhciB0O2ZvcihnRXQ9bHQoY3QoQ3IsMSksWHIsMjUsMTUsWy0xLC0xLDMwLDE5LDE1LDEzLDExLDExLDEwLDksOSw4LDgsOCw4LDcsNyw3LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDVdKSxGdXQ9TnQoQ3IsWHIsMjUsMzcsMTUsMSksJGdlPWx0KGN0KENyLDEpLFhyLDI1LDE1LFstMSwtMSw2Myw0MCwzMiwyOCwyNSwyMywyMSwyMCwxOSwxOSwxOCwxOCwxNywxNywxNiwxNiwxNiwxNSwxNSwxNSwxNSwxNCwxNCwxNCwxNCwxNCwxNCwxMywxMywxMywxMywxMywxMywxMywxM10pLHBFdD1OdChPYix3b3QsMjUsMzcsMTQsMSksdD0yO3Q8PTM2O3QrKylGdXRbdF09cHMoYi5NYXRoLnBvdyh0LGdFdFt0XSkpLHBFdFt0XT1hSShxcSxGdXRbdF0pfWZ1bmN0aW9uIGd5bih0KXt2YXIgZTtpZigoIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpLmkhPTEpdGhyb3cgaXQobmV3IEZuKFNkZSsoIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpLmkpKTtyZXR1cm4gZT1uZXcgUHUsUkQodShBdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSkmJlVhKGUsdGZlKHQsUkQodShBdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSksITEpKSxSRCh1KEF0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKSYmVWEoZSx0ZmUodCxSRCh1KEF0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKSwhMCkpLGV9ZnVuY3Rpb24gbWxlKHQsZSl7dmFyIG4scixzLG8saDtmb3IoZS5kP3M9dC5hLmM9PShiZCgpLHp2KT9qbyhlLmIpOkRzKGUuYik6cz10LmEuYz09KGJkKCksZXApP2pvKGUuYik6RHMoZS5iKSxvPSExLHI9bmV3IGFyKGxyKHMuYS5LYygpLG5ldyB6KSk7enIocik7KWlmKG49dShNcihyKSwxNyksaD1qZSh0LmEuZlt0LmEuZ1tlLmIucF0ucF0pLCEoIWgmJiFHYShuKSYmbi5jLmkuYz09bi5kLmkuYykmJiEoamUodC5hLm5bdC5hLmdbZS5iLnBdLnBdKXx8amUodC5hLm5bdC5hLmdbZS5iLnBdLnBdKSkmJihvPSEwLEkwKHQuYix0LmEuZ1tUMW4obixlLmIpLnBdKSkpcmV0dXJuIGUuYz0hMCxlLmE9bixlO3JldHVybiBlLmM9byxlLmE9bnVsbCxlfWZ1bmN0aW9uIHB5bih0LGUsbixyLHMpe3ZhciBvLGgsZCx2LGssQyxNO2Zvcih3bigpLFpzKHQsbmV3IFhaKSxkPW5ldyBkYSh0LDApLE09bmV3IGhlLG89MDtkLmI8ZC5kLmdjKCk7KWg9KFpuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwxNTcpKSxNLmMubGVuZ3RoIT0wJiZSdShoKSpFbChoKT5vKjI/KEM9bmV3IHJ6KE0pLGs9UnUoaCkvRWwoaCksdj16YXQoQyxlLG5ldyBDeCxuLHIscyxrKSxMaShHZihDLmUpLHYpLE0uYz1OdChRbixEZSwxLDAsNSwxKSxvPTAsTS5jW00uYy5sZW5ndGhdPUMsTS5jW00uYy5sZW5ndGhdPWgsbz1SdShDKSpFbChDKStSdShoKSpFbChoKSk6KE0uY1tNLmMubGVuZ3RoXT1oLG8rPVJ1KGgpKkVsKGgpKTtyZXR1cm4gTX1mdW5jdGlvbiBzeHQodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrO2lmKHI9bi5nYygpLHI9PTApcmV0dXJuITE7aWYodC5laigpKWlmKHY9dC5maigpLHkzdCh0LGUsbiksaD1yPT0xP3QuWmkoMyxudWxsLG4uS2MoKS5QYigpLGUsdik6dC5aaSg1LG51bGwsbixlLHYpLHQuYmooKSl7Zm9yKGQ9cjwxMDA/bnVsbDpuZXcgRHAociksbz1lK3Iscz1lO3M8bzsrK3Mpaz10Lk9pKHMpLGQ9dC5jaihrLGQpLGQ9ZDtkPyhkLkVpKGgpLGQuRmkoKSk6dC4kaShoKX1lbHNlIHQuJGkoaCk7ZWxzZSBpZih5M3QodCxlLG4pLHQuYmooKSl7Zm9yKGQ9cjwxMDA/bnVsbDpuZXcgRHAociksbz1lK3Iscz1lO3M8bzsrK3MpZD10LmNqKHQuT2kocyksZCk7ZCYmZC5GaSgpfXJldHVybiEwfWZ1bmN0aW9uIHlsZSh0LGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gdC5laigpPyhzPW51bGwsbz10LmZqKCkscj10LlppKDEsZD0oaD10LlVpKGUsdC5vaShlLG4pKSxoKSxuLGUsbyksdC5iaigpJiYhKHQubmkoKSYmZD95aShkLG4pOlZ0KGQpPT09VnQobikpJiYoZCYmKHM9dC5kaihkLHMpKSxzPXQuY2oobixzKSkscz8ocy5FaShyKSxzLkZpKCkpOnQuJGkociksZCk6KGQ9KGg9dC5VaShlLHQub2koZSxuKSksaCksdC5iaigpJiYhKHQubmkoKSYmZD95aShkLG4pOlZ0KGQpPT09VnQobikpJiYocz1udWxsLGQmJihzPXQuZGooZCxudWxsKSkscz10LmNqKG4scykscyYmcy5GaSgpKSxkKX1mdW5jdGlvbiBheHQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7aWYodC5lPWUsdC5mPXUoUShlLChZcCgpLHdWKSksMjMwKSxaMG4oZSksdC5kPWIuTWF0aC5tYXgoZS5lLmMubGVuZ3RoKjE2K2UuYy5jLmxlbmd0aCwyNTYpLCFqZShSZShRKGUsKEpmKCksdjd0KSkpKSlmb3IoQz10LmUuZS5jLmxlbmd0aCx2PW5ldyBTKGUuZSk7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTQ0KSxrPWQuZCxrLmE9Wnd0KHQuZikqQyxrLmI9Wnd0KHQuZikqQztmb3Iobj1lLmIsbz1uZXcgUyhlLmMpO28uYTxvLmMuYy5sZW5ndGg7KWlmKHM9dShKKG8pLDI4Mikscj11KFEocyxFN3QpLDE5KS5hLHI+MCl7Zm9yKGg9MDtoPHI7aCsrKWxlKG4sbmV3IGFYdChzKSk7TG9lKHMpfX1mdW5jdGlvbiBwNih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZih0Lms9PShWbigpLExsKSYmKG49cUMoUmkodShRKHQsKGFlKCksTE8pKSwxNSkuT2MoKSxuZXcgWnQobmV3IExMKSkpLnNkKChRYigpLG83KSk/ZTooemwoKSxuUCksSnQodCxqNixuKSxuIT0oemwoKSxrYikpKWZvcihyPXUoUSh0LF9pKSwxNyksZD1YdCh5ZShRKHIsKFRlKCksSmcpKSkpLGg9MCxuPT1mMD9oPXQuby5iLWIuTWF0aC5jZWlsKGQvMik6bj09blAmJih0Lm8uYi09WHQoeWUoUShOYSh0KSxWNikpKSxoPSh0Lm8uYi1iLk1hdGguY2VpbChkKSkvMiksbz1uZXcgUyh0LmopO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDExKSxzLm4uYj1ofWZ1bmN0aW9uIG94dCgpe294dD1aLFRldCgpLGV4ZT1uZXcgakIsbHQoY3QoWjYsMiksZWUsMzY4LDAsW2x0KGN0KFo2LDEpLFdILDU5MiwwLFtuZXcgYk0ob2dlKV0pXSksbHQoY3QoWjYsMiksZWUsMzY4LDAsW2x0KGN0KFo2LDEpLFdILDU5MiwwLFtuZXcgYk0oWTh0KV0pXSksbHQoY3QoWjYsMiksZWUsMzY4LDAsW2x0KGN0KFo2LDEpLFdILDU5MiwwLFtuZXcgYk0oY2dlKV0pLGx0KGN0KFo2LDEpLFdILDU5MiwwLFtuZXcgYk0oWTh0KV0pXSksbmV3IFJwKCItMSIpLGx0KGN0KFo2LDIpLGVlLDM2OCwwLFtsdChjdChaNiwxKSxXSCw1OTIsMCxbbmV3IGJNKCJcXGMrIildKV0pLG5ldyBScCgiMCIpLG5ldyBScCgiMCIpLG5ldyBScCgiMSIpLG5ldyBScCgiMCIpLG5ldyBScChnZ2UpfWZ1bmN0aW9uIExxKHQpe3ZhciBlLG47cmV0dXJuIHQuYyYmdC5jLmtoKCkmJihuPXUodC5jLDQ5KSx0LmM9dShacCh0LG4pLDEzOCksdC5jIT1uJiYodC5EYiY0JiYhKHQuRGImMSkmJm1pKHQsbmV3IEpzKHQsOSwyLG4sdC5jKSksX3QodC5DYiwzOTkpP3QuRGI+PjE2PT0tMTUmJnQuQ2IubmgoKSYmcml0KG5ldyBKcnQodC5DYiw5LDEzLG4sdC5jLEhnKGFsKHUodC5DYiw1OSkpLHQpKSk6X3QodC5DYiw4OCkmJnQuRGI+PjE2PT0tMjMmJnQuQ2IubmgoKSYmKGU9dC5jLF90KGUsODgpfHwoZT0oZG4oKSxLaCkpLF90KG4sODgpfHwobj0oZG4oKSxLaCkpLHJpdChuZXcgSnJ0KHQuQ2IsOSwxMCxuLGUsSGcoTGModSh0LkNiLDI2KSksdCkpKSkpKSx0LmN9ZnVuY3Rpb24gYnluKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE07Zm9yKHZyKGUsIkh5cGVybm9kZXMgcHJvY2Vzc2luZyIsMSkscz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyOSksZD1uZXcgUyhyLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWlmKGg9dShKKGQpLDEwKSxqZShSZShRKGgsKFRlKCksbEcpKSkpJiZoLmouYy5sZW5ndGg8PTIpe2ZvcihNPTAsQz0wLG49MCxvPTAsaz1uZXcgUyhoLmopO2suYTxrLmMuYy5sZW5ndGg7KXN3aXRjaCh2PXUoSihrKSwxMSksdi5qLmcpe2Nhc2UgMTorK007YnJlYWs7Y2FzZSAyOisrQzticmVhaztjYXNlIDM6KytuO2JyZWFrO2Nhc2UgNDorK299TT09MCYmbj09MCYmbXhuKHQsaCxvPD1DKX1vcihlKX1mdW5jdGlvbiB3eW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7Zm9yKHZyKGUsIkxheWVyIGNvbnN0cmFpbnQgZWRnZSByZXZlcnNhbCIsMSksaD1uZXcgUyh0LmIpO2guYTxoLmMuYy5sZW5ndGg7KXtmb3Iobz11KEooaCksMjkpLEM9LTEsbj1uZXcgaGUsaz1sRChvLmEpLHM9MDtzPGsubGVuZ3RoO3MrKylyPXUoUShrW3NdLChhZSgpLEIyKSksMzAzKSxDPT0tMT9yIT0ocTAoKSxZNCkmJihDPXMpOnI9PShxMCgpLFk0KSYmKEVvKGtbc10sbnVsbCksbHkoa1tzXSxDKyssbykpLHI9PShxMCgpLEY2KSYmbGUobixrW3NdKTtmb3Iodj1uZXcgUyhuKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSwxMCksRW8oZCxudWxsKSxFbyhkLG8pfW9yKGUpfWZ1bmN0aW9uIHZ5bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNO2Zvcih2cihuLCJIeXBlcmVkZ2UgbWVyZ2luZyIsMSksVWJuKHQsZSksdj1uZXcgZGEoZS5iLDApO3YuYjx2LmQuZ2MoKTspaWYoZD0oWm4odi5iPHYuZC5nYygpKSx1KHYuZC5YYih2LmM9di5iKyspLDI5KSksQz1kLmEsQy5jLmxlbmd0aCE9MClmb3Iocj1udWxsLHM9bnVsbCxvPW51bGwsaD1udWxsLGs9MDtrPEMuYy5sZW5ndGg7aysrKXI9KEFuKGssQy5jLmxlbmd0aCksdShDLmNba10sMTApKSxzPXIuayxzPT0oVm4oKSx0YSkmJmg9PXRhJiYoTT1mM24ocixvKSxNLmEmJih4dm4ocixvLE0uYixNLmMpLEFuKGssQy5jLmxlbmd0aCksd2J0KEMuYyxrLDEpLC0tayxyPW8scz1oKSksbz1yLGg9cztvcihuKX1mdW5jdGlvbiBteW4odCxlKXt2YXIgbixyLHM7cj11bCh0LmQsMSkhPTAsIWplKFJlKFEoZS5qLChhZSgpLE92KSkpKSYmIWplKFJlKFEoZS5qLFg0KSkpfHxWdChRKGUuaiwoVGUoKSx3YikpKT09PVZ0KChWMCgpLHZiKSk/ZS5jLlRmKGUuZSxyKTpyPWplKFJlKFEoZS5qLE92KSkpLHlJKHQsZSxyLCEwKSxqZShSZShRKGUuaixYNCkpKSYmSnQoZS5qLFg0LChObigpLCExKSksamUoUmUoUShlLmosT3YpKSkmJihKdChlLmosT3YsKE5uKCksITEpKSxKdChlLmosWDQsITApKSxuPVZ1ZSh0LGUpO2Rve2lmKGh5dCh0KSxuPT0wKXJldHVybiAwO3I9IXIscz1uLHlJKHQsZSxyLCExKSxuPVZ1ZSh0LGUpfXdoaWxlKHM+bik7cmV0dXJuIHN9ZnVuY3Rpb24geGxlKHQsZSl7dmFyIG4scixzO3I9dWwodC5kLDEpIT0wLCFqZShSZShRKGUuaiwoYWUoKSxPdikpKSkmJiFqZShSZShRKGUuaixYNCkpKXx8VnQoUShlLmosKFRlKCksd2IpKSk9PT1WdCgoVjAoKSx2YikpP2UuYy5UZihlLmUscik6cj1qZShSZShRKGUuaixPdikpKSx5SSh0LGUsciwhMCksamUoUmUoUShlLmosWDQpKSkmJkp0KGUuaixYNCwoTm4oKSwhMSkpLGplKFJlKFEoZS5qLE92KSkpJiYoSnQoZS5qLE92LChObigpLCExKSksSnQoZS5qLFg0LCEwKSksbj1Lc3QodCxlKTtkb3tpZihoeXQodCksbj09MClyZXR1cm4gMDtyPSFyLHM9bix5SSh0LGUsciwhMSksbj1Lc3QodCxlKX13aGlsZShzPm4pO3JldHVybiBzfWZ1bmN0aW9uIGtsZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2lmKGU9PW4pcmV0dXJuITA7aWYoZT1wNXQodCxlKSxuPXA1dCh0LG4pLHI9eHN0KGUpLHIpe2lmKEM9eHN0KG4pLEMhPXIpcmV0dXJuIEM/KHY9ci5EaigpLEc9Qy5EaigpLHY9PUcmJnYhPW51bGwpOiExO2lmKGg9KCFlLmQmJihlLmQ9bmV3IEFzKGhvLGUsMSkpLGUuZCksbz1oLmksaj0oIW4uZCYmKG4uZD1uZXcgQXMoaG8sbiwxKSksbi5kKSxvPT1qLmkpe2ZvcihrPTA7azxvOysraylpZihzPXUoQXQoaCxrKSw4NyksTT11KEF0KGosayksODcpLCFrbGUodCxzLE0pKXJldHVybiExfXJldHVybiEwfWVsc2UgcmV0dXJuIGQ9ZS5lLEg9bi5lLGQ9PUh9ZnVuY3Rpb24gRWxlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE07aWYoWDAodC5lLGUpKXtmb3IoTT1vdSh0LmUuVGcoKSxlKSxvPXUodC5nLDExOSksQz1udWxsLHY9LTEsZD0tMSxzPTAsaz0wO2s8dC5pOysrayloPW9ba10sTS5ybChoLmFrKCkpJiYocz09biYmKHY9aykscz09ciYmKGQ9ayxDPWguZGQoKSksKytzKTtpZih2PT0tMSl0aHJvdyBpdChuZXcgeW8oaXV0K24rRDIrcykpO2lmKGQ9PS0xKXRocm93IGl0KG5ldyB5byhzdXQrcitEMitzKSk7cmV0dXJuIHJfKHQsdixkKSx4bCh0LmUpJiZuOCh0LEdwKHQsNyxlLHBlKHIpLEMsbiwhMCkpLEN9ZWxzZSB0aHJvdyBpdChuZXcgRm4oIlRoZSBmZWF0dXJlIG11c3QgYmUgbWFueS12YWx1ZWQgdG8gc3VwcG9ydCBtb3ZlIikpfWZ1bmN0aW9uIFRsZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2O3N3aXRjaCh2PW5ldyB4byhlLm4pLHYuYSs9ZS5vLmEvMix2LmIrPWUuby5iLzIsZD1YdCh5ZShRKGUsKFRlKCksVnkpKSkpLG89dC5mLGg9dC5kLHM9dC5jLHUoUShlLChhZSgpLG9jKSksNjEpLmcpe2Nhc2UgMTp2LmErPWguYitzLmEtbi8yLHYuYj0tci1kLGUubi5iPS0oaC5kK2Qrcy5iKTticmVhaztjYXNlIDI6di5hPW8uYStoLmIraC5jK2Qsdi5iKz1oLmQrcy5iLXIvMixlLm4uYT1vLmEraC5jK2Qtcy5hO2JyZWFrO2Nhc2UgMzp2LmErPWguYitzLmEtbi8yLHYuYj1vLmIraC5kK2guYStkLGUubi5iPW8uYitoLmErZC1zLmI7YnJlYWs7Y2FzZSA0OnYuYT0tbi1kLHYuYis9aC5kK3MuYi1yLzIsZS5uLmE9LShoLmIrZCtzLmEpfXJldHVybiB2fWZ1bmN0aW9uIENsZSh0KXt2YXIgZSxuLHIscyxvLGg7cmV0dXJuIHI9bmV3IGV5dCxNbyhyLHQpLFZ0KFEociwoVGUoKSxXbCkpKT09PVZ0KChhbygpLGgwKSkmJkp0KHIsV2wsUHoocikpLFEociwoJCQoKSxXUykpPT1udWxsJiYoaD11KCRhZSh0KSwxNjApLEp0KHIsV1MsZGooaC5XZShXUykpKSksSnQociwoYWUoKSxfaSksdCksSnQocixWYywoZT11KFZmKGpsdCksOSksbmV3IHNoKGUsdShmZihlLGUubGVuZ3RoKSw5KSwwKSkpLHM9bzVuKChlcyh0KSYmKFBtKCksbmV3IE1tKGVzKHQpKSksUG0oKSxuZXcgZ250KGVzKHQpP25ldyBNbShlcyh0KSk6bnVsbCx0KSksQ2YpLG89dShRKHIsZDl0KSwxMTYpLG49ci5kLElRdChuLG8pLElRdChuLHMpLHJ9ZnVuY3Rpb24geXluKHQsZSxuKXt2YXIgcixzO3I9ZS5jLmkscz1uLmQuaSxyLms9PShWbigpLHRhKT8oSnQodCwoYWUoKSxyMSksdShRKHIscjEpLDExKSksSnQodCwkaCx1KFEociwkaCksMTEpKSxKdCh0LFJ5LFJlKFEocixSeSkpKSk6ci5rPT1MbD8oSnQodCwoYWUoKSxyMSksdShRKHIscjEpLDExKSksSnQodCwkaCx1KFEociwkaCksMTEpKSxKdCh0LFJ5LChObigpLCEwKSkpOnMuaz09TGw/KEp0KHQsKGFlKCkscjEpLHUoUShzLHIxKSwxMSkpLEp0KHQsJGgsdShRKHMsJGgpLDExKSksSnQodCxSeSwoTm4oKSwhMCkpKTooSnQodCwoYWUoKSxyMSksZS5jKSxKdCh0LCRoLG4uZCkpfWZ1bmN0aW9uIHh5bih0KXt2YXIgZSxuLHIscyxvLGgsZDtmb3IodC5vPW5ldyBCMyxyPW5ldyBaaSxoPW5ldyBTKHQuZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxMjEpLHU0KG8pLmMubGVuZ3RoPT0xJiZmcyhyLG8sci5jLmIsci5jKTtmb3IoO3IuYiE9MDspbz11KHIuYj09MD9udWxsOihabihyLmIhPTApLGxoKHIsci5hLmEpKSwxMjEpLHU0KG8pLmMubGVuZ3RoIT0wJiYoZT11KE5lKHU0KG8pLDApLDIxMyksbj1vLmcuYS5jLmxlbmd0aD4wLGQ9QnooZSxvKSxOMnQobj9kLmI6ZC5nLGUpLHU0KGQpLmMubGVuZ3RoPT0xJiZmcyhyLGQsci5jLmIsci5jKSxzPW5ldyBmYShvLGUpLFVwKHQubyxzKSxtdSh0LmUuYSxvKSl9ZnVuY3Rpb24gX2xlKHQsZSl7dmFyIG4scixzLG8saCxkLHY7cmV0dXJuIHI9Yi5NYXRoLmFicyhlJCh0LmIpLmEtZSQoZS5iKS5hKSxkPWIuTWF0aC5hYnMoZSQodC5iKS5iLWUkKGUuYikuYikscz0wLHY9MCxuPTEsaD0xLHI+dC5iLmIvMitlLmIuYi8yJiYocz1iLk1hdGgubWluKGIuTWF0aC5hYnModC5iLmMtKGUuYi5jK2UuYi5iKSksYi5NYXRoLmFicyh0LmIuYyt0LmIuYi1lLmIuYykpLG49MS1zL3IpLGQ+dC5iLmEvMitlLmIuYS8yJiYodj1iLk1hdGgubWluKGIuTWF0aC5hYnModC5iLmQtKGUuYi5kK2UuYi5hKSksYi5NYXRoLmFicyh0LmIuZCt0LmIuYS1lLmIuZCkpLGg9MS12L2QpLG89Yi5NYXRoLm1pbihuLGgpLCgxLW8pKmIuTWF0aC5zcXJ0KHIqcitkKmQpfWZ1bmN0aW9uIGt5bih0KXt2YXIgZSxuLHIscztmb3IoJGF0KHQsdC5lLHQuZiwoR3coKSx5YiksITAsdC5jLHQuaSksJGF0KHQsdC5lLHQuZix5YiwhMSx0LmMsdC5pKSwkYXQodCx0LmUsdC5mLHI1LCEwLHQuYyx0LmkpLCRhdCh0LHQuZSx0LmYscjUsITEsdC5jLHQuaSksVHluKHQsdC5jLHQuZSx0LmYsdC5pKSxyPW5ldyBkYSh0LmksMCk7ci5iPHIuZC5nYygpOylmb3IoZT0oWm4oci5iPHIuZC5nYygpKSx1KHIuZC5YYihyLmM9ci5iKyspLDEyOCkpLHM9bmV3IGRhKHQuaSxyLmIpO3MuYjxzLmQuZ2MoKTspbj0oWm4ocy5iPHMuZC5nYygpKSx1KHMuZC5YYihzLmM9cy5iKyspLDEyOCkpLG40bihlLG4pO1R4bih0LmksdShRKHQuZCwoYWUoKSwkNikpLDIzMCkpLGo0bih0LmkpfWZ1bmN0aW9uIHhhdCh0LGUpe3ZhciBuLHI7aWYoZSE9bnVsbCl7aWYocj1odih0KSxyKWlmKHIuaSYxKXtpZihyPT1wbClyZXR1cm4gTm0oZSk7aWYocj09Q3IpcmV0dXJuIF90KGUsMTkpO2lmKHI9PWEzKXJldHVybiBfdChlLDE1NSk7aWYocj09R3UpcmV0dXJuIF90KGUsMjE3KTtpZihyPT14aClyZXR1cm4gX3QoZSwxNzIpO2lmKHI9PWFhKXJldHVybiBCbShlKTtpZihyPT1nNSlyZXR1cm4gX3QoZSwxODQpO2lmKHI9PU9iKXJldHVybiBfdChlLDE2Mil9ZWxzZSByZXR1cm4gR1IoKSxuPXUodHIoZFUsciksNTUpLCFufHxuLndqKGUpO2Vsc2UgaWYoX3QoZSw1NikpcmV0dXJuIHQudWsodShlLDU2KSl9cmV0dXJuITF9ZnVuY3Rpb24gY3h0KCl7Y3h0PVo7dmFyIHQsZSxuLHIscyxvLGgsZCx2O2ZvcihZMT1OdChHdSxONCwyNSwyNTUsMTUsMSksbHA9TnQoeGgseWQsMjUsNjQsMTUsMSksZT0wO2U8MjU1O2UrKylZMVtlXT0tMTtmb3Iobj05MDtuPj02NTtuLS0pWTFbbl09bi02NTw8MjQ+PjI0O2ZvcihyPTEyMjtyPj05NztyLS0pWTFbcl09ci05NysyNjw8MjQ+PjI0O2ZvcihzPTU3O3M+PTQ4O3MtLSlZMVtzXT1zLTQ4KzUyPDwyND4+MjQ7Zm9yKFkxWzQzXT02MixZMVs0N109NjMsbz0wO288PTI1O28rKylscFtvXT02NStvJnlzO2ZvcihoPTI2LHY9MDtoPD01MTsrK2gsdisrKWxwW2hdPTk3K3YmeXM7Zm9yKHQ9NTIsZD0wO3Q8PTYxOysrdCxkKyspbHBbdF09NDgrZCZ5cztscFs2Ml09NDMsbHBbNjNdPTQ3fWZ1bmN0aW9uIEV5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSDtpZih0LmRjKCkpcmV0dXJuIG5ldyBDYTtmb3Ioaz0wLE09MCxzPXQuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMzcpLG89ci5mLGs9Yi5NYXRoLm1heChrLG8uYSksTSs9by5hKm8uYjtmb3Ioaz1iLk1hdGgubWF4KGssYi5NYXRoLnNxcnQoTSkqWHQoeWUoUSh1KHQuS2MoKS5QYigpLDM3KSwoVGUoKSxyRykpKSkpLGo9MCxIPTAsdj0wLG49ZSxkPXQuS2MoKTtkLk9iKCk7KWg9dShkLlBiKCksMzcpLEM9aC5mLGorQy5hPmsmJihqPTAsSCs9ditlLHY9MCkseF8oaCxqLEgpLG49Yi5NYXRoLm1heChuLGorQy5hKSx2PWIuTWF0aC5tYXgodixDLmIpLGorPUMuYStlO3JldHVybiBuZXcgJGUobitlLEgrditlKX1mdW5jdGlvbiBUeW4odCxlLG4scixzKXt2YXIgbyxoLGQsdixrLEMsTTtmb3IoaD1uZXcgUyhlKTtoLmE8aC5jLmMubGVuZ3RoOyl7aWYobz11KEooaCksMTcpLHY9by5jLG4uYS5fYih2KSlrPShHdygpLHliKTtlbHNlIGlmKHIuYS5fYih2KSlrPShHdygpLHI1KTtlbHNlIHRocm93IGl0KG5ldyBGbigiU291cmNlIHBvcnQgbXVzdCBiZSBpbiBvbmUgb2YgdGhlIHBvcnQgc2V0cy4iKSk7aWYoQz1vLmQsbi5hLl9iKEMpKU09KEd3KCkseWIpO2Vsc2UgaWYoci5hLl9iKEMpKU09KEd3KCkscjUpO2Vsc2UgdGhyb3cgaXQobmV3IEZuKCJUYXJnZXQgcG9ydCBtdXN0IGJlIGluIG9uZSBvZiB0aGUgcG9ydCBzZXRzLiIpKTtkPW5ldyB2b2UobyxrLE0pLGtpKHQuYixvLGQpLHMuY1tzLmMubGVuZ3RoXT1kfX1mdW5jdGlvbiB1eHQodCxlKXt2YXIgbixyLHMsbyxoLGQsdjtpZighVDEodCkpdGhyb3cgaXQobmV3IE5vKF9kZSkpO2lmKHI9VDEodCksbz1yLmcscz1yLmYsbzw9MCYmczw9MClyZXR1cm4gdmUoKSxabztzd2l0Y2goZD10Lmksdj10LmosZS5nKXtjYXNlIDI6Y2FzZSAxOmlmKGQ8MClyZXR1cm4gdmUoKSxCbjtpZihkK3QuZz5vKXJldHVybiB2ZSgpLEhuO2JyZWFrO2Nhc2UgNDpjYXNlIDM6aWYodjwwKXJldHVybiB2ZSgpLFBuO2lmKHYrdC5mPnMpcmV0dXJuIHZlKCksbXJ9cmV0dXJuIGg9KGQrdC5nLzIpL28sbj0odit0LmYvMikvcyxoK248PTEmJmgtbjw9MD8odmUoKSxCbik6aCtuPj0xJiZoLW4+PTA/KHZlKCksSG4pOm48LjU/KHZlKCksUG4pOih2ZSgpLG1yKX1mdW5jdGlvbiBDeW4odCxlLG4scixzKXt2YXIgbyxoO2lmKG89UGEoTnMoZVswXSxjbyksTnMoclswXSxjbykpLHRbMF09QXIobyksbz0kcChvLDMyKSxuPj1zKXtmb3IoaD0xO2g8cztoKyspbz1QYShvLFBhKE5zKGVbaF0sY28pLE5zKHJbaF0sY28pKSksdFtoXT1BcihvKSxvPSRwKG8sMzIpO2Zvcig7aDxuO2grKylvPVBhKG8sTnMoZVtoXSxjbykpLHRbaF09QXIobyksbz0kcChvLDMyKX1lbHNle2ZvcihoPTE7aDxuO2grKylvPVBhKG8sUGEoTnMoZVtoXSxjbyksTnMocltoXSxjbykpKSx0W2hdPUFyKG8pLG89JHAobywzMik7Zm9yKDtoPHM7aCsrKW89UGEobyxOcyhyW2hdLGNvKSksdFtoXT1BcihvKSxvPSRwKG8sMzIpfXljKG8sMCkhPTAmJih0W2hdPUFyKG8pKX1mdW5jdGlvbiBteSh0KXtnaSgpO3ZhciBlLG4scixzLG8saDtpZih0LmUhPTQmJnQuZSE9NSl0aHJvdyBpdChuZXcgRm4oIlRva2VuI2NvbXBsZW1lbnRSYW5nZXMoKTogbXVzdCBiZSBSQU5HRTogIit0LmUpKTtmb3Iobz10LHY0KG8pLFNfKG8pLHI9by5iLmxlbmd0aCsyLG8uYlswXT09MCYmKHItPTIpLG49by5iW28uYi5sZW5ndGgtMV0sbj09ZTcmJihyLT0yKSxzPW5ldyBObCg0KSxzLmI9TnQoQ3IsWHIsMjUsciwxNSwxKSxoPTAsby5iWzBdPjAmJihzLmJbaCsrXT0wLHMuYltoKytdPW8uYlswXS0xKSxlPTE7ZTxvLmIubGVuZ3RoLTI7ZSs9MilzLmJbaCsrXT1vLmJbZV0rMSxzLmJbaCsrXT1vLmJbZSsxXS0xO3JldHVybiBuIT1lNyYmKHMuYltoKytdPW4rMSxzLmJbaF09ZTcpLHMuYT0hMCxzfWZ1bmN0aW9uIGthdCh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztpZihyPW4uZ2MoKSxyPT0wKXJldHVybiExO2lmKHQuZWooKSlpZihrPXQuZmooKSwkc3QodCxlLG4pLGg9cj09MT90LlppKDMsbnVsbCxuLktjKCkuUGIoKSxlLGspOnQuWmkoNSxudWxsLG4sZSxrKSx0LmJqKCkpe2ZvcihkPXI8MTAwP251bGw6bmV3IERwKHIpLG89ZStyLHM9ZTtzPG87KytzKUM9dC5nW3NdLGQ9dC5jaihDLGQpLGQ9dC5qaihDLGQpO2Q/KGQuRWkoaCksZC5GaSgpKTp0LiRpKGgpfWVsc2UgdC4kaShoKTtlbHNlIGlmKCRzdCh0LGUsbiksdC5iaigpKXtmb3IoZD1yPDEwMD9udWxsOm5ldyBEcChyKSxvPWUrcixzPWU7czxvOysrcyl2PXQuZ1tzXSxkPXQuY2oodixkKTtkJiZkLkZpKCl9cmV0dXJuITB9ZnVuY3Rpb24gbHh0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7Zm9yKGg9bmV3IFModC5rKTtoLmE8aC5jLmMubGVuZ3RoOylzPXUoSihoKSwxMjkpLCghcnx8cy5jPT0oVWYoKSxtYikpJiYodj1zLmIsdi5nPDAmJnMuZD4wJiYob00odix2LmQtcy5kKSxzLmM9PShVZigpLG1iKSYmYnB0KHYsdi5hLXMuZCksdi5kPD0wJiZ2Lmk+MCYmZnMoZSx2LGUuYy5iLGUuYykpKTtmb3Iobz1uZXcgUyh0LmYpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEyOSksKCFyfHxzLmM9PShVZigpLG1iKSkmJihkPXMuYSxkLmc8MCYmcy5kPjAmJihUQyhkLGQuaS1zLmQpLHMuYz09KFVmKCksbWIpJiZ3dyhkLGQuYi1zLmQpLGQuaTw9MCYmZC5kPjAmJmZzKG4sZCxuLmMuYixuLmMpKSl9ZnVuY3Rpb24gX3luKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO2Zvcih2cihuLCJQcm9jZXNzb3IgY29tcHV0ZSBmYW5vdXQiLDEpLFh1KHQuYiksWHUodC5hKSxkPW51bGwsbz1laShlLmIsMCk7IWQmJm8uYiE9by5kLmM7KWs9dSh0aShvKSw4NiksamUoUmUoUShrLChmYygpLFh5KSkpKSYmKGQ9ayk7Zm9yKHY9bmV3IFppLGZzKHYsZCx2LmMuYix2LmMpLEJoZSh0LHYpLEM9ZWkoZS5iLDApO0MuYiE9Qy5kLmM7KWs9dSh0aShDKSw4NiksaD1CcihRKGssKGZjKCkselMpKSkscz1OYyh0LmIsaCkhPW51bGw/dShOYyh0LmIsaCksMTkpLmE6MCxKdChrLE1HLHBlKHMpKSxyPTErKE5jKHQuYSxoKSE9bnVsbD91KE5jKHQuYSxoKSwxOSkuYTowKSxKdChrLHB5ZSxwZShyKSk7b3Iobil9ZnVuY3Rpb24gU3luKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEc7Zm9yKGo9bDBuKHQsbiksdj0wO3Y8ZTt2Kyspe2Zvcih6bShzLG4pLEg9bmV3IGhlLEc9KFpuKHIuYjxyLmQuZ2MoKSksdShyLmQuWGIoci5jPXIuYisrKSw0MDcpKSxDPWordjtDPHQuYjtDKyspZD1HLEc9KFpuKHIuYjxyLmQuZ2MoKSksdShyLmQuWGIoci5jPXIuYisrKSw0MDcpKSxsZShILG5ldyBldWUoZCxHLG4pKTtmb3IoTT1qK3Y7TTx0LmI7TSsrKVpuKHIuYj4wKSxyLmEuWGIoci5jPS0tci5iKSxNPmordiYmQ2wocik7Zm9yKGg9bmV3IFMoSCk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksNDA3KSx6bShyLG8pO2lmKHY8ZS0xKWZvcihrPWordjtrPHQuYjtrKyspWm4oci5iPjApLHIuYS5YYihyLmM9LS1yLmIpfX1mdW5jdGlvbiBBeW4oKXtnaSgpO3ZhciB0LGUsbixyLHMsbztpZihWZnQpcmV0dXJuIFZmdDtmb3IodD1uZXcgTmwoNCkseXkodCxpYihrdXQsITApKSxMXyh0LGliKCJNIiwhMCkpLExfKHQsaWIoIkMiLCEwKSksbz1uZXcgTmwoNCkscj0wO3I8MTE7cisrKWpjKG8scixyKTtyZXR1cm4gZT1uZXcgTmwoNCkseXkoZSxpYigiTSIsITApKSxqYyhlLDQ0NDgsNDYwNyksamMoZSw2NTQzOCw2NTQzOSkscz1uZXcgZDkoMiksRTIocyx0KSxFMihzLHBBKSxuPW5ldyBkOSgyKSxuLiRsKFlqKG8saWIoIkwiLCEwKSkpLG4uJGwoZSksbj1uZXcgWG0oMyxuKSxuPW5ldyBtdnQocyxuKSxWZnQ9bixWZnR9ZnVuY3Rpb24gTHluKHQpe3ZhciBlLG47aWYoZT1CcihxZSh0LCh1aSgpLFlTKSkpLCFxbmUoZSx0KSYmIW8yKHQsTzcpJiYoKCF0LmEmJih0LmE9bmV3IGZlKHJzLHQsMTAsMTEpKSx0LmEpLmkhPTB8fGplKFJlKHFlKHQsWk8pKSkpKWlmKGU9PW51bGx8fGZ5KGUpLmxlbmd0aD09MCl7aWYoIXFuZShHbix0KSl0aHJvdyBuPUdyKEdyKG5ldyBPbCgiVW5hYmxlIHRvIGxvYWQgZGVmYXVsdCBsYXlvdXQgYWxnb3JpdGhtICIpLEduKSwiIGZvciB1bmNvbmZpZ3VyZWQgbm9kZSAiKSxOcSh0LG4pLGl0KG5ldyBSMyhuLmEpKX1lbHNlIHRocm93IG49R3IoR3IobmV3IE9sKCJMYXlvdXQgYWxnb3JpdGhtICciKSxlKSwiJyBub3QgZm91bmQgZm9yICIpLE5xKHQsbiksaXQobmV3IFIzKG4uYSkpfWZ1bmN0aW9uIEVhdCh0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSDtpZihuPXQuaSxlPXQubix0LmI9PTApZm9yKEg9bi5jK2UuYixqPW4uYi1lLmItZS5jLGg9dC5hLHY9MCxDPWgubGVuZ3RoO3Y8QzsrK3Ypcz1oW3ZdLFhqKHMsSCxqKTtlbHNlIHI9VHNlKHQsITEpLFhqKHQuYVswXSxuLmMrZS5iLHJbMF0pLFhqKHQuYVsyXSxuLmMrbi5iLWUuYy1yWzJdLHJbMl0pLE09bi5iLWUuYi1lLmMsclswXT4wJiYoTS09clswXSt0LmMsclswXSs9dC5jKSxyWzJdPjAmJihNLT1yWzJdK3QuYyksclsxXT1iLk1hdGgubWF4KHJbMV0sTSksWGoodC5hWzFdLG4uYytlLmIrclswXS0oclsxXS1NKS8yLHJbMV0pO2ZvcihvPXQuYSxkPTAsaz1vLmxlbmd0aDtkPGs7KytkKXM9b1tkXSxfdChzLDMyNikmJnUocywzMjYpLlRlKCl9ZnVuY3Rpb24gTXluKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE07Zm9yKE09bmV3IEJRLE0uZD0wLGg9bmV3IFModC5iKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwyOSksTS5kKz1vLmEuYy5sZW5ndGg7Zm9yKHI9MCxzPTAsTS5hPU50KENyLFhyLDI1LHQuYi5jLmxlbmd0aCwxNSwxKSxrPTAsQz0wLE0uZT1OdChDcixYciwyNSxNLmQsMTUsMSksbj1uZXcgUyh0LmIpO24uYTxuLmMuYy5sZW5ndGg7KWZvcihlPXUoSihuKSwyOSksZS5wPXIrKyxNLmFbZS5wXT1zKyssQz0wLHY9bmV3IFMoZS5hKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSwxMCksZC5wPWsrKyxNLmVbZC5wXT1DKys7cmV0dXJuIE0uYz1uZXcgWSR0KE0pLE0uYj1VZChNLmQpLG95bihNLHQpLE0uZj1VZChNLmQpLGN5bihNLHQpLE19ZnVuY3Rpb24gU2xlKHQsZSl7dmFyIG4scixzLG87Zm9yKG89dShOZSh0Lm4sdC5uLmMubGVuZ3RoLTEpLDIxMSkuZCx0LnA9Yi5NYXRoLm1pbih0LnAsZS5nKSx0LnI9Yi5NYXRoLm1heCh0LnIsbyksdC5nPWIuTWF0aC5tYXgodC5nLGUuZysodC5iLmMubGVuZ3RoPT0xPzA6dC5pKSksdC5vPWIuTWF0aC5taW4odC5vLGUuZiksdC5lKz1lLmYrKHQuYi5jLmxlbmd0aD09MT8wOnQuaSksdC5mPWIuTWF0aC5tYXgodC5mLGUuZikscz10Lm4uYy5sZW5ndGg+MD8odC5uLmMubGVuZ3RoLTEpKnQuaTowLHI9bmV3IFModC5uKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwyMTEpLHMrPW4uYTt0LmQ9cyx0LmE9dC5lL3QuYi5jLmxlbmd0aC10LmkqKCh0LmIuYy5sZW5ndGgtMSkvdC5iLmMubGVuZ3RoKSxRM3QodC5qKX1mdW5jdGlvbiBBbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtpZihDPVJlKFEoZSwoSmYoKSx4YmUpKSksQz09bnVsbHx8KE9uKEMpLEMpKXtmb3IoTT1OdChwbCxvMCwyNSxlLmUuYy5sZW5ndGgsMTYsMSksaD1rYm4oZSkscz1uZXcgWmksaz1uZXcgUyhlLmUpO2suYTxrLmMuYy5sZW5ndGg7KWQ9dShKKGspLDE0NCksbj1TNXQodCxkLG51bGwsbnVsbCxNLGgpLG4mJihNbyhuLGUpLGZzKHMsbixzLmMuYixzLmMpKTtpZihzLmI+MSlmb3Iocj1laShzLDApO3IuYiE9ci5kLmM7KWZvcihuPXUodGkociksMjMxKSxvPTAsdj1uZXcgUyhuLmUpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDE0NCksZC5iPW8rKztyZXR1cm4gc31yZXR1cm4gQTEobHQoY3QobzZuLDEpLGg2dCwyMzEsMCxbZV0pKX1mdW5jdGlvbiB2ZCh0KXt2YXIgZSxuLHIscyxvLGgsZDtpZighdC5nKXtpZihkPW5ldyBVYixlPXVBLGg9ZS5hLnpjKHQsZSksaD09bnVsbCl7Zm9yKHI9bmV3IG5yKEFvKHQpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksMjYpLGlzKGQsdmQobikpO2UuYS5CYyh0KSE9bnVsbCxlLmEuZ2MoKT09MH1mb3Iocz1kLmksbz0oIXQucyYmKHQucz1uZXcgZmUoTXUsdCwyMSwxNykpLG5ldyBucih0LnMpKTtvLmUhPW8uaS5nYygpOysrcylQdHQodShkcihvKSw0NDkpLHMpO2lzKGQsKCF0LnMmJih0LnM9bmV3IGZlKE11LHQsMjEsMTcpKSx0LnMpKSxpeShkKSx0Lmc9bmV3IHdyZSh0LGQpLHQuaT11KGQuZywyNDcpLHQuaT09bnVsbCYmKHQuaT1CZnQpLHQucD1udWxsLHNsKHQpLmImPS01fXJldHVybiB0Lmd9ZnVuY3Rpb24gVGF0KHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixILEc7aWYocj10Lmksbj10Lm4sdC5iPT0wKWU9RXNlKHQsITEpLFFqKHQuYVswXSxyLmQrbi5kLGVbMF0pLFFqKHQuYVsyXSxyLmQrci5hLW4uYS1lWzJdLGVbMl0pLGo9ci5hLW4uZC1uLmEsTT1qLGVbMF0+MCYmKGVbMF0rPXQuYyxNLT1lWzBdKSxlWzJdPjAmJihNLT1lWzJdK3QuYyksZVsxXT1iLk1hdGgubWF4KGVbMV0sTSksUWoodC5hWzFdLHIuZCtuLmQrZVswXS0oZVsxXS1NKS8yLGVbMV0pO2Vsc2UgZm9yKEc9ci5kK24uZCxIPXIuYS1uLmQtbi5hLGg9dC5hLHY9MCxDPWgubGVuZ3RoO3Y8QzsrK3Ypcz1oW3ZdLFFqKHMsRyxIKTtmb3Iobz10LmEsZD0wLGs9by5sZW5ndGg7ZDxrOysrZClzPW9bZF0sX3QocywzMjYpJiZ1KHMsMzI2KS5VZSgpfWZ1bmN0aW9uIER5bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQztmb3IoQz1OdChDcixYciwyNSx0LmIuYy5sZW5ndGgrMSwxNSwxKSxrPW5ldyBIcyxyPTAsbz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLENbcisrXT1rLmEuZ2MoKSx2PW5ldyBTKHMuYSk7di5hPHYuYy5jLmxlbmd0aDspZm9yKGg9dShKKHYpLDEwKSxuPW5ldyBhcihscihEcyhoKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDE3KSxrLmEuemMoZSxrKTtmb3IoZD1uZXcgUyhzLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihoPXUoSihkKSwxMCksbj1uZXcgYXIobHIoam8oaCkuYS5LYygpLG5ldyB6KSk7enIobik7KWU9dShNcihuKSwxNyksay5hLkJjKGUpIT1udWxsfXJldHVybiBDfWZ1bmN0aW9uIE1xKHQsZSxuLHIpe3ZhciBzLG8saCxkLHY7aWYodj1vdSh0LmUuVGcoKSxlKSxzPXUodC5nLDExOSksdG8oKSx1KGUsNjYpLk9qKCkpe2ZvcihoPTA7aDx0Lmk7KytoKWlmKG89c1toXSx2LnJsKG8uYWsoKSkmJnlpKG8sbikpcmV0dXJuITB9ZWxzZSBpZihuIT1udWxsKXtmb3IoZD0wO2Q8dC5pOysrZClpZihvPXNbZF0sdi5ybChvLmFrKCkpJiZ5aShuLG8uZGQoKSkpcmV0dXJuITA7aWYocil7Zm9yKGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLHYucmwoby5haygpKSYmVnQobik9PT1WdChtbnQodCx1KG8uZGQoKSw1NikpKSlyZXR1cm4hMH19ZWxzZSBmb3IoaD0wO2g8dC5pOysraClpZihvPXNbaF0sdi5ybChvLmFrKCkpJiZvLmRkKCk9PW51bGwpcmV0dXJuITE7cmV0dXJuITF9ZnVuY3Rpb24gTGxlKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsaztpZihrPW91KHQuZS5UZygpLGUpLGg9dSh0LmcsMTE5KSxYMCh0LmUsZSkpe2lmKGUuaGkoKSYmKG89REUodCxlLHIsX3QoZSw5OSkmJih1KGUsMTgpLkJiJkthKSE9MCksbz49MCYmbyE9bikpdGhyb3cgaXQobmV3IEZuKGVPKSk7Zm9yKHM9MCx2PTA7djx0Lmk7Kyt2KWlmKGQ9aFt2XSxrLnJsKGQuYWsoKSkpe2lmKHM9PW4pcmV0dXJuIHUoaDQodCx2LCh0bygpLHUoZSw2NikuT2ooKT91KHIsNzIpOlpkKGUscikpKSw3Mik7KytzfXRocm93IGl0KG5ldyB5byhKXytuK0QyK3MpKX1lbHNle2Zvcih2PTA7djx0Lmk7Kyt2KWlmKGQ9aFt2XSxrLnJsKGQuYWsoKSkpcmV0dXJuIHRvKCksdShlLDY2KS5PaigpP2Q6ZC5kZCgpO3JldHVybiBudWxsfX1mdW5jdGlvbiBNbGUodCxlLG4scil7dmFyIHMsbyxoLGQ7Zm9yKGQ9bixoPW5ldyBTKGUuYSk7aC5hPGguYy5jLmxlbmd0aDspe2lmKG89dShKKGgpLDIyMSkscz11KG8uYiw2NSksYXYodC5iLmMscy5iLmMrcy5iLmIpPD0wJiZhdihzLmIuYyx0LmIuYyt0LmIuYik8PTAmJmF2KHQuYi5kLHMuYi5kK3MuYi5hKTw9MCYmYXYocy5iLmQsdC5iLmQrdC5iLmEpPD0wKXtpZihhdihzLmIuYyx0LmIuYyt0LmIuYik9PTAmJnIuYTwwfHxhdihzLmIuYytzLmIuYix0LmIuYyk9PTAmJnIuYT4wfHxhdihzLmIuZCx0LmIuZCt0LmIuYSk9PTAmJnIuYjwwfHxhdihzLmIuZCtzLmIuYSx0LmIuZCk9PTAmJnIuYj4wKXtkPTA7YnJlYWt9fWVsc2UgZD1iLk1hdGgubWluKGQsTW9lKHQscyxyKSk7ZD1iLk1hdGgubWluKGQsTWxlKHQsbyxkLHIpKX1yZXR1cm4gZH1mdW5jdGlvbiBDSSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2lmKHQuYjwyKXRocm93IGl0KG5ldyBGbigiVGhlIHZlY3RvciBjaGFpbiBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgYSBzb3VyY2UgYW5kIGEgdGFyZ2V0IHBvaW50LiIpKTtmb3Iocz0oWm4odC5iIT0wKSx1KHQuYS5hLmMsOCkpLHZqKGUscy5hLHMuYiksdj1uZXcgTngoKCFlLmEmJihlLmE9bmV3IEFzKEdoLGUsNSkpLGUuYSkpLGg9ZWkodCwxKTtoLmE8dC5iLTE7KWQ9dSh0aShoKSw4KSx2LmUhPXYuaS5nYygpP249dShkcih2KSw0NjkpOihuPShTdygpLHI9bmV3IHhwLHIpLERpZSh2LG4pKSx1MnQobixkLmEsZC5iKTtmb3IoO3YuZSE9di5pLmdjKCk7KWRyKHYpLGZfKHYpO289KFpuKHQuYiE9MCksdSh0LmMuYi5jLDgpKSx3aihlLG8uYSxvLmIpfWZ1bmN0aW9uIERsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3Iobj0wLHM9bmV3IFMoKEFuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sMTAxKSkuZy5iLmopO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDExKSxyLnA9bisrO2ZvcihlPT0odmUoKSxQbik/WnModCxuZXcgR1gpOlpzKHQsbmV3IFVYKSxkPTAsQz10LmMubGVuZ3RoLTE7ZDxDOyloPShBbihkLHQuYy5sZW5ndGgpLHUodC5jW2RdLDEwMSkpLGs9KEFuKEMsdC5jLmxlbmd0aCksdSh0LmNbQ10sMTAxKSksbz1lPT1Qbj9oLmM6aC5hLHY9ZT09UG4/ay5hOmsuYyxPZyhoLGUsKEkxKCksZDcpLG8pLE9nKGssZSxmNyx2KSwrK2QsLS1DO2Q9PUMmJk9nKChBbihkLHQuYy5sZW5ndGgpLHUodC5jW2RdLDEwMSkpLGUsKEkxKCksTzYpLG51bGwpfWZ1bmN0aW9uIEl5bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7cmV0dXJuIE09dC5hLmkrdC5hLmcvMixqPXQuYS5pK3QuYS5nLzIsRz1lLmkrZS5nLzIsdHQ9ZS5qK2UuZi8yLGQ9bmV3ICRlKEcsdHQpLGs9dShxZShlLCh1aSgpLFk2KSksOCksay5hPWsuYStNLGsuYj1rLmIraixvPShkLmItay5iKS8oZC5hLWsuYSkscj1kLmItbypkLmEsSz1uLmkrbi5nLzIsZ3Q9bi5qK24uZi8yLHY9bmV3ICRlKEssZ3QpLEM9dShxZShuLFk2KSw4KSxDLmE9Qy5hK00sQy5iPUMuYitqLGg9KHYuYi1DLmIpLyh2LmEtQy5hKSxzPXYuYi1oKnYuYSxIPShyLXMpLyhoLW8pLGsuYTxIJiZkLmE8SHx8SDxrLmEmJkg8ZC5hPyExOiEoQy5hPEgmJnYuYTxIfHxIPEMuYSYmSDx2LmEpfWZ1bmN0aW9uIE95bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSDtpZihqPXUodHIodC5jLGUpLDE4MyksIWopdGhyb3cgaXQobmV3IHVkKCJFZGdlIGRpZCBub3QgZXhpc3QgaW4gaW5wdXQuIikpO3JldHVybiBrPXBFKGopLG89d00oKCFlLmEmJihlLmE9bmV3IGZlKEppLGUsNiw2KSksZS5hKSksZD0hbyxkJiYoSD1uZXcgRWcsbj1uZXcgQll0KHQsayxIKSxSWGUoKCFlLmEmJihlLmE9bmV3IGZlKEppLGUsNiw2KSksZS5hKSxuKSxZZihqLEU4dCxIKSkscz1vMihlLCh1aSgpLGE1KSkscyYmKEM9dShxZShlLGE1KSw3NCksaD0hQ3x8a1h0KEMpLHY9IWgsdiYmKE09bmV3IEVnLHI9bmV3IE16dChNKSx2YShDLHIpLFlmKGosImp1bmN0aW9uUG9pbnRzIixNKSkpLEU4KGosImNvbnRhaW5lciIsY0QoZSkuayksbnVsbH1mdW5jdGlvbiBoeHQodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEM7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW4sdGhpcy5lPUExKGx0KGN0KGk2biwxKSxEZSwxNjgsMCxbbmV3IER4KHQsZSksbmV3IER4KGUsbiksbmV3IER4KG4sdCldKSksdGhpcy5mPUExKGx0KGN0KFdzLDEpLGVlLDgsMCxbdCxlLG5dKSksdGhpcy5kPShyPWlhKG5jKHRoaXMuYiksdGhpcy5hKSxzPWlhKG5jKHRoaXMuYyksdGhpcy5hKSxvPWlhKG5jKHRoaXMuYyksdGhpcy5iKSxoPXIuYSoodGhpcy5hLmErdGhpcy5iLmEpK3IuYioodGhpcy5hLmIrdGhpcy5iLmIpLGQ9cy5hKih0aGlzLmEuYSt0aGlzLmMuYSkrcy5iKih0aGlzLmEuYit0aGlzLmMuYiksdj0yKihyLmEqby5iLXIuYipvLmEpLGs9KHMuYipoLXIuYipkKS92LEM9KHIuYSpkLXMuYSpoKS92LG5ldyAkZShrLEMpKX1mdW5jdGlvbiBJbGUodCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRztpZihqPW5ldyBVbSh0LnApLFlmKGUsY2ksaiksbiYmISh0LmY/aUQodC5mKTpudWxsKS5hLmRjKCkpZm9yKEM9bmV3IEVnLFlmKGUsImxvZ3MiLEMpLGQ9MCxHPW5ldyBMKCh0LmY/aUQodC5mKTpudWxsKS5iLktjKCkpO0cuYi5PYigpOylIPUJyKEcuYi5QYigpKSxNPW5ldyBVbShIKSxKbShDLGQpLEJydChDLGQsTSksKytkO2lmKHImJihrPW5ldyBFQyh0LnEpLFlmKGUsImV4ZWN1dGlvblRpbWUiLGspKSwhaUQodC5hKS5hLmRjKCkpZm9yKGg9bmV3IEVnLFlmKGUsZXV0LGgpLGQ9MCxvPW5ldyBMKGlEKHQuYSkuYi5LYygpKTtvLmIuT2IoKTspcz11KG8uYi5QYigpLDE5NDkpLHY9bmV3IF94LEptKGgsZCksQnJ0KGgsZCx2KSxJbGUocyx2LG4sciksKytkfWZ1bmN0aW9uIGJ2KHQsZSl7dmFyIG4scixzLG8saCxkO2ZvcihvPXQuYyxoPXQuZCxPYSh0LG51bGwpLG9hKHQsbnVsbCksZSYmamUoUmUoUShoLChhZSgpLFVsdCkpKSk/T2EodCxpeHQoaC5pLChzbygpLG51KSwodmUoKSxIbikpKTpPYSh0LGgpLGUmJmplKFJlKFEobywoYWUoKSxZbHQpKSkpP29hKHQsaXh0KG8uaSwoc28oKSx0bCksKHZlKCksQm4pKSk6b2EodCxvKSxyPW5ldyBTKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNzApLHM9dShRKG4sKFRlKCksT2QpKSwyNzIpLHM9PShNMSgpLEY3KT9KdChuLE9kLFp5KTpzPT1aeSYmSnQobixPZCxGNyk7ZD1qZShSZShRKHQsKGFlKCkscTEpKSkpLEp0KHQscTEsKE5uKCksIWQpKSx0LmE9cUQodC5hKX1mdW5jdGlvbiBQeW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdjtmb3Iocj0wLG89bmV3IG5yKCghdC5hJiYodC5hPW5ldyBmZShycyx0LDEwLDExKSksdC5hKSk7by5lIT1vLmkuZ2MoKTspcz11KGRyKG8pLDMzKSxoPSIiLCghcy5uJiYocy5uPW5ldyBmZShxbyxzLDEsNykpLHMubikuaT09MHx8KGg9dShBdCgoIXMubiYmKHMubj1uZXcgZmUocW8scywxLDcpKSxzLm4pLDApLDEzNykuYSksZD1uZXcgZ1h0KGgpLE1vKGQscyksSnQoZCwoWXAoKSxJNikscyksZC5iPXIrKyxkLmQuYT1zLmkrcy5nLzIsZC5kLmI9cy5qK3MuZi8yLGQuZS5hPWIuTWF0aC5tYXgocy5nLDEpLGQuZS5iPWIuTWF0aC5tYXgocy5mLDEpLGxlKGUuZSxkKSxhdShuLmYscyxkKSx2PXUocWUocywoSmYoKSxrN3QpKSw5OCksdj09KHVhKCksVGIpJiYodj1HMSl9ZnVuY3Rpb24gRnluKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtuPUZ3KG5ldyBYYix0LmYpLGs9dC5pW2UuYy5pLnBdLEg9dC5pW2UuZC5pLnBdLHY9ZS5jLGo9ZS5kLGQ9di5hLmIsTT1qLmEuYixrLmJ8fChkKz12Lm4uYiksSC5ifHwoTSs9ai5uLmIpLEM9cHMoYi5NYXRoLm1heCgwLGQtTSkpLGg9cHMoYi5NYXRoLm1heCgwLE0tZCkpLEc9KEs9Yi5NYXRoLm1heCgxLHUoUShlLChUZSgpLEg2KSksMTkpLmEpLHR0PW9tdChlLmMuaS5rLGUuZC5pLmspLEsqdHQpLHM9eWYobGYodWYoY2YoaGYobmV3IENoLEcpLGgpLG4pLHUodHIodC5rLGUuYyksMTIxKSkpLG89eWYobGYodWYoY2YoaGYobmV3IENoLEcpLEMpLG4pLHUodHIodC5rLGUuZCksMTIxKSkpLHI9bmV3IGJHdChzLG8pLHQuY1tlLnBdPXJ9ZnVuY3Rpb24gTnluKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsaztmb3IoaD1uZXcgc2hlKHQsZSxuKSx2PW5ldyBkYShyLDApLHM9ITE7di5iPHYuZC5nYygpOylkPShabih2LmI8di5kLmdjKCkpLHUodi5kLlhiKHYuYz12LmIrKyksMjMzKSksZD09ZXx8ZD09bj9DbCh2KTohcyYmWHQoRTEoZC5nLGQuZFswXSkuYSk+WHQoRTEoaC5nLGguZFswXSkuYSk/KFpuKHYuYj4wKSx2LmEuWGIodi5jPS0tdi5iKSx6bSh2LGgpLHM9ITApOmQuZSYmZC5lLmdjKCk+MCYmKG89KCFkLmUmJihkLmU9bmV3IGhlKSxkLmUpLk1jKGUpLGs9KCFkLmUmJihkLmU9bmV3IGhlKSxkLmUpLk1jKG4pLChvfHxrKSYmKCghZC5lJiYoZC5lPW5ldyBoZSksZC5lKS5GYyhoKSwrK2guYykpO3N8fChyLmNbci5jLmxlbmd0aF09aCl9ZnVuY3Rpb24gT2xlKHQpe3ZhciBlLG4scjtpZihHMyh1KFEodCwoVGUoKSxjcykpLDk4KSkpZm9yKG49bmV3IFModC5qKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMSksZS5qPT0odmUoKSxabykmJihyPXUoUShlLChhZSgpLEp1KSksMTApLHI/QnMoZSx1KFEocixvYyksNjEpKTplLmUuYy5sZW5ndGgtZS5nLmMubGVuZ3RoPDA/QnMoZSxIbik6QnMoZSxCbikpO2Vsc2V7Zm9yKG49bmV3IFModC5qKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMSkscj11KFEoZSwoYWUoKSxKdSkpLDEwKSxyP0JzKGUsdShRKHIsb2MpLDYxKSk6ZS5lLmMubGVuZ3RoLWUuZy5jLmxlbmd0aDwwP0JzKGUsKHZlKCksSG4pKTpCcyhlLCh2ZSgpLEJuKSk7SnQodCxjcywodWEoKSxCNykpfX1mdW5jdGlvbiBfSSh0KXt2YXIgZSxuLHI7c3dpdGNoKHQpe2Nhc2UgOTE6Y2FzZSA5MzpjYXNlIDQ1OmNhc2UgOTQ6Y2FzZSA0NDpjYXNlIDkyOnI9IlxcIitTdHJpbmcuZnJvbUNoYXJDb2RlKHQmeXMpO2JyZWFrO2Nhc2UgMTI6cj0iXFxmIjticmVhaztjYXNlIDEwOnI9IlxcbiI7YnJlYWs7Y2FzZSAxMzpyPSJcXHIiO2JyZWFrO2Nhc2UgOTpyPSJcXHQiO2JyZWFrO2Nhc2UgMjc6cj0iXFxlIjticmVhaztkZWZhdWx0OnQ8MzI/KG49KGU9dD4+PjAsIjAiK2UudG9TdHJpbmcoMTYpKSxyPSJcXHgiK1BsKG4sbi5sZW5ndGgtMixuLmxlbmd0aCkpOnQ+PUthPyhuPShlPXQ+Pj4wLCIwIitlLnRvU3RyaW5nKDE2KSkscj0iXFx2IitQbChuLG4ubGVuZ3RoLTYsbi5sZW5ndGgpKTpyPSIiK1N0cmluZy5mcm9tQ2hhckNvZGUodCZ5cyl9cmV0dXJuIHJ9ZnVuY3Rpb24gQ2F0KHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE07aWYoaD10LmUsdj1lLmUsdj09MClyZXR1cm4gdDtpZihoPT0wKXJldHVybiBlLmU9PTA/ZTpuZXcgWDMoLWUuZSxlLmQsZS5hKTtpZihvPXQuZCxkPWUuZCxvK2Q9PTIpcmV0dXJuIG49TnModC5hWzBdLGNvKSxyPU5zKGUuYVswXSxjbyksaDwwJiYobj16OChuKSksdjwwJiYocj16OChyKSksSkQoSnAobixyKSk7aWYocz1vIT1kP28+ZD8xOi0xOnF5dCh0LmEsZS5hLG8pLHM9PS0xKU09LXYsQz1oPT12P1dydChlLmEsZCx0LmEsbyk6S3J0KGUuYSxkLHQuYSxvKTtlbHNlIGlmKE09aCxoPT12KXtpZihzPT0wKXJldHVybiByYigpLHM3O0M9V3J0KHQuYSxvLGUuYSxkKX1lbHNlIEM9S3J0KHQuYSxvLGUuYSxkKTtyZXR1cm4gaz1uZXcgWDMoTSxDLmxlbmd0aCxDKSxOOShrKSxrfWZ1bmN0aW9uIGZ4dCh0KXt2YXIgZSxuLHIscyxvLGg7Zm9yKHRoaXMuZT1uZXcgaGUsdGhpcy5hPW5ldyBoZSxuPXQuYi0xO248MztuKyspbTgodCwwLHUoWmYodCwwKSw4KSk7aWYodC5iPDQpdGhyb3cgaXQobmV3IEZuKCJBdCAobGVhc3QgZGltZW5zaW9uICsgMSkgY29udHJvbCBwb2ludHMgYXJlIG5lY2Vzc2FyeSEiKSk7Zm9yKHRoaXMuYj0zLHRoaXMuZD0hMCx0aGlzLmM9ITEseDJuKHRoaXMsdC5iK3RoaXMuYi0xKSxoPW5ldyBoZSxvPW5ldyBTKHRoaXMuZSksZT0wO2U8dGhpcy5iLTE7ZSsrKWxlKGgseWUoSihvKSkpO2ZvcihzPWVpKHQsMCk7cy5iIT1zLmQuYzspcj11KHRpKHMpLDgpLGxlKGgseWUoSihvKSkpLGxlKHRoaXMuYSxuZXcgeVF0KHIsaCkpLEFuKDAsaC5jLmxlbmd0aCksaC5jLnNwbGljZSgwLDEpfWZ1bmN0aW9uIFBsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3Iobz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwyOSksZD1uZXcgUyhzLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihoPXUoSihkKSwxMCksaC5rPT0oVm4oKSxMbCkmJih2PShrPXUoTXIobmV3IGFyKGxyKGpvKGgpLmEuS2MoKSxuZXcgeikpKSwxNyksQz11KE1yKG5ldyBhcihscihEcyhoKS5hLktjKCksbmV3IHopKSksMTcpLCFqZShSZShRKGssKGFlKCkscTEpKSkpfHwhamUoUmUoUShDLHExKSkpP2U6dXJlKGUpKSxwNihoLHYpKSxyPW5ldyBhcihscihEcyhoKS5hLktjKCksbmV3IHopKTt6cihyKTspbj11KE1yKHIpLDE3KSx2PWplKFJlKFEobiwoYWUoKSxxMSkpKSk/dXJlKGUpOmUsbnJlKG4sdil9ZnVuY3Rpb24gQnluKHQsZSxuLHIscyl7dmFyIG8saCxkO2lmKG4uZj49ZS5vJiZuLmY8PWUuZnx8ZS5hKi41PD1uLmYmJmUuYSoxLjU+PW4uZil7aWYoaD11KE5lKGUubixlLm4uYy5sZW5ndGgtMSksMjExKSxoLmUraC5kK24uZytzPD1yJiYobz11KE5lKGUubixlLm4uYy5sZW5ndGgtMSksMjExKSxvLmYtdC5mK24uZjw9dC5ifHx0LmEuYy5sZW5ndGg9PTEpKXJldHVybiBoM3QoZSxuKSwhMDtpZihlLnMrbi5nPD1yJiYoZS50K2UuZCtuLmYrczw9dC5ifHx0LmEuYy5sZW5ndGg9PTEpKXJldHVybiBsZShlLmIsbiksZD11KE5lKGUubixlLm4uYy5sZW5ndGgtMSksMjExKSxsZShlLm4sbmV3IEUkKGUucyxkLmYrZC5hK2UuaSxlLmkpKSxXM3QodShOZShlLm4sZS5uLmMubGVuZ3RoLTEpLDIxMSksbiksU2xlKGUsbiksITB9cmV0dXJuITF9ZnVuY3Rpb24gRmxlKHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gdC5laigpPyhzPW51bGwsbz10LmZqKCkscj10LlppKDEsaD1zaXQodCxlLG4pLG4sZSxvKSx0LmJqKCkmJiEodC5uaSgpJiZoIT1udWxsP3lpKGgsbik6VnQoaCk9PT1WdChuKSk/KGghPW51bGwmJihzPXQuZGooaCxzKSkscz10LmNqKG4scyksdC5paigpJiYocz10LmxqKGgsbixzKSkscz8ocy5FaShyKSxzLkZpKCkpOnQuJGkocikpOih0LmlqKCkmJihzPXQubGooaCxuLHMpKSxzPyhzLkVpKHIpLHMuRmkoKSk6dC4kaShyKSksaCk6KGg9c2l0KHQsZSxuKSx0LmJqKCkmJiEodC5uaSgpJiZoIT1udWxsP3lpKGgsbik6VnQoaCk9PT1WdChuKSkmJihzPW51bGwsaCE9bnVsbCYmKHM9dC5kaihoLG51bGwpKSxzPXQuY2oobixzKSxzJiZzLkZpKCkpLGgpfWZ1bmN0aW9uIEVfKHQsZSl7dmFyIG4scixzLG8saCxkLHYsaztlJT0yNCx0LnEuZ2V0SG91cnMoKSE9ZSYmKHI9bmV3IGIuRGF0ZSh0LnEuZ2V0VGltZSgpKSxyLnNldERhdGUoci5nZXREYXRlKCkrMSksZD10LnEuZ2V0VGltZXpvbmVPZmZzZXQoKS1yLmdldFRpbWV6b25lT2Zmc2V0KCksZD4wJiYodj1kLzYwfDAsaz1kJTYwLHM9dC5xLmdldERhdGUoKSxuPXQucS5nZXRIb3VycygpLG4rdj49MjQmJisrcyxvPW5ldyBiLkRhdGUodC5xLmdldEZ1bGxZZWFyKCksdC5xLmdldE1vbnRoKCkscyxlK3YsdC5xLmdldE1pbnV0ZXMoKStrLHQucS5nZXRTZWNvbmRzKCksdC5xLmdldE1pbGxpc2Vjb25kcygpKSx0LnEuc2V0VGltZShvLmdldFRpbWUoKSkpKSxoPXQucS5nZXRUaW1lKCksdC5xLnNldFRpbWUoaCszNmU1KSx0LnEuZ2V0SG91cnMoKSE9ZSYmdC5xLnNldFRpbWUoaCl9ZnVuY3Rpb24gUnluKHQsZSl7dmFyIG4scixzLG8saDtpZih2cihlLCJQYXRoLUxpa2UgR3JhcGggV3JhcHBpbmciLDEpLHQuYi5jLmxlbmd0aD09MCl7b3IoZSk7cmV0dXJufWlmKHM9bmV3IG01dCh0KSxoPShzLmk9PW51bGwmJihzLmk9Znl0KHMsbmV3IFZOKSksWHQocy5pKSpzLmYpLG49aC8ocy5pPT1udWxsJiYocy5pPWZ5dChzLG5ldyBWTikpLFh0KHMuaSkpLHMuYj5uKXtvcihlKTtyZXR1cm59c3dpdGNoKHUoUSh0LChUZSgpLGdodCkpLDMzNykuZyl7Y2FzZSAyOm89bmV3IFVOO2JyZWFrO2Nhc2UgMDpvPW5ldyBITjticmVhaztkZWZhdWx0Om89bmV3IFdOfWlmKHI9by5WZih0LHMpLCFvLldmKCkpc3dpdGNoKHUoUSh0LHdHKSwzMzgpLmcpe2Nhc2UgMjpyPURvZShzLHIpO2JyZWFrO2Nhc2UgMTpyPU1hZShzLHIpfUYzbih0LHMsciksb3IoZSl9ZnVuY3Rpb24ganluKHQsZSl7dmFyIG4scixzLG87aWYoRWluKHQuZCx0LmUpLHQuYy5hLiRiKCksWHQoeWUoUShlLmosKFRlKCksYUcpKSkpIT0wfHxYdCh5ZShRKGUuaixhRykpKSE9MClmb3Iobj1WRSxWdChRKGUuaix3YikpIT09VnQoKFYwKCksdmIpKSYmSnQoZS5qLChhZSgpLE92KSwoTm4oKSwhMCkpLG89dShRKGUuaixNUyksMTkpLmEscz0wO3M8byYmKHI9bXluKHQsZSksIShyPG4mJihuPXIseG5lKHQpLG49PTApKSk7cysrKTtlbHNlIGZvcihuPXdpLFZ0KFEoZS5qLHdiKSkhPT1WdCgoVjAoKSx2YikpJiZKdChlLmosKGFlKCksT3YpLChObigpLCEwKSksbz11KFEoZS5qLE1TKSwxOSkuYSxzPTA7czxvJiYocj14bGUodCxlKSwhKHI8biYmKG49cix4bmUodCksbj09MCkpKTtzKyspO31mdW5jdGlvbiAkeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO2ZvcihoPW5ldyBoZSxkPTAsbj0wLHY9MDtkPGUuYy5sZW5ndGgtMSYmbjx0LmdjKCk7KXtmb3Iocj11KHQuWGIobiksMTkpLmErdjsoQW4oZCsxLGUuYy5sZW5ndGgpLHUoZS5jW2QrMV0sMTkpKS5hPHI7KSsrZDtmb3Ioaz0wLG89ci0oQW4oZCxlLmMubGVuZ3RoKSx1KGUuY1tkXSwxOSkpLmEscz0oQW4oZCsxLGUuYy5sZW5ndGgpLHUoZS5jW2QrMV0sMTkpKS5hLXIsbz5zJiYrK2ssbGUoaCwoQW4oZCtrLGUuYy5sZW5ndGgpLHUoZS5jW2Qra10sMTkpKSksdis9KEFuKGQrayxlLmMubGVuZ3RoKSx1KGUuY1tkK2tdLDE5KSkuYS1yLCsrbjtuPHQuZ2MoKSYmdSh0LlhiKG4pLDE5KS5hK3Y8PShBbihkK2ssZS5jLmxlbmd0aCksdShlLmNbZCtrXSwxOSkpLmE7KSsrbjtkKz0xK2t9cmV0dXJuIGh9ZnVuY3Rpb24gX2F0KHQpe3ZhciBlLG4scixzLG8saCxkO2lmKCF0LmQpe2lmKGQ9bmV3IEwzLGU9dUEsbz1lLmEuemModCxlKSxvPT1udWxsKXtmb3Iocj1uZXcgbnIoQW8odCkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwyNiksaXMoZCxfYXQobikpO2UuYS5CYyh0KSE9bnVsbCxlLmEuZ2MoKT09MH1mb3IoaD1kLmkscz0oIXQucSYmKHQucT1uZXcgZmUoV2gsdCwxMSwxMCkpLG5ldyBucih0LnEpKTtzLmUhPXMuaS5nYygpOysraCl1KGRyKHMpLDM5OSk7aXMoZCwoIXQucSYmKHQucT1uZXcgZmUoV2gsdCwxMSwxMCkpLHQucSkpLGl5KGQpLHQuZD1uZXcgVjMoKHUoQXQoV3QoKEhwKCksTG4pLm8pLDkpLDE4KSxkLmkpLGQuZyksdC5lPXUoZC5nLDY3MyksdC5lPT1udWxsJiYodC5lPWs1ZSksc2wodCkuYiY9LTE3fXJldHVybiB0LmR9ZnVuY3Rpb24gREUodCxlLG4scil7dmFyIHMsbyxoLGQsdixrO2lmKGs9b3UodC5lLlRnKCksZSksdj0wLHM9dSh0LmcsMTE5KSx0bygpLHUoZSw2NikuT2ooKSl7Zm9yKGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLGsucmwoby5haygpKSl7aWYoeWkobyxuKSlyZXR1cm4gdjsrK3Z9fWVsc2UgaWYobiE9bnVsbCl7Zm9yKGQ9MDtkPHQuaTsrK2QpaWYobz1zW2RdLGsucmwoby5haygpKSl7aWYoeWkobixvLmRkKCkpKXJldHVybiB2Oysrdn1pZihyKXtmb3Iodj0wLGg9MDtoPHQuaTsrK2gpaWYobz1zW2hdLGsucmwoby5haygpKSl7aWYoVnQobik9PT1WdChtbnQodCx1KG8uZGQoKSw1NikpKSlyZXR1cm4gdjsrK3Z9fX1lbHNlIGZvcihoPTA7aDx0Lmk7KytoKWlmKG89c1toXSxrLnJsKG8uYWsoKSkpe2lmKG8uZGQoKT09bnVsbClyZXR1cm4gdjsrK3Z9cmV0dXJuLTF9ZnVuY3Rpb24genluKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixIO2Zvcih3bigpLFpzKHQsbmV3IEtaKSxoPVFNKHQpLEg9bmV3IGhlLGo9bmV3IGhlLGQ9bnVsbCx2PTA7aC5iIT0wOylvPXUoaC5iPT0wP251bGw6KFpuKGguYiE9MCksbGgoaCxoLmEuYSkpLDE1NyksIWR8fFJ1KGQpKkVsKGQpLzI8UnUobykqRWwobyk/KGQ9byxILmNbSC5jLmxlbmd0aF09byk6KHYrPVJ1KG8pKkVsKG8pLGouY1tqLmMubGVuZ3RoXT1vLGouYy5sZW5ndGg+MSYmKHY+UnUoZCkqRWwoZCkvMnx8aC5iPT0wKSYmKE09bmV3IHJ6KGopLEM9UnUoZCkvRWwoZCksaz16YXQoTSxlLG5ldyBDeCxuLHIscyxDKSxMaShHZihNLmUpLGspLGQ9TSxILmNbSC5jLmxlbmd0aF09TSx2PTAsai5jPU50KFFuLERlLDEsMCw1LDEpKSk7cmV0dXJuIExzKEgsaiksSH1mdW5jdGlvbiBxeW4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2lmKG4ubWgoZSkmJihDPShIPWUsSD91KHIsNDkpLnhoKEgpOm51bGwpLEMpKWlmKEs9bi5iaChlLHQuYSksRz1lLnQsRz4xfHxHPT0tMSlpZihNPXUoSyw2OSksaj11KEMsNjkpLE0uZGMoKSlqLiRiKCk7ZWxzZSBmb3IoaD0hIW5vKGUpLG89MCxkPXQuYT9NLktjKCk6TS5aaCgpO2QuT2IoKTspaz11KGQuUGIoKSw1Nikscz11KFh3KHQsayksNTYpLHM/KGg/KHY9ai5YYyhzKSx2PT0tMT9qLlhoKG8scyk6byE9diYmai5qaShvLHMpKTpqLlhoKG8scyksKytvKTp0LmImJiFoJiYoai5YaChvLGspLCsrbyk7ZWxzZSBLPT1udWxsP0MuV2IobnVsbCk6KHM9WHcodCxLKSxzPT1udWxsP3QuYiYmIW5vKGUpJiZDLldiKEspOkMuV2IocykpfWZ1bmN0aW9uIEh5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGs7Zm9yKG49bmV3IE5LLHM9bmV3IGFyKGxyKGpvKGUpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylpZihyPXUoTXIocyksMTcpLCFHYShyKSYmKGQ9ci5jLmksTDR0KGQseVYpKSl7aWYoaz1WNXQodCxkLHlWLG1WKSxrPT0tMSljb250aW51ZTtuLmI9Yi5NYXRoLm1heChuLmIsayksIW4uYSYmKG4uYT1uZXcgaGUpLGxlKG4uYSxkKX1mb3IoaD1uZXcgYXIobHIoRHMoZSkuYS5LYygpLG5ldyB6KSk7enIoaCk7KWlmKG89dShNcihoKSwxNyksIUdhKG8pJiYodj1vLmQuaSxMNHQodixtVikpKXtpZihrPVY1dCh0LHYsbVYseVYpLGs9PS0xKWNvbnRpbnVlO24uZD1iLk1hdGgubWF4KG4uZCxrKSwhbi5jJiYobi5jPW5ldyBoZSksbGUobi5jLHYpfXJldHVybiBufWZ1bmN0aW9uIE5sZSh0KXtURSgpO3ZhciBlLG4scixzO2lmKGU9cHModCksdDxsUy5sZW5ndGgpcmV0dXJuIGxTW2VdO2lmKHQ8PTUwKXJldHVybiBiSSgocmIoKSxSdXQpLGUpO2lmKHQ8PVdnKXJldHVybiBReChiSShENlsxXSxlKSxlKTtpZih0PjFlNil0aHJvdyBpdChuZXcgX1IoInBvd2VyIG9mIHRlbiB0b28gYmlnIikpO2lmKHQ8PXdpKXJldHVybiBReChiSShENlsxXSxlKSxlKTtmb3Iocj1iSShENlsxXSx3aSkscz1yLG49VHUodC13aSksZT1wcyh0JXdpKTt5YyhuLHdpKT4wOylzPWU0KHMsciksbj1KcChuLHdpKTtmb3Iocz1lNChzLGJJKEQ2WzFdLGUpKSxzPVF4KHMsd2kpLG49VHUodC13aSk7eWMobix3aSk+MDspcz1ReChzLHdpKSxuPUpwKG4sd2kpO3JldHVybiBzPVF4KHMsZSksc31mdW5jdGlvbiBWeW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7Zm9yKHZyKGUsIkhpZXJhcmNoaWNhbCBwb3J0IGR1bW15IHNpemUgcHJvY2Vzc2luZyIsMSksdj1uZXcgaGUsQz1uZXcgaGUscj1YdCh5ZShRKHQsKFRlKCksSjQpKSkpLG49cioyLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDI5KSx2LmM9TnQoUW4sRGUsMSwwLDUsMSksQy5jPU50KFFuLERlLDEsMCw1LDEpLGQ9bmV3IFMocy5hKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMCksaC5rPT0oVm4oKSxrcykmJihrPXUoUShoLChhZSgpLG9jKSksNjEpLGs9PSh2ZSgpLFBuKT92LmNbdi5jLmxlbmd0aF09aDprPT1tciYmKEMuY1tDLmMubGVuZ3RoXT1oKSk7Y2NlKHYsITAsbiksY2NlKEMsITEsbil9b3IoZSl9ZnVuY3Rpb24gR3luKHQsZSl7dmFyIG4scixzLG8saCxkLHY7dnIoZSwiTGF5ZXIgY29uc3RyYWludCBwb3N0cHJvY2Vzc2luZyIsMSksdj10LmIsdi5jLmxlbmd0aCE9MCYmKHI9KEFuKDAsdi5jLmxlbmd0aCksdSh2LmNbMF0sMjkpKSxoPXUoTmUodix2LmMubGVuZ3RoLTEpLDI5KSxuPW5ldyBTaCh0KSxvPW5ldyBTaCh0KSxMbW4odCxyLGgsbixvKSxuLmEuYy5sZW5ndGg9PTB8fChLbSgwLHYuYy5sZW5ndGgpLFhDKHYuYywwLG4pKSxvLmEuYy5sZW5ndGg9PTB8fCh2LmNbdi5jLmxlbmd0aF09bykpLFVzKHQsKGFlKCksR2x0KSkmJihzPW5ldyBTaCh0KSxkPW5ldyBTaCh0KSxMdm4odCxzLGQpLHMuYS5jLmxlbmd0aD09MHx8KEttKDAsdi5jLmxlbmd0aCksWEModi5jLDAscykpLGQuYS5jLmxlbmd0aD09MHx8KHYuY1t2LmMubGVuZ3RoXT1kKSksb3IoZSl9ZnVuY3Rpb24gQmxlKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDO2Zvcih2PW5ldyBTKHQuYSk7di5hPHYuYy5jLmxlbmd0aDspaWYoZD11KEoodiksMTApLGQuaz09KFZuKCksa3MpJiYocz11KFEoZCwoYWUoKSxvYykpLDYxKSxzPT0odmUoKSxIbil8fHM9PUJuKSlmb3Iocj1uZXcgYXIobHIoVTAoZCkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSwxNyksZT1uLmEsZS5iIT0wJiYoaz1uLmMsay5pPT1kJiYobz0oWm4oZS5iIT0wKSx1KGUuYS5hLmMsOCkpLG8uYj1ZbyhsdChjdChXcywxKSxlZSw4LDAsW2suaS5uLGsubixrLmFdKSkuYiksQz1uLmQsQy5pPT1kJiYoaD0oWm4oZS5iIT0wKSx1KGUuYy5iLmMsOCkpLGguYj1ZbyhsdChjdChXcywxKSxlZSw4LDAsW0MuaS5uLEMubixDLmFdKSkuYikpfWZ1bmN0aW9uIFV5bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2Zvcih2cihlLCJTb3J0IEJ5IElucHV0IE1vZGVsICIrUSh0LChUZSgpLHdiKSksMSkscz0wLHI9bmV3IFModC5iKTtyLmE8ci5jLmMubGVuZ3RoOyl7Zm9yKG49dShKKHIpLDI5KSx2PXM9PTA/MDpzLTEsZD11KE5lKHQuYix2KSwyOSksaD1uZXcgUyhuLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEwKSxWdChRKG8sY3MpKSE9PVZ0KCh1YSgpLFkyKSkmJlZ0KFEobyxjcykpIT09VnQoR2MpJiYod24oKSxacyhvLmosbmV3IGVlZShkLEpzZShvKSkpLEpiKGUsIk5vZGUgIitvKyIgcG9ydHM6ICIrby5qKSk7d24oKSxacyhuLmEsbmV3IFRuZShkLHUoUSh0LHdiKSwzMzkpLHUoUSh0LEhDdCksMzc4KSkpLEpiKGUsIkxheWVyICIrcysiOiAiK24pLCsrc31vcihlKX1mdW5jdGlvbiBXeW4odCxlKXt2YXIgbixyLHMsbztpZihvPUNsZShlKSxscyhuZXcgVG4obnVsbCwoIWUuYyYmKGUuYz1uZXcgZmUoZ2wsZSw5LDkpKSxuZXcgX24oZS5jLDE2KSkpLG5ldyBqbihvKSkscz11KFEobywoYWUoKSxWYykpLDIxKSxZNG4oZSxzKSxzLkhjKChvbygpLHZoKSkpZm9yKHI9bmV3IG5yKCghZS5jJiYoZS5jPW5ldyBmZShnbCxlLDksOSkpLGUuYykpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSwxMTgpLEM1bih0LGUsbyxuKTtyZXR1cm4gdShxZShlLChUZSgpLCQyKSksMTc0KS5nYygpIT0wJiZ3dWUoZSxvKSxqZShSZShRKG8scDl0KSkpJiZzLkZjKFFWKSxVcyhvLElPKSYmbkh0KG5ldyB3M3QoWHQoeWUoUShvLElPKSkpKSxvKSxWdChxZShlLHF5KSk9PT1WdCgoRzAoKSxzcCkpP1J4bih0LGUsbyk6c3huKHQsZSxvKSxvfWZ1bmN0aW9uIFRfKHQsZSxuLHIpe3ZhciBzLG8saDtpZih0aGlzLmo9bmV3IGhlLHRoaXMuaz1uZXcgaGUsdGhpcy5iPW5ldyBoZSx0aGlzLmM9bmV3IGhlLHRoaXMuZT1uZXcgRngsdGhpcy5pPW5ldyBQdSx0aGlzLmY9bmV3IEp0dCx0aGlzLmQ9bmV3IGhlLHRoaXMuZz1uZXcgaGUsbGUodGhpcy5iLHQpLGxlKHRoaXMuYixlKSx0aGlzLmUuYz1iLk1hdGgubWluKHQuYSxlLmEpLHRoaXMuZS5kPWIuTWF0aC5taW4odC5iLGUuYiksdGhpcy5lLmI9Yi5NYXRoLmFicyh0LmEtZS5hKSx0aGlzLmUuYT1iLk1hdGguYWJzKHQuYi1lLmIpLHM9dShRKHIsKFRlKCksU28pKSw3NCkscylmb3IoaD1laShzLDApO2guYiE9aC5kLmM7KW89dSh0aShoKSw4KSxVbXQoby5hLHQuYSkmJnJpKHRoaXMuaSxvKTtuJiZsZSh0aGlzLmosbiksbGUodGhpcy5rLHIpfWZ1bmN0aW9uIFl5bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKEM9bmV3IG4kKG5ldyBDaShuKSksZD1OdChwbCxvMCwyNSx0LmYuZS5jLmxlbmd0aCwxNiwxKSxkdnQoZCxkLmxlbmd0aCksbltlLmJdPTAsaz1uZXcgUyh0LmYuZSk7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMTQ0KSx2LmIhPWUuYiYmKG5bdi5iXT13aSksUjgoeEUoQyx2KSk7Zm9yKDtDLmIuYy5sZW5ndGghPTA7KWZvcihNPXUoY2l0KEMpLDE0NCksZFtNLmJdPSEwLG89d1d0KG5ldyBrZXQodC5iLE0pLDApO28uYzspcz11KFZ2dChvKSwyODIpLGo9RTFuKHMsTSksIWRbai5iXSYmKFVzKHMsKGlJKCksdlYpKT9oPVh0KHllKFEocyx2VikpKTpoPXQuYyxyPW5bTS5iXStoLHI8bltqLmJdJiYobltqLmJdPXIsZ25lKEMsaiksUjgoeEUoQyxqKSkpKX1mdW5jdGlvbiBSbGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTTtmb3Iocz0hMCxoPW5ldyBTKHQuYik7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoSihoKSwyOSksaz1DcyxDPW51bGwsdj1uZXcgUyhvLmEpO3YuYTx2LmMuYy5sZW5ndGg7KWlmKGQ9dShKKHYpLDEwKSxNPVh0KGUucFtkLnBdKStYdChlLmRbZC5wXSktZC5kLmQscj1YdChlLnBbZC5wXSkrWHQoZS5kW2QucF0pK2Quby5iK2QuZC5hLE0+ayYmcj5rKUM9ZCxrPVh0KGUucFtkLnBdKStYdChlLmRbZC5wXSkrZC5vLmIrZC5kLmE7ZWxzZXtzPSExLG4ubiYmSmIobiwiYmsgbm9kZSBwbGFjZW1lbnQgYnJlYWtzIG9uICIrZCsiIHdoaWNoIHNob3VsZCBoYXZlIGJlZW4gYWZ0ZXIgIitDKTticmVha31pZighcylicmVha31yZXR1cm4gbi5uJiZKYihuLGUrIiBpcyBmZWFzaWJsZTogIitzKSxzfWZ1bmN0aW9uIEt5bih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQztmb3IoZD0tMSxDPW5ldyBTKHQpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDExMiksay5nPWQtLSxzPUFyKE0kKGgkKFJpKG5ldyBUbihudWxsLG5ldyBfbihrLmYsMTYpKSxuZXcgJFEpLG5ldyB6USkpLmQpLG89QXIoTSQoaCQoUmkobmV3IFRuKG51bGwsbmV3IF9uKGsuaywxNikpLG5ldyBxUSksbmV3IHJ4KSkuZCksaD1zLHY9byxyfHwoaD1BcihNJChoJChuZXcgVG4obnVsbCxuZXcgX24oay5mLDE2KSksbmV3IEhRKSkuZCksdj1BcihNJChoJChuZXcgVG4obnVsbCxuZXcgX24oay5rLDE2KSksbmV3IFZRKSkuZCkpLGsuZD1oLGsuYT1zLGsuaT12LGsuYj1vLHY9PTA/ZnMobixrLG4uYy5iLG4uYyk6aD09MCYmZnMoZSxrLGUuYy5iLGUuYyl9ZnVuY3Rpb24gWHluKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDO2lmKG4uZC5pIT1lLmkpe2ZvcihzPW5ldyBZMCh0KSxEMChzLChWbigpLHRhKSksSnQocywoYWUoKSxfaSksbiksSnQocywoVGUoKSxjcyksKHVhKCksR2MpKSxyLmNbci5jLmxlbmd0aF09cyxoPW5ldyBNYyxVbyhoLHMpLEJzKGgsKHZlKCksQm4pKSxkPW5ldyBNYyxVbyhkLHMpLEJzKGQsSG4pLEM9bi5kLG9hKG4saCksbz1uZXcgVncsTW8obyxuKSxKdChvLFNvLG51bGwpLE9hKG8sZCksb2EobyxDKSxrPW5ldyBkYShuLmIsMCk7ay5iPGsuZC5nYygpOyl2PShabihrLmI8ay5kLmdjKCkpLHUoay5kLlhiKGsuYz1rLmIrKyksNzApKSxWdChRKHYsT2QpKT09PVZ0KChNMSgpLFp5KSkmJihKdCh2LEI2LG4pLENsKGspLGxlKG8uYix2KSk7d2NlKHMsaCxkKX19ZnVuY3Rpb24gUXluKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDO2lmKG4uYy5pIT1lLmkpZm9yKHM9bmV3IFkwKHQpLEQwKHMsKFZuKCksdGEpKSxKdChzLChhZSgpLF9pKSxuKSxKdChzLChUZSgpLGNzKSwodWEoKSxHYykpLHIuY1tyLmMubGVuZ3RoXT1zLGg9bmV3IE1jLFVvKGgscyksQnMoaCwodmUoKSxCbikpLGQ9bmV3IE1jLFVvKGQscyksQnMoZCxIbiksb2EobixoKSxvPW5ldyBWdyxNbyhvLG4pLEp0KG8sU28sbnVsbCksT2EobyxkKSxvYShvLGUpLHdjZShzLGgsZCksaz1uZXcgZGEobi5iLDApO2suYjxrLmQuZ2MoKTspdj0oWm4oay5iPGsuZC5nYygpKSx1KGsuZC5YYihrLmM9ay5iKyspLDcwKSksQz11KFEodixPZCksMjcyKSxDPT0oTTEoKSxaeSkmJihVcyh2LEI2KXx8SnQodixCNixuKSxDbChrKSxsZShvLmIsdikpfWZ1bmN0aW9uIFp5bih0LGUsbixyLHMpe3ZhciBvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3Q7Zm9yKGo9bmV3IGhlLGd0PVAkKHIpLHR0PWUqdC5hLE09MCxHPTAsbz1uZXcgSHMsaD1uZXcgSHMsZD1uZXcgaGUsTXQ9MCxTdD0wLEg9MCxLPTAsaz0wLEM9MDtndC5hLmdjKCkhPTA7KXY9bmhuKGd0LHMsaCksdiYmKGd0LmEuQmModikhPW51bGwsZC5jW2QuYy5sZW5ndGhdPXYsby5hLnpjKHYsbyksRz10LmZbdi5wXSxNdCs9dC5lW3YucF0tRyp0LmIsTT10LmNbdi5wXSxTdCs9TSp0LmIsQys9Ryp0LmIsSys9dC5lW3YucF0pLCghdnx8Z3QuYS5nYygpPT0wfHxNdD49dHQmJnQuZVt2LnBdPkcqdC5ifHxTdD49bip0dCkmJihqLmNbai5jLmxlbmd0aF09ZCxkPW5ldyBoZSxVYShoLG8pLG8uYS4kYigpLGstPUMsSD1iLk1hdGgubWF4KEgsayp0LmIrSyksays9U3QsTXQ9U3QsU3Q9MCxDPTAsSz0wKTtyZXR1cm4gbmV3IGZhKEgsail9ZnVuY3Rpb24gSnluKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixIO2ZvcihuPShrPW5ldyB2MSh0LmMuYikuYS52YygpLktjKCksbmV3IG0xKGspKTtuLmEuT2IoKTspZT0oZD11KG4uYS5QYigpLDQyKSx1KGQuZGQoKSwxNDkpKSxzPWUuYSxzPT1udWxsJiYocz0iIikscj1DWmUodC5jLHMpLCFyJiZzLmxlbmd0aD09MCYmKHI9X2xuKHQpKSxyJiYhYXkoci5jLGUsITEpJiZyaShyLmMsZSk7Zm9yKGg9ZWkodC5hLDApO2guYiE9aC5kLmM7KW89dSh0aShoKSw0NzgpLEM9SHJ0KHQuYyxvLmEpLEg9SHJ0KHQuYyxvLmIpLEMmJkgmJnJpKEMuYyxuZXcgZmEoSCxvLmMpKTtmb3IoQWgodC5hKSxqPWVpKHQuYiwwKTtqLmIhPWouZC5jOylNPXUodGkoaiksNDc4KSxlPVRaZSh0LmMsTS5hKSx2PUhydCh0LmMsTS5iKSxlJiZ2JiZnWGUoZSx2LE0uYyk7QWgodC5iKX1mdW5jdGlvbiB0M24odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEg7bz1uZXcgUWsodCksaD1uZXcgbmFlLHM9KGREKGguZyksZEQoaC5qKSxYdShoLmIpLGREKGguZCksZEQoaC5pKSxYdShoLmspLFh1KGguYyksWHUoaC5lKSxIPWpvZShoLG8sbnVsbCksQWNlKGgsbyksSCksZSYmKGs9bmV3IFFrKGUpLGQ9bDNuKGspLHo0dChzLGx0KGN0KENTdCwxKSxEZSw1MjcsMCxbZF0pKSksaj0hMSxNPSExLG4mJihrPW5ldyBRayhuKSxJSCBpbiBrLmEmJihqPUIwKGssSUgpLmdlKCkuYSksUWRlIGluIGsuYSYmKE09QjAoayxRZGUpLmdlKCkuYSkpLEM9eUh0KEtlZShuZXcgcjgsaiksTSksV2duKG5ldyBDWixzLEMpLElIIGluIG8uYSYmWWYobyxJSCxudWxsKSwoanx8TSkmJih2PW5ldyBfeCxJbGUoQyx2LGosTSksWWYobyxJSCx2KSkscj1uZXcgU3p0KGgpLHp1bihuZXcgbDJ0KHMpLHIpfWZ1bmN0aW9uIGUzbih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNO2ZvcihoPW5ldyBvYWUsaz1sdChjdChDciwxKSxYciwyNSwxNSxbMF0pLHM9LTEsbz0wLHI9MCx2PTA7djx0LmIuYy5sZW5ndGg7Kyt2KWlmKEM9dShOZSh0LmIsdiksNDM0KSxDLmI+MCl7aWYoczwwJiZDLmEmJihzPXYsbz1rWzBdLHI9MCkscz49MCl7aWYoZD1DLmIsdj09cyYmKGQtPXIrKyxkPT0wKSlyZXR1cm4gMDtpZighamhlKGUsayxDLGQsaCkpe3Y9cy0xLGtbMF09bztjb250aW51ZX19ZWxzZSBpZihzPS0xLCFqaGUoZSxrLEMsMCxoKSlyZXR1cm4gMH1lbHNle2lmKHM9LTEsd2EoQy5jLDApPT0zMil7aWYoTT1rWzBdLGFlZShlLGspLGtbMF0+TSljb250aW51ZX1lbHNlIGlmKEZybihlLEMuYyxrWzBdKSl7a1swXSs9Qy5jLmxlbmd0aDtjb250aW51ZX1yZXR1cm4gMH1yZXR1cm4gRjVuKGgsbik/a1swXTowfWZ1bmN0aW9uIENfKHQpe3ZhciBlLG4scixzLG8saCxkLHY7aWYoIXQuZil7aWYodj1uZXcgTTAsZD1uZXcgTTAsZT11QSxoPWUuYS56Yyh0LGUpLGg9PW51bGwpe2ZvcihvPW5ldyBucihBbyh0KSk7by5lIT1vLmkuZ2MoKTspcz11KGRyKG8pLDI2KSxpcyh2LENfKHMpKTtlLmEuQmModCkhPW51bGwsZS5hLmdjKCk9PTB9Zm9yKHI9KCF0LnMmJih0LnM9bmV3IGZlKE11LHQsMjEsMTcpKSxuZXcgbnIodC5zKSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDE3MCksX3Qobiw5OSkmJkRyKGQsdShuLDE4KSk7aXkoZCksdC5yPW5ldyBaWXQodCwodShBdChXdCgoSHAoKSxMbikubyksNiksMTgpLGQuaSksZC5nKSxpcyh2LHQuciksaXkodiksdC5mPW5ldyBWMygodShBdChXdChMbi5vKSw1KSwxOCksdi5pKSx2LmcpLHNsKHQpLmImPS0zfXJldHVybiB0LmZ9ZnVuY3Rpb24gbjNuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixILEc7Zm9yKGg9dC5vLHI9TnQoQ3IsWHIsMjUsaCwxNSwxKSxzPU50KENyLFhyLDI1LGgsMTUsMSksbj10LnAsZT1OdChDcixYciwyNSxuLDE1LDEpLG89TnQoQ3IsWHIsMjUsbiwxNSwxKSxrPTA7azxoO2srKyl7Zm9yKE09MDtNPG4mJiFmNCh0LGssTSk7KSsrTTtyW2tdPU19Zm9yKEM9MDtDPGg7QysrKXtmb3IoTT1uLTE7TT49MCYmIWY0KHQsQyxNKTspLS1NO3NbQ109TX1mb3IoSD0wO0g8bjtIKyspe2ZvcihkPTA7ZDxoJiYhZjQodCxkLEgpOykrK2Q7ZVtIXT1kfWZvcihHPTA7RzxuO0crKyl7Zm9yKGQ9aC0xO2Q+PTAmJiFmNCh0LGQsRyk7KS0tZDtvW0ddPWR9Zm9yKHY9MDt2PGg7disrKWZvcihqPTA7ajxuO2orKyl2PG9bal0mJnY+ZVtqXSYmajxzW3ZdJiZqPnJbdl0mJlNxKHQsdixqLCExLCEwKX1mdW5jdGlvbiBkeHQodCl7dmFyIGUsbixyLHMsbyxoLGQsdjtuPWplKFJlKFEodCwoSmYoKSxnYmUpKSkpLG89dC5hLmMuZCxkPXQuYS5kLmQsbj8oaD1mZChpYShuZXcgJGUoZC5hLGQuYiksbyksLjUpLHY9ZmQobmModC5lKSwuNSksZT1pYShMaShuZXcgJGUoby5hLG8uYiksaCksdiksSDJ0KHQuZCxlKSk6KHM9WHQoeWUoUSh0LmEsa2JlKSkpLHI9dC5kLG8uYT49ZC5hP28uYj49ZC5iPyhyLmE9ZC5hKyhvLmEtZC5hKS8yK3Msci5iPWQuYisoby5iLWQuYikvMi1zLXQuZS5iKTooci5hPWQuYSsoby5hLWQuYSkvMitzLHIuYj1vLmIrKGQuYi1vLmIpLzIrcyk6by5iPj1kLmI/KHIuYT1vLmErKGQuYS1vLmEpLzIrcyxyLmI9ZC5iKyhvLmItZC5iKS8yK3MpOihyLmE9by5hKyhkLmEtby5hKS8yK3Msci5iPW8uYisoZC5iLW8uYikvMi1zLXQuZS5iKSl9ZnVuY3Rpb24gJGModCxlKXt2YXIgbixyLHMsbyxoLGQsdjtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKG89dC5sZW5ndGgsbz09MClyZXR1cm4iIjtmb3Iodj1OdCh4aCx5ZCwyNSxvLDE1LDEpLExtdCgwLG8sdC5sZW5ndGgpLExtdCgwLG8sdi5sZW5ndGgpLGlYdCh0LDAsbyx2LDApLG49bnVsbCxkPWUscz0wLGg9MDtzPG87cysrKXI9dltzXSxzZmUoKSxyPD0zMiYmd3Rbcl0mMj9kPyghbiYmKG49bmV3IF9oKHQpKSxMcm4obixzLWgrKykpOihkPWUsciE9MzImJighbiYmKG49bmV3IF9oKHQpKSxYbm4obixzLWgscy1oKzEsU3RyaW5nLmZyb21DaGFyQ29kZSgzMikpKSk6ZD0hMTtyZXR1cm4gZD9uPyhvPW4uYS5sZW5ndGgsbz4wP1BsKG4uYSwwLG8tMSk6IiIpOnQuc3Vic3RyKDAsby0xKTpuP24uYTp0fWZ1bmN0aW9uIGpsZSh0KXtNdyh0LG5ldyBrMihfdyhFdyhDdyhUdyhuZXcga2csQTIpLCJFTEsgRGlzQ28iKSwiTGF5b3V0ZXIgZm9yIGFycmFuZ2luZyB1bmNvbm5lY3RlZCBzdWJncmFwaHMuIFRoZSBzdWJncmFwaHMgdGhlbXNlbHZlcyBhcmUsIGJ5IGRlZmF1bHQsIG5vdCBsYWlkIG91dC4iKSxuZXcgeWcpKSkseGUodCxBMixqb3QsSWUocDd0KSkseGUodCxBMiwkb3QsSWUoUXV0KSkseGUodCxBMixFNixJZShKcGUpKSx4ZSh0LEEyLHh2LEllKGc3dCkpLHhlKHQsQTIsWnh0LEllKHJiZSkpLHhlKHQsQTIsSnh0LEllKG5iZSkpLHhlKHQsQTIsUXh0LEllKGliZSkpLHhlKHQsQTIsdDZ0LEllKGViZSkpLHhlKHQsQTIsbzZ0LEllKHRiZSkpLHhlKHQsQTIsYzZ0LEllKFh1dCkpLHhlKHQsQTIsdTZ0LEllKGQ3dCkpLHhlKHQsQTIsbDZ0LEllKGZWKSl9ZnVuY3Rpb24gZ3h0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0sajtpZihvPW5ldyBZMCh0KSxEMChvLChWbigpLEhjKSksSnQobywoVGUoKSxjcyksKHVhKCksR2MpKSxzPTAsZSl7Zm9yKGg9bmV3IE1jLEp0KGgsKGFlKCksX2kpLGUpLEp0KG8sX2ksZS5pKSxCcyhoLCh2ZSgpLEJuKSksVW8oaCxvKSxqPXdkKGUuZSksaz1qLEM9MCxNPWsubGVuZ3RoO0M8TTsrK0Mpdj1rW0NdLG9hKHYsaCk7SnQoZSxKdSxvKSwrK3N9aWYobil7Zm9yKGQ9bmV3IE1jLEp0KG8sKGFlKCksX2kpLG4uaSksSnQoZCxfaSxuKSxCcyhkLCh2ZSgpLEhuKSksVW8oZCxvKSxqPXdkKG4uZyksaz1qLEM9MCxNPWsubGVuZ3RoO0M8TTsrK0Mpdj1rW0NdLE9hKHYsZCk7SnQobixKdSxvKSwrK3N9cmV0dXJuIEp0KG8sKGFlKCksSlYpLHBlKHMpKSxyLmNbci5jLmxlbmd0aF09byxvfWZ1bmN0aW9uIERxKCl7RHE9WixZQXQ9bHQoY3QoeGgsMSkseWQsMjUsMTUsWzQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDY1LDY2LDY3LDY4LDY5LDcwXSksWjRlPW5ldyBSZWdFeHAoYFsgCQpcclxmXStgKTt0cnl7YUE9bHQoY3QoeDZuLDEpLERlLDIwMTUsMCxbbmV3IGZNKChnMnQoKSx6eigieXl5eS1NTS1kZCdUJ0hIOm1tOnNzJy4nU1NTWiIsVU0oKFNSKCksU1IoKSxjUykpKSkpLG5ldyBmTSh6eigieXl5eS1NTS1kZCdUJ0hIOm1tOnNzJy4nU1NTIixVTShjUykpKSxuZXcgZk0oenooInl5eXktTU0tZGQnVCdISDptbTpzcyIsVU0oY1MpKSksbmV3IGZNKHp6KCJ5eXl5LU1NLWRkJ1QnSEg6bW0iLFVNKGNTKSkpLG5ldyBmTSh6eigieXl5eS1NTS1kZCIsVU0oY1MpKSldKX1jYXRjaCh0KXtpZih0PVdpKHQpLCFfdCh0LDc4KSl0aHJvdyBpdCh0KX19ZnVuY3Rpb24gcjNuKHQpe3ZhciBlLG4scixzO2lmKHI9SGF0KCghdC5jJiYodC5jPVZEKHQuZikpLHQuYyksMCksdC5lPT0wfHx0LmE9PTAmJnQuZiE9LTEmJnQuZTwwKXJldHVybiByO2lmKGU9Sm10KHQpPDA/MTowLG49dC5lLHM9KHIubGVuZ3RoKzErYi5NYXRoLmFicyhwcyh0LmUpKSxuZXcgSW0pLGU9PTEmJihzLmErPSItIiksdC5lPjApaWYobi09ci5sZW5ndGgtZSxuPj0wKXtmb3Iocy5hKz0iMC4iO24+TjIubGVuZ3RoO24tPU4yLmxlbmd0aCl3S3QocyxOMik7Sld0KHMsTjIscHMobikpLEdyKHMsci5zdWJzdHIoZSkpfWVsc2Ugbj1lLW4sR3IocyxQbChyLGUscHMobikpKSxzLmErPSIuIixHcihzLFJNKHIscHMobikpKTtlbHNle2ZvcihHcihzLHIuc3Vic3RyKGUpKTtuPC1OMi5sZW5ndGg7bis9TjIubGVuZ3RoKXdLdChzLE4yKTtKV3QocyxOMixwcygtbikpfXJldHVybiBzLmF9ZnVuY3Rpb24gcHh0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0sajtyZXR1cm4gdj1pYShuZXcgJGUobi5hLG4uYiksdCksaz12LmEqZS5iLXYuYiplLmEsQz1lLmEqci5iLWUuYipyLmEsTT0odi5hKnIuYi12LmIqci5hKS9DLGo9ay9DLEM9PTA/az09MD8ocz1MaShuZXcgJGUobi5hLG4uYiksZmQobmV3ICRlKHIuYSxyLmIpLC41KSksbz1XcCh0LHMpLGg9V3AoTGkobmV3ICRlKHQuYSx0LmIpLGUpLHMpLGQ9Yi5NYXRoLnNxcnQoci5hKnIuYStyLmIqci5iKSouNSxvPGgmJm88PWQ/bmV3ICRlKHQuYSx0LmIpOmg8PWQ/TGkobmV3ICRlKHQuYSx0LmIpLGUpOm51bGwpOm51bGw6TT49MCYmTTw9MSYmaj49MCYmajw9MT9MaShuZXcgJGUodC5hLHQuYiksZmQobmV3ICRlKGUuYSxlLmIpLE0pKTpudWxsfWZ1bmN0aW9uIGkzbih0LGUsbil7dmFyIHIscyxvLGgsZDtpZihyPXUoUSh0LChUZSgpLHRodCkpLDIxKSxuLmE+ZS5hJiYoci5IYygoaHkoKSxXTykpP3QuYy5hKz0obi5hLWUuYSkvMjpyLkhjKFlPKSYmKHQuYy5hKz1uLmEtZS5hKSksbi5iPmUuYiYmKHIuSGMoKGh5KCksWE8pKT90LmMuYis9KG4uYi1lLmIpLzI6ci5IYyhLTykmJih0LmMuYis9bi5iLWUuYikpLHUoUSh0LChhZSgpLFZjKSksMjEpLkhjKChvbygpLHZoKSkmJihuLmE+ZS5hfHxuLmI+ZS5iKSlmb3IoZD1uZXcgUyh0LmEpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDEwKSxoLms9PShWbigpLGtzKSYmKHM9dShRKGgsb2MpLDYxKSxzPT0odmUoKSxIbik/aC5uLmErPW4uYS1lLmE6cz09bXImJihoLm4uYis9bi5iLWUuYikpO289dC5kLHQuZi5hPW4uYS1vLmItby5jLHQuZi5iPW4uYi1vLmQtby5hfWZ1bmN0aW9uIHMzbih0LGUsbil7dmFyIHIscyxvLGgsZDtpZihyPXUoUSh0LChUZSgpLHRodCkpLDIxKSxuLmE+ZS5hJiYoci5IYygoaHkoKSxXTykpP3QuYy5hKz0obi5hLWUuYSkvMjpyLkhjKFlPKSYmKHQuYy5hKz1uLmEtZS5hKSksbi5iPmUuYiYmKHIuSGMoKGh5KCksWE8pKT90LmMuYis9KG4uYi1lLmIpLzI6ci5IYyhLTykmJih0LmMuYis9bi5iLWUuYikpLHUoUSh0LChhZSgpLFZjKSksMjEpLkhjKChvbygpLHZoKSkmJihuLmE+ZS5hfHxuLmI+ZS5iKSlmb3IoaD1uZXcgUyh0LmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDEwKSxvLms9PShWbigpLGtzKSYmKHM9dShRKG8sb2MpLDYxKSxzPT0odmUoKSxIbik/by5uLmErPW4uYS1lLmE6cz09bXImJihvLm4uYis9bi5iLWUuYikpO2Q9dC5kLHQuZi5hPW4uYS1kLmItZC5jLHQuZi5iPW4uYi1kLmQtZC5hfWZ1bmN0aW9uIGEzbih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKGU9aWNlKHQpLEM9KGQ9bmV3IFNtKGUpLmEudmMoKS5LYygpLG5ldyBjTShkKSk7Qy5hLk9iKCk7KXtmb3Ioaz0ocz11KEMuYS5QYigpLDQyKSx1KHMuY2QoKSwxMCkpLE09MCxqPTAsTT1rLmQuZCxqPWsuby5iK2suZC5hLHQuZFtrLnBdPTAsbj1rOyhvPXQuYVtuLnBdKSE9azspcj12Zm4obixvKSx2PTAsdC5jPT0oYmQoKSxlcCk/dj1yLmQubi5iK3IuZC5hLmItci5jLm4uYi1yLmMuYS5iOnY9ci5jLm4uYityLmMuYS5iLXIuZC5uLmItci5kLmEuYixoPVh0KHQuZFtuLnBdKSt2LHQuZFtvLnBdPWgsTT1iLk1hdGgubWF4KE0sby5kLmQtaCksaj1iLk1hdGgubWF4KGosaCtvLm8uYitvLmQuYSksbj1vO249aztkbyB0LmRbbi5wXT1YdCh0LmRbbi5wXSkrTSxuPXQuYVtuLnBdO3doaWxlKG4hPWspO3QuYltrLnBdPU0ran19ZnVuY3Rpb24gU2F0KHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0sajtmb3IodC5iPSExLE09YXMsdj1DcyxqPWFzLGs9Q3Mscj10LmUuYS5lYygpLktjKCk7ci5PYigpOylmb3Iobj11KHIuUGIoKSwyNjYpLHM9bi5hLE09Yi5NYXRoLm1pbihNLHMuYyksdj1iLk1hdGgubWF4KHYscy5jK3MuYiksaj1iLk1hdGgubWluKGoscy5kKSxrPWIuTWF0aC5tYXgoayxzLmQrcy5hKSxoPW5ldyBTKG4uYyk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMzk1KSxlPW8uYSxlLmE/KEM9cy5kK28uYi5iLGQ9QytvLmMsaj1iLk1hdGgubWluKGosQyksaz1iLk1hdGgubWF4KGssZCkpOihDPXMuYytvLmIuYSxkPUMrby5jLE09Yi5NYXRoLm1pbihNLEMpLHY9Yi5NYXRoLm1heCh2LGQpKTt0LmE9bmV3ICRlKHYtTSxrLWopLHQuYz1uZXcgJGUoTSt0LmQuYSxqK3QuZC5iKX1mdW5jdGlvbiBvM24odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTTtmb3IoTT1uZXcgaGUsQz1uZXcgWnZ0KDAsbiksbz0wLGF6KEMsbmV3IElpdCgwLDAsQyxuKSkscz0wLGs9bmV3IG5yKHQpO2suZSE9ay5pLmdjKCk7KXY9dShkcihrKSwzMykscj11KE5lKEMuYSxDLmEuYy5sZW5ndGgtMSksMTg3KSxkPXMrdi5nKyh1KE5lKEMuYSwwKSwxODcpLmIuYy5sZW5ndGg9PTA/MDpuKSxkPmUmJihzPTAsbys9Qy5iK24sTS5jW00uYy5sZW5ndGhdPUMsQz1uZXcgWnZ0KG8sbikscj1uZXcgSWl0KDAsQy5mLEMsbiksYXooQyxyKSxzPTApLHIuYi5jLmxlbmd0aD09MHx8di5mPj1yLm8mJnYuZjw9ci5mfHxyLmEqLjU8PXYuZiYmci5hKjEuNT49di5mP2gzdChyLHYpOihoPW5ldyBJaXQoci5zK3IucituLEMuZixDLG4pLGF6KEMsaCksaDN0KGgsdikpLHM9di5pK3YuZztyZXR1cm4gTS5jW00uYy5sZW5ndGhdPUMsTX1mdW5jdGlvbiBUNCh0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2lmKCF0LmEpe2lmKHQubz1udWxsLHY9bmV3IFd6dCh0KSxlPW5ldyBFcCxuPXVBLGQ9bi5hLnpjKHQsbiksZD09bnVsbCl7Zm9yKGg9bmV3IG5yKEFvKHQpKTtoLmUhPWguaS5nYygpOylvPXUoZHIoaCksMjYpLGlzKHYsVDQobykpO24uYS5CYyh0KSE9bnVsbCxuLmEuZ2MoKT09MH1mb3Iocz0oIXQucyYmKHQucz1uZXcgZmUoTXUsdCwyMSwxNykpLG5ldyBucih0LnMpKTtzLmUhPXMuaS5nYygpOylyPXUoZHIocyksMTcwKSxfdChyLDMyMikmJkRyKGUsdShyLDM0KSk7aXkoZSksdC5rPW5ldyBRWXQodCwodShBdChXdCgoSHAoKSxMbikubyksNyksMTgpLGUuaSksZS5nKSxpcyh2LHQuayksaXkodiksdC5hPW5ldyBWMygodShBdChXdChMbi5vKSw0KSwxOCksdi5pKSx2LmcpLHNsKHQpLmImPS0yfXJldHVybiB0LmF9ZnVuY3Rpb24gYzNuKHQsZSxuLHIscyxvLGgpe3ZhciBkLHYsayxDLE0sajtyZXR1cm4gTT0hMSx2PVdjZShuLnEsZS5mK2UuYi1uLnEuZiksaj1zLShuLnEuZSt2LWgpLGo8ci5nfHwoaz1vPT10LmMubGVuZ3RoLTEmJmo+PShBbihvLHQuYy5sZW5ndGgpLHUodC5jW29dLDIwMCkpLmUsQz0oZD1fXyhyLGosITEpLGQuYSksQz5lLmImJiFrKT8hMTooKGt8fEM8PWUuYikmJihrJiZDPmUuYj8obi5kPUMsdkQobixRYWUobixDKSkpOihiYWUobi5xLHYpLG4uYz0hMCksdkQocixzLShuLnMrbi5yKSksdEkocixuLnEuZStuLnEuZCxlLmYpLGF6KGUsciksdC5jLmxlbmd0aD5vJiYoc0koKEFuKG8sdC5jLmxlbmd0aCksdSh0LmNbb10sMjAwKSksciksKEFuKG8sdC5jLmxlbmd0aCksdSh0LmNbb10sMjAwKSkuYS5jLmxlbmd0aD09MCYmRmcodCxvKSksTT0hMCksTSl9ZnVuY3Rpb24gYnh0KHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDO2lmKEM9b3UodC5lLlRnKCksZSkscz0wLG89dSh0LmcsMTE5KSx2PW51bGwsdG8oKSx1KGUsNjYpLk9qKCkpe2ZvcihkPTA7ZDx0Lmk7KytkKWlmKGg9b1tkXSxDLnJsKGguYWsoKSkpe2lmKHlpKGgsbikpe3Y9aDticmVha30rK3N9fWVsc2UgaWYobiE9bnVsbCl7Zm9yKGQ9MDtkPHQuaTsrK2QpaWYoaD1vW2RdLEMucmwoaC5haygpKSl7aWYoeWkobixoLmRkKCkpKXt2PWg7YnJlYWt9KytzfX1lbHNlIGZvcihkPTA7ZDx0Lmk7KytkKWlmKGg9b1tkXSxDLnJsKGguYWsoKSkpe2lmKGguZGQoKT09bnVsbCl7dj1oO2JyZWFrfSsrc31yZXR1cm4gdiYmKHhsKHQuZSkmJihrPWUuJGooKT9uZXcganJ0KHQuZSw0LGUsbixudWxsLHMsITApOkdwKHQsZS5LaigpPzI6MSxlLG4sZS56aigpLC0xLCEwKSxyP3IuRWkoayk6cj1rKSxyPUVJKHQsdixyKSkscn1mdW5jdGlvbiBBYXQodCxlLG4scixzLG8saCl7dmFyIGQsdixrLEMsTSxqLEgsRyxLO3N3aXRjaChHPTAsSz0wLHY9cy5jLGQ9cy5iLEM9bi5mLEg9bi5nLGUuZyl7Y2FzZSAwOkc9ci5pK3IuZytoLHQuYz9LPUIwbihHLG8scixoKTpLPXIuaixqPWIuTWF0aC5tYXgodixHK0gpLGs9Yi5NYXRoLm1heChkLEsrQyk7YnJlYWs7Y2FzZSAxOks9ci5qK3IuZitoLHQuYz9HPU4wbihLLG8scixoKTpHPXIuaSxqPWIuTWF0aC5tYXgodixHK0gpLGs9Yi5NYXRoLm1heChkLEsrQyk7YnJlYWs7Y2FzZSAyOkc9ditoLEs9MCxqPXYraCtILGs9Yi5NYXRoLm1heChkLEMpO2JyZWFrO2Nhc2UgMzpHPTAsSz1kK2gsaj1iLk1hdGgubWF4KHYsSCksaz1kK2grQzticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyBGbigiSWxsZWdhbFBsYWNlbWVudE9wdGlvbi4iKSl9cmV0dXJuIE09bmV3IGIzdCh0LmEsaixrLGUsRyxLKSxNfWZ1bmN0aW9uIHUzbih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGo7aWYoZD10LmQsTT11KFEodCwoYWUoKSx6NikpLDE1KSxlPXUoUSh0LE42KSwxNSksISghTSYmIWUpKXtpZihvPVh0KHllKG95KHQsKFRlKCksbGh0KSkpKSxoPVh0KHllKG95KHQseTl0KSkpLGo9MCxNKXtmb3Ioaz0wLHM9TS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMCksaz1iLk1hdGgubWF4KGssci5vLmIpLGorPXIuby5hO2orPW8qKE0uZ2MoKS0xKSxkLmQrPWsraH1pZihuPTAsZSl7Zm9yKGs9MCxzPWUuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMTApLGs9Yi5NYXRoLm1heChrLHIuby5iKSxuKz1yLm8uYTtuKz1vKihlLmdjKCktMSksZC5hKz1rK2h9dj1iLk1hdGgubWF4KGosbiksdj50Lm8uYSYmKEM9KHYtdC5vLmEpLzIsZC5iPWIuTWF0aC5tYXgoZC5iLEMpLGQuYz1iLk1hdGgubWF4KGQuYyxDKSl9fWZ1bmN0aW9uIGwzbih0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2ZvcihvPW5ldyB2WnQsWVhlKG8sKGk2KCksRzNlKSkscj0ocz15aXQodCxOdChBZSxlZSwyLDAsNiwxKSksbmV3IG14KG5ldyB5bChuZXcgRWV0KHQscykuYikpKTtyLmI8ci5kLmdjKCk7KW49KFpuKHIuYjxyLmQuZ2MoKSksQnIoci5kLlhiKHIuYz1yLmIrKykpKSxoPUV4dChBYixuKSxoJiYoZT1CMCh0LG4pLGUuamUoKT9kPWUuamUoKS5hOmUuZ2UoKT9kPSIiK2UuZ2UoKS5hOmUuaGUoKT9kPSIiK2UuaGUoKS5hOmQ9ZS5JYigpLHY9eHh0KGgsZCksdiE9bnVsbCYmKChOdShoLmosKFFmKCksZWEpKXx8TnUoaC5qLHFuKSkmJnpEKHVpdChvLHJzKSxoLHYpLE51KGguaixQZCkmJnpEKHVpdChvLFlzKSxoLHYpLE51KGguaixWMikmJnpEKHVpdChvLGdsKSxoLHYpLE51KGguaixycCkmJnpEKHVpdChvLHFvKSxoLHYpKSk7cmV0dXJuIG99ZnVuY3Rpb24gSXEodCxlLG4scil7dmFyIHMsbyxoLGQsdixrO2lmKHY9b3UodC5lLlRnKCksZSksbz11KHQuZywxMTkpLFgwKHQuZSxlKSl7Zm9yKHM9MCxkPTA7ZDx0Lmk7KytkKWlmKGg9b1tkXSx2LnJsKGguYWsoKSkpe2lmKHM9PW4pcmV0dXJuIHRvKCksdShlLDY2KS5PaigpP2g6KGs9aC5kZCgpLGshPW51bGwmJnImJl90KGUsOTkpJiZ1KGUsMTgpLkJiJkthJiYoaz1iXyh0LGUsZCxzLGspKSxrKTsrK3N9dGhyb3cgaXQobmV3IHlvKEpfK24rRDIrcykpfWVsc2V7Zm9yKHM9MCxkPTA7ZDx0Lmk7KytkKXtpZihoPW9bZF0sdi5ybChoLmFrKCkpKXJldHVybiB0bygpLHUoZSw2NikuT2ooKT9oOihrPWguZGQoKSxrIT1udWxsJiZyJiZfdChlLDk5KSYmdShlLDE4KS5CYiZLYSYmKGs9Yl8odCxlLGQscyxrKSksayk7KytzfXJldHVybiBlLnpqKCl9fWZ1bmN0aW9uIFNJKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO2lmKHM9dSh0LmcsMTE5KSxYMCh0LmUsZSkpcmV0dXJuIHRvKCksdShlLDY2KS5PaigpP25ldyBxaihlLHQpOm5ldyBCTShlLHQpO2ZvcihrPW91KHQuZS5UZygpLGUpLHI9MCxkPTA7ZDx0Lmk7KytkKXtpZihvPXNbZF0saD1vLmFrKCksay5ybChoKSl7aWYodG8oKSx1KGUsNjYpLk9qKCkpcmV0dXJuIG87aWYoaD09KGQ2KCksdGspfHxoPT1KNil7Zm9yKHY9bmV3IE9sKCRvKG8uZGQoKSkpOysrZDx0Lmk7KW89c1tkXSxoPW8uYWsoKSwoaD09dGt8fGg9PUo2KSYmR3IodiwkbyhvLmRkKCkpKTtyZXR1cm4gZ3d0KHUoZS5ZaigpLDE0OCksdi5hKX1lbHNlIHJldHVybiBDPW8uZGQoKSxDIT1udWxsJiZuJiZfdChlLDk5KSYmdShlLDE4KS5CYiZLYSYmKEM9Yl8odCxlLGQscixDKSksQ30rK3J9cmV0dXJuIGUuemooKX1mdW5jdGlvbiBfXyh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKG89MCxoPXQudCxzPTAscj0wLHY9MCxqPTAsTT0wLG4mJih0Lm4uYz1OdChRbixEZSwxLDAsNSwxKSxsZSh0Lm4sbmV3IEUkKHQucyx0LnQsdC5pKSkpLGQ9MCxDPW5ldyBTKHQuYik7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksMzMpLG8ray5nKyhkPjA/dC5pOjApPmUmJnY+MCYmKG89MCxoKz12K3QuaSxzPWIuTWF0aC5tYXgocyxqKSxyKz12K3QuaSx2PTAsaj0wLG4mJigrK00sbGUodC5uLG5ldyBFJCh0LnMsaCx0LmkpKSksZD0wKSxqKz1rLmcrKGQ+MD90Lmk6MCksdj1iLk1hdGgubWF4KHYsay5mKSxuJiZXM3QodShOZSh0Lm4sTSksMjExKSxrKSxvKz1rLmcrKGQ+MD90Lmk6MCksKytkO3JldHVybiBzPWIuTWF0aC5tYXgocyxqKSxyKz12LG4mJih0LnI9cyx0LmQ9cixRM3QodC5qKSksbmV3IGFoKHQucyx0LnQscyxyKX1mdW5jdGlvbiBEYyh0LGUsbixyLHMpe0dkKCk7dmFyIG8saCxkLHYsayxDLE0saixIO2lmKGJ2dCh0LCJzcmMiKSxidnQobiwiZGVzdCIpLGo9b2wodCksdj1vbChuKSxqd3QoKGouaSY0KSE9MCwic3JjVHlwZSBpcyBub3QgYW4gYXJyYXkiKSxqd3QoKHYuaSY0KSE9MCwiZGVzdFR5cGUgaXMgbm90IGFuIGFycmF5IiksTT1qLmMsaD12LmMsand0KE0uaSYxP009PWg6KGguaSYxKT09MCwiQXJyYXkgdHlwZXMgZG9uJ3QgbWF0Y2giKSxIPXQubGVuZ3RoLGs9bi5sZW5ndGgsZTwwfHxyPDB8fHM8MHx8ZStzPkh8fHIrcz5rKXRocm93IGl0KG5ldyBEcHQpO2lmKCEoTS5pJjEpJiZqIT12KWlmKEM9dTIodCksbz11MihuKSxWdCh0KT09PVZ0KG4pJiZlPHIpZm9yKGUrPXMsZD1yK3M7ZC0tID5yOyl0cyhvLGQsQ1stLWVdKTtlbHNlIGZvcihkPXIrcztyPGQ7KXRzKG8scisrLENbZSsrXSk7ZWxzZSBzPjAmJm41dCh0LGUsbixyLHMsITApfWZ1bmN0aW9uIExhdCgpe0xhdD1aLHFnZT1sdChjdChDciwxKSxYciwyNSwxNSxbU2EsMTE2MjI2MTQ2NyxEXywxMjIwNzAzMTI1LDM2Mjc5NzA1NiwxOTc3MzI2NzQzLERfLDM4NzQyMDQ4OSxHcSwyMTQzNTg4ODEsNDI5OTgxNjk2LDgxNTczMDcyMSwxNDc1Nzg5MDU2LDE3MDg1OTM3NSwyNjg0MzU0NTYsNDEwMzM4NjczLDYxMjIyMDAzMiw4OTM4NzE3MzksMTI4ZTcsMTgwMTA4ODU0MSwxMTMzNzk5MDQsMTQ4MDM1ODg5LDE5MTEwMjk3NiwyNDQxNDA2MjUsMzA4OTE1Nzc2LDM4NzQyMDQ4OSw0ODE4OTAzMDQsNTk0ODIzMzIxLDcyOWU2LDg4NzUwMzY4MSxEXywxMjkxNDY3OTY5LDE1NDQ4MDQ0MTYsMTgzODI2NTYyNSw2MDQ2NjE3Nl0pLEhnZT1sdChjdChDciwxKSxYciwyNSwxNSxbLTEsLTEsMzEsMTksMTUsMTMsMTEsMTEsMTAsOSw5LDgsOCw4LDgsNyw3LDcsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNV0pfWZ1bmN0aW9uIGgzbih0KXt2YXIgZSxuLHIscyxvLGgsZCx2O2ZvcihzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxoPW5ldyBTKFd3KHIuYSkpO2guYTxoLmMuYy5sZW5ndGg7KWlmKG89dShKKGgpLDEwKSx4ZWUobykmJihuPXUoUShvLChhZSgpLEl2KSksMzA1KSwhbi5nJiZuLmQpKWZvcihlPW4sdj1uLmQ7djspTHVlKHYuaSx2LmssITEsITApLGtEKGUuYSksa0Qodi5pKSxrRCh2LmspLGtEKHYuYiksb2Eodi5jLGUuYy5kKSxvYShlLmMsbnVsbCksRW8oZS5hLG51bGwpLEVvKHYuaSxudWxsKSxFbyh2LmssbnVsbCksRW8odi5iLG51bGwpLGQ9bmV3IHNtdChlLmksdi5hLGUuZSx2Lmosdi5mKSxkLms9ZS5rLGQubj1lLm4sZC5iPWUuYixkLmM9di5jLGQuZz1lLmcsZC5kPXYuZCxKdChlLmksSXYsZCksSnQodi5hLEl2LGQpLHY9di5kLGU9ZH1mdW5jdGlvbiB5eSh0LGUpe3ZhciBuLHIscyxvLGg7aWYoaD11KGUsMTM2KSx2NCh0KSx2NChoKSxoLmIhPW51bGwpe2lmKHQuYz0hMCx0LmI9PW51bGwpe3QuYj1OdChDcixYciwyNSxoLmIubGVuZ3RoLDE1LDEpLERjKGguYiwwLHQuYiwwLGguYi5sZW5ndGgpO3JldHVybn1mb3Iobz1OdChDcixYciwyNSx0LmIubGVuZ3RoK2guYi5sZW5ndGgsMTUsMSksbj0wLHI9MCxzPTA7bjx0LmIubGVuZ3RofHxyPGguYi5sZW5ndGg7KW4+PXQuYi5sZW5ndGg/KG9bcysrXT1oLmJbcisrXSxvW3MrK109aC5iW3IrK10pOnI+PWguYi5sZW5ndGg/KG9bcysrXT10LmJbbisrXSxvW3MrK109dC5iW24rK10pOmguYltyXTx0LmJbbl18fGguYltyXT09PXQuYltuXSYmaC5iW3IrMV08dC5iW24rMV0/KG9bcysrXT1oLmJbcisrXSxvW3MrK109aC5iW3IrK10pOihvW3MrK109dC5iW24rK10sb1tzKytdPXQuYltuKytdKTt0LmI9b319ZnVuY3Rpb24gZjNuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE07cmV0dXJuIG49amUoUmUoUSh0LChhZSgpLFJ5KSkpKSxkPWplKFJlKFEoZSxSeSkpKSxyPXUoUSh0LHIxKSwxMSksdj11KFEoZSxyMSksMTEpLHM9dShRKHQsJGgpLDExKSxrPXUoUShlLCRoKSwxMSksQz0hIXImJnI9PXYsTT0hIXMmJnM9PWssIW4mJiFkP25ldyBDd3QodShKKG5ldyBTKHQuaikpLDExKS5wPT11KEoobmV3IFMoZS5qKSksMTEpLnAsQyxNKToobz0oIWplKFJlKFEodCxSeSkpKXx8amUoUmUoUSh0LEFPKSkpKSYmKCFqZShSZShRKGUsUnkpKSl8fGplKFJlKFEoZSxBTykpKSksaD0oIWplKFJlKFEodCxSeSkpKXx8IWplKFJlKFEodCxBTykpKSkmJighamUoUmUoUShlLFJ5KSkpfHwhamUoUmUoUShlLEFPKSkpKSxuZXcgQ3d0KEMmJm98fE0mJmgsQyxNKSl9ZnVuY3Rpb24gZDNuKHQpe3ZhciBlLG4scixzLG8saCxkLHY7Zm9yKHI9MCxuPTAsdj1uZXcgWmksZT0wLGQ9bmV3IFModC5uKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwyMTEpLGguYy5jLmxlbmd0aD09MD9mcyh2LGgsdi5jLmIsdi5jKToocj1iLk1hdGgubWF4KHIsaC5kKSxuKz1oLmErKGU+MD90Lmk6MCkpLCsrZTtmb3IoRWhuKHQubix2KSx0LmQ9bix0LnI9cix0Lmc9MCx0LmY9MCx0LmU9MCx0Lm89YXMsdC5wPWFzLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwzMyksdC5wPWIuTWF0aC5taW4odC5wLHMuZyksdC5nPWIuTWF0aC5tYXgodC5nLHMuZyksdC5mPWIuTWF0aC5tYXgodC5mLHMuZiksdC5vPWIuTWF0aC5taW4odC5vLHMuZiksdC5lKz1zLmYrdC5pO3QuYT10LmUvdC5iLmMubGVuZ3RoLXQuaSooKHQuYi5jLmxlbmd0aC0xKS90LmIuYy5sZW5ndGgpLFEzdCh0LmopfWZ1bmN0aW9uICRsZSh0KXt2YXIgZSxuLHIscztyZXR1cm4gdC5EYiY2ND9YaXQodCk6KGU9bmV3IE9sKHc4dCkscj10Lmsscj9HcihHcigoZS5hKz0nICInLGUpLHIpLCciJyk6KCF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSksdC5uLmk+MCYmKHM9KCF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSksdShBdCh0Lm4sMCksMTM3KSkuYSwhc3x8R3IoR3IoKGUuYSs9JyAiJyxlKSxzKSwnIicpKSksbj0oIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSwhKHQuYi5pPD0xJiYoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMuaTw9MSkpKSxuP2UuYSs9IiBbIjplLmErPSIgIixHcihlLF8ydChuZXcgdmV0LG5ldyBucih0LmIpKSksbiYmKGUuYSs9Il0iKSxlLmErPVVvdCxuJiYoZS5hKz0iWyIpLEdyKGUsXzJ0KG5ldyB2ZXQsbmV3IG5yKHQuYykpKSxuJiYoZS5hKz0iXSIpLGUuYSl9ZnVuY3Rpb24gTWF0KHQsZSl7dmFyIG4scixzLG8saCxkLHY7aWYodC5hKXtpZihkPXQuYS5uZSgpLHY9bnVsbCxkIT1udWxsP2UuYSs9IiIrZDooaD10LmEuRGooKSxoIT1udWxsJiYobz1oZChoLEN1KDkxKSksbyE9LTE/KHY9aC5zdWJzdHIobyksZS5hKz0iIitQbChoPT1udWxsP191OihPbihoKSxoKSwwLG8pKTplLmErPSIiK2gpKSx0LmQmJnQuZC5pIT0wKXtmb3Iocz0hMCxlLmErPSI8IixyPW5ldyBucih0LmQpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSw4Nykscz9zPSExOmUuYSs9WWEsTWF0KG4sZSk7ZS5hKz0iPiJ9diE9bnVsbCYmKGUuYSs9IiIrdil9ZWxzZSB0LmU/KGQ9dC5lLnpiLGQhPW51bGwmJihlLmErPSIiK2QpKTooZS5hKz0iPyIsdC5iPyhlLmErPSIgc3VwZXIgIixNYXQodC5iLGUpKTp0LmYmJihlLmErPSIgZXh0ZW5kcyAiLE1hdCh0LmYsZSkpKX1mdW5jdGlvbiBnM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuO2ZvcihLdD10LmMsdWU9ZS5jLG49Um8oS3QuYSx0LDApLHI9Um8odWUuYSxlLDApLFN0PXUob3YodCwoc28oKSx0bCkpLktjKCkuUGIoKSwxMSksUWU9dShvdih0LG51KS5LYygpLlBiKCksMTEpLFJ0PXUob3YoZSx0bCkuS2MoKS5QYigpLDExKSxSbj11KG92KGUsbnUpLktjKCkuUGIoKSwxMSksZ3Q9d2QoU3QuZSksX2U9d2QoUWUuZyksTXQ9d2QoUnQuZSksV2U9d2QoUm4uZyksbHkodCxyLHVlKSxoPU10LEM9MCxHPWgubGVuZ3RoO0M8RzsrK0Mpcz1oW0NdLG9hKHMsU3QpO2ZvcihkPVdlLE09MCxLPWQubGVuZ3RoO008SzsrK00pcz1kW01dLE9hKHMsUWUpO2ZvcihseShlLG4sS3QpLHY9Z3Qsaj0wLHR0PXYubGVuZ3RoO2o8dHQ7KytqKXM9dltqXSxvYShzLFJ0KTtmb3Iobz1fZSxrPTAsSD1vLmxlbmd0aDtrPEg7KytrKXM9b1trXSxPYShzLFJuKX1mdW5jdGlvbiB6bGUodCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEM7aWYobz1QeihyKSxkPWplKFJlKFEociwoVGUoKSx1OXQpKSkpLChkfHxqZShSZShRKHQsbEcpKSkpJiYhRzModShRKHQsY3MpLDk4KSkpcz1hNihvKSx2PWl4dCh0LG4sbj09KHNvKCksbnUpP3M6WUQocykpO2Vsc2Ugc3dpdGNoKHY9bmV3IE1jLFVvKHYsdCksZT8oQz12Lm4sQy5hPWUuYS10Lm4uYSxDLmI9ZS5iLXQubi5iLFphZShDLDAsMCx0Lm8uYSx0Lm8uYiksQnModixobGUodixvKSkpOihzPWE2KG8pLEJzKHYsbj09KHNvKCksbnUpP3M6WUQocykpKSxoPXUoUShyLChhZSgpLFZjKSksMjEpLGs9di5qLG8uZyl7Y2FzZSAyOmNhc2UgMTooaz09KHZlKCksUG4pfHxrPT1tcikmJmguRmMoKG9vKCksVzQpKTticmVhaztjYXNlIDQ6Y2FzZSAzOihrPT0odmUoKSxIbil8fGs9PUJuKSYmaC5GYygob28oKSxXNCkpfXJldHVybiB2fWZ1bmN0aW9uIHd4dCh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztyZXR1cm4gYi5NYXRoLmFicyhlLnMtZS5jKTxFZHx8Yi5NYXRoLmFicyhuLnMtbi5jKTxFZD8wOihyPVpjZSh0LGUuaixuLmUpLHM9WmNlKHQsbi5qLGUuZSksbz1yPT0tMXx8cz09LTEsaD0wLG8/KHI9PS0xJiYobmV3IGkyKChVZigpLG1iKSxuLGUsMSksKytoKSxzPT0tMSYmKG5ldyBpMigoVWYoKSxtYiksZSxuLDEpLCsraCkpOihkPWM0KGUuaixuLnMsbi5jKSxkKz1jNChuLmUsZS5zLGUuYyksdj1jNChuLmosZS5zLGUuYyksdis9YzQoZS5lLG4ucyxuLmMpLGs9cisxNipkLEM9cysxNip2LGs8Qz9uZXcgaTIoKFVmKCksS3kpLGUsbixDLWspOms+Qz9uZXcgaTIoKFVmKCksS3kpLG4sZSxrLUMpOms+MCYmQz4wJiYobmV3IGkyKChVZigpLEt5KSxlLG4sMCksbmV3IGkyKEt5LG4sZSwwKSkpLGgpfWZ1bmN0aW9uIHFsZSh0LGUpe3ZhciBuLHIscyxvLGgsZDtmb3IoaD1uZXcgcDIobmV3IENnKHQuZi5iKS5hKTtoLmI7KXtpZihvPVp3KGgpLHM9dShvLmNkKCksNTk0KSxlPT0xKXtpZihzLmdmKCkhPShhbygpLHJnKSYmcy5nZigpIT1uZyljb250aW51ZX1lbHNlIGlmKHMuZ2YoKSE9KGFvKCksemgpJiZzLmdmKCkhPUNmKWNvbnRpbnVlO3N3aXRjaChyPXUodShvLmRkKCksNDYpLmIsODEpLGQ9dSh1KG8uZGQoKSw0NikuYSwxODkpLG49ZC5jLHMuZ2YoKS5nKXtjYXNlIDI6ci5nLmM9dC5lLmEsci5nLmI9Yi5NYXRoLm1heCgxLHIuZy5iK24pO2JyZWFrO2Nhc2UgMTpyLmcuYz1yLmcuYytuLHIuZy5iPWIuTWF0aC5tYXgoMSxyLmcuYi1uKTticmVhaztjYXNlIDQ6ci5nLmQ9dC5lLmIsci5nLmE9Yi5NYXRoLm1heCgxLHIuZy5hK24pO2JyZWFrO2Nhc2UgMzpyLmcuZD1yLmcuZCtuLHIuZy5hPWIuTWF0aC5tYXgoMSxyLmcuYS1uKX19fWZ1bmN0aW9uIHAzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEs7Zm9yKGQ9TnQoQ3IsWHIsMjUsZS5iLmMubGVuZ3RoLDE1LDEpLGs9TnQoZmx0LG9lLDI2NyxlLmIuYy5sZW5ndGgsMCwxKSx2PU50KGwwLFlnLDEwLGUuYi5jLmxlbmd0aCwwLDEpLE09dC5hLGo9MCxIPU0ubGVuZ3RoO2o8SDsrK2ope2ZvcihDPU1bal0sSz0wLGg9bmV3IFMoQy5lKTtoLmE8aC5jLmMubGVuZ3RoOylzPXUoSihoKSwxMCkscj1vMnQocy5jKSwrK2Rbcl0sRz1YdCh5ZShRKGUsKFRlKCksVGYpKSkpLGRbcl0+MCYmdltyXSYmKEc9VzModC5iLHZbcl0scykpLEs9Yi5NYXRoLm1heChLLHMuYy5jLmIrRyk7Zm9yKG89bmV3IFMoQy5lKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMCkscy5uLmI9SytzLmQuZCxuPXMuYyxuLmMuYj1LK3MuZC5kK3Muby5iK3MuZC5hLGtbUm8obi5iLmIsbiwwKV09cy5rLHZbUm8obi5iLmIsbiwwKV09c319ZnVuY3Rpb24gSGxlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtmb3Iocj1uZXcgYXIobHIoSzAoZSkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSw3OSksX3QoQXQoKCFuLmImJihuLmI9bmV3IENuKGJyLG4sNCw3KSksbi5iKSwwKSwxODYpfHwodj1Ebyh1KEF0KCghbi5jJiYobi5jPW5ldyBDbihicixuLDUsOCkpLG4uYyksMCksODIpKSx3XyhuKXx8KGg9ZS5pK2UuZy8yLGQ9ZS5qK2UuZi8yLEM9di5pK3YuZy8yLE09di5qK3YuZi8yLGo9bmV3IENhLGouYT1DLWgsai5iPU0tZCxvPW5ldyAkZShqLmEsai5iKSxtRShvLGUuZyxlLmYpLGouYS09by5hLGouYi09by5iLGg9Qy1qLmEsZD1NLWouYixrPW5ldyAkZShqLmEsai5iKSxtRShrLHYuZyx2LmYpLGouYS09ay5hLGouYi09ay5iLEM9aCtqLmEsTT1kK2ouYixzPXg0KG4sITAsITApLEc4KHMsaCksVzgocyxkKSxWOChzLEMpLFU4KHMsTSksSGxlKHQsdikpKX1mdW5jdGlvbiBWbGUodCl7TXcodCxuZXcgazIoX3coRXcoQ3coVHcobmV3IGtnLGt2KSwiRUxLIFNQT3JFIENvbXBhY3Rpb24iKSwiU2hyaW5rVHJlZSBpcyBhIGNvbXBhY3Rpb24gYWxnb3JpdGhtIHRoYXQgbWFpbnRhaW5zIHRoZSB0b3BvbG9neSBvZiBhIGxheW91dC4gVGhlIHJlbG9jYXRpb24gb2YgZGlhZ3JhbSBlbGVtZW50cyBpcyBiYXNlZCBvbiBjb250cmFjdGluZyBhIHNwYW5uaW5nIHRyZWUuIiksbmV3ICRMKSkpLHhlKHQsa3YsQmN0LEllKEhHKSkseGUodCxrdixvOHQsSWUoYWZ0KSkseGUodCxrdixjOHQsSWUoc2Z0KSkseGUodCxrdixSY3QsSWUobFN0KSkseGUodCxrdixqY3QsSWUoaWZ0KSkseGUodCxrdix4dix1U3QpLHhlKHQsa3YsQ3ksOCkseGUodCxrdiwkY3QsSWUoRDNlKSkseGUodCxrdix1OHQsSWUob1N0KSkseGUodCxrdixsOHQsSWUoY1N0KSkseGUodCxrdixKSSwoTm4oKSwhMSkpfWZ1bmN0aW9uIGIzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2Zvcih2cihlLCJTaW1wbGUgbm9kZSBwbGFjZW1lbnQiLDEpLE09dShRKHQsKGFlKCksUTQpKSwzMDQpLGQ9MCxvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihyPXUoSihvKSwyOSksaD1yLmMsaC5iPTAsbj1udWxsLGs9bmV3IFMoci5hKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSwxMCksbiYmKGguYis9TTN0KHYsbixNLmMpKSxoLmIrPXYuZC5kK3Yuby5iK3YuZC5hLG49djtkPWIuTWF0aC5tYXgoZCxoLmIpfWZvcihzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxoPXIuYyxDPShkLWguYikvMixuPW51bGwsaz1uZXcgUyhyLmEpO2suYTxrLmMuYy5sZW5ndGg7KXY9dShKKGspLDEwKSxuJiYoQys9TTN0KHYsbixNLmMpKSxDKz12LmQuZCx2Lm4uYj1DLEMrPXYuby5iK3YuZC5hLG49djtvcihlKX1mdW5jdGlvbiB3M24odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTTtpZihyLmdjKCk9PTApcmV0dXJuITE7aWYodj0odG8oKSx1KGUsNjYpLk9qKCkpLGg9dj9yOm5ldyBRdyhyLmdjKCkpLFgwKHQuZSxlKSl7aWYoZS5oaSgpKWZvcihDPXIuS2MoKTtDLk9iKCk7KWs9Qy5QYigpLE1xKHQsZSxrLF90KGUsOTkpJiYodShlLDE4KS5CYiZLYSkhPTApfHwobz1aZChlLGspLGguRmMobykpO2Vsc2UgaWYoIXYpZm9yKEM9ci5LYygpO0MuT2IoKTspaz1DLlBiKCksbz1aZChlLGspLGguRmMobyl9ZWxzZXtmb3IoTT1vdSh0LmUuVGcoKSxlKSxzPXUodC5nLDExOSksZD0wO2Q8dC5pOysrZClpZihvPXNbZF0sTS5ybChvLmFrKCkpKXRocm93IGl0KG5ldyBGbihhTykpO2lmKHIuZ2MoKT4xKXRocm93IGl0KG5ldyBGbihhTykpO3Z8fChvPVpkKGUsci5LYygpLlBiKCkpLGguRmMobykpfXJldHVybiBTeXQodCxXNHQodCxlLG4pLGgpfWZ1bmN0aW9uIHYzbih0LGUpe3ZhciBuLHIscyxvO2ZvcihlY24oZS5iLmopLGxzKHd1KG5ldyBUbihudWxsLG5ldyBfbihlLmQsMTYpKSxuZXcgWFgpLG5ldyBRWCksbz1uZXcgUyhlLmQpO28uYTxvLmMuYy5sZW5ndGg7KXtzd2l0Y2gocz11KEoobyksMTAxKSxzLmUuZyl7Y2FzZSAwOm49dShOZShzLmosMCksMTEzKS5kLmosc1Iocyx1KE53KHQkKHUoQWkocy5rLG4pLDE1KS5PYygpLEg0KSksMTEzKSksaVIocyx1KE53KEpqKHUoQWkocy5rLG4pLDE1KS5PYygpLEg0KSksMTEzKSk7YnJlYWs7Y2FzZSAxOnI9dDR0KHMpLHNSKHMsdShOdyh0JCh1KEFpKHMuayxyWzBdKSwxNSkuT2MoKSxINCkpLDExMykpLGlSKHMsdShOdyhKaih1KEFpKHMuayxyWzFdKSwxNSkuT2MoKSxINCkpLDExMykpO2JyZWFrO2Nhc2UgMjpncG4odCxzKTticmVhaztjYXNlIDM6TXduKHMpO2JyZWFrO2Nhc2UgNDpQd24odCxzKX10Y24ocyl9dC5hPW51bGx9ZnVuY3Rpb24gRGF0KHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDO3JldHVybiByPXQuYS5vPT0oQzEoKSxIMSk/YXM6Q3MsZD1tbGUodCxuZXcgeUd0KGUsbikpLCFkLmEmJmQuYz8ocmkodC5kLGQpLHIpOmQuYT8ocz1kLmEuYyx2PWQuYS5kLG4/KGs9dC5hLmM9PShiZCgpLHp2KT92OnMsbz10LmEuYz09enY/czp2LGg9dC5hLmdbby5pLnBdLEM9WHQodC5hLnBbaC5wXSkrWHQodC5hLmRbby5pLnBdKStvLm4uYitvLmEuYi1YdCh0LmEuZFtrLmkucF0pLWsubi5iLWsuYS5iKTooaz10LmEuYz09KGJkKCksZXApP3Y6cyxvPXQuYS5jPT1lcD9zOnYsQz1YdCh0LmEucFt0LmEuZ1tvLmkucF0ucF0pK1h0KHQuYS5kW28uaS5wXSkrby5uLmIrby5hLmItWHQodC5hLmRbay5pLnBdKS1rLm4uYi1rLmEuYiksdC5hLm5bdC5hLmdbcy5pLnBdLnBdPShObigpLCEwKSx0LmEublt0LmEuZ1t2LmkucF0ucF09ITAsQyk6cn1mdW5jdGlvbiBPcSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztpZihYMCh0LmUsZSkpdj0odG8oKSx1KGUsNjYpLk9qKCk/bmV3IHFqKGUsdCk6bmV3IEJNKGUsdCkpLHBxKHYuYyx2LmIpLGc5KHYsdShuLDE0KSk7ZWxzZXtmb3IoQz1vdSh0LmUuVGcoKSxlKSxyPXUodC5nLDExOSksaD0wO2g8dC5pOysraClpZihzPXJbaF0sbz1zLmFrKCksQy5ybChvKSl7aWYobz09KGQ2KCksdGspfHxvPT1KNil7Zm9yKGs9VjN0KHQsZSxuKSxkPWgsaz9ieSh0LGgpOisraDtoPHQuaTspcz1yW2hdLG89cy5haygpLG89PXRrfHxvPT1KNj9ieSh0LGgpOisraDtrfHx1KGg0KHQsZCxaZChlLG4pKSw3Mil9ZWxzZSBWM3QodCxlLG4pP2J5KHQsaCk6dShoNCh0LGgsKHRvKCksdShlLDY2KS5PaigpP3Uobiw3Mik6WmQoZSxuKSkpLDcyKTtyZXR1cm59VjN0KHQsZSxuKXx8RHIodCwodG8oKSx1KGUsNjYpLk9qKCk/dShuLDcyKTpaZChlLG4pKSl9fWZ1bmN0aW9uIEdsZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztyZXR1cm4geWkobix0LmIpfHwodC5iPW4sbz1uZXcgVHMsaD11KEJsKHd1KG5ldyBUbihudWxsLG5ldyBfbihuLmYsMTYpKSxvKSxabShuZXcgb24sbmV3IG5pLG5ldyBkaSxuZXcgRWUsbHQoY3QoZmwsMSksb2UsMTMyLDAsWyhPMSgpLEl5KSxVbF0pKSksMjEpLHQuZT0hMCx0LmY9ITAsdC5jPSEwLHQuZD0hMCxzPWguSGMoKHU2KCksZE8pKSxyPWguSGMoZ08pLHMmJiFyJiYodC5mPSExKSwhcyYmciYmKHQuZD0hMSkscz1oLkhjKGZPKSxyPWguSGMocE8pLHMmJiFyJiYodC5jPSExKSwhcyYmciYmKHQuZT0hMSkpLEM9dSh0LmEuQ2UoZSxuKSw0Niksdj11KEMuYSwxOSkuYSxrPXUoQy5iLDE5KS5hLGQ9ITEsdjwwP3QuY3x8KGQ9ITApOnQuZXx8KGQ9ITApLGs8MD90LmR8fChkPSEwKTp0LmZ8fChkPSEwKSxkP0dsZSh0LEMsbik6Q31mdW5jdGlvbiBtM24odCl7dmFyIGUsbixyLHM7cz10Lm8sJG0oKSx0LkEuZGMoKXx8eWkodC5BLG83dCk/ZT1zLmI6KGU9ZEkodC5mKSx0LkEuSGMoKEFsKCksYVApKSYmIXQuQi5IYygobGwoKSxpQSkpJiYoZT1iLk1hdGgubWF4KGUsZEkodShwbyh0LnAsKHZlKCksSG4pKSwyNDQpKSksZT1iLk1hdGgubWF4KGUsZEkodShwbyh0LnAsQm4pLDI0NCkpKSksbj1HbmUodCksbiYmKGU9Yi5NYXRoLm1heChlLG4uYikpLHQuQS5IYyhvUCkmJih0LnE9PSh1YSgpLGcwKXx8dC5xPT1HYykmJihlPWIuTWF0aC5tYXgoZSwkaih1KHBvKHQuYiwodmUoKSxIbikpLDEyNCkpKSxlPWIuTWF0aC5tYXgoZSwkaih1KHBvKHQuYixCbiksMTI0KSkpKSksamUoUmUodC5lLnlmKCkuV2UoKHVpKCksWEcpKSkpP3MuYj1iLk1hdGgubWF4KHMuYixlKTpzLmI9ZSxyPXQuZi5pLHIuZD0wLHIuYT1lLFRhdCh0LmYpfWZ1bmN0aW9uIFVsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEs7Zm9yKE09MDtNPGUubGVuZ3RoO00rKyl7Zm9yKGQ9dC5LYygpO2QuT2IoKTspbz11KGQuUGIoKSwyMjUpLG8uT2YoTSxlKTtmb3Ioaj0wO2o8ZVtNXS5sZW5ndGg7aisrKXtmb3Iodj10LktjKCk7di5PYigpOylvPXUodi5QYigpLDIyNSksby5QZihNLGosZSk7Zm9yKEs9ZVtNXVtqXS5qLEg9MDtIPEsuYy5sZW5ndGg7SCsrKXtmb3Ioaz10LktjKCk7ay5PYigpOylvPXUoay5QYigpLDIyNSksby5RZihNLGosSCxlKTtmb3IoRz0oQW4oSCxLLmMubGVuZ3RoKSx1KEsuY1tIXSwxMSkpLG49MCxzPW5ldyBMMShHLmIpO0dvKHMuYSl8fEdvKHMuYik7KWZvcihyPXUoR28ocy5hKT9KKHMuYSk6SihzLmIpLDE3KSxDPXQuS2MoKTtDLk9iKCk7KW89dShDLlBiKCksMjI1KSxvLk5mKE0saixILG4rKyxyLGUpfX19Zm9yKGg9dC5LYygpO2guT2IoKTspbz11KGguUGIoKSwyMjUpLG8uTWYoKX1mdW5jdGlvbiB5M24odCxlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3IodC5iPVh0KHllKFEoZSwoVGUoKSxKNCkpKSksdC5jPVh0KHllKFEoZSxxMikpKSx0LmQ9dShRKGUsc2h0KSwzMzYpLHQuYT11KFEoZSxzRyksMjc1KSxkMW4oZSksZD11KEJsKFJpKFJpKFdvKFdvKG5ldyBUbihudWxsLG5ldyBfbihlLmIsMTYpKSxuZXcgSUspLG5ldyBCVCksbmV3IF9MKSxuZXcgdU4pLGMyKG5ldyBrZSxuZXcgY2UsbmV3IFhuLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFsoTzEoKSxVbCldKSkpLDE1KSxzPWQuS2MoKTtzLk9iKCk7KW49dShzLlBiKCksMTcpLGg9dShRKG4sKGFlKCksUjIpKSwxNSksaC5KYyhuZXcgbWModCkpLEp0KG4sUjIsbnVsbCk7Zm9yKHI9ZC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwxNyksdj11KFEobiwoYWUoKSxoQ3QpKSwxNyksbz11KFEobixaNCksMTUpLEF4bih0LG8sdiksSnQobixaNCxudWxsKX1mdW5jdGlvbiB4M24odCl7dC5iPW51bGwsdC5hPW51bGwsdC5vPW51bGwsdC5xPW51bGwsdC52PW51bGwsdC53PW51bGwsdC5CPW51bGwsdC5wPW51bGwsdC5RPW51bGwsdC5SPW51bGwsdC5TPW51bGwsdC5UPW51bGwsdC5VPW51bGwsdC5WPW51bGwsdC5XPW51bGwsdC5iYj1udWxsLHQuZWI9bnVsbCx0LmFiPW51bGwsdC5IPW51bGwsdC5kYj1udWxsLHQuYz1udWxsLHQuZD1udWxsLHQuZj1udWxsLHQubj1udWxsLHQucj1udWxsLHQucz1udWxsLHQudT1udWxsLHQuRz1udWxsLHQuSj1udWxsLHQuZT1udWxsLHQuaj1udWxsLHQuaT1udWxsLHQuZz1udWxsLHQuaz1udWxsLHQudD1udWxsLHQuRj1udWxsLHQuST1udWxsLHQuTD1udWxsLHQuTT1udWxsLHQuTz1udWxsLHQuUD1udWxsLHQuJD1udWxsLHQuTj1udWxsLHQuWj1udWxsLHQuY2I9bnVsbCx0Lks9bnVsbCx0LkQ9bnVsbCx0LkE9bnVsbCx0LkM9bnVsbCx0Ll89bnVsbCx0LmZiPW51bGwsdC5YPW51bGwsdC5ZPW51bGwsdC5nYj0hMSx0LmhiPSExfWZ1bmN0aW9uIElhdCh0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGs7cmV0dXJuISh0LmshPShWbigpLE9zKXx8dC5qLmMubGVuZ3RoPD0xfHwobz11KFEodCwoVGUoKSxjcykpLDk4KSxvPT0odWEoKSxHYykpfHwocz0oY3koKSwodC5xP3QucTood24oKSx3bigpLHUwKSkuX2IoQnYpP3I9dShRKHQsQnYpLDE5Nyk6cj11KFEoTmEodCksQVMpLDE5Nykscikscz09eEcpfHwhKHM9PW41fHxzPT1lNSkmJihoPVh0KHllKG95KHQsTFMpKSksZT11KFEodCxQTyksMTQyKSwhZSYmKGU9bmV3IHV3dChoLGgsaCxoKSksaz1Lbyh0LCh2ZSgpLEJuKSksdj1lLmQrZS5hKyhrLmdjKCktMSkqaCx2PnQuby5ifHwobj1Lbyh0LEhuKSxkPWUuZCtlLmErKG4uZ2MoKS0xKSpoLGQ+dC5vLmIpKSl9ZnVuY3Rpb24gT2F0KHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEc7aWYoaD10LmUsdj1lLmUsaD09MClyZXR1cm4gZTtpZih2PT0wKXJldHVybiB0O2lmKG89dC5kLGQ9ZS5kLG8rZD09MilyZXR1cm4gbj1Ocyh0LmFbMF0sY28pLHI9TnMoZS5hWzBdLGNvKSxoPT12PyhDPVBhKG4sciksRz1BcihDKSxIPUFyKFZtKEMsMzIpKSxIPT0wP25ldyBOZyhoLEcpOm5ldyBYMyhoLDIsbHQoY3QoQ3IsMSksWHIsMjUsMTUsW0csSF0pKSk6SkQoaDwwP0pwKHIsbik6SnAobixyKSk7aWYoaD09dilqPWgsTT1vPj1kP0tydCh0LmEsbyxlLmEsZCk6S3J0KGUuYSxkLHQuYSxvKTtlbHNle2lmKHM9byE9ZD9vPmQ/MTotMTpxeXQodC5hLGUuYSxvKSxzPT0wKXJldHVybiByYigpLHM3O3M9PTE/KGo9aCxNPVdydCh0LmEsbyxlLmEsZCkpOihqPXYsTT1XcnQoZS5hLGQsdC5hLG8pKX1yZXR1cm4gaz1uZXcgWDMoaixNLmxlbmd0aCxNKSxOOShrKSxrfWZ1bmN0aW9uIFBhdCh0LGUsbixyLHMsbyxoKXt2YXIgZCx2LGssQyxNLGosSDtyZXR1cm4gTT1qZShSZShRKGUsKFRlKCksbDl0KSkpKSxqPW51bGwsbz09KHNvKCksdGwpJiZyLmMuaT09bj9qPXIuYzpvPT1udSYmci5kLmk9PW4mJihqPXIuZCksaz1oLCFrfHwhTXx8aj8oQz0odmUoKSxabyksaj9DPWouajpHMyh1KFEobixjcyksOTgpKSYmKEM9bz09dGw/Qm46SG4pLHY9azNuKHQsZSxuLG8sQyxyKSxkPUdydCgoTmEobikscikpLG89PXRsPyhPYShkLHUoTmUodi5qLDApLDExKSksb2EoZCxzKSk6KE9hKGQscyksb2EoZCx1KE5lKHYuaiwwKSwxMSkpKSxrPW5ldyBvaWUocixkLHYsdShRKHYsKGFlKCksX2kpKSwxMSksbywhaikpOihsZShrLmUsciksSD1iLk1hdGgubWF4KFh0KHllKFEoay5kLEpnKSkpLFh0KHllKFEocixKZykpKSksSnQoay5kLEpnLEgpKSxsbih0LmEscixuZXcgRmooay5kLGUsbykpLGt9ZnVuY3Rpb24gUHEodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTTtpZihDPW51bGwsdC5kJiYoQz11KE5jKHQuZCxlKSwxMzgpKSwhQyl7aWYobz10LmEuTWgoKSxNPW8uaSwhdC5kfHxIQyh0LmQpIT1NKXtmb3Iodj1uZXcgX3IsdC5kJiZZOSh2LHQuZCksaz12LmYuYyt2LmcuYyxkPWs7ZDxNOysrZClyPXUoQXQobyxkKSwxMzgpLHM9JGcodC5lLHIpLm5lKCksbj11KHM9PW51bGw/YXUodi5mLG51bGwscik6c3Yodi5nLHMsciksMTM4KSxuJiZuIT1yJiYocz09bnVsbD9hdSh2LmYsbnVsbCxuKTpzdih2LmcscyxuKSk7aWYodi5mLmMrdi5nLmMhPU0pZm9yKGg9MDtoPGs7KytoKXI9dShBdChvLGgpLDEzOCkscz0kZyh0LmUscikubmUoKSxuPXUocz09bnVsbD9hdSh2LmYsbnVsbCxyKTpzdih2LmcscyxyKSwxMzgpLG4mJm4hPXImJihzPT1udWxsP2F1KHYuZixudWxsLG4pOnN2KHYuZyxzLG4pKTt0LmQ9dn1DPXUoTmModC5kLGUpLDEzOCl9cmV0dXJuIEN9ZnVuY3Rpb24gazNuKHQsZSxuLHIscyxvKXt2YXIgaCxkLHYsayxDLE07cmV0dXJuIGg9bnVsbCxrPXI9PShzbygpLHRsKT9vLmM6by5kLHY9UHooZSksay5pPT1uPyhoPXUodHIodC5iLGspLDEwKSxofHwoaD1MSShrLHUoUShuLChUZSgpLGNzKSksOTgpLHMsSW1uKGspLG51bGwsay5uLGsubyx2LGUpLEp0KGgsKGFlKCksX2kpLGspLGtpKHQuYixrLGgpKSk6KGg9TEkoKEM9bmV3IGthLE09WHQoeWUoUShlLChUZSgpLFRmKSkpKS8yLHpEKEMsVnksTSksQyksdShRKG4sY3MpLDk4KSxzLHI9PXRsPy0xOjEsbnVsbCxuZXcgQ2EsbmV3ICRlKDAsMCksdixlKSxkPWIwbihoLG4sciksSnQoaCwoYWUoKSxfaSksZCksa2kodC5iLGQsaCkpLHUoUShlLChhZSgpLFZjKSksMjEpLkZjKChvbygpLHZoKSksRzModShRKGUsKFRlKCksY3MpKSw5OCkpP0p0KGUsY3MsKHVhKCksQjcpKTpKdChlLGNzLCh1YSgpLEcxKSksaH1mdW5jdGlvbiBFM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O3ZyKGUsIk9ydGhvZ29uYWwgZWRnZSByb3V0aW5nIiwxKSxrPVh0KHllKFEodCwoVGUoKSx0NSkpKSksbj1YdCh5ZShRKHQsSjQpKSkscj1YdCh5ZShRKHQscTIpKSksaj1uZXcgZXJ0KDAsbiksdHQ9MCxoPW5ldyBkYSh0LmIsMCksZD1udWxsLEM9bnVsbCx2PW51bGwsTT1udWxsO2RvIEM9aC5iPGguZC5nYygpPyhabihoLmI8aC5kLmdjKCkpLHUoaC5kLlhiKGguYz1oLmIrKyksMjkpKTpudWxsLE09Qz9DLmE6bnVsbCxkJiYobXh0KGQsdHQpLHR0Kz1kLmMuYSksSz1kP3R0K3I6dHQsRz1UeHQoaix0LHYsTSxLKSxzPSFkfHxmaih2LChrcSgpLGpPKSksbz0hQ3x8ZmooTSwoa3EoKSxqTykpLEc+MD8oSD0oRy0xKSpuLGQmJihIKz1yKSxDJiYoSCs9ciksSDxrJiYhcyYmIW8mJihIPWspLHR0Kz1IKTohcyYmIW8mJih0dCs9ayksZD1DLHY9TTt3aGlsZShDKTt0LmYuYT10dCxvcihlKX1mdW5jdGlvbiBGYXQoKXtGYXQ9Wjt2YXIgdDtpTHQ9bmV3IE5xdCxvNWU9TnQoQWUsZWUsMiwwLDYsMSksczVlPVMxKHM2KDMzLDU4KSxzNigxLDI2KSksYTVlPVMxKHM2KDk3LDEyMiksczYoNjUsOTApKSxKQXQ9czYoNDgsNTcpLHI1ZT1TMShzNWUsMCksaTVlPVMxKGE1ZSxKQXQpLHRMdD1TMShTMSgwLHM2KDEsNikpLHM2KDMzLDM4KSksZUx0PVMxKFMxKEpBdCxzNig2NSw3MCkpLHM2KDk3LDEwMikpLGM1ZT1TMShyNWUsVXooIi1fLiF+KicoKSIpKSx1NWU9UzEoaTVlLCR6KCItXy4hfionKCkiKSksVXooXzBlKSwkeihfMGUpLFMxKGM1ZSxVeigiOzpAJj0rJCwiKSksUzEodTVlLCR6KCI7OkAmPSskLCIpKSxuTHQ9VXooIjovPyMiKSxyTHQ9JHooIjovPyMiKSxvQT1VeigiLz8jIiksY0E9JHooIi8/IyIpLHQ9bmV3IEhzLHQuYS56YygiamFyIix0KSx0LmEuemMoInppcCIsdCksdC5hLnpjKCJhcmNoaXZlIix0KSxnVT0od24oKSxuZXcgczgodCkpfWZ1bmN0aW9uIFdsZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2lmKEp0KGUsKGZjKCksTTcpLDApLHY9dShRKGUsREcpLDg2KSxlLmQuYj09MCl2PyhDPVh0KHllKFEodixucCkpKSt0LmErcG10KHYsZSksSnQoZSxucCxDKSk6SnQoZSxucCwwKTtlbHNle2ZvcihyPShvPWVpKG5ldyBMcChlKS5hLmQsMCksbmV3IEV4KG8pKTtPUihyLmEpOyluPXUodGkoci5hKSwxODgpLmMsV2xlKHQsbik7ZD11KHhqKChoPWVpKG5ldyBMcChlKS5hLmQsMCksbmV3IEV4KGgpKSksODYpLE09dShWUWUoKHM9ZWkobmV3IExwKGUpLmEuZCwwKSxuZXcgRXgocykpKSw4Niksaz0oWHQoeWUoUShNLG5wKSkpK1h0KHllKFEoZCxucCkpKSkvMix2PyhDPVh0KHllKFEodixucCkpKSt0LmErcG10KHYsZSksSnQoZSxucCxDKSxKdChlLE03LFh0KHllKFEoZSxucCkpKS1rKSxENG4odCxlKSk6SnQoZSxucCxrKX19ZnVuY3Rpb24gSUUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRztkPTAsRz0wLHY9eCQodC5mLHQuZi5sZW5ndGgpLG89dC5kLGg9dC5pLHI9dC5hLHM9dC5iO2Rve2ZvcihIPTAsQz1uZXcgUyh0LnApO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDEwKSxqPWZoZSh0LGspLG49ITAsKHQucT09KHk0KCksRk8pfHx0LnE9PU5PKSYmKG49amUoUmUoai5iKSkpLHUoai5hLDE5KS5hPDAmJm4/KCsrSCx2PXgkKHQuZix0LmYubGVuZ3RoKSx0LmQ9dC5kK3Uoai5hLDE5KS5hLEcrPW8tdC5kLG89dC5kK3Uoai5hLDE5KS5hLGg9dC5pLHI9V3codC5hKSxzPVd3KHQuYikpOih0LmY9eCQodix2Lmxlbmd0aCksdC5kPW8sdC5hPShMcihyKSxyP25ldyBCdShyKTp4OChuZXcgUyhyKSkpLHQuYj0oTHIocykscz9uZXcgQnUocyk6eDgobmV3IFMocykpKSx0Lmk9aCk7KytkLE09SCE9MCYmamUoUmUoZS5LYihuZXcgZmEocGUoRykscGUoZCkpKSkpfXdoaWxlKE0pfWZ1bmN0aW9uIFQzbih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWU7cmV0dXJuIGg9dC5mLGo9ZS5mLGQ9aD09KEFFKCksRzYpfHxoPT1WUyxIPWo9PUc2fHxqPT1WUyx2PWg9PWk1fHxoPT1HUyxHPWo9PWk1fHxqPT1HUyxrPWg9PWk1fHxoPT1HNixLPWo9PWk1fHxqPT1HNixkJiZIP3QuZj09VlM/dDplOnYmJkc/dC5mPT1HUz90OmU6ayYmSz8oaD09aTU/KE09dCxDPWUpOihNPWUsQz10KSxvPSh0dD1uLmorbi5mLGd0PU0uZStyLmYsTXQ9Yi5NYXRoLm1heCh0dCxndCksU3Q9TXQtYi5NYXRoLm1pbihuLmosTS5lKSxSdD1NLmQrci5nLW4uaSxSdCpTdCkscz0oS3Q9bi5pK24uZyx1ZT1DLmQrci5nLF9lPWIuTWF0aC5tYXgoS3QsdWUpLFdlPV9lLWIuTWF0aC5taW4obi5pLEMuZCksUWU9Qy5lK3IuZi1uLmosV2UqUWUpLG88PXM/dC5mPT1pNT90OmU6dC5mPT1HNj90OmUpOnR9ZnVuY3Rpb24gQzNuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE07Zm9yKEM9dC5lLmEuYy5sZW5ndGgsaD1uZXcgUyh0LmUuYSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTIxKSxvLmo9ITE7Zm9yKHQuaT1OdChDcixYciwyNSxDLDE1LDEpLHQuZz1OdChDcixYciwyNSxDLDE1LDEpLHQubj1uZXcgaGUscz0wLE09bmV3IGhlLHY9bmV3IFModC5lLmEpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDEyMSksZC5kPXMrKyxkLmIuYS5jLmxlbmd0aD09MCYmbGUodC5uLGQpLExzKE0sZC5nKTtmb3IoZT0wLHI9bmV3IFMoTSk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMjEzKSxuLmM9ZSsrLG4uZj0hMTtrPU0uYy5sZW5ndGgsdC5iPT1udWxsfHx0LmIubGVuZ3RoPGs/KHQuYj1OdChhYSx2bywyNSxrLDE1LDEpLHQuYz1OdChwbCxvMCwyNSxrLDE2LDEpKTpSQyh0LmMpLHQuZD1NLHQucD1uZXcgZG50KHR5KHQuZC5jLmxlbmd0aCkpLHQuaj0xfWZ1bmN0aW9uIF8zbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZighKGUuZS5jLmxlbmd0aDw9MSkpe2Zvcih0LmY9ZSx0LmQ9dShRKHQuZiwoaUkoKSxDN3QpKSwzNzkpLHQuZz11KFEodC5mLEw3dCksMTkpLmEsdC5lPVh0KHllKFEodC5mLF83dCkpKSx0LmM9WHQoeWUoUSh0LmYsdlYpKSksc1h0KHQuYikscz1uZXcgUyh0LmYuYyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMjgyKSxRNXQodC5iLHIuYyxyLG51bGwpLFE1dCh0LmIsci5kLHIsbnVsbCk7Zm9yKGQ9dC5mLmUuYy5sZW5ndGgsdC5hPXQyKGFhLFtlZSx2b10sWzEwNCwyNV0sMTUsW2QsZF0sMiksaz1uZXcgUyh0LmYuZSk7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMTQ0KSxZeW4odCx2LHQuYVt2LmJdKTtmb3IodC5pPXQyKGFhLFtlZSx2b10sWzEwNCwyNV0sMTUsW2QsZF0sMiksbz0wO288ZDsrK28pZm9yKGg9MDtoPGQ7KytoKW49dC5hW29dW2hdLEM9MS8obipuKSx0Lmlbb11baF09Q319ZnVuY3Rpb24gU18odCl7dmFyIGUsbixyLHM7aWYoISh0LmI9PW51bGx8fHQuYi5sZW5ndGg8PTIpJiYhdC5hKXtmb3IoZT0wLHM9MDtzPHQuYi5sZW5ndGg7KXtmb3IoZSE9cz8odC5iW2VdPXQuYltzKytdLHQuYltlKzFdPXQuYltzKytdKTpzKz0yLG49dC5iW2UrMV07czx0LmIubGVuZ3RoJiYhKG4rMTx0LmJbc10pOylpZihuKzE9PXQuYltzXSl0LmJbZSsxXT10LmJbcysxXSxuPXQuYltlKzFdLHMrPTI7ZWxzZSBpZihuPj10LmJbcysxXSlzKz0yO2Vsc2UgaWYobjx0LmJbcysxXSl0LmJbZSsxXT10LmJbcysxXSxuPXQuYltlKzFdLHMrPTI7ZWxzZSB0aHJvdyBpdChuZXcgVm8oIlRva2VuI2NvbXBhY3RSYW5nZXMoKTogSW50ZXJuZWwgRXJyb3I6IFsiK3QuYltlXSsiLCIrdC5iW2UrMV0rIl0gWyIrdC5iW3NdKyIsIit0LmJbcysxXSsiXSIpKTtlKz0yfWUhPXQuYi5sZW5ndGgmJihyPU50KENyLFhyLDI1LGUsMTUsMSksRGModC5iLDAsciwwLGUpLHQuYj1yKSx0LmE9ITB9fWZ1bmN0aW9uIFMzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2O2ZvcihoPXF4KHQuYSkuS2MoKTtoLk9iKCk7KXtpZihvPXUoaC5QYigpLDE3KSxvLmIuYy5sZW5ndGg+MClmb3Iocj1uZXcgQnUodShBaSh0LmEsbyksMjEpKSx3bigpLFpzKHIsbmV3IFNpKGUpKSxzPW5ldyBkYShvLmIsMCk7cy5iPHMuZC5nYygpOyl7c3dpdGNoKG49KFpuKHMuYjxzLmQuZ2MoKSksdShzLmQuWGIocy5jPXMuYisrKSw3MCkpLGQ9LTEsdShRKG4sKFRlKCksT2QpKSwyNzIpLmcpe2Nhc2UgMTpkPXIuYy5sZW5ndGgtMTticmVhaztjYXNlIDA6ZD1RZG4ocik7YnJlYWs7Y2FzZSAyOmQ9MH1kIT0tMSYmKHY9KEFuKGQsci5jLmxlbmd0aCksdShyLmNbZF0sMjQzKSksbGUodi5iLmIsbiksdShRKE5hKHYuYi5jLmkpLChhZSgpLFZjKSksMjEpLkZjKChvbygpLG03KSksdShRKE5hKHYuYi5jLmkpLFZjKSwyMSkuRmModjcpLENsKHMpLEp0KG4sY0N0LG8pKX1PYShvLG51bGwpLG9hKG8sbnVsbCl9fWZ1bmN0aW9uIEEzbih0LGUpe3ZhciBuLHIscyxvO3JldHVybiBuPW5ldyAkZCxyPXUoQmwod3UobmV3IFRuKG51bGwsbmV3IF9uKHQuZiwxNikpLG4pLFptKG5ldyBvbixuZXcgbmksbmV3IGRpLG5ldyBFZSxsdChjdChmbCwxKSxvZSwxMzIsMCxbKE8xKCksSXkpLFVsXSkpKSwyMSkscz1yLmdjKCkscz1zPT0yPzE6MCxzPT0xJiZEdyhRRCh1KEJsKFJpKHIuTGMoKSxuZXcgQTApLHpuZSh2MigwKSxuZXcgRXIpKSwxNjIpLmEsMiksMCkmJihzPTApLHI9dShCbCh3dShuZXcgVG4obnVsbCxuZXcgX24oZS5mLDE2KSksbiksWm0obmV3IG9uLG5ldyBuaSxuZXcgZGksbmV3IEVlLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFtJeSxVbF0pKSksMjEpLG89ci5nYygpLG89bz09Mj8xOjAsbz09MSYmRHcoUUQodShCbChSaShyLkxjKCksbmV3IEJpKSx6bmUodjIoMCksbmV3IEVyKSksMTYyKS5hLDIpLDApJiYobz0wKSxzPG8/LTE6cz09bz8wOjF9ZnVuY3Rpb24gTDNuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixIO2lmKGs9bmV3IGhlLCFVcyh0LChhZSgpLFZsdCkpKXJldHVybiBrO2ZvcihyPXUoUSh0LFZsdCksMTUpLktjKCk7ci5PYigpOyllPXUoci5QYigpLDEwKSxxM24oZSx0KSxrLmNbay5jLmxlbmd0aF09ZTtmb3Iobz1uZXcgUyh0LmIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwyOSksZD1uZXcgUyhzLmEpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDEwKSxoLms9PShWbigpLGtzKSYmKHY9dShRKGgsZUcpLDEwKSx2JiYoQz1uZXcgTWMsVW8oQyxoKSxNPXUoUShoLG9jKSw2MSksQnMoQyxNKSxqPXUoTmUodi5qLDApLDExKSxIPW5ldyBWdyxPYShILEMpLG9hKEgsaikpKTtmb3Iobj1uZXcgUyhrKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMCksRW8oZSx1KE5lKHQuYix0LmIuYy5sZW5ndGgtMSksMjkpKTtyZXR1cm4ga31mdW5jdGlvbiBZbGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqO2ZvcihlPVQxKHQpLG89amUoUmUocWUoZSwoVGUoKSxIeSkpKSksQz0wLHM9MCxrPW5ldyBucigoIXQuZSYmKHQuZT1uZXcgQ24oWXMsdCw3LDQpKSx0LmUpKTtrLmUhPWsuaS5nYygpOyl2PXUoZHIoayksNzkpLGQ9ZnYodiksaD1kJiZvJiZqZShSZShxZSh2LGoyKSkpLGo9RG8odShBdCgoIXYuYyYmKHYuYz1uZXcgQ24oYnIsdiw1LDgpKSx2LmMpLDApLDgyKSksZCYmaD8rK3M6ZCYmIWg/KytDOmVzKGopPT1lfHxqPT1lPysrczorK0M7Zm9yKHI9bmV3IG5yKCghdC5kJiYodC5kPW5ldyBDbihZcyx0LDgsNSkpLHQuZCkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSw3OSksZD1mdihuKSxoPWQmJm8mJmplKFJlKHFlKG4sajIpKSksTT1Ebyh1KEF0KCghbi5iJiYobi5iPW5ldyBDbihicixuLDQsNykpLG4uYiksMCksODIpKSxkJiZoPysrQzpkJiYhaD8rK3M6ZXMoTSk9PWV8fE09PWU/KytDOisrcztyZXR1cm4gQy1zfWZ1bmN0aW9uIE0zbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSDtpZih2cihlLCJFZGdlIHNwbGl0dGluZyIsMSksdC5iLmMubGVuZ3RoPD0yKXtvcihlKTtyZXR1cm59Zm9yKG89bmV3IGRhKHQuYiwwKSxoPShabihvLmI8by5kLmdjKCkpLHUoby5kLlhiKG8uYz1vLmIrKyksMjkpKTtvLmI8by5kLmdjKCk7KWZvcihzPWgsaD0oWm4oby5iPG8uZC5nYygpKSx1KG8uZC5YYihvLmM9by5iKyspLDI5KSksdj1uZXcgUyhzLmEpO3YuYTx2LmMuYy5sZW5ndGg7KWZvcihkPXUoSih2KSwxMCksQz1uZXcgUyhkLmopO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihrPXUoSihDKSwxMSkscj1uZXcgUyhrLmcpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDE3KSxqPW4uZCxNPWouaS5jLE0hPXMmJk0hPWgmJnV1ZShuLChIPW5ldyBZMCh0KSxEMChILChWbigpLHRhKSksSnQoSCwoYWUoKSxfaSksbiksSnQoSCwoVGUoKSxjcyksKHVhKCksR2MpKSxFbyhILGgpLEgpKTtvcihlKX1mdW5jdGlvbiBLbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEg7aWYoZD1lLnAhPW51bGwmJiFlLmIsZHx8dnIoZSxyMWUsMSksbj11KFEodCwoYWUoKSxLbHQpKSwxNSksaD0xL24uZ2MoKSxlLm4pZm9yKEpiKGUsIkVMSyBMYXllcmVkIHVzZXMgdGhlIGZvbGxvd2luZyAiK24uZ2MoKSsiIG1vZHVsZXM6IiksSD0wLGo9bi5LYygpO2ouT2IoKTspQz11KGouUGIoKSw1MSkscj0oSDwxMD8iMCI6IiIpK0grKyxKYihlLCIgICBTbG90ICIrcisiOiAiK0lwKG9sKEMpKSk7Zm9yKE09bi5LYygpO00uT2IoKTspQz11KE0uUGIoKSw1MSksQy5wZih0LFJjKGUsaCkpO2ZvcihvPW5ldyBTKHQuYik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjkpLExzKHQuYSxzLmEpLHMuYS5jPU50KFFuLERlLDEsMCw1LDEpO2ZvcihrPW5ldyBTKHQuYSk7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMTApLEVvKHYsbnVsbCk7dC5iLmM9TnQoUW4sRGUsMSwwLDUsMSksZHx8b3IoZSl9ZnVuY3Rpb24gRDNuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZTtyPVh0KHllKFEoZSwoVGUoKSxmOXQpKSkpLEt0PXUoUShlLE1TKSwxOSkuYSxqPTQscz0zLHVlPTIwL0t0LEg9ITEsdj0wLGg9d2k7ZG97Zm9yKG89diE9MSxNPXYhPTAsX2U9MCx0dD10LmEsTXQ9MCxSdD10dC5sZW5ndGg7TXQ8UnQ7KytNdClHPXR0W010XSxHLmY9bnVsbCx2NW4odCxHLG8sTSxyKSxfZSs9Yi5NYXRoLmFicyhHLmEpO2RvIGQ9dXluKHQsZSk7d2hpbGUoZCk7Zm9yKEs9dC5hLGd0PTAsU3Q9Sy5sZW5ndGg7Z3Q8U3Q7KytndClpZihHPUtbZ3RdLG49ZnZ0KEcpLmEsbiE9MClmb3IoQz1uZXcgUyhHLmUpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDEwKSxrLm4uYis9bjt2PT0wfHx2PT0xPygtLWosajw9MCYmKF9lPGh8fC1qPkt0KT8odj0yLGg9d2kpOnY9PTA/KHY9MSxoPV9lKToodj0wLGg9X2UpKTooSD1fZT49aHx8aC1fZTx1ZSxoPV9lLEgmJi0tcyl9d2hpbGUoIShIJiZzPD0wKSl9ZnVuY3Rpb24gTmF0KHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEc7Zm9yKEc9bmV3IF9yLG89dC5hLmVjKCkuS2MoKTtvLk9iKCk7KXI9dShvLlBiKCksMTY4KSxraShHLHIsbi5KZShyKSk7Zm9yKGg9KExyKHQpLHQ/bmV3IEJ1KHQpOng4KHQuYS5lYygpLktjKCkpKSxacyhoLG5ldyBXbihHKSksZD1QJChoKSx2PW5ldyBtaihlKSxIPW5ldyBfcixhdShILmYsZSx2KTtkLmEuZ2MoKSE9MDspe2ZvcihrPW51bGwsQz1udWxsLE09bnVsbCxzPWQuYS5lYygpLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDE2OCksWHQoeWUoZWMoTG8oRy5mLHIpKSkpPD1hcyl7aWYoVGwoSCxyLmEpJiYhVGwoSCxyLmIpKXtDPXIuYixNPXIuYSxrPXI7YnJlYWt9aWYoVGwoSCxyLmIpJiYhVGwoSCxyLmEpKXtDPXIuYSxNPXIuYixrPXI7YnJlYWt9fWlmKCFrKWJyZWFrO2o9bmV3IG1qKEMpLGxlKHUoZWMoTG8oSC5mLE0pKSwyMjEpLmEsaiksYXUoSC5mLEMsaiksZC5hLkJjKGspIT1udWxsfXJldHVybiB2fWZ1bmN0aW9uIEkzbih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSDtmb3IodnIobiwiRGVwdGgtZmlyc3QgY3ljbGUgcmVtb3ZhbCIsMSksTT1lLmEsQz1NLmMubGVuZ3RoLHQuYz1uZXcgaGUsdC5kPU50KHBsLG8wLDI1LEMsMTYsMSksdC5hPU50KHBsLG8wLDI1LEMsMTYsMSksdC5iPW5ldyBoZSxoPTAsaz1uZXcgUyhNKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSwxMCksdi5wPWgsRjgoam8odikpJiZsZSh0LmMsdiksKytoO2ZvcihIPW5ldyBTKHQuYyk7SC5hPEguYy5jLmxlbmd0aDspaj11KEooSCksMTApLFg0dCh0LGopO2ZvcihvPTA7bzxDO28rKyl0LmRbb118fChkPShBbihvLE0uYy5sZW5ndGgpLHUoTS5jW29dLDEwKSksWDR0KHQsZCkpO2ZvcihzPW5ldyBTKHQuYik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLGJ2KHIsITApLEp0KGUsKGFlKCksX08pLChObigpLCEwKSk7dC5jPW51bGwsdC5kPW51bGwsdC5hPW51bGwsdC5iPW51bGwsb3Iobil9ZnVuY3Rpb24gTzNuKHQsZSl7dmFyIG4scixzLG8saCxkLHY7Zm9yKHQuYS5jPU50KFFuLERlLDEsMCw1LDEpLHI9ZWkoZS5iLDApO3IuYiE9ci5kLmM7KW49dSh0aShyKSw4Niksbi5iLmI9PTAmJihKdChuLChmYygpLFh5KSwoTm4oKSwhMCkpLGxlKHQuYSxuKSk7c3dpdGNoKHQuYS5jLmxlbmd0aCl7Y2FzZSAwOnM9bmV3IERpdCgwLGUsIkRVTU1ZX1JPT1QiKSxKdChzLChmYygpLFh5KSwoTm4oKSwhMCkpLEp0KHMsQmh0LCEwKSxyaShlLmIscyk7YnJlYWs7Y2FzZSAxOmJyZWFrO2RlZmF1bHQ6Zm9yKG89bmV3IERpdCgwLGUsIlNVUEVSX1JPT1QiKSxkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksODYpLHY9bmV3IE52dChvLGgpLEp0KHYsKGZjKCksQmh0KSwoTm4oKSwhMCkpLHJpKG8uYS5hLHYpLHJpKG8uZCx2KSxyaShoLmIsdiksSnQoaCxYeSwhMSk7SnQobywoZmMoKSxYeSksKE5uKCksITApKSxKdChvLEJodCwhMCkscmkoZS5iLG8pfX1mdW5jdGlvbiBQM24odCxlKXtrNCgpO3ZhciBuLHIscyxvLGgsZDtyZXR1cm4gbz1lLmMtKHQuYyt0LmIpLHM9dC5jLShlLmMrZS5iKSxoPXQuZC0oZS5kK2UuYSksbj1lLmQtKHQuZCt0LmEpLHI9Yi5NYXRoLm1heChzLG8pLGQ9Yi5NYXRoLm1heChoLG4pLGsxKCksd2YoX2QpLChiLk1hdGguYWJzKHIpPD1fZHx8cj09MHx8aXNOYU4ocikmJmlzTmFOKDApPzA6cjwwPy0xOnI+MD8xOkl3KGlzTmFOKHIpLGlzTmFOKDApKSk+PTBeKHdmKF9kKSwoYi5NYXRoLmFicyhkKTw9X2R8fGQ9PTB8fGlzTmFOKGQpJiZpc05hTigwKT8wOmQ8MD8tMTpkPjA/MTpJdyhpc05hTihkKSxpc05hTigwKSkpPj0wKT9iLk1hdGgubWF4KGQscik6KHdmKF9kKSwoYi5NYXRoLmFicyhyKTw9X2R8fHI9PTB8fGlzTmFOKHIpJiZpc05hTigwKT8wOnI8MD8tMTpyPjA/MTpJdyhpc05hTihyKSxpc05hTigwKSkpPjA/Yi5NYXRoLnNxcnQoZCpkK3Iqcik6LWIuTWF0aC5zcXJ0KGQqZCtyKnIpKX1mdW5jdGlvbiBFMih0LGUpe3ZhciBuLHIscyxvLGgsZDtpZihlKXtpZighdC5hJiYodC5hPW5ldyBFUiksdC5lPT0yKXtrUih0LmEsZSk7cmV0dXJufWlmKGUuZT09MSl7Zm9yKHM9MDtzPGUuZW0oKTtzKyspRTIodCxlLmFtKHMpKTtyZXR1cm59aWYoZD10LmEuYS5jLmxlbmd0aCxkPT0wKXtrUih0LmEsZSk7cmV0dXJufWlmKGg9dSh6dyh0LmEsZC0xKSwxMTcpLCEoKGguZT09MHx8aC5lPT0xMCkmJihlLmU9PTB8fGUuZT09MTApKSl7a1IodC5hLGUpO3JldHVybn1vPWUuZT09MD8yOmUuYm0oKS5sZW5ndGgsaC5lPT0wPyhuPW5ldyAkQyxyPWguX2woKSxyPj1LYT9nbyhuLGwzdChyKSk6UzgobixyJnlzKSxoPW5ldyBrcnQoMTAsbnVsbCwwKSx1bm4odC5hLGgsZC0xKSk6KG49KGguYm0oKS5sZW5ndGgrbyxuZXcgJEMpLGdvKG4saC5ibSgpKSksZS5lPT0wPyhyPWUuX2woKSxyPj1LYT9nbyhuLGwzdChyKSk6UzgobixyJnlzKSk6Z28obixlLmJtKCkpLHUoaCw1MjEpLmI9bi5hfX1mdW5jdGlvbiBYbGUodCl7dmFyIGUsbixyLHMsbztyZXR1cm4gdC5nIT1udWxsP3QuZzp0LmE8MzI/KHQuZz1XNW4oVHUodC5mKSxwcyh0LmUpKSx0LmcpOihzPUhhdCgoIXQuYyYmKHQuYz1WRCh0LmYpKSx0LmMpLDApLHQuZT09MD9zOihlPSghdC5jJiYodC5jPVZEKHQuZikpLHQuYykuZTwwPzI6MSxuPXMubGVuZ3RoLHI9LXQuZStuLWUsbz1uZXcgTXAsby5hKz0iIitzLHQuZT4wJiZyPj0tNj9yPj0wP3VEKG8sbi1wcyh0LmUpLFN0cmluZy5mcm9tQ2hhckNvZGUoNDYpKTooby5hPVBsKG8uYSwwLGUtMSkrIjAuIitSTShvLmEsZS0xKSx1RChvLGUrMSxNaChOMiwwLC1wcyhyKS0xKSkpOihuLWU+PTEmJih1RChvLGUsU3RyaW5nLmZyb21DaGFyQ29kZSg0NikpLCsrbiksdUQobyxuLFN0cmluZy5mcm9tQ2hhckNvZGUoNjkpKSxyPjAmJnVEKG8sKytuLFN0cmluZy5mcm9tQ2hhckNvZGUoNDMpKSx1RChvLCsrbiwiIitfOShUdShyKSkpKSx0Lmc9by5hLHQuZykpfWZ1bmN0aW9uIEYzbih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQ7aWYoIW4uZGMoKSl7Zm9yKGQ9MCxqPTAscj1uLktjKCksRz11KHIuUGIoKSwxOSkuYTtkPGUuZjspe2lmKGQ9PUcmJihqPTAsci5PYigpP0c9dShyLlBiKCksMTkpLmE6Rz1lLmYrMSksZCE9ail7Zm9yKHR0PXUoTmUodC5iLGQpLDI5KSxIPXUoTmUodC5iLGopLDI5KSxLPVd3KHR0LmEpLE09bmV3IFMoSyk7TS5hPE0uYy5jLmxlbmd0aDspaWYoQz11KEooTSksMTApLGx5KEMsSC5hLmMubGVuZ3RoLEgpLGo9PTApZm9yKGg9V3coam8oQykpLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMTcpLGJ2KHMsITApLEp0KHQsKGFlKCksX08pLChObigpLCEwKSksbmhlKHQscywxKX0rK2osKytkfWZvcih2PW5ldyBkYSh0LmIsMCk7di5iPHYuZC5nYygpOylrPShabih2LmI8di5kLmdjKCkpLHUodi5kLlhiKHYuYz12LmIrKyksMjkpKSxrLmEuYy5sZW5ndGg9PTAmJkNsKHYpfX1mdW5jdGlvbiBOM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0O2ZvcihoPWUuYixDPWgubyx2PWguZCxyPVh0KHllKFd6KGgsKFRlKCksVGYpKSkpLHM9WHQoeWUoV3ooaCxWNikpKSxrPVh0KHllKFd6KGgsZmh0KSkpLGQ9bmV3IG5ldCxGd3QoZCx2LmQsdi5jLHYuYSx2LmIpLGo9UXZuKGUscixzLGspLGd0PW5ldyBTKGUuZCk7Z3QuYTxndC5jLmMubGVuZ3RoOyl7Zm9yKHR0PXUoSihndCksMTAxKSxHPXR0LmYuYS5lYygpLktjKCk7Ry5PYigpOylIPXUoRy5QYigpLDQwOSksbz1ILmEsTT1xMG4oSCksbj0oTXQ9bmV3IFB1LFNhZShILEguYyxqLE10KSxnZ24oSCxNLGosTXQpLFNhZShILEguZCxqLE10KSxNdCksbj10LlVmKEgsTSxuKSxBaChvLmEpLFVhKG8uYSxuKSxscyhuZXcgVG4obnVsbCxuZXcgX24obiwxNikpLG5ldyBoR3QoQyxkKSk7Sz10dC5pLEsmJihNMG4odHQsSyxqLHMpLFN0PW5ldyB4byhLLmcpLEYzdChDLGQsU3QpLExpKFN0LEsuaiksRjN0KEMsZCxTdCkpfUZ3dCh2LGQuZCxkLmMsZC5hLGQuYil9ZnVuY3Rpb24gQjNuKHQsZSxuKXt2YXIgcixzLG87aWYocz11KFEoZSwoVGUoKSxzRykpLDI3NSkscyE9KGtFKCksbVMpKXtzd2l0Y2godnIobiwiSG9yaXpvbnRhbCBDb21wYWN0aW9uIiwxKSx0LmE9ZSxvPW5ldyB0ZWUscj1uZXcgSm9lKChvLmQ9ZSxvLmM9dShRKG8uZCxlZyksMjE4KSxSdm4obyksTDRuKG8pLEd2bihvKSxvLmEpKSxOS2Uocix0LmIpLHUoUShlLHpDdCksNDIyKS5nKXtjYXNlIDE6dkh0KHIsbmV3IHBuZSh0LmEpKTticmVhaztkZWZhdWx0OnZIdChyLChGdnQoKSxvcGUpKX1zd2l0Y2gocy5nKXtjYXNlIDE6dl8ocik7YnJlYWs7Y2FzZSAyOnZfKEJxKHIsKGFvKCksQ2YpKSk7YnJlYWs7Y2FzZSAzOnZfKHdIdChCcSh2XyhyKSwoYW8oKSxDZikpLG5ldyBxVCkpO2JyZWFrO2Nhc2UgNDp2Xyh3SHQoQnEodl8ociksKGFvKCksQ2YpKSxuZXcgVmQobykpKTticmVhaztjYXNlIDU6dl8oRktlKHIsaDJlKSl9QnEociwoYW8oKSx6aCkpLHIuZT0hMCxmNW4obyksb3Iobil9fWZ1bmN0aW9uIFIzbih0LGUsbixyLHMsbyxoLGQpe3ZhciB2LGssQyxNO3N3aXRjaCh2PUExKGx0KGN0KGI2biwxKSxEZSwyMjAsMCxbZSxuLHIsc10pKSxNPW51bGwsdC5iLmcpe2Nhc2UgMTpNPUExKGx0KGN0KGpfdCwxKSxEZSw1MjYsMCxbbmV3IFhULG5ldyBLVCxuZXcgakxdKSk7YnJlYWs7Y2FzZSAwOk09QTEobHQoY3Qoal90LDEpLERlLDUyNiwwLFtuZXcgakwsbmV3IEtULG5ldyBYVF0pKTticmVhaztjYXNlIDI6TT1BMShsdChjdChqX3QsMSksRGUsNTI2LDAsW25ldyBLVCxuZXcgWFQsbmV3IGpMXSkpfWZvcihDPW5ldyBTKE0pO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDUyNiksdi5jLmxlbmd0aD4xJiYodj1rLm1nKHYsdC5hLGQpKTtyZXR1cm4gdi5jLmxlbmd0aD09MT91KE5lKHYsdi5jLmxlbmd0aC0xKSwyMjApOnYuYy5sZW5ndGg9PTI/VDNuKChBbigwLHYuYy5sZW5ndGgpLHUodi5jWzBdLDIyMCkpLChBbigxLHYuYy5sZW5ndGgpLHUodi5jWzFdLDIyMCkpLGgsbyk6bnVsbH1mdW5jdGlvbiBRbGUodCl7dmFyIGUsbixyLHMsbyxoO2Zvcih4dSh0LmEsbmV3IHhpKSxuPW5ldyBTKHQuYSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjIxKSxyPWlhKG5jKHUodC5iLDY1KS5jKSx1KGUuYiw2NSkuYyksVXBlPyhoPXUodC5iLDY1KS5iLG89dShlLmIsNjUpLmIsYi5NYXRoLmFicyhyLmEpPj1iLk1hdGguYWJzKHIuYik/KHIuYj0wLG8uZCtvLmE+aC5kJiZvLmQ8aC5kK2guYSYmamoocixiLk1hdGgubWF4KGguYy0oby5jK28uYiksby5jLShoLmMraC5iKSkpKTooci5hPTAsby5jK28uYj5oLmMmJm8uYzxoLmMraC5iJiZqaihyLGIuTWF0aC5tYXgoaC5kLShvLmQrby5hKSxvLmQtKGguZCtoLmEpKSkpKTpqaihyLF9sZSh1KHQuYiw2NSksdShlLmIsNjUpKSkscz1iLk1hdGguc3FydChyLmEqci5hK3IuYipyLmIpLHM9a2FlKGhTLGUscyxyKSxqaihyLHMpLHFudCh1KGUuYiw2NSkscikseHUoZS5hLG5ldyBKcihyKSksdShoUy5iLDY1KSxBbXQoaFMsYzd0LGUpfWZ1bmN0aW9uIGozbih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2Zvcih0LmY9bmV3IGVldCxrPTAscz0wLGg9bmV3IFModC5lLmIpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSwyOSksdj1uZXcgUyhvLmEpO3YuYTx2LmMuYy5sZW5ndGg7KXtmb3IoZD11KEoodiksMTApLGQucD1rKysscj1uZXcgYXIobHIoRHMoZCkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSwxNyksbi5wPXMrKztmb3IoZT1JYXQoZCksaj1uZXcgUyhkLmopO2ouYTxqLmMuYy5sZW5ndGg7KU09dShKKGopLDExKSxlJiYoRz1NLmEuYixHIT1iLk1hdGguZmxvb3IoRykmJihDPUctWXcoVHUoYi5NYXRoLnJvdW5kKEcpKSksTS5hLmItPUMpKSxIPU0ubi5iK00uYS5iLEghPWIuTWF0aC5mbG9vcihIKSYmKEM9SC1ZdyhUdShiLk1hdGgucm91bmQoSCkpKSxNLm4uYi09Qyl9dC5nPWssdC5iPXMsdC5pPU50KGQ2bixEZSw0MDEsaywwLDEpLHQuYz1OdChmNm4sRGUsNjQ5LHMsMCwxKSx0LmQuYS4kYigpfWZ1bmN0aW9uIHhyKHQpe3ZhciBlLG4scixzLG8saCxkLHYsaztpZih0LmVqKCkpaWYodj10LmZqKCksdC5pPjApe2lmKGU9bmV3IG4ydCh0LmksdC5nKSxuPXQuaSxvPW48MTAwP251bGw6bmV3IERwKG4pLHQuaWooKSlmb3Iocj0wO3I8dC5pOysrciloPXQuZ1tyXSxvPXQua2ooaCxvKTtpZih6OSh0KSxzPW49PTE/dC5aaSg0LEF0KGUsMCksbnVsbCwwLHYpOnQuWmkoNixlLG51bGwsLTEsdiksdC5iaigpKXtmb3Iocj1uZXcgQngoZSk7ci5lIT1yLmkuZ2MoKTspbz10LmRqKGRzdChyKSxvKTtvPyhvLkVpKHMpLG8uRmkoKSk6dC4kaShzKX1lbHNlIG8/KG8uRWkocyksby5GaSgpKTp0LiRpKHMpfWVsc2UgejkodCksdC4kaSh0LlppKDYsKHduKCksaW8pLG51bGwsLTEsdikpO2Vsc2UgaWYodC5iaigpKWlmKHQuaT4wKXtmb3IoZD10Lmcsaz10LmksejkodCksbz1rPDEwMD9udWxsOm5ldyBEcChrKSxyPTA7cjxrOysrciloPWRbcl0sbz10LmRqKGgsbyk7byYmby5GaSgpfWVsc2UgejkodCk7ZWxzZSB6OSh0KX1mdW5jdGlvbiB2eHQodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqO2ZvcihYbmUodGhpcyksbj09KEd3KCkseWIpP0ZzKHRoaXMucix0KTpGcyh0aGlzLncsdCksQz1hcyxrPUNzLGg9ZS5hLmVjKCkuS2MoKTtoLk9iKCk7KXM9dShoLlBiKCksNDYpLGQ9dShzLmEsNDU1KSxyPXUocy5iLDE3KSx2PXIuYyx2PT10JiYodj1yLmQpLGQ9PXliP0ZzKHRoaXMucix2KTpGcyh0aGlzLncsdiksaj0odmUoKSxBdSkuSGModi5qKT9YdCh5ZShRKHYsKGFlKCksazcpKSkpOllvKGx0KGN0KFdzLDEpLGVlLDgsMCxbdi5pLm4sdi5uLHYuYV0pKS5iLEM9Yi5NYXRoLm1pbihDLGopLGs9Yi5NYXRoLm1heChrLGopO2ZvcihNPSh2ZSgpLEF1KS5IYyh0LmopP1h0KHllKFEodCwoYWUoKSxrNykpKSk6WW8obHQoY3QoV3MsMSksZWUsOCwwLFt0Lmkubix0Lm4sdC5hXSkpLmIsVmFlKHRoaXMsTSxDLGspLG89ZS5hLmVjKCkuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksNDYpLHRvZSh0aGlzLHUocy5iLDE3KSk7dGhpcy5vPSExfWZ1bmN0aW9uICQzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem4saHI7cmV0dXJuIG49dC5sJjgxOTEscj10Lmw+PjEzfCh0Lm0mMTUpPDw5LHM9dC5tPj40JjgxOTEsbz10Lm0+PjE3fCh0LmgmMjU1KTw8NSxoPSh0LmgmMTA0ODMyMCk+PjgsZD1lLmwmODE5MSx2PWUubD4+MTN8KGUubSYxNSk8PDksaz1lLm0+PjQmODE5MSxDPWUubT4+MTd8KGUuaCYyNTUpPDw1LE09KGUuaCYxMDQ4MzIwKT4+OCxXZT1uKmQsUWU9cipkLFJuPXMqZCx6bj1vKmQsaHI9aCpkLHYhPTAmJihRZSs9bip2LFJuKz1yKnYsem4rPXMqdixocis9byp2KSxrIT0wJiYoUm4rPW4qayx6bis9ciprLGhyKz1zKmspLEMhPTAmJih6bis9bipDLGhyKz1yKkMpLE0hPTAmJihocis9bipNKSxIPVdlJmhsLEc9KFFlJjUxMSk8PDEzLGo9SCtHLHR0PVdlPj4yMixndD1RZT4+OSxNdD0oUm4mMjYyMTQzKTw8NCxTdD0oem4mMzEpPDwxNyxLPXR0K2d0K010K1N0LEt0PVJuPj4xOCx1ZT16bj4+NSxfZT0oaHImNDA5NSk8PDgsUnQ9S3QrdWUrX2UsSys9aj4+MjIsaiY9aGwsUnQrPUs+PjIyLEsmPWhsLFJ0Jj1aMCxpdShqLEssUnQpfWZ1bmN0aW9uIFpsZSh0KXt2YXIgZSxuLHIscyxvLGgsZDtpZihkPXUoTmUodC5qLDApLDExKSxkLmcuYy5sZW5ndGghPTAmJmQuZS5jLmxlbmd0aCE9MCl0aHJvdyBpdChuZXcgTm8oIkludGVyYWN0aXZlIGxheW91dCBkb2VzIG5vdCBzdXBwb3J0IE5PUlRIL1NPVVRIIHBvcnRzIHdpdGggaW5jb21pbmcgX2FuZF8gb3V0Z29pbmcgZWRnZXMuIikpO2lmKGQuZy5jLmxlbmd0aCE9MCl7Zm9yKG89YXMsbj1uZXcgUyhkLmcpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDE3KSxoPWUuZC5pLHI9dShRKGgsKFRlKCksZkcpKSwxNDIpLG89Yi5NYXRoLm1pbihvLGgubi5hLXIuYik7cmV0dXJuIG5ldyBXayhMcihvKSl9aWYoZC5lLmMubGVuZ3RoIT0wKXtmb3Iocz1DcyxuPW5ldyBTKGQuZSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTcpLGg9ZS5jLmkscj11KFEoaCwoVGUoKSxmRykpLDE0Mikscz1iLk1hdGgubWF4KHMsaC5uLmEraC5vLmErci5jKTtyZXR1cm4gbmV3IFdrKExyKHMpKX1yZXR1cm4gUEMoKSxQQygpLEN1dH1mdW5jdGlvbiBKbGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdjtpZih0LkZrKCkpe2lmKHQuaT40KWlmKHQud2ooZSkpe2lmKHQucmsoKSl7aWYocz11KGUsNDkpLHI9cy5VZygpLHY9cj09dC5lJiYodC5EaygpP3MuT2cocy5WZygpLHQuemsoKSk9PXQuQWsoKTotMS1zLlZnKCk9PXQuYWooKSksdC5FaygpJiYhdiYmIXImJnMuWmcoKSl7Zm9yKG89MDtvPHQuaTsrK28paWYobj10LkdrKHUodC5nW29dLDU2KSksVnQobik9PT1WdChlKSlyZXR1cm4hMH1yZXR1cm4gdn1lbHNlIGlmKHQuRGsoKSYmIXQuQ2soKSl7aWYoaD11KGUsNTYpLmFoKG5vKHUodC5haygpLDE4KSkpLFZ0KGgpPT09VnQodC5lKSlyZXR1cm4hMDtpZihoPT1udWxsfHwhdShoLDU2KS5raCgpKXJldHVybiExfX1lbHNlIHJldHVybiExO2lmKGQ9eUUodCxlKSx0LkVrKCkmJiFkKXtmb3Iobz0wO288dC5pOysrbylpZihzPXQuR2sodSh0Lmdbb10sNTYpKSxWdChzKT09PVZ0KGUpKXJldHVybiEwfXJldHVybiBkfWVsc2UgcmV0dXJuIHlFKHQsZSl9ZnVuY3Rpb24gejNuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtmb3IoQz1uZXcgaGUsaj1uZXcgSHMsaD1lLmIscz0wO3M8aC5jLmxlbmd0aDtzKyspe2ZvcihrPShBbihzLGguYy5sZW5ndGgpLHUoaC5jW3NdLDI5KSkuYSxDLmM9TnQoUW4sRGUsMSwwLDUsMSksbz0wO288ay5jLmxlbmd0aDtvKyspZD10LmFbc11bb10sZC5wPW8sZC5rPT0oVm4oKSxIYykmJihDLmNbQy5jLmxlbmd0aF09ZCksY2godShOZShlLmIscyksMjkpLmEsbyxkKSxkLmouYz1OdChRbixEZSwxLDAsNSwxKSxMcyhkLmosdSh1KE5lKHQuYixzKSwxNSkuWGIobyksMTQpKSxqeCh1KFEoZCwoVGUoKSxjcykpLDk4KSl8fEp0KGQsY3MsKHVhKCksWTIpKTtmb3Iocj1uZXcgUyhDKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMCksTT11bW4obiksai5hLnpjKE0saiksai5hLnpjKG4sail9Zm9yKHY9ai5hLmVjKCkuS2MoKTt2Lk9iKCk7KWQ9dSh2LlBiKCksMTApLHduKCksWnMoZC5qLChvRSgpLFRUdCkpLGQuaT0hMCxyNXQoZCl9ZnVuY3Rpb24gcTNuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE07aWYoQz11KFEodCwoYWUoKSxvYykpLDYxKSxyPXUoTmUodC5qLDApLDExKSxDPT0odmUoKSxQbik/QnMocixtcik6Qz09bXImJkJzKHIsUG4pLHUoUShlLChUZSgpLCQyKSksMTc0KS5IYygoQWwoKSxLMikpKXtpZih2PVh0KHllKFEodCxTNykpKSxrPVh0KHllKFEodCxBNykpKSxoPVh0KHllKFEodCxXeSkpKSxkPXUoUShlLEd5KSwyMSksZC5IYygoWnUoKSxzZykpKWZvcihuPWssTT10Lm8uYS8yLXIubi5hLG89bmV3IFMoci5mKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSw3MCkscy5uLmI9bixzLm4uYT1NLXMuby5hLzIsbis9cy5vLmIraDtlbHNlIGlmKGQuSGMoQ2IpKWZvcihvPW5ldyBTKHIuZik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksNzApLHMubi5hPXYrdC5vLmEtci5uLmE7bHNuKG5ldyBlcigoVkMoKSxuZXcgaHJ0KGUsITEsITEsbmV3IGFOKSkpLG5ldyBOaihudWxsLHQsITEpKX19ZnVuY3Rpb24gSDNuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2lmKGUuYy5sZW5ndGghPTApe2Zvcih3bigpLCRudChlLmMsZS5jLmxlbmd0aCxudWxsKSxzPW5ldyBTKGUpLHI9dShKKHMpLDE0NSk7cy5hPHMuYy5jLmxlbmd0aDspbj11KEoocyksMTQ1KSxVbXQoci5lLmMsbi5lLmMpJiYhKEkzdChxV3Qoci5lKS5iLG4uZS5kKXx8STN0KHFXdChuLmUpLmIsci5lLmQpKT9yPShMcyhyLmssbi5rKSxMcyhyLmIsbi5iKSxMcyhyLmMsbi5jKSxVYShyLmksbi5pKSxMcyhyLmQsbi5kKSxMcyhyLmosbi5qKSxvPWIuTWF0aC5taW4oci5lLmMsbi5lLmMpLGg9Yi5NYXRoLm1pbihyLmUuZCxuLmUuZCksZD1iLk1hdGgubWF4KHIuZS5jK3IuZS5iLG4uZS5jK24uZS5iKSx2PWQtbyxrPWIuTWF0aC5tYXgoci5lLmQrci5lLmEsbi5lLmQrbi5lLmEpLEM9ay1oLGVLdChyLmUsbyxoLHYsQyksaXNuKHIuZixuLmYpLCFyLmEmJihyLmE9bi5hKSxMcyhyLmcsbi5nKSxsZShyLmcsbikscik6KHdsZSh0LHIpLHI9bik7d2xlKHQscil9fWZ1bmN0aW9uIFYzbih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGs7aWYoZD10LmosZD09KHZlKCksWm8pJiZlIT0odWEoKSxHMSkmJmUhPSh1YSgpLFRiKSYmKGQ9aGxlKHQsbiksQnModCxkKSwhKHQucT90LnE6KHduKCksd24oKSx1MCkpLl9iKChUZSgpLFZ5KSkmJmQhPVpvJiYodC5uLmEhPTB8fHQubi5iIT0wKSYmSnQodCxWeSxjZG4odCxkKSkpLGU9PSh1YSgpLGcwKSl7c3dpdGNoKGs9MCxkLmcpe2Nhc2UgMTpjYXNlIDM6bz10Lmkuby5hLG8+MCYmKGs9dC5uLmEvbyk7YnJlYWs7Y2FzZSAyOmNhc2UgNDpzPXQuaS5vLmIscz4wJiYoaz10Lm4uYi9zKX1KdCh0LChhZSgpLEZ2KSxrKX1pZih2PXQubyxoPXQuYSxyKWguYT1yLmEsaC5iPXIuYix0LmQ9ITA7ZWxzZSBpZihlIT1HMSYmZSE9VGImJmQhPVpvKXN3aXRjaChkLmcpe2Nhc2UgMTpoLmE9di5hLzI7YnJlYWs7Y2FzZSAyOmguYT12LmEsaC5iPXYuYi8yO2JyZWFrO2Nhc2UgMzpoLmE9di5hLzIsaC5iPXYuYjticmVhaztjYXNlIDQ6aC5iPXYuYi8yfWVsc2UgaC5hPXYuYS8yLGguYj12LmIvMn1mdW5jdGlvbiBBXyh0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQztpZih0LmVqKCkpaWYoQz10LlZpKCksdj10LmZqKCksQz4wKWlmKGU9bmV3IGd5dCh0LkdpKCkpLG49QyxvPW48MTAwP251bGw6bmV3IERwKG4pLFZNKHQsbixlLmcpLHM9bj09MT90LlppKDQsQXQoZSwwKSxudWxsLDAsdik6dC5aaSg2LGUsbnVsbCwtMSx2KSx0LmJqKCkpe2ZvcihyPW5ldyBucihlKTtyLmUhPXIuaS5nYygpOylvPXQuZGooZHIociksbyk7bz8oby5FaShzKSxvLkZpKCkpOnQuJGkocyl9ZWxzZSBvPyhvLkVpKHMpLG8uRmkoKSk6dC4kaShzKTtlbHNlIFZNKHQsdC5WaSgpLHQuV2koKSksdC4kaSh0LlppKDYsKHduKCksaW8pLG51bGwsLTEsdikpO2Vsc2UgaWYodC5iaigpKWlmKEM9dC5WaSgpLEM+MCl7Zm9yKGQ9dC5XaSgpLGs9QyxWTSh0LEMsZCksbz1rPDEwMD9udWxsOm5ldyBEcChrKSxyPTA7cjxrOysrciloPWRbcl0sbz10LmRqKGgsbyk7byYmby5GaSgpfWVsc2UgVk0odCx0LlZpKCksdC5XaSgpKTtlbHNlIFZNKHQsdC5WaSgpLHQuV2koKSl9ZnVuY3Rpb24gRzNuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixIO2ZvcihkPW5ldyBTKGUpO2QuYTxkLmMuYy5sZW5ndGg7KW89dShKKGQpLDIzMyksby5lPW51bGwsby5jPTA7Zm9yKHY9bnVsbCxoPW5ldyBTKGUpO2guYTxoLmMuYy5sZW5ndGg7KWlmKG89dShKKGgpLDIzMyksTT1vLmRbMF0sIShuJiZNLmshPShWbigpLE9zKSkpe2ZvcihIPXUoUShNLChhZSgpLFI2KSksMTUpLktjKCk7SC5PYigpOylqPXUoSC5QYigpLDEwKSwoIW58fGouaz09KFZuKCksT3MpKSYmKCghby5lJiYoby5lPW5ldyBoZSksby5lKS5GYyh0LmJbai5jLnBdW2oucF0pLCsrdC5iW2ouYy5wXVtqLnBdLmMpO2lmKCFuJiZNLms9PShWbigpLE9zKSl7aWYodilmb3IoQz11KEFpKHQuZCx2KSwyMSkuS2MoKTtDLk9iKCk7KWZvcihrPXUoQy5QYigpLDEwKSxzPXUoQWkodC5kLE0pLDIxKS5LYygpO3MuT2IoKTspcj11KHMuUGIoKSwxMCkscmVuKHQuYltrLmMucF1bay5wXSkuRmModC5iW3IuYy5wXVtyLnBdKSwrK3QuYltyLmMucF1bci5wXS5jO3Y9TX19fWZ1bmN0aW9uIFUzbih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3Iobj0wLEM9bmV3IGhlLGQ9bmV3IFMoZSk7ZC5hPGQuYy5jLmxlbmd0aDspe3N3aXRjaChoPXUoSihkKSwxMSksVnl0KHQuYix0LmRbaC5wXSksQy5jPU50KFFuLERlLDEsMCw1LDEpLGguaS5rLmcpe2Nhc2UgMDpyPXUoUShoLChhZSgpLEp1KSksMTApLHh1KHIuaixuZXcgTiR0KEMpKTticmVhaztjYXNlIDE6YlFlKE1pdChSaShuZXcgVG4obnVsbCxuZXcgX24oaC5pLmosMTYpKSxuZXcgQiR0KGgpKSksbmV3IFIkdChDKSk7YnJlYWs7Y2FzZSAzOnM9dShRKGgsKGFlKCksX2kpKSwxMSksbGUoQyxuZXcgZmEocyxwZShoLmUuYy5sZW5ndGgraC5nLmMubGVuZ3RoKSkpfWZvcihrPW5ldyBTKEMpO2suYTxrLmMuYy5sZW5ndGg7KXY9dShKKGspLDQ2KSxvPWJidCh0LHUodi5hLDExKSksbz50LmRbaC5wXSYmKG4rPWZtdCh0LmIsbykqdSh2LmIsMTkpLmEsVXAodC5hLHBlKG8pKSk7Zm9yKDshQkModC5hKTspSG10KHQuYix1KEh4KHQuYSksMTkpLmEpfXJldHVybiBufWZ1bmN0aW9uIFczbih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQ7Zm9yKE09bmV3IHhvKHUocWUodCwoZnEoKSxPU3QpKSw4KSksTS5hPWIuTWF0aC5tYXgoTS5hLW4uYi1uLmMsMCksTS5iPWIuTWF0aC5tYXgoTS5iLW4uZC1uLmEsMCkscz15ZShxZSh0LE1TdCkpLChzPT1udWxsfHwoT24ocyksczw9MCkpJiYocz0xLjMpLGQ9bmV3IGhlLEc9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBmZShycyx0LDEwLDExKSksdC5hKSk7Ry5lIT1HLmkuZ2MoKTspSD11KGRyKEcpLDMzKSxoPW5ldyBMV3QoSCksZC5jW2QuYy5sZW5ndGhdPWg7c3dpdGNoKGo9dShxZSh0LGxmdCksMzExKSxqLmcpe2Nhc2UgMzp0dD1weW4oZCxlLE0uYSxNLmIsKGs9cixPbihzKSxrKSk7YnJlYWs7Y2FzZSAxOnR0PXp5bihkLGUsTS5hLE0uYiwoQz1yLE9uKHMpLEMpKTticmVhaztkZWZhdWx0OnR0PVgzbihkLGUsTS5hLE0uYiwodj1yLE9uKHMpLHYpKX1vPW5ldyByeih0dCksSz16YXQobyxlLG4sTS5hLE0uYixyLChPbihzKSxzKSksd3YodCxLLmEsSy5iLCExLCEwKX1mdW5jdGlvbiBZM24odCxlKXt2YXIgbixyLHMsbztuPWUuYixvPW5ldyBCdShuLmopLHM9MCxyPW4uaixyLmM9TnQoUW4sRGUsMSwwLDUsMSksJHcodShoMih0LmIsKHZlKCksUG4pLChudigpLER2KSksMTUpLG4pLHM9bkkobyxzLG5ldyBqWCxyKSwkdyh1KGgyKHQuYixQbixwYiksMTUpLG4pLHM9bkkobyxzLG5ldyBWVCxyKSwkdyh1KGgyKHQuYixQbixNdiksMTUpLG4pLCR3KHUoaDIodC5iLEhuLER2KSwxNSksbiksJHcodShoMih0LmIsSG4scGIpLDE1KSxuKSxzPW5JKG8scyxuZXcgUE4sciksJHcodShoMih0LmIsSG4sTXYpLDE1KSxuKSwkdyh1KGgyKHQuYixtcixEdiksMTUpLG4pLHM9bkkobyxzLG5ldyBGTixyKSwkdyh1KGgyKHQuYixtcixwYiksMTUpLG4pLHM9bkkobyxzLG5ldyBOTixyKSwkdyh1KGgyKHQuYixtcixNdiksMTUpLG4pLCR3KHUoaDIodC5iLEJuLER2KSwxNSksbikscz1uSShvLHMsbmV3IHFYLHIpLCR3KHUoaDIodC5iLEJuLHBiKSwxNSksbiksJHcodShoMih0LmIsQm4sTXYpLDE1KSxuKX1mdW5jdGlvbiBLM24odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2Zvcih2cihlLCJMYXllciBzaXplIGNhbGN1bGF0aW9uIiwxKSxDPWFzLGs9Q3Mscz0hMSxkPW5ldyBTKHQuYik7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KEooZCksMjkpLHY9aC5jLHYuYT0wLHYuYj0wLGguYS5jLmxlbmd0aCE9MCl7Zm9yKHM9ITAsaj1uZXcgUyhoLmEpO2ouYTxqLmMuYy5sZW5ndGg7KU09dShKKGopLDEwKSxHPU0ubyxIPU0uZCx2LmE9Yi5NYXRoLm1heCh2LmEsRy5hK0guYitILmMpO3I9dShOZShoLmEsMCksMTApLEs9ci5uLmItci5kLmQsci5rPT0oVm4oKSxrcykmJihLLT11KFEodCwoVGUoKSxQTykpLDE0MikuZCksbz11KE5lKGguYSxoLmEuYy5sZW5ndGgtMSksMTApLG49by5uLmIrby5vLmIrby5kLmEsby5rPT1rcyYmKG4rPXUoUSh0LChUZSgpLFBPKSksMTQyKS5hKSx2LmI9bi1LLEM9Yi5NYXRoLm1pbihDLEspLGs9Yi5NYXRoLm1heChrLG4pfXN8fChDPTAsaz0wKSx0LmYuYj1rLUMsdC5jLmItPUMsb3IoZSl9ZnVuY3Rpb24gbXh0KHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndDtmb3Iobz0wLGg9MCxrPW5ldyBTKHQuYSk7ay5hPGsuYy5jLmxlbmd0aDspZD11KEooayksMTApLG89Yi5NYXRoLm1heChvLGQuZC5iKSxoPWIuTWF0aC5tYXgoaCxkLmQuYyk7Zm9yKHY9bmV3IFModC5hKTt2LmE8di5jLmMubGVuZ3RoOyl7c3dpdGNoKGQ9dShKKHYpLDEwKSxuPXUoUShkLChUZSgpLElkKSksMjQ4KSxuLmcpe2Nhc2UgMTpHPTA7YnJlYWs7Y2FzZSAyOkc9MTticmVhaztjYXNlIDU6Rz0uNTticmVhaztkZWZhdWx0OmZvcihyPTAsTT0wLEg9bmV3IFMoZC5qKTtILmE8SC5jLmMubGVuZ3RoOylqPXUoSihIKSwxMSksai5lLmMubGVuZ3RoPT0wfHwrK3Isai5nLmMubGVuZ3RoPT0wfHwrK007citNPT0wP0c9LjU6Rz1NLyhyK00pfXR0PXQuYyxDPWQuby5hLGd0PSh0dC5hLUMpKkcsRz4uNT9ndC09aCoyKihHLS41KTpHPC41JiYoZ3QrPW8qMiooLjUtRykpLHM9ZC5kLmIsZ3Q8cyYmKGd0PXMpLEs9ZC5kLmMsZ3Q+dHQuYS1LLUMmJihndD10dC5hLUstQyksZC5uLmE9ZStndH19ZnVuY3Rpb24gWDNuKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3IoZD1OdChhYSx2bywyNSx0LmMubGVuZ3RoLDE1LDEpLGo9bmV3IG4kKG5ldyBzQiksZTR0KGosdCksaz0wLEs9bmV3IGhlO2ouYi5jLmxlbmd0aCE9MDspaWYoaD11KGouYi5jLmxlbmd0aD09MD9udWxsOk5lKGouYiwwKSwxNTcpLGs+MSYmUnUoaCkqRWwoaCkvMj5kWzBdKXtmb3Iobz0wO288Sy5jLmxlbmd0aC0xJiZSdShoKSpFbChoKS8yPmRbb107KSsrbztHPW5ldyBRZChLLDAsbysxKSxNPW5ldyByeihHKSxDPVJ1KGgpL0VsKGgpLHY9emF0KE0sZSxuZXcgQ3gsbixyLHMsQyksTGkoR2YoTS5lKSx2KSxSOCh4RShqLE0pKSxIPW5ldyBRZChLLG8rMSxLLmMubGVuZ3RoKSxlNHQoaixIKSxLLmM9TnQoUW4sRGUsMSwwLDUsMSksaz0wLEFLdChkLGQubGVuZ3RoLDApfWVsc2UgdHQ9ai5iLmMubGVuZ3RoPT0wP251bGw6TmUoai5iLDApLHR0IT1udWxsJiZ2aXQoaiwwKSxrPjAmJihkW2tdPWRbay0xXSksZFtrXSs9UnUoaCkqRWwoaCksKytrLEsuY1tLLmMubGVuZ3RoXT1oO3JldHVybiBLfWZ1bmN0aW9uIFEzbih0KXt2YXIgZSxuLHIscyxvO2lmKHI9dShRKHQsKFRlKCksdXUpKSwxNjMpLHI9PShkaCgpLGJiKSl7Zm9yKG49bmV3IGFyKGxyKGpvKHQpLmEuS2MoKSxuZXcgeikpO3pyKG4pOylpZihlPXUoTXIobiksMTcpLCFqSnQoZSkpdGhyb3cgaXQobmV3IFIzKEtvdCtySSh0KSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIEZJUlNUX1NFUEFSQVRFLCBidXQgaGFzIGF0IGxlYXN0IG9uZSBpbmNvbWluZyBlZGdlLiBGSVJTVF9TRVBBUkFURSBub2RlcyBtdXN0IG5vdCBoYXZlIGluY29taW5nIGVkZ2VzLiIpKX1lbHNlIGlmKHI9PWp5KXtmb3Iobz1uZXcgYXIobHIoRHModCkuYS5LYygpLG5ldyB6KSk7enIobyk7KWlmKHM9dShNcihvKSwxNyksIWpKdChzKSl0aHJvdyBpdChuZXcgUjMoS290K3JJKHQpKyInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gTEFTVF9TRVBBUkFURSwgYnV0IGhhcyBhdCBsZWFzdCBvbmUgb3V0Z29pbmcgZWRnZS4gTEFTVF9TRVBBUkFURSBub2RlcyBtdXN0IG5vdCBoYXZlIG91dGdvaW5nIGVkZ2VzLiIpKX19ZnVuY3Rpb24gWjNuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEc7Zm9yKHZyKGUsIkxhYmVsIGR1bW15IHJlbW92YWwiLDEpLHI9WHQoeWUoUSh0LChUZSgpLFY2KSkpKSxzPVh0KHllKFEodCxXeSkpKSxrPXUoUSh0LFdsKSwxMDMpLHY9bmV3IFModC5iKTt2LmE8di5jLmMubGVuZ3RoOylmb3IoZD11KEoodiksMjkpLE09bmV3IGRhKGQuYSwwKTtNLmI8TS5kLmdjKCk7KUM9KFpuKE0uYjxNLmQuZ2MoKSksdShNLmQuWGIoTS5jPU0uYisrKSwxMCkpLEMuaz09KFZuKCksTGwpJiYoaj11KFEoQywoYWUoKSxfaSkpLDE3KSxHPVh0KHllKFEoaixKZykpKSxoPVZ0KFEoQyxqNikpPT09VnQoKHpsKCksa2IpKSxuPW5ldyB4byhDLm4pLGgmJihuLmIrPUcrciksbz1uZXcgJGUoQy5vLmEsQy5vLmItRy1yKSxIPXUoUShDLExPKSwxNSksaz09KGFvKCkscmcpfHxrPT1uZz9Pdm4oSCxuLHMsbyxoLGspOmdsbihILG4scyxvKSxMcyhqLmIsSCksQmF0KEMsVnQoUSh0LGVnKSk9PT1WdCgoVzAoKSxlUCkpKSxDbChNKSk7b3IoZSl9ZnVuY3Rpb24gSjNuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdDtmb3Iodj1uZXcgaGUsbz1uZXcgUyhlLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSwxMCksZD1uZXcgUyhzLmopO2QuYTxkLmMuYy5sZW5ndGg7KXtmb3IoaD11KEooZCksMTEpLEM9bnVsbCxTdD13ZChoLmcpLFJ0PTAsS3Q9U3QubGVuZ3RoO1J0PEt0OysrUnQpTXQ9U3RbUnRdLEo4KE10LmQuaSxuKXx8KGd0PVBhdCh0LGUsbixNdCxNdC5jLChzbygpLG51KSxDKSxndCE9QyYmKHYuY1t2LmMubGVuZ3RoXT1ndCksZ3QuYyYmKEM9Z3QpKTtmb3Ioaz1udWxsLEc9d2QoaC5lKSxLPTAsdHQ9Ry5sZW5ndGg7Szx0dDsrK0spSD1HW0tdLEo4KEguYy5pLG4pfHwoZ3Q9UGF0KHQsZSxuLEgsSC5kLChzbygpLHRsKSxrKSxndCE9ayYmKHYuY1t2LmMubGVuZ3RoXT1ndCksZ3QuYyYmKGs9Z3QpKX1mb3Ioaj1uZXcgUyh2KTtqLmE8ai5jLmMubGVuZ3RoOylNPXUoSihqKSw0NDEpLFJvKGUuYSxNLmEsMCkhPS0xfHxsZShlLmEsTS5hKSxNLmMmJihyLmNbci5jLmxlbmd0aF09TSl9ZnVuY3Rpb24gdDRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3IodnIobiwiSW50ZXJhY3RpdmUgY3ljbGUgYnJlYWtpbmciLDEpLE09bmV3IGhlLEg9bmV3IFMoZS5hKTtILmE8SC5jLmMubGVuZ3RoOylmb3Ioaj11KEooSCksMTApLGoucD0xLEc9YjR0KGopLmEsQz1vdihqLChzbygpLG51KSkuS2MoKTtDLk9iKCk7KWZvcihrPXUoQy5QYigpLDExKSxvPW5ldyBTKGsuZyk7by5hPG8uYy5jLmxlbmd0aDspcj11KEoobyksMTcpLEs9ci5kLmksSyE9aiYmKHR0PWI0dChLKS5hLHR0PEcmJihNLmNbTS5jLmxlbmd0aF09cikpO2ZvcihoPW5ldyBTKE0pO2guYTxoLmMuYy5sZW5ndGg7KXI9dShKKGgpLDE3KSxidihyLCEwKTtmb3IoTS5jPU50KFFuLERlLDEsMCw1LDEpLHY9bmV3IFMoZS5hKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSwxMCksZC5wPjAmJnNvZSh0LGQsTSk7Zm9yKHM9bmV3IFMoTSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLGJ2KHIsITApO00uYz1OdChRbixEZSwxLDAsNSwxKSxvcihuKX1mdW5jdGlvbiB0aGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7cmV0dXJuIGs9IiIsZS5sZW5ndGg9PTA/dC5kZSh6eHQsS2F0LC0xLC0xKTooQz1meShlKSxobihDLnN1YnN0cigwLDMpLCJhdCAiKSYmKEM9Qy5zdWJzdHIoMykpLEM9Qy5yZXBsYWNlKC9cWy4qP1xdL2csIiIpLGg9Qy5pbmRleE9mKCIoIiksaD09LTE/KGg9Qy5pbmRleE9mKCJAIiksaD09LTE/KGs9QyxDPSIiKTooaz1meShDLnN1YnN0cihoKzEpKSxDPWZ5KEMuc3Vic3RyKDAsaCkpKSk6KG49Qy5pbmRleE9mKCIpIixoKSxrPUMuc3Vic3RyKGgrMSxuLShoKzEpKSxDPWZ5KEMuc3Vic3RyKDAsaCkpKSxoPWhkKEMsQ3UoNDYpKSxoIT0tMSYmKEM9Qy5zdWJzdHIoaCsxKSksKEMubGVuZ3RoPT0wfHxobihDLCJBbm9ueW1vdXMgZnVuY3Rpb24iKSkmJihDPUthdCksZD1UaihrLEN1KDU4KSkscz1id3QoayxDdSg1OCksZC0xKSx2PS0xLHI9LTEsbz16eHQsZCE9LTEmJnMhPS0xJiYobz1rLnN1YnN0cigwLHMpLHY9eFd0KGsuc3Vic3RyKHMrMSxkLShzKzEpKSkscj14V3Qoay5zdWJzdHIoZCsxKSkpLHQuZGUobyxDLHYscikpfWZ1bmN0aW9uIHl4dCh0LGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKGUubD09MCYmZS5tPT0wJiZlLmg9PTApdGhyb3cgaXQobmV3IF9SKCJkaXZpZGUgYnkgemVybyIpKTtpZih0Lmw9PTAmJnQubT09MCYmdC5oPT0wKXJldHVybiBuJiYoaGI9aXUoMCwwLDApKSxpdSgwLDAsMCk7aWYoZS5oPT1OSSYmZS5tPT0wJiZlLmw9PTApcmV0dXJuIHBobih0LG4pO2lmKHY9ITEsZS5oPj4xOSYmKGU9ckUoZSksdj0hdiksaD1RMm4oZSksbz0hMSxzPSExLHI9ITEsdC5oPT1OSSYmdC5tPT0wJiZ0Lmw9PTApaWYocz0hMCxvPSEwLGg9PS0xKXQ9eVV0KChxOCgpLHNFdCkpLHI9ITAsdj0hdjtlbHNlIHJldHVybiBkPXY1dCh0LGgpLHYmJkFpdChkKSxuJiYoaGI9aXUoMCwwLDApKSxkO2Vsc2UgdC5oPj4xOSYmKG89ITAsdD1yRSh0KSxyPSEwLHY9IXYpO3JldHVybiBoIT0tMT9SdW4odCxoLHYsbyxuKTp1NHQodCxlKTwwPyhuJiYobz9oYj1yRSh0KTpoYj1pdSh0LmwsdC5tLHQuaCkpLGl1KDAsMCwwKSk6cW1uKHI/dDppdSh0LmwsdC5tLHQuaCksZSx2LG8scyxuKX1mdW5jdGlvbiBGcSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2lmKHQuZSYmdC5jLmM8dC5mKXRocm93IGl0KG5ldyBObygiRXhwZWN0ZWQgIit0LmYrIiBwaGFzZXMgdG8gYmUgY29uZmlndXJlZDsgb25seSBmb3VuZCAiK3QuYy5jKSk7Zm9yKEM9dShWZih0LmcpLDkpLEg9VWQodC5mKSxvPUMsZD0wLGs9by5sZW5ndGg7ZDxrOysrZClyPW9bZF0sTT11KEVEKHQsci5nKSwyNDYpLE0/bGUoSCx1KHlpZSh0LE0pLDEyMykpOkguY1tILmMubGVuZ3RoXT1udWxsO2ZvcihHPW5ldyBWcyxscyhSaSh3dShSaShuZXcgVG4obnVsbCxuZXcgX24oSCwxNikpLG5ldyBfWiksbmV3IGl6dChlKSksbmV3IFNaKSxuZXcgc3p0KEcpKSwkbChHLHQuYSksbj1uZXcgaGUscz1DLGg9MCx2PXMubGVuZ3RoO2g8djsrK2gpcj1zW2hdLExzKG4sc3JlKHQsYiQodShFRChHLHIuZyksMjApKSkpLGo9dShOZShILHIuZyksMTIzKSxqJiYobi5jW24uYy5sZW5ndGhdPWopO3JldHVybiBMcyhuLHNyZSh0LGIkKHUoRUQoRyxDW0MubGVuZ3RoLTFdLmcrMSksMjApKSkpLG59ZnVuY3Rpb24gZTRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3IodnIobiwiTW9kZWwgb3JkZXIgY3ljbGUgYnJlYWtpbmciLDEpLHQuYT0wLHQuYj0wLEg9bmV3IGhlLEM9ZS5hLmMubGVuZ3RoLGs9bmV3IFMoZS5hKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSwxMCksVXModiwoYWUoKSxUYykpJiYoQz1iLk1hdGgubWF4KEMsdShRKHYsVGMpLDE5KS5hKzEpKTtmb3IoSz1uZXcgUyhlLmEpO0suYTxLLmMuYy5sZW5ndGg7KWZvcihHPXUoSihLKSwxMCksaD1wb2UodCxHLEMpLGo9b3YoRywoc28oKSxudSkpLktjKCk7ai5PYigpOylmb3IoTT11KGouUGIoKSwxMSksbz1uZXcgUyhNLmcpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDE3KSx0dD1yLmQuaSxkPXBvZSh0LHR0LEMpLGQ8aCYmKEguY1tILmMubGVuZ3RoXT1yKTtmb3Iocz1uZXcgUyhIKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksYnYociwhMCksSnQoZSwoYWUoKSxfTyksKE5uKCksITApKTtILmM9TnQoUW4sRGUsMSwwLDUsMSksb3Iobil9ZnVuY3Rpb24gbjRuKHQsZSl7dmFyIG4scixzLG8saCxkLHY7aWYoISh0Lmc+ZS5mfHxlLmc+dC5mKSl7Zm9yKG49MCxyPTAsaD10LncuYS5lYygpLktjKCk7aC5PYigpOylzPXUoaC5QYigpLDExKSwkaXQoWW8obHQoY3QoV3MsMSksZWUsOCwwLFtzLmkubixzLm4scy5hXSkpLmIsZS5nLGUuZikmJisrbjtmb3IoZD10LnIuYS5lYygpLktjKCk7ZC5PYigpOylzPXUoZC5QYigpLDExKSwkaXQoWW8obHQoY3QoV3MsMSksZWUsOCwwLFtzLmkubixzLm4scy5hXSkpLmIsZS5nLGUuZikmJi0tbjtmb3Iodj1lLncuYS5lYygpLktjKCk7di5PYigpOylzPXUodi5QYigpLDExKSwkaXQoWW8obHQoY3QoV3MsMSksZWUsOCwwLFtzLmkubixzLm4scy5hXSkpLmIsdC5nLHQuZikmJisrcjtmb3Iobz1lLnIuYS5lYygpLktjKCk7by5PYigpOylzPXUoby5QYigpLDExKSwkaXQoWW8obHQoY3QoV3MsMSksZWUsOCwwLFtzLmkubixzLm4scy5hXSkpLmIsdC5nLHQuZikmJi0tcjtuPHI/bmV3IFIkKHQsZSxyLW4pOnI8bj9uZXcgUiQoZSx0LG4tcik6KG5ldyBSJChlLHQsMCksbmV3IFIkKHQsZSwwKSl9fWZ1bmN0aW9uIHI0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQ7Zm9yKGs9ZS5jLHM9ZDJ0KHQuZSksTT1mZChxTShuYyhmMnQodC5lKSksdC5kKnQuYSx0LmMqdC5iKSwtLjUpLG49cy5hLU0uYSxyPXMuYi1NLmIsaD1lLmEsbj1oLmMtbixyPWguZC1yLHY9bmV3IFMoayk7di5hPHYuYy5jLmxlbmd0aDspe3N3aXRjaChkPXUoSih2KSwzOTUpLGo9ZC5iLEg9bitqLmEsdHQ9citqLmIsRz1wcyhIL3QuYSksZ3Q9cHModHQvdC5iKSxvPWQuYSxvLmcpe2Nhc2UgMDpDPSh1NigpLGRPKTticmVhaztjYXNlIDE6Qz0odTYoKSxmTyk7YnJlYWs7Y2FzZSAyOkM9KHU2KCksZ08pO2JyZWFrO2RlZmF1bHQ6Qz0odTYoKSxwTyl9by5hPyhNdD1wcygodHQrZC5jKS90LmIpLGxlKHQuZixuZXcgVHd0KEMscGUoZ3QpLHBlKE10KSkpLG89PShjXygpLHdPKT9pRSh0LDAsZ3QsRyxNdCk6aUUodCxHLGd0LHQuZC0xLE10KSk6KEs9cHMoKEgrZC5jKS90LmEpLGxlKHQuZixuZXcgVHd0KEMscGUoRykscGUoSykpKSxvPT0oY18oKSxiTyk/aUUodCxHLDAsSyxndCk6aUUodCxHLGd0LEssdC5jLTEpKX19ZnVuY3Rpb24gaTRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdDtmb3Ioaj1uZXcgaGUscz1uZXcgaGUsSz1udWxsLGQ9ZS5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwxOSksbz1uZXcgQXAoaC5hKSxzLmNbcy5jLmxlbmd0aF09byxLJiYoby5kPUssSy5lPW8pLEs9bztmb3IoU3Q9RHluKHQpLEM9MDtDPHMuYy5sZW5ndGg7KytDKXtmb3IoSD1udWxsLHR0PUNtdCgoQW4oMCxzLmMubGVuZ3RoKSx1KHMuY1swXSw2NTIpKSksbj1udWxsLHI9YXMsTT0xO008dC5iLmMubGVuZ3RoOysrTSlndD10dD9iLk1hdGguYWJzKHR0LmItTSk6Yi5NYXRoLmFicyhNLUguYikrMSxHPUg/Yi5NYXRoLmFicyhNLUguYik6Z3QrMSxHPGd0PyhrPUgsdj1HKTooaz10dCx2PWd0KSxNdD0oUnQ9WHQoeWUoUSh0LChUZSgpLEM5dCkpKSksU3RbTV0rYi5NYXRoLnBvdyh2LFJ0KSksTXQ8ciYmKHI9TXQsbj1rLG4uYz1NKSx0dCYmTT09dHQuYiYmKEg9dHQsdHQ9bm5uKHR0KSk7biYmKGxlKGoscGUobi5jKSksbi5hPSEwLEdsbihuKSl9cmV0dXJuIHduKCksJG50KGouYyxqLmMubGVuZ3RoLG51bGwpLGp9ZnVuY3Rpb24gczRuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDO2ZvcihlPW5ldyBVYixuPW5ldyBVYixrPWhuKHJPLChzPWtfKHQuYixZcikscz9CcihYZigoIXMuYiYmKHMuYj1uZXcga2woKGRuKCksUWEpLGNjLHMpKSxzLmIpLE5oKSk6bnVsbCkpLHY9MDt2PHQuaTsrK3YpZD11KHQuZ1t2XSwxNzApLF90KGQsOTkpPyhoPXUoZCwxOCksaC5CYiZkYz8oIShoLkJiJm1kKXx8IWsmJihvPWtfKGgsWXIpLChvP0JyKFhmKCghby5iJiYoby5iPW5ldyBrbCgoZG4oKSxRYSksY2MsbykpLG8uYiksTUgpKTpudWxsKT09bnVsbCkpJiZEcihlLGgpOihDPW5vKGgpLEMmJkMuQmImZGN8fCghKGguQmImbWQpfHwhayYmKHI9a18oaCxZciksKHI/QnIoWGYoKCFyLmImJihyLmI9bmV3IGtsKChkbigpLFFhKSxjYyxyKSksci5iKSxNSCkpOm51bGwpPT1udWxsKSkmJkRyKG4saCkpKToodG8oKSx1KGQsNjYpLk9qKCkmJihkLkpqKCl8fChEcihlLGQpLERyKG4sZCkpKSk7aXkoZSksaXkobiksdC5hPXUoZS5nLDI0NyksdShuLmcsMjQ3KX1mdW5jdGlvbiBhNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2ZvcihrPVZnbihlKSxLPXUoUShlLChUZSgpLF9TKSksMzE0KSxLIT0objYoKSxQNikmJnZhKGssbmV3IGlkKSx0dD11KFEoZSxETyksMjkyKSx2YShrLG5ldyBoaSh0dCkpLEc9MCxDPW5ldyBoZSxvPW5ldyBPOShrKTtvLmEhPW8uYjspcz11KE16KG8pLDM3KSxkaGUodC5jLHMpLGo9dShRKHMsKGFlKCksS2x0KSksMTUpLEcrPWouZ2MoKSxyPWouS2MoKSxsZShDLG5ldyBmYShzLHIpKTtmb3IodnIobiwiUmVjdXJzaXZlIGhpZXJhcmNoaWNhbCBsYXlvdXQiLEcpLEg9dSh1KE5lKEMsQy5jLmxlbmd0aC0xKSw0NikuYiw0Nyk7SC5PYigpOylmb3Iodj1uZXcgUyhDKTt2LmE8di5jLmMubGVuZ3RoOylmb3IoZD11KEoodiksNDYpLGo9dShkLmIsNDcpLGg9dShkLmEsMzcpO2ouT2IoKTspaWYoTT11KGouUGIoKSw1MSksX3QoTSw1MDcpKXtpZihoLmUpYnJlYWs7TS5wZihoLFJjKG4sMSkpO2JyZWFrfWVsc2UgTS5wZihoLFJjKG4sMSkpO29yKG4pfWZ1bmN0aW9uIGVoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2lmKHY9ZS5sZW5ndGgtMSxkPShScih2LGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodikpLGQ9PTkzKXtpZihoPWhkKGUsQ3UoOTEpKSxoPj0wKXJldHVybiBzPW9obih0LGUuc3Vic3RyKDEsaC0xKSksQz1lLnN1YnN0cihoKzEsdi0oaCsxKSksbnhuKHQsQyxzKX1lbHNle2lmKG49LTEsbEV0PT1udWxsJiYobEV0PW5ldyBSZWdFeHAoIlxcZCIpKSxsRXQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGQpKSYmKG49Ynd0KGUsQ3UoNDYpLHYtMSksbj49MCkpe3I9dShVcnQodCxEZWUodCxlLnN1YnN0cigxLG4tMSkpLCExKSw1OCksaz0wO3RyeXtrPXFsKGUuc3Vic3RyKG4rMSksU2Esd2kpfWNhdGNoKGope3Rocm93IGo9V2koaiksX3QoaiwxMjcpPyhvPWosaXQobmV3IFckKG8pKSk6aXQoail9aWYoazxyLmdjKCkpcmV0dXJuIE09ci5YYihrKSxfdChNLDcyKSYmKE09dShNLDcyKS5kZCgpKSx1KE0sNTYpfWlmKG48MClyZXR1cm4gdShVcnQodCxEZWUodCxlLnN1YnN0cigxKSksITEpLDU2KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBDNCh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNO2lmKEdpKGUsbik+PTApcmV0dXJuIG47c3dpdGNoKEh3KFRvKHQsbikpKXtjYXNlIDI6e2lmKGhuKCIiLCRnKHQsbi5IaigpKS5uZSgpKSl7aWYodj1yRChUbyh0LG4pKSxkPU04KFRvKHQsbikpLEM9QzV0KHQsZSx2LGQpLEMpcmV0dXJuIEM7Zm9yKHM9WjV0KHQsZSksaD0wLE09cy5nYygpO2g8TTsrK2gpaWYoQz11KHMuWGIoaCksMTcwKSxPNXQoWG50KFRvKHQsQykpLHYpKXJldHVybiBDfXJldHVybiBudWxsfWNhc2UgNDp7aWYoaG4oIiIsJGcodCxuLkhqKCkpLm5lKCkpKXtmb3Iocj1uO3I7cj1yc24oVG8odCxyKSkpaWYoaz1yRChUbyh0LHIpKSxkPU04KFRvKHQscikpLEM9XzV0KHQsZSxrLGQpLEMpcmV0dXJuIEM7aWYodj1yRChUbyh0LG4pKSxobihPMix2KSlyZXR1cm4gZDR0KHQsZSk7Zm9yKG89dmF0KHQsZSksaD0wLE09by5nYygpO2g8TTsrK2gpaWYoQz11KG8uWGIoaCksMTcwKSxPNXQoWG50KFRvKHQsQykpLHYpKXJldHVybiBDfXJldHVybiBudWxsfWRlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG80bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQztpZihuLmdjKCk9PTApcmV0dXJuITE7aWYoZD0odG8oKSx1KGUsNjYpLk9qKCkpLG89ZD9uOm5ldyBRdyhuLmdjKCkpLFgwKHQuZSxlKSl7aWYoZS5oaSgpKWZvcihrPW4uS2MoKTtrLk9iKCk7KXY9ay5QYigpLE1xKHQsZSx2LF90KGUsOTkpJiYodShlLDE4KS5CYiZLYSkhPTApfHwocz1aZChlLHYpLG8uSGMocyl8fG8uRmMocykpO2Vsc2UgaWYoIWQpZm9yKGs9bi5LYygpO2suT2IoKTspdj1rLlBiKCkscz1aZChlLHYpLG8uRmMocyl9ZWxzZXtpZihuLmdjKCk+MSl0aHJvdyBpdChuZXcgRm4oYU8pKTtmb3IoQz1vdSh0LmUuVGcoKSxlKSxyPXUodC5nLDExOSksaD0wO2g8dC5pOysraClpZihzPXJbaF0sQy5ybChzLmFrKCkpKXtpZihuLkhjKGQ/czpzLmRkKCkpKXJldHVybiExO2ZvcihrPW4uS2MoKTtrLk9iKCk7KXY9ay5QYigpLHUoaDQodCxoLGQ/dSh2LDcyKTpaZChlLHYpKSw3Mik7cmV0dXJuITB9ZHx8KHM9WmQoZSxuLktjKCkuUGIoKSksby5GYyhzKSl9cmV0dXJuIGlzKHQsbyl9ZnVuY3Rpb24gYzRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2ZvcihDPW5ldyBaaSxkPShrPW5ldyB2MSh0LmMpLmEudmMoKS5LYygpLG5ldyBtMShrKSk7ZC5hLk9iKCk7KW89KHM9dShkLmEuUGIoKSw0MiksdShzLmRkKCksNDU4KSksby5iPT0wJiZmcyhDLG8sQy5jLmIsQy5jKTtmb3IoO0MuYiE9MDspZm9yKG89dShDLmI9PTA/bnVsbDooWm4oQy5iIT0wKSxsaChDLEMuYS5hKSksNDU4KSxvLmE9PW51bGwmJihvLmE9MCkscj1uZXcgUyhvLmQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDY1NCksbi5iLmE9PW51bGw/bi5iLmE9WHQoby5hKStuLmE6ZS5vPT0oQzEoKSxIMik/bi5iLmE9Yi5NYXRoLm1pbihYdChuLmIuYSksWHQoby5hKStuLmEpOm4uYi5hPWIuTWF0aC5tYXgoWHQobi5iLmEpLFh0KG8uYSkrbi5hKSwtLW4uYi5iLG4uYi5iPT0wJiZyaShDLG4uYik7Zm9yKGg9KHY9bmV3IHYxKHQuYykuYS52YygpLktjKCksbmV3IG0xKHYpKTtoLmEuT2IoKTspbz0ocz11KGguYS5QYigpLDQyKSx1KHMuZGQoKSw0NTgpKSxlLmlbby5jLnBdPW8uYX1mdW5jdGlvbiBmYygpe2ZjPVoscVM9bmV3IFZpKHc2dCksbmV3IFBzKCJERVBUSCIscGUoMCkpLE1HPW5ldyBQcygiRkFOIixwZSgwKSkscHllPW5ldyBQcyhZMWUscGUoMCkpLFh5PW5ldyBQcygiUk9PVCIsKE5uKCksITEpKSxSaHQ9bmV3IFBzKCJMRUZUTkVJR0hCT1IiLG51bGwpLGJ5ZT1uZXcgUHMoIlJJR0hUTkVJR0hCT1IiLG51bGwpLERHPW5ldyBQcygiTEVGVFNJQkxJTkciLG51bGwpLGpodD1uZXcgUHMoIlJJR0hUU0lCTElORyIsbnVsbCksQmh0PW5ldyBQcygiRFVNTVkiLCExKSxuZXcgUHMoIkxFVkVMIixwZSgwKSksYV90PW5ldyBQcygiUkVNT1ZBQkxFX0VER0VTIixuZXcgWmkpLCRodD1uZXcgUHMoIlhDT09SIixwZSgwKSksb190PW5ldyBQcygiWUNPT1IiLHBlKDApKSxJRz1uZXcgUHMoIkxFVkVMSEVJR0hUIiwwKSx6Uz1uZXcgUHMoIklEIiwiIiksT0c9bmV3IFBzKCJQT1NJVElPTiIscGUoMCkpLG5wPW5ldyBQcygiUFJFTElNIiwwKSxNNz1uZXcgUHMoIk1PRElGSUVSIiwwKSwkUz1uZXcgVmkoczFlKSx6Tz1uZXcgVmkoYTFlKX1mdW5jdGlvbiB1NG4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRztmb3IoQz1uK2UuYy5jLmEsSD1uZXcgUyhlLmopO0guYTxILmMuYy5sZW5ndGg7KXtpZihqPXUoSihIKSwxMSkscz1ZbyhsdChjdChXcywxKSxlZSw4LDAsW2ouaS5uLGoubixqLmFdKSksZS5rPT0oVm4oKSxIYykmJihkPXUoUShqLChhZSgpLF9pKSksMTEpLHMuYT1ZbyhsdChjdChXcywxKSxlZSw4LDAsW2QuaS5uLGQubixkLmFdKSkuYSxlLm4uYT1zLmEpLGg9bmV3ICRlKDAscy5iKSxqLmo9PSh2ZSgpLEhuKSloLmE9QztlbHNlIGlmKGouaj09Qm4paC5hPW47ZWxzZSBjb250aW51ZTtpZihHPWIuTWF0aC5hYnMocy5hLWguYSksIShHPD1yJiYhZGRuKGUpKSlmb3Iobz1qLmcuYy5sZW5ndGgrai5lLmMubGVuZ3RoPjEsaz1uZXcgTDEoai5iKTtHbyhrLmEpfHxHbyhrLmIpOyl2PXUoR28oay5hKT9KKGsuYSk6SihrLmIpLDE3KSxNPXYuYz09aj92LmQ6di5jLGIuTWF0aC5hYnMoWW8obHQoY3QoV3MsMSksZWUsOCwwLFtNLmkubixNLm4sTS5hXSkpLmItaC5iKT4xJiZldm4odCx2LGgsbyxqKX19ZnVuY3Rpb24gbDRuKHQpe3ZhciBlLG4scixzLG8saDtpZihzPW5ldyBkYSh0LmUsMCkscj1uZXcgZGEodC5hLDApLHQuZClmb3Iobj0wO248dC5iO24rKylabihzLmI8cy5kLmdjKCkpLHMuZC5YYihzLmM9cy5iKyspO2Vsc2UgZm9yKG49MDtuPHQuYi0xO24rKylabihzLmI8cy5kLmdjKCkpLHMuZC5YYihzLmM9cy5iKyspLENsKHMpO2ZvcihlPVh0KChabihzLmI8cy5kLmdjKCkpLHllKHMuZC5YYihzLmM9cy5iKyspKSkpO3QuZi1lPkxjdDspe2ZvcihvPWUsaD0wO2IuTWF0aC5hYnMoZS1vKTxMY3Q7KSsraCxlPVh0KChabihzLmI8cy5kLmdjKCkpLHllKHMuZC5YYihzLmM9cy5iKyspKSkpLFpuKHIuYjxyLmQuZ2MoKSksci5kLlhiKHIuYz1yLmIrKyk7aDx0LmImJihabihzLmI+MCkscy5hLlhiKHMuYz0tLXMuYiksU3luKHQsdC5iLWgsbyxyLHMpLFpuKHMuYjxzLmQuZ2MoKSkscy5kLlhiKHMuYz1zLmIrKykpLFpuKHIuYj4wKSxyLmEuWGIoci5jPS0tci5iKX1pZighdC5kKWZvcihuPTA7bjx0LmItMTtuKyspWm4ocy5iPHMuZC5nYygpKSxzLmQuWGIocy5jPXMuYisrKSxDbChzKTt0LmQ9ITAsdC5jPSEwfWZ1bmN0aW9uIElpKCl7SWk9WixFTHQ9KGZidCgpLHBjKS5iLEQ1ZT11KEF0KFd0KHBjLmIpLDApLDM0KSxYMj11KEF0KFd0KHBjLmIpLDEpLDM0KSxNNWU9dShBdChXdChwYy5iKSwyKSwzNCksaDU9cGMuYmIsdShBdChXdChwYy5iYiksMCksMzQpLHUoQXQoV3QocGMuYmIpLDEpLDM0KSxmNT1wYy5mYixsQT11KEF0KFd0KHBjLmZiKSwwKSwzNCksdShBdChXdChwYy5mYiksMSksMzQpLHUoQXQoV3QocGMuZmIpLDIpLDE4KSxXdj1wYy5xYixINWU9dShBdChXdChwYy5xYiksMCksMzQpLHUoQXQoV3QocGMucWIpLDEpLDE4KSx1KEF0KFd0KHBjLnFiKSwyKSwxOCksbVA9dShBdChXdChwYy5xYiksMyksMzQpLHlQPXUoQXQoV3QocGMucWIpLDQpLDM0KSxmQT11KEF0KFd0KHBjLnFiKSw2KSwzNCksaEE9dShBdChXdChwYy5xYiksNSksMTgpLEk1ZT1wYy5qLE81ZT1wYy5rLFA1ZT1wYy5xLEY1ZT1wYy53LE41ZT1wYy5CLEI1ZT1wYy5BLFI1ZT1wYy5DLGo1ZT1wYy5ELCQ1ZT1wYy5fLHo1ZT1wYy5jYixxNWU9cGMuaGJ9ZnVuY3Rpb24gaDRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixIO3QuYz0wLHQuYj0wLHI9MiplLmMuYS5jLmxlbmd0aCsxO3Q6Zm9yKE09bi5LYygpO00uT2IoKTspe2lmKEM9dShNLlBiKCksMTEpLGQ9Qy5qPT0odmUoKSxQbil8fEMuaj09bXIsSD0wLGQpe2lmKGo9dShRKEMsKGFlKCksSnUpKSwxMCksIWopY29udGludWU7SCs9SHZuKHQscixDLGopfWVsc2V7Zm9yKGs9bmV3IFMoQy5nKTtrLmE8ay5jLmMubGVuZ3RoOylpZih2PXUoSihrKSwxNykscz12LmQscy5pLmM9PWUuYyl7bGUodC5hLEMpO2NvbnRpbnVlIHR9ZWxzZSBIKz10Lmdbcy5wXTtmb3IoaD1uZXcgUyhDLmUpO2guYTxoLmMuYy5sZW5ndGg7KWlmKG89dShKKGgpLDE3KSxzPW8uYyxzLmkuYz09ZS5jKXtsZSh0LmEsQyk7Y29udGludWUgdH1lbHNlIEgtPXQuZ1tzLnBdfUMuZS5jLmxlbmd0aCtDLmcuYy5sZW5ndGg+MD8odC5mW0MucF09SC8oQy5lLmMubGVuZ3RoK0MuZy5jLmxlbmd0aCksdC5jPWIuTWF0aC5taW4odC5jLHQuZltDLnBdKSx0LmI9Yi5NYXRoLm1heCh0LmIsdC5mW0MucF0pKTpkJiYodC5mW0MucF09SCl9fWZ1bmN0aW9uIGY0bih0KXt0LmI9bnVsbCx0LmJiPW51bGwsdC5mYj1udWxsLHQucWI9bnVsbCx0LmE9bnVsbCx0LmM9bnVsbCx0LmQ9bnVsbCx0LmU9bnVsbCx0LmY9bnVsbCx0Lm49bnVsbCx0Lk09bnVsbCx0Lkw9bnVsbCx0LlE9bnVsbCx0LlI9bnVsbCx0Lks9bnVsbCx0LmRiPW51bGwsdC5lYj1udWxsLHQuZz1udWxsLHQuaT1udWxsLHQuaj1udWxsLHQuaz1udWxsLHQuZ2I9bnVsbCx0Lm89bnVsbCx0LnA9bnVsbCx0LnE9bnVsbCx0LnI9bnVsbCx0LiQ9bnVsbCx0LmliPW51bGwsdC5TPW51bGwsdC5UPW51bGwsdC50PW51bGwsdC5zPW51bGwsdC51PW51bGwsdC52PW51bGwsdC53PW51bGwsdC5CPW51bGwsdC5BPW51bGwsdC5DPW51bGwsdC5EPW51bGwsdC5GPW51bGwsdC5HPW51bGwsdC5IPW51bGwsdC5JPW51bGwsdC5KPW51bGwsdC5QPW51bGwsdC5aPW51bGwsdC5VPW51bGwsdC5WPW51bGwsdC5XPW51bGwsdC5YPW51bGwsdC5ZPW51bGwsdC5fPW51bGwsdC5hYj1udWxsLHQuY2I9bnVsbCx0LmhiPW51bGwsdC5uYj1udWxsLHQubGI9bnVsbCx0Lm1iPW51bGwsdC5vYj1udWxsLHQucGI9bnVsbCx0LmpiPW51bGwsdC5rYj1udWxsLHQuTj0hMSx0Lk89ITF9ZnVuY3Rpb24gZDRuKHQsZSxuKXt2YXIgcixzLG8saDtmb3IodnIobiwiR3JhcGggdHJhbnNmb3JtYXRpb24gKCIrdC5hKyIpIiwxKSxoPVd3KGUuYSksbz1uZXcgUyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDI5KSxMcyhoLHMuYSk7aWYocj11KFEoZSwoVGUoKSxVQ3QpKSw0MTkpLHI9PShMRCgpLEdWKSlzd2l0Y2godShRKGUsV2wpLDEwMykuZyl7Y2FzZSAyOkI5KGUsaCk7YnJlYWs7Y2FzZSAzOnNfKGUsaCk7YnJlYWs7Y2FzZSA0OnQuYT09KFg4KCkseU8pPyhzXyhlLGgpLE5ydChlLGgpKTooTnJ0KGUsaCksc18oZSxoKSl9ZWxzZSBpZih0LmE9PShYOCgpLHlPKSlzd2l0Y2godShRKGUsV2wpLDEwMykuZyl7Y2FzZSAyOkI5KGUsaCksTnJ0KGUsaCk7YnJlYWs7Y2FzZSAzOnNfKGUsaCksQjkoZSxoKTticmVhaztjYXNlIDQ6QjkoZSxoKSxzXyhlLGgpfWVsc2Ugc3dpdGNoKHUoUShlLFdsKSwxMDMpLmcpe2Nhc2UgMjpCOShlLGgpLE5ydChlLGgpO2JyZWFrO2Nhc2UgMzpCOShlLGgpLHNfKGUsaCk7YnJlYWs7Y2FzZSA0OnNfKGUsaCksQjkoZSxoKX1vcihuKX1mdW5jdGlvbiBnNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2ZvcihrPW5ldyBPMCxDPW5ldyBPMCxHPW5ldyBPMCxLPW5ldyBPMCx2PVh0KHllKFEoZSwoVGUoKSwkdikpKSksbz1YdCh5ZShRKGUsVGYpKSksZD1uZXcgUyhuKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoSihkKSwxMCksTT11KFEoaCwoYWUoKSxvYykpLDYxKSxNPT0odmUoKSxQbikpZm9yKEMuYS56YyhoLEMpLHM9bmV3IGFyKGxyKGpvKGgpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTXIocyksMTcpLEZzKGssci5jLmkpO2Vsc2UgaWYoTT09bXIpZm9yKEsuYS56YyhoLEspLHM9bmV3IGFyKGxyKGpvKGgpLmEuS2MoKSxuZXcgeikpO3pyKHMpOylyPXUoTXIocyksMTcpLEZzKEcsci5jLmkpO2suYS5nYygpIT0wJiYoaj1uZXcgZXJ0KDIsbyksSD1UeHQoaixlLGssQywtdi1lLmMuYiksSD4wJiYodC5hPXYrKEgtMSkqbyxlLmMuYis9dC5hLGUuZi5iKz10LmEpKSxHLmEuZ2MoKSE9MCYmKGo9bmV3IGVydCgxLG8pLEg9VHh0KGosZSxHLEssZS5mLmIrdi1lLmMuYiksSD4wJiYoZS5mLmIrPXYrKEgtMSkqbykpfWZ1bmN0aW9uIE9FKHQsZSl7dmFyIG4scixzLG87bz10LkYsZT09bnVsbD8odC5GPW51bGwsYUUodCxudWxsKSk6KHQuRj0oT24oZSksZSkscj1oZChlLEN1KDYwKSksciE9LTE/KHM9ZS5zdWJzdHIoMCxyKSxoZChlLEN1KDQ2KSk9PS0xJiYhaG4ocyxiNikmJiFobihzLHRTKSYmIWhuKHMsRkgpJiYhaG4ocyxlUykmJiFobihzLG5TKSYmIWhuKHMsclMpJiYhaG4ocyxpUykmJiFobihzLHNTKSYmKHM9JDBlKSxuPVRqKGUsQ3UoNjIpKSxuIT0tMSYmKHMrPSIiK2Uuc3Vic3RyKG4rMSkpLGFFKHQscykpOihzPWUsaGQoZSxDdSg0NikpPT0tMSYmKHI9aGQoZSxDdSg5MSkpLHIhPS0xJiYocz1lLnN1YnN0cigwLHIpKSwhaG4ocyxiNikmJiFobihzLHRTKSYmIWhuKHMsRkgpJiYhaG4ocyxlUykmJiFobihzLG5TKSYmIWhuKHMsclMpJiYhaG4ocyxpUykmJiFobihzLHNTKT8ocz0kMGUsciE9LTEmJihzKz0iIitlLnN1YnN0cihyKSkpOnM9ZSksYUUodCxzKSxzPT1lJiYodC5GPXQuRCkpKSx0LkRiJjQmJiEodC5EYiYxKSYmbWkodCxuZXcgSnModCwxLDUsbyxlKSl9ZnVuY3Rpb24gcDRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdDtpZihLPWUuYi5jLmxlbmd0aCwhKEs8Mykpe2ZvcihIPU50KENyLFhyLDI1LEssMTUsMSksTT0wLEM9bmV3IFMoZS5iKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSwyOSksSFtNKytdPWsuYS5jLmxlbmd0aDtmb3Ioaj1uZXcgZGEoZS5iLDIpLHI9MTtyPEstMTtyKyspZm9yKG49KFpuKGouYjxqLmQuZ2MoKSksdShqLmQuWGIoai5jPWouYisrKSwyOSkpLEc9bmV3IFMobi5hKSxvPTAsZD0wLHY9MDt2PEhbcisxXTt2KyspaWYoU3Q9dShKKEcpLDEwKSx2PT1IW3IrMV0tMXx8RzR0KHQsU3QscisxLHIpKXtmb3IoaD1IW3JdLTEsRzR0KHQsU3QscisxLHIpJiYoaD10LmMuZVt1KHUodShOZSh0LmMuYixTdC5wKSwxNSkuWGIoMCksNDYpLmEsMTApLnBdKTtkPD12Oyl7aWYoTXQ9dShOZShuLmEsZCksMTApLCFHNHQodCxNdCxyKzEscikpZm9yKGd0PXUoTmUodC5jLmIsTXQucCksMTUpLktjKCk7Z3QuT2IoKTspdHQ9dShndC5QYigpLDQ2KSxzPXQuYy5lW3UodHQuYSwxMCkucF0sKHM8b3x8cz5oKSYmRnModC5iLHUodHQuYiwxNykpOysrZH1vPWh9fX1mdW5jdGlvbiB4eHQodCxlKXt2YXIgbjtpZihlPT1udWxsfHxobihlLF91KXx8ZS5sZW5ndGg9PTAmJnQuayE9KFVnKCksVTYpKXJldHVybiBudWxsO3N3aXRjaCh0LmsuZyl7Y2FzZSAxOnJldHVybiBWeihlLFhFKT8oTm4oKSxyNyk6VnooZSxWY3QpPyhObigpLEYyKTpudWxsO2Nhc2UgMjp0cnl7cmV0dXJuIHBlKHFsKGUsU2Esd2kpKX1jYXRjaChyKXtpZihyPVdpKHIpLF90KHIsMTI3KSlyZXR1cm4gbnVsbDt0aHJvdyBpdChyKX1jYXNlIDQ6dHJ5e3JldHVybiBkeShlKX1jYXRjaChyKXtpZihyPVdpKHIpLF90KHIsMTI3KSlyZXR1cm4gbnVsbDt0aHJvdyBpdChyKX1jYXNlIDM6cmV0dXJuIGU7Y2FzZSA1OnJldHVybiBScmUodCksVm9lKHQsZSk7Y2FzZSA2OnJldHVybiBScmUodCksQzJuKHQsdC5hLGUpO2Nhc2UgNzp0cnl7cmV0dXJuIG49QmJuKHQpLG4uSmYoZSksbn1jYXRjaChyKXtpZihyPVdpKHIpLF90KHIsMzIpKXJldHVybiBudWxsO3Rocm93IGl0KHIpfWRlZmF1bHQ6dGhyb3cgaXQobmV3IE5vKCJJbnZhbGlkIHR5cGUgc2V0IGZvciB0aGlzIGxheW91dCBvcHRpb24uIikpfX1mdW5jdGlvbiBiNG4odCl7SDkoKTt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZD1uZXcgcHF0LG49bmV3IFModCk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTQwKSwoIWQuYnx8ZS5jPj1kLmIuYykmJihkLmI9ZSksKCFkLmN8fGUuYzw9ZC5jLmMpJiYoZC5kPWQuYyxkLmM9ZSksKCFkLmV8fGUuZD49ZC5lLmQpJiYoZC5lPWUpLCghZC5mfHxlLmQ8PWQuZi5kKSYmKGQuZj1lKTtyZXR1cm4gcj1uZXcgWXooKG5FKCksTHYpKSxoRCh0LFViZSxuZXcgeWwobHQoY3QobU8sMSksRGUsMzY5LDAsW3JdKSkpLGg9bmV3IFl6KEZ5KSxoRCh0LEdiZSxuZXcgeWwobHQoY3QobU8sMSksRGUsMzY5LDAsW2hdKSkpLHM9bmV3IFl6KFB5KSxoRCh0LFZiZSxuZXcgeWwobHQoY3QobU8sMSksRGUsMzY5LDAsW3NdKSkpLG89bmV3IFl6KHo0KSxoRCh0LEhiZSxuZXcgeWwobHQoY3QobU8sMSksRGUsMzY5LDAsW29dKSkpLGFhdChyLmMsTHYpLGFhdChzLmMsUHkpLGFhdChvLmMsejQpLGFhdChoLmMsRnkpLGQuYS5jPU50KFFuLERlLDEsMCw1LDEpLExzKGQuYSxyLmMpLExzKGQuYSxsMihzLmMpKSxMcyhkLmEsby5jKSxMcyhkLmEsbDIoaC5jKSksZH1mdW5jdGlvbiBreHQodCl7dmFyIGU7c3dpdGNoKHQuZCl7Y2FzZSAxOntpZih0LmhqKCkpcmV0dXJuIHQubyE9LTI7YnJlYWt9Y2FzZSAyOntpZih0LmhqKCkpcmV0dXJuIHQubz09LTI7YnJlYWt9Y2FzZSAzOmNhc2UgNTpjYXNlIDQ6Y2FzZSA2OmNhc2UgNzpyZXR1cm4gdC5vPi0yO2RlZmF1bHQ6cmV0dXJuITF9c3dpdGNoKGU9dC5naigpLHQucCl7Y2FzZSAwOnJldHVybiBlIT1udWxsJiZqZShSZShlKSkhPXU5KHQuaywwKTtjYXNlIDE6cmV0dXJuIGUhPW51bGwmJnUoZSwyMTcpLmEhPUFyKHQuayk8PDI0Pj4yNDtjYXNlIDI6cmV0dXJuIGUhPW51bGwmJnUoZSwxNzIpLmEhPShBcih0LmspJnlzKTtjYXNlIDY6cmV0dXJuIGUhPW51bGwmJnU5KHUoZSwxNjIpLmEsdC5rKTtjYXNlIDU6cmV0dXJuIGUhPW51bGwmJnUoZSwxOSkuYSE9QXIodC5rKTtjYXNlIDc6cmV0dXJuIGUhPW51bGwmJnUoZSwxODQpLmEhPUFyKHQuayk8PDE2Pj4xNjtjYXNlIDM6cmV0dXJuIGUhPW51bGwmJlh0KHllKGUpKSE9dC5qO2Nhc2UgNDpyZXR1cm4gZSE9bnVsbCYmdShlLDE1NSkuYSE9dC5qO2RlZmF1bHQ6cmV0dXJuIGU9PW51bGw/dC5uIT1udWxsOiF5aShlLHQubil9fWZ1bmN0aW9uIEFJKHQsZSxuKXt2YXIgcixzLG8saDtyZXR1cm4gdC5GaygpJiZ0LkVrKCkmJihoPVdudCh0LHUobiw1NikpLFZ0KGgpIT09VnQobikpPyh0Lk9pKGUpLHQuVWkoZSxJdGUodCxlLGgpKSx0LnJrKCkmJihvPShzPXUobiw0OSksdC5EaygpP3QuQmsoKT9zLmloKHQuYixubyh1KHluKHZ1KHQuYiksdC5haigpKSwxOCkpLm4sdSh5bih2dSh0LmIpLHQuYWooKSkuWWooKSwyNikuQmooKSxudWxsKTpzLmloKHQuYixHaShzLlRnKCksbm8odSh5bih2dSh0LmIpLHQuYWooKSksMTgpKSksbnVsbCxudWxsKTpzLmloKHQuYiwtMS10LmFqKCksbnVsbCxudWxsKSksIXUoaCw0OSkuZWgoKSYmKG89KHI9dShoLDQ5KSx0LkRrKCk/dC5CaygpP3IuZ2godC5iLG5vKHUoeW4odnUodC5iKSx0LmFqKCkpLDE4KSkubix1KHluKHZ1KHQuYiksdC5haigpKS5ZaigpLDI2KS5CaigpLG8pOnIuZ2godC5iLEdpKHIuVGcoKSxubyh1KHluKHZ1KHQuYiksdC5haigpKSwxOCkpKSxudWxsLG8pOnIuZ2godC5iLC0xLXQuYWooKSxudWxsLG8pKSksbyYmby5GaSgpKSx4bCh0LmIpJiZ0LiRpKHQuWmkoOSxuLGgsZSwhMSkpLGgpOm59ZnVuY3Rpb24gbmhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdDtmb3IoQz1YdCh5ZShRKHQsKFRlKCksanYpKSkpLHI9WHQoeWUoUSh0LHg5dCkpKSxqPW5ldyBZdSxKdChqLGp2LEMrciksaz1lLGd0PWsuZCxLPWsuYy5pLE10PWsuZC5pLHR0PW8ydChLLmMpLFN0PW8ydChNdC5jKSxzPW5ldyBoZSxNPXR0O008PVN0O00rKylkPW5ldyBZMCh0KSxEMChkLChWbigpLHRhKSksSnQoZCwoYWUoKSxfaSksayksSnQoZCxjcywodWEoKSxHYykpLEp0KGQsYkcsaiksSD11KE5lKHQuYixNKSwyOSksTT09dHQ/bHkoZCxILmEuYy5sZW5ndGgtbixIKTpFbyhkLEgpLFJ0PVh0KHllKFEoayxKZykpKSxSdDwwJiYoUnQ9MCxKdChrLEpnLFJ0KSksZC5vLmI9UnQsRz1iLk1hdGguZmxvb3IoUnQvMiksaD1uZXcgTWMsQnMoaCwodmUoKSxCbikpLFVvKGgsZCksaC5uLmI9Ryx2PW5ldyBNYyxCcyh2LEhuKSxVbyh2LGQpLHYubi5iPUcsb2EoayxoKSxvPW5ldyBWdyxNbyhvLGspLEp0KG8sU28sbnVsbCksT2Eobyx2KSxvYShvLGd0KSxtZG4oZCxrLG8pLHMuY1tzLmMubGVuZ3RoXT1vLGs9bztyZXR1cm4gc31mdW5jdGlvbiBCYXQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0O2Zvcih2PXUoR2codCwodmUoKSxCbikpLktjKCkuUGIoKSwxMSkuZSxIPXUoR2codCxIbikuS2MoKS5QYigpLDExKS5nLGQ9di5jLmxlbmd0aCxTdD1fMSh1KE5lKHQuaiwwKSwxMSkpO2QtLSA+MDspe2ZvcihLPShBbigwLHYuYy5sZW5ndGgpLHUodi5jWzBdLDE3KSkscz0oQW4oMCxILmMubGVuZ3RoKSx1KEguY1swXSwxNykpLE10PXMuZC5lLG89Um8oTXQscywwKSxFc24oSyxzLmQsbyksT2EocyxudWxsKSxvYShzLG51bGwpLEc9Sy5hLGUmJnJpKEcsbmV3IHhvKFN0KSkscj1laShzLmEsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDgpLHJpKEcsbmV3IHhvKG4pKTtmb3IoZ3Q9Sy5iLGo9bmV3IFMocy5iKTtqLmE8ai5jLmMubGVuZ3RoOylNPXUoSihqKSw3MCksZ3QuY1tndC5jLmxlbmd0aF09TTtpZih0dD11KFEoSywoVGUoKSxTbykpLDc0KSxoPXUoUShzLFNvKSw3NCksaClmb3IodHR8fCh0dD1uZXcgUHUsSnQoSyxTbyx0dCkpLEM9ZWkoaCwwKTtDLmIhPUMuZC5jOylrPXUodGkoQyksOCkscmkodHQsbmV3IHhvKGspKX19ZnVuY3Rpb24gcmhlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixIO2lmKG49dShwbyh0LmIsZSksMTI0KSx2PXUodShBaSh0LnIsZSksMjEpLDg0KSx2LmRjKCkpe24ubi5iPTAsbi5uLmM9MDtyZXR1cm59Zm9yKGs9dC51LkhjKChadSgpLHNnKSksaD0wLGQ9di5LYygpLEM9bnVsbCxNPTAsaj0wO2QuT2IoKTspcj11KGQuUGIoKSwxMTEpLHM9WHQoeWUoci5iLldlKChDaigpLHVWKSkpKSxvPXIuYi5yZigpLmEsdC5BLkhjKChBbCgpLEsyKSkmJk51ZSh0LGUpLEM/KEg9aitDLmQuYyt0Lncrci5kLmIsaD1iLk1hdGgubWF4KGgsKGsxKCksd2YoQjEpLGIuTWF0aC5hYnMoTS1zKTw9QjF8fE09PXN8fGlzTmFOKE0pJiZpc05hTihzKT8wOkgvKHMtTSkpKSk6dC5DJiZ0LkMuYj4wJiYoaD1iLk1hdGgubWF4KGgsTW5lKHQuQy5iK3IuZC5iLHMpKSksQz1yLE09cyxqPW87dC5DJiZ0LkMuYz4wJiYoSD1qK3QuQy5jLGsmJihIKz1DLmQuYyksaD1iLk1hdGgubWF4KGgsKGsxKCksd2YoQjEpLGIuTWF0aC5hYnMoTS0xKTw9QjF8fE09PTF8fGlzTmFOKE0pJiZpc05hTigxKT8wOkgvKDEtTSkpKSksbi5uLmI9MCxuLmEuYT1ofWZ1bmN0aW9uIGloZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSDtpZihuPXUocG8odC5iLGUpLDEyNCksdj11KHUoQWkodC5yLGUpLDIxKSw4NCksdi5kYygpKXtuLm4uZD0wLG4ubi5hPTA7cmV0dXJufWZvcihrPXQudS5IYygoWnUoKSxzZykpLGg9MCx0LkEuSGMoKEFsKCksSzIpKSYmQnVlKHQsZSksZD12LktjKCksQz1udWxsLGo9MCxNPTA7ZC5PYigpOylyPXUoZC5QYigpLDExMSksbz1YdCh5ZShyLmIuV2UoKENqKCksdVYpKSkpLHM9ci5iLnJmKCkuYixDPyhIPU0rQy5kLmErdC53K3IuZC5kLGg9Yi5NYXRoLm1heChoLChrMSgpLHdmKEIxKSxiLk1hdGguYWJzKGotbyk8PUIxfHxqPT1vfHxpc05hTihqKSYmaXNOYU4obyk/MDpILyhvLWopKSkpOnQuQyYmdC5DLmQ+MCYmKGg9Yi5NYXRoLm1heChoLE1uZSh0LkMuZCtyLmQuZCxvKSkpLEM9cixqPW8sTT1zO3QuQyYmdC5DLmE+MCYmKEg9TSt0LkMuYSxrJiYoSCs9Qy5kLmEpLGg9Yi5NYXRoLm1heChoLChrMSgpLHdmKEIxKSxiLk1hdGguYWJzKGotMSk8PUIxfHxqPT0xfHxpc05hTihqKSYmaXNOYU4oMSk/MDpILygxLWopKSkpLG4ubi5kPTAsbi5hLmI9aH1mdW5jdGlvbiBzaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdjtmb3IodGhpcy5nPXQsZD1lLmQubGVuZ3RoLHY9bi5kLmxlbmd0aCx0aGlzLmQ9TnQobDAsWWcsMTAsZCt2LDAsMSksaD0wO2g8ZDtoKyspdGhpcy5kW2hdPWUuZFtoXTtmb3Iobz0wO288djtvKyspdGhpcy5kW2Qrb109bi5kW29dO2lmKGUuZSl7aWYodGhpcy5lPVFNKGUuZSksdGhpcy5lLk1jKG4pLG4uZSlmb3Iocz1uLmUuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMjMzKSxyIT1lJiYodGhpcy5lLkhjKHIpPy0tci5jOnRoaXMuZS5GYyhyKSl9ZWxzZSBuLmUmJih0aGlzLmU9UU0obi5lKSx0aGlzLmUuTWMoZSkpO3RoaXMuZj1lLmYrbi5mLHRoaXMuYT1lLmErbi5hLHRoaXMuYT4wP2xpdCh0aGlzLHRoaXMuZi90aGlzLmEpOkUxKGUuZyxlLmRbMF0pLmEhPW51bGwmJkUxKG4uZyxuLmRbMF0pLmEhPW51bGw/bGl0KHRoaXMsKFh0KEUxKGUuZyxlLmRbMF0pLmEpK1h0KEUxKG4uZyxuLmRbMF0pLmEpKS8yKTpFMShlLmcsZS5kWzBdKS5hIT1udWxsP2xpdCh0aGlzLEUxKGUuZyxlLmRbMF0pLmEpOkUxKG4uZyxuLmRbMF0pLmEhPW51bGwmJmxpdCh0aGlzLEUxKG4uZyxuLmRbMF0pLmEpfWZ1bmN0aW9uIHc0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2Zvcih0LmE9bmV3IGRYdChVY24oWFMpKSxyPW5ldyBTKGUuYSk7ci5hPHIuYy5jLmxlbmd0aDspe2ZvcihuPXUoSihyKSw4NDEpLGQ9bmV3IG9zdChsdChjdChhbHQsMSksRGUsODEsMCxbXSkpLGxlKHQuYS5hLGQpLGs9bmV3IFMobi5kKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSwxMTApLEM9bmV3IEYydCh0LHYpLEN4dChDLHUoUShuLmMsKGFlKCksQnkpKSwyMSkpLFRsKHQuZyxuKXx8KGtpKHQuZyxuLG5ldyAkZSh2LmMsdi5kKSksa2kodC5mLG4sQykpLGxlKHQuYS5iLEMpLFBydChkLEMpO2ZvcihoPW5ldyBTKG4uYik7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksNTk0KSxDPW5ldyBGMnQodCxvLmtmKCkpLGtpKHQuYixvLG5ldyBmYShkLEMpKSxDeHQoQyx1KFEobi5jLChhZSgpLEJ5KSksMjEpKSxvLmhmKCkmJihNPW5ldyBOM3QodCxvLmhmKCksMSksQ3h0KE0sdShRKG4uYyxCeSksMjEpKSxzPW5ldyBvc3QobHQoY3QoYWx0LDEpLERlLDgxLDAsW10pKSxQcnQocyxNKSxsbih0LmMsby5nZigpLG5ldyBmYShkLE0pKSl9cmV0dXJuIHQuYX1mdW5jdGlvbiBhaGUodCl7dmFyIGU7dGhpcy5hPXQsZT0oVm4oKSxsdChjdChmbHQsMSksb2UsMjY3LDAsW09zLHRhLGtzLEhjLExsLHoxXSkpLmxlbmd0aCx0aGlzLmI9dDIoY2Z0LFtlZSx6a3RdLFs1OTMsMTQ2XSwwLFtlLGVdLDIpLHRoaXMuYz10MihjZnQsW2VlLHprdF0sWzU5MywxNDZdLDAsW2UsZV0sMikseXJ0KHRoaXMsT3MsKFRlKCksJHYpLHQ1KSxYOSh0aGlzLE9zLHRhLGp2LHEyKSxhRCh0aGlzLE9zLEhjLGp2KSxhRCh0aGlzLE9zLGtzLGp2KSxYOSh0aGlzLE9zLExsLCR2LHQ1KSx5cnQodGhpcyx0YSxUZixKNCksYUQodGhpcyx0YSxIYyxUZiksYUQodGhpcyx0YSxrcyxUZiksWDkodGhpcyx0YSxMbCxqdixxMiksUFV0KHRoaXMsSGMsVGYpLGFEKHRoaXMsSGMsa3MsVGYpLGFEKHRoaXMsSGMsTGwsaGh0KSxQVXQodGhpcyxrcyxMUyksWDkodGhpcyxrcyxMbCxBNyxTNykseXJ0KHRoaXMsTGwsVGYsVGYpLHlydCh0aGlzLHoxLFRmLEo0KSxYOSh0aGlzLHoxLE9zLGp2LHEyKSxYOSh0aGlzLHoxLExsLGp2LHEyKSxYOSh0aGlzLHoxLHRhLGp2LHEyKX1mdW5jdGlvbiB2NG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2lmKGg9bi5haygpLF90KGgsOTkpJiZ1KGgsMTgpLkJiJkthJiYoaj11KG4uZGQoKSw0OSksSz1acCh0LmUsaiksSyE9aikpe2lmKEM9WmQoaCxLKSxwOSh0LGUsUnN0KHQsZSxDKSksTT1udWxsLHhsKHQuZSkmJihyPUM0KCgkdSgpLHlhKSx0LmUuVGcoKSxoKSxyIT15bih0LmUuVGcoKSx0LmMpKSl7Zm9yKHR0PW91KHQuZS5UZygpLGgpLGQ9MCxvPXUodC5nLDExOSksdj0wO3Y8ZTsrK3Ypcz1vW3ZdLHR0LnJsKHMuYWsoKSkmJisrZDtNPW5ldyBqcnQodC5lLDkscixqLEssZCwhMSksTS5FaShuZXcgejAodC5lLDksdC5jLG4sQyxlLCExKSl9cmV0dXJuIEc9dShoLDE4KSxIPW5vKEcpLEg/KE09ai5paCh0LmUsR2koai5UZygpLEgpLG51bGwsTSksTT11KEssNDkpLmdoKHQuZSxHaShLLlRnKCksSCksbnVsbCxNKSk6Ry5CYiZkYyYmKGs9LTEtR2kodC5lLlRnKCksRyksTT1qLmloKHQuZSxrLG51bGwsbnVsbCksIXUoSyw0OSkuZWgoKSYmKE09dShLLDQ5KS5naCh0LmUsayxudWxsLE0pKSksTSYmTS5GaSgpLEN9cmV0dXJuIG59ZnVuY3Rpb24gbTRuKHQpe3ZhciBlLG4scixzLG8saCxkLHY7Zm9yKG89bmV3IFModC5hLmIpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDgxKSxzLmIuYz1zLmcuYyxzLmIuZD1zLmcuZDtmb3Iodj1uZXcgJGUoYXMsYXMpLGU9bmV3ICRlKENzLENzKSxyPW5ldyBTKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw4MSksdi5hPWIuTWF0aC5taW4odi5hLG4uZy5jKSx2LmI9Yi5NYXRoLm1pbih2LmIsbi5nLmQpLGUuYT1iLk1hdGgubWF4KGUuYSxuLmcuYytuLmcuYiksZS5iPWIuTWF0aC5tYXgoZS5iLG4uZy5kK24uZy5hKTtmb3IoZD1hJCh0LmMpLmEubmMoKTtkLk9iKCk7KWg9dShkLlBiKCksNDYpLG49dShoLmIsODEpLHYuYT1iLk1hdGgubWluKHYuYSxuLmcuYyksdi5iPWIuTWF0aC5taW4odi5iLG4uZy5kKSxlLmE9Yi5NYXRoLm1heChlLmEsbi5nLmMrbi5nLmIpLGUuYj1iLk1hdGgubWF4KGUuYixuLmcuZCtuLmcuYSk7dC5kPU1qKG5ldyAkZSh2LmEsdi5iKSksdC5lPWlhKG5ldyAkZShlLmEsZS5iKSx2KSx0LmEuYS5jPU50KFFuLERlLDEsMCw1LDEpLHQuYS5iLmM9TnQoUW4sRGUsMSwwLDUsMSl9ZnVuY3Rpb24geTRuKHQpe3ZhciBlLG4scjtmb3IobzQoQWIsbHQoY3QoJDQsMSksRGUsMTMwLDAsW25ldyBUcF0pKSxuPW5ldyB3eCh0KSxyPTA7cjxuLmEubGVuZ3RoOysrcillPUptKG4scikuamUoKS5hLGhuKGUsImxheWVyZWQiKT9vNChBYixsdChjdCgkNCwxKSxEZSwxMzAsMCxbbmV3IHJ0dF0pKTpobihlLCJmb3JjZSIpP280KEFiLGx0KGN0KCQ0LDEpLERlLDEzMCwwLFtuZXcgSEpdKSk6aG4oZSwic3RyZXNzIik/bzQoQWIsbHQoY3QoJDQsMSksRGUsMTMwLDAsW25ldyBWSl0pKTpobihlLCJtcnRyZWUiKT9vNChBYixsdChjdCgkNCwxKSxEZSwxMzAsMCxbbmV3IEQzXSkpOmhuKGUsInJhZGlhbCIpP280KEFiLGx0KGN0KCQ0LDEpLERlLDEzMCwwLFtuZXcgdXR0XSkpOmhuKGUsImRpc2NvIik/bzQoQWIsbHQoY3QoJDQsMSksRGUsMTMwLDAsW25ldyBRTCxuZXcgcUpdKSk6aG4oZSwic3BvcmVPdmVybGFwIil8fGhuKGUsInNwb3JlQ29tcGFjdGlvbiIpP280KEFiLGx0KGN0KCQ0LDEpLERlLDEzMCwwLFtuZXcgWUJdKSk6aG4oZSwicmVjdHBhY2tpbmciKSYmbzQoQWIsbHQoY3QoJDQsMSksRGUsMTMwLDAsW25ldyBYQl0pKX1mdW5jdGlvbiBvaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0O2lmKGo9bmV3IHhvKHQubyksZ3Q9ZS5hL2ouYSxkPWUuYi9qLmIsSz1lLmEtai5hLG89ZS5iLWouYixuKWZvcihzPVZ0KFEodCwoVGUoKSxjcykpKT09PVZ0KCh1YSgpLEdjKSksRz1uZXcgUyh0LmopO0cuYTxHLmMuYy5sZW5ndGg7KXN3aXRjaChIPXUoSihHKSwxMSksSC5qLmcpe2Nhc2UgMTpzfHwoSC5uLmEqPWd0KTticmVhaztjYXNlIDI6SC5uLmErPUssc3x8KEgubi5iKj1kKTticmVhaztjYXNlIDM6c3x8KEgubi5hKj1ndCksSC5uLmIrPW87YnJlYWs7Y2FzZSA0OnN8fChILm4uYio9ZCl9Zm9yKGs9bmV3IFModC5iKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSw3MCksQz12Lm4uYSt2Lm8uYS8yLE09di5uLmIrdi5vLmIvMix0dD1DL2ouYSxoPU0vai5iLHR0K2g+PTEmJih0dC1oPjAmJk0+PTA/KHYubi5hKz1LLHYubi5iKz1vKmgpOnR0LWg8MCYmQz49MCYmKHYubi5hKz1LKnR0LHYubi5iKz1vKSk7dC5vLmE9ZS5hLHQuby5iPWUuYixKdCh0LChUZSgpLCQyKSwoQWwoKSxyPXUoVmYockEpLDkpLG5ldyBzaChyLHUoZmYocixyLmxlbmd0aCksOSksMCkpKX1mdW5jdGlvbiB4NG4odCxlLG4scixzLG8pe3ZhciBoO2lmKCEoZT09bnVsbHx8IXRzdChlLG5MdCxyTHQpKSl0aHJvdyBpdChuZXcgRm4oImludmFsaWQgc2NoZW1lOiAiK2UpKTtpZighdCYmIShuIT1udWxsJiZoZChuLEN1KDM1KSk9PS0xJiZuLmxlbmd0aD4wJiYoUnIoMCxuLmxlbmd0aCksbi5jaGFyQ29kZUF0KDApIT00NykpKXRocm93IGl0KG5ldyBGbigiaW52YWxpZCBvcGFxdWVQYXJ0OiAiK24pKTtpZih0JiYhKGUhPW51bGwmJnlNKGdVLGUudG9Mb3dlckNhc2UoKSkpJiYhKG49PW51bGx8fCF0c3QobixvQSxjQSkpKXRocm93IGl0KG5ldyBGbihTMGUrbikpO2lmKHQmJmUhPW51bGwmJnlNKGdVLGUudG9Mb3dlckNhc2UoKSkmJiFnMG4obikpdGhyb3cgaXQobmV3IEZuKFMwZStuKSk7aWYoIXZobihyKSl0aHJvdyBpdChuZXcgRm4oImludmFsaWQgZGV2aWNlOiAiK3IpKTtpZighaGxuKHMpKXRocm93IGg9cz09bnVsbD8iaW52YWxpZCBzZWdtZW50czogbnVsbCI6ImludmFsaWQgc2VnbWVudDogIitvbG4ocyksaXQobmV3IEZuKGgpKTtpZighKG89PW51bGx8fGhkKG8sQ3UoMzUpKT09LTEpKXRocm93IGl0KG5ldyBGbigiaW52YWxpZCBxdWVyeTogIitvKSl9ZnVuY3Rpb24gazRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndDtmb3IodnIoZSwiQ2FsY3VsYXRlIEdyYXBoIFNpemUiLDEpLGUubiYmdCYmZ2YoZSxwZih0KSwoU2woKSxRbCkpLGQ9VkUsdj1WRSxvPVVrdCxoPVVrdCxNPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpO00uZSE9TS5pLmdjKCk7KWs9dShkcihNKSwzMyksRz1rLmksSz1rLmosZ3Q9ay5nLHI9ay5mLHM9dShxZShrLCh1aSgpLEpPKSksMTQyKSxkPWIuTWF0aC5taW4oZCxHLXMuYiksdj1iLk1hdGgubWluKHYsSy1zLmQpLG89Yi5NYXRoLm1heChvLEcrZ3Qrcy5jKSxoPWIuTWF0aC5tYXgoaCxLK3Ircy5hKTtmb3IoSD11KHFlKHQsKHVpKCksVTIpKSwxMTYpLGo9bmV3ICRlKGQtSC5iLHYtSC5kKSxDPW5ldyBucigoIXQuYSYmKHQuYT1uZXcgZmUocnMsdCwxMCwxMSkpLHQuYSkpO0MuZSE9Qy5pLmdjKCk7KWs9dShkcihDKSwzMyksa3UoayxrLmktai5hKSxFdShrLGsuai1qLmIpO3R0PW8tZCsoSC5iK0guYyksbj1oLXYrKEguZCtILmEpLHR2KHQsdHQpLEp3KHQsbiksZS5uJiZ0JiZnZihlLHBmKHQpLChTbCgpLFFsKSl9ZnVuY3Rpb24gY2hlKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDO2ZvcihyPW5ldyBoZSxoPW5ldyBTKHQuZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKGgpLDEyMSksQz0wLHMuay5jPU50KFFuLERlLDEsMCw1LDEpLG49bmV3IFModTQocykpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDIxMyksZS5mJiYobGUocy5rLGUpLCsrQyk7Qz09MSYmKHIuY1tyLmMubGVuZ3RoXT1zKX1mb3Iobz1uZXcgUyhyKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksMTIxKTtzLmsuYy5sZW5ndGg9PTE7KXtmb3Ioaz11KEoobmV3IFMocy5rKSksMjEzKSx0LmJbay5jXT1rLmcsZD1rLmQsdj1rLmUsbj1uZXcgUyh1NChzKSk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjEzKSx5aShlLGspfHwoZS5mP2Q9PWUuZHx8dj09ZS5lP3QuYltrLmNdLT10LmJbZS5jXS1lLmc6dC5iW2suY10rPXQuYltlLmNdLWUuZzpzPT1kP2UuZD09cz90LmJbay5jXSs9ZS5nOnQuYltrLmNdLT1lLmc6ZS5kPT1zP3QuYltrLmNdLT1lLmc6dC5iW2suY10rPWUuZyk7bXUoZC5rLGspLG11KHYuayxrKSxkPT1zP3M9ay5lOnM9ay5kfX1mdW5jdGlvbiBFeHQodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRztpZihlPT1udWxsfHxlLmxlbmd0aD09MClyZXR1cm4gbnVsbDtpZihvPXUoTmModC5mLGUpLDIzKSwhbyl7Zm9yKHM9KEg9bmV3IHYxKHQuZCkuYS52YygpLktjKCksbmV3IG0xKEgpKTtzLmEuT2IoKTspaWYobj0oaD11KHMuYS5QYigpLDQyKSx1KGguZGQoKSwyMykpLGQ9bi5mLEc9ZS5sZW5ndGgsaG4oZC5zdWJzdHIoZC5sZW5ndGgtRyxHKSxlKSYmKGUubGVuZ3RoPT1kLmxlbmd0aHx8d2EoZCxkLmxlbmd0aC1lLmxlbmd0aC0xKT09NDYpKXtpZihvKXJldHVybiBudWxsO289bn1pZighbyl7Zm9yKHI9KGo9bmV3IHYxKHQuZCkuYS52YygpLktjKCksbmV3IG0xKGopKTtyLmEuT2IoKTspaWYobj0oaD11KHIuYS5QYigpLDQyKSx1KGguZGQoKSwyMykpLE09bi5nLE0hPW51bGwpe2Zvcih2PU0saz0wLEM9di5sZW5ndGg7azxDOysraylpZihkPXZba10sRz1lLmxlbmd0aCxobihkLnN1YnN0cihkLmxlbmd0aC1HLEcpLGUpJiYoZS5sZW5ndGg9PWQubGVuZ3RofHx3YShkLGQubGVuZ3RoLWUubGVuZ3RoLTEpPT00Nikpe2lmKG8pcmV0dXJuIG51bGw7bz1ufX19byYma28odC5mLGUsbyl9cmV0dXJuIG99ZnVuY3Rpb24gRTRuKHQsZSl7dmFyIG4scixzLG8saDtmb3Iobj1uZXcgSW0saD0hMSxvPTA7bzxlLmxlbmd0aDtvKyspe2lmKHI9KFJyKG8sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChvKSkscj09MzIpe2ZvcihLeih0LG4sMCksbi5hKz0iICIsS3oodCxuLDApO28rMTxlLmxlbmd0aCYmKFJyKG8rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG8rMSk9PTMyKTspKytvO2NvbnRpbnVlfWlmKGgpe3I9PTM5P28rMTxlLmxlbmd0aCYmKFJyKG8rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG8rMSk9PTM5KT8obi5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLCsrbyk6aD0hMTpuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUocik7Y29udGludWV9aWYoaGQoIkd5TUxka0htc1NFY0RhaEt6WnYiLEN1KHIpKT4wKXtLeih0LG4sMCksbi5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLHM9b2ZuKGUsbyksS3oodCxuLHMpLG8rPXMtMTtjb250aW51ZX1yPT0zOT9vKzE8ZS5sZW5ndGgmJihScihvKzEsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChvKzEpPT0zOSk/KG4uYSs9IiciLCsrbyk6aD0hMDpuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUocil9S3oodCxuLDApLFIwbih0KX1mdW5jdGlvbiBUNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0O2lmKHZyKG4sIk5ldHdvcmsgc2ltcGxleCBsYXllcmluZyIsMSksdC5iPWUsZ3Q9dShRKGUsKFRlKCksTVMpKSwxOSkuYSo0LHR0PXQuYi5hLHR0LmMubGVuZ3RoPDEpe29yKG4pO3JldHVybn1mb3Iobz1UbW4odCx0dCksSz1udWxsLHM9ZWkobywwKTtzLmIhPXMuZC5jOyl7Zm9yKHI9dSh0aShzKSwxNSksZD1ndCpwcyhiLk1hdGguc3FydChyLmdjKCkpKSxoPXptbihyKSxtYXQoYWJ0KEJLZShvYnQoTW50KGgpLGQpLEspLCEwKSxSYyhuLDEpKSxqPXQuYi5iLEc9bmV3IFMoaC5hKTtHLmE8Ry5jLmMubGVuZ3RoOyl7Zm9yKEg9dShKKEcpLDEyMSk7ai5jLmxlbmd0aDw9SC5lOylIbShqLGouYy5sZW5ndGgsbmV3IFNoKHQuYikpO0M9dShILmYsMTApLEVvKEMsdShOZShqLEguZSksMjkpKX1pZihvLmI+MSlmb3IoSz1OdChDcixYciwyNSx0LmIuYi5jLmxlbmd0aCwxNSwxKSxNPTAsaz1uZXcgUyh0LmIuYik7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMjkpLEtbTSsrXT12LmEuYy5sZW5ndGh9dHQuYz1OdChRbixEZSwxLDAsNSwxKSx0LmE9bnVsbCx0LmI9bnVsbCx0LmM9bnVsbCxvcihuKX1mdW5jdGlvbiB1aGUodCl7dmFyIGUsbixyLHMsbyxoLGQ7Zm9yKGU9MCxvPW5ldyBTKHQuYi5hKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwxODkpLHIuYj0wLHIuYz0wO2ZvcihZYWUodCwwKSxlc3QodCx0LmcpLHlxKHQuYyksZWJ0KHQuYyksbj0oYW8oKSx6aCksVEkodG50KF80KFRJKHRudChfNChUSShfNCh0LmMsbikpLGRpZShuKSkpKSxuKSkpLF80KHQuYyx6aCksWWl0KHQsdC5nKSxOYWUodCwwKSxxbGUodCwwKSxTY2UodCwxKSxZYWUodCwxKSxlc3QodCx0LmQpLHlxKHQuYyksaD1uZXcgUyh0LmIuYSk7aC5hPGguYy5jLmxlbmd0aDspcj11KEooaCksMTg5KSxlKz1iLk1hdGguYWJzKHIuYyk7Zm9yKGQ9bmV3IFModC5iLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXI9dShKKGQpLDE4OSksci5iPTAsci5jPTA7Zm9yKG49cmcsVEkodG50KF80KFRJKHRudChfNChUSShlYnQoXzQodC5jLG4pKSksZGllKG4pKSkpLG4pKSksXzQodC5jLHpoKSxZaXQodCx0LmQpLE5hZSh0LDEpLHFsZSh0LDEpLFNjZSh0LDApLGVidCh0LmMpLHM9bmV3IFModC5iLmEpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE4OSksZSs9Yi5NYXRoLmFicyhyLmMpO3JldHVybiBlfWZ1bmN0aW9uIGxoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZihrPWUsIShrLmI9PW51bGx8fHQuYj09bnVsbCkpe2Zvcih2NCh0KSxTXyh0KSx2NChrKSxTXyhrKSxuPU50KENyLFhyLDI1LHQuYi5sZW5ndGgray5iLmxlbmd0aCwxNSwxKSxDPTAscj0wLGg9MDtyPHQuYi5sZW5ndGgmJmg8ay5iLmxlbmd0aDspaWYocz10LmJbcl0sbz10LmJbcisxXSxkPWsuYltoXSx2PWsuYltoKzFdLG88ZClyKz0yO2Vsc2UgaWYobz49ZCYmczw9dilkPD1zJiZvPD12PyhuW0MrK109cyxuW0MrK109byxyKz0yKTpkPD1zPyhuW0MrK109cyxuW0MrK109dix0LmJbcl09disxLGgrPTIpOm88PXY/KG5bQysrXT1kLG5bQysrXT1vLHIrPTIpOihuW0MrK109ZCxuW0MrK109dix0LmJbcl09disxKTtlbHNlIGlmKHY8cyloKz0yO2Vsc2UgdGhyb3cgaXQobmV3IFZvKCJUb2tlbiNpbnRlcnNlY3RSYW5nZXMoKTogSW50ZXJuYWwgRXJyb3I6IFsiK3QuYltyXSsiLCIrdC5iW3IrMV0rIl0gJiBbIitrLmJbaF0rIiwiK2suYltoKzFdKyJdIikpO2Zvcig7cjx0LmIubGVuZ3RoOyluW0MrK109dC5iW3IrK10sbltDKytdPXQuYltyKytdO3QuYj1OdChDcixYciwyNSxDLDE1LDEpLERjKG4sMCx0LmIsMCxDKX19ZnVuY3Rpb24gQzRuKHQpe3ZhciBlLG4scixzLG8saCxkO2ZvcihlPW5ldyBoZSx0Lmc9bmV3IGhlLHQuZD1uZXcgaGUsaD1uZXcgcDIobmV3IENnKHQuZi5iKS5hKTtoLmI7KW89WncoaCksbGUoZSx1KHUoby5kZCgpLDQ2KS5iLDgxKSksQnAodShvLmNkKCksNTk0KS5nZigpKT9sZSh0LmQsdShvLmRkKCksNDYpKTpsZSh0LmcsdShvLmRkKCksNDYpKTtmb3IoZXN0KHQsdC5kKSxlc3QodCx0LmcpLHQuYz1uZXcgVW9lKHQuYiksaktlKHQuYywoeWJ0KCksUmJlKSksWWl0KHQsdC5kKSxZaXQodCx0LmcpLExzKGUsdC5jLmEuYiksdC5lPW5ldyAkZShhcyxhcyksdC5hPW5ldyAkZShDcyxDcykscj1uZXcgUyhlKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw4MSksdC5lLmE9Yi5NYXRoLm1pbih0LmUuYSxuLmcuYyksdC5lLmI9Yi5NYXRoLm1pbih0LmUuYixuLmcuZCksdC5hLmE9Yi5NYXRoLm1heCh0LmEuYSxuLmcuYytuLmcuYiksdC5hLmI9Yi5NYXRoLm1heCh0LmEuYixuLmcuZCtuLmcuYSk7dWJ0KHQuYyxuZXcgbXApLGQ9MDtkbyBzPXVoZSh0KSwrK2Q7d2hpbGUoKGQ8Mnx8cz5zYikmJmQ8MTApO3VidCh0LmMsbmV3IFc1KSx1aGUodCksaG5uKHQuYyksbTRuKHQuZil9ZnVuY3Rpb24gXzRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtpZihqZShSZShRKG4sKFRlKCksSHkpKSkpKWZvcihkPW5ldyBTKG4uaik7ZC5hPGQuYy5jLmxlbmd0aDspZm9yKGg9dShKKGQpLDExKSxqPXdkKGguZyksaz1qLEM9MCxNPWsubGVuZ3RoO0M8TTsrK0Mpdj1rW0NdLG89di5kLmk9PW4scz1vJiZqZShSZShRKHYsajIpKSkscyYmKEc9di5jLEg9dSh0cih0LmIsRyksMTApLEh8fChIPUxJKEcsKHVhKCksRzEpLEcuaiwtMSxudWxsLG51bGwsRy5vLHUoUShlLFdsKSwxMDMpLGUpLEp0KEgsKGFlKCksX2kpLEcpLGtpKHQuYixHLEgpLGxlKGUuYSxIKSksdHQ9di5kLEs9dSh0cih0LmIsdHQpLDEwKSxLfHwoSz1MSSh0dCwodWEoKSxHMSksdHQuaiwxLG51bGwsbnVsbCx0dC5vLHUoUShlLFdsKSwxMDMpLGUpLEp0KEssKGFlKCksX2kpLHR0KSxraSh0LmIsdHQsSyksbGUoZS5hLEspKSxyPUdydCh2KSxPYShyLHUoTmUoSC5qLDApLDExKSksb2Eocix1KE5lKEsuaiwwKSwxMSkpLGxuKHQuYSx2LG5ldyBGaihyLGUsKHNvKCksbnUpKSksdShRKGUsKGFlKCksVmMpKSwyMSkuRmMoKG9vKCksdmgpKSl9ZnVuY3Rpb24gUzRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEc7Zm9yKHZyKG4sIkxhYmVsIGR1bW15IHN3aXRjaGluZyIsMSkscj11KFEoZSwoVGUoKSxjRykpLDIyNyksamNuKGUpLHM9bTJuKGUsciksdC5hPU50KGFhLHZvLDI1LGUuYi5jLmxlbmd0aCwxNSwxKSxkPShoNigpLGx0KGN0KGI3LDEpLG9lLDIyNywwLFtwNyxiUyxnNyxOeSxHNCxWNF0pKSxDPTAsSD1kLmxlbmd0aDtDPEg7KytDKWlmKG89ZFtDXSwobz09RzR8fG89PVY0fHxvPT1OeSkmJiF1KE51KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KS5kYygpKXtYY24odCxlKTticmVha31mb3Iodj1sdChjdChiNywxKSxvZSwyMjcsMCxbcDcsYlMsZzcsTnksRzQsVjRdKSxNPTAsRz12Lmxlbmd0aDtNPEc7KytNKW89dltNXSxvPT1HNHx8bz09VjR8fG89PU55fHxKdWUodCx1KE51KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KSk7Zm9yKGg9bHQoY3QoYjcsMSksb2UsMjI3LDAsW3A3LGJTLGc3LE55LEc0LFY0XSksaz0wLGo9aC5sZW5ndGg7azxqOysraylvPWhba10sKG89PUc0fHxvPT1WNHx8bz09TnkpJiZKdWUodCx1KE51KHMuYSxvKT9zLmJbby5nXTpudWxsLDE1KSk7dC5hPW51bGwsb3Iobil9ZnVuY3Rpb24gQTRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtzd2l0Y2godC5rLmcpe2Nhc2UgMTppZihyPXUoUSh0LChhZSgpLF9pKSksMTcpLG49dShRKHIsYUN0KSw3NCksbj9qZShSZShRKHIscTEpKSkmJihuPXFEKG4pKTpuPW5ldyBQdSxrPXUoUSh0LHIxKSwxMSksayl7aWYoQz1ZbyhsdChjdChXcywxKSxlZSw4LDAsW2suaS5uLGsubixrLmFdKSksZTw9Qy5hKXJldHVybiBDLmI7ZnMobixDLG4uYSxuLmEuYSl9aWYoTT11KFEodCwkaCksMTEpLE0pe2lmKGo9WW8obHQoY3QoV3MsMSksZWUsOCwwLFtNLmkubixNLm4sTS5hXSkpLGouYTw9ZSlyZXR1cm4gai5iO2ZzKG4saixuLmMuYixuLmMpfWlmKG4uYj49Mil7Zm9yKHY9ZWkobiwwKSxoPXUodGkodiksOCksZD11KHRpKHYpLDgpO2QuYTxlJiZ2LmIhPXYuZC5jOyloPWQsZD11KHRpKHYpLDgpO3JldHVybiBoLmIrKGUtaC5hKS8oZC5hLWguYSkqKGQuYi1oLmIpfWJyZWFrO2Nhc2UgMzpzd2l0Y2gobz11KFEodShOZSh0LmosMCksMTEpLChhZSgpLF9pKSksMTEpLHM9by5pLG8uai5nKXtjYXNlIDE6cmV0dXJuIHMubi5iO2Nhc2UgMzpyZXR1cm4gcy5uLmIrcy5vLmJ9fXJldHVybiBiNHQodCkuYn1mdW5jdGlvbiBMNG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTTtmb3IoaD1uZXcgUyh0LmQuYik7aC5hPGguYy5jLmxlbmd0aDspZm9yKG89dShKKGgpLDI5KSx2PW5ldyBTKG8uYSk7di5hPHYuYy5jLmxlbmd0aDspe2lmKGQ9dShKKHYpLDEwKSxqZShSZShRKGQsKFRlKCksQ1MpKSkpJiYhRjgoVTAoZCkpKXtyPXUoQXJuKFUwKGQpKSwxNyksQz1yLmMuaSxDPT1kJiYoQz1yLmQuaSksTT1uZXcgZmEoQyxpYShuYyhkLm4pLEMubikpLGtpKHQuYixkLE0pO2NvbnRpbnVlfXM9bmV3IGFoKGQubi5hLWQuZC5iLGQubi5iLWQuZC5kLGQuby5hK2QuZC5iK2QuZC5jLGQuby5iK2QuZC5kK2QuZC5hKSxlPW1XdChPVnQoRFZ0KElWdChuZXcganB0LGQpLHMpLGYyZSksdC5hKSx2V3QoZlhlKFhlZShuZXcgUnB0LGx0KGN0KG9WLDEpLERlLDU3LDAsW2VdKSksZSksdC5hKSxrPW5ldyBKdHQsa2kodC5lLGUsayksbj1qMChuZXcgYXIobHIoam8oZCkuYS5LYygpLG5ldyB6KSkpLWowKG5ldyBhcihscihEcyhkKS5hLktjKCksbmV3IHopKSksbjwwPyREKGssITAsKGFvKCksemgpKTpuPjAmJiREKGssITAsKGFvKCksQ2YpKSxkLms9PShWbigpLGtzKSYmTlh0KGspLGtpKHQuZixkLGUpfX1mdW5jdGlvbiBNNG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqO3N3aXRjaCh2cihuLCJOb2RlIHByb21vdGlvbiBoZXVyaXN0aWMiLDEpLHQuZz1lLE41bih0KSx0LnE9dShRKGUsKFRlKCksb2h0KSksMjYwKSxDPXUoUSh0Lmcsbzl0KSwxOSkuYSxvPW5ldyBwTix0LnEuZyl7Y2FzZSAyOmNhc2UgMTpJRSh0LG8pO2JyZWFrO2Nhc2UgMzpmb3IodC5xPSh5NCgpLEVHKSxJRSh0LG8pLHY9MCxkPW5ldyBTKHQuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTkpLHY9Yi5NYXRoLm1heCh2LGguYSk7dj50LmomJih0LnE9Rk8sSUUodCxvKSk7YnJlYWs7Y2FzZSA0OmZvcih0LnE9KHk0KCksRUcpLElFKHQsbyksaz0wLHM9bmV3IFModC5iKTtzLmE8cy5jLmMubGVuZ3RoOylyPXllKEoocykpLGs9Yi5NYXRoLm1heChrLChPbihyKSxyKSk7az50LmsmJih0LnE9Tk8sSUUodCxvKSk7YnJlYWs7Y2FzZSA2Omo9cHMoYi5NYXRoLmNlaWwodC5mLmxlbmd0aCpDLzEwMCkpLElFKHQsbmV3IF9wKGopKTticmVhaztjYXNlIDU6TT1wcyhiLk1hdGguY2VpbCh0LmQqQy8xMDApKSxJRSh0LG5ldyBIZihNKSk7YnJlYWs7ZGVmYXVsdDpJRSh0LG8pfUV2bih0LGUpLG9yKG4pfWZ1bmN0aW9uIGhoZSh0LGUsbil7dmFyIHIscyxvLGg7dGhpcy5qPXQsdGhpcy5lPV80dCh0KSx0aGlzLm89dGhpcy5qLmUsdGhpcy5pPSEhdGhpcy5vLHRoaXMucD10aGlzLmk/dShOZShuLE5hKHRoaXMubykucCksMjE0KTpudWxsLHM9dShRKHQsKGFlKCksVmMpKSwyMSksdGhpcy5nPXMuSGMoKG9vKCksdmgpKSx0aGlzLmI9bmV3IGhlLHRoaXMuZD1uZXcgT2llKHRoaXMuZSksaD11KFEodGhpcy5qLCQ2KSwyMzApLHRoaXMucT1jdW4oZSxoLHRoaXMuZSksdGhpcy5rPW5ldyBQUXQodGhpcyksbz1BMShsdChjdChnMmUsMSksRGUsMjI1LDAsW3RoaXMsdGhpcy5kLHRoaXMuayx0aGlzLnFdKSksZT09KGV2KCksUk8pJiYhamUoUmUoUSh0LChUZSgpLCR5KSkpKT8ocj1uZXcgQTR0KHRoaXMuZSksby5jW28uYy5sZW5ndGhdPXIsdGhpcy5jPW5ldyBybXQocixoLHUodGhpcy5xLDQwMikpKTplPT1STyYmamUoUmUoUSh0LChUZSgpLCR5KSkpKT8ocj1uZXcgQTR0KHRoaXMuZSksby5jW28uYy5sZW5ndGhdPXIsdGhpcy5jPW5ldyBibmUocixoLHUodGhpcy5xLDQwMikpKTp0aGlzLmM9bmV3IGdHdChlLHRoaXMpLGxlKG8sdGhpcy5jKSxVbGUobyx0aGlzLmUpLHRoaXMucz1meG4odGhpcy5rKX1mdW5jdGlvbiBENG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0O2ZvcihNPXUoeGooKGg9ZWkobmV3IExwKGUpLmEuZCwwKSxuZXcgRXgoaCkpKSw4NiksRz1NP3UoUShNLChmYygpLFJodCkpLDg2KTpudWxsLHM9MTtNJiZHOyl7Zm9yKHY9MCxSdD0wLG49TSxyPUcsZD0wO2Q8cztkKyspbj1acnQobikscj1acnQociksUnQrPVh0KHllKFEobiwoZmMoKSxNNykpKSksdis9WHQoeWUoUShyLE03KSkpO2lmKFN0PVh0KHllKFEoRywoZmMoKSxucCkpKSksTXQ9WHQoeWUoUShNLG5wKSkpLGo9cG10KE0sRyksSD1TdCt2K3QuYStqLU10LVJ0LDA8SCl7Zm9yKGs9ZSxDPTA7ayYmayE9cjspKytDLGs9dShRKGssREcpLDg2KTtpZihrKWZvcihndD1IL0Msaz1lO2shPXI7KXR0PVh0KHllKFEoayxucCkpKStILEp0KGssbnAsdHQpLEs9WHQoeWUoUShrLE03KSkpK0gsSnQoayxNNyxLKSxILT1ndCxrPXUoUShrLERHKSw4Nik7ZWxzZSByZXR1cm59KytzLE0uZC5iPT0wP009bnh0KG5ldyBMcChlKSxzKTpNPXUoeGooKG89ZWkobmV3IExwKE0pLmEuZCwwKSxuZXcgRXgobykpKSw4NiksRz1NP3UoUShNLFJodCksODYpOm51bGx9fWZ1bmN0aW9uIGZoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNO2Zvcih2PSEwLHM9MCxrPXQuZltlLnBdLEM9ZS5vLmIrdC5uLG49dC5jW2UucF1bMl0sY2godC5hLGsscGUodShOZSh0LmEsayksMTkpLmEtMStuKSksY2godC5iLGssWHQoeWUoTmUodC5iLGspKSktQytuKnQuZSksKytrLGs+PXQuaT8oKyt0LmksbGUodC5hLHBlKDEpKSxsZSh0LmIsQykpOihyPXQuY1tlLnBdWzFdLGNoKHQuYSxrLHBlKHUoTmUodC5hLGspLDE5KS5hKzEtcikpLGNoKHQuYixrLFh0KHllKE5lKHQuYixrKSkpK0Mtcip0LmUpKSwodC5xPT0oeTQoKSxGTykmJih1KE5lKHQuYSxrKSwxOSkuYT50Lmp8fHUoTmUodC5hLGstMSksMTkpLmE+dC5qKXx8dC5xPT1OTyYmKFh0KHllKE5lKHQuYixrKSkpPnQua3x8WHQoeWUoTmUodC5iLGstMSkpKT50LmspKSYmKHY9ITEpLGg9bmV3IGFyKGxyKGpvKGUpLmEuS2MoKSxuZXcgeikpO3pyKGgpOylvPXUoTXIoaCksMTcpLGQ9by5jLmksdC5mW2QucF09PWsmJihNPWZoZSh0LGQpLHM9cyt1KE0uYSwxOSkuYSx2PXYmJmplKFJlKE0uYikpKTtyZXR1cm4gdC5mW2UucF09ayxzPXMrdC5jW2UucF1bMF0sbmV3IGZhKHBlKHMpLChObigpLCEhdikpfWZ1bmN0aW9uIFR4dCh0LGUsbixyLHMpe3ZhciBvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7Zm9yKE09bmV3IF9yLGg9bmV3IGhlLFBvZSh0LG4sdC5kLmZnKCksaCxNKSxQb2UodCxyLHQuZC5nZygpLGgsTSksdC5iPS4yKihLPUVjZShXbyhuZXcgVG4obnVsbCxuZXcgX24oaCwxNikpLG5ldyBlWikpLHR0PUVjZShXbyhuZXcgVG4obnVsbCxuZXcgX24oaCwxNikpLG5ldyBuWikpLGIuTWF0aC5taW4oSyx0dCkpLG89MCxkPTA7ZDxoLmMubGVuZ3RoLTE7ZCsrKWZvcih2PShBbihkLGguYy5sZW5ndGgpLHUoaC5jW2RdLDExMikpLEc9ZCsxO0c8aC5jLmxlbmd0aDtHKyspbys9d3h0KHQsdiwoQW4oRyxoLmMubGVuZ3RoKSx1KGguY1tHXSwxMTIpKSk7Zm9yKGo9dShRKGUsKGFlKCksJDYpKSwyMzApLG8+PTImJihndD1HY2UoaCwhMCxqKSwhdC5lJiYodC5lPW5ldyBLJHQodCkpLHVmbih0LmUsZ3QsaCx0LmIpKSxDYWUoaCxqKSxXNG4oaCksSD0tMSxDPW5ldyBTKGgpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDExMiksIShiLk1hdGguYWJzKGsucy1rLmMpPEVkKSYmKEg9Yi5NYXRoLm1heChILGsubyksdC5kLmRnKGsscyx0LmMpKTtyZXR1cm4gdC5kLmEuYS4kYigpLEgrMX1mdW5jdGlvbiBkaGUodCxlKXt2YXIgbixyLHMsbyxoO249WHQoeWUoUShlLChUZSgpLFRmKSkpKSxuPDImJkp0KGUsVGYsMikscj11KFEoZSxXbCksMTAzKSxyPT0oYW8oKSxoMCkmJkp0KGUsV2wsUHooZSkpLHM9dShRKGUsSnZlKSwxOSkscy5hPT0wP0p0KGUsKGFlKCksJDYpLG5ldyBaaXQpOkp0KGUsKGFlKCksJDYpLG5ldyBGJChzLmEpKSxvPVJlKFEoZSxTUykpLG89PW51bGwmJkp0KGUsU1MsKE5uKCksVnQoUShlLGVnKSk9PT1WdCgoVzAoKSxONykpKSksbHMobmV3IFRuKG51bGwsbmV3IF9uKGUuYSwxNikpLG5ldyBncyh0KSksbHMoV28obmV3IFRuKG51bGwsbmV3IF9uKGUuYiwxNikpLG5ldyBHNSksbmV3IHFpKHQpKSxoPW5ldyBhaGUoZSksSnQoZSwoYWUoKSxRNCksaCksTCQodC5hKSxLZCh0LmEsKFdhKCksRGQpLHUoUShlLHp5KSwyNDYpKSxLZCh0LmEsZ2IsdShRKGUsYzl0KSwyNDYpKSxLZCh0LmEsY3UsdShRKGUsX1MpLDI0NikpLEtkKHQuYSxxYyx1KFEoZSxnRyksMjQ2KSksS2QodC5hLElvLHN1bih1KFEoZSxlZyksMjE4KSkpLFRVdCh0LmEsQ3huKGUpKSxKdChlLEtsdCxGcSh0LmEsZSkpfWZ1bmN0aW9uIEk0bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWU7cmV0dXJuIGo9dC5jW2VdLEg9dC5jW25dLEc9dShRKGosKGFlKCksUjYpKSwxNSksISFHJiZHLmdjKCkhPTAmJkcuSGMoSCl8fChLPWouayE9KFZuKCksdGEpJiZILmshPXRhLHR0PXUoUShqLFB2KSwxMCksZ3Q9dShRKEgsUHYpLDEwKSxNdD10dCE9Z3QsU3Q9ISF0dCYmdHQhPWp8fCEhZ3QmJmd0IT1ILFJ0PUVzdChqLCh2ZSgpLFBuKSksS3Q9RXN0KEgsbXIpLFN0PVN0fChFc3Qoaixtcil8fEVzdChILFBuKSksdWU9U3QmJk10fHxSdHx8S3QsSyYmdWUpfHxqLms9PShWbigpLEhjKSYmSC5rPT1Pc3x8SC5rPT0oVm4oKSxIYykmJmouaz09T3M/ITE6KEM9dC5jW2VdLG89dC5jW25dLHM9bGFlKHQuZSxDLG8sKHZlKCksQm4pKSx2PWxhZSh0LmksQyxvLEhuKSxUd24odC5mLEMsbyksaz1PcmUodC5iLEMsbykrdShzLmEsMTkpLmErdSh2LmEsMTkpLmErdC5mLmQsZD1PcmUodC5iLG8sQykrdShzLmIsMTkpLmErdSh2LmIsMTkpLmErdC5mLmIsdC5hJiYoTT11KFEoQyxfaSksMTEpLGg9dShRKG8sX2kpLDExKSxyPVlzZSh0LmcsTSxoKSxrKz11KHIuYSwxOSkuYSxkKz11KHIuYiwxOSkuYSksaz5kKX1mdW5jdGlvbiBPNG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2ZvcihuPXUoUSh0LChUZSgpLGNzKSksOTgpLGg9dC5mLG89dC5kLGQ9aC5hK28uYitvLmMsdj0wLW8uZC10LmMuYixDPWguYitvLmQrby5hLXQuYy5iLGs9bmV3IGhlLE09bmV3IGhlLHM9bmV3IFMoZSk7cy5hPHMuYy5jLmxlbmd0aDspe3N3aXRjaChyPXUoSihzKSwxMCksbi5nKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpEd24ocik7YnJlYWs7Y2FzZSA0Omo9dShRKHIsUnYpLDgpLEg9aj9qLmE6MCxyLm4uYT1kKlh0KHllKFEociwoYWUoKSxGdikpKSktSCxFeihyLCEwLCExKTticmVhaztjYXNlIDU6Rz11KFEocixSdiksOCksSz1HP0cuYTowLHIubi5hPVh0KHllKFEociwoYWUoKSxGdikpKSktSyxFeihyLCEwLCExKSxoLmE9Yi5NYXRoLm1heChoLmEsci5uLmErci5vLmEvMil9c3dpdGNoKHUoUShyLChhZSgpLG9jKSksNjEpLmcpe2Nhc2UgMTpyLm4uYj12LGsuY1trLmMubGVuZ3RoXT1yO2JyZWFrO2Nhc2UgMzpyLm4uYj1DLE0uY1tNLmMubGVuZ3RoXT1yfX1zd2l0Y2gobi5nKXtjYXNlIDE6Y2FzZSAyOmlpZShrLHQpLGlpZShNLHQpO2JyZWFrO2Nhc2UgMzpzaWUoayx0KSxzaWUoTSx0KX19ZnVuY3Rpb24gUDRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE07Zm9yKEM9bmV3IGhlLE09bmV3IEIzLG89bnVsbCxzPTAscj0wO3I8ZS5sZW5ndGg7KytyKXN3aXRjaChuPWVbcl0sSnVuKG8sbikmJihzPUwzdCh0LE0sQyxDRyxzKSksVXMobiwoYWUoKSxQdikpJiYobz11KFEobixQdiksMTApKSxuLmsuZyl7Y2FzZSAwOmZvcih2PWgydCgkeChLbyhuLCh2ZSgpLFBuKSksbmV3IFlOKSk7Yml0KHYpOyloPXUoUm10KHYpLDExKSx0LmRbaC5wXT1zKyssQy5jW0MuYy5sZW5ndGhdPWg7Zm9yKHM9TDN0KHQsTSxDLENHLHMpLGs9aDJ0KCR4KEtvKG4sbXIpLG5ldyBZTikpO2JpdChrKTspaD11KFJtdChrKSwxMSksdC5kW2gucF09cysrLEMuY1tDLmMubGVuZ3RoXT1oO2JyZWFrO2Nhc2UgMzpLbyhuLHJfdCkuZGMoKXx8KGg9dShLbyhuLHJfdCkuWGIoMCksMTEpLHQuZFtoLnBdPXMrKyxDLmNbQy5jLmxlbmd0aF09aCksS28obixDRykuZGMoKXx8VXAoTSxuKTticmVhaztjYXNlIDE6Zm9yKGQ9S28obiwodmUoKSxCbikpLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDExKSx0LmRbaC5wXT1zKyssQy5jW0MuYy5sZW5ndGhdPWg7S28obixIbikuSmMobmV3IHBHdChNLG4pKX1yZXR1cm4gTDN0KHQsTSxDLENHLHMpLEN9ZnVuY3Rpb24gZ2hlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdDtmb3Ioaz1hcyxDPWFzLGQ9Q3Msdj1DcyxqPW5ldyBTKGUuaSk7ai5hPGouYy5jLmxlbmd0aDspTT11KEooaiksNjUpLHM9dSh1KHRyKHQuZyxNLmEpLDQ2KS5iLDMzKSx4MShzLE0uYi5jLE0uYi5kKSxrPWIuTWF0aC5taW4oayxzLmkpLEM9Yi5NYXRoLm1pbihDLHMuaiksZD1iLk1hdGgubWF4KGQscy5pK3MuZyksdj1iLk1hdGgubWF4KHYscy5qK3MuZik7Zm9yKEg9dShxZSh0LmMsKGNJKCksTDNlKSksMTE2KSx3dih0LmMsZC1rKyhILmIrSC5jKSx2LUMrKEguZCtILmEpLCEwLCEwKSxGNHQodC5jLC1rK0guYiwtQytILmQpLHI9bmV3IG5yKEhYdCh0LmMpKTtyLmUhPXIuaS5nYygpOyluPXUoZHIociksNzkpLGg9eDQobiwhMCwhMCksRz1lMChuKSx0dD10YihuKSxLPW5ldyAkZShHLmkrRy5nLzIsRy5qK0cuZi8yKSxvPW5ldyAkZSh0dC5pK3R0LmcvMix0dC5qK3R0LmYvMiksZ3Q9aWEobmV3ICRlKG8uYSxvLmIpLEspLG1FKGd0LEcuZyxHLmYpLExpKEssZ3QpLE10PWlhKG5ldyAkZShLLmEsSy5iKSxvKSxtRShNdCx0dC5nLHR0LmYpLExpKG8sTXQpLHZqKGgsSy5hLEsuYiksd2ooaCxvLmEsby5iKX1mdW5jdGlvbiBGNG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRztpZih0LmM9dC5kLEc9UmUoUShlLChUZSgpLHRtZSkpKSxIPUc9PW51bGx8fChPbihHKSxHKSxvPXUoUShlLChhZSgpLFZjKSksMjEpLkhjKChvbygpLHZoKSkscz11KFEoZSxjcyksOTgpLG49IShzPT0odWEoKSxZMil8fHM9PWcwfHxzPT1HYyksSCYmKG58fCFvKSl7Zm9yKE09bmV3IFMoZS5hKTtNLmE8TS5jLmMubGVuZ3RoOylrPXUoSihNKSwxMCksay5wPTA7Zm9yKGo9bmV3IGhlLEM9bmV3IFMoZS5hKTtDLmE8Qy5jLmMubGVuZ3RoOylpZihrPXUoSihDKSwxMCkscj1jbGUodCxrLG51bGwpLHIpe2Zvcih2PW5ldyBleXQsTW8odixlKSxKdCh2LEJ5LHUoci5iLDIxKSksUHZ0KHYuZCxlLmQpLEp0KHYsRTcsbnVsbCksZD11KHIuYSwxNSkuS2MoKTtkLk9iKCk7KWg9dShkLlBiKCksMTApLGxlKHYuYSxoKSxoLmE9djtqLkZjKHYpfW8mJihWdChRKGUscTYpKT09PVZ0KChpdigpLGxsdCkpP3QuYz10LmI6dC5jPXQuYSl9ZWxzZSBqPW5ldyB5bChsdChjdChYYmUsMSksdTFlLDM3LDAsW2VdKSk7cmV0dXJuIFZ0KFEoZSxxNikpIT09VnQoKGl2KCkscTQpKSYmKHduKCksai5hZChuZXcgbEspKSxqfWZ1bmN0aW9uIHBoZSh0KXtNdyh0LG5ldyBrMihsYnQoTVIoX3coRXcoQ3coVHcobmV3IGtnLFhnKSwiRUxLIE1yLiBUcmVlIiksIlRyZWUtYmFzZWQgYWxnb3JpdGhtIHByb3ZpZGVkIGJ5IHRoZSBFY2xpcHNlIExheW91dCBLZXJuZWwuIENvbXB1dGVzIGEgc3Bhbm5pbmcgdHJlZSBvZiB0aGUgaW5wdXQgZ3JhcGggYW5kIGFycmFuZ2VzIGFsbCBub2RlcyBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdGluZyBwYXJlbnQtY2hpbGRyZW4gaGllcmFyY2h5LiBJIHBpdHkgdGhlIGZvb2wgd2hvIGRvZXNuJ3QgdXNlIE1yLiBUcmVlIExheW91dC4iKSxuZXcgYVopLEsxZSksdW4oKENFKCksRGZ0KSkpKSkseGUodCxYZyx4dixmX3QpLHhlKHQsWGcsQ3ksMjApLHhlKHQsWGcsRTYsR0UpLHhlKHQsWGcsVkkscGUoMSkpLHhlKHQsWGcsUl8sKE5uKCksITApKSx4ZSh0LFhnLEpJLEllKGxfdCkpLHhlKHQsWGcsRDQsSWUoeHllKSkseGUodCxYZyxDNixJZShreWUpKSx4ZSh0LFhnLFQ2LEllKEV5ZSkpLHhlKHQsWGcsVUUsSWUoeXllKSkseGUodCxYZyxqXyxJZShoX3QpKSx4ZSh0LFhnLFdFLEllKEN5ZSkpLHhlKHQsWGcsSGt0LEllKFN5ZSkpLHhlKHQsWGcsVmt0LEllKGRfdCkpfWZ1bmN0aW9uIE40bih0KXt0LnF8fCh0LnE9ITAsdC5wPWljKHQsMCksdC5hPWljKHQsMSksRmkodC5hLDApLHQuZj1pYyh0LDIpLEZpKHQuZiwxKSxucyh0LmYsMiksdC5uPWljKHQsMyksbnModC5uLDMpLG5zKHQubiw0KSxucyh0Lm4sNSksbnModC5uLDYpLHQuZz1pYyh0LDQpLEZpKHQuZyw3KSxucyh0LmcsOCksdC5jPWljKHQsNSksRmkodC5jLDcpLEZpKHQuYyw4KSx0Lmk9aWModCw2KSxGaSh0LmksOSksRmkodC5pLDEwKSxGaSh0LmksMTEpLEZpKHQuaSwxMiksbnModC5pLDEzKSx0Lmo9aWModCw3KSxGaSh0LmosOSksdC5kPWljKHQsOCksRmkodC5kLDMpLEZpKHQuZCw0KSxGaSh0LmQsNSksRmkodC5kLDYpLG5zKHQuZCw3KSxucyh0LmQsOCksbnModC5kLDkpLG5zKHQuZCwxMCksdC5iPWljKHQsOSksbnModC5iLDApLG5zKHQuYiwxKSx0LmU9aWModCwxMCksbnModC5lLDEpLG5zKHQuZSwyKSxucyh0LmUsMyksbnModC5lLDQpLEZpKHQuZSw1KSxGaSh0LmUsNiksRmkodC5lLDcpLEZpKHQuZSw4KSxGaSh0LmUsOSksRmkodC5lLDEwKSxucyh0LmUsMTEpLHQuaz1pYyh0LDExKSxucyh0LmssMCksbnModC5rLDEpLHQubz1vaSh0LDEyKSx0LnM9b2kodCwxMykpfWZ1bmN0aW9uIEN4dCh0LGUpe2UuZGMoKSYmV2QodC5qLCEwLCEwLCEwLCEwKSx5aShlLCh2ZSgpLE1mKSkmJldkKHQuaiwhMCwhMCwhMCwhMSkseWkoZSxtaCkmJldkKHQuaiwhMSwhMCwhMCwhMCkseWkoZSxLbCkmJldkKHQuaiwhMCwhMCwhMSwhMCkseWkoZSxWaCkmJldkKHQuaiwhMCwhMSwhMCwhMCkseWkoZSxlbCkmJldkKHQuaiwhMSwhMCwhMCwhMSkseWkoZSx5aCkmJldkKHQuaiwhMSwhMCwhMSwhMCkseWkoZSxYbCkmJldkKHQuaiwhMCwhMSwhMSwhMCkseWkoZSxEZikmJldkKHQuaiwhMCwhMSwhMCwhMSkseWkoZSxBdSkmJldkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxsdSkmJldkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxBdSkmJldkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxTdSkmJldkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxMdSkmJldkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxubCkmJldkKHQuaiwhMCwhMCwhMCwhMCkseWkoZSxVYykmJldkKHQuaiwhMCwhMCwhMCwhMCl9ZnVuY3Rpb24gQjRuKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3Iobz1uZXcgaGUsaz1uZXcgUyhyKTtrLmE8ay5jLmMubGVuZ3RoOylpZihkPXUoSihrKSw0NDEpLGg9bnVsbCxkLmY9PShzbygpLG51KSlmb3IoRz1uZXcgUyhkLmUpO0cuYTxHLmMuYy5sZW5ndGg7KUg9dShKKEcpLDE3KSx0dD1ILmQuaSxOYSh0dCk9PWU/TWVlKHQsZSxkLEgsZC5iLEguZCk6IW58fEo4KHR0LG4pP3dnbih0LGUsZCxyLEgpOihqPVBhdCh0LGUsbixILGQuYixudSxoKSxqIT1oJiYoby5jW28uYy5sZW5ndGhdPWopLGouYyYmKGg9aikpO2Vsc2UgZm9yKE09bmV3IFMoZC5lKTtNLmE8TS5jLmMubGVuZ3RoOylpZihDPXUoSihNKSwxNyksSz1DLmMuaSxOYShLKT09ZSlNZWUodCxlLGQsQyxDLmMsZC5iKTtlbHNle2lmKCFufHxKOChLLG4pKWNvbnRpbnVlO2o9UGF0KHQsZSxuLEMsZC5iLHRsLGgpLGohPWgmJihvLmNbby5jLmxlbmd0aF09aiksai5jJiYoaD1qKX1mb3Iodj1uZXcgUyhvKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSw0NDEpLFJvKGUuYSxkLmEsMCkhPS0xfHxsZShlLmEsZC5hKSxkLmMmJihzLmNbcy5jLmxlbmd0aF09ZCl9ZnVuY3Rpb24gUjRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtmb3Ioaz1uZXcgaGUsdj1uZXcgUyhlLmEpO3YuYTx2LmMuYy5sZW5ndGg7KWZvcihoPXUoSih2KSwxMCksaj1LbyhoLCh2ZSgpLEhuKSkuS2MoKTtqLk9iKCk7KWZvcihNPXUoai5QYigpLDExKSxzPW5ldyBTKE0uZyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLCEoIUdhKHIpJiZyLmMuaS5jPT1yLmQuaS5jfHxHYShyKXx8ci5kLmkuYyE9bikmJihrLmNbay5jLmxlbmd0aF09cik7Zm9yKGQ9bDIobi5hKS5LYygpO2QuT2IoKTspZm9yKGg9dShkLlBiKCksMTApLGo9S28oaCwodmUoKSxCbikpLktjKCk7ai5PYigpOylmb3IoTT11KGouUGIoKSwxMSkscz1uZXcgUyhNLmUpO3MuYTxzLmMuYy5sZW5ndGg7KWlmKHI9dShKKHMpLDE3KSwhKCFHYShyKSYmci5jLmkuYz09ci5kLmkuY3x8R2Eocil8fHIuYy5pLmMhPWUpKXtmb3IoQz1uZXcgZGEoayxrLmMubGVuZ3RoKSxvPShabihDLmI+MCksdShDLmEuWGIoQy5jPS0tQy5iKSwxNykpO28hPXImJkMuYj4wOyl0LmFbby5wXT0hMCx0LmFbci5wXT0hMCxvPShabihDLmI+MCksdShDLmEuWGIoQy5jPS0tQy5iKSwxNykpO0MuYj4wJiZDbChDKX19ZnVuY3Rpb24gYmhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE07aWYodC5hIT1lLkFqKCkpdGhyb3cgaXQobmV3IEZuKFFFK2UubmUoKStDdikpO2lmKHI9JGcoKCR1KCkseWEpLGUpLiRrKCkscilyZXR1cm4gci5BaigpLk5oKCkuSWgocixuKTtpZihoPSRnKHlhLGUpLmFsKCksaCl7aWYobj09bnVsbClyZXR1cm4gbnVsbDtpZihkPXUobiwxNSksZC5kYygpKXJldHVybiIiO2ZvcihNPW5ldyBBZyxvPWQuS2MoKTtvLk9iKCk7KXM9by5QYigpLGdvKE0saC5BaigpLk5oKCkuSWgoaCxzKSksTS5hKz0iICI7cmV0dXJuIGludChNLE0uYS5sZW5ndGgtMSl9aWYoQz0kZyh5YSxlKS5ibCgpLCFDLmRjKCkpe2ZvcihrPUMuS2MoKTtrLk9iKCk7KWlmKHY9dShrLlBiKCksMTQ4KSx2LndqKG4pKXRyeXtpZihNPXYuQWooKS5OaCgpLkloKHYsbiksTSE9bnVsbClyZXR1cm4gTX1jYXRjaChqKXtpZihqPVdpKGopLCFfdChqLDEwMikpdGhyb3cgaXQoail9dGhyb3cgaXQobmV3IEZuKCJJbnZhbGlkIHZhbHVlOiAnIituKyInIGZvciBkYXRhdHlwZSA6IitlLm5lKCkpKX1yZXR1cm4gdShlLDgzNCkuRmooKSxuPT1udWxsP251bGw6X3QobiwxNzIpPyIiK3UobiwxNzIpLmE6b2wobik9PXRWP1ZVdChhQVswXSx1KG4sMTk5KSk6JG8obil9ZnVuY3Rpb24gajRuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDO2ZvcihrPW5ldyBaaSxkPW5ldyBaaSxvPW5ldyBTKHQpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDEyOCksci52PTAsci5uPXIuaS5jLmxlbmd0aCxyLnU9ci50LmMubGVuZ3RoLHIubj09MCYmZnMoayxyLGsuYy5iLGsuYyksci51PT0wJiZyLnIuYS5nYygpPT0wJiZmcyhkLHIsZC5jLmIsZC5jKTtmb3IoaD0tMTtrLmIhPTA7KWZvcihyPXUoRHN0KGssMCksMTI4KSxuPW5ldyBTKHIudCk7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMjY4KSxDPWUuYixDLnY9Yi5NYXRoLm1heChDLnYsci52KzEpLGg9Yi5NYXRoLm1heChoLEMudiksLS1DLm4sQy5uPT0wJiZmcyhrLEMsay5jLmIsay5jKTtpZihoPi0xKXtmb3Iocz1laShkLDApO3MuYiE9cy5kLmM7KXI9dSh0aShzKSwxMjgpLHIudj1oO2Zvcig7ZC5iIT0wOylmb3Iocj11KERzdChkLDApLDEyOCksbj1uZXcgUyhyLmkpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDI2OCksdj1lLmEsdi5yLmEuZ2MoKT09MCYmKHYudj1iLk1hdGgubWluKHYudixyLnYtMSksLS12LnUsdi51PT0wJiZmcyhkLHYsZC5jLmIsZC5jKSl9fWZ1bmN0aW9uIHdoZSh0LGUsbixyLHMpe3ZhciBvLGgsZCx2O3JldHVybiB2PWFzLGg9ITEsZD1weHQodCxpYShuZXcgJGUoZS5hLGUuYiksdCksTGkobmV3ICRlKG4uYSxuLmIpLHMpLGlhKG5ldyAkZShyLmEsci5iKSxuKSksbz0hIWQmJiEoYi5NYXRoLmFicyhkLmEtdC5hKTw9RXYmJmIuTWF0aC5hYnMoZC5iLXQuYik8PUV2fHxiLk1hdGguYWJzKGQuYS1lLmEpPD1FdiYmYi5NYXRoLmFicyhkLmItZS5iKTw9RXYpLGQ9cHh0KHQsaWEobmV3ICRlKGUuYSxlLmIpLHQpLG4scyksZCYmKChiLk1hdGguYWJzKGQuYS10LmEpPD1FdiYmYi5NYXRoLmFicyhkLmItdC5iKTw9RXYpPT0oYi5NYXRoLmFicyhkLmEtZS5hKTw9RXYmJmIuTWF0aC5hYnMoZC5iLWUuYik8PUV2KXx8bz92PWIuTWF0aC5taW4odixEOShpYShkLG4pKSk6aD0hMCksZD1weHQodCxpYShuZXcgJGUoZS5hLGUuYiksdCkscixzKSxkJiYoaHx8KGIuTWF0aC5hYnMoZC5hLXQuYSk8PUV2JiZiLk1hdGguYWJzKGQuYi10LmIpPD1Fdik9PShiLk1hdGguYWJzKGQuYS1lLmEpPD1FdiYmYi5NYXRoLmFicyhkLmItZS5iKTw9RXYpfHxvKSYmKHY9Yi5NYXRoLm1pbih2LEQ5KGlhKGQscikpKSksdn1mdW5jdGlvbiB2aGUodCl7TXcodCxuZXcgazIoTVIoX3coRXcoQ3coVHcobmV3IGtnLG9iKSxvMWUpLCJNaW5pbWl6ZXMgdGhlIHN0cmVzcyB3aXRoaW4gYSBsYXlvdXQgdXNpbmcgc3RyZXNzIG1ham9yaXphdGlvbi4gU3RyZXNzIGV4aXN0cyBpZiB0aGUgZXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gYSBwYWlyIG9mIG5vZGVzIGRvZXNuJ3QgbWF0Y2ggdGhlaXIgZ3JhcGggdGhlb3JldGljIGRpc3RhbmNlLCB0aGF0IGlzLCB0aGUgc2hvcnRlc3QgcGF0aCBiZXR3ZWVuIHRoZSB0d28gbm9kZXMuIFRoZSBtZXRob2QgYWxsb3dzIHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBlZGdlIGxlbmd0aHMuIiksbmV3IGYxKSxWbCkpKSx4ZSh0LG9iLEdJLEllKEE3dCkpLHhlKHQsb2IsZUgsKE5uKCksITApKSx4ZSh0LG9iLEQ0LEllKExiZSkpLHhlKHQsb2IsQzYsSWUoTWJlKSkseGUodCxvYixUNixJZShEYmUpKSx4ZSh0LG9iLFVFLEllKEFiZSkpLHhlKHQsb2Isal8sSWUoTTd0KSkseGUodCxvYixXRSxJZShJYmUpKSx4ZSh0LG9iLHY2dCxJZShTN3QpKSx4ZSh0LG9iLHk2dCxJZShDN3QpKSx4ZSh0LG9iLHg2dCxJZShfN3QpKSx4ZSh0LG9iLGs2dCxJZShMN3QpKSx4ZSh0LG9iLG02dCxJZSh2VikpfWZ1bmN0aW9uICQ0bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7Zm9yKHZyKGUsIkludGVyYWN0aXZlIGNyb3NzaW5nIG1pbmltaXphdGlvbiIsMSksaD0wLG89bmV3IFModC5iKTtvLmE8by5jLmMubGVuZ3RoOylyPXUoSihvKSwyOSksci5wPWgrKztmb3Ioaj1fNHQodCksdHQ9bmV3IGhidChqLmxlbmd0aCksVWxlKG5ldyB5bChsdChjdChnMmUsMSksRGUsMjI1LDAsW3R0XSkpLGopLEs9MCxoPTAscz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KXtmb3Iocj11KEoocyksMjkpLG49MCxNPTAsQz1uZXcgUyhyLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcih2PXUoSihDKSwxMCksdi5uLmE+MCYmKG4rPXYubi5hK3Yuby5hLzIsKytNKSxHPW5ldyBTKHYuaik7Ry5hPEcuYy5jLmxlbmd0aDspSD11KEooRyksMTEpLEgucD1LKys7Zm9yKE0+MCYmKG4vPU0pLGd0PU50KGFhLHZvLDI1LHIuYS5jLmxlbmd0aCwxNSwxKSxkPTAsaz1uZXcgUyhyLmEpO2suYTxrLmMuYy5sZW5ndGg7KXY9dShKKGspLDEwKSx2LnA9ZCsrLGd0W3YucF09QTRuKHYsbiksdi5rPT0oVm4oKSx0YSkmJkp0KHYsKGFlKCksb0N0KSxndFt2LnBdKTt3bigpLFpzKHIuYSxuZXcgUyR0KGd0KSksbmxlKHR0LGosaCwhMCksKytofW9yKGUpfWZ1bmN0aW9uIExfKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDO2lmKGUuZT09NSl7bGhlKHQsZSk7cmV0dXJufWlmKGs9ZSwhKGsuYj09bnVsbHx8dC5iPT1udWxsKSl7Zm9yKHY0KHQpLFNfKHQpLHY0KGspLFNfKGspLG49TnQoQ3IsWHIsMjUsdC5iLmxlbmd0aCtrLmIubGVuZ3RoLDE1LDEpLEM9MCxyPTAsaD0wO3I8dC5iLmxlbmd0aCYmaDxrLmIubGVuZ3RoOylpZihzPXQuYltyXSxvPXQuYltyKzFdLGQ9ay5iW2hdLHY9ay5iW2grMV0sbzxkKW5bQysrXT10LmJbcisrXSxuW0MrK109dC5iW3IrK107ZWxzZSBpZihvPj1kJiZzPD12KWQ8PXMmJm88PXY/cis9MjpkPD1zPyh0LmJbcl09disxLGgrPTIpOm88PXY/KG5bQysrXT1zLG5bQysrXT1kLTEscis9Mik6KG5bQysrXT1zLG5bQysrXT1kLTEsdC5iW3JdPXYrMSxoKz0yKTtlbHNlIGlmKHY8cyloKz0yO2Vsc2UgdGhyb3cgaXQobmV3IFZvKCJUb2tlbiNzdWJ0cmFjdFJhbmdlcygpOiBJbnRlcm5hbCBFcnJvcjogWyIrdC5iW3JdKyIsIit0LmJbcisxXSsiXSAtIFsiK2suYltoXSsiLCIray5iW2grMV0rIl0iKSk7Zm9yKDtyPHQuYi5sZW5ndGg7KW5bQysrXT10LmJbcisrXSxuW0MrK109dC5iW3IrK107dC5iPU50KENyLFhyLDI1LEMsMTUsMSksRGMobiwwLHQuYiwwLEMpfX1mdW5jdGlvbiB6NG4odCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYoIXQuQS5kYygpKXtpZih0LkEuSGMoKEFsKCksb1ApKSYmKHUocG8odC5iLCh2ZSgpLFBuKSksMTI0KS5rPSEwLHUocG8odC5iLG1yKSwxMjQpLms9ITAsZT10LnEhPSh1YSgpLGcwKSYmdC5xIT1HYyxhTSh1KHBvKHQuYixIbiksMTI0KSxlKSxhTSh1KHBvKHQuYixCbiksMTI0KSxlKSxhTSh0LmcsZSksdC5BLkhjKEsyKSYmKHUocG8odC5iLFBuKSwxMjQpLmo9ITAsdShwbyh0LmIsbXIpLDEyNCkuaj0hMCx1KHBvKHQuYixIbiksMTI0KS5rPSEwLHUocG8odC5iLEJuKSwxMjQpLms9ITAsdC5nLms9ITApKSx0LkEuSGMoYVApKWZvcih0LmEuaj0hMCx0LmEuaz0hMCx0Lmcuaj0hMCx0Lmcuaz0hMCxkPXQuQi5IYygobGwoKSxpQSkpLHM9bHN0KCksbz0wLGg9cy5sZW5ndGg7bzxoOysrbylyPXNbb10sbj11KHBvKHQuaSxyKSwzMDYpLG4mJihQM3Qocik/KG4uaj0hMCxuLms9ITApOihuLmo9IWQsbi5rPSFkKSk7dC5BLkhjKEp5KSYmdC5CLkhjKChsbCgpLHVQKSkmJih0Lmcuaj0hMCx0Lmcuaj0hMCx0LmEuanx8KHQuYS5qPSEwLHQuYS5rPSEwLHQuYS5lPSEwKSl9fWZ1bmN0aW9uIHE0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7Zm9yKHI9bmV3IFModC5lLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPXUoSihyKSwyOSksbz1uZXcgUyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KWlmKHM9dShKKG8pLDEwKSxIPXQuaVtzLnBdLGs9SC5hLmUsdj1ILmQuZSxzLm4uYj1rLGd0PXYtay1zLm8uYixlPUlhdChzKSxqPShjeSgpLChzLnE/cy5xOih3bigpLHduKCksdTApKS5fYigoVGUoKSxCdikpP009dShRKHMsQnYpLDE5Nyk6TT11KFEoTmEocyksQVMpLDE5NyksTSksZSYmKGo9PW41fHxqPT1lNSkmJihzLm8uYis9Z3QpLGUmJihqPT1taHR8fGo9PW41fHxqPT1lNSkpe2ZvcihLPW5ldyBTKHMuaik7Sy5hPEsuYy5jLmxlbmd0aDspRz11KEooSyksMTEpLCh2ZSgpLGx1KS5IYyhHLmopJiYoQz11KHRyKHQuayxHKSwxMjEpLEcubi5iPUMuZS1rKTtmb3IoZD1uZXcgUyhzLmIpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDcwKSx0dD11KFEocyxOdiksMjEpLHR0LkhjKChweSgpLEhoKSk/aC5uLmIrPWd0OnR0LkhjKGQwKSYmKGgubi5iKz1ndC8yKTsoaj09bjV8fGo9PWU1KSYmS28ocywodmUoKSxtcikpLkpjKG5ldyBIJHQoZ3QpKX19ZnVuY3Rpb24gbWhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixIO2lmKCF0LmIpcmV0dXJuITE7Zm9yKGg9bnVsbCxqPW51bGwsdj1uZXcgUXJ0KG51bGwsbnVsbCkscz0xLHYuYVsxXT10LmIsTT12O00uYVtzXTspaz1zLGQ9aixqPU0sTT1NLmFbc10scj10LmEudWUoZSxNLmQpLHM9cjwwPzA6MSxyPT0wJiYoIW4uY3x8RmMoTS5lLG4uZCkpJiYoaD1NKSwhKE0mJk0uYikmJiFEbShNLmFbc10pJiYoRG0oTS5hWzEtc10pP2o9ai5hW2tdPWR6KE0scyk6RG0oTS5hWzEtc10pfHwoSD1qLmFbMS1rXSxIJiYoIURtKEguYVsxLWtdKSYmIURtKEguYVtrXSk/KGouYj0hMSxILmI9ITAsTS5iPSEwKToobz1kLmFbMV09PWo/MTowLERtKEguYVtrXSk/ZC5hW29dPV9adChqLGspOkRtKEguYVsxLWtdKSYmKGQuYVtvXT1keihqLGspKSxNLmI9ZC5hW29dLmI9ITAsZC5hW29dLmFbMF0uYj0hMSxkLmFbb10uYVsxXS5iPSExKSkpKTtyZXR1cm4gaCYmKG4uYj0hMCxuLmQ9aC5lLE0hPWgmJihDPW5ldyBRcnQoTS5kLE0uZSksY2duKHQsdixoLEMpLGo9PWgmJihqPUMpKSxqLmFbai5hWzFdPT1NPzE6MF09TS5hW00uYVswXT8wOjFdLC0tdC5jKSx0LmI9di5hWzFdLHQuYiYmKHQuYi5iPSExKSxuLmJ9ZnVuY3Rpb24gSDRuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0sajtmb3Iocz1uZXcgUyh0LmEuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOylmb3Iocj11KEoocyksNTcpLHY9ci5jLktjKCk7di5PYigpOylkPXUodi5QYigpLDU3KSxyLmEhPWQuYSYmKEJwKHQuYS5kKT9NPXQuYS5nLk9lKHIsZCk6TT10LmEuZy5QZShyLGQpLG89ci5iLmErci5kLmIrTS1kLmIuYSxvPWIuTWF0aC5jZWlsKG8pLG89Yi5NYXRoLm1heCgwLG8pLHFtdChyLGQpPyhoPUZ3KG5ldyBYYix0LmQpLGs9cHMoYi5NYXRoLmNlaWwoZC5iLmEtci5iLmEpKSxlPWstKGQuYi5hLXIuYi5hKSxDPVh4KHIpLmEsbj1yLEN8fChDPVh4KGQpLmEsZT0tZSxuPWQpLEMmJihuLmIuYS09ZSxDLm4uYS09ZSkseWYobGYodWYoaGYoY2YobmV3IENoLGIuTWF0aC5tYXgoMCxrKSksMSksaCksdC5jW3IuYS5kXSkpLHlmKGxmKHVmKGhmKGNmKG5ldyBDaCxiLk1hdGgubWF4KDAsLWspKSwxKSxoKSx0LmNbZC5hLmRdKSkpOihqPTEsKF90KHIuZywxNDUpJiZfdChkLmcsMTApfHxfdChkLmcsMTQ1KSYmX3Qoci5nLDEwKSkmJihqPTIpLHlmKGxmKHVmKGhmKGNmKG5ldyBDaCxwcyhvKSksaiksdC5jW3IuYS5kXSksdC5jW2QuYS5kXSkpKSl9ZnVuY3Rpb24geWhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtpZihuKWZvcihyPS0xLEM9bmV3IGRhKGUsMCk7Qy5iPEMuZC5nYygpOyl7aWYoZD0oWm4oQy5iPEMuZC5nYygpKSx1KEMuZC5YYihDLmM9Qy5iKyspLDEwKSksTT10LmNbZC5jLnBdW2QucF0uYSxNPT1udWxsKXtmb3IoaD1yKzEsbz1uZXcgZGEoZSxDLmIpO28uYjxvLmQuZ2MoKTspaWYoaj1JUWUodCwoWm4oby5iPG8uZC5nYygpKSx1KG8uZC5YYihvLmM9by5iKyspLDEwKSkpLmEsaiE9bnVsbCl7aD0oT24oaiksaik7YnJlYWt9TT0ocitoKS8yLHQuY1tkLmMucF1bZC5wXS5hPU0sdC5jW2QuYy5wXVtkLnBdLmQ9KE9uKE0pLE0pLHQuY1tkLmMucF1bZC5wXS5iPTF9cj0oT24oTSksTSl9ZWxzZXtmb3Iocz0wLGs9bmV3IFMoZSk7ay5hPGsuYy5jLmxlbmd0aDspZD11KEooayksMTApLHQuY1tkLmMucF1bZC5wXS5hIT1udWxsJiYocz1iLk1hdGgubWF4KHMsWHQodC5jW2QuYy5wXVtkLnBdLmEpKSk7Zm9yKHMrPTIsdj1uZXcgUyhlKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSwxMCksdC5jW2QuYy5wXVtkLnBdLmE9PW51bGwmJihNPXVsKHQuaSwyNCkqJEkqcy0xLHQuY1tkLmMucF1bZC5wXS5hPU0sdC5jW2QuYy5wXVtkLnBdLmQ9TSx0LmNbZC5jLnBdW2QucF0uYj0xKX19ZnVuY3Rpb24gVjRuKCl7aWkoZTMsbmV3IHZCKSxpaShacixuZXcgRUIpLGlpKFVoLG5ldyBFSiksaWkoczEsbmV3IFZMKSxpaShOZnQsbmV3IEdMKSxpaShwVSxuZXcgbHgpLGlpKGFnLG5ldyBUSiksaWkoc0EsbmV3IENKKSxpaShmUCxuZXcgY0opLGlpKE1mdCxuZXcgdUopLGlpKF9iLG5ldyBsSiksaWkoV2gsbmV3IGhKKSxpaShpMSxuZXcgZkopLGlpKFZ2LG5ldyBkSiksaWkobjMsbmV3IHdCKSxpaShNdSxuZXcgZ0opLGlpKHQzLG5ldyBwSiksaWkoY2MsbmV3IGJKKSxpaShobyxuZXcgamspLGlpKGh1LG5ldyBlQyksaWkoUnMsbmV3IG1CKSxpaShjdChHdSwxKSxuZXcgd0opLGlpKE02LG5ldyB5QiksaWkodVMsbmV3IHhCKSxpaSh0VixuZXcgdkopLGlpKFBMdCxuZXcgbkMpLGlpKGxhLG5ldyBDbSksaWkoS0F0LG5ldyBrQiksaWkoWkF0LG5ldyBtSiksaWkoeEx0LG5ldyB5SiksaWkoYlUsbmV3IHJDKSxpaShpNyxuZXcgVEIpLGlpKGphLG5ldyBDQiksaWkoSjh0LG5ldyB1YyksaWkoU3YsbmV3IHhKKSxpaSh0RXQsbmV3IF9CKSxpaSh3THQsbmV3IGlDKSxpaShGTHQsbmV3IGtKKSxpaShBdixuZXcgc0MpLGlpKEFlLG5ldyBTQiksaWkoUUF0LG5ldyBhQyksaWkoTkx0LG5ldyBvQyl9ZnVuY3Rpb24gRzRuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE07Zm9yKCFuJiYobj1TdW4oZS5xLmdldFRpbWV6b25lT2Zmc2V0KCkpKSxzPShlLnEuZ2V0VGltZXpvbmVPZmZzZXQoKS1uLmEpKjZlNCxkPW5ldyBYMnQoUGEoVHUoZS5xLmdldFRpbWUoKSkscykpLHY9ZCxkLnEuZ2V0VGltZXpvbmVPZmZzZXQoKSE9ZS5xLmdldFRpbWV6b25lT2Zmc2V0KCkmJihzPjA/cy09ODY0ZTU6cys9ODY0ZTUsdj1uZXcgWDJ0KFBhKFR1KGUucS5nZXRUaW1lKCkpLHMpKSksQz1uZXcgSW0saz10LmEubGVuZ3RoLG89MDtvPGs7KWlmKHI9d2EodC5hLG8pLHI+PTk3JiZyPD0xMjJ8fHI+PTY1JiZyPD05MCl7Zm9yKGg9bysxO2g8ayYmd2EodC5hLGgpPT1yOysraCk7anhuKEMscixoLW8sZCx2LG4pLG89aH1lbHNlIGlmKHI9PTM5KXtpZigrK28sbzxrJiZ3YSh0LmEsbyk9PTM5KXtDLmErPSInIiwrK287Y29udGludWV9Zm9yKE09ITE7IU07KXtmb3IoaD1vO2g8ayYmd2EodC5hLGgpIT0zOTspKytoO2lmKGg+PWspdGhyb3cgaXQobmV3IEZuKCJNaXNzaW5nIHRyYWlsaW5nICciKSk7aCsxPGsmJndhKHQuYSxoKzEpPT0zOT8rK2g6TT0hMCxHcihDLFBsKHQuYSxvLGgpKSxvPWgrMX19ZWxzZSBDLmErPVN0cmluZy5mcm9tQ2hhckNvZGUociksKytvO3JldHVybiBDLmF9ZnVuY3Rpb24gVTRuKHQpe3ZhciBlLG4scixzLG8saCxkLHY7Zm9yKGU9bnVsbCxyPW5ldyBTKHQpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDIzMyksWHQoRTEobi5nLG4uZFswXSkuYSksbi5iPW51bGwsbi5lJiZuLmUuZ2MoKT4wJiZuLmM9PTAmJighZSYmKGU9bmV3IGhlKSxlLmNbZS5jLmxlbmd0aF09bik7aWYoZSlmb3IoO2UuYy5sZW5ndGghPTA7KXtpZihuPXUoRmcoZSwwKSwyMzMpLG4uYiYmbi5iLmMubGVuZ3RoPjApe2ZvcihvPSghbi5iJiYobi5iPW5ldyBoZSksbmV3IFMobi5iKSk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KEoobyksMjMzKSxwTShFMShzLmcscy5kWzBdKS5hKT09cE0oRTEobi5nLG4uZFswXSkuYSkpe2lmKFJvKHQscywwKT5Sbyh0LG4sMCkpcmV0dXJuIG5ldyBmYShzLG4pfWVsc2UgaWYoWHQoRTEocy5nLHMuZFswXSkuYSk+WHQoRTEobi5nLG4uZFswXSkuYSkpcmV0dXJuIG5ldyBmYShzLG4pfWZvcihkPSghbi5lJiYobi5lPW5ldyBoZSksbi5lKS5LYygpO2QuT2IoKTspaD11KGQuUGIoKSwyMzMpLHY9KCFoLmImJihoLmI9bmV3IGhlKSxoLmIpLEttKDAsdi5jLmxlbmd0aCksWEModi5jLDAsbiksaC5jPT12LmMubGVuZ3RoJiYoZS5jW2UuYy5sZW5ndGhdPWgpfXJldHVybiBudWxsfWZ1bmN0aW9uIHhoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZih0PT1udWxsKXJldHVybiBfdTtpZih2PWUuYS56Yyh0LGUpLHYhPW51bGwpcmV0dXJuIlsuLi5dIjtmb3Iobj1uZXcgZjIoWWEsIlsiLCJdIikscz10LG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLHIhPW51bGwmJm9sKHIpLmkmND9BcnJheS5pc0FycmF5KHIpJiYoQz1fRChyKSwhKEM+PTE0JiZDPD0xNikpP2UuYS5fYihyKT8obi5hP0dyKG4uYSxuLmIpOm4uYT1uZXcgT2wobi5kKSxoOShuLmEsIlsuLi5dIikpOihkPXUyKHIpLGs9bmV3IEU5KGUpLCQwKG4seGhlKGQsaykpKTpfdChyLDE3Nyk/JDAobixOcG4odShyLDE3NykpKTpfdChyLDE5MCk/JDAobixDMG4odShyLDE5MCkpKTpfdChyLDE5NSk/JDAobixGZ24odShyLDE5NSkpKTpfdChyLDIwMTIpPyQwKG4sXzBuKHUociwyMDEyKSkpOl90KHIsNDgpPyQwKG4sRnBuKHUociw0OCkpKTpfdChyLDM2NCk/JDAobixLcG4odShyLDM2NCkpKTpfdChyLDgzMik/JDAobixQcG4odShyLDgzMikpKTpfdChyLDEwNCkmJiQwKG4sT3BuKHUociwxMDQpKSk6JDAobixyPT1udWxsP191OiRvKHIpKTtyZXR1cm4gbi5hP24uZS5sZW5ndGg9PTA/bi5hLmE6bi5hLmErKCIiK24uZSk6bi5jfWZ1bmN0aW9uIGtoZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3Q7Zm9yKGQ9eDQoZSwhMSwhMSksZ3Q9bEkoZCksciYmKGd0PXFEKGd0KSksU3Q9WHQoeWUocWUoZSwob18oKSxRdXQpKSkpLHR0PShabihndC5iIT0wKSx1KGd0LmEuYS5jLDgpKSxNPXUoWmYoZ3QsMSksOCksZ3QuYj4yPyhDPW5ldyBoZSxMcyhDLG5ldyBRZChndCwxLGd0LmIpKSxvPWVmZShDLFN0K3QuYSksTXQ9bmV3IG5hdChvKSxNbyhNdCxlKSxuLmNbbi5jLmxlbmd0aF09TXQpOnI/TXQ9dSh0cih0LmIsZTAoZSkpLDI2Nik6TXQ9dSh0cih0LmIsdGIoZSkpLDI2Niksdj1lMChlKSxyJiYodj10YihlKSksaD1lcG4odHQsdiksaz1TdCt0LmEsaC5hPyhrKz1iLk1hdGguYWJzKHR0LmItTS5iKSxLPW5ldyAkZShNLmEsKE0uYit0dC5iKS8yKSk6KGsrPWIuTWF0aC5hYnModHQuYS1NLmEpLEs9bmV3ICRlKChNLmErdHQuYSkvMixNLmIpKSxyP2tpKHQuZCxlLG5ldyBLM3QoTXQsaCxLLGspKTpraSh0LmMsZSxuZXcgSzN0KE10LGgsSyxrKSksa2kodC5iLGUsTXQpLEc9KCFlLm4mJihlLm49bmV3IGZlKHFvLGUsMSw3KSksZS5uKSxIPW5ldyBucihHKTtILmUhPUguaS5nYygpOylqPXUoZHIoSCksMTM3KSxzPXhJKHQsaiwhMCwwLDApLG4uY1tuLmMubGVuZ3RoXT1zfWZ1bmN0aW9uIFc0bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQztmb3Ioaz1uZXcgaGUsZD1uZXcgaGUsaD1uZXcgUyh0KTtoLmE8aC5jLmMubGVuZ3RoOylzPXUoSihoKSwxMTIpLG9NKHMscy5mLmMubGVuZ3RoKSxUQyhzLHMuay5jLmxlbmd0aCkscy5kPT0wJiYoay5jW2suYy5sZW5ndGhdPXMpLHMuaT09MCYmcy5lLmI9PTAmJihkLmNbZC5jLmxlbmd0aF09cyk7Zm9yKHI9LTE7ay5jLmxlbmd0aCE9MDspZm9yKHM9dShGZyhrLDApLDExMiksbj1uZXcgUyhzLmspO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDEyOSksQz1lLmIsYVIoQyxiLk1hdGgubWF4KEMubyxzLm8rMSkpLHI9Yi5NYXRoLm1heChyLEMubyksb00oQyxDLmQtMSksQy5kPT0wJiYoay5jW2suYy5sZW5ndGhdPUMpO2lmKHI+LTEpe2ZvcihvPW5ldyBTKGQpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDExMikscy5vPXI7Zm9yKDtkLmMubGVuZ3RoIT0wOylmb3Iocz11KEZnKGQsMCksMTEyKSxuPW5ldyBTKHMuZik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksMTI5KSx2PWUuYSwhKHYuZS5iPjApJiYoYVIodixiLk1hdGgubWluKHYubyxzLm8tMSkpLFRDKHYsdi5pLTEpLHYuaT09MCYmKGQuY1tkLmMubGVuZ3RoXT12KSl9fWZ1bmN0aW9uIFBFKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsaztpZihrPXQuYywhZSYmKGU9b0x0KSx0LmM9ZSx0LkRiJjQmJiEodC5EYiYxKSYmKHY9bmV3IEpzKHQsMSwyLGssdC5jKSxuP24uRWkodik6bj12KSxrIT1lKXtpZihfdCh0LkNiLDI4NCkpdC5EYj4+MTY9PS0xMD9uPXUodC5DYiwyODQpLm5rKGUsbik6dC5EYj4+MTY9PS0xNSYmKCFlJiYoZT0oZG4oKSxXMSkpLCFrJiYoaz0oZG4oKSxXMSkpLHQuQ2IubmgoKSYmKHY9bmV3IHowKHQuQ2IsMSwxMyxrLGUsSGcoYWwodSh0LkNiLDU5KSksdCksITEpLG4/bi5FaSh2KTpuPXYpKTtlbHNlIGlmKF90KHQuQ2IsODgpKXQuRGI+PjE2PT0tMjMmJihfdChlLDg4KXx8KGU9KGRuKCksS2gpKSxfdChrLDg4KXx8KGs9KGRuKCksS2gpKSx0LkNiLm5oKCkmJih2PW5ldyB6MCh0LkNiLDEsMTAsayxlLEhnKExjKHUodC5DYiwyNikpLHQpLCExKSxuP24uRWkodik6bj12KSk7ZWxzZSBpZihfdCh0LkNiLDQ0NCkpZm9yKGQ9dSh0LkNiLDgzNiksaD0oIWQuYiYmKGQuYj1uZXcgbVIobmV3IGFldCkpLGQuYiksbz0ocj1uZXcgcDIobmV3IENnKGguYSkuYSksbmV3IHlSKHIpKTtvLmEuYjspcz11KFp3KG8uYSkuY2QoKSw4Nyksbj1QRShzLHZxKHMsZCksbil9cmV0dXJuIG59ZnVuY3Rpb24gWTRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtmb3IoaD1qZShSZShxZSh0LChUZSgpLEh5KSkpKSxqPXUocWUodCxHeSksMjEpLHY9ITEsaz0hMSxNPW5ldyBucigoIXQuYyYmKHQuYz1uZXcgZmUoZ2wsdCw5LDkpKSx0LmMpKTtNLmUhPU0uaS5nYygpJiYoIXZ8fCFrKTspe2ZvcihvPXUoZHIoTSksMTE4KSxkPTAscz16cChEMShsdChjdChqMSwxKSxEZSwyMCwwLFsoIW8uZCYmKG8uZD1uZXcgQ24oWXMsbyw4LDUpKSxvLmQpLCghby5lJiYoby5lPW5ldyBDbihZcyxvLDcsNCkpLG8uZSldKSkpO3pyKHMpJiYocj11KE1yKHMpLDc5KSxDPWgmJmZ2KHIpJiZqZShSZShxZShyLGoyKSkpLG49SmxlKCghci5iJiYoci5iPW5ldyBDbihicixyLDQsNykpLHIuYiksbyk/dD09ZXMoRG8odShBdCgoIXIuYyYmKHIuYz1uZXcgQ24oYnIsciw1LDgpKSxyLmMpLDApLDgyKSkpOnQ9PWVzKERvKHUoQXQoKCFyLmImJihyLmI9bmV3IENuKGJyLHIsNCw3KSksci5iKSwwKSw4MikpKSwhKChDfHxuKSYmKCsrZCxkPjEpKSk7KTsoZD4wfHxqLkhjKChadSgpLHNnKSkmJighby5uJiYoby5uPW5ldyBmZShxbyxvLDEsNykpLG8ubikuaT4wKSYmKHY9ITApLGQ+MSYmKGs9ITApfXYmJmUuRmMoKG9vKCksdmgpKSxrJiZlLkZjKChvbygpLHlTKSl9ZnVuY3Rpb24gRWhlKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0sajtpZihqPXUocWUodCwodWkoKSxHMikpLDIxKSxqLmRjKCkpcmV0dXJuIG51bGw7aWYoZD0wLGg9MCxqLkhjKChBbCgpLG9QKSkpe2ZvcihDPXUocWUodCxLUyksOTgpLHI9MixuPTIscz0yLG89MixlPWVzKHQpP3UocWUoZXModCkscXYpLDEwMyk6dShxZSh0LHF2KSwxMDMpLGs9bmV3IG5yKCghdC5jJiYodC5jPW5ldyBmZShnbCx0LDksOSkpLHQuYykpO2suZSE9ay5pLmdjKCk7KWlmKHY9dShkcihrKSwxMTgpLE09dShxZSh2LHU1KSw2MSksTT09KHZlKCksWm8pJiYoTT11eHQodixlKSx3byh2LHU1LE0pKSxDPT0odWEoKSxHYykpc3dpdGNoKE0uZyl7Y2FzZSAxOnI9Yi5NYXRoLm1heChyLHYuaSt2LmcpO2JyZWFrO2Nhc2UgMjpuPWIuTWF0aC5tYXgobix2Lmordi5mKTticmVhaztjYXNlIDM6cz1iLk1hdGgubWF4KHMsdi5pK3YuZyk7YnJlYWs7Y2FzZSA0Om89Yi5NYXRoLm1heChvLHYuait2LmYpfWVsc2Ugc3dpdGNoKE0uZyl7Y2FzZSAxOnIrPXYuZysyO2JyZWFrO2Nhc2UgMjpuKz12LmYrMjticmVhaztjYXNlIDM6cys9di5nKzI7YnJlYWs7Y2FzZSA0Om8rPXYuZisyfWQ9Yi5NYXRoLm1heChyLHMpLGg9Yi5NYXRoLm1heChuLG8pfXJldHVybiB3dih0LGQsaCwhMCwhMCl9ZnVuY3Rpb24gUmF0KHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdDtmb3IoTXQ9dShCbChleihSaShuZXcgVG4obnVsbCxuZXcgX24oZS5kLDE2KSksbmV3IHQ4KG4pKSxuZXcgbE0obikpLGMyKG5ldyBrZSxuZXcgY2UsbmV3IFhuLGx0KGN0KGZsLDEpLG9lLDEzMiwwLFsoTzEoKSxVbCldKSkpLDE1KSxNPXdpLEM9U2Esdj1uZXcgUyhlLmIuaik7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTEpLGQuaj09biYmKE09Yi5NYXRoLm1pbihNLGQucCksQz1iLk1hdGgubWF4KEMsZC5wKSk7aWYoTT09d2kpZm9yKGg9MDtoPE10LmdjKCk7aCsrKVBtdCh1KE10LlhiKGgpLDEwMSksbixoKTtlbHNlIGZvcihTdD1OdChDcixYciwyNSxzLmxlbmd0aCwxNSwxKSxSZW4oU3QsU3QubGVuZ3RoKSxndD1NdC5LYygpO2d0Lk9iKCk7KXtmb3IodHQ9dShndC5QYigpLDEwMSksbz11KHRyKHQuYix0dCksMTc3KSxrPTAsSz1NO0s8PUM7SysrKW9bS10mJihrPWIuTWF0aC5tYXgoayxyW0tdKSk7aWYodHQuaSl7Zm9yKEg9dHQuaS5jLFJ0PW5ldyBIcyxqPTA7ajxzLmxlbmd0aDtqKyspc1tIXVtqXSYmRnMoUnQscGUoU3Rbal0pKTtmb3IoO0kwKFJ0LHBlKGspKTspKytrfWZvcihQbXQodHQsbixrKSxHPU07Rzw9QztHKyspb1tHXSYmKHJbR109aysxKTt0dC5pJiYoU3RbdHQuaS5jXT1rKX19ZnVuY3Rpb24gSzRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSztmb3Iocz1udWxsLHI9bmV3IFMoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxMCksSWF0KG4pP289KGQ9RncoeE0obmV3IFhiLG4pLHQuZiksdj1Gdyh4TShuZXcgWGIsbiksdC5mKSxrPW5ldyBPdnQobiwhMCxkLHYpLEM9bi5vLmIsTT0oY3koKSwobi5xP24ucTood24oKSx3bigpLHUwKSkuX2IoKFRlKCksQnYpKT9qPXUoUShuLEJ2KSwxOTcpOmo9dShRKE5hKG4pLEFTKSwxOTcpLGopLEg9MWU0LE09PWU1JiYoSD0xKSxHPXlmKGxmKHVmKGNmKGhmKG5ldyBDaCxIKSxwcyhiLk1hdGguY2VpbChDKSkpLGQpLHYpKSxNPT1uNSYmRnModC5kLEcpLG9sZSh0LGwyKEtvKG4sKHZlKCksQm4pKSksayksb2xlKHQsS28obixIbiksayksayk6bz0oSz1Gdyh4TShuZXcgWGIsbiksdC5mKSxscyhSaShuZXcgVG4obnVsbCxuZXcgX24obi5qLDE2KSksbmV3IGtRKSxuZXcgd0d0KHQsSykpLG5ldyBPdnQobiwhMSxLLEspKSx0Lmlbbi5wXT1vLHMmJihoPXMuYy5kLmErVzModC5uLHMuYyxuKStuLmQuZCxzLmJ8fChoKz1zLmMuby5iKSx5ZihsZih1ZihoZihjZihuZXcgQ2gscHMoYi5NYXRoLmNlaWwoaCkpKSwwKSxzLmQpLG8uYSkpKSxzPW99ZnVuY3Rpb24gWDRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSztmb3IodnIoZSwiTGFiZWwgZHVtbXkgaW5zZXJ0aW9ucyIsMSksTT1uZXcgaGUsaD1YdCh5ZShRKHQsKFRlKCksVjYpKSkpLGs9WHQoeWUoUSh0LFd5KSkpLEM9dShRKHQsV2wpLDEwMyksSD1uZXcgUyh0LmEpO0guYTxILmMuYy5sZW5ndGg7KWZvcihqPXUoSihIKSwxMCksbz1uZXcgYXIobHIoRHMoaikuYS5LYygpLG5ldyB6KSk7enIobyk7KWlmKHM9dShNcihvKSwxNykscy5jLmkhPXMuZC5pJiZsbnQocy5iLHMyZSkpe2ZvcihLPXFvbihzKSxHPVVkKHMuYi5jLmxlbmd0aCksbj1CMm4odCxzLEssRyksTS5jW00uYy5sZW5ndGhdPW4scj1uLm8sZD1uZXcgZGEocy5iLDApO2QuYjxkLmQuZ2MoKTspdj0oWm4oZC5iPGQuZC5nYygpKSx1KGQuZC5YYihkLmM9ZC5iKyspLDcwKSksVnQoUSh2LE9kKSk9PT1WdCgoTTEoKSxQNykpJiYoQz09KGFvKCkscmcpfHxDPT1uZz8oci5hKz12Lm8uYStrLHIuYj1iLk1hdGgubWF4KHIuYix2Lm8uYikpOihyLmE9Yi5NYXRoLm1heChyLmEsdi5vLmEpLHIuYis9di5vLmIrayksRy5jW0cuYy5sZW5ndGhdPXYsQ2woZCkpO0M9PShhbygpLHJnKXx8Qz09bmc/KHIuYS09ayxyLmIrPWgrSyk6ci5iKz1oLWsrS31Mcyh0LmEsTSksb3IoZSl9ZnVuY3Rpb24gUTRuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixIO2ZvcihvPW5ldyBZb2UoZSksTT1qdm4odCxlLG8pLEg9Yi5NYXRoLm1heChYdCh5ZShRKGUsKFRlKCksSmcpKSkpLDEpLEM9bmV3IFMoTS5hKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw0Niksdj1uc2UodShrLmEsOCksdShrLmIsOCksSCksRT0hMCxFPUUmQncobixuZXcgJGUodi5jLHYuZCkpLEU9RSZCdyhuLGptKG5ldyAkZSh2LmMsdi5kKSx2LmIsMCkpLEU9RSZCdyhuLGptKG5ldyAkZSh2LmMsdi5kKSwwLHYuYSkpLEUmQncobixqbShuZXcgJGUodi5jLHYuZCksdi5iLHYuYSkpO3N3aXRjaChqPW8uZCxkPW5zZSh1KE0uYi5hLDgpLHUoTS5iLmIsOCksSCksaj09KHZlKCksQm4pfHxqPT1Ibj8oci5jW2ouZ109Yi5NYXRoLm1pbihyLmNbai5nXSxkLmQpLHIuYltqLmddPWIuTWF0aC5tYXgoci5iW2ouZ10sZC5kK2QuYSkpOihyLmNbai5nXT1iLk1hdGgubWluKHIuY1tqLmddLGQuYyksci5iW2ouZ109Yi5NYXRoLm1heChyLmJbai5nXSxkLmMrZC5iKSkscz1DcyxoPW8uYy5pLmQsai5nKXtjYXNlIDQ6cz1oLmM7YnJlYWs7Y2FzZSAyOnM9aC5iO2JyZWFrO2Nhc2UgMTpzPWguYTticmVhaztjYXNlIDM6cz1oLmR9cmV0dXJuIHIuYVtqLmddPWIuTWF0aC5tYXgoci5hW2ouZ10scyksb31mdW5jdGlvbiBaNG4odCl7dmFyIGUsbixyLHM7aWYobj10LkQhPW51bGw/dC5EOnQuQixlPWhkKG4sQ3UoOTEpKSxlIT0tMSl7cj1uLnN1YnN0cigwLGUpLHM9bmV3IEFnO2RvIHMuYSs9IlsiO3doaWxlKChlPXY4KG4sOTEsKytlKSkhPS0xKTtobihyLGI2KT9zLmErPSJaIjpobihyLHRTKT9zLmErPSJCIjpobihyLEZIKT9zLmErPSJDIjpobihyLGVTKT9zLmErPSJEIjpobihyLG5TKT9zLmErPSJGIjpobihyLHJTKT9zLmErPSJJIjpobihyLGlTKT9zLmErPSJKIjpobihyLHNTKT9zLmErPSJTIjoocy5hKz0iTCIscy5hKz0iIityLHMuYSs9IjsiKTt0cnl7cmV0dXJuIG51bGx9Y2F0Y2gobyl7aWYobz1XaShvKSwhX3Qobyw2MCkpdGhyb3cgaXQobyl9fWVsc2UgaWYoaGQobixDdSg0NikpPT0tMSl7aWYoaG4obixiNikpcmV0dXJuIHBsO2lmKGhuKG4sdFMpKXJldHVybiBHdTtpZihobihuLEZIKSlyZXR1cm4geGg7aWYoaG4obixlUykpcmV0dXJuIGFhO2lmKGhuKG4sblMpKXJldHVybiBhMztpZihobihuLHJTKSlyZXR1cm4gQ3I7aWYoaG4obixpUykpcmV0dXJuIE9iO2lmKGhuKG4sc1MpKXJldHVybiBnNX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBUaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEM7Zm9yKGs9bmV3IFkwKG4pLE1vKGssZSksSnQoaywoYWUoKSxfaSksZSksay5vLmE9ZS5nLGsuby5iPWUuZixrLm4uYT1lLmksay5uLmI9ZS5qLGxlKG4uYSxrKSxraSh0LmEsZSxrKSwoKCFlLmEmJihlLmE9bmV3IGZlKHJzLGUsMTAsMTEpKSxlLmEpLmkhPTB8fGplKFJlKHFlKGUsKFRlKCksSHkpKSkpKSYmSnQoayxlQ3QsKE5uKCksITApKSx2PXUoUShuLFZjKSwyMSksQz11KFEoaywoVGUoKSxjcykpLDk4KSxDPT0odWEoKSxUYik/SnQoayxjcyxHMSk6QyE9RzEmJnYuRmMoKG9vKCkseTcpKSxyPXUoUShuLFdsKSwxMDMpLGQ9bmV3IG5yKCghZS5jJiYoZS5jPW5ldyBmZShnbCxlLDksOSkpLGUuYykpO2QuZSE9ZC5pLmdjKCk7KWg9dShkcihkKSwxMTgpLGplKFJlKHFlKGgsejIpKSl8fFM1bih0LGgsayx2LHIsQyk7Zm9yKG89bmV3IG5yKCghZS5uJiYoZS5uPW5ldyBmZShxbyxlLDEsNykpLGUubikpO28uZSE9by5pLmdjKCk7KXM9dShkcihvKSwxMzcpLCFqZShSZShxZShzLHoyKSkpJiZzLmEmJmxlKGsuYixWaXQocykpO3JldHVybiBqZShSZShRKGssQ1MpKSkmJnYuRmMoKG9vKCksS1YpKSxqZShSZShRKGssbEcpKSkmJih2LkZjKChvbygpLFhWKSksdi5GYyh5UyksSnQoayxjcyxHMSkpLGt9ZnVuY3Rpb24gSjRuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbjtkPXUodHIoZS5jLHQpLDQ1OSksTXQ9ZS5hLmMsdj1lLmEuYytlLmEuYixRZT1kLmYsUm49ZC5hLGg9UWU8Um4sSz1uZXcgJGUoTXQsUWUpLFN0PW5ldyAkZSh2LFJuKSxzPShNdCt2KS8yLHR0PW5ldyAkZShzLFFlKSxSdD1uZXcgJGUocyxSbiksbz1sd24odCxRZSxSbiksdWU9XzEoZS5CKSxfZT1uZXcgJGUocyxvKSxXZT1fMShlLkQpLG49T3VuKGx0KGN0KFdzLDEpLGVlLDgsMCxbdWUsX2UsV2VdKSksSD0hMSxndD1lLkIuaSxndCYmZ3QuYyYmZC5kJiYoaz1oJiZndC5wPGd0LmMuYS5jLmxlbmd0aC0xfHwhaCYmZ3QucD4wLGs/ayYmKGo9Z3QucCxoPysrajotLWosTT11KE5lKGd0LmMuYSxqKSwxMCkscj1ncmUoTSksSD0hKGNhdChyLHVlLG5bMF0pfHxVS3Qocix1ZSxuWzBdKSkpOkg9ITApLEc9ITEsS3Q9ZS5ELmksS3QmJkt0LmMmJmQuZSYmKEM9aCYmS3QucD4wfHwhaCYmS3QucDxLdC5jLmEuYy5sZW5ndGgtMSxDPyhqPUt0LnAsaD8tLWo6KytqLE09dShOZShLdC5jLmEsaiksMTApLHI9Z3JlKE0pLEc9IShjYXQocixuWzBdLFdlKXx8VUt0KHIsblswXSxXZSkpKTpHPSEwKSxIJiZHJiZyaSh0LmEsX2UpLEh8fFY5KHQuYSxsdChjdChXcywxKSxlZSw4LDAsW0ssdHRdKSksR3x8VjkodC5hLGx0KGN0KFdzLDEpLGVlLDgsMCxbUnQsU3RdKSl9ZnVuY3Rpb24gTnEodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO2lmKF90KHQuVWcoKSwxNjApPyhOcSh1KHQuVWcoKSwxNjApLGUpLGUuYSs9IiA+ICIpOmUuYSs9IlJvb3QgIixuPXQuVGcoKS56YixobihuLnN1YnN0cigwLDMpLCJFbGsiKT9HcihlLG4uc3Vic3RyKDMpKTplLmErPSIiK24scz10LnpnKCkscyl7R3IoKGUuYSs9IiAiLGUpLHMpO3JldHVybn1pZihfdCh0LDM1NCkmJihrPXUodCwxMzcpLmEsaykpe0dyKChlLmErPSIgIixlKSxrKTtyZXR1cm59Zm9yKGg9bmV3IG5yKHQuQWcoKSk7aC5lIT1oLmkuZ2MoKTspaWYobz11KGRyKGgpLDEzNyksaz1vLmEsayl7R3IoKGUuYSs9IiAiLGUpLGspO3JldHVybn1pZihfdCh0LDM1MikmJihyPXUodCw3OSksIXIuYiYmKHIuYj1uZXcgQ24oYnIsciw0LDcpKSxyLmIuaSE9MCYmKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jLmkhPTApKSl7Zm9yKGUuYSs9IiAoIixkPW5ldyBOeCgoIXIuYiYmKHIuYj1uZXcgQ24oYnIsciw0LDcpKSxyLmIpKTtkLmUhPWQuaS5nYygpOylkLmU+MCYmKGUuYSs9WWEpLE5xKHUoZHIoZCksMTYwKSxlKTtmb3IoZS5hKz1Vb3Qsdj1uZXcgTngoKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jKSk7di5lIT12LmkuZ2MoKTspdi5lPjAmJihlLmErPVlhKSxOcSh1KGRyKHYpLDE2MCksZSk7ZS5hKz0iKSJ9fWZ1bmN0aW9uIHQ1bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSDtpZihvPXUoUSh0LChhZSgpLF9pKSksNzkpLCEhbyl7Zm9yKHI9dC5hLHM9bmV3IHhvKG4pLExpKHMsVmRuKHQpKSxKOCh0LmQuaSx0LmMuaSk/KGo9dC5jLE09WW8obHQoY3QoV3MsMSksZWUsOCwwLFtqLm4sai5hXSkpLGlhKE0sbikpOk09XzEodC5jKSxmcyhyLE0sci5hLHIuYS5hKSxIPV8xKHQuZCksUSh0LFFsdCkhPW51bGwmJkxpKEgsdShRKHQsUWx0KSw4KSksZnMocixILHIuYy5iLHIuYyksbnkocixzKSxoPXg0KG8sITAsITApLHV6KGgsdShBdCgoIW8uYiYmKG8uYj1uZXcgQ24oYnIsbyw0LDcpKSxvLmIpLDApLDgyKSksbHooaCx1KEF0KCghby5jJiYoby5jPW5ldyBDbihicixvLDUsOCkpLG8uYyksMCksODIpKSxDSShyLGgpLEM9bmV3IFModC5iKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw3MCksZD11KFEoayxfaSksMTM3KSx0dihkLGsuby5hKSxKdyhkLGsuby5iKSx4MShkLGsubi5hK3MuYSxrLm4uYitzLmIpLHdvKGQsKHI2KCksYmx0KSxSZShRKGssYmx0KSkpO3Y9dShRKHQsKFRlKCksU28pKSw3NCksdj8obnkodixzKSx3byhvLFNvLHYpKTp3byhvLFNvLG51bGwpLGU9PShXMCgpLFg2KT93byhvLGVnLFg2KTp3byhvLGVnLG51bGwpfX1mdW5jdGlvbiBlNW4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10O2ZvcihIPWUuYy5sZW5ndGgsaj0wLE09bmV3IFModC5iKTtNLmE8TS5jLmMubGVuZ3RoOylpZihDPXUoSihNKSwyOSksZ3Q9Qy5hLGd0LmMubGVuZ3RoIT0wKXtmb3IodHQ9bmV3IFMoZ3QpLGs9MCxNdD1udWxsLHM9dShKKHR0KSwxMCksbz1udWxsO3M7KXtpZihvPXUoTmUoZSxzLnApLDI1Nyksby5jPj0wKXtmb3Iodj1udWxsLGQ9bmV3IGRhKEMuYSxrKzEpO2QuYjxkLmQuZ2MoKSYmKGg9KFpuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwxMCkpLHY9dShOZShlLGgucCksMjU3KSwhKHYuZD09by5kJiZ2LmM8by5jKSk7KXY9bnVsbDt2JiYoTXQmJihjaChyLHMucCxwZSh1KE5lKHIscy5wKSwxOSkuYS0xKSksdShOZShuLE10LnApLDE1KS5NYyhvKSksbz1GMG4obyxzLEgrKyksZS5jW2UuYy5sZW5ndGhdPW8sbGUobixuZXcgaGUpLE10Pyh1KE5lKG4sTXQucCksMTUpLkZjKG8pLGxlKHIscGUoMSkpKTpsZShyLHBlKDApKSl9Rz1udWxsLHR0LmE8dHQuYy5jLmxlbmd0aCYmKEc9dShKKHR0KSwxMCksSz11KE5lKGUsRy5wKSwyNTcpLHUoTmUobixzLnApLDE1KS5GYyhLKSxjaChyLEcucCxwZSh1KE5lKHIsRy5wKSwxOSkuYSsxKSkpLG8uZD1qLG8uYz1rKyssTXQ9cyxzPUd9KytqfX1mdW5jdGlvbiBqYXQodCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0O3JldHVybiB2PXQsQz1pYShuZXcgJGUoZS5hLGUuYiksdCksaz1uLE09aWEobmV3ICRlKHIuYSxyLmIpLG4pLGo9di5hLHR0PXYuYixHPWsuYSxNdD1rLmIsSD1DLmEsZ3Q9Qy5iLEs9TS5hLFN0PU0uYixzPUsqZ3QtSCpTdCxrMSgpLHdmKF9kKSxiLk1hdGguYWJzKDAtcyk8PV9kfHxzPT0wfHxpc05hTigwKSYmaXNOYU4ocyk/ITE6KGg9MS9zKigoai1HKSpndC0odHQtTXQpKkgpLGQ9MS9zKi0oLShqLUcpKlN0Kyh0dC1NdCkqSyksbz0od2YoX2QpLChiLk1hdGguYWJzKDAtaCk8PV9kfHxoPT0wfHxpc05hTigwKSYmaXNOYU4oaCk/MDowPGg/LTE6MD5oPzE6SXcoaXNOYU4oMCksaXNOYU4oaCkpKTwwJiYod2YoX2QpLChiLk1hdGguYWJzKGgtMSk8PV9kfHxoPT0xfHxpc05hTihoKSYmaXNOYU4oMSk/MDpoPDE/LTE6aD4xPzE6SXcoaXNOYU4oaCksaXNOYU4oMSkpKTwwKSYmKHdmKF9kKSwoYi5NYXRoLmFicygwLWQpPD1fZHx8ZD09MHx8aXNOYU4oMCkmJmlzTmFOKGQpPzA6MDxkPy0xOjA+ZD8xOkl3KGlzTmFOKDApLGlzTmFOKGQpKSk8MCkmJih3ZihfZCksKGIuTWF0aC5hYnMoZC0xKTw9X2R8fGQ9PTF8fGlzTmFOKGQpJiZpc05hTigxKT8wOmQ8MT8tMTpkPjE/MTpJdyhpc05hTihkKSxpc05hTigxKSkpPDApKSxvKX1mdW5jdGlvbiBuNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlO2ZvcihNPW5ldyBTdnQobmV3IER0KHQpKTtNLmIhPU0uYy5hLmQ7KWZvcihDPUF0ZShNKSxkPXUoQy5kLDU2KSxlPXUoQy5lLDU2KSxoPWQuVGcoKSxLPTAsUnQ9KGguaT09bnVsbCYmdmQoaCksaC5pKS5sZW5ndGg7SzxSdDsrK0spaWYoaz0obz0oaC5pPT1udWxsJiZ2ZChoKSxoLmkpLEs+PTAmJks8by5sZW5ndGg/b1tLXTpudWxsKSxrLklqKCkmJiFrLkpqKCkpe2lmKF90KGssOTkpKXY9dShrLDE4KSwhKHYuQmImZGMpJiYodWU9bm8odiksISh1ZSYmdWUuQmImZGMpKSYmcXluKHQsdixkLGUpO2Vsc2UgaWYodG8oKSx1KGssNjYpLk9qKCkmJihuPShLdD1rLHUoS3Q/dShlLDQ5KS54aChLdCk6bnVsbCwxNTMpKSxuKSlmb3IoSD11KGQuYWgoayksMTUzKSxyPW4uZ2MoKSx0dD0wLEc9SC5nYygpO3R0PEc7Kyt0dClpZihqPUguaWwodHQpLF90KGosOTkpKXtpZihTdD1ILmpsKHR0KSxzPVh3KHQsU3QpLHM9PW51bGwmJlN0IT1udWxsKXtpZihNdD11KGosMTgpLCF0LmJ8fE10LkJiJmRjfHxubyhNdCkpY29udGludWU7cz1TdH1pZighbi5kbChqLHMpKXtmb3IoZ3Q9MDtndDxyOysrZ3QpaWYobi5pbChndCk9PWomJlZ0KG4uamwoZ3QpKT09PVZ0KHMpKXtuLmlpKG4uZ2MoKS0xLGd0KSwtLXI7YnJlYWt9fX1lbHNlIG4uZGwoSC5pbCh0dCksSC5qbCh0dCkpfX1mdW5jdGlvbiByNW4odCxlLG4scixzLG8saCl7dmFyIGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0O2lmKGd0PW8zbihlLG4sdC5nKSxzLm4mJnMubiYmbyYmZ2YocyxwZihvKSwoU2woKSxRbCkpLHQuYilmb3IodHQ9MDt0dDxndC5jLmxlbmd0aDt0dCsrKU09KEFuKHR0LGd0LmMubGVuZ3RoKSx1KGd0LmNbdHRdLDIwMCkpLHR0IT0wJiYoSD0oQW4odHQtMSxndC5jLmxlbmd0aCksdShndC5jW3R0LTFdLDIwMCkpLHFyZShNLEguZitILmIrdC5nKSksd3huKHR0LGd0LG4sdC5nKSx3ZG4odCxNKSxzLm4mJm8mJmdmKHMscGYobyksKFNsKCksUWwpKTtlbHNlIGZvcihLPW5ldyBTKGd0KTtLLmE8Sy5jLmMubGVuZ3RoOylmb3IoRz11KEooSyksMjAwKSxDPW5ldyBTKEcuYSk7Qy5hPEMuYy5jLmxlbmd0aDspaz11KEooQyksMTg3KSxNdD1uZXcgcXZ0KGsucyxrLnQsdC5nKSxweXQoTXQsayksbGUoRy5kLE10KTtyZXR1cm4gXzFuKHQsZ3QpLHMubiYmcy5uJiZvJiZnZihzLHBmKG8pLChTbCgpLFFsKSksU3Q9Yi5NYXRoLm1heCh0LmQsci5hLShoLmIraC5jKSksaj1iLk1hdGgubWF4KHQuYyxyLmItKGguZCtoLmEpKSxkPWotdC5jLHQuZSYmdC5mJiYodj1TdC9qLHY8dC5hP1N0PWoqdC5hOmQrPVN0L3QuYS1qKSx0LmUmJlpobihndCxTdCxkKSxzLm4mJnMubiYmbyYmZ2YocyxwZihvKSwoU2woKSxRbCkpLG5ldyBGbnQodC5hLFN0LHQuYytkLChBRSgpLFVTKSl9ZnVuY3Rpb24gaTVuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE07Zm9yKHQuaj1OdChDcixYciwyNSx0LmcsMTUsMSksdC5vPW5ldyBoZSxscyhXbyhuZXcgVG4obnVsbCxuZXcgX24odC5lLmIsMTYpKSxuZXcgbngpLG5ldyBWJHQodCkpLHQuYT1OdChwbCxvMCwyNSx0LmIsMTYsMSksV0QobmV3IFRuKG51bGwsbmV3IF9uKHQuZS5iLDE2KSksbmV3IFUkdCh0KSkscj0oTT1uZXcgaGUsbHMoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZS5iLDE2KSksbmV3IExRKSxuZXcgRyR0KHQpKSxuZXcgdkd0KHQsTSkpLE0pLHY9bmV3IFMocik7di5hPHYuYy5jLmxlbmd0aDspaWYoZD11KEoodiksNTA4KSwhKGQuYy5sZW5ndGg8PTEpKXtpZihkLmMubGVuZ3RoPT0yKXtYYm4oZCksSWF0KChBbigwLGQuYy5sZW5ndGgpLHUoZC5jWzBdLDE3KSkuZC5pKXx8bGUodC5vLGQpO2NvbnRpbnVlfWlmKCEoazBuKGQpfHxocG4oZCxuZXcgS04pKSlmb3Ioaz1uZXcgUyhkKSxzPW51bGw7ay5hPGsuYy5jLmxlbmd0aDspZT11KEooayksMTcpLG49dC5jW2UucF0sIXN8fGsuYT49ay5jLmMubGVuZ3RoP0M9b210KChWbigpLE9zKSx0YSk6Qz1vbXQoKFZuKCksdGEpLHRhKSxDKj0yLG89bi5hLmcsbi5hLmc9Yi5NYXRoLm1heChvLG8rKEMtbykpLGg9bi5iLmcsbi5iLmc9Yi5NYXRoLm1heChoLGgrKEMtaCkpLHM9ZX19ZnVuY3Rpb24gczVuKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdDtmb3IoS3Q9Vll0KHQpLEM9bmV3IGhlLGQ9dC5jLmxlbmd0aCxNPWQtMSxqPWQrMTtLdC5hLmMhPTA7KXtmb3IoO24uYiE9MDspU3Q9KFpuKG4uYiE9MCksdShsaChuLG4uYS5hKSwxMTIpKSxQOShLdC5hLFN0KSE9bnVsbCxTdC5nPU0tLSxseHQoU3QsZSxuLHIpO2Zvcig7ZS5iIT0wOylSdD0oWm4oZS5iIT0wKSx1KGxoKGUsZS5hLmEpLDExMikpLFA5KEt0LmEsUnQpIT1udWxsLFJ0Lmc9aisrLGx4dChSdCxlLG4scik7Zm9yKGs9U2EsZ3Q9KGg9bmV3IHk5KG5ldyB3OShuZXcgeShLdC5hKS5hKS5iKSxuZXcgZyhoKSk7VE0oZ3QuYS5hKTspe2lmKHR0PShvPUxqKGd0LmEpLHUoby5jZCgpLDExMikpLCFyJiZ0dC5iPjAmJnR0LmE8PTApe0MuYz1OdChRbixEZSwxLDAsNSwxKSxDLmNbQy5jLmxlbmd0aF09dHQ7YnJlYWt9Sz10dC5pLXR0LmQsSz49ayYmKEs+ayYmKEMuYz1OdChRbixEZSwxLDAsNSwxKSxrPUspLEMuY1tDLmMubGVuZ3RoXT10dCl9Qy5jLmxlbmd0aCE9MCYmKHY9dShOZShDLFp6KHMsQy5jLmxlbmd0aCkpLDExMiksUDkoS3QuYSx2KSE9bnVsbCx2Lmc9aisrLGx4dCh2LGUsbixyKSxDLmM9TnQoUW4sRGUsMSwwLDUsMSkpfWZvcihNdD10LmMubGVuZ3RoKzEsRz1uZXcgUyh0KTtHLmE8Ry5jLmMubGVuZ3RoOylIPXUoSihHKSwxMTIpLEguZzxkJiYoSC5nPUguZytNdCl9ZnVuY3Rpb24gQnEodCxlKXt2YXIgbjtpZih0LmUpdGhyb3cgaXQobmV3IE5vKChQMCh6dXQpLFNvdCt6dXQuaytBb3QpKSk7aWYoIVNYZSh0LmEsZSkpdGhyb3cgaXQobmV3IFZvKE5mZStlK0JmZSkpO2lmKGU9PXQuZClyZXR1cm4gdDtzd2l0Y2gobj10LmQsdC5kPWUsbi5nKXtjYXNlIDA6c3dpdGNoKGUuZyl7Y2FzZSAyOmx2KHQpO2JyZWFrO2Nhc2UgMTpRcCh0KSxsdih0KTticmVhaztjYXNlIDQ6ZzQodCksbHYodCk7YnJlYWs7Y2FzZSAzOmc0KHQpLFFwKHQpLGx2KHQpfWJyZWFrO2Nhc2UgMjpzd2l0Y2goZS5nKXtjYXNlIDE6UXAodCksZ2F0KHQpO2JyZWFrO2Nhc2UgNDpnNCh0KSxsdih0KTticmVhaztjYXNlIDM6ZzQodCksUXAodCksbHYodCl9YnJlYWs7Y2FzZSAxOnN3aXRjaChlLmcpe2Nhc2UgMjpRcCh0KSxnYXQodCk7YnJlYWs7Y2FzZSA0OlFwKHQpLGc0KHQpLGx2KHQpO2JyZWFrO2Nhc2UgMzpRcCh0KSxnNCh0KSxRcCh0KSxsdih0KX1icmVhaztjYXNlIDQ6c3dpdGNoKGUuZyl7Y2FzZSAyOmc0KHQpLGx2KHQpO2JyZWFrO2Nhc2UgMTpnNCh0KSxRcCh0KSxsdih0KTticmVhaztjYXNlIDM6UXAodCksZ2F0KHQpfWJyZWFrO2Nhc2UgMzpzd2l0Y2goZS5nKXtjYXNlIDI6UXAodCksZzQodCksbHYodCk7YnJlYWs7Y2FzZSAxOlFwKHQpLGc0KHQpLFFwKHQpLGx2KHQpO2JyZWFrO2Nhc2UgNDpRcCh0KSxnYXQodCl9fXJldHVybiB0fWZ1bmN0aW9uIF80KHQsZSl7dmFyIG47aWYodC5kKXRocm93IGl0KG5ldyBObygoUDAodWx0KSxTb3QrdWx0LmsrQW90KSkpO2lmKCFBWGUodC5hLGUpKXRocm93IGl0KG5ldyBWbyhOZmUrZStCZmUpKTtpZihlPT10LmMpcmV0dXJuIHQ7c3dpdGNoKG49dC5jLHQuYz1lLG4uZyl7Y2FzZSAwOnN3aXRjaChlLmcpe2Nhc2UgMjpnMih0KTticmVhaztjYXNlIDE6WHAodCksZzIodCk7YnJlYWs7Y2FzZSA0OnA0KHQpLGcyKHQpO2JyZWFrO2Nhc2UgMzpwNCh0KSxYcCh0KSxnMih0KX1icmVhaztjYXNlIDI6c3dpdGNoKGUuZyl7Y2FzZSAxOlhwKHQpLHBhdCh0KTticmVhaztjYXNlIDQ6cDQodCksZzIodCk7YnJlYWs7Y2FzZSAzOnA0KHQpLFhwKHQpLGcyKHQpfWJyZWFrO2Nhc2UgMTpzd2l0Y2goZS5nKXtjYXNlIDI6WHAodCkscGF0KHQpO2JyZWFrO2Nhc2UgNDpYcCh0KSxwNCh0KSxnMih0KTticmVhaztjYXNlIDM6WHAodCkscDQodCksWHAodCksZzIodCl9YnJlYWs7Y2FzZSA0OnN3aXRjaChlLmcpe2Nhc2UgMjpwNCh0KSxnMih0KTticmVhaztjYXNlIDE6cDQodCksWHAodCksZzIodCk7YnJlYWs7Y2FzZSAzOlhwKHQpLHBhdCh0KX1icmVhaztjYXNlIDM6c3dpdGNoKGUuZyl7Y2FzZSAyOlhwKHQpLHA0KHQpLGcyKHQpO2JyZWFrO2Nhc2UgMTpYcCh0KSxwNCh0KSxYcCh0KSxnMih0KTticmVhaztjYXNlIDQ6WHAodCkscGF0KHQpfX1yZXR1cm4gdH1mdW5jdGlvbiBhNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEM7Zm9yKHY9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBmZShycyx0LDEwLDExKSksdC5hKSk7di5lIT12LmkuZ2MoKTspZm9yKGQ9dShkcih2KSwzMykscz1uZXcgYXIobHIoSzAoZCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXtpZihyPXUoTXIocyksNzkpLCFyLmImJihyLmI9bmV3IENuKGJyLHIsNCw3KSksIShyLmIuaTw9MSYmKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jLmk8PTEpKSl0aHJvdyBpdChuZXcgakMoIkdyYXBoIG11c3Qgbm90IGNvbnRhaW4gaHlwZXJlZGdlcy4iKSk7aWYoIXdfKHIpJiZkIT1Ebyh1KEF0KCghci5jJiYoci5jPW5ldyBDbihicixyLDUsOCkpLHIuYyksMCksODIpKSlmb3Ioaz1uZXcgZVl0LE1vKGssciksSnQoaywoWXAoKSxJNiksciksTHR0KGssdShlYyhMbyhuLmYsZCkpLDE0NCkpLHcxKGssdSh0cihuLERvKHUoQXQoKCFyLmMmJihyLmM9bmV3IENuKGJyLHIsNSw4KSksci5jKSwwKSw4MikpKSwxNDQpKSxsZShlLmMsayksaD1uZXcgbnIoKCFyLm4mJihyLm49bmV3IGZlKHFvLHIsMSw3KSksci5uKSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDEzNyksQz1uZXcgaUp0KGssby5hKSxNbyhDLG8pLEp0KEMsSTYsbyksQy5lLmE9Yi5NYXRoLm1heChvLmcsMSksQy5lLmI9Yi5NYXRoLm1heChvLmYsMSksZHh0KEMpLGxlKGUuZCxDKX19ZnVuY3Rpb24gbzVuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdDtmb3IoTT1uZXcgU3h0KHQpLHNpbihNLCEoZT09KGFvKCkscmcpfHxlPT1uZykpLEM9TS5hLGo9bmV3IEN4LHM9KEtmKCksbHQoY3QoT3ksMSksb2UsMjMyLDAsW3NjLGV1LGFjXSkpLGg9MCx2PXMubGVuZ3RoO2g8djsrK2gpbj1zW2hdLGs9aG50KEMsc2MsbiksayYmKGouZD1iLk1hdGgubWF4KGouZCxrLlJlKCkpKTtmb3Iocj1sdChjdChPeSwxKSxvZSwyMzIsMCxbc2MsZXUsYWNdKSxvPTAsZD1yLmxlbmd0aDtvPGQ7KytvKW49cltvXSxrPWhudChDLGFjLG4pLGsmJihqLmE9Yi5NYXRoLm1heChqLmEsay5SZSgpKSk7Zm9yKEs9bHQoY3QoT3ksMSksb2UsMjMyLDAsW3NjLGV1LGFjXSksZ3Q9MCxTdD1LLmxlbmd0aDtndDxTdDsrK2d0KUg9S1tndF0saz1obnQoQyxILHNjKSxrJiYoai5iPWIuTWF0aC5tYXgoai5iLGsuU2UoKSkpO2ZvcihHPWx0KGN0KE95LDEpLG9lLDIzMiwwLFtzYyxldSxhY10pLHR0PTAsTXQ9Ry5sZW5ndGg7dHQ8TXQ7Kyt0dClIPUdbdHRdLGs9aG50KEMsSCxhYyksayYmKGouYz1iLk1hdGgubWF4KGouYyxrLlNlKCkpKTtyZXR1cm4gai5kPjAmJihqLmQrPUMubi5kLGouZCs9Qy5kKSxqLmE+MCYmKGouYSs9Qy5uLmEsai5hKz1DLmQpLGouYj4wJiYoai5iKz1DLm4uYixqLmIrPUMuZCksai5jPjAmJihqLmMrPUMubi5jLGouYys9Qy5kKSxqfWZ1bmN0aW9uIENoZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2ZvcihqPW4uZCxNPW4uYyxvPW5ldyAkZShuLmYuYStuLmQuYituLmQuYyxuLmYuYituLmQuZCtuLmQuYSksaD1vLmIsaz1uZXcgUyh0LmEpO2suYTxrLmMuYy5sZW5ndGg7KWlmKGQ9dShKKGspLDEwKSxkLms9PShWbigpLGtzKSl7c3dpdGNoKHI9dShRKGQsKGFlKCksb2MpKSw2MSkscz11KFEoZCxpQ3QpLDgpLEM9ZC5uLHIuZyl7Y2FzZSAyOkMuYT1uLmYuYStqLmMtTS5hO2JyZWFrO2Nhc2UgNDpDLmE9LU0uYS1qLmJ9c3dpdGNoKEc9MCxyLmcpe2Nhc2UgMjpjYXNlIDQ6ZT09KHVhKCksZzApPyhIPVh0KHllKFEoZCxGdikpKSxDLmI9by5iKkgtdShRKGQsKFRlKCksUnYpKSw4KS5iLEc9Qy5iK3MuYixFeihkLCExLCEwKSk6ZT09R2MmJihDLmI9WHQoeWUoUShkLEZ2KSkpLXUoUShkLChUZSgpLFJ2KSksOCkuYixHPUMuYitzLmIsRXooZCwhMSwhMCkpfWg9Yi5NYXRoLm1heChoLEcpfWZvcihuLmYuYis9aC1vLmIsdj1uZXcgUyh0LmEpO3YuYTx2LmMuYy5sZW5ndGg7KWlmKGQ9dShKKHYpLDEwKSxkLms9PShWbigpLGtzKSlzd2l0Y2gocj11KFEoZCwoYWUoKSxvYykpLDYxKSxDPWQubixyLmcpe2Nhc2UgMTpDLmI9LU0uYi1qLmQ7YnJlYWs7Y2FzZSAzOkMuYj1uLmYuYitqLmEtTS5ifX1mdW5jdGlvbiBjNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlO2ZvcihzPXUoUSh0LChmYygpLHFTKSksMzMpLGs9d2ksQz13aSxkPVNhLHY9U2EsdWU9ZWkodC5iLDApO3VlLmIhPXVlLmQuYzspUnQ9dSh0aSh1ZSksODYpLEs9UnQuZSx0dD1SdC5mLGs9Yi5NYXRoLm1pbihrLEsuYS10dC5hLzIpLEM9Yi5NYXRoLm1pbihDLEsuYi10dC5iLzIpLGQ9Yi5NYXRoLm1heChkLEsuYSt0dC5hLzIpLHY9Yi5NYXRoLm1heCh2LEsuYit0dC5iLzIpO2ZvcihHPXUocWUocywoZ3YoKSxUeWUpKSwxMTYpLEg9bmV3ICRlKEcuYi1rLEcuZC1DKSxLdD1laSh0LmIsMCk7S3QuYiE9S3QuZC5jOylSdD11KHRpKEt0KSw4Niksaj1RKFJ0LHFTKSxfdChqLDIzOSkmJihvPXUoaiwzMyksTT1MaShSdC5lLEgpLHgxKG8sTS5hLW8uZy8yLE0uYi1vLmYvMikpO2ZvcihTdD1laSh0LmEsMCk7U3QuYiE9U3QuZC5jOylNdD11KHRpKFN0KSwxODgpLHI9dShRKE10LHFTKSw3OSksciYmKGU9TXQuYSxndD1uZXcgeG8oTXQuYi5lKSxmcyhlLGd0LGUuYSxlLmEuYSksX2U9bmV3IHhvKE10LmMuZSksZnMoZSxfZSxlLmMuYixlLmMpLFVhZShndCx1KFpmKGUsMSksOCksTXQuYi5mKSxVYWUoX2UsdShaZihlLGUuYi0yKSw4KSxNdC5jLmYpLG49eDQociwhMCwhMCksQ0koZSxuKSk7V2U9ZC1rKyhHLmIrRy5jKSxoPXYtQysoRy5kK0cuYSksd3YocyxXZSxoLCExLCExKX1mdW5jdGlvbiB1NW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0O2ZvcihNPXQuYixDPW5ldyBkYShNLDApLHptKEMsbmV3IFNoKHQpKSxNdD0hMSxoPTE7Qy5iPEMuZC5nYygpOyl7Zm9yKGs9KFpuKEMuYjxDLmQuZ2MoKSksdShDLmQuWGIoQy5jPUMuYisrKSwyOSkpLEs9KEFuKGgsTS5jLmxlbmd0aCksdShNLmNbaF0sMjkpKSx0dD1XdyhrLmEpLGd0PXR0LmMubGVuZ3RoLEc9bmV3IFModHQpO0cuYTxHLmMuYy5sZW5ndGg7KWo9dShKKEcpLDEwKSxFbyhqLEspO2lmKE10KXtmb3IoSD1ZdnQobmV3IGt3KHR0KSwwKTtILmMuU2IoKTspZm9yKGo9dShESnQoSCksMTApLG89bmV3IFMoV3coam8oaikpKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxNyksYnYocywhMCksSnQodCwoYWUoKSxfTyksKE5uKCksITApKSxyPW5oZSh0LHMsZ3QpLG49dShRKGosSXYpLDMwNSksU3Q9dShOZShyLHIuYy5sZW5ndGgtMSksMTcpLG4uaz1TdC5jLmksbi5uPVN0LG4uYj1zLmQuaSxuLmM9cztNdD0hMX1lbHNlIHR0LmMubGVuZ3RoIT0wJiYoZT0oQW4oMCx0dC5jLmxlbmd0aCksdSh0dC5jWzBdLDEwKSksZS5rPT0oVm4oKSx6MSkmJihNdD0hMCxoPS0xKSk7KytofWZvcihkPW5ldyBkYSh0LmIsMCk7ZC5iPGQuZC5nYygpOyl2PShabihkLmI8ZC5kLmdjKCkpLHUoZC5kLlhiKGQuYz1kLmIrKyksMjkpKSx2LmEuYy5sZW5ndGg9PTAmJkNsKGQpfWZ1bmN0aW9uIGw1bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7aWYoQz11KHUoQWkodC5yLGUpLDIxKSw4NCksQy5nYygpPD0yfHxlPT0odmUoKSxIbil8fGU9PSh2ZSgpLEJuKSl7R2hlKHQsZSk7cmV0dXJufWZvcihLPXQudS5IYygoWnUoKSxRNikpLG49ZT09KHZlKCksUG4pPyhydigpLGhPKToocnYoKSxsTyksZ3Q9ZT09UG4/KHl1KCksRWYpOih5dSgpLG4xKSxyPWNidChfd3QobiksdC5zKSx0dD1lPT1Qbj9hczpDcyxrPUMuS2MoKTtrLk9iKCk7KWQ9dShrLlBiKCksMTExKSwhKCFkLmN8fGQuYy5kLmMubGVuZ3RoPD0wKSYmKEc9ZC5iLnJmKCksSD1kLmUsTT1kLmMsaj1NLmksai5iPShvPU0ubixNLmUuYStvLmIrby5jKSxqLmE9KGg9TS5uLE0uZS5iK2guZCtoLmEpLEs/KGouYz1ILmEtKHM9TS5uLE0uZS5hK3MuYitzLmMpLXQucyxLPSExKTpqLmM9SC5hK0cuYSt0LnMsc0QoZ3QsbjZ0KSxNLmY9Z3QsV2YoTSwoUXUoKSxrZikpLGxlKHIuZCxuZXcgSG50KGosYTN0KHIsaikpKSx0dD1lPT1Qbj9iLk1hdGgubWluKHR0LEguYik6Yi5NYXRoLm1heCh0dCxILmIrZC5iLnJmKCkuYikpO2Zvcih0dCs9ZT09UG4/LXQudDp0LnQsazN0KChyLmU9dHQscikpLHY9Qy5LYygpO3YuT2IoKTspZD11KHYuUGIoKSwxMTEpLCEoIWQuY3x8ZC5jLmQuYy5sZW5ndGg8PTApJiYoaj1kLmMuaSxqLmMtPWQuZS5hLGouZC09ZC5lLmIpfWZ1bmN0aW9uIGg1bih0LGUsbil7dmFyIHI7aWYodnIobiwiU3RyZXRjaFdpZHRoIGxheWVyaW5nIiwxKSxlLmEuYy5sZW5ndGg9PTApe29yKG4pO3JldHVybn1mb3IodC5jPWUsdC50PTAsdC51PTAsdC5pPWFzLHQuZz1Dcyx0LmQ9WHQoeWUoUShlLChUZSgpLFRmKSkpKSx6Zm4odCksSGJuKHQpLHFibih0KSxVZG4odCksWWhuKHQpLHQuaT1iLk1hdGgubWF4KDEsdC5pKSx0Lmc9Yi5NYXRoLm1heCgxLHQuZyksdC5kPXQuZC90LmksdC5mPXQuZy90LmksdC5zPW4xbih0KSxyPW5ldyBTaCh0LmMpLGxlKHQuYy5iLHIpLHQucj1Xdyh0LnApLHQubj14JCh0LmssdC5rLmxlbmd0aCk7dC5yLmMubGVuZ3RoIT0wOyl0Lm89YmxuKHQpLCF0Lm98fG1yZSh0KSYmdC5iLmEuZ2MoKSE9MD8odzBuKHQscikscj1uZXcgU2godC5jKSxsZSh0LmMuYixyKSxVYSh0LmEsdC5iKSx0LmIuYS4kYigpLHQudD10LnUsdC51PTApOm1yZSh0KT8odC5jLmIuYz1OdChRbixEZSwxLDAsNSwxKSxyPW5ldyBTaCh0LmMpLGxlKHQuYy5iLHIpLHQudD0wLHQudT0wLHQuYi5hLiRiKCksdC5hLmEuJGIoKSwrK3QuZix0LnI9V3codC5wKSx0Lm49eCQodC5rLHQuay5sZW5ndGgpKTooRW8odC5vLHIpLG11KHQucix0Lm8pLEZzKHQuYix0Lm8pLHQudD10LnQtdC5rW3Quby5wXSp0LmQrdC5qW3Quby5wXSx0LnUrPXQuZVt0Lm8ucF0qdC5kKTtlLmEuYz1OdChRbixEZSwxLDAsNSwxKSxZc3QoZS5iKSxvcihuKX1mdW5jdGlvbiBmNW4odCl7dmFyIGUsbixyLHM7Zm9yKGxzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0LmEuYiwxNikpLG5ldyBBWCksbmV3IExYKSxpMG4odCksbHMoUmkobmV3IFRuKG51bGwsbmV3IF9uKHQuYS5iLDE2KSksbmV3IE1YKSxuZXcgRFgpLHQuYz09KFcwKCksWDYpJiYobHMoUmkoV28obmV3IFRuKG51bGwsbmV3IF9uKG5ldyBTbSh0LmYpLDEpKSxuZXcgSVgpLG5ldyBPWCksbmV3IEh0dCh0KSksbHMoUmkod3UoV28oV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZC5iLDE2KSksbmV3IElOKSxuZXcgUFgpLG5ldyBPTiksbmV3IEZYKSxuZXcgR3R0KHQpKSkscz1uZXcgJGUoYXMsYXMpLGU9bmV3ICRlKENzLENzKSxyPW5ldyBTKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSw1Nykscy5hPWIuTWF0aC5taW4ocy5hLG4uZC5jKSxzLmI9Yi5NYXRoLm1pbihzLmIsbi5kLmQpLGUuYT1iLk1hdGgubWF4KGUuYSxuLmQuYytuLmQuYiksZS5iPWIuTWF0aC5tYXgoZS5iLG4uZC5kK24uZC5hKTtMaShHZih0LmQuYyksTWoobmV3ICRlKHMuYSxzLmIpKSksTGkoR2YodC5kLmYpLGlhKG5ldyAkZShlLmEsZS5iKSxzKSksZ3duKHQscyxlKSxYdSh0LmYpLFh1KHQuYiksWHUodC5nKSxYdSh0LmUpLHQuYS5hLmM9TnQoUW4sRGUsMSwwLDUsMSksdC5hLmIuYz1OdChRbixEZSwxLDAsNSwxKSx0LmE9bnVsbCx0LmQ9bnVsbH1mdW5jdGlvbiBfaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0O2ZvcihzPW5ldyBoZSxLPW5ldyBTKGUuYSk7Sy5hPEsuYy5jLmxlbmd0aDspaWYoRz11KEooSyksMTApLEg9Ry5lLEgmJihyPV9oZSh0LEgsRyksTHMocyxyKSxfNG4odCxILEcpLHUoUShILChhZSgpLFZjKSksMjEpLkhjKChvbygpLHZoKSkpKWZvcihNdD11KFEoRywoVGUoKSxjcykpLDk4KSxqPXUoUShHLEd5KSwxNzQpLkhjKChadSgpLHNnKSksZ3Q9bmV3IFMoRy5qKTtndC5hPGd0LmMuYy5sZW5ndGg7KWZvcih0dD11KEooZ3QpLDExKSxvPXUodHIodC5iLHR0KSwxMCksb3x8KG89TEkodHQsTXQsdHQuaiwtKHR0LmUuYy5sZW5ndGgtdHQuZy5jLmxlbmd0aCksbnVsbCxuZXcgQ2EsdHQubyx1KFEoSCxXbCksMTAzKSxIKSxKdChvLF9pLHR0KSxraSh0LmIsdHQsbyksbGUoSC5hLG8pKSxoPXUoTmUoby5qLDApLDExKSxDPW5ldyBTKHR0LmYpO0MuYTxDLmMuYy5sZW5ndGg7KWs9dShKKEMpLDcwKSxkPW5ldyBDSHQsZC5vLmE9ay5vLmEsZC5vLmI9ay5vLmIsbGUoaC5mLGQpLGp8fChTdD10dC5qLE09MCxTOSh1KFEoRyxHeSksMjEpKSYmKE09bzV0KGsubixrLm8sdHQubywwLFN0KSksTXQ9PSh1YSgpLEcxKXx8KHZlKCksbHUpLkhjKFN0KT9kLm8uYT1NOmQuby5iPU0pO3JldHVybiB2PW5ldyBoZSxCNG4odCxlLG4scyx2KSxuJiZKM24odCxlLG4sdiksdn1mdW5jdGlvbiBfeHQodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTTtpZighdC5jW2UuYy5wXVtlLnBdLmUpe2Zvcih0LmNbZS5jLnBdW2UucF0uZT0hMCx0LmNbZS5jLnBdW2UucF0uYj0wLHQuY1tlLmMucF1bZS5wXS5kPTAsdC5jW2UuYy5wXVtlLnBdLmE9bnVsbCxDPW5ldyBTKGUuaik7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDExKSxNPW4/bmV3IFFzKGspOm5ldyBUcihrKSx2PU0uS2MoKTt2Lk9iKCk7KWQ9dSh2LlBiKCksMTEpLGg9ZC5pLGguYz09ZS5jP2ghPWUmJihfeHQodCxoLG4pLHQuY1tlLmMucF1bZS5wXS5iKz10LmNbaC5jLnBdW2gucF0uYix0LmNbZS5jLnBdW2UucF0uZCs9dC5jW2guYy5wXVtoLnBdLmQpOih0LmNbZS5jLnBdW2UucF0uZCs9dC5nW2QucF0sKyt0LmNbZS5jLnBdW2UucF0uYik7aWYobz11KFEoZSwoYWUoKSx0Q3QpKSwxNSksbylmb3Iocz1vLktjKCk7cy5PYigpOylyPXUocy5QYigpLDEwKSxlLmM9PXIuYyYmKF94dCh0LHIsbiksdC5jW2UuYy5wXVtlLnBdLmIrPXQuY1tyLmMucF1bci5wXS5iLHQuY1tlLmMucF1bZS5wXS5kKz10LmNbci5jLnBdW3IucF0uZCk7dC5jW2UuYy5wXVtlLnBdLmI+MCYmKHQuY1tlLmMucF1bZS5wXS5kKz11bCh0LmksMjQpKiRJKi4wNzAwMDAwMDAyOTgwMjMyMi0uMDM1MDAwMDAwMTQ5MDExNjEsdC5jW2UuYy5wXVtlLnBdLmE9dC5jW2UuYy5wXVtlLnBdLmQvdC5jW2UuYy5wXVtlLnBdLmIpfX1mdW5jdGlvbiBkNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2ZvcihHPW5ldyBTKHQpO0cuYTxHLmMuYy5sZW5ndGg7KXtmb3IoSD11KEooRyksMTApLERnKEgubiksRGcoSC5vKSxTbXQoSC5mKSxxdWUoSCksVnZuKEgpLHR0PW5ldyBTKEguaik7dHQuYTx0dC5jLmMubGVuZ3RoOyl7Zm9yKEs9dShKKHR0KSwxMSksRGcoSy5uKSxEZyhLLmEpLERnKEsubyksQnMoSyxBc2UoSy5qKSksbz11KFEoSywoVGUoKSx0cCkpLDE5KSxvJiZKdChLLHRwLHBlKC1vLmEpKSxzPW5ldyBTKEsuZyk7cy5hPHMuYy5jLmxlbmd0aDspe2ZvcihyPXUoSihzKSwxNyksbj1laShyLmEsMCk7bi5iIT1uLmQuYzspZT11KHRpKG4pLDgpLERnKGUpO2lmKHY9dShRKHIsU28pLDc0KSx2KWZvcihkPWVpKHYsMCk7ZC5iIT1kLmQuYzspaD11KHRpKGQpLDgpLERnKGgpO2ZvcihNPW5ldyBTKHIuYik7TS5hPE0uYy5jLmxlbmd0aDspaz11KEooTSksNzApLERnKGsubiksRGcoay5vKX1mb3Ioaj1uZXcgUyhLLmYpO2ouYTxqLmMuYy5sZW5ndGg7KWs9dShKKGopLDcwKSxEZyhrLm4pLERnKGsubyl9Zm9yKEguaz09KFZuKCksa3MpJiYoSnQoSCwoYWUoKSxvYyksQXNlKHUoUShILG9jKSw2MSkpKSx0dm4oSCkpLEM9bmV3IFMoSC5iKTtDLmE8Qy5jLmMubGVuZ3RoOylrPXUoSihDKSw3MCkscXVlKGspLERnKGsubyksRGcoay5uKX19ZnVuY3Rpb24gZzVuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZTtmb3IodC5lPWUsZD1nYm4oZSksdWU9bmV3IGhlLHI9bmV3IFMoZCk7ci5hPHIuYy5jLmxlbmd0aDspe2ZvcihuPXUoSihyKSwxNSksX2U9bmV3IGhlLHVlLmNbdWUuYy5sZW5ndGhdPV9lLHY9bmV3IEhzLEc9bi5LYygpO0cuT2IoKTspe2ZvcihIPXUoRy5QYigpLDMzKSxvPXhJKHQsSCwhMCwwLDApLF9lLmNbX2UuYy5sZW5ndGhdPW8sSz1ILmksdHQ9SC5qLGo9KCFILm4mJihILm49bmV3IGZlKHFvLEgsMSw3KSksSC5uKSxNPW5ldyBucihqKTtNLmUhPU0uaS5nYygpOylrPXUoZHIoTSksMTM3KSxzPXhJKHQsaywhMSxLLHR0KSxfZS5jW19lLmMubGVuZ3RoXT1zO2ZvcihLdD0oIUguYyYmKEguYz1uZXcgZmUoZ2wsSCw5LDkpKSxILmMpLE10PW5ldyBucihLdCk7TXQuZSE9TXQuaS5nYygpOylmb3IoZ3Q9dShkcihNdCksMTE4KSxoPXhJKHQsZ3QsITEsSyx0dCksX2UuY1tfZS5jLmxlbmd0aF09aCxTdD1ndC5pK0ssUnQ9Z3Quait0dCxqPSghZ3QubiYmKGd0Lm49bmV3IGZlKHFvLGd0LDEsNykpLGd0Lm4pLEM9bmV3IG5yKGopO0MuZSE9Qy5pLmdjKCk7KWs9dShkcihDKSwxMzcpLHM9eEkodCxrLCExLFN0LFJ0KSxfZS5jW19lLmMubGVuZ3RoXT1zO1VhKHYsYiQoRDEobHQoY3QoajEsMSksRGUsMjAsMCxbSzAoSCksd0koSCldKSkpKX1pd24odCx2LF9lKX1yZXR1cm4gdC5mPW5ldyBrSHQodWUpLE1vKHQuZixlKSx0LmZ9ZnVuY3Rpb24gcDVuKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbix6bixocjtSbj10cih0LmUsciksUm49PW51bGwmJihSbj1uZXcgX3gsSD11KFJuLDE4MyksTXQ9ZSsiX3MiLFN0PU10K3Msaj1uZXcgVW0oU3QpLFlmKEgsQWQsaikpLFFlPXUoUm4sMTgzKSxWeChuLFFlKSxocj1uZXcgX3gscjIoaHIsIngiLHIuaikscjIoaHIsInkiLHIuayksWWYoUWUsSGRlLGhyKSxfZT1uZXcgX3gscjIoX2UsIngiLHIuYikscjIoX2UsInkiLHIuYyksWWYoUWUsImVuZFBvaW50IixfZSksTT13TSgoIXIuYSYmKHIuYT1uZXcgQXMoR2gsciw1KSksci5hKSksRz0hTSxHJiYodWU9bmV3IEVnLG89bmV3IEF6dCh1ZSksdmEoKCFyLmEmJihyLmE9bmV3IEFzKEdoLHIsNSkpLHIuYSksbyksWWYoUWUsTEgsdWUpKSx2PWJzdChyKSxSdD0hIXYsUnQmJlA0dCh0LmEsUWUsQzh0LFdzdCh0LGJzdChyKSkpLGd0PXdzdChyKSxLdD0hIWd0LEt0JiZQNHQodC5hLFFlLFQ4dCxXc3QodCx3c3QocikpKSxrPSghci5lJiYoci5lPW5ldyBDbihKaSxyLDEwLDkpKSxyLmUpLmk9PTAsSz0hayxLJiYoV2U9bmV3IEVnLGg9bmV3IFlHdCh0LFdlKSx2YSgoIXIuZSYmKHIuZT1uZXcgQ24oSmksciwxMCw5KSksci5lKSxoKSxZZihRZSxTOHQsV2UpKSxDPSghci5nJiYoci5nPW5ldyBDbihKaSxyLDksMTApKSxyLmcpLmk9PTAsdHQ9IUMsdHQmJih6bj1uZXcgRWcsZD1uZXcgS0d0KHQsem4pLHZhKCghci5nJiYoci5nPW5ldyBDbihKaSxyLDksMTApKSxyLmcpLGQpLFlmKFFlLF84dCx6bikpfWZ1bmN0aW9uIGI1bih0KXskbSgpO3ZhciBlLG4scixzLG8saCxkO2ZvcihyPXQuZi5uLGg9eHZ0KHQucikuYS5uYygpO2guT2IoKTspe2lmKG89dShoLlBiKCksMTExKSxzPTAsby5iLlhlKCh1aSgpLGRsKSkmJihzPVh0KHllKG8uYi5XZShkbCkpKSxzPDApKXN3aXRjaChvLmIuSGYoKS5nKXtjYXNlIDE6ci5kPWIuTWF0aC5tYXgoci5kLC1zKTticmVhaztjYXNlIDM6ci5hPWIuTWF0aC5tYXgoci5hLC1zKTticmVhaztjYXNlIDI6ci5jPWIuTWF0aC5tYXgoci5jLC1zKTticmVhaztjYXNlIDQ6ci5iPWIuTWF0aC5tYXgoci5iLC1zKX1pZihTOSh0LnUpKXN3aXRjaChlPSRjbihvLmIscyksZD0hdSh0LmUuV2UoeGIpLDE3NCkuSGMoKGxsKCksY1ApKSxuPSExLG8uYi5IZigpLmcpe2Nhc2UgMTpuPWU+ci5kLHIuZD1iLk1hdGgubWF4KHIuZCxlKSxkJiZuJiYoci5kPWIuTWF0aC5tYXgoci5kLHIuYSksci5hPXIuZCtzKTticmVhaztjYXNlIDM6bj1lPnIuYSxyLmE9Yi5NYXRoLm1heChyLmEsZSksZCYmbiYmKHIuYT1iLk1hdGgubWF4KHIuYSxyLmQpLHIuZD1yLmErcyk7YnJlYWs7Y2FzZSAyOm49ZT5yLmMsci5jPWIuTWF0aC5tYXgoci5jLGUpLGQmJm4mJihyLmM9Yi5NYXRoLm1heChyLmIsci5jKSxyLmI9ci5jK3MpO2JyZWFrO2Nhc2UgNDpuPWU+ci5iLHIuYj1iLk1hdGgubWF4KHIuYixlKSxkJiZuJiYoci5iPWIuTWF0aC5tYXgoci5iLHIuYyksci5jPXIuYitzKX19fWZ1bmN0aW9uIHc1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNO2ZvcihrPW5ldyBTKHQpO2suYTxrLmMuYy5sZW5ndGg7KXtzd2l0Y2godj11KEooayksMTApLGg9dShRKHYsKFRlKCksdXUpKSwxNjMpLG89bnVsbCxoLmcpe2Nhc2UgMTpjYXNlIDI6bz0oZDIoKSxVNCk7YnJlYWs7Y2FzZSAzOmNhc2UgNDpvPShkMigpLHc3KX1pZihvKUp0KHYsKGFlKCksdEcpLChkMigpLFU0KSksbz09dzc/eHEodixoLChzbygpLHRsKSk6bz09VTQmJnhxKHYsaCwoc28oKSxudSkpO2Vsc2UgaWYoRzModShRKHYsY3MpLDk4KSkmJnYuai5jLmxlbmd0aCE9MCl7Zm9yKGU9ITAsTT1uZXcgUyh2LmopO00uYTxNLmMuYy5sZW5ndGg7KXtpZihDPXUoSihNKSwxMSksIShDLmo9PSh2ZSgpLEhuKSYmQy5lLmMubGVuZ3RoLUMuZy5jLmxlbmd0aD4wfHxDLmo9PUJuJiZDLmUuYy5sZW5ndGgtQy5nLmMubGVuZ3RoPDApKXtlPSExO2JyZWFrfWZvcihzPW5ldyBTKEMuZyk7cy5hPHMuYy5jLmxlbmd0aDspaWYobj11KEoocyksMTcpLGQ9dShRKG4uZC5pLHV1KSwxNjMpLGQ9PShkaCgpLFRTKXx8ZD09ankpe2U9ITE7YnJlYWt9Zm9yKHI9bmV3IFMoQy5lKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwxNyksZD11KFEobi5jLmksdXUpLDE2MyksZD09KGRoKCksRVMpfHxkPT1iYil7ZT0hMTticmVha319ZSYmeHEodixoLChzbygpLE9TKSl9fX1mdW5jdGlvbiB2NW4odCxlLG4scixzKXt2YXIgbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlO2Zvcih1ZT0wLEg9MCxNPW5ldyBTKGUuZSk7TS5hPE0uYy5jLmxlbmd0aDspe2ZvcihDPXUoSihNKSwxMCksaj0wLGQ9MCx2PW4/dShRKEMsX0cpLDE5KS5hOlNhLGd0PXI/dShRKEMsU0cpLDE5KS5hOlNhLGs9Yi5NYXRoLm1heCh2LGd0KSxTdD1uZXcgUyhDLmopO1N0LmE8U3QuYy5jLmxlbmd0aDspe2lmKE10PXUoSihTdCksMTEpLFJ0PUMubi5iK010Lm4uYitNdC5hLmIscilmb3IoaD1uZXcgUyhNdC5nKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNyksSz1vLmQsRz1LLmksZSE9dC5hW0cucF0mJih0dD1iLk1hdGgubWF4KHUoUShHLF9HKSwxOSkuYSx1KFEoRyxTRyksMTkpLmEpLEt0PXUoUShvLChUZSgpLEg2KSksMTkpLmEsS3Q+PWsmJkt0Pj10dCYmKGorPUcubi5iK0subi5iK0suYS5iLVJ0LCsrZCkpO2lmKG4pZm9yKGg9bmV3IFMoTXQuZSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTcpLEs9by5jLEc9Sy5pLGUhPXQuYVtHLnBdJiYodHQ9Yi5NYXRoLm1heCh1KFEoRyxfRyksMTkpLmEsdShRKEcsU0cpLDE5KS5hKSxLdD11KFEobywoVGUoKSxINikpLDE5KS5hLEt0Pj1rJiZLdD49dHQmJihqKz1HLm4uYitLLm4uYitLLmEuYi1SdCwrK2QpKX1kPjAmJih1ZSs9ai9kLCsrSCl9SD4wPyhlLmE9cyp1ZS9ILGUuZz1IKTooZS5hPTAsZS5nPTApfWZ1bmN0aW9uIG01bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKHM9bmV3IFModC5hLmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihuPXUoSihzKSwyOSksdj1uZXcgUyhuLmEpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDEwKSxlLmpbZC5wXT1kLGUuaVtkLnBdPWUubz09KEMxKCksSDEpP0NzOmFzO2ZvcihYdSh0LmMpLGg9dC5hLmIsZS5jPT0oYmQoKSxlcCkmJihoPV90KGgsMTUyKT9aeCh1KGgsMTUyKSk6X3QoaCwxMzEpP3UoaCwxMzEpLmE6X3QoaCw1NCk/bmV3IGt3KGgpOm5ldyBPbShoKSksZm9uKHQuZSxlLHQuYiksQ00oZS5wLG51bGwpLG89aC5LYygpO28uT2IoKTspZm9yKG49dShvLlBiKCksMjkpLGs9bi5hLGUubz09KEMxKCksSDEpJiYoaz1fdChrLDE1Mik/WngodShrLDE1MikpOl90KGssMTMxKT91KGssMTMxKS5hOl90KGssNTQpP25ldyBrdyhrKTpuZXcgT20oaykpLGo9ay5LYygpO2ouT2IoKTspTT11KGouUGIoKSwxMCksZS5nW00ucF09PU0mJldoZSh0LE0sZSk7Zm9yKGM0bih0LGUpLHI9aC5LYygpO3IuT2IoKTspZm9yKG49dShyLlBiKCksMjkpLGo9bmV3IFMobi5hKTtqLmE8ai5jLmMubGVuZ3RoOylNPXUoSihqKSwxMCksZS5wW00ucF09ZS5wW2UuZ1tNLnBdLnBdLE09PWUuZ1tNLnBdJiYoQz1YdChlLmlbZS5qW00ucF0ucF0pLChlLm89PShDMSgpLEgxKSYmQz5Dc3x8ZS5vPT1IMiYmQzxhcykmJihlLnBbTS5wXT1YdChlLnBbTS5wXSkrQykpO3QuZS5jZygpfWZ1bmN0aW9uIFNoZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2O3JldHVybiBkPW5ldyBTeHQoZSkseXduKGQscikscz0hMCx0JiZ0LlhlKCh1aSgpLHF2KSkmJihvPXUodC5XZSgodWkoKSxxdikpLDEwMykscz1vPT0oYW8oKSxoMCl8fG89PXpofHxvPT1DZiksRHVlKGQsITEpLHh1KGQuZS53ZigpLG5ldyBFd3QoZCwhMSxzKSksRXJ0KGQsZC5mLChLZigpLHNjKSwodmUoKSxQbikpLEVydChkLGQuZixhYyxtciksRXJ0KGQsZC5nLHNjLEJuKSxFcnQoZCxkLmcsYWMsSG4pLHBzZShkLFBuKSxwc2UoZCxtciksUFh0KGQsSG4pLFBYdChkLEJuKSwkbSgpLGg9ZC5BLkhjKChBbCgpLEp5KSkmJmQuQi5IYygobGwoKSx1UCkpP1NpZShkKTpudWxsLGgmJnpLZShkLmEsaCksYjVuKGQpLEkxbihkKSxPMW4oZCksejRuKGQpLHltbihkKSxzZG4oZCksY3N0KGQsUG4pLGNzdChkLG1yKSxKdm4oZCksbTNuKGQpLG4mJih3aG4oZCksYWRuKGQpLGNzdChkLEhuKSxjc3QoZCxCbiksdj1kLkIuSGMoKGxsKCksaUEpKSxfb2UoZCx2LFBuKSxfb2UoZCx2LG1yKSxTb2UoZCx2LEhuKSxTb2UoZCx2LEJuKSxscyhuZXcgVG4obnVsbCxuZXcgX24obmV3IHYxKGQuaSksMCkpLG5ldyBwYSksbHMoUmkobmV3IFRuKG51bGwseHZ0KGQucikuYS5vYygpKSxuZXcgRGEpLG5ldyBIYSkseDBuKGQpLGQuZS51ZihkLm8pLGxzKG5ldyBUbihudWxsLHh2dChkLnIpLmEub2MoKSksbmV3IF9jKSksZC5vfWZ1bmN0aW9uIHk1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEs7Zm9yKGs9YXMscj1uZXcgUyh0LmEuYik7ci5hPHIuYy5jLmxlbmd0aDspZT11KEoociksODEpLGs9Yi5NYXRoLm1pbihrLGUuZC5mLmcuYytlLmUuYSk7Zm9yKEg9bmV3IFppLGg9bmV3IFModC5hLmEpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE4OSksby5pPWssby5lPT0wJiZmcyhILG8sSC5jLmIsSC5jKTtmb3IoO0guYiE9MDspe2ZvcihvPXUoSC5iPT0wP251bGw6KFpuKEguYiE9MCksbGgoSCxILmEuYSkpLDE4OSkscz1vLmYuZy5jLGo9by5hLmEuZWMoKS5LYygpO2ouT2IoKTspQz11KGouUGIoKSw4MSksSz1vLmkrQy5lLmEsQy5kLmd8fEMuZy5jPEs/Qy5vPUs6Qy5vPUMuZy5jO2ZvcihzLT1vLmYubyxvLmIrPXMsdC5jPT0oYW8oKSxDZil8fHQuYz09bmc/by5jKz1zOm8uYy09cyxNPW8uYS5hLmVjKCkuS2MoKTtNLk9iKCk7KWZvcihDPXUoTS5QYigpLDgxKSx2PUMuZi5LYygpO3YuT2IoKTspZD11KHYuUGIoKSw4MSksQnAodC5jKT9HPXQuZi5lZihDLGQpOkc9dC5mLmZmKEMsZCksZC5kLmk9Yi5NYXRoLm1heChkLmQuaSxDLm8rQy5nLmIrRy1kLmUuYSksZC5rfHwoZC5kLmk9Yi5NYXRoLm1heChkLmQuaSxkLmcuYy1kLmUuYSkpLC0tZC5kLmUsZC5kLmU9PTAmJnJpKEgsZC5kKX1mb3Iobj1uZXcgUyh0LmEuYik7bi5hPG4uYy5jLmxlbmd0aDspZT11KEoobiksODEpLGUuZy5jPWUub31mdW5jdGlvbiB4NW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdjtzd2l0Y2goZD10LmIsZT10LmEsdShRKHQsKHNxKCksV0V0KSksNDI3KS5nKXtjYXNlIDA6WnMoZCxuZXcgZHQobmV3IEVpKSk7YnJlYWs7Y2FzZSAxOmRlZmF1bHQ6WnMoZCxuZXcgZHQobmV3IEpvKSl9c3dpdGNoKHUoUSh0LEdFdCksNDI4KS5nKXtjYXNlIDE6WnMoZCxuZXcga3IpLFpzKGQsbmV3IHdjKSxacyhkLG5ldyBuZCk7YnJlYWs7Y2FzZSAwOmRlZmF1bHQ6WnMoZCxuZXcga3IpLFpzKGQsbmV3IGNuKX1zd2l0Y2godShRKHQsS0V0KSwyNTApLmcpe2Nhc2UgMDp2PW5ldyBRaTticmVhaztjYXNlIDE6dj1uZXcgc2Y7YnJlYWs7Y2FzZSAyOnY9bmV3IGFmO2JyZWFrO2Nhc2UgMzp2PW5ldyBPYzticmVhaztjYXNlIDU6dj1uZXcgZnIobmV3IGFmKTticmVhaztjYXNlIDQ6dj1uZXcgZnIobmV3IHNmKTticmVhaztjYXNlIDc6dj1uZXcgTWJ0KG5ldyBmcihuZXcgc2YpLG5ldyBmcihuZXcgYWYpKTticmVhaztjYXNlIDg6dj1uZXcgTWJ0KG5ldyBmcihuZXcgT2MpLG5ldyBmcihuZXcgYWYpKTticmVhaztjYXNlIDY6ZGVmYXVsdDp2PW5ldyBmcihuZXcgT2MpfWZvcihoPW5ldyBTKGQpO2guYTxoLmMuYy5sZW5ndGg7KXtmb3Iobz11KEooaCksMTY3KSxyPTAscz0wLG49bmV3IGZhKHBlKHIpLHBlKHMpKTtheW4oZSxvLHIscyk7KW49dSh2LkNlKG4sbyksNDYpLHI9dShuLmEsMTkpLmEscz11KG4uYiwxOSkuYTtpbW4oZSxvLHIscyl9fWZ1bmN0aW9uIGs1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2U7Zm9yKG89dC5mLmIsaj1vLmEsQz1vLmIsRz10LmUuZyxIPXQuZS5mLGJqKHQuZSxvLmEsby5iKSx1ZT1qL0csX2U9Qy9ILGs9bmV3IG5yKHUkKHQuZSkpO2suZSE9ay5pLmdjKCk7KXY9dShkcihrKSwxMzcpLGt1KHYsdi5pKnVlKSxFdSh2LHYuaipfZSk7Zm9yKE10PW5ldyBucih1cnQodC5lKSk7TXQuZSE9TXQuaS5nYygpOylndD11KGRyKE10KSwxMTgpLFJ0PWd0LmksS3Q9Z3QuaixSdD4wJiZrdShndCxSdCp1ZSksS3Q+MCYmRXUoZ3QsS3QqX2UpO2ZvcihLOSh0LmIsbmV3IGh3KSxlPW5ldyBoZSxkPW5ldyBwMihuZXcgQ2codC5jKS5hKTtkLmI7KWg9WncoZCkscj11KGguY2QoKSw3OSksbj11KGguZGQoKSwzOTUpLmEscz14NChyLCExLCExKSxNPV9hZShlMChyKSxsSShzKSxuKSxDSShNLHMpLFN0PVJhZShyKSxTdCYmUm8oZSxTdCwwKT09LTEmJihlLmNbZS5jLmxlbmd0aF09U3QsVlh0KFN0LChabihNLmIhPTApLHUoTS5hLmEuYyw4KSksbikpO2Zvcih0dD1uZXcgcDIobmV3IENnKHQuZCkuYSk7dHQuYjspSz1adyh0dCkscj11KEsuY2QoKSw3OSksbj11KEsuZGQoKSwzOTUpLmEscz14NChyLCExLCExKSxNPV9hZSh0YihyKSxxRChsSShzKSksbiksTT1xRChNKSxDSShNLHMpLFN0PWphZShyKSxTdCYmUm8oZSxTdCwwKT09LTEmJihlLmNbZS5jLmxlbmd0aF09U3QsVlh0KFN0LChabihNLmIhPTApLHUoTS5jLmIuYyw4KSksbikpfWZ1bmN0aW9uIEFoZSh0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2U7aWYobi5jLmxlbmd0aCE9MCl7Zm9yKEg9bmV3IGhlLGo9bmV3IFMobik7ai5hPGouYy5jLmxlbmd0aDspTT11KEooaiksMzMpLGxlKEgsbmV3ICRlKE0uaSxNLmopKTtmb3Ioci5uJiZlJiZnZihyLHBmKGUpLChTbCgpLFFsKSk7UjR0KHQsbik7KWJxKHQsbiwhMSk7Zm9yKHIubiYmZSYmZ2YocixwZihlKSwoU2woKSxRbCkpLGg9MCxkPTAscz1udWxsLG4uYy5sZW5ndGghPTAmJihzPShBbigwLG4uYy5sZW5ndGgpLHUobi5jWzBdLDMzKSksaD1zLmktKEFuKDAsSC5jLmxlbmd0aCksdShILmNbMF0sOCkpLmEsZD1zLmotKEFuKDAsSC5jLmxlbmd0aCksdShILmNbMF0sOCkpLmIpLG89Yi5NYXRoLnNxcnQoaCpoK2QqZCksQz1LcmUobik7Qy5hLmdjKCkhPTA7KXtmb3Ioaz1DLmEuZWMoKS5LYygpO2suT2IoKTspdj11KGsuUGIoKSwzMyksRz10LmYsSz1HLmkrRy5nLzIsdHQ9Ry5qK0cuZi8yLGd0PXYuaSt2LmcvMixNdD12Lmordi5mLzIsU3Q9Z3QtSyxSdD1NdC10dCxLdD1iLk1hdGguc3FydChTdCpTdCtSdCpSdCksdWU9U3QvS3QsX2U9UnQvS3Qsa3Uodix2LmkrdWUqbyksRXUodix2LmorX2Uqbyk7ci5uJiZlJiZnZihyLHBmKGUpLChTbCgpLFFsKSksQz1LcmUobmV3IEJ1KEMpKX10LmEmJnQuYS5sZyhuZXcgQnUoQykpLHIubiYmZSYmZ2YocixwZihlKSwoU2woKSxRbCkpLEFoZSh0LGUsbmV3IEJ1KEMpLHIpfX1mdW5jdGlvbiBFNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0O2lmKEs9dC5uLHR0PXQubyxqPXQuZCxNPVh0KHllKG95KHQsKFRlKCksbGh0KSkpKSxlKXtmb3IoQz1NKihlLmdjKCktMSksSD0wLHY9ZS5LYygpO3YuT2IoKTspaD11KHYuUGIoKSwxMCksQys9aC5vLmEsSD1iLk1hdGgubWF4KEgsaC5vLmIpO2ZvcihndD1LLmEtKEMtdHQuYSkvMixvPUsuYi1qLmQrSCxyPXR0LmEvKGUuZ2MoKSsxKSxzPXIsZD1lLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDEwKSxoLm4uYT1ndCxoLm4uYj1vLWguby5iLGd0Kz1oLm8uYStNLGs9JGNlKGgpLGsubi5hPWguby5hLzItay5hLmEsay5uLmI9aC5vLmIsRz11KFEoaCwoYWUoKSxaVikpLDExKSxHLmUuYy5sZW5ndGgrRy5nLmMubGVuZ3RoPT0xJiYoRy5uLmE9cy1HLmEuYSxHLm4uYj0wLFVvKEcsdCkpLHMrPXJ9aWYobil7Zm9yKEM9TSoobi5nYygpLTEpLEg9MCx2PW4uS2MoKTt2Lk9iKCk7KWg9dSh2LlBiKCksMTApLEMrPWguby5hLEg9Yi5NYXRoLm1heChILGguby5iKTtmb3IoZ3Q9Sy5hLShDLXR0LmEpLzIsbz1LLmIrdHQuYitqLmEtSCxyPXR0LmEvKG4uZ2MoKSsxKSxzPXIsZD1uLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDEwKSxoLm4uYT1ndCxoLm4uYj1vLGd0Kz1oLm8uYStNLGs9JGNlKGgpLGsubi5hPWguby5hLzItay5hLmEsay5uLmI9MCxHPXUoUShoLChhZSgpLFpWKSksMTEpLEcuZS5jLmxlbmd0aCtHLmcuYy5sZW5ndGg9PTEmJihHLm4uYT1zLUcuYS5hLEcubi5iPXR0LmIsVW8oRyx0KSkscys9cn19ZnVuY3Rpb24gVDVuKHQsZSl7dmFyIG4scixzLG8saCxkO2lmKHUoUShlLChhZSgpLFZjKSksMjEpLkhjKChvbygpLHZoKSkpe2ZvcihkPW5ldyBTKGUuYSk7ZC5hPGQuYy5jLmxlbmd0aDspbz11KEooZCksMTApLG8uaz09KFZuKCksT3MpJiYocz11KFEobywoVGUoKSxmRykpLDE0MiksdC5jPWIuTWF0aC5taW4odC5jLG8ubi5hLXMuYiksdC5hPWIuTWF0aC5tYXgodC5hLG8ubi5hK28uby5hK3MuYyksdC5kPWIuTWF0aC5taW4odC5kLG8ubi5iLXMuZCksdC5iPWIuTWF0aC5tYXgodC5iLG8ubi5iK28uby5iK3MuYSkpO2ZvcihoPW5ldyBTKGUuYSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTApLG8uayE9KFZuKCksT3MpKXN3aXRjaChvLmsuZyl7Y2FzZSAyOmlmKHI9dShRKG8sKFRlKCksdXUpKSwxNjMpLHI9PShkaCgpLGJiKSl7by5uLmE9dC5jLTEwLFFzZShvLG5ldyAkSykuSmIobmV3IEphKG8pKTticmVha31pZihyPT1qeSl7by5uLmE9dC5hKzEwLFFzZShvLG5ldyB6SykuSmIobmV3IG1sKG8pKTticmVha31pZihuPXUoUShvLEIyKSwzMDMpLG49PShxMCgpLFk0KSl7WmxlKG8pLkpiKG5ldyBxZihvKSksby5uLmI9dC5kLTEwO2JyZWFrfWlmKG49PUY2KXtabGUobykuSmIobmV3IENwKG8pKSxvLm4uYj10LmIrMTA7YnJlYWt9YnJlYWs7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oIlRoZSBub2RlIHR5cGUgIitvLmsrIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAiK3U2bikpfX19ZnVuY3Rpb24gQzVuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3Iodj1uZXcgJGUoci5pK3IuZy8yLHIuaityLmYvMiksSD1ZbGUociksRz11KHFlKGUsKFRlKCksY3MpKSw5OCksdHQ9dShxZShyLEM3KSw2MSksclV0KGNzZShyKSxWeSl8fChyLmk9PTAmJnIuaj09MD9LPTA6Sz1yZ24ocix0dCksd28ocixWeSxLKSksaz1uZXcgJGUoZS5nLGUuZikscz1MSShyLEcsdHQsSCxrLHYsbmV3ICRlKHIuZyxyLmYpLHUoUShuLFdsKSwxMDMpLG4pLEp0KHMsKGFlKCksX2kpLHIpLG89dShOZShzLmosMCksMTEpLER0dChvLFhtbihyKSksSnQocyxHeSwoWnUoKSx1bihDYikpKSxNPXUocWUoZSxHeSksMTc0KS5IYyhzZyksZD1uZXcgbnIoKCFyLm4mJihyLm49bmV3IGZlKHFvLHIsMSw3KSksci5uKSk7ZC5lIT1kLmkuZ2MoKTspaWYoaD11KGRyKGQpLDEzNyksIWplKFJlKHFlKGgsejIpKSkmJmguYSYmKGo9Vml0KGgpLGxlKG8uZixqKSwhTSkpc3dpdGNoKEM9MCxTOSh1KHFlKGUsR3kpLDIxKSkmJihDPW81dChuZXcgJGUoaC5pLGguaiksbmV3ICRlKGguZyxoLmYpLG5ldyAkZShyLmcsci5mKSwwLHR0KSksdHQuZyl7Y2FzZSAyOmNhc2UgNDpqLm8uYT1DO2JyZWFrO2Nhc2UgMTpjYXNlIDM6ai5vLmI9Q31KdChzLFM3LHllKHFlKGVzKGUpLFM3KSkpLEp0KHMsQTcseWUocWUoZXMoZSksQTcpKSksSnQocyxXeSx5ZShxZShlcyhlKSxXeSkpKSxsZShuLmEscyksa2kodC5hLHIscyl9ZnVuY3Rpb24gTGhlKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdDtmb3IodnIobiwiUHJvY2Vzc29yIGFycmFuZ2UgbGV2ZWwiLDEpLEM9MCx3bigpLHI0KGUsbmV3IEVwdCgoZmMoKSxNRykpKSxvPWUuYixkPWVpKGUsZS5iKSxrPSEwO2smJmQuYi5iIT1kLmQuYTspZ3Q9dShPcnQoZCksODYpLHUoUShndCxNRyksMTkpLmE9PTA/LS1vOms9ITE7aWYoS3Q9bmV3IFFkKGUsMCxvKSxoPW5ldyBTbnQoS3QpLEt0PW5ldyBRZChlLG8sZS5iKSx2PW5ldyBTbnQoS3QpLGguYj09MClmb3IoRz1laSh2LDApO0cuYiE9Ry5kLmM7KUg9dSh0aShHKSw4NiksSnQoSCxPRyxwZShDKyspKTtlbHNlIGZvcihNPWguYixSdD1laShoLDApO1J0LmIhPVJ0LmQuYzspe2ZvcihTdD11KHRpKFJ0KSw4NiksSnQoU3QsT0cscGUoQysrKSkscj1FeXQoU3QpLExoZSh0LHIsUmMobiwxL018MCkpLHI0KHIsTXZ0KG5ldyBFcHQoT0cpKSksaj1uZXcgWmksTXQ9ZWkociwwKTtNdC5iIT1NdC5kLmM7KWZvcihndD11KHRpKE10KSw4NiksdHQ9ZWkoU3QuZCwwKTt0dC5iIT10dC5kLmM7KUs9dSh0aSh0dCksMTg4KSxLLmM9PWd0JiZmcyhqLEssai5jLmIsai5jKTtmb3IoQWgoU3QuZCksVWEoU3QuZCxqKSxkPWVpKHYsdi5iKSxzPVN0LmQuYixrPSEwOzA8cyYmayYmZC5iLmIhPWQuZC5hOylndD11KE9ydChkKSw4NiksdShRKGd0LE1HKSwxOSkuYT09MD8oSnQoZ3QsT0cscGUoQysrKSksLS1zLHR6KGQpKTprPSExfW9yKG4pfWZ1bmN0aW9uIF81bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3Q7Zm9yKHZyKGUsIkludmVydGVkIHBvcnQgcHJlcHJvY2Vzc2luZyIsMSksQz10LmIsaz1uZXcgZGEoQywwKSxuPW51bGwsU3Q9bmV3IGhlO2suYjxrLmQuZ2MoKTspe2ZvcihNdD1uLG49KFpuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSwyOSkpLEg9bmV3IFMoU3QpO0guYTxILmMuYy5sZW5ndGg7KU09dShKKEgpLDEwKSxFbyhNLE10KTtmb3IoU3QuYz1OdChRbixEZSwxLDAsNSwxKSxHPW5ldyBTKG4uYSk7Ry5hPEcuYy5jLmxlbmd0aDspaWYoTT11KEooRyksMTApLE0uaz09KFZuKCksT3MpJiZHMyh1KFEoTSwoVGUoKSxjcykpLDk4KSkpe2ZvcihndD1VNXQoTSwoc28oKSx0bCksKHZlKCksSG4pKS5LYygpO2d0Lk9iKCk7KWZvcihLPXUoZ3QuUGIoKSwxMSksdj1LLmUsZD11KFAxKHYsTnQoaGx0LFdvdCwxNyx2LmMubGVuZ3RoLDAsMSkpLDQ3NCkscz1kLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLFF5bih0LEsscixTdCk7Zm9yKHR0PVU1dChNLG51LEJuKS5LYygpO3R0Lk9iKCk7KWZvcihLPXUodHQuUGIoKSwxMSksdj1LLmcsZD11KFAxKHYsTnQoaGx0LFdvdCwxNyx2LmMubGVuZ3RoLDAsMSkpLDQ3NCkscz1kLG89MCxoPXMubGVuZ3RoO288aDsrK28pcj1zW29dLFh5bih0LEsscixTdCl9fWZvcihqPW5ldyBTKFN0KTtqLmE8ai5jLmMubGVuZ3RoOylNPXUoSihqKSwxMCksRW8oTSxuKTtvcihlKX1mdW5jdGlvbiBTNW4odCxlLG4scixzLG8pe3ZhciBoLGQsdixrLEMsTTtmb3Ioaz1uZXcgTWMsTW8oayxlKSxCcyhrLHUocWUoZSwoVGUoKSxDNykpLDYxKSksSnQoaywoYWUoKSxfaSksZSksVW8oayxuKSxNPWsubyxNLmE9ZS5nLE0uYj1lLmYsQz1rLm4sQy5hPWUuaSxDLmI9ZS5qLGtpKHQuYSxlLGspLGg9Tjgod3UoV28obmV3IFRuKG51bGwsKCFlLmUmJihlLmU9bmV3IENuKFlzLGUsNyw0KSksbmV3IF9uKGUuZSwxNikpKSxuZXcgb04pLG5ldyBZNSksbmV3IGlyKGUpKSxofHwoaD1OOCh3dShXbyhuZXcgVG4obnVsbCwoIWUuZCYmKGUuZD1uZXcgQ24oWXMsZSw4LDUpKSxuZXcgX24oZS5kLDE2KSkpLG5ldyBUayksbmV3IEZUKSxuZXcgc3IoZSkpKSxofHwoaD1OOChuZXcgVG4obnVsbCwoIWUuZSYmKGUuZT1uZXcgQ24oWXMsZSw3LDQpKSxuZXcgX24oZS5lLDE2KSkpLG5ldyBnSykpLEp0KGssU08sKE5uKCksISFoKSksVjNuKGssbyxzLHUocWUoZSxSdiksOCkpLHY9bmV3IG5yKCghZS5uJiYoZS5uPW5ldyBmZShxbyxlLDEsNykpLGUubikpO3YuZSE9di5pLmdjKCk7KWQ9dShkcih2KSwxMzcpLCFqZShSZShxZShkLHoyKSkpJiZkLmEmJmxlKGsuZixWaXQoZCkpO3N3aXRjaChzLmcpe2Nhc2UgMjpjYXNlIDE6KGsuaj09KHZlKCksUG4pfHxrLmo9PW1yKSYmci5GYygob28oKSxXNCkpO2JyZWFrO2Nhc2UgNDpjYXNlIDM6KGsuaj09KHZlKCksSG4pfHxrLmo9PUJuKSYmci5GYygob28oKSxXNCkpfXJldHVybiBrfWZ1bmN0aW9uICRhdCh0LGUsbixyLHMsbyxoKXt2YXIgZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3Q7Zm9yKGo9bnVsbCxyPT0oR3coKSx5Yik/aj1lOnI9PXI1JiYoaj1uKSxLPWouYS5lYygpLktjKCk7Sy5PYigpOyl7Zm9yKEc9dShLLlBiKCksMTEpLHR0PVlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbRy5pLm4sRy5uLEcuYV0pKS5iLFN0PW5ldyBIcyxkPW5ldyBIcyxrPW5ldyBMMShHLmIpO0dvKGsuYSl8fEdvKGsuYik7KWlmKHY9dShHbyhrLmEpP0ooay5hKTpKKGsuYiksMTcpLGplKFJlKFEodiwoYWUoKSxxMSkpKSk9PXMmJlJvKG8sdiwwKSE9LTEpe2lmKHYuZD09Rz9ndD12LmM6Z3Q9di5kLE10PVlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbZ3QuaS5uLGd0Lm4sZ3QuYV0pKS5iLGIuTWF0aC5hYnMoTXQtdHQpPC4yKWNvbnRpbnVlO010PHR0P2UuYS5fYihndCk/RnMoU3QsbmV3IGZhKHliLHYpKTpGcyhTdCxuZXcgZmEocjUsdikpOmUuYS5fYihndCk/RnMoZCxuZXcgZmEoeWIsdikpOkZzKGQsbmV3IGZhKHI1LHYpKX1pZihTdC5hLmdjKCk+MSlmb3IoSD1uZXcgdnh0KEcsU3QsciksdmEoU3QsbmV3IHhHdCh0LEgpKSxoLmNbaC5jLmxlbmd0aF09SCxNPVN0LmEuZWMoKS5LYygpO00uT2IoKTspQz11KE0uUGIoKSw0NiksbXUobyxDLmIpO2lmKGQuYS5nYygpPjEpZm9yKEg9bmV3IHZ4dChHLGQsciksdmEoZCxuZXcga0d0KHQsSCkpLGguY1toLmMubGVuZ3RoXT1ILE09ZC5hLmVjKCkuS2MoKTtNLk9iKCk7KUM9dShNLlBiKCksNDYpLG11KG8sQy5iKX19ZnVuY3Rpb24gTWhlKHQpe013KHQsbmV3IGsyKE1SKF93KEV3KEN3KFR3KG5ldyBrZyxTZCksIkVMSyBSYWRpYWwiKSwnQSByYWRpYWwgbGF5b3V0IHByb3ZpZGVyIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBhbGdvcml0aG0gb2YgUGV0ZXIgRWFkZXMgcHVibGlzaGVkIGluICJEcmF3aW5nIGZyZWUgdHJlZXMuIiwgcHVibGlzaGVkIGJ5IEludGVybmF0aW9uYWwgSW5zdGl0dXRlIGZvciBBZHZhbmNlZCBTdHVkeSBvZiBTb2NpYWwgSW5mb3JtYXRpb24gU2NpZW5jZSwgRnVqaXRzdSBMaW1pdGVkIGluIDE5OTEuIFRoZSByYWRpYWwgbGF5b3V0ZXIgdGFrZXMgYSB0cmVlIGFuZCBwbGFjZXMgdGhlIG5vZGVzIGluIHJhZGlhbCBvcmRlciBhcm91bmQgdGhlIHJvb3QuIFRoZSBub2RlcyBvZiB0aGUgc2FtZSB0cmVlIGxldmVsIGFyZSBwbGFjZWQgb24gdGhlIHNhbWUgcmFkaXVzLicpLG5ldyBkWiksU2QpKSkseGUodCxTZCx5SCxJZShReWUpKSx4ZSh0LFNkLEN5LEllKFp5ZSkpLHhlKHQsU2QsRDQsSWUoV3llKSkseGUodCxTZCxDNixJZShZeWUpKSx4ZSh0LFNkLFQ2LEllKEt5ZSkpLHhlKHQsU2QsVUUsSWUoVXllKSkseGUodCxTZCxqXyxJZShMX3QpKSx4ZSh0LFNkLFdFLEllKFh5ZSkpLHhlKHQsU2QsUGN0LEllKFdodCkpLHhlKHQsU2QsT2N0LEllKFlodCkpLHhlKHQsU2QsWmt0LEllKE1fdCkpLHhlKHQsU2QsWWt0LEllKEJHKSkseGUodCxTZCxLa3QsSWUoUkcpKSx4ZSh0LFNkLFhrdCxJZShxTykpLHhlKHQsU2QsUWt0LEllKERfdCkpfWZ1bmN0aW9uIFN4dCh0KXt2YXIgZTtpZih0aGlzLnI9bnJuKG5ldyBiYyxuZXcgQ2MpLHRoaXMuYj1uZXcgaV8odShMcihYYSksMjkwKSksdGhpcy5wPW5ldyBpXyh1KExyKFhhKSwyOTApKSx0aGlzLmk9bmV3IGlfKHUoTHIoJHBlKSwyOTApKSx0aGlzLmU9dCx0aGlzLm89bmV3IHhvKHQucmYoKSksdGhpcy5EPXQuRGYoKXx8amUoUmUodC5XZSgodWkoKSxaTykpKSksdGhpcy5BPXUodC5XZSgodWkoKSxHMikpLDIxKSx0aGlzLkI9dSh0LldlKHhiKSwyMSksdGhpcy5xPXUodC5XZShLUyksOTgpLHRoaXMudT11KHQuV2UoUXkpLDIxKSwhdWduKHRoaXMudSkpdGhyb3cgaXQobmV3IFIzKCJJbnZhbGlkIHBvcnQgbGFiZWwgcGxhY2VtZW50OiAiK3RoaXMudSkpO2lmKHRoaXMudj1qZShSZSh0LldlKHVBdCkpKSx0aGlzLmo9dSh0LldlKG81KSwyMSksIU8ybih0aGlzLmopKXRocm93IGl0KG5ldyBSMygiSW52YWxpZCBub2RlIGxhYmVsIHBsYWNlbWVudDogIit0aGlzLmopKTt0aGlzLm49dShsXyh0LFhTdCksMTE2KSx0aGlzLms9WHQoeWUobF8odCxKRykpKSx0aGlzLmQ9WHQoeWUobF8odCxkQXQpKSksdGhpcy53PVh0KHllKGxfKHQsdkF0KSkpLHRoaXMucz1YdCh5ZShsXyh0LGdBdCkpKSx0aGlzLnQ9WHQoeWUobF8odCxwQXQpKSksdGhpcy5DPXUobF8odCxiQXQpLDE0MiksdGhpcy5jPTIqdGhpcy5kLGU9IXRoaXMuQi5IYygobGwoKSxjUCkpLHRoaXMuZj1uZXcgYV8oMCxlLDApLHRoaXMuZz1uZXcgYV8oMSxlLDApLGhldCh0aGlzLmYsKEtmKCksZXUpLHRoaXMuZyl9ZnVuY3Rpb24gQTVuKHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbjtmb3IoU3Q9MCxHPTAsSD0wLGo9MSxNdD1uZXcgbnIoKCF0LmEmJih0LmE9bmV3IGZlKHJzLHQsMTAsMTEpKSx0LmEpKTtNdC5lIT1NdC5pLmdjKCk7KXR0PXUoZHIoTXQpLDMzKSxqKz1qMChuZXcgYXIobHIoSzAodHQpLmEuS2MoKSxuZXcgeikpKSxXZT10dC5nLEc9Yi5NYXRoLm1heChHLFdlKSxNPXR0LmYsSD1iLk1hdGgubWF4KEgsTSksU3QrPVdlKk07Zm9yKEs9KCF0LmEmJih0LmE9bmV3IGZlKHJzLHQsMTAsMTEpKSx0LmEpLmksaD1TdCsyKnIqcipqKkssbz1iLk1hdGguc3FydChoKSx2PWIuTWF0aC5tYXgobypuLEcpLGQ9Yi5NYXRoLm1heChvL24sSCksZ3Q9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBmZShycyx0LDEwLDExKSksdC5hKSk7Z3QuZSE9Z3QuaS5nYygpOyl0dD11KGRyKGd0KSwzMyksUWU9cy5iKyh1bChlLDI2KSpJXyt1bChlLDI3KSpPXykqKHYtdHQuZyksUm49cy5iKyh1bChlLDI2KSpJXyt1bChlLDI3KSpPXykqKGQtdHQuZiksa3UodHQsUWUpLEV1KHR0LFJuKTtmb3IoX2U9disocy5iK3MuYyksdWU9ZCsocy5kK3MuYSksS3Q9bmV3IG5yKCghdC5hJiYodC5hPW5ldyBmZShycyx0LDEwLDExKSksdC5hKSk7S3QuZSE9S3QuaS5nYygpOylmb3IoUnQ9dShkcihLdCksMzMpLEM9bmV3IGFyKGxyKEswKFJ0KS5hLktjKCksbmV3IHopKTt6cihDKTspaz11KE1yKEMpLDc5KSx3XyhrKXx8THhuKGssZSxfZSx1ZSk7X2UrPXMuYitzLmMsdWUrPXMuZCtzLmEsd3YodCxfZSx1ZSwhMSwhMCl9ZnVuY3Rpb24gUnEodCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTTtpZih0PT1udWxsKXRocm93IGl0KG5ldyBsZChfdSkpO2lmKGs9dCxvPXQubGVuZ3RoLHY9ITEsbz4wJiYoZT0oUnIoMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApKSwoZT09NDV8fGU9PTQzKSYmKHQ9dC5zdWJzdHIoMSksLS1vLHY9ZT09NDUpKSxvPT0wKXRocm93IGl0KG5ldyBsZCh5ditrKyciJykpO2Zvcig7dC5sZW5ndGg+MCYmKFJyKDAsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCgwKT09NDgpOyl0PXQuc3Vic3RyKDEpLC0tbztpZihvPih2bGUoKSwkZ2UpWzEwXSl0aHJvdyBpdChuZXcgbGQoeXYraysnIicpKTtmb3Iocz0wO3M8bztzKyspaWYoV2llKChScihzLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocykpKT09LTEpdGhyb3cgaXQobmV3IGxkKHl2K2srJyInKSk7Zm9yKE09MCxoPWdFdFsxMF0sQz1GdXRbMTBdLGQ9ejgocEV0WzEwXSksbj0hMCxyPW8laCxyPjAmJihNPS1wYXJzZUludCh0LnN1YnN0cigwLHIpLDEwKSx0PXQuc3Vic3RyKHIpLG8tPXIsbj0hMSk7bz49aDspe2lmKHI9cGFyc2VJbnQodC5zdWJzdHIoMCxoKSwxMCksdD10LnN1YnN0cihoKSxvLT1oLG4pbj0hMTtlbHNle2lmKHljKE0sZCk8MCl0aHJvdyBpdChuZXcgbGQoeXYraysnIicpKTtNPV9hKE0sQyl9TT1KcChNLHIpfWlmKHljKE0sMCk+MCl0aHJvdyBpdChuZXcgbGQoeXYraysnIicpKTtpZighdiYmKE09ejgoTSkseWMoTSwwKTwwKSl0aHJvdyBpdChuZXcgbGQoeXYraysnIicpKTtyZXR1cm4gTX1mdW5jdGlvbiBBeHQodCxlKXtvS3QoKTt2YXIgbixyLHMsbyxoLGQsdjtpZih0aGlzLmE9bmV3IHYydCh0aGlzKSx0aGlzLmI9dCx0aGlzLmM9ZSx0aGlzLmY9WG50KFRvKCgkdSgpLHlhKSxlKSksdGhpcy5mLmRjKCkpaWYoKGQ9ZDR0KHlhLHQpKT09ZSlmb3IodGhpcy5lPSEwLHRoaXMuZD1uZXcgaGUsdGhpcy5mPW5ldyBPayx0aGlzLmYuRmMoTzIpLHUoUHEoVEQoeWEsUmwodCkpLCIiKSwyNik9PXQmJnRoaXMuZi5GYyhDOSh5YSxSbCh0KSkpLHM9dmF0KHlhLHQpLktjKCk7cy5PYigpOylzd2l0Y2gocj11KHMuUGIoKSwxNzApLEh3KFRvKHlhLHIpKSl7Y2FzZSA0Ont0aGlzLmQuRmMocik7YnJlYWt9Y2FzZSA1Ont0aGlzLmYuR2MoWG50KFRvKHlhLHIpKSk7YnJlYWt9fWVsc2UgaWYodG8oKSx1KGUsNjYpLk9qKCkpZm9yKHRoaXMuZT0hMCx0aGlzLmY9bnVsbCx0aGlzLmQ9bmV3IGhlLGg9MCx2PSh0Lmk9PW51bGwmJnZkKHQpLHQuaSkubGVuZ3RoO2g8djsrK2gpZm9yKHI9KG49KHQuaT09bnVsbCYmdmQodCksdC5pKSxoPj0wJiZoPG4ubGVuZ3RoP25baF06bnVsbCksbz1LeChUbyh5YSxyKSk7bztvPUt4KFRvKHlhLG8pKSlvPT1lJiZ0aGlzLmQuRmMocik7ZWxzZSBIdyhUbyh5YSxlKSk9PTEmJmQ/KHRoaXMuZj1udWxsLHRoaXMuZD0oZDYoKSxBNWUpKToodGhpcy5mPW51bGwsdGhpcy5lPSEwLHRoaXMuZD0od24oKSxuZXcgTyhlKSkpO2Vsc2UgdGhpcy5lPUh3KFRvKHlhLGUpKT09NSx0aGlzLmYuRmIoJGZ0KSYmKHRoaXMuZj0kZnQpfWZ1bmN0aW9uIERoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2ZvcihuPTAscj14MW4odCxlKSxqPXQucyxIPXQudCxrPXUodShBaSh0LnIsZSksMjEpLDg0KS5LYygpO2suT2IoKTspaWYodj11KGsuUGIoKSwxMTEpLCEoIXYuY3x8di5jLmQuYy5sZW5ndGg8PTApKXtzd2l0Y2goRz12LmIucmYoKSxkPXYuYi5YZSgodWkoKSxkbCkpP1h0KHllKHYuYi5XZShkbCkpKTowLEM9di5jLE09Qy5pLE0uYj0oaD1DLm4sQy5lLmEraC5iK2guYyksTS5hPShvPUMubixDLmUuYitvLmQrby5hKSxlLmcpe2Nhc2UgMTpNLmM9di5hPyhHLmEtTS5iKS8yOkcuYStqLE0uZD1HLmIrZCtyLFdmKEMsKFF1KCksZmIpKSxkZChDLCh5dSgpLG4xKSk7YnJlYWs7Y2FzZSAzOk0uYz12LmE/KEcuYS1NLmIpLzI6Ry5hK2osTS5kPS1kLXItTS5hLFdmKEMsKFF1KCksZmIpKSxkZChDLCh5dSgpLEVmKSk7YnJlYWs7Y2FzZSAyOk0uYz0tZC1yLU0uYix2LmE/KHM9dC52P00uYTp1KE5lKEMuZCwwKSwxODEpLnJmKCkuYixNLmQ9KEcuYi1zKS8yKTpNLmQ9Ry5iK0gsV2YoQywoUXUoKSxrZikpLGRkKEMsKHl1KCksZGIpKTticmVhaztjYXNlIDQ6TS5jPUcuYStkK3Isdi5hPyhzPXQudj9NLmE6dShOZShDLmQsMCksMTgxKS5yZigpLmIsTS5kPShHLmItcykvMik6TS5kPUcuYitILFdmKEMsKFF1KCksTWQpKSxkZChDLCh5dSgpLGRiKSl9KGU9PSh2ZSgpLFBuKXx8ZT09bXIpJiYobj1iLk1hdGgubWF4KG4sTS5hKSl9bj4wJiYodShwbyh0LmIsZSksMTI0KS5hLmI9bil9ZnVuY3Rpb24gTDVuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndDtmb3IodnIoZSwiQ29tbWVudCBwcmUtcHJvY2Vzc2luZyIsMSksbj0wLHY9bmV3IFModC5hKTt2LmE8di5jLmMubGVuZ3RoOylpZihkPXUoSih2KSwxMCksamUoUmUoUShkLChUZSgpLENTKSkpKSl7Zm9yKCsrbixzPTAscj1udWxsLGs9bnVsbCxHPW5ldyBTKGQuaik7Ry5hPEcuYy5jLmxlbmd0aDspaj11KEooRyksMTEpLHMrPWouZS5jLmxlbmd0aCtqLmcuYy5sZW5ndGgsai5lLmMubGVuZ3RoPT0xJiYocj11KE5lKGouZSwwKSwxNyksaz1yLmMpLGouZy5jLmxlbmd0aD09MSYmKHI9dShOZShqLmcsMCksMTcpLGs9ci5kKTtpZihzPT0xJiZrLmUuYy5sZW5ndGgray5nLmMubGVuZ3RoPT0xJiYhamUoUmUoUShrLmksQ1MpKSkpcnhuKGQscixrLGsuaSksTDkodik7ZWxzZXtmb3IoZ3Q9bmV3IGhlLEg9bmV3IFMoZC5qKTtILmE8SC5jLmMubGVuZ3RoOyl7Zm9yKGo9dShKKEgpLDExKSxNPW5ldyBTKGouZyk7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTcpLEMuZC5nLmMubGVuZ3RoPT0wfHwoZ3QuY1tndC5jLmxlbmd0aF09Qyk7Zm9yKGg9bmV3IFMoai5lKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxNyksby5jLmUuYy5sZW5ndGg9PTB8fChndC5jW2d0LmMubGVuZ3RoXT1vKX1mb3IodHQ9bmV3IFMoZ3QpO3R0LmE8dHQuYy5jLmxlbmd0aDspSz11KEoodHQpLDE3KSxidihLLCEwKX19ZS5uJiZKYihlLCJGb3VuZCAiK24rIiBjb21tZW50IGJveGVzIiksb3IoZSl9ZnVuY3Rpb24gTTVuKHQsZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixILEcsSztpZihqPVh0KHllKFEodCwoVGUoKSxTNykpKSksSD1YdCh5ZShRKHQsQTcpKSksTT1YdCh5ZShRKHQsV3kpKSksZD10Lm8sbz11KE5lKHQuaiwwKSwxMSksaD1vLm4sSz1vcG4obyxNKSwhIUspe2lmKGUuSGMoKFp1KCksc2cpKSlzd2l0Y2godShRKHQsKGFlKCksb2MpKSw2MSkuZyl7Y2FzZSAxOksuYz0oZC5hLUsuYikvMi1oLmEsSy5kPUg7YnJlYWs7Y2FzZSAzOksuYz0oZC5hLUsuYikvMi1oLmEsSy5kPS1ILUsuYTticmVhaztjYXNlIDI6biYmby5lLmMubGVuZ3RoPT0wJiZvLmcuYy5sZW5ndGg9PTA/KEM9cj9LLmE6dShOZShvLmYsMCksNzApLm8uYixLLmQ9KGQuYi1DKS8yLWguYik6Sy5kPWQuYitILWguYixLLmM9LWotSy5iO2JyZWFrO2Nhc2UgNDpuJiZvLmUuYy5sZW5ndGg9PTAmJm8uZy5jLmxlbmd0aD09MD8oQz1yP0suYTp1KE5lKG8uZiwwKSw3MCkuby5iLEsuZD0oZC5iLUMpLzItaC5iKTpLLmQ9ZC5iK0gtaC5iLEsuYz1qfWVsc2UgaWYoZS5IYyhDYikpc3dpdGNoKHUoUSh0LChhZSgpLG9jKSksNjEpLmcpe2Nhc2UgMTpjYXNlIDM6Sy5jPWguYStqO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6biYmIW8uYz8oQz1yP0suYTp1KE5lKG8uZiwwKSw3MCkuby5iLEsuZD0oZC5iLUMpLzItaC5iKTpLLmQ9aC5iK0h9Zm9yKHM9Sy5kLGs9bmV3IFMoby5mKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSw3MCksRz12Lm4sRy5hPUsuYyxHLmI9cyxzKz12Lm8uYitNfX1mdW5jdGlvbiBENW4oKXtpaSh3UCxuZXcgTEopLGlpKG1VLG5ldyBPSiksaWkodlAsbmV3IHprKSxpaShrTHQsbmV3IFJKKSxpaShBZSxuZXcgVmspLGlpKGN0KEd1LDEpLG5ldyBnQyksaWkoUnMsbmV3ICRKKSxpaShNNixuZXcgZHgpLGlpKEFlLG5ldyBkMSksaWkoQWUsbmV3IExCKSxpaShBZSxuZXcgTUIpLGlpKGxhLG5ldyBEQiksaWkoQWUsbmV3IElCKSxpaSh3aCxuZXcgT0IpLGlpKHdoLG5ldyBQQiksaWkoQWUsbmV3ICRmKSxpaShpNyxuZXcgZHUpLGlpKEFlLG5ldyBBSiksaWkoQWUsbmV3IE1KKSxpaShBZSxuZXcgZ3UpLGlpKEFlLG5ldyBjQyksaWkoQWUsbmV3IEZCKSxpaShjdChHdSwxKSxuZXcgTkIpLGlpKEFlLG5ldyBmeCksaWkoQWUsbmV3IERKKSxpaSh3aCxuZXcgJGspLGlpKHdoLG5ldyBJSiksaWkoQWUsbmV3IEJCKSxpaShqYSxuZXcgUEopLGlpKEFlLG5ldyB1QyksaWkoU3YsbmV3IFJCKSxpaShBZSxuZXcgVUwpLGlpKEFlLG5ldyBsQyksaWkoQWUsbmV3IEZKKSxpaShBZSxuZXcgTkopLGlpKHdoLG5ldyBXTCksaWkod2gsbmV3IGhDKSxpaShBZSxuZXcgZzEpLGlpKEFlLG5ldyBCSiksaWkoQWUsbmV3IHFrKSxpaShBZSxuZXcgWUwpLGlpKEFlLG5ldyBXYiksaWkoQWUsbmV3IGZDKSxpaShBdixuZXcgS0wpLGlpKEFlLG5ldyB6ZiksaWkoQWUsbmV3IGRDKSxpaShBZSxuZXcgcDEpLGlpKEF2LG5ldyBiMSksaWkoU3YsbmV3IGpKKSxpaShBZSxuZXcgTTMpLGlpKGphLG5ldyBIayl9ZnVuY3Rpb24gTHh0KHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdDtpZihqPWUubGVuZ3RoLGo+MCYmKHY9KFJyKDAsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCgwKSksdiE9NjQpKXtpZih2PT0zNyYmKE09ZS5sYXN0SW5kZXhPZigiJSIpLGs9ITEsTSE9MCYmKE09PWotMXx8KGs9KFJyKE0rMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KE0rMSk9PTQ2KSkpKSl7aWYoaD1lLnN1YnN0cigxLE0tMSksU3Q9aG4oIiUiLGgpP251bGw6TXh0KGgpLHI9MCxrKXRyeXtyPXFsKGUuc3Vic3RyKE0rMiksU2Esd2kpfWNhdGNoKFJ0KXt0aHJvdyBSdD1XaShSdCksX3QoUnQsMTI3KT8oZD1SdCxpdChuZXcgVyQoZCkpKTppdChSdCl9Zm9yKHR0PWx5dCh0LldnKCkpO3R0Lk9iKCk7KWlmKEc9a3oodHQpLF90KEcsNTEwKSYmKHM9dShHLDU5MCksTXQ9cy5kLChTdD09bnVsbD9NdD09bnVsbDpobihTdCxNdCkpJiZyLS09PTApKXJldHVybiBzO3JldHVybiBudWxsfWlmKEM9ZS5sYXN0SW5kZXhPZigiLiIpLEg9Qz09LTE/ZTplLnN1YnN0cigwLEMpLG49MCxDIT0tMSl0cnl7bj1xbChlLnN1YnN0cihDKzEpLFNhLHdpKX1jYXRjaChSdCl7aWYoUnQ9V2koUnQpLF90KFJ0LDEyNykpSD1lO2Vsc2UgdGhyb3cgaXQoUnQpfWZvcihIPWhuKCIlIixIKT9udWxsOk14dChIKSxLPWx5dCh0LldnKCkpO0suT2IoKTspaWYoRz1reihLKSxfdChHLDE5MSkmJihvPXUoRywxOTEpLGd0PW8ubmUoKSwoSD09bnVsbD9ndD09bnVsbDpobihILGd0KSkmJm4tLT09MCkpcmV0dXJuIG87cmV0dXJuIG51bGx9cmV0dXJuIGVoZSh0LGUpfWZ1bmN0aW9uIEk1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem47Zm9yKHVlPW5ldyBoZSxHPW5ldyBTKHQuYik7Ry5hPEcuYy5jLmxlbmd0aDspZm9yKEg9dShKKEcpLDI5KSxndD1uZXcgUyhILmEpO2d0LmE8Z3QuYy5jLmxlbmd0aDspaWYoSz11KEooZ3QpLDEwKSxLLms9PShWbigpLGtzKSYmVXMoSywoYWUoKSxlRykpKXtmb3IoTXQ9bnVsbCxSdD1udWxsLFN0PW51bGwsUWU9bmV3IFMoSy5qKTtRZS5hPFFlLmMuYy5sZW5ndGg7KXN3aXRjaChXZT11KEooUWUpLDExKSxXZS5qLmcpe2Nhc2UgNDpNdD1XZTticmVhaztjYXNlIDI6UnQ9V2U7YnJlYWs7ZGVmYXVsdDpTdD1XZX1mb3IoS3Q9dShOZShTdC5nLDApLDE3KSxDPW5ldyBEUihLdC5hKSxrPW5ldyB4byhTdC5uKSxMaShrLEsubiksTT1laShDLDApLGVEKE0sayksX2U9cUQoS3QuYSksaj1uZXcgeG8oU3QubiksTGkoaixLLm4pLGZzKF9lLGosX2UuYy5iLF9lLmMpLFJuPXUoUShLLGVHKSwxMCksem49dShOZShSbi5qLDApLDExKSx2PXUoUDEoTXQuZSxOdChobHQsV290LDE3LDAsMCwxKSksNDc0KSxyPXYsbz0wLGQ9ci5sZW5ndGg7bzxkOysrbyllPXJbb10sb2EoZSx6biksaml0KGUuYSxlLmEuYixDKTtmb3Iodj13ZChSdC5nKSxuPXYscz0wLGg9bi5sZW5ndGg7czxoOysrcyllPW5bc10sT2EoZSx6biksaml0KGUuYSwwLF9lKTtPYShLdCxudWxsKSxvYShLdCxudWxsKSx1ZS5jW3VlLmMubGVuZ3RoXT1LfWZvcih0dD1uZXcgUyh1ZSk7dHQuYTx0dC5jLmMubGVuZ3RoOylLPXUoSih0dCksMTApLEVvKEssbnVsbCl9ZnVuY3Rpb24gSWhlKCl7SWhlPVo7dmFyIHQsZSxuO2ZvcihuZXcgU0QoMSwwKSxuZXcgU0QoMTAsMCksbmV3IFNEKDAsMCksemdlPU50KE51dCxlZSwyNDAsMTEsMCwxKSxOMj1OdCh4aCx5ZCwyNSwxMDAsMTUsMSksbUV0PWx0KGN0KGFhLDEpLHZvLDI1LDE1LFsxLDUsMjUsMTI1LDYyNSwzMTI1LDE1NjI1LDc4MTI1LDM5MDYyNSwxOTUzMTI1LDk3NjU2MjUsNDg4MjgxMjUsMjQ0MTQwNjI1LDEyMjA3MDMxMjUsNjEwMzUxNTYyNSwzMDUxNzU3ODEyNSwxNTI1ODc4OTA2MjUsNzYyOTM5NDUzMTI1LDM4MTQ2OTcyNjU2MjUsMTkwNzM0ODYzMjgxMjUsOTUzNjc0MzE2NDA2MjUsNDc2ODM3MTU4MjAzMTI1LDB4ODc4Njc4MzI2ZWFjOV0pLHlFdD1OdChDcixYciwyNSxtRXQubGVuZ3RoLDE1LDEpLHhFdD1sdChjdChhYSwxKSx2bywyNSwxNSxbMSwxMCwxMDAsV2csMWU0LHZvdCwxZTYsMWU3LDFlOCxHcSwxZTEwLDFlMTEsMWUxMiwxZTEzLDFlMTQsMWUxNSwxZTE2XSksa0V0PU50KENyLFhyLDI1LHhFdC5sZW5ndGgsMTUsMSksRUV0PU50KE51dCxlZSwyNDAsMTEsMCwxKSx0PTA7dDxFRXQubGVuZ3RoO3QrKyl6Z2VbdF09bmV3IFNEKHQsMCksRUV0W3RdPW5ldyBTRCgwLHQpLE4yW3RdPTQ4O2Zvcig7dDxOMi5sZW5ndGg7dCsrKU4yW3RdPTQ4O2ZvcihuPTA7bjx5RXQubGVuZ3RoO24rKyl5RXRbbl09czV0KG1FdFtuXSk7Zm9yKGU9MDtlPGtFdC5sZW5ndGg7ZSsrKWtFdFtlXT1zNXQoeEV0W2VdKTtURSgpfWZ1bmN0aW9uIE81bigpe2Z1bmN0aW9uIHQoKXt0aGlzLm9iaj10aGlzLmNyZWF0ZU9iamVjdCgpfXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVPYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vYmpbZV19LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLG4pe3RoaXMub2JqW2VdPW59LHQucHJvdG90eXBlW2tvdF09ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMub2JqW2VdfSx0LnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMub2JqKX0sdC5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMua2V5cygpLG49dGhpcyxyPTA7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtpZihyPj1lLmxlbmd0aClyZXR1cm57ZG9uZTohMH07dmFyIHM9ZVtyKytdO3JldHVybnt2YWx1ZTpbcyxuLmdldChzKV0sZG9uZTohMX19fX0sQnZuKCl8fCh0LnByb3RvdHlwZS5jcmVhdGVPYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm57fX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9ialsiOiIrZV19LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLG4pe3RoaXMub2JqWyI6IitlXT1ufSx0LnByb3RvdHlwZVtrb3RdPWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLm9ialsiOiIrZV19LHQucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdGhpcy5vYmopbi5jaGFyQ29kZUF0KDApPT01OCYmZS5wdXNoKG4uc3Vic3RyaW5nKDEpKTtyZXR1cm4gZX0pLHR9ZnVuY3Rpb24gUDVuKHQpe2N4dCgpO3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKE09dC5sZW5ndGgqOCxNPT0wKXJldHVybiIiO2ZvcihkPU0lMjQsSD1NLzI0fDAsaj1kIT0wP0grMTpILG89bnVsbCxvPU50KHhoLHlkLDI1LGoqNCwxNSwxKSxrPTAsQz0wLGU9MCxuPTAscj0wLGg9MCxzPTAsdj0wO3Y8SDt2KyspZT10W3MrK10sbj10W3MrK10scj10W3MrK10sQz0obiYxNSk8PDI0Pj4yNCxrPShlJjMpPDwyND4+MjQsRz1lJi0xMjg/KGU+PjJeMTkyKTw8MjQ+PjI0OmU+PjI8PDI0Pj4yNCxLPW4mLTEyOD8obj4+NF4yNDApPDwyND4+MjQ6bj4+NDw8MjQ+PjI0LHR0PXImLTEyOD8ocj4+Nl4yNTIpPDwyND4+MjQ6cj4+Njw8MjQ+PjI0LG9baCsrXT1scFtHXSxvW2grK109bHBbS3xrPDw0XSxvW2grK109bHBbQzw8Mnx0dF0sb1toKytdPWxwW3ImNjNdO3JldHVybiBkPT04PyhlPXRbc10saz0oZSYzKTw8MjQ+PjI0LEc9ZSYtMTI4PyhlPj4yXjE5Mik8PDI0Pj4yNDplPj4yPDwyND4+MjQsb1toKytdPWxwW0ddLG9baCsrXT1scFtrPDw0XSxvW2grK109NjEsb1toKytdPTYxKTpkPT0xNiYmKGU9dFtzXSxuPXRbcysxXSxDPShuJjE1KTw8MjQ+PjI0LGs9KGUmMyk8PDI0Pj4yNCxHPWUmLTEyOD8oZT4+Ml4xOTIpPDwyND4+MjQ6ZT4+Mjw8MjQ+PjI0LEs9biYtMTI4PyhuPj40XjI0MCk8PDI0Pj4yNDpuPj40PDwyND4+MjQsb1toKytdPWxwW0ddLG9baCsrXT1scFtLfGs8PDRdLG9baCsrXT1scFtDPDwyXSxvW2grK109NjEpLE1oKG8sMCxvLmxlbmd0aCl9ZnVuY3Rpb24gRjVuKHQsZSl7dmFyIG4scixzLG8saCxkLHY7aWYodC5lPT0wJiZ0LnA+MCYmKHQucD0tKHQucC0xKSksdC5wPlNhJiZ1bXQoZSx0LnAtYWIpLGg9ZS5xLmdldERhdGUoKSxvRChlLDEpLHQuaz49MCYmd2luKGUsdC5rKSx0LmM+PTA/b0QoZSx0LmMpOnQuaz49MD8odj1uZXcgTXl0KGUucS5nZXRGdWxsWWVhcigpLWFiLGUucS5nZXRNb250aCgpLDM1KSxyPTM1LXYucS5nZXREYXRlKCksb0QoZSxiLk1hdGgubWluKHIsaCkpKTpvRChlLGgpLHQuZjwwJiYodC5mPWUucS5nZXRIb3VycygpKSx0LmI+MCYmdC5mPDEyJiYodC5mKz0xMiksQVFlKGUsdC5mPT0yNCYmdC5nPzA6dC5mKSx0Lmo+PTAmJkFhbihlLHQuaiksdC5uPj0wJiZVYW4oZSx0Lm4pLHQuaT49MCYmYVV0KGUsUGEoX2EoYUkoVHUoZS5xLmdldFRpbWUoKSksV2cpLFdnKSx0LmkpKSx0LmEmJihzPW5ldyBCUix1bXQocyxzLnEuZ2V0RnVsbFllYXIoKS1hYi04MCksQ2V0KFR1KGUucS5nZXRUaW1lKCkpLFR1KHMucS5nZXRUaW1lKCkpKSYmdW10KGUscy5xLmdldEZ1bGxZZWFyKCktYWIrMTAwKSksdC5kPj0wKXtpZih0LmM9PS0xKW49KDcrdC5kLWUucS5nZXREYXkoKSklNyxuPjMmJihuLT03KSxkPWUucS5nZXRNb250aCgpLG9EKGUsZS5xLmdldERhdGUoKStuKSxlLnEuZ2V0TW9udGgoKSE9ZCYmb0QoZSxlLnEuZ2V0RGF0ZSgpKyhuPjA/LTc6NykpO2Vsc2UgaWYoZS5xLmdldERheSgpIT10LmQpcmV0dXJuITF9cmV0dXJuIHQubz5TYSYmKG89ZS5xLmdldFRpbWV6b25lT2Zmc2V0KCksYVV0KGUsUGEoVHUoZS5xLmdldFRpbWUoKSksKHQuby1vKSo2MCpXZykpKSwhMH1mdW5jdGlvbiBPaGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0O2lmKHM9UShlLChhZSgpLF9pKSksISFfdChzLDIzOSkpe2ZvcihHPXUocywzMyksSz1lLmUsaj1uZXcgeG8oZS5jKSxvPWUuZCxqLmErPW8uYixqLmIrPW8uZCxSdD11KHFlKEcsKFRlKCkscEcpKSwxNzQpLE51KFJ0LChsbCgpLG5VKSkmJihIPXUocWUoRyxkOXQpLDExNiksY3B0KEgsby5hKSxNdHQoSCxvLmQpLHVwdChILG8uYiksZ3B0KEgsby5jKSksbj1uZXcgaGUsQz1uZXcgUyhlLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcih2PXUoSihDKSwxMCksX3QoUSh2LF9pKSwyMzkpP3o1bih2LGopOl90KFEodixfaSksMTg2KSYmIUsmJihyPXUoUSh2LF9pKSwxMTgpLE10PVRsZShlLHYsci5nLHIuZikseDEocixNdC5hLE10LmIpKSxndD1uZXcgUyh2LmopO2d0LmE8Z3QuYy5jLmxlbmd0aDspdHQ9dShKKGd0KSwxMSksbHMoUmkobmV3IFRuKG51bGwsbmV3IF9uKHR0LmcsMTYpKSxuZXcgSWEodikpLG5ldyAkcihuKSk7aWYoSylmb3IoZ3Q9bmV3IFMoSy5qKTtndC5hPGd0LmMuYy5sZW5ndGg7KXR0PXUoSihndCksMTEpLGxzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0dC5nLDE2KSksbmV3IFlpKEspKSxuZXcgRm8obikpO2ZvcihTdD11KHFlKEcsZWcpLDIxOCksZD1uZXcgUyhuKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxNyksdDVuKGgsU3Qsaik7Zm9yKFltbihlKSxrPW5ldyBTKGUuYSk7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMTApLE09di5lLE0mJk9oZSh0LE0pfX1mdW5jdGlvbiBQaGUodCl7TXcodCxuZXcgazIobGJ0KE1SKF93KEV3KEN3KFR3KG5ldyBrZyxWbCksIkVMSyBGb3JjZSIpLCJGb3JjZS1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gSW1wbGVtZW50cyBtZXRob2RzIHRoYXQgZm9sbG93IHBoeXNpY2FsIGFuYWxvZ2llcyBieSBzaW11bGF0aW5nIGZvcmNlcyB0aGF0IG1vdmUgdGhlIG5vZGVzIGludG8gYSBiYWxhbmNlZCBkaXN0cmlidXRpb24uIEN1cnJlbnRseSB0aGUgb3JpZ2luYWwgRWFkZXMgbW9kZWwgYW5kIHRoZSBGcnVjaHRlcm1hbiAtIFJlaW5nb2xkIG1vZGVsIGFyZSBzdXBwb3J0ZWQuIiksbmV3IFY1KSxWbCksamkoKENFKCksaFUpLGx0KGN0KGZVLDEpLG9lLDIzNywwLFt1VV0pKSkpKSx4ZSh0LFZsLFZJLHBlKDEpKSx4ZSh0LFZsLEN5LDgwKSx4ZSh0LFZsLFZvdCw1KSx4ZSh0LFZsLEU2LEdFKSx4ZSh0LFZsLHRILHBlKDEpKSx4ZSh0LFZsLFJfLChObigpLCEwKSkseGUodCxWbCx4dix4N3QpLHhlKHQsVmwsR0ksSWUodjd0KSkseGUodCxWbCxHb3QsSWUoazd0KSkseGUodCxWbCxlSCwhMSkseGUodCxWbCxqXyxJZSh5N3QpKSx4ZSh0LFZsLFQ2LEllKHdiZSkpLHhlKHQsVmwsRDQsSWUoYmJlKSkseGUodCxWbCxVRSxJZShwYmUpKSx4ZSh0LFZsLFdFLEllKG1iZSkpLHhlKHQsVmwsSnEsSWUobTd0KSkseGUodCxWbCxxb3QsSWUobmx0KSkseGUodCxWbCxwNnQsSWUocFYpKSx4ZSh0LFZsLEhvdCxJZShlbHQpKSx4ZSh0LFZsLGI2dCxJZShFN3QpKX1mdW5jdGlvbiBGaGUodCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEg7aWYoIXUodShBaSh0LnIsZSksMjEpLDg0KS5kYygpKXtpZihoPXUocG8odC5iLGUpLDEyNCksdj1oLmksZD1oLm4sQz1sYXQodCxlKSxyPXYuYi1kLmItZC5jLHM9aC5hLmEsbz12LmMrZC5iLEg9dC53LChDPT0obDQoKSxFYil8fEM9PWlQKSYmdSh1KEFpKHQucixlKSwyMSksODQpLmdjKCk9PTEmJihzPUM9PUViP3MtMip0Lnc6cyxDPUpTKSxyPHMmJiF0LkIuSGMoKGxsKCksclUpKSlDPT1FYj8oSCs9KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpKzEpLG8rPUgpOkgrPShyLXMpLyh1KHUoQWkodC5yLGUpLDIxKSw4NCkuZ2MoKS0xKTtlbHNlIHN3aXRjaChyPHMmJihzPUM9PUViP3MtMip0Lnc6cyxDPUpTKSxDLmcpe2Nhc2UgMzpvKz0oci1zKS8yO2JyZWFrO2Nhc2UgNDpvKz1yLXM7YnJlYWs7Y2FzZSAwOm49KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpKzEpLEgrPWIuTWF0aC5tYXgoMCxuKSxvKz1IO2JyZWFrO2Nhc2UgMTpuPShyLXMpLyh1KHUoQWkodC5yLGUpLDIxKSw4NCkuZ2MoKS0xKSxIKz1iLk1hdGgubWF4KDAsbil9Zm9yKGo9dSh1KEFpKHQucixlKSwyMSksODQpLktjKCk7ai5PYigpOylNPXUoai5QYigpLDExMSksTS5lLmE9bytNLmQuYixNLmUuYj0oaz1NLmIsay5YZSgodWkoKSxkbCkpP2suSGYoKT09KHZlKCksUG4pPy1rLnJmKCkuYi1YdCh5ZShrLldlKGRsKSkpOlh0KHllKGsuV2UoZGwpKSk6ay5IZigpPT0odmUoKSxQbik/LWsucmYoKS5iOjApLG8rPU0uZC5iK00uYi5yZigpLmErTS5kLmMrSH19ZnVuY3Rpb24gTmhlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEc7aWYoIXUodShBaSh0LnIsZSksMjEpLDg0KS5kYygpKXtpZihoPXUocG8odC5iLGUpLDEyNCksdj1oLmksZD1oLm4sTT1sYXQodCxlKSxyPXYuYS1kLmQtZC5hLHM9aC5hLmIsbz12LmQrZC5kLEc9dC53LGs9dC5vLmEsKE09PShsNCgpLEViKXx8TT09aVApJiZ1KHUoQWkodC5yLGUpLDIxKSw4NCkuZ2MoKT09MSYmKHM9TT09RWI/cy0yKnQudzpzLE09SlMpLHI8cyYmIXQuQi5IYygobGwoKSxyVSkpKU09PUViPyhHKz0oci1zKS8odSh1KEFpKHQucixlKSwyMSksODQpLmdjKCkrMSksbys9Ryk6Rys9KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpLTEpO2Vsc2Ugc3dpdGNoKHI8cyYmKHM9TT09RWI/cy0yKnQudzpzLE09SlMpLE0uZyl7Y2FzZSAzOm8rPShyLXMpLzI7YnJlYWs7Y2FzZSA0Om8rPXItczticmVhaztjYXNlIDA6bj0oci1zKS8odSh1KEFpKHQucixlKSwyMSksODQpLmdjKCkrMSksRys9Yi5NYXRoLm1heCgwLG4pLG8rPUc7YnJlYWs7Y2FzZSAxOm49KHItcykvKHUodShBaSh0LnIsZSksMjEpLDg0KS5nYygpLTEpLEcrPWIuTWF0aC5tYXgoMCxuKX1mb3IoSD11KHUoQWkodC5yLGUpLDIxKSw4NCkuS2MoKTtILk9iKCk7KWo9dShILlBiKCksMTExKSxqLmUuYT0oQz1qLmIsQy5YZSgodWkoKSxkbCkpP0MuSGYoKT09KHZlKCksQm4pPy1DLnJmKCkuYS1YdCh5ZShDLldlKGRsKSkpOmsrWHQoeWUoQy5XZShkbCkpKTpDLkhmKCk9PSh2ZSgpLEJuKT8tQy5yZigpLmE6ayksai5lLmI9bytqLmQuZCxvKz1qLmQuZCtqLmIucmYoKS5iK2ouZC5hK0d9fWZ1bmN0aW9uIE41bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEs7Zm9yKHQubj1YdCh5ZShRKHQuZywoVGUoKSwkdikpKSksdC5lPVh0KHllKFEodC5nLHEyKSkpLHQuaT10LmcuYi5jLmxlbmd0aCxkPXQuaS0xLGo9MCx0Lmo9MCx0Lms9MCx0LmE9QTEoTnQoamEsZWUsMTksdC5pLDAsMSkpLHQuYj1BMShOdChsYSxlZSwzMzMsdC5pLDcsMSkpLGg9bmV3IFModC5nLmIpO2guYTxoLmMuYy5sZW5ndGg7KXtmb3Iocz11KEooaCksMjkpLHMucD1kLE09bmV3IFMocy5hKTtNLmE8TS5jLmMubGVuZ3RoOylDPXUoSihNKSwxMCksQy5wPWosKytqOy0tZH1mb3IodC5mPU50KENyLFhyLDI1LGosMTUsMSksdC5jPXQyKENyLFtlZSxYcl0sWzQ4LDI1XSwxNSxbaiwzXSwyKSx0Lm89bmV3IGhlLHQucD1uZXcgaGUsZT0wLHQuZD0wLG89bmV3IFModC5nLmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3Iocz11KEoobyksMjkpLGQ9cy5wLHI9MCxLPTAsdj1zLmEuYy5sZW5ndGgsaz0wLE09bmV3IFMocy5hKTtNLmE8TS5jLmMubGVuZ3RoOylDPXUoSihNKSwxMCksaj1DLnAsdC5mW2pdPUMuYy5wLGsrPUMuby5iK3QubixuPWowKG5ldyBhcihscihqbyhDKS5hLktjKCksbmV3IHopKSksRz1qMChuZXcgYXIobHIoRHMoQykuYS5LYygpLG5ldyB6KSkpLHQuY1tqXVswXT1HLW4sdC5jW2pdWzFdPW4sdC5jW2pdWzJdPUcscis9bixLKz1HLG4+MCYmbGUodC5wLEMpLGxlKHQubyxDKTtlLT1yLEg9ditlLGsrPWUqdC5lLGNoKHQuYSxkLHBlKEgpKSxjaCh0LmIsZCxrKSx0Lmo9Yi5NYXRoLm1heCh0LmosSCksdC5rPWIuTWF0aC5tYXgodC5rLGspLHQuZCs9ZSxlKz1LfX1mdW5jdGlvbiB2ZSgpe3ZlPVo7dmFyIHQ7Wm89bmV3IE5NKE5fLDApLFBuPW5ldyBOTShLcSwxKSxIbj1uZXcgTk0oSW90LDIpLG1yPW5ldyBOTShPb3QsMyksQm49bmV3IE5NKFBvdCw0KSxVMT0od24oKSxuZXcgczgoKHQ9dShWZihYYSksOSksbmV3IHNoKHQsdShmZih0LHQubGVuZ3RoKSw5KSwwKSkpKSxNZj1qZyhqaShQbixsdChjdChYYSwxKSx4Yyw2MSwwLFtdKSkpLG1oPWpnKGppKEhuLGx0KGN0KFhhLDEpLHhjLDYxLDAsW10pKSksS2w9amcoamkobXIsbHQoY3QoWGEsMSkseGMsNjEsMCxbXSkpKSxWaD1qZyhqaShCbixsdChjdChYYSwxKSx4Yyw2MSwwLFtdKSkpLEF1PWpnKGppKFBuLGx0KGN0KFhhLDEpLHhjLDYxLDAsW21yXSkpKSxsdT1qZyhqaShIbixsdChjdChYYSwxKSx4Yyw2MSwwLFtCbl0pKSksRGY9amcoamkoUG4sbHQoY3QoWGEsMSkseGMsNjEsMCxbQm5dKSkpLGVsPWpnKGppKFBuLGx0KGN0KFhhLDEpLHhjLDYxLDAsW0huXSkpKSxYbD1qZyhqaShtcixsdChjdChYYSwxKSx4Yyw2MSwwLFtCbl0pKSkseWg9amcoamkoSG4sbHQoY3QoWGEsMSkseGMsNjEsMCxbbXJdKSkpLG5sPWpnKGppKFBuLGx0KGN0KFhhLDEpLHhjLDYxLDAsW0huLEJuXSkpKSxTdT1qZyhqaShIbixsdChjdChYYSwxKSx4Yyw2MSwwLFttcixCbl0pKSksTHU9amcoamkoUG4sbHQoY3QoWGEsMSkseGMsNjEsMCxbbXIsQm5dKSkpLFZ1PWpnKGppKFBuLGx0KGN0KFhhLDEpLHhjLDYxLDAsW0huLG1yXSkpKSxVYz1qZyhqaShQbixsdChjdChYYSwxKSx4Yyw2MSwwLFtIbixtcixCbl0pKSl9ZnVuY3Rpb24gQmhlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdDtpZihlLmIhPTApe2ZvcihIPW5ldyBaaSxkPW51bGwsRz1udWxsLHI9cHMoYi5NYXRoLmZsb29yKGIuTWF0aC5sb2coZS5iKSpiLk1hdGguTE9HMTBFKSsxKSx2PTAsU3Q9ZWkoZSwwKTtTdC5iIT1TdC5kLmM7KWZvcihndD11KHRpKFN0KSw4NiksVnQoRykhPT1WdChRKGd0LChmYygpLHpTKSkpJiYoRz1CcihRKGd0LHpTKSksdj0wKSxHIT1udWxsP2Q9RytpWnQodisrLHIpOmQ9aVp0KHYrKyxyKSxKdChndCx6UyxkKSx0dD0ocz1laShuZXcgTHAoZ3QpLmEuZCwwKSxuZXcgRXgocykpO09SKHR0LmEpOylLPXUodGkodHQuYSksMTg4KS5jLGZzKEgsSyxILmMuYixILmMpLEp0KEsselMsZCk7Zm9yKGo9bmV3IF9yLGg9MDtoPGQubGVuZ3RoLXI7aCsrKWZvcihNdD1laShlLDApO010LmIhPU10LmQuYzspZ3Q9dSh0aShNdCksODYpLGs9UGwoQnIoUShndCwoZmMoKSx6UykpKSwwLGgrMSksbj0oaz09bnVsbD9lYyhMbyhqLmYsbnVsbCkpOktDKGouZyxrKSkhPW51bGw/dShrPT1udWxsP2VjKExvKGouZixudWxsKSk6S0Moai5nLGspLDE5KS5hKzE6MSxrbyhqLGsscGUobikpO2ZvcihNPW5ldyBwMihuZXcgQ2coaikuYSk7TS5iOylDPVp3KE0pLG89cGUodHIodC5hLEMuY2QoKSkhPW51bGw/dSh0cih0LmEsQy5jZCgpKSwxOSkuYTowKSxrbyh0LmEsQnIoQy5jZCgpKSxwZSh1KEMuZGQoKSwxOSkuYStvLmEpKSxvPXUodHIodC5iLEMuY2QoKSksMTkpLCghb3x8by5hPHUoQy5kZCgpLDE5KS5hKSYma28odC5iLEJyKEMuY2QoKSksdShDLmRkKCksMTkpKTtCaGUodCxIKX19ZnVuY3Rpb24gQjVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndDtmb3IodnIobiwiSW50ZXJhY3RpdmUgbm9kZSBsYXllcmluZyIsMSkscj1uZXcgaGUsSD1uZXcgUyhlLmEpO0guYTxILmMuYy5sZW5ndGg7KXtmb3IoTT11KEooSCksMTApLGs9TS5uLmEsdj1rK00uby5hLHY9Yi5NYXRoLm1heChrKzEsdiksZ3Q9bmV3IGRhKHIsMCkscz1udWxsO2d0LmI8Z3QuZC5nYygpOylpZihLPShabihndC5iPGd0LmQuZ2MoKSksdShndC5kLlhiKGd0LmM9Z3QuYisrKSw1NjkpKSxLLmM+PXYpe1puKGd0LmI+MCksZ3QuYS5YYihndC5jPS0tZ3QuYik7YnJlYWt9ZWxzZSBLLmE+ayYmKHM/KExzKHMuYixLLmIpLHMuYT1iLk1hdGgubWF4KHMuYSxLLmEpLENsKGd0KSk6KGxlKEsuYixNKSxLLmM9Yi5NYXRoLm1pbihLLmMsayksSy5hPWIuTWF0aC5tYXgoSy5hLHYpLHM9SykpO3N8fChzPW5ldyBrcXQscy5jPWsscy5hPXYsem0oZ3QscyksbGUocy5iLE0pKX1mb3IoZD1lLmIsQz0wLHR0PW5ldyBTKHIpO3R0LmE8dHQuYy5jLmxlbmd0aDspZm9yKEs9dShKKHR0KSw1NjkpLG89bmV3IFNoKGUpLG8ucD1DKyssZC5jW2QuYy5sZW5ndGhdPW8sRz1uZXcgUyhLLmIpO0cuYTxHLmMuYy5sZW5ndGg7KU09dShKKEcpLDEwKSxFbyhNLG8pLE0ucD0wO2ZvcihqPW5ldyBTKGUuYSk7ai5hPGouYy5jLmxlbmd0aDspTT11KEooaiksMTApLE0ucD09MCYmbXVlKHQsTSxlKTtmb3IoaD1uZXcgZGEoZCwwKTtoLmI8aC5kLmdjKCk7KShabihoLmI8aC5kLmdjKCkpLHUoaC5kLlhiKGguYz1oLmIrKyksMjkpKS5hLmMubGVuZ3RoPT0wJiZDbChoKTtlLmEuYz1OdChRbixEZSwxLDAsNSwxKSxvcihuKX1mdW5jdGlvbiBSNW4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqO2lmKGUuZS5jLmxlbmd0aCE9MCYmbi5lLmMubGVuZ3RoIT0wKXtpZihyPXUoTmUoZS5lLDApLDE3KS5jLmksaD11KE5lKG4uZSwwKSwxNykuYy5pLHI9PWgpcmV0dXJuIHB1KHUoUSh1KE5lKGUuZSwwKSwxNyksKGFlKCksVGMpKSwxOSkuYSx1KFEodShOZShuLmUsMCksMTcpLFRjKSwxOSkuYSk7Zm9yKEM9dC5hLE09MCxqPUMubGVuZ3RoO008ajsrK00pe2lmKGs9Q1tNXSxrPT1yKXJldHVybiAxO2lmKGs9PWgpcmV0dXJuLTF9fXJldHVybiBlLmcuYy5sZW5ndGghPTAmJm4uZy5jLmxlbmd0aCE9MD8obz11KFEoZSwoYWUoKSxXbHQpKSwxMCksdj11KFEobixXbHQpLDEwKSxzPTAsZD0wLFVzKHUoTmUoZS5nLDApLDE3KSxUYykmJihzPXUoUSh1KE5lKGUuZywwKSwxNyksVGMpLDE5KS5hKSxVcyh1KE5lKG4uZywwKSwxNyksVGMpJiYoZD11KFEodShOZShlLmcsMCksMTcpLFRjKSwxOSkuYSksbyYmbz09dj9qZShSZShRKHUoTmUoZS5nLDApLDE3KSxxMSkpKSYmIWplKFJlKFEodShOZShuLmcsMCksMTcpLHExKSkpPzE6IWplKFJlKFEodShOZShlLmcsMCksMTcpLHExKSkpJiZqZShSZShRKHUoTmUobi5nLDApLDE3KSxxMSkpKXx8czxkPy0xOnM+ZD8xOjA6KHQuYiYmKHQuYi5fYihvKSYmKHM9dSh0LmIueGMobyksMTkpLmEpLHQuYi5fYih2KSYmKGQ9dSh0LmIueGModiksMTkpLmEpKSxzPGQ/LTE6cz5kPzE6MCkpOmUuZS5jLmxlbmd0aCE9MCYmbi5nLmMubGVuZ3RoIT0wPzE6LTF9ZnVuY3Rpb24gajVuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZTtmb3IodnIoZSxTMWUsMSksSz1uZXcgaGUsdWU9bmV3IGhlLGs9bmV3IFModC5iKTtrLmE8ay5jLmMubGVuZ3RoOylmb3Iodj11KEooayksMjkpLGd0PS0xLEc9bEQodi5hKSxNPUcsaj0wLEg9TS5sZW5ndGg7ajxIOysrailpZihDPU1bal0sKytndCwhIShDLms9PShWbigpLE9zKSYmRzModShRKEMsKFRlKCksY3MpKSw5OCkpKSl7Zm9yKGp4KHUoUShDLChUZSgpLGNzKSksOTgpKXx8SXduKEMpLEp0KEMsKGFlKCksUHYpLEMpLEsuYz1OdChRbixEZSwxLDAsNSwxKSx1ZS5jPU50KFFuLERlLDEsMCw1LDEpLG49bmV3IGhlLFJ0PW5ldyBaaSx4aXQoUnQsR2coQywodmUoKSxQbikpKSxYaGUodCxSdCxLLHVlLG4pLGQ9Z3QsX2U9QyxvPW5ldyBTKEspO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDEwKSxseShyLGQsdiksKytndCxKdChyLFB2LEMpLGg9dShOZShyLmosMCksMTEpLHR0PXUoUShoLF9pKSwxMSksamUoUmUoUSh0dCxabHQpKSl8fHUoUShyLFI2KSwxNSkuRmMoX2UpO2ZvcihBaChSdCksU3Q9R2coQyxtcikuS2MoKTtTdC5PYigpOylNdD11KFN0LlBiKCksMTEpLGZzKFJ0LE10LFJ0LmEsUnQuYS5hKTtmb3IoWGhlKHQsUnQsdWUsbnVsbCxuKSxLdD1DLHM9bmV3IFModWUpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDEwKSxseShyLCsrZ3QsdiksSnQocixQdixDKSxoPXUoTmUoci5qLDApLDExKSx0dD11KFEoaCxfaSksMTEpLGplKFJlKFEodHQsWmx0KSkpfHx1KFEoS3QsUjYpLDE1KS5GYyhyKTtuLmMubGVuZ3RoPT0wfHxKdChDLHRDdCxuKX1vcihlKX1mdW5jdGlvbiBSaGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpLGpzO2ZvcihNPXUoUSh0LChZcCgpLEk2KSksMzMpLGd0PXdpLE10PXdpLEs9U2EsdHQ9U2EsUnQ9bmV3IFModC5lKTtSdC5hPFJ0LmMuYy5sZW5ndGg7KVN0PXUoSihSdCksMTQ0KSxRZT1TdC5kLFJuPVN0LmUsZ3Q9Yi5NYXRoLm1pbihndCxRZS5hLVJuLmEvMiksTXQ9Yi5NYXRoLm1pbihNdCxRZS5iLVJuLmIvMiksSz1iLk1hdGgubWF4KEssUWUuYStSbi5hLzIpLHR0PWIuTWF0aC5tYXgodHQsUWUuYitSbi5iLzIpO2ZvcihXZT11KHFlKE0sKEpmKCksdmJlKSksMTE2KSxfZT1uZXcgJGUoV2UuYi1ndCxXZS5kLU10KSxkPW5ldyBTKHQuZSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTQ0KSx1ZT1RKGgsSTYpLF90KHVlLDIzOSkmJihIPXUodWUsMzMpLEt0PUxpKGguZCxfZSkseDEoSCxLdC5hLUguZy8yLEt0LmItSC5mLzIpKTtmb3Iocj1uZXcgUyh0LmMpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDI4Miksaz11KFEobixJNiksNzkpLEM9eDQoaywhMCwhMCksem49KHBpPWlhKG5jKG4uZC5kKSxuLmMuZCksbUUocGksbi5jLmUuYSxuLmMuZS5iKSxMaShwaSxuLmMuZCkpLHZqKEMsem4uYSx6bi5iKSxlPShqcz1pYShuYyhuLmMuZCksbi5kLmQpLG1FKGpzLG4uZC5lLmEsbi5kLmUuYiksTGkoanMsbi5kLmQpKSx3aihDLGUuYSxlLmIpO2ZvcihvPW5ldyBTKHQuZCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksNDQ3KSxqPXUoUShzLEk2KSwxMzcpLEc9TGkocy5kLF9lKSx4MShqLEcuYSxHLmIpO2hyPUstZ3QrKFdlLmIrV2UuYyksdj10dC1NdCsoV2UuZCtXZS5hKSx3dihNLGhyLHYsITEsITApfWZ1bmN0aW9uICQ1bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKG49bnVsbCx2PW51bGwscz11KFEodC5iLChUZSgpLGlodCkpLDM3Nikscz09KHBEKCksQk8pJiYobj1uZXcgaGUsdj1uZXcgaGUpLGQ9bmV3IFModC5kKTtkLmE8ZC5jLmMubGVuZ3RoOylpZihoPXUoSihkKSwxMDEpLG89aC5pLCEhbylzd2l0Y2goaC5lLmcpe2Nhc2UgMDplPXUoajkobmV3IE14KGguYikpLDYxKSxzPT1CTyYmZT09KHZlKCksUG4pP24uY1tuLmMubGVuZ3RoXT1oOnM9PUJPJiZlPT0odmUoKSxtcik/di5jW3YuYy5sZW5ndGhdPWg6QzFuKGgsZSk7YnJlYWs7Y2FzZSAxOms9aC5hLmQuaixDPWguYy5kLmosaz09KHZlKCksUG4pP09nKGgsUG4sKEkxKCksZjcpLGguYSk6Qz09UG4/T2coaCxQbiwoSTEoKSxkNyksaC5jKTprPT1tcj9PZyhoLG1yLChJMSgpLGQ3KSxoLmEpOkM9PW1yJiZPZyhoLG1yLChJMSgpLGY3KSxoLmMpO2JyZWFrO2Nhc2UgMjpjYXNlIDM6cj1oLmIsTnUociwodmUoKSxQbikpP051KHIsbXIpP051KHIsQm4pP051KHIsSG4pfHxPZyhoLFBuLChJMSgpLGQ3KSxoLmMpOk9nKGgsUG4sKEkxKCksZjcpLGguYSk6T2coaCxQbiwoSTEoKSxPNiksbnVsbCk6T2coaCxtciwoSTEoKSxPNiksbnVsbCk7YnJlYWs7Y2FzZSA0Ok09aC5hLmQuaixqPWguYS5kLmosTT09KHZlKCksUG4pfHxqPT1Qbj9PZyhoLG1yLChJMSgpLE82KSxudWxsKTpPZyhoLFBuLChJMSgpLE82KSxudWxsKX1uJiYobi5jLmxlbmd0aD09MHx8RGxlKG4sKHZlKCksUG4pKSx2LmMubGVuZ3RoPT0wfHxEbGUodiwodmUoKSxtcikpKX1mdW5jdGlvbiB6NW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2ZvcihyPXUoUSh0LChhZSgpLF9pKSksMzMpLEc9dShRKHQsKFRlKCksb0cpKSwxOSkuYSxvPXUoUSh0LGhHKSwxOSkuYSx3byhyLG9HLHBlKEcpKSx3byhyLGhHLHBlKG8pKSxrdShyLHQubi5hK2UuYSksRXUocix0Lm4uYitlLmIpLCh1KHFlKHIsJDIpLDE3NCkuZ2MoKSE9MHx8dC5lfHxWdChRKE5hKHQpLGdHKSk9PT1WdCgodV8oKSxJUykpJiZfVXQoKGN5KCksKHQucT90LnE6KHduKCksd24oKSx1MCkpLl9iKEJ2KT9qPXUoUSh0LEJ2KSwxOTcpOmo9dShRKE5hKHQpLEFTKSwxOTcpLGopKSkmJih0dihyLHQuby5hKSxKdyhyLHQuby5iKSksTT1uZXcgUyh0LmopO00uYTxNLmMuYy5sZW5ndGg7KWs9dShKKE0pLDExKSxLPVEoayxfaSksX3QoSywxODYpJiYocz11KEssMTE4KSx4MShzLGsubi5hLGsubi5iKSx3byhzLEM3LGsuaikpO2ZvcihIPXUoUSh0LE52KSwxNzQpLmdjKCkhPTAsdj1uZXcgUyh0LmIpO3YuYTx2LmMuYy5sZW5ndGg7KWg9dShKKHYpLDcwKSwoSHx8dShRKGgsTnYpLDE3NCkuZ2MoKSE9MCkmJihuPXUoUShoLF9pKSwxMzcpLGJqKG4saC5vLmEsaC5vLmIpLHgxKG4saC5uLmEsaC5uLmIpKTtpZighUzkodShRKHQsR3kpLDIxKSkpZm9yKEM9bmV3IFModC5qKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTEpLGQ9bmV3IFMoay5mKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSw3MCksbj11KFEoaCxfaSksMTM3KSx0dihuLGguby5hKSxKdyhuLGguby5iKSx4MShuLGgubi5hLGgubi5iKX1mdW5jdGlvbiBxNW4odCl7dmFyIGUsbixyLHMsbztzd2l0Y2goc0QodCxYZGUpLCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaSsoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLmkpe2Nhc2UgMDp0aHJvdyBpdChuZXcgRm4oIlRoZSBlZGdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc291cmNlIG9yIHRhcmdldC4iKSk7Y2FzZSAxOnJldHVybighdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaT09MD9lcyhEbyh1KEF0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKSk6ZXMoRG8odShBdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSkpfWlmKCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYikuaT09MSYmKCF0LmMmJih0LmM9bmV3IENuKGJyLHQsNSw4KSksdC5jKS5pPT0xKXtpZihzPURvKHUoQXQoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwwKSw4MikpLG89RG8odShBdCgoIXQuYyYmKHQuYz1uZXcgQ24oYnIsdCw1LDgpKSx0LmMpLDApLDgyKSksZXMocyk9PWVzKG8pKXJldHVybiBlcyhzKTtpZihzPT1lcyhvKSlyZXR1cm4gcztpZihvPT1lcyhzKSlyZXR1cm4gb31mb3Iocj16cChEMShsdChjdChqMSwxKSxEZSwyMCwwLFsoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyldKSkpLGU9RG8odShNcihyKSw4MikpO3pyKHIpOylpZihuPURvKHUoTXIociksODIpKSxuIT1lJiYhZXkobixlKSl7aWYoZXMobik9PWVzKGUpKWU9ZXMobik7ZWxzZSBpZihlPVMybihlLG4pLCFlKXJldHVybiBudWxsfXJldHVybiBlfWZ1bmN0aW9uIEg1bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQ7Zm9yKHZyKG4sIlBvbHlsaW5lIGVkZ2Ugcm91dGluZyIsMSksdHQ9WHQoeWUoUShlLChUZSgpLEtDdCkpKSksSD1YdCh5ZShRKGUsdDUpKSkscz1YdCh5ZShRKGUsSjQpKSkscj1iLk1hdGgubWluKDEscy9IKSxTdD0wLHY9MCxlLmIuYy5sZW5ndGghPTAmJihSdD1SY2UodShOZShlLmIsMCksMjkpKSxTdD0uNCpyKlJ0KSxkPW5ldyBkYShlLmIsMCk7ZC5iPGQuZC5nYygpOyl7Zm9yKGg9KFpuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwyOSkpLG89ZmooaCxqTyksbyYmU3Q+MCYmKFN0LT1IKSxteHQoaCxTdCksQz0wLGo9bmV3IFMoaC5hKTtqLmE8ai5jLmMubGVuZ3RoOyl7Zm9yKE09dShKKGopLDEwKSxrPTAsSz1uZXcgYXIobHIoRHMoTSkuYS5LYygpLG5ldyB6KSk7enIoSyk7KUc9dShNcihLKSwxNyksZ3Q9XzEoRy5jKS5iLE10PV8xKEcuZCkuYixoPT1HLmQuaS5jJiYhR2EoRykmJihkYm4oRyxTdCwuNCpyKmIuTWF0aC5hYnMoZ3QtTXQpKSxHLmMuaj09KHZlKCksQm4pJiYoZ3Q9MCxNdD0wKSksaz1iLk1hdGgubWF4KGssYi5NYXRoLmFicyhNdC1ndCkpO3N3aXRjaChNLmsuZyl7Y2FzZSAwOmNhc2UgNDpjYXNlIDE6Y2FzZSAzOmNhc2UgNTp1NG4odCxNLFN0LHR0KX1DPWIuTWF0aC5tYXgoQyxrKX1kLmI8ZC5kLmdjKCkmJihSdD1SY2UoKFpuKGQuYjxkLmQuZ2MoKSksdShkLmQuWGIoZC5jPWQuYisrKSwyOSkpKSxDPWIuTWF0aC5tYXgoQyxSdCksWm4oZC5iPjApLGQuYS5YYihkLmM9LS1kLmIpKSx2PS40KnIqQywhbyYmZC5iPGQuZC5nYygpJiYodis9SCksU3QrPWguYy5hK3Z9dC5hLmEuJGIoKSxlLmYuYT1TdCxvcihuKX1mdW5jdGlvbiBWNW4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10O2ZvcihDPW5ldyBfcix2PW5ldyBVdyxyPW5ldyBTKHQuYS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWlmKGU9dShKKHIpLDU3KSxrPXQ0KGUpLGspYXUoQy5mLGssZSk7ZWxzZSBpZihNdD1YeChlKSxNdClmb3Iobz1uZXcgUyhNdC5rKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxNyksbG4odixzLGUpO2ZvcihuPW5ldyBTKHQuYS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWlmKGU9dShKKG4pLDU3KSxrPXQ0KGUpLGspe2ZvcihkPW5ldyBhcihscihEcyhrKS5hLktjKCksbmV3IHopKTt6cihkKTspaWYoaD11KE1yKGQpLDE3KSwhR2EoaCkmJihHPWguYyxndD1oLmQsISgodmUoKSxBdSkuSGMoaC5jLmopJiZBdS5IYyhoLmQuaikpKSl7aWYoSz11KHRyKEMsaC5kLmkpLDU3KSx5ZihsZih1ZihoZihjZihuZXcgQ2gsMCksMTAwKSx0LmNbZS5hLmRdKSx0LmNbSy5hLmRdKSksRy5qPT1CbiYmVkt0KChqdSgpLEcpKSl7Zm9yKGo9dShBaSh2LGgpLDIxKS5LYygpO2ouT2IoKTspaWYoTT11KGouUGIoKSw1NyksTS5kLmM8ZS5kLmMpe2lmKEg9dC5jW00uYS5kXSx0dD10LmNbZS5hLmRdLEg9PXR0KWNvbnRpbnVlO3lmKGxmKHVmKGhmKGNmKG5ldyBDaCwxKSwxMDApLEgpLHR0KSl9fWlmKGd0Lmo9PUhuJiZIS3QoKGp1KCksZ3QpKSl7Zm9yKGo9dShBaSh2LGgpLDIxKS5LYygpO2ouT2IoKTspaWYoTT11KGouUGIoKSw1NyksTS5kLmM+ZS5kLmMpe2lmKEg9dC5jW2UuYS5kXSx0dD10LmNbTS5hLmRdLEg9PXR0KWNvbnRpbnVlO3lmKGxmKHVmKGhmKGNmKG5ldyBDaCwxKSwxMDApLEgpLHR0KSl9fX19fWZ1bmN0aW9uIE14dCh0KXtGYXQoKTt2YXIgZSxuLHIscyxvLGgsZCx2O2lmKHQ9PW51bGwpcmV0dXJuIG51bGw7aWYocz1oZCh0LEN1KDM3KSksczwwKXJldHVybiB0O2Zvcih2PW5ldyBPbCh0LnN1YnN0cigwLHMpKSxlPU50KEd1LE40LDI1LDQsMTUsMSksZD0wLHI9MCxoPXQubGVuZ3RoO3M8aDtzKyspaWYoUnIocyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMpPT0zNyYmdC5sZW5ndGg+cysyJiZTaXQoKFJyKHMrMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMrMSkpLHRMdCxlTHQpJiZTaXQoKFJyKHMrMix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHMrMikpLHRMdCxlTHQpKWlmKG49ZmVuKChScihzKzEsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChzKzEpKSwoUnIocysyLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQocysyKSkpLHMrPTIscj4wPyhuJjE5Mik9PTEyOD9lW2QrK109bjw8MjQ+PjI0OnI9MDpuPj0xMjgmJigobiYyMjQpPT0xOTI/KGVbZCsrXT1uPDwyND4+MjQscj0yKToobiYyNDApPT0yMjQ/KGVbZCsrXT1uPDwyND4+MjQscj0zKToobiYyNDgpPT0yNDAmJihlW2QrK109bjw8MjQ+PjI0LHI9NCkpLHI+MCl7aWYoZD09cil7c3dpdGNoKGQpe2Nhc2UgMjp7cXAodiwoKGVbMF0mMzEpPDw2fGVbMV0mNjMpJnlzKTticmVha31jYXNlIDM6e3FwKHYsKChlWzBdJjE1KTw8MTJ8KGVbMV0mNjMpPDw2fGVbMl0mNjMpJnlzKTticmVha319ZD0wLHI9MH19ZWxzZXtmb3Iobz0wO288ZDsrK28pcXAodixlW29dJnlzKTtkPTAsdi5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pfWVsc2V7Zm9yKG89MDtvPGQ7KytvKXFwKHYsZVtvXSZ5cyk7ZD0wLHFwKHYsKFJyKHMsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChzKSkpfXJldHVybiB2LmF9ZnVuY3Rpb24gamhlKHQsZSxuLHIscyl7dmFyIG8saCxkO2lmKGFlZSh0LGUpLGg9ZVswXSxvPXdhKG4uYywwKSxkPS0xLE55dChuKSlpZihyPjApe2lmKGgrcj50Lmxlbmd0aClyZXR1cm4hMTtkPWdxKHQuc3Vic3RyKDAsaCtyKSxlKX1lbHNlIGQ9Z3EodCxlKTtzd2l0Y2gobyl7Y2FzZSA3MTpyZXR1cm4gZD13NCh0LGgsbHQoY3QoQWUsMSksZWUsMiw2LFttZmUseWZlXSksZSkscy5lPWQsITA7Y2FzZSA3NzpyZXR1cm4gX3ZuKHQsZSxzLGQsaCk7Y2FzZSA3NjpyZXR1cm4gU3ZuKHQsZSxzLGQsaCk7Y2FzZSA2OTpyZXR1cm4gdnBuKHQsZSxoLHMpO2Nhc2UgOTk6cmV0dXJuIG1wbih0LGUsaCxzKTtjYXNlIDk3OnJldHVybiBkPXc0KHQsaCxsdChjdChBZSwxKSxlZSwyLDYsWyJBTSIsIlBNIl0pLGUpLHMuYj1kLCEwO2Nhc2UgMTIxOnJldHVybiBBdm4odCxlLGgsZCxuLHMpO2Nhc2UgMTAwOnJldHVybiBkPD0wPyExOihzLmM9ZCwhMCk7Y2FzZSA4MzpyZXR1cm4gZDwwPyExOklobihkLGgsZVswXSxzKTtjYXNlIDEwNDpkPT0xMiYmKGQ9MCk7Y2FzZSA3NTpjYXNlIDcyOnJldHVybiBkPDA/ITE6KHMuZj1kLHMuZz0hMSwhMCk7Y2FzZSAxMDc6cmV0dXJuIGQ8MD8hMToocy5mPWQscy5nPSEwLCEwKTtjYXNlIDEwOTpyZXR1cm4gZDwwPyExOihzLmo9ZCwhMCk7Y2FzZSAxMTU6cmV0dXJuIGQ8MD8hMToocy5uPWQsITApO2Nhc2UgOTA6aWYoaDx0Lmxlbmd0aCYmKFJyKGgsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChoKT09OTApKXJldHVybisrZVswXSxzLm89MCwhMDtjYXNlIDEyMjpjYXNlIDExODpyZXR1cm4gSDBuKHQsaCxlLHMpO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEc1bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWU7aWYoaj11KHUoQWkodC5yLGUpLDIxKSw4NCksZT09KHZlKCksSG4pfHxlPT1Cbil7RGhlKHQsZSk7cmV0dXJufWZvcihvPWU9PVBuPyhydigpLGxPKToocnYoKSxoTyksUnQ9ZT09UG4/KHl1KCksbjEpOih5dSgpLEVmKSxuPXUocG8odC5iLGUpLDEyNCkscj1uLmkscz1yLmMrczQobHQoY3QoYWEsMSksdm8sMjUsMTUsW24ubi5iLHQuQy5iLHQua10pKSxndD1yLmMrci5iLXM0KGx0KGN0KGFhLDEpLHZvLDI1LDE1LFtuLm4uYyx0LkMuYyx0LmtdKSksaD1jYnQoX3d0KG8pLHQudCksTXQ9ZT09UG4/Q3M6YXMsTT1qLktjKCk7TS5PYigpOylrPXUoTS5QYigpLDExMSksISghay5jfHxrLmMuZC5jLmxlbmd0aDw9MCkmJih0dD1rLmIucmYoKSxLPWsuZSxIPWsuYyxHPUguaSxHLmI9KHY9SC5uLEguZS5hK3YuYit2LmMpLEcuYT0oZD1ILm4sSC5lLmIrZC5kK2QuYSksc0QoUnQsbjZ0KSxILmY9UnQsV2YoSCwoUXUoKSxrZikpLEcuYz1LLmEtKEcuYi10dC5hKS8yLEt0PWIuTWF0aC5taW4ocyxLLmEpLHVlPWIuTWF0aC5tYXgoZ3QsSy5hK3R0LmEpLEcuYzxLdD9HLmM9S3Q6Ry5jK0cuYj51ZSYmKEcuYz11ZS1HLmIpLGxlKGguZCxuZXcgSG50KEcsYTN0KGgsRykpKSxNdD1lPT1Qbj9iLk1hdGgubWF4KE10LEsuYitrLmIucmYoKS5iKTpiLk1hdGgubWluKE10LEsuYikpO2ZvcihNdCs9ZT09UG4/dC50Oi10LnQsU3Q9azN0KChoLmU9TXQsaCkpLFN0PjAmJih1KHBvKHQuYixlKSwxMjQpLmEuYj1TdCksQz1qLktjKCk7Qy5PYigpOylrPXUoQy5QYigpLDExMSksISghay5jfHxrLmMuZC5jLmxlbmd0aDw9MCkmJihHPWsuYy5pLEcuYy09ay5lLmEsRy5kLT1rLmUuYil9ZnVuY3Rpb24gVTVuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixIO2ZvcihlPW5ldyBfcix2PW5ldyBucih0KTt2LmUhPXYuaS5nYygpOyl7Zm9yKGQ9dShkcih2KSwzMyksbj1uZXcgSHMsa2koSnV0LGQsbiksSD1uZXcgYm0scz11KEJsKG5ldyBUbihudWxsLG5ldyBqdyhuZXcgYXIobHIod0koZCkuYS5LYygpLG5ldyB6KSkpKSxMS3QoSCxjMihuZXcga2UsbmV3IGNlLG5ldyBYbixsdChjdChmbCwxKSxvZSwxMzIsMCxbKE8xKCksVWwpXSkpKSksODMpLFplZShuLHUocy54YygoTm4oKSwhMCkpLDE0KSxuZXcgRWspLHI9dShCbChSaSh1KHMueGMoITEpLDE1KS5MYygpLG5ldyBFMyksYzIobmV3IGtlLG5ldyBjZSxuZXcgWG4sbHQoY3QoZmwsMSksb2UsMTMyLDAsW1VsXSkpKSwxNSksaD1yLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDc5KSxqPVJhZShvKSxqJiYoaz11KGVjKExvKGUuZixqKSksMjEpLGt8fChrPWl1ZShqKSxhdShlLmYsaixrKSksVWEobixrKSk7Zm9yKHM9dShCbChuZXcgVG4obnVsbCxuZXcgancobmV3IGFyKGxyKEswKGQpLmEuS2MoKSxuZXcgeikpKSksTEt0KEgsYzIobmV3IGtlLG5ldyBjZSxuZXcgWG4sbHQoY3QoZmwsMSksb2UsMTMyLDAsW1VsXSkpKSksODMpLFplZShuLHUocy54YyghMCksMTQpLG5ldyBJbCkscj11KEJsKFJpKHUocy54YyghMSksMTUpLkxjKCksbmV3IEwwKSxjMihuZXcga2UsbmV3IGNlLG5ldyBYbixsdChjdChmbCwxKSxvZSwxMzIsMCxbVWxdKSkpLDE1KSxNPXIuS2MoKTtNLk9iKCk7KUM9dShNLlBiKCksNzkpLGo9amFlKEMpLGomJihrPXUoZWMoTG8oZS5mLGopKSwyMSksa3x8KGs9aXVlKGopLGF1KGUuZixqLGspKSxVYShuLGspKX19ZnVuY3Rpb24gVzVuKHQsZSl7TGF0KCk7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSztpZih2PXljKHQsMCk8MCx2JiYodD16OCh0KSkseWModCwwKT09MClzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiIwIjtjYXNlIDE6cmV0dXJuICRFO2Nhc2UgMjpyZXR1cm4iMC4wMCI7Y2FzZSAzOnJldHVybiIwLjAwMCI7Y2FzZSA0OnJldHVybiIwLjAwMDAiO2Nhc2UgNTpyZXR1cm4iMC4wMDAwMCI7Y2FzZSA2OnJldHVybiIwLjAwMDAwMCI7ZGVmYXVsdDpyZXR1cm4gSD1uZXcgTXAsZTwwP0guYSs9IjBFKyI6SC5hKz0iMEUiLEguYSs9ZT09U2E/IjIxNDc0ODM2NDgiOiIiKy1lLEguYX1DPTE4LE09TnQoeGgseWQsMjUsQysxLDE1LDEpLG49QyxLPXQ7ZG8gaz1LLEs9YUkoSywxMCksTVstLW5dPUFyKFBhKDQ4LEpwKGssX2EoSywxMCkpKSkmeXM7d2hpbGUoeWMoSywwKSE9MCk7aWYocz1KcChKcChKcChDLG4pLGUpLDEpLGU9PTApcmV0dXJuIHYmJihNWy0tbl09NDUpLE1oKE0sbixDLW4pO2lmKGU+MCYmeWMocywtNik+PTApe2lmKHljKHMsMCk+PTApe2ZvcihvPW4rQXIocyksZD1DLTE7ZD49bztkLS0pTVtkKzFdPU1bZF07cmV0dXJuIE1bKytvXT00Nix2JiYoTVstLW5dPTQ1KSxNaChNLG4sQy1uKzEpfWZvcihoPTI7Q2V0KGgsUGEoejgocyksMSkpO2grKylNWy0tbl09NDg7cmV0dXJuIE1bLS1uXT00NixNWy0tbl09NDgsdiYmKE1bLS1uXT00NSksTWgoTSxuLEMtbil9cmV0dXJuIEc9bisxLHI9QyxqPW5ldyBJbSx2JiYoai5hKz0iLSIpLHItRz49MT8ocXAoaixNW25dKSxqLmErPSIuIixqLmErPU1oKE0sbisxLEMtbi0xKSk6ai5hKz1NaChNLG4sQy1uKSxqLmErPSJFIix5YyhzLDApPjAmJihqLmErPSIrIiksai5hKz0iIitfOShzKSxqLmF9ZnVuY3Rpb24gWTVuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixIO2lmKHQuZS5hLiRiKCksdC5mLmEuJGIoKSx0LmMuYz1OdChRbixEZSwxLDAsNSwxKSx0LmkuYz1OdChRbixEZSwxLDAsNSwxKSx0LmcuYS4kYigpLGUpZm9yKGg9bmV3IFMoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOylmb3Iobz11KEooaCksMTApLE09R2cobywodmUoKSxIbikpLktjKCk7TS5PYigpOylmb3IoQz11KE0uUGIoKSwxMSksRnModC5lLEMpLHM9bmV3IFMoQy5nKTtzLmE8cy5jLmMubGVuZ3RoOylyPXUoSihzKSwxNyksIUdhKHIpJiYobGUodC5jLHIpLGxzZSh0LHIpLGQ9ci5jLmkuaywoZD09KFZuKCksT3MpfHxkPT1IY3x8ZD09a3N8fGQ9PXoxKSYmbGUodC5qLHIpLEg9ci5kLGo9SC5pLmMsaj09bj9Gcyh0LmYsSCk6aj09ZT9Gcyh0LmUsSCk6bXUodC5jLHIpKTtpZihuKWZvcihoPW5ldyBTKG4uYSk7aC5hPGguYy5jLmxlbmd0aDspe2ZvcihvPXUoSihoKSwxMCksaz1uZXcgUyhvLmopO2suYTxrLmMuYy5sZW5ndGg7KWZvcih2PXUoSihrKSwxMSkscz1uZXcgUyh2LmcpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDE3KSxHYShyKSYmRnModC5nLHIpO2ZvcihNPUdnKG8sKHZlKCksQm4pKS5LYygpO00uT2IoKTspZm9yKEM9dShNLlBiKCksMTEpLEZzKHQuZixDKSxzPW5ldyBTKEMuZyk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLCFHYShyKSYmKGxlKHQuYyxyKSxsc2UodCxyKSxkPXIuYy5pLmssKGQ9PShWbigpLE9zKXx8ZD09SGN8fGQ9PWtzfHxkPT16MSkmJmxlKHQuaixyKSxIPXIuZCxqPUguaS5jLGo9PW4/RnModC5mLEgpOmo9PWU/RnModC5lLEgpOm11KHQuYyxyKSl9fWZ1bmN0aW9uIHd2KHQsZSxuLHIscyl7dmFyIG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZTtpZih0dD1uZXcgJGUodC5nLHQuZiksSz1RNHQodCksSy5hPWIuTWF0aC5tYXgoSy5hLGUpLEsuYj1iLk1hdGgubWF4KEsuYixuKSx1ZT1LLmEvdHQuYSxDPUsuYi90dC5iLFJ0PUsuYS10dC5hLHY9Sy5iLXR0LmIscilmb3IoaD1lcyh0KT91KHFlKGVzKHQpLCh1aSgpLHF2KSksMTAzKTp1KHFlKHQsKHVpKCkscXYpKSwxMDMpLGQ9VnQocWUodCwodWkoKSxLUykpKT09PVZ0KCh1YSgpLEdjKSksTXQ9bmV3IG5yKCghdC5jJiYodC5jPW5ldyBmZShnbCx0LDksOSkpLHQuYykpO010LmUhPU10LmkuZ2MoKTspc3dpdGNoKGd0PXUoZHIoTXQpLDExOCksU3Q9dShxZShndCx1NSksNjEpLFN0PT0odmUoKSxabykmJihTdD11eHQoZ3QsaCksd28oZ3QsdTUsU3QpKSxTdC5nKXtjYXNlIDE6ZHx8a3UoZ3QsZ3QuaSp1ZSk7YnJlYWs7Y2FzZSAyOmt1KGd0LGd0LmkrUnQpLGR8fEV1KGd0LGd0LmoqQyk7YnJlYWs7Y2FzZSAzOmR8fGt1KGd0LGd0LmkqdWUpLEV1KGd0LGd0Lmordik7YnJlYWs7Y2FzZSA0OmR8fEV1KGd0LGd0LmoqQyl9aWYoYmoodCxLLmEsSy5iKSxzKWZvcihqPW5ldyBucigoIXQubiYmKHQubj1uZXcgZmUocW8sdCwxLDcpKSx0Lm4pKTtqLmUhPWouaS5nYygpOylNPXUoZHIoaiksMTM3KSxIPU0uaStNLmcvMixHPU0uaitNLmYvMixLdD1IL3R0LmEsaz1HL3R0LmIsS3Qraz49MSYmKEt0LWs+MCYmRz49MD8oa3UoTSxNLmkrUnQpLEV1KE0sTS5qK3YqaykpOkt0LWs8MCYmSD49MCYmKGt1KE0sTS5pK1J0Kkt0KSxFdShNLE0uait2KSkpO3JldHVybiB3byh0LCh1aSgpLEcyKSwoQWwoKSxvPXUoVmYockEpLDkpLG5ldyBzaChvLHUoZmYobyxvLmxlbmd0aCksOSksMCkpKSxuZXcgJGUodWUsQyl9ZnVuY3Rpb24gJGhlKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixILEc7aWYoSD1lcyhEbyh1KEF0KCghdC5iJiYodC5iPW5ldyBDbihicix0LDQsNykpLHQuYiksMCksODIpKSksRz1lcyhEbyh1KEF0KCghdC5jJiYodC5jPW5ldyBDbihicix0LDUsOCkpLHQuYyksMCksODIpKSksTT1IPT1HLGQ9bmV3IENhLGU9dShxZSh0LChTeigpLF9BdCkpLDc0KSxlJiZlLmI+PTIpe2lmKCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSkuaT09MCluPShTdygpLHM9bmV3IGFkLHMpLERyKCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSksbik7ZWxzZSBpZigoIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpLmk+MSlmb3Ioaj1uZXcgTngoKCF0LmEmJih0LmE9bmV3IGZlKEppLHQsNiw2KSksdC5hKSk7ai5lIT1qLmkuZ2MoKTspZl8oaik7Q0koZSx1KEF0KCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSksMCksMjAyKSl9aWYoTSlmb3Iocj1uZXcgbnIoKCF0LmEmJih0LmE9bmV3IGZlKEppLHQsNiw2KSksdC5hKSk7ci5lIT1yLmkuZ2MoKTspZm9yKG49dShkcihyKSwyMDIpLGs9bmV3IG5yKCghbi5hJiYobi5hPW5ldyBBcyhHaCxuLDUpKSxuLmEpKTtrLmUhPWsuaS5nYygpOyl2PXUoZHIoayksNDY5KSxkLmE9Yi5NYXRoLm1heChkLmEsdi5hKSxkLmI9Yi5NYXRoLm1heChkLmIsdi5iKTtmb3IoaD1uZXcgbnIoKCF0Lm4mJih0Lm49bmV3IGZlKHFvLHQsMSw3KSksdC5uKSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDEzNyksQz11KHFlKG8sUVMpLDgpLEMmJngxKG8sQy5hLEMuYiksTSYmKGQuYT1iLk1hdGgubWF4KGQuYSxvLmkrby5nKSxkLmI9Yi5NYXRoLm1heChkLmIsby5qK28uZikpO3JldHVybiBkfWZ1bmN0aW9uIEs1bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2U7Zm9yKFN0PWUuYy5sZW5ndGgscz1uZXcgRTQodC5hLG4sbnVsbCxudWxsKSxXZT1OdChhYSx2bywyNSxTdCwxNSwxKSxLPU50KGFhLHZvLDI1LFN0LDE1LDEpLEc9TnQoYWEsdm8sMjUsU3QsMTUsMSksdHQ9MCxkPTA7ZDxTdDtkKyspS1tkXT13aSxHW2RdPVNhO2Zvcih2PTA7djxTdDt2KyspZm9yKHI9KEFuKHYsZS5jLmxlbmd0aCksdShlLmNbdl0sMTgwKSksV2Vbdl09aWF0KHIpLFdlW3R0XT5XZVt2XSYmKHR0PXYpLE09bmV3IFModC5hLmIpO00uYTxNLmMuYy5sZW5ndGg7KWZvcihDPXUoSihNKSwyOSksTXQ9bmV3IFMoQy5hKTtNdC5hPE10LmMuYy5sZW5ndGg7KWd0PXUoSihNdCksMTApLHVlPVh0KHIucFtndC5wXSkrWHQoci5kW2d0LnBdKSxLW3ZdPWIuTWF0aC5taW4oS1t2XSx1ZSksR1t2XT1iLk1hdGgubWF4KEdbdl0sdWUrZ3Quby5iKTtmb3IoX2U9TnQoYWEsdm8sMjUsU3QsMTUsMSksaz0wO2s8U3Q7aysrKShBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDE4MCkpLm89PShDMSgpLEgyKT9fZVtrXT1LW3R0XS1LW2tdOl9lW2tdPUdbdHRdLUdba107Zm9yKG89TnQoYWEsdm8sMjUsU3QsMTUsMSksSD1uZXcgUyh0LmEuYik7SC5hPEguYy5jLmxlbmd0aDspZm9yKGo9dShKKEgpLDI5KSxLdD1uZXcgUyhqLmEpO0t0LmE8S3QuYy5jLmxlbmd0aDspe2ZvcihSdD11KEooS3QpLDEwKSxoPTA7aDxTdDtoKyspb1toXT1YdCgoQW4oaCxlLmMubGVuZ3RoKSx1KGUuY1toXSwxODApKS5wW1J0LnBdKStYdCgoQW4oaCxlLmMubGVuZ3RoKSx1KGUuY1toXSwxODApKS5kW1J0LnBdKStfZVtoXTtvLnNvcnQoRmVlKFR0LnByb3RvdHlwZS50ZSxUdCxbXSkpLHMucFtSdC5wXT0ob1sxXStvWzJdKS8yLHMuZFtSdC5wXT0wfXJldHVybiBzfWZ1bmN0aW9uIFg1bih0LGUsbil7dmFyIHIscyxvLGgsZDtzd2l0Y2gocj1lLmksbz10LmkubyxzPXQuaS5kLGQ9dC5uLGg9WW8obHQoY3QoV3MsMSksZWUsOCwwLFtkLHQuYV0pKSx0LmouZyl7Y2FzZSAxOmRkKGUsKHl1KCksRWYpKSxyLmQ9LXMuZC1uLXIuYSx1KHUoTmUoZS5kLDApLDE4MSkuV2UoKGFlKCksajYpKSwyODUpPT0oemwoKSxmMCk/KFdmKGUsKFF1KCksa2YpKSxyLmM9aC5hLVh0KHllKFEodCxLNCkpKS1uLXIuYik6KFdmKGUsKFF1KCksTWQpKSxyLmM9aC5hK1h0KHllKFEodCxLNCkpKStuKTticmVhaztjYXNlIDI6V2YoZSwoUXUoKSxNZCkpLHIuYz1vLmErcy5jK24sdSh1KE5lKGUuZCwwKSwxODEpLldlKChhZSgpLGo2KSksMjg1KT09KHpsKCksZjApPyhkZChlLCh5dSgpLEVmKSksci5kPWguYi1YdCh5ZShRKHQsSzQpKSktbi1yLmEpOihkZChlLCh5dSgpLG4xKSksci5kPWguYitYdCh5ZShRKHQsSzQpKSkrbik7YnJlYWs7Y2FzZSAzOmRkKGUsKHl1KCksbjEpKSxyLmQ9by5iK3MuYStuLHUodShOZShlLmQsMCksMTgxKS5XZSgoYWUoKSxqNikpLDI4NSk9PSh6bCgpLGYwKT8oV2YoZSwoUXUoKSxrZikpLHIuYz1oLmEtWHQoeWUoUSh0LEs0KSkpLW4tci5iKTooV2YoZSwoUXUoKSxNZCkpLHIuYz1oLmErWHQoeWUoUSh0LEs0KSkpK24pO2JyZWFrO2Nhc2UgNDpXZihlLChRdSgpLGtmKSksci5jPS1zLmItbi1yLmIsdSh1KE5lKGUuZCwwKSwxODEpLldlKChhZSgpLGo2KSksMjg1KT09KHpsKCksZjApPyhkZChlLCh5dSgpLEVmKSksci5kPWguYi1YdCh5ZShRKHQsSzQpKSktbi1yLmEpOihkZChlLCh5dSgpLG4xKSksci5kPWguYitYdCh5ZShRKHQsSzQpKSkrbil9fWZ1bmN0aW9uIFE1bih0LGUsbixyLHMsbyxoKXt2YXIgZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem4saHIscGksanM7Zm9yKEg9MCxSbj0wLHY9bmV3IFModCk7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMzMpLEVoZShkKSxIPWIuTWF0aC5tYXgoSCxkLmcpLFJuKz1kLmcqZC5mO2ZvcihHPVJuL3QuYy5sZW5ndGgsUWU9SjFuKHQsRyksUm4rPXQuYy5sZW5ndGgqUWUsSD1iLk1hdGgubWF4KEgsYi5NYXRoLnNxcnQoUm4qaCkpK24uYixwaT1uLmIsanM9bi5kLGo9MCxDPW4uYituLmMsV2U9bmV3IFppLHJpKFdlLHBlKDApKSx1ZT1uZXcgWmksaz1uZXcgZGEodCwwKTtrLmI8ay5kLmdjKCk7KWQ9KFpuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSwzMykpLGhyPWQuZyxNPWQuZixwaStocj5IJiYobyYmKFpiKHVlLGopLFpiKFdlLHBlKGsuYi0xKSkpLHBpPW4uYixqcys9aitlLGo9MCxDPWIuTWF0aC5tYXgoQyxuLmIrbi5jK2hyKSksa3UoZCxwaSksRXUoZCxqcyksQz1iLk1hdGgubWF4KEMscGkraHIrbi5jKSxqPWIuTWF0aC5tYXgoaixNKSxwaSs9aHIrZTtpZihDPWIuTWF0aC5tYXgoQyxyKSx6bj1qcytqK24uYSx6bjxzJiYoais9cy16bix6bj1zKSxvKWZvcihwaT1uLmIsaz1uZXcgZGEodCwwKSxaYihXZSxwZSh0LmMubGVuZ3RoKSksX2U9ZWkoV2UsMCksZ3Q9dSh0aShfZSksMTkpLmEsWmIodWUsaiksS3Q9ZWkodWUsMCksUnQ9MDtrLmI8ay5kLmdjKCk7KWsuYj09Z3QmJihwaT1uLmIsUnQ9WHQoeWUodGkoS3QpKSksZ3Q9dSh0aShfZSksMTkpLmEpLGQ9KFpuKGsuYjxrLmQuZ2MoKSksdShrLmQuWGIoay5jPWsuYisrKSwzMykpLE10PWQuZixKdyhkLFJ0KSxLPVJ0LGsuYj09Z3QmJih0dD1DLXBpLW4uYyxTdD1kLmcsdHYoZCx0dCkseW9lKGQsbmV3ICRlKHR0LEspLG5ldyAkZShTdCxNdCkpKSxwaSs9ZC5nK2U7cmV0dXJuIG5ldyAkZShDLHpuKX1mdW5jdGlvbiBaNW4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlO2Zvcih2cihlLCJDb21wb3VuZCBncmFwaCBwb3N0cHJvY2Vzc29yIiwxKSxuPWplKFJlKFEodCwoVGUoKSxkaHQpKSkpLGQ9dShRKHQsKGFlKCksckN0KSksMjI0KSxDPW5ldyBIcyxndD1kLmVjKCkuS2MoKTtndC5PYigpOyl7Zm9yKHR0PXUoZ3QuUGIoKSwxNyksaD1uZXcgQnUoZC5jYyh0dCkpLHduKCksWnMoaCxuZXcgU2kodCkpLEt0PVBjbigoQW4oMCxoLmMubGVuZ3RoKSx1KGguY1swXSwyNDMpKSksX2U9TG5lKHUoTmUoaCxoLmMubGVuZ3RoLTEpLDI0MykpLFN0PUt0LmksSjgoX2UuaSxTdCk/TXQ9U3QuZTpNdD1OYShTdCksTT1CZm4odHQsaCksQWgodHQuYSksaj1udWxsLG89bmV3IFMoaCk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjQzKSxLPW5ldyBDYSxZNHQoSyxzLmEsTXQpLEg9cy5iLHI9bmV3IFB1LGppdChyLDAsSC5hKSxueShyLEspLFJ0PW5ldyB4byhfMShILmMpKSx1ZT1uZXcgeG8oXzEoSC5kKSksTGkoUnQsSyksTGkodWUsSyksaiYmKHIuYj09MD9HPXVlOkc9KFpuKHIuYiE9MCksdShyLmEuYS5jLDgpKSxXZT1iLk1hdGguYWJzKGouYS1HLmEpPkVkLFFlPWIuTWF0aC5hYnMoai5iLUcuYik+RWQsKCFuJiZXZSYmUWV8fG4mJihXZXx8UWUpKSYmcmkodHQuYSxSdCkpLFVhKHR0LmEsciksci5iPT0wP2o9UnQ6aj0oWm4oci5iIT0wKSx1KHIuYy5iLmMsOCkpLGR1bihILE0sSyksTG5lKHMpPT1fZSYmKE5hKF9lLmkpIT1zLmEmJihLPW5ldyBDYSxZNHQoSyxOYShfZS5pKSxNdCkpLEp0KHR0LFFsdCxLKSksQmduKEgsdHQsTXQpLEMuYS56YyhILEMpO09hKHR0LEt0KSxvYSh0dCxfZSl9Zm9yKGs9Qy5hLmVjKCkuS2MoKTtrLk9iKCk7KXY9dShrLlBiKCksMTcpLE9hKHYsbnVsbCksb2EodixudWxsKTtvcihlKX1mdW5jdGlvbiB6aGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0O2lmKHQuZ2MoKT09MSlyZXR1cm4gdSh0LlhiKDApLDIzMSk7aWYodC5nYygpPD0wKXJldHVybiBuZXcgQiQ7Zm9yKHM9dC5LYygpO3MuT2IoKTspe2ZvcihuPXUocy5QYigpLDIzMSksRz0wLEM9d2ksTT13aSx2PVNhLGs9U2EsSD1uZXcgUyhuLmUpO0guYTxILmMuYy5sZW5ndGg7KWo9dShKKEgpLDE0NCksRys9dShRKGosKEpmKCksYzcpKSwxOSkuYSxDPWIuTWF0aC5taW4oQyxqLmQuYS1qLmUuYS8yKSxNPWIuTWF0aC5taW4oTSxqLmQuYi1qLmUuYi8yKSx2PWIuTWF0aC5tYXgodixqLmQuYStqLmUuYS8yKSxrPWIuTWF0aC5tYXgoayxqLmQuYitqLmUuYi8yKTtKdChuLChKZigpLGM3KSxwZShHKSksSnQobiwoWXAoKSxkUyksbmV3ICRlKEMsTSkpLEp0KG4sdk8sbmV3ICRlKHYsaykpfWZvcih3bigpLHQuYWQobmV3IEhiKSxLPW5ldyBCJCxNbyhLLHUodC5YYigwKSw5NCkpLGQ9MCxNdD0wLG89dC5LYygpO28uT2IoKTspbj11KG8uUGIoKSwyMzEpLHR0PWlhKG5jKHUoUShuLChZcCgpLHZPKSksOCkpLHUoUShuLGRTKSw4KSksZD1iLk1hdGgubWF4KGQsdHQuYSksTXQrPXR0LmEqdHQuYjtmb3IoZD1iLk1hdGgubWF4KGQsYi5NYXRoLnNxcnQoTXQpKlh0KHllKFEoSywoSmYoKSxkYmUpKSkpKSxndD1YdCh5ZShRKEssYlYpKSksU3Q9MCxSdD0wLGg9MCxlPWd0LHI9dC5LYygpO3IuT2IoKTspbj11KHIuUGIoKSwyMzEpLHR0PWlhKG5jKHUoUShuLChZcCgpLHZPKSksOCkpLHUoUShuLGRTKSw4KSksU3QrdHQuYT5kJiYoU3Q9MCxSdCs9aCtndCxoPTApLEZtbihLLG4sU3QsUnQpLGU9Yi5NYXRoLm1heChlLFN0K3R0LmEpLGg9Yi5NYXRoLm1heChoLHR0LmIpLFN0Kz10dC5hK2d0O3JldHVybiBLfWZ1bmN0aW9uIHFoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHO3N3aXRjaChDPW5ldyBQdSx0LmEuZyl7Y2FzZSAzOmo9dShRKGUuZSwoYWUoKSxSMikpLDE1KSxIPXUoUShlLmosUjIpLDE1KSxHPXUoUShlLmYsUjIpLDE1KSxuPXUoUShlLmUsWjQpLDE1KSxyPXUoUShlLmosWjQpLDE1KSxzPXUoUShlLmYsWjQpLDE1KSxoPW5ldyBoZSxMcyhoLGopLEguSmMobmV3IGNRKSxMcyhoLF90KEgsMTUyKT9aeCh1KEgsMTUyKSk6X3QoSCwxMzEpP3UoSCwxMzEpLmE6X3QoSCw1NCk/bmV3IGt3KEgpOm5ldyBPbShIKSksTHMoaCxHKSxvPW5ldyBoZSxMcyhvLG4pLExzKG8sX3QociwxNTIpP1p4KHUociwxNTIpKTpfdChyLDEzMSk/dShyLDEzMSkuYTpfdChyLDU0KT9uZXcga3cocik6bmV3IE9tKHIpKSxMcyhvLHMpLEp0KGUuZixSMixoKSxKdChlLmYsWjQsbyksSnQoZS5mLGhDdCxlLmYpLEp0KGUuZSxSMixudWxsKSxKdChlLmUsWjQsbnVsbCksSnQoZS5qLFIyLG51bGwpLEp0KGUuaixaNCxudWxsKTticmVhaztjYXNlIDE6VWEoQyxlLmUuYSkscmkoQyxlLmkubiksVWEoQyxsMihlLmouYSkpLHJpKEMsZS5hLm4pLFVhKEMsZS5mLmEpO2JyZWFrO2RlZmF1bHQ6VWEoQyxlLmUuYSksVWEoQyxsMihlLmouYSkpLFVhKEMsZS5mLmEpfUFoKGUuZi5hKSxVYShlLmYuYSxDKSxPYShlLmYsZS5lLmMpLGQ9dShRKGUuZSwoVGUoKSxTbykpLDc0KSxrPXUoUShlLmosU28pLDc0KSx2PXUoUShlLmYsU28pLDc0KSwoZHx8a3x8dikmJihNPW5ldyBQdSx3dnQoTSx2KSx3dnQoTSxrKSx3dnQoTSxkKSxKdChlLmYsU28sTSkpLE9hKGUuaixudWxsKSxvYShlLmosbnVsbCksT2EoZS5lLG51bGwpLG9hKGUuZSxudWxsKSxFbyhlLmEsbnVsbCksRW8oZS5pLG51bGwpLGUuZyYmcWhlKHQsZS5nKX1mdW5jdGlvbiBKNW4odCl7Y3h0KCk7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2lmKHQ9PW51bGx8fChvPUskKHQpLEc9JGxuKG8pLEclNCE9MCkpcmV0dXJuIG51bGw7aWYoSz1HLzR8MCxLPT0wKXJldHVybiBOdChHdSxONCwyNSwwLDE1LDEpO2ZvcihNPW51bGwsZT0wLG49MCxyPTAscz0wLGg9MCxkPTAsdj0wLGs9MCxIPTAsaj0wLEM9MCxNPU50KEd1LE40LDI1LEsqMywxNSwxKTtIPEstMTtIKyspe2lmKCF2TShoPW9bQysrXSl8fCF2TShkPW9bQysrXSl8fCF2TSh2PW9bQysrXSl8fCF2TShrPW9bQysrXSkpcmV0dXJuIG51bGw7ZT1ZMVtoXSxuPVkxW2RdLHI9WTFbdl0scz1ZMVtrXSxNW2orK109KGU8PDJ8bj4+NCk8PDI0Pj4yNCxNW2orK109KChuJjE1KTw8NHxyPj4yJjE1KTw8MjQ+PjI0LE1baisrXT0ocjw8NnxzKTw8MjQ+PjI0fXJldHVybiF2TShoPW9bQysrXSl8fCF2TShkPW9bQysrXSk/bnVsbDooZT1ZMVtoXSxuPVkxW2RdLHY9b1tDKytdLGs9b1tDKytdLFkxW3ZdPT0tMXx8WTFba109PS0xP3Y9PTYxJiZrPT02MT9uJjE1P251bGw6KHR0PU50KEd1LE40LDI1LEgqMysxLDE1LDEpLERjKE0sMCx0dCwwLEgqMyksdHRbal09KGU8PDJ8bj4+NCk8PDI0Pj4yNCx0dCk6diE9NjEmJms9PTYxPyhyPVkxW3ZdLHImMz9udWxsOih0dD1OdChHdSxONCwyNSxIKjMrMiwxNSwxKSxEYyhNLDAsdHQsMCxIKjMpLHR0W2orK109KGU8PDJ8bj4+NCk8PDI0Pj4yNCx0dFtqXT0oKG4mMTUpPDw0fHI+PjImMTUpPDwyND4+MjQsdHQpKTpudWxsOihyPVkxW3ZdLHM9WTFba10sTVtqKytdPShlPDwyfG4+PjQpPDwyND4+MjQsTVtqKytdPSgobiYxNSk8PDR8cj4+MiYxNSk8PDI0Pj4yNCxNW2orK109KHI8PDZ8cyk8PDI0Pj4yNCxNKSl9ZnVuY3Rpb24gdHhuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdDtmb3IodnIoZSxTMWUsMSksRz11KFEodCwoVGUoKSxlZykpLDIxOCkscz1uZXcgUyh0LmIpO3MuYTxzLmMuYy5sZW5ndGg7KWZvcihyPXUoSihzKSwyOSksaz1sRChyLmEpLGg9ayxkPTAsdj1oLmxlbmd0aDtkPHY7KytkKWlmKG89aFtkXSxvLms9PShWbigpLEhjKSl7aWYoRz09KFcwKCksWDYpKWZvcihNPW5ldyBTKG8uaik7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTEpLEMuZS5jLmxlbmd0aD09MHx8bWZuKEMpLEMuZy5jLmxlbmd0aD09MHx8eWZuKEMpO2Vsc2UgaWYoX3QoUShvLChhZSgpLF9pKSksMTcpKXR0PXUoUShvLF9pKSwxNyksZ3Q9dShHZyhvLCh2ZSgpLEJuKSkuS2MoKS5QYigpLDExKSxNdD11KEdnKG8sSG4pLktjKCkuUGIoKSwxMSksU3Q9dShRKGd0LF9pKSwxMSksUnQ9dShRKE10LF9pKSwxMSksT2EodHQsUnQpLG9hKHR0LFN0KSxLdD1uZXcgeG8oTXQuaS5uKSxLdC5hPVlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbUnQuaS5uLFJ0Lm4sUnQuYV0pKS5hLHJpKHR0LmEsS3QpLEt0PW5ldyB4byhndC5pLm4pLEt0LmE9WW8obHQoY3QoV3MsMSksZWUsOCwwLFtTdC5pLm4sU3QubixTdC5hXSkpLmEscmkodHQuYSxLdCk7ZWxzZXtpZihvLmouYy5sZW5ndGg+PTIpe2ZvcihLPSEwLGo9bmV3IFMoby5qKSxuPXUoSihqKSwxMSksSD1udWxsO2ouYTxqLmMuYy5sZW5ndGg7KWlmKEg9bixuPXUoSihqKSwxMSksIXlpKFEoSCxfaSksUShuLF9pKSkpe0s9ITE7YnJlYWt9fWVsc2UgSz0hMTtmb3IoTT1uZXcgUyhvLmopO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDExKSxDLmUuYy5sZW5ndGg9PTB8fFd3bihDLEspLEMuZy5jLmxlbmd0aD09MHx8WXduKEMsSyl9RW8obyxudWxsKX1vcihlKX1mdW5jdGlvbiBIaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlO3JldHVybiBTdD10LmNbKEFuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMTcpKS5wXSxfZT10LmNbKEFuKDEsZS5jLmxlbmd0aCksdShlLmNbMV0sMTcpKS5wXSxTdC5hLmUuZS1TdC5hLmEtKFN0LmIuZS5lLVN0LmIuYSk9PTAmJl9lLmEuZS5lLV9lLmEuYS0oX2UuYi5lLmUtX2UuYi5hKT09MHx8KGd0PVN0LmIuZS5mLCFfdChndCwxMCkpPyExOih0dD11KGd0LDEwKSxLdD10LmlbdHQucF0sdWU9dHQuYz9Sbyh0dC5jLmEsdHQsMCk6LTEsbz1hcyx1ZT4wJiYocz11KE5lKHR0LmMuYSx1ZS0xKSwxMCksaD10Lmlbcy5wXSxXZT1iLk1hdGguY2VpbChXMyh0Lm4scyx0dCkpLG89S3QuYS5lLXR0LmQuZC0oaC5hLmUrcy5vLmIrcy5kLmEpLVdlKSxrPWFzLHVlPHR0LmMuYS5jLmxlbmd0aC0xJiYodj11KE5lKHR0LmMuYSx1ZSsxKSwxMCksQz10Lmlbdi5wXSxXZT1iLk1hdGguY2VpbChXMyh0Lm4sdix0dCkpLGs9Qy5hLmUtdi5kLmQtKEt0LmEuZSt0dC5vLmIrdHQuZC5hKS1XZSksbiYmKGsxKCksd2YoX2QpLGIuTWF0aC5hYnMoby1rKTw9X2R8fG89PWt8fGlzTmFOKG8pJiZpc05hTihrKSk/ITA6KHI9dHJ0KFN0LmEpLGQ9LXRydChTdC5iKSxNPS10cnQoX2UuYSksTXQ9dHJ0KF9lLmIpLEs9U3QuYS5lLmUtU3QuYS5hLShTdC5iLmUuZS1TdC5iLmEpPjAmJl9lLmEuZS5lLV9lLmEuYS0oX2UuYi5lLmUtX2UuYi5hKTwwLEc9U3QuYS5lLmUtU3QuYS5hLShTdC5iLmUuZS1TdC5iLmEpPDAmJl9lLmEuZS5lLV9lLmEuYS0oX2UuYi5lLmUtX2UuYi5hKT4wLEg9U3QuYS5lLmUrU3QuYi5hPF9lLmIuZS5lK19lLmEuYSxqPVN0LmEuZS5lK1N0LmIuYT5fZS5iLmUuZStfZS5hLmEsUnQ9MCwhSyYmIUcmJihqP28rTT4wP1J0PU06ay1yPjAmJihSdD1yKTpIJiYobytkPjA/UnQ9ZDprLU10PjAmJihSdD1NdCkpKSxLdC5hLmUrPVJ0LEt0LmImJihLdC5kLmUrPVJ0KSwhMSkpfWZ1bmN0aW9uIFZoZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGo7aWYocj1uZXcgYWgoZS5xZigpLmEsZS5xZigpLmIsZS5yZigpLmEsZS5yZigpLmIpLHM9bmV3IEZ4LHQuYylmb3IoaD1uZXcgUyhlLndmKCkpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE4MSkscy5jPW8ucWYoKS5hK2UucWYoKS5hLHMuZD1vLnFmKCkuYitlLnFmKCkuYixzLmI9by5yZigpLmEscy5hPW8ucmYoKS5iLGdfKHIscyk7Zm9yKGs9bmV3IFMoZS5DZigpKTtrLmE8ay5jLmMubGVuZ3RoOyl7aWYodj11KEooayksODM4KSxDPXYucWYoKS5hK2UucWYoKS5hLE09di5xZigpLmIrZS5xZigpLmIsdC5lJiYocy5jPUMscy5kPU0scy5iPXYucmYoKS5hLHMuYT12LnJmKCkuYixnXyhyLHMpKSx0LmQpZm9yKGg9bmV3IFModi53ZigpKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxODEpLHMuYz1vLnFmKCkuYStDLHMuZD1vLnFmKCkuYitNLHMuYj1vLnJmKCkuYSxzLmE9by5yZigpLmIsZ18ocixzKTtpZih0LmIpe2lmKGo9bmV3ICRlKC1uLC1uKSx1KGUuV2UoKHVpKCksUXkpKSwxNzQpLkhjKChadSgpLENiKSkpZm9yKGg9bmV3IFModi53ZigpKTtoLmE8aC5jLmMubGVuZ3RoOylvPXUoSihoKSwxODEpLGouYSs9by5yZigpLmErbixqLmIrPW8ucmYoKS5iK247ai5hPWIuTWF0aC5tYXgoai5hLDApLGouYj1iLk1hdGgubWF4KGouYiwwKSxmbGUocix2LkJmKCksdi56ZigpLGUsdixqLG4pfX10LmImJmZsZShyLGUuQmYoKSxlLnpmKCksZSxudWxsLG51bGwsbiksZD1uZXcgTG50KGUuQWYoKSksZC5kPWIuTWF0aC5tYXgoMCxlLnFmKCkuYi1yLmQpLGQuYT1iLk1hdGgubWF4KDAsci5kK3IuYS0oZS5xZigpLmIrZS5yZigpLmIpKSxkLmI9Yi5NYXRoLm1heCgwLGUucWYoKS5hLXIuYyksZC5jPWIuTWF0aC5tYXgoMCxyLmMrci5iLShlLnFmKCkuYStlLnJmKCkuYSkpLGUuRWYoZCl9ZnVuY3Rpb24gZXhuKCl7dmFyIHQ9WyJcXHUwMDAwIiwiXFx1MDAwMSIsIlxcdTAwMDIiLCJcXHUwMDAzIiwiXFx1MDAwNCIsIlxcdTAwMDUiLCJcXHUwMDA2IiwiXFx1MDAwNyIsIlxcYiIsIlxcdCIsIlxcbiIsIlxcdTAwMEIiLCJcXGYiLCJcXHIiLCJcXHUwMDBFIiwiXFx1MDAwRiIsIlxcdTAwMTAiLCJcXHUwMDExIiwiXFx1MDAxMiIsIlxcdTAwMTMiLCJcXHUwMDE0IiwiXFx1MDAxNSIsIlxcdTAwMTYiLCJcXHUwMDE3IiwiXFx1MDAxOCIsIlxcdTAwMTkiLCJcXHUwMDFBIiwiXFx1MDAxQiIsIlxcdTAwMUMiLCJcXHUwMDFEIiwiXFx1MDAxRSIsIlxcdTAwMUYiXTtyZXR1cm4gdFszNF09J1xcIicsdFs5Ml09IlxcXFwiLHRbMTczXT0iXFx1MDBhZCIsdFsxNTM2XT0iXFx1MDYwMCIsdFsxNTM3XT0iXFx1MDYwMSIsdFsxNTM4XT0iXFx1MDYwMiIsdFsxNTM5XT0iXFx1MDYwMyIsdFsxNzU3XT0iXFx1MDZkZCIsdFsxODA3XT0iXFx1MDcwZiIsdFs2MDY4XT0iXFx1MTdiNCIsdFs2MDY5XT0iXFx1MTdiNSIsdFs4MjAzXT0iXFx1MjAwYiIsdFs4MjA0XT0iXFx1MjAwYyIsdFs4MjA1XT0iXFx1MjAwZCIsdFs4MjA2XT0iXFx1MjAwZSIsdFs4MjA3XT0iXFx1MjAwZiIsdFs4MjMyXT0iXFx1MjAyOCIsdFs4MjMzXT0iXFx1MjAyOSIsdFs4MjM0XT0iXFx1MjAyYSIsdFs4MjM1XT0iXFx1MjAyYiIsdFs4MjM2XT0iXFx1MjAyYyIsdFs4MjM3XT0iXFx1MjAyZCIsdFs4MjM4XT0iXFx1MjAyZSIsdFs4Mjg4XT0iXFx1MjA2MCIsdFs4Mjg5XT0iXFx1MjA2MSIsdFs4MjkwXT0iXFx1MjA2MiIsdFs4MjkxXT0iXFx1MjA2MyIsdFs4MjkyXT0iXFx1MjA2NCIsdFs4Mjk4XT0iXFx1MjA2YSIsdFs4Mjk5XT0iXFx1MjA2YiIsdFs4MzAwXT0iXFx1MjA2YyIsdFs4MzAxXT0iXFx1MjA2ZCIsdFs4MzAyXT0iXFx1MjA2ZSIsdFs4MzAzXT0iXFx1MjA2ZiIsdFs2NTI3OV09IlxcdWZlZmYiLHRbNjU1MjldPSJcXHVmZmY5Iix0WzY1NTMwXT0iXFx1ZmZmYSIsdFs2NTUzMV09IlxcdWZmZmIiLHR9ZnVuY3Rpb24gbnhuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0sajtmb3Iodj1uZXcgaGUsTT1lLmxlbmd0aCxoPUl5dChuKSxrPTA7azxNOysrayl7c3dpdGNoKEM9TzJ0KGUsQ3UoNjEpLGspLHI9UmxuKGgsZS5zdWJzdHIoayxDLWspKSxzPVRpdChyKSxvPXMuQWooKS5OaCgpLHdhKGUsKytDKSl7Y2FzZSAzOTp7ZD12OChlLDM5LCsrQyksbGUodixuZXcgbGoocixmcnQoZS5zdWJzdHIoQyxkLUMpLG8scykpKSxrPWQrMTticmVha31jYXNlIDM0OntkPXY4KGUsMzQsKytDKSxsZSh2LG5ldyBsaihyLGZydChlLnN1YnN0cihDLGQtQyksbyxzKSkpLGs9ZCsxO2JyZWFrfWNhc2UgOTE6e2o9bmV3IGhlLGxlKHYsbmV3IGxqKHIsaikpO3Q6Zm9yKDs7KXtzd2l0Y2god2EoZSwrK0MpKXtjYXNlIDM5OntkPXY4KGUsMzksKytDKSxsZShqLGZydChlLnN1YnN0cihDLGQtQyksbyxzKSksQz1kKzE7YnJlYWt9Y2FzZSAzNDp7ZD12OChlLDM0LCsrQyksbGUoaixmcnQoZS5zdWJzdHIoQyxkLUMpLG8scykpLEM9ZCsxO2JyZWFrfWNhc2UgMTEwOntpZigrK0MsZS5pbmRleE9mKCJ1bGwiLEMpPT1DKWouY1tqLmMubGVuZ3RoXT1udWxsO2Vsc2UgdGhyb3cgaXQobmV3IFZvKE5kZSkpO0MrPTM7YnJlYWt9fWlmKEM8TSlzd2l0Y2goUnIoQyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KEMpKXtjYXNlIDQ0OmJyZWFrO2Nhc2UgOTM6YnJlYWsgdDtkZWZhdWx0OnRocm93IGl0KG5ldyBWbygiRXhwZWN0aW5nICwgb3IgXSIpKX1lbHNlIGJyZWFrfWs9QysxO2JyZWFrfWNhc2UgMTEwOntpZigrK0MsZS5pbmRleE9mKCJ1bGwiLEMpPT1DKWxlKHYsbmV3IGxqKHIsbnVsbCkpO2Vsc2UgdGhyb3cgaXQobmV3IFZvKE5kZSkpO2s9QyszO2JyZWFrfX1pZihrPE0pe2lmKFJyKGssZS5sZW5ndGgpLGUuY2hhckNvZGVBdChrKSE9NDQpdGhyb3cgaXQobmV3IFZvKCJFeHBlY3RpbmcgLCIpKX1lbHNlIGJyZWFrfXJldHVybiB5dm4odCx2LG4pfWZ1bmN0aW9uIEdoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGo7Zm9yKGs9dSh1KEFpKHQucixlKSwyMSksODQpLGg9bmduKHQsZSksbj10LnUuSGMoKFp1KCksZUEpKSx2PWsuS2MoKTt2Lk9iKCk7KWlmKGQ9dSh2LlBiKCksMTExKSwhKCFkLmN8fGQuYy5kLmMubGVuZ3RoPD0wKSl7c3dpdGNoKGo9ZC5iLnJmKCksQz1kLmMsTT1DLmksTS5iPShvPUMubixDLmUuYStvLmIrby5jKSxNLmE9KHM9Qy5uLEMuZS5iK3MuZCtzLmEpLGUuZyl7Y2FzZSAxOmQuYT8oTS5jPShqLmEtTS5iKS8yLFdmKEMsKFF1KCksZmIpKSk6aHx8bj8oTS5jPS1NLmItdC5zLFdmKEMsKFF1KCksa2YpKSk6KE0uYz1qLmErdC5zLFdmKEMsKFF1KCksTWQpKSksTS5kPS1NLmEtdC50LGRkKEMsKHl1KCksRWYpKTticmVhaztjYXNlIDM6ZC5hPyhNLmM9KGouYS1NLmIpLzIsV2YoQywoUXUoKSxmYikpKTpofHxuPyhNLmM9LU0uYi10LnMsV2YoQywoUXUoKSxrZikpKTooTS5jPWouYSt0LnMsV2YoQywoUXUoKSxNZCkpKSxNLmQ9ai5iK3QudCxkZChDLCh5dSgpLG4xKSk7YnJlYWs7Y2FzZSAyOmQuYT8ocj10LnY/TS5hOnUoTmUoQy5kLDApLDE4MSkucmYoKS5iLE0uZD0oai5iLXIpLzIsZGQoQywoeXUoKSxkYikpKTpofHxuPyhNLmQ9LU0uYS10LnQsZGQoQywoeXUoKSxFZikpKTooTS5kPWouYit0LnQsZGQoQywoeXUoKSxuMSkpKSxNLmM9ai5hK3QucyxXZihDLChRdSgpLE1kKSk7YnJlYWs7Y2FzZSA0OmQuYT8ocj10LnY/TS5hOnUoTmUoQy5kLDApLDE4MSkucmYoKS5iLE0uZD0oai5iLXIpLzIsZGQoQywoeXUoKSxkYikpKTpofHxuPyhNLmQ9LU0uYS10LnQsZGQoQywoeXUoKSxFZikpKTooTS5kPWouYit0LnQsZGQoQywoeXUoKSxuMSkpKSxNLmM9LU0uYi10LnMsV2YoQywoUXUoKSxrZikpfWg9ITF9fWZ1bmN0aW9uIGliKHQsZSl7Z2koKTt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRztpZihIQyh6Nyk9PTApe2ZvcihNPU50KGs2bixlZSwxMTcsVzVlLmxlbmd0aCwwLDEpLGg9MDtoPE0ubGVuZ3RoO2grKylNW2hdPW5ldyBObCg0KTtmb3Iocj1uZXcgJEMsbz0wO288X0x0Lmxlbmd0aDtvKyspe2lmKEM9bmV3IE5sKDQpLG88ODQ/KGQ9byoyLEg9KFJyKGQsRXV0Lmxlbmd0aCksRXV0LmNoYXJDb2RlQXQoZCkpLGo9KFJyKGQrMSxFdXQubGVuZ3RoKSxFdXQuY2hhckNvZGVBdChkKzEpKSxqYyhDLEgsaikpOihkPShvLTg0KSoyLGpjKEMsU0x0W2RdLFNMdFtkKzFdKSksdj1fTHRbb10saG4odiwiU3BlY2lhbHMiKSYmamMoQyw2NTUyMCw2NTUzMyksaG4odix5Z2UpJiYoamMoQyw5ODMwNDAsMTA0ODU3MyksamMoQywxMDQ4NTc2LDExMTQxMDkpKSxrbyh6Nyx2LEMpLGtvKGdBLHYsbXkoQykpLGs9ci5hLmxlbmd0aCwwPGs/ci5hPXIuYS5zdWJzdHIoMCwwKTowPmsmJihyLmErPUtVdChOdCh4aCx5ZCwyNSwtaywxNSwxKSkpLHIuYSs9IklzIixoZCh2LEN1KDMyKSk+PTApZm9yKHM9MDtzPHYubGVuZ3RoO3MrKylScihzLHYubGVuZ3RoKSx2LmNoYXJDb2RlQXQocykhPTMyJiZTOChyLChScihzLHYubGVuZ3RoKSx2LmNoYXJDb2RlQXQocykpKTtlbHNlIHIuYSs9IiIrdjtBM3Qoci5hLHYsITApfUEzdChrdXQsIkNuIiwhMSksQTN0KFE4dCwiQ24iLCEwKSxuPW5ldyBObCg0KSxqYyhuLDAsZTcpLGtvKHo3LCJBTEwiLG4pLGtvKGdBLCJBTEwiLG15KG4pKSwhczMmJihzMz1uZXcgX3IpLGtvKHMzLGt1dCxrdXQpLCFzMyYmKHMzPW5ldyBfciksa28oczMsUTh0LFE4dCksIXMzJiYoczM9bmV3IF9yKSxrbyhzMywiQUxMIiwiQUxMIil9cmV0dXJuIEc9dShOYyhlP3o3OmdBLHQpLDEzNiksR31mdW5jdGlvbiByeG4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10O2lmKGo9ITEsTT0hMSxHMyh1KFEociwoVGUoKSxjcykpLDk4KSkpe2g9ITEsZD0hMTt0OmZvcihHPW5ldyBTKHIuaik7Ry5hPEcuYy5jLmxlbmd0aDspZm9yKEg9dShKKEcpLDExKSx0dD16cChEMShsdChjdChqMSwxKSxEZSwyMCwwLFtuZXcgUXMoSCksbmV3IFRyKEgpXSkpKTt6cih0dCk7KWlmKEs9dShNcih0dCksMTEpLCFqZShSZShRKEsuaSxDUykpKSl7aWYoSC5qPT0odmUoKSxQbikpe2g9ITA7YnJlYWsgdH1pZihILmo9PW1yKXtkPSEwO2JyZWFrIHR9fWo9ZCYmIWgsTT1oJiYhZH1pZighaiYmIU0mJnIuYi5jLmxlbmd0aCE9MCl7Zm9yKEM9MCxrPW5ldyBTKHIuYik7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksNzApLEMrPXYubi5iK3Yuby5iLzI7Qy89ci5iLmMubGVuZ3RoLE10PUM+PXIuby5iLzJ9ZWxzZSBNdD0hTTtNdD8oZ3Q9dShRKHIsKGFlKCksejYpKSwxNSksZ3Q/aj9vPWd0OihzPXUoUShyLE42KSwxNSkscz9ndC5nYygpPD1zLmdjKCk/bz1ndDpvPXM6KG89bmV3IGhlLEp0KHIsTjYsbykpKToobz1uZXcgaGUsSnQocix6NixvKSkpOihzPXUoUShyLChhZSgpLE42KSksMTUpLHM/TT9vPXM6KGd0PXUoUShyLHo2KSwxNSksZ3Q/cy5nYygpPD1ndC5nYygpP289czpvPWd0OihvPW5ldyBoZSxKdChyLHo2LG8pKSk6KG89bmV3IGhlLEp0KHIsTjYsbykpKSxvLkZjKHQpLEp0KHQsKGFlKCksWlYpLG4pLGUuZD09bj8ob2EoZSxudWxsKSxuLmUuYy5sZW5ndGgrbi5nLmMubGVuZ3RoPT0wJiZVbyhuLG51bGwpLFl1bihuKSk6KE9hKGUsbnVsbCksbi5lLmMubGVuZ3RoK24uZy5jLmxlbmd0aD09MCYmVW8obixudWxsKSksQWgoZS5hKX1mdW5jdGlvbiBpeG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpO2ZvcihNdD1uZXcgZGEodC5iLDApLEM9ZS5LYygpLEc9MCxrPXUoQy5QYigpLDE5KS5hLEt0PTAsbj1uZXcgSHMsX2U9bmV3IE8wO010LmI8TXQuZC5nYygpOyl7Zm9yKGd0PShabihNdC5iPE10LmQuZ2MoKSksdShNdC5kLlhiKE10LmM9TXQuYisrKSwyOSkpLFJ0PW5ldyBTKGd0LmEpO1J0LmE8UnQuYy5jLmxlbmd0aDspe2ZvcihTdD11KEooUnQpLDEwKSxIPW5ldyBhcihscihEcyhTdCkuYS5LYygpLG5ldyB6KSk7enIoSCk7KU09dShNcihIKSwxNyksX2UuYS56YyhNLF9lKTtmb3Ioaj1uZXcgYXIobHIoam8oU3QpLmEuS2MoKSxuZXcgeikpO3pyKGopOylNPXUoTXIoaiksMTcpLF9lLmEuQmMoTSkhPW51bGx9aWYoRysxPT1rKXtmb3Iocz1uZXcgU2godCksem0oTXQscyksbz1uZXcgU2godCksem0oTXQsbyksUWU9X2UuYS5lYygpLktjKCk7UWUuT2IoKTspV2U9dShRZS5QYigpLDE3KSxuLmEuX2IoV2UpfHwoKytLdCxuLmEuemMoV2UsbikpLGg9bmV3IFkwKHQpLEp0KGgsKFRlKCksY3MpLCh1YSgpLEI3KSksRW8oaCxzKSxEMChoLChWbigpLHoxKSksSz1uZXcgTWMsVW8oSyxoKSxCcyhLLCh2ZSgpLEJuKSksUm49bmV3IE1jLFVvKFJuLGgpLEJzKFJuLEhuKSxyPW5ldyBZMCh0KSxKdChyLGNzLEI3KSxFbyhyLG8pLEQwKHIsejEpLHR0PW5ldyBNYyxVbyh0dCxyKSxCcyh0dCxCbiksem49bmV3IE1jLFVvKHpuLHIpLEJzKHpuLEhuKSx1ZT1uZXcgVncsT2EodWUsV2UuYyksb2EodWUsSykscGk9bmV3IFZ3LE9hKHBpLFJuKSxvYShwaSx0dCksT2EoV2Usem4pLGQ9bmV3IHNtdChoLHIsdWUscGksV2UpLEp0KGgsKGFlKCksSXYpLGQpLEp0KHIsSXYsZCksaHI9dWUuYy5pLGhyLms9PXoxJiYodj11KFEoaHIsSXYpLDMwNSksdi5kPWQsZC5nPXYpO2lmKEMuT2IoKSlrPXUoQy5QYigpLDE5KS5hO2Vsc2UgYnJlYWt9KytHfXJldHVybiBwZShLdCl9ZnVuY3Rpb24gc3huKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSztmb3IoTT0wLHM9bmV3IG5yKCghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSk7cy5lIT1zLmkuZ2MoKTspcj11KGRyKHMpLDMzKSxqZShSZShxZShyLChUZSgpLHoyKSkpKXx8KChWdChxZShlLHdiKSkhPT1WdCgoVjAoKSx2YikpfHxWdChxZShlLHp5KSk9PT1WdCgoeDIoKSx2UykpfHxWdChxZShlLHp5KSk9PT1WdCgoeDIoKSx3UykpfHxqZShSZShxZShlLCR5KSkpfHxWdChxZShlLHE2KSkhPT1WdCgoaXYoKSxxNCkpKSYmIWplKFJlKHFlKHIsSmx0KSkpJiYod28ociwoYWUoKSxUYykscGUoTSkpLCsrTSksVGhlKHQscixuKSk7Zm9yKE09MCxrPW5ldyBucigoIWUuYiYmKGUuYj1uZXcgZmUoWXMsZSwxMiwzKSksZS5iKSk7ay5lIT1rLmkuZ2MoKTspZD11KGRyKGspLDc5KSwoVnQocWUoZSwoVGUoKSx3YikpKSE9PVZ0KChWMCgpLHZiKSl8fFZ0KHFlKGUsenkpKT09PVZ0KCh4MigpLHZTKSl8fFZ0KHFlKGUsenkpKT09PVZ0KCh4MigpLHdTKSl8fGplKFJlKHFlKGUsJHkpKSl8fFZ0KHFlKGUscTYpKSE9PVZ0KChpdigpLHE0KSkpJiYod28oZCwoYWUoKSxUYykscGUoTSkpLCsrTSksRz1lMChkKSxLPXRiKGQpLEM9amUoUmUocWUoRyxIeSkpKSxIPSFqZShSZShxZShkLHoyKSkpLGo9QyYmZnYoZCkmJmplKFJlKHFlKGQsajIpKSksbz1lcyhHKT09ZSYmZXMoRyk9PWVzKEspLGg9KGVzKEcpPT1lJiZLPT1lKV4oZXMoSyk9PWUmJkc9PWUpLEgmJiFqJiYoaHx8bykmJlB4dCh0LGQsZSxuKTtpZihlcyhlKSlmb3Iodj1uZXcgbnIoSFh0KGVzKGUpKSk7di5lIT12LmkuZ2MoKTspZD11KGRyKHYpLDc5KSxHPWUwKGQpLEc9PWUmJmZ2KGQpJiYoaj1qZShSZShxZShHLChUZSgpLEh5KSkpKSYmamUoUmUocWUoZCxqMikpKSxqJiZQeHQodCxkLGUsbikpfWZ1bmN0aW9uIGF4bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem4saHIscGksanM7Zm9yKHZyKG4sIk1pbldpZHRoIGxheWVyaW5nIiwxKSxIPWUuYixfZT1lLmEsanM9dShRKGUsKFRlKCksczl0KSksMTkpLmEsZD11KFEoZSxhOXQpLDE5KS5hLHQuYj1YdCh5ZShRKGUsVGYpKSksdC5kPWFzLFJ0PW5ldyBTKF9lKTtSdC5hPFJ0LmMuYy5sZW5ndGg7KU10PXUoSihSdCksMTApLE10Lms9PShWbigpLE9zKSYmKFJuPU10Lm8uYix0LmQ9Yi5NYXRoLm1pbih0LmQsUm4pKTtmb3IodC5kPWIuTWF0aC5tYXgoMSx0LmQpLFdlPV9lLmMubGVuZ3RoLHQuYz1OdChDcixYciwyNSxXZSwxNSwxKSx0LmY9TnQoQ3IsWHIsMjUsV2UsMTUsMSksdC5lPU50KGFhLHZvLDI1LFdlLDE1LDEpLGs9MCx0LmE9MCxLdD1uZXcgUyhfZSk7S3QuYTxLdC5jLmMubGVuZ3RoOylNdD11KEooS3QpLDEwKSxNdC5wPWsrKyx0LmNbTXQucF09JHJlKGpvKE10KSksdC5mW010LnBdPSRyZShEcyhNdCkpLHQuZVtNdC5wXT1NdC5vLmIvdC5kLHQuYSs9dC5lW010LnBdO2Zvcih0LmIvPXQuZCx0LmEvPVdlLHVlPUVibihfZSksWnMoX2UsTXZ0KG5ldyBTcCh0KSkpLEs9YXMsRz13aSxoPW51bGwscGk9anMsaHI9anMsbz1kLHM9ZCxqczwwJiYocGk9dShuX3QuYS56ZCgpLDE5KS5hLGhyPXUobl90LmIuemQoKSwxOSkuYSksZDwwJiYobz11KGVfdC5hLnpkKCksMTkpLmEscz11KGVfdC5iLnpkKCksMTkpLmEpLHpuPXBpO3puPD1ocjt6bisrKWZvcihyPW87cjw9cztyKyspUWU9WnluKHQsem4scixfZSx1ZSksZ3Q9WHQoeWUoUWUuYSkpLGo9dShRZS5iLDE1KSx0dD1qLmdjKCksKGd0PEt8fGd0PT1LJiZ0dDxHKSYmKEs9Z3QsRz10dCxoPWopO2ZvcihNPWguS2MoKTtNLk9iKCk7KXtmb3IoQz11KE0uUGIoKSwxNSksdj1uZXcgU2goZSksU3Q9Qy5LYygpO1N0Lk9iKCk7KU10PXUoU3QuUGIoKSwxMCksRW8oTXQsdik7SC5jW0guYy5sZW5ndGhdPXZ9WXN0KEgpLF9lLmM9TnQoUW4sRGUsMSwwLDUsMSksb3Iobil9ZnVuY3Rpb24gb3huKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbjtmb3IodC5iPWUsdC5hPXUoUShlLChUZSgpLEpDdCkpLDE5KS5hLHQuYz11KFEoZSxlOXQpLDE5KS5hLHQuYz09MCYmKHQuYz13aSksdHQ9bmV3IGRhKGUuYiwwKTt0dC5iPHR0LmQuZ2MoKTspe2ZvcihLPShabih0dC5iPHR0LmQuZ2MoKSksdSh0dC5kLlhiKHR0LmM9dHQuYisrKSwyOSkpLGQ9bmV3IGhlLEM9LTEsUnQ9LTEsU3Q9bmV3IFMoSy5hKTtTdC5hPFN0LmMuYy5sZW5ndGg7KU10PXUoSihTdCksMTApLGowKChLTSgpLG5ldyBhcihscihVMChNdCkuYS5LYygpLG5ldyB6KSkpKT49dC5hJiYocj1IeW4odCxNdCksQz1iLk1hdGgubWF4KEMsci5iKSxSdD1iLk1hdGgubWF4KFJ0LHIuZCksbGUoZCxuZXcgZmEoTXQscikpKTtmb3IoV2U9bmV3IGhlLGs9MDtrPEM7KytrKUhtKFdlLDAsKFpuKHR0LmI+MCksdHQuYS5YYih0dC5jPS0tdHQuYiksUWU9bmV3IFNoKHQuYiksem0odHQsUWUpLFpuKHR0LmI8dHQuZC5nYygpKSx0dC5kLlhiKHR0LmM9dHQuYisrKSxRZSkpO2ZvcihoPW5ldyBTKGQpO2guYTxoLmMuYy5sZW5ndGg7KWlmKHM9dShKKGgpLDQ2KSxIPXUocy5iLDU3MSkuYSwhIUgpZm9yKGo9bmV3IFMoSCk7ai5hPGouYy5jLmxlbmd0aDspTT11KEooaiksMTApLG40dCh0LE0sbVYsV2UpO2ZvcihuPW5ldyBoZSx2PTA7djxSdDsrK3YpbGUobiwoUm49bmV3IFNoKHQuYiksem0odHQsUm4pLFJuKSk7Zm9yKG89bmV3IFMoZCk7by5hPG8uYy5jLmxlbmd0aDspaWYocz11KEoobyksNDYpLF9lPXUocy5iLDU3MSkuYywhIV9lKWZvcih1ZT1uZXcgUyhfZSk7dWUuYTx1ZS5jLmMubGVuZ3RoOylLdD11KEoodWUpLDEwKSxuNHQodCxLdCx5VixuKX1mb3IoZ3Q9bmV3IGRhKGUuYiwwKTtndC5iPGd0LmQuZ2MoKTspRz0oWm4oZ3QuYjxndC5kLmdjKCkpLHUoZ3QuZC5YYihndC5jPWd0LmIrKyksMjkpKSxHLmEuYy5sZW5ndGg9PTAmJkNsKGd0KX1mdW5jdGlvbiBjeG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyO2lmKHZyKG4sIlNwbGluZSBlZGdlIHJvdXRpbmciLDEpLGUuYi5jLmxlbmd0aD09MCl7ZS5mLmE9MCxvcihuKTtyZXR1cm59TXQ9WHQoeWUoUShlLChUZSgpLHQ1KSkpKSxkPVh0KHllKFEoZSxxMikpKSxoPVh0KHllKFEoZSxKNCkpKSxndD11KFEoZSxzaHQpLDMzNiksV2U9Z3Q9PShjRSgpLFBTKSxfZT1YdCh5ZShRKGUsUUN0KSkpLHQuZD1lLHQuai5jPU50KFFuLERlLDEsMCw1LDEpLHQuYS5jPU50KFFuLERlLDEsMCw1LDEpLFh1KHQuayksdj11KE5lKGUuYiwwKSwyOSksQz1maih2LmEsKGtxKCksak8pKSxHPXUoTmUoZS5iLGUuYi5jLmxlbmd0aC0xKSwyOSksTT1maihHLmEsak8pLEs9bmV3IFMoZS5iKSx0dD1udWxsLGhyPTA7ZG97Zm9yKFN0PUsuYTxLLmMuYy5sZW5ndGg/dShKKEspLDI5KTpudWxsLFk1bih0LHR0LFN0KSxreW4odCksUWU9TUtlKE9jbihoJChSaShuZXcgVG4obnVsbCxuZXcgX24odC5pLDE2KSksbmV3IFhRKSxuZXcgS1EpKSksem49MCxSdD1ocixqPSF0dHx8QyYmdHQ9PXYsSD0hU3R8fE0mJlN0PT1HLFFlPjA/KGs9MCx0dCYmKGsrPWQpLGsrPShRZS0xKSpoLFN0JiYoays9ZCksV2UmJlN0JiYoaz1iLk1hdGgubWF4KGsscXduKFN0LGgsTXQsX2UpKSksazxNdCYmIWomJiFIJiYoem49KE10LWspLzIsaz1NdCksUnQrPWspOiFqJiYhSCYmKFJ0Kz1NdCksU3QmJm14dChTdCxSdCksdWU9bmV3IFModC5pKTt1ZS5hPHVlLmMuYy5sZW5ndGg7KUt0PXUoSih1ZSksMTI4KSxLdC5hLmM9aHIsS3QuYS5iPVJ0LWhyLEt0LkY9em4sS3QucD0hdHQ7THModC5hLHQuaSksaHI9UnQsU3QmJihocis9U3QuYy5hKSx0dD1TdCxqPUh9d2hpbGUoU3QpO2ZvcihzPW5ldyBTKHQuaik7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTcpLG89aXVuKHQsciksSnQociwoYWUoKSxaNCksbyksUm49bHZuKHQsciksSnQocixSMixSbik7ZS5mLmE9aHIsdC5kPW51bGwsb3Iobil9ZnVuY3Rpb24gVWhlKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdDtpZihLPXQuaSE9MCxTdD0hMSxndD1udWxsLHhsKHQuZSkpe2lmKEM9ZS5nYygpLEM+MCl7Zm9yKGo9QzwxMDA/bnVsbDpuZXcgRHAoQyksaz1uZXcgZ3l0KGUpLEc9ay5nLGd0PU50KENyLFhyLDI1LEMsMTUsMSkscj0wLFJ0PW5ldyBRdyhDKSxzPTA7czx0Lmk7KytzKXtkPXQuZ1tzXSxIPWQ7dDpmb3IoTXQ9MDtNdDwyOysrTXQpe2Zvcih2PUM7LS12Pj0wOylpZihIIT1udWxsP3lpKEgsR1t2XSk6VnQoSCk9PT1WdChHW3ZdKSl7Z3QubGVuZ3RoPD1yJiYodHQ9Z3QsZ3Q9TnQoQ3IsWHIsMjUsMipndC5sZW5ndGgsMTUsMSksRGModHQsMCxndCwwLHIpKSxndFtyKytdPXMsRHIoUnQsR1t2XSk7YnJlYWsgdH1pZihIPUgsVnQoSCk9PT1WdChkKSlicmVha319aWYoaz1SdCxHPVJ0LmcsQz1yLHI+Z3QubGVuZ3RoJiYodHQ9Z3QsZ3Q9TnQoQ3IsWHIsMjUsciwxNSwxKSxEYyh0dCwwLGd0LDAscikpLHI+MCl7Zm9yKFN0PSEwLG89MDtvPHI7KytvKUg9R1tvXSxqPVRZdCh0LHUoSCw3Miksaik7Zm9yKGg9cjstLWg+PTA7KWw2KHQsZ3RbaF0pO2lmKHIhPUMpe2ZvcihzPUM7LS1zPj1yOylsNihrLHMpO3R0PWd0LGd0PU50KENyLFhyLDI1LHIsMTUsMSksRGModHQsMCxndCwwLHIpfWU9a319fWVsc2UgZm9yKGU9JDFuKHQsZSkscz10Lmk7LS1zPj0wOyllLkhjKHQuZ1tzXSkmJihsNih0LHMpLFN0PSEwKTtpZihTdCl7aWYoZ3QhPW51bGwpe2ZvcihuPWUuZ2MoKSxNPW49PTE/RjkodCw0LGUuS2MoKS5QYigpLG51bGwsZ3RbMF0sSyk6RjkodCw2LGUsZ3QsZ3RbMF0sSyksaj1uPDEwMD9udWxsOm5ldyBEcChuKSxzPWUuS2MoKTtzLk9iKCk7KUg9cy5QYigpLGo9dnd0KHQsdShILDcyKSxqKTtqPyhqLkVpKE0pLGouRmkoKSk6bWkodC5lLE0pfWVsc2V7Zm9yKGo9SlplKGUuZ2MoKSkscz1lLktjKCk7cy5PYigpOylIPXMuUGIoKSxqPXZ3dCh0LHUoSCw3Miksaik7aiYmai5GaSgpfXJldHVybiEwfWVsc2UgcmV0dXJuITF9ZnVuY3Rpb24gdXhuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdDtmb3Iobj1uZXcgdnNlKGUpLG4uYXx8VW1uKGUpLGs9V3ZuKGUpLHY9bmV3IFV3LHR0PW5ldyBmdWUsSz1uZXcgUyhlLmEpO0suYTxLLmMuYy5sZW5ndGg7KWZvcihHPXUoSihLKSwxMCkscz1uZXcgYXIobHIoRHMoRykuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShNcihzKSwxNyksKHIuYy5pLms9PShWbigpLGtzKXx8ci5kLmkuaz09a3MpJiYoQz1RNG4odCxyLGssdHQpLGxuKHYsaHN0KEMuZCksQy5hKSk7Zm9yKGg9bmV3IGhlLFN0PXUoUShuLmMsKGFlKCksQnkpKSwyMSkuS2MoKTtTdC5PYigpOyl7c3dpdGNoKE10PXUoU3QuUGIoKSw2MSksSD10dC5jW010LmddLGo9dHQuYltNdC5nXSxkPXR0LmFbTXQuZ10sbz1udWxsLGd0PW51bGwsTXQuZyl7Y2FzZSA0Om89bmV3IGFoKHQuZC5hLEgsay5iLmEtdC5kLmEsai1IKSxndD1uZXcgYWgodC5kLmEsSCxkLGotSCksQncoayxuZXcgJGUoby5jK28uYixvLmQpKSxCdyhrLG5ldyAkZShvLmMrby5iLG8uZCtvLmEpKTticmVhaztjYXNlIDI6bz1uZXcgYWgoay5hLmEsSCx0LmMuYS1rLmEuYSxqLUgpLGd0PW5ldyBhaCh0LmMuYS1kLEgsZCxqLUgpLEJ3KGssbmV3ICRlKG8uYyxvLmQpKSxCdyhrLG5ldyAkZShvLmMsby5kK28uYSkpO2JyZWFrO2Nhc2UgMTpvPW5ldyBhaChILHQuZC5iLGotSCxrLmIuYi10LmQuYiksZ3Q9bmV3IGFoKEgsdC5kLmIsai1ILGQpLEJ3KGssbmV3ICRlKG8uYyxvLmQrby5hKSksQncoayxuZXcgJGUoby5jK28uYixvLmQrby5hKSk7YnJlYWs7Y2FzZSAzOm89bmV3IGFoKEgsay5hLmIsai1ILHQuYy5iLWsuYS5iKSxndD1uZXcgYWgoSCx0LmMuYi1kLGotSCxkKSxCdyhrLG5ldyAkZShvLmMsby5kKSksQncoayxuZXcgJGUoby5jK28uYixvLmQpKX1vJiYoTT1uZXcgbXF0LE0uZD1NdCxNLmI9byxNLmM9Z3QsTS5hPWIkKHUoQWkodixoc3QoTXQpKSwyMSkpLGguY1toLmMubGVuZ3RoXT1NKX1yZXR1cm4gTHMobi5iLGgpLG4uZD1kbG4oYjRuKGspKSxufWZ1bmN0aW9uIFdoZSh0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEs7aWYobi5wW2UucF09PW51bGwpe2Q9ITAsbi5wW2UucF09MCxoPWUsSz1uLm89PShDMSgpLEgyKT9DczphcztkbyBzPXQuYi5lW2gucF0sbz1oLmMuYS5jLmxlbmd0aCxuLm89PUgyJiZzPjB8fG4ubz09SDEmJnM8by0xPyh2PW51bGwsaz1udWxsLG4ubz09SDE/dj11KE5lKGguYy5hLHMrMSksMTApOnY9dShOZShoLmMuYSxzLTEpLDEwKSxrPW4uZ1t2LnBdLFdoZSh0LGssbiksSz10LmUuYmcoSyxlLGgpLG4ualtlLnBdPT1lJiYobi5qW2UucF09bi5qW2sucF0pLG4ualtlLnBdPT1uLmpbay5wXT8oRz1XMyh0LmQsaCx2KSxuLm89PUgxPyhyPVh0KG4ucFtlLnBdKSxNPVh0KG4ucFtrLnBdKStYdChuLmRbdi5wXSktdi5kLmQtRy1oLmQuYS1oLm8uYi1YdChuLmRbaC5wXSksZD8oZD0hMSxuLnBbZS5wXT1iLk1hdGgubWluKE0sSykpOm4ucFtlLnBdPWIuTWF0aC5taW4ocixiLk1hdGgubWluKE0sSykpKToocj1YdChuLnBbZS5wXSksTT1YdChuLnBbay5wXSkrWHQobi5kW3YucF0pK3Yuby5iK3YuZC5hK0craC5kLmQtWHQobi5kW2gucF0pLGQ/KGQ9ITEsbi5wW2UucF09Yi5NYXRoLm1heChNLEspKTpuLnBbZS5wXT1iLk1hdGgubWF4KHIsYi5NYXRoLm1heChNLEspKSkpOihHPVh0KHllKFEodC5hLChUZSgpLCR2KSkpKSxIPXZuZSh0LG4ualtlLnBdKSxDPXZuZSh0LG4ualtrLnBdKSxuLm89PUgxPyhqPVh0KG4ucFtlLnBdKStYdChuLmRbaC5wXSkraC5vLmIraC5kLmErRy0oWHQobi5wW2sucF0pK1h0KG4uZFt2LnBdKS12LmQuZCksblp0KEgsQyxqKSk6KGo9WHQobi5wW2UucF0pK1h0KG4uZFtoLnBdKS1oLmQuZC1YdChuLnBbay5wXSktWHQobi5kW3YucF0pLXYuby5iLXYuZC5hLUcsblp0KEgsQyxqKSkpKTpLPXQuZS5iZyhLLGUsaCksaD1uLmFbaC5wXTt3aGlsZShoIT1lKTtvS2UodC5lLGUpfX1mdW5jdGlvbiBseG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyO2ZvcihTdD1lLE10PW5ldyBVdyxSdD1uZXcgVXcsQz1LdyhTdCxFOHQpLHI9bmV3IFVYdCh0LG4sTXQsUnQpLFlnbihyLmEsci5iLHIuYyxyLmQsQyksdj0oX2U9TXQuaSxfZXx8KE10Lmk9bmV3IEszKE10LE10LmMpKSksUWU9di5LYygpO1FlLk9iKCk7KWZvcihXZT11KFFlLlBiKCksMjAyKSxzPXUoQWkoTXQsV2UpLDIxKSxLPXMuS2MoKTtLLk9iKCk7KWlmKEc9Sy5QYigpLEt0PXUobjQodC5kLEcpLDIwMiksS3QpZD0oIVdlLmUmJihXZS5lPW5ldyBDbihKaSxXZSwxMCw5KSksV2UuZSksRHIoZCxLdCk7ZWxzZSB0aHJvdyBoPVIwKFN0LEFkKSxqPUdkZStHK1VkZStoLEg9aitKRSxpdChuZXcgdWQoSCkpO2ZvcihrPSh1ZT1SdC5pLHVlfHwoUnQuaT1uZXcgSzMoUnQsUnQuYykpKSx6bj1rLktjKCk7em4uT2IoKTspZm9yKFJuPXUoem4uUGIoKSwyMDIpLG89dShBaShSdCxSbiksMjEpLGd0PW8uS2MoKTtndC5PYigpOylpZih0dD1ndC5QYigpLEt0PXUobjQodC5kLHR0KSwyMDIpLEt0KU09KCFSbi5nJiYoUm4uZz1uZXcgQ24oSmksUm4sOSwxMCkpLFJuLmcpLERyKE0sS3QpO2Vsc2UgdGhyb3cgaD1SMChTdCxBZCksaj1HZGUrdHQrVWRlK2gsSD1qK0pFLGl0KG5ldyB1ZChIKSk7IW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIuaSE9MCYmKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jLmkhPTApJiYoIW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIuaTw9MSYmKCFuLmMmJihuLmM9bmV3IENuKGJyLG4sNSw4KSksbi5jLmk8PTEpKSYmKCFuLmEmJihuLmE9bmV3IGZlKEppLG4sNiw2KSksbi5hKS5pPT0xJiYoaHI9dShBdCgoIW4uYSYmKG4uYT1uZXcgZmUoSmksbiw2LDYpKSxuLmEpLDApLDIwMiksIWJzdChocikmJiF3c3QoaHIpJiYodXooaHIsdShBdCgoIW4uYiYmKG4uYj1uZXcgQ24oYnIsbiw0LDcpKSxuLmIpLDApLDgyKSksbHooaHIsdShBdCgoIW4uYyYmKG4uYz1uZXcgQ24oYnIsbiw1LDgpKSxuLmMpLDApLDgyKSkpKX1mdW5jdGlvbiBoeG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuO2ZvcihTdD10LmEsUnQ9MCxLdD1TdC5sZW5ndGg7UnQ8S3Q7KytSdCl7Zm9yKE10PVN0W1J0XSxrPXdpLEM9d2ksRz1uZXcgUyhNdC5lKTtHLmE8Ry5jLmMubGVuZ3RoOylqPXUoSihHKSwxMCksaD1qLmM/Um8oai5jLmEsaiwwKTotMSxoPjA/KE09dShOZShqLmMuYSxoLTEpLDEwKSxXZT1XMyh0LmIsaixNKSx0dD1qLm4uYi1qLmQuZC0oTS5uLmIrTS5vLmIrTS5kLmErV2UpKTp0dD1qLm4uYi1qLmQuZCxrPWIuTWF0aC5taW4odHQsayksaDxqLmMuYS5jLmxlbmd0aC0xPyhNPXUoTmUoai5jLmEsaCsxKSwxMCksV2U9VzModC5iLGosTSksZ3Q9TS5uLmItTS5kLmQtKGoubi5iK2ouby5iK2ouZC5hK1dlKSk6Z3Q9MipqLm4uYixDPWIuTWF0aC5taW4oZ3QsQyk7Zm9yKHY9d2ksbz0hMSxzPXUoTmUoTXQuZSwwKSwxMCksUm49bmV3IFMocy5qKTtSbi5hPFJuLmMuYy5sZW5ndGg7KWZvcihRZT11KEooUm4pLDExKSxLPXMubi5iK1FlLm4uYitRZS5hLmIscj1uZXcgUyhRZS5lKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxNyksdWU9bi5jLGU9dWUuaS5uLmIrdWUubi5iK3VlLmEuYi1LLGIuTWF0aC5hYnMoZSk8Yi5NYXRoLmFicyh2KSYmYi5NYXRoLmFicyhlKTwoZTwwP2s6QykmJih2PWUsbz0hMCk7Zm9yKGQ9dShOZShNdC5lLE10LmUuYy5sZW5ndGgtMSksMTApLF9lPW5ldyBTKGQuaik7X2UuYTxfZS5jLmMubGVuZ3RoOylmb3IodWU9dShKKF9lKSwxMSksSz1kLm4uYit1ZS5uLmIrdWUuYS5iLHI9bmV3IFModWUuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksMTcpLFFlPW4uZCxlPVFlLmkubi5iK1FlLm4uYitRZS5hLmItSyxiLk1hdGguYWJzKGUpPGIuTWF0aC5hYnModikmJmIuTWF0aC5hYnMoZSk8KGU8MD9rOkMpJiYodj1lLG89ITApO2lmKG8mJnYhPTApZm9yKEg9bmV3IFMoTXQuZSk7SC5hPEguYy5jLmxlbmd0aDspaj11KEooSCksMTApLGoubi5iKz12fX1mdW5jdGlvbiBZaGUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2lmKFRsKHQuYSxlKSl7aWYoSTAodSh0cih0LmEsZSksNTMpLG4pKXJldHVybiAxfWVsc2Uga2kodC5hLGUsbmV3IEhzKTtpZihUbCh0LmEsbikpe2lmKEkwKHUodHIodC5hLG4pLDUzKSxlKSlyZXR1cm4tMX1lbHNlIGtpKHQuYSxuLG5ldyBIcyk7aWYoVGwodC5lLGUpKXtpZihJMCh1KHRyKHQuZSxlKSw1MyksbikpcmV0dXJuLTF9ZWxzZSBraSh0LmUsZSxuZXcgSHMpO2lmKFRsKHQuZSxuKSl7aWYoSTAodSh0cih0LmEsbiksNTMpLGUpKXJldHVybiAxfWVsc2Uga2kodC5lLG4sbmV3IEhzKTtpZih0LmM9PShWMCgpLEVodCl8fCFVcyhlLChhZSgpLFRjKSl8fCFVcyhuLChhZSgpLFRjKSkpe2lmKHY9dShQMnQob0p0KE1pdChSaShuZXcgVG4obnVsbCxuZXcgX24oZS5qLDE2KSksbmV3IE5MKSksbmV3IHFOKSksMTEpLEM9dShQMnQob0p0KE1pdChSaShuZXcgVG4obnVsbCxuZXcgX24obi5qLDE2KSksbmV3IHRRKSksbmV3IGVRKSksMTEpLHYmJkMpe2lmKGQ9di5pLGs9Qy5pLGQmJmQ9PWspe2ZvcihqPW5ldyBTKGQuaik7ai5hPGouYy5jLmxlbmd0aDspe2lmKE09dShKKGopLDExKSxNPT12KXJldHVybiBMRSh0LG4sZSksLTE7aWYoTT09QylyZXR1cm4gTEUodCxlLG4pLDF9cmV0dXJuIHB1KEZzdCh0LGUpLEZzdCh0LG4pKX1mb3IoRz10LmQsSz0wLHR0PUcubGVuZ3RoO0s8dHQ7KytLKXtpZihIPUdbS10sSD09ZClyZXR1cm4gTEUodCxuLGUpLC0xO2lmKEg9PWspcmV0dXJuIExFKHQsZSxuKSwxfX1pZighVXMoZSwoYWUoKSxUYykpfHwhVXMobixUYykpcmV0dXJuIHM9RnN0KHQsZSksaD1Gc3QodCxuKSxzPmg/TEUodCxlLG4pOkxFKHQsbixlKSxzPGg/LTE6cz5oPzE6MH1yZXR1cm4gcj11KFEoZSwoYWUoKSxUYykpLDE5KS5hLG89dShRKG4sVGMpLDE5KS5hLHI+bz9MRSh0LGUsbik6TEUodCxuLGUpLHI8bz8tMTpyPm8/MTowfWZ1bmN0aW9uIER4dCh0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQ7aWYoamUoUmUocWUoZSwodWkoKSxRRykpKSkpcmV0dXJuIHduKCksd24oKSxpbztpZihrPSghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKS5pIT0wLE09UXBuKGUpLEM9IU0uZGMoKSxrfHxDKXtpZihzPXUocWUoZSxPNyksMTQ5KSwhcyl0aHJvdyBpdChuZXcgUjMoIlJlc29sdmVkIGFsZ29yaXRobSBpcyBub3Qgc2V0OyBhcHBseSBhIExheW91dEFsZ29yaXRobVJlc29sdmVyIGJlZm9yZSBjb21wdXRpbmcgbGF5b3V0LiIpKTtpZihNdD10MnQocywoQ0UoKSxsVSkpLEppZShlKSwhayYmQyYmIU10KXJldHVybiB3bigpLHduKCksaW87aWYodj1uZXcgaGUsVnQocWUoZSxzNSkpPT09VnQoKEcwKCksc3ApKSYmKHQydChzLGNVKXx8dDJ0KHMsb1UpKSlmb3IoSD1GdWUodCxlKSxHPW5ldyBaaSxVYShHLCghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSk7Ry5iIT0wOylqPXUoRy5iPT0wP251bGw6KFpuKEcuYiE9MCksbGgoRyxHLmEuYSkpLDMzKSxKaWUoaiksZ3Q9VnQocWUoaixzNSkpPT09VnQoWlMpLGd0fHxvMihqLFlTKSYmIWdtdChzLHFlKGosTzcpKT8oZD1EeHQodCxqLG4sciksTHModixkKSx3byhqLHM1LFpTKSxadWUoaikpOlVhKEcsKCFqLmEmJihqLmE9bmV3IGZlKHJzLGosMTAsMTEpKSxqLmEpKTtlbHNlIGZvcihIPSghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKS5pLGg9bmV3IG5yKCghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSk7aC5lIT1oLmkuZ2MoKTspbz11KGRyKGgpLDMzKSxkPUR4dCh0LG8sbixyKSxMcyh2LGQpLFp1ZShvKTtmb3IodHQ9bmV3IFModik7dHQuYTx0dC5jLmMubGVuZ3RoOylLPXUoSih0dCksNzkpLHdvKEssUUcsKE5uKCksITApKTtyZXR1cm4gX2ZuKGUscyxSYyhyLEgpKSxHbW4odiksQyYmTXQ/TTood24oKSx3bigpLGlvKX1lbHNlIHJldHVybiB3bigpLHduKCksaW99ZnVuY3Rpb24gTEkodCxlLG4scixzLG8saCxkLHYpe3ZhciBrLEMsTSxqLEgsRyxLO3N3aXRjaChIPW4sQz1uZXcgWTAodiksRDAoQywoVm4oKSxrcykpLEp0KEMsKGFlKCksaUN0KSxoKSxKdChDLChUZSgpLGNzKSwodWEoKSxHYykpLEs9WHQoeWUodC5XZShWeSkpKSxKdChDLFZ5LEspLE09bmV3IE1jLFVvKE0sQyksZSE9RzEmJmUhPVRifHwocj49MD9IPWE2KGQpOkg9WUQoYTYoZCkpLHQuWWUoQzcsSCkpLGs9bmV3IENhLGo9ITEsdC5YZShSdik/KEgydChrLHUodC5XZShSdiksOCkpLGo9ITApOlJRZShrLGguYS8yLGguYi8yKSxILmcpe2Nhc2UgNDpKdChDLHV1LChkaCgpLGJiKSksSnQoQyx0RywoZDIoKSxVNCkpLEMuby5iPWguYixLPDAmJihDLm8uYT0tSyksQnMoTSwodmUoKSxIbikpLGp8fChrLmE9aC5hKSxrLmEtPWguYTticmVhaztjYXNlIDI6SnQoQyx1dSwoZGgoKSxqeSkpLEp0KEMsdEcsKGQyKCksdzcpKSxDLm8uYj1oLmIsSzwwJiYoQy5vLmE9LUspLEJzKE0sKHZlKCksQm4pKSxqfHwoay5hPTApO2JyZWFrO2Nhc2UgMTpKdChDLEIyLChxMCgpLFk0KSksQy5vLmE9aC5hLEs8MCYmKEMuby5iPS1LKSxCcyhNLCh2ZSgpLG1yKSksanx8KGsuYj1oLmIpLGsuYi09aC5iO2JyZWFrO2Nhc2UgMzpKdChDLEIyLChxMCgpLEY2KSksQy5vLmE9aC5hLEs8MCYmKEMuby5iPS1LKSxCcyhNLCh2ZSgpLFBuKSksanx8KGsuYj0wKX1pZihIMnQoTS5uLGspLEp0KEMsUnYsayksZT09WTJ8fGU9PWcwfHxlPT1HYyl7aWYoRz0wLGU9PVkyJiZ0LlhlKHRwKSlzd2l0Y2goSC5nKXtjYXNlIDE6Y2FzZSAyOkc9dSh0LldlKHRwKSwxOSkuYTticmVhaztjYXNlIDM6Y2FzZSA0Okc9LXUodC5XZSh0cCksMTkpLmF9ZWxzZSBzd2l0Y2goSC5nKXtjYXNlIDQ6Y2FzZSAyOkc9by5iLGU9PWcwJiYoRy89cy5iKTticmVhaztjYXNlIDE6Y2FzZSAzOkc9by5hLGU9PWcwJiYoRy89cy5hKX1KdChDLEZ2LEcpfXJldHVybiBKdChDLG9jLEgpLEN9ZnVuY3Rpb24gZnhuKHQpe3ZhciBlLG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZTtpZihuPVh0KHllKFEodC5hLmosKFRlKCksR0N0KSkpKSxuPC0xfHwhdC5hLml8fGp4KHUoUSh0LmEubyxjcyksOTgpKXx8S28odC5hLm8sKHZlKCksSG4pKS5nYygpPDImJktvKHQuYS5vLEJuKS5nYygpPDIpcmV0dXJuITA7aWYodC5hLmMuUmYoKSlyZXR1cm4hMTtmb3IoS3Q9MCxSdD0wLFN0PW5ldyBoZSx2PXQuYS5lLGs9MCxDPXYubGVuZ3RoO2s8QzsrK2spe2ZvcihkPXZba10saj1kLEg9MCxLPWoubGVuZ3RoO0g8SzsrK0gpe2lmKE09altIXSxNLms9PShWbigpLEhjKSl7U3QuY1tTdC5jLmxlbmd0aF09TTtjb250aW51ZX1mb3Iocj10LmJbTS5jLnBdW00ucF0sTS5rPT1rcz8oci5iPTEsdShRKE0sKGFlKCksX2kpKSwxMSkuaj09KHZlKCksSG4pJiYoUnQrPXIuYSkpOihRZT1LbyhNLCh2ZSgpLEJuKSksUWUuZGMoKXx8IWxudChRZSxuZXcgYlEpP3IuYz0xOihzPUtvKE0sSG4pLChzLmRjKCl8fCFsbnQocyxuZXcgcFEpKSYmKEt0Kz1yLmEpKSksaD1uZXcgYXIobHIoRHMoTSkuYS5LYygpLG5ldyB6KSk7enIoaCk7KW89dShNcihoKSwxNyksS3QrPXIuYyxSdCs9ci5iLFdlPW8uZC5pLERtdCh0LHIsV2UpO2ZvcihndD1EMShsdChjdChqMSwxKSxEZSwyMCwwLFtLbyhNLCh2ZSgpLFBuKSksS28oTSxtcildKSksX2U9bmV3IGFyKG5ldyBDMnQoZ3QuYS5sZW5ndGgsZ3QuYSkpO3pyKF9lKTspdWU9dShNcihfZSksMTEpLE10PXUoUSh1ZSwoYWUoKSxKdSkpLDEwKSxNdCYmKEt0Kz1yLmMsUnQrPXIuYixEbXQodCxyLE10KSl9Zm9yKEc9bmV3IFMoU3QpO0cuYTxHLmMuYy5sZW5ndGg7KWZvcihNPXUoSihHKSwxMCkscj10LmJbTS5jLnBdW00ucF0saD1uZXcgYXIobHIoRHMoTSkuYS5LYygpLG5ldyB6KSk7enIoaCk7KW89dShNcihoKSwxNyksS3QrPXIuYyxSdCs9ci5iLFdlPW8uZC5pLERtdCh0LHIsV2UpO1N0LmM9TnQoUW4sRGUsMSwwLDUsMSl9cmV0dXJuIGU9S3QrUnQsdHQ9ZT09MD9hczooS3QtUnQpL2UsdHQ+PW59ZnVuY3Rpb24gZHhuKCl7ZGJ0KCk7ZnVuY3Rpb24gdChyKXt2YXIgcz10aGlzO3RoaXMuZGlzcGF0Y2g9ZnVuY3Rpb24obyl7dmFyIGg9by5kYXRhO3N3aXRjaChoLmNtZCl7Y2FzZSJhbGdvcml0aG1zIjp2YXIgZD14M3QoKHduKCksbmV3IFQobmV3IHYxKEFiLmIpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTpkfSk7YnJlYWs7Y2FzZSJjYXRlZ29yaWVzIjp2YXIgdj14M3QoKHduKCksbmV3IFQobmV3IHYxKEFiLmMpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTp2fSk7YnJlYWs7Y2FzZSJvcHRpb25zIjp2YXIgaz14M3QoKHduKCksbmV3IFQobmV3IHYxKEFiLmQpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTprfSk7YnJlYWs7Y2FzZSJyZWdpc3RlciI6eTRuKGguYWxnb3JpdGhtcyksci5wb3N0TWVzc2FnZSh7aWQ6aC5pZH0pO2JyZWFrO2Nhc2UibGF5b3V0Ijp0M24oaC5ncmFwaCxoLmxheW91dE9wdGlvbnN8fHt9LGgub3B0aW9uc3x8e30pLHIucG9zdE1lc3NhZ2Uoe2lkOmguaWQsZGF0YTpoLmdyYXBofSk7YnJlYWt9fSx0aGlzLnNhdmVEaXNwYXRjaD1mdW5jdGlvbihvKXt0cnl7cy5kaXNwYXRjaChvKX1jYXRjaChoKXtyLnBvc3RNZXNzYWdlKHtpZDpvLmRhdGEuaWQsZXJyb3I6aH0pfX19ZnVuY3Rpb24gZShyKXt2YXIgcz10aGlzO3RoaXMuZGlzcGF0Y2hlcj1uZXcgdCh7cG9zdE1lc3NhZ2U6ZnVuY3Rpb24obyl7cy5vbm1lc3NhZ2Uoe2RhdGE6b30pfX0pLHRoaXMucG9zdE1lc3NhZ2U9ZnVuY3Rpb24obyl7c2V0VGltZW91dChmdW5jdGlvbigpe3MuZGlzcGF0Y2hlci5zYXZlRGlzcGF0Y2goe2RhdGE6b30pfSwwKX19aWYodHlwZW9mIGRvY3VtZW50PT09X290JiZ0eXBlb2Ygc2VsZiE9PV9vdCl7dmFyIG49bmV3IHQoc2VsZik7c2VsZi5vbm1lc3NhZ2U9bi5zYXZlRGlzcGF0Y2h9ZWxzZSB0eXBlb2YgcCE9PV9vdCYmcC5leHBvcnRzJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHAuZXhwb3J0cz17ZGVmYXVsdDplLFdvcmtlcjplfSl9ZnVuY3Rpb24gZ3huKHQpe3QuTnx8KHQuTj0hMCx0LmI9aWModCwwKSxucyh0LmIsMCksbnModC5iLDEpLG5zKHQuYiwyKSx0LmJiPWljKHQsMSksbnModC5iYiwwKSxucyh0LmJiLDEpLHQuZmI9aWModCwyKSxucyh0LmZiLDMpLG5zKHQuZmIsNCksRmkodC5mYiw1KSx0LnFiPWljKHQsMyksbnModC5xYiwwKSxGaSh0LnFiLDEpLEZpKHQucWIsMiksbnModC5xYiwzKSxucyh0LnFiLDQpLEZpKHQucWIsNSksbnModC5xYiw2KSx0LmE9b2kodCw0KSx0LmM9b2kodCw1KSx0LmQ9b2kodCw2KSx0LmU9b2kodCw3KSx0LmY9b2kodCw4KSx0Lmc9b2kodCw5KSx0Lmk9b2kodCwxMCksdC5qPW9pKHQsMTEpLHQuaz1vaSh0LDEyKSx0Lm49b2kodCwxMyksdC5vPW9pKHQsMTQpLHQucD1vaSh0LDE1KSx0LnE9b2kodCwxNiksdC5zPW9pKHQsMTcpLHQucj1vaSh0LDE4KSx0LnQ9b2kodCwxOSksdC51PW9pKHQsMjApLHQudj1vaSh0LDIxKSx0Lnc9b2kodCwyMiksdC5CPW9pKHQsMjMpLHQuQT1vaSh0LDI0KSx0LkM9b2kodCwyNSksdC5EPW9pKHQsMjYpLHQuRj1vaSh0LDI3KSx0Lkc9b2kodCwyOCksdC5IPW9pKHQsMjkpLHQuSj1vaSh0LDMwKSx0Lkk9b2kodCwzMSksdC5LPW9pKHQsMzIpLHQuTT1vaSh0LDMzKSx0Lkw9b2kodCwzNCksdC5QPW9pKHQsMzUpLHQuUT1vaSh0LDM2KSx0LlI9b2kodCwzNyksdC5TPW9pKHQsMzgpLHQuVD1vaSh0LDM5KSx0LlU9b2kodCw0MCksdC5WPW9pKHQsNDEpLHQuWD1vaSh0LDQyKSx0Llc9b2kodCw0MyksdC5ZPW9pKHQsNDQpLHQuWj1vaSh0LDQ1KSx0LiQ9b2kodCw0NiksdC5fPW9pKHQsNDcpLHQuYWI9b2kodCw0OCksdC5jYj1vaSh0LDQ5KSx0LmRiPW9pKHQsNTApLHQuZWI9b2kodCw1MSksdC5nYj1vaSh0LDUyKSx0LmhiPW9pKHQsNTMpLHQuaWI9b2kodCw1NCksdC5qYj1vaSh0LDU1KSx0LmtiPW9pKHQsNTYpLHQubGI9b2kodCw1NyksdC5tYj1vaSh0LDU4KSx0Lm5iPW9pKHQsNTkpLHQub2I9b2kodCw2MCksdC5wYj1vaSh0LDYxKSl9ZnVuY3Rpb24gcHhuKHQsZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdDtpZihNdD0wLGUuZi5hPT0wKWZvcih0dD1uZXcgUyh0KTt0dC5hPHR0LmMuYy5sZW5ndGg7KUc9dShKKHR0KSwxMCksTXQ9Yi5NYXRoLm1heChNdCxHLm4uYStHLm8uYStHLmQuYyk7ZWxzZSBNdD1lLmYuYS1lLmMuYTtmb3IoTXQtPWUuYy5hLEs9bmV3IFModCk7Sy5hPEsuYy5jLmxlbmd0aDspe3N3aXRjaChHPXUoSihLKSwxMCksREMoRy5uLE10LUcuby5hKSxOd3QoRy5mKSxqc2UoRyksKEcucT9HLnE6KHduKCksd24oKSx1MCkpLl9iKChUZSgpLFV5KSkmJkRDKHUoUShHLFV5KSw4KSxNdC1HLm8uYSksdShRKEcsSWQpLDI0OCkuZyl7Y2FzZSAxOkp0KEcsSWQsKHQwKCksVU8pKTticmVhaztjYXNlIDI6SnQoRyxJZCwodDAoKSxHTykpfWZvcihndD1HLm8sUnQ9bmV3IFMoRy5qKTtSdC5hPFJ0LmMuYy5sZW5ndGg7KXtmb3IoU3Q9dShKKFJ0KSwxMSksREMoU3QubixndC5hLVN0Lm8uYSksREMoU3QuYSxTdC5vLmEpLEJzKFN0LE9uZShTdC5qKSksaD11KFEoU3QsdHApLDE5KSxoJiZKdChTdCx0cCxwZSgtaC5hKSksbz1uZXcgUyhTdC5nKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHM9dShKKG8pLDE3KSxyPWVpKHMuYSwwKTtyLmIhPXIuZC5jOyluPXUodGkociksOCksbi5hPU10LW4uYTtpZihrPXUoUShzLFNvKSw3NCksaylmb3Iodj1laShrLDApO3YuYiE9di5kLmM7KWQ9dSh0aSh2KSw4KSxkLmE9TXQtZC5hO2ZvcihqPW5ldyBTKHMuYik7ai5hPGouYy5jLmxlbmd0aDspQz11KEooaiksNzApLERDKEMubixNdC1DLm8uYSl9Zm9yKEg9bmV3IFMoU3QuZik7SC5hPEguYy5jLmxlbmd0aDspQz11KEooSCksNzApLERDKEMubixTdC5vLmEtQy5vLmEpfWZvcihHLms9PShWbigpLGtzKSYmKEp0KEcsKGFlKCksb2MpLE9uZSh1KFEoRyxvYyksNjEpKSkseGduKEcpKSxNPW5ldyBTKEcuYik7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksNzApLGpzZShDKSxEQyhDLm4sZ3QuYS1DLm8uYSl9fWZ1bmN0aW9uIGJ4bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQ7aWYoTXQ9MCxlLmYuYj09MClmb3IodHQ9bmV3IFModCk7dHQuYTx0dC5jLmMubGVuZ3RoOylHPXUoSih0dCksMTApLE10PWIuTWF0aC5tYXgoTXQsRy5uLmIrRy5vLmIrRy5kLmEpO2Vsc2UgTXQ9ZS5mLmItZS5jLmI7Zm9yKE10LT1lLmMuYixLPW5ldyBTKHQpO0suYTxLLmMuYy5sZW5ndGg7KXtzd2l0Y2goRz11KEooSyksMTApLE1DKEcubixNdC1HLm8uYiksQnd0KEcuZiksJHNlKEcpLChHLnE/Ry5xOih3bigpLHduKCksdTApKS5fYigoVGUoKSxVeSkpJiZNQyh1KFEoRyxVeSksOCksTXQtRy5vLmIpLHUoUShHLElkKSwyNDgpLmcpe2Nhc2UgMzpKdChHLElkLCh0MCgpLEdHKSk7YnJlYWs7Y2FzZSA0Okp0KEcsSWQsKHQwKCksV0cpKX1mb3IoZ3Q9Ry5vLFJ0PW5ldyBTKEcuaik7UnQuYTxSdC5jLmMubGVuZ3RoOyl7Zm9yKFN0PXUoSihSdCksMTEpLE1DKFN0Lm4sZ3QuYi1TdC5vLmIpLE1DKFN0LmEsU3Quby5iKSxCcyhTdCxQbmUoU3QuaikpLGg9dShRKFN0LHRwKSwxOSksaCYmSnQoU3QsdHAscGUoLWguYSkpLG89bmV3IFMoU3QuZyk7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihzPXUoSihvKSwxNykscj1laShzLmEsMCk7ci5iIT1yLmQuYzspbj11KHRpKHIpLDgpLG4uYj1NdC1uLmI7aWYoaz11KFEocyxTbyksNzQpLGspZm9yKHY9ZWkoaywwKTt2LmIhPXYuZC5jOylkPXUodGkodiksOCksZC5iPU10LWQuYjtmb3Ioaj1uZXcgUyhzLmIpO2ouYTxqLmMuYy5sZW5ndGg7KUM9dShKKGopLDcwKSxNQyhDLm4sTXQtQy5vLmIpfWZvcihIPW5ldyBTKFN0LmYpO0guYTxILmMuYy5sZW5ndGg7KUM9dShKKEgpLDcwKSxNQyhDLm4sU3Quby5iLUMuby5iKX1mb3IoRy5rPT0oVm4oKSxrcykmJihKdChHLChhZSgpLG9jKSxQbmUodShRKEcsb2MpLDYxKSkpLEhsbihHKSksTT1uZXcgUyhHLmIpO00uYTxNLmMuYy5sZW5ndGg7KUM9dShKKE0pLDcwKSwkc2UoQyksTUMoQy5uLGd0LmItQy5vLmIpfX1mdW5jdGlvbiB3eG4odCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEg7Zm9yKE09ITEsaz10KzEsQz0oQW4odCxlLmMubGVuZ3RoKSx1KGUuY1t0XSwyMDApKSxoPUMuYSxkPW51bGwsbz0wO288Qy5hLmMubGVuZ3RoO28rKylpZihzPShBbihvLGguYy5sZW5ndGgpLHUoaC5jW29dLDE4NykpLCFzLmMpe2lmKHMuYi5jLmxlbmd0aD09MCl7R2QoKSxzSShDLHMpLC0tbyxNPSEwO2NvbnRpbnVlfWlmKHMua3x8KGQmJm5xKGQpLGQ9bmV3IHF2dChkP2QuZStkLmQrcjowLEMuZixyKSx0SShzLGQuZStkLmQsQy5mKSxsZShDLmQsZCkscHl0KGQscykscy5rPSEwKSx2PW51bGwsdj0oSD1udWxsLG88Qy5hLmMubGVuZ3RoLTE/SD11KE5lKEMuYSxvKzEpLDE4Nyk6azxlLmMubGVuZ3RoJiYoQW4oayxlLmMubGVuZ3RoKSx1KGUuY1trXSwyMDApKS5hLmMubGVuZ3RoIT0wJiYoSD11KE5lKChBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLmEsMCksMTg3KSksSCksaj0hMSx2JiYoaj0heWkodi5qLEMpKSx2KXtpZih2LmIuYy5sZW5ndGg9PTApe3NJKEMsdik7YnJlYWt9ZWxzZSB2RChzLG4tcy5zKSxucShzLnEpLE09TXxrZ24oQyxzLHYsbixyKTtpZih2LmIuYy5sZW5ndGg9PTApZm9yKHNJKChBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLHYpLHY9bnVsbDtlLmMubGVuZ3RoPmsmJihBbihrLGUuYy5sZW5ndGgpLHUoZS5jW2tdLDIwMCkpLmEuYy5sZW5ndGg9PTA7KW11KGUsKEFuKGssZS5jLmxlbmd0aCksZS5jW2tdKSk7aWYoIXYpey0tbztjb250aW51ZX1pZihleW4oZSxDLHMsdixqLG4sayxyKSl7TT0hMDtjb250aW51ZX1pZihqKXtpZihjM24oZSxDLHMsdixuLGsscikpe009ITA7Y29udGludWV9ZWxzZSBpZihZeXQoQyxzKSl7cy5jPSEwLE09ITA7Y29udGludWV9fWVsc2UgaWYoWXl0KEMscykpe3MuYz0hMCxNPSEwO2NvbnRpbnVlfWlmKE0pY29udGludWV9aWYoWXl0KEMscykpe3MuYz0hMCxNPSEwLHYmJih2Lms9ITEpO2NvbnRpbnVlfWVsc2UgbnEocy5xKX1yZXR1cm4gTX1mdW5jdGlvbiB6YXQodCxlLG4scixzLG8saCl7dmFyIGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpLGpzO2ZvcihLPTAsUm49MCxrPW5ldyBTKHQuYik7ay5hPGsuYy5jLmxlbmd0aDspdj11KEooayksMTU3KSx2LmMmJkVoZSh2LmMpLEs9Yi5NYXRoLm1heChLLFJ1KHYpKSxSbis9UnUodikqRWwodik7Zm9yKHR0PVJuL3QuYi5jLmxlbmd0aCxRZT1PZG4odC5iLHR0KSxSbis9dC5iLmMubGVuZ3RoKlFlLEs9Yi5NYXRoLm1heChLLGIuTWF0aC5zcXJ0KFJuKmgpKStuLmIscGk9bi5iLGpzPW4uZCxIPTAsTT1uLmIrbi5jLFdlPW5ldyBaaSxyaShXZSxwZSgwKSksdWU9bmV3IFppLEM9bmV3IGRhKHQuYiwwKSxHPW51bGwsZD1uZXcgaGU7Qy5iPEMuZC5nYygpOyl2PShabihDLmI8Qy5kLmdjKCkpLHUoQy5kLlhiKEMuYz1DLmIrKyksMTU3KSksaHI9UnUodiksaj1FbCh2KSxwaStocj5LJiYobyYmKFpiKHVlLEgpLFpiKFdlLHBlKEMuYi0xKSksbGUodC5kLEcpLGQuYz1OdChRbixEZSwxLDAsNSwxKSkscGk9bi5iLGpzKz1IK2UsSD0wLE09Yi5NYXRoLm1heChNLG4uYituLmMraHIpKSxkLmNbZC5jLmxlbmd0aF09dixoc2UodixwaSxqcyksTT1iLk1hdGgubWF4KE0scGkraHIrbi5jKSxIPWIuTWF0aC5tYXgoSCxqKSxwaSs9aHIrZSxHPXY7aWYoTHModC5hLGQpLGxlKHQuZCx1KE5lKGQsZC5jLmxlbmd0aC0xKSwxNTcpKSxNPWIuTWF0aC5tYXgoTSxyKSx6bj1qcytIK24uYSx6bjxzJiYoSCs9cy16bix6bj1zKSxvKWZvcihwaT1uLmIsQz1uZXcgZGEodC5iLDApLFpiKFdlLHBlKHQuYi5jLmxlbmd0aCkpLF9lPWVpKFdlLDApLE10PXUodGkoX2UpLDE5KS5hLFpiKHVlLEgpLEt0PWVpKHVlLDApLFJ0PTA7Qy5iPEMuZC5nYygpOylDLmI9PU10JiYocGk9bi5iLFJ0PVh0KHllKHRpKEt0KSkpLE10PXUodGkoX2UpLDE5KS5hKSx2PShabihDLmI8Qy5kLmdjKCkpLHUoQy5kLlhiKEMuYz1DLmIrKyksMTU3KSksR2llKHYsUnQpLEMuYj09TXQmJihndD1NLXBpLW4uYyxTdD1SdSh2KSxWaWUodixndCksZ2llKHYsKGd0LVN0KS8yLDApKSxwaSs9UnUodikrZTtyZXR1cm4gbmV3ICRlKE0sem4pfWZ1bmN0aW9uIHZ4bih0KXt2YXIgZSxuLHIscyxvO3N3aXRjaChlPXQuYyxvPW51bGwsZSl7Y2FzZSA2OnJldHVybiB0LlZsKCk7Y2FzZSAxMzpyZXR1cm4gdC5XbCgpO2Nhc2UgMjM6cmV0dXJuIHQuTmwoKTtjYXNlIDIyOnJldHVybiB0LlNsKCk7Y2FzZSAxODpyZXR1cm4gdC5QbCgpO2Nhc2UgODpmaSh0KSxvPShnaSgpLEFMdCk7YnJlYWs7Y2FzZSA5OnJldHVybiB0LnZsKCEwKTtjYXNlIDE5OnJldHVybiB0LndsKCk7Y2FzZSAxMDpzd2l0Y2godC5hKXtjYXNlIDEwMDpjYXNlIDY4OmNhc2UgMTE5OmNhc2UgODc6Y2FzZSAxMTU6Y2FzZSA4MzpyZXR1cm4gbz10LnVsKHQuYSksZmkodCksbztjYXNlIDEwMTpjYXNlIDEwMjpjYXNlIDExMDpjYXNlIDExNDpjYXNlIDExNjpjYXNlIDExNzpjYXNlIDExODpjYXNlIDEyMDpuPXQudGwoKSxuPEthP289KGdpKCksZ2koKSxuZXcgWWQoMCxuKSk6bz16S3QobDN0KG4pKTticmVhaztjYXNlIDk5OnJldHVybiB0LkZsKCk7Y2FzZSA2NzpyZXR1cm4gdC5BbCgpO2Nhc2UgMTA1OnJldHVybiB0LklsKCk7Y2FzZSA3MzpyZXR1cm4gdC5CbCgpO2Nhc2UgMTAzOnJldHVybiB0LkdsKCk7Y2FzZSA4ODpyZXR1cm4gdC5DbCgpO2Nhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OnJldHVybiB0LnhsKCk7Y2FzZSA4MDpjYXNlIDExMjppZihvPXU1dCh0LHQuYSksIW8pdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGN1dCkpKSk7YnJlYWs7ZGVmYXVsdDpvPWFLdCh0LmEpfWZpKHQpO2JyZWFrO2Nhc2UgMDppZih0LmE9PTkzfHx0LmE9PTEyM3x8dC5hPT0xMjUpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEk4dCkpKSk7bz1hS3QodC5hKSxyPXQuYSxmaSh0KSwociY2NDUxMik9PVJJJiZ0LmM9PTAmJih0LmEmNjQ1MTIpPT01NjMyMCYmKHM9TnQoeGgseWQsMjUsMiwxNSwxKSxzWzBdPXImeXMsc1sxXT10LmEmeXMsbz1LbnQoekt0KE1oKHMsMCxzLmxlbmd0aCkpLDApLGZpKHQpKTticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyBOcihxcigoUHIoKSxJOHQpKSkpfXJldHVybiBvfWZ1bmN0aW9uIG14bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7aWYocj1uZXcgaGUscz13aSxvPXdpLGg9d2ksbilmb3Iocz10LmYuYSxLPW5ldyBTKGUuaik7Sy5hPEsuYy5jLmxlbmd0aDspZm9yKEc9dShKKEspLDExKSx2PW5ldyBTKEcuZyk7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTcpLGQuYS5iIT0wJiYoQz11KHdudChkLmEpLDgpLEMuYTxzJiYobz1zLUMuYSxoPXdpLHIuYz1OdChRbixEZSwxLDAsNSwxKSxzPUMuYSksQy5hPD1zJiYoci5jW3IuYy5sZW5ndGhdPWQsZC5hLmI+MSYmKGg9Yi5NYXRoLm1pbihoLGIuTWF0aC5hYnModShaZihkLmEsMSksOCkuYi1DLmIpKSkpKTtlbHNlIGZvcihLPW5ldyBTKGUuaik7Sy5hPEsuYy5jLmxlbmd0aDspZm9yKEc9dShKKEspLDExKSx2PW5ldyBTKEcuZSk7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTcpLGQuYS5iIT0wJiYoaj11KEFqKGQuYSksOCksai5hPnMmJihvPWouYS1zLGg9d2ksci5jPU50KFFuLERlLDEsMCw1LDEpLHM9ai5hKSxqLmE+PXMmJihyLmNbci5jLmxlbmd0aF09ZCxkLmEuYj4xJiYoaD1iLk1hdGgubWluKGgsYi5NYXRoLmFicyh1KFpmKGQuYSxkLmEuYi0yKSw4KS5iLWouYikpKSkpO2lmKHIuYy5sZW5ndGghPTAmJm8+ZS5vLmEvMiYmaD5lLm8uYi8yKXtmb3IoSD1uZXcgTWMsVW8oSCxlKSxCcyhILCh2ZSgpLFBuKSksSC5uLmE9ZS5vLmEvMixndD1uZXcgTWMsVW8oZ3QsZSksQnMoZ3QsbXIpLGd0Lm4uYT1lLm8uYS8yLGd0Lm4uYj1lLm8uYix2PW5ldyBTKHIpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDE3KSxuPyhrPXUoT250KGQuYSksOCksdHQ9ZC5hLmI9PTA/XzEoZC5kKTp1KHdudChkLmEpLDgpLHR0LmI+PWsuYj9PYShkLGd0KTpPYShkLEgpKTooaz11KGhlbihkLmEpLDgpLHR0PWQuYS5iPT0wP18xKGQuYyk6dShBaihkLmEpLDgpLHR0LmI+PWsuYj9vYShkLGd0KTpvYShkLEgpKSxNPXUoUShkLChUZSgpLFNvKSksNzQpLE0mJmF5KE0saywhMCk7ZS5uLmE9cy1lLm8uYS8yfX1mdW5jdGlvbiB5eG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpLGpzLFpsLFhoO2lmKFJuPW51bGwsaHI9ZSx6bj1aWnQodCxZWnQobiksaHIpLEc5KHpuLFIwKGhyLEFkKSkscGk9dShuNCh0LmcsZjYoQjAoaHIsWGN0KSkpLDMzKSxqPUIwKGhyLCJzb3VyY2VQb3J0Iikscj1udWxsLGomJihyPWY2KGopKSxqcz11KG40KHQuaixyKSwxMTgpLCFwaSl0aHJvdyBkPXBFKGhyKSxHPSJBbiBlZGdlIG11c3QgaGF2ZSBhIHNvdXJjZSBub2RlIChlZGdlIGlkOiAnIitkLEs9RytKRSxpdChuZXcgdWQoSykpO2lmKGpzJiYhcGQoVDEoanMpLHBpKSl0aHJvdyB2PVIwKGhyLEFkKSx0dD0iVGhlIHNvdXJjZSBwb3J0IG9mIGFuIGVkZ2UgbXVzdCBiZSBhIHBvcnQgb2YgdGhlIGVkZ2UncyBzb3VyY2Ugbm9kZSAoZWRnZSBpZDogJyIrdixndD10dCtKRSxpdChuZXcgdWQoZ3QpKTtpZihXZT0oIXpuLmImJih6bi5iPW5ldyBDbihicix6biw0LDcpKSx6bi5iKSxvPW51bGwsanM/bz1qczpvPXBpLERyKFdlLG8pLFpsPXUobjQodC5nLGY2KEIwKGhyLE04dCkpKSwzMyksSD1CMChociwidGFyZ2V0UG9ydCIpLHM9bnVsbCxIJiYocz1mNihIKSksWGg9dShuNCh0LmoscyksMTE4KSwhWmwpdGhyb3cgTT1wRShociksTXQ9IkFuIGVkZ2UgbXVzdCBoYXZlIGEgdGFyZ2V0IG5vZGUgKGVkZ2UgaWQ6ICciK00sU3Q9TXQrSkUsaXQobmV3IHVkKFN0KSk7aWYoWGgmJiFwZChUMShYaCksWmwpKXRocm93IGs9UjAoaHIsQWQpLFJ0PSJUaGUgdGFyZ2V0IHBvcnQgb2YgYW4gZWRnZSBtdXN0IGJlIGEgcG9ydCBvZiB0aGUgZWRnZSdzIHRhcmdldCBub2RlIChlZGdlIGlkOiAnIitrLEt0PVJ0K0pFLGl0KG5ldyB1ZChLdCkpO2lmKFFlPSghem4uYyYmKHpuLmM9bmV3IENuKGJyLHpuLDUsOCkpLHpuLmMpLGg9bnVsbCxYaD9oPVhoOmg9WmwsRHIoUWUsaCksKCF6bi5iJiYoem4uYj1uZXcgQ24oYnIsem4sNCw3KSksem4uYikuaT09MHx8KCF6bi5jJiYoem4uYz1uZXcgQ24oYnIsem4sNSw4KSksem4uYykuaT09MCl0aHJvdyBDPVIwKGhyLEFkKSx1ZT1WZGUrQyxfZT11ZStKRSxpdChuZXcgdWQoX2UpKTtyZXR1cm4gbHEoaHIsem4pLGwybihocix6biksUm49TGl0KHQsaHIsem4pLFJufWZ1bmN0aW9uIEtoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm47cmV0dXJuIE09RXluKGJ1KHQsKHZlKCksVTEpKSxlKSxHPWQ0KGJ1KHQsTWYpLGUpLFJ0PWQ0KGJ1KHQsS2wpLGUpLFdlPXJxKGJ1KHQsVmgpLGUpLGo9cnEoYnUodCxtaCksZSksTXQ9ZDQoYnUodCxEZiksZSksSz1kNChidSh0LGVsKSxlKSx1ZT1kNChidSh0LFhsKSxlKSxLdD1kNChidSh0LHloKSxlKSxRZT1ycShidSh0LGx1KSxlKSxndD1kNChidSh0LEF1KSxlKSxTdD1kNChidSh0LG5sKSxlKSxfZT1kNChidSh0LFN1KSxlKSxSbj1ycShidSh0LEx1KSxlKSxIPXJxKGJ1KHQsVnUpLGUpLHR0PWQ0KGJ1KHQsVWMpLGUpLG49czQobHQoY3QoYWEsMSksdm8sMjUsMTUsW010LmEsV2UuYSx1ZS5hLFJuLmFdKSkscj1zNChsdChjdChhYSwxKSx2bywyNSwxNSxbRy5hLE0uYSxSdC5hLHR0LmFdKSkscz1ndC5hLG89czQobHQoY3QoYWEsMSksdm8sMjUsMTUsW0suYSxqLmEsS3QuYSxILmFdKSksaz1zNChsdChjdChhYSwxKSx2bywyNSwxNSxbTXQuYixHLmIsSy5iLFN0LmJdKSksdj1zNChsdChjdChhYSwxKSx2bywyNSwxNSxbV2UuYixNLmIsai5iLHR0LmJdKSksQz1RZS5iLGQ9czQobHQoY3QoYWEsMSksdm8sMjUsMTUsW3VlLmIsUnQuYixLdC5iLF9lLmJdKSksQmcoYnUodCxVMSksbitzLGsrQyksQmcoYnUodCxVYyksbitzLGsrQyksQmcoYnUodCxNZiksbitzLDApLEJnKGJ1KHQsS2wpLG4rcyxrK0MrdiksQmcoYnUodCxWaCksMCxrK0MpLEJnKGJ1KHQsbWgpLG4rcytyLGsrQyksQmcoYnUodCxlbCksbitzK3IsMCksQmcoYnUodCxYbCksMCxrK0MrdiksQmcoYnUodCx5aCksbitzK3IsaytDK3YpLEJnKGJ1KHQsbHUpLDAsayksQmcoYnUodCxBdSksbiwwKSxCZyhidSh0LFN1KSwwLGsrQyt2KSxCZyhidSh0LFZ1KSxuK3MrciwwKSxoPW5ldyBDYSxoLmE9czQobHQoY3QoYWEsMSksdm8sMjUsMTUsW24rcitzK28sUWUuYSxTdC5hLF9lLmFdKSksaC5iPXM0KGx0KGN0KGFhLDEpLHZvLDI1LDE1LFtrK3YrQytkLGd0LmIsUm4uYixILmJdKSksaH1mdW5jdGlvbiB4eG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2ZvcihLPW5ldyBoZSxqPW5ldyBTKHQuZC5iKTtqLmE8ai5jLmMubGVuZ3RoOylmb3IoTT11KEooaiksMjkpLEc9bmV3IFMoTS5hKTtHLmE8Ry5jLmMubGVuZ3RoOyl7Zm9yKEg9dShKKEcpLDEwKSxzPXUodHIodC5mLEgpLDU3KSx2PW5ldyBhcihscihEcyhIKS5hLktjKCksbmV3IHopKTt6cih2KTspaWYoaD11KE1yKHYpLDE3KSxyPWVpKGguYSwwKSxrPSEwLEM9bnVsbCxyLmIhPXIuZC5jKXtmb3IoZT11KHRpKHIpLDgpLG49bnVsbCxoLmMuaj09KHZlKCksUG4pJiYodHQ9bmV3IFRfKGUsbmV3ICRlKGUuYSxzLmQuZCkscyxoKSx0dC5mLmE9ITAsdHQuYT1oLmMsSy5jW0suYy5sZW5ndGhdPXR0KSxoLmMuaj09bXImJih0dD1uZXcgVF8oZSxuZXcgJGUoZS5hLHMuZC5kK3MuZC5hKSxzLGgpLHR0LmYuZD0hMCx0dC5hPWguYyxLLmNbSy5jLmxlbmd0aF09dHQpO3IuYiE9ci5kLmM7KW49dSh0aShyKSw4KSxVbXQoZS5iLG4uYil8fChDPW5ldyBUXyhlLG4sbnVsbCxoKSxLLmNbSy5jLmxlbmd0aF09QyxrJiYoaz0hMSxuLmI8cy5kLmQ/Qy5mLmE9ITA6bi5iPnMuZC5kK3MuZC5hP0MuZi5kPSEwOihDLmYuZD0hMCxDLmYuYT0hMCkpKSxyLmIhPXIuZC5jJiYoZT1uKTtDJiYobz11KHRyKHQuZixoLmQuaSksNTcpLGUuYjxvLmQuZD9DLmYuYT0hMDplLmI+by5kLmQrby5kLmE/Qy5mLmQ9ITA6KEMuZi5kPSEwLEMuZi5hPSEwKSl9Zm9yKGQ9bmV3IGFyKGxyKGpvKEgpLmEuS2MoKSxuZXcgeikpO3pyKGQpOyloPXUoTXIoZCksMTcpLGguYS5iIT0wJiYoZT11KEFqKGguYSksOCksaC5kLmo9PSh2ZSgpLFBuKSYmKHR0PW5ldyBUXyhlLG5ldyAkZShlLmEscy5kLmQpLHMsaCksdHQuZi5hPSEwLHR0LmE9aC5kLEsuY1tLLmMubGVuZ3RoXT10dCksaC5kLmo9PW1yJiYodHQ9bmV3IFRfKGUsbmV3ICRlKGUuYSxzLmQuZCtzLmQuYSkscyxoKSx0dC5mLmQ9ITAsdHQuYT1oLmQsSy5jW0suYy5sZW5ndGhdPXR0KSl9cmV0dXJuIEt9ZnVuY3Rpb24ga3huKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE07aWYodnIobiwiTmV0d29yayBzaW1wbGV4IG5vZGUgcGxhY2VtZW50IiwxKSx0LmU9ZSx0Lm49dShRKGUsKGFlKCksUTQpKSwzMDQpLGozbih0KSxtMG4odCksbHMoV28obmV3IFRuKG51bGwsbmV3IF9uKHQuZS5iLDE2KSksbmV3IEVRKSxuZXcgcSR0KHQpKSxscyhSaShXbyhSaShXbyhuZXcgVG4obnVsbCxuZXcgX24odC5lLmIsMTYpKSxuZXcgV1QpLG5ldyBPUSksbmV3IFBRKSxuZXcgRlEpLG5ldyB6JHQodCkpLGplKFJlKFEodC5lLChUZSgpLFNTKSkpKSYmKGg9UmMobiwxKSx2cihoLCJTdHJhaWdodCBFZGdlcyBQcmUtUHJvY2Vzc2luZyIsMSksaTVuKHQpLG9yKGgpKSx0MW4odC5mKSxvPXUoUShlLE1TKSwxOSkuYSp0LmYuYS5jLmxlbmd0aCxtYXQoYWJ0KG9idChNbnQodC5mKSxvKSwhMSksUmMobiwxKSksdC5kLmEuZ2MoKSE9MCl7Zm9yKGg9UmMobiwxKSx2cihoLCJGbGV4aWJsZSBXaGVyZSBTcGFjZSBQcm9jZXNzaW5nIiwxKSxkPXUoTncodCQod3UobmV3IFRuKG51bGwsbmV3IF9uKHQuZi5hLDE2KSksbmV3IFRRKSxuZXcgd1EpKSwxOSkuYSx2PXUoTncoSmood3UobmV3IFRuKG51bGwsbmV3IF9uKHQuZi5hLDE2KSksbmV3IENRKSxuZXcgdlEpKSwxOSkuYSxrPXYtZCxDPUZ3KG5ldyBYYix0LmYpLE09RncobmV3IFhiLHQuZikseWYobGYodWYoY2YoaGYobmV3IENoLDJlNCksayksQyksTSkpLGxzKFJpKFJpKFFudCh0LmkpLG5ldyBfUSksbmV3IFNRKSxuZXcgalh0KGQsQyxrLE0pKSxzPXQuZC5hLmVjKCkuS2MoKTtzLk9iKCk7KXI9dShzLlBiKCksMjEzKSxyLmc9MTttYXQoYWJ0KG9idChNbnQodC5mKSxvKSwhMSksUmMoaCwxKSksb3IoaCl9amUoUmUoUShlLFNTKSkpJiYoaD1SYyhuLDEpLHZyKGgsIlN0cmFpZ2h0IEVkZ2VzIFBvc3QtUHJvY2Vzc2luZyIsMSksdXBuKHQpLG9yKGgpKSxxNG4odCksdC5lPW51bGwsdC5mPW51bGwsdC5pPW51bGwsdC5jPW51bGwsWHUodC5rKSx0Lmo9bnVsbCx0LmE9bnVsbCx0Lm89bnVsbCx0LmQuYS4kYigpLG9yKG4pfWZ1bmN0aW9uIEV4bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3Q7Zm9yKGQ9bmV3IFModC5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KWZvcihvPXUoSihkKSwyOSksU3Q9bmV3IFMoby5hKTtTdC5hPFN0LmMuYy5sZW5ndGg7KU10PXUoSihTdCksMTApLGUuZ1tNdC5wXT1NdCxlLmFbTXQucF09TXQsZS5kW010LnBdPTA7Zm9yKHY9dC5hLmIsZS5jPT0oYmQoKSxlcCkmJih2PV90KHYsMTUyKT9aeCh1KHYsMTUyKSk6X3QodiwxMzEpP3UodiwxMzEpLmE6X3Qodiw1NCk/bmV3IGt3KHYpOm5ldyBPbSh2KSksaD12LktjKCk7aC5PYigpOylmb3Iobz11KGguUGIoKSwyOSksSD0tMSxqPW8uYSxlLm89PShDMSgpLEgxKSYmKEg9d2ksaj1fdChqLDE1Mik/WngodShqLDE1MikpOl90KGosMTMxKT91KGosMTMxKS5hOl90KGosNTQpP25ldyBrdyhqKTpuZXcgT20oaikpLEt0PWouS2MoKTtLdC5PYigpOylpZihSdD11KEt0LlBiKCksMTApLE09bnVsbCxlLmM9PWVwP009dShOZSh0LmIuZixSdC5wKSwxNSk6TT11KE5lKHQuYi5iLFJ0LnApLDE1KSxNLmdjKCk+MClpZihyPU0uZ2MoKSxrPXBzKGIuTWF0aC5mbG9vcigocisxKS8yKSktMSxzPXBzKGIuTWF0aC5jZWlsKChyKzEpLzIpKS0xLGUubz09SDEpZm9yKEM9cztDPj1rO0MtLSllLmFbUnQucF09PVJ0JiYoSz11KE0uWGIoQyksNDYpLEc9dShLLmEsMTApLCFJMChuLEsuYikmJkg+dC5iLmVbRy5wXSYmKGUuYVtHLnBdPVJ0LGUuZ1tSdC5wXT1lLmdbRy5wXSxlLmFbUnQucF09ZS5nW1J0LnBdLGUuZltlLmdbUnQucF0ucF09KE5uKCksISEoamUoZS5mW2UuZ1tSdC5wXS5wXSkmUnQuaz09KFZuKCksdGEpKSksSD10LmIuZVtHLnBdKSk7ZWxzZSBmb3IoQz1rO0M8PXM7QysrKWUuYVtSdC5wXT09UnQmJihndD11KE0uWGIoQyksNDYpLHR0PXUoZ3QuYSwxMCksIUkwKG4sZ3QuYikmJkg8dC5iLmVbdHQucF0mJihlLmFbdHQucF09UnQsZS5nW1J0LnBdPWUuZ1t0dC5wXSxlLmFbUnQucF09ZS5nW1J0LnBdLGUuZltlLmdbUnQucF0ucF09KE5uKCksISEoamUoZS5mW2UuZ1tSdC5wXS5wXSkmUnQuaz09KFZuKCksdGEpKSksSD10LmIuZVt0dC5wXSkpfWZ1bmN0aW9uIEpjKCl7SmM9WixNSHQoKSxYNGU9bmEuYSx1KEF0KFd0KG5hLmEpLDApLDE4KSxZNGU9bmEuZix1KEF0KFd0KG5hLmYpLDApLDE4KSx1KEF0KFd0KG5hLmYpLDEpLDM0KSxLNGU9bmEubix1KEF0KFd0KG5hLm4pLDApLDM0KSx1KEF0KFd0KG5hLm4pLDEpLDM0KSx1KEF0KFd0KG5hLm4pLDIpLDM0KSx1KEF0KFd0KG5hLm4pLDMpLDM0KSxHQXQ9bmEuZyx1KEF0KFd0KG5hLmcpLDApLDE4KSx1KEF0KFd0KG5hLmcpLDEpLDM0KSxXNGU9bmEuYyx1KEF0KFd0KG5hLmMpLDApLDE4KSx1KEF0KFd0KG5hLmMpLDEpLDE4KSxVQXQ9bmEuaSx1KEF0KFd0KG5hLmkpLDApLDE4KSx1KEF0KFd0KG5hLmkpLDEpLDE4KSx1KEF0KFd0KG5hLmkpLDIpLDE4KSx1KEF0KFd0KG5hLmkpLDMpLDE4KSx1KEF0KFd0KG5hLmkpLDQpLDM0KSxXQXQ9bmEuaix1KEF0KFd0KG5hLmopLDApLDE4KSxWQXQ9bmEuZCx1KEF0KFd0KG5hLmQpLDApLDE4KSx1KEF0KFd0KG5hLmQpLDEpLDE4KSx1KEF0KFd0KG5hLmQpLDIpLDE4KSx1KEF0KFd0KG5hLmQpLDMpLDE4KSx1KEF0KFd0KG5hLmQpLDQpLDM0KSx1KEF0KFd0KG5hLmQpLDUpLDM0KSx1KEF0KFd0KG5hLmQpLDYpLDM0KSx1KEF0KFd0KG5hLmQpLDcpLDM0KSxVNGU9bmEuYix1KEF0KFd0KG5hLmIpLDApLDM0KSx1KEF0KFd0KG5hLmIpLDEpLDM0KSxhVT1uYS5lLHUoQXQoV3QobmEuZSksMCksMzQpLHUoQXQoV3QobmEuZSksMSksMzQpLHUoQXQoV3QobmEuZSksMiksMzQpLHUoQXQoV3QobmEuZSksMyksMzQpLHUoQXQoV3QobmEuZSksNCksMTgpLHUoQXQoV3QobmEuZSksNSksMTgpLHUoQXQoV3QobmEuZSksNiksMTgpLHUoQXQoV3QobmEuZSksNyksMTgpLHUoQXQoV3QobmEuZSksOCksMTgpLHUoQXQoV3QobmEuZSksOSksMTgpLHUoQXQoV3QobmEuZSksMTApLDM0KSxTYj1uYS5rLHUoQXQoV3QobmEuayksMCksMzQpLHUoQXQoV3QobmEuayksMSksMzQpfWZ1bmN0aW9uIFR4bih0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem47Zm9yKFFlPW5ldyBaaSx1ZT1uZXcgWmksdHQ9LTEsdj1uZXcgUyh0KTt2LmE8di5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKHYpLDEyOCksaC5zPXR0LS0sQz0wLFN0PTAsbz1uZXcgUyhoLnQpO28uYTxvLmMuYy5sZW5ndGg7KXI9dShKKG8pLDI2OCksU3QrPXIuYztmb3Iocz1uZXcgUyhoLmkpO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDI2OCksQys9ci5jO2gubj1DLGgudT1TdCxTdD09MD9mcyh1ZSxoLHVlLmMuYix1ZS5jKTpDPT0wJiZmcyhRZSxoLFFlLmMuYixRZS5jKX1mb3Ioem49UCQodCksTT10LmMubGVuZ3RoLEs9TSsxLGd0PU0tMSxIPW5ldyBoZTt6bi5hLmdjKCkhPTA7KXtmb3IoO3VlLmIhPTA7KUt0PShabih1ZS5iIT0wKSx1KGxoKHVlLHVlLmEuYSksMTI4KSksem4uYS5CYyhLdCkhPW51bGwsS3Qucz1ndC0tLEE1dChLdCxRZSx1ZSk7Zm9yKDtRZS5iIT0wOylfZT0oWm4oUWUuYiE9MCksdShsaChRZSxRZS5hLmEpLDEyOCkpLHpuLmEuQmMoX2UpIT1udWxsLF9lLnM9SysrLEE1dChfZSxRZSx1ZSk7Zm9yKEc9U2Esaz16bi5hLmVjKCkuS2MoKTtrLk9iKCk7KWg9dShrLlBiKCksMTI4KSxNdD1oLnUtaC5uLE10Pj1HJiYoTXQ+RyYmKEguYz1OdChRbixEZSwxLDAsNSwxKSxHPU10KSxILmNbSC5jLmxlbmd0aF09aCk7SC5jLmxlbmd0aCE9MCYmKGo9dShOZShILFp6KGUsSC5jLmxlbmd0aCkpLDEyOCksem4uYS5CYyhqKSE9bnVsbCxqLnM9SysrLEE1dChqLFFlLHVlKSxILmM9TnQoUW4sRGUsMSwwLDUsMSkpfWZvcihSdD10LmMubGVuZ3RoKzEsZD1uZXcgUyh0KTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxMjgpLGguczxNJiYoaC5zKz1SdCk7Zm9yKFdlPW5ldyBTKHQpO1dlLmE8V2UuYy5jLmxlbmd0aDspZm9yKF9lPXUoSihXZSksMTI4KSxuPW5ldyBkYShfZS50LDApO24uYjxuLmQuZ2MoKTspcj0oWm4obi5iPG4uZC5nYygpKSx1KG4uZC5YYihuLmM9bi5iKyspLDI2OCkpLFJuPXIuYixfZS5zPlJuLnMmJihDbChuKSxtdShSbi5pLHIpLHIuYz4wJiYoci5hPVJuLGxlKFJuLnQsciksci5iPV9lLGxlKF9lLmkscikpKX1mdW5jdGlvbiBJeHQodCl7dmFyIGUsbixyLHMsbztzd2l0Y2goZT10LmMsZSl7Y2FzZSAxMTpyZXR1cm4gdC5NbCgpO2Nhc2UgMTI6cmV0dXJuIHQuT2woKTtjYXNlIDE0OnJldHVybiB0LlFsKCk7Y2FzZSAxNTpyZXR1cm4gdC5UbCgpO2Nhc2UgMTY6cmV0dXJuIHQuUmwoKTtjYXNlIDE3OnJldHVybiB0LlVsKCk7Y2FzZSAyMTpyZXR1cm4gZmkodCksZ2koKSxnaSgpLHBBO2Nhc2UgMTA6c3dpdGNoKHQuYSl7Y2FzZSA2NTpyZXR1cm4gdC55bCgpO2Nhc2UgOTA6cmV0dXJuIHQuRGwoKTtjYXNlIDEyMjpyZXR1cm4gdC5LbCgpO2Nhc2UgOTg6cmV0dXJuIHQuRWwoKTtjYXNlIDY2OnJldHVybiB0LnpsKCk7Y2FzZSA2MDpyZXR1cm4gdC5KbCgpO2Nhc2UgNjI6cmV0dXJuIHQuSGwoKX19c3dpdGNoKG89dnhuKHQpLGU9dC5jLGUpe2Nhc2UgMzpyZXR1cm4gdC5abChvKTtjYXNlIDQ6cmV0dXJuIHQuWGwobyk7Y2FzZSA1OnJldHVybiB0LllsKG8pO2Nhc2UgMDppZih0LmE9PTEyMyYmdC5kPHQuail7aWYocz10LmQscj0wLG49LTEsKGU9d2EodC5pLHMrKykpPj00OCYmZTw9NTcpe2ZvcihyPWUtNDg7czx0LmomJihlPXdhKHQuaSxzKyspKT49NDgmJmU8PTU3OylpZihyPXIqMTArZS00OCxyPDApdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLE44dCkpKSl9ZWxzZSB0aHJvdyBpdChuZXcgTnIocXIoKFByKCksdjBlKSkpKTtpZihuPXIsZT09NDQpe2lmKHM+PXQuail0aHJvdyBpdChuZXcgTnIocXIoKFByKCkseTBlKSkpKTtpZigoZT13YSh0LmkscysrKSk+PTQ4JiZlPD01Nyl7Zm9yKG49ZS00ODtzPHQuaiYmKGU9d2EodC5pLHMrKykpPj00OCYmZTw9NTc7KWlmKG49bioxMCtlLTQ4LG48MCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksTjh0KSkpKTtpZihyPm4pdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLHgwZSkpKSl9ZWxzZSBuPS0xfWlmKGUhPTEyNSl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksbTBlKSkpKTt0LnNsKHMpPyhvPShnaSgpLGdpKCksbmV3IFhtKDksbykpLHQuZD1zKzEpOihvPShnaSgpLGdpKCksbmV3IFhtKDMsbykpLHQuZD1zKSxvLmRtKHIpLG8uY20obiksZmkodCl9fXJldHVybiBvfWZ1bmN0aW9uIFhoZSh0LGUsbixyLHMpe3ZhciBvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem47Zm9yKEs9bmV3IFhjKGUuYiksUnQ9bmV3IFhjKGUuYiksaj1uZXcgWGMoZS5iKSxXZT1uZXcgWGMoZS5iKSx0dD1uZXcgWGMoZS5iKSxfZT1laShlLDApO19lLmIhPV9lLmQuYzspZm9yKEt0PXUodGkoX2UpLDExKSxkPW5ldyBTKEt0LmcpO2QuYTxkLmMuYy5sZW5ndGg7KWlmKG89dShKKGQpLDE3KSxvLmMuaT09by5kLmkpe2lmKEt0Lmo9PW8uZC5qKXtXZS5jW1dlLmMubGVuZ3RoXT1vO2NvbnRpbnVlfWVsc2UgaWYoS3Quaj09KHZlKCksUG4pJiZvLmQuaj09bXIpe3R0LmNbdHQuYy5sZW5ndGhdPW87Y29udGludWV9fWZvcih2PW5ldyBTKHR0KTt2LmE8di5jLmMubGVuZ3RoOylvPXUoSih2KSwxNyksc3luKHQsbyxuLHIsKHZlKCksSG4pKTtmb3IoaD1uZXcgUyhXZSk7aC5hPGguYy5jLmxlbmd0aDspbz11KEooaCksMTcpLFFlPW5ldyBZMCh0KSxEMChRZSwoVm4oKSxIYykpLEp0KFFlLChUZSgpLGNzKSwodWEoKSxHYykpLEp0KFFlLChhZSgpLF9pKSxvKSxSbj1uZXcgTWMsSnQoUm4sX2ksby5kKSxCcyhSbiwodmUoKSxCbikpLFVvKFJuLFFlKSx6bj1uZXcgTWMsSnQoem4sX2ksby5jKSxCcyh6bixIbiksVW8oem4sUWUpLEp0KG8uYyxKdSxRZSksSnQoby5kLEp1LFFlKSxPYShvLG51bGwpLG9hKG8sbnVsbCksbi5jW24uYy5sZW5ndGhdPVFlLEp0KFFlLEpWLHBlKDIpKTtmb3IodWU9ZWkoZSwwKTt1ZS5iIT11ZS5kLmM7KUt0PXUodGkodWUpLDExKSxrPUt0LmUuYy5sZW5ndGg+MCxndD1LdC5nLmMubGVuZ3RoPjAsayYmZ3Q/ai5jW2ouYy5sZW5ndGhdPUt0Oms/Sy5jW0suYy5sZW5ndGhdPUt0Omd0JiYoUnQuY1tSdC5jLmxlbmd0aF09S3QpO2ZvcihHPW5ldyBTKEspO0cuYTxHLmMuYy5sZW5ndGg7KUg9dShKKEcpLDExKSxsZShzLGd4dCh0LEgsbnVsbCxuKSk7Zm9yKFN0PW5ldyBTKFJ0KTtTdC5hPFN0LmMuYy5sZW5ndGg7KU10PXUoSihTdCksMTEpLGxlKHMsZ3h0KHQsbnVsbCxNdCxuKSk7Zm9yKE09bmV3IFMoaik7TS5hPE0uYy5jLmxlbmd0aDspQz11KEooTSksMTEpLGxlKHMsZ3h0KHQsQyxDLG4pKX1mdW5jdGlvbiBRaGUodCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuO2ZvcihNdD1uZXcgJGUoYXMsYXMpLGU9bmV3ICRlKENzLENzKSxXZT1uZXcgUyh0KTtXZS5hPFdlLmMuYy5sZW5ndGg7KV9lPXUoSihXZSksOCksTXQuYT1iLk1hdGgubWluKE10LmEsX2UuYSksTXQuYj1iLk1hdGgubWluKE10LmIsX2UuYiksZS5hPWIuTWF0aC5tYXgoZS5hLF9lLmEpLGUuYj1iLk1hdGgubWF4KGUuYixfZS5iKTtmb3Ioaj1uZXcgJGUoZS5hLU10LmEsZS5iLU10LmIpLGs9bmV3ICRlKE10LmEtNTAsTXQuYi1qLmEtNTApLEM9bmV3ICRlKE10LmEtNTAsZS5iK2ouYSs1MCksTT1uZXcgJGUoZS5hK2ouYi8yKzUwLE10LmIrai5iLzIpLEg9bmV3IGh4dChrLEMsTSksdWU9bmV3IEhzLG89bmV3IGhlLG49bmV3IGhlLHVlLmEuemMoSCx1ZSksUm49bmV3IFModCk7Um4uYTxSbi5jLmMubGVuZ3RoOyl7Zm9yKFFlPXUoSihSbiksOCksby5jPU50KFFuLERlLDEsMCw1LDEpLEt0PXVlLmEuZWMoKS5LYygpO0t0Lk9iKCk7KVN0PXUoS3QuUGIoKSwzMDgpLHI9U3QuZCxXcChyLFN0LmEpLGF2KFdwKFN0LmQsUWUpLFdwKFN0LmQsU3QuYSkpPDAmJihvLmNbby5jLmxlbmd0aF09U3QpO2ZvcihuLmM9TnQoUW4sRGUsMSwwLDUsMSksUnQ9bmV3IFMobyk7UnQuYTxSdC5jLmMubGVuZ3RoOylmb3IoU3Q9dShKKFJ0KSwzMDgpLHR0PW5ldyBTKFN0LmUpO3R0LmE8dHQuYy5jLmxlbmd0aDspe2ZvcihHPXUoSih0dCksMTY4KSxoPSEwLHY9bmV3IFMobyk7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMzA4KSxkIT1TdCYmKEZjKEcsTmUoZC5lLDApKXx8RmMoRyxOZShkLmUsMSkpfHxGYyhHLE5lKGQuZSwyKSkpJiYoaD0hMSk7aCYmKG4uY1tuLmMubGVuZ3RoXT1HKX1mb3IoSWFlKHVlLG8pLHZhKHVlLG5ldyBNYSksSz1uZXcgUyhuKTtLLmE8Sy5jLmMubGVuZ3RoOylHPXUoSihLKSwxNjgpLEZzKHVlLG5ldyBoeHQoUWUsRy5hLEcuYikpfWZvcihndD1uZXcgSHMsdmEodWUsbmV3IFNuKGd0KSkscz1ndC5hLmVjKCkuS2MoKTtzLk9iKCk7KUc9dShzLlBiKCksMTY4KSwoWSQoSCxHLmEpfHxZJChILEcuYikpJiZzLlFiKCk7cmV0dXJuIHZhKGd0LG5ldyBHcyksZ3R9ZnVuY3Rpb24gQ3huKHQpe3ZhciBlLG4scixzLG87c3dpdGNoKG49dShRKHQsKGFlKCksVmMpKSwyMSksZT1waihQYmUpLHM9dShRKHQsKFRlKCkscXkpKSwzMzQpLHM9PShHMCgpLHNwKSYmJGwoZSxGYmUpLGplKFJlKFEodCxhaHQpKSk/YmkoZSwoV2EoKSxEZCksKHJvKCkscGx0KSk6YmkoZSwoV2EoKSxjdSksKHJvKCkscGx0KSksUSh0LCgkJCgpLFdTKSkhPW51bGwmJiRsKGUsTmJlKSwoamUoUmUoUSh0LG45dCkpKXx8amUoUmUoUSh0LFpDdCkpKSkmJkt1KGUsKFdhKCksSW8pLChybygpLFE3dCkpLHUoUSh0LFdsKSwxMDMpLmcpe2Nhc2UgMjpjYXNlIDM6Y2FzZSA0Okt1KGJpKGUsKFdhKCksRGQpLChybygpLEo3dCkpLElvLFo3dCl9c3dpdGNoKG4uSGMoKG9vKCksS1YpKSYmS3UoYmkoYmkoZSwoV2EoKSxEZCksKHJvKCksWDd0KSkscWMsWTd0KSxJbyxLN3QpLFZ0KFEodCxvaHQpKSE9PVZ0KCh5NCgpLGtHKSkmJmJpKGUsKFdhKCksY3UpLChybygpLGdUdCkpLG4uSGMoUVYpJiYoYmkoZSwoV2EoKSxEZCksKHJvKCksdlR0KSksYmkoZSxnYixiVHQpLGJpKGUsY3Usd1R0KSksVnQoUSh0LHNHKSkhPT1WdCgoa0UoKSxtUykpJiZWdChRKHQsZWcpKSE9PVZ0KChXMCgpLGVQKSkmJkt1KGUsKFdhKCksSW8pLChybygpLGNUdCkpLGplKFJlKFEodCx0OXQpKSkmJmJpKGUsKFdhKCksY3UpLChybygpLG9UdCkpLGplKFJlKFEodCxuaHQpKSkmJmJpKGUsKFdhKCksY3UpLChybygpLG1UdCkpLG53bih0KSYmKFZ0KFEodCxxeSkpPT09VnQoc3ApP3I9dShRKHQsRE8pLDI5Mik6cj11KFEodCxlaHQpLDI5Miksbz1yPT0oZUUoKSwkbHQpPyhybygpLHBUdCk6KHJvKCksa1R0KSxiaShlLChXYSgpLHFjKSxvKSksdShRKHQsQTl0KSwzNzcpLmcpe2Nhc2UgMTpiaShlLChXYSgpLHFjKSwocm8oKSx5VHQpKTticmVhaztjYXNlIDI6S3UoYmkoYmkoZSwoV2EoKSxjdSksKHJvKCksVjd0KSkscWMsRzd0KSxJbyxVN3QpfXJldHVybiBWdChRKHQsd2IpKSE9PVZ0KChWMCgpLHZiKSkmJmJpKGUsKFdhKCksY3UpLChybygpLHhUdCkpLGV9ZnVuY3Rpb24gWmhlKHQpe013KHQsbmV3IGsyKF93KEV3KEN3KFR3KG5ldyBrZyxQaCksIkVMSyBSZWN0YW5nbGUgUGFja2luZyIpLCJBbGdvcml0aG0gZm9yIHBhY2tpbmcgb2YgdW5jb25uZWN0ZWQgYm94ZXMsIGkuZS4gZ3JhcGhzIHdpdGhvdXQgZWRnZXMuIFRoZSBnaXZlbiBvcmRlciBvZiB0aGUgYm94ZXMgaXMgYWx3YXlzIHByZXNlcnZlZCBhbmQgdGhlIG1haW4gcmVhZGluZyBkaXJlY3Rpb24gb2YgdGhlIGJveGVzIGlzIGxlZnQgdG8gcmlnaHQuIFRoZSBhbGdvcml0aG0gaXMgZGl2aWRlZCBpbnRvIHR3byBwaGFzZXMuIE9uZSBwaGFzZSBhcHByb3hpbWF0ZXMgdGhlIHdpZHRoIGluIHdoaWNoIHRoZSByZWN0YW5nbGVzIGNhbiBiZSBwbGFjZWQuIFRoZSBuZXh0IHBoYXNlIHBsYWNlcyB0aGUgcmVjdGFuZ2xlcyBpbiByb3dzIHVzaW5nIHRoZSBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgd2lkdGggYXMgYm91bmRpbmcgd2lkdGggYW5kIGJ1bmRsZXMgcmVjdGFuZ2xlcyB3aXRoIGEgc2ltaWxhciBoZWlnaHQgaW4gYmxvY2tzLiBBIGNvbXBhY3Rpb24gc3RlcCByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nLiBGaW5hbGx5LCB0aGUgcmVjdGFuZ2xlcyBhcmUgZXhwYW5kZWQgdG8gZmlsbCB0aGVpciBib3VuZGluZyBib3ggYW5kIGVsaW1pbmF0ZSBlbXB0eSB1bnVzZWQgc3BhY2VzLiIpLG5ldyB3WikpKSx4ZSh0LFBoLEU2LDEuMykseGUodCxQaCxDSCxJZShHX3QpKSx4ZSh0LFBoLHh2LFpfdCkseGUodCxQaCxDeSwxNSkseGUodCxQaCxtSCxJZShoM2UpKSx4ZSh0LFBoLEQ0LEllKGczZSkpLHhlKHQsUGgsQzYsSWUocDNlKSkseGUodCxQaCxUNixJZShiM2UpKSx4ZSh0LFBoLFVFLEllKGQzZSkpLHhlKHQsUGgsal8sSWUoS190KSkseGUodCxQaCxXRSxJZSh2M2UpKSx4ZSh0LFBoLHQ4dCxJZShRX3QpKSx4ZSh0LFBoLGU4dCxJZShZX3QpKSx4ZSh0LFBoLGk4dCxJZShYX3QpKSx4ZSh0LFBoLHM4dCxJZShKX3QpKSx4ZSh0LFBoLE5jdCxJZShVX3QpKSx4ZSh0LFBoLEdJLEllKFdfdCkpLHhlKHQsUGgsX2N0LEllKGYzZSkpLHhlKHQsUGgscjh0LEllKEhPKSkseGUodCxQaCxuOHQsSWUoVl90KSkseGUodCxQaCxhOHQsSWUodFN0KSl9ZnVuY3Rpb24gdnYodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2lmKG49PW51bGwpcmV0dXJuIG51bGw7aWYodC5hIT1lLkFqKCkpdGhyb3cgaXQobmV3IEZuKFFFK2UubmUoKStDdikpO2lmKF90KGUsNDU3KSl7aWYodHQ9SXZuKHUoZSw2NzEpLG4pLCF0dCl0aHJvdyBpdChuZXcgRm4oWWN0K24rIicgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRvciBvZiAnIitlLm5lKCkrIiciKSk7cmV0dXJuIHR0fXN3aXRjaCgkZygoJHUoKSx5YSksZSkuY2woKSl7Y2FzZSAyOntuPSRjKG4sITEpO2JyZWFrfWNhc2UgMzp7bj0kYyhuLCEwKTticmVha319aWYocj0kZyh5YSxlKS4kaygpLHIpcmV0dXJuIHIuQWooKS5OaCgpLktoKHIsbik7aWYoaj0kZyh5YSxlKS5hbCgpLGope2Zvcih0dD1uZXcgaGUsaz1PaXQobiksQz0wLE09ay5sZW5ndGg7QzxNOysrQyl2PWtbQ10sbGUodHQsai5BaigpLk5oKCkuS2goaix2KSk7cmV0dXJuIHR0fWlmKEs9JGcoeWEsZSkuYmwoKSwhSy5kYygpKXtmb3IoRz1LLktjKCk7Ry5PYigpOyl7SD11KEcuUGIoKSwxNDgpO3RyeXtpZih0dD1ILkFqKCkuTmgoKS5LaChILG4pLHR0IT1udWxsKXJldHVybiB0dH1jYXRjaChndCl7aWYoZ3Q9V2koZ3QpLCFfdChndCw2MCkpdGhyb3cgaXQoZ3QpfX10aHJvdyBpdChuZXcgRm4oWWN0K24rIicgZG9lcyBub3QgbWF0Y2ggYW55IG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gZGF0YXR5cGUgJyIrZS5uZSgpKyInIikpfWlmKHUoZSw4MzQpLkZqKCkscz1EbG4oZS5CaigpKSwhcylyZXR1cm4gbnVsbDtpZihzPT11Uyl7aD0wO3RyeXtoPXFsKG4sU2Esd2kpJnlzfWNhdGNoKGd0KXtpZihndD1XaShndCksX3QoZ3QsMTI3KSlvPUskKG4pLGg9b1swXTtlbHNlIHRocm93IGl0KGd0KX1yZXR1cm4gQkQoaCl9aWYocz09dFYpe2ZvcihkPTA7ZDxhQS5sZW5ndGg7KytkKXRyeXtyZXR1cm4gelZ0KGFBW2RdLG4pfWNhdGNoKGd0KXtpZihndD1XaShndCksIV90KGd0LDMyKSl0aHJvdyBpdChndCl9dGhyb3cgaXQobmV3IEZuKFljdCtuKyInIGlzIG5vdCBhIGRhdGUgZm9ybWF0dGVkIHN0cmluZyBvZiB0aGUgZm9ybSB5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1NaIG9yIGEgdmFsaWQgc3Vic2V0IHRoZXJlb2YiKSl9dGhyb3cgaXQobmV3IEZuKFljdCtuKyInIGlzIGludmFsaWQuICIpKX1mdW5jdGlvbiBfeG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrO2lmKG49MCxoPTAsbz1lLmxlbmd0aCxkPW51bGwsaz1uZXcgSW0saDxvJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpPT00MykmJigrK2gsKytuLGg8byYmKFJyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKT09NDN8fChScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTQ1KSkpKXRocm93IGl0KG5ldyBsZCh5ditlKyciJykpO2Zvcig7aDxvJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpIT00NikmJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTEwMSkmJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTY5KTspKytoO2lmKGsuYSs9IiIrUGwoZT09bnVsbD9fdTooT24oZSksZSksbixoKSxoPG8mJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTQ2KSl7Zm9yKCsraCxuPWg7aDxvJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpIT0xMDEpJiYoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpIT02OSk7KSsraDt0LmU9aC1uLGsuYSs9IiIrUGwoZT09bnVsbD9fdTooT24oZSksZSksbixoKX1lbHNlIHQuZT0wO2lmKGg8byYmKFJyKGgsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChoKT09MTAxfHwoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpPT02OSkpJiYoKytoLG49aCxoPG8mJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCk9PTQzKSYmKCsraCxoPG8mJihScihoLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoaCkhPTQ1KSYmKytuKSxkPWUuc3Vic3RyKG4sby1uKSx0LmU9dC5lLXFsKGQsU2Esd2kpLHQuZSE9cHModC5lKSkpdGhyb3cgaXQobmV3IGxkKCJTY2FsZSBvdXQgb2YgcmFuZ2UuIikpO2lmKHY9ay5hLHYubGVuZ3RoPDE2KXtpZih0LmY9KFRFdD09bnVsbCYmKFRFdD1uZXcgUmVnRXhwKCJeWystXT9cXGQqJCIsImkiKSksVEV0LnRlc3Qodik/cGFyc2VJbnQodiwxMCk6TmFOKSxpc05hTih0LmYpKXRocm93IGl0KG5ldyBsZCh5ditlKyciJykpO3QuYT1zNXQodC5mKX1lbHNlIFdobih0LG5ldyBScCh2KSk7Zm9yKHQuZD1rLmEubGVuZ3RoLHM9MDtzPGsuYS5sZW5ndGgmJihyPXdhKGsuYSxzKSwhKHIhPTQ1JiZyIT00OCkpOysrcyktLXQuZDt0LmQ9PTAmJih0LmQ9MSl9ZnVuY3Rpb24gcWF0KCl7cWF0PVosUGk9bmV3IFV3LGxuKFBpLCh2ZSgpLFUxKSxVYyksbG4oUGksVmgsVWMpLGxuKFBpLFZoLEx1KSxsbihQaSxtaCxWdSksbG4oUGksbWgsVWMpLGxuKFBpLE1mLFVjKSxsbihQaSxNZixubCksbG4oUGksS2wsU3UpLGxuKFBpLEtsLFVjKSxsbihQaSxBdSxsdSksbG4oUGksQXUsVWMpLGxuKFBpLEF1LG5sKSxsbihQaSxBdSxTdSksbG4oUGksbHUsQXUpLGxuKFBpLGx1LEx1KSxsbihQaSxsdSxWdSksbG4oUGksbHUsVWMpLGxuKFBpLERmLERmKSxsbihQaSxEZixubCksbG4oUGksRGYsTHUpLGxuKFBpLGVsLGVsKSxsbihQaSxlbCxubCksbG4oUGksZWwsVnUpLGxuKFBpLFhsLFhsKSxsbihQaSxYbCxTdSksbG4oUGksWGwsTHUpLGxuKFBpLHloLHloKSxsbihQaSx5aCxTdSksbG4oUGkseWgsVnUpLGxuKFBpLG5sLE1mKSxsbihQaSxubCxBdSksbG4oUGksbmwsRGYpLGxuKFBpLG5sLGVsKSxsbihQaSxubCxVYyksbG4oUGksbmwsbmwpLGxuKFBpLG5sLEx1KSxsbihQaSxubCxWdSksbG4oUGksU3UsS2wpLGxuKFBpLFN1LEF1KSxsbihQaSxTdSxYbCksbG4oUGksU3UseWgpLGxuKFBpLFN1LFN1KSxsbihQaSxTdSxMdSksbG4oUGksU3UsVnUpLGxuKFBpLFN1LFVjKSxsbihQaSxMdSxWaCksbG4oUGksTHUsbHUpLGxuKFBpLEx1LERmKSxsbihQaSxMdSxYbCksbG4oUGksTHUsbmwpLGxuKFBpLEx1LFN1KSxsbihQaSxMdSxMdSksbG4oUGksTHUsVWMpLGxuKFBpLFZ1LG1oKSxsbihQaSxWdSxsdSksbG4oUGksVnUsZWwpLGxuKFBpLFZ1LHloKSxsbihQaSxWdSxubCksbG4oUGksVnUsU3UpLGxuKFBpLFZ1LFZ1KSxsbihQaSxWdSxVYyksbG4oUGksVWMsVTEpLGxuKFBpLFVjLFZoKSxsbihQaSxVYyxtaCksbG4oUGksVWMsTWYpLGxuKFBpLFVjLEtsKSxsbihQaSxVYyxBdSksbG4oUGksVWMsbHUpLGxuKFBpLFVjLG5sKSxsbihQaSxVYyxTdSksbG4oUGksVWMsTHUpLGxuKFBpLFVjLFZ1KSxsbihQaSxVYyxVYyl9ZnVuY3Rpb24gT3h0KHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZTtmb3IodC5kPW5ldyAkZShhcyxhcyksdC5jPW5ldyAkZShDcyxDcyksaj1lLktjKCk7ai5PYigpOylmb3IoQz11KGouUGIoKSwzNyksU3Q9bmV3IFMoQy5hKTtTdC5hPFN0LmMuYy5sZW5ndGg7KU10PXUoSihTdCksMTApLHQuZC5hPWIuTWF0aC5taW4odC5kLmEsTXQubi5hLU10LmQuYiksdC5kLmI9Yi5NYXRoLm1pbih0LmQuYixNdC5uLmItTXQuZC5kKSx0LmMuYT1iLk1hdGgubWF4KHQuYy5hLE10Lm4uYStNdC5vLmErTXQuZC5jKSx0LmMuYj1iLk1hdGgubWF4KHQuYy5iLE10Lm4uYitNdC5vLmIrTXQuZC5hKTtmb3IoZD1uZXcgYnF0LE09ZS5LYygpO00uT2IoKTspQz11KE0uUGIoKSwzNykscj11eG4odCxDKSxsZShkLmEsciksci5hPXIuYXwhdShRKHIuYywoYWUoKSxCeSkpLDIxKS5kYygpO2Zvcih0LmI9KHFpdCgpLFdlPW5ldyBVNSxXZS5mPW5ldyBubmUobiksV2UuYj13NG4oV2UuZixkKSxXZSksQzRuKChHPXQuYixuZXcgcjgsRykpLHQuZT1uZXcgQ2EsdC5hPXQuYi5mLmUsaD1uZXcgUyhkLmEpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihzPXUoSihoKSw4NDEpLFJ0PXVpbih0LmIscyksaG1uKHMuYyxSdC5hLFJ0LmIpLHR0PW5ldyBTKHMuYy5hKTt0dC5hPHR0LmMuYy5sZW5ndGg7KUs9dShKKHR0KSwxMCksSy5rPT0oVm4oKSxrcykmJihndD1MNXQodCxLLm4sdShRKEssKGFlKCksb2MpKSw2MSkpLExpKEdmKEsubiksZ3QpKTtmb3Iobz1uZXcgUyhkLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihzPXUoSihvKSw4NDEpLGs9bmV3IFMoemxuKHMpKTtrLmE8ay5jLmMubGVuZ3RoOylmb3Iodj11KEooayksMTcpLF9lPW5ldyBEUih2LmEpLG04KF9lLDAsXzEodi5jKSkscmkoX2UsXzEodi5kKSksSD1udWxsLHVlPWVpKF9lLDApO3VlLmIhPXVlLmQuYzspe2lmKEt0PXUodGkodWUpLDgpLCFIKXtIPUt0O2NvbnRpbnVlfVdtdChILmEsS3QuYSk/KHQuZS5hPWIuTWF0aC5taW4odC5lLmEsSC5hKSx0LmEuYT1iLk1hdGgubWF4KHQuYS5hLEguYSkpOldtdChILmIsS3QuYikmJih0LmUuYj1iLk1hdGgubWluKHQuZS5iLEguYiksdC5hLmI9Yi5NYXRoLm1heCh0LmEuYixILmIpKSxIPUt0fU1qKHQuZSksTGkodC5hLHQuZSl9ZnVuY3Rpb24gU3huKHQpe0lyKHQuYixCaCxsdChjdChBZSwxKSxlZSwyLDYsW192LCJDb25zaXN0ZW50VHJhbnNpZW50Il0pKSxJcih0LmEsQmgsbHQoY3QoQWUsMSksZWUsMiw2LFtfdiwiV2VsbEZvcm1lZFNvdXJjZVVSSSJdKSksSXIodC5vLEJoLGx0KGN0KEFlLDEpLGVlLDIsNixbX3YsIkludGVyZmFjZUlzQWJzdHJhY3QgQXRNb3N0T25lSUQgVW5pcXVlRmVhdHVyZU5hbWVzIFVuaXF1ZU9wZXJhdGlvblNpZ25hdHVyZXMgTm9DaXJjdWxhclN1cGVyVHlwZXMgV2VsbEZvcm1lZE1hcEVudHJ5Q2xhc3MgQ29uc2lzdGVudFN1cGVyVHlwZXMgRGlzam9pbnRGZWF0dXJlQW5kT3BlcmF0aW9uU2lnbmF0dXJlcyJdKSksSXIodC5wLEJoLGx0KGN0KEFlLDEpLGVlLDIsNixbX3YsIldlbGxGb3JtZWRJbnN0YW5jZVR5cGVOYW1lIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyJdKSksSXIodC52LEJoLGx0KGN0KEFlLDEpLGVlLDIsNixbX3YsIlVuaXF1ZUVudW1lcmF0b3JOYW1lcyBVbmlxdWVFbnVtZXJhdG9yTGl0ZXJhbHMiXSkpLElyKHQuUixCaCxsdChjdChBZSwxKSxlZSwyLDYsW192LCJXZWxsRm9ybWVkTmFtZSJdKSksSXIodC5ULEJoLGx0KGN0KEFlLDEpLGVlLDIsNixbX3YsIlVuaXF1ZVBhcmFtZXRlck5hbWVzIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyBOb1JlcGVhdGluZ1ZvaWQiXSkpLElyKHQuVSxCaCxsdChjdChBZSwxKSxlZSwyLDYsW192LCJXZWxsRm9ybWVkTnNVUkkgV2VsbEZvcm1lZE5zUHJlZml4IFVuaXF1ZVN1YnBhY2thZ2VOYW1lcyBVbmlxdWVDbGFzc2lmaWVyTmFtZXMgVW5pcXVlTnNVUklzIl0pKSxJcih0LlcsQmgsbHQoY3QoQWUsMSksZWUsMiw2LFtfdiwiQ29uc2lzdGVudE9wcG9zaXRlIFNpbmdsZUNvbnRhaW5lciBDb25zaXN0ZW50S2V5cyBDb25zaXN0ZW50VW5pcXVlIENvbnNpc3RlbnRDb250YWluZXIiXSkpLElyKHQuYmIsQmgsbHQoY3QoQWUsMSksZWUsMiw2LFtfdiwiVmFsaWREZWZhdWx0VmFsdWVMaXRlcmFsIl0pKSxJcih0LmViLEJoLGx0KGN0KEFlLDEpLGVlLDIsNixbX3YsIlZhbGlkTG93ZXJCb3VuZCBWYWxpZFVwcGVyQm91bmQgQ29uc2lzdGVudEJvdW5kcyBWYWxpZFR5cGUiXSkpLElyKHQuSCxCaCxsdChjdChBZSwxKSxlZSwyLDYsW192LCJDb25zaXN0ZW50VHlwZSBDb25zaXN0ZW50Qm91bmRzIENvbnNpc3RlbnRBcmd1bWVudHMiXSkpfWZ1bmN0aW9uIEF4bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWU7aWYoIWUuZGMoKSl7aWYocz1uZXcgUHUsZD1ufHx1KGUuWGIoMCksMTcpLEc9ZC5jLG1fKCksaj1HLmkuaywhKGo9PShWbigpLE9zKXx8aj09SGN8fGo9PWtzfHxqPT16MSkpdGhyb3cgaXQobmV3IEZuKCJUaGUgdGFyZ2V0IG5vZGUgb2YgdGhlIGVkZ2UgbXVzdCBiZSBhIG5vcm1hbCBub2RlIG9yIGEgbm9ydGhTb3V0aFBvcnQuIikpO2ZvcihaYihzLFlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbRy5pLm4sRy5uLEcuYV0pKSksKHZlKCksQXUpLkhjKEcuaikmJih0dD1YdCh5ZShRKEcsKGFlKCksazcpKSkpLE09bmV3ICRlKFlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbRy5pLm4sRy5uLEcuYV0pKS5hLHR0KSxmcyhzLE0scy5jLmIscy5jKSksQz1udWxsLHI9ITEsdj1lLktjKCk7di5PYigpOyloPXUodi5QYigpLDE3KSxvPWguYSxvLmIhPTAmJihyPyhrPWZkKExpKEMsKFpuKG8uYiE9MCksdShvLmEuYS5jLDgpKSksLjUpLGZzKHMsayxzLmMuYixzLmMpLHI9ITEpOnI9ITAsQz1uYygoWm4oby5iIT0wKSx1KG8uYy5iLmMsOCkpKSxVYShzLG8pLEFoKG8pKTtLPWQuZCxBdS5IYyhLLmopJiYodHQ9WHQoeWUoUShLLChhZSgpLGs3KSkpKSxNPW5ldyAkZShZbyhsdChjdChXcywxKSxlZSw4LDAsW0suaS5uLEsubixLLmFdKSkuYSx0dCksZnMocyxNLHMuYy5iLHMuYykpLFpiKHMsWW8obHQoY3QoV3MsMSksZWUsOCwwLFtLLmkubixLLm4sSy5hXSkpKSx0LmQ9PShjRSgpLEFodCkmJihndD0oWm4ocy5iIT0wKSx1KHMuYS5hLmMsOCkpLE10PXUoWmYocywxKSw4KSxTdD1uZXcgU3J0KFJ5dChHLmopKSxTdC5hKj01LFN0LmIqPTUsUnQ9aWEobmV3ICRlKE10LmEsTXQuYiksZ3QpLEt0PW5ldyAkZShUcnQoU3QuYSxSdC5hKSxUcnQoU3QuYixSdC5iKSksTGkoS3QsZ3QpLHVlPWVpKHMsMSksZUQodWUsS3QpLF9lPShabihzLmIhPTApLHUocy5jLmIuYyw4KSksV2U9dShaZihzLHMuYi0yKSw4KSxTdD1uZXcgU3J0KFJ5dChLLmopKSxTdC5hKj01LFN0LmIqPTUsUnQ9aWEobmV3ICRlKFdlLmEsV2UuYiksX2UpLFFlPW5ldyAkZShUcnQoU3QuYSxSdC5hKSxUcnQoU3QuYixSdC5iKSksTGkoUWUsX2UpLG04KHMscy5iLTEsUWUpKSxIPW5ldyBmeHQocyksVWEoZC5hLGtzZShIKSl9fWZ1bmN0aW9uIEx4bih0LGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem4saHIscGksanMsWmwsWGgsSzEsa1UseFAsYkEsa1A7aWYoU3Q9dShBdCgoIXQuYiYmKHQuYj1uZXcgQ24oYnIsdCw0LDcpKSx0LmIpLDApLDgyKSxLdD1TdC5EZygpLHVlPVN0LkVnKCksUnQ9U3QuQ2coKS8yLEs9U3QuQmcoKS8yLF90KFN0LDE4NikmJihNdD11KFN0LDExOCksS3QrPVQxKE10KS5pLEt0Kz1UMShNdCkuaSksS3QrPVJ0LHVlKz1LLHpuPXUoQXQoKCF0LmImJih0LmI9bmV3IENuKGJyLHQsNCw3KSksdC5iKSwwKSw4MikscGk9em4uRGcoKSxqcz16bi5FZygpLGhyPXpuLkNnKCkvMixfZT16bi5CZygpLzIsX3Qoem4sMTg2KSYmKFJuPXUoem4sMTE4KSxwaSs9VDEoUm4pLmkscGkrPVQxKFJuKS5pKSxwaSs9aHIsanMrPV9lLCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSkuaT09MClkPShTdygpLGs9bmV3IGFkLGspLERyKCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSksZCk7ZWxzZSBpZigoIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpLmk+MSlmb3IoRz1uZXcgTngoKCF0LmEmJih0LmE9bmV3IGZlKEppLHQsNiw2KSksdC5hKSk7Ry5lIT1HLmkuZ2MoKTspZl8oRyk7Zm9yKGg9dShBdCgoIXQuYSYmKHQuYT1uZXcgZmUoSmksdCw2LDYpKSx0LmEpLDApLDIwMiksdHQ9cGkscGk+S3QrUnQ/dHQ9S3QrUnQ6cGk8S3QtUnQmJih0dD1LdC1SdCksZ3Q9anMsanM+dWUrSz9ndD11ZStLOmpzPHVlLUsmJihndD11ZS1LKSx0dD5LdC1SdCYmdHQ8S3QrUnQmJmd0PnVlLUsmJmd0PHVlK0smJih0dD1LdCtSdCksRzgoaCx0dCksVzgoaCxndCksV2U9S3QsS3Q+cGkraHI/V2U9cGkraHI6S3Q8cGktaHImJihXZT1waS1ociksUWU9dWUsdWU+anMrX2U/UWU9anMrX2U6dWU8anMtX2UmJihRZT1qcy1fZSksV2U+cGktaHImJldlPHBpK2hyJiZRZT5qcy1fZSYmUWU8anMrX2UmJihRZT1qcytfZSksVjgoaCxXZSksVTgoaCxRZSkseHIoKCFoLmEmJihoLmE9bmV3IEFzKEdoLGgsNSkpLGguYSkpLG89WnooZSw1KSxTdD09em4mJisrbyxLMT1XZS10dCxiQT1RZS1ndCxabD1iLk1hdGguc3FydChLMSpLMStiQSpiQSksTT1abCouMjAwMDAwMDAyOTgwMjMyMjQsa1U9SzEvKG8rMSksa1A9YkEvKG8rMSksWGg9dHQseFA9Z3QsQz0wO0M8bztDKyspWGgrPWtVLHhQKz1rUCxqPVhoK3VsKGUsMjQpKiRJKk0tTS8yLGo8MD9qPTE6aj5uJiYoaj1uLTEpLEg9eFArdWwoZSwyNCkqJEkqTS1NLzIsSDwwP0g9MTpIPnImJihIPXItMSkscz0oU3coKSx2PW5ldyB4cCx2KSxpeihzLGopLHN6KHMsSCksRHIoKCFoLmEmJihoLmE9bmV3IEFzKEdoLGgsNSkpLGguYSkscyl9ZnVuY3Rpb24gVGUoKXtUZT1aLGxodD0odWkoKSxwNGUpLHk5dD1iNGUsT089aEF0LFRmPXc0ZSxWNj1mQXQsanY9djRlLFd5PWRBdCxTNz1nQXQsQTc9cEF0LGhodD1KRywkdj1XMixmaHQ9bTRlLExTPXZBdCxiRz1LNixJTz0oRnh0KCksZnZlKSxKND1kdmUscTI9Z3ZlLHQ1PXB2ZSxadmU9bmV3IGVvKFpHLHBlKDApKSxfNz11dmUsbTl0PWx2ZSxINj1odmUsQTl0PUJ2ZSx4OXQ9dnZlLGs5dD14dmUsZ2h0PUF2ZSxFOXQ9VHZlLFQ5dD1fdmUsd0c9enZlLHBodD1SdmUsXzl0PU92ZSxDOXQ9RHZlLFM5dD1GdmUsQnY9cnZlLEFTPWl2ZSxzaHQ9eHdlLFFDdD1Fd2UsZzl0PW5ldyBPdygxMiksZDl0PW5ldyBlbyhVMixnOXQpLFlDdD0oVzAoKSxONyksZWc9bmV3IGVvKHpTdCxZQ3QpLFZ5PW5ldyBlbyhkbCwwKSxKdmU9bmV3IGVvKEVmdCxwZSgxKSksckc9bmV3IGVvKFc2LEdFKSx6Mj1RRyxjcz1LUyxDNz11NSxHdmU9UU8sSWQ9YTRlLHF5PXM1LHRtZT1uZXcgZW8oVGZ0LChObigpLCEwKSksSHk9Wk8sajI9YmZ0LCQyPUcyLHBHPXhiLHVodD1YRyxXQ3Q9KGFvKCksaDApLFdsPW5ldyBlbyhxdixXQ3QpLE52PW81LGRHPVhTdCxHeT1ReSxRdmU9a2Z0LHc5dD11QXQsYjl0PShsNCgpLGlQKSxuZXcgZW8oaUF0LGI5dCksWXZlPXZmdCxLdmU9bWZ0LFh2ZT15ZnQsV3ZlPXdmdCxkaHQ9d3ZlLGM5dD1Hd2Usb2h0PVZ3ZSxNUz1idmUsdXU9QndlLHp5PWR3ZSxfUz1md2UsJHk9SjJlLFZDdD10d2UsZWh0PWl3ZSxETz1ld2Usbmh0PWx3ZSx1OXQ9VXdlLGw5dD1Xd2Uscjl0PUR3ZSxnRz1vdmUsY2h0PVh3ZSxhaHQ9X3dlLGY5dD1ldmUsWEN0PW13ZSxpaHQ9eXdlLHRodD1ZRyxoOXQ9WXdlLHNHPVUyZSx6Q3Q9RzJlLGlHPVYyZSx0OXQ9THdlLEpDdD1Bd2UsZTl0PU13ZSxFNz1jNSxTbz1hNSxKZz1IU3QsT2Q9cGZ0LHJodD1nZnQsR0N0PWF3ZSx0cD14ZnQsQ1M9dTRlLGxHPWw0ZSxSdj1hQXQscDl0PWg0ZSxUNz1mNGUsczl0PWp3ZSxhOXQ9endlLFV5PVk2LFpsdD1IMmUsbzl0PUh3ZSx1Rz1id2UsY0c9cHdlLGZHPUpPLGk5dD1Qd2UsU1M9WndlLFBPPWJBdCxVQ3Q9Z3dlLHY5dD1jdmUsS0N0PXd3ZSxVdmU9TndlLFZ2ZT1jd2Usbjl0PVdTdCxoRz1Sd2Usb0c9dXdlLHdiPVoyZSxIQ3Q9WDJlLGFHPVkyZSxxQ3Q9SzJlLEpsdD1RMmUscTY9VzJlLFpDdD1Td2V9ZnVuY3Rpb24gSGF0KHQsZSl7TGF0KCk7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbix6bixocixwaTtpZihXZT10LmUsRz10LmQscz10LmEsV2U9PTApc3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4iMCI7Y2FzZSAxOnJldHVybiAkRTtjYXNlIDI6cmV0dXJuIjAuMDAiO2Nhc2UgMzpyZXR1cm4iMC4wMDAiO2Nhc2UgNDpyZXR1cm4iMC4wMDAwIjtjYXNlIDU6cmV0dXJuIjAuMDAwMDAiO2Nhc2UgNjpyZXR1cm4iMC4wMDAwMDAiO2RlZmF1bHQ6cmV0dXJuIHVlPW5ldyBNcCxlPDA/dWUuYSs9IjBFKyI6dWUuYSs9IjBFIix1ZS5hKz0tZSx1ZS5hfWlmKFN0PUcqMTArMSs3LFJ0PU50KHhoLHlkLDI1LFN0KzEsMTUsMSksbj1TdCxHPT0xKWlmKGQ9c1swXSxkPDApe3BpPU5zKGQsY28pO2RvIEs9cGkscGk9YUkocGksMTApLFJ0Wy0tbl09NDgrQXIoSnAoSyxfYShwaSwxMCkpKSZ5czt3aGlsZSh5YyhwaSwwKSE9MCl9ZWxzZXtwaT1kO2RvIEs9cGkscGk9cGkvMTB8MCxSdFstLW5dPTQ4KyhLLXBpKjEwKSZ5czt3aGlsZShwaSE9MCl9ZWxzZXtSbj1OdChDcixYciwyNSxHLDE1LDEpLGhyPUcsRGMocywwLFJuLDAsaHIpO3Q6Zm9yKDs7KXtmb3IoX2U9MCxrPWhyLTE7az49MDtrLS0pem49UGEoRjAoX2UsMzIpLE5zKFJuW2tdLGNvKSksZ3Q9UDBuKHpuKSxSbltrXT1BcihndCksX2U9QXIoJHAoZ3QsMzIpKTtNdD1BcihfZSksdHQ9bjtkbyBSdFstLW5dPTQ4K010JTEwJnlzO3doaWxlKChNdD1NdC8xMHwwKSE9MCYmbiE9MCk7Zm9yKHI9OS10dCtuLHY9MDt2PHImJm4+MDt2KyspUnRbLS1uXT00ODtmb3IoTT1oci0xO1JuW01dPT0wO00tLSlpZihNPT0wKWJyZWFrIHQ7aHI9TSsxfWZvcig7UnRbbl09PTQ4OykrK259aWYoSD1XZTwwLGg9U3Qtbi1lLTEsZT09MClyZXR1cm4gSCYmKFJ0Wy0tbl09NDUpLE1oKFJ0LG4sU3Qtbik7aWYoZT4wJiZoPj0tNil7aWYoaD49MCl7Zm9yKEM9bitoLGo9U3QtMTtqPj1DO2otLSlSdFtqKzFdPVJ0W2pdO3JldHVybiBSdFsrK0NdPTQ2LEgmJihSdFstLW5dPTQ1KSxNaChSdCxuLFN0LW4rMSl9Zm9yKE09MjtNPC1oKzE7TSsrKVJ0Wy0tbl09NDg7cmV0dXJuIFJ0Wy0tbl09NDYsUnRbLS1uXT00OCxIJiYoUnRbLS1uXT00NSksTWgoUnQsbixTdC1uKX1yZXR1cm4gUWU9bisxLG89U3QsS3Q9bmV3IEltLEgmJihLdC5hKz0iLSIpLG8tUWU+PTE/KHFwKEt0LFJ0W25dKSxLdC5hKz0iLiIsS3QuYSs9TWgoUnQsbisxLFN0LW4tMSkpOkt0LmErPU1oKFJ0LG4sU3QtbiksS3QuYSs9IkUiLGg+MCYmKEt0LmErPSIrIiksS3QuYSs9IiIraCxLdC5hfWZ1bmN0aW9uIEpoZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWU7c3dpdGNoKHQuYz1lLHQuZz1uZXcgX3Isbj0oUG0oKSxuZXcgTW0odC5jKSkscj1uZXcgZXIobikscDN0KHIpLFN0PUJyKHFlKHQuYywoY0koKSxsU3QpKSksdj11KHFlKHQuYyxzZnQpLDMxNiksS3Q9dShxZSh0LmMsYWZ0KSw0MjkpLGg9dShxZSh0LmMsb1N0KSw0ODIpLFJ0PXUocWUodC5jLGlmdCksNDMwKSx0Lmo9WHQoeWUocWUodC5jLE0zZSkpKSxkPXQuYSx2Lmcpe2Nhc2UgMDpkPXQuYTticmVhaztjYXNlIDE6ZD10LmI7YnJlYWs7Y2FzZSAyOmQ9dC5pO2JyZWFrO2Nhc2UgMzpkPXQuZTticmVhaztjYXNlIDQ6ZD10LmY7YnJlYWs7ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oX0grKHYuZiE9bnVsbD92LmY6IiIrdi5nKSkpfWlmKHQuZD1uZXcgRVF0KGQsS3QsaCksSnQodC5kLChaOCgpLGZTKSxSZShxZSh0LmMsQTNlKSkpLHQuZC5jPWplKFJlKHFlKHQuYyxjU3QpKSkscCQodC5jKS5pPT0wKXJldHVybiB0LmQ7Zm9yKE09bmV3IG5yKHAkKHQuYykpO00uZSE9TS5pLmdjKCk7KXtmb3IoQz11KGRyKE0pLDMzKSxIPUMuZy8yLGo9Qy5mLzIsdWU9bmV3ICRlKEMuaStILEMuaitqKTtUbCh0LmcsdWUpOylqbSh1ZSwoYi5NYXRoLnJhbmRvbSgpLS41KSpFZCwoYi5NYXRoLnJhbmRvbSgpLS41KSpFZCk7Sz11KHFlKEMsKHVpKCksSk8pKSwxNDIpLHR0PW5ldyAkUXQodWUsbmV3IGFoKHVlLmEtSC10LmovMi1LLmIsdWUuYi1qLXQuai8yLUsuZCxDLmcrdC5qKyhLLmIrSy5jKSxDLmYrdC5qKyhLLmQrSy5hKSkpLGxlKHQuZC5pLHR0KSxraSh0LmcsdWUsbmV3IGZhKHR0LEMpKX1zd2l0Y2goUnQuZyl7Y2FzZSAwOmlmKFN0PT1udWxsKXQuZC5kPXUoTmUodC5kLmksMCksNjUpO2Vsc2UgZm9yKE10PW5ldyBTKHQuZC5pKTtNdC5hPE10LmMuYy5sZW5ndGg7KXR0PXUoSihNdCksNjUpLEc9dSh1KHRyKHQuZyx0dC5hKSw0NikuYiwzMykuemcoKSxHIT1udWxsJiZobihHLFN0KSYmKHQuZC5kPXR0KTticmVhaztjYXNlIDE6Zm9yKHM9bmV3ICRlKHQuYy5nLHQuYy5mKSxzLmEqPS41LHMuYio9LjUsam0ocyx0LmMuaSx0LmMuaiksbz1hcyxndD1uZXcgUyh0LmQuaSk7Z3QuYTxndC5jLmMubGVuZ3RoOyl0dD11KEooZ3QpLDY1KSxrPVdwKHR0LmEscyksazxvJiYobz1rLHQuZC5kPXR0KTticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyBGbihfSCsoUnQuZiE9bnVsbD9SdC5mOiIiK1J0LmcpKSl9cmV0dXJuIHQuZH1mdW5jdGlvbiB0ZmUodCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlO2ZvcihLdD11KEF0KCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSksMCksMjAyKSxDPW5ldyBQdSxSdD1uZXcgX3IsdWU9YmxlKEt0KSxhdShSdC5mLEt0LHVlKSxqPW5ldyBfcixyPW5ldyBaaSxHPXpwKEQxKGx0KGN0KGoxLDEpLERlLDIwLDAsWyghZS5kJiYoZS5kPW5ldyBDbihZcyxlLDgsNSkpLGUuZCksKCFlLmUmJihlLmU9bmV3IENuKFlzLGUsNyw0KSksZS5lKV0pKSk7enIoRyk7KXtpZihIPXUoTXIoRyksNzkpLCghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSkuaSE9MSl0aHJvdyBpdChuZXcgRm4oU2RlKyghdC5hJiYodC5hPW5ldyBmZShKaSx0LDYsNikpLHQuYSkuaSkpO0ghPXQmJih0dD11KEF0KCghSC5hJiYoSC5hPW5ldyBmZShKaSxILDYsNikpLEguYSksMCksMjAyKSxmcyhyLHR0LHIuYy5iLHIuYyksSz11KGVjKExvKFJ0LmYsdHQpKSwxMiksS3x8KEs9YmxlKHR0KSxhdShSdC5mLHR0LEspKSxNPW4/aWEobmV3IHhvKHUoTmUodWUsdWUuYy5sZW5ndGgtMSksOCkpLHUoTmUoSyxLLmMubGVuZ3RoLTEpLDgpKTppYShuZXcgeG8oKEFuKDAsdWUuYy5sZW5ndGgpLHUodWUuY1swXSw4KSkpLChBbigwLEsuYy5sZW5ndGgpLHUoSy5jWzBdLDgpKSksYXUoai5mLHR0LE0pKX1pZihyLmIhPTApZm9yKGd0PXUoTmUodWUsbj91ZS5jLmxlbmd0aC0xOjApLDgpLGs9MTtrPHVlLmMubGVuZ3RoO2srKyl7Zm9yKE10PXUoTmUodWUsbj91ZS5jLmxlbmd0aC0xLWs6ayksOCkscz1laShyLDApO3MuYiE9cy5kLmM7KXR0PXUodGkocyksMjAyKSxLPXUoZWMoTG8oUnQuZix0dCkpLDEyKSxLLmMubGVuZ3RoPD1rP3R6KHMpOihTdD1MaShuZXcgeG8odShOZShLLG4/Sy5jLmxlbmd0aC0xLWs6ayksOCkpLHUoZWMoTG8oai5mLHR0KSksOCkpLChNdC5hIT1TdC5hfHxNdC5iIT1TdC5iKSYmKG89TXQuYS1ndC5hLGQ9TXQuYi1ndC5iLGg9U3QuYS1ndC5hLHY9U3QuYi1ndC5iLGgqZD09dipvJiYobz09MHx8aXNOYU4obyk/bzpvPDA/LTE6MSk9PShoPT0wfHxpc05hTihoKT9oOmg8MD8tMToxKSYmKGQ9PTB8fGlzTmFOKGQpP2Q6ZDwwPy0xOjEpPT0odj09MHx8aXNOYU4odik/djp2PDA/LTE6MSk/KGIuTWF0aC5hYnMobyk8Yi5NYXRoLmFicyhoKXx8Yi5NYXRoLmFicyhkKTxiLk1hdGguYWJzKHYpKSYmZnMoQyxNdCxDLmMuYixDLmMpOms+MSYmZnMoQyxndCxDLmMuYixDLmMpLHR6KHMpKSk7Z3Q9TXR9cmV0dXJuIEN9ZnVuY3Rpb24gTXhuKHQsZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbix6bixocixwaSxqcyxabCxYaCxLMTtmb3IodnIobiwiR3JlZWR5IGN5Y2xlIHJlbW92YWwiLDEpLFN0PWUuYSxLMT1TdC5jLmxlbmd0aCx0LmE9TnQoQ3IsWHIsMjUsSzEsMTUsMSksdC5jPU50KENyLFhyLDI1LEsxLDE1LDEpLHQuYj1OdChDcixYciwyNSxLMSwxNSwxKSxrPTAsZ3Q9bmV3IFMoU3QpO2d0LmE8Z3QuYy5jLmxlbmd0aDspe2ZvcihLPXUoSihndCksMTApLEsucD1rLFFlPW5ldyBTKEsuaik7UWUuYTxRZS5jLmMubGVuZ3RoOyl7Zm9yKHVlPXUoSihRZSksMTEpLGQ9bmV3IFModWUuZSk7ZC5hPGQuYy5jLmxlbmd0aDspcj11KEooZCksMTcpLHIuYy5pIT1LJiYoaHI9dShRKHIsKFRlKCksXzcpKSwxOSkuYSx0LmFba10rPWhyPjA/aHIrMToxKTtmb3IoaD1uZXcgUyh1ZS5nKTtoLmE8aC5jLmMubGVuZ3RoOylyPXUoSihoKSwxNyksci5kLmkhPUsmJihocj11KFEociwoVGUoKSxfNykpLDE5KS5hLHQuY1trXSs9aHI+MD9ocisxOjEpfXQuY1trXT09MD9yaSh0LmUsSyk6dC5hW2tdPT0wJiZyaSh0LmYsSyksKytrfWZvcihHPS0xLEg9MSxNPW5ldyBoZSx0LmQ9dShRKGUsKGFlKCksJDYpKSwyMzApO0sxPjA7KXtmb3IoO3QuZS5iIT0wOylqcz11KE9udCh0LmUpLDEwKSx0LmJbanMucF09Ry0tLGV4dCh0LGpzKSwtLUsxO2Zvcig7dC5mLmIhPTA7KVpsPXUoT250KHQuZiksMTApLHQuYltabC5wXT1IKyssZXh0KHQsWmwpLC0tSzE7aWYoSzE+MCl7Zm9yKGo9U2EsTXQ9bmV3IFMoU3QpO010LmE8TXQuYy5jLmxlbmd0aDspSz11KEooTXQpLDEwKSx0LmJbSy5wXT09MCYmKFJ0PXQuY1tLLnBdLXQuYVtLLnBdLFJ0Pj1qJiYoUnQ+aiYmKE0uYz1OdChRbixEZSwxLDAsNSwxKSxqPVJ0KSxNLmNbTS5jLmxlbmd0aF09SykpO0M9dC5aZihNKSx0LmJbQy5wXT1IKyssZXh0KHQsQyksLS1LMX19Zm9yKHBpPVN0LmMubGVuZ3RoKzEsaz0wO2s8U3QuYy5sZW5ndGg7aysrKXQuYltrXTwwJiYodC5iW2tdKz1waSk7Zm9yKHR0PW5ldyBTKFN0KTt0dC5hPHR0LmMuYy5sZW5ndGg7KWZvcihLPXUoSih0dCksMTApLHpuPU9adChLLmopLF9lPXpuLFdlPTAsUm49X2UubGVuZ3RoO1dlPFJuOysrV2UpZm9yKHVlPV9lW1dlXSxLdD13ZCh1ZS5nKSxzPUt0LG89MCx2PXMubGVuZ3RoO288djsrK28pcj1zW29dLFhoPXIuZC5pLnAsdC5iW0sucF0+dC5iW1hoXSYmKGJ2KHIsITApLEp0KGUsX08sKE5uKCksITApKSk7dC5hPW51bGwsdC5jPW51bGwsdC5iPW51bGwsQWgodC5mKSxBaCh0LmUpLG9yKG4pfWZ1bmN0aW9uIGVmZSh0LGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3Q7Zm9yKHI9bmV3IGhlLGQ9bmV3IGhlLHR0PWUvMixIPXQuZ2MoKSxzPXUodC5YYigwKSw4KSxndD11KHQuWGIoMSksOCksRz1yYXQocy5hLHMuYixndC5hLGd0LmIsdHQpLGxlKHIsKEFuKDAsRy5jLmxlbmd0aCksdShHLmNbMF0sOCkpKSxsZShkLChBbigxLEcuYy5sZW5ndGgpLHUoRy5jWzFdLDgpKSksaz0yO2s8SDtrKyspSz1zLHM9Z3QsZ3Q9dSh0LlhiKGspLDgpLEc9cmF0KHMuYSxzLmIsSy5hLEsuYix0dCksbGUociwoQW4oMSxHLmMubGVuZ3RoKSx1KEcuY1sxXSw4KSkpLGxlKGQsKEFuKDAsRy5jLmxlbmd0aCksdShHLmNbMF0sOCkpKSxHPXJhdChzLmEscy5iLGd0LmEsZ3QuYix0dCksbGUociwoQW4oMCxHLmMubGVuZ3RoKSx1KEcuY1swXSw4KSkpLGxlKGQsKEFuKDEsRy5jLmxlbmd0aCksdShHLmNbMV0sOCkpKTtmb3IoRz1yYXQoZ3QuYSxndC5iLHMuYSxzLmIsdHQpLGxlKHIsKEFuKDEsRy5jLmxlbmd0aCksdShHLmNbMV0sOCkpKSxsZShkLChBbigwLEcuYy5sZW5ndGgpLHUoRy5jWzBdLDgpKSksbj1uZXcgUHUsaD1uZXcgaGUscmkobiwoQW4oMCxyLmMubGVuZ3RoKSx1KHIuY1swXSw4KSkpLEM9MTtDPHIuYy5sZW5ndGgtMjtDKz0yKW89KEFuKEMsci5jLmxlbmd0aCksdShyLmNbQ10sOCkpLGo9Z29lKChBbihDLTEsci5jLmxlbmd0aCksdShyLmNbQy0xXSw4KSksbywoQW4oQysxLHIuYy5sZW5ndGgpLHUoci5jW0MrMV0sOCkpLChBbihDKzIsci5jLmxlbmd0aCksdShyLmNbQysyXSw4KSkpLCFpc0Zpbml0ZShqLmEpfHwhaXNGaW5pdGUoai5iKT9mcyhuLG8sbi5jLmIsbi5jKTpmcyhuLGosbi5jLmIsbi5jKTtmb3Iocmkobix1KE5lKHIsci5jLmxlbmd0aC0xKSw4KSksbGUoaCwoQW4oMCxkLmMubGVuZ3RoKSx1KGQuY1swXSw4KSkpLE09MTtNPGQuYy5sZW5ndGgtMjtNKz0yKW89KEFuKE0sZC5jLmxlbmd0aCksdShkLmNbTV0sOCkpLGo9Z29lKChBbihNLTEsZC5jLmxlbmd0aCksdShkLmNbTS0xXSw4KSksbywoQW4oTSsxLGQuYy5sZW5ndGgpLHUoZC5jW00rMV0sOCkpLChBbihNKzIsZC5jLmxlbmd0aCksdShkLmNbTSsyXSw4KSkpLCFpc0Zpbml0ZShqLmEpfHwhaXNGaW5pdGUoai5iKT9oLmNbaC5jLmxlbmd0aF09bzpoLmNbaC5jLmxlbmd0aF09ajtmb3IobGUoaCx1KE5lKGQsZC5jLmxlbmd0aC0xKSw4KSksdj1oLmMubGVuZ3RoLTE7dj49MDt2LS0pcmkobiwoQW4odixoLmMubGVuZ3RoKSx1KGguY1t2XSw4KSkpO3JldHVybiBufWZ1bmN0aW9uIER4bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSDtpZihoPSEwLE09bnVsbCxyPW51bGwscz1udWxsLGU9ITEsSD1vNWUsaz1udWxsLG89bnVsbCxkPTAsdj11c3QodCxkLG5MdCxyTHQpLHY8dC5sZW5ndGgmJihScih2LHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQodik9PTU4KSYmKE09dC5zdWJzdHIoZCx2LWQpLGQ9disxKSxuPU0hPW51bGwmJnlNKGdVLE0udG9Mb3dlckNhc2UoKSksbil7aWYodj10Lmxhc3RJbmRleE9mKCIhLyIpLHY9PS0xKXRocm93IGl0KG5ldyBGbigibm8gYXJjaGl2ZSBzZXBhcmF0b3IiKSk7aD0hMCxyPVBsKHQsZCwrK3YpLGQ9dn1lbHNlIGQ+PTAmJmhuKHQuc3Vic3RyKGQsMiksIi8vIik/KGQrPTIsdj11c3QodCxkLG9BLGNBKSxyPXQuc3Vic3RyKGQsdi1kKSxkPXYpOk0hPW51bGwmJihkPT10Lmxlbmd0aHx8KFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKSE9NDcpKSYmKGg9ITEsdj1PMnQodCxDdSgzNSksZCksdj09LTEmJih2PXQubGVuZ3RoKSxyPXQuc3Vic3RyKGQsdi1kKSxkPXYpO2lmKCFuJiZkPHQubGVuZ3RoJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpPT00NykmJih2PXVzdCh0LGQrMSxvQSxjQSksQz10LnN1YnN0cihkKzEsdi0oZCsxKSksQy5sZW5ndGg+MCYmd2EoQyxDLmxlbmd0aC0xKT09NTgmJihzPUMsZD12KSksZDx0Lmxlbmd0aCYmKFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKT09NDcpJiYoKytkLGU9ITApLGQ8dC5sZW5ndGgmJihScihkLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZCkhPTYzKSYmKFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKSE9MzUpKXtmb3Ioaj1uZXcgaGU7ZDx0Lmxlbmd0aCYmKFJyKGQsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChkKSE9NjMpJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpIT0zNSk7KXY9dXN0KHQsZCxvQSxjQSksbGUoaix0LnN1YnN0cihkLHYtZCkpLGQ9dixkPHQubGVuZ3RoJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpPT00NykmJihtbG4odCwrK2QpfHwoai5jW2ouYy5sZW5ndGhdPSIiKSk7SD1OdChBZSxlZSwyLGouYy5sZW5ndGgsNiwxKSxQMShqLEgpfXJldHVybiBkPHQubGVuZ3RoJiYoUnIoZCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGQpPT02MykmJih2PXY4KHQsMzUsKytkKSx2PT0tMSYmKHY9dC5sZW5ndGgpLGs9dC5zdWJzdHIoZCx2LWQpLGQ9diksZDx0Lmxlbmd0aCYmKG89Uk0odCwrK2QpKSx4NG4oaCxNLHIscyxILGspLG5ldyBmYXQoaCxNLHIscyxlLEgsayxvKX1mdW5jdGlvbiBJeG4odCxlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpLGpzLFpsLFhoO2Zvcihqcz1uZXcgaGUsRz1uZXcgUyhlLmIpO0cuYTxHLmMuYy5sZW5ndGg7KWZvcihqPXUoSihHKSwyOSksS3Q9bmV3IFMoai5hKTtLdC5hPEt0LmMuYy5sZW5ndGg7KXtmb3IoUnQ9dShKKEt0KSwxMCksUnQucD0tMSxNPVNhLFdlPVNhLFJuPW5ldyBTKFJ0LmopO1JuLmE8Um4uYy5jLmxlbmd0aDspe2ZvcihRZT11KEooUm4pLDExKSxzPW5ldyBTKFFlLmUpO3MuYTxzLmMuYy5sZW5ndGg7KW49dShKKHMpLDE3KSx6bj11KFEobiwoVGUoKSxINikpLDE5KS5hLE09Yi5NYXRoLm1heChNLHpuKTtmb3Iocj1uZXcgUyhRZS5nKTtyLmE8ci5jLmMubGVuZ3RoOyluPXUoSihyKSwxNyksem49dShRKG4sKFRlKCksSDYpKSwxOSkuYSxXZT1iLk1hdGgubWF4KFdlLHpuKX1KdChSdCxfRyxwZShNKSksSnQoUnQsU0cscGUoV2UpKX1mb3IoZ3Q9MCxIPW5ldyBTKGUuYik7SC5hPEguYy5jLmxlbmd0aDspZm9yKGo9dShKKEgpLDI5KSxLdD1uZXcgUyhqLmEpO0t0LmE8S3QuYy5jLmxlbmd0aDspUnQ9dShKKEt0KSwxMCksUnQucDwwJiYocGk9bmV3IHpwdCxwaS5iPWd0KyssUnVlKHQsUnQscGkpLGpzLmNbanMuYy5sZW5ndGhdPXBpKTtmb3IoX2U9VWQoanMuYy5sZW5ndGgpLEM9VWQoanMuYy5sZW5ndGgpLGg9MDtoPGpzLmMubGVuZ3RoO2grKylsZShfZSxuZXcgaGUpLGxlKEMscGUoMCkpO2ZvcihlNW4oZSxqcyxfZSxDKSxabD11KFAxKGpzLE50KEJtZSxWMWUsMjU3LGpzLmMubGVuZ3RoLDAsMSkpLDg0MCksdWU9dShQMShfZSxOdCh3aCxUeSwxNSxfZS5jLmxlbmd0aCwwLDEpKSwxOTIpLGs9TnQoQ3IsWHIsMjUsQy5jLmxlbmd0aCwxNSwxKSxkPTA7ZDxrLmxlbmd0aDtkKyspa1tkXT0oQW4oZCxDLmMubGVuZ3RoKSx1KEMuY1tkXSwxOSkpLmE7Zm9yKE10PTAsU3Q9bmV3IGhlLHY9MDt2PFpsLmxlbmd0aDt2Kyspa1t2XT09MCYmbGUoU3QsWmxbdl0pO2Zvcih0dD1OdChDcixYciwyNSxabC5sZW5ndGgsMTUsMSk7U3QuYy5sZW5ndGghPTA7KWZvcihwaT11KEZnKFN0LDApLDI1NyksdHRbcGkuYl09TXQrKzshdWVbcGkuYl0uZGMoKTspWGg9dSh1ZVtwaS5iXS4kYygwKSwyNTcpLC0ta1tYaC5iXSxrW1hoLmJdPT0wJiYoU3QuY1tTdC5jLmxlbmd0aF09WGgpO2Zvcih0LmE9TnQoQm1lLFYxZSwyNTcsWmwubGVuZ3RoLDAsMSksbz0wO288WmwubGVuZ3RoO28rKylmb3IoSz1abFtvXSxocj10dFtvXSx0LmFbaHJdPUssSy5iPWhyLEt0PW5ldyBTKEsuZSk7S3QuYTxLdC5jLmMubGVuZ3RoOylSdD11KEooS3QpLDEwKSxSdC5wPWhyO3JldHVybiB0LmF9ZnVuY3Rpb24gZmkodCl7dmFyIGUsbixyO2lmKHQuZD49dC5qKXt0LmE9LTEsdC5jPTE7cmV0dXJufWlmKGU9d2EodC5pLHQuZCsrKSx0LmE9ZSx0LmI9PTEpe3N3aXRjaChlKXtjYXNlIDkyOmlmKHI9MTAsdC5kPj10LmopdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLE9IKSkpKTt0LmE9d2EodC5pLHQuZCsrKTticmVhaztjYXNlIDQ1Oih0LmUmNTEyKT09NTEyJiZ0LmQ8dC5qJiZ3YSh0LmksdC5kKT09OTE/KCsrdC5kLHI9MjQpOnI9MDticmVhaztjYXNlIDkxOmlmKCh0LmUmNTEyKSE9NTEyJiZ0LmQ8dC5qJiZ3YSh0LmksdC5kKT09NTgpeysrdC5kLHI9MjA7YnJlYWt9ZGVmYXVsdDooZSY2NDUxMik9PVJJJiZ0LmQ8dC5qJiYobj13YSh0LmksdC5kKSwobiY2NDUxMik9PTU2MzIwJiYodC5hPUthKyhlLVJJPDwxMCkrbi01NjMyMCwrK3QuZCkpLHI9MH10LmM9cjtyZXR1cm59c3dpdGNoKGUpe2Nhc2UgMTI0OnI9MjticmVhaztjYXNlIDQyOnI9MzticmVhaztjYXNlIDQzOnI9NDticmVhaztjYXNlIDYzOnI9NTticmVhaztjYXNlIDQxOnI9NzticmVhaztjYXNlIDQ2OnI9ODticmVhaztjYXNlIDkxOnI9OTticmVhaztjYXNlIDk0OnI9MTE7YnJlYWs7Y2FzZSAzNjpyPTEyO2JyZWFrO2Nhc2UgNDA6aWYocj02LHQuZD49dC5qfHx3YSh0LmksdC5kKSE9NjMpYnJlYWs7aWYoKyt0LmQ+PXQuail0aHJvdyBpdChuZXcgTnIocXIoKFByKCksb3V0KSkpKTtzd2l0Y2goZT13YSh0LmksdC5kKyspLGUpe2Nhc2UgNTg6cj0xMzticmVhaztjYXNlIDYxOnI9MTQ7YnJlYWs7Y2FzZSAzMzpyPTE1O2JyZWFrO2Nhc2UgOTE6cj0xOTticmVhaztjYXNlIDYyOnI9MTg7YnJlYWs7Y2FzZSA2MDppZih0LmQ+PXQuail0aHJvdyBpdChuZXcgTnIocXIoKFByKCksb3V0KSkpKTtpZihlPXdhKHQuaSx0LmQrKyksZT09NjEpcj0xNjtlbHNlIGlmKGU9PTMzKXI9MTc7ZWxzZSB0aHJvdyBpdChuZXcgTnIocXIoKFByKCksdDBlKSkpKTticmVhaztjYXNlIDM1OmZvcig7dC5kPHQuaiYmKGU9d2EodC5pLHQuZCsrKSxlIT00MSk7KTtpZihlIT00MSl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksZTBlKSkpKTtyPTIxO2JyZWFrO2RlZmF1bHQ6aWYoZT09NDV8fDk3PD1lJiZlPD0xMjJ8fDY1PD1lJiZlPD05MCl7LS10LmQscj0yMjticmVha31lbHNlIGlmKGU9PTQwKXtyPTIzO2JyZWFrfXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxvdXQpKSkpfWJyZWFrO2Nhc2UgOTI6aWYocj0xMCx0LmQ+PXQuail0aHJvdyBpdChuZXcgTnIocXIoKFByKCksT0gpKSkpO3QuYT13YSh0LmksdC5kKyspO2JyZWFrO2RlZmF1bHQ6cj0wfXQuYz1yfWZ1bmN0aW9uIE94bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem4saHI7aWYoX2U9dShRKHQsKFRlKCksY3MpKSw5OCksX2UhPSh1YSgpLEcxKSYmX2UhPVRiKXtmb3IoRz10LmIsSD1HLmMubGVuZ3RoLEM9bmV3IFhjKChqbChIKzIsWWF0KSxKJChQYShQYSg1LEgrMiksKEgrMikvMTB8MCkpKSksSz1uZXcgWGMoKGpsKEgrMixZYXQpLEokKFBhKFBhKDUsSCsyKSwoSCsyKS8xMHwwKSkpKSxsZShDLG5ldyBfciksbGUoQyxuZXcgX3IpLGxlKEssbmV3IGhlKSxsZShLLG5ldyBoZSksdWU9bmV3IGhlLGU9MDtlPEg7ZSsrKWZvcihuPShBbihlLEcuYy5sZW5ndGgpLHUoRy5jW2VdLDI5KSksV2U9KEFuKGUsQy5jLmxlbmd0aCksdShDLmNbZV0sODMpKSx0dD1uZXcgX3IsQy5jW0MuYy5sZW5ndGhdPXR0LFJuPShBbihlLEsuYy5sZW5ndGgpLHUoSy5jW2VdLDE1KSksTXQ9bmV3IGhlLEsuY1tLLmMubGVuZ3RoXT1NdCxzPW5ldyBTKG4uYSk7cy5hPHMuYy5jLmxlbmd0aDspe2lmKHI9dShKKHMpLDEwKSxzM3Qocikpe3VlLmNbdWUuYy5sZW5ndGhdPXI7Y29udGludWV9Zm9yKGs9bmV3IGFyKGxyKGpvKHIpLmEuS2MoKSxuZXcgeikpO3pyKGspOylkPXUoTXIoayksMTcpLHpuPWQuYy5pLHMzdCh6bikmJihRZT11KFdlLnhjKFEoem4sKGFlKCksX2kpKSksMTApLFFlfHwoUWU9Rm9lKHQsem4pLFdlLnpjKFEoem4sX2kpLFFlKSxSbi5GYyhRZSkpLE9hKGQsdShOZShRZS5qLDEpLDExKSkpO2Zvcih2PW5ldyBhcihscihEcyhyKS5hLktjKCksbmV3IHopKTt6cih2KTspZD11KE1yKHYpLDE3KSxocj1kLmQuaSxzM3QoaHIpJiYoZ3Q9dSh0cih0dCxRKGhyLChhZSgpLF9pKSkpLDEwKSxndHx8KGd0PUZvZSh0LGhyKSxraSh0dCxRKGhyLF9pKSxndCksTXQuY1tNdC5jLmxlbmd0aF09Z3QpLG9hKGQsdShOZShndC5qLDApLDExKSkpfWZvcihNPTA7TTxLLmMubGVuZ3RoO00rKylpZihTdD0oQW4oTSxLLmMubGVuZ3RoKSx1KEsuY1tNXSwxNSkpLCFTdC5kYygpKWZvcihqPW51bGwsTT09MD8oaj1uZXcgU2godCksS20oMCxHLmMubGVuZ3RoKSxYQyhHLmMsMCxqKSk6TT09Qy5jLmxlbmd0aC0xPyhqPW5ldyBTaCh0KSxHLmNbRy5jLmxlbmd0aF09aik6aj0oQW4oTS0xLEcuYy5sZW5ndGgpLHUoRy5jW00tMV0sMjkpKSxoPVN0LktjKCk7aC5PYigpOylvPXUoaC5QYigpLDEwKSxFbyhvLGopO2ZvcihLdD1uZXcgUyh1ZSk7S3QuYTxLdC5jLmMubGVuZ3RoOylSdD11KEooS3QpLDEwKSxFbyhSdCxudWxsKTtKdCh0LChhZSgpLFZsdCksdWUpfX1mdW5jdGlvbiBQeG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0O2lmKHZyKG4sIkNvZmZtYW4tR3JhaGFtIExheWVyaW5nIiwxKSxlLmEuYy5sZW5ndGg9PTApe29yKG4pO3JldHVybn1mb3IoS3Q9dShRKGUsKFRlKCksaTl0KSksMTkpLmEsdj0wLGg9MCxqPW5ldyBTKGUuYSk7ai5hPGouYy5jLmxlbmd0aDspZm9yKE09dShKKGopLDEwKSxNLnA9disrLG89bmV3IGFyKGxyKERzKE0pLmEuS2MoKSxuZXcgeikpO3pyKG8pOylzPXUoTXIobyksMTcpLHMucD1oKys7Zm9yKHQuZD1OdChwbCxvMCwyNSx2LDE2LDEpLHQuYT1OdChwbCxvMCwyNSxoLDE2LDEpLHQuYj1OdChDcixYciwyNSx2LDE1LDEpLHQuZT1OdChDcixYciwyNSx2LDE1LDEpLHQuZj1OdChDcixYciwyNSx2LDE1LDEpLGN6KHQuYyksdDBuKHQsZSksRz1uZXcgbiQobmV3IHBSKHQpKSxSdD1uZXcgUyhlLmEpO1J0LmE8UnQuYy5jLmxlbmd0aDspe2ZvcihNdD11KEooUnQpLDEwKSxvPW5ldyBhcihscihqbyhNdCkuYS5LYygpLG5ldyB6KSk7enIobyk7KXM9dShNcihvKSwxNyksdC5hW3MucF18fCsrdC5iW010LnBdO3QuYltNdC5wXT09MCYmUjgoeEUoRyxNdCkpfWZvcihkPTA7Ry5iLmMubGVuZ3RoIT0wOylmb3IoTXQ9dShjaXQoRyksMTApLHQuZltNdC5wXT1kKyssbz1uZXcgYXIobHIoRHMoTXQpLmEuS2MoKSxuZXcgeikpO3pyKG8pOylzPXUoTXIobyksMTcpLCF0LmFbcy5wXSYmKHR0PXMuZC5pLC0tdC5iW3R0LnBdLGxuKHQuYyx0dCxwZSh0LmZbTXQucF0pKSx0LmJbdHQucF09PTAmJlI4KHhFKEcsdHQpKSk7Zm9yKEg9bmV3IG4kKG5ldyBYdHQodCkpLFN0PW5ldyBTKGUuYSk7U3QuYTxTdC5jLmMubGVuZ3RoOyl7Zm9yKE10PXUoSihTdCksMTApLG89bmV3IGFyKGxyKERzKE10KS5hLktjKCksbmV3IHopKTt6cihvKTspcz11KE1yKG8pLDE3KSx0LmFbcy5wXXx8Kyt0LmVbTXQucF07dC5lW010LnBdPT0wJiZSOCh4RShILE10KSl9Zm9yKEM9bmV3IGhlLHI9WFF0KGUsQyk7SC5iLmMubGVuZ3RoIT0wOylmb3IoZ3Q9dShjaXQoSCksMTApLChyLmEuYy5sZW5ndGg+PUt0fHwhdGZuKGd0LHIpKSYmKHI9WFF0KGUsQykpLEVvKGd0LHIpLG89bmV3IGFyKGxyKGpvKGd0KS5hLktjKCksbmV3IHopKTt6cihvKTspcz11KE1yKG8pLDE3KSwhdC5hW3MucF0mJihLPXMuYy5pLC0tdC5lW0sucF0sdC5lW0sucF09PTAmJlI4KHhFKEgsSykpKTtmb3Ioaz1DLmMubGVuZ3RoLTE7az49MDstLWspbGUoZS5iLChBbihrLEMuYy5sZW5ndGgpLHUoQy5jW2tdLDI5KSkpO2UuYS5jPU50KFFuLERlLDEsMCw1LDEpLG9yKG4pfWZ1bmN0aW9uIG5mZSh0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGs7Zm9yKHQuYj0xLGZpKHQpLGU9bnVsbCx0LmM9PTAmJnQuYT09OTQ/KGZpKHQpLGU9KGdpKCksZ2koKSxuZXcgTmwoNCkpLGpjKGUsMCxlNyksZD1uZXcgTmwoNCkpOmQ9KGdpKCksZ2koKSxuZXcgTmwoNCkpLHM9ITA7KGs9dC5jKSE9MTspe2lmKGs9PTAmJnQuYT09OTMmJiFzKXtlJiYoTF8oZSxkKSxkPWUpO2JyZWFrfWlmKG49dC5hLHI9ITEsaz09MTApc3dpdGNoKG4pe2Nhc2UgMTAwOmNhc2UgNjg6Y2FzZSAxMTk6Y2FzZSA4NzpjYXNlIDExNTpjYXNlIDgzOnl5KGQsTUUobikpLHI9ITA7YnJlYWs7Y2FzZSAxMDU6Y2FzZSA3MzpjYXNlIDk5OmNhc2UgNjc6bj0oeXkoZCxNRShuKSksLTEpLG48MCYmKHI9ITApO2JyZWFrO2Nhc2UgMTEyOmNhc2UgODA6aWYodj11NXQodCxuKSwhdil0aHJvdyBpdChuZXcgTnIocXIoKFByKCksY3V0KSkpKTt5eShkLHYpLHI9ITA7YnJlYWs7ZGVmYXVsdDpuPUg1dCh0KX1lbHNlIGlmKGs9PTI0JiYhcyl7aWYoZSYmKExfKGUsZCksZD1lKSxvPW5mZSh0KSxMXyhkLG8pLHQuYyE9MHx8dC5hIT05Myl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksbDBlKSkpKTticmVha31pZihmaSh0KSwhcil7aWYoaz09MCl7aWYobj09OTEpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFA4dCkpKSk7aWYobj09OTMpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEY4dCkpKSk7aWYobj09NDUmJiFzJiZ0LmEhPTkzKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSx1dXQpKSkpfWlmKHQuYyE9MHx8dC5hIT00NXx8bj09NDUmJnMpamMoZCxuLG4pO2Vsc2V7aWYoZmkodCksKGs9dC5jKT09MSl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUEgpKSkpO2lmKGs9PTAmJnQuYT09OTMpamMoZCxuLG4pLGpjKGQsNDUsNDUpO2Vsc2V7aWYoaz09MCYmdC5hPT05M3x8az09MjQpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLHV1dCkpKSk7aWYoaD10LmEsaz09MCl7aWYoaD09OTEpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFA4dCkpKSk7aWYoaD09OTMpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEY4dCkpKSk7aWYoaD09NDUpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLHV1dCkpKSl9ZWxzZSBrPT0xMCYmKGg9SDV0KHQpKTtpZihmaSh0KSxuPmgpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGQwZSkpKSk7amMoZCxuLGgpfX19cz0hMX1pZih0LmM9PTEpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFBIKSkpKTtyZXR1cm4gdjQoZCksU18oZCksdC5iPTAsZmkodCksZH1mdW5jdGlvbiBGeG4odCl7SXIodC5jLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbQWEsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2RlY2ltYWwiXSkpLElyKHQuZCxZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNpbnRlZ2VyIl0pKSxJcih0LmUsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtBYSwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjYm9vbGVhbiJdKSksSXIodC5mLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbQWEsIkVCb29sZWFuIixjaSwiRUJvb2xlYW46T2JqZWN0Il0pKSxJcih0LmksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtBYSwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjYnl0ZSJdKSksSXIodC5nLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbQWEsImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2hleEJpbmFyeSJdKSksSXIodC5qLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbQWEsIkVCeXRlIixjaSwiRUJ5dGU6T2JqZWN0Il0pKSxJcih0Lm4sWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtBYSwiRUNoYXIiLGNpLCJFQ2hhcjpPYmplY3QiXSkpLElyKHQudCxZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNkb3VibGUiXSkpLElyKHQudSxZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJFRG91YmxlIixjaSwiRURvdWJsZTpPYmplY3QiXSkpLElyKHQuRixZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNmbG9hdCJdKSksSXIodC5HLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbQWEsIkVGbG9hdCIsY2ksIkVGbG9hdDpPYmplY3QiXSkpLElyKHQuSSxZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNpbnQiXSkpLElyKHQuSixZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJFSW50IixjaSwiRUludDpPYmplY3QiXSkpLElyKHQuTixZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNsb25nIl0pKSxJcih0Lk8sWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtBYSwiRUxvbmciLGNpLCJFTG9uZzpPYmplY3QiXSkpLElyKHQuWixZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzaG9ydCJdKSksSXIodC4kLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbQWEsIkVTaG9ydCIsY2ksIkVTaG9ydDpPYmplY3QiXSkpLElyKHQuXyxZcixsdChjdChBZSwxKSxlZSwyLDYsW0FhLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciXSkpfWZ1bmN0aW9uIE54bih0KXt2YXIgZSxuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2UsV2UsUWUsUm4sem4saHI7aWYodC5jLmxlbmd0aD09MSlyZXR1cm4gQW4oMCx0LmMubGVuZ3RoKSx1KHQuY1swXSwxMzUpO2lmKHQuYy5sZW5ndGg8PTApcmV0dXJuIG5ldyBqJDtmb3Iodj1uZXcgUyh0KTt2LmE8di5jLmMubGVuZ3RoOyl7Zm9yKGg9dShKKHYpLDEzNSksTXQ9MCxHPXdpLEs9d2ksaj1TYSxIPVNhLGd0PWVpKGguYiwwKTtndC5iIT1ndC5kLmM7KXR0PXUodGkoZ3QpLDg2KSxNdCs9dShRKHR0LChndigpLFBHKSksMTkpLmEsRz1iLk1hdGgubWluKEcsdHQuZS5hKSxLPWIuTWF0aC5taW4oSyx0dC5lLmIpLGo9Yi5NYXRoLm1heChqLHR0LmUuYSt0dC5mLmEpLEg9Yi5NYXRoLm1heChILHR0LmUuYit0dC5mLmIpO0p0KGgsKGd2KCksUEcpLHBlKE10KSksSnQoaCwoZmMoKSwkUyksbmV3ICRlKEcsSykpLEp0KGgsek8sbmV3ICRlKGosSCkpfWZvcih3bigpLFpzKHQsbmV3IFVRKSxLdD1uZXcgaiQsTW8oS3QsKEFuKDAsdC5jLmxlbmd0aCksdSh0LmNbMF0sOTQpKSksTT0wLFJuPTAsaz1uZXcgUyh0KTtrLmE8ay5jLmMubGVuZ3RoOyloPXUoSihrKSwxMzUpLHVlPWlhKG5jKHUoUShoLChmYygpLHpPKSksOCkpLHUoUShoLCRTKSw4KSksTT1iLk1hdGgubWF4KE0sdWUuYSksUm4rPXVlLmEqdWUuYjtmb3IoTT1iLk1hdGgubWF4KE0sYi5NYXRoLnNxcnQoUm4pKlh0KHllKFEoS3QsKGd2KCksbXllKSkpKSksX2U9WHQoeWUoUShLdCxnX3QpKSksem49MCxocj0wLEM9MCxlPV9lLGQ9bmV3IFModCk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMTM1KSx1ZT1pYShuYyh1KFEoaCwoZmMoKSx6TykpLDgpKSx1KFEoaCwkUyksOCkpLHpuK3VlLmE+TSYmKHpuPTAsaHIrPUMrX2UsQz0wKSxVMm4oS3QsaCx6bixociksZT1iLk1hdGgubWF4KGUsem4rdWUuYSksQz1iLk1hdGgubWF4KEMsdWUuYiksem4rPXVlLmErX2U7Zm9yKFJ0PW5ldyBfcixuPW5ldyBfcixRZT1uZXcgUyh0KTtRZS5hPFFlLmMuYy5sZW5ndGg7KWZvcihXZT11KEooUWUpLDEzNSkscj1qZShSZShRKFdlLCh1aSgpLFFPKSkpKSxTdD1XZS5xP1dlLnE6dTAsbz1TdC52YygpLktjKCk7by5PYigpOylzPXUoby5QYigpLDQyKSxUbChSdCxzLmNkKCkpP1Z0KHUocy5jZCgpLDE0Nikud2coKSkhPT1WdChzLmRkKCkpJiYociYmVGwobixzLmNkKCkpPyhHZCgpLCIiK3Uocy5jZCgpLDE0NikudGcoKSk6KGtpKFJ0LHUocy5jZCgpLDE0Nikscy5kZCgpKSxKdChLdCx1KHMuY2QoKSwxNDYpLHMuZGQoKSksciYma2kobix1KHMuY2QoKSwxNDYpLHMuZGQoKSkpKTooa2koUnQsdShzLmNkKCksMTQ2KSxzLmRkKCkpLEp0KEt0LHUocy5jZCgpLDE0Nikscy5kZCgpKSk7cmV0dXJuIEt0fWZ1bmN0aW9uIHJmZSgpe3JmZT1aLHFhdCgpLFFyPW5ldyBVdyxsbihRciwodmUoKSxNZiksVTEpLGxuKFFyLFZoLFUxKSxsbihRcixlbCxVMSksbG4oUXIsRGYsVTEpLGxuKFFyLEx1LFUxKSxsbihRcixubCxVMSksbG4oUXIsRGYsTWYpLGxuKFFyLFUxLG1oKSxsbihRcixNZixtaCksbG4oUXIsVmgsbWgpLGxuKFFyLGVsLG1oKSxsbihRcixBdSxtaCksbG4oUXIsRGYsbWgpLGxuKFFyLEx1LG1oKSxsbihRcixubCxtaCksbG4oUXIsbHUsbWgpLGxuKFFyLFUxLEtsKSxsbihRcixNZixLbCksbG4oUXIsbWgsS2wpLGxuKFFyLFZoLEtsKSxsbihRcixlbCxLbCksbG4oUXIsQXUsS2wpLGxuKFFyLERmLEtsKSxsbihRcixsdSxLbCksbG4oUXIsWGwsS2wpLGxuKFFyLEx1LEtsKSxsbihRcixWdSxLbCksbG4oUXIsbmwsS2wpLGxuKFFyLE1mLFZoKSxsbihRcixlbCxWaCksbG4oUXIsRGYsVmgpLGxuKFFyLG5sLFZoKSxsbihRcixNZixlbCksbG4oUXIsVmgsZWwpLGxuKFFyLERmLGVsKSxsbihRcixlbCxlbCksbG4oUXIsTHUsZWwpLGxuKFFyLFUxLHloKSxsbihRcixNZix5aCksbG4oUXIsbWgseWgpLGxuKFFyLEtsLHloKSxsbihRcixWaCx5aCksbG4oUXIsZWwseWgpLGxuKFFyLEF1LHloKSxsbihRcixEZix5aCksbG4oUXIsWGwseWgpLGxuKFFyLGx1LHloKSxsbihRcixubCx5aCksbG4oUXIsTHUseWgpLGxuKFFyLFVjLHloKSxsbihRcixVMSxYbCksbG4oUXIsTWYsWGwpLGxuKFFyLG1oLFhsKSxsbihRcixWaCxYbCksbG4oUXIsZWwsWGwpLGxuKFFyLEF1LFhsKSxsbihRcixEZixYbCksbG4oUXIsbHUsWGwpLGxuKFFyLG5sLFhsKSxsbihRcixWdSxYbCksbG4oUXIsVWMsWGwpLGxuKFFyLE1mLGx1KSxsbihRcixWaCxsdSksbG4oUXIsZWwsbHUpLGxuKFFyLERmLGx1KSxsbihRcixYbCxsdSksbG4oUXIsbmwsbHUpLGxuKFFyLEx1LGx1KSxsbihRcixVMSxTdSksbG4oUXIsTWYsU3UpLGxuKFFyLG1oLFN1KSxsbihRcixWaCxTdSksbG4oUXIsZWwsU3UpLGxuKFFyLEF1LFN1KSxsbihRcixEZixTdSksbG4oUXIsbHUsU3UpLGxuKFFyLG5sLFN1KSxsbihRcixNZixMdSksbG4oUXIsbWgsTHUpLGxuKFFyLEtsLEx1KSxsbihRcixlbCxMdSksbG4oUXIsVTEsVnUpLGxuKFFyLE1mLFZ1KSxsbihRcixLbCxWdSksbG4oUXIsVmgsVnUpLGxuKFFyLGVsLFZ1KSxsbihRcixBdSxWdSksbG4oUXIsRGYsVnUpLGxuKFFyLERmLFVjKSxsbihRcixlbCxVYyksbG4oUXIsbHUsVTEpLGxuKFFyLGx1LFZoKSxsbihRcixsdSxtaCksbG4oUXIsQXUsVTEpLGxuKFFyLEF1LE1mKSxsbihRcixBdSxLbCl9ZnVuY3Rpb24ganEodCxlKXtzd2l0Y2godC5lKXtjYXNlIDA6Y2FzZSAyOmNhc2UgNDpjYXNlIDY6Y2FzZSA0MjpjYXNlIDQ0OmNhc2UgNDY6Y2FzZSA0ODpjYXNlIDg6Y2FzZSAxMDpjYXNlIDEyOmNhc2UgMTQ6Y2FzZSAxNjpjYXNlIDE4OmNhc2UgMjA6Y2FzZSAyMjpjYXNlIDI0OmNhc2UgMjY6Y2FzZSAyODpjYXNlIDMwOmNhc2UgMzI6Y2FzZSAzNDpjYXNlIDM2OmNhc2UgMzg6cmV0dXJuIG5ldyBpUXQodC5iLHQuYSxlLHQuYyk7Y2FzZSAxOnJldHVybiBuZXcga2oodC5hLGUsR2koZS5UZygpLHQuYykpO2Nhc2UgNDM6cmV0dXJuIG5ldyB0V3QodC5hLGUsR2koZS5UZygpLHQuYykpO2Nhc2UgMzpyZXR1cm4gbmV3IEFzKHQuYSxlLEdpKGUuVGcoKSx0LmMpKTtjYXNlIDQ1OnJldHVybiBuZXcgRnUodC5hLGUsR2koZS5UZygpLHQuYykpO2Nhc2UgNDE6cmV0dXJuIG5ldyBfbCh1KERoKHQuYyksMjYpLHQuYSxlLEdpKGUuVGcoKSx0LmMpKTtjYXNlIDUwOnJldHVybiBuZXcgcm5lKHUoRGgodC5jKSwyNiksdC5hLGUsR2koZS5UZygpLHQuYykpO2Nhc2UgNTpyZXR1cm4gbmV3IGh3dCh0LmEsZSxHaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA0NzpyZXR1cm4gbmV3IGhZdCh0LmEsZSxHaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA3OnJldHVybiBuZXcgZmUodC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgNDk6cmV0dXJuIG5ldyBSeCh0LmEsZSxHaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA5OnJldHVybiBuZXcgbld0KHQuYSxlLEdpKGUuVGcoKSx0LmMpKTtjYXNlIDExOnJldHVybiBuZXcgZVd0KHQuYSxlLEdpKGUuVGcoKSx0LmMpKTtjYXNlIDEzOnJldHVybiBuZXcgRTJ0KHQuYSxlLEdpKGUuVGcoKSx0LmMpKTtjYXNlIDE1OnJldHVybiBuZXcgUmoodC5hLGUsR2koZS5UZygpLHQuYykpO2Nhc2UgMTc6cmV0dXJuIG5ldyByV3QodC5hLGUsR2koZS5UZygpLHQuYykpO2Nhc2UgMTk6cmV0dXJuIG5ldyBZMyh0LmEsZSxHaShlLlRnKCksdC5jKSk7Y2FzZSAyMTpyZXR1cm4gbmV3IGsydCh0LmEsZSxHaShlLlRnKCksdC5jKSk7Y2FzZSAyMzpyZXR1cm4gbmV3IFpNKHQuYSxlLEdpKGUuVGcoKSx0LmMpKTtjYXNlIDI1OnJldHVybiBuZXcgZ1l0KHQuYSxlLEdpKGUuVGcoKSx0LmMpLHQuZC5uKTtjYXNlIDI3OnJldHVybiBuZXcgQ24odC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMjk6cmV0dXJuIG5ldyBkWXQodC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzE6cmV0dXJuIG5ldyBmWXQodC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzM6cmV0dXJuIG5ldyBkd3QodC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzU6cmV0dXJuIG5ldyBmd3QodC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzc6cmV0dXJuIG5ldyBFbnQodC5hLGUsR2koZS5UZygpLHQuYyksdC5kLm4pO2Nhc2UgMzk6cmV0dXJuIG5ldyByJCh0LmEsZSxHaShlLlRnKCksdC5jKSx0LmQubik7Y2FzZSA0MDpyZXR1cm4gbmV3IHNzKGUsR2koZS5UZygpLHQuYykpO2RlZmF1bHQ6dGhyb3cgaXQobmV3IFZvKCJVbmtub3duIGZlYXR1cmUgc3R5bGU6ICIrdC5lKSl9fWZ1bmN0aW9uIEJ4bih0LGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWU7c3dpdGNoKHZyKG4sIkJyYW5kZXMgJiBLb2VwZiBub2RlIHBsYWNlbWVudCIsMSksdC5hPWUsdC5jPU15bihlKSxyPXUoUShlLChUZSgpLGNodCkpLDI3NCksSD1qZShSZShRKGUsU1MpKSksdC5kPXI9PShvSSgpLFlWKSYmIUh8fHI9PVJsdCxwNG4odCxlKSxLdD1udWxsLHVlPW51bGwsZ3Q9bnVsbCxNdD1udWxsLHR0PShqbCg0LGt5KSxuZXcgWGMoNCkpLHUoUShlLGNodCksMjc0KS5nKXtjYXNlIDM6Z3Q9bmV3IEU0KGUsdC5jLmQsKEMxKCksSDIpLChiZCgpLGVwKSksdHQuY1t0dC5jLmxlbmd0aF09Z3Q7YnJlYWs7Y2FzZSAxOk10PW5ldyBFNChlLHQuYy5kLChDMSgpLEgxKSwoYmQoKSxlcCkpLHR0LmNbdHQuYy5sZW5ndGhdPU10O2JyZWFrO2Nhc2UgNDpLdD1uZXcgRTQoZSx0LmMuZCwoQzEoKSxIMiksKGJkKCksenYpKSx0dC5jW3R0LmMubGVuZ3RoXT1LdDticmVhaztjYXNlIDI6dWU9bmV3IEU0KGUsdC5jLmQsKEMxKCksSDEpLChiZCgpLHp2KSksdHQuY1t0dC5jLmxlbmd0aF09dWU7YnJlYWs7ZGVmYXVsdDpndD1uZXcgRTQoZSx0LmMuZCwoQzEoKSxIMiksKGJkKCksZXApKSxNdD1uZXcgRTQoZSx0LmMuZCxIMSxlcCksS3Q9bmV3IEU0KGUsdC5jLmQsSDIsenYpLHVlPW5ldyBFNChlLHQuYy5kLEgxLHp2KSx0dC5jW3R0LmMubGVuZ3RoXT1LdCx0dC5jW3R0LmMubGVuZ3RoXT11ZSx0dC5jW3R0LmMubGVuZ3RoXT1ndCx0dC5jW3R0LmMubGVuZ3RoXT1NdH1mb3Iocz1uZXcgbUd0KGUsdC5jKSxkPW5ldyBTKHR0KTtkLmE8ZC5jLmMubGVuZ3RoOylvPXUoSihkKSwxODApLEV4bihzLG8sdC5iKSxhM24obyk7Zm9yKGo9bmV3IFpzZShlLHQuYyksdj1uZXcgUyh0dCk7di5hPHYuYy5jLmxlbmd0aDspbz11KEoodiksMTgwKSxtNW4oaixvKTtpZihuLm4pZm9yKGs9bmV3IFModHQpO2suYTxrLmMuYy5sZW5ndGg7KW89dShKKGspLDE4MCksSmIobixvKyIgc2l6ZSBpcyAiK2lhdChvKSk7aWYoTT1udWxsLHQuZCYmKEM9SzVuKHQsdHQsdC5jLmQpLFJsZShlLEMsbikmJihNPUMpKSwhTSlmb3Ioaz1uZXcgUyh0dCk7ay5hPGsuYy5jLmxlbmd0aDspbz11KEooayksMTgwKSxSbGUoZSxvLG4pJiYoIU18fGlhdChNKT5pYXQobykpJiYoTT1vKTtmb3IoIU0mJihNPShBbigwLHR0LmMubGVuZ3RoKSx1KHR0LmNbMF0sMTgwKSkpLEs9bmV3IFMoZS5iKTtLLmE8Sy5jLmMubGVuZ3RoOylmb3IoRz11KEooSyksMjkpLFJ0PW5ldyBTKEcuYSk7UnQuYTxSdC5jLmMubGVuZ3RoOylTdD11KEooUnQpLDEwKSxTdC5uLmI9WHQoTS5wW1N0LnBdKStYdChNLmRbU3QucF0pO2ZvcihuLm4mJihKYihuLCJDaG9zZW4gbm9kZSBwbGFjZW1lbnQ6ICIrTSksSmIobiwiQmxvY2tzOiAiK2ljZShNKSksSmIobiwiQ2xhc3NlczogIitRYm4oTSxuKSksSmIobiwiTWFya2VkIGVkZ2VzOiAiK3QuYikpLGg9bmV3IFModHQpO2guYTxoLmMuYy5sZW5ndGg7KW89dShKKGgpLDE4MCksby5nPW51bGwsby5iPW51bGwsby5hPW51bGwsby5kPW51bGwsby5qPW51bGwsby5pPW51bGwsby5wPW51bGw7QWNuKHQuYyksdC5iLmEuJGIoKSxvcihuKX1mdW5jdGlvbiBSeG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuO2ZvcihoPW5ldyBaaSxLdD11KFEobiwoVGUoKSxXbCkpLDEwMyksRz0wLFVhKGgsKCFlLmEmJihlLmE9bmV3IGZlKHJzLGUsMTAsMTEpKSxlLmEpKTtoLmIhPTA7KWs9dShoLmI9PTA/bnVsbDooWm4oaC5iIT0wKSxsaChoLGguYS5hKSksMzMpLChWdChxZShlLHdiKSkhPT1WdCgoVjAoKSx2YikpfHxWdChxZShlLHp5KSk9PT1WdCgoeDIoKSx2UykpfHxWdChxZShlLHp5KSk9PT1WdCgoeDIoKSx3UykpfHxqZShSZShxZShlLCR5KSkpfHxWdChxZShlLHE2KSkhPT1WdCgoaXYoKSxxNCkpKSYmIWplKFJlKHFlKGssSmx0KSkpJiZ3byhrLChhZSgpLFRjKSxwZShHKyspKSx0dD0hamUoUmUocWUoayx6MikpKSx0dCYmKE09KCFrLmEmJihrLmE9bmV3IGZlKHJzLGssMTAsMTEpKSxrLmEpLmkhPTAsSD16MG4oayksaj1WdChxZShrLHF5KSk9PT1WdCgoRzAoKSxzcCkpLHpuPSFvMihrLCh1aSgpLFlTKSl8fGhuKEJyKHFlKGssWVMpKSxHbiksU3Q9bnVsbCx6biYmaiYmKE18fEgpJiYoU3Q9Q2xlKGspLEp0KFN0LFdsLEt0KSxVcyhTdCxJTykmJm5IdChuZXcgdzN0KFh0KHllKFEoU3QsSU8pKSkpLFN0KSx1KHFlKGssJDIpLDE3NCkuZ2MoKSE9MCYmKEM9U3QsbHMobmV3IFRuKG51bGwsKCFrLmMmJihrLmM9bmV3IGZlKGdsLGssOSw5KSksbmV3IF9uKGsuYywxNikpKSxuZXcgU3IoQykpLHd1ZShrLFN0KSkpLHVlPW4sX2U9dSh0cih0LmEsZXMoaykpLDEwKSxfZSYmKHVlPV9lLmUpLE10PVRoZSh0LGssdWUpLFN0JiYoTXQuZT1TdCxTdC5lPU10LFVhKGgsKCFrLmEmJihrLmE9bmV3IGZlKHJzLGssMTAsMTEpKSxrLmEpKSkpO2ZvcihHPTAsZnMoaCxlLGguYy5iLGguYyk7aC5iIT0wOyl7Zm9yKG89dShoLmI9PTA/bnVsbDooWm4oaC5iIT0wKSxsaChoLGguYS5hKSksMzMpLHY9bmV3IG5yKCghby5iJiYoby5iPW5ldyBmZShZcyxvLDEyLDMpKSxvLmIpKTt2LmUhPXYuaS5nYygpOylkPXUoZHIodiksNzkpLEh1ZShkKSwoVnQocWUoZSx3YikpIT09VnQoKFYwKCksdmIpKXx8VnQocWUoZSx6eSkpPT09VnQoKHgyKCksdlMpKXx8VnQocWUoZSx6eSkpPT09VnQoKHgyKCksd1MpKXx8amUoUmUocWUoZSwkeSkpKXx8VnQocWUoZSxxNikpIT09VnQoKGl2KCkscTQpKSkmJndvKGQsKGFlKCksVGMpLHBlKEcrKykpLFFlPURvKHUoQXQoKCFkLmImJihkLmI9bmV3IENuKGJyLGQsNCw3KSksZC5iKSwwKSw4MikpLFJuPURvKHUoQXQoKCFkLmMmJihkLmM9bmV3IENuKGJyLGQsNSw4KSksZC5jKSwwKSw4MikpLCEoamUoUmUocWUoZCx6MikpKXx8amUoUmUocWUoUWUsejIpKSl8fGplKFJlKHFlKFJuLHoyKSkpKSYmKEs9ZnYoZCkmJmplKFJlKHFlKFFlLEh5KSkpJiZqZShSZShxZShkLGoyKSkpLFJ0PW8sS3x8ZXkoUm4sUWUpP1J0PVFlOmV5KFFlLFJuKSYmKFJ0PVJuKSx1ZT1uLF9lPXUodHIodC5hLFJ0KSwxMCksX2UmJih1ZT1fZS5lKSxndD1QeHQodCxkLFJ0LHVlKSxKdChndCwoYWUoKSxuQ3QpLGN2bih0LGQsZSxuKSkpO2lmKGo9VnQocWUobyxxeSkpPT09VnQoKEcwKCksc3ApKSxqKWZvcihzPW5ldyBucigoIW8uYSYmKG8uYT1uZXcgZmUocnMsbywxMCwxMSkpLG8uYSkpO3MuZSE9cy5pLmdjKCk7KXI9dShkcihzKSwzMyksem49IW8yKHIsKHVpKCksWVMpKXx8aG4oQnIocWUocixZUykpLEduKSxXZT1WdChxZShyLHF5KSk9PT1WdChzcCksem4mJldlJiZmcyhoLHIsaC5jLmIsaC5jKX19ZnVuY3Rpb24ganhuKHQsZSxuLHIscyxvKXt2YXIgaCxkLHYsayxDLE0saixILEcsSyx0dCxndDtzd2l0Y2goZSl7Y2FzZSA3MTpkPXIucS5nZXRGdWxsWWVhcigpLWFiPj0tMTkwMD8xOjAsbj49ND9Hcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbbWZlLHlmZV0pW2RdKTpHcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbIkJDIiwiQUQiXSlbZF0pO2JyZWFrO2Nhc2UgMTIxOk1mbih0LG4scik7YnJlYWs7Y2FzZSA3NzpQbW4odCxuLHIpO2JyZWFrO2Nhc2UgMTA3OnY9cy5xLmdldEhvdXJzKCksdj09MD9KZCh0LDI0LG4pOkpkKHQsdixuKTticmVhaztjYXNlIDgzOmV3bih0LG4scyk7YnJlYWs7Y2FzZSA2OTpDPXIucS5nZXREYXkoKSxuPT01P0dyKHQsbHQoY3QoQWUsMSksZWUsMiw2LFsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdKVtDXSk6bj09ND9Hcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbY290LHVvdCxsb3QsaG90LGZvdCxkb3QsZ290XSlbQ10pOkdyKHQsbHQoY3QoQWUsMSksZWUsMiw2LFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0pW0NdKTticmVhaztjYXNlIDk3OnMucS5nZXRIb3VycygpPj0xMiYmcy5xLmdldEhvdXJzKCk8MjQ/R3IodCxsdChjdChBZSwxKSxlZSwyLDYsWyJBTSIsIlBNIl0pWzFdKTpHcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbIkFNIiwiUE0iXSlbMF0pO2JyZWFrO2Nhc2UgMTA0Ok09cy5xLmdldEhvdXJzKCklMTIsTT09MD9KZCh0LDEyLG4pOkpkKHQsTSxuKTticmVhaztjYXNlIDc1Omo9cy5xLmdldEhvdXJzKCklMTIsSmQodCxqLG4pO2JyZWFrO2Nhc2UgNzI6SD1zLnEuZ2V0SG91cnMoKSxKZCh0LEgsbik7YnJlYWs7Y2FzZSA5OTpHPXIucS5nZXREYXkoKSxuPT01P0dyKHQsbHQoY3QoQWUsMSksZWUsMiw2LFsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdKVtHXSk6bj09ND9Hcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbY290LHVvdCxsb3QsaG90LGZvdCxkb3QsZ290XSlbR10pOm49PTM/R3IodCxsdChjdChBZSwxKSxlZSwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSlbR10pOkpkKHQsRywxKTticmVhaztjYXNlIDc2Oks9ci5xLmdldE1vbnRoKCksbj09NT9Hcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdKVtLXSk6bj09ND9Hcih0LGx0KGN0KEFlLDEpLGVlLDIsNixbUWF0LFphdCxKYXQsdG90LHc2LGVvdCxub3Qscm90LGlvdCxzb3QsYW90LG9vdF0pW0tdKTpuPT0zP0dyKHQsbHQoY3QoQWUsMSksZWUsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIix3NiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pW0tdKTpKZCh0LEsrMSxuKTticmVhaztjYXNlIDgxOnR0PXIucS5nZXRNb250aCgpLzN8MCxuPDQ/R3IodCxsdChjdChBZSwxKSxlZSwyLDYsWyJRMSIsIlEyIiwiUTMiLCJRNCJdKVt0dF0pOkdyKHQsbHQoY3QoQWUsMSksZWUsMiw2LFsiMXN0IHF1YXJ0ZXIiLCIybmQgcXVhcnRlciIsIjNyZCBxdWFydGVyIiwiNHRoIHF1YXJ0ZXIiXSlbdHRdKTticmVhaztjYXNlIDEwMDpndD1yLnEuZ2V0RGF0ZSgpLEpkKHQsZ3Qsbik7YnJlYWs7Y2FzZSAxMDk6az1zLnEuZ2V0TWludXRlcygpLEpkKHQsayxuKTticmVhaztjYXNlIDExNTpoPXMucS5nZXRTZWNvbmRzKCksSmQodCxoLG4pO2JyZWFrO2Nhc2UgMTIyOm48ND9Hcih0LG8uY1swXSk6R3IodCxvLmNbMV0pO2JyZWFrO2Nhc2UgMTE4OkdyKHQsby5iKTticmVhaztjYXNlIDkwOm48Mz9Hcih0LFZwbihvKSk6bj09Mz9Hcih0LFdwbihvKSk6R3IodCxZcG4oby5hKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBQeHQodCxlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpO2lmKEh1ZShlKSx2PXUoQXQoKCFlLmImJihlLmI9bmV3IENuKGJyLGUsNCw3KSksZS5iKSwwKSw4MiksQz11KEF0KCghZS5jJiYoZS5jPW5ldyBDbihicixlLDUsOCkpLGUuYyksMCksODIpLGQ9RG8odiksaz1EbyhDKSxoPSghZS5hJiYoZS5hPW5ldyBmZShKaSxlLDYsNikpLGUuYSkuaT09MD9udWxsOnUoQXQoKCFlLmEmJihlLmE9bmV3IGZlKEppLGUsNiw2KSksZS5hKSwwKSwyMDIpLF9lPXUodHIodC5hLGQpLDEwKSx6bj11KHRyKHQuYSxrKSwxMCksV2U9bnVsbCxocj1udWxsLF90KHYsMTg2KSYmKHVlPXUodHIodC5hLHYpLDI5OSksX3QodWUsMTEpP1dlPXUodWUsMTEpOl90KHVlLDEwKSYmKF9lPXUodWUsMTApLFdlPXUoTmUoX2UuaiwwKSwxMSkpKSxfdChDLDE4NikmJihSbj11KHRyKHQuYSxDKSwyOTkpLF90KFJuLDExKT9ocj11KFJuLDExKTpfdChSbiwxMCkmJih6bj11KFJuLDEwKSxocj11KE5lKHpuLmosMCksMTEpKSksIV9lfHwhem4pdGhyb3cgaXQobmV3IGpDKCJUaGUgc291cmNlIG9yIHRoZSB0YXJnZXQgb2YgZWRnZSAiK2UrIiBjb3VsZCBub3QgYmUgZm91bmQuIFRoaXMgdXN1YWxseSBoYXBwZW5zIHdoZW4gYW4gZWRnZSBjb25uZWN0cyBhIG5vZGUgbGFpZCBvdXQgYnkgRUxLIExheWVyZWQgdG8gYSBub2RlIGluIGFub3RoZXIgbGV2ZWwgb2YgaGllcmFyY2h5IGxhaWQgb3V0IGJ5IGVpdGhlciBhbm90aGVyIGluc3RhbmNlIG9mIEVMSyBMYXllcmVkIG9yIGFub3RoZXIgbGF5b3V0IGFsZ29yaXRobSBhbGx0b2dldGhlci4gVGhlIGZvcm1lciBjYW4gYmUgc29sdmVkIGJ5IHNldHRpbmcgdGhlIGhpZXJhcmNoeUhhbmRsaW5nIG9wdGlvbiB0byBJTkNMVURFX0NISUxEUkVOLiIpKTtmb3IoSz1uZXcgVncsTW8oSyxlKSxKdChLLChhZSgpLF9pKSxlKSxKdChLLChUZSgpLFNvKSxudWxsKSxIPXUoUShyLFZjKSwyMSksX2U9PXpuJiZILkZjKChvbygpLHhTKSksV2V8fChLdD0oc28oKSxudSksUWU9bnVsbCxoJiZHMyh1KFEoX2UsY3MpLDk4KSkmJihRZT1uZXcgJGUoaC5qLGguayksSlp0KFFlLGNEKGUpKSxMSnQoUWUsbiksZXkoayxkKSYmKEt0PXRsLExpKFFlLF9lLm4pKSksV2U9emxlKF9lLFFlLEt0LHIpKSxocnx8KEt0PShzbygpLHRsKSxwaT1udWxsLGgmJkczKHUoUSh6bixjcyksOTgpKSYmKHBpPW5ldyAkZShoLmIsaC5jKSxKWnQocGksY0QoZSkpLExKdChwaSxuKSksaHI9emxlKHpuLHBpLEt0LE5hKHpuKSkpLE9hKEssV2UpLG9hKEssaHIpLChXZS5lLmMubGVuZ3RoPjF8fFdlLmcuYy5sZW5ndGg+MXx8aHIuZS5jLmxlbmd0aD4xfHxoci5nLmMubGVuZ3RoPjEpJiZILkZjKChvbygpLHlTKSksaj1uZXcgbnIoKCFlLm4mJihlLm49bmV3IGZlKHFvLGUsMSw3KSksZS5uKSk7ai5lIT1qLmkuZ2MoKTspaWYoTT11KGRyKGopLDEzNyksIWplKFJlKHFlKE0sejIpKSkmJk0uYSlzd2l0Y2godHQ9Vml0KE0pLGxlKEsuYix0dCksdShRKHR0LE9kKSwyNzIpLmcpe2Nhc2UgMTpjYXNlIDI6SC5GYygob28oKSxtNykpO2JyZWFrO2Nhc2UgMDpILkZjKChvbygpLHY3KSksSnQodHQsT2QsKE0xKCksUDcpKX1pZihvPXUoUShyLF9TKSwzMTQpLGd0PXUoUShyLGdHKSwzMTUpLHM9bz09KG42KCksRU8pfHxndD09KHVfKCkseGh0KSxoJiYoIWguYSYmKGguYT1uZXcgQXMoR2gsaCw1KSksaC5hKS5pIT0wJiZzKXtmb3IoTXQ9bEkoaCksRz1uZXcgUHUsUnQ9ZWkoTXQsMCk7UnQuYiE9UnQuZC5jOylTdD11KHRpKFJ0KSw4KSxyaShHLG5ldyB4byhTdCkpO0p0KEssYUN0LEcpfXJldHVybiBLfWZ1bmN0aW9uICR4bih0KXt0LmdifHwodC5nYj0hMCx0LmI9aWModCwwKSxucyh0LmIsMTgpLEZpKHQuYiwxOSksdC5hPWljKHQsMSksbnModC5hLDEpLEZpKHQuYSwyKSxGaSh0LmEsMyksRmkodC5hLDQpLEZpKHQuYSw1KSx0Lm89aWModCwyKSxucyh0Lm8sOCksbnModC5vLDkpLEZpKHQubywxMCksRmkodC5vLDExKSxGaSh0Lm8sMTIpLEZpKHQubywxMyksRmkodC5vLDE0KSxGaSh0Lm8sMTUpLEZpKHQubywxNiksRmkodC5vLDE3KSxGaSh0Lm8sMTgpLEZpKHQubywxOSksRmkodC5vLDIwKSxGaSh0Lm8sMjEpLEZpKHQubywyMiksRmkodC5vLDIzKSxDbyh0Lm8pLENvKHQubyksQ28odC5vKSxDbyh0Lm8pLENvKHQubyksQ28odC5vKSxDbyh0Lm8pLENvKHQubyksQ28odC5vKSxDbyh0Lm8pLHQucD1pYyh0LDMpLG5zKHQucCwyKSxucyh0LnAsMyksbnModC5wLDQpLG5zKHQucCw1KSxGaSh0LnAsNiksRmkodC5wLDcpLENvKHQucCksQ28odC5wKSx0LnE9aWModCw0KSxucyh0LnEsOCksdC52PWljKHQsNSksRmkodC52LDkpLENvKHQudiksQ28odC52KSxDbyh0LnYpLHQudz1pYyh0LDYpLG5zKHQudywyKSxucyh0LncsMyksbnModC53LDQpLEZpKHQudyw1KSx0LkI9aWModCw3KSxGaSh0LkIsMSksQ28odC5CKSxDbyh0LkIpLENvKHQuQiksdC5RPWljKHQsOCksRmkodC5RLDApLENvKHQuUSksdC5SPWljKHQsOSksbnModC5SLDEpLHQuUz1pYyh0LDEwKSxDbyh0LlMpLENvKHQuUyksQ28odC5TKSxDbyh0LlMpLENvKHQuUyksQ28odC5TKSxDbyh0LlMpLENvKHQuUyksQ28odC5TKSxDbyh0LlMpLENvKHQuUyksQ28odC5TKSxDbyh0LlMpLENvKHQuUyksQ28odC5TKSx0LlQ9aWModCwxMSksRmkodC5ULDEwKSxGaSh0LlQsMTEpLEZpKHQuVCwxMiksRmkodC5ULDEzKSxGaSh0LlQsMTQpLENvKHQuVCksQ28odC5UKSx0LlU9aWModCwxMiksbnModC5VLDIpLG5zKHQuVSwzKSxGaSh0LlUsNCksRmkodC5VLDUpLEZpKHQuVSw2KSxGaSh0LlUsNyksQ28odC5VKSx0LlY9aWModCwxMyksRmkodC5WLDEwKSx0Llc9aWModCwxNCksbnModC5XLDE4KSxucyh0LlcsMTkpLG5zKHQuVywyMCksRmkodC5XLDIxKSxGaSh0LlcsMjIpLEZpKHQuVywyMyksdC5iYj1pYyh0LDE1KSxucyh0LmJiLDEwKSxucyh0LmJiLDExKSxucyh0LmJiLDEyKSxucyh0LmJiLDEzKSxucyh0LmJiLDE0KSxucyh0LmJiLDE1KSxucyh0LmJiLDE2KSxGaSh0LmJiLDE3KSxDbyh0LmJiKSxDbyh0LmJiKSx0LmViPWljKHQsMTYpLG5zKHQuZWIsMiksbnModC5lYiwzKSxucyh0LmViLDQpLG5zKHQuZWIsNSksbnModC5lYiw2KSxucyh0LmViLDcpLEZpKHQuZWIsOCksRmkodC5lYiw5KSx0LmFiPWljKHQsMTcpLG5zKHQuYWIsMCksbnModC5hYiwxKSx0Lkg9aWModCwxOCksRmkodC5ILDApLEZpKHQuSCwxKSxGaSh0LkgsMiksRmkodC5ILDMpLEZpKHQuSCw0KSxGaSh0LkgsNSksQ28odC5IKSx0LmRiPWljKHQsMTkpLEZpKHQuZGIsMiksdC5jPW9pKHQsMjApLHQuZD1vaSh0LDIxKSx0LmU9b2kodCwyMiksdC5mPW9pKHQsMjMpLHQuaT1vaSh0LDI0KSx0Lmc9b2kodCwyNSksdC5qPW9pKHQsMjYpLHQuaz1vaSh0LDI3KSx0Lm49b2kodCwyOCksdC5yPW9pKHQsMjkpLHQucz1vaSh0LDMwKSx0LnQ9b2kodCwzMSksdC51PW9pKHQsMzIpLHQuZmI9b2kodCwzMyksdC5BPW9pKHQsMzQpLHQuQz1vaSh0LDM1KSx0LkQ9b2kodCwzNiksdC5GPW9pKHQsMzcpLHQuRz1vaSh0LDM4KSx0Lkk9b2kodCwzOSksdC5KPW9pKHQsNDApLHQuTD1vaSh0LDQxKSx0Lk09b2kodCw0MiksdC5OPW9pKHQsNDMpLHQuTz1vaSh0LDQ0KSx0LlA9b2kodCw0NSksdC5YPW9pKHQsNDYpLHQuWT1vaSh0LDQ3KSx0Llo9b2kodCw0OCksdC4kPW9pKHQsNDkpLHQuXz1vaSh0LDUwKSx0LmNiPW9pKHQsNTEpLHQuSz1vaSh0LDUyKSl9ZnVuY3Rpb24gdWkoKXt1aT1aO3ZhciB0LGU7WVM9bmV3IFZpKHVkZSksTzc9bmV3IFZpKGxkZSksTlN0PSh0MCgpLHVmdCksYTRlPW5ldyBtbih4a3QsTlN0KSxXNj1uZXcgbW4oRTYsbnVsbCksbzRlPW5ldyBWaShwOHQpLFJTdD0oaHkoKSxqaShmZnQsbHQoY3QoZGZ0LDEpLG9lLDI5MSwwLFtoZnRdKSkpLFlHPW5ldyBtbihtSCxSU3QpLFFPPW5ldyBtbihKSSwoTm4oKSwhMSkpLGpTdD0oYW8oKSxoMCkscXY9bmV3IG1uKFRrdCxqU3QpLHFTdD0oVzAoKSxDZnQpLHpTdD1uZXcgbW4oUUkscVN0KSxHU3Q9bmV3IG1uKENILCExKSxVU3Q9KEcwKCksdFUpLHM1PW5ldyBtbih2SCxVU3QpLG5BdD1uZXcgT3coMTIpLFUyPW5ldyBtbih4dixuQXQpLEtHPW5ldyBtbihHSSwhMSksV1N0PW5ldyBtbihfY3QsITEpLHRQPW5ldyBtbihqXywhMSksb0F0PSh1YSgpLFRiKSxLUz1uZXcgbW4oR290LG9BdCksWTY9bmV3IFZpKHlIKSxaRz1uZXcgVmkoVkkpLEVmdD1uZXcgVmkodEgpLFRmdD1uZXcgVmkoUl8pLFlTdD1uZXcgUHUsYTU9bmV3IG1uKE9rdCxZU3QpLHU0ZT1uZXcgbW4oTmt0LCExKSxsNGU9bmV3IG1uKEJrdCwhMSksS1N0PW5ldyBPQyxKTz1uZXcgbW4oamt0LEtTdCksUUc9bmV3IG1uKG1rdCwhMSksZzRlPW5ldyBtbihoZGUsMSksbmV3IG1uKGZkZSwhMCkscGUoMCksbmV3IG1uKGRkZSxwZSgxMDApKSxuZXcgbW4oZ2RlLCExKSxwZSgwKSxuZXcgbW4ocGRlLHBlKDRlMykpLHBlKDApLG5ldyBtbihiZGUscGUoNDAwKSksbmV3IG1uKHdkZSwhMSksbmV3IG1uKHZkZSwhMSksbmV3IG1uKG1kZSwhMCksbmV3IG1uKHlkZSwhMSksQlN0PShqeigpLExmdCksYzRlPW5ldyBtbihnOHQsQlN0KSxwNGU9bmV3IG1uKG9rdCwxMCksYjRlPW5ldyBtbihja3QsMTApLGhBdD1uZXcgbW4oam90LDIwKSx3NGU9bmV3IG1uKHVrdCwxMCksZkF0PW5ldyBtbihWb3QsMiksdjRlPW5ldyBtbihsa3QsMTApLGRBdD1uZXcgbW4oaGt0LDApLEpHPW5ldyBtbihna3QsNSksZ0F0PW5ldyBtbihma3QsMSkscEF0PW5ldyBtbihka3QsMSksVzI9bmV3IG1uKEN5LDIwKSxtNGU9bmV3IG1uKHBrdCwxMCksdkF0PW5ldyBtbihia3QsMTApLEs2PW5ldyBWaSh3a3QpLHdBdD1uZXcgQ1V0LGJBdD1uZXcgbW4oJGt0LHdBdCksZjRlPW5ldyBWaShDY3QpLHJBdD0hMSxoNGU9bmV3IG1uKFRjdCxyQXQpLFFTdD1uZXcgT3coNSksWFN0PW5ldyBtbihDa3QsUVN0KSxaU3Q9KHB5KCksZT11KFZmKGxvKSw5KSxuZXcgc2goZSx1KGZmKGUsZS5sZW5ndGgpLDkpLDApKSxvNT1uZXcgbW4oVUUsWlN0KSxzQXQ9KGw0KCksRWIpLGlBdD1uZXcgbW4oQWt0LHNBdCksdmZ0PW5ldyBWaShMa3QpLG1mdD1uZXcgVmkoTWt0KSx5ZnQ9bmV3IFZpKERrdCksd2Z0PW5ldyBWaShJa3QpLEpTdD0odD11KFZmKHJBKSw5KSxuZXcgc2godCx1KGZmKHQsdC5sZW5ndGgpLDkpLDApKSxHMj1uZXcgbW4oRDQsSlN0KSxlQXQ9dW4oKGxsKCksUjcpKSx4Yj1uZXcgbW4oVDYsZUF0KSx0QXQ9bmV3ICRlKDAsMCksYzU9bmV3IG1uKEM2LHRBdCksWEc9bmV3IG1uKEVjdCwhMSksJFN0PShNMSgpLFA3KSxwZnQ9bmV3IG1uKFBrdCwkU3QpLGdmdD1uZXcgbW4oZUgsITEpLHBlKDEpLG5ldyBtbih4ZGUsbnVsbCksYUF0PW5ldyBWaShSa3QpLHhmdD1uZXcgVmkoRmt0KSxsQXQ9KHZlKCksWm8pLHU1PW5ldyBtbih5a3QsbEF0KSxkbD1uZXcgVmkodmt0KSxjQXQ9KFp1KCksdW4oQ2IpKSxReT1uZXcgbW4oV0UsY0F0KSxrZnQ9bmV3IG1uKF9rdCwhMSksdUF0PW5ldyBtbihTa3QsITApLFpPPW5ldyBtbihra3QsITEpLGJmdD1uZXcgbW4oRWt0LCExKSxIU3Q9bmV3IG1uKCRvdCwxKSxWU3Q9KGhxKCksU2Z0KSxuZXcgbW4oa2RlLFZTdCksZDRlPSEwfWZ1bmN0aW9uIGFlKCl7YWU9Wjt2YXIgdCxlO19pPW5ldyBWaSh3NnQpLG5DdD1uZXcgVmkoImNvb3JkaW5hdGVPcmlnaW4iKSxLbHQ9bmV3IFZpKCJwcm9jZXNzb3JzIiksZUN0PW5ldyBQcygiY29tcG91bmROb2RlIiwoTm4oKSwhMSkpLFNPPW5ldyBQcygiaW5zaWRlQ29ubmVjdGlvbnMiLCExKSxhQ3Q9bmV3IFZpKCJvcmlnaW5hbEJlbmRwb2ludHMiKSxvQ3Q9bmV3IFZpKCJvcmlnaW5hbER1bW15Tm9kZVBvc2l0aW9uIiksY0N0PW5ldyBWaSgib3JpZ2luYWxMYWJlbEVkZ2UiKSxMTz1uZXcgVmkoInJlcHJlc2VudGVkTGFiZWxzIiksa1M9bmV3IFZpKCJlbmRMYWJlbHMiKSxCNj1uZXcgVmkoImVuZExhYmVsLm9yaWdpbiIpLGo2PW5ldyBQcygibGFiZWxTaWRlIiwoemwoKSxyUCkpLEs0PW5ldyBQcygibWF4RWRnZVRoaWNrbmVzcyIsMCkscTE9bmV3IFBzKCJyZXZlcnNlZCIsITEpLCQ2PW5ldyBWaShpMWUpLHIxPW5ldyBQcygibG9uZ0VkZ2VTb3VyY2UiLG51bGwpLCRoPW5ldyBQcygibG9uZ0VkZ2VUYXJnZXQiLG51bGwpLFJ5PW5ldyBQcygibG9uZ0VkZ2VIYXNMYWJlbER1bW1pZXMiLCExKSxBTz1uZXcgUHMoImxvbmdFZGdlQmVmb3JlTGFiZWxEdW1teSIsITEpLHRHPW5ldyBQcygiZWRnZUNvbnN0cmFpbnQiLChkMigpLElsdCkpLFB2PW5ldyBWaSgiaW5MYXllckxheW91dFVuaXQiKSxCMj1uZXcgUHMoImluTGF5ZXJDb25zdHJhaW50IiwocTAoKSxDTykpLFI2PW5ldyBQcygiaW5MYXllclN1Y2Nlc3NvckNvbnN0cmFpbnQiLG5ldyBoZSksc0N0PW5ldyBQcygiaW5MYXllclN1Y2Nlc3NvckNvbnN0cmFpbnRCZXR3ZWVuTm9uRHVtbWllcyIsITEpLEp1PW5ldyBWaSgicG9ydER1bW15IiksSlY9bmV3IFBzKCJjcm9zc2luZ0hpbnQiLHBlKDApKSxWYz1uZXcgUHMoImdyYXBoUHJvcGVydGllcyIsKGU9dShWZihqbHQpLDkpLG5ldyBzaChlLHUoZmYoZSxlLmxlbmd0aCksOSksMCkpKSxvYz1uZXcgUHMoImV4dGVybmFsUG9ydFNpZGUiLCh2ZSgpLFpvKSksaUN0PW5ldyBQcygiZXh0ZXJuYWxQb3J0U2l6ZSIsbmV3IENhKSxWbHQ9bmV3IFZpKCJleHRlcm5hbFBvcnRSZXBsYWNlZER1bW1pZXMiKSxlRz1uZXcgVmkoImV4dGVybmFsUG9ydFJlcGxhY2VkRHVtbXkiKSxCeT1uZXcgUHMoImV4dGVybmFsUG9ydENvbm5lY3Rpb25zIiwodD11KFZmKFhhKSw5KSxuZXcgc2godCx1KGZmKHQsdC5sZW5ndGgpLDkpLDApKSksRnY9bmV3IFBzKFhmZSwwKSx0Q3Q9bmV3IFZpKCJiYXJ5Y2VudGVyQXNzb2NpYXRlcyIpLHo2PW5ldyBWaSgiVG9wU2lkZUNvbW1lbnRzIiksTjY9bmV3IFZpKCJCb3R0b21TaWRlQ29tbWVudHMiKSxaVj1uZXcgVmkoIkNvbW1lbnRDb25uZWN0aW9uUG9ydCIpLFVsdD1uZXcgUHMoImlucHV0Q29sbGVjdCIsITEpLFlsdD1uZXcgUHMoIm91dHB1dENvbGxlY3QiLCExKSxfTz1uZXcgUHMoImN5Y2xpYyIsITEpLHJDdD1uZXcgVmkoImNyb3NzSGllcmFyY2h5TWFwIiksUWx0PW5ldyBWaSgidGFyZ2V0T2Zmc2V0IiksbmV3IFBzKCJzcGxpbmVMYWJlbFNpemUiLG5ldyBDYSksUTQ9bmV3IFZpKCJzcGFjaW5ncyIpLG5HPW5ldyBQcygicGFydGl0aW9uQ29uc3RyYWludCIsITEpLEl2PW5ldyBWaSgiYnJlYWtpbmdQb2ludC5pbmZvIiksaEN0PW5ldyBWaSgic3BsaW5lcy5zdXJ2aXZpbmdFZGdlIiksUjI9bmV3IFZpKCJzcGxpbmVzLnJvdXRlLnN0YXJ0IiksWjQ9bmV3IFZpKCJzcGxpbmVzLmVkZ2VDaGFpbiIpLGxDdD1uZXcgVmkoIm9yaWdpbmFsUG9ydENvbnN0cmFpbnRzIikseDc9bmV3IFZpKCJzZWxmTG9vcEhvbGRlciIpLGs3PW5ldyBWaSgic3BsaW5lcy5uc1BvcnRZIiksVGM9bmV3IFZpKCJtb2RlbE9yZGVyIiksV2x0PW5ldyBWaSgibG9uZ0VkZ2VUYXJnZXROb2RlIiksT3Y9bmV3IFBzKEQxZSwhMSksWDQ9bmV3IFBzKEQxZSwhMSksR2x0PW5ldyBWaSgibGF5ZXJDb25zdHJhaW50cy5oaWRkZW5Ob2RlcyIpLHVDdD1uZXcgVmkoImxheWVyQ29uc3RyYWludHMub3Bwb3NpZGVQb3J0IiksWGx0PW5ldyBWaSgidGFyZ2V0Tm9kZS5tb2RlbE9yZGVyIil9ZnVuY3Rpb24gRnh0KCl7Rnh0PVosa0N0PShMRCgpLEdWKSxnd2U9bmV3IG1uKEM2dCxrQ3QpLF93ZT1uZXcgbW4oXzZ0LChObigpLCExKSksQUN0PShJJCgpLEhsdCksRHdlPW5ldyBtbihzSCxBQ3QpLFV3ZT1uZXcgbW4oUzZ0LCExKSxXd2U9bmV3IG1uKEE2dCwhMCksSDJlPW5ldyBtbihMNnQsITEpLE5DdD0oQ0QoKSxUaHQpLGN2ZT1uZXcgbW4oTTZ0LE5DdCkscGUoMSksYnZlPW5ldyBtbihENnQscGUoNykpLHd2ZT1uZXcgbW4oSTZ0LCExKSxTd2U9bmV3IG1uKE82dCwhMSkseEN0PSh4MigpLE1sdCksZHdlPW5ldyBtbihRb3QseEN0KSxEQ3Q9KHVxKCksd2h0KSxHd2U9bmV3IG1uKEtJLERDdCksTEN0PShkaCgpLE1PKSxCd2U9bmV3IG1uKFA2dCxMQ3QpLHBlKC0xKSxOd2U9bmV3IG1uKEY2dCxwZSgtMSkpLHBlKC0xKSxSd2U9bmV3IG1uKE42dCxwZSgtMSkpLHBlKC0xKSxqd2U9bmV3IG1uKFpvdCxwZSg0KSkscGUoLTEpLHp3ZT1uZXcgbW4oSm90LHBlKDIpKSxNQ3Q9KHk0KCksa0cpLFZ3ZT1uZXcgbW4odGN0LE1DdCkscGUoMCksSHdlPW5ldyBtbihlY3QscGUoMCkpLFB3ZT1uZXcgbW4obmN0LHBlKHdpKSkseUN0PShuNigpLFA2KSxmd2U9bmV3IG1uKEhfLHlDdCksSjJlPW5ldyBtbihCNnQsITEpLGF3ZT1uZXcgbW4ocmN0LC4xKSxsd2U9bmV3IG1uKGljdCwhMSkscGUoLTEpLGN3ZT1uZXcgbW4oUjZ0LHBlKC0xKSkscGUoLTEpLHV3ZT1uZXcgbW4oajZ0LHBlKC0xKSkscGUoMCksdHdlPW5ldyBtbigkNnQscGUoNDApKSxtQ3Q9KGVFKCksemx0KSxpd2U9bmV3IG1uKHNjdCxtQ3QpLHZDdD1UTyxld2U9bmV3IG1uKGFILHZDdCksRkN0PSh1XygpLERTKSxvdmU9bmV3IG1uKEk0LEZDdCksWndlPW5ldyBWaShvSCksSUN0PSh4RCgpLFdWKSxZd2U9bmV3IG1uKGFjdCxJQ3QpLE9DdD0ob0koKSxZViksWHdlPW5ldyBtbihvY3QsT0N0KSxldmU9bmV3IG1uKGNjdCwuMykscnZlPW5ldyBWaSh1Y3QpLFBDdD0oY3koKSx4RyksaXZlPW5ldyBtbihsY3QsUEN0KSxDQ3Q9KHl6KCksX2h0KSxtd2U9bmV3IG1uKHo2dCxDQ3QpLF9DdD0ocEQoKSxTaHQpLHl3ZT1uZXcgbW4ocTZ0LF9DdCksU0N0PShjRSgpLFBTKSx4d2U9bmV3IG1uKGNILFNDdCksRXdlPW5ldyBtbih1SCwuMiksd3dlPW5ldyBtbihoY3QsMiksZnZlPW5ldyBtbihINnQsbnVsbCksZ3ZlPW5ldyBtbihWNnQsMTApLGR2ZT1uZXcgbW4oRzZ0LDEwKSxwdmU9bmV3IG1uKFU2dCwyMCkscGUoMCksdXZlPW5ldyBtbihXNnQscGUoMCkpLHBlKDApLGx2ZT1uZXcgbW4oWTZ0LHBlKDApKSxwZSgwKSxodmU9bmV3IG1uKEs2dCxwZSgwKSksVjJlPW5ldyBtbihmY3QsITEpLGdDdD0oa0UoKSxtUyksVTJlPW5ldyBtbihYNnQsZ0N0KSxkQ3Q9KEgkKCksQWx0KSxHMmU9bmV3IG1uKFE2dCxkQ3QpLEx3ZT1uZXcgbW4obEgsITEpLHBlKDApLEF3ZT1uZXcgbW4oZGN0LHBlKDE2KSkscGUoMCksTXdlPW5ldyBtbihnY3QscGUoNSkpLGpDdD0oQ3ooKSxNaHQpLEJ2ZT1uZXcgbW4odGcsakN0KSx2dmU9bmV3IG1uKGhILDEwKSx4dmU9bmV3IG1uKGZILDEpLFJDdD0ob3ooKSxWViksQXZlPW5ldyBtbihWXyxSQ3QpLFR2ZT1uZXcgVmkocGN0KSxCQ3Q9cGUoMSkscGUoMCksX3ZlPW5ldyBtbihiY3QsQkN0KSwkQ3Q9KHZ6KCksTGh0KSx6dmU9bmV3IG1uKGRILCRDdCksUnZlPW5ldyBWaShnSCksT3ZlPW5ldyBtbihwSCwhMCksRHZlPW5ldyBtbihiSCwyKSxGdmU9bmV3IG1uKHdjdCwhMCksVEN0PShkcSgpLFVWKSxid2U9bmV3IG1uKFo2dCxUQ3QpLEVDdD0oaDYoKSxwNykscHdlPW5ldyBtbihKNnQsRUN0KSx3Q3Q9KFYwKCksdmIpLFoyZT1uZXcgbW4od0gsd0N0KSxRMmU9bmV3IG1uKHRrdCwhMSkscEN0PShpdigpLHE0KSxXMmU9bmV3IG1uKHZjdCxwQ3QpLGJDdD0oWjkoKSx2aHQpLFgyZT1uZXcgbW4oZWt0LGJDdCksWTJlPW5ldyBtbihtY3QsMCksSzJlPW5ldyBtbih5Y3QsMCksT3dlPURsdCxJd2U9RU8sJHdlPW1HLHF3ZT1tRyxGd2U9Ymh0LG93ZT0oRzAoKSxzcCksaHdlPVA2LHN3ZT1QNixud2U9UDYscndlPXNwLEp3ZT1JUyx0dmU9RFMsS3dlPURTLFF3ZT1EUyxudmU9a2h0LGF2ZT1JUyxzdmU9SVMsa3dlPShXMCgpLFg2KSxUd2U9WDYsQ3dlPVBTLHZ3ZT1lUCxtdmU9TDcseXZlPVl5LGt2ZT1MNyxFdmU9WXksTHZlPUw3LE12ZT1ZeSxDdmU9TGx0LFN2ZT1WVixxdmU9TDcsSHZlPVl5LGp2ZT1MNywkdmU9WXksUHZlPVl5LEl2ZT1ZeSxOdmU9WXl9ZnVuY3Rpb24gcm8oKXtybz1aLEo3dD1uZXcgbXMoIkRJUkVDVElPTl9QUkVQUk9DRVNTT1IiLDApLFg3dD1uZXcgbXMoIkNPTU1FTlRfUFJFUFJPQ0VTU09SIiwxKSxnUz1uZXcgbXMoIkVER0VfQU5EX0xBWUVSX0NPTlNUUkFJTlRfRURHRV9SRVZFUlNFUiIsMiksZ2x0PW5ldyBtcygiSU5URVJBQ1RJVkVfRVhURVJOQUxfUE9SVF9QT1NJVElPTkVSIiwzKSx2VHQ9bmV3IG1zKCJQQVJUSVRJT05fUFJFUFJPQ0VTU09SIiw0KSxDVj1uZXcgbXMoIkxBQkVMX0RVTU1ZX0lOU0VSVEVSIiw1KSxGVj1uZXcgbXMoIlNFTEZfTE9PUF9QUkVQUk9DRVNTT1IiLDYpLGg3PW5ldyBtcygiTEFZRVJfQ09OU1RSQUlOVF9QUkVQUk9DRVNTT1IiLDcpLGJUdD1uZXcgbXMoIlBBUlRJVElPTl9NSURQUk9DRVNTT1IiLDgpLG9UdD1uZXcgbXMoIkhJR0hfREVHUkVFX05PREVfTEFZRVJfUFJPQ0VTU09SIiw5KSxnVHQ9bmV3IG1zKCJOT0RFX1BST01PVElPTiIsMTApLGw3PW5ldyBtcygiTEFZRVJfQ09OU1RSQUlOVF9QT1NUUFJPQ0VTU09SIiwxMSksd1R0PW5ldyBtcygiUEFSVElUSU9OX1BPU1RQUk9DRVNTT1IiLDEyKSxpVHQ9bmV3IG1zKCJISUVSQVJDSElDQUxfUE9SVF9DT05TVFJBSU5UX1BST0NFU1NPUiIsMTMpLG1UdD1uZXcgbXMoIlNFTUlfSU5URVJBQ1RJVkVfQ1JPU1NNSU5fUFJPQ0VTU09SIiwxNCksVjd0PW5ldyBtcygiQlJFQUtJTkdfUE9JTlRfSU5TRVJURVIiLDE1KSxMVj1uZXcgbXMoIkxPTkdfRURHRV9TUExJVFRFUiIsMTYpLHBsdD1uZXcgbXMoIlBPUlRfU0lERV9QUk9DRVNTT1IiLDE3KSxFVj1uZXcgbXMoIklOVkVSVEVEX1BPUlRfUFJPQ0VTU09SIiwxOCksSVY9bmV3IG1zKCJQT1JUX0xJU1RfU09SVEVSIiwxOSkseFR0PW5ldyBtcygiU09SVF9CWV9JTlBVVF9PUkRFUl9PRl9NT0RFTCIsMjApLERWPW5ldyBtcygiTk9SVEhfU09VVEhfUE9SVF9QUkVQUk9DRVNTT1IiLDIxKSxHN3Q9bmV3IG1zKCJCUkVBS0lOR19QT0lOVF9QUk9DRVNTT1IiLDIyKSxwVHQ9bmV3IG1zKEUxZSwyMyksa1R0PW5ldyBtcyhUMWUsMjQpLE9WPW5ldyBtcygiU0VMRl9MT09QX1BPUlRfUkVTVE9SRVIiLDI1KSx5VHQ9bmV3IG1zKCJTSU5HTEVfRURHRV9HUkFQSF9XUkFQUEVSIiwyNiksVFY9bmV3IG1zKCJJTl9MQVlFUl9DT05TVFJBSU5UX1BST0NFU1NPUiIsMjcpLGVUdD1uZXcgbXMoIkVORF9OT0RFX1BPUlRfTEFCRUxfTUFOQUdFTUVOVF9QUk9DRVNTT1IiLDI4KSxmVHQ9bmV3IG1zKCJMQUJFTF9BTkRfTk9ERV9TSVpFX1BST0NFU1NPUiIsMjkpLGhUdD1uZXcgbXMoIklOTkVSTU9TVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMCksTlY9bmV3IG1zKCJTRUxGX0xPT1BfUk9VVEVSIiwzMSksWTd0PW5ldyBtcygiQ09NTUVOVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMiksa1Y9bmV3IG1zKCJFTkRfTEFCRUxfUFJFUFJPQ0VTU09SIiwzMyksU1Y9bmV3IG1zKCJMQUJFTF9EVU1NWV9TV0lUQ0hFUiIsMzQpLFc3dD1uZXcgbXMoIkNFTlRFUl9MQUJFTF9NQU5BR0VNRU5UX1BST0NFU1NPUiIsMzUpLHU3PW5ldyBtcygiTEFCRUxfU0lERV9TRUxFQ1RPUiIsMzYpLHVUdD1uZXcgbXMoIkhZUEVSRURHRV9EVU1NWV9NRVJHRVIiLDM3KSxzVHQ9bmV3IG1zKCJISUVSQVJDSElDQUxfUE9SVF9EVU1NWV9TSVpFX1BST0NFU1NPUiIsMzgpLGRUdD1uZXcgbXMoIkxBWUVSX1NJWkVfQU5EX0dSQVBIX0hFSUdIVF9DQUxDVUxBVE9SIiwzOSkscFM9bmV3IG1zKCJISUVSQVJDSElDQUxfUE9SVF9QT1NJVElPTl9QUk9DRVNTT1IiLDQwKSxRN3Q9bmV3IG1zKCJDT05TVFJBSU5UU19QT1NUUFJPQ0VTU09SIiw0MSksSzd0PW5ldyBtcygiQ09NTUVOVF9QT1NUUFJPQ0VTU09SIiw0MiksbFR0PW5ldyBtcygiSFlQRVJOT0RFX1BST0NFU1NPUiIsNDMpLGFUdD1uZXcgbXMoIkhJRVJBUkNISUNBTF9QT1JUX09SVEhPR09OQUxfRURHRV9ST1VURVIiLDQ0KSxBVj1uZXcgbXMoIkxPTkdfRURHRV9KT0lORVIiLDQ1KSxQVj1uZXcgbXMoIlNFTEZfTE9PUF9QT1NUUFJPQ0VTU09SIiw0NiksVTd0PW5ldyBtcygiQlJFQUtJTkdfUE9JTlRfUkVNT1ZFUiIsNDcpLE1WPW5ldyBtcygiTk9SVEhfU09VVEhfUE9SVF9QT1NUUFJPQ0VTU09SIiw0OCksY1R0PW5ldyBtcygiSE9SSVpPTlRBTF9DT01QQUNUT1IiLDQ5KSxfVj1uZXcgbXMoIkxBQkVMX0RVTU1ZX1JFTU9WRVIiLDUwKSxuVHQ9bmV3IG1zKCJGSU5BTF9TUExJTkVfQkVORFBPSU5UU19DQUxDVUxBVE9SIiw1MSksdFR0PW5ldyBtcygiRU5EX0xBQkVMX1NPUlRFUiIsNTIpLHhPPW5ldyBtcygiUkVWRVJTRURfRURHRV9SRVNUT1JFUiIsNTMpLHhWPW5ldyBtcygiRU5EX0xBQkVMX1BPU1RQUk9DRVNTT1IiLDU0KSxyVHQ9bmV3IG1zKCJISUVSQVJDSElDQUxfTk9ERV9SRVNJWkVSIiw1NSksWjd0PW5ldyBtcygiRElSRUNUSU9OX1BPU1RQUk9DRVNTT1IiLDU2KX1mdW5jdGlvbiB6eG4odCxlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0LHVlLF9lLFdlLFFlLFJuLHpuLGhyLHBpLGpzLFpsLFhoLEsxLGtVLHhQLGJBLGtQLEg3LEdmdCxpeGUsVWZ0LGhwLFl2LFY3LEVQLFRQLG5rLFdmdCx3QSxzeGUsQkx0LEt2LHZBLFlmdCxyayxtQSxvMyx5QSxLZnQsYXhlO2ZvcihCTHQ9MCxwaT1lLFhoPTAseFA9cGkubGVuZ3RoO1hoPHhQOysrWGgpZm9yKHpuPXBpW1hoXSxZdj1uZXcgUyh6bi5qKTtZdi5hPFl2LmMuYy5sZW5ndGg7KXtmb3IoaHA9dShKKFl2KSwxMSksRVA9MCxkPW5ldyBTKGhwLmcpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDE3KSx6bi5jIT1oLmQuaS5jJiYrK0VQO0VQPjAmJih0LmFbaHAucF09Qkx0KyspfWZvcihtQT0wLGpzPW4sSzE9MCxiQT1qcy5sZW5ndGg7SzE8YkE7KytLMSl7Zm9yKHpuPWpzW0sxXSxrUD0wLFl2PW5ldyBTKHpuLmopO1l2LmE8WXYuYy5jLmxlbmd0aCYmKGhwPXUoSihZdiksMTEpLGhwLmo9PSh2ZSgpLFBuKSk7KWZvcihkPW5ldyBTKGhwLmUpO2QuYTxkLmMuYy5sZW5ndGg7KWlmKGg9dShKKGQpLDE3KSx6bi5jIT1oLmMuaS5jKXsrK2tQO2JyZWFrfWZvcihHZnQ9MCxUUD1uZXcgZGEoem4uaix6bi5qLmMubGVuZ3RoKTtUUC5iPjA7KXtmb3IoaHA9KFpuKFRQLmI+MCksdShUUC5hLlhiKFRQLmM9LS1UUC5iKSwxMSkpLEVQPTAsZD1uZXcgUyhocC5lKTtkLmE8ZC5jLmMubGVuZ3RoOyloPXUoSihkKSwxNyksem4uYyE9aC5jLmkuYyYmKytFUDtFUD4wJiYoaHAuaj09KHZlKCksUG4pPyh0LmFbaHAucF09bUEsKyttQSk6KHQuYVtocC5wXT1tQStrUCtHZnQsKytHZnQpKX1tQSs9R2Z0fWZvcihWNz1uZXcgX3IsRz1uZXcgTzAsaHI9ZSxabD0wLGtVPWhyLmxlbmd0aDtabDxrVTsrK1psKWZvcih6bj1ocltabF0sWWZ0PW5ldyBTKHpuLmopO1lmdC5hPFlmdC5jLmMubGVuZ3RoOylmb3IodkE9dShKKFlmdCksMTEpLGQ9bmV3IFModkEuZyk7ZC5hPGQuYy5jLmxlbmd0aDspaWYoaD11KEooZCksMTcpLHlBPWguZCx6bi5jIT15QS5pLmMpaWYoS3Y9dShlYyhMbyhWNy5mLHZBKSksNDY3KSxvMz11KGVjKExvKFY3LmYseUEpKSw0NjcpLCFLdiYmIW8zKUg9bmV3IHNZdCxHLmEuemMoSCxHKSxsZShILmEsaCksbGUoSC5kLHZBKSxhdShWNy5mLHZBLEgpLGxlKEguZCx5QSksYXUoVjcuZix5QSxIKTtlbHNlIGlmKCFLdilsZShvMy5hLGgpLGxlKG8zLmQsdkEpLGF1KFY3LmYsdkEsbzMpO2Vsc2UgaWYoIW8zKWxlKEt2LmEsaCksbGUoS3YuZCx5QSksYXUoVjcuZix5QSxLdik7ZWxzZSBpZihLdj09bzMpbGUoS3YuYSxoKTtlbHNle2ZvcihsZShLdi5hLGgpLFVmdD1uZXcgUyhvMy5kKTtVZnQuYTxVZnQuYy5jLmxlbmd0aDspaXhlPXUoSihVZnQpLDExKSxhdShWNy5mLGl4ZSxLdik7THMoS3YuYSxvMy5hKSxMcyhLdi5kLG8zLmQpLEcuYS5CYyhvMykhPW51bGx9Zm9yKEs9dShlSShHLE50KGg2bix7MzoxLDQ6MSw1OjEsMTk0NjoxfSw0NjcsRy5hLmdjKCksMCwxKSksMTk0NiksUm49ZVswXS5jLHN4ZT1uWzBdLmMsQz1LLE09MCxqPUMubGVuZ3RoO008ajsrK00pZm9yKGs9Q1tNXSxrLmU9Qkx0LGsuZj1tQSxZdj1uZXcgUyhrLmQpO1l2LmE8WXYuYy5jLmxlbmd0aDspaHA9dShKKFl2KSwxMSksbms9dC5hW2hwLnBdLGhwLmkuYz09Um4/KG5rPGsuZSYmKGsuZT1uayksbms+ay5iJiYoay5iPW5rKSk6aHAuaS5jPT1zeGUmJihuazxrLmYmJihrLmY9bmspLG5rPmsuYyYmKGsuYz1uaykpO2ZvcigkOChLLDAsSy5sZW5ndGgsbnVsbCkscms9TnQoQ3IsWHIsMjUsSy5sZW5ndGgsMTUsMSkscj1OdChDcixYciwyNSxtQSsxLDE1LDEpLGd0PTA7Z3Q8Sy5sZW5ndGg7Z3QrKylya1tndF09S1tndF0uZixyW3JrW2d0XV09MTtmb3Iobz0wLE10PTA7TXQ8ci5sZW5ndGg7TXQrKylyW010XT09MT9yW010XT1vOi0tbztmb3IoV2Z0PTAsU3Q9MDtTdDxyay5sZW5ndGg7U3QrKylya1tTdF0rPXJbcmtbU3RdXSxXZnQ9Yi5NYXRoLm1heChXZnQscmtbU3RdKzEpO2Zvcih2PTE7djxXZnQ7KXYqPTI7Zm9yKGF4ZT0yKnYtMSx2LT0xLEtmdD1OdChDcixYciwyNSxheGUsMTUsMSkscz0wLFdlPTA7V2U8cmsubGVuZ3RoO1dlKyspZm9yKF9lPXJrW1dlXSt2LCsrS2Z0W19lXTtfZT4wOylfZSUyPjAmJihzKz1LZnRbX2UrMV0pLF9lPShfZS0xKS8yfDAsKytLZnRbX2VdO2ZvcihRZT1OdChJbWUsRGUsMzYyLEsubGVuZ3RoKjIsMCwxKSxSdD0wO1J0PEsubGVuZ3RoO1J0KyspUWVbMipSdF09bmV3IGYkKEtbUnRdLEtbUnRdLmUsS1tSdF0uYiwoJDkoKSxCUykpLFFlWzIqUnQrMV09bmV3IGYkKEtbUnRdLEtbUnRdLmIsS1tSdF0uZSxOUyk7Zm9yKCQ4KFFlLDAsUWUubGVuZ3RoLG51bGwpLEg3PTAsS3Q9MDtLdDxRZS5sZW5ndGg7S3QrKylzd2l0Y2goUWVbS3RdLmQuZyl7Y2FzZSAwOisrSDc7YnJlYWs7Y2FzZSAxOi0tSDcscys9SDd9Zm9yKHdBPU50KEltZSxEZSwzNjIsSy5sZW5ndGgqMiwwLDEpLHVlPTA7dWU8Sy5sZW5ndGg7dWUrKyl3QVsyKnVlXT1uZXcgZiQoS1t1ZV0sS1t1ZV0uZixLW3VlXS5jLCgkOSgpLEJTKSksd0FbMip1ZSsxXT1uZXcgZiQoS1t1ZV0sS1t1ZV0uYyxLW3VlXS5mLE5TKTtmb3IoJDgod0EsMCx3QS5sZW5ndGgsbnVsbCksSDc9MCx0dD0wO3R0PHdBLmxlbmd0aDt0dCsrKXN3aXRjaCh3QVt0dF0uZC5nKXtjYXNlIDA6KytINzticmVhaztjYXNlIDE6LS1INyxzKz1IN31yZXR1cm4gc31mdW5jdGlvbiBnaSgpe2dpPVoscEE9bmV3IHl3KDcpLExMdD1uZXcgWWQoOCw5NCksbmV3IFlkKDgsNjQpLE1MdD1uZXcgWWQoOCwzNiksSzVlPW5ldyBZZCg4LDY1KSxYNWU9bmV3IFlkKDgsMTIyKSxRNWU9bmV3IFlkKDgsOTApLEo1ZT1uZXcgWWQoOCw5OCksWTVlPW5ldyBZZCg4LDY2KSxaNWU9bmV3IFlkKDgsNjApLHR4ZT1uZXcgWWQoOCw2MiksQUx0PW5ldyB5dygxMSkseFU9bmV3IE5sKDQpLGpjKHhVLDQ4LDU3KSxxNz1uZXcgTmwoNCksamMocTcsNDgsNTcpLGpjKHE3LDY1LDkwKSxqYyhxNyw5NSw5NSksamMocTcsOTcsMTIyKSxlaz1uZXcgTmwoNCksamMoZWssOSw5KSxqYyhlaywxMCwxMCksamMoZWssMTIsMTIpLGpjKGVrLDEzLDEzKSxqYyhlaywzMiwzMiksREx0PW15KHhVKSxPTHQ9bXkocTcpLElMdD1teShlayksejc9bmV3IF9yLGdBPW5ldyBfcixXNWU9bHQoY3QoQWUsMSksZWUsMiw2LFsiQ24iLCJMdSIsIkxsIiwiTHQiLCJMbSIsIkxvIiwiTW4iLCJNZSIsIk1jIiwiTmQiLCJObCIsIk5vIiwiWnMiLCJabCIsIlpwIiwiQ2MiLCJDZiIsbnVsbCwiQ28iLCJDcyIsIlBkIiwiUHMiLCJQZSIsIlBjIiwiUG8iLCJTbSIsIlNjIiwiU2siLCJTbyIsIlBpIiwiUGYiLCJMIiwiTSIsIk4iLCJaIiwiQyIsIlAiLCJTIl0pLF9MdD1sdChjdChBZSwxKSxlZSwyLDYsWyJCYXNpYyBMYXRpbiIsIkxhdGluLTEgU3VwcGxlbWVudCIsIkxhdGluIEV4dGVuZGVkLUEiLCJMYXRpbiBFeHRlbmRlZC1CIiwiSVBBIEV4dGVuc2lvbnMiLCJTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMiLCJDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MiLCJHcmVlayIsIkN5cmlsbGljIiwiQXJtZW5pYW4iLCJIZWJyZXciLCJBcmFiaWMiLCJTeXJpYWMiLCJUaGFhbmEiLCJEZXZhbmFnYXJpIiwiQmVuZ2FsaSIsIkd1cm11a2hpIiwiR3VqYXJhdGkiLCJPcml5YSIsIlRhbWlsIiwiVGVsdWd1IiwiS2FubmFkYSIsIk1hbGF5YWxhbSIsIlNpbmhhbGEiLCJUaGFpIiwiTGFvIiwiVGliZXRhbiIsIk15YW5tYXIiLCJHZW9yZ2lhbiIsIkhhbmd1bCBKYW1vIiwiRXRoaW9waWMiLCJDaGVyb2tlZSIsIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MiLCJPZ2hhbSIsIlJ1bmljIiwiS2htZXIiLCJNb25nb2xpYW4iLCJMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsIiwiR3JlZWsgRXh0ZW5kZWQiLCJHZW5lcmFsIFB1bmN0dWF0aW9uIiwiU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzIiwiQ3VycmVuY3kgU3ltYm9scyIsIkNvbWJpbmluZyBNYXJrcyBmb3IgU3ltYm9scyIsIkxldHRlcmxpa2UgU3ltYm9scyIsIk51bWJlciBGb3JtcyIsIkFycm93cyIsIk1hdGhlbWF0aWNhbCBPcGVyYXRvcnMiLCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCIsIkNvbnRyb2wgUGljdHVyZXMiLCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiIsIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiLCJCb3ggRHJhd2luZyIsIkJsb2NrIEVsZW1lbnRzIiwiR2VvbWV0cmljIFNoYXBlcyIsIk1pc2NlbGxhbmVvdXMgU3ltYm9scyIsIkRpbmdiYXRzIiwiQnJhaWxsZSBQYXR0ZXJucyIsIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50IiwiS2FuZ3hpIFJhZGljYWxzIiwiSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyIsIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiIsIkhpcmFnYW5hIiwiS2F0YWthbmEiLCJCb3BvbW9mbyIsIkhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8iLCJLYW5idW4iLCJCb3BvbW9mbyBFeHRlbmRlZCIsIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiLCJDSksgQ29tcGF0aWJpbGl0eSIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiLCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIiwiWWkgU3lsbGFibGVzIiwiWWkgUmFkaWNhbHMiLCJIYW5ndWwgU3lsbGFibGVzIix5Z2UsIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiLCJBbHBoYWJldGljIFByZXNlbnRhdGlvbiBGb3JtcyIsIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSIsIkNvbWJpbmluZyBIYWxmIE1hcmtzIiwiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiLCJTbWFsbCBGb3JtIFZhcmlhbnRzIiwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIiwiU3BlY2lhbHMiLCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyIsIk9sZCBJdGFsaWMiLCJHb3RoaWMiLCJEZXNlcmV0IiwiQnl6YW50aW5lIE11c2ljYWwgU3ltYm9scyIsIk11c2ljYWwgU3ltYm9scyIsIk1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scyIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIiLCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQiLCJUYWdzIl0pLFNMdD1sdChjdChDciwxKSxYciwyNSwxNSxbNjYzMDQsNjYzNTEsNjYzNTIsNjYzODMsNjY1NjAsNjY2MzksMTE4Nzg0LDExOTAzOSwxMTkwNDAsMTE5Mjk1LDExOTgwOCwxMjA4MzEsMTMxMDcyLDE3Mzc4MiwxOTQ1NjAsMTk1MTAzLDkxNzUwNCw5MTc2MzFdKX1mdW5jdGlvbiAkcSgpeyRxPVosUnBlPW5ldyBoaCgiT1VUX1RfTCIsMCwoUXUoKSxNZCksKHl1KCksRWYpLChLZigpLHNjKSxzYyxsdChjdChqaCwxKSxEZSwyMSwwLFtqaSgocHkoKSxBZiksbHQoY3QobG8sMSksb2UsOTMsMCxbTGYsX2ZdKSldKSksQnBlPW5ldyBoaCgiT1VUX1RfQyIsMSxmYixFZixzYyxldSxsdChjdChqaCwxKSxEZSwyMSwwLFtqaShBZixsdChjdChsbywxKSxvZSw5MywwLFtMZixpZ10pKSxqaShBZixsdChjdChsbywxKSxvZSw5MywwLFtMZixpZyxxaF0pKV0pKSxqcGU9bmV3IGhoKCJPVVRfVF9SIiwyLGtmLEVmLHNjLGFjLGx0KGN0KGpoLDEpLERlLDIxLDAsW2ppKEFmLGx0KGN0KGxvLDEpLG9lLDkzLDAsW0xmLFNmXSkpXSkpLExwZT1uZXcgaGgoIk9VVF9CX0wiLDMsTWQsbjEsYWMsc2MsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoQWYsbHQoY3QobG8sMSksb2UsOTMsMCxbSGgsX2ZdKSldKSksQXBlPW5ldyBoaCgiT1VUX0JfQyIsNCxmYixuMSxhYyxldSxsdChjdChqaCwxKSxEZSwyMSwwLFtqaShBZixsdChjdChsbywxKSxvZSw5MywwLFtIaCxpZ10pKSxqaShBZixsdChjdChsbywxKSxvZSw5MywwLFtIaCxpZyxxaF0pKV0pKSxNcGU9bmV3IGhoKCJPVVRfQl9SIiw1LGtmLG4xLGFjLGFjLGx0KGN0KGpoLDEpLERlLDIxLDAsW2ppKEFmLGx0KGN0KGxvLDEpLG9lLDkzLDAsW0hoLFNmXSkpXSkpLE9wZT1uZXcgaGgoIk9VVF9MX1QiLDYsa2YsbjEsc2Msc2MsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoQWYsbHQoY3QobG8sMSksb2UsOTMsMCxbX2YsTGYscWhdKSldKSksSXBlPW5ldyBoaCgiT1VUX0xfQyIsNyxrZixkYixldSxzYyxsdChjdChqaCwxKSxEZSwyMSwwLFtqaShBZixsdChjdChsbywxKSxvZSw5MywwLFtfZixkMF0pKSxqaShBZixsdChjdChsbywxKSxvZSw5MywwLFtfZixkMCxxaF0pKV0pKSxEcGU9bmV3IGhoKCJPVVRfTF9CIiw4LGtmLEVmLGFjLHNjLGx0KGN0KGpoLDEpLERlLDIxLDAsW2ppKEFmLGx0KGN0KGxvLDEpLG9lLDkzLDAsW19mLEhoLHFoXSkpXSkpLE5wZT1uZXcgaGgoIk9VVF9SX1QiLDksTWQsbjEsc2MsYWMsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoQWYsbHQoY3QobG8sMSksb2UsOTMsMCxbU2YsTGYscWhdKSldKSksRnBlPW5ldyBoaCgiT1VUX1JfQyIsMTAsTWQsZGIsZXUsYWMsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoQWYsbHQoY3QobG8sMSksb2UsOTMsMCxbU2YsZDBdKSksamkoQWYsbHQoY3QobG8sMSksb2UsOTMsMCxbU2YsZDAscWhdKSldKSksUHBlPW5ldyBoaCgiT1VUX1JfQiIsMTEsTWQsRWYsYWMsYWMsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoQWYsbHQoY3QobG8sMSksb2UsOTMsMCxbU2YsSGgscWhdKSldKSksX3BlPW5ldyBoaCgiSU5fVF9MIiwxMixNZCxuMSxzYyxzYyxsdChjdChqaCwxKSxEZSwyMSwwLFtqaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtMZixfZl0pKSxqaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtMZixfZixxaF0pKV0pKSxDcGU9bmV3IGhoKCJJTl9UX0MiLDEzLGZiLG4xLHNjLGV1LGx0KGN0KGpoLDEpLERlLDIxLDAsW2ppKFlsLGx0KGN0KGxvLDEpLG9lLDkzLDAsW0xmLGlnXSkpLGppKFlsLGx0KGN0KGxvLDEpLG9lLDkzLDAsW0xmLGlnLHFoXSkpXSkpLFNwZT1uZXcgaGgoIklOX1RfUiIsMTQsa2YsbjEsc2MsYWMsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoWWwsbHQoY3QobG8sMSksb2UsOTMsMCxbTGYsU2ZdKSksamkoWWwsbHQoY3QobG8sMSksb2UsOTMsMCxbTGYsU2YscWhdKSldKSksRXBlPW5ldyBoaCgiSU5fQ19MIiwxNSxNZCxkYixldSxzYyxsdChjdChqaCwxKSxEZSwyMSwwLFtqaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtkMCxfZl0pKSxqaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtkMCxfZixxaF0pKV0pKSxrcGU9bmV3IGhoKCJJTl9DX0MiLDE2LGZiLGRiLGV1LGV1LGx0KGN0KGpoLDEpLERlLDIxLDAsW2ppKFlsLGx0KGN0KGxvLDEpLG9lLDkzLDAsW2QwLGlnXSkpLGppKFlsLGx0KGN0KGxvLDEpLG9lLDkzLDAsW2QwLGlnLHFoXSkpXSkpLFRwZT1uZXcgaGgoIklOX0NfUiIsMTcsa2YsZGIsZXUsYWMsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoWWwsbHQoY3QobG8sMSksb2UsOTMsMCxbZDAsU2ZdKSksamkoWWwsbHQoY3QobG8sMSksb2UsOTMsMCxbZDAsU2YscWhdKSldKSkseXBlPW5ldyBoaCgiSU5fQl9MIiwxOCxNZCxFZixhYyxzYyxsdChjdChqaCwxKSxEZSwyMSwwLFtqaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtIaCxfZl0pKSxqaShZbCxsdChjdChsbywxKSxvZSw5MywwLFtIaCxfZixxaF0pKV0pKSxtcGU9bmV3IGhoKCJJTl9CX0MiLDE5LGZiLEVmLGFjLGV1LGx0KGN0KGpoLDEpLERlLDIxLDAsW2ppKFlsLGx0KGN0KGxvLDEpLG9lLDkzLDAsW0hoLGlnXSkpLGppKFlsLGx0KGN0KGxvLDEpLG9lLDkzLDAsW0hoLGlnLHFoXSkpXSkpLHhwZT1uZXcgaGgoIklOX0JfUiIsMjAsa2YsRWYsYWMsYWMsbHQoY3QoamgsMSksRGUsMjEsMCxbamkoWWwsbHQoY3QobG8sMSksb2UsOTMsMCxbSGgsU2ZdKSksamkoWWwsbHQoY3QobG8sMSksb2UsOTMsMCxbSGgsU2YscWhdKSldKSksVXV0PW5ldyBoaChOXywyMSxudWxsLG51bGwsbnVsbCxudWxsLGx0KGN0KGpoLDEpLERlLDIxLDAsW10pKX1mdW5jdGlvbiBkbigpe2RuPVoscjM9KEhwKCksTG4pLmIsdShBdChXdChMbi5iKSwwKSwzNCksdShBdChXdChMbi5iKSwxKSwxOCksYXA9TG4uYSx1KEF0KFd0KExuLmEpLDApLDM0KSx1KEF0KFd0KExuLmEpLDEpLDE4KSx1KEF0KFd0KExuLmEpLDIpLDE4KSx1KEF0KFd0KExuLmEpLDMpLDE4KSx1KEF0KFd0KExuLmEpLDQpLDE4KSxMYj1Mbi5vLHUoQXQoV3QoTG4ubyksMCksMzQpLHUoQXQoV3QoTG4ubyksMSksMzQpLGQ1ZT11KEF0KFd0KExuLm8pLDIpLDE4KSx1KEF0KFd0KExuLm8pLDMpLDE4KSx1KEF0KFd0KExuLm8pLDQpLDE4KSx1KEF0KFd0KExuLm8pLDUpLDE4KSx1KEF0KFd0KExuLm8pLDYpLDE4KSx1KEF0KFd0KExuLm8pLDcpLDE4KSx1KEF0KFd0KExuLm8pLDgpLDE4KSx1KEF0KFd0KExuLm8pLDkpLDE4KSx1KEF0KFd0KExuLm8pLDEwKSwxOCksdShBdChXdChMbi5vKSwxMSksMTgpLHUoQXQoV3QoTG4ubyksMTIpLDE4KSx1KEF0KFd0KExuLm8pLDEzKSwxOCksdShBdChXdChMbi5vKSwxNCksMTgpLHUoQXQoV3QoTG4ubyksMTUpLDE4KSx1KEF0KE1pKExuLm8pLDApLDU5KSx1KEF0KE1pKExuLm8pLDEpLDU5KSx1KEF0KE1pKExuLm8pLDIpLDU5KSx1KEF0KE1pKExuLm8pLDMpLDU5KSx1KEF0KE1pKExuLm8pLDQpLDU5KSx1KEF0KE1pKExuLm8pLDUpLDU5KSx1KEF0KE1pKExuLm8pLDYpLDU5KSx1KEF0KE1pKExuLm8pLDcpLDU5KSx1KEF0KE1pKExuLm8pLDgpLDU5KSx1KEF0KE1pKExuLm8pLDkpLDU5KSxmNWU9TG4ucCx1KEF0KFd0KExuLnApLDApLDM0KSx1KEF0KFd0KExuLnApLDEpLDM0KSx1KEF0KFd0KExuLnApLDIpLDM0KSx1KEF0KFd0KExuLnApLDMpLDM0KSx1KEF0KFd0KExuLnApLDQpLDE4KSx1KEF0KFd0KExuLnApLDUpLDE4KSx1KEF0KE1pKExuLnApLDApLDU5KSx1KEF0KE1pKExuLnApLDEpLDU5KSxnNWU9TG4ucSx1KEF0KFd0KExuLnEpLDApLDM0KSxNYj1Mbi52LHUoQXQoV3QoTG4udiksMCksMTgpLHUoQXQoTWkoTG4udiksMCksNTkpLHUoQXQoTWkoTG4udiksMSksNTkpLHUoQXQoTWkoTG4udiksMiksNTkpLG9wPUxuLncsdShBdChXdChMbi53KSwwKSwzNCksdShBdChXdChMbi53KSwxKSwzNCksdShBdChXdChMbi53KSwyKSwzNCksdShBdChXdChMbi53KSwzKSwxOCksRGI9TG4uQix1KEF0KFd0KExuLkIpLDApLDE4KSx1KEF0KE1pKExuLkIpLDApLDU5KSx1KEF0KE1pKExuLkIpLDEpLDU5KSx1KEF0KE1pKExuLkIpLDIpLDU5KSxwNWU9TG4uUSx1KEF0KFd0KExuLlEpLDApLDE4KSx1KEF0KE1pKExuLlEpLDApLDU5KSxiNWU9TG4uUix1KEF0KFd0KExuLlIpLDApLDM0KSxLaD1Mbi5TLHUoQXQoTWkoTG4uUyksMCksNTkpLHUoQXQoTWkoTG4uUyksMSksNTkpLHUoQXQoTWkoTG4uUyksMiksNTkpLHUoQXQoTWkoTG4uUyksMyksNTkpLHUoQXQoTWkoTG4uUyksNCksNTkpLHUoQXQoTWkoTG4uUyksNSksNTkpLHUoQXQoTWkoTG4uUyksNiksNTkpLHUoQXQoTWkoTG4uUyksNyksNTkpLHUoQXQoTWkoTG4uUyksOCksNTkpLHUoQXQoTWkoTG4uUyksOSksNTkpLHUoQXQoTWkoTG4uUyksMTApLDU5KSx1KEF0KE1pKExuLlMpLDExKSw1OSksdShBdChNaShMbi5TKSwxMiksNTkpLHUoQXQoTWkoTG4uUyksMTMpLDU5KSx1KEF0KE1pKExuLlMpLDE0KSw1OSksY3A9TG4uVCx1KEF0KFd0KExuLlQpLDApLDE4KSx1KEF0KFd0KExuLlQpLDIpLDE4KSx3NWU9dShBdChXdChMbi5UKSwzKSwxOCksdShBdChXdChMbi5UKSw0KSwxOCksdShBdChNaShMbi5UKSwwKSw1OSksdShBdChNaShMbi5UKSwxKSw1OSksdShBdChXdChMbi5UKSwxKSwxOCksdXA9TG4uVSx1KEF0KFd0KExuLlUpLDApLDM0KSx1KEF0KFd0KExuLlUpLDEpLDM0KSx1KEF0KFd0KExuLlUpLDIpLDE4KSx1KEF0KFd0KExuLlUpLDMpLDE4KSx1KEF0KFd0KExuLlUpLDQpLDE4KSx1KEF0KFd0KExuLlUpLDUpLDE4KSx1KEF0KE1pKExuLlUpLDApLDU5KSxpMz1Mbi5WLHUoQXQoV3QoTG4uViksMCksMTgpLGw1PUxuLlcsdShBdChXdChMbi5XKSwwKSwzNCksdShBdChXdChMbi5XKSwxKSwzNCksdShBdChXdChMbi5XKSwyKSwzNCksdShBdChXdChMbi5XKSwzKSwxOCksdShBdChXdChMbi5XKSw0KSwxOCksdShBdChXdChMbi5XKSw1KSwxOCksdjVlPUxuLmJiLHUoQXQoV3QoTG4uYmIpLDApLDM0KSx1KEF0KFd0KExuLmJiKSwxKSwzNCksdShBdChXdChMbi5iYiksMiksMzQpLHUoQXQoV3QoTG4uYmIpLDMpLDM0KSx1KEF0KFd0KExuLmJiKSw0KSwzNCksdShBdChXdChMbi5iYiksNSksMzQpLHUoQXQoV3QoTG4uYmIpLDYpLDM0KSx1KEF0KFd0KExuLmJiKSw3KSwxOCksdShBdChNaShMbi5iYiksMCksNTkpLHUoQXQoTWkoTG4uYmIpLDEpLDU5KSxtNWU9TG4uZWIsdShBdChXdChMbi5lYiksMCksMzQpLHUoQXQoV3QoTG4uZWIpLDEpLDM0KSx1KEF0KFd0KExuLmViKSwyKSwzNCksdShBdChXdChMbi5lYiksMyksMzQpLHUoQXQoV3QoTG4uZWIpLDQpLDM0KSx1KEF0KFd0KExuLmViKSw1KSwzNCksdShBdChXdChMbi5lYiksNiksMTgpLHUoQXQoV3QoTG4uZWIpLDcpLDE4KSxRYT1Mbi5hYix1KEF0KFd0KExuLmFiKSwwKSwzNCksdShBdChXdChMbi5hYiksMSksMzQpLEd2PUxuLkgsdShBdChXdChMbi5IKSwwKSwxOCksdShBdChXdChMbi5IKSwxKSwxOCksdShBdChXdChMbi5IKSwyKSwxOCksdShBdChXdChMbi5IKSwzKSwxOCksdShBdChXdChMbi5IKSw0KSwxOCksdShBdChXdChMbi5IKSw1KSwxOCksdShBdChNaShMbi5IKSwwKSw1OSksVXY9TG4uZGIsdShBdChXdChMbi5kYiksMCksMTgpLFcxPUxuLk19ZnVuY3Rpb24gcXhuKHQpe3ZhciBlO3QuT3x8KHQuTz0hMCxRYyh0LCJ0eXBlIiksYnoodCwiZWNvcmUueG1sLnR5cGUiKSx3eih0LE8yKSxlPXUoX0UoKFBwKCksWWgpLE8yKSwxOTQ1KSxEcihBbyh0LmZiKSx0LmIpLHJjKHQuYix3UCwiQW55VHlwZSIsITEsITEsITApLGhzKHUoQXQoV3QodC5iKSwwKSwzNCksdC53Yi5ELHJPLG51bGwsMCwtMSx3UCwhMSwhMSwhMCwhMSwhMSwhMSksaHModShBdChXdCh0LmIpLDEpLDM0KSx0LndiLkQsImFueSIsbnVsbCwwLC0xLHdQLCEwLCEwLCEwLCExLCExLCEwKSxocyh1KEF0KFd0KHQuYiksMiksMzQpLHQud2IuRCwiYW55QXR0cmlidXRlIixudWxsLDAsLTEsd1AsITEsITEsITAsITEsITEsITEpLHJjKHQuYmIsbVUsZWdlLCExLCExLCEwKSxocyh1KEF0KFd0KHQuYmIpLDApLDM0KSx0LmdiLCJkYXRhIixudWxsLDAsMSxtVSwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LmJiKSwxKSwzNCksdC5nYixNOHQsbnVsbCwxLDEsbVUsITEsITEsITAsITEsITAsITEpLHJjKHQuZmIsdlAsbmdlLCExLCExLCEwKSxocyh1KEF0KFd0KHQuZmIpLDApLDM0KSxlLmdiLCJyYXdWYWx1ZSIsbnVsbCwwLDEsdlAsITAsITAsITAsITEsITAsITApLGhzKHUoQXQoV3QodC5mYiksMSksMzQpLGUuYSxaXyxudWxsLDAsMSx2UCwhMCwhMCwhMCwhMSwhMCwhMCksTmkodShBdChXdCh0LmZiKSwyKSwxOCksdC53Yi5xLG51bGwsImluc3RhbmNlVHlwZSIsMSwxLHZQLCExLCExLCEwLCExLCExLCExLCExKSxyYyh0LnFiLGtMdCxyZ2UsITEsITEsITApLGhzKHUoQXQoV3QodC5xYiksMCksMzQpLHQud2IuRCxyTyxudWxsLDAsLTEsbnVsbCwhMSwhMSwhMCwhMSwhMSwhMSksTmkodShBdChXdCh0LnFiKSwxKSwxOCksdC53Yi5hYixudWxsLCJ4TUxOU1ByZWZpeE1hcCIsMCwtMSxudWxsLCEwLCExLCEwLCEwLCExLCExLCExKSxOaSh1KEF0KFd0KHQucWIpLDIpLDE4KSx0LndiLmFiLG51bGwsInhTSVNjaGVtYUxvY2F0aW9uIiwwLC0xLG51bGwsITAsITEsITAsITAsITEsITEsITEpLGhzKHUoQXQoV3QodC5xYiksMyksMzQpLHQuZ2IsImNEQVRBIixudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksaHModShBdChXdCh0LnFiKSw0KSwzNCksdC5nYiwiY29tbWVudCIsbnVsbCwwLC0yLG51bGwsITAsITAsITAsITEsITEsITApLE5pKHUoQXQoV3QodC5xYiksNSksMTgpLHQuYmIsbnVsbCxiZ2UsMCwtMixudWxsLCEwLCEwLCEwLCEwLCExLCExLCEwKSxocyh1KEF0KFd0KHQucWIpLDYpLDM0KSx0LmdiLHR1dCxudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksYWkodC5hLFFuLCJBbnlTaW1wbGVUeXBlIiwhMCksYWkodC5jLEFlLCJBbnlVUkkiLCEwKSxhaSh0LmQsY3QoR3UsMSksIkJhc2U2NEJpbmFyeSIsITApLGFpKHQuZSxwbCwiQm9vbGVhbiIsITApLGFpKHQuZixScywiQm9vbGVhbk9iamVjdCIsITApLGFpKHQuZyxHdSwiQnl0ZSIsITApLGFpKHQuaSxNNiwiQnl0ZU9iamVjdCIsITApLGFpKHQuaixBZSwiRGF0ZSIsITApLGFpKHQuayxBZSwiRGF0ZVRpbWUiLCEwKSxhaSh0Lm4sTnV0LCJEZWNpbWFsIiwhMCksYWkodC5vLGFhLCJEb3VibGUiLCEwKSxhaSh0LnAsbGEsIkRvdWJsZU9iamVjdCIsITApLGFpKHQucSxBZSwiRHVyYXRpb24iLCEwKSxhaSh0LnMsd2gsIkVOVElUSUVTIiwhMCksYWkodC5yLHdoLCJFTlRJVElFU0Jhc2UiLCEwKSxhaSh0LnQsQWUsVTh0LCEwKSxhaSh0LnUsYTMsIkZsb2F0IiwhMCksYWkodC52LGk3LCJGbG9hdE9iamVjdCIsITApLGFpKHQudyxBZSwiR0RheSIsITApLGFpKHQuQixBZSwiR01vbnRoIiwhMCksYWkodC5BLEFlLCJHTW9udGhEYXkiLCEwKSxhaSh0LkMsQWUsIkdZZWFyIiwhMCksYWkodC5ELEFlLCJHWWVhck1vbnRoIiwhMCksYWkodC5GLGN0KEd1LDEpLCJIZXhCaW5hcnkiLCEwKSxhaSh0LkcsQWUsIklEIiwhMCksYWkodC5ILEFlLCJJRFJFRiIsITApLGFpKHQuSix3aCwiSURSRUZTIiwhMCksYWkodC5JLHdoLCJJRFJFRlNCYXNlIiwhMCksYWkodC5LLENyLCJJbnQiLCEwKSxhaSh0Lk0sajQsIkludGVnZXIiLCEwKSxhaSh0LkwsamEsIkludE9iamVjdCIsITApLGFpKHQuUCxBZSwiTGFuZ3VhZ2UiLCEwKSxhaSh0LlEsT2IsIkxvbmciLCEwKSxhaSh0LlIsU3YsIkxvbmdPYmplY3QiLCEwKSxhaSh0LlMsQWUsIk5hbWUiLCEwKSxhaSh0LlQsQWUsVUgsITApLGFpKHQuVSxqNCwiTmVnYXRpdmVJbnRlZ2VyIiwhMCksYWkodC5WLEFlLEs4dCwhMCksYWkodC5YLHdoLCJOTVRPS0VOUyIsITApLGFpKHQuVyx3aCwiTk1UT0tFTlNCYXNlIiwhMCksYWkodC5ZLGo0LCJOb25OZWdhdGl2ZUludGVnZXIiLCEwKSxhaSh0LlosajQsIk5vblBvc2l0aXZlSW50ZWdlciIsITApLGFpKHQuJCxBZSwiTm9ybWFsaXplZFN0cmluZyIsITApLGFpKHQuXyxBZSwiTk9UQVRJT04iLCEwKSxhaSh0LmFiLEFlLCJQb3NpdGl2ZUludGVnZXIiLCEwKSxhaSh0LmNiLEFlLCJRTmFtZSIsITApLGFpKHQuZGIsZzUsIlNob3J0IiwhMCksYWkodC5lYixBdiwiU2hvcnRPYmplY3QiLCEwKSxhaSh0LmdiLEFlLGp4dCwhMCksYWkodC5oYixBZSwiVGltZSIsITApLGFpKHQuaWIsQWUsIlRva2VuIiwhMCksYWkodC5qYixnNSwiVW5zaWduZWRCeXRlIiwhMCksYWkodC5rYixBdiwiVW5zaWduZWRCeXRlT2JqZWN0IiwhMCksYWkodC5sYixPYiwiVW5zaWduZWRJbnQiLCEwKSxhaSh0Lm1iLFN2LCJVbnNpZ25lZEludE9iamVjdCIsITApLGFpKHQubmIsajQsIlVuc2lnbmVkTG9uZyIsITApLGFpKHQub2IsQ3IsIlVuc2lnbmVkU2hvcnQiLCEwKSxhaSh0LnBiLGphLCJVbnNpZ25lZFNob3J0T2JqZWN0IiwhMCksS3l0KHQsTzIpLEh4bih0KSl9ZnVuY3Rpb24gaWZlKHQpe013KHQsbmV3IGsyKGxidChNUihfdyhFdyhDdyhUdyhuZXcga2csR24pLCJFTEsgTGF5ZXJlZCIpLCJMYXllci1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gQXJyYW5nZXMgYXMgbWFueSBlZGdlcyBhcyBwb3NzaWJsZSBpbnRvIG9uZSBkaXJlY3Rpb24gYnkgcGxhY2luZyBub2RlcyBpbnRvIHN1YnNlcXVlbnQgbGF5ZXJzLiBUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGRpZmZlcmVudCByb3V0aW5nIHN0eWxlcyAoc3RyYWlnaHQsIG9ydGhvZ29uYWwsIHNwbGluZXMpOyBpZiBvcnRob2dvbmFsIHJvdXRpbmcgaXMgc2VsZWN0ZWQsIGFyYml0cmFyeSBwb3J0IGNvbnN0cmFpbnRzIGFyZSByZXNwZWN0ZWQsIHRodXMgZW5hYmxpbmcgdGhlIGxheW91dCBvZiBibG9jayBkaWFncmFtcyBzdWNoIGFzIGFjdG9yLW9yaWVudGVkIG1vZGVscyBvciBjaXJjdWl0IHNjaGVtYXRpY3MuIEZ1cnRoZXJtb3JlLCBmdWxsIGxheW91dCBvZiBjb21wb3VuZCBncmFwaHMgd2l0aCBjcm9zcy1oaWVyYXJjaHkgZWRnZXMgaXMgc3VwcG9ydGVkIHdoZW4gdGhlIHJlc3BlY3RpdmUgb3B0aW9uIGlzIGFjdGl2YXRlZCBvbiB0aGUgdG9wIGxldmVsLiIpLG5ldyBmUSksR24pLGppKChDRSgpLE9mdCksbHQoY3QoZlUsMSksb2UsMjM3LDAsW2xVLGhVLHVVLElmdCxjVSxvVV0pKSkpKSx4ZSh0LEduLG9rdCxJZShsaHQpKSx4ZSh0LEduLGNrdCxJZSh5OXQpKSx4ZSh0LEduLGpvdCxJZShPTykpLHhlKHQsR24sdWt0LEllKFRmKSkseGUodCxHbixWb3QsSWUoVjYpKSx4ZSh0LEduLGxrdCxJZShqdikpLHhlKHQsR24saGt0LEllKFd5KSkseGUodCxHbixma3QsSWUoUzcpKSx4ZSh0LEduLGRrdCxJZShBNykpLHhlKHQsR24sZ2t0LEllKGhodCkpLHhlKHQsR24sQ3ksSWUoJHYpKSx4ZSh0LEduLHBrdCxJZShmaHQpKSx4ZSh0LEduLGJrdCxJZShMUykpLHhlKHQsR24sd2t0LEllKGJHKSkseGUodCxHbixINnQsSWUoSU8pKSx4ZSh0LEduLEc2dCxJZShKNCkpLHhlKHQsR24sVjZ0LEllKHEyKSkseGUodCxHbixVNnQsSWUodDUpKSx4ZSh0LEduLFZJLHBlKDApKSx4ZSh0LEduLFc2dCxJZShfNykpLHhlKHQsR24sWTZ0LEllKG05dCkpLHhlKHQsR24sSzZ0LEllKEg2KSkseGUodCxHbix0ZyxJZShBOXQpKSx4ZSh0LEduLGhILEllKHg5dCkpLHhlKHQsR24sZkgsSWUoazl0KSkseGUodCxHbixWXyxJZShnaHQpKSx4ZSh0LEduLHBjdCxJZShFOXQpKSx4ZSh0LEduLGJjdCxJZShUOXQpKSx4ZSh0LEduLGRILEllKHdHKSkseGUodCxHbixnSCxJZShwaHQpKSx4ZSh0LEduLHBILEllKF85dCkpLHhlKHQsR24sYkgsSWUoQzl0KSkseGUodCxHbix3Y3QsSWUoUzl0KSkseGUodCxHbix1Y3QsSWUoQnYpKSx4ZSh0LEduLGxjdCxJZShBUykpLHhlKHQsR24sY0gsSWUoc2h0KSkseGUodCxHbix1SCxJZShRQ3QpKSx4ZSh0LEduLHh2LGc5dCkseGUodCxHbixRSSxZQ3QpLHhlKHQsR24sdmt0LDApLHhlKHQsR24sdEgscGUoMSkpLHhlKHQsR24sRTYsR0UpLHhlKHQsR24sbWt0LEllKHoyKSkseGUodCxHbixHb3QsSWUoY3MpKSx4ZSh0LEduLHlrdCxJZShDNykpLHhlKHQsR24sSkksSWUoR3ZlKSkseGUodCxHbix4a3QsSWUoSWQpKSx4ZSh0LEduLHZILEllKHF5KSkseGUodCxHbixSXywoTm4oKSwhMCkpLHhlKHQsR24sa2t0LEllKEh5KSkseGUodCxHbixFa3QsSWUoajIpKSx4ZSh0LEduLEQ0LEllKCQyKSkseGUodCxHbixUNixJZShwRykpLHhlKHQsR24sRWN0LEllKHVodCkpLHhlKHQsR24sVGt0LFdDdCkseGUodCxHbixVRSxJZShOdikpLHhlKHQsR24sQ2t0LEllKGRHKSkseGUodCxHbixXRSxJZShHeSkpLHhlKHQsR24sX2t0LEllKFF2ZSkpLHhlKHQsR24sU2t0LEllKHc5dCkpLHhlKHQsR24sQWt0LGI5dCkseGUodCxHbixMa3QsSWUoWXZlKSkseGUodCxHbixNa3QsSWUoS3ZlKSkseGUodCxHbixEa3QsSWUoWHZlKSkseGUodCxHbixJa3QsSWUoV3ZlKSkseGUodCxHbixJNnQsSWUoZGh0KSkseGUodCxHbixLSSxJZShjOXQpKSx4ZSh0LEduLHRjdCxJZShvaHQpKSx4ZSh0LEduLEQ2dCxJZShNUykpLHhlKHQsR24sUDZ0LEllKHV1KSkseGUodCxHbixRb3QsSWUoenkpKSx4ZSh0LEduLEhfLEllKF9TKSkseGUodCxHbixCNnQsSWUoJHkpKSx4ZSh0LEduLCQ2dCxJZShWQ3QpKSx4ZSh0LEduLHNjdCxJZShlaHQpKSx4ZSh0LEduLGFILEllKERPKSkseGUodCxHbixpY3QsSWUobmh0KSkseGUodCxHbixTNnQsSWUodTl0KSkseGUodCxHbixBNnQsSWUobDl0KSkseGUodCxHbixzSCxJZShyOXQpKSx4ZSh0LEduLEk0LEllKGdHKSkseGUodCxHbixvY3QsSWUoY2h0KSkseGUodCxHbixfNnQsSWUoYWh0KSkseGUodCxHbixjY3QsSWUoZjl0KSkseGUodCxHbix6NnQsSWUoWEN0KSkseGUodCxHbixxNnQsSWUoaWh0KSkseGUodCxHbixtSCxJZSh0aHQpKSx4ZSh0LEduLGFjdCxJZShoOXQpKSx4ZSh0LEduLFg2dCxJZShzRykpLHhlKHQsR24sUTZ0LEllKHpDdCkpLHhlKHQsR24sZmN0LEllKGlHKSkseGUodCxHbixsSCxJZSh0OXQpKSx4ZSh0LEduLGRjdCxJZShKQ3QpKSx4ZSh0LEduLGdjdCxJZShlOXQpKSx4ZSh0LEduLEM2LEllKEU3KSkseGUodCxHbixPa3QsSWUoU28pKSx4ZSh0LEduLCRvdCxJZShKZykpLHhlKHQsR24sUGt0LEllKE9kKSkseGUodCxHbixlSCxJZShyaHQpKSx4ZSh0LEduLHJjdCxJZShHQ3QpKSx4ZSh0LEduLEZrdCxJZSh0cCkpLHhlKHQsR24sTmt0LEllKENTKSkseGUodCxHbixCa3QsSWUobEcpKSx4ZSh0LEduLFJrdCxJZShSdikpLHhlKHQsR24sVGN0LEllKHA5dCkpLHhlKHQsR24sQ2N0LEllKFQ3KSkseGUodCxHbixab3QsSWUoczl0KSkseGUodCxHbixKb3QsSWUoYTl0KSkseGUodCxHbix5SCxJZShVeSkpLHhlKHQsR24sTDZ0LEllKFpsdCkpLHhlKHQsR24sZWN0LEllKG85dCkpLHhlKHQsR24sWjZ0LEllKHVHKSkseGUodCxHbixKNnQsSWUoY0cpKSx4ZSh0LEduLGprdCxJZShmRykpLHhlKHQsR24sbmN0LEllKGk5dCkpLHhlKHQsR24sb0gsSWUoU1MpKSx4ZSh0LEduLCRrdCxJZShQTykpLHhlKHQsR24sQzZ0LEllKFVDdCkpLHhlKHQsR24sTTZ0LEllKHY5dCkpLHhlKHQsR24saGN0LEllKEtDdCkpLHhlKHQsR24sRjZ0LEllKFV2ZSkpLHhlKHQsR24sUjZ0LEllKFZ2ZSkpLHhlKHQsR24sX2N0LEllKG45dCkpLHhlKHQsR24sTjZ0LEllKGhHKSkseGUodCxHbixqNnQsSWUob0cpKSx4ZSh0LEduLHdILEllKHdiKSkseGUodCxHbixla3QsSWUoSEN0KSkseGUodCxHbixtY3QsSWUoYUcpKSx4ZSh0LEduLHljdCxJZShxQ3QpKSx4ZSh0LEduLHRrdCxJZShKbHQpKSx4ZSh0LEduLHZjdCxJZShxNikpLHhlKHQsR24sTzZ0LEllKFpDdCkpfWZ1bmN0aW9uIFM0KHQsZSl7dmFyIG4scjtyZXR1cm4gZDV8fChkNT1uZXcgX3IsJDc9bmV3IF9yLHI9KGdpKCksZ2koKSxuZXcgTmwoNCkpLFpEKHIsYAkKXHJcciAgYCksa28oZDUsbXV0LHIpLGtvKCQ3LG11dCxteShyKSkscj1uZXcgTmwoNCksWkQocix2Z2UpLGtvKGQ1LG9TLHIpLGtvKCQ3LG9TLG15KHIpKSxyPW5ldyBObCg0KSxaRChyLHZnZSksa28oZDUsb1Msciksa28oJDcsb1MsbXkocikpLHI9bmV3IE5sKDQpLFpEKHIsbWdlKSx5eShyLHUoTmMoZDUsb1MpLDExNykpLGtvKGQ1LHZ1dCxyKSxrbygkNyx2dXQsbXkocikpLHI9bmV3IE5sKDQpLFpEKHIsIi0uMDpBWl9fYXrCt8K3w4DDlsOYw7bDuMSxxLTEvsWBxYjFisW+xoDHg8eNx7DHtMe1x7rIl8mQyqjKu8uBy5DLkcyAzYXNoM2hzobOis6MzozOjs6hzqPPjs+Qz5bPms+az5zPnM+ez57PoM+gz6LPs9CB0IzQjtGP0ZHRnNGe0oHSg9KG0pDThNOH04jTi9OM05DTq9Ou07XTuNO51LHVltWZ1ZnVodaG1pHWodaj1rnWu9a91r/Wv9eB14LXhNeE15DXqtew17LYodi62YDZktmg2anZsNq32rravtuA247bkNuT25XbqNuq263bsNu54KSB4KSD4KSF4KS54KS84KWN4KWR4KWU4KWY4KWj4KWm4KWv4KaB4KaD4KaF4KaM4KaP4KaQ4KaT4Kao4Kaq4Kaw4Kay4Kay4Ka24Ka54Ka84Ka84Ka+4KeE4KeH4KeI4KeL4KeN4KeX4KeX4Kec4Ked4Kef4Kej4Kem4Kex4KiC4KiC4KiF4KiK4KiP4KiQ4KiT4Kio4Kiq4Kiw4Kiy4Kiz4Ki14Ki24Ki44Ki54Ki84Ki84Ki+4KmC4KmH4KmI4KmL4KmN4KmZ4Kmc4Kme4Kme4Kmm4Km04KqB4KqD4KqF4KqL4KqN4KqN4KqP4KqR4KqT4Kqo4Kqq4Kqw4Kqy4Kqz4Kq14Kq54Kq84KuF4KuH4KuJ4KuL4KuN4Kug4Kug4Kum4Kuv4KyB4KyD4KyF4KyM4KyP4KyQ4KyT4Kyo4Kyq4Kyw4Kyy4Kyz4Ky24Ky54Ky84K2D4K2H4K2I4K2L4K2N4K2W4K2X4K2c4K2d4K2f4K2h4K2m4K2v4K6C4K6D4K6F4K6K4K6O4K6Q4K6S4K6V4K6Z4K6a4K6c4K6c4K6e4K6f4K6j4K6k4K6o4K6q4K6u4K614K634K654K6+4K+C4K+G4K+I4K+K4K+N4K+X4K+X4K+n4K+v4LCB4LCD4LCF4LCM4LCO4LCQ4LCS4LCo4LCq4LCz4LC14LC54LC+4LGE4LGG4LGI4LGK4LGN4LGV4LGW4LGg4LGh4LGm4LGv4LKC4LKD4LKF4LKM4LKO4LKQ4LKS4LKo4LKq4LKz4LK14LK54LK+4LOE4LOG4LOI4LOK4LON4LOV4LOW4LOe4LOe4LOg4LOh4LOm4LOv4LSC4LSD4LSF4LSM4LSO4LSQ4LSS4LSo4LSq4LS54LS+4LWD4LWG4LWI4LWK4LWN4LWX4LWX4LWg4LWh4LWm4LWv4LiB4Liu4Liw4Li64LmA4LmO4LmQ4LmZ4LqB4LqC4LqE4LqE4LqH4LqI4LqK4LqK4LqN4LqN4LqU4LqX4LqZ4Lqf4Lqh4Lqj4Lql4Lql4Lqn4Lqn4Lqq4Lqr4Lqt4Lqu4Lqw4Lq54Lq74Lq94LuA4LuE4LuG4LuG4LuI4LuN4LuQ4LuZ4LyY4LyZ4Lyg4Lyp4Ly14Ly14Ly34Ly34Ly54Ly54Ly+4L2H4L2J4L2p4L2x4L6E4L6G4L6L4L6Q4L6V4L6X4L6X4L6Z4L6t4L6x4L634L654L654YKg4YOF4YOQ4YO24YSA4YSA4YSC4YSD4YSF4YSH4YSJ4YSJ4YSL4YSM4YSO4YSS4YS84YS84YS+4YS+4YWA4YWA4YWM4YWM4YWO4YWO4YWQ4YWQ4YWU4YWV4YWZ4YWZ4YWf4YWh4YWj4YWj4YWl4YWl4YWn4YWn4YWp4YWp4YWt4YWu4YWy4YWz4YW14YW14Yae4Yae4Yao4Yao4Yar4Yar4Yau4Yav4Ya34Ya44Ya64Ya64Ya84YeC4Yer4Yer4Yew4Yew4Ye54Ye54biA4bqb4bqg4bu54byA4byV4byY4byd4byg4b2F4b2I4b2N4b2Q4b2X4b2Z4b2Z4b2b4b2b4b2d4b2d4b2f4b294b6A4b604b624b684b6+4b6+4b+C4b+E4b+G4b+M4b+Q4b+T4b+W4b+b4b+g4b+s4b+y4b+04b+24b+84oOQ4oOc4oOh4oOh4oSm4oSm4oSq4oSr4oSu4oSu4oaA4oaC44CF44CF44CH44CH44Ch44Cv44Cx44C144GB44KU44KZ44Ka44Kd44Ke44Kh44O644O844O+44SF44Ss5LiA6b6l6rCA7Z6jIiksa28oZDUseXV0LHIpLGtvKCQ3LHl1dCxteShyKSkscj1uZXcgTmwoNCksWkQocixtZ2UpLGpjKHIsOTUsOTUpLGpjKHIsNTgsNTgpLGtvKGQ1LHh1dCxyKSxrbygkNyx4dXQsbXkocikpKSxuPXUoTmMoZT9kNTokNyx0KSwxMzYpLG59ZnVuY3Rpb24gSHhuKHQpe0lyKHQuYSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJhbnlTaW1wbGVUeXBlIl0pKSxJcih0LmIsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiYW55VHlwZSIsTmgsck9dKSksSXIodShBdChXdCh0LmIpLDApLDM0KSxZcixsdChjdChBZSwxKSxlZSwyLDYsW05oLGR1dCxjaSwiOm1peGVkIl0pKSxJcih1KEF0KFd0KHQuYiksMSksMzQpLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbTmgsZHV0LFY4dCxwdXQsY2ksIjoxIixpZ2UsImxheCJdKSksSXIodShBdChXdCh0LmIpLDIpLDM0KSxZcixsdChjdChBZSwxKSxlZSwyLDYsW05oLHRnZSxWOHQscHV0LGNpLCI6MiIsaWdlLCJsYXgiXSkpLElyKHQuYyxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJhbnlVUkkiLFJoLGUxXSkpLElyKHQuZCxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJiYXNlNjRCaW5hcnkiLFJoLGUxXSkpLElyKHQuZSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLGI2LFJoLGUxXSkpLElyKHQuZixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJib29sZWFuOk9iamVjdCIsQWEsYjZdKSksSXIodC5nLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksdFNdKSksSXIodC5pLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksImJ5dGU6T2JqZWN0IixBYSx0U10pKSxJcih0LmosWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiZGF0ZSIsUmgsZTFdKSksSXIodC5rLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksImRhdGVUaW1lIixSaCxlMV0pKSxJcih0Lm4sWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiZGVjaW1hbCIsUmgsZTFdKSksSXIodC5vLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksZVMsUmgsZTFdKSksSXIodC5wLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksImRvdWJsZTpPYmplY3QiLEFhLGVTXSkpLElyKHQucSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJkdXJhdGlvbiIsUmgsZTFdKSksSXIodC5zLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksIkVOVElUSUVTIixBYSxzZ2UsRzh0LCIxIl0pKSxJcih0LnIsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSxzZ2UsZ3V0LFU4dF0pKSxJcih0LnQsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSxVOHQsQWEsVUhdKSksSXIodC51LFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksblMsUmgsZTFdKSksSXIodC52LFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksImZsb2F0Ok9iamVjdCIsQWEsblNdKSksSXIodC53LFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksImdEYXkiLFJoLGUxXSkpLElyKHQuQixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJnTW9udGgiLFJoLGUxXSkpLElyKHQuQSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJnTW9udGhEYXkiLFJoLGUxXSkpLElyKHQuQyxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJnWWVhciIsUmgsZTFdKSksSXIodC5ELFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksImdZZWFyTW9udGgiLFJoLGUxXSkpLElyKHQuRixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJoZXhCaW5hcnkiLFJoLGUxXSkpLElyKHQuRyxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJJRCIsQWEsVUhdKSksSXIodC5ILFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksIklEUkVGIixBYSxVSF0pKSxJcih0LkosWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiSURSRUZTIixBYSxhZ2UsRzh0LCIxIl0pKSxJcih0LkksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSxhZ2UsZ3V0LCJJRFJFRiJdKSksSXIodC5LLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksclNdKSksSXIodC5NLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksVzh0XSkpLElyKHQuTCxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJpbnQ6T2JqZWN0IixBYSxyU10pKSxJcih0LlAsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwibGFuZ3VhZ2UiLEFhLGJ1dCx3dXQsb2dlXSkpLElyKHQuUSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLGlTXSkpLElyKHQuUixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJsb25nOk9iamVjdCIsQWEsaVNdKSksSXIodC5TLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksIk5hbWUiLEFhLGJ1dCx3dXQsWTh0XSkpLElyKHQuVCxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLFVILEFhLCJOYW1lIix3dXQsY2dlXSkpLElyKHQuVSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJuZWdhdGl2ZUludGVnZXIiLEFhLHVnZSxjTywiLTEiXSkpLElyKHQuVixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLEs4dCxBYSxidXQsd3V0LCJcXGMrIl0pKSxJcih0LlgsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiTk1UT0tFTlMiLEFhLGxnZSxHOHQsIjEiXSkpLElyKHQuVyxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLGxnZSxndXQsSzh0XSkpLElyKHQuWSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLFg4dCxBYSxXOHQsdU8sIjAiXSkpLElyKHQuWixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLHVnZSxBYSxXOHQsY08sIjAiXSkpLElyKHQuJCxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLGhnZSxBYSxWYXQsUmgsInJlcGxhY2UiXSkpLElyKHQuXyxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJOT1RBVElPTiIsUmgsZTFdKSksSXIodC5hYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJwb3NpdGl2ZUludGVnZXIiLEFhLFg4dCx1TywiMSJdKSksSXIodC5iYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25fLl90eXBlIixOaCwiZW1wdHkiXSkpLElyKHUoQXQoV3QodC5iYiksMCksMzQpLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbTmgscUgsY2ksImRhdGEiXSkpLElyKHUoQXQoV3QodC5iYiksMSksMzQpLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbTmgscUgsY2ksTTh0XSkpLElyKHQuY2IsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiUU5hbWUiLFJoLGUxXSkpLElyKHQuZGIsWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSxzU10pKSxJcih0LmViLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksInNob3J0Ok9iamVjdCIsQWEsc1NdKSksSXIodC5mYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJzaW1wbGVBbnlUeXBlIixOaCxpT10pKSxJcih1KEF0KFd0KHQuZmIpLDApLDM0KSxZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCI6MyIsTmgsaU9dKSksSXIodShBdChXdCh0LmZiKSwxKSwzNCksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtjaSwiOjQiLE5oLGlPXSkpLElyKHUoQXQoV3QodC5mYiksMiksMTgpLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksIjo1IixOaCxpT10pKSxJcih0LmdiLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksVmF0LFJoLCJwcmVzZXJ2ZSJdKSksSXIodC5oYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJ0aW1lIixSaCxlMV0pKSxJcih0LmliLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksYnV0LEFhLGhnZSxSaCxlMV0pKSxJcih0LmpiLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksZmdlLGNPLCIyNTUiLHVPLCIwIl0pKSxJcih0LmtiLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksInVuc2lnbmVkQnl0ZTpPYmplY3QiLEFhLGZnZV0pKSxJcih0LmxiLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksZGdlLGNPLCI0Mjk0OTY3Mjk1Iix1TywiMCJdKSksSXIodC5tYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCJ1bnNpZ25lZEludDpPYmplY3QiLEFhLGRnZV0pKSxJcih0Lm5iLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksInVuc2lnbmVkTG9uZyIsQWEsWDh0LGNPLGdnZSx1TywiMCJdKSksSXIodC5vYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLHBnZSxjTywiNjU1MzUiLHVPLCIwIl0pKSxJcih0LnBiLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbY2ksInVuc2lnbmVkU2hvcnQ6T2JqZWN0IixBYSxwZ2VdKSksSXIodC5xYixZcixsdChjdChBZSwxKSxlZSwyLDYsW2NpLCIiLE5oLHJPXSkpLElyKHUoQXQoV3QodC5xYiksMCksMzQpLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbTmgsZHV0LGNpLCI6bWl4ZWQiXSkpLElyKHUoQXQoV3QodC5xYiksMSksMTgpLFlyLGx0KGN0KEFlLDEpLGVlLDIsNixbTmgscUgsY2ksInhtbG5zOnByZWZpeCJdKSksSXIodShBdChXdCh0LnFiKSwyKSwxOCksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtOaCxxSCxjaSwieHNpOnNjaGVtYUxvY2F0aW9uIl0pKSxJcih1KEF0KFd0KHQucWIpLDMpLDM0KSxZcixsdChjdChBZSwxKSxlZSwyLDYsW05oLEhILGNpLCJjREFUQSIsVkgsc09dKSksSXIodShBdChXdCh0LnFiKSw0KSwzNCksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtOaCxISCxjaSwiY29tbWVudCIsVkgsc09dKSksSXIodShBdChXdCh0LnFiKSw1KSwxOCksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtOaCxISCxjaSxiZ2UsVkgsc09dKSksSXIodShBdChXdCh0LnFiKSw2KSwzNCksWXIsbHQoY3QoQWUsMSksZWUsMiw2LFtOaCxISCxjaSx0dXQsVkgsc09dKSl9ZnVuY3Rpb24gcXIodCl7cmV0dXJuIGhuKCJfVUlfRU1GRGlhZ25vc3RpY19tYXJrZXIiLHQpPyJFTUYgUHJvYmxlbSI6aG4oIl9VSV9DaXJjdWxhckNvbnRhaW5tZW50X2RpYWdub3N0aWMiLHQpPyJBbiBvYmplY3QgbWF5IG5vdCBjaXJjdWxhcmx5IGNvbnRhaW4gaXRzZWxmIjpobihaZGUsdCk/Ildyb25nIGNoYXJhY3Rlci4iOmhuKEpkZSx0KT8iSW52YWxpZCByZWZlcmVuY2UgbnVtYmVyLiI6aG4oT0gsdCk/IkEgY2hhcmFjdGVyIGlzIHJlcXVpcmVkIGFmdGVyIFxcLiI6aG4ob3V0LHQpPyInPycgaXMgbm90IGV4cGVjdGVkLiAgJyg/Oicgb3IgJyg/PScgb3IgJyg/IScgb3IgJyg/PCcgb3IgJyg/Iycgb3IgJyg/Pic/Ijpobih0MGUsdCk/IicoPzwnIG9yICcoPzwhJyBpcyBleHBlY3RlZC4iOmhuKGUwZSx0KT8iQSBjb21tZW50IGlzIG5vdCB0ZXJtaW5hdGVkLiI6aG4oSTIsdCk/IicpJyBpcyBleHBlY3RlZC4iOmhuKEQ4dCx0KT8iVW5leHBlY3RlZCBlbmQgb2YgdGhlIHBhdHRlcm4gaW4gYSBtb2RpZmllciBncm91cC4iOmhuKG4wZSx0KT8iJzonIGlzIGV4cGVjdGVkLiI6aG4ocjBlLHQpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNvbmRpdGlvbmFsIGdyb3VwLiI6aG4oaTBlLHQpPyJBIGJhY2sgcmVmZXJlbmNlIG9yIGFuIGFuY2hvciBvciBhIGxvb2thaGVhZCBvciBhIGxvb2stYmVoaW5kIGlzIGV4cGVjdGVkIGluIGEgY29uZGl0aW9uYWwgcGF0dGVybi4iOmhuKHMwZSx0KT8iVGhlcmUgYXJlIG1vcmUgdGhhbiB0aHJlZSBjaG9pY2VzIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAuIjpobihhMGUsdCk/IkEgY2hhcmFjdGVyIGluIFUrMDA0MC1VKzAwNWYgbXVzdCBmb2xsb3cgXFxjLiI6aG4obzBlLHQpPyJBICd7JyBpcyByZXF1aXJlZCBiZWZvcmUgYSBjaGFyYWN0ZXIgY2F0ZWdvcnkuIjpobihjMGUsdCk/IkEgcHJvcGVydHkgbmFtZSBpcyBub3QgY2xvc2VkIGJ5ICd9Jy4iOmhuKEk4dCx0KT8iVW5leHBlY3RlZCBtZXRhIGNoYXJhY3Rlci4iOmhuKGN1dCx0KT8iVW5rbm93biBwcm9wZXJ0eS4iOmhuKE84dCx0KT8iQSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3MgbXVzdCBiZSBjbG9zZWQgYnkgJzpdJy4iOmhuKFBILHQpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNoYXJhY3RlciBjbGFzcy4iOmhuKHUwZSx0KT8iVW5rbm93biBuYW1lIGZvciBhIFBPU0lYIGNoYXJhY3RlciBjbGFzcy4iOmhuKCJwYXJzZXIuY2MuNCIsdCk/IictJyBpcyBpbnZhbGlkIGhlcmUuIjpobihsMGUsdCk/IiddJyBpcyBleHBlY3RlZC4iOmhuKFA4dCx0KT8iJ1snIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxbJy4iOmhuKEY4dCx0KT8iJ10nIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxdJy4iOmhuKHV1dCx0KT8iJy0nIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIHJhbmdlLiBXcml0ZSAnXFwtJy4iOmhuKGgwZSx0KT8iJ1snIGlzIGV4cGVjdGVkLiI6aG4oZjBlLHQpPyInKScgb3IgJy1bJyBvciAnK1snIG9yICcmWycgaXMgZXhwZWN0ZWQuIjpobihkMGUsdCk/IlRoZSByYW5nZSBlbmQgY29kZSBwb2ludCBpcyBsZXNzIHRoYW4gdGhlIHN0YXJ0IGNvZGUgcG9pbnQuIjpobihRZyx0KT8iSW52YWxpZCBVbmljb2RlIGhleCBub3RhdGlvbi4iOmhuKGcwZSx0KT8iT3ZlcmZsb3cgaW4gYSBoZXggbm90YXRpb24uIjpobihwMGUsdCk/IidcXHh7JyBtdXN0IGJlIGNsb3NlZCBieSAnfScuIjpobihiMGUsdCk/IkludmFsaWQgVW5pY29kZSBjb2RlIHBvaW50LiI6aG4odzBlLHQpPyJBbiBhbmNob3IgbXVzdCBub3QgYmUgaGVyZS4iOmhuKGJoLHQpPyJUaGlzIGV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBvcHRpb24gc2V0dGluZy4iOmhuKHYwZSx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IGlzIGV4cGVjdGVkLiI6aG4obTBlLHQpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEludmFsaWQgcXVhbnRpdHkgb3IgYSAnfScgaXMgbWlzc2luZy4iOmhuKHkwZSx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IG9yICd9JyBpcyBleHBlY3RlZC4iOmhuKHgwZSx0KT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIG1pbiBxdWFudGl0eSBtdXN0IGJlIDw9IGEgbWF4IHF1YW50aXR5LiI6aG4oTjh0LHQpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEEgcXVhbnRpdHkgdmFsdWUgb3ZlcmZsb3cuIjpobigiX1VJX1BhY2thZ2VSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IkVjb3JlIFBhY2thZ2UgUmVnaXN0cnkgZm9yIEdlbmVyYXRlZCBQYWNrYWdlcyI6aG4oIl9VSV9EeW5hbWljUGFja2FnZVJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBmb3IgRHluYW1pYyBQYWNrYWdlcyI6aG4oIl9VSV9GYWN0b3J5UmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJFY29yZSBGYWN0b3J5IE92ZXJyaWRlIFJlZ2lzdHJ5IjpobigiX1VJX1VSSUV4dGVuc2lvblBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iVVJJIEV4dGVuc2lvbiBQYXJzZXIgUmVnaXN0cnkiOmhuKCJfVUlfVVJJUHJvdG9jb2xQYXJzZXJSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IlVSSSBQcm90b2NvbCBQYXJzZXIgUmVnaXN0cnkiOmhuKCJfVUlfVVJJQ29udGVudFBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iVVJJIENvbnRlbnQgUGFyc2VyIFJlZ2lzdHJ5IjpobigiX1VJX0NvbnRlbnRIYW5kbGVyUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJDb250ZW50IEhhbmRsZXIgUmVnaXN0cnkiOmhuKCJfVUlfVVJJTWFwcGluZ1JlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50Iix0KT8iVVJJIENvbnZlcnRlciBNYXBwaW5nIFJlZ2lzdHJ5IjpobigiX1VJX1BhY2thZ2VSZWdpc3RyeUltcGxlbWVudGF0aW9uX2V4dGVuc2lvbnBvaW50Iix0KT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBJbXBsZW1lbnRhdGlvbiI6aG4oIl9VSV9WYWxpZGF0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/IlZhbGlkYXRpb24gRGVsZWdhdGUgUmVnaXN0cnkiOmhuKCJfVUlfU2V0dGluZ0RlbGVnYXRlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLHQpPyJGZWF0dXJlIFNldHRpbmcgRGVsZWdhdGUgRmFjdG9yeSBSZWdpc3RyeSI6aG4oIl9VSV9JbnZvY2F0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsdCk/Ik9wZXJhdGlvbiBJbnZvY2F0aW9uIERlbGVnYXRlIEZhY3RvcnkgUmVnaXN0cnkiOmhuKCJfVUlfRUNsYXNzSW50ZXJmYWNlTm90QWJzdHJhY3RfZGlhZ25vc3RpYyIsdCk/IkEgY2xhc3MgdGhhdCBpcyBhbiBpbnRlcmZhY2UgbXVzdCBhbHNvIGJlIGFic3RyYWN0IjpobigiX1VJX0VDbGFzc05vQ2lyY3VsYXJTdXBlclR5cGVzX2RpYWdub3N0aWMiLHQpPyJBIGNsYXNzIG1heSBub3QgYmUgYSBzdXBlciB0eXBlIG9mIGl0c2VsZiI6aG4oIl9VSV9FQ2xhc3NOb3RXZWxsRm9ybWVkTWFwRW50cnlOb0luc3RhbmNlQ2xhc3NOYW1lX2RpYWdub3N0aWMiLHQpPyJBIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBhIG1hcCBlbnRyeSBjbGFzcyBtdXN0IGhhdmUgaW5zdGFuY2UgY2xhc3MgbmFtZSAnamF2YS51dGlsLk1hcCRFbnRyeSciOmhuKCJfVUlfRVJlZmVyZW5jZU9wcG9zaXRlT2ZPcHBvc2l0ZUluY29uc2lzdGVudF9kaWFnbm9zdGljIix0KT8iVGhlIG9wcG9zaXRlIG9mIHRoZSBvcHBvc2l0ZSBtYXkgbm90IGJlIGEgcmVmZXJlbmNlIGRpZmZlcmVudCBmcm9tIHRoaXMgb25lIjpobigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZU5vdEZlYXR1cmVPZlR5cGVfZGlhZ25vc3RpYyIsdCk/IlRoZSBvcHBvc2l0ZSBtdXN0IGJlIGEgZmVhdHVyZSBvZiB0aGUgcmVmZXJlbmNlJ3MgdHlwZSI6aG4oIl9VSV9FUmVmZXJlbmNlVHJhbnNpZW50T3Bwb3NpdGVOb3RUcmFuc2llbnRfZGlhZ25vc3RpYyIsdCk/IlRoZSBvcHBvc2l0ZSBvZiBhIHRyYW5zaWVudCByZWZlcmVuY2UgbXVzdCBiZSB0cmFuc2llbnQgaWYgaXQgaXMgcHJveHkgcmVzb2x2aW5nIjpobigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZUJvdGhDb250YWlubWVudF9kaWFnbm9zdGljIix0KT8iVGhlIG9wcG9zaXRlIG9mIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIG11c3Qgbm90IGJlIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIjpobigiX1VJX0VSZWZlcmVuY2VDb25zaXN0ZW50VW5pcXVlX2RpYWdub3N0aWMiLHQpPyJBIGNvbnRhaW5tZW50IG9yIGJpZGlyZWN0aW9uYWwgcmVmZXJlbmNlIG11c3QgYmUgdW5pcXVlIGlmIGl0cyB1cHBlciBib3VuZCBpcyBkaWZmZXJlbnQgZnJvbSAxIjpobigiX1VJX0VUeXBlZEVsZW1lbnROb1R5cGVfZGlhZ25vc3RpYyIsdCk/IlRoZSB0eXBlZCBlbGVtZW50IG11c3QgaGF2ZSBhIHR5cGUiOmhuKCJfVUlfRUF0dHJpYnV0ZU5vRGF0YVR5cGVfZGlhZ25vc3RpYyIsdCk/IlRoZSBnZW5lcmljIGF0dHJpYnV0ZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgY2xhc3MiOmhuKCJfVUlfRVJlZmVyZW5jZU5vQ2xhc3NfZGlhZ25vc3RpYyIsdCk/IlRoZSBnZW5lcmljIHJlZmVyZW5jZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgZGF0YSB0eXBlIjpobigiX1VJX0VHZW5lcmljVHlwZU5vVHlwZVBhcmFtZXRlckFuZENsYXNzaWZpZXJfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIGNhbid0IHJlZmVyIHRvIGJvdGggYSB0eXBlIHBhcmFtZXRlciBhbmQgYSBjbGFzc2lmaWVyIjpobigiX1VJX0VHZW5lcmljVHlwZU5vQ2xhc3NfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyBzdXBlciB0eXBlIG11c3QgcmVmZXIgdG8gYSBjbGFzcyI6aG4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIGluIHRoaXMgY29udGV4dCBtdXN0IHJlZmVyIHRvIGEgY2xhc3NpZmllciBvciBhIHR5cGUgcGFyYW1ldGVyIjpobigiX1VJX0VHZW5lcmljVHlwZUJvdW5kc09ubHlGb3JUeXBlQXJndW1lbnRfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGJvdW5kcyBvbmx5IHdoZW4gdXNlZCBhcyBhIHR5cGUgYXJndW1lbnQiOmhuKCJfVUlfRUdlbmVyaWNUeXBlTm9VcHBlckFuZExvd2VyQm91bmRfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG11c3Qgbm90IGhhdmUgYm90aCBhIGxvd2VyIGFuZCBhbiB1cHBlciBib3VuZCI6aG4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJBbmRCb3VuZF9kaWFnbm9zdGljIix0KT8iQSBnZW5lcmljIHR5cGUgd2l0aCBib3VuZHMgbXVzdCBub3QgYWxzbyByZWZlciB0byBhIHR5cGUgcGFyYW1ldGVyIG9yIGNsYXNzaWZpZXIiOmhuKCJfVUlfRUdlbmVyaWNUeXBlTm9Bcmd1bWVudHNfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGFyZ3VtZW50cyBvbmx5IGlmIGl0IHJlZmVycyB0byBhIGNsYXNzaWZpZXIiOmhuKCJfVUlfRUdlbmVyaWNUeXBlT3V0T2ZTY29wZVR5cGVQYXJhbWV0ZXJfZGlhZ25vc3RpYyIsdCk/IkEgZ2VuZXJpYyB0eXBlIG1heSBvbmx5IHJlZmVyIHRvIGEgdHlwZSBwYXJhbWV0ZXIgdGhhdCBpcyBpbiBzY29wZSI6dH1mdW5jdGlvbiBWeG4odCl7dmFyIGUsbixyLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO3Qucnx8KHQucj0hMCxRYyh0LCJncmFwaCIpLGJ6KHQsImdyYXBoIiksd3oodCxaRSksRkQodC5vLCJUIiksRHIoQW8odC5hKSx0LnApLERyKEFvKHQuZiksdC5hKSxEcihBbyh0Lm4pLHQuZiksRHIoQW8odC5nKSx0Lm4pLERyKEFvKHQuYyksdC5uKSxEcihBbyh0LmkpLHQuYyksRHIoQW8odC5qKSx0LmMpLERyKEFvKHQuZCksdC5mKSxEcihBbyh0LmUpLHQuYSkscmModC5wLGE2bixRZmUsITAsITAsITEpLEc9YTQodC5wLHQucCwic2V0UHJvcGVydHkiKSxLPWFyZShHKSxrPU4wKHQubyksQz0obj0ocj1uZXcgeHcsciksbiksRHIoKCFrLmQmJihrLmQ9bmV3IEFzKGhvLGssMSkpLGsuZCksQyksTT1kcnQoSyksazR0KEMsTSksb3EoRyxrLHg4dCksaz1kcnQoSyksb3EoRyxrLFpfKSxHPWE0KHQucCxudWxsLCJnZXRQcm9wZXJ0eSIpLEs9YXJlKEcpLGs9TjAodC5vKSxDPWRydChLKSxEcigoIWsuZCYmKGsuZD1uZXcgQXMoaG8saywxKSksay5kKSxDKSxvcShHLGsseDh0KSxrPWRydChLKSxIPUYxKEcsayxudWxsKSxIJiZILkZpKCksRz1hNCh0LnAsdC53Yi5lLCJoYXNQcm9wZXJ0eSIpLGs9TjAodC5vKSxDPShzPShvPW5ldyB4dyxvKSxzKSxEcigoIWsuZCYmKGsuZD1uZXcgQXMoaG8saywxKSksay5kKSxDKSxvcShHLGsseDh0KSxHPWE0KHQucCx0LnAsImNvcHlQcm9wZXJ0aWVzIiksX28oRyx0LnAsWGN0KSxHPWE0KHQucCxudWxsLCJnZXRBbGxQcm9wZXJ0aWVzIiksaz1OMCh0LndiLlApLEM9TjAodC5vKSxEcigoIWsuZCYmKGsuZD1uZXcgQXMoaG8saywxKSksay5kKSxDKSxNPShoPShkPW5ldyB4dyxkKSxoKSxEcigoIUMuZCYmKEMuZD1uZXcgQXMoaG8sQywxKSksQy5kKSxNKSxDPU4wKHQud2IuTSksRHIoKCFrLmQmJihrLmQ9bmV3IEFzKGhvLGssMSkpLGsuZCksQyksaj1GMShHLGssbnVsbCksaiYmai5GaSgpLHJjKHQuYSxqNyxBZGUsITAsITEsITApLE5pKHUoQXQoV3QodC5hKSwwKSwxOCksdC5rLG51bGwsJGRlLDAsLTEsajcsITEsITEsITAsITAsITEsITEsITEpLHJjKHQuZixsUCxNZGUsITAsITEsITApLE5pKHUoQXQoV3QodC5mKSwwKSwxOCksdC5nLHUoQXQoV3QodC5nKSwwKSwxOCksImxhYmVscyIsMCwtMSxsUCwhMSwhMSwhMCwhMCwhMSwhMSwhMSksaHModShBdChXdCh0LmYpLDEpLDM0KSx0LndiLl8semRlLG51bGwsMCwxLGxQLCExLCExLCEwLCExLCEwLCExKSxyYyh0Lm4saFAsIkVsa1NoYXBlIiwhMCwhMSwhMCksaHModShBdChXdCh0Lm4pLDApLDM0KSx0LndiLnQsUWN0LCRFLDEsMSxoUCwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0Lm4pLDEpLDM0KSx0LndiLnQsWmN0LCRFLDEsMSxoUCwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0Lm4pLDIpLDM0KSx0LndiLnQsIngiLCRFLDEsMSxoUCwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0Lm4pLDMpLDM0KSx0LndiLnQsInkiLCRFLDEsMSxoUCwhMSwhMSwhMCwhMSwhMCwhMSksRz1hNCh0Lm4sbnVsbCwic2V0RGltZW5zaW9ucyIpLF9vKEcsdC53Yi50LFpjdCksX28oRyx0LndiLnQsUWN0KSxHPWE0KHQubixudWxsLCJzZXRMb2NhdGlvbiIpLF9vKEcsdC53Yi50LCJ4IiksX28oRyx0LndiLnQsInkiKSxyYyh0LmcscW8sdjh0LCExLCExLCEwKSxOaSh1KEF0KFd0KHQuZyksMCksMTgpLHQuZix1KEF0KFd0KHQuZiksMCksMTgpLEpjdCwwLDEscW8sITEsITEsITAsITEsITEsITEsITEpLGhzKHUoQXQoV3QodC5nKSwxKSwzNCksdC53Yi5fLHR1dCwiIiwwLDEscW8sITEsITEsITAsITEsITAsITEpLHJjKHQuYyxicixEZGUsITAsITEsITApLE5pKHUoQXQoV3QodC5jKSwwKSwxOCksdC5kLHUoQXQoV3QodC5kKSwxKSwxOCksIm91dGdvaW5nRWRnZXMiLDAsLTEsYnIsITEsITEsITAsITEsITAsITEsITEpLE5pKHUoQXQoV3QodC5jKSwxKSwxOCksdC5kLHUoQXQoV3QodC5kKSwyKSwxOCksImluY29taW5nRWRnZXMiLDAsLTEsYnIsITEsITEsITAsITEsITAsITEsITEpLHJjKHQuaSxycyxtOHQsITEsITEsITApLE5pKHUoQXQoV3QodC5pKSwwKSwxOCksdC5qLHUoQXQoV3QodC5qKSwwKSwxOCksInBvcnRzIiwwLC0xLHJzLCExLCExLCEwLCEwLCExLCExLCExKSxOaSh1KEF0KFd0KHQuaSksMSksMTgpLHQuaSx1KEF0KFd0KHQuaSksMiksMTgpLGV1dCwwLC0xLHJzLCExLCExLCEwLCEwLCExLCExLCExKSxOaSh1KEF0KFd0KHQuaSksMiksMTgpLHQuaSx1KEF0KFd0KHQuaSksMSksMTgpLEpjdCwwLDEscnMsITEsITEsITAsITEsITEsITEsITEpLE5pKHUoQXQoV3QodC5pKSwzKSwxOCksdC5kLHUoQXQoV3QodC5kKSwwKSwxOCksImNvbnRhaW5lZEVkZ2VzIiwwLC0xLHJzLCExLCExLCEwLCEwLCExLCExLCExKSxocyh1KEF0KFd0KHQuaSksNCksMzQpLHQud2IuZSxxZGUsbnVsbCwwLDEscnMsITAsITAsITEsITEsITAsITApLHJjKHQuaixnbCx5OHQsITEsITEsITApLE5pKHUoQXQoV3QodC5qKSwwKSwxOCksdC5pLHUoQXQoV3QodC5pKSwwKSwxOCksSmN0LDAsMSxnbCwhMSwhMSwhMCwhMSwhMSwhMSwhMSkscmModC5kLFlzLHc4dCwhMSwhMSwhMCksTmkodShBdChXdCh0LmQpLDApLDE4KSx0LmksdShBdChXdCh0LmkpLDMpLDE4KSwiY29udGFpbmluZ05vZGUiLDAsMSxZcywhMSwhMSwhMCwhMSwhMSwhMSwhMSksTmkodShBdChXdCh0LmQpLDEpLDE4KSx0LmMsdShBdChXdCh0LmMpLDApLDE4KSxrOHQsMCwtMSxZcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksTmkodShBdChXdCh0LmQpLDIpLDE4KSx0LmMsdShBdChXdCh0LmMpLDEpLDE4KSxudXQsMCwtMSxZcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksTmkodShBdChXdCh0LmQpLDMpLDE4KSx0LmUsdShBdChXdCh0LmUpLDUpLDE4KSxFOHQsMCwtMSxZcywhMSwhMSwhMCwhMCwhMSwhMSwhMSksaHModShBdChXdCh0LmQpLDQpLDM0KSx0LndiLmUsImh5cGVyZWRnZSIsbnVsbCwwLDEsWXMsITAsITAsITEsITEsITAsITApLGhzKHUoQXQoV3QodC5kKSw1KSwzNCksdC53Yi5lLHFkZSxudWxsLDAsMSxZcywhMCwhMCwhMSwhMSwhMCwhMCksaHModShBdChXdCh0LmQpLDYpLDM0KSx0LndiLmUsInNlbGZsb29wIixudWxsLDAsMSxZcywhMCwhMCwhMSwhMSwhMCwhMCksaHModShBdChXdCh0LmQpLDcpLDM0KSx0LndiLmUsImNvbm5lY3RlZCIsbnVsbCwwLDEsWXMsITAsITAsITEsITEsITAsITApLHJjKHQuYixHaCxMZGUsITEsITEsITApLGhzKHUoQXQoV3QodC5iKSwwKSwzNCksdC53Yi50LCJ4IiwkRSwxLDEsR2gsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5iKSwxKSwzNCksdC53Yi50LCJ5IiwkRSwxLDEsR2gsITEsITEsITAsITEsITAsITEpLEc9YTQodC5iLG51bGwsInNldCIpLF9vKEcsdC53Yi50LCJ4IiksX28oRyx0LndiLnQsInkiKSxyYyh0LmUsSmksSWRlLCExLCExLCEwKSxocyh1KEF0KFd0KHQuZSksMCksMzQpLHQud2IudCwic3RhcnRYIixudWxsLDAsMSxKaSwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LmUpLDEpLDM0KSx0LndiLnQsInN0YXJ0WSIsbnVsbCwwLDEsSmksITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5lKSwyKSwzNCksdC53Yi50LCJlbmRYIixudWxsLDAsMSxKaSwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LmUpLDMpLDM0KSx0LndiLnQsImVuZFkiLG51bGwsMCwxLEppLCExLCExLCEwLCExLCEwLCExKSxOaSh1KEF0KFd0KHQuZSksNCksMTgpLHQuYixudWxsLExILDAsLTEsSmksITEsITEsITAsITAsITEsITEsITEpLE5pKHUoQXQoV3QodC5lKSw1KSwxOCksdC5kLHUoQXQoV3QodC5kKSwzKSwxOCksSmN0LDAsMSxKaSwhMSwhMSwhMCwhMSwhMSwhMSwhMSksTmkodShBdChXdCh0LmUpLDYpLDE4KSx0LmMsbnVsbCxUOHQsMCwxLEppLCExLCExLCEwLCExLCEwLCExLCExKSxOaSh1KEF0KFd0KHQuZSksNyksMTgpLHQuYyxudWxsLEM4dCwwLDEsSmksITEsITEsITAsITEsITAsITEsITEpLE5pKHUoQXQoV3QodC5lKSw4KSwxOCksdC5lLHUoQXQoV3QodC5lKSw5KSwxOCksXzh0LDAsLTEsSmksITEsITEsITAsITEsITAsITEsITEpLE5pKHUoQXQoV3QodC5lKSw5KSwxOCksdC5lLHUoQXQoV3QodC5lKSw4KSwxOCksUzh0LDAsLTEsSmksITEsITEsITAsITEsITAsITEsITEpLGhzKHUoQXQoV3QodC5lKSwxMCksMzQpLHQud2IuXyx6ZGUsbnVsbCwwLDEsSmksITEsITEsITAsITEsITAsITEpLEc9YTQodC5lLG51bGwsInNldFN0YXJ0TG9jYXRpb24iKSxfbyhHLHQud2IudCwieCIpLF9vKEcsdC53Yi50LCJ5IiksRz1hNCh0LmUsbnVsbCwic2V0RW5kTG9jYXRpb24iKSxfbyhHLHQud2IudCwieCIpLF9vKEcsdC53Yi50LCJ5IikscmModC5rLFAyLCJFbGtQcm9wZXJ0eVRvVmFsdWVNYXBFbnRyeSIsITEsITEsITEpLGs9TjAodC5vKSxDPSh2PShlPW5ldyB4dyxlKSx2KSxEcigoIWsuZCYmKGsuZD1uZXcgQXMoaG8saywxKSksay5kKSxDKSxhY2UodShBdChXdCh0LmspLDApLDM0KSxrLCJrZXkiLFAyLCExLCExLCEwLCExKSxocyh1KEF0KFd0KHQuayksMSksMzQpLHQucyxaXyxudWxsLDAsMSxQMiwhMSwhMSwhMCwhMSwhMCwhMSksYWkodC5vLGNmdCwiSVByb3BlcnR5IiwhMCksYWkodC5zLFFuLCJQcm9wZXJ0eVZhbHVlIiwhMCksS3l0KHQsWkUpKX1mdW5jdGlvbiBzZmUoKXtzZmU9Wix3dD1OdChHdSxONCwyNSxLYSwxNSwxKSx3dFs5XT0zNSx3dFsxMF09MTksd3RbMTNdPTE5LHd0WzMyXT01MSx3dFszM109NDksd3RbMzRdPTMzLGp0KHd0LDM1LDM4LDQ5KSx3dFszOF09MSxqdCh3dCwzOSw0NSw0OSksanQod3QsNDUsNDcsLTcxKSx3dFs0N109NDksanQod3QsNDgsNTgsLTcxKSx3dFs1OF09NjEsd3RbNTldPTQ5LHd0WzYwXT0xLHd0WzYxXT00OSx3dFs2Ml09MzMsanQod3QsNjMsNjUsNDkpLGp0KHd0LDY1LDkxLC0zKSxqdCh3dCw5MSw5MywzMyksd3RbOTNdPTEsd3RbOTRdPTMzLHd0Wzk1XT0tMyx3dFs5Nl09MzMsanQod3QsOTcsMTIzLC0zKSxqdCh3dCwxMjMsMTgzLDMzKSx3dFsxODNdPS04NyxqdCh3dCwxODQsMTkyLDMzKSxqdCh3dCwxOTIsMjE1LC0xOSksd3RbMjE1XT0zMyxqdCh3dCwyMTYsMjQ3LC0xOSksd3RbMjQ3XT0zMyxqdCh3dCwyNDgsMzA2LC0xOSksanQod3QsMzA2LDMwOCwzMyksanQod3QsMzA4LDMxOSwtMTkpLGp0KHd0LDMxOSwzMjEsMzMpLGp0KHd0LDMyMSwzMjksLTE5KSx3dFszMjldPTMzLGp0KHd0LDMzMCwzODMsLTE5KSx3dFszODNdPTMzLGp0KHd0LDM4NCw0NTIsLTE5KSxqdCh3dCw0NTIsNDYxLDMzKSxqdCh3dCw0NjEsNDk3LC0xOSksanQod3QsNDk3LDUwMCwzMyksanQod3QsNTAwLDUwMiwtMTkpLGp0KHd0LDUwMiw1MDYsMzMpLGp0KHd0LDUwNiw1MzYsLTE5KSxqdCh3dCw1MzYsNTkyLDMzKSxqdCh3dCw1OTIsNjgxLC0xOSksanQod3QsNjgxLDY5OSwzMyksanQod3QsNjk5LDcwNiwtMTkpLGp0KHd0LDcwNiw3MjAsMzMpLGp0KHd0LDcyMCw3MjIsLTg3KSxqdCh3dCw3MjIsNzY4LDMzKSxqdCh3dCw3NjgsODM4LC04NyksanQod3QsODM4LDg2NCwzMyksanQod3QsODY0LDg2NiwtODcpLGp0KHd0LDg2Niw5MDIsMzMpLHd0WzkwMl09LTE5LHd0WzkwM109LTg3LGp0KHd0LDkwNCw5MDcsLTE5KSx3dFs5MDddPTMzLHd0WzkwOF09LTE5LHd0WzkwOV09MzMsanQod3QsOTEwLDkzMCwtMTkpLHd0WzkzMF09MzMsanQod3QsOTMxLDk3NSwtMTkpLHd0Wzk3NV09MzMsanQod3QsOTc2LDk4MywtMTkpLGp0KHd0LDk4Myw5ODYsMzMpLHd0Wzk4Nl09LTE5LHd0Wzk4N109MzMsd3RbOTg4XT0tMTksd3RbOTg5XT0zMyx3dFs5OTBdPS0xOSx3dFs5OTFdPTMzLHd0Wzk5Ml09LTE5LHd0Wzk5M109MzMsanQod3QsOTk0LDEwMTIsLTE5KSxqdCh3dCwxMDEyLDEwMjUsMzMpLGp0KHd0LDEwMjUsMTAzNywtMTkpLHd0WzEwMzddPTMzLGp0KHd0LDEwMzgsMTEwNCwtMTkpLHd0WzExMDRdPTMzLGp0KHd0LDExMDUsMTExNywtMTkpLHd0WzExMTddPTMzLGp0KHd0LDExMTgsMTE1NCwtMTkpLHd0WzExNTRdPTMzLGp0KHd0LDExNTUsMTE1OSwtODcpLGp0KHd0LDExNTksMTE2OCwzMyksanQod3QsMTE2OCwxMjIxLC0xOSksanQod3QsMTIyMSwxMjIzLDMzKSxqdCh3dCwxMjIzLDEyMjUsLTE5KSxqdCh3dCwxMjI1LDEyMjcsMzMpLGp0KHd0LDEyMjcsMTIyOSwtMTkpLGp0KHd0LDEyMjksMTIzMiwzMyksanQod3QsMTIzMiwxMjYwLC0xOSksanQod3QsMTI2MCwxMjYyLDMzKSxqdCh3dCwxMjYyLDEyNzAsLTE5KSxqdCh3dCwxMjcwLDEyNzIsMzMpLGp0KHd0LDEyNzIsMTI3NCwtMTkpLGp0KHd0LDEyNzQsMTMyOSwzMyksanQod3QsMTMyOSwxMzY3LC0xOSksanQod3QsMTM2NywxMzY5LDMzKSx3dFsxMzY5XT0tMTksanQod3QsMTM3MCwxMzc3LDMzKSxqdCh3dCwxMzc3LDE0MTUsLTE5KSxqdCh3dCwxNDE1LDE0MjUsMzMpLGp0KHd0LDE0MjUsMTQ0MiwtODcpLHd0WzE0NDJdPTMzLGp0KHd0LDE0NDMsMTQ2NiwtODcpLHd0WzE0NjZdPTMzLGp0KHd0LDE0NjcsMTQ3MCwtODcpLHd0WzE0NzBdPTMzLHd0WzE0NzFdPS04Nyx3dFsxNDcyXT0zMyxqdCh3dCwxNDczLDE0NzUsLTg3KSx3dFsxNDc1XT0zMyx3dFsxNDc2XT0tODcsanQod3QsMTQ3NywxNDg4LDMzKSxqdCh3dCwxNDg4LDE1MTUsLTE5KSxqdCh3dCwxNTE1LDE1MjAsMzMpLGp0KHd0LDE1MjAsMTUyMywtMTkpLGp0KHd0LDE1MjMsMTU2OSwzMyksanQod3QsMTU2OSwxNTk1LC0xOSksanQod3QsMTU5NSwxNjAwLDMzKSx3dFsxNjAwXT0tODcsanQod3QsMTYwMSwxNjExLC0xOSksanQod3QsMTYxMSwxNjE5LC04NyksanQod3QsMTYxOSwxNjMyLDMzKSxqdCh3dCwxNjMyLDE2NDIsLTg3KSxqdCh3dCwxNjQyLDE2NDgsMzMpLHd0WzE2NDhdPS04NyxqdCh3dCwxNjQ5LDE3MjAsLTE5KSxqdCh3dCwxNzIwLDE3MjIsMzMpLGp0KHd0LDE3MjIsMTcyNywtMTkpLHd0WzE3MjddPTMzLGp0KHd0LDE3MjgsMTc0MywtMTkpLHd0WzE3NDNdPTMzLGp0KHd0LDE3NDQsMTc0OCwtMTkpLHd0WzE3NDhdPTMzLHd0WzE3NDldPS0xOSxqdCh3dCwxNzUwLDE3NjUsLTg3KSxqdCh3dCwxNzY1LDE3NjcsLTE5KSxqdCh3dCwxNzY3LDE3NjksLTg3KSx3dFsxNzY5XT0zMyxqdCh3dCwxNzcwLDE3NzQsLTg3KSxqdCh3dCwxNzc0LDE3NzYsMzMpLGp0KHd0LDE3NzYsMTc4NiwtODcpLGp0KHd0LDE3ODYsMjMwNSwzMyksanQod3QsMjMwNSwyMzA4LC04Nyksd3RbMjMwOF09MzMsanQod3QsMjMwOSwyMzYyLC0xOSksanQod3QsMjM2MiwyMzY0LDMzKSx3dFsyMzY0XT0tODcsd3RbMjM2NV09LTE5LGp0KHd0LDIzNjYsMjM4MiwtODcpLGp0KHd0LDIzODIsMjM4NSwzMyksanQod3QsMjM4NSwyMzg5LC04NyksanQod3QsMjM4OSwyMzkyLDMzKSxqdCh3dCwyMzkyLDI0MDIsLTE5KSxqdCh3dCwyNDAyLDI0MDQsLTg3KSxqdCh3dCwyNDA0LDI0MDYsMzMpLGp0KHd0LDI0MDYsMjQxNiwtODcpLGp0KHd0LDI0MTYsMjQzMywzMyksanQod3QsMjQzMywyNDM2LC04Nyksd3RbMjQzNl09MzMsanQod3QsMjQzNywyNDQ1LC0xOSksanQod3QsMjQ0NSwyNDQ3LDMzKSxqdCh3dCwyNDQ3LDI0NDksLTE5KSxqdCh3dCwyNDQ5LDI0NTEsMzMpLGp0KHd0LDI0NTEsMjQ3MywtMTkpLHd0WzI0NzNdPTMzLGp0KHd0LDI0NzQsMjQ4MSwtMTkpLHd0WzI0ODFdPTMzLHd0WzI0ODJdPS0xOSxqdCh3dCwyNDgzLDI0ODYsMzMpLGp0KHd0LDI0ODYsMjQ5MCwtMTkpLGp0KHd0LDI0OTAsMjQ5MiwzMyksd3RbMjQ5Ml09LTg3LHd0WzI0OTNdPTMzLGp0KHd0LDI0OTQsMjUwMSwtODcpLGp0KHd0LDI1MDEsMjUwMywzMyksanQod3QsMjUwMywyNTA1LC04NyksanQod3QsMjUwNSwyNTA3LDMzKSxqdCh3dCwyNTA3LDI1MTAsLTg3KSxqdCh3dCwyNTEwLDI1MTksMzMpLHd0WzI1MTldPS04NyxqdCh3dCwyNTIwLDI1MjQsMzMpLGp0KHd0LDI1MjQsMjUyNiwtMTkpLHd0WzI1MjZdPTMzLGp0KHd0LDI1MjcsMjUzMCwtMTkpLGp0KHd0LDI1MzAsMjUzMiwtODcpLGp0KHd0LDI1MzIsMjUzNCwzMyksanQod3QsMjUzNCwyNTQ0LC04NyksanQod3QsMjU0NCwyNTQ2LC0xOSksanQod3QsMjU0NiwyNTYyLDMzKSx3dFsyNTYyXT0tODcsanQod3QsMjU2MywyNTY1LDMzKSxqdCh3dCwyNTY1LDI1NzEsLTE5KSxqdCh3dCwyNTcxLDI1NzUsMzMpLGp0KHd0LDI1NzUsMjU3NywtMTkpLGp0KHd0LDI1NzcsMjU3OSwzMyksanQod3QsMjU3OSwyNjAxLC0xOSksd3RbMjYwMV09MzMsanQod3QsMjYwMiwyNjA5LC0xOSksd3RbMjYwOV09MzMsanQod3QsMjYxMCwyNjEyLC0xOSksd3RbMjYxMl09MzMsanQod3QsMjYxMywyNjE1LC0xOSksd3RbMjYxNV09MzMsanQod3QsMjYxNiwyNjE4LC0xOSksanQod3QsMjYxOCwyNjIwLDMzKSx3dFsyNjIwXT0tODcsd3RbMjYyMV09MzMsanQod3QsMjYyMiwyNjI3LC04NyksanQod3QsMjYyNywyNjMxLDMzKSxqdCh3dCwyNjMxLDI2MzMsLTg3KSxqdCh3dCwyNjMzLDI2MzUsMzMpLGp0KHd0LDI2MzUsMjYzOCwtODcpLGp0KHd0LDI2MzgsMjY0OSwzMyksanQod3QsMjY0OSwyNjUzLC0xOSksd3RbMjY1M109MzMsd3RbMjY1NF09LTE5LGp0KHd0LDI2NTUsMjY2MiwzMyksanQod3QsMjY2MiwyNjc0LC04NyksanQod3QsMjY3NCwyNjc3LC0xOSksanQod3QsMjY3NywyNjg5LDMzKSxqdCh3dCwyNjg5LDI2OTIsLTg3KSx3dFsyNjkyXT0zMyxqdCh3dCwyNjkzLDI3MDAsLTE5KSx3dFsyNzAwXT0zMyx3dFsyNzAxXT0tMTksd3RbMjcwMl09MzMsanQod3QsMjcwMywyNzA2LC0xOSksd3RbMjcwNl09MzMsanQod3QsMjcwNywyNzI5LC0xOSksd3RbMjcyOV09MzMsanQod3QsMjczMCwyNzM3LC0xOSksd3RbMjczN109MzMsanQod3QsMjczOCwyNzQwLC0xOSksd3RbMjc0MF09MzMsanQod3QsMjc0MSwyNzQ2LC0xOSksanQod3QsMjc0NiwyNzQ4LDMzKSx3dFsyNzQ4XT0tODcsd3RbMjc0OV09LTE5LGp0KHd0LDI3NTAsMjc1OCwtODcpLHd0WzI3NThdPTMzLGp0KHd0LDI3NTksMjc2MiwtODcpLHd0WzI3NjJdPTMzLGp0KHd0LDI3NjMsMjc2NiwtODcpLGp0KHd0LDI3NjYsMjc4NCwzMyksd3RbMjc4NF09LTE5LGp0KHd0LDI3ODUsMjc5MCwzMyksanQod3QsMjc5MCwyODAwLC04NyksanQod3QsMjgwMCwyODE3LDMzKSxqdCh3dCwyODE3LDI4MjAsLTg3KSx3dFsyODIwXT0zMyxqdCh3dCwyODIxLDI4MjksLTE5KSxqdCh3dCwyODI5LDI4MzEsMzMpLGp0KHd0LDI4MzEsMjgzMywtMTkpLGp0KHd0LDI4MzMsMjgzNSwzMyksanQod3QsMjgzNSwyODU3LC0xOSksd3RbMjg1N109MzMsanQod3QsMjg1OCwyODY1LC0xOSksd3RbMjg2NV09MzMsanQod3QsMjg2NiwyODY4LC0xOSksanQod3QsMjg2OCwyODcwLDMzKSxqdCh3dCwyODcwLDI4NzQsLTE5KSxqdCh3dCwyODc0LDI4NzYsMzMpLHd0WzI4NzZdPS04Nyx3dFsyODc3XT0tMTksanQod3QsMjg3OCwyODg0LC04NyksanQod3QsMjg4NCwyODg3LDMzKSxqdCh3dCwyODg3LDI4ODksLTg3KSxqdCh3dCwyODg5LDI4OTEsMzMpLGp0KHd0LDI4OTEsMjg5NCwtODcpLGp0KHd0LDI4OTQsMjkwMiwzMyksanQod3QsMjkwMiwyOTA0LC04NyksanQod3QsMjkwNCwyOTA4LDMzKSxqdCh3dCwyOTA4LDI5MTAsLTE5KSx3dFsyOTEwXT0zMyxqdCh3dCwyOTExLDI5MTQsLTE5KSxqdCh3dCwyOTE0LDI5MTgsMzMpLGp0KHd0LDI5MTgsMjkyOCwtODcpLGp0KHd0LDI5MjgsMjk0NiwzMyksanQod3QsMjk0NiwyOTQ4LC04Nyksd3RbMjk0OF09MzMsanQod3QsMjk0OSwyOTU1LC0xOSksanQod3QsMjk1NSwyOTU4LDMzKSxqdCh3dCwyOTU4LDI5NjEsLTE5KSx3dFsyOTYxXT0zMyxqdCh3dCwyOTYyLDI5NjYsLTE5KSxqdCh3dCwyOTY2LDI5NjksMzMpLGp0KHd0LDI5NjksMjk3MSwtMTkpLHd0WzI5NzFdPTMzLHd0WzI5NzJdPS0xOSx3dFsyOTczXT0zMyxqdCh3dCwyOTc0LDI5NzYsLTE5KSxqdCh3dCwyOTc2LDI5NzksMzMpLGp0KHd0LDI5NzksMjk4MSwtMTkpLGp0KHd0LDI5ODEsMjk4NCwzMyksanQod3QsMjk4NCwyOTg3LC0xOSksanQod3QsMjk4NywyOTkwLDMzKSxqdCh3dCwyOTkwLDI5OTgsLTE5KSx3dFsyOTk4XT0zMyxqdCh3dCwyOTk5LDMwMDIsLTE5KSxqdCh3dCwzMDAyLDMwMDYsMzMpLGp0KHd0LDMwMDYsMzAxMSwtODcpLGp0KHd0LDMwMTEsMzAxNCwzMyksanQod3QsMzAxNCwzMDE3LC04Nyksd3RbMzAxN109MzMsanQod3QsMzAxOCwzMDIyLC04NyksanQod3QsMzAyMiwzMDMxLDMzKSx3dFszMDMxXT0tODcsanQod3QsMzAzMiwzMDQ3LDMzKSxqdCh3dCwzMDQ3LDMwNTYsLTg3KSxqdCh3dCwzMDU2LDMwNzMsMzMpLGp0KHd0LDMwNzMsMzA3NiwtODcpLHd0WzMwNzZdPTMzLGp0KHd0LDMwNzcsMzA4NSwtMTkpLHd0WzMwODVdPTMzLGp0KHd0LDMwODYsMzA4OSwtMTkpLHd0WzMwODldPTMzLGp0KHd0LDMwOTAsMzExMywtMTkpLHd0WzMxMTNdPTMzLGp0KHd0LDMxMTQsMzEyNCwtMTkpLHd0WzMxMjRdPTMzLGp0KHd0LDMxMjUsMzEzMCwtMTkpLGp0KHd0LDMxMzAsMzEzNCwzMyksanQod3QsMzEzNCwzMTQxLC04Nyksd3RbMzE0MV09MzMsanQod3QsMzE0MiwzMTQ1LC04Nyksd3RbMzE0NV09MzMsanQod3QsMzE0NiwzMTUwLC04NyksanQod3QsMzE1MCwzMTU3LDMzKSxqdCh3dCwzMTU3LDMxNTksLTg3KSxqdCh3dCwzMTU5LDMxNjgsMzMpLGp0KHd0LDMxNjgsMzE3MCwtMTkpLGp0KHd0LDMxNzAsMzE3NCwzMyksanQod3QsMzE3NCwzMTg0LC04NyksanQod3QsMzE4NCwzMjAyLDMzKSxqdCh3dCwzMjAyLDMyMDQsLTg3KSx3dFszMjA0XT0zMyxqdCh3dCwzMjA1LDMyMTMsLTE5KSx3dFszMjEzXT0zMyxqdCh3dCwzMjE0LDMyMTcsLTE5KSx3dFszMjE3XT0zMyxqdCh3dCwzMjE4LDMyNDEsLTE5KSx3dFszMjQxXT0zMyxqdCh3dCwzMjQyLDMyNTIsLTE5KSx3dFszMjUyXT0zMyxqdCh3dCwzMjUzLDMyNTgsLTE5KSxqdCh3dCwzMjU4LDMyNjIsMzMpLGp0KHd0LDMyNjIsMzI2OSwtODcpLHd0WzMyNjldPTMzLGp0KHd0LDMyNzAsMzI3MywtODcpLHd0WzMyNzNdPTMzLGp0KHd0LDMyNzQsMzI3OCwtODcpLGp0KHd0LDMyNzgsMzI4NSwzMyksanQod3QsMzI4NSwzMjg3LC04NyksanQod3QsMzI4NywzMjk0LDMzKSx3dFszMjk0XT0tMTksd3RbMzI5NV09MzMsanQod3QsMzI5NiwzMjk4LC0xOSksanQod3QsMzI5OCwzMzAyLDMzKSxqdCh3dCwzMzAyLDMzMTIsLTg3KSxqdCh3dCwzMzEyLDMzMzAsMzMpLGp0KHd0LDMzMzAsMzMzMiwtODcpLHd0WzMzMzJdPTMzLGp0KHd0LDMzMzMsMzM0MSwtMTkpLHd0WzMzNDFdPTMzLGp0KHd0LDMzNDIsMzM0NSwtMTkpLHd0WzMzNDVdPTMzLGp0KHd0LDMzNDYsMzM2OSwtMTkpLHd0WzMzNjldPTMzLGp0KHd0LDMzNzAsMzM4NiwtMTkpLGp0KHd0LDMzODYsMzM5MCwzMyksanQod3QsMzM5MCwzMzk2LC04NyksanQod3QsMzM5NiwzMzk4LDMzKSxqdCh3dCwzMzk4LDM0MDEsLTg3KSx3dFszNDAxXT0zMyxqdCh3dCwzNDAyLDM0MDYsLTg3KSxqdCh3dCwzNDA2LDM0MTUsMzMpLHd0WzM0MTVdPS04NyxqdCh3dCwzNDE2LDM0MjQsMzMpLGp0KHd0LDM0MjQsMzQyNiwtMTkpLGp0KHd0LDM0MjYsMzQzMCwzMyksanQod3QsMzQzMCwzNDQwLC04NyksanQod3QsMzQ0MCwzNTg1LDMzKSxqdCh3dCwzNTg1LDM2MzEsLTE5KSx3dFszNjMxXT0zMyx3dFszNjMyXT0tMTksd3RbMzYzM109LTg3LGp0KHd0LDM2MzQsMzYzNiwtMTkpLGp0KHd0LDM2MzYsMzY0MywtODcpLGp0KHd0LDM2NDMsMzY0OCwzMyksanQod3QsMzY0OCwzNjU0LC0xOSksanQod3QsMzY1NCwzNjYzLC04Nyksd3RbMzY2M109MzMsanQod3QsMzY2NCwzNjc0LC04NyksanQod3QsMzY3NCwzNzEzLDMzKSxqdCh3dCwzNzEzLDM3MTUsLTE5KSx3dFszNzE1XT0zMyx3dFszNzE2XT0tMTksanQod3QsMzcxNywzNzE5LDMzKSxqdCh3dCwzNzE5LDM3MjEsLTE5KSx3dFszNzIxXT0zMyx3dFszNzIyXT0tMTksanQod3QsMzcyMywzNzI1LDMzKSx3dFszNzI1XT0tMTksanQod3QsMzcyNiwzNzMyLDMzKSxqdCh3dCwzNzMyLDM3MzYsLTE5KSx3dFszNzM2XT0zMyxqdCh3dCwzNzM3LDM3NDQsLTE5KSx3dFszNzQ0XT0zMyxqdCh3dCwzNzQ1LDM3NDgsLTE5KSx3dFszNzQ4XT0zMyx3dFszNzQ5XT0tMTksd3RbMzc1MF09MzMsd3RbMzc1MV09LTE5LGp0KHd0LDM3NTIsMzc1NCwzMyksanQod3QsMzc1NCwzNzU2LC0xOSksd3RbMzc1Nl09MzMsanQod3QsMzc1NywzNzU5LC0xOSksd3RbMzc1OV09MzMsd3RbMzc2MF09LTE5LHd0WzM3NjFdPS04NyxqdCh3dCwzNzYyLDM3NjQsLTE5KSxqdCh3dCwzNzY0LDM3NzAsLTg3KSx3dFszNzcwXT0zMyxqdCh3dCwzNzcxLDM3NzMsLTg3KSx3dFszNzczXT0tMTksanQod3QsMzc3NCwzNzc2LDMzKSxqdCh3dCwzNzc2LDM3ODEsLTE5KSx3dFszNzgxXT0zMyx3dFszNzgyXT0tODcsd3RbMzc4M109MzMsanQod3QsMzc4NCwzNzkwLC04NyksanQod3QsMzc5MCwzNzkyLDMzKSxqdCh3dCwzNzkyLDM4MDIsLTg3KSxqdCh3dCwzODAyLDM4NjQsMzMpLGp0KHd0LDM4NjQsMzg2NiwtODcpLGp0KHd0LDM4NjYsMzg3MiwzMyksanQod3QsMzg3MiwzODgyLC04NyksanQod3QsMzg4MiwzODkzLDMzKSx3dFszODkzXT0tODcsd3RbMzg5NF09MzMsd3RbMzg5NV09LTg3LHd0WzM4OTZdPTMzLHd0WzM4OTddPS04NyxqdCh3dCwzODk4LDM5MDIsMzMpLGp0KHd0LDM5MDIsMzkwNCwtODcpLGp0KHd0LDM5MDQsMzkxMiwtMTkpLHd0WzM5MTJdPTMzLGp0KHd0LDM5MTMsMzk0NiwtMTkpLGp0KHd0LDM5NDYsMzk1MywzMyksanQod3QsMzk1MywzOTczLC04Nyksd3RbMzk3M109MzMsanQod3QsMzk3NCwzOTgwLC04NyksanQod3QsMzk4MCwzOTg0LDMzKSxqdCh3dCwzOTg0LDM5OTAsLTg3KSx3dFszOTkwXT0zMyx3dFszOTkxXT0tODcsd3RbMzk5Ml09MzMsanQod3QsMzk5Myw0MDE0LC04NyksanQod3QsNDAxNCw0MDE3LDMzKSxqdCh3dCw0MDE3LDQwMjQsLTg3KSx3dFs0MDI0XT0zMyx3dFs0MDI1XT0tODcsanQod3QsNDAyNiw0MjU2LDMzKSxqdCh3dCw0MjU2LDQyOTQsLTE5KSxqdCh3dCw0Mjk0LDQzMDQsMzMpLGp0KHd0LDQzMDQsNDM0MywtMTkpLGp0KHd0LDQzNDMsNDM1MiwzMyksd3RbNDM1Ml09LTE5LHd0WzQzNTNdPTMzLGp0KHd0LDQzNTQsNDM1NiwtMTkpLHd0WzQzNTZdPTMzLGp0KHd0LDQzNTcsNDM2MCwtMTkpLHd0WzQzNjBdPTMzLHd0WzQzNjFdPS0xOSx3dFs0MzYyXT0zMyxqdCh3dCw0MzYzLDQzNjUsLTE5KSx3dFs0MzY1XT0zMyxqdCh3dCw0MzY2LDQzNzEsLTE5KSxqdCh3dCw0MzcxLDQ0MTIsMzMpLHd0WzQ0MTJdPS0xOSx3dFs0NDEzXT0zMyx3dFs0NDE0XT0tMTksd3RbNDQxNV09MzMsd3RbNDQxNl09LTE5LGp0KHd0LDQ0MTcsNDQyOCwzMyksd3RbNDQyOF09LTE5LHd0WzQ0MjldPTMzLHd0WzQ0MzBdPS0xOSx3dFs0NDMxXT0zMyx3dFs0NDMyXT0tMTksanQod3QsNDQzMyw0NDM2LDMzKSxqdCh3dCw0NDM2LDQ0MzgsLTE5KSxqdCh3dCw0NDM4LDQ0NDEsMzMpLHd0WzQ0NDFdPS0xOSxqdCh3dCw0NDQyLDQ0NDcsMzMpLGp0KHd0LDQ0NDcsNDQ1MCwtMTkpLHd0WzQ0NTBdPTMzLHd0WzQ0NTFdPS0xOSx3dFs0NDUyXT0zMyx3dFs0NDUzXT0tMTksd3RbNDQ1NF09MzMsd3RbNDQ1NV09LTE5LHd0WzQ0NTZdPTMzLHd0WzQ0NTddPS0xOSxqdCh3dCw0NDU4LDQ0NjEsMzMpLGp0KHd0LDQ0NjEsNDQ2MywtMTkpLGp0KHd0LDQ0NjMsNDQ2NiwzMyksanQod3QsNDQ2Niw0NDY4LC0xOSksd3RbNDQ2OF09MzMsd3RbNDQ2OV09LTE5LGp0KHd0LDQ0NzAsNDUxMCwzMyksd3RbNDUxMF09LTE5LGp0KHd0LDQ1MTEsNDUyMCwzMyksd3RbNDUyMF09LTE5LGp0KHd0LDQ1MjEsNDUyMywzMyksd3RbNDUyM109LTE5LGp0KHd0LDQ1MjQsNDUyNiwzMyksanQod3QsNDUyNiw0NTI4LC0xOSksanQod3QsNDUyOCw0NTM1LDMzKSxqdCh3dCw0NTM1LDQ1MzcsLTE5KSx3dFs0NTM3XT0zMyx3dFs0NTM4XT0tMTksd3RbNDUzOV09MzMsanQod3QsNDU0MCw0NTQ3LC0xOSksanQod3QsNDU0Nyw0NTg3LDMzKSx3dFs0NTg3XT0tMTksanQod3QsNDU4OCw0NTkyLDMzKSx3dFs0NTkyXT0tMTksanQod3QsNDU5Myw0NjAxLDMzKSx3dFs0NjAxXT0tMTksanQod3QsNDYwMiw3NjgwLDMzKSxqdCh3dCw3NjgwLDc4MzYsLTE5KSxqdCh3dCw3ODM2LDc4NDAsMzMpLGp0KHd0LDc4NDAsNzkzMCwtMTkpLGp0KHd0LDc5MzAsNzkzNiwzMyksanQod3QsNzkzNiw3OTU4LC0xOSksanQod3QsNzk1OCw3OTYwLDMzKSxqdCh3dCw3OTYwLDc5NjYsLTE5KSxqdCh3dCw3OTY2LDc5NjgsMzMpLGp0KHd0LDc5NjgsODAwNiwtMTkpLGp0KHd0LDgwMDYsODAwOCwzMyksanQod3QsODAwOCw4MDE0LC0xOSksanQod3QsODAxNCw4MDE2LDMzKSxqdCh3dCw4MDE2LDgwMjQsLTE5KSx3dFs4MDI0XT0zMyx3dFs4MDI1XT0tMTksd3RbODAyNl09MzMsd3RbODAyN109LTE5LHd0WzgwMjhdPTMzLHd0WzgwMjldPS0xOSx3dFs4MDMwXT0zMyxqdCh3dCw4MDMxLDgwNjIsLTE5KSxqdCh3dCw4MDYyLDgwNjQsMzMpLGp0KHd0LDgwNjQsODExNywtMTkpLHd0WzgxMTddPTMzLGp0KHd0LDgxMTgsODEyNSwtMTkpLHd0WzgxMjVdPTMzLHd0WzgxMjZdPS0xOSxqdCh3dCw4MTI3LDgxMzAsMzMpLGp0KHd0LDgxMzAsODEzMywtMTkpLHd0WzgxMzNdPTMzLGp0KHd0LDgxMzQsODE0MSwtMTkpLGp0KHd0LDgxNDEsODE0NCwzMyksanQod3QsODE0NCw4MTQ4LC0xOSksanQod3QsODE0OCw4MTUwLDMzKSxqdCh3dCw4MTUwLDgxNTYsLTE5KSxqdCh3dCw4MTU2LDgxNjAsMzMpLGp0KHd0LDgxNjAsODE3MywtMTkpLGp0KHd0LDgxNzMsODE3OCwzMyksanQod3QsODE3OCw4MTgxLC0xOSksd3RbODE4MV09MzMsanQod3QsODE4Miw4MTg5LC0xOSksanQod3QsODE4OSw4NDAwLDMzKSxqdCh3dCw4NDAwLDg0MTMsLTg3KSxqdCh3dCw4NDEzLDg0MTcsMzMpLHd0Wzg0MTddPS04NyxqdCh3dCw4NDE4LDg0ODYsMzMpLHd0Wzg0ODZdPS0xOSxqdCh3dCw4NDg3LDg0OTAsMzMpLGp0KHd0LDg0OTAsODQ5MiwtMTkpLGp0KHd0LDg0OTIsODQ5NCwzMyksd3RbODQ5NF09LTE5LGp0KHd0LDg0OTUsODU3NiwzMyksanQod3QsODU3Niw4NTc5LC0xOSksanQod3QsODU3OSwxMjI5MywzMyksd3RbMTIyOTNdPS04Nyx3dFsxMjI5NF09MzMsd3RbMTIyOTVdPS0xOSxqdCh3dCwxMjI5NiwxMjMyMSwzMyksanQod3QsMTIzMjEsMTIzMzAsLTE5KSxqdCh3dCwxMjMzMCwxMjMzNiwtODcpLHd0WzEyMzM2XT0zMyxqdCh3dCwxMjMzNywxMjM0MiwtODcpLGp0KHd0LDEyMzQyLDEyMzUzLDMzKSxqdCh3dCwxMjM1MywxMjQzNywtMTkpLGp0KHd0LDEyNDM3LDEyNDQxLDMzKSxqdCh3dCwxMjQ0MSwxMjQ0MywtODcpLGp0KHd0LDEyNDQzLDEyNDQ1LDMzKSxqdCh3dCwxMjQ0NSwxMjQ0NywtODcpLGp0KHd0LDEyNDQ3LDEyNDQ5LDMzKSxqdCh3dCwxMjQ0OSwxMjUzOSwtMTkpLHd0WzEyNTM5XT0zMyxqdCh3dCwxMjU0MCwxMjU0MywtODcpLGp0KHd0LDEyNTQzLDEyNTQ5LDMzKSxqdCh3dCwxMjU0OSwxMjU4OSwtMTkpLGp0KHd0LDEyNTg5LDE5OTY4LDMzKSxqdCh3dCwxOTk2OCw0MDg3MCwtMTkpLGp0KHd0LDQwODcwLDQ0MDMyLDMzKSxqdCh3dCw0NDAzMiw1NTIwNCwtMTkpLGp0KHd0LDU1MjA0LFJJLDMzKSxqdCh3dCw1NzM0NCw2NTUzNCwzMyl9ZnVuY3Rpb24gR3huKHQpe3ZhciBlLG4scixzLG8saCxkO3QuaGJ8fCh0LmhiPSEwLFFjKHQsImVjb3JlIiksYnoodCwiZWNvcmUiKSx3eih0LEJoKSxGRCh0LmZiLCJFIiksRkQodC5MLCJUIiksRkQodC5QLCJLIiksRkQodC5QLCJWIiksRkQodC5jYiwiRSIpLERyKEFvKHQuYiksdC5iYiksRHIoQW8odC5hKSx0LlEpLERyKEFvKHQubyksdC5wKSxEcihBbyh0LnApLHQuUiksRHIoQW8odC5xKSx0LnApLERyKEFvKHQudiksdC5xKSxEcihBbyh0LncpLHQuUiksRHIoQW8odC5CKSx0LlEpLERyKEFvKHQuUiksdC5RKSxEcihBbyh0LlQpLHQuZWIpLERyKEFvKHQuVSksdC5SKSxEcihBbyh0LlYpLHQuZWIpLERyKEFvKHQuVyksdC5iYiksRHIoQW8odC5iYiksdC5lYiksRHIoQW8odC5lYiksdC5SKSxEcihBbyh0LmRiKSx0LlIpLHJjKHQuYixlMyxEMGUsITEsITEsITApLGhzKHUoQXQoV3QodC5iKSwwKSwzNCksdC5lLCJpRCIsbnVsbCwwLDEsZTMsITEsITEsITAsITEsITAsITEpLE5pKHUoQXQoV3QodC5iKSwxKSwxOCksdC5xLG51bGwsImVBdHRyaWJ1dGVUeXBlIiwxLDEsZTMsITAsITAsITEsITEsITAsITEsITApLHJjKHQuYSxacixBMGUsITEsITEsITApLGhzKHUoQXQoV3QodC5hKSwwKSwzNCksdC5fLFhjdCxudWxsLDAsMSxaciwhMSwhMSwhMCwhMSwhMCwhMSksTmkodShBdChXdCh0LmEpLDEpLDE4KSx0LmFiLG51bGwsImRldGFpbHMiLDAsLTEsWnIsITEsITEsITAsITAsITEsITEsITEpLE5pKHUoQXQoV3QodC5hKSwyKSwxOCksdC5RLHUoQXQoV3QodC5RKSwwKSwxOCksImVNb2RlbEVsZW1lbnQiLDAsMSxaciwhMCwhMSwhMCwhMSwhMSwhMSwhMSksTmkodShBdChXdCh0LmEpLDMpLDE4KSx0LlMsbnVsbCwiY29udGVudHMiLDAsLTEsWnIsITEsITEsITAsITAsITEsITEsITEpLE5pKHUoQXQoV3QodC5hKSw0KSwxOCksdC5TLG51bGwsInJlZmVyZW5jZXMiLDAsLTEsWnIsITEsITEsITAsITEsITAsITEsITEpLHJjKHQubyxVaCwiRUNsYXNzIiwhMSwhMSwhMCksaHModShBdChXdCh0Lm8pLDApLDM0KSx0LmUsImFic3RyYWN0IixudWxsLDAsMSxVaCwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0Lm8pLDEpLDM0KSx0LmUsImludGVyZmFjZSIsbnVsbCwwLDEsVWgsITEsITEsITAsITEsITAsITEpLE5pKHUoQXQoV3QodC5vKSwyKSwxOCksdC5vLG51bGwsImVTdXBlclR5cGVzIiwwLC0xLFVoLCExLCExLCEwLCExLCEwLCEwLCExKSxOaSh1KEF0KFd0KHQubyksMyksMTgpLHQuVCx1KEF0KFd0KHQuVCksMCksMTgpLCJlT3BlcmF0aW9ucyIsMCwtMSxVaCwhMSwhMSwhMCwhMCwhMSwhMSwhMSksTmkodShBdChXdCh0Lm8pLDQpLDE4KSx0LmIsbnVsbCwiZUFsbEF0dHJpYnV0ZXMiLDAsLTEsVWgsITAsITAsITEsITEsITAsITEsITApLE5pKHUoQXQoV3QodC5vKSw1KSwxOCksdC5XLG51bGwsImVBbGxSZWZlcmVuY2VzIiwwLC0xLFVoLCEwLCEwLCExLCExLCEwLCExLCEwKSxOaSh1KEF0KFd0KHQubyksNiksMTgpLHQuVyxudWxsLCJlUmVmZXJlbmNlcyIsMCwtMSxVaCwhMCwhMCwhMSwhMSwhMCwhMSwhMCksTmkodShBdChXdCh0Lm8pLDcpLDE4KSx0LmIsbnVsbCwiZUF0dHJpYnV0ZXMiLDAsLTEsVWgsITAsITAsITEsITEsITAsITEsITApLE5pKHUoQXQoV3QodC5vKSw4KSwxOCksdC5XLG51bGwsImVBbGxDb250YWlubWVudHMiLDAsLTEsVWgsITAsITAsITEsITEsITAsITEsITApLE5pKHUoQXQoV3QodC5vKSw5KSwxOCksdC5ULG51bGwsImVBbGxPcGVyYXRpb25zIiwwLC0xLFVoLCEwLCEwLCExLCExLCEwLCExLCEwKSxOaSh1KEF0KFd0KHQubyksMTApLDE4KSx0LmJiLG51bGwsImVBbGxTdHJ1Y3R1cmFsRmVhdHVyZXMiLDAsLTEsVWgsITAsITAsITEsITEsITAsITEsITApLE5pKHUoQXQoV3QodC5vKSwxMSksMTgpLHQubyxudWxsLCJlQWxsU3VwZXJUeXBlcyIsMCwtMSxVaCwhMCwhMCwhMSwhMSwhMCwhMSwhMCksTmkodShBdChXdCh0Lm8pLDEyKSwxOCksdC5iLG51bGwsImVJREF0dHJpYnV0ZSIsMCwxLFVoLCEwLCEwLCExLCExLCExLCExLCEwKSxOaSh1KEF0KFd0KHQubyksMTMpLDE4KSx0LmJiLHUoQXQoV3QodC5iYiksNyksMTgpLCJlU3RydWN0dXJhbEZlYXR1cmVzIiwwLC0xLFVoLCExLCExLCEwLCEwLCExLCExLCExKSxOaSh1KEF0KFd0KHQubyksMTQpLDE4KSx0LkgsbnVsbCwiZUdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLFVoLCExLCExLCEwLCEwLCExLCEwLCExKSxOaSh1KEF0KFd0KHQubyksMTUpLDE4KSx0LkgsbnVsbCwiZUFsbEdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLFVoLCEwLCEwLCExLCExLCEwLCExLCEwKSxkPWJvKHUoQXQoTWkodC5vKSwwKSw1OSksdC5lLCJpc1N1cGVyVHlwZU9mIiksX28oZCx0Lm8sInNvbWVDbGFzcyIpLGJvKHUoQXQoTWkodC5vKSwxKSw1OSksdC5JLCJnZXRGZWF0dXJlQ291bnQiKSxkPWJvKHUoQXQoTWkodC5vKSwyKSw1OSksdC5iYixIMGUpLF9vKGQsdC5JLCJmZWF0dXJlSUQiKSxkPWJvKHUoQXQoTWkodC5vKSwzKSw1OSksdC5JLFYwZSksX28oZCx0LmJiLGFTKSxkPWJvKHUoQXQoTWkodC5vKSw0KSw1OSksdC5iYixIMGUpLF9vKGQsdC5fLCJmZWF0dXJlTmFtZSIpLGJvKHUoQXQoTWkodC5vKSw1KSw1OSksdC5JLCJnZXRPcGVyYXRpb25Db3VudCIpLGQ9Ym8odShBdChNaSh0Lm8pLDYpLDU5KSx0LlQsImdldEVPcGVyYXRpb24iKSxfbyhkLHQuSSwib3BlcmF0aW9uSUQiKSxkPWJvKHUoQXQoTWkodC5vKSw3KSw1OSksdC5JLEcwZSksX28oZCx0LlQscTh0KSxkPWJvKHUoQXQoTWkodC5vKSw4KSw1OSksdC5ULCJnZXRPdmVycmlkZSIpLF9vKGQsdC5ULHE4dCksZD1ibyh1KEF0KE1pKHQubyksOSksNTkpLHQuSCwiZ2V0RmVhdHVyZVR5cGUiKSxfbyhkLHQuYmIsYVMpLHJjKHQucCxzMSxJMGUsITAsITEsITApLGhzKHUoQXQoV3QodC5wKSwwKSwzNCksdC5fLCJpbnN0YW5jZUNsYXNzTmFtZSIsbnVsbCwwLDEsczEsITEsITAsITAsITAsITAsITEpLGU9TjAodC5MKSxuPXRtdCgpLERyKCghZS5kJiYoZS5kPW5ldyBBcyhobyxlLDEpKSxlLmQpLG4pLGFjZSh1KEF0KFd0KHQucCksMSksMzQpLGUsImluc3RhbmNlQ2xhc3MiLHMxLCEwLCEwLCExLCEwKSxocyh1KEF0KFd0KHQucCksMiksMzQpLHQuTSxVMGUsbnVsbCwwLDEsczEsITAsITAsITEsITEsITAsITApLGhzKHUoQXQoV3QodC5wKSwzKSwzNCksdC5fLCJpbnN0YW5jZVR5cGVOYW1lIixudWxsLDAsMSxzMSwhMSwhMCwhMCwhMCwhMCwhMSksTmkodShBdChXdCh0LnApLDQpLDE4KSx0LlUsdShBdChXdCh0LlUpLDMpLDE4KSwiZVBhY2thZ2UiLDAsMSxzMSwhMCwhMSwhMSwhMSwhMCwhMSwhMSksTmkodShBdChXdCh0LnApLDUpLDE4KSx0LmRiLG51bGwsVzBlLDAsLTEsczEsITEsITEsITAsITAsITAsITEsITEpLGQ9Ym8odShBdChNaSh0LnApLDApLDU5KSx0LmUsWTBlKSxfbyhkLHQuTSxNSSksYm8odShBdChNaSh0LnApLDEpLDU5KSx0LkksImdldENsYXNzaWZpZXJJRCIpLHJjKHQucSxOZnQsIkVEYXRhVHlwZSIsITEsITEsITApLGhzKHUoQXQoV3QodC5xKSwwKSwzNCksdC5lLCJzZXJpYWxpemFibGUiLFhFLDAsMSxOZnQsITEsITEsITAsITEsITAsITEpLHJjKHQudixwVSwiRUVudW0iLCExLCExLCEwKSxOaSh1KEF0KFd0KHQudiksMCksMTgpLHQudyx1KEF0KFd0KHQudyksMyksMTgpLCJlTGl0ZXJhbHMiLDAsLTEscFUsITEsITEsITAsITAsITEsITEsITEpLGQ9Ym8odShBdChNaSh0LnYpLDApLDU5KSx0LncsSzBlKSxfbyhkLHQuXyxjaSksZD1ibyh1KEF0KE1pKHQudiksMSksNTkpLHQudyxLMGUpLF9vKGQsdC5JLFpfKSxkPWJvKHUoQXQoTWkodC52KSwyKSw1OSksdC53LCJnZXRFRW51bUxpdGVyYWxCeUxpdGVyYWwiKSxfbyhkLHQuXywibGl0ZXJhbCIpLHJjKHQudyxhZyxPMGUsITEsITEsITApLGhzKHUoQXQoV3QodC53KSwwKSwzNCksdC5JLFpfLG51bGwsMCwxLGFnLCExLCExLCEwLCExLCEwLCExKSxocyh1KEF0KFd0KHQudyksMSksMzQpLHQuQSwiaW5zdGFuY2UiLG51bGwsMCwxLGFnLCEwLCExLCEwLCExLCEwLCExKSxocyh1KEF0KFd0KHQudyksMiksMzQpLHQuXywibGl0ZXJhbCIsbnVsbCwwLDEsYWcsITEsITEsITAsITEsITAsITEpLE5pKHUoQXQoV3QodC53KSwzKSwxOCksdC52LHUoQXQoV3QodC52KSwwKSwxOCksImVFbnVtIiwwLDEsYWcsITAsITEsITEsITEsITEsITEsITEpLHJjKHQuQixzQSwiRUZhY3RvcnkiLCExLCExLCEwKSxOaSh1KEF0KFd0KHQuQiksMCksMTgpLHQuVSx1KEF0KFd0KHQuVSksMiksMTgpLCJlUGFja2FnZSIsMSwxLHNBLCEwLCExLCEwLCExLCExLCExLCExKSxkPWJvKHUoQXQoTWkodC5CKSwwKSw1OSksdC5TLCJjcmVhdGUiKSxfbyhkLHQubywiZUNsYXNzIiksZD1ibyh1KEF0KE1pKHQuQiksMSksNTkpLHQuTSwiY3JlYXRlRnJvbVN0cmluZyIpLF9vKGQsdC5xLCJlRGF0YVR5cGUiKSxfbyhkLHQuXywibGl0ZXJhbFZhbHVlIiksZD1ibyh1KEF0KE1pKHQuQiksMiksNTkpLHQuXywiY29udmVydFRvU3RyaW5nIiksX28oZCx0LnEsImVEYXRhVHlwZSIpLF9vKGQsdC5NLCJpbnN0YW5jZVZhbHVlIikscmModC5RLGZQLE9kZSwhMCwhMSwhMCksTmkodShBdChXdCh0LlEpLDApLDE4KSx0LmEsdShBdChXdCh0LmEpLDIpLDE4KSwiZUFubm90YXRpb25zIiwwLC0xLGZQLCExLCExLCEwLCEwLCExLCExLCExKSxkPWJvKHUoQXQoTWkodC5RKSwwKSw1OSksdC5hLCJnZXRFQW5ub3RhdGlvbiIpLF9vKGQsdC5fLFhjdCkscmModC5SLE1mdCxQZGUsITAsITEsITApLGhzKHUoQXQoV3QodC5SKSwwKSwzNCksdC5fLGNpLG51bGwsMCwxLE1mdCwhMSwhMSwhMCwhMSwhMCwhMSkscmModC5TLF9iLCJFT2JqZWN0IiwhMSwhMSwhMCksYm8odShBdChNaSh0LlMpLDApLDU5KSx0Lm8sImVDbGFzcyIpLGJvKHUoQXQoTWkodC5TKSwxKSw1OSksdC5lLCJlSXNQcm94eSIpLGJvKHUoQXQoTWkodC5TKSwyKSw1OSksdC5YLCJlUmVzb3VyY2UiKSxibyh1KEF0KE1pKHQuUyksMyksNTkpLHQuUywiZUNvbnRhaW5lciIpLGJvKHUoQXQoTWkodC5TKSw0KSw1OSksdC5iYiwiZUNvbnRhaW5pbmdGZWF0dXJlIiksYm8odShBdChNaSh0LlMpLDUpLDU5KSx0LlcsImVDb250YWlubWVudEZlYXR1cmUiKSxkPWJvKHUoQXQoTWkodC5TKSw2KSw1OSksbnVsbCwiZUNvbnRlbnRzIiksZT1OMCh0LmZiKSxuPU4wKHQuUyksRHIoKCFlLmQmJihlLmQ9bmV3IEFzKGhvLGUsMSkpLGUuZCksbikscz1GMShkLGUsbnVsbCkscyYmcy5GaSgpLGQ9Ym8odShBdChNaSh0LlMpLDcpLDU5KSxudWxsLCJlQWxsQ29udGVudHMiKSxlPU4wKHQuY2IpLG49TjAodC5TKSxEcigoIWUuZCYmKGUuZD1uZXcgQXMoaG8sZSwxKSksZS5kKSxuKSxvPUYxKGQsZSxudWxsKSxvJiZvLkZpKCksZD1ibyh1KEF0KE1pKHQuUyksOCksNTkpLG51bGwsImVDcm9zc1JlZmVyZW5jZXMiKSxlPU4wKHQuZmIpLG49TjAodC5TKSxEcigoIWUuZCYmKGUuZD1uZXcgQXMoaG8sZSwxKSksZS5kKSxuKSxoPUYxKGQsZSxudWxsKSxoJiZoLkZpKCksZD1ibyh1KEF0KE1pKHQuUyksOSksNTkpLHQuTSwiZUdldCIpLF9vKGQsdC5iYixhUyksZD1ibyh1KEF0KE1pKHQuUyksMTApLDU5KSx0Lk0sImVHZXQiKSxfbyhkLHQuYmIsYVMpLF9vKGQsdC5lLCJyZXNvbHZlIiksZD1ibyh1KEF0KE1pKHQuUyksMTEpLDU5KSxudWxsLCJlU2V0IiksX28oZCx0LmJiLGFTKSxfbyhkLHQuTSwibmV3VmFsdWUiKSxkPWJvKHUoQXQoTWkodC5TKSwxMiksNTkpLHQuZSwiZUlzU2V0IiksX28oZCx0LmJiLGFTKSxkPWJvKHUoQXQoTWkodC5TKSwxMyksNTkpLG51bGwsImVVbnNldCIpLF9vKGQsdC5iYixhUyksZD1ibyh1KEF0KE1pKHQuUyksMTQpLDU5KSx0Lk0sImVJbnZva2UiKSxfbyhkLHQuVCxxOHQpLGU9TjAodC5mYiksbj10bXQoKSxEcigoIWUuZCYmKGUuZD1uZXcgQXMoaG8sZSwxKSksZS5kKSxuKSxvcShkLGUsImFyZ3VtZW50cyIpLFZubihkLHQuSykscmModC5ULFdoLEYwZSwhMSwhMSwhMCksTmkodShBdChXdCh0LlQpLDApLDE4KSx0Lm8sdShBdChXdCh0Lm8pLDMpLDE4KSxYMGUsMCwxLFdoLCEwLCExLCExLCExLCExLCExLCExKSxOaSh1KEF0KFd0KHQuVCksMSksMTgpLHQuZGIsbnVsbCxXMGUsMCwtMSxXaCwhMSwhMSwhMCwhMCwhMCwhMSwhMSksTmkodShBdChXdCh0LlQpLDIpLDE4KSx0LlYsdShBdChXdCh0LlYpLDApLDE4KSwiZVBhcmFtZXRlcnMiLDAsLTEsV2gsITEsITEsITAsITAsITEsITEsITEpLE5pKHUoQXQoV3QodC5UKSwzKSwxOCksdC5wLG51bGwsImVFeGNlcHRpb25zIiwwLC0xLFdoLCExLCExLCEwLCExLCEwLCEwLCExKSxOaSh1KEF0KFd0KHQuVCksNCksMTgpLHQuSCxudWxsLCJlR2VuZXJpY0V4Y2VwdGlvbnMiLDAsLTEsV2gsITEsITEsITAsITAsITEsITAsITEpLGJvKHUoQXQoTWkodC5UKSwwKSw1OSksdC5JLEcwZSksZD1ibyh1KEF0KE1pKHQuVCksMSksNTkpLHQuZSwiaXNPdmVycmlkZU9mIiksX28oZCx0LlQsInNvbWVPcGVyYXRpb24iKSxyYyh0LlUsaTEsIkVQYWNrYWdlIiwhMSwhMSwhMCksaHModShBdChXdCh0LlUpLDApLDM0KSx0Ll8sIm5zVVJJIixudWxsLDAsMSxpMSwhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LlUpLDEpLDM0KSx0Ll8sIm5zUHJlZml4IixudWxsLDAsMSxpMSwhMSwhMSwhMCwhMSwhMCwhMSksTmkodShBdChXdCh0LlUpLDIpLDE4KSx0LkIsdShBdChXdCh0LkIpLDApLDE4KSwiZUZhY3RvcnlJbnN0YW5jZSIsMSwxLGkxLCEwLCExLCEwLCExLCExLCExLCExKSxOaSh1KEF0KFd0KHQuVSksMyksMTgpLHQucCx1KEF0KFd0KHQucCksNCksMTgpLCJlQ2xhc3NpZmllcnMiLDAsLTEsaTEsITEsITEsITAsITAsITAsITEsITEpLE5pKHUoQXQoV3QodC5VKSw0KSwxOCksdC5VLHUoQXQoV3QodC5VKSw1KSwxOCksImVTdWJwYWNrYWdlcyIsMCwtMSxpMSwhMSwhMSwhMCwhMCwhMCwhMSwhMSksTmkodShBdChXdCh0LlUpLDUpLDE4KSx0LlUsdShBdChXdCh0LlUpLDQpLDE4KSwiZVN1cGVyUGFja2FnZSIsMCwxLGkxLCEwLCExLCExLCExLCEwLCExLCExKSxkPWJvKHUoQXQoTWkodC5VKSwwKSw1OSksdC5wLCJnZXRFQ2xhc3NpZmllciIpLF9vKGQsdC5fLGNpKSxyYyh0LlYsVnYsTjBlLCExLCExLCEwKSxOaSh1KEF0KFd0KHQuViksMCksMTgpLHQuVCx1KEF0KFd0KHQuVCksMiksMTgpLCJlT3BlcmF0aW9uIiwwLDEsVnYsITAsITEsITEsITEsITEsITEsITEpLHJjKHQuVyxuMyxCMGUsITEsITEsITApLGhzKHUoQXQoV3QodC5XKSwwKSwzNCksdC5lLCJjb250YWlubWVudCIsbnVsbCwwLDEsbjMsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5XKSwxKSwzNCksdC5lLCJjb250YWluZXIiLG51bGwsMCwxLG4zLCEwLCEwLCExLCExLCEwLCEwKSxocyh1KEF0KFd0KHQuVyksMiksMzQpLHQuZSwicmVzb2x2ZVByb3hpZXMiLFhFLDAsMSxuMywhMSwhMSwhMCwhMSwhMCwhMSksTmkodShBdChXdCh0LlcpLDMpLDE4KSx0LlcsbnVsbCwiZU9wcG9zaXRlIiwwLDEsbjMsITEsITEsITAsITEsITAsITEsITEpLE5pKHUoQXQoV3QodC5XKSw0KSwxOCksdC5vLG51bGwsImVSZWZlcmVuY2VUeXBlIiwxLDEsbjMsITAsITAsITEsITEsITAsITEsITApLE5pKHUoQXQoV3QodC5XKSw1KSwxOCksdC5iLG51bGwsImVLZXlzIiwwLC0xLG4zLCExLCExLCEwLCExLCEwLCExLCExKSxyYyh0LmJiLE11LE0wZSwhMCwhMSwhMCksaHModShBdChXdCh0LmJiKSwwKSwzNCksdC5lLCJjaGFuZ2VhYmxlIixYRSwwLDEsTXUsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5iYiksMSksMzQpLHQuZSwidm9sYXRpbGUiLG51bGwsMCwxLE11LCExLCExLCEwLCExLCEwLCExKSxocyh1KEF0KFd0KHQuYmIpLDIpLDM0KSx0LmUsInRyYW5zaWVudCIsbnVsbCwwLDEsTXUsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5iYiksMyksMzQpLHQuXywiZGVmYXVsdFZhbHVlTGl0ZXJhbCIsbnVsbCwwLDEsTXUsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5iYiksNCksMzQpLHQuTSxVMGUsbnVsbCwwLDEsTXUsITAsITAsITEsITEsITAsITApLGhzKHUoQXQoV3QodC5iYiksNSksMzQpLHQuZSwidW5zZXR0YWJsZSIsbnVsbCwwLDEsTXUsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5iYiksNiksMzQpLHQuZSwiZGVyaXZlZCIsbnVsbCwwLDEsTXUsITEsITEsITAsITEsITAsITEpLE5pKHUoQXQoV3QodC5iYiksNyksMTgpLHQubyx1KEF0KFd0KHQubyksMTMpLDE4KSxYMGUsMCwxLE11LCEwLCExLCExLCExLCExLCExLCExKSxibyh1KEF0KE1pKHQuYmIpLDApLDU5KSx0LkksVjBlKSxkPWJvKHUoQXQoTWkodC5iYiksMSksNTkpLG51bGwsImdldENvbnRhaW5lckNsYXNzIiksZT1OMCh0LkwpLG49dG10KCksRHIoKCFlLmQmJihlLmQ9bmV3IEFzKGhvLGUsMSkpLGUuZCksbikscj1GMShkLGUsbnVsbCksciYmci5GaSgpLHJjKHQuZWIsdDMsTDBlLCEwLCExLCEwKSxocyh1KEF0KFd0KHQuZWIpLDApLDM0KSx0LmUsIm9yZGVyZWQiLFhFLDAsMSx0MywhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LmViKSwxKSwzNCksdC5lLCJ1bmlxdWUiLFhFLDAsMSx0MywhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LmViKSwyKSwzNCksdC5JLCJsb3dlckJvdW5kIixudWxsLDAsMSx0MywhMSwhMSwhMCwhMSwhMCwhMSksaHModShBdChXdCh0LmViKSwzKSwzNCksdC5JLCJ1cHBlckJvdW5kIiwiMSIsMCwxLHQzLCExLCExLCEwLCExLCEwLCExKSxocyh1KEF0KFd0KHQuZWIpLDQpLDM0KSx0LmUsIm1hbnkiLG51bGwsMCwxLHQzLCEwLCEwLCExLCExLCEwLCEwKSxocyh1KEF0KFd0KHQuZWIpLDUpLDM0KSx0LmUsInJlcXVpcmVkIixudWxsLDAsMSx0MywhMCwhMCwhMSwhMSwhMCwhMCksTmkodShBdChXdCh0LmViKSw2KSwxOCksdC5wLG51bGwsImVUeXBlIiwwLDEsdDMsITEsITAsITAsITEsITAsITAsITEpLE5pKHUoQXQoV3QodC5lYiksNyksMTgpLHQuSCxudWxsLCJlR2VuZXJpY1R5cGUiLDAsMSx0MywhMSwhMCwhMCwhMCwhMSwhMCwhMSkscmModC5hYixQMiwiRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiLCExLCExLCExKSxocyh1KEF0KFd0KHQuYWIpLDApLDM0KSx0Ll8sImtleSIsbnVsbCwwLDEsUDIsITEsITEsITAsITEsITAsITEpLGhzKHUoQXQoV3QodC5hYiksMSksMzQpLHQuXyxaXyxudWxsLDAsMSxQMiwhMSwhMSwhMCwhMSwhMCwhMSkscmModC5ILGhvLFAwZSwhMSwhMSwhMCksTmkodShBdChXdCh0LkgpLDApLDE4KSx0LkgsbnVsbCwiZVVwcGVyQm91bmQiLDAsMSxobywhMSwhMSwhMCwhMCwhMSwhMSwhMSksTmkodShBdChXdCh0LkgpLDEpLDE4KSx0LkgsbnVsbCwiZVR5cGVBcmd1bWVudHMiLDAsLTEsaG8sITEsITEsITAsITAsITEsITEsITEpLE5pKHUoQXQoV3QodC5IKSwyKSwxOCksdC5wLG51bGwsImVSYXdUeXBlIiwxLDEsaG8sITAsITEsITEsITEsITAsITEsITApLE5pKHUoQXQoV3QodC5IKSwzKSwxOCksdC5ILG51bGwsImVMb3dlckJvdW5kIiwwLDEsaG8sITEsITEsITAsITAsITEsITEsITEpLE5pKHUoQXQoV3QodC5IKSw0KSwxOCksdC5kYixudWxsLCJlVHlwZVBhcmFtZXRlciIsMCwxLGhvLCExLCExLCEwLCExLCExLCExLCExKSxOaSh1KEF0KFd0KHQuSCksNSksMTgpLHQucCxudWxsLCJlQ2xhc3NpZmllciIsMCwxLGhvLCExLCExLCEwLCExLCEwLCExLCExKSxkPWJvKHUoQXQoTWkodC5IKSwwKSw1OSksdC5lLFkwZSksX28oZCx0Lk0sTUkpLHJjKHQuZGIsaHUsUjBlLCExLCExLCEwKSxOaSh1KEF0KFd0KHQuZGIpLDApLDE4KSx0LkgsbnVsbCwiZUJvdW5kcyIsMCwtMSxodSwhMSwhMSwhMCwhMCwhMSwhMSwhMSksYWkodC5jLE51dCwiRUJpZ0RlY2ltYWwiLCEwKSxhaSh0LmQsajQsIkVCaWdJbnRlZ2VyIiwhMCksYWkodC5lLHBsLCJFQm9vbGVhbiIsITApLGFpKHQuZixScywiRUJvb2xlYW5PYmplY3QiLCEwKSxhaSh0LmksR3UsIkVCeXRlIiwhMCksYWkodC5nLGN0KEd1LDEpLCJFQnl0ZUFycmF5IiwhMCksYWkodC5qLE02LCJFQnl0ZU9iamVjdCIsITApLGFpKHQuayx4aCwiRUNoYXIiLCEwKSxhaSh0Lm4sdVMsIkVDaGFyYWN0ZXJPYmplY3QiLCEwKSxhaSh0LnIsdFYsIkVEYXRlIiwhMCksYWkodC5zLFBMdCwiRURpYWdub3N0aWNDaGFpbiIsITEpLGFpKHQudCxhYSwiRURvdWJsZSIsITApLGFpKHQudSxsYSwiRURvdWJsZU9iamVjdCIsITApLGFpKHQuZmIsS0F0LCJFRUxpc3QiLCExKSxhaSh0LkEsWkF0LCJFRW51bWVyYXRvciIsITEpLGFpKHQuQyx4THQsIkVGZWF0dXJlTWFwIiwhMSksYWkodC5ELGJVLCJFRmVhdHVyZU1hcEVudHJ5IiwhMSksYWkodC5GLGEzLCJFRmxvYXQiLCEwKSxhaSh0LkcsaTcsIkVGbG9hdE9iamVjdCIsITApLGFpKHQuSSxDciwiRUludCIsITApLGFpKHQuSixqYSwiRUludGVnZXJPYmplY3QiLCEwKSxhaSh0LkwsSjh0LCJFSmF2YUNsYXNzIiwhMCksYWkodC5NLFFuLCJFSmF2YU9iamVjdCIsITApLGFpKHQuTixPYiwiRUxvbmciLCEwKSxhaSh0Lk8sU3YsIkVMb25nT2JqZWN0IiwhMCksYWkodC5QLHRFdCwiRU1hcCIsITEpLGFpKHQuWCx3THQsIkVSZXNvdXJjZSIsITEpLGFpKHQuWSxGTHQsIkVSZXNvdXJjZVNldCIsITEpLGFpKHQuWixnNSwiRVNob3J0IiwhMCksYWkodC4kLEF2LCJFU2hvcnRPYmplY3QiLCEwKSxhaSh0Ll8sQWUsIkVTdHJpbmciLCEwKSxhaSh0LmNiLFFBdCwiRVRyZWVJdGVyYXRvciIsITEpLGFpKHQuSyxOTHQsIkVJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIiwhMSksS3l0KHQsQmgpKX12YXIgTUk9Im9iamVjdCIsYjY9ImJvb2xlYW4iLE54dD0ibnVtYmVyIixWYXQ9InN0cmluZyIsR2F0PSJmdW5jdGlvbiIsd2k9MjE0NzQ4MzY0NyxYbz0iamF2YS5sYW5nIixEST17MzoxfSxJST0iY29tLmdvb2dsZS5jb21tb24uYmFzZSIsWWE9IiwgIixhZmU9IiVzICglcykgbXVzdCBub3QgYmUgbmVnYXRpdmUiLERlPXszOjEsNDoxLDU6MX0sb2ZlPSJuZWdhdGl2ZSBzaXplOiAiLGNmZT0iT3B0aW9uYWwub2YoIixfdT0ibnVsbCIsRkU9ezE5ODoxLDQ3OjF9LEtlPSJjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0IixORT17MTk4OjEsNDc6MSwxMjU6MX0sVDI9ezIyNDoxLDM6MX0sc2E9ezQ3OjF9LHByPSJqYXZhLnV0aWwiLG12PXs4MzoxfSx4eT17MjA6MSwyODoxLDE0OjF9LE4xPTE5NjUsenU9ezIwOjEsMjg6MSwxNDoxLDIxOjF9LHVmZT17ODM6MSwxNzE6MSwxNjE6MX0sbGZlPXsyMDoxLDI4OjEsMTQ6MSwyMToxLDg0OjF9LEJ4dD17MjA6MSwyODoxLDE0OjEsMjcxOjEsMjE6MSw4NDoxfSxuMD17NDc6MSwxMjU6MX0senE9ezM0NToxLDQyOjF9LGhmZT0iQWJzdHJhY3RNYXBFbnRyeSIsZmZlPSJleHBlY3RlZFZhbHVlc1BlcktleSIsZWU9ezM6MSw2OjEsNDoxLDU6MX0sbWQ9MTYzODQsSWg9ezE2NDoxfSxVbj17Mzg6MX0scXE9e2w6NDE5NDMwMyxtOjQxOTQzMDMsaDo1MjQyODd9LE9JPXsxOTY6MX0sVWF0PXsyNDU6MSwzOjEsMzU6MX0sZGZlPSJyYW5nZSB1bmJvdW5kZWQgb24gdGhpcyBzaWRlIixyMD17MjA6MX0sZ2ZlPXsyMDoxLDE0OjF9LFJ4dD17MzoxLDIwOjEsMjg6MSwxNDoxfSxNXz17MTUyOjEsMzoxLDIwOjEsMjg6MSwxNDoxLDE1OjEsNTQ6MX0sSHE9ezM6MSw0OjEsNToxLDE2NToxfSxCRT17MzoxLDgzOjF9LFdhdD17MjA6MSwxNDoxLDIxOjF9LFJFPXszOjEsMjA6MSwyODoxLDE0OjEsMjE6MX0scGZlPXsyMDoxLDE0OjEsMjE6MSw4NDoxfSxpMD00NjE4NDU5MDcsczA9LTg2MjA0ODk0MyxQST17MzoxLDY6MSw0OjEsNToxLDE2NToxfSxiZmU9ImV4cGVjdGVkU2l6ZSIsRF89MTA3Mzc0MTgyNCxreT0iaW5pdGlhbEFycmF5U2l6ZSIsb2U9ezM6MSw2OjEsNDoxLDk6MSw1OjF9LGpFPXsyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjF9LFlhdD0iYXJyYXlTaXplIix3ZmU9ezIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxfSxsaT17NDU6MX0sVnE9ezM2NToxfSxzYj0xZS00LFNhPS0yMTQ3NDgzNjQ4LHZmZT0iX19ub2luaXRfXyIsUTA9ezM6MSwxMDI6MSw2MDoxLDc4OjF9LEZJPSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5pbXBsIixqeHQ9IlN0cmluZyIsJHh0PSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudCIsS2F0PSJhbm9ueW1vdXMiLFhhdD0iZm5TdGFjayIsenh0PSJVbmtub3duIix5ZD17MTk1OjEsMzoxLDQ6MX0sV2c9MWUzLHlzPTY1NTM1LFFhdD0iSmFudWFyeSIsWmF0PSJGZWJydWFyeSIsSmF0PSJNYXJjaCIsdG90PSJBcHJpbCIsdzY9Ik1heSIsZW90PSJKdW5lIixub3Q9Ikp1bHkiLHJvdD0iQXVndXN0Iixpb3Q9IlNlcHRlbWJlciIsc290PSJPY3RvYmVyIixhb3Q9Ik5vdmVtYmVyIixvb3Q9IkRlY2VtYmVyIixhYj0xOTAwLFhyPXs0ODoxLDM6MSw0OjF9LG1mZT0iQmVmb3JlIENocmlzdCIseWZlPSJBbm5vIERvbWluaSIsY290PSJTdW5kYXkiLHVvdD0iTW9uZGF5Iixsb3Q9IlR1ZXNkYXkiLGhvdD0iV2VkbmVzZGF5Iixmb3Q9IlRodXJzZGF5Iixkb3Q9IkZyaWRheSIsZ290PSJTYXR1cmRheSIscXh0PSJjb20uZ29vZ2xlLmd3dC5pMThuLnNoYXJlZCIseGZlPSJEYXRlVGltZUZvcm1hdCIscG90PSJjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudCIsa2ZlPSJEZWZhdWx0RGF0ZVRpbWVGb3JtYXRJbmZvIixFZmU9ezM6MSw0OjEsMzU6MSwxOTk6MX0sdjY9ImNvbS5nb29nbGUuZ3d0Lmpzb24uY2xpZW50IixobD00MTk0MzAzLFowPTEwNDg1NzUsTkk9NTI0Mjg4LG02PTQxOTQzMDQsQzI9MTc1OTIxODYwNDQ0MTYsR3E9MWU5LEJJPS0xNzU5MjE4NjA0NDQxNixIeHQ9ImphdmEuaW8iLGJvdD17MzoxLDEwMjoxLDczOjEsNjA6MSw3ODoxfSxUZmU9ezM6MSwyODk6MSw3ODoxfSx5dj0nRm9yIGlucHV0IHN0cmluZzogIicsYXM9MS8wLENzPS0xLzAsRXk9NDA5Nix3b3Q9ezM6MSw0OjEsMzY0OjF9LEthPTY1NTM2LFJJPTU1Mjk2LHZvPXsxMDQ6MSwzOjEsNDoxfSx2b3Q9MWU1LENmZT0uMzAxMDI5OTk1NjYzOTgxMixjbz00Mjk0OTY3Mjk1LG1vdD00Mjk0OTY3Mjk2LCRFPSIwLjAiLHlvdD17NDI6MX0sX2ZlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDEyOjEsMTQ6MSwxNToxLDU0OjF9LFNmZT17MzoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxfSxBZmU9ezIwOjEsMTQ6MSwxNToxfSx4b3Q9ezM6MSw2MjoxfSxqST17MTgyOjF9LEE0PXszOjEsNDoxLDgzOjF9LFZ4dD17MzoxLDQ6MSwyMDoxLDI4OjEsMTQ6MSw1MzoxLDIxOjF9LGtvdD0iZGVsZXRlIixJXz0xNDkwMTE2MTE5Mzg0NzY1NmUtMjQsT189MTExMDIyMzAyNDYyNTE1NjVlLTMyLEVvdD0xNTUyNTQ4NSwkST01OTYwNDY0NDc3NTM5MDYzZS0yMyxHeHQ9MTY3NzcyMTYsVXE9MTY3NzcyMTUsVXh0PSIsIGxlbmd0aDogIixMZmU9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU0OjF9LFRvdD17MzoxLDM1OjEsMjI6MSwyOTc6MX0sQ290PSJqYXZhLnV0aWwuZnVuY3Rpb24iLFBfPSJqYXZhLnV0aWwubG9nZ2luZyIsTWZlPXszOjEsNDoxLDU6MSw4NDI6MX0sX290PSJ1bmRlZmluZWQiLElzPSJqYXZhLnV0aWwuc3RyZWFtIixXeHQ9ezUyNToxLDY3MDoxfSxXcT0iZnJvbUluZGV4OiAiLERmZT0iID4gdG9JbmRleDogIixZeHQ9IiwgdG9JbmRleDogIixLeHQ9IkluZGV4OiAiLFh4dD0iLCBTaXplOiAiLHpFPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbiIsT2k9ezYyOjF9LElmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24uY29tcGFjdGlvbiIsT2ZlPSJTY2FubGluZS9FdmVudEhhbmRsZXIiLGEwPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uLm9uZWQiLFBmZT0iQ05vZGUgYmVsb25ncyB0byBhbm90aGVyIENHcm91cC4iLEZmZT0iSVNwYWNpbmdzSGFuZGxlci8xIixTb3Q9IlRoZSAiLEFvdD0iIGluc3RhbmNlIGhhcyBiZWVuIGZpbmlzaGVkIGFscmVhZHkuIixOZmU9IlRoZSBkaXJlY3Rpb24gIixCZmU9IiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDR3JhcGggaW5zdGFuY2UuIixSZmU9Ik9uZURpbWVuc2lvbmFsQ29tcGFjdG9yIixqZmU9Ik9uZURpbWVuc2lvbmFsQ29tcGFjdG9yL2xhbWJkYSQwJFR5cGUiLCRmZT0iUXVhZHJ1cGxldCIsemZlPSJTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yIixxZmU9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvQ29uc3RyYWludHNTY2FubGluZUhhbmRsZXIiLEhmZT0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9Db25zdHJhaW50c1NjYW5saW5lSGFuZGxlci9sYW1iZGEkMCRUeXBlIixWZmU9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvVGltZXN0YW1wIixHZmU9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZSIseGQ9ezE2OToxLDQ1OjF9LExvdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24uY29tcGFjdGlvbi5vcHRpb25zIixRbz0ib3JnLmVjbGlwc2UuZWxrLmNvcmUuZGF0YSIsUXh0PSJvcmcuZWNsaXBzZS5lbGsucG9seW9taW5vLnRyYXZlcnNhbFN0cmF0ZWd5IixaeHQ9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8ubG93TGV2ZWxTb3J0IixKeHQ9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8uaGlnaExldmVsU29ydCIsdDZ0PSJvcmcuZWNsaXBzZS5lbGsucG9seW9taW5vLmZpbGwiLE9oPXsxMzA6MX0sTW90PSJwb2x5b21pbm8iLEZfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5uZXR3b3Jrc2ltcGxleCIsbzA9ezE3NzoxLDM6MSw0OjF9LFVmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ubm9kZXNwYWNpbmciLF8yPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5jZWxsc3lzdGVtIixxRT0iQ0VOVEVSIixXZmU9ezIxMjoxLDMyNjoxfSxlNnQ9ezM6MSw0OjEsNToxLDU5NToxfSx5Nj0iTEVGVCIseDY9IlJJR0hUIixuNnQ9IlZlcnRpY2FsIGFsaWdubWVudCBjYW5ub3QgYmUgbnVsbCIscjZ0PSJCT1RUT00iLFlxPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5pbnRlcm5hbCIsTl89IlVOREVGSU5FRCIsQjE9LjAxLHpJPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5pbnRlcm5hbC5hbGdvcml0aG0iLFlmZT0iTGFiZWxQbGFjZXIvbGFtYmRhJDAkVHlwZSIsS2ZlPSJMYWJlbFBsYWNlci9sYW1iZGEkMSRUeXBlIixYZmU9InBvcnRSYXRpb09yUG9zaXRpb24iLEhFPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5vdmVybGFwcyIsRG90PSJET1dOIixrZD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ucG9seW9taW5vIixLcT0iTk9SVEgiLElvdD0iRUFTVCIsT290PSJTT1VUSCIsUG90PSJXRVNUIixYcT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ucG9seW9taW5vLnN0cnVjdHVyZXMiLGk2dD0iRGlyZWN0aW9uIixGb3Q9IkdyaWQgaXMgb25seSBvZiBzaXplICIsTm90PSIuIFJlcXVlc3RlZCBwb2ludCAoIixCb3Q9IikgaXMgb3V0IG9mIGJvdW5kcy4iLFFxPSIgR2l2ZW4gY2VudGVyIGJhc2VkIGNvb3JkaW5hdGVzIHdlcmUgKCIscUk9Im9yZy5lY2xpcHNlLmVsay5ncmFwaC5wcm9wZXJ0aWVzIixRZmU9IklQcm9wZXJ0eUhvbGRlciIsczZ0PXszOjEsOTQ6MSwxMzQ6MX0sazY9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnNwb3JlIixaZmU9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnV0aWxzIixTMj17MjA5OjF9LEw0PSJvcmcuZWNsaXBzZS5lbGsuY29yZSIsSmZlPSJDb25uZWN0ZWQgQ29tcG9uZW50cyBDb21wYWN0aW9uIix0MWU9Im9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28iLFpxPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmRpc2NvLmdyYXBoIixSb3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28ub3B0aW9ucyIsYTZ0PSJDb21wYWN0aW9uU3RyYXRlZ3kiLG82dD0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmNvbXBvbmVudENvbXBhY3Rpb24uc3RyYXRlZ3kiLGM2dD0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmNvbXBvbmVudENvbXBhY3Rpb24uY29tcG9uZW50TGF5b3V0QWxnb3JpdGhtIix1NnQ9Im9yZy5lY2xpcHNlLmVsay5kaXNjby5kZWJ1Zy5kaXNjb0dyYXBoIixsNnQ9Im9yZy5lY2xpcHNlLmVsay5kaXNjby5kZWJ1Zy5kaXNjb1BvbHlzIixlMWU9ImNvbXBvbmVudENvbXBhY3Rpb24iLEEyPSJvcmcuZWNsaXBzZS5lbGsuZGlzY28iLGpvdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuY29tcG9uZW50Q29tcG9uZW50Iiwkb3Q9Im9yZy5lY2xpcHNlLmVsay5lZGdlLnRoaWNrbmVzcyIsRTY9Im9yZy5lY2xpcHNlLmVsay5hc3BlY3RSYXRpbyIseHY9Im9yZy5lY2xpcHNlLmVsay5wYWRkaW5nIixNND0ib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjby50cmFuc2Zvcm0iLHpvdD0xLjU3MDc5NjMyNjc5NDg5NjYsVkU9MTc5NzY5MzEzNDg2MjMxNTdlMjkyLFR5PXszOjEsNDoxLDU6MSwxOTI6MX0saDZ0PXszOjEsNjoxLDQ6MSw1OjEsMTA2OjEsMTIwOjF9LGY2dD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZSIsZDZ0PSJDb21wb25lbnRzUHJvY2Vzc29yIixuMWU9IkNvbXBvbmVudHNQcm9jZXNzb3IvMSIsSEk9Im9yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2UuZ3JhcGgiLHIxZT0iQ29tcG9uZW50IExheW91dCIsZzZ0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmZvcmNlLm1vZGVsIixKcT0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlLm1vZGVsIixwNnQ9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5pdGVyYXRpb25zIixiNnQ9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5yZXB1bHNpdmVQb3dlciIscW90PSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UudGVtcGVyYXR1cmUiLEVkPS4wMDEsSG90PSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UucmVwdWxzaW9uIixCXz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5vcHRpb25zIixHRT0xLjYwMDAwMDAyMzg0MTg1OCxWbD0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlIixWST0ib3JnLmVjbGlwc2UuZWxrLnByaW9yaXR5IixDeT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubm9kZU5vZGUiLFZvdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZUxhYmVsIix0SD0ib3JnLmVjbGlwc2UuZWxrLnJhbmRvbVNlZWQiLFJfPSJvcmcuZWNsaXBzZS5lbGsuc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzIixHST0ib3JnLmVjbGlwc2UuZWxrLmludGVyYWN0aXZlIixHb3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0Q29uc3RyYWludHMiLGVIPSJvcmcuZWNsaXBzZS5lbGsuZWRnZUxhYmVscy5pbmxpbmUiLGpfPSJvcmcuZWNsaXBzZS5lbGsub21pdE5vZGVNaWNyb0xheW91dCIsVDY9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5vcHRpb25zIixEND0ib3JnLmVjbGlwc2UuZWxrLm5vZGVTaXplLmNvbnN0cmFpbnRzIixVRT0ib3JnLmVjbGlwc2UuZWxrLm5vZGVMYWJlbHMucGxhY2VtZW50IixXRT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMucGxhY2VtZW50Iix3NnQ9Im9yaWdpbiIsaTFlPSJyYW5kb20iLHMxZT0iYm91bmRpbmdCb3gudXBMZWZ0IixhMWU9ImJvdW5kaW5nQm94Lmxvd1JpZ2h0Iix2NnQ9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MuZml4ZWQiLG02dD0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5kZXNpcmVkRWRnZUxlbmd0aCIseTZ0PSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmRpbWVuc2lvbiIseDZ0PSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmVwc2lsb24iLGs2dD0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5pdGVyYXRpb25MaW1pdCIsb2I9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MiLG8xZT0iRUxLIFN0cmVzcyIsQzY9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5taW5pbXVtIixuSD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5zdHJlc3MiLGMxZT0iTGF5ZXJlZCBsYXlvdXQiLF82PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQiLFVJPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcGFjdGlvbi5jb21wb25lbnRzIiwkXz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBhY3Rpb24ub25lZCIsckg9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLm9uZWQuYWxncyIsTDI9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLnJlY3RodWxsIixUZD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBvbmVudHMiLEowPSJOT05FIix4Yz17MzoxLDY6MSw0OjEsOToxLDU6MSwxMjI6MX0sdTFlPXszOjEsNjoxLDQ6MSw1OjEsMTQxOjEsMTA2OjEsMTIwOjF9LGlIPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcG91bmQiLG9zPXs1MToxfSx0dT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmdyYXBoIixVb3Q9IiAtPiAiLGwxZT0iTm90IHN1cHBvcnRlZCBieSBMR3JhcGgiLEU2dD0iUG9ydCBzaWRlIGlzIHVuZGVmaW5lZCIsV290PXszOjEsNjoxLDQ6MSw1OjEsNDc0OjEsMTQxOjEsMTA2OjEsMTIwOjF9LFlnPXszOjEsNjoxLDQ6MSw1OjEsMTQxOjEsMTkzOjEsMjAzOjEsMTA2OjEsMTIwOjF9LGgxZT17MzoxLDY6MSw0OjEsNToxLDE0MToxLDE5NDM6MSwyMDM6MSwxMDY6MSwxMjA6MX0sZjFlPWAoW3siJyAJXHIKYCxkMWU9YCldfSInIAlccgpgLGcxZT0iVGhlIGdpdmVuIHN0cmluZyBjb250YWlucyBwYXJ0cyB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgYXMgbnVtYmVycy4iLFdJPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5tYXRoIixwMWU9ezM6MSw0OjEsMTQyOjEsMjA3OjEsNDE0OjF9LGIxZT17MzoxLDQ6MSwxMTY6MSwyMDc6MSw0MTQ6MX0sR249Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkIixLZz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmdyYXBoLnRyYW5zZm9ybSIsdzFlPSJFbGtHcmFwaEltcG9ydGVyIix2MWU9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDAkVHlwZSIsbTFlPSJFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQxJFR5cGUiLHkxZT0iRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMiRUeXBlIix4MWU9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDQkVHlwZSIsazFlPSJOb2RlIG1hcmdpbiBjYWxjdWxhdGlvbiIsJG49Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUiLEUxZT0iT05FX1NJREVEX0dSRUVEWV9TV0lUQ0giLFQxZT0iVFdPX1NJREVEX0dSRUVEWV9TV0lUQ0giLFlvdD0iTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IHByb2Nlc3NvciAiLFQ2dD0iSW50ZXJtZWRpYXRlUHJvY2Vzc29yU3RyYXRlZ3kiLEtvdD0iTm9kZSAnIixDMWU9IkZJUlNUX1NFUEFSQVRFIixfMWU9IkxBU1RfU0VQQVJBVEUiLFMxZT0iT2RkIHBvcnQgc2lkZSBwcm9jZXNzaW5nIixfcz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5jb21wYWN0aW9uIix6Xz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5ncmVlZHlzd2l0Y2giLGMwPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlci5jb3VudGluZyIsWUk9ezIyNToxfSxTNj0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5sb29wcyIsR2w9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUubG9vcHMub3JkZXJpbmciLGNiPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLmxvb3BzLnJvdXRpbmciLHFfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLnByZXNlcnZlb3JkZXIiLENkPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLndyYXBwaW5nIixrYz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLm9wdGlvbnMiLFhvdD0iSU5URVJBQ1RJVkUiLEExZT0iREVQVEhfRklSU1QiLEwxZT0iRURHRV9MRU5HVEgiLE0xZT0iU0VMRl9MT09QUyIsRDFlPSJmaXJzdFRyeVdpdGhJbml0aWFsT3JkZXIiLEM2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZGlyZWN0aW9uQ29uZ3J1ZW5jeSIsXzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5mZWVkYmFja0VkZ2VzIixzSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaW50ZXJhY3RpdmVSZWZlcmVuY2VQb2ludCIsUzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5tZXJnZUVkZ2VzIixBNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm1lcmdlSGllcmFyY2h5RWRnZXMiLEw2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuYWxsb3dOb25GbG93UG9ydHNUb1N3aXRjaFNpZGVzIixNNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnBvcnRTb3J0aW5nU3RyYXRlZ3kiLEQ2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQudGhvcm91Z2huZXNzIixJNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnVubmVjZXNzYXJ5QmVuZHBvaW50cyIsTzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5nZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMiLFFvdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3ljbGVCcmVha2luZy5zdHJhdGVneSIsS0k9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLnN0cmF0ZWd5IixQNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLmxheWVyQ29uc3RyYWludCIsRjZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5sYXllckNob2ljZUNvbnN0cmFpbnQiLE42dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubGF5ZXJJZCIsWm90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5taW5XaWR0aC51cHBlckJvdW5kT25XaWR0aCIsSm90PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5taW5XaWR0aC51cHBlckxheWVyRXN0aW1hdGlvblNjYWxpbmdGYWN0b3IiLHRjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubm9kZVByb21vdGlvbi5zdHJhdGVneSIsZWN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5ub2RlUHJvbW90aW9uLm1heEl0ZXJhdGlvbnMiLG5jdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcuY29mZm1hbkdyYWhhbS5sYXllckJvdW5kIixIXz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uc3RyYXRlZ3kiLEI2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uZm9yY2VOb2RlTW9kZWxPcmRlciIscmN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5oaWVyYXJjaGljYWxTd2VlcGluZXNzIixpY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLnNlbWlJbnRlcmFjdGl2ZSIsUjZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5wb3NpdGlvbkNob2ljZUNvbnN0cmFpbnQiLGo2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24ucG9zaXRpb25JZCIsJDZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2guYWN0aXZhdGlvblRocmVzaG9sZCIsc2N0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2gudHlwZSIsYUg9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaEhpZXJhcmNoaWNhbC50eXBlIixJND0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5zdHJhdGVneSIsb0g9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuZmF2b3JTdHJhaWdodEVkZ2VzIixhY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuYmsuZWRnZVN0cmFpZ2h0ZW5pbmciLG9jdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5iay5maXhlZEFsaWdubWVudCIsY2N0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub2RlUGxhY2VtZW50LmxpbmVhclNlZ21lbnRzLmRlZmxlY3Rpb25EYW1wZW5pbmciLHVjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkiLGxjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkuZGVmYXVsdCIsejZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcERpc3RyaWJ1dGlvbiIscTZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcE9yZGVyaW5nIixjSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5tb2RlIix1SD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5zbG9wcHkubGF5ZXJTcGFjaW5nRmFjdG9yIixoY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VSb3V0aW5nLnBvbHlsaW5lLnNsb3BlZEVkZ2Vab25lV2lkdGgiLEg2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5iYXNlVmFsdWUiLFY2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnMiLEc2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlRWRnZUJldHdlZW5MYXllcnMiLFU2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5ub2RlTm9kZUJldHdlZW5MYXllcnMiLFc2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQucHJpb3JpdHkuZGlyZWN0aW9uIixZNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnByaW9yaXR5LnNob3J0bmVzcyIsSzZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5wcmlvcml0eS5zdHJhaWdodG5lc3MiLGZjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5jb25uZWN0ZWRDb21wb25lbnRzIixYNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbXBhY3Rpb24ucG9zdENvbXBhY3Rpb24uc3RyYXRlZ3kiLFE2dD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbi5jb25zdHJhaW50cyIsbEg9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmhpZ2hEZWdyZWVOb2Rlcy50cmVhdG1lbnQiLGRjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaGlnaERlZ3JlZU5vZGVzLnRocmVzaG9sZCIsZ2N0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5oaWdoRGVncmVlTm9kZXMudHJlZUhlaWdodCIsdGc9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnN0cmF0ZWd5IixoSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuYWRkaXRpb25hbEVkZ2VTcGFjaW5nIixmSD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY29ycmVjdGlvbkZhY3RvciIsVl89Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcuc3RyYXRlZ3kiLHBjdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY3V0dGluZy5jdXRzIixiY3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcubXNkLmZyZWVkb20iLGRIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy52YWxpZGlmeS5zdHJhdGVneSIsZ0g9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnZhbGlkaWZ5LmZvcmJpZGRlbkluZGljZXMiLHBIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuaW1wcm92ZUN1dHMiLGJIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuZGlzdGFuY2VQZW5hbHR5Iix3Y3Q9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLm11bHRpRWRnZS5pbXByb3ZlV3JhcHBlZEVkZ2VzIixaNnQ9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VMYWJlbHMuc2lkZVNlbGVjdGlvbiIsSjZ0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlTGFiZWxzLmNlbnRlckxhYmVsUGxhY2VtZW50U3RyYXRlZ3kiLHdIPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuc3RyYXRlZ3kiLHRrdD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLm5vTW9kZWxPcmRlciIsdmN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY29tcG9uZW50cyIsZWt0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIubG9uZ0VkZ2VTdHJhdGVneSIsbWN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY3Jvc3NpbmdDb3VudGVyTm9kZUluZmx1ZW5jZSIseWN0PSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY3Jvc3NpbmdDb3VudGVyUG9ydEluZmx1ZW5jZSIseGN0PSJsYXllcmluZyIsSTFlPSJsYXllcmluZy5taW5XaWR0aCIsTzFlPSJsYXllcmluZy5ub2RlUHJvbW90aW9uIixYST0iY3Jvc3NpbmdNaW5pbWl6YXRpb24iLHZIPSJvcmcuZWNsaXBzZS5lbGsuaGllcmFyY2h5SGFuZGxpbmciLFAxZT0iY3Jvc3NpbmdNaW5pbWl6YXRpb24uZ3JlZWR5U3dpdGNoIixGMWU9Im5vZGVQbGFjZW1lbnQiLE4xZT0ibm9kZVBsYWNlbWVudC5iayIsQjFlPSJlZGdlUm91dGluZyIsUUk9Im9yZy5lY2xpcHNlLmVsay5lZGdlUm91dGluZyIsUjE9InNwYWNpbmciLG5rdD0icHJpb3JpdHkiLHJrdD0iY29tcGFjdGlvbiIsUjFlPSJjb21wYWN0aW9uLnBvc3RDb21wYWN0aW9uIixqMWU9IlNwZWNpZmllcyB3aGV0aGVyIGFuZCBob3cgcG9zdC1wcm9jZXNzIGNvbXBhY3Rpb24gaXMgYXBwbGllZC4iLGlrdD0iaGlnaERlZ3JlZU5vZGVzIixza3Q9IndyYXBwaW5nIiwkMWU9IndyYXBwaW5nLmN1dHRpbmciLHoxZT0id3JhcHBpbmcudmFsaWRpZnkiLGFrdD0id3JhcHBpbmcubXVsdGlFZGdlIixrY3Q9ImVkZ2VMYWJlbHMiLFpJPSJjb25zaWRlck1vZGVsT3JkZXIiLG9rdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuY29tbWVudENvbW1lbnQiLGNrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuY29tbWVudE5vZGUiLHVrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZUVkZ2UiLGxrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZU5vZGUiLGhrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubGFiZWxMYWJlbCIsZmt0PSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbFBvcnRIb3Jpem9udGFsIixka3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsUG9ydFZlcnRpY2FsIixna3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsTm9kZSIscGt0PSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5ub2RlU2VsZkxvb3AiLGJrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcucG9ydFBvcnQiLHdrdD0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuaW5kaXZpZHVhbCIsdmt0PSJvcmcuZWNsaXBzZS5lbGsucG9ydC5ib3JkZXJPZmZzZXQiLG1rdD0ib3JnLmVjbGlwc2UuZWxrLm5vTGF5b3V0Iix5a3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0LnNpZGUiLEpJPSJvcmcuZWNsaXBzZS5lbGsuZGVidWdNb2RlIix4a3Q9Im9yZy5lY2xpcHNlLmVsay5hbGlnbm1lbnQiLGtrdD0ib3JnLmVjbGlwc2UuZWxrLmluc2lkZVNlbGZMb29wcy5hY3RpdmF0ZSIsRWt0PSJvcmcuZWNsaXBzZS5lbGsuaW5zaWRlU2VsZkxvb3BzLnlvIixFY3Q9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5maXhlZEdyYXBoU2l6ZSIsVGt0PSJvcmcuZWNsaXBzZS5lbGsuZGlyZWN0aW9uIixDa3Q9Im9yZy5lY2xpcHNlLmVsay5ub2RlTGFiZWxzLnBhZGRpbmciLF9rdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMubmV4dFRvUG9ydElmUG9zc2libGUiLFNrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMudHJlYXRBc0dyb3VwIixBa3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0QWxpZ25tZW50LmRlZmF1bHQiLExrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQubm9ydGgiLE1rdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQuc291dGgiLERrdD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQud2VzdCIsSWt0PSJvcmcuZWNsaXBzZS5lbGsucG9ydEFsaWdubWVudC5lYXN0IixtSD0ib3JnLmVjbGlwc2UuZWxrLmNvbnRlbnRBbGlnbm1lbnQiLE9rdD0ib3JnLmVjbGlwc2UuZWxrLmp1bmN0aW9uUG9pbnRzIixQa3Q9Im9yZy5lY2xpcHNlLmVsay5lZGdlTGFiZWxzLnBsYWNlbWVudCIsRmt0PSJvcmcuZWNsaXBzZS5lbGsucG9ydC5pbmRleCIsTmt0PSJvcmcuZWNsaXBzZS5lbGsuY29tbWVudEJveCIsQmt0PSJvcmcuZWNsaXBzZS5lbGsuaHlwZXJub2RlIixSa3Q9Im9yZy5lY2xpcHNlLmVsay5wb3J0LmFuY2hvciIsVGN0PSJvcmcuZWNsaXBzZS5lbGsucGFydGl0aW9uaW5nLmFjdGl2YXRlIixDY3Q9Im9yZy5lY2xpcHNlLmVsay5wYXJ0aXRpb25pbmcucGFydGl0aW9uIix5SD0ib3JnLmVjbGlwc2UuZWxrLnBvc2l0aW9uIixqa3Q9Im9yZy5lY2xpcHNlLmVsay5tYXJnaW5zIiwka3Q9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLnBvcnRzU3Vycm91bmRpbmciLF9jdD0ib3JnLmVjbGlwc2UuZWxrLmludGVyYWN0aXZlTGF5b3V0IixFYz0ib3JnLmVjbGlwc2UuZWxrLmNvcmUudXRpbCIsemt0PXszOjEsNDoxLDU6MSw1OTM6MX0scTFlPSJORVRXT1JLX1NJTVBMRVgiLHpjPXsxMjM6MSw1MToxfSx4SD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAxY3ljbGVzIixfeT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAybGF5ZXJzIixxa3Q9ezQwMjoxLDIyNToxfSxIMWU9ezgzMjoxLDM6MSw0OjF9LHF1PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlciIsdW89Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNG5vZGVzIixWMWU9ezM6MSw0OjEsNToxLDg0MDoxfSxfZD0xZS01LHViPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDRub2Rlcy5iayIsU2N0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcyIsdDE9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNWVkZ2VzLm9ydGhvZ29uYWwiLEFjdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnA1ZWRnZXMub3J0aG9nb25hbC5kaXJlY3Rpb24iLExjdD0xZS02LFN5PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcy5zcGxpbmVzIixNY3Q9LjA5OTk5OTk5OTk5OTk5OTk4LGtIPTFlLTgsRzFlPTQuNzEyMzg4OTgwMzg0NjksVTFlPTMuMTQxNTkyNjUzNTg5NzkzLEdfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZSIsVV89Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLmdyYXBoIixBNj0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUuaW50ZXJtZWRpYXRlIixXMWU9IlNldCBuZWlnaGJvcnMgaW4gbGV2ZWwiLFkxZT0iREVTQ0VOREFOVFMiLEhrdD0ib3JnLmVjbGlwc2UuZWxrLm1ydHJlZS53ZWlnaHRpbmciLFZrdD0ib3JnLmVjbGlwc2UuZWxrLm1ydHJlZS5zZWFyY2hPcmRlciIsRUg9Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLm9wdGlvbnMiLFhnPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlIixLMWU9Im9yZy5lY2xpcHNlLmVsay50cmVlIixHa3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsIixPND02LjI4MzE4NTMwNzE3OTU4NixVa3Q9NWUtMzI0LFgxZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuaW50ZXJtZWRpYXRlIixEY3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZS5jb21wYWN0aW9uIixRMWU9ezM6MSw0OjEsNToxLDEwNjoxfSxXa3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZS5vcHRpbWl6YXRpb24iLEljdD0iTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IG9wdGlvbiAiLFdfPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5vcHRpb25zIixZa3Q9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwub3JkZXJJZCIsS2t0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnJhZGl1cyIsT2N0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3RvciIsUGN0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3Rpb25TdGVwU2l6ZSIsWGt0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnNvcnRlciIsUWt0PSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLndlZGdlQ3JpdGVyaWEiLFprdD0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5vcHRpbWl6YXRpb25Dcml0ZXJpYSIsU2Q9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwiLFoxZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwucDFwb3NpdGlvbi53ZWRnZSIsSmt0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5zb3J0aW5nIixKMWU9NS40OTc3ODcxNDM3ODIxMzgsdGRlPTMuOTI2OTkwODE2OTg3MjQxNCxlZGU9Mi4zNTYxOTQ0OTAxOTIzNDUsbmRlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nIixUSD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZy5maXJzdGl0ZXJhdGlvbiIsRmN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLm9wdGlvbnMiLHQ4dD0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLm9wdGltaXphdGlvbkdvYWwiLGU4dD0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLmxhc3RQbGFjZVNoaWZ0IixuOHQ9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5jdXJyZW50UG9zaXRpb24iLHI4dD0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLmRlc2lyZWRQb3NpdGlvbiIsaTh0PSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcub25seUZpcnN0SXRlcmF0aW9uIixzOHQ9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5yb3dDb21wYWN0aW9uIixOY3Q9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5leHBhbmRUb0FzcGVjdFJhdGlvIixhOHQ9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy50YXJnZXRXaWR0aCIsQ0g9Im9yZy5lY2xpcHNlLmVsay5leHBhbmROb2RlcyIsUGg9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZyIsdE89Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcudXRpbCIsX0g9Ik5vIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSBmb3IgIixBeT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZSIsTHk9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUub3B0aW9ucyIsa3Y9Im9yZy5lY2xpcHNlLmVsay5zcG9yZUNvbXBhY3Rpb24iLEJjdD0ib3JnLmVjbGlwc2UuZWxrLnVuZGVybHlpbmdMYXlvdXRBbGdvcml0aG0iLG84dD0ib3JnLmVjbGlwc2UuZWxrLnByb2Nlc3NpbmdPcmRlci50cmVlQ29uc3RydWN0aW9uIixjOHQ9Im9yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIuc3Bhbm5pbmdUcmVlQ29zdEZ1bmN0aW9uIixSY3Q9Im9yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIucHJlZmVycmVkUm9vdCIsamN0PSJvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnJvb3RTZWxlY3Rpb24iLCRjdD0ib3JnLmVjbGlwc2UuZWxrLnN0cnVjdHVyZS5zdHJ1Y3R1cmVFeHRyYWN0aW9uU3RyYXRlZ3kiLHU4dD0ib3JnLmVjbGlwc2UuZWxrLmNvbXBhY3Rpb24uY29tcGFjdGlvblN0cmF0ZWd5IixsOHQ9Im9yZy5lY2xpcHNlLmVsay5jb21wYWN0aW9uLm9ydGhvZ29uYWwiLGg4dD0ib3JnLmVjbGlwc2UuZWxrLm92ZXJsYXBSZW1vdmFsLm1heEl0ZXJhdGlvbnMiLGY4dD0ib3JnLmVjbGlwc2UuZWxrLm92ZXJsYXBSZW1vdmFsLnJ1blNjYW5saW5lIix6Y3Q9InByb2Nlc3NpbmdPcmRlciIscmRlPSJvdmVybGFwUmVtb3ZhbCIsWUU9Im9yZy5lY2xpcHNlLmVsay5zcG9yZU92ZXJsYXAiLGlkZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5wMXN0cnVjdHVyZSIscWN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLnAycHJvY2Vzc2luZ29yZGVyIixIY3Q9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUucDNleGVjdXRpb24iLHNkZT0iSW52YWxpZCBpbmRleDogIixLRT0ib3JnLmVjbGlwc2UuZWxrLmNvcmUuYWxnIixQND17MzMxOjF9LE15PXsyODg6MX0sYWRlPSJNYWtlIHN1cmUgaXRzIHR5cGUgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSAiLGQ4dD0iIHV0aWxpdHkgY2xhc3MuIixYRT0idHJ1ZSIsVmN0PSJmYWxzZSIsb2RlPSJDb3VsZG4ndCBjbG9uZSBwcm9wZXJ0eSAnIixFdj0uMDUsRmg9Im9yZy5lY2xpcHNlLmVsay5jb3JlLm9wdGlvbnMiLGNkZT0xLjI5OTk5OTk1MjMxNjI4NDIsVHY9Im9yZy5lY2xpcHNlLmVsay5ib3giLGc4dD0ib3JnLmVjbGlwc2UuZWxrLmJveC5wYWNraW5nTW9kZSIsdWRlPSJvcmcuZWNsaXBzZS5lbGsuYWxnb3JpdGhtIixsZGU9Im9yZy5lY2xpcHNlLmVsay5yZXNvbHZlZEFsZ29yaXRobSIscDh0PSJvcmcuZWNsaXBzZS5lbGsuYmVuZFBvaW50cyIsVXhuPSJvcmcuZWNsaXBzZS5lbGsubGFiZWxNYW5hZ2VyIixoZGU9Im9yZy5lY2xpcHNlLmVsay5zY2FsZUZhY3RvciIsZmRlPSJvcmcuZWNsaXBzZS5lbGsuYW5pbWF0ZSIsZGRlPSJvcmcuZWNsaXBzZS5lbGsuYW5pbVRpbWVGYWN0b3IiLGdkZT0ib3JnLmVjbGlwc2UuZWxrLmxheW91dEFuY2VzdG9ycyIscGRlPSJvcmcuZWNsaXBzZS5lbGsubWF4QW5pbVRpbWUiLGJkZT0ib3JnLmVjbGlwc2UuZWxrLm1pbkFuaW1UaW1lIix3ZGU9Im9yZy5lY2xpcHNlLmVsay5wcm9ncmVzc0JhciIsdmRlPSJvcmcuZWNsaXBzZS5lbGsudmFsaWRhdGVHcmFwaCIsbWRlPSJvcmcuZWNsaXBzZS5lbGsudmFsaWRhdGVPcHRpb25zIix5ZGU9Im9yZy5lY2xpcHNlLmVsay56b29tVG9GaXQiLFd4bj0ib3JnLmVjbGlwc2UuZWxrLmZvbnQubmFtZSIseGRlPSJvcmcuZWNsaXBzZS5lbGsuZm9udC5zaXplIixrZGU9Im9yZy5lY2xpcHNlLmVsay5lZGdlLnR5cGUiLEVkZT0icGFydGl0aW9uaW5nIixUZGU9Im5vZGVMYWJlbHMiLFNIPSJwb3J0QWxpZ25tZW50IixHY3Q9Im5vZGVTaXplIixVY3Q9InBvcnQiLGI4dD0icG9ydExhYmVscyIsQ2RlPSJpbnNpZGVTZWxmTG9vcHMiLFlfPSJvcmcuZWNsaXBzZS5lbGsuZml4ZWQiLEFIPSJvcmcuZWNsaXBzZS5lbGsucmFuZG9tIixfZGU9InBvcnQgbXVzdCBoYXZlIGEgcGFyZW50IG5vZGUgdG8gY2FsY3VsYXRlIHRoZSBwb3J0IHNpZGUiLFNkZT0iVGhlIGVkZ2UgbmVlZHMgdG8gaGF2ZSBleGFjdGx5IG9uZSBlZGdlIHNlY3Rpb24uIEZvdW5kOiAiLEtfPSJvcmcuZWNsaXBzZS5lbGsuY29yZS51dGlsLmFkYXB0ZXJzIixwaD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIixGND0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoIixBZGU9IkVNYXBQcm9wZXJ0eUhvbGRlciIsTGRlPSJFbGtCZW5kUG9pbnQiLE1kZT0iRWxrR3JhcGhFbGVtZW50IixEZGU9IkVsa0Nvbm5lY3RhYmxlU2hhcGUiLHc4dD0iRWxrRWRnZSIsSWRlPSJFbGtFZGdlU2VjdGlvbiIsT2RlPSJFTW9kZWxFbGVtZW50IixQZGU9IkVOYW1lZEVsZW1lbnQiLHY4dD0iRWxrTGFiZWwiLG04dD0iRWxrTm9kZSIseTh0PSJFbGtQb3J0IixGZGU9ezkyOjEsOTA6MX0sTDY9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwiLGxiPSJUaGUgZmVhdHVyZSAnIixYXz0iJyBpcyBub3QgYSB2YWxpZCBjaGFuZ2VhYmxlIGZlYXR1cmUiLE5kZT0iRXhwZWN0aW5nIG51bGwiLFdjdD0iJyBpcyBub3QgYSB2YWxpZCBmZWF0dXJlIixCZGU9IlRoZSBmZWF0dXJlIElEIixSZGU9IiBpcyBub3QgYSB2YWxpZCBmZWF0dXJlIElEIixkYz0zMjc2OCxqZGU9ezEwNToxLDkyOjEsOTA6MSw1NjoxLDQ5OjEsOTc6MX0sTW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsIixNMj0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLmltcGwiLFFfPSJSZWN1cnNpdmUgY29udGFpbm1lbnQgbm90IGFsbG93ZWQgZm9yICIsUUU9IlRoZSBkYXRhdHlwZSAnIixDdj0iJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIixZY3Q9IlRoZSB2YWx1ZSAnIixOND17MTkwOjEsMzoxLDQ6MX0sS2N0PSJUaGUgY2xhc3MgJyIsWkU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZWxrL0Vsa0dyYXBoIix4Zj0xMDI0LHg4dD0icHJvcGVydHkiLFpfPSJ2YWx1ZSIsWGN0PSJzb3VyY2UiLCRkZT0icHJvcGVydGllcyIsemRlPSJpZGVudGlmaWVyIixRY3Q9ImhlaWdodCIsWmN0PSJ3aWR0aCIsSmN0PSJwYXJlbnQiLHR1dD0idGV4dCIsZXV0PSJjaGlsZHJlbiIscWRlPSJoaWVyYXJjaGljYWwiLGs4dD0ic291cmNlcyIsbnV0PSJ0YXJnZXRzIixFOHQ9InNlY3Rpb25zIixMSD0iYmVuZFBvaW50cyIsVDh0PSJvdXRnb2luZ1NoYXBlIixDOHQ9ImluY29taW5nU2hhcGUiLF84dD0ib3V0Z29pbmdTZWN0aW9ucyIsUzh0PSJpbmNvbWluZ1NlY3Rpb25zIixSYT0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsIixBOHQ9IlNldmVyZSBpbXBsZW1lbnRhdGlvbiBlcnJvciBpbiB0aGUgSnNvbiB0byBFbGtHcmFwaCBpbXBvcnRlci4iLEFkPSJpZCIsbWE9Im9yZy5lY2xpcHNlLmVsay5ncmFwaC5qc29uIixMOHQ9IlVuaGFuZGxlZCBwYXJhbWV0ZXIgdHlwZXM6ICIsSGRlPSJzdGFydFBvaW50IixWZGU9IkFuIGVkZ2UgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBzb3VyY2UgYW5kIG9uZSB0YXJnZXQgKGVkZ2UgaWQ6ICciLEpFPSInKS4iLEdkZT0iUmVmZXJlbmNlZCBlZGdlIHNlY3Rpb24gZG9lcyBub3QgZXhpc3Q6ICIsVWRlPSIgKGVkZ2UgaWQ6ICciLE04dD0idGFyZ2V0IixXZGU9InNvdXJjZVBvaW50IixZZGU9InRhcmdldFBvaW50IixNSD0iZ3JvdXAiLGNpPSJuYW1lIixLZGU9ImNvbm5lY3RhYmxlU2hhcGUgY2Fubm90IGJlIG51bGwiLFhkZT0iZWRnZSBjYW5ub3QgYmUgbnVsbCIscnV0PSJQYXNzZWQgZWRnZSBpcyBub3QgJ3NpbXBsZScuIixESD0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLnV0aWwiLGVPPSJUaGUgJ25vIGR1cGxpY2F0ZXMnIGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQiLGl1dD0idGFyZ2V0SW5kZXg9IixEMj0iLCBzaXplPSIsc3V0PSJzb3VyY2VJbmRleD0iLExkPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxfSxhdXQ9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSw0NzoxLDE1OjEsNTQ6MSw2NzoxLDYzOjEsNTg6MSw1ODg6MX0sSUg9ImxvZ2dpbmciLFFkZT0ibWVhc3VyZUV4ZWN1dGlvblRpbWUiLFpkZT0icGFyc2VyLnBhcnNlLjEiLEpkZT0icGFyc2VyLnBhcnNlLjIiLE9IPSJwYXJzZXIubmV4dC4xIixvdXQ9InBhcnNlci5uZXh0LjIiLHQwZT0icGFyc2VyLm5leHQuMyIsZTBlPSJwYXJzZXIubmV4dC40IixJMj0icGFyc2VyLmZhY3Rvci4xIixEOHQ9InBhcnNlci5mYWN0b3IuMiIsbjBlPSJwYXJzZXIuZmFjdG9yLjMiLHIwZT0icGFyc2VyLmZhY3Rvci40IixpMGU9InBhcnNlci5mYWN0b3IuNSIsczBlPSJwYXJzZXIuZmFjdG9yLjYiLGEwZT0icGFyc2VyLmF0b20uMSIsbzBlPSJwYXJzZXIuYXRvbS4yIixjMGU9InBhcnNlci5hdG9tLjMiLEk4dD0icGFyc2VyLmF0b20uNCIsY3V0PSJwYXJzZXIuYXRvbS41IixPOHQ9InBhcnNlci5jYy4xIixQSD0icGFyc2VyLmNjLjIiLHUwZT0icGFyc2VyLmNjLjMiLGwwZT0icGFyc2VyLmNjLjUiLFA4dD0icGFyc2VyLmNjLjYiLEY4dD0icGFyc2VyLmNjLjciLHV1dD0icGFyc2VyLmNjLjgiLGgwZT0icGFyc2VyLm9wZS4xIixmMGU9InBhcnNlci5vcGUuMiIsZDBlPSJwYXJzZXIub3BlLjMiLFFnPSJwYXJzZXIuZGVzY2FwZS4xIixnMGU9InBhcnNlci5kZXNjYXBlLjIiLHAwZT0icGFyc2VyLmRlc2NhcGUuMyIsYjBlPSJwYXJzZXIuZGVzY2FwZS40Iix3MGU9InBhcnNlci5kZXNjYXBlLjUiLGJoPSJwYXJzZXIucHJvY2Vzcy4xIix2MGU9InBhcnNlci5xdWFudGlmaWVyLjEiLG0wZT0icGFyc2VyLnF1YW50aWZpZXIuMiIseTBlPSJwYXJzZXIucXVhbnRpZmllci4zIix4MGU9InBhcnNlci5xdWFudGlmaWVyLjQiLE44dD0icGFyc2VyLnF1YW50aWZpZXIuNSIsazBlPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeSIsQjh0PXs0MTU6MSw2NzI6MX0sRTBlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw2NzoxLDU4OjF9LG5PPXszNjY6MSwxNDM6MX0sSl89ImluZGV4PSIsbHV0PXszOjEsNDoxLDU6MSwxMjY6MX0sVDBlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNTg6MX0sUjh0PXszOjEsNjoxLDQ6MSw1OjEsMTkyOjF9LEMwZT17MzoxLDQ6MSw1OjEsMTY1OjEsMzY3OjF9LF8wZT0iOy8/OkAmPSskLCIsUzBlPSJpbnZhbGlkIGF1dGhvcml0eTogIixBMGU9IkVBbm5vdGF0aW9uIixMMGU9IkVUeXBlZEVsZW1lbnQiLE0wZT0iRVN0cnVjdHVyYWxGZWF0dXJlIixEMGU9IkVBdHRyaWJ1dGUiLEkwZT0iRUNsYXNzaWZpZXIiLE8wZT0iRUVudW1MaXRlcmFsIixQMGU9IkVHZW5lcmljVHlwZSIsRjBlPSJFT3BlcmF0aW9uIixOMGU9IkVQYXJhbWV0ZXIiLEIwZT0iRVJlZmVyZW5jZSIsUjBlPSJFVHlwZVBhcmFtZXRlciIsJGk9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsIixodXQ9ezc2OjF9LGo4dD17MzoxLDIwOjEsMTQ6MSwxNToxLDU4OjEsNTg5OjEsNzY6MSw2OToxLDk1OjF9LGowZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRmVhdHVyZU1hcCRFbnRyeSIsSHU9ODE5MixEeT0yMDQ4LHRTPSJieXRlIixGSD0iY2hhciIsZVM9ImRvdWJsZSIsblM9ImZsb2F0IixyUz0iaW50IixpUz0ibG9uZyIsc1M9InNob3J0IiwkMGU9ImphdmEubGFuZy5PYmplY3QiLEI0PXszOjEsNDoxLDU6MSwyNDc6MX0sJDh0PXszOjEsNDoxLDU6MSw2NzM6MX0sejBlPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxLDY5OjF9LHpvPXszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1NDoxLDY3OjEsNjM6MSw1ODoxLDc2OjEsNjk6MSw5NToxfSxyTz0ibWl4ZWQiLFlyPSJodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEiLE5oPSJraW5kIixxMGU9ezM6MSw0OjEsNToxLDY3NDoxfSx6OHQ9ezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDY3OjEsNTg6MSw3NjoxLDY5OjEsOTU6MX0sTkg9ezIwOjEsMjg6MSw1MjoxLDE0OjEsMTU6MSw1ODoxLDY5OjF9LEJIPXs0NzoxLDEyNToxLDI3OToxfSxSSD17NzI6MSwzMzI6MX0sakg9IlRoZSB2YWx1ZSBvZiB0eXBlICciLCRIPSInIG11c3QgYmUgb2YgdHlwZSAnIixSND0xMzE2LEJoPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIix6SD0tMzI3NjgsX3Y9ImNvbnN0cmFpbnRzIixBYT0iYmFzZVR5cGUiLEgwZT0iZ2V0RVN0cnVjdHVyYWxGZWF0dXJlIixWMGU9ImdldEZlYXR1cmVJRCIsYVM9ImZlYXR1cmUiLEcwZT0iZ2V0T3BlcmF0aW9uSUQiLHE4dD0ib3BlcmF0aW9uIixVMGU9ImRlZmF1bHRWYWx1ZSIsVzBlPSJlVHlwZVBhcmFtZXRlcnMiLFkwZT0iaXNJbnN0YW5jZSIsSzBlPSJnZXRFRW51bUxpdGVyYWwiLFgwZT0iZUNvbnRhaW5pbmdDbGFzcyIsc2k9ezU1OjF9LFEwZT17MzoxLDQ6MSw1OjEsMTE5OjF9LFowZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlIixKMGU9ezkyOjEsOTA6MSw1OTE6MSwxOTM1OjF9LGZ1dD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwiLEg4dD0idW5zcGVjaWZpZWQiLGlPPSJzaW1wbGUiLHFIPSJhdHRyaWJ1dGUiLHRnZT0iYXR0cmlidXRlV2lsZGNhcmQiLEhIPSJlbGVtZW50IixkdXQ9ImVsZW1lbnRXaWxkY2FyZCIsZTE9ImNvbGxhcHNlIixndXQ9Iml0ZW1UeXBlIixWSD0ibmFtZXNwYWNlIixzTz0iIyN0YXJnZXROYW1lc3BhY2UiLFJoPSJ3aGl0ZVNwYWNlIixWOHQ9IndpbGRjYXJkcyIsTzI9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZSIscHV0PSIjI2FueSIsdDc9InVuaW5pdGlhbGl6ZWQiLGFPPSJUaGUgbXVsdGlwbGljaXR5IGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQiLEdIPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUiLGVnZT0iUHJvY2Vzc2luZ0luc3RydWN0aW9uIixuZ2U9IlNpbXBsZUFueVR5cGUiLHJnZT0iWE1MVHlwZURvY3VtZW50Um9vdCIseHM9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS5pbXBsIixvTz0iSU5GIixpZ2U9InByb2Nlc3NpbmciLHNnZT0iRU5USVRJRVNfLl9iYXNlIixHOHQ9Im1pbkxlbmd0aCIsVTh0PSJFTlRJVFkiLFVIPSJOQ05hbWUiLGFnZT0iSURSRUZTXy5fYmFzZSIsVzh0PSJpbnRlZ2VyIixidXQ9InRva2VuIix3dXQ9InBhdHRlcm4iLG9nZT0iW2EtekEtWl17MSw4fSgtW2EtekEtWjAtOV17MSw4fSkqIixZOHQ9IlxcaVxcYyoiLGNnZT0iW1xcaS1bOl1dW1xcYy1bOl1dKiIsdWdlPSJub25Qb3NpdGl2ZUludGVnZXIiLGNPPSJtYXhJbmNsdXNpdmUiLEs4dD0iTk1UT0tFTiIsbGdlPSJOTVRPS0VOU18uX2Jhc2UiLFg4dD0ibm9uTmVnYXRpdmVJbnRlZ2VyIix1Tz0ibWluSW5jbHVzaXZlIixoZ2U9Im5vcm1hbGl6ZWRTdHJpbmciLGZnZT0idW5zaWduZWRCeXRlIixkZ2U9InVuc2lnbmVkSW50IixnZ2U9IjE4NDQ2NzQ0MDczNzA5NTUxNjE1IixwZ2U9InVuc2lnbmVkU2hvcnQiLGJnZT0icHJvY2Vzc2luZ0luc3RydWN0aW9uIixaZz0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmludGVybmFsIixlNz0xMTE0MTExLHdnZT0iSW50ZXJuYWwgRXJyb3I6IHNob3J0aGFuZHM6IFxcdSIsb1M9InhtbDppc0RpZ2l0Iix2dXQ9InhtbDppc1dvcmQiLG11dD0ieG1sOmlzU3BhY2UiLHl1dD0ieG1sOmlzTmFtZUNoYXIiLHh1dD0ieG1sOmlzSW5pdGlhbE5hbWVDaGFyIix2Z2U9IjA52aDZqduw27ngpabgpa/gp6bgp6/gqabgqa/gq6bgq6/grabgra/gr6fgr6/gsabgsa/gs6bgs6/gtabgta/guZDguZngu5Dgu5ngvKDgvKkiLG1nZT0iQVphesOAw5bDmMO2w7jEscS0xL7FgcWIxYrFvsaAx4PHjcewx7THtce6yJfJkMqoyrvLgc6GzobOiM6KzozOjM6OzqHOo8+Oz5DPls+az5rPnM+cz57Pns+gz6DPos+z0IHQjNCO0Y/RkdGc0Z7SgdKQ04TTh9OI04vTjNOQ06vTrtO107jTudSx1ZbVmdWZ1aHWhteQ16rXsNey2KHYutmB2YrZsdq32rravtuA247bkNuT25Xbldul26bgpIXgpLngpL3gpL3gpZjgpaHgpoXgpozgpo/gppDgppPgpqjgpqrgprDgprLgprLgprbgprngp5zgp53gp5/gp6Hgp7Dgp7HgqIXgqIrgqI/gqJDgqJPgqKjgqKrgqLDgqLLgqLPgqLXgqLbgqLjgqLngqZngqZzgqZ7gqZ7gqbLgqbTgqoXgqovgqo3gqo3gqo/gqpHgqpPgqqjgqqrgqrDgqrLgqrPgqrXgqrngqr3gqr3gq6Dgq6DgrIXgrIzgrI/grJDgrJPgrKjgrKrgrLDgrLLgrLPgrLbgrLngrL3grL3grZzgrZ3grZ/graHgroXgrorgro7grpDgrpLgrpXgrpngrprgrpzgrpzgrp7grp/grqPgrqTgrqjgrqrgrq7grrXgrrfgrrngsIXgsIzgsI7gsJDgsJLgsKjgsKrgsLPgsLXgsLngsaDgsaHgsoXgsozgso7gspDgspLgsqjgsqrgsrPgsrXgsrngs57gs57gs6Dgs6HgtIXgtIzgtI7gtJDgtJLgtKjgtKrgtLngtaDgtaHguIHguK7guLDguLDguLLguLPguYDguYXguoHguoLguoTguoTguofguojguorguorguo3guo3gupTgupfgupngup/guqHguqPguqXguqXguqfguqfguqrguqvguq3guq7gurDgurDgurLgurPgur3gur3gu4Dgu4TgvYDgvYfgvYngvanhgqDhg4Xhg5Dhg7bhhIDhhIDhhILhhIPhhIXhhIfhhInhhInhhIvhhIzhhI7hhJLhhLzhhLzhhL7hhL7hhYDhhYDhhYzhhYzhhY7hhY7hhZDhhZDhhZThhZXhhZnhhZnhhZ/hhaHhhaPhhaPhhaXhhaXhhafhhafhhanhhanhha3hha7hhbLhhbPhhbXhhbXhhp7hhp7hhqjhhqjhhqvhhqvhhq7hhq/hhrfhhrjhhrrhhrrhhrzhh4Lhh6vhh6vhh7Dhh7Dhh7nhh7nhuIDhupvhuqDhu7nhvIDhvJXhvJjhvJ3hvKDhvYXhvYjhvY3hvZDhvZfhvZnhvZnhvZvhvZvhvZ3hvZ3hvZ/hvb3hvoDhvrThvrbhvrzhvr7hvr7hv4Lhv4Thv4bhv4zhv5Dhv5Phv5bhv5vhv6Dhv6zhv7Lhv7Thv7bhv7zihKbihKbihKrihKvihK7ihK7ihoDihoLjgIfjgIfjgKHjgKnjgYHjgpTjgqHjg7rjhIXjhKzkuIDpvqXqsIDtnqMiLHlnZT0iUHJpdmF0ZSBVc2UiLGt1dD0iQVNTSUdORUQiLEV1dD0iXDB/woDDv8SAxb/GgMmPyZDKr8qwy7/MgM2vzbDPv9CA07/UsNaP1pDXv9iA27/cgN2P3oDev+CkgOClv+CmgOCnv+CogOCpv+CqgOCrv+CsgOCtv+CugOCvv+CwgOCxv+CygOCzv+C0gOC1v+C2gOC3v+C4gOC5v+C6gOC7v+C8gOC/v+GAgOGCn+GCoOGDv+GEgOGHv+GIgOGNv+GOoOGPv+GQgOGZv+GagOGan+GaoOGbv+GegOGfv+GggOGir+G4gOG7v+G8gOG/v+KAgOKBr+KBsOKCn+KCoOKDj+KDkOKDv+KEgOKFj+KFkOKGj+KGkOKHv+KIgOKLv+KMgOKPv+KQgOKQv+KRgOKRn+KRoOKTv+KUgOKVv+KWgOKWn+KWoOKXv+KYgOKbv+KcgOKev+KggOKjv+K6gOK7v+K8gOK/n+K/sOK/v+OAgOOAv+OBgOOCn+OCoOODv+OEgOOEr+OEsOOGj+OGkOOGn+OGoOOGv+OIgOOLv+OMgOOPv+OQgOS2teS4gOm/v+qAgOqSj+qSkOqTj+qwgO2eo+6AgO+jv++kgO+rv++sgO+tj++tkO+3v++4oO+4r++4sO+5j++5kO+5r++5sO+7vlx1RkVGRlx1RkVGRu+8gO+/ryIsUTh0PSJVTkFTU0lHTkVEIixuNz17MzoxLDExNzoxfSx4Z2U9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZS51dGlsIixXSD17MzoxLDQ6MSw1OjEsMzY4OjF9LFo4dD0ib3JnLmVjbGlwc2UueHRleHQueGJhc2UubGliIixrZ2U9IkNhbm5vdCBhZGQgZWxlbWVudHMgdG8gYSBSYW5nZSIsRWdlPSJDYW5ub3Qgc2V0IGVsZW1lbnRzIGluIGEgUmFuZ2UiLFRnZT0iQ2Fubm90IHJlbW92ZSBlbGVtZW50cyBmcm9tIGEgUmFuZ2UiLFlIPSJsb2NhbGUiLEtIPSJkZWZhdWx0IixYSD0idXNlci5hZ2VudCIsbCxRSCxUdXQ7Yi5nb29nPWIuZ29vZ3x8e30sYi5nb29nLmdsb2JhbD1iLmdvb2cuZ2xvYmFsfHxiLG1nbigpLEQoMSxudWxsLHt9LF8pLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIG1VdCh0aGlzLGUpfSxsLkdiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ219LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUHcodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gSXAob2wodGhpcykpKyJAIisoZT1IaSh0aGlzKT4+PjAsZS50b1N0cmluZygxNikpfSxsLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5GYih0KX0sbC5oYXNoQ29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLkhiKCl9LGwudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5JYigpfTt2YXIgQ2dlLF9nZSxTZ2U7RCgyOTAsMSx7MjkwOjEsMjAyNjoxfSxMeXQpLGwubGU9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49bmV3IEx5dCxuLmk9NCxlPjE/bi5jPU5RdCh0aGlzLGUtMSk6bi5jPXRoaXMsbn0sbC5tZT1mdW5jdGlvbigpe3JldHVybiBQMCh0aGlzKSx0aGlzLmJ9LGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gSXAodGhpcyl9LGwub2U9ZnVuY3Rpb24oKXtyZXR1cm4gUDAodGhpcyksdGhpcy5rfSxsLnBlPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaSY0KSE9MH0sbC5xZT1mdW5jdGlvbigpe3JldHVybih0aGlzLmkmMSkhPTB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVm10KHRoaXMpfSxsLmk9MDt2YXIgUW49RihYbywiT2JqZWN0IiwxKSxKOHQ9RihYbywiQ2xhc3MiLDI5MCk7RCgxOTk4LDEsREkpLEYoSUksIk9wdGlvbmFsIiwxOTk4KSxEKDExNzAsMTk5OCxESSxBKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dGhpc30sbC5IYj1mdW5jdGlvbigpe3JldHVybiAyMDQwNzMyMzMyfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIk9wdGlvbmFsLmFic2VudCgpIn0sbC5KYj1mdW5jdGlvbihlKXtyZXR1cm4gTHIoZSksUEMoKSxDdXR9O3ZhciBDdXQ7RihJSSwiQWJzZW50IiwxMTcwKSxEKDYyOCwxLHt9LHZldCksRihJSSwiSm9pbmVyIiw2MjgpO3ZhciBZeG49S2koSUksIlByZWRpY2F0ZSIpO0QoNTgyLDEsezE2OToxLDU4MjoxLDM6MSw0NToxfSxtQyksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4ga3JlKHRoaXMsZSl9LGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGtyZSh0aGlzLGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDU4Mik/KG49dShlLDU4MiksazV0KHRoaXMuYSxuLmEpKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBQeXQodGhpcy5hKSszMDY2NTQyNTJ9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gc3BuKHRoaXMuYSl9LEYoSUksIlByZWRpY2F0ZXMvQW5kUHJlZGljYXRlIiw1ODIpLEQoNDA4LDE5OTgsezQwODoxLDM6MX0sV2spLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNDA4KT8obj11KGUsNDA4KSx5aSh0aGlzLmEsbi5hKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gMTUwMjQ3NjU3MitIaSh0aGlzLmEpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGNmZSt0aGlzLmErIikifSxsLkpiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgV2soZyQoZS5LYih0aGlzLmEpLCJ0aGUgRnVuY3Rpb24gcGFzc2VkIHRvIE9wdGlvbmFsLnRyYW5zZm9ybSgpIG11c3Qgbm90IHJldHVybiBudWxsLiIpKX0sRihJSSwiUHJlc2VudCIsNDA4KSxEKDE5OCwxLEZFKSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUWI9ZnVuY3Rpb24oKXt1SHQoKX0sRihLZSwiVW5tb2RpZmlhYmxlSXRlcmF0b3IiLDE5OCksRCgxOTc4LDE5OCxORSksbC5RYj1mdW5jdGlvbigpe3VIdCgpfSxsLlJiPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuV2I9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sRihLZSwiVW5tb2RpZmlhYmxlTGlzdEl0ZXJhdG9yIiwxOTc4KSxEKDM4NiwxOTc4LE5FKSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYzx0aGlzLmR9LGwuU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPjB9LGwuUGI9ZnVuY3Rpb24oKXtpZih0aGlzLmM+PXRoaXMuZCl0aHJvdyBpdChuZXcgbGMpO3JldHVybiB0aGlzLlhiKHRoaXMuYysrKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuVWI9ZnVuY3Rpb24oKXtpZih0aGlzLmM8PTApdGhyb3cgaXQobmV3IGxjKTtyZXR1cm4gdGhpcy5YYigtLXRoaXMuYyl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLTF9LGwuYz0wLGwuZD0wLEYoS2UsIkFic3RyYWN0SW5kZXhlZExpc3RJdGVyYXRvciIsMzg2KSxEKDY5OSwxOTgsRkUpLGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gYml0KHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIFJtdCh0aGlzKX0sbC5lPTEsRihLZSwiQWJzdHJhY3RJdGVyYXRvciIsNjk5KSxEKDE5ODYsMSx7MjI0OjF9KSxsLlpiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5mLGV8fCh0aGlzLmY9dGhpcy5hYygpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gUGl0KHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkodGhpcy5aYigpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gcXgodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5aYigpKX0sRihLZSwiQWJzdHJhY3RNdWx0aW1hcCIsMTk4NiksRCg3MjYsMTk4NixUMiksbC4kYj1mdW5jdGlvbigpe2N6KHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBBSHQodGhpcyxlKX0sbC5hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgbDgodGhpcyx0aGlzLmMpfSxsLmljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhjKCl9LGwuYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEszKHRoaXMsdGhpcy5jKX0sbC5qYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1jKHRoaXMuaGMoKSl9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFVxdCh0aGlzKX0sbC5sYz1mdW5jdGlvbigpe3JldHVybiB6c3QodGhpcy5jLnZjKCkuTmMoKSxuZXcgQiw2NCx0aGlzLmQpfSxsLmNjPWZ1bmN0aW9uKGUpe3JldHVybiBBaSh0aGlzLGUpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiBHRCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5tYz1mdW5jdGlvbihlKXtyZXR1cm4gd24oKSxuZXcgVChlKX0sbC5uYz1mdW5jdGlvbigpe3JldHVybiBuZXcgR3F0KHRoaXMpfSxsLm9jPWZ1bmN0aW9uKCl7cmV0dXJuIHpzdCh0aGlzLmMuQ2MoKS5OYygpLG5ldyBJLDY0LHRoaXMuZCl9LGwucGM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IHEkKHRoaXMsZSxuLG51bGwpfSxsLmQ9MCxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAiLDcyNiksRCgxNjMxLDcyNixUMiksbC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgWGModGhpcy5hKX0sbC5qYz1mdW5jdGlvbigpe3JldHVybiB3bigpLHduKCksaW99LGwuY2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoQWkodGhpcyxlKSwxNSl9LGwuZmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoR0QodGhpcyxlKSwxNSl9LGwuWmI9ZnVuY3Rpb24oKXtyZXR1cm4gV3godGhpcyl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIFBpdCh0aGlzLGUpfSxsLnFjPWZ1bmN0aW9uKGUpe3JldHVybiB1KEFpKHRoaXMsZSksMTUpfSxsLnJjPWZ1bmN0aW9uKGUpe3JldHVybiB1KEdEKHRoaXMsZSksMTUpfSxsLm1jPWZ1bmN0aW9uKGUpe3JldHVybiBpRCh1KGUsMTUpKX0sbC5wYz1mdW5jdGlvbihlLG4pe3JldHVybiB6WnQodGhpcyxlLHUobiwxNSksbnVsbCl9LEYoS2UsIkFic3RyYWN0TGlzdE11bHRpbWFwIiwxNjMxKSxEKDczMiwxLHNhKSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLk9iKCl8fHRoaXMuZS5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuZS5PYigpfHwoZT11KHRoaXMuYy5QYigpLDQyKSx0aGlzLmI9ZS5jZCgpLHRoaXMuYT11KGUuZGQoKSwxNCksdGhpcy5lPXRoaXMuYS5LYygpKSx0aGlzLnNjKHRoaXMuYix0aGlzLmUuUGIoKSl9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmUuUWIoKSx0aGlzLmEuZGMoKSYmdGhpcy5jLlFiKCksLS10aGlzLmQuZH0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0l0ciIsNzMyKSxEKDEwOTksNzMyLHNhLEdxdCksbC5zYz1mdW5jdGlvbihlLG4pe3JldHVybiBufSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMSIsMTA5OSksRCgxMTAwLDEse30sSSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE0KS5OYygpfSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMW1ldGhvZHJlZiRzcGxpdGVyYXRvciRUeXBlIiwxMTAwKSxEKDExMDEsNzMyLHNhLFVxdCksbC5zYz1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgTHcoZSxuKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwLzIiLDExMDEpO3ZhciB0RXQ9S2kocHIsIk1hcCIpO0QoMTk2NywxLG12KSxsLndjPWZ1bmN0aW9uKGUpe0s5KHRoaXMsZSl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBRaXQodGhpcyxlLG4scil9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLnZjKCkuJGIoKX0sbC50Yz1mdW5jdGlvbihlKXtyZXR1cm4gVHN0KHRoaXMsZSl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuISFDNHQodGhpcyxlLCExKX0sbC51Yz1mdW5jdGlvbihlKXt2YXIgbixyLHM7Zm9yKHI9dGhpcy52YygpLktjKCk7ci5PYigpOylpZihuPXUoci5QYigpLDQyKSxzPW4uZGQoKSxWdChlKT09PVZ0KHMpfHxlIT1udWxsJiZ5aShlLHMpKXJldHVybiEwO3JldHVybiExfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZihlPT09dGhpcylyZXR1cm4hMDtpZighX3QoZSw4Myl8fChzPXUoZSw4MyksdGhpcy5nYygpIT1zLmdjKCkpKXJldHVybiExO2ZvcihyPXMudmMoKS5LYygpO3IuT2IoKTspaWYobj11KHIuUGIoKSw0MiksIXRoaXMudGMobikpcmV0dXJuITE7cmV0dXJuITB9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVjKEM0dCh0aGlzLGUsITEpKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBUeXQodGhpcy52YygpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNtKHRoaXMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IFNnKCJQdXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIG1hcCIpKX0sbC5BYz1mdW5jdGlvbihlKXtZOSh0aGlzLGUpfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBlYyhDNHQodGhpcyxlLCEwKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YygpLmdjKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVGFlKHRoaXMpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2MSh0aGlzKX0sRihwciwiQWJzdHJhY3RNYXAiLDE5NjcpLEQoMTk4NywxOTY3LG12KSxsLmJjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGUih0aGlzKX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiAkS3QodGhpcyl9LGwuZWM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmcsZXx8KHRoaXMuZz10aGlzLmJjKCkpfSxsLkNjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5pLGV8fCh0aGlzLmk9bmV3IHlWdCh0aGlzKSl9LEYoS2UsIk1hcHMvVmlld0NhY2hpbmdBYnN0cmFjdE1hcCIsMTk4NyksRCgzODksMTk4NyxtdixsOCksbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gem9uKHRoaXMsZSl9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJsbih0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5kPT10aGlzLmUuYz90aGlzLmUuJGIoKTpWaihuZXcgVXd0KHRoaXMpKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gZWllKHRoaXMuZCxlKX0sbC5FYz1mdW5jdGlvbigpe3JldHVybiBuZXcgWWsodGhpcyl9LGwuRGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5FYygpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZXx8eWkodGhpcy5kLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuZCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLmVjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kLmdjKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5kKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0FzTWFwIiwzODkpO3ZhciBqMT1LaShYbywiSXRlcmFibGUiKTtEKDI4LDEseHkpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLk9jKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMCl9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsdGhpcy5OYygpKX0sbC5GYz1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgU2coIkFkZCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgY29sbGVjdGlvbiIpKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gVWEodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe0R2dCh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gYXkodGhpcyxlLCExKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gTkQodGhpcyxlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGF5KHRoaXMsZSwhMCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gc3Z0KHRoaXMpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBlSSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGViKHRoaXMpfSxGKHByLCJBYnN0cmFjdENvbGxlY3Rpb24iLDI4KTt2YXIgamg9S2kocHIsIlNldCIpO0QoTjEsMjgsenUpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIFlpZSh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFR5dCh0aGlzKX0sRihwciwiQWJzdHJhY3RTZXQiLE4xKSxEKDE5NzAsTjEsenUpLEYoS2UsIlNldHMvSW1wcm92ZWRBYnN0cmFjdFNldCIsMTk3MCksRCgxOTcxLDE5NzAsenUpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLlJjKCkuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gTGllKHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SYygpLmRjKCl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXMuSGMoZSk/KG49dShlLDQyKSx0aGlzLlJjKCkuZWMoKS5NYyhuLmNkKCkpKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJjKCkuZ2MoKX0sRihLZSwiTWFwcy9FbnRyeVNldCIsMTk3MSksRCgxMDk3LDE5NzEsenUsWWspLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEp5dCh0aGlzLmEuZC52YygpLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVd3QodGhpcy5hKX0sbC5SYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIEp5dCh0aGlzLmEuZC52YygpLGUpPyhuPXUoZSw0MiksU2FuKHRoaXMuYS5lLG4uY2QoKSksITApOiExfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIFhNKHRoaXMuYS5kLnZjKCkuTmMoKSxuZXcgblIodGhpcy5hKSl9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Bc01hcC9Bc01hcEVudHJpZXMiLDEwOTcpLEQoMTA5OCwxLHt9LG5SKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBNSnQodGhpcy5hLHUoZSw0MikpfSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBFbnRyaWVzLzBtZXRob2RyZWYkd3JhcEVudHJ5JFR5cGUiLDEwOTgpLEQoNzMwLDEsc2EsVXd0KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KHRoaXMuYi5QYigpLDQyKSx0aGlzLmE9dShlLmRkKCksMTQpLE1KdCh0aGlzLmMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLk9iKCl9LGwuUWI9ZnVuY3Rpb24oKXtpNCghIXRoaXMuYSksdGhpcy5iLlFiKCksdGhpcy5jLmUuZC09dGhpcy5hLmdjKCksdGhpcy5hLiRiKCksdGhpcy5hPW51bGx9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Bc01hcC9Bc01hcEl0ZXJhdG9yIiw3MzApLEQoNTMyLDE5NzAsenUsRlIpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmIuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iLl9iKGUpfSxsLkpjPWZ1bmN0aW9uKGUpe0xyKGUpLHRoaXMuYi53YyhuZXcgQ3R0KGUpKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZGMoKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRkModGhpcy5iLnZjKCkuS2MoKSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYi5fYihlKT8odGhpcy5iLkJjKGUpLCEwKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZ2MoKX0sRihLZSwiTWFwcy9LZXlTZXQiLDUzMiksRCgzMTgsNTMyLHp1LEszKSxsLiRiPWZ1bmN0aW9uKCl7dmFyIGU7VmooKGU9dGhpcy5iLnZjKCkuS2MoKSxuZXcgdmJ0KHRoaXMsZSkpKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iLmVjKCkuSWMoZSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfHx5aSh0aGlzLmIuZWMoKSxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBIaSh0aGlzLmIuZWMoKSl9LGwuS2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmIudmMoKS5LYygpLG5ldyB2YnQodGhpcyxlKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiByPTAsbj11KHRoaXMuYi5CYyhlKSwxNCksbiYmKHI9bi5nYygpLG4uJGIoKSx0aGlzLmEuZC09cikscj4wfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5lYygpLk5jKCl9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9LZXlTZXQiLDMxOCksRCg3MzEsMSxzYSx2YnQpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9dSh0aGlzLmMuUGIoKSw0MiksdGhpcy5hLmNkKCl9LGwuUWI9ZnVuY3Rpb24oKXt2YXIgZTtpNCghIXRoaXMuYSksZT11KHRoaXMuYS5kZCgpLDE0KSx0aGlzLmMuUWIoKSx0aGlzLmIuYS5kLT1lLmdjKCksZS4kYigpLHRoaXMuYT1udWxsfSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvS2V5U2V0LzEiLDczMSksRCg0OTEsMzg5LHs4MzoxLDE2MToxfSxITSksbC5iYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNjKCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5UYygpfSxsLlNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtTSh0aGlzLmMsdGhpcy5VYygpKX0sbC5UYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYixlfHwodGhpcy5iPXRoaXMuU2MoKSl9LGwuVWM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLmQsMTYxKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1NvcnRlZEFzTWFwIiw0OTEpLEQoNTQyLDQ5MSx1ZmUsRGopLGwuYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHU4KHRoaXMuYSx1KHUodGhpcy5kLDE2MSksMTcxKSl9LGwuU2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHU4KHRoaXMuYSx1KHUodGhpcy5kLDE2MSksMTcxKSl9LGwuZWM9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmIsdShlfHwodGhpcy5iPW5ldyB1OCh0aGlzLmEsdSh1KHRoaXMuZCwxNjEpLDE3MSkpKSwyNzEpfSxsLlRjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5iLHUoZXx8KHRoaXMuYj1uZXcgdTgodGhpcy5hLHUodSh0aGlzLmQsMTYxKSwxNzEpKSksMjcxKX0sbC5VYz1mdW5jdGlvbigpe3JldHVybiB1KHUodGhpcy5kLDE2MSksMTcxKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL05hdmlnYWJsZUFzTWFwIiw1NDIpLEQoNDkwLDMxOCxsZmUsbU0pLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmVjKCkuTmMoKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1NvcnRlZEtleVNldCIsNDkwKSxEKDM4OCw0OTAsQnh0LHU4KSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvTmF2aWdhYmxlS2V5U2V0IiwzODgpLEQoNTQxLDI4LHh5LHEkKSxsLkZjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIGNsKHRoaXMpLHI9dGhpcy5kLmRjKCksbj10aGlzLmQuRmMoZSksbiYmKCsrdGhpcy5mLmQsciYmV00odGhpcykpLG59LGwuR2M9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3JldHVybiBlLmRjKCk/ITE6KHM9KGNsKHRoaXMpLHRoaXMuZC5nYygpKSxuPXRoaXMuZC5HYyhlKSxuJiYocj10aGlzLmQuZ2MoKSx0aGlzLmYuZCs9ci1zLHM9PTAmJldNKHRoaXMpKSxuKX0sbC4kYj1mdW5jdGlvbigpe3ZhciBlO2U9KGNsKHRoaXMpLHRoaXMuZC5nYygpKSxlIT0wJiYodGhpcy5kLiRiKCksdGhpcy5mLmQtPWUsS2oodGhpcykpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBjbCh0aGlzKSx0aGlzLmQuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNsKHRoaXMpLHRoaXMuZC5JYyhlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXM/ITA6KGNsKHRoaXMpLHlpKHRoaXMuZCxlKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gY2wodGhpcyksSGkodGhpcy5kKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBjbCh0aGlzKSxuZXcgSXd0KHRoaXMpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBjbCh0aGlzKSxuPXRoaXMuZC5NYyhlKSxuJiYoLS10aGlzLmYuZCxLaih0aGlzKSksbn0sbC5nYz1mdW5jdGlvbigpe3JldHVybiBpVXQodGhpcyl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gY2wodGhpcyksdGhpcy5kLk5jKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gY2wodGhpcyksJG8odGhpcy5kKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRDb2xsZWN0aW9uIiw1NDEpO3ZhciB3aD1LaShwciwiTGlzdCIpO0QoNzI4LDU0MSx7MjA6MSwyODoxLDE0OjEsMTU6MX0sb3Z0KSxsLmFkPWZ1bmN0aW9uKGUpe3I0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gY2wodGhpcyksdGhpcy5kLk5jKCl9LGwuVmM9ZnVuY3Rpb24oZSxuKXt2YXIgcjtjbCh0aGlzKSxyPXRoaXMuZC5kYygpLHUodGhpcy5kLDE1KS5WYyhlLG4pLCsrdGhpcy5hLmQsciYmV00odGhpcyl9LGwuV2M9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG87cmV0dXJuIG4uZGMoKT8hMToobz0oY2wodGhpcyksdGhpcy5kLmdjKCkpLHI9dSh0aGlzLmQsMTUpLldjKGUsbiksciYmKHM9dGhpcy5kLmdjKCksdGhpcy5hLmQrPXMtbyxvPT0wJiZXTSh0aGlzKSkscil9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGNsKHRoaXMpLHUodGhpcy5kLDE1KS5YYihlKX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gY2wodGhpcyksdSh0aGlzLmQsMTUpLlhjKGUpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIGNsKHRoaXMpLG5ldyBCVXQodGhpcyl9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNsKHRoaXMpLG5ldyBYWHQodGhpcyxlKX0sbC4kYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gY2wodGhpcyksbj11KHRoaXMuZCwxNSkuJGMoZSksLS10aGlzLmEuZCxLaih0aGlzKSxufSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGNsKHRoaXMpLHUodGhpcy5kLDE1KS5fYyhlLG4pfSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGNsKHRoaXMpLHpadCh0aGlzLmEsdGhpcy5lLHUodGhpcy5kLDE1KS5iZChlLG4pLHRoaXMuYj90aGlzLmI6dGhpcyl9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkTGlzdCIsNzI4KSxEKDEwOTYsNzI4LHsyMDoxLDI4OjEsMTQ6MSwxNToxLDU0OjF9LFNXdCksRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1JhbmRvbUFjY2Vzc1dyYXBwZWRMaXN0IiwxMDk2KSxEKDYyMCwxLHNhLEl3dCksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEQ4KHRoaXMpLHRoaXMuYi5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEQ4KHRoaXMpLHRoaXMuYi5QYigpfSxsLlFiPWZ1bmN0aW9uKCl7bFd0KHRoaXMpfSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZENvbGxlY3Rpb24vV3JhcHBlZEl0ZXJhdG9yIiw2MjApLEQoNzI5LDYyMCxuMCxCVXQsWFh0KSxsLlFiPWZ1bmN0aW9uKCl7bFd0KHRoaXMpfSxsLlJiPWZ1bmN0aW9uKGUpe3ZhciBuO249aVV0KHRoaXMuYSk9PTAsKEQ4KHRoaXMpLHUodGhpcy5iLDEyNSkpLlJiKGUpLCsrdGhpcy5hLmEuZCxuJiZXTSh0aGlzLmEpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuKEQ4KHRoaXMpLHUodGhpcy5iLDEyNSkpLlNiKCl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4oRDgodGhpcyksdSh0aGlzLmIsMTI1KSkuVGIoKX0sbC5VYj1mdW5jdGlvbigpe3JldHVybihEOCh0aGlzKSx1KHRoaXMuYiwxMjUpKS5VYigpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuKEQ4KHRoaXMpLHUodGhpcy5iLDEyNSkpLlZiKCl9LGwuV2I9ZnVuY3Rpb24oZSl7KEQ4KHRoaXMpLHUodGhpcy5iLDEyNSkpLldiKGUpfSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZExpc3QvV3JhcHBlZExpc3RJdGVyYXRvciIsNzI5KSxEKDcyNyw1NDEsbGZlLEoydCksbC5OYz1mdW5jdGlvbigpe3JldHVybiBjbCh0aGlzKSx0aGlzLmQuTmMoKX0sRihLZSwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRTb3J0ZWRTZXQiLDcyNyksRCgxMDk1LDcyNyxCeHQsTFV0KSxGKEtlLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZE5hdmlnYWJsZVNldCIsMTA5NSksRCgxMDk0LDU0MSx6dSx6V3QpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gY2wodGhpcyksdGhpcy5kLk5jKCl9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkU2V0IiwxMDk0KSxEKDExMDMsMSx7fSxCKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBPYW4odShlLDQyKSl9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9sYW1iZGEkMSRUeXBlIiwxMTAzKSxEKDExMDIsMSx7fSxmdHQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMdyh0aGlzLmEsZSl9LEYoS2UsIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9sYW1iZGEkMiRUeXBlIiwxMTAyKTt2YXIgUDI9S2kocHIsIk1hcC9FbnRyeSIpO0QoMzQ1LDEsenEpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNDIpPyhuPXUoZSw0MikscGQodGhpcy5jZCgpLG4uY2QoKSkmJnBkKHRoaXMuZGQoKSxuLmRkKCkpKTohMX0sbC5IYj1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIGU9dGhpcy5jZCgpLG49dGhpcy5kZCgpLChlPT1udWxsPzA6SGkoZSkpXihuPT1udWxsPzA6SGkobikpfSxsLmVkPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jZCgpKyI9Iit0aGlzLmRkKCl9LEYoS2UsaGZlLDM0NSksRCgxOTg4LDI4LHh5KSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5mZCgpLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNDIpPyhuPXUoZSw0MiksZHNuKHRoaXMuZmQoKSxuLmNkKCksbi5kZCgpKSk6ITF9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNDIpPyhuPXUoZSw0MikseFp0KHRoaXMuZmQoKSxuLmNkKCksbi5kZCgpKSk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZCgpLmR9LEYoS2UsIk11bHRpbWFwcy9FbnRyaWVzIiwxOTg4KSxEKDczMywxOTg4LHh5LG5NKSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5rYygpfSxsLmZkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGMoKX0sRihLZSwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyaWVzIiw3MzMpLEQoNzM0LDczMyx6dSxZcHQpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxjKCl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEg0dCh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGtuZSh0aGlzKX0sRihLZSwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyeVNldCIsNzM0KSxEKDczNSwyOCx4eSxJMyksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBRdW4odGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5uYygpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5vYygpfSxGKEtlLCJBYnN0cmFjdE11bHRpbWFwL1ZhbHVlcyIsNzM1KSxEKDE5ODksMjgsezgzNToxLDIwOjEsMjg6MSwxNDoxfSksbC5KYz1mdW5jdGlvbihlKXtMcihlKSxRMyh0aGlzKS5KYyhuZXcgVHR0KGUpKX0sbC5OYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPVEzKHRoaXMpLk5jKCksenN0KGUsbmV3IHZ0LDY0fGUucWQoKSYxMjk2LHRoaXMuYS5kKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gcmJ0KCksITB9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIExyKHRoaXMpLExyKGUpLF90KGUsNTQzKT92c24odShlLDgzNSkpOiFlLmRjKCkmJm9pdCh0aGlzLGUuS2MoKSl9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dShzeShXeCh0aGlzLmEpLGUpLDE0KSwobj9uLmdjKCk6MCk+MH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gaDJuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkoUTModGhpcykpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIFEzKHRoaXMpLmRjKCl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHpvZSh0aGlzLGUsMSk+MH0sbC5JYj1mdW5jdGlvbigpe3JldHVybiAkbyhRMyh0aGlzKSl9LEYoS2UsIkFic3RyYWN0TXVsdGlzZXQiLDE5ODkpLEQoMTk5MSwxOTcwLHp1KSxsLiRiPWZ1bmN0aW9uKCl7Y3oodGhpcy5hLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIF90KGUsNDkyKT8ocj11KGUsNDE2KSx1KHIuYS5kZCgpLDE0KS5nYygpPD0wPyExOihuPVFRdCh0aGlzLmEsci5hLmNkKCkpLG49PXUoci5hLmRkKCksMTQpLmdjKCkpKTohMX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztyZXR1cm4gX3QoZSw0OTIpJiYocj11KGUsNDE2KSxuPXIuYS5jZCgpLHM9dShyLmEuZGQoKSwxNCkuZ2MoKSxzIT0wKT8obz10aGlzLmEsSnBuKG8sbixzKSk6ITF9LEYoS2UsIk11bHRpc2V0cy9FbnRyeVNldCIsMTk5MSksRCgxMTA5LDE5OTEsenUsck0pLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRIdCgkS3QoV3godGhpcy5hLmEpKS5LYygpKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiBXeCh0aGlzLmEuYSkuZ2MoKX0sRihLZSwiQWJzdHJhY3RNdWx0aXNldC9FbnRyeVNldCIsMTEwOSksRCg2MTksNzI2LFQyKSxsLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2QoKX0sbC5qYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhkKCl9LGwuY2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuamQoZSl9LGwuZmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMua2QoZSl9LGwuWmI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmYsZXx8KHRoaXMuZj10aGlzLmFjKCkpfSxsLmhkPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksd24oKSxyVn0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gUGl0KHRoaXMsZSl9LGwuamQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoQWkodGhpcyxlKSwyMSl9LGwua2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoR0QodGhpcyxlKSwyMSl9LGwubWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHduKCksbmV3IHM4KHUoZSwyMSkpfSxsLnBjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB6V3QodGhpcyxlLHUobiwyMSkpfSxGKEtlLCJBYnN0cmFjdFNldE11bHRpbWFwIiw2MTkpLEQoMTY1Nyw2MTksVDIpLGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9wKHRoaXMuYil9LGwuZ2Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9wKHRoaXMuYil9LGwuamM9ZnVuY3Rpb24oKXtyZXR1cm4ga3Z0KG5ldyBPcCh0aGlzLmIpKX0sbC5oZD1mdW5jdGlvbigpe3JldHVybiBrdnQobmV3IE9wKHRoaXMuYikpfSxsLmNjPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoQWkodGhpcyxlKSwyMSksODQpfSxsLmpkPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoQWkodGhpcyxlKSwyMSksODQpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoR0QodGhpcyxlKSwyMSksODQpfSxsLmtkPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUoR0QodGhpcyxlKSwyMSksODQpfSxsLm1jPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDI3MSk/a3Z0KHUoZSwyNzEpKTood24oKSxuZXcgSTJ0KHUoZSw4NCkpKX0sbC5aYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZixlfHwodGhpcy5mPV90KHRoaXMuYywxNzEpP25ldyBEaih0aGlzLHUodGhpcy5jLDE3MSkpOl90KHRoaXMuYywxNjEpP25ldyBITSh0aGlzLHUodGhpcy5jLDE2MSkpOm5ldyBsOCh0aGlzLHRoaXMuYykpfSxsLnBjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIF90KG4sMjcxKT9uZXcgTFV0KHRoaXMsZSx1KG4sMjcxKSk6bmV3IEoydCh0aGlzLGUsdShuLDg0KSl9LEYoS2UsIkFic3RyYWN0U29ydGVkU2V0TXVsdGltYXAiLDE2NTcpLEQoMTY1OCwxNjU3LFQyKSxsLlpiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5mLHUodShlfHwodGhpcy5mPV90KHRoaXMuYywxNzEpP25ldyBEaih0aGlzLHUodGhpcy5jLDE3MSkpOl90KHRoaXMuYywxNjEpP25ldyBITSh0aGlzLHUodGhpcy5jLDE2MSkpOm5ldyBsOCh0aGlzLHRoaXMuYykpLDE2MSksMTcxKX0sbC5lYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuaSx1KHUoZXx8KHRoaXMuaT1fdCh0aGlzLmMsMTcxKT9uZXcgdTgodGhpcyx1KHRoaXMuYywxNzEpKTpfdCh0aGlzLmMsMTYxKT9uZXcgbU0odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgSzModGhpcyx0aGlzLmMpKSw4NCksMjcxKX0sbC5iYz1mdW5jdGlvbigpe3JldHVybiBfdCh0aGlzLmMsMTcxKT9uZXcgdTgodGhpcyx1KHRoaXMuYywxNzEpKTpfdCh0aGlzLmMsMTYxKT9uZXcgbU0odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgSzModGhpcyx0aGlzLmMpfSxGKEtlLCJBYnN0cmFjdFNvcnRlZEtleVNvcnRlZFNldE11bHRpbWFwIiwxNjU4KSxEKDIwMTAsMSx7MTk0NzoxfSksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gcWRuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gVHl0KChlPXRoaXMuZyxlfHwodGhpcy5nPW5ldyB5Qyh0aGlzKSkpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBUYWUoKGU9dGhpcy5mLGV8fCh0aGlzLmY9bmV3IFQydCh0aGlzKSkpKX0sRihLZSwiQWJzdHJhY3RUYWJsZSIsMjAxMCksRCg2NjUsTjEsenUseUMpLGwuJGI9ZnVuY3Rpb24oKXtsSHQoKX0sbC5IYz1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBfdChlLDQ2OCk/KG49dShlLDY4Mikscj11KHN5KHVYdCh0aGlzLmEpLE5wKG4uYy5lLG4uYikpLDgzKSwhIXImJkp5dChyLnZjKCksbmV3IEx3KE5wKG4uYy5jLG4uYSksdDYobi5jLG4uYixuLmEpKSkpOiExfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIF9ybih0aGlzLmEpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIF90KGUsNDY4KT8obj11KGUsNjgyKSxyPXUoc3kodVh0KHRoaXMuYSksTnAobi5jLmUsbi5iKSksODMpLCEhciYmVGxuKHIudmMoKSxuZXcgTHcoTnAobi5jLmMsbi5hKSx0NihuLmMsbi5iLG4uYSkpKSk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4geEt0KHRoaXMuYSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4geHNuKHRoaXMuYSl9LEYoS2UsIkFic3RyYWN0VGFibGUvQ2VsbFNldCIsNjY1KSxEKDE5MjgsMjgseHksZHR0KSxsLiRiPWZ1bmN0aW9uKCl7bEh0KCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIE8wbih0aGlzLmEsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gU3JuKHRoaXMuYSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4geEt0KHRoaXMuYSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gVFp0KHRoaXMuYSl9LEYoS2UsIkFic3RyYWN0VGFibGUvVmFsdWVzIiwxOTI4KSxEKDE2MzIsMTYzMSxUMiksRihLZSwiQXJyYXlMaXN0TXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwxNjMyKSxEKDUxMywxNjMyLFQyLHdldCxXdnQpLGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFhjKHRoaXMuYSl9LGwuYT0wLEYoS2UsIkFycmF5TGlzdE11bHRpbWFwIiw1MTMpLEQoNjY0LDIwMTAsezY2NDoxLDE5NDc6MSwzOjF9LFFvZSksRihLZSwiQXJyYXlUYWJsZSIsNjY0KSxEKDE5MjQsMzg2LE5FLGlXdCksbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEF5dCh0aGlzLmEsZSl9LEYoS2UsIkFycmF5VGFibGUvMSIsMTkyNCksRCgxOTI1LDEse30sZVIpLGwubGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBBeXQodGhpcy5hLGUpfSxGKEtlLCJBcnJheVRhYmxlLzFtZXRob2RyZWYkZ2V0Q2VsbCRUeXBlIiwxOTI1KSxEKDIwMTEsMSx7NjgyOjF9KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT09dGhpcz8hMDpfdChlLDQ2OCk/KG49dShlLDY4MikscGQoTnAodGhpcy5jLmUsdGhpcy5iKSxOcChuLmMuZSxuLmIpKSYmcGQoTnAodGhpcy5jLmMsdGhpcy5hKSxOcChuLmMuYyxuLmEpKSYmcGQodDYodGhpcy5jLHRoaXMuYix0aGlzLmEpLHQ2KG4uYyxuLmIsbi5hKSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEF6KGx0KGN0KFFuLDEpLERlLDEsNSxbTnAodGhpcy5jLmUsdGhpcy5iKSxOcCh0aGlzLmMuYyx0aGlzLmEpLHQ2KHRoaXMuYyx0aGlzLmIsdGhpcy5hKV0pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIoIitOcCh0aGlzLmMuZSx0aGlzLmIpKyIsIitOcCh0aGlzLmMuYyx0aGlzLmEpKyIpPSIrdDYodGhpcy5jLHRoaXMuYix0aGlzLmEpfSxGKEtlLCJUYWJsZXMvQWJzdHJhY3RDZWxsIiwyMDExKSxEKDQ2OCwyMDExLHs0Njg6MSw2ODI6MX0sQXl0KSxsLmE9MCxsLmI9MCxsLmQ9MCxGKEtlLCJBcnJheVRhYmxlLzIiLDQ2OCksRCgxOTI3LDEse30sZ3gpLGwubGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEZ0ZSh0aGlzLmEsZSl9LEYoS2UsIkFycmF5VGFibGUvMm1ldGhvZHJlZiRnZXRWYWx1ZSRUeXBlIiwxOTI3KSxEKDE5MjYsMzg2LE5FLHNXdCksbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gRnRlKHRoaXMuYSxlKX0sRihLZSwiQXJyYXlUYWJsZS8zIiwxOTI2KSxEKDE5NzksMTk2NyxtdiksbC4kYj1mdW5jdGlvbigpe1ZqKHRoaXMua2MoKSl9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJ4KHRoaXMpfSxsLmxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCWHQodGhpcy5rYygpLHRoaXMuZ2MoKSl9LEYoS2UsIk1hcHMvSXRlcmF0b3JCYXNlZEFic3RyYWN0TWFwIiwxOTc5KSxEKDgyOCwxOTc5LG12KSxsLiRiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE9yKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gTEh0KHRoaXMuYyxlKX0sbC5rYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYVd0KHRoaXMsdGhpcy5jLmIuYy5nYygpKX0sbC5sYz1mdW5jdGlvbigpe3JldHVybiBCbnQodGhpcy5jLmIuYy5nYygpLDE2LG5ldyBidyh0aGlzKSl9LGwueGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dSh4OSh0aGlzLmMsZSksMTkpLG4/dGhpcy5uZChuLmEpOm51bGx9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5kYygpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIEdudCh0aGlzLmMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7dmFyIHI7aWYocj11KHg5KHRoaXMuYyxlKSwxOSksIXIpdGhyb3cgaXQobmV3IEZuKHRoaXMubWQoKSsiICIrZSsiIG5vdCBpbiAiK0dudCh0aGlzLmMpKSk7cmV0dXJuIHRoaXMub2Qoci5hLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5nYygpfSxGKEtlLCJBcnJheVRhYmxlL0FycmF5TWFwIiw4MjgpLEQoMTkyMywxLHt9LGJ3KSxsLmxkPWZ1bmN0aW9uKGUpe3JldHVybiBoWHQodGhpcy5hLGUpfSxGKEtlLCJBcnJheVRhYmxlL0FycmF5TWFwLzBtZXRob2RyZWYkZ2V0RW50cnkkVHlwZSIsMTkyMyksRCgxOTIxLDM0NSx6cSx1VnQpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gcVFlKHRoaXMuYSx0aGlzLmIpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5uZCh0aGlzLmIpfSxsLmVkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEub2QodGhpcy5iLGUpfSxsLmI9MCxGKEtlLCJBcnJheVRhYmxlL0FycmF5TWFwLzEiLDE5MjEpLEQoMTkyMiwzODYsTkUsYVd0KSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBoWHQodGhpcy5hLGUpfSxGKEtlLCJBcnJheVRhYmxlL0FycmF5TWFwLzIiLDE5MjIpLEQoMTkyMCw4MjgsbXYsWkt0KSxsLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIkNvbHVtbiJ9LGwubmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQ2KHRoaXMuYix0aGlzLmEsZSl9LGwub2Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gb3JlKHRoaXMuYix0aGlzLmEsZSxuKX0sbC5hPTAsRihLZSwiQXJyYXlUYWJsZS9Sb3ciLDE5MjApLEQoODI5LDgyOCxtdixUMnQpLGwubmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaS3QodGhpcy5hLGUpfSxsLnpjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHUobiw4MyksQ0tlKCl9LGwub2Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdShuLDgzKSxfS2UoKX0sbC5tZD1mdW5jdGlvbigpe3JldHVybiJSb3cifSxGKEtlLCJBcnJheVRhYmxlL1Jvd01hcCIsODI5KSxEKDExMjAsMSxJaCxsVnQpLGwucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnFkKCkmLTI2Mn0sbC5yZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEucmQoKX0sbC5OYj1mdW5jdGlvbihlKXt0aGlzLmEuTmIobmV3IHNWdChlLHRoaXMuYikpfSxsLnNkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuc2QobmV3IGlWdChlLHRoaXMuYikpfSxGKEtlLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzEiLDExMjApLEQoMTEyMSwxLFVuLGlWdCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodGhpcy5iLktiKGUpKX0sRihLZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xL2xhbWJkYSQwJFR5cGUiLDExMjEpLEQoMTEyMiwxLFVuLHNWdCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodGhpcy5iLktiKGUpKX0sRihLZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xL2xhbWJkYSQxJFR5cGUiLDExMjIpLEQoMTEyMywxLEloLEZadCksbC5xZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kJiYodGhpcy5iPWpVdCh0aGlzLmIsdGhpcy5kLnJkKCkpKSxqVXQodGhpcy5iLDApfSxsLk5iPWZ1bmN0aW9uKGUpe3RoaXMuZCYmKHRoaXMuZC5OYihlKSx0aGlzLmQ9bnVsbCksdGhpcy5jLk5iKG5ldyByVnQodGhpcy5lLGUpKSx0aGlzLmI9MH0sbC5zZD1mdW5jdGlvbihlKXtmb3IoOzspe2lmKHRoaXMuZCYmdGhpcy5kLnNkKGUpKXJldHVybiB1OSh0aGlzLmIscXEpJiYodGhpcy5iPUpwKHRoaXMuYiwxKSksITA7aWYodGhpcy5kPW51bGwsIXRoaXMuYy5zZChuZXcgYVZ0KHRoaXMsdGhpcy5lKSkpcmV0dXJuITF9fSxsLmE9MCxsLmI9MCxGKEtlLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFGbGF0TWFwU3BsaXRlcmF0b3IiLDExMjMpLEQoMTEyNCwxLFVuLGFWdCksbC50ZD1mdW5jdGlvbihlKXtHWmUodGhpcy5hLHRoaXMuYixlKX0sRihLZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xRmxhdE1hcFNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDExMjQpLEQoMTEyNSwxLFVuLHJWdCksbC50ZD1mdW5jdGlvbihlKXtMUWUodGhpcy5iLHRoaXMuYSxlKX0sRihLZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xRmxhdE1hcFNwbGl0ZXJhdG9yL2xhbWJkYSQxJFR5cGUiLDExMjUpLEQoMTExNywxLEloLHdZdCksbC5xZD1mdW5jdGlvbigpe3JldHVybiAxNjQ2NHx0aGlzLmJ9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnJkKCl9LGwuTmI9ZnVuY3Rpb24oZSl7dGhpcy5hLnhlKG5ldyBjVnQoZSx0aGlzLmMpKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLnllKG5ldyBvVnQoZSx0aGlzLmMpKX0sbC5iPTAsRihLZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xV2l0aENoYXJhY3RlcmlzdGljcyIsMTExNyksRCgxMTE4LDEsT0ksb1Z0KSxsLnVkPWZ1bmN0aW9uKGUpe3RoaXMuYS50ZCh0aGlzLmIubGQoZSkpfSxGKEtlLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFXaXRoQ2hhcmFjdGVyaXN0aWNzL2xhbWJkYSQwJFR5cGUiLDExMTgpLEQoMTExOSwxLE9JLGNWdCksbC51ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodGhpcy5iLmxkKGUpKX0sRihLZSwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xV2l0aENoYXJhY3RlcmlzdGljcy9sYW1iZGEkMSRUeXBlIiwxMTE5KSxEKDI0NSwxLFVhdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy52ZCh1KGUsMjQ1KSl9LGwudmQ9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGU9PShvZXQoKSxTdXQpPzE6ZT09KGNldCgpLF91dCk/LTE6KG49KHpqKCksSUQodGhpcy5hLGUuYSkpLG4hPTA/bjpfdCh0aGlzLDUxOSk9PV90KGUsNTE5KT8wOl90KHRoaXMsNTE5KT8xOi0xKX0sbC56ZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEQzdCh0aGlzLGUpfSxGKEtlLCJDdXQiLDI0NSksRCgxNzYxLDI0NSxVYXQsZEh0KSxsLnZkPWZ1bmN0aW9uKGUpe3JldHVybiBlPT10aGlzPzA6MX0sbC54ZD1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgTXB0KX0sbC55ZD1mdW5jdGlvbihlKXtlLmErPSIr4oieKSJ9LGwuemQ9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTm8oZGZlKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gR2QoKSwkM3QodGhpcyl9LGwuQWQ9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iK+KIniJ9O3ZhciBfdXQ7RihLZSwiQ3V0L0Fib3ZlQWxsIiwxNzYxKSxEKDUxOSwyNDUsezI0NToxLDUxOToxLDM6MSwzNToxfSxoV3QpLGwueGQ9ZnVuY3Rpb24oZSl7aGMoKGUuYSs9IigiLGUpLHRoaXMuYSl9LGwueWQ9ZnVuY3Rpb24oZSl7cXAoaGMoZSx0aGlzLmEpLDkzKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybn5IaSh0aGlzLmEpfSxsLkFkPWZ1bmN0aW9uKGUpe3JldHVybiB6aigpLElEKHRoaXMuYSxlKTwwfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIi8iK3RoaXMuYSsiXFwifSxGKEtlLCJDdXQvQWJvdmVWYWx1ZSIsNTE5KSxEKDE3NjAsMjQ1LFVhdCxnSHQpLGwudmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PXRoaXM/MDotMX0sbC54ZD1mdW5jdGlvbihlKXtlLmErPSIoLeKIniJ9LGwueWQ9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE1wdCl9LGwuemQ9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTm8oZGZlKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gR2QoKSwkM3QodGhpcyl9LGwuQWQ9ZnVuY3Rpb24oZSl7cmV0dXJuITB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iLeKIniJ9O3ZhciBTdXQ7RihLZSwiQ3V0L0JlbG93QWxsIiwxNzYwKSxEKDE3NjIsMjQ1LFVhdCxmV3QpLGwueGQ9ZnVuY3Rpb24oZSl7aGMoKGUuYSs9IlsiLGUpLHRoaXMuYSl9LGwueWQ9ZnVuY3Rpb24oZSl7cXAoaGMoZSx0aGlzLmEpLDQxKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBIaSh0aGlzLmEpfSxsLkFkPWZ1bmN0aW9uKGUpe3JldHVybiB6aigpLElEKHRoaXMuYSxlKTw9MH0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJcXCIrdGhpcy5hKyIvIn0sRihLZSwiQ3V0L0JlbG93VmFsdWUiLDE3NjIpLEQoNTM3LDEscjApLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aG4odShnJCh0aGlzLCJ1c2UgT3B0aW9uYWwub3JOdWxsKCkgaW5zdGVhZCBvZiBPcHRpb25hbC5vcihudWxsKSIpLDIwKS5LYygpKX0sRihLZSwiRmx1ZW50SXRlcmFibGUiLDUzNyksRCg0MzMsNTM3LHIwLGY5KSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhcihscih0aGlzLmEuS2MoKSxuZXcgeikpfSxGKEtlLCJGbHVlbnRJdGVyYWJsZS8yIiw0MzMpLEQoMTA0Niw1MzcscjAsYlV0KSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHpwKHRoaXMpfSxGKEtlLCJGbHVlbnRJdGVyYWJsZS8zIiwxMDQ2KSxEKDcwOCwzODYsTkUsQzJ0KSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFbZV0uS2MoKX0sRihLZSwiRmx1ZW50SXRlcmFibGUvMy8xIiw3MDgpLEQoMTk3MiwxLHt9KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRvKHRoaXMuQmQoKS5iKX0sRihLZSwiRm9yd2FyZGluZ09iamVjdCIsMTk3MiksRCgxOTczLDE5NzIsZ2ZlKSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2QoKX0sbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2MoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywwKX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCx0aGlzLk5jKCkpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkNkKCksT0h0KCl9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuQ2QoKSxQSHQoKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuQ2QoKSxGSHQoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5DZCgpLkhjKGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkNkKCkuSWMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DZCgpLmIuZGMoKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkNkKCkuS2MoKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5DZCgpLE5IdCgpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2QoKS5iLmdjKCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5DZCgpLlBjKCl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuQ2QoKS5RYyhlKX0sRihLZSwiRm9yd2FyZGluZ0NvbGxlY3Rpb24iLDE5NzMpLEQoMTk4MCwyOCxSeHQpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5FZCgpfSxsLkZjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuR2M9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC4kYj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJmF5KHRoaXMsZSwhMSl9LGwuRGQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5nYygpKXtjYXNlIDA6cmV0dXJuIFdtKCksV20oKSxBdXQ7Y2FzZSAxOnJldHVybiBXbSgpLG5ldyBSbnQoTHIodGhpcy5FZCgpLlBiKCkpKTtkZWZhdWx0OnJldHVybiBuZXcgSkt0KHRoaXMsdGhpcy5QYygpKX19LGwuTWM9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sRihLZSwiSW1tdXRhYmxlQ29sbGVjdGlvbiIsMTk4MCksRCg3MTIsMTk4MCxSeHQsQXB0KSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIGU2KHRoaXMuYS5LYygpKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmdGhpcy5hLkhjKGUpfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuSWMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGwuRWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZTYodGhpcy5hLktjKCkpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5QYygpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuUWMoZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5hKX0sRihLZSwiRm9yd2FyZGluZ0ltbXV0YWJsZUNvbGxlY3Rpb24iLDcxMiksRCgxNTIsMTk4MCxNXyksbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVkKCl9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GZCgwKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5GZChlKX0sbC5hZD1mdW5jdGlvbihlKXtyNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfbih0aGlzLDE2KX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLkdkKGUsbil9LGwuVmM9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLldjPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gS2JuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gYXVuKHRoaXMpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPy0xOm0xbih0aGlzLGUpfSxsLkVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRmQoMCl9LGwuRmQ9ZnVuY3Rpb24oZSl7cmV0dXJuICQydCh0aGlzLGUpfSxsLiRjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuX2M9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLkdkPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIER6KChyPW5ldyB4VnQodGhpcyksbmV3IFFkKHIsZSxuKSkpfTt2YXIgQXV0O0YoS2UsIkltbXV0YWJsZUxpc3QiLDE1MiksRCgyMDA2LDE1MixNXyksbC5LYz1mdW5jdGlvbigpe3JldHVybiBlNih0aGlzLkhkKCkuS2MoKSl9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRHoodGhpcy5IZCgpLmJkKGUsbikpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZ0aGlzLkhkKCkuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuSGQoKS5JYyhlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5IZCgpLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBOcCh0aGlzLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuSGQoKSl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuSGQoKS5YYyhlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkhkKCkuZGMoKX0sbC5FZD1mdW5jdGlvbigpe3JldHVybiBlNih0aGlzLkhkKCkuS2MoKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5IZCgpLmdjKCl9LGwuR2Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRHoodGhpcy5IZCgpLmJkKGUsbikpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGQoKS5RYyhOdChRbixEZSwxLHRoaXMuSGQoKS5nYygpLDUsMSkpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkhkKCkuUWMoZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5IZCgpKX0sRihLZSwiRm9yd2FyZGluZ0ltbXV0YWJsZUxpc3QiLDIwMDYpLEQoNzE0LDEsQkUpLGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gUncodGhpcyl9LGwud2M9ZnVuY3Rpb24oZSl7SzkodGhpcyxlKX0sbC5lYz1mdW5jdGlvbigpe3JldHVybiBHbnQodGhpcyl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBRaXQodGhpcyxlLG4scil9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MZCgpfSxsLiRiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE9yKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy54YyhlKSE9bnVsbH0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5MZCgpLkhjKGUpfSxsLkpkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpcXQodGhpcyl9LGwuS2Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHNxdCh0aGlzKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gWnVuKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUncodGhpcykuSGIoKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdjKCk9PTB9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gU0tlKCl9LGwuQmM9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBNZ24odGhpcyl9LGwuTGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lP3RoaXMuZTp0aGlzLmU9dGhpcy5LZCgpfSxsLmM9bnVsbCxsLmQ9bnVsbCxsLmU9bnVsbDt2YXIgQWdlO0YoS2UsIkltbXV0YWJsZU1hcCIsNzE0KSxEKDcxNSw3MTQsQkUpLGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIExIdCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3JldHVybiBDVnQodGhpcy5iLGUpfSxsLklkPWZ1bmN0aW9uKCl7cmV0dXJuIHRpZShuZXcga0ModGhpcykpfSxsLkpkPWZ1bmN0aW9uKCl7cmV0dXJuIHRpZShPWHQodGhpcy5iKSl9LGwuS2Q9ZnVuY3Rpb24oKXtyZXR1cm4gZ2QoKSxuZXcgQXB0KElYdCh0aGlzLmIpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX1Z0KHRoaXMuYixlKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4geDkodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBIaSh0aGlzLmIuYyl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmMuZGMoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYy5nYygpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRvKHRoaXMuYi5jKX0sRihLZSwiRm9yd2FyZGluZ0ltbXV0YWJsZU1hcCIsNzE1KSxEKDE5NzQsMTk3MyxXYXQpLGwuQmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NZCgpfSxsLkNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTWQoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXN8fHRoaXMuTWQoKS5GYihlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLk1kKCkuSGIoKX0sRihLZSwiRm9yd2FyZGluZ1NldCIsMTk3NCksRCgxMDY5LDE5NzQsV2F0LGtDKSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIEw4KHRoaXMuYS5iKX0sbC5DZD1mdW5jdGlvbigpe3JldHVybiBMOCh0aGlzLmEuYil9LGwuSGM9ZnVuY3Rpb24oZSl7aWYoX3QoZSw0MikmJnUoZSw0MikuY2QoKT09bnVsbClyZXR1cm4hMTt0cnl7cmV0dXJuIFRWdChMOCh0aGlzLmEuYiksZSl9Y2F0Y2gobil7aWYobj1XaShuKSxfdChuLDIwNSkpcmV0dXJuITE7dGhyb3cgaXQobil9fSxsLk1kPWZ1bmN0aW9uKCl7cmV0dXJuIEw4KHRoaXMuYS5iKX0sbC5RYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1nUXQoTDgodGhpcy5hLmIpLGUpLEw4KHRoaXMuYS5iKS5iLmdjKCk8bi5sZW5ndGgmJnRzKG4sTDgodGhpcy5hLmIpLmIuZ2MoKSxudWxsKSxufSxGKEtlLCJGb3J3YXJkaW5nSW1tdXRhYmxlTWFwLzEiLDEwNjkpLEQoMTk4MSwxOTgwLFJFKSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRWQoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gSDR0KHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4ga25lKHRoaXMpfSxGKEtlLCJJbW11dGFibGVTZXQiLDE5ODEpLEQoNzAzLDE5ODEsUkUpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gZTYobmV3IEwodGhpcy5hLmIuS2MoKSkpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZ5TSh0aGlzLmEsZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGtWdCh0aGlzLmEsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkodGhpcy5hLmIpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5iLmRjKCl9LGwuRWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZTYobmV3IEwodGhpcy5hLmIuS2MoKSkpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5iLmdjKCl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmIuUGMoKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gRVZ0KHRoaXMuYSxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiAkbyh0aGlzLmEuYil9LEYoS2UsIkZvcndhcmRpbmdJbW11dGFibGVTZXQiLDcwMyksRCgxOTc1LDE5NzQscGZlKSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5DZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuTWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXUih0aGlzKX0sRihLZSwiRm9yd2FyZGluZ1NvcnRlZFNldCIsMTk3NSksRCg1MzMsMTk3OSxCRSx0cSksbC5BYz1mdW5jdGlvbihlKXtZOSh0aGlzLGUpfSxsLkNjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5kLG5ldyBjbnQoZXx8KHRoaXMuZD1uZXcgcHgodGhpcykpKX0sbC4kYj1mdW5jdGlvbigpe2REKHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiEhVTkodGhpcyxlLEFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpKX0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4gSWVlKHRoaXMsZSl9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG9XdCh0aGlzLHRoaXMpfSxsLndjPWZ1bmN0aW9uKGUpe0NRdCh0aGlzLGUpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBuNCh0aGlzLGUpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1bnQodGhpcyl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQXEodGhpcyxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPVU5KHRoaXMsZSxBcihfYShpMCxYZChBcihfYShlPT1udWxsPzA6SGkoZSksczApKSwxNSkpKSksbj8obTQodGhpcyxuKSxuLmU9bnVsbCxuLmM9bnVsbCxuLmkpOm51bGx9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxsLnBkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5kLG5ldyBjbnQoZXx8KHRoaXMuZD1uZXcgcHgodGhpcykpKX0sbC5mPTAsbC5nPTAsbC5pPTAsRihLZSwiSGFzaEJpTWFwIiw1MzMpLEQoNTM0LDEsc2EpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBWWnQodGhpcyl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtpZighVlp0KHRoaXMpKXRocm93IGl0KG5ldyBsYyk7cmV0dXJuIGU9dGhpcy5jLHRoaXMuYz1lLmMsdGhpcy5mPWUsLS10aGlzLmQsdGhpcy5OZChlKX0sbC5RYj1mdW5jdGlvbigpe2lmKHRoaXMuZS5nIT10aGlzLmIpdGhyb3cgaXQobmV3IHJoKTtpNCghIXRoaXMuZiksbTQodGhpcy5lLHRoaXMuZiksdGhpcy5iPXRoaXMuZS5nLHRoaXMuZj1udWxsfSxsLmI9MCxsLmQ9MCxsLmY9bnVsbCxGKEtlLCJIYXNoQmlNYXAvSXRyIiw1MzQpLEQoMTAxMSw1MzQsc2Esb1d0KSxsLk5kPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZFZ0KHRoaXMsZSl9LEYoS2UsIkhhc2hCaU1hcC8xIiwxMDExKSxEKDEwMTIsMzQ1LHpxLGRWdCksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ30sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuaX0sbC5lZD1mdW5jdGlvbihlKXt2YXIgbixyLHM7cmV0dXJuIHI9dGhpcy5hLmkscz1BcihfYShpMCxYZChBcihfYShlPT1udWxsPzA6SGkoZSksczApKSwxNSkpKSxzPT10aGlzLmEuZiYmKFZ0KGUpPT09VnQocil8fGUhPW51bGwmJnlpKGUscikpP2U6KHJyZSghVzkodGhpcy5iLmEsZSxzKSxlKSxtNCh0aGlzLmIuYSx0aGlzLmEpLG49bmV3IG8kKHRoaXMuYS5nLHRoaXMuYS5hLGUscyksZkkodGhpcy5iLmEsbix0aGlzLmEpLHRoaXMuYS5lPW51bGwsdGhpcy5hLmM9bnVsbCx0aGlzLmIuYj10aGlzLmIuYS5nLHRoaXMuYi5mPT10aGlzLmEmJih0aGlzLmIuZj1uKSx0aGlzLmE9bixyKX0sRihLZSwiSGFzaEJpTWFwLzEvTWFwRW50cnkiLDEwMTIpLEQoMjM4LDM0NSx7MzQ1OjEsMjM4OjEsMzoxLDQyOjF9LEx3KSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGwuZWQ9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sRihLZSwiSW1tdXRhYmxlRW50cnkiLDIzOCksRCgzMTcsMjM4LHszNDU6MSwzMTc6MSwyMzg6MSwzOjEsNDI6MX0sbyQpLGwuYT0wLGwuZj0wO3ZhciBMdXQ9RihLZSwiSGFzaEJpTWFwL0JpRW50cnkiLDMxNyk7RCg2MTAsMTk3OSxCRSxweCksbC5BYz1mdW5jdGlvbihlKXtZOSh0aGlzLGUpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1bnQodGhpcy5hKX0sbC4kYj1mdW5jdGlvbigpe2REKHRoaXMuYSl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEllZSh0aGlzLmEsZSl9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGNXdCh0aGlzLHRoaXMuYSl9LGwud2M9ZnVuY3Rpb24oZSl7THIoZSksQ1F0KHRoaXMuYSxuZXcgaU0oZSkpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBoeih0aGlzLGUpfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjbnQodGhpcyl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdHluKHRoaXMuYSxlLG4sITEpfSxsLkJjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPVc5KHRoaXMuYSxlLEFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpKSxuPyhtNCh0aGlzLmEsbiksbi5lPW51bGwsbi5jPW51bGwsbi5nKTpudWxsfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxsLnBkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1bnQodGhpcy5hKX0sRihLZSwiSGFzaEJpTWFwL0ludmVyc2UiLDYxMCksRCgxMDA4LDUzNCxzYSxjV3QpLGwuTmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnVnQodGhpcyxlKX0sRihLZSwiSGFzaEJpTWFwL0ludmVyc2UvMSIsMTAwOCksRCgxMDA5LDM0NSx6cSxnVnQpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLml9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmd9LGwuZWQ9ZnVuY3Rpb24oZSl7dmFyIG4scixzO3JldHVybiBzPXRoaXMuYS5nLG49QXIoX2EoaTAsWGQoQXIoX2EoZT09bnVsbD8wOkhpKGUpLHMwKSksMTUpKSksbj09dGhpcy5hLmEmJihWdChlKT09PVZ0KHMpfHxlIT1udWxsJiZ5aShlLHMpKT9lOihycmUoIVU5KHRoaXMuYi5hLmEsZSxuKSxlKSxtNCh0aGlzLmIuYS5hLHRoaXMuYSkscj1uZXcgbyQoZSxuLHRoaXMuYS5pLHRoaXMuYS5mKSx0aGlzLmE9cixmSSh0aGlzLmIuYS5hLHIsbnVsbCksdGhpcy5iLmI9dGhpcy5iLmEuYS5nLHMpfSxGKEtlLCJIYXNoQmlNYXAvSW52ZXJzZS8xL0ludmVyc2VFbnRyeSIsMTAwOSksRCg2MTEsNTMyLHp1LGNudCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUXF0KHRoaXMuYS5hKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1XOSh0aGlzLmEuYSxlLEFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpKSxuPyhtNCh0aGlzLmEuYSxuKSwhMCk6ITF9LEYoS2UsIkhhc2hCaU1hcC9JbnZlcnNlL0ludmVyc2VLZXlTZXQiLDYxMSksRCgxMDA3LDUzNCxzYSxRcXQpLGwuTmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaX0sRihLZSwiSGFzaEJpTWFwL0ludmVyc2UvSW52ZXJzZUtleVNldC8xIiwxMDA3KSxEKDEwMTAsMSx7fSxpTSksbC5PZD1mdW5jdGlvbihlLG4pe3NLZSh0aGlzLmEsZSxuKX0sRihLZSwiSGFzaEJpTWFwL0ludmVyc2UvbGFtYmRhJDAkVHlwZSIsMTAxMCksRCg2MDksNTMyLHp1LHVudCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgWnF0KHRoaXMuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49VTkodGhpcy5hLGUsQXIoX2EoaTAsWGQoQXIoX2EoZT09bnVsbD8wOkhpKGUpLHMwKSksMTUpKSkpLG4/KG00KHRoaXMuYSxuKSxuLmU9bnVsbCxuLmM9bnVsbCwhMCk6ITF9LEYoS2UsIkhhc2hCaU1hcC9LZXlTZXQiLDYwOSksRCgxMDA2LDUzNCxzYSxacXQpLGwuTmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ30sRihLZSwiSGFzaEJpTWFwL0tleVNldC8xIiwxMDA2KSxEKDEwOTMsNjE5LFQyKSxGKEtlLCJIYXNoTXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwxMDkzKSxEKDI2NSwxMDkzLFQyLFV3KSxsLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJUih0eSh0aGlzLmEpKX0sbC5nZD1mdW5jdGlvbigpe3JldHVybiBuZXcgSVIodHkodGhpcy5hKSl9LGwuYT0yLEYoS2UsIkhhc2hNdWx0aW1hcCIsMjY1KSxEKDE5OTksMTUyLE1fKSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlBkKCkuSGMoZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QZCgpLmRjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5QZCgpLmdjKCl9LEYoS2UsIkltbXV0YWJsZUFzTGlzdCIsMTk5OSksRCgxOTMxLDcxNSxCRSksbC5MZD1mdW5jdGlvbigpe3JldHVybiBnZCgpLG5ldyBBeCh0aGlzLmEpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIGdkKCksbmV3IEF4KHRoaXMuYSl9LGwucGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ2QoKSxuZXcgQXgodGhpcy5hKX0sRihLZSwiSW1tdXRhYmxlQmlNYXAiLDE5MzEpLEQoMTk3NywxLHt9KSxGKEtlLCJJbW11dGFibGVDb2xsZWN0aW9uL0J1aWxkZXIiLDE5NzcpLEQoMTAyMiw3MDMsUkUsSnF0KSxGKEtlLCJJbW11dGFibGVFbnVtU2V0IiwxMDIyKSxEKDk2OSwzODYsTkUsYll0KSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWGIoZSl9LEYoS2UsIkltbXV0YWJsZUxpc3QvMSIsOTY5KSxEKDk2OCwxOTc3LHt9LFhXdCksRihLZSwiSW1tdXRhYmxlTGlzdC9CdWlsZGVyIiw5NjgpLEQoNjE0LDE5OCxGRSxzTSksbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYS5QYigpLDQyKS5jZCgpfSxGKEtlLCJJbW11dGFibGVNYXAvMSIsNjE0KSxEKDEwNDEsMSx7fSxOKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNDIpLmNkKCl9LEYoS2UsIkltbXV0YWJsZU1hcC8ybWV0aG9kcmVmJGdldEtleSRUeXBlIiwxMDQxKSxEKDEwNDAsMSx7fSxRV3QpLEYoS2UsIkltbXV0YWJsZU1hcC9CdWlsZGVyIiwxMDQwKSxEKDJlMywxOTgxLFJFKSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9UncodGhpcy5hKS5FZCgpLG5ldyBzTShlKX0sbC5EZD1mdW5jdGlvbigpe3JldHVybiBuZXcgTHB0KHRoaXMpfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7Zm9yKExyKGUpLHI9dGhpcy5nYygpLG49MDtuPHI7bisrKWUudGQodShjdnQoUncodGhpcy5hKSkuWGIobiksNDIpLmNkKCkpfSxsLkVkPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuKGU9dGhpcy5jLGV8fCh0aGlzLmM9bmV3IExwdCh0aGlzKSkpLkVkKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gQm50KHRoaXMuZ2MoKSwxMjk2LG5ldyBwdHQodGhpcykpfSxGKEtlLCJJbmRleGVkSW1tdXRhYmxlU2V0IiwyZTMpLEQoMTE4MCwyZTMsUkUsaXF0KSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9UncodGhpcy5hKS5FZCgpLG5ldyBzTShlKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLl9iKGUpfSxsLkpjPWZ1bmN0aW9uKGUpe0xyKGUpLEs5KHRoaXMuYSxuZXcgZ3R0KGUpKX0sbC5FZD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPVJ3KHRoaXMuYSkuRWQoKSxuZXcgc00oZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gWE0oUncodGhpcy5hKS5OYygpLG5ldyBOKX0sRihLZSwiSW1tdXRhYmxlTWFwS2V5U2V0IiwxMTgwKSxEKDExODEsMSx7fSxndHQpLGwuT2Q9ZnVuY3Rpb24oZSxuKXtnZCgpLHRoaXMuYS50ZChlKX0sRihLZSwiSW1tdXRhYmxlTWFwS2V5U2V0L2xhbWJkYSQwJFR5cGUiLDExODEpLEQoMTE3OCwxOTgwLFJ4dCxzcXQpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBudCh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmemRuKG5ldyBQbnQodGhpcyksZSl9LGwuRWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBudCh0aGlzKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBYTShSdyh0aGlzLmEpLk5jKCksbmV3IFIpfSxGKEtlLCJJbW11dGFibGVNYXBWYWx1ZXMiLDExNzgpLEQoMTE3OSwxLHt9LFIpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MikuZGQoKX0sRihLZSwiSW1tdXRhYmxlTWFwVmFsdWVzLzBtZXRob2RyZWYkZ2V0VmFsdWUkVHlwZSIsMTE3OSksRCg2MjYsMTk4LEZFLFBudCksbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYS5QYigpLDQyKS5kZCgpfSxGKEtlLCJJbW11dGFibGVNYXBWYWx1ZXMvMSIsNjI2KSxEKDExODIsMSx7fSxwdHQpLGwubGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGVYdCh0aGlzLmEsZSl9LEYoS2UsIkluZGV4ZWRJbW11dGFibGVTZXQvMG1ldGhvZHJlZiRnZXQkVHlwZSIsMTE4MiksRCg3NTIsMTk5OSxNXyxMcHQpLGwuUGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBlWHQodGhpcy5hLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5hLmdjKCl9LEYoS2UsIkluZGV4ZWRJbW11dGFibGVTZXQvMSIsNzUyKSxEKDQ0LDEse30seiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDIwKS5LYygpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sRihLZSwiSXRlcmFibGVzLzEwIiw0NCksRCgxMDQyLDUzNyxyMCxuS3QpLGwuSmM9ZnVuY3Rpb24oZSl7THIoZSksdGhpcy5iLkpjKG5ldyBwVnQodGhpcy5hLGUpKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBoMnQodGhpcyl9LEYoS2UsIkl0ZXJhYmxlcy80IiwxMDQyKSxEKDEwNDMsMSxVbixwVnQpLGwudGQ9ZnVuY3Rpb24oZSl7X1hlKHRoaXMuYix0aGlzLmEsZSl9LEYoS2UsIkl0ZXJhYmxlcy80L2xhbWJkYSQwJFR5cGUiLDEwNDMpLEQoMTA0NCw1MzcscjAsckt0KSxsLkpjPWZ1bmN0aW9uKGUpe0xyKGUpLHZhKHRoaXMuYSxuZXcgaFZ0KGUsdGhpcy5iKSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbHIobmV3IG5yKHRoaXMuYSksdGhpcy5iKX0sRihLZSwiSXRlcmFibGVzLzUiLDEwNDQpLEQoMTA0NSwxLFVuLGhWdCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQoU1V0KGUpKX0sRihLZSwiSXRlcmFibGVzLzUvbGFtYmRhJDAkVHlwZSIsMTA0NSksRCgxMDcxLDE5OCxGRSxidHQpLGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLlBiKCl9LEYoS2UsIkl0ZXJhdG9ycy8xIiwxMDcxKSxEKDEwNzIsNjk5LEZFLGZWdCksbC5ZYj1mdW5jdGlvbigpe2Zvcih2YXIgZTt0aGlzLmIuT2IoKTspaWYoZT10aGlzLmIuUGIoKSx0aGlzLmEuTGIoZSkpcmV0dXJuIGU7cmV0dXJuIHRoaXMuZT0yLG51bGx9LEYoS2UsIkl0ZXJhdG9ycy81IiwxMDcyKSxEKDQ4NywxLHNhKSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5RZCh0aGlzLmIuUGIoKSl9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmIuUWIoKX0sRihLZSwiVHJhbnNmb3JtZWRJdGVyYXRvciIsNDg3KSxEKDEwNzMsNDg3LHNhLHVXdCksbC5RZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLktiKGUpfSxGKEtlLCJJdGVyYXRvcnMvNiIsMTA3MyksRCg3MTcsMTk4LEZFLHJSKSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYX0sbC5QYj1mdW5jdGlvbigpe2lmKHRoaXMuYSl0aHJvdyBpdChuZXcgbGMpO3JldHVybiB0aGlzLmE9ITAsdGhpcy5ifSxsLmE9ITEsRihLZSwiSXRlcmF0b3JzLzkiLDcxNyksRCgxMDcwLDM4NixORSxfS3QpLGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYVt0aGlzLmIrZV19LGwuYj0wO3ZhciBMZ2U7RihLZSwiSXRlcmF0b3JzL0FycmF5SXRyIiwxMDcwKSxEKDM5LDEsezM5OjEsNDc6MX0sYXIpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB6cih0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBNcih0aGlzKX0sbC5RYj1mdW5jdGlvbigpe2k0KCEhdGhpcy5jKSx0aGlzLmMuUWIoKSx0aGlzLmM9bnVsbH0sRihLZSwiSXRlcmF0b3JzL0NvbmNhdGVuYXRlZEl0ZXJhdG9yIiwzOSksRCgyMiwxLHszOjEsMzU6MSwyMjoxfSksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gckh0KHRoaXMsdShlLDIyKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFB3KHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGJudCh0aGlzKX0sbC5nPTA7dmFyIEhyPUYoWG8sIkVudW0iLDIyKTtEKDUzOCwyMix7NTM4OjEsMzoxLDM1OjEsMjI6MSw0NzoxfSxkV3QpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlBiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IGxjKX0sbC5RYj1mdW5jdGlvbigpe2k0KCExKX07dmFyIE11dCxNZ2U9anIoS2UsIkl0ZXJhdG9ycy9FbXB0eU1vZGlmaWFibGVJdGVyYXRvciIsNTM4LEhyLHlubixlWmUpLERnZTtEKDE4MzQsNjE5LFQyKSxGKEtlLCJMaW5rZWRIYXNoTXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwxODM0KSxEKDE4MzUsMTgzNCxUMixWcmUpLGwuaGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGRudCh0eSh0aGlzLmIpKX0sbC4kYj1mdW5jdGlvbigpe2N6KHRoaXMpLGRNKHRoaXMuYSx0aGlzLmEpfSxsLmdkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkbnQodHkodGhpcy5iKSl9LGwuaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMcmUodGhpcyxlLHRoaXMuYil9LGwua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFMydCh0aGlzKX0sbC5sYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBuZXcgX24oKGU9dGhpcy5nLHUoZXx8KHRoaXMuZz1uZXcgWXB0KHRoaXMpKSwyMSkpLDE3KX0sbC5lYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuaSxlfHwodGhpcy5pPW5ldyBLMyh0aGlzLHRoaXMuYykpfSxsLm5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKcHQobmV3IFMydCh0aGlzKSl9LGwub2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gWE0obmV3IF9uKChlPXRoaXMuZyx1KGV8fCh0aGlzLmc9bmV3IFlwdCh0aGlzKSksMjEpKSwxNyksbmV3IFcpfSxsLmI9MixGKEtlLCJMaW5rZWRIYXNoTXVsdGltYXAiLDE4MzUpLEQoMTgzOCwxLHt9LFcpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MikuZGQoKX0sRihLZSwiTGlua2VkSGFzaE11bHRpbWFwLzBtZXRob2RyZWYkZ2V0VmFsdWUkVHlwZSIsMTgzOCksRCg4MjQsMSxzYSxTMnQpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiAkb24odGhpcyl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hIT10aGlzLmIuYX0sbC5RYj1mdW5jdGlvbigpe2k0KCEhdGhpcy5jKSx4WnQodGhpcy5iLHRoaXMuYy5nLHRoaXMuYy5pKSx0aGlzLmM9bnVsbH0sRihLZSwiTGlua2VkSGFzaE11bHRpbWFwLzEiLDgyNCksRCgzMzAsMjM4LHszNDU6MSwyMzg6MSwzMzA6MSwyMDIwOjEsMzoxLDQyOjF9LEx2dCksbC5SZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuU2Q9ZnVuY3Rpb24oZSl7dGhpcy5jPWV9LGwuVGQ9ZnVuY3Rpb24oZSl7dGhpcy5mPWV9LGwuZD0wO3ZhciBJZ2U9RihLZSwiTGlua2VkSGFzaE11bHRpbWFwL1ZhbHVlRW50cnkiLDMzMCk7RCgxODM2LDE5NzAsezIwMjA6MSwyMDoxLDI4OjEsMTQ6MSwyMToxfSxMcmUpLGwuRmM9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtmb3IoaD1BcihfYShpMCxYZChBcihfYShlPT1udWxsPzA6SGkoZSksczApKSwxNSkpKSxuPWgmdGhpcy5iLmxlbmd0aC0xLG89dGhpcy5iW25dLHI9bztyO3I9ci5hKWlmKHIuZD09aCYmcGQoci5pLGUpKXJldHVybiExO3JldHVybiBzPW5ldyBMdnQodGhpcy5jLGUsaCxvKSxoSHQodGhpcy5kLHMpLHMuZj10aGlzLHRoaXMuZD1zLGRNKHRoaXMuZy5hLmIscyksZE0ocyx0aGlzLmcuYSksdGhpcy5iW25dPXMsKyt0aGlzLmYsKyt0aGlzLmUsUmRuKHRoaXMpLCEwfSxsLiRiPWZ1bmN0aW9uKCl7dmFyIGUsbjtmb3IoQ00odGhpcy5iLG51bGwpLHRoaXMuZj0wLGU9dGhpcy5hO2UhPXRoaXM7ZT1lLlJkKCkpbj11KGUsMzMwKSxkTShuLmIsbi5lKTt0aGlzLmE9dGhpcyx0aGlzLmQ9dGhpcywrK3RoaXMuZX0sbC5IYz1mdW5jdGlvbihlKXt2YXIgbixyO2ZvcihyPUFyKF9hKGkwLFhkKEFyKF9hKGU9PW51bGw/MDpIaShlKSxzMCkpLDE1KSkpLG49dGhpcy5iW3ImdGhpcy5iLmxlbmd0aC0xXTtuO249bi5hKWlmKG4uZD09ciYmcGQobi5pLGUpKXJldHVybiEwO3JldHVybiExfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhciBuO2ZvcihMcihlKSxuPXRoaXMuYTtuIT10aGlzO249bi5SZCgpKWUudGQodShuLDMzMCkuaSl9LGwuUmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB4WHQodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZjZSh0aGlzLGUpfSxsLlNkPWZ1bmN0aW9uKGUpe3RoaXMuZD1lfSxsLlRkPWZ1bmN0aW9uKGUpe3RoaXMuYT1lfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC5lPTAsbC5mPTAsRihLZSwiTGlua2VkSGFzaE11bHRpbWFwL1ZhbHVlU2V0IiwxODM2KSxEKDE4MzcsMSxzYSx4WHQpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBRd3QodGhpcyksdGhpcy5iIT10aGlzLmN9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKFF3dCh0aGlzKSx0aGlzLmI9PXRoaXMuYyl0aHJvdyBpdChuZXcgbGMpO3JldHVybiBlPXUodGhpcy5iLDMzMCksbj1lLmksdGhpcy5kPWUsdGhpcy5iPWUuZixufSxsLlFiPWZ1bmN0aW9uKCl7UXd0KHRoaXMpLGk0KCEhdGhpcy5kKSx2Y2UodGhpcy5jLHRoaXMuZC5pKSx0aGlzLmE9dGhpcy5jLmUsdGhpcy5kPW51bGx9LGwuYT0wLEYoS2UsIkxpbmtlZEhhc2hNdWx0aW1hcC9WYWx1ZVNldC8xIiwxODM3KSxEKDc2NiwxOTg2LFQyLGRVdCksbC5aYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuZixlfHwodGhpcy5mPW5ldyBDYnQodGhpcykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBQaXQodGhpcyxlKX0sbC5jYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGtldCh0aGlzLGUpfSxsLmZjPWZ1bmN0aW9uKGUpe3JldHVybiBjbXQodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3NYdCh0aGlzKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gU1Z0KHRoaXMsZSl9LGwuYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENidCh0aGlzKX0sbC5iYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX3R0KHRoaXMpfSxsLnFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcga2V0KHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5hfSxsLnJjPWZ1bmN0aW9uKGUpe3JldHVybiBjbXQodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuYz0wLGwuZD0wLEYoS2UsIkxpbmtlZExpc3RNdWx0aW1hcCIsNzY2KSxEKDUyLDI4LGpFKSxsLmFkPWZ1bmN0aW9uKGUpe3I0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMTYpfSxsLlZjPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IFNnKCJBZGQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuVmModGhpcy5nYygpLGUpLCEwfSxsLldjPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvO2ZvcihPbihuKSxyPSExLG89bi5LYygpO28uT2IoKTspcz1vLlBiKCksdGhpcy5WYyhlKysscykscj0hMDtyZXR1cm4gcn0sbC4kYj1mdW5jdGlvbigpe3RoaXMuVWQoMCx0aGlzLmdjKCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBrNXQodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBQeXQodGhpcyl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVuZSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBteCh0aGlzKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlpjKDApfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZGEodGhpcyxlKX0sbC4kYz1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgU2coIlJlbW92ZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbGlzdCIpKX0sbC5VZD1mdW5jdGlvbihlLG4pe3ZhciByLHM7Zm9yKHM9dGhpcy5aYyhlKSxyPWU7cjxuOysrcilzLlBiKCkscy5RYigpfSxsLl9jPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IFNnKCJTZXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IFFkKHRoaXMsZSxuKX0sbC5qPTAsRihwciwiQWJzdHJhY3RMaXN0Iiw1MiksRCgxOTY0LDUyLGpFKSxsLlZjPWZ1bmN0aW9uKGUsbil7bTgodGhpcyxlLG4pfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIERyZSh0aGlzLGUsbil9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFpmKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5aYygwKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gRHN0KHRoaXMsZSl9LGwuX2M9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3I9dGhpcy5aYyhlKTt0cnl7cmV0dXJuIHM9ci5QYigpLHIuV2Iobiksc31jYXRjaChvKXt0aHJvdyBvPVdpKG8pLF90KG8sMTA5KT9pdChuZXcgeW8oIkNhbid0IHNldCBlbGVtZW50ICIrZSkpOml0KG8pfX0sRihwciwiQWJzdHJhY3RTZXF1ZW50aWFsTGlzdCIsMTk2NCksRCg2MzYsMTk2NCxqRSxrZXQpLGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHdXdCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dSh0cih0aGlzLmEuYix0aGlzLmIpLDI4MyksZT9lLmE6MH0sRihLZSwiTGlua2VkTGlzdE11bHRpbWFwLzEiLDYzNiksRCgxMjk3LDE5NzAsenUsX3R0KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBTVnQodGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3bmUodGhpcy5hKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4hY210KHRoaXMuYSxlKS5hLmRjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gSEModGhpcy5hLmIpfSxGKEtlLCJMaW5rZWRMaXN0TXVsdGltYXAvMUtleVNldEltcGwiLDEyOTcpLEQoMTI5NiwxLHNhLHduZSksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIFh3dCh0aGlzKSwhIXRoaXMuY30sbC5QYj1mdW5jdGlvbigpe1h3dCh0aGlzKSxNMnQodGhpcy5jKSx0aGlzLmE9dGhpcy5jLEZzKHRoaXMuZCx0aGlzLmEuYSk7ZG8gdGhpcy5jPXRoaXMuYy5iO3doaWxlKHRoaXMuYyYmIUZzKHRoaXMuZCx0aGlzLmMuYSkpO3JldHVybiB0aGlzLmEuYX0sbC5RYj1mdW5jdGlvbigpe1h3dCh0aGlzKSxpNCghIXRoaXMuYSksVmoobmV3IG5pdCh0aGlzLmUsdGhpcy5hLmEpKSx0aGlzLmE9bnVsbCx0aGlzLmI9dGhpcy5lLmN9LGwuYj0wLEYoS2UsIkxpbmtlZExpc3RNdWx0aW1hcC9EaXN0aW5jdEtleUl0ZXJhdG9yIiwxMjk2KSxEKDI4MywxLHsyODM6MX0sUnZ0KSxsLmE9MCxGKEtlLCJMaW5rZWRMaXN0TXVsdGltYXAvS2V5TGlzdCIsMjgzKSxEKDEyOTUsMzQ1LHpxLGJWdCksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLmVkPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXRoaXMuZix0aGlzLmY9ZSxufSxGKEtlLCJMaW5rZWRMaXN0TXVsdGltYXAvTm9kZSIsMTI5NSksRCg1NjAsMSxuMCxuaXQsaG9lKSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhpcy5lPVE1dCh0aGlzLmYsdGhpcy5iLGUsdGhpcy5jKSwrK3RoaXMuZCx0aGlzLmE9bnVsbH0sbC5PYj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmV9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gVnZ0KHRoaXMpfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5VYj1mdW5jdGlvbigpe3JldHVybiBCUXQodGhpcyl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kLTF9LGwuUWI9ZnVuY3Rpb24oKXtpNCghIXRoaXMuYSksdGhpcy5hIT10aGlzLmM/KHRoaXMuZT10aGlzLmEuZSwtLXRoaXMuZCk6dGhpcy5jPXRoaXMuYS5jLEhwbih0aGlzLmYsdGhpcy5hKSx0aGlzLmE9bnVsbH0sbC5XYj1mdW5jdGlvbihlKXtMMnQoISF0aGlzLmEpLHRoaXMuYS5mPWV9LGwuZD0wLEYoS2UsIkxpbmtlZExpc3RNdWx0aW1hcC9WYWx1ZUZvcktleUl0ZXJhdG9yIiw1NjApLEQoMTAxOCw1MixqRSksbC5WYz1mdW5jdGlvbihlLG4pe3RoaXMuYS5WYyhlLG4pfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYS5XYyhlLG4pfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuSGMoZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5YYihlKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLiRjKGUpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYS5fYyhlLG4pfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxGKEtlLCJMaXN0cy9BYnN0cmFjdExpc3RXcmFwcGVyIiwxMDE4KSxEKDEwMTksMTAxOCx3ZmUpLEYoS2UsIkxpc3RzL1JhbmRvbUFjY2Vzc0xpc3RXcmFwcGVyIiwxMDE5KSxEKDEwMjEsMTAxOSx3ZmUseFZ0KSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWmMoZSl9LEYoS2UsIkxpc3RzLzEiLDEwMjEpLEQoMTMxLDUyLHsxMzE6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjF9LE9tKSxsLlZjPWZ1bmN0aW9uKGUsbil7dGhpcy5hLlZjKEM4KHRoaXMsZSksbil9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLlhiKEV2dCh0aGlzLGUpKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBZdnQodGhpcywwKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gWXZ0KHRoaXMsZSl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS4kYyhFdnQodGhpcyxlKSl9LGwuVWQ9ZnVuY3Rpb24oZSxuKXsoQVp0KGUsbix0aGlzLmEuZ2MoKSksbDIodGhpcy5hLmJkKEM4KHRoaXMsbiksQzgodGhpcyxlKSkpKS4kYigpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYS5fYyhFdnQodGhpcyxlKSxuKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiBBWnQoZSxuLHRoaXMuYS5nYygpKSxsMih0aGlzLmEuYmQoQzgodGhpcyxuKSxDOCh0aGlzLGUpKSl9LEYoS2UsIkxpc3RzL1JldmVyc2VMaXN0IiwxMzEpLEQoMjgwLDEzMSx7MTMxOjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU0OjF9LGt3KSxGKEtlLCJMaXN0cy9SYW5kb21BY2Nlc3NSZXZlcnNlTGlzdCIsMjgwKSxEKDEwMjAsMSxuMCx3VnQpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5SYj1mdW5jdGlvbihlKXt0aGlzLmMuUmIoZSksdGhpcy5jLlViKCksdGhpcy5hPSExfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5TYigpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIERKdCh0aGlzKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiBDOCh0aGlzLmIsdGhpcy5jLlRiKCkpfSxsLlViPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYy5PYigpKXRocm93IGl0KG5ldyBsYyk7cmV0dXJuIHRoaXMuYT0hMCx0aGlzLmMuUGIoKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiBDOCh0aGlzLmIsdGhpcy5jLlRiKCkpLTF9LGwuUWI9ZnVuY3Rpb24oKXtpNCh0aGlzLmEpLHRoaXMuYy5RYigpLHRoaXMuYT0hMX0sbC5XYj1mdW5jdGlvbihlKXtMMnQodGhpcy5hKSx0aGlzLmMuV2IoZSl9LGwuYT0hMSxGKEtlLCJMaXN0cy9SZXZlcnNlTGlzdC8xIiwxMDIwKSxEKDQzMiw0ODcsc2EsRkMpLGwuUWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFVSKGUpfSxGKEtlLCJNYXBzLzEiLDQzMiksRCg2OTgsNDg3LHNhLEpwdCksbC5RZD1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDQyKS5kZCgpfSxGKEtlLCJNYXBzLzIiLDY5OCksRCg5NjIsNDg3LHNhLGJXdCksbC5RZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEx3KGUsdlV0KHRoaXMuYSxlKSl9LEYoS2UsIk1hcHMvMyIsOTYyKSxEKDk1OSwxOTcxLHp1LGJ4KSxsLkpjPWZ1bmN0aW9uKGUpe2xLZSh0aGlzLmEsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmtjKCl9LGwuUmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5sYygpfSxGKEtlLCJNYXBzL0l0ZXJhdG9yQmFzZWRBYnN0cmFjdE1hcC8xIiw5NTkpLEQoOTYwLDEse30sQ3R0KSxsLk9kPWZ1bmN0aW9uKGUsbil7dGhpcy5hLnRkKGUpfSxGKEtlLCJNYXBzL0tleVNldC9sYW1iZGEkMCRUeXBlIiw5NjApLEQoOTU4LDI4LHh5LHlWdCksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEudWMoZSl9LGwuSmM9ZnVuY3Rpb24oZSl7THIoZSksdGhpcy5hLndjKG5ldyBtdHQoZSkpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kYygpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKcHQodGhpcy5hLnZjKCkuS2MoKSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG4scjt0cnl7cmV0dXJuIGF5KHRoaXMsZSwhMCl9Y2F0Y2gocyl7aWYocz1XaShzKSxfdChzLDQxKSl7Zm9yKHI9dGhpcy5hLnZjKCkuS2MoKTtyLk9iKCk7KWlmKG49dShyLlBiKCksNDIpLHBkKGUsbi5kZCgpKSlyZXR1cm4gdGhpcy5hLkJjKG4uY2QoKSksITA7cmV0dXJuITF9ZWxzZSB0aHJvdyBpdChzKX19LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LEYoS2UsIk1hcHMvVmFsdWVzIiw5NTgpLEQoOTYxLDEse30sbXR0KSxsLk9kPWZ1bmN0aW9uKGUsbil7dGhpcy5hLnRkKG4pfSxGKEtlLCJNYXBzL1ZhbHVlcy9sYW1iZGEkMCRUeXBlIiw5NjEpLEQoNzM2LDE5ODcsbXYsQ2J0KSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2IoZSk/dGhpcy5hLmNjKGUpOm51bGx9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5fYihlKT90aGlzLmEuZmMoZSk6bnVsbH0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2IoZSl9LGwuRWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHZ0dCh0aGlzKX0sbC5EYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVjKCl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuZ2MoKX0sRihLZSwiTXVsdGltYXBzL0FzTWFwIiw3MzYpLEQoMTEwNCwxOTcxLHp1LHZ0dCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBTUWUodGhpcy5hLmEuZWMoKSxuZXcgeXR0KHRoaXMpKX0sbC5SYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIExpZSh0aGlzLGUpPyhuPXUoZSw0MiksQUtlKHRoaXMuYSxuLmNkKCkpLCEwKTohMX0sRihLZSwiTXVsdGltYXBzL0FzTWFwL0VudHJ5U2V0IiwxMTA0KSxEKDExMDgsMSx7fSx5dHQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHZVdCh0aGlzLGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sRihLZSwiTXVsdGltYXBzL0FzTWFwL0VudHJ5U2V0LzEiLDExMDgpLEQoNTQzLDE5ODksezU0MzoxLDgzNToxLDIwOjEsMjg6MSwxNDoxfSx4dHQpLGwuJGI9ZnVuY3Rpb24oKXtjeih0aGlzLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBBSHQodGhpcy5hLGUpfSxsLkpjPWZ1bmN0aW9uKGUpe0xyKGUpLHZhKE05KHRoaXMuYSksbmV3IEV0dChlKSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZDKE05KHRoaXMuYSkuYS5rYygpKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZH0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBYTShNOSh0aGlzLmEpLk5jKCksbmV3IGV0KX0sRihLZSwiTXVsdGltYXBzL0tleXMiLDU0MyksRCgxMTA2LDEse30sZXQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MikuY2QoKX0sRihLZSwiTXVsdGltYXBzL0tleXMvMG1ldGhvZHJlZiRnZXRLZXkkVHlwZSIsMTEwNiksRCgxMTA1LDQ4NyxzYSx0SHQpLGwuUWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrdHQodShlLDQyKSl9LEYoS2UsIk11bHRpbWFwcy9LZXlzLzEiLDExMDUpLEQoMTk5MCwxLHs0MTY6MX0pLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNDkyKT8obj11KGUsNDE2KSx1KHRoaXMuYS5kZCgpLDE0KS5nYygpPT11KG4uYS5kZCgpLDE0KS5nYygpJiZwZCh0aGlzLmEuY2QoKSxuLmEuY2QoKSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5hLmNkKCksKGU9PW51bGw/MDpIaShlKSledSh0aGlzLmEuZGQoKSwxNCkuZ2MoKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIG49YjkodGhpcy5hLmNkKCkpLGU9dSh0aGlzLmEuZGQoKSwxNCkuZ2MoKSxlPT0xP246bisiIHggIitlfSxGKEtlLCJNdWx0aXNldHMvQWJzdHJhY3RFbnRyeSIsMTk5MCksRCg0OTIsMTk5MCx7NDkyOjEsNDE2OjF9LGt0dCksRihLZSwiTXVsdGltYXBzL0tleXMvMS8xIiw0OTIpLEQoMTEwNywxLFVuLEV0dCksbC50ZD1mdW5jdGlvbihlKXt0aGlzLmEudGQodShlLDQyKS5jZCgpKX0sRihLZSwiTXVsdGltYXBzL0tleXMvbGFtYmRhJDEkVHlwZSIsMTEwNyksRCgxMTEwLDEsVW4sc3QpLGwudGQ9ZnVuY3Rpb24oZSl7QWVuKHUoZSw0MTYpKX0sRihLZSwiTXVsdGlzZXQvbGFtYmRhJDAkVHlwZSIsMTExMCksRCg3MzcsMSxVbixUdHQpLGwudGQ9ZnVuY3Rpb24oZSl7R29uKHRoaXMuYSx1KGUsNDE2KSl9LEYoS2UsIk11bHRpc2V0L2xhbWJkYSQxJFR5cGUiLDczNyksRCgxMTExLDEse30sdXQpLEYoS2UsIk11bHRpc2V0cy8wbWV0aG9kcmVmJGFkZCRUeXBlIiwxMTExKSxEKDczOCwxLHt9LHZ0KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGc24odShlLDQxNikpfSxGKEtlLCJNdWx0aXNldHMvbGFtYmRhJDMkVHlwZSIsNzM4KSxEKDIwMDgsMSxESSksRihLZSwiUmFuZ2VHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzIiwyMDA4KSxEKDUxNCwyMDA4LHsxNjk6MSw1MTQ6MSwzOjEsNDU6MX0sejN0KSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBxS3QodGhpcyx1KGUsMzUpKX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gcUt0KHRoaXMsdShlLDM1KSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsNTE0KT8obj11KGUsNTE0KSxEM3QodGhpcy5hLG4uYSkmJkQzdCh0aGlzLmIsbi5iKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLkhiKCkqMzErdGhpcy5iLkhiKCl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gWFp0KHRoaXMuYSx0aGlzLmIpfSxGKEtlLCJSYW5nZSIsNTE0KSxEKDc3OCwxOTk5LE1fLEpLdCksbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gJDJ0KHRoaXMuYixlKX0sbC5QZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIE5wKHRoaXMuYixlKX0sbC5GZD1mdW5jdGlvbihlKXtyZXR1cm4gJDJ0KHRoaXMuYixlKX0sRihLZSwiUmVndWxhckltbXV0YWJsZUFzTGlzdCIsNzc4KSxEKDY0NiwyMDA2LE1fLHZydCksbC5IZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LEYoS2UsIlJlZ3VsYXJJbW11dGFibGVMaXN0Iiw2NDYpLEQoNjE2LDcxNSxCRSx1ZXQpLEYoS2UsIlJlZ3VsYXJJbW11dGFibGVNYXAiLDYxNiksRCg3MTYsNzAzLFJFLFNidCk7dmFyIGVFdDtGKEtlLCJSZWd1bGFySW1tdXRhYmxlU2V0Iiw3MTYpLEQoMTk3NixOMSx6dSksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgSXZ0KHRoaXMuYSx0aGlzLmIpfSxsLkZjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuR2M9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC4kYj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwuTWM9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sRihLZSwiU2V0cy9TZXRWaWV3IiwxOTc2KSxEKDk2MywxOTc2LHp1LHZWdCksbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgSXZ0KHRoaXMuYSx0aGlzLmIpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB6bnQodGhpcy5hLGUpJiZ0aGlzLmIuSGMoZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIE5EKHRoaXMuYSxlKSYmdGhpcy5iLkljKGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIGdzZSh0aGlzLmIsdGhpcy5hKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiBSaShuZXcgVG4obnVsbCxuZXcgX24odGhpcy5hLDEpKSxuZXcgVGgodGhpcy5iKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gT0QodGhpcyl9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gUmkobmV3IFRuKG51bGwsbmV3IF9uKHRoaXMuYSwxKSksbmV3IEtrKHRoaXMuYikpfSxGKEtlLCJTZXRzLzIiLDk2MyksRCg3MDAsNjk5LEZFLEl2dCksbC5ZYj1mdW5jdGlvbigpe2Zvcih2YXIgZTtwMnQodGhpcy5hKTspaWYoZT1qOSh0aGlzLmEpLHRoaXMuYy5IYyhlKSlyZXR1cm4gZTtyZXR1cm4gdGhpcy5lPTIsbnVsbH0sRihLZSwiU2V0cy8yLzEiLDcwMCksRCg5NjQsMSxsaSxLayksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLkhjKGUpfSxGKEtlLCJTZXRzLzIvNG1ldGhvZHJlZiRjb250YWlucyRUeXBlIiw5NjQpLEQoOTY1LDEsbGksVGgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5IYyhlKX0sRihLZSwiU2V0cy8yLzVtZXRob2RyZWYkY29udGFpbnMkVHlwZSIsOTY1KSxEKDYwNywxOTc1LHs2MDc6MSwzOjEsMjA6MSwxNDoxLDI3MToxLDIxOjEsODQ6MX0sbVF0KSxsLkJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5DZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuTWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLkpjPWZ1bmN0aW9uKGUpe3RoaXMuYS5KYyhlKX0sbC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuTGMoKX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2MoKX0sRihLZSwiU2V0cy9Vbm1vZGlmaWFibGVOYXZpZ2FibGVTZXQiLDYwNyksRCgxOTMyLDE5MzEsQkUsU1h0KSxsLkxkPWZ1bmN0aW9uKCl7cmV0dXJuIGdkKCksbmV3IEF4KHRoaXMuYSl9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gZ2QoKSxuZXcgQXgodGhpcy5hKX0sbC5wZD1mdW5jdGlvbigpe3JldHVybiBnZCgpLG5ldyBBeCh0aGlzLmEpfSxGKEtlLCJTaW5nbGV0b25JbW11dGFibGVCaU1hcCIsMTkzMiksRCg2NDcsMjAwNixNXyxSbnQpLGwuSGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxGKEtlLCJTaW5nbGV0b25JbW11dGFibGVMaXN0Iiw2NDcpLEQoMzUwLDE5ODEsUkUsQXgpLGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJSKHRoaXMuYSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHlpKHRoaXMuYSxlKX0sbC5FZD1mdW5jdGlvbigpe3JldHVybiBuZXcgclIodGhpcy5hKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAxfSxGKEtlLCJTaW5nbGV0b25JbW11dGFibGVTZXQiLDM1MCksRCgxMTE1LDEse30sWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDE2NCl9LEYoS2UsIlN0cmVhbXMvbGFtYmRhJDAkVHlwZSIsMTExNSksRCgxMTE2LDEsVnEsU3R0KSxsLlZkPWZ1bmN0aW9uKCl7X2FuKHRoaXMuYSl9LEYoS2UsIlN0cmVhbXMvbGFtYmRhJDEkVHlwZSIsMTExNiksRCgxNjU5LDE2NTgsVDIsaFF0KSxsLlpiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5mLHUodShlfHwodGhpcy5mPV90KHRoaXMuYywxNzEpP25ldyBEaih0aGlzLHUodGhpcy5jLDE3MSkpOl90KHRoaXMuYywxNjEpP25ldyBITSh0aGlzLHUodGhpcy5jLDE2MSkpOm5ldyBsOCh0aGlzLHRoaXMuYykpLDE2MSksMTcxKX0sbC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgT3AodGhpcy5iKX0sbC5nZD1mdW5jdGlvbigpe3JldHVybiBuZXcgT3AodGhpcy5iKX0sbC5lYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuaSx1KHUoZXx8KHRoaXMuaT1fdCh0aGlzLmMsMTcxKT9uZXcgdTgodGhpcyx1KHRoaXMuYywxNzEpKTpfdCh0aGlzLmMsMTYxKT9uZXcgbU0odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgSzModGhpcyx0aGlzLmMpKSw4NCksMjcxKX0sbC5hYz1mdW5jdGlvbigpe3JldHVybiBfdCh0aGlzLmMsMTcxKT9uZXcgRGoodGhpcyx1KHRoaXMuYywxNzEpKTpfdCh0aGlzLmMsMTYxKT9uZXcgSE0odGhpcyx1KHRoaXMuYywxNjEpKTpuZXcgbDgodGhpcyx0aGlzLmMpfSxsLmljPWZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsJiZ0aGlzLmEudWUoZSxlKSxuZXcgT3AodGhpcy5iKX0sRihLZSwiVHJlZU11bHRpbWFwIiwxNjU5KSxEKDc4LDEsezM6MSw3ODoxfSksbC5XZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEVycm9yKGUpfSxsLlhkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0sbC5ZZD1mdW5jdGlvbigpe3JldHVybiBqaG4od3UoUW50KCh0aGlzLms9PW51bGwmJih0aGlzLms9TnQoRHV0LGVlLDc4LDAsMCwxKSksdGhpcy5rKSksbmV3IEZ0KSl9LGwuWmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxsLiRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30sbC5fZD1mdW5jdGlvbigpe3BLZSh0aGlzLG1zbih0aGlzLldkKG1ydCh0aGlzLHRoaXMuZykpKSksYXF0KHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIG1ydCh0aGlzLHRoaXMuJGQoKSl9LGwuZT12ZmUsbC5pPSExLGwubj0hMDt2YXIgRHV0PUYoWG8sIlRocm93YWJsZSIsNzgpO0QoMTAyLDc4LHszOjEsMTAyOjEsNzg6MX0pLEYoWG8sIkV4Y2VwdGlvbiIsMTAyKSxEKDYwLDEwMixRMCxLYixWbyksRihYbywiUnVudGltZUV4Y2VwdGlvbiIsNjApLEQoNTk4LDYwLFEwKSxGKFhvLCJKc0V4Y2VwdGlvbiIsNTk4KSxEKDg2Myw1OTgsUTApLEYoRkksIkphdmFTY3JpcHRFeGNlcHRpb25CYXNlIiw4NjMpLEQoNDc3LDg2Myx7NDc3OjEsMzoxLDEwMjoxLDYwOjEsNzg6MX0sSHJlKSxsLiRkPWZ1bmN0aW9uKCl7cmV0dXJuIGMwbih0aGlzKSx0aGlzLmN9LGwuYWU9ZnVuY3Rpb24oKXtyZXR1cm4gVnQodGhpcy5iKT09PVZ0KG5FdCk/bnVsbDp0aGlzLmJ9O3ZhciBuRXQ7RigkeHQsIkphdmFTY3JpcHRFeGNlcHRpb24iLDQ3Nyk7dmFyIE9nZT1GKCR4dCwiSmF2YVNjcmlwdE9iamVjdCQiLDApLEl1dDtEKDE5NDgsMSx7fSksRigkeHQsIlNjaGVkdWxlciIsMTk0OCk7dmFyIFpIPTAsUGdlPTAsSkg9LTE7RCg4OTAsMTk0OCx7fSxwdCk7dmFyIHJFdDtGKEZJLCJTY2hlZHVsZXJJbXBsIiw4OTApO3ZhciBPdXQ7RCgxOTYwLDEse30pLEYoRkksIlN0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3RvciIsMTk2MCksRCg4NjQsMTk2MCx7fSxVKSxsLmJlPWZ1bmN0aW9uKGUpe3ZhciBuPXt9LHI9W107ZVtYYXRdPXI7Zm9yKHZhciBzPWFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyO3M7KXt2YXIgbz0oSTgoKSxzLm5hbWV8fChzLm5hbWU9b2NuKHMudG9TdHJpbmcoKSkpKTtyLnB1c2gobyk7dmFyIGg9IjoiK28sZD1uW2hdO2lmKGQpe3ZhciB2LGs7Zm9yKHY9MCxrPWQubGVuZ3RoO3Y8azt2KyspaWYoZFt2XT09PXMpcmV0dXJufShkfHwobltoXT1bXSkpLnB1c2gocykscz1zLmNhbGxlcn19LGwuY2U9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKHM9KEk4KCksZSYmZVtYYXRdP2VbWGF0XTpbXSkscj1zLmxlbmd0aCxvPU50KHdFdCxlZSwzMTAsciwwLDEpLG49MDtuPHI7bisrKW9bbl09bmV3IGxydChzW25dLG51bGwsLTEpO3JldHVybiBvfSxGKEZJLCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JMZWdhY3kiLDg2NCksRCgxOTYxLDE5NjAse30pLGwuYmU9ZnVuY3Rpb24oZSl7fSxsLmRlPWZ1bmN0aW9uKGUsbixyLHMpe3JldHVybiBuZXcgbHJ0KG4sZSsiQCIrcyxyPDA/LTE6cil9LGwuY2U9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkO2lmKG89UDFuKGUpLGg9TnQod0V0LGVlLDMxMCwwLDAsMSksbj0wLHM9by5sZW5ndGgscz09MClyZXR1cm4gaDtmb3IoZD10aGUodGhpcyxvWzBdKSxobihkLmQsS2F0KXx8KGhbbisrXT1kKSxyPTE7cjxzO3IrKyloW24rK109dGhlKHRoaXMsb1tyXSk7cmV0dXJuIGh9LEYoRkksIlN0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3Rvck1vZGVybiIsMTk2MSksRCg4NjUsMTk2MSx7fSxidCksbC5kZT1mdW5jdGlvbihlLG4scixzKXtyZXR1cm4gbmV3IGxydChuLGUsLTEpfSxGKEZJLCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JNb2Rlcm5Ob1NvdXJjZU1hcCIsODY1KSxEKDEwNTAsMSx7fSksRihxeHQseGZlLDEwNTApLEQoNjE1LDEwNTAsezYxNToxfSxwWHQpO3ZhciBpRXQ7Rihwb3QseGZlLDYxNSksRCgyMDAxLDEse30pLEYocXh0LGtmZSwyMDAxKSxEKDIwMDIsMjAwMSx7fSksRihwb3Qsa2ZlLDIwMDIpLEQoMTA5MCwxLHt9LG10KTt2YXIgY1M7Rihwb3QsIkxvY2FsZUluZm8iLDEwOTApLEQoMTkxOCwxLHt9LHl0KSxsLmE9MCxGKHBvdCwiVGltZVpvbmUiLDE5MTgpLEQoMTI1OCwyMDAyLHt9LGF0KSxGKCJjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudC5pbXBsLmNsZHIiLCJEYXRlVGltZUZvcm1hdEluZm9JbXBsIiwxMjU4KSxEKDQzNCwxLHs0MzQ6MX0sR1l0KSxsLmE9ITEsbC5iPTAsRihxeHQsIkRhdGVUaW1lRm9ybWF0L1BhdHRlcm5QYXJ0Iiw0MzQpLEQoMTk5LDEsRWZlLEJSLE15dCxYMnQpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGJzbih0aGlzLHUoZSwxOTkpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOTkpJiZEdyhUdSh0aGlzLnEuZ2V0VGltZSgpKSxUdSh1KGUsMTk5KS5xLmdldFRpbWUoKSkpfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9VHUodGhpcy5xLmdldFRpbWUoKSksQXIoRHJ0KGUsVm0oZSwzMikpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scjtyZXR1cm4gcj0tdGhpcy5xLmdldFRpbWV6b25lT2Zmc2V0KCksZT0ocj49MD8iKyI6IiIpKyhyLzYwfDApLG49Z2ooYi5NYXRoLmFicyhyKSU2MCksKFBhZSgpLFZnZSlbdGhpcy5xLmdldERheSgpXSsiICIrR2dlW3RoaXMucS5nZXRNb250aCgpXSsiICIrZ2oodGhpcy5xLmdldERhdGUoKSkrIiAiK2dqKHRoaXMucS5nZXRIb3VycygpKSsiOiIrZ2oodGhpcy5xLmdldE1pbnV0ZXMoKSkrIjoiK2dqKHRoaXMucS5nZXRTZWNvbmRzKCkpKyIgR01UIitlK24rIiAiK3RoaXMucS5nZXRGdWxsWWVhcigpfTt2YXIgdFY9RihwciwiRGF0ZSIsMTk5KTtEKDE5MTUsMTk5LEVmZSxvYWUpLGwuYT0hMSxsLmI9MCxsLmM9MCxsLmQ9MCxsLmU9MCxsLmY9MCxsLmc9ITEsbC5pPTAsbC5qPTAsbC5rPTAsbC5uPTAsbC5vPTAsbC5wPTAsRigiY29tLmdvb2dsZS5nd3QuaTE4bi5zaGFyZWQuaW1wbCIsIkRhdGVSZWNvcmQiLDE5MTUpLEQoMTk2NiwxLHt9KSxsLmZlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5oZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmllPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuamU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sRih2NiwiSlNPTlZhbHVlIiwxOTY2KSxEKDIxNiwxOTY2LHsyMTY6MX0sRWcsd3gpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjE2KT9YdnQodGhpcy5hLHUoZSwyMTYpLmEpOiExfSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIEtZZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBCdnQodGhpcy5hKX0sbC5mZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2ZvcihyPW5ldyBPbCgiWyIpLG49MCxlPXRoaXMuYS5sZW5ndGg7bjxlO24rKyluPjAmJihyLmErPSIsIiksaGMocixKbSh0aGlzLG4pKTtyZXR1cm4gci5hKz0iXSIsci5hfSxGKHY2LCJKU09OQXJyYXkiLDIxNiksRCg0ODMsMTk2Nix7NDgzOjF9LFhrKSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIFhZZX0sbC5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIE5uKCksIiIrdGhpcy5hfSxsLmE9ITE7dmFyIEZnZSxOZ2U7Rih2NiwiSlNPTkJvb2xlYW4iLDQ4MyksRCg5ODUsNjAsUTAsZUh0KSxGKHY2LCJKU09ORXhjZXB0aW9uIiw5ODUpLEQoMTAyMywxOTY2LHt9LGZ0KSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIGVLZX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBfdX07dmFyIEJnZTtGKHY2LCJKU09OTnVsbCIsMTAyMyksRCgyNTgsMTk2Nix7MjU4OjF9LEVDKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDI1OCk/dGhpcy5hPT11KGUsMjU4KS5hOiExfSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIFFZZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBwOCh0aGlzLmEpfSxsLmhlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIifSxsLmE9MCxGKHY2LCJKU09OTnVtYmVyIiwyNTgpLEQoMTgzLDE5NjYsezE4MzoxfSxfeCxRayksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxODMpP1h2dCh0aGlzLmEsdShlLDE4MykuYSk6ITF9LGwuZWU9ZnVuY3Rpb24oKXtyZXR1cm4gWlllfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEJ2dCh0aGlzLmEpfSxsLmllPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGgsZDtmb3IoZD1uZXcgT2woInsiKSxlPSEwLGg9eWl0KHRoaXMsTnQoQWUsZWUsMiwwLDYsMSkpLHI9aCxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxlP2U9ITE6ZC5hKz1ZYSxHcihkLFpvZShuKSksZC5hKz0iOiIsaGMoZCxCMCh0aGlzLG4pKTtyZXR1cm4gZC5hKz0ifSIsZC5hfSxGKHY2LCJKU09OT2JqZWN0IiwxODMpLEQoNTk2LE4xLHp1LEVldCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSkmJlBLZSh0aGlzLmEsQnIoZSkpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBteChuZXcgeWwodGhpcy5iKSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmxlbmd0aH0sRih2NiwiSlNPTk9iamVjdC8xIiw1OTYpO3ZhciBQdXQ7RCgyMDQsMTk2Nix7MjA0OjF9LFVtKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDIwNCk/aG4odGhpcy5hLHUoZSwyMDQpLmEpOiExfSxsLmVlPWZ1bmN0aW9uKCl7cmV0dXJuIEpZZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBWZyh0aGlzLmEpfSxsLmplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gWm9lKHRoaXMuYSl9LEYodjYsIkpTT05TdHJpbmciLDIwNCk7dmFyIGhiLHNFdCxSZ2UsYUV0LG9FdDtEKDE5NjIsMSx7NTI1OjF9KSxGKEh4dCwiT3V0cHV0U3RyZWFtIiwxOTYyKSxEKDE5NjMsMTk2Mix7NTI1OjF9KSxGKEh4dCwiRmlsdGVyT3V0cHV0U3RyZWFtIiwxOTYzKSxEKDg2NiwxOTYzLHs1MjU6MX0sQ3QpLEYoSHh0LCJQcmludFN0cmVhbSIsODY2KSxEKDQxOCwxLHs0NzU6MX0pLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxGKFhvLCJBYnN0cmFjdFN0cmluZ0J1aWxkZXIiLDQxOCksRCg1MjksNjAsUTAsX1IpLEYoWG8sIkFyaXRobWV0aWNFeGNlcHRpb24iLDUyOSksRCg3Myw2MCxib3QsRHB0LHlvKSxGKFhvLCJJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiw3MyksRCgzMjAsNzMsezM6MSwzMjA6MSwxMDI6MSw3MzoxLDYwOjEsNzg6MX0sT3B0LGlidCksRihYbywiQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiwzMjApLEQoNTI4LDYwLFEwLHRldCxpSHQpLEYoWG8sIkFycmF5U3RvcmVFeGNlcHRpb24iLDUyOCksRCgyODksNzgsVGZlLGZldCksRihYbywiRXJyb3IiLDI4OSksRCgxOTQsMjg5LFRmZSxNcHQsZG10KSxGKFhvLCJBc3NlcnRpb25FcnJvciIsMTk0KSxDZ2U9ezM6MSw0NzY6MSwzNToxfTt2YXIgRjIscjcsUnM9RihYbywiQm9vbGVhbiIsNDc2KTtEKDIzNiwxLHszOjEsMjM2OjF9KTt2YXIgY0V0O0YoWG8sIk51bWJlciIsMjM2KSxEKDIxNywyMzYsezM6MSwyMTc6MSwzNToxLDIzNjoxfSxxdHQpLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIERLZSh0aGlzLHUoZSwyMTcpKX0sbC5rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjE3KSYmdShlLDIxNykuYT09dGhpcy5hfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0sbC5hPTA7dmFyIE02PUYoWG8sIkJ5dGUiLDIxNyksdUV0O0QoMTcyLDEsezM6MSwxNzI6MSwzNToxfSxoUiksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gSUtlKHRoaXMsdShlLDE3MikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE3MikmJnUoZSwxNzIpLmE9PXRoaXMuYX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmEpfSxsLmE9MDt2YXIgbEV0LHVTPUYoWG8sIkNoYXJhY3RlciIsMTcyKSxoRXQ7RCgyMDUsNjAsezM6MSwyMDU6MSwxMDI6MSw2MDoxLDc4OjF9LG9xdCxpOCksRihYbywiQ2xhc3NDYXN0RXhjZXB0aW9uIiwyMDUpLF9nZT17MzoxLDM1OjEsMzMzOjEsMjM2OjF9O3ZhciBsYT1GKFhvLCJEb3VibGUiLDMzMyk7RCgxNTUsMjM2LHszOjEsMzU6MSwxNTU6MSwyMzY6MX0sUDMsUHB0KSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiAkWGUodGhpcyx1KGUsMTU1KSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE1NSkmJnZZdCh0aGlzLmEsdShlLDE1NSkuYSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gcHModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0sbC5hPTA7dmFyIGk3PUYoWG8sIkZsb2F0IiwxNTUpO0QoMzIsNjAsezM6MSwxMDI6MSwzMjoxLDYwOjEsNzg6MX0sZ00sRm4sRnJlKSxGKFhvLCJJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLDMyKSxEKDcxLDYwLFEwLE91LE5vKSxGKFhvLCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iLDcxKSxEKDE5LDIzNix7MzoxLDM1OjEsMTk6MSwyMzY6MX0sdU0pLGwud2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHpYZSh0aGlzLHUoZSwxOSkpfSxsLmtlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOSkmJnUoZSwxOSkuYT09dGhpcy5hfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0sbC5hPTA7dmFyIGphPUYoWG8sIkludGVnZXIiLDE5KSxmRXQsamdlO0QoMTYyLDIzNix7MzoxLDM1OjEsMTYyOjEsMjM2OjF9LEFtKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBxWGUodGhpcyx1KGUsMTYyKSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gWXcodGhpcy5hKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNjIpJiZEdyh1KGUsMTYyKS5hLHRoaXMuYSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gQXIodGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIiK185KHRoaXMuYSl9LGwuYT0wO3ZhciBTdj1GKFhvLCJMb25nIiwxNjIpLGRFdDtEKDIwMzksMSx7fSksRCgxODMxLDYwLFEwLGFIdCksRihYbywiTmVnYXRpdmVBcnJheVNpemVFeGNlcHRpb24iLDE4MzEpLEQoMTczLDU5OCx7MzoxLDEwMjoxLDE3MzoxLDYwOjEsNzg6MX0sSUMsU3gpLGwuV2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoZSl9LEYoWG8sIk51bGxQb2ludGVyRXhjZXB0aW9uIiwxNzMpO3ZhciBnRXQsRnV0LCRnZSxwRXQ7RCgxMjcsMzIsezM6MSwxMDI6MSwzMjoxLDEyNzoxLDYwOjEsNzg6MX0sbGQpLEYoWG8sIk51bWJlckZvcm1hdEV4Y2VwdGlvbiIsMTI3KSxEKDE4NCwyMzYsezM6MSwzNToxLDIzNjoxLDE4NDoxfSxmUiksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gT0tlKHRoaXMsdShlLDE4NCkpfSxsLmtlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxODQpJiZ1KGUsMTg0KS5hPT10aGlzLmF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5hfSxsLmE9MDt2YXIgQXY9RihYbywiU2hvcnQiLDE4NCksYkV0O0QoMzEwLDEsezM6MSwzMTA6MX0sbHJ0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDMxMCk/KG49dShlLDMxMCksdGhpcy5jPT1uLmMmJnRoaXMuZD09bi5kJiZ0aGlzLmE9PW4uYSYmdGhpcy5iPT1uLmIpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEF6KGx0KGN0KFFuLDEpLERlLDEsNSxbcGUodGhpcy5jKSx0aGlzLmEsdGhpcy5kLHRoaXMuYl0pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmErIi4iK3RoaXMuZCsiKCIrKHRoaXMuYiE9bnVsbD90aGlzLmI6IlVua25vd24gU291cmNlIikrKHRoaXMuYz49MD8iOiIrdGhpcy5jOiIiKSsiKSJ9LGwuYz0wO3ZhciB3RXQ9RihYbywiU3RhY2tUcmFjZUVsZW1lbnQiLDMxMCk7U2dlPXszOjEsNDc1OjEsMzU6MSwyOjF9O3ZhciBBZT1GKFhvLGp4dCwyKTtEKDEwNyw0MTgsezQ3NToxfSxBZywkQyxfaCksRihYbywiU3RyaW5nQnVmZmVyIiwxMDcpLEQoMTAwLDQxOCx7NDc1OjF9LE1wLEltLE9sKSxGKFhvLCJTdHJpbmdCdWlsZGVyIiwxMDApLEQoNjg3LDczLGJvdCxzYnQpLEYoWG8sIlN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLDY4NyksRCgyMDQzLDEse30pO3ZhciB2RXQ7RCg4NDQsMSx7fSxGdCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDc4KS5lfSxGKFhvLCJUaHJvd2FibGUvbGFtYmRhJDAkVHlwZSIsODQ0KSxEKDQxLDYwLHszOjEsMTAyOjEsNjA6MSw3ODoxLDQxOjF9LE9yLFNnKSxGKFhvLCJVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiIsNDEpLEQoMjQwLDIzNix7MzoxLDM1OjEsMjM2OjEsMjQwOjF9LFNELGdidCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gZ2xlKHRoaXMsdShlLDI0MCkpfSxsLmtlPWZ1bmN0aW9uKCl7cmV0dXJuIGR5KFhsZSh0aGlzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXM9PT1lPyEwOl90KGUsMjQwKT8obj11KGUsMjQwKSx0aGlzLmU9PW4uZSYmZ2xlKHRoaXMsbik9PTApOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYiE9MD90aGlzLmI6dGhpcy5hPDU0PyhlPVR1KHRoaXMuZiksdGhpcy5iPUFyKE5zKGUsLTEpKSx0aGlzLmI9MzMqdGhpcy5iK0FyKE5zKCRwKGUsMzIpLC0xKSksdGhpcy5iPTE3KnRoaXMuYitwcyh0aGlzLmUpLHRoaXMuYik6KHRoaXMuYj0xNypZcmUodGhpcy5jKStwcyh0aGlzLmUpLHRoaXMuYil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gWGxlKHRoaXMpfSxsLmE9MCxsLmI9MCxsLmQ9MCxsLmU9MCxsLmY9MDt2YXIgemdlLE4yLG1FdCx5RXQseEV0LGtFdCxFRXQsVEV0LE51dD1GKCJqYXZhLm1hdGgiLCJCaWdEZWNpbWFsIiwyNDApO0QoOTEsMjM2LHszOjEsMzU6MSwyMzY6MSw5MToxfSxqM3QsTmcsWDMseDR0LFFpZSxScCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gVWllKHRoaXMsdShlLDkxKSl9LGwua2U9ZnVuY3Rpb24oKXtyZXR1cm4gZHkoSGF0KHRoaXMsMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB2M3QodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBZcmUodGhpcyl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gSGF0KHRoaXMsMCl9LGwuYj0tMixsLmM9MCxsLmQ9MCxsLmU9MDt2YXIgQnV0LGVWLENFdCxSdXQsblYsczcsajQ9RigiamF2YS5tYXRoIiwiQmlnSW50ZWdlciIsOTEpLHFnZSxIZ2UsRDYsbFM7RCg0ODgsMTk2NyxtdiksbC4kYj1mdW5jdGlvbigpe1h1KHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBUbCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3JldHVybiBJcmUodGhpcyxlLHRoaXMuZyl8fElyZSh0aGlzLGUsdGhpcy5mKX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgQ2codGhpcyl9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRyKHRoaXMsZSl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga2kodGhpcyxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBKeCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIEhDKHRoaXMpfSxGKHByLCJBYnN0cmFjdEhhc2hNYXAiLDQ4OCksRCgyNjEsTjEsenUsQ2cpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gTVp0KHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHAyKHRoaXMuYSl9LGwuTWM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIE1adCh0aGlzLGUpPyhuPXUoZSw0MikuY2QoKSx0aGlzLmEuQmMobiksITApOiExfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxGKHByLCJBYnN0cmFjdEhhc2hNYXAvRW50cnlTZXQiLDI2MSksRCgyNjIsMSxzYSxwMiksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIFp3KHRoaXMpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5RYj1mdW5jdGlvbigpe1N0ZSh0aGlzKX0sbC5iPSExLEYocHIsIkFic3RyYWN0SGFzaE1hcC9FbnRyeVNldEl0ZXJhdG9yIiwyNjIpLEQoNDE3LDEsc2EsbXgpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBUTSh0aGlzKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBaWHQodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtDbCh0aGlzKX0sbC5iPTAsbC5jPS0xLEYocHIsIkFic3RyYWN0TGlzdC9JdGVyYXRvckltcGwiLDQxNyksRCg5Niw0MTcsbjAsZGEpLGwuUWI9ZnVuY3Rpb24oKXtDbCh0aGlzKX0sbC5SYj1mdW5jdGlvbihlKXt6bSh0aGlzLGUpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj4wfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5VYj1mdW5jdGlvbigpe3JldHVybiBabih0aGlzLmI+MCksdGhpcy5hLlhiKHRoaXMuYz0tLXRoaXMuYil9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLTF9LGwuV2I9ZnVuY3Rpb24oZSl7Um0odGhpcy5jIT0tMSksdGhpcy5hLl9jKHRoaXMuYyxlKX0sRihwciwiQWJzdHJhY3RMaXN0L0xpc3RJdGVyYXRvckltcGwiLDk2KSxEKDIxOSw1MixqRSxRZCksbC5WYz1mdW5jdGlvbihlLG4pe0ttKGUsdGhpcy5iKSx0aGlzLmMuVmModGhpcy5hK2UsbiksKyt0aGlzLmJ9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIEFuKGUsdGhpcy5iKSx0aGlzLmMuWGIodGhpcy5hK2UpfSxsLiRjPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBBbihlLHRoaXMuYiksbj10aGlzLmMuJGModGhpcy5hK2UpLC0tdGhpcy5iLG59LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQW4oZSx0aGlzLmIpLHRoaXMuYy5fYyh0aGlzLmErZSxuKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuYT0wLGwuYj0wLEYocHIsIkFic3RyYWN0TGlzdC9TdWJMaXN0IiwyMTkpLEQoMzg0LE4xLHp1LFNtKSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5fYihlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYS52YygpLktjKCksbmV3IGNNKGUpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuX2IoZSk/KHRoaXMuYS5CYyhlKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LEYocHIsIkFic3RyYWN0TWFwLzEiLDM4NCksRCg2OTEsMSxzYSxjTSksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dSh0aGlzLmEuUGIoKSw0MiksZS5jZCgpfSxsLlFiPWZ1bmN0aW9uKCl7dGhpcy5hLlFiKCl9LEYocHIsIkFic3RyYWN0TWFwLzEvMSIsNjkxKSxEKDIyNiwyOCx4eSx2MSksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEudWMoZSl9LGwuS2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLmEudmMoKS5LYygpLG5ldyBtMShlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sRihwciwiQWJzdHJhY3RNYXAvMiIsMjI2KSxEKDI5NCwxLHNhLG0xKSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KHRoaXMuYS5QYigpLDQyKSxlLmRkKCl9LGwuUWI9ZnVuY3Rpb24oKXt0aGlzLmEuUWIoKX0sRihwciwiQWJzdHJhY3RNYXAvMi8xIiwyOTQpLEQoNDg0LDEsezQ4NDoxLDQyOjF9KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDQyKT8obj11KGUsNDIpLEZjKHRoaXMuZCxuLmNkKCkpJiZGYyh0aGlzLmUsbi5kZCgpKSk6ITF9LGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBVMyh0aGlzLmQpXlUzKHRoaXMuZSl9LGwuZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGF3dCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZCsiPSIrdGhpcy5lfSxGKHByLCJBYnN0cmFjdE1hcC9BYnN0cmFjdEVudHJ5Iiw0ODQpLEQoMzgzLDQ4NCx7NDg0OjEsMzgzOjEsNDI6MX0sS1IpLEYocHIsIkFic3RyYWN0TWFwL1NpbXBsZUVudHJ5IiwzODMpLEQoMTk4NCwxLHlvdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gX3QoZSw0Mik/KG49dShlLDQyKSxGYyh0aGlzLmNkKCksbi5jZCgpKSYmRmModGhpcy5kZCgpLG4uZGQoKSkpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFUzKHRoaXMuY2QoKSleVTModGhpcy5kZCgpKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNkKCkrIj0iK3RoaXMuZGQoKX0sRihwcixoZmUsMTk4NCksRCgxOTkyLDE5NjcsdWZlKSxsLnRjPWZ1bmN0aW9uKGUpe3JldHVybiBSSnQodGhpcyxlKX0sbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4gX250KHRoaXMsZSl9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHgodGhpcyl9LGwueGM9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49ZSxlYyhqeXQodGhpcyxuKSl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHkodGhpcyl9LEYocHIsIkFic3RyYWN0TmF2aWdhYmxlTWFwIiwxOTkyKSxEKDczOSxOMSx6dSx4KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDQyKSYmUkp0KHRoaXMuYix1KGUsNDIpKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgeTkodGhpcy5iKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gX3QoZSw0Mik/KG49dShlLDQyKSxDdGUodGhpcy5iLG4pKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuY30sRihwciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvRW50cnlTZXQiLDczOSksRCg0OTMsTjEsQnh0LHkpLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFdSKHRoaXMpfSxsLiRiPWZ1bmN0aW9uKCl7TkModGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gX250KHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyB5OShuZXcgdzkodGhpcy5hKS5iKSxuZXcgZyhlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gX250KHRoaXMuYSxlKT8oUDkodGhpcy5hLGUpLCEwKTohMX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuY30sRihwciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvTmF2aWdhYmxlS2V5U2V0Iiw0OTMpLEQoNDk0LDEsc2EsZyksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIFRNKHRoaXMuYS5hKX0sbC5QYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPUxqKHRoaXMuYSksZS5jZCgpfSxsLlFiPWZ1bmN0aW9uKCl7QVl0KHRoaXMuYSl9LEYocHIsIkFic3RyYWN0TmF2aWdhYmxlTWFwL05hdmlnYWJsZUtleVNldC8xIiw0OTQpLEQoMjAwNCwyOCx4eSksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gUjgoeEUodGhpcyxlKSksITB9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIE9uKGUpLEJqKGUhPXRoaXMsIkNhbid0IGFkZCBhIHF1ZXVlIHRvIGl0c2VsZiIpLFVhKHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXtmb3IoO2NpdCh0aGlzKSE9bnVsbDspO30sRihwciwiQWJzdHJhY3RRdWV1ZSIsMjAwNCksRCgzMDIsMjgsezQ6MSwyMDoxLDI4OjEsMTQ6MX0sQjMsZVp0KSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBpbXQodGhpcyxlKSwhMH0sbC4kYj1mdW5jdGlvbigpe2xtdCh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gZXJlKG5ldyBPOSh0aGlzKSxlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiBCQyh0aGlzKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTzkodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGhpbihuZXcgTzkodGhpcyksZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLXRoaXMuYiZ0aGlzLmEubGVuZ3RoLTF9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMjcyKX0sbC5RYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLmMtdGhpcy5iJnRoaXMuYS5sZW5ndGgtMSxlLmxlbmd0aDxuJiYoZT1MUihuZXcgQXJyYXkobiksZSkpLGRuZSh0aGlzLGUsbiksZS5sZW5ndGg+biYmdHMoZSxuLG51bGwpLGV9LGwuYj0wLGwuYz0wLEYocHIsIkFycmF5RGVxdWUiLDMwMiksRCg0NDYsMSxzYSxPOSksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSE9dGhpcy5ifSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIE16KHRoaXMpfSxsLlFiPWZ1bmN0aW9uKCl7SmVlKHRoaXMpfSxsLmE9MCxsLmI9MCxsLmM9LTEsRihwciwiQXJyYXlEZXF1ZS9JdGVyYXRvckltcGwiLDQ0NiksRCgxMiw1MixfZmUsaGUsWGMsQnUpLGwuVmM9ZnVuY3Rpb24oZSxuKXtIbSh0aGlzLGUsbil9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGxlKHRoaXMsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gR3l0KHRoaXMsZSxuKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gTHModGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYz1OdChRbixEZSwxLDAsNSwxKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gUm8odGhpcyxlLDApIT0tMX0sbC5KYz1mdW5jdGlvbihlKXt4dSh0aGlzLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBOZSh0aGlzLGUpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBSbyh0aGlzLGUsMCl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmxlbmd0aD09MH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUyh0aGlzKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gRmcodGhpcyxlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gbXUodGhpcyxlKX0sbC5VZD1mdW5jdGlvbihlLG4pe3RadCh0aGlzLGUsbil9LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gY2godGhpcyxlLG4pfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5sZW5ndGh9LGwuYWQ9ZnVuY3Rpb24oZSl7WnModGhpcyxlKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBwbnQodGhpcyl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIFAxKHRoaXMsZSl9O3ZhciBLeG49RihwciwiQXJyYXlMaXN0IiwxMik7RCg3LDEsc2EsUyksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEdvKHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEoodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXtMOSh0aGlzKX0sbC5hPTAsbC5iPS0xLEYocHIsIkFycmF5TGlzdC8xIiw3KSxEKDIwMTMsYi5GdW5jdGlvbix7fSxUdCksbC50ZT1mdW5jdGlvbihlLG4pe3JldHVybiBNcyhlLG4pfSxEKDE1NCw1MixTZmUseWwpLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVuZSh0aGlzLGUpIT0tMX0sbC5KYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztmb3IoT24oZSkscj10aGlzLmEscz0wLG89ci5sZW5ndGg7czxvOysrcyluPXJbc10sZS50ZChuKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gdkt0KHRoaXMsZSl9LGwuX2M9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj0oQW4oZSx0aGlzLmEubGVuZ3RoKSx0aGlzLmFbZV0pLHRzKHRoaXMuYSxlLG4pLHJ9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sbC5hZD1mdW5jdGlvbihlKXskbnQodGhpcy5hLHRoaXMuYS5sZW5ndGgsZSl9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gc3NlKHRoaXMsTnQoUW4sRGUsMSx0aGlzLmEubGVuZ3RoLDUsMSkpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBzc2UodGhpcyxlKX0sRihwciwiQXJyYXlzL0FycmF5TGlzdCIsMTU0KTt2YXIgaW8sdTAsclY7RCg5NDAsNTIsU2ZlLEl0KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBzMnQoZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gd24oKSxoOCgpLGE3fSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksaDgoKSxhN30sbC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxGKHByLCJDb2xsZWN0aW9ucy9FbXB0eUxpc3QiLDk0MCksRCg5NDEsMSxuMCxPdCksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLlJiPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlBiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IGxjKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiAwfSxsLlViPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IGxjKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybi0xfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE91KX0sbC5XYj1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3UpfTt2YXIgYTc7RihwciwiQ29sbGVjdGlvbnMvRW1wdHlMaXN0SXRlcmF0b3IiLDk0MSksRCg5NDMsMTk2NyxCRSxCdCksbC5fYj1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiB3bigpLHJWfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsfSxsLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksclZ9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbC5DYz1mdW5jdGlvbigpe3JldHVybiB3bigpLGlvfSxGKHByLCJDb2xsZWN0aW9ucy9FbXB0eU1hcCIsOTQzKSxEKDk0MixOMSxSRSxudCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB3bigpLGg4KCksYTd9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sRihwciwiQ29sbGVjdGlvbnMvRW1wdHlTZXQiLDk0MiksRCg1OTksNTIsezM6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjF9LE8pLGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEZjKHRoaXMuYSxlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gQW4oZSwxKSx0aGlzLmF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sRihwciwiQ29sbGVjdGlvbnMvU2luZ2xldG9uTGlzdCIsNTk5KSxEKDM3MiwxLGdmZSxUKSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsdGhpcy5OYygpKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywwKX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCx0aGlzLk5jKCkpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBPSHQoKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gUEh0KCl9LGwuJGI9ZnVuY3Rpb24oKXtGSHQoKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4geU0odGhpcyxlKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4ga1Z0KHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmRjKCl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEwodGhpcy5iLktjKCkpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBOSHQoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZ2MoKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuUGMoKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gRVZ0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5iKX0sRihwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlQ29sbGVjdGlvbiIsMzcyKSxEKDM3MSwxLHNhLEwpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuT2IoKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuUGIoKX0sbC5RYj1mdW5jdGlvbigpe0JIdCgpfSxGKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVDb2xsZWN0aW9uSXRlcmF0b3IiLDM3MSksRCg1MzEsMzcyLEFmZSxFaiksbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxNil9LGwuVmM9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLldjPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5hLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuWGIoZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGkodGhpcy5hKX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLlhjKGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kYygpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEMnQodGhpcy5hLlpjKDApKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEQydCh0aGlzLmEuWmMoZSkpfSxsLiRjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuX2M9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLmFkPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IEVqKHRoaXMuYS5iZChlLG4pKX0sRihwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTGlzdCIsNTMxKSxEKDY5MCwzNzEsbjAsRDJ0KSxsLlFiPWZ1bmN0aW9uKCl7Qkh0KCl9LGwuUmI9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuU2IoKX0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVGIoKX0sbC5VYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVWIoKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVmIoKX0sbC5XYj1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxGKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVMaXN0SXRlcmF0b3IiLDY5MCksRCg2MDAsMSxtdixxKSxsLndjPWZ1bmN0aW9uKGUpe0s5KHRoaXMsZSl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBRaXQodGhpcyxlLG4scil9LGwuJGI9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmMuX2IoZSl9LGwudWM9ZnVuY3Rpb24oZSl7cmV0dXJuIENWdCh0aGlzLGUpfSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIEw4KHRoaXMpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBfVnQodGhpcyxlKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jLnhjKGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuYyl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmRjKCl9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gT1h0KHRoaXMpfSxsLnpjPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5CYz1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5nYygpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuICRvKHRoaXMuYyl9LGwuQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gSVh0KHRoaXMpfSxGKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAiLDYwMCksRCgzODIsMzcyLFdhdCxzOCksbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5iLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuYil9LEYocHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVNldCIsMzgyKSxEKDk0NCwzODIsV2F0LGZIdCksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gVFZ0KHRoaXMsZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYi5JYyhlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYi5LYygpLG5ldyBQKGUpfSxsLlBjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5iLlBjKCksc0p0KGUsZS5sZW5ndGgpLGV9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGdRdCh0aGlzLGUpfSxGKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAvVW5tb2RpZmlhYmxlRW50cnlTZXQiLDk0NCksRCg5NDUsMSxzYSxQKSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICQodSh0aGlzLmEuUGIoKSw0MikpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5PYigpfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE9yKX0sRihwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTWFwL1VubW9kaWZpYWJsZUVudHJ5U2V0LzEiLDk0NSksRCg2ODgsMSx5b3QsJCksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLkZiKGUpfSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jZCgpfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kZCgpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5IYigpfSxsLmVkPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJG8odGhpcy5hKX0sRihwciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTWFwL1VubW9kaWZpYWJsZUVudHJ5U2V0L1VubW9kaWZpYWJsZUVudHJ5Iiw2ODgpLEQoNjAxLDUzMSx7MjA6MSwxNDoxLDE1OjEsNTQ6MX0sbWV0KSxGKHByLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVSYW5kb21BY2Nlc3NMaXN0Iiw2MDEpLEQoNjg5LDM4MixwZmUsSTJ0KSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXUih0aGlzKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geWkodGhpcy5hLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEhpKHRoaXMuYSl9LEYocHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVNvcnRlZFNldCIsNjg5KSxEKDg0NywxLHhvdCxnbiksbC51ZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPWFKdCh1KGUsMTEpLHUobiwxMSkpLHIhPTA/cjpwbGUodShlLDExKSx1KG4sMTEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKHByLCJDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUiLDg0Nyk7dmFyIF9FdCxTRXQsQUV0O0QoNzUxLDEseG90LFNlKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIE1lbih1KGUsMzUpLHUobiwzNSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBaMygpLEFFdH0sRihwciwiQ29tcGFyYXRvcnMvTmF0dXJhbE9yZGVyQ29tcGFyYXRvciIsNzUxKSxEKDExNzcsMSx4b3QsbWUpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRGVuKHUoZSwzNSksdShuLDM1KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIFozKCksU0V0fSxGKHByLCJDb21wYXJhdG9ycy9SZXZlcnNlTmF0dXJhbE9yZGVyQ29tcGFyYXRvciIsMTE3NyksRCg2NCwxLHhvdCxkdCksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5hLnVlKG4sZSl9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxGKHByLCJDb21wYXJhdG9ycy9SZXZlcnNlZENvbXBhcmF0b3IiLDY0KSxEKDE2Niw2MCxRMCxyaCksRihwciwiQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiIsMTY2KTt2YXIgVmdlLEdnZTtEKDE5MDQsMSxqSSxWZSksbC53ZT1mdW5jdGlvbihlKXtJaWUodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJEb3VibGVTdW1tYXJ5U3RhdGlzdGljc1tjb3VudCA9ICIrXzkodGhpcy5hKSsiLCBhdmcgPSAiKyhVVnQodGhpcy5hLDApP0hKdCh0aGlzKS9Zdyh0aGlzLmEpOjApKyIsIG1pbiA9ICIrdGhpcy5jKyIsIG1heCA9ICIrdGhpcy5iKyIsIHN1bSA9ICIrSEp0KHRoaXMpKyJdIn0sbC5hPTAsbC5iPUNzLGwuYz1hcyxsLmQ9MCxsLmU9MCxsLmY9MCxGKHByLCJEb3VibGVTdW1tYXJ5U3RhdGlzdGljcyIsMTkwNCksRCgxODA1LDYwLFEwLGNxdCksRihwciwiRW1wdHlTdGFja0V4Y2VwdGlvbiIsMTgwNSksRCg0NTEsMTk2NyxtdixpXyksbC56Yz1mdW5jdGlvbihlLG4pe3JldHVybiBzd3QodGhpcyxlLG4pfSxsLiRiPWZ1bmN0aW9uKCl7RVh0KHRoaXMpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiBHVnQodGhpcyxlKX0sbC51Yz1mdW5jdGlvbihlKXt2YXIgbixyO2ZvcihyPW5ldyBNeCh0aGlzLmEpO3IuYTxyLmMuYS5sZW5ndGg7KWlmKG49ajkociksRmMoZSx0aGlzLmJbbi5nXSkpcmV0dXJuITA7cmV0dXJuITF9LGwudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEx0KHRoaXMpfSxsLnhjPWZ1bmN0aW9uKGUpe3JldHVybiBwbyh0aGlzLGUpfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBHdnQodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuY30sRihwciwiRW51bU1hcCIsNDUxKSxEKDEzNTIsTjEsenUsTHQpLGwuJGI9ZnVuY3Rpb24oKXtFWHQodGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gTFp0KHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJLdCh0aGlzLmEpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBMWnQodGhpcyxlKT8obj11KGUsNDIpLmNkKCksR3Z0KHRoaXMuYSxuKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmEuY30sRihwciwiRW51bU1hcC9FbnRyeVNldCIsMTM1MiksRCgxMzUzLDEsc2EsYkt0KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPWo5KHRoaXMuYSksbmV3IFlWdCh0aGlzLmMsdGhpcy5iKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBwMnQodGhpcy5hKX0sbC5RYj1mdW5jdGlvbigpe1JtKCEhdGhpcy5iKSxHdnQodGhpcy5jLHRoaXMuYiksdGhpcy5iPW51bGx9LEYocHIsIkVudW1NYXAvRW50cnlTZXRJdGVyYXRvciIsMTM1MyksRCgxMzU0LDE5ODQseW90LFlWdCksbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmJbdGhpcy5hLmddfSxsLmVkPWZ1bmN0aW9uKGUpe3JldHVybiBwdnQodGhpcy5iLHRoaXMuYS5nLGUpfSxGKHByLCJFbnVtTWFwL01hcEVudHJ5IiwxMzU0KSxEKDE3NCxOMSx7MjA6MSwyODoxLDE0OjEsMTc0OjEsMjE6MX0pO3ZhciBVZ2U9RihwciwiRW51bVNldCIsMTc0KTtEKDE1NiwxNzQsezIwOjEsMjg6MSwxNDoxLDE3NDoxLDE1NjoxLDIxOjF9LHNoKSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiB2Zih0aGlzLHUoZSwyMikpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB6bnQodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTXgodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIE1LdCh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5jPTAsRihwciwiRW51bVNldC9FbnVtU2V0SW1wbCIsMTU2KSxEKDM0MywxLHNhLE14KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gajkodGhpcyl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gcDJ0KHRoaXMpfSxsLlFiPWZ1bmN0aW9uKCl7Um0odGhpcy5iIT0tMSksdHModGhpcy5jLmIsdGhpcy5iLG51bGwpLC0tdGhpcy5jLmMsdGhpcy5iPS0xfSxsLmE9LTEsbC5iPS0xLEYocHIsIkVudW1TZXQvRW51bVNldEltcGwvSXRlcmF0b3JJbXBsIiwzNDMpLEQoNDMsNDg4LEE0LF9yLEx4LHVVdCksbC5yZT1mdW5jdGlvbihlLG4pe3JldHVybiBWdChlKT09PVZ0KG4pfHxlIT1udWxsJiZ5aShlLG4pfSxsLnNlPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPUhpKGUpLG58MH0sRihwciwiSGFzaE1hcCIsNDMpLEQoNTMsTjEsVnh0LEhzLElSLEU5KSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBGcyh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEkwKHRoaXMsZSl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCk9PTB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuS2MoKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gbTJ0KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9O3ZhciBYeG49RihwciwiSGFzaFNldCIsNTMpO0QoMTc4MSwxLE9JLFllKSxsLnVkPWZ1bmN0aW9uKGUpe0huZSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkludFN1bW1hcnlTdGF0aXN0aWNzW2NvdW50ID0gIitfOSh0aGlzLmEpKyIsIGF2ZyA9ICIrKFVWdCh0aGlzLmEsMCk/WXcodGhpcy5kKS9Zdyh0aGlzLmEpOjApKyIsIG1pbiA9ICIrdGhpcy5jKyIsIG1heCA9ICIrdGhpcy5iKyIsIHN1bSA9ICIrXzkodGhpcy5kKSsiXSJ9LGwuYT0wLGwuYj1TYSxsLmM9d2ksbC5kPTAsRihwciwiSW50U3VtbWFyeVN0YXRpc3RpY3MiLDE3ODEpLEQoMTA0OSwxLHIwLGtVdCksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlbXQodGhpcyl9LGwuYz0wLEYocHIsIkludGVybmFsSGFzaENvZGVNYXAiLDEwNDkpLEQoNzExLDEsc2EsZW10KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kPXRoaXMuYVt0aGlzLmMrK10sdGhpcy5kfSxsLk9iPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYzx0aGlzLmEubGVuZ3RoPyEwOihlPXRoaXMuYi5uZXh0KCksZS5kb25lPyExOih0aGlzLmE9ZS52YWx1ZVsxXSx0aGlzLmM9MCwhMCkpfSxsLlFiPWZ1bmN0aW9uKCl7YjV0KHRoaXMuZSx0aGlzLmQuY2QoKSksdGhpcy5jIT0wJiYtLXRoaXMuY30sbC5jPTAsbC5kPW51bGwsRihwciwiSW50ZXJuYWxIYXNoQ29kZU1hcC8xIiw3MTEpO3ZhciBXZ2U7RCgxMDQ3LDEscjAsRVV0KSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGhtdCh0aGlzKX0sbC5jPTAsbC5kPTAsRihwciwiSW50ZXJuYWxTdHJpbmdNYXAiLDEwNDcpLEQoNzEwLDEsc2EsaG10KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPXRoaXMuYSx0aGlzLmE9dGhpcy5iLm5leHQoKSxuZXcgX1l0KHRoaXMuZCx0aGlzLmMsdGhpcy5kLmQpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYS5kb25lfSxsLlFiPWZ1bmN0aW9uKCl7Wm5lKHRoaXMuZCx0aGlzLmMudmFsdWVbMF0pfSxGKHByLCJJbnRlcm5hbFN0cmluZ01hcC8xIiw3MTApLEQoMTA0OCwxOTg0LHlvdCxfWXQpLGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLnZhbHVlWzBdfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kIT10aGlzLmM/S0ModGhpcy5hLHRoaXMuYi52YWx1ZVswXSk6dGhpcy5iLnZhbHVlWzFdfSxsLmVkPWZ1bmN0aW9uKGUpe3JldHVybiBzdih0aGlzLmEsdGhpcy5iLnZhbHVlWzBdLGUpfSxsLmM9MCxGKHByLCJJbnRlcm5hbFN0cmluZ01hcC8yIiwxMDQ4KSxEKDIyOCw0MyxBNCxhMixNbXQpLGwuJGI9ZnVuY3Rpb24oKXt0WXQodGhpcyl9LGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFdWdCh0aGlzLGUpfSxsLnVjPWZ1bmN0aW9uKGUpe3ZhciBuO2ZvcihuPXRoaXMuZC5hO24hPXRoaXMuZDspe2lmKEZjKG4uZSxlKSlyZXR1cm4hMDtuPW4uYX1yZXR1cm4hMX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgRHQodGhpcyl9LGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFh3KHRoaXMsZSl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbTIodGhpcyxlLG4pfSxsLkJjPWZ1bmN0aW9uKGUpe3JldHVybiBadGUodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiBIQyh0aGlzLmUpfSxsLmM9ITEsRihwciwiTGlua2VkSGFzaE1hcCIsMjI4KSxEKDM4NywzODMsezQ4NDoxLDM4MzoxLDM4NzoxLDQyOjF9LENXdCxPd3QpLEYocHIsIkxpbmtlZEhhc2hNYXAvQ2hhaW5FbnRyeSIsMzg3KSxEKDcwMSxOMSx6dSxEdCksbC4kYj1mdW5jdGlvbigpe3RZdCh0aGlzLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBEWnQodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgU3Z0KHRoaXMpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBEWnQodGhpcyxlKT8obj11KGUsNDIpLmNkKCksWnRlKHRoaXMuYSxuKSwhMCk6ITF9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gSEModGhpcy5hLmUpfSxGKHByLCJMaW5rZWRIYXNoTWFwL0VudHJ5U2V0Iiw3MDEpLEQoNzAyLDEsc2EsU3Z0KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gQXRlKHRoaXMpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYiE9dGhpcy5jLmEuZH0sbC5RYj1mdW5jdGlvbigpe1JtKCEhdGhpcy5hKSxGcnQodGhpcy5jLmEuZSx0aGlzKSxId3QodGhpcy5hKSxKeCh0aGlzLmMuYS5lLHRoaXMuYS5kKSxZMnQodGhpcy5jLmEuZSx0aGlzKSx0aGlzLmE9bnVsbH0sRihwciwiTGlua2VkSGFzaE1hcC9FbnRyeVNldC9FbnRyeUl0ZXJhdG9yIiw3MDIpLEQoMTc4LDUzLFZ4dCxPMCxkbnQsV3d0KTt2YXIgUXhuPUYocHIsIkxpbmtlZEhhc2hTZXQiLDE3OCk7RCg2OCwxOTY0LHszOjEsNDoxLDIwOjEsMjg6MSw1MjoxLDE0OjEsNjg6MSwxNToxfSxaaSxTbnQpLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJpKHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXtBaCh0aGlzKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gZWkodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuYj0wO3ZhciBaeG49RihwciwiTGlua2VkTGlzdCIsNjgpO0QoOTcwLDEsbjAsU1l0KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUmI9ZnVuY3Rpb24oZSl7ZUQodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBPUih0aGlzKX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYiE9dGhpcy5kLmF9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGkodGhpcyl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlViPWZ1bmN0aW9uKCl7cmV0dXJuIE9ydCh0aGlzKX0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEtMX0sbC5RYj1mdW5jdGlvbigpe3R6KHRoaXMpfSxsLldiPWZ1bmN0aW9uKGUpe1JtKCEhdGhpcy5jKSx0aGlzLmMuYz1lfSxsLmE9MCxsLmM9bnVsbCxGKHByLCJMaW5rZWRMaXN0L0xpc3RJdGVyYXRvckltcGwiLDk3MCksRCg2MDgsMSx7fSx4dCksRihwciwiTGlua2VkTGlzdC9Ob2RlIiw2MDgpLEQoMTk1OSwxLHt9KTt2YXIgTEV0LFlnZTtGKHByLCJMb2NhbGUiLDE5NTkpLEQoODYxLDE5NTkse30sSHQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iIn0sRihwciwiTG9jYWxlLzEiLDg2MSksRCg4NjIsMTk1OSx7fSxMZSksbC5JYj1mdW5jdGlvbigpe3JldHVybiJ1bmtub3duIn0sRihwciwiTG9jYWxlLzQiLDg2MiksRCgxMDksNjAsezM6MSwxMDI6MSw2MDoxLDc4OjEsMTA5OjF9LGxjLEZYdCksRihwciwiTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiIsMTA5KSxEKDQwNCwxLHs0MDQ6MX0sQ1IpLGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGU9PT10aGlzPyEwOl90KGUsNDA0KT8obj11KGUsNDA0KSxGYyh0aGlzLmEsbi5hKSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gVTModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEhPW51bGw/Y2ZlK2I5KHRoaXMuYSkrIikiOiJPcHRpb25hbC5lbXB0eSgpIn07dmFyIGlWO0YocHIsIk9wdGlvbmFsIiw0MDQpLEQoNDYzLDEsezQ2MzoxfSxnVXQsejJ0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT09dGhpcz8hMDpfdChlLDQ2Myk/KG49dShlLDQ2MyksdGhpcy5hPT1uLmEmJk1zKHRoaXMuYixuLmIpPT0wKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/cHModGhpcy5iKTowfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT8iT3B0aW9uYWxEb3VibGUub2YoIisoIiIrdGhpcy5iKSsiKSI6Ik9wdGlvbmFsRG91YmxlLmVtcHR5KCkifSxsLmE9ITEsbC5iPTA7dmFyIE1FdDtGKHByLCJPcHRpb25hbERvdWJsZSIsNDYzKSxEKDUxNywxLHs1MTc6MX0scFV0LGtXdCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09PXRoaXM/ITA6X3QoZSw1MTcpPyhuPXUoZSw1MTcpLHRoaXMuYT09bi5hJiZwdSh0aGlzLmIsbi5iKT09MCk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hP3RoaXMuYjowfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT8iT3B0aW9uYWxJbnQub2YoIisoIiIrdGhpcy5iKSsiKSI6Ik9wdGlvbmFsSW50LmVtcHR5KCkifSxsLmE9ITEsbC5iPTA7dmFyIEtnZTtGKHByLCJPcHRpb25hbEludCIsNTE3KSxEKDUwMywyMDA0LHh5LG4kKSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBlNHQodGhpcyxlKX0sbC4kYj1mdW5jdGlvbigpe3RoaXMuYi5jPU50KFFuLERlLDEsMCw1LDEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybihlPT1udWxsPy0xOlJvKHRoaXMuYixlLDApKSE9LTF9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFYodGhpcyl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGduZSh0aGlzLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5jLmxlbmd0aH0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywyNTYpfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHBudCh0aGlzLmIpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBQMSh0aGlzLmIsZSl9LEYocHIsIlByaW9yaXR5UXVldWUiLDUwMyksRCgxMjc3LDEsc2EsViksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYTx0aGlzLmMuYi5jLmxlbmd0aH0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBabih0aGlzLmE8dGhpcy5jLmIuYy5sZW5ndGgpLHRoaXMuYj10aGlzLmErKyxOZSh0aGlzLmMuYix0aGlzLmIpfSxsLlFiPWZ1bmN0aW9uKCl7Um0odGhpcy5iIT0tMSksdml0KHRoaXMuYyx0aGlzLmE9dGhpcy5iKSx0aGlzLmI9LTF9LGwuYT0wLGwuYj0tMSxGKHByLCJQcmlvcml0eVF1ZXVlLzEiLDEyNzcpLEQoMjMwLDEsezIzMDoxfSxaaXQsRiQpLGwuYT0wLGwuYj0wO3ZhciBERXQsSUV0LEp4bj0wO0YocHIsIlJhbmRvbSIsMjMwKSxEKDI3LDEsSWgsX24sancsQlh0KSxsLnFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5yZD1mdW5jdGlvbigpe3JldHVybiB1dnQodGhpcyksdGhpcy5jfSxsLk5iPWZ1bmN0aW9uKGUpe3V2dCh0aGlzKSx0aGlzLmQuTmIoZSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGtlZSh0aGlzLGUpfSxsLmE9MCxsLmM9MCxGKHByLCJTcGxpdGVyYXRvcnMvSXRlcmF0b3JTcGxpdGVyYXRvciIsMjcpLEQoNDg1LDI3LEloLFdSKSxGKHByLCJTb3J0ZWRTZXQvMSIsNDg1KSxEKDYwMiwxLGpJLFkpLGwud2U9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKGUpfSxGKHByLCJTcGxpdGVyYXRvci9PZkRvdWJsZS8wbWV0aG9kcmVmJGFjY2VwdCRUeXBlIiw2MDIpLEQoNjAzLDEsakkscnQpLGwud2U9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKGUpfSxGKHByLCJTcGxpdGVyYXRvci9PZkRvdWJsZS8xbWV0aG9kcmVmJGFjY2VwdCRUeXBlIiw2MDMpLEQoNjA0LDEsT0ksb3QpLGwudWQ9ZnVuY3Rpb24oZSl7dGhpcy5hLnRkKHBlKGUpKX0sRihwciwiU3BsaXRlcmF0b3IvT2ZJbnQvMm1ldGhvZHJlZiRhY2NlcHQkVHlwZSIsNjA0KSxEKDYwNSwxLE9JLGh0KSxsLnVkPWZ1bmN0aW9uKGUpe3RoaXMuYS50ZChwZShlKSl9LEYocHIsIlNwbGl0ZXJhdG9yL09mSW50LzNtZXRob2RyZWYkYWNjZXB0JFR5cGUiLDYwNSksRCg2MTcsMSxJaCksbC5OYj1mdW5jdGlvbihlKXtwYnQodGhpcyxlKX0sbC5xZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxsLmQ9MCxsLmU9MCxGKHByLCJTcGxpdGVyYXRvcnMvQmFzZVNwbGl0ZXJhdG9yIiw2MTcpLEQoNzIxLDYxNyxJaCksbC54ZT1mdW5jdGlvbihlKXtqMyh0aGlzLGUpfSxsLk5iPWZ1bmN0aW9uKGUpe190KGUsMTgyKT9qMyh0aGlzLHUoZSwxODIpKTpqMyh0aGlzLG5ldyBydChlKSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTgyKT90aGlzLnllKHUoZSwxODIpKTp0aGlzLnllKG5ldyBZKGUpKX0sRihwciwiU3BsaXRlcmF0b3JzL0Fic3RyYWN0RG91YmxlU3BsaXRlcmF0b3IiLDcyMSksRCg3MjAsNjE3LEloKSxsLnhlPWZ1bmN0aW9uKGUpe2ozKHRoaXMsZSl9LGwuTmI9ZnVuY3Rpb24oZSl7X3QoZSwxOTYpP2ozKHRoaXMsdShlLDE5NikpOmozKHRoaXMsbmV3IGh0KGUpKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOTYpP3RoaXMueWUodShlLDE5NikpOnRoaXMueWUobmV3IG90KGUpKX0sRihwciwiU3BsaXRlcmF0b3JzL0Fic3RyYWN0SW50U3BsaXRlcmF0b3IiLDcyMCksRCg1NDAsNjE3LEloKSxGKHByLCJTcGxpdGVyYXRvcnMvQWJzdHJhY3RTcGxpdGVyYXRvciIsNTQwKSxEKDY5MiwxLEloKSxsLk5iPWZ1bmN0aW9uKGUpe3BidCh0aGlzLGUpfSxsLnFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5yZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmQtdGhpcy5jfSxsLmI9MCxsLmM9MCxsLmQ9MCxGKHByLCJTcGxpdGVyYXRvcnMvQmFzZUFycmF5U3BsaXRlcmF0b3IiLDY5MiksRCg5NDcsNjkyLEloLGlLdCksbC56ZT1mdW5jdGlvbihlLG4pe3FLZSh0aGlzLHUoZSwzOCksbil9LGwuTmI9ZnVuY3Rpb24oZSl7YXJ0KHRoaXMsZSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHokKHRoaXMsZSl9LEYocHIsIlNwbGl0ZXJhdG9ycy9BcnJheVNwbGl0ZXJhdG9yIiw5NDcpLEQoNjkzLDY5MixJaCxFWXQpLGwuemU9ZnVuY3Rpb24oZSxuKXtIS2UodGhpcyx1KGUsMTgyKSxuKX0sbC54ZT1mdW5jdGlvbihlKXthcnQodGhpcyxlKX0sbC5OYj1mdW5jdGlvbihlKXtfdChlLDE4Mik/YXJ0KHRoaXMsdShlLDE4MikpOmFydCh0aGlzLG5ldyBydChlKSl9LGwueWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHokKHRoaXMsZSl9LGwuc2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTgyKT96JCh0aGlzLHUoZSwxODIpKTp6JCh0aGlzLG5ldyBZKGUpKX0sRihwciwiU3BsaXRlcmF0b3JzL0RvdWJsZUFycmF5U3BsaXRlcmF0b3IiLDY5MyksRCgxOTY4LDEsSWgpLGwuTmI9ZnVuY3Rpb24oZSl7cGJ0KHRoaXMsZSl9LGwucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTY0NDh9LGwucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gMH07dmFyIFhnZTtGKHByLCJTcGxpdGVyYXRvcnMvRW1wdHlTcGxpdGVyYXRvciIsMTk2OCksRCg5NDYsMTk2OCxJaCxzZSksbC54ZT1mdW5jdGlvbihlKXtVayhlKX0sbC5OYj1mdW5jdGlvbihlKXtfdChlLDE5Nik/VWsodShlLDE5NikpOlVrKG5ldyBodChlKSl9LGwueWU9ZnVuY3Rpb24oZSl7cmV0dXJuIF9idChlKX0sbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOTYpP19idCh1KGUsMTk2KSk6X2J0KG5ldyBvdChlKSl9LEYocHIsIlNwbGl0ZXJhdG9ycy9FbXB0eVNwbGl0ZXJhdG9yL09mSW50Iiw5NDYpLEQoNTgwLDUyLExmZSxFUiksbC5WYz1mdW5jdGlvbihlLG4pe1Q4KGUsdGhpcy5hLmMubGVuZ3RoKzEpLEhtKHRoaXMuYSxlLG4pfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBsZSh0aGlzLmEsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gVDgoZSx0aGlzLmEuYy5sZW5ndGgrMSksR3l0KHRoaXMuYSxlLG4pfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBMcyh0aGlzLmEsZSl9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYz1OdChRbixEZSwxLDAsNSwxKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gUm8odGhpcy5hLGUsMCkhPS0xfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiBORCh0aGlzLmEsZSl9LGwuSmM9ZnVuY3Rpb24oZSl7eHUodGhpcy5hLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBUOChlLHRoaXMuYS5jLmxlbmd0aCksTmUodGhpcy5hLGUpfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiBSbyh0aGlzLmEsZSwwKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYy5sZW5ndGg9PTB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFModGhpcy5hKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gVDgoZSx0aGlzLmEuYy5sZW5ndGgpLEZnKHRoaXMuYSxlKX0sbC5VZD1mdW5jdGlvbihlLG4pe3RadCh0aGlzLmEsZSxuKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiBUOChlLHRoaXMuYS5jLmxlbmd0aCksY2godGhpcy5hLGUsbil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RofSxsLmFkPWZ1bmN0aW9uKGUpe1pzKHRoaXMuYSxlKX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgUWQodGhpcy5hLGUsbil9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gcG50KHRoaXMuYSl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIFAxKHRoaXMuYSxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBlYih0aGlzLmEpfSxGKHByLCJWZWN0b3IiLDU4MCksRCg4MDksNTgwLExmZSxxcHQpLEYocHIsIlN0YWNrIiw4MDkpLEQoMjA2LDEsezIwNjoxfSxmMiksbC5JYj1mdW5jdGlvbigpe3JldHVybiBFWnQodGhpcyl9LEYocHIsIlN0cmluZ0pvaW5lciIsMjA2KSxEKDU0NCwxOTkyLHszOjEsODM6MSwxNzE6MSwxNjE6MX0sTFZ0LFludCksbC4kYj1mdW5jdGlvbigpe05DKHRoaXMpfSxsLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3OSh0aGlzKX0sbC56Yz1mdW5jdGlvbihlLG4pe3JldHVybiBfeih0aGlzLGUsbil9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFA5KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLmM9MCxGKHByLCJUcmVlTWFwIiw1NDQpLEQoMzkwLDEsc2EseTkpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiBMaih0aGlzKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBUTSh0aGlzLmEpfSxsLlFiPWZ1bmN0aW9uKCl7QVl0KHRoaXMpfSxGKHByLCJUcmVlTWFwL0VudHJ5SXRlcmF0b3IiLDM5MCksRCg0MzUsNzM5LHp1LHc5KSxsLiRiPWZ1bmN0aW9uKCl7TkModGhpcy5hKX0sRihwciwiVHJlZU1hcC9FbnRyeVNldCIsNDM1KSxEKDQzNiwzODMsezQ4NDoxLDM4MzoxLDQyOjEsNDM2OjF9LFFydCksbC5iPSExO3ZhciB0Nm49RihwciwiVHJlZU1hcC9Ob2RlIiw0MzYpO0QoNjIxLDEse30senQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iU3RhdGU6IG12PSIrdGhpcy5jKyIgdmFsdWU9Iit0aGlzLmQrIiBkb25lPSIrdGhpcy5hKyIgZm91bmQ9Iit0aGlzLmJ9LGwuYT0hMSxsLmI9ITEsbC5jPSExLEYocHIsIlRyZWVNYXAvU3RhdGUiLDYyMSksRCgyOTcsMjIsVG90LFlSKSxsLkFlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuQmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07dmFyIGp1dCxPRXQsUEV0LEZFdCxzVj1qcihwciwiVHJlZU1hcC9TdWJNYXBUeXBlIiwyOTcsSHIsU3NuLGlKZSk7RCgxMTEyLDI5NyxUb3QsTVV0KSxsLkJlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGpyKHByLCJUcmVlTWFwL1N1Yk1hcFR5cGUvMSIsMTExMixzVixudWxsLG51bGwpLEQoMTExMywyOTcsVG90LHFVdCksbC5BZT1mdW5jdGlvbigpe3JldHVybiEwfSxsLkJlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGpyKHByLCJUcmVlTWFwL1N1Yk1hcFR5cGUvMiIsMTExMyxzVixudWxsLG51bGwpLEQoMTExNCwyOTcsVG90LERVdCksbC5BZT1mdW5jdGlvbigpe3JldHVybiEwfSxqcihwciwiVHJlZU1hcC9TdWJNYXBUeXBlLzMiLDExMTQsc1YsbnVsbCxudWxsKTt2YXIgUWdlO0QoMjA4LE4xLHszOjEsMjA6MSwyODoxLDE0OjEsMjcxOjEsMjE6MSw4NDoxLDIwODoxfSxCcHQsT3ApLGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFdSKHRoaXMpfSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiB0RCh0aGlzLGUpfSxsLiRiPWZ1bmN0aW9uKCl7TkModGhpcy5hKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gX250KHRoaXMuYSxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyB5OShuZXcgdzkobmV3IHkodGhpcy5hKS5hKS5iKSxuZXcgZyhlKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gZm50KHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmN9O3ZhciBlNm49RihwciwiVHJlZVNldCIsMjA4KTtEKDk2NiwxLHt9LFB0KSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGtaZSh0aGlzLmEsZSxuKX0sRihDb3QsIkJpbmFyeU9wZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDk2NiksRCg5NjcsMSx7fSwkdCksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBFWmUodGhpcy5hLGUsbil9LEYoQ290LCJCaW5hcnlPcGVyYXRvci9sYW1iZGEkMSRUeXBlIiw5NjcpLEQoODQ2LDEse30scmUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LEYoQ290LCJGdW5jdGlvbi9sYW1iZGEkMCRUeXBlIiw4NDYpLEQoNDMxLDEsbGksWnQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuYS5NYihlKX0sRihDb3QsIlByZWRpY2F0ZS9sYW1iZGEkMiRUeXBlIiw0MzEpLEQoNTcyLDEsezU3MjoxfSk7dmFyIFpnZT1GKFBfLCJIYW5kbGVyIiw1NzIpO0QoMjAwNywxLERJKSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIkRVTU1ZIn0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lKCl9O3ZhciBORXQ7RihQXywiTGV2ZWwiLDIwMDcpLEQoMTYyMSwyMDA3LERJLFBlKSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIklORk8ifSxGKFBfLCJMZXZlbC9MZXZlbEluZm8iLDE2MjEpLEQoMTY0MCwxLHt9LGRxdCk7dmFyICR1dDtGKFBfLCJMb2dNYW5hZ2VyIiwxNjQwKSxEKDE3ODAsMSxESSxMWXQpLGwuYj1udWxsLEYoUF8sIkxvZ1JlY29yZCIsMTc4MCksRCg1MTIsMSx7NTEyOjF9LHFydCksbC5lPSExO3ZhciBKZ2U9ITEsdHBlPSExLCQxPSExLGVwZT0hMSxucGU9ITE7RihQXywiTG9nZ2VyIiw1MTIpLEQoODE5LDU3Mix7NTcyOjF9LHRlKSxGKFBfLCJTaW1wbGVDb25zb2xlTG9nSGFuZGxlciIsODE5KSxEKDEzMiwyMix7MzoxLDM1OjEsMjI6MSwxMzI6MX0sX2V0KTt2YXIgQkV0LFVsLEl5LGZsPWpyKElzLCJDb2xsZWN0b3IvQ2hhcmFjdGVyaXN0aWNzIiwxMzIsSHIsVGluLHNKZSkscnBlO0QoNzQ0LDEse30sZ3Z0KSxGKElzLCJDb2xsZWN0b3JJbXBsIiw3NDQpLEQoMTA2MCwxLHt9LE1lKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIExsbih1KGUsMjA2KSx1KG4sMjA2KSl9LEYoSXMsIkNvbGxlY3RvcnMvMTBtZXRob2RyZWYkbWVyZ2UkVHlwZSIsMTA2MCksRCgxMDYxLDEse30sZGUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEVadCh1KGUsMjA2KSl9LEYoSXMsIkNvbGxlY3RvcnMvMTFtZXRob2RyZWYkdG9TdHJpbmckVHlwZSIsMTA2MSksRCgxMDYyLDEse30sWXQpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIE5uKCksISFhMnQoZSl9LEYoSXMsIkNvbGxlY3RvcnMvMTJtZXRob2RyZWYkdGVzdCRUeXBlIiwxMDYyKSxEKDI1MSwxLHt9LGNlKSxsLk9kPWZ1bmN0aW9uKGUsbil7dShlLDE0KS5GYyhuKX0sRihJcywiQ29sbGVjdG9ycy8yMG1ldGhvZHJlZiRhZGQkVHlwZSIsMjUxKSxEKDI1MywxLHt9LGtlKSxsLkVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoZX0sRihJcywiQ29sbGVjdG9ycy8yMW1ldGhvZHJlZiRjdG9yJFR5cGUiLDI1MyksRCgzNDYsMSx7fSxvbiksbC5FZT1mdW5jdGlvbigpe3JldHVybiBuZXcgSHN9LEYoSXMsIkNvbGxlY3RvcnMvMjNtZXRob2RyZWYkY3RvciRUeXBlIiwzNDYpLEQoMzQ3LDEse30sbmkpLGwuT2Q9ZnVuY3Rpb24oZSxuKXtGcyh1KGUsNTMpLG4pfSxGKElzLCJDb2xsZWN0b3JzLzI0bWV0aG9kcmVmJGFkZCRUeXBlIiwzNDcpLEQoMTA1NSwxLHt9LEtzKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIE1WdCh1KGUsMTUpLHUobiwxNCkpfSxGKElzLCJDb2xsZWN0b3JzLzRtZXRob2RyZWYkYWRkQWxsJFR5cGUiLDEwNTUpLEQoMTA1OSwxLHt9LHdzKSxsLk9kPWZ1bmN0aW9uKGUsbil7JDAodShlLDIwNiksdShuLDQ3NSkpfSxGKElzLCJDb2xsZWN0b3JzLzltZXRob2RyZWYkYWRkJFR5cGUiLDEwNTkpLEQoMTA1OCwxLHt9LFVZdCksbC5FZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZjIodGhpcy5hLHRoaXMuYix0aGlzLmMpfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQxNSRUeXBlIiwxMDU4KSxEKDEwNjMsMSx7fSxmbyksbC5FZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBhMixtMihlLChObigpLCExKSxuZXcgaGUpLG0yKGUsITAsbmV3IGhlKSxlfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyMiRUeXBlIiwxMDYzKSxEKDEwNjQsMSx7fSxxdCksbC5FZT1mdW5jdGlvbigpe3JldHVybiBsdChjdChRbiwxKSxEZSwxLDUsW3RoaXMuYV0pfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyNSRUeXBlIiwxMDY0KSxEKDEwNjUsMSx7fSxuZSksbC5PZD1mdW5jdGlvbihlLG4pe0llbih0aGlzLmEsdTIoZSkpfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyNiRUeXBlIiwxMDY1KSxEKDEwNjYsMSx7fSxHdCksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBpbm4odGhpcy5hLHUyKGUpLHUyKG4pKX0sRihJcywiQ29sbGVjdG9ycy9sYW1iZGEkMjckVHlwZSIsMTA2NiksRCgxMDY3LDEse30sWGkpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUyKGUpWzBdfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQyOCRUeXBlIiwxMDY3KSxEKDcxMywxLHt9LEVyKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFl3dChlLG4pfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ0JFR5cGUiLDcxMyksRCgyNTIsMSx7fSxYbiksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiB1WGUodShlLDE0KSx1KG4sMTQpKX0sRihJcywiQ29sbGVjdG9ycy9sYW1iZGEkNDIkVHlwZSIsMjUyKSxEKDM0OCwxLHt9LGRpKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGxYZSh1KGUsNTMpLHUobiw1MykpfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ1MCRUeXBlIiwzNDgpLEQoMzQ5LDEse30sRWUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1Myl9LEYoSXMsIkNvbGxlY3RvcnMvbGFtYmRhJDUxJFR5cGUiLDM0OSksRCgxMDU0LDEse30sZ2UpLGwuT2Q9ZnVuY3Rpb24oZSxuKXtVdW4odGhpcy5hLHUoZSw4Myksbil9LEYoSXMsIkNvbGxlY3RvcnMvbGFtYmRhJDckVHlwZSIsMTA1NCksRCgxMDU2LDEse30sS24pLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geXVuKHUoZSw4MyksdShuLDgzKSxuZXcgS3MpfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ4JFR5cGUiLDEwNTYpLEQoMTA1NywxLHt9LGJlKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1aG4odGhpcy5hLHUoZSw4MykpfSxGKElzLCJDb2xsZWN0b3JzL2xhbWJkYSQ5JFR5cGUiLDEwNTcpLEQoNTM5LDEse30pLGwuSGU9ZnVuY3Rpb24oKXtJOSh0aGlzKX0sbC5kPSExLEYoSXMsIlRlcm1pbmF0YWJsZVN0cmVhbSIsNTM5KSxEKDgxMiw1MzksV3h0LFEydCksbC5IZT1mdW5jdGlvbigpe0k5KHRoaXMpfSxGKElzLCJEb3VibGVTdHJlYW1JbXBsIiw4MTIpLEQoMTc4NCw3MjEsSWgsV1l0KSxsLnllPWZ1bmN0aW9uKGUpe3JldHVybiB3MW4odGhpcyx1KGUsMTgyKSl9LGwuYT1udWxsLEYoSXMsIkRvdWJsZVN0cmVhbUltcGwvMiIsMTc4NCksRCgxNzg1LDEsakksaWUpLGwud2U9ZnVuY3Rpb24oZSl7blFlKHRoaXMuYSxlKX0sRihJcywiRG91YmxlU3RyZWFtSW1wbC8yL2xhbWJkYSQwJFR5cGUiLDE3ODUpLEQoMTc4MiwxLGpJLEZlKSxsLndlPWZ1bmN0aW9uKGUpe2VRZSh0aGlzLmEsZSl9LEYoSXMsIkRvdWJsZVN0cmVhbUltcGwvbGFtYmRhJDAkVHlwZSIsMTc4MiksRCgxNzgzLDEsakksd2UpLGwud2U9ZnVuY3Rpb24oZSl7SWllKHRoaXMuYSxlKX0sRihJcywiRG91YmxlU3RyZWFtSW1wbC9sYW1iZGEkMiRUeXBlIiwxNzgzKSxEKDEzNTgsNzIwLEloLFBKdCksbC55ZT1mdW5jdGlvbihlKXtyZXR1cm4geXNuKHRoaXMsdShlLDE5NikpfSxsLmE9MCxsLmI9MCxsLmM9MCxGKElzLCJJbnRTdHJlYW0vNSIsMTM1OCksRCg3ODcsNTM5LFd4dCxaMnQpLGwuSGU9ZnVuY3Rpb24oKXtJOSh0aGlzKX0sbC5JZT1mdW5jdGlvbigpe3JldHVybiBWcCh0aGlzKSx0aGlzLmF9LEYoSXMsIkludFN0cmVhbUltcGwiLDc4NyksRCg3ODgsNTM5LFd4dCxtYnQpLGwuSGU9ZnVuY3Rpb24oKXtJOSh0aGlzKX0sbC5JZT1mdW5jdGlvbigpe3JldHVybiBWcCh0aGlzKSx5MnQoKSxYZ2V9LEYoSXMsIkludFN0cmVhbUltcGwvRW1wdHkiLDc4OCksRCgxNDYzLDEsT0ksYm4pLGwudWQ9ZnVuY3Rpb24oZSl7SG5lKHRoaXMuYSxlKX0sRihJcywiSW50U3RyZWFtSW1wbC9sYW1iZGEkNCRUeXBlIiwxNDYzKTt2YXIgbjZuPUtpKElzLCJTdHJlYW0iKTtEKDMwLDUzOSx7NTI1OjEsNjcwOjEsODMzOjF9LFRuKSxsLkhlPWZ1bmN0aW9uKCl7STkodGhpcyl9O3ZhciBvNztGKElzLCJTdHJlYW1JbXBsIiwzMCksRCg4NDUsMSx7fSxIZSksbC5sZD1mdW5jdGlvbihlKXtyZXR1cm4gS1l0KGUpfSxGKElzLCJTdHJlYW1JbXBsLzBtZXRob2RyZWYkbGFtYmRhJDIkVHlwZSIsODQ1KSxEKDEwODQsNTQwLEloLGtZdCksbC5zZD1mdW5jdGlvbihlKXtmb3IoO2xvbih0aGlzKTspe2lmKHRoaXMuYS5zZChlKSlyZXR1cm4hMDtJOSh0aGlzLmIpLHRoaXMuYj1udWxsLHRoaXMuYT1udWxsfXJldHVybiExfSxGKElzLCJTdHJlYW1JbXBsLzEiLDEwODQpLEQoMTA4NSwxLFVuLHplKSxsLnRkPWZ1bmN0aW9uKGUpe2Flbih0aGlzLmEsdShlLDgzMykpfSxGKElzLCJTdHJlYW1JbXBsLzEvbGFtYmRhJDAkVHlwZSIsMTA4NSksRCgxMDg2LDEsbGksR2UpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEZzKHRoaXMuYSxlKX0sRihJcywiU3RyZWFtSW1wbC8xbWV0aG9kcmVmJGFkZCRUeXBlIiwxMDg2KSxEKDEwODcsNTQwLEloLFFYdCksbC5zZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcy5hfHwobj1uZXcgaGUsdGhpcy5iLmEuTmIobmV3IEVuKG4pKSx3bigpLFpzKG4sdGhpcy5jKSx0aGlzLmE9bmV3IF9uKG4sMTYpKSxrZWUodGhpcy5hLGUpfSxsLmE9bnVsbCxGKElzLCJTdHJlYW1JbXBsLzUiLDEwODcpLEQoMTA4OCwxLFVuLEVuKSxsLnRkPWZ1bmN0aW9uKGUpe2xlKHRoaXMuYSxlKX0sRihJcywiU3RyZWFtSW1wbC81LzJtZXRob2RyZWYkYWRkJFR5cGUiLDEwODgpLEQoNzIyLDU0MCxJaCxObXQpLGwuc2Q9ZnVuY3Rpb24oZSl7Zm9yKHRoaXMuYj0hMTshdGhpcy5iJiZ0aGlzLmMuc2QobmV3IFhWdCh0aGlzLGUpKTspO3JldHVybiB0aGlzLmJ9LGwuYj0hMSxGKElzLCJTdHJlYW1JbXBsL0ZpbHRlclNwbGl0ZXJhdG9yIiw3MjIpLEQoMTA3OSwxLFVuLFhWdCksbC50ZD1mdW5jdGlvbihlKXtybm4odGhpcy5hLHRoaXMuYixlKX0sRihJcywiU3RyZWFtSW1wbC9GaWx0ZXJTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDc5KSxEKDEwNzUsNzIxLEloLFVKdCksbC55ZT1mdW5jdGlvbihlKXtyZXR1cm4gVVplKHRoaXMsdShlLDE4MikpfSxGKElzLCJTdHJlYW1JbXBsL01hcFRvRG91YmxlU3BsaXRlcmF0b3IiLDEwNzUpLEQoMTA3OCwxLFVuLFFWdCksbC50ZD1mdW5jdGlvbihlKXtUWGUodGhpcy5hLHRoaXMuYixlKX0sRihJcywiU3RyZWFtSW1wbC9NYXBUb0RvdWJsZVNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwNzgpLEQoMTA3NCw3MjAsSWgsV0p0KSxsLnllPWZ1bmN0aW9uKGUpe3JldHVybiBXWmUodGhpcyx1KGUsMTk2KSl9LEYoSXMsIlN0cmVhbUltcGwvTWFwVG9JbnRTcGxpdGVyYXRvciIsMTA3NCksRCgxMDc3LDEsVW4sWlZ0KSxsLnRkPWZ1bmN0aW9uKGUpe0VYZSh0aGlzLmEsdGhpcy5iLGUpfSxGKElzLCJTdHJlYW1JbXBsL01hcFRvSW50U3BsaXRlcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTA3NyksRCg3MTksNTQwLEloLFRtdCksbC5zZD1mdW5jdGlvbihlKXtyZXR1cm4gbVl0KHRoaXMsZSl9LEYoSXMsIlN0cmVhbUltcGwvTWFwVG9PYmpTcGxpdGVyYXRvciIsNzE5KSxEKDEwNzYsMSxVbixKVnQpLGwudGQ9ZnVuY3Rpb24oZSl7Q1hlKHRoaXMuYSx0aGlzLmIsZSl9LEYoSXMsIlN0cmVhbUltcGwvTWFwVG9PYmpTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDc2KSxEKDYxOCwxLFVuLFRpKSxsLnRkPWZ1bmN0aW9uKGUpe0F0dCh0aGlzLGUpfSxGKElzLCJTdHJlYW1JbXBsL1ZhbHVlQ29uc3VtZXIiLDYxOCksRCgxMDgwLDEsVW4scG4pLGwudGQ9ZnVuY3Rpb24oZSl7UWIoKX0sRihJcywiU3RyZWFtSW1wbC9sYW1iZGEkMCRUeXBlIiwxMDgwKSxEKDEwODEsMSxVbixFcyksbC50ZD1mdW5jdGlvbihlKXtRYigpfSxGKElzLCJTdHJlYW1JbXBsL2xhbWJkYSQxJFR5cGUiLDEwODEpLEQoMTA4MiwxLHt9LEluKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEVKZSh0aGlzLmEsZSxuKX0sRihJcywiU3RyZWFtSW1wbC9sYW1iZGEkNCRUeXBlIiwxMDgyKSxEKDEwODMsMSxVbixLVnQpLGwudGQ9ZnVuY3Rpb24oZSl7T1plKHRoaXMuYix0aGlzLmEsZSl9LEYoSXMsIlN0cmVhbUltcGwvbGFtYmRhJDUkVHlwZSIsMTA4MyksRCgxMDg5LDEsVW4sWW4pLGwudGQ9ZnVuY3Rpb24oZSl7anVuKHRoaXMuYSx1KGUsMzY1KSl9LEYoSXMsIlRlcm1pbmF0YWJsZVN0cmVhbS9sYW1iZGEkMCRUeXBlIiwxMDg5KSxEKDIwNDEsMSx7fSksRCgxOTE0LDEse30scWEpLEYoImphdmFlbXVsLmludGVybmFsIiwiQ29uc29sZUxvZ2dlciIsMTkxNCksRCgyMDM4LDEse30pO3ZhciByNm49MCxSRXQsakV0PTAsYVY7RCgxNzY4LDEsVW4sTWEpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDMwOCl9LEYoekUsIkJvd3llcldhdHNvblRyaWFuZ3VsYXRpb24vbGFtYmRhJDAkVHlwZSIsMTc2OCksRCgxNzY5LDEsVW4sU24pLGwudGQ9ZnVuY3Rpb24oZSl7VWEodGhpcy5hLHUoZSwzMDgpLmUpfSxGKHpFLCJCb3d5ZXJXYXRzb25Ucmlhbmd1bGF0aW9uL2xhbWJkYSQxJFR5cGUiLDE3NjkpLEQoMTc3MCwxLFVuLEdzKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwxNjgpfSxGKHpFLCJCb3d5ZXJXYXRzb25Ucmlhbmd1bGF0aW9uL2xhbWJkYSQyJFR5cGUiLDE3NzApLEQoMTc2NSwxLE9pLFduKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEpzbih0aGlzLmEsdShlLDE2OCksdShuLDE2OCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoekUsIk5haXZlTWluU1QvbGFtYmRhJDAkVHlwZSIsMTc2NSksRCg0OTksMSx7fSxyciksRih6RSwiTm9kZU1pY3JvTGF5b3V0Iiw0OTkpLEQoMTY4LDEsezE2ODoxfSxEeCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gX3QoZSwxNjgpPyhuPXUoZSwxNjgpLEZjKHRoaXMuYSxuLmEpJiZGYyh0aGlzLmIsbi5iKXx8RmModGhpcy5hLG4uYikmJkZjKHRoaXMuYixuLmEpKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBVMyh0aGlzLmEpK1UzKHRoaXMuYil9O3ZhciBpNm49Rih6RSwiVEVkZ2UiLDE2OCk7RCgzMDgsMSx7MzA4OjF9LGh4dCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gX3QoZSwzMDgpPyhuPXUoZSwzMDgpLFkkKHRoaXMsbi5hKSYmWSQodGhpcyxuLmIpJiZZJCh0aGlzLG4uYykpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFUzKHRoaXMuYSkrVTModGhpcy5iKStVMyh0aGlzLmMpfSxGKHpFLCJUVHJpYW5nbGUiLDMwOCksRCgyMjEsMSx7MjIxOjF9LG1qKSxGKHpFLCJUcmVlIiwyMjEpLEQoMTI1NCwxLHt9LFJRdCksRihJZmUsIlNjYW5saW5lIiwxMjU0KTt2YXIgaXBlPUtpKElmZSxPZmUpO0QoMTY5MiwxLHt9LF9lZSksRihhMCwiQ0dyYXBoIiwxNjkyKSxEKDMwNywxLHszMDc6MX0sT1F0KSxsLmI9MCxsLmM9MCxsLmQ9MCxsLmc9MCxsLmk9MCxsLms9Q3MsRihhMCwiQ0dyb3VwIiwzMDcpLEQoODE1LDEse30sUnB0KSxGKGEwLCJDR3JvdXAvQ0dyb3VwQnVpbGRlciIsODE1KSxEKDU3LDEsezU3OjF9LHJZdCksbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmo/QnIodGhpcy5qLktiKHRoaXMpKTooUDAob1YpLG9WLm8rIkAiKyhlPVB3KHRoaXMpPj4+MCxlLnRvU3RyaW5nKDE2KSkpfSxsLmY9MCxsLmk9Q3M7dmFyIG9WPUYoYTAsIkNOb2RlIiw1Nyk7RCg4MTQsMSx7fSxqcHQpLEYoYTAsIkNOb2RlL0NOb2RlQnVpbGRlciIsODE0KTt2YXIgc3BlO0QoMTUyNSwxLHt9LFBvKSxsLk9lPWZ1bmN0aW9uKGUsbil7cmV0dXJuIDB9LGwuUGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gMH0sRihhMCxGZmUsMTUyNSksRCgxNzkwLDEse30sdnMpLGwuTGU9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtmb3IoQz1hcyxzPW5ldyBTKGUuYS5iKTtzLmE8cy5jLmMubGVuZ3RoOyluPXUoSihzKSw1NyksQz1iLk1hdGgubWluKEMsbi5hLmouZC5jK24uYi5hKTtmb3IoRz1uZXcgWmksZD1uZXcgUyhlLmEuYSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMzA3KSxoLms9QyxoLmc9PTAmJmZzKEcsaCxHLmMuYixHLmMpO2Zvcig7Ry5iIT0wOyl7Zm9yKGg9dShHLmI9PTA/bnVsbDooWm4oRy5iIT0wKSxsaChHLEcuYS5hKSksMzA3KSxvPWguai5kLmMsSD1oLmEuYS5lYygpLktjKCk7SC5PYigpOylNPXUoSC5QYigpLDU3KSx0dD1oLmsrTS5iLmEsIXBsbihlLGgsZS5kKXx8TS5kLmM8dHQ/TS5pPXR0Ok0uaT1NLmQuYztmb3Ioby09aC5qLmksaC5iKz1vLGUuZD09KGFvKCksQ2YpfHxlLmQ9PW5nP2guYys9bzpoLmMtPW8saj1oLmEuYS5lYygpLktjKCk7ai5PYigpOylmb3IoTT11KGouUGIoKSw1Nyksaz1NLmMuS2MoKTtrLk9iKCk7KXY9dShrLlBiKCksNTcpLEJwKGUuZCk/Sz1lLmcuT2UoTSx2KTpLPWUuZy5QZShNLHYpLHYuYS5rPWIuTWF0aC5tYXgodi5hLmssTS5pK00uZC5iK0stdi5iLmEpLHNRdChlLHYsZS5kKSYmKHYuYS5rPWIuTWF0aC5tYXgodi5hLmssdi5kLmMtdi5iLmEpKSwtLXYuYS5nLHYuYS5nPT0wJiZyaShHLHYuYSl9Zm9yKHI9bmV3IFMoZS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDU3KSxuLmQuYz1uLml9LEYoYTAsIkxvbmdlc3RQYXRoQ29tcGFjdGlvbiIsMTc5MCksRCgxNjkwLDEse30sSm9lKSxsLmU9ITE7dmFyIGFwZSxvcGUsY3BlLHp1dD1GKGEwLFJmZSwxNjkwKTtEKDE2OTEsMSxVbix3ciksbC50ZD1mdW5jdGlvbihlKXt3dW4odGhpcy5hLHUoZSw0NikpfSxGKGEwLGpmZSwxNjkxKSxEKDE3OTEsMSx7fSxydSksbC5NZT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iocj1uZXcgUyhlLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspbj11KEoociksNTcpLG4uYy4kYigpO2ZvcihvPW5ldyBTKGUuYS5iKTtvLmE8by5jLmMubGVuZ3RoOylmb3Iocz11KEoobyksNTcpLGQ9bmV3IFMoZS5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDU3KSxzIT1oJiYocy5hJiZzLmE9PWguYXx8KEJwKGUuZCk/dj1lLmcuUGUocyxoKTp2PWUuZy5PZShzLGgpLChoLmQuYz5zLmQuY3x8cy5kLmM9PWguZC5jJiZzLmQuYjxoLmQuYikmJm5mbihoLmQuZCtoLmQuYSt2LHMuZC5kKSYmSTN0KGguZC5kLHMuZC5kK3MuZC5hK3YpJiZzLmMuRmMoaCkpKX0sRihhMCwiUXVhZHJhdGljQ29uc3RyYWludENhbGN1bGF0aW9uIiwxNzkxKSxEKDUyMiwxLHs1MjI6MX0sSnR0KSxsLmE9ITEsbC5iPSExLGwuYz0hMSxsLmQ9ITEsRihhMCwkZmUsNTIyKSxEKDgwMywxLHt9LHR2dCksbC5NZT1mdW5jdGlvbihlKXt0aGlzLmM9ZSxoSSh0aGlzLG5ldyBwbSl9LEYoYTAsemZlLDgwMyksRCgxNzE4LDEsezY3OToxfSxvUXQpLGwuS2U9ZnVuY3Rpb24oZSl7ZnBuKHRoaXMsdShlLDQ2NCkpfSxGKGEwLHFmZSwxNzE4KSxEKDE3MTksMSxPaSx6cyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBkcm4odShlLDU3KSx1KG4sNTcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGEwLEhmZSwxNzE5KSxEKDQ2NCwxLHs0NjQ6MX0sTGJ0KSxsLmE9ITEsRihhMCxWZmUsNDY0KSxEKDE3MjAsMSxPaSxEdSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBUZG4odShlLDQ2NCksdShuLDQ2NCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoYTAsR2ZlLDE3MjApLEQoMTcyMSwxLHhkLHBtKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNTcpLCEwfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDU3KSwhMH0sRihhMCwiU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlIiwxNzIxKSxEKDQyOCwyMix7MzoxLDM1OjEsMjI6MSw0Mjg6MX0sSWJ0KTt2YXIgJEV0LHF1dCx6RXQ9anIoTG90LCJIaWdoTGV2ZWxTb3J0aW5nQ3JpdGVyaW9uIiw0MjgsSHIsSnJuLGFKZSksdXBlO0QoNDI3LDIyLHszOjEsMzU6MSwyMjoxLDQyNzoxfSxPYnQpO3ZhciBxRXQsSHV0LEhFdD1qcihMb3QsIkxvd0xldmVsU29ydGluZ0NyaXRlcmlvbiIsNDI3LEhyLHRpbixvSmUpLGxwZSwkND1LaShRbywiSUxheW91dE1ldGFEYXRhUHJvdmlkZXIiKTtEKDg1MywxLE9oLFFMKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxReHQpLE1vdCksIlBvbHlvbWlubyBUcmF2ZXJzYWwgU3RyYXRlZ3kiKSwiVHJhdmVyc2FsIHN0cmF0ZWd5IGZvciB0cnlpbmcgZGlmZmVyZW50IGNhbmRpZGF0ZSBwb3NpdGlvbnMgZm9yIHBvbHlvbWlub2VzLiIpLFhFdCksKFVnKCksdXMpKSxzN3QpLHVuKChRZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFp4dCksTW90KSwiUG9seW9taW5vIFNlY29uZGFyeSBTb3J0aW5nIENyaXRlcmlvbiIpLCJQb3NzaWJsZSBzZWNvbmRhcnkgc29ydGluZyBjcml0ZXJpYSBmb3IgdGhlIHByb2Nlc3Npbmcgb3JkZXIgb2YgcG9seW9taW5vZXMuIFRoZXkgYXJlIHVzZWQgd2hlbiBwb2x5b21pbm9lcyBhcmUgZXF1YWwgYWNjb3JkaW5nIHRvIHRoZSBwcmltYXJ5IHNvcnRpbmcgY3JpdGVyaW9uIEhpZ2hMZXZlbFNvcnRpbmdDcml0ZXJpb24uIiksWUV0KSx1cyksSEV0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEp4dCksTW90KSwiUG9seW9taW5vIFByaW1hcnkgU29ydGluZyBDcml0ZXJpb24iKSwiUG9zc2libGUgcHJpbWFyeSBzb3J0aW5nIGNyaXRlcmlhIGZvciB0aGUgcHJvY2Vzc2luZyBvcmRlciBvZiBwb2x5b21pbm9lcy4iKSxVRXQpLHVzKSx6RXQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdDZ0KSxNb3QpLCJGaWxsIFBvbHlvbWlub2VzIiksIlVzZSB0aGUgUHJvZmlsZSBGaWxsIGFsZ29yaXRobSB0byBmaWxsIHBvbHlvbWlub2VzIHRvIHByZXZlbnQgc21hbGwgcG9seW9taW5vZXMgZnJvbSBiZWluZyBwbGFjZWQgaW5zaWRlIG9mIGJpZyBwb2x5b21pbm9lcyB3aXRoIGxhcmdlIGhvbGVzLiBNaWdodCBpbmNyZWFzZSBwYWNraW5nIGFyZWEuIiksKE5uKCksITApKSxMYSksUnMpLHVuKHFuKSkpKX07dmFyIFZFdCxHRXQsVUV0LFdFdCxZRXQsS0V0LFhFdDtGKExvdCwiUG9seW9taW5vT3B0aW9ucyIsODUzKSxEKDI1MCwyMix7MzoxLDM1OjEsMjI6MSwyNTA6MX0sejMpO3ZhciBRRXQsWkV0LEpFdCx0N3QsZTd0LG43dCxWdXQscjd0LGk3dCxzN3Q9anIoTG90LCJUcmF2ZXJzYWxTdHJhdGVneSIsMjUwLEhyLGRjbixjSmUpLGhwZTtEKDIxMywxLHsyMTM6MX0sdXcpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTkVkZ2VbaWQ9Iit0aGlzLmIrIiB3PSIrdGhpcy5nKyIgZD0iK3RoaXMuYSsiXSJ9LGwuYT0xLGwuYj0wLGwuYz0wLGwuZj0hMSxsLmc9MDt2YXIgZnBlPUYoRl8sIk5FZGdlIiwyMTMpO0QoMTc2LDEse30sQ2gpLEYoRl8sIk5FZGdlL05FZGdlQnVpbGRlciIsMTc2KSxEKDY1MywxLHt9LGVldCksRihGXywiTkdyYXBoIiw2NTMpLEQoMTIxLDEsezEyMToxfSxWSnQpLGwuYz0tMSxsLmQ9MCxsLmU9MCxsLmk9LTEsbC5qPSExO3ZhciBhN3Q9RihGXywiTk5vZGUiLDEyMSk7RCg3OTUsMSxBZmUsRnB0KSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHRoaXMsMTYpKX0sbC5hZD1mdW5jdGlvbihlKXtyNCh0aGlzLGUpfSxsLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfbih0aGlzLDE2KX0sbC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odGhpcywxNikpfSxsLlZjPWZ1bmN0aW9uKGUsbil7Kyt0aGlzLmIsSG0odGhpcy5hLGUsbil9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIF9qKHRoaXMsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4rK3RoaXMuYixHeXQodGhpcy5hLGUsbil9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuKyt0aGlzLmIsTHModGhpcy5hLGUpfSxsLiRiPWZ1bmN0aW9uKCl7Kyt0aGlzLmIsdGhpcy5hLmM9TnQoUW4sRGUsMSwwLDUsMSl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJvKHRoaXMuYSxlLDApIT0tMX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gTkQodGhpcy5hLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBOZSh0aGlzLmEsZSl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFJvKHRoaXMuYSxlLDApfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jLmxlbmd0aD09MH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBlNihuZXcgUyh0aGlzLmEpKX0sbC5ZYz1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwuWmM9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4rK3RoaXMuYixGZyh0aGlzLmEsZSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIE4ydCh0aGlzLGUpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuKyt0aGlzLmIsY2godGhpcy5hLGUsbil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RofSxsLmJkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyBRZCh0aGlzLmEsZSxuKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBwbnQodGhpcy5hKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gUDEodGhpcy5hLGUpfSxsLmI9MCxGKEZfLCJOTm9kZS9DaGFuZ2VBd2FyZUFycmF5TGlzdCIsNzk1KSxEKDI2OSwxLHt9LFhiKSxGKEZfLCJOTm9kZS9OTm9kZUJ1aWxkZXIiLDI2OSksRCgxNjMwLDEse30sV3UpLGwuYT0hMSxsLmY9d2ksbC5qPTAsRihGXywiTmV0d29ya1NpbXBsZXgiLDE2MzApLEQoMTI5NCwxLFVuLHVyKSxsLnRkPWZ1bmN0aW9uKGUpe1NoZSh0aGlzLmEsdShlLDY4MCksITAsITEpfSxGKFVmZSwiTm9kZUxhYmVsQW5kU2l6ZUNhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZSIsMTI5NCksRCg1NTgsMSx7fSxlciksbC5iPSEwLGwuYz0hMCxsLmQ9ITAsbC5lPSEwLEYoVWZlLCJOb2RlTWFyZ2luQ2FsY3VsYXRvciIsNTU4KSxEKDIxMiwxLHsyMTI6MX0pLGwuaj0hMSxsLms9ITE7dmFyIGRwZT1GKF8yLCJDZWxsIiwyMTIpO0QoMTI0LDIxMix7MTI0OjEsMjEyOjF9LHVZdCksbC5SZT1mdW5jdGlvbigpe3JldHVybiAkaih0aGlzKX0sbC5TZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMubix0aGlzLmEuYStlLmIrZS5jfSxGKF8yLCJBdG9taWNDZWxsIiwxMjQpLEQoMjMyLDIyLHszOjEsMzU6MSwyMjoxLDIzMjoxfSxBZXQpO3ZhciBzYyxldSxhYyxPeT1qcihfMiwiQ29udGFpbmVyQXJlYSIsMjMyLEhyLENpbix1SmUpLGdwZTtEKDMyNiwyMTIsV2ZlKSxGKF8yLCJDb250YWluZXJDZWxsIiwzMjYpLEQoMTQ3MywzMjYsV2ZlLF9pZSksbC5SZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPTAsdGhpcy5lP3RoaXMuYj9lPXRoaXMuYi5iOnRoaXMuYVsxXVsxXSYmKGU9dGhpcy5hWzFdWzFdLlJlKCkpOmU9ZDN0KHRoaXMsUnNlKHRoaXMsITApKSxlPjA/ZSt0aGlzLm4uZCt0aGlzLm4uYTowfSxsLlNlPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztpZihvPTAsdGhpcy5lKXRoaXMuYj9vPXRoaXMuYi5hOnRoaXMuYVsxXVsxXSYmKG89dGhpcy5hWzFdWzFdLlNlKCkpO2Vsc2UgaWYodGhpcy5nKW89ZDN0KHRoaXMsSXN0KHRoaXMsbnVsbCwhMCkpO2Vsc2UgZm9yKG49KEtmKCksbHQoY3QoT3ksMSksb2UsMjMyLDAsW3NjLGV1LGFjXSkpLHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpZT1uW3JdLG89Yi5NYXRoLm1heChvLGQzdCh0aGlzLElzdCh0aGlzLGUsITApKSk7cmV0dXJuIG8+MD9vK3RoaXMubi5iK3RoaXMubi5jOjB9LGwuVGU9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvO2lmKHRoaXMuZylmb3IoZT1Jc3QodGhpcyxudWxsLCExKSxyPShLZigpLGx0KGN0KE95LDEpLG9lLDIzMiwwLFtzYyxldSxhY10pKSxzPTAsbz1yLmxlbmd0aDtzPG87KytzKW49cltzXSxodWUodGhpcyxuLGUpO2Vsc2UgZm9yKHI9KEtmKCksbHQoY3QoT3ksMSksb2UsMjMyLDAsW3NjLGV1LGFjXSkpLHM9MCxvPXIubGVuZ3RoO3M8bzsrK3Mpbj1yW3NdLGU9SXN0KHRoaXMsbiwhMSksaHVlKHRoaXMsbixlKX0sbC5VZT1mdW5jdGlvbigpe3ZhciBlLG4scixzO249dGhpcy5pLGU9dGhpcy5uLHM9UnNlKHRoaXMsITEpLHdtdCh0aGlzLChLZigpLHNjKSxuLmQrZS5kLHMpLHdtdCh0aGlzLGFjLG4uZCtuLmEtZS5hLXNbMl0scykscj1uLmEtZS5kLWUuYSxzWzBdPjAmJihzWzBdKz10aGlzLmQsci09c1swXSksc1syXT4wJiYoc1syXSs9dGhpcy5kLHItPXNbMl0pLHRoaXMuYy5hPWIuTWF0aC5tYXgoMCxyKSx0aGlzLmMuZD1uLmQrZS5kKyh0aGlzLmMuYS1yKS8yLHNbMV09Yi5NYXRoLm1heChzWzFdLHIpLHdtdCh0aGlzLGV1LG4uZCtlLmQrc1swXS0oc1sxXS1yKS8yLHMpfSxsLmI9bnVsbCxsLmQ9MCxsLmU9ITEsbC5mPSExLGwuZz0hMTt2YXIgR3V0PTAsY1Y9MDtGKF8yLCJHcmlkQ29udGFpbmVyQ2VsbCIsMTQ3MyksRCg0NjEsMjIsezM6MSwzNToxLDIyOjEsNDYxOjF9LExldCk7dmFyIGZiLE1kLGtmLHBwZT1qcihfMiwiSG9yaXpvbnRhbExhYmVsQWxpZ25tZW50Iiw0NjEsSHIsX2luLGxKZSksYnBlO0QoMzA2LDIxMix7MjEyOjEsMzA2OjF9LHhRdCxBZWUsdlF0KSxsLlJlPWZ1bmN0aW9uKCl7cmV0dXJuIHNLdCh0aGlzKX0sbC5TZT1mdW5jdGlvbigpe3JldHVybiBWd3QodGhpcyl9LGwuYT0wLGwuYz0hMTt2YXIgczZuPUYoXzIsIkxhYmVsQ2VsbCIsMzA2KTtEKDI0NCwzMjYsezIxMjoxLDMyNjoxLDI0NDoxfSxhXyksbC5SZT1mdW5jdGlvbigpe3JldHVybiBkSSh0aGlzKX0sbC5TZT1mdW5jdGlvbigpe3JldHVybiBnSSh0aGlzKX0sbC5UZT1mdW5jdGlvbigpe0VhdCh0aGlzKX0sbC5VZT1mdW5jdGlvbigpe1RhdCh0aGlzKX0sbC5iPTAsbC5jPTAsbC5kPSExLEYoXzIsIlN0cmlwQ29udGFpbmVyQ2VsbCIsMjQ0KSxEKDE2MjYsMSxsaSx0aCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRUtlKHUoZSwyMTIpKX0sRihfMiwiU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQwJFR5cGUiLDE2MjYpLEQoMTYyNywxLHt9LEZhKSxsLkZlPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMjEyKS5TZSgpfSxGKF8yLCJTdHJpcENvbnRhaW5lckNlbGwvbGFtYmRhJDEkVHlwZSIsMTYyNyksRCgxNjI4LDEsbGksTWwpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFRLZSh1KGUsMjEyKSl9LEYoXzIsIlN0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMiRUeXBlIiwxNjI4KSxEKDE2MjksMSx7fSxoYSksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDIxMikuUmUoKX0sRihfMiwiU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQzJFR5cGUiLDE2MjkpLEQoNDYyLDIyLHszOjEsMzU6MSwyMjoxLDQ2MjoxfSxNZXQpO3ZhciBFZixkYixuMSx3cGU9anIoXzIsIlZlcnRpY2FsTGFiZWxBbGlnbm1lbnQiLDQ2MixIcixTaW4saEplKSx2cGU7RCg3ODksMSx7fSxTeHQpLGwuYz0wLGwuZD0wLGwuaz0wLGwucz0wLGwudD0wLGwudj0hMSxsLnc9MCxsLkQ9ITEsRihZcSwiTm9kZUNvbnRleHQiLDc4OSksRCgxNDcxLDEsT2ksYmMpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geFV0KHUoZSw2MSksdShuLDYxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihZcSwiTm9kZUNvbnRleHQvMG1ldGhvZHJlZiRjb21wYXJlUG9ydFNpZGVzJFR5cGUiLDE0NzEpLEQoMTQ3MiwxLE9pLENjKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFEwbih1KGUsMTExKSx1KG4sMTExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihZcSwiTm9kZUNvbnRleHQvMW1ldGhvZHJlZiRjb21wYXJlUG9ydENvbnRleHRzJFR5cGUiLDE0NzIpLEQoMTU5LDIyLHszOjEsMzU6MSwyMjoxLDE1OToxfSxoaCk7dmFyIG1wZSx5cGUseHBlLGtwZSxFcGUsVHBlLENwZSxfcGUsU3BlLEFwZSxMcGUsTXBlLERwZSxJcGUsT3BlLFBwZSxGcGUsTnBlLEJwZSxScGUsanBlLFV1dCwkcGU9anIoWXEsIk5vZGVMYWJlbExvY2F0aW9uIiwxNTksSHIsbHN0LGZKZSksenBlO0QoMTExLDEsezExMToxfSx0Y2UpLGwuYT0hMSxGKFlxLCJQb3J0Q29udGV4dCIsMTExKSxEKDE0NzYsMSxVbixwYSksbC50ZD1mdW5jdGlvbihlKXskSHQodShlLDMwNikpfSxGKHpJLFlmZSwxNDc2KSxEKDE0NzcsMSxsaSxEYSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4hIXUoZSwxMTEpLmN9LEYoekksS2ZlLDE0NzcpLEQoMTQ3OCwxLFVuLEhhKSxsLnRkPWZ1bmN0aW9uKGUpeyRIdCh1KGUsMTExKS5jKX0sRih6SSwiTGFiZWxQbGFjZXIvbGFtYmRhJDIkVHlwZSIsMTQ3OCk7dmFyIG83dDtEKDE0NzUsMSxVbixfYyksbC50ZD1mdW5jdGlvbihlKXskbSgpLHJLZSh1KGUsMTExKSl9LEYoekksIk5vZGVMYWJlbEFuZFNpemVVdGlsaXRpZXMvbGFtYmRhJDAkVHlwZSIsMTQ3NSksRCg3OTAsMSxVbixFd3QpLGwudGQ9ZnVuY3Rpb24oZSl7cFhlKHRoaXMuYix0aGlzLmMsdGhpcy5hLHUoZSwxODEpKX0sbC5hPSExLGwuYz0hMSxGKHpJLCJOb2RlTGFiZWxDZWxsQ3JlYXRvci9sYW1iZGEkMCRUeXBlIiw3OTApLEQoMTQ3NCwxLFVuLHZuKSxsLnRkPWZ1bmN0aW9uKGUpe2FLZSh0aGlzLmEsdShlLDE4MSkpfSxGKHpJLCJQb3J0Q29udGV4dENyZWF0b3IvbGFtYmRhJDAkVHlwZSIsMTQ3NCk7dmFyIHVWO0QoMTgyOSwxLHt9LGx3KSxGKEhFLCJHcmVlZHlSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyIiwxODI5KSxEKDE4MzAsMSxPaSxEbCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBXUWUodShlLDIyMiksdShuLDIyMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoSEUsIkdyZWVkeVJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvMG1ldGhvZHJlZiRjb21wYXJlQnlZQ29vcmRpbmF0ZSRUeXBlIiwxODMwKSxEKDE3ODYsMSx7fSx2cXQpLGwuYT01LGwuZT0wLEYoSEUsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIiLDE3ODYpLEQoMTc4NywxLE9pLGVkKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFlRZSh1KGUsMjIyKSx1KG4sMjIyKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihIRSwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci8wbWV0aG9kcmVmJGNvbXBhcmVMZWZ0UmVjdGFuZ2xlQm9yZGVycyRUeXBlIiwxNzg3KSxEKDE3ODksMSxPaSxqZCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiB2bm4odShlLDIyMiksdShuLDIyMikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoSEUsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvMW1ldGhvZHJlZiRjb21wYXJlUmlnaHRSZWN0YW5nbGVCb3JkZXJzJFR5cGUiLDE3ODkpLEQoNDA2LDIyLHszOjEsMzU6MSwyMjoxLDQwNjoxfSxaUik7dmFyIGxPLFd1dCxZdXQsaE8scXBlPWpyKEhFLCJSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyL092ZXJsYXBSZW1vdmFsRGlyZWN0aW9uIiw0MDYsSHIsX3NuLGRKZSksSHBlO0QoMjIyLDEsezIyMjoxfSxIbnQpLEYoSEUsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvUmVjdGFuZ2xlTm9kZSIsMjIyKSxEKDE3ODgsMSxVbixnciksbC50ZD1mdW5jdGlvbihlKXtrMW4odGhpcy5hLHUoZSwyMjIpKX0sRihIRSwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9sYW1iZGEkMSRUeXBlIiwxNzg4KSxEKDEzMDQsMSxPaSxuZCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBBM24odShlLDE2NyksdShuLDE2NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoa2QsIlBvbHlvbWlub0NvbXBhY3Rvci9Db3JuZXJDYXNlc0dyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMDQpLEQoMTMwNywxLHt9LCRkKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzI0KS5hfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEzMDcpLEQoMTMwOCwxLGxpLEEwKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzIzKS5hfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQxJFR5cGUiLDEzMDgpLEQoMTMwOSwxLGxpLEJpKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzIzKS5hfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQyJFR5cGUiLDEzMDkpLEQoMTMwMiwxLE9pLGNuKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGNtbih1KGUsMTY3KSx1KG4sMTY3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihrZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uRGlyZWN0aW9uc0NvbXBhcmF0b3IiLDEzMDIpLEQoMTMwNSwxLHt9LGVoKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzI0KS5hfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvTWluTnVtT2ZFeHRlbnNpb25EaXJlY3Rpb25zQ29tcGFyYXRvci9sYW1iZGEkMCRUeXBlIiwxMzA1KSxEKDc2NywxLE9pLGtyKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGx1bih1KGUsMTY3KSx1KG4sMTY3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihrZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uc0NvbXBhcmF0b3IiLDc2NyksRCgxMzAwLDEsT2ksRWkpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbWNuKHUoZSwzMjEpLHUobiwzMjEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvciIsMTMwMCksRCgxMzAxLDEsT2ksSm8pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gS2ZuKHUoZSwzMjEpLHUobiwzMjEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvcldpdGhTaGFwZSIsMTMwMSksRCgxMzAzLDEsT2ksd2MpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRG1uKHUoZSwxNjcpLHUobiwxNjcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMDMpLEQoMTMwNiwxLHt9LHJmKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzI0KS5hfSxGKGtkLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTMwNiksRCg3NzcsMSx7fSxNYnQpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4ga3NuKHRoaXMsdShlLDQ2KSx1KG4sMTY3KSl9LEYoa2QsIlN1Y2Nlc3NvckNvbWJpbmF0aW9uIiw3NzcpLEQoNjQ0LDEse30sT2MpLGwuQ2U9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gaGJuKChyPXUoZSw0NiksdShuLDE2NykscikpfSxGKGtkLCJTdWNjZXNzb3JKaXR0ZXIiLDY0NCksRCg2NDMsMSx7fSxzZiksbC5DZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiBKd24oKHI9dShlLDQ2KSx1KG4sMTY3KSxyKSl9LEYoa2QsIlN1Y2Nlc3NvckxpbmVCeUxpbmUiLDY0MyksRCg1NjgsMSx7fSxhZiksbC5DZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiBmMm4oKHI9dShlLDQ2KSx1KG4sMTY3KSxyKSl9LEYoa2QsIlN1Y2Nlc3Nvck1hbmhhdHRhbiIsNTY4KSxEKDEzNTYsMSx7fSxRaSksbC5DZT1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiBFd24oKHI9dShlLDQ2KSx1KG4sMTY3KSxyKSl9LEYoa2QsIlN1Y2Nlc3Nvck1heE5vcm1XaW5kaW5nSW5NYXRoUG9zU2Vuc2UiLDEzNTYpLEQoNDAwLDEse30sZnIpLGwuQ2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdnZ0KHRoaXMsZSxuKX0sbC5jPSExLGwuZD0hMSxsLmU9ITEsbC5mPSExLEYoa2QsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMiLDQwMCksRCgxMzU3LDEse30sVHMpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMjQpLmF9LEYoa2QsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMvbGFtYmRhJDAkVHlwZSIsMTM1NyksRCgzMjMsMjIsezM6MSwzNToxLDIyOjEsMzIzOjF9LFFSKSxsLmE9ITE7dmFyIGZPLGRPLGdPLHBPLFZwZT1qcihYcSxpNnQsMzIzLEhyLExzbixnSmUpLEdwZTtEKDEyOTgsMSx7fSksbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtmb3Iocj0iICIsZT1wZSgwKSxvPTA7bzx0aGlzLm87bysrKXIrPSIiK2UuYSxlPXBlKFpXdChlLmEpKTtmb3Iocis9YApgLGU9cGUoMCksaD0wO2g8dGhpcy5wO2grKyl7Zm9yKHIrPSIiK2UuYSxlPXBlKFpXdChlLmEpKSxzPTA7czx0aGlzLm87cysrKW49d2l0KHRoaXMscyxoKSx5YyhuLDApPT0wP3IrPSJfIjp5YyhuLDEpPT0wP3IrPSJYIjpyKz0iMCI7cis9YApgfXJldHVybiBQbChyLDAsci5sZW5ndGgtMSl9LGwubz0wLGwucD0wLEYoWHEsIlR3b0JpdEdyaWQiLDEyOTgpLEQoMzIxLDEyOTgsezMyMToxfSxDM3QpLGwuaj0wLGwuaz0wLEYoWHEsIlBsYW5hckdyaWQiLDMyMSksRCgxNjcsMzIxLHszMjE6MSwxNjc6MX0pLGwuZz0wLGwuaT0wLEYoWHEsIlBvbHlvbWlubyIsMTY3KTt2YXIgYTZuPUtpKHFJLFFmZSk7RCgxMzQsMSxzNnQsa2EpLGwuWWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gekQodGhpcyxlLG4pfSxsLlZlPWZ1bmN0aW9uKCl7cmV0dXJuIHlLdCh0aGlzKX0sbC5XZT1mdW5jdGlvbihlKXtyZXR1cm4gUSh0aGlzLGUpfSxsLlhlPWZ1bmN0aW9uKGUpe3JldHVybiBVcyh0aGlzLGUpfSxGKHFJLCJNYXBQcm9wZXJ0eUhvbGRlciIsMTM0KSxEKDEyOTksMTM0LHM2dCxKY2UpLEYoWHEsIlBvbHlvbWlub2VzIiwxMjk5KTt2YXIgVXBlPSExLGhTLGM3dDtEKDE3NjYsMSxVbix4aSksbC50ZD1mdW5jdGlvbihlKXtRbGUodShlLDIyMSkpfSxGKGs2LCJEZXB0aEZpcnN0Q29tcGFjdGlvbi8wbWV0aG9kcmVmJGNvbXBhY3RUcmVlJFR5cGUiLDE3NjYpLEQoODEwLDEsVW4sSnIpLGwudGQ9ZnVuY3Rpb24oZSl7SG5uKHRoaXMuYSx1KGUsMjIxKSl9LEYoazYsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQxJFR5cGUiLDgxMCksRCgxNzY3LDEsVW4sT1l0KSxsLnRkPWZ1bmN0aW9uKGUpe2Rmbih0aGlzLmEsdGhpcy5iLHRoaXMuYyx1KGUsMjIxKSl9LEYoazYsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQyJFR5cGUiLDE3NjcpO3ZhciBmUyx1N3Q7RCg2NSwxLHs2NToxfSwkUXQpLEYoazYsIk5vZGUiLDY1KSxEKDEyNTAsMSx7fSx6VXQpLEYoazYsIlNjYW5saW5lT3ZlcmxhcENoZWNrIiwxMjUwKSxEKDEyNTEsMSx7Njc5OjF9LGFRdCksbC5LZT1mdW5jdGlvbihlKXtfWmUodGhpcyx1KGUsNDQwKSl9LEYoazYsIlNjYW5saW5lT3ZlcmxhcENoZWNrL092ZXJsYXBzU2NhbmxpbmVIYW5kbGVyIiwxMjUxKSxEKDEyNTIsMSxPaSxZYyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBLbG4odShlLDY1KSx1KG4sNjUpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGs2LCJTY2FubGluZU92ZXJsYXBDaGVjay9PdmVybGFwc1NjYW5saW5lSGFuZGxlci9sYW1iZGEkMCRUeXBlIiwxMjUyKSxEKDQ0MCwxLHs0NDA6MX0sRGJ0KSxsLmE9ITEsRihrNiwiU2NhbmxpbmVPdmVybGFwQ2hlY2svVGltZXN0YW1wIiw0NDApLEQoMTI1MywxLE9pLENlKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIENkbih1KGUsNDQwKSx1KG4sNDQwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihrNiwiU2NhbmxpbmVPdmVybGFwQ2hlY2svbGFtYmRhJDAkVHlwZSIsMTI1MyksRCg1NTAsMSx7fSx2cCksRihaZmUsIlNWR0ltYWdlIiw1NTApLEQoMzI0LDEsezMyNDoxfSxUd3QpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hK1lhK3RoaXMuYitZYSt0aGlzLmMrIikifSxGKFpmZSwiVW5pcXVlVHJpcGxlIiwzMjQpLEQoMjA5LDEsUzIpLEYoTDQsIkFic3RyYWN0TGF5b3V0UHJvdmlkZXIiLDIwOSksRCgxMTMyLDIwOSxTMixCZSksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoO3N3aXRjaCh2cihuLEpmZSwxKSx0aGlzLmE9WHQoeWUocWUoZSwob18oKSxwN3QpKSkpLG8yKGUsWHV0KSYmKG89QnIocWUoZSxYdXQpKSxyPWJhdChLOCgpLG8pLHImJihzPXUoeHJ0KHIuZiksMjA5KSxzLlplKGUsUmMobiwxKSkpKSxoPW5ldyBuSnQodGhpcy5hKSx0aGlzLmI9ZzVuKGgsZSksdShxZShlLChSaXQoKSxoN3QpKSw0ODEpLmcpe2Nhc2UgMDpNYm4obmV3IEJmLHRoaXMuYiksd28oZSxmVixRKHRoaXMuYixmVikpO2JyZWFrO2RlZmF1bHQ6R2QoKX1rNW4oaCksd28oZSxkN3QsdGhpcy5iKSxvcihuKX0sbC5hPTAsRih0MWUsIkRpc0NvTGF5b3V0UHJvdmlkZXIiLDExMzIpLEQoMTI0NCwxLHt9LEJmKSxsLmM9ITEsbC5lPTAsbC5mPTAsRih0MWUsIkRpc0NvUG9seW9taW5vQ29tcGFjdG9yIiwxMjQ0KSxEKDU2MSwxLHs1NjE6MX0sQ0t0KSxsLmI9ITAsRihacSwiRENDb21wb25lbnQiLDU2MSksRCgzOTQsMjIsezM6MSwzNToxLDIyOjEsMzk0OjF9LFhSKSxsLmE9ITE7dmFyIGxWLGJPLGhWLHdPLFdwZT1qcihacSwiRENEaXJlY3Rpb24iLDM5NCxIcixBc24scEplKSxZcGU7RCgyNjYsMTM0LHszOjEsMjY2OjEsOTQ6MSwxMzQ6MX0sbmF0KSxGKFpxLCJEQ0VsZW1lbnQiLDI2NiksRCgzOTUsMSx7Mzk1OjF9LEszdCksbC5jPTAsRihacSwiRENFeHRlbnNpb24iLDM5NSksRCg3NTUsMTM0LHM2dCxrSHQpLEYoWnEsIkRDR3JhcGgiLDc1NSksRCg0ODEsMjIsezM6MSwzNToxLDIyOjEsNDgxOjF9LF9XdCk7dmFyIEt1dCxsN3Q9anIoUm90LGE2dCw0ODEsSHIsaXJuLGJKZSksS3BlO0QoODU0LDEsT2gscUopLGwuUWU9ZnVuY3Rpb24oZSl7YW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG82dCksZTFlKSwiQ29ubmVjdGVkIENvbXBvbmVudHMgQ29tcGFjdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgcGFja2luZyBkaWZmZXJlbnQgY29ubmVjdGVkIGNvbXBvbmVudHMgaW4gb3JkZXIgdG8gc2F2ZSBzcGFjZSBhbmQgZW5oYW5jZSByZWFkYWJpbGl0eSBvZiBhIGdyYXBoLiIpLGY3dCksKFVnKCksdXMpKSxsN3QpLHVuKChRZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGM2dCksZTFlKSwiQ29ubmVjdGVkIENvbXBvbmVudHMgTGF5b3V0IEFsZ29yaXRobSIpLCJBIGxheW91dCBhbGdvcml0aG0gdGhhdCBpcyB0byBiZSBhcHBsaWVkIHRvIGVhY2ggY29ubmVjdGVkIGNvbXBvbmVudCBiZWZvcmUgdGhlIGNvbXBvbmVudHMgdGhlbXNlbHZlcyBhcmUgY29tcGFjdGVkLiBJZiB1bnNwZWNpZmllZCwgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY29tcG9uZW50cycgbm9kZXMgYXJlIG5vdCBhbHRlcmVkLiIpLEk3KSxBZSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSx1NnQpLCJkZWJ1ZyIpLCJEQ0dyYXBoIiksIkFjY2VzcyB0byB0aGUgRENHcmFwaCBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIiksVjEpLFFuKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGw2dCksImRlYnVnIiksIkxpc3Qgb2YgUG9seW9taW5vZXMiKSwiQWNjZXNzIHRvIHRoZSBwb2x5b21pbm9lcyBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIiksVjEpLFFuKSx1bihxbikpKSksamxlKChuZXcgJEIsZSkpfTt2YXIgWHBlLGg3dCxmN3QsUXBlLFpwZTtGKFJvdCwiRGlzQ29NZXRhRGF0YVByb3ZpZGVyIiw4NTQpLEQoOTk4LDEsT2gsJEIpLGwuUWU9ZnVuY3Rpb24oZSl7amxlKGUpfTt2YXIgSnBlLFh1dCx0YmUsZDd0LGZWLFF1dCxnN3QsZWJlLG5iZSxyYmUsaWJlLHA3dDtGKFJvdCwiRGlzQ29PcHRpb25zIiw5OTgpLEQoOTk5LDEse30seWcpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgQmUsZX0sbC5fZT1mdW5jdGlvbihlKXt9LEYoUm90LCJEaXNDb09wdGlvbnMvRGlzY29GYWN0b3J5Iiw5OTkpLEQoNTYyLDE2Nyx7MzIxOjEsMTY3OjEsNTYyOjF9LE5jZSksbC5hPTAsbC5iPTAsbC5jPTAsbC5kPTAsRigib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjby5zdHJ1Y3R1cmVzIiwiRENQb2x5b21pbm8iLDU2Mik7dmFyIFp1dCxKdXQsZFY7RCgxMjY4LDEsbGksYm0pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGEydChlKX0sRihNNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDEyNjgpLEQoMTI2OSwxLHt9LEVrKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBVeCgpLGUwKHUoZSw3OSkpfSxGKE00LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTI2OSksRCgxMjcwLDEsbGksRTMpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHBlbih1KGUsNzkpKX0sRihNNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDEyNzApLEQoMTI3MSwxLHt9LElsKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBVeCgpLHRiKHUoZSw3OSkpfSxGKE00LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTI3MSksRCgxMjcyLDEsbGksTDApLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGJlbih1KGUsNzkpKX0sRihNNCwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQ0JFR5cGUiLDEyNzIpLEQoMTI3MywxLGxpLHZpKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBhaW4odGhpcy5hLHUoZSw3OSkpfSxGKE00LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDUkVHlwZSIsMTI3MyksRCgxMjc0LDEse30sWHMpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFRubih0aGlzLmEsdShlLDc5KSl9LEYoTTQsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkNiRUeXBlIiwxMjc0KSxEKDEyNDEsMSx7fSxuSnQpLGwuYT0wLEYoTTQsIkVsa0dyYXBoVHJhbnNmb3JtZXIiLDEyNDEpLEQoMTI0MiwxLHt9LGh3KSxsLk9kPWZ1bmN0aW9uKGUsbil7cGJuKHRoaXMsdShlLDE2MCksdShuLDI2NikpfSxGKE00LCJFbGtHcmFwaFRyYW5zZm9ybWVyL09mZnNldEFwcGxpZXIiLDEyNDIpLEQoMTI0MywxLFVuLEVhKSxsLnRkPWZ1bmN0aW9uKGUpeyRRZSh0aGlzLHUoZSw4KSl9LEYoTTQsIkVsa0dyYXBoVHJhbnNmb3JtZXIvT2Zmc2V0QXBwbGllci9PZmZTZXRUb0NoYWluQXBwbGllciIsMTI0MyksRCg3NTMsMSx7fSxINSksRihmNnQsZDZ0LDc1MyksRCgxMjMyLDEsT2ksSGIpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZWJuKHUoZSwyMzEpLHUobiwyMzEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGY2dCxuMWUsMTIzMiksRCg3NDAsMjA5LFMyLE5wdCksbC5aZT1mdW5jdGlvbihlLG4pe2pjZSh0aGlzLGUsbil9LEYoZjZ0LCJGb3JjZUxheW91dFByb3ZpZGVyIiw3NDApLEQoMzU3LDEzNCx7MzoxLDM1NzoxLDk0OjEsMTM0OjF9KSxGKEhJLCJGUGFydGljbGUiLDM1NyksRCg1NTksMzU3LHszOjEsNTU5OjEsMzU3OjEsOTQ6MSwxMzQ6MX0sYVh0KSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuYT8oZT1Sbyh0aGlzLmEuYSx0aGlzLDApLGU+PTA/ImIiK2UrIlsiK3pydCh0aGlzLmEpKyJdIjoiYlsiK3pydCh0aGlzLmEpKyJdIik6ImJfIitQdyh0aGlzKX0sRihISSwiRkJlbmRwb2ludCIsNTU5KSxEKDI4MiwxMzQsezM6MSwyODI6MSw5NDoxLDEzNDoxfSxlWXQpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4genJ0KHRoaXMpfSxGKEhJLCJGRWRnZSIsMjgyKSxEKDIzMSwxMzQsezM6MSwyMzE6MSw5NDoxLDEzNDoxfSxCJCk7dmFyIG82bj1GKEhJLCJGR3JhcGgiLDIzMSk7RCg0NDcsMzU3LHszOjEsNDQ3OjEsMzU3OjEsOTQ6MSwxMzQ6MX0saUp0KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj09bnVsbHx8dGhpcy5iLmxlbmd0aD09MD8ibFsiK3pydCh0aGlzLmEpKyJdIjoibF8iK3RoaXMuYn0sRihISSwiRkxhYmVsIiw0NDcpLEQoMTQ0LDM1Nyx7MzoxLDE0NDoxLDM1NzoxLDk0OjEsMTM0OjF9LGdYdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiBLdnQodGhpcyl9LGwuYj0wLEYoSEksIkZOb2RlIiwxNDQpLEQoMjAwMywxLHt9KSxsLmJmPWZ1bmN0aW9uKGUpe2F4dCh0aGlzLGUpfSxsLmNmPWZ1bmN0aW9uKCl7QnNlKHRoaXMpfSxsLmQ9MCxGKGc2dCwiQWJzdHJhY3RGb3JjZU1vZGVsIiwyMDAzKSxEKDYzMSwyMDAzLHs2MzE6MX0sV25lKSxsLmFmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZDtyZXR1cm4gT29lKHRoaXMuZixlLG4pLG89aWEobmMobi5kKSxlLmQpLGQ9Yi5NYXRoLnNxcnQoby5hKm8uYStvLmIqby5iKSxzPWIuTWF0aC5tYXgoMCxkLUQ5KGUuZSkvMi1EOShuLmUpLzIpLHI9RXJlKHRoaXMuZSxlLG4pLHI+MD9oPS1wbm4ocyx0aGlzLmMpKnI6aD1vWmUocyx0aGlzLmIpKnUoUShlLChKZigpLGM3KSksMTkpLmEsZmQobyxoL2QpLG99LGwuYmY9ZnVuY3Rpb24oZSl7YXh0KHRoaXMsZSksdGhpcy5hPXUoUShlLChKZigpLHBWKSksMTkpLmEsdGhpcy5jPVh0KHllKFEoZSxiVikpKSx0aGlzLmI9WHQoeWUoUShlLGVsdCkpKX0sbC5kZj1mdW5jdGlvbihlKXtyZXR1cm4gZTx0aGlzLmF9LGwuYT0wLGwuYj0wLGwuYz0wLEYoZzZ0LCJFYWRlc01vZGVsIiw2MzEpLEQoNjMyLDIwMDMsezYzMjoxfSxZWXQpLGwuYWY9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO3JldHVybiBPb2UodGhpcy5mLGUsbiksbz1pYShuYyhuLmQpLGUuZCksZD1iLk1hdGguc3FydChvLmEqby5hK28uYipvLmIpLHM9Yi5NYXRoLm1heCgwLGQtRDkoZS5lKS8yLUQ5KG4uZSkvMiksaD1hWmUocyx0aGlzLmEpKnUoUShlLChKZigpLGM3KSksMTkpLmEscj1FcmUodGhpcy5lLGUsbikscj4wJiYoaC09bUtlKHMsdGhpcy5hKSpyKSxmZChvLGgqdGhpcy5iL2QpLG99LGwuYmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHY7Zm9yKGF4dCh0aGlzLGUpLHRoaXMuYj1YdCh5ZShRKGUsKEpmKCksbmx0KSkpKSx0aGlzLmM9dGhpcy5iL3UoUShlLHBWKSwxOSkuYSxzPWUuZS5jLmxlbmd0aCxoPTAsbz0wLHY9bmV3IFMoZS5lKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSwxNDQpLGgrPWQuZS5hLG8rPWQuZS5iO249aCpvLHI9WHQoeWUoUShlLGJWKSkpKkIxLHRoaXMuYT1iLk1hdGguc3FydChuLygyKnMpKSpyfSxsLmNmPWZ1bmN0aW9uKCl7QnNlKHRoaXMpLHRoaXMuYi09dGhpcy5jfSxsLmRmPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmI+MH0sbC5hPTAsbC5iPTAsbC5jPTAsRihnNnQsIkZydWNodGVybWFuUmVpbmdvbGRNb2RlbCIsNjMyKSxEKDg0OSwxLE9oLEhKKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxKcSksIiIpLCJGb3JjZSBNb2RlbCIpLCJEZXRlcm1pbmVzIHRoZSBtb2RlbCBmb3IgZm9yY2UgY2FsY3VsYXRpb24uIiksYjd0KSwoVWcoKSx1cykpLHc3dCksdW4oKFFmKCkscW4pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscDZ0KSwiIiksIkl0ZXJhdGlvbnMiKSwiVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9uIHRoZSBmb3JjZSBtb2RlbC4iKSxwZSgzMDApKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsYjZ0KSwiIiksIlJlcHVsc2l2ZSBQb3dlciIpLCJEZXRlcm1pbmVzIGhvdyBtYW55IGJlbmQgcG9pbnRzIGFyZSBhZGRlZCB0byB0aGUgZWRnZTsgc3VjaCBiZW5kIHBvaW50cyBhcmUgcmVnYXJkZWQgYXMgcmVwZWxsaW5nIHBhcnRpY2xlcyBpbiB0aGUgZm9yY2UgbW9kZWwiKSxwZSgwKSksZ2MpLGphKSx1bihQZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHFvdCksIiIpLCJGUiBUZW1wZXJhdHVyZSIpLCJUaGUgdGVtcGVyYXR1cmUgaXMgdXNlZCBhcyBhIHNjYWxpbmcgZmFjdG9yIGZvciBwYXJ0aWNsZSBkaXNwbGFjZW1lbnRzLiIpLEVkKSxPbyksbGEpLHVuKHFuKSkpKSxjYShlLHFvdCxKcSxoYmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxIb3QpLCIiKSwiRWFkZXMgUmVwdWxzaW9uIiksIkZhY3RvciBmb3IgcmVwdWxzaXZlIGZvcmNlcyBpbiBFYWRlcycgbW9kZWwuIiksNSksT28pLGxhKSx1bihxbikpKSksY2EoZSxIb3QsSnEsY2JlKSxQaGUoKG5ldyBiQyxlKSl9O3ZhciBzYmUsYWJlLGI3dCxvYmUsY2JlLHViZSxsYmUsaGJlO0YoQl8sIkZvcmNlTWV0YURhdGFQcm92aWRlciIsODQ5KSxEKDQyNCwyMix7MzoxLDM1OjEsMjI6MSw0MjQ6MX0sUGJ0KTt2YXIgdGx0LGdWLHc3dD1qcihCXywiRm9yY2VNb2RlbFN0cmF0ZWd5Iiw0MjQsSHIsZWluLHdKZSksZmJlO0QoOTg4LDEsT2gsYkMpLGwuUWU9ZnVuY3Rpb24oZSl7UGhlKGUpfTt2YXIgZGJlLGdiZSx2N3QscFYsbTd0LHBiZSxiYmUsd2JlLHk3dCx2YmUseDd0LGs3dCxtYmUsYzcseWJlLGVsdCxFN3QseGJlLGtiZSxiVixubHQ7RihCXywiRm9yY2VPcHRpb25zIiw5ODgpLEQoOTg5LDEse30sVjUpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgTnB0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxGKEJfLCJGb3JjZU9wdGlvbnMvRm9yY2VGYWN0b3J5Iiw5ODkpO3ZhciB2TyxkUyxJNix3VjtEKDg1MCwxLE9oLFZKKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx2NnQpLCIiKSwiRml4ZWQgUG9zaXRpb24iKSwiUHJldmVudCB0aGF0IHRoZSBub2RlIGlzIG1vdmVkIGJ5IHRoZSBsYXlvdXQgYWxnb3JpdGhtLiIpLChObigpLCExKSksKFVnKCksTGEpKSxScyksdW4oKFFmKCksZWEpKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsbTZ0KSwiIiksIkRlc2lyZWQgRWRnZSBMZW5ndGgiKSwiRWl0aGVyIHNwZWNpZmllZCBmb3IgcGFyZW50IG5vZGVzIG9yIGZvciBpbmRpdmlkdWFsIGVkZ2VzLCB3aGVyZSB0aGUgbGF0dGVyIHRha2VzIGhpZ2hlciBwcmVjZWRlbmNlLiIpLDEwMCksT28pLGxhKSxqaShxbixsdChjdChpcCwxKSxvZSwxNzUsMCxbUGRdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHk2dCksIiIpLCJMYXlvdXQgRGltZW5zaW9uIiksIkRpbWVuc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIHRvIGJlIGFsdGVyZWQgZHVyaW5nIGxheW91dC4iKSxUN3QpLHVzKSxEN3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUseDZ0KSwiIiksIlN0cmVzcyBFcHNpbG9uIiksIlRlcm1pbmF0aW9uIGNyaXRlcmlvbiBmb3IgdGhlIGl0ZXJhdGl2ZSBwcm9jZXNzLiIpLEVkKSxPbyksbGEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsazZ0KSwiIiksIkl0ZXJhdGlvbiBMaW1pdCIpLCJNYXhpbXVtIG51bWJlciBvZiBwZXJmb3JtZWQgaXRlcmF0aW9ucy4gVGFrZXMgaGlnaGVyIHByZWNlZGVuY2UgdGhhbiAnZXBzaWxvbicuIikscGUod2kpKSxnYyksamEpLHVuKHFuKSkpKSx2aGUoKG5ldyBHSixlKSl9O3ZhciBFYmUsVGJlLFQ3dCxDYmUsX2JlLFNiZTtGKEJfLCJTdHJlc3NNZXRhRGF0YVByb3ZpZGVyIiw4NTApLEQoOTkyLDEsT2gsR0opLGwuUWU9ZnVuY3Rpb24oZSl7dmhlKGUpfTt2YXIgdlYsQzd0LF83dCxTN3QsQTd0LEw3dCxBYmUsTGJlLE1iZSxEYmUsTTd0LEliZTtGKEJfLCJTdHJlc3NPcHRpb25zIiw5OTIpLEQoOTkzLDEse30sZjEpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgbll0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxGKEJfLCJTdHJlc3NPcHRpb25zL1N0cmVzc0ZhY3RvcnkiLDk5MyksRCgxMTI4LDIwOSxTMixuWXQpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO2Zvcih2cihuLG8xZSwxKSxqZShSZShxZShlLChpSSgpLEE3dCkpKSk/amUoUmUocWUoZSxNN3QpKSl8fHkkKChyPW5ldyBycigoUG0oKSxuZXcgTW0oZSkpKSxyKSk6amNlKG5ldyBOcHQsZSxSYyhuLDEpKSxvPXByZShlKSxzPUFsZSh0aGlzLmEsbyksZD1zLktjKCk7ZC5PYigpOyloPXUoZC5QYigpLDIzMSksIShoLmUuYy5sZW5ndGg8PTEpJiYoXzNuKHRoaXMuYixoKSxpMm4odGhpcy5iKSx4dShoLmQsbmV3IHJkKSk7bz16aGUocyksUmhlKG8pLG9yKG4pfSxGKG5ILCJTdHJlc3NMYXlvdXRQcm92aWRlciIsMTEyOCksRCgxMTI5LDEsVW4scmQpLGwudGQ9ZnVuY3Rpb24oZSl7ZHh0KHUoZSw0NDcpKX0sRihuSCwiU3RyZXNzTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZSIsMTEyOSksRCg5OTAsMSx7fSxocXQpLGwuYz0wLGwuZT0wLGwuZz0wLEYobkgsIlN0cmVzc01ham9yaXphdGlvbiIsOTkwKSxEKDM3OSwyMix7MzoxLDM1OjEsMjI6MSwzNzk6MX0sRGV0KTt2YXIgcmx0LGlsdCxzbHQsRDd0PWpyKG5ILCJTdHJlc3NNYWpvcml6YXRpb24vRGltZW5zaW9uIiwzNzksSHIsTGluLHZKZSksT2JlO0QoOTkxLDEsT2ksQ2kpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWVplKHRoaXMuYSx1KGUsMTQ0KSx1KG4sMTQ0KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihuSCwiU3RyZXNzTWFqb3JpemF0aW9uL2xhbWJkYSQwJFR5cGUiLDk5MSksRCgxMjI5LDEse30sd1p0KSxGKF82LCJFbGtMYXllcmVkIiwxMjI5KSxEKDEyMzAsMSxVbixpZCksbC50ZD1mdW5jdGlvbihlKXtzYm4odShlLDM3KSl9LEYoXzYsIkVsa0xheWVyZWQvbGFtYmRhJDAkVHlwZSIsMTIzMCksRCgxMjMxLDEsVW4saGkpLGwudGQ9ZnVuY3Rpb24oZSl7S1plKHRoaXMuYSx1KGUsMzcpKX0sRihfNiwiRWxrTGF5ZXJlZC9sYW1iZGEkMSRUeXBlIiwxMjMxKSxEKDEyNjMsMSx7fSxIVXQpO3ZhciBQYmUsRmJlLE5iZTtGKF82LCJHcmFwaENvbmZpZ3VyYXRvciIsMTI2MyksRCg3NTksMSxVbixncyksbC50ZD1mdW5jdGlvbihlKXtHYWUodGhpcy5hLHUoZSwxMCkpfSxGKF82LCJHcmFwaENvbmZpZ3VyYXRvci9sYW1iZGEkMCRUeXBlIiw3NTkpLEQoNzYwLDEse30sRzUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGw0dCgpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sRihfNiwiR3JhcGhDb25maWd1cmF0b3IvbGFtYmRhJDEkVHlwZSIsNzYwKSxEKDc2MSwxLFVuLHFpKSxsLnRkPWZ1bmN0aW9uKGUpe0dhZSh0aGlzLmEsdShlLDEwKSl9LEYoXzYsIkdyYXBoQ29uZmlndXJhdG9yL2xhbWJkYSQyJFR5cGUiLDc2MSksRCgxMTI3LDIwOSxTMixncXQpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyPVd5bihuZXcgeXF0LGUpLFZ0KHFlKGUsKFRlKCkscXkpKSk9PT1WdCgoRzAoKSxzcCkpP0Nobih0aGlzLmEscixuKTp4Ym4odGhpcy5hLHIsbiksT2hlKG5ldyBXSixyKX0sRihfNiwiTGF5ZXJlZExheW91dFByb3ZpZGVyIiwxMTI3KSxEKDM1NiwyMix7MzoxLDM1OjEsMjI6MSwzNTY6MX0sX00pO3ZhciBEZCxnYixjdSxxYyxJbyxJN3Q9anIoXzYsIkxheWVyZWRQaGFzZXMiLDM1NixIcixmYW4sbUplKSxCYmU7RCgxNjUxLDEse30sbm5lKSxsLmk9MDt2YXIgUmJlO0YoVUksIkNvbXBvbmVudHNUb0NHcmFwaFRyYW5zZm9ybWVyIiwxNjUxKTt2YXIgamJlO0QoMTY1MiwxLHt9LGZ3KSxsLmVmPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuTWF0aC5taW4oZS5hIT1udWxsP1h0KGUuYSk6ZS5jLmksbi5hIT1udWxsP1h0KG4uYSk6bi5jLmkpfSxsLmZmPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuTWF0aC5taW4oZS5hIT1udWxsP1h0KGUuYSk6ZS5jLmksbi5hIT1udWxsP1h0KG4uYSk6bi5jLmkpfSxGKFVJLCJDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lci8xIiwxNjUyKSxEKDgxLDEsezgxOjF9KSxsLmk9MCxsLms9ITAsbC5vPUNzO3ZhciBhbHQ9RigkXywiQ05vZGUiLDgxKTtEKDQ2MCw4MSx7NDYwOjEsODE6MX0sRjJ0LE4zdCksbC5JYj1mdW5jdGlvbigpe3JldHVybiIifSxGKFVJLCJDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lci9DUmVjdE5vZGUiLDQ2MCksRCgxNjIzLDEse30sVTUpO3ZhciBvbHQsY2x0O0YoVUksIk9uZURpbWVuc2lvbmFsQ29tcG9uZW50c0NvbXBhY3Rpb24iLDE2MjMpLEQoMTYyNCwxLHt9LG1wKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB5aW4odShlLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxGKFVJLCJPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uL2xhbWJkYSQwJFR5cGUiLDE2MjQpLEQoMTYyNSwxLHt9LFc1KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBPaG4odShlLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxGKFVJLCJPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uL2xhbWJkYSQxJFR5cGUiLDE2MjUpLEQoMTY1NCwxLHt9LGRYdCksRigkXywiQ0dyYXBoIiwxNjU0KSxEKDE4OSwxLHsxODk6MX0sb3N0KSxsLmI9MCxsLmM9MCxsLmU9MCxsLmc9ITAsbC5pPUNzLEYoJF8sIkNHcm91cCIsMTg5KSxEKDE2NTMsMSx7fSxFTCksbC5lZj1mdW5jdGlvbihlLG4pe3JldHVybiBiLk1hdGgubWF4KGUuYSE9bnVsbD9YdChlLmEpOmUuYy5pLG4uYSE9bnVsbD9YdChuLmEpOm4uYy5pKX0sbC5mZj1mdW5jdGlvbihlLG4pe3JldHVybiBiLk1hdGgubWF4KGUuYSE9bnVsbD9YdChlLmEpOmUuYy5pLG4uYSE9bnVsbD9YdChuLmEpOm4uYy5pKX0sRigkXyxGZmUsMTY1MyksRCgxNjU1LDEse30sVW9lKSxsLmQ9ITE7dmFyICRiZSx1bHQ9RigkXyxSZmUsMTY1NSk7RCgxNjU2LDEse30sdmwpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHhidCgpLE5uKCksdSh1KGUsNDYpLmEsODEpLmQuZSE9MH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LEYoJF8samZlLDE2NTYpLEQoODIzLDEse30sR3d0KSxsLmE9ITEsbC5iPSExLGwuYz0hMSxsLmQ9ITEsRigkXywkZmUsODIzKSxEKDE4MjUsMSx7fSxES3QpLEYockgsemZlLDE4MjUpO3ZhciBtTz1LaShMMixPZmUpO0QoMTgyNiwxLHszNjk6MX0sY1F0KSxsLktlPWZ1bmN0aW9uKGUpe2d2bih0aGlzLHUoZSw0NjYpKX0sRihySCxxZmUsMTgyNiksRCgxODI3LDEsT2ksaU4pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZ3JuKHUoZSw4MSksdShuLDgxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihySCxIZmUsMTgyNyksRCg0NjYsMSx7NDY2OjF9LE5idCksbC5hPSExLEYockgsVmZlLDQ2NiksRCgxODI4LDEsT2ksU2MpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gX2RuKHUoZSw0NjYpLHUobiw0NjYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKHJILEdmZSwxODI4KSxEKDE0MCwxLHsxNDA6MX0sZzgsJHd0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT1udWxsfHxjNm4hPW9sKGUpPyExOihuPXUoZSwxNDApLEZjKHRoaXMuYyxuLmMpJiZGYyh0aGlzLmQsbi5kKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gQXoobHQoY3QoUW4sMSksRGUsMSw1LFt0aGlzLmMsdGhpcy5kXSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK3RoaXMuYytZYSt0aGlzLmQrKHRoaXMuYT8iY3giOiIiKSt0aGlzLmIrIikifSxsLmE9ITAsbC5jPTAsbC5kPTA7dmFyIGM2bj1GKEwyLCJQb2ludCIsMTQwKTtEKDQwNSwyMix7MzoxLDM1OjEsMjI6MSw0MDU6MX0sSlIpO3ZhciBMdixQeSx6NCxGeSx6YmU9anIoTDIsIlBvaW50L1F1YWRyYW50Iiw0MDUsSHIsTXNuLHlKZSkscWJlO0QoMTY0MiwxLHt9LHBxdCksbC5iPW51bGwsbC5jPW51bGwsbC5kPW51bGwsbC5lPW51bGwsbC5mPW51bGw7dmFyIEhiZSxWYmUsR2JlLFViZSxXYmU7RihMMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsIiwxNjQyKSxEKDU3NCwxLHszNjk6MX0sWXopLGwuS2U9ZnVuY3Rpb24oZSl7ZG9uKHRoaXMsdShlLDE0MCkpfSxsLmI9MDt2YXIgTzd0O0YoTDIsIlJlY3RpbGluZWFyQ29udmV4SHVsbC9NYXhpbWFsRWxlbWVudHNFdmVudEhhbmRsZXIiLDU3NCksRCgxNjQ0LDEsT2ksd20pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcnJuKHllKGUpLHllKG4pKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEwyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvTWF4aW1hbEVsZW1lbnRzRXZlbnRIYW5kbGVyL2xhbWJkYSQwJFR5cGUiLDE2NDQpLEQoMTY0MywxLHszNjk6MX0sQ2VlKSxsLktlPWZ1bmN0aW9uKGUpe1N3bih0aGlzLHUoZSwxNDApKX0sbC5hPTAsbC5iPW51bGwsbC5jPW51bGwsbC5kPW51bGwsbC5lPW51bGwsRihMMiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsL1JlY3RhbmdsZUV2ZW50SGFuZGxlciIsMTY0MyksRCgxNjQ1LDEsT2kseGcpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXNuKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEwyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDAkVHlwZSIsMTY0NSksRCgxNjQ2LDEsT2ksVDMpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gb3NuKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEwyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDEkVHlwZSIsMTY0NiksRCgxNjQ3LDEsT2ksY0spLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdXNuKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEwyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDIkVHlwZSIsMTY0NyksRCgxNjQ4LDEsT2ksVmIpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gY3NuKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEwyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDMkVHlwZSIsMTY0OCksRCgxNjQ5LDEsT2ksdUspLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaGduKHUoZSwxNDApLHUobiwxNDApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEwyLCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDQkVHlwZSIsMTY0OSksRCgxNjUwLDEse30salF0KSxGKEwyLCJTY2FubGluZSIsMTY1MCksRCgyMDA1LDEse30pLEYoVGQsIkFic3RyYWN0R3JhcGhQbGFjZXIiLDIwMDUpLEQoMzI1LDEsezMyNToxfSxEV3QpLGwubWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmYoZSk/KGxuKHRoaXMuYix1KFEoZSwoYWUoKSxCeSkpLDIxKSxlKSwhMCk6ITF9LGwubmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKG49dShRKGUsKGFlKCksQnkpKSwyMSksbz11KEFpKFBpLG4pLDIxKSxzPW8uS2MoKTtzLk9iKCk7KWlmKHI9dShzLlBiKCksMjEpLCF1KEFpKHRoaXMuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtyZXR1cm4hMH07dmFyIFBpO0YoVGQsIkNvbXBvbmVudEdyb3VwIiwzMjUpLEQoNzY1LDIwMDUse30sJHB0KSxsLm9mPWZ1bmN0aW9uKGUpe3ZhciBuLHI7Zm9yKHI9bmV3IFModGhpcy5hKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPXUoSihyKSwzMjUpLG4ubWYoZSkpcmV0dXJuO2xlKHRoaXMuYSxuZXcgRFd0KGUpKX0sbC5sZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLO2lmKHRoaXMuYS5jPU50KFFuLERlLDEsMCw1LDEpLG4uYS5jPU50KFFuLERlLDEsMCw1LDEpLGUuZGMoKSl7bi5mLmE9MCxuLmYuYj0wO3JldHVybn1mb3IoZD11KGUuWGIoMCksMzcpLE1vKG4sZCksbz1lLktjKCk7by5PYigpOylzPXUoby5QYigpLDM3KSx0aGlzLm9mKHMpO2ZvcihLPW5ldyBDYSxoPVh0KHllKFEoZCwoVGUoKSxPTykpKSksQz1uZXcgUyh0aGlzLmEpO0MuYTxDLmMuYy5sZW5ndGg7KXY9dShKKEMpLDMyNSksTT1LaGUodixoKSxCZyhhJCh2LmIpLEsuYSxLLmIpLEsuYSs9TS5hLEsuYis9TS5iO2lmKG4uZi5hPUsuYS1oLG4uZi5iPUsuYi1oLGplKFJlKFEoZCxpRykpKSYmVnQoUShkLGVnKSk9PT1WdCgoVzAoKSxONykpKXtmb3IoRz1lLktjKCk7Ry5PYigpOylqPXUoRy5QYigpLDM3KSx4XyhqLGouYy5hLGouYy5iKTtmb3Iocj1uZXcgUFQsT3h0KHIsZSxoKSxIPWUuS2MoKTtILk9iKCk7KWo9dShILlBiKCksMzcpLExpKEdmKGouYyksci5lKTtMaShHZihuLmYpLHIuYSl9Zm9yKGs9bmV3IFModGhpcy5hKTtrLmE8ay5jLmMubGVuZ3RoOyl2PXUoSihrKSwzMjUpLE9tdChuLGEkKHYuYikpfSxGKFRkLCJDb21wb25lbnRHcm91cEdyYXBoUGxhY2VyIiw3NjUpLEQoMTI5Myw3NjUse30sU3F0KSxsLm9mPWZ1bmN0aW9uKGUpe25pZSh0aGlzLGUpfSxsLmxmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQ7aWYodGhpcy5hLmM9TnQoUW4sRGUsMSwwLDUsMSksbi5hLmM9TnQoUW4sRGUsMSwwLDUsMSksZS5kYygpKXtuLmYuYT0wLG4uZi5iPTA7cmV0dXJufWZvcihkPXUoZS5YYigwKSwzNyksTW8obixkKSxvPWUuS2MoKTtvLk9iKCk7KXM9dShvLlBiKCksMzcpLG5pZSh0aGlzLHMpO2ZvcihSdD1uZXcgQ2EsU3Q9bmV3IENhLHR0PW5ldyBDYSxLPW5ldyBDYSxoPVh0KHllKFEoZCwoVGUoKSxPTykpKSksQz1uZXcgUyh0aGlzLmEpO0MuYTxDLmMuYy5sZW5ndGg7KXtpZih2PXUoSihDKSwzMjUpLEJwKHUoUShuLCh1aSgpLHF2KSksMTAzKSkpe2Zvcih0dC5hPVJ0LmEsTXQ9bmV3IEZDKE05KGlydCh2LmIpLmEpLmEua2MoKSk7TXQuYi5PYigpOylpZihndD11KFVSKE10LmIuUGIoKSksMjEpLGd0LkhjKCh2ZSgpLFBuKSkpe3R0LmE9U3QuYTticmVha319ZWxzZSBpZihiOCh1KFEobixxdiksMTAzKSkpe2Zvcih0dC5iPVJ0LmIsTXQ9bmV3IEZDKE05KGlydCh2LmIpLmEpLmEua2MoKSk7TXQuYi5PYigpOylpZihndD11KFVSKE10LmIuUGIoKSksMjEpLGd0LkhjKCh2ZSgpLEJuKSkpe3R0LmI9U3QuYjticmVha319aWYoTT1LaGUodSh2LDU3MCksaCksQmcoYSQodi5iKSx0dC5hLHR0LmIpLEJwKHUoUShuLHF2KSwxMDMpKSl7Zm9yKFN0LmE9dHQuYStNLmEsSy5hPWIuTWF0aC5tYXgoSy5hLFN0LmEpLE10PW5ldyBGQyhNOShpcnQodi5iKS5hKS5hLmtjKCkpO010LmIuT2IoKTspaWYoZ3Q9dShVUihNdC5iLlBiKCkpLDIxKSxndC5IYygodmUoKSxtcikpKXtSdC5hPXR0LmErTS5hO2JyZWFrfVN0LmI9dHQuYitNLmIsdHQuYj1TdC5iLEsuYj1iLk1hdGgubWF4KEsuYix0dC5iKX1lbHNlIGlmKGI4KHUoUShuLHF2KSwxMDMpKSl7Zm9yKFN0LmI9dHQuYitNLmIsSy5iPWIuTWF0aC5tYXgoSy5iLFN0LmIpLE10PW5ldyBGQyhNOShpcnQodi5iKS5hKS5hLmtjKCkpO010LmIuT2IoKTspaWYoZ3Q9dShVUihNdC5iLlBiKCkpLDIxKSxndC5IYygodmUoKSxIbikpKXtSdC5iPXR0LmIrTS5iO2JyZWFrfVN0LmE9dHQuYStNLmEsdHQuYT1TdC5hLEsuYT1iLk1hdGgubWF4KEsuYSx0dC5hKX19aWYobi5mLmE9Sy5hLWgsbi5mLmI9Sy5iLWgsamUoUmUoUShkLGlHKSkpJiZWdChRKGQsZWcpKT09PVZ0KChXMCgpLE43KSkpe2ZvcihHPWUuS2MoKTtHLk9iKCk7KWo9dShHLlBiKCksMzcpLHhfKGosai5jLmEsai5jLmIpO2ZvcihyPW5ldyBQVCxPeHQocixlLGgpLEg9ZS5LYygpO0guT2IoKTspaj11KEguUGIoKSwzNyksTGkoR2Yoai5jKSxyLmUpO0xpKEdmKG4uZiksci5hKX1mb3Ioaz1uZXcgUyh0aGlzLmEpO2suYTxrLmMuYy5sZW5ndGg7KXY9dShKKGspLDMyNSksT210KG4sYSQodi5iKSl9LEYoVGQsIkNvbXBvbmVudEdyb3VwTW9kZWxPcmRlckdyYXBoUGxhY2VyIiwxMjkzKSxEKDQyMywyMix7MzoxLDM1OjEsMjI6MSw0MjM6MX0sSWV0KTt2YXIgbGx0LFA3dCxxNCxGN3Q9anIoVGQsIkNvbXBvbmVudE9yZGVyaW5nU3RyYXRlZ3kiLDQyMyxIcixBaW4seEplKSxZYmU7RCg2NTAsMSx7fSxQVCksRihUZCwiQ29tcG9uZW50c0NvbXBhY3RvciIsNjUwKSxEKDE0NjgsMTIsX2ZlLE9KdCksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gZF8odGhpcyx1KGUsMTQwKSl9LEYoVGQsIkNvbXBvbmVudHNDb21wYWN0b3IvSHVsbHBvaW50cyIsMTQ2OCksRCgxNDY1LDEsezg0MToxfSx2c2UpLGwuYT0hMSxGKFRkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsQ29tcG9uZW50IiwxNDY1KSxEKDE0NjQsMSxyMCxicXQpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUyh0aGlzLmEpfSxGKFRkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsQ29ubmVjdGVkQ29tcG9uZW50cyIsMTQ2NCksRCgxNDY3LDEsezU5NDoxfSxZb2UpLGwuaGY9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5qZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZ2Y9ZnVuY3Rpb24oKXtyZXR1cm4gaHN0KHRoaXMuZCl9LGwua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxGKFRkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsRXh0ZXJuYWxFeHRlbnNpb24iLDE0NjcpLEQoMTQ2NiwxLHs1OTQ6MX0sbXF0KSxsLmpmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5nZj1mdW5jdGlvbigpe3JldHVybiBoc3QodGhpcy5kKX0sbC5oZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxGKFRkLCJDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsVW5pb25FeHRlcm5hbEV4dGVuc2lvbiIsMTQ2NiksRCgxNDcwLDEse30sZnVlKSxGKFRkLCJDb21wb25lbnRzQ29tcGFjdG9yL091dGVyU2VnbWVudHMiLDE0NzApLEQoMTQ2OSwxLHt9LHdxdCksRihUZCwiQ29tcG9uZW50c0NvbXBhY3Rvci9TZWdtZW50cyIsMTQ2OSksRCgxMjY0LDEse30sdVF0KSxGKFRkLGQ2dCwxMjY0KSxEKDEyNjUsMSxPaSxsSyksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBmc24odShlLDM3KSx1KG4sMzcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKFRkLCJDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDEyNjUpLEQoNTcwLDMyNSx7MzI1OjEsNTcwOjF9LElKdCksbC5tZj1mdW5jdGlvbihlKXtyZXR1cm4gJHl0KHRoaXMsZSl9LGwubmY9ZnVuY3Rpb24oZSl7cmV0dXJuIFVjZSh0aGlzLGUpfTt2YXIgUXI7RihUZCwiTW9kZWxPcmRlckNvbXBvbmVudEdyb3VwIiw1NzApLEQoMTI5MSwyMDA1LHt9LHNOKSxsLmxmPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQsU3QsUnQsS3QsdWUsX2U7aWYoZS5nYygpPT0xKXtSdD11KGUuWGIoMCksMzcpLFJ0IT1uJiYobi5hLmM9TnQoUW4sRGUsMSwwLDUsMSksUXVlKG4sUnQsMCwwKSxNbyhuLFJ0KSxQdnQobi5kLFJ0LmQpLG4uZi5hPVJ0LmYuYSxuLmYuYj1SdC5mLmIpO3JldHVybn1lbHNlIGlmKGUuZGMoKSl7bi5hLmM9TnQoUW4sRGUsMSwwLDUsMSksbi5mLmE9MCxuLmYuYj0wO3JldHVybn1pZihWdChRKG4sKFRlKCkscTYpKSk9PT1WdCgoaXYoKSxxNCkpKXtmb3Ioaz1lLktjKCk7ay5PYigpOyl7Zm9yKGQ9dShrLlBiKCksMzcpLE10PTAsdHQ9bmV3IFMoZC5hKTt0dC5hPHR0LmMuYy5sZW5ndGg7KUs9dShKKHR0KSwxMCksTXQrPXUoUShLLFp2ZSksMTkpLmE7ZC5wPU10fXduKCksZS5hZChuZXcgUmYpfWZvcihoPXUoZS5YYigwKSwzNyksbi5hLmM9TnQoUW4sRGUsMSwwLDUsMSksTW8obixoKSxHPTAsS3Q9MCxDPWUuS2MoKTtDLk9iKCk7KWQ9dShDLlBiKCksMzcpLFN0PWQuZixHPWIuTWF0aC5tYXgoRyxTdC5hKSxLdCs9U3QuYSpTdC5iO2ZvcihHPWIuTWF0aC5tYXgoRyxiLk1hdGguc3FydChLdCkqWHQoeWUoUShuLHJHKSkpKSxvPVh0KHllKFEobixPTykpKSx1ZT0wLF9lPTAsSD0wLHI9byx2PWUuS2MoKTt2Lk9iKCk7KWQ9dSh2LlBiKCksMzcpLFN0PWQuZix1ZStTdC5hPkcmJih1ZT0wLF9lKz1IK28sSD0wKSxndD1kLmMseF8oZCx1ZStndC5hLF9lK2d0LmIpLEdmKGd0KSxyPWIuTWF0aC5tYXgocix1ZStTdC5hKSxIPWIuTWF0aC5tYXgoSCxTdC5iKSx1ZSs9U3QuYStvO2lmKG4uZi5hPXIsbi5mLmI9X2UrSCxqZShSZShRKGgsaUcpKSkpe2ZvcihzPW5ldyBQVCxPeHQocyxlLG8pLGo9ZS5LYygpO2ouT2IoKTspTT11KGouUGIoKSwzNyksTGkoR2YoTS5jKSxzLmUpO0xpKEdmKG4uZikscy5hKX1PbXQobixlKX0sRihUZCwiU2ltcGxlUm93R3JhcGhQbGFjZXIiLDEyOTEpLEQoMTI5MiwxLE9pLFJmKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHV1bih1KGUsMzcpLHUobiwzNykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoVGQsIlNpbXBsZVJvd0dyYXBoUGxhY2VyLzEiLDEyOTIpO3ZhciBLYmU7RCgxMjYyLDEseGQsdm0pLGwuTGI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dShRKHUoZSwyNDMpLmIsKFRlKCksU28pKSw3NCksISFuJiZuLmIhPTB9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXUoUSh1KGUsMjQzKS5iLChUZSgpLFNvKSksNzQpLCEhbiYmbi5iIT0wfSxGKGlILCJDb21wb3VuZEdyYXBoUG9zdHByb2Nlc3Nvci8xIiwxMjYyKSxEKDEyNjEsMSxvcyx4cXQpLGwucGY9ZnVuY3Rpb24oZSxuKXt5c2UodGhpcyx1KGUsMzcpLG4pfSxGKGlILCJDb21wb3VuZEdyYXBoUHJlcHJvY2Vzc29yIiwxMjYxKSxEKDQ0MSwxLHs0NDE6MX0sb2llKSxsLmM9ITEsRihpSCwiQ29tcG91bmRHcmFwaFByZXByb2Nlc3Nvci9FeHRlcm5hbFBvcnQiLDQ0MSksRCgyNDMsMSx7MjQzOjF9LEZqKSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGJudCh0aGlzLmMpKyI6Iitxb2UodGhpcy5iKX0sRihpSCwiQ3Jvc3NIaWVyYXJjaHlFZGdlIiwyNDMpLEQoNzYzLDEsT2ksU2kpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWjFuKHRoaXMsdShlLDI0MyksdShuLDI0MykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoaUgsIkNyb3NzSGllcmFyY2h5RWRnZUNvbXBhcmF0b3IiLDc2MyksRCgyOTksMTM0LHszOjEsMjk5OjEsOTQ6MSwxMzQ6MX0pLGwucD0wLEYodHUsIkxHcmFwaEVsZW1lbnQiLDI5OSksRCgxNywyOTksezM6MSwxNzoxLDI5OToxLDk0OjEsMTM0OjF9LFZ3KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHFvZSh0aGlzKX07dmFyIGhsdD1GKHR1LCJMRWRnZSIsMTcpO0QoMzcsMjk5LHszOjEsMjA6MSwzNzoxLDI5OToxLDk0OjEsMTM0OjF9LGV5dCksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTKHRoaXMuYil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmMubGVuZ3RoPT0wPyJHLXVubGF5ZXJlZCIrZWIodGhpcy5hKTp0aGlzLmEuYy5sZW5ndGg9PTA/IkctbGF5ZXJlZCIrZWIodGhpcy5iKToiR1tsYXllcmxlc3MiK2ViKHRoaXMuYSkrIiwgbGF5ZXJzIitlYih0aGlzLmIpKyJdIn07dmFyIFhiZT1GKHR1LCJMR3JhcGgiLDM3KSxRYmU7RCg2NTcsMSx7fSksbC5xZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUubn0sbC5XZT1mdW5jdGlvbihlKXtyZXR1cm4gUSh0aGlzLmUsZSl9LGwucmY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLm99LGwuc2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLnB9LGwuWGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFVzKHRoaXMuZSxlKX0sbC50Zj1mdW5jdGlvbihlKXt0aGlzLmUubi5hPWUuYSx0aGlzLmUubi5iPWUuYn0sbC51Zj1mdW5jdGlvbihlKXt0aGlzLmUuby5hPWUuYSx0aGlzLmUuby5iPWUuYn0sbC52Zj1mdW5jdGlvbihlKXt0aGlzLmUucD1lfSxGKHR1LCJMR3JhcGhBZGFwdGVycy9BYnN0cmFjdExTaGFwZUFkYXB0ZXIiLDY1NyksRCg1NzcsMSx7ODM5OjF9LFVpKSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5iKWZvcih0aGlzLmI9VWQodGhpcy5hLmIuYy5sZW5ndGgpLG49bmV3IFModGhpcy5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDcwKSxsZSh0aGlzLmIsbmV3IFZhKGUpKTtyZXR1cm4gdGhpcy5ifSxsLmI9bnVsbCxGKHR1LCJMR3JhcGhBZGFwdGVycy9MRWRnZUFkYXB0ZXIiLDU3NyksRCg2NTYsMSx7fSxocnQpLGwueGY9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7aWYoIXRoaXMuYil7Zm9yKHRoaXMuYj1uZXcgaGUscz1uZXcgUyh0aGlzLmEuYik7cy5hPHMuYy5jLmxlbmd0aDspZm9yKHI9dShKKHMpLDI5KSxoPW5ldyBTKHIuYSk7aC5hPGguYy5jLmxlbmd0aDspaWYobz11KEooaCksMTApLHRoaXMuYy5NYihvKSYmKGxlKHRoaXMuYixuZXcgTmoodGhpcyxvLHRoaXMuZSkpLHRoaXMuZCkpe2lmKFVzKG8sKGFlKCksejYpKSlmb3Iobj11KFEobyx6NiksMTUpLktjKCk7bi5PYigpOyllPXUobi5QYigpLDEwKSxsZSh0aGlzLmIsbmV3IE5qKHRoaXMsZSwhMSkpO2lmKFVzKG8sTjYpKWZvcihuPXUoUShvLE42KSwxNSkuS2MoKTtuLk9iKCk7KWU9dShuLlBiKCksMTApLGxlKHRoaXMuYixuZXcgTmoodGhpcyxlLCExKSl9fXJldHVybiB0aGlzLmJ9LGwucWY9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgU2cobDFlKSl9LGwuV2U9ZnVuY3Rpb24oZSl7cmV0dXJuIFEodGhpcy5hLGUpfSxsLnJmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mfSxsLnNmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5wfSxsLlhlPWZ1bmN0aW9uKGUpe3JldHVybiBVcyh0aGlzLmEsZSl9LGwudGY9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IFNnKGwxZSkpfSxsLnVmPWZ1bmN0aW9uKGUpe3RoaXMuYS5mLmE9ZS5hLHRoaXMuYS5mLmI9ZS5ifSxsLnZmPWZ1bmN0aW9uKGUpe3RoaXMuYS5wPWV9LGwuYj1udWxsLGwuZD0hMSxsLmU9ITEsRih0dSwiTEdyYXBoQWRhcHRlcnMvTEdyYXBoQWRhcHRlciIsNjU2KSxEKDU3Niw2NTcsezE4MToxfSxWYSksRih0dSwiTEdyYXBoQWRhcHRlcnMvTExhYmVsQWRhcHRlciIsNTc2KSxEKDU3NSw2NTcsezY4MDoxfSxOaiksbC55Zj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuemY9ZnVuY3Rpb24oKXtyZXR1cm4gd24oKSx3bigpLGlvfSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5hKWZvcih0aGlzLmE9VWQodSh0aGlzLmUsMTApLmIuYy5sZW5ndGgpLG49bmV3IFModSh0aGlzLmUsMTApLmIpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDcwKSxsZSh0aGlzLmEsbmV3IFZhKGUpKTtyZXR1cm4gdGhpcy5hfSxsLkFmPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dSh0aGlzLmUsMTApLmQsbmV3IHV3dChlLmQsZS5jLGUuYSxlLmIpfSxsLkJmPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksd24oKSxpb30sbC5DZj1mdW5jdGlvbigpe3ZhciBlLG47aWYoIXRoaXMuYylmb3IodGhpcy5jPVVkKHUodGhpcy5lLDEwKS5qLmMubGVuZ3RoKSxuPW5ldyBTKHUodGhpcy5lLDEwKS5qKTtuLmE8bi5jLmMubGVuZ3RoOyllPXUoSihuKSwxMSksbGUodGhpcy5jLG5ldyBmR3QoZSx0aGlzLmQpKTtyZXR1cm4gdGhpcy5jfSxsLkRmPWZ1bmN0aW9uKCl7cmV0dXJuIGplKFJlKFEodSh0aGlzLmUsMTApLChhZSgpLGVDdCkpKSl9LGwuRWY9ZnVuY3Rpb24oZSl7dSh0aGlzLmUsMTApLmQuYj1lLmIsdSh0aGlzLmUsMTApLmQuZD1lLmQsdSh0aGlzLmUsMTApLmQuYz1lLmMsdSh0aGlzLmUsMTApLmQuYT1lLmF9LGwuRmY9ZnVuY3Rpb24oZSl7dSh0aGlzLmUsMTApLmYuYj1lLmIsdSh0aGlzLmUsMTApLmYuZD1lLmQsdSh0aGlzLmUsMTApLmYuYz1lLmMsdSh0aGlzLmUsMTApLmYuYT1lLmF9LGwuR2Y9ZnVuY3Rpb24oKXtXb24odGhpcywoVkMoKSxRYmUpKX0sbC5hPW51bGwsbC5iPW51bGwsbC5jPW51bGwsbC5kPSExLEYodHUsIkxHcmFwaEFkYXB0ZXJzL0xOb2RlQWRhcHRlciIsNTc1KSxEKDE3MjIsNjU3LHs4Mzg6MX0sZkd0KSxsLnpmPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7aWYodGhpcy5kJiZ1KHRoaXMuZSwxMSkuaS5rPT0oVm4oKSxIYykpcmV0dXJuIHduKCksd24oKSxpbztpZighdGhpcy5hKXtmb3IodGhpcy5hPW5ldyBoZSxyPW5ldyBTKHUodGhpcy5lLDExKS5lKTtyLmE8ci5jLmMubGVuZ3RoOyllPXUoSihyKSwxNyksbGUodGhpcy5hLG5ldyBVaShlKSk7aWYodGhpcy5kJiYocz11KFEodSh0aGlzLmUsMTEpLChhZSgpLEp1KSksMTApLHMpKWZvcihuPW5ldyBhcihscihqbyhzKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDE3KSxsZSh0aGlzLmEsbmV3IFVpKGUpKX1yZXR1cm4gdGhpcy5hfSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5iKWZvcih0aGlzLmI9VWQodSh0aGlzLmUsMTEpLmYuYy5sZW5ndGgpLG49bmV3IFModSh0aGlzLmUsMTEpLmYpO24uYTxuLmMuYy5sZW5ndGg7KWU9dShKKG4pLDcwKSxsZSh0aGlzLmIsbmV3IFZhKGUpKTtyZXR1cm4gdGhpcy5ifSxsLkJmPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7aWYodGhpcy5kJiZ1KHRoaXMuZSwxMSkuaS5rPT0oVm4oKSxIYykpcmV0dXJuIHduKCksd24oKSxpbztpZighdGhpcy5jKXtmb3IodGhpcy5jPW5ldyBoZSxyPW5ldyBTKHUodGhpcy5lLDExKS5nKTtyLmE8ci5jLmMubGVuZ3RoOyllPXUoSihyKSwxNyksbGUodGhpcy5jLG5ldyBVaShlKSk7aWYodGhpcy5kJiYocz11KFEodSh0aGlzLmUsMTEpLChhZSgpLEp1KSksMTApLHMpKWZvcihuPW5ldyBhcihscihEcyhzKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDE3KSxsZSh0aGlzLmMsbmV3IFVpKGUpKX1yZXR1cm4gdGhpcy5jfSxsLkhmPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5lLDExKS5qfSxsLklmPWZ1bmN0aW9uKCl7cmV0dXJuIGplKFJlKFEodSh0aGlzLmUsMTEpLChhZSgpLFNPKSkpKX0sbC5hPW51bGwsbC5iPW51bGwsbC5jPW51bGwsbC5kPSExLEYodHUsIkxHcmFwaEFkYXB0ZXJzL0xQb3J0QWRhcHRlciIsMTcyMiksRCgxNzIzLDEsT2ksVEwpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gJHZuKHUoZSwxMSksdShuLDExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRih0dSwiTEdyYXBoQWRhcHRlcnMvUG9ydENvbXBhcmF0b3IiLDE3MjMpLEQoODA0LDEsbGksYU4pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMCksVkMoKSwhMH0sRih0dSwiTEdyYXBoQWRhcHRlcnMvbGFtYmRhJDAkVHlwZSIsODA0KSxEKDM5MiwyOTksezM6MSwyOTk6MSwzOTI6MSw5NDoxLDEzNDoxfSksRih0dSwiTFNoYXBlIiwzOTIpLEQoNzAsMzkyLHszOjEsMjk5OjEsNzA6MSwzOTI6MSw5NDoxLDEzNDoxfSxDSHQsYjJ0KSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dmVuKHRoaXMpLGU9PW51bGw/ImxhYmVsIjoibF8iK2V9LEYodHUsIkxMYWJlbCIsNzApLEQoMjA3LDEsezM6MSw0OjEsMjA3OjEsNDE0OjF9KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDIwNyk/KG49dShlLDIwNyksdGhpcy5kPT1uLmQmJnRoaXMuYT09bi5hJiZ0aGlzLmI9PW4uYiYmdGhpcy5jPT1uLmMpOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4gZT1wOCh0aGlzLmIpPDwxNixlfD1wOCh0aGlzLmEpJnlzLG49cDgodGhpcy5jKTw8MTYsbnw9cDgodGhpcy5kKSZ5cyxlXm59LGwuSmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0sajtmb3IoaD0wO2g8ZS5sZW5ndGgmJldyZSgoUnIoaCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGgpKSxmMWUpOykrK2g7Zm9yKG49ZS5sZW5ndGg7bj4wJiZXcmUoKFJyKG4tMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4tMSkpLGQxZSk7KS0tbjtpZihoPG4pe009dnkoZS5zdWJzdHIoaCxuLWgpLCIsfDsiKTt0cnl7Zm9yKHY9TSxrPTAsQz12Lmxlbmd0aDtrPEM7KytrKXtpZihkPXZba10sbz12eShkLCI9Iiksby5sZW5ndGghPTIpdGhyb3cgaXQobmV3IEZuKCJFeHBlY3RpbmcgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycy4iKSk7cz1meShvWzBdKSxqPWR5KGZ5KG9bMV0pKSxobihzLCJ0b3AiKT90aGlzLmQ9ajpobihzLCJsZWZ0Iik/dGhpcy5iPWo6aG4ocywiYm90dG9tIik/dGhpcy5hPWo6aG4ocywicmlnaHQiKSYmKHRoaXMuYz1qKX19Y2F0Y2goSCl7dGhyb3cgSD1XaShIKSxfdChILDEyNyk/KHI9SCxpdChuZXcgRm4oZzFlK3IpKSk6aXQoSCl9fX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJbdG9wPSIrdGhpcy5kKyIsbGVmdD0iK3RoaXMuYisiLGJvdHRvbT0iK3RoaXMuYSsiLHJpZ2h0PSIrdGhpcy5jKyJdIn0sbC5hPTAsbC5iPTAsbC5jPTAsbC5kPTAsRihXSSwiU3BhY2luZyIsMjA3KSxEKDE0MiwyMDcscDFlLE9DLENVdCx1d3QsTG50KTt2YXIgTjd0PUYoV0ksIkVsa01hcmdpbiIsMTQyKTtEKDY1MSwxNDIscDFlLG5ldCksRih0dSwiTE1hcmdpbiIsNjUxKSxEKDEwLDM5Mix7MzoxLDI5OToxLDEwOjEsMzkyOjEsOTQ6MSwxMzQ6MX0sWTApLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gZHNlKHRoaXMpfSxsLmk9ITE7dmFyIGwwPUYodHUsIkxOb2RlIiwxMCk7RCgyNjcsMjIsezM6MSwzNToxLDIyOjEsMjY3OjF9LFFDKTt2YXIgejEsa3MsTGwsdGEsT3MsSGMsZmx0PWpyKHR1LCJMTm9kZS9Ob2RlVHlwZSIsMjY3LEhyLHJvbixrSmUpLFpiZTtEKDExNiwyMDcsYjFlLEN4LE93LGt3dCk7dmFyIEI3dD1GKFdJLCJFbGtQYWRkaW5nIiwxMTYpO0QoNzY0LDExNixiMWUsSHB0KSxGKHR1LCJMUGFkZGluZyIsNzY0KSxEKDExLDM5Mix7MzoxLDI5OToxLDExOjEsMzkyOjEsOTQ6MSwxMzQ6MX0sTWMpLGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7cmV0dXJuIGU9bmV3IE1wLEdyKChlLmErPSJwXyIsZSksaXEodGhpcykpLHRoaXMuaSYmR3IoaGMoKGUuYSs9IlsiLGUpLHRoaXMuaSksIl0iKSx0aGlzLmUuYy5sZW5ndGg9PTEmJnRoaXMuZy5jLmxlbmd0aD09MCYmdShOZSh0aGlzLmUsMCksMTcpLmMhPXRoaXMmJihuPXUoTmUodGhpcy5lLDApLDE3KS5jLEdyKChlLmErPSIgPDwgIixlKSxpcShuKSksR3IoaGMoKGUuYSs9IlsiLGUpLG4uaSksIl0iKSksdGhpcy5lLmMubGVuZ3RoPT0wJiZ0aGlzLmcuYy5sZW5ndGg9PTEmJnUoTmUodGhpcy5nLDApLDE3KS5kIT10aGlzJiYocj11KE5lKHRoaXMuZywwKSwxNykuZCxHcigoZS5hKz0iID4+ICIsZSksaXEocikpLEdyKGhjKChlLmErPSJbIixlKSxyLmkpLCJdIikpLGUuYX0sbC5jPSEwLGwuZD0hMTt2YXIgUjd0LGo3dCwkN3Qsejd0LHE3dCxIN3QsSmJlPUYodHUsIkxQb3J0IiwxMSk7RCgzOTcsMSxyMCxRcyksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IFModGhpcy5hLmUpLG5ldyBxcyhlKX0sRih0dSwiTFBvcnQvMSIsMzk3KSxEKDEyOTAsMSxzYSxxcyksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSih0aGlzLmEpLDE3KS5jfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEdvKHRoaXMuYSl9LGwuUWI9ZnVuY3Rpb24oKXtMOSh0aGlzLmEpfSxGKHR1LCJMUG9ydC8xLzEiLDEyOTApLEQoMzU5LDEscjAsVHIpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBTKHRoaXMuYS5nKSxuZXcgUXQoZSl9LEYodHUsIkxQb3J0LzIiLDM1OSksRCg3NjIsMSxzYSxRdCksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHUoSih0aGlzLmEpLDE3KS5kfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEdvKHRoaXMuYSl9LGwuUWI9ZnVuY3Rpb24oKXtMOSh0aGlzLmEpfSxGKHR1LCJMUG9ydC8yLzEiLDc2MiksRCgxMjgzLDEscjAsY0d0KSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEwxKHRoaXMpfSxGKHR1LCJMUG9ydC9Db21iaW5lSXRlciIsMTI4MyksRCgyMDEsMSxzYSxMMSksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLlFiPWZ1bmN0aW9uKCl7SUh0KCl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdjkodGhpcyl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gR28odGhpcy5hKT9KKHRoaXMuYSk6Sih0aGlzLmIpfSxGKHR1LCJMUG9ydC9Db21iaW5lSXRlci8xIiwyMDEpLEQoMTI4NSwxLHhkLHlwKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBIS3QoZSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBqdSgpLHUoZSwxMSkuZS5jLmxlbmd0aCE9MH0sRih0dSwiTFBvcnQvbGFtYmRhJDAkVHlwZSIsMTI4NSksRCgxMjg0LDEseGQsbW0pLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZLdChlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGp1KCksdShlLDExKS5nLmMubGVuZ3RoIT0wfSxGKHR1LCJMUG9ydC9sYW1iZGEkMSRUeXBlIiwxMjg0KSxEKDEyODYsMSx4ZCxoSyksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4ganUoKSx1KGUsMTEpLmo9PSh2ZSgpLFBuKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGp1KCksdShlLDExKS5qPT0odmUoKSxQbil9LEYodHUsIkxQb3J0L2xhbWJkYSQyJFR5cGUiLDEyODYpLEQoMTI4NywxLHhkLEdiKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBqdSgpLHUoZSwxMSkuaj09KHZlKCksSG4pfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4ganUoKSx1KGUsMTEpLmo9PSh2ZSgpLEhuKX0sRih0dSwiTFBvcnQvbGFtYmRhJDMkVHlwZSIsMTI4NyksRCgxMjg4LDEseGQsZkspLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGp1KCksdShlLDExKS5qPT0odmUoKSxtcil9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBqdSgpLHUoZSwxMSkuaj09KHZlKCksbXIpfSxGKHR1LCJMUG9ydC9sYW1iZGEkNCRUeXBlIiwxMjg4KSxEKDEyODksMSx4ZCxkSyksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4ganUoKSx1KGUsMTEpLmo9PSh2ZSgpLEJuKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGp1KCksdShlLDExKS5qPT0odmUoKSxCbil9LEYodHUsIkxQb3J0L2xhbWJkYSQ1JFR5cGUiLDEyODkpLEQoMjksMjk5LHszOjEsMjA6MSwyOTk6MSwyOToxLDk0OjEsMTM0OjF9LFNoKSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJMXyIrUm8odGhpcy5iLmIsdGhpcywwKStlYih0aGlzLmEpfSxGKHR1LCJMYXllciIsMjkpLEQoMTM0MiwxLHt9LHlxdCksRihLZyx3MWUsMTM0MiksRCgxMzQ2LDEse30sWTUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIERvKHUoZSw4MikpfSxGKEtnLCJFbGtHcmFwaEltcG9ydGVyLzBtZXRob2RyZWYkY29ubmVjdGFibGVTaGFwZVRvTm9kZSRUeXBlIiwxMzQ2KSxEKDEzNDksMSx7fSxGVCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gRG8odShlLDgyKSl9LEYoS2csIkVsa0dyYXBoSW1wb3J0ZXIvMW1ldGhvZHJlZiRjb25uZWN0YWJsZVNoYXBlVG9Ob2RlJFR5cGUiLDEzNDkpLEQoMTM0MywxLFVuLGpuKSxsLnRkPWZ1bmN0aW9uKGUpe25jZSh0aGlzLmEsdShlLDExOCkpfSxGKEtnLHYxZSwxMzQzKSxEKDEzNDQsMSxVbixTciksbC50ZD1mdW5jdGlvbihlKXtuY2UodGhpcy5hLHUoZSwxMTgpKX0sRihLZyxtMWUsMTM0NCksRCgxMzQ1LDEse30sb04pLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbihabm4odShlLDc5KSksMTYpKX0sRihLZyx5MWUsMTM0NSksRCgxMzQ3LDEsbGksaXIpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEpYZSh0aGlzLmEsdShlLDMzKSl9LEYoS2cseDFlLDEzNDcpLEQoMTM0OCwxLHt9LFRrKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24oSm5uKHUoZSw3OSkpLDE2KSl9LEYoS2csIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDUkVHlwZSIsMTM0OCksRCgxMzUwLDEsbGksc3IpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRRZSh0aGlzLmEsdShlLDMzKSl9LEYoS2csIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDckVHlwZSIsMTM1MCksRCgxMzUxLDEsbGksZ0spLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGJybih1KGUsNzkpKX0sRihLZywiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkOCRUeXBlIiwxMzUxKSxEKDEyNzgsMSx7fSxXSik7dmFyIHQyZTtGKEtnLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyIiwxMjc4KSxEKDEyNzksMSxsaSxJYSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gcVplKHRoaXMuYSx1KGUsMTcpKX0sRihLZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMCRUeXBlIiwxMjc5KSxEKDEyODAsMSxVbiwkciksbC50ZD1mdW5jdGlvbihlKXtrTSgpLGxlKHRoaXMuYSx1KGUsMTcpKX0sRihLZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMSRUeXBlIiwxMjgwKSxEKDEyODEsMSxsaSxZaSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gU1plKHRoaXMuYSx1KGUsMTcpKX0sRihLZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMiRUeXBlIiwxMjgxKSxEKDEyODIsMSxVbixGbyksbC50ZD1mdW5jdGlvbihlKXtrTSgpLGxlKHRoaXMuYSx1KGUsMTcpKX0sRihLZywiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMyRUeXBlIiwxMjgyKSxEKDE0ODUsMSxvcyxDayksbC5wZj1mdW5jdGlvbihlLG4pe0xjbih1KGUsMzcpLG4pfSxGKCRuLCJDb21tZW50Tm9kZU1hcmdpbkNhbGN1bGF0b3IiLDE0ODUpLEQoMTQ4NiwxLHt9LHBLKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIkNvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvci9sYW1iZGEkMCRUeXBlIiwxNDg2KSxEKDE0ODcsMSxVbixiSyksbC50ZD1mdW5jdGlvbihlKXt1M24odShlLDEwKSl9LEYoJG4sIkNvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlIiwxNDg3KSxEKDE0ODgsMSxvcyx3SyksbC5wZj1mdW5jdGlvbihlLG4pe2t2bih1KGUsMzcpLG4pfSxGKCRuLCJDb21tZW50UG9zdHByb2Nlc3NvciIsMTQ4OCksRCgxNDg5LDEsb3MsdkspLGwucGY9ZnVuY3Rpb24oZSxuKXtMNW4odShlLDM3KSxuKX0sRigkbiwiQ29tbWVudFByZXByb2Nlc3NvciIsMTQ4OSksRCgxNDkwLDEsb3MsbUspLGwucGY9ZnVuY3Rpb24oZSxuKXtHMm4odShlLDM3KSxuKX0sRigkbiwiQ29uc3RyYWludHNQb3N0cHJvY2Vzc29yIiwxNDkwKSxEKDE0OTEsMSxvcyx5SyksbC5wZj1mdW5jdGlvbihlLG4pe1pjbih1KGUsMzcpLG4pfSxGKCRuLCJFZGdlQW5kTGF5ZXJDb25zdHJhaW50RWRnZVJldmVyc2VyIiwxNDkxKSxEKDE0OTIsMSxvcyx4SyksbC5wZj1mdW5jdGlvbihlLG4peyRobih1KGUsMzcpLG4pfSxGKCRuLCJFbmRMYWJlbFBvc3Rwcm9jZXNzb3IiLDE0OTIpLEQoMTQ5MywxLHt9LGtLKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIkVuZExhYmVsUG9zdHByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNDkzKSxEKDE0OTQsMSxsaSxFSyksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gUHJuKHUoZSwxMCkpfSxGKCRuLCJFbmRMYWJlbFBvc3Rwcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTQ5NCksRCgxNDk1LDEsVW4sVEspLGwudGQ9ZnVuY3Rpb24oZSl7U2RuKHUoZSwxMCkpfSxGKCRuLCJFbmRMYWJlbFBvc3Rwcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTQ5NSksRCgxNDk2LDEsb3MsQ0spLGwucGY9ZnVuY3Rpb24oZSxuKXticG4odShlLDM3KSxuKX0sRigkbiwiRW5kTGFiZWxQcmVwcm9jZXNzb3IiLDE0OTYpLEQoMTQ5NywxLHt9LENMKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIkVuZExhYmVsUHJlcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE0OTcpLEQoMTQ5OCwxLFVuLFBZdCksbC50ZD1mdW5jdGlvbihlKXtiWGUodGhpcy5hLHRoaXMuYix0aGlzLmMsdShlLDEwKSl9LGwuYT0wLGwuYj0wLGwuYz0hMSxGKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNDk4KSxEKDE0OTksMSxsaSxfSyksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVnQoUSh1KGUsNzApLChUZSgpLE9kKSkpPT09VnQoKE0xKCksRjcpKX0sRigkbiwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTQ5OSksRCgxNTAwLDEsVW4sUGMpLGwudGQ9ZnVuY3Rpb24oZSl7cmkodGhpcy5hLHUoZSw3MCkpfSxGKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlIiwxNTAwKSxEKDE1MDEsMSxsaSxTSyksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVnQoUSh1KGUsNzApLChUZSgpLE9kKSkpPT09VnQoKE0xKCksWnkpKX0sRigkbiwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDQkVHlwZSIsMTUwMSksRCgxNTAyLDEsVW4sWmEpLGwudGQ9ZnVuY3Rpb24oZSl7cmkodGhpcy5hLHUoZSw3MCkpfSxGKCRuLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkNSRUeXBlIiwxNTAyKSxEKDE1NTEsMSxvcyxVSiksbC5wZj1mdW5jdGlvbihlLG4pe1lsbih1KGUsMzcpLG4pfTt2YXIgZTJlO0YoJG4sIkVuZExhYmVsU29ydGVyIiwxNTUxKSxEKDE1NTIsMSxPaSxOVCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBUZm4odShlLDQ1NiksdShuLDQ1NikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoJG4sIkVuZExhYmVsU29ydGVyLzEiLDE1NTIpLEQoNDU2LDEsezQ1NjoxfSx0UXQpLEYoJG4sIkVuZExhYmVsU29ydGVyL0xhYmVsR3JvdXAiLDQ1NiksRCgxNTUzLDEse30sY04pLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEVNKCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxGKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMCRUeXBlIiwxNTUzKSxEKDE1NTQsMSxsaSxLNSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRU0oKSx1KGUsMTApLms9PShWbigpLE9zKX0sRigkbiwiRW5kTGFiZWxTb3J0ZXIvbGFtYmRhJDEkVHlwZSIsMTU1NCksRCgxNTU1LDEsVW4sQUspLGwudGQ9ZnVuY3Rpb24oZSl7U2duKHUoZSwxMCkpfSxGKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMiRUeXBlIiwxNTU1KSxEKDE1NTYsMSxsaSxMSyksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRU0oKSxWdChRKHUoZSw3MCksKFRlKCksT2QpKSk9PT1WdCgoTTEoKSxaeSkpfSxGKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMyRUeXBlIiwxNTU2KSxEKDE1NTcsMSxsaSxNSyksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRU0oKSxWdChRKHUoZSw3MCksKFRlKCksT2QpKSk9PT1WdCgoTTEoKSxGNykpfSxGKCRuLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkNCRUeXBlIiwxNTU3KSxEKDE1MDMsMSxvcyxESyksbC5wZj1mdW5jdGlvbihlLG4pe3kzbih0aGlzLHUoZSwzNykpfSxsLmI9MCxsLmM9MCxGKCRuLCJGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yIiwxNTAzKSxEKDE1MDQsMSx7fSxJSyksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxGKCRuLCJGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yL2xhbWJkYSQwJFR5cGUiLDE1MDQpLEQoMTUwNSwxLHt9LEJUKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgancobmV3IGFyKGxyKERzKHUoZSwxMCkpLmEuS2MoKSxuZXcgeikpKSl9LEYoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDEkVHlwZSIsMTUwNSksRCgxNTA2LDEsbGksX0wpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIUdhKHUoZSwxNykpfSxGKCRuLCJGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yL2xhbWJkYSQyJFR5cGUiLDE1MDYpLEQoMTUwNywxLGxpLHVOKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBVcyh1KGUsMTcpLChhZSgpLFIyKSl9LEYoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDMkVHlwZSIsMTUwNyksRCgxNTA4LDEsVW4sbWMpLGwudGQ9ZnVuY3Rpb24oZSl7T21uKHRoaXMuYSx1KGUsMTI4KSl9LEYoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDQkVHlwZSIsMTUwOCksRCgxNTA5LDEsVW4sQzMpLGwudGQ9ZnVuY3Rpb24oZSl7WXN0KHUoZSwxNykuYSl9LEYoJG4sIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDUkVHlwZSIsMTUwOSksRCg3OTIsMSxvcyxUYSksbC5wZj1mdW5jdGlvbihlLG4pe2Q0bih0aGlzLHUoZSwzNyksbil9LEYoJG4sIkdyYXBoVHJhbnNmb3JtZXIiLDc5MiksRCg1MTEsMjIsezM6MSwzNToxLDIyOjEsNTExOjF9LEZidCk7dmFyIGRsdCx5TyxuMmU9anIoJG4sIkdyYXBoVHJhbnNmb3JtZXIvTW9kZSIsNTExLEhyLG5pbixQdG4pLHIyZTtEKDE1MTAsMSxvcyxfMyksbC5wZj1mdW5jdGlvbihlLG4pe0h3bih1KGUsMzcpLG4pfSxGKCRuLCJIaWVyYXJjaGljYWxOb2RlUmVzaXppbmdQcm9jZXNzb3IiLDE1MTApLEQoMTUxMSwxLG9zLE9LKSxsLnBmPWZ1bmN0aW9uKGUsbil7VGNuKHUoZSwzNyksbil9LEYoJG4sIkhpZXJhcmNoaWNhbFBvcnRDb25zdHJhaW50UHJvY2Vzc29yIiwxNTExKSxEKDE1MTIsMSxPaSxvZiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBGZm4odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKCRuLCJIaWVyYXJjaGljYWxQb3J0Q29uc3RyYWludFByb2Nlc3Nvci9Ob2RlQ29tcGFyYXRvciIsMTUxMiksRCgxNTEzLDEsb3MsWDUpLGwucGY9ZnVuY3Rpb24oZSxuKXtWeW4odShlLDM3KSxuKX0sRigkbiwiSGllcmFyY2hpY2FsUG9ydER1bW15U2l6ZVByb2Nlc3NvciIsMTUxMyksRCgxNTE0LDEsb3MsUEspLGwucGY9ZnVuY3Rpb24oZSxuKXt6dm4odGhpcyx1KGUsMzcpLG4pfSxsLmE9MCxGKCRuLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIiLDE1MTQpLEQoMTUxNSwxLE9pLF9rKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFVRZSh1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoJG4sIkhpZXJhcmNoaWNhbFBvcnRPcnRob2dvbmFsRWRnZVJvdXRlci8xIiwxNTE1KSxEKDE1MTYsMSxPaSx6ZCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBhb24odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKCRuLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIvMiIsMTUxNiksRCgxNTE3LDEsb3MsRkspLGwucGY9ZnVuY3Rpb24oZSxuKXtmZ24odShlLDM3KSxuKX0sRigkbiwiSGllcmFyY2hpY2FsUG9ydFBvc2l0aW9uUHJvY2Vzc29yIiwxNTE3KSxEKDE1MTgsMSxvcyxZSiksbC5wZj1mdW5jdGlvbihlLG4pe294bih0aGlzLHUoZSwzNykpfSxsLmE9MCxsLmM9MDt2YXIgbVYseVY7RigkbiwiSGlnaERlZ3JlZU5vZGVMYXllcmluZ1Byb2Nlc3NvciIsMTUxOCksRCg1NzEsMSx7NTcxOjF9LE5LKSxsLmI9LTEsbC5kPS0xLEYoJG4sIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvSGlnaERlZ3JlZU5vZGVJbmZvcm1hdGlvbiIsNTcxKSxEKDE1MTksMSx7fSxCSyksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gS00oKSxqbyh1KGUsMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LEYoJG4sIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTUxOSksRCgxNTIwLDEse30sUkspLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEtNKCksRHModShlLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxGKCRuLCJIaWdoRGVncmVlTm9kZUxheWVyaW5nUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1MjApLEQoMTUyNiwxLG9zLFJUKSxsLnBmPWZ1bmN0aW9uKGUsbil7dnluKHRoaXMsdShlLDM3KSxuKX0sRigkbiwiSHlwZXJlZGdlRHVtbXlNZXJnZXIiLDE1MjYpLEQoNzkzLDEse30sQ3d0KSxsLmE9ITEsbC5iPSExLGwuYz0hMSxGKCRuLCJIeXBlcmVkZ2VEdW1teU1lcmdlci9NZXJnZVN0YXRlIiw3OTMpLEQoMTUyNywxLHt9LFNMKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQwJFR5cGUiLDE1MjcpLEQoMTUyOCwxLHt9LGxOKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDEwKS5qLDE2KSl9LEYoJG4sIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQxJFR5cGUiLDE1MjgpLEQoMTUyOSwxLFVuLEFMKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwxMSkucD0tMX0sRigkbiwiSHlwZXJlZGdlRHVtbXlNZXJnZXIvbGFtYmRhJDIkVHlwZSIsMTUyOSksRCgxNTMwLDEsb3MsUTUpLGwucGY9ZnVuY3Rpb24oZSxuKXtieW4odShlLDM3KSxuKX0sRigkbiwiSHlwZXJub2Rlc1Byb2Nlc3NvciIsMTUzMCksRCgxNTMxLDEsb3MsakspLGwucGY9ZnVuY3Rpb24oZSxuKXt3eW4odShlLDM3KSxuKX0sRigkbiwiSW5MYXllckNvbnN0cmFpbnRQcm9jZXNzb3IiLDE1MzEpLEQoMTUzMiwxLG9zLGhOKSxsLnBmPWZ1bmN0aW9uKGUsbil7V2NuKHUoZSwzNyksbil9LEYoJG4sIklubmVybW9zdE5vZGVNYXJnaW5DYWxjdWxhdG9yIiwxNTMyKSxEKDE1MzMsMSxvcyxmTiksbC5wZj1mdW5jdGlvbihlLG4pe1Q1bih0aGlzLHUoZSwzNykpfSxsLmE9Q3MsbC5iPUNzLGwuYz1hcyxsLmQ9YXM7dmFyIHU2bj1GKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIiLDE1MzMpO0QoMTUzNCwxLHt9LCRLKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTcpLmQuaX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LEYoJG4sIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMCRUeXBlIiwxNTM0KSxEKDE1MzUsMSx7fSxKYSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gS1FlKHRoaXMuYSx5ZShlKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxGKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDEkVHlwZSIsMTUzNSksRCgxNTM2LDEse30sekspLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxNykuYy5pfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sRigkbiwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQyJFR5cGUiLDE1MzYpLEQoMTUzNywxLHt9LG1sKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBYUWUodGhpcy5hLHllKGUpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LEYoJG4sIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMyRUeXBlIiwxNTM3KSxEKDE1MzgsMSx7fSxxZiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4galplKHRoaXMuYSx5ZShlKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxGKCRuLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDQkVHlwZSIsMTUzOCksRCgxNTM5LDEse30sQ3ApLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuICRaZSh0aGlzLmEseWUoZSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sRigkbiwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQ1JFR5cGUiLDE1MzkpLEQoNzcsMjIsezM6MSwzNToxLDIyOjEsNzc6MSwyMzQ6MX0sbXMpLGwuS2Y9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5nKXtjYXNlIDE1OnJldHVybiBuZXcgclE7Y2FzZSAyMjpyZXR1cm4gbmV3IGlRO2Nhc2UgNDc6cmV0dXJuIG5ldyBvUTtjYXNlIDI4OmNhc2UgMzU6cmV0dXJuIG5ldyBTMztjYXNlIDMyOnJldHVybiBuZXcgQ2s7Y2FzZSA0MjpyZXR1cm4gbmV3IHdLO2Nhc2UgMTpyZXR1cm4gbmV3IHZLO2Nhc2UgNDE6cmV0dXJuIG5ldyBtSztjYXNlIDU2OnJldHVybiBuZXcgVGEoKFg4KCkseU8pKTtjYXNlIDA6cmV0dXJuIG5ldyBUYSgoWDgoKSxkbHQpKTtjYXNlIDI6cmV0dXJuIG5ldyB5SztjYXNlIDU0OnJldHVybiBuZXcgeEs7Y2FzZSAzMzpyZXR1cm4gbmV3IENLO2Nhc2UgNTE6cmV0dXJuIG5ldyBESztjYXNlIDU1OnJldHVybiBuZXcgXzM7Y2FzZSAxMzpyZXR1cm4gbmV3IE9LO2Nhc2UgMzg6cmV0dXJuIG5ldyBYNTtjYXNlIDQ0OnJldHVybiBuZXcgUEs7Y2FzZSA0MDpyZXR1cm4gbmV3IEZLO2Nhc2UgOTpyZXR1cm4gbmV3IFlKO2Nhc2UgNDk6cmV0dXJuIG5ldyB5V3Q7Y2FzZSAzNzpyZXR1cm4gbmV3IFJUO2Nhc2UgNDM6cmV0dXJuIG5ldyBRNTtjYXNlIDI3OnJldHVybiBuZXcgaks7Y2FzZSAzMDpyZXR1cm4gbmV3IGhOO2Nhc2UgMzpyZXR1cm4gbmV3IGZOO2Nhc2UgMTg6cmV0dXJuIG5ldyBISztjYXNlIDI5OnJldHVybiBuZXcgVks7Y2FzZSA1OnJldHVybiBuZXcgekI7Y2FzZSA1MDpyZXR1cm4gbmV3IHFLO2Nhc2UgMzQ6cmV0dXJuIG5ldyBLSjtjYXNlIDM2OnJldHVybiBuZXcgU2s7Y2FzZSA1MjpyZXR1cm4gbmV3IFVKO2Nhc2UgMTE6cmV0dXJuIG5ldyB5bTtjYXNlIDc6cmV0dXJuIG5ldyBRSjtjYXNlIDM5OnJldHVybiBuZXcgQWs7Y2FzZSA0NTpyZXR1cm4gbmV3IFlLO2Nhc2UgMTY6cmV0dXJuIG5ldyBqVDtjYXNlIDEwOnJldHVybiBuZXcgc2Q7Y2FzZSA0ODpyZXR1cm4gbmV3IE1MO2Nhc2UgMjE6cmV0dXJuIG5ldyBMaztjYXNlIDIzOnJldHVybiBuZXcgZGV0KChldigpLEZTKSk7Y2FzZSA4OnJldHVybiBuZXcgYk47Y2FzZSAxMjpyZXR1cm4gbmV3IElMO2Nhc2UgNDpyZXR1cm4gbmV3IFhLO2Nhc2UgMTk6cmV0dXJuIG5ldyB3QztjYXNlIDE3OnJldHVybiBuZXcgZVg7Y2FzZSA1MzpyZXR1cm4gbmV3IG5YO2Nhc2UgNjpyZXR1cm4gbmV3IEVOO2Nhc2UgMjU6cmV0dXJuIG5ldyBUcXQ7Y2FzZSA0NjpyZXR1cm4gbmV3IGFYO2Nhc2UgMzE6cmV0dXJuIG5ldyBpWXQ7Y2FzZSAxNDpyZXR1cm4gbmV3IFBMO2Nhc2UgMjY6cmV0dXJuIG5ldyBsUTtjYXNlIDIwOnJldHVybiBuZXcgZ1g7Y2FzZSAyNDpyZXR1cm4gbmV3IGRldCgoZXYoKSxURykpO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKFlvdCsodGhpcy5mIT1udWxsP3RoaXMuZjoiIit0aGlzLmcpKSl9fTt2YXIgVjd0LEc3dCxVN3QsVzd0LFk3dCxLN3QsWDd0LFE3dCxaN3QsSjd0LGdTLHhWLGtWLHRUdCxlVHQsblR0LHJUdCxpVHQsc1R0LGFUdCxwUyxvVHQsY1R0LHVUdCxsVHQsaFR0LGdsdCxFVixUVixmVHQsQ1YsX1YsU1YsdTcsbDcsaDcsZFR0LEFWLExWLGdUdCxNVixEVixwVHQsYlR0LHdUdCx2VHQsSVYscGx0LHhPLE9WLFBWLEZWLE5WLG1UdCx5VHQseFR0LGtUdCxsNm49anIoJG4sVDZ0LDc3LEhyLFljZSxPdG4pLGkyZTtEKDE1NDAsMSxvcyxISyksbC5wZj1mdW5jdGlvbihlLG4pe181bih1KGUsMzcpLG4pfSxGKCRuLCJJbnZlcnRlZFBvcnRQcm9jZXNzb3IiLDE1NDApLEQoMTU0MSwxLG9zLFZLKSxsLnBmPWZ1bmN0aW9uKGUsbil7X21uKHUoZSwzNyksbil9LEYoJG4sIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IiLDE1NDEpLEQoMTU0MiwxLGxpLEdLKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShWbigpLE9zKX0sRigkbiwiTGFiZWxBbmROb2RlU2l6ZVByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTQyKSxEKDE1NDMsMSxsaSxxZCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEwKS5rPT0oVm4oKSxrcyl9LEYoJG4sIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTU0MyksRCgxNTQ0LDEsVW4sRll0KSxsLnRkPWZ1bmN0aW9uKGUpe3dYZSh0aGlzLmIsdGhpcy5hLHRoaXMuYyx1KGUsMTApKX0sbC5hPSExLGwuYz0hMSxGKCRuLCJMYWJlbEFuZE5vZGVTaXplUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE1NDQpLEQoMTU0NSwxLG9zLHpCKSxsLnBmPWZ1bmN0aW9uKGUsbil7WDRuKHUoZSwzNyksbil9O3ZhciBzMmU7RigkbiwiTGFiZWxEdW1teUluc2VydGVyIiwxNTQ1KSxEKDE1NDYsMSx4ZCxkdyksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gVnQoUSh1KGUsNzApLChUZSgpLE9kKSkpPT09VnQoKE0xKCksUDcpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFZ0KFEodShlLDcwKSwoVGUoKSxPZCkpKT09PVZ0KChNMSgpLFA3KSl9LEYoJG4sIkxhYmVsRHVtbXlJbnNlcnRlci8xIiwxNTQ2KSxEKDE1NDcsMSxvcyxxSyksbC5wZj1mdW5jdGlvbihlLG4pe1ozbih1KGUsMzcpLG4pfSxGKCRuLCJMYWJlbER1bW15UmVtb3ZlciIsMTU0NyksRCgxNTQ4LDEsbGksVUspLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGplKFJlKFEodShlLDcwKSwoVGUoKSxyaHQpKSkpfSxGKCRuLCJMYWJlbER1bW15UmVtb3Zlci9sYW1iZGEkMCRUeXBlIiwxNTQ4KSxEKDEzNTksMSxvcyxLSiksbC5wZj1mdW5jdGlvbihlLG4pe1M0bih0aGlzLHUoZSwzNyksbil9LGwuYT1udWxsO3ZhciBibHQ7RigkbiwiTGFiZWxEdW1teVN3aXRjaGVyIiwxMzU5KSxEKDI4NiwxLHsyODY6MX0sVXVlKSxsLmM9MCxsLmQ9bnVsbCxsLmY9MCxGKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvTGFiZWxEdW1teUluZm8iLDI4NiksRCgxMzYwLDEse30sZE4pLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHI2KCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxGKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDAkVHlwZSIsMTM2MCksRCgxMzYxLDEsbGksZ04pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHI2KCksdShlLDEwKS5rPT0oVm4oKSxMbCl9LEYoJG4sIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMSRUeXBlIiwxMzYxKSxEKDEzNjIsMSx7fSxfZyksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gQVplKHRoaXMuYSx1KGUsMTApKX0sRigkbiwiTGFiZWxEdW1teVN3aXRjaGVyL2xhbWJkYSQyJFR5cGUiLDEzNjIpLEQoMTM2MywxLFVuLGNkKSxsLnRkPWZ1bmN0aW9uKGUpe1Nubih0aGlzLmEsdShlLDI4NikpfSxGKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDMkVHlwZSIsMTM2MyksRCgxMzY0LDEsT2ksV0spLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZW5uKHUoZSwyODYpLHUobiwyODYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKCRuLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDQkVHlwZSIsMTM2NCksRCg3OTEsMSxvcyxTMyksbC5wZj1mdW5jdGlvbihlLG4pe1Jhbih1KGUsMzcpLG4pfSxGKCRuLCJMYWJlbE1hbmFnZW1lbnRQcm9jZXNzb3IiLDc5MSksRCgxNTQ5LDEsb3MsU2spLGwucGY9ZnVuY3Rpb24oZSxuKXt1dm4odShlLDM3KSxuKX0sRigkbiwiTGFiZWxTaWRlU2VsZWN0b3IiLDE1NDkpLEQoMTU1MCwxLGxpLExMKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBqZShSZShRKHUoZSw3MCksKFRlKCkscmh0KSkpKX0sRigkbiwiTGFiZWxTaWRlU2VsZWN0b3IvbGFtYmRhJDAkVHlwZSIsMTU1MCksRCgxNTU4LDEsb3MseW0pLGwucGY9ZnVuY3Rpb24oZSxuKXtHeW4odShlLDM3KSxuKX0sRigkbiwiTGF5ZXJDb25zdHJhaW50UG9zdHByb2Nlc3NvciIsMTU1OCksRCgxNTU5LDEsb3MsUUopLGwucGY9ZnVuY3Rpb24oZSxuKXtzMm4odShlLDM3KSxuKX07dmFyIEVUdDtGKCRuLCJMYXllckNvbnN0cmFpbnRQcmVwcm9jZXNzb3IiLDE1NTkpLEQoMzYwLDIyLHszOjEsMzU6MSwyMjoxLDM2MDoxfSx0aik7dmFyIGtPLEJWLFJWLHdsdCxhMmU9anIoJG4sIkxheWVyQ29uc3RyYWludFByZXByb2Nlc3Nvci9IaWRkZW5Ob2RlQ29ubmVjdGlvbnMiLDM2MCxIcixEc24sVEplKSxvMmU7RCgxNTYwLDEsb3MsQWspLGwucGY9ZnVuY3Rpb24oZSxuKXtLM24odShlLDM3KSxuKX0sRigkbiwiTGF5ZXJTaXplQW5kR3JhcGhIZWlnaHRDYWxjdWxhdG9yIiwxNTYwKSxEKDE1NjEsMSxvcyxZSyksbC5wZj1mdW5jdGlvbihlLG4pe1oybih1KGUsMzcpLG4pfSxGKCRuLCJMb25nRWRnZUpvaW5lciIsMTU2MSksRCgxNTYyLDEsb3MsalQpLGwucGY9ZnVuY3Rpb24oZSxuKXtNM24odShlLDM3KSxuKX0sRigkbiwiTG9uZ0VkZ2VTcGxpdHRlciIsMTU2MiksRCgxNTYzLDEsb3Msc2QpLGwucGY9ZnVuY3Rpb24oZSxuKXtNNG4odGhpcyx1KGUsMzcpLG4pfSxsLmQ9MCxsLmU9MCxsLmk9MCxsLmo9MCxsLms9MCxsLm49MCxGKCRuLCJOb2RlUHJvbW90aW9uIiwxNTYzKSxEKDE1NjQsMSx7fSxwTiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDQ2KSxObigpLCEwfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sRigkbiwiTm9kZVByb21vdGlvbi9sYW1iZGEkMCRUeXBlIiwxNTY0KSxEKDE1NjUsMSx7fSxfcCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gWW5uKHRoaXMuYSx1KGUsNDYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuYT0wLEYoJG4sIk5vZGVQcm9tb3Rpb24vbGFtYmRhJDEkVHlwZSIsMTU2NSksRCgxNTY2LDEse30sSGYpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEtubih0aGlzLmEsdShlLDQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLmE9MCxGKCRuLCJOb2RlUHJvbW90aW9uL2xhbWJkYSQyJFR5cGUiLDE1NjYpLEQoMTU2NywxLG9zLE1MKSxsLnBmPWZ1bmN0aW9uKGUsbil7dHhuKHUoZSwzNyksbil9LEYoJG4sIk5vcnRoU291dGhQb3J0UG9zdHByb2Nlc3NvciIsMTU2NyksRCgxNTY4LDEsb3MsTGspLGwucGY9ZnVuY3Rpb24oZSxuKXtqNW4odShlLDM3KSxuKX0sRigkbiwiTm9ydGhTb3V0aFBvcnRQcmVwcm9jZXNzb3IiLDE1NjgpLEQoMTU2OSwxLE9pLERMKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGd1bih1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoJG4sIk5vcnRoU291dGhQb3J0UHJlcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1NjkpLEQoMTU3MCwxLG9zLGJOKSxsLnBmPWZ1bmN0aW9uKGUsbil7bnluKHUoZSwzNyksbil9LEYoJG4sIlBhcnRpdGlvbk1pZHByb2Nlc3NvciIsMTU3MCksRCgxNTcxLDEsbGksS0spLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFVzKHUoZSwxMCksKFRlKCksVDcpKX0sRigkbiwiUGFydGl0aW9uTWlkcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1NzEpLEQoMTU3MiwxLFVuLG13KSxsLnRkPWZ1bmN0aW9uKGUpe3dybih0aGlzLmEsdShlLDEwKSl9LEYoJG4sIlBhcnRpdGlvbk1pZHByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNTcyKSxEKDE1NzMsMSxvcyxJTCksbC5wZj1mdW5jdGlvbihlLG4pe3Z3bih1KGUsMzcpLG4pfSxGKCRuLCJQYXJ0aXRpb25Qb3N0cHJvY2Vzc29yIiwxNTczKSxEKDE1NzQsMSxvcyxYSyksbC5wZj1mdW5jdGlvbihlLG4pe0Fibih1KGUsMzcpLG4pfSxGKCRuLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IiLDE1NzQpLEQoMTU3NSwxLGxpLFFLKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBVcyh1KGUsMTApLChUZSgpLFQ3KSl9LEYoJG4sIlBhcnRpdGlvblByZXByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTc1KSxEKDE1NzYsMSx7fSx3TiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IGp3KG5ldyBhcihscihEcyh1KGUsMTApKS5hLktjKCksbmV3IHopKSkpfSxGKCRuLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTU3NiksRCgxNTc3LDEsbGksWjUpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHhmbih1KGUsMTcpKX0sRigkbiwiUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE1NzcpLEQoMTU3OCwxLFVuLHZOKSxsLnRkPWZ1bmN0aW9uKGUpe1R1bih1KGUsMTcpKX0sRigkbiwiUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQzJFR5cGUiLDE1NzgpLEQoMTU3OSwxLG9zLHdDKSxsLnBmPWZ1bmN0aW9uKGUsbil7JG1uKHUoZSwzNyksbil9O3ZhciBUVHQsYzJlLHUyZSxsMmUsQ1R0LF9UdDtGKCRuLCJQb3J0TGlzdFNvcnRlciIsMTU3OSksRCgxNTgwLDEse30sSjUpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG9FKCksdShlLDExKS5lfSxGKCRuLCJQb3J0TGlzdFNvcnRlci9sYW1iZGEkMCRUeXBlIiwxNTgwKSxEKDE1ODEsMSx7fSxaSyksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gb0UoKSx1KGUsMTEpLmd9LEYoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQxJFR5cGUiLDE1ODEpLEQoMTU4MiwxLE9pLE9MKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFKdCh1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQyJFR5cGUiLDE1ODIpLEQoMTU4MywxLE9pLEpLKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEcxbih1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQzJFR5cGUiLDE1ODMpLEQoMTU4NCwxLE9pLHRYKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHBsZSh1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoJG4sIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQ0JFR5cGUiLDE1ODQpLEQoMTU4NSwxLG9zLGVYKSxsLnBmPWZ1bmN0aW9uKGUsbil7SmJuKHUoZSwzNyksbil9LEYoJG4sIlBvcnRTaWRlUHJvY2Vzc29yIiwxNTg1KSxEKDE1ODYsMSxvcyxuWCksbC5wZj1mdW5jdGlvbihlLG4pe3Rtbih1KGUsMzcpLG4pfSxGKCRuLCJSZXZlcnNlZEVkZ2VSZXN0b3JlciIsMTU4NiksRCgxNTkxLDEsb3MsVHF0KSxsLnBmPWZ1bmN0aW9uKGUsbil7TDFuKHRoaXMsdShlLDM3KSxuKX0sRigkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIiLDE1OTEpLEQoMTU5MiwxLHt9LG1OKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIlNlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQwJFR5cGUiLDE1OTIpLEQoMTU5MywxLGxpLHJYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShWbigpLE9zKX0sRigkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDEkVHlwZSIsMTU5MyksRCgxNTk0LDEsbGksaVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFVzKHUoZSwxMCksKGFlKCkseDcpKX0sRigkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDIkVHlwZSIsMTU5NCksRCgxNTk1LDEse30sc1gpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMTApLChhZSgpLHg3KSksNDAzKX0sRigkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDMkVHlwZSIsMTU5NSksRCgxNTk2LDEsVW4sTG0pLGwudGQ9ZnVuY3Rpb24oZSl7UmduKHRoaXMuYSx1KGUsNDAzKSl9LEYoJG4sIlNlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQ0JFR5cGUiLDE1OTYpLEQoNzk0LDEsVW4seU4pLGwudGQ9ZnVuY3Rpb24oZSl7SmduKHUoZSwxMDEpKX0sRigkbiwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDUkVHlwZSIsNzk0KSxEKDE1OTcsMSxvcyxhWCksbC5wZj1mdW5jdGlvbihlLG4pe1Jmbih1KGUsMzcpLG4pfSxGKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IiLDE1OTcpLEQoMTU5OCwxLHt9LG9YKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNTk4KSxEKDE1OTksMSxsaSxjWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEwKS5rPT0oVm4oKSxPcyl9LEYoJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNTk5KSxEKDE2MDAsMSxsaSx4TiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gVXModShlLDEwKSwoYWUoKSx4NykpfSxGKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTYwMCksRCgxNjAxLDEsVW4sdVgpLGwudGQ9ZnVuY3Rpb24oZSl7R2RuKHUoZSwxMCkpfSxGKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTYwMSksRCgxNjAyLDEse30sbFgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTAxKS5mLDEpKX0sRigkbiwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ0JFR5cGUiLDE2MDIpLEQoMTYwMywxLFVuLHh4KSxsLnRkPWZ1bmN0aW9uKGUpe1Bzbih0aGlzLmEsdShlLDQwOSkpfSxGKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDUkVHlwZSIsMTYwMyksRCgxNjA0LDEsbGksa04pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuISF1KGUsMTAxKS5pfSxGKCRuLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDYkVHlwZSIsMTYwNCksRCgxNjA1LDEsVW4sRjMpLGwudGQ9ZnVuY3Rpb24oZSl7dktlKHRoaXMuYSx1KGUsMTAxKSl9LEYoJG4sIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkNyRUeXBlIiwxNjA1KSxEKDE1ODcsMSxvcyxFTiksbC5wZj1mdW5jdGlvbihlLG4pe0Qybih1KGUsMzcpLG4pfSxGKCRuLCJTZWxmTG9vcFByZVByb2Nlc3NvciIsMTU4NyksRCgxNTg4LDEse30sVE4pLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTAxKS5mLDEpKX0sRigkbiwiU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTU4OCksRCgxNTg5LDEse30saFgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw0MDkpLmF9LEYoJG4sIlNlbGZMb29wUHJlUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1ODkpLEQoMTU5MCwxLFVuLGZYKSxsLnRkPWZ1bmN0aW9uKGUpe0VRZSh1KGUsMTcpKX0sRigkbiwiU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTU5MCksRCgxNjA2LDEsb3MsaVl0KSxsLnBmPWZ1bmN0aW9uKGUsbil7QWduKHRoaXMsdShlLDM3KSxuKX0sRigkbiwiU2VsZkxvb3BSb3V0ZXIiLDE2MDYpLEQoMTYwNywxLHt9LE1rKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYoJG4sIlNlbGZMb29wUm91dGVyL2xhbWJkYSQwJFR5cGUiLDE2MDcpLEQoMTYwOCwxLGxpLHR4KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShWbigpLE9zKX0sRigkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDEkVHlwZSIsMTYwOCksRCgxNjA5LDEsbGksJFQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIFVzKHUoZSwxMCksKGFlKCkseDcpKX0sRigkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDIkVHlwZSIsMTYwOSksRCgxNjEwLDEse30sZFgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMTApLChhZSgpLHg3KSksNDAzKX0sRigkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDMkVHlwZSIsMTYxMCksRCgxNjExLDEsVW4sdEd0KSxsLnRkPWZ1bmN0aW9uKGUpe2Nybih0aGlzLmEsdGhpcy5iLHUoZSw0MDMpKX0sRigkbiwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDQkVHlwZSIsMTYxMSksRCgxNjEyLDEsb3MsUEwpLGwucGY9ZnVuY3Rpb24oZSxuKXtRd24odShlLDM3KSxuKX0sRigkbiwiU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IiLDE2MTIpLEQoMTYxMywxLGxpLHpUKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTApLms9PShWbigpLE9zKX0sRigkbiwiU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTYxMyksRCgxNjE0LDEsbGksRkwpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHlLdCh1KGUsMTApKS5fYigoVGUoKSxVeSkpfSxGKCRuLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNjE0KSxEKDE2MTUsMSxPaSxDTiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBfY24odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKCRuLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNjE1KSxEKDE2MTYsMSx7fSxfTiksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBDcm4odShlLDEwKSx1KG4sMTApKX0sRigkbiwiU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTYxNiksRCgxNjE4LDEsb3MsZ1gpLGwucGY9ZnVuY3Rpb24oZSxuKXtVeW4odShlLDM3KSxuKX0sRigkbiwiU29ydEJ5SW5wdXRNb2RlbFByb2Nlc3NvciIsMTYxOCksRCgxNjE5LDEsbGkscFgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMSkuZy5jLmxlbmd0aCE9MH0sRigkbiwiU29ydEJ5SW5wdXRNb2RlbFByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjE5KSxEKDE2MjAsMSxVbixreCksbC50ZD1mdW5jdGlvbihlKXtpcG4odGhpcy5hLHUoZSwxMSkpfSxGKCRuLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2MjApLEQoMTY5Myw4MDMse30scG5lKSxsLk1lPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO3N3aXRjaCh0aGlzLmM9ZSx0aGlzLmEuZyl7Y2FzZSAyOm49bmV3IGhlLGxzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0aGlzLmMuYS5iLDE2KSksbmV3IE1OKSxuZXcgc0d0KHRoaXMsbikpLGhJKHRoaXMsbmV3IEFOKSx4dShuLG5ldyB3WCksbi5jPU50KFFuLERlLDEsMCw1LDEpLGxzKFJpKG5ldyBUbihudWxsLG5ldyBfbih0aGlzLmMuYS5iLDE2KSksbmV3IHZYKSxuZXcgTjMobikpLGhJKHRoaXMsbmV3IG1YKSx4dShuLG5ldyB5WCksbi5jPU50KFFuLERlLDEsMCw1LDEpLHI9UlV0KEFuZShsJChuZXcgVG4obnVsbCxuZXcgX24odGhpcy5jLmEuYiwxNikpLG5ldyBIZCh0aGlzKSkpLG5ldyB4WCksbHMobmV3IFRuKG51bGwsbmV3IF9uKHRoaXMuYy5hLmEsMTYpKSxuZXcgbkd0KHIsbikpLGhJKHRoaXMsbmV3IGtYKSx4dShuLG5ldyBiWCksbi5jPU50KFFuLERlLDEsMCw1LDEpO2JyZWFrO2Nhc2UgMzpzPW5ldyBoZSxoSSh0aGlzLG5ldyBTTiksbz1SVXQoQW5lKGwkKG5ldyBUbihudWxsLG5ldyBfbih0aGlzLmMuYS5iLDE2KSksbmV3IFNDKHRoaXMpKSksbmV3IExOKSxscyhSaShuZXcgVG4obnVsbCxuZXcgX24odGhpcy5jLmEuYiwxNikpLG5ldyBFWCksbmV3IGlHdChvLHMpKSxoSSh0aGlzLG5ldyBUWCkseHUocyxuZXcgQ1gpLHMuYz1OdChRbixEZSwxLDAsNSwxKTticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyB1cXQpfX0sbC5iPTAsRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24iLDE2OTMpLEQoMTY5NCwxLHhkLFNOKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBfdCh1KGUsNTcpLmcsMTQ1KX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KHUoZSw1NykuZywxNDUpfSxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMCRUeXBlIiwxNjk0KSxEKDE2OTUsMSx7fSxTQyksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gQnBuKHRoaXMuYSx1KGUsNTcpKX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEkVHlwZSIsMTY5NSksRCgxNzAzLDEsVnEsZUd0KSxsLlZkPWZ1bmN0aW9uKCl7aF8odGhpcy5hLHRoaXMuYiwtMSl9LGwuYj0wLEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxMCRUeXBlIiwxNzAzKSxEKDE3MDUsMSx4ZCxBTiksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QodShlLDU3KS5nLDE0NSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBfdCh1KGUsNTcpLmcsMTQ1KX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDExJFR5cGUiLDE3MDUpLEQoMTcwNiwxLFVuLHdYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwzNjUpLlZkKCl9LEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxMiRUeXBlIiwxNzA2KSxEKDE3MDcsMSxsaSx2WCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QodShlLDU3KS5nLDEwKX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEzJFR5cGUiLDE3MDcpLEQoMTcwOSwxLFVuLE4zKSxsLnRkPWZ1bmN0aW9uKGUpe2xobih0aGlzLmEsdShlLDU3KSl9LEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNCRUeXBlIiwxNzA5KSxEKDE3MDgsMSxWcSx1R3QpLGwuVmQ9ZnVuY3Rpb24oKXtoXyh0aGlzLmIsdGhpcy5hLC0xKX0sbC5hPTAsRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE1JFR5cGUiLDE3MDgpLEQoMTcxMCwxLHhkLG1YKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiBfdCh1KGUsNTcpLmcsMTApfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QodShlLDU3KS5nLDEwKX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE2JFR5cGUiLDE3MTApLEQoMTcxMSwxLFVuLHlYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwzNjUpLlZkKCl9LEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNyRUeXBlIiwxNzExKSxEKDE3MTIsMSx7fSxIZCksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gUnBuKHRoaXMuYSx1KGUsNTcpKX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE4JFR5cGUiLDE3MTIpLEQoMTcxMywxLHt9LHhYKSxsLkRlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxOSRUeXBlIiwxNzEzKSxEKDE2OTYsMSx7fSxMTiksbC5EZT1mdW5jdGlvbigpe3JldHVybiAwfSxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMiRUeXBlIiwxNjk2KSxEKDE3MTUsMSxVbixuR3QpLGwudGQ9ZnVuY3Rpb24oZSl7R2VuKHRoaXMuYSx0aGlzLmIsdShlLDMwNykpfSxsLmE9MCxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjAkVHlwZSIsMTcxNSksRCgxNzE0LDEsVnEsckd0KSxsLlZkPWZ1bmN0aW9uKCl7Q2NlKHRoaXMuYSx0aGlzLmIsLTEpfSxsLmI9MCxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjEkVHlwZSIsMTcxNCksRCgxNzE2LDEseGQsa1gpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1NyksITB9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsNTcpLCEwfSxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjIkVHlwZSIsMTcxNiksRCgxNzE3LDEsVW4sYlgpLGwudGQ9ZnVuY3Rpb24oZSl7dShlLDM2NSkuVmQoKX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIzJFR5cGUiLDE3MTcpLEQoMTY5NywxLGxpLEVYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBfdCh1KGUsNTcpLmcsMTApfSxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMyRUeXBlIiwxNjk3KSxEKDE2OTksMSxVbixpR3QpLGwudGQ9ZnVuY3Rpb24oZSl7VWVuKHRoaXMuYSx0aGlzLmIsdShlLDU3KSl9LGwuYT0wLEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ0JFR5cGUiLDE2OTkpLEQoMTY5OCwxLFZxLGxHdCksbC5WZD1mdW5jdGlvbigpe2hfKHRoaXMuYix0aGlzLmEsLTEpfSxsLmE9MCxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkNSRUeXBlIiwxNjk4KSxEKDE3MDAsMSx4ZCxUWCksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDU3KSwhMH0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSw1NyksITB9LEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ2JFR5cGUiLDE3MDApLEQoMTcwMSwxLFVuLENYKSxsLnRkPWZ1bmN0aW9uKGUpe3UoZSwzNjUpLlZkKCl9LEYoX3MsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ3JFR5cGUiLDE3MDEpLEQoMTcwMiwxLGxpLE1OKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBfdCh1KGUsNTcpLmcsMTQ1KX0sRihfcywiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDgkVHlwZSIsMTcwMiksRCgxNzA0LDEsVW4sc0d0KSxsLnRkPWZ1bmN0aW9uKGUpe0hvbih0aGlzLmEsdGhpcy5iLHUoZSw1NykpfSxGKF9zLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkOSRUeXBlIiwxNzA0KSxEKDE1MjEsMSxvcyx5V3QpLGwucGY9ZnVuY3Rpb24oZSxuKXtCM24odGhpcyx1KGUsMzcpLG4pfTt2YXIgaDJlO0YoX3MsIkhvcml6b250YWxHcmFwaENvbXBhY3RvciIsMTUyMSksRCgxNTIyLDEse30seTEpLGwuT2U9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG87cmV0dXJuIHFtdChlLG4pfHwocj10NChlKSxzPXQ0KG4pLHImJnIuaz09KFZuKCksa3MpfHxzJiZzLms9PShWbigpLGtzKSk/MDoobz11KFEodGhpcy5hLmEsKGFlKCksUTQpKSwzMDQpLFFRZShvLHI/ci5rOihWbigpLHRhKSxzP3MuazooVm4oKSx0YSkpKX0sbC5QZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbztyZXR1cm4gcW10KGUsbik/MToocj10NChlKSxzPXQ0KG4pLG89dShRKHRoaXMuYS5hLChhZSgpLFE0KSksMzA0KSxCMnQobyxyP3IuazooVm4oKSx0YSkscz9zLms6KFZuKCksdGEpKSl9LEYoX3MsIkhvcml6b250YWxHcmFwaENvbXBhY3Rvci8xIiwxNTIyKSxEKDE1MjMsMSx7fSxxVCksbC5OZT1mdW5jdGlvbihlLG4pe3JldHVybiBHQygpLGUuYS5pPT0wfSxGKF9zLCJIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvbGFtYmRhJDAkVHlwZSIsMTUyMyksRCgxNTI0LDEse30sVmQpLGwuTmU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geHJuKHRoaXMuYSxlLG4pfSxGKF9zLCJIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvbGFtYmRhJDEkVHlwZSIsMTUyNCksRCgxNjY0LDEse30sdGVlKTt2YXIgZjJlLGQyZTtGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyIiwxNjY0KSxEKDE2NzIsMSxsaSxfWCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbH0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci8wbWV0aG9kcmVmJG5vbk51bGwkVHlwZSIsMTY3MiksRCgxNjY1LDEse30sU1gpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCksJG8oUSh1KHUoZSw1NykuZywxMCksKGFlKCksX2kpKSl9LEYoX3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDAkVHlwZSIsMTY2NSksRCgxNjY2LDEse30sRE4pLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCkscmllKHUodShlLDU3KS5nLDE0NSkpfSxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxJFR5cGUiLDE2NjYpLEQoMTY3NSwxLGxpLEFYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBkZigpLF90KHUoZSw1NykuZywxMCl9LEYoX3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEwJFR5cGUiLDE2NzUpLEQoMTY3NiwxLFVuLExYKSxsLnRkPWZ1bmN0aW9uKGUpe3lybih1KGUsNTcpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTEkVHlwZSIsMTY3NiksRCgxNjc3LDEsbGksTVgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCksX3QodShlLDU3KS5nLDE0NSl9LEYoX3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEyJFR5cGUiLDE2NzcpLEQoMTY4MSwxLFVuLERYKSxsLnRkPWZ1bmN0aW9uKGUpe0Nsbih1KGUsNTcpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTMkVHlwZSIsMTY4MSksRCgxNjc4LDEsVW4sQUMpLGwudGQ9ZnVuY3Rpb24oZSl7S1hlKHRoaXMuYSx1KGUsOCkpfSxsLmE9MCxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNCRUeXBlIiwxNjc4KSxEKDE2NzksMSxVbixZYiksbC50ZD1mdW5jdGlvbihlKXtRWGUodGhpcy5hLHUoZSwxMTApKX0sbC5hPTAsRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTUkVHlwZSIsMTY3OSksRCgxNjgwLDEsVW4sZFIpLGwudGQ9ZnVuY3Rpb24oZSl7WFhlKHRoaXMuYSx1KGUsOCkpfSxsLmE9MCxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNiRUeXBlIiwxNjgwKSxEKDE2ODIsMSx7fSxJWCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gZGYoKSxuZXcgVG4obnVsbCxuZXcgancobmV3IGFyKGxyKERzKHUoZSwxMCkpLmEuS2MoKSxuZXcgeikpKSl9LEYoX3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDE3JFR5cGUiLDE2ODIpLEQoMTY4MywxLGxpLE9YKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBkZigpLEdhKHUoZSwxNykpfSxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxOCRUeXBlIiwxNjgzKSxEKDE2ODQsMSxVbixIdHQpLGwudGQ9ZnVuY3Rpb24oZSl7RG9uKHRoaXMuYSx1KGUsMTcpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTkkVHlwZSIsMTY4NCksRCgxNjY4LDEsVW4sVnR0KSxsLnRkPWZ1bmN0aW9uKGUpe2hzbih0aGlzLmEsdShlLDE0NSkpfSxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyJFR5cGUiLDE2NjgpLEQoMTY4NSwxLHt9LElOKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBkZigpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjAkVHlwZSIsMTY4NSksRCgxNjg2LDEse30sUFgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCksbmV3IFRuKG51bGwsbmV3IGp3KG5ldyBhcihscihEcyh1KGUsMTApKS5hLktjKCksbmV3IHopKSkpfSxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMSRUeXBlIiwxNjg2KSxEKDE2ODcsMSx7fSxPTiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gZGYoKSx1KFEodShlLDE3KSwoYWUoKSxSMikpLDE1KX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjIkVHlwZSIsMTY4NyksRCgxNjg4LDEsbGksRlgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEpRZSh1KGUsMTUpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjMkVHlwZSIsMTY4OCksRCgxNjg5LDEsVW4sR3R0KSxsLnRkPWZ1bmN0aW9uKGUpe0Fwbih0aGlzLmEsdShlLDE1KSl9LEYoX3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDI0JFR5cGUiLDE2ODkpLEQoMTY2NywxLFVuLGFHdCksbC50ZD1mdW5jdGlvbihlKXtac24odGhpcy5hLHRoaXMuYix1KGUsMTQ1KSl9LEYoX3MsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDMkVHlwZSIsMTY2NyksRCgxNjY5LDEse30sTlgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGRmKCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ0JFR5cGUiLDE2NjkpLEQoMTY3MCwxLHt9LEJYKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBkZigpLG5ldyBUbihudWxsLG5ldyBqdyhuZXcgYXIobHIoRHModShlLDEwKSkuYS5LYygpLG5ldyB6KSkpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkNSRUeXBlIiwxNjcwKSxEKDE2NzEsMSx7fSxIVCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gZGYoKSx1KFEodShlLDE3KSwoYWUoKSxSMikpLDE1KX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkNiRUeXBlIiwxNjcxKSxEKDE2NzMsMSxVbixVdHQpLGwudGQ9ZnVuY3Rpb24oZSl7YWJuKHRoaXMuYSx1KGUsMTUpKX0sRihfcywiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkOCRUeXBlIiwxNjczKSxEKDE2NzQsMSxVbixvR3QpLGwudGQ9ZnVuY3Rpb24oZSl7bVFlKHRoaXMuYSx0aGlzLmIsdShlLDE0NSkpfSxGKF9zLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ5JFR5cGUiLDE2NzQpLEQoMTY2MywxLHt9LFJYKSxsLkxlPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGg7Zm9yKHRoaXMuYT1lLHRoaXMuZD1uZXcgZWV0LHRoaXMuYz1OdChhN3QsRGUsMTIxLHRoaXMuYS5hLmEuYy5sZW5ndGgsMCwxKSx0aGlzLmI9MCxyPW5ldyBTKHRoaXMuYS5hLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49dShKKHIpLDMwNyksbi5kPXRoaXMuYixoPUZ3KHhNKG5ldyBYYixuKSx0aGlzLmQpLHRoaXMuY1t0aGlzLmJdPWgsKyt0aGlzLmI7Zm9yKEg0bih0aGlzKSxWNW4odGhpcyksY3duKHRoaXMpLG1hdChNbnQodGhpcy5kKSxuZXcgcjgpLG89bmV3IFModGhpcy5hLmEuYik7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksNTcpLHMuZC5jPXRoaXMuY1tzLmEuZF0uZStzLmIuYX0sbC5iPTAsRihfcywiTmV0d29ya1NpbXBsZXhDb21wYWN0aW9uIiwxNjYzKSxEKDE0NSwxLHszNToxLDE0NToxfSxUXyksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gRm9uKHRoaXMsdShlLDE0NSkpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHJpZSh0aGlzKX0sRihfcywiVmVydGljYWxTZWdtZW50IiwxNDUpLEQoODI3LDEse30sUzR0KSxsLmM9MCxsLmU9MCxsLmk9MCxGKHpfLCJCZXR3ZWVuTGF5ZXJFZGdlVHdvTm9kZUNyb3NzaW5nc0NvdW50ZXIiLDgyNyksRCg2NjMsMSx7NjYzOjF9LERuZSksbC5JYj1mdW5jdGlvbigpe3JldHVybiJBZGphY2VuY3lMaXN0IFtub2RlPSIrdGhpcy5kKyIsIGFkamFjZW5jaWVzPSAiK3RoaXMuYSsiXSJ9LGwuYj0wLGwuYz0wLGwuZj0wLEYoel8sIkJldHdlZW5MYXllckVkZ2VUd29Ob2RlQ3Jvc3NpbmdzQ291bnRlci9BZGphY2VuY3lMaXN0Iiw2NjMpLEQoMjg3LDEsezM1OjEsMjg3OjF9LEFXdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4ga2VuKHRoaXMsdShlLDI4NykpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkFkamFjZW5jeSBbcG9zaXRpb249Iit0aGlzLmMrIiwgY2FyZGluYWxpdHk9Iit0aGlzLmErIiwgY3VycmVudENhcmRpbmFsaXR5PSIrdGhpcy5iKyJdIn0sbC5hPTAsbC5iPTAsbC5jPTAsRih6XywiQmV0d2VlbkxheWVyRWRnZVR3b05vZGVDcm9zc2luZ3NDb3VudGVyL0FkamFjZW5jeUxpc3QvQWRqYWNlbmN5IiwyODcpLEQoMTkyOSwxLHt9LEphZSksbC5iPTAsbC5lPSExLEYoel8sIkNyb3NzaW5nTWF0cml4RmlsbGVyIiwxOTI5KTt2YXIgZzJlPUtpKGMwLCJJSW5pdGlhbGl6YWJsZSIpO0QoMTgwNCwxLFlJLGdHdCksbC5OZj1mdW5jdGlvbihlLG4scixzLG8saCl7fSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt9LGwuTGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jIT0oZXYoKSxGUyl9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLmU9TnQoQ3IsWHIsMjUsdGhpcy5kLDE1LDEpfSxsLk9mPWZ1bmN0aW9uKGUsbil7bltlXVswXS5jLnA9ZX0sbC5RZj1mdW5jdGlvbihlLG4scixzKXsrK3RoaXMuZH0sbC5SZj1mdW5jdGlvbigpe3JldHVybiEwfSxsLlNmPWZ1bmN0aW9uKGUsbixyLHMpe3JldHVybiBYcmUodGhpcyxlLG4sciksbGFuKHRoaXMsbil9LGwuVGY9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj1XS2UobixlLmxlbmd0aCksWHJlKHRoaXMsZSxyLG4pLGJyZSh0aGlzLHIpfSxsLmQ9MCxGKHpfLCJHcmVlZHlTd2l0Y2hIZXVyaXN0aWMiLDE4MDQpLEQoMTkzMCwxLHt9LFNLdCksbC5iPTAsbC5kPTAsRih6XywiTm9ydGhTb3V0aEVkZ2VOZWlnaGJvdXJpbmdOb2RlQ3Jvc3NpbmdzQ291bnRlciIsMTkzMCksRCgxOTE3LDEse30sTXVlKSxsLmE9ITEsRih6XywiU3dpdGNoRGVjaWRlciIsMTkxNyksRCgxMDEsMSx7MTAxOjF9LG9vZSksbC5hPW51bGwsbC5jPW51bGwsbC5pPW51bGwsRihTNiwiU2VsZkh5cGVyTG9vcCIsMTAxKSxEKDE5MTYsMSx7fSxhc2UpLGwuYz0wLGwuZT0wLEYoUzYsIlNlbGZIeXBlckxvb3BMYWJlbHMiLDE5MTYpLEQoNDExLDIyLHszOjEsMzU6MSwyMjoxLDQxMToxfSxlaik7dmFyIE82LGY3LGQ3LHZsdCxwMmU9anIoUzYsIlNlbGZIeXBlckxvb3BMYWJlbHMvQWxpZ25tZW50Iiw0MTEsSHIsSXNuLENKZSksYjJlO0QoNDA5LDEsezQwOToxfSxHSnQpLEYoUzYsIlNlbGZMb29wRWRnZSIsNDA5KSxEKDQwMywxLHs0MDM6MX0sWmllKSxsLmE9ITEsRihTNiwiU2VsZkxvb3BIb2xkZXIiLDQwMyksRCgxNzI0LDEsbGksJE4pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEdhKHUoZSwxNykpfSxGKFM2LCJTZWxmTG9vcEhvbGRlci9sYW1iZGEkMCRUeXBlIiwxNzI0KSxEKDExMywxLHsxMTM6MX0sb3NlKSxsLmE9ITEsbC5jPSExLEYoUzYsIlNlbGZMb29wUG9ydCIsMTEzKSxEKDE3OTIsMSxsaSx6TiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gR2EodShlLDE3KSl9LEYoUzYsIlNlbGZMb29wUG9ydC9sYW1iZGEkMCRUeXBlIiwxNzkyKSxEKDM2MywyMix7MzoxLDM1OjEsMjI6MSwzNjM6MX0sU00pO3ZhciBqViwkVix6VixxVixIVix3MmU9anIoUzYsIlNlbGZMb29wVHlwZSIsMzYzLEhyLEVhbixNSmUpLHYyZTtEKDE3MzIsMSx7fSx0dHQpO3ZhciBtMmUseTJlLHgyZSxrMmU7RihHbCwiUG9ydFJlc3RvcmVyIiwxNzMyKSxEKDM2MSwyMix7MzoxLDM1OjEsMjI6MSwzNjE6MX0sT2V0KTt2YXIgTXYscGIsRHYsbWx0PWpyKEdsLCJQb3J0UmVzdG9yZXIvUG9ydFNpZGVBcmVhIiwzNjEsSHIsUGluLERKZSksRTJlO0QoMTczMywxLHt9LEEzKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuYigpLHUoZSwxNSkuT2MoKX0sRihHbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQwJFR5cGUiLDE3MzMpLEQoMTczNCwxLFVuLHpYKSxsLnRkPWZ1bmN0aW9uKGUpe25iKCksdShlLDExMykuYz0hMX0sRihHbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQxJFR5cGUiLDE3MzQpLEQoMTc0MywxLGxpLHFYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBuYigpLHUoZSwxMSkuaj09KHZlKCksQm4pfSxGKEdsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDEwJFR5cGUiLDE3NDMpLEQoMTc0NCwxLHt9LFVUKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuYigpLHUoZSwxMTMpLmR9LEYoR2wsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMTEkVHlwZSIsMTc0NCksRCgxNzQ1LDEsVW4sV3R0KSxsLnRkPWZ1bmN0aW9uKGUpe1pLZSh0aGlzLmEsdShlLDExKSl9LEYoR2wsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMTIkVHlwZSIsMTc0NSksRCgxNzM1LDEsVW4sWXR0KSxsLnRkPWZ1bmN0aW9uKGUpe2laZSh0aGlzLmEsdShlLDEwMSkpfSxGKEdsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDIkVHlwZSIsMTczNSksRCgxNzM2LDEsT2ksSFgpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaWNuKHUoZSwxMTMpLHUobiwxMTMpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKEdsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDMkVHlwZSIsMTczNiksRCgxNzM3LDEsbGksVlgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5iKCksdShlLDExMykuY30sRihHbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ0JFR5cGUiLDE3MzcpLEQoMTczOCwxLGxpLGpYKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBHY24odShlLDExKSl9LEYoR2wsIlBvcnRSZXN0b3Jlci9sYW1iZGEkNSRUeXBlIiwxNzM4KSxEKDE3MzksMSxsaSxWVCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gbmIoKSx1KGUsMTEpLmo9PSh2ZSgpLFBuKX0sRihHbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ2JFR5cGUiLDE3MzkpLEQoMTc0MCwxLGxpLFBOKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBuYigpLHUoZSwxMSkuaj09KHZlKCksSG4pfSxGKEdsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDckVHlwZSIsMTc0MCksRCgxNzQxLDEsbGksRk4pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIE9zbih1KGUsMTEpKX0sRihHbCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ4JFR5cGUiLDE3NDEpLEQoMTc0MiwxLGxpLE5OKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBuYigpLHUoZSwxMSkuaj09KHZlKCksbXIpfSxGKEdsLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDkkVHlwZSIsMTc0MiksRCgyNzAsMjIsezM6MSwzNToxLDIyOjEsMjcwOjF9LEd4KTt2YXIgeWx0LHhsdCxrbHQsRWx0LFRsdCxDbHQsX2x0LFNsdCxTVHQ9anIoR2wsIlBvcnRTaWRlQXNzaWduZXIvVGFyZ2V0IiwyNzAsSHIsWG9uLF9KZSksVDJlO0QoMTcyNSwxLHt9LEJOKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBSaShuZXcgVG4obnVsbCxuZXcgX24odShlLDEwMSkuaiwxNikpLG5ldyBHVCl9LEYoR2wsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDEkVHlwZSIsMTcyNSksRCgxNzI2LDEse30sZ3cpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMTMpLmR9LEYoR2wsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDIkVHlwZSIsMTcyNiksRCgxNzI3LDEsVW4sUk4pLGwudGQ9ZnVuY3Rpb24oZSl7QnModShlLDExKSwodmUoKSxQbikpfSxGKEdsLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQzJFR5cGUiLDE3MjcpLEQoMTcyOCwxLHt9LGpOKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTEzKS5kfSxGKEdsLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ0JFR5cGUiLDE3MjgpLEQoMTcyOSwxLFVuLEt0dCksbC50ZD1mdW5jdGlvbihlKXtpS2UodGhpcy5hLHUoZSwxMSkpfSxGKEdsLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ1JFR5cGUiLDE3MjkpLEQoMTczMCwxLE9pLCRYKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFBubih1KGUsMTAxKSx1KG4sMTAxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihHbCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkNiRUeXBlIiwxNzMwKSxEKDE3MzEsMSxPaSxleCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBvZW4odShlLDExMyksdShuLDExMykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoR2wsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDckVHlwZSIsMTczMSksRCg4MDUsMSxsaSxHVCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDExMykuY30sRihHbCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkOCRUeXBlIiw4MDUpLEQoMjAwOSwxLHt9KSxGKGNiLCJBYnN0cmFjdFNlbGZMb29wUm91dGVyIiwyMDA5KSxEKDE3NTAsMSxPaSxHWCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBRWmUodShlLDEwMSksdShuLDEwMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoY2IsWWZlLDE3NTApLEQoMTc1MSwxLE9pLFVYKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFhaZSh1KGUsMTAxKSx1KG4sMTAxKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihjYixLZmUsMTc1MSksRCgxNzkzLDIwMDkse30sV1gpLGwuVWY9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByfSxGKGNiLCJPcnRob2dvbmFsU2VsZkxvb3BSb3V0ZXIiLDE3OTMpLEQoMTc5NSwxLFVuLGhHdCksbC50ZD1mdW5jdGlvbihlKXtGM3QodGhpcy5iLHRoaXMuYSx1KGUsOCkpfSxGKGNiLCJPcnRob2dvbmFsU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDAkVHlwZSIsMTc5NSksRCgxNzk0LDE3OTMse30sWVgpLGwuVWY9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87cmV0dXJuIHM9ZS5jLmQsbTgociwwLExpKG5jKHMubikscy5hKSksbz1lLmQuZCxyaShyLExpKG5jKG8ubiksby5hKSksUW1uKHIpfSxGKGNiLCJQb2x5bGluZVNlbGZMb29wUm91dGVyIiwxNzk0KSxEKDE3NDYsMSx7fSxYSiksbC5hPW51bGw7dmFyIEg0O0YoY2IsIlJvdXRpbmdEaXJlY3RvciIsMTc0NiksRCgxNzQ3LDEsT2ksS1gpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbGVuKHUoZSwxMTMpLHUobiwxMTMpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGNiLCJSb3V0aW5nRGlyZWN0b3IvbGFtYmRhJDAkVHlwZSIsMTc0NyksRCgxNzQ4LDEse30sWFgpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuICRSKCksdShlLDEwMSkuan0sRihjYiwiUm91dGluZ0RpcmVjdG9yL2xhbWJkYSQxJFR5cGUiLDE3NDgpLEQoMTc0OSwxLFVuLFFYKSxsLnRkPWZ1bmN0aW9uKGUpeyRSKCksdShlLDE1KS5hZChINCl9LEYoY2IsIlJvdXRpbmdEaXJlY3Rvci9sYW1iZGEkMiRUeXBlIiwxNzQ5KSxEKDE3NTIsMSx7fSxaWCksRihjYiwiUm91dGluZ1Nsb3RBc3NpZ25lciIsMTc1MiksRCgxNzUzLDEsbGksdDgpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIExYZSh0aGlzLmEsdShlLDEwMSkpfSxGKGNiLCJSb3V0aW5nU2xvdEFzc2lnbmVyL2xhbWJkYSQwJFR5cGUiLDE3NTMpLEQoMTc1NCwxLE9pLGxNKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIE9lbih0aGlzLmEsdShlLDEwMSksdShuLDEwMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoY2IsIlJvdXRpbmdTbG90QXNzaWduZXIvbGFtYmRhJDEkVHlwZSIsMTc1NCksRCgxNzk2LDE3OTMse30sSlgpLGwuVWY9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkO3JldHVybiBzPVh0KHllKFd6KGUuYi5nLmIsKFRlKCksVjYpKSkpLGQ9bmV3IE1XdChsdChjdChXcywxKSxlZSw4LDAsWyhoPWUuYy5kLExpKG5ldyB4byhoLm4pLGguYSkpXSkpLEkybihlLG4scixkLHMpLHJpKGQsKG89ZS5kLmQsTGkobmV3IHhvKG8ubiksby5hKSkpLGtzZShuZXcgZnh0KGQpKX0sRihjYiwiU3BsaW5lU2VsZkxvb3BSb3V0ZXIiLDE3OTYpLEQoNTc4LDEsT2ksVG5lLFhZdCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBZaGUodGhpcyx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYocV8sIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvciIsNTc4KSxEKDE3NTUsMSxsaSxOTCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDExKS5lLmMubGVuZ3RoIT0wfSxGKHFfLCJNb2RlbE9yZGVyTm9kZUNvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTc1NSksRCgxNzU2LDEse30scU4pLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoTmUodShlLDExKS5lLDApLDE3KS5jfSxGKHFfLCJNb2RlbE9yZGVyTm9kZUNvbXBhcmF0b3IvbGFtYmRhJDEkVHlwZSIsMTc1NiksRCgxNzU3LDEsbGksdFEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMSkuZS5jLmxlbmd0aCE9MH0sRihxXywiTW9kZWxPcmRlck5vZGVDb21wYXJhdG9yL2xhbWJkYSQyJFR5cGUiLDE3NTcpLEQoMTc1OCwxLHt9LGVRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KE5lKHUoZSwxMSkuZSwwKSwxNykuY30sRihxXywiTW9kZWxPcmRlck5vZGVDb21wYXJhdG9yL2xhbWJkYSQzJFR5cGUiLDE3NTgpLEQoMTc1OSwxLGxpLG5RKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTEpLmUuYy5sZW5ndGghPTB9LEYocV8sIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkNCRUeXBlIiwxNzU5KSxEKDgwNiwxLE9pLGVlZSxkR3QpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gR0t0KHRoaXMsZSxuKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKHFfLCJNb2RlbE9yZGVyUG9ydENvbXBhcmF0b3IiLDgwNiksRCg4MDEsMSx7fSxITiksbC5WZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoO2ZvcihvPUthZShuKSxyPW5ldyBoZSxoPW4uZi9vLHM9MTtzPG87KytzKWxlKHIscGUoQXIoVHUoYi5NYXRoLnJvdW5kKHMqaCkpKSkpO3JldHVybiByfSxsLldmPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoQ2QsIkFSREN1dEluZGV4SGV1cmlzdGljIiw4MDEpLEQoMTQ3OSwxLG9zLHJRKSxsLnBmPWZ1bmN0aW9uKGUsbil7ZG1uKHUoZSwzNyksbil9LEYoQ2QsIkJyZWFraW5nUG9pbnRJbnNlcnRlciIsMTQ3OSksRCgzMDUsMSx7MzA1OjF9LHNtdCksbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBNcCxlLmErPSJCUEluZm9bIixlLmErPWAKCXN0YXJ0PWAsaGMoZSx0aGlzLmkpLGUuYSs9YAoJZW5kPWAsaGMoZSx0aGlzLmEpLGUuYSs9YAoJbm9kZVN0YXJ0RWRnZT1gLGhjKGUsdGhpcy5lKSxlLmErPWAKCXN0YXJ0RW5kRWRnZT1gLGhjKGUsdGhpcy5qKSxlLmErPWAKCW9yaWdpbmFsRWRnZT1gLGhjKGUsdGhpcy5mKSxlLmErPWAKCXN0YXJ0SW5MYXllckR1bW15PWAsaGMoZSx0aGlzLmspLGUuYSs9YAoJc3RhcnRJbkxheWVyRWRnZT1gLGhjKGUsdGhpcy5uKSxlLmErPWAKCWVuZEluTGF5ZXJEdW1teT1gLGhjKGUsdGhpcy5iKSxlLmErPWAKCWVuZEluTGF5ZXJFZGdlPWAsaGMoZSx0aGlzLmMpLGUuYX0sRihDZCwiQnJlYWtpbmdQb2ludEluc2VydGVyL0JQSW5mbyIsMzA1KSxEKDY1MiwxLHs2NTI6MX0sQXApLGwuYT0hMSxsLmI9MCxsLmM9MCxGKENkLCJCcmVha2luZ1BvaW50SW5zZXJ0ZXIvQ3V0Iiw2NTIpLEQoMTQ4MCwxLG9zLGlRKSxsLnBmPWZ1bmN0aW9uKGUsbil7SDJuKHUoZSwzNyksbil9LEYoQ2QsIkJyZWFraW5nUG9pbnRQcm9jZXNzb3IiLDE0ODApLEQoMTQ4MSwxLGxpLHNRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB5ZWUodShlLDEwKSl9LEYoQ2QsIkJyZWFraW5nUG9pbnRQcm9jZXNzb3IvMG1ldGhvZHJlZiRpc0VuZCRUeXBlIiwxNDgxKSxEKDE0ODIsMSxsaSxhUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4geGVlKHUoZSwxMCkpfSxGKENkLCJCcmVha2luZ1BvaW50UHJvY2Vzc29yLzFtZXRob2RyZWYkaXNTdGFydCRUeXBlIiwxNDgyKSxEKDE0ODMsMSxvcyxvUSksbC5wZj1mdW5jdGlvbihlLG4pe2Z3bih0aGlzLHUoZSwzNyksbil9LEYoQ2QsIkJyZWFraW5nUG9pbnRSZW1vdmVyIiwxNDgzKSxEKDE0ODQsMSxVbixjUSksbC50ZD1mdW5jdGlvbihlKXt1KGUsMTI4KS5rPSEwfSxGKENkLCJCcmVha2luZ1BvaW50UmVtb3Zlci9sYW1iZGEkMCRUeXBlIiwxNDg0KSxEKDc5NywxLHt9LG01dCksbC5iPTAsbC5lPTAsbC5mPTAsbC5qPTAsRihDZCwiR3JhcGhTdGF0cyIsNzk3KSxEKDc5OCwxLHt9LFZOKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuTWF0aC5tYXgoWHQoeWUoZSkpLFh0KHllKG4pKSl9LEYoQ2QsIkdyYXBoU3RhdHMvMG1ldGhvZHJlZiRtYXgkVHlwZSIsNzk4KSxEKDc5OSwxLHt9LEdOKSxsLkNlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIuTWF0aC5tYXgoWHQoeWUoZSkpLFh0KHllKG4pKSl9LEYoQ2QsIkdyYXBoU3RhdHMvMm1ldGhvZHJlZiRtYXgkVHlwZSIsNzk5KSxEKDE2NjAsMSx7fSx1USksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBRdG4oeWUoZSkseWUobikpfSxGKENkLCJHcmFwaFN0YXRzL2xhbWJkYSQxJFR5cGUiLDE2NjApLEQoMTY2MSwxLHt9LExDKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1c2UodGhpcy5hLHUoZSwyOSkpfSxGKENkLCJHcmFwaFN0YXRzL2xhbWJkYSQyJFR5cGUiLDE2NjEpLEQoMTY2MiwxLHt9LGdSKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBWY2UodGhpcy5hLHUoZSwyOSkpfSxGKENkLCJHcmFwaFN0YXRzL2xhbWJkYSQ2JFR5cGUiLDE2NjIpLEQoODAwLDEse30sVU4pLGwuVmY9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj11KFEoZSwoVGUoKSxFOXQpKSwxNSkscnx8KHduKCksd24oKSxpbyl9LGwuV2Y9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRihDZCwiSUN1dEluZGV4Q2FsY3VsYXRvci9NYW51YWxDdXRJbmRleENhbGN1bGF0b3IiLDgwMCksRCg4MDIsMSx7fSxXTiksbC5WZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0LGd0LE10LFN0LFJ0LEt0O2ZvcihLdD0obi5uPT1udWxsJiZPc2Uobiksbi5uKSxrPShuLmQ9PW51bGwmJk9zZShuKSxuLmQpLFJ0PU50KGFhLHZvLDI1LEt0Lmxlbmd0aCwxNSwxKSxSdFswXT1LdFswXSxNdD1LdFswXSxDPTE7QzxLdC5sZW5ndGg7QysrKVJ0W0NdPVJ0W0MtMV0rS3RbQ10sTXQrPUt0W0NdO2ZvcihvPUthZShuKS0xLGQ9dShRKGUsKFRlKCksVDl0KSksMTkpLmEscz1DcyxyPW5ldyBoZSxIPWIuTWF0aC5tYXgoMCxvLWQpO0g8PWIuTWF0aC5taW4obi5mLTEsbytkKTtIKyspe2lmKHR0PU10LyhIKzEpLGd0PTAsTT0xLGg9bmV3IGhlLFN0PUNzLGo9MCx2PTAsSz1rWzBdLEg9PTApU3Q9TXQsdj0obi5nPT1udWxsJiYobi5nPV9uZShuLG5ldyBHTikpLFh0KG4uZykpO2Vsc2V7Zm9yKDtNPG4uZjspUnRbTS0xXS1ndD49dHQmJihsZShoLHBlKE0pKSxTdD1iLk1hdGgubWF4KFN0LFJ0W00tMV0taiksdis9SyxndCs9UnRbTS0xXS1ndCxqPVJ0W00tMV0sSz1rW01dKSxLPWIuTWF0aC5tYXgoSyxrW01dKSwrK007dis9S31HPWIuTWF0aC5taW4oMS9TdCwxL24uYi92KSxHPnMmJihzPUcscj1oKX1yZXR1cm4gcn0sbC5XZj1mdW5jdGlvbigpe3JldHVybiExfSxGKENkLCJNU0RDdXRJbmRleEhldXJpc3RpYyIsODAyKSxEKDE2MTcsMSxvcyxsUSksbC5wZj1mdW5jdGlvbihlLG4pe1J5bih1KGUsMzcpLG4pfSxGKENkLCJTaW5nbGVFZGdlR3JhcGhXcmFwcGVyIiwxNjE3KSxEKDIyNywyMix7MzoxLDM1OjEsMjI6MSwyMjc6MX0sWkMpO3ZhciBWNCxnNyxwNyxOeSxiUyxHNCxiNz1qcihrYywiQ2VudGVyRWRnZUxhYmVsUGxhY2VtZW50U3RyYXRlZ3kiLDIyNyxIcixLYW4sU0plKSxDMmU7RCg0MjIsMjIsezM6MSwzNToxLDIyOjEsNDIyOjF9LEJidCk7dmFyIEFUdCxBbHQsTFR0PWpyKGtjLCJDb25zdHJhaW50Q2FsY3VsYXRpb25TdHJhdGVneSIsNDIyLEhyLGpybixBSmUpLF8yZTtEKDMxNCwyMix7MzoxLDM1OjEsMjI6MSwzMTQ6MSwyNDY6MSwyMzQ6MX0sUGV0KSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIE5vZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBOb2UodGhpcyl9O3ZhciBFTyxQNixNVHQsRFR0PWpyKGtjLCJDcm9zc2luZ01pbmltaXphdGlvblN0cmF0ZWd5IiwzMTQsSHIsRGluLExKZSksUzJlO0QoMzM3LDIyLHszOjEsMzU6MSwyMjoxLDMzNzoxfSxGZXQpO3ZhciBJVHQsTGx0LFZWLE9UdD1qcihrYywiQ3V0dGluZ1N0cmF0ZWd5IiwzMzcsSHIsSWluLElKZSksQTJlO0QoMzM1LDIyLHszOjEsMzU6MSwyMjoxLDMzNToxLDI0NjoxLDIzNDoxfSxBTSksbC5LZj1mdW5jdGlvbigpe3JldHVybiBrY2UodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4ga2NlKHRoaXMpfTt2YXIgUFR0LE1sdCx3UyxEbHQsdlMsRlR0PWpyKGtjLCJDeWNsZUJyZWFraW5nU3RyYXRlZ3kiLDMzNSxIcix4YW4sT0plKSxMMmU7RCg0MTksMjIsezM6MSwzNToxLDIyOjEsNDE5OjF9LFJidCk7dmFyIEdWLE5UdCxCVHQ9anIoa2MsIkRpcmVjdGlvbkNvbmdydWVuY3kiLDQxOSxIcixScm4sUEplKSxNMmU7RCg0NTAsMjIsezM6MSwzNToxLDIyOjEsNDUwOjF9LE5ldCk7dmFyIHc3LElsdCxVNCxEMmU9anIoa2MsIkVkZ2VDb25zdHJhaW50Iiw0NTAsSHIsT2luLEZKZSksSTJlO0QoMjc2LDIyLHszOjEsMzU6MSwyMjoxLDI3NjoxfSxKQyk7dmFyIE9sdCxQbHQsRmx0LE5sdCxVVixCbHQsUlR0PWpyKGtjLCJFZGdlTGFiZWxTaWRlU2VsZWN0aW9uIiwyNzYsSHIsSmFuLE5KZSksTzJlO0QoNDc5LDIyLHszOjEsMzU6MSwyMjoxLDQ3OToxfSxqYnQpO3ZhciBXVixqVHQsJFR0PWpyKGtjLCJFZGdlU3RyYWlnaHRlbmluZ1N0cmF0ZWd5Iiw0NzksSHIsQnJuLEJKZSksUDJlO0QoMjc0LDIyLHszOjEsMzU6MSwyMjoxLDI3NDoxfSx0OSk7dmFyIFJsdCx6VHQscVR0LFlWLEhUdCxWVHQsR1R0PWpyKGtjLCJGaXhlZEFsaWdubWVudCIsMjc0LEhyLFFhbixSSmUpLEYyZTtEKDI3NSwyMix7MzoxLDM1OjEsMjI6MSwyNzU6MX0sZTkpO3ZhciBVVHQsV1R0LFlUdCxLVHQsbVMsWFR0LFFUdD1qcihrYywiR3JhcGhDb21wYWN0aW9uU3RyYXRlZ3kiLDI3NSxIcixYYW4sakplKSxOMmU7RCgyNTYsMjIsezM6MSwzNToxLDIyOjEsMjU2OjF9LEZtKTt2YXIgdjcsS1YsbTcsdmgseVMsWFYseTcsVzQsUVYseFMsamx0PWpyKGtjLCJHcmFwaFByb3BlcnRpZXMiLDI1NixIcixSY24sJEplKSxCMmU7RCgyOTIsMjIsezM6MSwzNToxLDIyOjEsMjkyOjF9LEJldCk7dmFyIFRPLCRsdCx6bHQscWx0PWpyKGtjLCJHcmVlZHlTd2l0Y2hUeXBlIiwyOTIsSHIsTmluLHpKZSksUjJlO0QoMzAzLDIyLHszOjEsMzU6MSwyMjoxLDMwMzoxfSxSZXQpO3ZhciBGNixDTyxZNCxqMmU9anIoa2MsIkluTGF5ZXJDb25zdHJhaW50IiwzMDMsSHIsRmluLHFKZSksJDJlO0QoNDIwLDIyLHszOjEsMzU6MSwyMjoxLDQyMDoxfSwkYnQpO3ZhciBIbHQsWlR0LEpUdD1qcihrYywiSW50ZXJhY3RpdmVSZWZlcmVuY2VQb2ludCIsNDIwLEhyLCRybixISmUpLHoyZSx0Q3QsTjYsSXYsWlYsZUN0LG5DdCxKVixyQ3QsX08sdEcsa1MsQjYsQnksVmx0LGVHLG9jLGlDdCxPdixWYyxHbHQsVWx0LFNPLEIyLFB2LFI2LHNDdCxqNixBTyxSeSxyMSwkaCxXbHQsSzQsVGMsX2ksYUN0LG9DdCxjQ3QsdUN0LGxDdCxZbHQsbkcsSnUsRnYsS2x0LCQ2LExPLHExLFg0LHg3LFE0LFo0LGs3LFIyLGhDdCxYbHQsUWx0LHo2O0QoMTYzLDIyLHszOjEsMzU6MSwyMjoxLDE2MzoxfSxNTSk7dmFyIEVTLGJiLFRTLGp5LE1PLGZDdD1qcihrYywiTGF5ZXJDb25zdHJhaW50IiwxNjMsSHIsVGFuLFZKZSkscTJlO0QoODQ4LDEsT2gscnR0KSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxDNnQpLCIiKSwiRGlyZWN0aW9uIENvbmdydWVuY3kiKSwiU3BlY2lmaWVzIGhvdyBkcmF3aW5ncyBvZiB0aGUgc2FtZSBncmFwaCB3aXRoIGRpZmZlcmVudCBsYXlvdXQgZGlyZWN0aW9ucyBjb21wYXJlIHRvIGVhY2ggb3RoZXI6IGVpdGhlciBhIG5hdHVyYWwgcmVhZGluZyBkaXJlY3Rpb24gaXMgcHJlc2VydmVkIG9yIHRoZSBkcmF3aW5ncyBhcmUgcm90YXRlZCB2ZXJzaW9ucyBvZiBlYWNoIG90aGVyLiIpLGtDdCksKFVnKCksdXMpKSxCVHQpLHVuKChRZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLF82dCksIiIpLCJGZWVkYmFjayBFZGdlcyIpLCJXaGV0aGVyIGZlZWRiYWNrIGVkZ2VzIHNob3VsZCBiZSBoaWdobGlnaHRlZCBieSByb3V0aW5nIGFyb3VuZCB0aGUgbm9kZXMuIiksKE5uKCksITEpKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsc0gpLCIiKSwiSW50ZXJhY3RpdmUgUmVmZXJlbmNlIFBvaW50IiksIkRldGVybWluZXMgd2hpY2ggcG9pbnQgb2YgYSBub2RlIGlzIGNvbnNpZGVyZWQgYnkgaW50ZXJhY3RpdmUgbGF5b3V0IHBoYXNlcy4iKSxBQ3QpLHVzKSxKVHQpLHVuKHFuKSkpKSxjYShlLHNILFFvdCxPd2UpLGNhKGUsc0gsSF8sSXdlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUzZ0KSwiIiksIk1lcmdlIEVkZ2VzIiksIkVkZ2VzIHRoYXQgaGF2ZSBubyBwb3J0cyBhcmUgbWVyZ2VkIHNvIHRoZXkgdG91Y2ggdGhlIGNvbm5lY3RlZCBub2RlcyBhdCB0aGUgc2FtZSBwb2ludHMuIFdoZW4gdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQsIG9uZSBwb3J0IGlzIGNyZWF0ZWQgZm9yIGVhY2ggZWRnZSBkaXJlY3RseSBjb25uZWN0ZWQgdG8gYSBub2RlLiBXaGVuIGl0IGlzIGVuYWJsZWQsIGFsbCBzdWNoIGluY29taW5nIGVkZ2VzIHNoYXJlIGFuIGlucHV0IHBvcnQsIGFuZCBhbGwgb3V0Z29pbmcgZWRnZXMgc2hhcmUgYW4gb3V0cHV0IHBvcnQuIiksITEpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxBNnQpLCIiKSwiTWVyZ2UgSGllcmFyY2h5LUNyb3NzaW5nIEVkZ2VzIiksIklmIGhpZXJhcmNoaWNhbCBsYXlvdXQgaXMgYWN0aXZlLCBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMgdXNlIGFzIGZldyBoaWVyYXJjaGljYWwgcG9ydHMgYXMgcG9zc2libGUuIFRoZXkgYXJlIGJyb2tlbiBieSB0aGUgYWxnb3JpdGhtLCB3aXRoIGhpZXJhcmNoaWNhbCBwb3J0cyBpbnNlcnRlZCBhcyByZXF1aXJlZC4gVXN1YWxseSwgb25lIHN1Y2ggcG9ydCBpcyBjcmVhdGVkIGZvciBlYWNoIGVkZ2UgYXQgZWFjaCBoaWVyYXJjaHkgY3Jvc3NpbmcgcG9pbnQuIFdpdGggdGhpcyBvcHRpb24gc2V0IHRvIHRydWUsIHdlIHRyeSB0byBjcmVhdGUgYXMgZmV3IGhpZXJhcmNoaWNhbCBwb3J0cyBhcyBwb3NzaWJsZSBpbiB0aGUgcHJvY2Vzcy4gSW4gcGFydGljdWxhciwgYWxsIGVkZ2VzIHRoYXQgZm9ybSBhIGh5cGVyZWRnZSBjYW4gc2hhcmUgYSBwb3J0LiIpLCEwKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShYS2Uocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEw2dCksIiIpLCJBbGxvdyBOb24tRmxvdyBQb3J0cyBUbyBTd2l0Y2ggU2lkZXMiKSwiU3BlY2lmaWVzIHdoZXRoZXIgbm9uLWZsb3cgcG9ydHMgbWF5IHN3aXRjaCBzaWRlcyBpZiB0aGVpciBub2RlJ3MgcG9ydCBjb25zdHJhaW50cyBhcmUgZWl0aGVyIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIuIEEgbm9uLWZsb3cgcG9ydCBpcyBhIHBvcnQgb24gYSBzaWRlIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGxheW91dCBmbG93LiBGb3IgaW5zdGFuY2UsIGdpdmVuIGEgbGVmdC10by1yaWdodCBsYXlvdXQgZGlyZWN0aW9uLCBub3J0aCBhbmQgc291dGggcG9ydHMgd291bGQgYmUgY29uc2lkZXJlZCBub24tZmxvdyBwb3J0cy4gRnVydGhlciBub3RlIHRoYXQgdGhlIHVuZGVybHlpbmcgY3JpdGVyaXVtIHdoZXRoZXIgdG8gc3dpdGNoIHNpZGVzIG9yIG5vdCBzb2xlbHkgcmVsaWVzIG9uIHRoZSBtaW5pbWl6YXRpb24gb2YgZWRnZSBjcm9zc2luZ3MuIEhlbmNlLCBlZGdlIGxlbmd0aCBhbmQgb3RoZXIgYWVzdGhldGljcyBjcml0ZXJpYSBhcmUgbm90IGFkZHJlc3NlZC4iKSwhMSksTGEpLFJzKSx1bihWMikpLGx0KGN0KEFlLDEpLGVlLDIsNixbIm9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vcnRoT3JTb3V0aFBvcnQiXSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLE02dCksIiIpLCJQb3J0IFNvcnRpbmcgU3RyYXRlZ3kiKSwiT25seSByZWxldmFudCBmb3Igbm9kZXMgd2l0aCBGSVhFRF9TSURFIHBvcnQgY29uc3RyYWludHMuIERldGVybWluZXMgdGhlIHdheSBhIG5vZGUncyBwb3J0cyBhcmUgZGlzdHJpYnV0ZWQgb24gdGhlIHNpZGVzIG9mIGEgbm9kZSBpZiB0aGVpciBvcmRlciBpcyBub3QgcHJlc2NyaWJlZC4gVGhlIG9wdGlvbiBpcyBzZXQgb24gcGFyZW50IG5vZGVzLiIpLE5DdCksdXMpLFY5dCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxENnQpLCIiKSwiVGhvcm91Z2huZXNzIiksIkhvdyBtdWNoIGVmZm9ydCBzaG91bGQgYmUgc3BlbnQgdG8gcHJvZHVjZSBhIG5pY2UgbGF5b3V0LiIpLHBlKDcpKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSTZ0KSwiIiksIkFkZCBVbm5lY2Vzc2FyeSBCZW5kcG9pbnRzIiksIkFkZHMgYmVuZCBwb2ludHMgZXZlbiBpZiBhbiBlZGdlIGRvZXMgbm90IGNoYW5nZSBkaXJlY3Rpb24uIElmIHRydWUsIGVhY2ggbG9uZyBlZGdlIGR1bW15IHdpbGwgY29udHJpYnV0ZSBhIGJlbmQgcG9pbnQgdG8gaXRzIGVkZ2VzIGFuZCBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMgd2lsbCBhbHdheXMgZ2V0IGEgYmVuZCBwb2ludCB3aGVyZSB0aGV5IGNyb3NzIGhpZXJhcmNoeSBib3VuZGFyaWVzLiBCeSBkZWZhdWx0LCBiZW5kIHBvaW50cyBhcmUgb25seSBhZGRlZCB3aGVyZSBhbiBlZGdlIGNoYW5nZXMgZGlyZWN0aW9uLiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTzZ0KSwiIiksIkdlbmVyYXRlIFBvc2l0aW9uIGFuZCBMYXllciBJRHMiKSwiSWYgZW5hYmxlZCBwb3NpdGlvbiBpZCBhbmQgbGF5ZXIgaWQgYXJlIGdlbmVyYXRlZCwgd2hpY2ggYXJlIHVzdWFsbHkgb25seSB1c2VkIGludGVybmFsbHkgd2hlbiBzZXR0aW5nIHRoZSBpbnRlcmFjdGl2ZUxheW91dCBvcHRpb24uIFRoaXMgb3B0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgb24gdGhlIHJvb3Qgbm9kZS4iKSwhMSksTGEpLFJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFFvdCksImN5Y2xlQnJlYWtpbmciKSwiQ3ljbGUgQnJlYWtpbmcgU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIGN5Y2xlIGJyZWFraW5nLiBDeWNsZSBicmVha2luZyBsb29rcyBmb3IgY3ljbGVzIGluIHRoZSBncmFwaCBhbmQgZGV0ZXJtaW5lcyB3aGljaCBlZGdlcyB0byByZXZlcnNlIHRvIGJyZWFrIHRoZSBjeWNsZXMuIFJldmVyc2VkIGVkZ2VzIHdpbGwgZW5kIHVwIHBvaW50aW5nIHRvIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2YgcmVndWxhciBlZGdlcyAodGhhdCBpcywgcmV2ZXJzZWQgZWRnZXMgd2lsbCBwb2ludCBsZWZ0IGlmIGVkZ2VzIHVzdWFsbHkgcG9pbnQgcmlnaHQpLiIpLHhDdCksdXMpLEZUdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxLSSkseGN0KSwiTm9kZSBMYXllcmluZyBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3Igbm9kZSBsYXllcmluZy4iKSxEQ3QpLHVzKSxJOXQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUDZ0KSx4Y3QpLCJMYXllciBDb25zdHJhaW50IiksIkRldGVybWluZXMgYSBjb25zdHJhaW50IG9uIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5vZGUgcmVnYXJkaW5nIHRoZSBsYXllcmluZy4iKSxMQ3QpLHVzKSxmQ3QpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsRjZ0KSx4Y3QpLCJMYXllciBDaG9pY2UgQ29uc3RyYWludCIpLCJBbGxvd3MgdG8gc2V0IGEgY29uc3RyYWludCByZWdhcmRpbmcgdGhlIGxheWVyIHBsYWNlbWVudCBvZiBhIG5vZGUuIExldCBpIGJlIHRoZSB2YWx1ZSBvZiB0ZWggY29uc3RyYWludC4gQXNzdW1lZCB0aGUgZHJhd2luZyBoYXMgbiBsYXllcnMgYW5kIGkgPCBuLiBJZiBzZXQgdG8gaSwgaXQgZXhwcmVzc2VzIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHBsYWNlZCBpbiBpLXRoIGxheWVyLiBTaG91bGQgaT49biBiZSB0cnVlIHRoZW4gdGhlIG5vZGUgaXMgcGxhY2VkIGluIHRoZSBsYXN0IGxheWVyIG9mIHRoZSBkcmF3aW5nLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IHBhcnQgb2YgYW55IG9mIEVMSyBMYXllcmVkJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBidXQgaXMgb25seSBldmFsdWF0ZWQgYXMgcGFydCBvZiB0aGUgYEludGVyYWN0aXZlTGF5ZXJlZEdyYXBoVmlzaXRvcmAsIHdoaWNoIG11c3QgYmUgYXBwbGllZCBtYW51YWxseSBvciB1c2VkIHZpYSB0aGUgYERpYWdyYW1MYXlvdXRFbmdpbmUuIikscGUoLTEpKSxnYyksamEpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTjZ0KSx4Y3QpLCJMYXllciBJRCIpLCJMYXllciBpZGVudGlmaWVyIHRoYXQgd2FzIGNhbGN1bGF0ZWQgYnkgRUxLIExheWVyZWQgZm9yIGEgbm9kZS4gVGhpcyBpcyBvbmx5IGdlbmVyYXRlZCBpZiBpbnRlcmFjdGl2ZUxheW90IG9yIGdlbmVyYXRlUG9zaXRpb25BbmRMYXllcklkcyBpcyBzZXQuIikscGUoLTEpKSxnYyksamEpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsWm90KSxJMWUpLCJVcHBlciBCb3VuZCBPbiBXaWR0aCBbTWluV2lkdGggTGF5ZXJlcl0iKSwiRGVmaW5lcyBhIGxvb3NlIHVwcGVyIGJvdW5kIG9uIHRoZSB3aWR0aCBvZiB0aGUgTWluV2lkdGggbGF5ZXJlci4gSWYgc2V0IHRvICctMScgbXVsdGlwbGUgdmFsdWVzIGFyZSB0ZXN0ZWQgYW5kIHRoZSBiZXN0IHJlc3VsdCBpcyBzZWxlY3RlZC4iKSxwZSg0KSksZ2MpLGphKSx1bihxbikpKSksY2EoZSxab3QsS0ksJHdlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSm90KSxJMWUpLCJVcHBlciBMYXllciBFc3RpbWF0aW9uIFNjYWxpbmcgRmFjdG9yIFtNaW5XaWR0aCBMYXllcmVyXSIpLCJNdWx0aXBsaWVkIHdpdGggVXBwZXIgQm91bmQgT24gV2lkdGggZm9yIGRlZmluaW5nIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSB3aWR0aCBvZiBsYXllcnMgd2hpY2ggaGF2ZW4ndCBiZWVuIGRldGVybWluZWQgeWV0LCBidXQgd2hvc2UgbWF4aW11bSB3aWR0aCBoYWQgYmVlbiAocm91Z2hseSkgZXN0aW1hdGVkIGJ5IHRoZSBNaW5XaWR0aCBhbGdvcml0aG0uIENvbXBlbnNhdGVzIGZvciB0b28gaGlnaCBlc3RpbWF0aW9ucy4gSWYgc2V0IHRvICctMScgbXVsdGlwbGUgdmFsdWVzIGFyZSB0ZXN0ZWQgYW5kIHRoZSBiZXN0IHJlc3VsdCBpcyBzZWxlY3RlZC4iKSxwZSgyKSksZ2MpLGphKSx1bihxbikpKSksY2EoZSxKb3QsS0kscXdlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdGN0KSxPMWUpLCJOb2RlIFByb21vdGlvbiBTdHJhdGVneSIpLCJSZWR1Y2VzIG51bWJlciBvZiBkdW1teSBub2RlcyBhZnRlciBsYXllcmluZyBwaGFzZSAoaWYgcG9zc2libGUpLiIpLE1DdCksdXMpLHo5dCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxlY3QpLE8xZSksIk1heCBOb2RlIFByb21vdGlvbiBJdGVyYXRpb25zIiksIkxpbWl0cyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIG5vZGUgcHJvbW90aW9uLiIpLHBlKDApKSxnYyksamEpLHVuKHFuKSkpKSxjYShlLGVjdCx0Y3QsbnVsbCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG5jdCksImxheWVyaW5nLmNvZmZtYW5HcmFoYW0iKSwiTGF5ZXIgQm91bmQiKSwiVGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGFsbG93ZWQgcGVyIGxheWVyLiIpLHBlKHdpKSksZ2MpLGphKSx1bihxbikpKSksY2EoZSxuY3QsS0ksRndlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsSF8pLFhJKSwiQ3Jvc3NpbmcgTWluaW1pemF0aW9uIFN0cmF0ZWd5IiksIlN0cmF0ZWd5IGZvciBjcm9zc2luZyBtaW5pbWl6YXRpb24uIikseUN0KSx1cyksRFR0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEI2dCksWEkpLCJGb3JjZSBOb2RlIE1vZGVsIE9yZGVyIiksIlRoZSBub2RlIG9yZGVyIGdpdmVuIGJ5IHRoZSBtb2RlbCBkb2VzIG5vdCBjaGFuZ2UgdG8gcHJvZHVjZSBhIGJldHRlciBsYXlvdXQuIEUuZy4gaWYgbm9kZSBBIGlzIGJlZm9yZSBub2RlIEIgaW4gdGhlIG1vZGVsIHRoaXMgaXMgbm90IGNoYW5nZWQgZHVyaW5nIGNyb3NzaW5nIG1pbmltaXphdGlvbi4gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIG5vZGUgbW9kZWwgb3JkZXIgaXMgYWxyZWFkeSByZXNwZWN0ZWQgYmVmb3JlIGNyb3NzaW5nIG1pbmltaXphdGlvbi4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgc2V0dGluZyBjb25zaWRlck1vZGVsT3JkZXIuc3RyYXRlZ3kgdG8gTk9ERVNfQU5EX0VER0VTLiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscmN0KSxYSSksIkhpZXJhcmNoaWNhbCBTd2VlcGluZXNzIiksIkhvdyBsaWtlbHkgaXQgaXMgdG8gdXNlIGNyb3NzLWhpZXJhcmNoeSAoMSkgdnMgYm90dG9tLXVwICgtMSkuIiksLjEpLE9vKSxsYSksdW4ocW4pKSkpLGNhKGUscmN0LHZILG93ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGljdCksWEkpLCJTZW1pLUludGVyYWN0aXZlIENyb3NzaW5nIE1pbmltaXphdGlvbiIpLCJQcmVzZXJ2ZXMgdGhlIG9yZGVyIG9mIG5vZGVzIHdpdGhpbiBhIGxheWVyIGJ1dCBzdGlsbCBtaW5pbWl6ZXMgY3Jvc3NpbmdzIGJldHdlZW4gZWRnZXMgY29ubmVjdGluZyBsb25nIGVkZ2UgZHVtbWllcy4gRGVyaXZlcyB0aGUgZGVzaXJlZCBvcmRlciBmcm9tIHBvc2l0aW9ucyBzcGVjaWZpZWQgYnkgdGhlICdvcmcuZWNsaXBzZS5lbGsucG9zaXRpb24nIGxheW91dCBvcHRpb24uIFJlcXVpcmVzIGEgY3Jvc3NpbmcgbWluaW1pemF0aW9uIHN0cmF0ZWd5IHRoYXQgaXMgYWJsZSB0byBwcm9jZXNzICdpbi1sYXllcicgY29uc3RyYWludHMuIiksITEpLExhKSxScyksdW4ocW4pKSkpLGNhKGUsaWN0LEhfLGh3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFI2dCksWEkpLCJQb3NpdGlvbiBDaG9pY2UgQ29uc3RyYWludCIpLCJBbGxvd3MgdG8gc2V0IGEgY29uc3RyYWludCByZWdhcmRpbmcgdGhlIHBvc2l0aW9uIHBsYWNlbWVudCBvZiBhIG5vZGUgaW4gYSBsYXllci4gQXNzdW1lZCB0aGUgbGF5ZXIgaW4gd2hpY2ggdGhlIG5vZGUgcGxhY2VkIGluY2x1ZGVzIG4gb3RoZXIgbm9kZXMgYW5kIGkgPCBuLiBJZiBzZXQgdG8gaSwgaXQgZXhwcmVzc2VzIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHBsYWNlZCBhdCB0aGUgaS10aCBwb3NpdGlvbi4gU2hvdWxkIGk+PW4gYmUgdHJ1ZSB0aGVuIHRoZSBub2RlIGlzIHBsYWNlZCBhdCB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgbGF5ZXIuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgcGFydCBvZiBhbnkgb2YgRUxLIExheWVyZWQncyBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGJ1dCBpcyBvbmx5IGV2YWx1YXRlZCBhcyBwYXJ0IG9mIHRoZSBgSW50ZXJhY3RpdmVMYXllcmVkR3JhcGhWaXNpdG9yYCwgd2hpY2ggbXVzdCBiZSBhcHBsaWVkIG1hbnVhbGx5IG9yIHVzZWQgdmlhIHRoZSBgRGlhZ3JhbUxheW91dEVuZ2luZS4iKSxwZSgtMSkpLGdjKSxqYSksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxqNnQpLFhJKSwiUG9zaXRpb24gSUQiKSwiUG9zaXRpb24gd2l0aGluIGEgbGF5ZXIgdGhhdCB3YXMgZGV0ZXJtaW5lZCBieSBFTEsgTGF5ZXJlZCBmb3IgYSBub2RlLiBUaGlzIGlzIG9ubHkgZ2VuZXJhdGVkIGlmIGludGVyYWN0aXZlTGF5b3Qgb3IgZ2VuZXJhdGVQb3NpdGlvbkFuZExheWVySWRzIGlzIHNldC4iKSxwZSgtMSkpLGdjKSxqYSksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSwkNnQpLFAxZSksIkdyZWVkeSBTd2l0Y2ggQWN0aXZhdGlvbiBUaHJlc2hvbGQiKSwiQnkgZGVmYXVsdCBpdCBpcyBkZWNpZGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIGdyZWVkeSBzd2l0Y2ggaXMgYWN0aXZhdGVkIG9yIG5vdC4gVGhlIGRlY2lzaW9uIGlzIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIGlucHV0IGdyYXBoICh3aXRob3V0IGR1bW15IG5vZGVzKSBpcyBzbWFsbGVyIHRoYW4gdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uLiBBICcwJyBlbmZvcmNlcyB0aGUgYWN0aXZhdGlvbi4iKSxwZSg0MCkpLGdjKSxqYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxzY3QpLFAxZSksIkdyZWVkeSBTd2l0Y2ggQ3Jvc3NpbmcgTWluaW1pemF0aW9uIiksIkdyZWVkeSBTd2l0Y2ggc3RyYXRlZ3kgZm9yIGNyb3NzaW5nIG1pbmltaXphdGlvbi4gVGhlIGdyZWVkeSBzd2l0Y2ggaGV1cmlzdGljIGlzIGV4ZWN1dGVkIGFmdGVyIHRoZSByZWd1bGFyIGNyb3NzaW5nIG1pbmltaXphdGlvbiBhcyBhIHBvc3QtcHJvY2Vzc29yLiBOb3RlIHRoYXQgaWYgJ2hpZXJhcmNoeUhhbmRsaW5nJyBpcyBzZXQgdG8gJ0lOQ0xVREVfQ0hJTERSRU4nLCB0aGUgJ2dyZWVkeVN3aXRjaEhpZXJhcmNoaWNhbC50eXBlJyBvcHRpb24gbXVzdCBiZSB1c2VkLiIpLG1DdCksdXMpLHFsdCksdW4ocW4pKSkpLGNhKGUsc2N0LEhfLHN3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGFIKSwiY3Jvc3NpbmdNaW5pbWl6YXRpb24uZ3JlZWR5U3dpdGNoSGllcmFyY2hpY2FsIiksIkdyZWVkeSBTd2l0Y2ggQ3Jvc3NpbmcgTWluaW1pemF0aW9uIChoaWVyYXJjaGljYWwpIiksIkFjdGl2YXRlcyB0aGUgZ3JlZWR5IHN3aXRjaCBoZXVyaXN0aWMgaW4gY2FzZSBoaWVyYXJjaGljYWwgbGF5b3V0IGlzIHVzZWQuIFRoZSBkaWZmZXJlbmNlcyB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCBjYXNlIChzZWUgJ2dyZWVkeVN3aXRjaC50eXBlJykgYXJlOiAxKSBncmVlZHkgc3dpdGNoIGlzIGluYWN0aXZlIGJ5IGRlZmF1bHQsIDMpIG9ubHkgdGhlIG9wdGlvbiB2YWx1ZSBzZXQgb24gdGhlIG5vZGUgYXQgd2hpY2ggaGllcmFyY2hpY2FsIGxheW91dCBzdGFydHMgaXMgcmVsZXZhbnQsIGFuZCAyKSBpZiBpdCdzIGFjdGl2YXRlZCBieSB0aGUgdXNlciwgaXQgcHJvcGVybHkgYWRkcmVzc2VzIGhpZXJhcmNoeS1jcm9zc2luZyBlZGdlcy4iKSx2Q3QpLHVzKSxxbHQpLHVuKHFuKSkpKSxjYShlLGFILEhfLG53ZSksY2EoZSxhSCx2SCxyd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxJNCksRjFlKSwiTm9kZSBQbGFjZW1lbnQgU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIG5vZGUgcGxhY2VtZW50LiIpLEZDdCksdXMpLE45dCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxvSCksRjFlKSwiRmF2b3IgU3RyYWlnaHQgRWRnZXMgT3ZlciBCYWxhbmNpbmciKSwiRmF2b3Igc3RyYWlnaHQgZWRnZXMgb3ZlciBhIGJhbGFuY2VkIG5vZGUgcGxhY2VtZW50LiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIHVzZWQgJ2VkZ2VSb3V0aW5nJy4gRm9yIGFuIG9ydGhvZ29uYWwgc3R5bGUgaXQgaXMgc2V0IHRvIHRydWUsIGZvciBhbGwgb3RoZXIgc3R5bGVzIHRvIGZhbHNlLiIpLExhKSxScyksdW4ocW4pKSkpLGNhKGUsb0gsSTQsSndlKSxjYShlLG9ILEk0LHR2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGFjdCksTjFlKSwiQksgRWRnZSBTdHJhaWdodGVuaW5nIiksIlNwZWNpZmllcyB3aGV0aGVyIHRoZSBCcmFuZGVzIEtvZXBmIG5vZGUgcGxhY2VyIHRyaWVzIHRvIGluY3JlYXNlIHRoZSBudW1iZXIgb2Ygc3RyYWlnaHQgZWRnZXMgYXQgdGhlIGV4cGVuc2Ugb2YgZGlhZ3JhbSBzaXplLiBUaGVyZSBpcyBhIHN1YnRsZSBkaWZmZXJlbmNlIHRvIHRoZSAnZmF2b3JTdHJhaWdodEVkZ2VzJyBvcHRpb24sIHdoaWNoIGRlY2lkZXMgd2hldGhlciBhIGJhbGFuY2VkIHBsYWNlbWVudCBvZiB0aGUgbm9kZXMgaXMgZGVzaXJlZCwgb3Igbm90LiBJbiBiayB0ZXJtcyB0aGlzIG1lYW5zIGNvbWJpbmluZyB0aGUgZm91ciBhbGlnbm1lbnRzIGludG8gYSBzaW5nbGUgYmFsYW5jZWQgb25lLCBvciBub3QuIFRoaXMgb3B0aW9uIG9uIHRoZSBvdGhlciBoYW5kIHRyaWVzIHRvIHN0cmFpZ2h0ZW4gYWRkaXRpb25hbCBlZGdlcyBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIGVhY2ggb2YgdGhlIGZvdXIgYWxpZ25tZW50cy4iKSxJQ3QpLHVzKSwkVHQpLHVuKHFuKSkpKSxjYShlLGFjdCxJNCxLd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxvY3QpLE4xZSksIkJLIEZpeGVkIEFsaWdubWVudCIpLCJUZWxscyB0aGUgQksgbm9kZSBwbGFjZXIgdG8gdXNlIGEgY2VydGFpbiBhbGlnbm1lbnQgKG91dCBvZiBpdHMgZm91cikgaW5zdGVhZCBvZiB0aGUgb25lIHByb2R1Y2luZyB0aGUgc21hbGxlc3QgaGVpZ2h0LCBvciB0aGUgY29tYmluYXRpb24gb2YgYWxsIGZvdXIuIiksT0N0KSx1cyksR1R0KSx1bihxbikpKSksY2EoZSxvY3QsSTQsUXdlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsY2N0KSwibm9kZVBsYWNlbWVudC5saW5lYXJTZWdtZW50cyIpLCJMaW5lYXIgU2VnbWVudHMgRGVmbGVjdGlvbiBEYW1wZW5pbmciKSwiRGFtcGVucyB0aGUgbW92ZW1lbnQgb2Ygbm9kZXMgdG8ga2VlcCB0aGUgZGlhZ3JhbSBmcm9tIGdldHRpbmcgdG9vIGxhcmdlLiIpLC4zKSxPbyksbGEpLHVuKHFuKSkpKSxjYShlLGNjdCxJNCxudmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSx1Y3QpLCJub2RlUGxhY2VtZW50Lm5ldHdvcmtTaW1wbGV4IiksIk5vZGUgRmxleGliaWxpdHkiKSwiQWltcyBhdCBzaG9ydGVyIGFuZCBzdHJhaWdodGVyIGVkZ2VzLiBUd28gY29uZmlndXJhdGlvbnMgYXJlIHBvc3NpYmxlOiAoYSkgYWxsb3cgcG9ydHMgdG8gbW92ZSBmcmVlbHkgb24gdGhlIHNpZGUgdGhleSBhcmUgYXNzaWduZWQgdG8gKHRoZSBvcmRlciBpcyBhbHdheXMgZGVmaW5lZCBiZWZvcmVoYW5kKSwgKGIpIGFkZGl0aW9uYWxseSBhbGxvdyB0byBlbmxhcmdlIGEgbm9kZSB3aGVyZXZlciBpdCBoZWxwcy4gSWYgdGhpcyBvcHRpb24gaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGEgbm9kZSwgdGhlICdub2RlRmxleGliaWxpdHkuZGVmYXVsdCcgdmFsdWUgaXMgdXNlZCwgd2hpY2ggaXMgc3BlY2lmaWVkIGZvciB0aGUgbm9kZSdzIHBhcmVudC4iKSx1cykseWh0KSx1bihlYSkpKSksY2EoZSx1Y3QsSTQsYXZlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsbGN0KSwibm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkiKSwiTm9kZSBGbGV4aWJpbGl0eSBEZWZhdWx0IiksIkRlZmF1bHQgdmFsdWUgb2YgdGhlICdub2RlRmxleGliaWxpdHknIG9wdGlvbiBmb3IgdGhlIGNoaWxkcmVuIG9mIGEgaGllcmFyY2hpY2FsIG5vZGUuIiksUEN0KSx1cykseWh0KSx1bihxbikpKSksY2EoZSxsY3QsSTQsc3ZlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsejZ0KSxCMWUpLCJTZWxmLUxvb3AgRGlzdHJpYnV0aW9uIiksIkFsdGVyIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIGxvb3BzIGFyb3VuZCB0aGUgbm9kZS4gSXQgb25seSB0YWtlcyBlZmZlY3QgZm9yIFBvcnRDb25zdHJhaW50cy5GUkVFLiIpLENDdCksdXMpLFc5dCksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxxNnQpLEIxZSksIlNlbGYtTG9vcCBPcmRlcmluZyIpLCJBbHRlciB0aGUgb3JkZXJpbmcgb2YgdGhlIGxvb3BzIHRoZXkgY2FuIGVpdGhlciBiZSBzdGFja2VkIG9yIHNlcXVlbmNlZC4gSXQgb25seSB0YWtlcyBlZmZlY3QgZm9yIFBvcnRDb25zdHJhaW50cy5GUkVFLiIpLF9DdCksdXMpLFk5dCksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxjSCksImVkZ2VSb3V0aW5nLnNwbGluZXMiKSwiU3BsaW5lIFJvdXRpbmcgTW9kZSIpLCJTcGVjaWZpZXMgdGhlIHdheSBjb250cm9sIHBvaW50cyBhcmUgYXNzZW1ibGVkIGZvciBlYWNoIGluZGl2aWR1YWwgZWRnZS4gQ09OU0VSVkFUSVZFIGVuc3VyZXMgdGhhdCBlZGdlcyBhcmUgcHJvcGVybHkgcm91dGVkIGFyb3VuZCB0aGUgbm9kZXMgYnV0IGZlZWxzIHJhdGhlciBvcnRob2dvbmFsIGF0IHRpbWVzLiBTTE9QUFkgdXNlcyBmZXdlciBjb250cm9sIHBvaW50cyB0byBvYnRhaW4gY3VydmllciBlZGdlIHJvdXRlcyBidXQgbWF5IHJlc3VsdCBpbiBlZGdlcyBvdmVybGFwcGluZyBub2Rlcy4iKSxTQ3QpLHVzKSxYOXQpLHVuKHFuKSkpKSxjYShlLGNILFFJLGt3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHVIKSwiZWRnZVJvdXRpbmcuc3BsaW5lcy5zbG9wcHkiKSwiU2xvcHB5IFNwbGluZSBMYXllciBTcGFjaW5nIEZhY3RvciIpLCJTcGFjaW5nIGZhY3RvciBmb3Igcm91dGluZyBhcmVhIGJldHdlZW4gbGF5ZXJzIHdoZW4gdXNpbmcgc2xvcHB5IHNwbGluZSByb3V0aW5nLiIpLC4yKSxPbyksbGEpLHVuKHFuKSkpKSxjYShlLHVILFFJLFR3ZSksY2EoZSx1SCxjSCxDd2UpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxoY3QpLCJlZGdlUm91dGluZy5wb2x5bGluZSIpLCJTbG9wZWQgRWRnZSBab25lIFdpZHRoIiksIldpZHRoIG9mIHRoZSBzdHJpcCB0byB0aGUgbGVmdCBhbmQgdG8gdGhlIHJpZ2h0IG9mIGVhY2ggbGF5ZXIgd2hlcmUgdGhlIHBvbHlsaW5lIGVkZ2Ugcm91dGVyIGlzIGFsbG93ZWQgdG8gcmVmcmFpbiBmcm9tIGVuc3VyaW5nIHRoYXQgZWRnZXMgYXJlIHJvdXRlZCBob3Jpem9udGFsbHkuIFRoaXMgcHJldmVudHMgYXdrd2FyZCBiZW5kIHBvaW50cyBmb3Igbm9kZXMgdGhhdCBleHRlbnQgYWxtb3N0IHRvIHRoZSBlZGdlIG9mIHRoZWlyIGxheWVyLiIpLDIpLE9vKSxsYSksdW4ocW4pKSkpLGNhKGUsaGN0LFFJLHZ3ZSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLEg2dCksUjEpLCJTcGFjaW5nIEJhc2UgVmFsdWUiKSwiQW4gb3B0aW9uYWwgYmFzZSB2YWx1ZSBmb3IgYWxsIG90aGVyIGxheW91dCBvcHRpb25zIG9mIHRoZSAnc3BhY2luZycgZ3JvdXAuIEl0IGNhbiBiZSB1c2VkIHRvIGNvbnZlbmllbnRseSBhbHRlciB0aGUgb3ZlcmFsbCAnc3BhY2lvdXNuZXNzJyBvZiB0aGUgZHJhd2luZy4gV2hlbmV2ZXIgYW4gZXhwbGljaXQgdmFsdWUgaXMgc2V0IGZvciB0aGUgb3RoZXIgbGF5b3V0IG9wdGlvbnMsIHRoaXMgYmFzZSB2YWx1ZSB3aWxsIGhhdmUgbm8gZWZmZWN0LiBUaGUgYmFzZSB2YWx1ZSBpcyBub3QgaW5oZXJpdGVkLCBpLmUuIGl0IG11c3QgYmUgc2V0IGZvciBlYWNoIGhpZXJhcmNoaWNhbCBub2RlLiIpLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxWNnQpLFIxKSwiRWRnZSBOb2RlIEJldHdlZW4gTGF5ZXJzIFNwYWNpbmciKSwiVGhlIHNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gbm9kZXMgYW5kIGVkZ2VzIHRoYXQgYXJlIHJvdXRlZCBuZXh0IHRvIHRoZSBub2RlJ3MgbGF5ZXIuIEZvciB0aGUgc3BhY2luZyBiZXR3ZWVuIG5vZGVzIGFuZCBlZGdlcyB0aGF0IGNyb3NzIHRoZSBub2RlJ3MgbGF5ZXIgJ3NwYWNpbmcuZWRnZU5vZGUnIGlzIHVzZWQuIiksMTApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxHNnQpLFIxKSwiRWRnZSBFZGdlIEJldHdlZW4gTGF5ZXIgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIHBhaXJzIG9mIGVkZ2VzIHRoYXQgYXJlIHJvdXRlZCBiZXR3ZWVuIHRoZSBzYW1lIHBhaXIgb2YgbGF5ZXJzLiBOb3RlIHRoYXQgJ3NwYWNpbmcuZWRnZUVkZ2UnIGlzIHVzZWQgZm9yIHRoZSBzcGFjaW5nIGJldHdlZW4gcGFpcnMgb2YgZWRnZXMgY3Jvc3NpbmcgdGhlIHNhbWUgbGF5ZXIuIiksMTApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxVNnQpLFIxKSwiTm9kZSBOb2RlIEJldHdlZW4gTGF5ZXJzIFNwYWNpbmciKSwiVGhlIHNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYW55IHBhaXIgb2Ygbm9kZXMgb2YgdHdvIGFkamFjZW50IGxheWVycy4gTm90ZSB0aGF0ICdzcGFjaW5nLm5vZGVOb2RlJyBpcyB1c2VkIGZvciB0aGUgc3BhY2luZyBiZXR3ZWVuIG5vZGVzIHdpdGhpbiB0aGUgbGF5ZXIgaXRzZWxmLiIpLDIwKSxPbyksbGEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsVzZ0KSxua3QpLCJEaXJlY3Rpb24gUHJpb3JpdHkiKSwiRGVmaW5lcyBob3cgaW1wb3J0YW50IGl0IGlzIHRvIGhhdmUgYSBjZXJ0YWluIGVkZ2UgcG9pbnQgaW50byB0aGUgZGlyZWN0aW9uIG9mIHRoZSBvdmVyYWxsIGxheW91dC4gVGhpcyBvcHRpb24gaXMgZXZhbHVhdGVkIGR1cmluZyB0aGUgY3ljbGUgYnJlYWtpbmcgcGhhc2UuIikscGUoMCkpLGdjKSxqYSksdW4oUGQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxZNnQpLG5rdCksIlNob3J0bmVzcyBQcmlvcml0eSIpLCJEZWZpbmVzIGhvdyBpbXBvcnRhbnQgaXQgaXMgdG8ga2VlcCBhbiBlZGdlIGFzIHNob3J0IGFzIHBvc3NpYmxlLiBUaGlzIG9wdGlvbiBpcyBldmFsdWF0ZWQgZHVyaW5nIHRoZSBsYXllcmluZyBwaGFzZS4iKSxwZSgwKSksZ2MpLGphKSx1bihQZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEs2dCksbmt0KSwiU3RyYWlnaHRuZXNzIFByaW9yaXR5IiksIkRlZmluZXMgaG93IGltcG9ydGFudCBpdCBpcyB0byBrZWVwIGFuIGVkZ2Ugc3RyYWlnaHQsIGkuZS4gYWxpZ25lZCB3aXRoIG9uZSBvZiB0aGUgdHdvIGF4ZXMuIFRoaXMgb3B0aW9uIGlzIGV2YWx1YXRlZCBkdXJpbmcgbm9kZSBwbGFjZW1lbnQuIikscGUoMCkpLGdjKSxqYSksdW4oUGQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxmY3QpLHJrdCksSmZlKSwiVHJpZXMgdG8gZnVydGhlciBjb21wYWN0IGNvbXBvbmVudHMgKGRpc2Nvbm5lY3RlZCBzdWItZ3JhcGhzKS4iKSwhMSksTGEpLFJzKSx1bihxbikpKSksY2EoZSxmY3QsUl8sITApLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxYNnQpLFIxZSksIlBvc3QgQ29tcGFjdGlvbiBTdHJhdGVneSIpLGoxZSksZ0N0KSx1cyksUVR0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFE2dCksUjFlKSwiUG9zdCBDb21wYWN0aW9uIENvbnN0cmFpbnQgQ2FsY3VsYXRpb24iKSxqMWUpLGRDdCksdXMpLExUdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxsSCksaWt0KSwiSGlnaCBEZWdyZWUgTm9kZSBUcmVhdG1lbnQiKSwiTWFrZXMgcm9vbSBhcm91bmQgaGlnaCBkZWdyZWUgbm9kZXMgdG8gcGxhY2UgbGVhZnMgYW5kIHRyZWVzLiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZGN0KSxpa3QpLCJIaWdoIERlZ3JlZSBOb2RlIFRocmVzaG9sZCIpLCJXaGV0aGVyIGEgbm9kZSBpcyBjb25zaWRlcmVkIHRvIGhhdmUgYSBoaWdoIGRlZ3JlZS4iKSxwZSgxNikpLGdjKSxqYSksdW4ocW4pKSkpLGNhKGUsZGN0LGxILCEwKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZ2N0KSxpa3QpLCJIaWdoIERlZ3JlZSBOb2RlIE1heGltdW0gVHJlZSBIZWlnaHQiKSwiTWF4aW11bSBoZWlnaHQgb2YgYSBzdWJ0cmVlIGNvbm5lY3RlZCB0byBhIGhpZ2ggZGVncmVlIG5vZGUgdG8gYmUgbW92ZWQgdG8gc2VwYXJhdGUgbGF5ZXJzLiIpLHBlKDUpKSxnYyksamEpLHVuKHFuKSkpKSxjYShlLGdjdCxsSCwhMCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHRnKSxza3QpLCJHcmFwaCBXcmFwcGluZyBTdHJhdGVneSIpLCJGb3IgY2VydGFpbiBncmFwaHMgYW5kIGNlcnRhaW4gcHJlc2NyaWJlZCBkcmF3aW5nIGFyZWFzIGl0IG1heSBiZSBkZXNpcmFibGUgdG8gc3BsaXQgdGhlIGxhaWQgb3V0IGdyYXBoIGludG8gY2h1bmtzIHRoYXQgYXJlIHBsYWNlZCBzaWRlIGJ5IHNpZGUuIFRoZSBlZGdlcyB0aGF0IGNvbm5lY3QgZGlmZmVyZW50IGNodW5rcyBhcmUgJ3dyYXBwZWQnIGFyb3VuZCBmcm9tIHRoZSBlbmQgb2Ygb25lIGNodW5rIHRvIHRoZSBzdGFydCBvZiB0aGUgb3RoZXIgY2h1bmsuIFRoZSBwb2ludHMgYmV0d2VlbiB0aGUgY2h1bmtzIGFyZSByZWZlcnJlZCB0byBhcyAnY3V0cycuIiksakN0KSx1cyksdF90KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGhIKSxza3QpLCJBZGRpdGlvbmFsIFdyYXBwZWQgRWRnZXMgU3BhY2luZyIpLCJUbyB2aXN1YWxseSBzZXBhcmF0ZSBlZGdlcyB0aGF0IGFyZSB3cmFwcGVkIGZyb20gcmVndWxhcmx5IHJvdXRlZCBlZGdlcyBhbiBhZGRpdGlvbmFsIHNwYWNpbmcgdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtIG9mIHRoaXMgbGF5b3V0IG9wdGlvbi4gVGhlIHNwYWNpbmcgaXMgYWRkZWQgdG8gdGhlIHJlZ3VsYXIgZWRnZU5vZGUgc3BhY2luZy4iKSwxMCksT28pLGxhKSx1bihxbikpKSksY2EoZSxoSCx0ZyxtdmUpLGNhKGUsaEgsdGcseXZlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZkgpLHNrdCksIkNvcnJlY3Rpb24gRmFjdG9yIGZvciBXcmFwcGluZyIpLCJBdCB0aW1lcyBhbmQgZm9yIGNlcnRhaW4gdHlwZXMgb2YgZ3JhcGhzIHRoZSBleGVjdXRlZCB3cmFwcGluZyBtYXkgcHJvZHVjZSByZXN1bHRzIHRoYXQgYXJlIGNvbnNpc3RlbnRseSBiaWFzZWQgaW4gdGhlIHNhbWUgZmFzaGlvbjogZWl0aGVyIHdyYXBwaW5nIHRvIG9mdGVuIG9yIHRvIHJhcmVseS4gVGhpcyBmYWN0b3IgY2FuIGJlIHVzZWQgdG8gY29ycmVjdCB0aGUgYmlhcy4gSW50ZXJuYWxseSwgaXQgaXMgc2ltcGx5IG11bHRpcGxpZWQgd2l0aCB0aGUgJ2FzcGVjdCByYXRpbycgbGF5b3V0IG9wdGlvbi4iKSwxKSxPbyksbGEpLHVuKHFuKSkpKSxjYShlLGZILHRnLGt2ZSksY2EoZSxmSCx0ZyxFdmUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxWXyksJDFlKSwiQ3V0dGluZyBTdHJhdGVneSIpLCJUaGUgc3RyYXRlZ3kgYnkgd2hpY2ggdGhlIGxheWVyIGluZGV4ZXMgYXJlIGRldGVybWluZWQgYXQgd2hpY2ggdGhlIGxheWVyaW5nIGNydW1ibGVzIGludG8gY2h1bmtzLiIpLFJDdCksdXMpLE9UdCksdW4ocW4pKSkpLGNhKGUsVl8sdGcsTHZlKSxjYShlLFZfLHRnLE12ZSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLHBjdCksJDFlKSwiTWFudWFsbHkgU3BlY2lmaWVkIEN1dHMiKSwiQWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgaGVyIG93biBjdXRzIGZvciBhIGNlcnRhaW4gZ3JhcGguIiksVjEpLHdoKSx1bihxbikpKSksY2EoZSxwY3QsVl8sQ3ZlKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsYmN0KSwid3JhcHBpbmcuY3V0dGluZy5tc2QiKSwiTVNEIEZyZWVkb20iKSwiVGhlIE1TRCBjdXR0aW5nIHN0cmF0ZWd5IHN0YXJ0cyB3aXRoIGFuIGluaXRpYWwgZ3Vlc3Mgb24gdGhlIG51bWJlciBvZiBjaHVua3MgdGhlIGdyYXBoIHNob3VsZCBiZSBzcGxpdCBpbnRvLiBUaGUgZnJlZWRvbSBzcGVjaWZpZXMgaG93IG11Y2ggdGhlIHN0cmF0ZWd5IG1heSBkZXZpYXRlIGZyb20gdGhpcyBndWVzcy4gRS5nLiBpZiBhbiBpbml0aWFsIG51bWJlciBvZiAzIGlzIGNvbXB1dGVkLCBhIGZyZWVkb20gb2YgMSBhbGxvd3MgMiwgMywgYW5kIDQgY3V0cy4iKSxCQ3QpLGdjKSxqYSksdW4ocW4pKSkpLGNhKGUsYmN0LFZfLFN2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGRIKSx6MWUpLCJWYWxpZGlmaWNhdGlvbiBTdHJhdGVneSIpLCJXaGVuIHdyYXBwaW5nIGdyYXBocywgb25lIGNhbiBzcGVjaWZ5IGluZGljZXMgdGhhdCBhcmUgbm90IGFsbG93ZWQgYXMgc3BsaXQgcG9pbnRzLiBUaGUgdmFsaWRpZmljYXRpb24gc3RyYXRlZ3kgbWFrZXMgc3VyZSBldmVyeSBjb21wdXRlZCBzcGxpdCBwb2ludCBpcyBhbGxvd2VkLiIpLCRDdCksdXMpLEo5dCksdW4ocW4pKSkpLGNhKGUsZEgsdGcscXZlKSxjYShlLGRILHRnLEh2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGdIKSx6MWUpLCJWYWxpZCBJbmRpY2VzIGZvciBXcmFwcGluZyIpLG51bGwpLFYxKSx3aCksdW4ocW4pKSkpLGNhKGUsZ0gsdGcsanZlKSxjYShlLGdILHRnLCR2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHBIKSxha3QpLCJJbXByb3ZlIEN1dHMiKSwiRm9yIGdlbmVyYWwgZ3JhcGhzIGl0IGlzIGltcG9ydGFudCB0aGF0IG5vdCB0b28gbWFueSBlZGdlcyB3cmFwIGJhY2t3YXJkcy4gVGh1cyBhIGNvbXByb21pc2UgYmV0d2VlbiBldmVubHktZGlzdHJpYnV0ZWQgY3V0cyBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiBjdXQgZWRnZXMgaXMgc291Z2h0LiIpLCEwKSxMYSksUnMpLHVuKHFuKSkpKSxjYShlLHBILHRnLFB2ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGJIKSxha3QpLCJEaXN0YW5jZSBQZW5hbHR5IFdoZW4gSW1wcm92aW5nIEN1dHMiKSxudWxsKSwyKSxPbyksbGEpLHVuKHFuKSkpKSxjYShlLGJILHRnLEl2ZSksY2EoZSxiSCxwSCwhMCksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHdjdCksYWt0KSwiSW1wcm92ZSBXcmFwcGVkIEVkZ2VzIiksIlRoZSBpbml0aWFsIHdyYXBwaW5nIGlzIHBlcmZvcm1lZCBpbiBhIHZlcnkgc2ltcGxlIHdheS4gQXMgYSBjb25zZXF1ZW5jZSwgZWRnZXMgdGhhdCB3cmFwIGZyb20gb25lIGNodW5rIHRvIGFub3RoZXIgbWF5IGJlIHVubmVjZXNzYXJpbHkgbG9uZy4gQWN0aXZhdGluZyB0aGlzIG9wdGlvbiB0cmllcyB0byBzaG9ydGVuIHN1Y2ggZWRnZXMuIiksITApLExhKSxScyksdW4ocW4pKSkpLGNhKGUsd2N0LHRnLE52ZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFo2dCksa2N0KSwiRWRnZSBMYWJlbCBTaWRlIFNlbGVjdGlvbiIpLCJNZXRob2QgdG8gZGVjaWRlIG9uIGVkZ2UgbGFiZWwgc2lkZXMuIiksVEN0KSx1cyksUlR0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEo2dCksa2N0KSwiRWRnZSBDZW50ZXIgTGFiZWwgUGxhY2VtZW50IFN0cmF0ZWd5IiksIkRldGVybWluZXMgaW4gd2hpY2ggbGF5ZXIgY2VudGVyIGxhYmVscyBvZiBsb25nIGVkZ2VzIHNob3VsZCBiZSBwbGFjZWQuIiksRUN0KSx1cyksYjcpLGppKHFuLGx0KGN0KGlwLDEpLG9lLDE3NSwwLFtycF0pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsd0gpLFpJKSwiQ29uc2lkZXIgTW9kZWwgT3JkZXIiKSwiUHJlc2VydmVzIHRoZSBvcmRlciBvZiBub2RlcyBhbmQgZWRnZXMgaW4gdGhlIG1vZGVsIGZpbGUgaWYgdGhpcyBkb2VzIG5vdCBsZWFkIHRvIGFkZGl0aW9uYWwgZWRnZSBjcm9zc2luZ3MuIERlcGVuZGluZyBvbiB0aGUgc3RyYXRlZ3kgdGhpcyBpcyBub3QgYWx3YXlzIHBvc3NpYmxlIHNpbmNlIHRoZSBub2RlIGFuZCBlZGdlIG9yZGVyIG1pZ2h0IGJlIGNvbmZsaWN0aW5nLiIpLHdDdCksdXMpLEg5dCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx0a3QpLFpJKSwiTm8gTW9kZWwgT3JkZXIiKSwiU2V0IG9uIGEgbm9kZSB0byBub3Qgc2V0IGEgbW9kZWwgb3JkZXIgZm9yIHRoaXMgbm9kZSBldmVuIHRob3VnaCBpdCBpcyBhIHJlYWwgbm9kZS4iKSwhMSksTGEpLFJzKSx1bihlYSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHZjdCksWkkpLCJDb25zaWRlciBNb2RlbCBPcmRlciBmb3IgQ29tcG9uZW50cyIpLCJJZiBzZXQgdG8gTk9ORSB0aGUgdXN1YWwgb3JkZXJpbmcgc3RyYXRlZ3kgKGJ5IGN1bXVsYXRpdmUgbm9kZSBwcmlvcml0eSBhbmQgc2l6ZSBvZiBub2RlcykgaXMgdXNlZC4gSU5TSURFX1BPUlRfU0lERVMgb3JkZXJzIHRoZSBjb21wb25lbnRzIHdpdGggZXh0ZXJuYWwgcG9ydHMgb25seSBpbnNpZGUgdGhlIGdyb3VwcyB3aXRoIHRoZSBzYW1lIHBvcnQgc2lkZS4gRk9SQ0VfTU9ERUxfT1JERVIgZW5mb3JjZXMgdGhlIG1vZGUgb3JkZXIgb24gY29tcG9uZW50cy4gVGhpcyBvcHRpb24gbWlnaHQgcHJvZHVjZSBiYWQgYWxpZ25tZW50cyBhbmQgc3ViIG9wdGltYWwgZHJhd2luZ3MgaW4gdGVybXMgb2YgdXNlZCBhcmVhIHNpbmNlIHRoZSBvcmRlcmluZyBzaG91bGQgYmUgcmVzcGVjdGVkLiIpLHBDdCksdXMpLEY3dCksdW4ocW4pKSkpLGNhKGUsdmN0LFJfLG51bGwpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxla3QpLFpJKSwiTG9uZyBFZGdlIE9yZGVyaW5nIFN0cmF0ZWd5IiksIkluZGljYXRlcyB3aGV0aGVyIGxvbmcgZWRnZXMgYXJlIHNvcnRlZCB1bmRlciwgb3Zlciwgb3IgZXF1YWwgdG8gbm9kZXMgdGhhdCBoYXZlIG5vIGNvbm5lY3Rpb24gdG8gYSBwcmV2aW91cyBsYXllciBpbiBhIGxlZnQtdG8tcmlnaHQgb3IgcmlnaHQtdG8tbGVmdCBsYXlvdXQuIFVuZGVyIGFuZCBvdmVyIGNoYW5nZXMgdG8gcmlnaHQgYW5kIGxlZnQgaW4gYSB2ZXJ0aWNhbCBsYXlvdXQuIiksYkN0KSx1cyksUDl0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG1jdCksWkkpLCJDcm9zc2luZyBDb3VudGVyIE5vZGUgT3JkZXIgSW5mbHVlbmNlIiksIkluZGljYXRlcyB3aXRoIHdoYXQgcGVyY2VudGFnZSAoMSBmb3IgMTAwJSkgdmlvbGF0aW9ucyBvZiB0aGUgbm9kZSBtb2RlbCBvcmRlciBhcmUgd2VpZ2h0ZWQgYWdhaW5zdCB0aGUgY3Jvc3NpbmdzIGUuZy4gYSB2YWx1ZSBvZiAwLjUgbWVhbnMgdHdvIG1vZGVsIG9yZGVyIHZpb2xhdGlvbnMgYXJlIGFzIGltcG9ydGFudCBhcyBvbiBlZGdlIGNyb3NzaW5nLiBUaGlzIGFsbG93cyBzb21lIGVkZ2UgY3Jvc3NpbmdzIGluIGZhdm9yIG9mIHByZXNlcnZpbmcgdGhlIG1vZGVsIG9yZGVyLiBJdCBpcyBhZHZpc2VkIHRvIHNldCB0aGlzIHZhbHVlIHRvIGEgdmVyeSBzbWFsbCBwb3NpdGl2ZSB2YWx1ZSAoZS5nLiAwLjAwMSkgdG8gaGF2ZSBtaW5pbWFsIGNyb3NzaW5nIGFuZCBhIG9wdGltYWwgbm9kZSBvcmRlci4gRGVmYXVsdHMgdG8gbm8gaW5mbHVlbmNlICgwKS4iKSwwKSxPbyksbGEpLHVuKHFuKSkpKSxjYShlLG1jdCx3SCxudWxsKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUseWN0KSxaSSksIkNyb3NzaW5nIENvdW50ZXIgUG9ydCBPcmRlciBJbmZsdWVuY2UiKSwiSW5kaWNhdGVzIHdpdGggd2hhdCBwZXJjZW50YWdlICgxIGZvciAxMDAlKSB2aW9sYXRpb25zIG9mIHRoZSBwb3J0IG1vZGVsIG9yZGVyIGFyZSB3ZWlnaHRlZCBhZ2FpbnN0IHRoZSBjcm9zc2luZ3MgZS5nLiBhIHZhbHVlIG9mIDAuNSBtZWFucyB0d28gbW9kZWwgb3JkZXIgdmlvbGF0aW9ucyBhcmUgYXMgaW1wb3J0YW50IGFzIG9uIGVkZ2UgY3Jvc3NpbmcuIFRoaXMgYWxsb3dzIHNvbWUgZWRnZSBjcm9zc2luZ3MgaW4gZmF2b3Igb2YgcHJlc2VydmluZyB0aGUgbW9kZWwgb3JkZXIuIEl0IGlzIGFkdmlzZWQgdG8gc2V0IHRoaXMgdmFsdWUgdG8gYSB2ZXJ5IHNtYWxsIHBvc2l0aXZlIHZhbHVlIChlLmcuIDAuMDAxKSB0byBoYXZlIG1pbmltYWwgY3Jvc3NpbmcgYW5kIGEgb3B0aW1hbCBwb3J0IG9yZGVyLiBEZWZhdWx0cyB0byBubyBpbmZsdWVuY2UgKDApLiIpLDApLE9vKSxsYSksdW4ocW4pKSkpLGNhKGUseWN0LHdILG51bGwpLGlmZSgobmV3IEhCLGUpKX07dmFyIEgyZSxWMmUsRzJlLGRDdCxVMmUsZ0N0LFcyZSxwQ3QsWTJlLEsyZSxYMmUsYkN0LFEyZSxaMmUsd0N0LEoyZSx0d2UsZXdlLHZDdCxud2UscndlLGl3ZSxtQ3Qsc3dlLGF3ZSxvd2UsY3dlLHV3ZSxsd2UsaHdlLGZ3ZSx5Q3QsZHdlLHhDdCxnd2Usa0N0LHB3ZSxFQ3QsYndlLFRDdCx3d2UsdndlLG13ZSxDQ3QseXdlLF9DdCx4d2UsU0N0LGt3ZSxFd2UsVHdlLEN3ZSxfd2UsU3dlLEF3ZSxMd2UsTXdlLER3ZSxBQ3QsSXdlLE93ZSxQd2UsRndlLE53ZSxCd2UsTEN0LFJ3ZSxqd2UsJHdlLHp3ZSxxd2UsSHdlLFZ3ZSxNQ3QsR3dlLERDdCxVd2UsV3dlLFl3ZSxJQ3QsS3dlLFh3ZSxPQ3QsUXdlLFp3ZSxKd2UsdHZlLGV2ZSxudmUscnZlLGl2ZSxQQ3Qsc3ZlLGF2ZSxvdmUsRkN0LGN2ZSxOQ3QsdXZlLGx2ZSxodmUsZnZlLGR2ZSxndmUscHZlLGJ2ZSx3dmUsdnZlLG12ZSx5dmUseHZlLGt2ZSxFdmUsVHZlLEN2ZSxfdmUsQkN0LFN2ZSxBdmUsUkN0LEx2ZSxNdmUsRHZlLEl2ZSxPdmUsUHZlLEZ2ZSxOdmUsQnZlLGpDdCxSdmUsanZlLCR2ZSx6dmUsJEN0LHF2ZSxIdmU7RihrYywiTGF5ZXJlZE1ldGFEYXRhUHJvdmlkZXIiLDg0OCksRCg5ODYsMSxPaCxIQiksbC5RZT1mdW5jdGlvbihlKXtpZmUoZSl9O3ZhciBJZCxabHQsckcsQ1MsaUcsekN0LHNHLHE2LGFHLHFDdCxIQ3QsSmx0LHdiLHRodCwkeSxWQ3QsRE8sZWh0LEdDdCxWdmUsb0csbmh0LF9TLHp5LEd2ZSxXbCxVQ3QsV0N0LGNHLHJodCxPZCx1RyxlZyxZQ3QsS0N0LFhDdCxpaHQsc2h0LFFDdCxKZyxhaHQsWkN0LHF5LEpDdCx0OXQsZTl0LGxHLEh5LGoyLG45dCxyOXQsU28saTl0LFV2ZSx1dSxoRyxzOXQsYTl0LG85dCxvaHQsYzl0LGZHLHU5dCxsOXQsZEcsTnYsaDl0LGNodCxTUyxmOXQsQnYsQVMsZ0csJDIsdWh0LEU3LHBHLHoyLGQ5dCxnOXQscDl0LFQ3LGI5dCxXdmUsWXZlLEt2ZSxYdmUsUnYsVnksY3MsdHAsUXZlLEd5LHc5dCxDNyx2OXQsVXksWnZlLF83LG05dCxINixKdmUsdG1lLElPLGxodCx5OXQsT08sVGYsSjQsVjYsanYscTIsYkcsV3ksaGh0LFM3LEE3LCR2LHQ1LGZodCxQTyxMUyxNUyxkaHQseDl0LGs5dCxFOXQsVDl0LGdodCxDOXQsXzl0LFM5dCxBOXQscGh0LHdHO0Yoa2MsIkxheWVyZWRPcHRpb25zIiw5ODYpLEQoOTg3LDEse30sZlEpLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgZ3F0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxGKGtjLCJMYXllcmVkT3B0aW9ucy9MYXllcmVkRmFjdG9yeSIsOTg3KSxEKDEzNzIsMSx7fSksbC5hPTA7dmFyIGVtZTtGKEVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlciIsMTM3MiksRCg3NzksMTM3Mix7fSx3M3QpO3ZhciB2RyxubWU7RihrYywiTGF5ZXJlZFNwYWNpbmdzL0xheWVyZWRTcGFjaW5nc0J1aWxkZXIiLDc3OSksRCgzMTMsMjIsezM6MSwzNToxLDIyOjEsMzEzOjEsMjQ2OjEsMjM0OjF9LG45KSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIEJjZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBCY2UodGhpcyl9O3ZhciBiaHQsTDl0LE05dCxtRyx3aHQsRDl0LEk5dD1qcihrYywiTGF5ZXJpbmdTdHJhdGVneSIsMzEzLEhyLFphbixHSmUpLHJtZTtEKDM3OCwyMix7MzoxLDM1OjEsMjI6MSwzNzg6MX0samV0KTt2YXIgdmh0LE85dCx5RyxQOXQ9anIoa2MsIkxvbmdFZGdlT3JkZXJpbmdTdHJhdGVneSIsMzc4LEhyLE1pbixVSmUpLGltZTtEKDE5NywyMix7MzoxLDM1OjEsMjI6MSwxOTc6MX0sbmopO3ZhciBlNSxuNSx4RyxtaHQseWh0PWpyKGtjLCJOb2RlRmxleGliaWxpdHkiLDE5NyxIcixCc24sV0plKSxzbWU7RCgzMTUsMjIsezM6MSwzNToxLDIyOjEsMzE1OjEsMjQ2OjEsMjM0OjF9LExNKSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIHhjZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiB4Y2UodGhpcyl9O3ZhciBEUyx4aHQsa2h0LElTLEY5dCxOOXQ9anIoa2MsIk5vZGVQbGFjZW1lbnRTdHJhdGVneSIsMzE1LEhyLHlhbixKSmUpLGFtZTtEKDI2MCwyMix7MzoxLDM1OjEsMjI6MSwyNjA6MX0sSXgpO3ZhciBCOXQsRk8sUjl0LGo5dCxOTywkOXQsa0csRUcsejl0PWpyKGtjLCJOb2RlUHJvbW90aW9uU3RyYXRlZ3kiLDI2MCxIcixRb24sS0plKSxvbWU7RCgzMzksMjIsezM6MSwzNToxLDIyOjEsMzM5OjF9LCRldCk7dmFyIHE5dCx2YixFaHQsSDl0PWpyKGtjLCJPcmRlcmluZ1N0cmF0ZWd5IiwzMzksSHIsUmluLFhKZSksY21lO0QoNDIxLDIyLHszOjEsMzU6MSwyMjoxLDQyMToxfSx6YnQpO3ZhciBUaHQsQ2h0LFY5dD1qcihrYywiUG9ydFNvcnRpbmdTdHJhdGVneSIsNDIxLEhyLHpybixRSmUpLHVtZTtEKDQ1MiwyMix7MzoxLDM1OjEsMjI6MSw0NTI6MX0semV0KTt2YXIgdGwsbnUsT1MsbG1lPWpyKGtjLCJQb3J0VHlwZSIsNDUyLEhyLEJpbixZSmUpLGhtZTtEKDM3NSwyMix7MzoxLDM1OjEsMjI6MSwzNzU6MX0scWV0KTt2YXIgRzl0LF9odCxVOXQsVzl0PWpyKGtjLCJTZWxmTG9vcERpc3RyaWJ1dGlvblN0cmF0ZWd5IiwzNzUsSHIsamluLFpKZSksZm1lO0QoMzc2LDIyLHszOjEsMzU6MSwyMjoxLDM3NjoxfSxxYnQpO3ZhciBCTyxTaHQsWTl0PWpyKGtjLCJTZWxmTG9vcE9yZGVyaW5nU3RyYXRlZ3kiLDM3NixIcixOcm4sdHRuKSxkbWU7RCgzMDQsMSx7MzA0OjF9LGFoZSksRihrYywiU3BhY2luZ3MiLDMwNCksRCgzMzYsMjIsezM6MSwzNToxLDIyOjEsMzM2OjF9LEhldCk7dmFyIEFodCxLOXQsUFMsWDl0PWpyKGtjLCJTcGxpbmVSb3V0aW5nTW9kZSIsMzM2LEhyLHppbixldG4pLGdtZTtEKDMzOCwyMix7MzoxLDM1OjEsMjI6MSwzMzg6MX0sVmV0KTt2YXIgTGh0LFE5dCxaOXQsSjl0PWpyKGtjLCJWYWxpZGlmeVN0cmF0ZWd5IiwzMzgsSHIscWluLG50bikscG1lO0QoMzc3LDIyLHszOjEsMzU6MSwyMjoxLDM3NzoxfSxHZXQpO3ZhciBZeSxNaHQsTDcsdF90PWpyKGtjLCJXcmFwcGluZ1N0cmF0ZWd5IiwzNzcsSHIsJGluLHJ0biksYm1lO0QoMTM4MywxLHpjLGF0dCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDM3KSx3bWV9LGwucGY9ZnVuY3Rpb24oZSxuKXtJM24odGhpcyx1KGUsMzcpLG4pfTt2YXIgd21lO0YoeEgsIkRlcHRoRmlyc3RDeWNsZUJyZWFrZXIiLDEzODMpLEQoNzgyLDEsemMsZXZ0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLHZtZX0sbC5wZj1mdW5jdGlvbihlLG4pe014bih0aGlzLHUoZSwzNyksbil9LGwuWmY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoTmUoZSxaeih0aGlzLmQsZS5jLmxlbmd0aCkpLDEwKX07dmFyIHZtZTtGKHhILCJHcmVlZHlDeWNsZUJyZWFrZXIiLDc4MiksRCgxMzg2LDc4Mix6YyxXR3QpLGwuWmY9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKG89bnVsbCxuPXdpLHM9bmV3IFMoZSk7cy5hPHMuYy5jLmxlbmd0aDspcj11KEoocyksMTApLFVzKHIsKGFlKCksVGMpKSYmdShRKHIsVGMpLDE5KS5hPG4mJihuPXUoUShyLFRjKSwxOSkuYSxvPXIpO3JldHVybiBvfHx1KE5lKGUsWnoodGhpcy5kLGUuYy5sZW5ndGgpKSwxMCl9LEYoeEgsIkdyZWVkeU1vZGVsT3JkZXJDeWNsZUJyZWFrZXIiLDEzODYpLEQoMTM4NCwxLHpjLFpKKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLG1tZX0sbC5wZj1mdW5jdGlvbihlLG4pe3Q0bih0aGlzLHUoZSwzNyksbil9O3ZhciBtbWU7Rih4SCwiSW50ZXJhY3RpdmVDeWNsZUJyZWFrZXIiLDEzODQpLEQoMTM4NSwxLHpjLEpKKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLHltZX0sbC5wZj1mdW5jdGlvbihlLG4pe2U0bih0aGlzLHUoZSwzNyksbil9LGwuYT0wLGwuYj0wO3ZhciB5bWU7Rih4SCwiTW9kZWxPcmRlckN5Y2xlQnJlYWtlciIsMTM4NSksRCgxMzg5LDEsemMsalZ0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLHhtZX0sbC5wZj1mdW5jdGlvbihlLG4pe1B4bih0aGlzLHUoZSwzNyksbil9O3ZhciB4bWU7RihfeSwiQ29mZm1hbkdyYWhhbUxheWVyZXIiLDEzODkpLEQoMTM5MCwxLE9pLHBSKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGNibih0aGlzLmEsdShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKF95LCJDb2ZmbWFuR3JhaGFtTGF5ZXJlci8wbWV0aG9kcmVmJGNvbXBhcmVOb2Rlc0luVG9wbyRUeXBlIiwxMzkwKSxEKDEzOTEsMSxPaSxYdHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWWVuKHRoaXMuYSx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoX3ksIkNvZmZtYW5HcmFoYW1MYXllcmVyL2xhbWJkYSQxJFR5cGUiLDEzOTEpLEQoMTM5MiwxLHpjLEJMKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLGJpKGJpKGJpKG5ldyBWcywoV2EoKSxEZCksKHJvKCksZ2x0KSksZ2IsaDcpLGN1LGw3KX0sbC5wZj1mdW5jdGlvbihlLG4pe0I1bih0aGlzLHUoZSwzNyksbil9LEYoX3ksIkludGVyYWN0aXZlTGF5ZXJlciIsMTM5MiksRCg1NjksMSx7NTY5OjF9LGtxdCksbC5hPTAsbC5jPTAsRihfeSwiSW50ZXJhY3RpdmVMYXllcmVyL0xheWVyU3BhbiIsNTY5KSxEKDEzODgsMSx6YyxxQiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDM3KSxrbWV9LGwucGY9ZnVuY3Rpb24oZSxuKXtkdm4odGhpcyx1KGUsMzcpLG4pfTt2YXIga21lO0YoX3ksIkxvbmdlc3RQYXRoTGF5ZXJlciIsMTM4OCksRCgxMzk1LDEsemMsbnR0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLGJpKGJpKGJpKG5ldyBWcywoV2EoKSxEZCksKHJvKCksZ1MpKSxnYixoNyksY3UsbDcpfSxsLnBmPWZ1bmN0aW9uKGUsbil7YXhuKHRoaXMsdShlLDM3KSxuKX0sbC5hPTAsbC5iPTAsbC5kPTA7dmFyIGVfdCxuX3Q7RihfeSwiTWluV2lkdGhMYXllcmVyIiwxMzk1KSxEKDEzOTYsMSxPaSxTcCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBldW4odGhpcyx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoX3ksIk1pbldpZHRoTGF5ZXJlci9NaW5PdXRnb2luZ0VkZ2VzQ29tcGFyYXRvciIsMTM5NiksRCgxMzg3LDEsemMsZXR0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzcpLEVtZX0sbC5wZj1mdW5jdGlvbihlLG4pe1Q0bih0aGlzLHUoZSwzNyksbil9O3ZhciBFbWU7RihfeSwiTmV0d29ya1NpbXBsZXhMYXllcmVyIiwxMzg3KSxEKDEzOTMsMSx6YyxhWXQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzNyksYmkoYmkoYmkobmV3IFZzLChXYSgpLERkKSwocm8oKSxnUykpLGdiLGg3KSxjdSxsNyl9LGwucGY9ZnVuY3Rpb24oZSxuKXtoNW4odGhpcyx1KGUsMzcpLG4pfSxsLmQ9MCxsLmY9MCxsLmc9MCxsLmk9MCxsLnM9MCxsLnQ9MCxsLnU9MCxGKF95LCJTdHJldGNoV2lkdGhMYXllcmVyIiwxMzkzKSxEKDEzOTQsMSxPaSxkUSksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBJYW4odShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKF95LCJTdHJldGNoV2lkdGhMYXllcmVyLzEiLDEzOTQpLEQoNDAyLDEscWt0KSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuX2Y9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBubGUodGhpcyxlLG4scil9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLmc9TnQoYTMsSDFlLDI1LHRoaXMuZCwxNSwxKSx0aGlzLmY9TnQoYTMsSDFlLDI1LHRoaXMuZCwxNSwxKX0sbC5PZj1mdW5jdGlvbihlLG4pe3RoaXMuZVtlXT1OdChDcixYciwyNSxuW2VdLmxlbmd0aCwxNSwxKX0sbC5QZj1mdW5jdGlvbihlLG4scil7dmFyIHM7cz1yW2VdW25dLHMucD1uLHRoaXMuZVtlXVtuXT1ufSxsLlFmPWZ1bmN0aW9uKGUsbixyLHMpe3UoTmUoc1tlXVtuXS5qLHIpLDExKS5wPXRoaXMuZCsrfSxsLmI9MCxsLmM9MCxsLmQ9MCxGKHF1LCJBYnN0cmFjdEJhcnljZW50ZXJQb3J0RGlzdHJpYnV0b3IiLDQwMiksRCgxNjMzLDEsT2ksaE0pLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQ2ZuKHRoaXMuYSx1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYocXUsIkFic3RyYWN0QmFyeWNlbnRlclBvcnREaXN0cmlidXRvci9sYW1iZGEkMCRUeXBlIiwxNjMzKSxEKDgxNywxLFlJLHJtdCksbC5OZj1mdW5jdGlvbihlLG4scixzLG8saCl7fSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt9LGwuUWY9ZnVuY3Rpb24oZSxuLHIscyl7fSxsLkxmPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLmM9dGhpcy5lLmEsdGhpcy5nPXRoaXMuZi5nfSxsLk9mPWZ1bmN0aW9uKGUsbil7bltlXVswXS5jLnA9ZX0sbC5SZj1mdW5jdGlvbigpe3JldHVybiExfSxsLmFnPWZ1bmN0aW9uKGUsbixyLHMpe3I/dWFlKHRoaXMsZSk6KGRhZSh0aGlzLGUscykseWhlKHRoaXMsZSxuKSksZS5jLmxlbmd0aD4xJiYoamUoUmUoUShOYSgoQW4oMCxlLmMubGVuZ3RoKSx1KGUuY1swXSwxMCkpKSwoVGUoKSwkeSkpKSk/RGNlKGUsdGhpcy5kLHUodGhpcyw2NjApKTood24oKSxacyhlLHRoaXMuZCkpLFFuZSh0aGlzLmUsZSkpfSxsLlNmPWZ1bmN0aW9uKGUsbixyLHMpe3ZhciBvLGgsZCx2LGssQyxNO2ZvcihuIT1rS3QocixlLmxlbmd0aCkmJihoPWVbbi0ocj8xOi0xKV0sX210KHRoaXMuZixoLHI/KHNvKCksbnUpOihzbygpLHRsKSkpLG89ZVtuXVswXSxNPSFzfHxvLms9PShWbigpLGtzKSxDPUExKGVbbl0pLHRoaXMuYWcoQyxNLCExLHIpLGQ9MCxrPW5ldyBTKEMpO2suYTxrLmMuYy5sZW5ndGg7KXY9dShKKGspLDEwKSxlW25dW2QrK109djtyZXR1cm4hMX0sbC5UZj1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQ7Zm9yKGQ9a0t0KG4sZS5sZW5ndGgpLGg9QTEoZVtkXSksdGhpcy5hZyhoLCExLCEwLG4pLHI9MCxvPW5ldyBTKGgpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDEwKSxlW2RdW3IrK109cztyZXR1cm4hMX0sRihxdSwiQmFyeWNlbnRlckhldXJpc3RpYyIsODE3KSxEKDY1OCwxLHs2NTg6MX0sZTgpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iQmFyeWNlbnRlclN0YXRlIFtub2RlPSIrdGhpcy5jKyIsIHN1bW1lZFdlaWdodD0iK3RoaXMuZCsiLCBkZWdyZWU9Iit0aGlzLmIrIiwgYmFyeWNlbnRlcj0iK3RoaXMuYSsiLCB2aXNpdGVkPSIrdGhpcy5lKyJdIn0sbC5iPTAsbC5kPTAsbC5lPSExO3ZhciBUbWU9RihxdSwiQmFyeWNlbnRlckhldXJpc3RpYy9CYXJ5Y2VudGVyU3RhdGUiLDY1OCk7RCgxODAyLDEsT2ksYlIpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaDBuKHRoaXMuYSx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYocXUsIkJhcnljZW50ZXJIZXVyaXN0aWMvbGFtYmRhJDAkVHlwZSIsMTgwMiksRCg4MTYsMSxZSSxBNHQpLGwuTWY9ZnVuY3Rpb24oKXt9LGwuTmY9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe30sbC5RZj1mdW5jdGlvbihlLG4scixzKXt9LGwuT2Y9ZnVuY3Rpb24oZSxuKXt0aGlzLmFbZV09TnQoVG1lLHszOjEsNDoxLDU6MSwyMDE4OjF9LDY1OCxuW2VdLmxlbmd0aCwwLDEpLHRoaXMuYltlXT1OdChDbWUsezM6MSw0OjEsNToxLDIwMTk6MX0sMjMzLG5bZV0ubGVuZ3RoLDAsMSl9LGwuUGY9ZnVuY3Rpb24oZSxuLHIpe3RzZSh0aGlzLHJbZV1bbl0sITApfSxsLmM9ITEsRihxdSwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlciIsODE2KSxEKDIzMywxLHsyMzM6MX0sd1F0LHNoZSksbC5JYj1mdW5jdGlvbigpe3ZhciBlLG47Zm9yKG49bmV3IE1wLG4uYSs9IlsiLGU9MDtlPHRoaXMuZC5sZW5ndGg7ZSsrKUdyKG4sZHNlKHRoaXMuZFtlXSkpLEUxKHRoaXMuZyx0aGlzLmRbMF0pLmEhPW51bGwmJkdyKEdyKChuLmErPSI8IixuKSxGWGUoRTEodGhpcy5nLHRoaXMuZFswXSkuYSkpLCI+IiksZTx0aGlzLmQubGVuZ3RoLTEmJihuLmErPVlhKTtyZXR1cm4obi5hKz0iXSIsbikuYX0sbC5hPTAsbC5jPTAsbC5mPTA7dmFyIENtZT1GKHF1LCJGb3JzdGVyQ29uc3RyYWludFJlc29sdmVyL0NvbnN0cmFpbnRHcm91cCIsMjMzKTtEKDE3OTcsMSxVbixRdHQpLGwudGQ9ZnVuY3Rpb24oZSl7dHNlKHRoaXMuYSx1KGUsMTApLCExKX0sRihxdSwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlci9sYW1iZGEkMCRUeXBlIiwxNzk3KSxEKDIxNCwxLHsyMTQ6MSwyMjU6MX0saGhlKSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuT2Y9ZnVuY3Rpb24oZSxuKXt9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLnI9TnQoQ3IsWHIsMjUsdGhpcy5uLDE1LDEpfSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO289cltlXVtuXSxzPW8uZSxzJiZsZSh0aGlzLmIscyl9LGwuUWY9ZnVuY3Rpb24oZSxuLHIscyl7Kyt0aGlzLm59LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4geGhlKHRoaXMuZSxuZXcgSHMpfSxsLmc9ITEsbC5pPSExLGwubj0wLGwucz0hMSxGKHF1LCJHcmFwaEluZm9Ib2xkZXIiLDIxNCksRCgxODMyLDEsWUksaFEpLGwuTmY9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe30sbC5PZj1mdW5jdGlvbihlLG4pe30sbC5RZj1mdW5jdGlvbihlLG4scixzKXt9LGwuX2Y9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByJiZuPjA/Q3J0KHRoaXMuYSxlW24tMV0sZVtuXSk6IXImJm48ZS5sZW5ndGgtMT9DcnQodGhpcy5hLGVbbl0sZVtuKzFdKTptaXQodGhpcy5hLGVbbl0scj8odmUoKSxCbik6KHZlKCksSG4pKSwkMm4odGhpcyxlLG4scil9LGwuTWY9ZnVuY3Rpb24oKXt0aGlzLmQ9TnQoQ3IsWHIsMjUsdGhpcy5jLDE1LDEpLHRoaXMuYT1uZXcgWU0odGhpcy5kKX0sbC5QZj1mdW5jdGlvbihlLG4scil7dmFyIHM7cz1yW2VdW25dLHRoaXMuYys9cy5qLmMubGVuZ3RofSxsLmM9MCxGKHF1LCJHcmVlZHlQb3J0RGlzdHJpYnV0b3IiLDE4MzIpLEQoMTQwMSwxLHpjLFZCKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB3bG4odShlLDM3KSl9LGwucGY9ZnVuY3Rpb24oZSxuKXskNG4odShlLDM3KSxuKX07dmFyIF9tZTtGKHF1LCJJbnRlcmFjdGl2ZUNyb3NzaW5nTWluaW1pemVyIiwxNDAxKSxEKDE0MDIsMSxPaSxTJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWWRuKHRoaXMsdShlLDEwKSx1KG4sMTApKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKHF1LCJJbnRlcmFjdGl2ZUNyb3NzaW5nTWluaW1pemVyLzEiLDE0MDIpLEQoNTA3LDEsezUwNzoxLDEyMzoxLDUxOjF9LGRldCksbC5ZZj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdShlLDM3KSxuPXBqKFNtZSksYmkobiwoV2EoKSxjdSksKHJvKCksSVYpKSxufSxsLnBmPWZ1bmN0aW9uKGUsbil7Sm1uKHRoaXMsdShlLDM3KSxuKX0sbC5lPTA7dmFyIFNtZTtGKHF1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIiLDUwNyksRCgxMzk4LDEsVW4sQSR0KSxsLnRkPWZ1bmN0aW9uKGUpe2p5bih0aGlzLmEsdShlLDIxNCkpfSxGKHF1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvMG1ldGhvZHJlZiRjb21wYXJlRGlmZmVyZW50UmFuZG9taXplZExheW91dHMkVHlwZSIsMTM5OCksRCgxMzk5LDEsVW4sTCR0KSxsLnRkPWZ1bmN0aW9uKGUpe2xsbih0aGlzLmEsdShlLDIxNCkpfSxGKHF1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvMW1ldGhvZHJlZiRtaW5pbWl6ZUNyb3NzaW5nc05vQ291bnRlciRUeXBlIiwxMzk5KSxEKDE0MDAsMSxVbixNJHQpLGwudGQ9ZnVuY3Rpb24oZSl7eGxlKHRoaXMuYSx1KGUsMjE0KSl9LEYocXUsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci8ybWV0aG9kcmVmJG1pbmltaXplQ3Jvc3NpbmdzV2l0aENvdW50ZXIkVHlwZSIsMTQwMCksRCg0NTQsMjIsezM6MSwzNToxLDIyOjEsNDU0OjF9LFVldCk7dmFyIFJPLEZTLFRHLEFtZT1qcihxdSwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyL0Nyb3NzTWluVHlwZSIsNDU0LEhyLEhpbixpdG4pLExtZTtEKDEzOTcsMSxsaSxEayksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gd3l0KCksdShlLDI5KS5hLmMubGVuZ3RoPT0wfSxGKHF1LCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvbGFtYmRhJDAkVHlwZSIsMTM5NyksRCgxNzk5LDEsWUksUFF0KSxsLk1mPWZ1bmN0aW9uKCl7fSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt9LGwuUWY9ZnVuY3Rpb24oZSxuLHIscyl7fSxsLk9mPWZ1bmN0aW9uKGUsbil7bltlXVswXS5jLnA9ZSx0aGlzLmJbZV09TnQoTW1lLHszOjEsNDoxLDU6MSwxOTQ0OjF9LDY1OSxuW2VdLmxlbmd0aCwwLDEpfSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzPXJbZV1bbl0scy5wPW4sdHModGhpcy5iW2VdLG4sbmV3IGdRKX0sRihxdSwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyIiwxNzk5KSxEKDY1OSwxLHs2NTk6MX0sZ1EpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTm9kZUluZm8gW2Nvbm5lY3RlZEVkZ2VzPSIrdGhpcy5hKyIsIGhpZXJhcmNoaWNhbEluZmx1ZW5jZT0iK3RoaXMuYisiLCByYW5kb21JbmZsdWVuY2U9Iit0aGlzLmMrIl0ifSxsLmE9MCxsLmI9MCxsLmM9MDt2YXIgTW1lPUYocXUsIkxheWVyU3dlZXBUeXBlRGVjaWRlci9Ob2RlSW5mbyIsNjU5KTtEKDE4MDAsMSx4ZCxwUSksbC5MYj1mdW5jdGlvbihlKXtyZXR1cm4gdjkobmV3IEwxKHUoZSwxMSkuYikpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdjkobmV3IEwxKHUoZSwxMSkuYikpfSxGKHF1LCJMYXllclN3ZWVwVHlwZURlY2lkZXIvbGFtYmRhJDAkVHlwZSIsMTgwMCksRCgxODAxLDEseGQsYlEpLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHY5KG5ldyBMMSh1KGUsMTEpLmIpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHY5KG5ldyBMMSh1KGUsMTEpLmIpKX0sRihxdSwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyL2xhbWJkYSQxJFR5cGUiLDE4MDEpLEQoMTgzMyw0MDIscWt0LHhIdCksbC4kZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqO3N3aXRjaChDPXRoaXMuZyxyLmcpe2Nhc2UgMTp7Zm9yKHM9MCxvPTAsaz1uZXcgUyhlLmopO2suYTxrLmMuYy5sZW5ndGg7KWQ9dShKKGspLDExKSxkLmUuYy5sZW5ndGghPTAmJigrK3MsZC5qPT0odmUoKSxQbikmJisrbyk7Zm9yKGg9bitvLGo9bitzLHY9b3YoZSwoc28oKSx0bCkpLktjKCk7di5PYigpOylkPXUodi5QYigpLDExKSxkLmo9PSh2ZSgpLFBuKT8oQ1tkLnBdPWgsLS1oKTooQ1tkLnBdPWosLS1qKTtyZXR1cm4gc31jYXNlIDI6e2ZvcihNPTAsdj1vdihlLChzbygpLG51KSkuS2MoKTt2Lk9iKCk7KWQ9dSh2LlBiKCksMTEpLCsrTSxDW2QucF09bitNO3JldHVybiBNfWRlZmF1bHQ6dGhyb3cgaXQobmV3IGdNKX19LEYocXUsIkxheWVyVG90YWxQb3J0RGlzdHJpYnV0b3IiLDE4MzMpLEQoNjYwLDgxNyx7NjYwOjEsMjI1OjF9LGJuZSksbC5hZz1mdW5jdGlvbihlLG4scixzKXtyP3VhZSh0aGlzLGUpOihkYWUodGhpcyxlLHMpLHloZSh0aGlzLGUsbikpLGUuYy5sZW5ndGg+MSYmKGplKFJlKFEoTmEoKEFuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMTApKSksKFRlKCksJHkpKSkpP0RjZShlLHRoaXMuZCx0aGlzKTood24oKSxacyhlLHRoaXMuZCkpLGplKFJlKFEoTmEoKEFuKDAsZS5jLmxlbmd0aCksdShlLmNbMF0sMTApKSksJHkpKSl8fFFuZSh0aGlzLmUsZSkpfSxGKHF1LCJNb2RlbE9yZGVyQmFyeWNlbnRlckhldXJpc3RpYyIsNjYwKSxEKDE4MDMsMSxPaSxEJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gVWduKHRoaXMuYSx1KGUsMTApLHUobiwxMCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYocXUsIk1vZGVsT3JkZXJCYXJ5Y2VudGVySGV1cmlzdGljL2xhbWJkYSQwJFR5cGUiLDE4MDMpLEQoMTQwMywxLHpjLGx0dCksbC5ZZj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdShlLDM3KSxuPXBqKERtZSksYmkobiwoV2EoKSxjdSksKHJvKCksSVYpKSxufSxsLnBmPWZ1bmN0aW9uKGUsbil7RHJuKCh1KGUsMzcpLG4pKX07dmFyIERtZTtGKHF1LCJOb0Nyb3NzaW5nTWluaW1pemVyIiwxNDAzKSxEKDc5Niw0MDIscWt0LGhidCksbC4kZj1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRztzd2l0Y2goaj10aGlzLmcsci5nKXtjYXNlIDE6e2ZvcihvPTAsaD0wLE09bmV3IFMoZS5qKTtNLmE8TS5jLmMubGVuZ3RoOylrPXUoSihNKSwxMSksay5lLmMubGVuZ3RoIT0wJiYoKytvLGsuaj09KHZlKCksUG4pJiYrK2gpO2ZvcihzPTEvKG8rMSksZD1uK2gqcyxHPW4rMS1zLEM9b3YoZSwoc28oKSx0bCkpLktjKCk7Qy5PYigpOylrPXUoQy5QYigpLDExKSxrLmo9PSh2ZSgpLFBuKT8oaltrLnBdPWQsZC09cyk6KGpbay5wXT1HLEctPXMpO2JyZWFrfWNhc2UgMjp7Zm9yKHY9MCxNPW5ldyBTKGUuaik7TS5hPE0uYy5jLmxlbmd0aDspaz11KEooTSksMTEpLGsuZy5jLmxlbmd0aD09MHx8Kyt2O2ZvcihzPTEvKHYrMSksSD1uK3MsQz1vdihlLChzbygpLG51KSkuS2MoKTtDLk9iKCk7KWs9dShDLlBiKCksMTEpLGpbay5wXT1ILEgrPXM7YnJlYWt9ZGVmYXVsdDp0aHJvdyBpdChuZXcgRm4oIlBvcnQgdHlwZSBpcyB1bmRlZmluZWQiKSl9cmV0dXJuIDF9LEYocXUsIk5vZGVSZWxhdGl2ZVBvcnREaXN0cmlidXRvciIsNzk2KSxEKDgwNywxLHt9LFlLdCxxYWUpLEYocXUsIlN3ZWVwQ29weSIsODA3KSxEKDE3OTgsMSxZSSxPaWUpLGwuT2Y9ZnVuY3Rpb24oZSxuKXt9LGwuTWY9ZnVuY3Rpb24oKXt2YXIgZTtlPU50KENyLFhyLDI1LHRoaXMuZiwxNSwxKSx0aGlzLmQ9bmV3IGokdChlKSx0aGlzLmE9bmV3IFlNKGUpfSxsLk5mPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXt2YXIgZDtkPXUoTmUoaFtlXVtuXS5qLHIpLDExKSxvLmM9PWQmJm8uYy5pLmM9PW8uZC5pLmMmJisrdGhpcy5lW2VdfSxsLlBmPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzPXJbZV1bbl0sdGhpcy5jW2VdPXRoaXMuY1tlXXxzLms9PShWbigpLEhjKX0sbC5RZj1mdW5jdGlvbihlLG4scixzKXt2YXIgbztvPXUoTmUoc1tlXVtuXS5qLHIpLDExKSxvLnA9dGhpcy5mKyssby5nLmMubGVuZ3RoK28uZS5jLmxlbmd0aD4xJiYoby5qPT0odmUoKSxIbik/dGhpcy5iW2VdPSEwOm8uaj09Qm4mJmU+MCYmKHRoaXMuYltlLTFdPSEwKSl9LGwuZj0wLEYoYzAsIkFsbENyb3NzaW5nc0NvdW50ZXIiLDE3OTgpLEQoNTg3LDEse30sZ3opLGwuYj0wLGwuZD0wLEYoYzAsIkJpbmFyeUluZGV4ZWRUcmVlIiw1ODcpLEQoNTI0LDEse30sWU0pO3ZhciByX3QsQ0c7RihjMCwiQ3Jvc3NpbmdzQ291bnRlciIsNTI0KSxEKDE5MDYsMSxPaSxJJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUGVuKHRoaXMuYSx1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoYzAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDAkVHlwZSIsMTkwNiksRCgxOTA3LDEsT2ksTyR0KSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEZlbih0aGlzLmEsdShlLDExKSx1KG4sMTEpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKGMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQxJFR5cGUiLDE5MDcpLEQoMTkwOCwxLE9pLFAkdCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBOZW4odGhpcy5hLHUoZSwxMSksdShuLDExKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihjMCwiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkMiRUeXBlIiwxOTA4KSxEKDE5MDksMSxPaSxGJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQmVuKHRoaXMuYSx1KGUsMTEpLHUobiwxMSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoYzAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDMkVHlwZSIsMTkwOSksRCgxOTEwLDEsVW4sTiR0KSxsLnRkPWZ1bmN0aW9uKGUpe3Zvbih0aGlzLmEsdShlLDExKSl9LEYoYzAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDQkVHlwZSIsMTkxMCksRCgxOTExLDEsbGksQiR0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBJWGUodGhpcy5hLHUoZSwxMSkpfSxGKGMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ1JFR5cGUiLDE5MTEpLEQoMTkxMiwxLFVuLFIkdCksbC50ZD1mdW5jdGlvbihlKXtIR3QodGhpcyxlKX0sRihjMCwiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkNiRUeXBlIiwxOTEyKSxEKDE5MTMsMSxVbixwR3QpLGwudGQ9ZnVuY3Rpb24oZSl7dmFyIG47azgoKSxVcCh0aGlzLmIsKG49dGhpcy5hLHUoZSwxMSksbikpfSxGKGMwLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ3JFR5cGUiLDE5MTMpLEQoODI2LDEseGQsWU4pLGwuTGI9ZnVuY3Rpb24oZSl7cmV0dXJuIGs4KCksVXModShlLDExKSwoYWUoKSxKdSkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gazgoKSxVcyh1KGUsMTEpLChhZSgpLEp1KSl9LEYoYzAsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDgkVHlwZSIsODI2KSxEKDE5MDUsMSx7fSxqJHQpLEYoYzAsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIiLDE5MDUpLEQoNDY3LDEsezM1OjEsNDY3OjF9LHNZdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gcGZuKHRoaXMsdShlLDQ2NykpfSxsLmI9MCxsLmM9MCxsLmU9MCxsLmY9MDt2YXIgaDZuPUYoYzAsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIvSHlwZXJlZGdlIiw0NjcpO0QoMzYyLDEsezM1OjEsMzYyOjF9LGYkKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBkMm4odGhpcyx1KGUsMzYyKSl9LGwuYj0wLGwuYz0wO3ZhciBJbWU9RihjMCwiSHlwZXJlZGdlQ3Jvc3NpbmdzQ291bnRlci9IeXBlcmVkZ2VDb3JuZXIiLDM2Mik7RCg1MjMsMjIsezM6MSwzNToxLDIyOjEsNTIzOjF9LEhidCk7dmFyIE5TLEJTLE9tZT1qcihjMCwiSHlwZXJlZGdlQ3Jvc3NpbmdzQ291bnRlci9IeXBlcmVkZ2VDb3JuZXIvVHlwZSIsNTIzLEhyLHFybixzdG4pLFBtZTtEKDE0MDUsMSx6YyxzdHQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoUSh1KGUsMzcpLChhZSgpLFZjKSksMjEpLkhjKChvbygpLHZoKSk/Rm1lOm51bGx9LGwucGY9ZnVuY3Rpb24oZSxuKXtQZG4odGhpcyx1KGUsMzcpLG4pfTt2YXIgRm1lO0YodW8sIkludGVyYWN0aXZlTm9kZVBsYWNlciIsMTQwNSksRCgxNDA2LDEsemMsaXR0KSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KFEodShlLDM3KSwoYWUoKSxWYykpLDIxKS5IYygob28oKSx2aCkpP05tZTpudWxsfSxsLnBmPWZ1bmN0aW9uKGUsbil7djFuKHRoaXMsdShlLDM3KSxuKX07dmFyIE5tZSxfRyxTRztGKHVvLCJMaW5lYXJTZWdtZW50c05vZGVQbGFjZXIiLDE0MDYpLEQoMjU3LDEsezM1OjEsMjU3OjF9LHpwdCksbC53ZD1mdW5jdGlvbihlKXtyZXR1cm4gVktlKHRoaXMsdShlLDI1NykpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDI1Nyk/KG49dShlLDI1NyksdGhpcy5iPT1uLmIpOiExfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5JYj1mdW5jdGlvbigpe3JldHVybiJscyIrZWIodGhpcy5lKX0sbC5hPTAsbC5iPTAsbC5jPS0xLGwuZD0tMSxsLmc9MDt2YXIgQm1lPUYodW8sIkxpbmVhclNlZ21lbnRzTm9kZVBsYWNlci9MaW5lYXJTZWdtZW50IiwyNTcpO0QoMTQwOCwxLHpjLElLdCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShRKHUoZSwzNyksKGFlKCksVmMpKSwyMSkuSGMoKG9vKCksdmgpKT9SbWU6bnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe2t4bih0aGlzLHUoZSwzNyksbil9LGwuYj0wLGwuZz0wO3ZhciBSbWU7Rih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIiLDE0MDgpLEQoMTQyNywxLE9pLHdRKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHB1KHUoZSwxOSkuYSx1KG4sMTkpLmEpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyLzBtZXRob2RyZWYkY29tcGFyZSRUeXBlIiwxNDI3KSxEKDE0MjksMSxPaSx2USksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBwdSh1KGUsMTkpLmEsdShuLDE5KS5hKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci8xbWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTQyOSksRCg2NDksMSx7NjQ5OjF9LGJHdCk7dmFyIGY2bj1GKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9FZGdlUmVwIiw2NDkpO0QoNDAxLDEsezQwMToxfSxPdnQpLGwuYj0hMTt2YXIgZDZuPUYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL05vZGVSZXAiLDQwMSk7RCg1MDgsMTIsezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTI6MSwxNDoxLDE1OjEsNTQ6MSw1MDg6MX0sQ3F0KSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoIiw1MDgpLEQoMTQwOSwxLHt9LG1RKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTcpLmQuaS5rfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQwJFR5cGUiLDE0MDkpLEQoMTQxMCwxLGxpLHlRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMjY3KT09KFZuKCksdGEpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQxJFR5cGUiLDE0MTApLEQoMTQxMSwxLHt9LHhRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTcpLmQuaX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMiRUeXBlIiwxNDExKSxEKDE0MTIsMSxsaSwkJHQpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEhXdChBaWUodShlLDEwKSkpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQzJFR5cGUiLDE0MTIpLEQoMTQxMywxLGxpLGtRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBFZW4odShlLDExKSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQwJFR5cGUiLDE0MTMpLEQoMTQxNCwxLFVuLHdHdCksbC50ZD1mdW5jdGlvbihlKXt5UWUodGhpcy5hLHRoaXMuYix1KGUsMTEpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDEkVHlwZSIsMTQxNCksRCgxNDIzLDEsVW4seiR0KSxsLnRkPWZ1bmN0aW9uKGUpeyRwbih0aGlzLmEsdShlLDE3KSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxMCRUeXBlIiwxNDIzKSxEKDE0MjQsMSx7fSxFUSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gRmwoKSxuZXcgVG4obnVsbCxuZXcgX24odShlLDI5KS5hLDE2KSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxMSRUeXBlIiwxNDI0KSxEKDE0MjUsMSxVbixxJHQpLGwudGQ9ZnVuY3Rpb24oZSl7TnZuKHRoaXMuYSx1KGUsMTApKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDEyJFR5cGUiLDE0MjUpLEQoMTQyNiwxLHt9LFRRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLHBlKHUoZSwxMjEpLmUpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTMkVHlwZSIsMTQyNiksRCgxNDI4LDEse30sQ1EpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEZsKCkscGUodShlLDEyMSkuZSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxNSRUeXBlIiwxNDI4KSxEKDE0MzAsMSxsaSxfUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gRmwoKSx1KGUsNDAxKS5jLms9PShWbigpLE9zKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDE3JFR5cGUiLDE0MzApLEQoMTQzMSwxLGxpLFNRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLHUoZSw0MDEpLmMuai5jLmxlbmd0aD4xfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTgkVHlwZSIsMTQzMSksRCgxNDMyLDEsVW4salh0KSxsLnRkPWZ1bmN0aW9uKGUpe19obih0aGlzLmMsdGhpcy5iLHRoaXMuZCx0aGlzLmEsdShlLDQwMSkpfSxsLmM9MCxsLmQ9MCxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTkkVHlwZSIsMTQzMiksRCgxNDE1LDEse30sQVEpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIEZsKCksbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwyOSkuYSwxNikpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMiRUeXBlIiwxNDE1KSxEKDE0MzMsMSxVbixIJHQpLGwudGQ9ZnVuY3Rpb24oZSl7dlFlKHRoaXMuYSx1KGUsMTEpKX0sbC5hPTAsRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIwJFR5cGUiLDE0MzMpLEQoMTQzNCwxLHt9LG54KSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIxJFR5cGUiLDE0MzQpLEQoMTQzNSwxLFVuLFYkdCksbC50ZD1mdW5jdGlvbihlKXtPUWUodGhpcy5hLHUoZSwxMCkpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjIkVHlwZSIsMTQzNSksRCgxNDM2LDEsbGksS04pLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEhXdChlKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIzJFR5cGUiLDE0MzYpLEQoMTQzNywxLHt9LExRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI0JFR5cGUiLDE0MzcpLEQoMTQzOCwxLGxpLEckdCksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4galhlKHRoaXMuYSx1KGUsMTApKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI1JFR5cGUiLDE0MzgpLEQoMTQzOSwxLFVuLHZHdCksbC50ZD1mdW5jdGlvbihlKXtjcG4odGhpcy5hLHRoaXMuYix1KGUsMTApKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI2JFR5cGUiLDE0MzkpLEQoMTQ0MCwxLGxpLE1RKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLCFHYSh1KGUsMTcpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI3JFR5cGUiLDE0NDApLEQoMTQ0MSwxLGxpLERRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLCFHYSh1KGUsMTcpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI4JFR5cGUiLDE0NDEpLEQoMTQ0MiwxLHt9LFUkdCksbC5DZT1mdW5jdGlvbihlLG4pe3JldHVybiBNUWUodGhpcy5hLHUoZSwyOSksdShuLDI5KSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyOSRUeXBlIiwxNDQyKSxEKDE0MTYsMSx7fSxYTiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gRmwoKSxuZXcgVG4obnVsbCxuZXcgancobmV3IGFyKGxyKERzKHUoZSwxMCkpLmEuS2MoKSxuZXcgeikpKSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQzJFR5cGUiLDE0MTYpLEQoMTQxNywxLGxpLElRKSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLHdzbih1KGUsMTcpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDQkVHlwZSIsMTQxNyksRCgxNDE4LDEsVW4sVyR0KSxsLnRkPWZ1bmN0aW9uKGUpe0Z5bih0aGlzLmEsdShlLDE3KSl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ1JFR5cGUiLDE0MTgpLEQoMTQxOSwxLHt9LFdUKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLG5ldyBUbihudWxsLG5ldyBfbih1KGUsMjkpLmEsMTYpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDYkVHlwZSIsMTQxOSksRCgxNDIwLDEsbGksT1EpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEZsKCksdShlLDEwKS5rPT0oVm4oKSxPcyl9LEYodW8sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ3JFR5cGUiLDE0MjApLEQoMTQyMSwxLHt9LFBRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBGbCgpLG5ldyBUbihudWxsLG5ldyBqdyhuZXcgYXIobHIoVTAodShlLDEwKSkuYS5LYygpLG5ldyB6KSkpKX0sRih1bywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDgkVHlwZSIsMTQyMSksRCgxNDIyLDEsbGksRlEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIEZsKCksd2VuKHUoZSwxNykpfSxGKHVvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkOSRUeXBlIiwxNDIyKSxEKDE0MDQsMSx6Yyx2QyksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShRKHUoZSwzNyksKGFlKCksVmMpKSwyMSkuSGMoKG9vKCksdmgpKT9qbWU6bnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe2Izbih1KGUsMzcpLG4pfTt2YXIgam1lO0YodW8sIlNpbXBsZU5vZGVQbGFjZXIiLDE0MDQpLEQoMTgwLDEsezE4MDoxfSxFNCksbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPSIiLHRoaXMuYz09KGJkKCksenYpP2UrPXg2OnRoaXMuYz09ZXAmJihlKz15NiksdGhpcy5vPT0oQzEoKSxIMik/ZSs9RG90OnRoaXMubz09SDE/ZSs9IlVQIjplKz0iQkFMQU5DRUQiLGV9LEYodWIsIkJLQWxpZ25lZExheW91dCIsMTgwKSxEKDUxNiwyMix7MzoxLDM1OjEsMjI6MSw1MTY6MX0sR2J0KTt2YXIgZXAsenYsJG1lPWpyKHViLCJCS0FsaWduZWRMYXlvdXQvSERpcmVjdGlvbiIsNTE2LEhyLFZybixhdG4pLHptZTtEKDUxNSwyMix7MzoxLDM1OjEsMjI6MSw1MTU6MX0sVmJ0KTt2YXIgSDIsSDEscW1lPWpyKHViLCJCS0FsaWduZWRMYXlvdXQvVkRpcmVjdGlvbiIsNTE1LEhyLEdybixvdG4pLEhtZTtEKDE2MzQsMSx7fSxtR3QpLEYodWIsIkJLQWxpZ25lciIsMTYzNCksRCgxNjM3LDEse30sWnNlKSxGKHViLCJCS0NvbXBhY3RvciIsMTYzNyksRCg2NTQsMSx7NjU0OjF9LE5RKSxsLmE9MCxGKHViLCJCS0NvbXBhY3Rvci9DbGFzc0VkZ2UiLDY1NCksRCg0NTgsMSx7NDU4OjF9LEVxdCksbC5hPW51bGwsbC5iPTAsRih1YiwiQktDb21wYWN0b3IvQ2xhc3NOb2RlIiw0NTgpLEQoMTQwNywxLHpjLEdHdCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShRKHUoZSwzNyksKGFlKCksVmMpKSwyMSkuSGMoKG9vKCksdmgpKT9WbWU6bnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe0J4bih0aGlzLHUoZSwzNyksbil9LGwuZD0hMTt2YXIgVm1lO0YodWIsIkJLTm9kZVBsYWNlciIsMTQwNyksRCgxNjM1LDEse30sQlEpLGwuZD0wLEYodWIsIk5laWdoYm9yaG9vZEluZm9ybWF0aW9uIiwxNjM1KSxEKDE2MzYsMSxPaSxZJHQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gVm9uKHRoaXMsdShlLDQ2KSx1KG4sNDYpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxGKHViLCJOZWlnaGJvcmhvb2RJbmZvcm1hdGlvbi9OZWlnaGJvckNvbXBhcmF0b3IiLDE2MzYpLEQoODA4LDEse30pLEYodWIsIlRocmVzaG9sZFN0cmF0ZWd5Iiw4MDgpLEQoMTc2Myw4MDgse30sQXF0KSxsLmJnPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdGhpcy5hLm89PShDMSgpLEgxKT9hczpDc30sbC5jZz1mdW5jdGlvbigpe30sRih1YiwiVGhyZXNob2xkU3RyYXRlZ3kvTnVsbFRocmVzaG9sZFN0cmF0ZWd5IiwxNzYzKSxEKDU3OSwxLHs1Nzk6MX0seUd0KSxsLmM9ITEsbC5kPSExLEYodWIsIlRocmVzaG9sZFN0cmF0ZWd5L1Bvc3Rwcm9jZXNzYWJsZSIsNTc5KSxEKDE3NjQsODA4LHt9LExxdCksbC5iZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3JldHVybiBvPW49PXIscz10aGlzLmEuYVtyLnBdPT1uLG98fHM/KGg9ZSx0aGlzLmEuYz09KGJkKCksenYpPyhvJiYoaD1EYXQodGhpcyxuLCEwKSksIWlzTmFOKGgpJiYhaXNGaW5pdGUoaCkmJnMmJihoPURhdCh0aGlzLHIsITEpKSk6KG8mJihoPURhdCh0aGlzLG4sITApKSwhaXNOYU4oaCkmJiFpc0Zpbml0ZShoKSYmcyYmKGg9RGF0KHRoaXMsciwhMSkpKSxoKTplfSxsLmNnPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLG4scixzLG87dGhpcy5kLmIhPTA7KW89dShvaW4odGhpcy5kKSw1NzkpLHM9bWxlKHRoaXMsbykscy5hJiYoZT1zLmEscj1qZSh0aGlzLmEuZlt0aGlzLmEuZ1tvLmIucF0ucF0pLCEoIXImJiFHYShlKSYmZS5jLmkuYz09ZS5kLmkuYykmJihuPV9jZSh0aGlzLG8pLG58fFdYZSh0aGlzLmUsbykpKTtmb3IoO3RoaXMuZS5hLmMubGVuZ3RoIT0wOylfY2UodGhpcyx1KE5yZSh0aGlzLmUpLDU3OSkpfSxGKHViLCJUaHJlc2hvbGRTdHJhdGVneS9TaW1wbGVUaHJlc2hvbGRTdHJhdGVneSIsMTc2NCksRCg2MzUsMSx7NjM1OjEsMjQ2OjEsMjM0OjF9LFJRKSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIFVuZSh0aGlzKX0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBVbmUodGhpcyl9O3ZhciBEaHQ7RihTY3QsIkVkZ2VSb3V0ZXJGYWN0b3J5Iiw2MzUpLEQoMTQ1OCwxLHpjLG9kKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiBwdm4odShlLDM3KSl9LGwucGY9ZnVuY3Rpb24oZSxuKXtFM24odShlLDM3KSxuKX07dmFyIEdtZSxVbWUsV21lLFltZSxLbWUsaV90LFhtZSxRbWU7RihTY3QsIk9ydGhvZ29uYWxFZGdlUm91dGVyIiwxNDU4KSxEKDE0NTEsMSx6YyxVR3QpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIGpkbih1KGUsMzcpKX0sbC5wZj1mdW5jdGlvbihlLG4pe0g1bih0aGlzLHUoZSwzNyksbil9O3ZhciBabWUsSm1lLHR5ZSxleWUsak8sbnllO0YoU2N0LCJQb2x5bGluZUVkZ2VSb3V0ZXIiLDE0NTEpLEQoMTQ1MiwxLHhkLGpRKSxsLkxiPWZ1bmN0aW9uKGUpe3JldHVybiB5eXQodShlLDEwKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiB5eXQodShlLDEwKSl9LEYoU2N0LCJQb2x5bGluZUVkZ2VSb3V0ZXIvMSIsMTQ1MiksRCgxODA5LDEsbGksJFEpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMjkpLmM9PShVZigpLG1iKX0sRih0MSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMCRUeXBlIiwxODA5KSxEKDE4MTAsMSx7fSx6USksbC5HZT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEyOSkuZH0sRih0MSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMSRUeXBlIiwxODEwKSxEKDE4MTEsMSxsaSxxUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEyOSkuYz09KFVmKCksbWIpfSxGKHQxLCJIeXBlckVkZ2VDeWNsZURldGVjdG9yL2xhbWJkYSQyJFR5cGUiLDE4MTEpLEQoMTgxMiwxLHt9LHJ4KSxsLkdlPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTI5KS5kfSxGKHQxLCJIeXBlckVkZ2VDeWNsZURldGVjdG9yL2xhbWJkYSQzJFR5cGUiLDE4MTIpLEQoMTgxMywxLHt9LEhRKSxsLkdlPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTI5KS5kfSxGKHQxLCJIeXBlckVkZ2VDeWNsZURldGVjdG9yL2xhbWJkYSQ0JFR5cGUiLDE4MTMpLEQoMTgxNCwxLHt9LFZRKSxsLkdlPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTI5KS5kfSxGKHQxLCJIeXBlckVkZ2VDeWNsZURldGVjdG9yL2xhbWJkYSQ1JFR5cGUiLDE4MTQpLEQoMTEyLDEsezM1OjEsMTEyOjF9LFBEKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBHS2UodGhpcyx1KGUsMTEyKSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsMTEyKT8obj11KGUsMTEyKSx0aGlzLmc9PW4uZyk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7Zm9yKGU9bmV3IE9sKCJ7Iikscz1uZXcgUyh0aGlzLm4pO3MuYTxzLmMuYy5sZW5ndGg7KXI9dShKKHMpLDExKSxuPXJJKHIuaSksbj09bnVsbCYmKG49Im4iK3lZdChyLmkpKSxlLmErPSIiK24scy5hPHMuYy5jLmxlbmd0aCYmKGUuYSs9IiwiKTtyZXR1cm4gZS5hKz0ifSIsZS5hfSxsLmE9MCxsLmI9MCxsLmM9TmFOLGwuZD0wLGwuZz0wLGwuaT0wLGwubz0wLGwucz1OYU4sRih0MSwiSHlwZXJFZGdlU2VnbWVudCIsMTEyKSxEKDEyOSwxLHsxMjk6MX0saTIpLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyItPiIrdGhpcy5iKyIgKCIrblplKHRoaXMuYykrIikifSxsLmQ9MCxGKHQxLCJIeXBlckVkZ2VTZWdtZW50RGVwZW5kZW5jeSIsMTI5KSxEKDUyMCwyMix7MzoxLDM1OjEsMjI6MSw1MjA6MX0sVWJ0KTt2YXIgbWIsS3kscnllPWpyKHQxLCJIeXBlckVkZ2VTZWdtZW50RGVwZW5kZW5jeS9EZXBlbmRlbmN5VHlwZSIsNTIwLEhyLEhybixjdG4pLGl5ZTtEKDE4MTUsMSx7fSxLJHQpLEYodDEsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlciIsMTgxNSksRCgxODE2LDEse30sX0h0KSxsLmE9MCxsLmI9MCxGKHQxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvQXJlYVJhdGluZyIsMTgxNiksRCgzMjksMSx7MzI5OjF9LERudCksbC5hPTAsbC5iPTAsbC5jPTAsRih0MSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL0ZyZWVBcmVhIiwzMjkpLEQoMTgxNywxLE9pLFFRKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFpaZSh1KGUsMTEyKSx1KG4sMTEyKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRih0MSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQwJFR5cGUiLDE4MTcpLEQoMTgxOCwxLFVuLCRYdCksbC50ZD1mdW5jdGlvbihlKXtyYW4odGhpcy5hLHRoaXMuZCx0aGlzLmMsdGhpcy5iLHUoZSwxMTIpKX0sbC5iPTAsRih0MSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQxJFR5cGUiLDE4MTgpLEQoMTgxOSwxLHt9LFpRKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDExMikuZSwxNikpfSxGKHQxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDIkVHlwZSIsMTgxOSksRCgxODIwLDEse30sSlEpLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih1KGUsMTEyKS5qLDE2KSl9LEYodDEsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9sYW1iZGEkMyRUeXBlIiwxODIwKSxEKDE4MjEsMSx7fSx0WiksbC5GZT1mdW5jdGlvbihlKXtyZXR1cm4gWHQoeWUoZSkpfSxGKHQxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDQkVHlwZSIsMTgyMSksRCg2NTUsMSx7fSxlcnQpLGwuYT0wLGwuYj0wLGwuYz0wLEYodDEsIk9ydGhvZ29uYWxSb3V0aW5nR2VuZXJhdG9yIiw2NTUpLEQoMTYzOCwxLHt9LGVaKSxsLktiPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVG4obnVsbCxuZXcgX24odShlLDExMikuZSwxNikpfSxGKHQxLCJPcnRob2dvbmFsUm91dGluZ0dlbmVyYXRvci9sYW1iZGEkMCRUeXBlIiwxNjM4KSxEKDE2MzksMSx7fSxuWiksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHUoZSwxMTIpLmosMTYpKX0sRih0MSwiT3J0aG9nb25hbFJvdXRpbmdHZW5lcmF0b3IvbGFtYmRhJDEkVHlwZSIsMTYzOSksRCg2NjEsMSx7fSksRihBY3QsIkJhc2VSb3V0aW5nRGlyZWN0aW9uU3RyYXRlZ3kiLDY2MSksRCgxODA3LDY2MSx7fSxNcXQpLGwuZGc9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkLHYsayxDLE0saixILEcsSyx0dDtpZighKGUuciYmIWUucSkpZm9yKE09bitlLm8qcixDPW5ldyBTKGUubik7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKGs9dShKKEMpLDExKSxqPVlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbay5pLm4say5uLGsuYV0pKS5hLHY9bmV3IFMoay5nKTt2LmE8di5jLmMubGVuZ3RoOylkPXUoSih2KSwxNyksR2EoZCl8fChLPWQuZCx0dD1ZbyhsdChjdChXcywxKSxlZSw4LDAsW0suaS5uLEsubixLLmFdKSkuYSxiLk1hdGguYWJzKGotdHQpPkVkJiYoaD1NLG89ZSxzPW5ldyAkZShqLGgpLHJpKGQuYSxzKSxwdih0aGlzLGQsbyxzLCExKSxIPWUucixIJiYoRz1YdCh5ZShaZihILmUsMCkpKSxzPW5ldyAkZShHLGgpLHJpKGQuYSxzKSxwdih0aGlzLGQsbyxzLCExKSxoPW4rSC5vKnIsbz1ILHM9bmV3ICRlKEcsaCkscmkoZC5hLHMpLHB2KHRoaXMsZCxvLHMsITEpKSxzPW5ldyAkZSh0dCxoKSxyaShkLmEscykscHYodGhpcyxkLG8scywhMSkpKX0sbC5lZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5pLm4uYStlLm4uYStlLmEuYX0sbC5mZz1mdW5jdGlvbigpe3JldHVybiB2ZSgpLG1yfSxsLmdnPWZ1bmN0aW9uKCl7cmV0dXJuIHZlKCksUG59LEYoQWN0LCJOb3J0aFRvU291dGhSb3V0aW5nU3RyYXRlZ3kiLDE4MDcpLEQoMTgwOCw2NjEse30sRHF0KSxsLmRnPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQ7aWYoIShlLnImJiFlLnEpKWZvcihNPW4tZS5vKnIsQz1uZXcgUyhlLm4pO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihrPXUoSihDKSwxMSksaj1ZbyhsdChjdChXcywxKSxlZSw4LDAsW2suaS5uLGsubixrLmFdKSkuYSx2PW5ldyBTKGsuZyk7di5hPHYuYy5jLmxlbmd0aDspZD11KEoodiksMTcpLEdhKGQpfHwoSz1kLmQsdHQ9WW8obHQoY3QoV3MsMSksZWUsOCwwLFtLLmkubixLLm4sSy5hXSkpLmEsYi5NYXRoLmFicyhqLXR0KT5FZCYmKGg9TSxvPWUscz1uZXcgJGUoaixoKSxyaShkLmEscykscHYodGhpcyxkLG8scywhMSksSD1lLnIsSCYmKEc9WHQoeWUoWmYoSC5lLDApKSkscz1uZXcgJGUoRyxoKSxyaShkLmEscykscHYodGhpcyxkLG8scywhMSksaD1uLUgubypyLG89SCxzPW5ldyAkZShHLGgpLHJpKGQuYSxzKSxwdih0aGlzLGQsbyxzLCExKSkscz1uZXcgJGUodHQsaCkscmkoZC5hLHMpLHB2KHRoaXMsZCxvLHMsITEpKSl9LGwuZWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaS5uLmErZS5uLmErZS5hLmF9LGwuZmc9ZnVuY3Rpb24oKXtyZXR1cm4gdmUoKSxQbn0sbC5nZz1mdW5jdGlvbigpe3JldHVybiB2ZSgpLG1yfSxGKEFjdCwiU291dGhUb05vcnRoUm91dGluZ1N0cmF0ZWd5IiwxODA4KSxEKDE4MDYsNjYxLHt9LElxdCksbC5kZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdixrLEMsTSxqLEgsRyxLLHR0O2lmKCEoZS5yJiYhZS5xKSlmb3IoTT1uK2UubypyLEM9bmV3IFMoZS5uKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Ioaz11KEooQyksMTEpLGo9WW8obHQoY3QoV3MsMSksZWUsOCwwLFtrLmkubixrLm4say5hXSkpLmIsdj1uZXcgUyhrLmcpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDE3KSxHYShkKXx8KEs9ZC5kLHR0PVlvKGx0KGN0KFdzLDEpLGVlLDgsMCxbSy5pLm4sSy5uLEsuYV0pKS5iLGIuTWF0aC5hYnMoai10dCk+RWQmJihoPU0sbz1lLHM9bmV3ICRlKGgsaikscmkoZC5hLHMpLHB2KHRoaXMsZCxvLHMsITApLEg9ZS5yLEgmJihHPVh0KHllKFpmKEguZSwwKSkpLHM9bmV3ICRlKGgsRykscmkoZC5hLHMpLHB2KHRoaXMsZCxvLHMsITApLGg9bitILm8qcixvPUgscz1uZXcgJGUoaCxHKSxyaShkLmEscykscHYodGhpcyxkLG8scywhMCkpLHM9bmV3ICRlKGgsdHQpLHJpKGQuYSxzKSxwdih0aGlzLGQsbyxzLCEwKSkpfSxsLmVnPWZ1bmN0aW9uKGUpe3JldHVybiBlLmkubi5iK2Uubi5iK2UuYS5ifSxsLmZnPWZ1bmN0aW9uKCl7cmV0dXJuIHZlKCksSG59LGwuZ2c9ZnVuY3Rpb24oKXtyZXR1cm4gdmUoKSxCbn0sRihBY3QsIldlc3RUb0Vhc3RSb3V0aW5nU3RyYXRlZ3kiLDE4MDYpLEQoODEzLDEse30sZnh0KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGViKHRoaXMuYSl9LGwuYj0wLGwuYz0hMSxsLmQ9ITEsbC5mPTAsRihTeSwiTnViU3BsaW5lIiw4MTMpLEQoNDA3LDEsezQwNzoxfSxldWUseVF0KSxGKFN5LCJOdWJTcGxpbmUvUG9sYXJDUCIsNDA3KSxEKDE0NTMsMSx6YyxWc2UpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIEEwbih1KGUsMzcpKX0sbC5wZj1mdW5jdGlvbihlLG4pe2N4bih0aGlzLHUoZSwzNyksbil9O3ZhciBzeWUsYXllLG95ZSxjeWUsdXllO0YoU3ksIlNwbGluZUVkZ2VSb3V0ZXIiLDE0NTMpLEQoMjY4LDEsezI2ODoxfSxSJCksbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmErIiAtPigiK3RoaXMuYysiKSAiK3RoaXMuYn0sbC5jPTAsRihTeSwiU3BsaW5lRWRnZVJvdXRlci9EZXBlbmRlbmN5IiwyNjgpLEQoNDU1LDIyLHszOjEsMzU6MSwyMjoxLDQ1NToxfSxXYnQpO3ZhciB5YixyNSxseWU9anIoU3ksIlNwbGluZUVkZ2VSb3V0ZXIvU2lkZVRvUHJvY2VzcyIsNDU1LEhyLFVybix1dG4pLGh5ZTtEKDE0NTQsMSxsaSxYUSksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4gbV8oKSwhdShlLDEyOCkub30sRihTeSwiU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMCRUeXBlIiwxNDU0KSxEKDE0NTUsMSx7fSxLUSksbC5HZT1mdW5jdGlvbihlKXtyZXR1cm4gbV8oKSx1KGUsMTI4KS52KzF9LEYoU3ksIlNwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDEkVHlwZSIsMTQ1NSksRCgxNDU2LDEsVW4seEd0KSxsLnRkPWZ1bmN0aW9uKGUpe21lbih0aGlzLmEsdGhpcy5iLHUoZSw0NikpfSxGKFN5LCJTcGxpbmVFZGdlUm91dGVyL2xhbWJkYSQyJFR5cGUiLDE0NTYpLEQoMTQ1NywxLFVuLGtHdCksbC50ZD1mdW5jdGlvbihlKXt5ZW4odGhpcy5hLHRoaXMuYix1KGUsNDYpKX0sRihTeSwiU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMyRUeXBlIiwxNDU3KSxEKDEyOCwxLHszNToxLDEyODoxfSx2b2Usdnh0KSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBVS2UodGhpcyx1KGUsMTI4KSl9LGwuYj0wLGwuZT0hMSxsLmY9MCxsLmc9MCxsLmo9ITEsbC5rPSExLGwubj0wLGwubz0hMSxsLnA9ITEsbC5xPSExLGwucz0wLGwudT0wLGwudj0wLGwuRj0wLEYoU3ksIlNwbGluZVNlZ21lbnQiLDEyOCksRCg0NTksMSx7NDU5OjF9LFlUKSxsLmE9MCxsLmI9ITEsbC5jPSExLGwuZD0hMSxsLmU9ITEsbC5mPTAsRihTeSwiU3BsaW5lU2VnbWVudC9FZGdlSW5mb3JtYXRpb24iLDQ1OSksRCgxMjM0LDEse30sR1EpLEYoR18sZDZ0LDEyMzQpLEQoMTIzNSwxLE9pLFVRKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ibih1KGUsMTM1KSx1KG4sMTM1KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihHXyxuMWUsMTIzNSksRCgxMjMzLDEse30scUh0KSxGKEdfLCJNclRyZWUiLDEyMzMpLEQoMzkzLDIyLHszOjEsMzU6MSwyMjoxLDM5MzoxLDI0NjoxLDIzNDoxfSxyaiksbC5LZj1mdW5jdGlvbigpe3JldHVybiBIb2UodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gSG9lKHRoaXMpfTt2YXIgQUcsUlMsJE8salMsc190PWpyKEdfLCJUcmVlTGF5b3V0UGhhc2VzIiwzOTMsSHIsUnNuLGx0biksZnllO0QoMTEzMCwyMDksUzIsY1l0KSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGs7Zm9yKGplKFJlKHFlKGUsKGd2KCksaF90KSkpKXx8eSQoKHI9bmV3IHJyKChQbSgpLG5ldyBNbShlKSkpLHIpKSxkPSh2PW5ldyBqJCxNbyh2LGUpLEp0KHYsKGZjKCkscVMpLGUpLGs9bmV3IF9yLFdtbihlLHYsayksbHluKGUsdixrKSx2KSxoPXJ5bih0aGlzLmEsZCksbz1uZXcgUyhoKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwxMzUpLEUwbih0aGlzLmIscyxSYyhuLDEvaC5jLmxlbmd0aCkpO2Q9TnhuKGgpLGM1bihkKX0sRihHXywiVHJlZUxheW91dFByb3ZpZGVyIiwxMTMwKSxEKDE4NDcsMSxyMCxXUSksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksaDgoKSxhN30sRihHXywiVHJlZVV0aWwvMSIsMTg0NyksRCgxODQ4LDEscjAsWVEpLGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB3bigpLGg4KCksYTd9LEYoR18sIlRyZWVVdGlsLzIiLDE4NDgpLEQoNTAyLDEzNCx7MzoxLDUwMjoxLDk0OjEsMTM0OjF9KSxsLmc9MCxGKFVfLCJUR3JhcGhFbGVtZW50Iiw1MDIpLEQoMTg4LDUwMix7MzoxLDE4ODoxLDUwMjoxLDk0OjEsMTM0OjF9LE52dCksbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmImJnRoaXMuYz9TJCh0aGlzLmIpKyItPiIrUyQodGhpcy5jKToiZV8iK0hpKHRoaXMpfSxGKFVfLCJURWRnZSIsMTg4KSxEKDEzNSwxMzQsezM6MSwxMzU6MSw5NDoxLDEzNDoxfSxqJCksbC5JYj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87Zm9yKG89bnVsbCxzPWVpKHRoaXMuYiwwKTtzLmIhPXMuZC5jOylyPXUodGkocyksODYpLG8rPShyLmM9PW51bGx8fHIuYy5sZW5ndGg9PTA/Im5fIityLmc6Im5fIityLmMpK2AKYDtmb3Iobj1laSh0aGlzLmEsMCk7bi5iIT1uLmQuYzspZT11KHRpKG4pLDE4OCksbys9KGUuYiYmZS5jP1MkKGUuYikrIi0+IitTJChlLmMpOiJlXyIrSGkoZSkpK2AKYDtyZXR1cm4gb307dmFyIGc2bj1GKFVfLCJUR3JhcGgiLDEzNSk7RCg2MzMsNTAyLHszOjEsNTAyOjEsNjMzOjEsOTQ6MSwxMzQ6MX0pLEYoVV8sIlRTaGFwZSIsNjMzKSxEKDg2LDYzMyx7MzoxLDUwMjoxLDg2OjEsNjMzOjEsOTQ6MSwxMzQ6MX0sRGl0KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFMkKHRoaXMpfTt2YXIgcDZuPUYoVV8sIlROb2RlIiw4Nik7RCgyNTUsMSxyMCxMcCksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9ZWkodGhpcy5hLmQsMCksbmV3IEV4KGUpfSxGKFVfLCJUTm9kZS8yIiwyNTUpLEQoMzU4LDEsc2EsRXgpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB1KHRpKHRoaXMuYSksMTg4KS5jfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIE9SKHRoaXMuYSl9LGwuUWI9ZnVuY3Rpb24oKXt0eih0aGlzLmEpfSxGKFVfLCJUTm9kZS8yLzEiLDM1OCksRCgxODQwLDEsb3Msb1l0KSxsLnBmPWZ1bmN0aW9uKGUsbil7X3luKHRoaXMsdShlLDEzNSksbil9LEYoQTYsIkZhblByb2Nlc3NvciIsMTg0MCksRCgzMjcsMjIsezM6MSwzNToxLDIyOjEsMzI3OjEsMjM0OjF9LHI5KSxsLktmPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZyl7Y2FzZSAwOnJldHVybiBuZXcgV3F0O2Nhc2UgMTpyZXR1cm4gbmV3IG9ZdDtjYXNlIDI6cmV0dXJuIG5ldyBpeDtjYXNlIDM6cmV0dXJuIG5ldyByWjtjYXNlIDQ6cmV0dXJuIG5ldyBzWjtjYXNlIDU6cmV0dXJuIG5ldyBSTDtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihZb3QrKHRoaXMuZiE9bnVsbD90aGlzLmY6IiIrdGhpcy5nKSkpfX07dmFyIElodCxPaHQsUGh0LEZodCxOaHQsTEcsZHllPWpyKEE2LFQ2dCwzMjcsSHIsdG9uLGh0biksZ3llO0QoMTg0MywxLG9zLHJaKSxsLnBmPWZ1bmN0aW9uKGUsbil7YzJuKHRoaXMsdShlLDEzNSksbil9LGwuYT0wLEYoQTYsIkxldmVsSGVpZ2h0UHJvY2Vzc29yIiwxODQzKSxEKDE4NDQsMSxyMCxpWiksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksaDgoKSxhN30sRihBNiwiTGV2ZWxIZWlnaHRQcm9jZXNzb3IvMSIsMTg0NCksRCgxODQxLDEsb3MsaXgpLGwucGY9ZnVuY3Rpb24oZSxuKXtwcG4odGhpcyx1KGUsMTM1KSxuKX0sbC5hPTAsRihBNiwiTmVpZ2hib3JzUHJvY2Vzc29yIiwxODQxKSxEKDE4NDIsMSxyMCxRTiksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHduKCksaDgoKSxhN30sRihBNiwiTmVpZ2hib3JzUHJvY2Vzc29yLzEiLDE4NDIpLEQoMTg0NSwxLG9zLHNaKSxsLnBmPWZ1bmN0aW9uKGUsbil7bzJuKHRoaXMsdShlLDEzNSksbil9LGwuYT0wLEYoQTYsIk5vZGVQb3NpdGlvblByb2Nlc3NvciIsMTg0NSksRCgxODM5LDEsb3MsV3F0KSxsLnBmPWZ1bmN0aW9uKGUsbil7TzNuKHRoaXMsdShlLDEzNSkpfSxGKEE2LCJSb290UHJvY2Vzc29yIiwxODM5KSxEKDE4NDYsMSxvcyxSTCksbC5wZj1mdW5jdGlvbihlLG4pe3Fsbih1KGUsMTM1KSl9LEYoQTYsIlVudHJlZWlmeWVyIiwxODQ2KTt2YXIgek8sJFMscHllLEJodCxNRyx6UyxSaHQsREcsSUcsTTcscVMsT0csbnAsYV90LGJ5ZSxqaHQsWHksJGh0LG9fdDtEKDg1MSwxLE9oLEQzKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxIa3QpLCIiKSwiV2VpZ2h0aW5nIG9mIE5vZGVzIiksIldoaWNoIHdlaWdodGluZyB0byB1c2Ugd2hlbiBjb21wdXRpbmcgYSBub2RlIG9yZGVyLiIpLHVfdCksKFVnKCksdXMpKSxiX3QpLHVuKChRZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFZrdCksIiIpLCJTZWFyY2ggT3JkZXIiKSwiV2hpY2ggc2VhcmNoIG9yZGVyIHRvIHVzZSB3aGVuIGNvbXB1dGluZyBhIHNwYW5uaW5nIHRyZWUuIiksY190KSx1cyksdl90KSx1bihxbikpKSkscGhlKChuZXcgSkwsZSkpfTt2YXIgd3llLGNfdCx2eWUsdV90O0YoRUgsIk1yVHJlZU1ldGFEYXRhUHJvdmlkZXIiLDg1MSksRCg5OTQsMSxPaCxKTCksbC5RZT1mdW5jdGlvbihlKXtwaGUoZSl9O3ZhciBteWUsbF90LHl5ZSx4eWUsa3llLEV5ZSxoX3QsVHllLGZfdCxDeWUsUEcsZF90LF95ZSxnX3QsU3llO0YoRUgsIk1yVHJlZU9wdGlvbnMiLDk5NCksRCg5OTUsMSx7fSxhWiksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBjWXQsZX0sbC5fZT1mdW5jdGlvbihlKXt9LEYoRUgsIk1yVHJlZU9wdGlvbnMvTXJ0cmVlRmFjdG9yeSIsOTk1KSxEKDQ4MCwyMix7MzoxLDM1OjEsMjI6MSw0ODA6MX0sWWJ0KTt2YXIgemh0LHBfdCxiX3Q9anIoRUgsIk9yZGVyV2VpZ2h0aW5nIiw0ODAsSHIsWXJuLGZ0biksQXllO0QoNDI1LDIyLHszOjEsMzU6MSwyMjoxLDQyNToxfSxLYnQpO3ZhciB3X3QscWh0LHZfdD1qcihFSCwiVHJlZWlmeWluZ09yZGVyIiw0MjUsSHIsV3JuLGd0biksTHllO0QoMTQ1OSwxLHpjLFpMKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMTM1KSxNeWV9LGwucGY9ZnVuY3Rpb24oZSxuKXt6Y24odGhpcyx1KGUsMTM1KSxuKX07dmFyIE15ZTtGKCJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZS5wMXRyZWVpZnkiLCJERlNUcmVlaWZ5ZXIiLDE0NTkpLEQoMTQ2MCwxLHpjLGN0dCksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEzNSksRHllfSxsLnBmPWZ1bmN0aW9uKGUsbil7Q3BuKHRoaXMsdShlLDEzNSksbil9O3ZhciBEeWU7Rigib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDJvcmRlciIsIk5vZGVPcmRlcmVyIiwxNDYwKSxEKDE0NjEsMSx6YyxvdHQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxMzUpLEl5ZX0sbC5wZj1mdW5jdGlvbihlLG4pe3F2bih0aGlzLHUoZSwxMzUpLG4pfSxsLmE9MDt2YXIgSXllO0YoIm9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLnAzcGxhY2UiLCJOb2RlUGxhY2VyIiwxNDYxKSxEKDE0NjIsMSx6YyxHQiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDEzNSksT3llfSxsLnBmPWZ1bmN0aW9uKGUsbil7Z2RuKHUoZSwxMzUpLG4pfTt2YXIgT3llO0YoIm9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLnA0cm91dGUiLCJFZGdlUm91dGVyIiwxNDYyKTt2YXIgSFM7RCg0OTUsMjIsezM6MSwzNToxLDIyOjEsNDk1OjEsMjQ2OjEsMjM0OjF9LFhidCksbC5LZj1mdW5jdGlvbigpe3JldHVybiB4aWUodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4geGllKHRoaXMpfTt2YXIgRkcsRDcsbV90PWpyKEdrdCwiUmFkaWFsTGF5b3V0UGhhc2VzIiw0OTUsSHIsS3JuLGR0biksUHllO0QoMTEzMSwyMDksUzIsekh0KSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2O2lmKHI9VG9lKHRoaXMsZSksdnIobiwiUmFkaWFsIGxheW91dCIsci5jLmxlbmd0aCksamUoUmUocWUoZSwodXkoKSxMX3QpKSkpfHx5JCgocz1uZXcgcnIoKFBtKCksbmV3IE1tKGUpKSkscykpLHY9RDBuKGUpLHdvKGUsKG05KCksSFMpLHYpLCF2KXRocm93IGl0KG5ldyBGbigiVGhlIGdpdmVuIGdyYXBoIGlzIG5vdCBhIHRyZWUhIikpO2ZvcihvPVh0KHllKHFlKGUsUkcpKSksbz09MCYmKG89Um9lKGUpKSx3byhlLFJHLG8pLGQ9bmV3IFMoVG9lKHRoaXMsZSkpO2QuYTxkLmMuYy5sZW5ndGg7KWg9dShKKGQpLDUxKSxoLnBmKGUsUmMobiwxKSk7b3Iobil9LEYoR2t0LCJSYWRpYWxMYXlvdXRQcm92aWRlciIsMTEzMSksRCg1NDksMSxPaSxQUiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBybW4odGhpcy5hLHRoaXMuYix1KGUsMzMpLHUobiwzMykpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LGwuYT0wLGwuYj0wLEYoR2t0LCJSYWRpYWxVdGlsL2xhbWJkYSQwJFR5cGUiLDU0OSksRCgxMzc1LDEsb3MsY1opLGwucGY9ZnVuY3Rpb24oZSxuKXtrNG4odShlLDMzKSxuKX0sRihYMWUsIkNhbGN1bGF0ZUdyYXBoU2l6ZSIsMTM3NSksRCg0NDIsMjIsezM6MSwzNToxLDIyOjEsNDQyOjEsMjM0OjF9LFdldCksbC5LZj1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IFpOO2Nhc2UgMTpyZXR1cm4gbmV3IG9aO2Nhc2UgMjpyZXR1cm4gbmV3IGNaO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKFlvdCsodGhpcy5mIT1udWxsP3RoaXMuZjoiIit0aGlzLmcpKSl9fTt2YXIgSGh0LFZodCxHaHQsRnllPWpyKFgxZSxUNnQsNDQyLEhyLFZpbixwdG4pLE55ZTtEKDY0NSwxLHt9KSxsLmU9MSxsLmc9MCxGKERjdCwiQWJzdHJhY3RSYWRpdXNFeHRlbnNpb25Db21wYWN0aW9uIiw2NDUpLEQoMTc3Miw2NDUse30sald0KSxsLmhnPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztmb3IodGhpcy5jPXUocWUoZSwobTkoKSxIUykpLDMzKSxPdHQodGhpcyx0aGlzLmMpLHRoaXMuZD1wc3QodShxZShlLCh1eSgpLHFPKSksMjkzKSksaz11KHFlKGUsV2h0KSwxOSksayYmdncodGhpcyxrLmEpLHY9eWUocWUoZSwodWkoKSxXMikpKSxDQyh0aGlzLChPbih2KSx2KSksQz13eSh0aGlzLmMpLHRoaXMuZCYmdGhpcy5kLmxnKEMpLHZtbih0aGlzLEMpLGQ9bmV3IHlsKGx0KGN0KHJzLDEpLFExZSwzMywwLFt0aGlzLmNdKSkscj0wO3I8MjtyKyspZm9yKG49MDtuPEMuYy5sZW5ndGg7bisrKW89bmV3IHlsKGx0KGN0KHJzLDEpLFExZSwzMywwLFsoQW4obixDLmMubGVuZ3RoKSx1KEMuY1tuXSwzMykpXSkpLGg9bjxDLmMubGVuZ3RoLTE/KEFuKG4rMSxDLmMubGVuZ3RoKSx1KEMuY1tuKzFdLDMzKSk6KEFuKDAsQy5jLmxlbmd0aCksdShDLmNbMF0sMzMpKSxzPW49PTA/dShOZShDLEMuYy5sZW5ndGgtMSksMzMpOihBbihuLTEsQy5jLmxlbmd0aCksdShDLmNbbi0xXSwzMykpLERhZSh0aGlzLChBbihuLEMuYy5sZW5ndGgpLHUoQy5jW25dLDMzKSxkKSxzLGgsbyl9LEYoRGN0LCJBbm51bHVzV2VkZ2VDb21wYWN0aW9uIiwxNzcyKSxEKDEzNzQsMSxvcyxvWiksbC5wZj1mdW5jdGlvbihlLG4pe0Zkbih1KGUsMzMpLG4pfSxGKERjdCwiR2VuZXJhbENvbXBhY3RvciIsMTM3NCksRCgxNzcxLDY0NSx7fSx1WiksbC5oZz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztyPXUocWUoZSwobTkoKSxIUykpLDMzKSx0aGlzLmY9cix0aGlzLmI9cHN0KHUocWUoZSwodXkoKSxxTykpLDI5MykpLG89dShxZShlLFdodCksMTkpLG8mJnZ3KHRoaXMsby5hKSxzPXllKHFlKGUsKHVpKCksVzIpKSksQ0ModGhpcywoT24ocykscykpLG49d3kociksdGhpcy5iJiZ0aGlzLmIubGcobiksY29lKHRoaXMsbil9LGwuYT0wLEYoRGN0LCJSYWRpYWxDb21wYWN0aW9uIiwxNzcxKSxEKDE3NzksMSx7fSxsWiksbC5pZz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQ7Zm9yKHRoaXMuYT1lLG49MCxkPXd5KGUpLHM9MCxoPW5ldyBTKGQpO2guYTxoLmMuYy5sZW5ndGg7KWZvcihvPXUoSihoKSwzMyksKytzLHI9cztyPGQuYy5sZW5ndGg7cisrKUl5bih0aGlzLG8sKEFuKHIsZC5jLmxlbmd0aCksdShkLmNbcl0sMzMpKSkmJihuKz0xKTtyZXR1cm4gbn0sRihXa3QsIkNyb3NzaW5nTWluaW1pemF0aW9uUG9zaXRpb24iLDE3NzkpLEQoMTc3NywxLHt9LGhaKSxsLmlnPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2ZvcihzPTAscj1uZXcgYXIobHIoSzAoZSkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSw3OSksdj1Ebyh1KEF0KCghbi5jJiYobi5jPW5ldyBDbihicixuLDUsOCkpLG4uYyksMCksODIpKSxDPXYuaSt2LmcvMixNPXYuait2LmYvMixvPWUuaStlLmcvMixoPWUuaitlLmYvMixqPW5ldyBDYSxqLmE9Qy1vLGouYj1NLWgsZD1uZXcgJGUoai5hLGouYiksbUUoZCxlLmcsZS5mKSxqLmEtPWQuYSxqLmItPWQuYixvPUMtai5hLGg9TS1qLmIsaz1uZXcgJGUoai5hLGouYiksbUUoayx2Lmcsdi5mKSxqLmEtPWsuYSxqLmItPWsuYixDPW8rai5hLE09aCtqLmIsSD1DLW8sRz1NLWgscys9Yi5NYXRoLnNxcnQoSCpIK0cqRyk7cmV0dXJuIHN9LEYoV2t0LCJFZGdlTGVuZ3RoT3B0aW1pemF0aW9uIiwxNzc3KSxEKDE3NzgsMSx7fSxmWiksbC5pZz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqO2ZvcihzPTAscj1uZXcgYXIobHIoSzAoZSkuYS5LYygpLG5ldyB6KSk7enIocik7KW49dShNcihyKSw3OSksdj1Ebyh1KEF0KCghbi5jJiYobi5jPW5ldyBDbihicixuLDUsOCkpLG4uYyksMCksODIpKSxrPXYuaSt2LmcvMixDPXYuait2LmYvMixvPXUocWUodiwodWkoKSxZNikpLDgpLGg9ZS5pK28uYStlLmcvMixkPWUuaitvLmIrZS5mLE09ay1oLGo9Qy1kLHMrPWIuTWF0aC5zcXJ0KE0qTStqKmopO3JldHVybiBzfSxGKFdrdCwiRWRnZUxlbmd0aFBvc2l0aW9uT3B0aW1pemF0aW9uIiwxNzc4KSxEKDEzNzMsNjQ1LG9zLFpOKSxsLnBmPWZ1bmN0aW9uKGUsbil7ajJuKHRoaXMsdShlLDMzKSxuKX0sRigib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuaW50ZXJtZWRpYXRlLm92ZXJsYXBzIiwiUmFkaXVzRXh0ZW5zaW9uT3ZlcmxhcFJlbW92YWwiLDEzNzMpLEQoNDI2LDIyLHszOjEsMzU6MSwyMjoxLDQyNjoxfSxRYnQpO3ZhciB5X3QsVWh0LHhfdD1qcihXXywiQW5udWx1c1dlZGdlQ3JpdGVyaWEiLDQyNixIcixYcm4sYnRuKSxCeWU7RCgzODAsMjIsezM6MSwzNToxLDIyOjEsMzgwOjF9LFlldCk7dmFyIE5HLGtfdCxFX3QsVF90PWpyKFdfLGE2dCwzODAsSHIsR2luLHd0biksUnllO0QoODUyLDEsT2gsdXR0KSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxZa3QpLCIiKSwiT3JkZXIgSUQiKSwiVGhlIGlkIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhbiBvcmRlciBmb3Igbm9kZXMgb2Ygb25lIHJhZGl1cy4gVGhpcyBjYW4gYmUgdXNlZCB0byBzb3J0IHRoZW0gaW4gdGhlIGxheWVyIGFjY29yZGluZ2x5LiIpLHBlKDApKSwoVWcoKSxnYykpLGphKSx1bigoUWYoKSxlYSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxLa3QpLCIiKSwiUmFkaXVzIiksIlRoZSByYWRpdXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCByYWRpdXMgZm9yIHRoZSByYWRpYWwgbGF5b3V0ZXIuIiksMCksT28pLGxhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLE9jdCksIiIpLCJDb21wYWN0aW9uIiksIldpdGggdGhlIGNvbXBhY3RlciBvcHRpb24gaXQgY2FuIGJlIGRldGVybWluZWQgaG93IGNvbXBhY3Rpb24gb24gdGhlIGdyYXBoIGlzIGRvbmUuIEl0IGNhbiBiZSBjaG9zZW4gYmV0d2VlbiBub25lLCB0aGUgcmFkaWFsIGNvbXBhY3Rpb24gb3IgdGhlIGNvbXBhY3Rpb24gb2Ygd2VkZ2VzIHNlcGFyYXRlbHkuIiksQ190KSx1cyksVF90KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFBjdCksIiIpLCJDb21wYWN0aW9uIFN0ZXAgU2l6ZSIpLCJEZXRlcm1pbmUgdGhlIHNpemUgb2Ygc3RlcHMgd2l0aCB3aGljaCB0aGUgY29tcGFjdGlvbiBpcyBkb25lLiBTdGVwIHNpemUgMSBjb3JyZWxhdGVzIHRvIGEgY29tcGFjdGlvbiBvZiAxIHBpeGVsIHBlciBJdGVyYXRpb24uIikscGUoMSkpLGdjKSxqYSksdW4ocW4pKSkpLGNhKGUsUGN0LE9jdCxudWxsKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsWGt0KSwiIiksIlNvcnRlciIpLCJTb3J0IHRoZSBub2RlcyBwZXIgcmFkaXVzIGFjY29yZGluZyB0byB0aGUgc29ydGluZyBhbGdvcml0aG0uIFRoZSBzdHJhdGVnaWVzIGFyZSBub25lLCBieSB0aGUgZ2l2ZW4gb3JkZXIgaWQsIG9yIHNvcnRpbmcgdGhlbSBieSBwb2xhciBjb29yZGluYXRlcy4iKSxTX3QpLHVzKSxSX3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUWt0KSwiIiksIkFubnVsdXMgV2VkZ2UgQ3JpdGVyaWEiKSwiRGV0ZXJtaW5lIGhvdyB0aGUgd2VkZ2UgZm9yIHRoZSBub2RlIHBsYWNlbWVudCBpcyBjYWxjdWxhdGVkLiBJdCBjYW4gYmUgY2hvc2VuIGJldHdlZW4gd2VkZ2UgZGV0ZXJtaW5hdGlvbiBieSB0aGUgbnVtYmVyIG9mIGxlYXZlcyBvciBieSB0aGUgbWF4aW11bSBzdW0gb2YgZGlhZ29uYWxzLiIpLEFfdCksdXMpLHhfdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxaa3QpLCIiKSwiVHJhbnNsYXRpb24gT3B0aW1pemF0aW9uIiksIkZpbmQgdGhlIG9wdGltYWwgdHJhbnNsYXRpb24gb2YgdGhlIG5vZGVzIG9mIHRoZSBmaXJzdCByYWRpaSBhY2NvcmRpbmcgdG8gdGhpcyBjcml0ZXJpYS4gRm9yIGV4YW1wbGUgZWRnZSBjcm9zc2luZ3MgY2FuIGJlIG1pbmltaXplZC4iKSxfX3QpLHVzKSxGX3QpLHVuKHFuKSkpKSxNaGUoKG5ldyBVQixlKSl9O3ZhciBqeWUsJHllLENfdCx6eWUsX190LHF5ZSxIeWUsVnllLFNfdCxHeWUsQV90O0YoV18sIlJhZGlhbE1ldGFEYXRhUHJvdmlkZXIiLDg1MiksRCg5OTYsMSxPaCxVQiksbC5RZT1mdW5jdGlvbihlKXtNaGUoZSl9O3ZhciBXaHQsWWh0LFV5ZSxXeWUsWXllLEt5ZSxMX3QsTV90LEJHLFh5ZSxReWUsUkcscU8sWnllLERfdDtGKFdfLCJSYWRpYWxPcHRpb25zIiw5OTYpLEQoOTk3LDEse30sZFopLGwuJGU9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgekh0LGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxGKFdfLCJSYWRpYWxPcHRpb25zL1JhZGlhbEZhY3RvcnkiLDk5NyksRCgzNDAsMjIsezM6MSwzNToxLDIyOjEsMzQwOjF9LGlqKTt2YXIgSV90LE9fdCxQX3QsS2h0LEZfdD1qcihXXywiUmFkaWFsVHJhbnNsYXRpb25TdHJhdGVneSIsMzQwLEhyLGpzbix2dG4pLEp5ZTtEKDI5MywyMix7MzoxLDM1OjEsMjI6MSwyOTM6MX0sS2V0KTt2YXIgTl90LFhodCxCX3QsUl90PWpyKFdfLCJTb3J0aW5nU3RyYXRlZ3kiLDI5MyxIcixXaW4sbXRuKSx0M2U7RCgxNDQ5LDEsemMsSk4pLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMyksbnVsbH0sbC5wZj1mdW5jdGlvbihlLG4pe1kybih0aGlzLHUoZSwzMyksbil9LGwuYz0wLEYoIm9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLnAxcG9zaXRpb24iLCJFYWRlc1JhZGlhbCIsMTQ0OSksRCgxNzc1LDEse30sZ1opLGwuamc9ZnVuY3Rpb24oZSl7cmV0dXJuIGJzZShlKX0sRihaMWUsIkFubnVsdXNXZWRnZUJ5TGVhZnMiLDE3NzUpLEQoMTc3NiwxLHt9LHRCKSxsLmpnPWZ1bmN0aW9uKGUpe3JldHVybiBFYWUodGhpcyxlKX0sRihaMWUsIkFubnVsdXNXZWRnZUJ5Tm9kZVNwYWNlIiwxNzc2KSxEKDE0NTAsMSx6YyxlQiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMzKSxudWxsfSxsLnBmPWZ1bmN0aW9uKGUsbil7YTBuKHRoaXMsdShlLDMzKSxuKX0sRigib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwucDJyb3V0aW5nIiwiU3RyYWlnaHRMaW5lRWRnZVJvdXRlciIsMTQ1MCksRCg4MTEsMSx7fSxacHQpLGwua2c9ZnVuY3Rpb24oZSl7fSxsLmxnPWZ1bmN0aW9uKGUpe3JxdCh0aGlzLGUpfSxGKEprdCwiSURTb3J0ZXIiLDgxMSksRCgxNzc0LDEsT2ksbkIpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gTWNuKHUoZSwzMyksdShuLDMzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihKa3QsIklEU29ydGVyL2xhbWJkYSQwJFR5cGUiLDE3NzQpLEQoMTc3MywxLHt9LHluZSksbC5rZz1mdW5jdGlvbihlKXtTWnQodGhpcyxlKX0sbC5sZz1mdW5jdGlvbihlKXt2YXIgbjtlLmRjKCl8fCh0aGlzLmV8fChuPUVLdCh1KGUuWGIoMCksMzMpKSxTWnQodGhpcyxuKSkscnF0KHRoaXMuZSxlKSl9LEYoSmt0LCJQb2xhckNvb3JkaW5hdGVTb3J0ZXIiLDE3NzMpLEQoMTEzNiwyMDksUzIscFopLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZSxSbix6bixocjtpZih2cihuLCJSZWN0YW5nbGUgUGFja2luZyIsMSksbi5uJiZuLm4mJmUmJmdmKG4scGYoZSksKFNsKCksUWwpKSxyPVh0KHllKHFlKGUsKHNhdCgpLGwzZSkpKSksdHQ9dShxZShlLFFfdCksMzgxKSxTdD1qZShSZShxZShlLFlfdCkpKSxfZT1qZShSZShxZShlLFhfdCkpKSxqPWplKFJlKHFlKGUsR190KSkpLFdlPXUocWUoZSx3M2UpLDExNiksdWU9WHQoeWUocWUoZSxtM2UpKSksbz1qZShSZShxZShlLEpfdCkpKSxIPWplKFJlKHFlKGUsVV90KSkpLE10PWplKFJlKHFlKGUsV190KSkpLGhyPVh0KHllKHFlKGUsdFN0KSkpLFJuPSghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSxtbmUoUm4pLE10KXtmb3IoSz1uZXcgaGUsaz1uZXcgbnIoUm4pO2suZSE9ay5pLmdjKCk7KWQ9dShkcihrKSwzMyksbzIoZCxITykmJihLLmNbSy5jLmxlbmd0aF09ZCk7Zm9yKEM9bmV3IFMoSyk7Qy5hPEMuYy5jLmxlbmd0aDspZD11KEooQyksMzMpLFgkKFJuLGQpO2Zvcih3bigpLFpzKEssbmV3IGJaKSxNPW5ldyBTKEspO00uYTxNLmMuYy5sZW5ndGg7KWQ9dShKKE0pLDMzKSxRZT11KHFlKGQsSE8pLDE5KS5hLFFlPWIuTWF0aC5taW4oUWUsUm4uaSksbl8oUm4sUWUsZCk7Zm9yKGd0PTAsdj1uZXcgbnIoUm4pO3YuZSE9di5pLmdjKCk7KWQ9dShkcih2KSwzMyksd28oZCxWX3QscGUoZ3QpKSwrK2d0fUt0PVE0dChlKSxLdC5hLT1XZS5iK1dlLmMsS3QuYi09V2UuZCtXZS5hLFJ0PUt0LmEsaHI8MHx8aHI8S3QuYT8oRz1uZXcgTll0KHIsdHQsU3QpLGg9Q21uKEcsUm4sdWUsV2UpLG4ubiYmbi5uJiZlJiZnZihuLHBmKGUpLChTbCgpLFFsKSkpOmg9bmV3IEZudChyLGhyLDAsKEFFKCksVVMpKSxLdC5hKz1XZS5iK1dlLmMsS3QuYis9V2UuZCtXZS5hLF9lfHwobW5lKFJuKSx6bj1uZXcgV1p0KHIsaixILG8sdWUpLFJ0PWIuTWF0aC5tYXgoS3QuYSxoLmMpLGg9cjVuKHpuLFJuLFJ0LEt0LG4sZSxXZSkpLG51bihSbixXZSksd3YoZSxoLmMrKFdlLmIrV2UuYyksaC5iKyhXZS5kK1dlLmEpLCExLCEwKSxqZShSZShxZShlLEtfdCkpKXx8eSQoKHM9bmV3IHJyKChQbSgpLG5ldyBNbShlKSkpLHMpKSxuLm4mJm4ubiYmZSYmZ2YobixwZihlKSwoU2woKSxRbCkpLG9yKG4pfSxGKG5kZSwiUmVjdFBhY2tpbmdMYXlvdXRQcm92aWRlciIsMTEzNiksRCgxMTM3LDEsT2ksYlopLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gV3VuKHUoZSwzMyksdShuLDMzKSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihuZGUsIlJlY3RQYWNraW5nTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZSIsMTEzNyksRCgxMjU2LDEse30sTll0KSxsLmE9MCxsLmM9ITEsRihUSCwiQXJlYUFwcHJveGltYXRpb24iLDEyNTYpO3ZhciBqX3Q9S2koVEgsIkJlc3RDYW5kaWRhdGVGaWx0ZXIiKTtEKDYzOCwxLHs1MjY6MX0sS1QpLGwubWc9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkLHYsaztmb3Ioaz1uZXcgaGUsaD1hcyx2PW5ldyBTKGUpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDIyMCksaD1iLk1hdGgubWluKGgsKGQuYysoci5iK3IuYykpKihkLmIrKHIuZCtyLmEpKSk7Zm9yKG89bmV3IFMoZSk7by5hPG8uYy5jLmxlbmd0aDspcz11KEoobyksMjIwKSwocy5jKyhyLmIrci5jKSkqKHMuYisoci5kK3IuYSkpPT1oJiYoay5jW2suYy5sZW5ndGhdPXMpO3JldHVybiBrfSxGKFRILCJBcmVhRmlsdGVyIiw2MzgpLEQoNjM5LDEsezUyNjoxfSxqTCksbC5tZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoLGQsdixrO2Zvcih2PW5ldyBoZSxrPWFzLGQ9bmV3IFMoZSk7ZC5hPGQuYy5jLmxlbmd0aDspaD11KEooZCksMjIwKSxrPWIuTWF0aC5taW4oayxiLk1hdGguYWJzKChoLmMrKHIuYityLmMpKS8oaC5iKyhyLmQrci5hKSktbikpO2ZvcihvPW5ldyBTKGUpO28uYTxvLmMuYy5sZW5ndGg7KXM9dShKKG8pLDIyMCksYi5NYXRoLmFicygocy5jKyhyLmIrci5jKSkvKHMuYisoci5kK3IuYSkpLW4pPT1rJiYodi5jW3YuYy5sZW5ndGhdPXMpO3JldHVybiB2fSxGKFRILCJBc3BlY3RSYXRpb0ZpbHRlciIsNjM5KSxEKDYzNywxLHs1MjY6MX0sWFQpLGwubWc9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkLHYsaztmb3Ioaz1uZXcgaGUsaD1Dcyx2PW5ldyBTKGUpO3YuYTx2LmMuYy5sZW5ndGg7KWQ9dShKKHYpLDIyMCksaD1iLk1hdGgubWF4KGgsS3d0KGQuYysoci5iK3IuYyksZC5iKyhyLmQrci5hKSxkLmEpKTtmb3Iobz1uZXcgUyhlKTtvLmE8by5jLmMubGVuZ3RoOylzPXUoSihvKSwyMjApLEt3dChzLmMrKHIuYityLmMpLHMuYisoci5kK3IuYSkscy5hKT09aCYmKGsuY1trLmMubGVuZ3RoXT1zKTtyZXR1cm4ga30sRihUSCwiU2NhbGVNZWFzdXJlRmlsdGVyIiw2MzcpLEQoMzgxLDIyLHszOjEsMzU6MSwyMjoxLDM4MToxfSxYZXQpO3ZhciAkX3Qsel90LFFodCxxX3Q9anIoRmN0LCJPcHRpbWl6YXRpb25Hb2FsIiwzODEsSHIsVWluLHl0biksZTNlO0QoODU2LDEsT2gsWEIpLGwuUWU9ZnVuY3Rpb24oZSl7YW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHQ4dCksIiIpLCJPcHRpbWl6YXRpb24gR29hbCIpLCJPcHRpbWl6YXRpb24gZ29hbCBmb3IgYXBwcm94aW1hdGlvbiBvZiB0aGUgYm91bmRpbmcgYm94IGdpdmVuIGJ5IHRoZSBmaXJzdCBpdGVyYXRpb24uIERldGVybWluZXMgd2hldGhlciBsYXlvdXQgaXMgc29ydGVkIGJ5IHRoZSBtYXhpbXVtIHNjYWxpbmcsIGFzcGVjdCByYXRpbywgb3IgYXJlYS4gRGVwZW5kaW5nIG9uIHRoZSBzdHJhdGVneSB0aGUgYXNwZWN0IHJhdGlvIG1pZ2h0IGJlIG5lYXJseSBpZ25vcmVkLiIpLEhfdCksKFVnKCksdXMpKSxxX3QpLHVuKChRZigpLGVhKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGU4dCksIiIpLCJTaGlmdCBMYXN0IFBsYWNlZC4iKSwiV2hlbiBwbGFjaW5nIGEgcmVjdGFuZ2xlIGJlaGluZCBvciBiZWxvdyB0aGUgbGFzdCBwbGFjZWQgcmVjdGFuZ2xlIGluIHRoZSBmaXJzdCBpdGVyYXRpb24sIGl0IGlzIHNvbWV0aW1lcyBwb3NzaWJsZSB0byBzaGlmdCB0aGUgcmVjdGFuZ2xlIGZ1cnRoZXIgdG8gdGhlIGxlZnQgb3IgcmlnaHQsIHJlc3VsdGluZyBpbiBsZXNzIHdoaXRlc3BhY2UuIFRydWUgKGRlZmF1bHQpIGVuYWJsZXMgdGhlIHNoaWZ0IGFuZCBmYWxzZSBkaXNhYmxlcyBpdC4gRGlzYWJsaW5nIHRoZSBzaGlmdCBwcm9kdWNlcyBhIGdyZWF0ZXIgYXBwcm94aW1hdGVkIGFyZWEgYnkgdGhlIGZpcnN0IGl0ZXJhdGlvbiBhbmQgYSBsYXlvdXQsIHdoZW4gdXNpbmcgT05MWSB0aGUgZmlyc3QgaXRlcmF0aW9uIChkZWZhdWx0IG5vdCB0aGUgY2FzZSksIHdoZXJlIGl0IGlzIHNvbWV0aW1lcyBpbXBvc3NpYmxlIHRvIGltcGxlbWVudCBhIHNpemUgdHJhbnNmb3JtYXRpb24gb2YgcmVjdGFuZ2xlcyB0aGF0IHdpbGwgZmlsbCB0aGUgYm91bmRpbmcgYm94IGFuZCBlbGltaW5hdGUgZW1wdHkgc3BhY2VzLiIpLChObigpLCEwKSksTGEpLFJzKSx1bihlYSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG44dCksIiIpLCJDdXJyZW50IHBvc2l0aW9uIG9mIGEgbm9kZSBpbiB0aGUgb3JkZXIgb2Ygbm9kZXMiKSwiVGhlIHJlY3RhbmdsZXMgYXJlIG9yZGVyZWQuIE5vcm1hbGx5IGFjY29yZGluZyB0byB0aGVpciBkZWZpbml0aW9uIHRoZSB0aGUgbW9kZWwuIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiBhIG5vZGUuIikscGUoLTEpKSxnYyksamEpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscjh0KSwiIiksIkRlc2lyZWQgaW5kZXggb2Ygbm9kZSIpLCJUaGUgcmVjdGFuZ2xlcyBhcmUgb3JkZXJlZC4gTm9ybWFsbHkgYWNjb3JkaW5nIHRvIHRoZWlyIGRlZmluaXRpb24gdGhlIHRoZSBtb2RlbC4gVGhpcyBvcHRpb24gYWxsb3dzIHRvIHNwZWNpZnkgYSBkZXNpcmVkIHBvc2l0aW9uIHRoYXQgaGFzIHByZWZlcmVuY2Ugb3ZlciB0aGUgb3JpZ2luYWwgcG9zaXRpb24uIikscGUoLTEpKSxnYyksamEpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsaTh0KSwiIiksIk9ubHkgQXJlYSBBcHByb3hpbWF0aW9uIiksIklmIGVuYWJsZWQgb25seSB0aGUgd2lkdGggYXBwcm94aW1hdGlvbiBzdGVwIGlzIGV4ZWN1dGVkIGFuZCB0aGUgbm9kZXMgYXJlIHBsYWNlZCBhY2NvcmRpbmdseS4gVGhlIG5vZGVzIGFyZSBsYXlvdXRlZCBhY2NvcmRpbmcgdG8gdGhlIHBhY2tpbmdTdHJhdGVneS4gSWYgc2V0IHRvIHRydWUgbm90IGV4cGFuc2lvbiBvZiBub2RlcyBpcyB0YWtpbmcgcGxhY2UuIiksITEpLExhKSxScyksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxzOHQpLCIiKSwiQ29tcGFjdCBSb3dzIiksIkVuYWJsZXMgY29tcGFjdGlvbi4gQ29tcGFjdHMgYmxvY2tzIGlmIHRoZXkgZG8gbm90IHVzZSB0aGUgZnVsbCBoZWlnaHQgb2YgdGhlIHJvdy4gVGhpcyBvcHRpb24gYWxsb3dzIHRvIGhhdmUgYSBzbWFsbGVyIGRyYXdpbmcuIElmIHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkIGFsbCBub2RlcyBhcmUgcGxhY2VkIG5leHQgdG8gZWFjaCBvdGhlciBpbiByb3dzLiIpLCEwKSxMYSksUnMpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTmN0KSwiIiksIkZpdCBBc3BlY3QgUmF0aW8iKSwiRXhwYW5kcyBub2RlcyBpZiBleHBhbmROb2RlcyBpcyB0cnVlIHRvIGZpdCB0aGUgYXNwZWN0IHJhdGlvIGluc3RlYWQgb2Ygb25seSBpbiB0aGVpciBib3VuZHMuIFRoZSBvcHRpb24gaXMgb25seSB1c2VmdWwgaWYgdGhlIHVzZWQgcGFja2luZ1N0cmF0ZWd5IGlzIEFTUEVDVF9SQVRJT19EUklWRU4sIG90aGVyd2lzZSB0aGlzIG1heSByZXN1bHQgaW4gdW5yZWFzb25hYmxlIG5kb2UgZXhwYW5zaW9uLiIpLCExKSxMYSksUnMpLHVuKGVhKSkpKSxjYShlLE5jdCxDSCxudWxsKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsYTh0KSwiIiksIlRhcmdldCBXaWR0aCIpLCJPcHRpb24gdG8gcGxhY2UgdGhlIHJlY3RhbmdsZXMgaW4gdGhlIGdpdmVuIHRhcmdldCB3aWR0aCBpbnN0ZWFkIG9mIGFwcHJveGltYXRpbmcgdGhlIHdpZHRoIHVzaW5nIHRoZSBkZXNpcmVkIGFzcGVjdCByYXRpby4gVGhlIHBhZGRpbmcgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMuIE1lYW5pbmcgYSBkcmF3aW5nIHdpbGwgaGF2ZSB3aWR0aCBvZiB0YXJnZXR3aWR0aCArIGhvcml6b250YWwgcGFkZGluZy4iKSwtMSksT28pLGxhKSx1bihlYSkpKSksWmhlKChuZXcgR2ssZSkpfTt2YXIgbjNlLHIzZSxpM2UsczNlLGEzZSxvM2UsSF90LGMzZSx1M2U7RihGY3QsIlJlY3RQYWNraW5nTWV0YURhdGFQcm92aWRlciIsODU2KSxEKDEwMDQsMSxPaCxHayksbC5RZT1mdW5jdGlvbihlKXtaaGUoZSl9O3ZhciBsM2UsaDNlLFZfdCxITyxHX3QsVV90LFdfdCxmM2UsWV90LGQzZSxnM2UscDNlLGIzZSxLX3QsWF90LFFfdCx3M2UsWl90LHYzZSxKX3QsbTNlLHRTdDtGKEZjdCwiUmVjdFBhY2tpbmdPcHRpb25zIiwxMDA0KSxEKDEwMDUsMSx7fSx3WiksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBwWixlfSxsLl9lPWZ1bmN0aW9uKGUpe30sRihGY3QsIlJlY3RQYWNraW5nT3B0aW9ucy9SZWN0cGFja2luZ0ZhY3RvcnkiLDEwMDUpLEQoMTI1NywxLHt9LFdadCksbC5hPTAsbC5iPSExLGwuYz0wLGwuZD0wLGwuZT0hMSxsLmY9ITEsbC5nPTAsRigib3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZy5zZWNvbmRpdGVyYXRpb24iLCJSb3dGaWxsaW5nQW5kQ29tcGFjdGlvbiIsMTI1NyksRCgxODcsMSx7MTg3OjF9LElpdCksbC5hPTAsbC5jPSExLGwuZD0wLGwuZT0wLGwuZj0wLGwuZz0wLGwuaT0wLGwuaz0hMSxsLm89YXMsbC5wPWFzLGwucj0wLGwucz0wLGwudD0wLEYodE8sIkJsb2NrIiwxODcpLEQoMjExLDEsezIxMToxfSxFJCksbC5hPTAsbC5iPTAsbC5kPTAsbC5lPTAsbC5mPTAsRih0TywiQmxvY2tSb3ciLDIxMSksRCg0NDMsMSx7NDQzOjF9LHF2dCksbC5iPTAsbC5jPTAsbC5kPTAsbC5lPTAsbC5mPTAsRih0TywiQmxvY2tTdGFjayIsNDQzKSxEKDIyMCwxLHsyMjA6MX0sRm50LGIzdCksbC5hPTAsbC5iPTAsbC5jPTAsbC5kPTAsbC5lPTA7dmFyIGI2bj1GKHRPLCJEcmF3aW5nRGF0YSIsMjIwKTtEKDM1NSwyMix7MzoxLDM1OjEsMjI6MSwzNTU6MX0sRE0pO3ZhciBHNixpNSxWUyxHUyxVUyx5M2U9anIodE8sIkRyYXdpbmdEYXRhRGVzY3JpcHRvciIsMzU1LEhyLGthbix4dG4pLHgzZTtEKDIwMCwxLHsyMDA6MX0sWnZ0KSxsLmI9MCxsLmM9MCxsLmU9MCxsLmY9MCxGKHRPLCJSZWN0Um93IiwyMDApLEQoNzU2LDEse30sV3l0KSxsLmo9MCxGKEF5LHcxZSw3NTYpLEQoMTI0NSwxLHt9LHZaKSxsLkplPWZ1bmN0aW9uKGUpe3JldHVybiBXcChlLmEsZS5iKX0sRihBeSx2MWUsMTI0NSksRCgxMjQ2LDEse30sWCR0KSxsLkplPWZ1bmN0aW9uKGUpe3JldHVybiBMYW4odGhpcy5hLGUpfSxGKEF5LG0xZSwxMjQ2KSxEKDEyNDcsMSx7fSxRJHQpLGwuSmU9ZnVuY3Rpb24oZSl7cmV0dXJuIE5mbih0aGlzLmEsZSl9LEYoQXkseTFlLDEyNDcpLEQoMTI0OCwxLHt9LFokdCksbC5KZT1mdW5jdGlvbihlKXtyZXR1cm4gSXVuKHRoaXMuYSxlKX0sRihBeSwiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMyRUeXBlIiwxMjQ4KSxEKDEyNDksMSx7fSxKJHQpLGwuSmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGJibih0aGlzLmEsZSl9LEYoQXkseDFlLDEyNDkpLEQoMTEzMywyMDksUzIsSEh0KSxsLlplPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHO2ZvcihvMihlLChjSSgpLEhHKSkmJihHPUJyKHFlKGUsKHlzdCgpLHhTdCkpKSxoPWJhdChLOCgpLEcpLGgmJihkPXUoeHJ0KGguZiksMjA5KSxkLlplKGUsUmMobiwxKSkpKSx3byhlLGlmdCwoYkQoKSxxRykpLHdvKGUsc2Z0LCh1SSgpLHJmdCkpLHdvKGUsYWZ0LChqRCgpLFZHKSksdj11KHFlKGUsKHlzdCgpLHZTdCkpLDE5KS5hLHZyKG4sIk92ZXJsYXAgcmVtb3ZhbCIsMSksamUoUmUocWUoZSx6M2UpKSksaz1uZXcgSHMsQz1uZXcgdHp0KGspLHM9bmV3IFd5dCxyPUpoZShzLGUpLE09ITAsbz0wO288diYmTTspe2lmKGplKFJlKHFlKGUsbVN0KSkpKXtpZihrLmEuJGIoKSxkcG4obmV3IHpVdChDKSxyLmkpLGsuYS5nYygpPT0wKWJyZWFrO3IuZT1rfWZvcihMJCh0aGlzLmIpLEtkKHRoaXMuYiwoS0QoKSxqRyksKFVDKCksVk8pKSxLZCh0aGlzLmIsJEcsci5nKSxLZCh0aGlzLmIsekcsKHFSKCksdGZ0KSksdGhpcy5hPUZxKHRoaXMuYixyKSxIPW5ldyBTKHRoaXMuYSk7SC5hPEguYy5jLmxlbmd0aDspaj11KEooSCksNTEpLGoucGYocixSYyhuLDEpKTtNZG4ocyxyKSxNPWplKFJlKFEociwoWjgoKSx1N3QpKSkpLCsrb31naGUocyxyKSxvcihuKX0sRihBeSwiT3ZlcmxhcFJlbW92YWxMYXlvdXRQcm92aWRlciIsMTEzMyksRCgxMTM0LDEse30sdHp0KSxGKEF5LCJPdmVybGFwUmVtb3ZhbExheW91dFByb3ZpZGVyL2xhbWJkYSQwJFR5cGUiLDExMzQpLEQoNDM3LDIyLHszOjEsMzU6MSwyMjoxLDQzNzoxfSxRZXQpO3ZhciBqRywkRyx6RyxaaHQ9anIoQXksIlNQT3JFUGhhc2VzIiw0MzcsSHIsWWluLGt0biksazNlO0QoMTI1NSwxLHt9LFZIdCksRihBeSwiU2hyaW5rVHJlZSIsMTI1NSksRCgxMTM1LDIwOSxTMixLcXQpLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkO28yKGUsKGNJKCksSEcpKSYmKGQ9QnIocWUoZSxIRykpLG89YmF0KEs4KCksZCksbyYmKGg9dSh4cnQoby5mKSwyMDkpLGguWmUoZSxSYyhuLDEpKSkpLHM9bmV3IFd5dCxyPUpoZShzLGUpLEoybih0aGlzLmEscixSYyhuLDEpKSxnaGUocyxyKX0sRihBeSwiU2hyaW5rVHJlZUxheW91dFByb3ZpZGVyIiwxMTM1KSxEKDMwMCwxMzQsezM6MSwzMDA6MSw5NDoxLDEzNDoxfSxFUXQpLGwuYz0hMSxGKCJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLmdyYXBoIiwiR3JhcGgiLDMwMCksRCg0ODIsMjIsezM6MSwzNToxLDIyOjEsNDgyOjEsMjQ2OjEsMjM0OjF9LCRWdCksbC5LZj1mdW5jdGlvbigpe3JldHVybiBfcmUodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gX3JlKHRoaXMpfTt2YXIgSmh0LGVTdD1qcihMeSxhNnQsNDgyLEhyLHNybixFdG4pLEUzZTtEKDU1MSwyMix7MzoxLDM1OjEsMjI6MSw1NTE6MSwyNDY6MSwyMzQ6MX0sJFd0KSxsLktmPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByQn0sbC5YZj1mdW5jdGlvbigpe3JldHVybiBuZXcgckJ9O3ZhciB0ZnQsVDNlPWpyKEx5LCJPdmVybGFwUmVtb3ZhbFN0cmF0ZWd5Iiw1NTEsSHIsYXJuLFR0biksQzNlO0QoNDMwLDIyLHszOjEsMzU6MSwyMjoxLDQzMDoxfSxaYnQpO3ZhciBxRyxlZnQsblN0PWpyKEx5LCJSb290U2VsZWN0aW9uIiw0MzAsSHIsWnJuLEN0biksXzNlO0QoMzE2LDIyLHszOjEsMzU6MSwyMjoxLDMxNjoxfSxJTSk7dmFyIHJTdCxuZnQscmZ0LGlTdCxzU3QsYVN0PWpyKEx5LCJTcGFubmluZ1RyZWVDb3N0RnVuY3Rpb24iLDMxNixIcixtYW4sX3RuKSxTM2U7RCgxMDAyLDEsT2gsV0IpLGwuUWU9ZnVuY3Rpb24oZSl7VmxlKGUpfTt2YXIgb1N0LGNTdCxBM2UsTDNlLHVTdCxsU3QsaWZ0LHNmdCxhZnQsTTNlLEQzZSxIRztGKEx5LCJTcG9yZUNvbXBhY3Rpb25PcHRpb25zIiwxMDAyKSxEKDEwMDMsMSx7fSwkTCksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBLcXQsZX0sbC5fZT1mdW5jdGlvbihlKXt9LEYoTHksIlNwb3JlQ29tcGFjdGlvbk9wdGlvbnMvU3BvcmVDb21wYWN0aW9uRmFjdG9yeSIsMTAwMyksRCg4NTUsMSxPaCxZQiksbC5RZT1mdW5jdGlvbihlKXthbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsQmN0KSwiIiksIlVuZGVybHlpbmcgTGF5b3V0IEFsZ29yaXRobSIpLCJBIGxheW91dCBhbGdvcml0aG0gdGhhdCBpcyBhcHBsaWVkIHRvIHRoZSBncmFwaCBiZWZvcmUgaXQgaXMgY29tcGFjdGVkLiBJZiB0aGlzIGlzIG51bGwsIG5vdGhpbmcgaXMgYXBwbGllZCBiZWZvcmUgY29tcGFjdGlvbi4iKSwoVWcoKSxJNykpLEFlKSx1bigoUWYoKSxxbikpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSwkY3QpLCJzdHJ1Y3R1cmUiKSwiU3RydWN0dXJlIEV4dHJhY3Rpb24gU3RyYXRlZ3kiKSwiVGhpcyBvcHRpb24gZGVmaW5lcyB3aGF0IGtpbmQgb2YgdHJpYW5ndWxhdGlvbiBvciBvdGhlciBwYXJ0aXRpb25pbmcgb2YgdGhlIHBsYW5lIGlzIGFwcGxpZWQgdG8gdGhlIHZlcnRpY2VzLiIpLGJTdCksdXMpLGtTdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxvOHQpLHpjdCksIlRyZWUgQ29uc3RydWN0aW9uIFN0cmF0ZWd5IiksIldoZXRoZXIgYSBtaW5pbXVtIHNwYW5uaW5nIHRyZWUgb3IgYSBtYXhpbXVtIHNwYW5uaW5nIHRyZWUgc2hvdWxkIGJlIGNvbnN0cnVjdGVkLiIpLGdTdCksdXMpLFRTdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxjOHQpLHpjdCksIkNvc3QgRnVuY3Rpb24gZm9yIFNwYW5uaW5nIFRyZWUiKSwiVGhlIGNvc3QgZnVuY3Rpb24gaXMgdXNlZCBpbiB0aGUgY3JlYXRpb24gb2YgdGhlIHNwYW5uaW5nIHRyZWUuIiksZFN0KSx1cyksYVN0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFJjdCksemN0KSwiUm9vdCBub2RlIGZvciBzcGFubmluZyB0cmVlIGNvbnN0cnVjdGlvbiIpLCJUaGUgaWRlbnRpZmllciBvZiB0aGUgbm9kZSB0aGF0IGlzIHByZWZlcnJlZCBhcyB0aGUgcm9vdCBvZiB0aGUgc3Bhbm5pbmcgdHJlZS4gSWYgdGhpcyBpcyBudWxsLCB0aGUgZmlyc3Qgbm9kZSBpcyBjaG9zZW4uIiksbnVsbCksSTcpLEFlKSx1bihxbikpKSksY2EoZSxSY3QsamN0LEIzZSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGpjdCksemN0KSwiUm9vdCBzZWxlY3Rpb24gZm9yIHNwYW5uaW5nIHRyZWUiKSwiVGhpcyBzZXRzIHRoZSBtZXRob2QgdXNlZCB0byBzZWxlY3QgYSByb290IG5vZGUgZm9yIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYSBzcGFubmluZyB0cmVlIiksZlN0KSx1cyksblN0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHU4dCkscmt0KSwiQ29tcGFjdGlvbiBTdHJhdGVneSIpLCJUaGlzIG9wdGlvbiBkZWZpbmVzIGhvdyB0aGUgY29tcGFjdGlvbiBpcyBhcHBsaWVkLiIpLGhTdCksdXMpLGVTdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxsOHQpLHJrdCksIk9ydGhvZ29uYWwgQ29tcGFjdGlvbiIpLCJSZXN0cmljdHMgdGhlIHRyYW5zbGF0aW9uIG9mIG5vZGVzIHRvIG9ydGhvZ29uYWwgZGlyZWN0aW9ucyBpbiB0aGUgY29tcGFjdGlvbiBwaGFzZS4iKSwoTm4oKSwhMSkpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxoOHQpLHJkZSksIlVwcGVyIGxpbWl0IGZvciBpdGVyYXRpb25zIG9mIG92ZXJsYXAgcmVtb3ZhbCIpLG51bGwpLHBlKDY0KSksZ2MpLGphKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGY4dCkscmRlKSwiV2hldGhlciB0byBydW4gYSBzdXBwbGVtZW50YXJ5IHNjYW5saW5lIG92ZXJsYXAgY2hlY2suIiksbnVsbCksITApLExhKSxScyksdW4ocW4pKSkpLFh1ZSgobmV3IEtCLGUpKSxWbGUoKG5ldyBXQixlKSl9O3ZhciBJM2UsaFN0LE8zZSxQM2UsRjNlLE4zZSxCM2UsUjNlLGZTdCxqM2UsZFN0LCQzZSxnU3QscFN0LGJTdCx3U3Q7RihMeSwiU3BvcmVNZXRhRGF0YVByb3ZpZGVyIiw4NTUpLEQoV2csMSxPaCxLQiksbC5RZT1mdW5jdGlvbihlKXtYdWUoZSl9O3ZhciB6M2UsdlN0LG1TdCx5U3QscTNlLHhTdDtGKEx5LCJTcG9yZU92ZXJsYXBSZW1vdmFsT3B0aW9ucyIsV2cpLEQoMTAwMSwxLHt9LG1aKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IEhIdCxlfSxsLl9lPWZ1bmN0aW9uKGUpe30sRihMeSwiU3BvcmVPdmVybGFwUmVtb3ZhbE9wdGlvbnMvU3BvcmVPdmVybGFwRmFjdG9yeSIsMTAwMSksRCg1MzAsMjIsezM6MSwzNToxLDIyOjEsNTMwOjEsMjQ2OjEsMjM0OjF9LE1YdCksbC5LZj1mdW5jdGlvbigpe3JldHVybiBTcmUodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4gU3JlKHRoaXMpfTt2YXIgVk8sa1N0PWpyKEx5LCJTdHJ1Y3R1cmVFeHRyYWN0aW9uU3RyYXRlZ3kiLDUzMCxIcixvcm4sU3RuKSxIM2U7RCg0MjksMjIsezM6MSwzNToxLDIyOjEsNDI5OjEsMjQ2OjEsMjM0OjF9LEpidCksbC5LZj1mdW5jdGlvbigpe3JldHVybiBraWUodGhpcyl9LGwuWGY9ZnVuY3Rpb24oKXtyZXR1cm4ga2llKHRoaXMpfTt2YXIgRVN0LFZHLFRTdD1qcihMeSwiVHJlZUNvbnN0cnVjdGlvblN0cmF0ZWd5Iiw0MjksSHIsUXJuLEF0biksVjNlO0QoMTQ0MywxLHpjLHlaKSxsLllmPWZ1bmN0aW9uKGUpe3JldHVybiB1KGUsMzAwKSxuZXcgVnN9LGwucGY9ZnVuY3Rpb24oZSxuKXskZG4odShlLDMwMCksbil9LEYoaWRlLCJEZWxhdW5heVRyaWFuZ3VsYXRpb25QaGFzZSIsMTQ0MyksRCgxNDQ0LDEsVW4sZXp0KSxsLnRkPWZ1bmN0aW9uKGUpe2xlKHRoaXMuYSx1KGUsNjUpLmEpfSxGKGlkZSwiRGVsYXVuYXlUcmlhbmd1bGF0aW9uUGhhc2UvbGFtYmRhJDAkVHlwZSIsMTQ0NCksRCg3ODMsMSx6YyxRcHQpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMDApLG5ldyBWc30sbC5wZj1mdW5jdGlvbihlLG4pe3RoaXMubmcodShlLDMwMCksbil9LGwubmc9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG87dnIobiwiTWluaW11bSBzcGFubmluZyB0cmVlIGNvbnN0cnVjdGlvbiIsMSksZS5kP3M9ZS5kLmE6cz11KE5lKGUuaSwwKSw2NSkuYSxqZShSZShRKGUsKFo4KCksZlMpKSkpP289TmF0KGUuZSxzLChyPWUuYixyKSk6bz1OYXQoZS5lLHMsZS5iKSxjcmUodGhpcyxvLGUpLG9yKG4pfSxGKHFjdCwiTWluU1RQaGFzZSIsNzgzKSxEKDE0NDYsNzgzLHpjLE9xdCksbC5uZz1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoO3ZyKG4sIk1heGltdW0gc3Bhbm5pbmcgdHJlZSBjb25zdHJ1Y3Rpb24iLDEpLHI9bmV3IG56dChlKSxlLmQ/bz1lLmQuYzpvPXUoTmUoZS5pLDApLDY1KS5jLGplKFJlKFEoZSwoWjgoKSxmUykpKSk/aD1OYXQoZS5lLG8sKHM9cixzKSk6aD1OYXQoZS5lLG8sciksY3JlKHRoaXMsaCxlKSxvcihuKX0sRihxY3QsIk1heFNUUGhhc2UiLDE0NDYpLEQoMTQ0NywxLHt9LG56dCksbC5KZT1mdW5jdGlvbihlKXtyZXR1cm4gTVhlKHRoaXMuYSxlKX0sRihxY3QsIk1heFNUUGhhc2UvbGFtYmRhJDAkVHlwZSIsMTQ0NyksRCgxNDQ1LDEsVW4scnp0KSxsLnRkPWZ1bmN0aW9uKGUpe3hRZSh0aGlzLmEsdShlLDY1KSl9LEYocWN0LCJNaW5TVFBoYXNlL2xhbWJkYSQwJFR5cGUiLDE0NDUpLEQoNzg1LDEsemMsckIpLGwuWWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwzMDApLG5ldyBWc30sbC5wZj1mdW5jdGlvbihlLG4pe0owbih0aGlzLHUoZSwzMDApLG4pfSxsLmE9ITEsRihIY3QsIkdyb3dUcmVlUGhhc2UiLDc4NSksRCg3ODYsMSxVbixTd3QpLGwudGQ9ZnVuY3Rpb24oZSl7YnVuKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHUoZSwyMjEpKX0sRihIY3QsIkdyb3dUcmVlUGhhc2UvbGFtYmRhJDAkVHlwZSIsNzg2KSxEKDE0NDgsMSx6Yyx4WiksbC5ZZj1mdW5jdGlvbihlKXtyZXR1cm4gdShlLDMwMCksbmV3IFZzfSxsLnBmPWZ1bmN0aW9uKGUsbil7YzFuKHRoaXMsdShlLDMwMCksbil9LEYoSGN0LCJTaHJpbmtUcmVlQ29tcGFjdGlvblBoYXNlIiwxNDQ4KSxEKDc4NCwxLFVuLEF3dCksbC50ZD1mdW5jdGlvbihlKXskYm4odGhpcy5hLHRoaXMuYix0aGlzLmMsdShlLDIyMSkpfSxGKEhjdCwiU2hyaW5rVHJlZUNvbXBhY3Rpb25QaGFzZS9sYW1iZGEkMCRUeXBlIiw3ODQpO3ZhciBDU3Q9S2koRWMsIklHcmFwaEVsZW1lbnRWaXNpdG9yIik7RCg4NjAsMSx7NTI3OjF9LHZadCksbC5vZz1mdW5jdGlvbihlKXt2YXIgbjtuPVV2bih0aGlzLGUpLE1vKG4sdSh0cih0aGlzLmIsZSksOTQpKSxWMm4odGhpcyxlLG4pfTt2YXIgRzNlLFUzZTtGKEw0LCJMYXlvdXRDb25maWd1cmF0b3IiLDg2MCk7dmFyIHc2bj1LaShMNCwiTGF5b3V0Q29uZmlndXJhdG9yL0lQcm9wZXJ0eUhvbGRlck9wdGlvbkZpbHRlciIpO0QoOTMyLDEsezE5MzM6MX0sa1opLGwucGc9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gaTYoKSwhZS5YZShuKX0sRihMNCwiTGF5b3V0Q29uZmlndXJhdG9yL2xhbWJkYSQwJFR5cGUiLDkzMiksRCg5MzMsMSx7MTkzMzoxfSxFWiksbC5wZz1mdW5jdGlvbihlLG4pe3JldHVybiBqSHQoZSxuKX0sRihMNCwiTGF5b3V0Q29uZmlndXJhdG9yL2xhbWJkYSQxJFR5cGUiLDkzMyksRCg5MzEsMSx7ODMxOjF9LFRaKSxsLnFnPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGk2KCksIWUuWGUobil9LEYoTDQsIkxheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMiRUeXBlIiw5MzEpLEQoOTM0LDEsbGksRUd0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBVbm4odGhpcy5hLHRoaXMuYix1KGUsMTkzMykpfSxGKEw0LCJMYXlvdXRDb25maWd1cmF0b3IvbGFtYmRhJDMkVHlwZSIsOTM0KSxEKDg1OCwxLHt9LENaKSxGKEw0LCJSZWN1cnNpdmVHcmFwaExheW91dEVuZ2luZSIsODU4KSxEKDI5Niw2MCxRMCx1cXQsUjMpLEYoTDQsIlVuc3VwcG9ydGVkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiIsMjk2KSxEKDQ1Myw2MCxRMCxqQyksRihMNCwiVW5zdXBwb3J0ZWRHcmFwaEV4Y2VwdGlvbiIsNDUzKSxEKDc1NCwxLHt9KSxGKEVjLCJBYnN0cmFjdFJhbmRvbUxpc3RBY2Nlc3NvciIsNzU0KSxEKDUwMCw3NTQse30sdkkpLGwucmc9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5kPSEwLGwuZT0hMCxsLmY9MCxGKEtFLCJBbGdvcml0aG1Bc3NlbWJsZXIiLDUwMCksRCgxMjM2LDEsbGksX1opLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuISF1KGUsMTIzKX0sRihLRSwiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQwJFR5cGUiLDEyMzYpLEQoMTIzNywxLHt9LGl6dCksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gS0tlKHRoaXMuYSx1KGUsMTIzKSl9LEYoS0UsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMSRUeXBlIiwxMjM3KSxEKDEyMzgsMSxsaSxTWiksbC5NYj1mdW5jdGlvbihlKXtyZXR1cm4hIXUoZSw4MCl9LEYoS0UsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMiRUeXBlIiwxMjM4KSxEKDEyMzksMSxVbixzenQpLGwudGQ9ZnVuY3Rpb24oZSl7JGwodGhpcy5hLHUoZSw4MCkpfSxGKEtFLCJBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDMkVHlwZSIsMTIzOSksRCgxMjQwLDEsVW4sVEd0KSxsLnRkPWZ1bmN0aW9uKGUpe2NaZSh0aGlzLmEsdGhpcy5iLHUoZSwyMzQpKX0sRihLRSwiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQ0JFR5cGUiLDEyNDApLEQoMTM1NSwxLE9pLEFaKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGtybih1KGUsMjM0KSx1KG4sMjM0KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihLRSwiRW51bUJhc2VkRmFjdG9yeUNvbXBhcmF0b3IiLDEzNTUpLEQoODAsNzU0LHs4MDoxfSxWcyksbC5yZz1mdW5jdGlvbigpe3JldHVybiBuZXcgSHN9LGwuYT0wLEYoS0UsIkxheW91dFByb2Nlc3NvckNvbmZpZ3VyYXRpb24iLDgwKSxEKDEwMTMsMSx7NTI3OjF9LHRNKSxsLm9nPWZ1bmN0aW9uKGUpe0s5KFkzZSxuZXcgYXp0KGUpKX07dmFyIFczZSxZM2UsSzNlO0YoUW8sIkRlcHJlY2F0ZWRMYXlvdXRPcHRpb25SZXBsYWNlciIsMTAxMyksRCgxMDE0LDEsVW4sTFopLGwudGQ9ZnVuY3Rpb24oZSl7aG9uKHUoZSwxNjApKX0sRihRbywiRGVwcmVjYXRlZExheW91dE9wdGlvblJlcGxhY2VyL2xhbWJkYSQwJFR5cGUiLDEwMTQpLEQoMTAxNSwxLFVuLE1aKSxsLnRkPWZ1bmN0aW9uKGUpe1Bobih1KGUsMTYwKSl9LEYoUW8sIkRlcHJlY2F0ZWRMYXlvdXRPcHRpb25SZXBsYWNlci9sYW1iZGEkMSRUeXBlIiwxMDE1KSxEKDEwMTYsMSx7fSxhenQpLGwuT2Q9ZnVuY3Rpb24oZSxuKXt1WmUodGhpcy5hLHUoZSwxNDYpLHUobiwzOCkpfSxGKFFvLCJEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIvbGFtYmRhJDIkVHlwZSIsMTAxNiksRCgxNDksMSx7Njg2OjEsMTQ5OjF9LGsyKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBnbXQodGhpcyxlKX0sbC5zZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwudGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBWZyh0aGlzLmMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkxheW91dCBBbGdvcml0aG06ICIrdGhpcy5jfTt2YXIgdjZuPUYoUW8sIkxheW91dEFsZ29yaXRobURhdGEiLDE0OSk7RCgyNjMsMSx7fSxrZyksRihRbywiTGF5b3V0QWxnb3JpdGhtRGF0YS9CdWlsZGVyIiwyNjMpLEQoMTAxNywxLHs1Mjc6MX0sRFopLGwub2c9ZnVuY3Rpb24oZSl7X3QoZSwyMzkpJiYhamUoUmUoZS5XZSgodWkoKSxRRykpKSkmJkx5bih1KGUsMzMpKX0sRihRbywiTGF5b3V0QWxnb3JpdGhtUmVzb2x2ZXIiLDEwMTcpLEQoMjI5LDEsezY4NjoxLDIyOToxfSxZeCksbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwyMjkpP2huKHRoaXMuYix1KGUsMjI5KS5iKTohMX0sbC5zZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwudGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBWZyh0aGlzLmIpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkxheW91dCBUeXBlOiAiK3RoaXMuYn0sRihRbywiTGF5b3V0Q2F0ZWdvcnlEYXRhIiwyMjkpLEQoMzQ0LDEse30seG0pLEYoUW8sIkxheW91dENhdGVnb3J5RGF0YS9CdWlsZGVyIiwzNDQpLEQoODY3LDEse30sanVlKTt2YXIgb2Z0O0YoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZSIsODY3KSxEKDg2OCwxLHt9LGJYdCksRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL1JlZ2lzdHJ5Iiw4NjgpLEQoNDc4LDEsezQ3ODoxfSxpQiksRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL1JlZ2lzdHJ5L1RyaXBsZSIsNDc4KSxEKDg2OSwxLFA0LElaKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDYX0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQwJFR5cGUiLDg2OSksRCg4NzAsMSxNeSxPWiksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gbmModShlLDgpKX0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxJFR5cGUiLDg3MCksRCg4NzksMSxQNCxQWiksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgaGV9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTAkVHlwZSIsODc5KSxEKDg4MCwxLE15LEZaKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQnUodShlLDEyKSl9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTEkVHlwZSIsODgwKSxEKDg4MSwxLFA0LE5aKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaaX0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMiRUeXBlIiw4ODEpLEQoODgyLDEsTXksQlopLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIFFNKHUoZSw2OCkpfSxGKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEzJFR5cGUiLDg4MiksRCg4ODMsMSxQNCxSWiksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgSHN9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTQkVHlwZSIsODgzKSxEKDg4NCwxLE15LGpaKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBiJCh1KGUsNTMpKX0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNSRUeXBlIiw4ODQpLEQoODg1LDEsUDQsJFopLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE8wfSxGKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE2JFR5cGUiLDg4NSksRCg4ODYsMSxNeSxBYyksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gUCQodShlLDUzKSl9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTckVHlwZSIsODg2KSxEKDg4NywxLFA0LHpaKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCcHR9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTgkVHlwZSIsODg3KSxEKDg4OCwxLE15LFFUKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBWWXQodShlLDIwOCkpfSxGKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE5JFR5cGUiLDg4OCksRCg4NzEsMSxQNCx0YyksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgUHV9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMiRUeXBlIiw4NzEpLEQoODcyLDEsTXksS2MpLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEUih1KGUsNzQpKX0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQzJFR5cGUiLDg3MiksRCg4NzMsMSxQNCx6aSksbC51Zz1mdW5jdGlvbigpe3JldHVybiBuZXcgT0N9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNCRUeXBlIiw4NzMpLEQoODc0LDEsTXksekwpLGwudmc9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBMbnQodShlLDE0MikpfSxGKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDUkVHlwZSIsODc0KSxEKDg3NSwxLFA0LEhaKSxsLnVnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDeH0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ2JFR5cGUiLDg3NSksRCg4NzYsMSxNeSxWWiksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGt3dCh1KGUsMTE2KSl9LEYoUW8sIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNyRUeXBlIiw4NzYpLEQoODc3LDEsUDQsc3gpLGwudWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFl1fSxGKFFvLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDgkVHlwZSIsODc3KSxEKDg3OCwxLE15LGttKSxsLnZnPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcmVlKHUoZSwzNzMpKX0sRihRbywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ5JFR5cGUiLDg3OCk7dmFyIGNmdD1LaShxSSwiSVByb3BlcnR5Iik7RCgyMywxLHszNToxLDY4NjoxLDIzOjEsMTQ2OjF9LFhlKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBQUWUodGhpcyx1KGUsMTQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjMpP2huKHRoaXMuZix1KGUsMjMpLmYpOl90KGUsMTQ2KSYmaG4odGhpcy5mLHUoZSwxNDYpLnRnKCkpfSxsLndnPWZ1bmN0aW9uKCl7dmFyIGU7aWYoX3QodGhpcy5iLDQpKXtpZihlPU8zdCh0aGlzLmIpLGU9PW51bGwpdGhyb3cgaXQobmV3IE5vKG9kZSt0aGlzLmYrIicuIE1ha2Ugc3VyZSBpdCdzIHR5cGUgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSAiKyhQMChnUCksZ1AuaykrZDh0KSk7cmV0dXJuIGV9ZWxzZSByZXR1cm4gdGhpcy5ifSxsLnNnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC50Zz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFZnKHRoaXMuZil9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTGF5b3V0IE9wdGlvbjogIit0aGlzLmZ9LEYoUW8sIkxheW91dE9wdGlvbkRhdGEiLDIzKSxEKDI0LDEse30sVWUpLEYoUW8sIkxheW91dE9wdGlvbkRhdGEvQnVpbGRlciIsMjQpLEQoMTc1LDIyLHszOjEsMzU6MSwyMjoxLDE3NToxfSxPTSk7dmFyIFBkLHJwLGVhLHFuLFYyLGlwPWpyKFFvLCJMYXlvdXRPcHRpb25EYXRhL1RhcmdldCIsMTc1LEhyLHZhbixMdG4pLFgzZTtEKDI3NywyMix7MzoxLDM1OjEsMjI6MSwyNzc6MX0sT3gpO3ZhciBMYSxPbyx1cyxVNixnYyxWMSxJNyxfU3QsUTNlPWpyKFFvLCJMYXlvdXRPcHRpb25EYXRhL1R5cGUiLDI3NyxIcixLb24sTXRuKSxaM2UsV1MsU1N0O0QoMTEwLDEsezExMDoxfSxGeCxhaCx2JCksbC5GYj1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09bnVsbHx8IV90KGUsMTEwKT8hMToobj11KGUsMTEwKSxGYyh0aGlzLmMsbi5jKSYmRmModGhpcy5kLG4uZCkmJkZjKHRoaXMuYixuLmIpJiZGYyh0aGlzLmEsbi5hKSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gQXoobHQoY3QoUW4sMSksRGUsMSw1LFt0aGlzLmMsdGhpcy5kLHRoaXMuYix0aGlzLmFdKSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iUmVjdFt4PSIrdGhpcy5jKyIseT0iK3RoaXMuZCsiLHc9Iit0aGlzLmIrIixoPSIrdGhpcy5hKyJdIn0sbC5hPTAsbC5iPTAsbC5jPTAsbC5kPTAsRihXSSwiRWxrUmVjdGFuZ2xlIiwxMTApLEQoOCwxLHszOjEsNDoxLDg6MSw0MTQ6MX0sQ2EsU3J0LCRlLHhvKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBmbmUodGhpcyxlKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBwOCh0aGlzLmEpK0YxbihwOCh0aGlzLmIpKX0sbC5KZj1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztmb3Iocz0wO3M8ZS5sZW5ndGgmJlVyZSgoUnIocyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KHMpKSxmMWUpOykrK3M7Zm9yKG49ZS5sZW5ndGg7bj4wJiZVcmUoKFJyKG4tMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4tMSkpLGQxZSk7KS0tbjtpZihzPj1uKXRocm93IGl0KG5ldyBGbigiVGhlIGdpdmVuIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGFueSBudW1iZXJzLiIpKTtpZihvPXZ5KGUuc3Vic3RyKHMsbi1zKSxgLHw7fFxyfApgKSxvLmxlbmd0aCE9Mil0aHJvdyBpdChuZXcgRm4oIkV4YWN0bHkgdHdvIG51bWJlcnMgYXJlIGV4cGVjdGVkLCAiK28ubGVuZ3RoKyIgd2VyZSBmb3VuZC4iKSk7dHJ5e3RoaXMuYT1keShmeShvWzBdKSksdGhpcy5iPWR5KGZ5KG9bMV0pKX1jYXRjaChoKXt0aHJvdyBoPVdpKGgpLF90KGgsMTI3KT8ocj1oLGl0KG5ldyBGbihnMWUrcikpKTppdChoKX19LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hKyIsIit0aGlzLmIrIikifSxsLmE9MCxsLmI9MDt2YXIgV3M9RihXSSwiS1ZlY3RvciIsOCk7RCg3NCw2OCx7MzoxLDQ6MSwyMDoxLDI4OjEsNTI6MSwxNDoxLDY4OjEsMTU6MSw3NDoxLDQxNDoxfSxQdSxEUixNV3QpLGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGxuKHRoaXMpfSxsLkpmPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZDtzPXZ5KGUsYCx8O3xcXCh8XFwpfFxcW3xcXF18XFx7fFxcfXwgfAl8CmApLEFoKHRoaXMpO3RyeXtmb3Iocj0wLGg9MCxvPTAsZD0wO3I8cy5sZW5ndGg7KXNbcl0hPW51bGwmJmZ5KHNbcl0pLmxlbmd0aD4wJiYoaCUyPT0wP289ZHkoc1tyXSk6ZD1keShzW3JdKSxoPjAmJmglMiE9MCYmcmkodGhpcyxuZXcgJGUobyxkKSksKytoKSwrK3J9Y2F0Y2godil7dGhyb3cgdj1XaSh2KSxfdCh2LDEyNyk/KG49dixpdChuZXcgRm4oIlRoZSBnaXZlbiBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdCBmb3IgdmVjdG9ycy4iK24pKSk6aXQodil9fSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2ZvcihlPW5ldyBPbCgiKCIpLG49ZWkodGhpcywwKTtuLmIhPW4uZC5jOylyPXUodGkobiksOCksR3IoZSxyLmErIiwiK3IuYiksbi5iIT1uLmQuYyYmKGUuYSs9IjsgIik7cmV0dXJuKGUuYSs9IikiLGUpLmF9O3ZhciBBU3Q9RihXSSwiS1ZlY3RvckNoYWluIiw3NCk7RCgyNDgsMjIsezM6MSwzNToxLDIyOjEsMjQ4OjF9LGk5KTt2YXIgdWZ0LEdHLFVHLEdPLFVPLFdHLExTdD1qcihGaCwiQWxpZ25tZW50IiwyNDgsSHIsWWFuLER0biksSjNlO0QoOTc5LDEsT2gsaHR0KSxsLlFlPWZ1bmN0aW9uKGUpe2xsZShlKX07dmFyIE1TdCxsZnQsdDRlLERTdCxJU3QsZTRlLE9TdCxuNGUscjRlLFBTdCxGU3QsaTRlO0YoRmgsIkJveExheW91dGVyT3B0aW9ucyIsOTc5KSxEKDk4MCwxLHt9LHFaKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IFlaLGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxGKEZoLCJCb3hMYXlvdXRlck9wdGlvbnMvQm94RmFjdG9yeSIsOTgwKSxEKDI5MSwyMix7MzoxLDM1OjEsMjI6MSwyOTE6MX0sczkpO3ZhciBXTyxoZnQsWU8sS08sWE8sZmZ0LGRmdD1qcihGaCwiQ29udGVudEFsaWdubWVudCIsMjkxLEhyLFdhbixJdG4pLHM0ZTtEKDY4NCwxLE9oLFRwKSxsLlFlPWZ1bmN0aW9uKGUpe2FuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSx1ZGUpLCIiKSwiTGF5b3V0IEFsZ29yaXRobSIpLCJTZWxlY3QgYSBzcGVjaWZpYyBsYXlvdXQgYWxnb3JpdGhtLiIpLChVZygpLEk3KSksQWUpLHVuKChRZigpLHFuKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLGxkZSksIiIpLCJSZXNvbHZlZCBMYXlvdXQgQWxnb3JpdGhtIiksIk1ldGEgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbGVjdGVkIGFsZ29yaXRobS4iKSxWMSksdjZuKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHhrdCksIiIpLCJBbGlnbm1lbnQiKSwiQWxpZ25tZW50IG9mIHRoZSBzZWxlY3RlZCBub2RlIHJlbGF0aXZlIHRvIG90aGVyIG5vZGVzOyB0aGUgZXhhY3QgbWVhbmluZyBkZXBlbmRzIG9uIHRoZSB1c2VkIGFsZ29yaXRobS4iKSxOU3QpLHVzKSxMU3QpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsRTYpLCIiKSwiQXNwZWN0IFJhdGlvIiksIlRoZSBkZXNpcmVkIGFzcGVjdCByYXRpbyBvZiB0aGUgZHJhd2luZywgdGhhdCBpcyB0aGUgcXVvdGllbnQgb2Ygd2lkdGggYnkgaGVpZ2h0LiIpLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxwOHQpLCIiKSwiQmVuZCBQb2ludHMiKSwiQSBmaXhlZCBsaXN0IG9mIGJlbmQgcG9pbnRzIGZvciB0aGUgZWRnZS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSAnRml4ZWQgTGF5b3V0JyBhbGdvcml0aG0gdG8gc3BlY2lmeSBhIHByZS1kZWZpbmVkIHJvdXRpbmcgZm9yIGFuIGVkZ2UuIFRoZSB2ZWN0b3IgY2hhaW4gbXVzdCBpbmNsdWRlIHRoZSBzb3VyY2UgcG9pbnQsIGFueSBiZW5kIHBvaW50cywgYW5kIHRoZSB0YXJnZXQgcG9pbnQsIHNvIGl0IG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gcG9pbnRzLiIpLFYxKSxBU3QpLHVuKFBkKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsbUgpLCIiKSwiQ29udGVudCBBbGlnbm1lbnQiKSwiU3BlY2lmaWVzIGhvdyB0aGUgY29udGVudCBvZiBhIG5vZGUgYXJlIGFsaWduZWQuIEVhY2ggbm9kZSBjYW4gaW5kaXZpZHVhbGx5IGNvbnRyb2wgdGhlIGFsaWdubWVudCBvZiBpdHMgY29udGVudHMuIEkuZS4gaWYgYSBub2RlIHNob3VsZCBiZSBhbGlnbmVkIHRvcCBsZWZ0IGluIGl0cyBwYXJlbnQgbm9kZSwgdGhlIHBhcmVudCBub2RlIHNob3VsZCBzcGVjaWZ5IHRoYXQgb3B0aW9uLiIpLFJTdCksVTYpLGRmdCksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxKSSksIiIpLCJEZWJ1ZyBNb2RlIiksIldoZXRoZXIgYWRkaXRpb25hbCBkZWJ1ZyBpbmZvcm1hdGlvbiBzaGFsbCBiZSBnZW5lcmF0ZWQuIiksKE5uKCksITEpKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsVGt0KSwiIiksaTZ0KSwiT3ZlcmFsbCBkaXJlY3Rpb24gb2YgZWRnZXM6IGhvcml6b250YWwgKHJpZ2h0IC8gbGVmdCkgb3IgdmVydGljYWwgKGRvd24gLyB1cCkuIiksalN0KSx1cyksWFMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsUUkpLCIiKSwiRWRnZSBSb3V0aW5nIiksIldoYXQga2luZCBvZiBlZGdlIHJvdXRpbmcgc3R5bGUgc2hvdWxkIGJlIGFwcGxpZWQgZm9yIHRoZSBjb250ZW50IG9mIGEgcGFyZW50IG5vZGUuIEFsZ29yaXRobXMgbWF5IGFsc28gc2V0IHRoaXMgb3B0aW9uIHRvIHNpbmdsZSBlZGdlcyBpbiBvcmRlciB0byBtYXJrIHRoZW0gYXMgc3BsaW5lcy4gVGhlIGJlbmQgcG9pbnQgbGlzdCBvZiBlZGdlcyB3aXRoIHRoaXMgb3B0aW9uIHNldCB0byBTUExJTkVTIG11c3QgYmUgaW50ZXJwcmV0ZWQgYXMgY29udHJvbCBwb2ludHMgZm9yIGEgcGllY2V3aXNlIGN1YmljIHNwbGluZS4iKSxxU3QpLHVzKSxfZnQpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsQ0gpLCIiKSwiRXhwYW5kIE5vZGVzIiksIklmIGFjdGl2ZSwgbm9kZXMgYXJlIGV4cGFuZGVkIHRvIGZpbGwgdGhlIGFyZWEgb2YgdGhlaXIgcGFyZW50LiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdkgpLCIiKSwiSGllcmFyY2h5IEhhbmRsaW5nIiksIkRldGVybWluZXMgd2hldGhlciBzZXBhcmF0ZSBsYXlvdXQgcnVucyBhcmUgdHJpZ2dlcmVkIGZvciBkaWZmZXJlbnQgY29tcG91bmQgbm9kZXMgaW4gYSBoaWVyYXJjaGljYWwgZ3JhcGguIFNldHRpbmcgYSBub2RlJ3MgaGllcmFyY2h5IGhhbmRsaW5nIHRvIGBJTkNMVURFX0NISUxEUkVOYCB3aWxsIGxheSBvdXQgdGhhdCBub2RlIGFuZCBhbGwgb2YgaXRzIGRlc2NlbmRhbnRzIGluIGEgc2luZ2xlIGxheW91dCBydW4sIHVudGlsIGEgZGVzY2VuZGFudCBpcyBlbmNvdW50ZXJlZCB3aGljaCBoYXMgaXRzIGhpZXJhcmNoeSBoYW5kbGluZyBzZXQgdG8gYFNFUEFSQVRFX0NISUxEUkVOYC4gSW4gZ2VuZXJhbCwgYFNFUEFSQVRFX0NISUxEUkVOYCB3aWxsIGVuc3VyZSB0aGF0IGEgbmV3IGxheW91dCBydW4gaXMgdHJpZ2dlcmVkIGZvciBhIG5vZGUgd2l0aCB0aGF0IHNldHRpbmcuIEluY2x1ZGluZyBtdWx0aXBsZSBsZXZlbHMgb2YgaGllcmFyY2h5IGluIGEgc2luZ2xlIGxheW91dCBydW4gbWF5IGFsbG93IGNyb3NzLWhpZXJhcmNoaWNhbCBlZGdlcyB0byBiZSBsYWlkIG91dCBwcm9wZXJseS4gSWYgdGhlIHJvb3Qgbm9kZSBpcyBzZXQgdG8gYElOSEVSSVRgIChvciBub3Qgc2V0IGF0IGFsbCksIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGBTRVBBUkFURV9DSElMRFJFTmAuIiksVVN0KSx1cyksREF0KSxqaShxbixsdChjdChpcCwxKSxvZSwxNzUsMCxbZWFdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHh2KSwiIiksIlBhZGRpbmciKSwiVGhlIHBhZGRpbmcgdG8gYmUgbGVmdCB0byBhIHBhcmVudCBlbGVtZW50J3MgYm9yZGVyIHdoZW4gcGxhY2luZyBjaGlsZCBlbGVtZW50cy4gVGhpcyBjYW4gYWxzbyBzZXJ2ZSBhcyBhbiBvdXRwdXQgb3B0aW9uIG9mIGEgbGF5b3V0IGFsZ29yaXRobSBpZiBub2RlIHNpemUgY2FsY3VsYXRpb24gaXMgc2V0dXAgYXBwcm9wcmlhdGVseS4iKSxuQXQpLFYxKSxCN3QpLGppKHFuLGx0KGN0KGlwLDEpLG9lLDE3NSwwLFtlYV0pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsR0kpLCIiKSwiSW50ZXJhY3RpdmUiKSwiV2hldGhlciB0aGUgYWxnb3JpdGhtIHNob3VsZCBiZSBydW4gaW4gaW50ZXJhY3RpdmUgbW9kZSBmb3IgdGhlIGNvbnRlbnQgb2YgYSBwYXJlbnQgbm9kZS4gV2hhdCB0aGlzIG1lYW5zIGV4YWN0bHkgZGVwZW5kcyBvbiBob3cgdGhlIHNwZWNpZmljIGFsZ29yaXRobSBpbnRlcnByZXRzIHRoaXMgb3B0aW9uLiBVc3VhbGx5IGluIHRoZSBpbnRlcmFjdGl2ZSBtb2RlIGFsZ29yaXRobXMgdHJ5IHRvIG1vZGlmeSB0aGUgY3VycmVudCBsYXlvdXQgYXMgbGl0dGxlIGFzIHBvc3NpYmxlLiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsX2N0KSwiIiksImludGVyYWN0aXZlIExheW91dCIpLCJXaGV0aGVyIHRoZSBncmFwaCBzaG91bGQgYmUgY2hhbmdlYWJsZSBpbnRlcmFjdGl2ZWx5IGFuZCBieSBzZXR0aW5nIGNvbnN0cmFpbnRzIiksITEpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxqXyksIiIpLCJPbWl0IE5vZGUgTWljcm8gTGF5b3V0IiksIk5vZGUgbWljcm8gbGF5b3V0IGNvbXByaXNlcyB0aGUgY29tcHV0YXRpb24gb2Ygbm9kZSBkaW1lbnNpb25zIChpZiByZXF1ZXN0ZWQpLCB0aGUgcGxhY2VtZW50IG9mIHBvcnRzIGFuZCB0aGVpciBsYWJlbHMsIGFuZCB0aGUgcGxhY2VtZW50IG9mIG5vZGUgbGFiZWxzLiBUaGUgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCBpbmRlcGVuZGVudCBvZiBhbnkgc3BlY2lmaWMgbGF5b3V0IGFsZ29yaXRobSBhbmQgc2hvdWxkbid0IGhhdmUgYW55IG5lZ2F0aXZlIGltcGFjdCBvbiB0aGUgbGF5b3V0IGFsZ29yaXRobSdzIHBlcmZvcm1hbmNlIGl0c2VsZi4gWWV0LCBpZiBhbnkgdW5mb3Jlc2VlbiBiZWhhdmlvciBvY2N1cnMsIHRoaXMgb3B0aW9uIGFsbG93cyB0byBkZWFjdGl2YXRlIHRoZSBtaWNybyBsYXlvdXQuIiksITEpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxHb3QpLCIiKSwiUG9ydCBDb25zdHJhaW50cyIpLCJEZWZpbmVzIGNvbnN0cmFpbnRzIG9mIHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9ydHMgb2YgYSBub2RlLiIpLG9BdCksdXMpLFBBdCksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSx5SCksIiIpLCJQb3NpdGlvbiIpLCJUaGUgcG9zaXRpb24gb2YgYSBub2RlLCBwb3J0LCBvciBsYWJlbC4gVGhpcyBpcyB1c2VkIGJ5IHRoZSAnRml4ZWQgTGF5b3V0JyBhbGdvcml0aG0gdG8gc3BlY2lmeSBhIHByZS1kZWZpbmVkIHBvc2l0aW9uLiIpLFYxKSxXcyksamkoZWEsbHQoY3QoaXAsMSksb2UsMTc1LDAsW1YyLHJwXSkpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxWSSksIiIpLCJQcmlvcml0eSIpLCJEZWZpbmVzIHRoZSBwcmlvcml0eSBvZiBhbiBvYmplY3Q7IGl0cyBtZWFuaW5nIGRlcGVuZHMgb24gdGhlIHNwZWNpZmljIGxheW91dCBhbGdvcml0aG0gYW5kIHRoZSBjb250ZXh0IHdoZXJlIGl0IGlzIHVzZWQuIiksZ2MpLGphKSxqaShlYSxsdChjdChpcCwxKSxvZSwxNzUsMCxbUGRdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLHRIKSwiIiksIlJhbmRvbWl6YXRpb24gU2VlZCIpLCJTZWVkIHVzZWQgZm9yIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgdG8gY29udHJvbCB0aGUgbGF5b3V0IGFsZ29yaXRobS4gSWYgdGhlIHZhbHVlIGlzIDAsIHRoZSBzZWVkIHNoYWxsIGJlIGRldGVybWluZWQgcHNldWRvLXJhbmRvbWx5IChlLmcuIGZyb20gdGhlIHN5c3RlbSB0aW1lKS4iKSxnYyksamEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsUl8pLCIiKSwiU2VwYXJhdGUgQ29ubmVjdGVkIENvbXBvbmVudHMiKSwiV2hldGhlciBlYWNoIGNvbm5lY3RlZCBjb21wb25lbnQgc2hvdWxkIGJlIHByb2Nlc3NlZCBzZXBhcmF0ZWx5LiIpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxPa3QpLCIiKSwiSnVuY3Rpb24gUG9pbnRzIiksIlRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkIGFzIG9wdGlvbiwgYnV0IGFzIG91dHB1dCBvZiB0aGUgbGF5b3V0IGFsZ29yaXRobXMuIEl0IGlzIGF0dGFjaGVkIHRvIGVkZ2VzIGFuZCBkZXRlcm1pbmVzIHRoZSBwb2ludHMgd2hlcmUganVuY3Rpb24gc3ltYm9scyBzaG91bGQgYmUgZHJhd24gaW4gb3JkZXIgdG8gcmVwcmVzZW50IGh5cGVyZWRnZXMgd2l0aCBvcnRob2dvbmFsIHJvdXRpbmcuIFdoZXRoZXIgc3VjaCBwb2ludHMgYXJlIGNvbXB1dGVkIGRlcGVuZHMgb24gdGhlIGNob3NlbiBsYXlvdXQgYWxnb3JpdGhtIGFuZCBlZGdlIHJvdXRpbmcgc3R5bGUuIFRoZSBwb2ludHMgYXJlIHB1dCBpbnRvIHRoZSB2ZWN0b3IgY2hhaW4gd2l0aCBubyBzcGVjaWZpYyBvcmRlci4iKSxZU3QpLFYxKSxBU3QpLHVuKFBkKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsTmt0KSwiIiksIkNvbW1lbnQgQm94IiksIldoZXRoZXIgdGhlIG5vZGUgc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIGEgY29tbWVudCBib3ggaW5zdGVhZCBvZiBhIHJlZ3VsYXIgbm9kZS4gSW4gdGhhdCBjYXNlIGl0cyBwbGFjZW1lbnQgc2hvdWxkIGJlIHNpbWlsYXIgdG8gaG93IGxhYmVscyBhcmUgaGFuZGxlZC4gQW55IGVkZ2VzIGluY2lkZW50IHRvIGEgY29tbWVudCBib3ggc3BlY2lmeSB0byB3aGljaCBncmFwaCBlbGVtZW50cyB0aGUgY29tbWVudCBpcyByZWxhdGVkLiIpLCExKSxMYSksUnMpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsQmt0KSwiIiksIkh5cGVybm9kZSIpLCJXaGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBoYW5kbGVkIGFzIGEgaHlwZXJub2RlLiIpLCExKSxMYSksUnMpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsVXhuKSwiIiksIkxhYmVsIE1hbmFnZXIiKSwiTGFiZWwgbWFuYWdlcnMgY2FuIHNob3J0ZW4gbGFiZWxzIHVwb24gYSBsYXlvdXQgYWxnb3JpdGhtJ3MgcmVxdWVzdC4iKSxWMSksRTZuKSxqaShxbixsdChjdChpcCwxKSxvZSwxNzUsMCxbcnBdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGprdCksIiIpLCJNYXJnaW5zIiksIk1hcmdpbnMgZGVmaW5lIGFkZGl0aW9uYWwgc3BhY2UgYXJvdW5kIHRoZSBhY3R1YWwgYm91bmRzIG9mIGEgZ3JhcGggZWxlbWVudC4gRm9yIGluc3RhbmNlLCBwb3J0cyBvciBsYWJlbHMgYmVpbmcgcGxhY2VkIG9uIHRoZSBvdXRzaWRlIG9mIGEgbm9kZSdzIGJvcmRlciBtaWdodCBpbnRyb2R1Y2Ugc3VjaCBhIG1hcmdpbi4gVGhlIG1hcmdpbiBpcyB1c2VkIHRvIGd1YXJhbnRlZSBub24tb3ZlcmxhcCBvZiBvdGhlciBncmFwaCBlbGVtZW50cyB3aXRoIHRob3NlIHBvcnRzIG9yIGxhYmVscy4iKSxLU3QpLFYxKSxON3QpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsbWt0KSwiIiksIk5vIExheW91dCIpLCJObyBsYXlvdXQgaXMgZG9uZSBmb3IgdGhlIGFzc29jaWF0ZWQgZWxlbWVudC4gVGhpcyBpcyB1c2VkIHRvIG1hcmsgcGFydHMgb2YgYSBkaWFncmFtIHRvIGF2b2lkIHRoZWlyIGluY2x1c2lvbiBpbiB0aGUgbGF5b3V0IGdyYXBoLCBvciB0byBtYXJrIHBhcnRzIG9mIHRoZSBsYXlvdXQgZ3JhcGggdG8gcHJldmVudCBsYXlvdXQgZW5naW5lcyBmcm9tIHByb2Nlc3NpbmcgdGhlbS4gSWYgeW91IHdpc2ggdG8gZXhjbHVkZSB0aGUgY29udGVudHMgb2YgYSBjb21wb3VuZCBub2RlIGZyb20gYXV0b21hdGljIGxheW91dCwgd2hpbGUgdGhlIG5vZGUgaXRzZWxmIGlzIHN0aWxsIGNvbnNpZGVyZWQgb24gaXRzIG93biBsYXllciwgdXNlIHRoZSAnRml4ZWQgTGF5b3V0JyBhbGdvcml0aG0gZm9yIHRoYXQgbm9kZS4iKSwhMSksTGEpLFJzKSxqaShlYSxsdChjdChpcCwxKSxvZSwxNzUsMCxbUGQsVjIscnBdKSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGhkZSksIiIpLCJTY2FsZSBGYWN0b3IiKSwiVGhlIHNjYWxpbmcgZmFjdG9yIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbm9kZSBpbiByZWN1cnNpdmUgbGF5b3V0LiBJdCBjYXVzZXMgdGhlIGNvcnJlc3BvbmRpbmcgbm9kZSdzIHNpemUgdG8gYmUgYWRqdXN0ZWQsIGFuZCBpdHMgcG9ydHMgYW5kIGxhYmVscyB0byBiZSBzaXplZCBhbmQgcGxhY2VkIGFjY29yZGluZ2x5IGFmdGVyIHRoZSBsYXlvdXQgb2YgdGhhdCBub2RlIGhhcyBiZWVuIGRldGVybWluZWQgKGFuZCBiZWZvcmUgdGhlIG5vZGUgaXRzZWxmIGFuZCBpdHMgc2libGluZ3MgYXJlIGFycmFuZ2VkKS4gVGhlIHNjYWxpbmcgaXMgbm90IHJldmVydGVkIGFmdGVyd2FyZHMsIHNvIHRoZSByZXN1bHRpbmcgbGF5b3V0IGdyYXBoIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzaXplIGFuZCBwb3NpdGlvbiBkYXRhLiBUaGlzIG9wdGlvbiBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBpZiAnTGF5b3V0IEhpZXJhcmNoeScgaXMgc2V0LiIpLDEpLE9vKSxsYSksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxmZGUpLCIiKSwiQW5pbWF0ZSIpLCJXaGV0aGVyIHRoZSBzaGlmdCBmcm9tIHRoZSBvbGQgbGF5b3V0IHRvIHRoZSBuZXcgY29tcHV0ZWQgbGF5b3V0IHNoYWxsIGJlIGFuaW1hdGVkLiIpLCEwKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZGRlKSwiIiksIkFuaW1hdGlvbiBUaW1lIEZhY3RvciIpLCJGYWN0b3IgZm9yIGNvbXB1dGF0aW9uIG9mIGFuaW1hdGlvbiB0aW1lLiBUaGUgaGlnaGVyIHRoZSB2YWx1ZSwgdGhlIGxvbmdlciB0aGUgYW5pbWF0aW9uIHRpbWUuIElmIHRoZSB2YWx1ZSBpcyAwLCB0aGUgcmVzdWx0aW5nIHRpbWUgaXMgYWx3YXlzIGVxdWFsIHRvIHRoZSBtaW5pbXVtIGRlZmluZWQgYnkgJ01pbmltYWwgQW5pbWF0aW9uIFRpbWUnLiIpLHBlKDEwMCkpLGdjKSxqYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxnZGUpLCIiKSwiTGF5b3V0IEFuY2VzdG9ycyIpLCJXaGV0aGVyIHRoZSBoaWVyYXJjaHkgbGV2ZWxzIG9uIHRoZSBwYXRoIGZyb20gdGhlIHNlbGVjdGVkIGVsZW1lbnQgdG8gdGhlIHJvb3Qgb2YgdGhlIGRpYWdyYW0gc2hhbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGxheW91dCBwcm9jZXNzLiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUscGRlKSwiIiksIk1heGltYWwgQW5pbWF0aW9uIFRpbWUiKSwiVGhlIG1heGltYWwgdGltZSBmb3IgYW5pbWF0aW9ucywgaW4gbWlsbGlzZWNvbmRzLiIpLHBlKDRlMykpLGdjKSxqYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxiZGUpLCIiKSwiTWluaW1hbCBBbmltYXRpb24gVGltZSIpLCJUaGUgbWluaW1hbCB0aW1lIGZvciBhbmltYXRpb25zLCBpbiBtaWxsaXNlY29uZHMuIikscGUoNDAwKSksZ2MpLGphKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHdkZSksIiIpLCJQcm9ncmVzcyBCYXIiKSwiV2hldGhlciBhIHByb2dyZXNzIGJhciBzaGFsbCBiZSBkaXNwbGF5ZWQgZHVyaW5nIGxheW91dCBjb21wdXRhdGlvbnMuIiksITEpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSx2ZGUpLCIiKSwiVmFsaWRhdGUgR3JhcGgiKSwiV2hldGhlciB0aGUgZ3JhcGggc2hhbGwgYmUgdmFsaWRhdGVkIGJlZm9yZSBhbnkgbGF5b3V0IGFsZ29yaXRobSBpcyBhcHBsaWVkLiBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgZXJyb3IgaXMgZm91bmQsIHRoZSBsYXlvdXQgcHJvY2VzcyBpcyBhYm9ydGVkIGFuZCBhIG1lc3NhZ2UgaXMgc2hvd24gdG8gdGhlIHVzZXIuIiksITEpLExhKSxScyksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxtZGUpLCIiKSwiVmFsaWRhdGUgT3B0aW9ucyIpLCJXaGV0aGVyIGxheW91dCBvcHRpb25zIHNoYWxsIGJlIHZhbGlkYXRlZCBiZWZvcmUgYW55IGxheW91dCBhbGdvcml0aG0gaXMgYXBwbGllZC4gSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgYXQgbGVhc3Qgb25lIGVycm9yIGlzIGZvdW5kLCB0aGUgbGF5b3V0IHByb2Nlc3MgaXMgYWJvcnRlZCBhbmQgYSBtZXNzYWdlIGlzIHNob3duIHRvIHRoZSB1c2VyLiIpLCEwKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUseWRlKSwiIiksIlpvb20gdG8gRml0IiksIldoZXRoZXIgdGhlIHpvb20gbGV2ZWwgc2hhbGwgYmUgc2V0IHRvIHZpZXcgdGhlIHdob2xlIGRpYWdyYW0gYWZ0ZXIgbGF5b3V0LiIpLCExKSxMYSksUnMpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZzh0KSwiYm94IiksIkJveCBMYXlvdXQgTW9kZSIpLCJDb25maWd1cmVzIHRoZSBwYWNraW5nIG1vZGUgdXNlZCBieSB0aGUge0BsaW5rIEJveExheW91dFByb3ZpZGVyfS4gSWYgU0lNUExFIGlzIG5vdCByZXF1aXJlZCAobmVpdGhlciBwcmlvcml0aWVzIGFyZSB1c2VkIG5vciB0aGUgaW50ZXJhY3RpdmUgbW9kZSksIEdST1VQX0RFQyBjYW4gaW1wcm92ZSB0aGUgcGFja2luZyBhbmQgZGVjcmVhc2UgdGhlIGFyZWEuIEdST1VQX01JWEVEIGFuZCBHUk9VUF9JTkMgbWF5LCBpbiB2ZXJ5IHNwZWNpZmljIHNjZW5hcmlvcywgd29yayBiZXR0ZXIuIiksQlN0KSx1cyksJEF0KSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLG9rdCksUjEpLCJDb21tZW50IENvbW1lbnQgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGEgY29tbWVudCBib3ggYW5kIG90aGVyIGNvbW1lbnQgYm94ZXMgY29ubmVjdGVkIHRvIHRoZSBzYW1lIG5vZGUuIFRoZSBzcGFjZSBsZWZ0IGJldHdlZW4gY29tbWVudCBib3hlcyBvZiBkaWZmZXJlbnQgbm9kZXMgaXMgY29udHJvbGxlZCBieSB0aGUgbm9kZS1ub2RlIHNwYWNpbmcuIiksMTApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxja3QpLFIxKSwiQ29tbWVudCBOb2RlIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhIG5vZGUgYW5kIGl0cyBjb25uZWN0ZWQgY29tbWVudCBib3hlcy4gVGhlIHNwYWNlIGxlZnQgYmV0d2VlbiBhIG5vZGUgYW5kIHRoZSBjb21tZW50cyBvZiBhbm90aGVyIG5vZGUgaXMgY29udHJvbGxlZCBieSB0aGUgbm9kZS1ub2RlIHNwYWNpbmcuIiksMTApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxqb3QpLFIxKSwiQ29tcG9uZW50cyBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gcGFpcnMgb2YgY29ubmVjdGVkIGNvbXBvbmVudHMuIFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgaWYgJ3NlcGFyYXRlQ29ubmVjdGVkQ29tcG9uZW50cycgaXMgYWN0aXZhdGVkLiIpLDIwKSxPbyksbGEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsdWt0KSxSMSksIkVkZ2UgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGFueSB0d28gZWRnZXMuIE5vdGUgdGhhdCB3aGlsZSB0aGlzIGNhbiBzb21ld2hhdCBlYXNpbHkgYmUgc2F0aXNmaWVkIGZvciB0aGUgc2VnbWVudHMgb2Ygb3J0aG9nb25hbGx5IGRyYXduIGVkZ2VzLCBpdCBpcyBoYXJkZXIgZm9yIGdlbmVyYWwgcG9seWxpbmVzIG9yIHNwbGluZXMuIiksMTApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxWb3QpLFIxKSwiRWRnZSBMYWJlbCBTcGFjaW5nIiksIlRoZSBtaW5pbWFsIGRpc3RhbmNlIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGEgbGFiZWwgYW5kIHRoZSBlZGdlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aC4gTm90ZSB0aGF0IHRoZSBwbGFjZW1lbnQgb2YgYSBsYWJlbCBpcyBpbmZsdWVuY2VkIGJ5IHRoZSAnZWRnZWxhYmVscy5wbGFjZW1lbnQnIG9wdGlvbi4iKSwyKSxPbyksbGEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsbGt0KSxSMSksIkVkZ2UgTm9kZSBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gbm9kZXMgYW5kIGVkZ2VzLiIpLDEwKSxPbyksbGEpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsaGt0KSxSMSksIkxhYmVsIFNwYWNpbmciKSwiRGV0ZXJtaW5lcyB0aGUgYW1vdW50IG9mIHNwYWNlIHRvIGJlIGxlZnQgYmV0d2VlbiB0d28gbGFiZWxzIG9mIHRoZSBzYW1lIGdyYXBoIGVsZW1lbnQuIiksMCksT28pLGxhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGdrdCksUjEpLCJMYWJlbCBOb2RlIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBib3JkZXIgb2Ygbm9kZSB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ25vZGVsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksNSksT28pLGxhKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLGZrdCksUjEpLCJIb3Jpem9udGFsIHNwYWNpbmcgYmV0d2VlbiBMYWJlbCBhbmQgUG9ydCIpLCJIb3Jpem9udGFsIHNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gbGFiZWxzIGFuZCB0aGUgcG9ydHMgdGhleSBhcmUgYXNzb2NpYXRlZCB3aXRoLiBOb3RlIHRoYXQgdGhlIHBsYWNlbWVudCBvZiBhIGxhYmVsIGlzIGluZmx1ZW5jZWQgYnkgdGhlICdwb3J0bGFiZWxzLnBsYWNlbWVudCcgb3B0aW9uLiIpLDEpLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxka3QpLFIxKSwiVmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIExhYmVsIGFuZCBQb3J0IiksIlZlcnRpY2FsIHNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gbGFiZWxzIGFuZCB0aGUgcG9ydHMgdGhleSBhcmUgYXNzb2NpYXRlZCB3aXRoLiBOb3RlIHRoYXQgdGhlIHBsYWNlbWVudCBvZiBhIGxhYmVsIGlzIGluZmx1ZW5jZWQgYnkgdGhlICdwb3J0bGFiZWxzLnBsYWNlbWVudCcgb3B0aW9uLiIpLDEpLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxDeSksUjEpLCJOb2RlIFNwYWNpbmciKSwiVGhlIG1pbmltYWwgZGlzdGFuY2UgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gZWFjaCB0d28gbm9kZXMuIiksMjApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxwa3QpLFIxKSwiTm9kZSBTZWxmIExvb3AgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGEgbm9kZSBhbmQgaXRzIHNlbGYgbG9vcHMuIiksMTApLE9vKSxsYSksdW4ocW4pKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxia3QpLFIxKSwiUG9ydCBTcGFjaW5nIiksIlNwYWNpbmcgYmV0d2VlbiBwYWlycyBvZiBwb3J0cyBvZiB0aGUgc2FtZSBub2RlLiIpLDEwKSxPbyksbGEpLGppKHFuLGx0KGN0KGlwLDEpLG9lLDE3NSwwLFtlYV0pKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsd2t0KSxSMSksIkluZGl2aWR1YWwgU3BhY2luZyIpLCJBbGxvd3MgdG8gc3BlY2lmeSBpbmRpdmlkdWFsIHNwYWNpbmcgdmFsdWVzIGZvciBncmFwaCBlbGVtZW50cyB0aGF0IHNoYWxsIGJlIGRpZmZlcmVudCBmcm9tIHRoZSB2YWx1ZSBzcGVjaWZpZWQgZm9yIHRoZSBlbGVtZW50J3MgcGFyZW50LiIpLFYxKSwkNGUpLGppKGVhLGx0KGN0KGlwLDEpLG9lLDE3NSwwLFtQZCxWMixycF0pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsJGt0KSxSMSksIkFkZGl0aW9uYWwgUG9ydCBTcGFjZSIpLCJBZGRpdGlvbmFsIHNwYWNlIGFyb3VuZCB0aGUgc2V0cyBvZiBwb3J0cyBvbiBlYWNoIG5vZGUgc2lkZS4gRm9yIGVhY2ggc2lkZSBvZiBhIG5vZGUsIHRoaXMgb3B0aW9uIGNhbiByZXNlcnZlIGFkZGl0aW9uYWwgc3BhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9ydHMgb24gZWFjaCBzaWRlLiBGb3IgZXhhbXBsZSwgYSB0b3Agc3BhY2luZyBvZiAyMCBtYWtlcyBzdXJlIHRoYXQgdGhlIGZpcnN0IHBvcnQgb24gdGhlIHdlc3Rlcm4gYW5kIGVhc3Rlcm4gc2lkZSBpcyAyMCB1bml0cyBhd2F5IGZyb20gdGhlIG5vcnRoZXJuIGJvcmRlci4iKSx3QXQpLFYxKSxON3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsQ2N0KSxFZGUpLCJMYXlvdXQgUGFydGl0aW9uIiksIlBhcnRpdGlvbiB0byB3aGljaCB0aGUgbm9kZSBiZWxvbmdzLiBUaGlzIHJlcXVpcmVzIExheW91dCBQYXJ0aXRpb25pbmcgdG8gYmUgYWN0aXZlLiBOb2RlcyB3aXRoIGxvd2VyIHBhcnRpdGlvbiBJRHMgd2lsbCBhcHBlYXIgdG8gdGhlIGxlZnQgb2Ygbm9kZXMgd2l0aCBoaWdoZXIgcGFydGl0aW9uIElEcyAoYXNzdW1pbmcgYSBsZWZ0LXRvLXJpZ2h0IGxheW91dCBkaXJlY3Rpb24pLiIpLGdjKSxqYSksamkocW4sbHQoY3QoaXAsMSksb2UsMTc1LDAsW2VhXSkpKSkpLGNhKGUsQ2N0LFRjdCxkNGUpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxUY3QpLEVkZSksIkxheW91dCBQYXJ0aXRpb25pbmciKSwiV2hldGhlciB0byBhY3RpdmF0ZSBwYXJ0aXRpb25lZCBsYXlvdXQuIFRoaXMgd2lsbCBhbGxvdyB0byBncm91cCBub2RlcyB0aHJvdWdoIHRoZSBMYXlvdXQgUGFydGl0aW9uIG9wdGlvbi4gYSBwYWlyIG9mIG5vZGVzIHdpdGggZGlmZmVyZW50IHBhcnRpdGlvbiBpbmRpY2VzIGlzIHRoZW4gcGxhY2VkIHN1Y2ggdGhhdCB0aGUgbm9kZSB3aXRoIGxvd2VyIGluZGV4IGlzIHBsYWNlZCB0byB0aGUgbGVmdCBvZiB0aGUgb3RoZXIgbm9kZSAod2l0aCBsZWZ0LXRvLXJpZ2h0IGxheW91dCBkaXJlY3Rpb24pLiBEZXBlbmRpbmcgb24gdGhlIGxheW91dCBhbGdvcml0aG0sIHRoaXMgbWF5IG9ubHkgYmUgZ3VhcmFudGVlZCB0byB3b3JrIGlmIGFsbCBub2RlcyBoYXZlIGEgbGF5b3V0IHBhcnRpdGlvbiBjb25maWd1cmVkLCBvciBhdCBsZWFzdCBpZiBlZGdlcyB0aGF0IGNyb3NzIHBhcnRpdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIGEgcGFydGl0aW9uLWNyb3NzaW5nIGN5Y2xlLiIpLHJBdCksTGEpLFJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLENrdCksVGRlKSwiTm9kZSBMYWJlbCBQYWRkaW5nIiksIkRlZmluZSBwYWRkaW5nIGZvciBub2RlIGxhYmVscyB0aGF0IGFyZSBwbGFjZWQgaW5zaWRlIG9mIGEgbm9kZS4iKSxRU3QpLFYxKSxCN3QpLHVuKHFuKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsVUUpLFRkZSksIk5vZGUgTGFiZWwgUGxhY2VtZW50IiksIkhpbnRzIGZvciB3aGVyZSBub2RlIGxhYmVscyBhcmUgdG8gYmUgcGxhY2VkOyBpZiBlbXB0eSwgdGhlIG5vZGUgbGFiZWwncyBwb3NpdGlvbiBpcyBub3QgbW9kaWZpZWQuIiksWlN0KSxVNiksbG8pLGppKGVhLGx0KGN0KGlwLDEpLG9lLDE3NSwwLFtycF0pKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsQWt0KSxTSCksIlBvcnQgQWxpZ25tZW50IiksIkRlZmluZXMgdGhlIGRlZmF1bHQgcG9ydCBkaXN0cmlidXRpb24gZm9yIGEgbm9kZS4gTWF5IGJlIG92ZXJyaWRkZW4gZm9yIGVhY2ggc2lkZSBpbmRpdmlkdWFsbHkuIiksc0F0KSx1cyksdEEpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsTGt0KSxTSCksIlBvcnQgQWxpZ25tZW50IChOb3J0aCkiKSwiRGVmaW5lcyBob3cgcG9ydHMgb24gdGhlIG5vcnRoZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuIiksdXMpLHRBKSx1bihlYSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLE1rdCksU0gpLCJQb3J0IEFsaWdubWVudCAoU291dGgpIiksIkRlZmluZXMgaG93IHBvcnRzIG9uIHRoZSBzb3V0aGVybiBzaWRlIGFyZSBwbGFjZWQsIG92ZXJyaWRpbmcgdGhlIG5vZGUncyBnZW5lcmFsIHBvcnQgYWxpZ25tZW50LiIpLHVzKSx0QSksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSxEa3QpLFNIKSwiUG9ydCBBbGlnbm1lbnQgKFdlc3QpIiksIkRlZmluZXMgaG93IHBvcnRzIG9uIHRoZSB3ZXN0ZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuIiksdXMpLHRBKSx1bihlYSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLElrdCksU0gpLCJQb3J0IEFsaWdubWVudCAoRWFzdCkiKSwiRGVmaW5lcyBob3cgcG9ydHMgb24gdGhlIGVhc3Rlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSx1cyksdEEpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsRDQpLEdjdCksIk5vZGUgU2l6ZSBDb25zdHJhaW50cyIpLCJXaGF0IHNob3VsZCBiZSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyBhIG5vZGUncyBzaXplLiBFbXB0eSBzaXplIGNvbnN0cmFpbnRzIHNwZWNpZnkgdGhhdCBhIG5vZGUncyBzaXplIGlzIGFscmVhZHkgZml4ZWQgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZC4iKSxKU3QpLFU2KSxyQSksdW4oZWEpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxUNiksR2N0KSwiTm9kZSBTaXplIE9wdGlvbnMiKSwiT3B0aW9ucyBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBzaXplIGNvbnN0cmFpbnRzIHNldCBvbiBhIG5vZGUuIEVhY2ggbWVtYmVyIG9mIHRoZSBzZXQgc3BlY2lmaWVzIHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyBub2RlIHNpemVzLiBUaGUgZW1wdHkgc2V0IGNvcnJlc3BvbmRzIHRvIG5vIGZ1cnRoZXIgbW9kaWZpY2F0aW9ucy4iKSxlQXQpLFU2KSxOQXQpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsQzYpLEdjdCksIk5vZGUgU2l6ZSBNaW5pbXVtIiksIlRoZSBtaW5pbWFsIHNpemUgdG8gd2hpY2ggYSBub2RlIGNhbiBiZSByZWR1Y2VkLiIpLHRBdCksVjEpLFdzKSx1bihlYSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLEVjdCksR2N0KSwiRml4ZWQgR3JhcGggU2l6ZSIpLCJCeSBkZWZhdWx0LCB0aGUgZml4ZWQgbGF5b3V0IHByb3ZpZGVyIHdpbGwgZW5sYXJnZSBhIGdyYXBoIHVudGlsIGl0IGlzIGxhcmdlIGVub3VnaCB0byBjb250YWluIGl0cyBjaGlsZHJlbi4gSWYgdGhpcyBvcHRpb24gaXMgc2V0LCBpdCB3b24ndCBkbyBzby4iKSwhMSksTGEpLFJzKSx1bihxbikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFBrdCksa2N0KSwiRWRnZSBMYWJlbCBQbGFjZW1lbnQiKSwiR2l2ZXMgYSBoaW50IG9uIHdoZXJlIHRvIHB1dCBlZGdlIGxhYmVscy4iKSwkU3QpLHVzKSxtQXQpLHVuKHJwKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsZUgpLGtjdCksIklubGluZSBFZGdlIExhYmVscyIpLCJJZiB0cnVlLCBhbiBlZGdlIGxhYmVsIGlzIHBsYWNlZCBkaXJlY3RseSBvbiBpdHMgZWRnZS4gTWF5IG9ubHkgYXBwbHkgdG8gY2VudGVyIGVkZ2UgbGFiZWxzLiBUaGlzIGtpbmQgb2YgbGFiZWwgcGxhY2VtZW50IGlzIG9ubHkgYWR2aXNhYmxlIGlmIHRoZSBsYWJlbCdzIHJlbmRlcmluZyBpcyBzdWNoIHRoYXQgaXQgaXMgbm90IGNyb3NzZWQgYnkgaXRzIGVkZ2UgYW5kIHRodXMgc3RheXMgbGVnaWJsZS4iKSwhMSksTGEpLFJzKSx1bihycCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLFd4biksImZvbnQiKSwiRm9udCBOYW1lIiksIkZvbnQgbmFtZSB1c2VkIGZvciBhIGxhYmVsLiIpLEk3KSxBZSksdW4ocnApKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKFplKGVuKEplKHRuKG5ldyBVZSx4ZGUpLCJmb250IiksIkZvbnQgU2l6ZSIpLCJGb250IHNpemUgdXNlZCBmb3IgYSBsYWJlbC4iKSxnYyksamEpLHVuKHJwKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsUmt0KSxVY3QpLCJQb3J0IEFuY2hvciBPZmZzZXQiKSwiVGhlIG9mZnNldCB0byB0aGUgcG9ydCBwb3NpdGlvbiB3aGVyZSBjb25uZWN0aW9ucyBzaGFsbCBiZSBhdHRhY2hlZC4iKSxWMSksV3MpLHVuKFYyKSkpKSxhbihlLG5ldyBYZShybihubihzbihaZShlbihKZSh0bihuZXcgVWUsRmt0KSxVY3QpLCJQb3J0IEluZGV4IiksIlRoZSBpbmRleCBvZiBhIHBvcnQgaW4gdGhlIGZpeGVkIG9yZGVyIGFyb3VuZCBhIG5vZGUuIFRoZSBvcmRlciBpcyBhc3N1bWVkIGFzIGNsb2Nrd2lzZSwgc3RhcnRpbmcgd2l0aCB0aGUgbGVmdG1vc3QgcG9ydCBvbiB0aGUgdG9wIHNpZGUuIFRoaXMgb3B0aW9uIG11c3QgYmUgc2V0IGlmICdQb3J0IENvbnN0cmFpbnRzJyBpcyBzZXQgdG8gRklYRURfT1JERVIgYW5kIG5vIHNwZWNpZmljIHBvc2l0aW9ucyBhcmUgZ2l2ZW4gZm9yIHRoZSBwb3J0cy4gQWRkaXRpb25hbGx5LCB0aGUgb3B0aW9uICdQb3J0IFNpZGUnIG11c3QgYmUgZGVmaW5lZCBpbiB0aGlzIGNhc2UuIiksZ2MpLGphKSx1bihWMikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLHlrdCksVWN0KSwiUG9ydCBTaWRlIiksIlRoZSBzaWRlIG9mIGEgbm9kZSBvbiB3aGljaCBhIHBvcnQgaXMgc2l0dWF0ZWQuIFRoaXMgb3B0aW9uIG11c3QgYmUgc2V0IGlmICdQb3J0IENvbnN0cmFpbnRzJyBpcyBzZXQgdG8gRklYRURfU0lERSBvciBGSVhFRF9PUkRFUiBhbmQgbm8gc3BlY2lmaWMgcG9zaXRpb25zIGFyZSBnaXZlbiBmb3IgdGhlIHBvcnRzLiIpLGxBdCksdXMpLFhhKSx1bihWMikpKSksYW4oZSxuZXcgWGUocm4obm4oc24oWmUoZW4oSmUodG4obmV3IFVlLHZrdCksVWN0KSwiUG9ydCBCb3JkZXIgT2Zmc2V0IiksIlRoZSBvZmZzZXQgb2YgcG9ydHMgb24gdGhlIG5vZGUgYm9yZGVyLiBXaXRoIGEgcG9zaXRpdmUgb2Zmc2V0IHRoZSBwb3J0IGlzIG1vdmVkIG91dHNpZGUgb2YgdGhlIG5vZGUsIHdoaWxlIHdpdGggYSBuZWdhdGl2ZSBvZmZzZXQgdGhlIHBvcnQgaXMgbW92ZWQgdG93YXJkcyB0aGUgaW5zaWRlLiBBbiBvZmZzZXQgb2YgMCBtZWFucyB0aGF0IHRoZSBwb3J0IGlzIHBsYWNlZCBkaXJlY3RseSBvbiB0aGUgbm9kZSBib3JkZXIsIGkuZS4gaWYgdGhlIHBvcnQgc2lkZSBpcyBub3J0aCwgdGhlIHBvcnQncyBzb3V0aCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZXMncyBub3J0aCBib3JkZXI7IGlmIHRoZSBwb3J0IHNpZGUgaXMgZWFzdCwgdGhlIHBvcnQncyB3ZXN0IGJvcmRlciB0b3VjaGVzIHRoZSBub2RlcydzIGVhc3QgYm9yZGVyOyBpZiB0aGUgcG9ydCBzaWRlIGlzIHNvdXRoLCB0aGUgcG9ydCdzIG5vcnRoIGJvcmRlciB0b3VjaGVzIHRoZSBub2RlJ3Mgc291dGggYm9yZGVyOyBpZiB0aGUgcG9ydCBzaWRlIGlzIHdlc3QsIHRoZSBwb3J0J3MgZWFzdCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZSdzIHdlc3QgYm9yZGVyLiIpLE9vKSxsYSksdW4oVjIpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxXRSksYjh0KSwiUG9ydCBMYWJlbCBQbGFjZW1lbnQiKSwiRGVjaWRlcyBvbiBhIHBsYWNlbWVudCBtZXRob2QgZm9yIHBvcnQgbGFiZWxzOyBpZiBlbXB0eSwgdGhlIG5vZGUgbGFiZWwncyBwb3NpdGlvbiBpcyBub3QgbW9kaWZpZWQuIiksY0F0KSxVNiksZVUpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsX2t0KSxiOHQpLCJQb3J0IExhYmVscyBOZXh0IHRvIFBvcnQiKSwiVXNlICdwb3J0TGFiZWxzLnBsYWNlbWVudCc6IE5FWFRfVE9fUE9SVF9PRl9QT1NTSUJMRS4iKSwhMSksTGEpLFJzKSx1bihlYSkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLFNrdCksYjh0KSwiVHJlYXQgUG9ydCBMYWJlbHMgYXMgR3JvdXAiKSwiSWYgdGhpcyBvcHRpb24gaXMgdHJ1ZSAoZGVmYXVsdCksIHRoZSBsYWJlbHMgb2YgYSBwb3J0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIGdyb3VwIHdoZW4gaXQgY29tZXMgdG8gY2VudGVyaW5nIHRoZW0gbmV4dCB0byB0aGVpciBwb3J0LiBJZiB0aGlzIG9wdGlvbiBpcyBmYWxzZSwgb25seSB0aGUgZmlyc3QgbGFiZWwgd2lsbCBiZSBjZW50ZXJlZCBuZXh0IHRvIHRoZSBwb3J0LCB3aXRoIHRoZSBvdGhlcnMgYmVpbmcgcGxhY2VkIGJlbG93LiBUaGlzIG9ubHkgYXBwbGllcyB0byBsYWJlbHMgb2YgZWFzdGVybiBhbmQgd2VzdGVybiBwb3J0cyBhbmQgd2lsbCBoYXZlIG5vIGVmZmVjdCBpZiBsYWJlbHMgYXJlIG5vdCBwbGFjZWQgbmV4dCB0byB0aGVpciBwb3J0LiIpLCEwKSxMYSksUnMpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsa2t0KSxDZGUpLCJBY3RpdmF0ZSBJbnNpZGUgU2VsZiBMb29wcyIpLCJXaGV0aGVyIHRoaXMgbm9kZSBhbGxvd3MgdG8gcm91dGUgc2VsZiBsb29wcyBpbnNpZGUgb2YgaXQgaW5zdGVhZCBvZiBhcm91bmQgaXQuIElmIHNldCB0byB0cnVlLCB0aGlzIHdpbGwgbWFrZSB0aGUgbm9kZSBhIGNvbXBvdW5kIG5vZGUgaWYgaXQgaXNuJ3QgYWxyZWFkeSwgYW5kIHdpbGwgcmVxdWlyZSB0aGUgbGF5b3V0IGFsZ29yaXRobSB0byBzdXBwb3J0IGNvbXBvdW5kIG5vZGVzIHdpdGggaGllcmFyY2hpY2FsIHBvcnRzLiIpLCExKSxMYSksUnMpLHVuKGVhKSkpKSxhbihlLG5ldyBYZShybihubihzbihrbihaZShlbihKZSh0bihuZXcgVWUsRWt0KSxDZGUpLCJJbnNpZGUgU2VsZiBMb29wIiksIldoZXRoZXIgYSBzZWxmIGxvb3Agc2hvdWxkIGJlIHJvdXRlZCBpbnNpZGUgYSBub2RlIGluc3RlYWQgb2YgYXJvdW5kIHRoYXQgbm9kZS4iKSwhMSksTGEpLFJzKSx1bihQZCkpKSksYW4oZSxuZXcgWGUocm4obm4oc24oa24oWmUoZW4oSmUodG4obmV3IFVlLCRvdCksImVkZ2UiKSwiRWRnZSBUaGlja25lc3MiKSwiVGhlIHRoaWNrbmVzcyBvZiBhbiBlZGdlLiBUaGlzIGlzIGEgaGludCBvbiB0aGUgbGluZSB3aWR0aCB1c2VkIHRvIGRyYXcgYW4gZWRnZSwgcG9zc2libHkgcmVxdWlyaW5nIG1vcmUgc3BhY2UgdG8gYmUgcmVzZXJ2ZWQgZm9yIGl0LiIpLDEpLE9vKSxsYSksdW4oUGQpKSkpLGFuKGUsbmV3IFhlKHJuKG5uKHNuKGtuKFplKGVuKEplKHRuKG5ldyBVZSxrZGUpLCJlZGdlIiksIkVkZ2UgVHlwZSIpLCJUaGUgdHlwZSBvZiBhbiBlZGdlLiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBmb3IgVU1MIGNsYXNzIGRpYWdyYW1zLCB3aGVyZSBhc3NvY2lhdGlvbnMgbXVzdCBiZSBoYW5kbGVkIGRpZmZlcmVudGx5IGZyb20gZ2VuZXJhbGl6YXRpb25zLiIpLFZTdCksdXMpLENBdCksdW4oUGQpKSkpLFdDKGUsbmV3IFl4KHpDKG84KGE4KG5ldyB4bSxHbiksIkxheWVyZWQiKSwnVGhlIGxheWVyLWJhc2VkIG1ldGhvZCB3YXMgaW50cm9kdWNlZCBieSBTdWdpeWFtYSwgVGFnYXdhIGFuZCBUb2RhIGluIDE5ODEuIEl0IGVtcGhhc2l6ZXMgdGhlIGRpcmVjdGlvbiBvZiBlZGdlcyBieSBwb2ludGluZyBhcyBtYW55IGVkZ2VzIGFzIHBvc3NpYmxlIGludG8gdGhlIHNhbWUgZGlyZWN0aW9uLiBUaGUgbm9kZXMgYXJlIGFycmFuZ2VkIGluIGxheWVycywgd2hpY2ggYXJlIHNvbWV0aW1lcyBjYWxsZWQgImhpZXJhcmNoaWVzIiwgYW5kIHRoZW4gcmVvcmRlcmVkIHN1Y2ggdGhhdCB0aGUgbnVtYmVyIG9mIGVkZ2UgY3Jvc3NpbmdzIGlzIG1pbmltaXplZC4gQWZ0ZXJ3YXJkcywgY29uY3JldGUgY29vcmRpbmF0ZXMgYXJlIGNvbXB1dGVkIGZvciB0aGUgbm9kZXMgYW5kIGVkZ2UgYmVuZCBwb2ludHMuJykpKSxXQyhlLG5ldyBZeCh6QyhvOChhOChuZXcgeG0sIm9yZy5lY2xpcHNlLmVsay5vcnRob2dvbmFsIiksIk9ydGhvZ29uYWwiKSxgT3J0aG9nb25hbCBtZXRob2RzIHRoYXQgZm9sbG93IHRoZSAidG9wb2xvZ3ktc2hhcGUtbWV0cmljcyIgYXBwcm9hY2ggYnkgQmF0aW5pLCBOYXJkZWxsaSBhbmQgVGFtYXNzaWEgJzg2LiBUaGUgZmlyc3QgcGhhc2UgZGV0ZXJtaW5lcyB0aGUgdG9wb2xvZ3kgb2YgdGhlIGRyYXdpbmcgYnkgYXBwbHlpbmcgYSBwbGFuYXJpemF0aW9uIHRlY2huaXF1ZSwgd2hpY2ggcmVzdWx0cyBpbiBhIHBsYW5hciByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ3JhcGguIFRoZSBvcnRob2dvbmFsIHNoYXBlIGlzIGNvbXB1dGVkIGluIHRoZSBzZWNvbmQgcGhhc2UsIHdoaWNoIGFpbXMgYXQgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIGVkZ2UgYmVuZHMsIGFuZCBpcyBjYWxsZWQgb3J0aG9nb25hbGl6YXRpb24uIFRoZSB0aGlyZCBwaGFzZSBsZWFkcyB0byBjb25jcmV0ZSBjb29yZGluYXRlcyBmb3Igbm9kZXMgYW5kIGVkZ2UgYmVuZCBwb2ludHMgYnkgYXBwbHlpbmcgYSBjb21wYWN0aW9uIG1ldGhvZCwgdGh1cyBkZWZpbmluZyB0aGUgbWV0cmljcy5gKSkpLFdDKGUsbmV3IFl4KHpDKG84KGE4KG5ldyB4bSxWbCksIkZvcmNlIiksIkxheW91dCBhbGdvcml0aG1zIHRoYXQgZm9sbG93IHBoeXNpY2FsIGFuYWxvZ2llcyBieSBzaW11bGF0aW5nIGEgc3lzdGVtIG9mIGF0dHJhY3RpdmUgYW5kIHJlcHVsc2l2ZSBmb3JjZXMuIFRoZSBmaXJzdCBzdWNjZXNzZnVsIG1ldGhvZCBvZiB0aGlzIGtpbmQgd2FzIHByb3Bvc2VkIGJ5IEVhZGVzIGluIDE5ODQuIikpKSxXQyhlLG5ldyBZeCh6QyhvOChhOChuZXcgeG0sIm9yZy5lY2xpcHNlLmVsay5jaXJjbGUiKSwiQ2lyY2xlIiksIkNpcmN1bGFyIGxheW91dCBhbGdvcml0aG1zIGVtcGhhc2l6ZSBjeWNsZXMgb3IgYmljb25uZWN0ZWQgY29tcG9uZW50cyBvZiBhIGdyYXBoIGJ5IGFycmFuZ2luZyB0aGVtIGluIGNpcmNsZXMuIFRoaXMgaXMgdXNlZnVsIGlmIGEgZHJhd2luZyBpcyBkZXNpcmVkIHdoZXJlIHN1Y2ggY29tcG9uZW50cyBhcmUgY2xlYXJseSBncm91cGVkLCBvciB3aGVyZSBjeWNsZXMgYXJlIHNob3duIGFzIHByb21pbmVudCBPUFRJT05TIG9mIHRoZSBncmFwaC4iKSkpLFdDKGUsbmV3IFl4KHpDKG84KGE4KG5ldyB4bSxLMWUpLCJUcmVlIiksIlNwZWNpYWxpemVkIGxheW91dCBtZXRob2RzIGZvciB0cmVlcywgaS5lLiBhY3ljbGljIGdyYXBocy4gVGhlIHJlZ3VsYXIgc3RydWN0dXJlIG9mIGdyYXBocyB0aGF0IGhhdmUgbm8gdW5kaXJlY3RlZCBjeWNsZXMgY2FuIGJlIGVtcGhhc2l6ZWQgdXNpbmcgYW4gYWxnb3JpdGhtIG9mIHRoaXMgdHlwZS4iKSkpLFdDKGUsbmV3IFl4KHpDKG84KGE4KG5ldyB4bSwib3JnLmVjbGlwc2UuZWxrLnBsYW5hciIpLCJQbGFuYXIiKSwiQWxnb3JpdGhtcyB0aGF0IHJlcXVpcmUgYSBwbGFuYXIgb3IgdXB3YXJkIHBsYW5hciBncmFwaC4gTW9zdCBvZiB0aGVzZSBhbGdvcml0aG1zIGFyZSB0aGVvcmV0aWNhbGx5IGludGVyZXN0aW5nLCBidXQgbm90IHByYWN0aWNhbGx5IHVzYWJsZS4iKSkpLFdDKGUsbmV3IFl4KHpDKG84KGE4KG5ldyB4bSxTZCksIlJhZGlhbCIpLCJSYWRpYWwgbGF5b3V0IGFsZ29yaXRobXMgdXN1YWxseSBwb3NpdGlvbiB0aGUgbm9kZXMgb2YgdGhlIGdyYXBoIG9uIGNvbmNlbnRyaWMgY2lyY2xlcy4iKSkpLEt1ZSgobmV3IFFCLGUpKSxsbGUoKG5ldyBodHQsZSkpLEN1ZSgobmV3IFpCLGUpKX07dmFyIFlTLGE0ZSxOU3QsVzYsbzRlLGM0ZSxCU3QsdTRlLFlHLFJTdCxRTyxxdixqU3QsZ2Z0LHBmdCwkU3QselN0LHFTdCxIU3QsVlN0LEdTdCxzNSxVU3QsbDRlLFpPLGJmdCxLRyxXU3QsYTUsWVN0LEpPLEtTdCxYU3QsUVN0LG81LFpTdCxHMixKU3QsWEcsYzUsdEF0LHhiLGVBdCxRRyx0UCxVMixuQXQsaDRlLHJBdCxmNGUsZDRlLGlBdCxzQXQsd2Z0LHZmdCxtZnQseWZ0LGFBdCxkbCxLUyxvQXQseGZ0LGtmdCxReSxjQXQsdUF0LHU1LGxBdCxZNixaRyxFZnQsTzcsZzRlLFRmdCxwNGUsYjRlLGhBdCx3NGUsZkF0LHY0ZSxLNixkQXQsSkcsZ0F0LHBBdCxXMixtNGUsYkF0LHdBdCx2QXQ7RihGaCwiQ29yZU9wdGlvbnMiLDY4NCksRCgxMDMsMjIsezM6MSwzNToxLDIyOjEsMTAzOjF9LFBNKTt2YXIgbmcsemgsQ2YsaDAscmcsWFM9anIoRmgsaTZ0LDEwMyxIcixiYW4sRnRuKSx5NGU7RCgyNzIsMjIsezM6MSwzNToxLDIyOjEsMjcyOjF9LFpldCk7dmFyIFA3LFp5LEY3LG1BdD1qcihGaCwiRWRnZUxhYmVsUGxhY2VtZW50IiwyNzIsSHIsWGluLE50bikseDRlO0QoMjE4LDIyLHszOjEsMzU6MSwyMjoxLDIxODoxfSxzaik7dmFyIE43LGVQLFg2LENmdCxfZnQ9anIoRmgsIkVkZ2VSb3V0aW5nIiwyMTgsSHIscXNuLEJ0biksazRlO0QoMzEyLDIyLHszOjEsMzU6MSwyMjoxLDMxMjoxfSxhOSk7dmFyIHlBdCx4QXQsa0F0LEVBdCxTZnQsVEF0LENBdD1qcihGaCwiRWRnZVR5cGUiLDMxMixIcixub24sUnRuKSxFNGU7RCg5NzcsMSxPaCxRQiksbC5RZT1mdW5jdGlvbihlKXtLdWUoZSl9O3ZhciBfQXQsU0F0LEFBdCxMQXQsVDRlLE1BdCxRUztGKEZoLCJGaXhlZExheW91dGVyT3B0aW9ucyIsOTc3KSxEKDk3OCwxLHt9LHFMKSxsLiRlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9bmV3IFVaLGV9LGwuX2U9ZnVuY3Rpb24oZSl7fSxGKEZoLCJGaXhlZExheW91dGVyT3B0aW9ucy9GaXhlZEZhY3RvcnkiLDk3OCksRCgzMzQsMjIsezM6MSwzNToxLDIyOjEsMzM0OjF9LEpldCk7dmFyIHNwLHRVLFpTLERBdD1qcihGaCwiSGllcmFyY2h5SGFuZGxpbmciLDMzNCxIcixLaW4sanRuKSxDNGU7RCgyODUsMjIsezM6MSwzNToxLDIyOjEsMjg1OjF9LGFqKTt2YXIgZjAsa2IsblAsclAsXzRlPWpyKEZoLCJMYWJlbFNpZGUiLDI4NSxIcix6c24sJHRuKSxTNGU7RCg5MywyMix7MzoxLDM1OjEsMjI6MSw5MzoxfSxxMyk7dmFyIGlnLF9mLHFoLFNmLFlsLEFmLEhoLGQwLExmLGxvPWpyKEZoLCJOb2RlTGFiZWxQbGFjZW1lbnQiLDkzLEhyLHNjbix6dG4pLEE0ZTtEKDI0OSwyMix7MzoxLDM1OjEsMjI6MSwyNDk6MX0sRk0pO3ZhciBJQXQsSlMsRWIsT0F0LGlQLHRBPWpyKEZoLCJQb3J0QWxpZ25tZW50IiwyNDksSHIsd2FuLHF0biksTDRlO0QoOTgsMjIsezM6MSwzNToxLDIyOjEsOTg6MX0sbzkpO3ZhciBZMixHYyxnMCxCNyxHMSxUYixQQXQ9anIoRmgsIlBvcnRDb25zdHJhaW50cyIsOTgsSHIsamFuLEh0biksTTRlO0QoMjczLDIyLHszOjEsMzU6MSwyMjoxLDI3MzoxfSxjOSk7dmFyIGVBLG5BLHNnLHNQLENiLFE2LGVVPWpyKEZoLCJQb3J0TGFiZWxQbGFjZW1lbnQiLDI3MyxIcixlb24sVnRuKSxENGU7RCg2MSwyMix7MzoxLDM1OjEsMjI6MSw2MToxfSxOTSk7dmFyIEhuLFBuLG1oLHloLFN1LGx1LFUxLE1mLGVsLFZ1LFVjLG5sLEF1LEx1LERmLEtsLFhsLFZoLG1yLFpvLEJuLFhhPWpyKEZoLCJQb3J0U2lkZSIsNjEsSHIsZGFuLFd0biksSTRlO0QoOTgxLDEsT2gsWkIpLGwuUWU9ZnVuY3Rpb24oZSl7Q3VlKGUpfTt2YXIgTzRlLFA0ZSxGQXQsRjRlLE40ZTtGKEZoLCJSYW5kb21MYXlvdXRlck9wdGlvbnMiLDk4MSksRCg5ODIsMSx7fSxaWiksbC4kZT1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyB0SixlfSxsLl9lPWZ1bmN0aW9uKGUpe30sRihGaCwiUmFuZG9tTGF5b3V0ZXJPcHRpb25zL1JhbmRvbUZhY3RvcnkiLDk4MiksRCgzNzQsMjIsezM6MSwzNToxLDIyOjEsMzc0OjF9LG9qKTt2YXIgSnksYVAsb1AsSzIsckE9anIoRmgsIlNpemVDb25zdHJhaW50IiwzNzQsSHIsJHNuLEd0biksQjRlO0QoMjU5LDIyLHszOjEsMzU6MSwyMjoxLDI1OToxfSxIMyk7dmFyIGNQLG5VLFI3LEFmdCx1UCxpQSxyVSxpVSxzVSxOQXQ9anIoRmgsIlNpemVPcHRpb25zIiwyNTksSHIsZmNuLFV0biksUjRlO0QoMzcwLDEsezE5NDk6MX0scjgpLGwuYj0hMSxsLmM9MCxsLmQ9LTEsbC5lPW51bGwsbC5mPW51bGwsbC5nPS0xLGwuaj0hMSxsLms9ITEsbC5uPSExLGwubz0wLGwucT0wLGwucj0wLEYoRWMsIkJhc2ljUHJvZ3Jlc3NNb25pdG9yIiwzNzApLEQoOTcyLDIwOSxTMixZWiksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQsdixrLEMsTTtzd2l0Y2godnIobiwiQm94IGxheW91dCIsMiksbz1wTSh5ZShxZShlLChmcSgpLGk0ZSkpKSksaD11KHFlKGUscjRlKSwxMTYpLHI9amUoUmUocWUoZSxEU3QpKSkscz1qZShSZShxZShlLElTdCkpKSx1KHFlKGUsbGZ0KSwzMTEpLmcpe2Nhc2UgMDpkPSh2PW5ldyBCdSgoIWUuYSYmKGUuYT1uZXcgZmUocnMsZSwxMCwxMSkpLGUuYSkpLHduKCksWnModixuZXcgb3p0KHMpKSx2KSxrPVE0dChlKSxDPXllKHFlKGUsTVN0KSksKEM9PW51bGx8fChPbihDKSxDPD0wKSkmJihDPTEuMyksTT1RNW4oZCxvLGgsay5hLGsuYixyLChPbihDKSxDKSksd3YoZSxNLmEsTS5iLCExLCEwKTticmVhaztkZWZhdWx0OlczbihlLG8saCxyKX1vcihuKX0sRihFYywiQm94TGF5b3V0UHJvdmlkZXIiLDk3MiksRCg5NzMsMSxPaSxvenQpLGwudWU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcHduKHRoaXMsdShlLDMzKSx1KG4sMzMpKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LGwudmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMpfSxsLmE9ITEsRihFYywiQm94TGF5b3V0UHJvdmlkZXIvMSIsOTczKSxEKDE1NywxLHsxNTc6MX0scnosTFd0KSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYz9YNXQodGhpcy5jKTplYih0aGlzLmIpfSxGKEVjLCJCb3hMYXlvdXRQcm92aWRlci9Hcm91cCIsMTU3KSxEKDMxMSwyMix7MzoxLDM1OjEsMjI6MSwzMTE6MX0sY2opO3ZhciBCQXQsUkF0LGpBdCxMZnQsJEF0PWpyKEVjLCJCb3hMYXlvdXRQcm92aWRlci9QYWNraW5nTW9kZSIsMzExLEhyLEhzbixZdG4pLGo0ZTtEKDk3NCwxLE9pLEtaKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZybih1KGUsMTU3KSx1KG4sMTU3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihFYywiQm94TGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZSIsOTc0KSxEKDk3NSwxLE9pLHNCKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGhybih1KGUsMTU3KSx1KG4sMTU3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihFYywiQm94TGF5b3V0UHJvdmlkZXIvbGFtYmRhJDEkVHlwZSIsOTc1KSxEKDk3NiwxLE9pLFhaKSxsLnVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGZybih1KGUsMTU3KSx1KG4sMTU3KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLnZlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzKX0sRihFYywiQm94TGF5b3V0UHJvdmlkZXIvbGFtYmRhJDIkVHlwZSIsOTc2KSxEKDEzNjUsMSx7ODMxOjF9LFFaKSxsLnFnPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEhSKCksIV90KG4sMTYwKXx8akh0KChpNigpLHUoZSwxNjApKSxuKX0sRihFYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDAkVHlwZSIsMTM2NSksRCgxMzY2LDEsVW4sY3p0KSxsLnRkPWZ1bmN0aW9uKGUpe25sbih0aGlzLmEsdShlLDE0NikpfSxGKEVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMSRUeXBlIiwxMzY2KSxEKDEzNjcsMSxVbixXWiksbC50ZD1mdW5jdGlvbihlKXt1KGUsOTQpLEhSKCl9LEYoRWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQyJFR5cGUiLDEzNjcpLEQoMTM3MSwxLFVuLHV6dCksbC50ZD1mdW5jdGlvbihlKXtTY24odGhpcy5hLHUoZSw5NCkpfSxGKEVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMyRUeXBlIiwxMzcxKSxEKDEzNjksMSxsaSxDR3QpLGwuTWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHF1bih0aGlzLmEsdGhpcy5iLHUoZSwxNDYpKX0sRihFYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDQkVHlwZSIsMTM2OSksRCgxMzY4LDEsbGksX0d0KSxsLk1iPWZ1bmN0aW9uKGUpe3JldHVybiBzWmUodGhpcy5hLHRoaXMuYix1KGUsODMxKSl9LEYoRWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQ1JFR5cGUiLDEzNjgpLEQoMTM3MCwxLFVuLFNHdCksbC50ZD1mdW5jdGlvbihlKXtzbm4odGhpcy5hLHRoaXMuYix1KGUsMTQ2KSl9LEYoRWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQ2JFR5cGUiLDEzNzApLEQoOTM1LDEse30sR1opLGwuS2I9ZnVuY3Rpb24oZSl7cmV0dXJuIFNVdChlKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV9LEYoRWMsIkVsa1V0aWwvbGFtYmRhJDAkVHlwZSIsOTM1KSxEKDkzNiwxLFVuLEFHdCksbC50ZD1mdW5jdGlvbihlKXt3Ym4odGhpcy5hLHRoaXMuYix1KGUsNzkpKX0sbC5hPTAsbC5iPTAsRihFYywiRWxrVXRpbC9sYW1iZGEkMSRUeXBlIiw5MzYpLEQoOTM3LDEsVW4sTEd0KSxsLnRkPWZ1bmN0aW9uKGUpe3dLZSh0aGlzLmEsdGhpcy5iLHUoZSwyMDIpKX0sbC5hPTAsbC5iPTAsRihFYywiRWxrVXRpbC9sYW1iZGEkMiRUeXBlIiw5MzcpLEQoOTM4LDEsVW4sTUd0KSxsLnRkPWZ1bmN0aW9uKGUpe2NRZSh0aGlzLmEsdGhpcy5iLHUoZSwxMzcpKX0sbC5hPTAsbC5iPTAsRihFYywiRWxrVXRpbC9sYW1iZGEkMyRUeXBlIiw5MzgpLEQoOTM5LDEsVW4sbHp0KSxsLnRkPWZ1bmN0aW9uKGUpe3hlbih0aGlzLmEsdShlLDQ2OSkpfSxGKEVjLCJFbGtVdGlsL2xhbWJkYSQ0JFR5cGUiLDkzOSksRCgzNDIsMSx7MzU6MSwzNDI6MX0sV1llKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBOUWUodGhpcyx1KGUsMjM2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIF90KGUsMzQyKT8obj11KGUsMzQyKSx0aGlzLmE9PW4uYSk6ITF9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gcHModGhpcy5hKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmErIiAoZXhjbHVzaXZlKSJ9LGwuYT0wLEYoRWMsIkV4Y2x1c2l2ZUJvdW5kcy9FeGNsdXNpdmVMb3dlckJvdW5kIiwzNDIpLEQoMTEzOCwyMDksUzIsVVopLGwuWmU9ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndCxNdCxTdCxSdCxLdCx1ZSxfZSxXZSxRZTtmb3IodnIobiwiRml4ZWQgTGF5b3V0IiwxKSxoPXUocWUoZSwodWkoKSx6U3QpKSwyMTgpLGo9MCxIPTAsU3Q9bmV3IG5yKCghZS5hJiYoZS5hPW5ldyBmZShycyxlLDEwLDExKSksZS5hKSk7U3QuZSE9U3QuaS5nYygpOyl7Zm9yKGd0PXUoZHIoU3QpLDMzKSxRZT11KHFlKGd0LChTeigpLFFTKSksOCksUWUmJih4MShndCxRZS5hLFFlLmIpLHUocWUoZ3QsU0F0KSwxNzQpLkhjKChBbCgpLEp5KSkmJihHPXUocWUoZ3QsTEF0KSw4KSxHLmE+MCYmRy5iPjAmJnd2KGd0LEcuYSxHLmIsITAsITApKSksaj1iLk1hdGgubWF4KGosZ3QuaStndC5nKSxIPWIuTWF0aC5tYXgoSCxndC5qK2d0LmYpLEM9bmV3IG5yKCghZ3QubiYmKGd0Lm49bmV3IGZlKHFvLGd0LDEsNykpLGd0Lm4pKTtDLmUhPUMuaS5nYygpOyl2PXUoZHIoQyksMTM3KSxRZT11KHFlKHYsUVMpLDgpLFFlJiZ4MSh2LFFlLmEsUWUuYiksaj1iLk1hdGgubWF4KGosZ3QuaSt2Lmkrdi5nKSxIPWIuTWF0aC5tYXgoSCxndC5qK3Yuait2LmYpO2Zvcih1ZT1uZXcgbnIoKCFndC5jJiYoZ3QuYz1uZXcgZmUoZ2wsZ3QsOSw5KSksZ3QuYykpO3VlLmUhPXVlLmkuZ2MoKTspZm9yKEt0PXUoZHIodWUpLDExOCksUWU9dShxZShLdCxRUyksOCksUWUmJngxKEt0LFFlLmEsUWUuYiksX2U9Z3QuaStLdC5pLFdlPWd0LmorS3QuaixqPWIuTWF0aC5tYXgoaixfZStLdC5nKSxIPWIuTWF0aC5tYXgoSCxXZStLdC5mKSxrPW5ldyBucigoIUt0Lm4mJihLdC5uPW5ldyBmZShxbyxLdCwxLDcpKSxLdC5uKSk7ay5lIT1rLmkuZ2MoKTspdj11KGRyKGspLDEzNyksUWU9dShxZSh2LFFTKSw4KSxRZSYmeDEodixRZS5hLFFlLmIpLGo9Yi5NYXRoLm1heChqLF9lK3YuaSt2LmcpLEg9Yi5NYXRoLm1heChILFdlK3Yuait2LmYpO2ZvcihvPW5ldyBhcihscihLMChndCkuYS5LYygpLG5ldyB6KSk7enIobyk7KXI9dShNcihvKSw3OSksTT0kaGUociksaj1iLk1hdGgubWF4KGosTS5hKSxIPWIuTWF0aC5tYXgoSCxNLmIpO2ZvcihzPW5ldyBhcihscih3SShndCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShNcihzKSw3OSksZXMoZTAocikpIT1lJiYoTT0kaGUociksaj1iLk1hdGgubWF4KGosTS5hKSxIPWIuTWF0aC5tYXgoSCxNLmIpKX1pZihoPT0oVzAoKSxONykpZm9yKE10PW5ldyBucigoIWUuYSYmKGUuYT1uZXcgZmUocnMsZSwxMCwxMSkpLGUuYSkpO010LmUhPU10LmkuZ2MoKTspZm9yKGd0PXUoZHIoTXQpLDMzKSxzPW5ldyBhcihscihLMChndCkuYS5LYygpLG5ldyB6KSk7enIocyk7KXI9dShNcihzKSw3OSksZD1neW4ociksZC5iPT0wP3dvKHIsYTUsbnVsbCk6d28ocixhNSxkKTtqZShSZShxZShlLChTeigpLEFBdCkpKSl8fChSdD11KHFlKGUsVDRlKSwxMTYpLHR0PWorUnQuYitSdC5jLEs9SCtSdC5kK1J0LmEsd3YoZSx0dCxLLCEwLCEwKSksb3Iobil9LEYoRWMsIkZpeGVkTGF5b3V0UHJvdmlkZXIiLDExMzgpLEQoMzczLDEzNCx7MzoxLDQxNDoxLDM3MzoxLDk0OjEsMTM0OjF9LFl1LHJlZSksbC5KZj1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7aWYoZSl0cnl7Zm9yKGs9dnkoZSwiOyw7IiksaD1rLGQ9MCx2PWgubGVuZ3RoO2Q8djsrK2Qpe2lmKG89aFtkXSxyPXZ5KG8sIlxcOiIpLHM9RXh0KEs4KCksclswXSksIXMpdGhyb3cgaXQobmV3IEZuKCJJbnZhbGlkIG9wdGlvbiBpZDogIityWzBdKSk7aWYoQz14eHQocyxyWzFdKSxDPT1udWxsKXRocm93IGl0KG5ldyBGbigiSW52YWxpZCBvcHRpb24gdmFsdWU6ICIrclsxXSkpO0M9PW51bGw/KCF0aGlzLnEmJih0aGlzLnE9bmV3IF9yKSxKeCh0aGlzLnEscykpOighdGhpcy5xJiYodGhpcy5xPW5ldyBfciksa2kodGhpcy5xLHMsQykpfX1jYXRjaChNKXt0aHJvdyBNPVdpKE0pLF90KE0sMTAyKT8obj1NLGl0KG5ldyBGcmUobikpKTppdChNKX19LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1CcihCbCh3dSgodGhpcy5xP3RoaXMucTood24oKSx3bigpLHUwKSkudmMoKS5PYygpLG5ldyBJdSksWm0obmV3IFVZdCxuZXcgd3MsbmV3IE1lLG5ldyBkZSxsdChjdChmbCwxKSxvZSwxMzIsMCxbXSkpKSksZX07dmFyICQ0ZT1GKEVjLCJJbmRpdmlkdWFsU3BhY2luZ3MiLDM3Myk7RCg5NzEsMSx7fSxJdSksbC5LYj1mdW5jdGlvbihlKXtyZXR1cm4gbXJuKHUoZSw0MikpfSxGKEVjLCJJbmRpdmlkdWFsU3BhY2luZ3MvbGFtYmRhJDAkVHlwZSIsOTcxKSxEKDcwOSwxLHt9LFRLdCksbC5jPTAsRihFYywiSW5zdGFuY2VQb29sIiw3MDkpLEQoMTI3NSwxLHt9LEpaKSxGKEVjLCJMb2dnZWRHcmFwaCIsMTI3NSksRCgzOTYsMjIsezM6MSwzNToxLDIyOjEsMzk2OjF9LHVqKTt2YXIgekF0LFFsLHFBdCxIQXQsejRlPWpyKEVjLCJMb2dnZWRHcmFwaC9UeXBlIiwzOTYsSHIsVnNuLEt0bikscTRlO0QoNDYsMSx7MjA6MSw0NjoxfSxmYSksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztyZXR1cm4gX3QoZSw0Nik/KHI9dShlLDQ2KSxuPXRoaXMuYT09bnVsbD9yLmE9PW51bGw6eWkodGhpcy5hLHIuYSkscz10aGlzLmI9PW51bGw/ci5iPT1udWxsOnlpKHRoaXMuYixyLmIpLG4mJnMpOiExfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoO3JldHVybiByPXRoaXMuYT09bnVsbD8wOkhpKHRoaXMuYSksZT1yJnlzLG49ciYtNjU1MzYsaD10aGlzLmI9PW51bGw/MDpIaSh0aGlzLmIpLHM9aCZ5cyxvPWgmLTY1NTM2LGVebz4+MTYmeXN8bl5zPDwxNn0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgaHp0KHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT09bnVsbCYmdGhpcy5iPT1udWxsPyJwYWlyKG51bGwsbnVsbCkiOnRoaXMuYT09bnVsbD8icGFpcihudWxsLCIrJG8odGhpcy5iKSsiKSI6dGhpcy5iPT1udWxsPyJwYWlyKCIrJG8odGhpcy5hKSsiLG51bGwpIjoicGFpcigiKyRvKHRoaXMuYSkrIiwiKyRvKHRoaXMuYikrIikifSxGKEVjLCJQYWlyIiw0NiksRCg5ODMsMSxzYSxoenQpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiF0aGlzLmMmJighdGhpcy5iJiZ0aGlzLmEuYSE9bnVsbHx8dGhpcy5hLmIhPW51bGwpfSxsLlBiPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYyYmIXRoaXMuYiYmdGhpcy5hLmEhPW51bGwpcmV0dXJuIHRoaXMuYj0hMCx0aGlzLmEuYTtpZighdGhpcy5jJiZ0aGlzLmEuYiE9bnVsbClyZXR1cm4gdGhpcy5jPSEwLHRoaXMuYS5iO3Rocm93IGl0KG5ldyBsYyl9LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyB0aGlzLmMmJnRoaXMuYS5iIT1udWxsP3RoaXMuYS5iPW51bGw6dGhpcy5iJiZ0aGlzLmEuYSE9bnVsbCYmKHRoaXMuYS5hPW51bGwpLGl0KG5ldyBPdSl9LGwuYj0hMSxsLmM9ITEsRihFYywiUGFpci8xIiw5ODMpLEQoNDQ4LDEsezQ0ODoxfSx6WHQpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIEZjKHRoaXMuYSx1KGUsNDQ4KS5hKSYmRmModGhpcy5jLHUoZSw0NDgpLmMpJiZGYyh0aGlzLmQsdShlLDQ0OCkuZCkmJkZjKHRoaXMuYix1KGUsNDQ4KS5iKX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBBeihsdChjdChRbiwxKSxEZSwxLDUsW3RoaXMuYSx0aGlzLmMsdGhpcy5kLHRoaXMuYl0pKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiIoIit0aGlzLmErWWErdGhpcy5jK1lhK3RoaXMuZCtZYSt0aGlzLmIrIikifSxGKEVjLCJRdWFkcnVwbGUiLDQ0OCksRCgxMTI2LDIwOSxTMix0SiksbC5aZT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoLGQ7aWYodnIobiwiUmFuZG9tIExheW91dCIsMSksKCFlLmEmJihlLmE9bmV3IGZlKHJzLGUsMTAsMTEpKSxlLmEpLmk9PTApe29yKG4pO3JldHVybn1oPXUocWUoZSwoUzN0KCksRjRlKSksMTkpLGgmJmguYSE9MD9vPW5ldyBGJChoLmEpOm89bmV3IFppdCxyPXBNKHllKHFlKGUsTzRlKSkpLGQ9cE0oeWUocWUoZSxONGUpKSkscz11KHFlKGUsUDRlKSwxMTYpLEE1bihlLG8scixkLHMpLG9yKG4pfSxGKEVjLCJSYW5kb21MYXlvdXRQcm92aWRlciIsMTEyNik7dmFyIEg0ZTtEKDU1MywxLHt9KSxsLnFmPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyAkZSh0aGlzLmYuaSx0aGlzLmYuail9LGwuV2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGRRdChlLCh1aSgpLGRsKSk/cWUodGhpcy5mLFY0ZSk6cWUodGhpcy5mLGUpfSxsLnJmPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyAkZSh0aGlzLmYuZyx0aGlzLmYuZil9LGwuc2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nfSxsLlhlPWZ1bmN0aW9uKGUpe3JldHVybiBvMih0aGlzLmYsZSl9LGwudGY9ZnVuY3Rpb24oZSl7a3UodGhpcy5mLGUuYSksRXUodGhpcy5mLGUuYil9LGwudWY9ZnVuY3Rpb24oZSl7dHYodGhpcy5mLGUuYSksSncodGhpcy5mLGUuYil9LGwudmY9ZnVuY3Rpb24oZSl7dGhpcy5nPWV9LGwuZz0wO3ZhciBWNGU7RihLXywiRWxrR3JhcGhBZGFwdGVycy9BYnN0cmFjdEVsa0dyYXBoRWxlbWVudEFkYXB0ZXIiLDU1MyksRCg1NTQsMSx7ODM5OjF9LHdSKSxsLndmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5iKWZvcih0aGlzLmI9RCQodSQodGhpcy5hKS5pKSxuPW5ldyBucih1JCh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksMTM3KSxsZSh0aGlzLmIsbmV3IGdldChlKSk7cmV0dXJuIHRoaXMuYn0sbC5iPW51bGwsRihLXywiRWxrR3JhcGhBZGFwdGVycy9FbGtFZGdlQWRhcHRlciIsNTU0KSxEKDMwMSw1NTMse30sTW0pLGwueGY9ZnVuY3Rpb24oKXtyZXR1cm4genNlKHRoaXMpfSxsLmE9bnVsbCxGKEtfLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa0dyYXBoQWRhcHRlciIsMzAxKSxEKDYzMCw1NTMsezE4MToxfSxnZXQpLEYoS18sIkVsa0dyYXBoQWRhcHRlcnMvRWxrTGFiZWxBZGFwdGVyIiw2MzApLEQoNjI5LDU1Myx7NjgwOjF9LGdudCksbC53Zj1mdW5jdGlvbigpe3JldHVybiBNMW4odGhpcyl9LGwuQWY9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KHFlKHRoaXMuZiwodWkoKSxKTykpLDE0MiksIWUmJihlPW5ldyBPQyksZX0sbC5DZj1mdW5jdGlvbigpe3JldHVybiBEMW4odGhpcyl9LGwuRWY9ZnVuY3Rpb24oZSl7dmFyIG47bj1uZXcgTG50KGUpLHdvKHRoaXMuZiwodWkoKSxKTyksbil9LGwuRmY9ZnVuY3Rpb24oZSl7d28odGhpcy5mLCh1aSgpLFUyKSxuZXcga3d0KGUpKX0sbC55Zj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuemY9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKCF0aGlzLmEpZm9yKHRoaXMuYT1uZXcgaGUsbj1uZXcgYXIobHIod0kodSh0aGlzLmYsMzMpKS5hLktjKCksbmV3IHopKTt6cihuKTspZT11KE1yKG4pLDc5KSxsZSh0aGlzLmEsbmV3IHdSKGUpKTtyZXR1cm4gdGhpcy5hfSxsLkJmPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZighdGhpcy5jKWZvcih0aGlzLmM9bmV3IGhlLG49bmV3IGFyKGxyKEswKHUodGhpcy5mLDMzKSkuYS5LYygpLG5ldyB6KSk7enIobik7KWU9dShNcihuKSw3OSksbGUodGhpcy5jLG5ldyB3UihlKSk7cmV0dXJuIHRoaXMuY30sbC5EZj1mdW5jdGlvbigpe3JldHVybiBwJCh1KHRoaXMuZiwzMykpLmkhPTB8fGplKFJlKHUodGhpcy5mLDMzKS5XZSgodWkoKSxaTykpKSl9LGwuR2Y9ZnVuY3Rpb24oKXt4b24odGhpcywoUG0oKSxINGUpKX0sbC5hPW51bGwsbC5iPW51bGwsbC5jPW51bGwsbC5kPW51bGwsbC5lPW51bGwsRihLXywiRWxrR3JhcGhBZGFwdGVycy9FbGtOb2RlQWRhcHRlciIsNjI5KSxEKDEyNjYsNTUzLHs4Mzg6MX0sJHp0KSxsLndmPWZ1bmN0aW9uKCl7cmV0dXJuIGoxbih0aGlzKX0sbC56Zj1mdW5jdGlvbigpe3ZhciBlLG47aWYoIXRoaXMuYSlmb3IodGhpcy5hPVVkKHUodGhpcy5mLDExOCkueGcoKS5pKSxuPW5ldyBucih1KHRoaXMuZiwxMTgpLnhnKCkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw3OSksbGUodGhpcy5hLG5ldyB3UihlKSk7cmV0dXJuIHRoaXMuYX0sbC5CZj1mdW5jdGlvbigpe3ZhciBlLG47aWYoIXRoaXMuYylmb3IodGhpcy5jPVVkKHUodGhpcy5mLDExOCkueWcoKS5pKSxuPW5ldyBucih1KHRoaXMuZiwxMTgpLnlnKCkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw3OSksbGUodGhpcy5jLG5ldyB3UihlKSk7cmV0dXJuIHRoaXMuY30sbC5IZj1mdW5jdGlvbigpe3JldHVybiB1KHUodGhpcy5mLDExOCkuV2UoKHVpKCksdTUpKSw2MSl9LGwuSWY9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGgsZCx2O2ZvcihzPVQxKHUodGhpcy5mLDExOCkpLHI9bmV3IG5yKHUodGhpcy5mLDExOCkueWcoKSk7ci5lIT1yLmkuZ2MoKTspZm9yKGU9dShkcihyKSw3OSksdj1uZXcgbnIoKCFlLmMmJihlLmM9bmV3IENuKGJyLGUsNSw4KSksZS5jKSk7di5lIT12LmkuZ2MoKTspe2lmKGQ9dShkcih2KSw4MiksZXkoRG8oZCkscykpcmV0dXJuITA7aWYoRG8oZCk9PXMmJmplKFJlKHFlKGUsKHVpKCksYmZ0KSkpKSlyZXR1cm4hMH1mb3Iobj1uZXcgbnIodSh0aGlzLmYsMTE4KS54ZygpKTtuLmUhPW4uaS5nYygpOylmb3IoZT11KGRyKG4pLDc5KSxoPW5ldyBucigoIWUuYiYmKGUuYj1uZXcgQ24oYnIsZSw0LDcpKSxlLmIpKTtoLmUhPWguaS5nYygpOylpZihvPXUoZHIoaCksODIpLGV5KERvKG8pLHMpKXJldHVybiEwO3JldHVybiExfSxsLmE9bnVsbCxsLmI9bnVsbCxsLmM9bnVsbCxGKEtfLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa1BvcnRBZGFwdGVyIiwxMjY2KSxEKDEyNjcsMSxPaSxlSiksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBvbW4odShlLDExOCksdShuLDExOCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYoS18sIkVsa0dyYXBoQWRhcHRlcnMvUG9ydENvbXBhcmF0b3IiLDEyNjcpO3ZhciBfYj1LaShwaCwiRU9iamVjdCIpLGo3PUtpKEY0LEFkZSksR2g9S2koRjQsTGRlKSxsUD1LaShGNCxNZGUpLGhQPUtpKEY0LCJFbGtTaGFwZSIpLGJyPUtpKEY0LERkZSksWXM9S2koRjQsdzh0KSxKaT1LaShGNCxJZGUpLGZQPUtpKHBoLE9kZSksc0E9S2kocGgsIkVGYWN0b3J5IiksRzRlLE1mdD1LaShwaCxQZGUpLGkxPUtpKHBoLCJFUGFja2FnZSIpLG5hLFU0ZSxXNGUsVkF0LGFVLFk0ZSxHQXQsVUF0LFdBdCxTYixLNGUsWDRlLHFvPUtpKEY0LHY4dCkscnM9S2koRjQsbTh0KSxnbD1LaShGNCx5OHQpO0QoOTAsMSxGZGUpLGwuSmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5LZygpLG51bGx9LGwuS2c9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5MZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLktnKCksITF9LGwuTWc9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5OZz1mdW5jdGlvbihlKXttaSh0aGlzLGUpfSxGKEw2LCJCYXNpY05vdGlmaWVySW1wbCIsOTApLEQoOTcsOTAsamRlKSxsLm5oPWZ1bmN0aW9uKCl7cmV0dXJuIHhsKHRoaXMpfSxsLk9nPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGV9LGwuUGc9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLlFnPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPW5vKHUoeW4odGhpcy5UZygpLHRoaXMuVmcoKSksMTgpKSx0aGlzLmVoKCkuaWgodGhpcyxuLm4sbi5mLGUpfSxsLlJnPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5TZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIEhsKHRoaXMsZSxuLHIpfSxsLlRnPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuUGcoKSYmKGU9dGhpcy5QZygpLmNrKCksZSk/ZTp0aGlzLnpoKCl9LGwuVWc9ZnVuY3Rpb24oKXtyZXR1cm4gZWF0KHRoaXMpfSxsLlZnPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE9yKX0sbC5XZz1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIG49dGhpcy5waCgpLmRrKCksIW4mJnRoaXMuUGcoKS5payhuPShZQygpLGU9anZ0KHZkKHRoaXMuVGcoKSkpLGU9PW51bGw/UmZ0Om5ldyBqTSh0aGlzLGUpKSksbn0sbC5YZz1mdW5jdGlvbihlLG4pe3JldHVybiBlfSxsLllnPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPWUuR2ooKSxuP2UuYWooKTpHaSh0aGlzLlRnKCksZSl9LGwuWmc9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLlBnKCksZT9lLmZrKCk6bnVsbH0sbC4kZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlBnKCk/dGhpcy5QZygpLmNrKCk6bnVsbH0sbC5fZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIFh6KHRoaXMsZSxuLHIpfSxsLmFoPWZ1bmN0aW9uKGUpe3JldHVybiBqOCh0aGlzLGUpfSxsLmJoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFVydCh0aGlzLGUsbil9LGwuZGg9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLlBnKCksISFlJiZlLmdrKCl9LGwuZWg9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLmZoPWZ1bmN0aW9uKCl7cmV0dXJuIEh6KHRoaXMpfSxsLmdoPWZ1bmN0aW9uKGUsbixyLHMpe3JldHVybiBjNih0aGlzLGUsbixzKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9dSh5bih0aGlzLlRnKCksbiksNjYpLHMuTmooKS5Raih0aGlzLHRoaXMueWgoKSxuLXRoaXMuQWgoKSxlLHIpfSxsLmloPWZ1bmN0aW9uKGUsbixyLHMpe3JldHVybiBtJCh0aGlzLGUsbixzKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9dSh5bih0aGlzLlRnKCksbiksNjYpLHMuTmooKS5Saih0aGlzLHRoaXMueWgoKSxuLXRoaXMuQWgoKSxlLHIpfSxsLmtoPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLlBnKCkmJiEhdGhpcy5QZygpLmVrKCl9LGwubGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGZzdCh0aGlzLGUpfSxsLm1oPWZ1bmN0aW9uKGUpe3JldHVybiBNUXQodGhpcyxlKX0sbC5vaD1mdW5jdGlvbihlKXtyZXR1cm4gZWhlKHRoaXMsZSl9LGwucGg9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLnFoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUGcoKT90aGlzLlBnKCkuZWsoKTpudWxsfSxsLnJoPWZ1bmN0aW9uKCl7cmV0dXJuIEh6KHRoaXMpfSxsLnNoPWZ1bmN0aW9uKGUsbil7WHN0KHRoaXMsZSxuKX0sbC50aD1mdW5jdGlvbihlKXt0aGlzLnBoKCkuaGsoZSl9LGwudWg9ZnVuY3Rpb24oZSl7dGhpcy5waCgpLmtrKGUpfSxsLnZoPWZ1bmN0aW9uKGUpe3RoaXMucGgoKS5qayhlKX0sbC53aD1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoO3JldHVybiBoPXRoaXMuWmcoKSxoJiZlJiYobj1CYShoLlZrKCksdGhpcyxuKSxoLlprKHRoaXMpKSxzPXRoaXMuZWgoKSxzJiYod2F0KHRoaXMsdGhpcy5laCgpLHRoaXMuVmcoKSkuQmImS2E/KG89cy5maCgpLG8mJihlPyFoJiZvLlprKHRoaXMpOm8uWWsodGhpcykpKToobj0ocj10aGlzLlZnKCkscj49MD90aGlzLlFnKG4pOnRoaXMuZWgoKS5paCh0aGlzLC0xLXIsbnVsbCxuKSksbj10aGlzLlNnKG51bGwsLTEsbikpKSx0aGlzLnVoKGUpLG59LGwueGg9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHYsaztpZihyPXRoaXMuVGcoKSxoPUdpKHIsZSksbj10aGlzLkFoKCksaD49bilyZXR1cm4gdShlLDY2KS5OaigpLlVqKHRoaXMsdGhpcy55aCgpLGgtbik7aWYoaDw9LTEpaWYoZD1DNCgoJHUoKSx5YSkscixlKSxkKXtpZih0bygpLHUoZCw2NikuT2ooKXx8KGQ9S3goVG8oeWEsZCkpKSxvPShzPXRoaXMuWWcoZCksdShzPj0wP3RoaXMuX2cocywhMCwhMCk6ZHYodGhpcyxkLCEwKSwxNTMpKSxrPWQuWmooKSxrPjF8fGs9PS0xKXJldHVybiB1KHUobywyMTUpLmhsKGUsITEpLDc2KX1lbHNlIHRocm93IGl0KG5ldyBGbihsYitlLm5lKCkrV2N0KSk7ZWxzZSBpZihlLiRqKCkpcmV0dXJuIHM9dGhpcy5ZZyhlKSx1KHM+PTA/dGhpcy5fZyhzLCExLCEwKTpkdih0aGlzLGUsITEpLDc2KTtyZXR1cm4gdj1uZXcgWEd0KHRoaXMsZSksdn0sbC55aD1mdW5jdGlvbigpe3JldHVybiAkbXQodGhpcyl9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4oSHAoKSxMbikuU30sbC5BaD1mdW5jdGlvbigpe3JldHVybiBKbih0aGlzLnpoKCkpfSxsLkJoPWZ1bmN0aW9uKGUpe0dzdCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIG1mKHRoaXMpfSxGKE1uLCJCYXNpY0VPYmplY3RJbXBsIiw5Nyk7dmFyIFE0ZTtEKDExNCw5Nyx7MTA1OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxfSksbC5DaD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj16bXQodGhpcyksbltlXX0sbC5EaD1mdW5jdGlvbihlLG4pe3ZhciByO3I9em10KHRoaXMpLHRzKHIsZSxuKX0sbC5FaD1mdW5jdGlvbihlKXt2YXIgbjtuPXptdCh0aGlzKSx0cyhuLGUsbnVsbCl9LGwuSmc9ZnVuY3Rpb24oKXtyZXR1cm4gdShEbih0aGlzLDQpLDEyNil9LGwuS2c9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLkxnPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuRGImNCkhPTB9LGwuUGc9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLkZoPWZ1bmN0aW9uKGUpe282KHRoaXMsMixlKX0sbC5SZz1mdW5jdGlvbihlLG4pe3RoaXMuRGI9bjw8MTZ8dGhpcy5EYiYyNTUsdGhpcy5GaChlKX0sbC5UZz1mdW5jdGlvbigpe3JldHVybiB2dSh0aGlzKX0sbC5WZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkRiPj4xNn0sbC5XZz1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIFlDKCksbj1qdnQodmQoKGU9dShEbih0aGlzLDE2KSwyNiksZXx8dGhpcy56aCgpKSkpLG49PW51bGw/UmZ0Om5ldyBqTSh0aGlzLG4pfSxsLk1nPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuRGImMSk9PTB9LGwuWmc9ZnVuY3Rpb24oKXtyZXR1cm4gdShEbih0aGlzLDEyOCksMTkzNSl9LGwuJGc9ZnVuY3Rpb24oKXtyZXR1cm4gdShEbih0aGlzLDE2KSwyNil9LGwuZGg9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5EYiYzMikhPTB9LGwuZWg9ZnVuY3Rpb24oKXtyZXR1cm4gdShEbih0aGlzLDIpLDQ5KX0sbC5raD1mdW5jdGlvbigpe3JldHVybih0aGlzLkRiJjY0KSE9MH0sbC5waD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwucWg9ZnVuY3Rpb24oKXtyZXR1cm4gdShEbih0aGlzLDY0KSwyODEpfSxsLnRoPWZ1bmN0aW9uKGUpe282KHRoaXMsMTYsZSl9LGwudWg9ZnVuY3Rpb24oZSl7bzYodGhpcywxMjgsZSl9LGwudmg9ZnVuY3Rpb24oZSl7bzYodGhpcyw2NCxlKX0sbC55aD1mdW5jdGlvbigpe3JldHVybiBzdSh0aGlzKX0sbC5EYj0wLEYoTW4sIk1pbmltYWxFT2JqZWN0SW1wbCIsMTE0KSxEKDExNSwxMTQsezEwNToxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0pLGwuRmg9ZnVuY3Rpb24oZSl7dGhpcy5DYj1lfSxsLmVoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2J9LEYoTW4sIk1pbmltYWxFT2JqZWN0SW1wbC9Db250YWluZXIiLDExNSksRCgxOTg1LDExNSx7MTA1OjEsNDEzOjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gWjN0KHRoaXMsZSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gJDR0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3JldHVybiBRdnQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe0J5dCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gSmMoKSxYNGV9LGwuQmg9ZnVuY3Rpb24oZSl7X3l0KHRoaXMsZSl9LGwuVmU9ZnVuY3Rpb24oKXtyZXR1cm4gY3NlKHRoaXMpfSxsLldlPWZ1bmN0aW9uKGUpe3JldHVybiBxZSh0aGlzLGUpfSxsLlhlPWZ1bmN0aW9uKGUpe3JldHVybiBvMih0aGlzLGUpfSxsLlllPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHdvKHRoaXMsZSxuKX0sRihNMiwiRU1hcFByb3BlcnR5SG9sZGVySW1wbCIsMTk4NSksRCg1NjcsMTE1LHsxMDU6MSw0Njk6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LHhwKSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmE7Y2FzZSAxOnJldHVybiB0aGlzLmJ9cmV0dXJuIFh6KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuYiE9MH1yZXR1cm4gZnN0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAwOml6KHRoaXMsWHQoeWUobikpKTtyZXR1cm47Y2FzZSAxOnN6KHRoaXMsWHQoeWUobikpKTtyZXR1cm59WHN0KHRoaXMsZSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBKYygpLFU0ZX0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOml6KHRoaXMsMCk7cmV0dXJuO2Nhc2UgMTpzeih0aGlzLDApO3JldHVybn1Hc3QodGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLkRiJjY0P21mKHRoaXMpOihlPW5ldyBfaChtZih0aGlzKSksZS5hKz0iICh4OiAiLCQzKGUsdGhpcy5hKSxlLmErPSIsIHk6ICIsJDMoZSx0aGlzLmIpLGUuYSs9IikiLGUuYSl9LGwuYT0wLGwuYj0wLEYoTTIsIkVsa0JlbmRQb2ludEltcGwiLDU2NyksRCg3MjMsMTk4NSx7MTA1OjEsNDEzOjEsMTYwOjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gbjN0KHRoaXMsZSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4ganN0KHRoaXMsZSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gRWl0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3JldHVybiB2eXQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3c0dCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gSmMoKSxZNGV9LGwuQmg9ZnVuY3Rpb24oZSl7Wnl0KHRoaXMsZSl9LGwuemc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rfSxsLkFnPWZ1bmN0aW9uKCl7cmV0dXJuIHUkKHRoaXMpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFhpdCh0aGlzKX0sbC5rPW51bGwsRihNMiwiRWxrR3JhcGhFbGVtZW50SW1wbCIsNzIzKSxEKDcyNCw3MjMsezEwNToxLDQxMzoxLDE2MDoxLDQ3MDoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSksbC5fZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIGYzdCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtyZXR1cm4gbTN0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2NHQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIEpjKCksSzRlfSxsLkJoPWZ1bmN0aW9uKGUpe1QzdCh0aGlzLGUpfSxsLkJnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC5DZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGwuRGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxsLkVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuan0sbC5GZz1mdW5jdGlvbihlLG4pe2JqKHRoaXMsZSxuKX0sbC5HZz1mdW5jdGlvbihlLG4pe3gxKHRoaXMsZSxuKX0sbC5IZz1mdW5jdGlvbihlKXtrdSh0aGlzLGUpfSxsLklnPWZ1bmN0aW9uKGUpe0V1KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVnN0KHRoaXMpfSxsLmY9MCxsLmc9MCxsLmk9MCxsLmo9MCxGKE0yLCJFbGtTaGFwZUltcGwiLDcyNCksRCg3MjUsNzI0LHsxMDU6MSw0MTM6MSw4MjoxLDE2MDoxLDQ3MDoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSksbC5fZz1mdW5jdGlvbihlLG4scil7cmV0dXJuIFUzdCh0aGlzLGUsbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7cmV0dXJuIGg0dCh0aGlzLGUsbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7cmV0dXJuIGY0dCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtyZXR1cm4gRnl0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt4NXQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIEpjKCksVzRlfSxsLkJoPWZ1bmN0aW9uKGUpe1IzdCh0aGlzLGUpfSxsLnhnPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgQ24oWXMsdGhpcyw4LDUpKSx0aGlzLmR9LGwueWc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5lJiYodGhpcy5lPW5ldyBDbihZcyx0aGlzLDcsNCkpLHRoaXMuZX0sRihNMiwiRWxrQ29ubmVjdGFibGVTaGFwZUltcGwiLDcyNSksRCgzNTIsNzIzLHsxMDU6MSw0MTM6MSw3OToxLDE2MDoxLDM1MjoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSxwdyksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gbzR0KHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuIGNEKHRoaXMpO2Nhc2UgNDpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLHRoaXMuYjtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSx0aGlzLmM7Y2FzZSA2OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGZlKEppLHRoaXMsNiw2KSksdGhpcy5hO2Nhc2UgNzpyZXR1cm4gTm4oKSwhdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLCEodGhpcy5iLmk8PTEmJighdGhpcy5jJiYodGhpcy5jPW5ldyBDbihicix0aGlzLDUsOCkpLHRoaXMuYy5pPD0xKSk7Y2FzZSA4OnJldHVybiBObigpLCEhd18odGhpcyk7Y2FzZSA5OnJldHVybiBObigpLCEhZnYodGhpcyk7Y2FzZSAxMDpyZXR1cm4gTm4oKSwhdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLHRoaXMuYi5pIT0wJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSx0aGlzLmMuaSE9MCl9cmV0dXJuIG4zdCh0aGlzLGUsbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKG4pe2Nhc2UgMzpyZXR1cm4gdGhpcy5DYiYmKHI9KHM9dGhpcy5EYj4+MTYscz49MD9vNHQodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtcyxudWxsLHIpKSksdHd0KHRoaXMsdShlLDMzKSxyKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSxaYyh0aGlzLmIsZSxyKTtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSxaYyh0aGlzLmMsZSxyKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgZmUoSmksdGhpcyw2LDYpKSxaYyh0aGlzLmEsZSxyKX1yZXR1cm4ganN0KHRoaXMsZSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2gobil7Y2FzZSAzOnJldHVybiB0d3QodGhpcyxudWxsLHIpO2Nhc2UgNDpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLEJhKHRoaXMuYixlLHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBDbihicix0aGlzLDUsOCkpLEJhKHRoaXMuYyxlLHIpO2Nhc2UgNjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBmZShKaSx0aGlzLDYsNikpLEJhKHRoaXMuYSxlLHIpfXJldHVybiBFaXQodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4hIWNEKHRoaXMpO2Nhc2UgNDpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmkhPTA7Y2FzZSA1OnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDY6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgNzpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLCEodGhpcy5iLmk8PTEmJighdGhpcy5jJiYodGhpcy5jPW5ldyBDbihicix0aGlzLDUsOCkpLHRoaXMuYy5pPD0xKSk7Y2FzZSA4OnJldHVybiB3Xyh0aGlzKTtjYXNlIDk6cmV0dXJuIGZ2KHRoaXMpO2Nhc2UgMTA6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSx0aGlzLmIuaSE9MCYmKCF0aGlzLmMmJih0aGlzLmM9bmV3IENuKGJyLHRoaXMsNSw4KSksdGhpcy5jLmkhPTApfXJldHVybiB2eXQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDM6b2F0KHRoaXMsdShuLDMzKSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5iJiYodGhpcy5iPW5ldyBDbihicix0aGlzLDQsNykpLHhyKHRoaXMuYiksIXRoaXMuYiYmKHRoaXMuYj1uZXcgQ24oYnIsdGhpcyw0LDcpKSxpcyh0aGlzLmIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5jJiYodGhpcy5jPW5ldyBDbihicix0aGlzLDUsOCkpLHhyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgQ24oYnIsdGhpcyw1LDgpKSxpcyh0aGlzLmMsdShuLDE0KSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBmZShKaSx0aGlzLDYsNikpLHhyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgZmUoSmksdGhpcyw2LDYpKSxpcyh0aGlzLmEsdShuLDE0KSk7cmV0dXJufXc0dCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gSmMoKSxWQXR9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMzpvYXQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA0OiF0aGlzLmImJih0aGlzLmI9bmV3IENuKGJyLHRoaXMsNCw3KSkseHIodGhpcy5iKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmMmJih0aGlzLmM9bmV3IENuKGJyLHRoaXMsNSw4KSkseHIodGhpcy5jKTtyZXR1cm47Y2FzZSA2OiF0aGlzLmEmJih0aGlzLmE9bmV3IGZlKEppLHRoaXMsNiw2KSkseHIodGhpcy5hKTtyZXR1cm59Wnl0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gJGxlKHRoaXMpfSxGKE0yLCJFbGtFZGdlSW1wbCIsMzUyKSxEKDQzOSwxOTg1LHsxMDU6MSw0MTM6MSwyMDI6MSw0Mzk6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sYWQpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIHI0dCh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAxOnJldHVybiB0aGlzLmo7Y2FzZSAyOnJldHVybiB0aGlzLms7Y2FzZSAzOnJldHVybiB0aGlzLmI7Y2FzZSA0OnJldHVybiB0aGlzLmM7Y2FzZSA1OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IEFzKEdoLHRoaXMsNSkpLHRoaXMuYTtjYXNlIDY6cmV0dXJuIFNRdCh0aGlzKTtjYXNlIDc6cmV0dXJuIG4/d3N0KHRoaXMpOnRoaXMuaTtjYXNlIDg6cmV0dXJuIG4/YnN0KHRoaXMpOnRoaXMuZjtjYXNlIDk6cmV0dXJuIXRoaXMuZyYmKHRoaXMuZz1uZXcgQ24oSmksdGhpcyw5LDEwKSksdGhpcy5nO2Nhc2UgMTA6cmV0dXJuIXRoaXMuZSYmKHRoaXMuZT1uZXcgQ24oSmksdGhpcywxMCw5KSksdGhpcy5lO2Nhc2UgMTE6cmV0dXJuIHRoaXMuZH1yZXR1cm4gWjN0KHRoaXMsZSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgNjpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD9yNHQodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtbyxudWxsLHIpKSksZXd0KHRoaXMsdShlLDc5KSxyKTtjYXNlIDk6cmV0dXJuIXRoaXMuZyYmKHRoaXMuZz1uZXcgQ24oSmksdGhpcyw5LDEwKSksWmModGhpcy5nLGUscik7Y2FzZSAxMDpyZXR1cm4hdGhpcy5lJiYodGhpcy5lPW5ldyBDbihKaSx0aGlzLDEwLDkpKSxaYyh0aGlzLmUsZSxyKX1yZXR1cm4gaD11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fChKYygpLGFVKSksbiksNjYpLGguTmooKS5Raih0aGlzLHN1KHRoaXMpLG4tSm4oKEpjKCksYVUpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2gobil7Y2FzZSA1OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IEFzKEdoLHRoaXMsNSkpLEJhKHRoaXMuYSxlLHIpO2Nhc2UgNjpyZXR1cm4gZXd0KHRoaXMsbnVsbCxyKTtjYXNlIDk6cmV0dXJuIXRoaXMuZyYmKHRoaXMuZz1uZXcgQ24oSmksdGhpcyw5LDEwKSksQmEodGhpcy5nLGUscik7Y2FzZSAxMDpyZXR1cm4hdGhpcy5lJiYodGhpcy5lPW5ldyBDbihKaSx0aGlzLDEwLDkpKSxCYSh0aGlzLmUsZSxyKX1yZXR1cm4gJDR0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuIHRoaXMuaiE9MDtjYXNlIDI6cmV0dXJuIHRoaXMuayE9MDtjYXNlIDM6cmV0dXJuIHRoaXMuYiE9MDtjYXNlIDQ6cmV0dXJuIHRoaXMuYyE9MDtjYXNlIDU6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgNjpyZXR1cm4hIVNRdCh0aGlzKTtjYXNlIDc6cmV0dXJuISF0aGlzLmk7Y2FzZSA4OnJldHVybiEhdGhpcy5mO2Nhc2UgOTpyZXR1cm4hIXRoaXMuZyYmdGhpcy5nLmkhPTA7Y2FzZSAxMDpyZXR1cm4hIXRoaXMuZSYmdGhpcy5lLmkhPTA7Y2FzZSAxMTpyZXR1cm4gdGhpcy5kIT1udWxsfXJldHVybiBRdnQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDE6RzgodGhpcyxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDI6VzgodGhpcyxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDM6VjgodGhpcyxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDQ6VTgodGhpcyxYdCh5ZShuKSkpO3JldHVybjtjYXNlIDU6IXRoaXMuYSYmKHRoaXMuYT1uZXcgQXMoR2gsdGhpcyw1KSkseHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBBcyhHaCx0aGlzLDUpKSxpcyh0aGlzLmEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgNjp6Y2UodGhpcyx1KG4sNzkpKTtyZXR1cm47Y2FzZSA3Omx6KHRoaXMsdShuLDgyKSk7cmV0dXJuO2Nhc2UgODp1eih0aGlzLHUobiw4MikpO3JldHVybjtjYXNlIDk6IXRoaXMuZyYmKHRoaXMuZz1uZXcgQ24oSmksdGhpcyw5LDEwKSkseHIodGhpcy5nKSwhdGhpcy5nJiYodGhpcy5nPW5ldyBDbihKaSx0aGlzLDksMTApKSxpcyh0aGlzLmcsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuZSYmKHRoaXMuZT1uZXcgQ24oSmksdGhpcywxMCw5KSkseHIodGhpcy5lKSwhdGhpcy5lJiYodGhpcy5lPW5ldyBDbihKaSx0aGlzLDEwLDkpKSxpcyh0aGlzLmUsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTE6dXl0KHRoaXMsQnIobikpO3JldHVybn1CeXQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIEpjKCksYVV9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMTpHOCh0aGlzLDApO3JldHVybjtjYXNlIDI6VzgodGhpcywwKTtyZXR1cm47Y2FzZSAzOlY4KHRoaXMsMCk7cmV0dXJuO2Nhc2UgNDpVOCh0aGlzLDApO3JldHVybjtjYXNlIDU6IXRoaXMuYSYmKHRoaXMuYT1uZXcgQXMoR2gsdGhpcyw1KSkseHIodGhpcy5hKTtyZXR1cm47Y2FzZSA2OnpjZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6bHoodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA4OnV6KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTohdGhpcy5nJiYodGhpcy5nPW5ldyBDbihKaSx0aGlzLDksMTApKSx4cih0aGlzLmcpO3JldHVybjtjYXNlIDEwOiF0aGlzLmUmJih0aGlzLmU9bmV3IENuKEppLHRoaXMsMTAsOSkpLHhyKHRoaXMuZSk7cmV0dXJuO2Nhc2UgMTE6dXl0KHRoaXMsbnVsbCk7cmV0dXJufV95dCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHNjZSh0aGlzKX0sbC5iPTAsbC5jPTAsbC5kPW51bGwsbC5qPTAsbC5rPTAsRihNMiwiRWxrRWRnZVNlY3Rpb25JbXBsIiw0MzkpLEQoMTUwLDExNSx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDExNDoxLDExNToxfSksbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIGU9PTA/KCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiKTp1aCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87cmV0dXJuIG49PTA/KCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxaYyh0aGlzLkFiLGUscikpOihvPXUoeW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxuKSw2Niksby5OaigpLlFqKHRoaXMsc3UodGhpcyksbi1Kbih0aGlzLnpoKCkpLGUscikpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3JldHVybiBuPT0wPyghdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpKToobz11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHN1KHRoaXMpLG4tSm4odGhpcy56aCgpKSxlLHIpKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gZT09MD8hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDpvaCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5vaD1mdW5jdGlvbihlKXtyZXR1cm4gTHh0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksaXModGhpcy5BYix1KG4sMTQpKTtyZXR1cm59Z2godGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKHI9dShEbih0aGlzLDE2KSwyNikscnx8dGhpcy56aCgpKSxlKSxuKX0sbC51aD1mdW5jdGlvbihlKXtvNih0aGlzLDEyOCxlKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLHA1ZX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm59ZmgodGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXt0aGlzLkJifD0xfSxsLkhoPWZ1bmN0aW9uKGUpe3JldHVybiBrXyh0aGlzLGUpfSxsLkJiPTAsRihNbiwiRU1vZGVsRWxlbWVudEltcGwiLDE1MCksRCg3MDQsMTUwLHsxMDU6MSw5MjoxLDkwOjEsNDcxOjEsMTQ3OjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTE0OjEsMTE1OjF9LEpCKSxsLkloPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGJoZSh0aGlzLGUsbil9LGwuSmg9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtpZih0aGlzLmEhPVJsKGUpfHxlLkJiJjI1Nil0aHJvdyBpdChuZXcgRm4oS2N0K2UuemIrQ3YpKTtmb3Iocz1BbyhlKTtMYyhzLmEpLmkhPTA7KXtpZihyPXUoQUkocywwLChuPXUoQXQoTGMocy5hKSwwKSw4NyksaD1uLmMsX3QoaCw4OCk/dShoLDI2KTooZG4oKSxLaCkpKSwyNiksaHYocikpcmV0dXJuIG89UmwocikuTmgoKS5KaChyKSx1KG8sNDkpLnRoKGUpLG87cz1BbyhyKX1yZXR1cm4oZS5EIT1udWxsP2UuRDplLkIpPT0iamF2YS51dGlsLk1hcCRFbnRyeSI/bmV3IGhLdChlKTpuZXcgend0KGUpfSxsLktoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZ2KHRoaXMsZSxuKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuYX1yZXR1cm4gdWgodGhpcyxlLUpuKChkbigpLERiKSkseW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8RGIpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksWmModGhpcy5BYixlLHIpO2Nhc2UgMTpyZXR1cm4gdGhpcy5hJiYocj11KHRoaXMuYSw0OSkuaWgodGhpcyw0LGkxLHIpKSxYeXQodGhpcyx1KGUsMjM1KSxyKX1yZXR1cm4gbz11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fChkbigpLERiKSksbiksNjYpLG8uTmooKS5Raih0aGlzLHN1KHRoaXMpLG4tSm4oKGRuKCksRGIpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDE6cmV0dXJuIFh5dCh0aGlzLG51bGwscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxEYikpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLERiKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4hIXRoaXMuYX1yZXR1cm4gb2godGhpcyxlLUpuKChkbigpLERiKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8RGIpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxpcyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6emFlKHRoaXMsdShuLDIzNSkpO3JldHVybn1naCh0aGlzLGUtSm4oKGRuKCksRGIpKSx5bigocj11KERuKHRoaXMsMTYpLDI2KSxyfHxEYiksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxEYn0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOnphZSh0aGlzLG51bGwpO3JldHVybn1maCh0aGlzLGUtSm4oKGRuKCksRGIpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxEYiksZSkpfTt2YXIgYUEsWUF0LFo0ZTtGKE1uLCJFRmFjdG9yeUltcGwiLDcwNCksRCh4Ziw3MDQsezEwNToxLDIwMTQ6MSw5MjoxLDkwOjEsNDcxOjEsMTQ3OjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTUwOjEsMTE0OjEsMTE1OjF9LGF4KSxsLkloPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUueWooKSl7Y2FzZSAxMjpyZXR1cm4gdShuLDE0NikudGcoKTtjYXNlIDEzOnJldHVybiAkbyhuKTtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihRRStlLm5lKCkrQ3YpKX19LGwuSmg9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHYsaztzd2l0Y2goZS5HPT0tMSYmKGUuRz0obj1SbChlKSxuP0hnKG4uTWgoKSxlKTotMSkpLGUuRyl7Y2FzZSA0OnJldHVybiBoPW5ldyBaVCxoO2Nhc2UgNjpyZXR1cm4gZD1uZXcgVnB0LGQ7Y2FzZSA3OnJldHVybiB2PW5ldyBHcHQsdjtjYXNlIDg6cmV0dXJuIHM9bmV3IHB3LHM7Y2FzZSA5OnJldHVybiByPW5ldyB4cCxyO2Nhc2UgMTA6cmV0dXJuIG89bmV3IGFkLG87Y2FzZSAxMTpyZXR1cm4gaz1uZXcgYUIsaztkZWZhdWx0OnRocm93IGl0KG5ldyBGbihLY3QrZS56YitDdikpfX0sbC5LaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlLnlqKCkpe2Nhc2UgMTM6Y2FzZSAxMjpyZXR1cm4gbnVsbDtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihRRStlLm5lKCkrQ3YpKX19LEYoTTIsIkVsa0dyYXBoRmFjdG9yeUltcGwiLHhmKSxEKDQzOCwxNTAsezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxMTQ6MSwxMTU6MX0pLGwuV2c9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBuPShlPXUoRG4odGhpcywxNiksMjYpLGp2dCh2ZChlfHx0aGlzLnpoKCkpKSksbj09bnVsbD8oWUMoKSxZQygpLFJmdCk6bmV3IElXdCh0aGlzLG4pfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy5uZSgpfXJldHVybiB1aCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLGUpLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGx9cmV0dXJuIG9oKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLGlzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTp0aGlzLkxoKEJyKG4pKTtyZXR1cm59Z2godGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKHI9dShEbih0aGlzLDE2KSwyNikscnx8dGhpcy56aCgpKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLGI1ZX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOnRoaXMuTGgobnVsbCk7cmV0dXJufWZoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuemJ9LGwuTGg9ZnVuY3Rpb24oZSl7UWModGhpcyxlKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBKOSh0aGlzKX0sbC56Yj1udWxsLEYoTW4sIkVOYW1lZEVsZW1lbnRJbXBsIiw0MzgpLEQoMTc5LDQzOCx7MTA1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMjM1OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDE3OToxLDExNDoxLDExNToxLDY3NToxfSxmUXQpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhZSh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMueWI7Y2FzZSAzOnJldHVybiB0aGlzLnhiO2Nhc2UgNDpyZXR1cm4gdGhpcy5zYjtjYXNlIDU6cmV0dXJuIXRoaXMucmImJih0aGlzLnJiPW5ldyBHbSh0aGlzLHMxLHRoaXMpKSx0aGlzLnJiO2Nhc2UgNjpyZXR1cm4hdGhpcy52YiYmKHRoaXMudmI9bmV3IFJ4KGkxLHRoaXMsNiw3KSksdGhpcy52YjtjYXNlIDc6cmV0dXJuIG4/dGhpcy5EYj4+MTY9PTc/dSh0aGlzLkNiLDIzNSk6bnVsbDpBUXQodGhpcyl9cmV0dXJuIHVoKHRoaXMsZS1KbigoZG4oKSx1cCkpLHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fHVwKSxlKSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksWmModGhpcy5BYixlLHIpO2Nhc2UgNDpyZXR1cm4gdGhpcy5zYiYmKHI9dSh0aGlzLnNiLDQ5KS5paCh0aGlzLDEsc0EscikpLHQzdCh0aGlzLHUoZSw0NzEpLHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5yYiYmKHRoaXMucmI9bmV3IEdtKHRoaXMsczEsdGhpcykpLFpjKHRoaXMucmIsZSxyKTtjYXNlIDY6cmV0dXJuIXRoaXMudmImJih0aGlzLnZiPW5ldyBSeChpMSx0aGlzLDYsNykpLFpjKHRoaXMudmIsZSxyKTtjYXNlIDc6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/ZWFlKHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLEhsKHRoaXMsZSw3LHIpfXJldHVybiBoPXUoeW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8KGRuKCksdXApKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsc3UodGhpcyksbi1KbigoZG4oKSx1cCkpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgNDpyZXR1cm4gdDN0KHRoaXMsbnVsbCxyKTtjYXNlIDU6cmV0dXJuIXRoaXMucmImJih0aGlzLnJiPW5ldyBHbSh0aGlzLHMxLHRoaXMpKSxCYSh0aGlzLnJiLGUscik7Y2FzZSA2OnJldHVybiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgUngoaTEsdGhpcyw2LDcpKSxCYSh0aGlzLnZiLGUscik7Y2FzZSA3OnJldHVybiBIbCh0aGlzLG51bGwsNyxyKX1yZXR1cm4gbz11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fChkbigpLHVwKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHN1KHRoaXMpLG4tSm4oKGRuKCksdXApKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy55YiE9bnVsbDtjYXNlIDM6cmV0dXJuIHRoaXMueGIhPW51bGw7Y2FzZSA0OnJldHVybiEhdGhpcy5zYjtjYXNlIDU6cmV0dXJuISF0aGlzLnJiJiZ0aGlzLnJiLmkhPTA7Y2FzZSA2OnJldHVybiEhdGhpcy52YiYmdGhpcy52Yi5pIT0wO2Nhc2UgNzpyZXR1cm4hIUFRdCh0aGlzKX1yZXR1cm4gb2godGhpcyxlLUpuKChkbigpLHVwKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8dXApLGUpKX0sbC5vaD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1Md24odGhpcyxlKSxufHxMeHQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxpcyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6UWModGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMjp3eih0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAzOmJ6KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDQ6SHN0KHRoaXMsdShuLDQ3MSkpO3JldHVybjtjYXNlIDU6IXRoaXMucmImJih0aGlzLnJiPW5ldyBHbSh0aGlzLHMxLHRoaXMpKSx4cih0aGlzLnJiKSwhdGhpcy5yYiYmKHRoaXMucmI9bmV3IEdtKHRoaXMsczEsdGhpcykpLGlzKHRoaXMucmIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgNjohdGhpcy52YiYmKHRoaXMudmI9bmV3IFJ4KGkxLHRoaXMsNiw3KSkseHIodGhpcy52YiksIXRoaXMudmImJih0aGlzLnZiPW5ldyBSeChpMSx0aGlzLDYsNykpLGlzKHRoaXMudmIsdShuLDE0KSk7cmV0dXJufWdoKHRoaXMsZS1KbigoZG4oKSx1cCkpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fHVwKSxlKSxuKX0sbC52aD1mdW5jdGlvbihlKXt2YXIgbixyO2lmKGUmJnRoaXMucmIpZm9yKHI9bmV3IG5yKHRoaXMucmIpO3IuZSE9ci5pLmdjKCk7KW49ZHIociksX3QobiwzNTEpJiYodShuLDM1MSkudz1udWxsKTtvNih0aGlzLDY0LGUpfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksdXB9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpRYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6d3oodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAzOmJ6KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDpIc3QodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA1OiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgR20odGhpcyxzMSx0aGlzKSkseHIodGhpcy5yYik7cmV0dXJuO2Nhc2UgNjohdGhpcy52YiYmKHRoaXMudmI9bmV3IFJ4KGkxLHRoaXMsNiw3KSkseHIodGhpcy52Yik7cmV0dXJufWZoKHRoaXMsZS1KbigoZG4oKSx1cCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHVwKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXtNc3QodGhpcyl9LGwuTWg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5yYiYmKHRoaXMucmI9bmV3IEdtKHRoaXMsczEsdGhpcykpLHRoaXMucmJ9LGwuTmg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zYn0sbC5PaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVifSxsLlBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueGJ9LGwuUWg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55Yn0sbC5SaD1mdW5jdGlvbihlKXt0aGlzLnViPWV9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5EYiY2ND9KOSh0aGlzKTooZT1uZXcgX2goSjkodGhpcykpLGUuYSs9IiAobnNVUkk6ICIsZ28oZSx0aGlzLnliKSxlLmErPSIsIG5zUHJlZml4OiAiLGdvKGUsdGhpcy54YiksZS5hKz0iKSIsZS5hKX0sbC54Yj1udWxsLGwueWI9bnVsbCxGKE1uLCJFUGFja2FnZUltcGwiLDE3OSksRCg1NTUsMTc5LHsxMDU6MSwyMDE2OjEsNTU1OjEsOTI6MSw5MDoxLDE0NzoxLDE5MToxLDU2OjEsMjM1OjEsMTA4OjEsNDk6MSw5NzoxLDE1MDoxLDE3OToxLDExNDoxLDExNToxLDY3NToxfSxnY2UpLGwucT0hMSxsLnI9ITE7dmFyIEo0ZT0hMTtGKE0yLCJFbGtHcmFwaFBhY2thZ2VJbXBsIiw1NTUpLEQoMzU0LDcyNCx7MTA1OjEsNDEzOjEsMTYwOjEsMTM3OjEsNDcwOjEsMzU0OjEsOTQ6MSw5MjoxLDkwOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMTE0OjEsMTE1OjF9LFpUKSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBpNHQodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgNzpyZXR1cm4gTFF0KHRoaXMpO2Nhc2UgODpyZXR1cm4gdGhpcy5hfXJldHVybiBmM3QodGhpcyxlLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChuKXtjYXNlIDc6cmV0dXJuIHRoaXMuQ2ImJihyPShzPXRoaXMuRGI+PjE2LHM+PTA/aTR0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLXMsbnVsbCxyKSkpLG52dCh0aGlzLHUoZSwxNjApLHIpfXJldHVybiBqc3QodGhpcyxlLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuPT03P252dCh0aGlzLG51bGwscik6RWl0KHRoaXMsZSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDc6cmV0dXJuISFMUXQodGhpcyk7Y2FzZSA4OnJldHVybiFobigiIix0aGlzLmEpfXJldHVybiBtM3QodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDc6RjV0KHRoaXMsdShuLDE2MCkpO3JldHVybjtjYXNlIDg6bnl0KHRoaXMsQnIobikpO3JldHVybn12NHQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIEpjKCksR0F0fSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDc6RjV0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgODpueXQodGhpcywiIik7cmV0dXJufVQzdCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGVvZSh0aGlzKX0sbC5hPSIiLEYoTTIsIkVsa0xhYmVsSW1wbCIsMzU0KSxEKDIzOSw3MjUsezEwNToxLDQxMzoxLDgyOjEsMTYwOjEsMzM6MSw0NzA6MSwyMzk6MSw5NDoxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sVnB0KSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiBjNHQodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7c3dpdGNoKGUpe2Nhc2UgOTpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBmZShnbCx0aGlzLDksOSkpLHRoaXMuYztjYXNlIDEwOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGZlKHJzLHRoaXMsMTAsMTEpKSx0aGlzLmE7Y2FzZSAxMTpyZXR1cm4gZXModGhpcyk7Y2FzZSAxMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBmZShZcyx0aGlzLDEyLDMpKSx0aGlzLmI7Y2FzZSAxMzpyZXR1cm4gTm4oKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBmZShycyx0aGlzLDEwLDExKSksdGhpcy5hLmk+MH1yZXR1cm4gVTN0KHRoaXMsZSxuLHIpfSxsLmhoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2gobil7Y2FzZSA5OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IGZlKGdsLHRoaXMsOSw5KSksWmModGhpcy5jLGUscik7Y2FzZSAxMDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBmZShycyx0aGlzLDEwLDExKSksWmModGhpcy5hLGUscik7Y2FzZSAxMTpyZXR1cm4gdGhpcy5DYiYmKHI9KHM9dGhpcy5EYj4+MTYscz49MD9jNHQodGhpcyxyKTp0aGlzLkNiLmloKHRoaXMsLTEtcyxudWxsLHIpKSksbHd0KHRoaXMsdShlLDMzKSxyKTtjYXNlIDEyOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IGZlKFlzLHRoaXMsMTIsMykpLFpjKHRoaXMuYixlLHIpfXJldHVybiBoNHQodGhpcyxlLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChuKXtjYXNlIDk6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgZmUoZ2wsdGhpcyw5LDkpKSxCYSh0aGlzLmMsZSxyKTtjYXNlIDEwOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IGZlKHJzLHRoaXMsMTAsMTEpKSxCYSh0aGlzLmEsZSxyKTtjYXNlIDExOnJldHVybiBsd3QodGhpcyxudWxsLHIpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgZmUoWXMsdGhpcywxMiwzKSksQmEodGhpcy5iLGUscil9cmV0dXJuIGY0dCh0aGlzLGUsbixyKX0sbC5saD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSA5OnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDEwOnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDExOnJldHVybiEhZXModGhpcyk7Y2FzZSAxMjpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmkhPTA7Y2FzZSAxMzpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBmZShycyx0aGlzLDEwLDExKSksdGhpcy5hLmk+MH1yZXR1cm4gRnl0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSA5OiF0aGlzLmMmJih0aGlzLmM9bmV3IGZlKGdsLHRoaXMsOSw5KSkseHIodGhpcy5jKSwhdGhpcy5jJiYodGhpcy5jPW5ldyBmZShnbCx0aGlzLDksOSkpLGlzKHRoaXMuYyx1KG4sMTQpKTtyZXR1cm47Y2FzZSAxMDohdGhpcy5hJiYodGhpcy5hPW5ldyBmZShycyx0aGlzLDEwLDExKSkseHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBmZShycyx0aGlzLDEwLDExKSksaXModGhpcy5hLHUobiwxNCkpO3JldHVybjtjYXNlIDExOkk1dCh0aGlzLHUobiwzMykpO3JldHVybjtjYXNlIDEyOiF0aGlzLmImJih0aGlzLmI9bmV3IGZlKFlzLHRoaXMsMTIsMykpLHhyKHRoaXMuYiksIXRoaXMuYiYmKHRoaXMuYj1uZXcgZmUoWXMsdGhpcywxMiwzKSksaXModGhpcy5iLHUobiwxNCkpO3JldHVybn14NXQodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIEpjKCksVUF0fSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDk6IXRoaXMuYyYmKHRoaXMuYz1uZXcgZmUoZ2wsdGhpcyw5LDkpKSx4cih0aGlzLmMpO3JldHVybjtjYXNlIDEwOiF0aGlzLmEmJih0aGlzLmE9bmV3IGZlKHJzLHRoaXMsMTAsMTEpKSx4cih0aGlzLmEpO3JldHVybjtjYXNlIDExOkk1dCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDEyOiF0aGlzLmImJih0aGlzLmI9bmV3IGZlKFlzLHRoaXMsMTIsMykpLHhyKHRoaXMuYik7cmV0dXJufVIzdCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFg1dCh0aGlzKX0sRihNMiwiRWxrTm9kZUltcGwiLDIzOSksRCgxODYsNzI1LHsxMDU6MSw0MTM6MSw4MjoxLDE2MDoxLDExODoxLDQ3MDoxLDE4NjoxLDk0OjEsOTI6MSw5MDoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDExNDoxLDExNToxfSxHcHQpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIHM0dCh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZT09OT9UMSh0aGlzKTpVM3QodGhpcyxlLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChuKXtjYXNlIDk6cmV0dXJuIHRoaXMuQ2ImJihyPShzPXRoaXMuRGI+PjE2LHM+PTA/czR0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLXMsbnVsbCxyKSkpLG53dCh0aGlzLHUoZSwzMykscil9cmV0dXJuIGg0dCh0aGlzLGUsbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7cmV0dXJuIG49PTk/bnd0KHRoaXMsbnVsbCxyKTpmNHQodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PTk/ISFUMSh0aGlzKTpGeXQodGhpcyxlKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDk6RDV0KHRoaXMsdShuLDMzKSk7cmV0dXJufXg1dCh0aGlzLGUsbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gSmMoKSxXQXR9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgOTpENXQodGhpcyxudWxsKTtyZXR1cm59UjN0KHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4genVlKHRoaXMpfSxGKE0yLCJFbGtQb3J0SW1wbCIsMTg2KTt2YXIgdDVlPUtpKFJhLCJCYXNpY0VNYXAvRW50cnkiKTtEKDEwOTIsMTE1LHsxMDU6MSw0MjoxLDkyOjEsOTA6MSwxMzM6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxMTQ6MSwxMTU6MX0sYUIpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBQdyh0aGlzKX0sbC5VaD1mdW5jdGlvbihlKXtyeXQodGhpcyx1KGUsMTQ2KSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYjtjYXNlIDE6cmV0dXJuIHRoaXMuY31yZXR1cm4gWHoodGhpcyxlLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuYjtjYXNlIDE6cmV0dXJuIHRoaXMuYyE9bnVsbH1yZXR1cm4gZnN0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAwOnJ5dCh0aGlzLHUobiwxNDYpKTtyZXR1cm47Y2FzZSAxOmF5dCh0aGlzLG4pO3JldHVybn1Yc3QodGhpcyxlLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIEpjKCksU2J9LGwuQmg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyeXQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxOmF5dCh0aGlzLG51bGwpO3JldHVybn1Hc3QodGhpcyxlKX0sbC5TaD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmE9PS0xJiYoZT10aGlzLmIsdGhpcy5hPWU/SGkoZSk6MCksdGhpcy5hfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5UaD1mdW5jdGlvbihlKXt0aGlzLmE9ZX0sbC5lZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLmMsYXl0KHRoaXMsZSksbn0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLkRiJjY0P21mKHRoaXMpOihlPW5ldyBNcCxHcihHcihHcihlLHRoaXMuYj90aGlzLmIudGcoKTpfdSksVW90KSxiOSh0aGlzLmMpKSxlLmEpfSxsLmE9LTEsbC5jPW51bGw7dmFyIEh2PUYoTTIsIkVsa1Byb3BlcnR5VG9WYWx1ZU1hcEVudHJ5SW1wbCIsMTA5Mik7RCg5ODQsMSx7fSxvQiksRihtYSwiSnNvbkFkYXB0ZXIiLDk4NCksRCgyMTAsNjAsUTAsdWQpLEYobWEsIkpzb25JbXBvcnRFeGNlcHRpb24iLDIxMCksRCg4NTcsMSx7fSxuYWUpLEYobWEsIkpzb25JbXBvcnRlciIsODU3KSxEKDg5MSwxLHt9LERHdCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQwJFR5cGUiLDg5MSksRCg4OTIsMSx7fSxJR3QpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMSRUeXBlIiw4OTIpLEQoOTAwLDEse30sZnp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDEwJFR5cGUiLDkwMCksRCg5MDIsMSx7fSxPR3QpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMTEkVHlwZSIsOTAyKSxEKDkwMywxLHt9LFBHdCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxMiRUeXBlIiw5MDMpLEQoOTA5LDEse30sVVh0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDEzJFR5cGUiLDkwOSksRCg5MDgsMSx7fSxHWHQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMTQkVHlwZSIsOTA4KSxEKDkwNCwxLHt9LEZHdCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxNSRUeXBlIiw5MDQpLEQoOTA1LDEse30sTkd0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE2JFR5cGUiLDkwNSksRCg5MDYsMSx7fSxCR3QpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMTckVHlwZSIsOTA2KSxEKDkwNywxLHt9LFJHdCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQxOCRUeXBlIiw5MDcpLEQoOTEyLDEse30sZHp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE5JFR5cGUiLDkxMiksRCg4OTMsMSx7fSxnenQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMiRUeXBlIiw4OTMpLEQoOTEwLDEse30scHp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDIwJFR5cGUiLDkxMCksRCg5MTEsMSx7fSxienQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMjEkVHlwZSIsOTExKSxEKDkxNSwxLHt9LHd6dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyMiRUeXBlIiw5MTUpLEQoOTEzLDEse30sdnp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDIzJFR5cGUiLDkxMyksRCg5MTQsMSx7fSxtenQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMjQkVHlwZSIsOTE0KSxEKDkxNywxLHt9LHl6dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQyNSRUeXBlIiw5MTcpLEQoOTE2LDEse30seHp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI2JFR5cGUiLDkxNiksRCg5MTgsMSxVbixqR3QpLGwudGQ9ZnVuY3Rpb24oZSl7aW9uKHRoaXMuYix0aGlzLmEsQnIoZSkpfSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI3JFR5cGUiLDkxOCksRCg5MTksMSxVbiwkR3QpLGwudGQ9ZnVuY3Rpb24oZSl7c29uKHRoaXMuYix0aGlzLmEsQnIoZSkpfSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI4JFR5cGUiLDkxOSksRCg5MjAsMSx7fSx6R3QpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMjkkVHlwZSIsOTIwKSxEKDg5NiwxLHt9LGt6dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzJFR5cGUiLDg5NiksRCg5MjEsMSx7fSxxR3QpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMzAkVHlwZSIsOTIxKSxEKDkyMiwxLHt9LEV6dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzMSRUeXBlIiw5MjIpLEQoOTIzLDEse30sVHp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMyJFR5cGUiLDkyMyksRCg5MjQsMSx7fSxDenQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMzMkVHlwZSIsOTI0KSxEKDkyNSwxLHt9LF96dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzNCRUeXBlIiw5MjUpLEQoODU5LDEse30sU3p0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM1JFR5cGUiLDg1OSksRCg5MjksMSx7fSxCWXQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkMzYkVHlwZSIsOTI5KSxEKDkyNiwxLFVuLEF6dCksbC50ZD1mdW5jdGlvbihlKXtjYW4odGhpcy5hLHUoZSw0NjkpKX0sRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzNyRUeXBlIiw5MjYpLEQoOTI3LDEsVW4sWUd0KSxsLnRkPWZ1bmN0aW9uKGUpe05YZSh0aGlzLmEsdGhpcy5iLHUoZSwyMDIpKX0sRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzOCRUeXBlIiw5MjcpLEQoOTI4LDEsVW4sS0d0KSxsLnRkPWZ1bmN0aW9uKGUpe0JYZSh0aGlzLmEsdGhpcy5iLHUoZSwyMDIpKX0sRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQzOSRUeXBlIiw5MjgpLEQoODk0LDEse30sTHp0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDQkVHlwZSIsODk0KSxEKDkzMCwxLFVuLE16dCksbC50ZD1mdW5jdGlvbihlKXt1YW4odGhpcy5hLHUoZSw4KSl9LEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkNDAkVHlwZSIsOTMwKSxEKDg5NSwxLHt9LER6dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQ1JFR5cGUiLDg5NSksRCg4OTksMSx7fSxJenQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkNiRUeXBlIiw4OTkpLEQoODk3LDEse30sT3p0KSxGKG1hLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDckVHlwZSIsODk3KSxEKDg5OCwxLHt9LFB6dCksRihtYSwiSnNvbkltcG9ydGVyL2xhbWJkYSQ4JFR5cGUiLDg5OCksRCg5MDEsMSx7fSxGenQpLEYobWEsIkpzb25JbXBvcnRlci9sYW1iZGEkOSRUeXBlIiw5MDEpLEQoOTQ4LDEsVW4sTnp0KSxsLnRkPWZ1bmN0aW9uKGUpe1Z4KHRoaXMuYSxuZXcgVW0oQnIoZSkpKX0sRihtYSwiSnNvbk1ldGFEYXRhQ29udmVydGVyL2xhbWJkYSQwJFR5cGUiLDk0OCksRCg5NDksMSxVbixCenQpLGwudGQ9ZnVuY3Rpb24oZSl7Q25uKHRoaXMuYSx1KGUsMjM3KSl9LEYobWEsIkpzb25NZXRhRGF0YUNvbnZlcnRlci9sYW1iZGEkMSRUeXBlIiw5NDkpLEQoOTUwLDEsVW4sUnp0KSxsLnRkPWZ1bmN0aW9uKGUpe2tpbih0aGlzLmEsdShlLDE0OSkpfSxGKG1hLCJKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDIkVHlwZSIsOTUwKSxEKDk1MSwxLFVuLGp6dCksbC50ZD1mdW5jdGlvbihlKXtfbm4odGhpcy5hLHUoZSwxNzUpKX0sRihtYSwiSnNvbk1ldGFEYXRhQ29udmVydGVyL2xhbWJkYSQzJFR5cGUiLDk1MSksRCgyMzcsMjIsezM6MSwzNToxLDIyOjEsMjM3OjF9LFB4KTt2YXIgb1UsY1UsRGZ0LHVVLGxVLGhVLElmdCxPZnQsZlU9anIocUksIkdyYXBoRmVhdHVyZSIsMjM3LEhyLFlvbixYdG4pLGU1ZTtEKDEzLDEsezM1OjEsMTQ2OjF9LFZpLFBzLG1uLGVvKSxsLndkPWZ1bmN0aW9uKGUpe3JldHVybiBGUWUodGhpcyx1KGUsMTQ2KSl9LGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGRRdCh0aGlzLGUpfSxsLndnPWZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMpfSxsLnRnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5IYj1mdW5jdGlvbigpe3JldHVybiBWZyh0aGlzLmIpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sRihxSSwiUHJvcGVydHkiLDEzKSxEKDgxOCwxLE9pLEVwdCksbC51ZT1mdW5jdGlvbihlLG4pe3JldHVybiBKbG4odGhpcyx1KGUsOTQpLHUobiw5NCkpfSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC52ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcyl9LEYocUksIlByb3BlcnR5SG9sZGVyQ29tcGFyYXRvciIsODE4KSxEKDY5NSwxLHNhLFRwdCksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHVvbih0aGlzKX0sbC5RYj1mdW5jdGlvbigpe0lIdCgpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmF9LEYoREgsIkVsa0dyYXBoVXRpbC9BbmNlc3Rvckl0ZXJhdG9yIiw2OTUpO3ZhciBLQXQ9S2koUmEsIkVMaXN0Iik7RCg2Nyw1Mix7MjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDY3OjEsNTg6MX0pLGwuVmM9ZnVuY3Rpb24oZSxuKXtuXyh0aGlzLGUsbil9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIERyKHRoaXMsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gU3l0KHRoaXMsZSxuKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gaXModGhpcyxlKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiBuZXcgQngodGhpcyl9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICRNKHRoaXMpfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiBERCh0aGlzLGUpfSxsLmFpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuYmk9ZnVuY3Rpb24oZSxuKXt9LGwuY2k9ZnVuY3Rpb24oKXt9LGwuZGk9ZnVuY3Rpb24oZSxuKXtZcnQodGhpcyxlLG4pfSxsLmVpPWZ1bmN0aW9uKGUsbixyKXt9LGwuZmk9ZnVuY3Rpb24oZSxuKXt9LGwuZ2k9ZnVuY3Rpb24oZSxuLHIpe30sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gU3VlKHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4ga3l0KHRoaXMpfSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG5yKHRoaXMpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBOeCh0aGlzKX0sbC5aYz1mdW5jdGlvbihlKXt2YXIgbjtpZihuPXRoaXMuZ2MoKSxlPDB8fGU+bil0aHJvdyBpdChuZXcgcW0oZSxuKSk7cmV0dXJuIG5ldyBKbnQodGhpcyxlKX0sbC5qaT1mdW5jdGlvbihlLG4pe3RoaXMuaWkoZSx0aGlzLlhjKG4pKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4gWCQodGhpcyxlKX0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGg0KHRoaXMsZSxuKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBnM3QodGhpcyl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5vaT1mdW5jdGlvbihlLG4pe3JldHVybiBzRSh0aGlzLG4pfSxGKFJhLCJBYnN0cmFjdEVMaXN0Iiw2NyksRCg2Myw2NyxMZCxveCxRdyxneXQpLGwuVmg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gJHN0KHRoaXMsZSxuKX0sbC5XaD1mdW5jdGlvbihlKXtyZXR1cm4gTHNlKHRoaXMsZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXtVRCh0aGlzLGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7Z0QodGhpcyxlKX0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gRm10KHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXt6OSh0aGlzKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4geUUodGhpcyxlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gQXQodGhpcyxlKX0sbC5xaT1mdW5jdGlvbihlKXt2YXIgbixyLHM7Kyt0aGlzLmoscj10aGlzLmc9PW51bGw/MDp0aGlzLmcubGVuZ3RoLGU+ciYmKHM9dGhpcy5nLG49cisoci8yfDApKzQsbjxlJiYobj1lKSx0aGlzLmc9dGhpcy5yaShuKSxzIT1udWxsJiZEYyhzLDAsdGhpcy5nLDAsdGhpcy5pKSl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFhzZSh0aGlzLGUpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaT09MH0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiBKc3QodGhpcyxlLG4pfSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChRbixEZSwxLGUsNSwxKX0sbC5raT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nW2VdfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiBsNih0aGlzLGUpfSxsLm1pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHNpdCh0aGlzLGUsbil9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGFtdCh0aGlzKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gXzN0KHRoaXMsZSl9LGwuaT0wO3ZhciBYQXQ9RihSYSwiQmFzaWNFTGlzdCIsNjMpLFFBdD1LaShSYSwiVHJlZUl0ZXJhdG9yIik7RCg2OTQsNjMsYXV0KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nPT1udWxsJiYhdGhpcy5jP0h2dCh0aGlzKTp0aGlzLmc9PW51bGx8fHRoaXMuaSE9MCYmdSh0aGlzLmdbdGhpcy5pLTFdLDQ3KS5PYigpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHdxKHRoaXMpfSxsLlFiPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZSl0aHJvdyBpdChuZXcgTm8oIlRoZXJlIGlzIG5vIHZhbGlkIG9iamVjdCB0byByZW1vdmUuIikpO3RoaXMuZS5RYigpfSxsLmM9ITEsRihSYSwiQWJzdHJhY3RUcmVlSXRlcmF0b3IiLDY5NCksRCg2ODUsNjk0LGF1dCxsMnQpLGwuc2k9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIG49dShlLDU2KS5XZygpLktjKCksX3QobiwyNzkpJiZ1KG4sMjc5KS5OayhuZXcgckopLG59LEYoREgsIkVsa0dyYXBoVXRpbC9Qcm9wZXJ0aWVzU2tpcHBpbmdUcmVlSXRlcmF0b3IiLDY4NSksRCg5NTIsMSx7fSxySiksRihESCwiRWxrR3JhcGhVdGlsL1Byb3BlcnRpZXNTa2lwcGluZ1RyZWVJdGVyYXRvci8xIiw5NTIpO3ZhciBkUCxQZnQsZ1A9RihESCwiRWxrUmVmbGVjdCIsbnVsbCk7RCg4ODksMSxNeSxKVCksbC52Zz1mdW5jdGlvbihlKXtyZXR1cm4gQyQoKSxQYW4odShlLDE3NCkpfSxGKERILCJFbGtSZWZsZWN0L2xhbWJkYSQwJFR5cGUiLDg4OSk7dmFyIEFiO0tpKFJhLCJSZXNvdXJjZUxvY2F0b3IiKSxEKDEwNTEsMSx7fSksRihSYSwiRGVsZWdhdGluZ1Jlc291cmNlTG9jYXRvciIsMTA1MSksRCgxMDUyLDEwNTEse30pLEYoIm9yZy5lY2xpcHNlLmVtZi5jb21tb24iLCJFTUZQbHVnaW4iLDEwNTIpO3ZhciBGZnQ9S2koazBlLCJBZGFwdGVyIiksbTZuPUtpKGswZSwiTm90aWZpY2F0aW9uIik7RCgxMTUzLDEsQjh0KSxsLnRpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC51aT1mdW5jdGlvbihlKXt9LGwudmk9ZnVuY3Rpb24oZSl7dGhpcy5kPWV9LGwud2k9ZnVuY3Rpb24oZSl7dGhpcy5kPT1lJiYodGhpcy5kPW51bGwpfSxsLmQ9bnVsbCxGKEw2LCJBZGFwdGVySW1wbCIsMTE1MyksRCgxOTk1LDY3LEUwZSksbC5WaD1mdW5jdGlvbihlLG4pe3JldHVybiB5M3QodGhpcyxlLG4pfSxsLldoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZigrK3RoaXMuaixlLmRjKCkpcmV0dXJuITE7Zm9yKG49dGhpcy5WaSgpLHM9ZS5LYygpO3MuT2IoKTspcj1zLlBiKCksdGhpcy5JaSh0aGlzLm9pKG4scikpLCsrbjtyZXR1cm4hMH0sbC5YaD1mdW5jdGlvbihlLG4pe0dXdCh0aGlzLGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7bVh0KHRoaXMsZSl9LGwuR2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5KaSgpfSxsLiRiPWZ1bmN0aW9uKCl7Vk0odGhpcyx0aGlzLlZpKCksdGhpcy5XaSgpKX0sbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5MaShlKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5NaShlKX0sbC5IaT1mdW5jdGlvbihlLG4pe3RoaXMuU2koKS5qbSgpfSxsLklpPWZ1bmN0aW9uKGUpe3RoaXMuU2koKS5qbSgpfSxsLkppPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU2koKX0sbC5LaT1mdW5jdGlvbigpe3RoaXMuU2koKS5qbSgpfSxsLkxpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5NaT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuTmk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLk9pPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5QaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5RaT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuUmk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5TaSgpLmptKCl9LGwuVGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLlVpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLlZpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLldpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuU2koKS5qbSgpfSxsLlhpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5ZaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNpKCkuam0oKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5OaShlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5saShlLHRoaXMuT2koZSkpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUGkoKX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5RaShlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJpKCl9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gQjR0KHRoaXMsZSxuKX0sbC5raT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5PaShlKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gSGoodGhpcyxlKX0sbC5NYz1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj10aGlzLlhjKGUpLG4+PTA/KHRoaXMuJGMobiksITApOiExfSxsLm1pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuVWkoZSx0aGlzLm9pKGUsbikpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVmkoKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLldpKCl9LGwuUWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuWGkoZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ZaSgpfSxGKFJhLCJEZWxlZ2F0aW5nRUxpc3QiLDE5OTUpLEQoMTk5NiwxOTk1LEUwZSksbC5WaD1mdW5jdGlvbihlLG4pe3JldHVybiBzeHQodGhpcyxlLG4pfSxsLldoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlZoKHRoaXMuVmkoKSxlKX0sbC5YaD1mdW5jdGlvbihlLG4pe2ZjZSh0aGlzLGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7cmNlKHRoaXMsZSl9LGwuYWk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5iaigpfSxsLiRiPWZ1bmN0aW9uKCl7QV8odGhpcyl9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IHBRdCh0aGlzLGUsbixyLHMsbyl9LGwuJGk9ZnVuY3Rpb24oZSl7bWkodGhpcy5BaSgpLGUpfSxsLl9pPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4tMX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuY2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5kaj1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLmVqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5SaSgpfSxsLmlpPWZ1bmN0aW9uKGUsbil7dmFyIHIscztyZXR1cm4gdGhpcy5laigpPyhzPXRoaXMuZmooKSxyPUI0dCh0aGlzLGUsbiksdGhpcy4kaSh0aGlzLlppKDcscGUobikscixlLHMpKSxyKTpCNHQodGhpcyxlLG4pfSxsLiRjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvO3JldHVybiB0aGlzLmVqKCk/KHI9bnVsbCxzPXRoaXMuZmooKSxuPXRoaXMuWmkoNCxvPUhqKHRoaXMsZSksbnVsbCxlLHMpLHRoaXMuYmooKSYmbz8ocj10aGlzLmRqKG8scikscj8oci5FaShuKSxyLkZpKCkpOnRoaXMuJGkobikpOnI/KHIuRWkobiksci5GaSgpKTp0aGlzLiRpKG4pLG8pOihvPUhqKHRoaXMsZSksdGhpcy5iaigpJiZvJiYocj10aGlzLmRqKG8sbnVsbCksciYmci5GaSgpKSxvKX0sbC5taT1mdW5jdGlvbihlLG4pe3JldHVybiB5bGUodGhpcyxlLG4pfSxGKEw2LCJEZWxlZ2F0aW5nTm90aWZ5aW5nTGlzdEltcGwiLDE5OTYpLEQoMTQzLDEsbk8pLGwuRWk9ZnVuY3Rpb24oZSl7cmV0dXJuIFQ0dCh0aGlzLGUpfSxsLkZpPWZ1bmN0aW9uKCl7cml0KHRoaXMpfSxsLnhpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sbC5faT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmdqPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwueWk9ZnVuY3Rpb24oZSl7cmV0dXJuLTF9LGwuemk9ZnVuY3Rpb24oKXtyZXR1cm4gYXVlKHRoaXMpfSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuQmk9ZnVuY3Rpb24oKXtyZXR1cm4gJDV0KHRoaXMpfSxsLkNpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubzwwP3RoaXMubzwtMj8tMi10aGlzLm8tMTotMTp0aGlzLm99LGwuaGo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5EaT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqO3N3aXRjaCh0aGlzLmQpe2Nhc2UgMTpjYXNlIDI6c3dpdGNoKG89ZS54aSgpLG8pe2Nhc2UgMTpjYXNlIDI6aWYoaD1lLkFpKCksVnQoaCk9PT1WdCh0aGlzLkFpKCkpJiZ0aGlzLnlpKG51bGwpPT1lLnlpKG51bGwpKXJldHVybiB0aGlzLmc9ZS56aSgpLGUueGkoKT09MSYmKHRoaXMuZD0xKSwhMH1jYXNlIDQ6e3N3aXRjaChvPWUueGkoKSxvKXtjYXNlIDQ6e2lmKGg9ZS5BaSgpLFZ0KGgpPT09VnQodGhpcy5BaSgpKSYmdGhpcy55aShudWxsKT09ZS55aShudWxsKSlyZXR1cm4gQz1reHQodGhpcyksaz10aGlzLm88MD90aGlzLm88LTI/LTItdGhpcy5vLTE6LTE6dGhpcy5vLGQ9ZS5DaSgpLHRoaXMuZD02LGo9bmV3IFF3KDIpLGs8PWQ/KERyKGosdGhpcy5uKSxEcihqLGUuQmkoKSksdGhpcy5nPWx0KGN0KENyLDEpLFhyLDI1LDE1LFt0aGlzLm89ayxkKzFdKSk6KERyKGosZS5CaSgpKSxEcihqLHRoaXMubiksdGhpcy5nPWx0KGN0KENyLDEpLFhyLDI1LDE1LFt0aGlzLm89ZCxrXSkpLHRoaXMubj1qLEN8fCh0aGlzLm89LTItdGhpcy5vLTEpLCEwO2JyZWFrfX1icmVha31jYXNlIDY6e3N3aXRjaChvPWUueGkoKSxvKXtjYXNlIDQ6e2lmKGg9ZS5BaSgpLFZ0KGgpPT09VnQodGhpcy5BaSgpKSYmdGhpcy55aShudWxsKT09ZS55aShudWxsKSl7Zm9yKEM9a3h0KHRoaXMpLGQ9ZS5DaSgpLE09dSh0aGlzLmcsNDgpLHM9TnQoQ3IsWHIsMjUsTS5sZW5ndGgrMSwxNSwxKSxuPTA7bjxNLmxlbmd0aCYmKHY9TVtuXSx2PD1kKTspc1tuKytdPXYsKytkO2ZvcihyPXUodGhpcy5uLDE1KSxyLlZjKG4sZS5CaSgpKSxzW25dPWQ7KytuPHMubGVuZ3RoOylzW25dPU1bbi0xXTtyZXR1cm4gdGhpcy5nPXMsQ3x8KHRoaXMubz0tMi1zWzBdKSwhMH1icmVha319YnJlYWt9fXJldHVybiExfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHM7c3dpdGNoKHM9bmV3IF9oKElwKHRoaXMuZ20pKyJAIisobj1IaSh0aGlzKT4+PjAsbi50b1N0cmluZygxNikpKSxzLmErPSIgKGV2ZW50VHlwZTogIix0aGlzLmQpe2Nhc2UgMTp7cy5hKz0iU0VUIjticmVha31jYXNlIDI6e3MuYSs9IlVOU0VUIjticmVha31jYXNlIDM6e3MuYSs9IkFERCI7YnJlYWt9Y2FzZSA1OntzLmErPSJBRERfTUFOWSI7YnJlYWt9Y2FzZSA0OntzLmErPSJSRU1PVkUiO2JyZWFrfWNhc2UgNjp7cy5hKz0iUkVNT1ZFX01BTlkiO2JyZWFrfWNhc2UgNzp7cy5hKz0iTU9WRSI7YnJlYWt9Y2FzZSA4OntzLmErPSJSRU1PVklOR19BREFQVEVSIjticmVha31jYXNlIDk6e3MuYSs9IlJFU09MVkUiO2JyZWFrfWRlZmF1bHQ6e3hldChzLHRoaXMuZCk7YnJlYWt9fWlmKFl1ZSh0aGlzKSYmKHMuYSs9IiwgdG91Y2g6IHRydWUiKSxzLmErPSIsIHBvc2l0aW9uOiAiLHhldChzLHRoaXMubzwwP3RoaXMubzwtMj8tMi10aGlzLm8tMTotMTp0aGlzLm8pLHMuYSs9Iiwgbm90aWZpZXI6ICIsbDkocyx0aGlzLkFpKCkpLHMuYSs9IiwgZmVhdHVyZTogIixsOShzLHRoaXMuX2koKSkscy5hKz0iLCBvbGRWYWx1ZTogIixsOShzLCQ1dCh0aGlzKSkscy5hKz0iLCBuZXdWYWx1ZTogIix0aGlzLmQ9PTYmJl90KHRoaXMuZyw0OCkpe2ZvcihyPXUodGhpcy5nLDQ4KSxzLmErPSJbIixlPTA7ZTxyLmxlbmd0aDspcy5hKz1yW2VdLCsrZTxyLmxlbmd0aCYmKHMuYSs9WWEpO3MuYSs9Il0ifWVsc2UgbDkocyxhdWUodGhpcykpO3JldHVybiBzLmErPSIsIGlzVG91Y2g6ICIsTGcocyxZdWUodGhpcykpLHMuYSs9Iiwgd2FzU2V0OiAiLExnKHMsa3h0KHRoaXMpKSxzLmErPSIpIixzLmF9LGwuZD0wLGwuZT0wLGwuZj0wLGwuaj0wLGwuaz0wLGwubz0wLGwucD0wLEYoTDYsIk5vdGlmaWNhdGlvbkltcGwiLDE0MyksRCgxMTY3LDE0MyxuTyxwUXQpLGwuX2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLl9pKCl9LGwueWk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5haigpfSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5BaSgpfSxGKEw2LCJEZWxlZ2F0aW5nTm90aWZ5aW5nTGlzdEltcGwvMSIsMTE2NyksRCgyNDIsNjMsTGQsY3gsRHApLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFRpZSh0aGlzLHUoZSwzNjYpKX0sbC5FaT1mdW5jdGlvbihlKXtyZXR1cm4gVGllKHRoaXMsZSl9LGwuRmk9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7Zm9yKGU9MDtlPHRoaXMuaTsrK2Upbj11KHRoaXMuZ1tlXSwzNjYpLHI9bi5BaSgpLHIhPW51bGwmJm4ueGkoKSE9LTEmJnUociw5MikuTmcobil9LGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KG02bixEZSwzNjYsZSwwLDEpfSxGKEw2LCJOb3RpZmljYXRpb25DaGFpbkltcGwiLDI0MiksRCgxMzc4LDkwLEZkZSksbC5LZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGwuTWc9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5mJjEpIT0wfSxsLmY9MSxGKEw2LCJOb3RpZmllckltcGwiLDEzNzgpLEQoMTk5Myw2MyxMZCksbC5WaD1mdW5jdGlvbihlLG4pe3JldHVybiBrYXQodGhpcyxlLG4pfSxsLldoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlZoKHRoaXMuaSxlKX0sbC5YaD1mdW5jdGlvbihlLG4pe2Q1dCh0aGlzLGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7dGF0KHRoaXMsZSl9LGwuYWk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5iaigpfSxsLiRiPWZ1bmN0aW9uKCl7eHIodGhpcyl9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IGJRdCh0aGlzLGUsbixyLHMsbyl9LGwuJGk9ZnVuY3Rpb24oZSl7bWkodGhpcy5BaSgpLGUpfSxsLl9pPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4tMX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuaWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5jaj1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLmRqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG59LGwuZWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmkhPTB9LGwuaWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcl8odGhpcyxlLG4pfSxsLiRjPWZ1bmN0aW9uKGUpe3JldHVybiBieSh0aGlzLGUpfSxsLm1pPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEZsZSh0aGlzLGUsbil9LGwuamo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5raj1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLmxqPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcn0sRihMNiwiTm90aWZ5aW5nTGlzdEltcGwiLDE5OTMpLEQoMTE2NiwxNDMsbk8sYlF0KSxsLl9pPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5faSgpfSxsLnlpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmEuYWooKX0sbC5BaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuQWkoKX0sRihMNiwiTm90aWZ5aW5nTGlzdEltcGwvMSIsMTE2NiksRCg5NTMsNjMsTGQsWVd0KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmk+MTA/KCghdGhpcy5ifHx0aGlzLmMuaiE9dGhpcy5hKSYmKHRoaXMuYj1uZXcgRTkodGhpcyksdGhpcy5hPXRoaXMuaiksSTAodGhpcy5iLGUpKTp5RSh0aGlzLGUpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuYT0wLEYoUmEsIkFic3RyYWN0RUxpc3QvMSIsOTUzKSxEKDI5NSw3Myxib3QscW0pLEYoUmEsIkFic3RyYWN0RUxpc3QvQmFzaWNJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiwyOTUpLEQoNDAsMSxzYSxuciksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLm1qPWZ1bmN0aW9uKCl7aWYodGhpcy5pLmohPXRoaXMuZil0aHJvdyBpdChuZXcgcmgpfSxsLm5qPWZ1bmN0aW9uKCl7cmV0dXJuIGRyKHRoaXMpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSE9dGhpcy5pLmdjKCl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uaigpfSxsLlFiPWZ1bmN0aW9uKCl7Zl8odGhpcyl9LGwuZT0wLGwuZj0wLGwuZz0tMSxGKFJhLCJBYnN0cmFjdEVMaXN0L0VJdGVyYXRvciIsNDApLEQoMjc4LDQwLG4wLE54LEpudCksbC5RYj1mdW5jdGlvbigpe2ZfKHRoaXMpfSxsLlJiPWZ1bmN0aW9uKGUpe0RpZSh0aGlzLGUpfSxsLm9qPWZ1bmN0aW9uKCl7dmFyIGU7dHJ5e3JldHVybiBlPXRoaXMuZC5YYigtLXRoaXMuZSksdGhpcy5taigpLHRoaXMuZz10aGlzLmUsZX1jYXRjaChuKXt0aHJvdyBuPVdpKG4pLF90KG4sNzMpPyh0aGlzLm1qKCksaXQobmV3IGxjKSk6aXQobil9fSxsLnBqPWZ1bmN0aW9uKGUpe0lzZSh0aGlzLGUpfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSE9MH0sbC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGwuVWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vaigpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZS0xfSxsLldiPWZ1bmN0aW9uKGUpe3RoaXMucGooZSl9LEYoUmEsIkFic3RyYWN0RUxpc3QvRUxpc3RJdGVyYXRvciIsMjc4KSxEKDM0MSw0MCxzYSxCeCksbC5uaj1mdW5jdGlvbigpe3JldHVybiBkc3QodGhpcyl9LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxGKFJhLCJBYnN0cmFjdEVMaXN0L05vblJlc29sdmluZ0VJdGVyYXRvciIsMzQxKSxEKDM4NSwyNzgsbjAsJE0sd3d0KSxsLlJiPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwubmo9ZnVuY3Rpb24oKXt2YXIgZTt0cnl7cmV0dXJuIGU9dGhpcy5jLmtpKHRoaXMuZSksdGhpcy5taigpLHRoaXMuZz10aGlzLmUrKyxlfWNhdGNoKG4pe3Rocm93IG49V2kobiksX3Qobiw3Myk/KHRoaXMubWooKSxpdChuZXcgbGMpKTppdChuKX19LGwub2o9ZnVuY3Rpb24oKXt2YXIgZTt0cnl7cmV0dXJuIGU9dGhpcy5jLmtpKC0tdGhpcy5lKSx0aGlzLm1qKCksdGhpcy5nPXRoaXMuZSxlfWNhdGNoKG4pe3Rocm93IG49V2kobiksX3Qobiw3Myk/KHRoaXMubWooKSxpdChuZXcgbGMpKTppdChuKX19LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLldiPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LEYoUmEsIkFic3RyYWN0RUxpc3QvTm9uUmVzb2x2aW5nRUxpc3RJdGVyYXRvciIsMzg1KSxEKDE5ODIsNjcsVDBlKSxsLlZoPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSDtpZihvPW4uZ2MoKSxvIT0wKXtmb3IoQz11KERuKHRoaXMuYSw0KSwxMjYpLE09Qz09bnVsbD8wOkMubGVuZ3RoLEg9TStvLHM9Rml0KHRoaXMsSCksaj1NLWUsaj4wJiZEYyhDLGUscyxlK28saiksaz1uLktjKCksZD0wO2Q8bzsrK2Qpdj1rLlBiKCkscj1lK2Qsb250KHMscixzRSh0aGlzLHYpKTtmb3IoYkUodGhpcyxzKSxoPTA7aDxvOysraCl2PXNbZV0sdGhpcy5iaShlLHYpLCsrZTtyZXR1cm4hMH1lbHNlIHJldHVybisrdGhpcy5qLCExfSxsLldoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZihzPWUuZ2MoKSxzIT0wKXtmb3Ioaz0ocj11KERuKHRoaXMuYSw0KSwxMjYpLHI9PW51bGw/MDpyLmxlbmd0aCksQz1rK3Msbj1GaXQodGhpcyxDKSx2PWUuS2MoKSxoPWs7aDxDOysraClkPXYuUGIoKSxvbnQobixoLHNFKHRoaXMsZCkpO2ZvcihiRSh0aGlzLG4pLG89aztvPEM7KytvKWQ9bltvXSx0aGlzLmJpKG8sZCk7cmV0dXJuITB9ZWxzZSByZXR1cm4rK3RoaXMuaiwhMX0sbC5YaD1mdW5jdGlvbihlLG4pe3ZhciByLHMsbyxoO3M9dShEbih0aGlzLmEsNCksMTI2KSxvPXM9PW51bGw/MDpzLmxlbmd0aCxyPUZpdCh0aGlzLG8rMSksaD1zRSh0aGlzLG4pLGUhPW8mJkRjKHMsZSxyLGUrMSxvLWUpLHRzKHIsZSxoKSxiRSh0aGlzLHIpLHRoaXMuYmkoZSxuKX0sbC5ZaD1mdW5jdGlvbihlKXt2YXIgbixyLHM7cz0ocj11KERuKHRoaXMuYSw0KSwxMjYpLHI9PW51bGw/MDpyLmxlbmd0aCksbj1GaXQodGhpcyxzKzEpLG9udChuLHMsc0UodGhpcyxlKSksYkUodGhpcyxuKSx0aGlzLmJpKHMsZSl9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE5KdCh0aGlzKX0sbC4kaD1mdW5jdGlvbigpe3JldHVybiBuZXcgWEt0KHRoaXMpfSxsLl9oPWZ1bmN0aW9uKGUpe3ZhciBuLHI7aWYocj0obj11KERuKHRoaXMuYSw0KSwxMjYpLG49PW51bGw/MDpuLmxlbmd0aCksZTwwfHxlPnIpdGhyb3cgaXQobmV3IHFtKGUscikpO3JldHVybiBuZXcgX1h0KHRoaXMsZSl9LGwuJGI9ZnVuY3Rpb24oKXt2YXIgZSxuOysrdGhpcy5qLGU9dShEbih0aGlzLmEsNCksMTI2KSxuPWU9PW51bGw/MDplLmxlbmd0aCxiRSh0aGlzLG51bGwpLFlydCh0aGlzLG4sZSl9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtpZihuPXUoRG4odGhpcy5hLDQpLDEyNiksbiE9bnVsbCl7aWYoZSE9bnVsbCl7Zm9yKHM9bixvPTAsaD1zLmxlbmd0aDtvPGg7KytvKWlmKHI9c1tvXSx5aShlLHIpKXJldHVybiEwfWVsc2UgZm9yKHM9bixvPTAsaD1zLmxlbmd0aDtvPGg7KytvKWlmKHI9c1tvXSxWdChyKT09PVZ0KGUpKXJldHVybiEwfXJldHVybiExfSxsLlhiPWZ1bmN0aW9uKGUpe3ZhciBuLHI7aWYobj11KERuKHRoaXMuYSw0KSwxMjYpLHI9bj09bnVsbD8wOm4ubGVuZ3RoLGU+PXIpdGhyb3cgaXQobmV3IHFtKGUscikpO3JldHVybiBuW2VdfSxsLlhjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZihuPXUoRG4odGhpcy5hLDQpLDEyNiksbiE9bnVsbCl7aWYoZSE9bnVsbCl7Zm9yKHI9MCxzPW4ubGVuZ3RoO3I8czsrK3IpaWYoeWkoZSxuW3JdKSlyZXR1cm4gcn1lbHNlIGZvcihyPTAscz1uLmxlbmd0aDtyPHM7KytyKWlmKFZ0KG5bcl0pPT09VnQoZSkpcmV0dXJuIHJ9cmV0dXJuLTF9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdShEbih0aGlzLmEsNCksMTI2KT09bnVsbH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRkp0KHRoaXMpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLS3QodGhpcyl9LGwuWmM9ZnVuY3Rpb24oZSl7dmFyIG4scjtpZihyPShuPXUoRG4odGhpcy5hLDQpLDEyNiksbj09bnVsbD8wOm4ubGVuZ3RoKSxlPDB8fGU+cil0aHJvdyBpdChuZXcgcW0oZSxyKSk7cmV0dXJuIG5ldyBDWHQodGhpcyxlKX0sbC5paT1mdW5jdGlvbihlLG4pe3ZhciByLHMsbztpZihyPWppZSh0aGlzKSxvPXI9PW51bGw/MDpyLmxlbmd0aCxlPj1vKXRocm93IGl0KG5ldyB5byhpdXQrZStEMitvKSk7aWYobj49byl0aHJvdyBpdChuZXcgeW8oc3V0K24rRDIrbykpO3JldHVybiBzPXJbbl0sZSE9biYmKGU8bj9EYyhyLGUscixlKzEsbi1lKTpEYyhyLG4rMSxyLG4sZS1uKSx0cyhyLGUscyksYkUodGhpcyxyKSksc30sbC5raT1mdW5jdGlvbihlKXtyZXR1cm4gdShEbih0aGlzLmEsNCksMTI2KVtlXX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gVGJuKHRoaXMsZSl9LGwubWk9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3JldHVybiByPWppZSh0aGlzKSxzPXJbZV0sb250KHIsZSxzRSh0aGlzLG4pKSxiRSh0aGlzLHIpLHN9LGwuZ2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT11KERuKHRoaXMuYSw0KSwxMjYpLGU9PW51bGw/MDplLmxlbmd0aH0sbC5QYz1mdW5jdGlvbigpe3ZhciBlLG4scjtyZXR1cm4gZT11KERuKHRoaXMuYSw0KSwxMjYpLHI9ZT09bnVsbD8wOmUubGVuZ3RoLG49TnQoRmZ0LGx1dCw0MTUsciwwLDEpLHI+MCYmRGMoZSwwLG4sMCxyKSxufSxsLlFjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztyZXR1cm4gbj11KERuKHRoaXMuYSw0KSwxMjYpLHM9bj09bnVsbD8wOm4ubGVuZ3RoLHM+MCYmKGUubGVuZ3RoPHMmJihyPU1EKG9sKGUpLmMscyksZT1yKSxEYyhuLDAsZSwwLHMpKSxlLmxlbmd0aD5zJiZ0cyhlLHMsbnVsbCksZX07dmFyIG41ZTtGKFJhLCJBcnJheURlbGVnYXRpbmdFTGlzdCIsMTk4MiksRCgxMDM4LDQwLHNhLEZKdCksbC5taj1mdW5jdGlvbigpe2lmKHRoaXMuYi5qIT10aGlzLmZ8fFZ0KHUoRG4odGhpcy5iLmEsNCksMTI2KSkhPT1WdCh0aGlzLmEpKXRocm93IGl0KG5ldyByaCl9LGwuUWI9ZnVuY3Rpb24oKXtmXyh0aGlzKSx0aGlzLmE9dShEbih0aGlzLmIuYSw0KSwxMjYpfSxGKFJhLCJBcnJheURlbGVnYXRpbmdFTGlzdC9FSXRlcmF0b3IiLDEwMzgpLEQoNzA2LDI3OCxuMCxLS3QsQ1h0KSxsLm1qPWZ1bmN0aW9uKCl7aWYodGhpcy5iLmohPXRoaXMuZnx8VnQodShEbih0aGlzLmIuYSw0KSwxMjYpKSE9PVZ0KHRoaXMuYSkpdGhyb3cgaXQobmV3IHJoKX0sbC5waj1mdW5jdGlvbihlKXtJc2UodGhpcyxlKSx0aGlzLmE9dShEbih0aGlzLmIuYSw0KSwxMjYpfSxsLlFiPWZ1bmN0aW9uKCl7Zl8odGhpcyksdGhpcy5hPXUoRG4odGhpcy5iLmEsNCksMTI2KX0sRihSYSwiQXJyYXlEZWxlZ2F0aW5nRUxpc3QvRUxpc3RJdGVyYXRvciIsNzA2KSxEKDEwMzksMzQxLHNhLE5KdCksbC5taj1mdW5jdGlvbigpe2lmKHRoaXMuYi5qIT10aGlzLmZ8fFZ0KHUoRG4odGhpcy5iLmEsNCksMTI2KSkhPT1WdCh0aGlzLmEpKXRocm93IGl0KG5ldyByaCl9LEYoUmEsIkFycmF5RGVsZWdhdGluZ0VMaXN0L05vblJlc29sdmluZ0VJdGVyYXRvciIsMTAzOSksRCg3MDcsMzg1LG4wLFhLdCxfWHQpLGwubWo9ZnVuY3Rpb24oKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxWdCh1KERuKHRoaXMuYi5hLDQpLDEyNikpIT09VnQodGhpcy5hKSl0aHJvdyBpdChuZXcgcmgpfSxGKFJhLCJBcnJheURlbGVnYXRpbmdFTGlzdC9Ob25SZXNvbHZpbmdFTGlzdEl0ZXJhdG9yIiw3MDcpLEQoNjA2LDI5NSxib3Qsbm50KSxGKFJhLCJCYXNpY0VMaXN0L0Jhc2ljSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsNjA2KSxEKDY5Niw2MyxMZCxuMnQpLGwuVmM9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLkZjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuV2M9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLkdjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuJGI9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLnFpPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5aaCgpfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGgoKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faChlKX0sbC5paT1mdW5jdGlvbihlLG4pe3Rocm93IGl0KG5ldyBPcil9LGwuamk9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLiRjPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwuTWM9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5fYz1mdW5jdGlvbihlLG4pe3Rocm93IGl0KG5ldyBPcil9LEYoUmEsIkJhc2ljRUxpc3QvVW5tb2RpZmlhYmxlRUxpc3QiLDY5NiksRCg3MDUsMSx7MzoxLDIwOjEsMTQ6MSwxNToxLDU4OjEsNTg5OjF9KSxsLlZjPWZ1bmN0aW9uKGUsbil7Q1FlKHRoaXMsZSx1KG4sNDIpKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gaFplKHRoaXMsdShlLDQyKSl9LGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gdShBdCh0aGlzLmMsZSksMTMzKX0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiB1KHRoaXMuYy5paShlLG4pLDQyKX0sbC5qaT1mdW5jdGlvbihlLG4pe19RZSh0aGlzLGUsdShuLDQyKSl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHRoaXMsMTYpKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gdSh0aGlzLmMuJGMoZSksNDIpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG1ubih0aGlzLGUsdShuLDQyKSl9LGwuYWQ9ZnVuY3Rpb24oZSl7cjQodGhpcyxlKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxNil9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHRoaXMsMTYpKX0sbC5XYz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmMuV2MoZSxuKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jLkdjKGUpfSxsLiRiPWZ1bmN0aW9uKCl7dGhpcy5jLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYy5IYyhlKX0sbC5JYz1mdW5jdGlvbihlKXtyZXR1cm4gTkQodGhpcy5jLGUpfSxsLnFqPWZ1bmN0aW9uKCl7dmFyIGUsbixyO2lmKHRoaXMuZD09bnVsbCl7Zm9yKHRoaXMuZD1OdChYQXQsUjh0LDYzLDIqdGhpcy5mKzEsMCwxKSxyPXRoaXMuZSx0aGlzLmY9MCxuPXRoaXMuYy5LYygpO24uZSE9bi5pLmdjKCk7KWU9dShuLm5qKCksMTMzKSxKeih0aGlzLGUpO3RoaXMuZT1yfX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geFl0KHRoaXMsZSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4ga3l0KHRoaXMuYyl9LGwuWGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYy5YYyhlKX0sbC5yaj1mdW5jdGlvbigpe3RoaXMuYz1uZXcgenp0KHRoaXMpfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZj09MH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuS2MoKX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuWWMoKX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jLlpjKGUpfSxsLnNqPWZ1bmN0aW9uKCl7cmV0dXJuIHdEKHRoaXMpfSxsLnRqPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gbmV3IFJZdChlLG4scil9LGwudWo9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtwfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiB0bmUodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IFFkKHRoaXMuYyxlLG4pfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5QYygpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmMuUWMoZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gZzN0KHRoaXMuYyl9LGwuZT0wLGwuZj0wLEYoUmEsIkJhc2ljRU1hcCIsNzA1KSxEKDEwMzMsNjMsTGQsenp0KSxsLmJpPWZ1bmN0aW9uKGUsbil7Y0tlKHRoaXMsdShuLDEzMykpfSxsLmVpPWZ1bmN0aW9uKGUsbixyKXt2YXIgczsrKyhzPXRoaXMsdShuLDEzMykscykuYS5lfSxsLmZpPWZ1bmN0aW9uKGUsbil7dUtlKHRoaXMsdShuLDEzMykpfSxsLmdpPWZ1bmN0aW9uKGUsbixyKXtaUWUodGhpcyx1KG4sMTMzKSx1KHIsMTMzKSl9LGwuZGk9ZnVuY3Rpb24oZSxuKXtWbmUodGhpcy5hKX0sRihSYSwiQmFzaWNFTWFwLzEiLDEwMzMpLEQoMTAzNCw2MyxMZCxrcCksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoeTZuLEMwZSw2MTIsZSwwLDEpfSxGKFJhLCJCYXNpY0VNYXAvMiIsMTAzNCksRCgxMDM1LE4xLHp1LHF6dCksbC4kYj1mdW5jdGlvbigpe3RoaXMuYS5jLiRiKCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGlzdCh0aGlzLmEsZSl9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmY9PTA/KHk4KCkscFAuYSk6bmV3IEVIdCh0aGlzLmEpfSxsLk1jPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXRoaXMuYS5mLHF6KHRoaXMuYSxlKSx0aGlzLmEuZiE9bn0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZn0sRihSYSwiQmFzaWNFTWFwLzMiLDEwMzUpLEQoMTAzNiwyOCx4eSxIenQpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYy4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBBdWUodGhpcy5hLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wPyh5OCgpLHBQLmEpOm5ldyBUSHQodGhpcy5hKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZn0sRihSYSwiQmFzaWNFTWFwLzQiLDEwMzYpLEQoMTAzNyxOMSx6dSxWenQpLGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYy4kYigpfSxsLkhjPWZ1bmN0aW9uKGUpe3ZhciBuLHIscyxvLGgsZCx2LGssQztpZih0aGlzLmEuZj4wJiZfdChlLDQyKSYmKHRoaXMuYS5xaigpLGs9dShlLDQyKSx2PWsuY2QoKSxvPXY9PW51bGw/MDpIaSh2KSxoPXJ3dCh0aGlzLmEsbyksbj10aGlzLmEuZFtoXSxuKSl7Zm9yKHI9dShuLmcsMzY3KSxDPW4uaSxkPTA7ZDxDOysrZClpZihzPXJbZF0scy5TaCgpPT1vJiZzLkZiKGspKXJldHVybiEwfXJldHVybiExfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wPyh5OCgpLHBQLmEpOm5ldyBwcnQodGhpcy5hKX0sbC5NYz1mdW5jdGlvbihlKXtyZXR1cm4geWNlKHRoaXMsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LEYoUmEsIkJhc2ljRU1hcC81IiwxMDM3KSxEKDYxMywxLHNhLHBydCksbC5OYj1mdW5jdGlvbihlKXtiYSh0aGlzLGUpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYiE9LTF9LGwuUGI9ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLmYuZSE9dGhpcy5jKXRocm93IGl0KG5ldyByaCk7aWYodGhpcy5iPT0tMSl0aHJvdyBpdChuZXcgbGMpO3JldHVybiB0aGlzLmQ9dGhpcy5hLHRoaXMuZT10aGlzLmIsY2FlKHRoaXMpLGU9dSh0aGlzLmYuZFt0aGlzLmRdLmdbdGhpcy5lXSwxMzMpLHRoaXMudmooZSl9LGwuUWI9ZnVuY3Rpb24oKXtpZih0aGlzLmYuZSE9dGhpcy5jKXRocm93IGl0KG5ldyByaCk7aWYodGhpcy5lPT0tMSl0aHJvdyBpdChuZXcgT3UpO3RoaXMuZi5jLk1jKEF0KHRoaXMuZi5kW3RoaXMuZF0sdGhpcy5lKSksdGhpcy5jPXRoaXMuZi5lLHRoaXMuZT0tMSx0aGlzLmE9PXRoaXMuZCYmdGhpcy5iIT0tMSYmLS10aGlzLmJ9LGwudmo9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGwuYT0wLGwuYj0tMSxsLmM9MCxsLmQ9MCxsLmU9MCxGKFJhLCJCYXNpY0VNYXAvQmFzaWNFTWFwSXRlcmF0b3IiLDYxMyksRCgxMDMxLDYxMyxzYSxFSHQpLGwudmo9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2QoKX0sRihSYSwiQmFzaWNFTWFwL0Jhc2ljRU1hcEtleUl0ZXJhdG9yIiwxMDMxKSxEKDEwMzIsNjEzLHNhLFRIdCksbC52aj1mdW5jdGlvbihlKXtyZXR1cm4gZS5kZCgpfSxGKFJhLCJCYXNpY0VNYXAvQmFzaWNFTWFwVmFsdWVJdGVyYXRvciIsMTAzMiksRCgxMDMwLDEsbXYsR3p0KSxsLndjPWZ1bmN0aW9uKGUpe0s5KHRoaXMsZSl9LGwueWM9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBRaXQodGhpcyxlLG4scil9LGwuJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYy4kYigpfSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiByVXQodGhpcyxlKX0sbC51Yz1mdW5jdGlvbihlKXtyZXR1cm4gQXVlKHRoaXMuYSxlKX0sbC52Yz1mdW5jdGlvbigpe3JldHVybiB6YW4odGhpcy5hKX0sbC5GYj1mdW5jdGlvbihlKXtyZXR1cm4geFl0KHRoaXMuYSxlKX0sbC54Yz1mdW5jdGlvbihlKXtyZXR1cm4gWGYodGhpcy5hLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGt5dCh0aGlzLmEuYyl9LGwuZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmY9PTB9LGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gcWFuKHRoaXMuYSl9LGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXEodGhpcy5hLGUsbil9LGwuQmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHF6KHRoaXMuYSxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZn0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBnM3QodGhpcy5hLmMpfSxsLkNjPWZ1bmN0aW9uKCl7cmV0dXJuICRhbih0aGlzLmEpfSxGKFJhLCJCYXNpY0VNYXAvRGVsZWdhdGluZ01hcCIsMTAzMCksRCg2MTIsMSx7NDI6MSwxMzM6MSw2MTI6MX0sUll0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBfdChlLDQyKT8obj11KGUsNDIpLCh0aGlzLmIhPW51bGw/eWkodGhpcy5iLG4uY2QoKSk6VnQodGhpcy5iKT09PVZ0KG4uY2QoKSkpJiYodGhpcy5jIT1udWxsP3lpKHRoaXMuYyxuLmRkKCkpOlZ0KHRoaXMuYyk9PT1WdChuLmRkKCkpKSk6ITF9LGwuU2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmNkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5kZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hXih0aGlzLmM9PW51bGw/MDpIaSh0aGlzLmMpKX0sbC5UaD1mdW5jdGlvbihlKXt0aGlzLmE9ZX0sbC5VaD1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgS2IpfSxsLmVkPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXRoaXMuYyx0aGlzLmM9ZSxufSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYisiLT4iK3RoaXMuY30sbC5hPTA7dmFyIHk2bj1GKFJhLCJCYXNpY0VNYXAvRW50cnlJbXBsIiw2MTIpO0QoNTM2LDEse30sSWspLEYoUmEsIkJhc2ljRU1hcC9WaWV3Iiw1MzYpO3ZhciBwUDtEKDc2OCwxLHt9KSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiBrNXQoKHduKCksaW8pLGUpfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFB5dCgod24oKSxpbykpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGViKCh3bigpLGlvKSl9LEYoUmEsIkVDb2xsZWN0aW9ucy9CYXNpY0VtcHR5VW5tb2RpZmlhYmxlRUxpc3QiLDc2OCksRCgxMzEyLDEsbjAsY0IpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5SYj1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuU2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5QYj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBsYyl9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbC5VYj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBsYyl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4tMX0sbC5RYj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwuV2I9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sRihSYSwiRUNvbGxlY3Rpb25zL0Jhc2ljRW1wdHlVbm1vZGlmaWFibGVFTGlzdC8xIiwxMzEyKSxEKDEzMTAsNzY4LHsyMDoxLDE0OjEsMTU6MSw1ODoxfSxQcXQpLGwuVmM9ZnVuY3Rpb24oZSxuKXtHSHQoKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gVUh0KCl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gV0h0KCl9LGwuR2M9ZnVuY3Rpb24oZSl7cmV0dXJuIFlIdCgpfSxsLiRiPWZ1bmN0aW9uKCl7S0h0KCl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwuSmM9ZnVuY3Rpb24oZSl7dmEodGhpcyxlKX0sbC5YYj1mdW5jdGlvbihlKXtyZXR1cm4gczJ0KCh3bigpLGUpKSxudWxsfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybi0xfSxsLmRjPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlljPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hfSxsLmlpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFhIdCgpfSxsLmppPWZ1bmN0aW9uKGUsbil7UUh0KCl9LGwuTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHRoaXMsMTYpKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gWkh0KCl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEpIdCgpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRWdCgpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGwuYWQ9ZnVuY3Rpb24oZSl7cjQodGhpcyxlKX0sbC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcgX24odGhpcywxNil9LGwuT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRuKG51bGwsbmV3IF9uKHRoaXMsMTYpKX0sbC5iZD1mdW5jdGlvbihlLG4pe3JldHVybiB3bigpLG5ldyBRZChpbyxlLG4pfSxsLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHN2dCgod24oKSxpbykpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiB3bigpLGVJKGlvLGUpfSxGKFJhLCJFQ29sbGVjdGlvbnMvRW1wdHlVbm1vZGlmaWFibGVFTGlzdCIsMTMxMCksRCgxMzExLDc2OCx7MjA6MSwxNDoxLDE1OjEsNTg6MSw1ODk6MX0sRnF0KSxsLlZjPWZ1bmN0aW9uKGUsbil7R0h0KCl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFVIdCgpfSxsLldjPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFdIdCgpfSxsLkdjPWZ1bmN0aW9uKGUpe3JldHVybiBZSHQoKX0sbC4kYj1mdW5jdGlvbigpe0tIdCgpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLkljPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLkpjPWZ1bmN0aW9uKGUpe3ZhKHRoaXMsZSl9LGwuWGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHMydCgod24oKSxlKSksbnVsbH0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4tMX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiEwfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5ZYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYX0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiBYSHQoKX0sbC5qaT1mdW5jdGlvbihlLG4pe1FIdCgpfSxsLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih0aGlzLDE2KSl9LGwuJGM9ZnVuY3Rpb24oZSl7cmV0dXJuIFpIdCgpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBKSHQoKX0sbC5fYz1mdW5jdGlvbihlLG4pe3JldHVybiB0VnQoKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxsLmFkPWZ1bmN0aW9uKGUpe3I0KHRoaXMsZSl9LGwuTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9uKHRoaXMsMTYpfSxsLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBUbihudWxsLG5ldyBfbih0aGlzLDE2KSl9LGwuYmQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gd24oKSxuZXcgUWQoaW8sZSxuKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBzdnQoKHduKCksaW8pKX0sbC5RYz1mdW5jdGlvbihlKXtyZXR1cm4gd24oKSxlSShpbyxlKX0sbC5zaj1mdW5jdGlvbigpe3JldHVybiB3bigpLHduKCksdTB9LEYoUmEsIkVDb2xsZWN0aW9ucy9FbXB0eVVubW9kaWZpYWJsZUVNYXAiLDEzMTEpO3ZhciBaQXQ9S2koUmEsIkVudW1lcmF0b3IiKSxkVTtEKDI4MSwxLHsyODE6MX0sZmF0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiB0aGlzPT09ZT8hMDpfdChlLDI4MSk/KG49dShlLDI4MSksdGhpcy5mPT1uLmYmJiRlbih0aGlzLmksbi5pKSYmam50KHRoaXMuYSx0aGlzLmYmMjU2P24uZiYyNTY/bi5hOm51bGw6bi5mJjI1Nj9udWxsOm4uYSkmJmpudCh0aGlzLmQsbi5kKSYmam50KHRoaXMuZyxuLmcpJiZqbnQodGhpcy5lLG4uZSkmJlBmbih0aGlzLG4pKTohMX0sbC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gc2xlKHRoaXMpfSxsLmY9MDt2YXIgcjVlPTAsaTVlPTAsczVlPTAsYTVlPTAsSkF0PTAsdEx0PTAsZUx0PTAsbkx0PTAsckx0PTAsbzVlLG9BPTAsY0E9MCxjNWU9MCx1NWU9MCxnVSxpTHQ7RihSYSwiVVJJIiwyODEpLEQoMTA5MSw0MyxBNCxOcXQpLGwuemM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdShrbyh0aGlzLEJyKGUpLHUobiwyODEpKSwyODEpfSxGKFJhLCJVUkkvVVJJQ2FjaGUiLDEwOTEpLEQoNDk3LDYzLExkLE9rLEdqKSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoUmEsIlVuaXF1ZUVMaXN0Iiw0OTcpLEQoNTgxLDYwLFEwLFckKSxGKFJhLCJXcmFwcGVkRXhjZXB0aW9uIiw1ODEpO3ZhciBacj1LaShwaCxBMGUpLHQzPUtpKHBoLEwwZSksTXU9S2kocGgsTTBlKSxlMz1LaShwaCxEMGUpLHMxPUtpKHBoLEkwZSksVWg9S2kocGgsIkVDbGFzcyIpLE5mdD1LaShwaCwiRURhdGFUeXBlIiksbDVlO0QoMTE4Myw0MyxBNCxCcXQpLGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpP05jKHRoaXMsZSk6ZWMoTG8odGhpcy5mLGUpKX0sRihwaCwiRURhdGFUeXBlL0ludGVybmFsL0NvbnZlcnNpb25EZWxlZ2F0ZS9GYWN0b3J5L1JlZ2lzdHJ5L0ltcGwiLDExODMpO3ZhciBwVT1LaShwaCwiRUVudW0iKSxhZz1LaShwaCxPMGUpLGhvPUtpKHBoLFAwZSksV2g9S2kocGgsRjBlKSxZaCxWdj1LaShwaCxOMGUpLG4zPUtpKHBoLEIwZSk7RCgxMDI5LDEse30sbkopLGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTklMIn0sRihwaCwiRVN0cnVjdHVyYWxGZWF0dXJlL0ludGVybmFsL0R5bmFtaWNWYWx1ZUhvbGRlci8xIiwxMDI5KTt2YXIgaDVlO0QoMTAyOCw0MyxBNCxScXQpLGwueGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpP05jKHRoaXMsZSk6ZWMoTG8odGhpcy5mLGUpKX0sRihwaCwiRVN0cnVjdHVyYWxGZWF0dXJlL0ludGVybmFsL1NldHRpbmdEZWxlZ2F0ZS9GYWN0b3J5L1JlZ2lzdHJ5L0ltcGwiLDEwMjgpO3ZhciBodT1LaShwaCxSMGUpLFo2PUtpKHBoLCJFVmFsaWRhdG9yL1BhdHRlcm5NYXRjaGVyIiksc0x0LGFMdCxMbixhcCxyMyxMYixmNWUsZDVlLGc1ZSxNYixvcCxEYixHdixXMSxwNWUsYjVlLEtoLGNwLHc1ZSx1cCxpMyxsNSxRYSx2NWUsbTVlLFV2LGJVPUtpKCRpLCJGZWF0dXJlTWFwL0VudHJ5Iik7RCg1MzUsMSx7NzI6MX0sbGopLGwuYWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmRkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sRihNbiwiQmFzaWNFT2JqZWN0SW1wbC8xIiw1MzUpLEQoMTAyNywxLGh1dCxYR3QpLGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIFVydCh0aGlzLmEsdGhpcy5iLGUpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIE1RdCh0aGlzLmEsdGhpcy5iKX0sbC5XYj1mdW5jdGlvbihlKXt6dnQodGhpcy5hLHRoaXMuYixlKX0sbC5Yaj1mdW5jdGlvbigpe05ubih0aGlzLmEsdGhpcy5iKX0sRihNbiwiQmFzaWNFT2JqZWN0SW1wbC80IiwxMDI3KSxEKDE5ODMsMSx7MTA4OjF9KSxsLmJrPWZ1bmN0aW9uKGUpe3RoaXMuZT1lPT0wP3k1ZTpOdChRbixEZSwxLGUsNSwxKX0sbC5DaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lW2VdfSxsLkRoPWZ1bmN0aW9uKGUsbil7dGhpcy5lW2VdPW59LGwuRWg9ZnVuY3Rpb24oZSl7dGhpcy5lW2VdPW51bGx9LGwuY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLmRrPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE9yKX0sbC5laz1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwuZms9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxsLmdrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSE9bnVsbH0sbC5oaz1mdW5jdGlvbihlKXt0aGlzLmM9ZX0sbC5paz1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxsLmprPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBPcil9LGwua2s9ZnVuY3Rpb24oZSl7dGhpcy5kPWV9O3ZhciB5NWU7RihNbiwiQmFzaWNFT2JqZWN0SW1wbC9FUHJvcGVydGllc0hvbGRlckJhc2VJbXBsIiwxOTgzKSxEKDE4NSwxOTgzLHsxMDg6MX0sbmgpLGwuZGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5paz1mdW5jdGlvbihlKXt0aGlzLmE9ZX0sbC5qaz1mdW5jdGlvbihlKXt0aGlzLmI9ZX0sRihNbiwiQmFzaWNFT2JqZWN0SW1wbC9FUHJvcGVydGllc0hvbGRlckltcGwiLDE4NSksRCg1MDYsOTcsamRlLFBrKSxsLktnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC5QZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmt9LGwuUmc9ZnVuY3Rpb24oZSxuKXt0aGlzLmc9ZSx0aGlzLmk9bn0sbC5UZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmomMj90aGlzLnBoKCkuY2soKTp0aGlzLnpoKCl9LGwuVmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxsLk1nPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaiYxKSE9MH0sbC5laD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGwua2g9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5qJjQpIT0wfSxsLnBoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuayYmKHRoaXMuaz1uZXcgbmgpLHRoaXMua30sbC50aD1mdW5jdGlvbihlKXt0aGlzLnBoKCkuaGsoZSksZT90aGlzLmp8PTI6dGhpcy5qJj0tM30sbC52aD1mdW5jdGlvbihlKXt0aGlzLnBoKCkuamsoZSksZT90aGlzLmp8PTQ6dGhpcy5qJj0tNX0sbC56aD1mdW5jdGlvbigpe3JldHVybihIcCgpLExuKS5TfSxsLmk9MCxsLmo9MSxGKE1uLCJFT2JqZWN0SW1wbCIsNTA2KSxEKDc4MCw1MDYsezEwNToxLDkyOjEsOTA6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MX0send0KSxsLkNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVbZV19LGwuRGg9ZnVuY3Rpb24oZSxuKXt0aGlzLmVbZV09bn0sbC5FaD1mdW5jdGlvbihlKXt0aGlzLmVbZV09bnVsbH0sbC5UZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuWWc9ZnVuY3Rpb24oZSl7cmV0dXJuIEdpKHRoaXMuZCxlKX0sbC4kZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuZGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lIT1udWxsfSxsLnBoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuayYmKHRoaXMuaz1uZXcgdUIpLHRoaXMua30sbC50aD1mdW5jdGlvbihlKXt0aGlzLmQ9ZX0sbC55aD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmU9PW51bGwmJihlPUpuKHRoaXMuZCksdGhpcy5lPWU9PTA/eDVlOk50KFFuLERlLDEsZSw1LDEpKSx0aGlzfSxsLkFoPWZ1bmN0aW9uKCl7cmV0dXJuIDB9O3ZhciB4NWU7RihNbiwiRHluYW1pY0VPYmplY3RJbXBsIiw3ODApLEQoMTM3Niw3ODAsezEwNToxLDQyOjEsOTI6MSw5MDoxLDEzMzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxfSxoS3QpLGwuRmI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXM9PT1lfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFB3KHRoaXMpfSxsLnRoPWZ1bmN0aW9uKGUpe3RoaXMuZD1lLHRoaXMuYj1tSShlLCJrZXkiKSx0aGlzLmM9bUkoZSxaXyl9LGwuU2g9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5hPT0tMSYmKGU9aWl0KHRoaXMsdGhpcy5iKSx0aGlzLmE9ZT09bnVsbD8wOkhpKGUpKSx0aGlzLmF9LGwuY2Q9ZnVuY3Rpb24oKXtyZXR1cm4gaWl0KHRoaXMsdGhpcy5iKX0sbC5kZD1mdW5jdGlvbigpe3JldHVybiBpaXQodGhpcyx0aGlzLmMpfSxsLlRoPWZ1bmN0aW9uKGUpe3RoaXMuYT1lfSxsLlVoPWZ1bmN0aW9uKGUpe3p2dCh0aGlzLHRoaXMuYixlKX0sbC5lZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbj1paXQodGhpcyx0aGlzLmMpLHp2dCh0aGlzLHRoaXMuYyxlKSxufSxsLmE9MCxGKE1uLCJEeW5hbWljRU9iamVjdEltcGwvQmFzaWNFTWFwRW50cnkiLDEzNzYpLEQoMTM3NywxLHsxMDg6MX0sdUIpLGwuYms9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5DaD1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxsLkRoPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5FaD1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxsLmNrPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE9yKX0sbC5kaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLmZrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5naz1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LGwuaGs9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5paz1mdW5jdGlvbihlKXt0aGlzLmE9ZX0sbC5qaz1mdW5jdGlvbihlKXt0aGlzLmI9ZX0sbC5raz1mdW5jdGlvbihlKXt0aGlzLmM9ZX0sRihNbiwiRHluYW1pY0VPYmplY3RJbXBsL0R5bmFtaWNFUHJvcGVydGllc0hvbGRlckltcGwiLDEzNzcpLEQoNTEwLDE1MCx7MTA1OjEsOTI6MSw5MDoxLDU5MDoxLDE0NzoxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDUxMDoxLDE1MDoxLDExNDoxLDExNToxfSxsQiksbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gYTR0KHRoaXMsZSl9LGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLmQ7Y2FzZSAyOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBrbCgoZG4oKSxRYSksY2MsdGhpcykpLHRoaXMuYik6KCF0aGlzLmImJih0aGlzLmI9bmV3IGtsKChkbigpLFFhKSxjYyx0aGlzKSksd0QodGhpcy5iKSk7Y2FzZSAzOnJldHVybiBGUXQodGhpcyk7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IEFzKF9iLHRoaXMsNCkpLHRoaXMuYTtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgWTMoX2IsdGhpcyw1KSksdGhpcy5jfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksYXApKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxhcCksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLFpjKHRoaXMuQWIsZSxyKTtjYXNlIDM6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/YTR0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLHJ2dCh0aGlzLHUoZSwxNDcpLHIpfXJldHVybiBoPXUoeW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8KGRuKCksYXApKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsc3UodGhpcyksbi1KbigoZG4oKSxhcCkpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBrbCgoZG4oKSxRYSksY2MsdGhpcykpLE9qKHRoaXMuYixlLHIpO2Nhc2UgMzpyZXR1cm4gcnZ0KHRoaXMsbnVsbCxyKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgQXMoX2IsdGhpcyw0KSksQmEodGhpcy5hLGUscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxhcCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLGFwKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy5kIT1udWxsO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmYhPTA7Y2FzZSAzOnJldHVybiEhRlF0KHRoaXMpO2Nhc2UgNDpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSA1OnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MH1yZXR1cm4gb2godGhpcyxlLUpuKChkbigpLGFwKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8YXApLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxpcyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6Q2VuKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcga2woKGRuKCksUWEpLGNjLHRoaXMpKSx4eih0aGlzLmIsbik7cmV0dXJuO2Nhc2UgMzpLY2UodGhpcyx1KG4sMTQ3KSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBBcyhfYix0aGlzLDQpKSx4cih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IEFzKF9iLHRoaXMsNCkpLGlzKHRoaXMuYSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmMmJih0aGlzLmM9bmV3IFkzKF9iLHRoaXMsNSkpLHhyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgWTMoX2IsdGhpcyw1KSksaXModGhpcy5jLHUobiwxNCkpO3JldHVybn1naCh0aGlzLGUtSm4oKGRuKCksYXApKSx5bigocj11KERuKHRoaXMsMTYpLDI2KSxyfHxhcCksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxhcH0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOm95dCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcga2woKGRuKCksUWEpLGNjLHRoaXMpKSx0aGlzLmIuYy4kYigpO3JldHVybjtjYXNlIDM6S2NlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBBcyhfYix0aGlzLDQpKSx4cih0aGlzLmEpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgWTMoX2IsdGhpcyw1KSkseHIodGhpcy5jKTtyZXR1cm59ZmgodGhpcyxlLUpuKChkbigpLGFwKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8YXApLGUpKX0sbC5JYj1mdW5jdGlvbigpe3JldHVybiBsaWUodGhpcyl9LGwuZD1udWxsLEYoTW4sIkVBbm5vdGF0aW9uSW1wbCIsNTEwKSxEKDE1MSw3MDUsajh0LF9sKSxsLlhoPWZ1bmN0aW9uKGUsbil7b1FlKHRoaXMsZSx1KG4sNDIpKX0sbC5saz1mdW5jdGlvbihlLG4pe3JldHVybiBlSmUodGhpcyx1KGUsNDIpLG4pfSxsLnBpPWZ1bmN0aW9uKGUpe3JldHVybiB1KHUodGhpcy5jLDY5KS5waShlKSwxMzMpfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5jLDY5KS5aaCgpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5jLDY5KS4kaCgpfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiB1KHRoaXMuYyw2OSkuX2goZSl9LGwubWs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gT2oodGhpcyxlLG4pfSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiB1KHRoaXMuYyw3NikuV2ooZSl9LGwucmo9ZnVuY3Rpb24oKXt9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzLmMsNzYpLmZqKCl9LGwudGo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPXUoUmwodGhpcy5iKS5OaCgpLkpoKHRoaXMuYiksMTMzKSxzLlRoKGUpLHMuVWgobikscy5lZChyKSxzfSxsLnVqPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfcHQodGhpcyl9LGwuV2I9ZnVuY3Rpb24oZSl7eHoodGhpcyxlKX0sbC5Yaj1mdW5jdGlvbigpe3UodGhpcy5jLDc2KS5YaigpfSxGKCRpLCJFY29yZUVNYXAiLDE1MSksRCgxNTgsMTUxLGo4dCxrbCksbC5xaj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtpZih0aGlzLmQ9PW51bGwpe2ZvcihoPU50KFhBdCxSOHQsNjMsMip0aGlzLmYrMSwwLDEpLHI9dGhpcy5jLktjKCk7ci5lIT1yLmkuZ2MoKTspbj11KHIubmooKSwxMzMpLHM9bi5TaCgpLG89KHMmd2kpJWgubGVuZ3RoLGU9aFtvXSwhZSYmKGU9aFtvXT1uZXcgX3B0KHRoaXMpKSxlLkZjKG4pO3RoaXMuZD1ofX0sRihNbiwiRUFubm90YXRpb25JbXBsLzEiLDE1OCksRCgyODQsNDM4LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0NzI6MSw0OToxLDk3OjEsMTUwOjEsMjg0OjEsMTE0OjEsMTE1OjF9KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBObigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIHBlKHRoaXMucyk7Y2FzZSA1OnJldHVybiBwZSh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gTm4oKSwhIXRoaXMuJGooKTtjYXNlIDc6cmV0dXJuIE5uKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/RGgodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xfXJldHVybiB1aCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLGUpLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgOTpyZXR1cm4gbnJ0KHRoaXMscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKHRoaXMuemgoKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdGhpcy4kaigpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wKX1yZXR1cm4gb2godGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxpcyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6dGhpcy5MaChCcihuKSk7cmV0dXJuO2Nhc2UgMjp6Zyh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMzpxZyh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgNDpSZyh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgNTp0aGlzLm9rKHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgODpiMih0aGlzLHUobiwxMzgpKTtyZXR1cm47Y2FzZSA5OnM9RjEodGhpcyx1KG4sODcpLG51bGwpLHMmJnMuRmkoKTtyZXR1cm59Z2godGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKHI9dShEbih0aGlzLDE2KSwyNikscnx8dGhpcy56aCgpKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLG01ZX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6dGhpcy5MaChudWxsKTtyZXR1cm47Y2FzZSAyOnpnKHRoaXMsITApO3JldHVybjtjYXNlIDM6cWcodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDpSZyh0aGlzLDApO3JldHVybjtjYXNlIDU6dGhpcy5vaygxKTtyZXR1cm47Y2FzZSA4OmIyKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPUYxKHRoaXMsbnVsbCxudWxsKSxyJiZyLkZpKCk7cmV0dXJufWZoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7RGgodGhpcyksdGhpcy5CYnw9MX0sbC5Zaj1mdW5jdGlvbigpe3JldHVybiBEaCh0aGlzKX0sbC5aaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnR9LGwuJGo9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT10aGlzLnQsZT4xfHxlPT0tMX0sbC5oaT1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJjUxMikhPTB9LGwubms9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZTN0KHRoaXMsZSxuKX0sbC5vaz1mdW5jdGlvbihlKXtyeSh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGY1dCh0aGlzKX0sbC5zPTAsbC50PTEsRihNbiwiRVR5cGVkRWxlbWVudEltcGwiLDI4NCksRCg0NDksMjg0LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwxNzA6MSw2NjoxLDEwODoxLDQ3MjoxLDQ5OjEsOTc6MSwxNTA6MSw0NDk6MSwyODQ6MSwxMTQ6MSwxMTU6MSw2Nzc6MX0pLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIFVzZSh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBObigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIHBlKHRoaXMucyk7Y2FzZSA1OnJldHVybiBwZSh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gTm4oKSwhIXRoaXMuJGooKTtjYXNlIDc6cmV0dXJuIE5uKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/RGgodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIE5uKCksISEodGhpcy5CYiZ4Zik7Y2FzZSAxMTpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJkR5KTtjYXNlIDEyOnJldHVybiBObigpLCEhKHRoaXMuQmImRXkpO2Nhc2UgMTM6cmV0dXJuIHRoaXMuajtjYXNlIDE0OnJldHVybiBTRSh0aGlzKTtjYXNlIDE1OnJldHVybiBObigpLCEhKHRoaXMuQmImSHUpO2Nhc2UgMTY6cmV0dXJuIE5uKCksISEodGhpcy5CYiZtZCk7Y2FzZSAxNzpyZXR1cm4gWW0odGhpcyl9cmV0dXJuIHVoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLFpjKHRoaXMuQWIsZSxyKTtjYXNlIDE3OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP1VzZSh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSxIbCh0aGlzLGUsMTcscil9cmV0dXJuIGg9dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyxzdSh0aGlzKSxuLUpuKHRoaXMuemgoKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSA5OnJldHVybiBucnQodGhpcyxyKTtjYXNlIDE3OnJldHVybiBIbCh0aGlzLG51bGwsMTcscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKHRoaXMuemgoKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdGhpcy4kaigpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJnhmKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJkR5KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJkV5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gU0UodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZIdSkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZtZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIVltKHRoaXMpfXJldHVybiBvaCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByLHM7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLGlzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpNcnQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMjp6Zyh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMzpxZyh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgNDpSZyh0aGlzLHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgNTp0aGlzLm9rKHUobiwxOSkuYSk7cmV0dXJuO2Nhc2UgODpiMih0aGlzLHUobiwxMzgpKTtyZXR1cm47Y2FzZSA5OnM9RjEodGhpcyx1KG4sODcpLG51bGwpLHMmJnMuRmkoKTtyZXR1cm47Y2FzZSAxMDpsRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTE6ZEUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDEyOmhFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMzpyMnQodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgMTU6ZkUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDE2OmdFKHRoaXMsamUoUmUobikpKTtyZXR1cm59Z2godGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKHI9dShEbih0aGlzLDE2KSwyNikscnx8dGhpcy56aCgpKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLHY1ZX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6X3QodGhpcy5DYiw4OCkmJmd5KHNsKHUodGhpcy5DYiw4OCkpLDQpLFFjKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjp6Zyh0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOnFnKHRoaXMsITApO3JldHVybjtjYXNlIDQ6UmcodGhpcywwKTtyZXR1cm47Y2FzZSA1OnRoaXMub2soMSk7cmV0dXJuO2Nhc2UgODpiMih0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj1GMSh0aGlzLG51bGwsbnVsbCksciYmci5GaSgpO3JldHVybjtjYXNlIDEwOmxFKHRoaXMsITApO3JldHVybjtjYXNlIDExOmRFKHRoaXMsITEpO3JldHVybjtjYXNlIDEyOmhFKHRoaXMsITEpO3JldHVybjtjYXNlIDEzOnRoaXMuaT1udWxsLGZ6KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6ZkUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTY6Z0UodGhpcywhMSk7cmV0dXJufWZoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7TTgoVG8oKCR1KCkseWEpLHRoaXMpKSxEaCh0aGlzKSx0aGlzLkJifD0xfSxsLkdqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0sbC56aj1mdW5jdGlvbigpe3JldHVybiBTRSh0aGlzKX0sbC5Iaj1mdW5jdGlvbigpe3JldHVybiBZbSh0aGlzKX0sbC5Maj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLnBrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua30sbC5haj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm59LGwuTWo9ZnVuY3Rpb24oKXtyZXR1cm4gY3EodGhpcyl9LGwuTmo9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGgsZCx2LGs7cmV0dXJuIHRoaXMucHx8KHI9WW0odGhpcyksKHIuaT09bnVsbCYmdmQociksci5pKS5sZW5ndGgscz10aGlzLkxqKCkscyYmSm4oWW0ocykpLG89RGgodGhpcyksZD1vLkJqKCksZT1kP2QuaSYxP2Q9PXBsP1JzOmQ9PUNyP2phOmQ9PWEzP2k3OmQ9PWFhP2xhOmQ9PU9iP1N2OmQ9PWc1P0F2OmQ9PUd1P002OnVTOmQ6bnVsbCxuPVNFKHRoaXMpLHY9by56aigpLHNobih0aGlzKSx0aGlzLkJiJm1kJiYoKGg9ZDR0KCgkdSgpLHlhKSxyKSkmJmghPXRoaXN8fChoPUt4KFRvKHlhLHRoaXMpKSkpP3RoaXMucD1uZXcgWkd0KHRoaXMsaCk6dGhpcy4kaigpP3RoaXMucmsoKT9zP3RoaXMuQmImSHU/ZT90aGlzLnNrKCk/dGhpcy5wPW5ldyBuMig0NyxlLHRoaXMscyk6dGhpcy5wPW5ldyBuMig1LGUsdGhpcyxzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyBzMig0Nix0aGlzLHMpOnRoaXMucD1uZXcgczIoNCx0aGlzLHMpOmU/dGhpcy5zaygpP3RoaXMucD1uZXcgbjIoNDksZSx0aGlzLHMpOnRoaXMucD1uZXcgbjIoNyxlLHRoaXMscyk6dGhpcy5zaygpP3RoaXMucD1uZXcgczIoNDgsdGhpcyxzKTp0aGlzLnA9bmV3IHMyKDYsdGhpcyxzKTp0aGlzLkJiJkh1P2U/ZT09UDI/dGhpcy5wPW5ldyBJZyg1MCx0NWUsdGhpcyk6dGhpcy5zaygpP3RoaXMucD1uZXcgSWcoNDMsZSx0aGlzKTp0aGlzLnA9bmV3IElnKDEsZSx0aGlzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyBQZyg0Mix0aGlzKTp0aGlzLnA9bmV3IFBnKDAsdGhpcyk6ZT9lPT1QMj90aGlzLnA9bmV3IElnKDQxLHQ1ZSx0aGlzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyBJZyg0NSxlLHRoaXMpOnRoaXMucD1uZXcgSWcoMyxlLHRoaXMpOnRoaXMuc2soKT90aGlzLnA9bmV3IFBnKDQ0LHRoaXMpOnRoaXMucD1uZXcgUGcoMix0aGlzKTpfdChvLDE0OCk/ZT09YlU/dGhpcy5wPW5ldyBQZyg0MCx0aGlzKTp0aGlzLkJiJjUxMj90aGlzLkJiJkh1P2U/dGhpcy5wPW5ldyBJZyg5LGUsdGhpcyk6dGhpcy5wPW5ldyBQZyg4LHRoaXMpOmU/dGhpcy5wPW5ldyBJZygxMSxlLHRoaXMpOnRoaXMucD1uZXcgUGcoMTAsdGhpcyk6dGhpcy5CYiZIdT9lP3RoaXMucD1uZXcgSWcoMTMsZSx0aGlzKTp0aGlzLnA9bmV3IFBnKDEyLHRoaXMpOmU/dGhpcy5wPW5ldyBJZygxNSxlLHRoaXMpOnRoaXMucD1uZXcgUGcoMTQsdGhpcyk6cz8oaz1zLnQsaz4xfHxrPT0tMT90aGlzLnNrKCk/dGhpcy5CYiZIdT9lP3RoaXMucD1uZXcgbjIoMjUsZSx0aGlzLHMpOnRoaXMucD1uZXcgczIoMjQsdGhpcyxzKTplP3RoaXMucD1uZXcgbjIoMjcsZSx0aGlzLHMpOnRoaXMucD1uZXcgczIoMjYsdGhpcyxzKTp0aGlzLkJiJkh1P2U/dGhpcy5wPW5ldyBuMigyOSxlLHRoaXMscyk6dGhpcy5wPW5ldyBzMigyOCx0aGlzLHMpOmU/dGhpcy5wPW5ldyBuMigzMSxlLHRoaXMscyk6dGhpcy5wPW5ldyBzMigzMCx0aGlzLHMpOnRoaXMuc2soKT90aGlzLkJiJkh1P2U/dGhpcy5wPW5ldyBuMigzMyxlLHRoaXMscyk6dGhpcy5wPW5ldyBzMigzMix0aGlzLHMpOmU/dGhpcy5wPW5ldyBuMigzNSxlLHRoaXMscyk6dGhpcy5wPW5ldyBzMigzNCx0aGlzLHMpOnRoaXMuQmImSHU/ZT90aGlzLnA9bmV3IG4yKDM3LGUsdGhpcyxzKTp0aGlzLnA9bmV3IHMyKDM2LHRoaXMscyk6ZT90aGlzLnA9bmV3IG4yKDM5LGUsdGhpcyxzKTp0aGlzLnA9bmV3IHMyKDM4LHRoaXMscykpOnRoaXMuc2soKT90aGlzLkJiJkh1P2U/dGhpcy5wPW5ldyBJZygxNyxlLHRoaXMpOnRoaXMucD1uZXcgUGcoMTYsdGhpcyk6ZT90aGlzLnA9bmV3IElnKDE5LGUsdGhpcyk6dGhpcy5wPW5ldyBQZygxOCx0aGlzKTp0aGlzLkJiJkh1P2U/dGhpcy5wPW5ldyBJZygyMSxlLHRoaXMpOnRoaXMucD1uZXcgUGcoMjAsdGhpcyk6ZT90aGlzLnA9bmV3IElnKDIzLGUsdGhpcyk6dGhpcy5wPW5ldyBQZygyMix0aGlzKTp0aGlzLnFrKCk/dGhpcy5zaygpP3RoaXMucD1uZXcgall0KHUobywyNiksdGhpcyxzKTp0aGlzLnA9bmV3ICR2dCh1KG8sMjYpLHRoaXMscyk6X3QobywxNDgpP2U9PWJVP3RoaXMucD1uZXcgUGcoNDAsdGhpcyk6dGhpcy5CYiZIdT9lP3RoaXMucD1uZXcgQkt0KG4sdix0aGlzLChyc3QoKSxkPT1Dcj9kTHQ6ZD09cGw/Y0x0OmQ9PU9iP2dMdDpkPT1hMz9mTHQ6ZD09YWE/aEx0OmQ9PWc1P3BMdDpkPT1HdT91THQ6ZD09eGg/bEx0OmpmdCkpOnRoaXMucD1uZXcgS1h0KHUobywxNDgpLG4sdix0aGlzKTplP3RoaXMucD1uZXcgTkt0KG4sdix0aGlzLChyc3QoKSxkPT1Dcj9kTHQ6ZD09cGw/Y0x0OmQ9PU9iP2dMdDpkPT1hMz9mTHQ6ZD09YWE/aEx0OmQ9PWc1P3BMdDpkPT1HdT91THQ6ZD09eGg/bEx0OmpmdCkpOnRoaXMucD1uZXcgWVh0KHUobywxNDgpLG4sdix0aGlzKTp0aGlzLnJrKCk/cz90aGlzLkJiJkh1P3RoaXMuc2soKT90aGlzLnA9bmV3IHpZdCh1KG8sMjYpLHRoaXMscyk6dGhpcy5wPW5ldyBEd3QodShvLDI2KSx0aGlzLHMpOnRoaXMuc2soKT90aGlzLnA9bmV3ICRZdCh1KG8sMjYpLHRoaXMscyk6dGhpcy5wPW5ldyBJbnQodShvLDI2KSx0aGlzLHMpOnRoaXMuQmImSHU/dGhpcy5zaygpP3RoaXMucD1uZXcgTld0KHUobywyNiksdGhpcyk6dGhpcy5wPW5ldyBHMnQodShvLDI2KSx0aGlzKTp0aGlzLnNrKCk/dGhpcy5wPW5ldyBGV3QodShvLDI2KSx0aGlzKTp0aGlzLnA9bmV3IHZudCh1KG8sMjYpLHRoaXMpOnRoaXMuc2soKT9zP3RoaXMuQmImSHU/dGhpcy5wPW5ldyBxWXQodShvLDI2KSx0aGlzLHMpOnRoaXMucD1uZXcgTHd0KHUobywyNiksdGhpcyxzKTp0aGlzLkJiJkh1P3RoaXMucD1uZXcgQld0KHUobywyNiksdGhpcyk6dGhpcy5wPW5ldyBVMnQodShvLDI2KSx0aGlzKTpzP3RoaXMuQmImSHU/dGhpcy5wPW5ldyBIWXQodShvLDI2KSx0aGlzLHMpOnRoaXMucD1uZXcgTXd0KHUobywyNiksdGhpcyxzKTp0aGlzLkJiJkh1P3RoaXMucD1uZXcgUld0KHUobywyNiksdGhpcyk6dGhpcy5wPW5ldyBVaih1KG8sMjYpLHRoaXMpKSx0aGlzLnB9LGwuSWo9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZ4ZikhPTB9LGwucWs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5yaz1mdW5jdGlvbigpe3JldHVybiExfSxsLkpqPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImbWQpIT0wfSxsLk9qPWZ1bmN0aW9uKCl7cmV0dXJuIGFpdCh0aGlzKX0sbC5zaz1mdW5jdGlvbigpe3JldHVybiExfSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImSHUpIT0wfSxsLnRrPWZ1bmN0aW9uKGUpe3RoaXMuaz1lfSxsLkxoPWZ1bmN0aW9uKGUpe01ydCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7cmV0dXJuIF9xKHRoaXMpfSxsLmU9ITEsbC5uPTAsRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbCIsNDQ5KSxEKDMyMiw0NDksezEwNToxLDkyOjEsOTA6MSwzNDoxLDE0NzoxLDE5MToxLDU2OjEsMTcwOjEsNjY6MSwxMDg6MSw0NzI6MSw0OToxLDk3OjEsMzIyOjEsMTUwOjEsNDQ5OjEsMjg0OjEsMTE0OjEsMTE1OjEsNjc3OjF9LHJldCksbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIE5uKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBwZSh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gcGUodGhpcy50KTtjYXNlIDY6cmV0dXJuIE5uKCksISFjNXQodGhpcyk7Y2FzZSA3OnJldHVybiBObigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP0RoKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiBObigpLCEhKHRoaXMuQmImeGYpO2Nhc2UgMTE6cmV0dXJuIE5uKCksISEodGhpcy5CYiZEeSk7Y2FzZSAxMjpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJkV5KTtjYXNlIDEzOnJldHVybiB0aGlzLmo7Y2FzZSAxNDpyZXR1cm4gU0UodGhpcyk7Y2FzZSAxNTpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJkh1KTtjYXNlIDE2OnJldHVybiBObigpLCEhKHRoaXMuQmImbWQpO2Nhc2UgMTc6cmV0dXJuIFltKHRoaXMpO2Nhc2UgMTg6cmV0dXJuIE5uKCksISEodGhpcy5CYiZkYyk7Y2FzZSAxOTpyZXR1cm4gbj9UaXQodGhpcyk6S0p0KHRoaXMpfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCkscjMpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxyMyksZSksbixyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gYzV0KHRoaXMpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJnhmKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJkR5KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJkV5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gU0UodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZIdSkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZtZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIVltKHRoaXMpO2Nhc2UgMTg6cmV0dXJuKHRoaXMuQmImZGMpIT0wO2Nhc2UgMTk6cmV0dXJuISFLSnQodGhpcyl9cmV0dXJuIG9oKHRoaXMsZS1KbigoZG4oKSxyMykpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHIzKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxpcyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6TXJ0KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6emcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDM6cWcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDQ6UmcodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDU6U0h0KHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA4OmIyKHRoaXMsdShuLDEzOCkpO3JldHVybjtjYXNlIDk6cz1GMSh0aGlzLHUobiw4NyksbnVsbCkscyYmcy5GaSgpO3JldHVybjtjYXNlIDEwOmxFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMTpkRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTI6aEUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDEzOnIydCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAxNTpmRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTY6Z0UodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDE4OktpdCh0aGlzLGplKFJlKG4pKSk7cmV0dXJufWdoKHRoaXMsZS1KbigoZG4oKSxyMykpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fHIzKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLHIzfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuLHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpfdCh0aGlzLkNiLDg4KSYmZ3koc2wodSh0aGlzLkNiLDg4KSksNCksUWModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOnpnKHRoaXMsITApO3JldHVybjtjYXNlIDM6cWcodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDpSZyh0aGlzLDApO3JldHVybjtjYXNlIDU6dGhpcy5iPTAscnkodGhpcywxKTtyZXR1cm47Y2FzZSA4OmIyKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPUYxKHRoaXMsbnVsbCxudWxsKSxyJiZyLkZpKCk7cmV0dXJuO2Nhc2UgMTA6bEUodGhpcywhMCk7cmV0dXJuO2Nhc2UgMTE6ZEUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTI6aEUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5pPW51bGwsZnoodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxNTpmRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxNjpnRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxODpLaXQodGhpcywhMSk7cmV0dXJufWZoKHRoaXMsZS1KbigoZG4oKSxyMykpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHIzKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXtUaXQodGhpcyksTTgoVG8oKCR1KCkseWEpLHRoaXMpKSxEaCh0aGlzKSx0aGlzLkJifD0xfSxsLiRqPWZ1bmN0aW9uKCl7cmV0dXJuIGM1dCh0aGlzKX0sbC5uaz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmI9MCx0aGlzLmE9bnVsbCxlM3QodGhpcyxlLG4pfSxsLm9rPWZ1bmN0aW9uKGUpe1NIdCh0aGlzLGUpfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuRGImNjQ/X3EodGhpcyk6KGU9bmV3IF9oKF9xKHRoaXMpKSxlLmErPSIgKGlEOiAiLExnKGUsKHRoaXMuQmImZGMpIT0wKSxlLmErPSIpIixlLmEpfSxsLmI9MCxGKE1uLCJFQXR0cmlidXRlSW1wbCIsMzIyKSxEKDM1MSw0MzgsezEwNToxLDkyOjEsOTA6MSwxMzg6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwzNTE6MSwxNTA6MSwxMTQ6MSwxMTU6MSw2NzY6MX0pLGwudWs9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuVGcoKT09dGhpc30sbC5RZz1mdW5jdGlvbihlKXtyZXR1cm4gTHN0KHRoaXMsZSl9LGwuUmc9ZnVuY3Rpb24oZSxuKXt0aGlzLnc9bnVsbCx0aGlzLkRiPW48PDE2fHRoaXMuRGImMjU1LHRoaXMuQ2I9ZX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIGh2KHRoaXMpO2Nhc2UgNDpyZXR1cm4gdGhpcy56aigpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9SbCh0aGlzKTpPOCh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSksdGhpcy5BfXJldHVybiB1aCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHx0aGlzLnpoKCkpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxaYyh0aGlzLkFiLGUscik7Y2FzZSA2OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP0xzdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSxIbCh0aGlzLGUsNixyKX1yZXR1cm4gaD11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksbiksNjYpLGguTmooKS5Raih0aGlzLHN1KHRoaXMpLG4tSm4odGhpcy56aCgpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDY6cmV0dXJuIEhsKHRoaXMsbnVsbCw2LHIpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSxCYSh0aGlzLkEsZSxyKX1yZXR1cm4gbz11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fHRoaXMuemgoKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHN1KHRoaXMpLG4tSm4odGhpcy56aCgpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsJiZ0aGlzLkQ9PXRoaXMuRjtjYXNlIDM6cmV0dXJuISFodih0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuemooKSE9bnVsbDtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4hIU84KHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuQSYmdGhpcy5BLmkhPTB9cmV0dXJuIG9oKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLGlzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpfJCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOnNudCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA1Ok9FKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSkseHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSxpcyh0aGlzLkEsdShuLDE0KSk7cmV0dXJufWdoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fHRoaXMuemgoKSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxmNWV9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpfdCh0aGlzLkNiLDE3OSkmJih1KHRoaXMuQ2IsMTc5KS50Yj1udWxsKSxRYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6YUUodGhpcyxudWxsKSxZOCh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpPRSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSkseHIodGhpcy5BKTtyZXR1cm59ZmgodGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8dGhpcy56aCgpKSxlKSl9LGwueWo9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5HPT0tMSYmKHRoaXMuRz0oZT1SbCh0aGlzKSxlP0hnKGUuTWgoKSx0aGlzKTotMSkpLHRoaXMuR30sbC56aj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLkFqPWZ1bmN0aW9uKCl7cmV0dXJuIFJsKHRoaXMpfSxsLnZrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudn0sbC5Caj1mdW5jdGlvbigpe3JldHVybiBodih0aGlzKX0sbC5Daj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQn0sbC5Eaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkZ9LGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHhhdCh0aGlzLGUpfSxsLndrPWZ1bmN0aW9uKGUpe3RoaXMudj1lfSxsLnhrPWZ1bmN0aW9uKGUpe0NuZSh0aGlzLGUpfSxsLnlrPWZ1bmN0aW9uKGUpe3RoaXMuQz1lfSxsLkxoPWZ1bmN0aW9uKGUpe18kKHRoaXMsZSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gUnoodGhpcyl9LGwuQz1udWxsLGwuRD1udWxsLGwuRz0tMSxGKE1uLCJFQ2xhc3NpZmllckltcGwiLDM1MSksRCg4OCwzNTEsezEwNToxLDkyOjEsOTA6MSwyNjoxLDEzODoxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDg4OjEsMzUxOjEsMTUwOjEsNDczOjEsMTE0OjEsMTE1OjEsNjc2OjF9LGVNKSxsLnVrPWZ1bmN0aW9uKGUpe3JldHVybiB6WmUodGhpcyxlLlRnKCkpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gaHYodGhpcyk7Y2FzZSA0OnJldHVybiBudWxsO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9SbCh0aGlzKTpPOCh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSksdGhpcy5BO2Nhc2UgODpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSA5OnJldHVybiBObigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDEwOnJldHVybiBBbyh0aGlzKTtjYXNlIDExOnJldHVybiF0aGlzLnEmJih0aGlzLnE9bmV3IGZlKFdoLHRoaXMsMTEsMTApKSx0aGlzLnE7Y2FzZSAxMjpyZXR1cm4gVDQodGhpcyk7Y2FzZSAxMzpyZXR1cm4gQ18odGhpcyk7Y2FzZSAxNDpyZXR1cm4gQ18odGhpcyksdGhpcy5yO2Nhc2UgMTU6cmV0dXJuIFQ0KHRoaXMpLHRoaXMuaztjYXNlIDE2OnJldHVybiBaNHQodGhpcyk7Y2FzZSAxNzpyZXR1cm4gX2F0KHRoaXMpO2Nhc2UgMTg6cmV0dXJuIHZkKHRoaXMpO2Nhc2UgMTk6cmV0dXJuIG1xKHRoaXMpO2Nhc2UgMjA6cmV0dXJuIFQ0KHRoaXMpLHRoaXMubztjYXNlIDIxOnJldHVybiF0aGlzLnMmJih0aGlzLnM9bmV3IGZlKE11LHRoaXMsMjEsMTcpKSx0aGlzLnM7Y2FzZSAyMjpyZXR1cm4gTGModGhpcyk7Y2FzZSAyMzpyZXR1cm4gaGF0KHRoaXMpfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksTGIpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxMYiksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLFpjKHRoaXMuQWIsZSxyKTtjYXNlIDY6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/THN0KHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLEhsKHRoaXMsZSw2LHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMucSYmKHRoaXMucT1uZXcgZmUoV2gsdGhpcywxMSwxMCkpLFpjKHRoaXMucSxlLHIpO2Nhc2UgMjE6cmV0dXJuIXRoaXMucyYmKHRoaXMucz1uZXcgZmUoTXUsdGhpcywyMSwxNykpLFpjKHRoaXMucyxlLHIpfXJldHVybiBoPXUoeW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8KGRuKCksTGIpKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsc3UodGhpcyksbi1KbigoZG4oKSxMYikpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgNjpyZXR1cm4gSGwodGhpcyxudWxsLDYscik7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3IEZ1KGh1LHRoaXMsNykpLEJhKHRoaXMuQSxlLHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMucSYmKHRoaXMucT1uZXcgZmUoV2gsdGhpcywxMSwxMCkpLEJhKHRoaXMucSxlLHIpO2Nhc2UgMjE6cmV0dXJuIXRoaXMucyYmKHRoaXMucz1uZXcgZmUoTXUsdGhpcywyMSwxNykpLEJhKHRoaXMucyxlLHIpO2Nhc2UgMjI6cmV0dXJuIEJhKExjKHRoaXMpLGUscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxMYikpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLExiKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhaHYodGhpcyk7Y2FzZSA0OnJldHVybiExO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiEhTzgodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5BJiZ0aGlzLkEuaSE9MDtjYXNlIDg6cmV0dXJuKHRoaXMuQmImMjU2KSE9MDtjYXNlIDk6cmV0dXJuKHRoaXMuQmImNTEyKSE9MDtjYXNlIDEwOnJldHVybiEhdGhpcy51JiZMYyh0aGlzLnUuYSkuaSE9MCYmISh0aGlzLm4mJnZzdCh0aGlzLm4pKTtjYXNlIDExOnJldHVybiEhdGhpcy5xJiZ0aGlzLnEuaSE9MDtjYXNlIDEyOnJldHVybiBUNCh0aGlzKS5pIT0wO2Nhc2UgMTM6cmV0dXJuIENfKHRoaXMpLmkhPTA7Y2FzZSAxNDpyZXR1cm4gQ18odGhpcyksdGhpcy5yLmkhPTA7Y2FzZSAxNTpyZXR1cm4gVDQodGhpcyksdGhpcy5rLmkhPTA7Y2FzZSAxNjpyZXR1cm4gWjR0KHRoaXMpLmkhPTA7Y2FzZSAxNzpyZXR1cm4gX2F0KHRoaXMpLmkhPTA7Y2FzZSAxODpyZXR1cm4gdmQodGhpcykuaSE9MDtjYXNlIDE5OnJldHVybiBtcSh0aGlzKS5pIT0wO2Nhc2UgMjA6cmV0dXJuIFQ0KHRoaXMpLCEhdGhpcy5vO2Nhc2UgMjE6cmV0dXJuISF0aGlzLnMmJnRoaXMucy5pIT0wO2Nhc2UgMjI6cmV0dXJuISF0aGlzLm4mJnZzdCh0aGlzLm4pO2Nhc2UgMjM6cmV0dXJuIGhhdCh0aGlzKS5pIT0wfXJldHVybiBvaCh0aGlzLGUtSm4oKGRuKCksTGIpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxMYiksZSkpfSxsLm9oPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBuPXRoaXMuaT09bnVsbHx8dGhpcy5xJiZ0aGlzLnEuaSE9MD9udWxsOm1JKHRoaXMsZSksbnx8THh0KHRoaXMsZSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksaXModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOl8kKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6c250KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDU6T0UodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSx4cih0aGlzLkEpLCF0aGlzLkEmJih0aGlzLkE9bmV3IEZ1KGh1LHRoaXMsNykpLGlzKHRoaXMuQSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA4OnIzdCh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgOTppM3QodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDEwOkFfKEFvKHRoaXMpKSxpcyhBbyh0aGlzKSx1KG4sMTQpKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5xJiYodGhpcy5xPW5ldyBmZShXaCx0aGlzLDExLDEwKSkseHIodGhpcy5xKSwhdGhpcy5xJiYodGhpcy5xPW5ldyBmZShXaCx0aGlzLDExLDEwKSksaXModGhpcy5xLHUobiwxNCkpO3JldHVybjtjYXNlIDIxOiF0aGlzLnMmJih0aGlzLnM9bmV3IGZlKE11LHRoaXMsMjEsMTcpKSx4cih0aGlzLnMpLCF0aGlzLnMmJih0aGlzLnM9bmV3IGZlKE11LHRoaXMsMjEsMTcpKSxpcyh0aGlzLnMsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMjI6eHIoTGModGhpcykpLGlzKExjKHRoaXMpLHUobiwxNCkpO3JldHVybn1naCh0aGlzLGUtSm4oKGRuKCksTGIpKSx5bigocj11KERuKHRoaXMsMTYpLDI2KSxyfHxMYiksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxMYn0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOl90KHRoaXMuQ2IsMTc5KSYmKHUodGhpcy5DYiwxNzkpLnRiPW51bGwpLFFjKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjphRSh0aGlzLG51bGwpLFk4KHRoaXMsdGhpcy5EKTtyZXR1cm47Y2FzZSA1Ok9FKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSx4cih0aGlzLkEpO3JldHVybjtjYXNlIDg6cjN0KHRoaXMsITEpO3JldHVybjtjYXNlIDk6aTN0KHRoaXMsITEpO3JldHVybjtjYXNlIDEwOnRoaXMudSYmQV8odGhpcy51KTtyZXR1cm47Y2FzZSAxMTohdGhpcy5xJiYodGhpcy5xPW5ldyBmZShXaCx0aGlzLDExLDEwKSkseHIodGhpcy5xKTtyZXR1cm47Y2FzZSAyMTohdGhpcy5zJiYodGhpcy5zPW5ldyBmZShNdSx0aGlzLDIxLDE3KSkseHIodGhpcy5zKTtyZXR1cm47Y2FzZSAyMjp0aGlzLm4mJnhyKHRoaXMubik7cmV0dXJufWZoKHRoaXMsZS1KbigoZG4oKSxMYikpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fExiKSxlKSl9LGwuR2g9ZnVuY3Rpb24oKXt2YXIgZSxuO2lmKFQ0KHRoaXMpLENfKHRoaXMpLFo0dCh0aGlzKSxfYXQodGhpcyksdmQodGhpcyksbXEodGhpcyksaGF0KHRoaXMpLHo5KGllbihzbCh0aGlzKSkpLHRoaXMucylmb3IoZT0wLG49dGhpcy5zLmk7ZTxuOysrZSl6TShBdCh0aGlzLnMsZSkpO2lmKHRoaXMucSlmb3IoZT0wLG49dGhpcy5xLmk7ZTxuOysrZSl6TShBdCh0aGlzLnEsZSkpOyRnKCgkdSgpLHlhKSx0aGlzKS5uZSgpLHRoaXMuQmJ8PTF9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4geTR0KHRoaXMpfSxsLms9bnVsbCxsLnI9bnVsbDt2YXIgdUEsazVlLEJmdDtGKE1uLCJFQ2xhc3NJbXBsIiw4OCksRCgxOTk0LDE5OTMsejBlKSxsLlZoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGthdCh0aGlzLGUsbil9LGwuV2g9ZnVuY3Rpb24oZSl7cmV0dXJuIGthdCh0aGlzLHRoaXMuaSxlKX0sbC5YaD1mdW5jdGlvbihlLG4pe2Q1dCh0aGlzLGUsbil9LGwuWWg9ZnVuY3Rpb24oZSl7dGF0KHRoaXMsZSl9LGwubGs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWmModGhpcyxlLG4pfSxsLnBpPWZ1bmN0aW9uKGUpe3JldHVybiBGbXQodGhpcyxlKX0sbC5taz1mdW5jdGlvbihlLG4pe3JldHVybiBCYSh0aGlzLGUsbil9LGwubWk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRmxlKHRoaXMsZSxuKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiBuZXcgQngodGhpcyl9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICRNKHRoaXMpfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiBERCh0aGlzLGUpfSxGKCRpLCJOb3RpZnlpbmdJbnRlcm5hbEVMaXN0SW1wbCIsMTk5NCksRCg2MjIsMTk5NCx6byksbC5IYz1mdW5jdGlvbihlKXtyZXR1cm4gSmxlKHRoaXMsZSl9LGwuWmk9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gRjkodGhpcyxlLG4scixzLG8pfSxsLiRpPWZ1bmN0aW9uKGUpe244KHRoaXMsZSl9LGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXN9LGwuYWs9ZnVuY3Rpb24oKXtyZXR1cm4geW4odGhpcy5lLlRnKCksdGhpcy5haigpKX0sbC5faT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFrKCl9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gR2kodGhpcy5lLlRnKCksdGhpcy5haygpKX0sbC56az1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMuYWsoKS5ZaigpLDI2KS5CaigpfSxsLkFrPWZ1bmN0aW9uKCl7cmV0dXJuIG5vKHUodGhpcy5haygpLDE4KSkubn0sbC5BaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGwuQms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5Daz1mdW5jdGlvbigpe3JldHVybiExfSxsLkRrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5YYz1mdW5jdGlvbihlKXtyZXR1cm4gSGcodGhpcyxlKX0sbC5jaj1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPXUoZSw0OSksdGhpcy5EaygpP3RoaXMuQmsoKT9yLmdoKHRoaXMuZSx0aGlzLkFrKCksdGhpcy56aygpLG4pOnIuZ2godGhpcy5lLEdpKHIuVGcoKSxubyh1KHRoaXMuYWsoKSwxOCkpKSxudWxsLG4pOnIuZ2godGhpcy5lLC0xLXRoaXMuYWooKSxudWxsLG4pfSxsLmRqPWZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9dShlLDQ5KSx0aGlzLkRrKCk/dGhpcy5CaygpP3IuaWgodGhpcy5lLHRoaXMuQWsoKSx0aGlzLnprKCksbik6ci5paCh0aGlzLmUsR2koci5UZygpLG5vKHUodGhpcy5haygpLDE4KSkpLG51bGwsbik6ci5paCh0aGlzLmUsLTEtdGhpcy5haigpLG51bGwsbil9LGwucms9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Gaz1mdW5jdGlvbigpe3JldHVybiEwfSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBLWnQodGhpcy5kLGUpfSxsLmVqPWZ1bmN0aW9uKCl7cmV0dXJuIHhsKHRoaXMuZSl9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pIT0wfSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBNRCh0aGlzLmQsZSl9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5GaygpJiZ0aGlzLkVrKCk/ZzYodGhpcyxlLHUobiw1NikpOm59LGwuR2s9ZnVuY3Rpb24oZSl7cmV0dXJuIGUua2goKT9acCh0aGlzLmUsdShlLDQ5KSk6ZX0sbC5XYj1mdW5jdGlvbihlKXtZVXQodGhpcyxlKX0sbC5QYz1mdW5jdGlvbigpe3JldHVybiBPdGUodGhpcyl9LGwuUWM9ZnVuY3Rpb24oZSl7dmFyIG47aWYodGhpcy5FaygpKWZvcihuPXRoaXMuaS0xO24+PTA7LS1uKUF0KHRoaXMsbik7cmV0dXJuIF8zdCh0aGlzLGUpfSxsLlhqPWZ1bmN0aW9uKCl7eHIodGhpcyl9LGwub2k9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWWVlKHRoaXMsZSxuKX0sRigkaSwiRWNvcmVFTGlzdCIsNjIyKSxEKDQ5Niw2MjIsem8sWk0pLGwuYWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5haj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Gaz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbn0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxsLmM9MCxGKCRpLCJFT2JqZWN0RUxpc3QiLDQ5NiksRCg4NSw0OTYsem8sQXMpLGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5Eaz1mdW5jdGlvbigpe3JldHVybiExfSxsLnJrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoJGksIkVPYmplY3RDb250YWlubWVudEVMaXN0Iiw4NSksRCg1NDUsODUsem8sa2opLGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmI9ITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLlhqPWZ1bmN0aW9uKCl7dmFyIGU7eHIodGhpcykseGwodGhpcy5lKT8oZT10aGlzLmIsdGhpcy5iPSExLG1pKHRoaXMuZSxuZXcgYmYodGhpcy5lLDIsdGhpcy5jLGUsITEpKSk6dGhpcy5iPSExfSxsLmI9ITEsRigkaSwiRU9iamVjdENvbnRhaW5tZW50RUxpc3QvVW5zZXR0YWJsZSIsNTQ1KSxEKDExNDAsNTQ1LHpvLFBLdCksbC5paT1mdW5jdGlvbihlLG4pe3ZhciByLHM7cmV0dXJuIHI9dShyXyh0aGlzLGUsbiksODcpLHhsKHRoaXMuZSkmJm44KHRoaXMsbmV3IG1EKHRoaXMuYSw3LChkbigpLGQ1ZSkscGUobiksKHM9ci5jLF90KHMsODgpP3UocywyNik6S2gpLGUpKSxyfSxsLmpqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFVobih0aGlzLHUoZSw4Nyksbil9LGwua2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gR2huKHRoaXMsdShlLDg3KSxuKX0sbC5saj1mdW5jdGlvbihlLG4scil7cmV0dXJuIFdkbih0aGlzLHUoZSw4NyksdShuLDg3KSxyKX0sbC5aaT1mdW5jdGlvbihlLG4scixzLG8pe3N3aXRjaChlKXtjYXNlIDM6cmV0dXJuIEY5KHRoaXMsZSxuLHIscyx0aGlzLmk+MSk7Y2FzZSA1OnJldHVybiBGOSh0aGlzLGUsbixyLHMsdGhpcy5pLXUociwxNSkuZ2MoKT4wKTtkZWZhdWx0OnJldHVybiBuZXcgejAodGhpcy5lLGUsdGhpcy5jLG4scixzLCEwKX19LGwuaWo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5maj1mdW5jdGlvbigpe3JldHVybiB2c3QodGhpcyl9LGwuWGo9ZnVuY3Rpb24oKXt4cih0aGlzKX0sRihNbiwiRUNsYXNzSW1wbC8xIiwxMTQwKSxEKDExNTQsMTE1MyxCOHQpLGwudWk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHY7aWYocj1lLnhpKCksciE9OCl7aWYocz1MZm4oZSkscz09MClzd2l0Y2gocil7Y2FzZSAxOmNhc2UgOTp7dj1lLkJpKCksdiE9bnVsbCYmKG49c2wodSh2LDQ3MykpLCFuLmMmJihuLmM9bmV3IFRtKSxYJChuLmMsZS5BaSgpKSksZD1lLnppKCksZCE9bnVsbCYmKG89dShkLDQ3Myksby5CYiYxfHwobj1zbChvKSwhbi5jJiYobi5jPW5ldyBUbSksRHIobi5jLHUoZS5BaSgpLDI2KSkpKTticmVha31jYXNlIDM6e2Q9ZS56aSgpLGQhPW51bGwmJihvPXUoZCw0NzMpLG8uQmImMXx8KG49c2wobyksIW4uYyYmKG4uYz1uZXcgVG0pLERyKG4uYyx1KGUuQWkoKSwyNikpKSk7YnJlYWt9Y2FzZSA1OntpZihkPWUuemkoKSxkIT1udWxsKWZvcihoPXUoZCwxNCkuS2MoKTtoLk9iKCk7KW89dShoLlBiKCksNDczKSxvLkJiJjF8fChuPXNsKG8pLCFuLmMmJihuLmM9bmV3IFRtKSxEcihuLmMsdShlLkFpKCksMjYpKSk7YnJlYWt9Y2FzZSA0Ont2PWUuQmkoKSx2IT1udWxsJiYobz11KHYsNDczKSxvLkJiJjF8fChuPXNsKG8pLCFuLmMmJihuLmM9bmV3IFRtKSxYJChuLmMsZS5BaSgpKSkpO2JyZWFrfWNhc2UgNjp7aWYodj1lLkJpKCksdiE9bnVsbClmb3IoaD11KHYsMTQpLktjKCk7aC5PYigpOylvPXUoaC5QYigpLDQ3Myksby5CYiYxfHwobj1zbChvKSwhbi5jJiYobi5jPW5ldyBUbSksWCQobi5jLGUuQWkoKSkpO2JyZWFrfX10aGlzLkhrKHMpfX0sbC5Iaz1mdW5jdGlvbihlKXtPdWUodGhpcyxlKX0sbC5iPTYzLEYoTW4sIkVTdXBlckFkYXB0ZXIiLDExNTQpLEQoMTE1NSwxMTU0LEI4dCxVenQpLGwuSGs9ZnVuY3Rpb24oZSl7Z3kodGhpcyxlKX0sRihNbiwiRUNsYXNzSW1wbC8xMCIsMTE1NSksRCgxMTQ0LDY5Nix6byksbC5WaD1mdW5jdGlvbihlLG4pe3JldHVybiAkc3QodGhpcyxlLG4pfSxsLldoPWZ1bmN0aW9uKGUpe3JldHVybiBMc2UodGhpcyxlKX0sbC5YaD1mdW5jdGlvbihlLG4pe1VEKHRoaXMsZSxuKX0sbC5ZaD1mdW5jdGlvbihlKXtnRCh0aGlzLGUpfSxsLnBpPWZ1bmN0aW9uKGUpe3JldHVybiBGbXQodGhpcyxlKX0sbC5taT1mdW5jdGlvbihlLG4pe3JldHVybiBzaXQodGhpcyxlLG4pfSxsLmxrPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiBuZXcgQngodGhpcyl9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICRNKHRoaXMpfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiBERCh0aGlzLGUpfSxsLm1rPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpc30sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmkhPTB9LGwuV2I9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5Yaj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBPcil9LEYoJGksIkVjb3JlRUxpc3QvVW5tb2RpZmlhYmxlRUxpc3QiLDExNDQpLEQoMzE5LDExNDQsem8sVjMpLGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRigkaSwiRWNvcmVFTGlzdC9Vbm1vZGlmaWFibGVFTGlzdC9GYXN0Q29tcGFyZSIsMzE5KSxEKDExNDcsMzE5LHpvLHdyZSksbC5YYz1mdW5jdGlvbihlKXt2YXIgbixyLHM7aWYoX3QoZSwxNzApJiYobj11KGUsMTcwKSxyPW4uYWooKSxyIT0tMSkpe2ZvcihzPXRoaXMuaTtyPHM7KytyKWlmKFZ0KHRoaXMuZ1tyXSk9PT1WdChlKSlyZXR1cm4gcn1yZXR1cm4tMX0sRihNbiwiRUNsYXNzSW1wbC8xRUFsbFN0cnVjdHVyYWxGZWF0dXJlc0xpc3QiLDExNDcpLEQoMTE0MSw0OTcsTGQsdXgpLGwucmk9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGhvLHEwZSw4NyxlLDAsMSl9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRihNbiwiRUNsYXNzSW1wbC8xRUdlbmVyaWNTdXBlclR5cGVFTGlzdCIsMTE0MSksRCg2MjMsNDk3LExkLFViKSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChNdSxCNCwxNzAsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVDbGFzc0ltcGwvMUVTdHJ1Y3R1cmFsRmVhdHVyZVVuaXF1ZUVMaXN0Iiw2MjMpLEQoNzQxLDQ5NyxMZCxNMCksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQobjMsQjQsMTgsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVDbGFzc0ltcGwvMVJlZmVyZW5jZUxpc3QiLDc0MSksRCgxMTQyLDQ5NyxMZCxXenQpLGwuYmk9ZnVuY3Rpb24oZSxuKXtLZW4odGhpcyx1KG4sMzQpKX0sbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoZTMsQjQsMzQsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVDbGFzc0ltcGwvMiIsMTE0MiksRCgxMTQzLDQ5NyxMZCxFcCksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoZTMsQjQsMzQsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVDbGFzc0ltcGwvMyIsMTE0MyksRCgxMTQ1LDMxOSx6byxRWXQpLGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFp0bih0aGlzLHUoZSwzNCkpfSxsLlloPWZ1bmN0aW9uKGUpe2FYZSh0aGlzLHUoZSwzNCkpfSxGKE1uLCJFQ2xhc3NJbXBsLzQiLDExNDUpLEQoMTE0NiwzMTksem8sWll0KSxsLkZjPWZ1bmN0aW9uKGUpe3JldHVybiBKdG4odGhpcyx1KGUsMTgpKX0sbC5ZaD1mdW5jdGlvbihlKXtvWGUodGhpcyx1KGUsMTgpKX0sRihNbiwiRUNsYXNzSW1wbC81IiwxMTQ2KSxEKDExNDgsNDk3LExkLEwzKSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBOdChXaCwkOHQsNTksZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVDbGFzc0ltcGwvNiIsMTE0OCksRCgxMTQ5LDQ5NyxMZCxGayksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQobjMsQjQsMTgsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVDbGFzc0ltcGwvNyIsMTE0OSksRCgxOTk3LDE5OTYsezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDY3OjEsNTg6MSw2OToxfSksbC5WaD1mdW5jdGlvbihlLG4pe3JldHVybiBzeHQodGhpcyxlLG4pfSxsLldoPWZ1bmN0aW9uKGUpe3JldHVybiBzeHQodGhpcyx0aGlzLlZpKCksZSl9LGwuWGg9ZnVuY3Rpb24oZSxuKXtmY2UodGhpcyxlLG4pfSxsLlloPWZ1bmN0aW9uKGUpe3JjZSh0aGlzLGUpfSxsLmxrPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHAxbih0aGlzLGUsbil9LGwubWs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gamZuKHRoaXMsZSxuKX0sbC5taT1mdW5jdGlvbihlLG4pe3JldHVybiB5bGUodGhpcyxlLG4pfSxsLnBpPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLk9pKGUpfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCeCh0aGlzKX0sbC5HaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLkppKCl9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICRNKHRoaXMpfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiBERCh0aGlzLGUpfSxGKCRpLCJEZWxlZ2F0aW5nTm90aWZ5aW5nSW50ZXJuYWxFTGlzdEltcGwiLDE5OTcpLEQoNzQyLDE5OTcsejh0KSxsLmFpPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9eW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLllqKCksX3QoZSwxNDgpJiYhX3QoZSw0NTcpJiYoZS5CaigpLmkmMSk9PTB9LGwuSGM9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHYsaztpZih0aGlzLkZrKCkpe2lmKGs9dGhpcy5WaSgpLGs+NClpZih0aGlzLndqKGUpKXtpZih0aGlzLnJrKCkpe2lmKHM9dShlLDQ5KSxyPXMuVWcoKSx2PXI9PXRoaXMuYiYmKHRoaXMuRGsoKT9zLk9nKHMuVmcoKSx1KHluKHZ1KHRoaXMuYiksdGhpcy5haigpKS5ZaigpLDI2KS5CaigpKT09bm8odSh5bih2dSh0aGlzLmIpLHRoaXMuYWooKSksMTgpKS5uOi0xLXMuVmcoKT09dGhpcy5haigpKSx0aGlzLkVrKCkmJiF2JiYhciYmcy5aZygpKXtmb3Iobz0wO288azsrK28paWYobj1XbnQodGhpcyx0aGlzLk9pKG8pKSxWdChuKT09PVZ0KGUpKXJldHVybiEwfXJldHVybiB2fWVsc2UgaWYodGhpcy5EaygpJiYhdGhpcy5DaygpKXtpZihoPXUoZSw1NikuYWgobm8odSh5bih2dSh0aGlzLmIpLHRoaXMuYWooKSksMTgpKSksVnQoaCk9PT1WdCh0aGlzLmIpKXJldHVybiEwO2lmKGg9PW51bGx8fCF1KGgsNTYpLmtoKCkpcmV0dXJuITF9fWVsc2UgcmV0dXJuITE7aWYoZD10aGlzLkxpKGUpLHRoaXMuRWsoKSYmIWQpe2ZvcihvPTA7bzxrOysrbylpZihzPVdudCh0aGlzLHRoaXMuT2kobykpLFZ0KHMpPT09VnQoZSkpcmV0dXJuITB9cmV0dXJuIGR9ZWxzZSByZXR1cm4gdGhpcy5MaShlKX0sbC5aaT1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgejAodGhpcy5iLGUsdGhpcy5haigpLG4scixzLG8pfSxsLiRpPWZ1bmN0aW9uKGUpe21pKHRoaXMuYixlKX0sbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpc30sbC5faT1mdW5jdGlvbigpe3JldHVybiB5bih2dSh0aGlzLmIpLHRoaXMuYWooKSl9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gR2kodnUodGhpcy5iKSx5bih2dSh0aGlzLmIpLHRoaXMuYWooKSkpfSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5Caz1mdW5jdGlvbigpe3JldHVybiEheW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLllqKCkuQmooKX0sbC5iaj1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIG49eW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLF90KG4sOTkpPyhlPXUobiwxOCksKGUuQmImZGMpIT0wfHwhIW5vKHUobiwxOCkpKTohMX0sbC5Daz1mdW5jdGlvbigpe3ZhciBlLG4scixzO3JldHVybiBuPXluKHZ1KHRoaXMuYiksdGhpcy5haigpKSxfdChuLDk5KT8oZT11KG4sMTgpLHI9bm8oZSksISFyJiYocz1yLnQscz4xfHxzPT0tMSkpOiExfSxsLkRrPWZ1bmN0aW9uKCl7dmFyIGUsbixyO3JldHVybiBuPXluKHZ1KHRoaXMuYiksdGhpcy5haigpKSxfdChuLDk5KT8oZT11KG4sMTgpLHI9bm8oZSksISFyKTohMX0sbC5Faz1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIG49eW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLF90KG4sOTkpPyhlPXUobiwxOCksKGUuQmImS2EpIT0wKTohMX0sbC5YYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztpZihzPXRoaXMuUWkoZSkscz49MClyZXR1cm4gcztpZih0aGlzLkZrKCkpe2ZvcihyPTAsbz10aGlzLlZpKCk7cjxvOysrcilpZihuPVdudCh0aGlzLHRoaXMuT2kocikpLFZ0KG4pPT09VnQoZSkpcmV0dXJuIHJ9cmV0dXJuLTF9LGwuY2o9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj11KGUsNDkpLHRoaXMuRGsoKT90aGlzLkJrKCk/ci5naCh0aGlzLmIsbm8odSh5bih2dSh0aGlzLmIpLHRoaXMuYWooKSksMTgpKS5uLHUoeW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLllqKCksMjYpLkJqKCksbik6ci5naCh0aGlzLmIsR2koci5UZygpLG5vKHUoeW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLDE4KSkpLG51bGwsbik6ci5naCh0aGlzLmIsLTEtdGhpcy5haigpLG51bGwsbil9LGwuZGo9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj11KGUsNDkpLHRoaXMuRGsoKT90aGlzLkJrKCk/ci5paCh0aGlzLmIsbm8odSh5bih2dSh0aGlzLmIpLHRoaXMuYWooKSksMTgpKS5uLHUoeW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLllqKCksMjYpLkJqKCksbik6ci5paCh0aGlzLmIsR2koci5UZygpLG5vKHUoeW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLDE4KSkpLG51bGwsbik6ci5paCh0aGlzLmIsLTEtdGhpcy5haigpLG51bGwsbil9LGwucms9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBuPXluKHZ1KHRoaXMuYiksdGhpcy5haigpKSxfdChuLDk5KT8oZT11KG4sMTgpLChlLkJiJmRjKSE9MCk6ITF9LGwuRms9ZnVuY3Rpb24oKXtyZXR1cm4gX3QoeW4odnUodGhpcy5iKSx0aGlzLmFqKCkpLllqKCksODgpfSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiB5bih2dSh0aGlzLmIpLHRoaXMuYWooKSkuWWooKS53aihlKX0sbC5laj1mdW5jdGlvbigpe3JldHVybiB4bCh0aGlzLmIpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuUmkoKX0sbC5oaT1mdW5jdGlvbigpe3JldHVybiB5bih2dSh0aGlzLmIpLHRoaXMuYWooKSkuaGkoKX0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBBSSh0aGlzLGUsbil9LGwuV2I9ZnVuY3Rpb24oZSl7QV8odGhpcyksaXModGhpcyx1KGUsMTUpKX0sbC5QYz1mdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMuRWsoKSlmb3IoZT10aGlzLlZpKCktMTtlPj0wOy0tZSlBSSh0aGlzLGUsdGhpcy5PaShlKSk7cmV0dXJuIHRoaXMuV2koKX0sbC5RYz1mdW5jdGlvbihlKXt2YXIgbjtpZih0aGlzLkVrKCkpZm9yKG49dGhpcy5WaSgpLTE7bj49MDstLW4pQUkodGhpcyxuLHRoaXMuT2kobikpO3JldHVybiB0aGlzLlhpKGUpfSxsLlhqPWZ1bmN0aW9uKCl7QV8odGhpcyl9LGwub2k9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gSXRlKHRoaXMsZSxuKX0sRigkaSwiRGVsZWdhdGluZ0Vjb3JlRUxpc3QiLDc0MiksRCgxMTUwLDc0Mix6OHQsS1d0KSxsLkhpPWZ1bmN0aW9uKGUsbil7cFplKHRoaXMsZSx1KG4sMjYpKX0sbC5JaT1mdW5jdGlvbihlKXt1UWUodGhpcyx1KGUsMjYpKX0sbC5PaT1mdW5jdGlvbihlKXt2YXIgbixyO3JldHVybiBuPXUoQXQoTGModGhpcy5hKSxlKSw4Nykscj1uLmMsX3Qociw4OCk/dShyLDI2KTooZG4oKSxLaCl9LGwuVGk9ZnVuY3Rpb24oZSl7dmFyIG4scjtyZXR1cm4gbj11KGJ5KExjKHRoaXMuYSksZSksODcpLHI9bi5jLF90KHIsODgpP3UociwyNik6KGRuKCksS2gpfSxsLlVpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGIxbih0aGlzLGUsdShuLDI2KSl9LGwuYWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5aaT1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBudWxsfSxsLkppPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBZenQodGhpcyl9LGwuS2k9ZnVuY3Rpb24oKXt4cihMYyh0aGlzLmEpKX0sbC5MaT1mdW5jdGlvbihlKXtyZXR1cm4gY2llKHRoaXMsZSl9LGwuTWk9ZnVuY3Rpb24oZSl7dmFyIG4scjtmb3Iocj1lLktjKCk7ci5PYigpOylpZihuPXIuUGIoKSwhY2llKHRoaXMsbikpcmV0dXJuITE7cmV0dXJuITB9LGwuTmk9ZnVuY3Rpb24oZSl7dmFyIG4scixzO2lmKF90KGUsMTUpJiYocz11KGUsMTUpLHMuZ2MoKT09TGModGhpcy5hKS5pKSl7Zm9yKG49cy5LYygpLHI9bmV3IG5yKHRoaXMpO24uT2IoKTspaWYoVnQobi5QYigpKSE9PVZ0KGRyKHIpKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0sbC5QaT1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87Zm9yKHI9MSxuPW5ldyBucihMYyh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksODcpLHM9KG89ZS5jLF90KG8sODgpP3UobywyNik6KGRuKCksS2gpKSxyPTMxKnIrKHM/UHcocyk6MCk7cmV0dXJuIHJ9LGwuUWk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKHM9MCxyPW5ldyBucihMYyh0aGlzLmEpKTtyLmUhPXIuaS5nYygpOyl7aWYobj11KGRyKHIpLDg3KSxWdChlKT09PVZ0KChvPW4uYyxfdChvLDg4KT91KG8sMjYpOihkbigpLEtoKSkpKXJldHVybiBzOysrc31yZXR1cm4tMX0sbC5SaT1mdW5jdGlvbigpe3JldHVybiBMYyh0aGlzLmEpLmk9PTB9LGwuU2k9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5WaT1mdW5jdGlvbigpe3JldHVybiBMYyh0aGlzLmEpLml9LGwuV2k9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7Zm9yKGg9TGModGhpcy5hKS5pLG89TnQoUW4sRGUsMSxoLDUsMSkscj0wLG49bmV3IG5yKExjKHRoaXMuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw4Nyksb1tyKytdPShzPWUuYyxfdChzLDg4KT91KHMsMjYpOihkbigpLEtoKSk7cmV0dXJuIG99LGwuWGk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHY7Zm9yKHY9TGModGhpcy5hKS5pLGUubGVuZ3RoPHYmJihvPU1EKG9sKGUpLmMsdiksZT1vKSxlLmxlbmd0aD52JiZ0cyhlLHYsbnVsbCkscz0wLHI9bmV3IG5yKExjKHRoaXMuYSkpO3IuZSE9ci5pLmdjKCk7KW49dShkcihyKSw4NyksaD0oZD1uLmMsX3QoZCw4OCk/dShkLDI2KTooZG4oKSxLaCkpLHRzKGUscysrLGgpO3JldHVybiBlfSxsLllpPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztmb3Iobz1uZXcgQWcsby5hKz0iWyIsZT1MYyh0aGlzLmEpLG49MCxzPUxjKHRoaXMuYSkuaTtuPHM7KWdvKG8sYjkoKHI9dShBdChlLG4pLDg3KS5jLF90KHIsODgpP3UociwyNik6KGRuKCksS2gpKSkpLCsrbjxzJiYoby5hKz1ZYSk7cmV0dXJuIG8uYSs9Il0iLG8uYX0sbC4kaT1mdW5jdGlvbihlKXt9LGwuYWo9ZnVuY3Rpb24oKXtyZXR1cm4gMTB9LGwuQms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5iaj1mdW5jdGlvbigpe3JldHVybiExfSxsLkNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRGs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLnJrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRms9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw4OCl9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gcHNuKHRoaXMuYSl9LGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5uaT1mdW5jdGlvbigpe3JldHVybiEwfSxGKE1uLCJFQ2xhc3NJbXBsLzgiLDExNTApLEQoMTE1MSwxOTY0LGpFLFl6dCksbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gREQodGhpcy5hLGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIExjKHRoaXMuYS5hKS5pfSxGKE1uLCJFQ2xhc3NJbXBsLzgvMSIsMTE1MSksRCgxMTUyLDQ5NyxMZCx0QyksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoczEsRGUsMTM4LGUsMCwxKX0sbC5uaT1mdW5jdGlvbigpe3JldHVybiExfSxGKE1uLCJFQ2xhc3NJbXBsLzkiLDExNTIpLEQoMTEzOSw1MyxWeHQsanF0KSxGKE1uLCJFQ2xhc3NJbXBsL015SGFzaFNldCIsMTEzOSksRCg1NjYsMzUxLHsxMDU6MSw5MjoxLDkwOjEsMTM4OjEsMTQ4OjEsODM0OjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsMzUxOjEsMTUwOjEsMTE0OjEsMTE1OjEsNjc2OjF9LHhSKSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gaHYodGhpcyk7Y2FzZSA0OnJldHVybiB0aGlzLnpqKCk7Y2FzZSA1OnJldHVybiB0aGlzLkY7Y2FzZSA2OnJldHVybiBuP1JsKHRoaXMpOk84KHRoaXMpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSx0aGlzLkE7Y2FzZSA4OnJldHVybiBObigpLCEhKHRoaXMuQmImMjU2KX1yZXR1cm4gdWgodGhpcyxlLUpuKHRoaXMuemgoKSkseW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8dGhpcy56aCgpKSxlKSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsJiZ0aGlzLkQ9PXRoaXMuRjtjYXNlIDM6cmV0dXJuISFodih0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuemooKSE9bnVsbDtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4hIU84KHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuQSYmdGhpcy5BLmkhPTA7Y2FzZSA4OnJldHVybih0aGlzLkJiJjI1Nik9PTB9cmV0dXJuIG9oKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fHRoaXMuemgoKSksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLGlzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpfJCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOnNudCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSA1Ok9FKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSkseHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSxpcyh0aGlzLkEsdShuLDE0KSk7cmV0dXJuO2Nhc2UgODpJeih0aGlzLGplKFJlKG4pKSk7cmV0dXJufWdoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fHRoaXMuemgoKSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxnNWV9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpfdCh0aGlzLkNiLDE3OSkmJih1KHRoaXMuQ2IsMTc5KS50Yj1udWxsKSxRYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6YUUodGhpcyxudWxsKSxZOCh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpPRSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSkseHIodGhpcy5BKTtyZXR1cm47Y2FzZSA4Okl6KHRoaXMsITApO3JldHVybn1maCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHx0aGlzLnpoKCkpLGUpKX0sbC5HaD1mdW5jdGlvbigpeyRnKCgkdSgpLHlhKSx0aGlzKS5uZSgpLHRoaXMuQmJ8PTF9LGwuRmo9ZnVuY3Rpb24oKXt2YXIgZSxuLHI7aWYoIXRoaXMuYyYmKGU9UGNlKFJsKHRoaXMpKSwhZS5kYygpKSlmb3Iocj1lLktjKCk7ci5PYigpOyluPUJyKHIuUGIoKSksa18odGhpcyxuKSYmUWxuKHRoaXMpO3JldHVybiB0aGlzLmJ9LGwuemo9ZnVuY3Rpb24oKXt2YXIgZTtpZighdGhpcy5lKXtlPW51bGw7dHJ5e2U9aHYodGhpcyl9Y2F0Y2gobil7aWYobj1XaShuKSwhX3QobiwxMDIpKXRocm93IGl0KG4pfXRoaXMuZD1udWxsLGUmJmUuaSYxJiYoZT09cGw/dGhpcy5kPShObigpLEYyKTplPT1Dcj90aGlzLmQ9cGUoMCk6ZT09YTM/dGhpcy5kPW5ldyBQMygwKTplPT1hYT90aGlzLmQ9MDplPT1PYj90aGlzLmQ9djIoMCk6ZT09ZzU/dGhpcy5kPXVFKDApOmU9PUd1P3RoaXMuZD1BRCgwKTp0aGlzLmQ9QkQoMCkpLHRoaXMuZT0hMH1yZXR1cm4gdGhpcy5kfSxsLkVqPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImMjU2KSE9MH0sbC5Jaz1mdW5jdGlvbihlKXtlJiYodGhpcy5EPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQWJzdHJhY3RFbnVtZXJhdG9yIil9LGwueGs9ZnVuY3Rpb24oZSl7Q25lKHRoaXMsZSksdGhpcy5JayhlKX0sbC55az1mdW5jdGlvbihlKXt0aGlzLkM9ZSx0aGlzLmU9ITF9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5EYiY2ND9Seih0aGlzKTooZT1uZXcgX2goUnoodGhpcykpLGUuYSs9IiAoc2VyaWFsaXphYmxlOiAiLExnKGUsKHRoaXMuQmImMjU2KSE9MCksZS5hKz0iKSIsZS5hKX0sbC5jPSExLGwuZD1udWxsLGwuZT0hMSxGKE1uLCJFRGF0YVR5cGVJbXBsIiw1NjYpLEQoNDU3LDU2Nix7MTA1OjEsOTI6MSw5MDoxLDEzODoxLDE0ODoxLDgzNDoxLDY3MToxLDE0NzoxLDE5MToxLDU2OjEsMTA4OjEsNDk6MSw5NzoxLDM1MToxLDQ1NzoxLDE1MDoxLDExNDoxLDExNToxLDY3NjoxfSwkcXQpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsP3RoaXMuRDp0aGlzLkI7Y2FzZSAzOnJldHVybiBodih0aGlzKTtjYXNlIDQ6cmV0dXJuIEh5dCh0aGlzKTtjYXNlIDU6cmV0dXJuIHRoaXMuRjtjYXNlIDY6cmV0dXJuIG4/UmwodGhpcyk6TzgodGhpcyk7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3IEZ1KGh1LHRoaXMsNykpLHRoaXMuQTtjYXNlIDg6cmV0dXJuIE5uKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgOTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBmZShhZyx0aGlzLDksNSkpLHRoaXMuYX1yZXR1cm4gdWgodGhpcyxlLUpuKChkbigpLE1iKSkseW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8TWIpLGUpLG4scil9LGwuaGg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxaYyh0aGlzLkFiLGUscik7Y2FzZSA2OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP0xzdCh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSxIbCh0aGlzLGUsNixyKTtjYXNlIDk6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgZmUoYWcsdGhpcyw5LDUpKSxaYyh0aGlzLmEsZSxyKX1yZXR1cm4gaD11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fChkbigpLE1iKSksbiksNjYpLGguTmooKS5Raih0aGlzLHN1KHRoaXMpLG4tSm4oKGRuKCksTWIpKSxlLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDY6cmV0dXJuIEhsKHRoaXMsbnVsbCw2LHIpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSxCYSh0aGlzLkEsZSxyKTtjYXNlIDk6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgZmUoYWcsdGhpcyw5LDUpKSxCYSh0aGlzLmEsZSxyKX1yZXR1cm4gbz11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fChkbigpLE1iKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHN1KHRoaXMpLG4tSm4oKGRuKCksTWIpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsJiZ0aGlzLkQ9PXRoaXMuRjtjYXNlIDM6cmV0dXJuISFodih0aGlzKTtjYXNlIDQ6cmV0dXJuISFIeXQodGhpcyk7Y2FzZSA1OnJldHVybiB0aGlzLkYhPW51bGwmJnRoaXMuRiE9dGhpcy5EJiZ0aGlzLkYhPXRoaXMuQjtjYXNlIDY6cmV0dXJuISFPOCh0aGlzKTtjYXNlIDc6cmV0dXJuISF0aGlzLkEmJnRoaXMuQS5pIT0wO2Nhc2UgODpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTB9cmV0dXJuIG9oKHRoaXMsZS1KbigoZG4oKSxNYikpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fE1iKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksaXModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOl8kKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6c250KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDU6T0UodGhpcyxCcihuKSk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBGdShodSx0aGlzLDcpKSx4cih0aGlzLkEpLCF0aGlzLkEmJih0aGlzLkE9bmV3IEZ1KGh1LHRoaXMsNykpLGlzKHRoaXMuQSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA4Okl6KHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmEmJih0aGlzLmE9bmV3IGZlKGFnLHRoaXMsOSw1KSkseHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBmZShhZyx0aGlzLDksNSkpLGlzKHRoaXMuYSx1KG4sMTQpKTtyZXR1cm59Z2godGhpcyxlLUpuKChkbigpLE1iKSkseW4oKHI9dShEbih0aGlzLDE2KSwyNikscnx8TWIpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksTWJ9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpfdCh0aGlzLkNiLDE3OSkmJih1KHRoaXMuQ2IsMTc5KS50Yj1udWxsKSxRYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6YUUodGhpcyxudWxsKSxZOCh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpPRSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgRnUoaHUsdGhpcyw3KSkseHIodGhpcy5BKTtyZXR1cm47Y2FzZSA4Okl6KHRoaXMsITApO3JldHVybjtjYXNlIDk6IXRoaXMuYSYmKHRoaXMuYT1uZXcgZmUoYWcsdGhpcyw5LDUpKSx4cih0aGlzLmEpO3JldHVybn1maCh0aGlzLGUtSm4oKGRuKCksTWIpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxNYiksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZih0aGlzLmEpZm9yKGU9MCxuPXRoaXMuYS5pO2U8bjsrK2Upek0oQXQodGhpcy5hLGUpKTskZygoJHUoKSx5YSksdGhpcykubmUoKSx0aGlzLkJifD0xfSxsLnpqPWZ1bmN0aW9uKCl7cmV0dXJuIEh5dCh0aGlzKX0sbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbH0sbC5Jaz1mdW5jdGlvbihlKXt9LEYoTW4sIkVFbnVtSW1wbCIsNDU3KSxEKDU3Myw0MzgsezEwNToxLDkyOjEsOTA6MSwxOTQwOjEsNjc4OjEsMTQ3OjEsMTkxOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsNTczOjEsMTUwOjEsMTE0OjEsMTE1OjF9LGxxdCksbC5uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnpifSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiB0YWUodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHBlKHRoaXMuZCk7Y2FzZSAzOnJldHVybiB0aGlzLmI/dGhpcy5iOnRoaXMuYTtjYXNlIDQ6cmV0dXJuIG89dGhpcy5jLG8/P3RoaXMuemI7Y2FzZSA1OnJldHVybiB0aGlzLkRiPj4xNj09NT91KHRoaXMuQ2IsNjcxKTpudWxsfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksb3ApKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxvcCksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLFpjKHRoaXMuQWIsZSxyKTtjYXNlIDU6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/dGFlKHRoaXMscik6dGhpcy5DYi5paCh0aGlzLC0xLW8sbnVsbCxyKSkpLEhsKHRoaXMsZSw1LHIpfXJldHVybiBoPXUoeW4oKHM9dShEbih0aGlzLDE2KSwyNiksc3x8KGRuKCksb3ApKSxuKSw2NiksaC5OaigpLlFqKHRoaXMsc3UodGhpcyksbi1KbigoZG4oKSxvcCkpLGUscil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksQmEodGhpcy5BYixlLHIpO2Nhc2UgNTpyZXR1cm4gSGwodGhpcyxudWxsLDUscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxvcCkpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLG9wKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuZCE9MDtjYXNlIDM6cmV0dXJuISF0aGlzLmI7Y2FzZSA0OnJldHVybiB0aGlzLmMhPW51bGw7Y2FzZSA1OnJldHVybiEhKHRoaXMuRGI+PjE2PT01JiZ1KHRoaXMuQ2IsNjcxKSl9cmV0dXJuIG9oKHRoaXMsZS1KbigoZG4oKSxvcCkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fG9wKSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksaXModGhpcy5BYix1KG4sMTQpKTtyZXR1cm47Y2FzZSAxOlFjKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6aGl0KHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSAzOktvZSh0aGlzLHUobiwxOTQwKSk7cmV0dXJuO2Nhc2UgNDpkaXQodGhpcyxCcihuKSk7cmV0dXJufWdoKHRoaXMsZS1KbigoZG4oKSxvcCkpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fG9wKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLG9wfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6UWModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOmhpdCh0aGlzLDApO3JldHVybjtjYXNlIDM6S29lKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDpkaXQodGhpcyxudWxsKTtyZXR1cm59ZmgodGhpcyxlLUpuKChkbigpLG9wKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8b3ApLGUpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXRoaXMuYyxlPz90aGlzLnpifSxsLmI9bnVsbCxsLmM9bnVsbCxsLmQ9MCxGKE1uLCJFRW51bUxpdGVyYWxJbXBsIiw1NzMpO3ZhciB4Nm49S2koTW4sIkVGYWN0b3J5SW1wbC9JbnRlcm5hbEVEYXRlVGltZUZvcm1hdCIpO0QoNDg5LDEsezIwMTU6MX0sZk0pLEYoTW4sIkVGYWN0b3J5SW1wbC8xQ2xpZW50SW50ZXJuYWxFRGF0ZVRpbWVGb3JtYXQiLDQ4OSksRCgyNDEsMTE1LHsxMDU6MSw5MjoxLDkwOjEsODc6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwyNDE6MSwxMTQ6MSwxMTU6MX0seHcpLGwuU2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiByPUhsKHRoaXMsZSxuLHIpLHRoaXMuZSYmX3QoZSwxNzApJiYocz12cSh0aGlzLHRoaXMuZSkscyE9dGhpcy5jJiYocj1QRSh0aGlzLHMscikpKSxyfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmY7Y2FzZSAxOnJldHVybiF0aGlzLmQmJih0aGlzLmQ9bmV3IEFzKGhvLHRoaXMsMSkpLHRoaXMuZDtjYXNlIDI6cmV0dXJuIG4/THEodGhpcyk6dGhpcy5jO2Nhc2UgMzpyZXR1cm4gdGhpcy5iO2Nhc2UgNDpyZXR1cm4gdGhpcy5lO2Nhc2UgNTpyZXR1cm4gbj94c3QodGhpcyk6dGhpcy5hfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksR3YpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxHdiksZSksbixyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiBacmUodGhpcyxudWxsLHIpO2Nhc2UgMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBBcyhobyx0aGlzLDEpKSxCYSh0aGlzLmQsZSxyKTtjYXNlIDM6cmV0dXJuIFFyZSh0aGlzLG51bGwscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxHdikpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLEd2KSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5mO2Nhc2UgMTpyZXR1cm4hIXRoaXMuZCYmdGhpcy5kLmkhPTA7Y2FzZSAyOnJldHVybiEhdGhpcy5jO2Nhc2UgMzpyZXR1cm4hIXRoaXMuYjtjYXNlIDQ6cmV0dXJuISF0aGlzLmU7Y2FzZSA1OnJldHVybiEhdGhpcy5hfXJldHVybiBvaCh0aGlzLGUtSm4oKGRuKCksR3YpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxHdiksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDp2YWUodGhpcyx1KG4sODcpKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmQmJih0aGlzLmQ9bmV3IEFzKGhvLHRoaXMsMSkpLHhyKHRoaXMuZCksIXRoaXMuZCYmKHRoaXMuZD1uZXcgQXMoaG8sdGhpcywxKSksaXModGhpcy5kLHUobiwxNCkpO3JldHVybjtjYXNlIDM6azR0KHRoaXMsdShuLDg3KSk7cmV0dXJuO2Nhc2UgNDpqNHQodGhpcyx1KG4sODM2KSk7cmV0dXJuO2Nhc2UgNTpIOCh0aGlzLHUobiwxMzgpKTtyZXR1cm59Z2godGhpcyxlLUpuKChkbigpLEd2KSkseW4oKHI9dShEbih0aGlzLDE2KSwyNikscnx8R3YpLGUpLG4pfSxsLnpoPWZ1bmN0aW9uKCl7cmV0dXJuIGRuKCksR3Z9LGwuQmg9ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgMDp2YWUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmQmJih0aGlzLmQ9bmV3IEFzKGhvLHRoaXMsMSkpLHhyKHRoaXMuZCk7cmV0dXJuO2Nhc2UgMzprNHQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA0Omo0dCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDU6SDgodGhpcyxudWxsKTtyZXR1cm59ZmgodGhpcyxlLUpuKChkbigpLEd2KSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8R3YpLGUpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPW5ldyBPbChtZih0aGlzKSksZS5hKz0iIChleHByZXNzaW9uOiAiLE1hdCh0aGlzLGUpLGUuYSs9IikiLGUuYX07dmFyIG9MdDtGKE1uLCJFR2VuZXJpY1R5cGVJbXBsIiwyNDEpLEQoMTk2OSwxOTY0LE5IKSxsLlhoPWZ1bmN0aW9uKGUsbil7VVd0KHRoaXMsZSxuKX0sbC5saz1mdW5jdGlvbihlLG4pe3JldHVybiBVV3QodGhpcyx0aGlzLmdjKCksZSksbn0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gWmYodGhpcy5HaSgpLGUpfSxsLlpoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGgoKX0sbC5HaT1mdW5jdGlvbigpe3JldHVybiBuZXcgWnp0KHRoaXMpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2goMCl9LGwuX2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuR2koKS5aYyhlKX0sbC5taz1mdW5jdGlvbihlLG4pe3JldHVybiBheSh0aGlzLGUsITApLG59LGwuaWk9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3JldHVybiBzPURzdCh0aGlzLG4pLHI9dGhpcy5aYyhlKSxyLlJiKHMpLHN9LGwuamk9ZnVuY3Rpb24oZSxuKXt2YXIgcjtheSh0aGlzLG4sITApLHI9dGhpcy5aYyhlKSxyLlJiKG4pfSxGKCRpLCJBYnN0cmFjdFNlcXVlbnRpYWxJbnRlcm5hbEVMaXN0IiwxOTY5KSxEKDQ4NiwxOTY5LE5ILGpNKSxsLnBpPWZ1bmN0aW9uKGUpe3JldHVybiBaZih0aGlzLkdpKCksZSl9LGwuWmg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPT1udWxsPyhNZygpLE1nKCksYlApOnRoaXMuSmsoKX0sbC5HaT1mdW5jdGlvbigpe3JldHVybiBuZXcgd1V0KHRoaXMuYSx0aGlzLmIpfSxsLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj09bnVsbD8oTWcoKSxNZygpLGJQKTp0aGlzLkprKCl9LGwuX2g9ZnVuY3Rpb24oZSl7dmFyIG4scjtpZih0aGlzLmI9PW51bGwpe2lmKGU8MHx8ZT4xKXRocm93IGl0KG5ldyB5byhKXytlKyIsIHNpemU9MCIpKTtyZXR1cm4gTWcoKSxNZygpLGJQfWZvcihyPXRoaXMuSmsoKSxuPTA7bjxlOysrbilreihyKTtyZXR1cm4gcn0sbC5kYz1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtpZih0aGlzLmIhPW51bGwpe2ZvcihyPTA7cjx0aGlzLmIubGVuZ3RoOysrcilpZihlPXRoaXMuYltyXSwhdGhpcy5NaygpfHx0aGlzLmEubWgoZSkpe2lmKGg9dGhpcy5hLmJoKGUsITEpLHRvKCksdShlLDY2KS5PaigpKXtmb3Iobj11KGgsMTUzKSxzPTAsbz1uLmdjKCk7czxvOysrcylpZihjWHQobi5pbChzKSkmJm4uamwocykhPW51bGwpcmV0dXJuITF9ZWxzZSBpZihlLiRqKCkpe2lmKCF1KGgsMTQpLmRjKCkpcmV0dXJuITF9ZWxzZSBpZihoIT1udWxsKXJldHVybiExfX1yZXR1cm4hMH0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBseXQodGhpcyl9LGwuWmM9ZnVuY3Rpb24oZSl7dmFyIG4scjtpZih0aGlzLmI9PW51bGwpe2lmKGUhPTApdGhyb3cgaXQobmV3IHlvKEpfK2UrIiwgc2l6ZT0wIikpO3JldHVybiBNZygpLE1nKCksYlB9Zm9yKHI9dGhpcy5MaygpP3RoaXMuS2soKTp0aGlzLkprKCksbj0wO248ZTsrK24pa3oocik7cmV0dXJuIHJ9LGwuaWk9ZnVuY3Rpb24oZSxuKXt0aHJvdyBpdChuZXcgT3IpfSxsLmppPWZ1bmN0aW9uKGUsbil7dGhyb3cgaXQobmV3IE9yKX0sbC5Kaz1mdW5jdGlvbigpe3JldHVybiBuZXcgU2oodGhpcy5hLHRoaXMuYil9LGwuS2s9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFYydCh0aGlzLmEsdGhpcy5iKX0sbC5Maz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmdjPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoLGQ7aWYobz0wLHRoaXMuYiE9bnVsbCl7Zm9yKHI9MDtyPHRoaXMuYi5sZW5ndGg7KytyKWlmKGU9dGhpcy5iW3JdLCF0aGlzLk1rKCl8fHRoaXMuYS5taChlKSlpZihkPXRoaXMuYS5iaChlLCExKSx0bygpLHUoZSw2NikuT2ooKSlmb3Iobj11KGQsMTUzKSxzPTAsaD1uLmdjKCk7czxoOysrcyljWHQobi5pbChzKSkmJm4uamwocykhPW51bGwmJisrbztlbHNlIGUuJGooKT9vKz11KGQsMTQpLmdjKCk6ZCE9bnVsbCYmKytvfXJldHVybiBvfSxsLk1rPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3ZhciBSZnQ7RigkaSwiRUNvbnRlbnRzRUxpc3QiLDQ4NiksRCgxMTU2LDQ4NixOSCxJV3QpLGwuSms9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9XdCh0aGlzLmEsdGhpcy5iKX0sbC5Laz1mdW5jdGlvbigpe3JldHVybiBuZXcgUFd0KHRoaXMuYSx0aGlzLmIpfSxsLk1rPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVOYW1lZEVsZW1lbnRJbXBsLzEiLDExNTYpLEQoMjc5LDEsQkgsU2opLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5SYj1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgT3IpfSxsLk5rPWZ1bmN0aW9uKGUpe2lmKHRoaXMuZyE9MHx8dGhpcy5lKXRocm93IGl0KG5ldyBObygiSXRlcmF0b3IgYWxyZWFkeSBpbiB1c2Ugb3IgYWxyZWFkeSBmaWx0ZXJlZCIpKTt0aGlzLmU9ZX0sbC5PYj1mdW5jdGlvbigpe3ZhciBlLG4scixzLG8saDtzd2l0Y2godGhpcy5nKXtjYXNlIDM6Y2FzZSAyOnJldHVybiEwO2Nhc2UgMTpyZXR1cm4hMTtjYXNlLTM6dGhpcy5wP3RoaXMucC5QYigpOisrdGhpcy5uO2RlZmF1bHQ6aWYoIXRoaXMua3x8KHRoaXMucD8hdW9lKHRoaXMsdGhpcy5wKTohWG9lKHRoaXMpKSl7Zm9yKDt0aGlzLmQ8dGhpcy5jLmxlbmd0aDspaWYobj10aGlzLmNbdGhpcy5kKytdLCghdGhpcy5lfHxuLkdqKCkhPWo3fHxuLmFqKCkhPTApJiYoIXRoaXMuTWsoKXx8dGhpcy5iLm1oKG4pKSl7aWYoaD10aGlzLmIuYmgobix0aGlzLkxrKCkpLHRoaXMuZj0odG8oKSx1KG4sNjYpLk9qKCkpLHRoaXMuZnx8bi4kaigpKXtpZih0aGlzLkxrKCk/KHM9dShoLDE1KSx0aGlzLms9cyk6KHM9dShoLDY5KSx0aGlzLms9dGhpcy5qPXMpLF90KHRoaXMuayw1NCk/KHRoaXMucD1udWxsLHRoaXMubz10aGlzLmsuZ2MoKSx0aGlzLm49MCk6dGhpcy5wPXRoaXMuaj90aGlzLmouJGgoKTp0aGlzLmsuWWMoKSx0aGlzLnA/dW9lKHRoaXMsdGhpcy5wKTpYb2UodGhpcykpcmV0dXJuIG89dGhpcy5wP3RoaXMucC5QYigpOnRoaXMuaj90aGlzLmoucGkodGhpcy5uKyspOnRoaXMuay5YYih0aGlzLm4rKyksdGhpcy5mPyhlPXUobyw3MiksZS5haygpLHI9ZS5kZCgpLHRoaXMuaT1yKToocj1vLHRoaXMuaT1yKSx0aGlzLmc9MywhMH1lbHNlIGlmKGghPW51bGwpcmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHI9aCx0aGlzLmk9cix0aGlzLmc9MiwhMH1yZXR1cm4gdGhpcy5rPW51bGwsdGhpcy5wPW51bGwsdGhpcy5mPSExLHRoaXMuZz0xLCExfWVsc2UgcmV0dXJuIG89dGhpcy5wP3RoaXMucC5QYigpOnRoaXMuaj90aGlzLmoucGkodGhpcy5uKyspOnRoaXMuay5YYih0aGlzLm4rKyksdGhpcy5mPyhlPXUobyw3MiksZS5haygpLHI9ZS5kZCgpLHRoaXMuaT1yKToocj1vLHRoaXMuaT1yKSx0aGlzLmc9MywhMH19LGwuU2I9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscyxvLGg7c3dpdGNoKHRoaXMuZyl7Y2FzZS0zOmNhc2UtMjpyZXR1cm4hMDtjYXNlLTE6cmV0dXJuITE7Y2FzZSAzOnRoaXMucD90aGlzLnAuVWIoKTotLXRoaXMubjtkZWZhdWx0OmlmKCF0aGlzLmt8fCh0aGlzLnA/IWxvZSh0aGlzLHRoaXMucCk6IWtvZSh0aGlzKSkpe2Zvcig7dGhpcy5kPjA7KWlmKG49dGhpcy5jWy0tdGhpcy5kXSwoIXRoaXMuZXx8bi5HaigpIT1qN3x8bi5haigpIT0wKSYmKCF0aGlzLk1rKCl8fHRoaXMuYi5taChuKSkpe2lmKGg9dGhpcy5iLmJoKG4sdGhpcy5MaygpKSx0aGlzLmY9KHRvKCksdShuLDY2KS5PaigpKSx0aGlzLmZ8fG4uJGooKSl7aWYodGhpcy5MaygpPyhzPXUoaCwxNSksdGhpcy5rPXMpOihzPXUoaCw2OSksdGhpcy5rPXRoaXMuaj1zKSxfdCh0aGlzLmssNTQpPyh0aGlzLm89dGhpcy5rLmdjKCksdGhpcy5uPXRoaXMubyk6dGhpcy5wPXRoaXMuaj90aGlzLmouX2godGhpcy5rLmdjKCkpOnRoaXMuay5aYyh0aGlzLmsuZ2MoKSksdGhpcy5wP2xvZSh0aGlzLHRoaXMucCk6a29lKHRoaXMpKXJldHVybiBvPXRoaXMucD90aGlzLnAuVWIoKTp0aGlzLmo/dGhpcy5qLnBpKC0tdGhpcy5uKTp0aGlzLmsuWGIoLS10aGlzLm4pLHRoaXMuZj8oZT11KG8sNzIpLGUuYWsoKSxyPWUuZGQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPS0zLCEwfWVsc2UgaWYoaCE9bnVsbClyZXR1cm4gdGhpcy5rPW51bGwsdGhpcy5wPW51bGwscj1oLHRoaXMuaT1yLHRoaXMuZz0tMiwhMH1yZXR1cm4gdGhpcy5rPW51bGwsdGhpcy5wPW51bGwsdGhpcy5nPS0xLCExfWVsc2UgcmV0dXJuIG89dGhpcy5wP3RoaXMucC5VYigpOnRoaXMuaj90aGlzLmoucGkoLS10aGlzLm4pOnRoaXMuay5YYigtLXRoaXMubiksdGhpcy5mPyhlPXUobyw3MiksZS5haygpLHI9ZS5kZCgpLHRoaXMuaT1yKToocj1vLHRoaXMuaT1yKSx0aGlzLmc9LTMsITB9fSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGt6KHRoaXMpfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5VYj1mdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMuZzwtMXx8dGhpcy5TYigpKXJldHVybi0tdGhpcy5hLHRoaXMuZz0wLGU9dGhpcy5pLHRoaXMuU2IoKSxlO3Rocm93IGl0KG5ldyBsYyl9LGwuVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLTF9LGwuUWI9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgT3IpfSxsLkxrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuV2I9ZnVuY3Rpb24oZSl7dGhyb3cgaXQobmV3IE9yKX0sbC5Naz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmE9MCxsLmQ9MCxsLmY9ITEsbC5nPTAsbC5uPTAsbC5vPTA7dmFyIGJQO0YoJGksIkVDb250ZW50c0VMaXN0L0ZlYXR1cmVJdGVyYXRvckltcGwiLDI3OSksRCg2OTcsMjc5LEJILFYydCksbC5Maz1mdW5jdGlvbigpe3JldHVybiEwfSxGKCRpLCJFQ29udGVudHNFTGlzdC9SZXNvbHZpbmdGZWF0dXJlSXRlcmF0b3JJbXBsIiw2OTcpLEQoMTE1Nyw2OTcsQkgsUFd0KSxsLk1rPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVOYW1lZEVsZW1lbnRJbXBsLzEvMSIsMTE1NyksRCgxMTU4LDI3OSxCSCxPV3QpLGwuTWs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRihNbiwiRU5hbWVkRWxlbWVudEltcGwvMS8yIiwxMTU4KSxEKDM2LDE0MyxuTyxRbSxScnQsSnMsSnJ0LHowLGJmLFltdCxjWnQsS210LHVadCxtbXQsbFp0LFptdCxoWnQseW10LGZadCxYbXQsZFp0LEE5LG1ELGJydCxRbXQsZ1p0LHhtdCxwWnQpLGwuX2k9ZnVuY3Rpb24oKXtyZXR1cm4gSW10KHRoaXMpfSxsLmdqPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9SW10KHRoaXMpLGU/ZS56aigpOm51bGx9LGwueWk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYj09LTEmJnRoaXMuYSYmKHRoaXMuYj10aGlzLmMuWGcodGhpcy5hLmFqKCksdGhpcy5hLkdqKCkpKSx0aGlzLmMuT2codGhpcy5iLGUpfSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30sbC5oaj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPUltdCh0aGlzKSxlP2UuS2ooKTohMX0sbC5iPS0xLEYoTW4sIkVOb3RpZmljYXRpb25JbXBsIiwzNiksRCgzOTksMjg0LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSw1OToxLDEwODoxLDQ3MjoxLDQ5OjEsOTc6MSwxNTA6MSwzOTk6MSwyODQ6MSwxMTQ6MSwxMTU6MX0saWV0KSxsLlFnPWZ1bmN0aW9uKGUpe3JldHVybiByYWUodGhpcyxlKX0sbC5fZz1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBObigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIHBlKHRoaXMucyk7Y2FzZSA1OnJldHVybiBwZSh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gTm4oKSxoPXRoaXMudCxoPjF8fGg9PS0xO2Nhc2UgNzpyZXR1cm4gTm4oKSxvPXRoaXMucyxvPj0xO2Nhc2UgODpyZXR1cm4gbj9EaCh0aGlzKTp0aGlzLnI7Y2FzZSA5OnJldHVybiB0aGlzLnE7Y2FzZSAxMDpyZXR1cm4gdGhpcy5EYj4+MTY9PTEwP3UodGhpcy5DYiwyNik6bnVsbDtjYXNlIDExOnJldHVybiF0aGlzLmQmJih0aGlzLmQ9bmV3IEZ1KGh1LHRoaXMsMTEpKSx0aGlzLmQ7Y2FzZSAxMjpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBmZShWdix0aGlzLDEyLDEwKSksdGhpcy5jO2Nhc2UgMTM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgR00odGhpcyx0aGlzKSksdGhpcy5hO2Nhc2UgMTQ6cmV0dXJuIGFsKHRoaXMpfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksY3ApKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxjcCksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLFpjKHRoaXMuQWIsZSxyKTtjYXNlIDEwOnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP3JhZSh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSxIbCh0aGlzLGUsMTAscik7Y2FzZSAxMjpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBmZShWdix0aGlzLDEyLDEwKSksWmModGhpcy5jLGUscil9cmV0dXJuIGg9dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxjcCkpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLGNwKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSA5OnJldHVybiBucnQodGhpcyxyKTtjYXNlIDEwOnJldHVybiBIbCh0aGlzLG51bGwsMTAscik7Y2FzZSAxMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBGdShodSx0aGlzLDExKSksQmEodGhpcy5kLGUscik7Y2FzZSAxMjpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBmZShWdix0aGlzLDEyLDEwKSksQmEodGhpcy5jLGUscik7Y2FzZSAxNDpyZXR1cm4gQmEoYWwodGhpcyksZSxyKX1yZXR1cm4gbz11KHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fChkbigpLGNwKSksbiksNjYpLG8uTmooKS5Saih0aGlzLHN1KHRoaXMpLG4tSm4oKGRuKCksY3ApKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIHM9dGhpcy50LHM+MXx8cz09LTE7Y2FzZSA3OnJldHVybiByPXRoaXMucyxyPj0xO2Nhc2UgODpyZXR1cm4hIXRoaXMuciYmIXRoaXMucS5lJiZxdyh0aGlzLnEpLmk9PTA7Y2FzZSA5OnJldHVybiEhdGhpcy5xJiYhKHRoaXMuciYmIXRoaXMucS5lJiZxdyh0aGlzLnEpLmk9PTApO2Nhc2UgMTA6cmV0dXJuISEodGhpcy5EYj4+MTY9PTEwJiZ1KHRoaXMuQ2IsMjYpKTtjYXNlIDExOnJldHVybiEhdGhpcy5kJiZ0aGlzLmQuaSE9MDtjYXNlIDEyOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDEzOnJldHVybiEhdGhpcy5hJiZhbCh0aGlzLmEuYSkuaSE9MCYmISh0aGlzLmImJm1zdCh0aGlzLmIpKTtjYXNlIDE0OnJldHVybiEhdGhpcy5iJiZtc3QodGhpcy5iKX1yZXR1cm4gb2godGhpcyxlLUpuKChkbigpLGNwKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8Y3ApLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByLHM7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLGlzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpRYyh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOnpnKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAzOnFnKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSA0OlJnKHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA1OnJ5KHRoaXMsdShuLDE5KS5hKTtyZXR1cm47Y2FzZSA4OmIyKHRoaXMsdShuLDEzOCkpO3JldHVybjtjYXNlIDk6cz1GMSh0aGlzLHUobiw4NyksbnVsbCkscyYmcy5GaSgpO3JldHVybjtjYXNlIDExOiF0aGlzLmQmJih0aGlzLmQ9bmV3IEZ1KGh1LHRoaXMsMTEpKSx4cih0aGlzLmQpLCF0aGlzLmQmJih0aGlzLmQ9bmV3IEZ1KGh1LHRoaXMsMTEpKSxpcyh0aGlzLmQsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgZmUoVnYsdGhpcywxMiwxMCkpLHhyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgZmUoVnYsdGhpcywxMiwxMCkpLGlzKHRoaXMuYyx1KG4sMTQpKTtyZXR1cm47Y2FzZSAxMzohdGhpcy5hJiYodGhpcy5hPW5ldyBHTSh0aGlzLHRoaXMpKSxBXyh0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IEdNKHRoaXMsdGhpcykpLGlzKHRoaXMuYSx1KG4sMTQpKTtyZXR1cm47Y2FzZSAxNDp4cihhbCh0aGlzKSksaXMoYWwodGhpcyksdShuLDE0KSk7cmV0dXJufWdoKHRoaXMsZS1KbigoZG4oKSxjcCkpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fGNwKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLGNwfSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuLHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpRYyh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6emcodGhpcywhMCk7cmV0dXJuO2Nhc2UgMzpxZyh0aGlzLCEwKTtyZXR1cm47Y2FzZSA0OlJnKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTpyeSh0aGlzLDEpO3JldHVybjtjYXNlIDg6YjIodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA5OnI9RjEodGhpcyxudWxsLG51bGwpLHImJnIuRmkoKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5kJiYodGhpcy5kPW5ldyBGdShodSx0aGlzLDExKSkseHIodGhpcy5kKTtyZXR1cm47Y2FzZSAxMjohdGhpcy5jJiYodGhpcy5jPW5ldyBmZShWdix0aGlzLDEyLDEwKSkseHIodGhpcy5jKTtyZXR1cm47Y2FzZSAxMzp0aGlzLmEmJkFfKHRoaXMuYSk7cmV0dXJuO2Nhc2UgMTQ6dGhpcy5iJiZ4cih0aGlzLmIpO3JldHVybn1maCh0aGlzLGUtSm4oKGRuKCksY3ApKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxjcCksZSkpfSxsLkdoPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZih0aGlzLmMpZm9yKGU9MCxuPXRoaXMuYy5pO2U8bjsrK2Upek0oQXQodGhpcy5jLGUpKTtEaCh0aGlzKSx0aGlzLkJifD0xfSxGKE1uLCJFT3BlcmF0aW9uSW1wbCIsMzk5KSxEKDUwNSw3NDIsejh0LEdNKSxsLkhpPWZ1bmN0aW9uKGUsbil7Z1plKHRoaXMsZSx1KG4sMTM4KSl9LGwuSWk9ZnVuY3Rpb24oZSl7bFFlKHRoaXMsdShlLDEzOCkpfSxsLk9pPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIG49dShBdChhbCh0aGlzLmEpLGUpLDg3KSxyPW4uYyxyfHwoZG4oKSxXMSl9LGwuVGk9ZnVuY3Rpb24oZSl7dmFyIG4scjtyZXR1cm4gbj11KGJ5KGFsKHRoaXMuYSksZSksODcpLHI9bi5jLHJ8fChkbigpLFcxKX0sbC5VaT1mdW5jdGlvbihlLG4pe3JldHVybiBoZm4odGhpcyxlLHUobiwxMzgpKX0sbC5haT1mdW5jdGlvbigpe3JldHVybiExfSxsLlppPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG51bGx9LGwuSmk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEt6dCh0aGlzKX0sbC5LaT1mdW5jdGlvbigpe3hyKGFsKHRoaXMuYSkpfSxsLkxpPWZ1bmN0aW9uKGUpe3JldHVybiBoaWUodGhpcyxlKX0sbC5NaT1mdW5jdGlvbihlKXt2YXIgbixyO2ZvcihyPWUuS2MoKTtyLk9iKCk7KWlmKG49ci5QYigpLCFoaWUodGhpcyxuKSlyZXR1cm4hMTtyZXR1cm4hMH0sbC5OaT1mdW5jdGlvbihlKXt2YXIgbixyLHM7aWYoX3QoZSwxNSkmJihzPXUoZSwxNSkscy5nYygpPT1hbCh0aGlzLmEpLmkpKXtmb3Iobj1zLktjKCkscj1uZXcgbnIodGhpcyk7bi5PYigpOylpZihWdChuLlBiKCkpIT09VnQoZHIocikpKXJldHVybiExO3JldHVybiEwfXJldHVybiExfSxsLlBpPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztmb3Iocj0xLG49bmV3IG5yKGFsKHRoaXMuYSkpO24uZSE9bi5pLmdjKCk7KWU9dShkcihuKSw4Nykscz0obz1lLmMsb3x8KGRuKCksVzEpKSxyPTMxKnIrKHM/SGkocyk6MCk7cmV0dXJuIHJ9LGwuUWk9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG87Zm9yKHM9MCxyPW5ldyBucihhbCh0aGlzLmEpKTtyLmUhPXIuaS5nYygpOyl7aWYobj11KGRyKHIpLDg3KSxWdChlKT09PVZ0KChvPW4uYyxvfHwoZG4oKSxXMSkpKSlyZXR1cm4gczsrK3N9cmV0dXJuLTF9LGwuUmk9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcy5hKS5pPT0wfSxsLlNpPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwuVmk9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcy5hKS5pfSxsLldpPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbyxoO2ZvcihoPWFsKHRoaXMuYSkuaSxvPU50KFFuLERlLDEsaCw1LDEpLHI9MCxuPW5ldyBucihhbCh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyllPXUoZHIobiksODcpLG9bcisrXT0ocz1lLmMsc3x8KGRuKCksVzEpKTtyZXR1cm4gb30sbC5YaT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdjtmb3Iodj1hbCh0aGlzLmEpLmksZS5sZW5ndGg8diYmKG89TUQob2woZSkuYyx2KSxlPW8pLGUubGVuZ3RoPnYmJnRzKGUsdixudWxsKSxzPTAscj1uZXcgbnIoYWwodGhpcy5hKSk7ci5lIT1yLmkuZ2MoKTspbj11KGRyKHIpLDg3KSxoPShkPW4uYyxkfHwoZG4oKSxXMSkpLHRzKGUscysrLGgpO3JldHVybiBlfSxsLllpPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztmb3Iobz1uZXcgQWcsby5hKz0iWyIsZT1hbCh0aGlzLmEpLG49MCxzPWFsKHRoaXMuYSkuaTtuPHM7KWdvKG8sYjkoKHI9dShBdChlLG4pLDg3KS5jLHJ8fChkbigpLFcxKSkpKSwrK248cyYmKG8uYSs9WWEpO3JldHVybiBvLmErPSJdIixvLmF9LGwuJGk9ZnVuY3Rpb24oZSl7fSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuIDEzfSxsLkJrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5Daz1mdW5jdGlvbigpe3JldHVybiExfSxsLkRrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5yaz1mdW5jdGlvbigpe3JldHVybiExfSxsLkZrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTM4KX0sbC5maj1mdW5jdGlvbigpe3JldHVybiBnc24odGhpcy5hKX0sbC5oaT1mdW5jdGlvbigpe3JldHVybiEwfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVPcGVyYXRpb25JbXBsLzEiLDUwNSksRCgxMzQwLDE5NjQsakUsS3p0KSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiBERCh0aGlzLmEsZSl9LGwuZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gYWwodGhpcy5hLmEpLml9LEYoTW4sIkVPcGVyYXRpb25JbXBsLzEvMSIsMTM0MCksRCgxMzQxLDU0NSx6byxGS3QpLGwuaWk9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3JldHVybiByPXUocl8odGhpcyxlLG4pLDg3KSx4bCh0aGlzLmUpJiZuOCh0aGlzLG5ldyBtRCh0aGlzLmEsNywoZG4oKSx3NWUpLHBlKG4pLChzPXIuYyxzfHxXMSksZSkpLHJ9LGwuamo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gU2xuKHRoaXMsdShlLDg3KSxuKX0sbC5raj1mdW5jdGlvbihlLG4pe3JldHVybiBBbG4odGhpcyx1KGUsODcpLG4pfSxsLmxqPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gU2ZuKHRoaXMsdShlLDg3KSx1KG4sODcpLHIpfSxsLlppPWZ1bmN0aW9uKGUsbixyLHMsbyl7c3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4gRjkodGhpcyxlLG4scixzLHRoaXMuaT4xKTtjYXNlIDU6cmV0dXJuIEY5KHRoaXMsZSxuLHIscyx0aGlzLmktdShyLDE1KS5nYygpPjApO2RlZmF1bHQ6cmV0dXJuIG5ldyB6MCh0aGlzLmUsZSx0aGlzLmMsbixyLHMsITApfX0sbC5paj1mdW5jdGlvbigpe3JldHVybiEwfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIG1zdCh0aGlzKX0sbC5Yaj1mdW5jdGlvbigpe3hyKHRoaXMpfSxGKE1uLCJFT3BlcmF0aW9uSW1wbC8yIiwxMzQxKSxEKDQ5OCwxLHsxOTM4OjEsNDk4OjF9LFFHdCksRihNbiwiRVBhY2thZ2VJbXBsLzEiLDQ5OCksRCgxNiw4NSx6byxmZSksbC56az1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuQWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLkRrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuYj0wLEYoJGksIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QiLDE2KSxEKDM1MywxNix6byxSeCksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGc2KHRoaXMsZSx1KG4sNTYpKX0sRigkaSwiRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VFTGlzdC9SZXNvbHZpbmciLDM1MyksRCgyOTgsMzUzLHpvLEdtKSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5hLnRiPW51bGx9LEYoTW4sIkVQYWNrYWdlSW1wbC8yIiwyOTgpLEQoMTIyOCwxLHt9LGhCKSxGKE1uLCJFUGFja2FnZUltcGwvMyIsMTIyOCksRCg3MTgsNDMsQTQsVXB0KSxsLl9iPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKT93cnQodGhpcyxlKTohIUxvKHRoaXMuZixlKX0sRihNbiwiRVBhY2thZ2VSZWdpc3RyeUltcGwiLDcxOCksRCg1MDksMjg0LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwyMDE3OjEsMTA4OjEsNDcyOjEsNDk6MSw5NzoxLDE1MDoxLDUwOToxLDI4NDoxLDExNDoxLDExNToxfSxzZXQpLGwuUWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGlhZSh0aGlzLGUpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGg7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBObigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDM6cmV0dXJuIE5uKCksISEodGhpcy5CYiY1MTIpO2Nhc2UgNDpyZXR1cm4gcGUodGhpcy5zKTtjYXNlIDU6cmV0dXJuIHBlKHRoaXMudCk7Y2FzZSA2OnJldHVybiBObigpLGg9dGhpcy50LGg+MXx8aD09LTE7Y2FzZSA3OnJldHVybiBObigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP0RoKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiB0aGlzLkRiPj4xNj09MTA/dSh0aGlzLkNiLDU5KTpudWxsfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksaTMpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxpMyksZSksbixyKX0sbC5oaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyxoO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLFpjKHRoaXMuQWIsZSxyKTtjYXNlIDEwOnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP2lhZSh0aGlzLHIpOnRoaXMuQ2IuaWgodGhpcywtMS1vLG51bGwscikpKSxIbCh0aGlzLGUsMTAscil9cmV0dXJuIGg9dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxpMykpLG4pLDY2KSxoLk5qKCkuUWoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLGkzKSksZSxyKX0sbC5qaD1mdW5jdGlvbihlLG4scil7dmFyIHMsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxCYSh0aGlzLkFiLGUscik7Y2FzZSA5OnJldHVybiBucnQodGhpcyxyKTtjYXNlIDEwOnJldHVybiBIbCh0aGlzLG51bGwsMTAscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxpMykpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLGkzKSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbixyLHM7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBzPXRoaXMudCxzPjF8fHM9PS0xO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmcXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybiEhKHRoaXMuRGI+PjE2PT0xMCYmdSh0aGlzLkNiLDU5KSl9cmV0dXJuIG9oKHRoaXMsZS1KbigoZG4oKSxpMykpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fGkzKSxlKSl9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxpM30sRihNbiwiRVBhcmFtZXRlckltcGwiLDUwOSksRCg5OSw0NDksezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDE4OjEsMTcwOjEsNjY6MSwxMDg6MSw0NzI6MSw0OToxLDk3OjEsMTUwOjEsOTk6MSw0NDk6MSwyODQ6MSwxMTQ6MSwxMTU6MSw2Nzc6MX0sSzJ0KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZDtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIE5uKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBwZSh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gcGUodGhpcy50KTtjYXNlIDY6cmV0dXJuIE5uKCksZD10aGlzLnQsZD4xfHxkPT0tMTtjYXNlIDc6cmV0dXJuIE5uKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/RGgodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIE5uKCksISEodGhpcy5CYiZ4Zik7Y2FzZSAxMTpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJkR5KTtjYXNlIDEyOnJldHVybiBObigpLCEhKHRoaXMuQmImRXkpO2Nhc2UgMTM6cmV0dXJuIHRoaXMuajtjYXNlIDE0OnJldHVybiBTRSh0aGlzKTtjYXNlIDE1OnJldHVybiBObigpLCEhKHRoaXMuQmImSHUpO2Nhc2UgMTY6cmV0dXJuIE5uKCksISEodGhpcy5CYiZtZCk7Y2FzZSAxNzpyZXR1cm4gWW0odGhpcyk7Y2FzZSAxODpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJmRjKTtjYXNlIDE5OnJldHVybiBObigpLGg9bm8odGhpcyksISEoaCYmaC5CYiZkYyk7Y2FzZSAyMDpyZXR1cm4gTm4oKSwhISh0aGlzLkJiJkthKTtjYXNlIDIxOnJldHVybiBuP25vKHRoaXMpOnRoaXMuYjtjYXNlIDIyOnJldHVybiBuP0l5dCh0aGlzKTpCSnQodGhpcyk7Y2FzZSAyMzpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBZMyhlMyx0aGlzLDIzKSksdGhpcy5hfXJldHVybiB1aCh0aGlzLGUtSm4oKGRuKCksbDUpKSx5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHxsNSksZSksbixyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbixyLHMsbztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIG89dGhpcy50LG8+MXx8bz09LTE7Y2FzZSA3OnJldHVybiByPXRoaXMucyxyPj0xO2Nhc2UgODpyZXR1cm4hIXRoaXMuciYmIXRoaXMucS5lJiZxdyh0aGlzLnEpLmk9PTA7Y2FzZSA5OnJldHVybiEhdGhpcy5xJiYhKHRoaXMuciYmIXRoaXMucS5lJiZxdyh0aGlzLnEpLmk9PTApO2Nhc2UgMTA6cmV0dXJuKHRoaXMuQmImeGYpPT0wO2Nhc2UgMTE6cmV0dXJuKHRoaXMuQmImRHkpIT0wO2Nhc2UgMTI6cmV0dXJuKHRoaXMuQmImRXkpIT0wO2Nhc2UgMTM6cmV0dXJuIHRoaXMuaiE9bnVsbDtjYXNlIDE0OnJldHVybiBTRSh0aGlzKSE9bnVsbDtjYXNlIDE1OnJldHVybih0aGlzLkJiJkh1KSE9MDtjYXNlIDE2OnJldHVybih0aGlzLkJiJm1kKSE9MDtjYXNlIDE3OnJldHVybiEhWW0odGhpcyk7Y2FzZSAxODpyZXR1cm4odGhpcy5CYiZkYykhPTA7Y2FzZSAxOTpyZXR1cm4gcz1ubyh0aGlzKSwhIXMmJihzLkJiJmRjKSE9MDtjYXNlIDIwOnJldHVybih0aGlzLkJiJkthKT09MDtjYXNlIDIxOnJldHVybiEhdGhpcy5iO2Nhc2UgMjI6cmV0dXJuISFCSnQodGhpcyk7Y2FzZSAyMzpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTB9cmV0dXJuIG9oKHRoaXMsZS1KbigoZG4oKSxsNSkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fGw1KSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXt2YXIgcixzO3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHhyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSxpcyh0aGlzLkFiLHUobiwxNCkpO3JldHVybjtjYXNlIDE6TXJ0KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDI6emcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDM6cWcodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDQ6UmcodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDU6cnkodGhpcyx1KG4sMTkpLmEpO3JldHVybjtjYXNlIDg6YjIodGhpcyx1KG4sMTM4KSk7cmV0dXJuO2Nhc2UgOTpzPUYxKHRoaXMsdShuLDg3KSxudWxsKSxzJiZzLkZpKCk7cmV0dXJuO2Nhc2UgMTA6bEUodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDExOmRFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxMjpoRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTM6cjJ0KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDE1OmZFKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAxNjpnRSh0aGlzLGplKFJlKG4pKSk7cmV0dXJuO2Nhc2UgMTg6eGluKHRoaXMsamUoUmUobikpKTtyZXR1cm47Y2FzZSAyMDp1M3QodGhpcyxqZShSZShuKSkpO3JldHVybjtjYXNlIDIxOmN5dCh0aGlzLHUobiwxOCkpO3JldHVybjtjYXNlIDIzOiF0aGlzLmEmJih0aGlzLmE9bmV3IFkzKGUzLHRoaXMsMjMpKSx4cih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IFkzKGUzLHRoaXMsMjMpKSxpcyh0aGlzLmEsdShuLDE0KSk7cmV0dXJufWdoKHRoaXMsZS1KbigoZG4oKSxsNSkpLHluKChyPXUoRG4odGhpcywxNiksMjYpLHJ8fGw1KSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBkbigpLGw1fSxsLkJoPWZ1bmN0aW9uKGUpe3ZhciBuLHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpfdCh0aGlzLkNiLDg4KSYmZ3koc2wodSh0aGlzLkNiLDg4KSksNCksUWModGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOnpnKHRoaXMsITApO3JldHVybjtjYXNlIDM6cWcodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDpSZyh0aGlzLDApO3JldHVybjtjYXNlIDU6cnkodGhpcywxKTtyZXR1cm47Y2FzZSA4OmIyKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPUYxKHRoaXMsbnVsbCxudWxsKSxyJiZyLkZpKCk7cmV0dXJuO2Nhc2UgMTA6bEUodGhpcywhMCk7cmV0dXJuO2Nhc2UgMTE6ZEUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTI6aEUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5pPW51bGwsZnoodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxNTpmRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxNjpnRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxODpjM3QodGhpcywhMSksX3QodGhpcy5DYiw4OCkmJmd5KHNsKHUodGhpcy5DYiw4OCkpLDIpO3JldHVybjtjYXNlIDIwOnUzdCh0aGlzLCEwKTtyZXR1cm47Y2FzZSAyMTpjeXQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyMzohdGhpcy5hJiYodGhpcy5hPW5ldyBZMyhlMyx0aGlzLDIzKSkseHIodGhpcy5hKTtyZXR1cm59ZmgodGhpcyxlLUpuKChkbigpLGw1KSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8bDUpLGUpKX0sbC5HaD1mdW5jdGlvbigpe0l5dCh0aGlzKSxNOChUbygoJHUoKSx5YSksdGhpcykpLERoKHRoaXMpLHRoaXMuQmJ8PTF9LGwuTGo9ZnVuY3Rpb24oKXtyZXR1cm4gbm8odGhpcyl9LGwucWs9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1ubyh0aGlzKSwhIWUmJihlLkJiJmRjKSE9MH0sbC5yaz1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJmRjKSE9MH0sbC5zaz1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJkthKSE9MH0sbC5uaz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmM9bnVsbCxlM3QodGhpcyxlLG4pfSxsLkliPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuRGImNjQ/X3EodGhpcyk6KGU9bmV3IF9oKF9xKHRoaXMpKSxlLmErPSIgKGNvbnRhaW5tZW50OiAiLExnKGUsKHRoaXMuQmImZGMpIT0wKSxlLmErPSIsIHJlc29sdmVQcm94aWVzOiAiLExnKGUsKHRoaXMuQmImS2EpIT0wKSxlLmErPSIpIixlLmEpfSxGKE1uLCJFUmVmZXJlbmNlSW1wbCIsOTkpLEQoNTQ4LDExNSx7MTA1OjEsNDI6MSw5MjoxLDkwOjEsMTMzOjEsNTY6MSwxMDg6MSw0OToxLDk3OjEsNTQ4OjEsMTE0OjEsMTE1OjF9LGlKKSxsLkZiPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzPT09ZX0sbC5jZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFB3KHRoaXMpfSxsLlVoPWZ1bmN0aW9uKGUpe19lbih0aGlzLEJyKGUpKX0sbC5lZD1mdW5jdGlvbihlKXtyZXR1cm4gZ2VuKHRoaXMsQnIoZSkpfSxsLl9nPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmI7Y2FzZSAxOnJldHVybiB0aGlzLmN9cmV0dXJuIHVoKHRoaXMsZS1KbigoZG4oKSxRYSkpLHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fFFhKSxlKSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3ZhciBuO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYiE9bnVsbDtjYXNlIDE6cmV0dXJuIHRoaXMuYyE9bnVsbH1yZXR1cm4gb2godGhpcyxlLUpuKChkbigpLFFhKSkseW4oKG49dShEbih0aGlzLDE2KSwyNiksbnx8UWEpLGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3ZhciByO3N3aXRjaChlKXtjYXNlIDA6U2VuKHRoaXMsQnIobikpO3JldHVybjtjYXNlIDE6c3l0KHRoaXMsQnIobikpO3JldHVybn1naCh0aGlzLGUtSm4oKGRuKCksUWEpKSx5bigocj11KERuKHRoaXMsMTYpLDI2KSxyfHxRYSksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxRYX0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOml5dCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDE6c3l0KHRoaXMsbnVsbCk7cmV0dXJufWZoKHRoaXMsZS1KbigoZG4oKSxRYSkpLHluKChuPXUoRG4odGhpcywxNiksMjYpLG58fFFhKSxlKSl9LGwuU2g9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gdGhpcy5hPT0tMSYmKGU9dGhpcy5iLHRoaXMuYT1lPT1udWxsPzA6VmcoZSkpLHRoaXMuYX0sbC5UaD1mdW5jdGlvbihlKXt0aGlzLmE9ZX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLkRiJjY0P21mKHRoaXMpOihlPW5ldyBfaChtZih0aGlzKSksZS5hKz0iIChrZXk6ICIsZ28oZSx0aGlzLmIpLGUuYSs9IiwgdmFsdWU6ICIsZ28oZSx0aGlzLmMpLGUuYSs9IikiLGUuYSl9LGwuYT0tMSxsLmI9bnVsbCxsLmM9bnVsbDt2YXIgY2M9RihNbiwiRVN0cmluZ1RvU3RyaW5nTWFwRW50cnlJbXBsIiw1NDgpLEU1ZT1LaSgkaSwiRmVhdHVyZU1hcC9FbnRyeS9JbnRlcm5hbCIpO0QoNTY1LDEsUkgpLGwuT2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuUGsodShlLDQ5KSl9LGwuUGs9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuT2soZSl9LGwuRmI9ZnVuY3Rpb24oZSl7dmFyIG4scjtyZXR1cm4gdGhpcz09PWU/ITA6X3QoZSw3Mik/KG49dShlLDcyKSxuLmFrKCk9PXRoaXMuYz8ocj10aGlzLmRkKCkscj09bnVsbD9uLmRkKCk9PW51bGw6eWkocixuLmRkKCkpKTohMSk6ITF9LGwuYWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxsLkhiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5kZCgpLEhpKHRoaXMuYyleKGU9PW51bGw/MDpIaShlKSl9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZSxuO3JldHVybiBlPXRoaXMuYyxuPVJsKGUuSGooKSkuUGgoKSxlLm5lKCksKG4hPW51bGwmJm4ubGVuZ3RoIT0wP24rIjoiK2UubmUoKTplLm5lKCkpKyI9Iit0aGlzLmRkKCl9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvQmFzaWNGZWF0dXJlTWFwRW50cnkiLDU2NSksRCg3NzYsNTY1LFJILGl3dCksbC5Qaz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGl3dCh0aGlzLmMsZSl9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlFrPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gSGNuKHRoaXMsZSx0aGlzLmEsbixyKX0sbC5Saz1mdW5jdGlvbihlLG4scil7cmV0dXJuIFZjbih0aGlzLGUsdGhpcy5hLG4scil9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvQ29udGFpbm1lbnRVcGRhdGluZ0ZlYXR1cmVNYXBFbnRyeSIsNzc2KSxEKDEzMTQsMSx7fSxaR3QpLGwuUGo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtyZXR1cm4gaD11KGo4KGUsdGhpcy5iKSwyMTUpLGgubmwodGhpcy5hKS5XaihzKX0sbC5Raj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPXUoajgoZSx0aGlzLmIpLDIxNSksaC5lbCh0aGlzLmEscyxvKX0sbC5Saj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPXUoajgoZSx0aGlzLmIpLDIxNSksaC5mbCh0aGlzLmEscyxvKX0sbC5Taj1mdW5jdGlvbihlLG4scil7dmFyIHM7cmV0dXJuIHM9dShqOChlLHRoaXMuYiksMjE1KSxzLm5sKHRoaXMuYSkuZmooKX0sbC5Uaj1mdW5jdGlvbihlLG4scixzKXt2YXIgbztvPXUoajgoZSx0aGlzLmIpLDIxNSksby5ubCh0aGlzLmEpLldiKHMpfSxsLlVqPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdShqOChlLHRoaXMuYiksMjE1KS5ubCh0aGlzLmEpfSxsLlZqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzPXUoajgoZSx0aGlzLmIpLDIxNSkscy5ubCh0aGlzLmEpLlhqKCl9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVGZWF0dXJlTWFwRGVsZWdhdG9yIiwxMzE0KSxEKDg5LDEse30sSWcsbjIsUGcsczIpLGwuUGo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaDtpZihoPW4uQ2gociksaD09bnVsbCYmbi5EaChyLGg9anEodGhpcyxlKSksIW8pc3dpdGNoKHRoaXMuZSl7Y2FzZSA1MDpjYXNlIDQxOnJldHVybiB1KGgsNTg5KS5zaigpO2Nhc2UgNDA6cmV0dXJuIHUoaCwyMTUpLmtsKCl9cmV0dXJuIGh9LGwuUWo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaCxkO3JldHVybiBkPW4uQ2gociksZD09bnVsbCYmbi5EaChyLGQ9anEodGhpcyxlKSksaD11KGQsNjkpLmxrKHMsbyksaH0sbC5Saj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPW4uQ2gociksaCE9bnVsbCYmKG89dShoLDY5KS5tayhzLG8pKSxvfSxsLlNqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz1uLkNoKHIpLHMhPW51bGwmJnUocyw3NikuZmooKX0sbC5Uaj1mdW5jdGlvbihlLG4scixzKXt2YXIgbztvPXUobi5DaChyKSw3NiksIW8mJm4uRGgocixvPWpxKHRoaXMsZSkpLG8uV2Iocyl9LGwuVWo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87cmV0dXJuIG89bi5DaChyKSxvPT1udWxsJiZuLkRoKHIsbz1qcSh0aGlzLGUpKSxfdChvLDc2KT91KG8sNzYpOihzPXUobi5DaChyKSwxNSksbmV3IFF6dChzKSl9LGwuVmo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3M9dShuLkNoKHIpLDc2KSwhcyYmbi5EaChyLHM9anEodGhpcyxlKSkscy5YaigpfSxsLmI9MCxsLmU9MCxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlTWFueSIsODkpLEQoNTA0LDEse30pLGwuUWo9ZnVuY3Rpb24oZSxuLHIscyxvKXt0aHJvdyBpdChuZXcgT3IpfSxsLlJqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dGhyb3cgaXQobmV3IE9yKX0sbC5Vaj1mdW5jdGlvbihlLG4scil7cmV0dXJuIG5ldyBXWHQodGhpcyxlLG4scil9O3ZhciBwMDtGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlIiw1MDQpLEQoMTMzMSwxLGh1dCxXWHQpLGwuV2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYS5Qaih0aGlzLmMsdGhpcy5kLHRoaXMuYixlLCEwKX0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuU2oodGhpcy5jLHRoaXMuZCx0aGlzLmIpfSxsLldiPWZ1bmN0aW9uKGUpe3RoaXMuYS5Uaih0aGlzLmMsdGhpcy5kLHRoaXMuYixlKX0sbC5Yaj1mdW5jdGlvbigpe3RoaXMuYS5Waih0aGlzLmMsdGhpcy5kLHRoaXMuYil9LGwuYj0wLEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGUvMSIsMTMzMSksRCg3NjksNTA0LHt9LCR2dCksbC5Qaj1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiB3YXQoZSxlLmVoKCksZS5WZygpKT09dGhpcy5iP3RoaXMuc2soKSYmcz9lYXQoZSk6ZS5laCgpOm51bGx9LGwuUWo9ZnVuY3Rpb24oZSxuLHIscyxvKXt2YXIgaCxkO3JldHVybiBlLmVoKCkmJihvPShoPWUuVmcoKSxoPj0wP2UuUWcobyk6ZS5laCgpLmloKGUsLTEtaCxudWxsLG8pKSksZD1HaShlLlRnKCksdGhpcy5lKSxlLlNnKHMsZCxvKX0sbC5Saj1mdW5jdGlvbihlLG4scixzLG8pe3ZhciBoO3JldHVybiBoPUdpKGUuVGcoKSx0aGlzLmUpLGUuU2cobnVsbCxoLG8pfSxsLlNqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztyZXR1cm4gcz1HaShlLlRnKCksdGhpcy5lKSwhIWUuZWgoKSYmZS5WZygpPT1zfSxsLlRqPWZ1bmN0aW9uKGUsbixyLHMpe3ZhciBvLGgsZCx2LGs7aWYocyE9bnVsbCYmIXhhdCh0aGlzLmEscykpdGhyb3cgaXQobmV3IGk4KGpIKyhfdChzLDU2KT95NHQodShzLDU2KS5UZygpKTpWbXQob2wocykpKSskSCt0aGlzLmErIiciKSk7aWYobz1lLmVoKCksZD1HaShlLlRnKCksdGhpcy5lKSxWdChzKSE9PVZ0KG8pfHxlLlZnKCkhPWQmJnMhPW51bGwpe2lmKHZFKGUsdShzLDU2KSkpdGhyb3cgaXQobmV3IEZuKFFfK2UuSWIoKSkpO2s9bnVsbCxvJiYoaz0oaD1lLlZnKCksaD49MD9lLlFnKGspOmUuZWgoKS5paChlLC0xLWgsbnVsbCxrKSkpLHY9dShzLDQ5KSx2JiYoaz12LmdoKGUsR2kodi5UZygpLHRoaXMuYiksbnVsbCxrKSksaz1lLlNnKHYsZCxrKSxrJiZrLkZpKCl9ZWxzZSBlLkxnKCkmJmUuTWcoKSYmbWkoZSxuZXcgSnMoZSwxLGQscyxzKSl9LGwuVmo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8saCxkO3M9ZS5laCgpLHM/KGQ9KG89ZS5WZygpLG8+PTA/ZS5RZyhudWxsKTplLmVoKCkuaWgoZSwtMS1vLG51bGwsbnVsbCkpLGg9R2koZS5UZygpLHRoaXMuZSksZD1lLlNnKG51bGwsaCxkKSxkJiZkLkZpKCkpOmUuTGcoKSYmZS5NZygpJiZtaShlLG5ldyBBOShlLDEsdGhpcy5lLG51bGwsbnVsbCkpfSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVDb250YWluZXIiLDc2OSksRCgxMzE1LDc2OSx7fSxqWXQpLGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUNvbnRhaW5lclJlc29sdmluZyIsMTMxNSksRCg1NjMsNTA0LHt9KSxsLlBqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGg7cmV0dXJuIGg9bi5DaChyKSxoPT1udWxsP3RoaXMuYjpWdChoKT09PVZ0KHAwKT9udWxsOmh9LGwuU2o9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPW4uQ2gocikscyE9bnVsbCYmKFZ0KHMpPT09VnQocDApfHwheWkocyx0aGlzLmIpKX0sbC5Uaj1mdW5jdGlvbihlLG4scixzKXt2YXIgbyxoO2UuTGcoKSYmZS5NZygpPyhvPShoPW4uQ2gociksaD09bnVsbD90aGlzLmI6VnQoaCk9PT1WdChwMCk/bnVsbDpoKSxzPT1udWxsP3RoaXMuYyE9bnVsbD8obi5EaChyLG51bGwpLHM9dGhpcy5iKTp0aGlzLmIhPW51bGw/bi5EaChyLHAwKTpuLkRoKHIsbnVsbCk6KHRoaXMuU2socyksbi5EaChyLHMpKSxtaShlLHRoaXMuZC5UayhlLDEsdGhpcy5lLG8scykpKTpzPT1udWxsP3RoaXMuYyE9bnVsbD9uLkRoKHIsbnVsbCk6dGhpcy5iIT1udWxsP24uRGgocixwMCk6bi5EaChyLG51bGwpOih0aGlzLlNrKHMpLG4uRGgocixzKSl9LGwuVmo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87ZS5MZygpJiZlLk1nKCk/KHM9KG89bi5DaChyKSxvPT1udWxsP3RoaXMuYjpWdChvKT09PVZ0KHAwKT9udWxsOm8pLG4uRWgociksbWkoZSx0aGlzLmQuVGsoZSwxLHRoaXMuZSxzLHRoaXMuYikpKTpuLkVoKHIpfSxsLlNrPWZ1bmN0aW9uKGUpe3Rocm93IGl0KG5ldyBvcXQpfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YSIsNTYzKSxEKFI0LDEse30sZkIpLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IEE5KGUsbixyLHMsbyl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgYnJ0KGUsbixyLHMsbyxoKX07dmFyIGNMdCx1THQsbEx0LGhMdCxmTHQsZEx0LGdMdCxqZnQscEx0O0YoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IiLFI0KSxEKDEzMzIsUjQse30sZEIpLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IHhtdChlLG4scixqZShSZShzKSksamUoUmUobykpKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBwWnQoZSxuLHIsamUoUmUocykpLGplKFJlKG8pKSxoKX0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci8xIiwxMzMyKSxEKDEzMzMsUjQse30sZ0IpLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IFltdChlLG4scix1KHMsMjE3KS5hLHUobywyMTcpLmEpfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IGNadChlLG4scix1KHMsMjE3KS5hLHUobywyMTcpLmEsaCl9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMiIsMTMzMyksRCgxMzM0LFI0LHt9LE5rKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBLbXQoZSxuLHIsdShzLDE3MikuYSx1KG8sMTcyKS5hKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyB1WnQoZSxuLHIsdShzLDE3MikuYSx1KG8sMTcyKS5hLGgpfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzMiLDEzMzQpLEQoMTMzNSxSNCx7fSxwQiksbC5Uaz1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgbW10KGUsbixyLFh0KHllKHMpKSxYdCh5ZShvKSkpfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IGxadChlLG4scixYdCh5ZShzKSksWHQoeWUobykpLGgpfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzQiLDEzMzUpLEQoMTMzNixSNCx7fSxiQiksbC5Uaz1mdW5jdGlvbihlLG4scixzLG8pe3JldHVybiBuZXcgWm10KGUsbixyLHUocywxNTUpLmEsdShvLDE1NSkuYSl9LGwuVWs9ZnVuY3Rpb24oZSxuLHIscyxvLGgpe3JldHVybiBuZXcgaFp0KGUsbixyLHUocywxNTUpLmEsdShvLDE1NSkuYSxoKX0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci81IiwxMzM2KSxEKDEzMzcsUjQse30sc0opLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IHltdChlLG4scix1KHMsMTkpLmEsdShvLDE5KS5hKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBmWnQoZSxuLHIsdShzLDE5KS5hLHUobywxOSkuYSxoKX0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci82IiwxMzM3KSxEKDEzMzgsUjQse30sQmspLGwuVGs9ZnVuY3Rpb24oZSxuLHIscyxvKXtyZXR1cm4gbmV3IFhtdChlLG4scix1KHMsMTYyKS5hLHUobywxNjIpLmEpfSxsLlVrPWZ1bmN0aW9uKGUsbixyLHMsbyxoKXtyZXR1cm4gbmV3IGRadChlLG4scix1KHMsMTYyKS5hLHUobywxNjIpLmEsaCl9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvNyIsMTMzOCksRCgxMzM5LFI0LHt9LFJrKSxsLlRrPWZ1bmN0aW9uKGUsbixyLHMsbyl7cmV0dXJuIG5ldyBRbXQoZSxuLHIsdShzLDE4NCkuYSx1KG8sMTg0KS5hKX0sbC5Vaz1mdW5jdGlvbihlLG4scixzLG8saCl7cmV0dXJuIG5ldyBnWnQoZSxuLHIsdShzLDE4NCkuYSx1KG8sMTg0KS5hLGgpfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzgiLDEzMzkpLEQoMTMxNyw1NjMse30sWVh0KSxsLlNrPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmEud2ooZSkpdGhyb3cgaXQobmV3IGk4KGpIK29sKGUpKyRIK3RoaXMuYSsiJyIpKX0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFEeW5hbWljIiwxMzE3KSxEKDEzMTgsNTYzLHt9LE5LdCksbC5Taz1mdW5jdGlvbihlKXt9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhU3RhdGljIiwxMzE4KSxEKDc3MCw1NjMse30pLGwuU2o9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPW4uQ2gocikscyE9bnVsbH0sbC5Uaj1mdW5jdGlvbihlLG4scixzKXt2YXIgbyxoO2UuTGcoKSYmZS5NZygpPyhvPSEwLGg9bi5DaChyKSxoPT1udWxsPyhvPSExLGg9dGhpcy5iKTpWdChoKT09PVZ0KHAwKSYmKGg9bnVsbCkscz09bnVsbD90aGlzLmMhPW51bGw/KG4uRGgocixudWxsKSxzPXRoaXMuYik6bi5EaChyLHAwKToodGhpcy5TayhzKSxuLkRoKHIscykpLG1pKGUsdGhpcy5kLlVrKGUsMSx0aGlzLmUsaCxzLCFvKSkpOnM9PW51bGw/dGhpcy5jIT1udWxsP24uRGgocixudWxsKTpuLkRoKHIscDApOih0aGlzLlNrKHMpLG4uRGgocixzKSl9LGwuVmo9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG87ZS5MZygpJiZlLk1nKCk/KHM9ITAsbz1uLkNoKHIpLG89PW51bGw/KHM9ITEsbz10aGlzLmIpOlZ0KG8pPT09VnQocDApJiYobz1udWxsKSxuLkVoKHIpLG1pKGUsdGhpcy5kLlVrKGUsMix0aGlzLmUsbyx0aGlzLmIscykpKTpuLkVoKHIpfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGUiLDc3MCksRCgxMzE5LDc3MCx7fSxLWHQpLGwuU2s9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuYS53aihlKSl0aHJvdyBpdChuZXcgaTgoakgrb2woZSkrJEgrdGhpcy5hKyInIikpfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGVEeW5hbWljIiwxMzE5KSxEKDEzMjAsNzcwLHt9LEJLdCksbC5Taz1mdW5jdGlvbihlKXt9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhVW5zZXR0YWJsZVN0YXRpYyIsMTMyMCksRCgzOTgsNTA0LHt9LFVqKSxsLlBqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGgsZCx2LGssQztpZihDPW4uQ2gociksdGhpcy5LaigpJiZWdChDKT09PVZ0KHAwKSlyZXR1cm4gbnVsbDtpZih0aGlzLnNrKCkmJnMmJkMhPW51bGwpe2lmKHY9dShDLDQ5KSx2LmtoKCkmJihrPVpwKGUsdiksdiE9aykpe2lmKCF4YXQodGhpcy5hLGspKXRocm93IGl0KG5ldyBpOChqSCtvbChrKSskSCt0aGlzLmErIiciKSk7bi5EaChyLEM9ayksdGhpcy5yaygpJiYoaD11KGssNDkpLGQ9di5paChlLHRoaXMuYj9HaSh2LlRnKCksdGhpcy5iKTotMS1HaShlLlRnKCksdGhpcy5lKSxudWxsLG51bGwpLCFoLmVoKCkmJihkPWguZ2goZSx0aGlzLmI/R2koaC5UZygpLHRoaXMuYik6LTEtR2koZS5UZygpLHRoaXMuZSksbnVsbCxkKSksZCYmZC5GaSgpKSxlLkxnKCkmJmUuTWcoKSYmbWkoZSxuZXcgQTkoZSw5LHRoaXMuZSx2LGspKX1yZXR1cm4gQ31lbHNlIHJldHVybiBDfSxsLlFqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGgsZDtyZXR1cm4gZD1uLkNoKHIpLFZ0KGQpPT09VnQocDApJiYoZD1udWxsKSxuLkRoKHIscyksdGhpcy5iaigpP1Z0KGQpIT09VnQocykmJmQhPW51bGwmJihoPXUoZCw0OSksbz1oLmloKGUsR2koaC5UZygpLHRoaXMuYiksbnVsbCxvKSk6dGhpcy5yaygpJiZkIT1udWxsJiYobz11KGQsNDkpLmloKGUsLTEtR2koZS5UZygpLHRoaXMuZSksbnVsbCxvKSksZS5MZygpJiZlLk1nKCkmJighbyYmKG89bmV3IERwKDQpKSxvLkVpKG5ldyBBOShlLDEsdGhpcy5lLGQscykpKSxvfSxsLlJqPWZ1bmN0aW9uKGUsbixyLHMsbyl7dmFyIGg7cmV0dXJuIGg9bi5DaChyKSxWdChoKT09PVZ0KHAwKSYmKGg9bnVsbCksbi5FaChyKSxlLkxnKCkmJmUuTWcoKSYmKCFvJiYobz1uZXcgRHAoNCkpLHRoaXMuS2ooKT9vLkVpKG5ldyBBOShlLDIsdGhpcy5lLGgsbnVsbCkpOm8uRWkobmV3IEE5KGUsMSx0aGlzLmUsaCxudWxsKSkpLG99LGwuU2o9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3JldHVybiBzPW4uQ2gocikscyE9bnVsbH0sbC5Uaj1mdW5jdGlvbihlLG4scixzKXt2YXIgbyxoLGQsdixrO2lmKHMhPW51bGwmJiF4YXQodGhpcy5hLHMpKXRocm93IGl0KG5ldyBpOChqSCsoX3Qocyw1Nik/eTR0KHUocyw1NikuVGcoKSk6Vm10KG9sKHMpKSkrJEgrdGhpcy5hKyInIikpO2s9bi5DaChyKSx2PWshPW51bGwsdGhpcy5LaigpJiZWdChrKT09PVZ0KHAwKSYmKGs9bnVsbCksZD1udWxsLHRoaXMuYmooKT9WdChrKSE9PVZ0KHMpJiYoayE9bnVsbCYmKG89dShrLDQ5KSxkPW8uaWgoZSxHaShvLlRnKCksdGhpcy5iKSxudWxsLGQpKSxzIT1udWxsJiYobz11KHMsNDkpLGQ9by5naChlLEdpKG8uVGcoKSx0aGlzLmIpLG51bGwsZCkpKTp0aGlzLnJrKCkmJlZ0KGspIT09VnQocykmJihrIT1udWxsJiYoZD11KGssNDkpLmloKGUsLTEtR2koZS5UZygpLHRoaXMuZSksbnVsbCxkKSkscyE9bnVsbCYmKGQ9dShzLDQ5KS5naChlLC0xLUdpKGUuVGcoKSx0aGlzLmUpLG51bGwsZCkpKSxzPT1udWxsJiZ0aGlzLktqKCk/bi5EaChyLHAwKTpuLkRoKHIscyksZS5MZygpJiZlLk1nKCk/KGg9bmV3IGJydChlLDEsdGhpcy5lLGsscyx0aGlzLktqKCkmJiF2KSxkPyhkLkVpKGgpLGQuRmkoKSk6bWkoZSxoKSk6ZCYmZC5GaSgpfSxsLlZqPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLGgsZCx2O3Y9bi5DaChyKSxkPXYhPW51bGwsdGhpcy5LaigpJiZWdCh2KT09PVZ0KHAwKSYmKHY9bnVsbCksaD1udWxsLHYhPW51bGwmJih0aGlzLmJqKCk/KHM9dSh2LDQ5KSxoPXMuaWgoZSxHaShzLlRnKCksdGhpcy5iKSxudWxsLGgpKTp0aGlzLnJrKCkmJihoPXUodiw0OSkuaWgoZSwtMS1HaShlLlRnKCksdGhpcy5lKSxudWxsLGgpKSksbi5FaChyKSxlLkxnKCkmJmUuTWcoKT8obz1uZXcgYnJ0KGUsdGhpcy5LaigpPzI6MSx0aGlzLmUsdixudWxsLGQpLGg/KGguRWkobyksaC5GaSgpKTptaShlLG8pKTpoJiZoLkZpKCl9LGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5yaz1mdW5jdGlvbigpe3JldHVybiExfSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuS2o9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3QiLDM5OCksRCg1NjQsMzk4LHt9LHZudCksbC5yaz1mdW5jdGlvbigpe3JldHVybiEwfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50Iiw1NjQpLEQoMTMyMyw1NjQse30sRld0KSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRSZXNvbHZpbmciLDEzMjMpLEQoNzcyLDU2NCx7fSxHMnQpLGwuS2o9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFVuc2V0dGFibGUiLDc3MiksRCgxMzI1LDc3Mix7fSxOV3QpLGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFVuc2V0dGFibGVSZXNvbHZpbmciLDEzMjUpLEQoNjQwLDU2NCx7fSxJbnQpLGwuYmo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlIiw2NDApLEQoMTMyNCw2NDAse30sJFl0KSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZVJlc29sdmluZyIsMTMyNCksRCg3NzMsNjQwLHt9LER3dCksbC5Laj1mdW5jdGlvbigpe3JldHVybiEwfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VVbnNldHRhYmxlIiw3NzMpLEQoMTMyNiw3NzMse30sell0KSxsLnNrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZVVuc2V0dGFibGVSZXNvbHZpbmciLDEzMjYpLEQoNjQxLDM5OCx7fSxVMnQpLGwuc2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmciLDY0MSksRCgxMzI3LDY0MSx7fSxCV3QpLGwuS2o9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmdVbnNldHRhYmxlIiwxMzI3KSxEKDc3NCw2NDEse30sTHd0KSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nV2l0aEludmVyc2UiLDc3NCksRCgxMzI4LDc3NCx7fSxxWXQpLGwuS2o9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmdXaXRoSW52ZXJzZVVuc2V0dGFibGUiLDEzMjgpLEQoMTMyMSwzOTgse30sUld0KSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0VW5zZXR0YWJsZSIsMTMyMSksRCg3NzEsMzk4LHt9LE13dCksbC5iaj1mdW5jdGlvbigpe3JldHVybiEwfSxGKE1uLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFdpdGhJbnZlcnNlIiw3NzEpLEQoMTMyMiw3NzEse30sSFl0KSxsLktqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0V2l0aEludmVyc2VVbnNldHRhYmxlIiwxMzIyKSxEKDc3NSw1NjUsUkgsX3Z0KSxsLlBrPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgX3Z0KHRoaXMuYSx0aGlzLmMsZSl9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLlFrPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gVmFuKHRoaXMsZSx0aGlzLmIscil9LGwuUms9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBHYW4odGhpcyxlLHRoaXMuYixyKX0sRihNbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnZlcnNlVXBkYXRpbmdGZWF0dXJlTWFwRW50cnkiLDc3NSksRCgxMzI5LDEsaHV0LFF6dCksbC5Xaj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIF90KHRoaXMuYSw5NSk/dSh0aGlzLmEsOTUpLmZqKCk6IXRoaXMuYS5kYygpfSxsLldiPWZ1bmN0aW9uKGUpe3RoaXMuYS4kYigpLHRoaXMuYS5HYyh1KGUsMTUpKX0sbC5Yaj1mdW5jdGlvbigpe190KHRoaXMuYSw5NSk/dSh0aGlzLmEsOTUpLlhqKCk6dGhpcy5hLiRiKCl9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2V0dGluZ01hbnkiLDEzMjkpLEQoMTMzMCw1NjUsUkgsckp0KSxsLk9rPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgeG50KChJaSgpLGZBKSx0aGlzLmIuSWgodGhpcy5hLGUpKX0sbC5kZD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLlFrPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcn0sbC5Saz1mdW5jdGlvbihlLG4scil7cmV0dXJuIHJ9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2ltcGxlQ29udGVudEZlYXR1cmVNYXBFbnRyeSIsMTMzMCksRCg2NDIsNTY1LFJILHhudCksbC5Paz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHhudCh0aGlzLmMsZSl9LGwuZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlFrPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcn0sbC5Saz1mdW5jdGlvbihlLG4scil7cmV0dXJuIHJ9LEYoTW4sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2ltcGxlRmVhdHVyZU1hcEVudHJ5Iiw2NDIpLEQoMzkxLDQ5NyxMZCxUbSksbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoVWgsRGUsMjYsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoTW4sIkVTdXBlckFkYXB0ZXIvMSIsMzkxKSxEKDQ0NCw0MzgsezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDEwODoxLDgzNjoxLDQ5OjEsOTc6MSwxNTA6MSw0NDQ6MSwxMTQ6MSwxMTU6MX0sSEwpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBUOSh0aGlzLGhvLHRoaXMpKSx0aGlzLmF9cmV0dXJuIHVoKHRoaXMsZS1KbigoZG4oKSxVdikpLHluKChzPXUoRG4odGhpcywxNiksMjYpLHN8fFV2KSxlKSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLEJhKHRoaXMuQWIsZSxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgVDkodGhpcyxobyx0aGlzKSksQmEodGhpcy5hLGUscil9cmV0dXJuIG89dSh5bigocz11KERuKHRoaXMsMTYpLDI2KSxzfHwoZG4oKSxVdikpLG4pLDY2KSxvLk5qKCkuUmoodGhpcyxzdSh0aGlzKSxuLUpuKChkbigpLFV2KSksZSxyKX0sbC5saD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBvaCh0aGlzLGUtSm4oKGRuKCksVXYpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxVdiksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7dmFyIHI7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IGZlKFpyLHRoaXMsMCwzKSkseHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBmZShacix0aGlzLDAsMykpLGlzKHRoaXMuQWIsdShuLDE0KSk7cmV0dXJuO2Nhc2UgMTpRYyh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmEmJih0aGlzLmE9bmV3IFQ5KHRoaXMsaG8sdGhpcykpLHhyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgVDkodGhpcyxobyx0aGlzKSksaXModGhpcy5hLHUobiwxNCkpO3JldHVybn1naCh0aGlzLGUtSm4oKGRuKCksVXYpKSx5bigocj11KERuKHRoaXMsMTYpLDI2KSxyfHxVdiksZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKSxVdn0sbC5CaD1mdW5jdGlvbihlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgZmUoWnIsdGhpcywwLDMpKSx4cih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOlFjKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjohdGhpcy5hJiYodGhpcy5hPW5ldyBUOSh0aGlzLGhvLHRoaXMpKSx4cih0aGlzLmEpO3JldHVybn1maCh0aGlzLGUtSm4oKGRuKCksVXYpKSx5bigobj11KERuKHRoaXMsMTYpLDI2KSxufHxVdiksZSkpfSxGKE1uLCJFVHlwZVBhcmFtZXRlckltcGwiLDQ0NCksRCg0NDUsODUsem8sVDkpLGwuY2o9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gRzBuKHRoaXMsdShlLDg3KSxuKX0sbC5kaj1mdW5jdGlvbihlLG4pe3JldHVybiBVMG4odGhpcyx1KGUsODcpLG4pfSxGKE1uLCJFVHlwZVBhcmFtZXRlckltcGwvMSIsNDQ1KSxEKDYzNCw0MyxBNCxhZXQpLGwuZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG1SKHRoaXMpfSxGKE1uLCJFVHlwZVBhcmFtZXRlckltcGwvMiIsNjM0KSxEKDU1NixOMSx6dSxtUiksbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gbFl0KHRoaXMsdShlLDg3KSl9LGwuR2M9ZnVuY3Rpb24oZSl7dmFyIG4scixzO2ZvcihzPSExLHI9ZS5LYygpO3IuT2IoKTspbj11KHIuUGIoKSw4Nyksa2kodGhpcy5hLG4sIiIpPT1udWxsJiYocz0hMCk7cmV0dXJuIHN9LGwuJGI9ZnVuY3Rpb24oKXtYdSh0aGlzLmEpfSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiBUbCh0aGlzLmEsZSl9LGwuS2M9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT1uZXcgcDIobmV3IENnKHRoaXMuYSkuYSksbmV3IHlSKGUpfSxsLk1jPWZ1bmN0aW9uKGUpe3JldHVybiBYSnQodGhpcyxlKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiBIQyh0aGlzLmEpfSxGKE1uLCJFVHlwZVBhcmFtZXRlckltcGwvMi8xIiw1NTYpLEQoNTU3LDEsc2EseVIpLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5QYj1mdW5jdGlvbigpe3JldHVybiB1KFp3KHRoaXMuYSkuY2QoKSw4Nyl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmJ9LGwuUWI9ZnVuY3Rpb24oKXtTdGUodGhpcy5hKX0sRihNbiwiRVR5cGVQYXJhbWV0ZXJJbXBsLzIvMS8xIiw1NTcpLEQoMTI3Niw0MyxBNCx6cXQpLGwuX2I9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpP3dydCh0aGlzLGUpOiEhTG8odGhpcy5mLGUpfSxsLnhjPWZ1bmN0aW9uKGUpe3ZhciBuLHI7cmV0dXJuIG49cmEoZSk/TmModGhpcyxlKTplYyhMbyh0aGlzLmYsZSkpLF90KG4sODM3KT8ocj11KG4sODM3KSxuPXIuX2ooKSxraSh0aGlzLHUoZSwyMzUpLG4pLG4pOm4/PyhlPT1udWxsPyhUZXQoKSxDNWUpOm51bGwpfSxGKE1uLCJFVmFsaWRhdG9yUmVnaXN0cnlJbXBsIiwxMjc2KSxEKDEzMTMsNzA0LHsxMDU6MSw5MjoxLDkwOjEsNDcxOjEsMTQ3OjEsNTY6MSwxMDg6MSwxOTQxOjEsNDk6MSw5NzoxLDE1MDoxLDExNDoxLDExNToxfSxhSiksbC5JaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlLnlqKCkpe2Nhc2UgMjE6Y2FzZSAyMjpjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNjpjYXNlIDMxOmNhc2UgMzI6Y2FzZSAzNzpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MDpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgMjA6cmV0dXJuIG49PW51bGw/bnVsbDokbyhuKTtjYXNlIDI1OnJldHVybiBKb24obik7Y2FzZSAyNzpyZXR1cm4gYm9uKG4pO2Nhc2UgMjg6cmV0dXJuIHdvbihuKTtjYXNlIDI5OnJldHVybiBuPT1udWxsP251bGw6VlV0KGFBWzBdLHUobiwxOTkpKTtjYXNlIDQxOnJldHVybiBuPT1udWxsPyIiOklwKHUobiwyOTApKTtjYXNlIDQyOnJldHVybiAkbyhuKTtjYXNlIDUwOnJldHVybiBCcihuKTtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihRRStlLm5lKCkrQ3YpKX19LGwuSmg9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saCxkLHYsayxDLE0saixILEcsSyx0dCxndDtzd2l0Y2goZS5HPT0tMSYmKGUuRz0oSD1SbChlKSxIP0hnKEguTWgoKSxlKTotMSkpLGUuRyl7Y2FzZSAwOnJldHVybiByPW5ldyByZXQscjtjYXNlIDE6cmV0dXJuIG49bmV3IGxCLG47Y2FzZSAyOnJldHVybiBzPW5ldyBlTSxzO2Nhc2UgNDpyZXR1cm4gbz1uZXcgeFIsbztjYXNlIDU6cmV0dXJuIGg9bmV3ICRxdCxoO2Nhc2UgNjpyZXR1cm4gZD1uZXcgbHF0LGQ7Y2FzZSA3OnJldHVybiB2PW5ldyBKQix2O2Nhc2UgMTA6cmV0dXJuIEM9bmV3IFBrLEM7Y2FzZSAxMTpyZXR1cm4gTT1uZXcgaWV0LE07Y2FzZSAxMjpyZXR1cm4gaj1uZXcgZlF0LGo7Y2FzZSAxMzpyZXR1cm4gRz1uZXcgc2V0LEc7Y2FzZSAxNDpyZXR1cm4gSz1uZXcgSzJ0LEs7Y2FzZSAxNzpyZXR1cm4gdHQ9bmV3IGlKLHR0O2Nhc2UgMTg6cmV0dXJuIGs9bmV3IHh3LGs7Y2FzZSAxOTpyZXR1cm4gZ3Q9bmV3IEhMLGd0O2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKEtjdCtlLnpiK0N2KSl9fSxsLktoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUueWooKSl7Y2FzZSAyMDpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBnYnQobik7Y2FzZSAyMTpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBScChuKTtjYXNlIDIzOmNhc2UgMjI6cmV0dXJuIG49PW51bGw/bnVsbDppZm4obik7Y2FzZSAyNjpjYXNlIDI0OnJldHVybiBuPT1udWxsP251bGw6QUQocWwobiwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAyNTpyZXR1cm4gcDJuKG4pO2Nhc2UgMjc6cmV0dXJuIHoxbihuKTtjYXNlIDI4OnJldHVybiBxMW4obik7Y2FzZSAyOTpyZXR1cm4gbGduKG4pO2Nhc2UgMzI6Y2FzZSAzMTpyZXR1cm4gbj09bnVsbD9udWxsOmR5KG4pO2Nhc2UgMzg6Y2FzZSAzNzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBQcHQobik7Y2FzZSA0MDpjYXNlIDM5OnJldHVybiBuPT1udWxsP251bGw6cGUocWwobixTYSx3aSkpO2Nhc2UgNDE6cmV0dXJuIG51bGw7Y2FzZSA0MjpyZXR1cm4gbj09bnVsbCxudWxsO2Nhc2UgNDQ6Y2FzZSA0MzpyZXR1cm4gbj09bnVsbD9udWxsOnYyKFJxKG4pKTtjYXNlIDQ5OmNhc2UgNDg6cmV0dXJuIG49PW51bGw/bnVsbDp1RShxbChuLHpILDMyNzY3KTw8MTY+PjE2KTtjYXNlIDUwOnJldHVybiBuO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKFFFK2UubmUoKStDdikpfX0sRihNbiwiRWNvcmVGYWN0b3J5SW1wbCIsMTMxMyksRCg1NDcsMTc5LHsxMDU6MSw5MjoxLDkwOjEsMTQ3OjEsMTkxOjEsNTY6MSwyMzU6MSwxMDg6MSwxOTM5OjEsNDk6MSw5NzoxLDE1MDoxLDE3OToxLDU0NzoxLDExNDoxLDExNToxLDY3NToxfSxMWHQpLGwuZ2I9ITEsbC5oYj0hMTt2YXIgYkx0LFQ1ZT0hMTtGKE1uLCJFY29yZVBhY2thZ2VJbXBsIiw1NDcpLEQoMTE4NCwxLHs4Mzc6MX0sb0opLGwuX2o9ZnVuY3Rpb24oKXtyZXR1cm4gZ1d0KCksXzVlfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzEiLDExODQpLEQoMTE5MywxLHNpLGNKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE0Nyl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGZQLERlLDE0NyxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMTAiLDExOTMpLEQoMTE5NCwxLHNpLHVKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE5MSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KE1mdCxEZSwxOTEsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzExIiwxMTk0KSxEKDExOTUsMSxzaSxsSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw1Nil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KF9iLERlLDU2LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8xMiIsMTE5NSksRCgxMTk2LDEsc2ksaEopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMzk5KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoV2gsJDh0LDU5LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8xMyIsMTE5NiksRCgxMTk3LDEsc2ksZkopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjM1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoaTEsRGUsMjM1LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8xNCIsMTE5NyksRCgxMTk4LDEsc2ksZEopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNTA5KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoVnYsRGUsMjAxNyxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMTUiLDExOTgpLEQoMTE5OSwxLHNpLHdCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDk5KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQobjMsQjQsMTgsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzE2IiwxMTk5KSxEKDEyMDAsMSxzaSxnSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNzApfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChNdSxCNCwxNzAsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzE3IiwxMjAwKSxEKDEyMDEsMSxzaSxwSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw0NzIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdCh0MyxEZSw0NzIsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzE4IiwxMjAxKSxEKDEyMDIsMSxzaSxiSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw1NDgpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChjYyxDMGUsNTQ4LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8xOSIsMTIwMiksRCgxMTg1LDEsc2ksdkIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMzIyKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoZTMsQjQsMzQsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzIiLDExODUpLEQoMTIwMywxLHNpLGprKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDI0MSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGhvLHEwZSw4NyxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMjAiLDEyMDMpLEQoMTIwNCwxLHNpLGVDKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDQ0NCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGh1LERlLDgzNixlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMjEiLDEyMDQpLEQoMTIwNSwxLHNpLG1CKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBObShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoUnMsZWUsNDc2LGUsOCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8yMiIsMTIwNSksRCgxMjA2LDEsc2ksd0opLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTkwKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoR3UsZWUsMTkwLGUsMCwyKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8yMyIsMTIwNiksRCgxMjA3LDEsc2kseUIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjE3KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoTTYsZWUsMjE3LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8yNCIsMTIwNyksRCgxMjA4LDEsc2kseEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTcyKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQodVMsZWUsMTcyLGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8yNSIsMTIwOCksRCgxMjA5LDEsc2ksdkopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTk5KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQodFYsZWUsMTk5LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8yNiIsMTIwOSksRCgxMjEwLDEsc2ksbkMpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFBMdCxEZSwyMTEwLGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8yNyIsMTIxMCksRCgxMjExLDEsc2ksQ20pLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIEJtKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChsYSxlZSwzMzMsZSw3LDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzI4IiwxMjExKSxEKDEyMTIsMSxzaSxrQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw1OCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEtBdCxUeSw1OCxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMjkiLDEyMTIpLEQoMTE4NiwxLHNpLEVCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDUxMCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFpyLHszOjEsNDoxLDU6MSwxOTM0OjF9LDU5MCxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMyIsMTE4NiksRCgxMjEzLDEsc2ksbUopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNTczKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoWkF0LERlLDE5NDAsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzMwIiwxMjEzKSxEKDEyMTQsMSxzaSx5SiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNTMpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdCh4THQsVHksMTUzLGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8zMSIsMTIxNCksRCgxMjE1LDEsc2ksckMpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNzIpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChiVSxRMGUsNzIsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzMyIiwxMjE1KSxEKDEyMTYsMSxzaSxUQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNTUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChpNyxlZSwxNTUsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzMzIiwxMjE2KSxEKDEyMTcsMSxzaSxDQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGphLGVlLDE5LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8zNCIsMTIxNyksRCgxMjE4LDEsc2ksdWMpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMjkwKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoSjh0LERlLDI5MCxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMzUiLDEyMTgpLEQoMTIxOSwxLHNpLHhKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE2Mil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFN2LGVlLDE2MixlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMzYiLDEyMTkpLEQoMTIyMCwxLHNpLF9CKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDgzKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQodEV0LERlLDgzLGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC8zNyIsMTIyMCksRCgxMjIxLDEsc2ksaUMpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNTkxKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQod0x0LERlLDU5MSxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMzgiLDEyMjEpLEQoMTIyMiwxLHNpLGtKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChGTHQsRGUsMjExMSxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvMzkiLDEyMjIpLEQoMTE4NywxLHNpLEVKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDg4KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoVWgsRGUsMjYsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzQiLDExODcpLEQoMTIyMywxLHNpLHNDKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE4NCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEF2LGVlLDE4NCxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvNDAiLDEyMjMpLEQoMTIyNCwxLHNpLFNCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvNDEiLDEyMjQpLEQoMTIyNSwxLHNpLGFDKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDU4OCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFFBdCxEZSw1ODgsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzQyIiwxMjI1KSxEKDEyMjYsMSxzaSxvQyksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4hMX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoTkx0LGVlLDIxMTIsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzQzIiwxMjI2KSxEKDEyMjcsMSxzaSxqZiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw0Mil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFAyLEhxLDQyLGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC80NCIsMTIyNyksRCgxMTg4LDEsc2ksVkwpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTM4KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoczEsRGUsMTM4LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC81IiwxMTg4KSxEKDExODksMSxzaSxHTCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNDgpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChOZnQsRGUsMTQ4LGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC82IiwxMTg5KSxEKDExOTAsMSxzaSxseCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw0NTcpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChwVSxEZSw2NzEsZSwwLDEpfSxGKE1uLCJFY29yZVBhY2thZ2VJbXBsLzciLDExOTApLEQoMTE5MSwxLHNpLFRKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDU3Myl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGFnLERlLDY3OCxlLDAsMSl9LEYoTW4sIkVjb3JlUGFja2FnZUltcGwvOCIsMTE5MSksRCgxMTkyLDEsc2ksQ0opLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNDcxKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoc0EsRGUsNDcxLGUsMCwxKX0sRihNbiwiRWNvcmVQYWNrYWdlSW1wbC85IiwxMTkyKSxEKDEwMjUsMTk4MixUMGUsc0h0KSxsLmJpPWZ1bmN0aW9uKGUsbil7TWxuKHRoaXMsdShuLDQxNSkpfSxsLmZpPWZ1bmN0aW9uKGUsbil7bW9lKHRoaXMsZSx1KG4sNDE1KSl9LEYoTW4sIk1pbmltYWxFT2JqZWN0SW1wbC8xQXJyYXlEZWxlZ2F0aW5nQWRhcHRlckxpc3QiLDEwMjUpLEQoMTAyNiwxNDMsbk8seVh0KSxsLkFpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5hfSxGKE1uLCJNaW5pbWFsRU9iamVjdEltcGwvMUFycmF5RGVsZWdhdGluZ0FkYXB0ZXJMaXN0LzEiLDEwMjYpLEQoMTA1MywxMDUyLHt9LE5VdCksRigib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbiIsIkVjb3JlUGx1Z2luIiwxMDUzKTt2YXIgd0x0PUtpKFowZSwiUmVzb3VyY2UiKTtEKDc4MSwxMzc4LEowZSksbC5Zaz1mdW5jdGlvbihlKXt9LGwuWms9ZnVuY3Rpb24oZSl7fSxsLlZrPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgWnR0KHRoaXMpKSx0aGlzLmF9LGwuV2s9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtpZihzPWUubGVuZ3RoLHM+MClpZihScigwLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoMCk9PTQ3KXtmb3IoaD1uZXcgWGMoNCksbz0xLG49MTtuPHM7KytuKVJyKG4sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChuKT09NDcmJihsZShoLG89PW4/IiI6ZS5zdWJzdHIobyxuLW8pKSxvPW4rMSk7cmV0dXJuIGxlKGgsZS5zdWJzdHIobykpLElkbih0aGlzLGgpfWVsc2UgUnIocy0xLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocy0xKT09NjMmJihyPWJ3dChlLEN1KDYzKSxzLTIpLHI+MCYmKGU9ZS5zdWJzdHIoMCxyKSkpO3JldHVybiBacG4odGhpcyxlKX0sbC5Yaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuSWI9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gSXAodGhpcy5nbSkrIkAiKyhlPUhpKHRoaXMpPj4+MCxlLnRvU3RyaW5nKDE2KSkrIiB1cmk9JyIrdGhpcy5kKyInIn0sbC5iPSExLEYoZnV0LCJSZXNvdXJjZUltcGwiLDc4MSksRCgxMzc5LDc4MSxKMGUsSnp0KSxGKGZ1dCwiQmluYXJ5UmVzb3VyY2VJbXBsIiwxMzc5KSxEKDExNjksNjk0LGF1dCksbC5zaT1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSw1Nik/T3JuKHRoaXMsdShlLDU2KSk6X3QoZSw1OTEpP25ldyBucih1KGUsNTkxKS5WaygpKTpWdChlKT09PVZ0KHRoaXMuZik/dShlLDE0KS5LYygpOih5OCgpLHBQLmEpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGg1dCh0aGlzKX0sbC5hPSExLEYoJGksIkVjb3JlVXRpbC9Db250ZW50VHJlZUl0ZXJhdG9yIiwxMTY5KSxEKDEzODAsMTE2OSxhdXQsUUt0KSxsLnNpPWZ1bmN0aW9uKGUpe3JldHVybiBWdChlKT09PVZ0KHRoaXMuZik/dShlLDE1KS5LYygpOm5ldyBQWnQodShlLDU2KSl9LEYoZnV0LCJSZXNvdXJjZUltcGwvNSIsMTM4MCksRCg2NDgsMTk5NCx6MGUsWnR0KSxsLkhjPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmk8PTQ/eUUodGhpcyxlKTpfdChlLDQ5KSYmdShlLDQ5KS5aZygpPT10aGlzLmF9LGwuYmk9ZnVuY3Rpb24oZSxuKXtlPT10aGlzLmktMSYmKHRoaXMuYS5ifHwodGhpcy5hLmI9ITApKX0sbC5kaT1mdW5jdGlvbihlLG4pe2U9PTA/dGhpcy5hLmJ8fCh0aGlzLmEuYj0hMCk6WXJ0KHRoaXMsZSxuKX0sbC5maT1mdW5jdGlvbihlLG4pe30sbC5naT1mdW5jdGlvbihlLG4scil7fSxsLmFqPWZ1bmN0aW9uKCl7cmV0dXJuIDJ9LGwuQWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuY2o9ZnVuY3Rpb24oZSxuKXt2YXIgcjtyZXR1cm4gcj11KGUsNDkpLG49ci53aCh0aGlzLmEsbiksbn0sbC5kaj1mdW5jdGlvbihlLG4pe3ZhciByO3JldHVybiByPXUoZSw0OSksci53aChudWxsLG4pfSxsLmVqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuaGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoX2IsRGUsNTYsZSwwLDEpfSxsLm5pPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoZnV0LCJSZXNvdXJjZUltcGwvQ29udGVudHNFTGlzdCIsNjQ4KSxEKDk1NywxOTY0LGpFLFp6dCksbC5aYz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hLl9oKGUpfSxsLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxGKCRpLCJBYnN0cmFjdFNlcXVlbnRpYWxJbnRlcm5hbEVMaXN0LzEiLDk1Nyk7dmFyIHZMdCxtTHQseWEseUx0O0QoNjI0LDEse30sSll0KTt2YXIgd1UsdlU7RigkaSwiQmFzaWNFeHRlbmRlZE1ldGFEYXRhIiw2MjQpLEQoMTE2MCwxLHt9LEpHdCksbC4kaz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxsLl9rPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT09LTImJlRnKHRoaXMsc2duKHRoaXMuZCx0aGlzLmIpKSx0aGlzLmF9LGwuYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5ibD1mdW5jdGlvbigpe3JldHVybiB3bigpLHduKCksaW99LGwubmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPT10NyYmTzModGhpcyxYaWUodGhpcy5kLHRoaXMuYikpLHRoaXMuY30sbC5jbD1mdW5jdGlvbigpe3JldHVybiAwfSxsLmE9LTIsbC5jPXQ3LEYoJGksIkJhc2ljRXh0ZW5kZWRNZXRhRGF0YS9FQ2xhc3NFeHRlbmRlZE1ldGFEYXRhSW1wbCIsMTE2MCksRCgxMTYxLDEse30seVp0KSxsLiRrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT09KEI4KCksd1UpJiZ5cHQodGhpcyx4d24odGhpcy5mLHRoaXMuYikpLHRoaXMuYX0sbC5faz1mdW5jdGlvbigpe3JldHVybiAwfSxsLmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYz09KEI4KCksd1UpJiZGdHQodGhpcyxrd24odGhpcy5mLHRoaXMuYikpLHRoaXMuY30sbC5ibD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmQmJk50dCh0aGlzLHhtbih0aGlzLmYsdGhpcy5iKSksdGhpcy5kfSxsLm5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZT09dDcmJmNSKHRoaXMsWGllKHRoaXMuZix0aGlzLmIpKSx0aGlzLmV9LGwuY2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nPT0tMiYmdVIodGhpcyxUMG4odGhpcy5mLHRoaXMuYikpLHRoaXMuZ30sbC5lPXQ3LGwuZz0tMixGKCRpLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRURhdGFUeXBlRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExNjEpLEQoMTE1OSwxLHt9LGVVdCksbC5iPSExLGwuYz0hMSxGKCRpLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRVBhY2thZ2VFeHRlbmRlZE1ldGFEYXRhSW1wbCIsMTE1OSksRCgxMTYyLDEse30sbVp0KSxsLmM9LTIsbC5lPXQ3LGwuZj10NyxGKCRpLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRVN0cnVjdHVyYWxGZWF0dXJlRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExNjIpLEQoNTg1LDYyMix6byxSaiksbC5haj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGwuRms9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBufSxsLmM9MCxGKCRpLCJFRGF0YVR5cGVFTGlzdCIsNTg1KTt2YXIgeEx0PUtpKCRpLCJGZWF0dXJlTWFwIik7RCg3NSw1ODUsezM6MSw0OjEsMjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU0OjEsNjc6MSw2MzoxLDU4OjEsNzY6MSwxNTM6MSwyMTU6MSwxOTM3OjEsNjk6MSw5NToxfSxzcyksbC5WYz1mdW5jdGlvbihlLG4pe3d3bih0aGlzLGUsdShuLDcyKSl9LGwuRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIE4ybih0aGlzLHUoZSw3MikpfSxsLlloPWZ1bmN0aW9uKGUpe2tubih0aGlzLHUoZSw3MikpfSxsLmNqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5KZSh0aGlzLHUoZSw3Miksbil9LGwuZGo9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdnd0KHRoaXMsdShlLDcyKSxuKX0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiBqbW4odGhpcyxlLG4pfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHY0bih0aGlzLGUsdShuLDcyKSl9LGwuX2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gb3ZuKHRoaXMsZSx1KG4sNzIpKX0sbC5qaj1mdW5jdGlvbihlLG4pe3JldHVybiBySmUodGhpcyx1KGUsNzIpLG4pfSxsLmtqPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFRZdCh0aGlzLHUoZSw3Miksbil9LGwubGo9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBvMG4odGhpcyx1KGUsNzIpLHUobiw3Mikscil9LGwub2k9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gUnN0KHRoaXMsZSx1KG4sNzIpKX0sbC5kbD1mdW5jdGlvbihlLG4pe3JldHVybiBKNXQodGhpcyxlLG4pfSxsLldjPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNO2ZvcihDPW5ldyBRdyhuLmdjKCkpLG89bi5LYygpO28uT2IoKTspaWYocz11KG8uUGIoKSw3MiksaD1zLmFrKCksWDAodGhpcy5lLGgpKSghaC5oaSgpfHwhTyQodGhpcyxoLHMuZGQoKSkmJiF5RShDLHMpKSYmRHIoQyxzKTtlbHNle2ZvcihNPW91KHRoaXMuZS5UZygpLGgpLHI9dSh0aGlzLmcsMTE5KSxkPSEwLHY9MDt2PHRoaXMuaTsrK3YpaWYoaz1yW3ZdLE0ucmwoay5haygpKSl7dShoNCh0aGlzLHYscyksNzIpLGQ9ITE7YnJlYWt9ZCYmRHIoQyxzKX1yZXR1cm4gU3l0KHRoaXMsZSxDKX0sbC5HYz1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdixrLEM7Zm9yKGs9bmV3IFF3KGUuZ2MoKSkscz1lLktjKCk7cy5PYigpOylpZihyPXUocy5QYigpLDcyKSxvPXIuYWsoKSxYMCh0aGlzLmUsbykpKCFvLmhpKCl8fCFPJCh0aGlzLG8sci5kZCgpKSYmIXlFKGsscikpJiZEcihrLHIpO2Vsc2V7Zm9yKEM9b3UodGhpcy5lLlRnKCksbyksbj11KHRoaXMuZywxMTkpLGg9ITAsZD0wO2Q8dGhpcy5pOysrZClpZih2PW5bZF0sQy5ybCh2LmFrKCkpKXt1KGg0KHRoaXMsZCxyKSw3MiksaD0hMTticmVha31oJiZEcihrLHIpfXJldHVybiBpcyh0aGlzLGspfSxsLldoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmo9LTEsa2F0KHRoaXMsdGhpcy5pLGUpfSxsLmVsPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gVzV0KHRoaXMsZSxuLHIpfSxsLm1rPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEVJKHRoaXMsZSxuKX0sbC5mbD1mdW5jdGlvbihlLG4scil7cmV0dXJuIGJ4dCh0aGlzLGUsbixyKX0sbC5nbD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxsLmhsPWZ1bmN0aW9uKGUsbil7cmV0dXJuIFNJKHRoaXMsZSxuKX0sbC5pbD1mdW5jdGlvbihlKXtyZXR1cm4gdShBdCh0aGlzLGUpLDcyKS5haygpfSxsLmpsPWZ1bmN0aW9uKGUpe3JldHVybiB1KEF0KHRoaXMsZSksNzIpLmRkKCl9LGwua2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuaWo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5sbD1mdW5jdGlvbihlKXtyZXR1cm4hWEQodGhpcyxlKX0sbC5yaT1mdW5jdGlvbihlKXtyZXR1cm4gTnQoRTVlLFEwZSwzMzIsZSwwLDEpfSxsLkdrPWZ1bmN0aW9uKGUpe3JldHVybiBtbnQodGhpcyxlKX0sbC5XYj1mdW5jdGlvbihlKXtuRCh0aGlzLGUpfSxsLm1sPWZ1bmN0aW9uKGUsbil7T3EodGhpcyxlLG4pfSxsLm5sPWZ1bmN0aW9uKGUpe3JldHVybiBsbmUodGhpcyxlKX0sbC5vbD1mdW5jdGlvbihlKXtQc2UodGhpcyxlKX0sRigkaSwiQmFzaWNGZWF0dXJlTWFwIiw3NSksRCgxODUxLDEsbjApLGwuTmI9ZnVuY3Rpb24oZSl7YmEodGhpcyxlKX0sbC5SYj1mdW5jdGlvbihlKXtpZih0aGlzLmc9PS0xKXRocm93IGl0KG5ldyBPdSk7WmoodGhpcyk7dHJ5e3N1ZSh0aGlzLmUsdGhpcy5iLHRoaXMuYSxlKSx0aGlzLmQ9dGhpcy5lLmosUXoodGhpcyl9Y2F0Y2gobil7dGhyb3cgbj1XaShuKSxfdChuLDczKT9pdChuZXcgcmgpOml0KG4pfX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiBCaXQodGhpcyl9LGwuU2I9ZnVuY3Rpb24oKXtyZXR1cm4gUHJlKHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIFF6KHRoaXMpfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5VYj1mdW5jdGlvbigpe3ZhciBlO2lmKFByZSh0aGlzKSlyZXR1cm4gWmoodGhpcyksdGhpcy5nPS0tdGhpcy5hLHRoaXMuTGsoKSYmKGU9Yl8odGhpcy5lLHRoaXMuYix0aGlzLmMsdGhpcy5hLHRoaXMuaiksdGhpcy5qPWUpLHRoaXMuaT0wLHRoaXMuajt0aHJvdyBpdChuZXcgbGMpfSxsLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS0xfSxsLlFiPWZ1bmN0aW9uKCl7aWYodGhpcy5nPT0tMSl0aHJvdyBpdChuZXcgT3UpO1pqKHRoaXMpO3RyeXtub2UodGhpcy5lLHRoaXMuYix0aGlzLmcpLHRoaXMuZD10aGlzLmUuaix0aGlzLmc8dGhpcy5hJiYoLS10aGlzLmEsLS10aGlzLmMpLC0tdGhpcy5nfWNhdGNoKGUpe3Rocm93IGU9V2koZSksX3QoZSw3Myk/aXQobmV3IHJoKTppdChlKX19LGwuTGs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5XYj1mdW5jdGlvbihlKXtpZih0aGlzLmc9PS0xKXRocm93IGl0KG5ldyBPdSk7WmoodGhpcyk7dHJ5e0xsZSh0aGlzLmUsdGhpcy5iLHRoaXMuZyxlKSx0aGlzLmQ9dGhpcy5lLmp9Y2F0Y2gobil7dGhyb3cgbj1XaShuKSxfdChuLDczKT9pdChuZXcgcmgpOml0KG4pfX0sbC5hPTAsbC5jPTAsbC5kPTAsbC5mPSExLGwuZz0wLGwuaT0wLEYoJGksIkZlYXR1cmVNYXBVdGlsL0Jhc2ljRmVhdHVyZUVJdGVyYXRvciIsMTg1MSksRCg0MTAsMTg1MSxuMCx0RSksbC5wbD1mdW5jdGlvbigpe3ZhciBlLG4scjtmb3Iocj10aGlzLmUuaSxlPXUodGhpcy5lLmcsMTE5KTt0aGlzLmM8cjspe2lmKG49ZVt0aGlzLmNdLHRoaXMuay5ybChuLmFrKCkpKXJldHVybiB0aGlzLmo9dGhpcy5mP246bi5kZCgpLHRoaXMuaT0yLCEwOysrdGhpcy5jfXJldHVybiB0aGlzLmk9MSx0aGlzLmc9LTEsITF9LGwucWw9ZnVuY3Rpb24oKXt2YXIgZSxuO2ZvcihlPXUodGhpcy5lLmcsMTE5KTstLXRoaXMuYz49MDspaWYobj1lW3RoaXMuY10sdGhpcy5rLnJsKG4uYWsoKSkpcmV0dXJuIHRoaXMuaj10aGlzLmY/bjpuLmRkKCksdGhpcy5pPS0yLCEwO3JldHVybiB0aGlzLmk9LTEsdGhpcy5nPS0xLCExfSxGKCRpLCJCYXNpY0ZlYXR1cmVNYXAvRmVhdHVyZUVJdGVyYXRvciIsNDEwKSxEKDY2Miw0MTAsbjAscm50KSxsLkxrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoJGksIkJhc2ljRmVhdHVyZU1hcC9SZXNvbHZpbmdGZWF0dXJlRUl0ZXJhdG9yIiw2NjIpLEQoOTU1LDQ4NixOSCxVVXQpLGwuR2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sRigkaSwiRUNvbnRlbnRzRUxpc3QvMSIsOTU1KSxEKDk1Niw0ODYsTkgsd1V0KSxsLkxrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEYoJGksIkVDb250ZW50c0VMaXN0LzIiLDk1NiksRCg5NTQsMjc5LEJILFdVdCksbC5Oaz1mdW5jdGlvbihlKXt9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxGKCRpLCJFQ29udGVudHNFTGlzdC9GZWF0dXJlSXRlcmF0b3JJbXBsLzEiLDk1NCksRCg4MjUsNTg1LHpvLEUydCksbC5jaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWGo9ZnVuY3Rpb24oKXt2YXIgZTt4cih0aGlzKSx4bCh0aGlzLmUpPyhlPXRoaXMuYSx0aGlzLmE9ITEsbWkodGhpcy5lLG5ldyBiZih0aGlzLmUsMix0aGlzLmMsZSwhMSkpKTp0aGlzLmE9ITF9LGwuYT0hMSxGKCRpLCJFRGF0YVR5cGVFTGlzdC9VbnNldHRhYmxlIiw4MjUpLEQoMTg0OSw1ODUsem8sZVd0KSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEYoJGksIkVEYXRhVHlwZVVuaXF1ZUVMaXN0IiwxODQ5KSxEKDE4NTAsODI1LHpvLG5XdCksbC5oaT1mdW5jdGlvbigpe3JldHVybiEwfSxGKCRpLCJFRGF0YVR5cGVVbmlxdWVFTGlzdC9VbnNldHRhYmxlIiwxODUwKSxEKDEzOSw4NSx6byxGdSksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGc2KHRoaXMsZSx1KG4sNTYpKX0sRigkaSwiRU9iamVjdENvbnRhaW5tZW50RUxpc3QvUmVzb2x2aW5nIiwxMzkpLEQoMTE2Myw1NDUsem8sdFd0KSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZzYodGhpcyxlLHUobiw1NikpfSxGKCRpLCJFT2JqZWN0Q29udGFpbm1lbnRFTGlzdC9VbnNldHRhYmxlL1Jlc29sdmluZyIsMTE2MyksRCg3NDgsMTYsem8saHd0KSxsLmNpPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sbC5Yaj1mdW5jdGlvbigpe3ZhciBlO3hyKHRoaXMpLHhsKHRoaXMuZSk/KGU9dGhpcy5hLHRoaXMuYT0hMSxtaSh0aGlzLmUsbmV3IGJmKHRoaXMuZSwyLHRoaXMuYyxlLCExKSkpOnRoaXMuYT0hMX0sbC5hPSExLEYoJGksIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZSIsNzQ4KSxEKDExNzMsNzQ4LHpvLGhZdCksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGc2KHRoaXMsZSx1KG4sNTYpKX0sRigkaSwiRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VFTGlzdC9VbnNldHRhYmxlL1Jlc29sdmluZyIsMTE3MyksRCg3NDMsNDk2LHpvLGsydCksbC5jaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0sbC5maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuWGo9ZnVuY3Rpb24oKXt2YXIgZTt4cih0aGlzKSx4bCh0aGlzLmUpPyhlPXRoaXMuYSx0aGlzLmE9ITEsbWkodGhpcy5lLG5ldyBiZih0aGlzLmUsMix0aGlzLmMsZSwhMSkpKTp0aGlzLmE9ITF9LGwuYT0hMSxGKCRpLCJFT2JqZWN0RUxpc3QvVW5zZXR0YWJsZSIsNzQzKSxEKDMyOCw0OTYsem8sWTMpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBnNih0aGlzLGUsdShuLDU2KSl9LEYoJGksIkVPYmplY3RSZXNvbHZpbmdFTGlzdCIsMzI4KSxEKDE2NDEsNzQzLHpvLHJXdCksbC5Faz1mdW5jdGlvbigpe3JldHVybiEwfSxsLmxpPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGc2KHRoaXMsZSx1KG4sNTYpKX0sRigkaSwiRU9iamVjdFJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUiLDE2NDEpLEQoMTM4MSwxLHt9LF9KKTt2YXIgQzVlO0YoJGksIkVPYmplY3RWYWxpZGF0b3IiLDEzODEpLEQoNTQ2LDQ5Nix6byxyJCksbC56az1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGwuQWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwuRGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5iPTAsRigkaSwiRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QiLDU0NiksRCgxMTc2LDU0Nix6byxmWXQpLGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRigkaSwiRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QvTWFueUludmVyc2UiLDExNzYpLEQoNjI1LDU0Nix6byxFbnQpLGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmE9ITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlhqPWZ1bmN0aW9uKCl7dmFyIGU7eHIodGhpcykseGwodGhpcy5lKT8oZT10aGlzLmEsdGhpcy5hPSExLG1pKHRoaXMuZSxuZXcgYmYodGhpcy5lLDIsdGhpcy5jLGUsITEpKSk6dGhpcy5hPSExfSxsLmE9ITEsRigkaSwiRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZSIsNjI1KSxEKDExNzUsNjI1LHpvLGRZdCksbC5Daz1mdW5jdGlvbigpe3JldHVybiEwfSxGKCRpLCJFT2JqZWN0V2l0aEludmVyc2VFTGlzdC9VbnNldHRhYmxlL01hbnlJbnZlcnNlIiwxMTc1KSxEKDc0OSw1NDYsem8sZnd0KSxsLkVrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGwubGk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZzYodGhpcyxlLHUobiw1NikpfSxGKCRpLCJFT2JqZWN0V2l0aEludmVyc2VSZXNvbHZpbmdFTGlzdCIsNzQ5KSxEKDMxLDc0OSx6byxDbiksbC5Daz1mdW5jdGlvbigpe3JldHVybiEwfSxGKCRpLCJFT2JqZWN0V2l0aEludmVyc2VSZXNvbHZpbmdFTGlzdC9NYW55SW52ZXJzZSIsMzEpLEQoNzUwLDYyNSx6byxkd3QpLGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbC5saT1mdW5jdGlvbihlLG4pe3JldHVybiBnNih0aGlzLGUsdShuLDU2KSl9LEYoJGksIkVPYmplY3RXaXRoSW52ZXJzZVJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUiLDc1MCksRCgxMTc0LDc1MCx6byxnWXQpLGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRigkaSwiRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QvVW5zZXR0YWJsZS9NYW55SW52ZXJzZSIsMTE3NCksRCgxMTY0LDYyMix6byksbC5haT1mdW5jdGlvbigpe3JldHVybih0aGlzLmImMTc5Mik9PTB9LGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmJ8PTF9LGwuQms9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjQpIT0wfSxsLmJqPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiY0MCkhPTB9LGwuQ2s9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjE2KSE9MH0sbC5Eaz1mdW5jdGlvbigpe3JldHVybih0aGlzLmImOCkhPTB9LGwuRWs9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJkR5KSE9MH0sbC5yaz1mdW5jdGlvbigpe3JldHVybih0aGlzLmImMzIpIT0wfSxsLkZrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiZ4ZikhPTB9LGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZD9LWnQodGhpcy5kLGUpOnRoaXMuYWsoKS5ZaigpLndqKGUpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYiYyPyh0aGlzLmImMSkhPTA6dGhpcy5pIT0wfSxsLmhpPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYxMjgpIT0wfSxsLlhqPWZ1bmN0aW9uKCl7dmFyIGU7eHIodGhpcyksdGhpcy5iJjImJih4bCh0aGlzLmUpPyhlPSh0aGlzLmImMSkhPTAsdGhpcy5iJj0tMixuOCh0aGlzLG5ldyBiZih0aGlzLmUsMixHaSh0aGlzLmUuVGcoKSx0aGlzLmFrKCkpLGUsITEpKSk6dGhpcy5iJj0tMil9LGwubmk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjE1MzYpPT0wfSxsLmI9MCxGKCRpLCJFY29yZUVMaXN0L0dlbmVyaWMiLDExNjQpLEQoMTE2NSwxMTY0LHpvLGlRdCksbC5haz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LEYoJGksIkVjb3JlRUxpc3QvRHluYW1pYyIsMTE2NSksRCg3NDcsNjMsTGQsX3B0KSxsLnJpPWZ1bmN0aW9uKGUpe3JldHVybiBNRCh0aGlzLmEuYSxlKX0sRigkaSwiRWNvcmVFTWFwLzEiLDc0NyksRCg3NDYsODUsem8saHZ0KSxsLmJpPWZ1bmN0aW9uKGUsbil7SnoodGhpcy5iLHUobiwxMzMpKX0sbC5kaT1mdW5jdGlvbihlLG4pe1ZuZSh0aGlzLmIpfSxsLmVpPWZ1bmN0aW9uKGUsbixyKXt2YXIgczsrKyhzPXRoaXMuYix1KG4sMTMzKSxzKS5lfSxsLmZpPWZ1bmN0aW9uKGUsbil7V2l0KHRoaXMuYix1KG4sMTMzKSl9LGwuZ2k9ZnVuY3Rpb24oZSxuLHIpe1dpdCh0aGlzLmIsdShyLDEzMykpLFZ0KHIpPT09VnQobikmJnUociwxMzMpLlRoKGhRZSh1KG4sMTMzKS5jZCgpKSksSnoodGhpcy5iLHUobiwxMzMpKX0sRigkaSwiRWNvcmVFTWFwL0RlbGVnYXRlRU9iamVjdENvbnRhaW5tZW50RUxpc3QiLDc0NiksRCgxMTcxLDE1MSxqOHQscm5lKSxGKCRpLCJFY29yZUVNYXAvVW5zZXR0YWJsZSIsMTE3MSksRCgxMTcyLDc0Nix6byxwWXQpLGwuY2k9ZnVuY3Rpb24oKXt0aGlzLmE9ITB9LGwuZmo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLlhqPWZ1bmN0aW9uKCl7dmFyIGU7eHIodGhpcykseGwodGhpcy5lKT8oZT10aGlzLmEsdGhpcy5hPSExLG1pKHRoaXMuZSxuZXcgYmYodGhpcy5lLDIsdGhpcy5jLGUsITEpKSk6dGhpcy5hPSExfSxsLmE9ITEsRigkaSwiRWNvcmVFTWFwL1Vuc2V0dGFibGUvVW5zZXR0YWJsZURlbGVnYXRlRU9iamVjdENvbnRhaW5tZW50RUxpc3QiLDExNzIpLEQoMTE2OCwyMjgsQTQsb1h0KSxsLmE9ITEsbC5iPSExLEYoJGksIkVjb3JlVXRpbC9Db3BpZXIiLDExNjgpLEQoNzQ1LDEsc2EsUFp0KSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuT2I9ZnVuY3Rpb24oKXtyZXR1cm4gTWllKHRoaXMpfSxsLlBiPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIE1pZSh0aGlzKSxlPXRoaXMuYix0aGlzLmI9bnVsbCxlfSxsLlFiPWZ1bmN0aW9uKCl7dGhpcy5hLlFiKCl9LEYoJGksIkVjb3JlVXRpbC9Qcm9wZXJDb250ZW50SXRlcmF0b3IiLDc0NSksRCgxMzgyLDEzODEse30sdFIpO3ZhciBfNWU7RigkaSwiRWNvcmVWYWxpZGF0b3IiLDEzODIpO3ZhciBTNWU7S2koJGksIkZlYXR1cmVNYXBVdGlsL1ZhbGlkYXRvciIpLEQoMTI2MCwxLHsxOTQyOjF9LFNKKSxsLnJsPWZ1bmN0aW9uKGUpe3JldHVybiEwfSxGKCRpLCJGZWF0dXJlTWFwVXRpbC8xIiwxMjYwKSxEKDc1NywxLHsxOTQyOjF9LEF4dCksbC5ybD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcy5jPT1lPyEwOihuPVJlKHRyKHRoaXMuYSxlKSksbj09bnVsbD9ubW4odGhpcyxlKT8ocUp0KHRoaXMuYSxlLChObigpLHI3KSksITApOihxSnQodGhpcy5hLGUsKE5uKCksRjIpKSwhMSk6bj09KE5uKCkscjcpKX0sbC5lPSExO3ZhciAkZnQ7RigkaSwiRmVhdHVyZU1hcFV0aWwvQmFzaWNWYWxpZGF0b3IiLDc1NyksRCg3NTgsNDMsQTQsdjJ0KSxGKCRpLCJGZWF0dXJlTWFwVXRpbC9CYXNpY1ZhbGlkYXRvci9DYWNoZSIsNzU4KSxEKDUwMSw1Mix7MjA6MSwyODoxLDUyOjEsMTQ6MSwxNToxLDU4OjEsNzY6MSw2OToxLDk1OjF9LEJNKSxsLlZjPWZ1bmN0aW9uKGUsbil7c3VlKHRoaXMuYyx0aGlzLmIsZSxuKX0sbC5GYz1mdW5jdGlvbihlKXtyZXR1cm4gSjV0KHRoaXMuYyx0aGlzLmIsZSl9LGwuV2M9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdzNuKHRoaXMuYyx0aGlzLmIsZSxuKX0sbC5HYz1mdW5jdGlvbihlKXtyZXR1cm4gZzkodGhpcyxlKX0sbC5YaD1mdW5jdGlvbihlLG4pe1Jvbih0aGlzLmMsdGhpcy5iLGUsbil9LGwubGs9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gVzV0KHRoaXMuYyx0aGlzLmIsZSxuKX0sbC5waT1mdW5jdGlvbihlKXtyZXR1cm4gSXEodGhpcy5jLHRoaXMuYixlLCExKX0sbC5aaD1mdW5jdGlvbigpe3JldHVybiBBVXQodGhpcy5jLHRoaXMuYil9LGwuJGg9ZnVuY3Rpb24oKXtyZXR1cm4gWlhlKHRoaXMuYyx0aGlzLmIpfSxsLl9oPWZ1bmN0aW9uKGUpe3JldHVybiBIYW4odGhpcy5jLHRoaXMuYixlKX0sbC5taz1mdW5jdGlvbihlLG4pe3JldHVybiBXV3QodGhpcyxlLG4pfSxsLiRiPWZ1bmN0aW9uKCl7VHgodGhpcyl9LGwuSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIE8kKHRoaXMuYyx0aGlzLmIsZSl9LGwuSWM9ZnVuY3Rpb24oZSl7cmV0dXJuIHFjbih0aGlzLmMsdGhpcy5iLGUpfSxsLlhiPWZ1bmN0aW9uKGUpe3JldHVybiBJcSh0aGlzLmMsdGhpcy5iLGUsITApfSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzfSxsLlhjPWZ1bmN0aW9uKGUpe3JldHVybiB0YW4odGhpcy5jLHRoaXMuYixlKX0sbC5kYz1mdW5jdGlvbigpe3JldHVybiBoaih0aGlzKX0sbC5maj1mdW5jdGlvbigpe3JldHVybiFYRCh0aGlzLmMsdGhpcy5iKX0sbC5LYz1mdW5jdGlvbigpe3JldHVybiBfb24odGhpcy5jLHRoaXMuYil9LGwuWWM9ZnVuY3Rpb24oKXtyZXR1cm4gU29uKHRoaXMuYyx0aGlzLmIpfSxsLlpjPWZ1bmN0aW9uKGUpe3JldHVybiBqbG4odGhpcy5jLHRoaXMuYixlKX0sbC5paT1mdW5jdGlvbihlLG4pe3JldHVybiBFbGUodGhpcy5jLHRoaXMuYixlLG4pfSxsLmppPWZ1bmN0aW9uKGUsbil7QmFuKHRoaXMuYyx0aGlzLmIsZSxuKX0sbC4kYz1mdW5jdGlvbihlKXtyZXR1cm4gbm9lKHRoaXMuYyx0aGlzLmIsZSl9LGwuTWM9ZnVuY3Rpb24oZSl7cmV0dXJuIEVtbih0aGlzLmMsdGhpcy5iLGUpfSxsLl9jPWZ1bmN0aW9uKGUsbil7cmV0dXJuIExsZSh0aGlzLmMsdGhpcy5iLGUsbil9LGwuV2I9ZnVuY3Rpb24oZSl7cHEodGhpcy5jLHRoaXMuYiksZzkodGhpcyx1KGUsMTUpKX0sbC5nYz1mdW5jdGlvbigpe3JldHVybiBabG4odGhpcy5jLHRoaXMuYil9LGwuUGM9ZnVuY3Rpb24oKXtyZXR1cm4gUWluKHRoaXMuYyx0aGlzLmIpfSxsLlFjPWZ1bmN0aW9uKGUpe3JldHVybiBlYW4odGhpcy5jLHRoaXMuYixlKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlLG47Zm9yKG49bmV3IEFnLG4uYSs9IlsiLGU9QVV0KHRoaXMuYyx0aGlzLmIpO0JpdChlKTspZ28obixiOShReihlKSkpLEJpdChlKSYmKG4uYSs9WWEpO3JldHVybiBuLmErPSJdIixuLmF9LGwuWGo9ZnVuY3Rpb24oKXtwcSh0aGlzLmMsdGhpcy5iKX0sRigkaSwiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZUVMaXN0Iiw1MDEpLEQoNjI3LDM2LG5PLGpydCksbC55aT1mdW5jdGlvbihlKXtyZXR1cm4gZV8odGhpcyxlKX0sbC5EaT1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdjtzd2l0Y2godGhpcy5kKXtjYXNlIDE6Y2FzZSAyOntpZihoPWUuQWkoKSxWdChoKT09PVZ0KHRoaXMuYykmJmVfKHRoaXMsbnVsbCk9PWUueWkobnVsbCkpcmV0dXJuIHRoaXMuZz1lLnppKCksZS54aSgpPT0xJiYodGhpcy5kPTEpLCEwO2JyZWFrfWNhc2UgMzp7c3dpdGNoKG89ZS54aSgpLG8pe2Nhc2UgMzp7aWYoaD1lLkFpKCksVnQoaCk9PT1WdCh0aGlzLmMpJiZlXyh0aGlzLG51bGwpPT1lLnlpKG51bGwpKXJldHVybiB0aGlzLmQ9NSxuPW5ldyBRdygyKSxEcihuLHRoaXMuZyksRHIobixlLnppKCkpLHRoaXMuZz1uLCEwO2JyZWFrfX1icmVha31jYXNlIDU6e3N3aXRjaChvPWUueGkoKSxvKXtjYXNlIDM6e2lmKGg9ZS5BaSgpLFZ0KGgpPT09VnQodGhpcy5jKSYmZV8odGhpcyxudWxsKT09ZS55aShudWxsKSlyZXR1cm4gcj11KHRoaXMuZywxNCksci5GYyhlLnppKCkpLCEwO2JyZWFrfX1icmVha31jYXNlIDQ6e3N3aXRjaChvPWUueGkoKSxvKXtjYXNlIDM6e2lmKGg9ZS5BaSgpLFZ0KGgpPT09VnQodGhpcy5jKSYmZV8odGhpcyxudWxsKT09ZS55aShudWxsKSlyZXR1cm4gdGhpcy5kPTEsdGhpcy5nPWUuemkoKSwhMDticmVha31jYXNlIDQ6e2lmKGg9ZS5BaSgpLFZ0KGgpPT09VnQodGhpcy5jKSYmZV8odGhpcyxudWxsKT09ZS55aShudWxsKSlyZXR1cm4gdGhpcy5kPTYsdj1uZXcgUXcoMiksRHIodix0aGlzLm4pLERyKHYsZS5CaSgpKSx0aGlzLm49dixkPWx0KGN0KENyLDEpLFhyLDI1LDE1LFt0aGlzLm8sZS5DaSgpXSksdGhpcy5nPWQsITA7YnJlYWt9fWJyZWFrfWNhc2UgNjp7c3dpdGNoKG89ZS54aSgpLG8pe2Nhc2UgNDp7aWYoaD1lLkFpKCksVnQoaCk9PT1WdCh0aGlzLmMpJiZlXyh0aGlzLG51bGwpPT1lLnlpKG51bGwpKXJldHVybiByPXUodGhpcy5uLDE0KSxyLkZjKGUuQmkoKSksZD11KHRoaXMuZyw0OCkscz1OdChDcixYciwyNSxkLmxlbmd0aCsxLDE1LDEpLERjKGQsMCxzLDAsZC5sZW5ndGgpLHNbZC5sZW5ndGhdPWUuQ2koKSx0aGlzLmc9cywhMDticmVha319YnJlYWt9fXJldHVybiExfSxGKCRpLCJGZWF0dXJlTWFwVXRpbC9GZWF0dXJlRU5vdGlmaWNhdGlvbkltcGwiLDYyNyksRCg1NTIsNTAxLHsyMDoxLDI4OjEsNTI6MSwxNDoxLDE1OjEsNTg6MSw3NjoxLDE1MzoxLDIxNToxLDE5Mzc6MSw2OToxLDk1OjF9LHFqKSxsLmRsPWZ1bmN0aW9uKGUsbil7cmV0dXJuIEo1dCh0aGlzLmMsZSxuKX0sbC5lbD1mdW5jdGlvbihlLG4scil7cmV0dXJuIFc1dCh0aGlzLmMsZSxuLHIpfSxsLmZsPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gYnh0KHRoaXMuYyxlLG4scil9LGwuZ2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbC5obD1mdW5jdGlvbihlLG4pe3JldHVybiBTSSh0aGlzLmMsZSxuKX0sbC5pbD1mdW5jdGlvbihlKXtyZXR1cm4gdShJcSh0aGlzLmMsdGhpcy5iLGUsITEpLDcyKS5haygpfSxsLmpsPWZ1bmN0aW9uKGUpe3JldHVybiB1KElxKHRoaXMuYyx0aGlzLmIsZSwhMSksNzIpLmRkKCl9LGwua2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxsLmxsPWZ1bmN0aW9uKGUpe3JldHVybiFYRCh0aGlzLmMsZSl9LGwubWw9ZnVuY3Rpb24oZSxuKXtPcSh0aGlzLmMsZSxuKX0sbC5ubD1mdW5jdGlvbihlKXtyZXR1cm4gbG5lKHRoaXMuYyxlKX0sbC5vbD1mdW5jdGlvbihlKXtQc2UodGhpcy5jLGUpfSxGKCRpLCJGZWF0dXJlTWFwVXRpbC9GZWF0dXJlRmVhdHVyZU1hcCIsNTUyKSxEKDEyNTksMSxodXQsblV0KSxsLldqPWZ1bmN0aW9uKGUpe3JldHVybiBJcSh0aGlzLmIsdGhpcy5hLC0xLGUpfSxsLmZqPWZ1bmN0aW9uKCl7cmV0dXJuIVhEKHRoaXMuYix0aGlzLmEpfSxsLldiPWZ1bmN0aW9uKGUpe09xKHRoaXMuYix0aGlzLmEsZSl9LGwuWGo9ZnVuY3Rpb24oKXtwcSh0aGlzLmIsdGhpcy5hKX0sRigkaSwiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZVZhbHVlIiwxMjU5KTt2YXIgSjYsemZ0LHFmdCx0ayxBNWUsd1A9S2koR0gsIkFueVR5cGUiKTtEKDY2Niw2MCxRMCxwZXQpLEYoR0gsIkludmFsaWREYXRhdHlwZVZhbHVlRXhjZXB0aW9uIiw2NjYpO3ZhciBtVT1LaShHSCxlZ2UpLHZQPUtpKEdILG5nZSksa0x0PUtpKEdILHJnZSksTDVlLHBjLEVMdCxYMixNNWUsRDVlLEk1ZSxPNWUsUDVlLEY1ZSxONWUsQjVlLFI1ZSxqNWUsJDVlLGg1LHo1ZSxmNSxsQSxxNWUsV3YsbVAseVAsSDVlLGhBLGZBO0QoODMwLDUwNix7MTA1OjEsOTI6MSw5MDoxLDU2OjEsNDk6MSw5NzoxLDg0MzoxfSxXcHQpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHRoaXMuYyk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHRoaXMuYy5iKTtjYXNlIDE6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUoQmModGhpcy5jLChJaSgpLFgyKSksMTUzKSk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUodShCYyh0aGlzLmMsKElpKCksWDIpKSwxNTMpLDIxNSkpLmtsKCk7Y2FzZSAyOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBzcyh0aGlzLDIpKSx0aGlzLmIpOighdGhpcy5iJiYodGhpcy5iPW5ldyBzcyh0aGlzLDIpKSx0aGlzLmIuYil9cmV0dXJuIHVoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOnRoaXMuemgoKSxlKSxuLHIpfSxsLmpoPWZ1bmN0aW9uKGUsbixyKXt2YXIgcztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLEVJKHRoaXMuYyxlLHIpO2Nhc2UgMTpyZXR1cm4oIXRoaXMuYyYmKHRoaXMuYz1uZXcgc3ModGhpcywwKSksdSh1KEJjKHRoaXMuYywoSWkoKSxYMikpLDE1MyksNjkpKS5tayhlLHIpO2Nhc2UgMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBzcyh0aGlzLDIpKSxFSSh0aGlzLmIsZSxyKX1yZXR1cm4gcz11KHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOnRoaXMuemgoKSxuKSw2Nikscy5OaigpLlJqKHRoaXMsJG10KHRoaXMpLG4tSm4odGhpcy56aCgpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTpyZXR1cm4hKCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUoQmModGhpcy5jLChJaSgpLFgyKSksMTUzKSkuZGMoKTtjYXNlIDI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wfXJldHVybiBvaCh0aGlzLGUtSm4odGhpcy56aCgpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgbmgpLHRoaXMuaykuY2soKTp0aGlzLnpoKCksZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyBzcyh0aGlzLDApKSxuRCh0aGlzLmMsbik7cmV0dXJuO2Nhc2UgMTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgc3ModGhpcywwKSksdSh1KEJjKHRoaXMuYywoSWkoKSxYMikpLDE1MyksMjE1KSkuV2Iobik7cmV0dXJuO2Nhc2UgMjohdGhpcy5iJiYodGhpcy5iPW5ldyBzcyh0aGlzLDIpKSxuRCh0aGlzLmIsbik7cmV0dXJufWdoKHRoaXMsZS1Kbih0aGlzLnpoKCkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOnRoaXMuemgoKSxlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBJaSgpLEVMdH0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHhyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgc3ModGhpcywwKSksdShCYyh0aGlzLmMsKElpKCksWDIpKSwxNTMpKS4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgc3ModGhpcywyKSkseHIodGhpcy5iKTtyZXR1cm59ZmgodGhpcyxlLUpuKHRoaXMuemgoKSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IG5oKSx0aGlzLmspLmNrKCk6dGhpcy56aCgpLGUpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmomND9tZih0aGlzKTooZT1uZXcgX2gobWYodGhpcykpLGUuYSs9IiAobWl4ZWQ6ICIsbDkoZSx0aGlzLmMpLGUuYSs9IiwgYW55QXR0cmlidXRlOiAiLGw5KGUsdGhpcy5iKSxlLmErPSIpIixlLmEpfSxGKHhzLCJBbnlUeXBlSW1wbCIsODMwKSxEKDY2Nyw1MDYsezEwNToxLDkyOjEsOTA6MSw1NjoxLDQ5OjEsOTc6MSwyMDIxOjEsNjY3OjF9LEFCKSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiB0aGlzLmE7Y2FzZSAxOnJldHVybiB0aGlzLmJ9cmV0dXJuIHVoKHRoaXMsZS1KbigoSWkoKSxoNSkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOmg1LGUpLG4scil9LGwubGg9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdGhpcy5hIT1udWxsO2Nhc2UgMTpyZXR1cm4gdGhpcy5iIT1udWxsfXJldHVybiBvaCh0aGlzLGUtSm4oKElpKCksaDUpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgbmgpLHRoaXMuaykuY2soKTpoNSxlKSl9LGwuc2g9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAwOiR0dCh0aGlzLEJyKG4pKTtyZXR1cm47Y2FzZSAxOmtwdCh0aGlzLEJyKG4pKTtyZXR1cm59Z2godGhpcyxlLUpuKChJaSgpLGg1KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IG5oKSx0aGlzLmspLmNrKCk6aDUsZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gSWkoKSxoNX0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOnRoaXMuYT1udWxsO3JldHVybjtjYXNlIDE6dGhpcy5iPW51bGw7cmV0dXJufWZoKHRoaXMsZS1KbigoSWkoKSxoNSkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOmg1LGUpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmomND9tZih0aGlzKTooZT1uZXcgX2gobWYodGhpcykpLGUuYSs9IiAoZGF0YTogIixnbyhlLHRoaXMuYSksZS5hKz0iLCB0YXJnZXQ6ICIsZ28oZSx0aGlzLmIpLGUuYSs9IikiLGUuYSl9LGwuYT1udWxsLGwuYj1udWxsLEYoeHMsIlByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwiLDY2NyksRCg2NjgsODMwLHsxMDU6MSw5MjoxLDkwOjEsNTY6MSw0OToxLDk3OjEsODQzOjEsMjAyMjoxLDY2ODoxfSxIcXQpLGwuX2c9ZnVuY3Rpb24oZSxuLHIpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHRoaXMuYyk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHRoaXMuYy5iKTtjYXNlIDE6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUoQmModGhpcy5jLChJaSgpLFgyKSksMTUzKSk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUodShCYyh0aGlzLmMsKElpKCksWDIpKSwxNTMpLDIxNSkpLmtsKCk7Y2FzZSAyOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBzcyh0aGlzLDIpKSx0aGlzLmIpOighdGhpcy5iJiYodGhpcy5iPW5ldyBzcyh0aGlzLDIpKSx0aGlzLmIuYik7Y2FzZSAzOnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLEJyKFNJKHRoaXMuYywoSWkoKSxsQSksITApKTtjYXNlIDQ6cmV0dXJuIGd3dCh0aGlzLmEsKCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLEJyKFNJKHRoaXMuYywoSWkoKSxsQSksITApKSkpO2Nhc2UgNTpyZXR1cm4gdGhpcy5hfXJldHVybiB1aCh0aGlzLGUtSm4oKElpKCksZjUpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgbmgpLHRoaXMuaykuY2soKTpmNSxlKSxuLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTpyZXR1cm4hKCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUoQmModGhpcy5jLChJaSgpLFgyKSksMTUzKSkuZGMoKTtjYXNlIDI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgMzpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBzcyh0aGlzLDApKSxCcihTSSh0aGlzLmMsKElpKCksbEEpLCEwKSkhPW51bGw7Y2FzZSA0OnJldHVybiBnd3QodGhpcy5hLCghdGhpcy5jJiYodGhpcy5jPW5ldyBzcyh0aGlzLDApKSxCcihTSSh0aGlzLmMsKElpKCksbEEpLCEwKSkpKSE9bnVsbDtjYXNlIDU6cmV0dXJuISF0aGlzLmF9cmV0dXJuIG9oKHRoaXMsZS1KbigoSWkoKSxmNSkpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOmY1LGUpKX0sbC5zaD1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgc3ModGhpcywwKSksbkQodGhpcy5jLG4pO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHUodShCYyh0aGlzLmMsKElpKCksWDIpKSwxNTMpLDIxNSkpLldiKG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgc3ModGhpcywyKSksbkQodGhpcy5iLG4pO3JldHVybjtjYXNlIDM6SnZ0KHRoaXMsQnIobikpO3JldHVybjtjYXNlIDQ6SnZ0KHRoaXMscHd0KHRoaXMuYSxuKSk7cmV0dXJuO2Nhc2UgNTp2Yyh0aGlzLHUobiwxNDgpKTtyZXR1cm59Z2godGhpcyxlLUpuKChJaSgpLGY1KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IG5oKSx0aGlzLmspLmNrKCk6ZjUsZSksbil9LGwuemg9ZnVuY3Rpb24oKXtyZXR1cm4gSWkoKSxmNX0sbC5CaD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSAwOiF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLHhyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgc3ModGhpcywwKSksdShCYyh0aGlzLmMsKElpKCksWDIpKSwxNTMpKS4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgc3ModGhpcywyKSkseHIodGhpcy5iKTtyZXR1cm47Y2FzZSAzOiF0aGlzLmMmJih0aGlzLmM9bmV3IHNzKHRoaXMsMCkpLE9xKHRoaXMuYywoSWkoKSxsQSksbnVsbCk7cmV0dXJuO2Nhc2UgNDpKdnQodGhpcyxwd3QodGhpcy5hLG51bGwpKTtyZXR1cm47Y2FzZSA1OnRoaXMuYT1udWxsO3JldHVybn1maCh0aGlzLGUtSm4oKElpKCksZjUpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgbmgpLHRoaXMuaykuY2soKTpmNSxlKSl9LEYoeHMsIlNpbXBsZUFueVR5cGVJbXBsIiw2NjgpLEQoNjY5LDUwNix7MTA1OjEsOTI6MSw5MDoxLDU2OjEsNDk6MSw5NzoxLDIwMjM6MSw2Njk6MX0scXF0KSxsLl9nPWZ1bmN0aW9uKGUsbixyKXtzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiByPyghdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSx0aGlzLmEpOighdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSx0aGlzLmEuYik7Y2FzZSAxOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBfbCgoZG4oKSxRYSksY2MsdGhpcywxKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgX2woKGRuKCksUWEpLGNjLHRoaXMsMSkpLHdEKHRoaXMuYikpO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYyYmKHRoaXMuYz1uZXcgX2woKGRuKCksUWEpLGNjLHRoaXMsMikpLHRoaXMuYyk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IF9sKChkbigpLFFhKSxjYyx0aGlzLDIpKSx3RCh0aGlzLmMpKTtjYXNlIDM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksQmModGhpcy5hLChJaSgpLG1QKSk7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IHNzKHRoaXMsMCkpLEJjKHRoaXMuYSwoSWkoKSx5UCkpO2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxCYyh0aGlzLmEsKElpKCksaEEpKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksQmModGhpcy5hLChJaSgpLGZBKSl9cmV0dXJuIHVoKHRoaXMsZS1KbigoSWkoKSxXdikpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOld2LGUpLG4scil9LGwuamg9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksRUkodGhpcy5hLGUscik7Y2FzZSAxOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IF9sKChkbigpLFFhKSxjYyx0aGlzLDEpKSxPaih0aGlzLmIsZSxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgX2woKGRuKCksUWEpLGNjLHRoaXMsMikpLE9qKHRoaXMuYyxlLHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxXV3QoQmModGhpcy5hLChJaSgpLGhBKSksZSxyKX1yZXR1cm4gcz11KHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOihJaSgpLFd2KSxuKSw2Nikscy5OaigpLlJqKHRoaXMsJG10KHRoaXMpLG4tSm4oKElpKCksV3YpKSxlLHIpfSxsLmxoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgMTpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmYhPTA7Y2FzZSAyOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuZiE9MDtjYXNlIDM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksIWhqKEJjKHRoaXMuYSwoSWkoKSxtUCkpKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksIWhqKEJjKHRoaXMuYSwoSWkoKSx5UCkpKTtjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksIWhqKEJjKHRoaXMuYSwoSWkoKSxoQSkpKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksIWhqKEJjKHRoaXMuYSwoSWkoKSxmQSkpKX1yZXR1cm4gb2godGhpcyxlLUpuKChJaSgpLFd2KSkseW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IG5oKSx0aGlzLmspLmNrKCk6V3YsZSkpfSxsLnNoPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMDohdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxuRCh0aGlzLmEsbik7cmV0dXJuO2Nhc2UgMTohdGhpcy5iJiYodGhpcy5iPW5ldyBfbCgoZG4oKSxRYSksY2MsdGhpcywxKSkseHoodGhpcy5iLG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgX2woKGRuKCksUWEpLGNjLHRoaXMsMikpLHh6KHRoaXMuYyxuKTtyZXR1cm47Y2FzZSAzOiF0aGlzLmEmJih0aGlzLmE9bmV3IHNzKHRoaXMsMCkpLFR4KEJjKHRoaXMuYSwoSWkoKSxtUCkpKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxnOShCYyh0aGlzLmEsbVApLHUobiwxNCkpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksVHgoQmModGhpcy5hLChJaSgpLHlQKSkpLCF0aGlzLmEmJih0aGlzLmE9bmV3IHNzKHRoaXMsMCkpLGc5KEJjKHRoaXMuYSx5UCksdShuLDE0KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxUeChCYyh0aGlzLmEsKElpKCksaEEpKSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSksZzkoQmModGhpcy5hLGhBKSx1KG4sMTQpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLmEmJih0aGlzLmE9bmV3IHNzKHRoaXMsMCkpLFR4KEJjKHRoaXMuYSwoSWkoKSxmQSkpKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxnOShCYyh0aGlzLmEsZkEpLHUobiwxNCkpO3JldHVybn1naCh0aGlzLGUtSm4oKElpKCksV3YpKSx5bih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgbmgpLHRoaXMuaykuY2soKTpXdixlKSxuKX0sbC56aD1mdW5jdGlvbigpe3JldHVybiBJaSgpLFd2fSxsLkJoPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgc3ModGhpcywwKSkseHIodGhpcy5hKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmImJih0aGlzLmI9bmV3IF9sKChkbigpLFFhKSxjYyx0aGlzLDEpKSx0aGlzLmIuYy4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgX2woKGRuKCksUWEpLGNjLHRoaXMsMikpLHRoaXMuYy5jLiRiKCk7cmV0dXJuO2Nhc2UgMzohdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxUeChCYyh0aGlzLmEsKElpKCksbVApKSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxUeChCYyh0aGlzLmEsKElpKCkseVApKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxUeChCYyh0aGlzLmEsKElpKCksaEEpKSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBzcyh0aGlzLDApKSxUeChCYyh0aGlzLmEsKElpKCksZkEpKSk7cmV0dXJufWZoKHRoaXMsZS1KbigoSWkoKSxXdikpLHluKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBuaCksdGhpcy5rKS5jaygpOld2LGUpKX0sbC5JYj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiB0aGlzLmomND9tZih0aGlzKTooZT1uZXcgX2gobWYodGhpcykpLGUuYSs9IiAobWl4ZWQ6ICIsbDkoZSx0aGlzLmEpLGUuYSs9IikiLGUuYSl9LEYoeHMsIlhNTFR5cGVEb2N1bWVudFJvb3RJbXBsIiw2NjkpLEQoMTkxOSw3MDQsezEwNToxLDkyOjEsOTA6MSw0NzE6MSwxNDc6MSw1NjoxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxMTQ6MSwxMTU6MSwyMDI0OjF9LF9tKSxsLkloPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUueWooKSl7Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDE2OmNhc2UgMjI6Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjU6Y2FzZSAyNjpjYXNlIDMyOmNhc2UgMzM6Y2FzZSAzNDpjYXNlIDM2OmNhc2UgMzc6Y2FzZSA0NDpjYXNlIDQ1OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUzOmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OmNhc2UgNTg6Y2FzZSA2MDpjYXNlIDYxOmNhc2UgNDpyZXR1cm4gbj09bnVsbD9udWxsOiRvKG4pO2Nhc2UgMTk6Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzU6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDE6Y2FzZSA0NjpjYXNlIDUyOmNhc2UgNTQ6Y2FzZSA1OnJldHVybiBCcihuKTtjYXNlIDY6cmV0dXJuIGJaZSh1KG4sMTkwKSk7Y2FzZSAxMjpjYXNlIDQ3OmNhc2UgNDk6Y2FzZSAxMTpyZXR1cm4gYmhlKHRoaXMsZSxuKTtjYXNlIDEzOnJldHVybiBuPT1udWxsP251bGw6cjNuKHUobiwyNDApKTtjYXNlIDE1OmNhc2UgMTQ6cmV0dXJuIG49PW51bGw/bnVsbDpkbm4oWHQoeWUobikpKTtjYXNlIDE3OnJldHVybiBtYWUoKElpKCksbikpO2Nhc2UgMTg6cmV0dXJuIG1hZShuKTtjYXNlIDIxOmNhc2UgMjA6cmV0dXJuIG49PW51bGw/bnVsbDpnbm4odShuLDE1NSkuYSk7Y2FzZSAyNzpyZXR1cm4gd1plKHUobiwxOTApKTtjYXNlIDMwOnJldHVybiBGc2UoKElpKCksdShuLDE1KSkpO2Nhc2UgMzE6cmV0dXJuIEZzZSh1KG4sMTUpKTtjYXNlIDQwOnJldHVybiBtWmUoKElpKCksbikpO2Nhc2UgNDI6cmV0dXJuIHlhZSgoSWkoKSxuKSk7Y2FzZSA0MzpyZXR1cm4geWFlKG4pO2Nhc2UgNTk6Y2FzZSA0ODpyZXR1cm4gdlplKChJaSgpLG4pKTtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihRRStlLm5lKCkrQ3YpKX19LGwuSmg9ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtzd2l0Y2goZS5HPT0tMSYmKGUuRz0ocj1SbChlKSxyP0hnKHIuTWgoKSxlKTotMSkpLGUuRyl7Y2FzZSAwOnJldHVybiBuPW5ldyBXcHQsbjtjYXNlIDE6cmV0dXJuIHM9bmV3IEFCLHM7Y2FzZSAyOnJldHVybiBvPW5ldyBIcXQsbztjYXNlIDM6cmV0dXJuIGg9bmV3IHFxdCxoO2RlZmF1bHQ6dGhyb3cgaXQobmV3IEZuKEtjdCtlLnpiK0N2KSl9fSxsLktoPWZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLGgsZCx2LGssQyxNLGosSCxHLEssdHQsZ3QsTXQ7c3dpdGNoKGUueWooKSl7Y2FzZSA1OmNhc2UgNTI6Y2FzZSA0OnJldHVybiBuO2Nhc2UgNjpyZXR1cm4gT2ZuKG4pO2Nhc2UgODpjYXNlIDc6cmV0dXJuIG49PW51bGw/bnVsbDp5MG4obik7Y2FzZSA5OnJldHVybiBuPT1udWxsP251bGw6QUQocWwoKHM9JGMobiwhMCkscy5sZW5ndGg+MCYmKFJyKDAscy5sZW5ndGgpLHMuY2hhckNvZGVBdCgwKT09NDMpP3Muc3Vic3RyKDEpOnMpLC0xMjgsMTI3KTw8MjQ+PjI0KTtjYXNlIDEwOnJldHVybiBuPT1udWxsP251bGw6QUQocWwoKG89JGMobiwhMCksby5sZW5ndGg+MCYmKFJyKDAsby5sZW5ndGgpLG8uY2hhckNvZGVBdCgwKT09NDMpP28uc3Vic3RyKDEpOm8pLC0xMjgsMTI3KTw8MjQ+PjI0KTtjYXNlIDExOnJldHVybiBCcih2dih0aGlzLChJaSgpLEk1ZSksbikpO2Nhc2UgMTI6cmV0dXJuIEJyKHZ2KHRoaXMsKElpKCksTzVlKSxuKSk7Y2FzZSAxMzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBnYnQoJGMobiwhMCkpO2Nhc2UgMTU6Y2FzZSAxNDpyZXR1cm4gejJuKG4pO2Nhc2UgMTY6cmV0dXJuIEJyKHZ2KHRoaXMsKElpKCksUDVlKSxuKSk7Y2FzZSAxNzpyZXR1cm4gemllKChJaSgpLG4pKTtjYXNlIDE4OnJldHVybiB6aWUobik7Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzU6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDE6Y2FzZSA1NDpjYXNlIDE5OnJldHVybiAkYyhuLCEwKTtjYXNlIDIxOmNhc2UgMjA6cmV0dXJuIFgybihuKTtjYXNlIDIyOnJldHVybiBCcih2dih0aGlzLChJaSgpLEY1ZSksbikpO2Nhc2UgMjM6cmV0dXJuIEJyKHZ2KHRoaXMsKElpKCksTjVlKSxuKSk7Y2FzZSAyNDpyZXR1cm4gQnIodnYodGhpcywoSWkoKSxCNWUpLG4pKTtjYXNlIDI1OnJldHVybiBCcih2dih0aGlzLChJaSgpLFI1ZSksbikpO2Nhc2UgMjY6cmV0dXJuIEJyKHZ2KHRoaXMsKElpKCksajVlKSxuKSk7Y2FzZSAyNzpyZXR1cm4gQWZuKG4pO2Nhc2UgMzA6cmV0dXJuIHFpZSgoSWkoKSxuKSk7Y2FzZSAzMTpyZXR1cm4gcWllKG4pO2Nhc2UgMzI6cmV0dXJuIG49PW51bGw/bnVsbDpwZShxbCgoTT0kYyhuLCEwKSxNLmxlbmd0aD4wJiYoUnIoMCxNLmxlbmd0aCksTS5jaGFyQ29kZUF0KDApPT00Myk/TS5zdWJzdHIoMSk6TSksU2Esd2kpKTtjYXNlIDMzOnJldHVybiBuPT1udWxsP251bGw6bmV3IFJwKChqPSRjKG4sITApLGoubGVuZ3RoPjAmJihScigwLGoubGVuZ3RoKSxqLmNoYXJDb2RlQXQoMCk9PTQzKT9qLnN1YnN0cigxKTpqKSk7Y2FzZSAzNDpyZXR1cm4gbj09bnVsbD9udWxsOnBlKHFsKChIPSRjKG4sITApLEgubGVuZ3RoPjAmJihScigwLEgubGVuZ3RoKSxILmNoYXJDb2RlQXQoMCk9PTQzKT9ILnN1YnN0cigxKTpIKSxTYSx3aSkpO2Nhc2UgMzY6cmV0dXJuIG49PW51bGw/bnVsbDp2MihScSgoRz0kYyhuLCEwKSxHLmxlbmd0aD4wJiYoUnIoMCxHLmxlbmd0aCksRy5jaGFyQ29kZUF0KDApPT00Myk/Ry5zdWJzdHIoMSk6RykpKTtjYXNlIDM3OnJldHVybiBuPT1udWxsP251bGw6djIoUnEoKEs9JGMobiwhMCksSy5sZW5ndGg+MCYmKFJyKDAsSy5sZW5ndGgpLEsuY2hhckNvZGVBdCgwKT09NDMpP0suc3Vic3RyKDEpOkspKSk7Y2FzZSA0MDpyZXR1cm4gVmhuKChJaSgpLG4pKTtjYXNlIDQyOnJldHVybiBIaWUoKElpKCksbikpO2Nhc2UgNDM6cmV0dXJuIEhpZShuKTtjYXNlIDQ0OnJldHVybiBuPT1udWxsP251bGw6bmV3IFJwKCh0dD0kYyhuLCEwKSx0dC5sZW5ndGg+MCYmKFJyKDAsdHQubGVuZ3RoKSx0dC5jaGFyQ29kZUF0KDApPT00Myk/dHQuc3Vic3RyKDEpOnR0KSk7Y2FzZSA0NTpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBScCgoZ3Q9JGMobiwhMCksZ3QubGVuZ3RoPjAmJihScigwLGd0Lmxlbmd0aCksZ3QuY2hhckNvZGVBdCgwKT09NDMpP2d0LnN1YnN0cigxKTpndCkpO2Nhc2UgNDY6cmV0dXJuICRjKG4sITEpO2Nhc2UgNDc6cmV0dXJuIEJyKHZ2KHRoaXMsKElpKCksJDVlKSxuKSk7Y2FzZSA1OTpjYXNlIDQ4OnJldHVybiBIaG4oKElpKCksbikpO2Nhc2UgNDk6cmV0dXJuIEJyKHZ2KHRoaXMsKElpKCksejVlKSxuKSk7Y2FzZSA1MDpyZXR1cm4gbj09bnVsbD9udWxsOnVFKHFsKChNdD0kYyhuLCEwKSxNdC5sZW5ndGg+MCYmKFJyKDAsTXQubGVuZ3RoKSxNdC5jaGFyQ29kZUF0KDApPT00Myk/TXQuc3Vic3RyKDEpOk10KSx6SCwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1MTpyZXR1cm4gbj09bnVsbD9udWxsOnVFKHFsKChoPSRjKG4sITApLGgubGVuZ3RoPjAmJihScigwLGgubGVuZ3RoKSxoLmNoYXJDb2RlQXQoMCk9PTQzKT9oLnN1YnN0cigxKTpoKSx6SCwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1MzpyZXR1cm4gQnIodnYodGhpcywoSWkoKSxxNWUpLG4pKTtjYXNlIDU1OnJldHVybiBuPT1udWxsP251bGw6dUUocWwoKGQ9JGMobiwhMCksZC5sZW5ndGg+MCYmKFJyKDAsZC5sZW5ndGgpLGQuY2hhckNvZGVBdCgwKT09NDMpP2Quc3Vic3RyKDEpOmQpLHpILDMyNzY3KTw8MTY+PjE2KTtjYXNlIDU2OnJldHVybiBuPT1udWxsP251bGw6dUUocWwoKHY9JGMobiwhMCksdi5sZW5ndGg+MCYmKFJyKDAsdi5sZW5ndGgpLHYuY2hhckNvZGVBdCgwKT09NDMpP3Yuc3Vic3RyKDEpOnYpLHpILDMyNzY3KTw8MTY+PjE2KTtjYXNlIDU3OnJldHVybiBuPT1udWxsP251bGw6djIoUnEoKGs9JGMobiwhMCksay5sZW5ndGg+MCYmKFJyKDAsay5sZW5ndGgpLGsuY2hhckNvZGVBdCgwKT09NDMpP2suc3Vic3RyKDEpOmspKSk7Y2FzZSA1ODpyZXR1cm4gbj09bnVsbD9udWxsOnYyKFJxKChDPSRjKG4sITApLEMubGVuZ3RoPjAmJihScigwLEMubGVuZ3RoKSxDLmNoYXJDb2RlQXQoMCk9PTQzKT9DLnN1YnN0cigxKTpDKSkpO2Nhc2UgNjA6cmV0dXJuIG49PW51bGw/bnVsbDpwZShxbCgocj0kYyhuLCEwKSxyLmxlbmd0aD4wJiYoUnIoMCxyLmxlbmd0aCksci5jaGFyQ29kZUF0KDApPT00Myk/ci5zdWJzdHIoMSk6ciksU2Esd2kpKTtjYXNlIDYxOnJldHVybiBuPT1udWxsP251bGw6cGUocWwoJGMobiwhMCksU2Esd2kpKTtkZWZhdWx0OnRocm93IGl0KG5ldyBGbihRRStlLm5lKCkrQ3YpKX19O3ZhciBWNWUsVEx0LEc1ZSxDTHQ7Rih4cywiWE1MVHlwZUZhY3RvcnlJbXBsIiwxOTE5KSxEKDU4NiwxNzksezEwNToxLDkyOjEsOTA6MSwxNDc6MSwxOTE6MSw1NjoxLDIzNToxLDEwODoxLDQ5OjEsOTc6MSwxNTA6MSwxNzk6MSwxMTQ6MSwxMTU6MSw2NzU6MSwxOTQ1OjEsNTg2OjF9LEFYdCksbC5OPSExLGwuTz0hMTt2YXIgVTVlPSExO0YoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbCIsNTg2KSxEKDE4NTIsMSx7ODM3OjF9LGh4KSxsLl9qPWZ1bmN0aW9uKCl7cmV0dXJuIG94dCgpLGV4ZX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzEiLDE4NTIpLEQoMTg2MSwxLHNpLGQxKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xMCIsMTg2MSksRCgxODYyLDEsc2ksTEIpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzExIiwxODYyKSxEKDE4NjMsMSxzaSxNQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMTIiLDE4NjMpLEQoMTg2NCwxLHNpLERCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBCbShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQobGEsZWUsMzMzLGUsNywxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzEzIiwxODY0KSxEKDE4NjUsMSxzaSxJQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMTQiLDE4NjUpLEQoMTg2NiwxLHNpLE9CKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQod2gsVHksMTUsZSwwLDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMTUiLDE4NjYpLEQoMTg2NywxLHNpLFBCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQod2gsVHksMTUsZSwwLDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMTYiLDE4NjcpLEQoMTg2OCwxLHNpLCRmKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8xNyIsMTg2OCksRCgxODY5LDEsc2ksZHUpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTU1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoaTcsZWUsMTU1LGUsMCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzE4IiwxODY5KSxEKDE4NzAsMSxzaSxBSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMTkiLDE4NzApLEQoMTg1MywxLHNpLExKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDg0Myl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KHdQLERlLDg0MyxlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yIiwxODUzKSxEKDE4NzEsMSxzaSxNSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMjAiLDE4NzEpLEQoMTg3MiwxLHNpLGd1KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yMSIsMTg3MiksRCgxODczLDEsc2ksY0MpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzIyIiwxODczKSxEKDE4NzQsMSxzaSxGQiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMjMiLDE4NzQpLEQoMTg3NSwxLHNpLE5CKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE5MCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEd1LGVlLDE5MCxlLDAsMil9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yNCIsMTg3NSksRCgxODc2LDEsc2ksZngpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzI1IiwxODc2KSxEKDE4NzcsMSxzaSxESiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMjYiLDE4NzcpLEQoMTg3OCwxLHNpLCRrKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQod2gsVHksMTUsZSwwLDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMjciLDE4NzgpLEQoMTg3OSwxLHNpLElKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE1KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQod2gsVHksMTUsZSwwLDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMjgiLDE4NzkpLEQoMTg4MCwxLHNpLEJCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8yOSIsMTg4MCksRCgxODU0LDEsc2ksT0opLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsNjY3KX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQobVUsRGUsMjAyMSxlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zIiwxODU0KSxEKDE4ODEsMSxzaSxQSiksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGphLGVlLDE5LGUsMCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzMwIiwxODgxKSxEKDE4ODIsMSxzaSx1QyksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMzEiLDE4ODIpLEQoMTg4MywxLHNpLFJCKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE2Mil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFN2LGVlLDE2MixlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zMiIsMTg4MyksRCgxODg0LDEsc2ksVUwpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzMzIiwxODg0KSxEKDE4ODUsMSxzaSxsQyksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMzQiLDE4ODUpLEQoMTg4NiwxLHNpLEZKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC8zNSIsMTg4NiksRCgxODg3LDEsc2ksTkopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzM2IiwxODg3KSxEKDE4ODgsMSxzaSxXTCksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KHdoLFR5LDE1LGUsMCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzM3IiwxODg4KSxEKDE4ODksMSxzaSxoQyksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxNSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KHdoLFR5LDE1LGUsMCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzM4IiwxODg5KSxEKDE4OTAsMSxzaSxnMSksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvMzkiLDE4OTApLEQoMTg1NSwxLHNpLHprKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDY2OCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KHZQLERlLDIwMjIsZSwwLDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvNCIsMTg1NSksRCgxODkxLDEsc2ksQkopLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQwIiwxODkxKSxEKDE4OTIsMSxzaSxxayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvNDEiLDE4OTIpLEQoMTg5MywxLHNpLFlMKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC80MiIsMTg5MyksRCgxODk0LDEsc2ksV2IpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQzIiwxODk0KSxEKDE4OTUsMSxzaSxmQyksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvNDQiLDE4OTUpLEQoMTg5NiwxLHNpLEtMKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE4NCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEF2LGVlLDE4NCxlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC80NSIsMTg5NiksRCgxODk3LDEsc2ksemYpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzQ2IiwxODk3KSxEKDE4OTgsMSxzaSxkQyksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvNDciLDE4OTgpLEQoMTg5OSwxLHNpLHAxKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiByYShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoQWUsZWUsMixlLDYsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC80OCIsMTg5OSksRChhYiwxLHNpLGIxKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE4NCl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEF2LGVlLDE4NCxlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC80OSIsYWIpLEQoMTg1NiwxLHNpLFJKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDY2OSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGtMdCxEZSwyMDIzLGUsMCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzUiLDE4NTYpLEQoMTkwMSwxLHNpLGpKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDE2Mil9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KFN2LGVlLDE2MixlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC81MCIsMTkwMSksRCgxOTAyLDEsc2ksTTMpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIHJhKGUpfSxsLnhqPWZ1bmN0aW9uKGUpe3JldHVybiBOdChBZSxlZSwyLGUsNiwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzUxIiwxOTAyKSxEKDE5MDMsMSxzaSxIayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gX3QoZSwxOSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGphLGVlLDE5LGUsMCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzUyIiwxOTAzKSxEKDE4NTcsMSxzaSxWayksbC53aj1mdW5jdGlvbihlKXtyZXR1cm4gcmEoZSl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KEFlLGVlLDIsZSw2LDEpfSxGKHhzLCJYTUxUeXBlUGFja2FnZUltcGwvNiIsMTg1NyksRCgxODU4LDEsc2ksZ0MpLGwud2o9ZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUsMTkwKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoR3UsZWUsMTkwLGUsMCwyKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzciLDE4NTgpLEQoMTg1OSwxLHNpLCRKKSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBObShlKX0sbC54aj1mdW5jdGlvbihlKXtyZXR1cm4gTnQoUnMsZWUsNDc2LGUsOCwxKX0sRih4cywiWE1MVHlwZVBhY2thZ2VJbXBsLzgiLDE4NTkpLEQoMTg2MCwxLHNpLGR4KSxsLndqPWZ1bmN0aW9uKGUpe3JldHVybiBfdChlLDIxNyl9LGwueGo9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KE02LGVlLDIxNyxlLDAsMSl9LEYoeHMsIlhNTFR5cGVQYWNrYWdlSW1wbC85IiwxODYwKTt2YXIgWTEsbHAsZEEseVUsd3Q7RCg1MCw2MCxRMCxOciksRihaZywiUmVnRXgvUGFyc2VFeGNlcHRpb24iLDUwKSxEKDgyMCwxLHt9LFhMKSxsLnNsPWZ1bmN0aW9uKGUpe3JldHVybiBlPHRoaXMuaiYmd2EodGhpcy5pLGUpPT02M30sbC50bD1mdW5jdGlvbigpe3ZhciBlLG4scixzLG87aWYodGhpcy5jIT0xMCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksT0gpKSkpO3N3aXRjaChlPXRoaXMuYSxlKXtjYXNlIDEwMTplPTI3O2JyZWFrO2Nhc2UgMTAyOmU9MTI7YnJlYWs7Y2FzZSAxMTA6ZT0xMDticmVhaztjYXNlIDExNDplPTEzO2JyZWFrO2Nhc2UgMTE2OmU9OTticmVhaztjYXNlIDEyMDppZihmaSh0aGlzKSx0aGlzLmMhPTApdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFFnKSkpKTtpZih0aGlzLmE9PTEyMyl7bz0wLHI9MDtkb3tpZihmaSh0aGlzKSx0aGlzLmMhPTApdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFFnKSkpKTtpZigobz15Mih0aGlzLmEpKTwwKWJyZWFrO2lmKHI+cioxNil0aHJvdyBpdChuZXcgTnIocXIoKFByKCksZzBlKSkpKTtyPXIqMTYrb313aGlsZSghMCk7aWYodGhpcy5hIT0xMjUpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLHAwZSkpKSk7aWYocj5lNyl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYjBlKSkpKTtlPXJ9ZWxzZXtpZihvPTAsdGhpcy5jIT0wfHwobz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYocj1vLGZpKHRoaXMpLHRoaXMuYyE9MHx8KG89eTIodGhpcy5hKSk8MCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUWcpKSkpO3I9cioxNitvLGU9cn1icmVhaztjYXNlIDExNzppZihzPTAsZmkodGhpcyksdGhpcy5jIT0wfHwocz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYobj1zLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9eTIodGhpcy5hKSk8MCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUWcpKSkpO2lmKG49bioxNitzLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9eTIodGhpcy5hKSk8MCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUWcpKSkpO2lmKG49bioxNitzLGZpKHRoaXMpLHRoaXMuYyE9MHx8KHM9eTIodGhpcy5hKSk8MCl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUWcpKSkpO249bioxNitzLGU9bjticmVhaztjYXNlIDExODppZihmaSh0aGlzKSx0aGlzLmMhPTB8fChzPXkyKHRoaXMuYSkpPDApdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLFFnKSkpKTtpZihuPXMsZmkodGhpcyksdGhpcy5jIT0wfHwocz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYobj1uKjE2K3MsZmkodGhpcyksdGhpcy5jIT0wfHwocz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYobj1uKjE2K3MsZmkodGhpcyksdGhpcy5jIT0wfHwocz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYobj1uKjE2K3MsZmkodGhpcyksdGhpcy5jIT0wfHwocz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYobj1uKjE2K3MsZmkodGhpcyksdGhpcy5jIT0wfHwocz15Mih0aGlzLmEpKTwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxRZykpKSk7aWYobj1uKjE2K3Msbj5lNyl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksInBhcnNlci5kZXNjYXBwZS40IikpKSk7ZT1uO2JyZWFrO2Nhc2UgNjU6Y2FzZSA5MDpjYXNlIDEyMjp0aHJvdyBpdChuZXcgTnIocXIoKFByKCksdzBlKSkpKX1yZXR1cm4gZX0sbC51bD1mdW5jdGlvbihlKXt2YXIgbixyO3N3aXRjaChlKXtjYXNlIDEwMDpyPSh0aGlzLmUmMzIpPT0zMj9pYigiTmQiLCEwKTooZ2koKSx4VSk7YnJlYWs7Y2FzZSA2ODpyPSh0aGlzLmUmMzIpPT0zMj9pYigiTmQiLCExKTooZ2koKSxETHQpO2JyZWFrO2Nhc2UgMTE5OnI9KHRoaXMuZSYzMik9PTMyP2liKCJJc1dvcmQiLCEwKTooZ2koKSxxNyk7YnJlYWs7Y2FzZSA4NzpyPSh0aGlzLmUmMzIpPT0zMj9pYigiSXNXb3JkIiwhMSk6KGdpKCksT0x0KTticmVhaztjYXNlIDExNTpyPSh0aGlzLmUmMzIpPT0zMj9pYigiSXNTcGFjZSIsITApOihnaSgpLGVrKTticmVhaztjYXNlIDgzOnI9KHRoaXMuZSYzMik9PTMyP2liKCJJc1NwYWNlIiwhMSk6KGdpKCksSUx0KTticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyBWbygobj1lLHdnZStuLnRvU3RyaW5nKDE2KSkpKX1yZXR1cm4gcn0sbC52bD1mdW5jdGlvbihlKXt2YXIgbixyLHMsbyxoLGQsdixrLEMsTSxqLEg7Zm9yKHRoaXMuYj0xLGZpKHRoaXMpLG49bnVsbCx0aGlzLmM9PTAmJnRoaXMuYT09OTQ/KGZpKHRoaXMpLGU/TT0oZ2koKSxnaSgpLG5ldyBObCg1KSk6KG49KGdpKCksZ2koKSxuZXcgTmwoNCkpLGpjKG4sMCxlNyksTT1uZXcgTmwoNCkpKTpNPShnaSgpLGdpKCksbmV3IE5sKDQpKSxvPSEwOyhIPXRoaXMuYykhPTEmJiEoSD09MCYmdGhpcy5hPT05MyYmIW8pOyl7aWYobz0hMSxyPXRoaXMuYSxzPSExLEg9PTEwKXN3aXRjaChyKXtjYXNlIDEwMDpjYXNlIDY4OmNhc2UgMTE5OmNhc2UgODc6Y2FzZSAxMTU6Y2FzZSA4Mzp5eShNLHRoaXMudWwocikpLHM9ITA7YnJlYWs7Y2FzZSAxMDU6Y2FzZSA3MzpjYXNlIDk5OmNhc2UgNjc6cj10aGlzLkxsKE0scikscjwwJiYocz0hMCk7YnJlYWs7Y2FzZSAxMTI6Y2FzZSA4MDppZihqPXU1dCh0aGlzLHIpLCFqKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxjdXQpKSkpO3l5KE0saikscz0hMDticmVhaztkZWZhdWx0OnI9dGhpcy50bCgpfWVsc2UgaWYoSD09MjApe2lmKGQ9djgodGhpcy5pLDU4LHRoaXMuZCksZDwwKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxPOHQpKSkpO2lmKHY9ITAsd2EodGhpcy5pLHRoaXMuZCk9PTk0JiYoKyt0aGlzLmQsdj0hMSksaD1QbCh0aGlzLmksdGhpcy5kLGQpLGs9THRlKGgsdiwodGhpcy5lJjUxMik9PTUxMiksIWspdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLHUwZSkpKSk7aWYoeXkoTSxrKSxzPSEwLGQrMT49dGhpcy5qfHx3YSh0aGlzLmksZCsxKSE9OTMpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLE84dCkpKSk7dGhpcy5kPWQrMn1pZihmaSh0aGlzKSwhcylpZih0aGlzLmMhPTB8fHRoaXMuYSE9NDUpamMoTSxyLHIpO2Vsc2V7aWYoZmkodGhpcyksKEg9dGhpcy5jKT09MSl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUEgpKSkpO0g9PTAmJnRoaXMuYT09OTM/KGpjKE0scixyKSxqYyhNLDQ1LDQ1KSk6KEM9dGhpcy5hLEg9PTEwJiYoQz10aGlzLnRsKCkpLGZpKHRoaXMpLGpjKE0scixDKSl9KHRoaXMuZSZ4Zik9PXhmJiZ0aGlzLmM9PTAmJnRoaXMuYT09NDQmJmZpKHRoaXMpfWlmKHRoaXMuYz09MSl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksUEgpKSkpO3JldHVybiBuJiYoTF8obixNKSxNPW4pLHY0KE0pLFNfKE0pLHRoaXMuYj0wLGZpKHRoaXMpLE19LGwud2w9ZnVuY3Rpb24oKXt2YXIgZSxuLHIscztmb3Iocj10aGlzLnZsKCExKTsocz10aGlzLmMpIT03OylpZihlPXRoaXMuYSxzPT0wJiYoZT09NDV8fGU9PTM4KXx8cz09NCl7aWYoZmkodGhpcyksdGhpcy5jIT05KXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxoMGUpKSkpO2lmKG49dGhpcy52bCghMSkscz09NCl5eShyLG4pO2Vsc2UgaWYoZT09NDUpTF8ocixuKTtlbHNlIGlmKGU9PTM4KWxoZShyLG4pO2Vsc2UgdGhyb3cgaXQobmV3IFZvKCJBU1NFUlQiKSl9ZWxzZSB0aHJvdyBpdChuZXcgTnIocXIoKFByKCksZjBlKSkpKTtyZXR1cm4gZmkodGhpcykscn0sbC54bD1mdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuIGU9dGhpcy5hLTQ4LG49KGdpKCksZ2koKSxuZXcga3J0KDEyLG51bGwsZSkpLCF0aGlzLmcmJih0aGlzLmc9bmV3IEVSKSxrUih0aGlzLmcsbmV3IFNwdChlKSksZmkodGhpcyksbn0sbC55bD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxnaSgpLEs1ZX0sbC56bD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxnaSgpLFk1ZX0sbC5BbD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuQmw9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYmgpKSkpfSxsLkNsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLEd1bigpfSxsLkRsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksUTVlfSxsLkVsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksSjVlfSxsLkZsPWZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5kPj10aGlzLmp8fCgoZT13YSh0aGlzLmksdGhpcy5kKyspKSY2NTUwNCkhPTY0KXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxhMGUpKSkpO3JldHVybiBmaSh0aGlzKSxnaSgpLGdpKCksbmV3IFlkKDAsZS02NCl9LGwuR2w9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksQXluKCl9LGwuSGw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSx0eGV9LGwuSWw9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gZT0oZ2koKSxnaSgpLG5ldyBZZCgwLDEwNSkpLGZpKHRoaXMpLGV9LGwuSmw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSxaNWV9LGwuS2w9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSxYNWV9LGwuTGw9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy50bCgpfSxsLk1sPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksTEx0fSxsLk5sPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztpZih0aGlzLmQrMT49dGhpcy5qKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxyMGUpKSkpO2lmKHM9LTEsbj1udWxsLGU9d2EodGhpcy5pLHRoaXMuZCksNDk8PWUmJmU8PTU3KXtpZihzPWUtNDgsIXRoaXMuZyYmKHRoaXMuZz1uZXcgRVIpLGtSKHRoaXMuZyxuZXcgU3B0KHMpKSwrK3RoaXMuZCx3YSh0aGlzLmksdGhpcy5kKSE9NDEpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEkyKSkpKTsrK3RoaXMuZH1lbHNlIHN3aXRjaChlPT02MyYmLS10aGlzLmQsZmkodGhpcyksbj1JeHQodGhpcyksbi5lKXtjYXNlIDIwOmNhc2UgMjE6Y2FzZSAyMjpjYXNlIDIzOmJyZWFrO2Nhc2UgODppZih0aGlzLmMhPTcpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEkyKSkpKTticmVhaztkZWZhdWx0OnRocm93IGl0KG5ldyBOcihxcigoUHIoKSxpMGUpKSkpfWlmKGZpKHRoaXMpLG89Y3YodGhpcykscj1udWxsLG8uZT09Mil7aWYoby5lbSgpIT0yKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxzMGUpKSkpO3I9by5hbSgxKSxvPW8uYW0oMCl9aWYodGhpcy5jIT03KXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxJMikpKSk7cmV0dXJuIGZpKHRoaXMpLGdpKCksZ2koKSxuZXcgb2VlKHMsbixvLHIpfSxsLk9sPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLGdpKCksTUx0fSxsLlBsPWZ1bmN0aW9uKCl7dmFyIGU7aWYoZmkodGhpcyksZT1pJCgyNCxjdih0aGlzKSksdGhpcy5jIT03KXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxJMikpKSk7cmV0dXJuIGZpKHRoaXMpLGV9LGwuUWw9ZnVuY3Rpb24oKXt2YXIgZTtpZihmaSh0aGlzKSxlPWkkKDIwLGN2KHRoaXMpKSx0aGlzLmMhPTcpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEkyKSkpKTtyZXR1cm4gZmkodGhpcyksZX0sbC5SbD1mdW5jdGlvbigpe3ZhciBlO2lmKGZpKHRoaXMpLGU9aSQoMjIsY3YodGhpcykpLHRoaXMuYyE9Nyl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksSTIpKSkpO3JldHVybiBmaSh0aGlzKSxlfSxsLlNsPWZ1bmN0aW9uKCl7dmFyIGUsbixyLHMsbztmb3IoZT0wLHI9MCxuPS0xO3RoaXMuZDx0aGlzLmomJihuPXdhKHRoaXMuaSx0aGlzLmQpLG89ZzV0KG4pLG8hPTApOyllfD1vLCsrdGhpcy5kO2lmKHRoaXMuZD49dGhpcy5qKXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxEOHQpKSkpO2lmKG49PTQ1KXtmb3IoKyt0aGlzLmQ7dGhpcy5kPHRoaXMuaiYmKG49d2EodGhpcy5pLHRoaXMuZCksbz1nNXQobiksbyE9MCk7KXJ8PW8sKyt0aGlzLmQ7aWYodGhpcy5kPj10aGlzLmopdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEQ4dCkpKSl9aWYobj09NTgpe2lmKCsrdGhpcy5kLGZpKHRoaXMpLHM9Zlh0KGN2KHRoaXMpLGUsciksdGhpcy5jIT03KXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxJMikpKSk7ZmkodGhpcyl9ZWxzZSBpZihuPT00MSkrK3RoaXMuZCxmaSh0aGlzKSxzPWZYdChjdih0aGlzKSxlLHIpO2Vsc2UgdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLG4wZSkpKSk7cmV0dXJuIHN9LGwuVGw9ZnVuY3Rpb24oKXt2YXIgZTtpZihmaSh0aGlzKSxlPWkkKDIxLGN2KHRoaXMpKSx0aGlzLmMhPTcpdGhyb3cgaXQobmV3IE5yKHFyKChQcigpLEkyKSkpKTtyZXR1cm4gZmkodGhpcyksZX0sbC5VbD1mdW5jdGlvbigpe3ZhciBlO2lmKGZpKHRoaXMpLGU9aSQoMjMsY3YodGhpcykpLHRoaXMuYyE9Nyl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksSTIpKSkpO3JldHVybiBmaSh0aGlzKSxlfSxsLlZsPWZ1bmN0aW9uKCl7dmFyIGUsbjtpZihmaSh0aGlzKSxlPXRoaXMuZisrLG49S250KGN2KHRoaXMpLGUpLHRoaXMuYyE9Nyl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksSTIpKSkpO3JldHVybiBmaSh0aGlzKSxufSxsLldsPWZ1bmN0aW9uKCl7dmFyIGU7aWYoZmkodGhpcyksZT1LbnQoY3YodGhpcyksMCksdGhpcy5jIT03KXRocm93IGl0KG5ldyBOcihxcigoUHIoKSxJMikpKSk7cmV0dXJuIGZpKHRoaXMpLGV9LGwuWGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZpKHRoaXMpLHRoaXMuYz09NT8oZmkodGhpcyksWWooZSwoZ2koKSxnaSgpLG5ldyBYbSg5LGUpKSkpOllqKGUsKGdpKCksZ2koKSxuZXcgWG0oMyxlKSkpfSxsLllsPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBmaSh0aGlzKSxuPShnaSgpLGdpKCksbmV3IGQ5KDIpKSx0aGlzLmM9PTU/KGZpKHRoaXMpLEUyKG4scEEpLEUyKG4sZSkpOihFMihuLGUpLEUyKG4scEEpKSxufSxsLlpsPWZ1bmN0aW9uKGUpe3JldHVybiBmaSh0aGlzKSx0aGlzLmM9PTU/KGZpKHRoaXMpLGdpKCksZ2koKSxuZXcgWG0oOSxlKSk6KGdpKCksZ2koKSxuZXcgWG0oMyxlKSl9LGwuYT0wLGwuYj0wLGwuYz0wLGwuZD0wLGwuZT0wLGwuZj0xLGwuZz1udWxsLGwuaj0wLEYoWmcsIlJlZ0V4L1JlZ2V4UGFyc2VyIiw4MjApLEQoMTgyNCw4MjAse30sVnF0KSxsLnNsPWZ1bmN0aW9uKGUpe3JldHVybiExfSxsLnRsPWZ1bmN0aW9uKCl7cmV0dXJuIEg1dCh0aGlzKX0sbC51bD1mdW5jdGlvbihlKXtyZXR1cm4gTUUoZSl9LGwudmw9ZnVuY3Rpb24oZSl7cmV0dXJuIG5mZSh0aGlzKX0sbC53bD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwueGw9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYmgpKSkpfSxsLnlsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC56bD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuQWw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksTUUoNjcpfSxsLkJsPWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMpLE1FKDczKX0sbC5DbD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuRGw9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYmgpKSkpfSxsLkVsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC5GbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxNRSg5OSl9LGwuR2w9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYmgpKSkpfSxsLkhsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC5JbD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzKSxNRSgxMDUpfSxsLkpsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC5LbD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuTGw9ZnVuY3Rpb24oZSxuKXtyZXR1cm4geXkoZSxNRShuKSksLTF9LGwuTWw9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSxnaSgpLG5ldyBZZCgwLDk0KX0sbC5ObD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuT2w9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyksZ2koKSxnaSgpLG5ldyBZZCgwLDM2KX0sbC5QbD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuUWw9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYmgpKSkpfSxsLlJsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC5TbD1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBOcihxcigoUHIoKSxiaCkpKSl9LGwuVGw9ZnVuY3Rpb24oKXt0aHJvdyBpdChuZXcgTnIocXIoKFByKCksYmgpKSkpfSxsLlVsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC5WbD1mdW5jdGlvbigpe3ZhciBlO2lmKGZpKHRoaXMpLGU9S250KGN2KHRoaXMpLDApLHRoaXMuYyE9Nyl0aHJvdyBpdChuZXcgTnIocXIoKFByKCksSTIpKSkpO3JldHVybiBmaSh0aGlzKSxlfSxsLldsPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IE5yKHFyKChQcigpLGJoKSkpKX0sbC5YbD1mdW5jdGlvbihlKXtyZXR1cm4gZmkodGhpcyksWWooZSwoZ2koKSxnaSgpLG5ldyBYbSgzLGUpKSl9LGwuWWw9ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIGZpKHRoaXMpLG49KGdpKCksZ2koKSxuZXcgZDkoMikpLEUyKG4sZSksRTIobixwQSksbn0sbC5abD1mdW5jdGlvbihlKXtyZXR1cm4gZmkodGhpcyksZ2koKSxnaSgpLG5ldyBYbSgzLGUpfTt2YXIgZDU9bnVsbCwkNz1udWxsO0YoWmcsIlJlZ0V4L1BhcnNlckZvclhNTFNjaGVtYSIsMTgyNCksRCgxMTcsMSxuNyx5dyksbC4kbD1mdW5jdGlvbihlKXt0aHJvdyBpdChuZXcgVm8oIk5vdCBzdXBwb3J0ZWQuIikpfSxsLl9sPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGx9LGwuYm09ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5jbT1mdW5jdGlvbihlKXt9LGwuZG09ZnVuY3Rpb24oZSl7fSxsLmVtPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mbSgwKX0sbC5mbT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lPT0xMT8iLiI6IiJ9LGwuZT0wO3ZhciBfTHQsejcsZ0EsVzVlLFNMdCxzMz1udWxsLHhVLEhmdD1udWxsLEFMdCxwQSxWZnQ9bnVsbCxMTHQsTUx0LERMdCxJTHQsT0x0LFk1ZSxlayxLNWUsWDVlLFE1ZSxaNWUscTcsSjVlLHR4ZSxrNm49RihaZywiUmVnRXgvVG9rZW4iLDExNyk7RCgxMzYsMTE3LHszOjEsMTM2OjEsMTE3OjF9LE5sKSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuLHIscztpZih0aGlzLmU9PTQpaWYodGhpcz09QUx0KXI9Ii4iO2Vsc2UgaWYodGhpcz09eFUpcj0iXFxkIjtlbHNlIGlmKHRoaXM9PXE3KXI9IlxcdyI7ZWxzZSBpZih0aGlzPT1laylyPSJcXHMiO2Vsc2V7Zm9yKHM9bmV3IEFnLHMuYSs9IlsiLG49MDtuPHRoaXMuYi5sZW5ndGg7bis9MillJnhmJiZuPjAmJihzLmErPSIsIiksdGhpcy5iW25dPT09dGhpcy5iW24rMV0/Z28ocyxfSSh0aGlzLmJbbl0pKTooZ28ocyxfSSh0aGlzLmJbbl0pKSxzLmErPSItIixnbyhzLF9JKHRoaXMuYltuKzFdKSkpO3MuYSs9Il0iLHI9cy5hfWVsc2UgaWYodGhpcz09REx0KXI9IlxcRCI7ZWxzZSBpZih0aGlzPT1PTHQpcj0iXFxXIjtlbHNlIGlmKHRoaXM9PUlMdClyPSJcXFMiO2Vsc2V7Zm9yKHM9bmV3IEFnLHMuYSs9IlteIixuPTA7bjx0aGlzLmIubGVuZ3RoO24rPTIpZSZ4ZiYmbj4wJiYocy5hKz0iLCIpLHRoaXMuYltuXT09PXRoaXMuYltuKzFdP2dvKHMsX0kodGhpcy5iW25dKSk6KGdvKHMsX0kodGhpcy5iW25dKSkscy5hKz0iLSIsZ28ocyxfSSh0aGlzLmJbbisxXSkpKTtzLmErPSJdIixyPXMuYX1yZXR1cm4gcn0sbC5hPSExLGwuYz0hMSxGKFpnLCJSZWdFeC9SYW5nZVRva2VuIiwxMzYpLEQoNTg0LDEsezU4NDoxfSxTcHQpLGwuYT0wLEYoWmcsIlJlZ0V4L1JlZ2V4UGFyc2VyL1JlZmVyZW5jZVBvc2l0aW9uIiw1ODQpLEQoNTgzLDEsezM6MSw1ODM6MX0sZVZ0KSxsLkZiPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBlPT1udWxsfHwhX3QoZSw1ODMpPyExOihuPXUoZSw1ODMpLGhuKHRoaXMuYixuLmIpJiZ0aGlzLmE9PW4uYSl9LGwuSGI9ZnVuY3Rpb24oKXtyZXR1cm4gVmcodGhpcy5iKyIvIitCNXQodGhpcy5hKSl9LGwuSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmZtKHRoaXMuYSl9LGwuYT0wLEYoWmcsIlJlZ0V4L1JlZ3VsYXJFeHByZXNzaW9uIiw1ODMpLEQoMjIzLDExNyxuNyxZZCksbC5fbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGwuZm09ZnVuY3Rpb24oZSl7dmFyIG4scixzO3N3aXRjaCh0aGlzLmUpe2Nhc2UgMDpzd2l0Y2godGhpcy5hKXtjYXNlIDEyNDpjYXNlIDQyOmNhc2UgNDM6Y2FzZSA2MzpjYXNlIDQwOmNhc2UgNDE6Y2FzZSA0NjpjYXNlIDkxOmNhc2UgMTIzOmNhc2UgOTI6cz0iXFwiK2tudCh0aGlzLmEmeXMpO2JyZWFrO2Nhc2UgMTI6cz0iXFxmIjticmVhaztjYXNlIDEwOnM9IlxcbiI7YnJlYWs7Y2FzZSAxMzpzPSJcXHIiO2JyZWFrO2Nhc2UgOTpzPSJcXHQiO2JyZWFrO2Nhc2UgMjc6cz0iXFxlIjticmVhaztkZWZhdWx0OnRoaXMuYT49S2E/KHI9KG49dGhpcy5hPj4+MCwiMCIrbi50b1N0cmluZygxNikpLHM9IlxcdiIrUGwocixyLmxlbmd0aC02LHIubGVuZ3RoKSk6cz0iIitrbnQodGhpcy5hJnlzKX1icmVhaztjYXNlIDg6dGhpcz09TEx0fHx0aGlzPT1NTHQ/cz0iIitrbnQodGhpcy5hJnlzKTpzPSJcXCIra250KHRoaXMuYSZ5cyk7YnJlYWs7ZGVmYXVsdDpzPW51bGx9cmV0dXJuIHN9LGwuYT0wLEYoWmcsIlJlZ0V4L1Rva2VuL0NoYXJUb2tlbiIsMjIzKSxEKDMwOSwxMTcsbjcsWG0pLGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYX0sbC5jbT1mdW5jdGlvbihlKXt0aGlzLmI9ZX0sbC5kbT1mdW5jdGlvbihlKXt0aGlzLmM9ZX0sbC5lbT1mdW5jdGlvbigpe3JldHVybiAxfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuO2lmKHRoaXMuZT09MylpZih0aGlzLmM8MCYmdGhpcy5iPDApbj10aGlzLmEuZm0oZSkrIioiO2Vsc2UgaWYodGhpcy5jPT10aGlzLmIpbj10aGlzLmEuZm0oZSkrInsiK3RoaXMuYysifSI7ZWxzZSBpZih0aGlzLmM+PTAmJnRoaXMuYj49MCluPXRoaXMuYS5mbShlKSsieyIrdGhpcy5jKyIsIit0aGlzLmIrIn0iO2Vsc2UgaWYodGhpcy5jPj0wJiZ0aGlzLmI8MCluPXRoaXMuYS5mbShlKSsieyIrdGhpcy5jKyIsfSI7ZWxzZSB0aHJvdyBpdChuZXcgVm8oIlRva2VuI3RvU3RyaW5nKCk6IENMT1NVUkUgIit0aGlzLmMrWWErdGhpcy5iKSk7ZWxzZSBpZih0aGlzLmM8MCYmdGhpcy5iPDApbj10aGlzLmEuZm0oZSkrIio/IjtlbHNlIGlmKHRoaXMuYz09dGhpcy5iKW49dGhpcy5hLmZtKGUpKyJ7Iit0aGlzLmMrIn0/IjtlbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPj0wKW49dGhpcy5hLmZtKGUpKyJ7Iit0aGlzLmMrIiwiK3RoaXMuYisifT8iO2Vsc2UgaWYodGhpcy5jPj0wJiZ0aGlzLmI8MCluPXRoaXMuYS5mbShlKSsieyIrdGhpcy5jKyIsfT8iO2Vsc2UgdGhyb3cgaXQobmV3IFZvKCJUb2tlbiN0b1N0cmluZygpOiBOT05HUkVFRFlDTE9TVVJFICIrdGhpcy5jK1lhK3RoaXMuYikpO3JldHVybiBufSxsLmI9MCxsLmM9MCxGKFpnLCJSZWdFeC9Ub2tlbi9DbG9zdXJlVG9rZW4iLDMwOSksRCg4MjEsMTE3LG43LG12dCksbC5hbT1mdW5jdGlvbihlKXtyZXR1cm4gZT09MD90aGlzLmE6dGhpcy5ifSxsLmVtPWZ1bmN0aW9uKCl7cmV0dXJuIDJ9LGwuZm09ZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuIHRoaXMuYi5lPT0zJiZ0aGlzLmIuYW0oMCk9PXRoaXMuYT9uPXRoaXMuYS5mbShlKSsiKyI6dGhpcy5iLmU9PTkmJnRoaXMuYi5hbSgwKT09dGhpcy5hP249dGhpcy5hLmZtKGUpKyIrPyI6bj10aGlzLmEuZm0oZSkrKCIiK3RoaXMuYi5mbShlKSksbn0sRihaZywiUmVnRXgvVG9rZW4vQ29uY2F0VG9rZW4iLDgyMSksRCgxODIyLDExNyxuNyxvZWUpLGwuYW09ZnVuY3Rpb24oZSl7aWYoZT09MClyZXR1cm4gdGhpcy5kO2lmKGU9PTEpcmV0dXJuIHRoaXMuYjt0aHJvdyBpdChuZXcgVm8oIkludGVybmFsIEVycm9yOiAiK2UpKX0sbC5lbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI/MjoxfSxsLmZtPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiB0aGlzLmM+MD9uPSIoPygiK3RoaXMuYysiKSI6dGhpcy5hLmU9PTg/bj0iKD8oIit0aGlzLmErIikiOm49Iig/Iit0aGlzLmEsdGhpcy5iP24rPXRoaXMuZCsifCIrdGhpcy5iKyIpIjpuKz10aGlzLmQrIikiLG59LGwuYz0wLEYoWmcsIlJlZ0V4L1Rva2VuL0NvbmRpdGlvblRva2VuIiwxODIyKSxEKDE4MjMsMTE3LG43LG9adCksbC5hbT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ifSxsLmVtPWZ1bmN0aW9uKCl7cmV0dXJuIDF9LGwuZm09ZnVuY3Rpb24oZSl7cmV0dXJuIig/IisodGhpcy5hPT0wPyIiOkI1dCh0aGlzLmEpKSsodGhpcy5jPT0wPyIiOkI1dCh0aGlzLmMpKSsiOiIrdGhpcy5iLmZtKGUpKyIpIn0sbC5hPTAsbC5jPTAsRihaZywiUmVnRXgvVG9rZW4vTW9kaWZpZXJUb2tlbiIsMTgyMyksRCg4MjIsMTE3LG43LEN2dCksbC5hbT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hfSxsLmVtPWZ1bmN0aW9uKCl7cmV0dXJuIDF9LGwuZm09ZnVuY3Rpb24oZSl7dmFyIG47c3dpdGNoKG49bnVsbCx0aGlzLmUpe2Nhc2UgNjp0aGlzLmI9PTA/bj0iKD86Iit0aGlzLmEuZm0oZSkrIikiOm49IigiK3RoaXMuYS5mbShlKSsiKSI7YnJlYWs7Y2FzZSAyMDpuPSIoPz0iK3RoaXMuYS5mbShlKSsiKSI7YnJlYWs7Y2FzZSAyMTpuPSIoPyEiK3RoaXMuYS5mbShlKSsiKSI7YnJlYWs7Y2FzZSAyMjpuPSIoPzw9Iit0aGlzLmEuZm0oZSkrIikiO2JyZWFrO2Nhc2UgMjM6bj0iKD88ISIrdGhpcy5hLmZtKGUpKyIpIjticmVhaztjYXNlIDI0Om49Iig/PiIrdGhpcy5hLmZtKGUpKyIpIn1yZXR1cm4gbn0sbC5iPTAsRihaZywiUmVnRXgvVG9rZW4vUGFyZW5Ub2tlbiIsODIyKSxEKDUyMSwxMTcsezM6MSwxMTc6MSw1MjE6MX0sa3J0KSxsLmJtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5mbT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lPT0xMj8iXFwiK3RoaXMuYTpOYm4odGhpcy5iKX0sbC5hPTAsRihaZywiUmVnRXgvVG9rZW4vU3RyaW5nVG9rZW4iLDUyMSksRCg0NjUsMTE3LG43LGQ5KSxsLiRsPWZ1bmN0aW9uKGUpe0UyKHRoaXMsZSl9LGwuYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHUoencodGhpcy5hLGUpLDExNyl9LGwuZW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hP3RoaXMuYS5hLmMubGVuZ3RoOjB9LGwuZm09ZnVuY3Rpb24oZSl7dmFyIG4scixzLG8saDtpZih0aGlzLmU9PTEpe2lmKHRoaXMuYS5hLmMubGVuZ3RoPT0yKW49dSh6dyh0aGlzLmEsMCksMTE3KSxyPXUoencodGhpcy5hLDEpLDExNyksci5lPT0zJiZyLmFtKDApPT1uP289bi5mbShlKSsiKyI6ci5lPT05JiZyLmFtKDApPT1uP289bi5mbShlKSsiKz8iOm89bi5mbShlKSsoIiIrci5mbShlKSk7ZWxzZXtmb3IoaD1uZXcgQWcscz0wO3M8dGhpcy5hLmEuYy5sZW5ndGg7cysrKWdvKGgsdSh6dyh0aGlzLmEscyksMTE3KS5mbShlKSk7bz1oLmF9cmV0dXJuIG99aWYodGhpcy5hLmEuYy5sZW5ndGg9PTImJnUoencodGhpcy5hLDEpLDExNykuZT09NylvPXUoencodGhpcy5hLDApLDExNykuZm0oZSkrIj8iO2Vsc2UgaWYodGhpcy5hLmEuYy5sZW5ndGg9PTImJnUoencodGhpcy5hLDApLDExNykuZT09NylvPXUoencodGhpcy5hLDEpLDExNykuZm0oZSkrIj8/IjtlbHNle2ZvcihoPW5ldyBBZyxnbyhoLHUoencodGhpcy5hLDApLDExNykuZm0oZSkpLHM9MTtzPHRoaXMuYS5hLmMubGVuZ3RoO3MrKyloLmErPSJ8IixnbyhoLHUoencodGhpcy5hLHMpLDExNykuZm0oZSkpO289aC5hfXJldHVybiBvfSxGKFpnLCJSZWdFeC9Ub2tlbi9VbmlvblRva2VuIiw0NjUpLEQoNTE4LDEsezU5MjoxfSxiTSksbC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYn0sRih4Z2UsIlhNTFR5cGVVdGlsL1BhdHRlcm5NYXRjaGVySW1wbCIsNTE4KSxEKDE2MjIsMTM4MSx7fSxqQik7dmFyIGV4ZTtGKHhnZSwiWE1MVHlwZVZhbGlkYXRvciIsMTYyMiksRCgyNjQsMSxyMCxlMiksbC5KYz1mdW5jdGlvbihlKXt2YSh0aGlzLGUpfSxsLktjPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYi10aGlzLmEpKnRoaXMuYzwwP0liOm5ldyBqcCh0aGlzKX0sbC5hPTAsbC5iPTAsbC5jPTA7dmFyIEliO0YoWjh0LCJFeGNsdXNpdmVSYW5nZSIsMjY0KSxEKDEwNjgsMSxuMCx6SiksbC5SYj1mdW5jdGlvbihlKXt1KGUsMTkpLGZRZSgpfSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gclhlKCl9LGwuVWI9ZnVuY3Rpb24oKXtyZXR1cm4gaVhlKCl9LGwuV2I9ZnVuY3Rpb24oZSl7dShlLDE5KSxnUWUoKX0sbC5PYj1mdW5jdGlvbigpe3JldHVybiExfSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuVGI9ZnVuY3Rpb24oKXtyZXR1cm4tMX0sbC5WYj1mdW5jdGlvbigpe3JldHVybi0xfSxsLlFiPWZ1bmN0aW9uKCl7dGhyb3cgaXQobmV3IFNnKFRnZSkpfSxGKFo4dCwiRXhjbHVzaXZlUmFuZ2UvMSIsMTA2OCksRCgyNTQsMSxuMCxqcCksbC5SYj1mdW5jdGlvbihlKXt1KGUsMTkpLGRRZSgpfSxsLk5iPWZ1bmN0aW9uKGUpe2JhKHRoaXMsZSl9LGwuUGI9ZnVuY3Rpb24oKXtyZXR1cm4gZmxuKHRoaXMpfSxsLlViPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbih0aGlzKX0sbC5XYj1mdW5jdGlvbihlKXt1KGUsMTkpLHBRZSgpfSxsLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5jPDA/dGhpcy5hPj10aGlzLmMuYjp0aGlzLmE8PXRoaXMuYy5ifSxsLlNiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj4wfSxsLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sbC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmItMX0sbC5RYj1mdW5jdGlvbigpe3Rocm93IGl0KG5ldyBTZyhUZ2UpKX0sbC5hPTAsbC5iPTAsRihaOHQsIkV4Y2x1c2l2ZVJhbmdlL1JhbmdlSXRlcmF0b3IiLDI1NCk7dmFyIHhoPUE4KEZILCJDIiksQ3I9QTgoclMsIkkiKSxwbD1BOChiNiwiWiIpLE9iPUE4KGlTLCJKIiksR3U9QTgodFMsIkIiKSxhYT1BOChlUywiRCIpLGEzPUE4KG5TLCJGIiksZzU9QTgoc1MsIlMiKSxFNm49S2koIm9yZy5lY2xpcHNlLmVsay5jb3JlLmxhYmVscyIsIklMYWJlbE1hbmFnZXIiKSxQTHQ9S2koUmEsIkRpYWdub3N0aWNDaGFpbiIpLEZMdD1LaShaMGUsIlJlc291cmNlU2V0IiksTkx0PUYoUmEsIkludm9jYXRpb25UYXJnZXRFeGNlcHRpb24iLG51bGwpLG54ZT0oQVIoKSxnYW4pLHJ4ZT1yeGU9cjBuO3VjbihuS2UpLEZjbigicGVybVByb3BzIixbW1tZSCxLSF0sW1hILCJnZWNrbzFfOCJdXSxbW1lILEtIXSxbWEgsImllMTAiXV0sW1tZSCxLSF0sW1hILCJpZTgiXV0sW1tZSCxLSF0sW1hILCJpZTkiXV0sW1tZSCxLSF0sW1hILCJzYWZhcmkiXV1dKSxyeGUobnVsbCwiZWxrIixudWxsKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdHlwZW9mIGIwPCJ1Ij9iMDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMzpbZnVuY3Rpb24oZixwLHcpe2Z1bmN0aW9uIG0oSSxCKXtpZighKEkgaW5zdGFuY2VvZiBCKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBiKEksQil7aWYoIUkpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gQiYmKHR5cGVvZiBCPT0ib2JqZWN0Inx8dHlwZW9mIEI9PSJmdW5jdGlvbiIpP0I6SX1mdW5jdGlvbiBFKEksQil7aWYodHlwZW9mIEIhPSJmdW5jdGlvbiImJkIhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgQik7SS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCJiZCLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOkksZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksQiYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoSSxCKTpJLl9fcHJvdG9fXz1CKX12YXIgXz1mKCIuL2Vsay1hcGkuanMiKS5kZWZhdWx0LEE9ZnVuY3Rpb24oSSl7RShCLEkpO2Z1bmN0aW9uIEIoKXt2YXIgTj1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307bSh0aGlzLEIpO3ZhciBSPU9iamVjdC5hc3NpZ24oe30sTiksej0hMTt0cnl7Zi5yZXNvbHZlKCJ3ZWItd29ya2VyIiksej0hMH1jYXRjaHt9aWYoTi53b3JrZXJVcmwpaWYoeil7dmFyIFc9Zigid2ViLXdvcmtlciIpO1Iud29ya2VyRmFjdG9yeT1mdW5jdGlvbihhdCl7cmV0dXJuIG5ldyBXKGF0KX19ZWxzZSBjb25zb2xlLndhcm4oYFdlYiB3b3JrZXIgcmVxdWVzdGVkIGJ1dCAnd2ViLXdvcmtlcicgcGFja2FnZSBub3QgaW5zdGFsbGVkLiAKQ29uc2lkZXIgaW5zdGFsbGluZyB0aGUgcGFja2FnZSBvciBwYXNzIHlvdXIgb3duICd3b3JrZXJGYWN0b3J5JyB0byBFTEsncyBjb25zdHJ1Y3Rvci4KLi4uIEZhbGxpbmcgYmFjayB0byBub24td2ViIHdvcmtlciB2ZXJzaW9uLmApO2lmKCFSLndvcmtlckZhY3Rvcnkpe3ZhciBldD1mKCIuL2Vsay13b3JrZXIubWluLmpzIiksc3Q9ZXQuV29ya2VyO1Iud29ya2VyRmFjdG9yeT1mdW5jdGlvbihhdCl7cmV0dXJuIG5ldyBzdChhdCl9fXJldHVybiBiKHRoaXMsKEIuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoQikpLmNhbGwodGhpcyxSKSl9cmV0dXJuIEJ9KF8pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShwLmV4cG9ydHMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHAuZXhwb3J0cz1BLEEuZGVmYXVsdD1BfSx7Ii4vZWxrLWFwaS5qcyI6MSwiLi9lbGstd29ya2VyLm1pbi5qcyI6Miwid2ViLXdvcmtlciI6NH1dLDQ6W2Z1bmN0aW9uKGYscCx3KXtwLmV4cG9ydHM9V29ya2VyfSx7fV19LHt9LFszXSkoMyl9KX0pKEJqdCk7dmFyIG9XZT1CanQuZXhwb3J0cztjb25zdCBjV2U9Rzcob1dlKSxSanQ9bmV3IGNXZTtsZXQgb3c9e307Y29uc3QgdVdlPXt9O2xldCBxNT17fTtjb25zdCBsV2U9YXN5bmMgZnVuY3Rpb24oaSxhLGYscCx3LG0sYil7Y29uc3QgXz1mLnNlbGVjdChgW2lkPSIke2F9Il1gKS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGVzIiksQT1PYmplY3Qua2V5cyhpKTtyZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoQS5tYXAoYXN5bmMgZnVuY3Rpb24oSSl7Y29uc3QgQj1pW0ldO2xldCBOPSJkZWZhdWx0IjtCLmNsYXNzZXMubGVuZ3RoPjAmJihOPUIuY2xhc3Nlcy5qb2luKCIgIikpLE49TisiIGZsb3djaGFydC1sYWJlbCI7Y29uc3QgUj1pbShCLnN0eWxlcyk7bGV0IHo9Qi50ZXh0IT09dm9pZCAwP0IudGV4dDpCLmlkO2NvbnN0IFc9e3dpZHRoOjAsaGVpZ2h0OjB9LGV0PVt7aWQ6Qi5pZCsiLXdlc3QiLGxheW91dE9wdGlvbnM6eyJwb3J0LnNpZGUiOiJXRVNUIn19LHtpZDpCLmlkKyItZWFzdCIsbGF5b3V0T3B0aW9uczp7InBvcnQuc2lkZSI6IkVBU1QifX0se2lkOkIuaWQrIi1zb3V0aCIsbGF5b3V0T3B0aW9uczp7InBvcnQuc2lkZSI6IlNPVVRIIn19LHtpZDpCLmlkKyItbm9ydGgiLGxheW91dE9wdGlvbnM6eyJwb3J0LnNpZGUiOiJOT1JUSCJ9fV07bGV0IHN0PTAsYXQ9IiIsYnQ9e307c3dpdGNoKEIudHlwZSl7Y2FzZSJyb3VuZCI6c3Q9NSxhdD0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOmF0PSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOmF0PSJxdWVzdGlvbiIsYnQ9e3BvcnRDb25zdHJhaW50czoiRklYRURfU0lERSJ9O2JyZWFrO2Nhc2UiaGV4YWdvbiI6YXQ9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjphdD0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJsZWFuX3JpZ2h0IjphdD0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOmF0PSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjphdD0idHJhcGV6b2lkIjticmVhaztjYXNlImludl90cmFwZXpvaWQiOmF0PSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlIm9kZF9yaWdodCI6YXQ9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjphdD0iY2lyY2xlIjticmVhaztjYXNlImVsbGlwc2UiOmF0PSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOmF0PSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOmF0PSJzdWJyb3V0aW5lIjticmVhaztjYXNlImN5bGluZGVyIjphdD0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOmF0PSJyZWN0IjticmVhaztjYXNlImRvdWJsZWNpcmNsZSI6YXQ9ImRvdWJsZWNpcmNsZSI7YnJlYWs7ZGVmYXVsdDphdD0icmVjdCJ9Y29uc3QgbXQ9e2xhYmVsU3R5bGU6Ui5sYWJlbFN0eWxlLHNoYXBlOmF0LGxhYmVsVGV4dDp6LGxhYmVsVHlwZTpCLmxhYmVsVHlwZSxyeDpzdCxyeTpzdCxjbGFzczpOLHN0eWxlOlIuc3R5bGUsaWQ6Qi5pZCxsaW5rOkIubGluayxsaW5rVGFyZ2V0OkIubGlua1RhcmdldCx0b29sdGlwOncuZGIuZ2V0VG9vbHRpcChCLmlkKXx8IiIsZG9tSWQ6dy5kYi5sb29rVXBEb21JZChCLmlkKSxoYXZlQ2FsbGJhY2s6Qi5oYXZlQ2FsbGJhY2ssd2lkdGg6Qi50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLGRpcjpCLmRpcix0eXBlOkIudHlwZSxwcm9wczpCLnByb3BzLHBhZGRpbmc6RmQoKS5mbG93Y2hhcnQucGFkZGluZ307bGV0IHl0LGZ0O2lmKG10LnR5cGUhPT0iZ3JvdXAiKWZ0PWF3YWl0IGtCdChfLG10LEIuZGlyKSx5dD1mdC5ub2RlKCkuZ2V0QkJveCgpO2Vsc2V7cC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2NvbnN0e3NoYXBlU3ZnOnZ0LGJib3g6WH09YXdhaXQgTmQoXyxtdCx2b2lkIDAsITApO1cud2lkdGg9WC53aWR0aCxXLndyYXBwaW5nV2lkdGg9RmQoKS5mbG93Y2hhcnQud3JhcHBpbmdXaWR0aCxXLmhlaWdodD1YLmhlaWdodCxXLmxhYmVsTm9kZT12dC5ub2RlKCksbXQubGFiZWxEYXRhPVd9Y29uc3QgdXQ9e2lkOkIuaWQscG9ydHM6Qi50eXBlPT09ImRpYW1vbmQiP2V0OltdLGxheW91dE9wdGlvbnM6YnQsbGFiZWxUZXh0OnosbGFiZWxEYXRhOlcsZG9tSWQ6dy5kYi5sb29rVXBEb21JZChCLmlkKSx3aWR0aDp5dD09bnVsbD92b2lkIDA6eXQud2lkdGgsaGVpZ2h0Onl0PT1udWxsP3ZvaWQgMDp5dC5oZWlnaHQsdHlwZTpCLnR5cGUsZWw6ZnQscGFyZW50Om0ucGFyZW50QnlJZFtCLmlkXX07cTVbbXQuaWRdPXV0fSkpLGJ9LGpqdD0oaSxhLGYpPT57Y29uc3QgcD17VEI6e2luOntub3J0aDoibm9ydGgifSxvdXQ6e3NvdXRoOiJ3ZXN0Iix3ZXN0OiJlYXN0IixlYXN0OiJzb3V0aCJ9fSxMUjp7aW46e3dlc3Q6Indlc3QifSxvdXQ6e2Vhc3Q6InNvdXRoIixzb3V0aDoibm9ydGgiLG5vcnRoOiJlYXN0In19LFJMOntpbjp7ZWFzdDoiZWFzdCJ9LG91dDp7d2VzdDoibm9ydGgiLG5vcnRoOiJzb3V0aCIsc291dGg6Indlc3QifX0sQlQ6e2luOntzb3V0aDoic291dGgifSxvdXQ6e25vcnRoOiJlYXN0IixlYXN0OiJ3ZXN0Iix3ZXN0OiJub3J0aCJ9fX07cmV0dXJuIHAuVEQ9cC5UQixVdC5pbmZvKCJhYmM4OCIsZixhLGkpLHBbZl1bYV1baV19LCRqdD0oaSxhLGYpPT57aWYoVXQuaW5mbygiZ2V0TmV4dFBvcnQgYWJjODgiLHtub2RlOmksZWRnZURpcmVjdGlvbjphLGdyYXBoRGlyZWN0aW9uOmZ9KSwhb3dbaV0pc3dpdGNoKGYpe2Nhc2UiVEIiOmNhc2UiVEQiOm93W2ldPXtpblBvc2l0aW9uOiJub3J0aCIsb3V0UG9zaXRpb246InNvdXRoIn07YnJlYWs7Y2FzZSJCVCI6b3dbaV09e2luUG9zaXRpb246InNvdXRoIixvdXRQb3NpdGlvbjoibm9ydGgifTticmVhaztjYXNlIlJMIjpvd1tpXT17aW5Qb3NpdGlvbjoiZWFzdCIsb3V0UG9zaXRpb246Indlc3QifTticmVhaztjYXNlIkxSIjpvd1tpXT17aW5Qb3NpdGlvbjoid2VzdCIsb3V0UG9zaXRpb246ImVhc3QifTticmVha31jb25zdCBwPWE9PT0iaW4iP293W2ldLmluUG9zaXRpb246b3dbaV0ub3V0UG9zaXRpb247cmV0dXJuIGE9PT0iaW4iP293W2ldLmluUG9zaXRpb249amp0KG93W2ldLmluUG9zaXRpb24sYSxmKTpvd1tpXS5vdXRQb3NpdGlvbj1qanQob3dbaV0ub3V0UG9zaXRpb24sYSxmKSxwfSxoV2U9KGksYSk9PntsZXQgZj1pLnN0YXJ0LHA9aS5lbmQ7Y29uc3Qgdz1mLG09cCxiPXE1W2ZdLEU9cTVbcF07cmV0dXJuIWJ8fCFFP3tzb3VyY2U6Zix0YXJnZXQ6cH06KGIudHlwZT09PSJkaWFtb25kIiYmKGY9YCR7Zn0tJHskanQoZiwib3V0IixhKX1gKSxFLnR5cGU9PT0iZGlhbW9uZCImJihwPWAke3B9LSR7JGp0KHAsImluIixhKX1gKSx7c291cmNlOmYsdGFyZ2V0OnAsc291cmNlSWQ6dyx0YXJnZXRJZDptfSl9LGZXZT1mdW5jdGlvbihpLGEsZixwKXtVdC5pbmZvKCJhYmM3OCBlZGdlcyA9ICIsaSk7Y29uc3Qgdz1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVscyIpO2xldCBtPXt9LGI9YS5kYi5nZXREaXJlY3Rpb24oKSxFLF87aWYoaS5kZWZhdWx0U3R5bGUhPT12b2lkIDApe2NvbnN0IEE9aW0oaS5kZWZhdWx0U3R5bGUpO0U9QS5zdHlsZSxfPUEubGFiZWxTdHlsZX1yZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKEEpe2NvbnN0IEk9IkwtIitBLnN0YXJ0KyItIitBLmVuZDttW0ldPT09dm9pZCAwPyhtW0ldPTAsVXQuaW5mbygiYWJjNzggbmV3IGVudHJ5IixJLG1bSV0pKToobVtJXSsrLFV0LmluZm8oImFiYzc4IG5ldyBlbnRyeSIsSSxtW0ldKSk7bGV0IEI9SSsiLSIrbVtJXTtVdC5pbmZvKCJhYmM3OCBuZXcgbGluayBpZCB0byBiZSB1c2VkIGlzIixJLEIsbVtJXSk7Y29uc3QgTj0iTFMtIitBLnN0YXJ0LFI9IkxFLSIrQS5lbmQsej17c3R5bGU6IiIsbGFiZWxTdHlsZToiIn07c3dpdGNoKHoubWlubGVuPUEubGVuZ3RofHwxLEEudHlwZT09PSJhcnJvd19vcGVuIj96LmFycm93aGVhZD0ibm9uZSI6ei5hcnJvd2hlYWQ9Im5vcm1hbCIsei5hcnJvd1R5cGVTdGFydD0iYXJyb3dfb3BlbiIsei5hcnJvd1R5cGVFbmQ9ImFycm93X29wZW4iLEEudHlwZSl7Y2FzZSJkb3VibGVfYXJyb3dfY3Jvc3MiOnouYXJyb3dUeXBlU3RhcnQ9ImFycm93X2Nyb3NzIjtjYXNlImFycm93X2Nyb3NzIjp6LmFycm93VHlwZUVuZD0iYXJyb3dfY3Jvc3MiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X3BvaW50Ijp6LmFycm93VHlwZVN0YXJ0PSJhcnJvd19wb2ludCI7Y2FzZSJhcnJvd19wb2ludCI6ei5hcnJvd1R5cGVFbmQ9ImFycm93X3BvaW50IjticmVhaztjYXNlImRvdWJsZV9hcnJvd19jaXJjbGUiOnouYXJyb3dUeXBlU3RhcnQ9ImFycm93X2NpcmNsZSI7Y2FzZSJhcnJvd19jaXJjbGUiOnouYXJyb3dUeXBlRW5kPSJhcnJvd19jaXJjbGUiO2JyZWFrfWxldCBXPSIiLGV0PSIiO3N3aXRjaChBLnN0cm9rZSl7Y2FzZSJub3JtYWwiOlc9ImZpbGw6bm9uZTsiLEUhPT12b2lkIDAmJihXPUUpLF8hPT12b2lkIDAmJihldD1fKSx6LnRoaWNrbmVzcz0ibm9ybWFsIix6LnBhdHRlcm49InNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6ei50aGlja25lc3M9Im5vcm1hbCIsei5wYXR0ZXJuPSJkb3R0ZWQiLHouc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOnoudGhpY2tuZXNzPSJ0aGljayIsei5wYXR0ZXJuPSJzb2xpZCIsei5zdHlsZT0ic3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmU7IjticmVha31pZihBLnN0eWxlIT09dm9pZCAwKXtjb25zdCBmdD1pbShBLnN0eWxlKTtXPWZ0LnN0eWxlLGV0PWZ0LmxhYmVsU3R5bGV9ei5zdHlsZT16LnN0eWxlKz1XLHoubGFiZWxTdHlsZT16LmxhYmVsU3R5bGUrPWV0LEEuaW50ZXJwb2xhdGUhPT12b2lkIDA/ei5jdXJ2ZT1ldyhBLmludGVycG9sYXRlLGNnKTppLmRlZmF1bHRJbnRlcnBvbGF0ZSE9PXZvaWQgMD96LmN1cnZlPWV3KGkuZGVmYXVsdEludGVycG9sYXRlLGNnKTp6LmN1cnZlPWV3KHVXZS5jdXJ2ZSxjZyksQS50ZXh0PT09dm9pZCAwP0Euc3R5bGUhPT12b2lkIDAmJih6LmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIik6KHouYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiLHoubGFiZWxwb3M9ImMiKSx6LmxhYmVsVHlwZT1BLmxhYmVsVHlwZSx6LmxhYmVsPUEudGV4dC5yZXBsYWNlKEtyLmxpbmVCcmVha1JlZ2V4LGAKYCksQS5zdHlsZT09PXZvaWQgMCYmKHouc3R5bGU9ei5zdHlsZXx8InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7Iiksei5sYWJlbFN0eWxlPXoubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpLHouaWQ9Qix6LmNsYXNzZXM9ImZsb3djaGFydC1saW5rICIrTisiICIrUjtjb25zdCBzdD1fQnQodyx6KSx7c291cmNlOmF0LHRhcmdldDpidCxzb3VyY2VJZDptdCx0YXJnZXRJZDp5dH09aFdlKEEsYik7VXQuZGVidWcoImFiYzc4IHNvdXJjZSBhbmQgdGFyZ2V0IixhdCxidCksZi5lZGdlcy5wdXNoKHtpZDoiZSIrQS5zdGFydCtBLmVuZCxzb3VyY2VzOlthdF0sdGFyZ2V0czpbYnRdLHNvdXJjZUlkOm10LHRhcmdldElkOnl0LGxhYmVsRWw6c3QsbGFiZWxzOlt7d2lkdGg6ei53aWR0aCxoZWlnaHQ6ei5oZWlnaHQsb3JnV2lkdGg6ei53aWR0aCxvcmdIZWlnaHQ6ei5oZWlnaHQsdGV4dDp6LmxhYmVsLGxheW91dE9wdGlvbnM6eyJlZGdlTGFiZWxzLmlubGluZSI6InRydWUiLCJlZGdlTGFiZWxzLnBsYWNlbWVudCI6IkNFTlRFUiJ9fV0sZWRnZURhdGE6en0pfSksZn0sZFdlPWZ1bmN0aW9uKGksYSxmLHAsdyl7bGV0IG09IiI7c3dpdGNoKHAmJihtPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLG09bS5yZXBsYWNlKC9cKC9nLCJcXCgiKSxtPW0ucmVwbGFjZSgvXCkvZywiXFwpIikpLGEuYXJyb3dUeXBlU3RhcnQpe2Nhc2UiYXJyb3dfY3Jvc3MiOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdysiXyIrZisiLWNyb3NzU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItcG9pbnRTdGFydCkiKTticmVhaztjYXNlImFycm93X2JhcmIiOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdysiXyIrZisiLWJhcmJTdGFydCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItY2lyY2xlU3RhcnQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItYWdncmVnYXRpb25TdGFydCkiKTticmVhaztjYXNlImV4dGVuc2lvbiI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItZXh0ZW5zaW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6aS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItY29tcG9zaXRpb25TdGFydCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOmkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIrdysiXyIrZisiLWRlcGVuZGVuY3lTdGFydCkiKTticmVhaztjYXNlImxvbGxpcG9wIjppLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK3crIl8iK2YrIi1sb2xsaXBvcFN0YXJ0KSIpO2JyZWFrfXN3aXRjaChhLmFycm93VHlwZUVuZCl7Y2FzZSJhcnJvd19jcm9zcyI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIrdysiXyIrZisiLWNyb3NzRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfcG9pbnQiOmkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK3crIl8iK2YrIi1wb2ludEVuZCkiKTticmVhaztjYXNlImFycm93X2JhcmIiOmkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK3crIl8iK2YrIi1iYXJiRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfY2lyY2xlIjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItY2lyY2xlRW5kKSIpO2JyZWFrO2Nhc2UiYWdncmVnYXRpb24iOmkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK3crIl8iK2YrIi1hZ2dyZWdhdGlvbkVuZCkiKTticmVhaztjYXNlImV4dGVuc2lvbiI6aS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIrdysiXyIrZisiLWV4dGVuc2lvbkVuZCkiKTticmVhaztjYXNlImNvbXBvc2l0aW9uIjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItY29tcG9zaXRpb25FbmQpIik7YnJlYWs7Y2FzZSJkZXBlbmRlbmN5IjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItZGVwZW5kZW5jeUVuZCkiKTticmVhaztjYXNlImxvbGxpcG9wIjppLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIit3KyJfIitmKyItbG9sbGlwb3BFbmQpIik7YnJlYWt9fSxnV2U9ZnVuY3Rpb24oaSxhKXtyZXR1cm4gVXQuaW5mbygiRXh0cmFjdGluZyBjbGFzc2VzIiksYS5kYi5nZXRDbGFzc2VzKCl9LHBXZT1mdW5jdGlvbihpKXtjb25zdCBhPXtwYXJlbnRCeUlkOnt9LGNoaWxkcmVuQnlJZDp7fX0sZj1pLmdldFN1YkdyYXBocygpO3JldHVybiBVdC5pbmZvKCJTdWJncmFwaHMgLSAiLGYpLGYuZm9yRWFjaChmdW5jdGlvbihwKXtwLm5vZGVzLmZvckVhY2goZnVuY3Rpb24odyl7YS5wYXJlbnRCeUlkW3ddPXAuaWQsYS5jaGlsZHJlbkJ5SWRbcC5pZF09PT12b2lkIDAmJihhLmNoaWxkcmVuQnlJZFtwLmlkXT1bXSksYS5jaGlsZHJlbkJ5SWRbcC5pZF0ucHVzaCh3KX0pfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe3AuaWQsYS5wYXJlbnRCeUlkW3AuaWRdIT09dm9pZCAwJiZhLnBhcmVudEJ5SWRbcC5pZF19KSxhfSxiV2U9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9YVdlKGksYSxmKTtpZihwPT09dm9pZCAwfHxwPT09InJvb3QiKXJldHVybnt4OjAseTowfTtjb25zdCB3PXE1W3BdLm9mZnNldDtyZXR1cm57eDp3LnBvc1gseTp3LnBvc1l9fSx3V2U9ZnVuY3Rpb24oaSxhLGYscCx3LG0pe2NvbnN0IGI9YldlKGEuc291cmNlSWQsYS50YXJnZXRJZCx3KSxFPWEuc2VjdGlvbnNbMF0uc3RhcnRQb2ludCxfPWEuc2VjdGlvbnNbMF0uZW5kUG9pbnQsST0oYS5zZWN0aW9uc1swXS5iZW5kUG9pbnRzP2Euc2VjdGlvbnNbMF0uYmVuZFBvaW50czpbXSkubWFwKGJ0PT5bYnQueCtiLngsYnQueStiLnldKSxCPVtbRS54K2IueCxFLnkrYi55XSwuLi5JLFtfLngrYi54LF8ueStiLnldXSx7eDpOLHk6Un09Q0J0KGEuZWRnZURhdGEpLHo9RTUoKS54KE4pLnkoUikuY3VydmUoY2cpLFc9aS5pbnNlcnQoInBhdGgiKS5hdHRyKCJkIix6KEIpKS5hdHRyKCJjbGFzcyIsInBhdGggIitmLmNsYXNzZXMpLmF0dHIoImZpbGwiLCJub25lIiksZXQ9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbCIpLHN0PXlyKGV0Lm5vZGUoKS5hcHBlbmRDaGlsZChhLmxhYmVsRWwpKSxhdD1zdC5ub2RlKCkuZmlyc3RDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtzdC5hdHRyKCJ3aWR0aCIsYXQud2lkdGgpLHN0LmF0dHIoImhlaWdodCIsYXQuaGVpZ2h0KSxldC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHthLmxhYmVsc1swXS54K2IueH0sICR7YS5sYWJlbHNbMF0ueStiLnl9KWApLGRXZShXLGYscC50eXBlLHAuYXJyb3dNYXJrZXJBYnNvbHV0ZSxtKX0semp0PShpLGEpPT57aS5mb3JFYWNoKGY9PntmLmNoaWxkcmVufHwoZi5jaGlsZHJlbj1bXSk7Y29uc3QgcD1hLmNoaWxkcmVuQnlJZFtmLmlkXTtwJiZwLmZvckVhY2godz0+e2YuY2hpbGRyZW4ucHVzaChxNVt3XSl9KSx6anQoZi5jaGlsZHJlbixhKX0pfSx2V2U9YXN5bmMgZnVuY3Rpb24oaSxhLGYscCl7dmFyIHV0O3AuZGIuY2xlYXIoKSxxNT17fSxvdz17fSxwLmRiLnNldEdlbigiZ2VuLTIiKSxwLnBhcnNlci5wYXJzZShpKTtjb25zdCB3PXlyKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJzdHlsZSIsImhlaWdodDo0MDBweCIpLmF0dHIoImlkIiwiY3kiKTtsZXQgbT17aWQ6InJvb3QiLGxheW91dE9wdGlvbnM6eyJlbGsuaGllcmFyY2h5SGFuZGxpbmciOiJJTkNMVURFX0NISUxEUkVOIiwib3JnLmVjbGlwc2UuZWxrLnBhZGRpbmciOiJbdG9wPTEwMCwgbGVmdD0xMDAsIGJvdHRvbT0xMTAsIHJpZ2h0PTExMF0iLCJlbGsubGF5ZXJlZC5zcGFjaW5nLmVkZ2VOb2RlQmV0d2VlbkxheWVycyI6IjMwIiwiZWxrLmRpcmVjdGlvbiI6IkRPV04ifSxjaGlsZHJlbjpbXSxlZGdlczpbXX07c3dpdGNoKFV0LmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0IHVzaW5nIHYzIHJlbmRlcmVyIixSanQpLHAuZGIuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiQlQiOm0ubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJVUCI7YnJlYWs7Y2FzZSJUQiI6bS5sYXlvdXRPcHRpb25zWyJlbGsuZGlyZWN0aW9uIl09IkRPV04iO2JyZWFrO2Nhc2UiTFIiOm0ubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJSSUdIVCI7YnJlYWs7Y2FzZSJSTCI6bS5sYXlvdXRPcHRpb25zWyJlbGsuZGlyZWN0aW9uIl09IkxFRlQiO2JyZWFrfWNvbnN0e3NlY3VyaXR5TGV2ZWw6RSxmbG93Y2hhcnQ6X309RmQoKTtsZXQgQTtFPT09InNhbmRib3giJiYoQT15cigiI2kiK2EpKTtjb25zdCBJPXlyKEU9PT0ic2FuZGJveCI/QS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksQj1FPT09InNhbmRib3giP0Eubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsTj1JLnNlbGVjdChgW2lkPSIke2F9Il1gKTtQTnQoTixbInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxwLnR5cGUsYSk7Y29uc3Qgej1wLmRiLmdldFZlcnRpY2VzKCk7bGV0IFc7Y29uc3QgZXQ9cC5kYi5nZXRTdWJHcmFwaHMoKTtVdC5pbmZvKCJTdWJncmFwaHMgLSAiLGV0KTtmb3IobGV0IHZ0PWV0Lmxlbmd0aC0xO3Z0Pj0wO3Z0LS0pVz1ldFt2dF0scC5kYi5hZGRWZXJ0ZXgoVy5pZCx7dGV4dDpXLnRpdGxlLHR5cGU6Vy5sYWJlbFR5cGV9LCJncm91cCIsdm9pZCAwLFcuY2xhc3NlcyxXLmRpcik7Y29uc3Qgc3Q9Ti5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsInN1YmdyYXBocyIpLGF0PXBXZShwLmRiKTttPWF3YWl0IGxXZSh6LGEsSSxCLHAsYXQsbSk7Y29uc3QgYnQ9Ti5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VzIGVkZ2VQYXRoIiksbXQ9cC5kYi5nZXRFZGdlcygpO209ZldlKG10LHAsbSxOKSxPYmplY3Qua2V5cyhxNSkuZm9yRWFjaCh2dD0+e2NvbnN0IFg9cTVbdnRdO1gucGFyZW50fHxtLmNoaWxkcmVuLnB1c2goWCksYXQuY2hpbGRyZW5CeUlkW3Z0XSE9PXZvaWQgMCYmKFgubGFiZWxzPVt7dGV4dDpYLmxhYmVsVGV4dCxsYXlvdXRPcHRpb25zOnsibm9kZUxhYmVscy5wbGFjZW1lbnQiOiJbSF9DRU5URVIsIFZfVE9QLCBJTlNJREVdIn0sd2lkdGg6WC5sYWJlbERhdGEud2lkdGgsaGVpZ2h0OlgubGFiZWxEYXRhLmhlaWdodH1dLGRlbGV0ZSBYLngsZGVsZXRlIFgueSxkZWxldGUgWC53aWR0aCxkZWxldGUgWC5oZWlnaHQpfSksemp0KG0uY2hpbGRyZW4sYXQpLFV0LmluZm8oImFmdGVyIGxheW91dCIsSlNPTi5zdHJpbmdpZnkobSxudWxsLDIpKTtjb25zdCBmdD1hd2FpdCBSanQubGF5b3V0KG0pO3FqdCgwLDAsZnQuY2hpbGRyZW4sTixzdCxwLDApLFV0LmluZm8oImFmdGVyIGxheW91dCIsZnQpLCh1dD1mdC5lZGdlcyk9PW51bGx8fHV0Lm1hcCh2dD0+e3dXZShidCx2dCx2dC5lZGdlRGF0YSxwLGF0LGEpfSksZlQoe30sTixfLmRpYWdyYW1QYWRkaW5nLF8udXNlTWF4V2lkdGgpLHcucmVtb3ZlKCl9LHFqdD0oaSxhLGYscCx3LG0sYik9PntmLmZvckVhY2goZnVuY3Rpb24oRSl7aWYoRSlpZihxNVtFLmlkXS5vZmZzZXQ9e3Bvc1g6RS54K2kscG9zWTpFLnkrYSx4OmkseTphLGRlcHRoOmIsd2lkdGg6RS53aWR0aCxoZWlnaHQ6RS5oZWlnaHR9LEUudHlwZT09PSJncm91cCIpe2NvbnN0IF89dy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsInN1YmdyYXBoIik7Xy5pbnNlcnQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInN1YmdyYXBoIHN1YmdyYXBoLWx2bC0iK2IlNSsiIG5vZGUiKS5hdHRyKCJ4IixFLngraSkuYXR0cigieSIsRS55K2EpLmF0dHIoIndpZHRoIixFLndpZHRoKS5hdHRyKCJoZWlnaHQiLEUuaGVpZ2h0KTtjb25zdCBBPV8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEk9RmQoKS5mbG93Y2hhcnQuaHRtbExhYmVscz9FLmxhYmVsRGF0YS53aWR0aC8yOjA7QS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtFLmxhYmVsc1swXS54K2krRS54K0l9LCAke0UubGFiZWxzWzBdLnkrYStFLnkrM30pYCksQS5ub2RlKCkuYXBwZW5kQ2hpbGQoRS5sYWJlbERhdGEubGFiZWxOb2RlKSxVdC5pbmZvKCJJZCAoVUdIKT0gIixFLnR5cGUsRS5sYWJlbHMpfWVsc2UgVXQuaW5mbygiSWQgKFVHSCk9ICIsRS5pZCksRS5lbC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtFLngraStFLndpZHRoLzJ9LCAke0UueSthK0UuaGVpZ2h0LzJ9KWApfSksZi5mb3JFYWNoKGZ1bmN0aW9uKEUpe0UmJkUudHlwZT09PSJncm91cCImJnFqdChpK0UueCxhK0UueSxFLmNoaWxkcmVuLHAsdyxtLGIrMSl9KX0sbVdlPXtnZXRDbGFzc2VzOmdXZSxkcmF3OnZXZX0seVdlPWk9PntsZXQgYT0iIjtmb3IobGV0IGY9MDtmPDU7ZisrKWErPWAKICAgICAgLnN1YmdyYXBoLWx2bC0ke2Z9IHsKICAgICAgICBmaWxsOiAke2lbYHN1cmZhY2Uke2Z9YF19OwogICAgICAgIHN0cm9rZTogJHtpW2BzdXJmYWNlUGVlciR7Zn1gXX07CiAgICAgIH0KICAgIGA7cmV0dXJuIGF9LHhXZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7ZGI6bEllLHJlbmRlcmVyOm1XZSxwYXJzZXI6SGR0LHN0eWxlczppPT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBjb2xvcjogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHNwYW4gewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5sYWJlbCB0ZXh0LHNwYW4gewogICAgZmlsbDogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5ub2RlIC5sYWJlbCB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogIC5ub2RlLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAuYXJyb3doZWFkUGF0aCB7CiAgICBmaWxsOiAke2kuYXJyb3doZWFkQ29sb3J9OwogIH0KCiAgLmVkZ2VQYXRoIC5wYXRoIHsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDIuMHB4OwogIH0KCiAgLmZsb3djaGFydC1saW5rIHsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICBmaWxsOiBub25lOwogIH0KCiAgLmVkZ2VMYWJlbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC44NTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAuY2x1c3RlciByZWN0IHsKICAgIGZpbGw6ICR7aS5jbHVzdGVyQmtnfTsKICAgIHN0cm9rZTogJHtpLmNsdXN0ZXJCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAuY2x1c3RlciB0ZXh0IHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CgogIC5jbHVzdGVyIHNwYW4gewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KICAuc3ViZ3JhcGggewogICAgc3Ryb2tlLXdpZHRoOjI7CiAgICByeDozOwogIH0KICAvLyAuc3ViZ3JhcGgtbHZsLTEgewogIC8vICAgZmlsbDojY2NjOwogIC8vICAgLy8gc3Ryb2tlOmJsYWNrOwogIC8vIH0KCiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQoKICAke3lXZShpKX0KYH19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFlndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKE4sUix6LFcpe2Zvcih6PXp8fHt9LFc9Ti5sZW5ndGg7Vy0tO3pbTltXXV09Uik7cmV0dXJuIHp9LGE9WzYsOCwxMCwxMSwxMiwxNCwxNiwxNywyMCwyMV0sZj1bMSw5XSxwPVsxLDEwXSx3PVsxLDExXSxtPVsxLDEyXSxiPVsxLDEzXSxFPVsxLDE2XSxfPVsxLDE3XSxBPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myx0aW1lbGluZTo0LGRvY3VtZW50OjUsRU9GOjYsbGluZTo3LFNQQUNFOjgsc3RhdGVtZW50OjksTkVXTElORToxMCx0aXRsZToxMSxhY2NfdGl0bGU6MTIsYWNjX3RpdGxlX3ZhbHVlOjEzLGFjY19kZXNjcjoxNCxhY2NfZGVzY3JfdmFsdWU6MTUsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxNixzZWN0aW9uOjE3LHBlcmlvZF9zdGF0ZW1lbnQ6MTgsZXZlbnRfc3RhdGVtZW50OjE5LHBlcmlvZDoyMCxldmVudDoyMSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoidGltZWxpbmUiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMToidGl0bGUiLDEyOiJhY2NfdGl0bGUiLDEzOiJhY2NfdGl0bGVfdmFsdWUiLDE0OiJhY2NfZGVzY3IiLDE1OiJhY2NfZGVzY3JfdmFsdWUiLDE2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxNzoic2VjdGlvbiIsMjA6InBlcmlvZCIsMjE6ImV2ZW50In0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDJdLFs3LDFdLFs3LDFdLFs3LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFsxOCwxXSxbMTksMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oUix6LFcsZXQsc3QsYXQsYnQpe3ZhciBtdD1hdC5sZW5ndGgtMTtzd2l0Y2goc3Qpe2Nhc2UgMTpyZXR1cm4gYXRbbXQtMV07Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6YXRbbXQtMV0ucHVzaChhdFttdF0pLHRoaXMuJD1hdFttdC0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1hdFttdF07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4OmV0LmdldENvbW1vbkRiKCkuc2V0RGlhZ3JhbVRpdGxlKGF0W210XS5zdWJzdHIoNikpLHRoaXMuJD1hdFttdF0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9YXRbbXRdLnRyaW0oKSxldC5nZXRDb21tb25EYigpLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD1hdFttdF0udHJpbSgpLGV0LmdldENvbW1vbkRiKCkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDEyOmV0LmFkZFNlY3Rpb24oYXRbbXRdLnN1YnN0cig4KSksdGhpcy4kPWF0W210XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxNTpldC5hZGRUYXNrKGF0W210XSwwLCIiKSx0aGlzLiQ9YXRbbXRdO2JyZWFrO2Nhc2UgMTY6ZXQuYWRkRXZlbnQoYXRbbXRdLnN1YnN0cigyKSksdGhpcy4kPWF0W210XTticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShhLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6ZiwxMjpwLDE0OncsMTY6bSwxNzpiLDE4OjE0LDE5OjE1LDIwOkUsMjE6X30saShhLFsyLDddLHsxOlsyLDFdfSksaShhLFsyLDNdKSx7OToxOCwxMTpmLDEyOnAsMTQ6dywxNjptLDE3OmIsMTg6MTQsMTk6MTUsMjA6RSwyMTpffSxpKGEsWzIsNV0pLGkoYSxbMiw2XSksaShhLFsyLDhdKSx7MTM6WzEsMTldfSx7MTU6WzEsMjBdfSxpKGEsWzIsMTFdKSxpKGEsWzIsMTJdKSxpKGEsWzIsMTNdKSxpKGEsWzIsMTRdKSxpKGEsWzIsMTVdKSxpKGEsWzIsMTZdKSxpKGEsWzIsNF0pLGkoYSxbMiw5XSksaShhLFsyLDEwXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oUix6KXtpZih6LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoUik7ZWxzZXt2YXIgVz1uZXcgRXJyb3IoUik7dGhyb3cgVy5oYXNoPXosV319LHBhcnNlOmZ1bmN0aW9uKFIpe3ZhciB6PXRoaXMsVz1bMF0sZXQ9W10sc3Q9W251bGxdLGF0PVtdLGJ0PXRoaXMudGFibGUsbXQ9IiIseXQ9MCxmdD0wLHV0PTIsdnQ9MSxYPWF0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHB0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksVT17eXk6e319O2Zvcih2YXIgVHQgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxUdCkmJihVLnl5W1R0XT10aGlzLnl5W1R0XSk7cHQuc2V0SW5wdXQoUixVLnl5KSxVLnl5LmxleGVyPXB0LFUueXkucGFyc2VyPXRoaXMsdHlwZW9mIHB0Lnl5bGxvYz4idSImJihwdC55eWxsb2M9e30pO3ZhciBudD1wdC55eWxsb2M7YXQucHVzaChudCk7dmFyIEl0PXB0Lm9wdGlvbnMmJnB0Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBVLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPVUueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gT3QoKXt2YXIgbWU7cmV0dXJuIG1lPWV0LnBvcCgpfHxwdC5sZXgoKXx8dnQsdHlwZW9mIG1lIT0ibnVtYmVyIiYmKG1lIGluc3RhbmNlb2YgQXJyYXkmJihldD1tZSxtZT1ldC5wb3AoKSksbWU9ei5zeW1ib2xzX1ttZV18fG1lKSxtZX1mb3IodmFyIEJ0LEV0LFosQ3QseHQ9e30sSHQsTGUsRnQsZ247Oyl7aWYoRXQ9V1tXLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW0V0XT9aPXRoaXMuZGVmYXVsdEFjdGlvbnNbRXRdOigoQnQ9PT1udWxsfHx0eXBlb2YgQnQ+InUiKSYmKEJ0PU90KCkpLFo9YnRbRXRdJiZidFtFdF1bQnRdKSx0eXBlb2YgWj4idSJ8fCFaLmxlbmd0aHx8IVpbMF0pe3ZhciBTZT0iIjtnbj1bXTtmb3IoSHQgaW4gYnRbRXRdKXRoaXMudGVybWluYWxzX1tIdF0mJkh0PnV0JiZnbi5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bSHRdKyInIik7cHQuc2hvd1Bvc2l0aW9uP1NlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHl0KzEpK2A6CmArcHQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtnbi5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0J0XXx8QnQpKyInIjpTZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh5dCsxKSsiOiBVbmV4cGVjdGVkICIrKEJ0PT12dD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tCdF18fEJ0KSsiJyIpLHRoaXMucGFyc2VFcnJvcihTZSx7dGV4dDpwdC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bQnRdfHxCdCxsaW5lOnB0Lnl5bGluZW5vLGxvYzpudCxleHBlY3RlZDpnbn0pfWlmKFpbMF1pbnN0YW5jZW9mIEFycmF5JiZaLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrRXQrIiwgdG9rZW46ICIrQnQpO3N3aXRjaChaWzBdKXtjYXNlIDE6Vy5wdXNoKEJ0KSxzdC5wdXNoKHB0Lnl5dGV4dCksYXQucHVzaChwdC55eWxsb2MpLFcucHVzaChaWzFdKSxCdD1udWxsLGZ0PXB0Lnl5bGVuZyxtdD1wdC55eXRleHQseXQ9cHQueXlsaW5lbm8sbnQ9cHQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihMZT10aGlzLnByb2R1Y3Rpb25zX1taWzFdXVsxXSx4dC4kPXN0W3N0Lmxlbmd0aC1MZV0seHQuXyQ9e2ZpcnN0X2xpbmU6YXRbYXQubGVuZ3RoLShMZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmF0W2F0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmF0W2F0Lmxlbmd0aC0oTGV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YXRbYXQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxJdCYmKHh0Ll8kLnJhbmdlPVthdFthdC5sZW5ndGgtKExlfHwxKV0ucmFuZ2VbMF0sYXRbYXQubGVuZ3RoLTFdLnJhbmdlWzFdXSksQ3Q9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHh0LFttdCxmdCx5dCxVLnl5LFpbMV0sc3QsYXRdLmNvbmNhdChYKSksdHlwZW9mIEN0PCJ1IilyZXR1cm4gQ3Q7TGUmJihXPVcuc2xpY2UoMCwtMSpMZSoyKSxzdD1zdC5zbGljZSgwLC0xKkxlKSxhdD1hdC5zbGljZSgwLC0xKkxlKSksVy5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1pbMV1dWzBdKSxzdC5wdXNoKHh0LiQpLGF0LnB1c2goeHQuXyQpLEZ0PWJ0W1dbVy5sZW5ndGgtMl1dW1dbVy5sZW5ndGgtMV1dLFcucHVzaChGdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEk9ZnVuY3Rpb24oKXt2YXIgTj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih6LFcpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoeixXKTtlbHNlIHRocm93IG5ldyBFcnJvcih6KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oUix6KXtyZXR1cm4gdGhpcy55eT16fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1SLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBSPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1SLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1SLHRoaXMubWF0Y2hlZCs9Ujt2YXIgej1SLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gej8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksUn0sdW5wdXQ6ZnVuY3Rpb24oUil7dmFyIHo9Ui5sZW5ndGgsVz1SLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Uit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgteiksdGhpcy5vZmZzZXQtPXo7dmFyIGV0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLFcubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1XLmxlbmd0aC0xKTt2YXIgc3Q9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlc/KFcubGVuZ3RoPT09ZXQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStldFtldC5sZW5ndGgtVy5sZW5ndGhdLmxlbmd0aC1XWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4ten0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtzdFswXSxzdFswXSt0aGlzLnl5bGVuZy16XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oUil7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFIpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihSLmxlbmd0aD4yMD8iLi4uIjoiIikrUi5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBSPXRoaXMubWF0Y2g7cmV0dXJuIFIubGVuZ3RoPDIwJiYoUis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtUi5sZW5ndGgpKSwoUi5zdWJzdHIoMCwyMCkrKFIubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBSPXRoaXMucGFzdElucHV0KCksej1uZXcgQXJyYXkoUi5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBSK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCt6KyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihSLHope3ZhciBXLGV0LHN0O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihzdD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihzdC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxldD1SWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxldCYmKHRoaXMueXlsaW5lbm8rPWV0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmV0P2V0W2V0Lmxlbmd0aC0xXS5sZW5ndGgtZXRbZXQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rUlswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1SWzBdLHRoaXMubWF0Y2grPVJbMF0sdGhpcy5tYXRjaGVzPVIsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoUlswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9UlswXSxXPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHosdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksVylyZXR1cm4gVztpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYXQgaW4gc3QpdGhpc1thdF09c3RbYXRdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFIseixXLGV0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHN0PXRoaXMuX2N1cnJlbnRSdWxlcygpLGF0PTA7YXQ8c3QubGVuZ3RoO2F0KyspaWYoVz10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3N0W2F0XV0pLFcmJighenx8V1swXS5sZW5ndGg+elswXS5sZW5ndGgpKXtpZih6PVcsZXQ9YXQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUj10aGlzLnRlc3RfbWF0Y2goVyxzdFthdF0pLFIhPT0hMSlyZXR1cm4gUjtpZih0aGlzLl9iYWNrdHJhY2spe3o9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gej8oUj10aGlzLnRlc3RfbWF0Y2goeixzdFtldF0pLFIhPT0hMT9SOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgej10aGlzLm5leHQoKTtyZXR1cm4genx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oeil7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHopfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciB6PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHo+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih6KXtyZXR1cm4gej10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHp8fDApLHo+PTA/dGhpcy5jb25kaXRpb25TdGFja1t6XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih6KXt0aGlzLmJlZ2luKHopfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHosVyxldCxzdCl7c3dpdGNoKGV0KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMTA7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6cmV0dXJuIDQ7Y2FzZSA2OnJldHVybiAxMTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDEyO2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgOTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTQ7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTE6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTM6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTQ6cmV0dXJuIDE3O2Nhc2UgMTU6cmV0dXJuIDIxO2Nhc2UgMTY6cmV0dXJuIDIwO2Nhc2UgMTc6cmV0dXJuIDY7Y2FzZSAxODpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OnRpbWVsaW5lXGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlY3Rpb25cc1teIzpcbjtdKykvaSwvXig/Ojpcc1teIzpcbjtdKykvaSwvXig/OlteIzpcbjtdKykvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMThdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gTn0oKTtBLmxleGVyPUk7ZnVuY3Rpb24gQigpe3RoaXMueXk9e319cmV0dXJuIEIucHJvdG90eXBlPUEsQS5QYXJzZXI9QixuZXcgQn0oKTtZZ3QucGFyc2VyPVlndDtjb25zdCBrV2U9WWd0O2xldCB5TD0iIixIanQ9MDtjb25zdCBLZ3Q9W10sZUs9W10seEw9W10sVmp0PSgpPT5fT3QsR2p0PWZ1bmN0aW9uKCl7S2d0Lmxlbmd0aD0wLGVLLmxlbmd0aD0wLHlMPSIiLHhMLmxlbmd0aD0wLGhnKCl9LFVqdD1mdW5jdGlvbihpKXt5TD1pLEtndC5wdXNoKGkpfSxXanQ9ZnVuY3Rpb24oKXtyZXR1cm4gS2d0fSxZanQ9ZnVuY3Rpb24oKXtsZXQgaT1aanQoKTtjb25zdCBhPTEwMDtsZXQgZj0wO2Zvcig7IWkmJmY8YTspaT1aanQoKSxmKys7cmV0dXJuIGVLLnB1c2goLi4ueEwpLGVLfSxLanQ9ZnVuY3Rpb24oaSxhLGYpe2NvbnN0IHA9e2lkOkhqdCsrLHNlY3Rpb246eUwsdHlwZTp5TCx0YXNrOmksc2NvcmU6YXx8MCxldmVudHM6Zj9bZl06W119O3hMLnB1c2gocCl9LFhqdD1mdW5jdGlvbihpKXt4TC5maW5kKGY9PmYuaWQ9PT1IanQtMSkuZXZlbnRzLnB1c2goaSl9LFFqdD1mdW5jdGlvbihpKXtjb25zdCBhPXtzZWN0aW9uOnlMLHR5cGU6eUwsZGVzY3JpcHRpb246aSx0YXNrOmksY2xhc3NlczpbXX07ZUsucHVzaChhKX0sWmp0PWZ1bmN0aW9uKCl7Y29uc3QgaT1mdW5jdGlvbihmKXtyZXR1cm4geExbZl0ucHJvY2Vzc2VkfTtsZXQgYT0hMDtmb3IoY29uc3RbZixwXW9mIHhMLmVudHJpZXMoKSlpKGYpLGE9YSYmcC5wcm9jZXNzZWQ7cmV0dXJuIGF9LEVXZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYWRkRXZlbnQ6WGp0LGFkZFNlY3Rpb246VWp0LGFkZFRhc2s6S2p0LGFkZFRhc2tPcmc6UWp0LGNsZWFyOkdqdCxkZWZhdWx0OntjbGVhcjpHanQsZ2V0Q29tbW9uRGI6Vmp0LGFkZFNlY3Rpb246VWp0LGdldFNlY3Rpb25zOldqdCxnZXRUYXNrczpZanQsYWRkVGFzazpLanQsYWRkVGFza09yZzpRanQsYWRkRXZlbnQ6WGp0fSxnZXRDb21tb25EYjpWanQsZ2V0U2VjdGlvbnM6V2p0LGdldFRhc2tzOllqdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxUV2U9MTIsbks9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWkuYXBwZW5kKCJyZWN0Iik7cmV0dXJuIGYuYXR0cigieCIsYS54KSxmLmF0dHIoInkiLGEueSksZi5hdHRyKCJmaWxsIixhLmZpbGwpLGYuYXR0cigic3Ryb2tlIixhLnN0cm9rZSksZi5hdHRyKCJ3aWR0aCIsYS53aWR0aCksZi5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KSxmLmF0dHIoInJ4IixhLnJ4KSxmLmF0dHIoInJ5IixhLnJ5KSxhLmNsYXNzIT09dm9pZCAwJiZmLmF0dHIoImNsYXNzIixhLmNsYXNzKSxmfSxDV2U9ZnVuY3Rpb24oaSxhKXtjb25zdCBwPWkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsYS5jeCkuYXR0cigiY3kiLGEuY3kpLmF0dHIoImNsYXNzIiwiZmFjZSIpLmF0dHIoInIiLDE1KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLHc9aS5hcHBlbmQoImciKTt3LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGEuY3gtMTUvMykuYXR0cigiY3kiLGEuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLHcuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsYS5jeCsxNS8zKS5hdHRyKCJjeSIsYS5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iik7ZnVuY3Rpb24gbShfKXtjb25zdCBBPU9BKCkuc3RhcnRBbmdsZShNYXRoLlBJLzIpLmVuZEFuZ2xlKDMqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtfLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixBKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLmN4KyIsIisoYS5jeSsyKSsiKSIpfWZ1bmN0aW9uIGIoXyl7Y29uc3QgQT1PQSgpLnN0YXJ0QW5nbGUoMypNYXRoLlBJLzIpLmVuZEFuZ2xlKDUqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtfLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixBKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLmN4KyIsIisoYS5jeSs3KSsiKSIpfWZ1bmN0aW9uIEUoXyl7Xy5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIsYS5jeC01KS5hdHRyKCJ5MSIsYS5jeSs3KS5hdHRyKCJ4MiIsYS5jeCs1KS5hdHRyKCJ5MiIsYS5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfXJldHVybiBhLnNjb3JlPjM/bSh3KTphLnNjb3JlPDM/Yih3KTpFKHcpLHB9LF9XZT1mdW5jdGlvbihpLGEpe2NvbnN0IGY9aS5hcHBlbmQoImNpcmNsZSIpO3JldHVybiBmLmF0dHIoImN4IixhLmN4KSxmLmF0dHIoImN5IixhLmN5KSxmLmF0dHIoImNsYXNzIiwiYWN0b3ItIithLnBvcyksZi5hdHRyKCJmaWxsIixhLmZpbGwpLGYuYXR0cigic3Ryb2tlIixhLnN0cm9rZSksZi5hdHRyKCJyIixhLnIpLGYuY2xhc3MhPT12b2lkIDAmJmYuYXR0cigiY2xhc3MiLGYuY2xhc3MpLGEudGl0bGUhPT12b2lkIDAmJmYuYXBwZW5kKCJ0aXRsZSIpLnRleHQoYS50aXRsZSksZn0sSmp0PWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hLnRleHQucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiICIpLHA9aS5hcHBlbmQoInRleHQiKTtwLmF0dHIoIngiLGEueCkscC5hdHRyKCJ5IixhLnkpLHAuYXR0cigiY2xhc3MiLCJsZWdlbmQiKSxwLnN0eWxlKCJ0ZXh0LWFuY2hvciIsYS5hbmNob3IpLGEuY2xhc3MhPT12b2lkIDAmJnAuYXR0cigiY2xhc3MiLGEuY2xhc3MpO2NvbnN0IHc9cC5hcHBlbmQoInRzcGFuIik7cmV0dXJuIHcuYXR0cigieCIsYS54K2EudGV4dE1hcmdpbioyKSx3LnRleHQoZikscH0sU1dlPWZ1bmN0aW9uKGksYSl7ZnVuY3Rpb24gZih3LG0sYixFLF8pe3JldHVybiB3KyIsIittKyIgIisodytiKSsiLCIrbSsiICIrKHcrYikrIiwiKyhtK0UtXykrIiAiKyh3K2ItXyoxLjIpKyIsIisobStFKSsiICIrdysiLCIrKG0rRSl9Y29uc3QgcD1pLmFwcGVuZCgicG9seWdvbiIpO3AuYXR0cigicG9pbnRzIixmKGEueCxhLnksNTAsMjAsNykpLHAuYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGEueT1hLnkrYS5sYWJlbE1hcmdpbixhLng9YS54Ky41KmEubGFiZWxNYXJnaW4sSmp0KGksYSl9LEFXZT1mdW5jdGlvbihpLGEsZil7Y29uc3QgcD1pLmFwcGVuZCgiZyIpLHc9WGd0KCk7dy54PWEueCx3Lnk9YS55LHcuZmlsbD1hLmZpbGwsdy53aWR0aD1mLndpZHRoLHcuaGVpZ2h0PWYuaGVpZ2h0LHcuY2xhc3M9ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIithLm51bSx3LnJ4PTMsdy5yeT0zLG5LKHAsdyksZSR0KGYpKGEudGV4dCxwLHcueCx3Lnksdy53aWR0aCx3LmhlaWdodCx7Y2xhc3M6ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIithLm51bX0sZixhLmNvbG91cil9O2xldCB0JHQ9LTE7Y29uc3QgTFdlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWEueCtmLndpZHRoLzIsdz1pLmFwcGVuZCgiZyIpO3QkdCsrO2NvbnN0IG09MzAwKzUqMzA7dy5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK3QkdCkuYXR0cigieDEiLHApLmF0dHIoInkxIixhLnkpLmF0dHIoIngyIixwKS5hdHRyKCJ5MiIsbSkuYXR0cigiY2xhc3MiLCJ0YXNrLWxpbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNCAyIikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLENXZSh3LHtjeDpwLGN5OjMwMCsoNS1hLnNjb3JlKSozMCxzY29yZTphLnNjb3JlfSk7Y29uc3QgYj1YZ3QoKTtiLng9YS54LGIueT1hLnksYi5maWxsPWEuZmlsbCxiLndpZHRoPWYud2lkdGgsYi5oZWlnaHQ9Zi5oZWlnaHQsYi5jbGFzcz0idGFzayB0YXNrLXR5cGUtIithLm51bSxiLnJ4PTMsYi5yeT0zLG5LKHcsYiksYS54KzE0LGUkdChmKShhLnRhc2ssdyxiLngsYi55LGIud2lkdGgsYi5oZWlnaHQse2NsYXNzOiJ0YXNrIn0sZixhLmNvbG91cil9LE1XZT1mdW5jdGlvbihpLGEpe25LKGkse3g6YS5zdGFydHgseTphLnN0YXJ0eSx3aWR0aDphLnN0b3B4LWEuc3RhcnR4LGhlaWdodDphLnN0b3B5LWEuc3RhcnR5LGZpbGw6YS5maWxsLGNsYXNzOiJyZWN0In0pLmxvd2VyKCl9LERXZT1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6dm9pZCAwLCJ0ZXh0LWFuY2hvciI6InN0YXJ0Iix3aWR0aDoxMDAsaGVpZ2h0OjEwMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowfX0sWGd0PWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfX0sZSR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh3LG0sYixFLF8sQSxJLEIpe2NvbnN0IE49bS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixiK18vMikuYXR0cigieSIsRStBLzIrNSkuc3R5bGUoImZvbnQtY29sb3IiLEIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQodyk7cChOLEkpfWZ1bmN0aW9uIGEodyxtLGIsRSxfLEEsSSxCLE4pe2NvbnN0e3Rhc2tGb250U2l6ZTpSLHRhc2tGb250RmFtaWx5Onp9PUIsVz13LnNwbGl0KC88YnJccypcLz8+L2dpKTtmb3IobGV0IGV0PTA7ZXQ8Vy5sZW5ndGg7ZXQrKyl7Y29uc3Qgc3Q9ZXQqUi1SKihXLmxlbmd0aC0xKS8yLGF0PW0uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitfLzIpLmF0dHIoInkiLEUpLmF0dHIoImZpbGwiLE4pLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLFIpLnN0eWxlKCJmb250LWZhbWlseSIseik7YXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLGIrXy8yKS5hdHRyKCJkeSIsc3QpLnRleHQoV1tldF0pLGF0LmF0dHIoInkiLEUrQS8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscChhdCxJKX19ZnVuY3Rpb24gZih3LG0sYixFLF8sQSxJLEIpe2NvbnN0IE49bS5hcHBlbmQoInN3aXRjaCIpLHo9Ti5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIsXykuYXR0cigiaGVpZ2h0IixBKS5hdHRyKCJwb3NpdGlvbiIsImZpeGVkIikuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7ei5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQodyksYSh3LE4sYixFLF8sQSxJLEIpLHAoeixJKX1mdW5jdGlvbiBwKHcsbSl7Zm9yKGNvbnN0IGIgaW4gbSliIGluIG0mJncuYXR0cihiLG1bYl0pfXJldHVybiBmdW5jdGlvbih3KXtyZXR1cm4gdy50ZXh0UGxhY2VtZW50PT09ImZvIj9mOncudGV4dFBsYWNlbWVudD09PSJvbGQiP2k6YX19KCksSVdlPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDUpLmF0dHIoInJlZlkiLDIpLmF0dHIoIm1hcmtlcldpZHRoIiw2KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwLDAgViA0IEw2LDIgWiIpfTtmdW5jdGlvbiBuJHQoaSxhKXtpLmVhY2goZnVuY3Rpb24oKXt2YXIgZj15cih0aGlzKSxwPWYudGV4dCgpLnNwbGl0KC8oXHMrfDxicj4pLykucmV2ZXJzZSgpLHcsbT1bXSxiPTEuMSxFPWYuYXR0cigieSIpLF89cGFyc2VGbG9hdChmLmF0dHIoImR5IikpLEE9Zi50ZXh0KG51bGwpLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixFKS5hdHRyKCJkeSIsXysiZW0iKTtmb3IobGV0IEk9MDtJPHAubGVuZ3RoO0krKyl3PXBbcC5sZW5ndGgtMS1JXSxtLnB1c2godyksQS50ZXh0KG0uam9pbigiICIpLnRyaW0oKSksKEEubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpPmF8fHc9PT0iPGJyPiIpJiYobS5wb3AoKSxBLnRleHQobS5qb2luKCIgIikudHJpbSgpKSx3PT09Ijxicj4iP209WyIiXTptPVt3XSxBPWYuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLEUpLmF0dHIoImR5IixiKyJlbSIpLnRleHQodykpfSl9Y29uc3QgT1dlPWZ1bmN0aW9uKGksYSxmLHApe2NvbnN0IHc9ZiVUV2UtMSxtPWkuYXBwZW5kKCJnIik7YS5zZWN0aW9uPXcsbS5hdHRyKCJjbGFzcyIsKGEuY2xhc3M/YS5jbGFzcysiICI6IiIpKyJ0aW1lbGluZS1ub2RlICIrKCJzZWN0aW9uLSIrdykpO2NvbnN0IGI9bS5hcHBlbmQoImciKSxFPW0uYXBwZW5kKCJnIiksQT1FLmFwcGVuZCgidGV4dCIpLnRleHQoYS5kZXNjcikuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChuJHQsYS53aWR0aCkubm9kZSgpLmdldEJCb3goKSxJPXAuZm9udFNpemUmJnAuZm9udFNpemUucmVwbGFjZT9wLmZvbnRTaXplLnJlcGxhY2UoInB4IiwiIik6cC5mb250U2l6ZTtyZXR1cm4gYS5oZWlnaHQ9QS5oZWlnaHQrSSoxLjEqLjUrYS5wYWRkaW5nLGEuaGVpZ2h0PU1hdGgubWF4KGEuaGVpZ2h0LGEubWF4SGVpZ2h0KSxhLndpZHRoPWEud2lkdGgrMiphLnBhZGRpbmcsRS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLndpZHRoLzIrIiwgIithLnBhZGRpbmcvMisiKSIpLEZXZShiLGEsdyksYX0sUFdlPWZ1bmN0aW9uKGksYSxmKXtjb25zdCBwPWkuYXBwZW5kKCJnIiksbT1wLmFwcGVuZCgidGV4dCIpLnRleHQoYS5kZXNjcikuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChuJHQsYS53aWR0aCkubm9kZSgpLmdldEJCb3goKSxiPWYuZm9udFNpemUmJmYuZm9udFNpemUucmVwbGFjZT9mLmZvbnRTaXplLnJlcGxhY2UoInB4IiwiIik6Zi5mb250U2l6ZTtyZXR1cm4gcC5yZW1vdmUoKSxtLmhlaWdodCtiKjEuMSouNSthLnBhZGRpbmd9LEZXZT1mdW5jdGlvbihpLGEsZil7aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIithLnR5cGUpLmF0dHIoImQiLGBNMCAke2EuaGVpZ2h0LTV9IHYkey1hLmhlaWdodCsyKjV9IHEwLC01IDUsLTUgaCR7YS53aWR0aC0yKjV9IHE1LDAgNSw1IHYke2EuaGVpZ2h0LTV9IEgwIFpgKSxpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibm9kZS1saW5lLSIrZikuYXR0cigieDEiLDApLmF0dHIoInkxIixhLmhlaWdodCkuYXR0cigieDIiLGEud2lkdGgpLmF0dHIoInkyIixhLmhlaWdodCl9LERUPXtkcmF3UmVjdDpuSyxkcmF3Q2lyY2xlOl9XZSxkcmF3U2VjdGlvbjpBV2UsZHJhd1RleHQ6Smp0LGRyYXdMYWJlbDpTV2UsZHJhd1Rhc2s6TFdlLGRyYXdCYWNrZ3JvdW5kUmVjdDpNV2UsZ2V0VGV4dE9iajpEV2UsZ2V0Tm90ZVJlY3Q6WGd0LGluaXRHcmFwaGljczpJV2UsZHJhd05vZGU6T1dlLGdldFZpcnR1YWxOb2RlSGVpZ2h0OlBXZX0sTldlPWZ1bmN0aW9uKGksYSxmLHApe3ZhciBYLHB0O2NvbnN0IHc9T2UoKSxtPXcubGVmdE1hcmdpbj8/NTA7VXQuZGVidWcoInRpbWVsaW5lIixwLmRiKTtjb25zdCBiPXcuc2VjdXJpdHlMZXZlbDtsZXQgRTtiPT09InNhbmRib3giJiYoRT15cigiI2kiK2EpKTtjb25zdCBBPXlyKGI9PT0ic2FuZGJveCI/RS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KCIjIithKTtBLmFwcGVuZCgiZyIpO2NvbnN0IEk9cC5kYi5nZXRUYXNrcygpLEI9cC5kYi5nZXRDb21tb25EYigpLmdldERpYWdyYW1UaXRsZSgpO1V0LmRlYnVnKCJ0YXNrIixJKSxEVC5pbml0R3JhcGhpY3MoQSk7Y29uc3QgTj1wLmRiLmdldFNlY3Rpb25zKCk7VXQuZGVidWcoInNlY3Rpb25zIixOKTtsZXQgUj0wLHo9MCxXPTAsZXQ9MCxzdD01MCttLGF0PTUwO2V0PTUwO2xldCBidD0wLG10PSEwO04uZm9yRWFjaChmdW5jdGlvbihVKXtjb25zdCBUdD17bnVtYmVyOmJ0LGRlc2NyOlUsc2VjdGlvbjpidCx3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6Un0sbnQ9RFQuZ2V0VmlydHVhbE5vZGVIZWlnaHQoQSxUdCx3KTtVdC5kZWJ1Zygic2VjdGlvbkhlaWdodCBiZWZvcmUgZHJhdyIsbnQpLFI9TWF0aC5tYXgoUixudCsyMCl9KTtsZXQgeXQ9MCxmdD0wO1V0LmRlYnVnKCJ0YXNrcy5sZW5ndGgiLEkubGVuZ3RoKTtmb3IoY29uc3RbVSxUdF1vZiBJLmVudHJpZXMoKSl7Y29uc3QgbnQ9e251bWJlcjpVLGRlc2NyOlR0LHNlY3Rpb246VHQuc2VjdGlvbix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6en0sSXQ9RFQuZ2V0VmlydHVhbE5vZGVIZWlnaHQoQSxudCx3KTtVdC5kZWJ1ZygidGFza0hlaWdodCBiZWZvcmUgZHJhdyIsSXQpLHo9TWF0aC5tYXgoeixJdCsyMCkseXQ9TWF0aC5tYXgoeXQsVHQuZXZlbnRzLmxlbmd0aCk7bGV0IE90PTA7Zm9yKGxldCBCdD0wO0J0PFR0LmV2ZW50cy5sZW5ndGg7QnQrKyl7Y29uc3QgWj17ZGVzY3I6VHQuZXZlbnRzW0J0XSxzZWN0aW9uOlR0LnNlY3Rpb24sbnVtYmVyOlR0LnNlY3Rpb24sd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OjUwfTtPdCs9RFQuZ2V0VmlydHVhbE5vZGVIZWlnaHQoQSxaLHcpfWZ0PU1hdGgubWF4KGZ0LE90KX1VdC5kZWJ1ZygibWF4U2VjdGlvbkhlaWdodCBiZWZvcmUgZHJhdyIsUiksVXQuZGVidWcoIm1heFRhc2tIZWlnaHQgYmVmb3JlIGRyYXciLHopLE4mJk4ubGVuZ3RoPjA/Ti5mb3JFYWNoKFU9Pntjb25zdCBUdD1JLmZpbHRlcihCdD0+QnQuc2VjdGlvbj09PVUpLG50PXtudW1iZXI6YnQsZGVzY3I6VSxzZWN0aW9uOmJ0LHdpZHRoOjIwMCpNYXRoLm1heChUdC5sZW5ndGgsMSktNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6Un07VXQuZGVidWcoInNlY3Rpb25Ob2RlIixudCk7Y29uc3QgSXQ9QS5hcHBlbmQoImciKSxPdD1EVC5kcmF3Tm9kZShJdCxudCxidCx3KTtVdC5kZWJ1Zygic2VjdGlvbk5vZGUgb3V0cHV0IixPdCksSXQuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c3R9LCAke2V0fSlgKSxhdCs9Uis1MCxUdC5sZW5ndGg+MCYmciR0KEEsVHQsYnQsc3QsYXQseix3LHl0LGZ0LFIsITEpLHN0Kz0yMDAqTWF0aC5tYXgoVHQubGVuZ3RoLDEpLGF0PWV0LGJ0Kyt9KToobXQ9ITEsciR0KEEsSSxidCxzdCxhdCx6LHcseXQsZnQsUiwhMCkpO2NvbnN0IHV0PUEubm9kZSgpLmdldEJCb3goKTtVdC5kZWJ1ZygiYm91bmRzIix1dCksQiYmQS5hcHBlbmQoInRleHQiKS50ZXh0KEIpLmF0dHIoIngiLHV0LndpZHRoLzItbSkuYXR0cigiZm9udC1zaXplIiwiNGV4IikuYXR0cigiZm9udC13ZWlnaHQiLCJib2xkIikuYXR0cigieSIsMjApLFc9bXQ/Uit6KzE1MDp6KzEwMCxBLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGluZVdyYXBwZXIiKS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsbSkuYXR0cigieTEiLFcpLmF0dHIoIngyIix1dC53aWR0aCszKm0pLmF0dHIoInkyIixXKS5hdHRyKCJzdHJva2Utd2lkdGgiLDQpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigibWFya2VyLWVuZCIsInVybCgjYXJyb3doZWFkKSIpLGZUKHZvaWQgMCxBLCgoWD13LnRpbWVsaW5lKT09bnVsbD92b2lkIDA6WC5wYWRkaW5nKT8/NTAsKChwdD13LnRpbWVsaW5lKT09bnVsbD92b2lkIDA6cHQudXNlTWF4V2lkdGgpPz8hMSl9LHIkdD1mdW5jdGlvbihpLGEsZixwLHcsbSxiLEUsXyxBLEkpe3ZhciBCO2Zvcihjb25zdCBOIG9mIGEpe2NvbnN0IFI9e2Rlc2NyOk4udGFzayxzZWN0aW9uOmYsbnVtYmVyOmYsd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0Om19O1V0LmRlYnVnKCJ0YXNrTm9kZSIsUik7Y29uc3Qgej1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGFza1dyYXBwZXIiKSxldD1EVC5kcmF3Tm9kZSh6LFIsZixiKS5oZWlnaHQ7aWYoVXQuZGVidWcoInRhc2tIZWlnaHQgYWZ0ZXIgZHJhdyIsZXQpLHouYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7cH0sICR7d30pYCksbT1NYXRoLm1heChtLGV0KSxOLmV2ZW50cyl7Y29uc3Qgc3Q9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVXcmFwcGVyIik7bGV0IGF0PW07dys9MTAwLGF0PWF0K0JXZShpLE4uZXZlbnRzLGYscCx3LGIpLHctPTEwMCxzdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIscCsxOTAvMikuYXR0cigieTEiLHcrbSkuYXR0cigieDIiLHArMTkwLzIpLmF0dHIoInkyIix3K20rKEk/bTpBKStfKzEyMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNSw1Iil9cD1wKzIwMCxJJiYhKChCPWIudGltZWxpbmUpIT1udWxsJiZCLmRpc2FibGVNdWx0aWNvbG9yKSYmZisrfXc9dy0xMH0sQldlPWZ1bmN0aW9uKGksYSxmLHAsdyxtKXtsZXQgYj0wO2NvbnN0IEU9dzt3PXcrMTAwO2Zvcihjb25zdCBfIG9mIGEpe2NvbnN0IEE9e2Rlc2NyOl8sc2VjdGlvbjpmLG51bWJlcjpmLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDo1MH07VXQuZGVidWcoImV2ZW50Tm9kZSIsQSk7Y29uc3QgST1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZXZlbnRXcmFwcGVyIiksTj1EVC5kcmF3Tm9kZShJLEEsZixtKS5oZWlnaHQ7Yj1iK04sSS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtwfSwgJHt3fSlgKSx3PXcrMTArTn1yZXR1cm4gdz1FLGJ9LFJXZT17c2V0Q29uZjooKT0+e30sZHJhdzpOV2V9LGpXZT1pPT57bGV0IGE9IiI7Zm9yKGxldCBmPTA7ZjxpLlRIRU1FX0NPTE9SX0xJTUlUO2YrKylpWyJsaW5lQ29sb3IiK2ZdPWlbImxpbmVDb2xvciIrZl18fGlbImNTY2FsZUludiIrZl0saVQoaVsibGluZUNvbG9yIitmXSk/aVsibGluZUNvbG9yIitmXT1icyhpWyJsaW5lQ29sb3IiK2ZdLDIwKTppWyJsaW5lQ29sb3IiK2ZdPSRzKGlbImxpbmVDb2xvciIrZl0sMjApO2ZvcihsZXQgZj0wO2Y8aS5USEVNRV9DT0xPUl9MSU1JVDtmKyspe2NvbnN0IHA9IiIrKDE3LTMqZik7YSs9YAogICAgLnNlY3Rpb24tJHtmLTF9IHJlY3QsIC5zZWN0aW9uLSR7Zi0xfSBwYXRoLCAuc2VjdGlvbi0ke2YtMX0gY2lyY2xlLCAuc2VjdGlvbi0ke2YtMX0gcGF0aCAgewogICAgICBmaWxsOiAke2lbImNTY2FsZSIrZl19OwogICAgfQogICAgLnNlY3Rpb24tJHtmLTF9IHRleHQgewogICAgIGZpbGw6ICR7aVsiY1NjYWxlTGFiZWwiK2ZdfTsKICAgIH0KICAgIC5ub2RlLWljb24tJHtmLTF9IHsKICAgICAgZm9udC1zaXplOiA0MHB4OwogICAgICBjb2xvcjogJHtpWyJjU2NhbGVMYWJlbCIrZl19OwogICAgfQogICAgLnNlY3Rpb24tZWRnZS0ke2YtMX17CiAgICAgIHN0cm9rZTogJHtpWyJjU2NhbGUiK2ZdfTsKICAgIH0KICAgIC5lZGdlLWRlcHRoLSR7Zi0xfXsKICAgICAgc3Ryb2tlLXdpZHRoOiAke3B9OwogICAgfQogICAgLnNlY3Rpb24tJHtmLTF9IGxpbmUgewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlSW52IitmXX0gOwogICAgICBzdHJva2Utd2lkdGg6IDM7CiAgICB9CgogICAgLmxpbmVXcmFwcGVyIGxpbmV7CiAgICAgIHN0cm9rZTogJHtpWyJjU2NhbGVMYWJlbCIrZl19IDsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gYX0sJFdlPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntkYjpFV2UscmVuZGVyZXI6UldlLHBhcnNlcjprV2Usc3R5bGVzOmk9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7aldlKGkpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSAgewogICAgZmlsbDogJHtpLmdpdDB9OwogIH0KICAuc2VjdGlvbi1yb290IHRleHQgewogICAgZmlsbDogJHtpLmdpdEJyYW5jaExhYmVsMH07CiAgfQogIC5pY29uLWNvbnRhaW5lciB7CiAgICBoZWlnaHQ6MTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQogIC5lZGdlIHsKICAgIGZpbGw6IG5vbmU7CiAgfQogIC5ldmVudFdyYXBwZXIgIHsKICAgZmlsdGVyOiBicmlnaHRuZXNzKDEyMCUpOwogIH0KYH19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIFFndD1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKG10LHl0LGZ0LHV0KXtmb3IoZnQ9ZnR8fHt9LHV0PW10Lmxlbmd0aDt1dC0tO2Z0W210W3V0XV09eXQpO3JldHVybiBmdH0sYT1bMSw0XSxmPVsxLDEzXSxwPVsxLDEyXSx3PVsxLDE1XSxtPVsxLDE2XSxiPVsxLDIwXSxFPVsxLDE5XSxfPVs2LDcsOF0sQT1bMSwyNl0sST1bMSwyNF0sQj1bMSwyNV0sTj1bNiw3LDExXSxSPVsxLDYsMTMsMTUsMTYsMTksMjJdLHo9WzEsMzNdLFc9WzEsMzRdLGV0PVsxLDYsNywxMSwxMywxNSwxNiwxOSwyMl0sc3Q9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1pbmRNYXA6NCxzcGFjZUxpbmVzOjUsU1BBQ0VMSU5FOjYsTkw6NyxNSU5ETUFQOjgsZG9jdW1lbnQ6OSxzdG9wOjEwLEVPRjoxMSxzdGF0ZW1lbnQ6MTIsU1BBQ0VMSVNUOjEzLG5vZGU6MTQsSUNPTjoxNSxDTEFTUzoxNixub2RlV2l0aElkOjE3LG5vZGVXaXRob3V0SWQ6MTgsTk9ERV9EU1RBUlQ6MTksTk9ERV9ERVNDUjoyMCxOT0RFX0RFTkQ6MjEsTk9ERV9JRDoyMiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiU1BBQ0VMSU5FIiw3OiJOTCIsODoiTUlORE1BUCIsMTE6IkVPRiIsMTM6IlNQQUNFTElTVCIsMTU6IklDT04iLDE2OiJDTEFTUyIsMTk6Ik5PREVfRFNUQVJUIiwyMDoiTk9ERV9ERVNDUiIsMjE6Ik5PREVfREVORCIsMjI6Ik5PREVfSUQifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzUsMV0sWzUsMl0sWzUsMl0sWzQsMl0sWzQsM10sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbOSwzXSxbOSwyXSxbMTIsMl0sWzEyLDJdLFsxMiwyXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxNCwxXSxbMTQsMV0sWzE4LDNdLFsxNywxXSxbMTcsNF1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oeXQsZnQsdXQsdnQsWCxwdCxVKXt2YXIgVHQ9cHQubGVuZ3RoLTE7c3dpdGNoKFgpe2Nhc2UgNjpjYXNlIDc6cmV0dXJuIHZ0O2Nhc2UgODp2dC5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6dnQuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgRU9GICIpO2JyZWFrO2Nhc2UgMTE6dnQuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgTkwyICIpO2JyZWFrO2Nhc2UgMTI6dnQuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDE1OnZ0LmdldExvZ2dlcigpLmluZm8oIk5vZGU6ICIscHRbVHRdLmlkKSx2dC5hZGROb2RlKHB0W1R0LTFdLmxlbmd0aCxwdFtUdF0uaWQscHRbVHRdLmRlc2NyLHB0W1R0XS50eXBlKTticmVhaztjYXNlIDE2OnZ0LmdldExvZ2dlcigpLnRyYWNlKCJJY29uOiAiLHB0W1R0XSksdnQuZGVjb3JhdGVOb2RlKHtpY29uOnB0W1R0XX0pO2JyZWFrO2Nhc2UgMTc6Y2FzZSAyMTp2dC5kZWNvcmF0ZU5vZGUoe2NsYXNzOnB0W1R0XX0pO2JyZWFrO2Nhc2UgMTg6dnQuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElTVCIpO2JyZWFrO2Nhc2UgMTk6dnQuZ2V0TG9nZ2VyKCkudHJhY2UoIk5vZGU6ICIscHRbVHRdLmlkKSx2dC5hZGROb2RlKDAscHRbVHRdLmlkLHB0W1R0XS5kZXNjcixwdFtUdF0udHlwZSk7YnJlYWs7Y2FzZSAyMDp2dC5kZWNvcmF0ZU5vZGUoe2ljb246cHRbVHRdfSk7YnJlYWs7Y2FzZSAyNTp2dC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBmb3VuZCAuLiIscHRbVHQtMl0pLHRoaXMuJD17aWQ6cHRbVHQtMV0sZGVzY3I6cHRbVHQtMV0sdHlwZTp2dC5nZXRUeXBlKHB0W1R0LTJdLHB0W1R0XSl9O2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXtpZDpwdFtUdF0sZGVzY3I6cHRbVHRdLHR5cGU6dnQubm9kZVR5cGUuREVGQVVMVH07YnJlYWs7Y2FzZSAyNzp2dC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBmb3VuZCAuLiIscHRbVHQtM10pLHRoaXMuJD17aWQ6cHRbVHQtM10sZGVzY3I6cHRbVHQtMV0sdHlwZTp2dC5nZXRUeXBlKHB0W1R0LTJdLHB0W1R0XSl9O2JyZWFrfX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OlsxLDVdLDg6YX0sezE6WzNdfSx7MTpbMiwxXX0sezQ6Niw2OlsxLDddLDc6WzEsOF0sODphfSx7NjpmLDc6WzEsMTBdLDk6OSwxMjoxMSwxMzpwLDE0OjE0LDE1OncsMTY6bSwxNzoxNywxODoxOCwxOTpiLDIyOkV9LGkoXyxbMiwzXSksezE6WzIsMl19LGkoXyxbMiw0XSksaShfLFsyLDVdKSx7MTpbMiw2XSw2OmYsMTI6MjEsMTM6cCwxNDoxNCwxNTp3LDE2Om0sMTc6MTcsMTg6MTgsMTk6YiwyMjpFfSx7NjpmLDk6MjIsMTI6MTEsMTM6cCwxNDoxNCwxNTp3LDE2Om0sMTc6MTcsMTg6MTgsMTk6YiwyMjpFfSx7NjpBLDc6SSwxMDoyMywxMTpCfSxpKE4sWzIsMjJdLHsxNzoxNywxODoxOCwxNDoyNywxNTpbMSwyOF0sMTY6WzEsMjldLDE5OmIsMjI6RX0pLGkoTixbMiwxOF0pLGkoTixbMiwxOV0pLGkoTixbMiwyMF0pLGkoTixbMiwyMV0pLGkoTixbMiwyM10pLGkoTixbMiwyNF0pLGkoTixbMiwyNl0sezE5OlsxLDMwXX0pLHsyMDpbMSwzMV19LHs2OkEsNzpJLDEwOjMyLDExOkJ9LHsxOlsyLDddLDY6ZiwxMjoyMSwxMzpwLDE0OjE0LDE1OncsMTY6bSwxNzoxNywxODoxOCwxOTpiLDIyOkV9LGkoUixbMiwxNF0sezc6eiwxMTpXfSksaShldCxbMiw4XSksaShldCxbMiw5XSksaShldCxbMiwxMF0pLGkoTixbMiwxNV0pLGkoTixbMiwxNl0pLGkoTixbMiwxN10pLHsyMDpbMSwzNV19LHsyMTpbMSwzNl19LGkoUixbMiwxM10sezc6eiwxMTpXfSksaShldCxbMiwxMV0pLGkoZXQsWzIsMTJdKSx7MjE6WzEsMzddfSxpKE4sWzIsMjVdKSxpKE4sWzIsMjddKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sNjpbMiwyXX0scGFyc2VFcnJvcjpmdW5jdGlvbih5dCxmdCl7aWYoZnQucmVjb3ZlcmFibGUpdGhpcy50cmFjZSh5dCk7ZWxzZXt2YXIgdXQ9bmV3IEVycm9yKHl0KTt0aHJvdyB1dC5oYXNoPWZ0LHV0fX0scGFyc2U6ZnVuY3Rpb24oeXQpe3ZhciBmdD10aGlzLHV0PVswXSx2dD1bXSxYPVtudWxsXSxwdD1bXSxVPXRoaXMudGFibGUsVHQ9IiIsbnQ9MCxJdD0wLE90PTIsQnQ9MSxFdD1wdC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxaPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksQ3Q9e3l5Ont9fTtmb3IodmFyIHh0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseHQpJiYoQ3QueXlbeHRdPXRoaXMueXlbeHRdKTtaLnNldElucHV0KHl0LEN0Lnl5KSxDdC55eS5sZXhlcj1aLEN0Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiBaLnl5bGxvYz4idSImJihaLnl5bGxvYz17fSk7dmFyIEh0PVoueXlsbG9jO3B0LnB1c2goSHQpO3ZhciBMZT1aLm9wdGlvbnMmJloub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEN0Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPUN0Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEZ0KCl7dmFyIFBlO3JldHVybiBQZT12dC5wb3AoKXx8Wi5sZXgoKXx8QnQsdHlwZW9mIFBlIT0ibnVtYmVyIiYmKFBlIGluc3RhbmNlb2YgQXJyYXkmJih2dD1QZSxQZT12dC5wb3AoKSksUGU9ZnQuc3ltYm9sc19bUGVdfHxQZSksUGV9Zm9yKHZhciBnbixTZSxtZSxWZSxZZT17fSxjZSxrZSx6dCxyZTs7KXtpZihTZT11dFt1dC5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tTZV0/bWU9dGhpcy5kZWZhdWx0QWN0aW9uc1tTZV06KChnbj09PW51bGx8fHR5cGVvZiBnbj4idSIpJiYoZ249RnQoKSksbWU9VVtTZV0mJlVbU2VdW2duXSksdHlwZW9mIG1lPiJ1Inx8IW1lLmxlbmd0aHx8IW1lWzBdKXt2YXIgc2U9IiI7cmU9W107Zm9yKGNlIGluIFVbU2VdKXRoaXMudGVybWluYWxzX1tjZV0mJmNlPk90JiZyZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bY2VdKyInIik7Wi5zaG93UG9zaXRpb24/c2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisobnQrMSkrYDoKYCtaLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcmUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tnbl18fGduKSsiJyI6c2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisobnQrMSkrIjogVW5leHBlY3RlZCAiKyhnbj09QnQ/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bZ25dfHxnbikrIiciKSx0aGlzLnBhcnNlRXJyb3Ioc2Use3RleHQ6Wi5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bZ25dfHxnbixsaW5lOloueXlsaW5lbm8sbG9jOkh0LGV4cGVjdGVkOnJlfSl9aWYobWVbMF1pbnN0YW5jZW9mIEFycmF5JiZtZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK1NlKyIsIHRva2VuOiAiK2duKTtzd2l0Y2gobWVbMF0pe2Nhc2UgMTp1dC5wdXNoKGduKSxYLnB1c2goWi55eXRleHQpLHB0LnB1c2goWi55eWxsb2MpLHV0LnB1c2gobWVbMV0pLGduPW51bGwsSXQ9Wi55eWxlbmcsVHQ9Wi55eXRleHQsbnQ9Wi55eWxpbmVubyxIdD1aLnl5bGxvYzticmVhaztjYXNlIDI6aWYoa2U9dGhpcy5wcm9kdWN0aW9uc19bbWVbMV1dWzFdLFllLiQ9WFtYLmxlbmd0aC1rZV0sWWUuXyQ9e2ZpcnN0X2xpbmU6cHRbcHQubGVuZ3RoLShrZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnB0W3B0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnB0W3B0Lmxlbmd0aC0oa2V8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46cHRbcHQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxMZSYmKFllLl8kLnJhbmdlPVtwdFtwdC5sZW5ndGgtKGtlfHwxKV0ucmFuZ2VbMF0scHRbcHQubGVuZ3RoLTFdLnJhbmdlWzFdXSksVmU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KFllLFtUdCxJdCxudCxDdC55eSxtZVsxXSxYLHB0XS5jb25jYXQoRXQpKSx0eXBlb2YgVmU8InUiKXJldHVybiBWZTtrZSYmKHV0PXV0LnNsaWNlKDAsLTEqa2UqMiksWD1YLnNsaWNlKDAsLTEqa2UpLHB0PXB0LnNsaWNlKDAsLTEqa2UpKSx1dC5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW21lWzFdXVswXSksWC5wdXNoKFllLiQpLHB0LnB1c2goWWUuXyQpLHp0PVVbdXRbdXQubGVuZ3RoLTJdXVt1dFt1dC5sZW5ndGgtMV1dLHV0LnB1c2goenQpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxhdD1mdW5jdGlvbigpe3ZhciBtdD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihmdCx1dCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihmdCx1dCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoZnQpfSxzZXRJbnB1dDpmdW5jdGlvbih5dCxmdCl7cmV0dXJuIHRoaXMueXk9ZnR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXl0LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB5dD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9eXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXl0LHRoaXMubWF0Y2hlZCs9eXQ7dmFyIGZ0PXl0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gZnQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHl0fSx1bnB1dDpmdW5jdGlvbih5dCl7dmFyIGZ0PXl0Lmxlbmd0aCx1dD15dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXl0K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1mdCksdGhpcy5vZmZzZXQtPWZ0O3ZhciB2dD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSx1dC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXV0Lmxlbmd0aC0xKTt2YXIgWD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dXQ/KHV0Lmxlbmd0aD09PXZ0Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrdnRbdnQubGVuZ3RoLXV0Lmxlbmd0aF0ubGVuZ3RoLXV0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZnR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bWFswXSxYWzBdK3RoaXMueXlsZW5nLWZ0XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oeXQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh5dCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgeXQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih5dC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3l0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHl0PXRoaXMubWF0Y2g7cmV0dXJuIHl0Lmxlbmd0aDwyMCYmKHl0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC15dC5sZW5ndGgpKSwoeXQuc3Vic3RyKDAsMjApKyh5dC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHl0PXRoaXMucGFzdElucHV0KCksZnQ9bmV3IEFycmF5KHl0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHl0K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtmdCsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oeXQsZnQpe3ZhciB1dCx2dCxYO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihYPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFgueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksdnQ9eXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHZ0JiYodGhpcy55eWxpbmVubys9dnQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46dnQ/dnRbdnQubGVuZ3RoLTFdLmxlbmd0aC12dFt2dC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit5dFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz15dFswXSx0aGlzLm1hdGNoKz15dFswXSx0aGlzLm1hdGNoZXM9eXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoeXRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXl0WzBdLHV0PXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGZ0LHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHV0KXJldHVybiB1dDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgcHQgaW4gWCl0aGlzW3B0XT1YW3B0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciB5dCxmdCx1dCx2dDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBYPXRoaXMuX2N1cnJlbnRSdWxlcygpLHB0PTA7cHQ8WC5sZW5ndGg7cHQrKylpZih1dD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1hbcHRdXSksdXQmJighZnR8fHV0WzBdLmxlbmd0aD5mdFswXS5sZW5ndGgpKXtpZihmdD11dCx2dD1wdCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZih5dD10aGlzLnRlc3RfbWF0Y2godXQsWFtwdF0pLHl0IT09ITEpcmV0dXJuIHl0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZnQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZnQ/KHl0PXRoaXMudGVzdF9tYXRjaChmdCxYW3Z0XSkseXQhPT0hMT95dDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIGZ0PXRoaXMubmV4dCgpO3JldHVybiBmdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oZnQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChmdCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGZ0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIGZ0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oZnQpe3JldHVybiBmdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKGZ0fHwwKSxmdD49MD90aGlzLmNvbmRpdGlvblN0YWNrW2Z0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihmdCl7dGhpcy5iZWdpbihmdCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oZnQsdXQsdnQsWCl7c3dpdGNoKHZ0KXtjYXNlIDA6cmV0dXJuIGZ0LmdldExvZ2dlcigpLnRyYWNlKCJGb3VuZCBjb21tZW50Iix1dC55eXRleHQpLDY7Y2FzZSAxOnJldHVybiA4O2Nhc2UgMjp0aGlzLmJlZ2luKCJDTEFTUyIpO2JyZWFrO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE2O2Nhc2UgNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1OmZ0LmdldExvZ2dlcigpLnRyYWNlKCJCZWdpbiBpY29uIiksdGhpcy5iZWdpbigiSUNPTiIpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gZnQuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElORSIpLDY7Y2FzZSA3OnJldHVybiA3O2Nhc2UgODpyZXR1cm4gMTU7Y2FzZSA5OmZ0LmdldExvZ2dlcigpLnRyYWNlKCJlbmQgaWNvbiIpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEwOnJldHVybiBmdC5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9kaW5nIG5vZGUiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxMTpyZXR1cm4gZnQuZ2V0TG9nZ2VyKCkudHJhY2UoIkNsb3VkIiksdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTI6cmV0dXJuIGZ0LmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb3Npb24gQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDEzOnJldHVybiBmdC5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQgQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE0OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxODpyZXR1cm4gMTM7Y2FzZSAxOTpyZXR1cm4gMjI7Y2FzZSAyMDpyZXR1cm4gMTE7Y2FzZSAyMTp0aGlzLmJlZ2luKCJOU1RSMiIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIk5PREVfREVTQ1IiO2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6ZnQuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0YXJ0aW5nIE5TVFIiKSx0aGlzLmJlZ2luKCJOU1RSIik7YnJlYWs7Y2FzZSAyNTpyZXR1cm4gZnQuZ2V0TG9nZ2VyKCkudHJhY2UoImRlc2NyaXB0aW9uOiIsdXQueXl0ZXh0KSwiTk9ERV9ERVNDUiI7Y2FzZSAyNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGZ0LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCApKSIpLCJOT0RFX0RFTkQiO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxmdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSIpLCJOT0RFX0RFTkQiO2Nhc2UgMjk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxmdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgLi4uIix1dC55eXRleHQpLCJOT0RFX0RFTkQiO2Nhc2UgMzA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxmdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjtjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZnQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGZ0LmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoLSIpLCJOT0RFX0RFTkQiO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxmdC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjtjYXNlIDM0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZnQuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7Y2FzZSAzNTpyZXR1cm4gZnQuZ2V0TG9nZ2VyKCkudHJhY2UoIkxvbmcgZGVzY3JpcHRpb246Iix1dC55eXRleHQpLDIwO2Nhc2UgMzY6cmV0dXJuIGZ0LmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsdXQueXl0ZXh0KSwyMH19LHJ1bGVzOlsvXig/OlxzKiUlLiopL2ksL14oPzptaW5kbWFwXGIpL2ksL14oPzo6OjopL2ksL14oPzouKykvaSwvXig/OlxuKS9pLC9eKD86OjppY29uXCgpL2ksL14oPzpbXHNdK1tcbl0pL2ksL14oPzpbXG5dKykvaSwvXig/OlteXCldKykvaSwvXig/OlwpKS9pLC9eKD86LVwpKS9pLC9eKD86XCgtKS9pLC9eKD86XClcKSkvaSwvXig/OlwpKS9pLC9eKD86XChcKCkvaSwvXig/Olx7XHspL2ksL14oPzpcKCkvaSwvXig/OlxbKS9pLC9eKD86W1xzXSspL2ksL14oPzpbXlwoXFtcblwpXHtcfV0rKS9pLC9eKD86JCkvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0rKS9pLC9eKD86WyJdKS9pLC9eKD86W1wpXVwpKS9pLC9eKD86W1wpXSkvaSwvXig/OltcXV0pL2ksL14oPzpcfVx9KS9pLC9eKD86XCgtKS9pLC9eKD86LVwpKS9pLC9eKD86XChcKCkvaSwvXig/OlwoKS9pLC9eKD86W15cKVxdXChcfV0rKS9pLC9eKD86LisoPyFcKFwoKSkvaV0sY29uZGl0aW9uczp7Q0xBU1M6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sSUNPTjp7cnVsZXM6WzgsOV0saW5jbHVzaXZlOiExfSxOU1RSMjp7cnVsZXM6WzIyLDIzXSxpbmNsdXNpdmU6ITF9LE5TVFI6e3J1bGVzOlsyNSwyNl0saW5jbHVzaXZlOiExfSxOT0RFOntydWxlczpbMjEsMjQsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIG10fSgpO3N0LmxleGVyPWF0O2Z1bmN0aW9uIGJ0KCl7dGhpcy55eT17fX1yZXR1cm4gYnQucHJvdG90eXBlPXN0LHN0LlBhcnNlcj1idCxuZXcgYnR9KCk7UWd0LnBhcnNlcj1RZ3Q7Y29uc3QgeldlPVFndCxyTj1pPT5RMShpLE9lKCkpO2xldCBjdz1bXSxpJHQ9MCxaZ3Q9e307Y29uc3QgcVdlPSgpPT57Y3c9W10saSR0PTAsWmd0PXt9fSxIV2U9ZnVuY3Rpb24oaSl7Zm9yKGxldCBhPWN3Lmxlbmd0aC0xO2E+PTA7YS0tKWlmKGN3W2FdLmxldmVsPGkpcmV0dXJuIGN3W2FdO3JldHVybiBudWxsfSxWV2U9KCk9PmN3Lmxlbmd0aD4wP2N3WzBdOm51bGwsR1dlPShpLGEsZixwKT0+e1V0LmluZm8oImFkZE5vZGUiLGksYSxmLHApO2NvbnN0IHc9T2UoKSxtPXtpZDppJHQrKyxub2RlSWQ6ck4oYSksbGV2ZWw6aSxkZXNjcjpyTihmKSx0eXBlOnAsY2hpbGRyZW46W10sd2lkdGg6T2UoKS5taW5kbWFwLm1heE5vZGVXaWR0aH07c3dpdGNoKG0udHlwZSl7Y2FzZSBVdS5ST1VOREVEX1JFQ1Q6bS5wYWRkaW5nPTIqdy5taW5kbWFwLnBhZGRpbmc7YnJlYWs7Y2FzZSBVdS5SRUNUOm0ucGFkZGluZz0yKncubWluZG1hcC5wYWRkaW5nO2JyZWFrO2Nhc2UgVXUuSEVYQUdPTjptLnBhZGRpbmc9Mip3Lm1pbmRtYXAucGFkZGluZzticmVhaztkZWZhdWx0Om0ucGFkZGluZz13Lm1pbmRtYXAucGFkZGluZ31jb25zdCBiPUhXZShpKTtpZihiKWIuY2hpbGRyZW4ucHVzaChtKSxjdy5wdXNoKG0pO2Vsc2UgaWYoY3cubGVuZ3RoPT09MCljdy5wdXNoKG0pO2Vsc2V7bGV0IEU9bmV3IEVycm9yKCdUaGVyZSBjYW4gYmUgb25seSBvbmUgcm9vdC4gTm8gcGFyZW50IGNvdWxkIGJlIGZvdW5kIGZvciAoIicrbS5kZXNjcisnIiknKTt0aHJvdyBFLmhhc2g9e3RleHQ6ImJyYW5jaCAiK25hbWUsdG9rZW46ImJyYW5jaCAiK25hbWUsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyciY2hlY2tvdXQgJytuYW1lKyciJ119LEV9fSxVdT17REVGQVVMVDowLE5PX0JPUkRFUjowLFJPVU5ERURfUkVDVDoxLFJFQ1Q6MixDSVJDTEU6MyxDTE9VRDo0LEJBTkc6NSxIRVhBR09OOjZ9LFVXZT0oaSxhKT0+e3N3aXRjaChVdC5kZWJ1ZygiSW4gZ2V0IHR5cGUiLGksYSksaSl7Y2FzZSJbIjpyZXR1cm4gVXUuUkVDVDtjYXNlIigiOnJldHVybiBhPT09IikiP1V1LlJPVU5ERURfUkVDVDpVdS5DTE9VRDtjYXNlIigoIjpyZXR1cm4gVXUuQ0lSQ0xFO2Nhc2UiKSI6cmV0dXJuIFV1LkNMT1VEO2Nhc2UiKSkiOnJldHVybiBVdS5CQU5HO2Nhc2Uie3siOnJldHVybiBVdS5IRVhBR09OO2RlZmF1bHQ6cmV0dXJuIFV1LkRFRkFVTFR9fSxzJHQ9KGksYSk9PntaZ3RbaV09YX0sV1dlPWk9Pntjb25zdCBhPWN3W2N3Lmxlbmd0aC0xXTtpJiZpLmljb24mJihhLmljb249ck4oaS5pY29uKSksaSYmaS5jbGFzcyYmKGEuY2xhc3M9ck4oaS5jbGFzcykpfSxJVD1pPT57c3dpdGNoKGkpe2Nhc2UgVXUuREVGQVVMVDpyZXR1cm4ibm8tYm9yZGVyIjtjYXNlIFV1LlJFQ1Q6cmV0dXJuInJlY3QiO2Nhc2UgVXUuUk9VTkRFRF9SRUNUOnJldHVybiJyb3VuZGVkLXJlY3QiO2Nhc2UgVXUuQ0lSQ0xFOnJldHVybiJjaXJjbGUiO2Nhc2UgVXUuQ0xPVUQ6cmV0dXJuImNsb3VkIjtjYXNlIFV1LkJBTkc6cmV0dXJuImJhbmciO2Nhc2UgVXUuSEVYQUdPTjpyZXR1cm4iaGV4Z29uIjtkZWZhdWx0OnJldHVybiJuby1ib3JkZXIifX07bGV0IGEkdDtjb25zdCBZV2U9aT0+e2EkdD1pfSxLV2U9KCk9PlV0LFhXZT1pPT5jd1tpXSxKZ3Q9aT0+Wmd0W2ldLFFXZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYWRkTm9kZTpHV2UsY2xlYXI6cVdlLGRlY29yYXRlTm9kZTpXV2UsZ2V0RWxlbWVudEJ5SWQ6Smd0LGdldExvZ2dlcjpLV2UsZ2V0TWluZG1hcDpWV2UsZ2V0Tm9kZUJ5SWQ6WFdlLGdldFR5cGU6VVdlLG5vZGVUeXBlOlV1LGdldCBwYXJzZUVycm9yKCl7cmV0dXJuIGEkdH0sc2FuaXRpemVUZXh0OnJOLHNldEVsZW1lbnRGb3JJZDpzJHQsc2V0RXJyb3JIYW5kbGVyOllXZSx0eXBlMlN0cjpJVH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxvJHQ9MTIsWldlPWZ1bmN0aW9uKGksYSxmKXtpLmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIiwibm9kZS0iK2EuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK0lUKGEudHlwZSkpLmF0dHIoImQiLGBNMCAke2EuaGVpZ2h0LTV9IHYkey1hLmhlaWdodCsyKjV9IHEwLC01IDUsLTUgaCR7YS53aWR0aC0yKjV9IHE1LDAgNSw1IHYke2EuaGVpZ2h0LTV9IEgwIFpgKSxpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibm9kZS1saW5lLSIrZikuYXR0cigieDEiLDApLmF0dHIoInkxIixhLmhlaWdodCkuYXR0cigieDIiLGEud2lkdGgpLmF0dHIoInkyIixhLmhlaWdodCl9LEpXZT1mdW5jdGlvbihpLGEpe2kuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLCJub2RlLSIrYS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrSVQoYS50eXBlKSkuYXR0cigiaGVpZ2h0IixhLmhlaWdodCkuYXR0cigid2lkdGgiLGEud2lkdGgpfSx0WWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWEud2lkdGgscD1hLmhlaWdodCx3PS4xNSpmLG09LjI1KmYsYj0uMzUqZixFPS4yKmY7aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitJVChhLnR5cGUpKS5hdHRyKCJkIixgTTAgMCBhJHt3fSwke3d9IDAgMCwxICR7ZiouMjV9LCR7LTEqZiouMX0KICAgICAgYSR7Yn0sJHtifSAxIDAsMSAke2YqLjR9LCR7LTEqZiouMX0KICAgICAgYSR7bX0sJHttfSAxIDAsMSAke2YqLjM1fSwkezEqZiouMn0KCiAgICAgIGEke3d9LCR7d30gMSAwLDEgJHtmKi4xNX0sJHsxKnAqLjM1fQogICAgICBhJHtFfSwke0V9IDEgMCwxICR7LTEqZiouMTV9LCR7MSpwKi42NX0KCiAgICAgIGEke219LCR7d30gMSAwLDEgJHstMSpmKi4yNX0sJHtmKi4xNX0KICAgICAgYSR7Yn0sJHtifSAxIDAsMSAkey0xKmYqLjV9LDAKICAgICAgYSR7d30sJHt3fSAxIDAsMSAkey0xKmYqLjI1fSwkey0xKmYqLjE1fQoKICAgICAgYSR7d30sJHt3fSAxIDAsMSAkey0xKmYqLjF9LCR7LTEqcCouMzV9CiAgICAgIGEke0V9LCR7RX0gMSAwLDEgJHtmKi4xfSwkey0xKnAqLjY1fQoKICAgIEgwIFYwIFpgKX0sZVllPWZ1bmN0aW9uKGksYSl7Y29uc3QgZj1hLndpZHRoLHA9YS5oZWlnaHQsdz0uMTUqZjtpLmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIiwibm9kZS0iK2EuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK0lUKGEudHlwZSkpLmF0dHIoImQiLGBNMCAwIGEke3d9LCR7d30gMSAwLDAgJHtmKi4yNX0sJHstMSpwKi4xfQogICAgICBhJHt3fSwke3d9IDEgMCwwICR7ZiouMjV9LDAKICAgICAgYSR7d30sJHt3fSAxIDAsMCAke2YqLjI1fSwwCiAgICAgIGEke3d9LCR7d30gMSAwLDAgJHtmKi4yNX0sJHsxKnAqLjF9CgogICAgICBhJHt3fSwke3d9IDEgMCwwICR7ZiouMTV9LCR7MSpwKi4zM30KICAgICAgYSR7dyouOH0sJHt3Ki44fSAxIDAsMCAwLCR7MSpwKi4zNH0KICAgICAgYSR7d30sJHt3fSAxIDAsMCAkey0xKmYqLjE1fSwkezEqcCouMzN9CgogICAgICBhJHt3fSwke3d9IDEgMCwwICR7LTEqZiouMjV9LCR7cCouMTV9CiAgICAgIGEke3d9LCR7d30gMSAwLDAgJHstMSpmKi4yNX0sMAogICAgICBhJHt3fSwke3d9IDEgMCwwICR7LTEqZiouMjV9LDAKICAgICAgYSR7d30sJHt3fSAxIDAsMCAkey0xKmYqLjI1fSwkey0xKnAqLjE1fQoKICAgICAgYSR7d30sJHt3fSAxIDAsMCAkey0xKmYqLjF9LCR7LTEqcCouMzN9CiAgICAgIGEke3cqLjh9LCR7dyouOH0gMSAwLDAgMCwkey0xKnAqLjM0fQogICAgICBhJHt3fSwke3d9IDEgMCwwICR7ZiouMX0sJHstMSpwKi4zM30KCiAgICBIMCBWMCBaYCl9LG5ZZT1mdW5jdGlvbihpLGEpe2kuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitJVChhLnR5cGUpKS5hdHRyKCJyIixhLndpZHRoLzIpfTtmdW5jdGlvbiByWWUoaSxhLGYscCx3KXtyZXR1cm4gaS5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLHAubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBtLngrIiwiK20ueX0pLmpvaW4oIiAiKSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHcud2lkdGgtYSkvMisiLCAiK2YrIikiKX1jb25zdCBpWWU9ZnVuY3Rpb24oaSxhKXtjb25zdCBmPWEuaGVpZ2h0LHc9Zi80LG09YS53aWR0aC1hLnBhZGRpbmcrMip3LGI9W3t4OncseTowfSx7eDptLXcseTowfSx7eDptLHk6LWYvMn0se3g6bS13LHk6LWZ9LHt4OncseTotZn0se3g6MCx5Oi1mLzJ9XTtyWWUoaSxtLGYsYixhKX0sc1llPWZ1bmN0aW9uKGksYSl7aS5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsIm5vZGUtIithLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitJVChhLnR5cGUpKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KS5hdHRyKCJyeCIsYS5wYWRkaW5nKS5hdHRyKCJyeSIsYS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsYS53aWR0aCl9LGMkdD17ZHJhd05vZGU6ZnVuY3Rpb24oaSxhLGYscCl7Y29uc3Qgdz1wLmh0bWxMYWJlbHMsbT1mJShvJHQtMSksYj1pLmFwcGVuZCgiZyIpO2Euc2VjdGlvbj1tO2xldCBFPSJzZWN0aW9uLSIrbTttPDAmJihFKz0iIHNlY3Rpb24tcm9vdCIpLGIuYXR0cigiY2xhc3MiLChhLmNsYXNzP2EuY2xhc3MrIiAiOiIiKSsibWluZG1hcC1ub2RlICIrRSk7Y29uc3QgXz1iLmFwcGVuZCgiZyIpLEE9Yi5hcHBlbmQoImciKSxJPWEuZGVzY3IucmVwbGFjZSgvKDxiclwvKj4pL2csYApgKTtFWShBLEkse3VzZUh0bWxMYWJlbHM6dyx3aWR0aDphLndpZHRoLGNsYXNzZXM6Im1pbmRtYXAtbm9kZS1sYWJlbCJ9KSx3fHxBLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2NvbnN0IEI9QS5ub2RlKCkuZ2V0QkJveCgpLE49cC5mb250U2l6ZS5yZXBsYWNlP3AuZm9udFNpemUucmVwbGFjZSgicHgiLCIiKTpwLmZvbnRTaXplO2lmKGEuaGVpZ2h0PUIuaGVpZ2h0K04qMS4xKi41K2EucGFkZGluZyxhLndpZHRoPUIud2lkdGgrMiphLnBhZGRpbmcsYS5pY29uKWlmKGEudHlwZT09PVV1LkNJUkNMRSlhLmhlaWdodCs9NTAsYS53aWR0aCs9NTAsYi5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJoZWlnaHQiLCI1MHB4IikuYXR0cigid2lkdGgiLGEud2lkdGgpLmF0dHIoInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyOyIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJpY29uLWNvbnRhaW5lciIpLmFwcGVuZCgiaSIpLmF0dHIoImNsYXNzIiwibm9kZS1pY29uLSIrbSsiICIrYS5pY29uKSxBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2Eud2lkdGgvMisiLCAiKyhhLmhlaWdodC8yLTEuNSphLnBhZGRpbmcpKyIpIik7ZWxzZXthLndpZHRoKz01MDtjb25zdCBSPWEuaGVpZ2h0O2EuaGVpZ2h0PU1hdGgubWF4KFIsNjApO2NvbnN0IHo9TWF0aC5hYnMoYS5oZWlnaHQtUik7Yi5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsIjYwcHgiKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KS5hdHRyKCJzdHlsZSIsInRleHQtYWxpZ246IGNlbnRlcjttYXJnaW4tdG9wOiIrei8yKyJweDsiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwiaWNvbi1jb250YWluZXIiKS5hcHBlbmQoImkiKS5hdHRyKCJjbGFzcyIsIm5vZGUtaWNvbi0iK20rIiAiK2EuaWNvbiksQS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoMjUrYS53aWR0aC8yKSsiLCAiKyh6LzIrYS5wYWRkaW5nLzIpKyIpIil9ZWxzZSBpZih3KXtjb25zdCBSPShhLndpZHRoLUIud2lkdGgpLzIsej0oYS5oZWlnaHQtQi5oZWlnaHQpLzI7QS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitSKyIsICIreisiKSIpfWVsc2V7Y29uc3QgUj1hLndpZHRoLzIsej1hLnBhZGRpbmcvMjtBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1IrIiwgIit6KyIpIil9c3dpdGNoKGEudHlwZSl7Y2FzZSBVdS5ERUZBVUxUOlpXZShfLGEsbSk7YnJlYWs7Y2FzZSBVdS5ST1VOREVEX1JFQ1Q6c1llKF8sYSk7YnJlYWs7Y2FzZSBVdS5SRUNUOkpXZShfLGEpO2JyZWFrO2Nhc2UgVXUuQ0lSQ0xFOl8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS53aWR0aC8yKyIsICIrICthLmhlaWdodC8yKyIpIiksblllKF8sYSk7YnJlYWs7Y2FzZSBVdS5DTE9VRDp0WWUoXyxhKTticmVhaztjYXNlIFV1LkJBTkc6ZVllKF8sYSk7YnJlYWs7Y2FzZSBVdS5IRVhBR09OOmlZZShfLGEpO2JyZWFrfXJldHVybiBzJHQoYS5pZCxiKSxhLmhlaWdodH0scG9zaXRpb25Ob2RlOmZ1bmN0aW9uKGkpe2NvbnN0IGE9Smd0KGkuaWQpLGY9aS54fHwwLHA9aS55fHwwO2EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZisiLCIrcCsiKSIpfSxkcmF3RWRnZTpmdW5jdGlvbihhLGYscCx3LG0pe2NvbnN0IGI9bSUobyR0LTEpLEU9cC54K3Aud2lkdGgvMixfPXAueStwLmhlaWdodC8yLEE9Zi54K2Yud2lkdGgvMixJPWYueStmLmhlaWdodC8yLEI9QT5FP0UrTWF0aC5hYnMoRS1BKS8yOkUtTWF0aC5hYnMoRS1BKS8yLE49ST5fP18rTWF0aC5hYnMoXy1JKS8yOl8tTWF0aC5hYnMoXy1JKS8yLFI9QT5FP01hdGguYWJzKEUtQikvMitFOi1NYXRoLmFicyhFLUIpLzIrRSx6PUk+Xz9NYXRoLmFicyhfLU4pLzIrXzotTWF0aC5hYnMoXy1OKS8yK187YS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixwLmRpcmVjdGlvbj09PSJUQiJ8fHAuZGlyZWN0aW9uPT09IkJUIj9gTSR7RX0sJHtffSBRJHtFfSwke3p9ICR7Qn0sJHtOfSBUJHtBfSwke0l9YDpgTSR7RX0sJHtffSBRJHtSfSwke199ICR7Qn0sJHtOfSBUJHtBfSwke0l9YCkuYXR0cigiY2xhc3MiLCJlZGdlIHNlY3Rpb24tZWRnZS0iK2IrIiBlZGdlLWRlcHRoLSIrdyl9fTt2YXIgdSR0PXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxhKXsoZnVuY3Rpb24oZixwKXtpLmV4cG9ydHM9cCgpfSkoYjAsZnVuY3Rpb24oKXtmdW5jdGlvbiBmKHkpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIGY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oZyl7cmV0dXJuIHR5cGVvZiBnfTpmdW5jdGlvbihnKXtyZXR1cm4gZyYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGd9LGYoeSl9ZnVuY3Rpb24gcCh5LGcpe2lmKCEoeSBpbnN0YW5jZW9mIGcpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHcoeSxnKXtmb3IodmFyIHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIFQ9Z1t4XTtULmVudW1lcmFibGU9VC5lbnVtZXJhYmxlfHwhMSxULmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gVCYmKFQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LFQua2V5LFQpfX1mdW5jdGlvbiBtKHksZyx4KXtyZXR1cm4gZyYmdyh5LnByb3RvdHlwZSxnKSx4JiZ3KHkseCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkseX1mdW5jdGlvbiBiKHksZyx4KXtyZXR1cm4gZyBpbiB5P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LGcse3ZhbHVlOngsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp5W2ddPXgseX1mdW5jdGlvbiBFKHksZyl7cmV0dXJuIF8oeSl8fEEoeSxnKXx8SSh5LGcpfHxOKCl9ZnVuY3Rpb24gXyh5KXtpZihBcnJheS5pc0FycmF5KHkpKXJldHVybiB5fWZ1bmN0aW9uIEEoeSxnKXt2YXIgeD15PT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDwidSImJnlbU3ltYm9sLml0ZXJhdG9yXXx8eVsiQEBpdGVyYXRvciJdO2lmKHghPW51bGwpe3ZhciBUPVtdLEw9ITAsTz0hMSxQLCQ7dHJ5e2Zvcih4PXguY2FsbCh5KTshKEw9KFA9eC5uZXh0KCkpLmRvbmUpJiYoVC5wdXNoKFAudmFsdWUpLCEoZyYmVC5sZW5ndGg9PT1nKSk7TD0hMCk7fWNhdGNoKHEpe089ITAsJD1xfWZpbmFsbHl7dHJ5eyFMJiZ4LnJldHVybiE9bnVsbCYmeC5yZXR1cm4oKX1maW5hbGx5e2lmKE8pdGhyb3cgJH19cmV0dXJuIFR9fWZ1bmN0aW9uIEkoeSxnKXtpZih5KXtpZih0eXBlb2YgeT09InN0cmluZyIpcmV0dXJuIEIoeSxnKTt2YXIgeD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeSkuc2xpY2UoOCwtMSk7aWYoeD09PSJPYmplY3QiJiZ5LmNvbnN0cnVjdG9yJiYoeD15LmNvbnN0cnVjdG9yLm5hbWUpLHg9PT0iTWFwInx8eD09PSJTZXQiKXJldHVybiBBcnJheS5mcm9tKHkpO2lmKHg9PT0iQXJndW1lbnRzInx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoeCkpcmV0dXJuIEIoeSxnKX19ZnVuY3Rpb24gQih5LGcpeyhnPT1udWxsfHxnPnkubGVuZ3RoKSYmKGc9eS5sZW5ndGgpO2Zvcih2YXIgeD0wLFQ9bmV3IEFycmF5KGcpO3g8Zzt4KyspVFt4XT15W3hdO3JldHVybiBUfWZ1bmN0aW9uIE4oKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9dmFyIFI9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3csej1SP1IubmF2aWdhdG9yOm51bGw7UiYmUi5kb2N1bWVudDt2YXIgVz1mKCIiKSxldD1mKHt9KSxzdD1mKGZ1bmN0aW9uKCl7fSksYXQ9dHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8idW5kZWZpbmVkIjpmKEhUTUxFbGVtZW50KSxidD1mdW5jdGlvbihnKXtyZXR1cm4gZyYmZy5pbnN0YW5jZVN0cmluZyYmeXQoZy5pbnN0YW5jZVN0cmluZyk/Zy5pbnN0YW5jZVN0cmluZygpOm51bGx9LG10PWZ1bmN0aW9uKGcpe3JldHVybiBnIT1udWxsJiZmKGcpPT1XfSx5dD1mdW5jdGlvbihnKXtyZXR1cm4gZyE9bnVsbCYmZihnKT09PXN0fSxmdD1mdW5jdGlvbihnKXtyZXR1cm4hVHQoZykmJihBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZyk6ZyE9bnVsbCYmZyBpbnN0YW5jZW9mIEFycmF5KX0sdXQ9ZnVuY3Rpb24oZyl7cmV0dXJuIGchPW51bGwmJmYoZyk9PT1ldCYmIWZ0KGcpJiZnLmNvbnN0cnVjdG9yPT09T2JqZWN0fSx2dD1mdW5jdGlvbihnKXtyZXR1cm4gZyE9bnVsbCYmZihnKT09PWV0fSxYPWZ1bmN0aW9uKGcpe3JldHVybiBnIT1udWxsJiZmKGcpPT09ZigxKSYmIWlzTmFOKGcpfSxwdD1mdW5jdGlvbihnKXtyZXR1cm4gWChnKSYmTWF0aC5mbG9vcihnKT09PWd9LFU9ZnVuY3Rpb24oZyl7aWYoYXQhPT0idW5kZWZpbmVkIilyZXR1cm4gZyE9bnVsbCYmZyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSxUdD1mdW5jdGlvbihnKXtyZXR1cm4gbnQoZyl8fEl0KGcpfSxudD1mdW5jdGlvbihnKXtyZXR1cm4gYnQoZyk9PT0iY29sbGVjdGlvbiImJmcuX3ByaXZhdGUuc2luZ2xlfSxJdD1mdW5jdGlvbihnKXtyZXR1cm4gYnQoZyk9PT0iY29sbGVjdGlvbiImJiFnLl9wcml2YXRlLnNpbmdsZX0sT3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIGJ0KGcpPT09ImNvcmUifSxCdD1mdW5jdGlvbihnKXtyZXR1cm4gYnQoZyk9PT0ic3R5bGVzaGVldCJ9LEV0PWZ1bmN0aW9uKGcpe3JldHVybiBidChnKT09PSJldmVudCJ9LFo9ZnVuY3Rpb24oZyl7cmV0dXJuIGc9PW51bGw/ITA6ISEoZz09PSIifHxnLm1hdGNoKC9eXHMrJC8pKX0sQ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHR5cGVvZiBIVE1MRWxlbWVudD4idSI/ITE6ZyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSx4dD1mdW5jdGlvbihnKXtyZXR1cm4gdXQoZykmJlgoZy54MSkmJlgoZy54MikmJlgoZy55MSkmJlgoZy55Mil9LEh0PWZ1bmN0aW9uKGcpe3JldHVybiB2dChnKSYmeXQoZy50aGVuKX0sTGU9ZnVuY3Rpb24oKXtyZXR1cm4geiYmei51c2VyQWdlbnQubWF0Y2goL21zaWV8dHJpZGVudHxlZGdlL2kpfSxGdD1mdW5jdGlvbihnLHgpe3h8fCh4PWZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTEpcmV0dXJuIGFyZ3VtZW50c1swXTtpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4idW5kZWZpbmVkIjtmb3IodmFyIE89W10sUD0wO1A8YXJndW1lbnRzLmxlbmd0aDtQKyspTy5wdXNoKGFyZ3VtZW50c1tQXSk7cmV0dXJuIE8uam9pbigiJCIpfSk7dmFyIFQ9ZnVuY3Rpb24gTCgpe3ZhciBPPXRoaXMsUD1hcmd1bWVudHMsJCxxPXguYXBwbHkoTyxQKSxTPUwuY2FjaGU7cmV0dXJuKCQ9U1txXSl8fCgkPVNbcV09Zy5hcHBseShPLFApKSwkfTtyZXR1cm4gVC5jYWNoZT17fSxUfSxnbj1GdChmdW5jdGlvbih5KXtyZXR1cm4geS5yZXBsYWNlKC8oW0EtWl0pL2csZnVuY3Rpb24oZyl7cmV0dXJuIi0iK2cudG9Mb3dlckNhc2UoKX0pfSksU2U9RnQoZnVuY3Rpb24oeSl7cmV0dXJuIHkucmVwbGFjZSgvKC1cdykvZyxmdW5jdGlvbihnKXtyZXR1cm4gZ1sxXS50b1VwcGVyQ2FzZSgpfSl9KSxtZT1GdChmdW5jdGlvbih5LGcpe3JldHVybiB5K2dbMF0udG9VcHBlckNhc2UoKStnLnN1YnN0cmluZygxKX0sZnVuY3Rpb24oeSxnKXtyZXR1cm4geSsiJCIrZ30pLFZlPWZ1bmN0aW9uKGcpe3JldHVybiBaKGcpP2c6Zy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStnLnN1YnN0cmluZygxKX0sWWU9Iig/OlstK10/KD86KD86XFxkK3xcXGQqXFwuXFxkKykoPzpbRWVdWystXT9cXGQrKT8pKSIsY2U9InJnYlthXT9cXCgoIitZZSsiWyVdPylcXHMqLFxccyooIitZZSsiWyVdPylcXHMqLFxccyooIitZZSsiWyVdPykoPzpcXHMqLFxccyooIitZZSsiKSk/XFwpIixrZT0icmdiW2FdP1xcKCg/OiIrWWUrIlslXT8pXFxzKixcXHMqKD86IitZZSsiWyVdPylcXHMqLFxccyooPzoiK1llKyJbJV0/KSg/OlxccyosXFxzKig/OiIrWWUrIikpP1xcKSIsenQ9ImhzbFthXT9cXCgoIitZZSsiKVxccyosXFxzKigiK1llKyJbJV0pXFxzKixcXHMqKCIrWWUrIlslXSkoPzpcXHMqLFxccyooIitZZSsiKSk/XFwpIixyZT0iaHNsW2FdP1xcKCg/OiIrWWUrIilcXHMqLFxccyooPzoiK1llKyJbJV0pXFxzKixcXHMqKD86IitZZSsiWyVdKSg/OlxccyosXFxzKig/OiIrWWUrIikpP1xcKSIsc2U9IlxcI1swLTlhLWZBLUZdezN9IixQZT0iXFwjWzAtOWEtZkEtRl17Nn0iLHRlPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGc8eD8tMTpnPng/MTowfSxNZT1mdW5jdGlvbihnLHgpe3JldHVybi0xKnRlKGcseCl9LGRlPU9iamVjdC5hc3NpZ24hPW51bGw/T2JqZWN0LmFzc2lnbi5iaW5kKE9iamVjdCk6ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPWFyZ3VtZW50cyx4PTE7eDxnLmxlbmd0aDt4Kyspe3ZhciBUPWdbeF07aWYoVCE9bnVsbClmb3IodmFyIEw9T2JqZWN0LmtleXMoVCksTz0wO088TC5sZW5ndGg7TysrKXt2YXIgUD1MW09dO3lbUF09VFtQXX19cmV0dXJuIHl9LG9uPWZ1bmN0aW9uKGcpe2lmKCEoIShnLmxlbmd0aD09PTR8fGcubGVuZ3RoPT09Nyl8fGdbMF0hPT0iIyIpKXt2YXIgeD1nLmxlbmd0aD09PTQsVCxMLE8sUD0xNjtyZXR1cm4geD8oVD1wYXJzZUludChnWzFdK2dbMV0sUCksTD1wYXJzZUludChnWzJdK2dbMl0sUCksTz1wYXJzZUludChnWzNdK2dbM10sUCkpOihUPXBhcnNlSW50KGdbMV0rZ1syXSxQKSxMPXBhcnNlSW50KGdbM10rZ1s0XSxQKSxPPXBhcnNlSW50KGdbNV0rZ1s2XSxQKSksW1QsTCxPXX19LG5pPWZ1bmN0aW9uKGcpe3ZhciB4LFQsTCxPLFAsJCxxLFM7ZnVuY3Rpb24gVihodCxkdCxMdCl7cmV0dXJuIEx0PDAmJihMdCs9MSksTHQ+MSYmKEx0LT0xKSxMdDwxLzY/aHQrKGR0LWh0KSo2Kkx0Okx0PDEvMj9kdDpMdDwyLzM/aHQrKGR0LWh0KSooMi8zLUx0KSo2Omh0fXZhciBZPW5ldyBSZWdFeHAoIl4iK3p0KyIkIikuZXhlYyhnKTtpZihZKXtpZihUPXBhcnNlSW50KFlbMV0pLFQ8MD9UPSgzNjAtIC0xKlQlMzYwKSUzNjA6VD4zNjAmJihUPVQlMzYwKSxULz0zNjAsTD1wYXJzZUZsb2F0KFlbMl0pLEw8MHx8TD4xMDB8fChMPUwvMTAwLE89cGFyc2VGbG9hdChZWzNdKSxPPDB8fE8+MTAwKXx8KE89Ty8xMDAsUD1ZWzRdLFAhPT12b2lkIDAmJihQPXBhcnNlRmxvYXQoUCksUDwwfHxQPjEpKSlyZXR1cm47aWYoTD09PTApJD1xPVM9TWF0aC5yb3VuZChPKjI1NSk7ZWxzZXt2YXIgcnQ9TzwuNT9PKigxK0wpOk8rTC1PKkwsb3Q9MipPLXJ0OyQ9TWF0aC5yb3VuZCgyNTUqVihvdCxydCxUKzEvMykpLHE9TWF0aC5yb3VuZCgyNTUqVihvdCxydCxUKSksUz1NYXRoLnJvdW5kKDI1NSpWKG90LHJ0LFQtMS8zKSl9eD1bJCxxLFMsUF19cmV0dXJuIHh9LEtzPWZ1bmN0aW9uKGcpe3ZhciB4LFQ9bmV3IFJlZ0V4cCgiXiIrY2UrIiQiKS5leGVjKGcpO2lmKFQpe3g9W107Zm9yKHZhciBMPVtdLE89MTtPPD0zO08rKyl7dmFyIFA9VFtPXTtpZihQW1AubGVuZ3RoLTFdPT09IiUiJiYoTFtPXT0hMCksUD1wYXJzZUZsb2F0KFApLExbT10mJihQPVAvMTAwKjI1NSksUDwwfHxQPjI1NSlyZXR1cm47eC5wdXNoKE1hdGguZmxvb3IoUCkpfXZhciAkPUxbMV18fExbMl18fExbM10scT1MWzFdJiZMWzJdJiZMWzNdO2lmKCQmJiFxKXJldHVybjt2YXIgUz1UWzRdO2lmKFMhPT12b2lkIDApe2lmKFM9cGFyc2VGbG9hdChTKSxTPDB8fFM+MSlyZXR1cm47eC5wdXNoKFMpfX1yZXR1cm4geH0sd3M9ZnVuY3Rpb24oZyl7cmV0dXJuIFhpW2cudG9Mb3dlckNhc2UoKV19LGZvPWZ1bmN0aW9uKGcpe3JldHVybihmdChnKT9nOm51bGwpfHx3cyhnKXx8b24oZyl8fEtzKGcpfHxuaShnKX0sWGk9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JleTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19LEVyPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1nLm1hcCxUPWcua2V5cyxMPVQubGVuZ3RoLE89MDtPPEw7TysrKXt2YXIgUD1UW09dO2lmKHV0KFApKXRocm93IEVycm9yKCJUcmllZCB0byBzZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO088VC5sZW5ndGgtMT8oeFtQXT09bnVsbCYmKHhbUF09e30pLHg9eFtQXSk6eFtQXT1nLnZhbHVlfX0sWG49ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PWcubWFwLFQ9Zy5rZXlzLEw9VC5sZW5ndGgsTz0wO088TDtPKyspe3ZhciBQPVRbT107aWYodXQoUCkpdGhyb3cgRXJyb3IoIlRyaWVkIHRvIGdldCBtYXAgd2l0aCBvYmplY3Qga2V5Iik7aWYoeD14W1BdLHg9PW51bGwpcmV0dXJuIHh9cmV0dXJuIHh9O2Z1bmN0aW9uIGRpKHkpe3ZhciBnPXR5cGVvZiB5O3JldHVybiB5IT1udWxsJiYoZz09Im9iamVjdCJ8fGc9PSJmdW5jdGlvbiIpfXZhciBFZT1kaSxLbj10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGIwPCJ1Ij9iMDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTtmdW5jdGlvbiBIZSh5LGcpe3JldHVybiBnPXtleHBvcnRzOnt9fSx5KGcsZy5leHBvcnRzKSxnLmV4cG9ydHN9dmFyIFRpPXR5cGVvZiBLbj09Im9iamVjdCImJktuJiZLbi5PYmplY3Q9PT1PYmplY3QmJktuLHBuPVRpLEVzPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYscWE9cG58fEVzfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLE1hPXFhLEdzPWZ1bmN0aW9uKCl7cmV0dXJuIE1hLkRhdGUubm93KCl9LFBvPUdzLHZzPS9ccy87ZnVuY3Rpb24gcnUoeSl7Zm9yKHZhciBnPXkubGVuZ3RoO2ctLSYmdnMudGVzdCh5LmNoYXJBdChnKSk7KTtyZXR1cm4gZ312YXIgenM9cnUsRHU9L15ccysvO2Z1bmN0aW9uIHBtKHkpe3JldHVybiB5JiZ5LnNsaWNlKDAsenMoeSkrMSkucmVwbGFjZShEdSwiIil9dmFyIHV3PXBtLFd1PU1hLlN5bWJvbCx0aD1XdSxGYT1PYmplY3QucHJvdG90eXBlLE1sPUZhLmhhc093blByb3BlcnR5LGhhPUZhLnRvU3RyaW5nLGJjPXRoP3RoLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBDYyh5KXt2YXIgZz1NbC5jYWxsKHksYmMpLHg9eVtiY107dHJ5e3lbYmNdPXZvaWQgMDt2YXIgVD0hMH1jYXRjaHt9dmFyIEw9aGEuY2FsbCh5KTtyZXR1cm4gVCYmKGc/eVtiY109eDpkZWxldGUgeVtiY10pLEx9dmFyIHBhPUNjLERhPU9iamVjdC5wcm90b3R5cGUsSGE9RGEudG9TdHJpbmc7ZnVuY3Rpb24gRGwoeSl7cmV0dXJuIEhhLmNhbGwoeSl9dmFyIF9jPURsLGx3PSJbb2JqZWN0IE51bGxdIixlaD0iW29iamVjdCBVbmRlZmluZWRdIixlZD10aD90aC50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gamQoeSl7cmV0dXJuIHk9PW51bGw/eT09PXZvaWQgMD9laDpsdzplZCYmZWQgaW4gT2JqZWN0KHkpP3BhKHkpOl9jKHkpfXZhciBuZD1qZDtmdW5jdGlvbiAkZCh5KXtyZXR1cm4geSE9bnVsbCYmdHlwZW9mIHk9PSJvYmplY3QifXZhciBBMD0kZCxCaT0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiBjbih5KXtyZXR1cm4gdHlwZW9mIHk9PSJzeW1ib2wifHxBMCh5KSYmbmQoeSk9PUJpfXZhciBrcj1jbixFaT0wLzAsSm89L15bLStdMHhbMC05YS1mXSskL2ksd2M9L14wYlswMV0rJC9pLHJmPS9eMG9bMC03XSskL2ksT2M9cGFyc2VJbnQ7ZnVuY3Rpb24gc2YoeSl7aWYodHlwZW9mIHk9PSJudW1iZXIiKXJldHVybiB5O2lmKGtyKHkpKXJldHVybiBFaTtpZihFZSh5KSl7dmFyIGc9dHlwZW9mIHkudmFsdWVPZj09ImZ1bmN0aW9uIj95LnZhbHVlT2YoKTp5O3k9RWUoZyk/ZysiIjpnfWlmKHR5cGVvZiB5IT0ic3RyaW5nIilyZXR1cm4geT09PTA/eToreTt5PXV3KHkpO3ZhciB4PXdjLnRlc3QoeSk7cmV0dXJuIHh8fHJmLnRlc3QoeSk/T2MoeS5zbGljZSgyKSx4PzI6OCk6Sm8udGVzdCh5KT9FaToreX12YXIgYWY9c2YsUWk9IkV4cGVjdGVkIGEgZnVuY3Rpb24iLFRzPU1hdGgubWF4LGthPU1hdGgubWluO2Z1bmN0aW9uIHhpKHksZyx4KXt2YXIgVCxMLE8sUCwkLHEsUz0wLFY9ITEsWT0hMSxydD0hMDtpZih0eXBlb2YgeSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKFFpKTtnPWFmKGcpfHwwLEVlKHgpJiYoVj0hIXgubGVhZGluZyxZPSJtYXhXYWl0ImluIHgsTz1ZP1RzKGFmKHgubWF4V2FpdCl8fDAsZyk6TyxydD0idHJhaWxpbmciaW4geD8hIXgudHJhaWxpbmc6cnQpO2Z1bmN0aW9uIG90KFl0KXt2YXIgcXQ9VCxuZT1MO3JldHVybiBUPUw9dm9pZCAwLFM9WXQsUD15LmFwcGx5KG5lLHF0KSxQfWZ1bmN0aW9uIGh0KFl0KXtyZXR1cm4gUz1ZdCwkPXNldFRpbWVvdXQoa3QsZyksVj9vdChZdCk6UH1mdW5jdGlvbiBkdChZdCl7dmFyIHF0PVl0LXEsbmU9WXQtUyxHdD1nLXF0O3JldHVybiBZP2thKEd0LE8tbmUpOkd0fWZ1bmN0aW9uIEx0KFl0KXt2YXIgcXQ9WXQtcSxuZT1ZdC1TO3JldHVybiBxPT09dm9pZCAwfHxxdD49Z3x8cXQ8MHx8WSYmbmU+PU99ZnVuY3Rpb24ga3QoKXt2YXIgWXQ9UG8oKTtpZihMdChZdCkpcmV0dXJuIER0KFl0KTskPXNldFRpbWVvdXQoa3QsZHQoWXQpKX1mdW5jdGlvbiBEdChZdCl7cmV0dXJuICQ9dm9pZCAwLHJ0JiZUP290KFl0KTooVD1MPXZvaWQgMCxQKX1mdW5jdGlvbiBQdCgpeyQhPT12b2lkIDAmJmNsZWFyVGltZW91dCgkKSxTPTAsVD1xPUw9JD12b2lkIDB9ZnVuY3Rpb24gJHQoKXtyZXR1cm4gJD09PXZvaWQgMD9QOkR0KFBvKCkpfWZ1bmN0aW9uIFp0KCl7dmFyIFl0PVBvKCkscXQ9THQoWXQpO2lmKFQ9YXJndW1lbnRzLEw9dGhpcyxxPVl0LHF0KXtpZigkPT09dm9pZCAwKXJldHVybiBodChxKTtpZihZKXJldHVybiBjbGVhclRpbWVvdXQoJCksJD1zZXRUaW1lb3V0KGt0LGcpLG90KHEpfXJldHVybiAkPT09dm9pZCAwJiYoJD1zZXRUaW1lb3V0KGt0LGcpKSxQfXJldHVybiBadC5jYW5jZWw9UHQsWnQuZmx1c2g9JHQsWnR9dmFyIFljPXhpLENlPVI/Ui5wZXJmb3JtYW5jZTpudWxsLHZwPUNlJiZDZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gQ2Uubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LEJlPWZ1bmN0aW9uKCl7aWYoUil7aWYoUi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHkpe1IucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHkpfTtpZihSLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oeSl7Ui5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoeSl9O2lmKFIud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih5KXtSLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSh5KX07aWYoUi5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oeSl7Ui5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSh5KX19cmV0dXJuIGZ1bmN0aW9uKHkpe3kmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXt5KHZwKCkpfSwxZTMvNjApfX0oKSxCZj1mdW5jdGlvbihnKXtyZXR1cm4gQmUoZyl9LHlnPXZwLGJtPTkyNjEsRWs9NjU1OTksRTM9NTM4MSxJbD1mdW5jdGlvbihnKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmJtLFQ9eCxMO0w9Zy5uZXh0KCksIUwuZG9uZTspVD1UKkVrK0wudmFsdWV8MDtyZXR1cm4gVH0sTDA9ZnVuY3Rpb24oZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmJtO3JldHVybiB4KkVrK2d8MH0saHc9ZnVuY3Rpb24oZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOkUzO3JldHVybih4PDw1KSt4K2d8MH0sSDU9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gZyoyMDk3MTUyK3h9LEhiPWZ1bmN0aW9uKGcpe3JldHVybiBnWzBdKjIwOTcxNTIrZ1sxXX0sVjU9ZnVuY3Rpb24oZyx4KXtyZXR1cm5bTDAoZ1swXSx4WzBdKSxodyhnWzFdLHhbMV0pXX0sZjE9ZnVuY3Rpb24oZyx4KXt2YXIgVD17dmFsdWU6MCxkb25lOiExfSxMPTAsTz1nLmxlbmd0aCxQPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIEw8Tz9ULnZhbHVlPWdbTCsrXTpULmRvbmU9ITAsVH19O3JldHVybiBJbChQLHgpfSxyZD1mdW5jdGlvbihnLHgpe3ZhciBUPXt2YWx1ZTowLGRvbmU6ITF9LEw9MCxPPWcubGVuZ3RoLFA9e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gTDxPP1QudmFsdWU9Zy5jaGFyQ29kZUF0KEwrKyk6VC5kb25lPSEwLFR9fTtyZXR1cm4gSWwoUCx4KX0saWQ9ZnVuY3Rpb24oKXtyZXR1cm4gRzUoYXJndW1lbnRzKX0sRzU9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4LFQ9MDtUPGcubGVuZ3RoO1QrKyl7dmFyIEw9Z1tUXTtUPT09MD94PXJkKEwpOng9cmQoTCx4KX1yZXR1cm4geH0sZnc9ITAsVTU9Y29uc29sZS53YXJuIT1udWxsLG1wPWNvbnNvbGUudHJhY2UhPW51bGwsVzU9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ8fDkwMDcxOTkyNTQ3NDA5OTEsVDM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sd209ZnVuY3Rpb24oKXtyZXR1cm4hMX0seGc9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sRUw9ZnVuY3Rpb24oKXt9LHZsPWZ1bmN0aW9uKGcpe3Rocm93IG5ldyBFcnJvcihnKX0saU49ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMClmdz0hIWc7ZWxzZSByZXR1cm4gZnd9LFNjPWZ1bmN0aW9uKGcpe2lOKCkmJihVNT9jb25zb2xlLndhcm4oZyk6KGNvbnNvbGUubG9nKGcpLG1wJiZjb25zb2xlLnRyYWNlKCkpKX0sY0s9ZnVuY3Rpb24oZyl7cmV0dXJuIGRlKHt9LGcpfSxWYj1mdW5jdGlvbihnKXtyZXR1cm4gZz09bnVsbD9nOmZ0KGcpP2cuc2xpY2UoKTp1dChnKT9jSyhnKTpnfSx1Sz1mdW5jdGlvbihnKXtyZXR1cm4gZy5zbGljZSgpfSxQVD1mdW5jdGlvbihnLHgpe2Zvcih4PWc9IiI7ZysrPDM2O3grPWcqNTEmNTI/KGdeMTU/OF5NYXRoLnJhbmRvbSgpKihnXjIwPzE2OjQpOjQpLnRvU3RyaW5nKDE2KToiLSIpO3JldHVybiB4fSxsSz17fSxzTj1mdW5jdGlvbigpe3JldHVybiBsS30sUmY9ZnVuY3Rpb24oZyl7dmFyIHg9T2JqZWN0LmtleXMoZyk7cmV0dXJuIGZ1bmN0aW9uKFQpe2Zvcih2YXIgTD17fSxPPTA7Tzx4Lmxlbmd0aDtPKyspe3ZhciBQPXhbT10sJD1UPT1udWxsP3ZvaWQgMDpUW1BdO0xbUF09JD09PXZvaWQgMD9nW1BdOiR9cmV0dXJuIEx9fSx2bT1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPWcubGVuZ3RoLTE7TD49MCYmIShnW0xdPT09eCYmKGcuc3BsaWNlKEwsMSksVCkpO0wtLSk7fSxUTD1mdW5jdGlvbihnKXtnLnNwbGljZSgwLGcubGVuZ3RoKX0sYU49ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPHgubGVuZ3RoO1QrKyl7dmFyIEw9eFtUXTtnLnB1c2goTCl9fSx5cD1mdW5jdGlvbihnLHgsVCl7cmV0dXJuIFQmJih4PW1lKFQseCkpLGdbeF19LG1tPWZ1bmN0aW9uKGcseCxULEwpe1QmJih4PW1lKFQseCkpLGdbeF09TH0saEs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KCl7cCh0aGlzLHkpLHRoaXMuX29iaj17fX1yZXR1cm4gbSh5LFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMuX29ialt4XT1ULHRoaXN9fSx7a2V5OiJkZWxldGUiLHZhbHVlOmZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLl9vYmpbeF09dm9pZCAwLHRoaXN9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9vYmo9e319fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLl9vYmpbeF0hPT12b2lkIDB9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLl9vYmpbeF19fV0pLHl9KCksR2I9dHlwZW9mIE1hcDwidSI/TWFwOmhLLGZLPSJ1bmRlZmluZWQiLGRLPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geShnKXtpZihwKHRoaXMseSksdGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zaXplPTAsZyE9bnVsbCl7dmFyIHg7Zy5pbnN0YW5jZVN0cmluZyE9bnVsbCYmZy5pbnN0YW5jZVN0cmluZygpPT09dGhpcy5pbnN0YW5jZVN0cmluZygpP3g9Zy50b0FycmF5KCk6eD1nO2Zvcih2YXIgVD0wO1Q8eC5sZW5ndGg7VCsrKXRoaXMuYWRkKHhbVF0pfX1yZXR1cm4gbSh5LFt7a2V5OiJpbnN0YW5jZVN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4ic2V0In19LHtrZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oeCl7dmFyIFQ9dGhpcy5fb2JqO1RbeF0hPT0xJiYoVFt4XT0xLHRoaXMuc2l6ZSsrKX19LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oeCl7dmFyIFQ9dGhpcy5fb2JqO1RbeF09PT0xJiYoVFt4XT0wLHRoaXMuc2l6ZS0tKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX29iaj1PYmplY3QuY3JlYXRlKG51bGwpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5fb2JqW3hdPT09MX19LHtrZXk6InRvQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHg9dGhpcztyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fb2JqKS5maWx0ZXIoZnVuY3Rpb24oVCl7cmV0dXJuIHguaGFzKFQpfSl9fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbih4LFQpe3JldHVybiB0aGlzLnRvQXJyYXkoKS5mb3JFYWNoKHgsVCl9fV0pLHl9KCksWTU9KHR5cGVvZiBTZXQ+InUiPyJ1bmRlZmluZWQiOmYoU2V0KSkhPT1mSz9TZXQ6ZEssRlQ9ZnVuY3Rpb24oZyx4KXt2YXIgVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITA7aWYoZz09PXZvaWQgMHx8eD09PXZvaWQgMHx8IU90KGcpKXt2bCgiQW4gZWxlbWVudCBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSBhbmQgcGFyYW1ldGVycyBzZXQiKTtyZXR1cm59dmFyIEw9eC5ncm91cDtpZihMPT1udWxsJiYoeC5kYXRhJiZ4LmRhdGEuc291cmNlIT1udWxsJiZ4LmRhdGEudGFyZ2V0IT1udWxsP0w9ImVkZ2VzIjpMPSJub2RlcyIpLEwhPT0ibm9kZXMiJiZMIT09ImVkZ2VzIil7dmwoIkFuIGVsZW1lbnQgbXVzdCBiZSBvZiB0eXBlIGBub2Rlc2Agb3IgYGVkZ2VzYDsgeW91IHNwZWNpZmllZCBgIitMKyJgIik7cmV0dXJufXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzO3ZhciBPPXRoaXMuX3ByaXZhdGU9e2N5Omcsc2luZ2xlOiEwLGRhdGE6eC5kYXRhfHx7fSxwb3NpdGlvbjp4LnBvc2l0aW9ufHx7eDowLHk6MH0sYXV0b1dpZHRoOnZvaWQgMCxhdXRvSGVpZ2h0OnZvaWQgMCxhdXRvUGFkZGluZzp2b2lkIDAsY29tcG91bmRCb3VuZHNDbGVhbjohMSxsaXN0ZW5lcnM6W10sZ3JvdXA6TCxzdHlsZTp7fSxyc3R5bGU6e30sc3R5bGVDeHRzOltdLHN0eWxlS2V5czp7fSxyZW1vdmVkOiEwLHNlbGVjdGVkOiEheC5zZWxlY3RlZCxzZWxlY3RhYmxlOnguc2VsZWN0YWJsZT09PXZvaWQgMD8hMDohIXguc2VsZWN0YWJsZSxsb2NrZWQ6ISF4LmxvY2tlZCxncmFiYmVkOiExLGdyYWJiYWJsZTp4LmdyYWJiYWJsZT09PXZvaWQgMD8hMDohIXguZ3JhYmJhYmxlLHBhbm5hYmxlOngucGFubmFibGU9PT12b2lkIDA/TD09PSJlZGdlcyI6ISF4LnBhbm5hYmxlLGFjdGl2ZTohMSxjbGFzc2VzOm5ldyBZNSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LHJzY3JhdGNoOnt9LHNjcmF0Y2g6eC5zY3JhdGNofHx7fSxlZGdlczpbXSxjaGlsZHJlbjpbXSxwYXJlbnQ6eC5wYXJlbnQmJngucGFyZW50LmlzTm9kZSgpP3gucGFyZW50Om51bGwsdHJhdmVyc2FsQ2FjaGU6e30sYmFja2dyb3VuZGluZzohMSxiYkNhY2hlOm51bGwsYmJDYWNoZVNoaWZ0Ont4OjAseTowfSxib2R5Qm91bmRzOm51bGwsb3ZlcmxheUJvdW5kczpudWxsLGxhYmVsQm91bmRzOnthbGw6bnVsbCxzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCxtYWluOm51bGx9LGFycm93Qm91bmRzOntzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCwibWlkLXNvdXJjZSI6bnVsbCwibWlkLXRhcmdldCI6bnVsbH19O2lmKE8ucG9zaXRpb24ueD09bnVsbCYmKE8ucG9zaXRpb24ueD0wKSxPLnBvc2l0aW9uLnk9PW51bGwmJihPLnBvc2l0aW9uLnk9MCkseC5yZW5kZXJlZFBvc2l0aW9uKXt2YXIgUD14LnJlbmRlcmVkUG9zaXRpb24sJD1nLnBhbigpLHE9Zy56b29tKCk7Ty5wb3NpdGlvbj17eDooUC54LSQueCkvcSx5OihQLnktJC55KS9xfX12YXIgUz1bXTtmdCh4LmNsYXNzZXMpP1M9eC5jbGFzc2VzOm10KHguY2xhc3NlcykmJihTPXguY2xhc3Nlcy5zcGxpdCgvXHMrLykpO2Zvcih2YXIgVj0wLFk9Uy5sZW5ndGg7VjxZO1YrKyl7dmFyIHJ0PVNbVl07IXJ0fHxydD09PSIifHxPLmNsYXNzZXMuYWRkKHJ0KX10aGlzLmNyZWF0ZUVtaXR0ZXIoKTt2YXIgb3Q9eC5zdHlsZXx8eC5jc3M7b3QmJihTYygiU2V0dGluZyBhIGBzdHlsZWAgYnlwYXNzIGF0IGVsZW1lbnQgY3JlYXRpb24gc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgVHJ5IHRvIHVzZSB0aGUgc3R5bGVzaGVldCBpbnN0ZWFkLiIpLHRoaXMuc3R5bGUob3QpKSwoVD09PXZvaWQgMHx8VCkmJnRoaXMucmVzdG9yZSgpfSxvTj1mdW5jdGlvbihnKXtyZXR1cm4gZz17YmZzOmcuYmZzfHwhZy5kZnMsZGZzOmcuZGZzfHwhZy5iZnN9LGZ1bmN0aW9uKFQsTCxPKXt2YXIgUDt1dChUKSYmIVR0KFQpJiYoUD1ULFQ9UC5yb290c3x8UC5yb290LEw9UC52aXNpdCxPPVAuZGlyZWN0ZWQpLE89YXJndW1lbnRzLmxlbmd0aD09PTImJiF5dChMKT9MOk8sTD15dChMKT9MOmZ1bmN0aW9uKCl7fTtmb3IodmFyICQ9dGhpcy5fcHJpdmF0ZS5jeSxxPVQ9bXQoVCk/dGhpcy5maWx0ZXIoVCk6VCxTPVtdLFY9W10sWT17fSxydD17fSxvdD17fSxodD0wLGR0LEx0PXRoaXMuYnlHcm91cCgpLGt0PUx0Lm5vZGVzLER0PUx0LmVkZ2VzLFB0PTA7UHQ8cS5sZW5ndGg7UHQrKyl7dmFyICR0PXFbUHRdLFp0PSR0LmlkKCk7JHQuaXNOb2RlKCkmJihTLnVuc2hpZnQoJHQpLGcuYmZzJiYob3RbWnRdPSEwLFYucHVzaCgkdCkpLHJ0W1p0XT0wKX1mb3IodmFyIFl0PWZ1bmN0aW9uKCl7dmFyIEZlPWcuYmZzP1Muc2hpZnQoKTpTLnBvcCgpLHdlPUZlLmlkKCk7aWYoZy5kZnMpe2lmKG90W3dlXSlyZXR1cm4iY29udGludWUiO290W3dlXT0hMCxWLnB1c2goRmUpfXZhciBibj1ydFt3ZV0semU9WVt3ZV0sR2U9emUhPW51bGw/emUuc291cmNlKCk6bnVsbCxFbj16ZSE9bnVsbD96ZS50YXJnZXQoKTpudWxsLEluPXplPT1udWxsP3ZvaWQgMDpGZS5zYW1lKEdlKT9FblswXTpHZVswXSxZbj12b2lkIDA7aWYoWW49TChGZSx6ZSxJbixodCsrLGJuKSxZbj09PSEwKXJldHVybiBkdD1GZSwiYnJlYWsiO2lmKFluPT09ITEpcmV0dXJuImJyZWFrIjtmb3IodmFyIFNuPUZlLmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKGVyKXtyZXR1cm4oIU98fGVyLnNvdXJjZSgpLnNhbWUoRmUpKSYmRHQuaGFzKGVyKX0pLFduPTA7V248U24ubGVuZ3RoO1duKyspe3ZhciBycj1TbltXbl0sd3I9cnIuY29ubmVjdGVkTm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oZXIpe3JldHVybiFlci5zYW1lKEZlKSYma3QuaGFzKGVyKX0pLHVyPXdyLmlkKCk7d3IubGVuZ3RoIT09MCYmIW90W3VyXSYmKHdyPXdyWzBdLFMucHVzaCh3ciksZy5iZnMmJihvdFt1cl09ITAsVi5wdXNoKHdyKSksWVt1cl09cnIscnRbdXJdPXJ0W3dlXSsxKX19O1MubGVuZ3RoIT09MDspe3ZhciBxdD1ZdCgpO2lmKHF0IT09ImNvbnRpbnVlIiYmcXQ9PT0iYnJlYWsiKWJyZWFrfWZvcih2YXIgbmU9JC5jb2xsZWN0aW9uKCksR3Q9MDtHdDxWLmxlbmd0aDtHdCsrKXt2YXIgZ2U9VltHdF0sYmU9WVtnZS5pZCgpXTtiZSE9bnVsbCYmbmUucHVzaChiZSksbmUucHVzaChnZSl9cmV0dXJue3BhdGg6JC5jb2xsZWN0aW9uKG5lKSxmb3VuZDokLmNvbGxlY3Rpb24oZHQpfX19LFRrPXticmVhZHRoRmlyc3RTZWFyY2g6b04oe2JmczohMH0pLGRlcHRoRmlyc3RTZWFyY2g6b04oe2RmczohMH0pfTtUay5iZnM9VGsuYnJlYWR0aEZpcnN0U2VhcmNoLFRrLmRmcz1Uay5kZXB0aEZpcnN0U2VhcmNoO3ZhciBnSz1IZShmdW5jdGlvbih5LGcpeyhmdW5jdGlvbigpe3ZhciB4LFQsTCxPLFAsJCxxLFMsVixZLHJ0LG90LGh0LGR0LEx0O0w9TWF0aC5mbG9vcixZPU1hdGgubWluLFQ9ZnVuY3Rpb24oa3QsRHQpe3JldHVybiBrdDxEdD8tMTprdD5EdD8xOjB9LFY9ZnVuY3Rpb24oa3QsRHQsUHQsJHQsWnQpe3ZhciBZdDtpZihQdD09bnVsbCYmKFB0PTApLFp0PT1udWxsJiYoWnQ9VCksUHQ8MCl0aHJvdyBuZXcgRXJyb3IoImxvIG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7Zm9yKCR0PT1udWxsJiYoJHQ9a3QubGVuZ3RoKTtQdDwkdDspWXQ9TCgoUHQrJHQpLzIpLFp0KER0LGt0W1l0XSk8MD8kdD1ZdDpQdD1ZdCsxO3JldHVybltdLnNwbGljZS5hcHBseShrdCxbUHQsUHQtUHRdLmNvbmNhdChEdCkpLER0fSwkPWZ1bmN0aW9uKGt0LER0LFB0KXtyZXR1cm4gUHQ9PW51bGwmJihQdD1UKSxrdC5wdXNoKER0KSxkdChrdCwwLGt0Lmxlbmd0aC0xLFB0KX0sUD1mdW5jdGlvbihrdCxEdCl7dmFyIFB0LCR0O3JldHVybiBEdD09bnVsbCYmKER0PVQpLFB0PWt0LnBvcCgpLGt0Lmxlbmd0aD8oJHQ9a3RbMF0sa3RbMF09UHQsTHQoa3QsMCxEdCkpOiR0PVB0LCR0fSxTPWZ1bmN0aW9uKGt0LER0LFB0KXt2YXIgJHQ7cmV0dXJuIFB0PT1udWxsJiYoUHQ9VCksJHQ9a3RbMF0sa3RbMF09RHQsTHQoa3QsMCxQdCksJHR9LHE9ZnVuY3Rpb24oa3QsRHQsUHQpe3ZhciAkdDtyZXR1cm4gUHQ9PW51bGwmJihQdD1UKSxrdC5sZW5ndGgmJlB0KGt0WzBdLER0KTwwJiYoJHQ9W2t0WzBdLER0XSxEdD0kdFswXSxrdFswXT0kdFsxXSxMdChrdCwwLFB0KSksRHR9LE89ZnVuY3Rpb24oa3QsRHQpe3ZhciBQdCwkdCxadCxZdCxxdCxuZTtmb3IoRHQ9PW51bGwmJihEdD1UKSxZdD0oZnVuY3Rpb24oKXtuZT1bXTtmb3IodmFyIEd0PTAsZ2U9TChrdC5sZW5ndGgvMik7MDw9Z2U/R3Q8Z2U6R3Q+Z2U7MDw9Z2U/R3QrKzpHdC0tKW5lLnB1c2goR3QpO3JldHVybiBuZX0pLmFwcGx5KHRoaXMpLnJldmVyc2UoKSxxdD1bXSwkdD0wLFp0PVl0Lmxlbmd0aDskdDxadDskdCsrKVB0PVl0WyR0XSxxdC5wdXNoKEx0KGt0LFB0LER0KSk7cmV0dXJuIHF0fSxodD1mdW5jdGlvbihrdCxEdCxQdCl7dmFyICR0O2lmKFB0PT1udWxsJiYoUHQ9VCksJHQ9a3QuaW5kZXhPZihEdCksJHQhPT0tMSlyZXR1cm4gZHQoa3QsMCwkdCxQdCksTHQoa3QsJHQsUHQpfSxydD1mdW5jdGlvbihrdCxEdCxQdCl7dmFyICR0LFp0LFl0LHF0LG5lO2lmKFB0PT1udWxsJiYoUHQ9VCksWnQ9a3Quc2xpY2UoMCxEdCksIVp0Lmxlbmd0aClyZXR1cm4gWnQ7Zm9yKE8oWnQsUHQpLG5lPWt0LnNsaWNlKER0KSxZdD0wLHF0PW5lLmxlbmd0aDtZdDxxdDtZdCsrKSR0PW5lW1l0XSxxKFp0LCR0LFB0KTtyZXR1cm4gWnQuc29ydChQdCkucmV2ZXJzZSgpfSxvdD1mdW5jdGlvbihrdCxEdCxQdCl7dmFyICR0LFp0LFl0LHF0LG5lLEd0LGdlLGJlLGllO2lmKFB0PT1udWxsJiYoUHQ9VCksRHQqMTA8PWt0Lmxlbmd0aCl7aWYoWXQ9a3Quc2xpY2UoMCxEdCkuc29ydChQdCksIVl0Lmxlbmd0aClyZXR1cm4gWXQ7Zm9yKFp0PVl0W1l0Lmxlbmd0aC0xXSxnZT1rdC5zbGljZShEdCkscXQ9MCxHdD1nZS5sZW5ndGg7cXQ8R3Q7cXQrKykkdD1nZVtxdF0sUHQoJHQsWnQpPDAmJihWKFl0LCR0LDAsbnVsbCxQdCksWXQucG9wKCksWnQ9WXRbWXQubGVuZ3RoLTFdKTtyZXR1cm4gWXR9Zm9yKE8oa3QsUHQpLGllPVtdLG5lPTAsYmU9WShEdCxrdC5sZW5ndGgpOzA8PWJlP25lPGJlOm5lPmJlOzA8PWJlPysrbmU6LS1uZSlpZS5wdXNoKFAoa3QsUHQpKTtyZXR1cm4gaWV9LGR0PWZ1bmN0aW9uKGt0LER0LFB0LCR0KXt2YXIgWnQsWXQscXQ7Zm9yKCR0PT1udWxsJiYoJHQ9VCksWnQ9a3RbUHRdO1B0PkR0Oyl7aWYocXQ9UHQtMT4+MSxZdD1rdFtxdF0sJHQoWnQsWXQpPDApe2t0W1B0XT1ZdCxQdD1xdDtjb250aW51ZX1icmVha31yZXR1cm4ga3RbUHRdPVp0fSxMdD1mdW5jdGlvbihrdCxEdCxQdCl7dmFyICR0LFp0LFl0LHF0LG5lO2ZvcihQdD09bnVsbCYmKFB0PVQpLFp0PWt0Lmxlbmd0aCxuZT1EdCxZdD1rdFtEdF0sJHQ9MipEdCsxOyR0PFp0OylxdD0kdCsxLHF0PFp0JiYhKFB0KGt0WyR0XSxrdFtxdF0pPDApJiYoJHQ9cXQpLGt0W0R0XT1rdFskdF0sRHQ9JHQsJHQ9MipEdCsxO3JldHVybiBrdFtEdF09WXQsZHQoa3QsbmUsRHQsUHQpfSx4PWZ1bmN0aW9uKCl7a3QucHVzaD0kLGt0LnBvcD1QLGt0LnJlcGxhY2U9UyxrdC5wdXNocG9wPXEsa3QuaGVhcGlmeT1PLGt0LnVwZGF0ZUl0ZW09aHQsa3Qubmxhcmdlc3Q9cnQsa3QubnNtYWxsZXN0PW90O2Z1bmN0aW9uIGt0KER0KXt0aGlzLmNtcD1EdD8/VCx0aGlzLm5vZGVzPVtdfXJldHVybiBrdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihEdCl7cmV0dXJuICQodGhpcy5ub2RlcyxEdCx0aGlzLmNtcCl9LGt0LnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gUCh0aGlzLm5vZGVzLHRoaXMuY21wKX0sa3QucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc1swXX0sa3QucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKER0KXtyZXR1cm4gdGhpcy5ub2Rlcy5pbmRleE9mKER0KSE9PS0xfSxrdC5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihEdCl7cmV0dXJuIFModGhpcy5ub2RlcyxEdCx0aGlzLmNtcCl9LGt0LnByb3RvdHlwZS5wdXNocG9wPWZ1bmN0aW9uKER0KXtyZXR1cm4gcSh0aGlzLm5vZGVzLER0LHRoaXMuY21wKX0sa3QucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24oKXtyZXR1cm4gTyh0aGlzLm5vZGVzLHRoaXMuY21wKX0sa3QucHJvdG90eXBlLnVwZGF0ZUl0ZW09ZnVuY3Rpb24oRHQpe3JldHVybiBodCh0aGlzLm5vZGVzLER0LHRoaXMuY21wKX0sa3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXM9W119LGt0LnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aD09PTB9LGt0LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXMubGVuZ3RofSxrdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgRHQ7cmV0dXJuIER0PW5ldyBrdCxEdC5ub2Rlcz10aGlzLm5vZGVzLnNsaWNlKDApLER0fSxrdC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApfSxrdC5wcm90b3R5cGUuaW5zZXJ0PWt0LnByb3RvdHlwZS5wdXNoLGt0LnByb3RvdHlwZS50b3A9a3QucHJvdG90eXBlLnBlZWssa3QucHJvdG90eXBlLmZyb250PWt0LnByb3RvdHlwZS5wZWVrLGt0LnByb3RvdHlwZS5oYXM9a3QucHJvdG90eXBlLmNvbnRhaW5zLGt0LnByb3RvdHlwZS5jb3B5PWt0LnByb3RvdHlwZS5jbG9uZSxrdH0oKSxmdW5jdGlvbihrdCxEdCl7cmV0dXJuIHkuZXhwb3J0cz1EdCgpfSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KX0pLmNhbGwoS24pfSksQ2s9Z0sscEs9UmYoe3Jvb3Q6bnVsbCx3ZWlnaHQ6ZnVuY3Rpb24oZyl7cmV0dXJuIDF9LGRpcmVjdGVkOiExfSksYks9e2RpamtzdHJhOmZ1bmN0aW9uKGcpe2lmKCF1dChnKSl7dmFyIHg9YXJndW1lbnRzO2c9e3Jvb3Q6eFswXSx3ZWlnaHQ6eFsxXSxkaXJlY3RlZDp4WzJdfX12YXIgVD1wSyhnKSxMPVQucm9vdCxPPVQud2VpZ2h0LFA9VC5kaXJlY3RlZCwkPXRoaXMscT1PLFM9bXQoTCk/dGhpcy5maWx0ZXIoTClbMF06TFswXSxWPXt9LFk9e30scnQ9e30sb3Q9dGhpcy5ieUdyb3VwKCksaHQ9b3Qubm9kZXMsZHQ9b3QuZWRnZXM7ZHQudW5tZXJnZUJ5KGZ1bmN0aW9uKGJuKXtyZXR1cm4gYm4uaXNMb29wKCl9KTtmb3IodmFyIEx0PWZ1bmN0aW9uKHplKXtyZXR1cm4gVlt6ZS5pZCgpXX0sa3Q9ZnVuY3Rpb24oemUsR2Upe1ZbemUuaWQoKV09R2UsRHQudXBkYXRlSXRlbSh6ZSl9LER0PW5ldyBDayhmdW5jdGlvbihibix6ZSl7cmV0dXJuIEx0KGJuKS1MdCh6ZSl9KSxQdD0wO1B0PGh0Lmxlbmd0aDtQdCsrKXt2YXIgJHQ9aHRbUHRdO1ZbJHQuaWQoKV09JHQuc2FtZShTKT8wOjEvMCxEdC5wdXNoKCR0KX1mb3IodmFyIFp0PWZ1bmN0aW9uKHplLEdlKXtmb3IodmFyIEVuPShQP3plLmVkZ2VzVG8oR2UpOnplLmVkZ2VzV2l0aChHZSkpLmludGVyc2VjdChkdCksSW49MS8wLFluLFNuPTA7U248RW4ubGVuZ3RoO1NuKyspe3ZhciBXbj1FbltTbl0scnI9cShXbik7KHJyPElufHwhWW4pJiYoSW49cnIsWW49V24pfXJldHVybntlZGdlOlluLGRpc3Q6SW59fTtEdC5zaXplKCk+MDspe3ZhciBZdD1EdC5wb3AoKSxxdD1MdChZdCksbmU9WXQuaWQoKTtpZihydFtuZV09cXQscXQhPT0xLzApZm9yKHZhciBHdD1ZdC5uZWlnaGJvcmhvb2QoKS5pbnRlcnNlY3QoaHQpLGdlPTA7Z2U8R3QubGVuZ3RoO2dlKyspe3ZhciBiZT1HdFtnZV0saWU9YmUuaWQoKSxGZT1adChZdCxiZSksd2U9cXQrRmUuZGlzdDt3ZTxMdChiZSkmJihrdChiZSx3ZSksWVtpZV09e25vZGU6WXQsZWRnZTpGZS5lZGdlfSl9fXJldHVybntkaXN0YW5jZVRvOmZ1bmN0aW9uKHplKXt2YXIgR2U9bXQoemUpP2h0LmZpbHRlcih6ZSlbMF06emVbMF07cmV0dXJuIHJ0W0dlLmlkKCldfSxwYXRoVG86ZnVuY3Rpb24oemUpe3ZhciBHZT1tdCh6ZSk/aHQuZmlsdGVyKHplKVswXTp6ZVswXSxFbj1bXSxJbj1HZSxZbj1Jbi5pZCgpO2lmKEdlLmxlbmd0aD4wKWZvcihFbi51bnNoaWZ0KEdlKTtZW1luXTspe3ZhciBTbj1ZW1luXTtFbi51bnNoaWZ0KFNuLmVkZ2UpLEVuLnVuc2hpZnQoU24ubm9kZSksSW49U24ubm9kZSxZbj1Jbi5pZCgpfXJldHVybiAkLnNwYXduKEVuKX19fX0sd0s9e2tydXNrYWw6ZnVuY3Rpb24oZyl7Zz1nfHxmdW5jdGlvbihQdCl7cmV0dXJuIDF9O2Zvcih2YXIgeD10aGlzLmJ5R3JvdXAoKSxUPXgubm9kZXMsTD14LmVkZ2VzLE89VC5sZW5ndGgsUD1uZXcgQXJyYXkoTyksJD1ULHE9ZnVuY3Rpb24oJHQpe2Zvcih2YXIgWnQ9MDtadDxQLmxlbmd0aDtadCsrKXt2YXIgWXQ9UFtadF07aWYoWXQuaGFzKCR0KSlyZXR1cm4gWnR9fSxTPTA7UzxPO1MrKylQW1NdPXRoaXMuc3Bhd24oVFtTXSk7Zm9yKHZhciBWPUwuc29ydChmdW5jdGlvbihQdCwkdCl7cmV0dXJuIGcoUHQpLWcoJHQpfSksWT0wO1k8Vi5sZW5ndGg7WSsrKXt2YXIgcnQ9VltZXSxvdD1ydC5zb3VyY2UoKVswXSxodD1ydC50YXJnZXQoKVswXSxkdD1xKG90KSxMdD1xKGh0KSxrdD1QW2R0XSxEdD1QW0x0XTtkdCE9PUx0JiYoJC5tZXJnZShydCksa3QubWVyZ2UoRHQpLFAuc3BsaWNlKEx0LDEpKX1yZXR1cm4gJH19LHZLPVJmKHtyb290Om51bGwsZ29hbDpudWxsLHdlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0saGV1cmlzdGljOmZ1bmN0aW9uKGcpe3JldHVybiAwfSxkaXJlY3RlZDohMX0pLG1LPXthU3RhcjpmdW5jdGlvbihnKXt2YXIgeD10aGlzLmN5KCksVD12SyhnKSxMPVQucm9vdCxPPVQuZ29hbCxQPVQuaGV1cmlzdGljLCQ9VC5kaXJlY3RlZCxxPVQud2VpZ2h0O0w9eC5jb2xsZWN0aW9uKEwpWzBdLE89eC5jb2xsZWN0aW9uKE8pWzBdO3ZhciBTPUwuaWQoKSxWPU8uaWQoKSxZPXt9LHJ0PXt9LG90PXt9LGh0PW5ldyBDayhmdW5jdGlvbihZbixTbil7cmV0dXJuIHJ0W1luLmlkKCldLXJ0W1NuLmlkKCldfSksZHQ9bmV3IFk1LEx0PXt9LGt0PXt9LER0PWZ1bmN0aW9uKFNuLFduKXtodC5wdXNoKFNuKSxkdC5hZGQoV24pfSxQdCwkdCxadD1mdW5jdGlvbigpe1B0PWh0LnBvcCgpLCR0PVB0LmlkKCksZHQuZGVsZXRlKCR0KX0sWXQ9ZnVuY3Rpb24oU24pe3JldHVybiBkdC5oYXMoU24pfTtEdChMLFMpLFlbU109MCxydFtTXT1QKEwpO2Zvcih2YXIgcXQ9MDtodC5zaXplKCk+MDspe2lmKFp0KCkscXQrKywkdD09PVYpe2Zvcih2YXIgbmU9W10sR3Q9TyxnZT1WLGJlPWt0W2dlXTtuZS51bnNoaWZ0KEd0KSxiZSE9bnVsbCYmbmUudW5zaGlmdChiZSksR3Q9THRbZ2VdLEd0IT1udWxsOylnZT1HdC5pZCgpLGJlPWt0W2dlXTtyZXR1cm57Zm91bmQ6ITAsZGlzdGFuY2U6WVskdF0scGF0aDp0aGlzLnNwYXduKG5lKSxzdGVwczpxdH19b3RbJHRdPSEwO2Zvcih2YXIgaWU9UHQuX3ByaXZhdGUuZWRnZXMsRmU9MDtGZTxpZS5sZW5ndGg7RmUrKyl7dmFyIHdlPWllW0ZlXTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQod2UuaWQoKSkmJiEoJCYmd2UuZGF0YSgic291cmNlIikhPT0kdCkpe3ZhciBibj13ZS5zb3VyY2UoKSx6ZT13ZS50YXJnZXQoKSxHZT1ibi5pZCgpIT09JHQ/Ym46emUsRW49R2UuaWQoKTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoRW4pJiYhb3RbRW5dKXt2YXIgSW49WVskdF0rcSh3ZSk7aWYoIVl0KEVuKSl7WVtFbl09SW4scnRbRW5dPUluK1AoR2UpLER0KEdlLEVuKSxMdFtFbl09UHQsa3RbRW5dPXdlO2NvbnRpbnVlfUluPFlbRW5dJiYoWVtFbl09SW4scnRbRW5dPUluK1AoR2UpLEx0W0VuXT1QdCxrdFtFbl09d2UpfX19fXJldHVybntmb3VuZDohMSxkaXN0YW5jZTp2b2lkIDAscGF0aDp2b2lkIDAsc3RlcHM6cXR9fX0seUs9UmYoe3dlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITF9KSx4Sz17ZmxveWRXYXJzaGFsbDpmdW5jdGlvbihnKXtmb3IodmFyIHg9dGhpcy5jeSgpLFQ9eUsoZyksTD1ULndlaWdodCxPPVQuZGlyZWN0ZWQsUD1MLCQ9dGhpcy5ieUdyb3VwKCkscT0kLm5vZGVzLFM9JC5lZGdlcyxWPXEubGVuZ3RoLFk9VipWLHJ0PWZ1bmN0aW9uKHJyKXtyZXR1cm4gcS5pbmRleE9mKHJyKX0sb3Q9ZnVuY3Rpb24ocnIpe3JldHVybiBxW3JyXX0saHQ9bmV3IEFycmF5KFkpLGR0PTA7ZHQ8WTtkdCsrKXt2YXIgTHQ9ZHQlVixrdD0oZHQtTHQpL1Y7a3Q9PT1MdD9odFtkdF09MDpodFtkdF09MS8wfWZvcih2YXIgRHQ9bmV3IEFycmF5KFkpLFB0PW5ldyBBcnJheShZKSwkdD0wOyR0PFMubGVuZ3RoOyR0Kyspe3ZhciBadD1TWyR0XSxZdD1adC5zb3VyY2UoKVswXSxxdD1adC50YXJnZXQoKVswXTtpZihZdCE9PXF0KXt2YXIgbmU9cnQoWXQpLEd0PXJ0KHF0KSxnZT1uZSpWK0d0LGJlPVAoWnQpO2lmKGh0W2dlXT5iZSYmKGh0W2dlXT1iZSxEdFtnZV09R3QsUHRbZ2VdPVp0KSwhTyl7dmFyIGllPUd0KlYrbmU7IU8mJmh0W2llXT5iZSYmKGh0W2llXT1iZSxEdFtpZV09bmUsUHRbaWVdPVp0KX19fWZvcih2YXIgRmU9MDtGZTxWO0ZlKyspZm9yKHZhciB3ZT0wO3dlPFY7d2UrKylmb3IodmFyIGJuPXdlKlYrRmUsemU9MDt6ZTxWO3plKyspe3ZhciBHZT13ZSpWK3plLEVuPUZlKlYremU7aHRbYm5dK2h0W0VuXTxodFtHZV0mJihodFtHZV09aHRbYm5dK2h0W0VuXSxEdFtHZV09RHRbYm5dKX12YXIgSW49ZnVuY3Rpb24ocnIpe3JldHVybihtdChycik/eC5maWx0ZXIocnIpOnJyKVswXX0sWW49ZnVuY3Rpb24ocnIpe3JldHVybiBydChJbihycikpfSxTbj17ZGlzdGFuY2U6ZnVuY3Rpb24ocnIsd3Ipe3ZhciB1cj1ZbihyciksZXI9WW4od3IpO3JldHVybiBodFt1cipWK2VyXX0scGF0aDpmdW5jdGlvbihycix3cil7dmFyIHVyPVluKHJyKSxlcj1Zbih3ciksdm49b3QodXIpO2lmKHVyPT09ZXIpcmV0dXJuIHZuLmNvbGxlY3Rpb24oKTtpZihEdFt1cipWK2VyXT09bnVsbClyZXR1cm4geC5jb2xsZWN0aW9uKCk7dmFyIGdyPXguY29sbGVjdGlvbigpLGZyPXVyLEpyO2Zvcihnci5tZXJnZSh2bik7dXIhPT1lcjspZnI9dXIsdXI9RHRbdXIqVitlcl0sSnI9UHRbZnIqVit1cl0sZ3IubWVyZ2UoSnIpLGdyLm1lcmdlKG90KHVyKSk7cmV0dXJuIGdyfX07cmV0dXJuIFNufX0sa0s9UmYoe3dlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSksRUs9e2JlbGxtYW5Gb3JkOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD1rSyhnKSxMPVQud2VpZ2h0LE89VC5kaXJlY3RlZCxQPVQucm9vdCwkPUwscT10aGlzLFM9dGhpcy5jeSgpLFY9dGhpcy5ieUdyb3VwKCksWT1WLmVkZ2VzLHJ0PVYubm9kZXMsb3Q9cnQubGVuZ3RoLGh0PW5ldyBHYixkdD0hMSxMdD1bXTtQPVMuY29sbGVjdGlvbihQKVswXSxZLnVubWVyZ2VCeShmdW5jdGlvbihxaSl7cmV0dXJuIHFpLmlzTG9vcCgpfSk7Zm9yKHZhciBrdD1ZLmxlbmd0aCxEdD1mdW5jdGlvbihTaSl7dmFyIFVpPWh0LmdldChTaS5pZCgpKTtyZXR1cm4gVWl8fChVaT17fSxodC5zZXQoU2kuaWQoKSxVaSkpLFVpfSxQdD1mdW5jdGlvbihTaSl7cmV0dXJuKG10KFNpKT9TLiQoU2kpOlNpKVswXX0sJHQ9ZnVuY3Rpb24oU2kpe3JldHVybiBEdChQdChTaSkpLmRpc3R9LFp0PWZ1bmN0aW9uKFNpKXtmb3IodmFyIFVpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpQLFZhPVB0KFNpKSxRcz1bXSxxcz1WYTs7KXtpZihxcz09bnVsbClyZXR1cm4geC5zcGF3bigpO3ZhciBUcj1EdChxcyksUXQ9VHIuZWRnZSxqbj1Uci5wcmVkO2lmKFFzLnVuc2hpZnQocXNbMF0pLHFzLnNhbWUoVWkpJiZRcy5sZW5ndGg+MClicmVhaztRdCE9bnVsbCYmUXMudW5zaGlmdChRdCkscXM9am59cmV0dXJuIHEuc3Bhd24oUXMpfSxZdD0wO1l0PG90O1l0Kyspe3ZhciBxdD1ydFtZdF0sbmU9RHQocXQpO3F0LnNhbWUoUCk/bmUuZGlzdD0wOm5lLmRpc3Q9MS8wLG5lLnByZWQ9bnVsbCxuZS5lZGdlPW51bGx9Zm9yKHZhciBHdD0hMSxnZT1mdW5jdGlvbihTaSxVaSxWYSxRcyxxcyxUcil7dmFyIFF0PVFzLmRpc3QrVHI7UXQ8cXMuZGlzdCYmIVZhLnNhbWUoUXMuZWRnZSkmJihxcy5kaXN0PVF0LHFzLnByZWQ9U2kscXMuZWRnZT1WYSxHdD0hMCl9LGJlPTE7YmU8b3Q7YmUrKyl7R3Q9ITE7Zm9yKHZhciBpZT0wO2llPGt0O2llKyspe3ZhciBGZT1ZW2llXSx3ZT1GZS5zb3VyY2UoKSxibj1GZS50YXJnZXQoKSx6ZT0kKEZlKSxHZT1EdCh3ZSksRW49RHQoYm4pO2dlKHdlLGJuLEZlLEdlLEVuLHplKSxPfHxnZShibix3ZSxGZSxFbixHZSx6ZSl9aWYoIUd0KWJyZWFrfWlmKEd0KWZvcih2YXIgSW49W10sWW49MDtZbjxrdDtZbisrKXt2YXIgU249WVtZbl0sV249U24uc291cmNlKCkscnI9U24udGFyZ2V0KCksd3I9JChTbiksdXI9RHQoV24pLmRpc3QsZXI9RHQocnIpLmRpc3Q7aWYodXIrd3I8ZXJ8fCFPJiZlcit3cjx1cilpZihkdHx8KFNjKCJHcmFwaCBjb250YWlucyBhIG5lZ2F0aXZlIHdlaWdodCBjeWNsZSBmb3IgQmVsbG1hbi1Gb3JkIiksZHQ9ITApLGcuZmluZE5lZ2F0aXZlV2VpZ2h0Q3ljbGVzIT09ITEpe3ZhciB2bj1bXTt1cit3cjxlciYmdm4ucHVzaChXbiksIU8mJmVyK3dyPHVyJiZ2bi5wdXNoKHJyKTtmb3IodmFyIGdyPXZuLmxlbmd0aCxmcj0wO2ZyPGdyO2ZyKyspe3ZhciBKcj12bltmcl0sdmk9W0pyXTt2aS5wdXNoKER0KEpyKS5lZGdlKTtmb3IodmFyIFhzPUR0KEpyKS5wcmVkO3ZpLmluZGV4T2YoWHMpPT09LTE7KXZpLnB1c2goWHMpLHZpLnB1c2goRHQoWHMpLmVkZ2UpLFhzPUR0KFhzKS5wcmVkO3ZpPXZpLnNsaWNlKHZpLmluZGV4T2YoWHMpKTtmb3IodmFyIEVhPXZpWzBdLmlkKCksQ2k9MCxoaT0yO2hpPHZpLmxlbmd0aDtoaSs9Mil2aVtoaV0uaWQoKTxFYSYmKEVhPXZpW2hpXS5pZCgpLENpPWhpKTt2aT12aS5zbGljZShDaSkuY29uY2F0KHZpLnNsaWNlKDAsQ2kpKSx2aS5wdXNoKHZpWzBdKTt2YXIgZ3M9dmkubWFwKGZ1bmN0aW9uKHFpKXtyZXR1cm4gcWkuaWQoKX0pLmpvaW4oIiwiKTtJbi5pbmRleE9mKGdzKT09PS0xJiYoTHQucHVzaChxLnNwYXduKHZpKSksSW4ucHVzaChncykpfX1lbHNlIGJyZWFrfXJldHVybntkaXN0YW5jZVRvOiR0LHBhdGhUbzpadCxoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlOmR0LG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzOkx0fX19LFRLPU1hdGguc3FydCgyKSxDSz1mdW5jdGlvbihnLHgsVCl7VC5sZW5ndGg9PT0wJiZ2bCgiS2FyZ2VyLVN0ZWluIG11c3QgYmUgcnVuIG9uIGEgY29ubmVjdGVkIChzdWIpZ3JhcGgiKTtmb3IodmFyIEw9VFtnXSxPPUxbMV0sUD1MWzJdLCQ9eFtPXSxxPXhbUF0sUz1ULFY9Uy5sZW5ndGgtMTtWPj0wO1YtLSl7dmFyIFk9U1tWXSxydD1ZWzFdLG90PVlbMl07KHhbcnRdPT09JCYmeFtvdF09PT1xfHx4W3J0XT09PXEmJnhbb3RdPT09JCkmJlMuc3BsaWNlKFYsMSl9Zm9yKHZhciBodD0wO2h0PFMubGVuZ3RoO2h0Kyspe3ZhciBkdD1TW2h0XTtkdFsxXT09PXE/KFNbaHRdPWR0LnNsaWNlKCksU1todF1bMV09JCk6ZHRbMl09PT1xJiYoU1todF09ZHQuc2xpY2UoKSxTW2h0XVsyXT0kKX1mb3IodmFyIEx0PTA7THQ8eC5sZW5ndGg7THQrKyl4W0x0XT09PXEmJih4W0x0XT0kKTtyZXR1cm4gU30sQ0w9ZnVuY3Rpb24oZyx4LFQsTCl7Zm9yKDtUPkw7KXt2YXIgTz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqeC5sZW5ndGgpO3g9Q0soTyxnLHgpLFQtLX1yZXR1cm4geH0sX0s9e2thcmdlclN0ZWluOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcyx4PXRoaXMuYnlHcm91cCgpLFQ9eC5ub2RlcyxMPXguZWRnZXM7TC51bm1lcmdlQnkoZnVuY3Rpb24oRW4pe3JldHVybiBFbi5pc0xvb3AoKX0pO3ZhciBPPVQubGVuZ3RoLFA9TC5sZW5ndGgsJD1NYXRoLmNlaWwoTWF0aC5wb3coTWF0aC5sb2coTykvTWF0aC5MTjIsMikpLHE9TWF0aC5mbG9vcihPL1RLKTtpZihPPDIpe3ZsKCJBdCBsZWFzdCAyIG5vZGVzIGFyZSByZXF1aXJlZCBmb3IgS2FyZ2VyLVN0ZWluIGFsZ29yaXRobSIpO3JldHVybn1mb3IodmFyIFM9W10sVj0wO1Y8UDtWKyspe3ZhciBZPUxbVl07Uy5wdXNoKFtWLFQuaW5kZXhPZihZLnNvdXJjZSgpKSxULmluZGV4T2YoWS50YXJnZXQoKSldKX1mb3IodmFyIHJ0PTEvMCxvdD1bXSxodD1uZXcgQXJyYXkoTyksZHQ9bmV3IEFycmF5KE8pLEx0PW5ldyBBcnJheShPKSxrdD1mdW5jdGlvbihJbixZbil7Zm9yKHZhciBTbj0wO1NuPE87U24rKylZbltTbl09SW5bU25dfSxEdD0wO0R0PD0kO0R0Kyspe2Zvcih2YXIgUHQ9MDtQdDxPO1B0KyspZHRbUHRdPVB0O3ZhciAkdD1DTChkdCxTLnNsaWNlKCksTyxxKSxadD0kdC5zbGljZSgpO2t0KGR0LEx0KTt2YXIgWXQ9Q0woZHQsJHQscSwyKSxxdD1DTChMdCxadCxxLDIpO1l0Lmxlbmd0aDw9cXQubGVuZ3RoJiZZdC5sZW5ndGg8cnQ/KHJ0PVl0Lmxlbmd0aCxvdD1ZdCxrdChkdCxodCkpOnF0Lmxlbmd0aDw9WXQubGVuZ3RoJiZxdC5sZW5ndGg8cnQmJihydD1xdC5sZW5ndGgsb3Q9cXQsa3QoTHQsaHQpKX1mb3IodmFyIG5lPXRoaXMuc3Bhd24ob3QubWFwKGZ1bmN0aW9uKEVuKXtyZXR1cm4gTFtFblswXV19KSksR3Q9dGhpcy5zcGF3bigpLGdlPXRoaXMuc3Bhd24oKSxiZT1odFswXSxpZT0wO2llPGh0Lmxlbmd0aDtpZSsrKXt2YXIgRmU9aHRbaWVdLHdlPVRbaWVdO0ZlPT09YmU/R3QubWVyZ2Uod2UpOmdlLm1lcmdlKHdlKX12YXIgYm49ZnVuY3Rpb24oSW4pe3ZhciBZbj1nLnNwYXduKCk7cmV0dXJuIEluLmZvckVhY2goZnVuY3Rpb24oU24pe1luLm1lcmdlKFNuKSxTbi5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oV24pe2cuY29udGFpbnMoV24pJiYhbmUuY29udGFpbnMoV24pJiZZbi5tZXJnZShXbil9KX0pLFlufSx6ZT1bYm4oR3QpLGJuKGdlKV0sR2U9e2N1dDpuZSxjb21wb25lbnRzOnplLHBhcnRpdGlvbjE6R3QscGFydGl0aW9uMjpnZX07cmV0dXJuIEdlfX0sU0s9ZnVuY3Rpb24oZyl7cmV0dXJue3g6Zy54LHk6Zy55fX0sTlQ9ZnVuY3Rpb24oZyx4LFQpe3JldHVybnt4OmcueCp4K1QueCx5OmcueSp4K1QueX19LGNOPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm57eDooZy54LVQueCkveCx5OihnLnktVC55KS94fX0sSzU9ZnVuY3Rpb24oZyl7cmV0dXJue3g6Z1swXSx5OmdbMV19fSxBSz1mdW5jdGlvbihnKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsTD0xLzAsTz14O088VDtPKyspe3ZhciBQPWdbT107aXNGaW5pdGUoUCkmJihMPU1hdGgubWluKFAsTCkpfXJldHVybiBMfSxMSz1mdW5jdGlvbihnKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsTD0tMS8wLE89eDtPPFQ7TysrKXt2YXIgUD1nW09dO2lzRmluaXRlKFApJiYoTD1NYXRoLm1heChQLEwpKX1yZXR1cm4gTH0sTUs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmcubGVuZ3RoLEw9MCxPPTAsUD14O1A8VDtQKyspe3ZhciAkPWdbUF07aXNGaW5pdGUoJCkmJihMKz0kLE8rKyl9cmV0dXJuIEwvT30sREs9ZnVuY3Rpb24oZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsVD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Zy5sZW5ndGgsTD1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsTz1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAsUD1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITA7TD9nPWcuc2xpY2UoeCxUKTooVDxnLmxlbmd0aCYmZy5zcGxpY2UoVCxnLmxlbmd0aC1UKSx4PjAmJmcuc3BsaWNlKDAseCkpO2Zvcih2YXIgJD0wLHE9Zy5sZW5ndGgtMTtxPj0wO3EtLSl7dmFyIFM9Z1txXTtQP2lzRmluaXRlKFMpfHwoZ1txXT0tMS8wLCQrKyk6Zy5zcGxpY2UocSwxKX1PJiZnLnNvcnQoZnVuY3Rpb24ocnQsb3Qpe3JldHVybiBydC1vdH0pO3ZhciBWPWcubGVuZ3RoLFk9TWF0aC5mbG9vcihWLzIpO3JldHVybiBWJTIhPT0wP2dbWSsxKyRdOihnW1ktMSskXStnW1krJF0pLzJ9LElLPWZ1bmN0aW9uKGcpe3JldHVybiBNYXRoLlBJKmcvMTgwfSxCVD1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLmF0YW4yKHgsZyktTWF0aC5QSS8yfSxfTD1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHkpe3JldHVybiBNYXRoLmxvZyh5KS9NYXRoLmxvZygyKX0sdU49ZnVuY3Rpb24oZyl7cmV0dXJuIGc+MD8xOmc8MD8tMTowfSxDMz1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLnNxcnQoXzMoZyx4KSl9LF8zPWZ1bmN0aW9uKGcseCl7dmFyIFQ9eC54LWcueCxMPXgueS1nLnk7cmV0dXJuIFQqVCtMKkx9LE9LPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1nLmxlbmd0aCxUPTAsTD0wO0w8eDtMKyspVCs9Z1tMXTtmb3IodmFyIE89MDtPPHg7TysrKWdbT109Z1tPXS9UO3JldHVybiBnfSxvZj1mdW5jdGlvbihnLHgsVCxMKXtyZXR1cm4oMS1MKSooMS1MKSpnKzIqKDEtTCkqTCp4K0wqTCpUfSxYNT1mdW5jdGlvbihnLHgsVCxMKXtyZXR1cm57eDpvZihnLngseC54LFQueCxMKSx5Om9mKGcueSx4LnksVC55LEwpfX0sUEs9ZnVuY3Rpb24oZyx4LFQsTCl7dmFyIE89e3g6eC54LWcueCx5OngueS1nLnl9LFA9QzMoZyx4KSwkPXt4Ok8ueC9QLHk6Ty55L1B9O3JldHVybiBUPVQ/PzAsTD1MPz9UKlAse3g6Zy54KyQueCpMLHk6Zy55KyQueSpMfX0sX2s9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLm1heChnLE1hdGgubWluKFQseCkpfSx6ZD1mdW5jdGlvbihnKXtpZihnPT1udWxsKXJldHVybnt4MToxLzAseTE6MS8wLHgyOi0xLzAseTI6LTEvMCx3OjAsaDowfTtpZihnLngxIT1udWxsJiZnLnkxIT1udWxsKXtpZihnLngyIT1udWxsJiZnLnkyIT1udWxsJiZnLngyPj1nLngxJiZnLnkyPj1nLnkxKXJldHVybnt4MTpnLngxLHkxOmcueTEseDI6Zy54Mix5MjpnLnkyLHc6Zy54Mi1nLngxLGg6Zy55Mi1nLnkxfTtpZihnLnchPW51bGwmJmcuaCE9bnVsbCYmZy53Pj0wJiZnLmg+PTApcmV0dXJue3gxOmcueDEseTE6Zy55MSx4MjpnLngxK2cudyx5MjpnLnkxK2cuaCx3OmcudyxoOmcuaH19fSxGSz1mdW5jdGlvbihnKXtyZXR1cm57eDE6Zy54MSx4MjpnLngyLHc6Zy53LHkxOmcueTEseTI6Zy55MixoOmcuaH19LE5LPWZ1bmN0aW9uKGcpe2cueDE9MS8wLGcueTE9MS8wLGcueDI9LTEvMCxnLnkyPS0xLzAsZy53PTAsZy5oPTB9LEJLPWZ1bmN0aW9uKGcseCl7Zy54MT1NYXRoLm1pbihnLngxLHgueDEpLGcueDI9TWF0aC5tYXgoZy54Mix4LngyKSxnLnc9Zy54Mi1nLngxLGcueTE9TWF0aC5taW4oZy55MSx4LnkxKSxnLnkyPU1hdGgubWF4KGcueTIseC55MiksZy5oPWcueTItZy55MX0sUks9ZnVuY3Rpb24oZyx4LFQpe2cueDE9TWF0aC5taW4oZy54MSx4KSxnLngyPU1hdGgubWF4KGcueDIseCksZy53PWcueDItZy54MSxnLnkxPU1hdGgubWluKGcueTEsVCksZy55Mj1NYXRoLm1heChnLnkyLFQpLGcuaD1nLnkyLWcueTF9LFJUPWZ1bmN0aW9uKGcpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowO3JldHVybiBnLngxLT14LGcueDIrPXgsZy55MS09eCxnLnkyKz14LGcudz1nLngyLWcueDEsZy5oPWcueTItZy55MSxnfSxTTD1mdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WzBdLFQsTCxPLFA7aWYoeC5sZW5ndGg9PT0xKVQ9TD1PPVA9eFswXTtlbHNlIGlmKHgubGVuZ3RoPT09MilUPU89eFswXSxQPUw9eFsxXTtlbHNlIGlmKHgubGVuZ3RoPT09NCl7dmFyICQ9RSh4LDQpO1Q9JFswXSxMPSRbMV0sTz0kWzJdLFA9JFszXX1yZXR1cm4gZy54MS09UCxnLngyKz1MLGcueTEtPVQsZy55Mis9TyxnLnc9Zy54Mi1nLngxLGcuaD1nLnkyLWcueTEsZ30sbE49ZnVuY3Rpb24oZyx4KXtnLngxPXgueDEsZy55MT14LnkxLGcueDI9eC54MixnLnkyPXgueTIsZy53PWcueDItZy54MSxnLmg9Zy55Mi1nLnkxfSxBTD1mdW5jdGlvbihnLHgpe3JldHVybiEoZy54MT54LngyfHx4LngxPmcueDJ8fGcueDI8eC54MXx8eC54MjxnLngxfHxnLnkyPHgueTF8fHgueTI8Zy55MXx8Zy55MT54LnkyfHx4LnkxPmcueTIpfSxRNT1mdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcueDE8PXgmJng8PWcueDImJmcueTE8PVQmJlQ8PWcueTJ9LGpLPWZ1bmN0aW9uKGcseCl7cmV0dXJuIFE1KGcseC54LHgueSl9LGhOPWZ1bmN0aW9uKGcseCl7cmV0dXJuIFE1KGcseC54MSx4LnkxKSYmUTUoZyx4LngyLHgueTIpfSxmTj1mdW5jdGlvbihnLHgsVCxMLE8sUCwkKXt2YXIgcT1MayhPLFApLFM9Ty8yLFY9UC8yLFk7e3ZhciBydD1ULVMrcS0kLG90PUwtVi0kLGh0PVQrUy1xKyQsZHQ9b3Q7aWYoWT15bShnLHgsVCxMLHJ0LG90LGh0LGR0LCExKSxZLmxlbmd0aD4wKXJldHVybiBZfXt2YXIgTHQ9VCtTKyQsa3Q9TC1WK3EtJCxEdD1MdCxQdD1MK1YtcSskO2lmKFk9eW0oZyx4LFQsTCxMdCxrdCxEdCxQdCwhMSksWS5sZW5ndGg+MClyZXR1cm4gWX17dmFyICR0PVQtUytxLSQsWnQ9TCtWKyQsWXQ9VCtTLXErJCxxdD1adDtpZihZPXltKGcseCxULEwsJHQsWnQsWXQscXQsITEpLFkubGVuZ3RoPjApcmV0dXJuIFl9e3ZhciBuZT1ULVMtJCxHdD1MLVYrcS0kLGdlPW5lLGJlPUwrVi1xKyQ7aWYoWT15bShnLHgsVCxMLG5lLEd0LGdlLGJlLCExKSxZLmxlbmd0aD4wKXJldHVybiBZfXZhciBpZTt7dmFyIEZlPVQtUytxLHdlPUwtVitxO2lmKGllPVNrKGcseCxULEwsRmUsd2UscSskKSxpZS5sZW5ndGg+MCYmaWVbMF08PUZlJiZpZVsxXTw9d2UpcmV0dXJuW2llWzBdLGllWzFdXX17dmFyIGJuPVQrUy1xLHplPUwtVitxO2lmKGllPVNrKGcseCxULEwsYm4semUscSskKSxpZS5sZW5ndGg+MCYmaWVbMF0+PWJuJiZpZVsxXTw9emUpcmV0dXJuW2llWzBdLGllWzFdXX17dmFyIEdlPVQrUy1xLEVuPUwrVi1xO2lmKGllPVNrKGcseCxULEwsR2UsRW4scSskKSxpZS5sZW5ndGg+MCYmaWVbMF0+PUdlJiZpZVsxXT49RW4pcmV0dXJuW2llWzBdLGllWzFdXX17dmFyIEluPVQtUytxLFluPUwrVi1xO2lmKGllPVNrKGcseCxULEwsSW4sWW4scSskKSxpZS5sZW5ndGg+MCYmaWVbMF08PUluJiZpZVsxXT49WW4pcmV0dXJuW2llWzBdLGllWzFdXX1yZXR1cm5bXX0sJEs9ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7dmFyIHE9JCxTPU1hdGgubWluKFQsTyksVj1NYXRoLm1heChULE8pLFk9TWF0aC5taW4oTCxQKSxydD1NYXRoLm1heChMLFApO3JldHVybiBTLXE8PWcmJmc8PVYrcSYmWS1xPD14JiZ4PD1ydCtxfSx6Sz1mdW5jdGlvbihnLHgsVCxMLE8sUCwkLHEsUyl7dmFyIFY9e3gxOk1hdGgubWluKFQsJCxPKS1TLHgyOk1hdGgubWF4KFQsJCxPKStTLHkxOk1hdGgubWluKEwscSxQKS1TLHkyOk1hdGgubWF4KEwscSxQKStTfTtyZXR1cm4hKGc8Vi54MXx8Zz5WLngyfHx4PFYueTF8fHg+Vi55Mil9LHFLPWZ1bmN0aW9uKGcseCxULEwpe1QtPUw7dmFyIE89eCp4LTQqZypUO2lmKE88MClyZXR1cm5bXTt2YXIgUD1NYXRoLnNxcnQoTyksJD0yKmcscT0oLXgrUCkvJCxTPSgteC1QKS8kO3JldHVybltxLFNdfSxISz1mdW5jdGlvbihnLHgsVCxMLE8pe3ZhciBQPTFlLTU7Zz09PTAmJihnPVApLHgvPWcsVC89ZyxMLz1nO3ZhciAkLHEsUyxWLFkscnQsb3QsaHQ7aWYocT0oMypULXgqeCkvOSxTPS0oMjcqTCkreCooOSpULTIqKHgqeCkpLFMvPTU0LCQ9cSpxKnErUypTLE9bMV09MCxvdD14LzMsJD4wKXtZPVMrTWF0aC5zcXJ0KCQpLFk9WTwwPy1NYXRoLnBvdygtWSwxLzMpOk1hdGgucG93KFksMS8zKSxydD1TLU1hdGguc3FydCgkKSxydD1ydDwwPy1NYXRoLnBvdygtcnQsMS8zKTpNYXRoLnBvdyhydCwxLzMpLE9bMF09LW90K1krcnQsb3QrPShZK3J0KS8yLE9bNF09T1syXT0tb3Qsb3Q9TWF0aC5zcXJ0KDMpKigtcnQrWSkvMixPWzNdPW90LE9bNV09LW90O3JldHVybn1pZihPWzVdPU9bM109MCwkPT09MCl7aHQ9UzwwPy1NYXRoLnBvdygtUywxLzMpOk1hdGgucG93KFMsMS8zKSxPWzBdPS1vdCsyKmh0LE9bNF09T1syXT0tKGh0K290KTtyZXR1cm59cT0tcSxWPXEqcSpxLFY9TWF0aC5hY29zKFMvTWF0aC5zcXJ0KFYpKSxodD0yKk1hdGguc3FydChxKSxPWzBdPS1vdCtodCpNYXRoLmNvcyhWLzMpLE9bMl09LW90K2h0Kk1hdGguY29zKChWKzIqTWF0aC5QSSkvMyksT1s0XT0tb3QraHQqTWF0aC5jb3MoKFYrNCpNYXRoLlBJKS8zKX0sVks9ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCxxKXt2YXIgUz0xKlQqVC00KlQqTysyKlQqJCs0Kk8qTy00Kk8qJCskKiQrTCpMLTQqTCpQKzIqTCpxKzQqUCpQLTQqUCpxK3EqcSxWPTEqOSpUKk8tMypUKlQtMypUKiQtNipPKk8rMypPKiQrOSpMKlAtMypMKkwtMypMKnEtNipQKlArMypQKnEsWT0xKjMqVCpULTYqVCpPK1QqJC1UKmcrMipPKk8rMipPKmctJCpnKzMqTCpMLTYqTCpQK0wqcS1MKngrMipQKlArMipQKngtcSp4LHJ0PTEqVCpPLVQqVCtUKmctTypnK0wqUC1MKkwrTCp4LVAqeCxvdD1bXTtISyhTLFYsWSxydCxvdCk7Zm9yKHZhciBodD0xZS03LGR0PVtdLEx0PTA7THQ8NjtMdCs9MilNYXRoLmFicyhvdFtMdCsxXSk8aHQmJm90W0x0XT49MCYmb3RbTHRdPD0xJiZkdC5wdXNoKG90W0x0XSk7ZHQucHVzaCgxKSxkdC5wdXNoKDApO2Zvcih2YXIga3Q9LTEsRHQsUHQsJHQsWnQ9MDtadDxkdC5sZW5ndGg7WnQrKylEdD1NYXRoLnBvdygxLWR0W1p0XSwyKSpUKzIqKDEtZHRbWnRdKSpkdFtadF0qTytkdFtadF0qZHRbWnRdKiQsUHQ9TWF0aC5wb3coMS1kdFtadF0sMikqTCsyKigxLWR0W1p0XSkqZHRbWnRdKlArZHRbWnRdKmR0W1p0XSpxLCR0PU1hdGgucG93KER0LWcsMikrTWF0aC5wb3coUHQteCwyKSxrdD49MD8kdDxrdCYmKGt0PSR0KTprdD0kdDtyZXR1cm4ga3R9LEdLPWZ1bmN0aW9uKGcseCxULEwsTyxQKXt2YXIgJD1bZy1ULHgtTF0scT1bTy1ULFAtTF0sUz1xWzBdKnFbMF0rcVsxXSpxWzFdLFY9JFswXSokWzBdKyRbMV0qJFsxXSxZPSRbMF0qcVswXSskWzFdKnFbMV0scnQ9WSpZL1M7cmV0dXJuIFk8MD9WOnJ0PlM/KGctTykqKGctTykrKHgtUCkqKHgtUCk6Vi1ydH0scWQ9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTCxPLFAsJCxxLFM9MCxWPTA7VjxULmxlbmd0aC8yO1YrKylpZihMPVRbVioyXSxPPVRbVioyKzFdLFYrMTxULmxlbmd0aC8yPyhQPVRbKFYrMSkqMl0sJD1UWyhWKzEpKjIrMV0pOihQPVRbKFYrMS1ULmxlbmd0aC8yKSoyXSwkPVRbKFYrMS1ULmxlbmd0aC8yKSoyKzFdKSwhKEw9PWcmJlA9PWcpKWlmKEw+PWcmJmc+PVB8fEw8PWcmJmc8PVApcT0oZy1MKS8oUC1MKSooJC1PKStPLHE+eCYmUysrO2Vsc2UgY29udGludWU7cmV0dXJuIFMlMiE9PTB9LGR3PWZ1bmN0aW9uKGcseCxULEwsTyxQLCQscSxTKXt2YXIgVj1uZXcgQXJyYXkoVC5sZW5ndGgpLFk7cVswXSE9bnVsbD8oWT1NYXRoLmF0YW4ocVsxXS9xWzBdKSxxWzBdPDA/WT1ZK01hdGguUEkvMjpZPS1ZLU1hdGguUEkvMik6WT1xO2Zvcih2YXIgcnQ9TWF0aC5jb3MoLVkpLG90PU1hdGguc2luKC1ZKSxodD0wO2h0PFYubGVuZ3RoLzI7aHQrKylWW2h0KjJdPVAvMiooVFtodCoyXSpydC1UW2h0KjIrMV0qb3QpLFZbaHQqMisxXT0kLzIqKFRbaHQqMisxXSpydCtUW2h0KjJdKm90KSxWW2h0KjJdKz1MLFZbaHQqMisxXSs9Tzt2YXIgZHQ7aWYoUz4wKXt2YXIgTHQ9Z04oViwtUyk7ZHQ9ZE4oTHQpfWVsc2UgZHQ9VjtyZXR1cm4gcWQoZyx4LGR0KX0sVUs9ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7Zm9yKHZhciBxPW5ldyBBcnJheShULmxlbmd0aCksUz1QLzIsVj0kLzIsWT1ETChQLCQpLHJ0PVkqWSxvdD0wO290PFQubGVuZ3RoLzQ7b3QrKyl7dmFyIGh0PXZvaWQgMCxkdD12b2lkIDA7b3Q9PT0wP2h0PVQubGVuZ3RoLTI6aHQ9b3QqNC0yLGR0PW90KjQrMjt2YXIgTHQ9TCtTKlRbb3QqNF0sa3Q9TytWKlRbb3QqNCsxXSxEdD0tVFtodF0qVFtkdF0tVFtodCsxXSpUW2R0KzFdLFB0PVkvTWF0aC50YW4oTWF0aC5hY29zKER0KS8yKSwkdD1MdC1QdCpUW2h0XSxadD1rdC1QdCpUW2h0KzFdLFl0PUx0K1B0KlRbZHRdLHF0PWt0K1B0KlRbZHQrMV07cVtvdCo0XT0kdCxxW290KjQrMV09WnQscVtvdCo0KzJdPVl0LHFbb3QqNCszXT1xdDt2YXIgbmU9VFtodCsxXSxHdD0tVFtodF0sZ2U9bmUqVFtkdF0rR3QqVFtkdCsxXTtnZTwwJiYobmUqPS0xLEd0Kj0tMSk7dmFyIGJlPSR0K25lKlksaWU9WnQrR3QqWSxGZT1NYXRoLnBvdyhiZS1nLDIpK01hdGgucG93KGllLXgsMik7aWYoRmU8PXJ0KXJldHVybiEwfXJldHVybiBxZChnLHgscSl9LGROPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1uZXcgQXJyYXkoZy5sZW5ndGgvMiksVCxMLE8sUCwkLHEsUyxWLFk9MDtZPGcubGVuZ3RoLzQ7WSsrKXtUPWdbWSo0XSxMPWdbWSo0KzFdLE89Z1tZKjQrMl0sUD1nW1kqNCszXSxZPGcubGVuZ3RoLzQtMT8oJD1nWyhZKzEpKjRdLHE9Z1soWSsxKSo0KzFdLFM9Z1soWSsxKSo0KzJdLFY9Z1soWSsxKSo0KzNdKTooJD1nWzBdLHE9Z1sxXSxTPWdbMl0sVj1nWzNdKTt2YXIgcnQ9eW0oVCxMLE8sUCwkLHEsUyxWLCEwKTt4W1kqMl09cnRbMF0seFtZKjIrMV09cnRbMV19cmV0dXJuIHh9LGdOPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPW5ldyBBcnJheShnLmxlbmd0aCoyKSxMLE8sUCwkLHE9MDtxPGcubGVuZ3RoLzI7cSsrKXtMPWdbcSoyXSxPPWdbcSoyKzFdLHE8Zy5sZW5ndGgvMi0xPyhQPWdbKHErMSkqMl0sJD1nWyhxKzEpKjIrMV0pOihQPWdbMF0sJD1nWzFdKTt2YXIgUz0kLU8sVj0tKFAtTCksWT1NYXRoLnNxcnQoUypTK1YqVikscnQ9Uy9ZLG90PVYvWTtUW3EqNF09TCtydCp4LFRbcSo0KzFdPU8rb3QqeCxUW3EqNCsyXT1QK3J0KngsVFtxKjQrM109JCtvdCp4fXJldHVybiBUfSxXSz1mdW5jdGlvbihnLHgsVCxMLE8sUCl7dmFyICQ9VC1nLHE9TC14OyQvPU8scS89UDt2YXIgUz1NYXRoLnNxcnQoJCokK3EqcSksVj1TLTE7aWYoVjwwKXJldHVybltdO3ZhciBZPVYvUztyZXR1cm5bKFQtZykqWStnLChMLXgpKlkreF19LFMzPWZ1bmN0aW9uKGcseCxULEwsTyxQLCQpe3JldHVybiBnLT1PLHgtPVAsZy89VC8yKyQseC89TC8yKyQsZypnK3gqeDw9MX0sU2s9ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7dmFyIHE9W1QtZyxMLXhdLFM9W2ctTyx4LVBdLFY9cVswXSpxWzBdK3FbMV0qcVsxXSxZPTIqKFNbMF0qcVswXStTWzFdKnFbMV0pLHJ0PVNbMF0qU1swXStTWzFdKlNbMV0tJCokLG90PVkqWS00KlYqcnQ7aWYob3Q8MClyZXR1cm5bXTt2YXIgaHQ9KC1ZK01hdGguc3FydChvdCkpLygyKlYpLGR0PSgtWS1NYXRoLnNxcnQob3QpKS8oMipWKSxMdD1NYXRoLm1pbihodCxkdCksa3Q9TWF0aC5tYXgoaHQsZHQpLER0PVtdO2lmKEx0Pj0wJiZMdDw9MSYmRHQucHVzaChMdCksa3Q+PTAmJmt0PD0xJiZEdC5wdXNoKGt0KSxEdC5sZW5ndGg9PT0wKXJldHVybltdO3ZhciBQdD1EdFswXSpxWzBdK2csJHQ9RHRbMF0qcVsxXSt4O2lmKER0Lmxlbmd0aD4xKXtpZihEdFswXT09RHRbMV0pcmV0dXJuW1B0LCR0XTt2YXIgWnQ9RHRbMV0qcVswXStnLFl0PUR0WzFdKnFbMV0reDtyZXR1cm5bUHQsJHQsWnQsWXRdfWVsc2UgcmV0dXJuW1B0LCR0XX0sTEw9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4PD1nJiZnPD1UfHxUPD1nJiZnPD14P2c6Zzw9eCYmeDw9VHx8VDw9eCYmeDw9Zz94OlR9LHltPWZ1bmN0aW9uKGcseCxULEwsTyxQLCQscSxTKXt2YXIgVj1nLU8sWT1ULWcscnQ9JC1PLG90PXgtUCxodD1MLXgsZHQ9cS1QLEx0PXJ0Km90LWR0KlYsa3Q9WSpvdC1odCpWLER0PWR0KlktcnQqaHQ7aWYoRHQhPT0wKXt2YXIgUHQ9THQvRHQsJHQ9a3QvRHQsWnQ9LjAwMSxZdD0wLVp0LHF0PTErWnQ7cmV0dXJuIFl0PD1QdCYmUHQ8PXF0JiZZdDw9JHQmJiR0PD1xdD9bZytQdCpZLHgrUHQqaHRdOlM/W2crUHQqWSx4K1B0Kmh0XTpbXX1lbHNlIHJldHVybiBMdD09PTB8fGt0PT09MD9MTChnLFQsJCk9PT0kP1skLHFdOkxMKGcsVCxPKT09PU8/W08sUF06TEwoTywkLFQpPT09VD9bVCxMXTpbXTpbXX0sQWs9ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCxxKXt2YXIgUz1bXSxWLFk9bmV3IEFycmF5KFQubGVuZ3RoKSxydD0hMDtQPT1udWxsJiYocnQ9ITEpO3ZhciBvdDtpZihydCl7Zm9yKHZhciBodD0wO2h0PFkubGVuZ3RoLzI7aHQrKylZW2h0KjJdPVRbaHQqMl0qUCtMLFlbaHQqMisxXT1UW2h0KjIrMV0qJCtPO2lmKHE+MCl7dmFyIGR0PWdOKFksLXEpO290PWROKGR0KX1lbHNlIG90PVl9ZWxzZSBvdD1UO2Zvcih2YXIgTHQsa3QsRHQsUHQsJHQ9MDskdDxvdC5sZW5ndGgvMjskdCsrKUx0PW90WyR0KjJdLGt0PW90WyR0KjIrMV0sJHQ8b3QubGVuZ3RoLzItMT8oRHQ9b3RbKCR0KzEpKjJdLFB0PW90WygkdCsxKSoyKzFdKTooRHQ9b3RbMF0sUHQ9b3RbMV0pLFY9eW0oZyx4LEwsTyxMdCxrdCxEdCxQdCksVi5sZW5ndGghPT0wJiZTLnB1c2goVlswXSxWWzFdKTtyZXR1cm4gU30sWUs9ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCxxKXtmb3IodmFyIFM9W10sVixZPW5ldyBBcnJheShULmxlbmd0aCkscnQ9UC8yLG90PSQvMixodD1ETChQLCQpLGR0PTA7ZHQ8VC5sZW5ndGgvNDtkdCsrKXt2YXIgTHQ9dm9pZCAwLGt0PXZvaWQgMDtkdD09PTA/THQ9VC5sZW5ndGgtMjpMdD1kdCo0LTIsa3Q9ZHQqNCsyO3ZhciBEdD1MK3J0KlRbZHQqNF0sUHQ9TytvdCpUW2R0KjQrMV0sJHQ9LVRbTHRdKlRba3RdLVRbTHQrMV0qVFtrdCsxXSxadD1odC9NYXRoLnRhbihNYXRoLmFjb3MoJHQpLzIpLFl0PUR0LVp0KlRbTHRdLHF0PVB0LVp0KlRbTHQrMV0sbmU9RHQrWnQqVFtrdF0sR3Q9UHQrWnQqVFtrdCsxXTtkdD09PTA/KFlbVC5sZW5ndGgtMl09WXQsWVtULmxlbmd0aC0xXT1xdCk6KFlbZHQqNC0yXT1ZdCxZW2R0KjQtMV09cXQpLFlbZHQqNF09bmUsWVtkdCo0KzFdPUd0O3ZhciBnZT1UW0x0KzFdLGJlPS1UW0x0XSxpZT1nZSpUW2t0XStiZSpUW2t0KzFdO2llPDAmJihnZSo9LTEsYmUqPS0xKTt2YXIgRmU9WXQrZ2UqaHQsd2U9cXQrYmUqaHQ7Vj1TayhnLHgsTCxPLEZlLHdlLGh0KSxWLmxlbmd0aCE9PTAmJlMucHVzaChWWzBdLFZbMV0pfWZvcih2YXIgYm49MDtibjxZLmxlbmd0aC80O2JuKyspVj15bShnLHgsTCxPLFlbYm4qNF0sWVtibio0KzFdLFlbYm4qNCsyXSxZW2JuKjQrM10sITEpLFYubGVuZ3RoIT09MCYmUy5wdXNoKFZbMF0sVlsxXSk7aWYoUy5sZW5ndGg+Mil7Zm9yKHZhciB6ZT1bU1swXSxTWzFdXSxHZT1NYXRoLnBvdyh6ZVswXS1nLDIpK01hdGgucG93KHplWzFdLXgsMiksRW49MTtFbjxTLmxlbmd0aC8yO0VuKyspe3ZhciBJbj1NYXRoLnBvdyhTW0VuKjJdLWcsMikrTWF0aC5wb3coU1tFbioyKzFdLXgsMik7SW48PUdlJiYoemVbMF09U1tFbioyXSx6ZVsxXT1TW0VuKjIrMV0sR2U9SW4pfXJldHVybiB6ZX1yZXR1cm4gU30salQ9ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPVtnWzBdLXhbMF0sZ1sxXS14WzFdXSxPPU1hdGguc3FydChMWzBdKkxbMF0rTFsxXSpMWzFdKSxQPShPLVQpL087cmV0dXJuIFA8MCYmKFA9MWUtNSksW3hbMF0rUCpMWzBdLHhbMV0rUCpMWzFdXX0sc2Q9ZnVuY3Rpb24oZyx4KXt2YXIgVD1NTChnLHgpO3JldHVybiBUPXBOKFQpLFR9LHBOPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeCxULEw9Zy5sZW5ndGgvMixPPTEvMCxQPTEvMCwkPS0xLzAscT0tMS8wLFM9MDtTPEw7UysrKXg9Z1syKlNdLFQ9Z1syKlMrMV0sTz1NYXRoLm1pbihPLHgpLCQ9TWF0aC5tYXgoJCx4KSxQPU1hdGgubWluKFAsVCkscT1NYXRoLm1heChxLFQpO2Zvcih2YXIgVj0yLygkLU8pLFk9Mi8ocS1QKSxydD0wO3J0PEw7cnQrKyl4PWdbMipydF09Z1syKnJ0XSpWLFQ9Z1syKnJ0KzFdPWdbMipydCsxXSpZLE89TWF0aC5taW4oTyx4KSwkPU1hdGgubWF4KCQseCksUD1NYXRoLm1pbihQLFQpLHE9TWF0aC5tYXgocSxUKTtpZihQPC0xKWZvcih2YXIgb3Q9MDtvdDxMO290KyspVD1nWzIqb3QrMV09Z1syKm90KzFdKygtMS1QKTtyZXR1cm4gZ30sTUw9ZnVuY3Rpb24oZyx4KXt2YXIgVD0xL2cqMipNYXRoLlBJLEw9ZyUyPT09MD9NYXRoLlBJLzIrVC8yOk1hdGguUEkvMjtMKz14O2Zvcih2YXIgTz1uZXcgQXJyYXkoZyoyKSxQLCQ9MDskPGc7JCsrKVA9JCpUK0wsT1syKiRdPU1hdGguY29zKFApLE9bMiokKzFdPU1hdGguc2luKC1QKTtyZXR1cm4gT30sTGs9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gTWF0aC5taW4oZy80LHgvNCw4KX0sREw9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gTWF0aC5taW4oZy8xMCx4LzEwLDgpfSxiTj1mdW5jdGlvbigpe3JldHVybiA4fSxLSz1mdW5jdGlvbihnLHgsVCl7cmV0dXJuW2ctMip4K1QsMiooeC1nKSxnXX0sSUw9ZnVuY3Rpb24oZyx4KXtyZXR1cm57aGVpZ2h0T2Zmc2V0Ok1hdGgubWluKDE1LC4wNSp4KSx3aWR0aE9mZnNldDpNYXRoLm1pbigxMDAsLjI1KmcpLGN0cmxQdE9mZnNldFBjdDouMDV9fSxYSz1SZih7ZGFtcGluZ0ZhY3RvcjouOCxwcmVjaXNpb246MWUtNixpdGVyYXRpb25zOjIwMCx3ZWlnaHQ6ZnVuY3Rpb24oZyl7cmV0dXJuIDF9fSksUUs9e3BhZ2VSYW5rOmZ1bmN0aW9uKGcpe2Zvcih2YXIgeD1YSyhnKSxUPXguZGFtcGluZ0ZhY3RvcixMPXgucHJlY2lzaW9uLE89eC5pdGVyYXRpb25zLFA9eC53ZWlnaHQsJD10aGlzLl9wcml2YXRlLmN5LHE9dGhpcy5ieUdyb3VwKCksUz1xLm5vZGVzLFY9cS5lZGdlcyxZPVMubGVuZ3RoLHJ0PVkqWSxvdD1WLmxlbmd0aCxodD1uZXcgQXJyYXkocnQpLGR0PW5ldyBBcnJheShZKSxMdD0oMS1UKS9ZLGt0PTA7a3Q8WTtrdCsrKXtmb3IodmFyIER0PTA7RHQ8WTtEdCsrKXt2YXIgUHQ9a3QqWStEdDtodFtQdF09MH1kdFtrdF09MH1mb3IodmFyICR0PTA7JHQ8b3Q7JHQrKyl7dmFyIFp0PVZbJHRdLFl0PVp0LmRhdGEoInNvdXJjZSIpLHF0PVp0LmRhdGEoInRhcmdldCIpO2lmKFl0IT09cXQpe3ZhciBuZT1TLmluZGV4T2ZJZChZdCksR3Q9Uy5pbmRleE9mSWQocXQpLGdlPVAoWnQpLGJlPUd0KlkrbmU7aHRbYmVdKz1nZSxkdFtuZV0rPWdlfX1mb3IodmFyIGllPTEvWStMdCxGZT0wO0ZlPFk7RmUrKylpZihkdFtGZV09PT0wKWZvcih2YXIgd2U9MDt3ZTxZO3dlKyspe3ZhciBibj13ZSpZK0ZlO2h0W2JuXT1pZX1lbHNlIGZvcih2YXIgemU9MDt6ZTxZO3plKyspe3ZhciBHZT16ZSpZK0ZlO2h0W0dlXT1odFtHZV0vZHRbRmVdK0x0fWZvcih2YXIgRW49bmV3IEFycmF5KFkpLEluPW5ldyBBcnJheShZKSxZbixTbj0wO1NuPFk7U24rKylFbltTbl09MTtmb3IodmFyIFduPTA7V248TztXbisrKXtmb3IodmFyIHJyPTA7cnI8WTtycisrKUluW3JyXT0wO2Zvcih2YXIgd3I9MDt3cjxZO3dyKyspZm9yKHZhciB1cj0wO3VyPFk7dXIrKyl7dmFyIGVyPXdyKlkrdXI7SW5bd3JdKz1odFtlcl0qRW5bdXJdfU9LKEluKSxZbj1FbixFbj1JbixJbj1Zbjtmb3IodmFyIHZuPTAsZ3I9MDtncjxZO2dyKyspe3ZhciBmcj1Zbltncl0tRW5bZ3JdO3ZuKz1mcipmcn1pZih2bjxMKWJyZWFrfXZhciBKcj17cmFuazpmdW5jdGlvbihYcyl7cmV0dXJuIFhzPSQuY29sbGVjdGlvbihYcylbMF0sRW5bUy5pbmRleE9mKFhzKV19fTtyZXR1cm4gSnJ9fSx3Tj1SZih7cm9vdDpudWxsLHdlaWdodDpmdW5jdGlvbihnKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEsYWxwaGE6MH0pLFo1PXtkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihnKXtnPXdOKGcpO3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxMPVQubGVuZ3RoO2lmKGcuZGlyZWN0ZWQpe2Zvcih2YXIgVj17fSxZPXt9LHJ0PTAsb3Q9MCxodD0wO2h0PEw7aHQrKyl7dmFyIGR0PVRbaHRdLEx0PWR0LmlkKCk7Zy5yb290PWR0O3ZhciBrdD10aGlzLmRlZ3JlZUNlbnRyYWxpdHkoZyk7cnQ8a3QuaW5kZWdyZWUmJihydD1rdC5pbmRlZ3JlZSksb3Q8a3Qub3V0ZGVncmVlJiYob3Q9a3Qub3V0ZGVncmVlKSxWW0x0XT1rdC5pbmRlZ3JlZSxZW0x0XT1rdC5vdXRkZWdyZWV9cmV0dXJue2luZGVncmVlOmZ1bmN0aW9uKFB0KXtyZXR1cm4gcnQ9PTA/MDoobXQoUHQpJiYoUHQ9eC5maWx0ZXIoUHQpKSxWW1B0LmlkKCldL3J0KX0sb3V0ZGVncmVlOmZ1bmN0aW9uKFB0KXtyZXR1cm4gb3Q9PT0wPzA6KG10KFB0KSYmKFB0PXguZmlsdGVyKFB0KSksWVtQdC5pZCgpXS9vdCl9fX1lbHNle2Zvcih2YXIgTz17fSxQPTAsJD0wOyQ8TDskKyspe3ZhciBxPVRbJF07Zy5yb290PXE7dmFyIFM9dGhpcy5kZWdyZWVDZW50cmFsaXR5KGcpO1A8Uy5kZWdyZWUmJihQPVMuZGVncmVlKSxPW3EuaWQoKV09Uy5kZWdyZWV9cmV0dXJue2RlZ3JlZTpmdW5jdGlvbihQdCl7cmV0dXJuIFA9PT0wPzA6KG10KFB0KSYmKFB0PXguZmlsdGVyKFB0KSksT1tQdC5pZCgpXS9QKX19fX0sZGVncmVlQ2VudHJhbGl0eTpmdW5jdGlvbihnKXtnPXdOKGcpO3ZhciB4PXRoaXMuY3koKSxUPXRoaXMsTD1nLE89TC5yb290LFA9TC53ZWlnaHQsJD1MLmRpcmVjdGVkLHE9TC5hbHBoYTtpZihPPXguY29sbGVjdGlvbihPKVswXSwkKXtmb3IodmFyIG90PU8uY29ubmVjdGVkRWRnZXMoKSxodD1vdC5maWx0ZXIoZnVuY3Rpb24oWXQpe3JldHVybiBZdC50YXJnZXQoKS5zYW1lKE8pJiZULmhhcyhZdCl9KSxkdD1vdC5maWx0ZXIoZnVuY3Rpb24oWXQpe3JldHVybiBZdC5zb3VyY2UoKS5zYW1lKE8pJiZULmhhcyhZdCl9KSxMdD1odC5sZW5ndGgsa3Q9ZHQubGVuZ3RoLER0PTAsUHQ9MCwkdD0wOyR0PGh0Lmxlbmd0aDskdCsrKUR0Kz1QKGh0WyR0XSk7Zm9yKHZhciBadD0wO1p0PGR0Lmxlbmd0aDtadCsrKVB0Kz1QKGR0W1p0XSk7cmV0dXJue2luZGVncmVlOk1hdGgucG93KEx0LDEtcSkqTWF0aC5wb3coRHQscSksb3V0ZGVncmVlOk1hdGgucG93KGt0LDEtcSkqTWF0aC5wb3coUHQscSl9fWVsc2V7Zm9yKHZhciBTPU8uY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oVCksVj1TLmxlbmd0aCxZPTAscnQ9MDtydDxTLmxlbmd0aDtydCsrKVkrPVAoU1tydF0pO3JldHVybntkZWdyZWU6TWF0aC5wb3coViwxLXEpKk1hdGgucG93KFkscSl9fX19O1o1LmRjPVo1LmRlZ3JlZUNlbnRyYWxpdHksWjUuZGNuPVo1LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpc2VkPVo1LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkO3ZhciB2Tj1SZih7aGFybW9uaWM6ITAsd2VpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGRpcmVjdGVkOiExLHJvb3Q6bnVsbH0pLEo1PXtjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihnKXtmb3IodmFyIHg9dk4oZyksVD14Lmhhcm1vbmljLEw9eC53ZWlnaHQsTz14LmRpcmVjdGVkLFA9dGhpcy5jeSgpLCQ9e30scT0wLFM9dGhpcy5ub2RlcygpLFY9dGhpcy5mbG95ZFdhcnNoYWxsKHt3ZWlnaHQ6TCxkaXJlY3RlZDpPfSksWT0wO1k8Uy5sZW5ndGg7WSsrKXtmb3IodmFyIHJ0PTAsb3Q9U1tZXSxodD0wO2h0PFMubGVuZ3RoO2h0KyspaWYoWSE9PWh0KXt2YXIgZHQ9Vi5kaXN0YW5jZShvdCxTW2h0XSk7VD9ydCs9MS9kdDpydCs9ZHR9VHx8KHJ0PTEvcnQpLHE8cnQmJihxPXJ0KSwkW290LmlkKCldPXJ0fXJldHVybntjbG9zZW5lc3M6ZnVuY3Rpb24oa3Qpe3JldHVybiBxPT0wPzA6KG10KGt0KT9rdD1QLmZpbHRlcihrdClbMF0uaWQoKTprdD1rdC5pZCgpLCRba3RdL3EpfX19LGNsb3NlbmVzc0NlbnRyYWxpdHk6ZnVuY3Rpb24oZyl7dmFyIHg9dk4oZyksVD14LnJvb3QsTD14LndlaWdodCxPPXguZGlyZWN0ZWQsUD14Lmhhcm1vbmljO1Q9dGhpcy5maWx0ZXIoVClbMF07Zm9yKHZhciAkPXRoaXMuZGlqa3N0cmEoe3Jvb3Q6VCx3ZWlnaHQ6TCxkaXJlY3RlZDpPfSkscT0wLFM9dGhpcy5ub2RlcygpLFY9MDtWPFMubGVuZ3RoO1YrKyl7dmFyIFk9U1tWXTtpZighWS5zYW1lKFQpKXt2YXIgcnQ9JC5kaXN0YW5jZVRvKFkpO1A/cSs9MS9ydDpxKz1ydH19cmV0dXJuIFA/cToxL3F9fTtKNS5jYz1KNS5jbG9zZW5lc3NDZW50cmFsaXR5LEo1LmNjbj1KNS5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXNlZD1KNS5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDt2YXIgWks9UmYoe3dlaWdodDpudWxsLGRpcmVjdGVkOiExfSksT0w9e2JldHdlZW5uZXNzQ2VudHJhbGl0eTpmdW5jdGlvbihnKXtmb3IodmFyIHg9WksoZyksVD14LmRpcmVjdGVkLEw9eC53ZWlnaHQsTz1MIT1udWxsLFA9dGhpcy5jeSgpLCQ9dGhpcy5ub2RlcygpLHE9e30sUz17fSxWPTAsWT17c2V0OmZ1bmN0aW9uKFB0LCR0KXtTW1B0XT0kdCwkdD5WJiYoVj0kdCl9LGdldDpmdW5jdGlvbihQdCl7cmV0dXJuIFNbUHRdfX0scnQ9MDtydDwkLmxlbmd0aDtydCsrKXt2YXIgb3Q9JFtydF0saHQ9b3QuaWQoKTtUP3FbaHRdPW90Lm91dGdvZXJzKCkubm9kZXMoKTpxW2h0XT1vdC5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKSxZLnNldChodCwwKX1mb3IodmFyIGR0PWZ1bmN0aW9uKFB0KXtmb3IodmFyICR0PSRbUHRdLmlkKCksWnQ9W10sWXQ9e30scXQ9e30sbmU9e30sR3Q9bmV3IENrKGZ1bmN0aW9uKHVyLGVyKXtyZXR1cm4gbmVbdXJdLW5lW2VyXX0pLGdlPTA7Z2U8JC5sZW5ndGg7Z2UrKyl7dmFyIGJlPSRbZ2VdLmlkKCk7WXRbYmVdPVtdLHF0W2JlXT0wLG5lW2JlXT0xLzB9Zm9yKHF0WyR0XT0xLG5lWyR0XT0wLEd0LnB1c2goJHQpOyFHdC5lbXB0eSgpOyl7dmFyIGllPUd0LnBvcCgpO2lmKFp0LnB1c2goaWUpLE8pZm9yKHZhciBGZT0wO0ZlPHFbaWVdLmxlbmd0aDtGZSsrKXt2YXIgd2U9cVtpZV1bRmVdLGJuPVAuZ2V0RWxlbWVudEJ5SWQoaWUpLHplPXZvaWQgMDtibi5lZGdlc1RvKHdlKS5sZW5ndGg+MD96ZT1ibi5lZGdlc1RvKHdlKVswXTp6ZT13ZS5lZGdlc1RvKGJuKVswXTt2YXIgR2U9TCh6ZSk7d2U9d2UuaWQoKSxuZVt3ZV0+bmVbaWVdK0dlJiYobmVbd2VdPW5lW2llXStHZSxHdC5ub2Rlcy5pbmRleE9mKHdlKTwwP0d0LnB1c2god2UpOkd0LnVwZGF0ZUl0ZW0od2UpLHF0W3dlXT0wLFl0W3dlXT1bXSksbmVbd2VdPT1uZVtpZV0rR2UmJihxdFt3ZV09cXRbd2VdK3F0W2llXSxZdFt3ZV0ucHVzaChpZSkpfWVsc2UgZm9yKHZhciBFbj0wO0VuPHFbaWVdLmxlbmd0aDtFbisrKXt2YXIgSW49cVtpZV1bRW5dLmlkKCk7bmVbSW5dPT0xLzAmJihHdC5wdXNoKEluKSxuZVtJbl09bmVbaWVdKzEpLG5lW0luXT09bmVbaWVdKzEmJihxdFtJbl09cXRbSW5dK3F0W2llXSxZdFtJbl0ucHVzaChpZSkpfX1mb3IodmFyIFluPXt9LFNuPTA7U248JC5sZW5ndGg7U24rKylZblskW1NuXS5pZCgpXT0wO2Zvcig7WnQubGVuZ3RoPjA7KXtmb3IodmFyIFduPVp0LnBvcCgpLHJyPTA7cnI8WXRbV25dLmxlbmd0aDtycisrKXt2YXIgd3I9WXRbV25dW3JyXTtZblt3cl09WW5bd3JdK3F0W3dyXS9xdFtXbl0qKDErWW5bV25dKX1XbiE9JFtQdF0uaWQoKSYmWS5zZXQoV24sWS5nZXQoV24pK1luW1duXSl9fSxMdD0wO0x0PCQubGVuZ3RoO0x0KyspZHQoTHQpO3ZhciBrdD17YmV0d2Vlbm5lc3M6ZnVuY3Rpb24oUHQpe3ZhciAkdD1QLmNvbGxlY3Rpb24oUHQpLmlkKCk7cmV0dXJuIFkuZ2V0KCR0KX0sYmV0d2Vlbm5lc3NOb3JtYWxpemVkOmZ1bmN0aW9uKFB0KXtpZihWPT0wKXJldHVybiAwO3ZhciAkdD1QLmNvbGxlY3Rpb24oUHQpLmlkKCk7cmV0dXJuIFkuZ2V0KCR0KS9WfX07cmV0dXJuIGt0LmJldHdlZW5uZXNzTm9ybWFsaXNlZD1rdC5iZXR3ZWVubmVzc05vcm1hbGl6ZWQsa3R9fTtPTC5iYz1PTC5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7dmFyIEpLPVJmKHtleHBhbmRGYWN0b3I6MixpbmZsYXRlRmFjdG9yOjIsbXVsdEZhY3RvcjoxLG1heEl0ZXJhdGlvbnM6MjAsYXR0cmlidXRlczpbZnVuY3Rpb24oeSl7cmV0dXJuIDF9XX0pLHRYPWZ1bmN0aW9uKGcpe3JldHVybiBKSyhnKX0sZVg9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MCxMPTA7TDx4Lmxlbmd0aDtMKyspVCs9eFtMXShnKTtyZXR1cm4gVH0sblg9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD0wO0w8eDtMKyspZ1tMKngrTF09VH0sbU49ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQsTD0wO0w8eDtMKyspe1Q9MDtmb3IodmFyIE89MDtPPHg7TysrKVQrPWdbTyp4K0xdO2Zvcih2YXIgUD0wO1A8eDtQKyspZ1tQKngrTF09Z1tQKngrTF0vVH19LHJYPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9bmV3IEFycmF5KFQqVCksTz0wO088VDtPKyspe2Zvcih2YXIgUD0wO1A8VDtQKyspTFtPKlQrUF09MDtmb3IodmFyICQ9MDskPFQ7JCsrKWZvcih2YXIgcT0wO3E8VDtxKyspTFtPKlQrcV0rPWdbTypUKyRdKnhbJCpUK3FdfXJldHVybiBMfSxpWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPWcuc2xpY2UoMCksTz0xO088VDtPKyspZz1yWChnLEwseCk7cmV0dXJuIGd9LHNYPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9bmV3IEFycmF5KHgqeCksTz0wO088eCp4O08rKylMW09dPU1hdGgucG93KGdbT10sVCk7cmV0dXJuIG1OKEwseCksTH0seU49ZnVuY3Rpb24oZyx4LFQsTCl7Zm9yKHZhciBPPTA7TzxUO08rKyl7dmFyIFA9TWF0aC5yb3VuZChnW09dKk1hdGgucG93KDEwLEwpKS9NYXRoLnBvdygxMCxMKSwkPU1hdGgucm91bmQoeFtPXSpNYXRoLnBvdygxMCxMKSkvTWF0aC5wb3coMTAsTCk7aWYoUCE9PSQpcmV0dXJuITF9cmV0dXJuITB9LGFYPWZ1bmN0aW9uKGcseCxULEwpe2Zvcih2YXIgTz1bXSxQPTA7UDx4O1ArKyl7Zm9yKHZhciAkPVtdLHE9MDtxPHg7cSsrKU1hdGgucm91bmQoZ1tQKngrcV0qMWUzKS8xZTM+MCYmJC5wdXNoKFRbcV0pOyQubGVuZ3RoIT09MCYmTy5wdXNoKEwuY29sbGVjdGlvbigkKSl9cmV0dXJuIE99LG9YPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPTA7VDxnLmxlbmd0aDtUKyspaWYoIXhbVF18fGdbVF0uaWQoKSE9PXhbVF0uaWQoKSlyZXR1cm4hMTtyZXR1cm4hMH0sY1g9ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PTA7eDxnLmxlbmd0aDt4KyspZm9yKHZhciBUPTA7VDxnLmxlbmd0aDtUKyspeCE9VCYmb1goZ1t4XSxnW1RdKSYmZy5zcGxpY2UoVCwxKTtyZXR1cm4gZ30seE49ZnVuY3Rpb24oZyl7Zm9yKHZhciB4PXRoaXMubm9kZXMoKSxUPXRoaXMuZWRnZXMoKSxMPXRoaXMuY3koKSxPPXRYKGcpLFA9e30sJD0wOyQ8eC5sZW5ndGg7JCsrKVBbeFskXS5pZCgpXT0kO2Zvcih2YXIgcT14Lmxlbmd0aCxTPXEqcSxWPW5ldyBBcnJheShTKSxZLHJ0PTA7cnQ8UztydCsrKVZbcnRdPTA7Zm9yKHZhciBvdD0wO290PFQubGVuZ3RoO290Kyspe3ZhciBodD1UW290XSxkdD1QW2h0LnNvdXJjZSgpLmlkKCldLEx0PVBbaHQudGFyZ2V0KCkuaWQoKV0sa3Q9ZVgoaHQsTy5hdHRyaWJ1dGVzKTtWW2R0KnErTHRdKz1rdCxWW0x0KnErZHRdKz1rdH1uWChWLHEsTy5tdWx0RmFjdG9yKSxtTihWLHEpO2Zvcih2YXIgRHQ9ITAsUHQ9MDtEdCYmUHQ8Ty5tYXhJdGVyYXRpb25zOylEdD0hMSxZPWlYKFYscSxPLmV4cGFuZEZhY3RvciksVj1zWChZLHEsTy5pbmZsYXRlRmFjdG9yKSx5TihWLFksUyw0KXx8KER0PSEwKSxQdCsrO3ZhciAkdD1hWChWLHEseCxMKTtyZXR1cm4gJHQ9Y1goJHQpLCR0fSx1WD17bWFya292Q2x1c3RlcmluZzp4TixtY2w6eE59LGxYPWZ1bmN0aW9uKGcpe3JldHVybiBnfSxrTj1mdW5jdGlvbihnLHgpe3JldHVybiBNYXRoLmFicyh4LWcpfSxFTj1mdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcra04oeCxUKX0sVE49ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBnK01hdGgucG93KFQteCwyKX0saFg9ZnVuY3Rpb24oZyl7cmV0dXJuIE1hdGguc3FydChnKX0sZlg9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLm1heChnLGtOKHgsVCkpfSxNaz1mdW5jdGlvbihnLHgsVCxMLE8pe2Zvcih2YXIgUD1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06bFgsJD1MLHEsUyxWPTA7VjxnO1YrKylxPXgoViksUz1UKFYpLCQ9TygkLHEsUyk7cmV0dXJuIFAoJCl9LHR4PXtldWNsaWRlYW46ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBnPj0yP01rKGcseCxULDAsVE4saFgpOk1rKGcseCxULDAsRU4pfSxzcXVhcmVkRXVjbGlkZWFuOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gTWsoZyx4LFQsMCxUTil9LG1hbmhhdHRhbjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIE1rKGcseCxULDAsRU4pfSxtYXg6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNayhnLHgsVCwtMS8wLGZYKX19O3R4WyJzcXVhcmVkLWV1Y2xpZGVhbiJdPXR4LnNxdWFyZWRFdWNsaWRlYW4sdHguc3F1YXJlZGV1Y2xpZGVhbj10eC5zcXVhcmVkRXVjbGlkZWFuO2Z1bmN0aW9uICRUKHksZyx4LFQsTCxPKXt2YXIgUDtyZXR1cm4geXQoeSk/UD15OlA9dHhbeV18fHR4LmV1Y2xpZGVhbixnPT09MCYmeXQoeSk/UChMLE8pOlAoZyx4LFQsTCxPKX12YXIgZFg9UmYoe2s6MixtOjIsc2Vuc2l0aXZpdHlUaHJlc2hvbGQ6MWUtNCxkaXN0YW5jZToiZXVjbGlkZWFuIixtYXhJdGVyYXRpb25zOjEwLGF0dHJpYnV0ZXM6W10sdGVzdE1vZGU6ITEsdGVzdENlbnRyb2lkczpudWxsfSksUEw9ZnVuY3Rpb24oZyl7cmV0dXJuIGRYKGcpfSx6VD1mdW5jdGlvbihnLHgsVCxMLE8pe3ZhciBQPU8hPT0ia01lZG9pZHMiLCQ9UD9mdW5jdGlvbihZKXtyZXR1cm4gVFtZXX06ZnVuY3Rpb24oWSl7cmV0dXJuIExbWV0oVCl9LHE9ZnVuY3Rpb24ocnQpe3JldHVybiBMW3J0XSh4KX0sUz1ULFY9eDtyZXR1cm4gJFQoZyxMLmxlbmd0aCwkLHEsUyxWKX0sRkw9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD1ULmxlbmd0aCxPPW5ldyBBcnJheShMKSxQPW5ldyBBcnJheShMKSwkPW5ldyBBcnJheSh4KSxxPW51bGwsUz0wO1M8TDtTKyspT1tTXT1nLm1pbihUW1NdKS52YWx1ZSxQW1NdPWcubWF4KFRbU10pLnZhbHVlO2Zvcih2YXIgVj0wO1Y8eDtWKyspe3E9W107Zm9yKHZhciBZPTA7WTxMO1krKylxW1ldPU1hdGgucmFuZG9tKCkqKFBbWV0tT1tZXSkrT1tZXTskW1ZdPXF9cmV0dXJuICR9LENOPWZ1bmN0aW9uKGcseCxULEwsTyl7Zm9yKHZhciBQPTEvMCwkPTAscT0wO3E8eC5sZW5ndGg7cSsrKXt2YXIgUz16VChULGcseFtxXSxMLE8pO1M8UCYmKFA9UywkPXEpfXJldHVybiAkfSxfTj1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPVtdLE89bnVsbCxQPTA7UDx4Lmxlbmd0aDtQKyspTz14W1BdLFRbTy5pZCgpXT09PWcmJkwucHVzaChPKTtyZXR1cm4gTH0sZ1g9ZnVuY3Rpb24oZyx4LFQpe3JldHVybiBNYXRoLmFicyh4LWcpPD1UfSxwWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPTA7TDxnLmxlbmd0aDtMKyspZm9yKHZhciBPPTA7TzxnW0xdLmxlbmd0aDtPKyspe3ZhciBQPU1hdGguYWJzKGdbTF1bT10teFtMXVtPXSk7aWYoUD5UKXJldHVybiExfXJldHVybiEwfSxiWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPTA7TDxUO0wrKylpZihnPT09eFtMXSlyZXR1cm4hMDtyZXR1cm4hMX0sU049ZnVuY3Rpb24oZyx4KXt2YXIgVD1uZXcgQXJyYXkoeCk7aWYoZy5sZW5ndGg8NTApZm9yKHZhciBMPTA7TDx4O0wrKyl7Zm9yKHZhciBPPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07YlgoTyxULEwpOylPPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07VFtMXT1PfWVsc2UgZm9yKHZhciBQPTA7UDx4O1ArKylUW1BdPWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmcubGVuZ3RoKV07cmV0dXJuIFR9LEFOPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9MCxPPTA7Tzx4Lmxlbmd0aDtPKyspTCs9elQoIm1hbmhhdHRhbiIseFtPXSxnLFQsImtNZWRvaWRzIik7cmV0dXJuIEx9LHdYPWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxMPW51bGwsTz1QTChnKSxQPW5ldyBBcnJheShPLmspLCQ9e30scTtPLnRlc3RNb2RlP3R5cGVvZiBPLnRlc3RDZW50cm9pZHM9PSJudW1iZXIiPyhPLnRlc3RDZW50cm9pZHMscT1GTChULE8uayxPLmF0dHJpYnV0ZXMpKTpmKE8udGVzdENlbnRyb2lkcyk9PT0ib2JqZWN0Ij9xPU8udGVzdENlbnRyb2lkczpxPUZMKFQsTy5rLE8uYXR0cmlidXRlcyk6cT1GTChULE8uayxPLmF0dHJpYnV0ZXMpO2Zvcih2YXIgUz0hMCxWPTA7UyYmVjxPLm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIFk9MDtZPFQubGVuZ3RoO1krKylMPVRbWV0sJFtMLmlkKCldPUNOKEwscSxPLmRpc3RhbmNlLE8uYXR0cmlidXRlcywia01lYW5zIik7Uz0hMTtmb3IodmFyIHJ0PTA7cnQ8Ty5rO3J0Kyspe3ZhciBvdD1fTihydCxULCQpO2lmKG90Lmxlbmd0aCE9PTApe2Zvcih2YXIgaHQ9Ty5hdHRyaWJ1dGVzLmxlbmd0aCxkdD1xW3J0XSxMdD1uZXcgQXJyYXkoaHQpLGt0PW5ldyBBcnJheShodCksRHQ9MDtEdDxodDtEdCsrKXtrdFtEdF09MDtmb3IodmFyIFB0PTA7UHQ8b3QubGVuZ3RoO1B0KyspTD1vdFtQdF0sa3RbRHRdKz1PLmF0dHJpYnV0ZXNbRHRdKEwpO0x0W0R0XT1rdFtEdF0vb3QubGVuZ3RoLGdYKEx0W0R0XSxkdFtEdF0sTy5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChTPSEwKX1xW3J0XT1MdCxQW3J0XT14LmNvbGxlY3Rpb24ob3QpfX1WKyt9cmV0dXJuIFB9LHZYPWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuY3koKSxUPXRoaXMubm9kZXMoKSxMPW51bGwsTz1QTChnKSxQPW5ldyBBcnJheShPLmspLCQscT17fSxTLFY9bmV3IEFycmF5KE8uayk7Ty50ZXN0TW9kZT90eXBlb2YgTy50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyInx8KGYoTy50ZXN0Q2VudHJvaWRzKT09PSJvYmplY3QiPyQ9Ty50ZXN0Q2VudHJvaWRzOiQ9U04oVCxPLmspKTokPVNOKFQsTy5rKTtmb3IodmFyIFk9ITAscnQ9MDtZJiZydDxPLm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIG90PTA7b3Q8VC5sZW5ndGg7b3QrKylMPVRbb3RdLHFbTC5pZCgpXT1DTihMLCQsTy5kaXN0YW5jZSxPLmF0dHJpYnV0ZXMsImtNZWRvaWRzIik7WT0hMTtmb3IodmFyIGh0PTA7aHQ8JC5sZW5ndGg7aHQrKyl7dmFyIGR0PV9OKGh0LFQscSk7aWYoZHQubGVuZ3RoIT09MCl7VltodF09QU4oJFtodF0sZHQsTy5hdHRyaWJ1dGVzKTtmb3IodmFyIEx0PTA7THQ8ZHQubGVuZ3RoO0x0KyspUz1BTihkdFtMdF0sZHQsTy5hdHRyaWJ1dGVzKSxTPFZbaHRdJiYoVltodF09UywkW2h0XT1kdFtMdF0sWT0hMCk7UFtodF09eC5jb2xsZWN0aW9uKGR0KX19cnQrK31yZXR1cm4gUH0sbVg9ZnVuY3Rpb24oZyx4LFQsTCxPKXtmb3IodmFyIFAsJCxxPTA7cTx4Lmxlbmd0aDtxKyspZm9yKHZhciBTPTA7UzxnLmxlbmd0aDtTKyspTFtxXVtTXT1NYXRoLnBvdyhUW3FdW1NdLE8ubSk7Zm9yKHZhciBWPTA7VjxnLmxlbmd0aDtWKyspZm9yKHZhciBZPTA7WTxPLmF0dHJpYnV0ZXMubGVuZ3RoO1krKyl7UD0wLCQ9MDtmb3IodmFyIHJ0PTA7cnQ8eC5sZW5ndGg7cnQrKylQKz1MW3J0XVtWXSpPLmF0dHJpYnV0ZXNbWV0oeFtydF0pLCQrPUxbcnRdW1ZdO2dbVl1bWV09UC8kfX0seVg9ZnVuY3Rpb24oZyx4LFQsTCxPKXtmb3IodmFyIFA9MDtQPGcubGVuZ3RoO1ArKyl4W1BdPWdbUF0uc2xpY2UoKTtmb3IodmFyICQscSxTLFY9Mi8oTy5tLTEpLFk9MDtZPFQubGVuZ3RoO1krKylmb3IodmFyIHJ0PTA7cnQ8TC5sZW5ndGg7cnQrKyl7JD0wO2Zvcih2YXIgb3Q9MDtvdDxULmxlbmd0aDtvdCsrKXE9elQoTy5kaXN0YW5jZSxMW3J0XSxUW1ldLE8uYXR0cmlidXRlcywiY21lYW5zIiksUz16VChPLmRpc3RhbmNlLExbcnRdLFRbb3RdLE8uYXR0cmlidXRlcywiY21lYW5zIiksJCs9TWF0aC5wb3cocS9TLFYpO2dbcnRdW1ldPTEvJH19LHhYPWZ1bmN0aW9uKGcseCxULEwpe2Zvcih2YXIgTz1uZXcgQXJyYXkoVC5rKSxQPTA7UDxPLmxlbmd0aDtQKyspT1tQXT1bXTtmb3IodmFyICQscSxTPTA7Uzx4Lmxlbmd0aDtTKyspeyQ9LTEvMCxxPS0xO2Zvcih2YXIgVj0wO1Y8eFswXS5sZW5ndGg7VisrKXhbU11bVl0+JCYmKCQ9eFtTXVtWXSxxPVYpO09bcV0ucHVzaChnW1NdKX1mb3IodmFyIFk9MDtZPE8ubGVuZ3RoO1krKylPW1ldPUwuY29sbGVjdGlvbihPW1ldKTtyZXR1cm4gT30sTE49ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpLFQ9dGhpcy5ub2RlcygpLEw9UEwoZyksTyxQLCQscSxTO3E9bmV3IEFycmF5KFQubGVuZ3RoKTtmb3IodmFyIFY9MDtWPFQubGVuZ3RoO1YrKylxW1ZdPW5ldyBBcnJheShMLmspOyQ9bmV3IEFycmF5KFQubGVuZ3RoKTtmb3IodmFyIFk9MDtZPFQubGVuZ3RoO1krKykkW1ldPW5ldyBBcnJheShMLmspO2Zvcih2YXIgcnQ9MDtydDxULmxlbmd0aDtydCsrKXtmb3IodmFyIG90PTAsaHQ9MDtodDxMLms7aHQrKykkW3J0XVtodF09TWF0aC5yYW5kb20oKSxvdCs9JFtydF1baHRdO2Zvcih2YXIgZHQ9MDtkdDxMLms7ZHQrKykkW3J0XVtkdF09JFtydF1bZHRdL290fVA9bmV3IEFycmF5KEwuayk7Zm9yKHZhciBMdD0wO0x0PEwuaztMdCsrKVBbTHRdPW5ldyBBcnJheShMLmF0dHJpYnV0ZXMubGVuZ3RoKTtTPW5ldyBBcnJheShULmxlbmd0aCk7Zm9yKHZhciBrdD0wO2t0PFQubGVuZ3RoO2t0KyspU1trdF09bmV3IEFycmF5KEwuayk7Zm9yKHZhciBEdD0hMCxQdD0wO0R0JiZQdDxMLm1heEl0ZXJhdGlvbnM7KUR0PSExLG1YKFAsVCwkLFMsTCkseVgoJCxxLFAsVCxMKSxwWCgkLHEsTC5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChEdD0hMCksUHQrKztyZXR1cm4gTz14WChULCQsTCx4KSx7Y2x1c3RlcnM6TyxkZWdyZWVPZk1lbWJlcnNoaXA6JH19LGtYPXtrTWVhbnM6d1gsa01lZG9pZHM6dlgsZnV6enlDTWVhbnM6TE4sZmNtOkxOfSxFWD1SZih7ZGlzdGFuY2U6ImV1Y2xpZGVhbiIsbGlua2FnZToibWluIixtb2RlOiJ0aHJlc2hvbGQiLHRocmVzaG9sZDoxLzAsYWRkRGVuZHJvZ3JhbTohMSxkZW5kcm9ncmFtRGVwdGg6MCxhdHRyaWJ1dGVzOltdfSksVFg9e3NpbmdsZToibWluIixjb21wbGV0ZToibWF4In0sQ1g9ZnVuY3Rpb24oZyl7dmFyIHg9RVgoZyksVD1UWFt4LmxpbmthZ2VdO3JldHVybiBUIT1udWxsJiYoeC5saW5rYWdlPVQpLHh9LE1OPWZ1bmN0aW9uKGcseCxULEwsTyl7Zm9yKHZhciBQPTAsJD0xLzAscSxTPU8uYXR0cmlidXRlcyxWPWZ1bmN0aW9uKEd0LGdlKXtyZXR1cm4gJFQoTy5kaXN0YW5jZSxTLmxlbmd0aCxmdW5jdGlvbihiZSl7cmV0dXJuIFNbYmVdKEd0KX0sZnVuY3Rpb24oYmUpe3JldHVybiBTW2JlXShnZSl9LEd0LGdlKX0sWT0wO1k8Zy5sZW5ndGg7WSsrKXt2YXIgcnQ9Z1tZXS5rZXksb3Q9VFtydF1bTFtydF1dO290PCQmJihQPXJ0LCQ9b3QpfWlmKE8ubW9kZT09PSJ0aHJlc2hvbGQiJiYkPj1PLnRocmVzaG9sZHx8Ty5tb2RlPT09ImRlbmRyb2dyYW0iJiZnLmxlbmd0aD09PTEpcmV0dXJuITE7dmFyIGh0PXhbUF0sZHQ9eFtMW1BdXSxMdDtPLm1vZGU9PT0iZGVuZHJvZ3JhbSI/THQ9e2xlZnQ6aHQscmlnaHQ6ZHQsa2V5Omh0LmtleX06THQ9e3ZhbHVlOmh0LnZhbHVlLmNvbmNhdChkdC52YWx1ZSksa2V5Omh0LmtleX0sZ1todC5pbmRleF09THQsZy5zcGxpY2UoZHQuaW5kZXgsMSkseFtodC5rZXldPUx0O2Zvcih2YXIga3Q9MDtrdDxnLmxlbmd0aDtrdCsrKXt2YXIgRHQ9Z1trdF07aHQua2V5PT09RHQua2V5P3E9MS8wOk8ubGlua2FnZT09PSJtaW4iPyhxPVRbaHQua2V5XVtEdC5rZXldLFRbaHQua2V5XVtEdC5rZXldPlRbZHQua2V5XVtEdC5rZXldJiYocT1UW2R0LmtleV1bRHQua2V5XSkpOk8ubGlua2FnZT09PSJtYXgiPyhxPVRbaHQua2V5XVtEdC5rZXldLFRbaHQua2V5XVtEdC5rZXldPFRbZHQua2V5XVtEdC5rZXldJiYocT1UW2R0LmtleV1bRHQua2V5XSkpOk8ubGlua2FnZT09PSJtZWFuIj9xPShUW2h0LmtleV1bRHQua2V5XSpodC5zaXplK1RbZHQua2V5XVtEdC5rZXldKmR0LnNpemUpLyhodC5zaXplK2R0LnNpemUpOk8ubW9kZT09PSJkZW5kcm9ncmFtIj9xPVYoRHQudmFsdWUsaHQudmFsdWUpOnE9VihEdC52YWx1ZVswXSxodC52YWx1ZVswXSksVFtodC5rZXldW0R0LmtleV09VFtEdC5rZXldW2h0LmtleV09cX1mb3IodmFyIFB0PTA7UHQ8Zy5sZW5ndGg7UHQrKyl7dmFyICR0PWdbUHRdLmtleTtpZihMWyR0XT09PWh0LmtleXx8TFskdF09PT1kdC5rZXkpe2Zvcih2YXIgWnQ9JHQsWXQ9MDtZdDxnLmxlbmd0aDtZdCsrKXt2YXIgcXQ9Z1tZdF0ua2V5O1RbJHRdW3F0XTxUWyR0XVtadF0mJihadD1xdCl9TFskdF09WnR9Z1tQdF0uaW5kZXg9UHR9cmV0dXJuIGh0LmtleT1kdC5rZXk9aHQuaW5kZXg9ZHQuaW5kZXg9bnVsbCwhMH0scVQ9ZnVuY3Rpb24geShnLHgsVCl7ZyYmKGcudmFsdWU/eC5wdXNoKGcudmFsdWUpOihnLmxlZnQmJnkoZy5sZWZ0LHgpLGcucmlnaHQmJnkoZy5yaWdodCx4KSkpfSxfWD1mdW5jdGlvbiB5KGcseCl7aWYoIWcpcmV0dXJuIiI7aWYoZy5sZWZ0JiZnLnJpZ2h0KXt2YXIgVD15KGcubGVmdCx4KSxMPXkoZy5yaWdodCx4KSxPPXguYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e2lkOlQrIiwiK0x9fSk7cmV0dXJuIHguYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTpULHRhcmdldDpPLmlkKCl9fSkseC5hZGQoe2dyb3VwOiJlZGdlcyIsZGF0YTp7c291cmNlOkwsdGFyZ2V0Ok8uaWQoKX19KSxPLmlkKCl9ZWxzZSBpZihnLnZhbHVlKXJldHVybiBnLnZhbHVlLmlkKCl9LFNYPWZ1bmN0aW9uIHkoZyx4LFQpe2lmKCFnKXJldHVybltdO3ZhciBMPVtdLE89W10sUD1bXTtyZXR1cm4geD09PTA/KGcubGVmdCYmcVQoZy5sZWZ0LEwpLGcucmlnaHQmJnFUKGcucmlnaHQsTyksUD1MLmNvbmNhdChPKSxbVC5jb2xsZWN0aW9uKFApXSk6eD09PTE/Zy52YWx1ZT9bVC5jb2xsZWN0aW9uKGcudmFsdWUpXTooZy5sZWZ0JiZxVChnLmxlZnQsTCksZy5yaWdodCYmcVQoZy5yaWdodCxPKSxbVC5jb2xsZWN0aW9uKEwpLFQuY29sbGVjdGlvbihPKV0pOmcudmFsdWU/W1QuY29sbGVjdGlvbihnLnZhbHVlKV06KGcubGVmdCYmKEw9eShnLmxlZnQseC0xLFQpKSxnLnJpZ2h0JiYoTz15KGcucmlnaHQseC0xLFQpKSxMLmNvbmNhdChPKSl9LEROPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD10aGlzLmN5KCksVD10aGlzLm5vZGVzKCksTD1DWChnKSxPPUwuYXR0cmlidXRlcyxQPWZ1bmN0aW9uKFB0LCR0KXtyZXR1cm4gJFQoTC5kaXN0YW5jZSxPLmxlbmd0aCxmdW5jdGlvbihadCl7cmV0dXJuIE9bWnRdKFB0KX0sZnVuY3Rpb24oWnQpe3JldHVybiBPW1p0XSgkdCl9LFB0LCR0KX0sJD1bXSxxPVtdLFM9W10sVj1bXSxZPTA7WTxULmxlbmd0aDtZKyspe3ZhciBydD17dmFsdWU6TC5tb2RlPT09ImRlbmRyb2dyYW0iP1RbWV06W1RbWV1dLGtleTpZLGluZGV4Oll9OyRbWV09cnQsVltZXT1ydCxxW1ldPVtdLFNbWV09MH1mb3IodmFyIG90PTA7b3Q8JC5sZW5ndGg7b3QrKylmb3IodmFyIGh0PTA7aHQ8PW90O2h0Kyspe3ZhciBkdD12b2lkIDA7TC5tb2RlPT09ImRlbmRyb2dyYW0iP2R0PW90PT09aHQ/MS8wOlAoJFtvdF0udmFsdWUsJFtodF0udmFsdWUpOmR0PW90PT09aHQ/MS8wOlAoJFtvdF0udmFsdWVbMF0sJFtodF0udmFsdWVbMF0pLHFbb3RdW2h0XT1kdCxxW2h0XVtvdF09ZHQsZHQ8cVtvdF1bU1tvdF1dJiYoU1tvdF09aHQpfWZvcih2YXIgTHQ9TU4oJCxWLHEsUyxMKTtMdDspTHQ9TU4oJCxWLHEsUyxMKTt2YXIga3Q7cmV0dXJuIEwubW9kZT09PSJkZW5kcm9ncmFtIj8oa3Q9U1goJFswXSxMLmRlbmRyb2dyYW1EZXB0aCx4KSxMLmFkZERlbmRyb2dyYW0mJl9YKCRbMF0seCkpOihrdD1uZXcgQXJyYXkoJC5sZW5ndGgpLCQuZm9yRWFjaChmdW5jdGlvbihEdCxQdCl7RHQua2V5PUR0LmluZGV4PW51bGwsa3RbUHRdPXguY29sbGVjdGlvbihEdC52YWx1ZSl9KSksa3R9LEFYPXtoaWVyYXJjaGljYWxDbHVzdGVyaW5nOkROLGhjYTpETn0sTFg9UmYoe2Rpc3RhbmNlOiJldWNsaWRlYW4iLHByZWZlcmVuY2U6Im1lZGlhbiIsZGFtcGluZzouOCxtYXhJdGVyYXRpb25zOjFlMyxtaW5JdGVyYXRpb25zOjEwMCxhdHRyaWJ1dGVzOltdfSksTVg9ZnVuY3Rpb24oZyl7dmFyIHg9Zy5kYW1waW5nLFQ9Zy5wcmVmZXJlbmNlOy41PD14JiZ4PDF8fHZsKCJEYW1waW5nIG11c3QgcmFuZ2Ugb24gWzAuNSwgMSkuICBHb3Q6ICIuY29uY2F0KHgpKTt2YXIgTD1bIm1lZGlhbiIsIm1lYW4iLCJtaW4iLCJtYXgiXTtyZXR1cm4gTC5zb21lKGZ1bmN0aW9uKE8pe3JldHVybiBPPT09VH0pfHxYKFQpfHx2bCgiUHJlZmVyZW5jZSBtdXN0IGJlIG9uZSBvZiBbIi5jb25jYXQoTC5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuIiciLmNvbmNhdChPLCInIil9KS5qb2luKCIsICIpLCJdIG9yIGEgbnVtYmVyLiAgR290OiAiKS5jb25jYXQoVCkpLExYKGcpfSxEWD1mdW5jdGlvbihnLHgsVCxMKXt2YXIgTz1mdW5jdGlvbigkLHEpe3JldHVybiBMW3FdKCQpfTtyZXR1cm4tJFQoZyxMLmxlbmd0aCxmdW5jdGlvbihQKXtyZXR1cm4gTyh4LFApfSxmdW5jdGlvbihQKXtyZXR1cm4gTyhULFApfSx4LFQpfSxJWD1mdW5jdGlvbihnLHgpe3ZhciBUPW51bGw7cmV0dXJuIHg9PT0ibWVkaWFuIj9UPURLKGcpOng9PT0ibWVhbiI/VD1NSyhnKTp4PT09Im1pbiI/VD1BSyhnKTp4PT09Im1heCI/VD1MSyhnKTpUPXgsVH0sT1g9ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD1bXSxPPTA7TzxnO08rKyl4W08qZytPXStUW08qZytPXT4wJiZMLnB1c2goTyk7cmV0dXJuIEx9LElOPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9W10sTz0wO088ZztPKyspe2Zvcih2YXIgUD0tMSwkPS0xLzAscT0wO3E8VC5sZW5ndGg7cSsrKXt2YXIgUz1UW3FdO3hbTypnK1NdPiQmJihQPVMsJD14W08qZytTXSl9UD4wJiZMLnB1c2goUCl9Zm9yKHZhciBWPTA7VjxULmxlbmd0aDtWKyspTFtUW1ZdXT1UW1ZdO3JldHVybiBMfSxQWD1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPUlOKGcseCxUKSxPPTA7TzxULmxlbmd0aDtPKyspe2Zvcih2YXIgUD1bXSwkPTA7JDxMLmxlbmd0aDskKyspTFskXT09PVRbT10mJlAucHVzaCgkKTtmb3IodmFyIHE9LTEsUz0tMS8wLFY9MDtWPFAubGVuZ3RoO1YrKyl7Zm9yKHZhciBZPTAscnQ9MDtydDxQLmxlbmd0aDtydCsrKVkrPXhbUFtydF0qZytQW1ZdXTtZPlMmJihxPVYsUz1ZKX1UW09dPVBbcV19cmV0dXJuIEw9SU4oZyx4LFQpLEx9LE9OPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD10aGlzLmN5KCksVD10aGlzLm5vZGVzKCksTD1NWChnKSxPPXt9LFA9MDtQPFQubGVuZ3RoO1ArKylPW1RbUF0uaWQoKV09UDt2YXIgJCxxLFMsVixZLHJ0OyQ9VC5sZW5ndGgscT0kKiQsUz1uZXcgQXJyYXkocSk7Zm9yKHZhciBvdD0wO290PHE7b3QrKylTW290XT0tMS8wO2Zvcih2YXIgaHQ9MDtodDwkO2h0KyspZm9yKHZhciBkdD0wO2R0PCQ7ZHQrKylodCE9PWR0JiYoU1todCokK2R0XT1EWChMLmRpc3RhbmNlLFRbaHRdLFRbZHRdLEwuYXR0cmlidXRlcykpO1Y9SVgoUyxMLnByZWZlcmVuY2UpO2Zvcih2YXIgTHQ9MDtMdDwkO0x0KyspU1tMdCokK0x0XT1WO1k9bmV3IEFycmF5KHEpO2Zvcih2YXIga3Q9MDtrdDxxO2t0KyspWVtrdF09MDtydD1uZXcgQXJyYXkocSk7Zm9yKHZhciBEdD0wO0R0PHE7RHQrKylydFtEdF09MDtmb3IodmFyIFB0PW5ldyBBcnJheSgkKSwkdD1uZXcgQXJyYXkoJCksWnQ9bmV3IEFycmF5KCQpLFl0PTA7WXQ8JDtZdCsrKVB0W1l0XT0wLCR0W1l0XT0wLFp0W1l0XT0wO2Zvcih2YXIgcXQ9bmV3IEFycmF5KCQqTC5taW5JdGVyYXRpb25zKSxuZT0wO25lPHF0Lmxlbmd0aDtuZSsrKXF0W25lXT0wO3ZhciBHdDtmb3IoR3Q9MDtHdDxMLm1heEl0ZXJhdGlvbnM7R3QrKyl7Zm9yKHZhciBnZT0wO2dlPCQ7Z2UrKyl7Zm9yKHZhciBiZT0tMS8wLGllPS0xLzAsRmU9LTEsd2U9MCxibj0wO2JuPCQ7Ym4rKylQdFtibl09WVtnZSokK2JuXSx3ZT1ydFtnZSokK2JuXStTW2dlKiQrYm5dLHdlPj1iZT8oaWU9YmUsYmU9d2UsRmU9Ym4pOndlPmllJiYoaWU9d2UpO2Zvcih2YXIgemU9MDt6ZTwkO3plKyspWVtnZSokK3plXT0oMS1MLmRhbXBpbmcpKihTW2dlKiQremVdLWJlKStMLmRhbXBpbmcqUHRbemVdO1lbZ2UqJCtGZV09KDEtTC5kYW1waW5nKSooU1tnZSokK0ZlXS1pZSkrTC5kYW1waW5nKlB0W0ZlXX1mb3IodmFyIEdlPTA7R2U8JDtHZSsrKXtmb3IodmFyIEVuPTAsSW49MDtJbjwkO0luKyspUHRbSW5dPXJ0W0luKiQrR2VdLCR0W0luXT1NYXRoLm1heCgwLFlbSW4qJCtHZV0pLEVuKz0kdFtJbl07RW4tPSR0W0dlXSwkdFtHZV09WVtHZSokK0dlXSxFbis9JHRbR2VdO2Zvcih2YXIgWW49MDtZbjwkO1luKyspcnRbWW4qJCtHZV09KDEtTC5kYW1waW5nKSpNYXRoLm1pbigwLEVuLSR0W1luXSkrTC5kYW1waW5nKlB0W1luXTtydFtHZSokK0dlXT0oMS1MLmRhbXBpbmcpKihFbi0kdFtHZV0pK0wuZGFtcGluZypQdFtHZV19Zm9yKHZhciBTbj0wLFduPTA7V248JDtXbisrKXt2YXIgcnI9cnRbV24qJCtXbl0rWVtXbiokK1duXT4wPzE6MDtxdFtHdCVMLm1pbkl0ZXJhdGlvbnMqJCtXbl09cnIsU24rPXJyfWlmKFNuPjAmJihHdD49TC5taW5JdGVyYXRpb25zLTF8fEd0PT1MLm1heEl0ZXJhdGlvbnMtMSkpe2Zvcih2YXIgd3I9MCx1cj0wO3VyPCQ7dXIrKyl7WnRbdXJdPTA7Zm9yKHZhciBlcj0wO2VyPEwubWluSXRlcmF0aW9ucztlcisrKVp0W3VyXSs9cXRbZXIqJCt1cl07KFp0W3VyXT09PTB8fFp0W3VyXT09PUwubWluSXRlcmF0aW9ucykmJndyKyt9aWYod3I9PT0kKWJyZWFrfX1mb3IodmFyIHZuPU9YKCQsWSxydCksZ3I9UFgoJCxTLHZuKSxmcj17fSxKcj0wO0pyPHZuLmxlbmd0aDtKcisrKWZyW3ZuW0pyXV09W107Zm9yKHZhciB2aT0wO3ZpPFQubGVuZ3RoO3ZpKyspe3ZhciBYcz1PW1RbdmldLmlkKCldLEVhPWdyW1hzXTtFYSE9bnVsbCYmZnJbRWFdLnB1c2goVFt2aV0pfWZvcih2YXIgQ2k9bmV3IEFycmF5KHZuLmxlbmd0aCksaGk9MDtoaTx2bi5sZW5ndGg7aGkrKylDaVtoaV09eC5jb2xsZWN0aW9uKGZyW3ZuW2hpXV0pO3JldHVybiBDaX0sRlg9e2FmZmluaXR5UHJvcGFnYXRpb246T04sYXA6T059LE5YPVJmKHtyb290OnZvaWQgMCxkaXJlY3RlZDohMX0pLEJYPXtoaWVyaG9semVyOmZ1bmN0aW9uKGcpe2lmKCF1dChnKSl7dmFyIHg9YXJndW1lbnRzO2c9e3Jvb3Q6eFswXSxkaXJlY3RlZDp4WzFdfX12YXIgVD1OWChnKSxMPVQucm9vdCxPPVQuZGlyZWN0ZWQsUD10aGlzLCQ9ITEscSxTLFY7TCYmKFY9bXQoTCk/dGhpcy5maWx0ZXIoTClbMF0uaWQoKTpMWzBdLmlkKCkpO3ZhciBZPXt9LHJ0PXt9O08/UC5mb3JFYWNoKGZ1bmN0aW9uKER0KXt2YXIgUHQ9RHQuaWQoKTtpZihEdC5pc05vZGUoKSl7dmFyICR0PUR0LmluZGVncmVlKCEwKSxadD1EdC5vdXRkZWdyZWUoITApLFl0PSR0LVp0LHF0PVp0LSR0O1l0PT0xP3E/JD0hMDpxPVB0OnF0PT0xP1M/JD0hMDpTPVB0OihxdD4xfHxZdD4xKSYmKCQ9ITApLFlbUHRdPVtdLER0Lm91dGdvZXJzKCkuZm9yRWFjaChmdW5jdGlvbihuZSl7bmUuaXNFZGdlKCkmJllbUHRdLnB1c2gobmUuaWQoKSl9KX1lbHNlIHJ0W1B0XT1bdm9pZCAwLER0LnRhcmdldCgpLmlkKCldfSk6UC5mb3JFYWNoKGZ1bmN0aW9uKER0KXt2YXIgUHQ9RHQuaWQoKTtpZihEdC5pc05vZGUoKSl7dmFyICR0PUR0LmRlZ3JlZSghMCk7JHQlMiYmKHE/Uz8kPSEwOlM9UHQ6cT1QdCksWVtQdF09W10sRHQuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKFp0KXtyZXR1cm4gWVtQdF0ucHVzaChadC5pZCgpKX0pfWVsc2UgcnRbUHRdPVtEdC5zb3VyY2UoKS5pZCgpLER0LnRhcmdldCgpLmlkKCldfSk7dmFyIG90PXtmb3VuZDohMSx0cmFpbDp2b2lkIDB9O2lmKCQpcmV0dXJuIG90O2lmKFMmJnEpaWYoTyl7aWYoViYmUyE9VilyZXR1cm4gb3Q7Vj1TfWVsc2V7aWYoViYmUyE9ViYmcSE9VilyZXR1cm4gb3Q7Vnx8KFY9Uyl9ZWxzZSBWfHwoVj1QWzBdLmlkKCkpO3ZhciBodD1mdW5jdGlvbihQdCl7Zm9yKHZhciAkdD1QdCxadD1bUHRdLFl0LHF0LG5lO1lbJHRdLmxlbmd0aDspWXQ9WVskdF0uc2hpZnQoKSxxdD1ydFtZdF1bMF0sbmU9cnRbWXRdWzFdLCR0IT1uZT8oWVtuZV09WVtuZV0uZmlsdGVyKGZ1bmN0aW9uKEd0KXtyZXR1cm4gR3QhPVl0fSksJHQ9bmUpOiFPJiYkdCE9cXQmJihZW3F0XT1ZW3F0XS5maWx0ZXIoZnVuY3Rpb24oR3Qpe3JldHVybiBHdCE9WXR9KSwkdD1xdCksWnQudW5zaGlmdChZdCksWnQudW5zaGlmdCgkdCk7cmV0dXJuIFp0fSxkdD1bXSxMdD1bXTtmb3IoTHQ9aHQoVik7THQubGVuZ3RoIT0xOylZW0x0WzBdXS5sZW5ndGg9PTA/KGR0LnVuc2hpZnQoUC5nZXRFbGVtZW50QnlJZChMdC5zaGlmdCgpKSksZHQudW5zaGlmdChQLmdldEVsZW1lbnRCeUlkKEx0LnNoaWZ0KCkpKSk6THQ9aHQoTHQuc2hpZnQoKSkuY29uY2F0KEx0KTtkdC51bnNoaWZ0KFAuZ2V0RWxlbWVudEJ5SWQoTHQuc2hpZnQoKSkpO2Zvcih2YXIga3QgaW4gWSlpZihZW2t0XS5sZW5ndGgpcmV0dXJuIG90O3JldHVybiBvdC5mb3VuZD0hMCxvdC50cmFpbD10aGlzLnNwYXduKGR0LCEwKSxvdH19LEhUPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcyx4PXt9LFQ9MCxMPTAsTz1bXSxQPVtdLCQ9e30scT1mdW5jdGlvbihydCxvdCl7Zm9yKHZhciBodD1QLmxlbmd0aC0xLGR0PVtdLEx0PWcuc3Bhd24oKTtQW2h0XS54IT1ydHx8UFtodF0ueSE9b3Q7KWR0LnB1c2goUC5wb3AoKS5lZGdlKSxodC0tO2R0LnB1c2goUC5wb3AoKS5lZGdlKSxkdC5mb3JFYWNoKGZ1bmN0aW9uKGt0KXt2YXIgRHQ9a3QuY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oZyk7THQubWVyZ2Uoa3QpLER0LmZvckVhY2goZnVuY3Rpb24oUHQpe3ZhciAkdD1QdC5pZCgpLFp0PVB0LmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGcpO0x0Lm1lcmdlKFB0KSx4WyR0XS5jdXRWZXJ0ZXg/THQubWVyZ2UoWnQuZmlsdGVyKGZ1bmN0aW9uKFl0KXtyZXR1cm4gWXQuaXNMb29wKCl9KSk6THQubWVyZ2UoWnQpfSl9KSxPLnB1c2goTHQpfSxTPWZ1bmN0aW9uIFkocnQsb3QsaHQpe3J0PT09aHQmJihMKz0xKSx4W290XT17aWQ6VCxsb3c6VCsrLGN1dFZlcnRleDohMX07dmFyIGR0PWcuZ2V0RWxlbWVudEJ5SWQob3QpLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGcpO2lmKGR0LnNpemUoKT09PTApTy5wdXNoKGcuc3Bhd24oZy5nZXRFbGVtZW50QnlJZChvdCkpKTtlbHNle3ZhciBMdCxrdCxEdCxQdDtkdC5mb3JFYWNoKGZ1bmN0aW9uKCR0KXtMdD0kdC5zb3VyY2UoKS5pZCgpLGt0PSR0LnRhcmdldCgpLmlkKCksRHQ9THQ9PT1vdD9rdDpMdCxEdCE9PWh0JiYoUHQ9JHQuaWQoKSwkW1B0XXx8KCRbUHRdPSEwLFAucHVzaCh7eDpvdCx5OkR0LGVkZ2U6JHR9KSksRHQgaW4geD94W290XS5sb3c9TWF0aC5taW4oeFtvdF0ubG93LHhbRHRdLmlkKTooWShydCxEdCxvdCkseFtvdF0ubG93PU1hdGgubWluKHhbb3RdLmxvdyx4W0R0XS5sb3cpLHhbb3RdLmlkPD14W0R0XS5sb3cmJih4W290XS5jdXRWZXJ0ZXg9ITAscShvdCxEdCkpKSl9KX19O2cuZm9yRWFjaChmdW5jdGlvbihZKXtpZihZLmlzTm9kZSgpKXt2YXIgcnQ9WS5pZCgpO3J0IGluIHh8fChMPTAsUyhydCxydCkseFtydF0uY3V0VmVydGV4PUw+MSl9fSk7dmFyIFY9T2JqZWN0LmtleXMoeCkuZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybiB4W1ldLmN1dFZlcnRleH0pLm1hcChmdW5jdGlvbihZKXtyZXR1cm4gZy5nZXRFbGVtZW50QnlJZChZKX0pO3JldHVybntjdXQ6Zy5zcGF3bihWKSxjb21wb25lbnRzOk99fSxSWD17aG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZDpIVCxodGJjOkhULGh0YjpIVCxob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkQ29tcG9uZW50czpIVH0sVlQ9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLHg9e30sVD0wLEw9W10sTz1bXSxQPWcuc3Bhd24oZyksJD1mdW5jdGlvbiBxKFMpe08ucHVzaChTKSx4W1NdPXtpbmRleDpULGxvdzpUKyssZXhwbG9yZWQ6ITF9O3ZhciBWPWcuZ2V0RWxlbWVudEJ5SWQoUykuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZyk7aWYoVi5mb3JFYWNoKGZ1bmN0aW9uKGR0KXt2YXIgTHQ9ZHQudGFyZ2V0KCkuaWQoKTtMdCE9PVMmJihMdCBpbiB4fHxxKEx0KSx4W0x0XS5leHBsb3JlZHx8KHhbU10ubG93PU1hdGgubWluKHhbU10ubG93LHhbTHRdLmxvdykpKX0pLHhbU10uaW5kZXg9PT14W1NdLmxvdyl7Zm9yKHZhciBZPWcuc3Bhd24oKTs7KXt2YXIgcnQ9Ty5wb3AoKTtpZihZLm1lcmdlKGcuZ2V0RWxlbWVudEJ5SWQocnQpKSx4W3J0XS5sb3c9eFtTXS5pbmRleCx4W3J0XS5leHBsb3JlZD0hMCxydD09PVMpYnJlYWt9dmFyIG90PVkuZWRnZXNXaXRoKFkpLGh0PVkubWVyZ2Uob3QpO0wucHVzaChodCksUD1QLmRpZmZlcmVuY2UoaHQpfX07cmV0dXJuIGcuZm9yRWFjaChmdW5jdGlvbihxKXtpZihxLmlzTm9kZSgpKXt2YXIgUz1xLmlkKCk7UyBpbiB4fHwkKFMpfX0pLHtjdXQ6UCxjb21wb25lbnRzOkx9fSxqWD17dGFyamFuU3Ryb25nbHlDb25uZWN0ZWQ6VlQsdHNjOlZULHRzY2M6VlQsdGFyamFuU3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzOlZUfSxQTj17fTtbVGssYkssd0ssbUsseEssRUssX0ssUUssWjUsSjUsT0wsdVgsa1gsQVgsRlgsQlgsUlgsalhdLmZvckVhY2goZnVuY3Rpb24oeSl7ZGUoUE4seSl9KTsvKiEKRW1iZWRkYWJsZSBNaW5pbXVtIFN0cmljdGx5LUNvbXBsaWFudCBQcm9taXNlcy9BKyAxLjEuMSBUaGVuYWJsZQpDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBSYWxmIFMuIEVuZ2Vsc2NoYWxsIChodHRwOi8vZW5nZWxzY2hhbGwuY29tKQpMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQpCiovdmFyIEZOPTAsTk49MSxCTj0yLGd3PWZ1bmN0aW9uIHkoZyl7aWYoISh0aGlzIGluc3RhbmNlb2YgeSkpcmV0dXJuIG5ldyB5KGcpO3RoaXMuaWQ9IlRoZW5hYmxlLzEuMC43Iix0aGlzLnN0YXRlPUZOLHRoaXMuZnVsZmlsbFZhbHVlPXZvaWQgMCx0aGlzLnJlamVjdFJlYXNvbj12b2lkIDAsdGhpcy5vbkZ1bGZpbGxlZD1bXSx0aGlzLm9uUmVqZWN0ZWQ9W10sdGhpcy5wcm94eT17dGhlbjp0aGlzLnRoZW4uYmluZCh0aGlzKX0sdHlwZW9mIGc9PSJmdW5jdGlvbiImJmcuY2FsbCh0aGlzLHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLHRoaXMucmVqZWN0LmJpbmQodGhpcykpfTtndy5wcm90b3R5cGU9e2Z1bGZpbGw6ZnVuY3Rpb24oZyl7cmV0dXJuIFJOKHRoaXMsTk4sImZ1bGZpbGxWYWx1ZSIsZyl9LHJlamVjdDpmdW5jdGlvbihnKXtyZXR1cm4gUk4odGhpcyxCTiwicmVqZWN0UmVhc29uIixnKX0sdGhlbjpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXMsTD1uZXcgZ3c7cmV0dXJuIFQub25GdWxmaWxsZWQucHVzaCh6TihnLEwsImZ1bGZpbGwiKSksVC5vblJlamVjdGVkLnB1c2goek4oeCxMLCJyZWplY3QiKSksak4oVCksTC5wcm94eX19O3ZhciBSTj1mdW5jdGlvbihnLHgsVCxMKXtyZXR1cm4gZy5zdGF0ZT09PUZOJiYoZy5zdGF0ZT14LGdbVF09TCxqTihnKSksZ30sak49ZnVuY3Rpb24oZyl7Zy5zdGF0ZT09PU5OPyROKGcsIm9uRnVsZmlsbGVkIixnLmZ1bGZpbGxWYWx1ZSk6Zy5zdGF0ZT09PUJOJiYkTihnLCJvblJlamVjdGVkIixnLnJlamVjdFJlYXNvbil9LCROPWZ1bmN0aW9uKGcseCxUKXtpZihnW3hdLmxlbmd0aCE9PTApe3ZhciBMPWdbeF07Z1t4XT1bXTt2YXIgTz1mdW5jdGlvbigpe2Zvcih2YXIgJD0wOyQ8TC5sZW5ndGg7JCsrKUxbJF0oVCl9O3R5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiI/c2V0SW1tZWRpYXRlKE8pOnNldFRpbWVvdXQoTywwKX19LHpOPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gZnVuY3Rpb24oTCl7aWYodHlwZW9mIGchPSJmdW5jdGlvbiIpeFtUXS5jYWxsKHgsTCk7ZWxzZXt2YXIgTzt0cnl7Tz1nKEwpfWNhdGNoKFApe3gucmVqZWN0KFApO3JldHVybn0kWCh4LE8pfX19LCRYPWZ1bmN0aW9uIHkoZyx4KXtpZihnPT09eHx8Zy5wcm94eT09PXgpe2cucmVqZWN0KG5ldyBUeXBlRXJyb3IoImNhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYiKSk7cmV0dXJufXZhciBUO2lmKGYoeCk9PT0ib2JqZWN0IiYmeCE9PW51bGx8fHR5cGVvZiB4PT0iZnVuY3Rpb24iKXRyeXtUPXgudGhlbn1jYXRjaChPKXtnLnJlamVjdChPKTtyZXR1cm59aWYodHlwZW9mIFQ9PSJmdW5jdGlvbiIpe3ZhciBMPSExO3RyeXtULmNhbGwoeCxmdW5jdGlvbihPKXtMfHwoTD0hMCxPPT09eD9nLnJlamVjdChuZXcgVHlwZUVycm9yKCJjaXJjdWxhciB0aGVuYWJsZSBjaGFpbiIpKTp5KGcsTykpfSxmdW5jdGlvbihPKXtMfHwoTD0hMCxnLnJlamVjdChPKSl9KX1jYXRjaChPKXtMfHxnLnJlamVjdChPKX1yZXR1cm59Zy5mdWxmaWxsKHgpfTtndy5hbGw9ZnVuY3Rpb24oeSl7cmV0dXJuIG5ldyBndyhmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD1uZXcgQXJyYXkoeS5sZW5ndGgpLEw9MCxPPWZ1bmN0aW9uKHEsUyl7VFtxXT1TLEwrKyxMPT09eS5sZW5ndGgmJmcoVCl9LFA9MDtQPHkubGVuZ3RoO1ArKykoZnVuY3Rpb24oJCl7dmFyIHE9eVskXSxTPXEhPW51bGwmJnEudGhlbiE9bnVsbDtpZihTKXEudGhlbihmdW5jdGlvbihZKXtPKCQsWSl9LGZ1bmN0aW9uKFkpe3goWSl9KTtlbHNle3ZhciBWPXE7TygkLFYpfX0pKFApfSl9LGd3LnJlc29sdmU9ZnVuY3Rpb24oeSl7cmV0dXJuIG5ldyBndyhmdW5jdGlvbihnLHgpe2coeSl9KX0sZ3cucmVqZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBuZXcgZ3coZnVuY3Rpb24oZyx4KXt4KHkpfSl9O3ZhciBleD10eXBlb2YgUHJvbWlzZTwidSI/UHJvbWlzZTpndyxHVD1mdW5jdGlvbihnLHgsVCl7dmFyIEw9T3QoZyksTz0hTCxQPXRoaXMuX3ByaXZhdGU9ZGUoe2R1cmF0aW9uOjFlM30seCxUKTtpZihQLnRhcmdldD1nLFAuc3R5bGU9UC5zdHlsZXx8UC5jc3MsUC5zdGFydGVkPSExLFAucGxheWluZz0hMSxQLmhvb2tlZD0hMSxQLmFwcGx5aW5nPSExLFAucHJvZ3Jlc3M9MCxQLmNvbXBsZXRlcz1bXSxQLmZyYW1lcz1bXSxQLmNvbXBsZXRlJiZ5dChQLmNvbXBsZXRlKSYmUC5jb21wbGV0ZXMucHVzaChQLmNvbXBsZXRlKSxPKXt2YXIgJD1nLnBvc2l0aW9uKCk7UC5zdGFydFBvc2l0aW9uPVAuc3RhcnRQb3NpdGlvbnx8e3g6JC54LHk6JC55fSxQLnN0YXJ0U3R5bGU9UC5zdGFydFN0eWxlfHxnLmN5KCkuc3R5bGUoKS5nZXRBbmltYXRpb25TdGFydFN0eWxlKGcsUC5zdHlsZSl9aWYoTCl7dmFyIHE9Zy5wYW4oKTtQLnN0YXJ0UGFuPXt4OnEueCx5OnEueX0sUC5zdGFydFpvb209Zy56b29tKCl9dGhpcy5sZW5ndGg9MSx0aGlzWzBdPXRoaXN9LEEzPUdULnByb3RvdHlwZTtkZShBMyx7aW5zdGFuY2VTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iYW5pbWF0aW9uIn0saG9vazpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7aWYoIWcuaG9va2VkKXt2YXIgeCxUPWcudGFyZ2V0Ll9wcml2YXRlLmFuaW1hdGlvbjtnLnF1ZXVlP3g9VC5xdWV1ZTp4PVQuY3VycmVudCx4LnB1c2godGhpcyksVHQoZy50YXJnZXQpJiZnLnRhcmdldC5jeSgpLmFkZFRvQW5pbWF0aW9uUG9vbChnLnRhcmdldCksZy5ob29rZWQ9ITB9cmV0dXJuIHRoaXN9LHBsYXk6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlO3JldHVybiBnLnByb2dyZXNzPT09MSYmKGcucHJvZ3Jlc3M9MCksZy5wbGF5aW5nPSEwLGcuc3RhcnRlZD0hMSxnLnN0b3BwZWQ9ITEsdGhpcy5ob29rKCksdGhpc30scGxheWluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnBsYXlpbmd9LGFwcGx5OmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5hcHBseWluZz0hMCxnLnN0YXJ0ZWQ9ITEsZy5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LGFwcGx5aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuYXBwbHlpbmd9LHBhdXNlOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5wbGF5aW5nPSExLGcuc3RhcnRlZD0hMSx0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5wbGF5aW5nPSExLGcuc3RhcnRlZD0hMSxnLnN0b3BwZWQ9ITAsdGhpc30scmV3aW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3Jlc3MoMCl9LGZhc3Rmb3J3YXJkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3Jlc3MoMSl9LHRpbWU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZz09PXZvaWQgMD94LnByb2dyZXNzKnguZHVyYXRpb246dGhpcy5wcm9ncmVzcyhnL3guZHVyYXRpb24pfSxwcm9ncmVzczpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLFQ9eC5wbGF5aW5nO3JldHVybiBnPT09dm9pZCAwP3gucHJvZ3Jlc3M6KFQmJnRoaXMucGF1c2UoKSx4LnByb2dyZXNzPWcseC5zdGFydGVkPSExLFQmJnRoaXMucGxheSgpLHRoaXMpfSxjb21wbGV0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5wcm9ncmVzcz09PTF9LHJldmVyc2U6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlLHg9Zy5wbGF5aW5nO3gmJnRoaXMucGF1c2UoKSxnLnByb2dyZXNzPTEtZy5wcm9ncmVzcyxnLnN0YXJ0ZWQ9ITE7dmFyIFQ9ZnVuY3Rpb24oUyxWKXt2YXIgWT1nW1NdO1khPW51bGwmJihnW1NdPWdbVl0sZ1tWXT1ZKX07aWYoVCgiem9vbSIsInN0YXJ0Wm9vbSIpLFQoInBhbiIsInN0YXJ0UGFuIiksVCgicG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiksZy5zdHlsZSlmb3IodmFyIEw9MDtMPGcuc3R5bGUubGVuZ3RoO0wrKyl7dmFyIE89Zy5zdHlsZVtMXSxQPU8ubmFtZSwkPWcuc3RhcnRTdHlsZVtQXTtnLnN0YXJ0U3R5bGVbUF09TyxnLnN0eWxlW0xdPSR9cmV0dXJuIHgmJnRoaXMucGxheSgpLHRoaXN9LHByb21pc2U6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZSxUO3N3aXRjaChnKXtjYXNlImZyYW1lIjpUPXguZnJhbWVzO2JyZWFrO2RlZmF1bHQ6Y2FzZSJjb21wbGV0ZSI6Y2FzZSJjb21wbGV0ZWQiOlQ9eC5jb21wbGV0ZXN9cmV0dXJuIG5ldyBleChmdW5jdGlvbihMLE8pe1QucHVzaChmdW5jdGlvbigpe0woKX0pfSl9fSksQTMuY29tcGxldGU9QTMuY29tcGxldGVkLEEzLnJ1bj1BMy5wbGF5LEEzLnJ1bm5pbmc9QTMucGxheWluZzt2YXIgelg9e2FuaW1hdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxUPXgubGVuZ3RoIT09dm9pZCAwLEw9VD94Olt4XSxPPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoIU8uc3R5bGVFbmFibGVkKCkpcmV0dXJuITE7dmFyIFA9TFswXTtpZihQKXJldHVybiBQLl9wcml2YXRlLmFuaW1hdGlvbi5jdXJyZW50Lmxlbmd0aD4wfX0sY2xlYXJRdWV1ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciB4PXRoaXMsVD14Lmxlbmd0aCE9PXZvaWQgMCxMPVQ/eDpbeF0sTz10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCFPLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2Zvcih2YXIgUD0wO1A8TC5sZW5ndGg7UCsrKXt2YXIgJD1MW1BdOyQuX3ByaXZhdGUuYW5pbWF0aW9uLnF1ZXVlPVtdfXJldHVybiB0aGlzfX0sZGVsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCxUKXt2YXIgTD10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBMLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0ZSh7ZGVsYXk6eCxkdXJhdGlvbjp4LGNvbXBsZXRlOlR9KTp0aGlzfX0sZGVsYXlBbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCxUKXt2YXIgTD10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBMLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0aW9uKHtkZWxheTp4LGR1cmF0aW9uOngsY29tcGxldGU6VH0pOnRoaXN9fSxhbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCxUKXt2YXIgTD10aGlzLE89TC5sZW5ndGghPT12b2lkIDAsUD1PP0w6W0xdLCQ9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcyxxPSFPLFM9IXE7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIFY9JC5zdHlsZSgpO3g9ZGUoe30seCxUKTt2YXIgWT1PYmplY3Qua2V5cyh4KS5sZW5ndGg9PT0wO2lmKFkpcmV0dXJuIG5ldyBHVChQWzBdLHgpO3N3aXRjaCh4LmR1cmF0aW9uPT09dm9pZCAwJiYoeC5kdXJhdGlvbj00MDApLHguZHVyYXRpb24pe2Nhc2Uic2xvdyI6eC5kdXJhdGlvbj02MDA7YnJlYWs7Y2FzZSJmYXN0Ijp4LmR1cmF0aW9uPTIwMDticmVha31pZihTJiYoeC5zdHlsZT1WLmdldFByb3BzTGlzdCh4LnN0eWxlfHx4LmNzcykseC5jc3M9dm9pZCAwKSxTJiZ4LnJlbmRlcmVkUG9zaXRpb24hPW51bGwpe3ZhciBydD14LnJlbmRlcmVkUG9zaXRpb24sb3Q9JC5wYW4oKSxodD0kLnpvb20oKTt4LnBvc2l0aW9uPWNOKHJ0LGh0LG90KX1pZihxJiZ4LnBhbkJ5IT1udWxsKXt2YXIgZHQ9eC5wYW5CeSxMdD0kLnBhbigpO3gucGFuPXt4Okx0LngrZHQueCx5Okx0LnkrZHQueX19dmFyIGt0PXguY2VudGVyfHx4LmNlbnRyZTtpZihxJiZrdCE9bnVsbCl7dmFyIER0PSQuZ2V0Q2VudGVyUGFuKGt0LmVsZXMseC56b29tKTtEdCE9bnVsbCYmKHgucGFuPUR0KX1pZihxJiZ4LmZpdCE9bnVsbCl7dmFyIFB0PXguZml0LCR0PSQuZ2V0Rml0Vmlld3BvcnQoUHQuZWxlc3x8UHQuYm91bmRpbmdCb3gsUHQucGFkZGluZyk7JHQhPW51bGwmJih4LnBhbj0kdC5wYW4seC56b29tPSR0Lnpvb20pfWlmKHEmJnV0KHguem9vbSkpe3ZhciBadD0kLmdldFpvb21lZFZpZXdwb3J0KHguem9vbSk7WnQhPW51bGw/KFp0Lnpvb21lZCYmKHguem9vbT1adC56b29tKSxadC5wYW5uZWQmJih4LnBhbj1adC5wYW4pKTp4Lnpvb209bnVsbH1yZXR1cm4gbmV3IEdUKFBbMF0seCl9fSxhbmltYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHgsVCl7dmFyIEw9dGhpcyxPPUwubGVuZ3RoIT09dm9pZCAwLFA9Tz9MOltMXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7VCYmKHg9ZGUoe30seCxUKSk7Zm9yKHZhciBxPTA7cTxQLmxlbmd0aDtxKyspe3ZhciBTPVBbcV0sVj1TLmFuaW1hdGVkKCkmJih4LnF1ZXVlPT09dm9pZCAwfHx4LnF1ZXVlKSxZPVMuYW5pbWF0aW9uKHgsVj97cXVldWU6ITB9OnZvaWQgMCk7WS5wbGF5KCl9cmV0dXJuIHRoaXN9fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHgsVCl7dmFyIEw9dGhpcyxPPUwubGVuZ3RoIT09dm9pZCAwLFA9Tz9MOltMXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7Zm9yKHZhciBxPTA7cTxQLmxlbmd0aDtxKyspe2Zvcih2YXIgUz1QW3FdLFY9Uy5fcHJpdmF0ZSxZPVYuYW5pbWF0aW9uLmN1cnJlbnQscnQ9MDtydDxZLmxlbmd0aDtydCsrKXt2YXIgb3Q9WVtydF0saHQ9b3QuX3ByaXZhdGU7VCYmKGh0LmR1cmF0aW9uPTApfXgmJihWLmFuaW1hdGlvbi5xdWV1ZT1bXSksVHx8KFYuYW5pbWF0aW9uLmN1cnJlbnQ9W10pfXJldHVybiAkLm5vdGlmeSgiZHJhdyIpLHRoaXN9fX0scVg9QXJyYXkuaXNBcnJheSxVVD1xWCxIWD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxWWD0vXlx3KiQvO2Z1bmN0aW9uIEdYKHksZyl7aWYoVVQoeSkpcmV0dXJuITE7dmFyIHg9dHlwZW9mIHk7cmV0dXJuIHg9PSJudW1iZXIifHx4PT0ic3ltYm9sInx8eD09ImJvb2xlYW4ifHx5PT1udWxsfHxrcih5KT8hMDpWWC50ZXN0KHkpfHwhSFgudGVzdCh5KXx8ZyE9bnVsbCYmeSBpbiBPYmplY3QoZyl9dmFyIFVYPUdYLFdYPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixZWD0iW29iamVjdCBGdW5jdGlvbl0iLEtYPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsWFg9IltvYmplY3QgUHJveHldIjtmdW5jdGlvbiBRWCh5KXtpZighRWUoeSkpcmV0dXJuITE7dmFyIGc9bmQoeSk7cmV0dXJuIGc9PVlYfHxnPT1LWHx8Zz09V1h8fGc9PVhYfXZhciBaWD1RWCxKWD1NYVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sTkw9SlgscU49ZnVuY3Rpb24oKXt2YXIgeT0vW14uXSskLy5leGVjKE5MJiZOTC5rZXlzJiZOTC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIHk/IlN5bWJvbChzcmMpXzEuIit5OiIifSgpO2Z1bmN0aW9uIHRRKHkpe3JldHVybiEhcU4mJnFOIGluIHl9dmFyIGVRPXRRLG5RPUZ1bmN0aW9uLnByb3RvdHlwZSxITj1uUS50b1N0cmluZztmdW5jdGlvbiByUSh5KXtpZih5IT1udWxsKXt0cnl7cmV0dXJuIEhOLmNhbGwoeSl9Y2F0Y2h7fXRyeXtyZXR1cm4geSsiIn1jYXRjaHt9fXJldHVybiIifXZhciBpUT1yUSxzUT0vW1xcXiQuKis/KClbXF17fXxdL2csYVE9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sb1E9RnVuY3Rpb24ucHJvdG90eXBlLGNRPU9iamVjdC5wcm90b3R5cGUsVk49b1EudG9TdHJpbmcsR049Y1EuaGFzT3duUHJvcGVydHksdVE9UmVnRXhwKCJeIitWTi5jYWxsKEdOKS5yZXBsYWNlKHNRLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIFVOKHkpe2lmKCFFZSh5KXx8ZVEoeSkpcmV0dXJuITE7dmFyIGc9WlgoeSk/dVE6YVE7cmV0dXJuIGcudGVzdChpUSh5KSl9dmFyIFdOPVVOO2Z1bmN0aW9uIGxRKHksZyl7cmV0dXJuIHk9PW51bGw/dm9pZCAwOnlbZ119dmFyIGhRPWxRO2Z1bmN0aW9uIGZRKHksZyl7dmFyIHg9aFEoeSxnKTtyZXR1cm4gV04oeCk/eDp2b2lkIDB9dmFyIEJMPWZRLGRRPUJMKE9iamVjdCwiY3JlYXRlIiksRGs9ZFE7ZnVuY3Rpb24gZ1EoKXt0aGlzLl9fZGF0YV9fPURrP0RrKG51bGwpOnt9LHRoaXMuc2l6ZT0wfXZhciBwUT1nUTtmdW5jdGlvbiBiUSh5KXt2YXIgZz10aGlzLmhhcyh5KSYmZGVsZXRlIHRoaXMuX19kYXRhX19beV07cmV0dXJuIHRoaXMuc2l6ZS09Zz8xOjAsZ312YXIgWU49YlEsd1E9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHZRPU9iamVjdC5wcm90b3R5cGUsbVE9dlEuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24geVEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXztpZihEayl7dmFyIHg9Z1t5XTtyZXR1cm4geD09PXdRP3ZvaWQgMDp4fXJldHVybiBtUS5jYWxsKGcseSk/Z1t5XTp2b2lkIDB9dmFyIHhRPXlRLGtRPU9iamVjdC5wcm90b3R5cGUsRVE9a1EuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gVFEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXztyZXR1cm4gRGs/Z1t5XSE9PXZvaWQgMDpFUS5jYWxsKGcseSl9dmFyIENRPVRRLF9RPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBTUSh5LGcpe3ZhciB4PXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoeSk/MDoxLHhbeV09RGsmJmc9PT12b2lkIDA/X1E6Zyx0aGlzfXZhciBBUT1TUTtmdW5jdGlvbiBueCh5KXt2YXIgZz0tMSx4PXk9PW51bGw/MDp5Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZzx4Oyl7dmFyIFQ9eVtnXTt0aGlzLnNldChUWzBdLFRbMV0pfX1ueC5wcm90b3R5cGUuY2xlYXI9cFEsbngucHJvdG90eXBlLmRlbGV0ZT1ZTixueC5wcm90b3R5cGUuZ2V0PXhRLG54LnByb3RvdHlwZS5oYXM9Q1EsbngucHJvdG90eXBlLnNldD1BUTt2YXIgS049bng7ZnVuY3Rpb24gTFEoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfXZhciBNUT1MUTtmdW5jdGlvbiBEUSh5LGcpe3JldHVybiB5PT09Z3x8eSE9PXkmJmchPT1nfXZhciBYTj1EUTtmdW5jdGlvbiBJUSh5LGcpe2Zvcih2YXIgeD15Lmxlbmd0aDt4LS07KWlmKFhOKHlbeF1bMF0sZykpcmV0dXJuIHg7cmV0dXJuLTF9dmFyIFdUPUlRLE9RPUFycmF5LnByb3RvdHlwZSxQUT1PUS5zcGxpY2U7ZnVuY3Rpb24gRlEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXyx4PVdUKGcseSk7aWYoeDwwKXJldHVybiExO3ZhciBUPWcubGVuZ3RoLTE7cmV0dXJuIHg9PVQ/Zy5wb3AoKTpQUS5jYWxsKGcseCwxKSwtLXRoaXMuc2l6ZSwhMH12YXIgTlE9RlE7ZnVuY3Rpb24gQlEoeSl7dmFyIGc9dGhpcy5fX2RhdGFfXyx4PVdUKGcseSk7cmV0dXJuIHg8MD92b2lkIDA6Z1t4XVsxXX12YXIgUlE9QlE7ZnVuY3Rpb24galEoeSl7cmV0dXJuIFdUKHRoaXMuX19kYXRhX18seSk+LTF9dmFyICRRPWpRO2Z1bmN0aW9uIHpRKHksZyl7dmFyIHg9dGhpcy5fX2RhdGFfXyxUPVdUKHgseSk7cmV0dXJuIFQ8MD8oKyt0aGlzLnNpemUseC5wdXNoKFt5LGddKSk6eFtUXVsxXT1nLHRoaXN9dmFyIHFRPXpRO2Z1bmN0aW9uIHJ4KHkpe3ZhciBnPS0xLHg9eT09bnVsbD8wOnkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytnPHg7KXt2YXIgVD15W2ddO3RoaXMuc2V0KFRbMF0sVFsxXSl9fXJ4LnByb3RvdHlwZS5jbGVhcj1NUSxyeC5wcm90b3R5cGUuZGVsZXRlPU5RLHJ4LnByb3RvdHlwZS5nZXQ9UlEscngucHJvdG90eXBlLmhhcz0kUSxyeC5wcm90b3R5cGUuc2V0PXFRO3ZhciBIUT1yeCxWUT1CTChNYSwiTWFwIiksR1E9VlE7ZnVuY3Rpb24gVVEoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBLTixtYXA6bmV3KEdRfHxIUSksc3RyaW5nOm5ldyBLTn19dmFyIFdRPVVRO2Z1bmN0aW9uIFlRKHkpe3ZhciBnPXR5cGVvZiB5O3JldHVybiBnPT0ic3RyaW5nInx8Zz09Im51bWJlciJ8fGc9PSJzeW1ib2wifHxnPT0iYm9vbGVhbiI/eSE9PSJfX3Byb3RvX18iOnk9PT1udWxsfXZhciBLUT1ZUTtmdW5jdGlvbiBYUSh5LGcpe3ZhciB4PXkuX19kYXRhX187cmV0dXJuIEtRKGcpP3hbdHlwZW9mIGc9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06eC5tYXB9dmFyIFlUPVhRO2Z1bmN0aW9uIFFRKHkpe3ZhciBnPVlUKHRoaXMseSkuZGVsZXRlKHkpO3JldHVybiB0aGlzLnNpemUtPWc/MTowLGd9dmFyIFpRPVFRO2Z1bmN0aW9uIEpRKHkpe3JldHVybiBZVCh0aGlzLHkpLmdldCh5KX12YXIgdFo9SlE7ZnVuY3Rpb24gZVooeSl7cmV0dXJuIFlUKHRoaXMseSkuaGFzKHkpfXZhciBuWj1lWjtmdW5jdGlvbiByWih5LGcpe3ZhciB4PVlUKHRoaXMseSksVD14LnNpemU7cmV0dXJuIHguc2V0KHksZyksdGhpcy5zaXplKz14LnNpemU9PVQ/MDoxLHRoaXN9dmFyIGlaPXJaO2Z1bmN0aW9uIGl4KHkpe3ZhciBnPS0xLHg9eT09bnVsbD8wOnkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytnPHg7KXt2YXIgVD15W2ddO3RoaXMuc2V0KFRbMF0sVFsxXSl9fWl4LnByb3RvdHlwZS5jbGVhcj1XUSxpeC5wcm90b3R5cGUuZGVsZXRlPVpRLGl4LnByb3RvdHlwZS5nZXQ9dFosaXgucHJvdG90eXBlLmhhcz1uWixpeC5wcm90b3R5cGUuc2V0PWlaO3ZhciBRTj1peCxzWj0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gUkwoeSxnKXtpZih0eXBlb2YgeSE9ImZ1bmN0aW9uInx8ZyE9bnVsbCYmdHlwZW9mIGchPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihzWik7dmFyIHg9ZnVuY3Rpb24oKXt2YXIgVD1hcmd1bWVudHMsTD1nP2cuYXBwbHkodGhpcyxUKTpUWzBdLE89eC5jYWNoZTtpZihPLmhhcyhMKSlyZXR1cm4gTy5nZXQoTCk7dmFyIFA9eS5hcHBseSh0aGlzLFQpO3JldHVybiB4LmNhY2hlPU8uc2V0KEwsUCl8fE8sUH07cmV0dXJuIHguY2FjaGU9bmV3KFJMLkNhY2hlfHxRTikseH1STC5DYWNoZT1RTjt2YXIgYVo9Ukwsb1o9NTAwO2Z1bmN0aW9uIGNaKHkpe3ZhciBnPWFaKHksZnVuY3Rpb24oVCl7cmV0dXJuIHguc2l6ZT09PW9aJiZ4LmNsZWFyKCksVH0pLHg9Zy5jYWNoZTtyZXR1cm4gZ312YXIgdVo9Y1osbFo9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csaFo9L1xcKFxcKT8vZyxmWj11WihmdW5jdGlvbih5KXt2YXIgZz1bXTtyZXR1cm4geS5jaGFyQ29kZUF0KDApPT09NDYmJmcucHVzaCgiIikseS5yZXBsYWNlKGxaLGZ1bmN0aW9uKHgsVCxMLE8pe2cucHVzaChMP08ucmVwbGFjZShoWiwiJDEiKTpUfHx4KX0pLGd9KSxaTj1mWjtmdW5jdGlvbiBkWih5LGcpe2Zvcih2YXIgeD0tMSxUPXk9PW51bGw/MDp5Lmxlbmd0aCxMPUFycmF5KFQpOysreDxUOylMW3hdPWcoeVt4XSx4LHkpO3JldHVybiBMfXZhciBKTj1kWixnWj0xLzAsdEI9dGg/dGgucHJvdG90eXBlOnZvaWQgMCxlQj10Qj90Qi50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gbkIoeSl7aWYodHlwZW9mIHk9PSJzdHJpbmciKXJldHVybiB5O2lmKFVUKHkpKXJldHVybiBKTih5LG5CKSsiIjtpZihrcih5KSlyZXR1cm4gZUI/ZUIuY2FsbCh5KToiIjt2YXIgZz15KyIiO3JldHVybiBnPT0iMCImJjEveT09LWdaPyItMCI6Z312YXIgcFo9bkI7ZnVuY3Rpb24gYlooeSl7cmV0dXJuIHk9PW51bGw/IiI6cFooeSl9dmFyIEtUPWJaO2Z1bmN0aW9uIGpMKHksZyl7cmV0dXJuIFVUKHkpP3k6VVgoeSxnKT9beV06Wk4oS1QoeSkpfXZhciBYVD1qTCx3Wj0xLzA7ZnVuY3Rpb24gdlooeSl7aWYodHlwZW9mIHk9PSJzdHJpbmcifHxrcih5KSlyZXR1cm4geTt2YXIgZz15KyIiO3JldHVybiBnPT0iMCImJjEveT09LXdaPyItMCI6Z312YXIgJEw9dlo7ZnVuY3Rpb24gbVooeSxnKXtnPVhUKGcseSk7Zm9yKHZhciB4PTAsVD1nLmxlbmd0aDt5IT1udWxsJiZ4PFQ7KXk9eVskTChnW3grK10pXTtyZXR1cm4geCYmeD09VD95OnZvaWQgMH12YXIgeVo9bVo7ZnVuY3Rpb24gckIoeSxnLHgpe3ZhciBUPXk9PW51bGw/dm9pZCAwOnlaKHksZyk7cmV0dXJuIFQ9PT12b2lkIDA/eDpUfXZhciB4Wj1yQixrWj1mdW5jdGlvbigpe3RyeXt2YXIgeT1CTChPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHkoe30sIiIse30pLHl9Y2F0Y2h7fX0oKSxFWj1rWjtmdW5jdGlvbiBUWih5LGcseCl7Zz09Il9fcHJvdG9fXyImJkVaP0VaKHksZyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6eCx3cml0YWJsZTohMH0pOnlbZ109eH12YXIgQ1o9VFosX1o9T2JqZWN0LnByb3RvdHlwZSxTWj1fWi5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBBWih5LGcseCl7dmFyIFQ9eVtnXTsoIShTWi5jYWxsKHksZykmJlhOKFQseCkpfHx4PT09dm9pZCAwJiYhKGcgaW4geSkpJiZDWih5LGcseCl9dmFyIExaPUFaLE1aPTkwMDcxOTkyNTQ3NDA5OTEsa2c9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIERaKHksZyl7dmFyIHg9dHlwZW9mIHk7cmV0dXJuIGc9Zz8/TVosISFnJiYoeD09Im51bWJlciJ8fHghPSJzeW1ib2wiJiZrZy50ZXN0KHkpKSYmeT4tMSYmeSUxPT0wJiZ5PGd9dmFyIHhtPURaO2Z1bmN0aW9uIGlCKHksZyx4LFQpe2lmKCFFZSh5KSlyZXR1cm4geTtnPVhUKGcseSk7Zm9yKHZhciBMPS0xLE89Zy5sZW5ndGgsUD1PLTEsJD15OyQhPW51bGwmJisrTDxPOyl7dmFyIHE9JEwoZ1tMXSksUz14O2lmKHE9PT0iX19wcm90b19fInx8cT09PSJjb25zdHJ1Y3RvciJ8fHE9PT0icHJvdG90eXBlIilyZXR1cm4geTtpZihMIT1QKXt2YXIgVj0kW3FdO1M9VD9UKFYscSwkKTp2b2lkIDAsUz09PXZvaWQgMCYmKFM9RWUoVik/Vjp4bShnW0wrMV0pP1tdOnt9KX1MWigkLHEsUyksJD0kW3FdfXJldHVybiB5fXZhciBJWj1pQjtmdW5jdGlvbiBPWih5LGcseCl7cmV0dXJuIHk9PW51bGw/eTpJWih5LGcseCl9dmFyIFBaPU9aO2Z1bmN0aW9uIEZaKHksZyl7dmFyIHg9LTEsVD15Lmxlbmd0aDtmb3IoZ3x8KGc9QXJyYXkoVCkpOysreDxUOylnW3hdPXlbeF07cmV0dXJuIGd9dmFyIE5aPUZaO2Z1bmN0aW9uIEJaKHkpe3JldHVybiBVVCh5KT9KTih5LCRMKTprcih5KT9beV06TlooWk4oS1QoeSkpKX12YXIgUlo9Qlosalo9e2RhdGE6ZnVuY3Rpb24oZyl7dmFyIHg9e2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITEsYWxsb3dHZXR0aW5nOiExLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsaW1tdXRhYmxlS2V5czp7fSx1cGRhdGVTdHlsZTohMSxiZWZvcmVHZXQ6ZnVuY3Rpb24oTCl7fSxiZWZvcmVTZXQ6ZnVuY3Rpb24oTCxPKXt9LG9uU2V0OmZ1bmN0aW9uKEwpe30sY2FuU2V0OmZ1bmN0aW9uKEwpe3JldHVybiEwfX07cmV0dXJuIGc9ZGUoe30seCxnKSxmdW5jdGlvbihMLE8pe3ZhciBQPWcsJD10aGlzLHE9JC5sZW5ndGghPT12b2lkIDAsUz1xPyQ6WyRdLFY9cT8kWzBdOiQ7aWYobXQoTCkpe3ZhciBZPUwuaW5kZXhPZigiLiIpIT09LTEscnQ9WSYmUlooTCk7aWYoUC5hbGxvd0dldHRpbmcmJk89PT12b2lkIDApe3ZhciBvdDtyZXR1cm4gViYmKFAuYmVmb3JlR2V0KFYpLHJ0JiZWLl9wcml2YXRlW1AuZmllbGRdW0xdPT09dm9pZCAwP290PXhaKFYuX3ByaXZhdGVbUC5maWVsZF0scnQpOm90PVYuX3ByaXZhdGVbUC5maWVsZF1bTF0pLG90fWVsc2UgaWYoUC5hbGxvd1NldHRpbmcmJk8hPT12b2lkIDApe3ZhciBodD0hUC5pbW11dGFibGVLZXlzW0xdO2lmKGh0KXt2YXIgZHQ9Yih7fSxMLE8pO1AuYmVmb3JlU2V0KCQsZHQpO2Zvcih2YXIgTHQ9MCxrdD1TLmxlbmd0aDtMdDxrdDtMdCsrKXt2YXIgRHQ9U1tMdF07UC5jYW5TZXQoRHQpJiYocnQmJlYuX3ByaXZhdGVbUC5maWVsZF1bTF09PT12b2lkIDA/UFooRHQuX3ByaXZhdGVbUC5maWVsZF0scnQsTyk6RHQuX3ByaXZhdGVbUC5maWVsZF1bTF09Tyl9UC51cGRhdGVTdHlsZSYmJC51cGRhdGVTdHlsZSgpLFAub25TZXQoJCksUC5zZXR0aW5nVHJpZ2dlcnNFdmVudCYmJFtQLnRyaWdnZXJGbk5hbWVdKFAuc2V0dGluZ0V2ZW50KX19fWVsc2UgaWYoUC5hbGxvd1NldHRpbmcmJnV0KEwpKXt2YXIgUHQ9TCwkdCxadCxZdD1PYmplY3Qua2V5cyhQdCk7UC5iZWZvcmVTZXQoJCxQdCk7Zm9yKHZhciBxdD0wO3F0PFl0Lmxlbmd0aDtxdCsrKXskdD1ZdFtxdF0sWnQ9UHRbJHRdO3ZhciBuZT0hUC5pbW11dGFibGVLZXlzWyR0XTtpZihuZSlmb3IodmFyIEd0PTA7R3Q8Uy5sZW5ndGg7R3QrKyl7dmFyIGdlPVNbR3RdO1AuY2FuU2V0KGdlKSYmKGdlLl9wcml2YXRlW1AuZmllbGRdWyR0XT1adCl9fVAudXBkYXRlU3R5bGUmJiQudXBkYXRlU3R5bGUoKSxQLm9uU2V0KCQpLFAuc2V0dGluZ1RyaWdnZXJzRXZlbnQmJiRbUC50cmlnZ2VyRm5OYW1lXShQLnNldHRpbmdFdmVudCl9ZWxzZSBpZihQLmFsbG93QmluZGluZyYmeXQoTCkpe3ZhciBiZT1MOyQub24oUC5iaW5kaW5nRXZlbnQsYmUpfWVsc2UgaWYoUC5hbGxvd0dldHRpbmcmJkw9PT12b2lkIDApe3ZhciBpZTtyZXR1cm4gViYmKFAuYmVmb3JlR2V0KFYpLGllPVYuX3ByaXZhdGVbUC5maWVsZF0pLGllfXJldHVybiAkfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihnKXt2YXIgeD17ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITEsaW1tdXRhYmxlS2V5czp7fX07cmV0dXJuIGc9ZGUoe30seCxnKSxmdW5jdGlvbihMKXt2YXIgTz1nLFA9dGhpcywkPVAubGVuZ3RoIT09dm9pZCAwLHE9JD9QOltQXTtpZihtdChMKSl7Zm9yKHZhciBTPUwuc3BsaXQoL1xzKy8pLFY9Uy5sZW5ndGgsWT0wO1k8VjtZKyspe3ZhciBydD1TW1ldO2lmKCFaKHJ0KSl7dmFyIG90PSFPLmltbXV0YWJsZUtleXNbcnRdO2lmKG90KWZvcih2YXIgaHQ9MCxkdD1xLmxlbmd0aDtodDxkdDtodCsrKXFbaHRdLl9wcml2YXRlW08uZmllbGRdW3J0XT12b2lkIDB9fU8udHJpZ2dlckV2ZW50JiZQW08udHJpZ2dlckZuTmFtZV0oTy5ldmVudCl9ZWxzZSBpZihMPT09dm9pZCAwKXtmb3IodmFyIEx0PTAsa3Q9cS5sZW5ndGg7THQ8a3Q7THQrKylmb3IodmFyIER0PXFbTHRdLl9wcml2YXRlW08uZmllbGRdLFB0PU9iamVjdC5rZXlzKER0KSwkdD0wOyR0PFB0Lmxlbmd0aDskdCsrKXt2YXIgWnQ9UHRbJHRdLFl0PSFPLmltbXV0YWJsZUtleXNbWnRdO1l0JiYoRHRbWnRdPXZvaWQgMCl9Ty50cmlnZ2VyRXZlbnQmJlBbTy50cmlnZ2VyRm5OYW1lXShPLmV2ZW50KX1yZXR1cm4gUH19fSwkWj17ZXZlbnRBbGlhc2VzT246ZnVuY3Rpb24oZyl7dmFyIHg9Zzt4LmFkZExpc3RlbmVyPXgubGlzdGVuPXguYmluZD14Lm9uLHgudW5saXN0ZW49eC51bmJpbmQ9eC5vZmY9eC5yZW1vdmVMaXN0ZW5lcix4LnRyaWdnZXI9eC5lbWl0LHgucG9uPXgucHJvbWlzZU9uPWZ1bmN0aW9uKFQsTCl7dmFyIE89dGhpcyxQPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gbmV3IGV4KGZ1bmN0aW9uKCQscSl7dmFyIFM9ZnVuY3Rpb24ob3Qpe08ub2ZmLmFwcGx5KE8sWSksJChvdCl9LFY9UC5jb25jYXQoW1NdKSxZPVYuY29uY2F0KFtdKTtPLm9uLmFwcGx5KE8sVil9KX19fSxBYz17fTtbelgsalosJFpdLmZvckVhY2goZnVuY3Rpb24oeSl7ZGUoQWMseSl9KTt2YXIgelo9e2FuaW1hdGU6QWMuYW5pbWF0ZSgpLGFuaW1hdGlvbjpBYy5hbmltYXRpb24oKSxhbmltYXRlZDpBYy5hbmltYXRlZCgpLGNsZWFyUXVldWU6QWMuY2xlYXJRdWV1ZSgpLGRlbGF5OkFjLmRlbGF5KCksZGVsYXlBbmltYXRpb246QWMuZGVsYXlBbmltYXRpb24oKSxzdG9wOkFjLnN0b3AoKX0sUVQ9e2NsYXNzZXM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcztpZihnPT09dm9pZCAwKXt2YXIgVD1bXTtyZXR1cm4geFswXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oaHQpe3JldHVybiBULnB1c2goaHQpfSksVH1lbHNlIGZ0KGcpfHwoZz0oZ3x8IiIpLm1hdGNoKC9cUysvZyl8fFtdKTtmb3IodmFyIEw9W10sTz1uZXcgWTUoZyksUD0wO1A8eC5sZW5ndGg7UCsrKXtmb3IodmFyICQ9eFtQXSxxPSQuX3ByaXZhdGUsUz1xLmNsYXNzZXMsVj0hMSxZPTA7WTxnLmxlbmd0aDtZKyspe3ZhciBydD1nW1ldLG90PVMuaGFzKHJ0KTtpZighb3Qpe1Y9ITA7YnJlYWt9fVZ8fChWPVMuc2l6ZSE9PWcubGVuZ3RoKSxWJiYocS5jbGFzc2VzPU8sTC5wdXNoKCQpKX1yZXR1cm4gTC5sZW5ndGg+MCYmdGhpcy5zcGF3bihMKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIikseH0sYWRkQ2xhc3M6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MoZywhMCl9LGhhc0NsYXNzOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXNbMF07cmV0dXJuIHghPW51bGwmJnguX3ByaXZhdGUuY2xhc3Nlcy5oYXMoZyl9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGcseCl7ZnQoZyl8fChnPWcubWF0Y2goL1xTKy9nKXx8W10pO2Zvcih2YXIgVD10aGlzLEw9eD09PXZvaWQgMCxPPVtdLFA9MCwkPVQubGVuZ3RoO1A8JDtQKyspZm9yKHZhciBxPVRbUF0sUz1xLl9wcml2YXRlLmNsYXNzZXMsVj0hMSxZPTA7WTxnLmxlbmd0aDtZKyspe3ZhciBydD1nW1ldLG90PVMuaGFzKHJ0KSxodD0hMTt4fHxMJiYhb3Q/KFMuYWRkKHJ0KSxodD0hMCk6KCF4fHxMJiZvdCkmJihTLmRlbGV0ZShydCksaHQ9ITApLCFWJiZodCYmKE8ucHVzaChxKSxWPSEwKX1yZXR1cm4gTy5sZW5ndGg+MCYmdGhpcy5zcGF3bihPKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksVH0scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MoZywhMSl9LGZsYXNoQ2xhc3M6ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzO2lmKHg9PW51bGwpeD0yNTA7ZWxzZSBpZih4PT09MClyZXR1cm4gVDtyZXR1cm4gVC5hZGRDbGFzcyhnKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5yZW1vdmVDbGFzcyhnKX0seCksVH19O1FULmNsYXNzTmFtZT1RVC5jbGFzc05hbWVzPVFULmNsYXNzZXM7dmFyIHRjPXttZXRhQ2hhcjoiW1xcIVxcXCJcXCNcXCRcXCVcXCZcXCdcXChcXClcXCpcXCtcXCxcXC5cXC9cXDpcXDtcXDxcXD1cXD5cXD9cXEBcXFtcXF1cXF5cXGBcXHtcXHxcXH1cXH5dIixjb21wYXJhdG9yT3A6Ij18XFwhPXw+fD49fDx8PD18XFwkPXxcXF49fFxcKj0iLGJvb2xPcDoiXFw/fFxcIXxcXF4iLHN0cmluZzpgIig/OlxcXFwifFteIl0pKiJ8Jyg/OlxcXFwnfFteJ10pKidgLG51bWJlcjpZZSxtZXRhOiJkZWdyZWV8aW5kZWdyZWV8b3V0ZGVncmVlIixzZXBhcmF0b3I6IlxccyosXFxzKiIsZGVzY2VuZGFudDoiXFxzKyIsY2hpbGQ6Ilxccys+XFxzKyIsc3ViamVjdDoiXFwkIixncm91cDoibm9kZXxlZGdlfFxcKiIsZGlyZWN0ZWRFZGdlOiJcXHMrLT5cXHMrIix1bmRpcmVjdGVkRWRnZToiXFxzKzwtPlxccysifTt0Yy52YXJpYWJsZT0iKD86W1xcdy0uXXwoPzpcXFxcIit0Yy5tZXRhQ2hhcisiKSkrIix0Yy5jbGFzc05hbWU9Iig/OltcXHctXXwoPzpcXFxcIit0Yy5tZXRhQ2hhcisiKSkrIix0Yy52YWx1ZT10Yy5zdHJpbmcrInwiK3RjLm51bWJlcix0Yy5pZD10Yy52YXJpYWJsZSxmdW5jdGlvbigpe3ZhciB5LGcseDtmb3IoeT10Yy5jb21wYXJhdG9yT3Auc3BsaXQoInwiKSx4PTA7eDx5Lmxlbmd0aDt4KyspZz15W3hdLHRjLmNvbXBhcmF0b3JPcCs9InxAIitnO2Zvcih5PXRjLmNvbXBhcmF0b3JPcC5zcGxpdCgifCIpLHg9MDt4PHkubGVuZ3RoO3grKylnPXlbeF0sIShnLmluZGV4T2YoIiEiKT49MCkmJmchPT0iPSImJih0Yy5jb21wYXJhdG9yT3ArPSJ8XFwhIitnKX0oKTt2YXIgS2M9ZnVuY3Rpb24oKXtyZXR1cm57Y2hlY2tzOltdfX0semk9e0dST1VQOjAsQ09MTEVDVElPTjoxLEZJTFRFUjoyLERBVEFfQ09NUEFSRTozLERBVEFfRVhJU1Q6NCxEQVRBX0JPT0w6NSxNRVRBX0NPTVBBUkU6NixTVEFURTo3LElEOjgsQ0xBU1M6OSxVTkRJUkVDVEVEX0VER0U6MTAsRElSRUNURURfRURHRToxMSxOT0RFX1NPVVJDRToxMixOT0RFX1RBUkdFVDoxMyxOT0RFX05FSUdIQk9SOjE0LENISUxEOjE1LERFU0NFTkRBTlQ6MTYsUEFSRU5UOjE3LEFOQ0VTVE9SOjE4LENPTVBPVU5EX1NQTElUOjE5LFRSVUU6MjB9LHpMPVt7c2VsZWN0b3I6IjpzZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6dW5zZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6c2VsZWN0YWJsZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5zZWxlY3RhYmxlKCl9fSx7c2VsZWN0b3I6Ijp1bnNlbGVjdGFibGUiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcuc2VsZWN0YWJsZSgpfX0se3NlbGVjdG9yOiI6bG9ja2VkIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmxvY2tlZCgpfX0se3NlbGVjdG9yOiI6dW5sb2NrZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcubG9ja2VkKCl9fSx7c2VsZWN0b3I6Ijp2aXNpYmxlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLnZpc2libGUoKX19LHtzZWxlY3RvcjoiOmhpZGRlbiIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy52aXNpYmxlKCl9fSx7c2VsZWN0b3I6Ijp0cmFuc3BhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy50cmFuc3BhcmVudCgpfX0se3NlbGVjdG9yOiI6Z3JhYmJlZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5ncmFiYmVkKCl9fSx7c2VsZWN0b3I6IjpmcmVlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLmdyYWJiZWQoKX19LHtzZWxlY3RvcjoiOnJlbW92ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVtb3ZlZCgpfX0se3NlbGVjdG9yOiI6aW5zaWRlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLnJlbW92ZWQoKX19LHtzZWxlY3RvcjoiOmdyYWJiYWJsZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5ncmFiYmFibGUoKX19LHtzZWxlY3RvcjoiOnVuZ3JhYmJhYmxlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiFnLmdyYWJiYWJsZSgpfX0se3NlbGVjdG9yOiI6YW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnVuYW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIWcuYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnBhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc1BhcmVudCgpfX0se3NlbGVjdG9yOiI6Y2hpbGRsZXNzIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzQ2hpbGRsZXNzKCl9fSx7c2VsZWN0b3I6IjpjaGlsZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6IjpvcnBoYW4iLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNPcnBoYW4oKX19LHtzZWxlY3RvcjoiOm5vbm9ycGhhbiIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6Ijpjb21wb3VuZCIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4gZy5pc05vZGUoKT9nLmlzUGFyZW50KCk6Zy5zb3VyY2UoKS5pc1BhcmVudCgpfHxnLnRhcmdldCgpLmlzUGFyZW50KCl9fSx7c2VsZWN0b3I6Ijpsb29wIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzTG9vcCgpfX0se3NlbGVjdG9yOiI6c2ltcGxlIixtYXRjaGVzOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzU2ltcGxlKCl9fSx7c2VsZWN0b3I6IjphY3RpdmUiLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuYWN0aXZlKCl9fSx7c2VsZWN0b3I6IjppbmFjdGl2ZSIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5hY3RpdmUoKX19LHtzZWxlY3RvcjoiOmJhY2tncm91bmRpbmciLG1hdGNoZXM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuYmFja2dyb3VuZGluZygpfX0se3NlbGVjdG9yOiI6bm9uYmFja2dyb3VuZGluZyIsbWF0Y2hlczpmdW5jdGlvbihnKXtyZXR1cm4hZy5iYWNrZ3JvdW5kaW5nKCl9fV0uc29ydChmdW5jdGlvbih5LGcpe3JldHVybiBNZSh5LnNlbGVjdG9yLGcuc2VsZWN0b3IpfSkscVo9ZnVuY3Rpb24oKXtmb3IodmFyIHk9e30sZyx4PTA7eDx6TC5sZW5ndGg7eCsrKWc9ekxbeF0seVtnLnNlbGVjdG9yXT1nLm1hdGNoZXM7cmV0dXJuIHl9KCksSFo9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gcVpbZ10oeCl9LFZaPSIoIit6TC5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIHkuc2VsZWN0b3J9KS5qb2luKCJ8IikrIikiLHN4PWZ1bmN0aW9uKGcpe3JldHVybiBnLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxcXCgiK3RjLm1ldGFDaGFyKyIpIiwiZyIpLGZ1bmN0aW9uKHgsVCl7cmV0dXJuIFR9KX0sa209ZnVuY3Rpb24oZyx4LFQpe2dbZy5sZW5ndGgtMV09VH0sVWU9W3tuYW1lOiJncm91cCIscXVlcnk6ITAscmVnZXg6IigiK3RjLmdyb3VwKyIpIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEw9RShULDEpLE89TFswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLkdST1VQLHZhbHVlOk89PT0iKiI/TzpPKyJzIn0pfX0se25hbWU6InN0YXRlIixxdWVyeTohMCxyZWdleDpWWixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEw9RShULDEpLE89TFswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLlNUQVRFLHZhbHVlOk99KX19LHtuYW1lOiJpZCIscXVlcnk6ITAscmVnZXg6IlxcIygiK3RjLmlkKyIpIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEw9RShULDEpLE89TFswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLklELHZhbHVlOnN4KE8pfSl9fSx7bmFtZToiY2xhc3NOYW1lIixxdWVyeTohMCxyZWdleDoiXFwuKCIrdGMuY2xhc3NOYW1lKyIpIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEw9RShULDEpLE89TFswXTt4LmNoZWNrcy5wdXNoKHt0eXBlOnppLkNMQVNTLHZhbHVlOnN4KE8pfSl9fSx7bmFtZToiZGF0YUV4aXN0cyIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIit0Yy52YXJpYWJsZSsiKVxccypcXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCxUKXt2YXIgTD1FKFQsMSksTz1MWzBdO3guY2hlY2tzLnB1c2goe3R5cGU6emkuREFUQV9FWElTVCxmaWVsZDpzeChPKX0pfX0se25hbWU6ImRhdGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK3RjLnZhcmlhYmxlKyIpXFxzKigiK3RjLmNvbXBhcmF0b3JPcCsiKVxccyooIit0Yy52YWx1ZSsiKVxccypcXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCxUKXt2YXIgTD1FKFQsMyksTz1MWzBdLFA9TFsxXSwkPUxbMl0scT1uZXcgUmVnRXhwKCJeIit0Yy5zdHJpbmcrIiQiKS5leGVjKCQpIT1udWxsO3E/JD0kLnN1YnN0cmluZygxLCQubGVuZ3RoLTEpOiQ9cGFyc2VGbG9hdCgkKSx4LmNoZWNrcy5wdXNoKHt0eXBlOnppLkRBVEFfQ09NUEFSRSxmaWVsZDpzeChPKSxvcGVyYXRvcjpQLHZhbHVlOiR9KX19LHtuYW1lOiJkYXRhQm9vbCIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIit0Yy5ib29sT3ArIilcXHMqKCIrdGMudmFyaWFibGUrIilcXHMqXFxdIixwb3B1bGF0ZTpmdW5jdGlvbihnLHgsVCl7dmFyIEw9RShULDIpLE89TFswXSxQPUxbMV07eC5jaGVja3MucHVzaCh7dHlwZTp6aS5EQVRBX0JPT0wsZmllbGQ6c3goUCksb3BlcmF0b3I6T30pfX0se25hbWU6Im1ldGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxbXFxzKigiK3RjLm1ldGErIilcXHMqKCIrdGMuY29tcGFyYXRvck9wKyIpXFxzKigiK3RjLm51bWJlcisiKVxccypcXF1cXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCxUKXt2YXIgTD1FKFQsMyksTz1MWzBdLFA9TFsxXSwkPUxbMl07eC5jaGVja3MucHVzaCh7dHlwZTp6aS5NRVRBX0NPTVBBUkUsZmllbGQ6c3goTyksb3BlcmF0b3I6UCx2YWx1ZTpwYXJzZUZsb2F0KCQpfSl9fSx7bmFtZToibmV4dFF1ZXJ5IixzZXBhcmF0b3I6ITAscmVnZXg6dGMuc2VwYXJhdG9yLHBvcHVsYXRlOmZ1bmN0aW9uKGcseCl7dmFyIFQ9Zy5jdXJyZW50U3ViamVjdCxMPWcuZWRnZUNvdW50LE89Zy5jb21wb3VuZENvdW50LFA9Z1tnLmxlbmd0aC0xXTtUIT1udWxsJiYoUC5zdWJqZWN0PVQsZy5jdXJyZW50U3ViamVjdD1udWxsKSxQLmVkZ2VDb3VudD1MLFAuY29tcG91bmRDb3VudD1PLGcuZWRnZUNvdW50PTAsZy5jb21wb3VuZENvdW50PTA7dmFyICQ9Z1tnLmxlbmd0aCsrXT1LYygpO3JldHVybiAkfX0se25hbWU6ImRpcmVjdGVkRWRnZSIsc2VwYXJhdG9yOiEwLHJlZ2V4OnRjLmRpcmVjdGVkRWRnZSxwb3B1bGF0ZTpmdW5jdGlvbihnLHgpe2lmKGcuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBUPUtjKCksTD14LE89S2MoKTtyZXR1cm4gVC5jaGVja3MucHVzaCh7dHlwZTp6aS5ESVJFQ1RFRF9FREdFLHNvdXJjZTpMLHRhcmdldDpPfSksa20oZyx4LFQpLGcuZWRnZUNvdW50KyssT31lbHNle3ZhciBQPUtjKCksJD14LHE9S2MoKTtyZXR1cm4gUC5jaGVja3MucHVzaCh7dHlwZTp6aS5OT0RFX1NPVVJDRSxzb3VyY2U6JCx0YXJnZXQ6cX0pLGttKGcseCxQKSxnLmVkZ2VDb3VudCsrLHF9fX0se25hbWU6InVuZGlyZWN0ZWRFZGdlIixzZXBhcmF0b3I6ITAscmVnZXg6dGMudW5kaXJlY3RlZEVkZ2UscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgVD1LYygpLEw9eCxPPUtjKCk7cmV0dXJuIFQuY2hlY2tzLnB1c2goe3R5cGU6emkuVU5ESVJFQ1RFRF9FREdFLG5vZGVzOltMLE9dfSksa20oZyx4LFQpLGcuZWRnZUNvdW50KyssT31lbHNle3ZhciBQPUtjKCksJD14LHE9S2MoKTtyZXR1cm4gUC5jaGVja3MucHVzaCh7dHlwZTp6aS5OT0RFX05FSUdIQk9SLG5vZGU6JCxuZWlnaGJvcjpxfSksa20oZyx4LFApLHF9fX0se25hbWU6ImNoaWxkIixzZXBhcmF0b3I6ITAscmVnZXg6dGMuY2hpbGQscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgVD1LYygpLEw9S2MoKSxPPWdbZy5sZW5ndGgtMV07cmV0dXJuIFQuY2hlY2tzLnB1c2goe3R5cGU6emkuQ0hJTEQscGFyZW50Ok8sY2hpbGQ6TH0pLGttKGcseCxUKSxnLmNvbXBvdW5kQ291bnQrKyxMfWVsc2UgaWYoZy5jdXJyZW50U3ViamVjdD09PXgpe3ZhciBQPUtjKCksJD1nW2cubGVuZ3RoLTFdLHE9S2MoKSxTPUtjKCksVj1LYygpLFk9S2MoKTtyZXR1cm4gUC5jaGVja3MucHVzaCh7dHlwZTp6aS5DT01QT1VORF9TUExJVCxsZWZ0OiQscmlnaHQ6cSxzdWJqZWN0OlN9KSxTLmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1be3R5cGU6emkuVFJVRX1dLFkuY2hlY2tzLnB1c2goe3R5cGU6emkuVFJVRX0pLHEuY2hlY2tzLnB1c2goe3R5cGU6emkuUEFSRU5ULHBhcmVudDpZLGNoaWxkOlZ9KSxrbShnLCQsUCksZy5jdXJyZW50U3ViamVjdD1TLGcuY29tcG91bmRDb3VudCsrLFZ9ZWxzZXt2YXIgcnQ9S2MoKSxvdD1LYygpLGh0PVt7dHlwZTp6aS5QQVJFTlQscGFyZW50OnJ0LGNoaWxkOm90fV07cmV0dXJuIHJ0LmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1odCxnLmNvbXBvdW5kQ291bnQrKyxvdH19fSx7bmFtZToiZGVzY2VuZGFudCIsc2VwYXJhdG9yOiEwLHJlZ2V4OnRjLmRlc2NlbmRhbnQscG9wdWxhdGU6ZnVuY3Rpb24oZyx4KXtpZihnLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgVD1LYygpLEw9S2MoKSxPPWdbZy5sZW5ndGgtMV07cmV0dXJuIFQuY2hlY2tzLnB1c2goe3R5cGU6emkuREVTQ0VOREFOVCxhbmNlc3RvcjpPLGRlc2NlbmRhbnQ6TH0pLGttKGcseCxUKSxnLmNvbXBvdW5kQ291bnQrKyxMfWVsc2UgaWYoZy5jdXJyZW50U3ViamVjdD09PXgpe3ZhciBQPUtjKCksJD1nW2cubGVuZ3RoLTFdLHE9S2MoKSxTPUtjKCksVj1LYygpLFk9S2MoKTtyZXR1cm4gUC5jaGVja3MucHVzaCh7dHlwZTp6aS5DT01QT1VORF9TUExJVCxsZWZ0OiQscmlnaHQ6cSxzdWJqZWN0OlN9KSxTLmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1be3R5cGU6emkuVFJVRX1dLFkuY2hlY2tzLnB1c2goe3R5cGU6emkuVFJVRX0pLHEuY2hlY2tzLnB1c2goe3R5cGU6emkuQU5DRVNUT1IsYW5jZXN0b3I6WSxkZXNjZW5kYW50OlZ9KSxrbShnLCQsUCksZy5jdXJyZW50U3ViamVjdD1TLGcuY29tcG91bmRDb3VudCsrLFZ9ZWxzZXt2YXIgcnQ9S2MoKSxvdD1LYygpLGh0PVt7dHlwZTp6aS5BTkNFU1RPUixhbmNlc3RvcjpydCxkZXNjZW5kYW50Om90fV07cmV0dXJuIHJ0LmNoZWNrcz14LmNoZWNrcyx4LmNoZWNrcz1odCxnLmNvbXBvdW5kQ291bnQrKyxvdH19fSx7bmFtZToic3ViamVjdCIsbW9kaWZpZXI6ITAscmVnZXg6dGMuc3ViamVjdCxwb3B1bGF0ZTpmdW5jdGlvbihnLHgpe2lmKGcuY3VycmVudFN1YmplY3QhPW51bGwmJmcuY3VycmVudFN1YmplY3QhPT14KXJldHVybiBTYygiUmVkZWZpbml0aW9uIG9mIHN1YmplY3QgaW4gc2VsZWN0b3IgYCIrZy50b1N0cmluZygpKyJgIiksITE7Zy5jdXJyZW50U3ViamVjdD14O3ZhciBUPWdbZy5sZW5ndGgtMV0sTD1ULmNoZWNrc1swXSxPPUw9PW51bGw/bnVsbDpMLnR5cGU7Tz09PXppLkRJUkVDVEVEX0VER0U/TC50eXBlPXppLk5PREVfVEFSR0VUOk89PT16aS5VTkRJUkVDVEVEX0VER0UmJihMLnR5cGU9emkuTk9ERV9ORUlHSEJPUixMLm5vZGU9TC5ub2Rlc1sxXSxMLm5laWdoYm9yPUwubm9kZXNbMF0sTC5ub2Rlcz1udWxsKX19XTtVZS5mb3JFYWNoKGZ1bmN0aW9uKHkpe3JldHVybiB5LnJlZ2V4T2JqPW5ldyBSZWdFeHAoIl4iK3kucmVnZXgpfSk7dmFyIEdaPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeCxULEwsTz0wO088VWUubGVuZ3RoO08rKyl7dmFyIFA9VWVbT10sJD1QLm5hbWUscT1nLm1hdGNoKFAucmVnZXhPYmopO2lmKHEhPW51bGwpe1Q9cSx4PVAsTD0kO3ZhciBTPXFbMF07Zz1nLnN1YnN0cmluZyhTLmxlbmd0aCk7YnJlYWt9fXJldHVybntleHByOngsbWF0Y2g6VCxuYW1lOkwscmVtYWluaW5nOmd9fSxVWj1mdW5jdGlvbihnKXt2YXIgeD1nLm1hdGNoKC9eXHMrLyk7aWYoeCl7dmFyIFQ9eFswXTtnPWcuc3Vic3RyaW5nKFQubGVuZ3RoKX1yZXR1cm4gZ30sV1o9ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcyxUPXguaW5wdXRUZXh0PWcsTD14WzBdPUtjKCk7Zm9yKHgubGVuZ3RoPTEsVD1VWihUKTs7KXt2YXIgTz1HWihUKTtpZihPLmV4cHI9PW51bGwpcmV0dXJuIFNjKCJUaGUgc2VsZWN0b3IgYCIrZysiYGlzIGludmFsaWQiKSwhMTt2YXIgUD1PLm1hdGNoLnNsaWNlKDEpLCQ9Ty5leHByLnBvcHVsYXRlKHgsTCxQKTtpZigkPT09ITEpcmV0dXJuITE7aWYoJCE9bnVsbCYmKEw9JCksVD1PLnJlbWFpbmluZyxULm1hdGNoKC9eXHMqJC8pKWJyZWFrfXZhciBxPXhbeC5sZW5ndGgtMV07eC5jdXJyZW50U3ViamVjdCE9bnVsbCYmKHEuc3ViamVjdD14LmN1cnJlbnRTdWJqZWN0KSxxLmVkZ2VDb3VudD14LmVkZ2VDb3VudCxxLmNvbXBvdW5kQ291bnQ9eC5jb21wb3VuZENvdW50O2Zvcih2YXIgUz0wO1M8eC5sZW5ndGg7UysrKXt2YXIgVj14W1NdO2lmKFYuY29tcG91bmRDb3VudD4wJiZWLmVkZ2VDb3VudD4wKXJldHVybiBTYygiVGhlIHNlbGVjdG9yIGAiK2crImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgYm90aCBhIGNvbXBvdW5kIHNlbGVjdG9yIGFuZCBhbiBlZGdlIHNlbGVjdG9yIiksITE7aWYoVi5lZGdlQ291bnQ+MSlyZXR1cm4gU2MoIlRoZSBzZWxlY3RvciBgIitnKyJgIGlzIGludmFsaWQgYmVjYXVzZSBpdCB1c2VzIG11bHRpcGxlIGVkZ2Ugc2VsZWN0b3JzIiksITE7Vi5lZGdlQ291bnQ9PT0xJiZTYygiVGhlIHNlbGVjdG9yIGAiK2crImAgaXMgZGVwcmVjYXRlZC4gIEVkZ2Ugc2VsZWN0b3JzIGRvIG5vdCB0YWtlIGVmZmVjdCBvbiBjaGFuZ2VzIHRvIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzIGFmdGVyIGFuIGVkZ2UgaXMgYWRkZWQsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiAgVXNlIGEgY2xhc3Mgb3IgZGF0YSBzZWxlY3RvciBvbiBlZGdlcyBpbnN0ZWFkLCB1cGRhdGluZyB0aGUgY2xhc3Mgb3IgZGF0YSBvZiBhbiBlZGdlIHdoZW4geW91ciBhcHAgZGV0ZWN0cyBhIGNoYW5nZSBpbiBzb3VyY2Ugb3IgdGFyZ2V0IG5vZGVzLiIpfXJldHVybiEwfSxZWj1mdW5jdGlvbigpe2lmKHRoaXMudG9TdHJpbmdDYWNoZSE9bnVsbClyZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlO2Zvcih2YXIgZz1mdW5jdGlvbihWKXtyZXR1cm4gVj8/IiJ9LHg9ZnVuY3Rpb24oVil7cmV0dXJuIG10KFYpPyciJytWKyciJzpnKFYpfSxUPWZ1bmN0aW9uKFYpe3JldHVybiIgIitWKyIgIn0sTD1mdW5jdGlvbihWLFkpe3ZhciBydD1WLnR5cGUsb3Q9Vi52YWx1ZTtzd2l0Y2gocnQpe2Nhc2UgemkuR1JPVVA6e3ZhciBodD1nKG90KTtyZXR1cm4gaHQuc3Vic3RyaW5nKDAsaHQubGVuZ3RoLTEpfWNhc2UgemkuREFUQV9DT01QQVJFOnt2YXIgZHQ9Vi5maWVsZCxMdD1WLm9wZXJhdG9yO3JldHVybiJbIitkdCtUKGcoTHQpKSt4KG90KSsiXSJ9Y2FzZSB6aS5EQVRBX0JPT0w6e3ZhciBrdD1WLm9wZXJhdG9yLER0PVYuZmllbGQ7cmV0dXJuIlsiK2coa3QpK0R0KyJdIn1jYXNlIHppLkRBVEFfRVhJU1Q6e3ZhciBQdD1WLmZpZWxkO3JldHVybiJbIitQdCsiXSJ9Y2FzZSB6aS5NRVRBX0NPTVBBUkU6e3ZhciAkdD1WLm9wZXJhdG9yLFp0PVYuZmllbGQ7cmV0dXJuIltbIitadCtUKGcoJHQpKSt4KG90KSsiXV0ifWNhc2UgemkuU1RBVEU6cmV0dXJuIG90O2Nhc2UgemkuSUQ6cmV0dXJuIiMiK290O2Nhc2UgemkuQ0xBU1M6cmV0dXJuIi4iK290O2Nhc2UgemkuUEFSRU5UOmNhc2UgemkuQ0hJTEQ6cmV0dXJuIE8oVi5wYXJlbnQsWSkrVCgiPiIpK08oVi5jaGlsZCxZKTtjYXNlIHppLkFOQ0VTVE9SOmNhc2UgemkuREVTQ0VOREFOVDpyZXR1cm4gTyhWLmFuY2VzdG9yLFkpKyIgIitPKFYuZGVzY2VuZGFudCxZKTtjYXNlIHppLkNPTVBPVU5EX1NQTElUOnt2YXIgWXQ9TyhWLmxlZnQsWSkscXQ9TyhWLnN1YmplY3QsWSksbmU9TyhWLnJpZ2h0LFkpO3JldHVybiBZdCsoWXQubGVuZ3RoPjA/IiAiOiIiKStxdCtuZX1jYXNlIHppLlRSVUU6cmV0dXJuIiJ9fSxPPWZ1bmN0aW9uKFYsWSl7cmV0dXJuIFYuY2hlY2tzLnJlZHVjZShmdW5jdGlvbihydCxvdCxodCl7cmV0dXJuIHJ0KyhZPT09ViYmaHQ9PT0wPyIkIjoiIikrTChvdCxZKX0sIiIpfSxQPSIiLCQ9MDskPHRoaXMubGVuZ3RoOyQrKyl7dmFyIHE9dGhpc1skXTtQKz1PKHEscS5zdWJqZWN0KSx0aGlzLmxlbmd0aD4xJiYkPHRoaXMubGVuZ3RoLTEmJihQKz0iLCAiKX1yZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlPVAsUH0sS1o9e3BhcnNlOldaLHRvU3RyaW5nOllafSxzQj1mdW5jdGlvbihnLHgsVCl7dmFyIEwsTz1tdChnKSxQPVgoZyksJD1tdChUKSxxLFMsVj0hMSxZPSExLHJ0PSExO3N3aXRjaCh4LmluZGV4T2YoIiEiKT49MCYmKHg9eC5yZXBsYWNlKCIhIiwiIiksWT0hMCkseC5pbmRleE9mKCJAIik+PTAmJih4PXgucmVwbGFjZSgiQCIsIiIpLFY9ITApLChPfHwkfHxWKSYmKHE9IU8mJiFQPyIiOiIiK2csUz0iIitUKSxWJiYoZz1xPXEudG9Mb3dlckNhc2UoKSxUPVM9Uy50b0xvd2VyQ2FzZSgpKSx4KXtjYXNlIio9IjpMPXEuaW5kZXhPZihTKT49MDticmVhaztjYXNlIiQ9IjpMPXEuaW5kZXhPZihTLHEubGVuZ3RoLVMubGVuZ3RoKT49MDticmVhaztjYXNlIl49IjpMPXEuaW5kZXhPZihTKT09PTA7YnJlYWs7Y2FzZSI9IjpMPWc9PT1UO2JyZWFrO2Nhc2UiPiI6cnQ9ITAsTD1nPlQ7YnJlYWs7Y2FzZSI+PSI6cnQ9ITAsTD1nPj1UO2JyZWFrO2Nhc2UiPCI6cnQ9ITAsTD1nPFQ7YnJlYWs7Y2FzZSI8PSI6cnQ9ITAsTD1nPD1UO2JyZWFrO2RlZmF1bHQ6TD0hMTticmVha31yZXR1cm4gWSYmKGchPW51bGx8fCFydCkmJihMPSFMKSxMfSxYWj1mdW5jdGlvbihnLHgpe3N3aXRjaCh4KXtjYXNlIj8iOnJldHVybiEhZztjYXNlIiEiOnJldHVybiFnO2Nhc2UiXiI6cmV0dXJuIGc9PT12b2lkIDB9fSxRWj1mdW5jdGlvbihnKXtyZXR1cm4gZyE9PXZvaWQgMH0scUw9ZnVuY3Rpb24oZyx4KXtyZXR1cm4gZy5kYXRhKHgpfSxaWj1mdW5jdGlvbihnLHgpe3JldHVybiBnW3hdKCl9LFl1PVtdLEl1PWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uKFQpe3JldHVybiBZdVtULnR5cGVdKFQseCl9KX07WXVbemkuR1JPVVBdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4geD09PSIqInx8eD09PWcuZ3JvdXAoKX0sWXVbemkuU1RBVEVdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4gSFooeCxnKX0sWXVbemkuSURdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4gZy5pZCgpPT09eH0sWXVbemkuQ0xBU1NdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS52YWx1ZTtyZXR1cm4gZy5oYXNDbGFzcyh4KX0sWXVbemkuTUVUQV9DT01QQVJFXT1mdW5jdGlvbih5LGcpe3ZhciB4PXkuZmllbGQsVD15Lm9wZXJhdG9yLEw9eS52YWx1ZTtyZXR1cm4gc0IoWlooZyx4KSxULEwpfSxZdVt6aS5EQVRBX0NPTVBBUkVdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5maWVsZCxUPXkub3BlcmF0b3IsTD15LnZhbHVlO3JldHVybiBzQihxTChnLHgpLFQsTCl9LFl1W3ppLkRBVEFfQk9PTF09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LmZpZWxkLFQ9eS5vcGVyYXRvcjtyZXR1cm4gWFoocUwoZyx4KSxUKX0sWXVbemkuREFUQV9FWElTVF09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LmZpZWxkO3JldHVybiB5Lm9wZXJhdG9yLFFaKHFMKGcseCkpfSxZdVt6aS5VTkRJUkVDVEVEX0VER0VdPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5ub2Rlc1swXSxUPXkubm9kZXNbMV0sTD1nLnNvdXJjZSgpLE89Zy50YXJnZXQoKTtyZXR1cm4gSXUoeCxMKSYmSXUoVCxPKXx8SXUoVCxMKSYmSXUoeCxPKX0sWXVbemkuTk9ERV9ORUlHSEJPUl09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gSXUoeS5ub2RlLGcpJiZnLm5laWdoYm9yaG9vZCgpLnNvbWUoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNOb2RlKCkmJkl1KHkubmVpZ2hib3IseCl9KX0sWXVbemkuRElSRUNURURfRURHRV09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gSXUoeS5zb3VyY2UsZy5zb3VyY2UoKSkmJkl1KHkudGFyZ2V0LGcudGFyZ2V0KCkpfSxZdVt6aS5OT0RFX1NPVVJDRV09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gSXUoeS5zb3VyY2UsZykmJmcub3V0Z29lcnMoKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiB4LmlzTm9kZSgpJiZJdSh5LnRhcmdldCx4KX0pfSxZdVt6aS5OT0RFX1RBUkdFVF09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gSXUoeS50YXJnZXQsZykmJmcuaW5jb21lcnMoKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiB4LmlzTm9kZSgpJiZJdSh5LnNvdXJjZSx4KX0pfSxZdVt6aS5DSElMRF09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gSXUoeS5jaGlsZCxnKSYmSXUoeS5wYXJlbnQsZy5wYXJlbnQoKSl9LFl1W3ppLlBBUkVOVF09ZnVuY3Rpb24oeSxnKXtyZXR1cm4gSXUoeS5wYXJlbnQsZykmJmcuY2hpbGRyZW4oKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiBJdSh5LmNoaWxkLHgpfSl9LFl1W3ppLkRFU0NFTkRBTlRdPWZ1bmN0aW9uKHksZyl7cmV0dXJuIEl1KHkuZGVzY2VuZGFudCxnKSYmZy5hbmNlc3RvcnMoKS5zb21lKGZ1bmN0aW9uKHgpe3JldHVybiBJdSh5LmFuY2VzdG9yLHgpfSl9LFl1W3ppLkFOQ0VTVE9SXT1mdW5jdGlvbih5LGcpe3JldHVybiBJdSh5LmFuY2VzdG9yLGcpJiZnLmRlc2NlbmRhbnRzKCkuc29tZShmdW5jdGlvbih4KXtyZXR1cm4gSXUoeS5kZXNjZW5kYW50LHgpfSl9LFl1W3ppLkNPTVBPVU5EX1NQTElUXT1mdW5jdGlvbih5LGcpe3JldHVybiBJdSh5LnN1YmplY3QsZykmJkl1KHkubGVmdCxnKSYmSXUoeS5yaWdodCxnKX0sWXVbemkuVFJVRV09ZnVuY3Rpb24oKXtyZXR1cm4hMH0sWXVbemkuQ09MTEVDVElPTl09ZnVuY3Rpb24oeSxnKXt2YXIgeD15LnZhbHVlO3JldHVybiB4LmhhcyhnKX0sWXVbemkuRklMVEVSXT1mdW5jdGlvbih5LGcpe3ZhciB4PXkudmFsdWU7cmV0dXJuIHgoZyl9O3ZhciBKWj1mdW5jdGlvbihnKXt2YXIgeD10aGlzO2lmKHgubGVuZ3RoPT09MSYmeFswXS5jaGVja3MubGVuZ3RoPT09MSYmeFswXS5jaGVja3NbMF0udHlwZT09PXppLklEKXJldHVybiBnLmdldEVsZW1lbnRCeUlkKHhbMF0uY2hlY2tzWzBdLnZhbHVlKS5jb2xsZWN0aW9uKCk7dmFyIFQ9ZnVuY3Rpb24oTyl7Zm9yKHZhciBQPTA7UDx4Lmxlbmd0aDtQKyspe3ZhciAkPXhbUF07aWYoSXUoJCxPKSlyZXR1cm4hMH1yZXR1cm4hMX07cmV0dXJuIHgudGV4dCgpPT1udWxsJiYoVD1mdW5jdGlvbigpe3JldHVybiEwfSksZy5maWx0ZXIoVCl9LHRKPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeD10aGlzLFQ9MDtUPHgubGVuZ3RoO1QrKyl7dmFyIEw9eFtUXTtpZihJdShMLGcpKXJldHVybiEwfXJldHVybiExfSxlSj17bWF0Y2hlczp0SixmaWx0ZXI6Slp9LEVtPWZ1bmN0aW9uKGcpe3RoaXMuaW5wdXRUZXh0PWcsdGhpcy5jdXJyZW50U3ViamVjdD1udWxsLHRoaXMuY29tcG91bmRDb3VudD0wLHRoaXMuZWRnZUNvdW50PTAsdGhpcy5sZW5ndGg9MCxnPT1udWxsfHxtdChnKSYmZy5tYXRjaCgvXlxzKiQvKXx8KFR0KGcpP3RoaXMuYWRkUXVlcnkoe2NoZWNrczpbe3R5cGU6emkuQ09MTEVDVElPTix2YWx1ZTpnLmNvbGxlY3Rpb24oKX1dfSk6eXQoZyk/dGhpcy5hZGRRdWVyeSh7Y2hlY2tzOlt7dHlwZTp6aS5GSUxURVIsdmFsdWU6Z31dfSk6bXQoZyk/dGhpcy5wYXJzZShnKXx8KHRoaXMuaW52YWxpZD0hMCk6dmwoIkEgc2VsZWN0b3IgbXVzdCBiZSBjcmVhdGVkIGZyb20gYSBzdHJpbmc7IGZvdW5kICIpKX0scHc9RW0ucHJvdG90eXBlO1tLWixlSl0uZm9yRWFjaChmdW5jdGlvbih5KXtyZXR1cm4gZGUocHcseSl9KSxwdy50ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRUZXh0fSxwdy5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxwdy5lcT1mdW5jdGlvbih5KXtyZXR1cm4gdGhpc1t5XX0scHcuc2FtZVRleHQ9ZnVuY3Rpb24oeSl7cmV0dXJuIXRoaXMuaW52YWxpZCYmIXkuaW52YWxpZCYmdGhpcy50ZXh0KCk9PT15LnRleHQoKX0scHcuYWRkUXVlcnk9ZnVuY3Rpb24oeSl7dGhpc1t0aGlzLmxlbmd0aCsrXT15fSxwdy5zZWxlY3Rvcj1wdy50b1N0cmluZzt2YXIgeHA9e2FsbEFyZTpmdW5jdGlvbihnKXt2YXIgeD1uZXcgRW0oZyk7cmV0dXJuIHRoaXMuZXZlcnkoZnVuY3Rpb24oVCl7cmV0dXJuIHgubWF0Y2hlcyhUKX0pfSxpczpmdW5jdGlvbihnKXt2YXIgeD1uZXcgRW0oZyk7cmV0dXJuIHRoaXMuc29tZShmdW5jdGlvbihUKXtyZXR1cm4geC5tYXRjaGVzKFQpfSl9LHNvbWU6ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEw9eD9nLmFwcGx5KHgsW3RoaXNbVF0sVCx0aGlzXSk6Zyh0aGlzW1RdLFQsdGhpcyk7aWYoTClyZXR1cm4hMH1yZXR1cm4hMX0sZXZlcnk6ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEw9eD9nLmFwcGx5KHgsW3RoaXNbVF0sVCx0aGlzXSk6Zyh0aGlzW1RdLFQsdGhpcyk7aWYoIUwpcmV0dXJuITF9cmV0dXJuITB9LHNhbWU6ZnVuY3Rpb24oZyl7aWYodGhpcz09PWcpcmV0dXJuITA7Zz10aGlzLmN5KCkuY29sbGVjdGlvbihnKTt2YXIgeD10aGlzLmxlbmd0aCxUPWcubGVuZ3RoO3JldHVybiB4IT09VD8hMTp4PT09MT90aGlzWzBdPT09Z1swXTp0aGlzLmV2ZXJ5KGZ1bmN0aW9uKEwpe3JldHVybiBnLmhhc0VsZW1lbnRXaXRoSWQoTC5pZCgpKX0pfSxhbnlTYW1lOmZ1bmN0aW9uKGcpe3JldHVybiBnPXRoaXMuY3koKS5jb2xsZWN0aW9uKGcpLHRoaXMuc29tZShmdW5jdGlvbih4KXtyZXR1cm4gZy5oYXNFbGVtZW50V2l0aElkKHguaWQoKSl9KX0sYWxsQXJlTmVpZ2hib3JzOmZ1bmN0aW9uKGcpe2c9dGhpcy5jeSgpLmNvbGxlY3Rpb24oZyk7dmFyIHg9dGhpcy5uZWlnaGJvcmhvb2QoKTtyZXR1cm4gZy5ldmVyeShmdW5jdGlvbihUKXtyZXR1cm4geC5oYXNFbGVtZW50V2l0aElkKFQuaWQoKSl9KX0sY29udGFpbnM6ZnVuY3Rpb24oZyl7Zz10aGlzLmN5KCkuY29sbGVjdGlvbihnKTt2YXIgeD10aGlzO3JldHVybiBnLmV2ZXJ5KGZ1bmN0aW9uKFQpe3JldHVybiB4Lmhhc0VsZW1lbnRXaXRoSWQoVC5pZCgpKX0pfX07eHAuYWxsQXJlTmVpZ2hib3Vycz14cC5hbGxBcmVOZWlnaGJvcnMseHAuaGFzPXhwLmNvbnRhaW5zLHhwLmVxdWFsPXhwLmVxdWFscz14cC5zYW1lO3ZhciBhZD1mdW5jdGlvbihnLHgpe3JldHVybiBmdW5jdGlvbihMLE8sUCwkKXt2YXIgcT1MLFM9dGhpcyxWO2lmKHE9PW51bGw/Vj0iIjpUdChxKSYmcS5sZW5ndGg9PT0xJiYoVj1xLmlkKCkpLFMubGVuZ3RoPT09MSYmVil7dmFyIFk9U1swXS5fcHJpdmF0ZSxydD1ZLnRyYXZlcnNhbENhY2hlPVkudHJhdmVyc2FsQ2FjaGV8fHt9LG90PXJ0W3hdPXJ0W3hdfHxbXSxodD1yZChWKSxkdD1vdFtodF07cmV0dXJuIGR0fHwob3RbaHRdPWcuY2FsbChTLEwsTyxQLCQpKX1lbHNlIHJldHVybiBnLmNhbGwoUyxMLE8sUCwkKX19LGF4PXtwYXJlbnQ6ZnVuY3Rpb24oZyl7dmFyIHg9W107aWYodGhpcy5sZW5ndGg9PT0xKXt2YXIgVD10aGlzWzBdLl9wcml2YXRlLnBhcmVudDtpZihUKXJldHVybiBUfWZvcih2YXIgTD0wO0w8dGhpcy5sZW5ndGg7TCsrKXt2YXIgTz10aGlzW0xdLFA9Ty5fcHJpdmF0ZS5wYXJlbnQ7UCYmeC5wdXNoKFApfXJldHVybiB0aGlzLnNwYXduKHgsITApLmZpbHRlcihnKX0scGFyZW50czpmdW5jdGlvbihnKXtmb3IodmFyIHg9W10sVD10aGlzLnBhcmVudCgpO1Qubm9uZW1wdHkoKTspe2Zvcih2YXIgTD0wO0w8VC5sZW5ndGg7TCsrKXt2YXIgTz1UW0xdO3gucHVzaChPKX1UPVQucGFyZW50KCl9cmV0dXJuIHRoaXMuc3Bhd24oeCwhMCkuZmlsdGVyKGcpfSxjb21tb25BbmNlc3RvcnM6ZnVuY3Rpb24oZyl7Zm9yKHZhciB4LFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEw9dGhpc1tUXSxPPUwucGFyZW50cygpO3g9eHx8Tyx4PXguaW50ZXJzZWN0KE8pfXJldHVybiB4LmZpbHRlcihnKX0sb3JwaGFuczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNPcnBoYW4oKX0pLmZpbHRlcihnKX0sbm9ub3JwaGFuczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNDaGlsZCgpfSkuZmlsdGVyKGcpfSxjaGlsZHJlbjphZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD0wO3g8dGhpcy5sZW5ndGg7eCsrKWZvcih2YXIgVD10aGlzW3hdLEw9VC5fcHJpdmF0ZS5jaGlsZHJlbixPPTA7TzxMLmxlbmd0aDtPKyspZy5wdXNoKExbT10pO3JldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNoaWxkcmVuIiksc2libGluZ3M6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucGFyZW50KCkuY2hpbGRyZW4oKS5ub3QodGhpcykuZmlsdGVyKGcpfSxpc1BhcmVudDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5pc05vZGUoKSYmZy5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGghPT0wfSxpc0NoaWxkbGVzczpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5pc05vZGUoKSYmZy5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGg9PT0wfSxpc0NoaWxkOmZ1bmN0aW9uKCl7dmFyIGc9dGhpc1swXTtpZihnKXJldHVybiBnLmlzTm9kZSgpJiZnLl9wcml2YXRlLnBhcmVudCE9bnVsbH0saXNPcnBoYW46ZnVuY3Rpb24oKXt2YXIgZz10aGlzWzBdO2lmKGcpcmV0dXJuIGcuaXNOb2RlKCkmJmcuX3ByaXZhdGUucGFyZW50PT1udWxsfSxkZXNjZW5kYW50czpmdW5jdGlvbihnKXt2YXIgeD1bXTtmdW5jdGlvbiBUKEwpe2Zvcih2YXIgTz0wO088TC5sZW5ndGg7TysrKXt2YXIgUD1MW09dO3gucHVzaChQKSxQLmNoaWxkcmVuKCkubm9uZW1wdHkoKSYmVChQLmNoaWxkcmVuKCkpfX1yZXR1cm4gVCh0aGlzLmNoaWxkcmVuKCkpLHRoaXMuc3Bhd24oeCwhMCkuZmlsdGVyKGcpfX07ZnVuY3Rpb24gWlQoeSxnLHgsVCl7Zm9yKHZhciBMPVtdLE89bmV3IFk1LFA9eS5jeSgpLCQ9UC5oYXNDb21wb3VuZE5vZGVzKCkscT0wO3E8eS5sZW5ndGg7cSsrKXt2YXIgUz15W3FdO3g/TC5wdXNoKFMpOiQmJlQoTCxPLFMpfWZvcig7TC5sZW5ndGg+MDspe3ZhciBWPUwuc2hpZnQoKTtnKFYpLE8uYWRkKFYuaWQoKSksJCYmVChMLE8sVil9cmV0dXJuIHl9ZnVuY3Rpb24gSWsoeSxnLHgpe2lmKHguaXNQYXJlbnQoKSlmb3IodmFyIFQ9eC5fcHJpdmF0ZS5jaGlsZHJlbixMPTA7TDxULmxlbmd0aDtMKyspe3ZhciBPPVRbTF07Zy5oYXMoTy5pZCgpKXx8eS5wdXNoKE8pfX1heC5mb3JFYWNoRG93bj1mdW5jdGlvbih5KXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIFpUKHRoaXMseSxnLElrKX07ZnVuY3Rpb24gYUIoeSxnLHgpe2lmKHguaXNDaGlsZCgpKXt2YXIgVD14Ll9wcml2YXRlLnBhcmVudDtnLmhhcyhULmlkKCkpfHx5LnB1c2goVCl9fWF4LmZvckVhY2hVcD1mdW5jdGlvbih5KXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIFpUKHRoaXMseSxnLGFCKX07ZnVuY3Rpb24gbkooeSxnLHgpe2FCKHksZyx4KSxJayh5LGcseCl9YXguZm9yRWFjaFVwQW5kRG93bj1mdW5jdGlvbih5KXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIFpUKHRoaXMseSxnLG5KKX0sYXguYW5jZXN0b3JzPWF4LnBhcmVudHM7dmFyIE9rLG9CO09rPW9CPXtkYXRhOkFjLmRhdGEoe2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJkYXRhIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsaW1tdXRhYmxlS2V5czp7aWQ6ITAsc291cmNlOiEwLHRhcmdldDohMCxwYXJlbnQ6ITB9LHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlRGF0YTpBYy5yZW1vdmVEYXRhKHtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMCxpbW11dGFibGVLZXlzOntpZDohMCxzb3VyY2U6ITAsdGFyZ2V0OiEwLHBhcmVudDohMH0sdXBkYXRlU3R5bGU6ITB9KSxzY3JhdGNoOkFjLmRhdGEoe2ZpZWxkOiJzY3JhdGNoIixiaW5kaW5nRXZlbnQ6InNjcmF0Y2giLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJzY3JhdGNoIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVTY3JhdGNoOkFjLnJlbW92ZURhdGEoe2ZpZWxkOiJzY3JhdGNoIixldmVudDoic2NyYXRjaCIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLHVwZGF0ZVN0eWxlOiEwfSkscnNjcmF0Y2g6QWMuZGF0YSh7ZmllbGQ6InJzY3JhdGNoIixhbGxvd0JpbmRpbmc6ITEsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiExLGFsbG93R2V0dGluZzohMH0pLHJlbW92ZVJzY3JhdGNoOkFjLnJlbW92ZURhdGEoe2ZpZWxkOiJyc2NyYXRjaCIsdHJpZ2dlckV2ZW50OiExfSksaWQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzWzBdO2lmKGcpcmV0dXJuIGcuX3ByaXZhdGUuZGF0YS5pZH19LE9rLmF0dHI9T2suZGF0YSxPay5yZW1vdmVBdHRyPU9rLnJlbW92ZURhdGE7dmFyIHJKPW9CLEpUPXt9O2Z1bmN0aW9uIG94KHkpe3JldHVybiBmdW5jdGlvbihnKXt2YXIgeD10aGlzO2lmKGc9PT12b2lkIDAmJihnPSEwKSx4Lmxlbmd0aCE9PTApaWYoeC5pc05vZGUoKSYmIXgucmVtb3ZlZCgpKXtmb3IodmFyIFQ9MCxMPXhbMF0sTz1MLl9wcml2YXRlLmVkZ2VzLFA9MDtQPE8ubGVuZ3RoO1ArKyl7dmFyICQ9T1tQXTshZyYmJC5pc0xvb3AoKXx8KFQrPXkoTCwkKSl9cmV0dXJuIFR9ZWxzZSByZXR1cm59fWRlKEpULHtkZWdyZWU6b3goZnVuY3Rpb24oeSxnKXtyZXR1cm4gZy5zb3VyY2UoKS5zYW1lKGcudGFyZ2V0KCkpPzI6MX0pLGluZGVncmVlOm94KGZ1bmN0aW9uKHksZyl7cmV0dXJuIGcudGFyZ2V0KCkuc2FtZSh5KT8xOjB9KSxvdXRkZWdyZWU6b3goZnVuY3Rpb24oeSxnKXtyZXR1cm4gZy5zb3VyY2UoKS5zYW1lKHkpPzE6MH0pfSk7ZnVuY3Rpb24gY3goeSxnKXtyZXR1cm4gZnVuY3Rpb24oeCl7Zm9yKHZhciBULEw9dGhpcy5ub2RlcygpLE89MDtPPEwubGVuZ3RoO08rKyl7dmFyIFA9TFtPXSwkPVBbeV0oeCk7JCE9PXZvaWQgMCYmKFQ9PT12b2lkIDB8fGcoJCxUKSkmJihUPSQpfXJldHVybiBUfX1kZShKVCx7bWluRGVncmVlOmN4KCJkZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk8Z30pLG1heERlZ3JlZTpjeCgiZGVncmVlIixmdW5jdGlvbih5LGcpe3JldHVybiB5Pmd9KSxtaW5JbmRlZ3JlZTpjeCgiaW5kZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk8Z30pLG1heEluZGVncmVlOmN4KCJpbmRlZ3JlZSIsZnVuY3Rpb24oeSxnKXtyZXR1cm4geT5nfSksbWluT3V0ZGVncmVlOmN4KCJvdXRkZWdyZWUiLGZ1bmN0aW9uKHksZyl7cmV0dXJuIHk8Z30pLG1heE91dGRlZ3JlZTpjeCgib3V0ZGVncmVlIixmdW5jdGlvbih5LGcpe3JldHVybiB5Pmd9KX0pLGRlKEpULHt0b3RhbERlZ3JlZTpmdW5jdGlvbihnKXtmb3IodmFyIHg9MCxUPXRoaXMubm9kZXMoKSxMPTA7TDxULmxlbmd0aDtMKyspeCs9VFtMXS5kZWdyZWUoZyk7cmV0dXJuIHh9fSk7dmFyIGtwLGNCLFBrPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9MDtMPGcubGVuZ3RoO0wrKyl7dmFyIE89Z1tMXTtpZighTy5sb2NrZWQoKSl7dmFyIFA9Ty5fcHJpdmF0ZS5wb3NpdGlvbiwkPXt4OngueCE9bnVsbD94LngtUC54OjAseTp4LnkhPW51bGw/eC55LVAueTowfTtPLmlzUGFyZW50KCkmJiEoJC54PT09MCYmJC55PT09MCkmJk8uY2hpbGRyZW4oKS5zaGlmdCgkLFQpLE8uZGlydHlCb3VuZGluZ0JveENhY2hlKCl9fX0sdUI9e2ZpZWxkOiJwb3NpdGlvbiIsYmluZGluZ0V2ZW50OiJwb3NpdGlvbiIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InBvc2l0aW9uIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJlbWl0QW5kTm90aWZ5IixhbGxvd0dldHRpbmc6ITAsdmFsaWRLZXlzOlsieCIsInkiXSxiZWZvcmVHZXQ6ZnVuY3Rpb24oZyl7Zy51cGRhdGVDb21wb3VuZEJvdW5kcygpfSxiZWZvcmVTZXQ6ZnVuY3Rpb24oZyx4KXtQayhnLHgsITEpfSxvblNldDpmdW5jdGlvbihnKXtnLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfSxjYW5TZXQ6ZnVuY3Rpb24oZyl7cmV0dXJuIWcubG9ja2VkKCl9fTtrcD1jQj17cG9zaXRpb246QWMuZGF0YSh1Qiksc2lsZW50UG9zaXRpb246QWMuZGF0YShkZSh7fSx1Qix7YWxsb3dCaW5kaW5nOiExLGFsbG93U2V0dGluZzohMCxzZXR0aW5nVHJpZ2dlcnNFdmVudDohMSxhbGxvd0dldHRpbmc6ITEsYmVmb3JlU2V0OmZ1bmN0aW9uKGcseCl7UGsoZyx4LCEwKX0sb25TZXQ6ZnVuY3Rpb24oZyl7Zy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKX19KSkscG9zaXRpb25zOmZ1bmN0aW9uKGcseCl7aWYodXQoZykpeD90aGlzLnNpbGVudFBvc2l0aW9uKGcpOnRoaXMucG9zaXRpb24oZyk7ZWxzZSBpZih5dChnKSl7dmFyIFQ9ZyxMPXRoaXMuY3koKTtMLnN0YXJ0QmF0Y2goKTtmb3IodmFyIE89MDtPPHRoaXMubGVuZ3RoO08rKyl7dmFyIFA9dGhpc1tPXSwkPXZvaWQgMDsoJD1UKFAsTykpJiYoeD9QLnNpbGVudFBvc2l0aW9uKCQpOlAucG9zaXRpb24oJCkpfUwuZW5kQmF0Y2goKX1yZXR1cm4gdGhpc30sc2lsZW50UG9zaXRpb25zOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnBvc2l0aW9ucyhnLCEwKX0sc2hpZnQ6ZnVuY3Rpb24oZyx4LFQpe3ZhciBMO2lmKHV0KGcpPyhMPXt4OlgoZy54KT9nLng6MCx5OlgoZy55KT9nLnk6MH0sVD14KTptdChnKSYmWCh4KSYmKEw9e3g6MCx5OjB9LExbZ109eCksTCE9bnVsbCl7dmFyIE89dGhpcy5jeSgpO08uc3RhcnRCYXRjaCgpO2Zvcih2YXIgUD0wO1A8dGhpcy5sZW5ndGg7UCsrKXt2YXIgJD10aGlzW1BdO2lmKCEoTy5oYXNDb21wb3VuZE5vZGVzKCkmJiQuaXNDaGlsZCgpJiYkLmFuY2VzdG9ycygpLmFueVNhbWUodGhpcykpKXt2YXIgcT0kLnBvc2l0aW9uKCksUz17eDpxLngrTC54LHk6cS55K0wueX07VD8kLnNpbGVudFBvc2l0aW9uKFMpOiQucG9zaXRpb24oUyl9fU8uZW5kQmF0Y2goKX1yZXR1cm4gdGhpc30sc2lsZW50U2hpZnQ6ZnVuY3Rpb24oZyx4KXtyZXR1cm4gdXQoZyk/dGhpcy5zaGlmdChnLCEwKTptdChnKSYmWCh4KSYmdGhpcy5zaGlmdChnLHgsITApLHRoaXN9LHJlbmRlcmVkUG9zaXRpb246ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzWzBdLEw9dGhpcy5jeSgpLE89TC56b29tKCksUD1MLnBhbigpLCQ9dXQoZyk/Zzp2b2lkIDAscT0kIT09dm9pZCAwfHx4IT09dm9pZCAwJiZtdChnKTtpZihUJiZULmlzTm9kZSgpKWlmKHEpZm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciBWPXRoaXNbU107eCE9PXZvaWQgMD9WLnBvc2l0aW9uKGcsKHgtUFtnXSkvTyk6JCE9PXZvaWQgMCYmVi5wb3NpdGlvbihjTigkLE8sUCkpfWVsc2V7dmFyIFk9VC5wb3NpdGlvbigpO3JldHVybiAkPU5UKFksTyxQKSxnPT09dm9pZCAwPyQ6JFtnXX1lbHNlIGlmKCFxKXJldHVybjtyZXR1cm4gdGhpc30scmVsYXRpdmVQb3NpdGlvbjpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXNbMF0sTD10aGlzLmN5KCksTz11dChnKT9nOnZvaWQgMCxQPU8hPT12b2lkIDB8fHghPT12b2lkIDAmJm10KGcpLCQ9TC5oYXNDb21wb3VuZE5vZGVzKCk7aWYoVCYmVC5pc05vZGUoKSlpZihQKWZvcih2YXIgcT0wO3E8dGhpcy5sZW5ndGg7cSsrKXt2YXIgUz10aGlzW3FdLFY9JD9TLnBhcmVudCgpOm51bGwsWT1WJiZWLmxlbmd0aD4wLHJ0PVk7WSYmKFY9VlswXSk7dmFyIG90PXJ0P1YucG9zaXRpb24oKTp7eDowLHk6MH07eCE9PXZvaWQgMD9TLnBvc2l0aW9uKGcseCtvdFtnXSk6TyE9PXZvaWQgMCYmUy5wb3NpdGlvbih7eDpPLngrb3QueCx5Ok8ueStvdC55fSl9ZWxzZXt2YXIgaHQ9VC5wb3NpdGlvbigpLGR0PSQ/VC5wYXJlbnQoKTpudWxsLEx0PWR0JiZkdC5sZW5ndGg+MCxrdD1MdDtMdCYmKGR0PWR0WzBdKTt2YXIgRHQ9a3Q/ZHQucG9zaXRpb24oKTp7eDowLHk6MH07cmV0dXJuIE89e3g6aHQueC1EdC54LHk6aHQueS1EdC55fSxnPT09dm9pZCAwP086T1tnXX1lbHNlIGlmKCFQKXJldHVybjtyZXR1cm4gdGhpc319LGtwLm1vZGVsUG9zaXRpb249a3AucG9pbnQ9a3AucG9zaXRpb24sa3AubW9kZWxQb3NpdGlvbnM9a3AucG9pbnRzPWtwLnBvc2l0aW9ucyxrcC5yZW5kZXJlZFBvaW50PWtwLnJlbmRlcmVkUG9zaXRpb24sa3AucmVsYXRpdmVQb2ludD1rcC5yZWxhdGl2ZVBvc2l0aW9uO3ZhciBsQj1jQix1eCxVYjt1eD1VYj17fSxVYi5yZW5kZXJlZEJvdW5kaW5nQm94PWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMuYm91bmRpbmdCb3goeSkseD10aGlzLmN5KCksVD14Lnpvb20oKSxMPXgucGFuKCksTz1nLngxKlQrTC54LFA9Zy54MipUK0wueCwkPWcueTEqVCtMLnkscT1nLnkyKlQrTC55O3JldHVybnt4MTpPLHgyOlAseTE6JCx5MjpxLHc6UC1PLGg6cS0kfX0sVWIuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlPWZ1bmN0aW9uKCl7dmFyIHk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLGc9dGhpcy5jeSgpO3JldHVybiFnLnN0eWxlRW5hYmxlZCgpfHwhZy5oYXNDb21wb3VuZE5vZGVzKCk/dGhpczoodGhpcy5mb3JFYWNoVXAoZnVuY3Rpb24oeCl7aWYoeC5pc1BhcmVudCgpKXt2YXIgVD14Ll9wcml2YXRlO1QuY29tcG91bmRCb3VuZHNDbGVhbj0hMSxULmJiQ2FjaGU9bnVsbCx5fHx4LmVtaXRBbmROb3RpZnkoImJvdW5kcyIpfX0pLHRoaXMpfSxVYi51cGRhdGVDb21wb3VuZEJvdW5kcz1mdW5jdGlvbigpe3ZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxnPXRoaXMuY3koKTtpZighZy5zdHlsZUVuYWJsZWQoKXx8IWcuaGFzQ29tcG91bmROb2RlcygpKXJldHVybiB0aGlzO2lmKCF5JiZnLmJhdGNoaW5nKCkpcmV0dXJuIHRoaXM7ZnVuY3Rpb24geChQKXtpZighUC5pc1BhcmVudCgpKXJldHVybjt2YXIgJD1QLl9wcml2YXRlLHE9UC5jaGlsZHJlbigpLFM9UC5wc3R5bGUoImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIikudmFsdWU9PT0iaW5jbHVkZSIsVj17d2lkdGg6e3ZhbDpQLnBzdHlsZSgibWluLXdpZHRoIikucGZWYWx1ZSxsZWZ0OlAucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1sZWZ0IikscmlnaHQ6UC5wc3R5bGUoIm1pbi13aWR0aC1iaWFzLXJpZ2h0Iil9LGhlaWdodDp7dmFsOlAucHN0eWxlKCJtaW4taGVpZ2h0IikucGZWYWx1ZSx0b3A6UC5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy10b3AiKSxib3R0b206UC5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy1ib3R0b20iKX19LFk9cS5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczpTLGluY2x1ZGVPdmVybGF5czohMSx1c2VDYWNoZTohMX0pLHJ0PSQucG9zaXRpb247KFkudz09PTB8fFkuaD09PTApJiYoWT17dzpQLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGg6UC5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9LFkueDE9cnQueC1ZLncvMixZLngyPXJ0LngrWS53LzIsWS55MT1ydC55LVkuaC8yLFkueTI9cnQueStZLmgvMik7ZnVuY3Rpb24gb3QoR3QsZ2UsYmUpe3ZhciBpZT0wLEZlPTAsd2U9Z2UrYmU7cmV0dXJuIEd0PjAmJndlPjAmJihpZT1nZS93ZSpHdCxGZT1iZS93ZSpHdCkse2JpYXNEaWZmOmllLGJpYXNDb21wbGVtZW50RGlmZjpGZX19ZnVuY3Rpb24gaHQoR3QsZ2UsYmUsaWUpe2lmKGJlLnVuaXRzPT09IiUiKXN3aXRjaChpZSl7Y2FzZSJ3aWR0aCI6cmV0dXJuIEd0PjA/YmUucGZWYWx1ZSpHdDowO2Nhc2UiaGVpZ2h0IjpyZXR1cm4gZ2U+MD9iZS5wZlZhbHVlKmdlOjA7Y2FzZSJhdmVyYWdlIjpyZXR1cm4gR3Q+MCYmZ2U+MD9iZS5wZlZhbHVlKihHdCtnZSkvMjowO2Nhc2UibWluIjpyZXR1cm4gR3Q+MCYmZ2U+MD9HdD5nZT9iZS5wZlZhbHVlKmdlOmJlLnBmVmFsdWUqR3Q6MDtjYXNlIm1heCI6cmV0dXJuIEd0PjAmJmdlPjA/R3Q+Z2U/YmUucGZWYWx1ZSpHdDpiZS5wZlZhbHVlKmdlOjA7ZGVmYXVsdDpyZXR1cm4gMH1lbHNlIHJldHVybiBiZS51bml0cz09PSJweCI/YmUucGZWYWx1ZTowfXZhciBkdD1WLndpZHRoLmxlZnQudmFsdWU7Vi53aWR0aC5sZWZ0LnVuaXRzPT09InB4IiYmVi53aWR0aC52YWw+MCYmKGR0PWR0KjEwMC9WLndpZHRoLnZhbCk7dmFyIEx0PVYud2lkdGgucmlnaHQudmFsdWU7Vi53aWR0aC5yaWdodC51bml0cz09PSJweCImJlYud2lkdGgudmFsPjAmJihMdD1MdCoxMDAvVi53aWR0aC52YWwpO3ZhciBrdD1WLmhlaWdodC50b3AudmFsdWU7Vi5oZWlnaHQudG9wLnVuaXRzPT09InB4IiYmVi5oZWlnaHQudmFsPjAmJihrdD1rdCoxMDAvVi5oZWlnaHQudmFsKTt2YXIgRHQ9Vi5oZWlnaHQuYm90dG9tLnZhbHVlO1YuaGVpZ2h0LmJvdHRvbS51bml0cz09PSJweCImJlYuaGVpZ2h0LnZhbD4wJiYoRHQ9RHQqMTAwL1YuaGVpZ2h0LnZhbCk7dmFyIFB0PW90KFYud2lkdGgudmFsLVkudyxkdCxMdCksJHQ9UHQuYmlhc0RpZmYsWnQ9UHQuYmlhc0NvbXBsZW1lbnREaWZmLFl0PW90KFYuaGVpZ2h0LnZhbC1ZLmgsa3QsRHQpLHF0PVl0LmJpYXNEaWZmLG5lPVl0LmJpYXNDb21wbGVtZW50RGlmZjskLmF1dG9QYWRkaW5nPWh0KFkudyxZLmgsUC5wc3R5bGUoInBhZGRpbmciKSxQLnBzdHlsZSgicGFkZGluZy1yZWxhdGl2ZS10byIpLnZhbHVlKSwkLmF1dG9XaWR0aD1NYXRoLm1heChZLncsVi53aWR0aC52YWwpLHJ0Lng9KC0kdCtZLngxK1kueDIrWnQpLzIsJC5hdXRvSGVpZ2h0PU1hdGgubWF4KFkuaCxWLmhlaWdodC52YWwpLHJ0Lnk9KC1xdCtZLnkxK1kueTIrbmUpLzJ9Zm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBMPXRoaXNbVF0sTz1MLl9wcml2YXRlOyghTy5jb21wb3VuZEJvdW5kc0NsZWFufHx5KSYmKHgoTCksZy5iYXRjaGluZygpfHwoTy5jb21wb3VuZEJvdW5kc0NsZWFuPSEwKSl9cmV0dXJuIHRoaXN9O3ZhciBNMD1mdW5jdGlvbihnKXtyZXR1cm4gZz09PTEvMHx8Zz09PS0xLzA/MDpnfSxFcD1mdW5jdGlvbihnLHgsVCxMLE8pe0wteD09PTB8fE8tVD09PTB8fHg9PW51bGx8fFQ9PW51bGx8fEw9PW51bGx8fE89PW51bGx8fChnLngxPXg8Zy54MT94OmcueDEsZy54Mj1MPmcueDI/TDpnLngyLGcueTE9VDxnLnkxP1Q6Zy55MSxnLnkyPU8+Zy55Mj9POmcueTIsZy53PWcueDItZy54MSxnLmg9Zy55Mi1nLnkxKX0sTDM9ZnVuY3Rpb24oZyx4KXtyZXR1cm4geD09bnVsbD9nOkVwKGcseC54MSx4LnkxLHgueDIseC55Mil9LEZrPWZ1bmN0aW9uKGcseCxUKXtyZXR1cm4geXAoZyx4LFQpfSx0Qz1mdW5jdGlvbihnLHgsVCl7aWYoIXguY3koKS5oZWFkbGVzcygpKXt2YXIgTD14Ll9wcml2YXRlLE89TC5yc3R5bGUsUD1PLmFycm93V2lkdGgvMiwkPXgucHN0eWxlKFQrIi1hcnJvdy1zaGFwZSIpLnZhbHVlLHEsUztpZigkIT09Im5vbmUiKXtUPT09InNvdXJjZSI/KHE9Ty5zcmNYLFM9Ty5zcmNZKTpUPT09InRhcmdldCI/KHE9Ty50Z3RYLFM9Ty50Z3RZKToocT1PLm1pZFgsUz1PLm1pZFkpO3ZhciBWPUwuYXJyb3dCb3VuZHM9TC5hcnJvd0JvdW5kc3x8e30sWT1WW1RdPVZbVF18fHt9O1kueDE9cS1QLFkueTE9Uy1QLFkueDI9cStQLFkueTI9UytQLFkudz1ZLngyLVkueDEsWS5oPVkueTItWS55MSxSVChZLDEpLEVwKGcsWS54MSxZLnkxLFkueDIsWS55Mil9fX0saEI9ZnVuY3Rpb24oZyx4LFQpe2lmKCF4LmN5KCkuaGVhZGxlc3MoKSl7dmFyIEw7VD9MPVQrIi0iOkw9IiI7dmFyIE89eC5fcHJpdmF0ZSxQPU8ucnN0eWxlLCQ9eC5wc3R5bGUoTCsibGFiZWwiKS5zdHJWYWx1ZTtpZigkKXt2YXIgcT14LnBzdHlsZSgidGV4dC1oYWxpZ24iKSxTPXgucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLFY9RmsoUCwibGFiZWxXaWR0aCIsVCksWT1GayhQLCJsYWJlbEhlaWdodCIsVCkscnQ9RmsoUCwibGFiZWxYIixUKSxvdD1GayhQLCJsYWJlbFkiLFQpLGh0PXgucHN0eWxlKEwrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLGR0PXgucHN0eWxlKEwrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLEx0PXguaXNFZGdlKCksa3Q9eC5wc3R5bGUoTCsidGV4dC1yb3RhdGlvbiIpLER0PXgucHN0eWxlKCJ0ZXh0LW91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLFB0PXgucHN0eWxlKCJ0ZXh0LWJvcmRlci13aWR0aCIpLnBmVmFsdWUsJHQ9UHQvMixadD14LnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlLFl0PTIscXQ9WSxuZT1WLEd0PW5lLzIsZ2U9cXQvMixiZSxpZSxGZSx3ZTtpZihMdCliZT1ydC1HdCxpZT1ydCtHdCxGZT1vdC1nZSx3ZT1vdCtnZTtlbHNle3N3aXRjaChxLnZhbHVlKXtjYXNlImxlZnQiOmJlPXJ0LW5lLGllPXJ0O2JyZWFrO2Nhc2UiY2VudGVyIjpiZT1ydC1HdCxpZT1ydCtHdDticmVhaztjYXNlInJpZ2h0IjpiZT1ydCxpZT1ydCtuZTticmVha31zd2l0Y2goUy52YWx1ZSl7Y2FzZSJ0b3AiOkZlPW90LXF0LHdlPW90O2JyZWFrO2Nhc2UiY2VudGVyIjpGZT1vdC1nZSx3ZT1vdCtnZTticmVhaztjYXNlImJvdHRvbSI6RmU9b3Qsd2U9b3QrcXQ7YnJlYWt9fWJlKz1odC1NYXRoLm1heChEdCwkdCktWnQtWXQsaWUrPWh0K01hdGgubWF4KER0LCR0KStadCtZdCxGZSs9ZHQtTWF0aC5tYXgoRHQsJHQpLVp0LVl0LHdlKz1kdCtNYXRoLm1heChEdCwkdCkrWnQrWXQ7dmFyIGJuPVR8fCJtYWluIix6ZT1PLmxhYmVsQm91bmRzLEdlPXplW2JuXT16ZVtibl18fHt9O0dlLngxPWJlLEdlLnkxPUZlLEdlLngyPWllLEdlLnkyPXdlLEdlLnc9aWUtYmUsR2UuaD13ZS1GZTt2YXIgRW49THQmJmt0LnN0clZhbHVlPT09ImF1dG9yb3RhdGUiLEluPWt0LnBmVmFsdWUhPW51bGwmJmt0LnBmVmFsdWUhPT0wO2lmKEVufHxJbil7dmFyIFluPUVuP0ZrKE8ucnN0eWxlLCJsYWJlbEFuZ2xlIixUKTprdC5wZlZhbHVlLFNuPU1hdGguY29zKFluKSxXbj1NYXRoLnNpbihZbikscnI9KGJlK2llKS8yLHdyPShGZSt3ZSkvMjtpZighTHQpe3N3aXRjaChxLnZhbHVlKXtjYXNlImxlZnQiOnJyPWllO2JyZWFrO2Nhc2UicmlnaHQiOnJyPWJlO2JyZWFrfXN3aXRjaChTLnZhbHVlKXtjYXNlInRvcCI6d3I9d2U7YnJlYWs7Y2FzZSJib3R0b20iOndyPUZlO2JyZWFrfX12YXIgdXI9ZnVuY3Rpb24oRWEsQ2kpe3JldHVybiBFYT1FYS1ycixDaT1DaS13cix7eDpFYSpTbi1DaSpXbitycix5OkVhKlduK0NpKlNuK3dyfX0sZXI9dXIoYmUsRmUpLHZuPXVyKGJlLHdlKSxncj11cihpZSxGZSksZnI9dXIoaWUsd2UpO2JlPU1hdGgubWluKGVyLngsdm4ueCxnci54LGZyLngpLGllPU1hdGgubWF4KGVyLngsdm4ueCxnci54LGZyLngpLEZlPU1hdGgubWluKGVyLnksdm4ueSxnci55LGZyLnkpLHdlPU1hdGgubWF4KGVyLnksdm4ueSxnci55LGZyLnkpfXZhciBKcj1ibisiUm90Iix2aT16ZVtKcl09emVbSnJdfHx7fTt2aS54MT1iZSx2aS55MT1GZSx2aS54Mj1pZSx2aS55Mj13ZSx2aS53PWllLWJlLHZpLmg9d2UtRmUsRXAoZyxiZSxGZSxpZSx3ZSksRXAoTy5sYWJlbEJvdW5kcy5hbGwsYmUsRmUsaWUsd2UpfXJldHVybiBnfX0saUo9ZnVuY3Rpb24oZyx4KXt2YXIgVD1nLl9wcml2YXRlLmN5LEw9VC5zdHlsZUVuYWJsZWQoKSxPPVQuaGVhZGxlc3MoKSxQPXpkKCksJD1nLl9wcml2YXRlLHE9Zy5pc05vZGUoKSxTPWcuaXNFZGdlKCksVixZLHJ0LG90LGh0LGR0LEx0PSQucnN0eWxlLGt0PXEmJkw/Zy5wc3R5bGUoImJvdW5kcy1leHBhbnNpb24iKS5wZlZhbHVlOlswXSxEdD1mdW5jdGlvbihncyl7cmV0dXJuIGdzLnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlIT09Im5vbmUifSxQdD0hTHx8RHQoZykmJighU3x8RHQoZy5zb3VyY2UoKSkmJkR0KGcudGFyZ2V0KCkpKTtpZihQdCl7dmFyICR0PTAsWnQ9MDtMJiZ4LmluY2x1ZGVPdmVybGF5cyYmKCR0PWcucHN0eWxlKCJvdmVybGF5LW9wYWNpdHkiKS52YWx1ZSwkdCE9PTAmJihadD1nLnBzdHlsZSgib3ZlcmxheS1wYWRkaW5nIikudmFsdWUpKTt2YXIgWXQ9MCxxdD0wO0wmJnguaW5jbHVkZVVuZGVybGF5cyYmKFl0PWcucHN0eWxlKCJ1bmRlcmxheS1vcGFjaXR5IikudmFsdWUsWXQhPT0wJiYocXQ9Zy5wc3R5bGUoInVuZGVybGF5LXBhZGRpbmciKS52YWx1ZSkpO3ZhciBuZT1NYXRoLm1heChadCxxdCksR3Q9MCxnZT0wO2lmKEwmJihHdD1nLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGdlPUd0LzIpLHEmJnguaW5jbHVkZU5vZGVzKXt2YXIgYmU9Zy5wb3NpdGlvbigpO2h0PWJlLngsZHQ9YmUueTt2YXIgaWU9Zy5vdXRlcldpZHRoKCksRmU9aWUvMix3ZT1nLm91dGVySGVpZ2h0KCksYm49d2UvMjtWPWh0LUZlLFk9aHQrRmUscnQ9ZHQtYm4sb3Q9ZHQrYm4sRXAoUCxWLHJ0LFksb3QpfWVsc2UgaWYoUyYmeC5pbmNsdWRlRWRnZXMpaWYoTCYmIU8pe3ZhciB6ZT1nLnBzdHlsZSgiY3VydmUtc3R5bGUiKS5zdHJWYWx1ZTtpZihWPU1hdGgubWluKEx0LnNyY1gsTHQubWlkWCxMdC50Z3RYKSxZPU1hdGgubWF4KEx0LnNyY1gsTHQubWlkWCxMdC50Z3RYKSxydD1NYXRoLm1pbihMdC5zcmNZLEx0Lm1pZFksTHQudGd0WSksb3Q9TWF0aC5tYXgoTHQuc3JjWSxMdC5taWRZLEx0LnRndFkpLFYtPWdlLFkrPWdlLHJ0LT1nZSxvdCs9Z2UsRXAoUCxWLHJ0LFksb3QpLHplPT09ImhheXN0YWNrIil7dmFyIEdlPUx0LmhheXN0YWNrUHRzO2lmKEdlJiZHZS5sZW5ndGg9PT0yKXtpZihWPUdlWzBdLngscnQ9R2VbMF0ueSxZPUdlWzFdLngsb3Q9R2VbMV0ueSxWPlkpe3ZhciBFbj1WO1Y9WSxZPUVufWlmKHJ0Pm90KXt2YXIgSW49cnQ7cnQ9b3Qsb3Q9SW59RXAoUCxWLWdlLHJ0LWdlLFkrZ2Usb3QrZ2UpfX1lbHNlIGlmKHplPT09ImJlemllciJ8fHplPT09InVuYnVuZGxlZC1iZXppZXIifHx6ZT09PSJzZWdtZW50cyJ8fHplPT09InRheGkiKXt2YXIgWW47c3dpdGNoKHplKXtjYXNlImJlemllciI6Y2FzZSJ1bmJ1bmRsZWQtYmV6aWVyIjpZbj1MdC5iZXppZXJQdHM7YnJlYWs7Y2FzZSJzZWdtZW50cyI6Y2FzZSJ0YXhpIjpZbj1MdC5saW5lUHRzO2JyZWFrfWlmKFluIT1udWxsKWZvcih2YXIgU249MDtTbjxZbi5sZW5ndGg7U24rKyl7dmFyIFduPVluW1NuXTtWPVduLngtZ2UsWT1Xbi54K2dlLHJ0PVduLnktZ2Usb3Q9V24ueStnZSxFcChQLFYscnQsWSxvdCl9fX1lbHNle3ZhciBycj1nLnNvdXJjZSgpLHdyPXJyLnBvc2l0aW9uKCksdXI9Zy50YXJnZXQoKSxlcj11ci5wb3NpdGlvbigpO2lmKFY9d3IueCxZPWVyLngscnQ9d3IueSxvdD1lci55LFY+WSl7dmFyIHZuPVY7Vj1ZLFk9dm59aWYocnQ+b3Qpe3ZhciBncj1ydDtydD1vdCxvdD1ncn1WLT1nZSxZKz1nZSxydC09Z2Usb3QrPWdlLEVwKFAsVixydCxZLG90KX1pZihMJiZ4LmluY2x1ZGVFZGdlcyYmUyYmKHRDKFAsZywibWlkLXNvdXJjZSIpLHRDKFAsZywibWlkLXRhcmdldCIpLHRDKFAsZywic291cmNlIiksdEMoUCxnLCJ0YXJnZXQiKSksTCl7dmFyIGZyPWcucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoZnIpe3ZhciBKcj1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLHZpPWcucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWU7RXAoUCxQLngxK0pyLFAueTErdmksUC54MitKcixQLnkyK3ZpKX19dmFyIFhzPSQuYm9keUJvdW5kcz0kLmJvZHlCb3VuZHN8fHt9O2xOKFhzLFApLFNMKFhzLGt0KSxSVChYcywxKSxMJiYoVj1QLngxLFk9UC54MixydD1QLnkxLG90PVAueTIsRXAoUCxWLW5lLHJ0LW5lLFkrbmUsb3QrbmUpKTt2YXIgRWE9JC5vdmVybGF5Qm91bmRzPSQub3ZlcmxheUJvdW5kc3x8e307bE4oRWEsUCksU0woRWEsa3QpLFJUKEVhLDEpO3ZhciBDaT0kLmxhYmVsQm91bmRzPSQubGFiZWxCb3VuZHN8fHt9O0NpLmFsbCE9bnVsbD9OSyhDaS5hbGwpOkNpLmFsbD16ZCgpLEwmJnguaW5jbHVkZUxhYmVscyYmKHguaW5jbHVkZU1haW5MYWJlbHMmJmhCKFAsZyxudWxsKSxTJiYoeC5pbmNsdWRlU291cmNlTGFiZWxzJiZoQihQLGcsInNvdXJjZSIpLHguaW5jbHVkZVRhcmdldExhYmVscyYmaEIoUCxnLCJ0YXJnZXQiKSkpfXJldHVybiBQLngxPU0wKFAueDEpLFAueTE9TTAoUC55MSksUC54Mj1NMChQLngyKSxQLnkyPU0wKFAueTIpLFAudz1NMChQLngyLVAueDEpLFAuaD1NMChQLnkyLVAueTEpLFAudz4wJiZQLmg+MCYmUHQmJihTTChQLGt0KSxSVChQLDEpKSxQfSxmQj1mdW5jdGlvbihnKXt2YXIgeD0wLFQ9ZnVuY3Rpb24oUCl7cmV0dXJuKFA/MTowKTw8eCsrfSxMPTA7cmV0dXJuIEwrPVQoZy5pbmN1ZGVOb2RlcyksTCs9VChnLmluY2x1ZGVFZGdlcyksTCs9VChnLmluY2x1ZGVMYWJlbHMpLEwrPVQoZy5pbmNsdWRlTWFpbkxhYmVscyksTCs9VChnLmluY2x1ZGVTb3VyY2VMYWJlbHMpLEwrPVQoZy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxMKz1UKGcuaW5jbHVkZU92ZXJsYXlzKSxMfSxkQj1mdW5jdGlvbihnKXtpZihnLmlzRWRnZSgpKXt2YXIgeD1nLnNvdXJjZSgpLnBvc2l0aW9uKCksVD1nLnRhcmdldCgpLnBvc2l0aW9uKCksTD1mdW5jdGlvbihQKXtyZXR1cm4gTWF0aC5yb3VuZChQKX07cmV0dXJuIGYxKFtMKHgueCksTCh4LnkpLEwoVC54KSxMKFQueSldKX1lbHNlIHJldHVybiAwfSxnQj1mdW5jdGlvbihnLHgpe3ZhciBUPWcuX3ByaXZhdGUsTCxPPWcuaXNFZGdlKCksUD14PT1udWxsP3BCOmZCKHgpLCQ9UD09PXBCLHE9ZEIoZyksUz1ULmJiQ2FjaGVQb3NLZXk9PT1xLFY9eC51c2VDYWNoZSYmUyxZPWZ1bmN0aW9uKGR0KXtyZXR1cm4gZHQuX3ByaXZhdGUuYmJDYWNoZT09bnVsbHx8ZHQuX3ByaXZhdGUuc3R5bGVEaXJ0eX0scnQ9IVZ8fFkoZyl8fE8mJlkoZy5zb3VyY2UoKSl8fFkoZy50YXJnZXQoKSk7aWYocnQ/KFN8fGcucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKFYpLEw9aUooZyxOayksVC5iYkNhY2hlPUwsVC5iYkNhY2hlUG9zS2V5PXEpOkw9VC5iYkNhY2hlLCEkKXt2YXIgb3Q9Zy5pc05vZGUoKTtMPXpkKCksKHguaW5jbHVkZU5vZGVzJiZvdHx8eC5pbmNsdWRlRWRnZXMmJiFvdCkmJih4LmluY2x1ZGVPdmVybGF5cz9MMyhMLFQub3ZlcmxheUJvdW5kcyk6TDMoTCxULmJvZHlCb3VuZHMpKSx4LmluY2x1ZGVMYWJlbHMmJih4LmluY2x1ZGVNYWluTGFiZWxzJiYoIU98fHguaW5jbHVkZVNvdXJjZUxhYmVscyYmeC5pbmNsdWRlVGFyZ2V0TGFiZWxzKT9MMyhMLFQubGFiZWxCb3VuZHMuYWxsKTooeC5pbmNsdWRlTWFpbkxhYmVscyYmTDMoTCxULmxhYmVsQm91bmRzLm1haW5Sb3QpLHguaW5jbHVkZVNvdXJjZUxhYmVscyYmTDMoTCxULmxhYmVsQm91bmRzLnNvdXJjZVJvdCkseC5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZMMyhMLFQubGFiZWxCb3VuZHMudGFyZ2V0Um90KSkpLEwudz1MLngyLUwueDEsTC5oPUwueTItTC55MX1yZXR1cm4gTH0sTms9e2luY2x1ZGVOb2RlczohMCxpbmNsdWRlRWRnZXM6ITAsaW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTWFpbkxhYmVsczohMCxpbmNsdWRlU291cmNlTGFiZWxzOiEwLGluY2x1ZGVUYXJnZXRMYWJlbHM6ITAsaW5jbHVkZU92ZXJsYXlzOiEwLGluY2x1ZGVVbmRlcmxheXM6ITAsdXNlQ2FjaGU6ITB9LHBCPWZCKE5rKSxiQj1SZihOayk7VWIuYm91bmRpbmdCb3g9ZnVuY3Rpb24oeSl7dmFyIGc7aWYodGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLl9wcml2YXRlLmJiQ2FjaGUhPW51bGwmJiF0aGlzWzBdLl9wcml2YXRlLnN0eWxlRGlydHkmJih5PT09dm9pZCAwfHx5LnVzZUNhY2hlPT09dm9pZCAwfHx5LnVzZUNhY2hlPT09ITApKXk9PT12b2lkIDA/eT1Oazp5PWJCKHkpLGc9Z0IodGhpc1swXSx5KTtlbHNle2c9emQoKSx5PXl8fE5rO3ZhciB4PWJCKHkpLFQ9dGhpcyxMPVQuY3koKSxPPUwuc3R5bGVFbmFibGVkKCk7aWYoTylmb3IodmFyIFA9MDtQPFQubGVuZ3RoO1ArKyl7dmFyICQ9VFtQXSxxPSQuX3ByaXZhdGUsUz1kQigkKSxWPXEuYmJDYWNoZVBvc0tleT09PVMsWT14LnVzZUNhY2hlJiZWJiYhcS5zdHlsZURpcnR5OyQucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKFkpfXRoaXMudXBkYXRlQ29tcG91bmRCb3VuZHMoIXkudXNlQ2FjaGUpO2Zvcih2YXIgcnQ9MDtydDxULmxlbmd0aDtydCsrKXt2YXIgb3Q9VFtydF07TDMoZyxnQihvdCx4KSl9fXJldHVybiBnLngxPU0wKGcueDEpLGcueTE9TTAoZy55MSksZy54Mj1NMChnLngyKSxnLnkyPU0wKGcueTIpLGcudz1NMChnLngyLWcueDEpLGcuaD1NMChnLnkyLWcueTEpLGd9LFViLmRpcnR5Qm91bmRpbmdCb3hDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgZz10aGlzW3ldLl9wcml2YXRlO2cuYmJDYWNoZT1udWxsLGcuYmJDYWNoZVBvc0tleT1udWxsLGcuYm9keUJvdW5kcz1udWxsLGcub3ZlcmxheUJvdW5kcz1udWxsLGcubGFiZWxCb3VuZHMuYWxsPW51bGwsZy5sYWJlbEJvdW5kcy5zb3VyY2U9bnVsbCxnLmxhYmVsQm91bmRzLnRhcmdldD1udWxsLGcubGFiZWxCb3VuZHMubWFpbj1udWxsLGcubGFiZWxCb3VuZHMuc291cmNlUm90PW51bGwsZy5sYWJlbEJvdW5kcy50YXJnZXRSb3Q9bnVsbCxnLmxhYmVsQm91bmRzLm1haW5Sb3Q9bnVsbCxnLmFycm93Qm91bmRzLnNvdXJjZT1udWxsLGcuYXJyb3dCb3VuZHMudGFyZ2V0PW51bGwsZy5hcnJvd0JvdW5kc1sibWlkLXNvdXJjZSJdPW51bGwsZy5hcnJvd0JvdW5kc1sibWlkLXRhcmdldCJdPW51bGx9cmV0dXJuIHRoaXMuZW1pdEFuZE5vdGlmeSgiYm91bmRzIiksdGhpc30sVWIuYm91bmRpbmdCb3hBdD1mdW5jdGlvbih5KXt2YXIgZz10aGlzLm5vZGVzKCkseD10aGlzLmN5KCksVD14Lmhhc0NvbXBvdW5kTm9kZXMoKSxMPXguY29sbGVjdGlvbigpO2lmKFQmJihMPWcuZmlsdGVyKGZ1bmN0aW9uKFMpe3JldHVybiBTLmlzUGFyZW50KCl9KSxnPWcubm90KEwpKSx1dCh5KSl7dmFyIE89eTt5PWZ1bmN0aW9uKCl7cmV0dXJuIE99fXZhciBQPWZ1bmN0aW9uKFYsWSl7cmV0dXJuIFYuX3ByaXZhdGUuYmJBdE9sZFBvcz15KFYsWSl9LCQ9ZnVuY3Rpb24oVil7cmV0dXJuIFYuX3ByaXZhdGUuYmJBdE9sZFBvc307eC5zdGFydEJhdGNoKCksZy5mb3JFYWNoKFApLnNpbGVudFBvc2l0aW9ucyh5KSxUJiYoTC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxMLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLEwudXBkYXRlQ29tcG91bmRCb3VuZHMoITApKTt2YXIgcT1GSyh0aGlzLmJvdW5kaW5nQm94KHt1c2VDYWNoZTohMX0pKTtyZXR1cm4gZy5zaWxlbnRQb3NpdGlvbnMoJCksVCYmKEwuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksTC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxMLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCEwKSkseC5lbmRCYXRjaCgpLHF9LHV4LmJvdW5kaW5nYm94PXV4LmJiPXV4LmJvdW5kaW5nQm94LHV4LnJlbmRlcmVkQm91bmRpbmdib3g9dXgucmVuZGVyZWRCb3VuZGluZ0JveDt2YXIgc0o9VWIsQmssUms7Qms9Ums9e307dmFyIFRtPWZ1bmN0aW9uKGcpe2cudXBwZXJjYXNlTmFtZT1WZShnLm5hbWUpLGcuYXV0b05hbWU9ImF1dG8iK2cudXBwZXJjYXNlTmFtZSxnLmxhYmVsTmFtZT0ibGFiZWwiK2cudXBwZXJjYXNlTmFtZSxnLm91dGVyTmFtZT0ib3V0ZXIiK2cudXBwZXJjYXNlTmFtZSxnLnVwcGVyY2FzZU91dGVyTmFtZT1WZShnLm91dGVyTmFtZSksQmtbZy5uYW1lXT1mdW5jdGlvbigpe3ZhciBUPXRoaXNbMF0sTD1ULl9wcml2YXRlLE89TC5jeSxQPU8uX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKFQpaWYoUCl7aWYoVC5pc1BhcmVudCgpKXJldHVybiBULnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksTFtnLmF1dG9OYW1lXXx8MDt2YXIgJD1ULnBzdHlsZShnLm5hbWUpO3N3aXRjaCgkLnN0clZhbHVlKXtjYXNlImxhYmVsIjpyZXR1cm4gVC5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoKSxMLnJzdHlsZVtnLmxhYmVsTmFtZV18fDA7ZGVmYXVsdDpyZXR1cm4gJC5wZlZhbHVlfX1lbHNlIHJldHVybiAxfSxCa1sib3V0ZXIiK2cudXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgVD10aGlzWzBdLEw9VC5fcHJpdmF0ZSxPPUwuY3ksUD1PLl9wcml2YXRlLnN0eWxlRW5hYmxlZDtpZihUKWlmKFApe3ZhciAkPVRbZy5uYW1lXSgpLHE9VC5wc3R5bGUoImJvcmRlci13aWR0aCIpLnBmVmFsdWUsUz0yKlQucGFkZGluZygpO3JldHVybiAkK3ErU31lbHNlIHJldHVybiAxfSxCa1sicmVuZGVyZWQiK2cudXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgVD10aGlzWzBdO2lmKFQpe3ZhciBMPVRbZy5uYW1lXSgpO3JldHVybiBMKnRoaXMuY3koKS56b29tKCl9fSxCa1sicmVuZGVyZWQiK2cudXBwZXJjYXNlT3V0ZXJOYW1lXT1mdW5jdGlvbigpe3ZhciBUPXRoaXNbMF07aWYoVCl7dmFyIEw9VFtnLm91dGVyTmFtZV0oKTtyZXR1cm4gTCp0aGlzLmN5KCkuem9vbSgpfX19O1RtKHtuYW1lOiJ3aWR0aCJ9KSxUbSh7bmFtZToiaGVpZ2h0In0pLFJrLnBhZGRpbmc9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdLGc9eS5fcHJpdmF0ZTtyZXR1cm4geS5pc1BhcmVudCgpPyh5LnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksZy5hdXRvUGFkZGluZyE9PXZvaWQgMD9nLmF1dG9QYWRkaW5nOnkucHN0eWxlKCJwYWRkaW5nIikucGZWYWx1ZSk6eS5wc3R5bGUoInBhZGRpbmciKS5wZlZhbHVlfSxSay5wYWRkZWRIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO3JldHVybiB5LmhlaWdodCgpKzIqeS5wYWRkaW5nKCl9LFJrLnBhZGRlZFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHk9dGhpc1swXTtyZXR1cm4geS53aWR0aCgpKzIqeS5wYWRkaW5nKCl9O3ZhciBITD1SayxhSj1mdW5jdGlvbihnLHgpe2lmKGcuaXNFZGdlKCkpcmV0dXJuIHgoZyl9LG9KPWZ1bmN0aW9uKGcseCl7aWYoZy5pc0VkZ2UoKSl7dmFyIFQ9Zy5jeSgpO3JldHVybiBOVCh4KGcpLFQuem9vbSgpLFQucGFuKCkpfX0sY0o9ZnVuY3Rpb24oZyx4KXtpZihnLmlzRWRnZSgpKXt2YXIgVD1nLmN5KCksTD1ULnBhbigpLE89VC56b29tKCk7cmV0dXJuIHgoZykubWFwKGZ1bmN0aW9uKFApe3JldHVybiBOVChQLE8sTCl9KX19LHVKPWZ1bmN0aW9uKGcpe3JldHVybiBnLnJlbmRlcmVyKCkuZ2V0Q29udHJvbFBvaW50cyhnKX0sbEo9ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIoKS5nZXRTZWdtZW50UG9pbnRzKGcpfSxoSj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldFNvdXJjZUVuZHBvaW50KGcpfSxmSj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldFRhcmdldEVuZHBvaW50KGcpfSxkSj1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZW5kZXJlcigpLmdldEVkZ2VNaWRwb2ludChnKX0sd0I9e2NvbnRyb2xQb2ludHM6e2dldDp1SixtdWx0OiEwfSxzZWdtZW50UG9pbnRzOntnZXQ6bEosbXVsdDohMH0sc291cmNlRW5kcG9pbnQ6e2dldDpoSn0sdGFyZ2V0RW5kcG9pbnQ6e2dldDpmSn0sbWlkcG9pbnQ6e2dldDpkSn19LGdKPWZ1bmN0aW9uKGcpe3JldHVybiJyZW5kZXJlZCIrZ1swXS50b1VwcGVyQ2FzZSgpK2cuc3Vic3RyKDEpfSxwSj1PYmplY3Qua2V5cyh3QikucmVkdWNlKGZ1bmN0aW9uKHksZyl7dmFyIHg9d0JbZ10sVD1nSihnKTtyZXR1cm4geVtnXT1mdW5jdGlvbigpe3JldHVybiBhSih0aGlzLHguZ2V0KX0seC5tdWx0P3lbVF09ZnVuY3Rpb24oKXtyZXR1cm4gY0oodGhpcyx4LmdldCl9OnlbVF09ZnVuY3Rpb24oKXtyZXR1cm4gb0oodGhpcyx4LmdldCl9LHl9LHt9KSxiSj1kZSh7fSxsQixzSixITCxwSik7LyohCiAgICAJICBFdmVudCBvYmplY3QgYmFzZWQgb24galF1ZXJ5IGV2ZW50cywgTUlUIGxpY2Vuc2UKCiAgICAJICBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZS8KICAgIAkgIGh0dHBzOi8vdGxkcmxlZ2FsLmNvbS9saWNlbnNlL21pdC1saWNlbnNlCiAgICAJICBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9zcmMvZXZlbnQuanMKICAgIAkgICovdmFyIHZCPWZ1bmN0aW9uKGcseCl7dGhpcy5yZWN5Y2xlKGcseCl9O2Z1bmN0aW9uIGprKCl7cmV0dXJuITF9ZnVuY3Rpb24gZUMoKXtyZXR1cm4hMH12Qi5wcm90b3R5cGU9e2luc3RhbmNlU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuImV2ZW50In0scmVjeWNsZTpmdW5jdGlvbihnLHgpe2lmKHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1qayxnIT1udWxsJiZnLnByZXZlbnREZWZhdWx0Pyh0aGlzLnR5cGU9Zy50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWcuZGVmYXVsdFByZXZlbnRlZD9lQzpqayk6ZyE9bnVsbCYmZy50eXBlP3g9Zzp0aGlzLnR5cGU9Zyx4IT1udWxsJiYodGhpcy5vcmlnaW5hbEV2ZW50PXgub3JpZ2luYWxFdmVudCx0aGlzLnR5cGU9eC50eXBlIT1udWxsP3gudHlwZTp0aGlzLnR5cGUsdGhpcy5jeT14LmN5LHRoaXMudGFyZ2V0PXgudGFyZ2V0LHRoaXMucG9zaXRpb249eC5wb3NpdGlvbix0aGlzLnJlbmRlcmVkUG9zaXRpb249eC5yZW5kZXJlZFBvc2l0aW9uLHRoaXMubmFtZXNwYWNlPXgubmFtZXNwYWNlLHRoaXMubGF5b3V0PXgubGF5b3V0KSx0aGlzLmN5IT1udWxsJiZ0aGlzLnBvc2l0aW9uIT1udWxsJiZ0aGlzLnJlbmRlcmVkUG9zaXRpb249PW51bGwpe3ZhciBUPXRoaXMucG9zaXRpb24sTD10aGlzLmN5Lnpvb20oKSxPPXRoaXMuY3kucGFuKCk7dGhpcy5yZW5kZXJlZFBvc2l0aW9uPXt4OlQueCpMK08ueCx5OlQueSpMK08ueX19dGhpcy50aW1lU3RhbXA9ZyYmZy50aW1lU3RhbXB8fERhdGUubm93KCl9LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZUM7dmFyIGc9dGhpcy5vcmlnaW5hbEV2ZW50O2cmJmcucHJldmVudERlZmF1bHQmJmcucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1lQzt2YXIgZz10aGlzLm9yaWdpbmFsRXZlbnQ7ZyYmZy5zdG9wUHJvcGFnYXRpb24mJmcuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9ZUMsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOmprLGlzUHJvcGFnYXRpb25TdG9wcGVkOmprLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmprfTt2YXIgbUI9L14oW14uXSspKFwuKD86W14uXSspKT8kLyx3Sj0iLioiLHlCPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKGcseCl7cmV0dXJuIGc9PT14fSxldmVudE1hdGNoZXM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oKXt9LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihnKXtyZXR1cm4gZ30sYmVmb3JlRW1pdDpmdW5jdGlvbigpe30sYWZ0ZXJFbWl0OmZ1bmN0aW9uKCl7fSxidWJibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0scGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGNvbnRleHQ6bnVsbH0seEI9T2JqZWN0LmtleXMoeUIpLHZKPXt9O2Z1bmN0aW9uIG5DKCl7Zm9yKHZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp2SixnPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHg9MDt4PHhCLmxlbmd0aDt4Kyspe3ZhciBUPXhCW3hdO3RoaXNbVF09eVtUXXx8eUJbVF19dGhpcy5jb250ZXh0PWd8fHRoaXMuY29udGV4dCx0aGlzLmxpc3RlbmVycz1bXSx0aGlzLmVtaXR0aW5nPTB9dmFyIENtPW5DLnByb3RvdHlwZSxrQj1mdW5jdGlvbihnLHgsVCxMLE8sUCwkKXt5dChMKSYmKE89TCxMPW51bGwpLCQmJihQPT1udWxsP1A9JDpQPWRlKHt9LFAsJCkpO2Zvcih2YXIgcT1mdChUKT9UOlQuc3BsaXQoL1xzKy8pLFM9MDtTPHEubGVuZ3RoO1MrKyl7dmFyIFY9cVtTXTtpZighWihWKSl7dmFyIFk9Vi5tYXRjaChtQik7aWYoWSl7dmFyIHJ0PVlbMV0sb3Q9WVsyXT9ZWzJdOm51bGwsaHQ9eChnLFYscnQsb3QsTCxPLFApO2lmKGh0PT09ITEpYnJlYWt9fX19LEVCPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuYWRkRXZlbnRGaWVsZHMoZy5jb250ZXh0LHgpLG5ldyB2Qih4LnR5cGUseCl9LG1KPWZ1bmN0aW9uKGcseCxUKXtpZihFdChUKSl7eChnLFQpO3JldHVybn1lbHNlIGlmKHV0KFQpKXt4KGcsRUIoZyxUKSk7cmV0dXJufWZvcih2YXIgTD1mdChUKT9UOlQuc3BsaXQoL1xzKy8pLE89MDtPPEwubGVuZ3RoO08rKyl7dmFyIFA9TFtPXTtpZighWihQKSl7dmFyICQ9UC5tYXRjaChtQik7aWYoJCl7dmFyIHE9JFsxXSxTPSRbMl0/JFsyXTpudWxsLFY9RUIoZyx7dHlwZTpxLG5hbWVzcGFjZTpTLHRhcmdldDpnLmNvbnRleHR9KTt4KGcsVil9fX19O0NtLm9uPUNtLmFkZExpc3RlbmVyPWZ1bmN0aW9uKHksZyx4LFQsTCl7cmV0dXJuIGtCKHRoaXMsZnVuY3Rpb24oTyxQLCQscSxTLFYsWSl7eXQoVikmJk8ubGlzdGVuZXJzLnB1c2goe2V2ZW50OlAsY2FsbGJhY2s6Vix0eXBlOiQsbmFtZXNwYWNlOnEscXVhbGlmaWVyOlMsY29uZjpZfSl9LHksZyx4LFQsTCksdGhpc30sQ20ub25lPWZ1bmN0aW9uKHksZyx4LFQpe3JldHVybiB0aGlzLm9uKHksZyx4LFQse29uZTohMH0pfSxDbS5yZW1vdmVMaXN0ZW5lcj1DbS5vZmY9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpczt0aGlzLmVtaXR0aW5nIT09MCYmKHRoaXMubGlzdGVuZXJzPXVLKHRoaXMubGlzdGVuZXJzKSk7Zm9yKHZhciBPPXRoaXMubGlzdGVuZXJzLFA9ZnVuY3Rpb24oUyl7dmFyIFY9T1tTXTtrQihMLGZ1bmN0aW9uKFkscnQsb3QsaHQsZHQsTHQpe2lmKChWLnR5cGU9PT1vdHx8eT09PSIqIikmJighaHQmJlYubmFtZXNwYWNlIT09Ii4qInx8Vi5uYW1lc3BhY2U9PT1odCkmJighZHR8fFkucXVhbGlmaWVyQ29tcGFyZShWLnF1YWxpZmllcixkdCkpJiYoIUx0fHxWLmNhbGxiYWNrPT09THQpKXJldHVybiBPLnNwbGljZShTLDEpLCExfSx5LGcseCxUKX0sJD1PLmxlbmd0aC0xOyQ+PTA7JC0tKVAoJCk7cmV0dXJuIHRoaXN9LENtLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZUxpc3RlbmVyKCIqIil9LENtLmVtaXQ9Q20udHJpZ2dlcj1mdW5jdGlvbih5LGcseCl7dmFyIFQ9dGhpcy5saXN0ZW5lcnMsTD1ULmxlbmd0aDtyZXR1cm4gdGhpcy5lbWl0dGluZysrLGZ0KGcpfHwoZz1bZ10pLG1KKHRoaXMsZnVuY3Rpb24oTyxQKXt4IT1udWxsJiYoVD1be2V2ZW50OlAuZXZlbnQsdHlwZTpQLnR5cGUsbmFtZXNwYWNlOlAubmFtZXNwYWNlLGNhbGxiYWNrOnh9XSxMPVQubGVuZ3RoKTtmb3IodmFyICQ9ZnVuY3Rpb24oVil7dmFyIFk9VFtWXTtpZihZLnR5cGU9PT1QLnR5cGUmJighWS5uYW1lc3BhY2V8fFkubmFtZXNwYWNlPT09UC5uYW1lc3BhY2V8fFkubmFtZXNwYWNlPT09d0opJiZPLmV2ZW50TWF0Y2hlcyhPLmNvbnRleHQsWSxQKSl7dmFyIHJ0PVtQXTtnIT1udWxsJiZhTihydCxnKSxPLmJlZm9yZUVtaXQoTy5jb250ZXh0LFksUCksWS5jb25mJiZZLmNvbmYub25lJiYoTy5saXN0ZW5lcnM9Ty5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uKGR0KXtyZXR1cm4gZHQhPT1ZfSkpO3ZhciBvdD1PLmNhbGxiYWNrQ29udGV4dChPLmNvbnRleHQsWSxQKSxodD1ZLmNhbGxiYWNrLmFwcGx5KG90LHJ0KTtPLmFmdGVyRW1pdChPLmNvbnRleHQsWSxQKSxodD09PSExJiYoUC5zdG9wUHJvcGFnYXRpb24oKSxQLnByZXZlbnREZWZhdWx0KCkpfX0scT0wO3E8TDtxKyspJChxKTtPLmJ1YmJsZShPLmNvbnRleHQpJiYhUC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZPLnBhcmVudChPLmNvbnRleHQpLmVtaXQoUCxnKX0seSksdGhpcy5lbWl0dGluZy0tLHRoaXN9O3ZhciB5Sj17cXVhbGlmaWVyQ29tcGFyZTpmdW5jdGlvbihnLHgpe3JldHVybiBnPT1udWxsfHx4PT1udWxsP2c9PW51bGwmJng9PW51bGw6Zy5zYW1lVGV4dCh4KX0sZXZlbnRNYXRjaGVzOmZ1bmN0aW9uKGcseCxUKXt2YXIgTD14LnF1YWxpZmllcjtyZXR1cm4gTCE9bnVsbD9nIT09VC50YXJnZXQmJm50KFQudGFyZ2V0KSYmTC5tYXRjaGVzKFQudGFyZ2V0KTohMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oZyx4KXt4LmN5PWcuY3koKSx4LnRhcmdldD1nfSxjYWxsYmFja0NvbnRleHQ6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4LnF1YWxpZmllciE9bnVsbD9ULnRhcmdldDpnfSxiZWZvcmVFbWl0OmZ1bmN0aW9uKGcseCl7eC5jb25mJiZ4LmNvbmYub25jZSYmeC5jb25mLm9uY2VDb2xsZWN0aW9uLnJlbW92ZUxpc3RlbmVyKHguZXZlbnQseC5xdWFsaWZpZXIseC5jYWxsYmFjayl9LGJ1YmJsZTpmdW5jdGlvbigpe3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNDaGlsZCgpP2cucGFyZW50KCk6Zy5jeSgpfX0sckM9ZnVuY3Rpb24oZyl7cmV0dXJuIG10KGcpP25ldyBFbShnKTpnfSxUQj17Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe2Zvcih2YXIgZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgeD10aGlzW2ddLFQ9eC5fcHJpdmF0ZTtULmVtaXR0ZXJ8fChULmVtaXR0ZXI9bmV3IG5DKHlKLHgpKX1yZXR1cm4gdGhpc30sZW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LG9uOmZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9ckMoeCksTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgUD10aGlzW09dO1AuZW1pdHRlcigpLm9uKGcsTCxUKX1yZXR1cm4gdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD1yQyh4KSxPPTA7Tzx0aGlzLmxlbmd0aDtPKyspe3ZhciBQPXRoaXNbT107UC5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZyxMLFQpfXJldHVybiB0aGlzfSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIHg9dGhpc1tnXTt4LmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKX1yZXR1cm4gdGhpc30sb25lOmZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9ckMoeCksTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgUD10aGlzW09dO1AuZW1pdHRlcigpLm9uZShnLEwsVCl9cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24oZyx4LFQpe2Zvcih2YXIgTD1yQyh4KSxPPTA7Tzx0aGlzLmxlbmd0aDtPKyspe3ZhciBQPXRoaXNbT107UC5lbWl0dGVyKCkub24oZyxMLFQse29uY2U6ITAsb25jZUNvbGxlY3Rpb246dGhpc30pfX0sZW1pdDpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgTD10aGlzW1RdO0wuZW1pdHRlcigpLmVtaXQoZyx4KX1yZXR1cm4gdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihnLHgpe2lmKHRoaXMubGVuZ3RoIT09MClyZXR1cm4gdGhpcy5jeSgpLm5vdGlmeShnLHRoaXMpLHRoaXMuZW1pdChnLHgpLHRoaXN9fTtBYy5ldmVudEFsaWFzZXNPbihUQik7dmFyIENCPXtub2RlczpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHguaXNOb2RlKCl9KS5maWx0ZXIoZyl9LGVkZ2VzOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4geC5pc0VkZ2UoKX0pLmZpbHRlcihnKX0sYnlHcm91cDpmdW5jdGlvbigpe2Zvcih2YXIgZz10aGlzLnNwYXduKCkseD10aGlzLnNwYXduKCksVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgTD10aGlzW1RdO0wuaXNOb2RlKCk/Zy5wdXNoKEwpOngucHVzaChMKX1yZXR1cm57bm9kZXM6ZyxlZGdlczp4fX0sZmlsdGVyOmZ1bmN0aW9uKGcseCl7aWYoZz09PXZvaWQgMClyZXR1cm4gdGhpcztpZihtdChnKXx8VHQoZykpcmV0dXJuIG5ldyBFbShnKS5maWx0ZXIodGhpcyk7aWYoeXQoZykpe2Zvcih2YXIgVD10aGlzLnNwYXduKCksTD10aGlzLE89MDtPPEwubGVuZ3RoO08rKyl7dmFyIFA9TFtPXSwkPXg/Zy5hcHBseSh4LFtQLE8sTF0pOmcoUCxPLEwpOyQmJlQucHVzaChQKX1yZXR1cm4gVH1yZXR1cm4gdGhpcy5zcGF3bigpfSxub3Q6ZnVuY3Rpb24oZyl7aWYoZyl7bXQoZykmJihnPXRoaXMuZmlsdGVyKGcpKTtmb3IodmFyIHg9dGhpcy5zcGF3bigpLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIEw9dGhpc1tUXSxPPWcuaGFzKEwpO098fHgucHVzaChMKX1yZXR1cm4geH1lbHNlIHJldHVybiB0aGlzfSxhYnNvbHV0ZUNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmN5KCk7cmV0dXJuIGcubXV0YWJsZUVsZW1lbnRzKCkubm90KHRoaXMpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24oZyl7aWYobXQoZykpe3ZhciB4PWc7cmV0dXJuIHRoaXMuZmlsdGVyKHgpfWZvcih2YXIgVD10aGlzLnNwYXduKCksTD10aGlzLE89ZyxQPXRoaXMubGVuZ3RoPGcubGVuZ3RoLCQ9UD9MOk8scT1QP086TCxTPTA7UzwkLmxlbmd0aDtTKyspe3ZhciBWPSRbU107cS5oYXMoVikmJlQucHVzaChWKX1yZXR1cm4gVH0seG9yOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7bXQoZykmJihnPXguJChnKSk7dmFyIFQ9dGhpcy5zcGF3bigpLEw9dGhpcyxPPWcsUD1mdW5jdGlvbihxLFMpe2Zvcih2YXIgVj0wO1Y8cS5sZW5ndGg7VisrKXt2YXIgWT1xW1ZdLHJ0PVkuX3ByaXZhdGUuZGF0YS5pZCxvdD1TLmhhc0VsZW1lbnRXaXRoSWQocnQpO290fHxULnB1c2goWSl9fTtyZXR1cm4gUChMLE8pLFAoTyxMKSxUfSxkaWZmOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7bXQoZykmJihnPXguJChnKSk7dmFyIFQ9dGhpcy5zcGF3bigpLEw9dGhpcy5zcGF3bigpLE89dGhpcy5zcGF3bigpLFA9dGhpcywkPWcscT1mdW5jdGlvbihWLFkscnQpe2Zvcih2YXIgb3Q9MDtvdDxWLmxlbmd0aDtvdCsrKXt2YXIgaHQ9VltvdF0sZHQ9aHQuX3ByaXZhdGUuZGF0YS5pZCxMdD1ZLmhhc0VsZW1lbnRXaXRoSWQoZHQpO0x0P08ubWVyZ2UoaHQpOnJ0LnB1c2goaHQpfX07cmV0dXJuIHEoUCwkLFQpLHEoJCxQLEwpLHtsZWZ0OlQscmlnaHQ6TCxib3RoOk99fSxhZGQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZS5jeTtpZighZylyZXR1cm4gdGhpcztpZihtdChnKSl7dmFyIFQ9ZztnPXgubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFQpfWZvcih2YXIgTD10aGlzLnNwYXduU2VsZigpLE89MDtPPGcubGVuZ3RoO08rKyl7dmFyIFA9Z1tPXSwkPSF0aGlzLmhhcyhQKTskJiZMLnB1c2goUCl9cmV0dXJuIEx9LG1lcmdlOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUsVD14LmN5O2lmKCFnKXJldHVybiB0aGlzO2lmKGcmJm10KGcpKXt2YXIgTD1nO2c9VC5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoTCl9Zm9yKHZhciBPPXgubWFwLFA9MDtQPGcubGVuZ3RoO1ArKyl7dmFyICQ9Z1tQXSxxPSQuX3ByaXZhdGUuZGF0YS5pZCxTPSFPLmhhcyhxKTtpZihTKXt2YXIgVj10aGlzLmxlbmd0aCsrO3RoaXNbVl09JCxPLnNldChxLHtlbGU6JCxpbmRleDpWfSl9fXJldHVybiB0aGlzfSx1bm1lcmdlQXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1tnXSxUPXguaWQoKSxMPXRoaXMuX3ByaXZhdGUsTz1MLm1hcDt0aGlzW2ddPXZvaWQgMCxPLmRlbGV0ZShUKTt2YXIgUD1nPT09dGhpcy5sZW5ndGgtMTtpZih0aGlzLmxlbmd0aD4xJiYhUCl7dmFyICQ9dGhpcy5sZW5ndGgtMSxxPXRoaXNbJF0sUz1xLl9wcml2YXRlLmRhdGEuaWQ7dGhpc1skXT12b2lkIDAsdGhpc1tnXT1xLE8uc2V0KFMse2VsZTpxLGluZGV4Omd9KX1yZXR1cm4gdGhpcy5sZW5ndGgtLSx0aGlzfSx1bm1lcmdlT25lOmZ1bmN0aW9uKGcpe2c9Z1swXTt2YXIgeD10aGlzLl9wcml2YXRlLFQ9Zy5fcHJpdmF0ZS5kYXRhLmlkLEw9eC5tYXAsTz1MLmdldChUKTtpZighTylyZXR1cm4gdGhpczt2YXIgUD1PLmluZGV4O3JldHVybiB0aGlzLnVubWVyZ2VBdChQKSx0aGlzfSx1bm1lcmdlOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3k7aWYoIWcpcmV0dXJuIHRoaXM7aWYoZyYmbXQoZykpe3ZhciBUPWc7Zz14Lm11dGFibGVFbGVtZW50cygpLmZpbHRlcihUKX1mb3IodmFyIEw9MDtMPGcubGVuZ3RoO0wrKyl0aGlzLnVubWVyZ2VPbmUoZ1tMXSk7cmV0dXJuIHRoaXN9LHVubWVyZ2VCeTpmdW5jdGlvbihnKXtmb3IodmFyIHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIFQ9dGhpc1t4XTtnKFQpJiZ0aGlzLnVubWVyZ2VBdCh4KX1yZXR1cm4gdGhpc30sbWFwOmZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPVtdLEw9dGhpcyxPPTA7TzxMLmxlbmd0aDtPKyspe3ZhciBQPUxbT10sJD14P2cuYXBwbHkoeCxbUCxPLExdKTpnKFAsTyxMKTtULnB1c2goJCl9cmV0dXJuIFR9LHJlZHVjZTpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD14LEw9dGhpcyxPPTA7TzxMLmxlbmd0aDtPKyspVD1nKFQsTFtPXSxPLEwpO3JldHVybiBUfSxtYXg6ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9LTEvMCxMLE89dGhpcyxQPTA7UDxPLmxlbmd0aDtQKyspe3ZhciAkPU9bUF0scT14P2cuYXBwbHkoeCxbJCxQLE9dKTpnKCQsUCxPKTtxPlQmJihUPXEsTD0kKX1yZXR1cm57dmFsdWU6VCxlbGU6TH19LG1pbjpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0xLzAsTCxPPXRoaXMsUD0wO1A8Ty5sZW5ndGg7UCsrKXt2YXIgJD1PW1BdLHE9eD9nLmFwcGx5KHgsWyQsUCxPXSk6ZygkLFAsTyk7cTxUJiYoVD1xLEw9JCl9cmV0dXJue3ZhbHVlOlQsZWxlOkx9fX0sdWM9Q0I7dWMudT11Y1sifCJdPXVjWyIrIl09dWMudW5pb249dWMub3I9dWMuYWRkLHVjWyJcXCJdPXVjWyIhIl09dWNbIi0iXT11Yy5kaWZmZXJlbmNlPXVjLnJlbGF0aXZlQ29tcGxlbWVudD11Yy5zdWJ0cmFjdD11Yy5ub3QsdWMubj11Y1siJiJdPXVjWyIuIl09dWMuYW5kPXVjLmludGVyc2VjdGlvbj11Yy5pbnRlcnNlY3QsdWNbIl4iXT11Y1siKCspIl09dWNbIigtKSJdPXVjLnN5bW1ldHJpY0RpZmZlcmVuY2U9dWMuc3ltZGlmZj11Yy54b3IsdWMuZm5GaWx0ZXI9dWMuZmlsdGVyRm49dWMuc3RkRmlsdGVyPXVjLmZpbHRlcix1Yy5jb21wbGVtZW50PXVjLmFic2NvbXA9dWMuYWJzb2x1dGVDb21wbGVtZW50O3ZhciB4Sj17aXNOb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXAoKT09PSJub2RlcyJ9LGlzRWRnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwKCk9PT0iZWRnZXMifSxpc0xvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0VkZ2UoKSYmdGhpcy5zb3VyY2UoKVswXT09PXRoaXMudGFyZ2V0KClbMF19LGlzU2ltcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNFZGdlKCkmJnRoaXMuc291cmNlKClbMF0hPT10aGlzLnRhcmdldCgpWzBdfSxncm91cDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZylyZXR1cm4gZy5fcHJpdmF0ZS5ncm91cH19LF9CPWZ1bmN0aW9uKGcseCl7dmFyIFQ9Zy5jeSgpLEw9VC5oYXNDb21wb3VuZE5vZGVzKCk7ZnVuY3Rpb24gTyhWKXt2YXIgWT1WLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpO3JldHVybiBZLnZhbHVlPT09ImF1dG8iP0w/Vi56RGVwdGgoKTowOlkudmFsdWU9PT0iYm90dG9tIj8tMTpZLnZhbHVlPT09InRvcCI/VzU6MH12YXIgUD1PKGcpLU8oeCk7aWYoUCE9PTApcmV0dXJuIFA7ZnVuY3Rpb24gJChWKXt2YXIgWT1WLnBzdHlsZSgiei1pbmRleC1jb21wYXJlIik7cmV0dXJuIFkudmFsdWU9PT0iYXV0byImJlYuaXNOb2RlKCk/MTowfXZhciBxPSQoZyktJCh4KTtpZihxIT09MClyZXR1cm4gcTt2YXIgUz1nLnBzdHlsZSgiei1pbmRleCIpLnZhbHVlLXgucHN0eWxlKCJ6LWluZGV4IikudmFsdWU7cmV0dXJuIFMhPT0wP1M6Zy5wb29sSW5kZXgoKS14LnBvb2xJbmRleCgpfSxpQz17Zm9yRWFjaDpmdW5jdGlvbihnLHgpe2lmKHl0KGcpKWZvcih2YXIgVD10aGlzLmxlbmd0aCxMPTA7TDxUO0wrKyl7dmFyIE89dGhpc1tMXSxQPXg/Zy5hcHBseSh4LFtPLEwsdGhpc10pOmcoTyxMLHRoaXMpO2lmKFA9PT0hMSlicmVha31yZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbigpe2Zvcih2YXIgZz1bXSx4PTA7eDx0aGlzLmxlbmd0aDt4KyspZy5wdXNoKHRoaXNbeF0pO3JldHVybiBnfSxzbGljZTpmdW5jdGlvbihnLHgpe3ZhciBUPVtdLEw9dGhpcy5sZW5ndGg7eD09bnVsbCYmKHg9TCksZz09bnVsbCYmKGc9MCksZzwwJiYoZz1MK2cpLHg8MCYmKHg9TCt4KTtmb3IodmFyIE89ZztPPj0wJiZPPHgmJk88TDtPKyspVC5wdXNoKHRoaXNbT10pO3JldHVybiB0aGlzLnNwYXduKFQpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxlcTpmdW5jdGlvbihnKXtyZXR1cm4gdGhpc1tnXXx8dGhpcy5zcGF3bigpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzWzBdfHx0aGlzLnNwYXduKCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXXx8dGhpcy5zcGF3bigpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD09PTB9LG5vbmVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHkoKX0sc29ydDpmdW5jdGlvbihnKXtpZigheXQoZykpcmV0dXJuIHRoaXM7dmFyIHg9dGhpcy50b0FycmF5KCkuc29ydChnKTtyZXR1cm4gdGhpcy5zcGF3bih4KX0sc29ydEJ5WkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc29ydChfQil9LHpEZXB0aDpmdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZyl7dmFyIHg9Zy5fcHJpdmF0ZSxUPXguZ3JvdXA7aWYoVD09PSJub2RlcyIpe3ZhciBMPXguZGF0YS5wYXJlbnQ/Zy5wYXJlbnRzKCkuc2l6ZSgpOjA7cmV0dXJuIGcuaXNQYXJlbnQoKT9MOlc1LTF9ZWxzZXt2YXIgTz14LnNvdXJjZSxQPXgudGFyZ2V0LCQ9Ty56RGVwdGgoKSxxPVAuekRlcHRoKCk7cmV0dXJuIE1hdGgubWF4KCQscSwwKX19fX07aUMuZWFjaD1pQy5mb3JFYWNoO3ZhciBrSj1mdW5jdGlvbigpe3ZhciBnPSJ1bmRlZmluZWQiLHg9KHR5cGVvZiBTeW1ib2w+InUiPyJ1bmRlZmluZWQiOmYoU3ltYm9sKSkhPWcmJmYoU3ltYm9sLml0ZXJhdG9yKSE9Zzt4JiYoaUNbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3ZhciBUPXRoaXMsTD17dmFsdWU6dm9pZCAwLGRvbmU6ITF9LE89MCxQPXRoaXMubGVuZ3RoO3JldHVybiBiKHtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIE88UD9MLnZhbHVlPVRbTysrXTooTC52YWx1ZT12b2lkIDAsTC5kb25lPSEwKSxMfX0sU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KX0pfTtrSigpO3ZhciBFSj1SZih7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExfSksc0M9e2xheW91dERpbWVuc2lvbnM6ZnVuY3Rpb24oZyl7Zz1FSihnKTt2YXIgeDtpZighdGhpcy50YWtlc1VwU3BhY2UoKSl4PXt3OjAsaDowfTtlbHNlIGlmKGcubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzKXt2YXIgVD10aGlzLmJvdW5kaW5nQm94KCk7eD17dzpULncsaDpULmh9fWVsc2UgeD17dzp0aGlzLm91dGVyV2lkdGgoKSxoOnRoaXMub3V0ZXJIZWlnaHQoKX07cmV0dXJuKHgudz09PTB8fHguaD09PTApJiYoeC53PXguaD0xKSx4fSxsYXlvdXRQb3NpdGlvbnM6ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPXRoaXMubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oWnQpe3JldHVybiFadC5pc1BhcmVudCgpfSksTz10aGlzLmN5KCksUD14LmVsZXMsJD1mdW5jdGlvbihZdCl7cmV0dXJuIFl0LmlkKCl9LHE9RnQoVCwkKTtnLmVtaXQoe3R5cGU6ImxheW91dHN0YXJ0IixsYXlvdXQ6Z30pLGcuYW5pbWF0aW9ucz1bXTt2YXIgUz1mdW5jdGlvbihZdCxxdCxuZSl7dmFyIEd0PXt4OnF0LngxK3F0LncvMix5OnF0LnkxK3F0LmgvMn0sZ2U9e3g6KG5lLngtR3QueCkqWXQseToobmUueS1HdC55KSpZdH07cmV0dXJue3g6R3QueCtnZS54LHk6R3QueStnZS55fX0sVj14LnNwYWNpbmdGYWN0b3ImJnguc3BhY2luZ0ZhY3RvciE9PTEsWT1mdW5jdGlvbigpe2lmKCFWKXJldHVybiBudWxsO2Zvcih2YXIgWXQ9emQoKSxxdD0wO3F0PEwubGVuZ3RoO3F0Kyspe3ZhciBuZT1MW3F0XSxHdD1xKG5lLHF0KTtSSyhZdCxHdC54LEd0LnkpfXJldHVybiBZdH0scnQ9WSgpLG90PUZ0KGZ1bmN0aW9uKFp0LFl0KXt2YXIgcXQ9cShadCxZdCk7aWYoVil7dmFyIG5lPU1hdGguYWJzKHguc3BhY2luZ0ZhY3Rvcik7cXQ9UyhuZSxydCxxdCl9cmV0dXJuIHgudHJhbnNmb3JtIT1udWxsJiYocXQ9eC50cmFuc2Zvcm0oWnQscXQpKSxxdH0sJCk7aWYoeC5hbmltYXRlKXtmb3IodmFyIGh0PTA7aHQ8TC5sZW5ndGg7aHQrKyl7dmFyIGR0PUxbaHRdLEx0PW90KGR0LGh0KSxrdD14LmFuaW1hdGVGaWx0ZXI9PW51bGx8fHguYW5pbWF0ZUZpbHRlcihkdCxodCk7aWYoa3Qpe3ZhciBEdD1kdC5hbmltYXRpb24oe3Bvc2l0aW9uOkx0LGR1cmF0aW9uOnguYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnguYW5pbWF0aW9uRWFzaW5nfSk7Zy5hbmltYXRpb25zLnB1c2goRHQpfWVsc2UgZHQucG9zaXRpb24oTHQpfWlmKHguZml0KXt2YXIgUHQ9Ty5hbmltYXRpb24oe2ZpdDp7Ym91bmRpbmdCb3g6UC5ib3VuZGluZ0JveEF0KG90KSxwYWRkaW5nOngucGFkZGluZ30sZHVyYXRpb246eC5hbmltYXRpb25EdXJhdGlvbixlYXNpbmc6eC5hbmltYXRpb25FYXNpbmd9KTtnLmFuaW1hdGlvbnMucHVzaChQdCl9ZWxzZSBpZih4Lnpvb20hPT12b2lkIDAmJngucGFuIT09dm9pZCAwKXt2YXIgJHQ9Ty5hbmltYXRpb24oe3pvb206eC56b29tLHBhbjp4LnBhbixkdXJhdGlvbjp4LmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzp4LmFuaW1hdGlvbkVhc2luZ30pO2cuYW5pbWF0aW9ucy5wdXNoKCR0KX1nLmFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihadCl7cmV0dXJuIFp0LnBsYXkoKX0pLGcub25lKCJsYXlvdXRyZWFkeSIseC5yZWFkeSksZy5lbWl0KHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0Omd9KSxleC5hbGwoZy5hbmltYXRpb25zLm1hcChmdW5jdGlvbihadCl7cmV0dXJuIFp0LnByb21pc2UoKX0pKS50aGVuKGZ1bmN0aW9uKCl7Zy5vbmUoImxheW91dHN0b3AiLHguc3RvcCksZy5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6Z30pfSl9ZWxzZSBMLnBvc2l0aW9ucyhvdCkseC5maXQmJk8uZml0KHguZWxlcyx4LnBhZGRpbmcpLHguem9vbSE9bnVsbCYmTy56b29tKHguem9vbSkseC5wYW4mJk8ucGFuKHgucGFuKSxnLm9uZSgibGF5b3V0cmVhZHkiLHgucmVhZHkpLGcuZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDpnfSksZy5vbmUoImxheW91dHN0b3AiLHguc3RvcCksZy5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6Z30pO3JldHVybiB0aGlzfSxsYXlvdXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO3JldHVybiB4Lm1ha2VMYXlvdXQoZGUoe30sZyx7ZWxlczp0aGlzfSkpfX07c0MuY3JlYXRlTGF5b3V0PXNDLm1ha2VMYXlvdXQ9c0MubGF5b3V0O2Z1bmN0aW9uIFNCKHksZyx4KXt2YXIgVD14Ll9wcml2YXRlLEw9VC5zdHlsZUNhY2hlPVQuc3R5bGVDYWNoZXx8W10sTztyZXR1cm4oTz1MW3ldKSE9bnVsbHx8KE89TFt5XT1nKHgpKSxPfWZ1bmN0aW9uIGFDKHksZyl7cmV0dXJuIHk9cmQoeSksZnVuY3Rpb24oVCl7cmV0dXJuIFNCKHksZyxUKX19ZnVuY3Rpb24gb0MoeSxnKXt5PXJkKHkpO3ZhciB4PWZ1bmN0aW9uKEwpe3JldHVybiBnLmNhbGwoTCl9O3JldHVybiBmdW5jdGlvbigpe3ZhciBMPXRoaXNbMF07aWYoTClyZXR1cm4gU0IoeSx4LEwpfX12YXIgamY9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpmdW5jdGlvbihnKXt2YXIgeD10aGlzLmN5KCksVD14LnJlbmRlcmVyKCksTD14LnN0eWxlRW5hYmxlZCgpO3JldHVybiBUJiZMJiZULnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0aGlzLGcpLHRoaXN9LGRpcnR5U3R5bGVDYWNoZTpmdW5jdGlvbigpe3ZhciBnPXRoaXMuY3koKSx4PWZ1bmN0aW9uKE8pe3JldHVybiBPLl9wcml2YXRlLnN0eWxlQ2FjaGU9bnVsbH07aWYoZy5oYXNDb21wb3VuZE5vZGVzKCkpe3ZhciBUO1Q9dGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKSxULm1lcmdlKFQuY29ubmVjdGVkRWRnZXMoKSksVC5mb3JFYWNoKHgpfWVsc2UgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKEwpe3goTCksTC5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goeCl9KTtyZXR1cm4gdGhpc30sdXBkYXRlU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZS5jeTtpZigheC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztpZih4LmJhdGNoaW5nKCkpe3ZhciBUPXguX3ByaXZhdGUuYmF0Y2hTdHlsZUVsZXM7cmV0dXJuIFQubWVyZ2UodGhpcyksdGhpc312YXIgTD14Lmhhc0NvbXBvdW5kTm9kZXMoKSxPPXRoaXM7Zz0hIShnfHxnPT09dm9pZCAwKSxMJiYoTz10aGlzLnNwYXduU2VsZigpLm1lcmdlKHRoaXMuZGVzY2VuZGFudHMoKSkubWVyZ2UodGhpcy5wYXJlbnRzKCkpKTt2YXIgUD1PO3JldHVybiBnP1AuZW1pdEFuZE5vdGlmeSgic3R5bGUiKTpQLmVtaXQoInN0eWxlIiksTy5mb3JFYWNoKGZ1bmN0aW9uKCQpe3JldHVybiAkLl9wcml2YXRlLnN0eWxlRGlydHk9ITB9KSx0aGlzfSxjbGVhblN0eWxlOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKGcuc3R5bGVFbmFibGVkKCkpZm9yKHZhciB4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBUPXRoaXNbeF07VC5fcHJpdmF0ZS5zdHlsZURpcnR5JiYoVC5fcHJpdmF0ZS5zdHlsZURpcnR5PSExLGcuc3R5bGUoKS5hcHBseShUKSl9fSxwYXJzZWRTdHlsZTpmdW5jdGlvbihnKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsVD10aGlzWzBdLEw9VC5jeSgpO2lmKEwuc3R5bGVFbmFibGVkKCkmJlQpe3RoaXMuY2xlYW5TdHlsZSgpO3ZhciBPPVQuX3ByaXZhdGUuc3R5bGVbZ107cmV0dXJuIE8/Pyh4P0wuc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkoZyk6bnVsbCl9fSxudW1lcmljU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1swXTtpZih4LmN5KCkuc3R5bGVFbmFibGVkKCkmJngpe3ZhciBUPXgucHN0eWxlKGcpO3JldHVybiBULnBmVmFsdWUhPT12b2lkIDA/VC5wZlZhbHVlOlQudmFsdWV9fSxudW1lcmljU3R5bGVVbml0czpmdW5jdGlvbihnKXt2YXIgeD10aGlzWzBdO2lmKHguY3koKS5zdHlsZUVuYWJsZWQoKSYmeClyZXR1cm4geC5wc3R5bGUoZykudW5pdHN9LHJlbmRlcmVkU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO2lmKCF4LnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBUPXRoaXNbMF07aWYoVClyZXR1cm4geC5zdHlsZSgpLmdldFJlbmRlcmVkU3R5bGUoVCxnKX0sc3R5bGU6ZnVuY3Rpb24oZyx4KXt2YXIgVD10aGlzLmN5KCk7aWYoIVQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIEw9ITEsTz1ULnN0eWxlKCk7aWYodXQoZykpe3ZhciBQPWc7Ty5hcHBseUJ5cGFzcyh0aGlzLFAsTCksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpfWVsc2UgaWYobXQoZykpaWYoeD09PXZvaWQgMCl7dmFyICQ9dGhpc1swXTtyZXR1cm4gJD9PLmdldFN0eWxlUHJvcGVydHlWYWx1ZSgkLGcpOnZvaWQgMH1lbHNlIE8uYXBwbHlCeXBhc3ModGhpcyxnLHgsTCksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpO2Vsc2UgaWYoZz09PXZvaWQgMCl7dmFyIHE9dGhpc1swXTtyZXR1cm4gcT9PLmdldFJhd1N0eWxlKHEpOnZvaWQgMH1yZXR1cm4gdGhpc30scmVtb3ZlU3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5jeSgpO2lmKCF4LnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBUPSExLEw9eC5zdHlsZSgpLE89dGhpcztpZihnPT09dm9pZCAwKWZvcih2YXIgUD0wO1A8Ty5sZW5ndGg7UCsrKXt2YXIgJD1PW1BdO0wucmVtb3ZlQWxsQnlwYXNzZXMoJCxUKX1lbHNle2c9Zy5zcGxpdCgvXHMrLyk7Zm9yKHZhciBxPTA7cTxPLmxlbmd0aDtxKyspe3ZhciBTPU9bcV07TC5yZW1vdmVCeXBhc3NlcyhTLGcsVCl9fXJldHVybiB0aGlzLmVtaXRBbmROb3RpZnkoInN0eWxlIiksdGhpc30sc2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcygiZGlzcGxheSIsImVsZW1lbnQiKSx0aGlzfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3NzKCJkaXNwbGF5Iiwibm9uZSIpLHRoaXN9LGVmZmVjdGl2ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmN5KCk7aWYoIWcuc3R5bGVFbmFibGVkKCkpcmV0dXJuIDE7dmFyIHg9Zy5oYXNDb21wb3VuZE5vZGVzKCksVD10aGlzWzBdO2lmKFQpe3ZhciBMPVQuX3ByaXZhdGUsTz1ULnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO2lmKCF4KXJldHVybiBPO3ZhciBQPUwuZGF0YS5wYXJlbnQ/VC5wYXJlbnRzKCk6bnVsbDtpZihQKWZvcih2YXIgJD0wOyQ8UC5sZW5ndGg7JCsrKXt2YXIgcT1QWyRdLFM9cS5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtPPVMqT31yZXR1cm4gT319LHRyYW5zcGFyZW50OmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKCFnLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciB4PXRoaXNbMF0sVD14LmN5KCkuaGFzQ29tcG91bmROb2RlcygpO2lmKHgpcmV0dXJuIFQ/eC5lZmZlY3RpdmVPcGFjaXR5KCk9PT0wOngucHN0eWxlKCJvcGFjaXR5IikudmFsdWU9PT0wfSxiYWNrZ3JvdW5kaW5nOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jeSgpO2lmKCFnLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciB4PXRoaXNbMF07cmV0dXJuISF4Ll9wcml2YXRlLmJhY2tncm91bmRpbmd9fTtmdW5jdGlvbiBWTCh5LGcpe3ZhciB4PXkuX3ByaXZhdGUsVD14LmRhdGEucGFyZW50P3kucGFyZW50cygpOm51bGw7aWYoVClmb3IodmFyIEw9MDtMPFQubGVuZ3RoO0wrKyl7dmFyIE89VFtMXTtpZighZyhPKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBHTCh5KXt2YXIgZz15Lm9rLHg9eS5lZGdlT2tWaWFOb2RlfHx5Lm9rLFQ9eS5wYXJlbnRPa3x8eS5vaztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTD10aGlzLmN5KCk7aWYoIUwuc3R5bGVFbmFibGVkKCkpcmV0dXJuITA7dmFyIE89dGhpc1swXSxQPUwuaGFzQ29tcG91bmROb2RlcygpO2lmKE8pe3ZhciAkPU8uX3ByaXZhdGU7aWYoIWcoTykpcmV0dXJuITE7aWYoTy5pc05vZGUoKSlyZXR1cm4hUHx8VkwoTyxUKTt2YXIgcT0kLnNvdXJjZSxTPSQudGFyZ2V0O3JldHVybiB4KHEpJiYoIVB8fFZMKHEseCkpJiYocT09PVN8fHgoUykmJighUHx8VkwoUyx4KSkpfX19dmFyIGx4PWFDKCJlbGVUYWtlc1VwU3BhY2UiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlPT09ImVsZW1lbnQiJiZ5LndpZHRoKCkhPT0wJiYoeS5pc05vZGUoKT95LmhlaWdodCgpIT09MDohMCl9KTtqZi50YWtlc1VwU3BhY2U9b0MoInRha2VzVXBTcGFjZSIsR0woe29rOmx4fSkpO3ZhciBUSj1hQygiZWxlSW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgiZXZlbnRzIikudmFsdWU9PT0ieWVzIiYmeS5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmbHgoeSl9KSxDSj1hQygicGFyZW50SW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHkpe3JldHVybiB5LnBzdHlsZSgidmlzaWJpbGl0eSIpLnZhbHVlPT09InZpc2libGUiJiZseCh5KX0pO2pmLmludGVyYWN0aXZlPW9DKCJpbnRlcmFjdGl2ZSIsR0woe29rOlRKLHBhcmVudE9rOkNKLGVkZ2VPa1ZpYU5vZGU6bHh9KSksamYubm9uaW50ZXJhY3RpdmU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkuaW50ZXJhY3RpdmUoKX07dmFyIF9KPWFDKCJlbGVWaXNpYmxlIixmdW5jdGlvbih5KXtyZXR1cm4geS5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmeS5wc3R5bGUoIm9wYWNpdHkiKS5wZlZhbHVlIT09MCYmbHgoeSl9KSxTSj1seDtqZi52aXNpYmxlPW9DKCJ2aXNpYmxlIixHTCh7b2s6X0osZWRnZU9rVmlhTm9kZTpTSn0pKSxqZi5oaWRkZW49ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkudmlzaWJsZSgpfSxqZi5pc0J1bmRsZWRCZXppZXI9b0MoImlzQnVuZGxlZEJlemllciIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpPyF0aGlzLnJlbW92ZWQoKSYmdGhpcy5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWU9PT0iYmV6aWVyIiYmdGhpcy50YWtlc1VwU3BhY2UoKTohMX0pLGpmLmJ5cGFzcz1qZi5jc3M9amYuc3R5bGUsamYucmVuZGVyZWRDc3M9amYucmVuZGVyZWRTdHlsZSxqZi5yZW1vdmVCeXBhc3M9amYucmVtb3ZlQ3NzPWpmLnJlbW92ZVN0eWxlLGpmLnBzdHlsZT1qZi5wYXJzZWRTdHlsZTt2YXIgX209e307ZnVuY3Rpb24gQUIoeSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGc9YXJndW1lbnRzLHg9W107aWYoZy5sZW5ndGg9PT0yKXt2YXIgVD1nWzBdLEw9Z1sxXTt0aGlzLm9uKHkuZXZlbnQsVCxMKX1lbHNlIGlmKGcubGVuZ3RoPT09MSYmeXQoZ1swXSkpe3ZhciBPPWdbMF07dGhpcy5vbih5LmV2ZW50LE8pfWVsc2UgaWYoZy5sZW5ndGg9PT0wfHxnLmxlbmd0aD09PTEmJmZ0KGdbMF0pKXtmb3IodmFyIFA9Zy5sZW5ndGg9PT0xP2dbMF06bnVsbCwkPTA7JDx0aGlzLmxlbmd0aDskKyspe3ZhciBxPXRoaXNbJF0sUz0heS5hYmxlRmllbGR8fHEuX3ByaXZhdGVbeS5hYmxlRmllbGRdLFY9cS5fcHJpdmF0ZVt5LmZpZWxkXSE9eS52YWx1ZTtpZih5Lm92ZXJyaWRlQWJsZSl7dmFyIFk9eS5vdmVycmlkZUFibGUocSk7aWYoWSE9PXZvaWQgMCYmKFM9WSwhWSkpcmV0dXJuIHRoaXN9UyYmKHEuX3ByaXZhdGVbeS5maWVsZF09eS52YWx1ZSxWJiZ4LnB1c2gocSkpfXZhciBydD10aGlzLnNwYXduKHgpO3J0LnVwZGF0ZVN0eWxlKCkscnQuZW1pdCh5LmV2ZW50KSxQJiZydC5lbWl0KFApfXJldHVybiB0aGlzfX1mdW5jdGlvbiBoeCh5KXtfbVt5LmZpZWxkXT1mdW5jdGlvbigpe3ZhciBnPXRoaXNbMF07aWYoZyl7aWYoeS5vdmVycmlkZUZpZWxkKXt2YXIgeD15Lm92ZXJyaWRlRmllbGQoZyk7aWYoeCE9PXZvaWQgMClyZXR1cm4geH1yZXR1cm4gZy5fcHJpdmF0ZVt5LmZpZWxkXX19LF9tW3kub25dPUFCKHtldmVudDp5Lm9uLGZpZWxkOnkuZmllbGQsYWJsZUZpZWxkOnkuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp5Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMH0pLF9tW3kub2ZmXT1BQih7ZXZlbnQ6eS5vZmYsZmllbGQ6eS5maWVsZCxhYmxlRmllbGQ6eS5hYmxlRmllbGQsb3ZlcnJpZGVBYmxlOnkub3ZlcnJpZGVBYmxlLHZhbHVlOiExfSl9aHgoe2ZpZWxkOiJsb2NrZWQiLG92ZXJyaWRlRmllbGQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuY3koKS5hdXRvbG9jaygpPyEwOnZvaWQgMH0sb246ImxvY2siLG9mZjoidW5sb2NrIn0pLGh4KHtmaWVsZDoiZ3JhYmJhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmN5KCkuYXV0b3VuZ3JhYmlmeSgpfHxnLnBhbm5hYmxlKCk/ITE6dm9pZCAwfSxvbjoiZ3JhYmlmeSIsb2ZmOiJ1bmdyYWJpZnkifSksaHgoe2ZpZWxkOiJzZWxlY3RlZCIsYWJsZUZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUFibGU6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuY3koKS5hdXRvdW5zZWxlY3RpZnkoKT8hMTp2b2lkIDB9LG9uOiJzZWxlY3QiLG9mZjoidW5zZWxlY3QifSksaHgoe2ZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSxvbjoic2VsZWN0aWZ5IixvZmY6InVuc2VsZWN0aWZ5In0pLF9tLmRlc2VsZWN0PV9tLnVuc2VsZWN0LF9tLmdyYWJiZWQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIHkuX3ByaXZhdGUuZ3JhYmJlZH0saHgoe2ZpZWxkOiJhY3RpdmUiLG9uOiJhY3RpdmF0ZSIsb2ZmOiJ1bmFjdGl2YXRlIn0pLGh4KHtmaWVsZDoicGFubmFibGUiLG9uOiJwYW5pZnkiLG9mZjoidW5wYW5pZnkifSksX20uaW5hY3RpdmU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO2lmKHkpcmV0dXJuIXkuX3ByaXZhdGUuYWN0aXZlfTt2YXIgZDE9e30sTEI9ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKFQpe2Zvcih2YXIgTD10aGlzLE89W10sUD0wO1A8TC5sZW5ndGg7UCsrKXt2YXIgJD1MW1BdO2lmKCQuaXNOb2RlKCkpe2Zvcih2YXIgcT0hMSxTPSQuY29ubmVjdGVkRWRnZXMoKSxWPTA7VjxTLmxlbmd0aDtWKyspe3ZhciBZPVNbVl0scnQ9WS5zb3VyY2UoKSxvdD1ZLnRhcmdldCgpO2lmKGcubm9JbmNvbWluZ0VkZ2VzJiZvdD09PSQmJnJ0IT09JHx8Zy5ub091dGdvaW5nRWRnZXMmJnJ0PT09JCYmb3QhPT0kKXtxPSEwO2JyZWFrfX1xfHxPLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKE8sITApLmZpbHRlcihUKX19LE1CPWZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9dGhpcyxMPVtdLE89MDtPPFQubGVuZ3RoO08rKyl7dmFyIFA9VFtPXTtpZihQLmlzTm9kZSgpKWZvcih2YXIgJD1QLmNvbm5lY3RlZEVkZ2VzKCkscT0wO3E8JC5sZW5ndGg7cSsrKXt2YXIgUz0kW3FdLFY9Uy5zb3VyY2UoKSxZPVMudGFyZ2V0KCk7Zy5vdXRnb2luZyYmVj09PVA/KEwucHVzaChTKSxMLnB1c2goWSkpOmcuaW5jb21pbmcmJlk9PT1QJiYoTC5wdXNoKFMpLEwucHVzaChWKSl9fXJldHVybiB0aGlzLnNwYXduKEwsITApLmZpbHRlcih4KX19LERCPWZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9dGhpcyxMPVtdLE89e307Oyl7dmFyIFA9Zy5vdXRnb2luZz9ULm91dGdvZXJzKCk6VC5pbmNvbWVycygpO2lmKFAubGVuZ3RoPT09MClicmVhaztmb3IodmFyICQ9ITEscT0wO3E8UC5sZW5ndGg7cSsrKXt2YXIgUz1QW3FdLFY9Uy5pZCgpO09bVl18fChPW1ZdPSEwLEwucHVzaChTKSwkPSEwKX1pZighJClicmVhaztUPVB9cmV0dXJuIHRoaXMuc3Bhd24oTCwhMCkuZmlsdGVyKHgpfX07ZDEuY2xlYXJUcmF2ZXJzYWxDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKXRoaXNbeV0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGU9bnVsbH0sZGUoZDEse3Jvb3RzOkxCKHtub0luY29taW5nRWRnZXM6ITB9KSxsZWF2ZXM6TEIoe25vT3V0Z29pbmdFZGdlczohMH0pLG91dGdvZXJzOmFkKE1CKHtvdXRnb2luZzohMH0pLCJvdXRnb2VycyIpLHN1Y2Nlc3NvcnM6REIoe291dGdvaW5nOiEwfSksaW5jb21lcnM6YWQoTUIoe2luY29taW5nOiEwfSksImluY29tZXJzIikscHJlZGVjZXNzb3JzOkRCKHtpbmNvbWluZzohMH0pfSksZGUoZDEse25laWdoYm9yaG9vZDphZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD10aGlzLm5vZGVzKCksVD0wO1Q8eC5sZW5ndGg7VCsrKWZvcih2YXIgTD14W1RdLE89TC5jb25uZWN0ZWRFZGdlcygpLFA9MDtQPE8ubGVuZ3RoO1ArKyl7dmFyICQ9T1tQXSxxPSQuc291cmNlKCksUz0kLnRhcmdldCgpLFY9TD09PXE/UzpxO1YubGVuZ3RoPjAmJmcucHVzaChWWzBdKSxnLnB1c2goJFswXSl9cmV0dXJuIHRoaXMuc3Bhd24oZywhMCkuZmlsdGVyKHkpfSwibmVpZ2hib3Job29kIiksY2xvc2VkTmVpZ2hib3Job29kOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm5laWdoYm9yaG9vZCgpLmFkZCh0aGlzKS5maWx0ZXIoZyl9LG9wZW5OZWlnaGJvcmhvb2Q6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKGcpfX0pLGQxLm5laWdoYm91cmhvb2Q9ZDEubmVpZ2hib3Job29kLGQxLmNsb3NlZE5laWdoYm91cmhvb2Q9ZDEuY2xvc2VkTmVpZ2hib3Job29kLGQxLm9wZW5OZWlnaGJvdXJob29kPWQxLm9wZW5OZWlnaGJvcmhvb2QsZGUoZDEse3NvdXJjZTphZChmdW5jdGlvbihnKXt2YXIgeD10aGlzWzBdLFQ7cmV0dXJuIHgmJihUPXguX3ByaXZhdGUuc291cmNlfHx4LmN5KCkuY29sbGVjdGlvbigpKSxUJiZnP1QuZmlsdGVyKGcpOlR9LCJzb3VyY2UiKSx0YXJnZXQ6YWQoZnVuY3Rpb24oZyl7dmFyIHg9dGhpc1swXSxUO3JldHVybiB4JiYoVD14Ll9wcml2YXRlLnRhcmdldHx8eC5jeSgpLmNvbGxlY3Rpb24oKSksVCYmZz9ULmZpbHRlcihnKTpUfSwidGFyZ2V0Iiksc291cmNlczpJQih7YXR0cjoic291cmNlIn0pLHRhcmdldHM6SUIoe2F0dHI6InRhcmdldCJ9KX0pO2Z1bmN0aW9uIElCKHkpe3JldHVybiBmdW5jdGlvbih4KXtmb3IodmFyIFQ9W10sTD0wO0w8dGhpcy5sZW5ndGg7TCsrKXt2YXIgTz10aGlzW0xdLFA9Ty5fcHJpdmF0ZVt5LmF0dHJdO1AmJlQucHVzaChQKX1yZXR1cm4gdGhpcy5zcGF3bihULCEwKS5maWx0ZXIoeCl9fWRlKGQxLHtlZGdlc1dpdGg6YWQoT0IoKSwiZWRnZXNXaXRoIiksZWRnZXNUbzphZChPQih7dGhpc0lzU3JjOiEwfSksImVkZ2VzVG8iKX0pO2Z1bmN0aW9uIE9CKHkpe3JldHVybiBmdW5jdGlvbih4KXt2YXIgVD1bXSxMPXRoaXMuX3ByaXZhdGUuY3ksTz15fHx7fTttdCh4KSYmKHg9TC4kKHgpKTtmb3IodmFyIFA9MDtQPHgubGVuZ3RoO1ArKylmb3IodmFyICQ9eFtQXS5fcHJpdmF0ZS5lZGdlcyxxPTA7cTwkLmxlbmd0aDtxKyspe3ZhciBTPSRbcV0sVj1TLl9wcml2YXRlLmRhdGEsWT10aGlzLmhhc0VsZW1lbnRXaXRoSWQoVi5zb3VyY2UpJiZ4Lmhhc0VsZW1lbnRXaXRoSWQoVi50YXJnZXQpLHJ0PXguaGFzRWxlbWVudFdpdGhJZChWLnNvdXJjZSkmJnRoaXMuaGFzRWxlbWVudFdpdGhJZChWLnRhcmdldCksb3Q9WXx8cnQ7b3QmJigoTy50aGlzSXNTcmN8fE8udGhpc0lzVGd0KSYmKE8udGhpc0lzU3JjJiYhWXx8Ty50aGlzSXNUZ3QmJiFydCl8fFQucHVzaChTKSl9cmV0dXJuIHRoaXMuc3Bhd24oVCwhMCl9fWRlKGQxLHtjb25uZWN0ZWRFZGdlczphZChmdW5jdGlvbih5KXtmb3IodmFyIGc9W10seD10aGlzLFQ9MDtUPHgubGVuZ3RoO1QrKyl7dmFyIEw9eFtUXTtpZihMLmlzTm9kZSgpKWZvcih2YXIgTz1MLl9wcml2YXRlLmVkZ2VzLFA9MDtQPE8ubGVuZ3RoO1ArKyl7dmFyICQ9T1tQXTtnLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNvbm5lY3RlZEVkZ2VzIiksY29ubmVjdGVkTm9kZXM6YWQoZnVuY3Rpb24oeSl7Zm9yKHZhciBnPVtdLHg9dGhpcyxUPTA7VDx4Lmxlbmd0aDtUKyspe3ZhciBMPXhbVF07TC5pc0VkZ2UoKSYmKGcucHVzaChMLnNvdXJjZSgpWzBdKSxnLnB1c2goTC50YXJnZXQoKVswXSkpfXJldHVybiB0aGlzLnNwYXduKGcsITApLmZpbHRlcih5KX0sImNvbm5lY3RlZE5vZGVzIikscGFyYWxsZWxFZGdlczphZChQQigpLCJwYXJhbGxlbEVkZ2VzIiksY29kaXJlY3RlZEVkZ2VzOmFkKFBCKHtjb2RpcmVjdGVkOiEwfSksImNvZGlyZWN0ZWRFZGdlcyIpfSk7ZnVuY3Rpb24gUEIoeSl7dmFyIGc9e2NvZGlyZWN0ZWQ6ITF9O3JldHVybiB5PWRlKHt9LGcseSksZnVuY3Rpb24oVCl7Zm9yKHZhciBMPVtdLE89dGhpcy5lZGdlcygpLFA9eSwkPTA7JDxPLmxlbmd0aDskKyspZm9yKHZhciBxPU9bJF0sUz1xLl9wcml2YXRlLFY9Uy5zb3VyY2UsWT1WLl9wcml2YXRlLmRhdGEuaWQscnQ9Uy5kYXRhLnRhcmdldCxvdD1WLl9wcml2YXRlLmVkZ2VzLGh0PTA7aHQ8b3QubGVuZ3RoO2h0Kyspe3ZhciBkdD1vdFtodF0sTHQ9ZHQuX3ByaXZhdGUuZGF0YSxrdD1MdC50YXJnZXQsRHQ9THQuc291cmNlLFB0PWt0PT09cnQmJkR0PT09WSwkdD1ZPT09a3QmJnJ0PT09RHQ7KFAuY29kaXJlY3RlZCYmUHR8fCFQLmNvZGlyZWN0ZWQmJihQdHx8JHQpKSYmTC5wdXNoKGR0KX1yZXR1cm4gdGhpcy5zcGF3bihMLCEwKS5maWx0ZXIoVCl9fWRlKGQxLHtjb21wb25lbnRzOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LmN5KCksTD1ULmNvbGxlY3Rpb24oKSxPPWc9PW51bGw/eC5ub2RlcygpOmcubm9kZXMoKSxQPVtdO2chPW51bGwmJk8uZW1wdHkoKSYmKE89Zy5zb3VyY2VzKCkpO3ZhciAkPWZ1bmN0aW9uKFYsWSl7TC5tZXJnZShWKSxPLnVubWVyZ2UoViksWS5tZXJnZShWKX07aWYoTy5lbXB0eSgpKXJldHVybiB4LnNwYXduKCk7dmFyIHE9ZnVuY3Rpb24oKXt2YXIgVj1ULmNvbGxlY3Rpb24oKTtQLnB1c2goVik7dmFyIFk9T1swXTskKFksVikseC5iZnMoe2RpcmVjdGVkOiExLHJvb3RzOlksdmlzaXQ6ZnVuY3Rpb24ob3Qpe3JldHVybiAkKG90LFYpfX0pLFYuZm9yRWFjaChmdW5jdGlvbihydCl7cnQuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG90KXt4LmhhcyhvdCkmJlYuaGFzKG90LnNvdXJjZSgpKSYmVi5oYXMob3QudGFyZ2V0KCkpJiZWLm1lcmdlKG90KX0pfSl9O2RvIHEoKTt3aGlsZShPLmxlbmd0aD4wKTtyZXR1cm4gUH0sY29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIGc9dGhpc1swXTtyZXR1cm4gZy5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMoZylbMF19fSksZDEuY29tcG9uZW50c09mPWQxLmNvbXBvbmVudHM7dmFyICRmPWZ1bmN0aW9uKGcseCl7dmFyIFQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLEw9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExO2lmKGc9PT12b2lkIDApe3ZsKCJBIGNvbGxlY3Rpb24gbXVzdCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JlIik7cmV0dXJufXZhciBPPW5ldyBHYixQPSExO2lmKCF4KXg9W107ZWxzZSBpZih4Lmxlbmd0aD4wJiZ1dCh4WzBdKSYmIW50KHhbMF0pKXtQPSEwO2Zvcih2YXIgJD1bXSxxPW5ldyBZNSxTPTAsVj14Lmxlbmd0aDtTPFY7UysrKXt2YXIgWT14W1NdO1kuZGF0YT09bnVsbCYmKFkuZGF0YT17fSk7dmFyIHJ0PVkuZGF0YTtpZihydC5pZD09bnVsbClydC5pZD1QVCgpO2Vsc2UgaWYoZy5oYXNFbGVtZW50V2l0aElkKHJ0LmlkKXx8cS5oYXMocnQuaWQpKWNvbnRpbnVlO3ZhciBvdD1uZXcgRlQoZyxZLCExKTskLnB1c2gob3QpLHEuYWRkKHJ0LmlkKX14PSR9dGhpcy5sZW5ndGg9MDtmb3IodmFyIGh0PTAsZHQ9eC5sZW5ndGg7aHQ8ZHQ7aHQrKyl7dmFyIEx0PXhbaHRdWzBdO2lmKEx0IT1udWxsKXt2YXIga3Q9THQuX3ByaXZhdGUuZGF0YS5pZDsoIVR8fCFPLmhhcyhrdCkpJiYoVCYmTy5zZXQoa3Qse2luZGV4OnRoaXMubGVuZ3RoLGVsZTpMdH0pLHRoaXNbdGhpcy5sZW5ndGhdPUx0LHRoaXMubGVuZ3RoKyspfX10aGlzLl9wcml2YXRlPXtlbGVzOnRoaXMsY3k6ZyxnZXQgbWFwKCl7cmV0dXJuIHRoaXMubGF6eU1hcD09bnVsbCYmdGhpcy5yZWJ1aWxkTWFwKCksdGhpcy5sYXp5TWFwfSxzZXQgbWFwKER0KXt0aGlzLmxhenlNYXA9RHR9LHJlYnVpbGRNYXA6ZnVuY3Rpb24oKXtmb3IodmFyIFB0PXRoaXMubGF6eU1hcD1uZXcgR2IsJHQ9dGhpcy5lbGVzLFp0PTA7WnQ8JHQubGVuZ3RoO1p0Kyspe3ZhciBZdD0kdFtadF07UHQuc2V0KFl0LmlkKCkse2luZGV4Olp0LGVsZTpZdH0pfX19LFQmJih0aGlzLl9wcml2YXRlLm1hcD1PKSxQJiYhTCYmdGhpcy5yZXN0b3JlKCl9LGR1PUZULnByb3RvdHlwZT0kZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShBcnJheS5wcm90b3R5cGUpO2R1Lmluc3RhbmNlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImNvbGxlY3Rpb24ifSxkdS5zcGF3bj1mdW5jdGlvbih5LGcpe3JldHVybiBuZXcgJGYodGhpcy5jeSgpLHksZyl9LGR1LnNwYXduU2VsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNwYXduKHRoaXMpfSxkdS5jeT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5fSxkdS5yZW5kZXJlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5LnJlbmRlcmVyKCl9LGR1LmVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXX0sZHUuY29sbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBJdCh0aGlzKT90aGlzOm5ldyAkZih0aGlzLl9wcml2YXRlLmN5LFt0aGlzXSl9LGR1LnVuaXF1ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgJGYodGhpcy5fcHJpdmF0ZS5jeSx0aGlzLCEwKX0sZHUuaGFzRWxlbWVudFdpdGhJZD1mdW5jdGlvbih5KXtyZXR1cm4geT0iIit5LHRoaXMuX3ByaXZhdGUubWFwLmhhcyh5KX0sZHUuZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24oeSl7eT0iIit5O3ZhciBnPXRoaXMuX3ByaXZhdGUuY3kseD10aGlzLl9wcml2YXRlLm1hcC5nZXQoeSk7cmV0dXJuIHg/eC5lbGU6bmV3ICRmKGcpfSxkdS4kaWQ9ZHUuZ2V0RWxlbWVudEJ5SWQsZHUucG9vbEluZGV4PWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fcHJpdmF0ZS5jeSxnPXkuX3ByaXZhdGUuZWxlbWVudHMseD10aGlzWzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIGcuX3ByaXZhdGUubWFwLmdldCh4KS5pbmRleH0sZHUuaW5kZXhPZj1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIHRoaXMuX3ByaXZhdGUubWFwLmdldChnKS5pbmRleH0sZHUuaW5kZXhPZklkPWZ1bmN0aW9uKHkpe3JldHVybiB5PSIiK3ksdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KHkpLmluZGV4fSxkdS5qc29uPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMuZWxlbWVudCgpLHg9dGhpcy5jeSgpO2lmKGc9PW51bGwmJnkpcmV0dXJuIHRoaXM7aWYoZyE9bnVsbCl7dmFyIFQ9Zy5fcHJpdmF0ZTtpZih1dCh5KSl7aWYoeC5zdGFydEJhdGNoKCkseS5kYXRhKXtnLmRhdGEoeS5kYXRhKTt2YXIgTD1ULmRhdGE7aWYoZy5pc0VkZ2UoKSl7dmFyIE89ITEsUD17fSwkPXkuZGF0YS5zb3VyY2UscT15LmRhdGEudGFyZ2V0OyQhPW51bGwmJiQhPUwuc291cmNlJiYoUC5zb3VyY2U9IiIrJCxPPSEwKSxxIT1udWxsJiZxIT1MLnRhcmdldCYmKFAudGFyZ2V0PSIiK3EsTz0hMCksTyYmKGc9Zy5tb3ZlKFApKX1lbHNle3ZhciBTPSJwYXJlbnQiaW4geS5kYXRhLFY9eS5kYXRhLnBhcmVudDtTJiYoViE9bnVsbHx8TC5wYXJlbnQhPW51bGwpJiZWIT1MLnBhcmVudCYmKFY9PT12b2lkIDAmJihWPW51bGwpLFYhPW51bGwmJihWPSIiK1YpLGc9Zy5tb3ZlKHtwYXJlbnQ6Vn0pKX19eS5wb3NpdGlvbiYmZy5wb3NpdGlvbih5LnBvc2l0aW9uKTt2YXIgWT1mdW5jdGlvbihkdCxMdCxrdCl7dmFyIER0PXlbZHRdO0R0IT1udWxsJiZEdCE9PVRbZHRdJiYoRHQ/Z1tMdF0oKTpnW2t0XSgpKX07cmV0dXJuIFkoInJlbW92ZWQiLCJyZW1vdmUiLCJyZXN0b3JlIiksWSgic2VsZWN0ZWQiLCJzZWxlY3QiLCJ1bnNlbGVjdCIpLFkoInNlbGVjdGFibGUiLCJzZWxlY3RpZnkiLCJ1bnNlbGVjdGlmeSIpLFkoImxvY2tlZCIsImxvY2siLCJ1bmxvY2siKSxZKCJncmFiYmFibGUiLCJncmFiaWZ5IiwidW5ncmFiaWZ5IiksWSgicGFubmFibGUiLCJwYW5pZnkiLCJ1bnBhbmlmeSIpLHkuY2xhc3NlcyE9bnVsbCYmZy5jbGFzc2VzKHkuY2xhc3NlcykseC5lbmRCYXRjaCgpLHRoaXN9ZWxzZSBpZih5PT09dm9pZCAwKXt2YXIgcnQ9e2RhdGE6VmIoVC5kYXRhKSxwb3NpdGlvbjpWYihULnBvc2l0aW9uKSxncm91cDpULmdyb3VwLHJlbW92ZWQ6VC5yZW1vdmVkLHNlbGVjdGVkOlQuc2VsZWN0ZWQsc2VsZWN0YWJsZTpULnNlbGVjdGFibGUsbG9ja2VkOlQubG9ja2VkLGdyYWJiYWJsZTpULmdyYWJiYWJsZSxwYW5uYWJsZTpULnBhbm5hYmxlLGNsYXNzZXM6bnVsbH07cnQuY2xhc3Nlcz0iIjt2YXIgb3Q9MDtyZXR1cm4gVC5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oaHQpe3JldHVybiBydC5jbGFzc2VzKz1vdCsrPT09MD9odDoiICIraHR9KSxydH19fSxkdS5qc29ucz1mdW5jdGlvbigpe2Zvcih2YXIgeT1bXSxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciB4PXRoaXNbZ10sVD14Lmpzb24oKTt5LnB1c2goVCl9cmV0dXJuIHl9LGR1LmNsb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMuY3koKSxnPVtdLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIFQ9dGhpc1t4XSxMPVQuanNvbigpLE89bmV3IEZUKHksTCwhMSk7Zy5wdXNoKE8pfXJldHVybiBuZXcgJGYoeSxnKX0sZHUuY29weT1kdS5jbG9uZSxkdS5yZXN0b3JlPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxnPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCx4PXRoaXMsVD14LmN5KCksTD1ULl9wcml2YXRlLE89W10sUD1bXSwkLHE9MCxTPXgubGVuZ3RoO3E8UztxKyspe3ZhciBWPXhbcV07ZyYmIVYucmVtb3ZlZCgpfHwoVi5pc05vZGUoKT9PLnB1c2goVik6UC5wdXNoKFYpKX0kPU8uY29uY2F0KFApO3ZhciBZLHJ0PWZ1bmN0aW9uKCl7JC5zcGxpY2UoWSwxKSxZLS19O2ZvcihZPTA7WTwkLmxlbmd0aDtZKyspe3ZhciBvdD0kW1ldLGh0PW90Ll9wcml2YXRlLGR0PWh0LmRhdGE7aWYob3QuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLCEoIWcmJiFodC5yZW1vdmVkKSl7aWYoZHQuaWQ9PT12b2lkIDApZHQuaWQ9UFQoKTtlbHNlIGlmKFgoZHQuaWQpKWR0LmlkPSIiK2R0LmlkO2Vsc2UgaWYoWihkdC5pZCl8fCFtdChkdC5pZCkpe3ZsKCJDYW4gbm90IGNyZWF0ZSBlbGVtZW50IHdpdGggaW52YWxpZCBzdHJpbmcgSUQgYCIrZHQuaWQrImAiKSxydCgpO2NvbnRpbnVlfWVsc2UgaWYoVC5oYXNFbGVtZW50V2l0aElkKGR0LmlkKSl7dmwoIkNhbiBub3QgY3JlYXRlIHNlY29uZCBlbGVtZW50IHdpdGggSUQgYCIrZHQuaWQrImAiKSxydCgpO2NvbnRpbnVlfX12YXIgTHQ9ZHQuaWQ7aWYob3QuaXNOb2RlKCkpe3ZhciBrdD1odC5wb3NpdGlvbjtrdC54PT1udWxsJiYoa3QueD0wKSxrdC55PT1udWxsJiYoa3QueT0wKX1pZihvdC5pc0VkZ2UoKSl7Zm9yKHZhciBEdD1vdCxQdD1bInNvdXJjZSIsInRhcmdldCJdLCR0PVB0Lmxlbmd0aCxadD0hMSxZdD0wO1l0PCR0O1l0Kyspe3ZhciBxdD1QdFtZdF0sbmU9ZHRbcXRdO1gobmUpJiYobmU9ZHRbcXRdPSIiK2R0W3F0XSksbmU9PW51bGx8fG5lPT09IiI/KHZsKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK0x0KyJgIHdpdGggdW5zcGVjaWZpZWQgIitxdCksWnQ9ITApOlQuaGFzRWxlbWVudFdpdGhJZChuZSl8fCh2bCgiQ2FuIG5vdCBjcmVhdGUgZWRnZSBgIitMdCsiYCB3aXRoIG5vbmV4aXN0YW50ICIrcXQrIiBgIituZSsiYCIpLFp0PSEwKX1pZihadCl7cnQoKTtjb250aW51ZX12YXIgR3Q9VC5nZXRFbGVtZW50QnlJZChkdC5zb3VyY2UpLGdlPVQuZ2V0RWxlbWVudEJ5SWQoZHQudGFyZ2V0KTtHdC5zYW1lKGdlKT9HdC5fcHJpdmF0ZS5lZGdlcy5wdXNoKER0KTooR3QuX3ByaXZhdGUuZWRnZXMucHVzaChEdCksZ2UuX3ByaXZhdGUuZWRnZXMucHVzaChEdCkpLER0Ll9wcml2YXRlLnNvdXJjZT1HdCxEdC5fcHJpdmF0ZS50YXJnZXQ9Z2V9aHQubWFwPW5ldyBHYixodC5tYXAuc2V0KEx0LHtlbGU6b3QsaW5kZXg6MH0pLGh0LnJlbW92ZWQ9ITEsZyYmVC5hZGRUb1Bvb2wob3QpfWZvcih2YXIgYmU9MDtiZTxPLmxlbmd0aDtiZSsrKXt2YXIgaWU9T1tiZV0sRmU9aWUuX3ByaXZhdGUuZGF0YTtYKEZlLnBhcmVudCkmJihGZS5wYXJlbnQ9IiIrRmUucGFyZW50KTt2YXIgd2U9RmUucGFyZW50LGJuPXdlIT1udWxsO2lmKGJufHxpZS5fcHJpdmF0ZS5wYXJlbnQpe3ZhciB6ZT1pZS5fcHJpdmF0ZS5wYXJlbnQ/VC5jb2xsZWN0aW9uKCkubWVyZ2UoaWUuX3ByaXZhdGUucGFyZW50KTpULmdldEVsZW1lbnRCeUlkKHdlKTtpZih6ZS5lbXB0eSgpKUZlLnBhcmVudD12b2lkIDA7ZWxzZSBpZih6ZVswXS5yZW1vdmVkKCkpU2MoIk5vZGUgYWRkZWQgd2l0aCBtaXNzaW5nIHBhcmVudCwgcmVmZXJlbmNlIHRvIHBhcmVudCByZW1vdmVkIiksRmUucGFyZW50PXZvaWQgMCxpZS5fcHJpdmF0ZS5wYXJlbnQ9bnVsbDtlbHNle2Zvcih2YXIgR2U9ITEsRW49emU7IUVuLmVtcHR5KCk7KXtpZihpZS5zYW1lKEVuKSl7R2U9ITAsRmUucGFyZW50PXZvaWQgMDticmVha31Fbj1Fbi5wYXJlbnQoKX1HZXx8KHplWzBdLl9wcml2YXRlLmNoaWxkcmVuLnB1c2goaWUpLGllLl9wcml2YXRlLnBhcmVudD16ZVswXSxMLmhhc0NvbXBvdW5kTm9kZXM9ITApfX19aWYoJC5sZW5ndGg+MCl7Zm9yKHZhciBJbj0kLmxlbmd0aD09PXgubGVuZ3RoP3g6bmV3ICRmKFQsJCksWW49MDtZbjxJbi5sZW5ndGg7WW4rKyl7dmFyIFNuPUluW1luXTtTbi5pc05vZGUoKXx8KFNuLnBhcmFsbGVsRWRnZXMoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksU24uc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLFNuLnRhcmdldCgpLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKSl9dmFyIFduO0wuaGFzQ29tcG91bmROb2Rlcz9Xbj1ULmNvbGxlY3Rpb24oKS5tZXJnZShJbikubWVyZ2UoSW4uY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UoSW4ucGFyZW50KCkpOlduPUluLFduLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLnVwZGF0ZVN0eWxlKHkpLHk/SW4uZW1pdEFuZE5vdGlmeSgiYWRkIik6ZyYmSW4uZW1pdCgiYWRkIil9cmV0dXJuIHh9LGR1LnJlbW92ZWQ9ZnVuY3Rpb24oKXt2YXIgeT10aGlzWzBdO3JldHVybiB5JiZ5Ll9wcml2YXRlLnJlbW92ZWR9LGR1Lmluc2lkZT1mdW5jdGlvbigpe3ZhciB5PXRoaXNbMF07cmV0dXJuIHkmJiF5Ll9wcml2YXRlLnJlbW92ZWR9LGR1LnJlbW92ZT1mdW5jdGlvbigpe3ZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxnPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCx4PXRoaXMsVD1bXSxMPXt9LE89eC5fcHJpdmF0ZS5jeTtmdW5jdGlvbiBQKHdlKXtmb3IodmFyIGJuPXdlLl9wcml2YXRlLmVkZ2VzLHplPTA7emU8Ym4ubGVuZ3RoO3plKyspcShiblt6ZV0pfWZ1bmN0aW9uICQod2Upe2Zvcih2YXIgYm49d2UuX3ByaXZhdGUuY2hpbGRyZW4semU9MDt6ZTxibi5sZW5ndGg7emUrKylxKGJuW3plXSl9ZnVuY3Rpb24gcSh3ZSl7dmFyIGJuPUxbd2UuaWQoKV07ZyYmd2UucmVtb3ZlZCgpfHxibnx8KExbd2UuaWQoKV09ITAsd2UuaXNOb2RlKCk/KFQucHVzaCh3ZSksUCh3ZSksJCh3ZSkpOlQudW5zaGlmdCh3ZSkpfWZvcih2YXIgUz0wLFY9eC5sZW5ndGg7UzxWO1MrKyl7dmFyIFk9eFtTXTtxKFkpfWZ1bmN0aW9uIHJ0KHdlLGJuKXt2YXIgemU9d2UuX3ByaXZhdGUuZWRnZXM7dm0oemUsYm4pLHdlLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1mdW5jdGlvbiBvdCh3ZSl7d2UuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpfXZhciBodD1bXTtodC5pZHM9e307ZnVuY3Rpb24gZHQod2UsYm4pe2JuPWJuWzBdLHdlPXdlWzBdO3ZhciB6ZT13ZS5fcHJpdmF0ZS5jaGlsZHJlbixHZT13ZS5pZCgpO3ZtKHplLGJuKSxibi5fcHJpdmF0ZS5wYXJlbnQ9bnVsbCxodC5pZHNbR2VdfHwoaHQuaWRzW0dlXT0hMCxodC5wdXNoKHdlKSl9eC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxnJiZPLnJlbW92ZUZyb21Qb29sKFQpO2Zvcih2YXIgTHQ9MDtMdDxULmxlbmd0aDtMdCsrKXt2YXIga3Q9VFtMdF07aWYoa3QuaXNFZGdlKCkpe3ZhciBEdD1rdC5zb3VyY2UoKVswXSxQdD1rdC50YXJnZXQoKVswXTtydChEdCxrdCkscnQoUHQsa3QpO2Zvcih2YXIgJHQ9a3QucGFyYWxsZWxFZGdlcygpLFp0PTA7WnQ8JHQubGVuZ3RoO1p0Kyspe3ZhciBZdD0kdFtadF07b3QoWXQpLFl0LmlzQnVuZGxlZEJlemllcigpJiZZdC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19ZWxzZXt2YXIgcXQ9a3QucGFyZW50KCk7cXQubGVuZ3RoIT09MCYmZHQocXQsa3QpfWcmJihrdC5fcHJpdmF0ZS5yZW1vdmVkPSEwKX12YXIgbmU9Ty5fcHJpdmF0ZS5lbGVtZW50cztPLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITE7Zm9yKHZhciBHdD0wO0d0PG5lLmxlbmd0aDtHdCsrKXt2YXIgZ2U9bmVbR3RdO2lmKGdlLmlzUGFyZW50KCkpe08uX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlcz0hMDticmVha319dmFyIGJlPW5ldyAkZih0aGlzLmN5KCksVCk7YmUuc2l6ZSgpPjAmJih5P2JlLmVtaXRBbmROb3RpZnkoInJlbW92ZSIpOmcmJmJlLmVtaXQoInJlbW92ZSIpKTtmb3IodmFyIGllPTA7aWU8aHQubGVuZ3RoO2llKyspe3ZhciBGZT1odFtpZV07KCFnfHwhRmUucmVtb3ZlZCgpKSYmRmUudXBkYXRlU3R5bGUoKX1yZXR1cm4gYmV9LGR1Lm1vdmU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5fcHJpdmF0ZS5jeSx4PXRoaXMsVD0hMSxMPSExLE89ZnVuY3Rpb24oaHQpe3JldHVybiBodD09bnVsbD9odDoiIitodH07aWYoeS5zb3VyY2UhPT12b2lkIDB8fHkudGFyZ2V0IT09dm9pZCAwKXt2YXIgUD1PKHkuc291cmNlKSwkPU8oeS50YXJnZXQpLHE9UCE9bnVsbCYmZy5oYXNFbGVtZW50V2l0aElkKFApLFM9JCE9bnVsbCYmZy5oYXNFbGVtZW50V2l0aElkKCQpOyhxfHxTKSYmKGcuYmF0Y2goZnVuY3Rpb24oKXt4LnJlbW92ZShULEwpLHguZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgb3Q9MDtvdDx4Lmxlbmd0aDtvdCsrKXt2YXIgaHQ9eFtvdF0sZHQ9aHQuX3ByaXZhdGUuZGF0YTtodC5pc0VkZ2UoKSYmKHEmJihkdC5zb3VyY2U9UCksUyYmKGR0LnRhcmdldD0kKSl9eC5yZXN0b3JlKFQsTCl9KSx4LmVtaXRBbmROb3RpZnkoIm1vdmUiKSl9ZWxzZSBpZih5LnBhcmVudCE9PXZvaWQgMCl7dmFyIFY9Tyh5LnBhcmVudCksWT1WPT09bnVsbHx8Zy5oYXNFbGVtZW50V2l0aElkKFYpO2lmKFkpe3ZhciBydD1WPT09bnVsbD92b2lkIDA6VjtnLmJhdGNoKGZ1bmN0aW9uKCl7dmFyIG90PXgucmVtb3ZlKFQsTCk7b3QuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgaHQ9MDtodDx4Lmxlbmd0aDtodCsrKXt2YXIgZHQ9eFtodF0sTHQ9ZHQuX3ByaXZhdGUuZGF0YTtkdC5pc05vZGUoKSYmKEx0LnBhcmVudD1ydCl9b3QucmVzdG9yZShULEwpfSkseC5lbWl0QW5kTm90aWZ5KCJtb3ZlIil9fXJldHVybiB0aGlzfSxbUE4selosUVQseHAsYXgsckosSlQsYkosVEIsQ0IseEosaUMsc0MsamYsX20sZDFdLmZvckVhY2goZnVuY3Rpb24oeSl7ZGUoZHUseSl9KTt2YXIgQUo9e2FkZDpmdW5jdGlvbihnKXt2YXIgeCxUPXRoaXM7aWYoVHQoZykpe3ZhciBMPWc7aWYoTC5fcHJpdmF0ZS5jeT09PVQpeD1MLnJlc3RvcmUoKTtlbHNle2Zvcih2YXIgTz1bXSxQPTA7UDxMLmxlbmd0aDtQKyspe3ZhciAkPUxbUF07Ty5wdXNoKCQuanNvbigpKX14PW5ldyAkZihULE8pfX1lbHNlIGlmKGZ0KGcpKXt2YXIgcT1nO3g9bmV3ICRmKFQscSl9ZWxzZSBpZih1dChnKSYmKGZ0KGcubm9kZXMpfHxmdChnLmVkZ2VzKSkpe2Zvcih2YXIgUz1nLFY9W10sWT1bIm5vZGVzIiwiZWRnZXMiXSxydD0wLG90PVkubGVuZ3RoO3J0PG90O3J0Kyspe3ZhciBodD1ZW3J0XSxkdD1TW2h0XTtpZihmdChkdCkpZm9yKHZhciBMdD0wLGt0PWR0Lmxlbmd0aDtMdDxrdDtMdCsrKXt2YXIgRHQ9ZGUoe2dyb3VwOmh0fSxkdFtMdF0pO1YucHVzaChEdCl9fXg9bmV3ICRmKFQsVil9ZWxzZXt2YXIgUHQ9Zzt4PW5ldyBGVChULFB0KS5jb2xsZWN0aW9uKCl9cmV0dXJuIHh9LHJlbW92ZTpmdW5jdGlvbihnKXtpZighVHQoZykpe2lmKG10KGcpKXt2YXIgeD1nO2c9dGhpcy4kKHgpfX1yZXR1cm4gZy5yZW1vdmUoKX19Oy8qISBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi9mdW5jdGlvbiBMSih5LGcseCxUKXt2YXIgTD00LE89LjAwMSxQPTFlLTcsJD0xMCxxPTExLFM9MS8ocS0xKSxWPXR5cGVvZiBGbG9hdDMyQXJyYXk8InUiO2lmKGFyZ3VtZW50cy5sZW5ndGghPT00KXJldHVybiExO2Zvcih2YXIgWT0wO1k8NDsrK1kpaWYodHlwZW9mIGFyZ3VtZW50c1tZXSE9Im51bWJlciJ8fGlzTmFOKGFyZ3VtZW50c1tZXSl8fCFpc0Zpbml0ZShhcmd1bWVudHNbWV0pKXJldHVybiExO3k9TWF0aC5taW4oeSwxKSx4PU1hdGgubWluKHgsMSkseT1NYXRoLm1heCh5LDApLHg9TWF0aC5tYXgoeCwwKTt2YXIgcnQ9Vj9uZXcgRmxvYXQzMkFycmF5KHEpOm5ldyBBcnJheShxKTtmdW5jdGlvbiBvdChnZSxiZSl7cmV0dXJuIDEtMypiZSszKmdlfWZ1bmN0aW9uIGh0KGdlLGJlKXtyZXR1cm4gMypiZS02KmdlfWZ1bmN0aW9uIGR0KGdlKXtyZXR1cm4gMypnZX1mdW5jdGlvbiBMdChnZSxiZSxpZSl7cmV0dXJuKChvdChiZSxpZSkqZ2UraHQoYmUsaWUpKSpnZStkdChiZSkpKmdlfWZ1bmN0aW9uIGt0KGdlLGJlLGllKXtyZXR1cm4gMypvdChiZSxpZSkqZ2UqZ2UrMipodChiZSxpZSkqZ2UrZHQoYmUpfWZ1bmN0aW9uIER0KGdlLGJlKXtmb3IodmFyIGllPTA7aWU8TDsrK2llKXt2YXIgRmU9a3QoYmUseSx4KTtpZihGZT09PTApcmV0dXJuIGJlO3ZhciB3ZT1MdChiZSx5LHgpLWdlO2JlLT13ZS9GZX1yZXR1cm4gYmV9ZnVuY3Rpb24gUHQoKXtmb3IodmFyIGdlPTA7Z2U8cTsrK2dlKXJ0W2dlXT1MdChnZSpTLHkseCl9ZnVuY3Rpb24gJHQoZ2UsYmUsaWUpe3ZhciBGZSx3ZSxibj0wO2RvIHdlPWJlKyhpZS1iZSkvMixGZT1MdCh3ZSx5LHgpLWdlLEZlPjA/aWU9d2U6YmU9d2U7d2hpbGUoTWF0aC5hYnMoRmUpPlAmJisrYm48JCk7cmV0dXJuIHdlfWZ1bmN0aW9uIFp0KGdlKXtmb3IodmFyIGJlPTAsaWU9MSxGZT1xLTE7aWUhPT1GZSYmcnRbaWVdPD1nZTsrK2llKWJlKz1TOy0taWU7dmFyIHdlPShnZS1ydFtpZV0pLyhydFtpZSsxXS1ydFtpZV0pLGJuPWJlK3dlKlMsemU9a3QoYm4seSx4KTtyZXR1cm4gemU+PU8/RHQoZ2UsYm4pOnplPT09MD9ibjokdChnZSxiZSxiZStTKX12YXIgWXQ9ITE7ZnVuY3Rpb24gcXQoKXtZdD0hMCwoeSE9PWd8fHghPT1UKSYmUHQoKX12YXIgbmU9ZnVuY3Rpb24oYmUpe3JldHVybiBZdHx8cXQoKSx5PT09ZyYmeD09PVQ/YmU6YmU9PT0wPzA6YmU9PT0xPzE6THQoWnQoYmUpLGcsVCl9O25lLmdldENvbnRyb2xQb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm5be3g6eSx5Omd9LHt4LHk6VH1dfTt2YXIgR3Q9ImdlbmVyYXRlQmV6aWVyKCIrW3ksZyx4LFRdKyIpIjtyZXR1cm4gbmUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gR3R9LG5lfS8qISBSdW5nZS1LdXR0YSBzcHJpbmcgcGh5c2ljcyBmdW5jdGlvbiBnZW5lcmF0b3IuIEFkYXB0ZWQgZnJvbSBGcmFtZXIuanMsIGNvcHlyaWdodCBLb2VuIEJvay4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi92YXIgTUo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KFQpe3JldHVybi1ULnRlbnNpb24qVC54LVQuZnJpY3Rpb24qVC52fWZ1bmN0aW9uIGcoVCxMLE8pe3ZhciBQPXt4OlQueCtPLmR4KkwsdjpULnYrTy5kdipMLHRlbnNpb246VC50ZW5zaW9uLGZyaWN0aW9uOlQuZnJpY3Rpb259O3JldHVybntkeDpQLnYsZHY6eShQKX19ZnVuY3Rpb24geChULEwpe3ZhciBPPXtkeDpULnYsZHY6eShUKX0sUD1nKFQsTCouNSxPKSwkPWcoVCxMKi41LFApLHE9ZyhULEwsJCksUz0xLzYqKE8uZHgrMiooUC5keCskLmR4KStxLmR4KSxWPTEvNiooTy5kdisyKihQLmR2KyQuZHYpK3EuZHYpO3JldHVybiBULng9VC54K1MqTCxULnY9VC52K1YqTCxUfXJldHVybiBmdW5jdGlvbiBUKEwsTyxQKXt2YXIgJD17eDotMSx2OjAsdGVuc2lvbjpudWxsLGZyaWN0aW9uOm51bGx9LHE9WzBdLFM9MCxWPTEvMWU0LFk9MTYvMWUzLHJ0LG90LGh0O2ZvcihMPXBhcnNlRmxvYXQoTCl8fDUwMCxPPXBhcnNlRmxvYXQoTyl8fDIwLFA9UHx8bnVsbCwkLnRlbnNpb249TCwkLmZyaWN0aW9uPU8scnQ9UCE9PW51bGwscnQ/KFM9VChMLE8pLG90PVMvUCpZKTpvdD1ZO2h0PXgoaHR8fCQsb3QpLHEucHVzaCgxK2h0LngpLFMrPTE2LE1hdGguYWJzKGh0LngpPlYmJk1hdGguYWJzKGh0LnYpPlY7KTtyZXR1cm4gcnQ/ZnVuY3Rpb24oZHQpe3JldHVybiBxW2R0KihxLmxlbmd0aC0xKXwwXX06U319KCksZ3U9ZnVuY3Rpb24oZyx4LFQsTCl7dmFyIE89TEooZyx4LFQsTCk7cmV0dXJuIGZ1bmN0aW9uKFAsJCxxKXtyZXR1cm4gUCsoJC1QKSpPKHEpfX0sY0M9e2xpbmVhcjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIGcrKHgtZykqVH0sZWFzZTpndSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjpndSguNDIsMCwxLDEpLCJlYXNlLW91dCI6Z3UoMCwwLC41OCwxKSwiZWFzZS1pbi1vdXQiOmd1KC40MiwwLC41OCwxKSwiZWFzZS1pbi1zaW5lIjpndSguNDcsMCwuNzQ1LC43MTUpLCJlYXNlLW91dC1zaW5lIjpndSguMzksLjU3NSwuNTY1LDEpLCJlYXNlLWluLW91dC1zaW5lIjpndSguNDQ1LC4wNSwuNTUsLjk1KSwiZWFzZS1pbi1xdWFkIjpndSguNTUsLjA4NSwuNjgsLjUzKSwiZWFzZS1vdXQtcXVhZCI6Z3UoLjI1LC40NiwuNDUsLjk0KSwiZWFzZS1pbi1vdXQtcXVhZCI6Z3UoLjQ1NSwuMDMsLjUxNSwuOTU1KSwiZWFzZS1pbi1jdWJpYyI6Z3UoLjU1LC4wNTUsLjY3NSwuMTkpLCJlYXNlLW91dC1jdWJpYyI6Z3UoLjIxNSwuNjEsLjM1NSwxKSwiZWFzZS1pbi1vdXQtY3ViaWMiOmd1KC42NDUsLjA0NSwuMzU1LDEpLCJlYXNlLWluLXF1YXJ0IjpndSguODk1LC4wMywuNjg1LC4yMiksImVhc2Utb3V0LXF1YXJ0IjpndSguMTY1LC44NCwuNDQsMSksImVhc2UtaW4tb3V0LXF1YXJ0IjpndSguNzcsMCwuMTc1LDEpLCJlYXNlLWluLXF1aW50IjpndSguNzU1LC4wNSwuODU1LC4wNiksImVhc2Utb3V0LXF1aW50IjpndSguMjMsMSwuMzIsMSksImVhc2UtaW4tb3V0LXF1aW50IjpndSguODYsMCwuMDcsMSksImVhc2UtaW4tZXhwbyI6Z3UoLjk1LC4wNSwuNzk1LC4wMzUpLCJlYXNlLW91dC1leHBvIjpndSguMTksMSwuMjIsMSksImVhc2UtaW4tb3V0LWV4cG8iOmd1KDEsMCwwLDEpLCJlYXNlLWluLWNpcmMiOmd1KC42LC4wNCwuOTgsLjMzNSksImVhc2Utb3V0LWNpcmMiOmd1KC4wNzUsLjgyLC4xNjUsMSksImVhc2UtaW4tb3V0LWNpcmMiOmd1KC43ODUsLjEzNSwuMTUsLjg2KSxzcHJpbmc6ZnVuY3Rpb24oZyx4LFQpe2lmKFQ9PT0wKXJldHVybiBjQy5saW5lYXI7dmFyIEw9TUooZyx4LFQpO3JldHVybiBmdW5jdGlvbihPLFAsJCl7cmV0dXJuIE8rKFAtTykqTCgkKX19LCJjdWJpYy1iZXppZXIiOmd1fTtmdW5jdGlvbiBGQih5LGcseCxULEwpe2lmKFQ9PT0xfHxnPT09eClyZXR1cm4geDt2YXIgTz1MKGcseCxUKTtyZXR1cm4geT09bnVsbHx8KCh5LnJvdW5kVmFsdWV8fHkuY29sb3IpJiYoTz1NYXRoLnJvdW5kKE8pKSx5Lm1pbiE9PXZvaWQgMCYmKE89TWF0aC5tYXgoTyx5Lm1pbikpLHkubWF4IT09dm9pZCAwJiYoTz1NYXRoLm1pbihPLHkubWF4KSkpLE99ZnVuY3Rpb24gTkIoeSxnKXtyZXR1cm4geS5wZlZhbHVlIT1udWxsfHx5LnZhbHVlIT1udWxsP3kucGZWYWx1ZSE9bnVsbCYmKGc9PW51bGx8fGcudHlwZS51bml0cyE9PSIlIik/eS5wZlZhbHVlOnkudmFsdWU6eX1mdW5jdGlvbiBmeCh5LGcseCxULEwpe3ZhciBPPUwhPW51bGw/TC50eXBlOm51bGw7eDwwP3g9MDp4PjEmJih4PTEpO3ZhciBQPU5CKHksTCksJD1OQihnLEwpO2lmKFgoUCkmJlgoJCkpcmV0dXJuIEZCKE8sUCwkLHgsVCk7aWYoZnQoUCkmJmZ0KCQpKXtmb3IodmFyIHE9W10sUz0wO1M8JC5sZW5ndGg7UysrKXt2YXIgVj1QW1NdLFk9JFtTXTtpZihWIT1udWxsJiZZIT1udWxsKXt2YXIgcnQ9RkIoTyxWLFkseCxUKTtxLnB1c2gocnQpfWVsc2UgcS5wdXNoKFkpfXJldHVybiBxfX1mdW5jdGlvbiBESih5LGcseCxUKXt2YXIgTD0hVCxPPXkuX3ByaXZhdGUsUD1nLl9wcml2YXRlLCQ9UC5lYXNpbmcscT1QLnN0YXJ0VGltZSxTPVQ/eTp5LmN5KCksVj1TLnN0eWxlKCk7aWYoIVAuZWFzaW5nSW1wbClpZigkPT1udWxsKVAuZWFzaW5nSW1wbD1jQy5saW5lYXI7ZWxzZXt2YXIgWTtpZihtdCgkKSl7dmFyIHJ0PVYucGFyc2UoInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIiwkKTtZPXJ0LnZhbHVlfWVsc2UgWT0kO3ZhciBvdCxodDttdChZKT8ob3Q9WSxodD1bXSk6KG90PVlbMV0saHQ9WS5zbGljZSgyKS5tYXAoZnVuY3Rpb24oSW4pe3JldHVybitJbn0pKSxodC5sZW5ndGg+MD8ob3Q9PT0ic3ByaW5nIiYmaHQucHVzaChQLmR1cmF0aW9uKSxQLmVhc2luZ0ltcGw9Y0Nbb3RdLmFwcGx5KG51bGwsaHQpKTpQLmVhc2luZ0ltcGw9Y0Nbb3RdfXZhciBkdD1QLmVhc2luZ0ltcGwsTHQ7aWYoUC5kdXJhdGlvbj09PTA/THQ9MTpMdD0oeC1xKS9QLmR1cmF0aW9uLFAuYXBwbHlpbmcmJihMdD1QLnByb2dyZXNzKSxMdDwwP0x0PTA6THQ+MSYmKEx0PTEpLFAuZGVsYXk9PW51bGwpe3ZhciBrdD1QLnN0YXJ0UG9zaXRpb24sRHQ9UC5wb3NpdGlvbjtpZihEdCYmTCYmIXkubG9ja2VkKCkpe3ZhciBQdD17fTskayhrdC54LER0LngpJiYoUHQueD1meChrdC54LER0LngsTHQsZHQpKSwkayhrdC55LER0LnkpJiYoUHQueT1meChrdC55LER0LnksTHQsZHQpKSx5LnBvc2l0aW9uKFB0KX12YXIgJHQ9UC5zdGFydFBhbixadD1QLnBhbixZdD1PLnBhbixxdD1adCE9bnVsbCYmVDtxdCYmKCRrKCR0LngsWnQueCkmJihZdC54PWZ4KCR0LngsWnQueCxMdCxkdCkpLCRrKCR0LnksWnQueSkmJihZdC55PWZ4KCR0LnksWnQueSxMdCxkdCkpLHkuZW1pdCgicGFuIikpO3ZhciBuZT1QLnN0YXJ0Wm9vbSxHdD1QLnpvb20sZ2U9R3QhPW51bGwmJlQ7Z2UmJigkayhuZSxHdCkmJihPLnpvb209X2soTy5taW5ab29tLGZ4KG5lLEd0LEx0LGR0KSxPLm1heFpvb20pKSx5LmVtaXQoInpvb20iKSksKHF0fHxnZSkmJnkuZW1pdCgidmlld3BvcnQiKTt2YXIgYmU9UC5zdHlsZTtpZihiZSYmYmUubGVuZ3RoPjAmJkwpe2Zvcih2YXIgaWU9MDtpZTxiZS5sZW5ndGg7aWUrKyl7dmFyIEZlPWJlW2llXSx3ZT1GZS5uYW1lLGJuPUZlLHplPVAuc3RhcnRTdHlsZVt3ZV0sR2U9Vi5wcm9wZXJ0aWVzW3plLm5hbWVdLEVuPWZ4KHplLGJuLEx0LGR0LEdlKTtWLm92ZXJyaWRlQnlwYXNzKHksd2UsRW4pfXkuZW1pdCgic3R5bGUiKX19cmV0dXJuIFAucHJvZ3Jlc3M9THQsTHR9ZnVuY3Rpb24gJGsoeSxnKXtyZXR1cm4geT09bnVsbHx8Zz09bnVsbD8hMTpYKHkpJiZYKGcpPyEwOiEhKHkmJmcpfWZ1bmN0aW9uIElKKHksZyx4LFQpe3ZhciBMPWcuX3ByaXZhdGU7TC5zdGFydGVkPSEwLEwuc3RhcnRUaW1lPXgtTC5wcm9ncmVzcypMLmR1cmF0aW9ufWZ1bmN0aW9uIEJCKHksZyl7dmFyIHg9Zy5fcHJpdmF0ZS5hbmlFbGVzLFQ9W107ZnVuY3Rpb24gTChWLFkpe3ZhciBydD1WLl9wcml2YXRlLG90PXJ0LmFuaW1hdGlvbi5jdXJyZW50LGh0PXJ0LmFuaW1hdGlvbi5xdWV1ZSxkdD0hMTtpZihvdC5sZW5ndGg9PT0wKXt2YXIgTHQ9aHQuc2hpZnQoKTtMdCYmb3QucHVzaChMdCl9Zm9yKHZhciBrdD1mdW5jdGlvbihZdCl7Zm9yKHZhciBxdD1ZdC5sZW5ndGgtMTtxdD49MDtxdC0tKXt2YXIgbmU9WXRbcXRdO25lKCl9WXQuc3BsaWNlKDAsWXQubGVuZ3RoKX0sRHQ9b3QubGVuZ3RoLTE7RHQ+PTA7RHQtLSl7dmFyIFB0PW90W0R0XSwkdD1QdC5fcHJpdmF0ZTtpZigkdC5zdG9wcGVkKXtvdC5zcGxpY2UoRHQsMSksJHQuaG9va2VkPSExLCR0LnBsYXlpbmc9ITEsJHQuc3RhcnRlZD0hMSxrdCgkdC5mcmFtZXMpO2NvbnRpbnVlfSEkdC5wbGF5aW5nJiYhJHQuYXBwbHlpbmd8fCgkdC5wbGF5aW5nJiYkdC5hcHBseWluZyYmKCR0LmFwcGx5aW5nPSExKSwkdC5zdGFydGVkfHxJSihWLFB0LHkpLERKKFYsUHQseSxZKSwkdC5hcHBseWluZyYmKCR0LmFwcGx5aW5nPSExKSxrdCgkdC5mcmFtZXMpLCR0LnN0ZXAhPW51bGwmJiR0LnN0ZXAoeSksUHQuY29tcGxldGVkKCkmJihvdC5zcGxpY2UoRHQsMSksJHQuaG9va2VkPSExLCR0LnBsYXlpbmc9ITEsJHQuc3RhcnRlZD0hMSxrdCgkdC5jb21wbGV0ZXMpKSxkdD0hMCl9cmV0dXJuIVkmJm90Lmxlbmd0aD09PTAmJmh0Lmxlbmd0aD09PTAmJlQucHVzaChWKSxkdH1mb3IodmFyIE89ITEsUD0wO1A8eC5sZW5ndGg7UCsrKXt2YXIgJD14W1BdLHE9TCgkKTtPPU98fHF9dmFyIFM9TChnLCEwKTsoT3x8UykmJih4Lmxlbmd0aD4wP2cubm90aWZ5KCJkcmF3Iix4KTpnLm5vdGlmeSgiZHJhdyIpKSx4LnVubWVyZ2UoVCksZy5lbWl0KCJzdGVwIil9dmFyIE9KPXthbmltYXRlOkFjLmFuaW1hdGUoKSxhbmltYXRpb246QWMuYW5pbWF0aW9uKCksYW5pbWF0ZWQ6QWMuYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOkFjLmNsZWFyUXVldWUoKSxkZWxheTpBYy5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOkFjLmRlbGF5QW5pbWF0aW9uKCksc3RvcDpBYy5zdG9wKCksYWRkVG9BbmltYXRpb25Qb29sOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXM7eC5zdHlsZUVuYWJsZWQoKSYmeC5fcHJpdmF0ZS5hbmlFbGVzLm1lcmdlKGcpfSxzdG9wQW5pbWF0aW9uTG9vcDpmdW5jdGlvbigpe3RoaXMuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmc9ITF9LHN0YXJ0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbigpe3ZhciBnPXRoaXM7aWYoZy5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZz0hMCwhZy5zdHlsZUVuYWJsZWQoKSlyZXR1cm47ZnVuY3Rpb24geCgpe2cuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmcmJkJmKGZ1bmN0aW9uKE8pe0JCKE8sZykseCgpfSl9dmFyIFQ9Zy5yZW5kZXJlcigpO1QmJlQuYmVmb3JlUmVuZGVyP1QuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKE8sUCl7QkIoUCxnKX0sVC5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmFuaW1hdGlvbnMpOngoKX19LFBKPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKGcseCl7cmV0dXJuIGc9PW51bGx8fHg9PW51bGw/Zz09bnVsbCYmeD09bnVsbDpnLnNhbWVUZXh0KHgpfSxldmVudE1hdGNoZXM6ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPXgucXVhbGlmaWVyO3JldHVybiBMIT1udWxsP2chPT1ULnRhcmdldCYmbnQoVC50YXJnZXQpJiZMLm1hdGNoZXMoVC50YXJnZXQpOiEwfSxhZGRFdmVudEZpZWxkczpmdW5jdGlvbihnLHgpe3guY3k9Zyx4LnRhcmdldD1nfSxjYWxsYmFja0NvbnRleHQ6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB4LnF1YWxpZmllciE9bnVsbD9ULnRhcmdldDpnfX0sdUM9ZnVuY3Rpb24oZyl7cmV0dXJuIG10KGcpP25ldyBFbShnKTpnfSxSQj17Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGcuZW1pdHRlcnx8KGcuZW1pdHRlcj1uZXcgbkMoUEosdGhpcykpLHRoaXN9LGVtaXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSxvbjpmdW5jdGlvbihnLHgsVCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uKGcsdUMoeCksVCksdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihnLHVDKHgpLFQpLHRoaXN9LHJlbW92ZUFsbExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSxvbmU6ZnVuY3Rpb24oZyx4LFQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUoZyx1Qyh4KSxUKSx0aGlzfSxvbmNlOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKGcsdUMoeCksVCksdGhpc30sZW1pdDpmdW5jdGlvbihnLHgpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KGcseCksdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihnLHgpe3JldHVybiB0aGlzLmVtaXQoZyksdGhpcy5ub3RpZnkoZyx4KSx0aGlzfX07QWMuZXZlbnRBbGlhc2VzT24oUkIpO3ZhciBVTD17cG5nOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIGc9Z3x8e30seC5wbmcoZyl9LGpwZzpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBnPWd8fHt9LGcuYmc9Zy5iZ3x8IiNmZmYiLHguanBnKGcpfX07VUwuanBlZz1VTC5qcGc7dmFyIGxDPXtsYXlvdXQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcztpZihnPT1udWxsKXt2bCgiTGF5b3V0IG9wdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCIpO3JldHVybn1pZihnLm5hbWU9PW51bGwpe3ZsKCJBIGBuYW1lYCBtdXN0IGJlIHNwZWNpZmllZCB0byBtYWtlIGEgbGF5b3V0Iik7cmV0dXJufXZhciBUPWcubmFtZSxMPXguZXh0ZW5zaW9uKCJsYXlvdXQiLFQpO2lmKEw9PW51bGwpe3ZsKCJObyBzdWNoIGxheW91dCBgIitUKyJgIGZvdW5kLiAgRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IGl0IGFuZCBgY3l0b3NjYXBlLnVzZSgpYCBpdD8iKTtyZXR1cm59dmFyIE87bXQoZy5lbGVzKT9PPXguJChnLmVsZXMpOk89Zy5lbGVzIT1udWxsP2cuZWxlczp4LiQoKTt2YXIgUD1uZXcgTChkZSh7fSxnLHtjeTp4LGVsZXM6T30pKTtyZXR1cm4gUH19O2xDLmNyZWF0ZUxheW91dD1sQy5tYWtlTGF5b3V0PWxDLmxheW91dDt2YXIgRko9e25vdGlmeTpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXMuX3ByaXZhdGU7aWYodGhpcy5iYXRjaGluZygpKXtULmJhdGNoTm90aWZpY2F0aW9ucz1ULmJhdGNoTm90aWZpY2F0aW9uc3x8e307dmFyIEw9VC5iYXRjaE5vdGlmaWNhdGlvbnNbZ109VC5iYXRjaE5vdGlmaWNhdGlvbnNbZ118fHRoaXMuY29sbGVjdGlvbigpO3ghPW51bGwmJkwubWVyZ2UoeCk7cmV0dXJufWlmKFQubm90aWZpY2F0aW9uc0VuYWJsZWQpe3ZhciBPPXRoaXMucmVuZGVyZXIoKTt0aGlzLmRlc3Ryb3llZCgpfHwhT3x8Ty5ub3RpZnkoZyx4KX19LG5vdGlmaWNhdGlvbnM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZz09PXZvaWQgMD94Lm5vdGlmaWNhdGlvbnNFbmFibGVkOih4Lm5vdGlmaWNhdGlvbnNFbmFibGVkPSEhZyx0aGlzKX0sbm9Ob3RpZmljYXRpb25zOmZ1bmN0aW9uKGcpe3RoaXMubm90aWZpY2F0aW9ucyghMSksZygpLHRoaXMubm90aWZpY2F0aW9ucyghMCl9LGJhdGNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuYmF0Y2hDb3VudD4wfSxzdGFydEJhdGNoOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZy5iYXRjaENvdW50PT1udWxsJiYoZy5iYXRjaENvdW50PTApLGcuYmF0Y2hDb3VudD09PTAmJihnLmJhdGNoU3R5bGVFbGVzPXRoaXMuY29sbGVjdGlvbigpLGcuYmF0Y2hOb3RpZmljYXRpb25zPXt9KSxnLmJhdGNoQ291bnQrKyx0aGlzfSxlbmRCYXRjaDpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGU7aWYoZy5iYXRjaENvdW50PT09MClyZXR1cm4gdGhpcztpZihnLmJhdGNoQ291bnQtLSxnLmJhdGNoQ291bnQ9PT0wKXtnLmJhdGNoU3R5bGVFbGVzLnVwZGF0ZVN0eWxlKCk7dmFyIHg9dGhpcy5yZW5kZXJlcigpO09iamVjdC5rZXlzKGcuYmF0Y2hOb3RpZmljYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3ZhciBMPWcuYmF0Y2hOb3RpZmljYXRpb25zW1RdO0wuZW1wdHkoKT94Lm5vdGlmeShUKTp4Lm5vdGlmeShULEwpfSl9cmV0dXJuIHRoaXN9LGJhdGNoOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnN0YXJ0QmF0Y2goKSxnKCksdGhpcy5lbmRCYXRjaCgpLHRoaXN9LGJhdGNoRGF0YTpmdW5jdGlvbihnKXt2YXIgeD10aGlzO3JldHVybiB0aGlzLmJhdGNoKGZ1bmN0aW9uKCl7Zm9yKHZhciBUPU9iamVjdC5rZXlzKGcpLEw9MDtMPFQubGVuZ3RoO0wrKyl7dmFyIE89VFtMXSxQPWdbT10sJD14LmdldEVsZW1lbnRCeUlkKE8pOyQuZGF0YShQKX19KX19LE5KPVJmKHtoaWRlRWRnZXNPblZpZXdwb3J0OiExLHRleHR1cmVPblZpZXdwb3J0OiExLG1vdGlvbkJsdXI6ITEsbW90aW9uQmx1ck9wYWNpdHk6LjA1LHBpeGVsUmF0aW86dm9pZCAwLGRlc2t0b3BUYXBUaHJlc2hvbGQ6NCx0b3VjaFRhcFRocmVzaG9sZDo4LHdoZWVsU2Vuc2l0aXZpdHk6MSxkZWJ1ZzohMSxzaG93RnBzOiExfSksV0w9e3JlbmRlclRvOmZ1bmN0aW9uKGcseCxULEwpe3ZhciBPPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIE8ucmVuZGVyVG8oZyx4LFQsTCksdGhpc30scmVuZGVyZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlcn0sZm9yY2VSZW5kZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3RpZnkoImRyYXciKSx0aGlzfSxyZXNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZhbGlkYXRlU2l6ZSgpLHRoaXMuZW1pdEFuZE5vdGlmeSgicmVzaXplIiksdGhpc30saW5pdFJlbmRlcmVyOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LmV4dGVuc2lvbigicmVuZGVyZXIiLGcubmFtZSk7aWYoVD09bnVsbCl7dmwoIkNhbiBub3QgaW5pdGlhbGlzZTogTm8gc3VjaCByZW5kZXJlciBgIi5jb25jYXQoZy5uYW1lLCJgIGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBpbXBvcnQgaXQgYW5kIGBjeXRvc2NhcGUudXNlKClgIGl0PyIpKTtyZXR1cm59Zy53aGVlbFNlbnNpdGl2aXR5IT09dm9pZCAwJiZTYygiWW91IGhhdmUgc2V0IGEgY3VzdG9tIHdoZWVsIHNlbnNpdGl2aXR5LiAgVGhpcyB3aWxsIG1ha2UgeW91ciBhcHAgem9vbSB1bm5hdHVyYWxseSB3aGVuIHVzaW5nIG1haW5zdHJlYW0gbWljZS4gIFlvdSBzaG91bGQgY2hhbmdlIHRoaXMgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBvbmx5IGlmIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgYWxsIHlvdXIgdXNlcnMgd2lsbCB1c2UgdGhlIHNhbWUgaGFyZHdhcmUgYW5kIE9TIGNvbmZpZ3VyYXRpb24gYXMgeW91ciBjdXJyZW50IG1hY2hpbmUuIik7dmFyIEw9TkooZyk7TC5jeT14LHguX3ByaXZhdGUucmVuZGVyZXI9bmV3IFQoTCksdGhpcy5ub3RpZnkoImluaXQiKX0sZGVzdHJveVJlbmRlcmVyOmZ1bmN0aW9uKCl7dmFyIGc9dGhpcztnLm5vdGlmeSgiZGVzdHJveSIpO3ZhciB4PWcuY29udGFpbmVyKCk7aWYoeClmb3IoeC5fY3lyZWc9bnVsbDt4LmNoaWxkTm9kZXMubGVuZ3RoPjA7KXgucmVtb3ZlQ2hpbGQoeC5jaGlsZE5vZGVzWzBdKTtnLl9wcml2YXRlLnJlbmRlcmVyPW51bGwsZy5tdXRhYmxlRWxlbWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3ZhciBMPVQuX3ByaXZhdGU7TC5yc2NyYXRjaD17fSxMLnJzdHlsZT17fSxMLmFuaW1hdGlvbi5jdXJyZW50PVtdLEwuYW5pbWF0aW9uLnF1ZXVlPVtdfSl9LG9uUmVuZGVyOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm9uKCJyZW5kZXIiLGcpfSxvZmZSZW5kZXI6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMub2ZmKCJyZW5kZXIiLGcpfX07V0wuaW52YWxpZGF0ZURpbWVuc2lvbnM9V0wucmVzaXplO3ZhciBoQz17Y29sbGVjdGlvbjpmdW5jdGlvbihnLHgpe3JldHVybiBtdChnKT90aGlzLiQoZyk6VHQoZyk/Zy5jb2xsZWN0aW9uKCk6ZnQoZyk/KHh8fCh4PXt9KSxuZXcgJGYodGhpcyxnLHgudW5pcXVlLHgucmVtb3ZlZCkpOm5ldyAkZih0aGlzKX0sbm9kZXM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy4kKGZ1bmN0aW9uKFQpe3JldHVybiBULmlzTm9kZSgpfSk7cmV0dXJuIGc/eC5maWx0ZXIoZyk6eH0sZWRnZXM6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy4kKGZ1bmN0aW9uKFQpe3JldHVybiBULmlzRWRnZSgpfSk7cmV0dXJuIGc/eC5maWx0ZXIoZyk6eH0sJDpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLmVsZW1lbnRzO3JldHVybiBnP3guZmlsdGVyKGcpOnguc3Bhd25TZWxmKCl9LG11dGFibGVFbGVtZW50czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzfX07aEMuZWxlbWVudHM9aEMuZmlsdGVyPWhDLiQ7dmFyIGcxPXt9LHprPSJ0IixCSj0iZiI7ZzEuYXBwbHk9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMseD1nLl9wcml2YXRlLFQ9eC5jeSxMPVQuY29sbGVjdGlvbigpLE89MDtPPHkubGVuZ3RoO08rKyl7dmFyIFA9eVtPXSwkPWcuZ2V0Q29udGV4dE1ldGEoUCk7aWYoISQuZW1wdHkpe3ZhciBxPWcuZ2V0Q29udGV4dFN0eWxlKCQpLFM9Zy5hcHBseUNvbnRleHRTdHlsZSgkLHEsUCk7UC5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlP2cudXBkYXRlVHJhbnNpdGlvbnMoUCxTLmRpZmZQcm9wcyk6UC5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlPSEwO3ZhciBWPWcudXBkYXRlU3R5bGVIaW50cyhQKTtWJiZMLnB1c2goUCl9fXJldHVybiBMfSxnMS5nZXRQcm9wZXJ0aWVzRGlmZj1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD14Ll9wcml2YXRlLnByb3BEaWZmcz14Ll9wcml2YXRlLnByb3BEaWZmc3x8e30sTD15KyItIitnLE89VFtMXTtpZihPKXJldHVybiBPO2Zvcih2YXIgUD1bXSwkPXt9LHE9MDtxPHgubGVuZ3RoO3ErKyl7dmFyIFM9eFtxXSxWPXlbcV09PT16ayxZPWdbcV09PT16ayxydD1WIT09WSxvdD1TLm1hcHBlZFByb3BlcnRpZXMubGVuZ3RoPjA7aWYocnR8fFkmJm90KXt2YXIgaHQ9dm9pZCAwO3J0JiZvdHx8cnQ/aHQ9Uy5wcm9wZXJ0aWVzOm90JiYoaHQ9Uy5tYXBwZWRQcm9wZXJ0aWVzKTtmb3IodmFyIGR0PTA7ZHQ8aHQubGVuZ3RoO2R0Kyspe2Zvcih2YXIgTHQ9aHRbZHRdLGt0PUx0Lm5hbWUsRHQ9ITEsUHQ9cSsxO1B0PHgubGVuZ3RoO1B0Kyspe3ZhciAkdD14W1B0XSxadD1nW1B0XT09PXprO2lmKFp0JiYoRHQ9JHQucHJvcGVydGllc1tMdC5uYW1lXSE9bnVsbCxEdCkpYnJlYWt9ISRba3RdJiYhRHQmJigkW2t0XT0hMCxQLnB1c2goa3QpKX19fXJldHVybiBUW0xdPVAsUH0sZzEuZ2V0Q29udGV4dE1ldGE9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMseD0iIixULEw9eS5fcHJpdmF0ZS5zdHlsZUN4dEtleXx8IiIsTz0wO088Zy5sZW5ndGg7TysrKXt2YXIgUD1nW09dLCQ9UC5zZWxlY3RvciYmUC5zZWxlY3Rvci5tYXRjaGVzKHkpOyQ/eCs9ems6eCs9Qkp9cmV0dXJuIFQ9Zy5nZXRQcm9wZXJ0aWVzRGlmZihMLHgpLHkuX3ByaXZhdGUuc3R5bGVDeHRLZXk9eCx7a2V5OngsZGlmZlByb3BOYW1lczpULGVtcHR5OlQubGVuZ3RoPT09MH19LGcxLmdldENvbnRleHRTdHlsZT1mdW5jdGlvbih5KXt2YXIgZz15LmtleSx4PXRoaXMsVD10aGlzLl9wcml2YXRlLmNvbnRleHRTdHlsZXM9dGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzfHx7fTtpZihUW2ddKXJldHVybiBUW2ddO2Zvcih2YXIgTD17X3ByaXZhdGU6e2tleTpnfX0sTz0wO088eC5sZW5ndGg7TysrKXt2YXIgUD14W09dLCQ9Z1tPXT09PXprO2lmKCQpZm9yKHZhciBxPTA7cTxQLnByb3BlcnRpZXMubGVuZ3RoO3ErKyl7dmFyIFM9UC5wcm9wZXJ0aWVzW3FdO0xbUy5uYW1lXT1TfX1yZXR1cm4gVFtnXT1MLEx9LGcxLmFwcGx5Q29udGV4dFN0eWxlPWZ1bmN0aW9uKHksZyx4KXtmb3IodmFyIFQ9dGhpcyxMPXkuZGlmZlByb3BOYW1lcyxPPXt9LFA9VC50eXBlcywkPTA7JDxMLmxlbmd0aDskKyspe3ZhciBxPUxbJF0sUz1nW3FdLFY9eC5wc3R5bGUocSk7aWYoIVMpaWYoVilWLmJ5cGFzcz9TPXtuYW1lOnEsZGVsZXRlQnlwYXNzZWQ6ITB9OlM9e25hbWU6cSxkZWxldGU6ITB9O2Vsc2UgY29udGludWU7aWYoViE9PVMpe2lmKFMubWFwcGVkPT09UC5mbiYmViE9bnVsbCYmVi5tYXBwaW5nIT1udWxsJiZWLm1hcHBpbmcudmFsdWU9PT1TLnZhbHVlKXt2YXIgWT1WLm1hcHBpbmcscnQ9WS5mblZhbHVlPVMudmFsdWUoeCk7aWYocnQ9PT1ZLnByZXZGblZhbHVlKWNvbnRpbnVlfXZhciBvdD1PW3FdPXtwcmV2OlZ9O1QuYXBwbHlQYXJzZWRQcm9wZXJ0eSh4LFMpLG90Lm5leHQ9eC5wc3R5bGUocSksb3QubmV4dCYmb3QubmV4dC5ieXBhc3MmJihvdC5uZXh0PW90Lm5leHQuYnlwYXNzZWQpfX1yZXR1cm57ZGlmZlByb3BzOk99fSxnMS51cGRhdGVTdHlsZUhpbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGUseD10aGlzLFQ9eC5wcm9wZXJ0eUdyb3VwTmFtZXMsTD14LnByb3BlcnR5R3JvdXBLZXlzLE89ZnVuY3Rpb24oSnIsdmksWHMpe3JldHVybiB4LmdldFByb3BlcnRpZXNIYXNoKEpyLHZpLFhzKX0sUD1nLnN0eWxlS2V5O2lmKHkucmVtb3ZlZCgpKXJldHVybiExO3ZhciAkPWcuZ3JvdXA9PT0ibm9kZXMiLHE9eS5fcHJpdmF0ZS5zdHlsZTtUPU9iamVjdC5rZXlzKHEpO2Zvcih2YXIgUz0wO1M8TC5sZW5ndGg7UysrKXt2YXIgVj1MW1NdO2cuc3R5bGVLZXlzW1ZdPVtibSxFM119Zm9yKHZhciBZPWZ1bmN0aW9uKEpyLHZpKXtyZXR1cm4gZy5zdHlsZUtleXNbdmldWzBdPUwwKEpyLGcuc3R5bGVLZXlzW3ZpXVswXSl9LHJ0PWZ1bmN0aW9uKEpyLHZpKXtyZXR1cm4gZy5zdHlsZUtleXNbdmldWzFdPWh3KEpyLGcuc3R5bGVLZXlzW3ZpXVsxXSl9LG90PWZ1bmN0aW9uKEpyLHZpKXtZKEpyLHZpKSxydChKcix2aSl9LGh0PWZ1bmN0aW9uKEpyLHZpKXtmb3IodmFyIFhzPTA7WHM8SnIubGVuZ3RoO1hzKyspe3ZhciBFYT1Kci5jaGFyQ29kZUF0KFhzKTtZKEVhLHZpKSxydChFYSx2aSl9fSxkdD0yZTksTHQ9ZnVuY3Rpb24oSnIpe3JldHVybi0xMjg8SnImJkpyPDEyOCYmTWF0aC5mbG9vcihKcikhPT1Kcj9kdC0oSnIqMTAyNHwwKTpKcn0sa3Q9MDtrdDxULmxlbmd0aDtrdCsrKXt2YXIgRHQ9VFtrdF0sUHQ9cVtEdF07aWYoUHQhPW51bGwpe3ZhciAkdD10aGlzLnByb3BlcnRpZXNbRHRdLFp0PSR0LnR5cGUsWXQ9JHQuZ3JvdXBLZXkscXQ9dm9pZCAwOyR0Lmhhc2hPdmVycmlkZSE9bnVsbD9xdD0kdC5oYXNoT3ZlcnJpZGUoeSxQdCk6UHQucGZWYWx1ZSE9bnVsbCYmKHF0PVB0LnBmVmFsdWUpO3ZhciBuZT0kdC5lbnVtcz09bnVsbD9QdC52YWx1ZTpudWxsLEd0PXF0IT1udWxsLGdlPW5lIT1udWxsLGJlPUd0fHxnZSxpZT1QdC51bml0cztpZihadC5udW1iZXImJmJlJiYhWnQubXVsdGlwbGUpe3ZhciBGZT1HdD9xdDpuZTtvdChMdChGZSksWXQpLCFHdCYmaWUhPW51bGwmJmh0KGllLFl0KX1lbHNlIGh0KFB0LnN0clZhbHVlLFl0KX19Zm9yKHZhciB3ZT1bYm0sRTNdLGJuPTA7Ym48TC5sZW5ndGg7Ym4rKyl7dmFyIHplPUxbYm5dLEdlPWcuc3R5bGVLZXlzW3plXTt3ZVswXT1MMChHZVswXSx3ZVswXSksd2VbMV09aHcoR2VbMV0sd2VbMV0pfWcuc3R5bGVLZXk9SDUod2VbMF0sd2VbMV0pO3ZhciBFbj1nLnN0eWxlS2V5cztnLmxhYmVsRGltc0tleT1IYihFbi5sYWJlbERpbWVuc2lvbnMpO3ZhciBJbj1PKHksWyJsYWJlbCJdLEVuLmxhYmVsRGltZW5zaW9ucyk7aWYoZy5sYWJlbEtleT1IYihJbiksZy5sYWJlbFN0eWxlS2V5PUhiKFY1KEVuLmNvbW1vbkxhYmVsLEluKSksISQpe3ZhciBZbj1PKHksWyJzb3VyY2UtbGFiZWwiXSxFbi5sYWJlbERpbWVuc2lvbnMpO2cuc291cmNlTGFiZWxLZXk9SGIoWW4pLGcuc291cmNlTGFiZWxTdHlsZUtleT1IYihWNShFbi5jb21tb25MYWJlbCxZbikpO3ZhciBTbj1PKHksWyJ0YXJnZXQtbGFiZWwiXSxFbi5sYWJlbERpbWVuc2lvbnMpO2cudGFyZ2V0TGFiZWxLZXk9SGIoU24pLGcudGFyZ2V0TGFiZWxTdHlsZUtleT1IYihWNShFbi5jb21tb25MYWJlbCxTbikpfWlmKCQpe3ZhciBXbj1nLnN0eWxlS2V5cyxycj1Xbi5ub2RlQm9keSx3cj1Xbi5ub2RlQm9yZGVyLHVyPVduLmJhY2tncm91bmRJbWFnZSxlcj1Xbi5jb21wb3VuZCx2bj1Xbi5waWUsZ3I9W3JyLHdyLHVyLGVyLHZuXS5maWx0ZXIoZnVuY3Rpb24oZnIpe3JldHVybiBmciE9bnVsbH0pLnJlZHVjZShWNSxbYm0sRTNdKTtnLm5vZGVLZXk9SGIoZ3IpLGcuaGFzUGllPXZuIT1udWxsJiZ2blswXSE9PWJtJiZ2blsxXSE9PUUzfXJldHVybiBQIT09Zy5zdHlsZUtleX0sZzEuY2xlYXJTdHlsZUhpbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGU7Zy5zdHlsZUN4dEtleT0iIixnLnN0eWxlS2V5cz17fSxnLnN0eWxlS2V5PW51bGwsZy5sYWJlbEtleT1udWxsLGcubGFiZWxTdHlsZUtleT1udWxsLGcuc291cmNlTGFiZWxLZXk9bnVsbCxnLnNvdXJjZUxhYmVsU3R5bGVLZXk9bnVsbCxnLnRhcmdldExhYmVsS2V5PW51bGwsZy50YXJnZXRMYWJlbFN0eWxlS2V5PW51bGwsZy5ub2RlS2V5PW51bGwsZy5oYXNQaWU9bnVsbH0sZzEuYXBwbHlQYXJzZWRQcm9wZXJ0eT1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD1nLEw9eS5fcHJpdmF0ZS5zdHlsZSxPLFA9eC50eXBlcywkPXgucHJvcGVydGllc1tULm5hbWVdLnR5cGUscT1ULmJ5cGFzcyxTPUxbVC5uYW1lXSxWPVMmJlMuYnlwYXNzLFk9eS5fcHJpdmF0ZSxydD0ibWFwcGluZyIsb3Q9ZnVuY3Rpb24ocnIpe3JldHVybiBycj09bnVsbD9udWxsOnJyLnBmVmFsdWUhPW51bGw/cnIucGZWYWx1ZTpyci52YWx1ZX0saHQ9ZnVuY3Rpb24oKXt2YXIgcnI9b3QoUyksd3I9b3QoVCk7eC5jaGVja1RyaWdnZXJzKHksVC5uYW1lLHJyLHdyKX07aWYoVCYmVC5uYW1lLnN1YnN0cigwLDMpPT09InBpZSImJlNjKCJUaGUgcGllIHN0eWxlIHByb3BlcnRpZXMgYXJlIGRlcHJlY2F0ZWQuICBDcmVhdGUgY2hhcnRzIHVzaW5nIGJhY2tncm91bmQgaW1hZ2VzIGluc3RlYWQuIiksZy5uYW1lPT09ImN1cnZlLXN0eWxlIiYmeS5pc0VkZ2UoKSYmKGcudmFsdWUhPT0iYmV6aWVyIiYmeS5pc0xvb3AoKXx8Zy52YWx1ZT09PSJoYXlzdGFjayImJih5LnNvdXJjZSgpLmlzUGFyZW50KCl8fHkudGFyZ2V0KCkuaXNQYXJlbnQoKSkpJiYoVD1nPXRoaXMucGFyc2UoZy5uYW1lLCJiZXppZXIiLHEpKSxULmRlbGV0ZSlyZXR1cm4gTFtULm5hbWVdPXZvaWQgMCxodCgpLCEwO2lmKFQuZGVsZXRlQnlwYXNzZWQpcmV0dXJuIFM/Uy5ieXBhc3M/KFMuYnlwYXNzZWQ9dm9pZCAwLGh0KCksITApOiExOihodCgpLCEwKTtpZihULmRlbGV0ZUJ5cGFzcylyZXR1cm4gUz9TLmJ5cGFzcz8oTFtULm5hbWVdPVMuYnlwYXNzZWQsaHQoKSwhMCk6ITE6KGh0KCksITApO3ZhciBkdD1mdW5jdGlvbigpe1NjKCJEbyBub3QgYXNzaWduIG1hcHBpbmdzIHRvIGVsZW1lbnRzIHdpdGhvdXQgY29ycmVzcG9uZGluZyBkYXRhIChpLmUuIGVsZSBgIit5LmlkKCkrImAgaGFzIG5vIG1hcHBpbmcgZm9yIHByb3BlcnR5IGAiK1QubmFtZSsiYCB3aXRoIGRhdGEgZmllbGQgYCIrVC5maWVsZCsiYCk7IHRyeSBhIGBbIitULmZpZWxkKyJdYCBzZWxlY3RvciB0byBsaW1pdCBzY29wZSB0byBlbGVtZW50cyB3aXRoIGAiK1QuZmllbGQrImAgZGVmaW5lZCIpfTtzd2l0Y2goVC5tYXBwZWQpe2Nhc2UgUC5tYXBEYXRhOntmb3IodmFyIEx0PVQuZmllbGQuc3BsaXQoIi4iKSxrdD1ZLmRhdGEsRHQ9MDtEdDxMdC5sZW5ndGgmJmt0O0R0Kyspe3ZhciBQdD1MdFtEdF07a3Q9a3RbUHRdfWlmKGt0PT1udWxsKXJldHVybiBkdCgpLCExO3ZhciAkdDtpZihYKGt0KSl7dmFyIFp0PVQuZmllbGRNYXgtVC5maWVsZE1pbjtadD09PTA/JHQ9MDokdD0oa3QtVC5maWVsZE1pbikvWnR9ZWxzZSByZXR1cm4gU2MoIkRvIG5vdCB1c2UgY29udGludW91cyBtYXBwZXJzIHdpdGhvdXQgc3BlY2lmeWluZyBudW1lcmljIGRhdGEgKGkuZS4gYCIrVC5maWVsZCsiOiAiK2t0KyJgIGZvciBgIit5LmlkKCkrImAgaXMgbm9uLW51bWVyaWMpIiksITE7aWYoJHQ8MD8kdD0wOiR0PjEmJigkdD0xKSwkLmNvbG9yKXt2YXIgWXQ9VC52YWx1ZU1pblswXSxxdD1ULnZhbHVlTWF4WzBdLG5lPVQudmFsdWVNaW5bMV0sR3Q9VC52YWx1ZU1heFsxXSxnZT1ULnZhbHVlTWluWzJdLGJlPVQudmFsdWVNYXhbMl0saWU9VC52YWx1ZU1pblszXT09bnVsbD8xOlQudmFsdWVNaW5bM10sRmU9VC52YWx1ZU1heFszXT09bnVsbD8xOlQudmFsdWVNYXhbM10sd2U9W01hdGgucm91bmQoWXQrKHF0LVl0KSokdCksTWF0aC5yb3VuZChuZSsoR3QtbmUpKiR0KSxNYXRoLnJvdW5kKGdlKyhiZS1nZSkqJHQpLE1hdGgucm91bmQoaWUrKEZlLWllKSokdCldO089e2J5cGFzczpULmJ5cGFzcyxuYW1lOlQubmFtZSx2YWx1ZTp3ZSxzdHJWYWx1ZToicmdiKCIrd2VbMF0rIiwgIit3ZVsxXSsiLCAiK3dlWzJdKyIpIn19ZWxzZSBpZigkLm51bWJlcil7dmFyIGJuPVQudmFsdWVNaW4rKFQudmFsdWVNYXgtVC52YWx1ZU1pbikqJHQ7Tz10aGlzLnBhcnNlKFQubmFtZSxibixULmJ5cGFzcyxydCl9ZWxzZSByZXR1cm4hMTtpZighTylyZXR1cm4gZHQoKSwhMTtPLm1hcHBpbmc9VCxUPU87YnJlYWt9Y2FzZSBQLmRhdGE6e2Zvcih2YXIgemU9VC5maWVsZC5zcGxpdCgiLiIpLEdlPVkuZGF0YSxFbj0wO0VuPHplLmxlbmd0aCYmR2U7RW4rKyl7dmFyIEluPXplW0VuXTtHZT1HZVtJbl19aWYoR2UhPW51bGwmJihPPXRoaXMucGFyc2UoVC5uYW1lLEdlLFQuYnlwYXNzLHJ0KSksIU8pcmV0dXJuIGR0KCksITE7Ty5tYXBwaW5nPVQsVD1PO2JyZWFrfWNhc2UgUC5mbjp7dmFyIFluPVQudmFsdWUsU249VC5mblZhbHVlIT1udWxsP1QuZm5WYWx1ZTpZbih5KTtpZihULnByZXZGblZhbHVlPVNuLFNuPT1udWxsKXJldHVybiBTYygiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gbnVsbCAoaS5lLiBgIitULm5hbWUrImAgZm9yIGVsZSBgIit5LmlkKCkrImAgaXMgbnVsbCkiKSwhMTtpZihPPXRoaXMucGFyc2UoVC5uYW1lLFNuLFQuYnlwYXNzLHJ0KSwhTylyZXR1cm4gU2MoIkN1c3RvbSBmdW5jdGlvbiBtYXBwZXJzIG1heSBub3QgcmV0dXJuIGludmFsaWQgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdHlwZSAoaS5lLiBgIitULm5hbWUrImAgZm9yIGVsZSBgIit5LmlkKCkrImAgaXMgaW52YWxpZCkiKSwhMTtPLm1hcHBpbmc9VmIoVCksVD1PO2JyZWFrfWNhc2Ugdm9pZCAwOmJyZWFrO2RlZmF1bHQ6cmV0dXJuITF9cmV0dXJuIHE/KFY/VC5ieXBhc3NlZD1TLmJ5cGFzc2VkOlQuYnlwYXNzZWQ9UyxMW1QubmFtZV09VCk6Vj9TLmJ5cGFzc2VkPVQ6TFtULm5hbWVdPVQsaHQoKSwhMH0sZzEuY2xlYW5FbGVtZW50cz1mdW5jdGlvbih5LGcpe2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXt2YXIgVD15W3hdO2lmKHRoaXMuY2xlYXJTdHlsZUhpbnRzKFQpLFQuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksVC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSwhZylULl9wcml2YXRlLnN0eWxlPXt9O2Vsc2UgZm9yKHZhciBMPVQuX3ByaXZhdGUuc3R5bGUsTz1PYmplY3Qua2V5cyhMKSxQPTA7UDxPLmxlbmd0aDtQKyspe3ZhciAkPU9bUF0scT1MWyRdO3EhPW51bGwmJihxLmJ5cGFzcz9xLmJ5cGFzc2VkPW51bGw6TFskXT1udWxsKX19fSxnMS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9wcml2YXRlLmN5LGc9eS5tdXRhYmxlRWxlbWVudHMoKTtnLnVwZGF0ZVN0eWxlKCl9LGcxLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcyxUPXkuX3ByaXZhdGUsTD15LnBzdHlsZSgidHJhbnNpdGlvbi1wcm9wZXJ0eSIpLnZhbHVlLE89eS5wc3R5bGUoInRyYW5zaXRpb24tZHVyYXRpb24iKS5wZlZhbHVlLFA9eS5wc3R5bGUoInRyYW5zaXRpb24tZGVsYXkiKS5wZlZhbHVlO2lmKEwubGVuZ3RoPjAmJk8+MCl7Zm9yKHZhciAkPXt9LHE9ITEsUz0wO1M8TC5sZW5ndGg7UysrKXt2YXIgVj1MW1NdLFk9eS5wc3R5bGUoVikscnQ9Z1tWXTtpZihydCl7dmFyIG90PXJ0LnByZXYsaHQ9b3QsZHQ9cnQubmV4dCE9bnVsbD9ydC5uZXh0OlksTHQ9ITEsa3Q9dm9pZCAwLER0PTFlLTY7aHQmJihYKGh0LnBmVmFsdWUpJiZYKGR0LnBmVmFsdWUpPyhMdD1kdC5wZlZhbHVlLWh0LnBmVmFsdWUsa3Q9aHQucGZWYWx1ZStEdCpMdCk6WChodC52YWx1ZSkmJlgoZHQudmFsdWUpPyhMdD1kdC52YWx1ZS1odC52YWx1ZSxrdD1odC52YWx1ZStEdCpMdCk6ZnQoaHQudmFsdWUpJiZmdChkdC52YWx1ZSkmJihMdD1odC52YWx1ZVswXSE9PWR0LnZhbHVlWzBdfHxodC52YWx1ZVsxXSE9PWR0LnZhbHVlWzFdfHxodC52YWx1ZVsyXSE9PWR0LnZhbHVlWzJdLGt0PWh0LnN0clZhbHVlKSxMdCYmKCRbVl09ZHQuc3RyVmFsdWUsdGhpcy5hcHBseUJ5cGFzcyh5LFYsa3QpLHE9ITApKX19aWYoIXEpcmV0dXJuO1QudHJhbnNpdGlvbmluZz0hMCxuZXcgZXgoZnVuY3Rpb24oUHQpe1A+MD95LmRlbGF5QW5pbWF0aW9uKFApLnBsYXkoKS5wcm9taXNlKCkudGhlbihQdCk6UHQoKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4geS5hbmltYXRpb24oe3N0eWxlOiQsZHVyYXRpb246TyxlYXNpbmc6eS5wc3R5bGUoInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIikudmFsdWUscXVldWU6ITF9KS5wbGF5KCkucHJvbWlzZSgpfSkudGhlbihmdW5jdGlvbigpe3gucmVtb3ZlQnlwYXNzZXMoeSxMKSx5LmVtaXRBbmROb3RpZnkoInN0eWxlIiksVC50cmFuc2l0aW9uaW5nPSExfSl9ZWxzZSBULnRyYW5zaXRpb25pbmcmJih0aGlzLnJlbW92ZUJ5cGFzc2VzKHksTCkseS5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpLFQudHJhbnNpdGlvbmluZz0hMSl9LGcxLmNoZWNrVHJpZ2dlcj1mdW5jdGlvbih5LGcseCxULEwsTyl7dmFyIFA9dGhpcy5wcm9wZXJ0aWVzW2ddLCQ9TChQKTskIT1udWxsJiYkKHgsVCkmJk8oUCl9LGcxLmNoZWNrWk9yZGVyVHJpZ2dlcj1mdW5jdGlvbih5LGcseCxUKXt2YXIgTD10aGlzO3RoaXMuY2hlY2tUcmlnZ2VyKHksZyx4LFQsZnVuY3Rpb24oTyl7cmV0dXJuIE8udHJpZ2dlcnNaT3JkZXJ9LGZ1bmN0aW9uKCl7TC5fcHJpdmF0ZS5jeS5ub3RpZnkoInpvcmRlciIseSl9KX0sZzEuY2hlY2tCb3VuZHNUcmlnZ2VyPWZ1bmN0aW9uKHksZyx4LFQpe3RoaXMuY2hlY2tUcmlnZ2VyKHksZyx4LFQsZnVuY3Rpb24oTCl7cmV0dXJuIEwudHJpZ2dlcnNCb3VuZHN9LGZ1bmN0aW9uKEwpe3kuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCkseS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxMLnRyaWdnZXJzQm91bmRzT2ZQYXJhbGxlbEJlemllcnMmJihnPT09ImN1cnZlLXN0eWxlIiYmKHg9PT0iYmV6aWVyInx8VD09PSJiZXppZXIiKXx8Zz09PSJkaXNwbGF5IiYmKHg9PT0ibm9uZSJ8fFQ9PT0ibm9uZSIpKSYmeS5wYXJhbGxlbEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihPKXtPLmlzQnVuZGxlZEJlemllcigpJiZPLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfSl9KX0sZzEuY2hlY2tUcmlnZ2Vycz1mdW5jdGlvbih5LGcseCxUKXt5LmRpcnR5U3R5bGVDYWNoZSgpLHRoaXMuY2hlY2taT3JkZXJUcmlnZ2VyKHksZyx4LFQpLHRoaXMuY2hlY2tCb3VuZHNUcmlnZ2VyKHksZyx4LFQpfTt2YXIgcWs9e307cWsuYXBwbHlCeXBhc3M9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcyxPPVtdLFA9ITA7aWYoZz09PSIqInx8Zz09PSIqKiIpe2lmKHghPT12b2lkIDApZm9yKHZhciAkPTA7JDxMLnByb3BlcnRpZXMubGVuZ3RoOyQrKyl7dmFyIHE9TC5wcm9wZXJ0aWVzWyRdLFM9cS5uYW1lLFY9dGhpcy5wYXJzZShTLHgsITApO1YmJk8ucHVzaChWKX19ZWxzZSBpZihtdChnKSl7dmFyIFk9dGhpcy5wYXJzZShnLHgsITApO1kmJk8ucHVzaChZKX1lbHNlIGlmKHV0KGcpKXt2YXIgcnQ9ZztUPXg7Zm9yKHZhciBvdD1PYmplY3Qua2V5cyhydCksaHQ9MDtodDxvdC5sZW5ndGg7aHQrKyl7dmFyIGR0PW90W2h0XSxMdD1ydFtkdF07aWYoTHQ9PT12b2lkIDAmJihMdD1ydFtTZShkdCldKSxMdCE9PXZvaWQgMCl7dmFyIGt0PXRoaXMucGFyc2UoZHQsTHQsITApO2t0JiZPLnB1c2goa3QpfX19ZWxzZSByZXR1cm4hMTtpZihPLmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBEdD0hMSxQdD0wO1B0PHkubGVuZ3RoO1B0Kyspe2Zvcih2YXIgJHQ9eVtQdF0sWnQ9e30sWXQ9dm9pZCAwLHF0PTA7cXQ8Ty5sZW5ndGg7cXQrKyl7dmFyIG5lPU9bcXRdO2lmKFQpe3ZhciBHdD0kdC5wc3R5bGUobmUubmFtZSk7WXQ9WnRbbmUubmFtZV09e3ByZXY6R3R9fUR0PXRoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eSgkdCxWYihuZSkpfHxEdCxUJiYoWXQubmV4dD0kdC5wc3R5bGUobmUubmFtZSkpfUR0JiZ0aGlzLnVwZGF0ZVN0eWxlSGludHMoJHQpLFQmJnRoaXMudXBkYXRlVHJhbnNpdGlvbnMoJHQsWnQsUCl9cmV0dXJuIER0fSxxay5vdmVycmlkZUJ5cGFzcz1mdW5jdGlvbih5LGcseCl7Zz1nbihnKTtmb3IodmFyIFQ9MDtUPHkubGVuZ3RoO1QrKyl7dmFyIEw9eVtUXSxPPUwuX3ByaXZhdGUuc3R5bGVbZ10sUD10aGlzLnByb3BlcnRpZXNbZ10udHlwZSwkPVAuY29sb3IscT1QLm11dGlwbGUsUz1PP08ucGZWYWx1ZSE9bnVsbD9PLnBmVmFsdWU6Ty52YWx1ZTpudWxsOyFPfHwhTy5ieXBhc3M/dGhpcy5hcHBseUJ5cGFzcyhMLGcseCk6KE8udmFsdWU9eCxPLnBmVmFsdWUhPW51bGwmJihPLnBmVmFsdWU9eCksJD9PLnN0clZhbHVlPSJyZ2IoIit4LmpvaW4oIiwiKSsiKSI6cT9PLnN0clZhbHVlPXguam9pbigiICIpOk8uc3RyVmFsdWU9IiIreCx0aGlzLnVwZGF0ZVN0eWxlSGludHMoTCkpLHRoaXMuY2hlY2tUcmlnZ2VycyhMLGcsUyx4KX19LHFrLnJlbW92ZUFsbEJ5cGFzc2VzPWZ1bmN0aW9uKHksZyl7cmV0dXJuIHRoaXMucmVtb3ZlQnlwYXNzZXMoeSx0aGlzLnByb3BlcnR5TmFtZXMsZyl9LHFrLnJlbW92ZUJ5cGFzc2VzPWZ1bmN0aW9uKHksZyx4KXtmb3IodmFyIFQ9ITAsTD0wO0w8eS5sZW5ndGg7TCsrKXtmb3IodmFyIE89eVtMXSxQPXt9LCQ9MDskPGcubGVuZ3RoOyQrKyl7dmFyIHE9Z1skXSxTPXRoaXMucHJvcGVydGllc1txXSxWPU8ucHN0eWxlKFMubmFtZSk7aWYoISghVnx8IVYuYnlwYXNzKSl7dmFyIFk9IiIscnQ9dGhpcy5wYXJzZShxLFksITApLG90PVBbUy5uYW1lXT17cHJldjpWfTt0aGlzLmFwcGx5UGFyc2VkUHJvcGVydHkoTyxydCksb3QubmV4dD1PLnBzdHlsZShTLm5hbWUpfX10aGlzLnVwZGF0ZVN0eWxlSGludHMoTykseCYmdGhpcy51cGRhdGVUcmFuc2l0aW9ucyhPLFAsVCl9fTt2YXIgWUw9e307WUwuZ2V0RW1TaXplSW5QaXhlbHM9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmNvbnRhaW5lckNzcygiZm9udC1zaXplIik7cmV0dXJuIHkhPW51bGw/cGFyc2VGbG9hdCh5KToxfSxZTC5jb250YWluZXJDc3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5fcHJpdmF0ZS5jeSx4PWcuY29udGFpbmVyKCk7aWYoUiYmeCYmUi5nZXRDb21wdXRlZFN0eWxlKXJldHVybiBSLmdldENvbXB1dGVkU3R5bGUoeCkuZ2V0UHJvcGVydHlWYWx1ZSh5KX07dmFyIFdiPXt9O1diLmdldFJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeSxnKXtyZXR1cm4gZz90aGlzLmdldFN0eWxlUHJvcGVydHlWYWx1ZSh5LGcsITApOnRoaXMuZ2V0UmF3U3R5bGUoeSwhMCl9LFdiLmdldFJhd1N0eWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcztpZih5PXlbMF0seSl7Zm9yKHZhciBUPXt9LEw9MDtMPHgucHJvcGVydGllcy5sZW5ndGg7TCsrKXt2YXIgTz14LnByb3BlcnRpZXNbTF0sUD14LmdldFN0eWxlUHJvcGVydHlWYWx1ZSh5LE8ubmFtZSxnKTtQIT1udWxsJiYoVFtPLm5hbWVdPVAsVFtTZShPLm5hbWUpXT1QKX1yZXR1cm4gVH19LFdiLmdldEluZGV4ZWRTdHlsZT1mdW5jdGlvbih5LGcseCxUKXt2YXIgTD15LnBzdHlsZShnKVt4XVtUXTtyZXR1cm4gTD8/eS5jeSgpLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KGcpW3hdWzBdfSxXYi5nZXRTdHlsZVByb3BlcnR5VmFsdWU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPXRoaXM7aWYoeT15WzBdLHkpe3ZhciBMPVQucHJvcGVydGllc1tnXTtMLmFsaWFzJiYoTD1MLnBvaW50c1RvKTt2YXIgTz1MLnR5cGUsUD15LnBzdHlsZShMLm5hbWUpO2lmKFApe3ZhciAkPVAudmFsdWUscT1QLnVuaXRzLFM9UC5zdHJWYWx1ZTtpZih4JiZPLm51bWJlciYmJCE9bnVsbCYmWCgkKSl7dmFyIFY9eS5jeSgpLnpvb20oKSxZPWZ1bmN0aW9uKEx0KXtyZXR1cm4gTHQqVn0scnQ9ZnVuY3Rpb24oTHQsa3Qpe3JldHVybiBZKEx0KStrdH0sb3Q9ZnQoJCksaHQ9b3Q/cS5ldmVyeShmdW5jdGlvbihkdCl7cmV0dXJuIGR0IT1udWxsfSk6cSE9bnVsbDtyZXR1cm4gaHQ/b3Q/JC5tYXAoZnVuY3Rpb24oZHQsTHQpe3JldHVybiBydChkdCxxW0x0XSl9KS5qb2luKCIgIik6cnQoJCxxKTpvdD8kLm1hcChmdW5jdGlvbihkdCl7cmV0dXJuIG10KGR0KT9kdDoiIitZKGR0KX0pLmpvaW4oIiAiKToiIitZKCQpfWVsc2UgaWYoUyE9bnVsbClyZXR1cm4gU31yZXR1cm4gbnVsbH19LFdiLmdldEFuaW1hdGlvblN0YXJ0U3R5bGU9ZnVuY3Rpb24oeSxnKXtmb3IodmFyIHg9e30sVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgTD1nW1RdLE89TC5uYW1lLFA9eS5wc3R5bGUoTyk7UCE9PXZvaWQgMCYmKHV0KFApP1A9dGhpcy5wYXJzZShPLFAuc3RyVmFsdWUpOlA9dGhpcy5wYXJzZShPLFApKSxQJiYoeFtPXT1QKX1yZXR1cm4geH0sV2IuZ2V0UHJvcHNMaXN0PWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD1bXSxUPXksTD1nLnByb3BlcnRpZXM7aWYoVClmb3IodmFyIE89T2JqZWN0LmtleXMoVCksUD0wO1A8Ty5sZW5ndGg7UCsrKXt2YXIgJD1PW1BdLHE9VFskXSxTPUxbJF18fExbZ24oJCldLFY9dGhpcy5wYXJzZShTLm5hbWUscSk7ViYmeC5wdXNoKFYpfXJldHVybiB4fSxXYi5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPXguc2xpY2UoKSxMLE8sUCwkLHEsUztmb3IocT0wO3E8Zy5sZW5ndGg7cSsrKWlmKEw9Z1txXSxPPXkucHN0eWxlKEwsITEpLE8hPW51bGwpaWYoTy5wZlZhbHVlIT1udWxsKVRbMF09TDAoJCxUWzBdKSxUWzFdPWh3KCQsVFsxXSk7ZWxzZSBmb3IoUD1PLnN0clZhbHVlLFM9MDtTPFAubGVuZ3RoO1MrKykkPVAuY2hhckNvZGVBdChTKSxUWzBdPUwwKCQsVFswXSksVFsxXT1odygkLFRbMV0pO3JldHVybiBUfSxXYi5nZXRQcm9wZXJ0aWVzSGFzaD1XYi5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g7dmFyIGZDPXt9O2ZDLmFwcGVuZEZyb21Kc29uPWZ1bmN0aW9uKHkpe2Zvcih2YXIgZz10aGlzLHg9MDt4PHkubGVuZ3RoO3grKyl7dmFyIFQ9eVt4XSxMPVQuc2VsZWN0b3IsTz1ULnN0eWxlfHxULmNzcyxQPU9iamVjdC5rZXlzKE8pO2cuc2VsZWN0b3IoTCk7Zm9yKHZhciAkPTA7JDxQLmxlbmd0aDskKyspe3ZhciBxPVBbJF0sUz1PW3FdO2cuY3NzKHEsUyl9fXJldHVybiBnfSxmQy5mcm9tSnNvbj1mdW5jdGlvbih5KXt2YXIgZz10aGlzO3JldHVybiBnLnJlc2V0VG9EZWZhdWx0KCksZy5hcHBlbmRGcm9tSnNvbih5KSxnfSxmQy5qc29uPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PVtdLGc9dGhpcy5kZWZhdWx0TGVuZ3RoO2c8dGhpcy5sZW5ndGg7ZysrKXtmb3IodmFyIHg9dGhpc1tnXSxUPXguc2VsZWN0b3IsTD14LnByb3BlcnRpZXMsTz17fSxQPTA7UDxMLmxlbmd0aDtQKyspe3ZhciAkPUxbUF07T1skLm5hbWVdPSQuc3RyVmFsdWV9eS5wdXNoKHtzZWxlY3RvcjpUP1QudG9TdHJpbmcoKToiY29yZSIsc3R5bGU6T30pfXJldHVybiB5fTt2YXIgS0w9e307S0wuYXBwZW5kRnJvbVN0cmluZz1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9dGhpcyxUPSIiK3ksTCxPLFA7VD1ULnJlcGxhY2UoL1svXVsqXShcc3wuKSs/WypdWy9dL2csIiIpO2Z1bmN0aW9uICQoKXtULmxlbmd0aD5MLmxlbmd0aD9UPVQuc3Vic3RyKEwubGVuZ3RoKTpUPSIifWZ1bmN0aW9uIHEoKXtPLmxlbmd0aD5QLmxlbmd0aD9PPU8uc3Vic3RyKFAubGVuZ3RoKTpPPSIifWZvcig7Oyl7dmFyIFM9VC5tYXRjaCgvXlxzKiQvKTtpZihTKWJyZWFrO3ZhciBWPVQubWF0Y2goL15ccyooKD86LnxccykrPylccypceygoPzoufFxzKSs/KVx9Lyk7aWYoIVYpe1NjKCJIYWx0aW5nIHN0eWxlc2hlZXQgcGFyc2luZzogU3RyaW5nIHN0eWxlc2hlZXQgY29udGFpbnMgbW9yZSB0byBwYXJzZSBidXQgbm8gc2VsZWN0b3IgYW5kIGJsb2NrIGZvdW5kIGluOiAiK1QpO2JyZWFrfUw9VlswXTt2YXIgWT1WWzFdO2lmKFkhPT0iY29yZSIpe3ZhciBydD1uZXcgRW0oWSk7aWYocnQuaW52YWxpZCl7U2MoIlNraXBwaW5nIHBhcnNpbmcgb2YgYmxvY2s6IEludmFsaWQgc2VsZWN0b3IgZm91bmQgaW4gc3RyaW5nIHN0eWxlc2hlZXQ6ICIrWSksJCgpO2NvbnRpbnVlfX12YXIgb3Q9VlsyXSxodD0hMTtPPW90O2Zvcih2YXIgZHQ9W107Oyl7dmFyIEx0PU8ubWF0Y2goL15ccyokLyk7aWYoTHQpYnJlYWs7dmFyIGt0PU8ubWF0Y2goL15ccyooLis/KVxzKjpccyooLis/KSg/OlxzKjt8XHMqJCkvKTtpZigha3Qpe1NjKCJTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIGZvcm1hdHRpbmcgb2Ygc3R5bGUgcHJvcGVydHkgYW5kIHZhbHVlIGRlZmluaXRpb25zIGZvdW5kIGluOiIrb3QpLGh0PSEwO2JyZWFrfVA9a3RbMF07dmFyIER0PWt0WzFdLFB0PWt0WzJdLCR0PWcucHJvcGVydGllc1tEdF07aWYoISR0KXtTYygiU2tpcHBpbmcgcHJvcGVydHk6IEludmFsaWQgcHJvcGVydHkgbmFtZSBpbjogIitQKSxxKCk7Y29udGludWV9dmFyIFp0PXgucGFyc2UoRHQsUHQpO2lmKCFadCl7U2MoIlNraXBwaW5nIHByb3BlcnR5OiBJbnZhbGlkIHByb3BlcnR5IGRlZmluaXRpb24gaW46ICIrUCkscSgpO2NvbnRpbnVlfWR0LnB1c2goe25hbWU6RHQsdmFsOlB0fSkscSgpfWlmKGh0KXskKCk7YnJlYWt9eC5zZWxlY3RvcihZKTtmb3IodmFyIFl0PTA7WXQ8ZHQubGVuZ3RoO1l0Kyspe3ZhciBxdD1kdFtZdF07eC5jc3MocXQubmFtZSxxdC52YWwpfSQoKX1yZXR1cm4geH0sS0wuZnJvbVN0cmluZz1mdW5jdGlvbih5KXt2YXIgZz10aGlzO3JldHVybiBnLnJlc2V0VG9EZWZhdWx0KCksZy5hcHBlbmRGcm9tU3RyaW5nKHkpLGd9O3ZhciB6Zj17fTsoZnVuY3Rpb24oKXt2YXIgeT1ZZSxnPWtlLHg9cmUsVD1zZSxMPVBlLE89ZnVuY3Rpb24oZ3Ipe3JldHVybiJeIitncisiXFxzKlxcKFxccyooW1xcd1xcLl0rKVxccypcXCkkIn0sUD1mdW5jdGlvbihncil7dmFyIGZyPXkrInxcXHcrfCIrZysifCIreCsifCIrVCsifCIrTDtyZXR1cm4iXiIrZ3IrIlxccypcXCgoW1xcd1xcLl0rKVxccypcXCxcXHMqKCIreSsiKVxccypcXCxcXHMqKCIreSsiKVxccyosXFxzKigiK2ZyKyIpXFxzKlxcLFxccyooIitmcisiKVxcKSQifSwkPVtgXnVybFxccypcXChcXHMqWyciXT8oLis/KVsnIl0/XFxzKlxcKSRgLCJeKG5vbmUpJCIsIl4oLispJCJdO3pmLnR5cGVzPXt0aW1lOntudW1iZXI6ITAsbWluOjAsdW5pdHM6InN8bXMiLGltcGxpY2l0VW5pdHM6Im1zIn0scGVyY2VudDp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUifSxwZXJjZW50YWdlczp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUiLG11bHRpcGxlOiEwfSx6ZXJvT25lTnVtYmVyOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITB9LHplcm9PbmVOdW1iZXJzOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITAsbXVsdGlwbGU6ITB9LG5PbmVPbmVOdW1iZXI6e251bWJlcjohMCxtaW46LTEsbWF4OjEsdW5pdGxlc3M6ITB9LG5vbk5lZ2F0aXZlSW50OntudW1iZXI6ITAsbWluOjAsaW50ZWdlcjohMCx1bml0bGVzczohMH0scG9zaXRpb246e2VudW1zOlsicGFyZW50Iiwib3JpZ2luIl19LG5vZGVTaXplOntudW1iZXI6ITAsbWluOjAsZW51bXM6WyJsYWJlbCJdfSxudW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMH0sbnVtYmVyczp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxwb3NpdGl2ZU51bWJlcjp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG1pbjowLHN0cmljdE1pbjohMH0sc2l6ZTp7bnVtYmVyOiEwLG1pbjowfSxiaWRpcmVjdGlvbmFsU2l6ZTp7bnVtYmVyOiEwfSxiaWRpcmVjdGlvbmFsU2l6ZU1heWJlUGVyY2VudDp7bnVtYmVyOiEwLGFsbG93UGVyY2VudDohMH0sYmlkaXJlY3Rpb25hbFNpemVzOntudW1iZXI6ITAsbXVsdGlwbGU6ITB9LHNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITB9LGF4aXNEaXJlY3Rpb246e2VudW1zOlsiaG9yaXpvbnRhbCIsImxlZnR3YXJkIiwicmlnaHR3YXJkIiwidmVydGljYWwiLCJ1cHdhcmQiLCJkb3dud2FyZCIsImF1dG8iXX0scGFkZGluZ1JlbGF0aXZlVG86e2VudW1zOlsid2lkdGgiLCJoZWlnaHQiLCJhdmVyYWdlIiwibWluIiwibWF4Il19LGJnV0g6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITAsZW51bXM6WyJhdXRvIl0sbXVsdGlwbGU6ITB9LGJnUG9zOntudW1iZXI6ITAsYWxsb3dQZXJjZW50OiEwLG11bHRpcGxlOiEwfSxiZ1JlbGF0aXZlVG86e2VudW1zOlsiaW5uZXIiLCJpbmNsdWRlLXBhZGRpbmciXSxtdWx0aXBsZTohMH0sYmdSZXBlYXQ6e2VudW1zOlsicmVwZWF0IiwicmVwZWF0LXgiLCJyZXBlYXQteSIsIm5vLXJlcGVhdCJdLG11bHRpcGxlOiEwfSxiZ0ZpdDp7ZW51bXM6WyJub25lIiwiY29udGFpbiIsImNvdmVyIl0sbXVsdGlwbGU6ITB9LGJnQ3Jvc3NPcmlnaW46e2VudW1zOlsiYW5vbnltb3VzIiwidXNlLWNyZWRlbnRpYWxzIl0sbXVsdGlwbGU6ITB9LGJnQ2xpcDp7ZW51bXM6WyJub25lIiwibm9kZSJdLG11bHRpcGxlOiEwfSxiZ0NvbnRhaW5tZW50OntlbnVtczpbImluc2lkZSIsIm92ZXIiXSxtdWx0aXBsZTohMH0sY29sb3I6e2NvbG9yOiEwfSxjb2xvcnM6e2NvbG9yOiEwLG11bHRpcGxlOiEwfSxmaWxsOntlbnVtczpbInNvbGlkIiwibGluZWFyLWdyYWRpZW50IiwicmFkaWFsLWdyYWRpZW50Il19LGJvb2w6e2VudW1zOlsieWVzIiwibm8iXX0sYm9vbHM6e2VudW1zOlsieWVzIiwibm8iXSxtdWx0aXBsZTohMH0sbGluZVN0eWxlOntlbnVtczpbInNvbGlkIiwiZG90dGVkIiwiZGFzaGVkIl19LGxpbmVDYXA6e2VudW1zOlsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl19LGJvcmRlclN0eWxlOntlbnVtczpbInNvbGlkIiwiZG90dGVkIiwiZGFzaGVkIiwiZG91YmxlIl19LGN1cnZlU3R5bGU6e2VudW1zOlsiYmV6aWVyIiwidW5idW5kbGVkLWJlemllciIsImhheXN0YWNrIiwic2VnbWVudHMiLCJzdHJhaWdodCIsInN0cmFpZ2h0LXRyaWFuZ2xlIiwidGF4aSJdfSxmb250RmFtaWx5OntyZWdleDonXihbXFx3LSBcXCJdKyg/OlxccyosXFxzKltcXHctIFxcIl0rKSopJCd9LGZvbnRTdHlsZTp7ZW51bXM6WyJpdGFsaWMiLCJub3JtYWwiLCJvYmxpcXVlIl19LGZvbnRXZWlnaHQ6e2VudW1zOlsibm9ybWFsIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiLCIxMDAiLCIyMDAiLCIzMDAiLCI0MDAiLCI1MDAiLCI2MDAiLCI4MDAiLCI5MDAiLDEwMCwyMDAsMzAwLDQwMCw1MDAsNjAwLDcwMCw4MDAsOTAwXX0sdGV4dERlY29yYXRpb246e2VudW1zOlsibm9uZSIsInVuZGVybGluZSIsIm92ZXJsaW5lIiwibGluZS10aHJvdWdoIl19LHRleHRUcmFuc2Zvcm06e2VudW1zOlsibm9uZSIsInVwcGVyY2FzZSIsImxvd2VyY2FzZSJdfSx0ZXh0V3JhcDp7ZW51bXM6WyJub25lIiwid3JhcCIsImVsbGlwc2lzIl19LHRleHRPdmVyZmxvd1dyYXA6e2VudW1zOlsid2hpdGVzcGFjZSIsImFueXdoZXJlIl19LHRleHRCYWNrZ3JvdW5kU2hhcGU6e2VudW1zOlsicmVjdGFuZ2xlIiwicm91bmRyZWN0YW5nbGUiLCJyb3VuZC1yZWN0YW5nbGUiXX0sbm9kZVNoYXBlOntlbnVtczpbInJlY3RhbmdsZSIsInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIiwiY3V0cmVjdGFuZ2xlIiwiY3V0LXJlY3RhbmdsZSIsImJvdHRvbXJvdW5kcmVjdGFuZ2xlIiwiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSIsImJhcnJlbCIsImVsbGlwc2UiLCJ0cmlhbmdsZSIsInJvdW5kLXRyaWFuZ2xlIiwic3F1YXJlIiwicGVudGFnb24iLCJyb3VuZC1wZW50YWdvbiIsImhleGFnb24iLCJyb3VuZC1oZXhhZ29uIiwiY29uY2F2ZWhleGFnb24iLCJjb25jYXZlLWhleGFnb24iLCJoZXB0YWdvbiIsInJvdW5kLWhlcHRhZ29uIiwib2N0YWdvbiIsInJvdW5kLW9jdGFnb24iLCJ0YWciLCJyb3VuZC10YWciLCJzdGFyIiwiZGlhbW9uZCIsInJvdW5kLWRpYW1vbmQiLCJ2ZWUiLCJyaG9tYm9pZCIsInBvbHlnb24iXX0sb3ZlcmxheVNoYXBlOntlbnVtczpbInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIiwiZWxsaXBzZSJdfSxjb21wb3VuZEluY2x1ZGVMYWJlbHM6e2VudW1zOlsiaW5jbHVkZSIsImV4Y2x1ZGUiXX0sYXJyb3dTaGFwZTp7ZW51bXM6WyJ0ZWUiLCJ0cmlhbmdsZSIsInRyaWFuZ2xlLXRlZSIsImNpcmNsZS10cmlhbmdsZSIsInRyaWFuZ2xlLWNyb3NzIiwidHJpYW5nbGUtYmFja2N1cnZlIiwidmVlIiwic3F1YXJlIiwiY2lyY2xlIiwiZGlhbW9uZCIsImNoZXZyb24iLCJub25lIl19LGFycm93RmlsbDp7ZW51bXM6WyJmaWxsZWQiLCJob2xsb3ciXX0sZGlzcGxheTp7ZW51bXM6WyJlbGVtZW50Iiwibm9uZSJdfSx2aXNpYmlsaXR5OntlbnVtczpbImhpZGRlbiIsInZpc2libGUiXX0sekNvbXBvdW5kRGVwdGg6e2VudW1zOlsiYm90dG9tIiwib3JwaGFuIiwiYXV0byIsInRvcCJdfSx6SW5kZXhDb21wYXJlOntlbnVtczpbImF1dG8iLCJtYW51YWwiXX0sdmFsaWduOntlbnVtczpbInRvcCIsImNlbnRlciIsImJvdHRvbSJdfSxoYWxpZ246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il19LGp1c3RpZmljYXRpb246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiYXV0byJdfSx0ZXh0OntzdHJpbmc6ITB9LGRhdGE6e21hcHBpbmc6ITAscmVnZXg6TygiZGF0YSIpfSxsYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4Ok8oImxheW91dERhdGEiKX0sc2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDpPKCJzY3JhdGNoIil9LG1hcERhdGE6e21hcHBpbmc6ITAscmVnZXg6UCgibWFwRGF0YSIpfSxtYXBMYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4OlAoIm1hcExheW91dERhdGEiKX0sbWFwU2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDpQKCJtYXBTY3JhdGNoIil9LGZuOnttYXBwaW5nOiEwLGZuOiEwfSx1cmw6e3JlZ2V4ZXM6JCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITB9LHVybHM6e3JlZ2V4ZXM6JCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITAsbXVsdGlwbGU6ITB9LHByb3BMaXN0Ontwcm9wTGlzdDohMH0sYW5nbGU6e251bWJlcjohMCx1bml0czoiZGVnfHJhZCIsaW1wbGljaXRVbml0czoicmFkIn0sdGV4dFJvdGF0aW9uOntudW1iZXI6ITAsdW5pdHM6ImRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InJhZCIsZW51bXM6WyJub25lIiwiYXV0b3JvdGF0ZSJdfSxwb2x5Z29uUG9pbnRMaXN0OntudW1iZXI6ITAsbXVsdGlwbGU6ITAsZXZlbk11bHRpcGxlOiEwLG1pbjotMSxtYXg6MSx1bml0bGVzczohMH0sZWRnZURpc3RhbmNlczp7ZW51bXM6WyJpbnRlcnNlY3Rpb24iLCJub2RlLXBvc2l0aW9uIl19LGVkZ2VFbmRwb2ludDp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLHVuaXRzOiIlfHB4fGVtfGRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InB4IixlbnVtczpbImluc2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIiwib3V0c2lkZS10by1saW5lIiwib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIl0sc2luZ2xlRW51bTohMCx2YWxpZGF0ZTpmdW5jdGlvbihncixmcil7c3dpdGNoKGdyLmxlbmd0aCl7Y2FzZSAyOnJldHVybiBmclswXSE9PSJkZWciJiZmclswXSE9PSJyYWQiJiZmclsxXSE9PSJkZWciJiZmclsxXSE9PSJyYWQiO2Nhc2UgMTpyZXR1cm4gbXQoZ3JbMF0pfHxmclswXT09PSJkZWcifHxmclswXT09PSJyYWQiO2RlZmF1bHQ6cmV0dXJuITF9fX0sZWFzaW5nOntyZWdleGVzOlsiXihzcHJpbmcpXFxzKlxcKFxccyooIit5KyIpXFxzKixcXHMqKCIreSsiKVxccypcXCkkIiwiXihjdWJpYy1iZXppZXIpXFxzKlxcKFxccyooIit5KyIpXFxzKixcXHMqKCIreSsiKVxccyosXFxzKigiK3krIilcXHMqLFxccyooIit5KyIpXFxzKlxcKSQiXSxlbnVtczpbImxpbmVhciIsImVhc2UiLCJlYXNlLWluIiwiZWFzZS1vdXQiLCJlYXNlLWluLW91dCIsImVhc2UtaW4tc2luZSIsImVhc2Utb3V0LXNpbmUiLCJlYXNlLWluLW91dC1zaW5lIiwiZWFzZS1pbi1xdWFkIiwiZWFzZS1vdXQtcXVhZCIsImVhc2UtaW4tb3V0LXF1YWQiLCJlYXNlLWluLWN1YmljIiwiZWFzZS1vdXQtY3ViaWMiLCJlYXNlLWluLW91dC1jdWJpYyIsImVhc2UtaW4tcXVhcnQiLCJlYXNlLW91dC1xdWFydCIsImVhc2UtaW4tb3V0LXF1YXJ0IiwiZWFzZS1pbi1xdWludCIsImVhc2Utb3V0LXF1aW50IiwiZWFzZS1pbi1vdXQtcXVpbnQiLCJlYXNlLWluLWV4cG8iLCJlYXNlLW91dC1leHBvIiwiZWFzZS1pbi1vdXQtZXhwbyIsImVhc2UtaW4tY2lyYyIsImVhc2Utb3V0LWNpcmMiLCJlYXNlLWluLW91dC1jaXJjIl19LGdyYWRpZW50RGlyZWN0aW9uOntlbnVtczpbInRvLWJvdHRvbSIsInRvLXRvcCIsInRvLWxlZnQiLCJ0by1yaWdodCIsInRvLWJvdHRvbS1yaWdodCIsInRvLWJvdHRvbS1sZWZ0IiwidG8tdG9wLXJpZ2h0IiwidG8tdG9wLWxlZnQiLCJ0by1yaWdodC1ib3R0b20iLCJ0by1sZWZ0LWJvdHRvbSIsInRvLXJpZ2h0LXRvcCIsInRvLWxlZnQtdG9wIl19LGJvdW5kc0V4cGFuc2lvbjp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLG1pbjowLHZhbGlkYXRlOmZ1bmN0aW9uKGdyKXt2YXIgZnI9Z3IubGVuZ3RoO3JldHVybiBmcj09PTF8fGZyPT09Mnx8ZnI9PT00fX19O3ZhciBxPXt6ZXJvTm9uWmVybzpmdW5jdGlvbihncixmcil7cmV0dXJuKGdyPT1udWxsfHxmcj09bnVsbCkmJmdyIT09ZnJ8fGdyPT0wJiZmciE9MD8hMDpnciE9MCYmZnI9PTB9LGFueTpmdW5jdGlvbihncixmcil7cmV0dXJuIGdyIT1mcn0sZW1wdHlOb25FbXB0eTpmdW5jdGlvbihncixmcil7dmFyIEpyPVooZ3IpLHZpPVooZnIpO3JldHVybiBKciYmIXZpfHwhSnImJnZpfX0sUz16Zi50eXBlcyxWPVt7bmFtZToibGFiZWwiLHR5cGU6Uy50ZXh0LHRyaWdnZXJzQm91bmRzOnEuYW55LHRyaWdnZXJzWk9yZGVyOnEuZW1wdHlOb25FbXB0eX0se25hbWU6InRleHQtcm90YXRpb24iLHR5cGU6Uy50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi14Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi15Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxZPVt7bmFtZToic291cmNlLWxhYmVsIix0eXBlOlMudGV4dCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS10ZXh0LXJvdGF0aW9uIix0eXBlOlMudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToic291cmNlLXRleHQtbWFyZ2luLXgiLHR5cGU6Uy5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS10ZXh0LW1hcmdpbi15Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1vZmZzZXQiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fV0scnQ9W3tuYW1lOiJ0YXJnZXQtbGFiZWwiLHR5cGU6Uy50ZXh0LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtcm90YXRpb24iLHR5cGU6Uy50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1tYXJnaW4teCIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtbWFyZ2luLXkiLHR5cGU6Uy5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRhcmdldC10ZXh0LW9mZnNldCIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxvdD1be25hbWU6ImZvbnQtZmFtaWx5Iix0eXBlOlMuZm9udEZhbWlseSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImZvbnQtc3R5bGUiLHR5cGU6Uy5mb250U3R5bGUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJmb250LXdlaWdodCIsdHlwZTpTLmZvbnRXZWlnaHQsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJmb250LXNpemUiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC10cmFuc2Zvcm0iLHR5cGU6Uy50ZXh0VHJhbnNmb3JtLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC13cmFwIix0eXBlOlMudGV4dFdyYXAsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LW92ZXJmbG93LXdyYXAiLHR5cGU6Uy50ZXh0T3ZlcmZsb3dXcmFwLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1tYXgtd2lkdGgiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1vdXRsaW5lLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImxpbmUtaGVpZ2h0Iix0eXBlOlMucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxodD1be25hbWU6InRleHQtdmFsaWduIix0eXBlOlMudmFsaWduLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1oYWxpZ24iLHR5cGU6Uy5oYWxpZ24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJjb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToidGV4dC1vdXRsaW5lLWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1wYWRkaW5nIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRleHQtYm9yZGVyLW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1ib3JkZXItY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InRleHQtYm9yZGVyLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRleHQtYm9yZGVyLXN0eWxlIix0eXBlOlMuYm9yZGVyU3R5bGUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiLHR5cGU6Uy50ZXh0QmFja2dyb3VuZFNoYXBlLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGV4dC1qdXN0aWZpY2F0aW9uIix0eXBlOlMuanVzdGlmaWNhdGlvbn1dLGR0PVt7bmFtZToiZXZlbnRzIix0eXBlOlMuYm9vbH0se25hbWU6InRleHQtZXZlbnRzIix0eXBlOlMuYm9vbH1dLEx0PVt7bmFtZToiZGlzcGxheSIsdHlwZTpTLmRpc3BsYXksdHJpZ2dlcnNaT3JkZXI6cS5hbnksdHJpZ2dlcnNCb3VuZHM6cS5hbnksdHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVyczohMH0se25hbWU6InZpc2liaWxpdHkiLHR5cGU6Uy52aXNpYmlsaXR5LHRyaWdnZXJzWk9yZGVyOnEuYW55fSx7bmFtZToib3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNaT3JkZXI6cS56ZXJvTm9uWmVyb30se25hbWU6InRleHQtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJtaW4tem9vbWVkLWZvbnQtc2l6ZSIsdHlwZTpTLnNpemV9LHtuYW1lOiJ6LWNvbXBvdW5kLWRlcHRoIix0eXBlOlMuekNvbXBvdW5kRGVwdGgsdHJpZ2dlcnNaT3JkZXI6cS5hbnl9LHtuYW1lOiJ6LWluZGV4LWNvbXBhcmUiLHR5cGU6Uy56SW5kZXhDb21wYXJlLHRyaWdnZXJzWk9yZGVyOnEuYW55fSx7bmFtZToiei1pbmRleCIsdHlwZTpTLm5vbk5lZ2F0aXZlSW50LHRyaWdnZXJzWk9yZGVyOnEuYW55fV0sa3Q9W3tuYW1lOiJvdmVybGF5LXBhZGRpbmciLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToib3ZlcmxheS1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToib3ZlcmxheS1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczpxLnplcm9Ob25aZXJvfSx7bmFtZToib3ZlcmxheS1zaGFwZSIsdHlwZTpTLm92ZXJsYXlTaGFwZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX1dLER0PVt7bmFtZToidW5kZXJsYXktcGFkZGluZyIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ1bmRlcmxheS1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToidW5kZXJsYXktb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6cS56ZXJvTm9uWmVyb30se25hbWU6InVuZGVybGF5LXNoYXBlIix0eXBlOlMub3ZlcmxheVNoYXBlLHRyaWdnZXJzQm91bmRzOnEuYW55fV0sUHQ9W3tuYW1lOiJ0cmFuc2l0aW9uLXByb3BlcnR5Iix0eXBlOlMucHJvcExpc3R9LHtuYW1lOiJ0cmFuc2l0aW9uLWR1cmF0aW9uIix0eXBlOlMudGltZX0se25hbWU6InRyYW5zaXRpb24tZGVsYXkiLHR5cGU6Uy50aW1lfSx7bmFtZToidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLHR5cGU6Uy5lYXNpbmd9XSwkdD1mdW5jdGlvbihncixmcil7cmV0dXJuIGZyLnZhbHVlPT09ImxhYmVsIj8tZ3IucG9vbEluZGV4KCk6ZnIucGZWYWx1ZX0sWnQ9W3tuYW1lOiJoZWlnaHQiLHR5cGU6Uy5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueSxoYXNoT3ZlcnJpZGU6JHR9LHtuYW1lOiJ3aWR0aCIsdHlwZTpTLm5vZGVTaXplLHRyaWdnZXJzQm91bmRzOnEuYW55LGhhc2hPdmVycmlkZTokdH0se25hbWU6InNoYXBlIix0eXBlOlMubm9kZVNoYXBlLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToic2hhcGUtcG9seWdvbi1wb2ludHMiLHR5cGU6Uy5wb2x5Z29uUG9pbnRMaXN0LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToiYmFja2dyb3VuZC1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToiYmFja2dyb3VuZC1maWxsIix0eXBlOlMuZmlsbH0se25hbWU6ImJhY2tncm91bmQtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJiYWNrZ3JvdW5kLWJsYWNrZW4iLHR5cGU6Uy5uT25lT25lTnVtYmVyfSx7bmFtZToiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpTLmNvbG9yc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6Uy5wZXJjZW50YWdlc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uIix0eXBlOlMuZ3JhZGllbnREaXJlY3Rpb259LHtuYW1lOiJwYWRkaW5nIix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InBhZGRpbmctcmVsYXRpdmUtdG8iLHR5cGU6Uy5wYWRkaW5nUmVsYXRpdmVUbyx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImJvdW5kcy1leHBhbnNpb24iLHR5cGU6Uy5ib3VuZHNFeHBhbnNpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxZdD1be25hbWU6ImJvcmRlci1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToiYm9yZGVyLW9wYWNpdHkiLHR5cGU6Uy56ZXJvT25lTnVtYmVyfSx7bmFtZToiYm9yZGVyLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImJvcmRlci1zdHlsZSIsdHlwZTpTLmJvcmRlclN0eWxlfV0scXQ9W3tuYW1lOiJiYWNrZ3JvdW5kLWltYWdlIix0eXBlOlMudXJsc30se25hbWU6ImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iLHR5cGU6Uy5iZ0Nyb3NzT3JpZ2lufSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcnN9LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50Iix0eXBlOlMuYmdDb250YWlubWVudH0se25hbWU6ImJhY2tncm91bmQtaW1hZ2Utc21vb3RoaW5nIix0eXBlOlMuYm9vbHN9LHtuYW1lOiJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiLHR5cGU6Uy5iZ1Bvc30se25hbWU6ImJhY2tncm91bmQtcG9zaXRpb24teSIsdHlwZTpTLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byIsdHlwZTpTLmJnUmVsYXRpdmVUb30se25hbWU6ImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIix0eXBlOlMuYmdSZWxhdGl2ZVRvfSx7bmFtZToiYmFja2dyb3VuZC1yZXBlYXQiLHR5cGU6Uy5iZ1JlcGVhdH0se25hbWU6ImJhY2tncm91bmQtZml0Iix0eXBlOlMuYmdGaXR9LHtuYW1lOiJiYWNrZ3JvdW5kLWNsaXAiLHR5cGU6Uy5iZ0NsaXB9LHtuYW1lOiJiYWNrZ3JvdW5kLXdpZHRoIix0eXBlOlMuYmdXSH0se25hbWU6ImJhY2tncm91bmQtaGVpZ2h0Iix0eXBlOlMuYmdXSH0se25hbWU6ImJhY2tncm91bmQtb2Zmc2V0LXgiLHR5cGU6Uy5iZ1Bvc30se25hbWU6ImJhY2tncm91bmQtb2Zmc2V0LXkiLHR5cGU6Uy5iZ1Bvc31dLG5lPVt7bmFtZToicG9zaXRpb24iLHR5cGU6Uy5wb3NpdGlvbix0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIix0eXBlOlMuY29tcG91bmRJbmNsdWRlTGFiZWxzLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibWluLXdpZHRoIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Im1pbi13aWR0aC1iaWFzLWxlZnQiLHR5cGU6Uy5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibWluLXdpZHRoLWJpYXMtcmlnaHQiLHR5cGU6Uy5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibWluLWhlaWdodCIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0LWJpYXMtdG9wIix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Im1pbi1oZWlnaHQtYmlhcy1ib3R0b20iLHR5cGU6Uy5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fV0sR3Q9W3tuYW1lOiJsaW5lLXN0eWxlIix0eXBlOlMubGluZVN0eWxlfSx7bmFtZToibGluZS1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToibGluZS1maWxsIix0eXBlOlMuZmlsbH0se25hbWU6ImxpbmUtY2FwIix0eXBlOlMubGluZUNhcH0se25hbWU6ImxpbmUtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJsaW5lLWRhc2gtcGF0dGVybiIsdHlwZTpTLm51bWJlcnN9LHtuYW1lOiJsaW5lLWRhc2gtb2Zmc2V0Iix0eXBlOlMubnVtYmVyfSx7bmFtZToibGluZS1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpTLmNvbG9yc30se25hbWU6ImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6Uy5wZXJjZW50YWdlc30se25hbWU6ImN1cnZlLXN0eWxlIix0eXBlOlMuY3VydmVTdHlsZSx0cmlnZ2Vyc0JvdW5kczpxLmFueSx0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzOiEwfSx7bmFtZToiaGF5c3RhY2stcmFkaXVzIix0eXBlOlMuemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS1lbmRwb2ludCIsdHlwZTpTLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRhcmdldC1lbmRwb2ludCIsdHlwZTpTLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIix0eXBlOlMuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHRzIix0eXBlOlMubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNlZ21lbnQtZGlzdGFuY2VzIix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToic2VnbWVudC13ZWlnaHRzIix0eXBlOlMubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InRheGktdHVybiIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGF4aS10dXJuLW1pbi1kaXN0YW5jZSIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJ0YXhpLWRpcmVjdGlvbiIsdHlwZTpTLmF4aXNEaXJlY3Rpb24sdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJlZGdlLWRpc3RhbmNlcyIsdHlwZTpTLmVkZ2VEaXN0YW5jZXMsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJhcnJvdy1zY2FsZSIsdHlwZTpTLnBvc2l0aXZlTnVtYmVyLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToibG9vcC1kaXJlY3Rpb24iLHR5cGU6Uy5hbmdsZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Imxvb3Atc3dlZXAiLHR5cGU6Uy5hbmdsZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6InNvdXJjZS1kaXN0YW5jZS1mcm9tLW5vZGUiLHR5cGU6Uy5zaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSIsdHlwZTpTLnNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9XSxnZT1be25hbWU6Imdob3N0Iix0eXBlOlMuYm9vbCx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6Imdob3N0LW9mZnNldC14Iix0eXBlOlMuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6cS5hbnl9LHtuYW1lOiJnaG9zdC1vZmZzZXQteSIsdHlwZTpTLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnEuYW55fSx7bmFtZToiZ2hvc3Qtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9XSxiZT1be25hbWU6InNlbGVjdGlvbi1ib3gtY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6InNlbGVjdGlvbi1ib3gtb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIsdHlwZTpTLmNvbG9yfSx7bmFtZToic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiLHR5cGU6Uy5zaXplfSx7bmFtZToiYWN0aXZlLWJnLWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJhY3RpdmUtYmctb3BhY2l0eSIsdHlwZTpTLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJhY3RpdmUtYmctc2l6ZSIsdHlwZTpTLnNpemV9LHtuYW1lOiJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiLHR5cGU6Uy5jb2xvcn0se25hbWU6Im91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn1dLGllPVtdO3pmLnBpZUJhY2tncm91bmROPTE2LGllLnB1c2goe25hbWU6InBpZS1zaXplIix0eXBlOlMuc2l6ZU1heWJlUGVyY2VudH0pO2Zvcih2YXIgRmU9MTtGZTw9emYucGllQmFja2dyb3VuZE47RmUrKylpZS5wdXNoKHtuYW1lOiJwaWUtIitGZSsiLWJhY2tncm91bmQtY29sb3IiLHR5cGU6Uy5jb2xvcn0pLGllLnB1c2goe25hbWU6InBpZS0iK0ZlKyItYmFja2dyb3VuZC1zaXplIix0eXBlOlMucGVyY2VudH0pLGllLnB1c2goe25hbWU6InBpZS0iK0ZlKyItYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOlMuemVyb09uZU51bWJlcn0pO3ZhciB3ZT1bXSxibj16Zi5hcnJvd1ByZWZpeGVzPVsic291cmNlIiwibWlkLXNvdXJjZSIsInRhcmdldCIsIm1pZC10YXJnZXQiXTtbe25hbWU6ImFycm93LXNoYXBlIix0eXBlOlMuYXJyb3dTaGFwZSx0cmlnZ2Vyc0JvdW5kczpxLmFueX0se25hbWU6ImFycm93LWNvbG9yIix0eXBlOlMuY29sb3J9LHtuYW1lOiJhcnJvdy1maWxsIix0eXBlOlMuYXJyb3dGaWxsfV0uZm9yRWFjaChmdW5jdGlvbih2bil7Ym4uZm9yRWFjaChmdW5jdGlvbihncil7dmFyIGZyPWdyKyItIit2bi5uYW1lLEpyPXZuLnR5cGUsdmk9dm4udHJpZ2dlcnNCb3VuZHM7d2UucHVzaCh7bmFtZTpmcix0eXBlOkpyLHRyaWdnZXJzQm91bmRzOnZpfSl9KX0se30pO3ZhciB6ZT16Zi5wcm9wZXJ0aWVzPVtdLmNvbmNhdChkdCxQdCxMdCxrdCxEdCxnZSxodCxvdCxWLFkscnQsWnQsWXQscXQsaWUsbmUsR3Qsd2UsYmUpLEdlPXpmLnByb3BlcnR5R3JvdXBzPXtiZWhhdmlvcjpkdCx0cmFuc2l0aW9uOlB0LHZpc2liaWxpdHk6THQsb3ZlcmxheTprdCx1bmRlcmxheTpEdCxnaG9zdDpnZSxjb21tb25MYWJlbDpodCxsYWJlbERpbWVuc2lvbnM6b3QsbWFpbkxhYmVsOlYsc291cmNlTGFiZWw6WSx0YXJnZXRMYWJlbDpydCxub2RlQm9keTpadCxub2RlQm9yZGVyOll0LGJhY2tncm91bmRJbWFnZTpxdCxwaWU6aWUsY29tcG91bmQ6bmUsZWRnZUxpbmU6R3QsZWRnZUFycm93OndlLGNvcmU6YmV9LEVuPXpmLnByb3BlcnR5R3JvdXBOYW1lcz17fSxJbj16Zi5wcm9wZXJ0eUdyb3VwS2V5cz1PYmplY3Qua2V5cyhHZSk7SW4uZm9yRWFjaChmdW5jdGlvbih2bil7RW5bdm5dPUdlW3ZuXS5tYXAoZnVuY3Rpb24oZ3Ipe3JldHVybiBnci5uYW1lfSksR2Vbdm5dLmZvckVhY2goZnVuY3Rpb24oZ3Ipe3JldHVybiBnci5ncm91cEtleT12bn0pfSk7dmFyIFluPXpmLmFsaWFzZXM9W3tuYW1lOiJjb250ZW50Iixwb2ludHNUbzoibGFiZWwifSx7bmFtZToiY29udHJvbC1wb2ludC1kaXN0YW5jZSIscG9pbnRzVG86ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIn0se25hbWU6ImNvbnRyb2wtcG9pbnQtd2VpZ2h0Iixwb2ludHNUbzoiY29udHJvbC1wb2ludC13ZWlnaHRzIn0se25hbWU6ImVkZ2UtdGV4dC1yb3RhdGlvbiIscG9pbnRzVG86InRleHQtcm90YXRpb24ifSx7bmFtZToicGFkZGluZy1sZWZ0Iixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLXJpZ2h0Iixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLXRvcCIscG9pbnRzVG86InBhZGRpbmcifSx7bmFtZToicGFkZGluZy1ib3R0b20iLHBvaW50c1RvOiJwYWRkaW5nIn1dO3pmLnByb3BlcnR5TmFtZXM9emUubWFwKGZ1bmN0aW9uKHZuKXtyZXR1cm4gdm4ubmFtZX0pO2Zvcih2YXIgU249MDtTbjx6ZS5sZW5ndGg7U24rKyl7dmFyIFduPXplW1NuXTt6ZVtXbi5uYW1lXT1Xbn1mb3IodmFyIHJyPTA7cnI8WW4ubGVuZ3RoO3JyKyspe3ZhciB3cj1Zbltycl0sdXI9emVbd3IucG9pbnRzVG9dLGVyPXtuYW1lOndyLm5hbWUsYWxpYXM6ITAscG9pbnRzVG86dXJ9O3plLnB1c2goZXIpLHplW3dyLm5hbWVdPWVyfX0pKCksemYuZ2V0RGVmYXVsdFByb3BlcnR5PWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmdldERlZmF1bHRQcm9wZXJ0aWVzKClbeV19LHpmLmdldERlZmF1bHRQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fcHJpdmF0ZTtpZih5LmRlZmF1bHRQcm9wZXJ0aWVzIT1udWxsKXJldHVybiB5LmRlZmF1bHRQcm9wZXJ0aWVzO2Zvcih2YXIgZz1kZSh7InNlbGVjdGlvbi1ib3gtY29sb3IiOiIjZGRkIiwic2VsZWN0aW9uLWJveC1vcGFjaXR5IjouNjUsInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIjoiI2FhYSIsInNlbGVjdGlvbi1ib3gtYm9yZGVyLXdpZHRoIjoxLCJhY3RpdmUtYmctY29sb3IiOiJibGFjayIsImFjdGl2ZS1iZy1vcGFjaXR5IjouMTUsImFjdGl2ZS1iZy1zaXplIjozMCwib3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yIjoiIzAwMCIsIm91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5IjouMTI1LGV2ZW50czoieWVzIiwidGV4dC1ldmVudHMiOiJubyIsInRleHQtdmFsaWduIjoidG9wIiwidGV4dC1oYWxpZ24iOiJjZW50ZXIiLCJ0ZXh0LWp1c3RpZmljYXRpb24iOiJhdXRvIiwibGluZS1oZWlnaHQiOjEsY29sb3I6IiMwMDAiLCJ0ZXh0LW91dGxpbmUtY29sb3IiOiIjMDAwIiwidGV4dC1vdXRsaW5lLXdpZHRoIjowLCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSI6MSwidGV4dC1vcGFjaXR5IjoxLCJ0ZXh0LWRlY29yYXRpb24iOiJub25lIiwidGV4dC10cmFuc2Zvcm0iOiJub25lIiwidGV4dC13cmFwIjoibm9uZSIsInRleHQtb3ZlcmZsb3ctd3JhcCI6IndoaXRlc3BhY2UiLCJ0ZXh0LW1heC13aWR0aCI6OTk5OSwidGV4dC1iYWNrZ3JvdW5kLWNvbG9yIjoiIzAwMCIsInRleHQtYmFja2dyb3VuZC1vcGFjaXR5IjowLCJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiOiJyZWN0YW5nbGUiLCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyI6MCwidGV4dC1ib3JkZXItb3BhY2l0eSI6MCwidGV4dC1ib3JkZXItd2lkdGgiOjAsInRleHQtYm9yZGVyLXN0eWxlIjoic29saWQiLCJ0ZXh0LWJvcmRlci1jb2xvciI6IiMwMDAiLCJmb250LWZhbWlseSI6IkhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiLCJmb250LXN0eWxlIjoibm9ybWFsIiwiZm9udC13ZWlnaHQiOiJub3JtYWwiLCJmb250LXNpemUiOjE2LCJtaW4tem9vbWVkLWZvbnQtc2l6ZSI6MCwidGV4dC1yb3RhdGlvbiI6Im5vbmUiLCJzb3VyY2UtdGV4dC1yb3RhdGlvbiI6Im5vbmUiLCJ0YXJnZXQtdGV4dC1yb3RhdGlvbiI6Im5vbmUiLHZpc2liaWxpdHk6InZpc2libGUiLGRpc3BsYXk6ImVsZW1lbnQiLG9wYWNpdHk6MSwiei1jb21wb3VuZC1kZXB0aCI6ImF1dG8iLCJ6LWluZGV4LWNvbXBhcmUiOiJhdXRvIiwiei1pbmRleCI6MCxsYWJlbDoiIiwidGV4dC1tYXJnaW4teCI6MCwidGV4dC1tYXJnaW4teSI6MCwic291cmNlLWxhYmVsIjoiIiwic291cmNlLXRleHQtb2Zmc2V0IjowLCJzb3VyY2UtdGV4dC1tYXJnaW4teCI6MCwic291cmNlLXRleHQtbWFyZ2luLXkiOjAsInRhcmdldC1sYWJlbCI6IiIsInRhcmdldC10ZXh0LW9mZnNldCI6MCwidGFyZ2V0LXRleHQtbWFyZ2luLXgiOjAsInRhcmdldC10ZXh0LW1hcmdpbi15IjowLCJvdmVybGF5LW9wYWNpdHkiOjAsIm92ZXJsYXktY29sb3IiOiIjMDAwIiwib3ZlcmxheS1wYWRkaW5nIjoxMCwib3ZlcmxheS1zaGFwZSI6InJvdW5kLXJlY3RhbmdsZSIsInVuZGVybGF5LW9wYWNpdHkiOjAsInVuZGVybGF5LWNvbG9yIjoiIzAwMCIsInVuZGVybGF5LXBhZGRpbmciOjEwLCJ1bmRlcmxheS1zaGFwZSI6InJvdW5kLXJlY3RhbmdsZSIsInRyYW5zaXRpb24tcHJvcGVydHkiOiJub25lIiwidHJhbnNpdGlvbi1kdXJhdGlvbiI6MCwidHJhbnNpdGlvbi1kZWxheSI6MCwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iOiJsaW5lYXIiLCJiYWNrZ3JvdW5kLWJsYWNrZW4iOjAsImJhY2tncm91bmQtY29sb3IiOiIjOTk5IiwiYmFja2dyb3VuZC1maWxsIjoic29saWQiLCJiYWNrZ3JvdW5kLW9wYWNpdHkiOjEsImJhY2tncm91bmQtaW1hZ2UiOiJub25lIiwiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiI6ImFub255bW91cyIsImJhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSI6MSwiYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCI6Imluc2lkZSIsImJhY2tncm91bmQtaW1hZ2Utc21vb3RoaW5nIjoieWVzIiwiYmFja2dyb3VuZC1wb3NpdGlvbi14IjoiNTAlIiwiYmFja2dyb3VuZC1wb3NpdGlvbi15IjoiNTAlIiwiYmFja2dyb3VuZC1vZmZzZXQteCI6MCwiYmFja2dyb3VuZC1vZmZzZXQteSI6MCwiYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byI6ImluY2x1ZGUtcGFkZGluZyIsImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIjoiaW5jbHVkZS1wYWRkaW5nIiwiYmFja2dyb3VuZC1yZXBlYXQiOiJuby1yZXBlYXQiLCJiYWNrZ3JvdW5kLWZpdCI6Im5vbmUiLCJiYWNrZ3JvdW5kLWNsaXAiOiJub2RlIiwiYmFja2dyb3VuZC13aWR0aCI6ImF1dG8iLCJiYWNrZ3JvdW5kLWhlaWdodCI6ImF1dG8iLCJib3JkZXItY29sb3IiOiIjMDAwIiwiYm9yZGVyLW9wYWNpdHkiOjEsImJvcmRlci13aWR0aCI6MCwiYm9yZGVyLXN0eWxlIjoic29saWQiLGhlaWdodDozMCx3aWR0aDozMCxzaGFwZToiZWxsaXBzZSIsInNoYXBlLXBvbHlnb24tcG9pbnRzIjoiLTEsIC0xLCAgIDEsIC0xLCAgIDEsIDEsICAgLTEsIDEiLCJib3VuZHMtZXhwYW5zaW9uIjowLCJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiI6InRvLWJvdHRvbSIsImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIixnaG9zdDoibm8iLCJnaG9zdC1vZmZzZXQteSI6MCwiZ2hvc3Qtb2Zmc2V0LXgiOjAsImdob3N0LW9wYWNpdHkiOjAscGFkZGluZzowLCJwYWRkaW5nLXJlbGF0aXZlLXRvIjoid2lkdGgiLHBvc2l0aW9uOiJvcmlnaW4iLCJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyI6ImluY2x1ZGUiLCJtaW4td2lkdGgiOjAsIm1pbi13aWR0aC1iaWFzLWxlZnQiOjAsIm1pbi13aWR0aC1iaWFzLXJpZ2h0IjowLCJtaW4taGVpZ2h0IjowLCJtaW4taGVpZ2h0LWJpYXMtdG9wIjowLCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIjowfSx7InBpZS1zaXplIjoiMTAwJSJ9LFt7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtY29sb3IiLHZhbHVlOiJibGFjayJ9LHtuYW1lOiJwaWUte3tpfX0tYmFja2dyb3VuZC1zaXplIix2YWx1ZToiMCUifSx7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtb3BhY2l0eSIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbihxLFMpe2Zvcih2YXIgVj0xO1Y8PXpmLnBpZUJhY2tncm91bmROO1YrKyl7dmFyIFk9Uy5uYW1lLnJlcGxhY2UoInt7aX19IixWKSxydD1TLnZhbHVlO3FbWV09cnR9cmV0dXJuIHF9LHt9KSx7ImxpbmUtc3R5bGUiOiJzb2xpZCIsImxpbmUtY29sb3IiOiIjOTk5IiwibGluZS1maWxsIjoic29saWQiLCJsaW5lLWNhcCI6ImJ1dHQiLCJsaW5lLW9wYWNpdHkiOjEsImxpbmUtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwibGluZS1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIiwiY29udHJvbC1wb2ludC1zdGVwLXNpemUiOjQwLCJjb250cm9sLXBvaW50LXdlaWdodHMiOi41LCJzZWdtZW50LXdlaWdodHMiOi41LCJzZWdtZW50LWRpc3RhbmNlcyI6MjAsInRheGktdHVybiI6IjUwJSIsInRheGktdHVybi1taW4tZGlzdGFuY2UiOjEwLCJ0YXhpLWRpcmVjdGlvbiI6ImF1dG8iLCJlZGdlLWRpc3RhbmNlcyI6ImludGVyc2VjdGlvbiIsImN1cnZlLXN0eWxlIjoiaGF5c3RhY2siLCJoYXlzdGFjay1yYWRpdXMiOjAsImFycm93LXNjYWxlIjoxLCJsb29wLWRpcmVjdGlvbiI6Ii00NWRlZyIsImxvb3Atc3dlZXAiOiItOTBkZWciLCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIjowLCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIjowLCJzb3VyY2UtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLW5vZGUiLCJ0YXJnZXQtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLW5vZGUiLCJsaW5lLWRhc2gtcGF0dGVybiI6WzYsM10sImxpbmUtZGFzaC1vZmZzZXQiOjB9LFt7bmFtZToiYXJyb3ctc2hhcGUiLHZhbHVlOiJub25lIn0se25hbWU6ImFycm93LWNvbG9yIix2YWx1ZToiIzk5OSJ9LHtuYW1lOiJhcnJvdy1maWxsIix2YWx1ZToiZmlsbGVkIn1dLnJlZHVjZShmdW5jdGlvbihxLFMpe3JldHVybiB6Zi5hcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24oVil7dmFyIFk9VisiLSIrUy5uYW1lLHJ0PVMudmFsdWU7cVtZXT1ydH0pLHF9LHt9KSkseD17fSxUPTA7VDx0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1QrKyl7dmFyIEw9dGhpcy5wcm9wZXJ0aWVzW1RdO2lmKCFMLnBvaW50c1RvKXt2YXIgTz1MLm5hbWUsUD1nW09dLCQ9dGhpcy5wYXJzZShPLFApO3hbT109JH19cmV0dXJuIHkuZGVmYXVsdFByb3BlcnRpZXM9eCx5LmRlZmF1bHRQcm9wZXJ0aWVzfSx6Zi5hZGREZWZhdWx0U3R5bGVzaGVldD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0b3IoIjpwYXJlbnQiKS5jc3Moe3NoYXBlOiJyZWN0YW5nbGUiLHBhZGRpbmc6MTAsImJhY2tncm91bmQtY29sb3IiOiIjZWVlIiwiYm9yZGVyLWNvbG9yIjoiI2NjYyIsImJvcmRlci13aWR0aCI6MX0pLnNlbGVjdG9yKCJlZGdlIikuY3NzKHt3aWR0aDozfSkuc2VsZWN0b3IoIjpsb29wIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIifSkuc2VsZWN0b3IoImVkZ2U6Y29tcG91bmQiKS5jc3MoeyJjdXJ2ZS1zdHlsZSI6ImJlemllciIsInNvdXJjZS1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSIsInRhcmdldC1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSJ9KS5zZWxlY3RvcigiOnNlbGVjdGVkIikuY3NzKHsiYmFja2dyb3VuZC1jb2xvciI6IiMwMTY5RDkiLCJsaW5lLWNvbG9yIjoiIzAxNjlEOSIsInNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJ0YXJnZXQtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJtaWQtdGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSJ9KS5zZWxlY3RvcigiOnBhcmVudDpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjQ0NFMUY5IiwiYm9yZGVyLWNvbG9yIjoiI2FlYzhlNSJ9KS5zZWxlY3RvcigiOmFjdGl2ZSIpLmNzcyh7Im92ZXJsYXktY29sb3IiOiJibGFjayIsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktb3BhY2l0eSI6LjI1fSksdGhpcy5kZWZhdWx0TGVuZ3RoPXRoaXMubGVuZ3RofTt2YXIgZEM9e307ZEMucGFyc2U9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcztpZih5dChnKSlyZXR1cm4gTC5wYXJzZUltcGxXYXJuKHksZyx4LFQpO3ZhciBPPVQ9PT0ibWFwcGluZyJ8fFQ9PT0hMHx8VD09PSExfHxUPT1udWxsPyJkb250Y2FyZSI6VCxQPXg/InQiOiJmIiwkPSIiK2cscT1pZCh5LCQsUCxPKSxTPUwucHJvcENhY2hlPUwucHJvcENhY2hlfHxbXSxWO3JldHVybihWPVNbcV0pfHwoVj1TW3FdPUwucGFyc2VJbXBsV2Fybih5LGcseCxUKSksKHh8fFQ9PT0ibWFwcGluZyIpJiYoVj1WYihWKSxWJiYoVi52YWx1ZT1WYihWLnZhbHVlKSkpLFZ9LGRDLnBhcnNlSW1wbFdhcm49ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcy5wYXJzZUltcGwoeSxnLHgsVCk7cmV0dXJuIUwmJmchPW51bGwmJlNjKCJUaGUgc3R5bGUgcHJvcGVydHkgYCIuY29uY2F0KHksIjogIikuY29uY2F0KGcsImAgaXMgaW52YWxpZCIpKSxMJiYoTC5uYW1lPT09IndpZHRoInx8TC5uYW1lPT09ImhlaWdodCIpJiZnPT09ImxhYmVsIiYmU2MoIlRoZSBzdHlsZSB2YWx1ZSBvZiBgbGFiZWxgIGlzIGRlcHJlY2F0ZWQgZm9yIGAiK0wubmFtZSsiYCIpLEx9LGRDLnBhcnNlSW1wbD1mdW5jdGlvbih5LGcseCxUKXt2YXIgTD10aGlzO3k9Z24oeSk7dmFyIE89TC5wcm9wZXJ0aWVzW3ldLFA9ZywkPUwudHlwZXM7aWYoIU98fGc9PT12b2lkIDApcmV0dXJuIG51bGw7Ty5hbGlhcyYmKE89Ty5wb2ludHNUbyx5PU8ubmFtZSk7dmFyIHE9bXQoZyk7cSYmKGc9Zy50cmltKCkpO3ZhciBTPU8udHlwZTtpZighUylyZXR1cm4gbnVsbDtpZih4JiYoZz09PSIifHxnPT09bnVsbCkpcmV0dXJue25hbWU6eSx2YWx1ZTpnLGJ5cGFzczohMCxkZWxldGVCeXBhc3M6ITB9O2lmKHl0KGcpKXJldHVybntuYW1lOnksdmFsdWU6ZyxzdHJWYWx1ZToiZm4iLG1hcHBlZDokLmZuLGJ5cGFzczp4fTt2YXIgVixZO2lmKCEoIXF8fFR8fGcubGVuZ3RoPDd8fGdbMV0hPT0iYSIpKXtpZihnLmxlbmd0aD49NyYmZ1swXT09PSJkIiYmKFY9bmV3IFJlZ0V4cCgkLmRhdGEucmVnZXgpLmV4ZWMoZykpKXtpZih4KXJldHVybiExO3ZhciBydD0kLmRhdGE7cmV0dXJue25hbWU6eSx2YWx1ZTpWLHN0clZhbHVlOiIiK2csbWFwcGVkOnJ0LGZpZWxkOlZbMV0sYnlwYXNzOnh9fWVsc2UgaWYoZy5sZW5ndGg+PTEwJiZnWzBdPT09Im0iJiYoWT1uZXcgUmVnRXhwKCQubWFwRGF0YS5yZWdleCkuZXhlYyhnKSkpe2lmKHh8fFMubXVsdGlwbGUpcmV0dXJuITE7dmFyIG90PSQubWFwRGF0YTtpZighKFMuY29sb3J8fFMubnVtYmVyKSlyZXR1cm4hMTt2YXIgaHQ9dGhpcy5wYXJzZSh5LFlbNF0pO2lmKCFodHx8aHQubWFwcGVkKXJldHVybiExO3ZhciBkdD10aGlzLnBhcnNlKHksWVs1XSk7aWYoIWR0fHxkdC5tYXBwZWQpcmV0dXJuITE7aWYoaHQucGZWYWx1ZT09PWR0LnBmVmFsdWV8fGh0LnN0clZhbHVlPT09ZHQuc3RyVmFsdWUpcmV0dXJuIFNjKCJgIit5KyI6ICIrZysiYCBpcyBub3QgYSB2YWxpZCBtYXBwZXIgYmVjYXVzZSB0aGUgb3V0cHV0IHJhbmdlIGlzIHplcm87IGNvbnZlcnRpbmcgdG8gYCIreSsiOiAiK2h0LnN0clZhbHVlKyJgIiksdGhpcy5wYXJzZSh5LGh0LnN0clZhbHVlKTtpZihTLmNvbG9yKXt2YXIgTHQ9aHQudmFsdWUsa3Q9ZHQudmFsdWUsRHQ9THRbMF09PT1rdFswXSYmTHRbMV09PT1rdFsxXSYmTHRbMl09PT1rdFsyXSYmKEx0WzNdPT09a3RbM118fChMdFszXT09bnVsbHx8THRbM109PT0xKSYmKGt0WzNdPT1udWxsfHxrdFszXT09PTEpKTtpZihEdClyZXR1cm4hMX1yZXR1cm57bmFtZTp5LHZhbHVlOlksc3RyVmFsdWU6IiIrZyxtYXBwZWQ6b3QsZmllbGQ6WVsxXSxmaWVsZE1pbjpwYXJzZUZsb2F0KFlbMl0pLGZpZWxkTWF4OnBhcnNlRmxvYXQoWVszXSksdmFsdWVNaW46aHQudmFsdWUsdmFsdWVNYXg6ZHQudmFsdWUsYnlwYXNzOnh9fX1pZihTLm11bHRpcGxlJiZUIT09Im11bHRpcGxlIil7dmFyIFB0O2lmKHE/UHQ9Zy5zcGxpdCgvXHMrLyk6ZnQoZyk/UHQ9ZzpQdD1bZ10sUy5ldmVuTXVsdGlwbGUmJlB0Lmxlbmd0aCUyIT09MClyZXR1cm4gbnVsbDtmb3IodmFyICR0PVtdLFp0PVtdLFl0PVtdLHF0PSIiLG5lPSExLEd0PTA7R3Q8UHQubGVuZ3RoO0d0Kyspe3ZhciBnZT1MLnBhcnNlKHksUHRbR3RdLHgsIm11bHRpcGxlIik7bmU9bmV8fG10KGdlLnZhbHVlKSwkdC5wdXNoKGdlLnZhbHVlKSxZdC5wdXNoKGdlLnBmVmFsdWUhPW51bGw/Z2UucGZWYWx1ZTpnZS52YWx1ZSksWnQucHVzaChnZS51bml0cykscXQrPShHdD4wPyIgIjoiIikrZ2Uuc3RyVmFsdWV9cmV0dXJuIFMudmFsaWRhdGUmJiFTLnZhbGlkYXRlKCR0LFp0KT9udWxsOlMuc2luZ2xlRW51bSYmbmU/JHQubGVuZ3RoPT09MSYmbXQoJHRbMF0pP3tuYW1lOnksdmFsdWU6JHRbMF0sc3RyVmFsdWU6JHRbMF0sYnlwYXNzOnh9Om51bGw6e25hbWU6eSx2YWx1ZTokdCxwZlZhbHVlOll0LHN0clZhbHVlOnF0LGJ5cGFzczp4LHVuaXRzOlp0fX12YXIgYmU9ZnVuY3Rpb24oKXtmb3IodmFyIGZyPTA7ZnI8Uy5lbnVtcy5sZW5ndGg7ZnIrKyl7dmFyIEpyPVMuZW51bXNbZnJdO2lmKEpyPT09ZylyZXR1cm57bmFtZTp5LHZhbHVlOmcsc3RyVmFsdWU6IiIrZyxieXBhc3M6eH19cmV0dXJuIG51bGx9O2lmKFMubnVtYmVyKXt2YXIgaWUsRmU9InB4IjtpZihTLnVuaXRzJiYoaWU9Uy51bml0cyksUy5pbXBsaWNpdFVuaXRzJiYoRmU9Uy5pbXBsaWNpdFVuaXRzKSwhUy51bml0bGVzcylpZihxKXt2YXIgd2U9InB4fGVtIisoUy5hbGxvd1BlcmNlbnQ/InxcXCUiOiIiKTtpZSYmKHdlPWllKTt2YXIgYm49Zy5tYXRjaCgiXigiK1llKyIpKCIrd2UrIik/JCIpO2JuJiYoZz1iblsxXSxpZT1iblsyXXx8RmUpfWVsc2UoIWllfHxTLmltcGxpY2l0VW5pdHMpJiYoaWU9RmUpO2lmKGc9cGFyc2VGbG9hdChnKSxpc05hTihnKSYmUy5lbnVtcz09PXZvaWQgMClyZXR1cm4gbnVsbDtpZihpc05hTihnKSYmUy5lbnVtcyE9PXZvaWQgMClyZXR1cm4gZz1QLGJlKCk7aWYoUy5pbnRlZ2VyJiYhcHQoZyl8fFMubWluIT09dm9pZCAwJiYoZzxTLm1pbnx8Uy5zdHJpY3RNaW4mJmc9PT1TLm1pbil8fFMubWF4IT09dm9pZCAwJiYoZz5TLm1heHx8Uy5zdHJpY3RNYXgmJmc9PT1TLm1heCkpcmV0dXJuIG51bGw7dmFyIHplPXtuYW1lOnksdmFsdWU6ZyxzdHJWYWx1ZToiIitnKyhpZXx8IiIpLHVuaXRzOmllLGJ5cGFzczp4fTtyZXR1cm4gUy51bml0bGVzc3x8aWUhPT0icHgiJiZpZSE9PSJlbSI/emUucGZWYWx1ZT1nOnplLnBmVmFsdWU9aWU9PT0icHgifHwhaWU/Zzp0aGlzLmdldEVtU2l6ZUluUGl4ZWxzKCkqZywoaWU9PT0ibXMifHxpZT09PSJzIikmJih6ZS5wZlZhbHVlPWllPT09Im1zIj9nOjFlMypnKSwoaWU9PT0iZGVnInx8aWU9PT0icmFkIikmJih6ZS5wZlZhbHVlPWllPT09InJhZCI/ZzpJSyhnKSksaWU9PT0iJSImJih6ZS5wZlZhbHVlPWcvMTAwKSx6ZX1lbHNlIGlmKFMucHJvcExpc3Qpe3ZhciBHZT1bXSxFbj0iIitnO2lmKEVuIT09Im5vbmUiKXtmb3IodmFyIEluPUVuLnNwbGl0KC9ccyosXHMqfFxzKy8pLFluPTA7WW48SW4ubGVuZ3RoO1luKyspe3ZhciBTbj1JbltZbl0udHJpbSgpO0wucHJvcGVydGllc1tTbl0/R2UucHVzaChTbik6U2MoImAiK1NuKyJgIGlzIG5vdCBhIHZhbGlkIHByb3BlcnR5IG5hbWUiKX1pZihHZS5sZW5ndGg9PT0wKXJldHVybiBudWxsfXJldHVybntuYW1lOnksdmFsdWU6R2Usc3RyVmFsdWU6R2UubGVuZ3RoPT09MD8ibm9uZSI6R2Uuam9pbigiICIpLGJ5cGFzczp4fX1lbHNlIGlmKFMuY29sb3Ipe3ZhciBXbj1mbyhnKTtyZXR1cm4gV24/e25hbWU6eSx2YWx1ZTpXbixwZlZhbHVlOlduLHN0clZhbHVlOiJyZ2IoIitXblswXSsiLCIrV25bMV0rIiwiK1duWzJdKyIpIixieXBhc3M6eH06bnVsbH1lbHNlIGlmKFMucmVnZXh8fFMucmVnZXhlcyl7aWYoUy5lbnVtcyl7dmFyIHJyPWJlKCk7aWYocnIpcmV0dXJuIHJyfWZvcih2YXIgd3I9Uy5yZWdleGVzP1MucmVnZXhlczpbUy5yZWdleF0sdXI9MDt1cjx3ci5sZW5ndGg7dXIrKyl7dmFyIGVyPW5ldyBSZWdFeHAod3JbdXJdKSx2bj1lci5leGVjKGcpO2lmKHZuKXJldHVybntuYW1lOnksdmFsdWU6Uy5zaW5nbGVSZWdleE1hdGNoVmFsdWU/dm5bMV06dm4sc3RyVmFsdWU6IiIrZyxieXBhc3M6eH19cmV0dXJuIG51bGx9ZWxzZSByZXR1cm4gUy5zdHJpbmc/e25hbWU6eSx2YWx1ZToiIitnLHN0clZhbHVlOiIiK2csYnlwYXNzOnh9OlMuZW51bXM/YmUoKTpudWxsfTt2YXIgcDE9ZnVuY3Rpb24geShnKXtpZighKHRoaXMgaW5zdGFuY2VvZiB5KSlyZXR1cm4gbmV3IHkoZyk7aWYoIU90KGcpKXt2bCgiQSBzdHlsZSBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSIpO3JldHVybn10aGlzLl9wcml2YXRlPXtjeTpnLGNvcmVTdHlsZTp7fX0sdGhpcy5sZW5ndGg9MCx0aGlzLnJlc2V0VG9EZWZhdWx0KCl9LGIxPXAxLnByb3RvdHlwZTtiMS5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJzdHlsZSJ9LGIxLmNsZWFyPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMuX3ByaXZhdGUsZz15LmN5LHg9Zy5lbGVtZW50cygpLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl0aGlzW1RdPXZvaWQgMDtyZXR1cm4gdGhpcy5sZW5ndGg9MCx5LmNvbnRleHRTdHlsZXM9e30seS5wcm9wRGlmZnM9e30sdGhpcy5jbGVhbkVsZW1lbnRzKHgsITApLHguZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgTz1MWzBdLl9wcml2YXRlO08uc3R5bGVEaXJ0eT0hMCxPLmFwcGxpZWRJbml0U3R5bGU9ITF9KSx0aGlzfSxiMS5yZXNldFRvRGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5hZGREZWZhdWx0U3R5bGVzaGVldCgpLHRoaXN9LGIxLmNvcmU9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3ldfHx0aGlzLmdldERlZmF1bHRQcm9wZXJ0eSh5KX0sYjEuc2VsZWN0b3I9ZnVuY3Rpb24oeSl7dmFyIGc9eT09PSJjb3JlIj9udWxsOm5ldyBFbSh5KSx4PXRoaXMubGVuZ3RoKys7cmV0dXJuIHRoaXNbeF09e3NlbGVjdG9yOmcscHJvcGVydGllczpbXSxtYXBwZWRQcm9wZXJ0aWVzOltdLGluZGV4Onh9LHRoaXN9LGIxLmNzcz1mdW5jdGlvbigpe3ZhciB5PXRoaXMsZz1hcmd1bWVudHM7aWYoZy5sZW5ndGg9PT0xKWZvcih2YXIgeD1nWzBdLFQ9MDtUPHkucHJvcGVydGllcy5sZW5ndGg7VCsrKXt2YXIgTD15LnByb3BlcnRpZXNbVF0sTz14W0wubmFtZV07Tz09PXZvaWQgMCYmKE89eFtTZShMLm5hbWUpXSksTyE9PXZvaWQgMCYmdGhpcy5jc3NSdWxlKEwubmFtZSxPKX1lbHNlIGcubGVuZ3RoPT09MiYmdGhpcy5jc3NSdWxlKGdbMF0sZ1sxXSk7cmV0dXJuIHRoaXN9LGIxLnN0eWxlPWIxLmNzcyxiMS5jc3NSdWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcy5wYXJzZSh5LGcpO2lmKHgpe3ZhciBUPXRoaXMubGVuZ3RoLTE7dGhpc1tUXS5wcm9wZXJ0aWVzLnB1c2goeCksdGhpc1tUXS5wcm9wZXJ0aWVzW3gubmFtZV09eCx4Lm5hbWUubWF0Y2goL3BpZS0oXGQrKS1iYWNrZ3JvdW5kLXNpemUvKSYmeC52YWx1ZSYmKHRoaXMuX3ByaXZhdGUuaGFzUGllPSEwKSx4Lm1hcHBlZCYmdGhpc1tUXS5tYXBwZWRQcm9wZXJ0aWVzLnB1c2goeCk7dmFyIEw9IXRoaXNbVF0uc2VsZWN0b3I7TCYmKHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3gubmFtZV09eCl9cmV0dXJuIHRoaXN9LGIxLmFwcGVuZD1mdW5jdGlvbih5KXtyZXR1cm4gQnQoeSk/eS5hcHBlbmRUb1N0eWxlKHRoaXMpOmZ0KHkpP3RoaXMuYXBwZW5kRnJvbUpzb24oeSk6bXQoeSkmJnRoaXMuYXBwZW5kRnJvbVN0cmluZyh5KSx0aGlzfSxwMS5mcm9tSnNvbj1mdW5jdGlvbih5LGcpe3ZhciB4PW5ldyBwMSh5KTtyZXR1cm4geC5mcm9tSnNvbihnKSx4fSxwMS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHksZyl7cmV0dXJuIG5ldyBwMSh5KS5mcm9tU3RyaW5nKGcpfSxbZzEscWssWUwsV2IsZkMsS0wsemYsZENdLmZvckVhY2goZnVuY3Rpb24oeSl7ZGUoYjEseSl9KSxwMS50eXBlcz1iMS50eXBlcyxwMS5wcm9wZXJ0aWVzPWIxLnByb3BlcnRpZXMscDEucHJvcGVydHlHcm91cHM9YjEucHJvcGVydHlHcm91cHMscDEucHJvcGVydHlHcm91cE5hbWVzPWIxLnByb3BlcnR5R3JvdXBOYW1lcyxwMS5wcm9wZXJ0eUdyb3VwS2V5cz1iMS5wcm9wZXJ0eUdyb3VwS2V5czt2YXIgUko9e3N0eWxlOmZ1bmN0aW9uKGcpe2lmKGcpe3ZhciB4PXRoaXMuc2V0U3R5bGUoZyk7eC51cGRhdGUoKX1yZXR1cm4gdGhpcy5fcHJpdmF0ZS5zdHlsZX0sc2V0U3R5bGU6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gQnQoZyk/eC5zdHlsZT1nLmdlbmVyYXRlU3R5bGUodGhpcyk6ZnQoZyk/eC5zdHlsZT1wMS5mcm9tSnNvbih0aGlzLGcpOm10KGcpP3guc3R5bGU9cDEuZnJvbVN0cmluZyh0aGlzLGcpOnguc3R5bGU9cDEodGhpcykseC5zdHlsZX0sdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXt0aGlzLm11dGFibGVFbGVtZW50cygpLnVwZGF0ZVN0eWxlKCl9fSxqSj0ic2luZ2xlIixNMz17YXV0b2xvY2s6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG9sb2NrPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG9sb2NrO3JldHVybiB0aGlzfSxhdXRvdW5ncmFiaWZ5OmZ1bmN0aW9uKGcpe2lmKGchPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5hdXRvdW5ncmFiaWZ5PSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk7cmV0dXJuIHRoaXN9LGF1dG91bnNlbGVjdGlmeTpmdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5PSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeTtyZXR1cm4gdGhpc30sc2VsZWN0aW9uVHlwZTpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlO2lmKHguc2VsZWN0aW9uVHlwZT09bnVsbCYmKHguc2VsZWN0aW9uVHlwZT1qSiksZyE9PXZvaWQgMCkoZz09PSJhZGRpdGl2ZSJ8fGc9PT0ic2luZ2xlIikmJih4LnNlbGVjdGlvblR5cGU9Zyk7ZWxzZSByZXR1cm4geC5zZWxlY3Rpb25UeXBlO3JldHVybiB0aGlzfSxwYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ9ISFnO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LHVzZXJQYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihnKXtpZihnIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUudXNlclBhbm5pbmdFbmFibGVkPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sem9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkPSEhZztlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkO3JldHVybiB0aGlzfSx1c2VyWm9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJab29taW5nRW5hYmxlZD0hIWc7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LGJveFNlbGVjdGlvbkVuYWJsZWQ6ZnVuY3Rpb24oZyl7aWYoZyE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ9ISFnO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZDtyZXR1cm4gdGhpc30scGFuOmZ1bmN0aW9uKCl7dmFyIGc9YXJndW1lbnRzLHg9dGhpcy5fcHJpdmF0ZS5wYW4sVCxMLE8sUCwkO3N3aXRjaChnLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB4O2Nhc2UgMTppZihtdChnWzBdKSlyZXR1cm4gVD1nWzBdLHhbVF07aWYodXQoZ1swXSkpe2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO089Z1swXSxQPU8ueCwkPU8ueSxYKFApJiYoeC54PVApLFgoJCkmJih4Lnk9JCksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKX1icmVhaztjYXNlIDI6aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7VD1nWzBdLEw9Z1sxXSwoVD09PSJ4Inx8VD09PSJ5IikmJlgoTCkmJih4W1RdPUwpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LHBhbkJ5OmZ1bmN0aW9uKGcseCl7dmFyIFQ9YXJndW1lbnRzLEw9dGhpcy5fcHJpdmF0ZS5wYW4sTyxQLCQscSxTO2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO3N3aXRjaChULmxlbmd0aCl7Y2FzZSAxOnV0KGcpJiYoJD1UWzBdLHE9JC54LFM9JC55LFgocSkmJihMLngrPXEpLFgoUykmJihMLnkrPVMpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IikpO2JyZWFrO2Nhc2UgMjpPPWcsUD14LChPPT09IngifHxPPT09InkiKSYmWChQKSYmKExbT10rPVApLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LGZpdDpmdW5jdGlvbihnLHgpe3ZhciBUPXRoaXMuZ2V0Rml0Vmlld3BvcnQoZyx4KTtpZihUKXt2YXIgTD10aGlzLl9wcml2YXRlO0wuem9vbT1ULnpvb20sTC5wYW49VC5wYW4sdGhpcy5lbWl0KCJwYW4gem9vbSB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpfXJldHVybiB0aGlzfSxnZXRGaXRWaWV3cG9ydDpmdW5jdGlvbihnLHgpe2lmKFgoZykmJng9PT12b2lkIDAmJih4PWcsZz12b2lkIDApLCEoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkKSl7dmFyIFQ7aWYobXQoZykpe3ZhciBMPWc7Zz10aGlzLiQoTCl9ZWxzZSBpZih4dChnKSl7dmFyIE89ZztUPXt4MTpPLngxLHkxOk8ueTEseDI6Ty54Mix5MjpPLnkyfSxULnc9VC54Mi1ULngxLFQuaD1ULnkyLVQueTF9ZWxzZSBUdChnKXx8KGc9dGhpcy5tdXRhYmxlRWxlbWVudHMoKSk7aWYoIShUdChnKSYmZy5lbXB0eSgpKSl7VD1UfHxnLmJvdW5kaW5nQm94KCk7dmFyIFA9dGhpcy53aWR0aCgpLCQ9dGhpcy5oZWlnaHQoKSxxO2lmKHg9WCh4KT94OjAsIWlzTmFOKFApJiYhaXNOYU4oJCkmJlA+MCYmJD4wJiYhaXNOYU4oVC53KSYmIWlzTmFOKFQuaCkmJlQudz4wJiZULmg+MCl7cT1NYXRoLm1pbigoUC0yKngpL1QudywoJC0yKngpL1QuaCkscT1xPnRoaXMuX3ByaXZhdGUubWF4Wm9vbT90aGlzLl9wcml2YXRlLm1heFpvb206cSxxPXE8dGhpcy5fcHJpdmF0ZS5taW5ab29tP3RoaXMuX3ByaXZhdGUubWluWm9vbTpxO3ZhciBTPXt4OihQLXEqKFQueDErVC54MikpLzIseTooJC1xKihULnkxK1QueTIpKS8yfTtyZXR1cm57em9vbTpxLHBhbjpTfX19fX0sem9vbVJhbmdlOmZ1bmN0aW9uKGcseCl7dmFyIFQ9dGhpcy5fcHJpdmF0ZTtpZih4PT1udWxsKXt2YXIgTD1nO2c9TC5taW4seD1MLm1heH1yZXR1cm4gWChnKSYmWCh4KSYmZzw9eD8oVC5taW5ab29tPWcsVC5tYXhab29tPXgpOlgoZykmJng9PT12b2lkIDAmJmc8PVQubWF4Wm9vbT9ULm1pblpvb209ZzpYKHgpJiZnPT09dm9pZCAwJiZ4Pj1ULm1pblpvb20mJihULm1heFpvb209eCksdGhpc30sbWluWm9vbTpmdW5jdGlvbihnKXtyZXR1cm4gZz09PXZvaWQgMD90aGlzLl9wcml2YXRlLm1pblpvb206dGhpcy56b29tUmFuZ2Uoe21pbjpnfSl9LG1heFpvb206ZnVuY3Rpb24oZyl7cmV0dXJuIGc9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS5tYXhab29tOnRoaXMuem9vbVJhbmdlKHttYXg6Z30pfSxnZXRab29tZWRWaWV3cG9ydDpmdW5jdGlvbihnKXt2YXIgeD10aGlzLl9wcml2YXRlLFQ9eC5wYW4sTD14Lnpvb20sTyxQLCQ9ITE7aWYoeC56b29taW5nRW5hYmxlZHx8KCQ9ITApLFgoZyk/UD1nOnV0KGcpJiYoUD1nLmxldmVsLGcucG9zaXRpb24hPW51bGw/Tz1OVChnLnBvc2l0aW9uLEwsVCk6Zy5yZW5kZXJlZFBvc2l0aW9uIT1udWxsJiYoTz1nLnJlbmRlcmVkUG9zaXRpb24pLE8hPW51bGwmJiF4LnBhbm5pbmdFbmFibGVkJiYoJD0hMCkpLFA9UD54Lm1heFpvb20/eC5tYXhab29tOlAsUD1QPHgubWluWm9vbT94Lm1pblpvb206UCwkfHwhWChQKXx8UD09PUx8fE8hPW51bGwmJighWChPLngpfHwhWChPLnkpKSlyZXR1cm4gbnVsbDtpZihPIT1udWxsKXt2YXIgcT1ULFM9TCxWPVAsWT17eDotVi9TKihPLngtcS54KStPLngseTotVi9TKihPLnktcS55KStPLnl9O3JldHVybnt6b29tZWQ6ITAscGFubmVkOiEwLHpvb206VixwYW46WX19ZWxzZSByZXR1cm57em9vbWVkOiEwLHBhbm5lZDohMSx6b29tOlAscGFuOlR9fSx6b29tOmZ1bmN0aW9uKGcpe2lmKGc9PT12b2lkIDApcmV0dXJuIHRoaXMuX3ByaXZhdGUuem9vbTt2YXIgeD10aGlzLmdldFpvb21lZFZpZXdwb3J0KGcpLFQ9dGhpcy5fcHJpdmF0ZTtyZXR1cm4geD09bnVsbHx8IXguem9vbWVkP3RoaXM6KFQuem9vbT14Lnpvb20seC5wYW5uZWQmJihULnBhbi54PXgucGFuLngsVC5wYW4ueT14LnBhbi55KSx0aGlzLmVtaXQoInpvb20iKyh4LnBhbm5lZD8iIHBhbiI6IiIpKyIgdmlld3BvcnQiKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzKX0sdmlld3BvcnQ6ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcy5fcHJpdmF0ZSxUPSEwLEw9ITAsTz1bXSxQPSExLCQ9ITE7aWYoIWcpcmV0dXJuIHRoaXM7aWYoWChnLnpvb20pfHwoVD0hMSksdXQoZy5wYW4pfHwoTD0hMSksIVQmJiFMKXJldHVybiB0aGlzO2lmKFQpe3ZhciBxPWcuem9vbTtxPHgubWluWm9vbXx8cT54Lm1heFpvb218fCF4Lnpvb21pbmdFbmFibGVkP1A9ITA6KHguem9vbT1xLE8ucHVzaCgiem9vbSIpKX1pZihMJiYoIVB8fCFnLmNhbmNlbE9uRmFpbGVkWm9vbSkmJngucGFubmluZ0VuYWJsZWQpe3ZhciBTPWcucGFuO1goUy54KSYmKHgucGFuLng9Uy54LCQ9ITEpLFgoUy55KSYmKHgucGFuLnk9Uy55LCQ9ITEpLCR8fE8ucHVzaCgicGFuIil9cmV0dXJuIE8ubGVuZ3RoPjAmJihPLnB1c2goInZpZXdwb3J0IiksdGhpcy5lbWl0KE8uam9pbigiICIpKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSksdGhpc30sY2VudGVyOmZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMuZ2V0Q2VudGVyUGFuKGcpO3JldHVybiB4JiYodGhpcy5fcHJpdmF0ZS5wYW49eCx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpKSx0aGlzfSxnZXRDZW50ZXJQYW46ZnVuY3Rpb24oZyx4KXtpZih0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXtpZihtdChnKSl7dmFyIFQ9ZztnPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFQpfWVsc2UgVHQoZyl8fChnPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkpO2lmKGcubGVuZ3RoIT09MCl7dmFyIEw9Zy5ib3VuZGluZ0JveCgpLE89dGhpcy53aWR0aCgpLFA9dGhpcy5oZWlnaHQoKTt4PXg9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS56b29tOng7dmFyICQ9e3g6KE8teCooTC54MStMLngyKSkvMix5OihQLXgqKEwueTErTC55MikpLzJ9O3JldHVybiAkfX19LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkP3RoaXM6KHRoaXMudmlld3BvcnQoe3Bhbjp7eDowLHk6MH0sem9vbToxfSksdGhpcyl9LGludmFsaWRhdGVTaXplOmZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5zaXplQ2FjaGU9bnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciBnPXRoaXMuX3ByaXZhdGUseD1nLmNvbnRhaW5lcjtyZXR1cm4gZy5zaXplQ2FjaGU9Zy5zaXplQ2FjaGV8fCh4P2Z1bmN0aW9uKCl7dmFyIFQ9Ui5nZXRDb21wdXRlZFN0eWxlKHgpLEw9ZnVuY3Rpb24oUCl7cmV0dXJuIHBhcnNlRmxvYXQoVC5nZXRQcm9wZXJ0eVZhbHVlKFApKX07cmV0dXJue3dpZHRoOnguY2xpZW50V2lkdGgtTCgicGFkZGluZy1sZWZ0IiktTCgicGFkZGluZy1yaWdodCIpLGhlaWdodDp4LmNsaWVudEhlaWdodC1MKCJwYWRkaW5nLXRvcCIpLUwoInBhZGRpbmctYm90dG9tIil9fSgpOnt3aWR0aDoxLGhlaWdodDoxfSl9LHdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZSgpLndpZHRofSxoZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCkuaGVpZ2h0fSxleHRlbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9wcml2YXRlLnBhbix4PXRoaXMuX3ByaXZhdGUuem9vbSxUPXRoaXMucmVuZGVyZWRFeHRlbnQoKSxMPXt4MTooVC54MS1nLngpL3gseDI6KFQueDItZy54KS94LHkxOihULnkxLWcueSkveCx5MjooVC55Mi1nLnkpL3h9O3JldHVybiBMLnc9TC54Mi1MLngxLEwuaD1MLnkyLUwueTEsTH0scmVuZGVyZWRFeHRlbnQ6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndpZHRoKCkseD10aGlzLmhlaWdodCgpO3JldHVybnt4MTowLHkxOjAseDI6Zyx5Mjp4LHc6ZyxoOnh9fSxtdWx0aUNsaWNrRGVib3VuY2VUaW1lOmZ1bmN0aW9uKGcpe2lmKGcpdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lPWc7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lO3JldHVybiB0aGlzfX07TTMuY2VudHJlPU0zLmNlbnRlcixNMy5hdXRvbG9ja05vZGVzPU0zLmF1dG9sb2NrLE0zLmF1dG91bmdyYWJpZnlOb2Rlcz1NMy5hdXRvdW5ncmFiaWZ5O3ZhciBIaz17ZGF0YTpBYy5kYXRhKHtmaWVsZDoiZGF0YSIsYmluZGluZ0V2ZW50OiJkYXRhIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITAsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsYWxsb3dHZXR0aW5nOiEwLHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlRGF0YTpBYy5yZW1vdmVEYXRhKHtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMCx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6QWMuZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6QWMucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KX07SGsuYXR0cj1Iay5kYXRhLEhrLnJlbW92ZUF0dHI9SGsucmVtb3ZlRGF0YTt2YXIgVms9ZnVuY3Rpb24oZyl7dmFyIHg9dGhpcztnPWRlKHt9LGcpO3ZhciBUPWcuY29udGFpbmVyO1QmJiFVKFQpJiZVKFRbMF0pJiYoVD1UWzBdKTt2YXIgTD1UP1QuX2N5cmVnOm51bGw7TD1MfHx7fSxMJiZMLmN5JiYoTC5jeS5kZXN0cm95KCksTD17fSk7dmFyIE89TC5yZWFkaWVzPUwucmVhZGllc3x8W107VCYmKFQuX2N5cmVnPUwpLEwuY3k9eDt2YXIgUD1SIT09dm9pZCAwJiZUIT09dm9pZCAwJiYhZy5oZWFkbGVzcywkPWc7JC5sYXlvdXQ9ZGUoe25hbWU6UD8iZ3JpZCI6Im51bGwifSwkLmxheW91dCksJC5yZW5kZXJlcj1kZSh7bmFtZTpQPyJjYW52YXMiOiJudWxsIn0sJC5yZW5kZXJlcik7dmFyIHE9ZnVuY3Rpb24oaHQsZHQsTHQpe3JldHVybiBkdCE9PXZvaWQgMD9kdDpMdCE9PXZvaWQgMD9MdDpodH0sUz10aGlzLl9wcml2YXRlPXtjb250YWluZXI6VCxyZWFkeTohMSxvcHRpb25zOiQsZWxlbWVudHM6bmV3ICRmKHRoaXMpLGxpc3RlbmVyczpbXSxhbmlFbGVzOm5ldyAkZih0aGlzKSxkYXRhOiQuZGF0YXx8e30sc2NyYXRjaDp7fSxsYXlvdXQ6bnVsbCxyZW5kZXJlcjpudWxsLGRlc3Ryb3llZDohMSxub3RpZmljYXRpb25zRW5hYmxlZDohMCxtaW5ab29tOjFlLTUwLG1heFpvb206MWU1MCx6b29taW5nRW5hYmxlZDpxKCEwLCQuem9vbWluZ0VuYWJsZWQpLHVzZXJab29taW5nRW5hYmxlZDpxKCEwLCQudXNlclpvb21pbmdFbmFibGVkKSxwYW5uaW5nRW5hYmxlZDpxKCEwLCQucGFubmluZ0VuYWJsZWQpLHVzZXJQYW5uaW5nRW5hYmxlZDpxKCEwLCQudXNlclBhbm5pbmdFbmFibGVkKSxib3hTZWxlY3Rpb25FbmFibGVkOnEoITAsJC5ib3hTZWxlY3Rpb25FbmFibGVkKSxhdXRvbG9jazpxKCExLCQuYXV0b2xvY2ssJC5hdXRvbG9ja05vZGVzKSxhdXRvdW5ncmFiaWZ5OnEoITEsJC5hdXRvdW5ncmFiaWZ5LCQuYXV0b3VuZ3JhYmlmeU5vZGVzKSxhdXRvdW5zZWxlY3RpZnk6cSghMSwkLmF1dG91bnNlbGVjdGlmeSksc3R5bGVFbmFibGVkOiQuc3R5bGVFbmFibGVkPT09dm9pZCAwP1A6JC5zdHlsZUVuYWJsZWQsem9vbTpYKCQuem9vbSk/JC56b29tOjEscGFuOnt4OnV0KCQucGFuKSYmWCgkLnBhbi54KT8kLnBhbi54OjAseTp1dCgkLnBhbikmJlgoJC5wYW4ueSk/JC5wYW4ueTowfSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LGhhc0NvbXBvdW5kTm9kZXM6ITEsbXVsdGlDbGlja0RlYm91bmNlVGltZTpxKDI1MCwkLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUpfTt0aGlzLmNyZWF0ZUVtaXR0ZXIoKSx0aGlzLnNlbGVjdGlvblR5cGUoJC5zZWxlY3Rpb25UeXBlKSx0aGlzLnpvb21SYW5nZSh7bWluOiQubWluWm9vbSxtYXg6JC5tYXhab29tfSk7dmFyIFY9ZnVuY3Rpb24oaHQsZHQpe3ZhciBMdD1odC5zb21lKEh0KTtpZihMdClyZXR1cm4gZXguYWxsKGh0KS50aGVuKGR0KTtkdChodCl9O1Muc3R5bGVFbmFibGVkJiZ4LnNldFN0eWxlKFtdKTt2YXIgWT1kZSh7fSwkLCQucmVuZGVyZXIpO3guaW5pdFJlbmRlcmVyKFkpO3ZhciBydD1mdW5jdGlvbihodCxkdCxMdCl7eC5ub3RpZmljYXRpb25zKCExKTt2YXIga3Q9eC5tdXRhYmxlRWxlbWVudHMoKTtrdC5sZW5ndGg+MCYma3QucmVtb3ZlKCksaHQhPW51bGwmJih1dChodCl8fGZ0KGh0KSkmJnguYWRkKGh0KSx4Lm9uZSgibGF5b3V0cmVhZHkiLGZ1bmN0aW9uKFB0KXt4Lm5vdGlmaWNhdGlvbnMoITApLHguZW1pdChQdCkseC5vbmUoImxvYWQiLGR0KSx4LmVtaXRBbmROb3RpZnkoImxvYWQiKX0pLm9uZSgibGF5b3V0c3RvcCIsZnVuY3Rpb24oKXt4Lm9uZSgiZG9uZSIsTHQpLHguZW1pdCgiZG9uZSIpfSk7dmFyIER0PWRlKHt9LHguX3ByaXZhdGUub3B0aW9ucy5sYXlvdXQpO0R0LmVsZXM9eC5lbGVtZW50cygpLHgubGF5b3V0KER0KS5ydW4oKX07VihbJC5zdHlsZSwkLmVsZW1lbnRzXSxmdW5jdGlvbihvdCl7dmFyIGh0PW90WzBdLGR0PW90WzFdO1Muc3R5bGVFbmFibGVkJiZ4LnN0eWxlKCkuYXBwZW5kKGh0KSxydChkdCxmdW5jdGlvbigpe3guc3RhcnRBbmltYXRpb25Mb29wKCksUy5yZWFkeT0hMCx5dCgkLnJlYWR5KSYmeC5vbigicmVhZHkiLCQucmVhZHkpO2Zvcih2YXIgTHQ9MDtMdDxPLmxlbmd0aDtMdCsrKXt2YXIga3Q9T1tMdF07eC5vbigicmVhZHkiLGt0KX1MJiYoTC5yZWFkaWVzPVtdKSx4LmVtaXQoInJlYWR5Iil9LCQuZG9uZSl9KX0sZ0M9VmsucHJvdG90eXBlO2RlKGdDLHtpbnN0YW5jZVN0cmluZzpmdW5jdGlvbigpe3JldHVybiJjb3JlIn0saXNSZWFkeTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnJlYWR5fSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5kZXN0cm95ZWR9LHJlYWR5OmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmlzUmVhZHkoKT90aGlzLmVtaXR0ZXIoKS5lbWl0KCJyZWFkeSIsW10sZyk6dGhpcy5vbigicmVhZHkiLGcpLHRoaXN9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZz10aGlzO2lmKCFnLmRlc3Ryb3llZCgpKXJldHVybiBnLnN0b3BBbmltYXRpb25Mb29wKCksZy5kZXN0cm95UmVuZGVyZXIoKSx0aGlzLmVtaXQoImRlc3Ryb3kiKSxnLl9wcml2YXRlLmRlc3Ryb3llZD0hMCxnfSxoYXNFbGVtZW50V2l0aElkOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmhhc0VsZW1lbnRXaXRoSWQoZyl9LGdldEVsZW1lbnRCeUlkOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmdldEVsZW1lbnRCeUlkKGcpfSxoYXNDb21wb3VuZE5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlc30saGVhZGxlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlci5pc0hlYWRsZXNzKCl9LHN0eWxlRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZH0sYWRkVG9Qb29sOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLm1lcmdlKGcpLHRoaXN9LHJlbW92ZUZyb21Qb29sOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLnVubWVyZ2UoZyksdGhpc30sY29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY29udGFpbmVyfHxudWxsfSxtb3VudDpmdW5jdGlvbihnKXtpZihnIT1udWxsKXt2YXIgeD10aGlzLFQ9eC5fcHJpdmF0ZSxMPVQub3B0aW9ucztyZXR1cm4hVShnKSYmVShnWzBdKSYmKGc9Z1swXSkseC5zdG9wQW5pbWF0aW9uTG9vcCgpLHguZGVzdHJveVJlbmRlcmVyKCksVC5jb250YWluZXI9ZyxULnN0eWxlRW5hYmxlZD0hMCx4LmludmFsaWRhdGVTaXplKCkseC5pbml0UmVuZGVyZXIoZGUoe30sTCxMLnJlbmRlcmVyLHtuYW1lOkwucmVuZGVyZXIubmFtZT09PSJudWxsIj8iY2FudmFzIjpMLnJlbmRlcmVyLm5hbWV9KSkseC5zdGFydEFuaW1hdGlvbkxvb3AoKSx4LnN0eWxlKEwuc3R5bGUpLHguZW1pdCgibW91bnQiKSx4fX0sdW5tb3VudDpmdW5jdGlvbigpe3ZhciBnPXRoaXM7cmV0dXJuIGcuc3RvcEFuaW1hdGlvbkxvb3AoKSxnLmRlc3Ryb3lSZW5kZXJlcigpLGcuaW5pdFJlbmRlcmVyKHtuYW1lOiJudWxsIn0pLGcuZW1pdCgidW5tb3VudCIpLGd9LG9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gVmIodGhpcy5fcHJpdmF0ZS5vcHRpb25zKX0sanNvbjpmdW5jdGlvbihnKXt2YXIgeD10aGlzLFQ9eC5fcHJpdmF0ZSxMPXgubXV0YWJsZUVsZW1lbnRzKCksTz1mdW5jdGlvbigkdCl7cmV0dXJuIHguZ2V0RWxlbWVudEJ5SWQoJHQuaWQoKSl9O2lmKHV0KGcpKXtpZih4LnN0YXJ0QmF0Y2goKSxnLmVsZW1lbnRzKXt2YXIgUD17fSwkPWZ1bmN0aW9uKCR0LFp0KXtmb3IodmFyIFl0PVtdLHF0PVtdLG5lPTA7bmU8JHQubGVuZ3RoO25lKyspe3ZhciBHdD0kdFtuZV07aWYoIUd0LmRhdGEuaWQpe1NjKCJjeS5qc29uKCkgY2Fubm90IGhhbmRsZSBlbGVtZW50cyB3aXRob3V0IGFuIElEIGF0dHJpYnV0ZSIpO2NvbnRpbnVlfXZhciBnZT0iIitHdC5kYXRhLmlkLGJlPXguZ2V0RWxlbWVudEJ5SWQoZ2UpO1BbZ2VdPSEwLGJlLmxlbmd0aCE9PTA/cXQucHVzaCh7ZWxlOmJlLGpzb246R3R9KTooWnQmJihHdC5ncm91cD1adCksWXQucHVzaChHdCkpfXguYWRkKFl0KTtmb3IodmFyIGllPTA7aWU8cXQubGVuZ3RoO2llKyspe3ZhciBGZT1xdFtpZV0sd2U9RmUuZWxlLGJuPUZlLmpzb247d2UuanNvbihibil9fTtpZihmdChnLmVsZW1lbnRzKSkkKGcuZWxlbWVudHMpO2Vsc2UgZm9yKHZhciBxPVsibm9kZXMiLCJlZGdlcyJdLFM9MDtTPHEubGVuZ3RoO1MrKyl7dmFyIFY9cVtTXSxZPWcuZWxlbWVudHNbVl07ZnQoWSkmJiQoWSxWKX12YXIgcnQ9eC5jb2xsZWN0aW9uKCk7TC5maWx0ZXIoZnVuY3Rpb24oUHQpe3JldHVybiFQW1B0LmlkKCldfSkuZm9yRWFjaChmdW5jdGlvbihQdCl7UHQuaXNQYXJlbnQoKT9ydC5tZXJnZShQdCk6UHQucmVtb3ZlKCl9KSxydC5mb3JFYWNoKGZ1bmN0aW9uKFB0KXtyZXR1cm4gUHQuY2hpbGRyZW4oKS5tb3ZlKHtwYXJlbnQ6bnVsbH0pfSkscnQuZm9yRWFjaChmdW5jdGlvbihQdCl7cmV0dXJuIE8oUHQpLnJlbW92ZSgpfSl9Zy5zdHlsZSYmeC5zdHlsZShnLnN0eWxlKSxnLnpvb20hPW51bGwmJmcuem9vbSE9PVQuem9vbSYmeC56b29tKGcuem9vbSksZy5wYW4mJihnLnBhbi54IT09VC5wYW4ueHx8Zy5wYW4ueSE9PVQucGFuLnkpJiZ4LnBhbihnLnBhbiksZy5kYXRhJiZ4LmRhdGEoZy5kYXRhKTtmb3IodmFyIG90PVsibWluWm9vbSIsIm1heFpvb20iLCJ6b29taW5nRW5hYmxlZCIsInVzZXJab29taW5nRW5hYmxlZCIsInBhbm5pbmdFbmFibGVkIiwidXNlclBhbm5pbmdFbmFibGVkIiwiYm94U2VsZWN0aW9uRW5hYmxlZCIsImF1dG9sb2NrIiwiYXV0b3VuZ3JhYmlmeSIsImF1dG91bnNlbGVjdGlmeSIsIm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUiXSxodD0wO2h0PG90Lmxlbmd0aDtodCsrKXt2YXIgZHQ9b3RbaHRdO2dbZHRdIT1udWxsJiZ4W2R0XShnW2R0XSl9cmV0dXJuIHguZW5kQmF0Y2goKSx0aGlzfWVsc2V7dmFyIEx0PSEhZyxrdD17fTtMdD9rdC5lbGVtZW50cz10aGlzLmVsZW1lbnRzKCkubWFwKGZ1bmN0aW9uKFB0KXtyZXR1cm4gUHQuanNvbigpfSk6KGt0LmVsZW1lbnRzPXt9LEwuZm9yRWFjaChmdW5jdGlvbihQdCl7dmFyICR0PVB0Lmdyb3VwKCk7a3QuZWxlbWVudHNbJHRdfHwoa3QuZWxlbWVudHNbJHRdPVtdKSxrdC5lbGVtZW50c1skdF0ucHVzaChQdC5qc29uKCkpfSkpLHRoaXMuX3ByaXZhdGUuc3R5bGVFbmFibGVkJiYoa3Quc3R5bGU9eC5zdHlsZSgpLmpzb24oKSksa3QuZGF0YT1WYih4LmRhdGEoKSk7dmFyIER0PVQub3B0aW9ucztyZXR1cm4ga3Quem9vbWluZ0VuYWJsZWQ9VC56b29taW5nRW5hYmxlZCxrdC51c2VyWm9vbWluZ0VuYWJsZWQ9VC51c2VyWm9vbWluZ0VuYWJsZWQsa3Quem9vbT1ULnpvb20sa3QubWluWm9vbT1ULm1pblpvb20sa3QubWF4Wm9vbT1ULm1heFpvb20sa3QucGFubmluZ0VuYWJsZWQ9VC5wYW5uaW5nRW5hYmxlZCxrdC51c2VyUGFubmluZ0VuYWJsZWQ9VC51c2VyUGFubmluZ0VuYWJsZWQsa3QucGFuPVZiKFQucGFuKSxrdC5ib3hTZWxlY3Rpb25FbmFibGVkPVQuYm94U2VsZWN0aW9uRW5hYmxlZCxrdC5yZW5kZXJlcj1WYihEdC5yZW5kZXJlciksa3QuaGlkZUVkZ2VzT25WaWV3cG9ydD1EdC5oaWRlRWRnZXNPblZpZXdwb3J0LGt0LnRleHR1cmVPblZpZXdwb3J0PUR0LnRleHR1cmVPblZpZXdwb3J0LGt0LndoZWVsU2Vuc2l0aXZpdHk9RHQud2hlZWxTZW5zaXRpdml0eSxrdC5tb3Rpb25CbHVyPUR0Lm1vdGlvbkJsdXIsa3QubXVsdGlDbGlja0RlYm91bmNlVGltZT1EdC5tdWx0aUNsaWNrRGVib3VuY2VUaW1lLGt0fX19KSxnQy4kaWQ9Z0MuZ2V0RWxlbWVudEJ5SWQsW0FKLE9KLFJCLFVMLGxDLEZKLFdMLGhDLFJKLE0zLEhrXS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2RlKGdDLHkpfSk7dmFyICRKPXtmaXQ6ITAsZGlyZWN0ZWQ6ITEscGFkZGluZzozMCxjaXJjbGU6ITEsZ3JpZDohMSxzcGFjaW5nRmFjdG9yOjEuNzUsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscm9vdHM6dm9pZCAwLG1heGltYWw6ITEsZGVwdGhTb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZyx4KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihnLHgpe3JldHVybiB4fX0sZHg9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuc2NyYXRjaCgiYnJlYWR0aGZpcnN0Iil9LFhMPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuc2NyYXRjaCgiYnJlYWR0aGZpcnN0Iix4KX07ZnVuY3Rpb24gakIoeSl7dGhpcy5vcHRpb25zPWRlKHt9LCRKLHkpfWpCLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeT10aGlzLm9wdGlvbnMsZz15LHg9eS5jeSxUPWcuZWxlcyxMPVQubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oQ2kpe3JldHVybiFDaS5pc1BhcmVudCgpfSksTz1ULFA9Zy5kaXJlY3RlZCwkPWcubWF4aW1hbHx8Zy5tYXhpbWFsQWRqdXN0bWVudHM+MCxxPXpkKGcuYm91bmRpbmdCb3g/Zy5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6eC53aWR0aCgpLGg6eC5oZWlnaHQoKX0pLFM7aWYoVHQoZy5yb290cykpUz1nLnJvb3RzO2Vsc2UgaWYoZnQoZy5yb290cykpe2Zvcih2YXIgVj1bXSxZPTA7WTxnLnJvb3RzLmxlbmd0aDtZKyspe3ZhciBydD1nLnJvb3RzW1ldLG90PXguZ2V0RWxlbWVudEJ5SWQocnQpO1YucHVzaChvdCl9Uz14LmNvbGxlY3Rpb24oVil9ZWxzZSBpZihtdChnLnJvb3RzKSlTPXguJChnLnJvb3RzKTtlbHNlIGlmKFApUz1MLnJvb3RzKCk7ZWxzZXt2YXIgaHQ9VC5jb21wb25lbnRzKCk7Uz14LmNvbGxlY3Rpb24oKTtmb3IodmFyIGR0PWZ1bmN0aW9uKGhpKXt2YXIgZ3M9aHRbaGldLHFpPWdzLm1heERlZ3JlZSghMSksU2k9Z3MuZmlsdGVyKGZ1bmN0aW9uKFVpKXtyZXR1cm4gVWkuZGVncmVlKCExKT09PXFpfSk7Uz1TLmFkZChTaSl9LEx0PTA7THQ8aHQubGVuZ3RoO0x0KyspZHQoTHQpfXZhciBrdD1bXSxEdD17fSxQdD1mdW5jdGlvbihoaSxncyl7a3RbZ3NdPT1udWxsJiYoa3RbZ3NdPVtdKTt2YXIgcWk9a3RbZ3NdLmxlbmd0aDtrdFtnc10ucHVzaChoaSksWEwoaGkse2luZGV4OnFpLGRlcHRoOmdzfSl9LCR0PWZ1bmN0aW9uKGhpLGdzKXt2YXIgcWk9ZHgoaGkpLFNpPXFpLmRlcHRoLFVpPXFpLmluZGV4O2t0W1NpXVtVaV09bnVsbCxQdChoaSxncyl9O08uYmZzKHtyb290czpTLGRpcmVjdGVkOmcuZGlyZWN0ZWQsdmlzaXQ6ZnVuY3Rpb24oaGksZ3MscWksU2ksVWkpe3ZhciBWYT1oaVswXSxRcz1WYS5pZCgpO1B0KFZhLFVpKSxEdFtRc109ITB9fSk7Zm9yKHZhciBadD1bXSxZdD0wO1l0PEwubGVuZ3RoO1l0Kyspe3ZhciBxdD1MW1l0XTtEdFtxdC5pZCgpXXx8WnQucHVzaChxdCl9dmFyIG5lPWZ1bmN0aW9uKGhpKXtmb3IodmFyIGdzPWt0W2hpXSxxaT0wO3FpPGdzLmxlbmd0aDtxaSsrKXt2YXIgU2k9Z3NbcWldO2lmKFNpPT1udWxsKXtncy5zcGxpY2UocWksMSkscWktLTtjb250aW51ZX1YTChTaSx7ZGVwdGg6aGksaW5kZXg6cWl9KX19LEd0PWZ1bmN0aW9uKCl7Zm9yKHZhciBoaT0wO2hpPGt0Lmxlbmd0aDtoaSsrKW5lKGhpKX0sZ2U9ZnVuY3Rpb24oaGksZ3Mpe2Zvcih2YXIgcWk9ZHgoaGkpLFNpPWhpLmluY29tZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuaXNOb2RlKCkmJlQuaGFzKFF0KX0pLFVpPS0xLFZhPWhpLmlkKCksUXM9MDtRczxTaS5sZW5ndGg7UXMrKyl7dmFyIHFzPVNpW1FzXSxUcj1keChxcyk7VWk9TWF0aC5tYXgoVWksVHIuZGVwdGgpfXJldHVybiBxaS5kZXB0aDw9VWk/Z3NbVmFdP251bGw6KCR0KGhpLFVpKzEpLGdzW1ZhXT0hMCwhMCk6ITF9O2lmKFAmJiQpe3ZhciBiZT1bXSxpZT17fSxGZT1mdW5jdGlvbihoaSl7cmV0dXJuIGJlLnB1c2goaGkpfSx3ZT1mdW5jdGlvbigpe3JldHVybiBiZS5zaGlmdCgpfTtmb3IoTC5mb3JFYWNoKGZ1bmN0aW9uKENpKXtyZXR1cm4gYmUucHVzaChDaSl9KTtiZS5sZW5ndGg+MDspe3ZhciBibj13ZSgpLHplPWdlKGJuLGllKTtpZih6ZSlibi5vdXRnb2VycygpLmZpbHRlcihmdW5jdGlvbihDaSl7cmV0dXJuIENpLmlzTm9kZSgpJiZULmhhcyhDaSl9KS5mb3JFYWNoKEZlKTtlbHNlIGlmKHplPT09bnVsbCl7U2MoIkRldGVjdGVkIGRvdWJsZSBtYXhpbWFsIHNoaWZ0IGZvciBub2RlIGAiK2JuLmlkKCkrImAuICBCYWlsaW5nIG1heGltYWwgYWRqdXN0bWVudCBkdWUgdG8gY3ljbGUuICBVc2UgYG9wdGlvbnMubWF4aW1hbDogdHJ1ZWAgb25seSBvbiBEQUdzLiIpO2JyZWFrfX19R3QoKTt2YXIgR2U9MDtpZihnLmF2b2lkT3ZlcmxhcClmb3IodmFyIEVuPTA7RW48TC5sZW5ndGg7RW4rKyl7dmFyIEluPUxbRW5dLFluPUluLmxheW91dERpbWVuc2lvbnMoZyksU249WW4udyxXbj1Zbi5oO0dlPU1hdGgubWF4KEdlLFNuLFduKX12YXIgcnI9e30sd3I9ZnVuY3Rpb24oaGkpe2lmKHJyW2hpLmlkKCldKXJldHVybiBycltoaS5pZCgpXTtmb3IodmFyIGdzPWR4KGhpKS5kZXB0aCxxaT1oaS5uZWlnaGJvcmhvb2QoKSxTaT0wLFVpPTAsVmE9MDtWYTxxaS5sZW5ndGg7VmErKyl7dmFyIFFzPXFpW1ZhXTtpZighKFFzLmlzRWRnZSgpfHxRcy5pc1BhcmVudCgpfHwhTC5oYXMoUXMpKSl7dmFyIHFzPWR4KFFzKTtpZihxcyE9bnVsbCl7dmFyIFRyPXFzLmluZGV4LFF0PXFzLmRlcHRoO2lmKCEoVHI9PW51bGx8fFF0PT1udWxsKSl7dmFyIGpuPWt0W1F0XS5sZW5ndGg7UXQ8Z3MmJihTaSs9VHIvam4sVWkrKyl9fX19cmV0dXJuIFVpPU1hdGgubWF4KDEsVWkpLFNpPVNpL1VpLFVpPT09MCYmKFNpPTApLHJyW2hpLmlkKCldPVNpLFNpfSx1cj1mdW5jdGlvbihoaSxncyl7dmFyIHFpPXdyKGhpKSxTaT13cihncyksVWk9cWktU2k7cmV0dXJuIFVpPT09MD90ZShoaS5pZCgpLGdzLmlkKCkpOlVpfTtnLmRlcHRoU29ydCE9PXZvaWQgMCYmKHVyPWcuZGVwdGhTb3J0KTtmb3IodmFyIGVyPTA7ZXI8a3QubGVuZ3RoO2VyKyspa3RbZXJdLnNvcnQodXIpLG5lKGVyKTtmb3IodmFyIHZuPVtdLGdyPTA7Z3I8WnQubGVuZ3RoO2dyKyspdm4ucHVzaChadFtncl0pO2t0LnVuc2hpZnQodm4pLEd0KCk7Zm9yKHZhciBmcj0wLEpyPTA7SnI8a3QubGVuZ3RoO0pyKyspZnI9TWF0aC5tYXgoa3RbSnJdLmxlbmd0aCxmcik7dmFyIHZpPXt4OnEueDErcS53LzIseTpxLngxK3EuaC8yfSxYcz1rdC5yZWR1Y2UoZnVuY3Rpb24oQ2ksaGkpe3JldHVybiBNYXRoLm1heChDaSxoaS5sZW5ndGgpfSwwKSxFYT1mdW5jdGlvbihoaSl7dmFyIGdzPWR4KGhpKSxxaT1ncy5kZXB0aCxTaT1ncy5pbmRleCxVaT1rdFtxaV0ubGVuZ3RoLFZhPU1hdGgubWF4KHEudy8oKGcuZ3JpZD9YczpVaSkrMSksR2UpLFFzPU1hdGgubWF4KHEuaC8oa3QubGVuZ3RoKzEpLEdlKSxxcz1NYXRoLm1pbihxLncvMi9rdC5sZW5ndGgscS5oLzIva3QubGVuZ3RoKTtpZihxcz1NYXRoLm1heChxcyxHZSksZy5jaXJjbGUpe3ZhciBRdD1xcypxaStxcy0oa3QubGVuZ3RoPjAmJmt0WzBdLmxlbmd0aDw9Mz9xcy8yOjApLGpuPTIqTWF0aC5QSS9rdFtxaV0ubGVuZ3RoKlNpO3JldHVybiBxaT09PTAmJmt0WzBdLmxlbmd0aD09PTEmJihRdD0xKSx7eDp2aS54K1F0Kk1hdGguY29zKGpuKSx5OnZpLnkrUXQqTWF0aC5zaW4oam4pfX1lbHNle3ZhciBUcj17eDp2aS54KyhTaSsxLShVaSsxKS8yKSpWYSx5OihxaSsxKSpRc307cmV0dXJuIFRyfX07cmV0dXJuIFQubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxnLEVhKSx0aGlzfTt2YXIgeko9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHNwYWNpbmdGYWN0b3I6dm9pZCAwLHJhZGl1czp2b2lkIDAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKGcseCl7cmV0dXJuIHh9fTtmdW5jdGlvbiBwQyh5KXt0aGlzLm9wdGlvbnM9ZGUoe30sekoseSl9cEMucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkseD15LmN5LFQ9Zy5lbGVzLEw9Zy5jb3VudGVyY2xvY2t3aXNlIT09dm9pZCAwPyFnLmNvdW50ZXJjbG9ja3dpc2U6Zy5jbG9ja3dpc2UsTz1ULm5vZGVzKCkubm90KCI6cGFyZW50Iik7Zy5zb3J0JiYoTz1PLnNvcnQoZy5zb3J0KSk7Zm9yKHZhciBQPXpkKGcuYm91bmRpbmdCb3g/Zy5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6eC53aWR0aCgpLGg6eC5oZWlnaHQoKX0pLCQ9e3g6UC54MStQLncvMix5OlAueTErUC5oLzJ9LHE9Zy5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL08ubGVuZ3RoOmcuc3dlZXAsUz1xL01hdGgubWF4KDEsTy5sZW5ndGgtMSksVixZPTAscnQ9MDtydDxPLmxlbmd0aDtydCsrKXt2YXIgb3Q9T1tydF0saHQ9b3QubGF5b3V0RGltZW5zaW9ucyhnKSxkdD1odC53LEx0PWh0Lmg7WT1NYXRoLm1heChZLGR0LEx0KX1pZihYKGcucmFkaXVzKT9WPWcucmFkaXVzOk8ubGVuZ3RoPD0xP1Y9MDpWPU1hdGgubWluKFAuaCxQLncpLzItWSxPLmxlbmd0aD4xJiZnLmF2b2lkT3ZlcmxhcCl7WSo9MS43NTt2YXIga3Q9TWF0aC5jb3MoUyktTWF0aC5jb3MoMCksRHQ9TWF0aC5zaW4oUyktTWF0aC5zaW4oMCksUHQ9TWF0aC5zcXJ0KFkqWS8oa3Qqa3QrRHQqRHQpKTtWPU1hdGgubWF4KFB0LFYpfXZhciAkdD1mdW5jdGlvbihZdCxxdCl7dmFyIG5lPWcuc3RhcnRBbmdsZStxdCpTKihMPzE6LTEpLEd0PVYqTWF0aC5jb3MobmUpLGdlPVYqTWF0aC5zaW4obmUpLGJlPXt4OiQueCtHdCx5OiQueStnZX07cmV0dXJuIGJlfTtyZXR1cm4gVC5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGcsJHQpLHRoaXN9O3ZhciBxSj17Zml0OiEwLHBhZGRpbmc6MzAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLGVxdWlkaXN0YW50OiExLG1pbk5vZGVTcGFjaW5nOjEwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLGhlaWdodDp2b2lkIDAsd2lkdGg6dm9pZCAwLHNwYWNpbmdGYWN0b3I6dm9pZCAwLGNvbmNlbnRyaWM6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZGVncmVlKCl9LGxldmVsV2lkdGg6ZnVuY3Rpb24oZyl7cmV0dXJuIGcubWF4RGVncmVlKCkvNH0sYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKGcseCl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24oZyx4KXtyZXR1cm4geH19O2Z1bmN0aW9uICRCKHkpe3RoaXMub3B0aW9ucz1kZSh7fSxxSix5KX0kQi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMub3B0aW9ucyxnPXkseD1nLmNvdW50ZXJjbG9ja3dpc2UhPT12b2lkIDA/IWcuY291bnRlcmNsb2Nrd2lzZTpnLmNsb2Nrd2lzZSxUPXkuY3ksTD1nLmVsZXMsTz1MLm5vZGVzKCkubm90KCI6cGFyZW50IiksUD16ZChnLmJvdW5kaW5nQm94P2cuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3OlQud2lkdGgoKSxoOlQuaGVpZ2h0KCl9KSwkPXt4OlAueDErUC53LzIseTpQLnkxK1AuaC8yfSxxPVtdLFM9MCxWPTA7VjxPLmxlbmd0aDtWKyspe3ZhciBZPU9bVl0scnQ9dm9pZCAwO3J0PWcuY29uY2VudHJpYyhZKSxxLnB1c2goe3ZhbHVlOnJ0LG5vZGU6WX0pLFkuX3ByaXZhdGUuc2NyYXRjaC5jb25jZW50cmljPXJ0fU8udXBkYXRlU3R5bGUoKTtmb3IodmFyIG90PTA7b3Q8Ty5sZW5ndGg7b3QrKyl7dmFyIGh0PU9bb3RdLGR0PWh0LmxheW91dERpbWVuc2lvbnMoZyk7Uz1NYXRoLm1heChTLGR0LncsZHQuaCl9cS5zb3J0KGZ1bmN0aW9uKENpLGhpKXtyZXR1cm4gaGkudmFsdWUtQ2kudmFsdWV9KTtmb3IodmFyIEx0PWcubGV2ZWxXaWR0aChPKSxrdD1bW11dLER0PWt0WzBdLFB0PTA7UHQ8cS5sZW5ndGg7UHQrKyl7dmFyICR0PXFbUHRdO2lmKER0Lmxlbmd0aD4wKXt2YXIgWnQ9TWF0aC5hYnMoRHRbMF0udmFsdWUtJHQudmFsdWUpO1p0Pj1MdCYmKER0PVtdLGt0LnB1c2goRHQpKX1EdC5wdXNoKCR0KX12YXIgWXQ9UytnLm1pbk5vZGVTcGFjaW5nO2lmKCFnLmF2b2lkT3ZlcmxhcCl7dmFyIHF0PWt0Lmxlbmd0aD4wJiZrdFswXS5sZW5ndGg+MSxuZT1NYXRoLm1pbihQLncsUC5oKS8yLVl0LEd0PW5lLyhrdC5sZW5ndGgrcXQ/MTowKTtZdD1NYXRoLm1pbihZdCxHdCl9Zm9yKHZhciBnZT0wLGJlPTA7YmU8a3QubGVuZ3RoO2JlKyspe3ZhciBpZT1rdFtiZV0sRmU9Zy5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL2llLmxlbmd0aDpnLnN3ZWVwLHdlPWllLmRUaGV0YT1GZS9NYXRoLm1heCgxLGllLmxlbmd0aC0xKTtpZihpZS5sZW5ndGg+MSYmZy5hdm9pZE92ZXJsYXApe3ZhciBibj1NYXRoLmNvcyh3ZSktTWF0aC5jb3MoMCksemU9TWF0aC5zaW4od2UpLU1hdGguc2luKDApLEdlPU1hdGguc3FydChZdCpZdC8oYm4qYm4remUqemUpKTtnZT1NYXRoLm1heChHZSxnZSl9aWUucj1nZSxnZSs9WXR9aWYoZy5lcXVpZGlzdGFudCl7Zm9yKHZhciBFbj0wLEluPTAsWW49MDtZbjxrdC5sZW5ndGg7WW4rKyl7dmFyIFNuPWt0W1luXSxXbj1Tbi5yLUluO0VuPU1hdGgubWF4KEVuLFduKX1Jbj0wO2Zvcih2YXIgcnI9MDtycjxrdC5sZW5ndGg7cnIrKyl7dmFyIHdyPWt0W3JyXTtycj09PTAmJihJbj13ci5yKSx3ci5yPUluLEluKz1Fbn19Zm9yKHZhciB1cj17fSxlcj0wO2VyPGt0Lmxlbmd0aDtlcisrKWZvcih2YXIgdm49a3RbZXJdLGdyPXZuLmRUaGV0YSxmcj12bi5yLEpyPTA7SnI8dm4ubGVuZ3RoO0pyKyspe3ZhciB2aT12bltKcl0sWHM9Zy5zdGFydEFuZ2xlKyh4PzE6LTEpKmdyKkpyLEVhPXt4OiQueCtmcipNYXRoLmNvcyhYcykseTokLnkrZnIqTWF0aC5zaW4oWHMpfTt1clt2aS5ub2RlLmlkKCldPUVhfXJldHVybiBMLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZyxmdW5jdGlvbihDaSl7dmFyIGhpPUNpLmlkKCk7cmV0dXJuIHVyW2hpXX0pLHRoaXN9O3ZhciBRTCxISj17cmVhZHk6ZnVuY3Rpb24oKXt9LHN0b3A6ZnVuY3Rpb24oKXt9LGFuaW1hdGU6ITAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRpb25EdXJhdGlvbjp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihnLHgpe3JldHVybiEwfSxhbmltYXRpb25UaHJlc2hvbGQ6MjUwLHJlZnJlc2g6MjAsZml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyYW5kb21pemU6ITEsY29tcG9uZW50U3BhY2luZzo0MCxub2RlUmVwdWxzaW9uOmZ1bmN0aW9uKGcpe3JldHVybiAyMDQ4fSxub2RlT3ZlcmxhcDo0LGlkZWFsRWRnZUxlbmd0aDpmdW5jdGlvbihnKXtyZXR1cm4gMzJ9LGVkZ2VFbGFzdGljaXR5OmZ1bmN0aW9uKGcpe3JldHVybiAzMn0sbmVzdGluZ0ZhY3RvcjoxLjIsZ3Jhdml0eToxLG51bUl0ZXI6MWUzLGluaXRpYWxUZW1wOjFlMyxjb29saW5nRmFjdG9yOi45OSxtaW5UZW1wOjF9O2Z1bmN0aW9uIGJDKHkpe3RoaXMub3B0aW9ucz1kZSh7fSxISix5KSx0aGlzLm9wdGlvbnMubGF5b3V0PXRoaXN9YkMucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuY3kseD10aGlzO3guc3RvcHBlZD0hMSwoeS5hbmltYXRlPT09ITB8fHkuYW5pbWF0ZT09PSExKSYmeC5lbWl0KHt0eXBlOiJsYXlvdXRzdGFydCIsbGF5b3V0Onh9KSx5LmRlYnVnPT09ITA/UUw9ITA6UUw9ITE7dmFyIFQ9VkooZyx4LHkpO1FMJiZXSihUKSx5LnJhbmRvbWl6ZSYmWUooVCk7dmFyIEw9eWcoKSxPPWZ1bmN0aW9uKCl7S0ooVCxnLHkpLHkuZml0PT09ITAmJmcuZml0KHkucGFkZGluZyl9LFA9ZnVuY3Rpb24ocnQpe3JldHVybiEoeC5zdG9wcGVkfHxydD49eS5udW1JdGVyfHwoWEooVCx5KSxULnRlbXBlcmF0dXJlPVQudGVtcGVyYXR1cmUqeS5jb29saW5nRmFjdG9yLFQudGVtcGVyYXR1cmU8eS5taW5UZW1wKSl9LCQ9ZnVuY3Rpb24oKXtpZih5LmFuaW1hdGU9PT0hMHx8eS5hbmltYXRlPT09ITEpTygpLHgub25lKCJsYXlvdXRzdG9wIix5LnN0b3ApLHguZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Onh9KTtlbHNle3ZhciBydD15LmVsZXMubm9kZXMoKSxvdD16QihULHkscnQpO3J0LmxheW91dFBvc2l0aW9ucyh4LHksb3QpfX0scT0wLFM9ITA7aWYoeS5hbmltYXRlPT09ITApe3ZhciBWPWZ1bmN0aW9uIFkoKXtmb3IodmFyIHJ0PTA7UyYmcnQ8eS5yZWZyZXNoOylTPVAocSkscSsrLHJ0Kys7aWYoIVMpSEIoVCx5KSwkKCk7ZWxzZXt2YXIgb3Q9eWcoKTtvdC1MPj15LmFuaW1hdGlvblRocmVzaG9sZCYmTygpLEJmKFkpfX07VigpfWVsc2V7Zm9yKDtTOylTPVAocSkscSsrO0hCKFQseSksJCgpfXJldHVybiB0aGlzfSxiQy5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3BwZWQ9ITAsdGhpcy50aHJlYWQmJnRoaXMudGhyZWFkLnN0b3AoKSx0aGlzLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxiQy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRocmVhZCYmdGhpcy50aHJlYWQuc3RvcCgpLHRoaXN9O3ZhciBWSj1mdW5jdGlvbihnLHgsVCl7Zm9yKHZhciBMPVQuZWxlcy5lZGdlcygpLE89VC5lbGVzLm5vZGVzKCksUD17aXNDb21wb3VuZDpnLmhhc0NvbXBvdW5kTm9kZXMoKSxsYXlvdXROb2RlczpbXSxpZFRvSW5kZXg6e30sbm9kZVNpemU6Ty5zaXplKCksZ3JhcGhTZXQ6W10saW5kZXhUb0dyYXBoOltdLGxheW91dEVkZ2VzOltdLGVkZ2VTaXplOkwuc2l6ZSgpLHRlbXBlcmF0dXJlOlQuaW5pdGlhbFRlbXAsY2xpZW50V2lkdGg6Zy53aWR0aCgpLGNsaWVudEhlaWdodDpnLndpZHRoKCksYm91bmRpbmdCb3g6emQoVC5ib3VuZGluZ0JveD9ULmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzpnLndpZHRoKCksaDpnLmhlaWdodCgpfSl9LCQ9VC5lbGVzLmNvbXBvbmVudHMoKSxxPXt9LFM9MDtTPCQubGVuZ3RoO1MrKylmb3IodmFyIFY9JFtTXSxZPTA7WTxWLmxlbmd0aDtZKyspe3ZhciBydD1WW1ldO3FbcnQuaWQoKV09U31mb3IodmFyIFM9MDtTPFAubm9kZVNpemU7UysrKXt2YXIgb3Q9T1tTXSxodD1vdC5sYXlvdXREaW1lbnNpb25zKFQpLGR0PXt9O2R0LmlzTG9ja2VkPW90LmxvY2tlZCgpLGR0LmlkPW90LmRhdGEoImlkIiksZHQucGFyZW50SWQ9b3QuZGF0YSgicGFyZW50IiksZHQuY21wdElkPXFbb3QuaWQoKV0sZHQuY2hpbGRyZW49W10sZHQucG9zaXRpb25YPW90LnBvc2l0aW9uKCJ4IiksZHQucG9zaXRpb25ZPW90LnBvc2l0aW9uKCJ5IiksZHQub2Zmc2V0WD0wLGR0Lm9mZnNldFk9MCxkdC5oZWlnaHQ9aHQudyxkdC53aWR0aD1odC5oLGR0Lm1heFg9ZHQucG9zaXRpb25YK2R0LndpZHRoLzIsZHQubWluWD1kdC5wb3NpdGlvblgtZHQud2lkdGgvMixkdC5tYXhZPWR0LnBvc2l0aW9uWStkdC5oZWlnaHQvMixkdC5taW5ZPWR0LnBvc2l0aW9uWS1kdC5oZWlnaHQvMixkdC5wYWRMZWZ0PXBhcnNlRmxvYXQob3Quc3R5bGUoInBhZGRpbmciKSksZHQucGFkUmlnaHQ9cGFyc2VGbG9hdChvdC5zdHlsZSgicGFkZGluZyIpKSxkdC5wYWRUb3A9cGFyc2VGbG9hdChvdC5zdHlsZSgicGFkZGluZyIpKSxkdC5wYWRCb3R0b209cGFyc2VGbG9hdChvdC5zdHlsZSgicGFkZGluZyIpKSxkdC5ub2RlUmVwdWxzaW9uPXl0KFQubm9kZVJlcHVsc2lvbik/VC5ub2RlUmVwdWxzaW9uKG90KTpULm5vZGVSZXB1bHNpb24sUC5sYXlvdXROb2Rlcy5wdXNoKGR0KSxQLmlkVG9JbmRleFtkdC5pZF09U31mb3IodmFyIEx0PVtdLGt0PTAsRHQ9LTEsUHQ9W10sUz0wO1M8UC5ub2RlU2l6ZTtTKyspe3ZhciBvdD1QLmxheW91dE5vZGVzW1NdLCR0PW90LnBhcmVudElkOyR0IT1udWxsP1AubGF5b3V0Tm9kZXNbUC5pZFRvSW5kZXhbJHRdXS5jaGlsZHJlbi5wdXNoKG90LmlkKTooTHRbKytEdF09b3QuaWQsUHQucHVzaChvdC5pZCkpfWZvcihQLmdyYXBoU2V0LnB1c2goUHQpO2t0PD1EdDspe3ZhciBadD1MdFtrdCsrXSxZdD1QLmlkVG9JbmRleFtadF0scnQ9UC5sYXlvdXROb2Rlc1tZdF0scXQ9cnQuY2hpbGRyZW47aWYocXQubGVuZ3RoPjApe1AuZ3JhcGhTZXQucHVzaChxdCk7Zm9yKHZhciBTPTA7UzxxdC5sZW5ndGg7UysrKUx0WysrRHRdPXF0W1NdfX1mb3IodmFyIFM9MDtTPFAuZ3JhcGhTZXQubGVuZ3RoO1MrKylmb3IodmFyIG5lPVAuZ3JhcGhTZXRbU10sWT0wO1k8bmUubGVuZ3RoO1krKyl7dmFyIEd0PVAuaWRUb0luZGV4W25lW1ldXTtQLmluZGV4VG9HcmFwaFtHdF09U31mb3IodmFyIFM9MDtTPFAuZWRnZVNpemU7UysrKXt2YXIgZ2U9TFtTXSxiZT17fTtiZS5pZD1nZS5kYXRhKCJpZCIpLGJlLnNvdXJjZUlkPWdlLmRhdGEoInNvdXJjZSIpLGJlLnRhcmdldElkPWdlLmRhdGEoInRhcmdldCIpO3ZhciBpZT15dChULmlkZWFsRWRnZUxlbmd0aCk/VC5pZGVhbEVkZ2VMZW5ndGgoZ2UpOlQuaWRlYWxFZGdlTGVuZ3RoLEZlPXl0KFQuZWRnZUVsYXN0aWNpdHkpP1QuZWRnZUVsYXN0aWNpdHkoZ2UpOlQuZWRnZUVsYXN0aWNpdHksd2U9UC5pZFRvSW5kZXhbYmUuc291cmNlSWRdLGJuPVAuaWRUb0luZGV4W2JlLnRhcmdldElkXSx6ZT1QLmluZGV4VG9HcmFwaFt3ZV0sR2U9UC5pbmRleFRvR3JhcGhbYm5dO2lmKHplIT1HZSl7Zm9yKHZhciBFbj1HSihiZS5zb3VyY2VJZCxiZS50YXJnZXRJZCxQKSxJbj1QLmdyYXBoU2V0W0VuXSxZbj0wLGR0PVAubGF5b3V0Tm9kZXNbd2VdO0luLmluZGV4T2YoZHQuaWQpPT09LTE7KWR0PVAubGF5b3V0Tm9kZXNbUC5pZFRvSW5kZXhbZHQucGFyZW50SWRdXSxZbisrO2ZvcihkdD1QLmxheW91dE5vZGVzW2JuXTtJbi5pbmRleE9mKGR0LmlkKT09PS0xOylkdD1QLmxheW91dE5vZGVzW1AuaWRUb0luZGV4W2R0LnBhcmVudElkXV0sWW4rKztpZSo9WW4qVC5uZXN0aW5nRmFjdG9yfWJlLmlkZWFsTGVuZ3RoPWllLGJlLmVsYXN0aWNpdHk9RmUsUC5sYXlvdXRFZGdlcy5wdXNoKGJlKX1yZXR1cm4gUH0sR0o9ZnVuY3Rpb24oZyx4LFQpe3ZhciBMPVVKKGcseCwwLFQpO3JldHVybiAyPkwuY291bnQ/MDpMLmdyYXBofSxVSj1mdW5jdGlvbiB5KGcseCxULEwpe3ZhciBPPUwuZ3JhcGhTZXRbVF07aWYoLTE8Ty5pbmRleE9mKGcpJiYtMTxPLmluZGV4T2YoeCkpcmV0dXJue2NvdW50OjIsZ3JhcGg6VH07Zm9yKHZhciBQPTAsJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgcT1PWyRdLFM9TC5pZFRvSW5kZXhbcV0sVj1MLmxheW91dE5vZGVzW1NdLmNoaWxkcmVuO2lmKFYubGVuZ3RoIT09MCl7dmFyIFk9TC5pbmRleFRvR3JhcGhbTC5pZFRvSW5kZXhbVlswXV1dLHJ0PXkoZyx4LFksTCk7aWYocnQuY291bnQhPT0wKWlmKHJ0LmNvdW50PT09MSl7aWYoUCsrLFA9PT0yKWJyZWFrfWVsc2UgcmV0dXJuIHJ0fX1yZXR1cm57Y291bnQ6UCxncmFwaDpUfX0sV0osWUo9ZnVuY3Rpb24oZyx4KXtmb3IodmFyIFQ9Zy5jbGllbnRXaWR0aCxMPWcuY2xpZW50SGVpZ2h0LE89MDtPPGcubm9kZVNpemU7TysrKXt2YXIgUD1nLmxheW91dE5vZGVzW09dO1AuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIVAuaXNMb2NrZWQmJihQLnBvc2l0aW9uWD1NYXRoLnJhbmRvbSgpKlQsUC5wb3NpdGlvblk9TWF0aC5yYW5kb20oKSpMKX19LHpCPWZ1bmN0aW9uKGcseCxUKXt2YXIgTD1nLmJvdW5kaW5nQm94LE89e3gxOjEvMCx4MjotMS8wLHkxOjEvMCx5MjotMS8wfTtyZXR1cm4geC5ib3VuZGluZ0JveCYmKFQuZm9yRWFjaChmdW5jdGlvbihQKXt2YXIgJD1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W1AuZGF0YSgiaWQiKV1dO08ueDE9TWF0aC5taW4oTy54MSwkLnBvc2l0aW9uWCksTy54Mj1NYXRoLm1heChPLngyLCQucG9zaXRpb25YKSxPLnkxPU1hdGgubWluKE8ueTEsJC5wb3NpdGlvblkpLE8ueTI9TWF0aC5tYXgoTy55MiwkLnBvc2l0aW9uWSl9KSxPLnc9Ty54Mi1PLngxLE8uaD1PLnkyLU8ueTEpLGZ1bmN0aW9uKFAsJCl7dmFyIHE9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtQLmRhdGEoImlkIildXTtpZih4LmJvdW5kaW5nQm94KXt2YXIgUz0ocS5wb3NpdGlvblgtTy54MSkvTy53LFY9KHEucG9zaXRpb25ZLU8ueTEpL08uaDtyZXR1cm57eDpMLngxK1MqTC53LHk6TC55MStWKkwuaH19ZWxzZSByZXR1cm57eDpxLnBvc2l0aW9uWCx5OnEucG9zaXRpb25ZfX19LEtKPWZ1bmN0aW9uKGcseCxUKXt2YXIgTD1ULmxheW91dCxPPVQuZWxlcy5ub2RlcygpLFA9ekIoZyxULE8pO08ucG9zaXRpb25zKFApLGcucmVhZHkhPT0hMCYmKGcucmVhZHk9ITAsTC5vbmUoImxheW91dHJlYWR5IixULnJlYWR5KSxMLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6dGhpc30pKX0sWEo9ZnVuY3Rpb24oZyx4LFQpe1FKKGcseCksdHR0KGcpLGV0dChnLHgpLG50dChnKSxydHQoZyl9LFFKPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPTA7VDxnLmdyYXBoU2V0Lmxlbmd0aDtUKyspZm9yKHZhciBMPWcuZ3JhcGhTZXRbVF0sTz1MLmxlbmd0aCxQPTA7UDxPO1ArKylmb3IodmFyICQ9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtMW1BdXV0scT1QKzE7cTxPO3ErKyl7dmFyIFM9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtMW3FdXV07WkooJCxTLGcseCl9fSxxQj1mdW5jdGlvbihnKXtyZXR1cm4tZysyKmcqTWF0aC5yYW5kb20oKX0sWko9ZnVuY3Rpb24oZyx4LFQsTCl7dmFyIE89Zy5jbXB0SWQsUD14LmNtcHRJZDtpZighKE8hPT1QJiYhVC5pc0NvbXBvdW5kKSl7dmFyICQ9eC5wb3NpdGlvblgtZy5wb3NpdGlvblgscT14LnBvc2l0aW9uWS1nLnBvc2l0aW9uWSxTPTE7JD09PTAmJnE9PT0wJiYoJD1xQihTKSxxPXFCKFMpKTt2YXIgVj1KSihnLHgsJCxxKTtpZihWPjApdmFyIFk9TC5ub2RlT3ZlcmxhcCpWLHJ0PU1hdGguc3FydCgkKiQrcSpxKSxvdD1ZKiQvcnQsaHQ9WSpxL3J0O2Vsc2UgdmFyIGR0PXdDKGcsJCxxKSxMdD13Qyh4LC0xKiQsLTEqcSksa3Q9THQueC1kdC54LER0PUx0LnktZHQueSxQdD1rdCprdCtEdCpEdCxydD1NYXRoLnNxcnQoUHQpLFk9KGcubm9kZVJlcHVsc2lvbit4Lm5vZGVSZXB1bHNpb24pL1B0LG90PVkqa3QvcnQsaHQ9WSpEdC9ydDtnLmlzTG9ja2VkfHwoZy5vZmZzZXRYLT1vdCxnLm9mZnNldFktPWh0KSx4LmlzTG9ja2VkfHwoeC5vZmZzZXRYKz1vdCx4Lm9mZnNldFkrPWh0KX19LEpKPWZ1bmN0aW9uKGcseCxULEwpe2lmKFQ+MCl2YXIgTz1nLm1heFgteC5taW5YO2Vsc2UgdmFyIE89eC5tYXhYLWcubWluWDtpZihMPjApdmFyIFA9Zy5tYXhZLXgubWluWTtlbHNlIHZhciBQPXgubWF4WS1nLm1pblk7cmV0dXJuIE8+PTAmJlA+PTA/TWF0aC5zcXJ0KE8qTytQKlApOjB9LHdDPWZ1bmN0aW9uKGcseCxUKXt2YXIgTD1nLnBvc2l0aW9uWCxPPWcucG9zaXRpb25ZLFA9Zy5oZWlnaHR8fDEsJD1nLndpZHRofHwxLHE9VC94LFM9UC8kLFY9e307cmV0dXJuIHg9PT0wJiYwPFR8fHg9PT0wJiYwPlQ/KFYueD1MLFYueT1PK1AvMixWKTowPHgmJi0xKlM8PXEmJnE8PVM/KFYueD1MKyQvMixWLnk9TyskKlQvMi94LFYpOjA+eCYmLTEqUzw9cSYmcTw9Uz8oVi54PUwtJC8yLFYueT1PLSQqVC8yL3gsVik6MDxUJiYocTw9LTEqU3x8cT49Uyk/KFYueD1MK1AqeC8yL1QsVi55PU8rUC8yLFYpOigwPlQmJihxPD0tMSpTfHxxPj1TKSYmKFYueD1MLVAqeC8yL1QsVi55PU8tUC8yKSxWKX0sdHR0PWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPTA7VDxnLmVkZ2VTaXplO1QrKyl7dmFyIEw9Zy5sYXlvdXRFZGdlc1tUXSxPPWcuaWRUb0luZGV4W0wuc291cmNlSWRdLFA9Zy5sYXlvdXROb2Rlc1tPXSwkPWcuaWRUb0luZGV4W0wudGFyZ2V0SWRdLHE9Zy5sYXlvdXROb2Rlc1skXSxTPXEucG9zaXRpb25YLVAucG9zaXRpb25YLFY9cS5wb3NpdGlvblktUC5wb3NpdGlvblk7aWYoIShTPT09MCYmVj09PTApKXt2YXIgWT13QyhQLFMsVikscnQ9d0MocSwtMSpTLC0xKlYpLG90PXJ0LngtWS54LGh0PXJ0LnktWS55LGR0PU1hdGguc3FydChvdCpvdCtodCpodCksTHQ9TWF0aC5wb3coTC5pZGVhbExlbmd0aC1kdCwyKS9MLmVsYXN0aWNpdHk7aWYoZHQhPT0wKXZhciBrdD1MdCpvdC9kdCxEdD1MdCpodC9kdDtlbHNlIHZhciBrdD0wLER0PTA7UC5pc0xvY2tlZHx8KFAub2Zmc2V0WCs9a3QsUC5vZmZzZXRZKz1EdCkscS5pc0xvY2tlZHx8KHEub2Zmc2V0WC09a3QscS5vZmZzZXRZLT1EdCl9fX0sZXR0PWZ1bmN0aW9uKGcseCl7aWYoeC5ncmF2aXR5IT09MClmb3IodmFyIFQ9MSxMPTA7TDxnLmdyYXBoU2V0Lmxlbmd0aDtMKyspe3ZhciBPPWcuZ3JhcGhTZXRbTF0sUD1PLmxlbmd0aDtpZihMPT09MCl2YXIgJD1nLmNsaWVudEhlaWdodC8yLHE9Zy5jbGllbnRXaWR0aC8yO2Vsc2UgdmFyIFM9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtPWzBdXV0sVj1nLmxheW91dE5vZGVzW2cuaWRUb0luZGV4W1MucGFyZW50SWRdXSwkPVYucG9zaXRpb25YLHE9Vi5wb3NpdGlvblk7Zm9yKHZhciBZPTA7WTxQO1krKyl7dmFyIHJ0PWcubGF5b3V0Tm9kZXNbZy5pZFRvSW5kZXhbT1tZXV1dO2lmKCFydC5pc0xvY2tlZCl7dmFyIG90PSQtcnQucG9zaXRpb25YLGh0PXEtcnQucG9zaXRpb25ZLGR0PU1hdGguc3FydChvdCpvdCtodCpodCk7aWYoZHQ+VCl7dmFyIEx0PXguZ3Jhdml0eSpvdC9kdCxrdD14LmdyYXZpdHkqaHQvZHQ7cnQub2Zmc2V0WCs9THQscnQub2Zmc2V0WSs9a3R9fX19fSxudHQ9ZnVuY3Rpb24oZyx4KXt2YXIgVD1bXSxMPTAsTz0tMTtmb3IoVC5wdXNoLmFwcGx5KFQsZy5ncmFwaFNldFswXSksTys9Zy5ncmFwaFNldFswXS5sZW5ndGg7TDw9Tzspe3ZhciBQPVRbTCsrXSwkPWcuaWRUb0luZGV4W1BdLHE9Zy5sYXlvdXROb2Rlc1skXSxTPXEuY2hpbGRyZW47aWYoMDxTLmxlbmd0aCYmIXEuaXNMb2NrZWQpe2Zvcih2YXIgVj1xLm9mZnNldFgsWT1xLm9mZnNldFkscnQ9MDtydDxTLmxlbmd0aDtydCsrKXt2YXIgb3Q9Zy5sYXlvdXROb2Rlc1tnLmlkVG9JbmRleFtTW3J0XV1dO290Lm9mZnNldFgrPVYsb3Qub2Zmc2V0WSs9WSxUWysrT109U1tydF19cS5vZmZzZXRYPTAscS5vZmZzZXRZPTB9fX0scnR0PWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPTA7VDxnLm5vZGVTaXplO1QrKyl7dmFyIEw9Zy5sYXlvdXROb2Rlc1tUXTswPEwuY2hpbGRyZW4ubGVuZ3RoJiYoTC5tYXhYPXZvaWQgMCxMLm1pblg9dm9pZCAwLEwubWF4WT12b2lkIDAsTC5taW5ZPXZvaWQgMCl9Zm9yKHZhciBUPTA7VDxnLm5vZGVTaXplO1QrKyl7dmFyIEw9Zy5sYXlvdXROb2Rlc1tUXTtpZighKDA8TC5jaGlsZHJlbi5sZW5ndGh8fEwuaXNMb2NrZWQpKXt2YXIgTz1pdHQoTC5vZmZzZXRYLEwub2Zmc2V0WSxnLnRlbXBlcmF0dXJlKTtMLnBvc2l0aW9uWCs9Ty54LEwucG9zaXRpb25ZKz1PLnksTC5vZmZzZXRYPTAsTC5vZmZzZXRZPTAsTC5taW5YPUwucG9zaXRpb25YLUwud2lkdGgsTC5tYXhYPUwucG9zaXRpb25YK0wud2lkdGgsTC5taW5ZPUwucG9zaXRpb25ZLUwuaGVpZ2h0LEwubWF4WT1MLnBvc2l0aW9uWStMLmhlaWdodCxzdHQoTCxnKX19Zm9yKHZhciBUPTA7VDxnLm5vZGVTaXplO1QrKyl7dmFyIEw9Zy5sYXlvdXROb2Rlc1tUXTswPEwuY2hpbGRyZW4ubGVuZ3RoJiYhTC5pc0xvY2tlZCYmKEwucG9zaXRpb25YPShMLm1heFgrTC5taW5YKS8yLEwucG9zaXRpb25ZPShMLm1heFkrTC5taW5ZKS8yLEwud2lkdGg9TC5tYXhYLUwubWluWCxMLmhlaWdodD1MLm1heFktTC5taW5ZKX19LGl0dD1mdW5jdGlvbihnLHgsVCl7dmFyIEw9TWF0aC5zcXJ0KGcqZyt4KngpO2lmKEw+VCl2YXIgTz17eDpUKmcvTCx5OlQqeC9MfTtlbHNlIHZhciBPPXt4OmcseTp4fTtyZXR1cm4gT30sc3R0PWZ1bmN0aW9uIHkoZyx4KXt2YXIgVD1nLnBhcmVudElkO2lmKFQhPW51bGwpe3ZhciBMPXgubGF5b3V0Tm9kZXNbeC5pZFRvSW5kZXhbVF1dLE89ITE7aWYoKEwubWF4WD09bnVsbHx8Zy5tYXhYK0wucGFkUmlnaHQ+TC5tYXhYKSYmKEwubWF4WD1nLm1heFgrTC5wYWRSaWdodCxPPSEwKSwoTC5taW5YPT1udWxsfHxnLm1pblgtTC5wYWRMZWZ0PEwubWluWCkmJihMLm1pblg9Zy5taW5YLUwucGFkTGVmdCxPPSEwKSwoTC5tYXhZPT1udWxsfHxnLm1heFkrTC5wYWRCb3R0b20+TC5tYXhZKSYmKEwubWF4WT1nLm1heFkrTC5wYWRCb3R0b20sTz0hMCksKEwubWluWT09bnVsbHx8Zy5taW5ZLUwucGFkVG9wPEwubWluWSkmJihMLm1pblk9Zy5taW5ZLUwucGFkVG9wLE89ITApLE8pcmV0dXJuIHkoTCx4KX19LEhCPWZ1bmN0aW9uKGcseCl7Zm9yKHZhciBUPWcubGF5b3V0Tm9kZXMsTD1bXSxPPTA7TzxULmxlbmd0aDtPKyspe3ZhciBQPVRbT10sJD1QLmNtcHRJZCxxPUxbJF09TFskXXx8W107cS5wdXNoKFApfWZvcih2YXIgUz0wLE89MDtPPEwubGVuZ3RoO08rKyl7dmFyIFY9TFtPXTtpZihWKXtWLngxPTEvMCxWLngyPS0xLzAsVi55MT0xLzAsVi55Mj0tMS8wO2Zvcih2YXIgWT0wO1k8Vi5sZW5ndGg7WSsrKXt2YXIgcnQ9VltZXTtWLngxPU1hdGgubWluKFYueDEscnQucG9zaXRpb25YLXJ0LndpZHRoLzIpLFYueDI9TWF0aC5tYXgoVi54MixydC5wb3NpdGlvblgrcnQud2lkdGgvMiksVi55MT1NYXRoLm1pbihWLnkxLHJ0LnBvc2l0aW9uWS1ydC5oZWlnaHQvMiksVi55Mj1NYXRoLm1heChWLnkyLHJ0LnBvc2l0aW9uWStydC5oZWlnaHQvMil9Vi53PVYueDItVi54MSxWLmg9Vi55Mi1WLnkxLFMrPVYudypWLmh9fUwuc29ydChmdW5jdGlvbihEdCxQdCl7cmV0dXJuIFB0LncqUHQuaC1EdC53KkR0Lmh9KTtmb3IodmFyIG90PTAsaHQ9MCxkdD0wLEx0PTAsa3Q9TWF0aC5zcXJ0KFMpKmcuY2xpZW50V2lkdGgvZy5jbGllbnRIZWlnaHQsTz0wO088TC5sZW5ndGg7TysrKXt2YXIgVj1MW09dO2lmKFYpe2Zvcih2YXIgWT0wO1k8Vi5sZW5ndGg7WSsrKXt2YXIgcnQ9VltZXTtydC5pc0xvY2tlZHx8KHJ0LnBvc2l0aW9uWCs9b3QtVi54MSxydC5wb3NpdGlvblkrPWh0LVYueTEpfW90Kz1WLncreC5jb21wb25lbnRTcGFjaW5nLGR0Kz1WLncreC5jb21wb25lbnRTcGFjaW5nLEx0PU1hdGgubWF4KEx0LFYuaCksZHQ+a3QmJihodCs9THQreC5jb21wb25lbnRTcGFjaW5nLG90PTAsZHQ9MCxMdD0wKX19fSxhdHQ9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsYXZvaWRPdmVybGFwUGFkZGluZzoxMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uZGVuc2U6ITEscm93czp2b2lkIDAsY29sczp2b2lkIDAscG9zaXRpb246ZnVuY3Rpb24oZyl7fSxzb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZyx4KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihnLHgpe3JldHVybiB4fX07ZnVuY3Rpb24gVkIoeSl7dGhpcy5vcHRpb25zPWRlKHt9LGF0dCx5KX1WQi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5vcHRpb25zLGc9eSx4PXkuY3ksVD1nLmVsZXMsTD1ULm5vZGVzKCkubm90KCI6cGFyZW50Iik7Zy5zb3J0JiYoTD1MLnNvcnQoZy5zb3J0KSk7dmFyIE89emQoZy5ib3VuZGluZ0JveD9nLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzp4LndpZHRoKCksaDp4LmhlaWdodCgpfSk7aWYoTy5oPT09MHx8Ty53PT09MClULm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZyxmdW5jdGlvbihycil7cmV0dXJue3g6Ty54MSx5Ok8ueTF9fSk7ZWxzZXt2YXIgUD1MLnNpemUoKSwkPU1hdGguc3FydChQKk8uaC9PLncpLHE9TWF0aC5yb3VuZCgkKSxTPU1hdGgucm91bmQoTy53L08uaCokKSxWPWZ1bmN0aW9uKHdyKXtpZih3cj09bnVsbClyZXR1cm4gTWF0aC5taW4ocSxTKTt2YXIgdXI9TWF0aC5taW4ocSxTKTt1cj09cT9xPXdyOlM9d3J9LFk9ZnVuY3Rpb24od3Ipe2lmKHdyPT1udWxsKXJldHVybiBNYXRoLm1heChxLFMpO3ZhciB1cj1NYXRoLm1heChxLFMpO3VyPT1xP3E9d3I6Uz13cn0scnQ9Zy5yb3dzLG90PWcuY29scyE9bnVsbD9nLmNvbHM6Zy5jb2x1bW5zO2lmKHJ0IT1udWxsJiZvdCE9bnVsbClxPXJ0LFM9b3Q7ZWxzZSBpZihydCE9bnVsbCYmb3Q9PW51bGwpcT1ydCxTPU1hdGguY2VpbChQL3EpO2Vsc2UgaWYocnQ9PW51bGwmJm90IT1udWxsKVM9b3QscT1NYXRoLmNlaWwoUC9TKTtlbHNlIGlmKFMqcT5QKXt2YXIgaHQ9VigpLGR0PVkoKTsoaHQtMSkqZHQ+PVA/VihodC0xKTooZHQtMSkqaHQ+PVAmJlkoZHQtMSl9ZWxzZSBmb3IoO1MqcTxQOyl7dmFyIEx0PVYoKSxrdD1ZKCk7KGt0KzEpKkx0Pj1QP1koa3QrMSk6VihMdCsxKX12YXIgRHQ9Ty53L1MsUHQ9Ty5oL3E7aWYoZy5jb25kZW5zZSYmKER0PTAsUHQ9MCksZy5hdm9pZE92ZXJsYXApZm9yKHZhciAkdD0wOyR0PEwubGVuZ3RoOyR0Kyspe3ZhciBadD1MWyR0XSxZdD1adC5fcHJpdmF0ZS5wb3NpdGlvbjsoWXQueD09bnVsbHx8WXQueT09bnVsbCkmJihZdC54PTAsWXQueT0wKTt2YXIgcXQ9WnQubGF5b3V0RGltZW5zaW9ucyhnKSxuZT1nLmF2b2lkT3ZlcmxhcFBhZGRpbmcsR3Q9cXQudytuZSxnZT1xdC5oK25lO0R0PU1hdGgubWF4KER0LEd0KSxQdD1NYXRoLm1heChQdCxnZSl9Zm9yKHZhciBiZT17fSxpZT1mdW5jdGlvbih3cix1cil7cmV0dXJuISFiZVsiYy0iK3dyKyItIit1cl19LEZlPWZ1bmN0aW9uKHdyLHVyKXtiZVsiYy0iK3dyKyItIit1cl09ITB9LHdlPTAsYm49MCx6ZT1mdW5jdGlvbigpe2JuKyssYm4+PVMmJihibj0wLHdlKyspfSxHZT17fSxFbj0wO0VuPEwubGVuZ3RoO0VuKyspe3ZhciBJbj1MW0VuXSxZbj1nLnBvc2l0aW9uKEluKTtpZihZbiYmKFluLnJvdyE9PXZvaWQgMHx8WW4uY29sIT09dm9pZCAwKSl7dmFyIFNuPXtyb3c6WW4ucm93LGNvbDpZbi5jb2x9O2lmKFNuLmNvbD09PXZvaWQgMClmb3IoU24uY29sPTA7aWUoU24ucm93LFNuLmNvbCk7KVNuLmNvbCsrO2Vsc2UgaWYoU24ucm93PT09dm9pZCAwKWZvcihTbi5yb3c9MDtpZShTbi5yb3csU24uY29sKTspU24ucm93Kys7R2VbSW4uaWQoKV09U24sRmUoU24ucm93LFNuLmNvbCl9fXZhciBXbj1mdW5jdGlvbih3cix1cil7dmFyIGVyLHZuO2lmKHdyLmxvY2tlZCgpfHx3ci5pc1BhcmVudCgpKXJldHVybiExO3ZhciBncj1HZVt3ci5pZCgpXTtpZihncillcj1nci5jb2wqRHQrRHQvMitPLngxLHZuPWdyLnJvdypQdCtQdC8yK08ueTE7ZWxzZXtmb3IoO2llKHdlLGJuKTspemUoKTtlcj1ibipEdCtEdC8yK08ueDEsdm49d2UqUHQrUHQvMitPLnkxLEZlKHdlLGJuKSx6ZSgpfXJldHVybnt4OmVyLHk6dm59fTtMLmxheW91dFBvc2l0aW9ucyh0aGlzLGcsV24pfXJldHVybiB0aGlzfTt2YXIgb3R0PXtyZWFkeTpmdW5jdGlvbigpe30sc3RvcDpmdW5jdGlvbigpe319O2Z1bmN0aW9uIFpMKHkpe3RoaXMub3B0aW9ucz1kZSh7fSxvdHQseSl9WkwucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuZWxlcyx4PXRoaXM7cmV0dXJuIHkuY3kseC5lbWl0KCJsYXlvdXRzdGFydCIpLGcubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MH19KSx4Lm9uZSgibGF5b3V0cmVhZHkiLHkucmVhZHkpLHguZW1pdCgibGF5b3V0cmVhZHkiKSx4Lm9uZSgibGF5b3V0c3RvcCIseS5zdG9wKSx4LmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxaTC5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgY3R0PXtwb3NpdGlvbnM6dm9pZCAwLHpvb206dm9pZCAwLHBhbjp2b2lkIDAsZml0OiEwLHBhZGRpbmc6MzAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKGcseCl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24oZyx4KXtyZXR1cm4geH19O2Z1bmN0aW9uIEdCKHkpe3RoaXMub3B0aW9ucz1kZSh7fSxjdHQseSl9R0IucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB5PXRoaXMub3B0aW9ucyxnPXkuZWxlcyx4PWcubm9kZXMoKSxUPXl0KHkucG9zaXRpb25zKTtmdW5jdGlvbiBMKE8pe2lmKHkucG9zaXRpb25zPT1udWxsKXJldHVybiBTSyhPLnBvc2l0aW9uKCkpO2lmKFQpcmV0dXJuIHkucG9zaXRpb25zKE8pO3ZhciBQPXkucG9zaXRpb25zW08uX3ByaXZhdGUuZGF0YS5pZF07cmV0dXJuIFA/P251bGx9cmV0dXJuIHgubGF5b3V0UG9zaXRpb25zKHRoaXMseSxmdW5jdGlvbihPLFApe3ZhciAkPUwoTyk7cmV0dXJuIE8ubG9ja2VkKCl8fCQ9PW51bGw/ITE6JH0pLHRoaXN9O3ZhciB1dHQ9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZyx4KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihnLHgpe3JldHVybiB4fX07ZnVuY3Rpb24gVUIoeSl7dGhpcy5vcHRpb25zPWRlKHt9LHV0dCx5KX1VQi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5vcHRpb25zLGc9eS5jeSx4PXkuZWxlcyxUPXpkKHkuYm91bmRpbmdCb3g/eS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6Zy53aWR0aCgpLGg6Zy5oZWlnaHQoKX0pLEw9ZnVuY3Rpb24oUCwkKXtyZXR1cm57eDpULngxK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSpULncpLHk6VC55MStNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqVC5oKX19O3JldHVybiB4Lm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMseSxMKSx0aGlzfTt2YXIgbHR0PVt7bmFtZToiYnJlYWR0aGZpcnN0IixpbXBsOmpCfSx7bmFtZToiY2lyY2xlIixpbXBsOnBDfSx7bmFtZToiY29uY2VudHJpYyIsaW1wbDokQn0se25hbWU6ImNvc2UiLGltcGw6YkN9LHtuYW1lOiJncmlkIixpbXBsOlZCfSx7bmFtZToibnVsbCIsaW1wbDpaTH0se25hbWU6InByZXNldCIsaW1wbDpHQn0se25hbWU6InJhbmRvbSIsaW1wbDpVQn1dO2Z1bmN0aW9uIFdCKHkpe3RoaXMub3B0aW9ucz15LHRoaXMubm90aWZpY2F0aW9ucz0wfXZhciBZQj1mdW5jdGlvbigpe30sS0I9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkEgaGVhZGxlc3MgaW5zdGFuY2UgY2FuIG5vdCByZW5kZXIgaW1hZ2VzIil9O1dCLnByb3RvdHlwZT17cmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlOllCLG5vdGlmeTpmdW5jdGlvbigpe3RoaXMubm90aWZpY2F0aW9ucysrfSxpbml0OllCLGlzSGVhZGxlc3M6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scG5nOktCLGpwZzpLQn07dmFyIEpMPXt9O0pMLmFycm93U2hhcGVXaWR0aD0uMyxKTC5yZWdpc3RlckFycm93U2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5hcnJvd1NoYXBlcz17fSxnPXRoaXMseD1mdW5jdGlvbihTLFYsWSxydCxvdCxodCxkdCl7dmFyIEx0PW90LngtWS8yLWR0LGt0PW90LngrWS8yK2R0LER0PW90LnktWS8yLWR0LFB0PW90LnkrWS8yK2R0LCR0PUx0PD1TJiZTPD1rdCYmRHQ8PVYmJlY8PVB0O3JldHVybiAkdH0sVD1mdW5jdGlvbihTLFYsWSxydCxvdCl7dmFyIGh0PVMqTWF0aC5jb3MocnQpLVYqTWF0aC5zaW4ocnQpLGR0PVMqTWF0aC5zaW4ocnQpK1YqTWF0aC5jb3MocnQpLEx0PWh0Klksa3Q9ZHQqWSxEdD1MdCtvdC54LFB0PWt0K290Lnk7cmV0dXJue3g6RHQseTpQdH19LEw9ZnVuY3Rpb24oUyxWLFkscnQpe2Zvcih2YXIgb3Q9W10saHQ9MDtodDxTLmxlbmd0aDtodCs9Mil7dmFyIGR0PVNbaHRdLEx0PVNbaHQrMV07b3QucHVzaChUKGR0LEx0LFYsWSxydCkpfXJldHVybiBvdH0sTz1mdW5jdGlvbihTKXtmb3IodmFyIFY9W10sWT0wO1k8Uy5sZW5ndGg7WSsrKXt2YXIgcnQ9U1tZXTtWLnB1c2gocnQueCxydC55KX1yZXR1cm4gVn0sUD1mdW5jdGlvbihTKXtyZXR1cm4gUy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSpTLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS5wZlZhbHVlKjJ9LCQ9ZnVuY3Rpb24oUyxWKXttdChWKSYmKFY9eVtWXSkseVtTXT1kZSh7bmFtZTpTLHBvaW50czpbLS4xNSwtLjMsLjE1LC0uMywuMTUsLjMsLS4xNSwuM10sY29sbGlkZTpmdW5jdGlvbihydCxvdCxodCxkdCxMdCxrdCl7dmFyIER0PU8oTCh0aGlzLnBvaW50cyxodCsyKmt0LGR0LEx0KSksUHQ9cWQocnQsb3QsRHQpO3JldHVybiBQdH0scm91Z2hDb2xsaWRlOngsZHJhdzpmdW5jdGlvbihydCxvdCxodCxkdCl7dmFyIEx0PUwodGhpcy5wb2ludHMsb3QsaHQsZHQpO2cuYXJyb3dTaGFwZUltcGwoInBvbHlnb24iKShydCxMdCl9LHNwYWNpbmc6ZnVuY3Rpb24ocnQpe3JldHVybiAwfSxnYXA6UH0sVil9OyQoIm5vbmUiLHtjb2xsaWRlOndtLHJvdWdoQ29sbGlkZTp3bSxkcmF3OkVMLHNwYWNpbmc6eGcsZ2FwOnhnfSksJCgidHJpYW5nbGUiLHtwb2ludHM6Wy0uMTUsLS4zLDAsMCwuMTUsLS4zXX0pLCQoImFycm93IiwidHJpYW5nbGUiKSwkKCJ0cmlhbmdsZS1iYWNrY3VydmUiLHtwb2ludHM6eS50cmlhbmdsZS5wb2ludHMsY29udHJvbFBvaW50OlswLC0uMTVdLHJvdWdoQ29sbGlkZTp4LGRyYXc6ZnVuY3Rpb24oUyxWLFkscnQsb3Qpe3ZhciBodD1MKHRoaXMucG9pbnRzLFYsWSxydCksZHQ9dGhpcy5jb250cm9sUG9pbnQsTHQ9VChkdFswXSxkdFsxXSxWLFkscnQpO2cuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShTLGh0LEx0KX0sZ2FwOmZ1bmN0aW9uKFMpe3JldHVybiBQKFMpKi44fX0pLCQoInRyaWFuZ2xlLXRlZSIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxwb2ludHNUZWU6Wy0uMTUsLS40LC0uMTUsLS41LC4xNSwtLjUsLjE1LC0uNF0sY29sbGlkZTpmdW5jdGlvbihTLFYsWSxydCxvdCxodCxkdCl7dmFyIEx0PU8oTCh0aGlzLnBvaW50cyxZKzIqZHQscnQsb3QpKSxrdD1PKEwodGhpcy5wb2ludHNUZWUsWSsyKmR0LHJ0LG90KSksRHQ9cWQoUyxWLEx0KXx8cWQoUyxWLGt0KTtyZXR1cm4gRHR9LGRyYXc6ZnVuY3Rpb24oUyxWLFkscnQsb3Qpe3ZhciBodD1MKHRoaXMucG9pbnRzLFYsWSxydCksZHQ9TCh0aGlzLnBvaW50c1RlZSxWLFkscnQpO2cuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShTLGh0LGR0KX19KSwkKCJjaXJjbGUtdHJpYW5nbGUiLHtyYWRpdXM6LjE1LHBvaW50c1RyOlswLC0uMTUsLjE1LC0uNDUsLS4xNSwtLjQ1LDAsLS4xNV0sY29sbGlkZTpmdW5jdGlvbihTLFYsWSxydCxvdCxodCxkdCl7dmFyIEx0PW90LGt0PU1hdGgucG93KEx0LngtUywyKStNYXRoLnBvdyhMdC55LVYsMik8PU1hdGgucG93KChZKzIqZHQpKnRoaXMucmFkaXVzLDIpLER0PU8oTCh0aGlzLnBvaW50cyxZKzIqZHQscnQsb3QpKTtyZXR1cm4gcWQoUyxWLER0KXx8a3R9LGRyYXc6ZnVuY3Rpb24oUyxWLFkscnQsb3Qpe3ZhciBodD1MKHRoaXMucG9pbnRzVHIsVixZLHJ0KTtnLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoUyxodCxydC54LHJ0LnksdGhpcy5yYWRpdXMqVil9LHNwYWNpbmc6ZnVuY3Rpb24oUyl7cmV0dXJuIGcuZ2V0QXJyb3dXaWR0aChTLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLFMucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlKSp0aGlzLnJhZGl1c319KSwkKCJ0cmlhbmdsZS1jcm9zcyIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxiYXNlQ3Jvc3NMaW5lUHRzOlstLjE1LC0uNCwtLjE1LC0uNCwuMTUsLS40LC4xNSwtLjRdLGNyb3NzTGluZVB0czpmdW5jdGlvbihTLFYpe3ZhciBZPXRoaXMuYmFzZUNyb3NzTGluZVB0cy5zbGljZSgpLHJ0PVYvUyxvdD0zLGh0PTU7cmV0dXJuIFlbb3RdPVlbb3RdLXJ0LFlbaHRdPVlbaHRdLXJ0LFl9LGNvbGxpZGU6ZnVuY3Rpb24oUyxWLFkscnQsb3QsaHQsZHQpe3ZhciBMdD1PKEwodGhpcy5wb2ludHMsWSsyKmR0LHJ0LG90KSksa3Q9TyhMKHRoaXMuY3Jvc3NMaW5lUHRzKFksaHQpLFkrMipkdCxydCxvdCkpLER0PXFkKFMsVixMdCl8fHFkKFMsVixrdCk7cmV0dXJuIER0fSxkcmF3OmZ1bmN0aW9uKFMsVixZLHJ0LG90KXt2YXIgaHQ9TCh0aGlzLnBvaW50cyxWLFkscnQpLGR0PUwodGhpcy5jcm9zc0xpbmVQdHMoVixvdCksVixZLHJ0KTtnLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoUyxodCxkdCl9fSksJCgidmVlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uMywwLC0uMTVdLGdhcDpmdW5jdGlvbihTKXtyZXR1cm4gUChTKSouNTI1fX0pLCQoImNpcmNsZSIse3JhZGl1czouMTUsY29sbGlkZTpmdW5jdGlvbihTLFYsWSxydCxvdCxodCxkdCl7dmFyIEx0PW90LGt0PU1hdGgucG93KEx0LngtUywyKStNYXRoLnBvdyhMdC55LVYsMik8PU1hdGgucG93KChZKzIqZHQpKnRoaXMucmFkaXVzLDIpO3JldHVybiBrdH0sZHJhdzpmdW5jdGlvbihTLFYsWSxydCxvdCl7Zy5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKFMscnQueCxydC55LHRoaXMucmFkaXVzKlYpfSxzcGFjaW5nOmZ1bmN0aW9uKFMpe3JldHVybiBnLmdldEFycm93V2lkdGgoUy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxTLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5yYWRpdXN9fSksJCgidGVlIix7cG9pbnRzOlstLjE1LDAsLS4xNSwtLjEsLjE1LC0uMSwuMTUsMF0sc3BhY2luZzpmdW5jdGlvbihTKXtyZXR1cm4gMX0sZ2FwOmZ1bmN0aW9uKFMpe3JldHVybiAxfX0pLCQoInNxdWFyZSIse3BvaW50czpbLS4xNSwwLC4xNSwwLC4xNSwtLjMsLS4xNSwtLjNdfSksJCgiZGlhbW9uZCIse3BvaW50czpbLS4xNSwtLjE1LDAsLS4zLC4xNSwtLjE1LDAsMF0sZ2FwOmZ1bmN0aW9uKFMpe3JldHVybiBTLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKlMucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfX0pLCQoImNoZXZyb24iLHtwb2ludHM6WzAsMCwtLjE1LC0uMTUsLS4xLC0uMiwwLC0uMSwuMSwtLjIsLjE1LC0uMTVdLGdhcDpmdW5jdGlvbihTKXtyZXR1cm4gLjk1KlMucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqUy5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWV9fSl9O3ZhciBEMz17fTtEMy5wcm9qZWN0SW50b1ZpZXdwb3J0PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcy5jeSxUPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLEw9VFswXSxPPVRbMV0sUD1UWzRdLCQ9eC5wYW4oKSxxPXguem9vbSgpLFM9KCh5LUwpL1AtJC54KS9xLFY9KChnLU8pL1AtJC55KS9xO3JldHVybltTLFZdfSxEMy5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXJCQilyZXR1cm4gdGhpcy5jb250YWluZXJCQjt2YXIgeT10aGlzLmNvbnRhaW5lcixnPXkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkseD1SLmdldENvbXB1dGVkU3R5bGUoeSksVD1mdW5jdGlvbihrdCl7cmV0dXJuIHBhcnNlRmxvYXQoeC5nZXRQcm9wZXJ0eVZhbHVlKGt0KSl9LEw9e2xlZnQ6VCgicGFkZGluZy1sZWZ0IikscmlnaHQ6VCgicGFkZGluZy1yaWdodCIpLHRvcDpUKCJwYWRkaW5nLXRvcCIpLGJvdHRvbTpUKCJwYWRkaW5nLWJvdHRvbSIpfSxPPXtsZWZ0OlQoImJvcmRlci1sZWZ0LXdpZHRoIikscmlnaHQ6VCgiYm9yZGVyLXJpZ2h0LXdpZHRoIiksdG9wOlQoImJvcmRlci10b3Atd2lkdGgiKSxib3R0b206VCgiYm9yZGVyLWJvdHRvbS13aWR0aCIpfSxQPXkuY2xpZW50V2lkdGgsJD15LmNsaWVudEhlaWdodCxxPUwubGVmdCtMLnJpZ2h0LFM9TC50b3ArTC5ib3R0b20sVj1PLmxlZnQrTy5yaWdodCxZPWcud2lkdGgvKFArVikscnQ9UC1xLG90PSQtUyxodD1nLmxlZnQrTC5sZWZ0K08ubGVmdCxkdD1nLnRvcCtMLnRvcCtPLnRvcDtyZXR1cm4gdGhpcy5jb250YWluZXJCQj1baHQsZHQscnQsb3QsWV19LEQzLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZT1mdW5jdGlvbigpe3RoaXMuY29udGFpbmVyQkI9bnVsbH0sRDMuZmluZE5lYXJlc3RFbGVtZW50PWZ1bmN0aW9uKHksZyx4LFQpe3JldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHMoeSxnLHgsVClbMF19LEQzLmZpbmROZWFyZXN0RWxlbWVudHM9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcyxPPXRoaXMsUD1PLmdldENhY2hlZFpTb3J0ZWRFbGVzKCksJD1bXSxxPU8uY3kuem9vbSgpLFM9Ty5jeS5oYXNDb21wb3VuZE5vZGVzKCksVj0oVD8yNDo4KS9xLFk9KFQ/ODoyKS9xLHJ0PShUPzg6MikvcSxvdD0xLzAsaHQsZHQ7eCYmKFA9UC5pbnRlcmFjdGl2ZSk7ZnVuY3Rpb24gTHQocXQsbmUpe2lmKHF0LmlzTm9kZSgpKXtpZihkdClyZXR1cm47ZHQ9cXQsJC5wdXNoKHF0KX1pZihxdC5pc0VkZ2UoKSYmKG5lPT1udWxsfHxuZTxvdCkpaWYoaHQpe2lmKGh0LnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09cXQucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUmJmh0LnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09cXQucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUpe2Zvcih2YXIgR3Q9MDtHdDwkLmxlbmd0aDtHdCsrKWlmKCRbR3RdLmlzRWRnZSgpKXskW0d0XT1xdCxodD1xdCxvdD1uZT8/b3Q7YnJlYWt9fX1lbHNlICQucHVzaChxdCksaHQ9cXQsb3Q9bmU/P290fWZ1bmN0aW9uIGt0KHF0KXt2YXIgbmU9cXQub3V0ZXJXaWR0aCgpKzIqWSxHdD1xdC5vdXRlckhlaWdodCgpKzIqWSxnZT1uZS8yLGJlPUd0LzIsaWU9cXQucG9zaXRpb24oKTtpZihpZS54LWdlPD15JiZ5PD1pZS54K2dlJiZpZS55LWJlPD1nJiZnPD1pZS55K2JlKXt2YXIgRmU9Ty5ub2RlU2hhcGVzW0wuZ2V0Tm9kZVNoYXBlKHF0KV07aWYoRmUuY2hlY2tQb2ludCh5LGcsMCxuZSxHdCxpZS54LGllLnkpKXJldHVybiBMdChxdCwwKSwhMH19ZnVuY3Rpb24gRHQocXQpe3ZhciBuZT1xdC5fcHJpdmF0ZSxHdD1uZS5yc2NyYXRjaCxnZT1xdC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxiZT1xdC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUsaWU9Z2UvMitWLEZlPWllKmllLHdlPWllKjIsRW49bmUuc291cmNlLEluPW5lLnRhcmdldCxibjtpZihHdC5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fEd0LmVkZ2VUeXBlPT09InN0cmFpZ2h0Inx8R3QuZWRnZVR5cGU9PT0iaGF5c3RhY2siKXtmb3IodmFyIHplPUd0LmFsbHB0cyxHZT0wO0dlKzM8emUubGVuZ3RoO0dlKz0yKWlmKCRLKHksZyx6ZVtHZV0semVbR2UrMV0semVbR2UrMl0semVbR2UrM10sd2UpJiZGZT4oYm49R0soeSxnLHplW0dlXSx6ZVtHZSsxXSx6ZVtHZSsyXSx6ZVtHZSszXSkpKXJldHVybiBMdChxdCxibiksITB9ZWxzZSBpZihHdC5lZGdlVHlwZT09PSJiZXppZXIifHxHdC5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fEd0LmVkZ2VUeXBlPT09InNlbGYifHxHdC5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2Zvcih2YXIgemU9R3QuYWxscHRzLEdlPTA7R2UrNTxHdC5hbGxwdHMubGVuZ3RoO0dlKz00KWlmKHpLKHksZyx6ZVtHZV0semVbR2UrMV0semVbR2UrMl0semVbR2UrM10semVbR2UrNF0semVbR2UrNV0sd2UpJiZGZT4oYm49VksoeSxnLHplW0dlXSx6ZVtHZSsxXSx6ZVtHZSsyXSx6ZVtHZSszXSx6ZVtHZSs0XSx6ZVtHZSs1XSkpKXJldHVybiBMdChxdCxibiksITB9Zm9yKHZhciBFbj1Fbnx8bmUuc291cmNlLEluPUlufHxuZS50YXJnZXQsWW49TC5nZXRBcnJvd1dpZHRoKGdlLGJlKSxTbj1be25hbWU6InNvdXJjZSIseDpHdC5hcnJvd1N0YXJ0WCx5Okd0LmFycm93U3RhcnRZLGFuZ2xlOkd0LnNyY0Fycm93QW5nbGV9LHtuYW1lOiJ0YXJnZXQiLHg6R3QuYXJyb3dFbmRYLHk6R3QuYXJyb3dFbmRZLGFuZ2xlOkd0LnRndEFycm93QW5nbGV9LHtuYW1lOiJtaWQtc291cmNlIix4Okd0Lm1pZFgseTpHdC5taWRZLGFuZ2xlOkd0Lm1pZHNyY0Fycm93QW5nbGV9LHtuYW1lOiJtaWQtdGFyZ2V0Iix4Okd0Lm1pZFgseTpHdC5taWRZLGFuZ2xlOkd0Lm1pZHRndEFycm93QW5nbGV9XSxHZT0wO0dlPFNuLmxlbmd0aDtHZSsrKXt2YXIgV249U25bR2VdLHJyPU8uYXJyb3dTaGFwZXNbcXQucHN0eWxlKFduLm5hbWUrIi1hcnJvdy1zaGFwZSIpLnZhbHVlXSx3cj1xdC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZTtpZihyci5yb3VnaENvbGxpZGUoeSxnLFluLFduLmFuZ2xlLHt4OlduLngseTpXbi55fSx3cixWKSYmcnIuY29sbGlkZSh5LGcsWW4sV24uYW5nbGUse3g6V24ueCx5OlduLnl9LHdyLFYpKXJldHVybiBMdChxdCksITB9UyYmJC5sZW5ndGg+MCYmKGt0KEVuKSxrdChJbikpfWZ1bmN0aW9uIFB0KHF0LG5lLEd0KXtyZXR1cm4geXAocXQsbmUsR3QpfWZ1bmN0aW9uICR0KHF0LG5lKXt2YXIgR3Q9cXQuX3ByaXZhdGUsZ2U9cnQsYmU7bmU/YmU9bmUrIi0iOmJlPSIiLHF0LmJvdW5kaW5nQm94KCk7dmFyIGllPUd0LmxhYmVsQm91bmRzW25lfHwibWFpbiJdLEZlPXF0LnBzdHlsZShiZSsibGFiZWwiKS52YWx1ZSx3ZT1xdC5wc3R5bGUoInRleHQtZXZlbnRzIikuc3RyVmFsdWU9PT0ieWVzIjtpZighKCF3ZXx8IUZlKSl7dmFyIGJuPVB0KEd0LnJzY3JhdGNoLCJsYWJlbFgiLG5lKSx6ZT1QdChHdC5yc2NyYXRjaCwibGFiZWxZIixuZSksR2U9UHQoR3QucnNjcmF0Y2gsImxhYmVsQW5nbGUiLG5lKSxFbj1xdC5wc3R5bGUoYmUrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLEluPXF0LnBzdHlsZShiZSsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsWW49aWUueDEtZ2UtRW4sU249aWUueDIrZ2UtRW4sV249aWUueTEtZ2UtSW4scnI9aWUueTIrZ2UtSW47aWYoR2Upe3ZhciB3cj1NYXRoLmNvcyhHZSksdXI9TWF0aC5zaW4oR2UpLGVyPWZ1bmN0aW9uKEVhLENpKXtyZXR1cm4gRWE9RWEtYm4sQ2k9Q2ktemUse3g6RWEqd3ItQ2kqdXIrYm4seTpFYSp1citDaSp3cit6ZX19LHZuPWVyKFluLFduKSxncj1lcihZbixyciksZnI9ZXIoU24sV24pLEpyPWVyKFNuLHJyKSx2aT1bdm4ueCtFbix2bi55K0luLGZyLngrRW4sZnIueStJbixKci54K0VuLEpyLnkrSW4sZ3IueCtFbixnci55K0luXTtpZihxZCh5LGcsdmkpKXJldHVybiBMdChxdCksITB9ZWxzZSBpZihRNShpZSx5LGcpKXJldHVybiBMdChxdCksITB9fWZvcih2YXIgWnQ9UC5sZW5ndGgtMTtadD49MDtadC0tKXt2YXIgWXQ9UFtadF07WXQuaXNOb2RlKCk/a3QoWXQpfHwkdChZdCk6RHQoWXQpfHwkdChZdCl8fCR0KFl0LCJzb3VyY2UiKXx8JHQoWXQsInRhcmdldCIpfXJldHVybiAkfSxEMy5nZXRBbGxJbkJveD1mdW5jdGlvbih5LGcseCxUKXt2YXIgTD10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuaW50ZXJhY3RpdmUsTz1bXSxQPU1hdGgubWluKHkseCksJD1NYXRoLm1heCh5LHgpLHE9TWF0aC5taW4oZyxUKSxTPU1hdGgubWF4KGcsVCk7eT1QLHg9JCxnPXEsVD1TO2Zvcih2YXIgVj16ZCh7eDE6eSx5MTpnLHgyOngseTI6VH0pLFk9MDtZPEwubGVuZ3RoO1krKyl7dmFyIHJ0PUxbWV07aWYocnQuaXNOb2RlKCkpe3ZhciBvdD1ydCxodD1vdC5ib3VuZGluZ0JveCh7aW5jbHVkZU5vZGVzOiEwLGluY2x1ZGVFZGdlczohMSxpbmNsdWRlTGFiZWxzOiExfSk7QUwoVixodCkmJiFoTihodCxWKSYmTy5wdXNoKG90KX1lbHNle3ZhciBkdD1ydCxMdD1kdC5fcHJpdmF0ZSxrdD1MdC5yc2NyYXRjaDtpZihrdC5zdGFydFghPW51bGwmJmt0LnN0YXJ0WSE9bnVsbCYmIVE1KFYsa3Quc3RhcnRYLGt0LnN0YXJ0WSl8fGt0LmVuZFghPW51bGwmJmt0LmVuZFkhPW51bGwmJiFRNShWLGt0LmVuZFgsa3QuZW5kWSkpY29udGludWU7aWYoa3QuZWRnZVR5cGU9PT0iYmV6aWVyInx8a3QuZWRnZVR5cGU9PT0ibXVsdGliZXppZXIifHxrdC5lZGdlVHlwZT09PSJzZWxmInx8a3QuZWRnZVR5cGU9PT0iY29tcG91bmQifHxrdC5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fGt0LmVkZ2VUeXBlPT09ImhheXN0YWNrIil7Zm9yKHZhciBEdD1MdC5yc3R5bGUuYmV6aWVyUHRzfHxMdC5yc3R5bGUubGluZVB0c3x8THQucnN0eWxlLmhheXN0YWNrUHRzLFB0PSEwLCR0PTA7JHQ8RHQubGVuZ3RoOyR0KyspaWYoIWpLKFYsRHRbJHRdKSl7UHQ9ITE7YnJlYWt9UHQmJk8ucHVzaChkdCl9ZWxzZShrdC5lZGdlVHlwZT09PSJoYXlzdGFjayJ8fGt0LmVkZ2VUeXBlPT09InN0cmFpZ2h0IikmJk8ucHVzaChkdCl9fXJldHVybiBPfTt2YXIgdkM9e307dkMuY2FsY3VsYXRlQXJyb3dBbmdsZXM9ZnVuY3Rpb24oeSl7dmFyIGc9eS5fcHJpdmF0ZS5yc2NyYXRjaCx4PWcuZWRnZVR5cGU9PT0iaGF5c3RhY2siLFQ9Zy5lZGdlVHlwZT09PSJiZXppZXIiLEw9Zy5lZGdlVHlwZT09PSJtdWx0aWJlemllciIsTz1nLmVkZ2VUeXBlPT09InNlZ21lbnRzIixQPWcuZWRnZVR5cGU9PT0iY29tcG91bmQiLCQ9Zy5lZGdlVHlwZT09PSJzZWxmIixxLFMsVixZLHJ0LG90LGt0LER0O2lmKHg/KFY9Zy5oYXlzdGFja1B0c1swXSxZPWcuaGF5c3RhY2tQdHNbMV0scnQ9Zy5oYXlzdGFja1B0c1syXSxvdD1nLmhheXN0YWNrUHRzWzNdKTooVj1nLmFycm93U3RhcnRYLFk9Zy5hcnJvd1N0YXJ0WSxydD1nLmFycm93RW5kWCxvdD1nLmFycm93RW5kWSksa3Q9Zy5taWRYLER0PWcubWlkWSxPKXE9Vi1nLnNlZ3B0c1swXSxTPVktZy5zZWdwdHNbMV07ZWxzZSBpZihMfHxQfHwkfHxUKXt2YXIgaHQ9Zy5hbGxwdHMsZHQ9b2YoaHRbMF0saHRbMl0saHRbNF0sLjEpLEx0PW9mKGh0WzFdLGh0WzNdLGh0WzVdLC4xKTtxPVYtZHQsUz1ZLUx0fWVsc2UgcT1WLWt0LFM9WS1EdDtnLnNyY0Fycm93QW5nbGU9QlQocSxTKTt2YXIga3Q9Zy5taWRYLER0PWcubWlkWTtpZih4JiYoa3Q9KFYrcnQpLzIsRHQ9KFkrb3QpLzIpLHE9cnQtVixTPW90LVksTyl7dmFyIGh0PWcuYWxscHRzO2lmKGh0Lmxlbmd0aC8yJTI9PT0wKXt2YXIgUHQ9aHQubGVuZ3RoLzIsJHQ9UHQtMjtxPWh0W1B0XS1odFskdF0sUz1odFtQdCsxXS1odFskdCsxXX1lbHNle3ZhciBQdD1odC5sZW5ndGgvMi0xLCR0PVB0LTIsWnQ9UHQrMjtxPWh0W1B0XS1odFskdF0sUz1odFtQdCsxXS1odFskdCsxXX19ZWxzZSBpZihMfHxQfHwkKXt2YXIgaHQ9Zy5hbGxwdHMsWXQ9Zy5jdHJscHRzLHF0LG5lLEd0LGdlO2lmKFl0Lmxlbmd0aC8yJTI9PT0wKXt2YXIgYmU9aHQubGVuZ3RoLzItMSxpZT1iZSsyLEZlPWllKzI7cXQ9b2YoaHRbYmVdLGh0W2llXSxodFtGZV0sMCksbmU9b2YoaHRbYmUrMV0saHRbaWUrMV0saHRbRmUrMV0sMCksR3Q9b2YoaHRbYmVdLGh0W2llXSxodFtGZV0sMWUtNCksZ2U9b2YoaHRbYmUrMV0saHRbaWUrMV0saHRbRmUrMV0sMWUtNCl9ZWxzZXt2YXIgaWU9aHQubGVuZ3RoLzItMSxiZT1pZS0yLEZlPWllKzI7cXQ9b2YoaHRbYmVdLGh0W2llXSxodFtGZV0sLjQ5OTkpLG5lPW9mKGh0W2JlKzFdLGh0W2llKzFdLGh0W0ZlKzFdLC40OTk5KSxHdD1vZihodFtiZV0saHRbaWVdLGh0W0ZlXSwuNSksZ2U9b2YoaHRbYmUrMV0saHRbaWUrMV0saHRbRmUrMV0sLjUpfXE9R3QtcXQsUz1nZS1uZX1pZihnLm1pZHRndEFycm93QW5nbGU9QlQocSxTKSxnLm1pZERpc3BYPXEsZy5taWREaXNwWT1TLHEqPS0xLFMqPS0xLE8pe3ZhciBodD1nLmFsbHB0cztpZihodC5sZW5ndGgvMiUyIT09MCl7dmFyIFB0PWh0Lmxlbmd0aC8yLTEsWnQ9UHQrMjtxPS0oaHRbWnRdLWh0W1B0XSksUz0tKGh0W1p0KzFdLWh0W1B0KzFdKX19aWYoZy5taWRzcmNBcnJvd0FuZ2xlPUJUKHEsUyksTylxPXJ0LWcuc2VncHRzW2cuc2VncHRzLmxlbmd0aC0yXSxTPW90LWcuc2VncHRzW2cuc2VncHRzLmxlbmd0aC0xXTtlbHNlIGlmKEx8fFB8fCR8fFQpe3ZhciBodD1nLmFsbHB0cyx3ZT1odC5sZW5ndGgsZHQ9b2YoaHRbd2UtNl0saHRbd2UtNF0saHRbd2UtMl0sLjkpLEx0PW9mKGh0W3dlLTVdLGh0W3dlLTNdLGh0W3dlLTFdLC45KTtxPXJ0LWR0LFM9b3QtTHR9ZWxzZSBxPXJ0LWt0LFM9b3QtRHQ7Zy50Z3RBcnJvd0FuZ2xlPUJUKHEsUyl9LHZDLmdldEFycm93V2lkdGg9dkMuZ2V0QXJyb3dIZWlnaHQ9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLmFycm93V2lkdGhDYWNoZT10aGlzLmFycm93V2lkdGhDYWNoZXx8e30sVD14W3krIiwgIitnXTtyZXR1cm4gVHx8KFQ9TWF0aC5tYXgoTWF0aC5wb3coeSoxMy4zNywuOSksMjkpKmcseFt5KyIsICIrZ109VCxUKX07dmFyIG9kPXt9O29kLmZpbmRIYXlzdGFja1BvaW50cz1mdW5jdGlvbih5KXtmb3IodmFyIGc9MDtnPHkubGVuZ3RoO2crKyl7dmFyIHg9eVtnXSxUPXguX3ByaXZhdGUsTD1ULnJzY3JhdGNoO2lmKCFMLmhheXN0YWNrKXt2YXIgTz1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSTtMLnNvdXJjZT17eDpNYXRoLmNvcyhPKSx5Ok1hdGguc2luKE8pfSxPPU1hdGgucmFuZG9tKCkqMipNYXRoLlBJLEwudGFyZ2V0PXt4Ok1hdGguY29zKE8pLHk6TWF0aC5zaW4oTyl9fXZhciBQPVQuc291cmNlLCQ9VC50YXJnZXQscT1QLnBvc2l0aW9uKCksUz0kLnBvc2l0aW9uKCksVj1QLndpZHRoKCksWT0kLndpZHRoKCkscnQ9UC5oZWlnaHQoKSxvdD0kLmhlaWdodCgpLGh0PXgucHN0eWxlKCJoYXlzdGFjay1yYWRpdXMiKS52YWx1ZSxkdD1odC8yO0wuaGF5c3RhY2tQdHM9TC5hbGxwdHM9W0wuc291cmNlLngqVipkdCtxLngsTC5zb3VyY2UueSpydCpkdCtxLnksTC50YXJnZXQueCpZKmR0K1MueCxMLnRhcmdldC55Km90KmR0K1MueV0sTC5taWRYPShMLmFsbHB0c1swXStMLmFsbHB0c1syXSkvMixMLm1pZFk9KEwuYWxscHRzWzFdK0wuYWxscHRzWzNdKS8yLEwuZWRnZVR5cGU9ImhheXN0YWNrIixMLmhheXN0YWNrPSEwLHRoaXMuc3RvcmVFZGdlUHJvamVjdGlvbnMoeCksdGhpcy5jYWxjdWxhdGVBcnJvd0FuZ2xlcyh4KSx0aGlzLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoeCksdGhpcy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyh4KX19LG9kLmZpbmRTZWdtZW50c1BvaW50cz1mdW5jdGlvbih5LGcpe3ZhciB4PXkuX3ByaXZhdGUucnNjcmF0Y2gsVD1nLnBvc1B0cyxMPWcuaW50ZXJzZWN0aW9uUHRzLE89Zy52ZWN0b3JOb3JtSW52ZXJzZSxQPXkucHN0eWxlKCJlZGdlLWRpc3RhbmNlcyIpLnZhbHVlLCQ9eS5wc3R5bGUoInNlZ21lbnQtd2VpZ2h0cyIpLHE9eS5wc3R5bGUoInNlZ21lbnQtZGlzdGFuY2VzIiksUz1NYXRoLm1pbigkLnBmVmFsdWUubGVuZ3RoLHEucGZWYWx1ZS5sZW5ndGgpO3guZWRnZVR5cGU9InNlZ21lbnRzIix4LnNlZ3B0cz1bXTtmb3IodmFyIFY9MDtWPFM7VisrKXt2YXIgWT0kLnBmVmFsdWVbVl0scnQ9cS5wZlZhbHVlW1ZdLG90PTEtWSxodD1ZLGR0PVA9PT0ibm9kZS1wb3NpdGlvbiI/VDpMLEx0PXt4OmR0LngxKm90K2R0LngyKmh0LHk6ZHQueTEqb3QrZHQueTIqaHR9O3guc2VncHRzLnB1c2goTHQueCtPLngqcnQsTHQueStPLnkqcnQpfX0sb2QuZmluZExvb3BQb2ludHM9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9eS5fcHJpdmF0ZS5yc2NyYXRjaCxPPWcuZGlyQ291bnRzLFA9Zy5zcmNQb3MsJD15LnBzdHlsZSgiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiKSxxPSQ/JC5wZlZhbHVlWzBdOnZvaWQgMCxTPXkucHN0eWxlKCJsb29wLWRpcmVjdGlvbiIpLnBmVmFsdWUsVj15LnBzdHlsZSgibG9vcC1zd2VlcCIpLnBmVmFsdWUsWT15LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlO0wuZWRnZVR5cGU9InNlbGYiO3ZhciBydD14LG90PVk7VCYmKHJ0PTAsb3Q9cSk7dmFyIGh0PVMtTWF0aC5QSS8yLGR0PWh0LVYvMixMdD1odCtWLzIsa3Q9UysiXyIrVjtydD1PW2t0XT09PXZvaWQgMD9PW2t0XT0wOisrT1trdF0sTC5jdHJscHRzPVtQLngrTWF0aC5jb3MoZHQpKjEuNCpvdCoocnQvMysxKSxQLnkrTWF0aC5zaW4oZHQpKjEuNCpvdCoocnQvMysxKSxQLngrTWF0aC5jb3MoTHQpKjEuNCpvdCoocnQvMysxKSxQLnkrTWF0aC5zaW4oTHQpKjEuNCpvdCoocnQvMysxKV19LG9kLmZpbmRDb21wb3VuZExvb3BQb2ludHM9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9eS5fcHJpdmF0ZS5yc2NyYXRjaDtMLmVkZ2VUeXBlPSJjb21wb3VuZCI7dmFyIE89Zy5zcmNQb3MsUD1nLnRndFBvcywkPWcuc3JjVyxxPWcuc3JjSCxTPWcudGd0VyxWPWcudGd0SCxZPXkucHN0eWxlKCJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSIpLnBmVmFsdWUscnQ9eS5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksb3Q9cnQ/cnQucGZWYWx1ZVswXTp2b2lkIDAsaHQ9eCxkdD1ZO1QmJihodD0wLGR0PW90KTt2YXIgTHQ9NTAsa3Q9e3g6Ty54LSQvMix5Ok8ueS1xLzJ9LER0PXt4OlAueC1TLzIseTpQLnktVi8yfSxQdD17eDpNYXRoLm1pbihrdC54LER0LngpLHk6TWF0aC5taW4oa3QueSxEdC55KX0sJHQ9LjUsWnQ9TWF0aC5tYXgoJHQsTWF0aC5sb2coJCouMDEpKSxZdD1NYXRoLm1heCgkdCxNYXRoLmxvZyhTKi4wMSkpO0wuY3RybHB0cz1bUHQueCxQdC55LSgxK01hdGgucG93KEx0LDEuMTIpLzEwMCkqZHQqKGh0LzMrMSkqWnQsUHQueC0oMStNYXRoLnBvdyhMdCwxLjEyKS8xMDApKmR0KihodC8zKzEpKll0LFB0LnldfSxvZC5maW5kU3RyYWlnaHRFZGdlUG9pbnRzPWZ1bmN0aW9uKHkpe3kuX3ByaXZhdGUucnNjcmF0Y2guZWRnZVR5cGU9InN0cmFpZ2h0In0sb2QuZmluZEJlemllclBvaW50cz1mdW5jdGlvbih5LGcseCxULEwpe3ZhciBPPXkuX3ByaXZhdGUucnNjcmF0Y2gsUD1nLnZlY3Rvck5vcm1JbnZlcnNlLCQ9Zy5wb3NQdHMscT1nLmludGVyc2VjdGlvblB0cyxTPXkucHN0eWxlKCJlZGdlLWRpc3RhbmNlcyIpLnZhbHVlLFY9eS5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZSxZPXkucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLHJ0PXkucHN0eWxlKCJjb250cm9sLXBvaW50LXdlaWdodHMiKSxvdD1ZJiZydD9NYXRoLm1pbihZLnZhbHVlLmxlbmd0aCxydC52YWx1ZS5sZW5ndGgpOjEsaHQ9WT9ZLnBmVmFsdWVbMF06dm9pZCAwLGR0PXJ0LnZhbHVlWzBdLEx0PVQ7Ty5lZGdlVHlwZT1MdD8ibXVsdGliZXppZXIiOiJiZXppZXIiLE8uY3RybHB0cz1bXTtmb3IodmFyIGt0PTA7a3Q8b3Q7a3QrKyl7dmFyIER0PSguNS1nLmVsZXMubGVuZ3RoLzIreCkqViooTD8tMToxKSxQdD12b2lkIDAsJHQ9dU4oRHQpO0x0JiYoaHQ9WT9ZLnBmVmFsdWVba3RdOlYsZHQ9cnQudmFsdWVba3RdKSxUP1B0PWh0OlB0PWh0IT09dm9pZCAwPyR0Kmh0OnZvaWQgMDt2YXIgWnQ9UHQhPT12b2lkIDA/UHQ6RHQsWXQ9MS1kdCxxdD1kdCxuZT1TPT09Im5vZGUtcG9zaXRpb24iPyQ6cSxHdD17eDpuZS54MSpZdCtuZS54MipxdCx5Om5lLnkxKll0K25lLnkyKnF0fTtPLmN0cmxwdHMucHVzaChHdC54K1AueCpadCxHdC55K1AueSpadCl9fSxvZC5maW5kVGF4aVBvaW50cz1mdW5jdGlvbih5LGcpe3ZhciB4PXkuX3ByaXZhdGUucnNjcmF0Y2g7eC5lZGdlVHlwZT0ic2VnbWVudHMiO3ZhciBUPSJ2ZXJ0aWNhbCIsTD0iaG9yaXpvbnRhbCIsTz0ibGVmdHdhcmQiLFA9InJpZ2h0d2FyZCIsJD0iZG93bndhcmQiLHE9InVwd2FyZCIsUz0iYXV0byIsVj1nLnBvc1B0cyxZPWcuc3JjVyxydD1nLnNyY0gsb3Q9Zy50Z3RXLGh0PWcudGd0SCxkdD15LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZSxMdD1kdCE9PSJub2RlLXBvc2l0aW9uIixrdD15LnBzdHlsZSgidGF4aS1kaXJlY3Rpb24iKS52YWx1ZSxEdD1rdCxQdD15LnBzdHlsZSgidGF4aS10dXJuIiksJHQ9UHQudW5pdHM9PT0iJSIsWnQ9UHQucGZWYWx1ZSxZdD1adDwwLHF0PXkucHN0eWxlKCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIikucGZWYWx1ZSxuZT1MdD8oWStvdCkvMjowLEd0PUx0PyhydCtodCkvMjowLGdlPVYueDItVi54MSxiZT1WLnkyLVYueTEsaWU9ZnVuY3Rpb24oWWksRm8pe3JldHVybiBZaT4wP01hdGgubWF4KFlpLUZvLDApOk1hdGgubWluKFlpK0ZvLDApfSxGZT1pZShnZSxuZSksd2U9aWUoYmUsR3QpLGJuPSExO0R0PT09Uz9rdD1NYXRoLmFicyhGZSk+TWF0aC5hYnMod2UpP0w6VDpEdD09PXF8fER0PT09JD8oa3Q9VCxibj0hMCk6KER0PT09T3x8RHQ9PT1QKSYmKGt0PUwsYm49ITApO3ZhciB6ZT1rdD09PVQsR2U9emU/d2U6RmUsRW49emU/YmU6Z2UsSW49dU4oRW4pLFluPSExOyEoYm4mJigkdHx8WXQpKSYmKER0PT09JCYmRW48MHx8RHQ9PT1xJiZFbj4wfHxEdD09PU8mJkVuPjB8fER0PT09UCYmRW48MCkmJihJbio9LTEsR2U9SW4qTWF0aC5hYnMoR2UpLFluPSEwKTt2YXIgU247aWYoJHQpe3ZhciBXbj1adDwwPzErWnQ6WnQ7U249V24qR2V9ZWxzZXt2YXIgcnI9WnQ8MD9HZTowO1NuPXJyK1p0KklufXZhciB3cj1mdW5jdGlvbihZaSl7cmV0dXJuIE1hdGguYWJzKFlpKTxxdHx8TWF0aC5hYnMoWWkpPj1NYXRoLmFicyhHZSl9LHVyPXdyKFNuKSxlcj13cihNYXRoLmFicyhHZSktTWF0aC5hYnMoU24pKSx2bj11cnx8ZXI7aWYodm4mJiFZbilpZih6ZSl7dmFyIGdyPU1hdGguYWJzKEVuKTw9cnQvMixmcj1NYXRoLmFicyhnZSk8PW90LzI7aWYoZ3Ipe3ZhciBKcj0oVi54MStWLngyKS8yLHZpPVYueTEsWHM9Vi55Mjt4LnNlZ3B0cz1bSnIsdmksSnIsWHNdfWVsc2UgaWYoZnIpe3ZhciBFYT0oVi55MStWLnkyKS8yLENpPVYueDEsaGk9Vi54Mjt4LnNlZ3B0cz1bQ2ksRWEsaGksRWFdfWVsc2UgeC5zZWdwdHM9W1YueDEsVi55Ml19ZWxzZXt2YXIgZ3M9TWF0aC5hYnMoRW4pPD1ZLzIscWk9TWF0aC5hYnMoYmUpPD1odC8yO2lmKGdzKXt2YXIgU2k9KFYueTErVi55MikvMixVaT1WLngxLFZhPVYueDI7eC5zZWdwdHM9W1VpLFNpLFZhLFNpXX1lbHNlIGlmKHFpKXt2YXIgUXM9KFYueDErVi54MikvMixxcz1WLnkxLFRyPVYueTI7eC5zZWdwdHM9W1FzLHFzLFFzLFRyXX1lbHNlIHguc2VncHRzPVtWLngyLFYueTFdfWVsc2UgaWYoemUpe3ZhciBRdD1WLnkxK1NuKyhMdD9ydC8yKkluOjApLGpuPVYueDEsU3I9Vi54Mjt4LnNlZ3B0cz1bam4sUXQsU3IsUXRdfWVsc2V7dmFyIGlyPVYueDErU24rKEx0P1kvMipJbjowKSxzcj1WLnkxLElhPVYueTI7eC5zZWdwdHM9W2lyLHNyLGlyLElhXX19LG9kLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHM9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLnJzY3JhdGNoO2lmKHguZWRnZVR5cGU9PT0iYmV6aWVyIil7dmFyIFQ9Zy5zcmNQb3MsTD1nLnRndFBvcyxPPWcuc3JjVyxQPWcuc3JjSCwkPWcudGd0VyxxPWcudGd0SCxTPWcuc3JjU2hhcGUsVj1nLnRndFNoYXBlLFk9IVgoeC5zdGFydFgpfHwhWCh4LnN0YXJ0WSkscnQ9IVgoeC5hcnJvd1N0YXJ0WCl8fCFYKHguYXJyb3dTdGFydFkpLG90PSFYKHguZW5kWCl8fCFYKHguZW5kWSksaHQ9IVgoeC5hcnJvd0VuZFgpfHwhWCh4LmFycm93RW5kWSksZHQ9MyxMdD10aGlzLmdldEFycm93V2lkdGgoeS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSx5LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5hcnJvd1NoYXBlV2lkdGgsa3Q9ZHQqTHQsRHQ9QzMoe3g6eC5jdHJscHRzWzBdLHk6eC5jdHJscHRzWzFdfSx7eDp4LnN0YXJ0WCx5Onguc3RhcnRZfSksUHQ9RHQ8a3QsJHQ9QzMoe3g6eC5jdHJscHRzWzBdLHk6eC5jdHJscHRzWzFdfSx7eDp4LmVuZFgseTp4LmVuZFl9KSxadD0kdDxrdCxZdD0hMTtpZihZfHxydHx8UHQpe1l0PSEwO3ZhciBxdD17eDp4LmN0cmxwdHNbMF0tVC54LHk6eC5jdHJscHRzWzFdLVQueX0sbmU9TWF0aC5zcXJ0KHF0LngqcXQueCtxdC55KnF0LnkpLEd0PXt4OnF0LngvbmUseTpxdC55L25lfSxnZT1NYXRoLm1heChPLFApLGJlPXt4OnguY3RybHB0c1swXStHdC54KjIqZ2UseTp4LmN0cmxwdHNbMV0rR3QueSoyKmdlfSxpZT1TLmludGVyc2VjdExpbmUoVC54LFQueSxPLFAsYmUueCxiZS55LDApO1B0Pyh4LmN0cmxwdHNbMF09eC5jdHJscHRzWzBdK0d0LngqKGt0LUR0KSx4LmN0cmxwdHNbMV09eC5jdHJscHRzWzFdK0d0LnkqKGt0LUR0KSk6KHguY3RybHB0c1swXT1pZVswXStHdC54Kmt0LHguY3RybHB0c1sxXT1pZVsxXStHdC55Kmt0KX1pZihvdHx8aHR8fFp0KXtZdD0hMDt2YXIgRmU9e3g6eC5jdHJscHRzWzBdLUwueCx5OnguY3RybHB0c1sxXS1MLnl9LHdlPU1hdGguc3FydChGZS54KkZlLngrRmUueSpGZS55KSxibj17eDpGZS54L3dlLHk6RmUueS93ZX0semU9TWF0aC5tYXgoTyxQKSxHZT17eDp4LmN0cmxwdHNbMF0rYm4ueCoyKnplLHk6eC5jdHJscHRzWzFdK2JuLnkqMip6ZX0sRW49Vi5pbnRlcnNlY3RMaW5lKEwueCxMLnksJCxxLEdlLngsR2UueSwwKTtadD8oeC5jdHJscHRzWzBdPXguY3RybHB0c1swXStibi54KihrdC0kdCkseC5jdHJscHRzWzFdPXguY3RybHB0c1sxXStibi55KihrdC0kdCkpOih4LmN0cmxwdHNbMF09RW5bMF0rYm4ueCprdCx4LmN0cmxwdHNbMV09RW5bMV0rYm4ueSprdCl9WXQmJnRoaXMuZmluZEVuZHBvaW50cyh5KX19LG9kLnN0b3JlQWxscHRzPWZ1bmN0aW9uKHkpe3ZhciBnPXkuX3ByaXZhdGUucnNjcmF0Y2g7aWYoZy5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fGcuZWRnZVR5cGU9PT0iYmV6aWVyInx8Zy5lZGdlVHlwZT09PSJzZWxmInx8Zy5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2cuYWxscHRzPVtdLGcuYWxscHRzLnB1c2goZy5zdGFydFgsZy5zdGFydFkpO2Zvcih2YXIgeD0wO3grMTxnLmN0cmxwdHMubGVuZ3RoO3grPTIpZy5hbGxwdHMucHVzaChnLmN0cmxwdHNbeF0sZy5jdHJscHRzW3grMV0pLHgrMzxnLmN0cmxwdHMubGVuZ3RoJiZnLmFsbHB0cy5wdXNoKChnLmN0cmxwdHNbeF0rZy5jdHJscHRzW3grMl0pLzIsKGcuY3RybHB0c1t4KzFdK2cuY3RybHB0c1t4KzNdKS8yKTtnLmFsbHB0cy5wdXNoKGcuZW5kWCxnLmVuZFkpO3ZhciBULEw7Zy5jdHJscHRzLmxlbmd0aC8yJTI9PT0wPyhUPWcuYWxscHRzLmxlbmd0aC8yLTEsZy5taWRYPWcuYWxscHRzW1RdLGcubWlkWT1nLmFsbHB0c1tUKzFdKTooVD1nLmFsbHB0cy5sZW5ndGgvMi0zLEw9LjUsZy5taWRYPW9mKGcuYWxscHRzW1RdLGcuYWxscHRzW1QrMl0sZy5hbGxwdHNbVCs0XSxMKSxnLm1pZFk9b2YoZy5hbGxwdHNbVCsxXSxnLmFsbHB0c1tUKzNdLGcuYWxscHRzW1QrNV0sTCkpfWVsc2UgaWYoZy5lZGdlVHlwZT09PSJzdHJhaWdodCIpZy5hbGxwdHM9W2cuc3RhcnRYLGcuc3RhcnRZLGcuZW5kWCxnLmVuZFldLGcubWlkWD0oZy5zdGFydFgrZy5lbmRYK2cuYXJyb3dTdGFydFgrZy5hcnJvd0VuZFgpLzQsZy5taWRZPShnLnN0YXJ0WStnLmVuZFkrZy5hcnJvd1N0YXJ0WStnLmFycm93RW5kWSkvNDtlbHNlIGlmKGcuZWRnZVR5cGU9PT0ic2VnbWVudHMiKWlmKGcuYWxscHRzPVtdLGcuYWxscHRzLnB1c2goZy5zdGFydFgsZy5zdGFydFkpLGcuYWxscHRzLnB1c2guYXBwbHkoZy5hbGxwdHMsZy5zZWdwdHMpLGcuYWxscHRzLnB1c2goZy5lbmRYLGcuZW5kWSksZy5zZWdwdHMubGVuZ3RoJTQ9PT0wKXt2YXIgTz1nLnNlZ3B0cy5sZW5ndGgvMixQPU8tMjtnLm1pZFg9KGcuc2VncHRzW1BdK2cuc2VncHRzW09dKS8yLGcubWlkWT0oZy5zZWdwdHNbUCsxXStnLnNlZ3B0c1tPKzFdKS8yfWVsc2V7dmFyICQ9Zy5zZWdwdHMubGVuZ3RoLzItMTtnLm1pZFg9Zy5zZWdwdHNbJF0sZy5taWRZPWcuc2VncHRzWyQrMV19fSxvZC5jaGVja0ZvckludmFsaWRFZGdlV2FybmluZz1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO2cubm9kZXNPdmVybGFwfHxYKGcuc3RhcnRYKSYmWChnLnN0YXJ0WSkmJlgoZy5lbmRYKSYmWChnLmVuZFkpP2cubG9nZ2VkRXJyPSExOmcubG9nZ2VkRXJyfHwoZy5sb2dnZWRFcnI9ITAsU2MoIkVkZ2UgYCIreS5pZCgpKyJgIGhhcyBpbnZhbGlkIGVuZHBvaW50cyBhbmQgc28gaXQgaXMgaW1wb3NzaWJsZSB0byBkcmF3LiAgQWRqdXN0IHlvdXIgZWRnZSBzdHlsZSAoZS5nLiBjb250cm9sIHBvaW50cykgYWNjb3JkaW5nbHkgb3IgdXNlIGFuIGFsdGVybmF0aXZlIGVkZ2UgdHlwZS4gIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3VyIHdoZW4gdGhlIHNvdXJjZSBub2RlIGFuZCB0aGUgdGFyZ2V0IG5vZGUgb3ZlcmxhcC4iKSl9LG9kLmZpbmRFZGdlQ29udHJvbFBvaW50cz1mdW5jdGlvbih5KXt2YXIgZz10aGlzO2lmKCEoIXl8fHkubGVuZ3RoPT09MCkpe2Zvcih2YXIgeD10aGlzLFQ9eC5jeSxMPVQuaGFzQ29tcG91bmROb2RlcygpLE89e21hcDpuZXcgR2IsZ2V0OmZ1bmN0aW9uKHF0KXt2YXIgbmU9dGhpcy5tYXAuZ2V0KHF0WzBdKTtyZXR1cm4gbmUhPW51bGw/bmUuZ2V0KHF0WzFdKTpudWxsfSxzZXQ6ZnVuY3Rpb24ocXQsbmUpe3ZhciBHdD10aGlzLm1hcC5nZXQocXRbMF0pO0d0PT1udWxsJiYoR3Q9bmV3IEdiLHRoaXMubWFwLnNldChxdFswXSxHdCkpLEd0LnNldChxdFsxXSxuZSl9fSxQPVtdLCQ9W10scT0wO3E8eS5sZW5ndGg7cSsrKXt2YXIgUz15W3FdLFY9Uy5fcHJpdmF0ZSxZPVMucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlO2lmKCEoUy5yZW1vdmVkKCl8fCFTLnRha2VzVXBTcGFjZSgpKSl7aWYoWT09PSJoYXlzdGFjayIpeyQucHVzaChTKTtjb250aW51ZX12YXIgcnQ9WT09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8WT09PSJzZWdtZW50cyJ8fFk9PT0ic3RyYWlnaHQifHxZPT09InN0cmFpZ2h0LXRyaWFuZ2xlInx8WT09PSJ0YXhpIixvdD1ZPT09InVuYnVuZGxlZC1iZXppZXIifHxZPT09ImJlemllciIsaHQ9Vi5zb3VyY2UsZHQ9Vi50YXJnZXQsTHQ9aHQucG9vbEluZGV4KCksa3Q9ZHQucG9vbEluZGV4KCksRHQ9W0x0LGt0XS5zb3J0KCksUHQ9Ty5nZXQoRHQpO1B0PT1udWxsJiYoUHQ9e2VsZXM6W119LE8uc2V0KER0LFB0KSxQLnB1c2goRHQpKSxQdC5lbGVzLnB1c2goUykscnQmJihQdC5oYXNVbmJ1bmRsZWQ9ITApLG90JiYoUHQuaGFzQmV6aWVyPSEwKX19Zm9yKHZhciAkdD1mdW5jdGlvbihxdCl7dmFyIG5lPVBbcXRdLEd0PU8uZ2V0KG5lKSxnZT12b2lkIDA7aWYoIUd0Lmhhc1VuYnVuZGxlZCl7dmFyIGJlPUd0LmVsZXNbMF0ucGFyYWxsZWxFZGdlcygpLmZpbHRlcihmdW5jdGlvbihUcil7cmV0dXJuIFRyLmlzQnVuZGxlZEJlemllcigpfSk7VEwoR3QuZWxlcyksYmUuZm9yRWFjaChmdW5jdGlvbihUcil7cmV0dXJuIEd0LmVsZXMucHVzaChUcil9KSxHdC5lbGVzLnNvcnQoZnVuY3Rpb24oVHIsUXQpe3JldHVybiBUci5wb29sSW5kZXgoKS1RdC5wb29sSW5kZXgoKX0pfXZhciBpZT1HdC5lbGVzWzBdLEZlPWllLnNvdXJjZSgpLHdlPWllLnRhcmdldCgpO2lmKEZlLnBvb2xJbmRleCgpPndlLnBvb2xJbmRleCgpKXt2YXIgYm49RmU7RmU9d2Usd2U9Ym59dmFyIHplPUd0LnNyY1Bvcz1GZS5wb3NpdGlvbigpLEdlPUd0LnRndFBvcz13ZS5wb3NpdGlvbigpLEVuPUd0LnNyY1c9RmUub3V0ZXJXaWR0aCgpLEluPUd0LnNyY0g9RmUub3V0ZXJIZWlnaHQoKSxZbj1HdC50Z3RXPXdlLm91dGVyV2lkdGgoKSxTbj1HdC50Z3RIPXdlLm91dGVySGVpZ2h0KCksV249R3Quc3JjU2hhcGU9eC5ub2RlU2hhcGVzW2cuZ2V0Tm9kZVNoYXBlKEZlKV0scnI9R3QudGd0U2hhcGU9eC5ub2RlU2hhcGVzW2cuZ2V0Tm9kZVNoYXBlKHdlKV07R3QuZGlyQ291bnRzPXtub3J0aDowLHdlc3Q6MCxzb3V0aDowLGVhc3Q6MCxub3J0aHdlc3Q6MCxzb3V0aHdlc3Q6MCxub3J0aGVhc3Q6MCxzb3V0aGVhc3Q6MH07Zm9yKHZhciB3cj0wO3dyPEd0LmVsZXMubGVuZ3RoO3dyKyspe3ZhciB1cj1HdC5lbGVzW3dyXSxlcj11clswXS5fcHJpdmF0ZS5yc2NyYXRjaCx2bj11ci5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUsZ3I9dm49PT0idW5idW5kbGVkLWJlemllciJ8fHZuPT09InNlZ21lbnRzInx8dm49PT0idGF4aSIsZnI9IUZlLnNhbWUodXIuc291cmNlKCkpO2lmKCFHdC5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uJiZGZSE9PXdlJiYoR3QuaGFzQmV6aWVyfHxHdC5oYXNVbmJ1bmRsZWQpKXtHdC5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uPSEwO3ZhciBKcj1Xbi5pbnRlcnNlY3RMaW5lKHplLngsemUueSxFbixJbixHZS54LEdlLnksMCksdmk9R3Quc3JjSW50bj1KcixYcz1yci5pbnRlcnNlY3RMaW5lKEdlLngsR2UueSxZbixTbix6ZS54LHplLnksMCksRWE9R3QudGd0SW50bj1YcyxDaT1HdC5pbnRlcnNlY3Rpb25QdHM9e3gxOkpyWzBdLHgyOlhzWzBdLHkxOkpyWzFdLHkyOlhzWzFdfSxoaT1HdC5wb3NQdHM9e3gxOnplLngseDI6R2UueCx5MTp6ZS55LHkyOkdlLnl9LGdzPVhzWzFdLUpyWzFdLHFpPVhzWzBdLUpyWzBdLFNpPU1hdGguc3FydChxaSpxaStncypncyksVWk9R3QudmVjdG9yPXt4OnFpLHk6Z3N9LFZhPUd0LnZlY3Rvck5vcm09e3g6VWkueC9TaSx5OlVpLnkvU2l9LFFzPXt4Oi1WYS55LHk6VmEueH07R3Qubm9kZXNPdmVybGFwPSFYKFNpKXx8cnIuY2hlY2tQb2ludChKclswXSxKclsxXSwwLFluLFNuLEdlLngsR2UueSl8fFduLmNoZWNrUG9pbnQoWHNbMF0sWHNbMV0sMCxFbixJbix6ZS54LHplLnkpLEd0LnZlY3Rvck5vcm1JbnZlcnNlPVFzLGdlPXtub2Rlc092ZXJsYXA6R3Qubm9kZXNPdmVybGFwLGRpckNvdW50czpHdC5kaXJDb3VudHMsY2FsY3VsYXRlZEludGVyc2VjdGlvbjohMCxoYXNCZXppZXI6R3QuaGFzQmV6aWVyLGhhc1VuYnVuZGxlZDpHdC5oYXNVbmJ1bmRsZWQsZWxlczpHdC5lbGVzLHNyY1BvczpHZSx0Z3RQb3M6emUsc3JjVzpZbixzcmNIOlNuLHRndFc6RW4sdGd0SDpJbixzcmNJbnRuOkVhLHRndEludG46dmksc3JjU2hhcGU6cnIsdGd0U2hhcGU6V24scG9zUHRzOnt4MTpoaS54Mix5MTpoaS55Mix4MjpoaS54MSx5MjpoaS55MX0saW50ZXJzZWN0aW9uUHRzOnt4MTpDaS54Mix5MTpDaS55Mix4MjpDaS54MSx5MjpDaS55MX0sdmVjdG9yOnt4Oi1VaS54LHk6LVVpLnl9LHZlY3Rvck5vcm06e3g6LVZhLngseTotVmEueX0sdmVjdG9yTm9ybUludmVyc2U6e3g6LVFzLngseTotUXMueX19fXZhciBxcz1mcj9nZTpHdDtlci5ub2Rlc092ZXJsYXA9cXMubm9kZXNPdmVybGFwLGVyLnNyY0ludG49cXMuc3JjSW50bixlci50Z3RJbnRuPXFzLnRndEludG4sTCYmKEZlLmlzUGFyZW50KCl8fEZlLmlzQ2hpbGQoKXx8d2UuaXNQYXJlbnQoKXx8d2UuaXNDaGlsZCgpKSYmKEZlLnBhcmVudHMoKS5hbnlTYW1lKHdlKXx8d2UucGFyZW50cygpLmFueVNhbWUoRmUpfHxGZS5zYW1lKHdlKSYmRmUuaXNQYXJlbnQoKSk/Zy5maW5kQ29tcG91bmRMb29wUG9pbnRzKHVyLHFzLHdyLGdyKTpGZT09PXdlP2cuZmluZExvb3BQb2ludHModXIscXMsd3IsZ3IpOnZuPT09InNlZ21lbnRzIj9nLmZpbmRTZWdtZW50c1BvaW50cyh1cixxcyk6dm49PT0idGF4aSI/Zy5maW5kVGF4aVBvaW50cyh1cixxcyk6dm49PT0ic3RyYWlnaHQifHwhZ3ImJkd0LmVsZXMubGVuZ3RoJTI9PT0xJiZ3cj09PU1hdGguZmxvb3IoR3QuZWxlcy5sZW5ndGgvMik/Zy5maW5kU3RyYWlnaHRFZGdlUG9pbnRzKHVyKTpnLmZpbmRCZXppZXJQb2ludHModXIscXMsd3IsZ3IsZnIpLGcuZmluZEVuZHBvaW50cyh1ciksZy50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzKHVyLHFzKSxnLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nKHVyKSxnLnN0b3JlQWxscHRzKHVyKSxnLnN0b3JlRWRnZVByb2plY3Rpb25zKHVyKSxnLmNhbGN1bGF0ZUFycm93QW5nbGVzKHVyKSxnLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnModXIpLGcuY2FsY3VsYXRlTGFiZWxBbmdsZXModXIpfX0sWnQ9MDtadDxQLmxlbmd0aDtadCsrKSR0KFp0KTt0aGlzLmZpbmRIYXlzdGFja1BvaW50cygkKX19O2Z1bmN0aW9uIFhCKHkpe3ZhciBnPVtdO2lmKHkhPW51bGwpe2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCs9Mil7dmFyIFQ9eVt4XSxMPXlbeCsxXTtnLnB1c2goe3g6VCx5Okx9KX1yZXR1cm4gZ319b2QuZ2V0U2VnbWVudFBvaW50cz1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoLHg9Zy5lZGdlVHlwZTtpZih4PT09InNlZ21lbnRzIilyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeSksWEIoZy5zZWdwdHMpfSxvZC5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKHkpe3ZhciBnPXlbMF0uX3ByaXZhdGUucnNjcmF0Y2gseD1nLmVkZ2VUeXBlO2lmKHg9PT0iYmV6aWVyInx8eD09PSJtdWx0aWJlemllciJ8fHg9PT0ic2VsZiJ8fHg9PT0iY29tcG91bmQiKXJldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxYQihnLmN0cmxwdHMpfSxvZC5nZXRFZGdlTWlkcG9pbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9eVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeSkse3g6Zy5taWRYLHk6Zy5taWRZfX07dmFyIEdrPXt9O0drLm1hbnVhbEVuZHB0VG9QeD1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD15LnBvc2l0aW9uKCksTD15Lm91dGVyV2lkdGgoKSxPPXkub3V0ZXJIZWlnaHQoKTtpZihnLnZhbHVlLmxlbmd0aD09PTIpe3ZhciBQPVtnLnBmVmFsdWVbMF0sZy5wZlZhbHVlWzFdXTtyZXR1cm4gZy51bml0c1swXT09PSIlIiYmKFBbMF09UFswXSpMKSxnLnVuaXRzWzFdPT09IiUiJiYoUFsxXT1QWzFdKk8pLFBbMF0rPVQueCxQWzFdKz1ULnksUH1lbHNle3ZhciAkPWcucGZWYWx1ZVswXTskPS1NYXRoLlBJLzIrJDt2YXIgcT0yKk1hdGgubWF4KEwsTyksUz1bVC54K01hdGguY29zKCQpKnEsVC55K01hdGguc2luKCQpKnFdO3JldHVybiB4Lm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoeSldLmludGVyc2VjdExpbmUoVC54LFQueSxMLE8sU1swXSxTWzFdLDApfX0sR2suZmluZEVuZHBvaW50cz1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHgsVD15LnNvdXJjZSgpWzBdLEw9eS50YXJnZXQoKVswXSxPPVQucG9zaXRpb24oKSxQPUwucG9zaXRpb24oKSwkPXkucHN0eWxlKCJ0YXJnZXQtYXJyb3ctc2hhcGUiKS52YWx1ZSxxPXkucHN0eWxlKCJzb3VyY2UtYXJyb3ctc2hhcGUiKS52YWx1ZSxTPXkucHN0eWxlKCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxWPXkucHN0eWxlKCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxZPXkucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlLHJ0PXkuX3ByaXZhdGUucnNjcmF0Y2gsb3Q9cnQuZWRnZVR5cGUsaHQ9WT09PSJ0YXhpIixkdD1vdD09PSJzZWxmInx8b3Q9PT0iY29tcG91bmQiLEx0PW90PT09ImJlemllciJ8fG90PT09Im11bHRpYmV6aWVyInx8ZHQsa3Q9b3QhPT0iYmV6aWVyIixEdD1vdD09PSJzdHJhaWdodCJ8fG90PT09InNlZ21lbnRzIixQdD1vdD09PSJzZWdtZW50cyIsJHQ9THR8fGt0fHxEdCxadD1kdHx8aHQsWXQ9eS5wc3R5bGUoInNvdXJjZS1lbmRwb2ludCIpLHF0PVp0PyJvdXRzaWRlLXRvLW5vZGUiOll0LnZhbHVlLG5lPXkucHN0eWxlKCJ0YXJnZXQtZW5kcG9pbnQiKSxHdD1adD8ib3V0c2lkZS10by1ub2RlIjpuZS52YWx1ZTtydC5zcmNNYW5FbmRwdD1ZdCxydC50Z3RNYW5FbmRwdD1uZTt2YXIgZ2UsYmUsaWUsRmU7aWYoTHQpe3ZhciB3ZT1bcnQuY3RybHB0c1swXSxydC5jdHJscHRzWzFdXSxibj1rdD9bcnQuY3RybHB0c1tydC5jdHJscHRzLmxlbmd0aC0yXSxydC5jdHJscHRzW3J0LmN0cmxwdHMubGVuZ3RoLTFdXTp3ZTtnZT1ibixiZT13ZX1lbHNlIGlmKER0KXt2YXIgemU9UHQ/cnQuc2VncHRzLnNsaWNlKDAsMik6W1AueCxQLnldLEdlPVB0P3J0LnNlZ3B0cy5zbGljZShydC5zZWdwdHMubGVuZ3RoLTIpOltPLngsTy55XTtnZT1HZSxiZT16ZX1pZihHdD09PSJpbnNpZGUtdG8tbm9kZSIpeD1bUC54LFAueV07ZWxzZSBpZihuZS51bml0cyl4PXRoaXMubWFudWFsRW5kcHRUb1B4KEwsbmUpO2Vsc2UgaWYoR3Q9PT0ib3V0c2lkZS10by1saW5lIil4PXJ0LnRndEludG47ZWxzZSBpZihHdD09PSJvdXRzaWRlLXRvLW5vZGUifHxHdD09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwiP2llPWdlOihHdD09PSJvdXRzaWRlLXRvLWxpbmUifHxHdD09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKSYmKGllPVtPLngsTy55XSkseD1nLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoTCldLmludGVyc2VjdExpbmUoUC54LFAueSxMLm91dGVyV2lkdGgoKSxMLm91dGVySGVpZ2h0KCksaWVbMF0saWVbMV0sMCksR3Q9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsInx8R3Q9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIil7dmFyIEVuPUwuX3ByaXZhdGUucnNjcmF0Y2gsSW49RW4ubGFiZWxXaWR0aCxZbj1Fbi5sYWJlbEhlaWdodCxTbj1Fbi5sYWJlbFgsV249RW4ubGFiZWxZLHJyPUluLzIsd3I9WW4vMix1cj1MLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTt1cj09PSJ0b3AiP1duLT13cjp1cj09PSJib3R0b20iJiYoV24rPXdyKTt2YXIgZXI9TC5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWU7ZXI9PT0ibGVmdCI/U24tPXJyOmVyPT09InJpZ2h0IiYmKFNuKz1ycik7dmFyIHZuPUFrKGllWzBdLGllWzFdLFtTbi1ycixXbi13cixTbitycixXbi13cixTbitycixXbit3cixTbi1ycixXbit3cl0sUC54LFAueSk7aWYodm4ubGVuZ3RoPjApe3ZhciBncj1PLGZyPV8zKGdyLEs1KHgpKSxKcj1fMyhncixLNSh2bikpLHZpPWZyO2lmKEpyPGZyJiYoeD12bix2aT1Kciksdm4ubGVuZ3RoPjIpe3ZhciBYcz1fMyhncix7eDp2blsyXSx5OnZuWzNdfSk7WHM8dmkmJih4PVt2blsyXSx2blszXV0pfX19dmFyIEVhPWpUKHgsZ2UsZy5hcnJvd1NoYXBlc1skXS5zcGFjaW5nKHkpK1MpLENpPWpUKHgsZ2UsZy5hcnJvd1NoYXBlc1skXS5nYXAoeSkrUyk7aWYocnQuZW5kWD1DaVswXSxydC5lbmRZPUNpWzFdLHJ0LmFycm93RW5kWD1FYVswXSxydC5hcnJvd0VuZFk9RWFbMV0scXQ9PT0iaW5zaWRlLXRvLW5vZGUiKXg9W08ueCxPLnldO2Vsc2UgaWYoWXQudW5pdHMpeD10aGlzLm1hbnVhbEVuZHB0VG9QeChULFl0KTtlbHNlIGlmKHF0PT09Im91dHNpZGUtdG8tbGluZSIpeD1ydC5zcmNJbnRuO2Vsc2UgaWYocXQ9PT0ib3V0c2lkZS10by1ub2RlInx8cXQ9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIj9GZT1iZToocXQ9PT0ib3V0c2lkZS10by1saW5lInx8cXQ9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIikmJihGZT1bUC54LFAueV0pLHg9Zy5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKFQpXS5pbnRlcnNlY3RMaW5lKE8ueCxPLnksVC5vdXRlcldpZHRoKCksVC5vdXRlckhlaWdodCgpLEZlWzBdLEZlWzFdLDApLHF0PT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCJ8fHF0PT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpe3ZhciBoaT1ULl9wcml2YXRlLnJzY3JhdGNoLGdzPWhpLmxhYmVsV2lkdGgscWk9aGkubGFiZWxIZWlnaHQsU2k9aGkubGFiZWxYLFVpPWhpLmxhYmVsWSxWYT1ncy8yLFFzPXFpLzIscXM9VC5wc3R5bGUoInRleHQtdmFsaWduIikudmFsdWU7cXM9PT0idG9wIj9VaS09UXM6cXM9PT0iYm90dG9tIiYmKFVpKz1Rcyk7dmFyIFRyPVQucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlO1RyPT09ImxlZnQiP1NpLT1WYTpUcj09PSJyaWdodCImJihTaSs9VmEpO3ZhciBRdD1BayhGZVswXSxGZVsxXSxbU2ktVmEsVWktUXMsU2krVmEsVWktUXMsU2krVmEsVWkrUXMsU2ktVmEsVWkrUXNdLE8ueCxPLnkpO2lmKFF0Lmxlbmd0aD4wKXt2YXIgam49UCxTcj1fMyhqbixLNSh4KSksaXI9XzMoam4sSzUoUXQpKSxzcj1TcjtpZihpcjxTciYmKHg9W1F0WzBdLFF0WzFdXSxzcj1pciksUXQubGVuZ3RoPjIpe3ZhciBJYT1fMyhqbix7eDpRdFsyXSx5OlF0WzNdfSk7SWE8c3ImJih4PVtRdFsyXSxRdFszXV0pfX19dmFyICRyPWpUKHgsYmUsZy5hcnJvd1NoYXBlc1txXS5zcGFjaW5nKHkpK1YpLFlpPWpUKHgsYmUsZy5hcnJvd1NoYXBlc1txXS5nYXAoeSkrVik7cnQuc3RhcnRYPVlpWzBdLHJ0LnN0YXJ0WT1ZaVsxXSxydC5hcnJvd1N0YXJ0WD0kclswXSxydC5hcnJvd1N0YXJ0WT0kclsxXSwkdCYmKCFYKHJ0LnN0YXJ0WCl8fCFYKHJ0LnN0YXJ0WSl8fCFYKHJ0LmVuZFgpfHwhWChydC5lbmRZKT9ydC5iYWRMaW5lPSEwOnJ0LmJhZExpbmU9ITEpfSxHay5nZXRTb3VyY2VFbmRwb2ludD1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxnLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDpnLmhheXN0YWNrUHRzWzBdLHk6Zy5oYXlzdGFja1B0c1sxXX07ZGVmYXVsdDpyZXR1cm57eDpnLmFycm93U3RhcnRYLHk6Zy5hcnJvd1N0YXJ0WX19fSxHay5nZXRUYXJnZXRFbmRwb2ludD1mdW5jdGlvbih5KXt2YXIgZz15WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh5KSxnLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDpnLmhheXN0YWNrUHRzWzJdLHk6Zy5oYXlzdGFja1B0c1szXX07ZGVmYXVsdDpyZXR1cm57eDpnLmFycm93RW5kWCx5OmcuYXJyb3dFbmRZfX19O3ZhciB0TT17fTtmdW5jdGlvbiBodHQoeSxnLHgpe2Zvcih2YXIgVD1mdW5jdGlvbihTLFYsWSxydCl7cmV0dXJuIG9mKFMsVixZLHJ0KX0sTD1nLl9wcml2YXRlLE89TC5yc3R5bGUuYmV6aWVyUHRzLFA9MDtQPHkuYmV6aWVyUHJvalBjdHMubGVuZ3RoO1ArKyl7dmFyICQ9eS5iZXppZXJQcm9qUGN0c1tQXTtPLnB1c2goe3g6VCh4WzBdLHhbMl0seFs0XSwkKSx5OlQoeFsxXSx4WzNdLHhbNV0sJCl9KX19dE0uc3RvcmVFZGdlUHJvamVjdGlvbnM9ZnVuY3Rpb24oeSl7dmFyIGc9eS5fcHJpdmF0ZSx4PWcucnNjcmF0Y2gsVD14LmVkZ2VUeXBlO2lmKGcucnN0eWxlLmJlemllclB0cz1udWxsLGcucnN0eWxlLmxpbmVQdHM9bnVsbCxnLnJzdHlsZS5oYXlzdGFja1B0cz1udWxsLFQ9PT0ibXVsdGliZXppZXIifHxUPT09ImJlemllciJ8fFQ9PT0ic2VsZiJ8fFQ9PT0iY29tcG91bmQiKXtnLnJzdHlsZS5iZXppZXJQdHM9W107Zm9yKHZhciBMPTA7TCs1PHguYWxscHRzLmxlbmd0aDtMKz00KWh0dCh0aGlzLHkseC5hbGxwdHMuc2xpY2UoTCxMKzYpKX1lbHNlIGlmKFQ9PT0ic2VnbWVudHMiKWZvcih2YXIgTz1nLnJzdHlsZS5saW5lUHRzPVtdLEw9MDtMKzE8eC5hbGxwdHMubGVuZ3RoO0wrPTIpTy5wdXNoKHt4OnguYWxscHRzW0xdLHk6eC5hbGxwdHNbTCsxXX0pO2Vsc2UgaWYoVD09PSJoYXlzdGFjayIpe3ZhciBQPXguaGF5c3RhY2tQdHM7Zy5yc3R5bGUuaGF5c3RhY2tQdHM9W3t4OlBbMF0seTpQWzFdfSx7eDpQWzJdLHk6UFszXX1dfWcucnN0eWxlLmFycm93V2lkdGg9dGhpcy5nZXRBcnJvd1dpZHRoKHkucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUseS5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMuYXJyb3dTaGFwZVdpZHRofSx0TS5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucz1mdW5jdGlvbih5KXt0aGlzLmZpbmRFZGdlQ29udHJvbFBvaW50cyh5KX07dmFyIFRwPXt9O1RwLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbj1mdW5jdGlvbih5KXt2YXIgZz15LnBzdHlsZSgibGFiZWwiKS5zdHJWYWx1ZTtpZighWihnKSl7dmFyIHgsVCxMPXkuX3ByaXZhdGUsTz15LndpZHRoKCksUD15LmhlaWdodCgpLCQ9eS5wYWRkaW5nKCkscT15LnBvc2l0aW9uKCksUz15LnBzdHlsZSgidGV4dC1oYWxpZ24iKS5zdHJWYWx1ZSxWPXkucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnN0clZhbHVlLFk9TC5yc2NyYXRjaCxydD1MLnJzdHlsZTtzd2l0Y2goUyl7Y2FzZSJsZWZ0Ijp4PXEueC1PLzItJDticmVhaztjYXNlInJpZ2h0Ijp4PXEueCtPLzIrJDticmVhaztkZWZhdWx0Ong9cS54fXN3aXRjaChWKXtjYXNlInRvcCI6VD1xLnktUC8yLSQ7YnJlYWs7Y2FzZSJib3R0b20iOlQ9cS55K1AvMiskO2JyZWFrO2RlZmF1bHQ6VD1xLnl9WS5sYWJlbFg9eCxZLmxhYmVsWT1ULHJ0LmxhYmVsWD14LHJ0LmxhYmVsWT1ULHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMoeSksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyh5KX19O3ZhciBRQj1mdW5jdGlvbihnLHgpe3ZhciBUPU1hdGguYXRhbih4L2cpO3JldHVybiBnPT09MCYmVDwwJiYoVD1UKi0xKSxUfSxaQj1mdW5jdGlvbihnLHgpe3ZhciBUPXgueC1nLngsTD14LnktZy55O3JldHVybiBRQihULEwpfSxKQj1mdW5jdGlvbihnLHgsVCxMKXt2YXIgTz1faygwLEwtLjAwMSwxKSxQPV9rKDAsTCsuMDAxLDEpLCQ9WDUoZyx4LFQsTykscT1YNShnLHgsVCxQKTtyZXR1cm4gWkIoJCxxKX07VHAucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucz1mdW5jdGlvbih5KXt2YXIgZyx4PXkuX3ByaXZhdGUsVD14LnJzY3JhdGNoLEw9dGhpcyxPPXttaWQ6eS5wc3R5bGUoImxhYmVsIikuc3RyVmFsdWUsc291cmNlOnkucHN0eWxlKCJzb3VyY2UtbGFiZWwiKS5zdHJWYWx1ZSx0YXJnZXQ6eS5wc3R5bGUoInRhcmdldC1sYWJlbCIpLnN0clZhbHVlfTtpZihPLm1pZHx8Ty5zb3VyY2V8fE8udGFyZ2V0KXtnPXt4OlQubWlkWCx5OlQubWlkWX07dmFyIFA9ZnVuY3Rpb24oWSxydCxvdCl7bW0oeC5yc2NyYXRjaCxZLHJ0LG90KSxtbSh4LnJzdHlsZSxZLHJ0LG90KX07UCgibGFiZWxYIixudWxsLGcueCksUCgibGFiZWxZIixudWxsLGcueSk7dmFyICQ9UUIoVC5taWREaXNwWCxULm1pZERpc3BZKTtQKCJsYWJlbEF1dG9BbmdsZSIsbnVsbCwkKTt2YXIgcT1mdW5jdGlvbiBWKCl7aWYoVi5jYWNoZSlyZXR1cm4gVi5jYWNoZTtmb3IodmFyIFk9W10scnQ9MDtydCs1PFQuYWxscHRzLmxlbmd0aDtydCs9NCl7dmFyIG90PXt4OlQuYWxscHRzW3J0XSx5OlQuYWxscHRzW3J0KzFdfSxodD17eDpULmFsbHB0c1tydCsyXSx5OlQuYWxscHRzW3J0KzNdfSxkdD17eDpULmFsbHB0c1tydCs0XSx5OlQuYWxscHRzW3J0KzVdfTtZLnB1c2goe3AwOm90LHAxOmh0LHAyOmR0LHN0YXJ0RGlzdDowLGxlbmd0aDowLHNlZ21lbnRzOltdfSl9dmFyIEx0PXgucnN0eWxlLmJlemllclB0cyxrdD1MLmJlemllclByb2pQY3RzLmxlbmd0aDtmdW5jdGlvbiBEdChxdCxuZSxHdCxnZSxiZSl7dmFyIGllPUMzKG5lLEd0KSxGZT1xdC5zZWdtZW50c1txdC5zZWdtZW50cy5sZW5ndGgtMV0sd2U9e3AwOm5lLHAxOkd0LHQwOmdlLHQxOmJlLHN0YXJ0RGlzdDpGZT9GZS5zdGFydERpc3QrRmUubGVuZ3RoOjAsbGVuZ3RoOmllfTtxdC5zZWdtZW50cy5wdXNoKHdlKSxxdC5sZW5ndGgrPWllfWZvcih2YXIgUHQ9MDtQdDxZLmxlbmd0aDtQdCsrKXt2YXIgJHQ9WVtQdF0sWnQ9WVtQdC0xXTtadCYmKCR0LnN0YXJ0RGlzdD1adC5zdGFydERpc3QrWnQubGVuZ3RoKSxEdCgkdCwkdC5wMCxMdFtQdCprdF0sMCxMLmJlemllclByb2pQY3RzWzBdKTtmb3IodmFyIFl0PTA7WXQ8a3QtMTtZdCsrKUR0KCR0LEx0W1B0Kmt0K1l0XSxMdFtQdCprdCtZdCsxXSxMLmJlemllclByb2pQY3RzW1l0XSxMLmJlemllclByb2pQY3RzW1l0KzFdKTtEdCgkdCxMdFtQdCprdCtrdC0xXSwkdC5wMixMLmJlemllclByb2pQY3RzW2t0LTFdLDEpfXJldHVybiBWLmNhY2hlPVl9LFM9ZnVuY3Rpb24oWSl7dmFyIHJ0LG90PVk9PT0ic291cmNlIjtpZihPW1ldKXt2YXIgaHQ9eS5wc3R5bGUoWSsiLXRleHQtb2Zmc2V0IikucGZWYWx1ZTtzd2l0Y2goVC5lZGdlVHlwZSl7Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlImJlemllciI6Y2FzZSJtdWx0aWJlemllciI6e2Zvcih2YXIgZHQ9cSgpLEx0LGt0PTAsRHQ9MCxQdD0wO1B0PGR0Lmxlbmd0aDtQdCsrKXtmb3IodmFyICR0PWR0W290P1B0OmR0Lmxlbmd0aC0xLVB0XSxadD0wO1p0PCR0LnNlZ21lbnRzLmxlbmd0aDtadCsrKXt2YXIgWXQ9JHQuc2VnbWVudHNbb3Q/WnQ6JHQuc2VnbWVudHMubGVuZ3RoLTEtWnRdLHF0PVB0PT09ZHQubGVuZ3RoLTEmJlp0PT09JHQuc2VnbWVudHMubGVuZ3RoLTE7aWYoa3Q9RHQsRHQrPVl0Lmxlbmd0aCxEdD49aHR8fHF0KXtMdD17Y3A6JHQsc2VnbWVudDpZdH07YnJlYWt9fWlmKEx0KWJyZWFrfXZhciBuZT1MdC5jcCxHdD1MdC5zZWdtZW50LGdlPShodC1rdCkvR3QubGVuZ3RoLGJlPUd0LnQxLUd0LnQwLGllPW90P0d0LnQwK2JlKmdlOkd0LnQxLWJlKmdlO2llPV9rKDAsaWUsMSksZz1YNShuZS5wMCxuZS5wMSxuZS5wMixpZSkscnQ9SkIobmUucDAsbmUucDEsbmUucDIsaWUpO2JyZWFrfWNhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOntmb3IodmFyIEZlPTAsd2UsYm4semUsR2UsRW49VC5hbGxwdHMubGVuZ3RoLEluPTA7SW4rMzxFbiYmKG90Pyh6ZT17eDpULmFsbHB0c1tJbl0seTpULmFsbHB0c1tJbisxXX0sR2U9e3g6VC5hbGxwdHNbSW4rMl0seTpULmFsbHB0c1tJbiszXX0pOih6ZT17eDpULmFsbHB0c1tFbi0yLUluXSx5OlQuYWxscHRzW0VuLTEtSW5dfSxHZT17eDpULmFsbHB0c1tFbi00LUluXSx5OlQuYWxscHRzW0VuLTMtSW5dfSksd2U9QzMoemUsR2UpLGJuPUZlLEZlKz13ZSwhKEZlPj1odCkpO0luKz0yKTt2YXIgWW49aHQtYm4sU249WW4vd2U7U249X2soMCxTbiwxKSxnPVBLKHplLEdlLFNuKSxydD1aQih6ZSxHZSk7YnJlYWt9fVAoImxhYmVsWCIsWSxnLngpLFAoImxhYmVsWSIsWSxnLnkpLFAoImxhYmVsQXV0b0FuZ2xlIixZLHJ0KX19O1MoInNvdXJjZSIpLFMoInRhcmdldCIpLHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoeSl9fSxUcC5hcHBseUxhYmVsRGltZW5zaW9ucz1mdW5jdGlvbih5KXt0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeSkseS5pc0VkZ2UoKSYmKHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh5LCJzb3VyY2UiKSx0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeSwidGFyZ2V0IikpfSxUcC5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHksZyl7dmFyIHg9eS5fcHJpdmF0ZSxUPXRoaXMuZ2V0TGFiZWxUZXh0KHksZyksTD10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh5LFQpLE89eS5wc3R5bGUoImxpbmUtaGVpZ2h0IikucGZWYWx1ZSxQPXkucHN0eWxlKCJ0ZXh0LXdyYXAiKS5zdHJWYWx1ZSwkPXlwKHgucnNjcmF0Y2gsImxhYmVsV3JhcENhY2hlZExpbmVzIixnKXx8W10scT1QIT09IndyYXAiPzE6TWF0aC5tYXgoJC5sZW5ndGgsMSksUz1MLmhlaWdodC9xLFY9UypPLFk9TC53aWR0aCxydD1MLmhlaWdodCsocS0xKSooTy0xKSpTO21tKHgucnN0eWxlLCJsYWJlbFdpZHRoIixnLFkpLG1tKHgucnNjcmF0Y2gsImxhYmVsV2lkdGgiLGcsWSksbW0oeC5yc3R5bGUsImxhYmVsSGVpZ2h0IixnLHJ0KSxtbSh4LnJzY3JhdGNoLCJsYWJlbEhlaWdodCIsZyxydCksbW0oeC5yc2NyYXRjaCwibGFiZWxMaW5lSGVpZ2h0IixnLFYpfSxUcC5nZXRMYWJlbFRleHQ9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLFQ9Zz9nKyItIjoiIixMPXkucHN0eWxlKFQrImxhYmVsIikuc3RyVmFsdWUsTz15LnBzdHlsZSgidGV4dC10cmFuc2Zvcm0iKS52YWx1ZSxQPWZ1bmN0aW9uKFluLFNuKXtyZXR1cm4gU24/KG1tKHgucnNjcmF0Y2gsWW4sZyxTbiksU24pOnlwKHgucnNjcmF0Y2gsWW4sZyl9O2lmKCFMKXJldHVybiIiO089PSJub25lInx8KE89PSJ1cHBlcmNhc2UiP0w9TC50b1VwcGVyQ2FzZSgpOk89PSJsb3dlcmNhc2UiJiYoTD1MLnRvTG93ZXJDYXNlKCkpKTt2YXIgJD15LnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU7aWYoJD09PSJ3cmFwIil7dmFyIHE9UCgibGFiZWxLZXkiKTtpZihxIT1udWxsJiZQKCJsYWJlbFdyYXBLZXkiKT09PXEpcmV0dXJuIFAoImxhYmVsV3JhcENhY2hlZFRleHQiKTtmb3IodmFyIFM9IuKAiyIsVj1MLnNwbGl0KGAKYCksWT15LnBzdHlsZSgidGV4dC1tYXgtd2lkdGgiKS5wZlZhbHVlLHJ0PXkucHN0eWxlKCJ0ZXh0LW92ZXJmbG93LXdyYXAiKS52YWx1ZSxvdD1ydD09PSJhbnl3aGVyZSIsaHQ9W10sZHQ9L1tcc1x1MjAwYl0rLyxMdD1vdD8iIjoiICIsa3Q9MDtrdDxWLmxlbmd0aDtrdCsrKXt2YXIgRHQ9VltrdF0sUHQ9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSxEdCksJHQ9UHQud2lkdGg7aWYob3Qpe3ZhciBadD1EdC5zcGxpdCgiIikuam9pbihTKTtEdD1adH1pZigkdD5ZKXtmb3IodmFyIFl0PUR0LnNwbGl0KGR0KSxxdD0iIixuZT0wO25lPFl0Lmxlbmd0aDtuZSsrKXt2YXIgR3Q9WXRbbmVdLGdlPXF0Lmxlbmd0aD09PTA/R3Q6cXQrTHQrR3QsYmU9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSxnZSksaWU9YmUud2lkdGg7aWU8PVk/cXQrPUd0K0x0OihxdCYmaHQucHVzaChxdCkscXQ9R3QrTHQpfXF0Lm1hdGNoKC9eW1xzXHUyMDBiXSskLyl8fGh0LnB1c2gocXQpfWVsc2UgaHQucHVzaChEdCl9UCgibGFiZWxXcmFwQ2FjaGVkTGluZXMiLGh0KSxMPVAoImxhYmVsV3JhcENhY2hlZFRleHQiLGh0LmpvaW4oYApgKSksUCgibGFiZWxXcmFwS2V5IixxKX1lbHNlIGlmKCQ9PT0iZWxsaXBzaXMiKXt2YXIgRmU9eS5wc3R5bGUoInRleHQtbWF4LXdpZHRoIikucGZWYWx1ZSx3ZT0iIixibj0i4oCmIix6ZT0hMTtpZih0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh5LEwpLndpZHRoPEZlKXJldHVybiBMO2Zvcih2YXIgR2U9MDtHZTxMLmxlbmd0aDtHZSsrKXt2YXIgRW49dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeSx3ZStMW0dlXStibikud2lkdGg7aWYoRW4+RmUpYnJlYWs7d2UrPUxbR2VdLEdlPT09TC5sZW5ndGgtMSYmKHplPSEwKX1yZXR1cm4gemV8fCh3ZSs9Ym4pLHdlfXJldHVybiBMfSxUcC5nZXRMYWJlbEp1c3RpZmljYXRpb249ZnVuY3Rpb24oeSl7dmFyIGc9eS5wc3R5bGUoInRleHQtanVzdGlmaWNhdGlvbiIpLnN0clZhbHVlLHg9eS5wc3R5bGUoInRleHQtaGFsaWduIikuc3RyVmFsdWU7aWYoZz09PSJhdXRvIilpZih5LmlzTm9kZSgpKXN3aXRjaCh4KXtjYXNlImxlZnQiOnJldHVybiJyaWdodCI7Y2FzZSJyaWdodCI6cmV0dXJuImxlZnQiO2RlZmF1bHQ6cmV0dXJuImNlbnRlciJ9ZWxzZSByZXR1cm4iY2VudGVyIjtlbHNlIHJldHVybiBnfSxUcC5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9cmQoZyx5Ll9wcml2YXRlLmxhYmVsRGltc0tleSksTD14LmxhYmVsRGltQ2FjaGV8fCh4LmxhYmVsRGltQ2FjaGU9W10pLE89TFtUXTtpZihPIT1udWxsKXJldHVybiBPO3ZhciBQPTAsJD15LnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLHE9eS5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUsUz15LnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxWPXkucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLFk9dGhpcy5sYWJlbENhbGNDYW52YXMscnQ9dGhpcy5sYWJlbENhbGNDYW52YXNDb250ZXh0O2lmKCFZKXtZPXRoaXMubGFiZWxDYWxjQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHJ0PXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1ZLmdldENvbnRleHQoIjJkIik7dmFyIG90PVkuc3R5bGU7b3QucG9zaXRpb249ImFic29sdXRlIixvdC5sZWZ0PSItOTk5OXB4IixvdC50b3A9Ii05OTk5cHgiLG90LnpJbmRleD0iLTEiLG90LnZpc2liaWxpdHk9ImhpZGRlbiIsb3QucG9pbnRlckV2ZW50cz0ibm9uZSJ9cnQuZm9udD0iIi5jb25jYXQoJCwiICIpLmNvbmNhdChWLCIgIikuY29uY2F0KHEsInB4ICIpLmNvbmNhdChTKTtmb3IodmFyIGh0PTAsZHQ9MCxMdD1nLnNwbGl0KGAKYCksa3Q9MDtrdDxMdC5sZW5ndGg7a3QrKyl7dmFyIER0PUx0W2t0XSxQdD1ydC5tZWFzdXJlVGV4dChEdCksJHQ9TWF0aC5jZWlsKFB0LndpZHRoKSxadD1xO2h0PU1hdGgubWF4KCR0LGh0KSxkdCs9WnR9cmV0dXJuIGh0Kz1QLGR0Kz1QLExbVF09e3dpZHRoOmh0LGhlaWdodDpkdH19LFRwLmNhbGN1bGF0ZUxhYmVsQW5nbGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD15Ll9wcml2YXRlLFQ9eC5yc2NyYXRjaCxMPXkuaXNFZGdlKCksTz1nP2crIi0iOiIiLFA9eS5wc3R5bGUoTysidGV4dC1yb3RhdGlvbiIpLCQ9UC5zdHJWYWx1ZTtyZXR1cm4gJD09PSJub25lIj8wOkwmJiQ9PT0iYXV0b3JvdGF0ZSI/VC5sYWJlbEF1dG9BbmdsZTokPT09ImF1dG9yb3RhdGUiPzA6UC5wZlZhbHVlfSxUcC5jYWxjdWxhdGVMYWJlbEFuZ2xlcz1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9eS5pc0VkZ2UoKSxUPXkuX3ByaXZhdGUsTD1ULnJzY3JhdGNoO0wubGFiZWxBbmdsZT1nLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeSkseCYmKEwuc291cmNlTGFiZWxBbmdsZT1nLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeSwic291cmNlIiksTC50YXJnZXRMYWJlbEFuZ2xlPWcuY2FsY3VsYXRlTGFiZWxBbmdsZSh5LCJ0YXJnZXQiKSl9O3ZhciBuaD17fSxlTT0yOCx0Uj0hMTtuaC5nZXROb2RlU2hhcGU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PXkucHN0eWxlKCJzaGFwZSIpLnZhbHVlO2lmKHg9PT0iY3V0cmVjdGFuZ2xlIiYmKHkud2lkdGgoKTxlTXx8eS5oZWlnaHQoKTxlTSkpcmV0dXJuIHRSfHwoU2MoIlRoZSBgY3V0cmVjdGFuZ2xlYCBub2RlIHNoYXBlIGNhbiBub3QgYmUgdXNlZCBhdCBzbWFsbCBzaXplcyBzbyBgcmVjdGFuZ2xlYCBpcyB1c2VkIGluc3RlYWQiKSx0Uj0hMCksInJlY3RhbmdsZSI7aWYoeS5pc1BhcmVudCgpKXJldHVybiB4PT09InJlY3RhbmdsZSJ8fHg9PT0icm91bmRyZWN0YW5nbGUifHx4PT09InJvdW5kLXJlY3RhbmdsZSJ8fHg9PT0iY3V0cmVjdGFuZ2xlInx8eD09PSJjdXQtcmVjdGFuZ2xlInx8eD09PSJiYXJyZWwiP3g6InJlY3RhbmdsZSI7aWYoeD09PSJwb2x5Z29uIil7dmFyIFQ9eS5wc3R5bGUoInNoYXBlLXBvbHlnb24tcG9pbnRzIikudmFsdWU7cmV0dXJuIGcubm9kZVNoYXBlcy5tYWtlUG9seWdvbihUKS5uYW1lfXJldHVybiB4fTt2YXIgVWs9e307VWsucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB5PXRoaXMuY3ksZz15LmNvbGxlY3Rpb24oKSx4PXRoaXMsVD1mdW5jdGlvbihQKXt2YXIgJD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7aWYoZy5tZXJnZShQKSwkKWZvcih2YXIgcT0wO3E8UC5sZW5ndGg7cSsrKXt2YXIgUz1QW3FdLFY9Uy5fcHJpdmF0ZSxZPVYucnN0eWxlO1kuY2xlYW49ITEsWS5jbGVhbkNvbm5lY3RlZD0hMX19O3guYmluZGVyKHkpLm9uKCJib3VuZHMuKiBkaXJ0eS4qIixmdW5jdGlvbihQKXt2YXIgJD1QLnRhcmdldDtUKCQpfSkub24oInN0eWxlLiogYmFja2dyb3VuZC4qIixmdW5jdGlvbihQKXt2YXIgJD1QLnRhcmdldDtUKCQsITEpfSk7dmFyIEw9ZnVuY3Rpb24oUCl7aWYoUCl7dmFyICQ9eC5vblVwZGF0ZUVsZUNhbGNzRm5zO2cuY2xlYW5TdHlsZSgpO2Zvcih2YXIgcT0wO3E8Zy5sZW5ndGg7cSsrKXt2YXIgUz1nW3FdLFY9Uy5fcHJpdmF0ZS5yc3R5bGU7Uy5pc05vZGUoKSYmIVYuY2xlYW5Db25uZWN0ZWQmJihUKFMuY29ubmVjdGVkRWRnZXMoKSksVi5jbGVhbkNvbm5lY3RlZD0hMCl9aWYoJClmb3IodmFyIFk9MDtZPCQubGVuZ3RoO1krKyl7dmFyIHJ0PSRbWV07cnQoUCxnKX14LnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZShnKSxnPXkuY29sbGVjdGlvbigpfX07eC5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZT1mdW5jdGlvbigpe0woITApfSx4LmJlZm9yZVJlbmRlcihMLHguYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVDYWxjcyl9LFVrLm9uVXBkYXRlRWxlQ2FsY3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zPXRoaXMub25VcGRhdGVFbGVDYWxjc0Zuc3x8W107Zy5wdXNoKHkpfSxVay5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD1mdW5jdGlvbigkdCl7cmV0dXJuICR0Ll9wcml2YXRlLnJzdHlsZS5jbGVhbkNvbm5lY3RlZH0sVD1bXSxMPVtdO2lmKCF0aGlzLmRlc3Ryb3llZCl7Zz09PXZvaWQgMCYmKGc9ITApO2Zvcih2YXIgTz0wO088eS5sZW5ndGg7TysrKXt2YXIgUD15W09dLCQ9UC5fcHJpdmF0ZSxxPSQucnN0eWxlO1AuaXNFZGdlKCkmJigheChQLnNvdXJjZSgpKXx8IXgoUC50YXJnZXQoKSkpJiYocS5jbGVhbj0hMSksIShnJiZxLmNsZWFufHxQLnJlbW92ZWQoKSkmJlAucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSImJigkLmdyb3VwPT09Im5vZGVzIj9MLnB1c2goUCk6VC5wdXNoKFApLHEuY2xlYW49ITApfWZvcih2YXIgUz0wO1M8TC5sZW5ndGg7UysrKXt2YXIgVj1MW1NdLFk9Vi5fcHJpdmF0ZSxydD1ZLnJzdHlsZSxvdD1WLnBvc2l0aW9uKCk7dGhpcy5yZWNhbGN1bGF0ZU5vZGVMYWJlbFByb2plY3Rpb24oVikscnQubm9kZVg9b3QueCxydC5ub2RlWT1vdC55LHJ0Lm5vZGVXPVYucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUscnQubm9kZUg9Vi5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9dGhpcy5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucyhUKTtmb3IodmFyIGh0PTA7aHQ8VC5sZW5ndGg7aHQrKyl7dmFyIGR0PVRbaHRdLEx0PWR0Ll9wcml2YXRlLGt0PUx0LnJzdHlsZSxEdD1MdC5yc2NyYXRjaDtrdC5zcmNYPUR0LmFycm93U3RhcnRYLGt0LnNyY1k9RHQuYXJyb3dTdGFydFksa3QudGd0WD1EdC5hcnJvd0VuZFgsa3QudGd0WT1EdC5hcnJvd0VuZFksa3QubWlkWD1EdC5taWRYLGt0Lm1pZFk9RHQubWlkWSxrdC5sYWJlbEFuZ2xlPUR0LmxhYmVsQW5nbGUsa3Quc291cmNlTGFiZWxBbmdsZT1EdC5zb3VyY2VMYWJlbEFuZ2xlLGt0LnRhcmdldExhYmVsQW5nbGU9RHQudGFyZ2V0TGFiZWxBbmdsZX19fTt2YXIgbUM9e307bUMudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXM9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO2lmKHkpe3kuZHJhZz1bXSx5Lm5vbmRyYWc9W107Zm9yKHZhciBnPVtdLHg9MDt4PHkubGVuZ3RoO3grKyl7dmFyIFQ9eVt4XSxMPVQuX3ByaXZhdGUucnNjcmF0Y2g7VC5ncmFiYmVkKCkmJiFULmlzUGFyZW50KCk/Zy5wdXNoKFQpOkwuaW5EcmFnTGF5ZXI/eS5kcmFnLnB1c2goVCk6eS5ub25kcmFnLnB1c2goVCl9Zm9yKHZhciB4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBUPWdbeF07eS5kcmFnLnB1c2goVCl9fX0sbUMuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKCl7dGhpcy5jYWNoZWRaU29ydGVkRWxlcz1udWxsfSxtQy5nZXRDYWNoZWRaU29ydGVkRWxlcz1mdW5jdGlvbih5KXtpZih5fHwhdGhpcy5jYWNoZWRaU29ydGVkRWxlcyl7dmFyIGc9dGhpcy5jeS5tdXRhYmxlRWxlbWVudHMoKS50b0FycmF5KCk7Zy5zb3J0KF9CKSxnLmludGVyYWN0aXZlPWcuZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiB4LmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPWcsdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgZz10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiBnfTt2YXIgV2s9e307W0QzLHZDLG9kLEdrLHRNLFRwLG5oLFVrLG1DXS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2RlKFdrLHkpfSk7dmFyIGVSPXt9O2VSLmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKHksZyx4KXt2YXIgVD10aGlzLEw9VC5pbWFnZUNhY2hlPVQuaW1hZ2VDYWNoZXx8e30sTz1MW3ldO2lmKE8pcmV0dXJuIE8uaW1hZ2UuY29tcGxldGV8fE8uaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIseCksTy5pbWFnZTtPPUxbeV09TFt5XXx8e307dmFyIFA9Ty5pbWFnZT1uZXcgSW1hZ2U7UC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix4KSxQLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe1AuZXJyb3I9ITB9KTt2YXIgJD0iZGF0YToiLHE9eS5zdWJzdHJpbmcoMCwkLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PSQ7cmV0dXJuIHF8fChQLmNyb3NzT3JpZ2luPWcpLFAuc3JjPXksUH07dmFyIGd4PXt9O2d4LnJlZ2lzdGVyQmluZGluZz1mdW5jdGlvbih5LGcseCxUKXt2YXIgTD1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzLFsxXSksTz10aGlzLmJpbmRlcih5KTtyZXR1cm4gTy5vbi5hcHBseShPLEwpfSxneC5iaW5kZXI9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PXk9PT13aW5kb3d8fHk9PT1kb2N1bWVudHx8eT09PWRvY3VtZW50LmJvZHl8fEN0KHkpO2lmKGcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPT1udWxsKXt2YXIgVD0hMTt0cnl7dmFyIEw9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFQ9ITAsITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsTCl9Y2F0Y2h7fWcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPVR9dmFyIE89ZnVuY3Rpb24oJCxxLFMpe3ZhciBWPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIHgmJmcuc3VwcG9ydHNQYXNzaXZlRXZlbnRzJiYoVlsyXT17Y2FwdHVyZTpTPz8hMSxwYXNzaXZlOiExLG9uY2U6ITF9KSxnLmJpbmRpbmdzLnB1c2goe3RhcmdldDp5LGFyZ3M6Vn0pLCh5LmFkZEV2ZW50TGlzdGVuZXJ8fHkub24pLmFwcGx5KHksViksdGhpc307cmV0dXJue29uOk8sYWRkRXZlbnRMaXN0ZW5lcjpPLGFkZExpc3RlbmVyOk8sYmluZDpPfX0sZ3gubm9kZUlzRHJhZ2dhYmxlPWZ1bmN0aW9uKHkpe3JldHVybiB5JiZ5LmlzTm9kZSgpJiYheS5sb2NrZWQoKSYmeS5ncmFiYmFibGUoKX0sZ3gubm9kZUlzR3JhYmJhYmxlPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLm5vZGVJc0RyYWdnYWJsZSh5KSYmeS5pbnRlcmFjdGl2ZSgpfSxneC5sb2FkPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPWZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuc2VsZWN0ZWQoKX0seD1mdW5jdGlvbihRdCxqbixTcixpcil7UXQ9PW51bGwmJihRdD15LmN5KTtmb3IodmFyIHNyPTA7c3I8am4ubGVuZ3RoO3NyKyspe3ZhciBJYT1qbltzcl07UXQuZW1pdCh7b3JpZ2luYWxFdmVudDpTcix0eXBlOklhLHBvc2l0aW9uOmlyfSl9fSxUPWZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuc2hpZnRLZXl8fFF0Lm1ldGFLZXl8fFF0LmN0cmxLZXl9LEw9ZnVuY3Rpb24oUXQsam4pe3ZhciBTcj0hMDtpZih5LmN5Lmhhc0NvbXBvdW5kTm9kZXMoKSYmUXQmJlF0LnBhbm5hYmxlKCkpZm9yKHZhciBpcj0wO2puJiZpcjxqbi5sZW5ndGg7aXIrKyl7dmFyIFF0PWpuW2lyXTtpZihRdC5pc05vZGUoKSYmUXQuaXNQYXJlbnQoKSYmIVF0LnBhbm5hYmxlKCkpe1NyPSExO2JyZWFrfX1lbHNlIFNyPSEwO3JldHVybiBTcn0sTz1mdW5jdGlvbihRdCl7UXRbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMH0sUD1mdW5jdGlvbihRdCl7UXRbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMX0sJD1mdW5jdGlvbihRdCl7UXRbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXI9ITB9LHE9ZnVuY3Rpb24oUXQpe1F0WzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyPSExfSxTPWZ1bmN0aW9uKFF0KXtRdFswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pc0dyYWJUYXJnZXQ9ITB9LFY9ZnVuY3Rpb24oUXQpe1F0WzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldD0hMX0sWT1mdW5jdGlvbihRdCxqbil7dmFyIFNyPWpuLmFkZFRvTGlzdCxpcj1Tci5oYXMoUXQpOyFpciYmUXQuZ3JhYmJhYmxlKCkmJiFRdC5sb2NrZWQoKSYmKFNyLm1lcmdlKFF0KSxPKFF0KSl9LHJ0PWZ1bmN0aW9uKFF0LGpuKXtpZihRdC5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKSYmIShqbi5pbkRyYWdMYXllcj09bnVsbCYmam4uYWRkVG9MaXN0PT1udWxsKSl7dmFyIFNyPVF0LmRlc2NlbmRhbnRzKCk7am4uaW5EcmFnTGF5ZXImJihTci5mb3JFYWNoKCQpLFNyLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaCgkKSksam4uYWRkVG9MaXN0JiZZKFNyLGpuKX19LG90PWZ1bmN0aW9uKFF0LGpuKXtqbj1qbnx8e307dmFyIFNyPVF0LmN5KCkuaGFzQ29tcG91bmROb2RlcygpO2puLmluRHJhZ0xheWVyJiYoUXQuZm9yRWFjaCgkKSxRdC5uZWlnaGJvcmhvb2QoKS5zdGRGaWx0ZXIoZnVuY3Rpb24oaXIpe3JldHVybiFTcnx8aXIuaXNFZGdlKCl9KS5mb3JFYWNoKCQpKSxqbi5hZGRUb0xpc3QmJlF0LmZvckVhY2goZnVuY3Rpb24oaXIpe1koaXIsam4pfSkscnQoUXQsam4pLEx0KFF0LHtpbkRyYWdMYXllcjpqbi5pbkRyYWdMYXllcn0pLHkudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMoKX0saHQ9b3QsZHQ9ZnVuY3Rpb24oUXQpe1F0JiYoeS5nZXRDYWNoZWRaU29ydGVkRWxlcygpLmZvckVhY2goZnVuY3Rpb24oam4pe1Aoam4pLHEoam4pLFYoam4pfSkseS51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpKX0sTHQ9ZnVuY3Rpb24oUXQsam4pe2lmKCEoam4uaW5EcmFnTGF5ZXI9PW51bGwmJmpuLmFkZFRvTGlzdD09bnVsbCkmJlF0LmN5KCkuaGFzQ29tcG91bmROb2RlcygpKXt2YXIgU3I9UXQuYW5jZXN0b3JzKCkub3JwaGFucygpO2lmKCFTci5zYW1lKFF0KSl7dmFyIGlyPVNyLmRlc2NlbmRhbnRzKCkuc3Bhd25TZWxmKCkubWVyZ2UoU3IpLnVubWVyZ2UoUXQpLnVubWVyZ2UoUXQuZGVzY2VuZGFudHMoKSksc3I9aXIuY29ubmVjdGVkRWRnZXMoKTtqbi5pbkRyYWdMYXllciYmKHNyLmZvckVhY2goJCksaXIuZm9yRWFjaCgkKSksam4uYWRkVG9MaXN0JiZpci5mb3JFYWNoKGZ1bmN0aW9uKElhKXtZKElhLGpuKX0pfX19LGt0PWZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9bnVsbCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyIT1udWxsJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKX0sRHQ9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8InUiLFB0PXR5cGVvZiBSZXNpemVPYnNlcnZlcjwidSI7RHQ/KHkucmVtb3ZlT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oVHIpe2Zvcih2YXIgUXQ9MDtRdDxUci5sZW5ndGg7UXQrKyl7dmFyIGpuPVRyW1F0XSxTcj1qbi5yZW1vdmVkTm9kZXM7aWYoU3IpZm9yKHZhciBpcj0wO2lyPFNyLmxlbmd0aDtpcisrKXt2YXIgc3I9U3JbaXJdO2lmKHNyPT09eS5jb250YWluZXIpe3kuZGVzdHJveSgpO2JyZWFrfX19fSkseS5jb250YWluZXIucGFyZW50Tm9kZSYmeS5yZW1vdmVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyLnBhcmVudE5vZGUse2NoaWxkTGlzdDohMH0pKTp5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwiRE9NTm9kZVJlbW92ZWQiLGZ1bmN0aW9uKFRyKXt5LmRlc3Ryb3koKX0pO3ZhciAkdD1ZYyhmdW5jdGlvbigpe3kuY3kucmVzaXplKCl9LDEwMCk7RHQmJih5LnN0eWxlT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoJHQpLHkuc3R5bGVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyLHthdHRyaWJ1dGVzOiEwfSkpLHkucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywicmVzaXplIiwkdCksUHQmJih5LnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigkdCkseS5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHkuY29udGFpbmVyKSk7dmFyIFp0PWZ1bmN0aW9uKFF0LGpuKXtmb3IoO1F0IT1udWxsOylqbihRdCksUXQ9UXQucGFyZW50Tm9kZX0sWXQ9ZnVuY3Rpb24oKXt5LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpfTtadCh5LmNvbnRhaW5lcixmdW5jdGlvbihUcil7eS5yZWdpc3RlckJpbmRpbmcoVHIsInRyYW5zaXRpb25lbmQiLFl0KSx5LnJlZ2lzdGVyQmluZGluZyhUciwiYW5pbWF0aW9uZW5kIixZdCkseS5yZWdpc3RlckJpbmRpbmcoVHIsInNjcm9sbCIsWXQpfSkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsImNvbnRleHRtZW51IixmdW5jdGlvbihUcil7VHIucHJldmVudERlZmF1bHQoKX0pO3ZhciBxdD1mdW5jdGlvbigpe3JldHVybiB5LnNlbGVjdGlvbls0XSE9PTB9LG5lPWZ1bmN0aW9uKFF0KXtmb3IodmFyIGpuPXkuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLFNyPWpuWzBdLGlyPWpuWzFdLHNyPWpuWzJdLElhPWpuWzNdLCRyPVF0LnRvdWNoZXM/UXQudG91Y2hlczpbUXRdLFlpPSExLEZvPTA7Rm88JHIubGVuZ3RoO0ZvKyspe3ZhciBQYz0kcltGb107aWYoU3I8PVBjLmNsaWVudFgmJlBjLmNsaWVudFg8PVNyK3NyJiZpcjw9UGMuY2xpZW50WSYmUGMuY2xpZW50WTw9aXIrSWEpe1lpPSEwO2JyZWFrfX1pZighWWkpcmV0dXJuITE7Zm9yKHZhciBaYT15LmNvbnRhaW5lcixtYz1RdC50YXJnZXQsVGE9bWMucGFyZW50Tm9kZSxKYT0hMTtUYTspe2lmKFRhPT09WmEpe0phPSEwO2JyZWFrfVRhPVRhLnBhcmVudE5vZGV9cmV0dXJuISFKYX07eS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsIm1vdXNlZG93biIsZnVuY3Rpb24oUXQpe2lmKG5lKFF0KSl7UXQucHJldmVudERlZmF1bHQoKSxrdCgpLHkuaG92ZXJEYXRhLmNhcHR1cmU9ITAseS5ob3ZlckRhdGEud2hpY2g9UXQud2hpY2g7dmFyIGpuPXkuY3ksU3I9W1F0LmNsaWVudFgsUXQuY2xpZW50WV0saXI9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFNyWzBdLFNyWzFdKSxzcj15LnNlbGVjdGlvbixJYT15LmZpbmROZWFyZXN0RWxlbWVudHMoaXJbMF0saXJbMV0sITAsITEpLCRyPUlhWzBdLFlpPXkuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM7eS5ob3ZlckRhdGEubWRvd25Qb3M9aXIseS5ob3ZlckRhdGEubWRvd25HUG9zPVNyO3ZhciBGbz1mdW5jdGlvbigpe3kuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITEsY2xlYXJUaW1lb3V0KHkuaG92ZXJEYXRhLnRhcGhvbGRUaW1lb3V0KSx5LmhvdmVyRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIXkuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQpe3ZhciBtbD15LmhvdmVyRGF0YS5kb3duO21sP21sLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19KTpqbi5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6InRhcGhvbGQiLHBvc2l0aW9uOnt4OmlyWzBdLHk6aXJbMV19fSl9fSx5LnRhcGhvbGREdXJhdGlvbil9O2lmKFF0LndoaWNoPT0zKXt5LmhvdmVyRGF0YS5jeHRTdGFydGVkPSEwO3ZhciBQYz17b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19OyRyPygkci5hY3RpdmF0ZSgpLCRyLmVtaXQoUGMpLHkuaG92ZXJEYXRhLmRvd249JHIpOmpuLmVtaXQoUGMpLHkuaG92ZXJEYXRhLmRvd25UaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHkuaG92ZXJEYXRhLmN4dERyYWdnZWQ9ITF9ZWxzZSBpZihRdC53aGljaD09MSl7JHImJiRyLmFjdGl2YXRlKCk7e2lmKCRyIT1udWxsJiZ5Lm5vZGVJc0dyYWJiYWJsZSgkcikpe3ZhciBaYT1mdW5jdGlvbihtbCl7cmV0dXJue29yaWdpbmFsRXZlbnQ6UXQsdHlwZTptbCxwb3NpdGlvbjp7eDppclswXSx5OmlyWzFdfX19LG1jPWZ1bmN0aW9uKG1sKXttbC5lbWl0KFphKCJncmFiIikpfTtpZihTKCRyKSwhJHIuc2VsZWN0ZWQoKSlZaT15LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWpuLmNvbGxlY3Rpb24oKSxodCgkcix7YWRkVG9MaXN0OllpfSksJHIuZW1pdChaYSgiZ3JhYm9uIikpLmVtaXQoWmEoImdyYWIiKSk7ZWxzZXtZaT15LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWpuLmNvbGxlY3Rpb24oKTt2YXIgVGE9am4uJChmdW5jdGlvbihKYSl7cmV0dXJuIEphLmlzTm9kZSgpJiZKYS5zZWxlY3RlZCgpJiZ5Lm5vZGVJc0dyYWJiYWJsZShKYSl9KTtvdChUYSx7YWRkVG9MaXN0OllpfSksJHIuZW1pdChaYSgiZ3JhYm9uIikpLFRhLmZvckVhY2gobWMpfXkucmVkcmF3SGludCgiZWxlcyIsITApLHkucmVkcmF3SGludCgiZHJhZyIsITApfXkuaG92ZXJEYXRhLmRvd249JHIseS5ob3ZlckRhdGEuZG93bnM9SWEseS5ob3ZlckRhdGEuZG93blRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCl9eCgkcixbIm1vdXNlZG93biIsInRhcHN0YXJ0Iiwidm1vdXNlZG93biJdLFF0LHt4OmlyWzBdLHk6aXJbMV19KSwkcj09bnVsbD8oc3JbNF09MSx5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249e3g6aXJbMF0seTppclsxXX0seS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhdygpKTokci5wYW5uYWJsZSgpJiYoc3JbNF09MSksRm8oKX1zclswXT1zclsyXT1pclswXSxzclsxXT1zclszXT1pclsxXX19LCExKSx5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csIm1vdXNlbW92ZSIsZnVuY3Rpb24oUXQpe3ZhciBqbj15LmhvdmVyRGF0YS5jYXB0dXJlO2lmKCEoIWpuJiYhbmUoUXQpKSl7dmFyIFNyPSExLGlyPXkuY3ksc3I9aXIuem9vbSgpLElhPVtRdC5jbGllbnRYLFF0LmNsaWVudFldLCRyPXkucHJvamVjdEludG9WaWV3cG9ydChJYVswXSxJYVsxXSksWWk9eS5ob3ZlckRhdGEubWRvd25Qb3MsRm89eS5ob3ZlckRhdGEubWRvd25HUG9zLFBjPXkuc2VsZWN0aW9uLFphPW51bGw7IXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyYmIXkuaG92ZXJEYXRhLmRyYWdnaW5nJiYheS5ob3ZlckRhdGEuc2VsZWN0aW5nJiYoWmE9eS5maW5kTmVhcmVzdEVsZW1lbnQoJHJbMF0sJHJbMV0sITAsITEpKTt2YXIgbWM9eS5ob3ZlckRhdGEubGFzdCxUYT15LmhvdmVyRGF0YS5kb3duLEphPVskclswXS1QY1syXSwkclsxXS1QY1szXV0sbWw9eS5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyxxZjtpZihGbyl7dmFyIENwPUlhWzBdLUZvWzBdLF9wPUNwKkNwLEhmPUlhWzFdLUZvWzFdLF9nPUhmKkhmLGNkPV9wK19nO3kuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9cWY9Y2Q+PXkuZGVza3RvcFRhcFRocmVzaG9sZDJ9dmFyIG13PVQoUXQpO3FmJiYoeS5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMCk7dmFyIExtPWZ1bmN0aW9uKCl7dmFyIFliPXkuaG92ZXJEYXRhLmRyYWdEZWx0YT15LmhvdmVyRGF0YS5kcmFnRGVsdGF8fFtdO1liLmxlbmd0aD09PTA/KFliLnB1c2goSmFbMF0pLFliLnB1c2goSmFbMV0pKTooWWJbMF0rPUphWzBdLFliWzFdKz1KYVsxXSl9O1NyPSEwLHgoWmEsWyJtb3VzZW1vdmUiLCJ2bW91c2Vtb3ZlIiwidGFwZHJhZyJdLFF0LHt4OiRyWzBdLHk6JHJbMV19KTt2YXIgeHg9ZnVuY3Rpb24oKXt5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHkuaG92ZXJEYXRhLnNlbGVjdGluZ3x8aXIuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19KSxQY1s0XT0xLHkuaG92ZXJEYXRhLnNlbGVjdGluZz0hMCx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCl9O2lmKHkuaG92ZXJEYXRhLndoaWNoPT09Myl7aWYocWYpe3ZhciBGMz17b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDokclswXSx5OiRyWzFdfX07VGE/VGEuZW1pdChGMyk6aXIuZW1pdChGMykseS5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMCwoIXkuaG92ZXJEYXRhLmN4dE92ZXJ8fFphIT09eS5ob3ZlckRhdGEuY3h0T3ZlcikmJih5LmhvdmVyRGF0YS5jeHRPdmVyJiZ5LmhvdmVyRGF0YS5jeHRPdmVyLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0ZHJhZ291dCIscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19KSx5LmhvdmVyRGF0YS5jeHRPdmVyPVphLFphJiZaYS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dGRyYWdvdmVyIixwb3NpdGlvbjp7eDokclswXSx5OiRyWzFdfX0pKX19ZWxzZSBpZih5LmhvdmVyRGF0YS5kcmFnZ2luZyl7aWYoU3I9ITAsaXIucGFubmluZ0VuYWJsZWQoKSYmaXIudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBreDtpZih5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbil7dmFyIFNDPXkuaG92ZXJEYXRhLm1kb3duUG9zO2t4PXt4OigkclswXS1TQ1swXSkqc3IseTooJHJbMV0tU0NbMV0pKnNyfSx5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMX1lbHNlIGt4PXt4OkphWzBdKnNyLHk6SmFbMV0qc3J9O2lyLnBhbkJ5KGt4KSxpci5lbWl0KCJkcmFncGFuIikseS5ob3ZlckRhdGEuZHJhZ2dlZD0hMH0kcj15LnByb2plY3RJbnRvVmlld3BvcnQoUXQuY2xpZW50WCxRdC5jbGllbnRZKX1lbHNlIGlmKFBjWzRdPT0xJiYoVGE9PW51bGx8fFRhLnBhbm5hYmxlKCkpKXtpZihxZil7aWYoIXkuaG92ZXJEYXRhLmRyYWdnaW5nJiZpci5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJihtd3x8IWlyLnBhbm5pbmdFbmFibGVkKCl8fCFpci51c2VyUGFubmluZ0VuYWJsZWQoKSkpeHgoKTtlbHNlIGlmKCF5LmhvdmVyRGF0YS5zZWxlY3RpbmcmJmlyLnBhbm5pbmdFbmFibGVkKCkmJmlyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgTjM9TChUYSx5LmhvdmVyRGF0YS5kb3ducyk7TjMmJih5LmhvdmVyRGF0YS5kcmFnZ2luZz0hMCx5LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMCxQY1s0XT0wLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1LNShZaSkseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhdygpKX1UYSYmVGEucGFubmFibGUoKSYmVGEuYWN0aXZlKCkmJlRhLnVuYWN0aXZhdGUoKX19ZWxzZXtpZihUYSYmVGEucGFubmFibGUoKSYmVGEuYWN0aXZlKCkmJlRhLnVuYWN0aXZhdGUoKSwoIVRhfHwhVGEuZ3JhYmJlZCgpKSYmWmEhPW1jJiYobWMmJngobWMsWyJtb3VzZW91dCIsInRhcGRyYWdvdXQiXSxRdCx7eDokclswXSx5OiRyWzFdfSksWmEmJngoWmEsWyJtb3VzZW92ZXIiLCJ0YXBkcmFnb3ZlciJdLFF0LHt4OiRyWzBdLHk6JHJbMV19KSx5LmhvdmVyRGF0YS5sYXN0PVphKSxUYSlpZihxZil7aWYoaXIuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZtdylUYSYmVGEuZ3JhYmJlZCgpJiYoZHQobWwpLFRhLmVtaXQoImZyZWVvbiIpLG1sLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihUYS5lbWl0KCJkcmFnZnJlZW9uIiksbWwuZW1pdCgiZHJhZ2ZyZWUiKSkpLHh4KCk7ZWxzZSBpZihUYSYmVGEuZ3JhYmJlZCgpJiZ5Lm5vZGVJc0RyYWdnYWJsZShUYSkpe3ZhciBIZD0heS5kcmFnRGF0YS5kaWREcmFnO0hkJiZ5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LmRyYWdEYXRhLmRpZERyYWc9ITAseS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxvdChtbCx7aW5EcmFnTGF5ZXI6ITB9KTt2YXIgeTE9e3g6MCx5OjB9O2lmKFgoSmFbMF0pJiZYKEphWzFdKSYmKHkxLngrPUphWzBdLHkxLnkrPUphWzFdLEhkKSl7dmFyIFZkPXkuaG92ZXJEYXRhLmRyYWdEZWx0YTtWZCYmWChWZFswXSkmJlgoVmRbMV0pJiYoeTEueCs9VmRbMF0seTEueSs9VmRbMV0pfXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCxtbC5zaWxlbnRTaGlmdCh5MSkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHkucmVkcmF3SGludCgiZHJhZyIsITApLHkucmVkcmF3KCl9fWVsc2UgTG0oKTtTcj0hMH1pZihQY1syXT0kclswXSxQY1szXT0kclsxXSxTcilyZXR1cm4gUXQuc3RvcFByb3BhZ2F0aW9uJiZRdC5zdG9wUHJvcGFnYXRpb24oKSxRdC5wcmV2ZW50RGVmYXVsdCYmUXQucHJldmVudERlZmF1bHQoKSwhMX19LCExKTt2YXIgR3QsZ2UsYmU7eS5yZWdpc3RlckJpbmRpbmcod2luZG93LCJtb3VzZXVwIixmdW5jdGlvbihRdCl7dmFyIGpuPXkuaG92ZXJEYXRhLmNhcHR1cmU7aWYoam4pe3kuaG92ZXJEYXRhLmNhcHR1cmU9ITE7dmFyIFNyPXkuY3ksaXI9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LmNsaWVudFgsUXQuY2xpZW50WSksc3I9eS5zZWxlY3Rpb24sSWE9eS5maW5kTmVhcmVzdEVsZW1lbnQoaXJbMF0saXJbMV0sITAsITEpLCRyPXkuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMsWWk9eS5ob3ZlckRhdGEuZG93bixGbz1UKFF0KTtpZih5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24mJih5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCkpLHkuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITAseS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCxZaSYmWWkudW5hY3RpdmF0ZSgpLHkuaG92ZXJEYXRhLndoaWNoPT09Myl7dmFyIFBjPXtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6aXJbMF0seTppclsxXX19O2lmKFlpP1lpLmVtaXQoUGMpOlNyLmVtaXQoUGMpLCF5LmhvdmVyRGF0YS5jeHREcmFnZ2VkKXt2YXIgWmE9e29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDppclswXSx5OmlyWzFdfX07WWk/WWkuZW1pdChaYSk6U3IuZW1pdChaYSl9eS5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMSx5LmhvdmVyRGF0YS53aGljaD1udWxsfWVsc2UgaWYoeS5ob3ZlckRhdGEud2hpY2g9PT0xKXtpZih4KElhLFsibW91c2V1cCIsInRhcGVuZCIsInZtb3VzZXVwIl0sUXQse3g6aXJbMF0seTppclsxXX0pLCF5LmRyYWdEYXRhLmRpZERyYWcmJiF5LmhvdmVyRGF0YS5kcmFnZ2VkJiYheS5ob3ZlckRhdGEuc2VsZWN0aW5nJiYheS5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZyYmKHgoWWksWyJjbGljayIsInRhcCIsInZjbGljayJdLFF0LHt4OmlyWzBdLHk6aXJbMV19KSxnZT0hMSxRdC50aW1lU3RhbXAtYmU8PVNyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oR3QmJmNsZWFyVGltZW91dChHdCksZ2U9ITAsYmU9bnVsbCx4KFlpLFsiZGJsY2xpY2siLCJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxRdCx7eDppclswXSx5OmlyWzFdfSkpOihHdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Z2V8fHgoWWksWyJvbmVjbGljayIsIm9uZXRhcCIsInZvbmVjbGljayJdLFF0LHt4OmlyWzBdLHk6aXJbMV19KX0sU3IubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKSxiZT1RdC50aW1lU3RhbXApKSxZaT09bnVsbCYmIXkuZHJhZ0RhdGEuZGlkRHJhZyYmIXkuaG92ZXJEYXRhLnNlbGVjdGluZyYmIXkuaG92ZXJEYXRhLmRyYWdnZWQmJiFUKFF0KSYmKFNyLiQoZykudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSwkci5sZW5ndGg+MCYmeS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cz0kcj1Tci5jb2xsZWN0aW9uKCkpLElhPT1ZaSYmIXkuZHJhZ0RhdGEuZGlkRHJhZyYmIXkuaG92ZXJEYXRhLnNlbGVjdGluZyYmSWEhPW51bGwmJklhLl9wcml2YXRlLnNlbGVjdGFibGUmJih5LmhvdmVyRGF0YS5kcmFnZ2luZ3x8KFNyLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fEZvP0lhLnNlbGVjdGVkKCk/SWEudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKTpJYS5zZWxlY3QoWyJ0YXBzZWxlY3QiXSk6Rm98fChTci4kKGcpLnVubWVyZ2UoSWEpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksSWEuc2VsZWN0KFsidGFwc2VsZWN0Il0pKSkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCkpLHkuaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIG1jPVNyLmNvbGxlY3Rpb24oeS5nZXRBbGxJbkJveChzclswXSxzclsxXSxzclsyXSxzclszXSkpO3kucmVkcmF3SGludCgic2VsZWN0IiwhMCksbWMubGVuZ3RoPjAmJnkucmVkcmF3SGludCgiZWxlcyIsITApLFNyLmVtaXQoe3R5cGU6ImJveGVuZCIsb3JpZ2luYWxFdmVudDpRdCxwb3NpdGlvbjp7eDppclswXSx5OmlyWzFdfX0pO3ZhciBUYT1mdW5jdGlvbihxZil7cmV0dXJuIHFmLnNlbGVjdGFibGUoKSYmIXFmLnNlbGVjdGVkKCl9O1NyLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fEZvfHxTci4kKGcpLnVubWVyZ2UobWMpLnVuc2VsZWN0KCksbWMuZW1pdCgiYm94Iikuc3RkRmlsdGVyKFRhKS5zZWxlY3QoKS5lbWl0KCJib3hzZWxlY3QiKSx5LnJlZHJhdygpfWlmKHkuaG92ZXJEYXRhLmRyYWdnaW5nJiYoeS5ob3ZlckRhdGEuZHJhZ2dpbmc9ITEseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhdygpKSwhc3JbNF0pe3kucmVkcmF3SGludCgiZHJhZyIsITApLHkucmVkcmF3SGludCgiZWxlcyIsITApO3ZhciBKYT1ZaSYmWWkuZ3JhYmJlZCgpO2R0KCRyKSxKYSYmKFlpLmVtaXQoImZyZWVvbiIpLCRyLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihZaS5lbWl0KCJkcmFnZnJlZW9uIiksJHIuZW1pdCgiZHJhZ2ZyZWUiKSkpfX1zcls0XT0wLHkuaG92ZXJEYXRhLmRvd249bnVsbCx5LmhvdmVyRGF0YS5jeHRTdGFydGVkPSExLHkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMSx5LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITEseS5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZz0hMSx5LmRyYWdEYXRhLmRpZERyYWc9ITEseS5ob3ZlckRhdGEuZHJhZ2dlZD0hMSx5LmhvdmVyRGF0YS5kcmFnRGVsdGE9W10seS5ob3ZlckRhdGEubWRvd25Qb3M9bnVsbCx5LmhvdmVyRGF0YS5tZG93bkdQb3M9bnVsbH19LCExKTt2YXIgaWU9ZnVuY3Rpb24oUXQpe2lmKCF5LnNjcm9sbGluZ1BhZ2Upe3ZhciBqbj15LmN5LFNyPWpuLnpvb20oKSxpcj1qbi5wYW4oKSxzcj15LnByb2plY3RJbnRvVmlld3BvcnQoUXQuY2xpZW50WCxRdC5jbGllbnRZKSxJYT1bc3JbMF0qU3IraXIueCxzclsxXSpTcitpci55XTtpZih5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXN8fHkuaG92ZXJEYXRhLmRyYWdnaW5nfHx5LmhvdmVyRGF0YS5jeHRTdGFydGVkfHxxdCgpKXtRdC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pZihqbi5wYW5uaW5nRW5hYmxlZCgpJiZqbi51c2VyUGFubmluZ0VuYWJsZWQoKSYmam4uem9vbWluZ0VuYWJsZWQoKSYmam4udXNlclpvb21pbmdFbmFibGVkKCkpe1F0LnByZXZlbnREZWZhdWx0KCkseS5kYXRhLndoZWVsWm9vbWluZz0hMCxjbGVhclRpbWVvdXQoeS5kYXRhLndoZWVsVGltZW91dCkseS5kYXRhLndoZWVsVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eS5kYXRhLndoZWVsWm9vbWluZz0hMSx5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhdygpfSwxNTApO3ZhciAkcjtRdC5kZWx0YVkhPW51bGw/JHI9UXQuZGVsdGFZLy0yNTA6UXQud2hlZWxEZWx0YVkhPW51bGw/JHI9UXQud2hlZWxEZWx0YVkvMWUzOiRyPVF0LndoZWVsRGVsdGEvMWUzLCRyPSRyKnkud2hlZWxTZW5zaXRpdml0eTt2YXIgWWk9UXQuZGVsdGFNb2RlPT09MTtZaSYmKCRyKj0zMyk7dmFyIEZvPWpuLnpvb20oKSpNYXRoLnBvdygxMCwkcik7UXQudHlwZT09PSJnZXN0dXJlY2hhbmdlIiYmKEZvPXkuZ2VzdHVyZVN0YXJ0Wm9vbSpRdC5zY2FsZSksam4uem9vbSh7bGV2ZWw6Rm8scmVuZGVyZWRQb3NpdGlvbjp7eDpJYVswXSx5OklhWzFdfX0pLGpuLmVtaXQoUXQudHlwZT09PSJnZXN0dXJlY2hhbmdlIj8icGluY2h6b29tIjoic2Nyb2xsem9vbSIpfX19O3kucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJ3aGVlbCIsaWUsITApLHkucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywic2Nyb2xsIixmdW5jdGlvbihRdCl7eS5zY3JvbGxpbmdQYWdlPSEwLGNsZWFyVGltZW91dCh5LnNjcm9sbGluZ1BhZ2VUaW1lb3V0KSx5LnNjcm9sbGluZ1BhZ2VUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt5LnNjcm9sbGluZ1BhZ2U9ITF9LDI1MCl9LCEwKSx5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwiZ2VzdHVyZXN0YXJ0IixmdW5jdGlvbihRdCl7eS5nZXN0dXJlU3RhcnRab29tPXkuY3kuem9vbSgpLHkuaGFzVG91Y2hTdGFydGVkfHxRdC5wcmV2ZW50RGVmYXVsdCgpfSwhMCkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsImdlc3R1cmVjaGFuZ2UiLGZ1bmN0aW9uKFRyKXt5Lmhhc1RvdWNoU3RhcnRlZHx8aWUoVHIpfSwhMCkseS5yZWdpc3RlckJpbmRpbmcoeS5jb250YWluZXIsIm1vdXNlb3V0IixmdW5jdGlvbihRdCl7dmFyIGpuPXkucHJvamVjdEludG9WaWV3cG9ydChRdC5jbGllbnRYLFF0LmNsaWVudFkpO3kuY3kuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJtb3VzZW91dCIscG9zaXRpb246e3g6am5bMF0seTpqblsxXX19KX0sITEpLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJtb3VzZW92ZXIiLGZ1bmN0aW9uKFF0KXt2YXIgam49eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LmNsaWVudFgsUXQuY2xpZW50WSk7eS5jeS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6Im1vdXNlb3ZlciIscG9zaXRpb246e3g6am5bMF0seTpqblsxXX19KX0sITEpO3ZhciBGZSx3ZSxibix6ZSxHZSxFbixJbixZbixTbixXbixycix3cix1cixlcj1mdW5jdGlvbihRdCxqbixTcixpcil7cmV0dXJuIE1hdGguc3FydCgoU3ItUXQpKihTci1RdCkrKGlyLWpuKSooaXItam4pKX0sdm49ZnVuY3Rpb24oUXQsam4sU3IsaXIpe3JldHVybihTci1RdCkqKFNyLVF0KSsoaXItam4pKihpci1qbil9LGdyO3kucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iixncj1mdW5jdGlvbihRdCl7aWYoeS5oYXNUb3VjaFN0YXJ0ZWQ9ITAsISFuZShRdCkpe2t0KCkseS50b3VjaERhdGEuY2FwdHVyZT0hMCx5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwO3ZhciBqbj15LmN5LFNyPXkudG91Y2hEYXRhLm5vdyxpcj15LnRvdWNoRGF0YS5lYXJsaWVyO2lmKFF0LnRvdWNoZXNbMF0pe3ZhciBzcj15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1swXS5jbGllbnRYLFF0LnRvdWNoZXNbMF0uY2xpZW50WSk7U3JbMF09c3JbMF0sU3JbMV09c3JbMV19aWYoUXQudG91Y2hlc1sxXSl7dmFyIHNyPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzFdLmNsaWVudFgsUXQudG91Y2hlc1sxXS5jbGllbnRZKTtTclsyXT1zclswXSxTclszXT1zclsxXX1pZihRdC50b3VjaGVzWzJdKXt2YXIgc3I9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMl0uY2xpZW50WCxRdC50b3VjaGVzWzJdLmNsaWVudFkpO1NyWzRdPXNyWzBdLFNyWzVdPXNyWzFdfWlmKFF0LnRvdWNoZXNbMV0pe3kudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQ9ITAsZHQoeS5kcmFnRGF0YS50b3VjaERyYWdFbGVzKTt2YXIgSWE9eS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7U249SWFbMF0sV249SWFbMV0scnI9SWFbMl0sd3I9SWFbM10sRmU9UXQudG91Y2hlc1swXS5jbGllbnRYLVNuLHdlPVF0LnRvdWNoZXNbMF0uY2xpZW50WS1Xbixibj1RdC50b3VjaGVzWzFdLmNsaWVudFgtU24semU9UXQudG91Y2hlc1sxXS5jbGllbnRZLVduLHVyPTA8PUZlJiZGZTw9cnImJjA8PWJuJiZibjw9cnImJjA8PXdlJiZ3ZTw9d3ImJjA8PXplJiZ6ZTw9d3I7dmFyICRyPWpuLnBhbigpLFlpPWpuLnpvb20oKTtHZT1lcihGZSx3ZSxibix6ZSksRW49dm4oRmUsd2UsYm4semUpLEluPVsoRmUrYm4pLzIsKHdlK3plKS8yXSxZbj1bKEluWzBdLSRyLngpL1lpLChJblsxXS0kci55KS9ZaV07dmFyIEZvPTIwMCxQYz1GbypGbztpZihFbjxQYyYmIVF0LnRvdWNoZXNbMl0pe3ZhciBaYT15LmZpbmROZWFyZXN0RWxlbWVudChTclswXSxTclsxXSwhMCwhMCksbWM9eS5maW5kTmVhcmVzdEVsZW1lbnQoU3JbMl0sU3JbM10sITAsITApO1phJiZaYS5pc05vZGUoKT8oWmEuYWN0aXZhdGUoKS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dHRhcHN0YXJ0Iixwb3NpdGlvbjp7eDpTclswXSx5OlNyWzFdfX0pLHkudG91Y2hEYXRhLnN0YXJ0PVphKTptYyYmbWMuaXNOb2RlKCk/KG1jLmFjdGl2YXRlKCkuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6U3JbMF0seTpTclsxXX19KSx5LnRvdWNoRGF0YS5zdGFydD1tYyk6am4uZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6U3JbMF0seTpTclsxXX19KSx5LnRvdWNoRGF0YS5zdGFydCYmKHkudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLHkudG91Y2hEYXRhLmN4dD0hMCx5LnRvdWNoRGF0YS5jeHREcmFnZ2VkPSExLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXcoKTtyZXR1cm59fWlmKFF0LnRvdWNoZXNbMl0pam4uYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZRdC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYoIVF0LnRvdWNoZXNbMV0pe2lmKFF0LnRvdWNoZXNbMF0pe3ZhciBUYT15LmZpbmROZWFyZXN0RWxlbWVudHMoU3JbMF0sU3JbMV0sITAsITApLEphPVRhWzBdO2lmKEphIT1udWxsJiYoSmEuYWN0aXZhdGUoKSx5LnRvdWNoRGF0YS5zdGFydD1KYSx5LnRvdWNoRGF0YS5zdGFydHM9VGEseS5ub2RlSXNHcmFiYmFibGUoSmEpKSl7dmFyIG1sPXkuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcz1qbi5jb2xsZWN0aW9uKCkscWY9bnVsbDt5LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx5LnJlZHJhd0hpbnQoImRyYWciLCEwKSxKYS5zZWxlY3RlZCgpPyhxZj1qbi4kKGZ1bmN0aW9uKGNkKXtyZXR1cm4gY2Quc2VsZWN0ZWQoKSYmeS5ub2RlSXNHcmFiYmFibGUoY2QpfSksb3QocWYse2FkZFRvTGlzdDptbH0pKTpodChKYSx7YWRkVG9MaXN0Om1sfSksUyhKYSk7dmFyIENwPWZ1bmN0aW9uKG13KXtyZXR1cm57b3JpZ2luYWxFdmVudDpRdCx0eXBlOm13LHBvc2l0aW9uOnt4OlNyWzBdLHk6U3JbMV19fX07SmEuZW1pdChDcCgiZ3JhYm9uIikpLHFmP3FmLmZvckVhY2goZnVuY3Rpb24oY2Qpe2NkLmVtaXQoQ3AoImdyYWIiKSl9KTpKYS5lbWl0KENwKCJncmFiIikpfXgoSmEsWyJ0b3VjaHN0YXJ0IiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sUXQse3g6U3JbMF0seTpTclsxXX0pLEphPT1udWxsJiYoeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXt4OnNyWzBdLHk6c3JbMV19LHkucmVkcmF3SGludCgic2VsZWN0IiwhMCkseS5yZWRyYXcoKSkseS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMSx5LnRvdWNoRGF0YS5zaW5nbGVUb3VjaFN0YXJ0VGltZT0rbmV3IERhdGUsY2xlYXJUaW1lb3V0KHkudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0KSx5LnRvdWNoRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD09PSExJiYheS5waW5jaGluZyYmIXkudG91Y2hEYXRhLnNlbGVjdGluZyYmeCh5LnRvdWNoRGF0YS5zdGFydCxbInRhcGhvbGQiXSxRdCx7eDpTclswXSx5OlNyWzFdfSl9LHkudGFwaG9sZER1cmF0aW9uKX19aWYoUXQudG91Y2hlcy5sZW5ndGg+PTEpe2Zvcih2YXIgX3A9eS50b3VjaERhdGEuc3RhcnRQb3NpdGlvbj1bXSxIZj0wO0hmPFNyLmxlbmd0aDtIZisrKV9wW0hmXT1pcltIZl09U3JbSGZdO3ZhciBfZz1RdC50b3VjaGVzWzBdO3kudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uPVtfZy5jbGllbnRYLF9nLmNsaWVudFldfX19LCExKTt2YXIgZnI7eS5yZWdpc3RlckJpbmRpbmcod2luZG93LCJ0b3VjaG1vdmUiLGZyPWZ1bmN0aW9uKFF0KXt2YXIgam49eS50b3VjaERhdGEuY2FwdHVyZTtpZighKCFqbiYmIW5lKFF0KSkpe3ZhciBTcj15LnNlbGVjdGlvbixpcj15LmN5LHNyPXkudG91Y2hEYXRhLm5vdyxJYT15LnRvdWNoRGF0YS5lYXJsaWVyLCRyPWlyLnpvb20oKTtpZihRdC50b3VjaGVzWzBdKXt2YXIgWWk9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMF0uY2xpZW50WCxRdC50b3VjaGVzWzBdLmNsaWVudFkpO3NyWzBdPVlpWzBdLHNyWzFdPVlpWzFdfWlmKFF0LnRvdWNoZXNbMV0pe3ZhciBZaT15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1sxXS5jbGllbnRYLFF0LnRvdWNoZXNbMV0uY2xpZW50WSk7c3JbMl09WWlbMF0sc3JbM109WWlbMV19aWYoUXQudG91Y2hlc1syXSl7dmFyIFlpPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzJdLmNsaWVudFgsUXQudG91Y2hlc1syXS5jbGllbnRZKTtzcls0XT1ZaVswXSxzcls1XT1ZaVsxXX12YXIgRm89eS50b3VjaERhdGEuc3RhcnRHUG9zaXRpb24sUGM7aWYoam4mJlF0LnRvdWNoZXNbMF0mJkZvKXtmb3IodmFyIFphPVtdLG1jPTA7bWM8c3IubGVuZ3RoO21jKyspWmFbbWNdPXNyW21jXS1JYVttY107dmFyIFRhPVF0LnRvdWNoZXNbMF0uY2xpZW50WC1Gb1swXSxKYT1UYSpUYSxtbD1RdC50b3VjaGVzWzBdLmNsaWVudFktRm9bMV0scWY9bWwqbWwsQ3A9SmErcWY7UGM9Q3A+PXkudG91Y2hUYXBUaHJlc2hvbGQyfWlmKGpuJiZ5LnRvdWNoRGF0YS5jeHQpe1F0LnByZXZlbnREZWZhdWx0KCk7dmFyIF9wPVF0LnRvdWNoZXNbMF0uY2xpZW50WC1TbixIZj1RdC50b3VjaGVzWzBdLmNsaWVudFktV24sX2c9UXQudG91Y2hlc1sxXS5jbGllbnRYLVNuLGNkPVF0LnRvdWNoZXNbMV0uY2xpZW50WS1Xbixtdz12bihfcCxIZixfZyxjZCksTG09bXcvRW4seHg9MTUwLEYzPXh4Knh4LGt4PTEuNSxTQz1reCpreDtpZihMbT49U0N8fG13Pj1GMyl7eS50b3VjaERhdGEuY3h0PSExLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgTjM9e29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0dGFwZW5kIixwb3NpdGlvbjp7eDpzclswXSx5OnNyWzFdfX07eS50b3VjaERhdGEuc3RhcnQ/KHkudG91Y2hEYXRhLnN0YXJ0LnVuYWN0aXZhdGUoKS5lbWl0KE4zKSx5LnRvdWNoRGF0YS5zdGFydD1udWxsKTppci5lbWl0KE4zKX19aWYoam4mJnkudG91Y2hEYXRhLmN4dCl7dmFyIE4zPXtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dGRyYWciLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fTt5LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHkucmVkcmF3SGludCgic2VsZWN0IiwhMCkseS50b3VjaERhdGEuc3RhcnQ/eS50b3VjaERhdGEuc3RhcnQuZW1pdChOMyk6aXIuZW1pdChOMykseS50b3VjaERhdGEuc3RhcnQmJih5LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx5LnRvdWNoRGF0YS5jeHREcmFnZ2VkPSEwO3ZhciBIZD15LmZpbmROZWFyZXN0RWxlbWVudChzclswXSxzclsxXSwhMCwhMCk7KCF5LnRvdWNoRGF0YS5jeHRPdmVyfHxIZCE9PXkudG91Y2hEYXRhLmN4dE92ZXIpJiYoeS50b3VjaERhdGEuY3h0T3ZlciYmeS50b3VjaERhdGEuY3h0T3Zlci5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dGRyYWdvdXQiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSkseS50b3VjaERhdGEuY3h0T3Zlcj1IZCxIZCYmSGQuZW1pdCh7b3JpZ2luYWxFdmVudDpRdCx0eXBlOiJjeHRkcmFnb3ZlciIscG9zaXRpb246e3g6c3JbMF0seTpzclsxXX19KSl9ZWxzZSBpZihqbiYmUXQudG91Y2hlc1syXSYmaXIuYm94U2VsZWN0aW9uRW5hYmxlZCgpKVF0LnByZXZlbnREZWZhdWx0KCkseS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0aGlzLmxhc3RUaHJlZVRvdWNoPStuZXcgRGF0ZSx5LnRvdWNoRGF0YS5zZWxlY3Rpbmd8fGlyLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiYm94c3RhcnQiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSkseS50b3VjaERhdGEuc2VsZWN0aW5nPSEwLHkudG91Y2hEYXRhLmRpZFNlbGVjdD0hMCxTcls0XT0xLCFTcnx8U3IubGVuZ3RoPT09MHx8U3JbMF09PT12b2lkIDA/KFNyWzBdPShzclswXStzclsyXStzcls0XSkvMyxTclsxXT0oc3JbMV0rc3JbM10rc3JbNV0pLzMsU3JbMl09KHNyWzBdK3NyWzJdK3NyWzRdKS8zKzEsU3JbM109KHNyWzFdK3NyWzNdK3NyWzVdKS8zKzEpOihTclsyXT0oc3JbMF0rc3JbMl0rc3JbNF0pLzMsU3JbM109KHNyWzFdK3NyWzNdK3NyWzVdKS8zKSx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCk7ZWxzZSBpZihqbiYmUXQudG91Y2hlc1sxXSYmIXkudG91Y2hEYXRhLmRpZFNlbGVjdCYmaXIuem9vbWluZ0VuYWJsZWQoKSYmaXIucGFubmluZ0VuYWJsZWQoKSYmaXIudXNlclpvb21pbmdFbmFibGVkKCkmJmlyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXtRdC5wcmV2ZW50RGVmYXVsdCgpLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgeTE9eS5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKHkxKXt5LnJlZHJhd0hpbnQoImRyYWciLCEwKTtmb3IodmFyIFZkPTA7VmQ8eTEubGVuZ3RoO1ZkKyspe3ZhciBBQz15MVtWZF0uX3ByaXZhdGU7QUMuZ3JhYmJlZD0hMSxBQy5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMX19dmFyIFliPXkudG91Y2hEYXRhLnN0YXJ0LF9wPVF0LnRvdWNoZXNbMF0uY2xpZW50WC1TbixIZj1RdC50b3VjaGVzWzBdLmNsaWVudFktV24sX2c9UXQudG91Y2hlc1sxXS5jbGllbnRYLVNuLGNkPVF0LnRvdWNoZXNbMV0uY2xpZW50WS1XbixkUj1lcihfcCxIZixfZyxjZCksSHR0PWRSL0dlO2lmKHVyKXt2YXIgVnR0PV9wLUZlLEd0dD1IZi13ZSxVdHQ9X2ctYm4sV3R0PWNkLXplLFl0dD0oVnR0K1V0dCkvMixLdHQ9KEd0dCtXdHQpLzIsdDg9aXIuem9vbSgpLGxNPXQ4Kkh0dCxMQz1pci5wYW4oKSxnUj1ZblswXSp0OCtMQy54LHBSPVluWzFdKnQ4K0xDLnksWHR0PXt4Oi1sTS90OCooZ1ItTEMueC1ZdHQpK2dSLHk6LWxNL3Q4KihwUi1MQy55LUt0dCkrcFJ9O2lmKFliJiZZYi5hY3RpdmUoKSl7dmFyIHkxPXkuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcztkdCh5MSkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCksWWIudW5hY3RpdmF0ZSgpLmVtaXQoImZyZWVvbiIpLHkxLmVtaXQoImZyZWUiKSx5LmRyYWdEYXRhLmRpZERyYWcmJihZYi5lbWl0KCJkcmFnZnJlZW9uIikseTEuZW1pdCgiZHJhZ2ZyZWUiKSl9aXIudmlld3BvcnQoe3pvb206bE0scGFuOlh0dCxjYW5jZWxPbkZhaWxlZFpvb206ITB9KSxpci5lbWl0KCJwaW5jaHpvb20iKSxHZT1kUixGZT1fcCx3ZT1IZixibj1fZyx6ZT1jZCx5LnBpbmNoaW5nPSEwfWlmKFF0LnRvdWNoZXNbMF0pe3ZhciBZaT15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1swXS5jbGllbnRYLFF0LnRvdWNoZXNbMF0uY2xpZW50WSk7c3JbMF09WWlbMF0sc3JbMV09WWlbMV19aWYoUXQudG91Y2hlc1sxXSl7dmFyIFlpPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzFdLmNsaWVudFgsUXQudG91Y2hlc1sxXS5jbGllbnRZKTtzclsyXT1ZaVswXSxzclszXT1ZaVsxXX1pZihRdC50b3VjaGVzWzJdKXt2YXIgWWk9eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMl0uY2xpZW50WCxRdC50b3VjaGVzWzJdLmNsaWVudFkpO3NyWzRdPVlpWzBdLHNyWzVdPVlpWzFdfX1lbHNlIGlmKFF0LnRvdWNoZXNbMF0mJiF5LnRvdWNoRGF0YS5kaWRTZWxlY3Qpe3ZhciBTcD15LnRvdWNoRGF0YS5zdGFydCxoTT15LnRvdWNoRGF0YS5sYXN0LEhkO2lmKCF5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF5LnN3aXBlUGFubmluZyYmKEhkPXkuZmluZE5lYXJlc3RFbGVtZW50KHNyWzBdLHNyWzFdLCEwLCEwKSksam4mJlNwIT1udWxsJiZRdC5wcmV2ZW50RGVmYXVsdCgpLGpuJiZTcCE9bnVsbCYmeS5ub2RlSXNEcmFnZ2FibGUoU3ApKWlmKFBjKXt2YXIgeTE9eS5kcmFnRGF0YS50b3VjaERyYWdFbGVzLGJSPSF5LmRyYWdEYXRhLmRpZERyYWc7YlImJm90KHkxLHtpbkRyYWdMYXllcjohMH0pLHkuZHJhZ0RhdGEuZGlkRHJhZz0hMDt2YXIgZTg9e3g6MCx5OjB9O2lmKFgoWmFbMF0pJiZYKFphWzFdKSYmKGU4LngrPVphWzBdLGU4LnkrPVphWzFdLGJSKSl7eS5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIEFwPXkudG91Y2hEYXRhLmRyYWdEZWx0YTtBcCYmWChBcFswXSkmJlgoQXBbMV0pJiYoZTgueCs9QXBbMF0sZTgueSs9QXBbMV0pfXkuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCx5MS5zaWxlbnRTaGlmdChlOCkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHkucmVkcmF3SGludCgiZHJhZyIsITApLHkudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF09PUlhWzBdJiZ5LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdPT1JYVsxXSYmeS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXcoKX1lbHNle3ZhciBBcD15LnRvdWNoRGF0YS5kcmFnRGVsdGE9eS50b3VjaERhdGEuZHJhZ0RlbHRhfHxbXTtBcC5sZW5ndGg9PT0wPyhBcC5wdXNoKFphWzBdKSxBcC5wdXNoKFphWzFdKSk6KEFwWzBdKz1aYVswXSxBcFsxXSs9WmFbMV0pfWlmKHgoU3B8fEhkLFsidG91Y2htb3ZlIiwidGFwZHJhZyIsInZtb3VzZW1vdmUiXSxRdCx7eDpzclswXSx5OnNyWzFdfSksKCFTcHx8IVNwLmdyYWJiZWQoKSkmJkhkIT1oTSYmKGhNJiZoTS5lbWl0KHtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6InRhcGRyYWdvdXQiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSksSGQmJkhkLmVtaXQoe29yaWdpbmFsRXZlbnQ6UXQsdHlwZToidGFwZHJhZ292ZXIiLHBvc2l0aW9uOnt4OnNyWzBdLHk6c3JbMV19fSkpLHkudG91Y2hEYXRhLmxhc3Q9SGQsam4pZm9yKHZhciBWZD0wO1ZkPHNyLmxlbmd0aDtWZCsrKXNyW1ZkXSYmeS50b3VjaERhdGEuc3RhcnRQb3NpdGlvbltWZF0mJlBjJiYoeS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMCk7aWYoam4mJihTcD09bnVsbHx8U3AucGFubmFibGUoKSkmJmlyLnBhbm5pbmdFbmFibGVkKCkmJmlyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgUXR0PUwoU3AseS50b3VjaERhdGEuc3RhcnRzKTtRdHQmJihRdC5wcmV2ZW50RGVmYXVsdCgpLHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbnx8KHkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1LNSh5LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uKSkseS5zd2lwZVBhbm5pbmc/KGlyLnBhbkJ5KHt4OlphWzBdKiRyLHk6WmFbMV0qJHJ9KSxpci5lbWl0KCJkcmFncGFuIikpOlBjJiYoeS5zd2lwZVBhbm5pbmc9ITAsaXIucGFuQnkoe3g6VGEqJHIseTptbCokcn0pLGlyLmVtaXQoImRyYWdwYW4iKSxTcCYmKFNwLnVuYWN0aXZhdGUoKSx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkudG91Y2hEYXRhLnN0YXJ0PW51bGwpKSk7dmFyIFlpPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzBdLmNsaWVudFgsUXQudG91Y2hlc1swXS5jbGllbnRZKTtzclswXT1ZaVswXSxzclsxXT1ZaVsxXX19Zm9yKHZhciBtYz0wO21jPHNyLmxlbmd0aDttYysrKUlhW21jXT1zclttY107am4mJlF0LnRvdWNoZXMubGVuZ3RoPjAmJiF5LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF5LnN3aXBlUGFubmluZyYmeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uIT1udWxsJiYoeS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx5LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHkucmVkcmF3KCkpfX0sITEpO3ZhciBKcjt5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csInRvdWNoY2FuY2VsIixKcj1mdW5jdGlvbihRdCl7dmFyIGpuPXkudG91Y2hEYXRhLnN0YXJ0O3kudG91Y2hEYXRhLmNhcHR1cmU9ITEsam4mJmpuLnVuYWN0aXZhdGUoKX0pO3ZhciB2aSxYcyxFYSxDaTtpZih5LnJlZ2lzdGVyQmluZGluZyh3aW5kb3csInRvdWNoZW5kIix2aT1mdW5jdGlvbihRdCl7dmFyIGpuPXkudG91Y2hEYXRhLnN0YXJ0LFNyPXkudG91Y2hEYXRhLmNhcHR1cmU7aWYoU3IpUXQudG91Y2hlcy5sZW5ndGg9PT0wJiYoeS50b3VjaERhdGEuY2FwdHVyZT0hMSksUXQucHJldmVudERlZmF1bHQoKTtlbHNlIHJldHVybjt2YXIgaXI9eS5zZWxlY3Rpb247eS5zd2lwZVBhbm5pbmc9ITEseS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSExO3ZhciBzcj15LmN5LElhPXNyLnpvb20oKSwkcj15LnRvdWNoRGF0YS5ub3csWWk9eS50b3VjaERhdGEuZWFybGllcjtpZihRdC50b3VjaGVzWzBdKXt2YXIgRm89eS5wcm9qZWN0SW50b1ZpZXdwb3J0KFF0LnRvdWNoZXNbMF0uY2xpZW50WCxRdC50b3VjaGVzWzBdLmNsaWVudFkpOyRyWzBdPUZvWzBdLCRyWzFdPUZvWzFdfWlmKFF0LnRvdWNoZXNbMV0pe3ZhciBGbz15LnByb2plY3RJbnRvVmlld3BvcnQoUXQudG91Y2hlc1sxXS5jbGllbnRYLFF0LnRvdWNoZXNbMV0uY2xpZW50WSk7JHJbMl09Rm9bMF0sJHJbM109Rm9bMV19aWYoUXQudG91Y2hlc1syXSl7dmFyIEZvPXkucHJvamVjdEludG9WaWV3cG9ydChRdC50b3VjaGVzWzJdLmNsaWVudFgsUXQudG91Y2hlc1syXS5jbGllbnRZKTskcls0XT1Gb1swXSwkcls1XT1Gb1sxXX1qbiYmam4udW5hY3RpdmF0ZSgpO3ZhciBQYztpZih5LnRvdWNoRGF0YS5jeHQpe2lmKFBjPXtvcmlnaW5hbEV2ZW50OlF0LHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19LGpuP2puLmVtaXQoUGMpOnNyLmVtaXQoUGMpLCF5LnRvdWNoRGF0YS5jeHREcmFnZ2VkKXt2YXIgWmE9e29yaWdpbmFsRXZlbnQ6UXQsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDokclswXSx5OiRyWzFdfX07am4/am4uZW1pdChaYSk6c3IuZW1pdChaYSl9eS50b3VjaERhdGEuc3RhcnQmJih5LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx5LnRvdWNoRGF0YS5jeHQ9ITEseS50b3VjaERhdGEuc3RhcnQ9bnVsbCx5LnJlZHJhdygpO3JldHVybn1pZighUXQudG91Y2hlc1syXSYmc3IuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZ5LnRvdWNoRGF0YS5zZWxlY3Rpbmcpe3kudG91Y2hEYXRhLnNlbGVjdGluZz0hMTt2YXIgbWM9c3IuY29sbGVjdGlvbih5LmdldEFsbEluQm94KGlyWzBdLGlyWzFdLGlyWzJdLGlyWzNdKSk7aXJbMF09dm9pZCAwLGlyWzFdPXZvaWQgMCxpclsyXT12b2lkIDAsaXJbM109dm9pZCAwLGlyWzRdPTAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSxzci5lbWl0KHt0eXBlOiJib3hlbmQiLG9yaWdpbmFsRXZlbnQ6UXQscG9zaXRpb246e3g6JHJbMF0seTokclsxXX19KTt2YXIgVGE9ZnVuY3Rpb24oRjMpe3JldHVybiBGMy5zZWxlY3RhYmxlKCkmJiFGMy5zZWxlY3RlZCgpfTttYy5lbWl0KCJib3giKS5zdGRGaWx0ZXIoVGEpLnNlbGVjdCgpLmVtaXQoImJveHNlbGVjdCIpLG1jLm5vbmVtcHR5KCkmJnkucmVkcmF3SGludCgiZWxlcyIsITApLHkucmVkcmF3KCl9aWYoam4hPW51bGwmJmpuLnVuYWN0aXZhdGUoKSxRdC50b3VjaGVzWzJdKXkuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTtlbHNlIGlmKCFRdC50b3VjaGVzWzFdKXtpZighUXQudG91Y2hlc1swXSl7aWYoIVF0LnRvdWNoZXNbMF0pe3kuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseS5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgSmE9eS5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKGpuIT1udWxsKXt2YXIgbWw9am4uX3ByaXZhdGUuZ3JhYmJlZDtkdChKYSkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS5yZWRyYXdIaW50KCJlbGVzIiwhMCksbWwmJihqbi5lbWl0KCJmcmVlb24iKSxKYS5lbWl0KCJmcmVlIikseS5kcmFnRGF0YS5kaWREcmFnJiYoam4uZW1pdCgiZHJhZ2ZyZWVvbiIpLEphLmVtaXQoImRyYWdmcmVlIikpKSx4KGpuLFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxRdCx7eDokclswXSx5OiRyWzFdfSksam4udW5hY3RpdmF0ZSgpLHkudG91Y2hEYXRhLnN0YXJ0PW51bGx9ZWxzZXt2YXIgcWY9eS5maW5kTmVhcmVzdEVsZW1lbnQoJHJbMF0sJHJbMV0sITAsITApO3gocWYsWyJ0b3VjaGVuZCIsInRhcGVuZCIsInZtb3VzZXVwIiwidGFwZHJhZ291dCJdLFF0LHt4OiRyWzBdLHk6JHJbMV19KX12YXIgQ3A9eS50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXS0kclswXSxfcD1DcCpDcCxIZj15LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdLSRyWzFdLF9nPUhmKkhmLGNkPV9wK19nLG13PWNkKklhKklhO3kudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWR8fChqbnx8c3IuJCgiOnNlbGVjdGVkIikudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSx4KGpuLFsidGFwIiwidmNsaWNrIl0sUXQse3g6JHJbMF0seTokclsxXX0pLFhzPSExLFF0LnRpbWVTdGFtcC1DaTw9c3IubXVsdGlDbGlja0RlYm91bmNlVGltZSgpPyhFYSYmY2xlYXJUaW1lb3V0KEVhKSxYcz0hMCxDaT1udWxsLHgoam4sWyJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxRdCx7eDokclswXSx5OiRyWzFdfSkpOihFYT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7WHN8fHgoam4sWyJvbmV0YXAiLCJ2b25lY2xpY2siXSxRdCx7eDokclswXSx5OiRyWzFdfSl9LHNyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksQ2k9UXQudGltZVN0YW1wKSksam4hPW51bGwmJiF5LmRyYWdEYXRhLmRpZERyYWcmJmpuLl9wcml2YXRlLnNlbGVjdGFibGUmJm13PHkudG91Y2hUYXBUaHJlc2hvbGQyJiYheS5waW5jaGluZyYmKHNyLnNlbGVjdGlvblR5cGUoKT09PSJzaW5nbGUiPyhzci4kKGcpLnVubWVyZ2Uoam4pLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksam4uc2VsZWN0KFsidGFwc2VsZWN0Il0pKTpqbi5zZWxlY3RlZCgpP2puLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSk6am4uc2VsZWN0KFsidGFwc2VsZWN0Il0pLHkucmVkcmF3SGludCgiZWxlcyIsITApKSx5LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwfX19Zm9yKHZhciBMbT0wO0xtPCRyLmxlbmd0aDtMbSsrKVlpW0xtXT0kcltMbV07eS5kcmFnRGF0YS5kaWREcmFnPSExLFF0LnRvdWNoZXMubGVuZ3RoPT09MCYmKHkudG91Y2hEYXRhLmRyYWdEZWx0YT1bXSx5LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uPW51bGwseS50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249bnVsbCx5LnRvdWNoRGF0YS5kaWRTZWxlY3Q9ITEpLFF0LnRvdWNoZXMubGVuZ3RoPDImJihRdC50b3VjaGVzLmxlbmd0aD09PTEmJih5LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1bUXQudG91Y2hlc1swXS5jbGllbnRYLFF0LnRvdWNoZXNbMF0uY2xpZW50WV0pLHkucGluY2hpbmc9ITEseS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXcoKSl9LCExKSx0eXBlb2YgVG91Y2hFdmVudD4idSIpe3ZhciBoaT1bXSxncz1mdW5jdGlvbihRdCl7cmV0dXJue2NsaWVudFg6UXQuY2xpZW50WCxjbGllbnRZOlF0LmNsaWVudFksZm9yY2U6MSxpZGVudGlmaWVyOlF0LnBvaW50ZXJJZCxwYWdlWDpRdC5wYWdlWCxwYWdlWTpRdC5wYWdlWSxyYWRpdXNYOlF0LndpZHRoLzIscmFkaXVzWTpRdC5oZWlnaHQvMixzY3JlZW5YOlF0LnNjcmVlblgsc2NyZWVuWTpRdC5zY3JlZW5ZLHRhcmdldDpRdC50YXJnZXR9fSxxaT1mdW5jdGlvbihRdCl7cmV0dXJue2V2ZW50OlF0LHRvdWNoOmdzKFF0KX19LFNpPWZ1bmN0aW9uKFF0KXtoaS5wdXNoKHFpKFF0KSl9LFVpPWZ1bmN0aW9uKFF0KXtmb3IodmFyIGpuPTA7am48aGkubGVuZ3RoO2puKyspe3ZhciBTcj1oaVtqbl07aWYoU3IuZXZlbnQucG9pbnRlcklkPT09UXQucG9pbnRlcklkKXtoaS5zcGxpY2Uoam4sMSk7cmV0dXJufX19LFZhPWZ1bmN0aW9uKFF0KXt2YXIgam49aGkuZmlsdGVyKGZ1bmN0aW9uKFNyKXtyZXR1cm4gU3IuZXZlbnQucG9pbnRlcklkPT09UXQucG9pbnRlcklkfSlbMF07am4uZXZlbnQ9UXQsam4udG91Y2g9Z3MoUXQpfSxRcz1mdW5jdGlvbihRdCl7UXQudG91Y2hlcz1oaS5tYXAoZnVuY3Rpb24oam4pe3JldHVybiBqbi50b3VjaH0pfSxxcz1mdW5jdGlvbihRdCl7cmV0dXJuIFF0LnBvaW50ZXJUeXBlPT09Im1vdXNlInx8UXQucG9pbnRlclR5cGU9PT00fTt5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwicG9pbnRlcmRvd24iLGZ1bmN0aW9uKFRyKXtxcyhUcil8fChUci5wcmV2ZW50RGVmYXVsdCgpLFNpKFRyKSxRcyhUciksZ3IoVHIpKX0pLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJwb2ludGVydXAiLGZ1bmN0aW9uKFRyKXtxcyhUcil8fChVaShUciksUXMoVHIpLHZpKFRyKSl9KSx5LnJlZ2lzdGVyQmluZGluZyh5LmNvbnRhaW5lciwicG9pbnRlcmNhbmNlbCIsZnVuY3Rpb24oVHIpe3FzKFRyKXx8KFVpKFRyKSxRcyhUciksSnIoVHIpKX0pLHkucmVnaXN0ZXJCaW5kaW5nKHkuY29udGFpbmVyLCJwb2ludGVybW92ZSIsZnVuY3Rpb24oVHIpe3FzKFRyKXx8KFRyLnByZXZlbnREZWZhdWx0KCksVmEoVHIpLFFzKFRyKSxmcihUcikpfSl9fTt2YXIgYnc9e307YncuZ2VuZXJhdGVQb2x5Z29uPWZ1bmN0aW9uKHksZyl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1t5XT17cmVuZGVyZXI6dGhpcyxuYW1lOnkscG9pbnRzOmcsZHJhdzpmdW5jdGlvbihULEwsTyxQLCQpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCgicG9seWdvbiIsVCxMLE8sUCwkLHRoaXMucG9pbnRzKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihULEwsTyxQLCQscSxTKXtyZXR1cm4gQWsoJCxxLHRoaXMucG9pbnRzLFQsTCxPLzIsUC8yLFMpfSxjaGVja1BvaW50OmZ1bmN0aW9uKFQsTCxPLFAsJCxxLFMpe3JldHVybiBkdyhULEwsdGhpcy5wb2ludHMscSxTLFAsJCxbMCwtMV0sTyl9fX0sYncuZ2VuZXJhdGVFbGxpcHNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlcy5lbGxpcHNlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImVsbGlwc2UiLGRyYXc6ZnVuY3Rpb24oZyx4LFQsTCxPKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEwsTyl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7cmV0dXJuIFdLKE8sUCxnLHgsVC8yKyQsTC8yKyQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKGcseCxULEwsTyxQLCQpe3JldHVybiBTMyhnLHgsTCxPLFAsJCxUKX19fSxidy5nZW5lcmF0ZVJvdW5kUG9seWdvbj1mdW5jdGlvbih5LGcpe2Zvcih2YXIgeD1uZXcgQXJyYXkoZy5sZW5ndGgqMiksVD0wO1Q8Zy5sZW5ndGgvMjtUKyspe3ZhciBMPVQqMixPPXZvaWQgMDtUPGcubGVuZ3RoLzItMT9PPShUKzEpKjI6Tz0wLHhbVCo0XT1nW0xdLHhbVCo0KzFdPWdbTCsxXTt2YXIgUD1nW09dLWdbTF0sJD1nW08rMV0tZ1tMKzFdLHE9TWF0aC5zcXJ0KFAqUCskKiQpO3hbVCo0KzJdPVAvcSx4W1QqNCszXT0kL3F9cmV0dXJuIHRoaXMubm9kZVNoYXBlc1t5XT17cmVuZGVyZXI6dGhpcyxuYW1lOnkscG9pbnRzOngsZHJhdzpmdW5jdGlvbihWLFkscnQsb3QsaHQpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCgicm91bmQtcG9seWdvbiIsVixZLHJ0LG90LGh0LHRoaXMucG9pbnRzKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihWLFkscnQsb3QsaHQsZHQsTHQpe3JldHVybiBZSyhodCxkdCx0aGlzLnBvaW50cyxWLFkscnQsb3QpfSxjaGVja1BvaW50OmZ1bmN0aW9uKFYsWSxydCxvdCxodCxkdCxMdCl7cmV0dXJuIFVLKFYsWSx0aGlzLnBvaW50cyxkdCxMdCxvdCxodCl9fX0sYncuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbInJvdW5kLXJlY3RhbmdsZSJdPXRoaXMubm9kZVNoYXBlcy5yb3VuZHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJyb3VuZC1yZWN0YW5nbGUiLHBvaW50czpzZCg0LDApLGRyYXc6ZnVuY3Rpb24oZyx4LFQsTCxPKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEwsTyl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7cmV0dXJuIGZOKE8sUCxnLHgsVCxMLCQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKGcseCxULEwsTyxQLCQpe3ZhciBxPUxrKEwsTyksUz1xKjI7cmV0dXJuISEoZHcoZyx4LHRoaXMucG9pbnRzLFAsJCxMLE8tUyxbMCwtMV0sVCl8fGR3KGcseCx0aGlzLnBvaW50cyxQLCQsTC1TLE8sWzAsLTFdLFQpfHxTMyhnLHgsUyxTLFAtTC8yK3EsJC1PLzIrcSxUKXx8UzMoZyx4LFMsUyxQK0wvMi1xLCQtTy8yK3EsVCl8fFMzKGcseCxTLFMsUCtMLzItcSwkK08vMi1xLFQpfHxTMyhnLHgsUyxTLFAtTC8yK3EsJCtPLzItcSxUKSl9fX0sYncuZ2VuZXJhdGVDdXRSZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJjdXQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLmN1dHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJjdXQtcmVjdGFuZ2xlIixjb3JuZXJMZW5ndGg6Yk4oKSxwb2ludHM6c2QoNCwwKSxkcmF3OmZ1bmN0aW9uKGcseCxULEwsTyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxnLHgsVCxMLE8pfSxnZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzOmZ1bmN0aW9uKGcseCxULEwpe3ZhciBPPXRoaXMuY29ybmVyTGVuZ3RoLFA9eC8yLCQ9Zy8yLHE9VC0kLFM9VCskLFY9TC1QLFk9TCtQO3JldHVybnt0b3BMZWZ0OltxLFYrTyxxK08sVixxK08sVitPXSx0b3BSaWdodDpbUy1PLFYsUyxWK08sUy1PLFYrT10sYm90dG9tUmlnaHQ6W1MsWS1PLFMtTyxZLFMtTyxZLU9dLGJvdHRvbUxlZnQ6W3ErTyxZLHEsWS1PLHErTyxZLU9dfX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihnLHgsVCxMLE8sUCwkKXt2YXIgcT10aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMoVCsyKiQsTCsyKiQsZyx4KSxTPVtdLmNvbmNhdC5hcHBseShbXSxbcS50b3BMZWZ0LnNwbGljZSgwLDQpLHEudG9wUmlnaHQuc3BsaWNlKDAsNCkscS5ib3R0b21SaWdodC5zcGxpY2UoMCw0KSxxLmJvdHRvbUxlZnQuc3BsaWNlKDAsNCldKTtyZXR1cm4gQWsoTyxQLFMsZyx4KX0sY2hlY2tQb2ludDpmdW5jdGlvbihnLHgsVCxMLE8sUCwkKXtpZihkdyhnLHgsdGhpcy5wb2ludHMsUCwkLEwsTy0yKnRoaXMuY29ybmVyTGVuZ3RoLFswLC0xXSxUKXx8ZHcoZyx4LHRoaXMucG9pbnRzLFAsJCxMLTIqdGhpcy5jb3JuZXJMZW5ndGgsTyxbMCwtMV0sVCkpcmV0dXJuITA7dmFyIHE9dGhpcy5nZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzKEwsTyxQLCQpO3JldHVybiBxZChnLHgscS50b3BMZWZ0KXx8cWQoZyx4LHEudG9wUmlnaHQpfHxxZChnLHgscS5ib3R0b21SaWdodCl8fHFkKGcseCxxLmJvdHRvbUxlZnQpfX19LGJ3LmdlbmVyYXRlQmFycmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlcy5iYXJyZWw9e3JlbmRlcmVyOnRoaXMsbmFtZToiYmFycmVsIixwb2ludHM6c2QoNCwwKSxkcmF3OmZ1bmN0aW9uKGcseCxULEwsTyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxnLHgsVCxMLE8pfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKGcseCxULEwsTyxQLCQpe3ZhciBxPS4xNSxTPS41LFY9Ljg1LFk9dGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyhUKzIqJCxMKzIqJCxnLHgpLHJ0PWZ1bmN0aW9uKGR0KXt2YXIgTHQ9WDUoe3g6ZHRbMF0seTpkdFsxXX0se3g6ZHRbMl0seTpkdFszXX0se3g6ZHRbNF0seTpkdFs1XX0scSksa3Q9WDUoe3g6ZHRbMF0seTpkdFsxXX0se3g6ZHRbMl0seTpkdFszXX0se3g6ZHRbNF0seTpkdFs1XX0sUyksRHQ9WDUoe3g6ZHRbMF0seTpkdFsxXX0se3g6ZHRbMl0seTpkdFszXX0se3g6ZHRbNF0seTpkdFs1XX0sVik7cmV0dXJuW2R0WzBdLGR0WzFdLEx0LngsTHQueSxrdC54LGt0LnksRHQueCxEdC55LGR0WzRdLGR0WzVdXX0sb3Q9W10uY29uY2F0KHJ0KFkudG9wTGVmdCkscnQoWS50b3BSaWdodCkscnQoWS5ib3R0b21SaWdodCkscnQoWS5ib3R0b21MZWZ0KSk7cmV0dXJuIEFrKE8sUCxvdCxnLHgpfSxnZW5lcmF0ZUJhcnJlbEJlemllclB0czpmdW5jdGlvbihnLHgsVCxMKXt2YXIgTz14LzIsUD1nLzIsJD1ULVAscT1UK1AsUz1MLU8sVj1MK08sWT1JTChnLHgpLHJ0PVkuaGVpZ2h0T2Zmc2V0LG90PVkud2lkdGhPZmZzZXQsaHQ9WS5jdHJsUHRPZmZzZXRQY3QqZyxkdD17dG9wTGVmdDpbJCxTK3J0LCQraHQsUywkK290LFNdLHRvcFJpZ2h0OltxLW90LFMscS1odCxTLHEsUytydF0sYm90dG9tUmlnaHQ6W3EsVi1ydCxxLWh0LFYscS1vdCxWXSxib3R0b21MZWZ0OlskK290LFYsJCtodCxWLCQsVi1ydF19O3JldHVybiBkdC50b3BMZWZ0LmlzVG9wPSEwLGR0LnRvcFJpZ2h0LmlzVG9wPSEwLGR0LmJvdHRvbUxlZnQuaXNCb3R0b209ITAsZHQuYm90dG9tUmlnaHQuaXNCb3R0b209ITAsZHR9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7dmFyIHE9SUwoTCxPKSxTPXEuaGVpZ2h0T2Zmc2V0LFY9cS53aWR0aE9mZnNldDtpZihkdyhnLHgsdGhpcy5wb2ludHMsUCwkLEwsTy0yKlMsWzAsLTFdLFQpfHxkdyhnLHgsdGhpcy5wb2ludHMsUCwkLEwtMipWLE8sWzAsLTFdLFQpKXJldHVybiEwO2Zvcih2YXIgWT10aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKEwsTyxQLCQpLHJ0PWZ1bmN0aW9uKHF0LG5lLEd0KXt2YXIgZ2U9R3RbNF0sYmU9R3RbMl0saWU9R3RbMF0sRmU9R3RbNV0sd2U9R3RbMV0sYm49TWF0aC5taW4oZ2UsaWUpLHplPU1hdGgubWF4KGdlLGllKSxHZT1NYXRoLm1pbihGZSx3ZSksRW49TWF0aC5tYXgoRmUsd2UpO2lmKGJuPD1xdCYmcXQ8PXplJiZHZTw9bmUmJm5lPD1Fbil7dmFyIEluPUtLKGdlLGJlLGllKSxZbj1xSyhJblswXSxJblsxXSxJblsyXSxxdCksU249WW4uZmlsdGVyKGZ1bmN0aW9uKFduKXtyZXR1cm4gMDw9V24mJlduPD0xfSk7aWYoU24ubGVuZ3RoPjApcmV0dXJuIFNuWzBdfXJldHVybiBudWxsfSxvdD1PYmplY3Qua2V5cyhZKSxodD0wO2h0PG90Lmxlbmd0aDtodCsrKXt2YXIgZHQ9b3RbaHRdLEx0PVlbZHRdLGt0PXJ0KGcseCxMdCk7aWYoa3QhPW51bGwpe3ZhciBEdD1MdFs1XSxQdD1MdFszXSwkdD1MdFsxXSxadD1vZihEdCxQdCwkdCxrdCk7aWYoTHQuaXNUb3AmJlp0PD14fHxMdC5pc0JvdHRvbSYmeDw9WnQpcmV0dXJuITB9fXJldHVybiExfX19LGJ3LmdlbmVyYXRlQm90dG9tUm91bmRyZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJib3R0b20tcm91bmQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLmJvdHRvbXJvdW5kcmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiLHBvaW50czpzZCg0LDApLGRyYXc6ZnVuY3Rpb24oZyx4LFQsTCxPKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGcseCxULEwsTyl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZyx4LFQsTCxPLFAsJCl7dmFyIHE9Zy0oVC8yKyQpLFM9eC0oTC8yKyQpLFY9UyxZPWcrKFQvMiskKSxydD15bShPLFAsZyx4LHEsUyxZLFYsITEpO3JldHVybiBydC5sZW5ndGg+MD9ydDpmTihPLFAsZyx4LFQsTCwkKX0sY2hlY2tQb2ludDpmdW5jdGlvbihnLHgsVCxMLE8sUCwkKXt2YXIgcT1MayhMLE8pLFM9MipxO2lmKGR3KGcseCx0aGlzLnBvaW50cyxQLCQsTCxPLVMsWzAsLTFdLFQpfHxkdyhnLHgsdGhpcy5wb2ludHMsUCwkLEwtUyxPLFswLC0xXSxUKSlyZXR1cm4hMDt2YXIgVj1MLzIrMipULFk9Ty8yKzIqVCxydD1bUC1WLCQtWSxQLVYsJCxQK1YsJCxQK1YsJC1ZXTtyZXR1cm4hIShxZChnLHgscnQpfHxTMyhnLHgsUyxTLFArTC8yLXEsJCtPLzItcSxUKXx8UzMoZyx4LFMsUyxQLUwvMitxLCQrTy8yLXEsVCkpfX19LGJ3LnJlZ2lzdGVyTm9kZVNoYXBlcz1mdW5jdGlvbigpe3ZhciB5PXRoaXMubm9kZVNoYXBlcz17fSxnPXRoaXM7dGhpcy5nZW5lcmF0ZUVsbGlwc2UoKSx0aGlzLmdlbmVyYXRlUG9seWdvbigidHJpYW5nbGUiLHNkKDMsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXRyaWFuZ2xlIixzZCgzLDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigicmVjdGFuZ2xlIixzZCg0LDApKSx5LnNxdWFyZT15LnJlY3RhbmdsZSx0aGlzLmdlbmVyYXRlUm91bmRSZWN0YW5nbGUoKSx0aGlzLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlKCksdGhpcy5nZW5lcmF0ZUJhcnJlbCgpLHRoaXMuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZSgpO3t2YXIgeD1bMCwxLDEsMCwwLC0xLC0xLDBdO3RoaXMuZ2VuZXJhdGVQb2x5Z29uKCJkaWFtb25kIix4KSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1kaWFtb25kIix4KX10aGlzLmdlbmVyYXRlUG9seWdvbigicGVudGFnb24iLHNkKDUsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXBlbnRhZ29uIixzZCg1LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigiaGV4YWdvbiIsc2QoNiwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtaGV4YWdvbiIsc2QoNiwwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oImhlcHRhZ29uIixzZCg3LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1oZXB0YWdvbiIsc2QoNywwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oIm9jdGFnb24iLHNkKDgsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLW9jdGFnb24iLHNkKDgsMCkpO3ZhciBUPW5ldyBBcnJheSgyMCk7e3ZhciBMPU1MKDUsMCksTz1NTCg1LE1hdGguUEkvNSksUD0uNSooMy1NYXRoLnNxcnQoNSkpO1AqPTEuNTc7Zm9yKHZhciAkPTA7JDxPLmxlbmd0aC8yOyQrKylPWyQqMl0qPVAsT1skKjIrMV0qPVA7Zm9yKHZhciAkPTA7JDwyMC80OyQrKylUWyQqNF09TFskKjJdLFRbJCo0KzFdPUxbJCoyKzFdLFRbJCo0KzJdPU9bJCoyXSxUWyQqNCszXT1PWyQqMisxXX1UPXBOKFQpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJzdGFyIixUKSx0aGlzLmdlbmVyYXRlUG9seWdvbigidmVlIixbLTEsLTEsMCwtLjMzMywxLC0xLDAsMV0pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyaG9tYm9pZCIsWy0xLC0xLC4zMzMsLTEsMSwxLC0uMzMzLDFdKSx0aGlzLm5vZGVTaGFwZXMuY29uY2F2ZWhleGFnb249dGhpcy5nZW5lcmF0ZVBvbHlnb24oImNvbmNhdmUtaGV4YWdvbiIsWy0xLC0uOTUsLS43NSwwLC0xLC45NSwxLC45NSwuNzUsMCwxLC0uOTVdKTt7dmFyIHE9Wy0xLC0xLC4yNSwtMSwxLDAsLjI1LDEsLTEsMV07dGhpcy5nZW5lcmF0ZVBvbHlnb24oInRhZyIscSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdGFnIixxKX15Lm1ha2VQb2x5Z29uPWZ1bmN0aW9uKFMpe3ZhciBWPVMuam9pbigiJCIpLFk9InBvbHlnb24tIitWLHJ0O3JldHVybihydD10aGlzW1ldKT9ydDpnLmdlbmVyYXRlUG9seWdvbihZLFMpfX07dmFyIFlrPXt9O1lrLnRpbWVUb1JlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhd1RvdGFsVGltZS90aGlzLnJlZHJhd0NvdW50fSxZay5yZWRyYXc9ZnVuY3Rpb24oeSl7eT15fHxzTigpO3ZhciBnPXRoaXM7Zy5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKGcuYXZlcmFnZVJlZHJhd1RpbWU9MCksZy5sYXN0UmVkcmF3VGltZT09PXZvaWQgMCYmKGcubGFzdFJlZHJhd1RpbWU9MCksZy5sYXN0RHJhd1RpbWU9PT12b2lkIDAmJihnLmxhc3REcmF3VGltZT0wKSxnLnJlcXVlc3RlZEZyYW1lPSEwLGcucmVuZGVyT3B0aW9ucz15fSxZay5iZWZvcmVSZW5kZXI9ZnVuY3Rpb24oeSxnKXtpZighdGhpcy5kZXN0cm95ZWQpe2c9PW51bGwmJnZsKCJQcmlvcml0eSBpcyBub3Qgb3B0aW9uYWwgZm9yIGJlZm9yZVJlbmRlciIpO3ZhciB4PXRoaXMuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzO3gucHVzaCh7Zm46eSxwcmlvcml0eTpnfSkseC5zb3J0KGZ1bmN0aW9uKFQsTCl7cmV0dXJuIEwucHJpb3JpdHktVC5wcmlvcml0eX0pfX07dmFyIG5SPWZ1bmN0aW9uKGcseCxUKXtmb3IodmFyIEw9Zy5iZWZvcmVSZW5kZXJDYWxsYmFja3MsTz0wO088TC5sZW5ndGg7TysrKUxbT10uZm4oeCxUKX07WWsuc3RhcnRSZW5kZXJMb29wPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuY3k7aWYoIXkucmVuZGVyTG9vcFN0YXJ0ZWQpe3kucmVuZGVyTG9vcFN0YXJ0ZWQ9ITA7dmFyIHg9ZnVuY3Rpb24gVChMKXtpZigheS5kZXN0cm95ZWQpe2lmKCFnLmJhdGNoaW5nKCkpaWYoeS5yZXF1ZXN0ZWRGcmFtZSYmIXkuc2tpcEZyYW1lKXtuUih5LCEwLEwpO3ZhciBPPXlnKCk7eS5yZW5kZXIoeS5yZW5kZXJPcHRpb25zKTt2YXIgUD15Lmxhc3REcmF3VGltZT15ZygpO3kuYXZlcmFnZVJlZHJhd1RpbWU9PT12b2lkIDAmJih5LmF2ZXJhZ2VSZWRyYXdUaW1lPVAtTykseS5yZWRyYXdDb3VudD09PXZvaWQgMCYmKHkucmVkcmF3Q291bnQ9MCkseS5yZWRyYXdDb3VudCsrLHkucmVkcmF3VG90YWxUaW1lPT09dm9pZCAwJiYoeS5yZWRyYXdUb3RhbFRpbWU9MCk7dmFyICQ9UC1PO3kucmVkcmF3VG90YWxUaW1lKz0kLHkubGFzdFJlZHJhd1RpbWU9JCx5LmF2ZXJhZ2VSZWRyYXdUaW1lPXkuYXZlcmFnZVJlZHJhd1RpbWUvMiskLzIseS5yZXF1ZXN0ZWRGcmFtZT0hMX1lbHNlIG5SKHksITEsTCk7eS5za2lwRnJhbWU9ITEsQmYoVCl9fTtCZih4KX19O3ZhciBmdHQ9ZnVuY3Rpb24oZyl7dGhpcy5pbml0KGcpfSxuTT1mdHQsSTM9bk0ucHJvdG90eXBlO0kzLmNsaWVudEZ1bmN0aW9ucz1bInJlZHJhd0hpbnQiLCJyZW5kZXIiLCJyZW5kZXJUbyIsIm1hdGNoQ2FudmFzU2l6ZSIsIm5vZGVTaGFwZUltcGwiLCJhcnJvd1NoYXBlSW1wbCJdLEkzLmluaXQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcztnLm9wdGlvbnM9eSxnLmN5PXkuY3k7dmFyIHg9Zy5jb250YWluZXI9eS5jeS5jb250YWluZXIoKTtpZihSKXt2YXIgVD1SLmRvY3VtZW50LEw9VC5oZWFkLE89Il9fX19fX19fX19jeXRvc2NhcGVfc3R5bGVzaGVldCIsUD0iX19fX19fX19fX2N5dG9zY2FwZV9jb250YWluZXIiLCQ9VC5nZXRFbGVtZW50QnlJZChPKSE9bnVsbDtpZih4LmNsYXNzTmFtZS5pbmRleE9mKFApPDAmJih4LmNsYXNzTmFtZT0oeC5jbGFzc05hbWV8fCIiKSsiICIrUCksISQpe3ZhciBxPVQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtxLmlkPU8scS5pbm5lckhUTUw9Ii4iK1ArIiB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfSIsTC5pbnNlcnRCZWZvcmUocSxMLmNoaWxkcmVuWzBdKX12YXIgUz1SLmdldENvbXB1dGVkU3R5bGUoeCksVj1TLmdldFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIik7Vj09PSJzdGF0aWMiJiZTYygiQSBDeXRvc2NhcGUgY29udGFpbmVyIGhhcyBzdHlsZSBwb3NpdGlvbjpzdGF0aWMgYW5kIHNvIGNhbiBub3QgdXNlIFVJIGV4dGVuc2lvbnMgcHJvcGVybHkiKX1nLnNlbGVjdGlvbj1bdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLDBdLGcuYmV6aWVyUHJvalBjdHM9Wy4wNSwuMjI1LC40LC41LC42LC43NzUsLjk1XSxnLmhvdmVyRGF0YT17ZG93bjpudWxsLGxhc3Q6bnVsbCxkb3duVGltZTpudWxsLHRyaWdnZXJNb2RlOm51bGwsZHJhZ2dpbmc6ITEsaW5pdGlhbFBhbjpbbnVsbCxudWxsXSxjYXB0dXJlOiExfSxnLmRyYWdEYXRhPXtwb3NzaWJsZURyYWdFbGVtZW50czpbXX0sZy50b3VjaERhdGE9e3N0YXJ0Om51bGwsY2FwdHVyZTohMSxzdGFydFBvc2l0aW9uOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sc2luZ2xlVG91Y2hTdGFydFRpbWU6bnVsbCxzaW5nbGVUb3VjaE1vdmVkOiEwLG5vdzpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGVhcmxpZXI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXX0sZy5yZWRyYXdzPTAsZy5zaG93RnBzPXkuc2hvd0ZwcyxnLmRlYnVnPXkuZGVidWcsZy5oaWRlRWRnZXNPblZpZXdwb3J0PXkuaGlkZUVkZ2VzT25WaWV3cG9ydCxnLnRleHR1cmVPblZpZXdwb3J0PXkudGV4dHVyZU9uVmlld3BvcnQsZy53aGVlbFNlbnNpdGl2aXR5PXkud2hlZWxTZW5zaXRpdml0eSxnLm1vdGlvbkJsdXJFbmFibGVkPXkubW90aW9uQmx1cixnLmZvcmNlZFBpeGVsUmF0aW89WCh5LnBpeGVsUmF0aW8pP3kucGl4ZWxSYXRpbzpudWxsLGcubW90aW9uQmx1cj15Lm1vdGlvbkJsdXIsZy5tb3Rpb25CbHVyT3BhY2l0eT15Lm1vdGlvbkJsdXJPcGFjaXR5LGcubW90aW9uQmx1clRyYW5zcGFyZW5jeT0xLWcubW90aW9uQmx1ck9wYWNpdHksZy5tb3Rpb25CbHVyUHhSYXRpbz0xLGcubWJQeFJCbHVycnk9MSxnLm1pbk1iTG93UXVhbEZyYW1lcz00LGcuZnVsbFF1YWxpdHlNYj0hMSxnLmNsZWFyZWRGb3JNb3Rpb25CbHVyPVtdLGcuZGVza3RvcFRhcFRocmVzaG9sZD15LmRlc2t0b3BUYXBUaHJlc2hvbGQsZy5kZXNrdG9wVGFwVGhyZXNob2xkMj15LmRlc2t0b3BUYXBUaHJlc2hvbGQqeS5kZXNrdG9wVGFwVGhyZXNob2xkLGcudG91Y2hUYXBUaHJlc2hvbGQ9eS50b3VjaFRhcFRocmVzaG9sZCxnLnRvdWNoVGFwVGhyZXNob2xkMj15LnRvdWNoVGFwVGhyZXNob2xkKnkudG91Y2hUYXBUaHJlc2hvbGQsZy50YXBob2xkRHVyYXRpb249NTAwLGcuYmluZGluZ3M9W10sZy5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sZy5iZWZvcmVSZW5kZXJQcmlvcml0aWVzPXthbmltYXRpb25zOjQwMCxlbGVDYWxjczozMDAsZWxlVHhyRGVxOjIwMCxseXJUeHJEZXE6MTUwLGx5clR4clNraXA6MTAwfSxnLnJlZ2lzdGVyTm9kZVNoYXBlcygpLGcucmVnaXN0ZXJBcnJvd1NoYXBlcygpLGcucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycygpfSxJMy5ub3RpZnk9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5jeTtpZighdGhpcy5kZXN0cm95ZWQpe2lmKHk9PT0iaW5pdCIpe3gubG9hZCgpO3JldHVybn1pZih5PT09ImRlc3Ryb3kiKXt4LmRlc3Ryb3koKTtyZXR1cm59KHk9PT0iYWRkInx8eT09PSJyZW1vdmUifHx5PT09Im1vdmUiJiZULmhhc0NvbXBvdW5kTm9kZXMoKXx8eT09PSJsb2FkInx8eT09PSJ6b3JkZXIifHx5PT09Im1vdW50IikmJnguaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzKCkseT09PSJ2aWV3cG9ydCImJngucmVkcmF3SGludCgic2VsZWN0IiwhMCksKHk9PT0ibG9hZCJ8fHk9PT0icmVzaXplInx8eT09PSJtb3VudCIpJiYoeC5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSx4Lm1hdGNoQ2FudmFzU2l6ZSh4LmNvbnRhaW5lcikpLHgucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3SGludCgiZHJhZyIsITApLHRoaXMuc3RhcnRSZW5kZXJMb29wKCksdGhpcy5yZWRyYXcoKX19LEkzLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgeT10aGlzO3kuZGVzdHJveWVkPSEwLHkuY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtmb3IodmFyIGc9MDtnPHkuYmluZGluZ3MubGVuZ3RoO2crKyl7dmFyIHg9eS5iaW5kaW5nc1tnXSxUPXgsTD1ULnRhcmdldDsoTC5vZmZ8fEwucmVtb3ZlRXZlbnRMaXN0ZW5lcikuYXBwbHkoTCxULmFyZ3MpfWlmKHkuYmluZGluZ3M9W10seS5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10seS5vblVwZGF0ZUVsZUNhbGNzRm5zPVtdLHkucmVtb3ZlT2JzZXJ2ZXImJnkucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHkuc3R5bGVPYnNlcnZlciYmeS5zdHlsZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx5LnJlc2l6ZU9ic2VydmVyJiZ5LnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx5LmxhYmVsQ2FsY0Rpdil0cnl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh5LmxhYmVsQ2FsY0Rpdil9Y2F0Y2h7fX0sSTMuaXNIZWFkbGVzcz1mdW5jdGlvbigpe3JldHVybiExfSxbSkwsV2ssZVIsZ3gsYncsWWtdLmZvckVhY2goZnVuY3Rpb24oeSl7ZGUoSTMseSl9KTt2YXIgck09MWUzLzYwLHlDPXtzZXR1cERlcXVldWVpbmc6ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcyxMPXRoaXMucmVuZGVyZXI7aWYoIVQuZGVxdWV1ZWluZ1NldHVwKXtULmRlcXVldWVpbmdTZXR1cD0hMDt2YXIgTz1ZYyhmdW5jdGlvbigpe0wucmVkcmF3SGludCgiZWxlcyIsITApLEwucmVkcmF3SGludCgiZHJhZyIsITApLEwucmVkcmF3KCl9LGcuZGVxUmVkcmF3VGhyZXNob2xkKSxQPWZ1bmN0aW9uKFMsVil7dmFyIFk9eWcoKSxydD1MLmF2ZXJhZ2VSZWRyYXdUaW1lLG90PUwubGFzdFJlZHJhd1RpbWUsaHQ9W10sZHQ9TC5jeS5leHRlbnQoKSxMdD1MLmdldFBpeGVsUmF0aW8oKTtmb3IoU3x8TC5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZSgpOzspe3ZhciBrdD15ZygpLER0PWt0LVksUHQ9a3QtVjtpZihvdDxyTSl7dmFyICR0PXJNLShTP3J0OjApO2lmKFB0Pj1nLmRlcUZhc3RDb3N0KiR0KWJyZWFrfWVsc2UgaWYoUyl7aWYoRHQ+PWcuZGVxQ29zdCpvdHx8RHQ+PWcuZGVxQXZnQ29zdCpydClicmVha31lbHNlIGlmKFB0Pj1nLmRlcU5vRHJhd0Nvc3Qqck0pYnJlYWs7dmFyIFp0PWcuZGVxKFQsTHQsZHQpO2lmKFp0Lmxlbmd0aD4wKWZvcih2YXIgWXQ9MDtZdDxadC5sZW5ndGg7WXQrKylodC5wdXNoKFp0W1l0XSk7ZWxzZSBicmVha31odC5sZW5ndGg+MCYmKGcub25EZXFkKFQsaHQpLCFTJiZnLnNob3VsZFJlZHJhdyhULGh0LEx0LGR0KSYmTygpKX0sJD1nLnByaW9yaXR5fHxFTDtMLmJlZm9yZVJlbmRlcihQLCQoVCkpfX19fSxkdHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KGcpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp3bTtwKHRoaXMseSksdGhpcy5pZHNCeUtleT1uZXcgR2IsdGhpcy5rZXlGb3JJZD1uZXcgR2IsdGhpcy5jYWNoZXNCeUx2bD1uZXcgR2IsdGhpcy5sdmxzPVtdLHRoaXMuZ2V0S2V5PWcsdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleT14fXJldHVybiBtKHksW3trZXk6ImdldElkc0ZvciIsdmFsdWU6ZnVuY3Rpb24oeCl7eD09bnVsbCYmdmwoIkNhbiBub3QgZ2V0IGlkIGxpc3QgZm9yIG51bGwga2V5Iik7dmFyIFQ9dGhpcy5pZHNCeUtleSxMPXRoaXMuaWRzQnlLZXkuZ2V0KHgpO3JldHVybiBMfHwoTD1uZXcgWTUsVC5zZXQoeCxMKSksTH19LHtrZXk6ImFkZElkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ghPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHgpLmFkZChUKX19LHtrZXk6ImRlbGV0ZUlkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ghPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHgpLmRlbGV0ZShUKX19LHtrZXk6ImdldE51bWJlck9mSWRzRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbih4KXtyZXR1cm4geD09bnVsbD8wOnRoaXMuZ2V0SWRzRm9yKHgpLnNpemV9fSx7a2V5OiJ1cGRhdGVLZXlNYXBwaW5nRm9yIix2YWx1ZTpmdW5jdGlvbih4KXt2YXIgVD14LmlkKCksTD10aGlzLmtleUZvcklkLmdldChUKSxPPXRoaXMuZ2V0S2V5KHgpO3RoaXMuZGVsZXRlSWRGb3JLZXkoTCxUKSx0aGlzLmFkZElkRm9yS2V5KE8sVCksdGhpcy5rZXlGb3JJZC5zZXQoVCxPKX19LHtrZXk6ImRlbGV0ZUtleU1hcHBpbmdGb3IiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXguaWQoKSxMPXRoaXMua2V5Rm9ySWQuZ2V0KFQpO3RoaXMuZGVsZXRlSWRGb3JLZXkoTCxUKSx0aGlzLmtleUZvcklkLmRlbGV0ZShUKX19LHtrZXk6ImtleUhhc0NoYW5nZWRGb3IiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXguaWQoKSxMPXRoaXMua2V5Rm9ySWQuZ2V0KFQpLE89dGhpcy5nZXRLZXkoeCk7cmV0dXJuIEwhPT1PfX0se2tleToiaXNJbnZhbGlkIix2YWx1ZTpmdW5jdGlvbih4KXtyZXR1cm4gdGhpcy5rZXlIYXNDaGFuZ2VkRm9yKHgpfHx0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KHgpfX0se2tleToiZ2V0Q2FjaGVzQXQiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXRoaXMuY2FjaGVzQnlMdmwsTD10aGlzLmx2bHMsTz1ULmdldCh4KTtyZXR1cm4gT3x8KE89bmV3IEdiLFQuc2V0KHgsTyksTC5wdXNoKHgpKSxPfX0se2tleToiZ2V0Q2FjaGUiLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoVCkuZ2V0KHgpfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBMPXRoaXMuZ2V0S2V5KHgpLE89dGhpcy5nZXRDYWNoZShMLFQpO3JldHVybiBPIT1udWxsJiZ0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3IoeCksT319LHtrZXk6ImdldEZvckNhY2hlZEtleSIsdmFsdWU6ZnVuY3Rpb24oeCxUKXt2YXIgTD10aGlzLmtleUZvcklkLmdldCh4LmlkKCkpLE89dGhpcy5nZXRDYWNoZShMLFQpO3JldHVybiBPfX0se2tleToiaGFzQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uKHgsVCl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoVCkuaGFzKHgpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBMPXRoaXMuZ2V0S2V5KHgpO3JldHVybiB0aGlzLmhhc0NhY2hlKEwsVCl9fSx7a2V5OiJzZXRDYWNoZSIsdmFsdWU6ZnVuY3Rpb24oeCxULEwpe0wua2V5PXgsdGhpcy5nZXRDYWNoZXNBdChUKS5zZXQoeCxMKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oeCxULEwpe3ZhciBPPXRoaXMuZ2V0S2V5KHgpO3RoaXMuc2V0Q2FjaGUoTyxULEwpLHRoaXMudXBkYXRlS2V5TWFwcGluZ0Zvcih4KX19LHtrZXk6ImRlbGV0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbih4LFQpe3RoaXMuZ2V0Q2FjaGVzQXQoVCkuZGVsZXRlKHgpfX0se2tleToiZGVsZXRlIix2YWx1ZTpmdW5jdGlvbih4LFQpe3ZhciBMPXRoaXMuZ2V0S2V5KHgpO3RoaXMuZGVsZXRlQ2FjaGUoTCxUKX19LHtrZXk6ImludmFsaWRhdGVLZXkiLHZhbHVlOmZ1bmN0aW9uKHgpe3ZhciBUPXRoaXM7dGhpcy5sdmxzLmZvckVhY2goZnVuY3Rpb24oTCl7cmV0dXJuIFQuZGVsZXRlQ2FjaGUoeCxMKX0pfX0se2tleToiaW52YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oeCl7dmFyIFQ9eC5pZCgpLEw9dGhpcy5rZXlGb3JJZC5nZXQoVCk7dGhpcy5kZWxldGVLZXlNYXBwaW5nRm9yKHgpO3ZhciBPPXRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkoeCk7cmV0dXJuIE8mJnRoaXMuaW52YWxpZGF0ZUtleShMKSxPfHx0aGlzLmdldE51bWJlck9mSWRzRm9yS2V5KEwpPT09MH19XSkseX0oKSx4Qz0yNSxrQz01MCxweD0tNCxpTT0zLHNNPTcuOTksZ3R0PTgscHR0PTEwMjQsYnR0PTEwMjQsclI9MTAyNCx3dHQ9LjIsdnR0PS44LG10dD0xMCx5dHQ9LjE1LHh0dD0uMSxrdHQ9LjksRXR0PS45LFR0dD0xMDAsQ3R0PTEsYng9e2RlcXVldWU6ImRlcXVldWUiLGRvd25zY2FsZToiZG93bnNjYWxlIixoaWdoUXVhbGl0eToiaGlnaFF1YWxpdHkifSxfdHQ9UmYoe2dldEtleTpudWxsLGRvZXNFbGVJbnZhbGlkYXRlS2V5OndtLGRyYXdFbGVtZW50Om51bGwsZ2V0Qm91bmRpbmdCb3g6bnVsbCxnZXRSb3RhdGlvblBvaW50Om51bGwsZ2V0Um90YXRpb25PZmZzZXQ6bnVsbCxpc1Zpc2libGU6VDMsYWxsb3dFZGdlVHhyQ2FjaGluZzohMCxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITB9KSxLaz1mdW5jdGlvbihnLHgpe3ZhciBUPXRoaXM7VC5yZW5kZXJlcj1nLFQub25EZXF1ZXVlcz1bXTt2YXIgTD1fdHQoeCk7ZGUoVCxMKSxULmxvb2t1cD1uZXcgZHR0KEwuZ2V0S2V5LEwuZG9lc0VsZUludmFsaWRhdGVLZXkpLFQuc2V0dXBEZXF1ZXVlaW5nKCl9LFRoPUtrLnByb3RvdHlwZTtUaC5yZWFzb25zPWJ4LFRoLmdldFRleHR1cmVRdWV1ZT1mdW5jdGlvbih5KXt2YXIgZz10aGlzO3JldHVybiBnLmVsZUltZ0NhY2hlcz1nLmVsZUltZ0NhY2hlc3x8e30sZy5lbGVJbWdDYWNoZXNbeV09Zy5lbGVJbWdDYWNoZXNbeV18fFtdfSxUaC5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD1nLmVsZUltZ0NhY2hlcy5yZXRpcmVkPWcuZWxlSW1nQ2FjaGVzLnJldGlyZWR8fHt9LFQ9eFt5XT14W3ldfHxbXTtyZXR1cm4gVH0sVGguZ2V0RWxlbWVudFF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuZWxlQ2FjaGVRdWV1ZT15LmVsZUNhY2hlUXVldWV8fG5ldyBDayhmdW5jdGlvbih4LFQpe3JldHVybiBULnJlcXMteC5yZXFzfSk7cmV0dXJuIGd9LFRoLmdldEVsZW1lbnRLZXlUb1F1ZXVlPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcyxnPXkuZWxlS2V5VG9DYWNoZVF1ZXVlPXkuZWxlS2V5VG9DYWNoZVF1ZXVlfHx7fTtyZXR1cm4gZ30sVGguZ2V0RWxlbWVudD1mdW5jdGlvbih5LGcseCxULEwpe3ZhciBPPXRoaXMsUD10aGlzLnJlbmRlcmVyLCQ9UC5jeS56b29tKCkscT10aGlzLmxvb2t1cDtpZighZ3x8Zy53PT09MHx8Zy5oPT09MHx8aXNOYU4oZy53KXx8aXNOYU4oZy5oKXx8IXkudmlzaWJsZSgpfHx5LnJlbW92ZWQoKXx8IU8uYWxsb3dFZGdlVHhyQ2FjaGluZyYmeS5pc0VkZ2UoKXx8IU8uYWxsb3dQYXJlbnRUeHJDYWNoaW5nJiZ5LmlzUGFyZW50KCkpcmV0dXJuIG51bGw7aWYoVD09bnVsbCYmKFQ9TWF0aC5jZWlsKF9MKCQqeCkpKSxUPHB4KVQ9cHg7ZWxzZSBpZigkPj1zTXx8VD5pTSlyZXR1cm4gbnVsbDt2YXIgUz1NYXRoLnBvdygyLFQpLFY9Zy5oKlMsWT1nLncqUyxydD1QLmVsZVRleHRCaWdnZXJUaGFuTWluKHksUyk7aWYoIXRoaXMuaXNWaXNpYmxlKHkscnQpKXJldHVybiBudWxsO3ZhciBvdD1xLmdldCh5LFQpO2lmKG90JiZvdC5pbnZhbGlkYXRlZCYmKG90LmludmFsaWRhdGVkPSExLG90LnRleHR1cmUuaW52YWxpZGF0ZWRXaWR0aC09b3Qud2lkdGgpLG90KXJldHVybiBvdDt2YXIgaHQ7aWYoVjw9eEM/aHQ9eEM6Vjw9a0M/aHQ9a0M6aHQ9TWF0aC5jZWlsKFYva0MpKmtDLFY+clJ8fFk+YnR0KXJldHVybiBudWxsO3ZhciBkdD1PLmdldFRleHR1cmVRdWV1ZShodCksTHQ9ZHRbZHQubGVuZ3RoLTJdLGt0PWZ1bmN0aW9uKCl7cmV0dXJuIE8ucmVjeWNsZVRleHR1cmUoaHQsWSl8fE8uYWRkVGV4dHVyZShodCxZKX07THR8fChMdD1kdFtkdC5sZW5ndGgtMV0pLEx0fHwoTHQ9a3QoKSksTHQud2lkdGgtTHQudXNlZFdpZHRoPFkmJihMdD1rdCgpKTtmb3IodmFyIER0PWZ1bmN0aW9uKHplKXtyZXR1cm4gemUmJnplLnNjYWxlZExhYmVsU2hvd249PT1ydH0sUHQ9TCYmTD09PWJ4LmRlcXVldWUsJHQ9TCYmTD09PWJ4LmhpZ2hRdWFsaXR5LFp0PUwmJkw9PT1ieC5kb3duc2NhbGUsWXQscXQ9VCsxO3F0PD1pTTtxdCsrKXt2YXIgbmU9cS5nZXQoeSxxdCk7aWYobmUpe1l0PW5lO2JyZWFrfX12YXIgR3Q9WXQmJll0LmxldmVsPT09VCsxP1l0Om51bGwsZ2U9ZnVuY3Rpb24oKXtMdC5jb250ZXh0LmRyYXdJbWFnZShHdC50ZXh0dXJlLmNhbnZhcyxHdC54LDAsR3Qud2lkdGgsR3QuaGVpZ2h0LEx0LnVzZWRXaWR0aCwwLFksVil9O2lmKEx0LmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxMdC5jb250ZXh0LmNsZWFyUmVjdChMdC51c2VkV2lkdGgsMCxZLGh0KSxEdChHdCkpZ2UoKTtlbHNlIGlmKER0KFl0KSlpZigkdCl7Zm9yKHZhciBiZT1ZdC5sZXZlbDtiZT5UO2JlLS0pR3Q9Ty5nZXRFbGVtZW50KHksZyx4LGJlLGJ4LmRvd25zY2FsZSk7Z2UoKX1lbHNlIHJldHVybiBPLnF1ZXVlRWxlbWVudCh5LFl0LmxldmVsLTEpLFl0O2Vsc2V7dmFyIGllO2lmKCFQdCYmISR0JiYhWnQpZm9yKHZhciBGZT1ULTE7RmU+PXB4O0ZlLS0pe3ZhciB3ZT1xLmdldCh5LEZlKTtpZih3ZSl7aWU9d2U7YnJlYWt9fWlmKER0KGllKSlyZXR1cm4gTy5xdWV1ZUVsZW1lbnQoeSxUKSxpZTtMdC5jb250ZXh0LnRyYW5zbGF0ZShMdC51c2VkV2lkdGgsMCksTHQuY29udGV4dC5zY2FsZShTLFMpLHRoaXMuZHJhd0VsZW1lbnQoTHQuY29udGV4dCx5LGcscnQsITEpLEx0LmNvbnRleHQuc2NhbGUoMS9TLDEvUyksTHQuY29udGV4dC50cmFuc2xhdGUoLUx0LnVzZWRXaWR0aCwwKX1yZXR1cm4gb3Q9e3g6THQudXNlZFdpZHRoLHRleHR1cmU6THQsbGV2ZWw6VCxzY2FsZTpTLHdpZHRoOlksaGVpZ2h0OlYsc2NhbGVkTGFiZWxTaG93bjpydH0sTHQudXNlZFdpZHRoKz1NYXRoLmNlaWwoWStndHQpLEx0LmVsZUNhY2hlcy5wdXNoKG90KSxxLnNldCh5LFQsb3QpLE8uY2hlY2tUZXh0dXJlRnVsbG5lc3MoTHQpLG90fSxUaC5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPTA7Zzx5Lmxlbmd0aDtnKyspdGhpcy5pbnZhbGlkYXRlRWxlbWVudCh5W2ddKX0sVGguaW52YWxpZGF0ZUVsZW1lbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcubG9va3VwLFQ9W10sTD14LmlzSW52YWxpZCh5KTtpZihMKXtmb3IodmFyIE89cHg7Tzw9aU07TysrKXt2YXIgUD14LmdldEZvckNhY2hlZEtleSh5LE8pO1AmJlQucHVzaChQKX12YXIgJD14LmludmFsaWRhdGUoeSk7aWYoJClmb3IodmFyIHE9MDtxPFQubGVuZ3RoO3ErKyl7dmFyIFM9VFtxXSxWPVMudGV4dHVyZTtWLmludmFsaWRhdGVkV2lkdGgrPVMud2lkdGgsUy5pbnZhbGlkYXRlZD0hMCxnLmNoZWNrVGV4dHVyZVV0aWxpdHkoVil9Zy5yZW1vdmVGcm9tUXVldWUoeSl9fSxUaC5jaGVja1RleHR1cmVVdGlsaXR5PWZ1bmN0aW9uKHkpe3kuaW52YWxpZGF0ZWRXaWR0aD49d3R0Knkud2lkdGgmJnRoaXMucmV0aXJlVGV4dHVyZSh5KX0sVGguY2hlY2tUZXh0dXJlRnVsbG5lc3M9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcuZ2V0VGV4dHVyZVF1ZXVlKHkuaGVpZ2h0KTt5LnVzZWRXaWR0aC95LndpZHRoPnZ0dCYmeS5mdWxsbmVzc0NoZWNrcz49bXR0P3ZtKHgseSk6eS5mdWxsbmVzc0NoZWNrcysrfSxUaC5yZXRpcmVUZXh0dXJlPWZ1bmN0aW9uKHkpe3ZhciBnPXRoaXMseD15LmhlaWdodCxUPWcuZ2V0VGV4dHVyZVF1ZXVlKHgpLEw9dGhpcy5sb29rdXA7dm0oVCx5KSx5LnJldGlyZWQ9ITA7Zm9yKHZhciBPPXkuZWxlQ2FjaGVzLFA9MDtQPE8ubGVuZ3RoO1ArKyl7dmFyICQ9T1tQXTtMLmRlbGV0ZUNhY2hlKCQua2V5LCQubGV2ZWwpfVRMKE8pO3ZhciBxPWcuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh4KTtxLnB1c2goeSl9LFRoLmFkZFRleHR1cmU9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5nZXRUZXh0dXJlUXVldWUoeSksTD17fTtyZXR1cm4gVC5wdXNoKEwpLEwuZWxlQ2FjaGVzPVtdLEwuaGVpZ2h0PXksTC53aWR0aD1NYXRoLm1heChwdHQsZyksTC51c2VkV2lkdGg9MCxMLmludmFsaWRhdGVkV2lkdGg9MCxMLmZ1bGxuZXNzQ2hlY2tzPTAsTC5jYW52YXM9eC5yZW5kZXJlci5tYWtlT2Zmc2NyZWVuQ2FudmFzKEwud2lkdGgsTC5oZWlnaHQpLEwuY29udGV4dD1MLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLEx9LFRoLnJlY3ljbGVUZXh0dXJlPWZ1bmN0aW9uKHksZyl7Zm9yKHZhciB4PXRoaXMsVD14LmdldFRleHR1cmVRdWV1ZSh5KSxMPXguZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh5KSxPPTA7TzxMLmxlbmd0aDtPKyspe3ZhciBQPUxbT107aWYoUC53aWR0aD49ZylyZXR1cm4gUC5yZXRpcmVkPSExLFAudXNlZFdpZHRoPTAsUC5pbnZhbGlkYXRlZFdpZHRoPTAsUC5mdWxsbmVzc0NoZWNrcz0wLFRMKFAuZWxlQ2FjaGVzKSxQLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxQLmNvbnRleHQuY2xlYXJSZWN0KDAsMCxQLndpZHRoLFAuaGVpZ2h0KSx2bShMLFApLFQucHVzaChQKSxQfX0sVGgucXVldWVFbGVtZW50PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcyxUPXguZ2V0RWxlbWVudFF1ZXVlKCksTD14LmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksTz10aGlzLmdldEtleSh5KSxQPUxbT107aWYoUClQLmxldmVsPU1hdGgubWF4KFAubGV2ZWwsZyksUC5lbGVzLm1lcmdlKHkpLFAucmVxcysrLFQudXBkYXRlSXRlbShQKTtlbHNle3ZhciAkPXtlbGVzOnkuc3Bhd24oKS5tZXJnZSh5KSxsZXZlbDpnLHJlcXM6MSxrZXk6T307VC5wdXNoKCQpLExbT109JH19LFRoLmRlcXVldWU9ZnVuY3Rpb24oeSl7Zm9yKHZhciBnPXRoaXMseD1nLmdldEVsZW1lbnRRdWV1ZSgpLFQ9Zy5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLEw9W10sTz1nLmxvb2t1cCxQPTA7UDxDdHQmJnguc2l6ZSgpPjA7UCsrKXt2YXIgJD14LnBvcCgpLHE9JC5rZXksUz0kLmVsZXNbMF0sVj1PLmhhc0NhY2hlKFMsJC5sZXZlbCk7aWYoVFtxXT1udWxsLFYpY29udGludWU7TC5wdXNoKCQpO3ZhciBZPWcuZ2V0Qm91bmRpbmdCb3goUyk7Zy5nZXRFbGVtZW50KFMsWSx5LCQubGV2ZWwsYnguZGVxdWV1ZSl9cmV0dXJuIEx9LFRoLnJlbW92ZUZyb21RdWV1ZT1mdW5jdGlvbih5KXt2YXIgZz10aGlzLHg9Zy5nZXRFbGVtZW50UXVldWUoKSxUPWcuZ2V0RWxlbWVudEtleVRvUXVldWUoKSxMPXRoaXMuZ2V0S2V5KHkpLE89VFtMXTtPIT1udWxsJiYoTy5lbGVzLmxlbmd0aD09PTE/KE8ucmVxcz1XNSx4LnVwZGF0ZUl0ZW0oTykseC5wb3AoKSxUW0xdPW51bGwpOk8uZWxlcy51bm1lcmdlKHkpKX0sVGgub25EZXF1ZXVlPWZ1bmN0aW9uKHkpe3RoaXMub25EZXF1ZXVlcy5wdXNoKHkpfSxUaC5vZmZEZXF1ZXVlPWZ1bmN0aW9uKHkpe3ZtKHRoaXMub25EZXF1ZXVlcyx5KX0sVGguc2V0dXBEZXF1ZXVlaW5nPXlDLnNldHVwRGVxdWV1ZWluZyh7ZGVxUmVkcmF3VGhyZXNob2xkOlR0dCxkZXFDb3N0Onl0dCxkZXFBdmdDb3N0Onh0dCxkZXFOb0RyYXdDb3N0Omt0dCxkZXFGYXN0Q29zdDpFdHQsZGVxOmZ1bmN0aW9uKGcseCxUKXtyZXR1cm4gZy5kZXF1ZXVlKHgsVCl9LG9uRGVxZDpmdW5jdGlvbihnLHgpe2Zvcih2YXIgVD0wO1Q8Zy5vbkRlcXVldWVzLmxlbmd0aDtUKyspe3ZhciBMPWcub25EZXF1ZXVlc1tUXTtMKHgpfX0sc2hvdWxkUmVkcmF3OmZ1bmN0aW9uKGcseCxULEwpe2Zvcih2YXIgTz0wO088eC5sZW5ndGg7TysrKWZvcih2YXIgUD14W09dLmVsZXMsJD0wOyQ8UC5sZW5ndGg7JCsrKXt2YXIgcT1QWyRdLmJvdW5kaW5nQm94KCk7aWYoQUwocSxMKSlyZXR1cm4hMH1yZXR1cm4hMX0scHJpb3JpdHk6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVUeHJEZXF9fSk7dmFyIFN0dD0xLHd4PS00LFhrPTIsRUM9My45OSxRaz01MCxFZz01MCxBdHQ9LjE1LGNwdD0uMSx1cHQ9LjksbHB0PS45LGhwdD0xLGFNPTI1MCxmcHQ9NGUzKjRlMyxkcHQ9ITAsTHR0PWZ1bmN0aW9uKGcpe3ZhciB4PXRoaXMsVD14LnJlbmRlcmVyPWcsTD1ULmN5O3gubGF5ZXJzQnlMZXZlbD17fSx4LmZpcnN0R2V0PSEwLHgubGFzdEludmFsaWRhdGlvblRpbWU9eWcoKS0yKmFNLHguc2tpcHBpbmc9ITEseC5lbGVUeHJEZXFzPUwuY29sbGVjdGlvbigpLHguc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudD1ZYyhmdW5jdGlvbigpe3gucmVmaW5lRWxlbWVudFRleHR1cmVzKHguZWxlVHhyRGVxcykseC5lbGVUeHJEZXFzLnVubWVyZ2UoeC5lbGVUeHJEZXFzKX0sRWcpLFQuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKFAsJCl7JC14Lmxhc3RJbnZhbGlkYXRpb25UaW1lPD1hTT94LnNraXBwaW5nPSEwOnguc2tpcHBpbmc9ITF9LFQuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJTa2lwKTt2YXIgTz1mdW5jdGlvbigkLHEpe3JldHVybiBxLnJlcXMtJC5yZXFzfTt4LmxheWVyc1F1ZXVlPW5ldyBDayhPKSx4LnNldHVwRGVxdWV1ZWluZygpfSx3MT1MdHQucHJvdG90eXBlLE10dD0wLGdwdD1NYXRoLnBvdygyLDUzKS0xO3cxLm1ha2VMYXllcj1mdW5jdGlvbih5LGcpe3ZhciB4PU1hdGgucG93KDIsZyksVD1NYXRoLmNlaWwoeS53KngpLEw9TWF0aC5jZWlsKHkuaCp4KSxPPXRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhULEwpLFA9e2lkOk10dD0rK010dCVncHQsYmI6eSxsZXZlbDpnLHdpZHRoOlQsaGVpZ2h0OkwsY2FudmFzOk8sY29udGV4dDpPLmdldENvbnRleHQoIjJkIiksZWxlczpbXSxlbGVzUXVldWU6W10scmVxczowfSwkPVAuY29udGV4dCxxPS1QLmJiLngxLFM9LVAuYmIueTE7cmV0dXJuICQuc2NhbGUoeCx4KSwkLnRyYW5zbGF0ZShxLFMpLFB9LHcxLmdldExheWVycz1mdW5jdGlvbih5LGcseCl7dmFyIFQ9dGhpcyxMPVQucmVuZGVyZXIsTz1MLmN5LFA9Ty56b29tKCksJD1ULmZpcnN0R2V0O2lmKFQuZmlyc3RHZXQ9ITEseD09bnVsbCl7aWYoeD1NYXRoLmNlaWwoX0woUCpnKSkseDx3eCl4PXd4O2Vsc2UgaWYoUD49RUN8fHg+WGspcmV0dXJuIG51bGx9VC52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyh4LHkpO3ZhciBxPVQubGF5ZXJzQnlMZXZlbCxTPU1hdGgucG93KDIseCksVj1xW3hdPXFbeF18fFtdLFkscnQ9VC5sZXZlbElzQ29tcGxldGUoeCx5KSxvdCxodD1mdW5jdGlvbigpe3ZhciBnZT1mdW5jdGlvbihibil7aWYoVC52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyhibix5KSxULmxldmVsSXNDb21wbGV0ZShibix5KSlyZXR1cm4gb3Q9cVtibl0sITB9LGJlPWZ1bmN0aW9uKGJuKXtpZighb3QpZm9yKHZhciB6ZT14K2JuO3d4PD16ZSYmemU8PVhrJiYhZ2UoemUpO3plKz1ibik7fTtiZSgxKSxiZSgtMSk7Zm9yKHZhciBpZT1WLmxlbmd0aC0xO2llPj0wO2llLS0pe3ZhciBGZT1WW2llXTtGZS5pbnZhbGlkJiZ2bShWLEZlKX19O2lmKCFydClodCgpO2Vsc2UgcmV0dXJuIFY7dmFyIGR0PWZ1bmN0aW9uKCl7aWYoIVkpe1k9emQoKTtmb3IodmFyIGdlPTA7Z2U8eS5sZW5ndGg7Z2UrKylCSyhZLHlbZ2VdLmJvdW5kaW5nQm94KCkpfXJldHVybiBZfSxMdD1mdW5jdGlvbihnZSl7Z2U9Z2V8fHt9O3ZhciBiZT1nZS5hZnRlcjtkdCgpO3ZhciBpZT1ZLncqUyooWS5oKlMpO2lmKGllPmZwdClyZXR1cm4gbnVsbDt2YXIgRmU9VC5tYWtlTGF5ZXIoWSx4KTtpZihiZSE9bnVsbCl7dmFyIHdlPVYuaW5kZXhPZihiZSkrMTtWLnNwbGljZSh3ZSwwLEZlKX1lbHNlKGdlLmluc2VydD09PXZvaWQgMHx8Z2UuaW5zZXJ0KSYmVi51bnNoaWZ0KEZlKTtyZXR1cm4gRmV9O2lmKFQuc2tpcHBpbmcmJiEkKXJldHVybiBudWxsO2Zvcih2YXIga3Q9bnVsbCxEdD15Lmxlbmd0aC9TdHQsUHQ9ISQsJHQ9MDskdDx5Lmxlbmd0aDskdCsrKXt2YXIgWnQ9eVskdF0sWXQ9WnQuX3ByaXZhdGUucnNjcmF0Y2gscXQ9WXQuaW1nTGF5ZXJDYWNoZXM9WXQuaW1nTGF5ZXJDYWNoZXN8fHt9LG5lPXF0W3hdO2lmKG5lKXtrdD1uZTtjb250aW51ZX1pZigoIWt0fHxrdC5lbGVzLmxlbmd0aD49RHR8fCFoTihrdC5iYixadC5ib3VuZGluZ0JveCgpKSkmJihrdD1MdCh7aW5zZXJ0OiEwLGFmdGVyOmt0fSksIWt0KSlyZXR1cm4gbnVsbDtvdHx8UHQ/VC5xdWV1ZUxheWVyKGt0LFp0KTpULmRyYXdFbGVJbkxheWVyKGt0LFp0LHgsZyksa3QuZWxlcy5wdXNoKFp0KSxxdFt4XT1rdH1yZXR1cm4gb3R8fChQdD9udWxsOlYpfSx3MS5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWw9ZnVuY3Rpb24oeSxnKXtyZXR1cm4geX0sdzEuZHJhd0VsZUluTGF5ZXI9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9dGhpcyxPPXRoaXMucmVuZGVyZXIsUD15LmNvbnRleHQsJD1nLmJvdW5kaW5nQm94KCk7JC53PT09MHx8JC5oPT09MHx8IWcudmlzaWJsZSgpfHwoeD1MLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbCh4LFQpLE8uc2V0SW1nU21vb3RoaW5nKFAsITEpLE8uZHJhd0NhY2hlZEVsZW1lbnQoUCxnLG51bGwsbnVsbCx4LGRwdCksTy5zZXRJbWdTbW9vdGhpbmcoUCwhMCkpfSx3MS5sZXZlbElzQ29tcGxldGU9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzLFQ9eC5sYXllcnNCeUxldmVsW3ldO2lmKCFUfHxULmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBMPTAsTz0wO088VC5sZW5ndGg7TysrKXt2YXIgUD1UW09dO2lmKFAucmVxcz4wfHxQLmludmFsaWQpcmV0dXJuITE7TCs9UC5lbGVzLmxlbmd0aH1yZXR1cm4gTD09PWcubGVuZ3RofSx3MS52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZz1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMubGF5ZXJzQnlMZXZlbFt5XTtpZih4KWZvcih2YXIgVD0wO1Q8eC5sZW5ndGg7VCsrKXtmb3IodmFyIEw9eFtUXSxPPS0xLFA9MDtQPGcubGVuZ3RoO1ArKylpZihMLmVsZXNbMF09PT1nW1BdKXtPPVA7YnJlYWt9aWYoTzwwKXt0aGlzLmludmFsaWRhdGVMYXllcihMKTtjb250aW51ZX1mb3IodmFyICQ9TyxQPTA7UDxMLmVsZXMubGVuZ3RoO1ArKylpZihMLmVsZXNbUF0hPT1nWyQrUF0pe3RoaXMuaW52YWxpZGF0ZUxheWVyKEwpO2JyZWFrfX19LHcxLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnM9ZnVuY3Rpb24oeSxnKXtmb3IodmFyIHg9dGhpcyxUPW50KHlbMF0pLEw9MDtMPHkubGVuZ3RoO0wrKylmb3IodmFyIE89VD9udWxsOnlbTF0sUD1UP3lbTF06eVtMXS5lbGUsJD1QLl9wcml2YXRlLnJzY3JhdGNoLHE9JC5pbWdMYXllckNhY2hlcz0kLmltZ0xheWVyQ2FjaGVzfHx7fSxTPXd4O1M8PVhrO1MrKyl7dmFyIFY9cVtTXTtWJiYoTyYmeC5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWwoVi5sZXZlbCkhPT1PLmxldmVsfHxnKFYsUCxPKSl9fSx3MS5oYXZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PXRoaXMsZz0hMSx4PXd4O3g8PVhrO3grKyl7dmFyIFQ9eS5sYXllcnNCeUxldmVsW3hdO2lmKFQmJlQubGVuZ3RoPjApe2c9ITA7YnJlYWt9fXJldHVybiBnfSx3MS5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpczt5Lmxlbmd0aCE9PTAmJihnLmxhc3RJbnZhbGlkYXRpb25UaW1lPXlnKCksISh5Lmxlbmd0aD09PTB8fCFnLmhhdmVMYXllcnMoKSkmJmcudXBkYXRlRWxlbWVudHNJbkxheWVycyh5LGZ1bmN0aW9uKFQsTCxPKXtnLmludmFsaWRhdGVMYXllcihUKX0pKX0sdzEuaW52YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKHkpe2lmKHRoaXMubGFzdEludmFsaWRhdGlvblRpbWU9eWcoKSwheS5pbnZhbGlkKXt2YXIgZz15LmxldmVsLHg9eS5lbGVzLFQ9dGhpcy5sYXllcnNCeUxldmVsW2ddO3ZtKFQseSkseS5lbGVzUXVldWU9W10seS5pbnZhbGlkPSEwLHkucmVwbGFjZW1lbnQmJih5LnJlcGxhY2VtZW50LmludmFsaWQ9ITApO2Zvcih2YXIgTD0wO0w8eC5sZW5ndGg7TCsrKXt2YXIgTz14W0xdLl9wcml2YXRlLnJzY3JhdGNoLmltZ0xheWVyQ2FjaGVzO08mJihPW2ddPW51bGwpfX19LHcxLnJlZmluZUVsZW1lbnRUZXh0dXJlcz1mdW5jdGlvbih5KXt2YXIgZz10aGlzO2cudXBkYXRlRWxlbWVudHNJbkxheWVycyh5LGZ1bmN0aW9uKFQsTCxPKXt2YXIgUD1ULnJlcGxhY2VtZW50O2lmKFB8fChQPVQucmVwbGFjZW1lbnQ9Zy5tYWtlTGF5ZXIoVC5iYixULmxldmVsKSxQLnJlcGxhY2VzPVQsUC5lbGVzPVQuZWxlcyksIVAucmVxcylmb3IodmFyICQ9MDskPFAuZWxlcy5sZW5ndGg7JCsrKWcucXVldWVMYXllcihQLFAuZWxlc1skXSl9KX0sdzEuZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50PWZ1bmN0aW9uKHkpe3RoaXMuZWxlVHhyRGVxcy5tZXJnZSh5KSx0aGlzLnNjaGVkdWxlRWxlbWVudFJlZmluZW1lbnQoKX0sdzEucXVldWVMYXllcj1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMsVD14LmxheWVyc1F1ZXVlLEw9eS5lbGVzUXVldWUsTz1MLmhhc0lkPUwuaGFzSWR8fHt9O2lmKCF5LnJlcGxhY2VtZW50KXtpZihnKXtpZihPW2cuaWQoKV0pcmV0dXJuO0wucHVzaChnKSxPW2cuaWQoKV09ITB9eS5yZXFzPyh5LnJlcXMrKyxULnVwZGF0ZUl0ZW0oeSkpOih5LnJlcXM9MSxULnB1c2goeSkpfX0sdzEuZGVxdWV1ZT1mdW5jdGlvbih5KXtmb3IodmFyIGc9dGhpcyx4PWcubGF5ZXJzUXVldWUsVD1bXSxMPTA7TDxocHQmJnguc2l6ZSgpIT09MDspe3ZhciBPPXgucGVlaygpO2lmKE8ucmVwbGFjZW1lbnQpe3gucG9wKCk7Y29udGludWV9aWYoTy5yZXBsYWNlcyYmTyE9PU8ucmVwbGFjZXMucmVwbGFjZW1lbnQpe3gucG9wKCk7Y29udGludWV9aWYoTy5pbnZhbGlkKXt4LnBvcCgpO2NvbnRpbnVlfXZhciBQPU8uZWxlc1F1ZXVlLnNoaWZ0KCk7UCYmKGcuZHJhd0VsZUluTGF5ZXIoTyxQLE8ubGV2ZWwseSksTCsrKSxULmxlbmd0aD09PTAmJlQucHVzaCghMCksTy5lbGVzUXVldWUubGVuZ3RoPT09MCYmKHgucG9wKCksTy5yZXFzPTAsTy5yZXBsYWNlcyYmZy5hcHBseUxheWVyUmVwbGFjZW1lbnQoTyksZy5yZXF1ZXN0UmVkcmF3KCkpfXJldHVybiBUfSx3MS5hcHBseUxheWVyUmVwbGFjZW1lbnQ9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcubGF5ZXJzQnlMZXZlbFt5LmxldmVsXSxUPXkucmVwbGFjZXMsTD14LmluZGV4T2YoVCk7aWYoIShMPDB8fFQuaW52YWxpZCkpe3hbTF09eTtmb3IodmFyIE89MDtPPHkuZWxlcy5sZW5ndGg7TysrKXt2YXIgUD15LmVsZXNbT10uX3ByaXZhdGUsJD1QLmltZ0xheWVyQ2FjaGVzPVAuaW1nTGF5ZXJDYWNoZXN8fHt9OyQmJigkW3kubGV2ZWxdPXkpfWcucmVxdWVzdFJlZHJhdygpfX0sdzEucmVxdWVzdFJlZHJhdz1ZYyhmdW5jdGlvbigpe3ZhciB5PXRoaXMucmVuZGVyZXI7eS5yZWRyYXdIaW50KCJlbGVzIiwhMCkseS5yZWRyYXdIaW50KCJkcmFnIiwhMCkseS5yZWRyYXcoKX0sMTAwKSx3MS5zZXR1cERlcXVldWVpbmc9eUMuc2V0dXBEZXF1ZXVlaW5nKHtkZXFSZWRyYXdUaHJlc2hvbGQ6UWssZGVxQ29zdDpBdHQsZGVxQXZnQ29zdDpjcHQsZGVxTm9EcmF3Q29zdDp1cHQsZGVxRmFzdENvc3Q6bHB0LGRlcTpmdW5jdGlvbihnLHgpe3JldHVybiBnLmRlcXVldWUoeCl9LG9uRGVxZDpFTCxzaG91bGRSZWRyYXc6VDMscHJpb3JpdHk6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXF9fSk7dmFyIEQwPXt9LER0dDtmdW5jdGlvbiBpUih5LGcpe2Zvcih2YXIgeD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgVD1nW3hdO3kubGluZVRvKFQueCxULnkpfX1mdW5jdGlvbiBzUih5LGcseCl7Zm9yKHZhciBULEw9MDtMPGcubGVuZ3RoO0wrKyl7dmFyIE89Z1tMXTtMPT09MCYmKFQ9TykseS5saW5lVG8oTy54LE8ueSl9eS5xdWFkcmF0aWNDdXJ2ZVRvKHgueCx4LnksVC54LFQueSl9ZnVuY3Rpb24gSXR0KHksZyx4KXt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKTtmb3IodmFyIFQ9ZyxMPTA7TDxULmxlbmd0aDtMKyspe3ZhciBPPVRbTF07eS5saW5lVG8oTy54LE8ueSl9dmFyIFA9eCwkPXhbMF07eS5tb3ZlVG8oJC54LCQueSk7Zm9yKHZhciBMPTE7TDxQLmxlbmd0aDtMKyspe3ZhciBPPVBbTF07eS5saW5lVG8oTy54LE8ueSl9eS5jbG9zZVBhdGgmJnkuY2xvc2VQYXRoKCl9ZnVuY3Rpb24gcHB0KHksZyx4LFQsTCl7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCkseS5hcmMoeCxULEwsMCxNYXRoLlBJKjIsITEpO3ZhciBPPWcsUD1PWzBdO3kubW92ZVRvKFAueCxQLnkpO2Zvcih2YXIgJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgcT1PWyRdO3kubGluZVRvKHEueCxxLnkpfXkuY2xvc2VQYXRoJiZ5LmNsb3NlUGF0aCgpfWZ1bmN0aW9uIGJwdCh5LGcseCxUKXt5LmFyYyhnLHgsVCwwLE1hdGguUEkqMiwhMSl9RDAuYXJyb3dTaGFwZUltcGw9ZnVuY3Rpb24oeSl7cmV0dXJuKER0dHx8KER0dD17cG9seWdvbjppUiwidHJpYW5nbGUtYmFja2N1cnZlIjpzUiwidHJpYW5nbGUtdGVlIjpJdHQsImNpcmNsZS10cmlhbmdsZSI6cHB0LCJ0cmlhbmdsZS1jcm9zcyI6SXR0LGNpcmNsZTpicHR9KSlbeV19O3ZhciB3dz17fTt3dy5kcmF3RWxlbWVudD1mdW5jdGlvbih5LGcseCxULEwsTyl7dmFyIFA9dGhpcztnLmlzTm9kZSgpP1AuZHJhd05vZGUoeSxnLHgsVCxMLE8pOlAuZHJhd0VkZ2UoeSxnLHgsVCxMLE8pfSx3dy5kcmF3RWxlbWVudE92ZXJsYXk9ZnVuY3Rpb24oeSxnKXt2YXIgeD10aGlzO2cuaXNOb2RlKCk/eC5kcmF3Tm9kZU92ZXJsYXkoeSxnKTp4LmRyYXdFZGdlT3ZlcmxheSh5LGcpfSx3dy5kcmF3RWxlbWVudFVuZGVybGF5PWZ1bmN0aW9uKHksZyl7dmFyIHg9dGhpcztnLmlzTm9kZSgpP3guZHJhd05vZGVVbmRlcmxheSh5LGcpOnguZHJhd0VkZ2VVbmRlcmxheSh5LGcpfSx3dy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb249ZnVuY3Rpb24oeSxnLHgsVCxMLE8sUCwkKXt2YXIgcT10aGlzLFM9eC5nZXRCb3VuZGluZ0JveChnKTtpZighKFMudz09PTB8fFMuaD09PTApKXt2YXIgVj14LmdldEVsZW1lbnQoZyxTLFQsTCxPKTtpZihWIT1udWxsKXt2YXIgWT0kKHEsZyk7aWYoWT09PTApcmV0dXJuO3ZhciBydD1QKHEsZyksb3Q9Uy54MSxodD1TLnkxLGR0PVMudyxMdD1TLmgsa3QsRHQsUHQsJHQsWnQ7aWYocnQhPT0wKXt2YXIgWXQ9eC5nZXRSb3RhdGlvblBvaW50KGcpO1B0PVl0LngsJHQ9WXQueSx5LnRyYW5zbGF0ZShQdCwkdCkseS5yb3RhdGUocnQpLFp0PXEuZ2V0SW1nU21vb3RoaW5nKHkpLFp0fHxxLnNldEltZ1Ntb290aGluZyh5LCEwKTt2YXIgcXQ9eC5nZXRSb3RhdGlvbk9mZnNldChnKTtrdD1xdC54LER0PXF0Lnl9ZWxzZSBrdD1vdCxEdD1odDt2YXIgbmU7WSE9PTEmJihuZT15Lmdsb2JhbEFscGhhLHkuZ2xvYmFsQWxwaGE9bmUqWSkseS5kcmF3SW1hZ2UoVi50ZXh0dXJlLmNhbnZhcyxWLngsMCxWLndpZHRoLFYuaGVpZ2h0LGt0LER0LGR0LEx0KSxZIT09MSYmKHkuZ2xvYmFsQWxwaGE9bmUpLHJ0IT09MCYmKHkucm90YXRlKC1ydCkseS50cmFuc2xhdGUoLVB0LC0kdCksWnR8fHEuc2V0SW1nU21vb3RoaW5nKHksITEpKX1lbHNlIHguZHJhd0VsZW1lbnQoeSxnKX19O3ZhciBvTT1mdW5jdGlvbigpe3JldHVybiAwfSxUQz1mdW5jdGlvbihnLHgpe3JldHVybiBnLmdldFRleHRBbmdsZSh4LG51bGwpfSxhUj1mdW5jdGlvbihnLHgpe3JldHVybiBnLmdldFRleHRBbmdsZSh4LCJzb3VyY2UiKX0sd3B0PWZ1bmN0aW9uKGcseCl7cmV0dXJuIGcuZ2V0VGV4dEFuZ2xlKHgsInRhcmdldCIpfSx2cHQ9ZnVuY3Rpb24oZyx4KXtyZXR1cm4geC5lZmZlY3RpdmVPcGFjaXR5KCl9LG9SPWZ1bmN0aW9uKGcseCl7cmV0dXJuIHgucHN0eWxlKCJ0ZXh0LW9wYWNpdHkiKS5wZlZhbHVlKnguZWZmZWN0aXZlT3BhY2l0eSgpfTt3dy5kcmF3Q2FjaGVkRWxlbWVudD1mdW5jdGlvbih5LGcseCxULEwsTyl7dmFyIFA9dGhpcywkPVAuZGF0YSxxPSQuZWxlVHhyQ2FjaGUsUz0kLmxibFR4ckNhY2hlLFY9JC5zbGJUeHJDYWNoZSxZPSQudGxiVHhyQ2FjaGUscnQ9Zy5ib3VuZGluZ0JveCgpLG90PU89PT0hMD9xLnJlYXNvbnMuaGlnaFF1YWxpdHk6bnVsbDtpZighKHJ0Lnc9PT0wfHxydC5oPT09MHx8IWcudmlzaWJsZSgpKSYmKCFUfHxBTChydCxUKSkpe3ZhciBodD1nLmlzRWRnZSgpLGR0PWcuZWxlbWVudCgpLl9wcml2YXRlLnJzY3JhdGNoLmJhZExpbmU7UC5kcmF3RWxlbWVudFVuZGVybGF5KHksZyksUC5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLHEseCxMLG90LG9NLHZwdCksKCFodHx8IWR0KSYmUC5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLFMseCxMLG90LFRDLG9SKSxodCYmIWR0JiYoUC5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeSxnLFYseCxMLG90LGFSLG9SKSxQLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih5LGcsWSx4LEwsb3Qsd3B0LG9SKSksUC5kcmF3RWxlbWVudE92ZXJsYXkoeSxnKX19LHd3LmRyYXdFbGVtZW50cz1mdW5jdGlvbih5LGcpe2Zvcih2YXIgeD10aGlzLFQ9MDtUPGcubGVuZ3RoO1QrKyl7dmFyIEw9Z1tUXTt4LmRyYXdFbGVtZW50KHksTCl9fSx3dy5kcmF3Q2FjaGVkRWxlbWVudHM9ZnVuY3Rpb24oeSxnLHgsVCl7Zm9yKHZhciBMPXRoaXMsTz0wO088Zy5sZW5ndGg7TysrKXt2YXIgUD1nW09dO0wuZHJhd0NhY2hlZEVsZW1lbnQoeSxQLHgsVCl9fSx3dy5kcmF3Q2FjaGVkTm9kZXM9ZnVuY3Rpb24oeSxnLHgsVCl7Zm9yKHZhciBMPXRoaXMsTz0wO088Zy5sZW5ndGg7TysrKXt2YXIgUD1nW09dO1AuaXNOb2RlKCkmJkwuZHJhd0NhY2hlZEVsZW1lbnQoeSxQLHgsVCl9fSx3dy5kcmF3TGF5ZXJlZEVsZW1lbnRzPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBMPXRoaXMsTz1MLmRhdGEubHlyVHhyQ2FjaGUuZ2V0TGF5ZXJzKGcseCk7aWYoTylmb3IodmFyIFA9MDtQPE8ubGVuZ3RoO1ArKyl7dmFyICQ9T1tQXSxxPSQuYmI7cS53PT09MHx8cS5oPT09MHx8eS5kcmF3SW1hZ2UoJC5jYW52YXMscS54MSxxLnkxLHEudyxxLmgpfWVsc2UgTC5kcmF3Q2FjaGVkRWxlbWVudHMoeSxnLHgsVCl9O3ZhciB2dz17fTt2dy5kcmF3RWRnZT1mdW5jdGlvbih5LGcseCl7dmFyIFQ9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLEw9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLE89YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLFA9dGhpcywkPWcuX3ByaXZhdGUucnNjcmF0Y2g7aWYoIShPJiYhZy52aXNpYmxlKCkpJiYhKCQuYmFkTGluZXx8JC5hbGxwdHM9PW51bGx8fGlzTmFOKCQuYWxscHRzWzBdKSkpe3ZhciBxO3gmJihxPXgseS50cmFuc2xhdGUoLXEueDEsLXEueTEpKTt2YXIgUz1PP2cucHN0eWxlKCJvcGFjaXR5IikudmFsdWU6MSxWPU8/Zy5wc3R5bGUoImxpbmUtb3BhY2l0eSIpLnZhbHVlOjEsWT1nLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxydD1nLnBzdHlsZSgibGluZS1zdHlsZSIpLnZhbHVlLG90PWcucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsaHQ9Zy5wc3R5bGUoImxpbmUtY2FwIikudmFsdWUsZHQ9UypWLEx0PVMqVixrdD1mdW5jdGlvbigpe3ZhciBpZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ZHQ7WT09PSJzdHJhaWdodC10cmlhbmdsZSI/KFAuZWxlU3Ryb2tlU3R5bGUoeSxnLGllKSxQLmRyYXdFZGdlVHJpYW5nbGVQYXRoKGcseSwkLmFsbHB0cykpOih5LmxpbmVXaWR0aD1vdCx5LmxpbmVDYXA9aHQsUC5lbGVTdHJva2VTdHlsZSh5LGcsaWUpLFAuZHJhd0VkZ2VQYXRoKGcseSwkLmFsbHB0cyxydCkseS5saW5lQ2FwPSJidXR0Iil9LER0PWZ1bmN0aW9uKCl7TCYmUC5kcmF3RWRnZU92ZXJsYXkoeSxnKX0sUHQ9ZnVuY3Rpb24oKXtMJiZQLmRyYXdFZGdlVW5kZXJsYXkoeSxnKX0sJHQ9ZnVuY3Rpb24oKXt2YXIgaWU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOkx0O1AuZHJhd0Fycm93aGVhZHMoeSxnLGllKX0sWnQ9ZnVuY3Rpb24oKXtQLmRyYXdFbGVtZW50VGV4dCh5LGcsbnVsbCxUKX07eS5saW5lSm9pbj0icm91bmQiO3ZhciBZdD1nLnBzdHlsZSgiZ2hvc3QiKS52YWx1ZT09PSJ5ZXMiO2lmKFl0KXt2YXIgcXQ9Zy5wc3R5bGUoImdob3N0LW9mZnNldC14IikucGZWYWx1ZSxuZT1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXkiKS5wZlZhbHVlLEd0PWcucHN0eWxlKCJnaG9zdC1vcGFjaXR5IikudmFsdWUsZ2U9ZHQqR3Q7eS50cmFuc2xhdGUocXQsbmUpLGt0KGdlKSwkdChnZSkseS50cmFuc2xhdGUoLXF0LC1uZSl9UHQoKSxrdCgpLCR0KCksRHQoKSxadCgpLHgmJnkudHJhbnNsYXRlKHEueDEscS55MSl9fTt2YXIgT3R0PWZ1bmN0aW9uKGcpe2lmKCFbIm92ZXJsYXkiLCJ1bmRlcmxheSJdLmluY2x1ZGVzKGcpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGF0ZSIpO3JldHVybiBmdW5jdGlvbih4LFQpe2lmKFQudmlzaWJsZSgpKXt2YXIgTD1ULnBzdHlsZSgiIi5jb25jYXQoZywiLW9wYWNpdHkiKSkudmFsdWU7aWYoTCE9PTApe3ZhciBPPXRoaXMsUD1PLnVzZVBhdGhzKCksJD1ULl9wcml2YXRlLnJzY3JhdGNoLHE9VC5wc3R5bGUoIiIuY29uY2F0KGcsIi1wYWRkaW5nIikpLnBmVmFsdWUsUz0yKnEsVj1ULnBzdHlsZSgiIi5jb25jYXQoZywiLWNvbG9yIikpLnZhbHVlO3gubGluZVdpZHRoPVMsJC5lZGdlVHlwZT09PSJzZWxmIiYmIVA/eC5saW5lQ2FwPSJidXR0Ijp4LmxpbmVDYXA9InJvdW5kIixPLmNvbG9yU3Ryb2tlU3R5bGUoeCxWWzBdLFZbMV0sVlsyXSxMKSxPLmRyYXdFZGdlUGF0aChULHgsJC5hbGxwdHMsInNvbGlkIil9fX19O3Z3LmRyYXdFZGdlT3ZlcmxheT1PdHQoIm92ZXJsYXkiKSx2dy5kcmF3RWRnZVVuZGVybGF5PU90dCgidW5kZXJsYXkiKSx2dy5kcmF3RWRnZVBhdGg9ZnVuY3Rpb24oeSxnLHgsVCl7dmFyIEw9eS5fcHJpdmF0ZS5yc2NyYXRjaCxPPWcsUCwkPSExLHE9dGhpcy51c2VQYXRocygpLFM9eS5wc3R5bGUoImxpbmUtZGFzaC1wYXR0ZXJuIikucGZWYWx1ZSxWPXkucHN0eWxlKCJsaW5lLWRhc2gtb2Zmc2V0IikucGZWYWx1ZTtpZihxKXt2YXIgWT14LmpvaW4oIiQiKSxydD1MLnBhdGhDYWNoZUtleSYmTC5wYXRoQ2FjaGVLZXk9PT1ZO3J0PyhQPWc9TC5wYXRoQ2FjaGUsJD0hMCk6KFA9Zz1uZXcgUGF0aDJELEwucGF0aENhY2hlS2V5PVksTC5wYXRoQ2FjaGU9UCl9aWYoTy5zZXRMaW5lRGFzaClzd2l0Y2goVCl7Y2FzZSJkb3R0ZWQiOk8uc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjpPLnNldExpbmVEYXNoKFMpLE8ubGluZURhc2hPZmZzZXQ9VjticmVhaztjYXNlInNvbGlkIjpPLnNldExpbmVEYXNoKFtdKTticmVha31pZighJCYmIUwuYmFkTGluZSlzd2l0Y2goZy5iZWdpblBhdGgmJmcuYmVnaW5QYXRoKCksZy5tb3ZlVG8oeFswXSx4WzFdKSxMLmVkZ2VUeXBlKXtjYXNlImJlemllciI6Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlIm11bHRpYmV6aWVyIjpmb3IodmFyIG90PTI7b3QrMzx4Lmxlbmd0aDtvdCs9NClnLnF1YWRyYXRpY0N1cnZlVG8oeFtvdF0seFtvdCsxXSx4W290KzJdLHhbb3QrM10pO2JyZWFrO2Nhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOmZvcih2YXIgaHQ9MjtodCsxPHgubGVuZ3RoO2h0Kz0yKWcubGluZVRvKHhbaHRdLHhbaHQrMV0pO2JyZWFrfWc9TyxxP2cuc3Ryb2tlKFApOmcuc3Ryb2tlKCksZy5zZXRMaW5lRGFzaCYmZy5zZXRMaW5lRGFzaChbXSl9LHZ3LmRyYXdFZGdlVHJpYW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4KXtnLmZpbGxTdHlsZT1nLnN0cm9rZVN0eWxlO2Zvcih2YXIgVD15LnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLEw9MDtMKzE8eC5sZW5ndGg7TCs9Mil7dmFyIE89W3hbTCsyXS14W0xdLHhbTCszXS14W0wrMV1dLFA9TWF0aC5zcXJ0KE9bMF0qT1swXStPWzFdKk9bMV0pLCQ9W09bMV0vUCwtT1swXS9QXSxxPVskWzBdKlQvMiwkWzFdKlQvMl07Zy5iZWdpblBhdGgoKSxnLm1vdmVUbyh4W0xdLXFbMF0seFtMKzFdLXFbMV0pLGcubGluZVRvKHhbTF0rcVswXSx4W0wrMV0rcVsxXSksZy5saW5lVG8oeFtMKzJdLHhbTCszXSksZy5jbG9zZVBhdGgoKSxnLmZpbGwoKX19LHZ3LmRyYXdBcnJvd2hlYWRzPWZ1bmN0aW9uKHksZyx4KXt2YXIgVD1nLl9wcml2YXRlLnJzY3JhdGNoLEw9VC5lZGdlVHlwZT09PSJoYXlzdGFjayI7THx8dGhpcy5kcmF3QXJyb3doZWFkKHksZywic291cmNlIixULmFycm93U3RhcnRYLFQuYXJyb3dTdGFydFksVC5zcmNBcnJvd0FuZ2xlLHgpLHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsIm1pZC10YXJnZXQiLFQubWlkWCxULm1pZFksVC5taWR0Z3RBcnJvd0FuZ2xlLHgpLHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsIm1pZC1zb3VyY2UiLFQubWlkWCxULm1pZFksVC5taWRzcmNBcnJvd0FuZ2xlLHgpLEx8fHRoaXMuZHJhd0Fycm93aGVhZCh5LGcsInRhcmdldCIsVC5hcnJvd0VuZFgsVC5hcnJvd0VuZFksVC50Z3RBcnJvd0FuZ2xlLHgpfSx2dy5kcmF3QXJyb3doZWFkPWZ1bmN0aW9uKHksZyx4LFQsTCxPLFApe2lmKCEoaXNOYU4oVCl8fFQ9PW51bGx8fGlzTmFOKEwpfHxMPT1udWxsfHxpc05hTihPKXx8Tz09bnVsbCkpe3ZhciAkPXRoaXMscT1nLnBzdHlsZSh4KyItYXJyb3ctc2hhcGUiKS52YWx1ZTtpZihxIT09Im5vbmUiKXt2YXIgUz1nLnBzdHlsZSh4KyItYXJyb3ctZmlsbCIpLnZhbHVlPT09ImhvbGxvdyI/ImJvdGgiOiJmaWxsZWQiLFY9Zy5wc3R5bGUoeCsiLWFycm93LWZpbGwiKS52YWx1ZSxZPWcucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUscnQ9Zy5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtQPT09dm9pZCAwJiYoUD1ydCk7dmFyIG90PXkuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uOyhQIT09MXx8Vj09PSJob2xsb3ciKSYmKHkuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLCQuY29sb3JGaWxsU3R5bGUoeSwyNTUsMjU1LDI1NSwxKSwkLmNvbG9yU3Ryb2tlU3R5bGUoeSwyNTUsMjU1LDI1NSwxKSwkLmRyYXdBcnJvd1NoYXBlKGcseSxTLFkscSxULEwsTykseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249b3QpO3ZhciBodD1nLnBzdHlsZSh4KyItYXJyb3ctY29sb3IiKS52YWx1ZTskLmNvbG9yRmlsbFN0eWxlKHksaHRbMF0saHRbMV0saHRbMl0sUCksJC5jb2xvclN0cm9rZVN0eWxlKHksaHRbMF0saHRbMV0saHRbMl0sUCksJC5kcmF3QXJyb3dTaGFwZShnLHksVixZLHEsVCxMLE8pfX19LHZ3LmRyYXdBcnJvd1NoYXBlPWZ1bmN0aW9uKHksZyx4LFQsTCxPLFAsJCl7dmFyIHE9dGhpcyxTPXRoaXMudXNlUGF0aHMoKSYmTCE9PSJ0cmlhbmdsZS1jcm9zcyIsVj0hMSxZLHJ0PWcsb3Q9e3g6Tyx5OlB9LGh0PXkucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlLGR0PXRoaXMuZ2V0QXJyb3dXaWR0aChULGh0KSxMdD1xLmFycm93U2hhcGVzW0xdO2lmKFMpe3ZhciBrdD1xLmFycm93UGF0aENhY2hlPXEuYXJyb3dQYXRoQ2FjaGV8fFtdLER0PXJkKEwpLFB0PWt0W0R0XTtQdCE9bnVsbD8oWT1nPVB0LFY9ITApOihZPWc9bmV3IFBhdGgyRCxrdFtEdF09WSl9Vnx8KGcuYmVnaW5QYXRoJiZnLmJlZ2luUGF0aCgpLFM/THQuZHJhdyhnLDEsMCx7eDowLHk6MH0sMSk6THQuZHJhdyhnLGR0LCQsb3QsVCksZy5jbG9zZVBhdGgmJmcuY2xvc2VQYXRoKCkpLGc9cnQsUyYmKGcudHJhbnNsYXRlKE8sUCksZy5yb3RhdGUoJCksZy5zY2FsZShkdCxkdCkpLCh4PT09ImZpbGxlZCJ8fHg9PT0iYm90aCIpJiYoUz9nLmZpbGwoWSk6Zy5maWxsKCkpLCh4PT09ImhvbGxvdyJ8fHg9PT0iYm90aCIpJiYoZy5saW5lV2lkdGg9KEx0Lm1hdGNoRWRnZVdpZHRoP1Q6MSkvKFM/ZHQ6MSksZy5saW5lSm9pbj0ibWl0ZXIiLFM/Zy5zdHJva2UoWSk6Zy5zdHJva2UoKSksUyYmKGcuc2NhbGUoMS9kdCwxL2R0KSxnLnJvdGF0ZSgtJCksZy50cmFuc2xhdGUoLU8sLVApKX07dmFyIENDPXt9O0NDLnNhZmVEcmF3SW1hZ2U9ZnVuY3Rpb24oeSxnLHgsVCxMLE8sUCwkLHEsUyl7aWYoIShMPD0wfHxPPD0wfHxxPD0wfHxTPD0wKSl0cnl7eS5kcmF3SW1hZ2UoZyx4LFQsTCxPLFAsJCxxLFMpfWNhdGNoKFYpe1NjKFYpfX0sQ0MuZHJhd0luc2NyaWJlZEltYWdlPWZ1bmN0aW9uKHksZyx4LFQsTCl7dmFyIE89dGhpcyxQPXgucG9zaXRpb24oKSwkPVAueCxxPVAueSxTPXguY3koKS5zdHlsZSgpLFY9Uy5nZXRJbmRleGVkU3R5bGUuYmluZChTKSxZPVYoeCwiYmFja2dyb3VuZC1maXQiLCJ2YWx1ZSIsVCkscnQ9Vih4LCJiYWNrZ3JvdW5kLXJlcGVhdCIsInZhbHVlIixUKSxvdD14LndpZHRoKCksaHQ9eC5oZWlnaHQoKSxkdD14LnBhZGRpbmcoKSoyLEx0PW90KyhWKHgsImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iLCJ2YWx1ZSIsVCk9PT0iaW5uZXIiPzA6ZHQpLGt0PWh0KyhWKHgsImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIiwidmFsdWUiLFQpPT09ImlubmVyIj8wOmR0KSxEdD14Ll9wcml2YXRlLnJzY3JhdGNoLFB0PVYoeCwiYmFja2dyb3VuZC1jbGlwIiwidmFsdWUiLFQpLCR0PVB0PT09Im5vZGUiLFp0PVYoeCwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IiwidmFsdWUiLFQpKkwsWXQ9Vih4LCJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyIsInZhbHVlIixUKSxxdD1nLndpZHRofHxnLmNhY2hlZFcsbmU9Zy5oZWlnaHR8fGcuY2FjaGVkSDsocXQ9PW51bGx8fG5lPT1udWxsKSYmKGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZykscXQ9Zy5jYWNoZWRXPWcud2lkdGh8fGcub2Zmc2V0V2lkdGgsbmU9Zy5jYWNoZWRIPWcuaGVpZ2h0fHxnLm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGcpKTt2YXIgR3Q9cXQsZ2U9bmU7aWYoVih4LCJiYWNrZ3JvdW5kLXdpZHRoIiwidmFsdWUiLFQpIT09ImF1dG8iJiYoVih4LCJiYWNrZ3JvdW5kLXdpZHRoIiwidW5pdHMiLFQpPT09IiUiP0d0PVYoeCwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFQpKkx0Okd0PVYoeCwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFQpKSxWKHgsImJhY2tncm91bmQtaGVpZ2h0IiwidmFsdWUiLFQpIT09ImF1dG8iJiYoVih4LCJiYWNrZ3JvdW5kLWhlaWdodCIsInVuaXRzIixUKT09PSIlIj9nZT1WKHgsImJhY2tncm91bmQtaGVpZ2h0IiwicGZWYWx1ZSIsVCkqa3Q6Z2U9Vih4LCJiYWNrZ3JvdW5kLWhlaWdodCIsInBmVmFsdWUiLFQpKSwhKEd0PT09MHx8Z2U9PT0wKSl7aWYoWT09PSJjb250YWluIil7dmFyIGJlPU1hdGgubWluKEx0L0d0LGt0L2dlKTtHdCo9YmUsZ2UqPWJlfWVsc2UgaWYoWT09PSJjb3ZlciIpe3ZhciBiZT1NYXRoLm1heChMdC9HdCxrdC9nZSk7R3QqPWJlLGdlKj1iZX12YXIgaWU9JC1MdC8yLEZlPVYoeCwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwidW5pdHMiLFQpLHdlPVYoeCwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwicGZWYWx1ZSIsVCk7RmU9PT0iJSI/aWUrPShMdC1HdCkqd2U6aWUrPXdlO3ZhciBibj1WKHgsImJhY2tncm91bmQtb2Zmc2V0LXgiLCJ1bml0cyIsVCksemU9Vih4LCJiYWNrZ3JvdW5kLW9mZnNldC14IiwicGZWYWx1ZSIsVCk7Ym49PT0iJSI/aWUrPShMdC1HdCkqemU6aWUrPXplO3ZhciBHZT1xLWt0LzIsRW49Vih4LCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJ1bml0cyIsVCksSW49Vih4LCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJwZlZhbHVlIixUKTtFbj09PSIlIj9HZSs9KGt0LWdlKSpJbjpHZSs9SW47dmFyIFluPVYoeCwiYmFja2dyb3VuZC1vZmZzZXQteSIsInVuaXRzIixUKSxTbj1WKHgsImJhY2tncm91bmQtb2Zmc2V0LXkiLCJwZlZhbHVlIixUKTtZbj09PSIlIj9HZSs9KGt0LWdlKSpTbjpHZSs9U24sRHQucGF0aENhY2hlJiYoaWUtPSQsR2UtPXEsJD0wLHE9MCk7dmFyIFduPXkuZ2xvYmFsQWxwaGE7eS5nbG9iYWxBbHBoYT1adDt2YXIgcnI9Ty5nZXRJbWdTbW9vdGhpbmcoeSksd3I9ITE7aWYoWXQ9PT0ibm8iJiZycj8oTy5zZXRJbWdTbW9vdGhpbmcoeSwhMSksd3I9ITApOll0PT09InllcyImJiFyciYmKE8uc2V0SW1nU21vb3RoaW5nKHksITApLHdyPSEwKSxydD09PSJuby1yZXBlYXQiKSR0JiYoeS5zYXZlKCksRHQucGF0aENhY2hlP3kuY2xpcChEdC5wYXRoQ2FjaGUpOihPLm5vZGVTaGFwZXNbTy5nZXROb2RlU2hhcGUoeCldLmRyYXcoeSwkLHEsTHQsa3QpLHkuY2xpcCgpKSksTy5zYWZlRHJhd0ltYWdlKHksZywwLDAscXQsbmUsaWUsR2UsR3QsZ2UpLCR0JiZ5LnJlc3RvcmUoKTtlbHNle3ZhciB1cj15LmNyZWF0ZVBhdHRlcm4oZyxydCk7eS5maWxsU3R5bGU9dXIsTy5ub2RlU2hhcGVzW08uZ2V0Tm9kZVNoYXBlKHgpXS5kcmF3KHksJCxxLEx0LGt0KSx5LnRyYW5zbGF0ZShpZSxHZSkseS5maWxsKCkseS50cmFuc2xhdGUoLWllLC1HZSl9eS5nbG9iYWxBbHBoYT1Xbix3ciYmTy5zZXRJbWdTbW9vdGhpbmcoeSxycil9fTt2YXIgdng9e307dnguZWxlVGV4dEJpZ2dlclRoYW5NaW49ZnVuY3Rpb24oeSxnKXtpZighZyl7dmFyIHg9eS5jeSgpLnpvb20oKSxUPXRoaXMuZ2V0UGl4ZWxSYXRpbygpLEw9TWF0aC5jZWlsKF9MKHgqVCkpO2c9TWF0aC5wb3coMixMKX12YXIgTz15LnBzdHlsZSgiZm9udC1zaXplIikucGZWYWx1ZSpnLFA9eS5wc3R5bGUoIm1pbi16b29tZWQtZm9udC1zaXplIikucGZWYWx1ZTtyZXR1cm4hKE88UCl9LHZ4LmRyYXdFbGVtZW50VGV4dD1mdW5jdGlvbih5LGcseCxULEwpe3ZhciBPPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxQPXRoaXM7aWYoVD09bnVsbCl7aWYoTyYmIVAuZWxlVGV4dEJpZ2dlclRoYW5NaW4oZykpcmV0dXJufWVsc2UgaWYoVD09PSExKXJldHVybjtpZihnLmlzTm9kZSgpKXt2YXIgJD1nLnBzdHlsZSgibGFiZWwiKTtpZighJHx8ISQudmFsdWUpcmV0dXJuO3ZhciBxPVAuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKGcpO3kudGV4dEFsaWduPXEseS50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9ZWxzZXt2YXIgUz1nLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lLFY9Zy5wc3R5bGUoImxhYmVsIiksWT1nLnBzdHlsZSgic291cmNlLWxhYmVsIikscnQ9Zy5wc3R5bGUoInRhcmdldC1sYWJlbCIpO2lmKFN8fCghVnx8IVYudmFsdWUpJiYoIVl8fCFZLnZhbHVlKSYmKCFydHx8IXJ0LnZhbHVlKSlyZXR1cm47eS50ZXh0QWxpZ249ImNlbnRlciIseS50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9dmFyIG90PSF4LGh0O3gmJihodD14LHkudHJhbnNsYXRlKC1odC54MSwtaHQueTEpKSxMPT1udWxsPyhQLmRyYXdUZXh0KHksZyxudWxsLG90LE8pLGcuaXNFZGdlKCkmJihQLmRyYXdUZXh0KHksZywic291cmNlIixvdCxPKSxQLmRyYXdUZXh0KHksZywidGFyZ2V0IixvdCxPKSkpOlAuZHJhd1RleHQoeSxnLEwsb3QsTykseCYmeS50cmFuc2xhdGUoaHQueDEsaHQueTEpfSx2eC5nZXRGb250Q2FjaGU9ZnVuY3Rpb24oeSl7dmFyIGc7dGhpcy5mb250Q2FjaGVzPXRoaXMuZm9udENhY2hlc3x8W107Zm9yKHZhciB4PTA7eDx0aGlzLmZvbnRDYWNoZXMubGVuZ3RoO3grKylpZihnPXRoaXMuZm9udENhY2hlc1t4XSxnLmNvbnRleHQ9PT15KXJldHVybiBnO3JldHVybiBnPXtjb250ZXh0Onl9LHRoaXMuZm9udENhY2hlcy5wdXNoKGcpLGd9LHZ4LnNldHVwVGV4dFN0eWxlPWZ1bmN0aW9uKHksZyl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiEwLFQ9Zy5wc3R5bGUoImZvbnQtc3R5bGUiKS5zdHJWYWx1ZSxMPWcucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKyJweCIsTz1nLnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxQPWcucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLCQ9eD9nLmVmZmVjdGl2ZU9wYWNpdHkoKSpnLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU6MSxxPWcucHN0eWxlKCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKiQsUz1nLnBzdHlsZSgiY29sb3IiKS52YWx1ZSxWPWcucHN0eWxlKCJ0ZXh0LW91dGxpbmUtY29sb3IiKS52YWx1ZTt5LmZvbnQ9VCsiICIrUCsiICIrTCsiICIrTyx5LmxpbmVKb2luPSJyb3VuZCIsdGhpcy5jb2xvckZpbGxTdHlsZSh5LFNbMF0sU1sxXSxTWzJdLCQpLHRoaXMuY29sb3JTdHJva2VTdHlsZSh5LFZbMF0sVlsxXSxWWzJdLHEpfTtmdW5jdGlvbiBtcHQoeSxnLHgsVCxMKXt2YXIgTz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06NTt5LmJlZ2luUGF0aCgpLHkubW92ZVRvKGcrTyx4KSx5LmxpbmVUbyhnK1QtTyx4KSx5LnF1YWRyYXRpY0N1cnZlVG8oZytULHgsZytULHgrTykseS5saW5lVG8oZytULHgrTC1PKSx5LnF1YWRyYXRpY0N1cnZlVG8oZytULHgrTCxnK1QtTyx4K0wpLHkubGluZVRvKGcrTyx4K0wpLHkucXVhZHJhdGljQ3VydmVUbyhnLHgrTCxnLHgrTC1PKSx5LmxpbmVUbyhnLHgrTykseS5xdWFkcmF0aWNDdXJ2ZVRvKGcseCxnK08seCkseS5jbG9zZVBhdGgoKSx5LmZpbGwoKX12eC5nZXRUZXh0QW5nbGU9ZnVuY3Rpb24oeSxnKXt2YXIgeCxUPXkuX3ByaXZhdGUsTD1ULnJzY3JhdGNoLE89Zz9nKyItIjoiIixQPXkucHN0eWxlKE8rInRleHQtcm90YXRpb24iKSwkPXlwKEwsImxhYmVsQW5nbGUiLGcpO3JldHVybiBQLnN0clZhbHVlPT09ImF1dG9yb3RhdGUiP3g9eS5pc0VkZ2UoKT8kOjA6UC5zdHJWYWx1ZT09PSJub25lIj94PTA6eD1QLnBmVmFsdWUseH0sdnguZHJhd1RleHQ9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxMPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxPPWcuX3ByaXZhdGUsUD1PLnJzY3JhdGNoLCQ9TD9nLmVmZmVjdGl2ZU9wYWNpdHkoKToxO2lmKCEoTCYmKCQ9PT0wfHxnLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU9PT0wKSkpe3g9PT0ibWFpbiImJih4PW51bGwpO3ZhciBxPXlwKFAsImxhYmVsWCIseCksUz15cChQLCJsYWJlbFkiLHgpLFYsWSxydD10aGlzLmdldExhYmVsVGV4dChnLHgpO2lmKHJ0IT1udWxsJiZydCE9PSIiJiYhaXNOYU4ocSkmJiFpc05hTihTKSl7dGhpcy5zZXR1cFRleHRTdHlsZSh5LGcsTCk7dmFyIG90PXg/eCsiLSI6IiIsaHQ9eXAoUCwibGFiZWxXaWR0aCIseCksZHQ9eXAoUCwibGFiZWxIZWlnaHQiLHgpLEx0PWcucHN0eWxlKG90KyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSxrdD1nLnBzdHlsZShvdCsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsRHQ9Zy5pc0VkZ2UoKSxQdD1nLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZSwkdD1nLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtEdCYmKFB0PSJjZW50ZXIiLCR0PSJjZW50ZXIiKSxxKz1MdCxTKz1rdDt2YXIgWnQ7c3dpdGNoKFQ/WnQ9dGhpcy5nZXRUZXh0QW5nbGUoZyx4KTpadD0wLFp0IT09MCYmKFY9cSxZPVMseS50cmFuc2xhdGUoVixZKSx5LnJvdGF0ZShadCkscT0wLFM9MCksJHQpe2Nhc2UidG9wIjpicmVhaztjYXNlImNlbnRlciI6Uys9ZHQvMjticmVhaztjYXNlImJvdHRvbSI6Uys9ZHQ7YnJlYWt9dmFyIFl0PWcucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlLHF0PWcucHN0eWxlKCJ0ZXh0LWJvcmRlci1vcGFjaXR5IikudmFsdWUsbmU9Zy5wc3R5bGUoInRleHQtYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxHdD1nLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlO2lmKFl0PjB8fG5lPjAmJnF0PjApe3ZhciBnZT1xLUd0O3N3aXRjaChQdCl7Y2FzZSJsZWZ0IjpnZS09aHQ7YnJlYWs7Y2FzZSJjZW50ZXIiOmdlLT1odC8yO2JyZWFrfXZhciBiZT1TLWR0LUd0LGllPWh0KzIqR3QsRmU9ZHQrMipHdDtpZihZdD4wKXt2YXIgd2U9eS5maWxsU3R5bGUsYm49Zy5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3kuZmlsbFN0eWxlPSJyZ2JhKCIrYm5bMF0rIiwiK2JuWzFdKyIsIitiblsyXSsiLCIrWXQqJCsiKSI7dmFyIHplPWcucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiKS5zdHJWYWx1ZTt6ZS5pbmRleE9mKCJyb3VuZCIpPT09MD9tcHQoeSxnZSxiZSxpZSxGZSwyKTp5LmZpbGxSZWN0KGdlLGJlLGllLEZlKSx5LmZpbGxTdHlsZT13ZX1pZihuZT4wJiZxdD4wKXt2YXIgR2U9eS5zdHJva2VTdHlsZSxFbj15LmxpbmVXaWR0aCxJbj1nLnBzdHlsZSgidGV4dC1ib3JkZXItY29sb3IiKS52YWx1ZSxZbj1nLnBzdHlsZSgidGV4dC1ib3JkZXItc3R5bGUiKS52YWx1ZTtpZih5LnN0cm9rZVN0eWxlPSJyZ2JhKCIrSW5bMF0rIiwiK0luWzFdKyIsIitJblsyXSsiLCIrcXQqJCsiKSIseS5saW5lV2lkdGg9bmUseS5zZXRMaW5lRGFzaClzd2l0Y2goWW4pe2Nhc2UiZG90dGVkIjp5LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6eS5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJkb3VibGUiOnkubGluZVdpZHRoPW5lLzQseS5zZXRMaW5lRGFzaChbXSk7YnJlYWs7Y2FzZSJzb2xpZCI6eS5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoeS5zdHJva2VSZWN0KGdlLGJlLGllLEZlKSxZbj09PSJkb3VibGUiKXt2YXIgU249bmUvMjt5LnN0cm9rZVJlY3QoZ2UrU24sYmUrU24saWUtU24qMixGZS1TbioyKX15LnNldExpbmVEYXNoJiZ5LnNldExpbmVEYXNoKFtdKSx5LmxpbmVXaWR0aD1Fbix5LnN0cm9rZVN0eWxlPUdlfX12YXIgV249MipnLnBzdHlsZSgidGV4dC1vdXRsaW5lLXdpZHRoIikucGZWYWx1ZTtpZihXbj4wJiYoeS5saW5lV2lkdGg9V24pLGcucHN0eWxlKCJ0ZXh0LXdyYXAiKS52YWx1ZT09PSJ3cmFwIil7dmFyIHJyPXlwKFAsImxhYmVsV3JhcENhY2hlZExpbmVzIix4KSx3cj15cChQLCJsYWJlbExpbmVIZWlnaHQiLHgpLHVyPWh0LzIsZXI9dGhpcy5nZXRMYWJlbEp1c3RpZmljYXRpb24oZyk7c3dpdGNoKGVyPT09ImF1dG8ifHwoUHQ9PT0ibGVmdCI/ZXI9PT0ibGVmdCI/cSs9LWh0OmVyPT09ImNlbnRlciImJihxKz0tdXIpOlB0PT09ImNlbnRlciI/ZXI9PT0ibGVmdCI/cSs9LXVyOmVyPT09InJpZ2h0IiYmKHErPXVyKTpQdD09PSJyaWdodCImJihlcj09PSJjZW50ZXIiP3ErPXVyOmVyPT09InJpZ2h0IiYmKHErPWh0KSkpLCR0KXtjYXNlInRvcCI6Uy09KHJyLmxlbmd0aC0xKSp3cjticmVhaztjYXNlImNlbnRlciI6Y2FzZSJib3R0b20iOlMtPShyci5sZW5ndGgtMSkqd3I7YnJlYWt9Zm9yKHZhciB2bj0wO3ZuPHJyLmxlbmd0aDt2bisrKVduPjAmJnkuc3Ryb2tlVGV4dChyclt2bl0scSxTKSx5LmZpbGxUZXh0KHJyW3ZuXSxxLFMpLFMrPXdyfWVsc2UgV24+MCYmeS5zdHJva2VUZXh0KHJ0LHEsUykseS5maWxsVGV4dChydCxxLFMpO1p0IT09MCYmKHkucm90YXRlKC1adCkseS50cmFuc2xhdGUoLVYsLVkpKX19fTt2YXIgWms9e307WmsuZHJhd05vZGU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxMPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxPPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxQPXRoaXMsJCxxLFM9Zy5fcHJpdmF0ZSxWPVMucnNjcmF0Y2gsWT1nLnBvc2l0aW9uKCk7aWYoISghWChZLngpfHwhWChZLnkpKSYmIShPJiYhZy52aXNpYmxlKCkpKXt2YXIgcnQ9Tz9nLmVmZmVjdGl2ZU9wYWNpdHkoKToxLG90PVAudXNlUGF0aHMoKSxodCxkdD0hMSxMdD1nLnBhZGRpbmcoKTskPWcud2lkdGgoKSsyKkx0LHE9Zy5oZWlnaHQoKSsyKkx0O3ZhciBrdDt4JiYoa3Q9eCx5LnRyYW5zbGF0ZSgta3QueDEsLWt0LnkxKSk7Zm9yKHZhciBEdD1nLnBzdHlsZSgiYmFja2dyb3VuZC1pbWFnZSIpLFB0PUR0LnZhbHVlLCR0PW5ldyBBcnJheShQdC5sZW5ndGgpLFp0PW5ldyBBcnJheShQdC5sZW5ndGgpLFl0PTAscXQ9MDtxdDxQdC5sZW5ndGg7cXQrKyl7dmFyIG5lPVB0W3F0XSxHdD0kdFtxdF09bmUhPW51bGwmJm5lIT09Im5vbmUiO2lmKEd0KXt2YXIgZ2U9Zy5jeSgpLnN0eWxlKCkuZ2V0SW5kZXhlZFN0eWxlKGcsImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iLCJ2YWx1ZSIscXQpO1l0KyssWnRbcXRdPVAuZ2V0Q2FjaGVkSW1hZ2UobmUsZ2UsZnVuY3Rpb24oKXtTLmJhY2tncm91bmRUaW1lc3RhbXA9RGF0ZS5ub3coKSxnLmVtaXRBbmROb3RpZnkoImJhY2tncm91bmQiKX0pfX12YXIgYmU9Zy5wc3R5bGUoImJhY2tncm91bmQtYmxhY2tlbiIpLnZhbHVlLGllPWcucHN0eWxlKCJib3JkZXItd2lkdGgiKS5wZlZhbHVlLEZlPWcucHN0eWxlKCJiYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSpydCx3ZT1nLnBzdHlsZSgiYm9yZGVyLWNvbG9yIikudmFsdWUsYm49Zy5wc3R5bGUoImJvcmRlci1zdHlsZSIpLnZhbHVlLHplPWcucHN0eWxlKCJib3JkZXItb3BhY2l0eSIpLnZhbHVlKnJ0O3kubGluZUpvaW49Im1pdGVyIjt2YXIgR2U9ZnVuY3Rpb24oKXt2YXIgU2k9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOkZlO1AuZWxlRmlsbFN0eWxlKHksZyxTaSl9LEVuPWZ1bmN0aW9uKCl7dmFyIFNpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp6ZTtQLmNvbG9yU3Ryb2tlU3R5bGUoeSx3ZVswXSx3ZVsxXSx3ZVsyXSxTaSl9LEluPWcucHN0eWxlKCJzaGFwZSIpLnN0clZhbHVlLFluPWcucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnBmVmFsdWU7aWYob3Qpe3kudHJhbnNsYXRlKFkueCxZLnkpO3ZhciBTbj1QLm5vZGVQYXRoQ2FjaGU9UC5ub2RlUGF0aENhY2hlfHxbXSxXbj1pZChJbj09PSJwb2x5Z29uIj9JbisiLCIrWW4uam9pbigiLCIpOkluLCIiK3EsIiIrJCkscnI9U25bV25dO3JyIT1udWxsPyhodD1ycixkdD0hMCxWLnBhdGhDYWNoZT1odCk6KGh0PW5ldyBQYXRoMkQsU25bV25dPVYucGF0aENhY2hlPWh0KX12YXIgd3I9ZnVuY3Rpb24oKXtpZighZHQpe3ZhciBTaT1ZO290JiYoU2k9e3g6MCx5OjB9KSxQLm5vZGVTaGFwZXNbUC5nZXROb2RlU2hhcGUoZyldLmRyYXcoaHR8fHksU2kueCxTaS55LCQscSl9b3Q/eS5maWxsKGh0KTp5LmZpbGwoKX0sdXI9ZnVuY3Rpb24oKXtmb3IodmFyIFNpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpydCxVaT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsVmE9Uy5iYWNrZ3JvdW5kaW5nLFFzPTAscXM9MDtxczxadC5sZW5ndGg7cXMrKyl7dmFyIFRyPWcuY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShnLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IiwidmFsdWUiLHFzKTtpZihVaSYmVHI9PT0ib3ZlciJ8fCFVaSYmVHI9PT0iaW5zaWRlIil7UXMrKztjb250aW51ZX0kdFtxc10mJlp0W3FzXS5jb21wbGV0ZSYmIVp0W3FzXS5lcnJvciYmKFFzKyssUC5kcmF3SW5zY3JpYmVkSW1hZ2UoeSxadFtxc10sZyxxcyxTaSkpfVMuYmFja2dyb3VuZGluZz1RcyE9PVl0LFZhIT09Uy5iYWNrZ3JvdW5kaW5nJiZnLnVwZGF0ZVN0eWxlKCExKX0sZXI9ZnVuY3Rpb24oKXt2YXIgU2k9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLFVpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpydDtQLmhhc1BpZShnKSYmKFAuZHJhd1BpZSh5LGcsVWkpLFNpJiYob3R8fFAubm9kZVNoYXBlc1tQLmdldE5vZGVTaGFwZShnKV0uZHJhdyh5LFkueCxZLnksJCxxKSkpfSx2bj1mdW5jdGlvbigpe3ZhciBTaT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06cnQsVWk9KGJlPjA/YmU6LWJlKSpTaSxWYT1iZT4wPzA6MjU1O2JlIT09MCYmKFAuY29sb3JGaWxsU3R5bGUoeSxWYSxWYSxWYSxVaSksb3Q/eS5maWxsKGh0KTp5LmZpbGwoKSl9LGdyPWZ1bmN0aW9uKCl7aWYoaWU+MCl7aWYoeS5saW5lV2lkdGg9aWUseS5saW5lQ2FwPSJidXR0Iix5LnNldExpbmVEYXNoKXN3aXRjaChibil7Y2FzZSJkb3R0ZWQiOnkuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp5LnNldExpbmVEYXNoKFs0LDJdKTticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6eS5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYob3Q/eS5zdHJva2UoaHQpOnkuc3Ryb2tlKCksYm49PT0iZG91YmxlIil7eS5saW5lV2lkdGg9aWUvMzt2YXIgU2k9eS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247eS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsb3Q/eS5zdHJva2UoaHQpOnkuc3Ryb2tlKCkseS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249U2l9eS5zZXRMaW5lRGFzaCYmeS5zZXRMaW5lRGFzaChbXSl9fSxmcj1mdW5jdGlvbigpe0wmJlAuZHJhd05vZGVPdmVybGF5KHksZyxZLCQscSl9LEpyPWZ1bmN0aW9uKCl7TCYmUC5kcmF3Tm9kZVVuZGVybGF5KHksZyxZLCQscSl9LHZpPWZ1bmN0aW9uKCl7UC5kcmF3RWxlbWVudFRleHQoeSxnLG51bGwsVCl9LFhzPWcucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoWHMpe3ZhciBFYT1nLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLENpPWcucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWUsaGk9Zy5wc3R5bGUoImdob3N0LW9wYWNpdHkiKS52YWx1ZSxncz1oaSpydDt5LnRyYW5zbGF0ZShFYSxDaSksR2UoaGkqRmUpLHdyKCksdXIoZ3MsITApLEVuKGhpKnplKSxncigpLGVyKGJlIT09MHx8aWUhPT0wKSx1cihncywhMSksdm4oZ3MpLHkudHJhbnNsYXRlKC1FYSwtQ2kpfW90JiZ5LnRyYW5zbGF0ZSgtWS54LC1ZLnkpLEpyKCksb3QmJnkudHJhbnNsYXRlKFkueCxZLnkpLEdlKCksd3IoKSx1cihydCwhMCksRW4oKSxncigpLGVyKGJlIT09MHx8aWUhPT0wKSx1cihydCwhMSksdm4oKSxvdCYmeS50cmFuc2xhdGUoLVkueCwtWS55KSx2aSgpLGZyKCkseCYmeS50cmFuc2xhdGUoa3QueDEsa3QueTEpfX07dmFyIFB0dD1mdW5jdGlvbihnKXtpZighWyJvdmVybGF5IiwidW5kZXJsYXkiXS5pbmNsdWRlcyhnKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RhdGUiKTtyZXR1cm4gZnVuY3Rpb24oeCxULEwsTyxQKXt2YXIgJD10aGlzO2lmKFQudmlzaWJsZSgpKXt2YXIgcT1ULnBzdHlsZSgiIi5jb25jYXQoZywiLXBhZGRpbmciKSkucGZWYWx1ZSxTPVQucHN0eWxlKCIiLmNvbmNhdChnLCItb3BhY2l0eSIpKS52YWx1ZSxWPVQucHN0eWxlKCIiLmNvbmNhdChnLCItY29sb3IiKSkudmFsdWUsWT1ULnBzdHlsZSgiIi5jb25jYXQoZywiLXNoYXBlIikpLnZhbHVlO2lmKFM+MCl7aWYoTD1MfHxULnBvc2l0aW9uKCksTz09bnVsbHx8UD09bnVsbCl7dmFyIHJ0PVQucGFkZGluZygpO089VC53aWR0aCgpKzIqcnQsUD1ULmhlaWdodCgpKzIqcnR9JC5jb2xvckZpbGxTdHlsZSh4LFZbMF0sVlsxXSxWWzJdLFMpLCQubm9kZVNoYXBlc1tZXS5kcmF3KHgsTC54LEwueSxPK3EqMixQK3EqMikseC5maWxsKCl9fX19O1prLmRyYXdOb2RlT3ZlcmxheT1QdHQoIm92ZXJsYXkiKSxaay5kcmF3Tm9kZVVuZGVybGF5PVB0dCgidW5kZXJsYXkiKSxaay5oYXNQaWU9ZnVuY3Rpb24oeSl7cmV0dXJuIHk9eVswXSx5Ll9wcml2YXRlLmhhc1BpZX0sWmsuZHJhd1BpZT1mdW5jdGlvbih5LGcseCxUKXtnPWdbMF0sVD1UfHxnLnBvc2l0aW9uKCk7dmFyIEw9Zy5jeSgpLnN0eWxlKCksTz1nLnBzdHlsZSgicGllLXNpemUiKSxQPVQueCwkPVQueSxxPWcud2lkdGgoKSxTPWcuaGVpZ2h0KCksVj1NYXRoLm1pbihxLFMpLzIsWT0wLHJ0PXRoaXMudXNlUGF0aHMoKTtydCYmKFA9MCwkPTApLE8udW5pdHM9PT0iJSI/Vj1WKk8ucGZWYWx1ZTpPLnBmVmFsdWUhPT12b2lkIDAmJihWPU8ucGZWYWx1ZS8yKTtmb3IodmFyIG90PTE7b3Q8PUwucGllQmFja2dyb3VuZE47b3QrKyl7dmFyIGh0PWcucHN0eWxlKCJwaWUtIitvdCsiLWJhY2tncm91bmQtc2l6ZSIpLnZhbHVlLGR0PWcucHN0eWxlKCJwaWUtIitvdCsiLWJhY2tncm91bmQtY29sb3IiKS52YWx1ZSxMdD1nLnBzdHlsZSgicGllLSIrb3QrIi1iYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSp4LGt0PWh0LzEwMDtrdCtZPjEmJihrdD0xLVkpO3ZhciBEdD0xLjUqTWF0aC5QSSsyKk1hdGguUEkqWSxQdD0yKk1hdGguUEkqa3QsJHQ9RHQrUHQ7aHQ9PT0wfHxZPj0xfHxZK2t0PjF8fCh5LmJlZ2luUGF0aCgpLHkubW92ZVRvKFAsJCkseS5hcmMoUCwkLFYsRHQsJHQpLHkuY2xvc2VQYXRoKCksdGhpcy5jb2xvckZpbGxTdHlsZSh5LGR0WzBdLGR0WzFdLGR0WzJdLEx0KSx5LmZpbGwoKSxZKz1rdCl9fTt2YXIgVGc9e30seXB0PTEwMDtUZy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5kYXRhLmNvbnRleHRzWzBdO2lmKHRoaXMuZm9yY2VkUGl4ZWxSYXRpbyE9bnVsbClyZXR1cm4gdGhpcy5mb3JjZWRQaXhlbFJhdGlvO3ZhciBnPXkuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8eS53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx5Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHkubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx5Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx5LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fDE7cmV0dXJuKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKS9nfSxUZy5wYWludENhY2hlPWZ1bmN0aW9uKHkpe2Zvcih2YXIgZz10aGlzLnBhaW50Q2FjaGVzPXRoaXMucGFpbnRDYWNoZXN8fFtdLHg9ITAsVCxMPTA7TDxnLmxlbmd0aDtMKyspaWYoVD1nW0xdLFQuY29udGV4dD09PXkpe3g9ITE7YnJlYWt9cmV0dXJuIHgmJihUPXtjb250ZXh0Onl9LGcucHVzaChUKSksVH0sVGcuY3JlYXRlR3JhZGllbnRTdHlsZUZvcj1mdW5jdGlvbih5LGcseCxULEwpe3ZhciBPLFA9dGhpcy51c2VQYXRocygpLCQ9eC5wc3R5bGUoZysiLWdyYWRpZW50LXN0b3AtY29sb3JzIikudmFsdWUscT14LnBzdHlsZShnKyItZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiKS5wZlZhbHVlO2lmKFQ9PT0icmFkaWFsLWdyYWRpZW50IilpZih4LmlzRWRnZSgpKXt2YXIgUz14LnNvdXJjZUVuZHBvaW50KCksVj14LnRhcmdldEVuZHBvaW50KCksWT14Lm1pZHBvaW50KCkscnQ9QzMoUyxZKSxvdD1DMyhWLFkpO089eS5jcmVhdGVSYWRpYWxHcmFkaWVudChZLngsWS55LDAsWS54LFkueSxNYXRoLm1heChydCxvdCkpfWVsc2V7dmFyIGh0PVA/e3g6MCx5OjB9OngucG9zaXRpb24oKSxkdD14LnBhZGRlZFdpZHRoKCksTHQ9eC5wYWRkZWRIZWlnaHQoKTtPPXkuY3JlYXRlUmFkaWFsR3JhZGllbnQoaHQueCxodC55LDAsaHQueCxodC55LE1hdGgubWF4KGR0LEx0KSl9ZWxzZSBpZih4LmlzRWRnZSgpKXt2YXIga3Q9eC5zb3VyY2VFbmRwb2ludCgpLER0PXgudGFyZ2V0RW5kcG9pbnQoKTtPPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoa3QueCxrdC55LER0LngsRHQueSl9ZWxzZXt2YXIgUHQ9UD97eDowLHk6MH06eC5wb3NpdGlvbigpLCR0PXgucGFkZGVkV2lkdGgoKSxadD14LnBhZGRlZEhlaWdodCgpLFl0PSR0LzIscXQ9WnQvMixuZT14LnBzdHlsZSgiYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24iKS52YWx1ZTtzd2l0Y2gobmUpe2Nhc2UidG8tYm90dG9tIjpPPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoUHQueCxQdC55LXF0LFB0LngsUHQueStxdCk7YnJlYWs7Y2FzZSJ0by10b3AiOk89eS5jcmVhdGVMaW5lYXJHcmFkaWVudChQdC54LFB0LnkrcXQsUHQueCxQdC55LXF0KTticmVhaztjYXNlInRvLWxlZnQiOk89eS5jcmVhdGVMaW5lYXJHcmFkaWVudChQdC54K1l0LFB0LnksUHQueC1ZdCxQdC55KTticmVhaztjYXNlInRvLXJpZ2h0IjpPPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoUHQueC1ZdCxQdC55LFB0LngrWXQsUHQueSk7YnJlYWs7Y2FzZSJ0by1ib3R0b20tcmlnaHQiOmNhc2UidG8tcmlnaHQtYm90dG9tIjpPPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoUHQueC1ZdCxQdC55LXF0LFB0LngrWXQsUHQueStxdCk7YnJlYWs7Y2FzZSJ0by10b3AtcmlnaHQiOmNhc2UidG8tcmlnaHQtdG9wIjpPPXkuY3JlYXRlTGluZWFyR3JhZGllbnQoUHQueC1ZdCxQdC55K3F0LFB0LngrWXQsUHQueS1xdCk7YnJlYWs7Y2FzZSJ0by1ib3R0b20tbGVmdCI6Y2FzZSJ0by1sZWZ0LWJvdHRvbSI6Tz15LmNyZWF0ZUxpbmVhckdyYWRpZW50KFB0LngrWXQsUHQueS1xdCxQdC54LVl0LFB0LnkrcXQpO2JyZWFrO2Nhc2UidG8tdG9wLWxlZnQiOmNhc2UidG8tbGVmdC10b3AiOk89eS5jcmVhdGVMaW5lYXJHcmFkaWVudChQdC54K1l0LFB0LnkrcXQsUHQueC1ZdCxQdC55LXF0KTticmVha319aWYoIU8pcmV0dXJuIG51bGw7Zm9yKHZhciBHdD1xLmxlbmd0aD09PSQubGVuZ3RoLGdlPSQubGVuZ3RoLGJlPTA7YmU8Z2U7YmUrKylPLmFkZENvbG9yU3RvcChHdD9xW2JlXTpiZS8oZ2UtMSksInJnYmEoIiskW2JlXVswXSsiLCIrJFtiZV1bMV0rIiwiKyRbYmVdWzJdKyIsIitMKyIpIik7cmV0dXJuIE99LFRnLmdyYWRpZW50RmlsbFN0eWxlPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBMPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcih5LCJiYWNrZ3JvdW5kIixnLHgsVCk7aWYoIUwpcmV0dXJuIG51bGw7eS5maWxsU3R5bGU9TH0sVGcuY29sb3JGaWxsU3R5bGU9ZnVuY3Rpb24oeSxnLHgsVCxMKXt5LmZpbGxTdHlsZT0icmdiYSgiK2crIiwiK3grIiwiK1QrIiwiK0wrIikifSxUZy5lbGVGaWxsU3R5bGU9ZnVuY3Rpb24oeSxnLHgpe3ZhciBUPWcucHN0eWxlKCJiYWNrZ3JvdW5kLWZpbGwiKS52YWx1ZTtpZihUPT09ImxpbmVhci1ncmFkaWVudCJ8fFQ9PT0icmFkaWFsLWdyYWRpZW50Iil0aGlzLmdyYWRpZW50RmlsbFN0eWxlKHksZyxULHgpO2Vsc2V7dmFyIEw9Zy5wc3R5bGUoImJhY2tncm91bmQtY29sb3IiKS52YWx1ZTt0aGlzLmNvbG9yRmlsbFN0eWxlKHksTFswXSxMWzFdLExbMl0seCl9fSxUZy5ncmFkaWVudFN0cm9rZVN0eWxlPWZ1bmN0aW9uKHksZyx4LFQpe3ZhciBMPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcih5LCJsaW5lIixnLHgsVCk7aWYoIUwpcmV0dXJuIG51bGw7eS5zdHJva2VTdHlsZT1MfSxUZy5jb2xvclN0cm9rZVN0eWxlPWZ1bmN0aW9uKHksZyx4LFQsTCl7eS5zdHJva2VTdHlsZT0icmdiYSgiK2crIiwiK3grIiwiK1QrIiwiK0wrIikifSxUZy5lbGVTdHJva2VTdHlsZT1mdW5jdGlvbih5LGcseCl7dmFyIFQ9Zy5wc3R5bGUoImxpbmUtZmlsbCIpLnZhbHVlO2lmKFQ9PT0ibGluZWFyLWdyYWRpZW50Inx8VD09PSJyYWRpYWwtZ3JhZGllbnQiKXRoaXMuZ3JhZGllbnRTdHJva2VTdHlsZSh5LGcsVCx4KTtlbHNle3ZhciBMPWcucHN0eWxlKCJsaW5lLWNvbG9yIikudmFsdWU7dGhpcy5jb2xvclN0cm9rZVN0eWxlKHksTFswXSxMWzFdLExbMl0seCl9fSxUZy5tYXRjaENhbnZhc1NpemU9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcyx4PWcuZGF0YSxUPWcuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLEw9VFsyXSxPPVRbM10sUD1nLmdldFBpeGVsUmF0aW8oKSwkPWcubW90aW9uQmx1clB4UmF0aW87KHk9PT1nLmRhdGEuYnVmZmVyQ2FudmFzZXNbZy5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXXx8eT09PWcuZGF0YS5idWZmZXJDYW52YXNlc1tnLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKSYmKFA9JCk7dmFyIHE9TCpQLFM9TypQLFY7aWYoIShxPT09Zy5jYW52YXNXaWR0aCYmUz09PWcuY2FudmFzSGVpZ2h0KSl7Zy5mb250Q2FjaGVzPW51bGw7dmFyIFk9eC5jYW52YXNDb250YWluZXI7WS5zdHlsZS53aWR0aD1MKyJweCIsWS5zdHlsZS5oZWlnaHQ9TysicHgiO2Zvcih2YXIgcnQ9MDtydDxnLkNBTlZBU19MQVlFUlM7cnQrKylWPXguY2FudmFzZXNbcnRdLFYud2lkdGg9cSxWLmhlaWdodD1TLFYuc3R5bGUud2lkdGg9TCsicHgiLFYuc3R5bGUuaGVpZ2h0PU8rInB4Ijtmb3IodmFyIHJ0PTA7cnQ8Zy5CVUZGRVJfQ09VTlQ7cnQrKylWPXguYnVmZmVyQ2FudmFzZXNbcnRdLFYud2lkdGg9cSxWLmhlaWdodD1TLFYuc3R5bGUud2lkdGg9TCsicHgiLFYuc3R5bGUuaGVpZ2h0PU8rInB4IjtnLnRleHR1cmVNdWx0PTEsUDw9MSYmKFY9eC5idWZmZXJDYW52YXNlc1tnLlRFWFRVUkVfQlVGRkVSXSxnLnRleHR1cmVNdWx0PTIsVi53aWR0aD1xKmcudGV4dHVyZU11bHQsVi5oZWlnaHQ9UypnLnRleHR1cmVNdWx0KSxnLmNhbnZhc1dpZHRoPXEsZy5jYW52YXNIZWlnaHQ9U319LFRnLnJlbmRlclRvPWZ1bmN0aW9uKHksZyx4LFQpe3RoaXMucmVuZGVyKHtmb3JjZWRDb250ZXh0OnksZm9yY2VkWm9vbTpnLGZvcmNlZFBhbjp4LGRyYXdBbGxMYXllcnM6ITAsZm9yY2VkUHhSYXRpbzpUfSl9LFRnLnJlbmRlcj1mdW5jdGlvbih5KXt5PXl8fHNOKCk7dmFyIGc9eS5mb3JjZWRDb250ZXh0LHg9eS5kcmF3QWxsTGF5ZXJzLFQ9eS5kcmF3T25seU5vZGVMYXllcixMPXkuZm9yY2VkWm9vbSxPPXkuZm9yY2VkUGFuLFA9dGhpcywkPXkuZm9yY2VkUHhSYXRpbz09PXZvaWQgMD90aGlzLmdldFBpeGVsUmF0aW8oKTp5LmZvcmNlZFB4UmF0aW8scT1QLmN5LFM9UC5kYXRhLFY9Uy5jYW52YXNOZWVkc1JlZHJhdyxZPVAudGV4dHVyZU9uVmlld3BvcnQmJiFnJiYoUC5waW5jaGluZ3x8UC5ob3ZlckRhdGEuZHJhZ2dpbmd8fFAuc3dpcGVQYW5uaW5nfHxQLmRhdGEud2hlZWxab29taW5nKSxydD15Lm1vdGlvbkJsdXIhPT12b2lkIDA/eS5tb3Rpb25CbHVyOlAubW90aW9uQmx1cixvdD1QLm1vdGlvbkJsdXJQeFJhdGlvLGh0PXEuaGFzQ29tcG91bmROb2RlcygpLGR0PVAuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyxMdD0hIShQLmhvdmVyRGF0YS5zZWxlY3Rpbmd8fFAudG91Y2hEYXRhLnNlbGVjdGluZyk7cnQ9cnQmJiFnJiZQLm1vdGlvbkJsdXJFbmFibGVkJiYhTHQ7dmFyIGt0PXJ0O2d8fChQLnByZXZQeFJhdGlvIT09JCYmKFAuaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCksUC5tYXRjaENhbnZhc1NpemUoUC5jb250YWluZXIpLFAucmVkcmF3SGludCgiZWxlcyIsITApLFAucmVkcmF3SGludCgiZHJhZyIsITApKSxQLnByZXZQeFJhdGlvPSQpLCFnJiZQLm1vdGlvbkJsdXJUaW1lb3V0JiZjbGVhclRpbWVvdXQoUC5tb3Rpb25CbHVyVGltZW91dCkscnQmJihQLm1iRnJhbWVzPT1udWxsJiYoUC5tYkZyYW1lcz0wKSxQLm1iRnJhbWVzKyssUC5tYkZyYW1lczwzJiYoa3Q9ITEpLFAubWJGcmFtZXM+UC5taW5NYkxvd1F1YWxGcmFtZXMmJihQLm1vdGlvbkJsdXJQeFJhdGlvPVAubWJQeFJCbHVycnkpKSxQLmNsZWFyaW5nTW90aW9uQmx1ciYmKFAubW90aW9uQmx1clB4UmF0aW89MSksUC50ZXh0dXJlRHJhd0xhc3RGcmFtZSYmIVkmJihWW1AuTk9ERV09ITAsVltQLlNFTEVDVF9CT1hdPSEwKTt2YXIgRHQ9cS5zdHlsZSgpLFB0PXEuem9vbSgpLCR0PUwhPT12b2lkIDA/TDpQdCxadD1xLnBhbigpLFl0PXt4Olp0LngseTpadC55fSxxdD17em9vbTpQdCxwYW46e3g6WnQueCx5Olp0Lnl9fSxuZT1QLnByZXZWaWV3cG9ydCxHdD1uZT09PXZvaWQgMHx8cXQuem9vbSE9PW5lLnpvb218fHF0LnBhbi54IT09bmUucGFuLnh8fHF0LnBhbi55IT09bmUucGFuLnk7IUd0JiYhKGR0JiYhaHQpJiYoUC5tb3Rpb25CbHVyUHhSYXRpbz0xKSxPJiYoWXQ9TyksJHQqPSQsWXQueCo9JCxZdC55Kj0kO3ZhciBnZT1QLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7ZnVuY3Rpb24gYmUoQ2ksaGksZ3MscWksU2kpe3ZhciBVaT1DaS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247Q2kuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLFAuY29sb3JGaWxsU3R5bGUoQ2ksMjU1LDI1NSwyNTUsUC5tb3Rpb25CbHVyVHJhbnNwYXJlbmN5KSxDaS5maWxsUmVjdChoaSxncyxxaSxTaSksQ2kuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVVpfWZ1bmN0aW9uIGllKENpLGhpKXt2YXIgZ3MscWksU2ksVWk7IVAuY2xlYXJpbmdNb3Rpb25CbHVyJiYoQ2k9PT1TLmJ1ZmZlckNvbnRleHRzW1AuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV18fENpPT09Uy5idWZmZXJDb250ZXh0c1tQLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKT8oZ3M9e3g6WnQueCpvdCx5Olp0Lnkqb3R9LHFpPVB0Km90LFNpPVAuY2FudmFzV2lkdGgqb3QsVWk9UC5jYW52YXNIZWlnaHQqb3QpOihncz1ZdCxxaT0kdCxTaT1QLmNhbnZhc1dpZHRoLFVpPVAuY2FudmFzSGVpZ2h0KSxDaS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGhpPT09Im1vdGlvbkJsdXIiP2JlKENpLDAsMCxTaSxVaSk6IWcmJihoaT09PXZvaWQgMHx8aGkpJiZDaS5jbGVhclJlY3QoMCwwLFNpLFVpKSx4fHwoQ2kudHJhbnNsYXRlKGdzLngsZ3MueSksQ2kuc2NhbGUocWkscWkpKSxPJiZDaS50cmFuc2xhdGUoTy54LE8ueSksTCYmQ2kuc2NhbGUoTCxMKX1pZihZfHwoUC50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMSksWSl7aWYoUC50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMCwhUC50ZXh0dXJlQ2FjaGUpe1AudGV4dHVyZUNhY2hlPXt9LFAudGV4dHVyZUNhY2hlLmJiPXEubXV0YWJsZUVsZW1lbnRzKCkuYm91bmRpbmdCb3goKSxQLnRleHR1cmVDYWNoZS50ZXh0dXJlPVAuZGF0YS5idWZmZXJDYW52YXNlc1tQLlRFWFRVUkVfQlVGRkVSXTt2YXIgRmU9UC5kYXRhLmJ1ZmZlckNvbnRleHRzW1AuVEVYVFVSRV9CVUZGRVJdO0ZlLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksRmUuY2xlYXJSZWN0KDAsMCxQLmNhbnZhc1dpZHRoKlAudGV4dHVyZU11bHQsUC5jYW52YXNIZWlnaHQqUC50ZXh0dXJlTXVsdCksUC5yZW5kZXIoe2ZvcmNlZENvbnRleHQ6RmUsZHJhd09ubHlOb2RlTGF5ZXI6ITAsZm9yY2VkUHhSYXRpbzokKlAudGV4dHVyZU11bHR9KTt2YXIgcXQ9UC50ZXh0dXJlQ2FjaGUudmlld3BvcnQ9e3pvb206cS56b29tKCkscGFuOnEucGFuKCksd2lkdGg6UC5jYW52YXNXaWR0aCxoZWlnaHQ6UC5jYW52YXNIZWlnaHR9O3F0Lm1wYW49e3g6KDAtcXQucGFuLngpL3F0Lnpvb20seTooMC1xdC5wYW4ueSkvcXQuem9vbX19VltQLkRSQUddPSExLFZbUC5OT0RFXT0hMTt2YXIgd2U9Uy5jb250ZXh0c1tQLk5PREVdLGJuPVAudGV4dHVyZUNhY2hlLnRleHR1cmUscXQ9UC50ZXh0dXJlQ2FjaGUudmlld3BvcnQ7d2Uuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxydD9iZSh3ZSwwLDAscXQud2lkdGgscXQuaGVpZ2h0KTp3ZS5jbGVhclJlY3QoMCwwLHF0LndpZHRoLHF0LmhlaWdodCk7dmFyIHplPUR0LmNvcmUoIm91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciIpLnZhbHVlLEdlPUR0LmNvcmUoIm91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5IikudmFsdWU7UC5jb2xvckZpbGxTdHlsZSh3ZSx6ZVswXSx6ZVsxXSx6ZVsyXSxHZSksd2UuZmlsbFJlY3QoMCwwLHF0LndpZHRoLHF0LmhlaWdodCk7dmFyIFB0PXEuem9vbSgpO2llKHdlLCExKSx3ZS5jbGVhclJlY3QocXQubXBhbi54LHF0Lm1wYW4ueSxxdC53aWR0aC9xdC56b29tLyQscXQuaGVpZ2h0L3F0Lnpvb20vJCksd2UuZHJhd0ltYWdlKGJuLHF0Lm1wYW4ueCxxdC5tcGFuLnkscXQud2lkdGgvcXQuem9vbS8kLHF0LmhlaWdodC9xdC56b29tLyQpfWVsc2UgUC50ZXh0dXJlT25WaWV3cG9ydCYmIWcmJihQLnRleHR1cmVDYWNoZT1udWxsKTt2YXIgRW49cS5leHRlbnQoKSxJbj1QLnBpbmNoaW5nfHxQLmhvdmVyRGF0YS5kcmFnZ2luZ3x8UC5zd2lwZVBhbm5pbmd8fFAuZGF0YS53aGVlbFpvb21pbmd8fFAuaG92ZXJEYXRhLmRyYWdnaW5nRWxlc3x8UC5jeS5hbmltYXRlZCgpLFluPVAuaGlkZUVkZ2VzT25WaWV3cG9ydCYmSW4sU249W107aWYoU25bUC5OT0RFXT0hVltQLk5PREVdJiZydCYmIVAuY2xlYXJlZEZvck1vdGlvbkJsdXJbUC5OT0RFXXx8UC5jbGVhcmluZ01vdGlvbkJsdXIsU25bUC5OT0RFXSYmKFAuY2xlYXJlZEZvck1vdGlvbkJsdXJbUC5OT0RFXT0hMCksU25bUC5EUkFHXT0hVltQLkRSQUddJiZydCYmIVAuY2xlYXJlZEZvck1vdGlvbkJsdXJbUC5EUkFHXXx8UC5jbGVhcmluZ01vdGlvbkJsdXIsU25bUC5EUkFHXSYmKFAuY2xlYXJlZEZvck1vdGlvbkJsdXJbUC5EUkFHXT0hMCksVltQLk5PREVdfHx4fHxUfHxTbltQLk5PREVdKXt2YXIgV249cnQmJiFTbltQLk5PREVdJiZvdCE9PTEsd2U9Z3x8KFduP1AuZGF0YS5idWZmZXJDb250ZXh0c1tQLk1PVElPTkJMVVJfQlVGRkVSX05PREVdOlMuY29udGV4dHNbUC5OT0RFXSkscnI9cnQmJiFXbj8ibW90aW9uQmx1ciI6dm9pZCAwO2llKHdlLHJyKSxZbj9QLmRyYXdDYWNoZWROb2Rlcyh3ZSxnZS5ub25kcmFnLCQsRW4pOlAuZHJhd0xheWVyZWRFbGVtZW50cyh3ZSxnZS5ub25kcmFnLCQsRW4pLFAuZGVidWcmJlAuZHJhd0RlYnVnUG9pbnRzKHdlLGdlLm5vbmRyYWcpLCF4JiYhcnQmJihWW1AuTk9ERV09ITEpfWlmKCFUJiYoVltQLkRSQUddfHx4fHxTbltQLkRSQUddKSl7dmFyIFduPXJ0JiYhU25bUC5EUkFHXSYmb3QhPT0xLHdlPWd8fChXbj9QLmRhdGEuYnVmZmVyQ29udGV4dHNbUC5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXTpTLmNvbnRleHRzW1AuRFJBR10pO2llKHdlLHJ0JiYhV24/Im1vdGlvbkJsdXIiOnZvaWQgMCksWW4/UC5kcmF3Q2FjaGVkTm9kZXMod2UsZ2UuZHJhZywkLEVuKTpQLmRyYXdDYWNoZWRFbGVtZW50cyh3ZSxnZS5kcmFnLCQsRW4pLFAuZGVidWcmJlAuZHJhd0RlYnVnUG9pbnRzKHdlLGdlLmRyYWcpLCF4JiYhcnQmJihWW1AuRFJBR109ITEpfWlmKFAuc2hvd0Zwc3x8IVQmJlZbUC5TRUxFQ1RfQk9YXSYmIXgpe3ZhciB3ZT1nfHxTLmNvbnRleHRzW1AuU0VMRUNUX0JPWF07aWYoaWUod2UpLFAuc2VsZWN0aW9uWzRdPT0xJiYoUC5ob3ZlckRhdGEuc2VsZWN0aW5nfHxQLnRvdWNoRGF0YS5zZWxlY3RpbmcpKXt2YXIgUHQ9UC5jeS56b29tKCksd3I9RHQuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiKS52YWx1ZS9QdDt3ZS5saW5lV2lkdGg9d3Isd2UuZmlsbFN0eWxlPSJyZ2JhKCIrRHQuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzBdKyIsIitEdC5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMV0rIiwiK0R0LmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVsyXSsiLCIrRHQuY29yZSgic2VsZWN0aW9uLWJveC1vcGFjaXR5IikudmFsdWUrIikiLHdlLmZpbGxSZWN0KFAuc2VsZWN0aW9uWzBdLFAuc2VsZWN0aW9uWzFdLFAuc2VsZWN0aW9uWzJdLVAuc2VsZWN0aW9uWzBdLFAuc2VsZWN0aW9uWzNdLVAuc2VsZWN0aW9uWzFdKSx3cj4wJiYod2Uuc3Ryb2tlU3R5bGU9InJnYmEoIitEdC5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzBdKyIsIitEdC5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzFdKyIsIitEdC5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzJdKyIsIitEdC5jb3JlKCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiKS52YWx1ZSsiKSIsd2Uuc3Ryb2tlUmVjdChQLnNlbGVjdGlvblswXSxQLnNlbGVjdGlvblsxXSxQLnNlbGVjdGlvblsyXS1QLnNlbGVjdGlvblswXSxQLnNlbGVjdGlvblszXS1QLnNlbGVjdGlvblsxXSkpfWlmKFMuYmdBY3RpdmVQb3Npc3Rpb24mJiFQLmhvdmVyRGF0YS5zZWxlY3Rpbmcpe3ZhciBQdD1QLmN5Lnpvb20oKSx1cj1TLmJnQWN0aXZlUG9zaXN0aW9uO3dlLmZpbGxTdHlsZT0icmdiYSgiK0R0LmNvcmUoImFjdGl2ZS1iZy1jb2xvciIpLnZhbHVlWzBdKyIsIitEdC5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsxXSsiLCIrRHQuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMl0rIiwiK0R0LmNvcmUoImFjdGl2ZS1iZy1vcGFjaXR5IikudmFsdWUrIikiLHdlLmJlZ2luUGF0aCgpLHdlLmFyYyh1ci54LHVyLnksRHQuY29yZSgiYWN0aXZlLWJnLXNpemUiKS5wZlZhbHVlL1B0LDAsMipNYXRoLlBJKSx3ZS5maWxsKCl9dmFyIGVyPVAubGFzdFJlZHJhd1RpbWU7aWYoUC5zaG93RnBzJiZlcil7ZXI9TWF0aC5yb3VuZChlcik7dmFyIHZuPU1hdGgucm91bmQoMWUzL2VyKTt3ZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHdlLmZpbGxTdHlsZT0icmdiYSgyNTUsIDAsIDAsIDAuNzUpIix3ZS5zdHJva2VTdHlsZT0icmdiYSgyNTUsIDAsIDAsIDAuNzUpIix3ZS5saW5lV2lkdGg9MSx3ZS5maWxsVGV4dCgiMSBmcmFtZSA9ICIrZXIrIiBtcyA9ICIrdm4rIiBmcHMiLDAsMjApO3ZhciBncj02MDt3ZS5zdHJva2VSZWN0KDAsMzAsMjUwLDIwKSx3ZS5maWxsUmVjdCgwLDMwLDI1MCpNYXRoLm1pbih2bi9nciwxKSwyMCl9eHx8KFZbUC5TRUxFQ1RfQk9YXT0hMSl9aWYocnQmJm90IT09MSl7dmFyIGZyPVMuY29udGV4dHNbUC5OT0RFXSxKcj1QLmRhdGEuYnVmZmVyQ2FudmFzZXNbUC5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXSx2aT1TLmNvbnRleHRzW1AuRFJBR10sWHM9UC5kYXRhLmJ1ZmZlckNhbnZhc2VzW1AuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10sRWE9ZnVuY3Rpb24oaGksZ3MscWkpe2hpLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCkscWl8fCFrdD9oaS5jbGVhclJlY3QoMCwwLFAuY2FudmFzV2lkdGgsUC5jYW52YXNIZWlnaHQpOmJlKGhpLDAsMCxQLmNhbnZhc1dpZHRoLFAuY2FudmFzSGVpZ2h0KTt2YXIgU2k9b3Q7aGkuZHJhd0ltYWdlKGdzLDAsMCxQLmNhbnZhc1dpZHRoKlNpLFAuY2FudmFzSGVpZ2h0KlNpLDAsMCxQLmNhbnZhc1dpZHRoLFAuY2FudmFzSGVpZ2h0KX07KFZbUC5OT0RFXXx8U25bUC5OT0RFXSkmJihFYShmcixKcixTbltQLk5PREVdKSxWW1AuTk9ERV09ITEpLChWW1AuRFJBR118fFNuW1AuRFJBR10pJiYoRWEodmksWHMsU25bUC5EUkFHXSksVltQLkRSQUddPSExKX1QLnByZXZWaWV3cG9ydD1xdCxQLmNsZWFyaW5nTW90aW9uQmx1ciYmKFAuY2xlYXJpbmdNb3Rpb25CbHVyPSExLFAubW90aW9uQmx1ckNsZWFyZWQ9ITAsUC5tb3Rpb25CbHVyPSEwKSxydCYmKFAubW90aW9uQmx1clRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe1AubW90aW9uQmx1clRpbWVvdXQ9bnVsbCxQLmNsZWFyZWRGb3JNb3Rpb25CbHVyW1AuTk9ERV09ITEsUC5jbGVhcmVkRm9yTW90aW9uQmx1cltQLkRSQUddPSExLFAubW90aW9uQmx1cj0hMSxQLmNsZWFyaW5nTW90aW9uQmx1cj0hWSxQLm1iRnJhbWVzPTAsVltQLk5PREVdPSEwLFZbUC5EUkFHXT0hMCxQLnJlZHJhdygpfSx5cHQpKSxnfHxxLmVtaXQoInJlbmRlciIpfTt2YXIgTzM9e307TzMuZHJhd1BvbHlnb25QYXRoPWZ1bmN0aW9uKHksZyx4LFQsTCxPKXt2YXIgUD1ULzIsJD1MLzI7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCkseS5tb3ZlVG8oZytQKk9bMF0seCskKk9bMV0pO2Zvcih2YXIgcT0xO3E8Ty5sZW5ndGgvMjtxKyspeS5saW5lVG8oZytQKk9bcSoyXSx4KyQqT1txKjIrMV0pO3kuY2xvc2VQYXRoKCl9LE8zLmRyYXdSb3VuZFBvbHlnb25QYXRoPWZ1bmN0aW9uKHksZyx4LFQsTCxPKXt2YXIgUD1ULzIsJD1MLzIscT1ETChULEwpO3kuYmVnaW5QYXRoJiZ5LmJlZ2luUGF0aCgpO2Zvcih2YXIgUz0wO1M8Ty5sZW5ndGgvNDtTKyspe3ZhciBWPXZvaWQgMCxZPXZvaWQgMDtTPT09MD9WPU8ubGVuZ3RoLTI6Vj1TKjQtMixZPVMqNCsyO3ZhciBydD1nK1AqT1tTKjRdLG90PXgrJCpPW1MqNCsxXSxodD0tT1tWXSpPW1ldLU9bVisxXSpPW1krMV0sZHQ9cS9NYXRoLnRhbihNYXRoLmFjb3MoaHQpLzIpLEx0PXJ0LWR0Kk9bVl0sa3Q9b3QtZHQqT1tWKzFdLER0PXJ0K2R0Kk9bWV0sUHQ9b3QrZHQqT1tZKzFdO1M9PT0wP3kubW92ZVRvKEx0LGt0KTp5LmxpbmVUbyhMdCxrdCkseS5hcmNUbyhydCxvdCxEdCxQdCxxKX15LmNsb3NlUGF0aCgpfSxPMy5kcmF3Um91bmRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4LFQsTCl7dmFyIE89VC8yLFA9TC8yLCQ9TGsoVCxMKTt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbyhnLHgtUCkseS5hcmNUbyhnK08seC1QLGcrTyx4LCQpLHkuYXJjVG8oZytPLHgrUCxnLHgrUCwkKSx5LmFyY1RvKGctTyx4K1AsZy1PLHgsJCkseS5hcmNUbyhnLU8seC1QLGcseC1QLCQpLHkubGluZVRvKGcseC1QKSx5LmNsb3NlUGF0aCgpfSxPMy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4LFQsTCl7dmFyIE89VC8yLFA9TC8yLCQ9TGsoVCxMKTt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbyhnLHgtUCkseS5saW5lVG8oZytPLHgtUCkseS5saW5lVG8oZytPLHgpLHkuYXJjVG8oZytPLHgrUCxnLHgrUCwkKSx5LmFyY1RvKGctTyx4K1AsZy1PLHgsJCkseS5saW5lVG8oZy1PLHgtUCkseS5saW5lVG8oZyx4LVApLHkuY2xvc2VQYXRoKCl9LE8zLmRyYXdDdXRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHksZyx4LFQsTCl7dmFyIE89VC8yLFA9TC8yLCQ9Yk4oKTt5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5Lm1vdmVUbyhnLU8rJCx4LVApLHkubGluZVRvKGcrTy0kLHgtUCkseS5saW5lVG8oZytPLHgtUCskKSx5LmxpbmVUbyhnK08seCtQLSQpLHkubGluZVRvKGcrTy0kLHgrUCkseS5saW5lVG8oZy1PKyQseCtQKSx5LmxpbmVUbyhnLU8seCtQLSQpLHkubGluZVRvKGctTyx4LVArJCkseS5jbG9zZVBhdGgoKX0sTzMuZHJhd0JhcnJlbFBhdGg9ZnVuY3Rpb24oeSxnLHgsVCxMKXt2YXIgTz1ULzIsUD1MLzIsJD1nLU8scT1nK08sUz14LVAsVj14K1AsWT1JTChULEwpLHJ0PVkud2lkdGhPZmZzZXQsb3Q9WS5oZWlnaHRPZmZzZXQsaHQ9WS5jdHJsUHRPZmZzZXRQY3QqcnQ7eS5iZWdpblBhdGgmJnkuYmVnaW5QYXRoKCkseS5tb3ZlVG8oJCxTK290KSx5LmxpbmVUbygkLFYtb3QpLHkucXVhZHJhdGljQ3VydmVUbygkK2h0LFYsJCtydCxWKSx5LmxpbmVUbyhxLXJ0LFYpLHkucXVhZHJhdGljQ3VydmVUbyhxLWh0LFYscSxWLW90KSx5LmxpbmVUbyhxLFMrb3QpLHkucXVhZHJhdGljQ3VydmVUbyhxLWh0LFMscS1ydCxTKSx5LmxpbmVUbygkK3J0LFMpLHkucXVhZHJhdGljQ3VydmVUbygkK2h0LFMsJCxTK290KSx5LmNsb3NlUGF0aCgpfTtmb3IodmFyIEZ0dD1NYXRoLnNpbigwKSxOdHQ9TWF0aC5jb3MoMCksY1I9e30sdVI9e30sQnR0PU1hdGguUEkvNDAsSms9MCpNYXRoLlBJO0prPDIqTWF0aC5QSTtKays9QnR0KWNSW0prXT1NYXRoLnNpbihKayksdVJbSmtdPU1hdGguY29zKEprKTtPMy5kcmF3RWxsaXBzZVBhdGg9ZnVuY3Rpb24oeSxnLHgsVCxMKXtpZih5LmJlZ2luUGF0aCYmeS5iZWdpblBhdGgoKSx5LmVsbGlwc2UpeS5lbGxpcHNlKGcseCxULzIsTC8yLDAsMCwyKk1hdGguUEkpO2Vsc2UgZm9yKHZhciBPLFAsJD1ULzIscT1MLzIsUz0wKk1hdGguUEk7UzwyKk1hdGguUEk7Uys9QnR0KU89Zy0kKmNSW1NdKkZ0dCskKnVSW1NdKk50dCxQPXgrcSp1UltTXSpGdHQrcSpjUltTXSpOdHQsUz09PTA/eS5tb3ZlVG8oTyxQKTp5LmxpbmVUbyhPLFApO3kuY2xvc2VQYXRoKCl9O3ZhciBfQz17fTtfQy5jcmVhdGVCdWZmZXI9ZnVuY3Rpb24oeSxnKXt2YXIgeD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4geC53aWR0aD15LHguaGVpZ2h0PWcsW3gseC5nZXRDb250ZXh0KCIyZCIpXX0sX0MuYnVmZmVyQ2FudmFzSW1hZ2U9ZnVuY3Rpb24oeSl7dmFyIGc9dGhpcy5jeSx4PWcubXV0YWJsZUVsZW1lbnRzKCksVD14LmJvdW5kaW5nQm94KCksTD10aGlzLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKSxPPXkuZnVsbD9NYXRoLmNlaWwoVC53KTpMWzJdLFA9eS5mdWxsP01hdGguY2VpbChULmgpOkxbM10sJD1YKHkubWF4V2lkdGgpfHxYKHkubWF4SGVpZ2h0KSxxPXRoaXMuZ2V0UGl4ZWxSYXRpbygpLFM9MTtpZih5LnNjYWxlIT09dm9pZCAwKU8qPXkuc2NhbGUsUCo9eS5zY2FsZSxTPXkuc2NhbGU7ZWxzZSBpZigkKXt2YXIgVj0xLzAsWT0xLzA7WCh5Lm1heFdpZHRoKSYmKFY9Uyp5Lm1heFdpZHRoL08pLFgoeS5tYXhIZWlnaHQpJiYoWT1TKnkubWF4SGVpZ2h0L1ApLFM9TWF0aC5taW4oVixZKSxPKj1TLFAqPVN9JHx8KE8qPXEsUCo9cSxTKj1xKTt2YXIgcnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cnQud2lkdGg9TyxydC5oZWlnaHQ9UCxydC5zdHlsZS53aWR0aD1PKyJweCIscnQuc3R5bGUuaGVpZ2h0PVArInB4Ijt2YXIgb3Q9cnQuZ2V0Q29udGV4dCgiMmQiKTtpZihPPjAmJlA+MCl7b3QuY2xlYXJSZWN0KDAsMCxPLFApLG90Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiO3ZhciBodD10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7aWYoeS5mdWxsKW90LnRyYW5zbGF0ZSgtVC54MSpTLC1ULnkxKlMpLG90LnNjYWxlKFMsUyksdGhpcy5kcmF3RWxlbWVudHMob3QsaHQpLG90LnNjYWxlKDEvUywxL1MpLG90LnRyYW5zbGF0ZShULngxKlMsVC55MSpTKTtlbHNle3ZhciBkdD1nLnBhbigpLEx0PXt4OmR0LngqUyx5OmR0LnkqU307Uyo9Zy56b29tKCksb3QudHJhbnNsYXRlKEx0LngsTHQueSksb3Quc2NhbGUoUyxTKSx0aGlzLmRyYXdFbGVtZW50cyhvdCxodCksb3Quc2NhbGUoMS9TLDEvUyksb3QudHJhbnNsYXRlKC1MdC54LC1MdC55KX15LmJnJiYob3QuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIixvdC5maWxsU3R5bGU9eS5iZyxvdC5yZWN0KDAsMCxPLFApLG90LmZpbGwoKSl9cmV0dXJuIHJ0fTtmdW5jdGlvbiB4cHQoeSxnKXtmb3IodmFyIHg9YXRvYih5KSxUPW5ldyBBcnJheUJ1ZmZlcih4Lmxlbmd0aCksTD1uZXcgVWludDhBcnJheShUKSxPPTA7Tzx4Lmxlbmd0aDtPKyspTFtPXT14LmNoYXJDb2RlQXQoTyk7cmV0dXJuIG5ldyBCbG9iKFtUXSx7dHlwZTpnfSl9ZnVuY3Rpb24gUnR0KHkpe3ZhciBnPXkuaW5kZXhPZigiLCIpO3JldHVybiB5LnN1YnN0cihnKzEpfWZ1bmN0aW9uIGp0dCh5LGcseCl7dmFyIFQ9ZnVuY3Rpb24oKXtyZXR1cm4gZy50b0RhdGFVUkwoeCx5LnF1YWxpdHkpfTtzd2l0Y2goeS5vdXRwdXQpe2Nhc2UiYmxvYi1wcm9taXNlIjpyZXR1cm4gbmV3IGV4KGZ1bmN0aW9uKEwsTyl7dHJ5e2cudG9CbG9iKGZ1bmN0aW9uKFApe1AhPW51bGw/TChQKTpPKG5ldyBFcnJvcigiYGNhbnZhcy50b0Jsb2IoKWAgc2VudCBhIG51bGwgdmFsdWUgaW4gaXRzIGNhbGxiYWNrIikpfSx4LHkucXVhbGl0eSl9Y2F0Y2goUCl7TyhQKX19KTtjYXNlImJsb2IiOnJldHVybiB4cHQoUnR0KFQoKSkseCk7Y2FzZSJiYXNlNjQiOnJldHVybiBSdHQoVCgpKTtjYXNlImJhc2U2NHVyaSI6ZGVmYXVsdDpyZXR1cm4gVCgpfX1fQy5wbmc9ZnVuY3Rpb24oeSl7cmV0dXJuIGp0dCh5LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UoeSksImltYWdlL3BuZyIpfSxfQy5qcGc9ZnVuY3Rpb24oeSl7cmV0dXJuIGp0dCh5LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UoeSksImltYWdlL2pwZWciKX07dmFyICR0dD17fTskdHQubm9kZVNoYXBlSW1wbD1mdW5jdGlvbih5LGcseCxULEwsTyxQKXtzd2l0Y2goeSl7Y2FzZSJlbGxpcHNlIjpyZXR1cm4gdGhpcy5kcmF3RWxsaXBzZVBhdGgoZyx4LFQsTCxPKTtjYXNlInBvbHlnb24iOnJldHVybiB0aGlzLmRyYXdQb2x5Z29uUGF0aChnLHgsVCxMLE8sUCk7Y2FzZSJyb3VuZC1wb2x5Z29uIjpyZXR1cm4gdGhpcy5kcmF3Um91bmRQb2x5Z29uUGF0aChnLHgsVCxMLE8sUCk7Y2FzZSJyb3VuZHJlY3RhbmdsZSI6Y2FzZSJyb3VuZC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoZyx4LFQsTCxPKTtjYXNlImN1dHJlY3RhbmdsZSI6Y2FzZSJjdXQtcmVjdGFuZ2xlIjpyZXR1cm4gdGhpcy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aChnLHgsVCxMLE8pO2Nhc2UiYm90dG9tcm91bmRyZWN0YW5nbGUiOmNhc2UiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChnLHgsVCxMLE8pO2Nhc2UiYmFycmVsIjpyZXR1cm4gdGhpcy5kcmF3QmFycmVsUGF0aChnLHgsVCxMLE8pfX07dmFyIGtwdD1sUix2Yz1sUi5wcm90b3R5cGU7dmMuQ0FOVkFTX0xBWUVSUz0zLHZjLlNFTEVDVF9CT1g9MCx2Yy5EUkFHPTEsdmMuTk9ERT0yLHZjLkJVRkZFUl9DT1VOVD0zLHZjLlRFWFRVUkVfQlVGRkVSPTAsdmMuTU9USU9OQkxVUl9CVUZGRVJfTk9ERT0xLHZjLk1PVElPTkJMVVJfQlVGRkVSX0RSQUc9MjtmdW5jdGlvbiBsUih5KXt2YXIgZz10aGlzO2cuZGF0YT17Y2FudmFzZXM6bmV3IEFycmF5KHZjLkNBTlZBU19MQVlFUlMpLGNvbnRleHRzOm5ldyBBcnJheSh2Yy5DQU5WQVNfTEFZRVJTKSxjYW52YXNOZWVkc1JlZHJhdzpuZXcgQXJyYXkodmMuQ0FOVkFTX0xBWUVSUyksYnVmZmVyQ2FudmFzZXM6bmV3IEFycmF5KHZjLkJVRkZFUl9DT1VOVCksYnVmZmVyQ29udGV4dHM6bmV3IEFycmF5KHZjLkNBTlZBU19MQVlFUlMpfTt2YXIgeD0iLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIixUPSJyZ2JhKDAsMCwwLDApIjtnLmRhdGEuY2FudmFzQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ZhciBMPWcuZGF0YS5jYW52YXNDb250YWluZXIuc3R5bGU7Zy5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZVt4XT1ULEwucG9zaXRpb249InJlbGF0aXZlIixMLnpJbmRleD0iMCIsTC5vdmVyZmxvdz0iaGlkZGVuIjt2YXIgTz15LmN5LmNvbnRhaW5lcigpO08uYXBwZW5kQ2hpbGQoZy5kYXRhLmNhbnZhc0NvbnRhaW5lciksTy5zdHlsZVt4XT1UO3ZhciBQPXsiLXdlYmtpdC11c2VyLXNlbGVjdCI6Im5vbmUiLCItbW96LXVzZXItc2VsZWN0IjoiLW1vei1ub25lIiwidXNlci1zZWxlY3QiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjoicmdiYSgwLDAsMCwwKSIsIm91dGxpbmUtc3R5bGUiOiJub25lIn07TGUoKSYmKFBbIi1tcy10b3VjaC1hY3Rpb24iXT0ibm9uZSIsUFsidG91Y2gtYWN0aW9uIl09Im5vbmUiKTtmb3IodmFyICQ9MDskPHZjLkNBTlZBU19MQVlFUlM7JCsrKXt2YXIgcT1nLmRhdGEuY2FudmFzZXNbJF09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Zy5kYXRhLmNvbnRleHRzWyRdPXEuZ2V0Q29udGV4dCgiMmQiKSxPYmplY3Qua2V5cyhQKS5mb3JFYWNoKGZ1bmN0aW9uKGVyKXtxLnN0eWxlW2VyXT1QW2VyXX0pLHEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixxLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIiskKSxxLnN0eWxlLnpJbmRleD1TdHJpbmcodmMuQ0FOVkFTX0xBWUVSUy0kKSxnLmRhdGEuY2FudmFzQ29udGFpbmVyLmFwcGVuZENoaWxkKHEpLGcuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1skXT0hMX1nLmRhdGEudG9wQ2FudmFzPWcuZGF0YS5jYW52YXNlc1swXSxnLmRhdGEuY2FudmFzZXNbdmMuTk9ERV0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK3ZjLk5PREUrIi1ub2RlIiksZy5kYXRhLmNhbnZhc2VzW3ZjLlNFTEVDVF9CT1hdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIit2Yy5TRUxFQ1RfQk9YKyItc2VsZWN0Ym94IiksZy5kYXRhLmNhbnZhc2VzW3ZjLkRSQUddLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIit2Yy5EUkFHKyItZHJhZyIpO2Zvcih2YXIgJD0wOyQ8dmMuQlVGRkVSX0NPVU5UOyQrKylnLmRhdGEuYnVmZmVyQ2FudmFzZXNbJF09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZy5kYXRhLmJ1ZmZlckNvbnRleHRzWyRdPWcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5nZXRDb250ZXh0KCIyZCIpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJidWZmZXIiKyQpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS56SW5kZXg9U3RyaW5nKC0kLTEpLGcuZGF0YS5idWZmZXJDYW52YXNlc1skXS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iO2cucGF0aHNFbmFibGVkPSEwO3ZhciBTPXpkKCksVj1mdW5jdGlvbih2bil7cmV0dXJue3g6KHZuLngxK3ZuLngyKS8yLHk6KHZuLnkxK3ZuLnkyKS8yfX0sWT1mdW5jdGlvbih2bil7cmV0dXJue3g6LXZuLncvMix5Oi12bi5oLzJ9fSxydD1mdW5jdGlvbih2bil7dmFyIGdyPXZuWzBdLl9wcml2YXRlLGZyPWdyLm9sZEJhY2tncm91bmRUaW1lc3RhbXA9PT1nci5iYWNrZ3JvdW5kVGltZXN0YW1wO3JldHVybiFmcn0sb3Q9ZnVuY3Rpb24odm4pe3JldHVybiB2blswXS5fcHJpdmF0ZS5ub2RlS2V5fSxodD1mdW5jdGlvbih2bil7cmV0dXJuIHZuWzBdLl9wcml2YXRlLmxhYmVsU3R5bGVLZXl9LGR0PWZ1bmN0aW9uKHZuKXtyZXR1cm4gdm5bMF0uX3ByaXZhdGUuc291cmNlTGFiZWxTdHlsZUtleX0sTHQ9ZnVuY3Rpb24odm4pe3JldHVybiB2blswXS5fcHJpdmF0ZS50YXJnZXRMYWJlbFN0eWxlS2V5fSxrdD1mdW5jdGlvbih2bixncixmcixKcix2aSl7cmV0dXJuIGcuZHJhd0VsZW1lbnQodm4sZ3IsZnIsITEsITEsdmkpfSxEdD1mdW5jdGlvbih2bixncixmcixKcix2aSl7cmV0dXJuIGcuZHJhd0VsZW1lbnRUZXh0KHZuLGdyLGZyLEpyLCJtYWluIix2aSl9LFB0PWZ1bmN0aW9uKHZuLGdyLGZyLEpyLHZpKXtyZXR1cm4gZy5kcmF3RWxlbWVudFRleHQodm4sZ3IsZnIsSnIsInNvdXJjZSIsdmkpfSwkdD1mdW5jdGlvbih2bixncixmcixKcix2aSl7cmV0dXJuIGcuZHJhd0VsZW1lbnRUZXh0KHZuLGdyLGZyLEpyLCJ0YXJnZXQiLHZpKX0sWnQ9ZnVuY3Rpb24odm4pe3JldHVybiB2bi5ib3VuZGluZ0JveCgpLHZuWzBdLl9wcml2YXRlLmJvZHlCb3VuZHN9LFl0PWZ1bmN0aW9uKHZuKXtyZXR1cm4gdm4uYm91bmRpbmdCb3goKSx2blswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5tYWlufHxTfSxxdD1mdW5jdGlvbih2bil7cmV0dXJuIHZuLmJvdW5kaW5nQm94KCksdm5bMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMuc291cmNlfHxTfSxuZT1mdW5jdGlvbih2bil7cmV0dXJuIHZuLmJvdW5kaW5nQm94KCksdm5bMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMudGFyZ2V0fHxTfSxHdD1mdW5jdGlvbih2bixncil7cmV0dXJuIGdyfSxnZT1mdW5jdGlvbih2bil7cmV0dXJuIFYoWnQodm4pKX0sYmU9ZnVuY3Rpb24odm4sZ3IsZnIpe3ZhciBKcj12bj92bisiLSI6IiI7cmV0dXJue3g6Z3IueCtmci5wc3R5bGUoSnIrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLHk6Z3IueStmci5wc3R5bGUoSnIrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlfX0saWU9ZnVuY3Rpb24odm4sZ3IsZnIpe3ZhciBKcj12blswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm57eDpKcltncl0seTpKcltmcl19fSxGZT1mdW5jdGlvbih2bil7cmV0dXJuIGJlKCIiLGllKHZuLCJsYWJlbFgiLCJsYWJlbFkiKSx2bil9LHdlPWZ1bmN0aW9uKHZuKXtyZXR1cm4gYmUoInNvdXJjZSIsaWUodm4sInNvdXJjZUxhYmVsWCIsInNvdXJjZUxhYmVsWSIpLHZuKX0sYm49ZnVuY3Rpb24odm4pe3JldHVybiBiZSgidGFyZ2V0IixpZSh2biwidGFyZ2V0TGFiZWxYIiwidGFyZ2V0TGFiZWxZIiksdm4pfSx6ZT1mdW5jdGlvbih2bil7cmV0dXJuIFkoWnQodm4pKX0sR2U9ZnVuY3Rpb24odm4pe3JldHVybiBZKHF0KHZuKSl9LEVuPWZ1bmN0aW9uKHZuKXtyZXR1cm4gWShuZSh2bikpfSxJbj1mdW5jdGlvbih2bil7dmFyIGdyPVl0KHZuKSxmcj1ZKFl0KHZuKSk7aWYodm4uaXNOb2RlKCkpe3N3aXRjaCh2bi5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWUpe2Nhc2UibGVmdCI6ZnIueD0tZ3IudzticmVhaztjYXNlInJpZ2h0Ijpmci54PTA7YnJlYWt9c3dpdGNoKHZuLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZSl7Y2FzZSJ0b3AiOmZyLnk9LWdyLmg7YnJlYWs7Y2FzZSJib3R0b20iOmZyLnk9MDticmVha319cmV0dXJuIGZyfSxZbj1nLmRhdGEuZWxlVHhyQ2FjaGU9bmV3IEtrKGcse2dldEtleTpvdCxkb2VzRWxlSW52YWxpZGF0ZUtleTpydCxkcmF3RWxlbWVudDprdCxnZXRCb3VuZGluZ0JveDpadCxnZXRSb3RhdGlvblBvaW50OmdlLGdldFJvdGF0aW9uT2Zmc2V0OnplLGFsbG93RWRnZVR4ckNhY2hpbmc6ITEsYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiExfSksU249Zy5kYXRhLmxibFR4ckNhY2hlPW5ldyBLayhnLHtnZXRLZXk6aHQsZHJhd0VsZW1lbnQ6RHQsZ2V0Qm91bmRpbmdCb3g6WXQsZ2V0Um90YXRpb25Qb2ludDpGZSxnZXRSb3RhdGlvbk9mZnNldDpJbixpc1Zpc2libGU6R3R9KSxXbj1nLmRhdGEuc2xiVHhyQ2FjaGU9bmV3IEtrKGcse2dldEtleTpkdCxkcmF3RWxlbWVudDpQdCxnZXRCb3VuZGluZ0JveDpxdCxnZXRSb3RhdGlvblBvaW50OndlLGdldFJvdGF0aW9uT2Zmc2V0OkdlLGlzVmlzaWJsZTpHdH0pLHJyPWcuZGF0YS50bGJUeHJDYWNoZT1uZXcgS2soZyx7Z2V0S2V5Okx0LGRyYXdFbGVtZW50OiR0LGdldEJvdW5kaW5nQm94Om5lLGdldFJvdGF0aW9uUG9pbnQ6Ym4sZ2V0Um90YXRpb25PZmZzZXQ6RW4saXNWaXNpYmxlOkd0fSksd3I9Zy5kYXRhLmx5clR4ckNhY2hlPW5ldyBMdHQoZyk7Zy5vblVwZGF0ZUVsZUNhbGNzKGZ1bmN0aW9uKHZuLGdyKXtZbi5pbnZhbGlkYXRlRWxlbWVudHMoZ3IpLFNuLmludmFsaWRhdGVFbGVtZW50cyhnciksV24uaW52YWxpZGF0ZUVsZW1lbnRzKGdyKSxyci5pbnZhbGlkYXRlRWxlbWVudHMoZ3IpLHdyLmludmFsaWRhdGVFbGVtZW50cyhncik7Zm9yKHZhciBmcj0wO2ZyPGdyLmxlbmd0aDtmcisrKXt2YXIgSnI9Z3JbZnJdLl9wcml2YXRlO0pyLm9sZEJhY2tncm91bmRUaW1lc3RhbXA9SnIuYmFja2dyb3VuZFRpbWVzdGFtcH19KTt2YXIgdXI9ZnVuY3Rpb24odm4pe2Zvcih2YXIgZ3I9MDtncjx2bi5sZW5ndGg7Z3IrKyl3ci5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQodm5bZ3JdLmVsZSl9O1luLm9uRGVxdWV1ZSh1ciksU24ub25EZXF1ZXVlKHVyKSxXbi5vbkRlcXVldWUodXIpLHJyLm9uRGVxdWV1ZSh1cil9dmMucmVkcmF3SGludD1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXM7c3dpdGNoKHkpe2Nhc2UiZWxlcyI6eC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3ZjLk5PREVdPWc7YnJlYWs7Y2FzZSJkcmFnIjp4LmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbdmMuRFJBR109ZzticmVhaztjYXNlInNlbGVjdCI6eC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3ZjLlNFTEVDVF9CT1hdPWc7YnJlYWt9fTt2YXIgenR0PXR5cGVvZiBQYXRoMkQ8InUiO3ZjLnBhdGgyZEVuYWJsZWQ9ZnVuY3Rpb24oeSl7aWYoeT09PXZvaWQgMClyZXR1cm4gdGhpcy5wYXRoc0VuYWJsZWQ7dGhpcy5wYXRoc0VuYWJsZWQ9ISF5fSx2Yy51c2VQYXRocz1mdW5jdGlvbigpe3JldHVybiB6dHQmJnRoaXMucGF0aHNFbmFibGVkfSx2Yy5zZXRJbWdTbW9vdGhpbmc9ZnVuY3Rpb24oeSxnKXt5LmltYWdlU21vb3RoaW5nRW5hYmxlZCE9bnVsbD95LmltYWdlU21vb3RoaW5nRW5hYmxlZD1nOih5LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZD1nLHkubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkPWcseS5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZD1nKX0sdmMuZ2V0SW1nU21vb3RoaW5nPWZ1bmN0aW9uKHkpe3JldHVybiB5LmltYWdlU21vb3RoaW5nRW5hYmxlZCE9bnVsbD95LmltYWdlU21vb3RoaW5nRW5hYmxlZDp5LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZHx8eS5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWR8fHkubXNJbWFnZVNtb290aGluZ0VuYWJsZWR9LHZjLm1ha2VPZmZzY3JlZW5DYW52YXM9ZnVuY3Rpb24oeSxnKXt2YXIgeDtyZXR1cm4odHlwZW9mIE9mZnNjcmVlbkNhbnZhcz4idSI/InVuZGVmaW5lZCI6ZihPZmZzY3JlZW5DYW52YXMpKSE9PSJ1bmRlZmluZWQiP3g9bmV3IE9mZnNjcmVlbkNhbnZhcyh5LGcpOih4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHgud2lkdGg9eSx4LmhlaWdodD1nKSx4fSxbRDAsd3csdncsQ0MsdngsWmssVGcsTzMsX0MsJHR0XS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2RlKHZjLHkpfSk7dmFyIG14PVt7bmFtZToibnVsbCIsaW1wbDpXQn0se25hbWU6ImJhc2UiLGltcGw6bk19LHtuYW1lOiJjYW52YXMiLGltcGw6a3B0fV0sQ2c9W3t0eXBlOiJsYXlvdXQiLGV4dGVuc2lvbnM6bHR0fSx7dHlwZToicmVuZGVyZXIiLGV4dGVuc2lvbnM6bXh9XSxTbT17fSxjTT17fTtmdW5jdGlvbiB2MSh5LGcseCl7dmFyIFQ9eCxMPWZ1bmN0aW9uKG5lKXtTYygiQ2FuIG5vdCByZWdpc3RlciBgIitnKyJgIGZvciBgIit5KyJgIHNpbmNlIGAiK25lKyJgIGFscmVhZHkgZXhpc3RzIGluIHRoZSBwcm90b3R5cGUgYW5kIGNhbiBub3QgYmUgb3ZlcnJpZGRlbiIpfTtpZih5PT09ImNvcmUiKXtpZihWay5wcm90b3R5cGVbZ10pcmV0dXJuIEwoZyk7VmsucHJvdG90eXBlW2ddPXh9ZWxzZSBpZih5PT09ImNvbGxlY3Rpb24iKXtpZigkZi5wcm90b3R5cGVbZ10pcmV0dXJuIEwoZyk7JGYucHJvdG90eXBlW2ddPXh9ZWxzZSBpZih5PT09ImxheW91dCIpe2Zvcih2YXIgTz1mdW5jdGlvbihuZSl7dGhpcy5vcHRpb25zPW5lLHguY2FsbCh0aGlzLG5lKSx1dCh0aGlzLl9wcml2YXRlKXx8KHRoaXMuX3ByaXZhdGU9e30pLHRoaXMuX3ByaXZhdGUuY3k9bmUuY3ksdGhpcy5fcHJpdmF0ZS5saXN0ZW5lcnM9W10sdGhpcy5jcmVhdGVFbWl0dGVyKCl9LFA9Ty5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4LnByb3RvdHlwZSksJD1bXSxxPTA7cTwkLmxlbmd0aDtxKyspe3ZhciBTPSRbcV07UFtTXT1QW1NdfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfX1QLnN0YXJ0JiYhUC5ydW4/UC5ydW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydCgpLHRoaXN9OiFQLnN0YXJ0JiZQLnJ1biYmKFAuc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ydW4oKSx0aGlzfSk7dmFyIFY9eC5wcm90b3R5cGUuc3RvcDtQLnN0b3A9ZnVuY3Rpb24oKXt2YXIgcXQ9dGhpcy5vcHRpb25zO2lmKHF0JiZxdC5hbmltYXRlKXt2YXIgbmU9dGhpcy5hbmltYXRpb25zO2lmKG5lKWZvcih2YXIgR3Q9MDtHdDxuZS5sZW5ndGg7R3QrKyluZVtHdF0uc3RvcCgpfXJldHVybiBWP1YuY2FsbCh0aGlzKTp0aGlzLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxQLmRlc3Ryb3l8fChQLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFAuY3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeX07dmFyIFk9ZnVuY3Rpb24obmUpe3JldHVybiBuZS5fcHJpdmF0ZS5jeX0scnQ9e2FkZEV2ZW50RmllbGRzOmZ1bmN0aW9uKG5lLEd0KXtHdC5sYXlvdXQ9bmUsR3QuY3k9WShuZSksR3QudGFyZ2V0PW5lfSxidWJibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKG5lKXtyZXR1cm4gWShuZSl9fTtkZShQLHtjcmVhdGVFbWl0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcj1uZXcgbkMocnQsdGhpcyksdGhpc30sZW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LG9uOmZ1bmN0aW9uKG5lLEd0KXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub24obmUsR3QpLHRoaXN9LG9uZTpmdW5jdGlvbihuZSxHdCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShuZSxHdCksdGhpc30sb25jZTpmdW5jdGlvbihuZSxHdCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShuZSxHdCksdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24obmUsR3Qpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihuZSxHdCksdGhpc30scmVtb3ZlQWxsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUFsbExpc3RlbmVycygpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24obmUsR3Qpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KG5lLEd0KSx0aGlzfX0pLEFjLmV2ZW50QWxpYXNlc09uKFApLFQ9T31lbHNlIGlmKHk9PT0icmVuZGVyZXIiJiZnIT09Im51bGwiJiZnIT09ImJhc2UiKXt2YXIgb3Q9eXgoInJlbmRlcmVyIiwiYmFzZSIpLGh0PW90LnByb3RvdHlwZSxkdD14LEx0PXgucHJvdG90eXBlLGt0PWZ1bmN0aW9uKCl7b3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGR0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sRHQ9a3QucHJvdG90eXBlO2Zvcih2YXIgUHQgaW4gaHQpe3ZhciAkdD1odFtQdF0sWnQ9THRbUHRdIT1udWxsO2lmKFp0KXJldHVybiBMKFB0KTtEdFtQdF09JHR9Zm9yKHZhciBZdCBpbiBMdClEdFtZdF09THRbWXRdO2h0LmNsaWVudEZ1bmN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHF0KXtEdFtxdF09RHRbcXRdfHxmdW5jdGlvbigpe3ZsKCJSZW5kZXJlciBkb2VzIG5vdCBpbXBsZW1lbnQgYHJlbmRlcmVyLiIrcXQrIigpYCBvbiBpdHMgcHJvdG90eXBlIil9fSksVD1rdH1lbHNlIGlmKHk9PT0iX19wcm90b19fInx8eT09PSJjb25zdHJ1Y3RvciJ8fHk9PT0icHJvdG90eXBlIilyZXR1cm4gdmwoeSsiIGlzIGFuIGlsbGVnYWwgdHlwZSB0byBiZSByZWdpc3RlcmVkLCBwb3NzaWJseSBsZWFkIHRvIHByb3RvdHlwZSBwb2xsdXRpb25zIik7cmV0dXJuIEVyKHttYXA6U20sa2V5czpbeSxnXSx2YWx1ZTpUfSl9ZnVuY3Rpb24geXgoeSxnKXtyZXR1cm4gWG4oe21hcDpTbSxrZXlzOlt5LGddfSl9ZnVuY3Rpb24gcXR0KHksZyx4LFQsTCl7cmV0dXJuIEVyKHttYXA6Y00sa2V5czpbeSxnLHgsVF0sdmFsdWU6TH0pfWZ1bmN0aW9uIGhSKHksZyx4LFQpe3JldHVybiBYbih7bWFwOmNNLGtleXM6W3ksZyx4LFRdfSl9dmFyIFAzPWZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTIpcmV0dXJuIHl4LmFwcGx5KG51bGwsYXJndW1lbnRzKTtpZihhcmd1bWVudHMubGVuZ3RoPT09MylyZXR1cm4gdjEuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT00KXJldHVybiBoUi5hcHBseShudWxsLGFyZ3VtZW50cyk7aWYoYXJndW1lbnRzLmxlbmd0aD09PTUpcmV0dXJuIHF0dC5hcHBseShudWxsLGFyZ3VtZW50cyk7dmwoIkludmFsaWQgZXh0ZW5zaW9uIGFjY2VzcyBzeW50YXgiKX07VmsucHJvdG90eXBlLmV4dGVuc2lvbj1QMyxDZy5mb3JFYWNoKGZ1bmN0aW9uKHkpe3kuZXh0ZW5zaW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGcpe3YxKHkudHlwZSxnLm5hbWUsZy5pbXBsKX0pfSk7dmFyIHVNPWZ1bmN0aW9uIHkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiB5KSlyZXR1cm4gbmV3IHk7dGhpcy5sZW5ndGg9MH0sQW09dU0ucHJvdG90eXBlO0FtLmluc3RhbmNlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInN0eWxlc2hlZXQifSxBbS5zZWxlY3Rvcj1mdW5jdGlvbih5KXt2YXIgZz10aGlzLmxlbmd0aCsrO3JldHVybiB0aGlzW2ddPXtzZWxlY3Rvcjp5LHByb3BlcnRpZXM6W119LHRoaXN9LEFtLmNzcz1mdW5jdGlvbih5LGcpe3ZhciB4PXRoaXMubGVuZ3RoLTE7aWYobXQoeSkpdGhpc1t4XS5wcm9wZXJ0aWVzLnB1c2goe25hbWU6eSx2YWx1ZTpnfSk7ZWxzZSBpZih1dCh5KSlmb3IodmFyIFQ9eSxMPU9iamVjdC5rZXlzKFQpLE89MDtPPEwubGVuZ3RoO08rKyl7dmFyIFA9TFtPXSwkPVRbUF07aWYoJCE9bnVsbCl7dmFyIHE9cDEucHJvcGVydGllc1tQXXx8cDEucHJvcGVydGllc1tTZShQKV07aWYocSE9bnVsbCl7dmFyIFM9cS5uYW1lLFY9JDt0aGlzW3hdLnByb3BlcnRpZXMucHVzaCh7bmFtZTpTLHZhbHVlOlZ9KX19fXJldHVybiB0aGlzfSxBbS5zdHlsZT1BbS5jc3MsQW0uZ2VuZXJhdGVTdHlsZT1mdW5jdGlvbih5KXt2YXIgZz1uZXcgcDEoeSk7cmV0dXJuIHRoaXMuYXBwZW5kVG9TdHlsZShnKX0sQW0uYXBwZW5kVG9TdHlsZT1mdW5jdGlvbih5KXtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIHg9dGhpc1tnXSxUPXguc2VsZWN0b3IsTD14LnByb3BlcnRpZXM7eS5zZWxlY3RvcihUKTtmb3IodmFyIE89MDtPPEwubGVuZ3RoO08rKyl7dmFyIFA9TFtPXTt5LmNzcyhQLm5hbWUsUC52YWx1ZSl9fXJldHVybiB5fTt2YXIgZlI9IjMuMjMuMCIsbTE9ZnVuY3Rpb24oZyl7aWYoZz09PXZvaWQgMCYmKGc9e30pLHV0KGcpKXJldHVybiBuZXcgVmsoZyk7aWYobXQoZykpcmV0dXJuIFAzLmFwcGx5KFAzLGFyZ3VtZW50cyl9O3JldHVybiBtMS51c2U9ZnVuY3Rpb24oeSl7dmFyIGc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBnLnVuc2hpZnQobTEpLHkuYXBwbHkobnVsbCxnKSx0aGlzfSxtMS53YXJuaW5ncz1mdW5jdGlvbih5KXtyZXR1cm4gaU4oeSl9LG0xLnZlcnNpb249ZlIsbTEuc3R5bGVzaGVldD1tMS5TdHlsZXNoZWV0PXVNLG0xfSl9KSh1JHQpO3ZhciBhWWU9dSR0LmV4cG9ydHM7Y29uc3QgbCR0PUc3KGFZZSk7dmFyIGgkdD17ZXhwb3J0czp7fX0sdHB0PXtleHBvcnRzOnt9fSxlcHQ9e2V4cG9ydHM6e319LGYkdDtmdW5jdGlvbiBvWWUoKXtyZXR1cm4gZiR0fHwoZiR0PTEsZnVuY3Rpb24oaSxhKXsoZnVuY3Rpb24ocCx3KXtpLmV4cG9ydHM9dygpfSkoYjAsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZil7dmFyIHA9e307ZnVuY3Rpb24gdyhtKXtpZihwW21dKXJldHVybiBwW21dLmV4cG9ydHM7dmFyIGI9cFttXT17aTptLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGZbbV0uY2FsbChiLmV4cG9ydHMsYixiLmV4cG9ydHMsdyksYi5sPSEwLGIuZXhwb3J0c31yZXR1cm4gdy5tPWYsdy5jPXAsdy5pPWZ1bmN0aW9uKG0pe3JldHVybiBtfSx3LmQ9ZnVuY3Rpb24obSxiLEUpe3cubyhtLGIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6RX0pfSx3Lm49ZnVuY3Rpb24obSl7dmFyIGI9bSYmbS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIG0uZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gbX07cmV0dXJuIHcuZChiLCJhIixiKSxifSx3Lm89ZnVuY3Rpb24obSxiKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG0sYil9LHcucD0iIix3KHcucz0yNil9KFtmdW5jdGlvbihmLHAsdyl7ZnVuY3Rpb24gbSgpe31tLlFVQUxJVFk9MSxtLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRD0hMSxtLkRFRkFVTFRfSU5DUkVNRU5UQUw9ITEsbS5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQ9ITAsbS5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VUPSExLG0uREVGQVVMVF9BTklNQVRJT05fUEVSSU9EPTUwLG0uREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUz0hMSxtLkRFRkFVTFRfR1JBUEhfTUFSR0lOPTE1LG0uTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPSExLG0uU0lNUExFX05PREVfU0laRT00MCxtLlNJTVBMRV9OT0RFX0hBTEZfU0laRT1tLlNJTVBMRV9OT0RFX1NJWkUvMixtLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRT00MCxtLk1JTl9FREdFX0xFTkdUSD0xLG0uV09STERfQk9VTkRBUlk9MWU2LG0uSU5JVElBTF9XT1JMRF9CT1VOREFSWT1tLldPUkxEX0JPVU5EQVJZLzFlMyxtLldPUkxEX0NFTlRFUl9YPTEyMDAsbS5XT1JMRF9DRU5URVJfWT05MDAsZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx3KXt2YXIgbT13KDIpLGI9dyg4KSxFPXcoOSk7ZnVuY3Rpb24gXyhJLEIsTil7bS5jYWxsKHRoaXMsTiksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ITEsdGhpcy52R3JhcGhPYmplY3Q9Tix0aGlzLmJlbmRwb2ludHM9W10sdGhpcy5zb3VyY2U9SSx0aGlzLnRhcmdldD1CfV8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpO2Zvcih2YXIgQSBpbiBtKV9bQV09bVtBXTtfLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2V9LF8ucHJvdG90eXBlLmdldFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhcmdldH0sXy5wcm90b3R5cGUuaXNJbnRlckdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbnRlckdyYXBofSxfLnByb3RvdHlwZS5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LF8ucHJvdG90eXBlLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldH0sXy5wcm90b3R5cGUuZ2V0QmVuZHBvaW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJlbmRwb2ludHN9LF8ucHJvdG90eXBlLmdldExjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxjYX0sXy5wcm90b3R5cGUuZ2V0U291cmNlSW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2VJbkxjYX0sXy5wcm90b3R5cGUuZ2V0VGFyZ2V0SW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXRJbkxjYX0sXy5wcm90b3R5cGUuZ2V0T3RoZXJFbmQ9ZnVuY3Rpb24oSSl7aWYodGhpcy5zb3VyY2U9PT1JKXJldHVybiB0aGlzLnRhcmdldDtpZih0aGlzLnRhcmdldD09PUkpcmV0dXJuIHRoaXMuc291cmNlO3Rocm93Ik5vZGUgaXMgbm90IGluY2lkZW50IHdpdGggdGhpcyBlZGdlIn0sXy5wcm90b3R5cGUuZ2V0T3RoZXJFbmRJbkdyYXBoPWZ1bmN0aW9uKEksQil7Zm9yKHZhciBOPXRoaXMuZ2V0T3RoZXJFbmQoSSksUj1CLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKTs7KXtpZihOLmdldE93bmVyKCk9PUIpcmV0dXJuIE47aWYoTi5nZXRPd25lcigpPT1SKWJyZWFrO049Ti5nZXRPd25lcigpLmdldFBhcmVudCgpfXJldHVybiBudWxsfSxfLnByb3RvdHlwZS51cGRhdGVMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgST1uZXcgQXJyYXkoNCk7dGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9Yi5nZXRJbnRlcnNlY3Rpb24odGhpcy50YXJnZXQuZ2V0UmVjdCgpLHRoaXMuc291cmNlLmdldFJlY3QoKSxJKSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldHx8KHRoaXMubGVuZ3RoWD1JWzBdLUlbMl0sdGhpcy5sZW5ndGhZPUlbMV0tSVszXSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9RS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1FLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSkpfSxfLnByb3RvdHlwZS51cGRhdGVMZW5ndGhTaW1wbGU9ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aFg9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWCgpLXRoaXMuc291cmNlLmdldENlbnRlclgoKSx0aGlzLmxlbmd0aFk9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWSgpLXRoaXMuc291cmNlLmdldENlbnRlclkoKSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9RS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1FLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSl9LGYuZXhwb3J0cz1ffSxmdW5jdGlvbihmLHAsdyl7ZnVuY3Rpb24gbShiKXt0aGlzLnZHcmFwaE9iamVjdD1ifWYuZXhwb3J0cz1tfSxmdW5jdGlvbihmLHAsdyl7dmFyIG09dygyKSxiPXcoMTApLEU9dygxMyksXz13KDApLEE9dygxNiksST13KDQpO2Z1bmN0aW9uIEIoUix6LFcsZXQpe1c9PW51bGwmJmV0PT1udWxsJiYoZXQ9eiksbS5jYWxsKHRoaXMsZXQpLFIuZ3JhcGhNYW5hZ2VyIT1udWxsJiYoUj1SLmdyYXBoTWFuYWdlciksdGhpcy5lc3RpbWF0ZWRTaXplPWIuTUlOX1ZBTFVFLHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPWIuTUFYX1ZBTFVFLHRoaXMudkdyYXBoT2JqZWN0PWV0LHRoaXMuZWRnZXM9W10sdGhpcy5ncmFwaE1hbmFnZXI9UixXIT1udWxsJiZ6IT1udWxsP3RoaXMucmVjdD1uZXcgRSh6Lngsei55LFcud2lkdGgsVy5oZWlnaHQpOnRoaXMucmVjdD1uZXcgRX1CLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKTtmb3IodmFyIE4gaW4gbSlCW05dPW1bTl07Qi5wcm90b3R5cGUuZ2V0RWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlc30sQi5wcm90b3R5cGUuZ2V0Q2hpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZH0sQi5wcm90b3R5cGUuZ2V0T3duZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcn0sQi5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LndpZHRofSxCLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihSKXt0aGlzLnJlY3Qud2lkdGg9Un0sQi5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC5oZWlnaHR9LEIucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihSKXt0aGlzLnJlY3QuaGVpZ2h0PVJ9LEIucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzJ9LEIucHJvdG90eXBlLmdldENlbnRlclk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yfSxCLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEkodGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yKX0sQi5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEkodGhpcy5yZWN0LngsdGhpcy5yZWN0LnkpfSxCLnByb3RvdHlwZS5nZXRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdH0sQi5wcm90b3R5cGUuZ2V0RGlhZ29uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0KX0sQi5wcm90b3R5cGUuZ2V0SGFsZlRoZURpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3QuaGVpZ2h0KnRoaXMucmVjdC5oZWlnaHQrdGhpcy5yZWN0LndpZHRoKnRoaXMucmVjdC53aWR0aCkvMn0sQi5wcm90b3R5cGUuc2V0UmVjdD1mdW5jdGlvbihSLHope3RoaXMucmVjdC54PVIueCx0aGlzLnJlY3QueT1SLnksdGhpcy5yZWN0LndpZHRoPXoud2lkdGgsdGhpcy5yZWN0LmhlaWdodD16LmhlaWdodH0sQi5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKFIseil7dGhpcy5yZWN0Lng9Ui10aGlzLnJlY3Qud2lkdGgvMix0aGlzLnJlY3QueT16LXRoaXMucmVjdC5oZWlnaHQvMn0sQi5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oUix6KXt0aGlzLnJlY3QueD1SLHRoaXMucmVjdC55PXp9LEIucHJvdG90eXBlLm1vdmVCeT1mdW5jdGlvbihSLHope3RoaXMucmVjdC54Kz1SLHRoaXMucmVjdC55Kz16fSxCLnByb3RvdHlwZS5nZXRFZGdlTGlzdFRvTm9kZT1mdW5jdGlvbihSKXt2YXIgej1bXSxXPXRoaXM7cmV0dXJuIFcuZWRnZXMuZm9yRWFjaChmdW5jdGlvbihldCl7aWYoZXQudGFyZ2V0PT1SKXtpZihldC5zb3VyY2UhPVcpdGhyb3ciSW5jb3JyZWN0IGVkZ2Ugc291cmNlISI7ei5wdXNoKGV0KX19KSx6fSxCLnByb3RvdHlwZS5nZXRFZGdlc0JldHdlZW49ZnVuY3Rpb24oUil7dmFyIHo9W10sVz10aGlzO3JldHVybiBXLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZXQpe2lmKCEoZXQuc291cmNlPT1XfHxldC50YXJnZXQ9PVcpKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IjsoZXQudGFyZ2V0PT1SfHxldC5zb3VyY2U9PVIpJiZ6LnB1c2goZXQpfSksen0sQi5wcm90b3R5cGUuZ2V0TmVpZ2hib3JzTGlzdD1mdW5jdGlvbigpe3ZhciBSPW5ldyBTZXQsej10aGlzO3JldHVybiB6LmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oVyl7aWYoVy5zb3VyY2U9PXopUi5hZGQoVy50YXJnZXQpO2Vsc2V7aWYoVy50YXJnZXQhPXopdGhyb3ciSW5jb3JyZWN0IGluY2lkZW5jeSEiO1IuYWRkKFcuc291cmNlKX19KSxSfSxCLnByb3RvdHlwZS53aXRoQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgUj1uZXcgU2V0LHosVztpZihSLmFkZCh0aGlzKSx0aGlzLmNoaWxkIT1udWxsKWZvcih2YXIgZXQ9dGhpcy5jaGlsZC5nZXROb2RlcygpLHN0PTA7c3Q8ZXQubGVuZ3RoO3N0Kyspej1ldFtzdF0sVz16LndpdGhDaGlsZHJlbigpLFcuZm9yRWFjaChmdW5jdGlvbihhdCl7Ui5hZGQoYXQpfSk7cmV0dXJuIFJ9LEIucHJvdG90eXBlLmdldE5vT2ZDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBSPTAsejtpZih0aGlzLmNoaWxkPT1udWxsKVI9MTtlbHNlIGZvcih2YXIgVz10aGlzLmNoaWxkLmdldE5vZGVzKCksZXQ9MDtldDxXLmxlbmd0aDtldCsrKXo9V1tldF0sUis9ei5nZXROb09mQ2hpbGRyZW4oKTtyZXR1cm4gUj09MCYmKFI9MSksUn0sQi5wcm90b3R5cGUuZ2V0RXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2lmKHRoaXMuZXN0aW1hdGVkU2l6ZT09Yi5NSU5fVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZX0sQi5wcm90b3R5cGUuY2FsY0VzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZD09bnVsbD90aGlzLmVzdGltYXRlZFNpemU9KHRoaXMucmVjdC53aWR0aCt0aGlzLnJlY3QuaGVpZ2h0KS8yOih0aGlzLmVzdGltYXRlZFNpemU9dGhpcy5jaGlsZC5jYWxjRXN0aW1hdGVkU2l6ZSgpLHRoaXMucmVjdC53aWR0aD10aGlzLmVzdGltYXRlZFNpemUsdGhpcy5yZWN0LmhlaWdodD10aGlzLmVzdGltYXRlZFNpemUsdGhpcy5lc3RpbWF0ZWRTaXplKX0sQi5wcm90b3R5cGUuc2NhdHRlcj1mdW5jdGlvbigpe3ZhciBSLHosVz0tXy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZLGV0PV8uSU5JVElBTF9XT1JMRF9CT1VOREFSWTtSPV8uV09STERfQ0VOVEVSX1grQS5uZXh0RG91YmxlKCkqKGV0LVcpK1c7dmFyIHN0PS1fLklOSVRJQUxfV09STERfQk9VTkRBUlksYXQ9Xy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO3o9Xy5XT1JMRF9DRU5URVJfWStBLm5leHREb3VibGUoKSooYXQtc3QpK3N0LHRoaXMucmVjdC54PVIsdGhpcy5yZWN0Lnk9en0sQi5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5nZXRDaGlsZCgpPT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKHRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLmxlbmd0aCE9MCl7dmFyIFI9dGhpcy5nZXRDaGlsZCgpO2lmKFIudXBkYXRlQm91bmRzKCEwKSx0aGlzLnJlY3QueD1SLmdldExlZnQoKSx0aGlzLnJlY3QueT1SLmdldFRvcCgpLHRoaXMuc2V0V2lkdGgoUi5nZXRSaWdodCgpLVIuZ2V0TGVmdCgpKSx0aGlzLnNldEhlaWdodChSLmdldEJvdHRvbSgpLVIuZ2V0VG9wKCkpLF8uTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTKXt2YXIgej1SLmdldFJpZ2h0KCktUi5nZXRMZWZ0KCksVz1SLmdldEJvdHRvbSgpLVIuZ2V0VG9wKCk7dGhpcy5sYWJlbFdpZHRoPnomJih0aGlzLnJlY3QueC09KHRoaXMubGFiZWxXaWR0aC16KS8yLHRoaXMuc2V0V2lkdGgodGhpcy5sYWJlbFdpZHRoKSksdGhpcy5sYWJlbEhlaWdodD5XJiYodGhpcy5sYWJlbFBvcz09ImNlbnRlciI/dGhpcy5yZWN0LnktPSh0aGlzLmxhYmVsSGVpZ2h0LVcpLzI6dGhpcy5sYWJlbFBvcz09InRvcCImJih0aGlzLnJlY3QueS09dGhpcy5sYWJlbEhlaWdodC1XKSx0aGlzLnNldEhlaWdodCh0aGlzLmxhYmVsSGVpZ2h0KSl9fX0sQi5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmNsdXNpb25UcmVlRGVwdGg9PWIuTUFYX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmluY2x1c2lvblRyZWVEZXB0aH0sQi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKFIpe3ZhciB6PXRoaXMucmVjdC54O3o+Xy5XT1JMRF9CT1VOREFSWT96PV8uV09STERfQk9VTkRBUlk6ejwtXy5XT1JMRF9CT1VOREFSWSYmKHo9LV8uV09STERfQk9VTkRBUlkpO3ZhciBXPXRoaXMucmVjdC55O1c+Xy5XT1JMRF9CT1VOREFSWT9XPV8uV09STERfQk9VTkRBUlk6VzwtXy5XT1JMRF9CT1VOREFSWSYmKFc9LV8uV09STERfQk9VTkRBUlkpO3ZhciBldD1uZXcgSSh6LFcpLHN0PVIuaW52ZXJzZVRyYW5zZm9ybVBvaW50KGV0KTt0aGlzLnNldExvY2F0aW9uKHN0Lngsc3QueSl9LEIucHJvdG90eXBlLmdldExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0Lnh9LEIucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aH0sQi5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55fSxCLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodH0sQi5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXI9PW51bGw/bnVsbDp0aGlzLm93bmVyLmdldFBhcmVudCgpfSxmLmV4cG9ydHM9Qn0sZnVuY3Rpb24oZixwLHcpe2Z1bmN0aW9uIG0oYixFKXtiPT1udWxsJiZFPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6KHRoaXMueD1iLHRoaXMueT1FKX1tLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG0ucHJvdG90eXBlLnNldFg9ZnVuY3Rpb24oYil7dGhpcy54PWJ9LG0ucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oYil7dGhpcy55PWJ9LG0ucHJvdG90eXBlLmdldERpZmZlcmVuY2U9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBEaW1lbnNpb25EKHRoaXMueC1iLngsdGhpcy55LWIueSl9LG0ucHJvdG90eXBlLmdldENvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG0odGhpcy54LHRoaXMueSl9LG0ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy54Kz1iLndpZHRoLHRoaXMueSs9Yi5oZWlnaHQsdGhpc30sZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx3KXt2YXIgbT13KDIpLGI9dygxMCksRT13KDApLF89dyg2KSxBPXcoMyksST13KDEpLEI9dygxMyksTj13KDEyKSxSPXcoMTEpO2Z1bmN0aW9uIHooZXQsc3QsYXQpe20uY2FsbCh0aGlzLGF0KSx0aGlzLmVzdGltYXRlZFNpemU9Yi5NSU5fVkFMVUUsdGhpcy5tYXJnaW49RS5ERUZBVUxUX0dSQVBIX01BUkdJTix0aGlzLmVkZ2VzPVtdLHRoaXMubm9kZXM9W10sdGhpcy5pc0Nvbm5lY3RlZD0hMSx0aGlzLnBhcmVudD1ldCxzdCE9bnVsbCYmc3QgaW5zdGFuY2VvZiBfP3RoaXMuZ3JhcGhNYW5hZ2VyPXN0OnN0IT1udWxsJiZzdCBpbnN0YW5jZW9mIExheW91dCYmKHRoaXMuZ3JhcGhNYW5hZ2VyPXN0LmdyYXBoTWFuYWdlcil9ei5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSk7Zm9yKHZhciBXIGluIG0peltXXT1tW1ddO3oucHJvdG90eXBlLmdldE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXN9LHoucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LHoucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcn0sei5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSx6LnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdH0sei5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yaWdodH0sei5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9wfSx6LnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3R0b219LHoucHJvdG90eXBlLmlzQ29ubmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNDb25uZWN0ZWR9LHoucHJvdG90eXBlLmFkZD1mdW5jdGlvbihldCxzdCxhdCl7aWYoc3Q9PW51bGwmJmF0PT1udWxsKXt2YXIgYnQ9ZXQ7aWYodGhpcy5ncmFwaE1hbmFnZXI9PW51bGwpdGhyb3ciR3JhcGggaGFzIG5vIGdyYXBoIG1nciEiO2lmKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKGJ0KT4tMSl0aHJvdyJOb2RlIGFscmVhZHkgaW4gZ3JhcGghIjtyZXR1cm4gYnQub3duZXI9dGhpcyx0aGlzLmdldE5vZGVzKCkucHVzaChidCksYnR9ZWxzZXt2YXIgbXQ9ZXQ7aWYoISh0aGlzLmdldE5vZGVzKCkuaW5kZXhPZihzdCk+LTEmJnRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKGF0KT4tMSkpdGhyb3ciU291cmNlIG9yIHRhcmdldCBub3QgaW4gZ3JhcGghIjtpZighKHN0Lm93bmVyPT1hdC5vd25lciYmc3Qub3duZXI9PXRoaXMpKXRocm93IkJvdGggb3duZXJzIG11c3QgYmUgdGhpcyBncmFwaCEiO3JldHVybiBzdC5vd25lciE9YXQub3duZXI/bnVsbDoobXQuc291cmNlPXN0LG10LnRhcmdldD1hdCxtdC5pc0ludGVyR3JhcGg9ITEsdGhpcy5nZXRFZGdlcygpLnB1c2gobXQpLHN0LmVkZ2VzLnB1c2gobXQpLGF0IT1zdCYmYXQuZWRnZXMucHVzaChtdCksbXQpfX0sei5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGV0KXt2YXIgc3Q9ZXQ7aWYoZXQgaW5zdGFuY2VvZiBBKXtpZihzdD09bnVsbCl0aHJvdyJOb2RlIGlzIG51bGwhIjtpZighKHN0Lm93bmVyIT1udWxsJiZzdC5vd25lcj09dGhpcykpdGhyb3ciT3duZXIgZ3JhcGggaXMgaW52YWxpZCEiO2lmKHRoaXMuZ3JhcGhNYW5hZ2VyPT1udWxsKXRocm93Ik93bmVyIGdyYXBoIG1hbmFnZXIgaXMgaW52YWxpZCEiO2Zvcih2YXIgYXQ9c3QuZWRnZXMuc2xpY2UoKSxidCxtdD1hdC5sZW5ndGgseXQ9MDt5dDxtdDt5dCsrKWJ0PWF0W3l0XSxidC5pc0ludGVyR3JhcGg/dGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKGJ0KTpidC5zb3VyY2Uub3duZXIucmVtb3ZlKGJ0KTt2YXIgZnQ9dGhpcy5ub2Rlcy5pbmRleE9mKHN0KTtpZihmdD09LTEpdGhyb3ciTm9kZSBub3QgaW4gb3duZXIgbm9kZSBsaXN0ISI7dGhpcy5ub2Rlcy5zcGxpY2UoZnQsMSl9ZWxzZSBpZihldCBpbnN0YW5jZW9mIEkpe3ZhciBidD1ldDtpZihidD09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighKGJ0LnNvdXJjZSE9bnVsbCYmYnQudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoIShidC5zb3VyY2Uub3duZXIhPW51bGwmJmJ0LnRhcmdldC5vd25lciE9bnVsbCYmYnQuc291cmNlLm93bmVyPT10aGlzJiZidC50YXJnZXQub3duZXI9PXRoaXMpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IG93bmVyIGlzIGludmFsaWQhIjt2YXIgdXQ9YnQuc291cmNlLmVkZ2VzLmluZGV4T2YoYnQpLHZ0PWJ0LnRhcmdldC5lZGdlcy5pbmRleE9mKGJ0KTtpZighKHV0Pi0xJiZ2dD4tMSkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSEiO2J0LnNvdXJjZS5lZGdlcy5zcGxpY2UodXQsMSksYnQudGFyZ2V0IT1idC5zb3VyY2UmJmJ0LnRhcmdldC5lZGdlcy5zcGxpY2UodnQsMSk7dmFyIGZ0PWJ0LnNvdXJjZS5vd25lci5nZXRFZGdlcygpLmluZGV4T2YoYnQpO2lmKGZ0PT0tMSl0aHJvdyJOb3QgaW4gb3duZXIncyBlZGdlIGxpc3QhIjtidC5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5zcGxpY2UoZnQsMSl9fSx6LnByb3RvdHlwZS51cGRhdGVMZWZ0VG9wPWZ1bmN0aW9uKCl7Zm9yKHZhciBldD1iLk1BWF9WQUxVRSxzdD1iLk1BWF9WQUxVRSxhdCxidCxtdCx5dD10aGlzLmdldE5vZGVzKCksZnQ9eXQubGVuZ3RoLHV0PTA7dXQ8ZnQ7dXQrKyl7dmFyIHZ0PXl0W3V0XTthdD12dC5nZXRUb3AoKSxidD12dC5nZXRMZWZ0KCksZXQ+YXQmJihldD1hdCksc3Q+YnQmJihzdD1idCl9cmV0dXJuIGV0PT1iLk1BWF9WQUxVRT9udWxsOih5dFswXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdCE9bnVsbD9tdD15dFswXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDptdD10aGlzLm1hcmdpbix0aGlzLmxlZnQ9c3QtbXQsdGhpcy50b3A9ZXQtbXQsbmV3IE4odGhpcy5sZWZ0LHRoaXMudG9wKSl9LHoucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbihldCl7Zm9yKHZhciBzdD1iLk1BWF9WQUxVRSxhdD0tYi5NQVhfVkFMVUUsYnQ9Yi5NQVhfVkFMVUUsbXQ9LWIuTUFYX1ZBTFVFLHl0LGZ0LHV0LHZ0LFgscHQ9dGhpcy5ub2RlcyxVPXB0Lmxlbmd0aCxUdD0wO1R0PFU7VHQrKyl7dmFyIG50PXB0W1R0XTtldCYmbnQuY2hpbGQhPW51bGwmJm50LnVwZGF0ZUJvdW5kcygpLHl0PW50LmdldExlZnQoKSxmdD1udC5nZXRSaWdodCgpLHV0PW50LmdldFRvcCgpLHZ0PW50LmdldEJvdHRvbSgpLHN0Pnl0JiYoc3Q9eXQpLGF0PGZ0JiYoYXQ9ZnQpLGJ0PnV0JiYoYnQ9dXQpLG10PHZ0JiYobXQ9dnQpfXZhciBJdD1uZXcgQihzdCxidCxhdC1zdCxtdC1idCk7c3Q9PWIuTUFYX1ZBTFVFJiYodGhpcy5sZWZ0PXRoaXMucGFyZW50LmdldExlZnQoKSx0aGlzLnJpZ2h0PXRoaXMucGFyZW50LmdldFJpZ2h0KCksdGhpcy50b3A9dGhpcy5wYXJlbnQuZ2V0VG9wKCksdGhpcy5ib3R0b209dGhpcy5wYXJlbnQuZ2V0Qm90dG9tKCkpLHB0WzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP1g9cHRbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6WD10aGlzLm1hcmdpbix0aGlzLmxlZnQ9SXQueC1YLHRoaXMucmlnaHQ9SXQueCtJdC53aWR0aCtYLHRoaXMudG9wPUl0LnktWCx0aGlzLmJvdHRvbT1JdC55K0l0LmhlaWdodCtYfSx6LmNhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbihldCl7Zm9yKHZhciBzdD1iLk1BWF9WQUxVRSxhdD0tYi5NQVhfVkFMVUUsYnQ9Yi5NQVhfVkFMVUUsbXQ9LWIuTUFYX1ZBTFVFLHl0LGZ0LHV0LHZ0LFg9ZXQubGVuZ3RoLHB0PTA7cHQ8WDtwdCsrKXt2YXIgVT1ldFtwdF07eXQ9VS5nZXRMZWZ0KCksZnQ9VS5nZXRSaWdodCgpLHV0PVUuZ2V0VG9wKCksdnQ9VS5nZXRCb3R0b20oKSxzdD55dCYmKHN0PXl0KSxhdDxmdCYmKGF0PWZ0KSxidD51dCYmKGJ0PXV0KSxtdDx2dCYmKG10PXZ0KX12YXIgVHQ9bmV3IEIoc3QsYnQsYXQtc3QsbXQtYnQpO3JldHVybiBUdH0sei5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT8xOnRoaXMucGFyZW50LmdldEluY2x1c2lvblRyZWVEZXB0aCgpfSx6LnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1iLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSx6LnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2Zvcih2YXIgZXQ9MCxzdD10aGlzLm5vZGVzLGF0PXN0Lmxlbmd0aCxidD0wO2J0PGF0O2J0Kyspe3ZhciBtdD1zdFtidF07ZXQrPW10LmNhbGNFc3RpbWF0ZWRTaXplKCl9cmV0dXJuIGV0PT0wP3RoaXMuZXN0aW1hdGVkU2l6ZT1FLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRTp0aGlzLmVzdGltYXRlZFNpemU9ZXQvTWF0aC5zcXJ0KHRoaXMubm9kZXMubGVuZ3RoKSx0aGlzLmVzdGltYXRlZFNpemV9LHoucHJvdG90eXBlLnVwZGF0ZUNvbm5lY3RlZD1mdW5jdGlvbigpe3ZhciBldD10aGlzO2lmKHRoaXMubm9kZXMubGVuZ3RoPT0wKXt0aGlzLmlzQ29ubmVjdGVkPSEwO3JldHVybn12YXIgc3Q9bmV3IFIsYXQ9bmV3IFNldCxidD10aGlzLm5vZGVzWzBdLG10LHl0LGZ0PWJ0LndpdGhDaGlsZHJlbigpO2ZvcihmdC5mb3JFYWNoKGZ1bmN0aW9uKFR0KXtzdC5wdXNoKFR0KSxhdC5hZGQoVHQpfSk7c3QubGVuZ3RoIT09MDspe2J0PXN0LnNoaWZ0KCksbXQ9YnQuZ2V0RWRnZXMoKTtmb3IodmFyIHV0PW10Lmxlbmd0aCx2dD0wO3Z0PHV0O3Z0Kyspe3ZhciBYPW10W3Z0XTtpZih5dD1YLmdldE90aGVyRW5kSW5HcmFwaChidCx0aGlzKSx5dCE9bnVsbCYmIWF0Lmhhcyh5dCkpe3ZhciBwdD15dC53aXRoQ2hpbGRyZW4oKTtwdC5mb3JFYWNoKGZ1bmN0aW9uKFR0KXtzdC5wdXNoKFR0KSxhdC5hZGQoVHQpfSl9fX1pZih0aGlzLmlzQ29ubmVjdGVkPSExLGF0LnNpemU+PXRoaXMubm9kZXMubGVuZ3RoKXt2YXIgVT0wO2F0LmZvckVhY2goZnVuY3Rpb24oVHQpe1R0Lm93bmVyPT1ldCYmVSsrfSksVT09dGhpcy5ub2Rlcy5sZW5ndGgmJih0aGlzLmlzQ29ubmVjdGVkPSEwKX19LGYuZXhwb3J0cz16fSxmdW5jdGlvbihmLHAsdyl7dmFyIG0sYj13KDEpO2Z1bmN0aW9uIEUoXyl7bT13KDUpLHRoaXMubGF5b3V0PV8sdGhpcy5ncmFwaHM9W10sdGhpcy5lZGdlcz1bXX1FLnByb3RvdHlwZS5hZGRSb290PWZ1bmN0aW9uKCl7dmFyIF89dGhpcy5sYXlvdXQubmV3R3JhcGgoKSxBPXRoaXMubGF5b3V0Lm5ld05vZGUobnVsbCksST10aGlzLmFkZChfLEEpO3JldHVybiB0aGlzLnNldFJvb3RHcmFwaChJKSx0aGlzLnJvb3RHcmFwaH0sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKF8sQSxJLEIsTil7aWYoST09bnVsbCYmQj09bnVsbCYmTj09bnVsbCl7aWYoXz09bnVsbCl0aHJvdyJHcmFwaCBpcyBudWxsISI7aWYoQT09bnVsbCl0aHJvdyJQYXJlbnQgbm9kZSBpcyBudWxsISI7aWYodGhpcy5ncmFwaHMuaW5kZXhPZihfKT4tMSl0aHJvdyJHcmFwaCBhbHJlYWR5IGluIHRoaXMgZ3JhcGggbWdyISI7aWYodGhpcy5ncmFwaHMucHVzaChfKSxfLnBhcmVudCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIHBhcmVudCEiO2lmKEEuY2hpbGQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBjaGlsZCEiO3JldHVybiBfLnBhcmVudD1BLEEuY2hpbGQ9XyxffWVsc2V7Tj1JLEI9QSxJPV87dmFyIFI9Qi5nZXRPd25lcigpLHo9Ti5nZXRPd25lcigpO2lmKCEoUiE9bnVsbCYmUi5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciU291cmNlIG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKCEoeiE9bnVsbCYmei5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciVGFyZ2V0IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKFI9PXopcmV0dXJuIEkuaXNJbnRlckdyYXBoPSExLFIuYWRkKEksQixOKTtpZihJLmlzSW50ZXJHcmFwaD0hMCxJLnNvdXJjZT1CLEkudGFyZ2V0PU4sdGhpcy5lZGdlcy5pbmRleE9mKEkpPi0xKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBpbnRlci1ncmFwaCBlZGdlIGxpc3QhIjtpZih0aGlzLmVkZ2VzLnB1c2goSSksIShJLnNvdXJjZSE9bnVsbCYmSS50YXJnZXQhPW51bGwpKXRocm93IkVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoSS5zb3VyY2UuZWRnZXMuaW5kZXhPZihJKT09LTEmJkkudGFyZ2V0LmVkZ2VzLmluZGV4T2YoSSk9PS0xKSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gc291cmNlIGFuZC9vciB0YXJnZXQgaW5jaWRlbmN5IGxpc3QhIjtyZXR1cm4gSS5zb3VyY2UuZWRnZXMucHVzaChJKSxJLnRhcmdldC5lZGdlcy5wdXNoKEkpLEl9fSxFLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oXyl7aWYoXyBpbnN0YW5jZW9mIG0pe3ZhciBBPV87aWYoQS5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJHcmFwaCBub3QgaW4gdGhpcyBncmFwaCBtZ3IiO2lmKCEoQT09dGhpcy5yb290R3JhcGh8fEEucGFyZW50IT1udWxsJiZBLnBhcmVudC5ncmFwaE1hbmFnZXI9PXRoaXMpKXRocm93IkludmFsaWQgcGFyZW50IG5vZGUhIjt2YXIgST1bXTtJPUkuY29uY2F0KEEuZ2V0RWRnZXMoKSk7Zm9yKHZhciBCLE49SS5sZW5ndGgsUj0wO1I8TjtSKyspQj1JW1JdLEEucmVtb3ZlKEIpO3ZhciB6PVtdO3o9ei5jb25jYXQoQS5nZXROb2RlcygpKTt2YXIgVztOPXoubGVuZ3RoO2Zvcih2YXIgUj0wO1I8TjtSKyspVz16W1JdLEEucmVtb3ZlKFcpO0E9PXRoaXMucm9vdEdyYXBoJiZ0aGlzLnNldFJvb3RHcmFwaChudWxsKTt2YXIgZXQ9dGhpcy5ncmFwaHMuaW5kZXhPZihBKTt0aGlzLmdyYXBocy5zcGxpY2UoZXQsMSksQS5wYXJlbnQ9bnVsbH1lbHNlIGlmKF8gaW5zdGFuY2VvZiBiKXtpZihCPV8sQj09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighQi5pc0ludGVyR3JhcGgpdGhyb3ciTm90IGFuIGludGVyLWdyYXBoIGVkZ2UhIjtpZighKEIuc291cmNlIT1udWxsJiZCLnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoQi5zb3VyY2UuZWRnZXMuaW5kZXhPZihCKSE9LTEmJkIudGFyZ2V0LmVkZ2VzLmluZGV4T2YoQikhPS0xKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlISI7dmFyIGV0PUIuc291cmNlLmVkZ2VzLmluZGV4T2YoQik7aWYoQi5zb3VyY2UuZWRnZXMuc3BsaWNlKGV0LDEpLGV0PUIudGFyZ2V0LmVkZ2VzLmluZGV4T2YoQiksQi50YXJnZXQuZWRnZXMuc3BsaWNlKGV0LDEpLCEoQi5zb3VyY2Uub3duZXIhPW51bGwmJkIuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpIT1udWxsKSl0aHJvdyJFZGdlIG93bmVyIGdyYXBoIG9yIG93bmVyIGdyYXBoIG1hbmFnZXIgaXMgbnVsbCEiO2lmKEIuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoQik9PS0xKXRocm93Ik5vdCBpbiBvd25lciBncmFwaCBtYW5hZ2VyJ3MgZWRnZSBsaXN0ISI7dmFyIGV0PUIuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoQik7Qi5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuc3BsaWNlKGV0LDEpfX0sRS5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKCl7dGhpcy5yb290R3JhcGgudXBkYXRlQm91bmRzKCEwKX0sRS5wcm90b3R5cGUuZ2V0R3JhcGhzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhzfSxFLnByb3RvdHlwZS5nZXRBbGxOb2Rlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsTm9kZXM9PW51bGwpe2Zvcih2YXIgXz1bXSxBPXRoaXMuZ2V0R3JhcGhzKCksST1BLmxlbmd0aCxCPTA7QjxJO0IrKylfPV8uY29uY2F0KEFbQl0uZ2V0Tm9kZXMoKSk7dGhpcy5hbGxOb2Rlcz1ffXJldHVybiB0aGlzLmFsbE5vZGVzfSxFLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlcz1udWxsfSxFLnByb3RvdHlwZS5yZXNldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7dGhpcy5hbGxFZGdlcz1udWxsfSxFLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1udWxsfSxFLnByb3RvdHlwZS5nZXRBbGxFZGdlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsRWRnZXM9PW51bGwpe3ZhciBfPVtdLEE9dGhpcy5nZXRHcmFwaHMoKTtBLmxlbmd0aDtmb3IodmFyIEk9MDtJPEEubGVuZ3RoO0krKylfPV8uY29uY2F0KEFbSV0uZ2V0RWRnZXMoKSk7Xz1fLmNvbmNhdCh0aGlzLmVkZ2VzKSx0aGlzLmFsbEVkZ2VzPV99cmV0dXJuIHRoaXMuYWxsRWRnZXN9LEUucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb259LEUucHJvdG90eXBlLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKF8pe2lmKHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24hPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1ffSxFLnByb3RvdHlwZS5nZXRSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdEdyYXBofSxFLnByb3RvdHlwZS5zZXRSb290R3JhcGg9ZnVuY3Rpb24oXyl7aWYoXy5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJSb290IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO3RoaXMucm9vdEdyYXBoPV8sXy5wYXJlbnQ9PW51bGwmJihfLnBhcmVudD10aGlzLmxheW91dC5uZXdOb2RlKCJSb290IG5vZGUiKSl9LEUucHJvdG90eXBlLmdldExheW91dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dH0sRS5wcm90b3R5cGUuaXNPbmVBbmNlc3Rvck9mT3RoZXI9ZnVuY3Rpb24oXyxBKXtpZighKF8hPW51bGwmJkEhPW51bGwpKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKF89PUEpcmV0dXJuITA7dmFyIEk9Xy5nZXRPd25lcigpLEI7ZG97aWYoQj1JLmdldFBhcmVudCgpLEI9PW51bGwpYnJlYWs7aWYoQj09QSlyZXR1cm4hMDtpZihJPUIuZ2V0T3duZXIoKSxJPT1udWxsKWJyZWFrfXdoaWxlKCEwKTtJPUEuZ2V0T3duZXIoKTtkb3tpZihCPUkuZ2V0UGFyZW50KCksQj09bnVsbClicmVhaztpZihCPT1fKXJldHVybiEwO2lmKEk9Qi5nZXRPd25lcigpLEk9PW51bGwpYnJlYWt9d2hpbGUoITApO3JldHVybiExfSxFLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBfLEEsSSxCLE4sUj10aGlzLmdldEFsbEVkZ2VzKCksej1SLmxlbmd0aCxXPTA7Vzx6O1crKyl7aWYoXz1SW1ddLEE9Xy5zb3VyY2UsST1fLnRhcmdldCxfLmxjYT1udWxsLF8uc291cmNlSW5MY2E9QSxfLnRhcmdldEluTGNhPUksQT09SSl7Xy5sY2E9QS5nZXRPd25lcigpO2NvbnRpbnVlfWZvcihCPUEuZ2V0T3duZXIoKTtfLmxjYT09bnVsbDspe2ZvcihfLnRhcmdldEluTGNhPUksTj1JLmdldE93bmVyKCk7Xy5sY2E9PW51bGw7KXtpZihOPT1CKXtfLmxjYT1OO2JyZWFrfWlmKE49PXRoaXMucm9vdEdyYXBoKWJyZWFrO2lmKF8ubGNhIT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO18udGFyZ2V0SW5MY2E9Ti5nZXRQYXJlbnQoKSxOPV8udGFyZ2V0SW5MY2EuZ2V0T3duZXIoKX1pZihCPT10aGlzLnJvb3RHcmFwaClicmVhaztfLmxjYT09bnVsbCYmKF8uc291cmNlSW5MY2E9Qi5nZXRQYXJlbnQoKSxCPV8uc291cmNlSW5MY2EuZ2V0T3duZXIoKSl9aWYoXy5sY2E9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCJ9fSxFLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3I9ZnVuY3Rpb24oXyxBKXtpZihfPT1BKXJldHVybiBfLmdldE93bmVyKCk7dmFyIEk9Xy5nZXRPd25lcigpO2Rve2lmKEk9PW51bGwpYnJlYWs7dmFyIEI9QS5nZXRPd25lcigpO2Rve2lmKEI9PW51bGwpYnJlYWs7aWYoQj09SSlyZXR1cm4gQjtCPUIuZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7ST1JLmdldFBhcmVudCgpLmdldE93bmVyKCl9d2hpbGUoITApO3JldHVybiBJfSxFLnByb3RvdHlwZS5jYWxjSW5jbHVzaW9uVHJlZURlcHRocz1mdW5jdGlvbihfLEEpe189PW51bGwmJkE9PW51bGwmJihfPXRoaXMucm9vdEdyYXBoLEE9MSk7Zm9yKHZhciBJLEI9Xy5nZXROb2RlcygpLE49Qi5sZW5ndGgsUj0wO1I8TjtSKyspST1CW1JdLEkuaW5jbHVzaW9uVHJlZURlcHRoPUEsSS5jaGlsZCE9bnVsbCYmdGhpcy5jYWxjSW5jbHVzaW9uVHJlZURlcHRocyhJLmNoaWxkLEErMSl9LEUucHJvdG90eXBlLmluY2x1ZGVzSW52YWxpZEVkZ2U9ZnVuY3Rpb24oKXtmb3IodmFyIF8sQT10aGlzLmVkZ2VzLmxlbmd0aCxJPTA7STxBO0krKylpZihfPXRoaXMuZWRnZXNbSV0sdGhpcy5pc09uZUFuY2VzdG9yT2ZPdGhlcihfLnNvdXJjZSxfLnRhcmdldCkpcmV0dXJuITA7cmV0dXJuITF9LGYuZXhwb3J0cz1FfSxmdW5jdGlvbihmLHAsdyl7dmFyIG09dygwKTtmdW5jdGlvbiBiKCl7fWZvcih2YXIgRSBpbiBtKWJbRV09bVtFXTtiLk1BWF9JVEVSQVRJT05TPTI1MDAsYi5ERUZBVUxUX0VER0VfTEVOR1RIPTUwLGIuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9LjQ1LGIuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9NDUwMCxiLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD0uNCxiLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD0xLGIuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0zLjgsYi5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTEuNSxiLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OPSEwLGIuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OPSEwLGIuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD0uMyxiLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1I9LjMzLGIuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUPTFlMyxiLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVD01ZTMsYi5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUw9MTAwLGIuTUFYX05PREVfRElTUExBQ0VNRU5UPWIuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKjMsYi5NSU5fUkVQVUxTSU9OX0RJU1Q9Yi5ERUZBVUxUX0VER0VfTEVOR1RILzEwLGIuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPTEwMCxiLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9LjEsYi5NSU5fRURHRV9MRU5HVEg9MSxiLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPTEwLGYuZXhwb3J0cz1ifSxmdW5jdGlvbihmLHAsdyl7dmFyIG09dygxMik7ZnVuY3Rpb24gYigpe31iLmNhbGNTZXBhcmF0aW9uQW1vdW50PWZ1bmN0aW9uKEUsXyxBLEkpe2lmKCFFLmludGVyc2VjdHMoXykpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dmFyIEI9bmV3IEFycmF5KDIpO3RoaXMuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXMoRSxfLEIpLEFbMF09TWF0aC5taW4oRS5nZXRSaWdodCgpLF8uZ2V0UmlnaHQoKSktTWF0aC5tYXgoRS54LF8ueCksQVsxXT1NYXRoLm1pbihFLmdldEJvdHRvbSgpLF8uZ2V0Qm90dG9tKCkpLU1hdGgubWF4KEUueSxfLnkpLEUuZ2V0WCgpPD1fLmdldFgoKSYmRS5nZXRSaWdodCgpPj1fLmdldFJpZ2h0KCk/QVswXSs9TWF0aC5taW4oXy5nZXRYKCktRS5nZXRYKCksRS5nZXRSaWdodCgpLV8uZ2V0UmlnaHQoKSk6Xy5nZXRYKCk8PUUuZ2V0WCgpJiZfLmdldFJpZ2h0KCk+PUUuZ2V0UmlnaHQoKSYmKEFbMF0rPU1hdGgubWluKEUuZ2V0WCgpLV8uZ2V0WCgpLF8uZ2V0UmlnaHQoKS1FLmdldFJpZ2h0KCkpKSxFLmdldFkoKTw9Xy5nZXRZKCkmJkUuZ2V0Qm90dG9tKCk+PV8uZ2V0Qm90dG9tKCk/QVsxXSs9TWF0aC5taW4oXy5nZXRZKCktRS5nZXRZKCksRS5nZXRCb3R0b20oKS1fLmdldEJvdHRvbSgpKTpfLmdldFkoKTw9RS5nZXRZKCkmJl8uZ2V0Qm90dG9tKCk+PUUuZ2V0Qm90dG9tKCkmJihBWzFdKz1NYXRoLm1pbihFLmdldFkoKS1fLmdldFkoKSxfLmdldEJvdHRvbSgpLUUuZ2V0Qm90dG9tKCkpKTt2YXIgTj1NYXRoLmFicygoXy5nZXRDZW50ZXJZKCktRS5nZXRDZW50ZXJZKCkpLyhfLmdldENlbnRlclgoKS1FLmdldENlbnRlclgoKSkpO18uZ2V0Q2VudGVyWSgpPT09RS5nZXRDZW50ZXJZKCkmJl8uZ2V0Q2VudGVyWCgpPT09RS5nZXRDZW50ZXJYKCkmJihOPTEpO3ZhciBSPU4qQVswXSx6PUFbMV0vTjtBWzBdPHo/ej1BWzBdOlI9QVsxXSxBWzBdPS0xKkJbMF0qKHovMitJKSxBWzFdPS0xKkJbMV0qKFIvMitJKX0sYi5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2Rlcz1mdW5jdGlvbihFLF8sQSl7RS5nZXRDZW50ZXJYKCk8Xy5nZXRDZW50ZXJYKCk/QVswXT0tMTpBWzBdPTEsRS5nZXRDZW50ZXJZKCk8Xy5nZXRDZW50ZXJZKCk/QVsxXT0tMTpBWzFdPTF9LGIuZ2V0SW50ZXJzZWN0aW9uMj1mdW5jdGlvbihFLF8sQSl7dmFyIEk9RS5nZXRDZW50ZXJYKCksQj1FLmdldENlbnRlclkoKSxOPV8uZ2V0Q2VudGVyWCgpLFI9Xy5nZXRDZW50ZXJZKCk7aWYoRS5pbnRlcnNlY3RzKF8pKXJldHVybiBBWzBdPUksQVsxXT1CLEFbMl09TixBWzNdPVIsITA7dmFyIHo9RS5nZXRYKCksVz1FLmdldFkoKSxldD1FLmdldFJpZ2h0KCksc3Q9RS5nZXRYKCksYXQ9RS5nZXRCb3R0b20oKSxidD1FLmdldFJpZ2h0KCksbXQ9RS5nZXRXaWR0aEhhbGYoKSx5dD1FLmdldEhlaWdodEhhbGYoKSxmdD1fLmdldFgoKSx1dD1fLmdldFkoKSx2dD1fLmdldFJpZ2h0KCksWD1fLmdldFgoKSxwdD1fLmdldEJvdHRvbSgpLFU9Xy5nZXRSaWdodCgpLFR0PV8uZ2V0V2lkdGhIYWxmKCksbnQ9Xy5nZXRIZWlnaHRIYWxmKCksSXQ9ITEsT3Q9ITE7aWYoST09PU4pe2lmKEI+UilyZXR1cm4gQVswXT1JLEFbMV09VyxBWzJdPU4sQVszXT1wdCwhMTtpZihCPFIpcmV0dXJuIEFbMF09SSxBWzFdPWF0LEFbMl09TixBWzNdPXV0LCExfWVsc2UgaWYoQj09PVIpe2lmKEk+TilyZXR1cm4gQVswXT16LEFbMV09QixBWzJdPXZ0LEFbM109UiwhMTtpZihJPE4pcmV0dXJuIEFbMF09ZXQsQVsxXT1CLEFbMl09ZnQsQVszXT1SLCExfWVsc2V7dmFyIEJ0PUUuaGVpZ2h0L0Uud2lkdGgsRXQ9Xy5oZWlnaHQvXy53aWR0aCxaPShSLUIpLyhOLUkpLEN0PXZvaWQgMCx4dD12b2lkIDAsSHQ9dm9pZCAwLExlPXZvaWQgMCxGdD12b2lkIDAsZ249dm9pZCAwO2lmKC1CdD09PVo/ST5OPyhBWzBdPXN0LEFbMV09YXQsSXQ9ITApOihBWzBdPWV0LEFbMV09VyxJdD0hMCk6QnQ9PT1aJiYoST5OPyhBWzBdPXosQVsxXT1XLEl0PSEwKTooQVswXT1idCxBWzFdPWF0LEl0PSEwKSksLUV0PT09Wj9OPkk/KEFbMl09WCxBWzNdPXB0LE90PSEwKTooQVsyXT12dCxBWzNdPXV0LE90PSEwKTpFdD09PVomJihOPkk/KEFbMl09ZnQsQVszXT11dCxPdD0hMCk6KEFbMl09VSxBWzNdPXB0LE90PSEwKSksSXQmJk90KXJldHVybiExO2lmKEk+Tj9CPlI/KEN0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oQnQsWiw0KSx4dD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKEV0LFosMikpOihDdD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1CdCxaLDMpLHh0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLUV0LFosMSkpOkI+Uj8oQ3Q9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtQnQsWiwxKSx4dD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1FdCxaLDMpKTooQ3Q9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihCdCxaLDIpLHh0PXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oRXQsWiw0KSksIUl0KXN3aXRjaChDdCl7Y2FzZSAxOkxlPVcsSHQ9SSsteXQvWixBWzBdPUh0LEFbMV09TGU7YnJlYWs7Y2FzZSAyOkh0PWJ0LExlPUIrbXQqWixBWzBdPUh0LEFbMV09TGU7YnJlYWs7Y2FzZSAzOkxlPWF0LEh0PUkreXQvWixBWzBdPUh0LEFbMV09TGU7YnJlYWs7Y2FzZSA0Okh0PXN0LExlPUIrLW10KlosQVswXT1IdCxBWzFdPUxlO2JyZWFrfWlmKCFPdClzd2l0Y2goeHQpe2Nhc2UgMTpnbj11dCxGdD1OKy1udC9aLEFbMl09RnQsQVszXT1nbjticmVhaztjYXNlIDI6RnQ9VSxnbj1SK1R0KlosQVsyXT1GdCxBWzNdPWduO2JyZWFrO2Nhc2UgMzpnbj1wdCxGdD1OK250L1osQVsyXT1GdCxBWzNdPWduO2JyZWFrO2Nhc2UgNDpGdD1YLGduPVIrLVR0KlosQVsyXT1GdCxBWzNdPWduO2JyZWFrfX1yZXR1cm4hMX0sYi5nZXRDYXJkaW5hbERpcmVjdGlvbj1mdW5jdGlvbihFLF8sQSl7cmV0dXJuIEU+Xz9BOjErQSU0fSxiLmdldEludGVyc2VjdGlvbj1mdW5jdGlvbihFLF8sQSxJKXtpZihJPT1udWxsKXJldHVybiB0aGlzLmdldEludGVyc2VjdGlvbjIoRSxfLEEpO3ZhciBCPUUueCxOPUUueSxSPV8ueCx6PV8ueSxXPUEueCxldD1BLnksc3Q9SS54LGF0PUkueSxidD12b2lkIDAsbXQ9dm9pZCAwLHl0PXZvaWQgMCxmdD12b2lkIDAsdXQ9dm9pZCAwLHZ0PXZvaWQgMCxYPXZvaWQgMCxwdD12b2lkIDAsVT12b2lkIDA7cmV0dXJuIHl0PXotTix1dD1CLVIsWD1SKk4tQip6LGZ0PWF0LWV0LHZ0PVctc3QscHQ9c3QqZXQtVyphdCxVPXl0KnZ0LWZ0KnV0LFU9PT0wP251bGw6KGJ0PSh1dCpwdC12dCpYKS9VLG10PShmdCpYLXl0KnB0KS9VLG5ldyBtKGJ0LG10KSl9LGIuYW5nbGVPZlZlY3Rvcj1mdW5jdGlvbihFLF8sQSxJKXt2YXIgQj12b2lkIDA7cmV0dXJuIEUhPT1BPyhCPU1hdGguYXRhbigoSS1fKS8oQS1FKSksQTxFP0IrPU1hdGguUEk6STxfJiYoQis9dGhpcy5UV09fUEkpKTpJPF8/Qj10aGlzLk9ORV9BTkRfSEFMRl9QSTpCPXRoaXMuSEFMRl9QSSxCfSxiLmRvSW50ZXJzZWN0PWZ1bmN0aW9uKEUsXyxBLEkpe3ZhciBCPUUueCxOPUUueSxSPV8ueCx6PV8ueSxXPUEueCxldD1BLnksc3Q9SS54LGF0PUkueSxidD0oUi1CKSooYXQtZXQpLShzdC1XKSooei1OKTtpZihidD09PTApcmV0dXJuITE7dmFyIG10PSgoYXQtZXQpKihzdC1CKSsoVy1zdCkqKGF0LU4pKS9idCx5dD0oKE4teikqKHN0LUIpKyhSLUIpKihhdC1OKSkvYnQ7cmV0dXJuIDA8bXQmJm10PDEmJjA8eXQmJnl0PDF9LGIuSEFMRl9QST0uNSpNYXRoLlBJLGIuT05FX0FORF9IQUxGX1BJPTEuNSpNYXRoLlBJLGIuVFdPX1BJPTIqTWF0aC5QSSxiLlRIUkVFX1BJPTMqTWF0aC5QSSxmLmV4cG9ydHM9Yn0sZnVuY3Rpb24oZixwLHcpe2Z1bmN0aW9uIG0oKXt9bS5zaWduPWZ1bmN0aW9uKGIpe3JldHVybiBiPjA/MTpiPDA/LTE6MH0sbS5mbG9vcj1mdW5jdGlvbihiKXtyZXR1cm4gYjwwP01hdGguY2VpbChiKTpNYXRoLmZsb29yKGIpfSxtLmNlaWw9ZnVuY3Rpb24oYil7cmV0dXJuIGI8MD9NYXRoLmZsb29yKGIpOk1hdGguY2VpbChiKX0sZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx3KXtmdW5jdGlvbiBtKCl7fW0uTUFYX1ZBTFVFPTIxNDc0ODM2NDcsbS5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx3KXt2YXIgbT1mdW5jdGlvbigpe2Z1bmN0aW9uIEIoTixSKXtmb3IodmFyIHo9MDt6PFIubGVuZ3RoO3orKyl7dmFyIFc9Ult6XTtXLmVudW1lcmFibGU9Vy5lbnVtZXJhYmxlfHwhMSxXLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gVyYmKFcud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLFcua2V5LFcpfX1yZXR1cm4gZnVuY3Rpb24oTixSLHope3JldHVybiBSJiZCKE4ucHJvdG90eXBlLFIpLHomJkIoTix6KSxOfX0oKTtmdW5jdGlvbiBiKEIsTil7aWYoIShCIGluc3RhbmNlb2YgTikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIEU9ZnVuY3Rpb24oTil7cmV0dXJue3ZhbHVlOk4sbmV4dDpudWxsLHByZXY6bnVsbH19LF89ZnVuY3Rpb24oTixSLHosVyl7cmV0dXJuIE4hPT1udWxsP04ubmV4dD1SOlcuaGVhZD1SLHohPT1udWxsP3oucHJldj1SOlcudGFpbD1SLFIucHJldj1OLFIubmV4dD16LFcubGVuZ3RoKyssUn0sQT1mdW5jdGlvbihOLFIpe3ZhciB6PU4ucHJldixXPU4ubmV4dDtyZXR1cm4geiE9PW51bGw/ei5uZXh0PVc6Ui5oZWFkPVcsVyE9PW51bGw/Vy5wcmV2PXo6Ui50YWlsPXosTi5wcmV2PU4ubmV4dD1udWxsLFIubGVuZ3RoLS0sTn0sST1mdW5jdGlvbigpe2Z1bmN0aW9uIEIoTil7dmFyIFI9dGhpcztiKHRoaXMsQiksdGhpcy5sZW5ndGg9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCxOIT1udWxsJiZOLmZvckVhY2goZnVuY3Rpb24oeil7cmV0dXJuIFIucHVzaCh6KX0pfXJldHVybiBtKEIsW3trZXk6InNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofX0se2tleToiaW5zZXJ0QmVmb3JlIix2YWx1ZTpmdW5jdGlvbihSLHope3JldHVybiBfKHoucHJldixFKFIpLHosdGhpcyl9fSx7a2V5OiJpbnNlcnRBZnRlciIsdmFsdWU6ZnVuY3Rpb24oUix6KXtyZXR1cm4gXyh6LEUoUiksei5uZXh0LHRoaXMpfX0se2tleToiaW5zZXJ0Tm9kZUJlZm9yZSIsdmFsdWU6ZnVuY3Rpb24oUix6KXtyZXR1cm4gXyh6LnByZXYsUix6LHRoaXMpfX0se2tleToiaW5zZXJ0Tm9kZUFmdGVyIix2YWx1ZTpmdW5jdGlvbihSLHope3JldHVybiBfKHosUix6Lm5leHQsdGhpcyl9fSx7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbihSKXtyZXR1cm4gXyh0aGlzLnRhaWwsRShSKSxudWxsLHRoaXMpfX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oUil7cmV0dXJuIF8obnVsbCxFKFIpLHRoaXMuaGVhZCx0aGlzKX19LHtrZXk6InJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oUil7cmV0dXJuIEEoUix0aGlzKX19LHtrZXk6InBvcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gQSh0aGlzLnRhaWwsdGhpcykudmFsdWV9fSx7a2V5OiJwb3BOb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBBKHRoaXMudGFpbCx0aGlzKX19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBBKHRoaXMuaGVhZCx0aGlzKS52YWx1ZX19LHtrZXk6InNoaWZ0Tm9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gQSh0aGlzLmhlYWQsdGhpcyl9fSx7a2V5OiJnZXRfb2JqZWN0X2F0Iix2YWx1ZTpmdW5jdGlvbihSKXtpZihSPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIHo9MSxXPXRoaXMuaGVhZDt6PFI7KVc9Vy5uZXh0LHorKztyZXR1cm4gVy52YWx1ZX19fSx7a2V5OiJzZXRfb2JqZWN0X2F0Iix2YWx1ZTpmdW5jdGlvbihSLHope2lmKFI8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgVz0xLGV0PXRoaXMuaGVhZDtXPFI7KWV0PWV0Lm5leHQsVysrO2V0LnZhbHVlPXp9fX1dKSxCfSgpO2YuZXhwb3J0cz1JfSxmdW5jdGlvbihmLHAsdyl7ZnVuY3Rpb24gbShiLEUsXyl7dGhpcy54PW51bGwsdGhpcy55PW51bGwsYj09bnVsbCYmRT09bnVsbCYmXz09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOnR5cGVvZiBiPT0ibnVtYmVyIiYmdHlwZW9mIEU9PSJudW1iZXIiJiZfPT1udWxsPyh0aGlzLng9Yix0aGlzLnk9RSk6Yi5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZFPT1udWxsJiZfPT1udWxsJiYoXz1iLHRoaXMueD1fLngsdGhpcy55PV8ueSl9bS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG0ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxtLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgbSh0aGlzLngsdGhpcy55KX0sbS5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oYixFLF8pe2IuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmRT09bnVsbCYmXz09bnVsbD8oXz1iLHRoaXMuc2V0TG9jYXRpb24oXy54LF8ueSkpOnR5cGVvZiBiPT0ibnVtYmVyIiYmdHlwZW9mIEU9PSJudW1iZXIiJiZfPT1udWxsJiYocGFyc2VJbnQoYik9PWImJnBhcnNlSW50KEUpPT1FP3RoaXMubW92ZShiLEUpOih0aGlzLng9TWF0aC5mbG9vcihiKy41KSx0aGlzLnk9TWF0aC5mbG9vcihFKy41KSkpfSxtLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGIsRSl7dGhpcy54PWIsdGhpcy55PUV9LG0ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihiLEUpe3RoaXMueCs9Yix0aGlzLnkrPUV9LG0ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihiKXtpZihiLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCIpe3ZhciBFPWI7cmV0dXJuIHRoaXMueD09RS54JiZ0aGlzLnk9PUUueX1yZXR1cm4gdGhpcz09Yn0sbS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG0oKS5jb25zdHJ1Y3Rvci5uYW1lKyJbeD0iK3RoaXMueCsiLHk9Iit0aGlzLnkrIl0ifSxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHcpe2Z1bmN0aW9uIG0oYixFLF8sQSl7dGhpcy54PTAsdGhpcy55PTAsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsYiE9bnVsbCYmRSE9bnVsbCYmXyE9bnVsbCYmQSE9bnVsbCYmKHRoaXMueD1iLHRoaXMueT1FLHRoaXMud2lkdGg9Xyx0aGlzLmhlaWdodD1BKX1tLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbS5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihiKXt0aGlzLng9Yn0sbS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG0ucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oYil7dGhpcy55PWJ9LG0ucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LG0ucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGIpe3RoaXMud2lkdGg9Yn0sbS5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSxtLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oYil7dGhpcy5oZWlnaHQ9Yn0sbS5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGh9LG0ucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHR9LG0ucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oYil7cmV0dXJuISh0aGlzLmdldFJpZ2h0KCk8Yi54fHx0aGlzLmdldEJvdHRvbSgpPGIueXx8Yi5nZXRSaWdodCgpPHRoaXMueHx8Yi5nZXRCb3R0b20oKTx0aGlzLnkpfSxtLnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRoLzJ9LG0ucHJvdG90eXBlLmdldE1pblg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCl9LG0ucHJvdG90eXBlLmdldE1heFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkrdGhpcy53aWR0aH0sbS5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHQvMn0sbS5wcm90b3R5cGUuZ2V0TWluWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKX0sbS5wcm90b3R5cGUuZ2V0TWF4WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKSt0aGlzLmhlaWdodH0sbS5wcm90b3R5cGUuZ2V0V2lkdGhIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGgvMn0sbS5wcm90b3R5cGUuZ2V0SGVpZ2h0SGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodC8yfSxmLmV4cG9ydHM9bX0sZnVuY3Rpb24oZixwLHcpe3ZhciBtPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKEUpe3JldHVybiB0eXBlb2YgRX06ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJkUuY29uc3RydWN0b3I9PT1TeW1ib2wmJkUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBFfTtmdW5jdGlvbiBiKCl7fWIubGFzdElEPTAsYi5jcmVhdGVJRD1mdW5jdGlvbihFKXtyZXR1cm4gYi5pc1ByaW1pdGl2ZShFKT9FOihFLnVuaXF1ZUlEIT1udWxsfHwoRS51bmlxdWVJRD1iLmdldFN0cmluZygpLGIubGFzdElEKyspLEUudW5pcXVlSUQpfSxiLmdldFN0cmluZz1mdW5jdGlvbihFKXtyZXR1cm4gRT09bnVsbCYmKEU9Yi5sYXN0SUQpLCJPYmplY3QjIitFfSxiLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKEUpe3ZhciBfPXR5cGVvZiBFPiJ1Ij8idW5kZWZpbmVkIjptKEUpO3JldHVybiBFPT1udWxsfHxfIT0ib2JqZWN0IiYmXyE9ImZ1bmN0aW9uIn0sZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx3KXtmdW5jdGlvbiBtKFcpe2lmKEFycmF5LmlzQXJyYXkoVykpe2Zvcih2YXIgZXQ9MCxzdD1BcnJheShXLmxlbmd0aCk7ZXQ8Vy5sZW5ndGg7ZXQrKylzdFtldF09V1tldF07cmV0dXJuIHN0fWVsc2UgcmV0dXJuIEFycmF5LmZyb20oVyl9dmFyIGI9dygwKSxFPXcoNiksXz13KDMpLEE9dygxKSxJPXcoNSksQj13KDQpLE49dygxNyksUj13KDI3KTtmdW5jdGlvbiB6KFcpe1IuY2FsbCh0aGlzKSx0aGlzLmxheW91dFF1YWxpdHk9Yi5RVUFMSVRZLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1iLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLmluY3JlbWVudGFsPWIuREVGQVVMVF9JTkNSRU1FTlRBTCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1iLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWIuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyx0aGlzLmVkZ2VUb0R1bW15Tm9kZXM9bmV3IE1hcCx0aGlzLmdyYXBoTWFuYWdlcj1uZXcgRSh0aGlzKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy5pc1N1YkxheW91dD0hMSx0aGlzLmlzUmVtb3RlVXNlPSExLFchPW51bGwmJih0aGlzLmlzUmVtb3RlVXNlPVcpfXouUkFORE9NX1NFRUQ9MSx6LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFIucHJvdG90eXBlKSx6LnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LHoucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCl9LHoucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCl9LHoucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCl9LHoucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBXPW5ldyBFKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1XLFd9LHoucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKFcpe3JldHVybiBuZXcgSShudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLFcpfSx6LnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKFcpe3JldHVybiBuZXcgXyh0aGlzLmdyYXBoTWFuYWdlcixXKX0sei5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihXKXtyZXR1cm4gbmV3IEEobnVsbCxudWxsLFcpfSx6LnByb3RvdHlwZS5jaGVja0xheW91dFN1Y2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPT1udWxsfHx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTB8fHRoaXMuZ3JhcGhNYW5hZ2VyLmluY2x1ZGVzSW52YWxpZEVkZ2UoKX0sei5wcm90b3R5cGUucnVuTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMudGlsaW5nUHJlTGF5b3V0JiZ0aGlzLnRpbGluZ1ByZUxheW91dCgpLHRoaXMuaW5pdFBhcmFtZXRlcnMoKTt2YXIgVztyZXR1cm4gdGhpcy5jaGVja0xheW91dFN1Y2Nlc3MoKT9XPSExOlc9dGhpcy5sYXlvdXQoKSxiLkFOSU1BVEU9PT0iZHVyaW5nIj8hMTooVyYmKHRoaXMuaXNTdWJMYXlvdXR8fHRoaXMuZG9Qb3N0TGF5b3V0KCkpLHRoaXMudGlsaW5nUG9zdExheW91dCYmdGhpcy50aWxpbmdQb3N0TGF5b3V0KCksdGhpcy5pc0xheW91dEZpbmlzaGVkPSEwLFcpfSx6LnByb3RvdHlwZS5kb1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmluY3JlbWVudGFsfHx0aGlzLnRyYW5zZm9ybSgpLHRoaXMudXBkYXRlKCl9LHoucHJvdG90eXBlLnVwZGF0ZTI9ZnVuY3Rpb24oKXtpZih0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQmJih0aGlzLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksIXRoaXMuaXNSZW1vdGVVc2Upe2Zvcih2YXIgVz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpLGV0PTA7ZXQ8Vy5sZW5ndGg7ZXQrKylXW2V0XTtmb3IodmFyIHN0PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLGV0PTA7ZXQ8c3QubGVuZ3RoO2V0Kyspc3RbZXRdO3RoaXMudXBkYXRlKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSl9fSx6LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVyl7aWYoVz09bnVsbCl0aGlzLnVwZGF0ZTIoKTtlbHNlIGlmKFcgaW5zdGFuY2VvZiBfKXt2YXIgZXQ9VztpZihldC5nZXRDaGlsZCgpIT1udWxsKWZvcih2YXIgc3Q9ZXQuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLGF0PTA7YXQ8c3QubGVuZ3RoO2F0KyspdXBkYXRlKHN0W2F0XSk7aWYoZXQudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgYnQ9ZXQudkdyYXBoT2JqZWN0O2J0LnVwZGF0ZShldCl9fWVsc2UgaWYoVyBpbnN0YW5jZW9mIEEpe3ZhciBtdD1XO2lmKG10LnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIHl0PW10LnZHcmFwaE9iamVjdDt5dC51cGRhdGUobXQpfX1lbHNlIGlmKFcgaW5zdGFuY2VvZiBJKXt2YXIgZnQ9VztpZihmdC52R3JhcGhPYmplY3QhPW51bGwpe3ZhciB1dD1mdC52R3JhcGhPYmplY3Q7dXQudXBkYXRlKGZ0KX19fSx6LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3RoaXMuaXNTdWJMYXlvdXR8fCh0aGlzLmxheW91dFF1YWxpdHk9Yi5RVUFMSVRZLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1iLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuaW5jcmVtZW50YWw9Yi5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1iLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWIuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJih0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PSExKX0sei5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKFcpe2lmKFc9PW51bGwpdGhpcy50cmFuc2Zvcm0obmV3IEIoMCwwKSk7ZWxzZXt2YXIgZXQ9bmV3IE4sc3Q9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLnVwZGF0ZUxlZnRUb3AoKTtpZihzdCE9bnVsbCl7ZXQuc2V0V29ybGRPcmdYKFcueCksZXQuc2V0V29ybGRPcmdZKFcueSksZXQuc2V0RGV2aWNlT3JnWChzdC54KSxldC5zZXREZXZpY2VPcmdZKHN0LnkpO2Zvcih2YXIgYXQ9dGhpcy5nZXRBbGxOb2RlcygpLGJ0LG10PTA7bXQ8YXQubGVuZ3RoO210KyspYnQ9YXRbbXRdLGJ0LnRyYW5zZm9ybShldCl9fX0sei5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhbmRvbWx5PWZ1bmN0aW9uKFcpe2lmKFc9PW51bGwpdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkodGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkpLHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpLnVwZGF0ZUJvdW5kcyghMCk7ZWxzZSBmb3IodmFyIGV0LHN0LGF0PVcuZ2V0Tm9kZXMoKSxidD0wO2J0PGF0Lmxlbmd0aDtidCsrKWV0PWF0W2J0XSxzdD1ldC5nZXRDaGlsZCgpLHN0PT1udWxsfHxzdC5nZXROb2RlcygpLmxlbmd0aD09MD9ldC5zY2F0dGVyKCk6KHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KHN0KSxldC51cGRhdGVCb3VuZHMoKSl9LHoucHJvdG90eXBlLmdldEZsYXRGb3Jlc3Q9ZnVuY3Rpb24oKXtmb3IodmFyIFc9W10sZXQ9ITAsc3Q9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCksYXQ9ITAsYnQ9MDtidDxzdC5sZW5ndGg7YnQrKylzdFtidF0uZ2V0Q2hpbGQoKSE9bnVsbCYmKGF0PSExKTtpZighYXQpcmV0dXJuIFc7dmFyIG10PW5ldyBTZXQseXQ9W10sZnQ9bmV3IE1hcCx1dD1bXTtmb3IodXQ9dXQuY29uY2F0KHN0KTt1dC5sZW5ndGg+MCYmZXQ7KXtmb3IoeXQucHVzaCh1dFswXSk7eXQubGVuZ3RoPjAmJmV0Oyl7dmFyIHZ0PXl0WzBdO3l0LnNwbGljZSgwLDEpLG10LmFkZCh2dCk7Zm9yKHZhciBYPXZ0LmdldEVkZ2VzKCksYnQ9MDtidDxYLmxlbmd0aDtidCsrKXt2YXIgcHQ9WFtidF0uZ2V0T3RoZXJFbmQodnQpO2lmKGZ0LmdldCh2dCkhPXB0KWlmKCFtdC5oYXMocHQpKXl0LnB1c2gocHQpLGZ0LnNldChwdCx2dCk7ZWxzZXtldD0hMTticmVha319fWlmKCFldClXPVtdO2Vsc2V7dmFyIFU9W10uY29uY2F0KG0obXQpKTtXLnB1c2goVSk7Zm9yKHZhciBidD0wO2J0PFUubGVuZ3RoO2J0Kyspe3ZhciBUdD1VW2J0XSxudD11dC5pbmRleE9mKFR0KTtudD4tMSYmdXQuc3BsaWNlKG50LDEpfW10PW5ldyBTZXQsZnQ9bmV3IE1hcH19cmV0dXJuIFd9LHoucHJvdG90eXBlLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzPWZ1bmN0aW9uKFcpe2Zvcih2YXIgZXQ9W10sc3Q9Vy5zb3VyY2UsYXQ9dGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yKFcuc291cmNlLFcudGFyZ2V0KSxidD0wO2J0PFcuYmVuZHBvaW50cy5sZW5ndGg7YnQrKyl7dmFyIG10PXRoaXMubmV3Tm9kZShudWxsKTttdC5zZXRSZWN0KG5ldyBQb2ludCgwLDApLG5ldyBEaW1lbnNpb24oMSwxKSksYXQuYWRkKG10KTt2YXIgeXQ9dGhpcy5uZXdFZGdlKG51bGwpO3RoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh5dCxzdCxtdCksZXQuYWRkKG10KSxzdD1tdH12YXIgeXQ9dGhpcy5uZXdFZGdlKG51bGwpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5hZGQoeXQsc3QsVy50YXJnZXQpLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5zZXQoVyxldCksVy5pc0ludGVyR3JhcGgoKT90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoVyk6YXQucmVtb3ZlKFcpLGV0fSx6LnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXM9ZnVuY3Rpb24oKXt2YXIgVz1bXTtXPVcuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpLFc9W10uY29uY2F0KG0odGhpcy5lZGdlVG9EdW1teU5vZGVzLmtleXMoKSkpLmNvbmNhdChXKTtmb3IodmFyIGV0PTA7ZXQ8Vy5sZW5ndGg7ZXQrKyl7dmFyIHN0PVdbZXRdO2lmKHN0LmJlbmRwb2ludHMubGVuZ3RoPjApe2Zvcih2YXIgYXQ9dGhpcy5lZGdlVG9EdW1teU5vZGVzLmdldChzdCksYnQ9MDtidDxhdC5sZW5ndGg7YnQrKyl7dmFyIG10PWF0W2J0XSx5dD1uZXcgQihtdC5nZXRDZW50ZXJYKCksbXQuZ2V0Q2VudGVyWSgpKSxmdD1zdC5iZW5kcG9pbnRzLmdldChidCk7ZnQueD15dC54LGZ0Lnk9eXQueSxtdC5nZXRPd25lcigpLnJlbW92ZShtdCl9dGhpcy5ncmFwaE1hbmFnZXIuYWRkKHN0LHN0LnNvdXJjZSxzdC50YXJnZXQpfX19LHoudHJhbnNmb3JtPWZ1bmN0aW9uKFcsZXQsc3QsYXQpe2lmKHN0IT1udWxsJiZhdCE9bnVsbCl7dmFyIGJ0PWV0O2lmKFc8PTUwKXt2YXIgbXQ9ZXQvc3Q7YnQtPShldC1tdCkvNTAqKDUwLVcpfWVsc2V7dmFyIHl0PWV0KmF0O2J0Kz0oeXQtZXQpLzUwKihXLTUwKX1yZXR1cm4gYnR9ZWxzZXt2YXIgZnQsdXQ7cmV0dXJuIFc8PTUwPyhmdD05KmV0LzUwMCx1dD1ldC8xMCk6KGZ0PTkqZXQvNTAsdXQ9LTgqZXQpLGZ0KlcrdXR9fSx6LmZpbmRDZW50ZXJPZlRyZWU9ZnVuY3Rpb24oVyl7dmFyIGV0PVtdO2V0PWV0LmNvbmNhdChXKTt2YXIgc3Q9W10sYXQ9bmV3IE1hcCxidD0hMSxtdD1udWxsOyhldC5sZW5ndGg9PTF8fGV0Lmxlbmd0aD09MikmJihidD0hMCxtdD1ldFswXSk7Zm9yKHZhciB5dD0wO3l0PGV0Lmxlbmd0aDt5dCsrKXt2YXIgZnQ9ZXRbeXRdLHV0PWZ0LmdldE5laWdoYm9yc0xpc3QoKS5zaXplO2F0LnNldChmdCxmdC5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZSksdXQ9PTEmJnN0LnB1c2goZnQpfXZhciB2dD1bXTtmb3IodnQ9dnQuY29uY2F0KHN0KTshYnQ7KXt2YXIgWD1bXTtYPVguY29uY2F0KHZ0KSx2dD1bXTtmb3IodmFyIHl0PTA7eXQ8ZXQubGVuZ3RoO3l0Kyspe3ZhciBmdD1ldFt5dF0scHQ9ZXQuaW5kZXhPZihmdCk7cHQ+PTAmJmV0LnNwbGljZShwdCwxKTt2YXIgVT1mdC5nZXROZWlnaGJvcnNMaXN0KCk7VS5mb3JFYWNoKGZ1bmN0aW9uKEl0KXtpZihzdC5pbmRleE9mKEl0KTwwKXt2YXIgT3Q9YXQuZ2V0KEl0KSxCdD1PdC0xO0J0PT0xJiZ2dC5wdXNoKEl0KSxhdC5zZXQoSXQsQnQpfX0pfXN0PXN0LmNvbmNhdCh2dCksKGV0Lmxlbmd0aD09MXx8ZXQubGVuZ3RoPT0yKSYmKGJ0PSEwLG10PWV0WzBdKX1yZXR1cm4gbXR9LHoucHJvdG90eXBlLnNldEdyYXBoTWFuYWdlcj1mdW5jdGlvbihXKXt0aGlzLmdyYXBoTWFuYWdlcj1XfSxmLmV4cG9ydHM9en0sZnVuY3Rpb24oZixwLHcpe2Z1bmN0aW9uIG0oKXt9bS5zZWVkPTEsbS54PTAsbS5uZXh0RG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIG0ueD1NYXRoLnNpbihtLnNlZWQrKykqMWU0LG0ueC1NYXRoLmZsb29yKG0ueCl9LGYuZXhwb3J0cz1tfSxmdW5jdGlvbihmLHAsdyl7dmFyIG09dyg0KTtmdW5jdGlvbiBiKEUsXyl7dGhpcy5sd29ybGRPcmdYPTAsdGhpcy5sd29ybGRPcmdZPTAsdGhpcy5sZGV2aWNlT3JnWD0wLHRoaXMubGRldmljZU9yZ1k9MCx0aGlzLmx3b3JsZEV4dFg9MSx0aGlzLmx3b3JsZEV4dFk9MSx0aGlzLmxkZXZpY2VFeHRYPTEsdGhpcy5sZGV2aWNlRXh0WT0xfWIucHJvdG90eXBlLmdldFdvcmxkT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1h9LGIucHJvdG90eXBlLnNldFdvcmxkT3JnWD1mdW5jdGlvbihFKXt0aGlzLmx3b3JsZE9yZ1g9RX0sYi5wcm90b3R5cGUuZ2V0V29ybGRPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWX0sYi5wcm90b3R5cGUuc2V0V29ybGRPcmdZPWZ1bmN0aW9uKEUpe3RoaXMubHdvcmxkT3JnWT1FfSxiLnByb3RvdHlwZS5nZXRXb3JsZEV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRYfSxiLnByb3RvdHlwZS5zZXRXb3JsZEV4dFg9ZnVuY3Rpb24oRSl7dGhpcy5sd29ybGRFeHRYPUV9LGIucHJvdG90eXBlLmdldFdvcmxkRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFl9LGIucHJvdG90eXBlLnNldFdvcmxkRXh0WT1mdW5jdGlvbihFKXt0aGlzLmx3b3JsZEV4dFk9RX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdYfSxiLnByb3RvdHlwZS5zZXREZXZpY2VPcmdYPWZ1bmN0aW9uKEUpe3RoaXMubGRldmljZU9yZ1g9RX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdZfSxiLnByb3RvdHlwZS5zZXREZXZpY2VPcmdZPWZ1bmN0aW9uKEUpe3RoaXMubGRldmljZU9yZ1k9RX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRYfSxiLnByb3RvdHlwZS5zZXREZXZpY2VFeHRYPWZ1bmN0aW9uKEUpe3RoaXMubGRldmljZUV4dFg9RX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRZfSxiLnByb3RvdHlwZS5zZXREZXZpY2VFeHRZPWZ1bmN0aW9uKEUpe3RoaXMubGRldmljZUV4dFk9RX0sYi5wcm90b3R5cGUudHJhbnNmb3JtWD1mdW5jdGlvbihFKXt2YXIgXz0wLEE9dGhpcy5sd29ybGRFeHRYO3JldHVybiBBIT0wJiYoXz10aGlzLmxkZXZpY2VPcmdYKyhFLXRoaXMubHdvcmxkT3JnWCkqdGhpcy5sZGV2aWNlRXh0WC9BKSxffSxiLnByb3RvdHlwZS50cmFuc2Zvcm1ZPWZ1bmN0aW9uKEUpe3ZhciBfPTAsQT10aGlzLmx3b3JsZEV4dFk7cmV0dXJuIEEhPTAmJihfPXRoaXMubGRldmljZU9yZ1krKEUtdGhpcy5sd29ybGRPcmdZKSp0aGlzLmxkZXZpY2VFeHRZL0EpLF99LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1YPWZ1bmN0aW9uKEUpe3ZhciBfPTAsQT10aGlzLmxkZXZpY2VFeHRYO3JldHVybiBBIT0wJiYoXz10aGlzLmx3b3JsZE9yZ1grKEUtdGhpcy5sZGV2aWNlT3JnWCkqdGhpcy5sd29ybGRFeHRYL0EpLF99LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1ZPWZ1bmN0aW9uKEUpe3ZhciBfPTAsQT10aGlzLmxkZXZpY2VFeHRZO3JldHVybiBBIT0wJiYoXz10aGlzLmx3b3JsZE9yZ1krKEUtdGhpcy5sZGV2aWNlT3JnWSkqdGhpcy5sd29ybGRFeHRZL0EpLF99LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1Qb2ludD1mdW5jdGlvbihFKXt2YXIgXz1uZXcgbSh0aGlzLmludmVyc2VUcmFuc2Zvcm1YKEUueCksdGhpcy5pbnZlcnNlVHJhbnNmb3JtWShFLnkpKTtyZXR1cm4gX30sZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx3KXtmdW5jdGlvbiBtKFIpe2lmKEFycmF5LmlzQXJyYXkoUikpe2Zvcih2YXIgej0wLFc9QXJyYXkoUi5sZW5ndGgpO3o8Ui5sZW5ndGg7eisrKVdbel09Ult6XTtyZXR1cm4gV31lbHNlIHJldHVybiBBcnJheS5mcm9tKFIpfXZhciBiPXcoMTUpLEU9dyg3KSxfPXcoMCksQT13KDgpLEk9dyg5KTtmdW5jdGlvbiBCKCl7Yi5jYWxsKHRoaXMpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1FLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuaWRlYWxFZGdlTGVuZ3RoPUUuREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLnNwcmluZ0NvbnN0YW50PUUuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEgsdGhpcy5yZXB1bHNpb25Db25zdGFudD1FLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RILHRoaXMuZ3Jhdml0eUNvbnN0YW50PUUuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9RS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9RS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9RS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZT0zKkUuREVGQVVMVF9FREdFX0xFTkdUSC8xMDAsdGhpcy5jb29saW5nRmFjdG9yPUUuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPUUuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD0wLHRoaXMubWF4SXRlcmF0aW9ucz1FLk1BWF9JVEVSQVRJT05TfUIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgTiBpbiBiKUJbTl09YltOXTtCLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMudG90YWxJdGVyYXRpb25zPTAsdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCx0aGlzLnVzZUZSR3JpZFZhcmlhbnQ9RS5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT04sdGhpcy5ncmlkPVtdfSxCLnByb3RvdHlwZS5jYWxjSWRlYWxFZGdlTGVuZ3Rocz1mdW5jdGlvbigpe2Zvcih2YXIgUix6LFcsZXQsc3QsYXQsYnQ9dGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRBbGxFZGdlcygpLG10PTA7bXQ8YnQubGVuZ3RoO210KyspUj1idFttdF0sUi5pZGVhbExlbmd0aD10aGlzLmlkZWFsRWRnZUxlbmd0aCxSLmlzSW50ZXJHcmFwaCYmKFc9Ui5nZXRTb3VyY2UoKSxldD1SLmdldFRhcmdldCgpLHN0PVIuZ2V0U291cmNlSW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCksYXQ9Ui5nZXRUYXJnZXRJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb24mJihSLmlkZWFsTGVuZ3RoKz1zdCthdC0yKl8uU0lNUExFX05PREVfU0laRSksej1SLmdldExjYSgpLmdldEluY2x1c2lvblRyZWVEZXB0aCgpLFIuaWRlYWxMZW5ndGgrPUUuREVGQVVMVF9FREdFX0xFTkdUSCpFLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IqKFcuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkrZXQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCktMip6KSl9LEIucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3ZhciBSPXRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGg7dGhpcy5pbmNyZW1lbnRhbD8oUj5FLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCYmKHRoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heCh0aGlzLmNvb2xpbmdGYWN0b3IqRS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLHRoaXMuY29vbGluZ0ZhY3Rvci0oUi1FLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkvKEUuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlULUUuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSp0aGlzLmNvb2xpbmdGYWN0b3IqKDEtRS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSkpLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1FLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCk6KFI+RS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ/dGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KEUuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiwxLShSLUUuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oRS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtRS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKigxLUUuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpOnRoaXMuY29vbGluZ0ZhY3Rvcj0xLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9dGhpcy5jb29saW5nRmFjdG9yLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1FLk1BWF9OT0RFX0RJU1BMQUNFTUVOVCksdGhpcy5tYXhJdGVyYXRpb25zPU1hdGgubWF4KHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgqNSx0aGlzLm1heEl0ZXJhdGlvbnMpLHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQ9dGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlKnRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgsdGhpcy5yZXB1bHNpb25SYW5nZT10aGlzLmNhbGNSZXB1bHNpb25SYW5nZSgpfSxCLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBSPXRoaXMuZ2V0QWxsRWRnZXMoKSx6LFc9MDtXPFIubGVuZ3RoO1crKyl6PVJbV10sdGhpcy5jYWxjU3ByaW5nRm9yY2Uoeix6LmlkZWFsTGVuZ3RoKX0sQi5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlcz1mdW5jdGlvbigpe3ZhciBSPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCx6PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMSxXLGV0LHN0LGF0LGJ0PXRoaXMuZ2V0QWxsTm9kZXMoKSxtdDtpZih0aGlzLnVzZUZSR3JpZFZhcmlhbnQpZm9yKHRoaXMudG90YWxJdGVyYXRpb25zJUUuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJlImJnRoaXMudXBkYXRlR3JpZCgpLG10PW5ldyBTZXQsVz0wO1c8YnQubGVuZ3RoO1crKylzdD1idFtXXSx0aGlzLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZShzdCxtdCxSLHopLG10LmFkZChzdCk7ZWxzZSBmb3IoVz0wO1c8YnQubGVuZ3RoO1crKylmb3Ioc3Q9YnRbV10sZXQ9VysxO2V0PGJ0Lmxlbmd0aDtldCsrKWF0PWJ0W2V0XSxzdC5nZXRPd25lcigpPT1hdC5nZXRPd25lcigpJiZ0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShzdCxhdCl9LEIucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBSLHo9dGhpcy5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpLFc9MDtXPHoubGVuZ3RoO1crKylSPXpbV10sdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlKFIpfSxCLnByb3RvdHlwZS5tb3ZlTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIFI9dGhpcy5nZXRBbGxOb2RlcygpLHosVz0wO1c8Ui5sZW5ndGg7VysrKXo9UltXXSx6Lm1vdmUoKX0sQi5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlPWZ1bmN0aW9uKFIseil7dmFyIFc9Ui5nZXRTb3VyY2UoKSxldD1SLmdldFRhcmdldCgpLHN0LGF0LGJ0LG10O2lmKHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJlcuZ2V0Q2hpbGQoKT09bnVsbCYmZXQuZ2V0Q2hpbGQoKT09bnVsbClSLnVwZGF0ZUxlbmd0aFNpbXBsZSgpO2Vsc2UgaWYoUi51cGRhdGVMZW5ndGgoKSxSLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldClyZXR1cm47c3Q9Ui5nZXRMZW5ndGgoKSxzdCE9MCYmKGF0PXRoaXMuc3ByaW5nQ29uc3RhbnQqKHN0LXopLGJ0PWF0KihSLmxlbmd0aFgvc3QpLG10PWF0KihSLmxlbmd0aFkvc3QpLFcuc3ByaW5nRm9yY2VYKz1idCxXLnNwcmluZ0ZvcmNlWSs9bXQsZXQuc3ByaW5nRm9yY2VYLT1idCxldC5zcHJpbmdGb3JjZVktPW10KX0sQi5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlPWZ1bmN0aW9uKFIseil7dmFyIFc9Ui5nZXRSZWN0KCksZXQ9ei5nZXRSZWN0KCksc3Q9bmV3IEFycmF5KDIpLGF0PW5ldyBBcnJheSg0KSxidCxtdCx5dCxmdCx1dCx2dCxYO2lmKFcuaW50ZXJzZWN0cyhldCkpe0EuY2FsY1NlcGFyYXRpb25BbW91bnQoVyxldCxzdCxFLkRFRkFVTFRfRURHRV9MRU5HVEgvMiksdnQ9MipzdFswXSxYPTIqc3RbMV07dmFyIHB0PVIubm9PZkNoaWxkcmVuKnoubm9PZkNoaWxkcmVuLyhSLm5vT2ZDaGlsZHJlbit6Lm5vT2ZDaGlsZHJlbik7Ui5yZXB1bHNpb25Gb3JjZVgtPXB0KnZ0LFIucmVwdWxzaW9uRm9yY2VZLT1wdCpYLHoucmVwdWxzaW9uRm9yY2VYKz1wdCp2dCx6LnJlcHVsc2lvbkZvcmNlWSs9cHQqWH1lbHNlIHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJlIuZ2V0Q2hpbGQoKT09bnVsbCYmei5nZXRDaGlsZCgpPT1udWxsPyhidD1ldC5nZXRDZW50ZXJYKCktVy5nZXRDZW50ZXJYKCksbXQ9ZXQuZ2V0Q2VudGVyWSgpLVcuZ2V0Q2VudGVyWSgpKTooQS5nZXRJbnRlcnNlY3Rpb24oVyxldCxhdCksYnQ9YXRbMl0tYXRbMF0sbXQ9YXRbM10tYXRbMV0pLE1hdGguYWJzKGJ0KTxFLk1JTl9SRVBVTFNJT05fRElTVCYmKGJ0PUkuc2lnbihidCkqRS5NSU5fUkVQVUxTSU9OX0RJU1QpLE1hdGguYWJzKG10KTxFLk1JTl9SRVBVTFNJT05fRElTVCYmKG10PUkuc2lnbihtdCkqRS5NSU5fUkVQVUxTSU9OX0RJU1QpLHl0PWJ0KmJ0K210Km10LGZ0PU1hdGguc3FydCh5dCksdXQ9dGhpcy5yZXB1bHNpb25Db25zdGFudCpSLm5vT2ZDaGlsZHJlbip6Lm5vT2ZDaGlsZHJlbi95dCx2dD11dCpidC9mdCxYPXV0Km10L2Z0LFIucmVwdWxzaW9uRm9yY2VYLT12dCxSLnJlcHVsc2lvbkZvcmNlWS09WCx6LnJlcHVsc2lvbkZvcmNlWCs9dnQsei5yZXB1bHNpb25Gb3JjZVkrPVh9LEIucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2U9ZnVuY3Rpb24oUil7dmFyIHosVyxldCxzdCxhdCxidCxtdCx5dDt6PVIuZ2V0T3duZXIoKSxXPSh6LmdldFJpZ2h0KCkrei5nZXRMZWZ0KCkpLzIsZXQ9KHouZ2V0VG9wKCkrei5nZXRCb3R0b20oKSkvMixzdD1SLmdldENlbnRlclgoKS1XLGF0PVIuZ2V0Q2VudGVyWSgpLWV0LGJ0PU1hdGguYWJzKHN0KStSLmdldFdpZHRoKCkvMixtdD1NYXRoLmFicyhhdCkrUi5nZXRIZWlnaHQoKS8yLFIuZ2V0T3duZXIoKT09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPyh5dD16LmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmdyYXZpdHlSYW5nZUZhY3RvciwoYnQ+eXR8fG10Pnl0KSYmKFIuZ3Jhdml0YXRpb25Gb3JjZVg9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnN0LFIuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KmF0KSk6KHl0PXouZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3IsKGJ0Pnl0fHxtdD55dCkmJihSLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCpzdCp0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50LFIuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KmF0KnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQpKX0sQi5wcm90b3R5cGUuaXNDb252ZXJnZWQ9ZnVuY3Rpb24oKXt2YXIgUix6PSExO3JldHVybiB0aGlzLnRvdGFsSXRlcmF0aW9ucz50aGlzLm1heEl0ZXJhdGlvbnMvMyYmKHo9TWF0aC5hYnModGhpcy50b3RhbERpc3BsYWNlbWVudC10aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50KTwyKSxSPXRoaXMudG90YWxEaXNwbGFjZW1lbnQ8dGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PXRoaXMudG90YWxEaXNwbGFjZW1lbnQsUnx8en0sQi5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0JiYhdGhpcy5pc1N1YkxheW91dCYmKHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPT10aGlzLmFuaW1hdGlvblBlcmlvZD8odGhpcy51cGRhdGUoKSx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wKTp0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucysrKX0sQi5wcm90b3R5cGUuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBSLHo9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxXPTA7Vzx6Lmxlbmd0aDtXKyspUj16W1ddLFIubm9PZkNoaWxkcmVuPVIuZ2V0Tm9PZkNoaWxkcmVuKCl9LEIucHJvdG90eXBlLmNhbGNHcmlkPWZ1bmN0aW9uKFIpe3ZhciB6PTAsVz0wO3o9cGFyc2VJbnQoTWF0aC5jZWlsKChSLmdldFJpZ2h0KCktUi5nZXRMZWZ0KCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxXPXBhcnNlSW50KE1hdGguY2VpbCgoUi5nZXRCb3R0b20oKS1SLmdldFRvcCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBldD1uZXcgQXJyYXkoeiksc3Q9MDtzdDx6O3N0KyspZXRbc3RdPW5ldyBBcnJheShXKTtmb3IodmFyIHN0PTA7c3Q8ejtzdCsrKWZvcih2YXIgYXQ9MDthdDxXO2F0KyspZXRbc3RdW2F0XT1uZXcgQXJyYXk7cmV0dXJuIGV0fSxCLnByb3RvdHlwZS5hZGROb2RlVG9HcmlkPWZ1bmN0aW9uKFIseixXKXt2YXIgZXQ9MCxzdD0wLGF0PTAsYnQ9MDtldD1wYXJzZUludChNYXRoLmZsb29yKChSLmdldFJlY3QoKS54LXopL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxzdD1wYXJzZUludChNYXRoLmZsb29yKChSLmdldFJlY3QoKS53aWR0aCtSLmdldFJlY3QoKS54LXopL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxhdD1wYXJzZUludChNYXRoLmZsb29yKChSLmdldFJlY3QoKS55LVcpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxidD1wYXJzZUludChNYXRoLmZsb29yKChSLmdldFJlY3QoKS5oZWlnaHQrUi5nZXRSZWN0KCkueS1XKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBtdD1ldDttdDw9c3Q7bXQrKylmb3IodmFyIHl0PWF0O3l0PD1idDt5dCsrKXRoaXMuZ3JpZFttdF1beXRdLnB1c2goUiksUi5zZXRHcmlkQ29vcmRpbmF0ZXMoZXQsc3QsYXQsYnQpfSxCLnByb3RvdHlwZS51cGRhdGVHcmlkPWZ1bmN0aW9uKCl7dmFyIFIseixXPXRoaXMuZ2V0QWxsTm9kZXMoKTtmb3IodGhpcy5ncmlkPXRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKSxSPTA7UjxXLmxlbmd0aDtSKyspej1XW1JdLHRoaXMuYWRkTm9kZVRvR3JpZCh6LHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldFRvcCgpKX0sQi5wcm90b3R5cGUuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlPWZ1bmN0aW9uKFIseixXLGV0KXtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVFLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPT0xJiZXfHxldCl7dmFyIHN0PW5ldyBTZXQ7Ui5zdXJyb3VuZGluZz1uZXcgQXJyYXk7Zm9yKHZhciBhdCxidD10aGlzLmdyaWQsbXQ9Ui5zdGFydFgtMTttdDxSLmZpbmlzaFgrMjttdCsrKWZvcih2YXIgeXQ9Ui5zdGFydFktMTt5dDxSLmZpbmlzaFkrMjt5dCsrKWlmKCEobXQ8MHx8eXQ8MHx8bXQ+PWJ0Lmxlbmd0aHx8eXQ+PWJ0WzBdLmxlbmd0aCkpe2Zvcih2YXIgZnQ9MDtmdDxidFttdF1beXRdLmxlbmd0aDtmdCsrKWlmKGF0PWJ0W210XVt5dF1bZnRdLCEoUi5nZXRPd25lcigpIT1hdC5nZXRPd25lcigpfHxSPT1hdCkmJiF6LmhhcyhhdCkmJiFzdC5oYXMoYXQpKXt2YXIgdXQ9TWF0aC5hYnMoUi5nZXRDZW50ZXJYKCktYXQuZ2V0Q2VudGVyWCgpKS0oUi5nZXRXaWR0aCgpLzIrYXQuZ2V0V2lkdGgoKS8yKSx2dD1NYXRoLmFicyhSLmdldENlbnRlclkoKS1hdC5nZXRDZW50ZXJZKCkpLShSLmdldEhlaWdodCgpLzIrYXQuZ2V0SGVpZ2h0KCkvMik7dXQ8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJnZ0PD10aGlzLnJlcHVsc2lvblJhbmdlJiZzdC5hZGQoYXQpfX1SLnN1cnJvdW5kaW5nPVtdLmNvbmNhdChtKHN0KSl9Zm9yKG10PTA7bXQ8Ui5zdXJyb3VuZGluZy5sZW5ndGg7bXQrKyl0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShSLFIuc3Vycm91bmRpbmdbbXRdKX0sQi5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGYuZXhwb3J0cz1CfSxmdW5jdGlvbihmLHAsdyl7dmFyIG09dygxKSxiPXcoNyk7ZnVuY3Rpb24gRShBLEksQil7bS5jYWxsKHRoaXMsQSxJLEIpLHRoaXMuaWRlYWxMZW5ndGg9Yi5ERUZBVUxUX0VER0VfTEVOR1RIfUUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpO2Zvcih2YXIgXyBpbiBtKUVbX109bVtfXTtmLmV4cG9ydHM9RX0sZnVuY3Rpb24oZixwLHcpe3ZhciBtPXcoMyk7ZnVuY3Rpb24gYihfLEEsSSxCKXttLmNhbGwodGhpcyxfLEEsSSxCKSx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTAsdGhpcy5zdGFydFg9MCx0aGlzLmZpbmlzaFg9MCx0aGlzLnN0YXJ0WT0wLHRoaXMuZmluaXNoWT0wLHRoaXMuc3Vycm91bmRpbmc9W119Yi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSk7Zm9yKHZhciBFIGluIG0pYltFXT1tW0VdO2IucHJvdG90eXBlLnNldEdyaWRDb29yZGluYXRlcz1mdW5jdGlvbihfLEEsSSxCKXt0aGlzLnN0YXJ0WD1fLHRoaXMuZmluaXNoWD1BLHRoaXMuc3RhcnRZPUksdGhpcy5maW5pc2hZPUJ9LGYuZXhwb3J0cz1ifSxmdW5jdGlvbihmLHAsdyl7ZnVuY3Rpb24gbShiLEUpe3RoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGIhPT1udWxsJiZFIT09bnVsbCYmKHRoaXMuaGVpZ2h0PUUsdGhpcy53aWR0aD1iKX1tLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSxtLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihiKXt0aGlzLndpZHRoPWJ9LG0ucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sbS5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGIpe3RoaXMuaGVpZ2h0PWJ9LGYuZXhwb3J0cz1tfSxmdW5jdGlvbihmLHAsdyl7dmFyIG09dygxNCk7ZnVuY3Rpb24gYigpe3RoaXMubWFwPXt9LHRoaXMua2V5cz1bXX1iLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oRSxfKXt2YXIgQT1tLmNyZWF0ZUlEKEUpO3RoaXMuY29udGFpbnMoQSl8fCh0aGlzLm1hcFtBXT1fLHRoaXMua2V5cy5wdXNoKEUpKX0sYi5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oRSl7cmV0dXJuIG0uY3JlYXRlSUQoRSksdGhpcy5tYXBbRV0hPW51bGx9LGIucHJvdG90eXBlLmdldD1mdW5jdGlvbihFKXt2YXIgXz1tLmNyZWF0ZUlEKEUpO3JldHVybiB0aGlzLm1hcFtfXX0sYi5wcm90b3R5cGUua2V5U2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5c30sZi5leHBvcnRzPWJ9LGZ1bmN0aW9uKGYscCx3KXt2YXIgbT13KDE0KTtmdW5jdGlvbiBiKCl7dGhpcy5zZXQ9e319Yi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEUpe3ZhciBfPW0uY3JlYXRlSUQoRSk7dGhpcy5jb250YWlucyhfKXx8KHRoaXMuc2V0W19dPUUpfSxiLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oRSl7ZGVsZXRlIHRoaXMuc2V0W20uY3JlYXRlSUQoRSldfSxiLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2V0PXt9fSxiLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5zZXRbbS5jcmVhdGVJRChFKV09PUV9LGIucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCk9PT0wfSxiLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGIucHJvdG90eXBlLmFkZEFsbFRvPWZ1bmN0aW9uKEUpe2Zvcih2YXIgXz1PYmplY3Qua2V5cyh0aGlzLnNldCksQT1fLmxlbmd0aCxJPTA7STxBO0krKylFLnB1c2godGhpcy5zZXRbX1tJXV0pfSxiLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGIucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbihFKXtmb3IodmFyIF89RS5sZW5ndGgsQT0wO0E8XztBKyspe3ZhciBJPUVbQV07dGhpcy5hZGQoSSl9fSxmLmV4cG9ydHM9Yn0sZnVuY3Rpb24oZixwLHcpe3ZhciBtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQShJLEIpe2Zvcih2YXIgTj0wO048Qi5sZW5ndGg7TisrKXt2YXIgUj1CW05dO1IuZW51bWVyYWJsZT1SLmVudW1lcmFibGV8fCExLFIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBSJiYoUi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksUi5rZXksUil9fXJldHVybiBmdW5jdGlvbihJLEIsTil7cmV0dXJuIEImJkEoSS5wcm90b3R5cGUsQiksTiYmQShJLE4pLEl9fSgpO2Z1bmN0aW9uIGIoQSxJKXtpZighKEEgaW5zdGFuY2VvZiBJKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgRT13KDExKSxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQShJLEIpe2IodGhpcyxBKSwoQiE9PW51bGx8fEIhPT12b2lkIDApJiYodGhpcy5jb21wYXJlRnVuY3Rpb249dGhpcy5fZGVmYXVsdENvbXBhcmVGdW5jdGlvbik7dmFyIE49dm9pZCAwO0kgaW5zdGFuY2VvZiBFP049SS5zaXplKCk6Tj1JLmxlbmd0aCx0aGlzLl9xdWlja3NvcnQoSSwwLE4tMSl9cmV0dXJuIG0oQSxbe2tleToiX3F1aWNrc29ydCIsdmFsdWU6ZnVuY3Rpb24oQixOLFIpe2lmKE48Uil7dmFyIHo9dGhpcy5fcGFydGl0aW9uKEIsTixSKTt0aGlzLl9xdWlja3NvcnQoQixOLHopLHRoaXMuX3F1aWNrc29ydChCLHorMSxSKX19fSx7a2V5OiJfcGFydGl0aW9uIix2YWx1ZTpmdW5jdGlvbihCLE4sUil7Zm9yKHZhciB6PXRoaXMuX2dldChCLE4pLFc9TixldD1SOzspe2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24oeix0aGlzLl9nZXQoQixldCkpOylldC0tO2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24odGhpcy5fZ2V0KEIsVykseik7KVcrKztpZihXPGV0KXRoaXMuX3N3YXAoQixXLGV0KSxXKyssZXQtLTtlbHNlIHJldHVybiBldH19fSx7a2V5OiJfZ2V0Iix2YWx1ZTpmdW5jdGlvbihCLE4pe3JldHVybiBCIGluc3RhbmNlb2YgRT9CLmdldF9vYmplY3RfYXQoTik6QltOXX19LHtrZXk6Il9zZXQiLHZhbHVlOmZ1bmN0aW9uKEIsTixSKXtCIGluc3RhbmNlb2YgRT9CLnNldF9vYmplY3RfYXQoTixSKTpCW05dPVJ9fSx7a2V5OiJfc3dhcCIsdmFsdWU6ZnVuY3Rpb24oQixOLFIpe3ZhciB6PXRoaXMuX2dldChCLE4pO3RoaXMuX3NldChCLE4sdGhpcy5fZ2V0KEIsUikpLHRoaXMuX3NldChCLFIseil9fSx7a2V5OiJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIsdmFsdWU6ZnVuY3Rpb24oQixOKXtyZXR1cm4gTj5CfX1dKSxBfSgpO2YuZXhwb3J0cz1ffSxmdW5jdGlvbihmLHAsdyl7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBfKEEsSSl7Zm9yKHZhciBCPTA7QjxJLmxlbmd0aDtCKyspe3ZhciBOPUlbQl07Ti5lbnVtZXJhYmxlPU4uZW51bWVyYWJsZXx8ITEsTi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIE4mJihOLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxOLmtleSxOKX19cmV0dXJuIGZ1bmN0aW9uKEEsSSxCKXtyZXR1cm4gSSYmXyhBLnByb3RvdHlwZSxJKSxCJiZfKEEsQiksQX19KCk7ZnVuY3Rpb24gYihfLEEpe2lmKCEoXyBpbnN0YW5jZW9mIEEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gXyhBLEkpe3ZhciBCPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXToxLE49YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOi0xLFI9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOi0xO2IodGhpcyxfKSx0aGlzLnNlcXVlbmNlMT1BLHRoaXMuc2VxdWVuY2UyPUksdGhpcy5tYXRjaF9zY29yZT1CLHRoaXMubWlzbWF0Y2hfcGVuYWx0eT1OLHRoaXMuZ2FwX3BlbmFsdHk9Uix0aGlzLmlNYXg9QS5sZW5ndGgrMSx0aGlzLmpNYXg9SS5sZW5ndGgrMSx0aGlzLmdyaWQ9bmV3IEFycmF5KHRoaXMuaU1heCk7Zm9yKHZhciB6PTA7ejx0aGlzLmlNYXg7eisrKXt0aGlzLmdyaWRbel09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBXPTA7Vzx0aGlzLmpNYXg7VysrKXRoaXMuZ3JpZFt6XVtXXT0wfXRoaXMudHJhY2ViYWNrR3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIGV0PTA7ZXQ8dGhpcy5pTWF4O2V0Kyspe3RoaXMudHJhY2ViYWNrR3JpZFtldF09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBzdD0wO3N0PHRoaXMuak1heDtzdCsrKXRoaXMudHJhY2ViYWNrR3JpZFtldF1bc3RdPVtudWxsLG51bGwsbnVsbF19dGhpcy5hbGlnbm1lbnRzPVtdLHRoaXMuc2NvcmU9LTEsdGhpcy5jb21wdXRlR3JpZHMoKX1yZXR1cm4gbShfLFt7a2V5OiJnZXRTY29yZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY29yZX19LHtrZXk6ImdldEFsaWdubWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxpZ25tZW50c319LHtrZXk6ImNvbXB1dGVHcmlkcyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIEk9MTtJPHRoaXMuak1heDtJKyspdGhpcy5ncmlkWzBdW0ldPXRoaXMuZ3JpZFswXVtJLTFdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkWzBdW0ldPVshMSwhMSwhMF07Zm9yKHZhciBCPTE7Qjx0aGlzLmlNYXg7QisrKXRoaXMuZ3JpZFtCXVswXT10aGlzLmdyaWRbQi0xXVswXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFtCXVswXT1bITEsITAsITFdO2Zvcih2YXIgTj0xO048dGhpcy5pTWF4O04rKylmb3IodmFyIFI9MTtSPHRoaXMuak1heDtSKyspe3ZhciB6PXZvaWQgMDt0aGlzLnNlcXVlbmNlMVtOLTFdPT09dGhpcy5zZXF1ZW5jZTJbUi0xXT96PXRoaXMuZ3JpZFtOLTFdW1ItMV0rdGhpcy5tYXRjaF9zY29yZTp6PXRoaXMuZ3JpZFtOLTFdW1ItMV0rdGhpcy5taXNtYXRjaF9wZW5hbHR5O3ZhciBXPXRoaXMuZ3JpZFtOLTFdW1JdK3RoaXMuZ2FwX3BlbmFsdHksZXQ9dGhpcy5ncmlkW05dW1ItMV0rdGhpcy5nYXBfcGVuYWx0eSxzdD1beixXLGV0XSxhdD10aGlzLmFycmF5QWxsTWF4SW5kZXhlcyhzdCk7dGhpcy5ncmlkW05dW1JdPXN0W2F0WzBdXSx0aGlzLnRyYWNlYmFja0dyaWRbTl1bUl09W2F0LmluY2x1ZGVzKDApLGF0LmluY2x1ZGVzKDEpLGF0LmluY2x1ZGVzKDIpXX10aGlzLnNjb3JlPXRoaXMuZ3JpZFt0aGlzLmlNYXgtMV1bdGhpcy5qTWF4LTFdfX0se2tleToiYWxpZ25tZW50VHJhY2ViYWNrIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBJPVtdO2ZvcihJLnB1c2goe3BvczpbdGhpcy5zZXF1ZW5jZTEubGVuZ3RoLHRoaXMuc2VxdWVuY2UyLmxlbmd0aF0sc2VxMToiIixzZXEyOiIifSk7SVswXTspe3ZhciBCPUlbMF0sTj10aGlzLnRyYWNlYmFja0dyaWRbQi5wb3NbMF1dW0IucG9zWzFdXTtOWzBdJiZJLnB1c2goe3BvczpbQi5wb3NbMF0tMSxCLnBvc1sxXS0xXSxzZXExOnRoaXMuc2VxdWVuY2UxW0IucG9zWzBdLTFdK0Iuc2VxMSxzZXEyOnRoaXMuc2VxdWVuY2UyW0IucG9zWzFdLTFdK0Iuc2VxMn0pLE5bMV0mJkkucHVzaCh7cG9zOltCLnBvc1swXS0xLEIucG9zWzFdXSxzZXExOnRoaXMuc2VxdWVuY2UxW0IucG9zWzBdLTFdK0Iuc2VxMSxzZXEyOiItIitCLnNlcTJ9KSxOWzJdJiZJLnB1c2goe3BvczpbQi5wb3NbMF0sQi5wb3NbMV0tMV0sc2VxMToiLSIrQi5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbQi5wb3NbMV0tMV0rQi5zZXEyfSksQi5wb3NbMF09PT0wJiZCLnBvc1sxXT09PTAmJnRoaXMuYWxpZ25tZW50cy5wdXNoKHtzZXF1ZW5jZTE6Qi5zZXExLHNlcXVlbmNlMjpCLnNlcTJ9KSxJLnNoaWZ0KCl9cmV0dXJuIHRoaXMuYWxpZ25tZW50c319LHtrZXk6ImdldEFsbEluZGV4ZXMiLHZhbHVlOmZ1bmN0aW9uKEksQil7Zm9yKHZhciBOPVtdLFI9LTE7KFI9SS5pbmRleE9mKEIsUisxKSkhPT0tMTspTi5wdXNoKFIpO3JldHVybiBOfX0se2tleToiYXJyYXlBbGxNYXhJbmRleGVzIix2YWx1ZTpmdW5jdGlvbihJKXtyZXR1cm4gdGhpcy5nZXRBbGxJbmRleGVzKEksTWF0aC5tYXguYXBwbHkobnVsbCxJKSl9fV0pLF99KCk7Zi5leHBvcnRzPUV9LGZ1bmN0aW9uKGYscCx3KXt2YXIgbT1mdW5jdGlvbigpe307bS5GRExheW91dD13KDE4KSxtLkZETGF5b3V0Q29uc3RhbnRzPXcoNyksbS5GRExheW91dEVkZ2U9dygxOSksbS5GRExheW91dE5vZGU9dygyMCksbS5EaW1lbnNpb25EPXcoMjEpLG0uSGFzaE1hcD13KDIyKSxtLkhhc2hTZXQ9dygyMyksbS5JR2VvbWV0cnk9dyg4KSxtLklNYXRoPXcoOSksbS5JbnRlZ2VyPXcoMTApLG0uUG9pbnQ9dygxMiksbS5Qb2ludEQ9dyg0KSxtLlJhbmRvbVNlZWQ9dygxNiksbS5SZWN0YW5nbGVEPXcoMTMpLG0uVHJhbnNmb3JtPXcoMTcpLG0uVW5pcXVlSURHZW5lcmV0b3I9dygxNCksbS5RdWlja3NvcnQ9dygyNCksbS5MaW5rZWRMaXN0PXcoMTEpLG0uTEdyYXBoT2JqZWN0PXcoMiksbS5MR3JhcGg9dyg1KSxtLkxFZGdlPXcoMSksbS5MR3JhcGhNYW5hZ2VyPXcoNiksbS5MTm9kZT13KDMpLG0uTGF5b3V0PXcoMTUpLG0uTGF5b3V0Q29uc3RhbnRzPXcoMCksbS5OZWVkbGVtYW5XdW5zY2g9dygyNSksZi5leHBvcnRzPW19LGZ1bmN0aW9uKGYscCx3KXtmdW5jdGlvbiBtKCl7dGhpcy5saXN0ZW5lcnM9W119dmFyIGI9bS5wcm90b3R5cGU7Yi5hZGRMaXN0ZW5lcj1mdW5jdGlvbihFLF8pe3RoaXMubGlzdGVuZXJzLnB1c2goe2V2ZW50OkUsY2FsbGJhY2s6X30pfSxiLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKEUsXyl7Zm9yKHZhciBBPXRoaXMubGlzdGVuZXJzLmxlbmd0aDtBPj0wO0EtLSl7dmFyIEk9dGhpcy5saXN0ZW5lcnNbQV07SS5ldmVudD09PUUmJkkuY2FsbGJhY2s9PT1fJiZ0aGlzLmxpc3RlbmVycy5zcGxpY2UoQSwxKX19LGIuZW1pdD1mdW5jdGlvbihFLF8pe2Zvcih2YXIgQT0wO0E8dGhpcy5saXN0ZW5lcnMubGVuZ3RoO0ErKyl7dmFyIEk9dGhpcy5saXN0ZW5lcnNbQV07RT09PUkuZXZlbnQmJkkuY2FsbGJhY2soXyl9fSxmLmV4cG9ydHM9bX1dKX0pfShlcHQpKSxlcHQuZXhwb3J0c312YXIgZCR0O2Z1bmN0aW9uIGNZZSgpe3JldHVybiBkJHR8fChkJHQ9MSxmdW5jdGlvbihpLGEpeyhmdW5jdGlvbihwLHcpe2kuZXhwb3J0cz13KG9ZZSgpKX0pKGIwLGZ1bmN0aW9uKGYpe3JldHVybiBmdW5jdGlvbihwKXt2YXIgdz17fTtmdW5jdGlvbiBtKGIpe2lmKHdbYl0pcmV0dXJuIHdbYl0uZXhwb3J0czt2YXIgRT13W2JdPXtpOmIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gcFtiXS5jYWxsKEUuZXhwb3J0cyxFLEUuZXhwb3J0cyxtKSxFLmw9ITAsRS5leHBvcnRzfXJldHVybiBtLm09cCxtLmM9dyxtLmk9ZnVuY3Rpb24oYil7cmV0dXJuIGJ9LG0uZD1mdW5jdGlvbihiLEUsXyl7bS5vKGIsRSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLEUse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpffSl9LG0ubj1mdW5jdGlvbihiKXt2YXIgRT1iJiZiLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gYi5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBifTtyZXR1cm4gbS5kKEUsImEiLEUpLEV9LG0ubz1mdW5jdGlvbihiLEUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYixFKX0sbS5wPSIiLG0obS5zPTcpfShbZnVuY3Rpb24ocCx3KXtwLmV4cG9ydHM9Zn0sZnVuY3Rpb24ocCx3LG0pe3ZhciBiPW0oMCkuRkRMYXlvdXRDb25zdGFudHM7ZnVuY3Rpb24gRSgpe31mb3IodmFyIF8gaW4gYilFW19dPWJbX107RS5ERUZBVUxUX1VTRV9NVUxUSV9MRVZFTF9TQ0FMSU5HPSExLEUuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTj1iLkRFRkFVTFRfRURHRV9MRU5HVEgsRS5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OPTYwLEUuVElMRT0hMCxFLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPTEwLEUuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD0xMCxFLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMPSExLHAuZXhwb3J0cz1FfSxmdW5jdGlvbihwLHcsbSl7dmFyIGI9bSgwKS5GRExheW91dEVkZ2U7ZnVuY3Rpb24gRShBLEksQil7Yi5jYWxsKHRoaXMsQSxJLEIpfUUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgXyBpbiBiKUVbX109YltfXTtwLmV4cG9ydHM9RX0sZnVuY3Rpb24ocCx3LG0pe3ZhciBiPW0oMCkuTEdyYXBoO2Z1bmN0aW9uIEUoQSxJLEIpe2IuY2FsbCh0aGlzLEEsSSxCKX1FLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIF8gaW4gYilFW19dPWJbX107cC5leHBvcnRzPUV9LGZ1bmN0aW9uKHAsdyxtKXt2YXIgYj1tKDApLkxHcmFwaE1hbmFnZXI7ZnVuY3Rpb24gRShBKXtiLmNhbGwodGhpcyxBKX1FLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIF8gaW4gYilFW19dPWJbX107cC5leHBvcnRzPUV9LGZ1bmN0aW9uKHAsdyxtKXt2YXIgYj1tKDApLkZETGF5b3V0Tm9kZSxFPW0oMCkuSU1hdGg7ZnVuY3Rpb24gXyhJLEIsTixSKXtiLmNhbGwodGhpcyxJLEIsTixSKX1fLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIEEgaW4gYilfW0FdPWJbQV07Xy5wcm90b3R5cGUubW92ZT1mdW5jdGlvbigpe3ZhciBJPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO3RoaXMuZGlzcGxhY2VtZW50WD1JLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VYK3RoaXMucmVwdWxzaW9uRm9yY2VYK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpL3RoaXMubm9PZkNoaWxkcmVuLHRoaXMuZGlzcGxhY2VtZW50WT1JLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VZK3RoaXMucmVwdWxzaW9uRm9yY2VZK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVkpL3RoaXMubm9PZkNoaWxkcmVuLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCk+SS5jb29saW5nRmFjdG9yKkkubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WD1JLmNvb2xpbmdGYWN0b3IqSS5tYXhOb2RlRGlzcGxhY2VtZW50KkUuc2lnbih0aGlzLmRpc3BsYWNlbWVudFgpKSxNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpPkkuY29vbGluZ0ZhY3RvcipJLm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFk9SS5jb29saW5nRmFjdG9yKkkubWF4Tm9kZURpc3BsYWNlbWVudCpFLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRZKSksdGhpcy5jaGlsZD09bnVsbD90aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKTp0aGlzLmNoaWxkLmdldE5vZGVzKCkubGVuZ3RoPT0wP3RoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpOnRoaXMucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbih0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKSxJLnRvdGFsRGlzcGxhY2VtZW50Kz1NYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpK01hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSksdGhpcy5zcHJpbmdGb3JjZVg9MCx0aGlzLnNwcmluZ0ZvcmNlWT0wLHRoaXMucmVwdWxzaW9uRm9yY2VYPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVk9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VYPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWT0wLHRoaXMuZGlzcGxhY2VtZW50WD0wLHRoaXMuZGlzcGxhY2VtZW50WT0wfSxfLnByb3RvdHlwZS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuPWZ1bmN0aW9uKEksQil7Zm9yKHZhciBOPXRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLFIsej0wO3o8Ti5sZW5ndGg7eisrKVI9Tlt6XSxSLmdldENoaWxkKCk9PW51bGw/KFIubW92ZUJ5KEksQiksUi5kaXNwbGFjZW1lbnRYKz1JLFIuZGlzcGxhY2VtZW50WSs9Qik6Ui5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKEksQil9LF8ucHJvdG90eXBlLnNldFByZWQxPWZ1bmN0aW9uKEkpe3RoaXMucHJlZDE9SX0sXy5wcm90b3R5cGUuZ2V0UHJlZDE9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDF9LF8ucHJvdG90eXBlLmdldFByZWQyPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQyfSxfLnByb3RvdHlwZS5zZXROZXh0PWZ1bmN0aW9uKEkpe3RoaXMubmV4dD1JfSxfLnByb3RvdHlwZS5nZXROZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG5leHR9LF8ucHJvdG90eXBlLnNldFByb2Nlc3NlZD1mdW5jdGlvbihJKXt0aGlzLnByb2Nlc3NlZD1JfSxfLnByb3RvdHlwZS5pc1Byb2Nlc3NlZD1mdW5jdGlvbigpe3JldHVybiBwcm9jZXNzZWR9LHAuZXhwb3J0cz1ffSxmdW5jdGlvbihwLHcsbSl7dmFyIGI9bSgwKS5GRExheW91dCxFPW0oNCksXz1tKDMpLEE9bSg1KSxJPW0oMiksQj1tKDEpLE49bSgwKS5GRExheW91dENvbnN0YW50cyxSPW0oMCkuTGF5b3V0Q29uc3RhbnRzLHo9bSgwKS5Qb2ludCxXPW0oMCkuUG9pbnRELGV0PW0oMCkuTGF5b3V0LHN0PW0oMCkuSW50ZWdlcixhdD1tKDApLklHZW9tZXRyeSxidD1tKDApLkxHcmFwaCxtdD1tKDApLlRyYW5zZm9ybTtmdW5jdGlvbiB5dCgpe2IuY2FsbCh0aGlzKSx0aGlzLnRvQmVUaWxlZD17fX15dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSk7Zm9yKHZhciBmdCBpbiBiKXl0W2Z0XT1iW2Z0XTt5dC5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIHV0PW5ldyBFKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj11dCx1dH0seXQucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKHV0KXtyZXR1cm4gbmV3IF8obnVsbCx0aGlzLmdyYXBoTWFuYWdlcix1dCl9LHl0LnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKHV0KXtyZXR1cm4gbmV3IEEodGhpcy5ncmFwaE1hbmFnZXIsdXQpfSx5dC5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbih1dCl7cmV0dXJuIG5ldyBJKG51bGwsbnVsbCx1dCl9LHl0LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMuaXNTdWJMYXlvdXR8fChCLkRFRkFVTFRfRURHRV9MRU5HVEg8MTA/dGhpcy5pZGVhbEVkZ2VMZW5ndGg9MTA6dGhpcy5pZGVhbEVkZ2VMZW5ndGg9Qi5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1CLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuc3ByaW5nQ29uc3RhbnQ9Ti5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCx0aGlzLnJlcHVsc2lvbkNvbnN0YW50PU4uREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5ncmF2aXR5Q29uc3RhbnQ9Ti5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudD1OLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmdyYXZpdHlSYW5nZUZhY3Rvcj1OLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3Rvcj1OLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5wcnVuZWROb2Rlc0FsbD1bXSx0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucz0wLHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zPTAsdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMSx0aGlzLmNvb2xpbmdDeWNsZT0wLHRoaXMubWF4Q29vbGluZ0N5Y2xlPXRoaXMubWF4SXRlcmF0aW9ucy9OLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCx0aGlzLmZpbmFsVGVtcGVyYXR1cmU9Ti5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QvdGhpcy5tYXhJdGVyYXRpb25zLHRoaXMuY29vbGluZ0FkanVzdGVyPTEpfSx5dC5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKCl7dmFyIHV0PVIuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO3JldHVybiB1dCYmKHRoaXMuY3JlYXRlQmVuZHBvaW50cygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksdGhpcy5sZXZlbD0wLHRoaXMuY2xhc3NpY0xheW91dCgpfSx5dC5wcm90b3R5cGUuY2xhc3NpY0xheW91dD1mdW5jdGlvbigpe2lmKHRoaXMubm9kZXNXaXRoR3Jhdml0eT10aGlzLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG8oKSx0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbih0aGlzLm5vZGVzV2l0aEdyYXZpdHkpLHRoaXMuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5jYWxjSWRlYWxFZGdlTGVuZ3RocygpLHRoaXMuaW5jcmVtZW50YWwpe2lmKEIuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUwpe3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIHZ0PW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxYPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oVHQpe3JldHVybiB2dC5oYXMoVHQpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oWCl9fWVsc2V7dmFyIHV0PXRoaXMuZ2V0RmxhdEZvcmVzdCgpO2lmKHV0Lmxlbmd0aD4wKXRoaXMucG9zaXRpb25Ob2Rlc1JhZGlhbGx5KHV0KTtlbHNle3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIHZ0PW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxYPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24ocHQpe3JldHVybiB2dC5oYXMocHQpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oWCksdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoKX19cmV0dXJuIHRoaXMuaW5pdFNwcmluZ0VtYmVkZGVyKCksdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpLCEwfSx5dC5wcm90b3R5cGUudGljaz1mdW5jdGlvbigpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zKyssdGhpcy50b3RhbEl0ZXJhdGlvbnM9PT10aGlzLm1heEl0ZXJhdGlvbnMmJiF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVOLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRD09MCYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApdGhpcy5pc1RyZWVHcm93aW5nPSEwO2Vsc2UgcmV0dXJuITA7dGhpcy5jb29saW5nQ3ljbGUrKyx0aGlzLmxheW91dFF1YWxpdHk9PTA/dGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGU6dGhpcy5sYXlvdXRRdWFsaXR5PT0xJiYodGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGUvMyksdGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItTWF0aC5wb3codGhpcy5jb29saW5nQ3ljbGUsTWF0aC5sb2coMTAwKih0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yLXRoaXMuZmluYWxUZW1wZXJhdHVyZSkpL01hdGgubG9nKHRoaXMubWF4Q29vbGluZ0N5Y2xlKSkvMTAwKnRoaXMuY29vbGluZ0FkanVzdGVyLHRoaXMuZmluYWxUZW1wZXJhdHVyZSksdGhpcy5hbmltYXRpb25QZXJpb2Q9TWF0aC5jZWlsKHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCpNYXRoLnNxcnQodGhpcy5jb29saW5nRmFjdG9yKSl9aWYodGhpcy5pc1RyZWVHcm93aW5nKXtpZih0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmdyb3dUcmVlKHRoaXMucHJ1bmVkTm9kZXNBbGwpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgdXQ9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLHZ0PXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oVSl7cmV0dXJuIHV0LmhhcyhVKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKHZ0KSx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmNvb2xpbmdGYWN0b3I9Ti5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMfWVsc2UgdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMDt0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrfWlmKHRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKXJldHVybiEwO3RoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCkpLHRoaXMuY29vbGluZ0ZhY3Rvcj1OLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCksdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMrK312YXIgWD0hdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkLHB0PXRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzVHJlZUdyb3dpbmd8fHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzR3Jvd3RoRmluaXNoZWQ7cmV0dXJuIHRoaXMudG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLmNhbGNTcHJpbmdGb3JjZXMoKSx0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZXMoWCxwdCksdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcygpLHRoaXMubW92ZU5vZGVzKCksdGhpcy5hbmltYXRlKCksITF9LHl0LnByb3RvdHlwZS5nZXRQb3NpdGlvbnNEYXRhPWZ1bmN0aW9uKCl7Zm9yKHZhciB1dD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLHZ0PXt9LFg9MDtYPHV0Lmxlbmd0aDtYKyspe3ZhciBwdD11dFtYXS5yZWN0LFU9dXRbWF0uaWQ7dnRbVV09e2lkOlUseDpwdC5nZXRDZW50ZXJYKCkseTpwdC5nZXRDZW50ZXJZKCksdzpwdC53aWR0aCxoOnB0LmhlaWdodH19cmV0dXJuIHZ0fSx5dC5wcm90b3R5cGUucnVuU3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q9MjUsdGhpcy5hbmltYXRpb25QZXJpb2Q9dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kO3ZhciB1dD0hMTtpZihOLkFOSU1BVEU9PT0iZHVyaW5nIil0aGlzLmVtaXQoImxheW91dHN0YXJ0ZWQiKTtlbHNle2Zvcig7IXV0Oyl1dD10aGlzLnRpY2soKTt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKX19LHl0LnByb3RvdHlwZS5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvPWZ1bmN0aW9uKCl7dmFyIHV0PVtdLHZ0LFg9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0R3JhcGhzKCkscHQ9WC5sZW5ndGgsVTtmb3IoVT0wO1U8cHQ7VSsrKXZ0PVhbVV0sdnQudXBkYXRlQ29ubmVjdGVkKCksdnQuaXNDb25uZWN0ZWR8fCh1dD11dC5jb25jYXQodnQuZ2V0Tm9kZXMoKSkpO3JldHVybiB1dH0seXQucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHM9ZnVuY3Rpb24oKXt2YXIgdXQ9W107dXQ9dXQuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpO3ZhciB2dD1uZXcgU2V0LFg7Zm9yKFg9MDtYPHV0Lmxlbmd0aDtYKyspe3ZhciBwdD11dFtYXTtpZighdnQuaGFzKHB0KSl7dmFyIFU9cHQuZ2V0U291cmNlKCksVHQ9cHQuZ2V0VGFyZ2V0KCk7aWYoVT09VHQpcHQuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IFcpLHB0LmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBXKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKHB0KSx2dC5hZGQocHQpO2Vsc2V7dmFyIG50PVtdO2lmKG50PW50LmNvbmNhdChVLmdldEVkZ2VMaXN0VG9Ob2RlKFR0KSksbnQ9bnQuY29uY2F0KFR0LmdldEVkZ2VMaXN0VG9Ob2RlKFUpKSwhdnQuaGFzKG50WzBdKSl7aWYobnQubGVuZ3RoPjEpe3ZhciBJdDtmb3IoSXQ9MDtJdDxudC5sZW5ndGg7SXQrKyl7dmFyIE90PW50W0l0XTtPdC5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgVyksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhPdCl9fW50LmZvckVhY2goZnVuY3Rpb24oQnQpe3Z0LmFkZChCdCl9KX19fWlmKHZ0LnNpemU9PXV0Lmxlbmd0aClicmVha319LHl0LnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFkaWFsbHk9ZnVuY3Rpb24odXQpe2Zvcih2YXIgdnQ9bmV3IHooMCwwKSxYPU1hdGguY2VpbChNYXRoLnNxcnQodXQubGVuZ3RoKSkscHQ9MCxVPTAsVHQ9MCxudD1uZXcgVygwLDApLEl0PTA7SXQ8dXQubGVuZ3RoO0l0Kyspe0l0JVg9PTAmJihUdD0wLFU9cHQsSXQhPTAmJihVKz1CLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT04pLHB0PTApO3ZhciBPdD11dFtJdF0sQnQ9ZXQuZmluZENlbnRlck9mVHJlZShPdCk7dnQueD1UdCx2dC55PVUsbnQ9eXQucmFkaWFsTGF5b3V0KE90LEJ0LHZ0KSxudC55PnB0JiYocHQ9TWF0aC5mbG9vcihudC55KSksVHQ9TWF0aC5mbG9vcihudC54K0IuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTil9dGhpcy50cmFuc2Zvcm0obmV3IFcoUi5XT1JMRF9DRU5URVJfWC1udC54LzIsUi5XT1JMRF9DRU5URVJfWS1udC55LzIpKX0seXQucmFkaWFsTGF5b3V0PWZ1bmN0aW9uKHV0LHZ0LFgpe3ZhciBwdD1NYXRoLm1heCh0aGlzLm1heERpYWdvbmFsSW5UcmVlKHV0KSxCLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT04pO3l0LmJyYW5jaFJhZGlhbExheW91dCh2dCxudWxsLDAsMzU5LDAscHQpO3ZhciBVPWJ0LmNhbGN1bGF0ZUJvdW5kcyh1dCksVHQ9bmV3IG10O1R0LnNldERldmljZU9yZ1goVS5nZXRNaW5YKCkpLFR0LnNldERldmljZU9yZ1koVS5nZXRNaW5ZKCkpLFR0LnNldFdvcmxkT3JnWChYLngpLFR0LnNldFdvcmxkT3JnWShYLnkpO2Zvcih2YXIgbnQ9MDtudDx1dC5sZW5ndGg7bnQrKyl7dmFyIEl0PXV0W250XTtJdC50cmFuc2Zvcm0oVHQpfXZhciBPdD1uZXcgVyhVLmdldE1heFgoKSxVLmdldE1heFkoKSk7cmV0dXJuIFR0LmludmVyc2VUcmFuc2Zvcm1Qb2ludChPdCl9LHl0LmJyYW5jaFJhZGlhbExheW91dD1mdW5jdGlvbih1dCx2dCxYLHB0LFUsVHQpe3ZhciBudD0ocHQtWCsxKS8yO250PDAmJihudCs9MTgwKTt2YXIgSXQ9KG50K1gpJTM2MCxPdD1JdCphdC5UV09fUEkvMzYwLEJ0PVUqTWF0aC5jb3MoT3QpLEV0PVUqTWF0aC5zaW4oT3QpO3V0LnNldENlbnRlcihCdCxFdCk7dmFyIFo9W107Wj1aLmNvbmNhdCh1dC5nZXRFZGdlcygpKTt2YXIgQ3Q9Wi5sZW5ndGg7dnQhPW51bGwmJkN0LS07Zm9yKHZhciB4dD0wLEh0PVoubGVuZ3RoLExlLEZ0PXV0LmdldEVkZ2VzQmV0d2Vlbih2dCk7RnQubGVuZ3RoPjE7KXt2YXIgZ249RnRbMF07RnQuc3BsaWNlKDAsMSk7dmFyIFNlPVouaW5kZXhPZihnbik7U2U+PTAmJlouc3BsaWNlKFNlLDEpLEh0LS0sQ3QtLX12dCE9bnVsbD9MZT0oWi5pbmRleE9mKEZ0WzBdKSsxKSVIdDpMZT0wO2Zvcih2YXIgbWU9TWF0aC5hYnMocHQtWCkvQ3QsVmU9TGU7eHQhPUN0O1ZlPSsrVmUlSHQpe3ZhciBZZT1aW1ZlXS5nZXRPdGhlckVuZCh1dCk7aWYoWWUhPXZ0KXt2YXIgY2U9KFgreHQqbWUpJTM2MCxrZT0oY2UrbWUpJTM2MDt5dC5icmFuY2hSYWRpYWxMYXlvdXQoWWUsdXQsY2Usa2UsVStUdCxUdCkseHQrK319fSx5dC5tYXhEaWFnb25hbEluVHJlZT1mdW5jdGlvbih1dCl7Zm9yKHZhciB2dD1zdC5NSU5fVkFMVUUsWD0wO1g8dXQubGVuZ3RoO1grKyl7dmFyIHB0PXV0W1hdLFU9cHQuZ2V0RGlhZ29uYWwoKTtVPnZ0JiYodnQ9VSl9cmV0dXJuIHZ0fSx5dC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIDIqKHRoaXMubGV2ZWwrMSkqdGhpcy5pZGVhbEVkZ2VMZW5ndGh9LHl0LnByb3RvdHlwZS5ncm91cFplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIHV0PXRoaXMsdnQ9e307dGhpcy5tZW1iZXJHcm91cHM9e30sdGhpcy5pZFRvRHVtbXlOb2RlPXt9O2Zvcih2YXIgWD1bXSxwdD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLFU9MDtVPHB0Lmxlbmd0aDtVKyspe3ZhciBUdD1wdFtVXSxudD1UdC5nZXRQYXJlbnQoKTt0aGlzLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW4oVHQpPT09MCYmKG50LmlkPT1udWxsfHwhdGhpcy5nZXRUb0JlVGlsZWQobnQpKSYmWC5wdXNoKFR0KX1mb3IodmFyIFU9MDtVPFgubGVuZ3RoO1UrKyl7dmFyIFR0PVhbVV0sSXQ9VHQuZ2V0UGFyZW50KCkuaWQ7dHlwZW9mIHZ0W0l0XT4idSImJih2dFtJdF09W10pLHZ0W0l0XT12dFtJdF0uY29uY2F0KFR0KX1PYmplY3Qua2V5cyh2dCkuZm9yRWFjaChmdW5jdGlvbihPdCl7aWYodnRbT3RdLmxlbmd0aD4xKXt2YXIgQnQ9IkR1bW15Q29tcG91bmRfIitPdDt1dC5tZW1iZXJHcm91cHNbQnRdPXZ0W090XTt2YXIgRXQ9dnRbT3RdWzBdLmdldFBhcmVudCgpLFo9bmV3IEEodXQuZ3JhcGhNYW5hZ2VyKTtaLmlkPUJ0LFoucGFkZGluZ0xlZnQ9RXQucGFkZGluZ0xlZnR8fDAsWi5wYWRkaW5nUmlnaHQ9RXQucGFkZGluZ1JpZ2h0fHwwLFoucGFkZGluZ0JvdHRvbT1FdC5wYWRkaW5nQm90dG9tfHwwLFoucGFkZGluZ1RvcD1FdC5wYWRkaW5nVG9wfHwwLHV0LmlkVG9EdW1teU5vZGVbQnRdPVo7dmFyIEN0PXV0LmdldEdyYXBoTWFuYWdlcigpLmFkZCh1dC5uZXdHcmFwaCgpLFopLHh0PUV0LmdldENoaWxkKCk7eHQuYWRkKFopO2Zvcih2YXIgSHQ9MDtIdDx2dFtPdF0ubGVuZ3RoO0h0Kyspe3ZhciBMZT12dFtPdF1bSHRdO3h0LnJlbW92ZShMZSksQ3QuYWRkKExlKX19fSl9LHl0LnByb3RvdHlwZS5jbGVhckNvbXBvdW5kcz1mdW5jdGlvbigpe3ZhciB1dD17fSx2dD17fTt0aGlzLnBlcmZvcm1ERlNPbkNvbXBvdW5kcygpO2Zvcih2YXIgWD0wO1g8dGhpcy5jb21wb3VuZE9yZGVyLmxlbmd0aDtYKyspdnRbdGhpcy5jb21wb3VuZE9yZGVyW1hdLmlkXT10aGlzLmNvbXBvdW5kT3JkZXJbWF0sdXRbdGhpcy5jb21wb3VuZE9yZGVyW1hdLmlkXT1bXS5jb25jYXQodGhpcy5jb21wb3VuZE9yZGVyW1hdLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHRoaXMuY29tcG91bmRPcmRlcltYXS5nZXRDaGlsZCgpKSx0aGlzLmNvbXBvdW5kT3JkZXJbWF0uY2hpbGQ9bnVsbDt0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy50aWxlQ29tcG91bmRNZW1iZXJzKHV0LHZ0KX0seXQucHJvdG90eXBlLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgdXQ9dGhpcyx2dD10aGlzLnRpbGVkWmVyb0RlZ3JlZVBhY2s9W107T2JqZWN0LmtleXModGhpcy5tZW1iZXJHcm91cHMpLmZvckVhY2goZnVuY3Rpb24oWCl7dmFyIHB0PXV0LmlkVG9EdW1teU5vZGVbWF07dnRbWF09dXQudGlsZU5vZGVzKHV0Lm1lbWJlckdyb3Vwc1tYXSxwdC5wYWRkaW5nTGVmdCtwdC5wYWRkaW5nUmlnaHQpLHB0LnJlY3Qud2lkdGg9dnRbWF0ud2lkdGgscHQucmVjdC5oZWlnaHQ9dnRbWF0uaGVpZ2h0fSl9LHl0LnByb3RvdHlwZS5yZXBvcHVsYXRlQ29tcG91bmRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB1dD10aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoLTE7dXQ+PTA7dXQtLSl7dmFyIHZ0PXRoaXMuY29tcG91bmRPcmRlclt1dF0sWD12dC5pZCxwdD12dC5wYWRkaW5nTGVmdCxVPXZ0LnBhZGRpbmdUb3A7dGhpcy5hZGp1c3RMb2NhdGlvbnModGhpcy50aWxlZE1lbWJlclBhY2tbWF0sdnQucmVjdC54LHZ0LnJlY3QueSxwdCxVKX19LHl0LnByb3RvdHlwZS5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgdXQ9dGhpcyx2dD10aGlzLnRpbGVkWmVyb0RlZ3JlZVBhY2s7T2JqZWN0LmtleXModnQpLmZvckVhY2goZnVuY3Rpb24oWCl7dmFyIHB0PXV0LmlkVG9EdW1teU5vZGVbWF0sVT1wdC5wYWRkaW5nTGVmdCxUdD1wdC5wYWRkaW5nVG9wO3V0LmFkanVzdExvY2F0aW9ucyh2dFtYXSxwdC5yZWN0LngscHQucmVjdC55LFUsVHQpfSl9LHl0LnByb3RvdHlwZS5nZXRUb0JlVGlsZWQ9ZnVuY3Rpb24odXQpe3ZhciB2dD11dC5pZDtpZih0aGlzLnRvQmVUaWxlZFt2dF0hPW51bGwpcmV0dXJuIHRoaXMudG9CZVRpbGVkW3Z0XTt2YXIgWD11dC5nZXRDaGlsZCgpO2lmKFg9PW51bGwpcmV0dXJuIHRoaXMudG9CZVRpbGVkW3Z0XT0hMSwhMTtmb3IodmFyIHB0PVguZ2V0Tm9kZXMoKSxVPTA7VTxwdC5sZW5ndGg7VSsrKXt2YXIgVHQ9cHRbVV07aWYodGhpcy5nZXROb2RlRGVncmVlKFR0KT4wKXJldHVybiB0aGlzLnRvQmVUaWxlZFt2dF09ITEsITE7aWYoVHQuZ2V0Q2hpbGQoKT09bnVsbCl7dGhpcy50b0JlVGlsZWRbVHQuaWRdPSExO2NvbnRpbnVlfWlmKCF0aGlzLmdldFRvQmVUaWxlZChUdCkpcmV0dXJuIHRoaXMudG9CZVRpbGVkW3Z0XT0hMSwhMX1yZXR1cm4gdGhpcy50b0JlVGlsZWRbdnRdPSEwLCEwfSx5dC5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZT1mdW5jdGlvbih1dCl7dXQuaWQ7Zm9yKHZhciB2dD11dC5nZXRFZGdlcygpLFg9MCxwdD0wO3B0PHZ0Lmxlbmd0aDtwdCsrKXt2YXIgVT12dFtwdF07VS5nZXRTb3VyY2UoKS5pZCE9PVUuZ2V0VGFyZ2V0KCkuaWQmJihYPVgrMSl9cmV0dXJuIFh9LHl0LnByb3RvdHlwZS5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuPWZ1bmN0aW9uKHV0KXt2YXIgdnQ9dGhpcy5nZXROb2RlRGVncmVlKHV0KTtpZih1dC5nZXRDaGlsZCgpPT1udWxsKXJldHVybiB2dDtmb3IodmFyIFg9dXQuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLHB0PTA7cHQ8WC5sZW5ndGg7cHQrKyl7dmFyIFU9WFtwdF07dnQrPXRoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbihVKX1yZXR1cm4gdnR9LHl0LnByb3RvdHlwZS5wZXJmb3JtREZTT25Db21wb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLmNvbXBvdW5kT3JkZXI9W10sdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSl9LHl0LnByb3RvdHlwZS5maWxsQ29tcGV4T3JkZXJCeURGUz1mdW5jdGlvbih1dCl7Zm9yKHZhciB2dD0wO3Z0PHV0Lmxlbmd0aDt2dCsrKXt2YXIgWD11dFt2dF07WC5nZXRDaGlsZCgpIT1udWxsJiZ0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKFguZ2V0Q2hpbGQoKS5nZXROb2RlcygpKSx0aGlzLmdldFRvQmVUaWxlZChYKSYmdGhpcy5jb21wb3VuZE9yZGVyLnB1c2goWCl9fSx5dC5wcm90b3R5cGUuYWRqdXN0TG9jYXRpb25zPWZ1bmN0aW9uKHV0LHZ0LFgscHQsVSl7dnQrPXB0LFgrPVU7Zm9yKHZhciBUdD12dCxudD0wO250PHV0LnJvd3MubGVuZ3RoO250Kyspe3ZhciBJdD11dC5yb3dzW250XTt2dD1UdDtmb3IodmFyIE90PTAsQnQ9MDtCdDxJdC5sZW5ndGg7QnQrKyl7dmFyIEV0PUl0W0J0XTtFdC5yZWN0Lng9dnQsRXQucmVjdC55PVgsdnQrPUV0LnJlY3Qud2lkdGgrdXQuaG9yaXpvbnRhbFBhZGRpbmcsRXQucmVjdC5oZWlnaHQ+T3QmJihPdD1FdC5yZWN0LmhlaWdodCl9WCs9T3QrdXQudmVydGljYWxQYWRkaW5nfX0seXQucHJvdG90eXBlLnRpbGVDb21wb3VuZE1lbWJlcnM9ZnVuY3Rpb24odXQsdnQpe3ZhciBYPXRoaXM7dGhpcy50aWxlZE1lbWJlclBhY2s9W10sT2JqZWN0LmtleXModXQpLmZvckVhY2goZnVuY3Rpb24ocHQpe3ZhciBVPXZ0W3B0XTtYLnRpbGVkTWVtYmVyUGFja1twdF09WC50aWxlTm9kZXModXRbcHRdLFUucGFkZGluZ0xlZnQrVS5wYWRkaW5nUmlnaHQpLFUucmVjdC53aWR0aD1YLnRpbGVkTWVtYmVyUGFja1twdF0ud2lkdGgsVS5yZWN0LmhlaWdodD1YLnRpbGVkTWVtYmVyUGFja1twdF0uaGVpZ2h0fSl9LHl0LnByb3RvdHlwZS50aWxlTm9kZXM9ZnVuY3Rpb24odXQsdnQpe3ZhciBYPUIuVElMSU5HX1BBRERJTkdfVkVSVElDQUwscHQ9Qi5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMLFU9e3Jvd3M6W10scm93V2lkdGg6W10scm93SGVpZ2h0OltdLHdpZHRoOjAsaGVpZ2h0OnZ0LHZlcnRpY2FsUGFkZGluZzpYLGhvcml6b250YWxQYWRkaW5nOnB0fTt1dC5zb3J0KGZ1bmN0aW9uKEl0LE90KXtyZXR1cm4gSXQucmVjdC53aWR0aCpJdC5yZWN0LmhlaWdodD5PdC5yZWN0LndpZHRoKk90LnJlY3QuaGVpZ2h0Py0xOkl0LnJlY3Qud2lkdGgqSXQucmVjdC5oZWlnaHQ8T3QucmVjdC53aWR0aCpPdC5yZWN0LmhlaWdodD8xOjB9KTtmb3IodmFyIFR0PTA7VHQ8dXQubGVuZ3RoO1R0Kyspe3ZhciBudD11dFtUdF07VS5yb3dzLmxlbmd0aD09MD90aGlzLmluc2VydE5vZGVUb1JvdyhVLG50LDAsdnQpOnRoaXMuY2FuQWRkSG9yaXpvbnRhbChVLG50LnJlY3Qud2lkdGgsbnQucmVjdC5oZWlnaHQpP3RoaXMuaW5zZXJ0Tm9kZVRvUm93KFUsbnQsdGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KFUpLHZ0KTp0aGlzLmluc2VydE5vZGVUb1JvdyhVLG50LFUucm93cy5sZW5ndGgsdnQpLHRoaXMuc2hpZnRUb0xhc3RSb3coVSl9cmV0dXJuIFV9LHl0LnByb3RvdHlwZS5pbnNlcnROb2RlVG9Sb3c9ZnVuY3Rpb24odXQsdnQsWCxwdCl7dmFyIFU9cHQ7aWYoWD09dXQucm93cy5sZW5ndGgpe3ZhciBUdD1bXTt1dC5yb3dzLnB1c2goVHQpLHV0LnJvd1dpZHRoLnB1c2goVSksdXQucm93SGVpZ2h0LnB1c2goMCl9dmFyIG50PXV0LnJvd1dpZHRoW1hdK3Z0LnJlY3Qud2lkdGg7dXQucm93c1tYXS5sZW5ndGg+MCYmKG50Kz11dC5ob3Jpem9udGFsUGFkZGluZyksdXQucm93V2lkdGhbWF09bnQsdXQud2lkdGg8bnQmJih1dC53aWR0aD1udCk7dmFyIEl0PXZ0LnJlY3QuaGVpZ2h0O1g+MCYmKEl0Kz11dC52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBPdD0wO0l0PnV0LnJvd0hlaWdodFtYXSYmKE90PXV0LnJvd0hlaWdodFtYXSx1dC5yb3dIZWlnaHRbWF09SXQsT3Q9dXQucm93SGVpZ2h0W1hdLU90KSx1dC5oZWlnaHQrPU90LHV0LnJvd3NbWF0ucHVzaCh2dCl9LHl0LnByb3RvdHlwZS5nZXRTaG9ydGVzdFJvd0luZGV4PWZ1bmN0aW9uKHV0KXtmb3IodmFyIHZ0PS0xLFg9TnVtYmVyLk1BWF9WQUxVRSxwdD0wO3B0PHV0LnJvd3MubGVuZ3RoO3B0KyspdXQucm93V2lkdGhbcHRdPFgmJih2dD1wdCxYPXV0LnJvd1dpZHRoW3B0XSk7cmV0dXJuIHZ0fSx5dC5wcm90b3R5cGUuZ2V0TG9uZ2VzdFJvd0luZGV4PWZ1bmN0aW9uKHV0KXtmb3IodmFyIHZ0PS0xLFg9TnVtYmVyLk1JTl9WQUxVRSxwdD0wO3B0PHV0LnJvd3MubGVuZ3RoO3B0KyspdXQucm93V2lkdGhbcHRdPlgmJih2dD1wdCxYPXV0LnJvd1dpZHRoW3B0XSk7cmV0dXJuIHZ0fSx5dC5wcm90b3R5cGUuY2FuQWRkSG9yaXpvbnRhbD1mdW5jdGlvbih1dCx2dCxYKXt2YXIgcHQ9dGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KHV0KTtpZihwdDwwKXJldHVybiEwO3ZhciBVPXV0LnJvd1dpZHRoW3B0XTtpZihVK3V0Lmhvcml6b250YWxQYWRkaW5nK3Z0PD11dC53aWR0aClyZXR1cm4hMDt2YXIgVHQ9MDt1dC5yb3dIZWlnaHRbcHRdPFgmJnB0PjAmJihUdD1YK3V0LnZlcnRpY2FsUGFkZGluZy11dC5yb3dIZWlnaHRbcHRdKTt2YXIgbnQ7dXQud2lkdGgtVT49dnQrdXQuaG9yaXpvbnRhbFBhZGRpbmc/bnQ9KHV0LmhlaWdodCtUdCkvKFUrdnQrdXQuaG9yaXpvbnRhbFBhZGRpbmcpOm50PSh1dC5oZWlnaHQrVHQpL3V0LndpZHRoLFR0PVgrdXQudmVydGljYWxQYWRkaW5nO3ZhciBJdDtyZXR1cm4gdXQud2lkdGg8dnQ/SXQ9KHV0LmhlaWdodCtUdCkvdnQ6SXQ9KHV0LmhlaWdodCtUdCkvdXQud2lkdGgsSXQ8MSYmKEl0PTEvSXQpLG50PDEmJihudD0xL250KSxudDxJdH0seXQucHJvdG90eXBlLnNoaWZ0VG9MYXN0Um93PWZ1bmN0aW9uKHV0KXt2YXIgdnQ9dGhpcy5nZXRMb25nZXN0Um93SW5kZXgodXQpLFg9dXQucm93V2lkdGgubGVuZ3RoLTEscHQ9dXQucm93c1t2dF0sVT1wdFtwdC5sZW5ndGgtMV0sVHQ9VS53aWR0aCt1dC5ob3Jpem9udGFsUGFkZGluZztpZih1dC53aWR0aC11dC5yb3dXaWR0aFtYXT5UdCYmdnQhPVgpe3B0LnNwbGljZSgtMSwxKSx1dC5yb3dzW1hdLnB1c2goVSksdXQucm93V2lkdGhbdnRdPXV0LnJvd1dpZHRoW3Z0XS1UdCx1dC5yb3dXaWR0aFtYXT11dC5yb3dXaWR0aFtYXStUdCx1dC53aWR0aD11dC5yb3dXaWR0aFtpbnN0YW5jZS5nZXRMb25nZXN0Um93SW5kZXgodXQpXTtmb3IodmFyIG50PU51bWJlci5NSU5fVkFMVUUsSXQ9MDtJdDxwdC5sZW5ndGg7SXQrKylwdFtJdF0uaGVpZ2h0Pm50JiYobnQ9cHRbSXRdLmhlaWdodCk7dnQ+MCYmKG50Kz11dC52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBPdD11dC5yb3dIZWlnaHRbdnRdK3V0LnJvd0hlaWdodFtYXTt1dC5yb3dIZWlnaHRbdnRdPW50LHV0LnJvd0hlaWdodFtYXTxVLmhlaWdodCt1dC52ZXJ0aWNhbFBhZGRpbmcmJih1dC5yb3dIZWlnaHRbWF09VS5oZWlnaHQrdXQudmVydGljYWxQYWRkaW5nKTt2YXIgQnQ9dXQucm93SGVpZ2h0W3Z0XSt1dC5yb3dIZWlnaHRbWF07dXQuaGVpZ2h0Kz1CdC1PdCx0aGlzLnNoaWZ0VG9MYXN0Um93KHV0KX19LHl0LnByb3RvdHlwZS50aWxpbmdQcmVMYXlvdXQ9ZnVuY3Rpb24oKXtCLlRJTEUmJih0aGlzLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnMoKSx0aGlzLmNsZWFyQ29tcG91bmRzKCksdGhpcy5jbGVhclplcm9EZWdyZWVNZW1iZXJzKCkpfSx5dC5wcm90b3R5cGUudGlsaW5nUG9zdExheW91dD1mdW5jdGlvbigpe0IuVElMRSYmKHRoaXMucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5yZXBvcHVsYXRlQ29tcG91bmRzKCkpfSx5dC5wcm90b3R5cGUucmVkdWNlVHJlZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHV0PVtdLHZ0PSEwLFg7dnQ7KXt2YXIgcHQ9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxVPVtdO3Z0PSExO2Zvcih2YXIgVHQ9MDtUdDxwdC5sZW5ndGg7VHQrKylYPXB0W1R0XSxYLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYhWC5nZXRFZGdlcygpWzBdLmlzSW50ZXJHcmFwaCYmWC5nZXRDaGlsZCgpPT1udWxsJiYoVS5wdXNoKFtYLFguZ2V0RWRnZXMoKVswXSxYLmdldE93bmVyKCldKSx2dD0hMCk7aWYodnQ9PSEwKXtmb3IodmFyIG50PVtdLEl0PTA7SXQ8VS5sZW5ndGg7SXQrKylVW0l0XVswXS5nZXRFZGdlcygpLmxlbmd0aD09MSYmKG50LnB1c2goVVtJdF0pLFVbSXRdWzBdLmdldE93bmVyKCkucmVtb3ZlKFVbSXRdWzBdKSk7dXQucHVzaChudCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX19dGhpcy5wcnVuZWROb2Rlc0FsbD11dH0seXQucHJvdG90eXBlLmdyb3dUcmVlPWZ1bmN0aW9uKHV0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aCxYPXV0W3Z0LTFdLHB0LFU9MDtVPFgubGVuZ3RoO1UrKylwdD1YW1VdLHRoaXMuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZShwdCkscHRbMl0uYWRkKHB0WzBdKSxwdFsyXS5hZGQocHRbMV0scHRbMV0uc291cmNlLHB0WzFdLnRhcmdldCk7dXQuc3BsaWNlKHV0Lmxlbmd0aC0xLDEpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCl9LHl0LnByb3RvdHlwZS5maW5kUGxhY2Vmb3JQcnVuZWROb2RlPWZ1bmN0aW9uKHV0KXt2YXIgdnQsWCxwdD11dFswXTtwdD09dXRbMV0uc291cmNlP1g9dXRbMV0udGFyZ2V0Olg9dXRbMV0uc291cmNlO3ZhciBVPVguc3RhcnRYLFR0PVguZmluaXNoWCxudD1YLnN0YXJ0WSxJdD1YLmZpbmlzaFksT3Q9MCxCdD0wLEV0PTAsWj0wLEN0PVtPdCxFdCxCdCxaXTtpZihudD4wKWZvcih2YXIgeHQ9VTt4dDw9VHQ7eHQrKylDdFswXSs9dGhpcy5ncmlkW3h0XVtudC0xXS5sZW5ndGgrdGhpcy5ncmlkW3h0XVtudF0ubGVuZ3RoLTE7aWYoVHQ8dGhpcy5ncmlkLmxlbmd0aC0xKWZvcih2YXIgeHQ9bnQ7eHQ8PUl0O3h0KyspQ3RbMV0rPXRoaXMuZ3JpZFtUdCsxXVt4dF0ubGVuZ3RoK3RoaXMuZ3JpZFtUdF1beHRdLmxlbmd0aC0xO2lmKEl0PHRoaXMuZ3JpZFswXS5sZW5ndGgtMSlmb3IodmFyIHh0PVU7eHQ8PVR0O3h0KyspQ3RbMl0rPXRoaXMuZ3JpZFt4dF1bSXQrMV0ubGVuZ3RoK3RoaXMuZ3JpZFt4dF1bSXRdLmxlbmd0aC0xO2lmKFU+MClmb3IodmFyIHh0PW50O3h0PD1JdDt4dCsrKUN0WzNdKz10aGlzLmdyaWRbVS0xXVt4dF0ubGVuZ3RoK3RoaXMuZ3JpZFtVXVt4dF0ubGVuZ3RoLTE7Zm9yKHZhciBIdD1zdC5NQVhfVkFMVUUsTGUsRnQsZ249MDtnbjxDdC5sZW5ndGg7Z24rKylDdFtnbl08SHQ/KEh0PUN0W2duXSxMZT0xLEZ0PWduKTpDdFtnbl09PUh0JiZMZSsrO2lmKExlPT0zJiZIdD09MClDdFswXT09MCYmQ3RbMV09PTAmJkN0WzJdPT0wP3Z0PTE6Q3RbMF09PTAmJkN0WzFdPT0wJiZDdFszXT09MD92dD0wOkN0WzBdPT0wJiZDdFsyXT09MCYmQ3RbM109PTA/dnQ9MzpDdFsxXT09MCYmQ3RbMl09PTAmJkN0WzNdPT0wJiYodnQ9Mik7ZWxzZSBpZihMZT09MiYmSHQ9PTApe3ZhciBTZT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMik7Q3RbMF09PTAmJkN0WzFdPT0wP1NlPT0wP3Z0PTA6dnQ9MTpDdFswXT09MCYmQ3RbMl09PTA/U2U9PTA/dnQ9MDp2dD0yOkN0WzBdPT0wJiZDdFszXT09MD9TZT09MD92dD0wOnZ0PTM6Q3RbMV09PTAmJkN0WzJdPT0wP1NlPT0wP3Z0PTE6dnQ9MjpDdFsxXT09MCYmQ3RbM109PTA/U2U9PTA/dnQ9MTp2dD0zOlNlPT0wP3Z0PTI6dnQ9M31lbHNlIGlmKExlPT00JiZIdD09MCl7dmFyIFNlPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KTt2dD1TZX1lbHNlIHZ0PUZ0O3Z0PT0wP3B0LnNldENlbnRlcihYLmdldENlbnRlclgoKSxYLmdldENlbnRlclkoKS1YLmdldEhlaWdodCgpLzItTi5ERUZBVUxUX0VER0VfTEVOR1RILXB0LmdldEhlaWdodCgpLzIpOnZ0PT0xP3B0LnNldENlbnRlcihYLmdldENlbnRlclgoKStYLmdldFdpZHRoKCkvMitOLkRFRkFVTFRfRURHRV9MRU5HVEgrcHQuZ2V0V2lkdGgoKS8yLFguZ2V0Q2VudGVyWSgpKTp2dD09Mj9wdC5zZXRDZW50ZXIoWC5nZXRDZW50ZXJYKCksWC5nZXRDZW50ZXJZKCkrWC5nZXRIZWlnaHQoKS8yK04uREVGQVVMVF9FREdFX0xFTkdUSCtwdC5nZXRIZWlnaHQoKS8yKTpwdC5zZXRDZW50ZXIoWC5nZXRDZW50ZXJYKCktWC5nZXRXaWR0aCgpLzItTi5ERUZBVUxUX0VER0VfTEVOR1RILXB0LmdldFdpZHRoKCkvMixYLmdldENlbnRlclkoKSl9LHAuZXhwb3J0cz15dH0sZnVuY3Rpb24ocCx3LG0pe3ZhciBiPXt9O2IubGF5b3V0QmFzZT1tKDApLGIuQ29TRUNvbnN0YW50cz1tKDEpLGIuQ29TRUVkZ2U9bSgyKSxiLkNvU0VHcmFwaD1tKDMpLGIuQ29TRUdyYXBoTWFuYWdlcj1tKDQpLGIuQ29TRUxheW91dD1tKDYpLGIuQ29TRU5vZGU9bSg1KSxwLmV4cG9ydHM9Yn1dKX0pfSh0cHQpKSx0cHQuZXhwb3J0c30oZnVuY3Rpb24oaSxhKXsoZnVuY3Rpb24ocCx3KXtpLmV4cG9ydHM9dyhjWWUoKSl9KShiMCxmdW5jdGlvbihmKXtyZXR1cm4gZnVuY3Rpb24ocCl7dmFyIHc9e307ZnVuY3Rpb24gbShiKXtpZih3W2JdKXJldHVybiB3W2JdLmV4cG9ydHM7dmFyIEU9d1tiXT17aTpiLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHBbYl0uY2FsbChFLmV4cG9ydHMsRSxFLmV4cG9ydHMsbSksRS5sPSEwLEUuZXhwb3J0c31yZXR1cm4gbS5tPXAsbS5jPXcsbS5pPWZ1bmN0aW9uKGIpe3JldHVybiBifSxtLmQ9ZnVuY3Rpb24oYixFLF8pe20ubyhiLEUpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoYixFLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6X30pfSxtLm49ZnVuY3Rpb24oYil7dmFyIEU9YiYmYi5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGIuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gYn07cmV0dXJuIG0uZChFLCJhIixFKSxFfSxtLm89ZnVuY3Rpb24oYixFKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsRSl9LG0ucD0iIixtKG0ucz0xKX0oW2Z1bmN0aW9uKHAsdyl7cC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHAsdyxtKXt2YXIgYj1tKDApLmxheW91dEJhc2UuTGF5b3V0Q29uc3RhbnRzLEU9bSgwKS5sYXlvdXRCYXNlLkZETGF5b3V0Q29uc3RhbnRzLF89bSgwKS5Db1NFQ29uc3RhbnRzLEE9bSgwKS5Db1NFTGF5b3V0LEk9bSgwKS5Db1NFTm9kZSxCPW0oMCkubGF5b3V0QmFzZS5Qb2ludEQsTj1tKDApLmxheW91dEJhc2UuRGltZW5zaW9uRCxSPXtyZWFkeTpmdW5jdGlvbigpe30sc3RvcDpmdW5jdGlvbigpe30scXVhbGl0eToiZGVmYXVsdCIsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHJlZnJlc2g6MzAsZml0OiEwLHBhZGRpbmc6MTAscmFuZG9taXplOiEwLG5vZGVSZXB1bHNpb246NDUwMCxpZGVhbEVkZ2VMZW5ndGg6NTAsZWRnZUVsYXN0aWNpdHk6LjQ1LG5lc3RpbmdGYWN0b3I6LjEsZ3Jhdml0eTouMjUsbnVtSXRlcjoyNTAwLHRpbGU6ITAsYW5pbWF0ZToiZW5kIixhbmltYXRpb25EdXJhdGlvbjo1MDAsdGlsaW5nUGFkZGluZ1ZlcnRpY2FsOjEwLHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsOjEwLGdyYXZpdHlSYW5nZUNvbXBvdW5kOjEuNSxncmF2aXR5Q29tcG91bmQ6MSxncmF2aXR5UmFuZ2U6My44LGluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsOi41fTtmdW5jdGlvbiB6KGF0LGJ0KXt2YXIgbXQ9e307Zm9yKHZhciB5dCBpbiBhdCltdFt5dF09YXRbeXRdO2Zvcih2YXIgeXQgaW4gYnQpbXRbeXRdPWJ0W3l0XTtyZXR1cm4gbXR9ZnVuY3Rpb24gVyhhdCl7dGhpcy5vcHRpb25zPXooUixhdCksZXQodGhpcy5vcHRpb25zKX12YXIgZXQ9ZnVuY3Rpb24oYnQpe2J0Lm5vZGVSZXB1bHNpb24hPW51bGwmJihfLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIPUUuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9YnQubm9kZVJlcHVsc2lvbiksYnQuaWRlYWxFZGdlTGVuZ3RoIT1udWxsJiYoXy5ERUZBVUxUX0VER0VfTEVOR1RIPUUuREVGQVVMVF9FREdFX0xFTkdUSD1idC5pZGVhbEVkZ2VMZW5ndGgpLGJ0LmVkZ2VFbGFzdGljaXR5IT1udWxsJiYoXy5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD1FLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIPWJ0LmVkZ2VFbGFzdGljaXR5KSxidC5uZXN0aW5nRmFjdG9yIT1udWxsJiYoXy5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPUUuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj1idC5uZXN0aW5nRmFjdG9yKSxidC5ncmF2aXR5IT1udWxsJiYoXy5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9RS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9YnQuZ3Jhdml0eSksYnQubnVtSXRlciE9bnVsbCYmKF8uTUFYX0lURVJBVElPTlM9RS5NQVhfSVRFUkFUSU9OUz1idC5udW1JdGVyKSxidC5ncmF2aXR5UmFuZ2UhPW51bGwmJihfLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9RS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWJ0LmdyYXZpdHlSYW5nZSksYnQuZ3Jhdml0eUNvbXBvdW5kIT1udWxsJiYoXy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9RS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9YnQuZ3Jhdml0eUNvbXBvdW5kKSxidC5ncmF2aXR5UmFuZ2VDb21wb3VuZCE9bnVsbCYmKF8uREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1FLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9YnQuZ3Jhdml0eVJhbmdlQ29tcG91bmQpLGJ0LmluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsIT1udWxsJiYoXy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPUUuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD1idC5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCksYnQucXVhbGl0eT09ImRyYWZ0Ij9iLlFVQUxJVFk9MDpidC5xdWFsaXR5PT0icHJvb2YiP2IuUVVBTElUWT0yOmIuUVVBTElUWT0xLF8uTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPUUuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPWIuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPWJ0Lm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyxfLkRFRkFVTFRfSU5DUkVNRU5UQUw9RS5ERUZBVUxUX0lOQ1JFTUVOVEFMPWIuREVGQVVMVF9JTkNSRU1FTlRBTD0hYnQucmFuZG9taXplLF8uQU5JTUFURT1FLkFOSU1BVEU9Yi5BTklNQVRFPWJ0LmFuaW1hdGUsXy5USUxFPWJ0LnRpbGUsXy5USUxJTkdfUEFERElOR19WRVJUSUNBTD10eXBlb2YgYnQudGlsaW5nUGFkZGluZ1ZlcnRpY2FsPT0iZnVuY3Rpb24iP2J0LnRpbGluZ1BhZGRpbmdWZXJ0aWNhbC5jYWxsKCk6YnQudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLF8uVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD10eXBlb2YgYnQudGlsaW5nUGFkZGluZ0hvcml6b250YWw9PSJmdW5jdGlvbiI/YnQudGlsaW5nUGFkZGluZ0hvcml6b250YWwuY2FsbCgpOmJ0LnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsfTtXLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgYXQsYnQsbXQ9dGhpcy5vcHRpb25zO3RoaXMuaWRUb0xOb2RlPXt9O3ZhciB5dD10aGlzLmxheW91dD1uZXcgQSxmdD10aGlzO2Z0LnN0b3BwZWQ9ITEsdGhpcy5jeT10aGlzLm9wdGlvbnMuY3ksdGhpcy5jeS50cmlnZ2VyKHt0eXBlOiJsYXlvdXRzdGFydCIsbGF5b3V0OnRoaXN9KTt2YXIgdXQ9eXQubmV3R3JhcGhNYW5hZ2VyKCk7dGhpcy5nbT11dDt2YXIgdnQ9dGhpcy5vcHRpb25zLmVsZXMubm9kZXMoKSxYPXRoaXMub3B0aW9ucy5lbGVzLmVkZ2VzKCk7dGhpcy5yb290PXV0LmFkZFJvb3QoKSx0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QodGhpcy5yb290LHRoaXMuZ2V0VG9wTW9zdE5vZGVzKHZ0KSx5dCk7Zm9yKHZhciBwdD0wO3B0PFgubGVuZ3RoO3B0Kyspe3ZhciBVPVhbcHRdLFR0PXRoaXMuaWRUb0xOb2RlW1UuZGF0YSgic291cmNlIildLG50PXRoaXMuaWRUb0xOb2RlW1UuZGF0YSgidGFyZ2V0IildO2lmKFR0IT09bnQmJlR0LmdldEVkZ2VzQmV0d2VlbihudCkubGVuZ3RoPT0wKXt2YXIgSXQ9dXQuYWRkKHl0Lm5ld0VkZ2UoKSxUdCxudCk7SXQuaWQ9VS5pZCgpfX12YXIgT3Q9ZnVuY3Rpb24oWixDdCl7dHlwZW9mIFo9PSJudW1iZXIiJiYoWj1DdCk7dmFyIHh0PVouZGF0YSgiaWQiKSxIdD1mdC5pZFRvTE5vZGVbeHRdO3JldHVybnt4Okh0LmdldFJlY3QoKS5nZXRDZW50ZXJYKCkseTpIdC5nZXRSZWN0KCkuZ2V0Q2VudGVyWSgpfX0sQnQ9ZnVuY3Rpb24gRXQoKXtmb3IodmFyIFo9ZnVuY3Rpb24oKXttdC5maXQmJm10LmN5LmZpdChtdC5lbGVzLG10LnBhZGRpbmcpLGF0fHwoYXQ9ITAsZnQuY3kub25lKCJsYXlvdXRyZWFkeSIsbXQucmVhZHkpLGZ0LmN5LnRyaWdnZXIoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6ZnR9KSl9LEN0PWZ0Lm9wdGlvbnMucmVmcmVzaCx4dCxIdD0wO0h0PEN0JiYheHQ7SHQrKyl4dD1mdC5zdG9wcGVkfHxmdC5sYXlvdXQudGljaygpO2lmKHh0KXt5dC5jaGVja0xheW91dFN1Y2Nlc3MoKSYmIXl0LmlzU3ViTGF5b3V0JiZ5dC5kb1Bvc3RMYXlvdXQoKSx5dC50aWxpbmdQb3N0TGF5b3V0JiZ5dC50aWxpbmdQb3N0TGF5b3V0KCkseXQuaXNMYXlvdXRGaW5pc2hlZD0hMCxmdC5vcHRpb25zLmVsZXMubm9kZXMoKS5wb3NpdGlvbnMoT3QpLFooKSxmdC5jeS5vbmUoImxheW91dHN0b3AiLGZ0Lm9wdGlvbnMuc3RvcCksZnQuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0OmZ0fSksYnQmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKGJ0KSxhdD0hMTtyZXR1cm59dmFyIExlPWZ0LmxheW91dC5nZXRQb3NpdGlvbnNEYXRhKCk7bXQuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhmdW5jdGlvbihGdCxnbil7aWYodHlwZW9mIEZ0PT0ibnVtYmVyIiYmKEZ0PWduKSwhRnQuaXNQYXJlbnQoKSl7Zm9yKHZhciBTZT1GdC5pZCgpLG1lPUxlW1NlXSxWZT1GdDttZT09bnVsbCYmKG1lPUxlW1ZlLmRhdGEoInBhcmVudCIpXXx8TGVbIkR1bW15Q29tcG91bmRfIitWZS5kYXRhKCJwYXJlbnQiKV0sTGVbU2VdPW1lLFZlPVZlLnBhcmVudCgpWzBdLFZlIT1udWxsKTspO3JldHVybiBtZSE9bnVsbD97eDptZS54LHk6bWUueX06e3g6RnQucG9zaXRpb24oIngiKSx5OkZ0LnBvc2l0aW9uKCJ5Iil9fX0pLFooKSxidD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoRXQpfTtyZXR1cm4geXQuYWRkTGlzdGVuZXIoImxheW91dHN0YXJ0ZWQiLGZ1bmN0aW9uKCl7ZnQub3B0aW9ucy5hbmltYXRlPT09ImR1cmluZyImJihidD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoQnQpKX0pLHl0LnJ1bkxheW91dCgpLHRoaXMub3B0aW9ucy5hbmltYXRlIT09ImR1cmluZyImJihmdC5vcHRpb25zLmVsZXMubm9kZXMoKS5ub3QoIjpwYXJlbnQiKS5sYXlvdXRQb3NpdGlvbnMoZnQsZnQub3B0aW9ucyxPdCksYXQ9ITEpLHRoaXN9LFcucHJvdG90eXBlLmdldFRvcE1vc3ROb2Rlcz1mdW5jdGlvbihhdCl7Zm9yKHZhciBidD17fSxtdD0wO210PGF0Lmxlbmd0aDttdCsrKWJ0W2F0W210XS5pZCgpXT0hMDt2YXIgeXQ9YXQuZmlsdGVyKGZ1bmN0aW9uKGZ0LHV0KXt0eXBlb2YgZnQ9PSJudW1iZXIiJiYoZnQ9dXQpO2Zvcih2YXIgdnQ9ZnQucGFyZW50KClbMF07dnQhPW51bGw7KXtpZihidFt2dC5pZCgpXSlyZXR1cm4hMTt2dD12dC5wYXJlbnQoKVswXX1yZXR1cm4hMH0pO3JldHVybiB5dH0sVy5wcm90b3R5cGUucHJvY2Vzc0NoaWxkcmVuTGlzdD1mdW5jdGlvbihhdCxidCxtdCl7Zm9yKHZhciB5dD1idC5sZW5ndGgsZnQ9MDtmdDx5dDtmdCsrKXt2YXIgdXQ9YnRbZnRdLHZ0PXV0LmNoaWxkcmVuKCksWCxwdD11dC5sYXlvdXREaW1lbnNpb25zKHtub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6dGhpcy5vcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsc30pO2lmKHV0Lm91dGVyV2lkdGgoKSE9bnVsbCYmdXQub3V0ZXJIZWlnaHQoKSE9bnVsbD9YPWF0LmFkZChuZXcgSShtdC5ncmFwaE1hbmFnZXIsbmV3IEIodXQucG9zaXRpb24oIngiKS1wdC53LzIsdXQucG9zaXRpb24oInkiKS1wdC5oLzIpLG5ldyBOKHBhcnNlRmxvYXQocHQudykscGFyc2VGbG9hdChwdC5oKSkpKTpYPWF0LmFkZChuZXcgSSh0aGlzLmdyYXBoTWFuYWdlcikpLFguaWQ9dXQuZGF0YSgiaWQiKSxYLnBhZGRpbmdMZWZ0PXBhcnNlSW50KHV0LmNzcygicGFkZGluZyIpKSxYLnBhZGRpbmdUb3A9cGFyc2VJbnQodXQuY3NzKCJwYWRkaW5nIikpLFgucGFkZGluZ1JpZ2h0PXBhcnNlSW50KHV0LmNzcygicGFkZGluZyIpKSxYLnBhZGRpbmdCb3R0b209cGFyc2VJbnQodXQuY3NzKCJwYWRkaW5nIikpLHRoaXMub3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMmJnV0LmlzUGFyZW50KCkpe3ZhciBVPXV0LmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVOb2RlczohMX0pLncsVHQ9dXQuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU5vZGVzOiExfSkuaCxudD11dC5jc3MoInRleHQtaGFsaWduIik7WC5sYWJlbFdpZHRoPVUsWC5sYWJlbEhlaWdodD1UdCxYLmxhYmVsUG9zPW50fWlmKHRoaXMuaWRUb0xOb2RlW3V0LmRhdGEoImlkIildPVgsaXNOYU4oWC5yZWN0LngpJiYoWC5yZWN0Lng9MCksaXNOYU4oWC5yZWN0LnkpJiYoWC5yZWN0Lnk9MCksdnQhPW51bGwmJnZ0Lmxlbmd0aD4wKXt2YXIgSXQ7SXQ9bXQuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKG10Lm5ld0dyYXBoKCksWCksdGhpcy5wcm9jZXNzQ2hpbGRyZW5MaXN0KEl0LHZ0LG10KX19fSxXLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcHBlZD0hMCx0aGlzfTt2YXIgc3Q9ZnVuY3Rpb24oYnQpe2J0KCJsYXlvdXQiLCJjb3NlLWJpbGtlbnQiLFcpfTt0eXBlb2YgY3l0b3NjYXBlPCJ1IiYmc3QoY3l0b3NjYXBlKSxwLmV4cG9ydHM9c3R9XSl9KX0pKGgkdCk7dmFyIHVZZT1oJHQuZXhwb3J0cztjb25zdCBsWWU9RzcodVllKTtsJHQudXNlKGxZZSk7ZnVuY3Rpb24gZyR0KGksYSxmLHApe2MkdC5kcmF3Tm9kZShpLGEsZixwKSxhLmNoaWxkcmVuJiZhLmNoaWxkcmVuLmZvckVhY2goKHcsbSk9PntnJHQoaSx3LGY8MD9tOmYscCl9KX1mdW5jdGlvbiBoWWUoaSxhKXthLmVkZ2VzKCkubWFwKChmLHApPT57Y29uc3Qgdz1mLmRhdGEoKTtpZihmWzBdLl9wcml2YXRlLmJvZHlCb3VuZHMpe2NvbnN0IG09ZlswXS5fcHJpdmF0ZS5yc2NyYXRjaDtVdC50cmFjZSgiRWRnZTogIixwLHcpLGkuaW5zZXJ0KCJwYXRoIikuYXR0cigiZCIsYE0gJHttLnN0YXJ0WH0sJHttLnN0YXJ0WX0gTCAke20ubWlkWH0sJHttLm1pZFl9IEwke20uZW5kWH0sJHttLmVuZFl9IGApLmF0dHIoImNsYXNzIiwiZWRnZSBzZWN0aW9uLWVkZ2UtIit3LnNlY3Rpb24rIiBlZGdlLWRlcHRoLSIrdy5kZXB0aCl9fSl9ZnVuY3Rpb24gcCR0KGksYSxmLHApe2EuYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e2lkOmkuaWQsbGFiZWxUZXh0OmkuZGVzY3IsaGVpZ2h0OmkuaGVpZ2h0LHdpZHRoOmkud2lkdGgsbGV2ZWw6cCxub2RlSWQ6aS5pZCxwYWRkaW5nOmkucGFkZGluZyx0eXBlOmkudHlwZX0scG9zaXRpb246e3g6aS54LHk6aS55fX0pLGkuY2hpbGRyZW4mJmkuY2hpbGRyZW4uZm9yRWFjaCh3PT57cCR0KHcsYSxmLHArMSksYS5hZGQoe2dyb3VwOiJlZGdlcyIsZGF0YTp7aWQ6YCR7aS5pZH1fJHt3LmlkfWAsc291cmNlOmkuaWQsdGFyZ2V0OncuaWQsZGVwdGg6cCxzZWN0aW9uOncuc2VjdGlvbn19KX0pfWZ1bmN0aW9uIGZZZShpLGEpe3JldHVybiBuZXcgUHJvbWlzZShmPT57Y29uc3QgcD15cigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiaWQiLCJjeSIpLmF0dHIoInN0eWxlIiwiZGlzcGxheTpub25lIiksdz1sJHQoe2NvbnRhaW5lcjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY3kiKSxzdHlsZTpbe3NlbGVjdG9yOiJlZGdlIixzdHlsZTp7ImN1cnZlLXN0eWxlIjoiYmV6aWVyIn19XX0pO3AucmVtb3ZlKCkscCR0KGksdyxhLDApLHcubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG0pe20ubGF5b3V0RGltZW5zaW9ucz0oKT0+e2NvbnN0IGI9bS5kYXRhKCk7cmV0dXJue3c6Yi53aWR0aCxoOmIuaGVpZ2h0fX19KSx3LmxheW91dCh7bmFtZToiY29zZS1iaWxrZW50IixxdWFsaXR5OiJwcm9vZiIsc3R5bGVFbmFibGVkOiExLGFuaW1hdGU6ITF9KS5ydW4oKSx3LnJlYWR5KG09PntVdC5pbmZvKCJSZWFkeSIsbSksZih3KX0pfSl9ZnVuY3Rpb24gZFllKGkpe2kubm9kZXMoKS5tYXAoKGEsZik9Pntjb25zdCBwPWEuZGF0YSgpO3AueD1hLnBvc2l0aW9uKCkueCxwLnk9YS5wb3NpdGlvbigpLnksYyR0LnBvc2l0aW9uTm9kZShwKTtjb25zdCB3PUpndChwLm5vZGVJZCk7VXQuaW5mbygiSWQ6IixmLCJQb3NpdGlvbjogKCIsYS5wb3NpdGlvbigpLngsIiwgIixhLnBvc2l0aW9uKCkueSwiKSIscCksdy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHthLnBvc2l0aW9uKCkueC1wLndpZHRoLzJ9LCAke2EucG9zaXRpb24oKS55LXAuaGVpZ2h0LzJ9KWApLHcuYXR0cigiYXR0ciIsYGFwYS0ke2Z9KWApfSl9Y29uc3QgZ1llPXtkcmF3OmFzeW5jKGksYSxmLHApPT57Y29uc3Qgdz1PZSgpO3cuaHRtbExhYmVscz0hMSxVdC5kZWJ1ZyhgUmVuZGVyaW5nIG1pbmRtYXAgZGlhZ3JhbQpgK2kscC5wYXJzZXIpO2NvbnN0IG09T2UoKS5zZWN1cml0eUxldmVsO2xldCBiO209PT0ic2FuZGJveCImJihiPXlyKCIjaSIrYSkpO2NvbnN0IF89eXIobT09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKS5zZWxlY3QoIiMiK2EpO18uYXBwZW5kKCJnIik7Y29uc3QgQT1wLmRiLmdldE1pbmRtYXAoKSxJPV8uYXBwZW5kKCJnIik7SS5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtZWRnZXMiKTtjb25zdCBCPV8uYXBwZW5kKCJnIik7Qi5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtbm9kZXMiKSxnJHQoQixBLC0xLHcpO2NvbnN0IE49YXdhaXQgZlllKEEsdyk7aFllKEksTiksZFllKE4pLGZUKHZvaWQgMCxfLHcubWluZG1hcC5wYWRkaW5nLHcubWluZG1hcC51c2VNYXhXaWR0aCl9fSxwWWU9aT0+e2xldCBhPSIiO2ZvcihsZXQgZj0wO2Y8aS5USEVNRV9DT0xPUl9MSU1JVDtmKyspaVsibGluZUNvbG9yIitmXT1pWyJsaW5lQ29sb3IiK2ZdfHxpWyJjU2NhbGVJbnYiK2ZdLGlUKGlbImxpbmVDb2xvciIrZl0pP2lbImxpbmVDb2xvciIrZl09YnMoaVsibGluZUNvbG9yIitmXSwyMCk6aVsibGluZUNvbG9yIitmXT0kcyhpWyJsaW5lQ29sb3IiK2ZdLDIwKTtmb3IobGV0IGY9MDtmPGkuVEhFTUVfQ09MT1JfTElNSVQ7ZisrKXtjb25zdCBwPSIiKygxNy0zKmYpO2ErPWAKICAgIC5zZWN0aW9uLSR7Zi0xfSByZWN0LCAuc2VjdGlvbi0ke2YtMX0gcGF0aCwgLnNlY3Rpb24tJHtmLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtmLTF9IHBvbHlnb24sIC5zZWN0aW9uLSR7Zi0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7aVsiY1NjYWxlIitmXX07CiAgICB9CiAgICAuc2VjdGlvbi0ke2YtMX0gdGV4dCB7CiAgICAgZmlsbDogJHtpWyJjU2NhbGVMYWJlbCIrZl19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke2YtMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke2lbImNTY2FsZUxhYmVsIitmXX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7Zi0xfXsKICAgICAgc3Ryb2tlOiAke2lbImNTY2FsZSIrZl19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHtmLTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7cH07CiAgICB9CiAgICAuc2VjdGlvbi0ke2YtMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHtpWyJjU2NhbGVJbnYiK2ZdfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gYX0sYlllPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntkYjpRV2UscmVuZGVyZXI6Z1llLHBhcnNlcjp6V2Usc3R5bGVzOmk9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7cFllKGkpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSwgLnNlY3Rpb24tcm9vdCBwb2x5Z29uICB7CiAgICBmaWxsOiAke2kuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke2kuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLm1pbmRtYXAtbm9kZS1sYWJlbCB7CiAgICBkeTogMWVtOwogICAgYWxpZ25tZW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBucHQ9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihFLF8sQSxJKXtmb3IoQT1BfHx7fSxJPUUubGVuZ3RoO0ktLTtBW0VbSV1dPV8pO3JldHVybiBBfSxhPVsxLDldLGY9WzEsMTBdLHA9WzEsNSwxMCwxMl0sdz17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU0FOS0VZOjQsTkVXTElORTo1LGNzdjo2LG9wdF9lb2Y6NyxyZWNvcmQ6OCxjc3ZfdGFpbDo5LEVPRjoxMCwiZmllbGRbc291cmNlXSI6MTEsQ09NTUE6MTIsImZpZWxkW3RhcmdldF0iOjEzLCJmaWVsZFt2YWx1ZV0iOjE0LGZpZWxkOjE1LGVzY2FwZWQ6MTYsbm9uX2VzY2FwZWQ6MTcsRFFVT1RFOjE4LEVTQ0FQRURfVEVYVDoxOSxOT05fRVNDQVBFRF9URVhUOjIwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTQU5LRVkiLDU6Ik5FV0xJTkUiLDEwOiJFT0YiLDExOiJmaWVsZFtzb3VyY2VdIiwxMjoiQ09NTUEiLDEzOiJmaWVsZFt0YXJnZXRdIiwxNDoiZmllbGRbdmFsdWVdIiwxODoiRFFVT1RFIiwxOToiRVNDQVBFRF9URVhUIiwyMDoiTk9OX0VTQ0FQRURfVEVYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbNiwyXSxbOSwyXSxbOSwwXSxbNywxXSxbNywwXSxbOCw1XSxbMTUsMV0sWzE1LDFdLFsxNiwzXSxbMTcsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oXyxBLEksQixOLFIseil7dmFyIFc9Ui5sZW5ndGgtMTtzd2l0Y2goTil7Y2FzZSA3OmNvbnN0IGV0PUIuZmluZE9yQ3JlYXRlTm9kZShSW1ctNF0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSxzdD1CLmZpbmRPckNyZWF0ZU5vZGUoUltXLTJdLnRyaW0oKS5yZXBsYWNlQWxsKCciIicsJyInKSksYXQ9cGFyc2VGbG9hdChSW1ddLnRyaW0oKSk7Qi5hZGRMaW5rKGV0LHN0LGF0KTticmVhaztjYXNlIDg6Y2FzZSA5OmNhc2UgMTE6dGhpcy4kPVJbV107YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9UltXLTFdO2JyZWFrfX0sdGFibGU6W3szOjEsNDpbMSwyXX0sezE6WzNdfSx7NTpbMSwzXX0sezY6NCw4OjUsMTU6NiwxNjo3LDE3OjgsMTg6YSwyMDpmfSx7MTpbMiw2XSw3OjExLDEwOlsxLDEyXX0saShmLFsyLDRdLHs5OjEzLDU6WzEsMTRdfSksezEyOlsxLDE1XX0saShwLFsyLDhdKSxpKHAsWzIsOV0pLHsxOTpbMSwxNl19LGkocCxbMiwxMV0pLHsxOlsyLDFdfSx7MTpbMiw1XX0saShmLFsyLDJdKSx7NjoxNyw4OjUsMTU6NiwxNjo3LDE3OjgsMTg6YSwyMDpmfSx7MTU6MTgsMTY6NywxNzo4LDE4OmEsMjA6Zn0sezE4OlsxLDE5XX0saShmLFsyLDNdKSx7MTI6WzEsMjBdfSxpKHAsWzIsMTBdKSx7MTU6MjEsMTY6NywxNzo4LDE4OmEsMjA6Zn0saShbMSw1LDEwXSxbMiw3XSldLGRlZmF1bHRBY3Rpb25zOnsxMTpbMiwxXSwxMjpbMiw1XX0scGFyc2VFcnJvcjpmdW5jdGlvbihfLEEpe2lmKEEucmVjb3ZlcmFibGUpdGhpcy50cmFjZShfKTtlbHNle3ZhciBJPW5ldyBFcnJvcihfKTt0aHJvdyBJLmhhc2g9QSxJfX0scGFyc2U6ZnVuY3Rpb24oXyl7dmFyIEE9dGhpcyxJPVswXSxCPVtdLE49W251bGxdLFI9W10sej10aGlzLnRhYmxlLFc9IiIsZXQ9MCxzdD0wLGF0PTIsYnQ9MSxtdD1SLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHl0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZnQ9e3l5Ont9fTtmb3IodmFyIHV0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksdXQpJiYoZnQueXlbdXRdPXRoaXMueXlbdXRdKTt5dC5zZXRJbnB1dChfLGZ0Lnl5KSxmdC55eS5sZXhlcj15dCxmdC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgeXQueXlsbG9jPiJ1IiYmKHl0Lnl5bGxvYz17fSk7dmFyIHZ0PXl0Lnl5bGxvYztSLnB1c2godnQpO3ZhciBYPXl0Lm9wdGlvbnMmJnl0Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBmdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1mdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBwdCgpe3ZhciBIdDtyZXR1cm4gSHQ9Qi5wb3AoKXx8eXQubGV4KCl8fGJ0LHR5cGVvZiBIdCE9Im51bWJlciImJihIdCBpbnN0YW5jZW9mIEFycmF5JiYoQj1IdCxIdD1CLnBvcCgpKSxIdD1BLnN5bWJvbHNfW0h0XXx8SHQpLEh0fWZvcih2YXIgVSxUdCxudCxJdCxPdD17fSxCdCxFdCxaLEN0Ozspe2lmKFR0PUlbSS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tUdF0/bnQ9dGhpcy5kZWZhdWx0QWN0aW9uc1tUdF06KChVPT09bnVsbHx8dHlwZW9mIFU+InUiKSYmKFU9cHQoKSksbnQ9eltUdF0mJnpbVHRdW1VdKSx0eXBlb2YgbnQ+InUifHwhbnQubGVuZ3RofHwhbnRbMF0pe3ZhciB4dD0iIjtDdD1bXTtmb3IoQnQgaW4geltUdF0pdGhpcy50ZXJtaW5hbHNfW0J0XSYmQnQ+YXQmJkN0LnB1c2goIiciK3RoaXMudGVybWluYWxzX1tCdF0rIiciKTt5dC5zaG93UG9zaXRpb24/eHQ9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoZXQrMSkrYDoKYCt5dC5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0N0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bVV18fFUpKyInIjp4dD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhldCsxKSsiOiBVbmV4cGVjdGVkICIrKFU9PWJ0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW1VdfHxVKSsiJyIpLHRoaXMucGFyc2VFcnJvcih4dCx7dGV4dDp5dC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bVV18fFUsbGluZTp5dC55eWxpbmVubyxsb2M6dnQsZXhwZWN0ZWQ6Q3R9KX1pZihudFswXWluc3RhbmNlb2YgQXJyYXkmJm50Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrVHQrIiwgdG9rZW46ICIrVSk7c3dpdGNoKG50WzBdKXtjYXNlIDE6SS5wdXNoKFUpLE4ucHVzaCh5dC55eXRleHQpLFIucHVzaCh5dC55eWxsb2MpLEkucHVzaChudFsxXSksVT1udWxsLHN0PXl0Lnl5bGVuZyxXPXl0Lnl5dGV4dCxldD15dC55eWxpbmVubyx2dD15dC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKEV0PXRoaXMucHJvZHVjdGlvbnNfW250WzFdXVsxXSxPdC4kPU5bTi5sZW5ndGgtRXRdLE90Ll8kPXtmaXJzdF9saW5lOlJbUi5sZW5ndGgtKEV0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6UltSLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlJbUi5sZW5ndGgtKEV0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlJbUi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFgmJihPdC5fJC5yYW5nZT1bUltSLmxlbmd0aC0oRXR8fDEpXS5yYW5nZVswXSxSW1IubGVuZ3RoLTFdLnJhbmdlWzFdXSksSXQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE90LFtXLHN0LGV0LGZ0Lnl5LG50WzFdLE4sUl0uY29uY2F0KG10KSksdHlwZW9mIEl0PCJ1IilyZXR1cm4gSXQ7RXQmJihJPUkuc2xpY2UoMCwtMSpFdCoyKSxOPU4uc2xpY2UoMCwtMSpFdCksUj1SLnNsaWNlKDAsLTEqRXQpKSxJLnB1c2godGhpcy5wcm9kdWN0aW9uc19bbnRbMV1dWzBdKSxOLnB1c2goT3QuJCksUi5wdXNoKE90Ll8kKSxaPXpbSVtJLmxlbmd0aC0yXV1bSVtJLmxlbmd0aC0xXV0sSS5wdXNoKFopO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxtPWZ1bmN0aW9uKCl7dmFyIEU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oQSxJKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEEsSSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoQSl9LHNldElucHV0OmZ1bmN0aW9uKF8sQSl7cmV0dXJuIHRoaXMueXk9QXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Xyx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgXz10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Xyx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Xyx0aGlzLm1hdGNoZWQrPV87dmFyIEE9Xy5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEE/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLF99LHVucHV0OmZ1bmN0aW9uKF8pe3ZhciBBPV8ubGVuZ3RoLEk9Xy5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PV8rdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUEpLHRoaXMub2Zmc2V0LT1BO3ZhciBCPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEkubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1JLmxlbmd0aC0xKTt2YXIgTj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46ST8oSS5sZW5ndGg9PT1CLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrQltCLmxlbmd0aC1JLmxlbmd0aF0ubGVuZ3RoLUlbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1BfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W05bMF0sTlswXSt0aGlzLnl5bGVuZy1BXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oXyl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKF8pKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIF89dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihfLmxlbmd0aD4yMD8iLi4uIjoiIikrXy5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBfPXRoaXMubWF0Y2g7cmV0dXJuIF8ubGVuZ3RoPDIwJiYoXys9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtXy5sZW5ndGgpKSwoXy5zdWJzdHIoMCwyMCkrKF8ubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBfPXRoaXMucGFzdElucHV0KCksQT1uZXcgQXJyYXkoXy5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBfK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtBKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihfLEEpe3ZhciBJLEIsTjtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoTj17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihOLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEI9X1swXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksQiYmKHRoaXMueXlsaW5lbm8rPUIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Qj9CW0IubGVuZ3RoLTFdLmxlbmd0aC1CW0IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rX1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1fWzBdLHRoaXMubWF0Y2grPV9bMF0sdGhpcy5tYXRjaGVzPV8sdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoX1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9X1swXSxJPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEEsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksSSlyZXR1cm4gSTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgUiBpbiBOKXRoaXNbUl09TltSXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBfLEEsSSxCO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIE49dGhpcy5fY3VycmVudFJ1bGVzKCksUj0wO1I8Ti5sZW5ndGg7UisrKWlmKEk9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tOW1JdXSksSSYmKCFBfHxJWzBdLmxlbmd0aD5BWzBdLmxlbmd0aCkpe2lmKEE9SSxCPVIsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoXz10aGlzLnRlc3RfbWF0Y2goSSxOW1JdKSxfIT09ITEpcmV0dXJuIF87aWYodGhpcy5fYmFja3RyYWNrKXtBPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEE/KF89dGhpcy50ZXN0X21hdGNoKEEsTltCXSksXyE9PSExP186ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBBPXRoaXMubmV4dCgpO3JldHVybiBBfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihBKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goQSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gQT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKEEpe3JldHVybiBBPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoQXx8MCksQT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0FdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEEpe3RoaXMuYmVnaW4oQSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOntlYXN5X2tld29yZF9ydWxlczohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihBLEksQixOKXtzd2l0Y2goQil7Y2FzZSAwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiY3N2IiksNDtjYXNlIDE6cmV0dXJuIDEwO2Nhc2UgMjpyZXR1cm4gNTtjYXNlIDM6cmV0dXJuIDEyO2Nhc2UgNDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVzY2FwZWRfdGV4dCIpLDE4O2Nhc2UgNTpyZXR1cm4gMjA7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCJlc2NhcGVkX3RleHQiKSwxODtjYXNlIDc6cmV0dXJuIDE5fX0scnVsZXM6Wy9eKD86c2Fua2V5LWJldGFcYikvLC9eKD86JCkvLC9eKD86KChcdTAwMERcdTAwMEEpfChcdTAwMEEpKSkvLC9eKD86KFx1MDAyQykpLywvXig/OihcdTAwMjIpKS8sL14oPzooW1x1MDAyMC1cdTAwMjFcdTAwMjMtXHUwMDJCXHUwMDJELVx1MDA3RV0pKikvLC9eKD86KFx1MDAyMikoPyEoXHUwMDIyKSkpLywvXig/OigoW1x1MDAyMC1cdTAwMjFcdTAwMjMtXHUwMDJCXHUwMDJELVx1MDA3RV0pfChcdTAwMkMpfChcdTAwMEQpfChcdTAwMEEpfChcdTAwMjIpKFx1MDAyMikpKikvXSxjb25kaXRpb25zOntjc3Y6e3J1bGVzOlsxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITF9LGVzY2FwZWRfdGV4dDp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEV9KCk7dy5sZXhlcj1tO2Z1bmN0aW9uIGIoKXt0aGlzLnl5PXt9fXJldHVybiBiLnByb3RvdHlwZT13LHcuUGFyc2VyPWIsbmV3IGJ9KCk7bnB0LnBhcnNlcj1ucHQ7Y29uc3Qgcks9bnB0O2xldCBpSz1bXSxzSz1bXSxrTD17fTtjb25zdCB3WWU9KCk9PntpSz1bXSxzSz1bXSxrTD17fSxoZygpfTtjbGFzcyB2WWV7Y29uc3RydWN0b3IoYSxmLHA9MCl7dGhpcy5zb3VyY2U9YSx0aGlzLnRhcmdldD1mLHRoaXMudmFsdWU9cH19Y29uc3QgbVllPShpLGEsZik9PntpSy5wdXNoKG5ldyB2WWUoaSxhLGYpKX07Y2xhc3MgeVlle2NvbnN0cnVjdG9yKGEpe3RoaXMuSUQ9YX19Y29uc3QgeFllPXtub2Rlc01hcDprTCxnZXRDb25maWc6KCk9Pk9lKCkuc2Fua2V5LGdldE5vZGVzOigpPT5zSyxnZXRMaW5rczooKT0+aUssZ2V0R3JhcGg6KCk9Pih7bm9kZXM6c0subWFwKGk9Pih7aWQ6aS5JRH0pKSxsaW5rczppSy5tYXAoaT0+KHtzb3VyY2U6aS5zb3VyY2UuSUQsdGFyZ2V0OmkudGFyZ2V0LklELHZhbHVlOmkudmFsdWV9KSl9KSxhZGRMaW5rOm1ZZSxmaW5kT3JDcmVhdGVOb2RlOmk9PihpPUtyLnNhbml0aXplVGV4dChpLE9lKCkpLGtMW2ldfHwoa0xbaV09bmV3IHlZZShpKSxzSy5wdXNoKGtMW2ldKSksa0xbaV0pLGdldEFjY1RpdGxlOmZnLHNldEFjY1RpdGxlOkUwLGdldEFjY0Rlc2NyaXB0aW9uOmdnLHNldEFjY0Rlc2NyaXB0aW9uOmRnLGdldERpYWdyYW1UaXRsZTpwZyxzZXREaWFncmFtVGl0bGU6TmIsY2xlYXI6d1llfTtmdW5jdGlvbiBiJHQoaSxhKXtsZXQgZjtpZihhPT09dm9pZCAwKWZvcihjb25zdCBwIG9mIGkpcCE9bnVsbCYmKGY8cHx8Zj09PXZvaWQgMCYmcD49cCkmJihmPXApO2Vsc2V7bGV0IHA9LTE7Zm9yKGxldCB3IG9mIGkpKHc9YSh3LCsrcCxpKSkhPW51bGwmJihmPHd8fGY9PT12b2lkIDAmJnc+PXcpJiYoZj13KX1yZXR1cm4gZn1mdW5jdGlvbiB3JHQoaSxhKXtsZXQgZjtpZihhPT09dm9pZCAwKWZvcihjb25zdCBwIG9mIGkpcCE9bnVsbCYmKGY+cHx8Zj09PXZvaWQgMCYmcD49cCkmJihmPXApO2Vsc2V7bGV0IHA9LTE7Zm9yKGxldCB3IG9mIGkpKHc9YSh3LCsrcCxpKSkhPW51bGwmJihmPnd8fGY9PT12b2lkIDAmJnc+PXcpJiYoZj13KX1yZXR1cm4gZn1mdW5jdGlvbiBycHQoaSxhKXtsZXQgZj0wO2lmKGE9PT12b2lkIDApZm9yKGxldCBwIG9mIGkpKHA9K3ApJiYoZis9cCk7ZWxzZXtsZXQgcD0tMTtmb3IobGV0IHcgb2YgaSkodz0rYSh3LCsrcCxpKSkmJihmKz13KX1yZXR1cm4gZn1mdW5jdGlvbiBrWWUoaSl7cmV0dXJuIGkudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIEVZZShpKXtyZXR1cm4gaS5kZXB0aH1mdW5jdGlvbiBUWWUoaSxhKXtyZXR1cm4gYS0xLWkuaGVpZ2h0fWZ1bmN0aW9uIHYkdChpLGEpe3JldHVybiBpLnNvdXJjZUxpbmtzLmxlbmd0aD9pLmRlcHRoOmEtMX1mdW5jdGlvbiBDWWUoaSl7cmV0dXJuIGkudGFyZ2V0TGlua3MubGVuZ3RoP2kuZGVwdGg6aS5zb3VyY2VMaW5rcy5sZW5ndGg/dyR0KGkuc291cmNlTGlua3Msa1llKS0xOjB9ZnVuY3Rpb24gYUsoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIG0kdChpLGEpe3JldHVybiBvSyhpLnNvdXJjZSxhLnNvdXJjZSl8fGkuaW5kZXgtYS5pbmRleH1mdW5jdGlvbiB5JHQoaSxhKXtyZXR1cm4gb0soaS50YXJnZXQsYS50YXJnZXQpfHxpLmluZGV4LWEuaW5kZXh9ZnVuY3Rpb24gb0soaSxhKXtyZXR1cm4gaS55MC1hLnkwfWZ1bmN0aW9uIGlwdChpKXtyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBfWWUoaSl7cmV0dXJuIGkuaW5kZXh9ZnVuY3Rpb24gU1llKGkpe3JldHVybiBpLm5vZGVzfWZ1bmN0aW9uIEFZZShpKXtyZXR1cm4gaS5saW5rc31mdW5jdGlvbiB4JHQoaSxhKXtjb25zdCBmPWkuZ2V0KGEpO2lmKCFmKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIithKTtyZXR1cm4gZn1mdW5jdGlvbiBrJHQoe25vZGVzOml9KXtmb3IoY29uc3QgYSBvZiBpKXtsZXQgZj1hLnkwLHA9Zjtmb3IoY29uc3QgdyBvZiBhLnNvdXJjZUxpbmtzKXcueTA9Zit3LndpZHRoLzIsZis9dy53aWR0aDtmb3IoY29uc3QgdyBvZiBhLnRhcmdldExpbmtzKXcueTE9cCt3LndpZHRoLzIscCs9dy53aWR0aH19ZnVuY3Rpb24gTFllKCl7bGV0IGk9MCxhPTAsZj0xLHA9MSx3PTI0LG09OCxiLEU9X1llLF89diR0LEEsSSxCPVNZZSxOPUFZZSxSPTY7ZnVuY3Rpb24geigpe2NvbnN0IE90PXtub2RlczpCLmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczpOLmFwcGx5KG51bGwsYXJndW1lbnRzKX07cmV0dXJuIFcoT3QpLGV0KE90KSxzdChPdCksYXQoT3QpLHl0KE90KSxrJHQoT3QpLE90fXoudXBkYXRlPWZ1bmN0aW9uKE90KXtyZXR1cm4gayR0KE90KSxPdH0sei5ub2RlSWQ9ZnVuY3Rpb24oT3Qpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPXR5cGVvZiBPdD09ImZ1bmN0aW9uIj9PdDphSyhPdCkseik6RX0sei5ub2RlQWxpZ249ZnVuY3Rpb24oT3Qpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPXR5cGVvZiBPdD09ImZ1bmN0aW9uIj9PdDphSyhPdCkseik6X30sei5ub2RlU29ydD1mdW5jdGlvbihPdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9T3Qseik6QX0sei5ub2RlV2lkdGg9ZnVuY3Rpb24oT3Qpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PStPdCx6KTp3fSx6Lm5vZGVQYWRkaW5nPWZ1bmN0aW9uKE90KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1iPStPdCx6KTptfSx6Lm5vZGVzPWZ1bmN0aW9uKE90KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQj10eXBlb2YgT3Q9PSJmdW5jdGlvbiI/T3Q6YUsoT3QpLHopOkJ9LHoubGlua3M9ZnVuY3Rpb24oT3Qpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPXR5cGVvZiBPdD09ImZ1bmN0aW9uIj9PdDphSyhPdCkseik6Tn0sei5saW5rU29ydD1mdW5jdGlvbihPdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEk9T3Qseik6SX0sei5zaXplPWZ1bmN0aW9uKE90KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1hPTAsZj0rT3RbMF0scD0rT3RbMV0seik6W2YtaSxwLWFdfSx6LmV4dGVudD1mdW5jdGlvbihPdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K090WzBdWzBdLGY9K090WzFdWzBdLGE9K090WzBdWzFdLHA9K090WzFdWzFdLHopOltbaSxhXSxbZixwXV19LHouaXRlcmF0aW9ucz1mdW5jdGlvbihPdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFI9K090LHopOlJ9O2Z1bmN0aW9uIFcoe25vZGVzOk90LGxpbmtzOkJ0fSl7Zm9yKGNvbnN0W1osQ3Rdb2YgT3QuZW50cmllcygpKUN0LmluZGV4PVosQ3Quc291cmNlTGlua3M9W10sQ3QudGFyZ2V0TGlua3M9W107Y29uc3QgRXQ9bmV3IE1hcChPdC5tYXAoKFosQ3QpPT5bRShaLEN0LE90KSxaXSkpO2Zvcihjb25zdFtaLEN0XW9mIEJ0LmVudHJpZXMoKSl7Q3QuaW5kZXg9WjtsZXR7c291cmNlOnh0LHRhcmdldDpIdH09Q3Q7dHlwZW9mIHh0IT0ib2JqZWN0IiYmKHh0PUN0LnNvdXJjZT14JHQoRXQseHQpKSx0eXBlb2YgSHQhPSJvYmplY3QiJiYoSHQ9Q3QudGFyZ2V0PXgkdChFdCxIdCkpLHh0LnNvdXJjZUxpbmtzLnB1c2goQ3QpLEh0LnRhcmdldExpbmtzLnB1c2goQ3QpfWlmKEkhPW51bGwpZm9yKGNvbnN0e3NvdXJjZUxpbmtzOlosdGFyZ2V0TGlua3M6Q3R9b2YgT3QpWi5zb3J0KEkpLEN0LnNvcnQoSSl9ZnVuY3Rpb24gZXQoe25vZGVzOk90fSl7Zm9yKGNvbnN0IEJ0IG9mIE90KUJ0LnZhbHVlPUJ0LmZpeGVkVmFsdWU9PT12b2lkIDA/TWF0aC5tYXgocnB0KEJ0LnNvdXJjZUxpbmtzLGlwdCkscnB0KEJ0LnRhcmdldExpbmtzLGlwdCkpOkJ0LmZpeGVkVmFsdWV9ZnVuY3Rpb24gc3Qoe25vZGVzOk90fSl7Y29uc3QgQnQ9T3QubGVuZ3RoO2xldCBFdD1uZXcgU2V0KE90KSxaPW5ldyBTZXQsQ3Q9MDtmb3IoO0V0LnNpemU7KXtmb3IoY29uc3QgeHQgb2YgRXQpe3h0LmRlcHRoPUN0O2Zvcihjb25zdHt0YXJnZXQ6SHR9b2YgeHQuc291cmNlTGlua3MpWi5hZGQoSHQpfWlmKCsrQ3Q+QnQpdGhyb3cgbmV3IEVycm9yKCJjaXJjdWxhciBsaW5rIik7RXQ9WixaPW5ldyBTZXR9fWZ1bmN0aW9uIGF0KHtub2RlczpPdH0pe2NvbnN0IEJ0PU90Lmxlbmd0aDtsZXQgRXQ9bmV3IFNldChPdCksWj1uZXcgU2V0LEN0PTA7Zm9yKDtFdC5zaXplOyl7Zm9yKGNvbnN0IHh0IG9mIEV0KXt4dC5oZWlnaHQ9Q3Q7Zm9yKGNvbnN0e3NvdXJjZTpIdH1vZiB4dC50YXJnZXRMaW5rcylaLmFkZChIdCl9aWYoKytDdD5CdCl0aHJvdyBuZXcgRXJyb3IoImNpcmN1bGFyIGxpbmsiKTtFdD1aLFo9bmV3IFNldH19ZnVuY3Rpb24gYnQoe25vZGVzOk90fSl7Y29uc3QgQnQ9YiR0KE90LEN0PT5DdC5kZXB0aCkrMSxFdD0oZi1pLXcpLyhCdC0xKSxaPW5ldyBBcnJheShCdCk7Zm9yKGNvbnN0IEN0IG9mIE90KXtjb25zdCB4dD1NYXRoLm1heCgwLE1hdGgubWluKEJ0LTEsTWF0aC5mbG9vcihfLmNhbGwobnVsbCxDdCxCdCkpKSk7Q3QubGF5ZXI9eHQsQ3QueDA9aSt4dCpFdCxDdC54MT1DdC54MCt3LFpbeHRdP1pbeHRdLnB1c2goQ3QpOlpbeHRdPVtDdF19aWYoQSlmb3IoY29uc3QgQ3Qgb2YgWilDdC5zb3J0KEEpO3JldHVybiBafWZ1bmN0aW9uIG10KE90KXtjb25zdCBCdD13JHQoT3QsRXQ9PihwLWEtKEV0Lmxlbmd0aC0xKSpiKS9ycHQoRXQsaXB0KSk7Zm9yKGNvbnN0IEV0IG9mIE90KXtsZXQgWj1hO2Zvcihjb25zdCBDdCBvZiBFdCl7Q3QueTA9WixDdC55MT1aK0N0LnZhbHVlKkJ0LFo9Q3QueTErYjtmb3IoY29uc3QgeHQgb2YgQ3Quc291cmNlTGlua3MpeHQud2lkdGg9eHQudmFsdWUqQnR9Wj0ocC1aK2IpLyhFdC5sZW5ndGgrMSk7Zm9yKGxldCBDdD0wO0N0PEV0Lmxlbmd0aDsrK0N0KXtjb25zdCB4dD1FdFtDdF07eHQueTArPVoqKEN0KzEpLHh0LnkxKz1aKihDdCsxKX1UdChFdCl9fWZ1bmN0aW9uIHl0KE90KXtjb25zdCBCdD1idChPdCk7Yj1NYXRoLm1pbihtLChwLWEpLyhiJHQoQnQsRXQ9PkV0Lmxlbmd0aCktMSkpLG10KEJ0KTtmb3IobGV0IEV0PTA7RXQ8UjsrK0V0KXtjb25zdCBaPU1hdGgucG93KC45OSxFdCksQ3Q9TWF0aC5tYXgoMS1aLChFdCsxKS9SKTt1dChCdCxaLEN0KSxmdChCdCxaLEN0KX19ZnVuY3Rpb24gZnQoT3QsQnQsRXQpe2ZvcihsZXQgWj0xLEN0PU90Lmxlbmd0aDtaPEN0OysrWil7Y29uc3QgeHQ9T3RbWl07Zm9yKGNvbnN0IEh0IG9mIHh0KXtsZXQgTGU9MCxGdD0wO2Zvcihjb25zdHtzb3VyY2U6U2UsdmFsdWU6bWV9b2YgSHQudGFyZ2V0TGlua3Mpe2xldCBWZT1tZSooSHQubGF5ZXItU2UubGF5ZXIpO0xlKz1udChTZSxIdCkqVmUsRnQrPVZlfWlmKCEoRnQ+MCkpY29udGludWU7bGV0IGduPShMZS9GdC1IdC55MCkqQnQ7SHQueTArPWduLEh0LnkxKz1nbixVKEh0KX1BPT09dm9pZCAwJiZ4dC5zb3J0KG9LKSx2dCh4dCxFdCl9fWZ1bmN0aW9uIHV0KE90LEJ0LEV0KXtmb3IobGV0IFo9T3QubGVuZ3RoLEN0PVotMjtDdD49MDstLUN0KXtjb25zdCB4dD1PdFtDdF07Zm9yKGNvbnN0IEh0IG9mIHh0KXtsZXQgTGU9MCxGdD0wO2Zvcihjb25zdHt0YXJnZXQ6U2UsdmFsdWU6bWV9b2YgSHQuc291cmNlTGlua3Mpe2xldCBWZT1tZSooU2UubGF5ZXItSHQubGF5ZXIpO0xlKz1JdChIdCxTZSkqVmUsRnQrPVZlfWlmKCEoRnQ+MCkpY29udGludWU7bGV0IGduPShMZS9GdC1IdC55MCkqQnQ7SHQueTArPWduLEh0LnkxKz1nbixVKEh0KX1BPT09dm9pZCAwJiZ4dC5zb3J0KG9LKSx2dCh4dCxFdCl9fWZ1bmN0aW9uIHZ0KE90LEJ0KXtjb25zdCBFdD1PdC5sZW5ndGg+PjEsWj1PdFtFdF07cHQoT3QsWi55MC1iLEV0LTEsQnQpLFgoT3QsWi55MStiLEV0KzEsQnQpLHB0KE90LHAsT3QubGVuZ3RoLTEsQnQpLFgoT3QsYSwwLEJ0KX1mdW5jdGlvbiBYKE90LEJ0LEV0LFope2Zvcig7RXQ8T3QubGVuZ3RoOysrRXQpe2NvbnN0IEN0PU90W0V0XSx4dD0oQnQtQ3QueTApKlo7eHQ+MWUtNiYmKEN0LnkwKz14dCxDdC55MSs9eHQpLEJ0PUN0LnkxK2J9fWZ1bmN0aW9uIHB0KE90LEJ0LEV0LFope2Zvcig7RXQ+PTA7LS1FdCl7Y29uc3QgQ3Q9T3RbRXRdLHh0PShDdC55MS1CdCkqWjt4dD4xZS02JiYoQ3QueTAtPXh0LEN0LnkxLT14dCksQnQ9Q3QueTAtYn19ZnVuY3Rpb24gVSh7c291cmNlTGlua3M6T3QsdGFyZ2V0TGlua3M6QnR9KXtpZihJPT09dm9pZCAwKXtmb3IoY29uc3R7c291cmNlOntzb3VyY2VMaW5rczpFdH19b2YgQnQpRXQuc29ydCh5JHQpO2Zvcihjb25zdHt0YXJnZXQ6e3RhcmdldExpbmtzOkV0fX1vZiBPdClFdC5zb3J0KG0kdCl9fWZ1bmN0aW9uIFR0KE90KXtpZihJPT09dm9pZCAwKWZvcihjb25zdHtzb3VyY2VMaW5rczpCdCx0YXJnZXRMaW5rczpFdH1vZiBPdClCdC5zb3J0KHkkdCksRXQuc29ydChtJHQpfWZ1bmN0aW9uIG50KE90LEJ0KXtsZXQgRXQ9T3QueTAtKE90LnNvdXJjZUxpbmtzLmxlbmd0aC0xKSpiLzI7Zm9yKGNvbnN0e3RhcmdldDpaLHdpZHRoOkN0fW9mIE90LnNvdXJjZUxpbmtzKXtpZihaPT09QnQpYnJlYWs7RXQrPUN0K2J9Zm9yKGNvbnN0e3NvdXJjZTpaLHdpZHRoOkN0fW9mIEJ0LnRhcmdldExpbmtzKXtpZihaPT09T3QpYnJlYWs7RXQtPUN0fXJldHVybiBFdH1mdW5jdGlvbiBJdChPdCxCdCl7bGV0IEV0PUJ0LnkwLShCdC50YXJnZXRMaW5rcy5sZW5ndGgtMSkqYi8yO2Zvcihjb25zdHtzb3VyY2U6Wix3aWR0aDpDdH1vZiBCdC50YXJnZXRMaW5rcyl7aWYoWj09PU90KWJyZWFrO0V0Kz1DdCtifWZvcihjb25zdHt0YXJnZXQ6Wix3aWR0aDpDdH1vZiBPdC5zb3VyY2VMaW5rcyl7aWYoWj09PUJ0KWJyZWFrO0V0LT1DdH1yZXR1cm4gRXR9cmV0dXJuIHp9dmFyIHNwdD1NYXRoLlBJLGFwdD0yKnNwdCxPVD0xZS02LE1ZZT1hcHQtT1Q7ZnVuY3Rpb24gb3B0KCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gRSR0KCl7cmV0dXJuIG5ldyBvcHR9b3B0LnByb3RvdHlwZT1FJHQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvcHQsbW92ZVRvOmZ1bmN0aW9uKGksYSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSthKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oaSxhKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K2EpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGksYSxmLHApe3RoaXMuXys9IlEiKyAraSsiLCIrICthKyIsIisodGhpcy5feDE9K2YpKyIsIisodGhpcy5feTE9K3ApfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGksYSxmLHAsdyxtKXt0aGlzLl8rPSJDIisgK2krIiwiKyArYSsiLCIrICtmKyIsIisgK3ArIiwiKyh0aGlzLl94MT0rdykrIiwiKyh0aGlzLl95MT0rbSl9LGFyY1RvOmZ1bmN0aW9uKGksYSxmLHAsdyl7aT0raSxhPSthLGY9K2YscD0rcCx3PSt3O3ZhciBtPXRoaXMuX3gxLGI9dGhpcy5feTEsRT1mLWksXz1wLWEsQT1tLWksST1iLWEsQj1BKkErSSpJO2lmKHc8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIit3KTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWkpKyIsIisodGhpcy5feTE9YSk7ZWxzZSBpZihCPk9UKWlmKCEoTWF0aC5hYnMoSSpFLV8qQSk+T1QpfHwhdyl0aGlzLl8rPSJMIisodGhpcy5feDE9aSkrIiwiKyh0aGlzLl95MT1hKTtlbHNle3ZhciBOPWYtbSxSPXAtYix6PUUqRStfKl8sVz1OKk4rUipSLGV0PU1hdGguc3FydCh6KSxzdD1NYXRoLnNxcnQoQiksYXQ9dypNYXRoLnRhbigoc3B0LU1hdGguYWNvcygoeitCLVcpLygyKmV0KnN0KSkpLzIpLGJ0PWF0L3N0LG10PWF0L2V0O01hdGguYWJzKGJ0LTEpPk9UJiYodGhpcy5fKz0iTCIrKGkrYnQqQSkrIiwiKyhhK2J0KkkpKSx0aGlzLl8rPSJBIit3KyIsIit3KyIsMCwwLCIrICsoSSpOPkEqUikrIiwiKyh0aGlzLl94MT1pK210KkUpKyIsIisodGhpcy5feTE9YSttdCpfKX19LGFyYzpmdW5jdGlvbihpLGEsZixwLHcsbSl7aT0raSxhPSthLGY9K2YsbT0hIW07dmFyIGI9ZipNYXRoLmNvcyhwKSxFPWYqTWF0aC5zaW4ocCksXz1pK2IsQT1hK0UsST0xXm0sQj1tP3Atdzp3LXA7aWYoZjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2YpO3RoaXMuX3gxPT09bnVsbD90aGlzLl8rPSJNIitfKyIsIitBOihNYXRoLmFicyh0aGlzLl94MS1fKT5PVHx8TWF0aC5hYnModGhpcy5feTEtQSk+T1QpJiYodGhpcy5fKz0iTCIrXysiLCIrQSksZiYmKEI8MCYmKEI9QiVhcHQrYXB0KSxCPk1ZZT90aGlzLl8rPSJBIitmKyIsIitmKyIsMCwxLCIrSSsiLCIrKGktYikrIiwiKyhhLUUpKyJBIitmKyIsIitmKyIsMCwxLCIrSSsiLCIrKHRoaXMuX3gxPV8pKyIsIisodGhpcy5feTE9QSk6Qj5PVCYmKHRoaXMuXys9IkEiK2YrIiwiK2YrIiwwLCIrICsoQj49c3B0KSsiLCIrSSsiLCIrKHRoaXMuX3gxPWkrZipNYXRoLmNvcyh3KSkrIiwiKyh0aGlzLl95MT1hK2YqTWF0aC5zaW4odykpKSl9LHJlY3Q6ZnVuY3Rpb24oaSxhLGYscCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSthKSsiaCIrICtmKyJ2IisgK3ArImgiKy1mKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07ZnVuY3Rpb24gVCR0KGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1mdW5jdGlvbiBEWWUoaSl7cmV0dXJuIGlbMF19ZnVuY3Rpb24gSVllKGkpe3JldHVybiBpWzFdfXZhciBPWWU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIFBZZShpKXtyZXR1cm4gaS5zb3VyY2V9ZnVuY3Rpb24gRlllKGkpe3JldHVybiBpLnRhcmdldH1mdW5jdGlvbiBOWWUoaSl7dmFyIGE9UFllLGY9RlllLHA9RFllLHc9SVllLG09bnVsbDtmdW5jdGlvbiBiKCl7dmFyIEUsXz1PWWUuY2FsbChhcmd1bWVudHMpLEE9YS5hcHBseSh0aGlzLF8pLEk9Zi5hcHBseSh0aGlzLF8pO2lmKG18fChtPUU9RSR0KCkpLGkobSwrcC5hcHBseSh0aGlzLChfWzBdPUEsXykpLCt3LmFwcGx5KHRoaXMsXyksK3AuYXBwbHkodGhpcywoX1swXT1JLF8pKSwrdy5hcHBseSh0aGlzLF8pKSxFKXJldHVybiBtPW51bGwsRSsiInx8bnVsbH1yZXR1cm4gYi5zb3VyY2U9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9RSxiKTphfSxiLnRhcmdldD1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1FLGIpOmZ9LGIueD1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10eXBlb2YgRT09ImZ1bmN0aW9uIj9FOlQkdCgrRSksYik6cH0sYi55PWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PXR5cGVvZiBFPT0iZnVuY3Rpb24iP0U6VCR0KCtFKSxiKTp3fSxiLmNvbnRleHQ9ZnVuY3Rpb24oRSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09RT8/bnVsbCxiKTptfSxifWZ1bmN0aW9uIEJZZShpLGEsZixwLHcpe2kubW92ZVRvKGEsZiksaS5iZXppZXJDdXJ2ZVRvKGE9KGErcCkvMixmLGEsdyxwLHcpfWZ1bmN0aW9uIFJZZSgpe3JldHVybiBOWWUoQlllKX1mdW5jdGlvbiBqWWUoaSl7cmV0dXJuW2kuc291cmNlLngxLGkueTBdfWZ1bmN0aW9uICRZZShpKXtyZXR1cm5baS50YXJnZXQueDAsaS55MV19ZnVuY3Rpb24gelllKCl7cmV0dXJuIFJZZSgpLnNvdXJjZShqWWUpLnRhcmdldCgkWWUpfWNvbnN0IEMkdD1jbGFzcyBSTHR7c3RhdGljIG5leHQoYSl7cmV0dXJuIG5ldyBSTHQoYSsgKytSTHQuY291bnQpfWNvbnN0cnVjdG9yKGEpe3RoaXMuaWQ9YSx0aGlzLmhyZWY9YCMke2F9YH10b1N0cmluZygpe3JldHVybiJ1cmwoIit0aGlzLmhyZWYrIikifX07QyR0LmNvdW50PTA7bGV0IF8kdD1DJHQ7Y29uc3QgcVllPXtsZWZ0OkVZZSxyaWdodDpUWWUsY2VudGVyOkNZZSxqdXN0aWZ5OnYkdH0sSFllPXtkcmF3OmZ1bmN0aW9uKGksYSxmLHApe2NvbnN0e3NlY3VyaXR5TGV2ZWw6dyxzYW5rZXk6bX09T2UoKSxiPVNPdC5zYW5rZXk7bGV0IEU7dz09PSJzYW5kYm94IiYmKEU9eXIoIiNpIithKSk7Y29uc3QgXz15cih3PT09InNhbmRib3giP0Uubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLEE9dz09PSJzYW5kYm94Ij9fLnNlbGVjdChgW2lkPSIke2F9Il1gKTp5cihgW2lkPSIke2F9Il1gKSxJPShtPT1udWxsP3ZvaWQgMDptLndpZHRoKT8/Yi53aWR0aCxCPShtPT1udWxsP3ZvaWQgMDptLmhlaWdodCk/P2Iud2lkdGgsTj0obT09bnVsbD92b2lkIDA6bS51c2VNYXhXaWR0aCk/P2IudXNlTWF4V2lkdGgsUj0obT09bnVsbD92b2lkIDA6bS5ub2RlQWxpZ25tZW50KT8/Yi5ub2RlQWxpZ25tZW50LHo9KG09PW51bGw/dm9pZCAwOm0ucHJlZml4KT8/Yi5wcmVmaXgsVz0obT09bnVsbD92b2lkIDA6bS5zdWZmaXgpPz9iLnN1ZmZpeCxldD0obT09bnVsbD92b2lkIDA6bS5zaG93VmFsdWVzKT8/Yi5zaG93VmFsdWVzO2swKEEsQixJLE4pO2NvbnN0IHN0PXAuZGIuZ2V0R3JhcGgoKSxhdD1xWWVbUl0sYnQ9MTA7TFllKCkubm9kZUlkKHB0PT5wdC5pZCkubm9kZVdpZHRoKGJ0KS5ub2RlUGFkZGluZygxMCsoZXQ/MTU6MCkpLm5vZGVBbGlnbihhdCkuZXh0ZW50KFtbMCwwXSxbSSxCXV0pKHN0KTtjb25zdCB5dD1YVShYN2UpO0EuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpLnNlbGVjdEFsbCgiLm5vZGUiKS5kYXRhKHN0Lm5vZGVzKS5qb2luKCJnIikuYXR0cigiY2xhc3MiLCJub2RlIikuYXR0cigiaWQiLHB0PT4ocHQudWlkPV8kdC5uZXh0KCJub2RlLSIpKS5pZCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihwdCl7cmV0dXJuInRyYW5zbGF0ZSgiK3B0LngwKyIsIitwdC55MCsiKSJ9KS5hdHRyKCJ4IixwdD0+cHQueDApLmF0dHIoInkiLHB0PT5wdC55MCkuYXBwZW5kKCJyZWN0IikuYXR0cigiaGVpZ2h0IixwdD0+cHQueTEtcHQueTApLmF0dHIoIndpZHRoIixwdD0+cHQueDEtcHQueDApLmF0dHIoImZpbGwiLHB0PT55dChwdC5pZCkpO2NvbnN0IGZ0PSh7aWQ6cHQsdmFsdWU6VX0pPT5ldD9gJHtwdH0KJHt6fSR7TWF0aC5yb3VuZChVKjEwMCkvMTAwfSR7V31gOnB0O0EuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlLWxhYmVscyIpLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoImZvbnQtc2l6ZSIsMTQpLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoc3Qubm9kZXMpLmpvaW4oInRleHQiKS5hdHRyKCJ4IixwdD0+cHQueDA8SS8yP3B0LngxKzY6cHQueDAtNikuYXR0cigieSIscHQ9PihwdC55MStwdC55MCkvMikuYXR0cigiZHkiLGAke2V0PyIwIjoiMC4zNSJ9ZW1gKS5hdHRyKCJ0ZXh0LWFuY2hvciIscHQ9PnB0LngwPEkvMj8ic3RhcnQiOiJlbmQiKS50ZXh0KGZ0KTtjb25zdCB1dD1BLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGlua3MiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwuNSkuc2VsZWN0QWxsKCIubGluayIpLmRhdGEoc3QubGlua3MpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsImxpbmsiKS5zdHlsZSgibWl4LWJsZW5kLW1vZGUiLCJtdWx0aXBseSIpLHZ0PShtPT1udWxsP3ZvaWQgMDptLmxpbmtDb2xvcil8fCJncmFkaWVudCI7aWYodnQ9PT0iZ3JhZGllbnQiKXtjb25zdCBwdD11dC5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cigiaWQiLFU9PihVLnVpZD1fJHQubmV4dCgibGluZWFyR3JhZGllbnQtIikpLmlkKS5hdHRyKCJncmFkaWVudFVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJ4MSIsVT0+VS5zb3VyY2UueDEpLmF0dHIoIngyIixVPT5VLnRhcmdldC54MCk7cHQuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IiwiMCUiKS5hdHRyKCJzdG9wLWNvbG9yIixVPT55dChVLnNvdXJjZS5pZCkpLHB0LmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIsIjEwMCUiKS5hdHRyKCJzdG9wLWNvbG9yIixVPT55dChVLnRhcmdldC5pZCkpfWxldCBYO3N3aXRjaCh2dCl7Y2FzZSJncmFkaWVudCI6WD1wdD0+cHQudWlkO2JyZWFrO2Nhc2Uic291cmNlIjpYPXB0PT55dChwdC5zb3VyY2UuaWQpO2JyZWFrO2Nhc2UidGFyZ2V0IjpYPXB0PT55dChwdC50YXJnZXQuaWQpO2JyZWFrO2RlZmF1bHQ6WD12dH11dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIix6WWUoKSkuYXR0cigic3Ryb2tlIixYKS5hdHRyKCJzdHJva2Utd2lkdGgiLHB0PT5NYXRoLm1heCgxLHB0LndpZHRoKSl9fSxWWWU9aT0+aS5yZXBsYWNlQWxsKC9eW15cU1xuXHJdK3xbXlxTXG5ccl0rJC9nLCIiKS5yZXBsYWNlQWxsKC8oW1xuXHJdKSsvZyxgCmApLnRyaW0oKSxHWWU9cksucGFyc2UuYmluZChySyk7cksucGFyc2U9aT0+R1llKFZZZShpKSk7Y29uc3QgVVllPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6ckssZGI6eFllLHJlbmRlcmVyOkhZZX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7cmV0dXJuIEJifSk7Cg==`; |